summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/libgd-src/src
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/libgd-src/src')
-rw-r--r--Build/source/libs/gd/libgd-src/src/CMakeLists.txt211
-rw-r--r--Build/source/libs/gd/libgd-src/src/COPYING51
-rw-r--r--Build/source/libs/gd/libgd-src/src/Makefile.am130
-rw-r--r--Build/source/libs/gd/libgd-src/src/annotate.c196
-rw-r--r--Build/source/libs/gd/libgd-src/src/bdftogd204
-rw-r--r--Build/source/libs/gd/libgd-src/src/bmp.h111
-rw-r--r--Build/source/libs/gd/libgd-src/src/circletexttest.c64
-rw-r--r--Build/source/libs/gd/libgd-src/src/config.h.cmake129
-rw-r--r--Build/source/libs/gd/libgd-src/src/config.hin135
-rw-r--r--Build/source/libs/gd/libgd-src/src/demoin.pngbin10027 -> 0 bytes
-rw-r--r--Build/source/libs/gd/libgd-src/src/entities.h277
-rw-r--r--Build/source/libs/gd/libgd-src/src/entities.html682
-rw-r--r--Build/source/libs/gd/libgd-src/src/entities.tcl50
-rw-r--r--Build/source/libs/gd/libgd-src/src/fontconfigtest.c42
-rw-r--r--Build/source/libs/gd/libgd-src/src/fontsizetest.c84
-rw-r--r--Build/source/libs/gd/libgd-src/src/fontwheeltest.c136
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd.c4546
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd.h1640
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd2copypal.c62
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd2time.c60
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd2togif.c45
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd2topng.c59
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_bmp.c1165
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_color.c35
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_color.h14
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_color_map.c794
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_color_map.h30
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_color_map_test.c27
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_color_match.c62
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_crop.c300
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_errors.h46
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_filename.c253
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_filter.c1062
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_gd.c445
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_gd2.c1194
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_gif_in.c759
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_gif_out.c1636
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_intern.h86
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_interpolation.c2343
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io.c212
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io.h93
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io_dp.c431
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io_file.c136
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io_ss.c146
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io_stream.cxx144
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_io_stream.h125
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_jpeg.c1266
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_matrix.c335
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_nnquant.c631
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_nnquant.h16
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_png.c1145
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_rotate.c364
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_security.c32
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_ss.c62
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_tga.c360
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_tga.h52
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_tiff.c1113
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_topal.c1803
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_transform.c122
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_version.c48
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_wbmp.c293
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_webp.c417
-rw-r--r--Build/source/libs/gd/libgd-src/src/gd_xbm.c303
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdcache.c231
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdcache.h90
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdcmpgif.c91
-rw-r--r--Build/source/libs/gd/libgd-src/src/gddemo.c183
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontg.c4402
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontg.h28
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontl.c4660
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontl.h29
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontmb.c3890
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontmb.h27
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfonts.c3890
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfonts.h27
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontt.c2611
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfontt.h28
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdft.c1931
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfx.c524
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdfx.h29
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdhelpers.c116
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdhelpers.h76
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdkanji.c592
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdparttopng.c56
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdpp.cxx261
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdpp.h1530
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdtables.c725
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdtest.c457
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdtestft.c180
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdtopng.c45
-rw-r--r--Build/source/libs/gd/libgd-src/src/gdxpm.c225
-rw-r--r--Build/source/libs/gd/libgd-src/src/getopt.c129
-rw-r--r--Build/source/libs/gd/libgd-src/src/gifanimtest.c34
-rw-r--r--Build/source/libs/gd/libgd-src/src/giftogd2.c51
-rw-r--r--Build/source/libs/gd/libgd-src/src/jisx0208.h1306
-rw-r--r--Build/source/libs/gd/libgd-src/src/msinttypes/inttypes.h305
-rw-r--r--Build/source/libs/gd/libgd-src/src/msinttypes/stdint.h247
-rw-r--r--Build/source/libs/gd/libgd-src/src/pngtogd.c45
-rw-r--r--Build/source/libs/gd/libgd-src/src/pngtogd2.c51
-rw-r--r--Build/source/libs/gd/libgd-src/src/snprintf.c25
-rw-r--r--Build/source/libs/gd/libgd-src/src/testac.c118
-rw-r--r--Build/source/libs/gd/libgd-src/src/testtr.c49
-rw-r--r--Build/source/libs/gd/libgd-src/src/wbmp.c335
-rw-r--r--Build/source/libs/gd/libgd-src/src/wbmp.h51
-rw-r--r--Build/source/libs/gd/libgd-src/src/webpng.c293
105 files changed, 0 insertions, 58787 deletions
diff --git a/Build/source/libs/gd/libgd-src/src/CMakeLists.txt b/Build/source/libs/gd/libgd-src/src/CMakeLists.txt
deleted file mode 100644
index 35ff4a06573..00000000000
--- a/Build/source/libs/gd/libgd-src/src/CMakeLists.txt
+++ /dev/null
@@ -1,211 +0,0 @@
-SET (LIBGD_SRC_FILES
- bmp.h
- gd.c
- gd.h
- gd_bmp.c
- gd_color.c
- gd_color.h
- gd_color_map.c
- gd_color_map.h
- gd_color_match.c
- gd_crop.c
- gd_filename.c
- gd_filter.c
- gd_gd.c
- gd_gd2.c
- gd_gif_in.c
- gd_gif_out.c
- gd_intern.h
- gd_interpolation.c
- gd_io.c
- gd_io.h
- gd_io_dp.c
- gd_io_file.c
- gd_io_ss.c
- gd_io_stream.cxx
- gd_io_stream.h
- gd_jpeg.c
- gd_matrix.c
- gd_nnquant.c
- gd_nnquant.h
- gd_png.c
- gd_rotate.c
- gd_security.c
- gd_ss.c
- gd_tga.c
- gd_tga.h
- gd_tiff.c
- gd_topal.c
- gd_transform.c
- gd_version.c
- gd_wbmp.c
- gd_webp.c
- gd_xbm.c
- gdcache.c
- gdcache.h
- gdfontg.c
- gdfontg.h
- gdfontl.c
- gdfontl.h
- gdfontmb.c
- gdfontmb.h
- gdfonts.c
- gdfonts.h
- gdfontt.c
- gdfontt.h
- gdft.c
- gdfx.c
- gdfx.h
- gdhelpers.c
- gdhelpers.h
- gdkanji.c
- gdpp.cxx
- gdpp.h
- gdtables.c
- gdxpm.c
- jisx0208.h
- wbmp.c
- wbmp.h
-)
-
-# Static library just for utility programs.
-SET (GD_PROGRAMS_LIB_SRC_FILES)
-
-if(MSVC)
- set(GD_PROGRAMS_LIB_SRC_FILES ${GD_PROGRAMS_LIB_SRC_FILES}
- getopt.c
- )
- if(MSVC_VERSION LESS 1900)
- set(LIBGD_SRC_FILES ${LIBGD_SRC_FILES}
- snprintf.c
- )
- endif(MSVC_VERSION LESS 1900)
-endif(MSVC)
-
-include(GNUInstallDirs)
-
-if (BUILD_SHARED_LIBS)
- add_library(${GD_LIB} ${LIBGD_SRC_FILES})
- set_target_properties(${GD_LIB} PROPERTIES
- SOVERSION ${GDLIB_LIB_SOVERSION}
- VERSION ${GDLIB_LIB_VERSION}
- C_VISIBILITY_PRESET hidden
- CXX_VISIBILITY_PRESET hidden
- )
-endif()
-
-if (BUILD_STATIC_LIBS)
- add_library(${GD_LIB_STATIC} STATIC ${LIBGD_SRC_FILES})
- if (UNIX)
- set_target_properties(${GD_LIB_STATIC} PROPERTIES OUTPUT_NAME ${GD_LIB})
- endif()
-endif()
-
-if (NOT "${GD_PROGRAMS_LIB_SRC_FILES}" STREQUAL "")
- add_library(gd_programs_lib STATIC ${GD_PROGRAMS_LIB_SRC_FILES})
-endif()
-
-if (WIN32 AND NOT MINGW AND NOT MSYS)
- # SET_TARGET_PROPERTIES(${GD_LIB} PROPERTIES LINK_FLAGS "/NODEFAULTLIB:msvcrt.lib")
-
- if (BUILD_STATIC_LIBS)
- SET_PROPERTY(TARGET ${GD_LIB_STATIC} APPEND PROPERTY COMPILE_DEFINITIONS NONDLL=1)
- endif()
-
-ENDIF(WIN32 AND NOT MINGW AND NOT MSYS)
-
-if (MINGW OR MSYS)
- ADD_DEFINITIONS("-mms-bitfields")
- if (BUILD_STATIC_LIBS)
- set_target_properties(${GD_LIB_STATIC} PROPERTIES OUTPUT_NAME ${GD_LIB})
- endif()
-endif (MINGW OR MSYS)
-
-INCLUDE_DIRECTORIES(BEFORE "${PROJECT_BINARY_DIR}" "${CMAKE_BINARY_DIR}" "${GD_SOURCE_DIR}/src")
-
-SET(LIBGD_DEP_LIBS
- ${ZLIB_LIBRARIES}
- ${FREETYPE_LIBRARIES}
- ${PNG_LIBRARIES}
- ${ICONV_LIBRARIES}
- ${LIQ_LIBRARIES}
- ${JPEG_LIBRARIES}
- ${TIFF_LIBRARIES}
- ${XPM_LIBRARIES}
- ${FONTCONFIG_LIBRARY}
- ${WEBP_LIBRARIES}
- ${RAQM_LIBRARIES}
-)
-if (BUILD_SHARED_LIBS)
- target_link_libraries(${GD_LIB} ${LIBGD_DEP_LIBS})
-endif()
-if (BUILD_STATIC_LIBS)
- target_link_libraries(${GD_LIB_STATIC} ${LIBGD_DEP_LIBS})
-endif()
-
-SET(LIBS_PRIVATES
- ${ICONV_LIBRARIES}
- ${LIQ_LIBRARIES}
- ${WEBP_LIBRARIES}
-)
-
-set(GD_PROGRAMS gdcmpgif)
-
-if (PNG_FOUND)
- set(GD_PROGRAMS ${GD_PROGRAMS} gdtopng pngtogd webpng)
- if (ZLIB_FOUND)
- set(GD_PROGRAMS ${GD_PROGRAMS} gdparttopng gd2topng pngtogd2)
- endif()
-endif()
-
-if (FREETYPE_FOUND AND JPEG_FOUND)
- set(GD_PROGRAMS ${GD_PROGRAMS} annotate)
-endif()
-
-if (ZLIB_FOUND)
- set(GD_PROGRAMS ${GD_PROGRAMS} gd2copypal gd2togif giftogd2)
-endif()
-
-foreach(program ${GD_PROGRAMS})
- add_executable(${program} ${program}.c)
- if (BUILD_SHARED_LIBS)
- target_link_libraries(${program} ${GD_LIB})
- else()
- target_link_libraries(${program} ${GD_LIB_STATIC})
- endif()
- if (NOT "${GD_PROGRAMS_LIB_SRC_FILES}" STREQUAL "")
- target_link_libraries(${program} gd_programs_lib)
- endif()
-endforeach(program)
-
-set(GD_INSTALL_TARGETS ${GD_PROGRAMS})
-if (BUILD_SHARED_LIBS)
- set(GD_INSTALL_TARGETS ${GD_INSTALL_TARGETS} ${GD_LIB})
-endif()
-if (BUILD_STATIC_LIBS)
- set(GD_INSTALL_TARGETS ${GD_INSTALL_TARGETS} ${GD_LIB_STATIC})
-endif()
-
-install(TARGETS ${GD_INSTALL_TARGETS}
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
-install(PROGRAMS bdftogd DESTINATION bin)
-install(FILES
- entities.h
- gd.h
- gd_color_map.h
- gd_errors.h
- gd_io.h
- gdcache.h
- gdfontg.h
- gdfontl.h
- gdfontmb.h
- gdfonts.h
- gdfontt.h
- gdfx.h
- gdpp.h
- DESTINATION include)
-
-CONFIGURE_FILE(../config/gdlib.pc.cmake gdlib.pc @ONLY)
-INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/gdlib.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
diff --git a/Build/source/libs/gd/libgd-src/src/COPYING b/Build/source/libs/gd/libgd-src/src/COPYING
deleted file mode 100644
index a1e4c78485c..00000000000
--- a/Build/source/libs/gd/libgd-src/src/COPYING
+++ /dev/null
@@ -1,51 +0,0 @@
- Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002 by Cold Spring Harbor Laboratory. Funded under Grant
- P41-RR02188 by the National Institutes of Health.
-
- Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
- Boutell.Com, Inc.
-
- Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
- Philip Warner.
-
- Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
- Roelofs.
-
- Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John
- Ellson (ellson@lucent.com).
-
- Portions relating to gdft.c copyright 2001, 2002 John Ellson
- (ellson@lucent.com).
-
- Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
- 2008 Pierre-Alain Joye (pierre@libgd.org).
-
- Portions relating to JPEG and to color quantization copyright 2000,
- 2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
- 1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is
- based in part on the work of the Independent JPEG Group. See the
- file README-JPEG.TXT for more information.
-
- Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
- Szmurlo and Johan Van den Brande.
-
- Permission has been granted to copy, distribute and modify gd in
- any context without fee, including a commercial application,
- provided that this notice is present in user-accessible supporting
- documentation.
-
- This does not affect your ownership of the derived work itself, and
- the intent is to assure proper credit for the authors of gd, not to
- interfere with your productive use of gd. If you have questions,
- ask. "Derived works" includes all programs that utilize the
- library. Credit must be given in user-accessible documentation.
-
- This software is provided "AS IS." The copyright holders disclaim
- all warranties, either express or implied, including but not
- limited to implied warranties of merchantability and fitness for a
- particular purpose, with respect to this code and accompanying
- documentation.
-
- Although their code does not appear in gd, the authors wish to thank
- David Koblas, David Rowley, and Hutchison Avenue Software Corporation
- for their prior contributions.
diff --git a/Build/source/libs/gd/libgd-src/src/Makefile.am b/Build/source/libs/gd/libgd-src/src/Makefile.am
deleted file mode 100644
index 377acc078d0..00000000000
--- a/Build/source/libs/gd/libgd-src/src/Makefile.am
+++ /dev/null
@@ -1,130 +0,0 @@
-## Process this file with automake to produce Makefile.in -*-Makefile-*-
-
-bin_PROGRAMS = gdcmpgif
-check_PROGRAMS = gifanimtest gd_color_map_test
-
-if HAVE_LIBPNG
-bin_PROGRAMS += gdtopng pngtogd webpng
-check_PROGRAMS += circletexttest fontsizetest fontwheeltest gddemo testac
-if HAVE_LIBZ
-bin_PROGRAMS += gdparttopng gd2topng pngtogd2
-check_PROGRAMS += gdtest
-endif
-endif
-
-if HAVE_LIBJPEG
-if !HAVE_LIBPNG
-check_PROGRAMS += fontsizetest fontwheeltest
-endif
-endif
-
-if HAVE_LIBFONTCONFIG
-check_PROGRAMS += fontconfigtest
-endif
-
-if HAVE_LIBFREETYPE
-if HAVE_LIBJPEG
-bin_PROGRAMS += annotate
-endif
-check_PROGRAMS += gdtestft testtr
-endif
-
-if HAVE_LIBZ
-bin_PROGRAMS += gd2copypal gd2togif giftogd2
-endif
-
-bin_SCRIPTS = bdftogd
-
-if HAVE_LIBZ
-check_PROGRAMS += gd2time
-endif
-
-EXTRA_DIST = \
- bdftogd \
- demoin.png \
- entities.html \
- entities.tcl \
- CMakeLists.txt \
- config.h.cmake \
- gd_io_stream.cxx \
- gdpp.cxx \
- getopt.c \
- snprintf.c \
- msinttypes/inttypes.h \
- msinttypes/stdint.h
-
-include_HEADERS = gd.h gdfx.h gd_io.h gdcache.h gdfontg.h gdfontl.h gdfontmb.h gdfonts.h gdfontt.h entities.h gd_color_map.h gd_errors.h gdpp.h
-
-lib_LTLIBRARIES = libgd.la
-
-libgd_la_SOURCES = \
- bmp.h \
- gd.c \
- gd.h \
- gd_bmp.c \
- gd_color.c \
- gd_color.h \
- gd_color_map.c \
- gd_color_map.h \
- gd_color_match.c \
- gd_crop.c \
- gd_filename.c \
- gd_filter.c \
- gd_gd.c \
- gd_gd2.c \
- gd_gif_in.c \
- gd_gif_out.c \
- gd_intern.h \
- gd_interpolation.c \
- gd_io.c \
- gd_io.h \
- gd_io_dp.c \
- gd_io_file.c \
- gd_io_ss.c \
- gd_io_stream.h \
- gd_jpeg.c \
- gd_matrix.c \
- gd_nnquant.c \
- gd_nnquant.h \
- gd_png.c \
- gd_rotate.c \
- gd_security.c \
- gd_ss.c \
- gd_tga.c \
- gd_tga.h \
- gd_tiff.c \
- gd_topal.c \
- gd_transform.c \
- gd_version.c \
- gd_wbmp.c \
- gd_webp.c \
- gd_xbm.c \
- gdcache.c \
- gdcache.h \
- gdfontg.c \
- gdfontg.h \
- gdfontl.c \
- gdfontl.h \
- gdfontmb.c \
- gdfontmb.h \
- gdfonts.c \
- gdfonts.h \
- gdfontt.c \
- gdfontt.h \
- gdft.c \
- gdfx.c \
- gdfx.h \
- gdhelpers.c \
- gdhelpers.h \
- gdkanji.c \
- gdtables.c \
- gdxpm.c \
- jisx0208.h \
- wbmp.c \
- wbmp.h
-
-libgd_la_LDFLAGS = -version-info $(GDLIB_LT_CURRENT):$(GDLIB_LT_REVISION):$(GDLIB_LT_AGE) -no-undefined
-
-libgd_la_LIBADD = $(LTLIBICONV)
-
-LDADD = libgd.la $(LIBICONV)
diff --git a/Build/source/libs/gd/libgd-src/src/annotate.c b/Build/source/libs/gd/libgd-src/src/annotate.c
deleted file mode 100644
index 35724b0658a..00000000000
--- a/Build/source/libs/gd/libgd-src/src/annotate.c
+++ /dev/null
@@ -1,196 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-
-/* A neat little utility which adds freetype text to
- * existing JPEG images. Type annotate -h for instructions.
- * Thanks to Joel Dubiner for supporting this work. -TBB
- */
-
-enum { left, center, right };
-
-int main(int argc, char *argv[])
-{
- gdImagePtr im;
- char *iin, *iout;
- FILE *in, *out;
- char *s;
- size_t len;
- int bounds[8];
- int lines = 1;
- int color = gdTrueColor(0, 0, 0);
- char *font;
- int size = 12;
- int align = left;
- int x = 0, y = 0;
- char *fontError;
-
- font = strdup("times");
-
- if(argc != 3) {
- fprintf(stderr, "Usage: annotate imagein.jpg imageout.jpg\n\n");
- fprintf(stderr, "Standard input should consist of\n");
- fprintf(stderr, "lines in the following formats:\n");
- fprintf(stderr, "color r g b (0-255 each) [a (0-127, 0 is opaque)]\n");
- fprintf(stderr, "font fontname\n");
- fprintf(stderr, "size pointsize\n");
- fprintf(stderr, "align (left|right|center)\n");
- fprintf(stderr, "move x y\n");
- fprintf(stderr, "text actual-output-text\n\n");
- fprintf(stderr,
- "If the file 'paris.ttf' exists in /usr/share/fonts/truetype or in a\n");
- fprintf(stderr,
- "location specified in the GDFONTPATH environment variable, 'font paris' is\n");
- fprintf(stderr,
- "sufficient. You may also specify the full, rooted path of a font file.\n");
- exit(1);
- }
-
- iin = argv[1];
- iout = argv[2];
-
- in = fopen(iin, "rb");
- if(!in) {
- fprintf(stderr, "Couldn't open %s\n", iin);
- exit(2);
- }
-
- im = gdImageCreateFromJpeg(in);
-
- fclose(in);
-
- if(!im) {
- fprintf(stderr, "%s did not load properly\n", iin);
- exit(3);
- }
-
- s = NULL;
- len = 0;
- while (getline(&s, &len, stdin) != -1) {
- char *st;
- char *text;
-
- st = strtok(s, " \t\r\n");
- if(!st) {
- /* Be nice about blank lines */
- continue;
- }
-
- if(!strcmp(st, "font")) {
- char *st = strtok(0, " \t\r\n");
- if(!st) {
- goto badLine;
- } else {
- free(font);
- font = strdup(st);
- if (font == NULL) {
- perror("Font failed");
- goto badLine;
- }
- }
- } else if(!strcmp(st, "align")) {
- char *st = strtok(0, " \t\r\n");
-
- if(!st) {
- goto badLine;
- }
-
- if(!strcmp(st, "left")) {
- align = 0;
- } else if(!strcmp(st, "center")) {
- align = 1;
- } else if(!strcmp(st, "right")) {
- align = 2;
- }
- } else if(!strcmp(st, "size")) {
- char *st = strtok(0, " \t\r\n");
-
- if(!st) {
- goto badLine;
- }
-
- size = atoi(st);
- } else if(!strcmp(st, "color")) {
- char *st = strtok(0, "\r\n");
- int r, g, b, a = 0;
-
- if(!st) {
- goto badLine;
- }
-
- if(sscanf(st, "%d %d %d %d", &r, &g, &b, &a) < 3) {
- fprintf(stderr, "Bad color at line %d\n", lines);
- exit(2);
- }
-
- color = gdTrueColorAlpha(r, g, b, a);
- } else if(!strcmp(st, "move")) {
- char *st = strtok(0, "\r\n");
-
- if(!st) {
- goto badLine;
- }
-
- if(sscanf(st, "%d %d", &x, &y) != 2) {
- fprintf(stderr, "Missing coordinates at line %d\n", lines);
- exit(3);
- }
- } else if(!strcmp(st, "text")) {
- int rx = x;
-
- text = strtok(0, "\r\n");
- if(!text) {
- text = "";
- }
-
- gdImageStringFT(0, bounds, color, font, size, 0, x, y, text);
-
- switch(align) {
- case left:
- break;
-
- case center:
- rx -= (bounds[2] - bounds[0]) / 2;
- break;
-
- case right:
- rx -= (bounds[2] - bounds[0]);
- break;
- }
-
- fontError = gdImageStringFT(im, 0, color, font, size, 0, rx, y, text);
- if(fontError) {
- fprintf(stderr, "Font error at line %d: %s\n", lines, fontError);
- exit(7);
- }
-
- y -= (bounds[7] - bounds[1]);
- } else {
- goto badLine;
- }
-
- lines++;
- continue;
-
-badLine:
- fprintf(stderr, "Bad syntax, line %d\n", lines);
- exit(4);
- }
- free(font);
- free(s);
-
- out = fopen(iout, "wb");
- if(!out) {
- fprintf(stderr, "Cannot create %s\n", iout);
- exit(5);
- }
- gdImageJpeg(im, out, 95);
- gdImageDestroy(im);
- fclose(out);
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/bdftogd b/Build/source/libs/gd/libgd-src/src/bdftogd
deleted file mode 100644
index a9500039301..00000000000
--- a/Build/source/libs/gd/libgd-src/src/bdftogd
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/perl -w
-
-#
-# Simple convertor from bdf to gd font format.
-#
-# Author: Jan Pazdziora, adelton@fi.muni.cz, http://www.fi.muni.cz/~adelton/
-# at Faculty of Informatics, Masaryk University in Brno, Czech Republic.
-#
-# Example of use:
-# fstobdf -s fontserverhost:7100 -fn 8x16 | ./bdftogd FontLarge gdfontl
-#
-
-use strict;
-
-my $VERSION = '0.60';
-my $now = localtime;
-
-if (@ARGV != 2)
- { die "usage: bdftogd fontname filename, eg. bdftogd FontLarge gdfontl\n"; }
-
-my $gdname = shift;
-$gdname = 'gd' . $gdname unless $gdname =~ /^gd/i;
-
-my $filename = shift;
-$filename = 'gd' . $filename unless $filename =~ /^gd/i;
-
-if (-f "$filename.c") { die "File $filename.c already exists, won't overwrite\n"; }
-if (-f "$filename.h") { die "File $filename.h already exists, won't overwrite\n"; }
-
-my ($width, $height);
-my (@data, @left, @bottom);
-my ($globalleft, $globaltop);
-
-my ($minchar, $maxchar);
-
-my ($copyright, $fontdef);
-
-my $currentchar;
-my $gobitmap = 0;
-
-
-while (<>)
- {
- chomp;
- s/\r$//;
- my ($tag, $value) = split / /, $_, 2;
- die "Font is not fixed width\n"
- if $tag eq 'SPACING' and not $value =~ /[CM]/i;
-
- $currentchar = $value if $tag eq 'ENCODING';
- $minchar = $currentchar if not defined $minchar
- or $currentchar < $minchar;
- $maxchar = $currentchar if not defined $maxchar
- or $currentchar > $maxchar;
-
- if ($tag eq 'ENDCHAR')
- {
- $gobitmap = 0;
- my $bottom = $globaltop - $bottom[$currentchar];
-
-
- if ($bottom > 0)
- { $data[$currentchar] = substr $data[$currentchar], 0, length($data[$currentchar]) - $bottom * $width; }
- else
- { $data[$currentchar] .= '0' x (-$bottom * $width); }
- }
-
- if ($tag eq 'FONTBOUNDINGBOX')
- {
- my ($tag, $wid, $hei, $left, $top) = split / /;
- if (defined $top)
- {
- $globalleft = $left;
- $globaltop = $top;
- $height = $hei;
- $width = $wid;
- }
- }
- if ($tag eq 'FONT' and not defined $fontdef)
- { $fontdef = $value; }
- if ($tag eq 'COPYRIGHT' and not defined $copyright)
- { $copyright = $value; }
-
- if ($tag eq 'BBX')
- {
- my ($tag, $wid, $hei, $left, $bottom) = split / /;
- if (defined $bottom)
- {
- $left[$currentchar] = $left;
- $bottom[$currentchar] = $bottom;
- }
- }
-
- if ($gobitmap)
- {
- my $value = pack 'H*', $_;
- my $bits = unpack 'B*', $value;
- $bits = ('0' x $left[$currentchar]) . $bits;
- $bits .= '0' x ($width - length $bits);
- $bits = substr $bits, 0, $width;
- $data[$currentchar] .= $bits;
- }
-
- if ($tag eq 'BITMAP')
- {
- $gobitmap = 1;
- $data[$currentchar] = '';
- }
- }
-
-my $info = <<"EOF";
-/*
- This is a header file for gd font, generated using
- bdftogd version $VERSION by Jan Pazdziora, adelton\@fi.muni.cz
- from bdf font
- $fontdef
- at $now.
-EOF
-
-if (defined $copyright)
- {
- $info .= <<"EOF";
- The original bdf was holding following copyright:
- $copyright
- */
-EOF
- }
-else
- {
- $info .= <<"EOF";
- No copyright info was found in the original bdf.
- */
-EOF
- }
-
-open FILEC, "> $filename.c" or die "Error writing $filename.c: $!\n";
-open FILEH, "> $filename.h" or die "Error writing $filename.h: $!\n";
-print FILEC <<"EOF";
-
-$info
-
-#include "$filename.h"
-
-char ${gdname}Data[] = {
-EOF
-
-$minchar = 0 unless defined $minchar;
-$maxchar = 255 unless defined $maxchar;
-for (my $i = $minchar; $i <= $maxchar; $i++)
- {
- $data[$i] = '' unless defined $data[$i];
- $data[$i] = '0' x ($width * $height - length $data[$i]) . $data[$i];
-
- print FILEC "/* Char $i */\n";
- for my $line (0 .. $height - 1)
- { print FILEC join ',', split(//, substr($data[$i], $line * $width, $width)), "\n"; }
-
- print FILEC "\n";
-
- next;
-
- for my $line (0 .. $height - 1)
- { print substr($data[$i], $line * $width, $width), "\n"; }
- }
-
-my $capdef = "\U_${filename}_H_";
-
-print FILEC <<"EOF";
-
-};
-
-gdFont ${gdname}Rep = {
- @{[ $maxchar - $minchar + 1]},
- $minchar,
- $width,
- $height,
- ${gdname}Data
-};
-
-gdFontPtr ${gdname} = &${gdname}Rep;
-
-/* This file has not been truncated. */
-
-EOF
-
-
-close FILEC;
-
-print FILEH <<"EOF";
-
-#ifndef $capdef
-#define $capdef 1
-
-$info
-
-#include "gd.h"
-
-extern gdFontPtr $gdname;
-
-#endif
-
-EOF
-
-1;
diff --git a/Build/source/libs/gd/libgd-src/src/bmp.h b/Build/source/libs/gd/libgd-src/src/bmp.h
deleted file mode 100644
index 5644fab982d..00000000000
--- a/Build/source/libs/gd/libgd-src/src/bmp.h
+++ /dev/null
@@ -1,111 +0,0 @@
-#ifndef BMP_H
-#define BMP_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*
- gd_bmp.c
-
- Bitmap format support for libgd
-
- * Written 2007, Scott MacVicar
- ---------------------------------------------------------------------------
-
- Todo:
-
- RLE4, RLE8 and Bitfield encoding
- Add full support for Windows v4 and Windows v5 header formats
-
- ----------------------------------------------------------------------------
- */
-
-#define BMP_PALETTE_3 1
-#define BMP_PALETTE_4 2
-
-#define BMP_WINDOWS_V3 40
-#define BMP_OS2_V1 12
-#define BMP_OS2_V2 64
-#define BMP_WINDOWS_V4 108
-#define BMP_WINDOWS_V5 124
-
-#define BMP_BI_RGB 0
-#define BMP_BI_RLE8 1
-#define BMP_BI_RLE4 2
-#define BMP_BI_BITFIELDS 3
-#define BMP_BI_JPEG 4
-#define BMP_BI_PNG 5
-
-#define BMP_RLE_COMMAND 0
-#define BMP_RLE_ENDOFLINE 0
-#define BMP_RLE_ENDOFBITMAP 1
-#define BMP_RLE_DELTA 2
-
-#define BMP_RLE_TYPE_RAW 0
-#define BMP_RLE_TYPE_RLE 1
-
- /* BMP header. */
- typedef struct {
- /* 16 bit - header identifying the type */
- signed short int magic;
-
- /* 32bit - size of the file */
- int size;
-
- /* 16bit - these two are in the spec but "reserved" */
- signed short int reserved1;
- signed short int reserved2;
-
- /* 32 bit - offset of the bitmap header from data in bytes */
- signed int off;
-
- } bmp_hdr_t;
-
- /* BMP info. */
- typedef struct {
- /* 16bit - Type, ie Windows or OS/2 for the palette info */
- signed short int type;
- /* 32bit - The length of the bitmap information header in bytes. */
- signed int len;
-
- /* 32bit - The width of the bitmap in pixels. */
- signed int width;
-
- /* 32bit - The height of the bitmap in pixels. */
- signed int height;
-
- /* 8 bit - The bitmap data is specified in top-down order. */
- signed char topdown;
-
- /* 16 bit - The number of planes. This must be set to a value of one. */
- signed short int numplanes;
-
- /* 16 bit - The number of bits per pixel. */
- signed short int depth;
-
- /* 32bit - The type of compression used. */
- signed int enctype;
-
- /* 32bit - The size of the image in bytes. */
- signed int size;
-
- /* 32bit - The horizontal resolution in pixels/metre. */
- signed int hres;
-
- /* 32bit - The vertical resolution in pixels/metre. */
- signed int vres;
-
- /* 32bit - The number of color indices used by the bitmap. */
- signed int numcolors;
-
- /* 32bit - The number of color indices important for displaying the bitmap. */
- signed int mincolors;
-
- } bmp_info_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/circletexttest.c b/Build/source/libs/gd/libgd-src/src/circletexttest.c
deleted file mode 100644
index 53451517acb..00000000000
--- a/Build/source/libs/gd/libgd-src/src/circletexttest.c
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include "gd.h"
-
-int main(void)
-{
- /* 2.0.22: can't depend on PNG either */
- char *error;
-#ifdef HAVE_LIBJPEG
- FILE *in = 0;
-#endif
- FILE *out;
- gdImagePtr im;
- int radius;
- /* Create an image of text on a circle, with an
- * alpha channel so that we can copy it onto a
- * background
- * TBB: 2.0.18: shouldn't depend on JPEG
- */
-#ifdef HAVE_LIBJPEG
- in = fopen("eleanor.jpg", "rb");
- if(!in) {
- im = gdImageCreateTrueColor(300, 300);
- } else {
- im = gdImageCreateFromJpeg(in);
- fclose(in);
- }
-#else
- im = gdImageCreateTrueColor(300, 300);
-#endif /* HAVE_LIBJPEG */
- if(!im) {
- fprintf(stderr, "gdImageCreateTrueColor failed \n");
- return 1;
- }
- if(gdImageSX(im) < gdImageSY(im)) {
- radius = gdImageSX(im) / 2;
- } else {
- radius = gdImageSY(im) / 2;
- }
-
- error = gdImageStringFTCircle(im,
- gdImageSX(im) / 2, gdImageSY(im) / 2,
- radius, radius / 2,
- 0.8, "arial", 24, "top text", "bottom text",
- gdTrueColorAlpha(192, 100, 255, 32)
- );
- if(error) {
- fprintf(stderr, "gdImageStringFTEx error: %s\n", error);
- }
-
- out = fopen("gdfx.png", "wb");
- if(!out) {
- fprintf(stderr, "Can't create gdfx.png\n");
- return 1;
- }
-
- gdImagePng(im, out);
- fclose(out);
- gdImageDestroy(im);
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/config.h.cmake b/Build/source/libs/gd/libgd-src/src/config.h.cmake
deleted file mode 100644
index 836be470010..00000000000
--- a/Build/source/libs/gd/libgd-src/src/config.h.cmake
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Generated from config.hin via autoheader for cmake; see bootstrap.sh. */
-
-/* Define is you are building for Win32 API */
-#cmakedefine BGDWIN32
-
-/* Whether to support gd image formats */
-#cmakedefine01 ENABLE_GD_FORMATS
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#cmakedefine HAVE_DIRENT_H
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#cmakedefine HAVE_DLFCN_H
-
-/* Define if you have the ft2build.h header. */
-#cmakedefine HAVE_FT2BUILD_H
-
-/* Define if you have the iconv() function and it works. */
-#cmakedefine HAVE_ICONV
-
-/* Define to 1 if you have the <iconv.h> header file. */
-#cmakedefine HAVE_ICONV_H
-
-/* Define if <iconv.h> defines iconv_t. */
-#cmakedefine HAVE_ICONV_T_DEF
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#cmakedefine HAVE_INTTYPES_H
-
-/* Define if you have fontconfig */
-#cmakedefine HAVE_LIBFONTCONFIG
-
-/* Define if you have freetype */
-#cmakedefine HAVE_LIBFREETYPE
-
-/* Define if you have liq */
-#cmakedefine HAVE_LIBIMAGEQUANT
-
-/* Define if you have jpeg */
-#cmakedefine HAVE_LIBJPEG
-
-/* Define to 1 if you have the `m' library (-lm). */
-#cmakedefine HAVE_LIBM
-
-/* Define if you have png */
-#cmakedefine HAVE_LIBPNG
-
-/* Define if you have raqm */
-#cmakedefine HAVE_LIBRAQM
-
-/* Define if you have tiff */
-#cmakedefine HAVE_LIBTIFF
-
-/* Define if you have webp */
-#cmakedefine HAVE_LIBWEBP
-
-/* Define if you have xpm */
-#cmakedefine HAVE_LIBXPM
-
-/* Define if you have zlib */
-#cmakedefine HAVE_LIBZ
-
-/* Define to 1 if you have the <memory.h> header file. */
-#cmakedefine HAVE_MEMORY_H
-
-/* Define if OpenMP is enabled */
-#cmakedefine HAVE_OPENMP
-
-/* Define if you have POSIX threads libraries and header files. */
-#cmakedefine HAVE_PTHREAD
-
-/* Have PTHREAD_PRIO_INHERIT. */
-#cmakedefine HAVE_PTHREAD_PRIO_INHERIT
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#cmakedefine HAVE_STDINT_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#cmakedefine HAVE_STRINGS_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#cmakedefine HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#cmakedefine HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#cmakedefine HAVE_UNISTD_H
-
-/* Define to 1 or 0, depending whether the compiler supports simple visibility
- declarations. */
-#cmakedefine HAVE_VISIBILITY
-
-/* Define as const if the declaration of iconv() needs const. */
-#cmakedefine ICONV_CONST
-
-/* Define to the sub-directory where libtool stores uninstalled libraries. */
-#cmakedefine LT_OBJDIR
-
-/* Name of package */
-#cmakedefine PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#cmakedefine PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#cmakedefine PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#cmakedefine PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#cmakedefine PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#cmakedefine PACKAGE_URL
-
-/* Define to the version of this package. */
-#cmakedefine PACKAGE_VERSION
-
-/* Define to necessary symbol if this constant uses a non-standard name on
- your system. */
-#cmakedefine PTHREAD_CREATE_JOINABLE
-
-/* Define to 1 if you have the ANSI C header files. */
-#cmakedefine STDC_HEADERS
-
-/* Version number of package */
-#cmakedefine VERSION
diff --git a/Build/source/libs/gd/libgd-src/src/config.hin b/Build/source/libs/gd/libgd-src/src/config.hin
deleted file mode 100644
index 56df3dabf72..00000000000
--- a/Build/source/libs/gd/libgd-src/src/config.hin
+++ /dev/null
@@ -1,135 +0,0 @@
-/* src/config.hin. Generated from configure.ac by autoheader. */
-
-/* Define is you are building for Win32 API */
-#undef BGDWIN32
-
-/* Whether to support gd image formats */
-#undef ENABLE_GD_FORMATS
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#undef HAVE_DIRENT_H
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define if you have the ft2build.h header. */
-#undef HAVE_FT2BUILD_H
-
-/* Define if you have the iconv() function and it works. */
-#undef HAVE_ICONV
-
-/* Define to 1 if you have the <iconv.h> header file. */
-#undef HAVE_ICONV_H
-
-/* Define if <iconv.h> defines iconv_t. */
-#undef HAVE_ICONV_T_DEF
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define if you have fontconfig */
-#undef HAVE_LIBFONTCONFIG
-
-/* Define if you have freetype */
-#undef HAVE_LIBFREETYPE
-
-/* Define if you have liq */
-#undef HAVE_LIBIMAGEQUANT
-
-/* Define if you have jpeg */
-#undef HAVE_LIBJPEG
-
-/* Define to 1 if you have the `m' library (-lm). */
-#undef HAVE_LIBM
-
-/* Define if you have png */
-#undef HAVE_LIBPNG
-
-/* Define if you have raqm */
-#undef HAVE_LIBRAQM
-
-/* Define if you have tiff */
-#undef HAVE_LIBTIFF
-
-/* Define if you have webp */
-#undef HAVE_LIBWEBP
-
-/* Define if you have xpm */
-#undef HAVE_LIBXPM
-
-/* Define if you have zlib */
-#undef HAVE_LIBZ
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if OpenMP is enabled */
-#undef HAVE_OPENMP
-
-/* Define if you have POSIX threads libraries and header files. */
-#undef HAVE_PTHREAD
-
-/* Have PTHREAD_PRIO_INHERIT. */
-#undef HAVE_PTHREAD_PRIO_INHERIT
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 or 0, depending whether the compiler supports simple visibility
- declarations. */
-#undef HAVE_VISIBILITY
-
-/* Define as const if the declaration of iconv() needs const. */
-#undef ICONV_CONST
-
-/* Define to the sub-directory where libtool stores uninstalled libraries. */
-#undef LT_OBJDIR
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to necessary symbol if this constant uses a non-standard name on
- your system. */
-#undef PTHREAD_CREATE_JOINABLE
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
diff --git a/Build/source/libs/gd/libgd-src/src/demoin.png b/Build/source/libs/gd/libgd-src/src/demoin.png
deleted file mode 100644
index c3e57b2081e..00000000000
--- a/Build/source/libs/gd/libgd-src/src/demoin.png
+++ /dev/null
Binary files differ
diff --git a/Build/source/libs/gd/libgd-src/src/entities.h b/Build/source/libs/gd/libgd-src/src/entities.h
deleted file mode 100644
index cf24cb63e3d..00000000000
--- a/Build/source/libs/gd/libgd-src/src/entities.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- * Generated file - do not edit directly.
- *
- * This file was generated from:
- * http://www.w3.org/TR/REC-html40/sgml/entities.html
- * by means of the script:
- * entities.tcl
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- static struct entities_s {
- char *name;
- int value;
- } entities[] = {
- {"AElig", 198},
- {"Aacute", 193},
- {"Acirc", 194},
- {"Agrave", 192},
- {"Alpha", 913},
- {"Aring", 197},
- {"Atilde", 195},
- {"Auml", 196},
- {"Beta", 914},
- {"Ccedil", 199},
- {"Chi", 935},
- {"Dagger", 8225},
- {"Delta", 916},
- {"ETH", 208},
- {"Eacute", 201},
- {"Ecirc", 202},
- {"Egrave", 200},
- {"Epsilon", 917},
- {"Eta", 919},
- {"Euml", 203},
- {"Gamma", 915},
- {"Iacute", 205},
- {"Icirc", 206},
- {"Igrave", 204},
- {"Iota", 921},
- {"Iuml", 207},
- {"Kappa", 922},
- {"Lambda", 923},
- {"Mu", 924},
- {"Ntilde", 209},
- {"Nu", 925},
- {"OElig", 338},
- {"Oacute", 211},
- {"Ocirc", 212},
- {"Ograve", 210},
- {"Omega", 937},
- {"Omicron", 927},
- {"Oslash", 216},
- {"Otilde", 213},
- {"Ouml", 214},
- {"Phi", 934},
- {"Pi", 928},
- {"Prime", 8243},
- {"Psi", 936},
- {"Rho", 929},
- {"Scaron", 352},
- {"Sigma", 931},
- {"THORN", 222},
- {"Tau", 932},
- {"Theta", 920},
- {"Uacute", 218},
- {"Ucirc", 219},
- {"Ugrave", 217},
- {"Upsilon", 933},
- {"Uuml", 220},
- {"Xi", 926},
- {"Yacute", 221},
- {"Yuml", 376},
- {"Zeta", 918},
- {"aacute", 225},
- {"acirc", 226},
- {"acute", 180},
- {"aelig", 230},
- {"agrave", 224},
- {"alefsym", 8501},
- {"alpha", 945},
- {"amp", 38},
- {"and", 8743},
- {"ang", 8736},
- {"aring", 229},
- {"asymp", 8776},
- {"atilde", 227},
- {"auml", 228},
- {"bdquo", 8222},
- {"beta", 946},
- {"brvbar", 166},
- {"bull", 8226},
- {"cap", 8745},
- {"ccedil", 231},
- {"cedil", 184},
- {"cent", 162},
- {"chi", 967},
- {"circ", 710},
- {"clubs", 9827},
- {"cong", 8773},
- {"copy", 169},
- {"crarr", 8629},
- {"cup", 8746},
- {"curren", 164},
- {"dArr", 8659},
- {"dagger", 8224},
- {"darr", 8595},
- {"deg", 176},
- {"delta", 948},
- {"diams", 9830},
- {"divide", 247},
- {"eacute", 233},
- {"ecirc", 234},
- {"egrave", 232},
- {"empty", 8709},
- {"emsp", 8195},
- {"ensp", 8194},
- {"epsilon", 949},
- {"equiv", 8801},
- {"eta", 951},
- {"eth", 240},
- {"euml", 235},
- {"euro", 8364},
- {"exist", 8707},
- {"fnof", 402},
- {"forall", 8704},
- {"frac12", 189},
- {"frac14", 188},
- {"frac34", 190},
- {"frasl", 8260},
- {"gamma", 947},
- {"ge", 8805},
- {"gt", 62},
- {"hArr", 8660},
- {"harr", 8596},
- {"hearts", 9829},
- {"hellip", 8230},
- {"iacute", 237},
- {"icirc", 238},
- {"iexcl", 161},
- {"igrave", 236},
- {"image", 8465},
- {"infin", 8734},
- {"int", 8747},
- {"iota", 953},
- {"iquest", 191},
- {"isin", 8712},
- {"iuml", 239},
- {"kappa", 954},
- {"lArr", 8656},
- {"lambda", 955},
- {"lang", 9001},
- {"laquo", 171},
- {"larr", 8592},
- {"lceil", 8968},
- {"ldquo", 8220},
- {"le", 8804},
- {"lfloor", 8970},
- {"lowast", 8727},
- {"loz", 9674},
- {"lrm", 8206},
- {"lsaquo", 8249},
- {"lsquo", 8216},
- {"lt", 60},
- {"macr", 175},
- {"mdash", 8212},
- {"micro", 181},
- {"middot", 183},
- {"minus", 8722},
- {"mu", 956},
- {"nabla", 8711},
- {"nbsp", 160},
- {"ndash", 8211},
- {"ne", 8800},
- {"ni", 8715},
- {"not", 172},
- {"notin", 8713},
- {"nsub", 8836},
- {"ntilde", 241},
- {"nu", 957},
- {"oacute", 243},
- {"ocirc", 244},
- {"oelig", 339},
- {"ograve", 242},
- {"oline", 8254},
- {"omega", 969},
- {"omicron", 959},
- {"oplus", 8853},
- {"or", 8744},
- {"ordf", 170},
- {"ordm", 186},
- {"oslash", 248},
- {"otilde", 245},
- {"otimes", 8855},
- {"ouml", 246},
- {"para", 182},
- {"part", 8706},
- {"permil", 8240},
- {"perp", 8869},
- {"phi", 966},
- {"pi", 960},
- {"piv", 982},
- {"plusmn", 177},
- {"pound", 163},
- {"prime", 8242},
- {"prod", 8719},
- {"prop", 8733},
- {"psi", 968},
- {"quot", 34},
- {"rArr", 8658},
- {"radic", 8730},
- {"rang", 9002},
- {"raquo", 187},
- {"rarr", 8594},
- {"rceil", 8969},
- {"rdquo", 8221},
- {"real", 8476},
- {"reg", 174},
- {"rfloor", 8971},
- {"rho", 961},
- {"rlm", 8207},
- {"rsaquo", 8250},
- {"rsquo", 8217},
- {"sbquo", 8218},
- {"scaron", 353},
- {"sdot", 8901},
- {"sect", 167},
- {"shy", 173},
- {"sigma", 963},
- {"sigmaf", 962},
- {"sim", 8764},
- {"spades", 9824},
- {"sub", 8834},
- {"sube", 8838},
- {"sum", 8721},
- {"sup", 8835},
- {"sup1", 185},
- {"sup2", 178},
- {"sup3", 179},
- {"supe", 8839},
- {"szlig", 223},
- {"tau", 964},
- {"there4", 8756},
- {"theta", 952},
- {"thetasym", 977},
- {"thinsp", 8201},
- {"thorn", 254},
- {"tilde", 732},
- {"times", 215},
- {"trade", 8482},
- {"uArr", 8657},
- {"uacute", 250},
- {"uarr", 8593},
- {"ucirc", 251},
- {"ugrave", 249},
- {"uml", 168},
- {"upsih", 978},
- {"upsilon", 965},
- {"uuml", 252},
- {"weierp", 8472},
- {"xi", 958},
- {"yacute", 253},
- {"yen", 165},
- {"yuml", 255},
- {"zeta", 950},
- {"zwj", 8205},
- {"zwnj", 8204},
- };
-
-#define ENTITY_NAME_LENGTH_MAX 8
-#define NR_OF_ENTITIES 252
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/entities.html b/Build/source/libs/gd/libgd-src/src/entities.html
deleted file mode 100644
index f3e99097e4d..00000000000
--- a/Build/source/libs/gd/libgd-src/src/entities.html
+++ /dev/null
@@ -1,682 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html lang="en"><head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Character entity references in HTML 4</title>
-
-<link rel="previous" href="http://www.w3.org/TR/REC-html40/sgml/framesetdtd.html">
-<link rel="next" href="http://www.w3.org/TR/REC-html40/appendix/changes.html">
-<link rel="contents" href="http://www.w3.org/TR/REC-html40/cover.html#toc">
-<link rel="stylesheet" type="text/css" href="entities.html_files/W3C-REC.css">
-<link rel="STYLESHEET" href="entities.html_files/default.css" type="text/css"></head>
-
-<body>
-<div class="navbar" align="center">&nbsp;<a href="http://www.w3.org/TR/REC-html40/sgml/framesetdtd.html">
-previous</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/appendix/changes.html">next</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/cover.html#minitoc">contents</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/index/elements.html">
-elements</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/index/attributes.html">attributes</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/index/list.html">index</a>
-
-<hr></div>
-
-<h1 align="center"><a name="h-24">24</a> <a name="entities">Character entity
-references in HTML 4</a></h1>
-
-<div class="subtoc">
-<p><strong>Contents</strong></p>
-
-<ol>
-<li><a class="tocxref" href="#h-24.1">Introduction to character entity
-references</a></li>
-
-<li><a class="tocxref" href="#h-24.2">Character entity references for ISO
-8859-1 characters</a>
-
-<ol>
-<li><a class="tocxref" href="#h-24.2.1">The list of characters</a></li>
-</ol>
-</li>
-
-<li><a class="tocxref" href="#h-24.3">Character entity references for symbols,
-mathematical symbols, and Greek letters</a>
-
-<ol>
-<li><a class="tocxref" href="#h-24.3.1">The list of characters</a></li>
-</ol>
-</li>
-
-<li><a class="tocxref" href="#h-24.4">Character entity references for
-markup-significant and internationalization characters</a>
-
-<ol>
-<li><a class="tocxref" href="#h-24.4.1">The list of characters</a></li>
-</ol>
-</li>
-</ol>
-</div>
-
-<h2><a name="h-24.1">24.1</a> Introduction to character entity references</h2>
-
-A <a href="http://www.w3.org/TR/REC-html40/charset.html#entities">character entity reference</a> is an SGML
-construct that references a character of the <a href="http://www.w3.org/TR/REC-html40/charset.html">document
-character set.</a>
-
-<p>This version of HTML supports several sets of character entity
-references:</p>
-
-<ul>
-<li><a href="#iso-88591">ISO 8859-1 (Latin-1) characters</a> In accordance with
-section 14 of <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-RFC1866" class="informref">[RFC1866]</a>, the set of Latin-1 entities has been extended by
-this specification to cover the whole right part of ISO-8859-1 (all code
-positions with the high-order bit set), including the already commonly used
-&amp;nbsp;, &amp;copy; and &amp;reg;. The names of the entities are taken from
-the appendices of SGML (defined in <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO8879" class="normref">[ISO8879]</a>).</li>
-
-<li><a href="#sym">symbols, mathematical symbols, and Greek letters</a>. These
-characters may be represented by glyphs in the Adobe font "Symbol".</li>
-
-<li><a href="#misc">markup-significant and internationalization characters</a>
-(e.g., for bidirectional text).</li>
-</ul>
-
-<p>The following sections present the complete lists of character entity
-references. Although, by convention, <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO10646" class="normref">[ISO10646]</a> the comments
-following each entry are usually written with uppercase letters, we have
-converted them to lowercase in this specification for reasons of
-readability.</p>
-
-<h2><a name="h-24.2">24.2</a> <a name="iso-88591">Character entity references
-for ISO 8859-1 characters</a></h2>
-
-<p>The character entity references in this section produce characters whose
-numeric equivalents should already be supported by conforming HTML 2.0 user
-agents. Thus, the character entity reference &amp;divide; is a more convenient
-form than &amp;#247; for obtaining the division sign (÷).</p>
-
-<p>To support these named entities, user agents need only recognize the entity
-names and convert them to characters that lie within the repertoire of <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO88591" class="normref">
-[ISO88591]</a>.</p>
-
-<p>Character 65533 (FFFD hexadecimal) is the last valid character in UCS-2.
-65534 (FFFE hexadecimal) is unassigned and reserved as the byte-swapped version
-of ZERO WIDTH NON-BREAKING SPACE for byte-order detection purposes. 65535 (FFFF
-hexadecimal) is unassigned.</p>
-
-<h3><a name="h-24.2.1">24.2.1</a> The list of characters</h3>
-
-<div class="dtd-fragment">
-<pre>&lt;!-- Portions © International Organization for Standardization 1986
- Permission to copy in any form is granted for use with
- conforming SGML systems and applications as defined in
- ISO 8879, provided this notice is included in all copies.
---&gt;
-&lt;!-- Character entity set. Typical invocation:
- &lt;!ENTITY % HTMLlat1 PUBLIC
- "-//W3C//ENTITIES Latin 1//EN//HTML"&gt;
- %HTMLlat1;
---&gt;
-
-&lt;!ENTITY nbsp CDATA "&amp;#160;" -- no-break space = non-breaking space,
- U+00A0 ISOnum --&gt;
-&lt;!ENTITY iexcl CDATA "&amp;#161;" -- inverted exclamation mark, U+00A1 ISOnum --&gt;
-&lt;!ENTITY cent CDATA "&amp;#162;" -- cent sign, U+00A2 ISOnum --&gt;
-&lt;!ENTITY pound CDATA "&amp;#163;" -- pound sign, U+00A3 ISOnum --&gt;
-&lt;!ENTITY curren CDATA "&amp;#164;" -- currency sign, U+00A4 ISOnum --&gt;
-&lt;!ENTITY yen CDATA "&amp;#165;" -- yen sign = yuan sign, U+00A5 ISOnum --&gt;
-&lt;!ENTITY brvbar CDATA "&amp;#166;" -- broken bar = broken vertical bar,
- U+00A6 ISOnum --&gt;
-&lt;!ENTITY sect CDATA "&amp;#167;" -- section sign, U+00A7 ISOnum --&gt;
-&lt;!ENTITY uml CDATA "&amp;#168;" -- diaeresis = spacing diaeresis,
- U+00A8 ISOdia --&gt;
-&lt;!ENTITY copy CDATA "&amp;#169;" -- copyright sign, U+00A9 ISOnum --&gt;
-&lt;!ENTITY ordf CDATA "&amp;#170;" -- feminine ordinal indicator, U+00AA ISOnum --&gt;
-&lt;!ENTITY laquo CDATA "&amp;#171;" -- left-pointing double angle quotation mark
- = left pointing guillemet, U+00AB ISOnum --&gt;
-&lt;!ENTITY not CDATA "&amp;#172;" -- not sign, U+00AC ISOnum --&gt;
-&lt;!ENTITY shy CDATA "&amp;#173;" -- soft hyphen = discretionary hyphen,
- U+00AD ISOnum --&gt;
-&lt;!ENTITY reg CDATA "&amp;#174;" -- registered sign = registered trade mark sign,
- U+00AE ISOnum --&gt;
-&lt;!ENTITY macr CDATA "&amp;#175;" -- macron = spacing macron = overline
- = APL overbar, U+00AF ISOdia --&gt;
-&lt;!ENTITY deg CDATA "&amp;#176;" -- degree sign, U+00B0 ISOnum --&gt;
-&lt;!ENTITY plusmn CDATA "&amp;#177;" -- plus-minus sign = plus-or-minus sign,
- U+00B1 ISOnum --&gt;
-&lt;!ENTITY sup2 CDATA "&amp;#178;" -- superscript two = superscript digit two
- = squared, U+00B2 ISOnum --&gt;
-&lt;!ENTITY sup3 CDATA "&amp;#179;" -- superscript three = superscript digit three
- = cubed, U+00B3 ISOnum --&gt;
-&lt;!ENTITY acute CDATA "&amp;#180;" -- acute accent = spacing acute,
- U+00B4 ISOdia --&gt;
-&lt;!ENTITY micro CDATA "&amp;#181;" -- micro sign, U+00B5 ISOnum --&gt;
-&lt;!ENTITY para CDATA "&amp;#182;" -- pilcrow sign = paragraph sign,
- U+00B6 ISOnum --&gt;
-&lt;!ENTITY middot CDATA "&amp;#183;" -- middle dot = Georgian comma
- = Greek middle dot, U+00B7 ISOnum --&gt;
-&lt;!ENTITY cedil CDATA "&amp;#184;" -- cedilla = spacing cedilla, U+00B8 ISOdia --&gt;
-&lt;!ENTITY sup1 CDATA "&amp;#185;" -- superscript one = superscript digit one,
- U+00B9 ISOnum --&gt;
-&lt;!ENTITY ordm CDATA "&amp;#186;" -- masculine ordinal indicator,
- U+00BA ISOnum --&gt;
-&lt;!ENTITY raquo CDATA "&amp;#187;" -- right-pointing double angle quotation mark
- = right pointing guillemet, U+00BB ISOnum --&gt;
-&lt;!ENTITY frac14 CDATA "&amp;#188;" -- vulgar fraction one quarter
- = fraction one quarter, U+00BC ISOnum --&gt;
-&lt;!ENTITY frac12 CDATA "&amp;#189;" -- vulgar fraction one half
- = fraction one half, U+00BD ISOnum --&gt;
-&lt;!ENTITY frac34 CDATA "&amp;#190;" -- vulgar fraction three quarters
- = fraction three quarters, U+00BE ISOnum --&gt;
-&lt;!ENTITY iquest CDATA "&amp;#191;" -- inverted question mark
- = turned question mark, U+00BF ISOnum --&gt;
-&lt;!ENTITY Agrave CDATA "&amp;#192;" -- latin capital letter A with grave
- = latin capital letter A grave,
- U+00C0 ISOlat1 --&gt;
-&lt;!ENTITY Aacute CDATA "&amp;#193;" -- latin capital letter A with acute,
- U+00C1 ISOlat1 --&gt;
-&lt;!ENTITY Acirc CDATA "&amp;#194;" -- latin capital letter A with circumflex,
- U+00C2 ISOlat1 --&gt;
-&lt;!ENTITY Atilde CDATA "&amp;#195;" -- latin capital letter A with tilde,
- U+00C3 ISOlat1 --&gt;
-&lt;!ENTITY Auml CDATA "&amp;#196;" -- latin capital letter A with diaeresis,
- U+00C4 ISOlat1 --&gt;
-&lt;!ENTITY Aring CDATA "&amp;#197;" -- latin capital letter A with ring above
- = latin capital letter A ring,
- U+00C5 ISOlat1 --&gt;
-&lt;!ENTITY AElig CDATA "&amp;#198;" -- latin capital letter AE
- = latin capital ligature AE,
- U+00C6 ISOlat1 --&gt;
-&lt;!ENTITY Ccedil CDATA "&amp;#199;" -- latin capital letter C with cedilla,
- U+00C7 ISOlat1 --&gt;
-&lt;!ENTITY Egrave CDATA "&amp;#200;" -- latin capital letter E with grave,
- U+00C8 ISOlat1 --&gt;
-&lt;!ENTITY Eacute CDATA "&amp;#201;" -- latin capital letter E with acute,
- U+00C9 ISOlat1 --&gt;
-&lt;!ENTITY Ecirc CDATA "&amp;#202;" -- latin capital letter E with circumflex,
- U+00CA ISOlat1 --&gt;
-&lt;!ENTITY Euml CDATA "&amp;#203;" -- latin capital letter E with diaeresis,
- U+00CB ISOlat1 --&gt;
-&lt;!ENTITY Igrave CDATA "&amp;#204;" -- latin capital letter I with grave,
- U+00CC ISOlat1 --&gt;
-&lt;!ENTITY Iacute CDATA "&amp;#205;" -- latin capital letter I with acute,
- U+00CD ISOlat1 --&gt;
-&lt;!ENTITY Icirc CDATA "&amp;#206;" -- latin capital letter I with circumflex,
- U+00CE ISOlat1 --&gt;
-&lt;!ENTITY Iuml CDATA "&amp;#207;" -- latin capital letter I with diaeresis,
- U+00CF ISOlat1 --&gt;
-&lt;!ENTITY ETH CDATA "&amp;#208;" -- latin capital letter ETH, U+00D0 ISOlat1 --&gt;
-&lt;!ENTITY Ntilde CDATA "&amp;#209;" -- latin capital letter N with tilde,
- U+00D1 ISOlat1 --&gt;
-&lt;!ENTITY Ograve CDATA "&amp;#210;" -- latin capital letter O with grave,
- U+00D2 ISOlat1 --&gt;
-&lt;!ENTITY Oacute CDATA "&amp;#211;" -- latin capital letter O with acute,
- U+00D3 ISOlat1 --&gt;
-&lt;!ENTITY Ocirc CDATA "&amp;#212;" -- latin capital letter O with circumflex,
- U+00D4 ISOlat1 --&gt;
-&lt;!ENTITY Otilde CDATA "&amp;#213;" -- latin capital letter O with tilde,
- U+00D5 ISOlat1 --&gt;
-&lt;!ENTITY Ouml CDATA "&amp;#214;" -- latin capital letter O with diaeresis,
- U+00D6 ISOlat1 --&gt;
-&lt;!ENTITY times CDATA "&amp;#215;" -- multiplication sign, U+00D7 ISOnum --&gt;
-&lt;!ENTITY Oslash CDATA "&amp;#216;" -- latin capital letter O with stroke
- = latin capital letter O slash,
- U+00D8 ISOlat1 --&gt;
-&lt;!ENTITY Ugrave CDATA "&amp;#217;" -- latin capital letter U with grave,
- U+00D9 ISOlat1 --&gt;
-&lt;!ENTITY Uacute CDATA "&amp;#218;" -- latin capital letter U with acute,
- U+00DA ISOlat1 --&gt;
-&lt;!ENTITY Ucirc CDATA "&amp;#219;" -- latin capital letter U with circumflex,
- U+00DB ISOlat1 --&gt;
-&lt;!ENTITY Uuml CDATA "&amp;#220;" -- latin capital letter U with diaeresis,
- U+00DC ISOlat1 --&gt;
-&lt;!ENTITY Yacute CDATA "&amp;#221;" -- latin capital letter Y with acute,
- U+00DD ISOlat1 --&gt;
-&lt;!ENTITY THORN CDATA "&amp;#222;" -- latin capital letter THORN,
- U+00DE ISOlat1 --&gt;
-&lt;!ENTITY szlig CDATA "&amp;#223;" -- latin small letter sharp s = ess-zed,
- U+00DF ISOlat1 --&gt;
-&lt;!ENTITY agrave CDATA "&amp;#224;" -- latin small letter a with grave
- = latin small letter a grave,
- U+00E0 ISOlat1 --&gt;
-&lt;!ENTITY aacute CDATA "&amp;#225;" -- latin small letter a with acute,
- U+00E1 ISOlat1 --&gt;
-&lt;!ENTITY acirc CDATA "&amp;#226;" -- latin small letter a with circumflex,
- U+00E2 ISOlat1 --&gt;
-&lt;!ENTITY atilde CDATA "&amp;#227;" -- latin small letter a with tilde,
- U+00E3 ISOlat1 --&gt;
-&lt;!ENTITY auml CDATA "&amp;#228;" -- latin small letter a with diaeresis,
- U+00E4 ISOlat1 --&gt;
-&lt;!ENTITY aring CDATA "&amp;#229;" -- latin small letter a with ring above
- = latin small letter a ring,
- U+00E5 ISOlat1 --&gt;
-&lt;!ENTITY aelig CDATA "&amp;#230;" -- latin small letter ae
- = latin small ligature ae, U+00E6 ISOlat1 --&gt;
-&lt;!ENTITY ccedil CDATA "&amp;#231;" -- latin small letter c with cedilla,
- U+00E7 ISOlat1 --&gt;
-&lt;!ENTITY egrave CDATA "&amp;#232;" -- latin small letter e with grave,
- U+00E8 ISOlat1 --&gt;
-&lt;!ENTITY eacute CDATA "&amp;#233;" -- latin small letter e with acute,
- U+00E9 ISOlat1 --&gt;
-&lt;!ENTITY ecirc CDATA "&amp;#234;" -- latin small letter e with circumflex,
- U+00EA ISOlat1 --&gt;
-&lt;!ENTITY euml CDATA "&amp;#235;" -- latin small letter e with diaeresis,
- U+00EB ISOlat1 --&gt;
-&lt;!ENTITY igrave CDATA "&amp;#236;" -- latin small letter i with grave,
- U+00EC ISOlat1 --&gt;
-&lt;!ENTITY iacute CDATA "&amp;#237;" -- latin small letter i with acute,
- U+00ED ISOlat1 --&gt;
-&lt;!ENTITY icirc CDATA "&amp;#238;" -- latin small letter i with circumflex,
- U+00EE ISOlat1 --&gt;
-&lt;!ENTITY iuml CDATA "&amp;#239;" -- latin small letter i with diaeresis,
- U+00EF ISOlat1 --&gt;
-&lt;!ENTITY eth CDATA "&amp;#240;" -- latin small letter eth, U+00F0 ISOlat1 --&gt;
-&lt;!ENTITY ntilde CDATA "&amp;#241;" -- latin small letter n with tilde,
- U+00F1 ISOlat1 --&gt;
-&lt;!ENTITY ograve CDATA "&amp;#242;" -- latin small letter o with grave,
- U+00F2 ISOlat1 --&gt;
-&lt;!ENTITY oacute CDATA "&amp;#243;" -- latin small letter o with acute,
- U+00F3 ISOlat1 --&gt;
-&lt;!ENTITY ocirc CDATA "&amp;#244;" -- latin small letter o with circumflex,
- U+00F4 ISOlat1 --&gt;
-&lt;!ENTITY otilde CDATA "&amp;#245;" -- latin small letter o with tilde,
- U+00F5 ISOlat1 --&gt;
-&lt;!ENTITY ouml CDATA "&amp;#246;" -- latin small letter o with diaeresis,
- U+00F6 ISOlat1 --&gt;
-&lt;!ENTITY divide CDATA "&amp;#247;" -- division sign, U+00F7 ISOnum --&gt;
-&lt;!ENTITY oslash CDATA "&amp;#248;" -- latin small letter o with stroke,
- = latin small letter o slash,
- U+00F8 ISOlat1 --&gt;
-&lt;!ENTITY ugrave CDATA "&amp;#249;" -- latin small letter u with grave,
- U+00F9 ISOlat1 --&gt;
-&lt;!ENTITY uacute CDATA "&amp;#250;" -- latin small letter u with acute,
- U+00FA ISOlat1 --&gt;
-&lt;!ENTITY ucirc CDATA "&amp;#251;" -- latin small letter u with circumflex,
- U+00FB ISOlat1 --&gt;
-&lt;!ENTITY uuml CDATA "&amp;#252;" -- latin small letter u with diaeresis,
- U+00FC ISOlat1 --&gt;
-&lt;!ENTITY yacute CDATA "&amp;#253;" -- latin small letter y with acute,
- U+00FD ISOlat1 --&gt;
-&lt;!ENTITY thorn CDATA "&amp;#254;" -- latin small letter thorn,
- U+00FE ISOlat1 --&gt;
-&lt;!ENTITY yuml CDATA "&amp;#255;" -- latin small letter y with diaeresis,
- U+00FF ISOlat1 --&gt;
-</pre>
-</div>
-
-<h2><a name="h-24.3">24.3</a> <a name="sym">Character entity references for
-symbols, mathematical symbols, and Greek letters</a></h2>
-
-<p>The character entity references in this section produce characters that may
-be represented by glyphs in the widely available Adobe Symbol font, including
-Greek characters, various bracketing symbols, and a selection of mathematical
-operators such as gradient, product, and summation symbols.</p>
-
-<p>To support these entities, user agents may support full <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO10646" class="normref">[ISO10646]</a> or use
-other means. Display of glyphs for these characters may be obtained by being
-able to display the relevant <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO10646" class="normref">[ISO10646]</a> characters or
-by other means, such as internally mapping the listed entities, numeric
-character references, and characters to the appropriate position in some font
-that contains the requisite glyphs.</p>
-
-<div class="note">
-<p><em><strong>When to use Greek entities.</strong> This entity set contains
-all the letters used in modern Greek. However, it does not include Greek
-punctuation, precomposed accented characters nor the non-spacing accents
-(tonos, dialytika) required to compose them. There are no archaic letters,
-Coptic-unique letters, or precomposed letters for Polytonic Greek. The entities
-defined here are not intended for the representation of modern Greek text and
-would not be an efficient representation; rather, they are intended for
-occasional Greek letters used in technical and mathematical works.</em></p>
-</div>
-
-<h3><a name="h-24.3.1">24.3.1</a> The list of characters</h3>
-
-<div class="dtd-fragment">
-<pre>&lt;!-- Mathematical, Greek and Symbolic characters for HTML --&gt;
-
-&lt;!-- Character entity set. Typical invocation:
- &lt;!ENTITY % HTMLsymbol PUBLIC
- "-//W3C//ENTITIES Symbols//EN//HTML"&gt;
- %HTMLsymbol; --&gt;
-
-&lt;!-- Portions © International Organization for Standardization 1986:
- Permission to copy in any form is granted for use with
- conforming SGML systems and applications as defined in
- ISO 8879, provided this notice is included in all copies.
---&gt;
-
-&lt;!-- Relevant ISO entity set is given unless names are newly introduced.
- New names (i.e., not in ISO 8879 list) do not clash with any
- existing ISO 8879 entity names. ISO 10646 character numbers
- are given for each character, in hex. CDATA values are decimal
- conversions of the ISO 10646 values and refer to the document
- character set. Names are ISO 10646 names.
-
---&gt;
-
-&lt;!-- Latin Extended-B --&gt;
-&lt;!ENTITY fnof CDATA "&amp;#402;" -- latin small f with hook = function
- = florin, U+0192 ISOtech --&gt;
-
-&lt;!-- Greek --&gt;
-&lt;!ENTITY Alpha CDATA "&amp;#913;" -- greek capital letter alpha, U+0391 --&gt;
-&lt;!ENTITY Beta CDATA "&amp;#914;" -- greek capital letter beta, U+0392 --&gt;
-&lt;!ENTITY Gamma CDATA "&amp;#915;" -- greek capital letter gamma,
- U+0393 ISOgrk3 --&gt;
-&lt;!ENTITY Delta CDATA "&amp;#916;" -- greek capital letter delta,
- U+0394 ISOgrk3 --&gt;
-&lt;!ENTITY Epsilon CDATA "&amp;#917;" -- greek capital letter epsilon, U+0395 --&gt;
-&lt;!ENTITY Zeta CDATA "&amp;#918;" -- greek capital letter zeta, U+0396 --&gt;
-&lt;!ENTITY Eta CDATA "&amp;#919;" -- greek capital letter eta, U+0397 --&gt;
-&lt;!ENTITY Theta CDATA "&amp;#920;" -- greek capital letter theta,
- U+0398 ISOgrk3 --&gt;
-&lt;!ENTITY Iota CDATA "&amp;#921;" -- greek capital letter iota, U+0399 --&gt;
-&lt;!ENTITY Kappa CDATA "&amp;#922;" -- greek capital letter kappa, U+039A --&gt;
-&lt;!ENTITY Lambda CDATA "&amp;#923;" -- greek capital letter lambda,
- U+039B ISOgrk3 --&gt;
-&lt;!ENTITY Mu CDATA "&amp;#924;" -- greek capital letter mu, U+039C --&gt;
-&lt;!ENTITY Nu CDATA "&amp;#925;" -- greek capital letter nu, U+039D --&gt;
-&lt;!ENTITY Xi CDATA "&amp;#926;" -- greek capital letter xi, U+039E ISOgrk3 --&gt;
-&lt;!ENTITY Omicron CDATA "&amp;#927;" -- greek capital letter omicron, U+039F --&gt;
-&lt;!ENTITY Pi CDATA "&amp;#928;" -- greek capital letter pi, U+03A0 ISOgrk3 --&gt;
-&lt;!ENTITY Rho CDATA "&amp;#929;" -- greek capital letter rho, U+03A1 --&gt;
-&lt;!-- there is no Sigmaf, and no U+03A2 character either --&gt;
-&lt;!ENTITY Sigma CDATA "&amp;#931;" -- greek capital letter sigma,
- U+03A3 ISOgrk3 --&gt;
-&lt;!ENTITY Tau CDATA "&amp;#932;" -- greek capital letter tau, U+03A4 --&gt;
-&lt;!ENTITY Upsilon CDATA "&amp;#933;" -- greek capital letter upsilon,
- U+03A5 ISOgrk3 --&gt;
-&lt;!ENTITY Phi CDATA "&amp;#934;" -- greek capital letter phi,
- U+03A6 ISOgrk3 --&gt;
-&lt;!ENTITY Chi CDATA "&amp;#935;" -- greek capital letter chi, U+03A7 --&gt;
-&lt;!ENTITY Psi CDATA "&amp;#936;" -- greek capital letter psi,
- U+03A8 ISOgrk3 --&gt;
-&lt;!ENTITY Omega CDATA "&amp;#937;" -- greek capital letter omega,
- U+03A9 ISOgrk3 --&gt;
-
-&lt;!ENTITY alpha CDATA "&amp;#945;" -- greek small letter alpha,
- U+03B1 ISOgrk3 --&gt;
-&lt;!ENTITY beta CDATA "&amp;#946;" -- greek small letter beta, U+03B2 ISOgrk3 --&gt;
-&lt;!ENTITY gamma CDATA "&amp;#947;" -- greek small letter gamma,
- U+03B3 ISOgrk3 --&gt;
-&lt;!ENTITY delta CDATA "&amp;#948;" -- greek small letter delta,
- U+03B4 ISOgrk3 --&gt;
-&lt;!ENTITY epsilon CDATA "&amp;#949;" -- greek small letter epsilon,
- U+03B5 ISOgrk3 --&gt;
-&lt;!ENTITY zeta CDATA "&amp;#950;" -- greek small letter zeta, U+03B6 ISOgrk3 --&gt;
-&lt;!ENTITY eta CDATA "&amp;#951;" -- greek small letter eta, U+03B7 ISOgrk3 --&gt;
-&lt;!ENTITY theta CDATA "&amp;#952;" -- greek small letter theta,
- U+03B8 ISOgrk3 --&gt;
-&lt;!ENTITY iota CDATA "&amp;#953;" -- greek small letter iota, U+03B9 ISOgrk3 --&gt;
-&lt;!ENTITY kappa CDATA "&amp;#954;" -- greek small letter kappa,
- U+03BA ISOgrk3 --&gt;
-&lt;!ENTITY lambda CDATA "&amp;#955;" -- greek small letter lambda,
- U+03BB ISOgrk3 --&gt;
-&lt;!ENTITY mu CDATA "&amp;#956;" -- greek small letter mu, U+03BC ISOgrk3 --&gt;
-&lt;!ENTITY nu CDATA "&amp;#957;" -- greek small letter nu, U+03BD ISOgrk3 --&gt;
-&lt;!ENTITY xi CDATA "&amp;#958;" -- greek small letter xi, U+03BE ISOgrk3 --&gt;
-&lt;!ENTITY omicron CDATA "&amp;#959;" -- greek small letter omicron, U+03BF NEW --&gt;
-&lt;!ENTITY pi CDATA "&amp;#960;" -- greek small letter pi, U+03C0 ISOgrk3 --&gt;
-&lt;!ENTITY rho CDATA "&amp;#961;" -- greek small letter rho, U+03C1 ISOgrk3 --&gt;
-&lt;!ENTITY sigmaf CDATA "&amp;#962;" -- greek small letter final sigma,
- U+03C2 ISOgrk3 --&gt;
-&lt;!ENTITY sigma CDATA "&amp;#963;" -- greek small letter sigma,
- U+03C3 ISOgrk3 --&gt;
-&lt;!ENTITY tau CDATA "&amp;#964;" -- greek small letter tau, U+03C4 ISOgrk3 --&gt;
-&lt;!ENTITY upsilon CDATA "&amp;#965;" -- greek small letter upsilon,
- U+03C5 ISOgrk3 --&gt;
-&lt;!ENTITY phi CDATA "&amp;#966;" -- greek small letter phi, U+03C6 ISOgrk3 --&gt;
-&lt;!ENTITY chi CDATA "&amp;#967;" -- greek small letter chi, U+03C7 ISOgrk3 --&gt;
-&lt;!ENTITY psi CDATA "&amp;#968;" -- greek small letter psi, U+03C8 ISOgrk3 --&gt;
-&lt;!ENTITY omega CDATA "&amp;#969;" -- greek small letter omega,
- U+03C9 ISOgrk3 --&gt;
-&lt;!ENTITY thetasym CDATA "&amp;#977;" -- greek small letter theta symbol,
- U+03D1 NEW --&gt;
-&lt;!ENTITY upsih CDATA "&amp;#978;" -- greek upsilon with hook symbol,
- U+03D2 NEW --&gt;
-&lt;!ENTITY piv CDATA "&amp;#982;" -- greek pi symbol, U+03D6 ISOgrk3 --&gt;
-
-&lt;!-- General Punctuation --&gt;
-&lt;!ENTITY bull CDATA "&amp;#8226;" -- bullet = black small circle,
- U+2022 ISOpub --&gt;
-&lt;!-- bullet is NOT the same as bullet operator, U+2219 --&gt;
-&lt;!ENTITY hellip CDATA "&amp;#8230;" -- horizontal ellipsis = three dot leader,
- U+2026 ISOpub --&gt;
-&lt;!ENTITY prime CDATA "&amp;#8242;" -- prime = minutes = feet, U+2032 ISOtech --&gt;
-&lt;!ENTITY Prime CDATA "&amp;#8243;" -- double prime = seconds = inches,
- U+2033 ISOtech --&gt;
-&lt;!ENTITY oline CDATA "&amp;#8254;" -- overline = spacing overscore,
- U+203E NEW --&gt;
-&lt;!ENTITY frasl CDATA "&amp;#8260;" -- fraction slash, U+2044 NEW --&gt;
-
-&lt;!-- Letterlike Symbols --&gt;
-&lt;!ENTITY weierp CDATA "&amp;#8472;" -- script capital P = power set
- = Weierstrass p, U+2118 ISOamso --&gt;
-&lt;!ENTITY image CDATA "&amp;#8465;" -- blackletter capital I = imaginary part,
- U+2111 ISOamso --&gt;
-&lt;!ENTITY real CDATA "&amp;#8476;" -- blackletter capital R = real part symbol,
- U+211C ISOamso --&gt;
-&lt;!ENTITY trade CDATA "&amp;#8482;" -- trade mark sign, U+2122 ISOnum --&gt;
-&lt;!ENTITY alefsym CDATA "&amp;#8501;" -- alef symbol = first transfinite cardinal,
- U+2135 NEW --&gt;
-&lt;!-- alef symbol is NOT the same as hebrew letter alef,
- U+05D0 although the same glyph could be used to depict both characters --&gt;
-
-&lt;!-- Arrows --&gt;
-&lt;!ENTITY larr CDATA "&amp;#8592;" -- leftwards arrow, U+2190 ISOnum --&gt;
-&lt;!ENTITY uarr CDATA "&amp;#8593;" -- upwards arrow, U+2191 ISOnum--&gt;
-&lt;!ENTITY rarr CDATA "&amp;#8594;" -- rightwards arrow, U+2192 ISOnum --&gt;
-&lt;!ENTITY darr CDATA "&amp;#8595;" -- downwards arrow, U+2193 ISOnum --&gt;
-&lt;!ENTITY harr CDATA "&amp;#8596;" -- left right arrow, U+2194 ISOamsa --&gt;
-&lt;!ENTITY crarr CDATA "&amp;#8629;" -- downwards arrow with corner leftwards
- = carriage return, U+21B5 NEW --&gt;
-&lt;!ENTITY lArr CDATA "&amp;#8656;" -- leftwards double arrow, U+21D0 ISOtech --&gt;
-&lt;!-- ISO 10646 does not say that lArr is the same as the 'is implied by' arrow
- but also does not have any other character for that function. So ? lArr can
- be used for 'is implied by' as ISOtech suggests --&gt;
-&lt;!ENTITY uArr CDATA "&amp;#8657;" -- upwards double arrow, U+21D1 ISOamsa --&gt;
-&lt;!ENTITY rArr CDATA "&amp;#8658;" -- rightwards double arrow,
- U+21D2 ISOtech --&gt;
-&lt;!-- ISO 10646 does not say this is the 'implies' character but does not have
- another character with this function so ?
- rArr can be used for 'implies' as ISOtech suggests --&gt;
-&lt;!ENTITY dArr CDATA "&amp;#8659;" -- downwards double arrow, U+21D3 ISOamsa --&gt;
-&lt;!ENTITY hArr CDATA "&amp;#8660;" -- left right double arrow,
- U+21D4 ISOamsa --&gt;
-
-&lt;!-- Mathematical Operators --&gt;
-&lt;!ENTITY forall CDATA "&amp;#8704;" -- for all, U+2200 ISOtech --&gt;
-&lt;!ENTITY part CDATA "&amp;#8706;" -- partial differential, U+2202 ISOtech --&gt;
-&lt;!ENTITY exist CDATA "&amp;#8707;" -- there exists, U+2203 ISOtech --&gt;
-&lt;!ENTITY empty CDATA "&amp;#8709;" -- empty set = null set = diameter,
- U+2205 ISOamso --&gt;
-&lt;!ENTITY nabla CDATA "&amp;#8711;" -- nabla = backward difference,
- U+2207 ISOtech --&gt;
-&lt;!ENTITY isin CDATA "&amp;#8712;" -- element of, U+2208 ISOtech --&gt;
-&lt;!ENTITY notin CDATA "&amp;#8713;" -- not an element of, U+2209 ISOtech --&gt;
-&lt;!ENTITY ni CDATA "&amp;#8715;" -- contains as member, U+220B ISOtech --&gt;
-&lt;!-- should there be a more memorable name than 'ni'? --&gt;
-&lt;!ENTITY prod CDATA "&amp;#8719;" -- n-ary product = product sign,
- U+220F ISOamsb --&gt;
-&lt;!-- prod is NOT the same character as U+03A0 'greek capital letter pi' though
- the same glyph might be used for both --&gt;
-&lt;!ENTITY sum CDATA "&amp;#8721;" -- n-ary sumation, U+2211 ISOamsb --&gt;
-&lt;!-- sum is NOT the same character as U+03A3 'greek capital letter sigma'
- though the same glyph might be used for both --&gt;
-&lt;!ENTITY minus CDATA "&amp;#8722;" -- minus sign, U+2212 ISOtech --&gt;
-&lt;!ENTITY lowast CDATA "&amp;#8727;" -- asterisk operator, U+2217 ISOtech --&gt;
-&lt;!ENTITY radic CDATA "&amp;#8730;" -- square root = radical sign,
- U+221A ISOtech --&gt;
-&lt;!ENTITY prop CDATA "&amp;#8733;" -- proportional to, U+221D ISOtech --&gt;
-&lt;!ENTITY infin CDATA "&amp;#8734;" -- infinity, U+221E ISOtech --&gt;
-&lt;!ENTITY ang CDATA "&amp;#8736;" -- angle, U+2220 ISOamso --&gt;
-&lt;!ENTITY and CDATA "&amp;#8743;" -- logical and = wedge, U+2227 ISOtech --&gt;
-&lt;!ENTITY or CDATA "&amp;#8744;" -- logical or = vee, U+2228 ISOtech --&gt;
-&lt;!ENTITY cap CDATA "&amp;#8745;" -- intersection = cap, U+2229 ISOtech --&gt;
-&lt;!ENTITY cup CDATA "&amp;#8746;" -- union = cup, U+222A ISOtech --&gt;
-&lt;!ENTITY int CDATA "&amp;#8747;" -- integral, U+222B ISOtech --&gt;
-&lt;!ENTITY there4 CDATA "&amp;#8756;" -- therefore, U+2234 ISOtech --&gt;
-&lt;!ENTITY sim CDATA "&amp;#8764;" -- tilde operator = varies with = similar to,
- U+223C ISOtech --&gt;
-&lt;!-- tilde operator is NOT the same character as the tilde, U+007E,
- although the same glyph might be used to represent both --&gt;
-&lt;!ENTITY cong CDATA "&amp;#8773;" -- approximately equal to, U+2245 ISOtech --&gt;
-&lt;!ENTITY asymp CDATA "&amp;#8776;" -- almost equal to = asymptotic to,
- U+2248 ISOamsr --&gt;
-&lt;!ENTITY ne CDATA "&amp;#8800;" -- not equal to, U+2260 ISOtech --&gt;
-&lt;!ENTITY equiv CDATA "&amp;#8801;" -- identical to, U+2261 ISOtech --&gt;
-&lt;!ENTITY le CDATA "&amp;#8804;" -- less-than or equal to, U+2264 ISOtech --&gt;
-&lt;!ENTITY ge CDATA "&amp;#8805;" -- greater-than or equal to,
- U+2265 ISOtech --&gt;
-&lt;!ENTITY sub CDATA "&amp;#8834;" -- subset of, U+2282 ISOtech --&gt;
-&lt;!ENTITY sup CDATA "&amp;#8835;" -- superset of, U+2283 ISOtech --&gt;
-&lt;!-- note that nsup, 'not a superset of, U+2283' is not covered by the Symbol
- font encoding and is not included. Should it be, for symmetry?
- It is in ISOamsn --&gt;
-&lt;!ENTITY nsub CDATA "&amp;#8836;" -- not a subset of, U+2284 ISOamsn --&gt;
-&lt;!ENTITY sube CDATA "&amp;#8838;" -- subset of or equal to, U+2286 ISOtech --&gt;
-&lt;!ENTITY supe CDATA "&amp;#8839;" -- superset of or equal to,
- U+2287 ISOtech --&gt;
-&lt;!ENTITY oplus CDATA "&amp;#8853;" -- circled plus = direct sum,
- U+2295 ISOamsb --&gt;
-&lt;!ENTITY otimes CDATA "&amp;#8855;" -- circled times = vector product,
- U+2297 ISOamsb --&gt;
-&lt;!ENTITY perp CDATA "&amp;#8869;" -- up tack = orthogonal to = perpendicular,
- U+22A5 ISOtech --&gt;
-&lt;!ENTITY sdot CDATA "&amp;#8901;" -- dot operator, U+22C5 ISOamsb --&gt;
-&lt;!-- dot operator is NOT the same character as U+00B7 middle dot --&gt;
-
-&lt;!-- Miscellaneous Technical --&gt;
-&lt;!ENTITY lceil CDATA "&amp;#8968;" -- left ceiling = apl upstile,
- U+2308 ISOamsc --&gt;
-&lt;!ENTITY rceil CDATA "&amp;#8969;" -- right ceiling, U+2309 ISOamsc --&gt;
-&lt;!ENTITY lfloor CDATA "&amp;#8970;" -- left floor = apl downstile,
- U+230A ISOamsc --&gt;
-&lt;!ENTITY rfloor CDATA "&amp;#8971;" -- right floor, U+230B ISOamsc --&gt;
-&lt;!ENTITY lang CDATA "&amp;#9001;" -- left-pointing angle bracket = bra,
- U+2329 ISOtech --&gt;
-&lt;!-- lang is NOT the same character as U+003C 'less than'
- or U+2039 'single left-pointing angle quotation mark' --&gt;
-&lt;!ENTITY rang CDATA "&amp;#9002;" -- right-pointing angle bracket = ket,
- U+232A ISOtech --&gt;
-&lt;!-- rang is NOT the same character as U+003E 'greater than'
- or U+203A 'single right-pointing angle quotation mark' --&gt;
-
-&lt;!-- Geometric Shapes --&gt;
-&lt;!ENTITY loz CDATA "&amp;#9674;" -- lozenge, U+25CA ISOpub --&gt;
-
-&lt;!-- Miscellaneous Symbols --&gt;
-&lt;!ENTITY spades CDATA "&amp;#9824;" -- black spade suit, U+2660 ISOpub --&gt;
-&lt;!-- black here seems to mean filled as opposed to hollow --&gt;
-&lt;!ENTITY clubs CDATA "&amp;#9827;" -- black club suit = shamrock,
- U+2663 ISOpub --&gt;
-&lt;!ENTITY hearts CDATA "&amp;#9829;" -- black heart suit = valentine,
- U+2665 ISOpub --&gt;
-&lt;!ENTITY diams CDATA "&amp;#9830;" -- black diamond suit, U+2666 ISOpub --&gt;
-</pre>
-</div>
-
-<h2><a name="h-24.4">24.4</a> <a name="misc">Character entity references for
-markup-significant and internationalization characters</a></h2>
-
-<p>The character entity references in this section are for escaping
-markup-significant characters (these are the same as those in HTML 2.0 and
-3.2), for denoting spaces and dashes. Other characters in this section apply to
-internationalization issues such as the disambiguation of bidirectional text
-(see the section on <a href="http://www.w3.org/TR/REC-html40/struct/dirlang.html#bidirection">bidirectional
-text</a> for details).</p>
-
-<p>Entities have also been added for the remaining characters occurring in
-CP-1252 which do not occur in the HTMLlat1 or HTMLsymbol entity sets. These all
-occur in the 128 to 159 range within the CP-1252 charset. These entities permit
-the characters to be denoted in a platform-independent manner.</p>
-
-<p>To support these entities, user agents may support full <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO10646" class="normref">[ISO10646]</a> or use
-other means. Display of glyphs for these characters may be obtained by being
-able to display the relevant <a rel="biblioentry" href="http://www.w3.org/TR/REC-html40/references.html#ref-ISO10646" class="normref">[ISO10646]</a> characters or
-by other means, such as internally mapping the listed entities, numeric
-character references, and characters to the appropriate position in some font
-that contains the requisite glyphs.</p>
-
-<h3><a name="h-24.4.1">24.4.1</a> The list of characters</h3>
-
-<div class="dtd-fragment">
-<pre>&lt;!-- Special characters for HTML --&gt;
-
-&lt;!-- Character entity set. Typical invocation:
- &lt;!ENTITY % HTMLspecial PUBLIC
- "-//W3C//ENTITIES Special//EN//HTML"&gt;
- %HTMLspecial; --&gt;
-
-&lt;!-- Portions © International Organization for Standardization 1986:
- Permission to copy in any form is granted for use with
- conforming SGML systems and applications as defined in
- ISO 8879, provided this notice is included in all copies.
---&gt;
-
-&lt;!-- Relevant ISO entity set is given unless names are newly introduced.
- New names (i.e., not in ISO 8879 list) do not clash with any
- existing ISO 8879 entity names. ISO 10646 character numbers
- are given for each character, in hex. CDATA values are decimal
- conversions of the ISO 10646 values and refer to the document
- character set. Names are ISO 10646 names.
-
---&gt;
-
-&lt;!-- C0 Controls and Basic Latin --&gt;
-&lt;!ENTITY quot CDATA "&amp;#34;" -- quotation mark = APL quote,
- U+0022 ISOnum --&gt;
-&lt;!ENTITY amp CDATA "&amp;#38;" -- ampersand, U+0026 ISOnum --&gt;
-&lt;!ENTITY lt CDATA "&amp;#60;" -- less-than sign, U+003C ISOnum --&gt;
-&lt;!ENTITY gt CDATA "&amp;#62;" -- greater-than sign, U+003E ISOnum --&gt;
-
-&lt;!-- Latin Extended-A --&gt;
-&lt;!ENTITY OElig CDATA "&amp;#338;" -- latin capital ligature OE,
- U+0152 ISOlat2 --&gt;
-&lt;!ENTITY oelig CDATA "&amp;#339;" -- latin small ligature oe, U+0153 ISOlat2 --&gt;
-&lt;!-- ligature is a misnomer, this is a separate character in some languages --&gt;
-&lt;!ENTITY Scaron CDATA "&amp;#352;" -- latin capital letter S with caron,
- U+0160 ISOlat2 --&gt;
-&lt;!ENTITY scaron CDATA "&amp;#353;" -- latin small letter s with caron,
- U+0161 ISOlat2 --&gt;
-&lt;!ENTITY Yuml CDATA "&amp;#376;" -- latin capital letter Y with diaeresis,
- U+0178 ISOlat2 --&gt;
-
-&lt;!-- Spacing Modifier Letters --&gt;
-&lt;!ENTITY circ CDATA "&amp;#710;" -- modifier letter circumflex accent,
- U+02C6 ISOpub --&gt;
-&lt;!ENTITY tilde CDATA "&amp;#732;" -- small tilde, U+02DC ISOdia --&gt;
-
-&lt;!-- General Punctuation --&gt;
-&lt;!ENTITY ensp CDATA "&amp;#8194;" -- en space, U+2002 ISOpub --&gt;
-&lt;!ENTITY emsp CDATA "&amp;#8195;" -- em space, U+2003 ISOpub --&gt;
-&lt;!ENTITY thinsp CDATA "&amp;#8201;" -- thin space, U+2009 ISOpub --&gt;
-&lt;!ENTITY zwnj CDATA "&amp;#8204;" -- zero width non-joiner,
- U+200C NEW RFC 2070 --&gt;
-&lt;!ENTITY zwj CDATA "&amp;#8205;" -- zero width joiner, U+200D NEW RFC 2070 --&gt;
-&lt;!ENTITY lrm CDATA "&amp;#8206;" -- left-to-right mark, U+200E NEW RFC 2070 --&gt;
-&lt;!ENTITY rlm CDATA "&amp;#8207;" -- right-to-left mark, U+200F NEW RFC 2070 --&gt;
-&lt;!ENTITY ndash CDATA "&amp;#8211;" -- en dash, U+2013 ISOpub --&gt;
-&lt;!ENTITY mdash CDATA "&amp;#8212;" -- em dash, U+2014 ISOpub --&gt;
-&lt;!ENTITY lsquo CDATA "&amp;#8216;" -- left single quotation mark,
- U+2018 ISOnum --&gt;
-&lt;!ENTITY rsquo CDATA "&amp;#8217;" -- right single quotation mark,
- U+2019 ISOnum --&gt;
-&lt;!ENTITY sbquo CDATA "&amp;#8218;" -- single low-9 quotation mark, U+201A NEW --&gt;
-&lt;!ENTITY ldquo CDATA "&amp;#8220;" -- left double quotation mark,
- U+201C ISOnum --&gt;
-&lt;!ENTITY rdquo CDATA "&amp;#8221;" -- right double quotation mark,
- U+201D ISOnum --&gt;
-&lt;!ENTITY bdquo CDATA "&amp;#8222;" -- double low-9 quotation mark, U+201E NEW --&gt;
-&lt;!ENTITY dagger CDATA "&amp;#8224;" -- dagger, U+2020 ISOpub --&gt;
-&lt;!ENTITY Dagger CDATA "&amp;#8225;" -- double dagger, U+2021 ISOpub --&gt;
-&lt;!ENTITY permil CDATA "&amp;#8240;" -- per mille sign, U+2030 ISOtech --&gt;
-&lt;!ENTITY lsaquo CDATA "&amp;#8249;" -- single left-pointing angle quotation mark,
- U+2039 ISO proposed --&gt;
-&lt;!-- lsaquo is proposed but not yet ISO standardized --&gt;
-&lt;!ENTITY rsaquo CDATA "&amp;#8250;" -- single right-pointing angle quotation mark,
- U+203A ISO proposed --&gt;
-&lt;!-- rsaquo is proposed but not yet ISO standardized --&gt;
-&lt;!ENTITY euro CDATA "&amp;#8364;" -- euro sign, U+20AC NEW --&gt;
-</pre>
-</div>
-
-<div class="navbar" align="center">
-<hr><a href="http://www.w3.org/TR/REC-html40/sgml/framesetdtd.html">previous</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/appendix/changes.html">next</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/cover.html#minitoc">
-contents</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/index/elements.html">elements</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/index/attributes.html">attributes</a> &nbsp; <a href="http://www.w3.org/TR/REC-html40/index/list.html">index</a></div>
-</body></html>
diff --git a/Build/source/libs/gd/libgd-src/src/entities.tcl b/Build/source/libs/gd/libgd-src/src/entities.tcl
deleted file mode 100644
index 1f7c9e7e4af..00000000000
--- a/Build/source/libs/gd/libgd-src/src/entities.tcl
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/tclsh
-
-# get names for html-4.0 characters from:
-# http://www.w3.org/TR/REC-html40/sgml/entities.html
-set f [open entities.html r]
-set entity_name_length_max 0
-set nr_of_entities 0
-while {! [eof $f]} {
- set rec [gets $f]
- if {[scan $rec {&lt;!ENTITY %s CDATA "&amp;#%d;"; --} name val] == 2} {
- set entity($name) $val
- set entity_name_length [string length $name]
- if {$entity_name_length > $entity_name_length_max} {
- set entity_name_length_max $entity_name_length
- }
- incr nr_of_entities
- }
-}
-close $f
-
-set f [open entities.h w]
-puts $f "/*"
-puts $f " * Generated file - do not edit directly."
-puts $f " *"
-puts $f " * This file was generated from:"
-puts $f " * http://www.w3.org/TR/REC-html40/sgml/entities.html"
-puts $f " * by means of the script:"
-puts $f " * entities.tcl"
-puts $f " */"
-puts $f ""
-puts $f "#ifdef __cplusplus"
-puts $f "extern \"C\" {"
-puts $f "#endif"
-puts $f ""
-puts $f "static struct entities_s {"
-puts $f " char *name;"
-puts $f " int value;"
-puts $f "} entities\[\] = {"
-foreach name [lsort [array names entity]] {
- puts $f " {\"$name\", $entity($name)},"
-}
-puts $f "};"
-puts $f ""
-puts $f "#define ENTITY_NAME_LENGTH_MAX $entity_name_length_max"
-puts $f "#define NR_OF_ENTITIES $nr_of_entities"
-puts $f ""
-puts $f "#ifdef __cplusplus"
-puts $f "}"
-puts $f "#endif"
-close $f
diff --git a/Build/source/libs/gd/libgd-src/src/fontconfigtest.c b/Build/source/libs/gd/libgd-src/src/fontconfigtest.c
deleted file mode 100644
index eda5c959a83..00000000000
--- a/Build/source/libs/gd/libgd-src/src/fontconfigtest.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-
-int main (int argc, char *argv[])
-{
- gdImagePtr im;
- int green, blue;
- gdFTStringExtra se;
- im = gdImageCreateTrueColor(300, 100);
- green = gdImageColorAllocate(im, 128, 255, 128);
- gdImageFilledRectangle(im, 0, 0, 300, 100, green);
- blue = gdImageColorAllocate(im, 128, 128, 255);
- /* Default: fontlist argument is a pathname to a truetype font */
- gdImageStringFT(im, 0, blue, "arial",
- 12, 0, 20, 20, "plain pathname default");
- /* Specifically opt for fontconfig */
- se.flags = gdFTEX_FONTCONFIG;
- gdImageStringFTEx(im, 0, blue, "arial:bold",
- 12, 0, 20, 40, "fontconfig arial:bold", &se);
- /* Change the default to fontconfig */
- if (!gdFTUseFontConfig(1)) {
- fprintf(stderr, "fontconfig not compiled into gd\n");
- }
- /* Use fontconfig by (newly set) default */
- gdImageStringFT(im, 0, blue, "arial:bold",
- 12, 0, 20, 60, "fontconfig arial:bold default");
- /* Explicitly use a pathname despite fontconfig default */
- se.flags = gdFTEX_FONTPATHNAME;
- gdImageStringFTEx(im, 0, blue, "arial",
- 12, 0, 20, 80, "plain pathname", &se);
-#ifdef HAVE_LIBPNG
- FILE *out = fopen("fontconfigtest.png", "wb");
- gdImagePng(im, out);
- fclose(out);
-#else
- fprintf(stderr, "PNG not compiled into gd\n");
-#endif /* HAVE_LIBPNG */
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/fontsizetest.c b/Build/source/libs/gd/libgd-src/src/fontsizetest.c
deleted file mode 100644
index c32c77728ab..00000000000
--- a/Build/source/libs/gd/libgd-src/src/fontsizetest.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-
-void
-dosizes (gdImagePtr im, int color, char *fontfile,
- int x, int y, const char *string)
-{
- int brect[8];
- double curang = 0.0;
- char *cp;
- int cursize;
- char buf[60];
-
- for (cursize = 1; cursize <= 20; cursize++) {
- sprintf (buf, "%d: %s", cursize, string);
-
- /* The case of newlines is taken care of in the gdImageStringTTF call */
- cp =
- gdImageStringFT (im, brect, color, fontfile, cursize, curang, x, y,
- buf);
- if (cp)
- fprintf(stderr, "%s\n", cp);
- y += cursize + 4;
-
- /* render the same fontsize with antialiasing turned off */
- cp =
- gdImageStringFT (im, brect, 0 - color, fontfile, cursize, curang, x,
- y, buf);
- if (cp)
- fprintf(stderr, "%s\n", cp);
- y += cursize + 4;
- }
-}
-
-void
-dotest (char *font, int w, int h, char *string, const char *filename)
-{
- gdImagePtr im;
- FILE *out;
- int bg;
- int fc;
-
- im = gdImageCreate (w, h);
- bg = gdImageColorAllocate (im, 0, 0, 0);
-
- gdImageFilledRectangle (im, 1, 1, w - 1, h - 1, bg);
-
- fc = gdImageColorAllocate (im, 255, 192, 192);
-
- out = fopen (filename, "wb");
-
- dosizes (im, fc, font, 20, 20, string);
-
-#if defined(HAVE_LIBPNG)
- gdImagePng (im, out);
-#elif defined(HAVE_LIBJPEG)
- gdImageJpeg (im, out, -1);
-#endif
- fclose (out);
-}
-
-int
-main(void)
-{
-
-#if defined(HAVE_LIBPNG)
- dotest ("times", 400, 600, ".....Hello, there!", "fontsizetest1.png");
- dotest ("cour", 400, 600, ".....Hello, there!", "fontsizetest2.png");
- dotest ("arial", 400, 600, ".....Hello, there!", "fontsizetest3.png");
- dotest ("luximr", 400, 600, ".....Hello, there!", "fontsizetest4.png");
-#elif defined(HAVE_LIBJPEG)
- dotest ("times", 400, 600, ".....Hello, there!", "fontsizetest1.jpeg");
- dotest ("cour", 400, 600, ".....Hello, there!", "fontsizetest2.jpeg");
- dotest ("arial", 400, 600, ".....Hello, there!", "fontsizetest3.jpeg");
- dotest ("luximr", 400, 600, ".....Hello, there!", "fontsizetest4.jpeg");
-#else
- fprintf(stderr, "no PNG or JPEG support\n");
-#endif
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/fontwheeltest.c b/Build/source/libs/gd/libgd-src/src/fontwheeltest.c
deleted file mode 100644
index a225810db56..00000000000
--- a/Build/source/libs/gd/libgd-src/src/fontwheeltest.c
+++ /dev/null
@@ -1,136 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-#include "gd.h"
-#define DEGTORAD(x) ( (x) * (2.0 * 3.14159265) / 360.0 )
-
-void
-doerr (FILE * err, const char *msg)
-{
- if (err) {
- fprintf (err, "%s\n", msg);
- fflush (err);
- }
-}
-
-void
-dowheel (gdImagePtr im, int color, char *fontfile, int fontsize,
- double angle, int x, int y, int offset, char *string)
-{
- int brect[8];
- FILE *err;
- double curangrads, curang, x0, y0;
- char *cp;
-
- err = fopen ("err.out", "a");
- doerr (err, "------------- New fontwheel --------------");
- doerr (err, fontfile);
- doerr (err, string);
- doerr (err, "------------------------------------------");
-
- for (curang = 0.0; curang < 360.0; curang += angle) {
- curangrads = DEGTORAD(curang);
- x0 = x + cos (curangrads) * offset;
- y0 = y - sin (curangrads) * offset;
-
- /* The case of newlines is taken care of in the gdImageStringTTF call */
- cp = gdImageStringFT (im, brect, color, fontfile, fontsize,
- curangrads, x0, y0, string);
- if (cp)
- doerr (err, cp);
-
- gdImagePolygon (im, (gdPointPtr)brect, 4, color);
- }
-
- fclose (err);
-}
-
-#if 0
-void
-dolines (gdImagePtr im, int color, double incr, int x, int y, int offset,
- int length)
-{
- double curang;
- double angle;
- double x0, x1, y0, y1;
- for (curang = 0.0; curang < 360.0; curang += incr) {
- angle = curang * (2.0 * 3.14159265) / 360.0;
- x0 = cos (angle) * offset + x;
- x1 = cos (angle) * (offset + length) + x;
- y0 = sin (angle) * offset + y;
- y1 = sin (angle) * (offset + length) + y;
- gdImageLine (im, x0, y0, x1, y1, color);
- }
-}
-#endif
-
-void
-dotest (char *font, int size, double incr,
- int w, int h, char *string, const char *filename)
-{
- gdImagePtr im;
- FILE *out;
- int bg;
- int fc;
-#if 0
- int lc;
-#endif
- int xc = w / 2;
- int yc = h / 2;
-
- im = gdImageCreate (w, h);
- bg = gdImageColorAllocate (im, 0, 0, 0);
-
- gdImageFilledRectangle (im, 1, 1, w - 1, h - 1, bg);
-
- fc = gdImageColorAllocate (im, 255, 192, 192);
-#if 0
- lc = gdImageColorAllocate (im, 192, 255, 255);
-#endif
-
- out = fopen (filename, "wb");
-
- dowheel (im, fc, font, size, incr, xc, yc, 20, string);
-#if 0
- dolines (im, lc, incr, xc, yc, 20, 120);
-#endif
-
-#if defined(HAVE_LIBPNG)
- gdImagePng (im, out);
-#elif defined(HAVE_LIBJPEG)
- gdImageJpeg (im, out, -1);
-#endif
-
- fclose (out);
-}
-
-int
-main(void)
-{
-
-#if defined(HAVE_LIBPNG)
- dotest ("times", 16, 20.0, 400, 400, "Hello, there!",
- "fontwheeltest1.png");
- dotest ("times", 16, 30.0, 400, 400, "Hello, there!",
- "fontwheeltest2.png");
- dotest ("arial", 16, 45.0, 400, 400, "Hello, there!",
- "fontwheeltest3.png");
- dotest ("arial", 16, 90.0, 400, 400, "Hello\nthere!",
- "fontwheeltest4.png");
-#elif defined(HAVE_LIBJPEG)
- dotest ("times", 16, 20.0, 400, 400, "Hello, there!",
- "fontwheeltest1.jpeg");
- dotest ("times", 16, 30.0, 400, 400, "Hello, there!",
- "fontwheeltest2.jpeg");
- dotest ("arial", 16, 45.0, 400, 400, "Hello, there!",
- "fontwheeltest3.jpeg");
- dotest ("arial", 16, 90.0, 400, 400, "Hello\nthere!",
- "fontwheeltest4.jpeg");
-#else
- fprintf(stderr, "no PNG or JPEG support\n");
-#endif
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd.c b/Build/source/libs/gd/libgd-src/src/gd.c
deleted file mode 100644
index 3375eed89ef..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd.c
+++ /dev/null
@@ -1,4546 +0,0 @@
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd_intern.h"
-
-/* 2.03: don't include zlib here or we can't build without PNG */
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_color.h"
-#include "gd_errors.h"
-
-/* 2.0.12: this now checks the clipping rectangle */
-#define gdImageBoundsSafeMacro(im, x, y) (!((((y) < (im)->cy1) || ((y) > (im)->cy2)) || (((x) < (im)->cx1) || ((x) > (im)->cx2))))
-
-#ifdef _OSD_POSIX /* BS2000 uses the EBCDIC char set instead of ASCII */
-#define CHARSET_EBCDIC
-#define __attribute__(any) /*nothing */
-#endif
-/*_OSD_POSIX*/
-
-#ifndef CHARSET_EBCDIC
-#define ASC(ch) ch
-#else /*CHARSET_EBCDIC */
-#define ASC(ch) gd_toascii[(unsigned char)ch]
-static const unsigned char gd_toascii[256] = {
- /*00 */ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
- 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................ */
- /*10 */ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
- 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................ */
- /*20 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................ */
- /*30 */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
- 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................ */
- /*40 */ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
- 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+| */
- /*50 */ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
- 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);. */
- /*60 */ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
- 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
- /*-/........^,%_>?*/
- /*70 */ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
- 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'=" */
- /*80 */ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi...... */
- /*90 */ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
- 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr...... */
- /*a0 */ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
- 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz...... */
- /*b0 */ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
- 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\].. */
- /*c0 */ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI...... */
- /*d0 */ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
- 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR...... */
- /*e0 */ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
- 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ...... */
- /*f0 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~ */
-};
-#endif /*CHARSET_EBCDIC */
-
-extern const int gdCosT[];
-extern const int gdSinT[];
-
-/**
- * Group: Error Handling
- */
-
-void gd_stderr_error(int priority, const char *format, va_list args)
-{
- switch (priority) {
- case GD_ERROR:
- fputs("GD Error: ", stderr);
- break;
- case GD_WARNING:
- fputs("GD Warning: ", stderr);
- break;
- case GD_NOTICE:
- fputs("GD Notice: ", stderr);
- break;
- case GD_INFO:
- fputs("GD Info: ", stderr);
- break;
- case GD_DEBUG:
- fputs("GD Debug: ", stderr);
- break;
- }
- vfprintf(stderr, format, args);
- fflush(stderr);
-}
-
-static gdErrorMethod gd_error_method = gd_stderr_error;
-
-static void _gd_error_ex(int priority, const char *format, va_list args)
-{
- if (gd_error_method) {
- gd_error_method(priority, format, args);
- }
-}
-
-void gd_error(const char *format, ...)
-{
- va_list args;
-
- va_start(args, format);
- _gd_error_ex(GD_WARNING, format, args);
- va_end(args);
-}
-void gd_error_ex(int priority, const char *format, ...)
-{
- va_list args;
-
- va_start(args, format);
- _gd_error_ex(priority, format, args);
- va_end(args);
-}
-
-/*
- Function: gdSetErrorMethod
-*/
-BGD_DECLARE(void) gdSetErrorMethod(gdErrorMethod error_method)
-{
- gd_error_method = error_method;
-}
-
-/*
- Function: gdClearErrorMethod
-*/
-BGD_DECLARE(void) gdClearErrorMethod(void)
-{
- gd_error_method = gd_stderr_error;
-}
-
-static void gdImageBrushApply (gdImagePtr im, int x, int y);
-static void gdImageTileApply (gdImagePtr im, int x, int y);
-
-BGD_DECLARE(int) gdImageGetTrueColorPixel (gdImagePtr im, int x, int y);
-
-/**
- * Group: Creation and Destruction
- */
-
-/*
- Function: gdImageCreate
-
- gdImageCreate is called to create palette-based images, with no
- more than 256 colors. The image must eventually be destroyed using
- gdImageDestroy().
-
- Parameters:
-
- sx - The image width.
- sy - The image height.
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
- (start code)
-
- gdImagePtr im;
- im = gdImageCreate(64, 64);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
-
- See Also:
-
- <gdImageCreateTrueColor>
-
- */
-BGD_DECLARE(gdImagePtr) gdImageCreate (int sx, int sy)
-{
- int i;
- gdImagePtr im;
-
- if (overflow2(sx, sy)) {
- return NULL;
- }
-
- if (overflow2(sizeof (unsigned char *), sy)) {
- return NULL;
- }
- if (overflow2(sizeof (unsigned char), sx)) {
- return NULL;
- }
-
- im = (gdImage *) gdCalloc(1, sizeof(gdImage));
- if (!im) {
- return NULL;
- }
-
- /* Row-major ever since gd 1.3 */
- im->pixels = (unsigned char **) gdMalloc (sizeof (unsigned char *) * sy);
- if (!im->pixels) {
- gdFree(im);
- return NULL;
- }
-
- im->polyInts = 0;
- im->polyAllocated = 0;
- im->brush = 0;
- im->tile = 0;
- im->style = 0;
- for (i = 0; (i < sy); i++) {
- /* Row-major ever since gd 1.3 */
- im->pixels[i] = (unsigned char *) gdCalloc (sx, sizeof (unsigned char));
- if (!im->pixels[i]) {
- for (--i ; i >= 0; i--) {
- gdFree(im->pixels[i]);
- }
- gdFree(im->pixels);
- gdFree(im);
- return NULL;
- }
-
- }
- im->sx = sx;
- im->sy = sy;
- im->colorsTotal = 0;
- im->transparent = (-1);
- im->interlace = 0;
- im->thick = 1;
- im->AA = 0;
- for (i = 0; (i < gdMaxColors); i++) {
- im->open[i] = 1;
- };
- im->trueColor = 0;
- im->tpixels = 0;
- im->cx1 = 0;
- im->cy1 = 0;
- im->cx2 = im->sx - 1;
- im->cy2 = im->sy - 1;
- im->res_x = GD_RESOLUTION;
- im->res_y = GD_RESOLUTION;
- im->interpolation = NULL;
- im->interpolation_id = GD_BILINEAR_FIXED;
- return im;
-}
-
-
-
-/*
- Function: gdImageCreateTrueColor
-
- <gdImageCreateTrueColor> is called to create truecolor images,
- with an essentially unlimited number of colors. Invoke
- <gdImageCreateTrueColor> with the x and y dimensions of the
- desired image. <gdImageCreateTrueColor> returns a <gdImagePtr>
- to the new image, or NULL if unable to allocate the image. The
- image must eventually be destroyed using <gdImageDestroy>().
-
- Truecolor images are always filled with black at creation
- time. There is no concept of a "background" color index.
-
- Parameters:
-
- sx - The image width.
- sy - The image height.
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
- (start code)
-
- gdImagePtr im;
- im = gdImageCreateTrueColor(64, 64);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
-
- See Also:
-
- <gdImageCreateTrueColor>
-
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateTrueColor (int sx, int sy)
-{
- int i;
- gdImagePtr im;
-
- if (overflow2(sx, sy)) {
- return NULL;
- }
- if (overflow2(sizeof (int *), sy)) {
- return 0;
- }
- if (overflow2(sizeof(int), sx)) {
- return NULL;
- }
-
- im = (gdImage *) gdMalloc (sizeof (gdImage));
- if (!im) {
- return 0;
- }
- memset (im, 0, sizeof (gdImage));
-
- im->tpixels = (int **) gdMalloc (sizeof (int *) * sy);
- if (!im->tpixels) {
- gdFree(im);
- return 0;
- }
- im->polyInts = 0;
- im->polyAllocated = 0;
- im->brush = 0;
- im->tile = 0;
- im->style = 0;
- for (i = 0; (i < sy); i++) {
- im->tpixels[i] = (int *) gdCalloc (sx, sizeof (int));
- if (!im->tpixels[i]) {
- /* 2.0.34 */
- i--;
- while (i >= 0) {
- gdFree(im->tpixels[i]);
- i--;
- }
- gdFree(im->tpixels);
- gdFree(im);
- return 0;
- }
- }
- im->sx = sx;
- im->sy = sy;
- im->transparent = (-1);
- im->interlace = 0;
- im->trueColor = 1;
- /* 2.0.2: alpha blending is now on by default, and saving of alpha is
- off by default. This allows font antialiasing to work as expected
- on the first try in JPEGs -- quite important -- and also allows
- for smaller PNGs when saving of alpha channel is not really
- desired, which it usually isn't! */
- im->saveAlphaFlag = 0;
- im->alphaBlendingFlag = 1;
- im->thick = 1;
- im->AA = 0;
- im->cx1 = 0;
- im->cy1 = 0;
- im->cx2 = im->sx - 1;
- im->cy2 = im->sy - 1;
- im->res_x = GD_RESOLUTION;
- im->res_y = GD_RESOLUTION;
- im->interpolation = NULL;
- im->interpolation_id = GD_BILINEAR_FIXED;
- return im;
-}
-
-/*
- Function: gdImageDestroy
-
- <gdImageDestroy> is used to free the memory associated with an
- image. It is important to invoke <gdImageDestroy> before exiting
- your program or assigning a new image to a <gdImagePtr> variable.
-
- Parameters:
-
- im - Pointer to the gdImage to delete.
-
- Returns:
-
- Nothing.
-
- Example:
- (start code)
-
- gdImagePtr im;
- im = gdImageCreate(10, 10);
- // ... Use the image ...
- // Now destroy it
- gdImageDestroy(im);
-
- (end code)
-
-*/
-
-BGD_DECLARE(void) gdImageDestroy (gdImagePtr im)
-{
- int i;
- if (im->pixels) {
- for (i = 0; (i < im->sy); i++) {
- gdFree (im->pixels[i]);
- }
- gdFree (im->pixels);
- }
- if (im->tpixels) {
- for (i = 0; (i < im->sy); i++) {
- gdFree (im->tpixels[i]);
- }
- gdFree (im->tpixels);
- }
- if (im->polyInts) {
- gdFree (im->polyInts);
- }
- if (im->style) {
- gdFree (im->style);
- }
- gdFree (im);
-}
-
-/**
- * Group: Color
- */
-
-/**
- * Function: gdImageColorClosest
- *
- * Gets the closest color of the image
- *
- * This is a simplified variant of <gdImageColorClosestAlpha> where the alpha
- * channel is always opaque.
- *
- * Parameters:
- * im - The image.
- * r - The value of the red component.
- * g - The value of the green component.
- * b - The value of the blue component.
- *
- * Returns:
- * The closest color already available in the palette for palette images;
- * the color value of the given components for truecolor images.
- *
- * See also:
- * - <gdImageColorExact>
- */
-BGD_DECLARE(int) gdImageColorClosest (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorClosestAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-/**
- * Function: gdImageColorClosestAlpha
- *
- * Gets the closest color of the image
- *
- * Parameters:
- * im - The image.
- * r - The value of the red component.
- * g - The value of the green component.
- * b - The value of the blue component.
- * a - The value of the alpha component.
- *
- * Returns:
- * The closest color already available in the palette for palette images;
- * the color value of the given components for truecolor images.
- *
- * See also:
- * - <gdImageColorExactAlpha>
- */
-BGD_DECLARE(int) gdImageColorClosestAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- long rd, gd, bd, ad;
- int ct = (-1);
- int first = 1;
- long mindist = 0;
- if (im->trueColor) {
- return gdTrueColorAlpha (r, g, b, a);
- }
- for (i = 0; (i < (im->colorsTotal)); i++) {
- long dist;
- if (im->open[i]) {
- continue;
- }
- rd = (im->red[i] - r);
- gd = (im->green[i] - g);
- bd = (im->blue[i] - b);
- /* gd 2.02: whoops, was - b (thanks to David Marwood) */
- /* gd 2.16: was blue rather than alpha! Geez! Thanks to
- Artur Jakub Jerzak */
- ad = (im->alpha[i] - a);
- dist = rd * rd + gd * gd + bd * bd + ad * ad;
- if (first || (dist < mindist)) {
- mindist = dist;
- ct = i;
- first = 0;
- }
- }
- return ct;
-}
-
-/* This code is taken from http://www.acm.org/jgt/papers/SmithLyons96/hwb_rgb.html, an article
- * on colour conversion to/from RBG and HWB colour systems.
- * It has been modified to return the converted value as a * parameter.
- */
-
-#define RETURN_HWB(h, w, b) {HWB->H = h; HWB->W = w; HWB->B = b; return HWB;}
-#define RETURN_RGB(r, g, b) {RGB->R = r; RGB->G = g; RGB->B = b; return RGB;}
-#define HWB_UNDEFINED -1
-#define SETUP_RGB(s, r, g, b) {s.R = r/255.0; s.G = g/255.0; s.B = b/255.0;}
-
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#define MIN3(a,b,c) ((a)<(b)?(MIN(a,c)):(MIN(b,c)))
-#define MAX(a,b) ((a)<(b)?(b):(a))
-#define MAX3(a,b,c) ((a)<(b)?(MAX(b,c)):(MAX(a,c)))
-
-
-/*
- * Theoretically, hue 0 (pure red) is identical to hue 6 in these transforms. Pure
- * red always maps to 6 in this implementation. Therefore UNDEFINED can be
- * defined as 0 in situations where only unsigned numbers are desired.
- */
-typedef struct {
- float R, G, B;
-}
-RGBType;
-typedef struct {
- float H, W, B;
-}
-HWBType;
-
-static HWBType *
-RGB_to_HWB (RGBType RGB, HWBType * HWB)
-{
-
- /*
- * RGB are each on [0, 1]. W and B are returned on [0, 1] and H is
- * returned on [0, 6]. Exception: H is returned UNDEFINED if W == 1 - B.
- */
-
- float R = RGB.R, G = RGB.G, B = RGB.B, w, v, b, f;
- int i;
-
- w = MIN3 (R, G, B);
- v = MAX3 (R, G, B);
- b = 1 - v;
- if (v == w)
- RETURN_HWB (HWB_UNDEFINED, w, b);
- f = (R == w) ? G - B : ((G == w) ? B - R : R - G);
- i = (R == w) ? 3 : ((G == w) ? 5 : 1);
- RETURN_HWB (i - f / (v - w), w, b);
-
-}
-
-static float
-HWB_Diff (int r1, int g1, int b1, int r2, int g2, int b2)
-{
- RGBType RGB1, RGB2;
- HWBType HWB1, HWB2;
- float diff;
-
- SETUP_RGB (RGB1, r1, g1, b1);
- SETUP_RGB (RGB2, r2, g2, b2);
-
- RGB_to_HWB (RGB1, &HWB1);
- RGB_to_HWB (RGB2, &HWB2);
-
- /*
- * I made this bit up; it seems to produce OK results, and it is certainly
- * more visually correct than the current RGB metric. (PJW)
- */
-
- if ((HWB1.H == HWB_UNDEFINED) || (HWB2.H == HWB_UNDEFINED)) {
- diff = 0; /* Undefined hues always match... */
- } else {
- diff = fabs (HWB1.H - HWB2.H);
- if (diff > 3) {
- diff = 6 - diff; /* Remember, it's a colour circle */
- }
- }
-
- diff =
- diff * diff + (HWB1.W - HWB2.W) * (HWB1.W - HWB2.W) + (HWB1.B -
- HWB2.B) * (HWB1.B -
- HWB2.B);
-
- return diff;
-}
-
-
-#if 0
-/*
- * This is not actually used, but is here for completeness, in case someone wants to
- * use the HWB stuff for anything else...
- */
-static RGBType *
-HWB_to_RGB (HWBType HWB, RGBType * RGB)
-{
-
- /*
- * H is given on [0, 6] or UNDEFINED. W and B are given on [0, 1].
- * RGB are each returned on [0, 1].
- */
-
- float h = HWB.H, w = HWB.W, b = HWB.B, v, n, f;
- int i;
-
- v = 1 - b;
- if (h == HWB_UNDEFINED)
- RETURN_RGB (v, v, v);
- i = floor (h);
- f = h - i;
- if (i & 1)
- f = 1 - f; /* if i is odd */
- n = w + f * (v - w); /* linear interpolation between w and v */
- switch (i) {
- case 6:
- case 0:
- RETURN_RGB (v, n, w);
- case 1:
- RETURN_RGB (n, v, w);
- case 2:
- RETURN_RGB (w, v, n);
- case 3:
- RETURN_RGB (w, n, v);
- case 4:
- RETURN_RGB (n, w, v);
- case 5:
- RETURN_RGB (v, w, n);
- }
-
- return RGB;
-
-}
-#endif
-
-/*
- Function: gdImageColorClosestHWB
-*/
-BGD_DECLARE(int) gdImageColorClosestHWB (gdImagePtr im, int r, int g, int b)
-{
- int i;
- /* long rd, gd, bd; */
- int ct = (-1);
- int first = 1;
- float mindist = 0;
- if (im->trueColor) {
- return gdTrueColor (r, g, b);
- }
- for (i = 0; (i < (im->colorsTotal)); i++) {
- float dist;
- if (im->open[i]) {
- continue;
- }
- dist = HWB_Diff (im->red[i], im->green[i], im->blue[i], r, g, b);
- if (first || (dist < mindist)) {
- mindist = dist;
- ct = i;
- first = 0;
- }
- }
- return ct;
-}
-
-/**
- * Function: gdImageColorExact
- *
- * Gets the exact color of the image
- *
- * This is a simplified variant of <gdImageColorExactAlpha> where the alpha
- * channel is always opaque.
- *
- * Parameters:
- * im - The image.
- * r - The value of the red component.
- * g - The value of the green component.
- * b - The value of the blue component.
- *
- * Returns:
- * The exact color already available in the palette for palette images; if
- * there is no exact color, -1 is returned.
- * For truecolor images the color value of the given components is returned.
- *
- * See also:
- * - <gdImageColorClosest>
- */
-BGD_DECLARE(int) gdImageColorExact (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorExactAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-/**
- * Function: gdImageColorExactAlpha
- *
- * Gets the exact color of the image
- *
- * Parameters:
- * im - The image.
- * r - The value of the red component.
- * g - The value of the green component.
- * b - The value of the blue component.
- * a - The value of the alpha component.
- *
- * Returns:
- * The exact color already available in the palette for palette images; if
- * there is no exact color, -1 is returned.
- * For truecolor images the color value of the given components is returned.
- *
- * See also:
- * - <gdImageColorClosestAlpha>
- * - <gdTrueColorAlpha>
- */
-BGD_DECLARE(int) gdImageColorExactAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- if (im->trueColor) {
- return gdTrueColorAlpha (r, g, b, a);
- }
- for (i = 0; (i < (im->colorsTotal)); i++) {
- if (im->open[i]) {
- continue;
- }
- if ((im->red[i] == r) &&
- (im->green[i] == g) && (im->blue[i] == b) && (im->alpha[i] == a)) {
- return i;
- }
- }
- return -1;
-}
-
-/**
- * Function: gdImageColorAllocate
- *
- * Allocates a color
- *
- * This is a simplified variant of <gdImageColorAllocateAlpha> where the alpha
- * channel is always opaque.
- *
- * Parameters:
- * im - The image.
- * r - The value of the red component.
- * g - The value of the green component.
- * b - The value of the blue component.
- *
- * Returns:
- * The color value.
- *
- * See also:
- * - <gdImageColorDeallocate>
- */
-BGD_DECLARE(int) gdImageColorAllocate (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorAllocateAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-/**
- * Function: gdImageColorAllocateAlpha
- *
- * Allocates a color
- *
- * This is typically used for palette images, but can be used for truecolor
- * images as well.
- *
- * Parameters:
- * im - The image.
- * r - The value of the red component.
- * g - The value of the green component.
- * b - The value of the blue component.
- *
- * Returns:
- * The color value.
- *
- * See also:
- * - <gdImageColorDeallocate>
- */
-BGD_DECLARE(int) gdImageColorAllocateAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int i;
- int ct = (-1);
- if (im->trueColor) {
- return gdTrueColorAlpha (r, g, b, a);
- }
- for (i = 0; (i < (im->colorsTotal)); i++) {
- if (im->open[i]) {
- ct = i;
- break;
- }
- }
- if (ct == (-1)) {
- ct = im->colorsTotal;
- if (ct == gdMaxColors) {
- return -1;
- }
- im->colorsTotal++;
- }
- im->red[ct] = r;
- im->green[ct] = g;
- im->blue[ct] = b;
- im->alpha[ct] = a;
- im->open[ct] = 0;
- return ct;
-}
-
-/*
- Function: gdImageColorResolve
-
- gdImageColorResolve is an alternative for the code fragment
- (start code)
- if ((color=gdImageColorExact(im,R,G,B)) < 0)
- if ((color=gdImageColorAllocate(im,R,G,B)) < 0)
- color=gdImageColorClosest(im,R,G,B);
- (end code)
- in a single function. Its advantage is that it is guaranteed to
- return a color index in one search over the color table.
-*/
-
-BGD_DECLARE(int) gdImageColorResolve (gdImagePtr im, int r, int g, int b)
-{
- return gdImageColorResolveAlpha (im, r, g, b, gdAlphaOpaque);
-}
-
-/*
- Function: gdImageColorResolveAlpha
-*/
-BGD_DECLARE(int) gdImageColorResolveAlpha (gdImagePtr im, int r, int g, int b, int a)
-{
- int c;
- int ct = -1;
- int op = -1;
- long rd, gd, bd, ad, dist;
- long mindist = 4 * 255 * 255; /* init to max poss dist */
- if (im->trueColor) {
- return gdTrueColorAlpha (r, g, b, a);
- }
-
- for (c = 0; c < im->colorsTotal; c++) {
- if (im->open[c]) {
- op = c; /* Save open slot */
- continue; /* Color not in use */
- }
- if (c == im->transparent) {
- /* don't ever resolve to the color that has
- * been designated as the transparent color */
- continue;
- }
- rd = (long) (im->red[c] - r);
- gd = (long) (im->green[c] - g);
- bd = (long) (im->blue[c] - b);
- ad = (long) (im->alpha[c] - a);
- dist = rd * rd + gd * gd + bd * bd + ad * ad;
- if (dist < mindist) {
- if (dist == 0) {
- return c; /* Return exact match color */
- }
- mindist = dist;
- ct = c;
- }
- }
- /* no exact match. We now know closest, but first try to allocate exact */
- if (op == -1) {
- op = im->colorsTotal;
- if (op == gdMaxColors) {
- /* No room for more colors */
- return ct; /* Return closest available color */
- }
- im->colorsTotal++;
- }
- im->red[op] = r;
- im->green[op] = g;
- im->blue[op] = b;
- im->alpha[op] = a;
- im->open[op] = 0;
- return op; /* Return newly allocated color */
-}
-
-/**
- * Function: gdImageColorDeallocate
- *
- * Removes a palette entry
- *
- * This is a no-op for truecolor images.
- *
- * Parameters:
- * im - The image.
- * color - The palette index.
- *
- * See also:
- * - <gdImageColorAllocate>
- * - <gdImageColorAllocateAlpha>
- */
-BGD_DECLARE(void) gdImageColorDeallocate (gdImagePtr im, int color)
-{
- if (im->trueColor || (color >= gdMaxColors) || (color < 0)) {
- return;
- }
- /* Mark it open. */
- im->open[color] = 1;
-}
-
-/**
- * Function: gdImageColorTransparent
- *
- * Sets the transparent color of the image
- *
- * Parameter:
- * im - The image.
- * color - The color.
- *
- * See also:
- * - <gdImageGetTransparent>
- */
-BGD_DECLARE(void) gdImageColorTransparent (gdImagePtr im, int color)
-{
- if (color < 0) {
- return;
- }
-
- if (!im->trueColor) {
- if (color >= gdMaxColors) {
- return;
- }
- if (im->transparent != -1) {
- im->alpha[im->transparent] = gdAlphaOpaque;
- }
- im->alpha[color] = gdAlphaTransparent;
- }
- im->transparent = color;
-}
-
-/*
- Function: gdImagePaletteCopy
-*/
-BGD_DECLARE(void) gdImagePaletteCopy (gdImagePtr to, gdImagePtr from)
-{
- int i;
- int x, y, p;
- int xlate[256];
- if (to->trueColor) {
- return;
- }
- if (from->trueColor) {
- return;
- }
-
- for (i = 0; i < 256; i++) {
- xlate[i] = -1;
- };
-
- for (y = 0; y < (to->sy); y++) {
- for (x = 0; x < (to->sx); x++) {
- /* Optimization: no gdImageGetPixel */
- p = to->pixels[y][x];
- if (xlate[p] == -1) {
- /* This ought to use HWB, but we don't have an alpha-aware
- version of that yet. */
- xlate[p] =
- gdImageColorClosestAlpha (from, to->red[p], to->green[p],
- to->blue[p], to->alpha[p]);
- /*printf("Mapping %d (%d, %d, %d, %d) to %d (%d, %d, %d, %d)\n", */
- /* p, to->red[p], to->green[p], to->blue[p], to->alpha[p], */
- /* xlate[p], from->red[xlate[p]], from->green[xlate[p]], from->blue[xlate[p]], from->alpha[xlate[p]]); */
- };
- /* Optimization: no gdImageSetPixel */
- to->pixels[y][x] = xlate[p];
- };
- };
-
- for (i = 0; (i < (from->colorsTotal)); i++) {
- /*printf("Copying color %d (%d, %d, %d, %d)\n", i, from->red[i], from->blue[i], from->green[i], from->alpha[i]); */
- to->red[i] = from->red[i];
- to->blue[i] = from->blue[i];
- to->green[i] = from->green[i];
- to->alpha[i] = from->alpha[i];
- to->open[i] = 0;
- };
-
- for (i = from->colorsTotal; (i < to->colorsTotal); i++) {
- to->open[i] = 1;
- };
-
- to->colorsTotal = from->colorsTotal;
-
-}
-
-/*
- Function: gdImageColorReplace
-*/
-BGD_DECLARE(int) gdImageColorReplace (gdImagePtr im, int src, int dst)
-{
- register int x, y;
- int n = 0;
-
- if (src == dst) {
- return 0;
- }
-
-#define REPLACING_LOOP(pixel) do { \
- for (y = im->cy1; y <= im->cy2; y++) { \
- for (x = im->cx1; x <= im->cx2; x++) { \
- if (pixel(im, x, y) == src) { \
- gdImageSetPixel(im, x, y, dst); \
- n++; \
- } \
- } \
- } \
- } while (0)
-
- if (im->trueColor) {
- REPLACING_LOOP(gdImageTrueColorPixel);
- } else {
- REPLACING_LOOP(gdImagePalettePixel);
- }
-
-#undef REPLACING_LOOP
-
- return n;
-}
-
-/*
- Function: gdImageColorReplaceThreshold
-*/
-BGD_DECLARE(int) gdImageColorReplaceThreshold (gdImagePtr im, int src, int dst, float threshold)
-{
- register int x, y;
- int n = 0;
-
- if (src == dst) {
- return 0;
- }
-
-#define REPLACING_LOOP(pixel) do { \
- for (y = im->cy1; y <= im->cy2; y++) { \
- for (x = im->cx1; x <= im->cx2; x++) { \
- if (gdColorMatch(im, src, pixel(im, x, y), threshold)) { \
- gdImageSetPixel(im, x, y, dst); \
- n++; \
- } \
- } \
- } \
- } while (0)
-
- if (im->trueColor) {
- REPLACING_LOOP(gdImageTrueColorPixel);
- } else {
- REPLACING_LOOP(gdImagePalettePixel);
- }
-
-#undef REPLACING_LOOP
-
- return n;
-}
-
-static int colorCmp (const void *x, const void *y)
-{
- int a = *(int const *)x;
- int b = *(int const *)y;
- return (a > b) - (a < b);
-}
-
-/*
- Function: gdImageColorReplaceArray
-*/
-BGD_DECLARE(int) gdImageColorReplaceArray (gdImagePtr im, int len, int *src, int *dst)
-{
- register int x, y;
- int c, *d, *base;
- int i, n = 0;
-
- if (len <= 0 || src == dst) {
- return 0;
- }
- if (len == 1) {
- return gdImageColorReplace(im, src[0], dst[0]);
- }
- if (overflow2(len, sizeof(int)<<1)) {
- return -1;
- }
- base = (int *)gdMalloc(len * (sizeof(int)<<1));
- if (!base) {
- return -1;
- }
- for (i = 0; i < len; i++) {
- base[(i<<1)] = src[i];
- base[(i<<1)+1] = dst[i];
- }
- qsort(base, len, sizeof(int)<<1, colorCmp);
-
-#define REPLACING_LOOP(pixel) do { \
- for (y = im->cy1; y <= im->cy2; y++) { \
- for (x = im->cx1; x <= im->cx2; x++) { \
- c = pixel(im, x, y); \
- if ( (d = (int *)bsearch(&c, base, len, sizeof(int)<<1, colorCmp)) ) { \
- gdImageSetPixel(im, x, y, d[1]); \
- n++; \
- } \
- } \
- } \
- } while (0)
-
- if (im->trueColor) {
- REPLACING_LOOP(gdImageTrueColorPixel);
- } else {
- REPLACING_LOOP(gdImagePalettePixel);
- }
-
-#undef REPLACING_LOOP
-
- gdFree(base);
- return n;
-}
-
-/*
- Function: gdImageColorReplaceCallback
-*/
-BGD_DECLARE(int) gdImageColorReplaceCallback (gdImagePtr im, gdCallbackImageColor callback)
-{
- int c, d, n = 0;
-
- if (!callback) {
- return 0;
- }
- if (im->trueColor) {
- register int x, y;
-
- for (y = im->cy1; y <= im->cy2; y++) {
- for (x = im->cx1; x <= im->cx2; x++) {
- c = gdImageTrueColorPixel(im, x, y);
- if ( (d = callback(im, c)) != c) {
- gdImageSetPixel(im, x, y, d);
- n++;
- }
- }
- }
- } else { /* palette */
- int *sarr, *darr;
- int k, len = 0;
-
- sarr = (int *)gdCalloc(im->colorsTotal, sizeof(int));
- if (!sarr) {
- return -1;
- }
- for (c = 0; c < im->colorsTotal; c++) {
- if (!im->open[c]) {
- sarr[len++] = c;
- }
- }
- darr = (int *)gdCalloc(len, sizeof(int));
- if (!darr) {
- gdFree(sarr);
- return -1;
- }
- for (k = 0; k < len; k++) {
- darr[k] = callback(im, sarr[k]);
- }
- n = gdImageColorReplaceArray(im, k, sarr, darr);
- gdFree(darr);
- gdFree(sarr);
- }
- return n;
-}
-
-/* 2.0.10: before the drawing routines, some code to clip points that are
- * outside the drawing window. Nick Atty (nick@canalplan.org.uk)
- *
- * This is the Sutherland Hodgman Algorithm, as implemented by
- * Duvanenko, Robbins and Gyurcsik - SH(DRG) for short. See Dr Dobb's
- * Journal, January 1996, pp107-110 and 116-117
- *
- * Given the end points of a line, and a bounding rectangle (which we
- * know to be from (0,0) to (SX,SY)), adjust the endpoints to be on
- * the edges of the rectangle if the line should be drawn at all,
- * otherwise return a failure code */
-
-/* this does "one-dimensional" clipping: note that the second time it
- is called, all the x parameters refer to height and the y to width
- - the comments ignore this (if you can understand it when it's
- looking at the X parameters, it should become clear what happens on
- the second call!) The code is simplified from that in the article,
- as we know that gd images always start at (0,0) */
-
-/* 2.0.26, TBB: we now have to respect a clipping rectangle, it won't
- necessarily start at 0. */
-
-static int
-clip_1d (int *x0, int *y0, int *x1, int *y1, int mindim, int maxdim)
-{
- double m; /* gradient of line */
- if (*x0 < mindim) {
- /* start of line is left of window */
- if (*x1 < mindim) /* as is the end, so the line never cuts the window */
- return 0;
- m = (*y1 - *y0) / (double) (*x1 - *x0); /* calculate the slope of the line */
- /* adjust x0 to be on the left boundary (ie to be zero), and y0 to match */
- *y0 -= (int)(m * (*x0 - mindim));
- *x0 = mindim;
- /* now, perhaps, adjust the far end of the line as well */
- if (*x1 > maxdim) {
- *y1 += m * (maxdim - *x1);
- *x1 = maxdim;
- }
- return 1;
- }
- if (*x0 > maxdim) {
- /* start of line is right of window -
- complement of above */
- if (*x1 > maxdim) /* as is the end, so the line misses the window */
- return 0;
- m = (*y1 - *y0) / (double) (*x1 - *x0); /* calculate the slope of the line */
- *y0 += (int)(m * (maxdim - *x0)); /* adjust so point is on the right
- boundary */
- *x0 = maxdim;
- /* now, perhaps, adjust the end of the line */
- if (*x1 < mindim) {
- *y1 -= (int)(m * (*x1 - mindim));
- *x1 = mindim;
- }
- return 1;
- }
- /* the final case - the start of the line is inside the window */
- if (*x1 > maxdim) {
- /* other end is outside to the right */
- m = (*y1 - *y0) / (double) (*x1 - *x0); /* calculate the slope of the line */
- *y1 += (int)(m * (maxdim - *x1));
- *x1 = maxdim;
- return 1;
- }
- if (*x1 < mindim) {
- /* other end is outside to the left */
- m = (*y1 - *y0) / (double) (*x1 - *x0); /* calculate the slope of the line */
- *y1 -= (int)(m * (*x1 - mindim));
- *x1 = mindim;
- return 1;
- }
- /* only get here if both points are inside the window */
- return 1;
-}
-
-/* end of line clipping code */
-
-/**
- * Group: Pixels
- */
-
-/*
- Function: gdImageSetPixel
-*/
-BGD_DECLARE(void) gdImageSetPixel (gdImagePtr im, int x, int y, int color)
-{
- int p;
- switch (color) {
- case gdStyled:
- if (!im->style) {
- /* Refuse to draw if no style is set. */
- return;
- } else {
- p = im->style[im->stylePos++];
- }
- if (p != (gdTransparent)) {
- gdImageSetPixel (im, x, y, p);
- }
- im->stylePos = im->stylePos % im->styleLength;
- break;
- case gdStyledBrushed:
- if (!im->style) {
- /* Refuse to draw if no style is set. */
- return;
- }
- p = im->style[im->stylePos++];
- if ((p != gdTransparent) && (p != 0)) {
- gdImageSetPixel (im, x, y, gdBrushed);
- }
- im->stylePos = im->stylePos % im->styleLength;
- break;
- case gdBrushed:
- gdImageBrushApply (im, x, y);
- break;
- case gdTiled:
- gdImageTileApply (im, x, y);
- break;
- case gdAntiAliased:
- /* This shouldn't happen (2.0.26) because we just call
- gdImageAALine now, but do something sane. */
- gdImageSetPixel(im, x, y, im->AA_color);
- break;
- default:
- if (gdImageBoundsSafeMacro (im, x, y)) {
- if (im->trueColor) {
- switch (im->alphaBlendingFlag) {
- default:
- case gdEffectReplace:
- im->tpixels[y][x] = color;
- break;
- case gdEffectAlphaBlend:
- case gdEffectNormal:
- im->tpixels[y][x] = gdAlphaBlend(im->tpixels[y][x], color);
- break;
- case gdEffectOverlay :
- im->tpixels[y][x] = gdLayerOverlay(im->tpixels[y][x], color);
- break;
- case gdEffectMultiply :
- im->tpixels[y][x] = gdLayerMultiply(im->tpixels[y][x], color);
- break;
- }
- } else {
- im->pixels[y][x] = color;
- }
- }
- break;
- }
-}
-
-static void
-gdImageBrushApply (gdImagePtr im, int x, int y)
-{
- int lx, ly;
- int hy;
- int hx;
- int x1, y1, x2, y2;
- int srcx, srcy;
- if (!im->brush) {
- return;
- }
- hy = gdImageSY (im->brush) / 2;
- y1 = y - hy;
- y2 = y1 + gdImageSY (im->brush);
- hx = gdImageSX (im->brush) / 2;
- x1 = x - hx;
- x2 = x1 + gdImageSX (im->brush);
- srcy = 0;
- if (im->trueColor) {
- if (im->brush->trueColor) {
- for (ly = y1; (ly < y2); ly++) {
- srcx = 0;
- for (lx = x1; (lx < x2); lx++) {
- int p;
- p = gdImageGetTrueColorPixel (im->brush, srcx, srcy);
- /* 2.0.9, Thomas Winzig: apply simple full transparency */
- if (p != gdImageGetTransparent (im->brush)) {
- gdImageSetPixel (im, lx, ly, p);
- }
- srcx++;
- }
- srcy++;
- }
- } else {
- /* 2.0.12: Brush palette, image truecolor (thanks to Thorben Kundinger
- for pointing out the issue) */
- for (ly = y1; (ly < y2); ly++) {
- srcx = 0;
- for (lx = x1; (lx < x2); lx++) {
- int p, tc;
- p = gdImageGetPixel (im->brush, srcx, srcy);
- tc = gdImageGetTrueColorPixel (im->brush, srcx, srcy);
- /* 2.0.9, Thomas Winzig: apply simple full transparency */
- if (p != gdImageGetTransparent (im->brush)) {
- gdImageSetPixel (im, lx, ly, tc);
- }
- srcx++;
- }
- srcy++;
- }
- }
- } else {
- for (ly = y1; (ly < y2); ly++) {
- srcx = 0;
- for (lx = x1; (lx < x2); lx++) {
- int p;
- p = gdImageGetPixel (im->brush, srcx, srcy);
- /* Allow for non-square brushes! */
- if (p != gdImageGetTransparent (im->brush)) {
- /* Truecolor brush. Very slow
- on a palette destination. */
- if (im->brush->trueColor) {
- gdImageSetPixel (im, lx, ly,
- gdImageColorResolveAlpha (im,
- gdTrueColorGetRed
- (p),
- gdTrueColorGetGreen
- (p),
- gdTrueColorGetBlue
- (p),
- gdTrueColorGetAlpha
- (p)));
- } else {
- gdImageSetPixel (im, lx, ly, im->brushColorMap[p]);
- }
- }
- srcx++;
- }
- srcy++;
- }
- }
-}
-
-static void
-gdImageTileApply (gdImagePtr im, int x, int y)
-{
- gdImagePtr tile = im->tile;
- int srcx, srcy;
- int p;
- if (!tile) {
- return;
- }
- srcx = x % gdImageSX (tile);
- srcy = y % gdImageSY (tile);
- if (im->trueColor) {
- p = gdImageGetPixel (tile, srcx, srcy);
- if (p != gdImageGetTransparent (tile)) {
- if (!tile->trueColor) {
- p = gdTrueColorAlpha(tile->red[p], tile->green[p], tile->blue[p], tile->alpha[p]);
- }
- gdImageSetPixel (im, x, y, p);
- }
- } else {
- p = gdImageGetPixel (tile, srcx, srcy);
- /* Allow for transparency */
- if (p != gdImageGetTransparent (tile)) {
- if (tile->trueColor) {
- /* Truecolor tile. Very slow
- on a palette destination. */
- gdImageSetPixel (im, x, y,
- gdImageColorResolveAlpha (im,
- gdTrueColorGetRed
- (p),
- gdTrueColorGetGreen
- (p),
- gdTrueColorGetBlue
- (p),
- gdTrueColorGetAlpha
- (p)));
- } else {
- gdImageSetPixel (im, x, y, im->tileColorMap[p]);
- }
- }
- }
-}
-
-/**
- * Function: gdImageGetPixel
- *
- * Gets a pixel color as stored in the image.
- *
- * Parameters:
- * im - The image.
- * x - The x-coordinate.
- * y - The y-coordinate.
- *
- * See also:
- * - <gdImageGetTrueColorPixel>
- * - <gdImagePalettePixel>
- * - <gdImageTrueColorPixel>
- */
-BGD_DECLARE(int) gdImageGetPixel (gdImagePtr im, int x, int y)
-{
- if (gdImageBoundsSafeMacro (im, x, y)) {
- if (im->trueColor) {
- return im->tpixels[y][x];
- } else {
- return im->pixels[y][x];
- }
- } else {
- return 0;
- }
-}
-
-/**
- * Function: gdImageGetTrueColorPixel
- *
- * Gets a pixel color always as truecolor value.
- *
- * Parameters:
- * im - The image.
- * x - The x-coordinate.
- * y - The y-coordinate.
- *
- * See also:
- * - <gdImageGetPixel>
- * - <gdImageTrueColorPixel>
- */
-BGD_DECLARE(int) gdImageGetTrueColorPixel (gdImagePtr im, int x, int y)
-{
- int p = gdImageGetPixel (im, x, y);
- if (!im->trueColor) {
- return gdTrueColorAlpha (im->red[p], im->green[p], im->blue[p],
- (im->transparent == p) ? gdAlphaTransparent :
- im->alpha[p]);
- } else {
- return p;
- }
-}
-
-/**
- * Group: Primitives
- */
-
-/*
- Function: gdImageAABlend
-
- NO-OP, kept for library compatibility.
-*/
-BGD_DECLARE(void) gdImageAABlend (gdImagePtr im)
-{
- (void)im;
-}
-
-static void gdImageAALine (gdImagePtr im, int x1, int y1, int x2, int y2, int col);
-
-static void _gdImageFilledHRectangle (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color);
-
-static void gdImageHLine(gdImagePtr im, int y, int x1, int x2, int col)
-{
- if (im->thick > 1) {
- int thickhalf = im->thick >> 1;
- _gdImageFilledHRectangle(im, x1, y - thickhalf, x2, y + im->thick - thickhalf - 1, col);
- } else {
- if (x2 < x1) {
- int t = x2;
- x2 = x1;
- x1 = t;
- }
-
- for (; x1 <= x2; x1++) {
- gdImageSetPixel(im, x1, y, col);
- }
- }
- return;
-}
-
-static void gdImageVLine(gdImagePtr im, int x, int y1, int y2, int col)
-{
- if (im->thick > 1) {
- int thickhalf = im->thick >> 1;
- gdImageFilledRectangle(im, x - thickhalf, y1, x + im->thick - thickhalf - 1, y2, col);
- } else {
- if (y2 < y1) {
- int t = y1;
- y1 = y2;
- y2 = t;
- }
-
- for (; y1 <= y2; y1++) {
- gdImageSetPixel(im, x, y1, col);
- }
- }
- return;
-}
-
-/*
- Function: gdImageLine
-
- Bresenham as presented in Foley & Van Dam.
-*/
-BGD_DECLARE(void) gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
- int wid;
- int w, wstart;
- int thick;
-
- if (color == gdAntiAliased) {
- /*
- gdAntiAliased passed as color: use the much faster, much cheaper
- and equally attractive gdImageAALine implementation. That
- clips too, so don't clip twice.
- */
- gdImageAALine(im, x1, y1, x2, y2, im->AA_color);
- return;
- }
- /* 2.0.10: Nick Atty: clip to edges of drawing rectangle, return if no
- points need to be drawn. 2.0.26, TBB: clip to edges of clipping
- rectangle. We were getting away with this because gdImageSetPixel
- is used for actual drawing, but this is still more efficient and opens
- the way to skip per-pixel bounds checking in the future. */
-
- if (clip_1d (&x1, &y1, &x2, &y2, im->cx1, im->cx2) == 0)
- return;
- if (clip_1d (&y1, &x1, &y2, &x2, im->cy1, im->cy2) == 0)
- return;
- thick = im->thick;
-
- dx = abs (x2 - x1);
- dy = abs (y2 - y1);
-
- if (dx == 0) {
- gdImageVLine(im, x1, y1, y2, color);
- return;
- } else if (dy == 0) {
- gdImageHLine(im, y1, x1, x2, color);
- return;
- }
-
- if (dy <= dx) {
- /* More-or-less horizontal. use wid for vertical stroke */
- /* Doug Claar: watch out for NaN in atan2 (2.0.5) */
-
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double ac = cos (atan2 (dy, dx));
- if (ac != 0) {
- wid = thick / ac;
- } else {
- wid = 1;
- }
- if (wid == 0) {
- wid = 1;
- }
- d = 2 * dy - dx;
- incr1 = 2 * dy;
- incr2 = 2 * (dy - dx);
- if (x1 > x2) {
- x = x2;
- y = y2;
- ydirflag = (-1);
- xend = x1;
- } else {
- x = x1;
- y = y1;
- ydirflag = 1;
- xend = x2;
- }
-
- /* Set up line thickness */
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
-
- if (((y2 - y1) * ydirflag) > 0) {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y++;
- d += incr2;
- }
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
- }
- } else {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y--;
- d += incr2;
- }
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
- }
- }
- } else {
- /* More-or-less vertical. use wid for horizontal stroke */
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double as = sin (atan2 (dy, dx));
- if (as != 0) {
- wid = thick / as;
- } else {
- wid = 1;
- }
- if (wid == 0)
- wid = 1;
-
- d = 2 * dx - dy;
- incr1 = 2 * dx;
- incr2 = 2 * (dx - dy);
- if (y1 > y2) {
- y = y2;
- x = x2;
- yend = y1;
- xdirflag = (-1);
- } else {
- y = y1;
- x = x1;
- yend = y2;
- xdirflag = 1;
- }
-
- /* Set up line thickness */
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
-
- if (((x2 - x1) * xdirflag) > 0) {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x++;
- d += incr2;
- }
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
- }
- } else {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x--;
- d += incr2;
- }
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
- }
- }
- }
-
-}
-static void dashedSet (gdImagePtr im, int x, int y, int color,
- int *onP, int *dashStepP, int wid, int vert);
-
-/*
- Function: gdImageDashedLine
-*/
-BGD_DECLARE(void) gdImageDashedLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag;
- int dashStep = 0;
- int on = 1;
- int wid;
- int vert;
- int thick = im->thick;
-
- dx = abs (x2 - x1);
- dy = abs (y2 - y1);
- if (dy <= dx) {
- /* More-or-less horizontal. use wid for vertical stroke */
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double as = sin (atan2 (dy, dx));
- if (as != 0) {
- wid = thick / as;
- } else {
- wid = 1;
- }
- vert = 1;
-
- d = 2 * dy - dx;
- incr1 = 2 * dy;
- incr2 = 2 * (dy - dx);
- if (x1 > x2) {
- x = x2;
- y = y2;
- ydirflag = (-1);
- xend = x1;
- } else {
- x = x1;
- y = y1;
- ydirflag = 1;
- xend = x2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- if (((y2 - y1) * ydirflag) > 0) {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y++;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- } else {
- while (x < xend) {
- x++;
- if (d < 0) {
- d += incr1;
- } else {
- y--;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- } else {
- /* 2.0.12: Michael Schwartz: divide rather than multiply;
- TBB: but watch out for /0! */
- double as = sin (atan2 (dy, dx));
- if (as != 0) {
- wid = thick / as;
- } else {
- wid = 1;
- }
- vert = 0;
-
- d = 2 * dx - dy;
- incr1 = 2 * dx;
- incr2 = 2 * (dx - dy);
- if (y1 > y2) {
- y = y2;
- x = x2;
- yend = y1;
- xdirflag = (-1);
- } else {
- y = y1;
- x = x1;
- yend = y2;
- xdirflag = 1;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- if (((x2 - x1) * xdirflag) > 0) {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x++;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- } else {
- while (y < yend) {
- y++;
- if (d < 0) {
- d += incr1;
- } else {
- x--;
- d += incr2;
- }
- dashedSet (im, x, y, color, &on, &dashStep, wid, vert);
- }
- }
- }
-}
-
-static void
-dashedSet (gdImagePtr im, int x, int y, int color,
- int *onP, int *dashStepP, int wid, int vert)
-{
- int dashStep = *dashStepP;
- int on = *onP;
- int w, wstart;
-
- dashStep++;
- if (dashStep == gdDashSize) {
- dashStep = 0;
- on = !on;
- }
- if (on) {
- if (vert) {
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, x, w, color);
- } else {
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++)
- gdImageSetPixel (im, w, y, color);
- }
- }
- *dashStepP = dashStep;
- *onP = on;
-}
-
-/*
- Function: gdImageBoundsSafe
-*/
-BGD_DECLARE(int) gdImageBoundsSafe (gdImagePtr im, int x, int y)
-{
- return gdImageBoundsSafeMacro (im, x, y);
-}
-
-/**
- * Function: gdImageChar
- *
- * Draws a single character.
- *
- * Parameters:
- * im - The image to draw onto.
- * f - The raster font.
- * x - The x coordinate of the upper left pixel.
- * y - The y coordinate of the upper left pixel.
- * c - The character.
- * color - The color.
- *
- * Variants:
- * - <gdImageCharUp>
- *
- * See also:
- * - <gdFontPtr>
- */
-BGD_DECLARE(void) gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
-{
- int cx, cy;
- int px, py;
- int fline;
- const int xuppper = (x > INT_MAX - f->w) ? INT_MAX : x + f->w;
- const int yuppper = (y > INT_MAX - f->h) ? INT_MAX : y + f->h;
- cx = 0;
- cy = 0;
-#ifdef CHARSET_EBCDIC
- c = ASC (c);
-#endif /*CHARSET_EBCDIC */
- if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; py < yuppper; py++) {
- for (px = x; px < xuppper; px++) {
- if (f->data[fline + cy * f->w + cx]) {
- gdImageSetPixel (im, px, py, color);
- }
- cx++;
- }
- cx = 0;
- cy++;
- }
-}
-
-/**
- * Function: gdImageCharUp
- */
-BGD_DECLARE(void) gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c, int color)
-{
- int cx, cy;
- int px, py;
- int fline;
- const int xuppper = (x > INT_MAX - f->h) ? INT_MAX : x + f->h;
- const int ylower = (y < INT_MIN + f->w) ? INT_MIN : y - f->w;
- cx = 0;
- cy = 0;
-#ifdef CHARSET_EBCDIC
- c = ASC (c);
-#endif /*CHARSET_EBCDIC */
- if ((c < f->offset) || (c >= (f->offset + f->nchars))) {
- return;
- }
- fline = (c - f->offset) * f->h * f->w;
- for (py = y; py > ylower; py--) {
- for (px = x; px < xuppper; px++) {
- if (f->data[fline + cy * f->w + cx]) {
- gdImageSetPixel (im, px, py, color);
- }
- cy++;
- }
- cy = 0;
- cx++;
- }
-}
-
-/**
- * Function: gdImageString
- *
- * Draws a character string.
- *
- * Parameters:
- * im - The image to draw onto.
- * f - The raster font.
- * x - The x coordinate of the upper left pixel.
- * y - The y coordinate of the upper left pixel.
- * c - The character string.
- * color - The color.
- *
- * Variants:
- * - <gdImageStringUp>
- * - <gdImageString16>
- * - <gdImageStringUp16>
- *
- * See also:
- * - <gdFontPtr>
- * - <gdImageStringTTF>
- */
-BGD_DECLARE(void) gdImageString (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned char *s, int color)
-{
- int i;
- int l;
- l = strlen ((char *) s);
- for (i = 0; (i < l); i++) {
- gdImageChar (im, f, x, y, s[i], color);
- x += f->w;
- }
-}
-
-/**
- * Function: gdImageStringUp
- */
-BGD_DECLARE(void) gdImageStringUp (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned char *s, int color)
-{
- int i;
- int l;
- l = strlen ((char *) s);
- for (i = 0; (i < l); i++) {
- gdImageCharUp (im, f, x, y, s[i], color);
- y -= f->w;
- }
-}
-
-static int strlen16 (unsigned short *s);
-
-/**
- * Function: gdImageString16
- */
-BGD_DECLARE(void) gdImageString16 (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned short *s, int color)
-{
- int i;
- int l;
- l = strlen16 (s);
- for (i = 0; (i < l); i++) {
- gdImageChar (im, f, x, y, s[i], color);
- x += f->w;
- }
-}
-
-/**
- * Function: gdImageStringUp16
- */
-BGD_DECLARE(void) gdImageStringUp16 (gdImagePtr im, gdFontPtr f,
- int x, int y, unsigned short *s, int color)
-{
- int i;
- int l;
- l = strlen16 (s);
- for (i = 0; (i < l); i++) {
- gdImageCharUp (im, f, x, y, s[i], color);
- y -= f->w;
- }
-}
-
-static int
-strlen16 (unsigned short *s)
-{
- int len = 0;
- while (*s) {
- s++;
- len++;
- }
- return len;
-}
-
-#ifndef HAVE_LSQRT
-/* If you don't have a nice square root function for longs, you can use
- ** this hack
- */
-long
-lsqrt (long n)
-{
- long result = (long) sqrt ((double) n);
- return result;
-}
-#endif
-
-/* s and e are integers modulo 360 (degrees), with 0 degrees
- being the rightmost extreme and degrees changing clockwise.
- cx and cy are the center in pixels; w and h are the horizontal
- and vertical diameter in pixels. */
-
-/*
- Function: gdImageArc
-*/
-BGD_DECLARE(void) gdImageArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e,
- int color)
-{
- gdImageFilledArc (im, cx, cy, w, h, s, e, color, gdNoFill);
-}
-
-/*
- Function: gdImageFilledArc
-*/
-BGD_DECLARE(void) gdImageFilledArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e,
- int color, int style)
-{
- gdPoint pts[363];
- int i, pti;
- int lx = 0, ly = 0;
- int fx = 0, fy = 0;
- int startx = -1, starty = -1, endx = -1, endy = -1;
-
- if ((s % 360) == (e % 360)) {
- s = 0;
- e = 360;
- } else {
- if (s > 360) {
- s = s % 360;
- }
-
- if (e > 360) {
- e = e % 360;
- }
-
- while (s < 0) {
- s += 360;
- }
-
- while (e < s) {
- e += 360;
- }
-
- if (s == e) {
- s = 0;
- e = 360;
- }
- }
-
- for (i = s, pti = 1; (i <= e); i++, pti++) {
- int x, y;
- x = endx = ((long) gdCosT[i % 360] * (long) w / (2 * 1024)) + cx;
- y = endy = ((long) gdSinT[i % 360] * (long) h / (2 * 1024)) + cy;
- if (i != s) {
- if (!(style & gdChord)) {
- if (style & gdNoFill) {
- gdImageLine (im, lx, ly, x, y, color);
- } else {
- if (y == ly) {
- pti--; /* don't add this point */
- if (((i > 270 || i < 90) && x > lx) || ((i > 90 && i < 270) && x < lx)) {
- /* replace the old x coord, if increasing on the
- right side or decreasing on the left side */
- pts[pti].x = x;
- }
- } else {
- pts[pti].x = x;
- pts[pti].y = y;
- }
- }
- }
- } else {
- fx = x;
- fy = y;
-
- if (!(style & (gdChord | gdNoFill))) {
- pts[0].x = cx;
- pts[0].y = cy;
- pts[pti].x = startx = x;
- pts[pti].y = starty = y;
- }
- }
- lx = x;
- ly = y;
- }
- if (style & gdChord) {
- if (style & gdNoFill) {
- if (style & gdEdged) {
- gdImageLine (im, cx, cy, lx, ly, color);
- gdImageLine (im, cx, cy, fx, fy, color);
- }
- gdImageLine (im, fx, fy, lx, ly, color);
- } else {
- pts[0].x = fx;
- pts[0].y = fy;
- pts[1].x = lx;
- pts[1].y = ly;
- pts[2].x = cx;
- pts[2].y = cy;
- gdImageFilledPolygon (im, pts, 3, color);
- }
- } else {
- if (style & gdNoFill) {
- if (style & gdEdged) {
- gdImageLine (im, cx, cy, lx, ly, color);
- gdImageLine (im, cx, cy, fx, fy, color);
- }
- } else {
- if (e - s < 360) {
- if (pts[1].x != startx && pts[1].y == starty) {
- /* start point has been removed due to y-coord fix => insert it */
- for (i = pti; i > 1; i--) {
- pts[i].x = pts[i-1].x;
- pts[i].y = pts[i-1].y;
- }
- pts[1].x = startx;
- pts[1].y = starty;
- pti++;
- }
- if (pts[pti-1].x != endx && pts[pti-1].y == endy) {
- /* end point has been removed due to y-coord fix => insert it */
- pts[pti].x = endx;
- pts[pti].y = endy;
- pti++;
- }
- }
- pts[pti].x = cx;
- pts[pti].y = cy;
- gdImageFilledPolygon(im, pts, pti+1, color);
- }
- }
-}
-
-/*
- Function: gdImageEllipse
-*/
-BGD_DECLARE(void) gdImageEllipse(gdImagePtr im, int mx, int my, int w, int h, int c)
-{
- int x=0,mx1=0,mx2=0,my1=0,my2=0;
- int64_t aq,bq,dx,dy,r,rx,ry,a,b;
-
- a=w>>1;
- b=h>>1;
- gdImageSetPixel(im,mx+a, my, c);
- gdImageSetPixel(im,mx-a, my, c);
- mx1 = mx-a;
- my1 = my;
- mx2 = mx+a;
- my2 = my;
-
- aq = a * a;
- bq = b * b;
- dx = aq << 1;
- dy = bq << 1;
- r = a * bq;
- rx = r << 1;
- ry = 0;
- x = a;
- while (x > 0) {
- if (r > 0) {
- my1++;
- my2--;
- ry +=dx;
- r -=ry;
- }
- if (r <= 0) {
- x--;
- mx1++;
- mx2--;
- rx -=dy;
- r +=rx;
- }
- gdImageSetPixel(im,mx1, my1, c);
- gdImageSetPixel(im,mx1, my2, c);
- gdImageSetPixel(im,mx2, my1, c);
- gdImageSetPixel(im,mx2, my2, c);
- }
-}
-
-
-/*
- Function: gdImageFilledEllipse
-*/
-BGD_DECLARE(void) gdImageFilledEllipse (gdImagePtr im, int mx, int my, int w, int h, int c)
-{
- int x=0,mx1=0,mx2=0,my1=0,my2=0;
- int64_t aq,bq,dx,dy,r,rx,ry,a,b;
- int i;
- int old_y2;
-
- a=w>>1;
- b=h>>1;
-
- for (x = mx-a; x <= mx+a; x++) {
- gdImageSetPixel(im, x, my, c);
- }
-
- mx1 = mx-a;
- my1 = my;
- mx2 = mx+a;
- my2 = my;
-
- aq = a * a;
- bq = b * b;
- dx = aq << 1;
- dy = bq << 1;
- r = a * bq;
- rx = r << 1;
- ry = 0;
- x = a;
- old_y2=-2;
- while (x > 0) {
- if (r > 0) {
- my1++;
- my2--;
- ry +=dx;
- r -=ry;
- }
- if (r <= 0) {
- x--;
- mx1++;
- mx2--;
- rx -=dy;
- r +=rx;
- }
-
- if(old_y2!=my2) {
- for(i=mx1; i<=mx2; i++) {
- gdImageSetPixel(im,i,my2,c);
- gdImageSetPixel(im,i,my1,c);
- }
- }
- old_y2 = my2;
- }
-}
-
-/*
- Function: gdImageFillToBorder
-*/
-BGD_DECLARE(void) gdImageFillToBorder (gdImagePtr im, int x, int y, int border, int color)
-{
- int lastBorder;
- /* Seek left */
- int leftLimit, rightLimit;
- int i;
- int restoreAlphaBleding;
-
- if (border < 0 || color < 0) {
- /* Refuse to fill to a non-solid border */
- return;
- }
-
- if (!im->trueColor) {
- if (color > (im->colorsTotal - 1) || border > (im->colorsTotal - 1)) {
- return;
- }
- }
-
- leftLimit = (-1);
-
- restoreAlphaBleding = im->alphaBlendingFlag;
- im->alphaBlendingFlag = 0;
-
- if (x >= im->sx) {
- x = im->sx - 1;
- } else if (x < 0) {
- x = 0;
- }
- if (y >= im->sy) {
- y = im->sy - 1;
- } else if (y < 0) {
- y = 0;
- }
-
- for (i = x; (i >= 0); i--) {
- if (gdImageGetPixel (im, i, y) == border) {
- break;
- }
- gdImageSetPixel (im, i, y, color);
- leftLimit = i;
- }
- if (leftLimit == (-1)) {
- im->alphaBlendingFlag = restoreAlphaBleding;
- return;
- }
- /* Seek right */
- rightLimit = x;
- for (i = (x + 1); (i < im->sx); i++) {
- if (gdImageGetPixel (im, i, y) == border) {
- break;
- }
- gdImageSetPixel (im, i, y, color);
- rightLimit = i;
- }
- /* Look at lines above and below and start paints */
- /* Above */
- if (y > 0) {
- lastBorder = 1;
- for (i = leftLimit; (i <= rightLimit); i++) {
- int c;
- c = gdImageGetPixel (im, i, y - 1);
- if (lastBorder) {
- if ((c != border) && (c != color)) {
- gdImageFillToBorder (im, i, y - 1, border, color);
- lastBorder = 0;
- }
- } else if ((c == border) || (c == color)) {
- lastBorder = 1;
- }
- }
- }
- /* Below */
- if (y < ((im->sy) - 1)) {
- lastBorder = 1;
- for (i = leftLimit; (i <= rightLimit); i++) {
- int c = gdImageGetPixel (im, i, y + 1);
- if (lastBorder) {
- if ((c != border) && (c != color)) {
- gdImageFillToBorder (im, i, y + 1, border, color);
- lastBorder = 0;
- }
- } else if ((c == border) || (c == color)) {
- lastBorder = 1;
- }
- }
- }
- im->alphaBlendingFlag = restoreAlphaBleding;
-}
-
-/*
- * set the pixel at (x,y) and its 4-connected neighbors
- * with the same pixel value to the new pixel value nc (new color).
- * A 4-connected neighbor: pixel above, below, left, or right of a pixel.
- * ideas from comp.graphics discussions.
- * For tiled fill, the use of a flag buffer is mandatory. As the tile image can
- * contain the same color as the color to fill. To do not bloat normal filling
- * code I added a 2nd private function.
- */
-
-static int gdImageTileGet (gdImagePtr im, int x, int y)
-{
- int srcx, srcy;
- int tileColor,p;
- if (!im->tile) {
- return -1;
- }
- srcx = x % gdImageSX(im->tile);
- srcy = y % gdImageSY(im->tile);
- p = gdImageGetPixel(im->tile, srcx, srcy);
- if (p == im->tile->transparent) {
- tileColor = im->transparent;
- } else if (im->trueColor) {
- if (im->tile->trueColor) {
- tileColor = p;
- } else {
- tileColor = gdTrueColorAlpha( gdImageRed(im->tile,p), gdImageGreen(im->tile,p), gdImageBlue (im->tile,p), gdImageAlpha (im->tile,p));
- }
- } else {
- if (im->tile->trueColor) {
- tileColor = gdImageColorResolveAlpha(im, gdTrueColorGetRed (p), gdTrueColorGetGreen (p), gdTrueColorGetBlue (p), gdTrueColorGetAlpha (p));
- } else {
- tileColor = gdImageColorResolveAlpha(im, gdImageRed (im->tile,p), gdImageGreen (im->tile,p), gdImageBlue (im->tile,p), gdImageAlpha (im->tile,p));
- }
- }
- return tileColor;
-}
-
-
-
-/* horizontal segment of scan line y */
-struct seg {
- int y, xl, xr, dy;
-};
-
-/* max depth of stack */
-#define FILL_MAX ((int)(im->sy*im->sx)/4)
-#define FILL_PUSH(Y, XL, XR, DY) \
- if (sp<stack+FILL_MAX && Y+(DY)>=0 && Y+(DY)<wy2) \
- {sp->y = Y; sp->xl = XL; sp->xr = XR; sp->dy = DY; sp++;}
-
-#define FILL_POP(Y, XL, XR, DY) \
- {sp--; Y = sp->y+(DY = sp->dy); XL = sp->xl; XR = sp->xr;}
-
-static void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc);
-
-/*
- Function: gdImageFill
-*/
-BGD_DECLARE(void) gdImageFill(gdImagePtr im, int x, int y, int nc)
-{
- int l, x1, x2, dy;
- int oc; /* old pixel value */
- int wx2,wy2;
-
- int alphablending_bak;
-
- /* stack of filled segments */
- /* struct seg stack[FILL_MAX],*sp = stack; */
- struct seg *stack;
- struct seg *sp;
-
- if (!im->trueColor && nc > (im->colorsTotal - 1)) {
- return;
- }
-
- alphablending_bak = im->alphaBlendingFlag;
- im->alphaBlendingFlag = 0;
-
- if (nc==gdTiled) {
- _gdImageFillTiled(im,x,y,nc);
- im->alphaBlendingFlag = alphablending_bak;
- return;
- }
-
- wx2=im->sx;
- wy2=im->sy;
- oc = gdImageGetPixel(im, x, y);
- if (oc==nc || x<0 || x>wx2 || y<0 || y>wy2) {
- im->alphaBlendingFlag = alphablending_bak;
- return;
- }
-
- /* Do not use the 4 neighbors implementation with
- * small images
- */
- if (im->sx < 4) {
- int ix = x, iy = y, c;
- do {
- do {
- c = gdImageGetPixel(im, ix, iy);
- if (c != oc) {
- goto done;
- }
- gdImageSetPixel(im, ix, iy, nc);
- } while(ix++ < (im->sx -1));
- ix = x;
- } while(iy++ < (im->sy -1));
- goto done;
- }
-
- if(overflow2(im->sy, im->sx)) {
- return;
- }
-
- if(overflow2(sizeof(struct seg), ((im->sy * im->sx) / 4))) {
- return;
- }
-
- stack = (struct seg *)gdMalloc(sizeof(struct seg) * ((int)(im->sy*im->sx)/4));
- if (!stack) {
- return;
- }
- sp = stack;
-
- /* required! */
- FILL_PUSH(y,x,x,1);
- /* seed segment (popped 1st) */
- FILL_PUSH(y+1, x, x, -1);
- while (sp>stack) {
- FILL_POP(y, x1, x2, dy);
-
- for (x=x1; x>=0 && gdImageGetPixel(im,x, y)==oc; x--) {
- gdImageSetPixel(im,x, y, nc);
- }
- if (x>=x1) {
- goto skip;
- }
- l = x+1;
-
- /* leak on left? */
- if (l<x1) {
- FILL_PUSH(y, l, x1-1, -dy);
- }
- x = x1+1;
- do {
- for (; x<=wx2 && gdImageGetPixel(im,x, y)==oc; x++) {
- gdImageSetPixel(im, x, y, nc);
- }
- FILL_PUSH(y, l, x-1, dy);
- /* leak on right? */
- if (x>x2+1) {
- FILL_PUSH(y, x2+1, x-1, -dy);
- }
-skip:
- for (x++; x<=x2 && (gdImageGetPixel(im, x, y)!=oc); x++);
-
- l = x;
- } while (x<=x2);
- }
-
- gdFree(stack);
-
-done:
- im->alphaBlendingFlag = alphablending_bak;
-}
-
-static void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc)
-{
- int l, x1, x2, dy;
- int oc; /* old pixel value */
- int wx2,wy2;
- /* stack of filled segments */
- struct seg *stack;
- struct seg *sp;
- char *pts;
-
- if (!im->tile) {
- return;
- }
-
- wx2=im->sx;
- wy2=im->sy;
-
- if(overflow2(im->sy, im->sx)) {
- return;
- }
-
- if(overflow2(sizeof(struct seg), ((im->sy * im->sx) / 4))) {
- return;
- }
-
- pts = (char *) gdCalloc(im->sy * im->sx, sizeof(char));
- if (!pts) {
- return;
- }
-
- stack = (struct seg *)gdMalloc(sizeof(struct seg) * ((int)(im->sy*im->sx)/4));
- if (!stack) {
- gdFree(pts);
- return;
- }
- sp = stack;
-
- oc = gdImageGetPixel(im, x, y);
-
- /* required! */
- FILL_PUSH(y,x,x,1);
- /* seed segment (popped 1st) */
- FILL_PUSH(y+1, x, x, -1);
- while (sp>stack) {
- FILL_POP(y, x1, x2, dy);
- for (x=x1; x>=0 && (!pts[y + x*wy2] && gdImageGetPixel(im,x,y)==oc); x--) {
- nc = gdImageTileGet(im,x,y);
- pts[y + x*wy2]=1;
- gdImageSetPixel(im,x, y, nc);
- }
- if (x>=x1) {
- goto skip;
- }
- l = x+1;
-
- /* leak on left? */
- if (l<x1) {
- FILL_PUSH(y, l, x1-1, -dy);
- }
- x = x1+1;
- do {
- for (; x<wx2 && (!pts[y + x*wy2] && gdImageGetPixel(im,x, y)==oc) ; x++) {
- if (pts[y + x*wy2]) {
- /* we should never be here */
- break;
- }
- nc = gdImageTileGet(im,x,y);
- pts[y + x*wy2]=1;
- gdImageSetPixel(im, x, y, nc);
- }
- FILL_PUSH(y, l, x-1, dy);
- /* leak on right? */
- if (x>x2+1) {
- FILL_PUSH(y, x2+1, x-1, -dy);
- }
-skip:
- for (x++; x<=x2 && (pts[y + x*wy2] || gdImageGetPixel(im,x, y)!=oc); x++);
- l = x;
- } while (x<=x2);
- }
-
- gdFree(pts);
- gdFree(stack);
-}
-
-/**
- * Function: gdImageRectangle
- *
- * Draws a rectangle.
- *
- * Parameters:
- * im - The image.
- * x1 - The x-coordinate of one of the corners.
- * y1 - The y-coordinate of one of the corners.
- * x2 - The x-coordinate of another corner.
- * y2 - The y-coordinate of another corner.
- * color - The color.
- *
- * See also:
- * - <gdImageFilledRectangle>
- */
-BGD_DECLARE(void) gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int color)
-{
- int thick = im->thick;
-
- if (x1 == x2 && y1 == y2 && thick == 1) {
- gdImageSetPixel(im, x1, y1, color);
- return;
- }
-
- if (y2 < y1) {
- int t = y1;
- y1 = y2;
- y2 = t;
- }
-
- if (x2 < x1) {
- int t = x1;
- x1 = x2;
- x2 = t;
- }
-
- if (thick > 1) {
- int cx, cy, x1ul, y1ul, x2lr, y2lr;
- int half = thick >> 1;
- x1ul = x1 - half;
- y1ul = y1 - half;
-
- x2lr = x2 + half;
- y2lr = y2 + half;
-
- cy = y1ul + thick;
- while (cy-- > y1ul) {
- cx = x1ul - 1;
- while (cx++ < x2lr) {
- gdImageSetPixel(im, cx, cy, color);
- }
- }
-
- cy = y2lr - thick;
- while (cy++ < y2lr) {
- cx = x1ul - 1;
- while (cx++ < x2lr) {
- gdImageSetPixel(im, cx, cy, color);
- }
- }
-
- cy = y1ul + thick - 1;
- while (cy++ < y2lr -thick) {
- cx = x1ul - 1;
- while (cx++ < x1ul + thick) {
- gdImageSetPixel(im, cx, cy, color);
- }
- }
-
- cy = y1ul + thick - 1;
- while (cy++ < y2lr -thick) {
- cx = x2lr - thick - 1;
- while (cx++ < x2lr) {
- gdImageSetPixel(im, cx, cy, color);
- }
- }
-
- return;
- } else {
- if (x1 == x2 || y1 == y2) {
- gdImageLine(im, x1, y1, x2, y2, color);
- } else {
- gdImageLine(im, x1, y1, x2, y1, color);
- gdImageLine(im, x1, y2, x2, y2, color);
- gdImageLine(im, x1, y1 + 1, x1, y2 - 1, color);
- gdImageLine(im, x2, y1 + 1, x2, y2 - 1, color);
- }
- }
-}
-
-static void _gdImageFilledHRectangle (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color)
-{
- int x, y;
-
- if (x1 == x2 && y1 == y2) {
- gdImageSetPixel(im, x1, y1, color);
- return;
- }
-
- if (x1 > x2) {
- x = x1;
- x1 = x2;
- x2 = x;
- }
-
- if (y1 > y2) {
- y = y1;
- y1 = y2;
- y2 = y;
- }
-
- if (x1 < 0) {
- x1 = 0;
- }
-
- if (x2 >= gdImageSX(im)) {
- x2 = gdImageSX(im) - 1;
- }
-
- if (y1 < 0) {
- y1 = 0;
- }
-
- if (y2 >= gdImageSY(im)) {
- y2 = gdImageSY(im) - 1;
- }
-
- for (x = x1; (x <= x2); x++) {
- for (y = y1; (y <= y2); y++) {
- gdImageSetPixel (im, x, y, color);
- }
- }
-}
-
-static void _gdImageFilledVRectangle (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color)
-{
- int x, y;
-
- if (x1 == x2 && y1 == y2) {
- gdImageSetPixel(im, x1, y1, color);
- return;
- }
-
- if (x1 > x2) {
- x = x1;
- x1 = x2;
- x2 = x;
- }
-
- if (y1 > y2) {
- y = y1;
- y1 = y2;
- y2 = y;
- }
-
- if (x1 < 0) {
- x1 = 0;
- }
-
- if (x2 >= gdImageSX(im)) {
- x2 = gdImageSX(im) - 1;
- }
-
- if (y1 < 0) {
- y1 = 0;
- }
-
- if (y2 >= gdImageSY(im)) {
- y2 = gdImageSY(im) - 1;
- }
-
- for (y = y1; (y <= y2); y++) {
- for (x = x1; (x <= x2); x++) {
- gdImageSetPixel (im, x, y, color);
- }
- }
-}
-
-/*
- Function: gdImageFilledRectangle
-*/
-BGD_DECLARE(void) gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color)
-{
- _gdImageFilledVRectangle(im, x1, y1, x2, y2, color);
-}
-
-/**
- * Group: Cloning and Copying
- */
-
-/**
- * Function: gdImageClone
- *
- * Clones an image
- *
- * Creates an exact duplicate of the given image.
- *
- * Parameters:
- * src - The source image.
- *
- * Returns:
- * The cloned image on success, NULL on failure.
- */
-BGD_DECLARE(gdImagePtr) gdImageClone (gdImagePtr src) {
- gdImagePtr dst;
- register int i, x;
-
- if (src->trueColor) {
- dst = gdImageCreateTrueColor(src->sx , src->sy);
- } else {
- dst = gdImageCreate(src->sx , src->sy);
- }
-
- if (dst == NULL) {
- return NULL;
- }
-
- if (src->trueColor == 0) {
- dst->colorsTotal = src->colorsTotal;
- for (i = 0; i < gdMaxColors; i++) {
- dst->red[i] = src->red[i];
- dst->green[i] = src->green[i];
- dst->blue[i] = src->blue[i];
- dst->alpha[i] = src->alpha[i];
- dst->open[i] = src->open[i];
- }
- for (i = 0; i < src->sy; i++) {
- for (x = 0; x < src->sx; x++) {
- dst->pixels[i][x] = src->pixels[i][x];
- }
- }
- } else {
- for (i = 0; i < src->sy; i++) {
- for (x = 0; x < src->sx; x++) {
- dst->tpixels[i][x] = src->tpixels[i][x];
- }
- }
- }
-
- dst->interlace = src->interlace;
-
- dst->alphaBlendingFlag = src->alphaBlendingFlag;
- dst->saveAlphaFlag = src->saveAlphaFlag;
- dst->AA = src->AA;
- dst->AA_color = src->AA_color;
- dst->AA_dont_blend = src->AA_dont_blend;
-
- dst->cx1 = src->cx1;
- dst->cy1 = src->cy1;
- dst->cx2 = src->cx2;
- dst->cy2 = src->cy2;
-
- dst->res_x = src->res_x;
- dst->res_y = src->res_y;
-
- dst->paletteQuantizationMethod = src->paletteQuantizationMethod;
- dst->paletteQuantizationSpeed = src->paletteQuantizationSpeed;
- dst->paletteQuantizationMinQuality = src->paletteQuantizationMinQuality;
- dst->paletteQuantizationMinQuality = src->paletteQuantizationMinQuality;
-
- dst->interpolation_id = src->interpolation_id;
- dst->interpolation = src->interpolation;
-
- if (src->brush) {
- dst->brush = gdImageClone(src->brush);
- }
-
- if (src->tile) {
- dst->tile = gdImageClone(src->tile);
- }
-
- if (src->style) {
- gdImageSetStyle(dst, src->style, src->styleLength);
- dst->stylePos = src->stylePos;
- }
-
- for (i = 0; i < gdMaxColors; i++) {
- dst->brushColorMap[i] = src->brushColorMap[i];
- dst->tileColorMap[i] = src->tileColorMap[i];
- }
-
- if (src->polyAllocated > 0) {
- dst->polyAllocated = src->polyAllocated;
- for (i = 0; i < src->polyAllocated; i++) {
- dst->polyInts[i] = src->polyInts[i];
- }
- }
-
- return dst;
-}
-
-/**
- * Function: gdImageCopy
- *
- * Copy an area of an image to another image
- *
- * Parameters:
- * dst - The destination image.
- * src - The source image.
- * dstX - The x-coordinate of the upper left corner to copy to.
- * dstY - The y-coordinate of the upper left corner to copy to.
- * srcX - The x-coordinate of the upper left corner to copy from.
- * srcY - The y-coordinate of the upper left corner to copy from.
- * w - The width of the area to copy.
- * h - The height of the area to copy.
- *
- * See also:
- * - <gdImageCopyMerge>
- * - <gdImageCopyMergeGray>
- */
-BGD_DECLARE(void) gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX,
- int srcY, int w, int h)
-{
- int c;
- int x, y;
- int tox, toy;
- int i;
- int colorMap[gdMaxColors];
-
- if (dst->trueColor) {
- /* 2.0: much easier when the destination is truecolor. */
- /* 2.0.10: needs a transparent-index check that is still valid if
- * * the source is not truecolor. Thanks to Frank Warmerdam.
- */
-
- if (src->trueColor) {
- for (y = 0; (y < h); y++) {
- for (x = 0; (x < w); x++) {
- int c = gdImageGetTrueColorPixel (src, srcX + x, srcY + y);
- if (c != src->transparent) {
- gdImageSetPixel (dst, dstX + x, dstY + y, c);
- }
- }
- }
- } else {
- /* source is palette based */
- for (y = 0; (y < h); y++) {
- for (x = 0; (x < w); x++) {
- int c = gdImageGetPixel (src, srcX + x, srcY + y);
- if (c != src->transparent) {
- gdImageSetPixel(dst, dstX + x, dstY + y, gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]));
- }
- }
- }
- }
- return;
- }
-
- for (i = 0; (i < gdMaxColors); i++) {
- colorMap[i] = (-1);
- }
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++) {
- int nc;
- int mapTo;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c) {
- tox++;
- continue;
- }
- /* Have we established a mapping for this color? */
- if (src->trueColor) {
- /* 2.05: remap to the palette available in the
- destination image. This is slow and
- works badly, but it beats crashing! Thanks
- to Padhrig McCarthy. */
- mapTo = gdImageColorResolveAlpha (dst,
- gdTrueColorGetRed (c),
- gdTrueColorGetGreen (c),
- gdTrueColorGetBlue (c),
- gdTrueColorGetAlpha (c));
- } else if (colorMap[c] == (-1)) {
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
- nc = c;
- } else {
- /* Get best match possible. This
- function never returns error. */
- nc = gdImageColorResolveAlpha (dst,
- src->red[c], src->green[c],
- src->blue[c], src->alpha[c]);
- }
- colorMap[c] = nc;
- mapTo = colorMap[c];
- } else {
- mapTo = colorMap[c];
- }
- gdImageSetPixel (dst, tox, toy, mapTo);
- tox++;
- }
- toy++;
- }
-}
-
-/**
- * Function: gdImageCopyMerge
- *
- * Copy an area of an image to another image ignoring alpha
- *
- * The source area will be copied to the destination are by merging the pixels.
- *
- * Note:
- * This function is a substitute for real alpha channel operations,
- * so it doesn't pay attention to the alpha channel.
- *
- * Parameters:
- * dst - The destination image.
- * src - The source image.
- * dstX - The x-coordinate of the upper left corner to copy to.
- * dstY - The y-coordinate of the upper left corner to copy to.
- * srcX - The x-coordinate of the upper left corner to copy from.
- * srcY - The y-coordinate of the upper left corner to copy from.
- * w - The width of the area to copy.
- * h - The height of the area to copy.
- * pct - The percentage in range 0..100.
- *
- * See also:
- * - <gdImageCopy>
- * - <gdImageCopyMergeGray>
- */
-BGD_DECLARE(void) gdImageCopyMerge (gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct)
-{
-
- int c, dc;
- int x, y;
- int tox, toy;
- int ncR, ncG, ncB;
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++) {
- int nc;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c) {
- tox++;
- continue;
- }
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
- nc = c;
- } else {
- dc = gdImageGetPixel (dst, tox, toy);
-
- ncR = gdImageRed (src, c) * (pct / 100.0)
- + gdImageRed (dst, dc) * ((100 - pct) / 100.0);
- ncG = gdImageGreen (src, c) * (pct / 100.0)
- + gdImageGreen (dst, dc) * ((100 - pct) / 100.0);
- ncB = gdImageBlue (src, c) * (pct / 100.0)
- + gdImageBlue (dst, dc) * ((100 - pct) / 100.0);
-
- /* Find a reasonable color */
- nc = gdImageColorResolve (dst, ncR, ncG, ncB);
- }
- gdImageSetPixel (dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
-}
-
-/**
- * Function: gdImageCopyMergeGray
- *
- * Copy an area of an image to another image ignoring alpha
- *
- * The source area will be copied to the grayscaled destination area by merging
- * the pixels.
- *
- * Note:
- * This function is a substitute for real alpha channel operations,
- * so it doesn't pay attention to the alpha channel.
- *
- * Parameters:
- * dst - The destination image.
- * src - The source image.
- * dstX - The x-coordinate of the upper left corner to copy to.
- * dstY - The y-coordinate of the upper left corner to copy to.
- * srcX - The x-coordinate of the upper left corner to copy from.
- * srcY - The y-coordinate of the upper left corner to copy from.
- * w - The width of the area to copy.
- * h - The height of the area to copy.
- * pct - The percentage of the source color intensity in range 0..100.
- *
- * See also:
- * - <gdImageCopy>
- * - <gdImageCopyMerge>
- */
-BGD_DECLARE(void) gdImageCopyMergeGray (gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct)
-{
-
- int c, dc;
- int x, y;
- int tox, toy;
- int ncR, ncG, ncB;
- float g;
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; (x < (srcX + w)); x++) {
- int nc;
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c) {
- tox++;
- continue;
- }
- /*
- * If it's the same image, mapping is NOT trivial since we
- * merge with greyscale target, but if pct is 100, the grey
- * value is not used, so it becomes trivial. pjw 2.0.12.
- */
- if (dst == src && pct == 100) {
- nc = c;
- } else {
- dc = gdImageGetPixel (dst, tox, toy);
- g = 0.29900 * gdImageRed(dst, dc)
- + 0.58700 * gdImageGreen(dst, dc) + 0.11400 * gdImageBlue(dst, dc);
-
- ncR = gdImageRed (src, c) * (pct / 100.0)
- + g * ((100 - pct) / 100.0);
- ncG = gdImageGreen (src, c) * (pct / 100.0)
- + g * ((100 - pct) / 100.0);
- ncB = gdImageBlue (src, c) * (pct / 100.0)
- + g * ((100 - pct) / 100.0);
-
- /* First look for an exact match */
- nc = gdImageColorExact (dst, ncR, ncG, ncB);
- if (nc == (-1)) {
- /* No, so try to allocate it */
- nc = gdImageColorAllocate (dst, ncR, ncG, ncB);
- /* If we're out of colors, go for the
- closest color */
- if (nc == (-1)) {
- nc = gdImageColorClosest (dst, ncR, ncG, ncB);
- }
- }
- }
- gdImageSetPixel (dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
-}
-
-/**
- * Function: gdImageCopyResized
- *
- * Copy a resized area from an image to another image
- *
- * If the source and destination area differ in size, the area will be resized
- * using nearest-neighbor interpolation.
- *
- * Parameters:
- * dst - The destination image.
- * src - The source image.
- * dstX - The x-coordinate of the upper left corner to copy to.
- * dstY - The y-coordinate of the upper left corner to copy to.
- * srcX - The x-coordinate of the upper left corner to copy from.
- * srcY - The y-coordinate of the upper left corner to copy from.
- * dstW - The width of the area to copy to.
- * dstH - The height of the area to copy to.
- * srcW - The width of the area to copy from.
- * srcH - The height of the area to copy from.
- *
- * See also:
- * - <gdImageCopyResampled>
- * - <gdImageScale>
- */
-BGD_DECLARE(void) gdImageCopyResized (gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int dstW, int dstH, int srcW,
- int srcH)
-{
- int c;
- int x, y;
- int tox, toy;
- int ydest;
- int i;
- int colorMap[gdMaxColors];
- /* Stretch vectors */
- int *stx;
- int *sty;
- /* We only need to use floating point to determine the correct
- stretch vector for one line's worth. */
- if (overflow2(sizeof (int), srcW)) {
- return;
- }
- if (overflow2(sizeof (int), srcH)) {
- return;
- }
- stx = (int *) gdMalloc (sizeof (int) * srcW);
- if (!stx) {
- return;
- }
-
- sty = (int *) gdMalloc (sizeof (int) * srcH);
- if (!sty) {
- gdFree(stx);
- return;
- }
-
- /* Fixed by Mao Morimoto 2.0.16 */
- for (i = 0; (i < srcW); i++) {
- stx[i] = dstW * (i + 1) / srcW - dstW * i / srcW;
- }
- for (i = 0; (i < srcH); i++) {
- sty[i] = dstH * (i + 1) / srcH - dstH * i / srcH;
- }
- for (i = 0; (i < gdMaxColors); i++) {
- colorMap[i] = (-1);
- }
- toy = dstY;
- for (y = srcY; (y < (srcY + srcH)); y++) {
- for (ydest = 0; (ydest < sty[y - srcY]); ydest++) {
- tox = dstX;
- for (x = srcX; (x < (srcX + srcW)); x++) {
- int nc = 0;
- int mapTo;
- if (!stx[x - srcX]) {
- continue;
- }
- if (dst->trueColor) {
- /* 2.0.9: Thorben Kundinger: Maybe the source image is not
- a truecolor image */
- if (!src->trueColor) {
- int tmp = gdImageGetPixel (src, x, y);
- mapTo = gdImageGetTrueColorPixel (src, x, y);
- if (gdImageGetTransparent (src) == tmp) {
- /* 2.0.21, TK: not tox++ */
- tox += stx[x - srcX];
- continue;
- }
- } else {
- /* TK: old code follows */
- mapTo = gdImageGetTrueColorPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == mapTo) {
- /* 2.0.21, TK: not tox++ */
- tox += stx[x - srcX];
- continue;
- }
- }
- } else {
- c = gdImageGetPixel (src, x, y);
- /* Added 7/24/95: support transparent copies */
- if (gdImageGetTransparent (src) == c) {
- tox += stx[x - srcX];
- continue;
- }
- if (src->trueColor) {
- /* Remap to the palette available in the
- destination image. This is slow and
- works badly. */
- mapTo = gdImageColorResolveAlpha (dst,
- gdTrueColorGetRed (c),
- gdTrueColorGetGreen
- (c),
- gdTrueColorGetBlue
- (c),
- gdTrueColorGetAlpha
- (c));
- } else {
- /* Have we established a mapping for this color? */
- if (colorMap[c] == (-1)) {
- /* If it's the same image, mapping is trivial */
- if (dst == src) {
- nc = c;
- } else {
- /* Find or create the best match */
- /* 2.0.5: can't use gdTrueColorGetRed, etc with palette */
- nc = gdImageColorResolveAlpha (dst,
- gdImageRed (src,
- c),
- gdImageGreen
- (src, c),
- gdImageBlue (src,
- c),
- gdImageAlpha
- (src, c));
- }
- colorMap[c] = nc;
- }
- mapTo = colorMap[c];
- }
- }
- for (i = 0; (i < stx[x - srcX]); i++) {
- gdImageSetPixel (dst, tox, toy, mapTo);
- tox++;
- }
- }
- toy++;
- }
- }
- gdFree (stx);
- gdFree (sty);
-}
-
-/**
- * Function: gdImageCopyRotated
- *
- * Copy a rotated area from an image to another image
- *
- * The area is counter-clockwise rotated using nearest-neighbor interpolation.
- *
- * Parameters:
- * dst - The destination image.
- * src - The source image.
- * dstX - The x-coordinate of the center of the area to copy to.
- * dstY - The y-coordinate of the center of the area to copy to.
- * srcX - The x-coordinate of the upper left corner to copy from.
- * srcY - The y-coordinate of the upper left corner to copy from.
- * srcW - The width of the area to copy from.
- * srcH - The height of the area to copy from.
- * angle - The angle in degrees.
- *
- * See also:
- * - <gdImageRotateInterpolated>
- */
-BGD_DECLARE(void) gdImageCopyRotated (gdImagePtr dst,
- gdImagePtr src,
- double dstX, double dstY,
- int srcX, int srcY,
- int srcWidth, int srcHeight, int angle)
-{
- double dx, dy;
- double radius = sqrt (srcWidth * srcWidth + srcHeight * srcHeight);
- double aCos = cos (angle * .0174532925);
- double aSin = sin (angle * .0174532925);
- double scX = srcX + ((double) srcWidth) / 2;
- double scY = srcY + ((double) srcHeight) / 2;
- int cmap[gdMaxColors];
- int i;
-
- /*
- 2.0.34: transparency preservation. The transparentness of
- the transparent color is more important than its hue.
- */
- if (src->transparent != -1) {
- if (dst->transparent == -1) {
- dst->transparent = src->transparent;
- }
- }
-
- for (i = 0; (i < gdMaxColors); i++) {
- cmap[i] = (-1);
- }
- for (dy = dstY - radius; (dy <= dstY + radius); dy++) {
- for (dx = dstX - radius; (dx <= dstX + radius); dx++) {
- double sxd = (dx - dstX) * aCos - (dy - dstY) * aSin;
- double syd = (dy - dstY) * aCos + (dx - dstX) * aSin;
- int sx = sxd + scX;
- int sy = syd + scY;
- if ((sx >= srcX) && (sx < srcX + srcWidth) &&
- (sy >= srcY) && (sy < srcY + srcHeight)) {
- int c = gdImageGetPixel (src, sx, sy);
- /* 2.0.34: transparency wins */
- if (c == src->transparent) {
- gdImageSetPixel (dst, dx, dy, dst->transparent);
- } else if (!src->trueColor) {
- /* Use a table to avoid an expensive
- lookup on every single pixel */
- if (cmap[c] == -1) {
- cmap[c] = gdImageColorResolveAlpha (dst,
- gdImageRed (src, c),
- gdImageGreen (src,
- c),
- gdImageBlue (src,
- c),
- gdImageAlpha (src,
- c));
- }
- gdImageSetPixel (dst, dx, dy, cmap[c]);
- } else {
- gdImageSetPixel (dst,
- dx, dy,
- gdImageColorResolveAlpha (dst,
- gdImageRed (src,
- c),
- gdImageGreen
- (src, c),
- gdImageBlue (src,
- c),
- gdImageAlpha
- (src, c)));
- }
- }
- }
- }
-}
-
-/* When gd 1.x was first created, floating point was to be avoided.
- These days it is often faster than table lookups or integer
- arithmetic. The routine below is shamelessly, gloriously
- floating point. TBB */
-
-/* 2.0.10: cast instead of floor() yields 35% performance improvement.
- Thanks to John Buckman. */
-
-#define floor2(exp) ((long) exp)
-/*#define floor2(exp) floor(exp)*/
-
-/**
- * Function: gdImageCopyResampled
- *
- * Copy a resampled area from an image to another image
- *
- * If the source and destination area differ in size, the area will be resized
- * using bilinear interpolation for truecolor images, and nearest-neighbor
- * interpolation for palette images.
- *
- * Parameters:
- * dst - The destination image.
- * src - The source image.
- * dstX - The x-coordinate of the upper left corner to copy to.
- * dstY - The y-coordinate of the upper left corner to copy to.
- * srcX - The x-coordinate of the upper left corner to copy from.
- * srcY - The y-coordinate of the upper left corner to copy from.
- * dstW - The width of the area to copy to.
- * dstH - The height of the area to copy to.
- * srcW - The width of the area to copy from.
- * srcH - The height of the area to copy from.
- *
- * See also:
- * - <gdImageCopyResized>
- * - <gdImageScale>
- */
-BGD_DECLARE(void) gdImageCopyResampled (gdImagePtr dst,
- gdImagePtr src,
- int dstX, int dstY,
- int srcX, int srcY,
- int dstW, int dstH, int srcW, int srcH)
-{
- int x, y;
- if (!dst->trueColor) {
- gdImageCopyResized (dst, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- return;
- }
- for (y = dstY; (y < dstY + dstH); y++) {
- for (x = dstX; (x < dstX + dstW); x++) {
- float sy1, sy2, sx1, sx2;
- float sx, sy;
- float spixels = 0.0;
- float red = 0.0, green = 0.0, blue = 0.0, alpha = 0.0;
- float alpha_factor, alpha_sum = 0.0, contrib_sum = 0.0;
- sy1 = ((float)(y - dstY)) * (float)srcH / (float)dstH;
- sy2 = ((float)(y + 1 - dstY)) * (float) srcH / (float) dstH;
- sy = sy1;
- do {
- float yportion;
- if (floorf(sy) == floorf(sy1)) {
- yportion = 1.0 - (sy - floorf(sy));
- if (yportion > sy2 - sy1) {
- yportion = sy2 - sy1;
- }
- sy = floorf(sy);
- } else if (sy == floorf(sy2)) {
- yportion = sy2 - floorf(sy2);
- } else {
- yportion = 1.0;
- }
- sx1 = ((float)(x - dstX)) * (float) srcW / dstW;
- sx2 = ((float)(x + 1 - dstX)) * (float) srcW / dstW;
- sx = sx1;
- do {
- float xportion;
- float pcontribution;
- int p;
- if (floorf(sx) == floorf(sx1)) {
- xportion = 1.0 - (sx - floorf(sx));
- if (xportion > sx2 - sx1) {
- xportion = sx2 - sx1;
- }
- sx = floorf(sx);
- } else if (sx == floorf(sx2)) {
- xportion = sx2 - floorf(sx2);
- } else {
- xportion = 1.0;
- }
- pcontribution = xportion * yportion;
- p = gdImageGetTrueColorPixel(src, (int) sx + srcX, (int) sy + srcY);
-
- alpha_factor = ((gdAlphaMax - gdTrueColorGetAlpha(p))) * pcontribution;
- red += gdTrueColorGetRed (p) * alpha_factor;
- green += gdTrueColorGetGreen (p) * alpha_factor;
- blue += gdTrueColorGetBlue (p) * alpha_factor;
- alpha += gdTrueColorGetAlpha (p) * pcontribution;
- alpha_sum += alpha_factor;
- contrib_sum += pcontribution;
- spixels += xportion * yportion;
- sx += 1.0;
- }
- while (sx < sx2);
- sy += 1.0f;
- }
- while (sy < sy2);
-
- if (spixels != 0.0) {
- red /= spixels;
- green /= spixels;
- blue /= spixels;
- alpha /= spixels;
- }
- if ( alpha_sum != 0.0) {
- if( contrib_sum != 0.0) {
- alpha_sum /= contrib_sum;
- }
- red /= alpha_sum;
- green /= alpha_sum;
- blue /= alpha_sum;
- }
- /* Clamping to allow for rounding errors above */
- if (red > 255.0) {
- red = 255.0;
- }
- if (green > 255.0) {
- green = 255.0;
- }
- if (blue > 255.0f) {
- blue = 255.0;
- }
- if (alpha > gdAlphaMax) {
- alpha = gdAlphaMax;
- }
- gdImageSetPixel(dst, x, y, gdTrueColorAlpha ((int) red, (int) green, (int) blue, (int) alpha));
- }
- }
-}
-
-/**
- * Group: Polygons
- */
-
-/**
- * Function: gdImagePolygon
- *
- * Draws a closed polygon
- *
- * Parameters:
- * im - The image.
- * p - The vertices as array of <gdPoint>s.
- * n - The number of vertices.
- * c - The color.
- *
- * See also:
- * - <gdImageOpenPolygon>
- * - <gdImageFilledPolygon>
- */
-BGD_DECLARE(void) gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- if (n <= 0) {
- return;
- }
-
-
- gdImageLine (im, p->x, p->y, p[n - 1].x, p[n - 1].y, c);
- gdImageOpenPolygon (im, p, n, c);
-}
-
-/**
- * Function: gdImageOpenPolygon
- *
- * Draws an open polygon
- *
- * Parameters:
- * im - The image.
- * p - The vertices as array of <gdPoint>s.
- * n - The number of vertices.
- * c - The color
- *
- * See also:
- * - <gdImagePolygon>
- */
-BGD_DECLARE(void) gdImageOpenPolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- int i;
- int lx, ly;
- if (n <= 0) {
- return;
- }
-
-
- lx = p->x;
- ly = p->y;
- for (i = 1; (i < n); i++) {
- p++;
- gdImageLine (im, lx, ly, p->x, p->y, c);
- lx = p->x;
- ly = p->y;
- }
-
-}
-
-/* THANKS to Kirsten Schulz for the polygon fixes! */
-
-/* The intersection finding technique of this code could be improved */
-/* by remembering the previous intertersection, and by using the slope. */
-/* That could help to adjust intersections to produce a nice */
-/* interior_extrema. */
-
-/**
- * Function: gdImageFilledPolygon
- *
- * Draws a filled polygon
- *
- * The polygon is filled using the even-odd fillrule what can leave unfilled
- * regions inside of self-intersecting polygons. This behavior might change in
- * a future version.
- *
- * Parameters:
- * im - The image.
- * p - The vertices as array of <gdPoint>s.
- * n - The number of vertices.
- * c - The color
- *
- * See also:
- * - <gdImagePolygon>
- */
-BGD_DECLARE(void) gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c)
-{
- int i;
- int j;
- int index;
- int y;
- int miny, maxy, pmaxy;
- int x1, y1;
- int x2, y2;
- int ind1, ind2;
- int ints;
- int fill_color;
- if (n <= 0) {
- return;
- }
-
- if (c == gdAntiAliased) {
- fill_color = im->AA_color;
- } else {
- fill_color = c;
- }
- if (!im->polyAllocated) {
- if (overflow2(sizeof (int), n)) {
- return;
- }
- im->polyInts = (int *) gdMalloc (sizeof (int) * n);
- if (!im->polyInts) {
- return;
- }
- im->polyAllocated = n;
- }
- if (im->polyAllocated < n) {
- while (im->polyAllocated < n) {
- im->polyAllocated *= 2;
- }
- if (overflow2(sizeof (int), im->polyAllocated)) {
- return;
- }
- im->polyInts = (int *) gdReallocEx (im->polyInts,
- sizeof (int) * im->polyAllocated);
- if (!im->polyInts) {
- return;
- }
- }
- miny = p[0].y;
- maxy = p[0].y;
- for (i = 1; (i < n); i++) {
- if (p[i].y < miny) {
- miny = p[i].y;
- }
- if (p[i].y > maxy) {
- maxy = p[i].y;
- }
- }
- /* necessary special case: horizontal line */
- if (n > 1 && miny == maxy) {
- x1 = x2 = p[0].x;
- for (i = 1; (i < n); i++) {
- if (p[i].x < x1) {
- x1 = p[i].x;
- } else if (p[i].x > x2) {
- x2 = p[i].x;
- }
- }
- gdImageLine(im, x1, miny, x2, miny, c);
- return;
- }
- pmaxy = maxy;
- /* 2.0.16: Optimization by Ilia Chipitsine -- don't waste time offscreen */
- /* 2.0.26: clipping rectangle is even better */
- if (miny < im->cy1) {
- miny = im->cy1;
- }
- if (maxy > im->cy2) {
- maxy = im->cy2;
- }
- /* Fix in 1.3: count a vertex only once */
- for (y = miny; (y <= maxy); y++) {
- ints = 0;
- for (i = 0; (i < n); i++) {
- if (!i) {
- ind1 = n - 1;
- ind2 = 0;
- } else {
- ind1 = i - 1;
- ind2 = i;
- }
- y1 = p[ind1].y;
- y2 = p[ind2].y;
- if (y1 < y2) {
- x1 = p[ind1].x;
- x2 = p[ind2].x;
- } else if (y1 > y2) {
- y2 = p[ind1].y;
- y1 = p[ind2].y;
- x2 = p[ind1].x;
- x1 = p[ind2].x;
- } else {
- continue;
- }
-
- /* Do the following math as float intermediately, and round to ensure
- * that Polygon and FilledPolygon for the same set of points have the
- * same footprint. */
-
- if ((y >= y1) && (y < y2)) {
- im->polyInts[ints++] = (int) ((float) ((y - y1) * (x2 - x1)) /
- (float) (y2 - y1) + 0.5 + x1);
- } else if ((y == pmaxy) && (y == y2)) {
- im->polyInts[ints++] = x2;
- }
- }
- /*
- 2.0.26: polygons pretty much always have less than 100 points,
- and most of the time they have considerably less. For such trivial
- cases, insertion sort is a good choice. Also a good choice for
- future implementations that may wish to indirect through a table.
- */
- for (i = 1; (i < ints); i++) {
- index = im->polyInts[i];
- j = i;
- while ((j > 0) && (im->polyInts[j - 1] > index)) {
- im->polyInts[j] = im->polyInts[j - 1];
- j--;
- }
- im->polyInts[j] = index;
- }
- for (i = 0; (i < (ints-1)); i += 2) {
- /* 2.0.29: back to gdImageLine to prevent segfaults when
- performing a pattern fill */
- gdImageLine (im, im->polyInts[i], y, im->polyInts[i + 1], y,
- fill_color);
- }
- }
- /* If we are drawing this AA, then redraw the border with AA lines. */
- /* This doesn't work as well as I'd like, but it doesn't clash either. */
- if (c == gdAntiAliased) {
- gdImagePolygon (im, p, n, c);
- }
-}
-
-/**
- * Group: other
- */
-
-static void gdImageSetAAPixelColor(gdImagePtr im, int x, int y, int color, int t);
-
-/**
- * Function: gdImageSetStyle
- *
- * Sets the style for following drawing operations
- *
- * Parameters:
- * im - The image.
- * style - An array of color values.
- * noOfPixel - The number of color values.
- */
-BGD_DECLARE(void) gdImageSetStyle (gdImagePtr im, int *style, int noOfPixels)
-{
- if (im->style) {
- gdFree (im->style);
- }
- if (overflow2(sizeof (int), noOfPixels)) {
- return;
- }
- im->style = (int *) gdMalloc (sizeof (int) * noOfPixels);
- if (!im->style) {
- return;
- }
- memcpy (im->style, style, sizeof (int) * noOfPixels);
- im->styleLength = noOfPixels;
- im->stylePos = 0;
-}
-
-/**
- * Function: gdImageSetThickness
- *
- * Sets the thickness for following drawing operations
- *
- * Parameters:
- * im - The image.
- * thickness - The thickness in pixels.
- */
-BGD_DECLARE(void) gdImageSetThickness (gdImagePtr im, int thickness)
-{
- im->thick = thickness;
-}
-
-/**
- * Function: gdImageSetBrush
- *
- * Sets the brush for following drawing operations
- *
- * Parameters:
- * im - The image.
- * brush - The brush image.
- */
-BGD_DECLARE(void) gdImageSetBrush (gdImagePtr im, gdImagePtr brush)
-{
- int i;
- im->brush = brush;
- if ((!im->trueColor) && (!im->brush->trueColor)) {
- for (i = 0; (i < gdImageColorsTotal (brush)); i++) {
- int index;
- index = gdImageColorResolveAlpha (im,
- gdImageRed (brush, i),
- gdImageGreen (brush, i),
- gdImageBlue (brush, i),
- gdImageAlpha (brush, i));
- im->brushColorMap[i] = index;
- }
- }
-}
-
-/*
- Function: gdImageSetTile
-*/
-BGD_DECLARE(void) gdImageSetTile (gdImagePtr im, gdImagePtr tile)
-{
- int i;
- im->tile = tile;
- if ((!im->trueColor) && (!im->tile->trueColor)) {
- for (i = 0; (i < gdImageColorsTotal (tile)); i++) {
- int index;
- index = gdImageColorResolveAlpha (im,
- gdImageRed (tile, i),
- gdImageGreen (tile, i),
- gdImageBlue (tile, i),
- gdImageAlpha (tile, i));
- im->tileColorMap[i] = index;
- }
- }
-}
-
-/**
- * Function: gdImageSetAntiAliased
- *
- * Set the color for subsequent anti-aliased drawing
- *
- * If <gdAntiAliased> is passed as color to drawing operations that support
- * anti-aliased drawing (such as <gdImageLine> and <gdImagePolygon>), the actual
- * color to be used can be set with this function.
- *
- * Example: draw an anti-aliased blue line:
- * | gdImageSetAntiAliased(im, gdTrueColorAlpha(0, 0, gdBlueMax, gdAlphaOpaque));
- * | gdImageLine(im, 10,10, 20,20, gdAntiAliased);
- *
- * Parameters:
- * im - The image.
- * c - The color.
- *
- * See also:
- * - <gdImageSetAntiAliasedDontBlend>
- */
-BGD_DECLARE(void) gdImageSetAntiAliased (gdImagePtr im, int c)
-{
- im->AA = 1;
- im->AA_color = c;
- im->AA_dont_blend = -1;
-}
-
-/**
- * Function: gdImageSetAntiAliasedDontBlend
- *
- * Set the color and "dont_blend" color for subsequent anti-aliased drawing
- *
- * This extended variant of <gdImageSetAntiAliased> allows to also specify a
- * (background) color that will not be blended in anti-aliased drawing
- * operations.
- *
- * Parameters:
- * im - The image.
- * c - The color.
- * dont_blend - Whether to blend.
- */
-BGD_DECLARE(void) gdImageSetAntiAliasedDontBlend (gdImagePtr im, int c, int dont_blend)
-{
- im->AA = 1;
- im->AA_color = c;
- im->AA_dont_blend = dont_blend;
-}
-
-/**
- * Function: gdImageInterlace
- *
- * Sets whether an image is interlaced
- *
- * This is relevant only when saving the image in a format that supports
- * interlacing.
- *
- * Parameters:
- * im - The image.
- * interlaceArg - Whether the image is interlaced.
- *
- * See also:
- * - <gdImageGetInterlaced>
-*/
-BGD_DECLARE(void) gdImageInterlace (gdImagePtr im, int interlaceArg)
-{
- im->interlace = interlaceArg;
-}
-
-/**
- * Function: gdImageCompare
- *
- * Compare two images
- *
- * Parameters:
- * im1 - An image.
- * im2 - Another image.
- *
- * Returns:
- * A bitmask of <Image Comparison> flags where each set flag signals
- * which attributes of the images are different.
- */
-BGD_DECLARE(int) gdImageCompare (gdImagePtr im1, gdImagePtr im2)
-{
- int x, y;
- int p1, p2;
- int cmpStatus = 0;
- int sx, sy;
-
- if (im1->interlace != im2->interlace) {
- cmpStatus |= GD_CMP_INTERLACE;
- }
-
- if (im1->transparent != im2->transparent) {
- cmpStatus |= GD_CMP_TRANSPARENT;
- }
-
- if (im1->trueColor != im2->trueColor) {
- cmpStatus |= GD_CMP_TRUECOLOR;
- }
-
- sx = im1->sx;
- if (im1->sx != im2->sx) {
- cmpStatus |= GD_CMP_SIZE_X + GD_CMP_IMAGE;
- if (im2->sx < im1->sx) {
- sx = im2->sx;
- }
- }
-
- sy = im1->sy;
- if (im1->sy != im2->sy) {
- cmpStatus |= GD_CMP_SIZE_Y + GD_CMP_IMAGE;
- if (im2->sy < im1->sy) {
- sy = im2->sy;
- }
- }
-
- if (im1->colorsTotal != im2->colorsTotal) {
- cmpStatus |= GD_CMP_NUM_COLORS;
- }
-
- for (y = 0; (y < sy); y++) {
- for (x = 0; (x < sx); x++) {
- p1 =
- im1->trueColor ? gdImageTrueColorPixel (im1, x,
- y) :
- gdImagePalettePixel (im1, x, y);
- p2 =
- im2->trueColor ? gdImageTrueColorPixel (im2, x,
- y) :
- gdImagePalettePixel (im2, x, y);
- if (gdImageRed (im1, p1) != gdImageRed (im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
- if (gdImageGreen (im1, p1) != gdImageGreen (im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
- if (gdImageBlue (im1, p1) != gdImageBlue (im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
-#if 0
- /* Soon we'll add alpha channel to palettes */
- if (gdImageAlpha (im1, p1) != gdImageAlpha (im2, p2)) {
- cmpStatus |= GD_CMP_COLOR + GD_CMP_IMAGE;
- break;
- }
-#endif
- }
- if (cmpStatus & GD_CMP_COLOR) {
- break;
- };
- }
-
- return cmpStatus;
-}
-
-
-/* Thanks to Frank Warmerdam for this superior implementation
- of gdAlphaBlend(), which merges alpha in the
- destination color much better. */
-
-/**
- * Function: gdAlphaBlend
- *
- * Blend two colors
- *
- * Parameters:
- * dst - The color to blend onto.
- * src - The color to blend.
- *
- * See also:
- * - <gdImageAlphaBlending>
- * - <gdLayerOverlay>
- * - <gdLayerMultiply>
- */
-BGD_DECLARE(int) gdAlphaBlend (int dst, int src)
-{
- int src_alpha = gdTrueColorGetAlpha(src);
- int dst_alpha, alpha, red, green, blue;
- int src_weight, dst_weight, tot_weight;
-
- /* -------------------------------------------------------------------- */
- /* Simple cases we want to handle fast. */
- /* -------------------------------------------------------------------- */
- if( src_alpha == gdAlphaOpaque )
- return src;
-
- dst_alpha = gdTrueColorGetAlpha(dst);
- if( src_alpha == gdAlphaTransparent )
- return dst;
- if( dst_alpha == gdAlphaTransparent )
- return src;
-
- /* -------------------------------------------------------------------- */
- /* What will the source and destination alphas be? Note that */
- /* the destination weighting is substantially reduced as the */
- /* overlay becomes quite opaque. */
- /* -------------------------------------------------------------------- */
- src_weight = gdAlphaTransparent - src_alpha;
- dst_weight = (gdAlphaTransparent - dst_alpha) * src_alpha / gdAlphaMax;
- tot_weight = src_weight + dst_weight;
-
- /* -------------------------------------------------------------------- */
- /* What red, green and blue result values will we use? */
- /* -------------------------------------------------------------------- */
- alpha = src_alpha * dst_alpha / gdAlphaMax;
-
- red = (gdTrueColorGetRed(src) * src_weight
- + gdTrueColorGetRed(dst) * dst_weight) / tot_weight;
- green = (gdTrueColorGetGreen(src) * src_weight
- + gdTrueColorGetGreen(dst) * dst_weight) / tot_weight;
- blue = (gdTrueColorGetBlue(src) * src_weight
- + gdTrueColorGetBlue(dst) * dst_weight) / tot_weight;
-
- /* -------------------------------------------------------------------- */
- /* Return merged result. */
- /* -------------------------------------------------------------------- */
- return ((alpha << 24) + (red << 16) + (green << 8) + blue);
-}
-
-static int gdAlphaOverlayColor (int src, int dst, int max );
-
-/**
- * Function: gdLayerOverlay
- *
- * Overlay two colors
- *
- * Parameters:
- * dst - The color to overlay onto.
- * src - The color to overlay.
- *
- * See also:
- * - <gdImageAlphaBlending>
- * - <gdAlphaBlend>
- * - <gdLayerMultiply>
- */
-BGD_DECLARE(int) gdLayerOverlay (int dst, int src)
-{
- int a1, a2;
- a1 = gdAlphaMax - gdTrueColorGetAlpha(dst);
- a2 = gdAlphaMax - gdTrueColorGetAlpha(src);
- return ( ((gdAlphaMax - a1*a2/gdAlphaMax) << 24) +
- (gdAlphaOverlayColor( gdTrueColorGetRed(src), gdTrueColorGetRed(dst), gdRedMax ) << 16) +
- (gdAlphaOverlayColor( gdTrueColorGetGreen(src), gdTrueColorGetGreen(dst), gdGreenMax ) << 8) +
- (gdAlphaOverlayColor( gdTrueColorGetBlue(src), gdTrueColorGetBlue(dst), gdBlueMax ))
- );
-}
-
-/* Apply 'overlay' effect - background pixels are colourised by the foreground colour */
-static int gdAlphaOverlayColor (int src, int dst, int max )
-{
- dst = dst << 1;
- if( dst > max ) {
- /* in the "light" zone */
- return dst + (src << 1) - (dst * src / max) - max;
- } else {
- /* in the "dark" zone */
- return dst * src / max;
- }
-}
-
-/**
- * Function: gdLayerMultiply
- *
- * Overlay two colors with multiply effect
- *
- * Parameters:
- * dst - The color to overlay onto.
- * src - The color to overlay.
- *
- * See also:
- * - <gdImageAlphaBlending>
- * - <gdAlphaBlend>
- * - <gdLayerOverlay>
- */
-BGD_DECLARE(int) gdLayerMultiply (int dst, int src)
-{
- int a1, a2, r1, r2, g1, g2, b1, b2;
- a1 = gdAlphaMax - gdTrueColorGetAlpha(src);
- a2 = gdAlphaMax - gdTrueColorGetAlpha(dst);
-
- r1 = gdRedMax - (a1 * (gdRedMax - gdTrueColorGetRed(src))) / gdAlphaMax;
- r2 = gdRedMax - (a2 * (gdRedMax - gdTrueColorGetRed(dst))) / gdAlphaMax;
- g1 = gdGreenMax - (a1 * (gdGreenMax - gdTrueColorGetGreen(src))) / gdAlphaMax;
- g2 = gdGreenMax - (a2 * (gdGreenMax - gdTrueColorGetGreen(dst))) / gdAlphaMax;
- b1 = gdBlueMax - (a1 * (gdBlueMax - gdTrueColorGetBlue(src))) / gdAlphaMax;
- b2 = gdBlueMax - (a2 * (gdBlueMax - gdTrueColorGetBlue(dst))) / gdAlphaMax ;
-
- a1 = gdAlphaMax - a1;
- a2 = gdAlphaMax - a2;
- return ( ((a1*a2/gdAlphaMax) << 24) +
- ((r1*r2/gdRedMax) << 16) +
- ((g1*g2/gdGreenMax) << 8) +
- ((b1*b2/gdBlueMax))
- );
-}
-
-/**
- * Function: gdImageAlphaBlending
- *
- * Set the effect for subsequent drawing operations
- *
- * Note that the effect is used for truecolor images only.
- *
- * Parameters:
- * im - The image.
- * alphaBlendingArg - The effect.
- *
- * See also:
- * - <Effects>
- */
-BGD_DECLARE(void) gdImageAlphaBlending (gdImagePtr im, int alphaBlendingArg)
-{
- im->alphaBlendingFlag = alphaBlendingArg;
-}
-
-/**
- * Function: gdImageSaveAlpha
- *
- * Sets the save alpha flag
- *
- * The save alpha flag specifies whether the alpha channel of the pixels should
- * be saved. This is supported only for image formats that support full alpha
- * transparency, e.g. PNG.
- */
-BGD_DECLARE(void) gdImageSaveAlpha (gdImagePtr im, int saveAlphaArg)
-{
- im->saveAlphaFlag = saveAlphaArg;
-}
-
-/**
- * Function: gdImageSetClip
- *
- * Sets the clipping rectangle
- *
- * The clipping rectangle restricts the drawing area for following drawing
- * operations.
- *
- * Parameters:
- * im - The image.
- * x1 - The x-coordinate of the upper left corner.
- * y1 - The y-coordinate of the upper left corner.
- * x2 - The x-coordinate of the lower right corner.
- * y2 - The y-coordinate of the lower right corner.
- *
- * See also:
- * - <gdImageGetClip>
- */
-BGD_DECLARE(void) gdImageSetClip (gdImagePtr im, int x1, int y1, int x2, int y2)
-{
- if (x1 < 0) {
- x1 = 0;
- }
- if (x1 >= im->sx) {
- x1 = im->sx - 1;
- }
- if (x2 < 0) {
- x2 = 0;
- }
- if (x2 >= im->sx) {
- x2 = im->sx - 1;
- }
- if (y1 < 0) {
- y1 = 0;
- }
- if (y1 >= im->sy) {
- y1 = im->sy - 1;
- }
- if (y2 < 0) {
- y2 = 0;
- }
- if (y2 >= im->sy) {
- y2 = im->sy - 1;
- }
- im->cx1 = x1;
- im->cy1 = y1;
- im->cx2 = x2;
- im->cy2 = y2;
-}
-
-/**
- * Function: gdImageGetClip
- *
- * Gets the current clipping rectangle
- *
- * Parameters:
- * im - The image.
- * x1P - (out) The x-coordinate of the upper left corner.
- * y1P - (out) The y-coordinate of the upper left corner.
- * x2P - (out) The x-coordinate of the lower right corner.
- * y2P - (out) The y-coordinate of the lower right corner.
- *
- * See also:
- * - <gdImageSetClip>
- */
-BGD_DECLARE(void) gdImageGetClip (gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P)
-{
- *x1P = im->cx1;
- *y1P = im->cy1;
- *x2P = im->cx2;
- *y2P = im->cy2;
-}
-
-/**
- * Function: gdImageSetResolution
- *
- * Sets the resolution of an image.
- *
- * Parameters:
- * im - The image.
- * res_x - The horizontal resolution in DPI.
- * res_y - The vertical resolution in DPI.
- *
- * See also:
- * - <gdImageResolutionX>
- * - <gdImageResolutionY>
- */
-BGD_DECLARE(void) gdImageSetResolution(gdImagePtr im, const unsigned int res_x, const unsigned int res_y)
-{
- if (res_x > 0) im->res_x = res_x;
- if (res_y > 0) im->res_y = res_y;
-}
-
-/*
- * Added on 2003/12 by Pierre-Alain Joye (pajoye@pearfr.org)
- * */
-#define BLEND_COLOR(a, nc, c, cc) \
-nc = (cc) + (((((c) - (cc)) * (a)) + ((((c) - (cc)) * (a)) >> 8) + 0x80) >> 8);
-
-static void gdImageSetAAPixelColor(gdImagePtr im, int x, int y, int color, int t)
-{
- int dr,dg,db,p,r,g,b;
-
- /* 2.0.34: watch out for out of range calls */
- if (!gdImageBoundsSafeMacro(im, x, y)) {
- return;
- }
- p = gdImageGetPixel(im,x,y);
- /* TBB: we have to implement the dont_blend stuff to provide
- the full feature set of the old implementation */
- if ((p == color)
- || ((p == im->AA_dont_blend)
- && (t != 0x00))) {
- return;
- }
- dr = gdTrueColorGetRed(color);
- dg = gdTrueColorGetGreen(color);
- db = gdTrueColorGetBlue(color);
-
- r = gdTrueColorGetRed(p);
- g = gdTrueColorGetGreen(p);
- b = gdTrueColorGetBlue(p);
-
- BLEND_COLOR(t, dr, r, dr);
- BLEND_COLOR(t, dg, g, dg);
- BLEND_COLOR(t, db, b, db);
- im->tpixels[y][x] = gdTrueColorAlpha(dr, dg, db, gdAlphaOpaque);
-}
-
-static void gdImageAALine (gdImagePtr im, int x1, int y1, int x2, int y2, int col)
-{
- /* keep them as 32bits */
- long x, y, inc, frac;
- long dx, dy,tmp;
- int w, wid, wstart;
- int thick = im->thick;
-
- if (!im->trueColor) {
- /* TBB: don't crash when the image is of the wrong type */
- gdImageLine(im, x1, y1, x2, y2, col);
- return;
- }
-
- /* TBB: use the clipping rectangle */
- if (clip_1d (&x1, &y1, &x2, &y2, im->cx1, im->cx2) == 0)
- return;
- if (clip_1d (&y1, &x1, &y2, &x2, im->cy1, im->cy2) == 0)
- return;
-
- dx = x2 - x1;
- dy = y2 - y1;
-
- if (dx == 0 && dy == 0) {
- /* TBB: allow setting points */
- gdImageSetPixel(im, x1, y1, col);
- return;
- } else {
- double ag;
- /* Cast the long to an int to avoid compiler warnings about truncation.
- * This isn't a problem as computed dy/dx values came from ints above. */
- ag = fabs(abs((int)dy) < abs((int)dx) ? cos(atan2(dy, dx)) : sin(atan2(dy, dx)));
- if (ag != 0) {
- wid = thick / ag;
- } else {
- wid = 1;
- }
- if (wid == 0) {
- wid = 1;
- }
- }
-
- /* Axis aligned lines */
- if (dx == 0) {
- gdImageVLine(im, x1, y1, y2, col);
- return;
- } else if (dy == 0) {
- gdImageHLine(im, y1, x1, x2, col);
- return;
- }
-
- if (abs((int)dx) > abs((int)dy)) {
- if (dx < 0) {
- tmp = x1;
- x1 = x2;
- x2 = tmp;
- tmp = y1;
- y1 = y2;
- y2 = tmp;
- dx = x2 - x1;
- dy = y2 - y1;
- }
- y = y1;
- inc = (dy * 65536) / dx;
- frac = 0;
- /* TBB: set the last pixel for consistency (<=) */
- for (x = x1 ; x <= x2 ; x++) {
- wstart = y - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetAAPixelColor(im, x , w , col , (frac >> 8) & 0xFF);
- gdImageSetAAPixelColor(im, x , w + 1 , col, (~frac >> 8) & 0xFF);
- }
- frac += inc;
- if (frac >= 65536) {
- frac -= 65536;
- y++;
- } else if (frac < 0) {
- frac += 65536;
- y--;
- }
- }
- } else {
- if (dy < 0) {
- tmp = x1;
- x1 = x2;
- x2 = tmp;
- tmp = y1;
- y1 = y2;
- y2 = tmp;
- dx = x2 - x1;
- dy = y2 - y1;
- }
- x = x1;
- inc = (dx * 65536) / dy;
- frac = 0;
- /* TBB: set the last pixel for consistency (<=) */
- for (y = y1 ; y <= y2 ; y++) {
- wstart = x - wid / 2;
- for (w = wstart; w < wstart + wid; w++) {
- gdImageSetAAPixelColor(im, w , y , col, (frac >> 8) & 0xFF);
- gdImageSetAAPixelColor(im, w + 1, y, col, (~frac >> 8) & 0xFF);
- }
- frac += inc;
- if (frac >= 65536) {
- frac -= 65536;
- x++;
- } else if (frac < 0) {
- frac += 65536;
- x--;
- }
- }
- }
-}
-
-
-/**
- * Function: gdImagePaletteToTrueColor
- *
- * Convert a palette image to true color
- *
- * Parameters:
- * src - The image.
- *
- * Returns:
- * Non-zero if the conversion succeeded, zero otherwise.
- *
- * See also:
- * - <gdImageTrueColorToPalette>
- */
-BGD_DECLARE(int) gdImagePaletteToTrueColor(gdImagePtr src)
-{
- unsigned int y;
- unsigned int yy;
-
- if (src == NULL) {
- return 0;
- }
-
- if (src->trueColor == 1) {
- return 1;
- } else {
- unsigned int x;
- const unsigned int sy = gdImageSY(src);
- const unsigned int sx = gdImageSX(src);
-
- src->tpixels = (int **) gdMalloc(sizeof(int *) * sy);
- if (src->tpixels == NULL) {
- return 0;
- }
-
- for (y = 0; y < sy; y++) {
- const unsigned char *src_row = src->pixels[y];
- int * dst_row;
-
- /* no need to calloc it, we overwrite all pxl anyway */
- src->tpixels[y] = (int *) gdMalloc(sx * sizeof(int));
- if (src->tpixels[y] == NULL) {
- goto clean_on_error;
- }
-
- dst_row = src->tpixels[y];
- for (x = 0; x < sx; x++) {
- const unsigned char c = *(src_row + x);
- if (c == src->transparent) {
- *(dst_row + x) = gdTrueColorAlpha(0, 0, 0, 127);
- } else {
- *(dst_row + x) = gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]);
- }
- }
- }
- }
-
- /* free old palette buffer (y is sy) */
- for (yy = 0; yy < y; yy++) {
- gdFree(src->pixels[yy]);
- }
- gdFree(src->pixels);
- src->trueColor = 1;
- src->pixels = NULL;
- src->alphaBlendingFlag = 0;
- src->saveAlphaFlag = 1;
-
- if (src->transparent >= 0) {
- const unsigned char c = src->transparent;
- src->transparent = gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]);
- }
-
- return 1;
-
-clean_on_error:
- /* free new true color buffer (y is not allocated, have failed) */
- for (yy = 0; yy < y; yy++) {
- gdFree(src->tpixels[yy]);
- }
- gdFree(src->tpixels);
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd.h b/Build/source/libs/gd/libgd-src/src/gd.h
deleted file mode 100644
index 4ff13a243c2..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd.h
+++ /dev/null
@@ -1,1640 +0,0 @@
-#ifndef GD_H
-#define GD_H 1
-
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Version information. This gets parsed by build scripts as well as
- * gcc so each #define line in this group must also be splittable on
- * whitespace, take the form GD_*_VERSION and contain the magical
- * trailing comment. */
-#define GD_MAJOR_VERSION 2 /*version605b5d1778*/
-#define GD_MINOR_VERSION 3 /*version605b5d1778*/
-#define GD_RELEASE_VERSION 1 /*version605b5d1778*/
-#define GD_EXTRA_VERSION "" /*version605b5d1778*/
-/* End parsable section. */
-
-/* The version string. This is constructed from the version number
- * parts above via macro abuse^Wtrickery. */
-#define GDXXX_VERSION_STR(mjr, mnr, rev, ext) mjr "." mnr "." rev ext
-#define GDXXX_STR(s) GDXXX_SSTR(s) /* Two levels needed to expand args. */
-#define GDXXX_SSTR(s) #s
-
-#define GD_VERSION_STRING \
- GDXXX_VERSION_STR(GDXXX_STR(GD_MAJOR_VERSION), \
- GDXXX_STR(GD_MINOR_VERSION), \
- GDXXX_STR(GD_RELEASE_VERSION), \
- GD_EXTRA_VERSION)
-
-
-/* Do the DLL dance: dllexport when building the DLL,
- dllimport when importing from it, nothing when
- not on Silly Silly Windows (tm Aardman Productions). */
-
-/* 2.0.20: for headers */
-
-/* 2.0.24: __stdcall also needed for Visual BASIC
- and other languages. This breaks ABI compatibility
- with previous DLL revs, but it's necessary. */
-
-/* 2.0.29: WIN32 programmers can declare the NONDLL macro if they
- wish to build gd as a static library or by directly including
- the gd sources in a project. */
-
-/* http://gcc.gnu.org/wiki/Visibility */
-#if defined(_WIN32) || defined(CYGWIN) || defined(_WIN32_WCE)
-# ifdef BGDWIN32
-# ifdef NONDLL
-# define BGD_EXPORT_DATA_PROT
-# else
-# ifdef __GNUC__
-# define BGD_EXPORT_DATA_PROT __attribute__ ((__dllexport__))
-# else
-# define BGD_EXPORT_DATA_PROT __declspec(dllexport)
-# endif
-# endif
-# else
-# ifdef __GNUC__
-# define BGD_EXPORT_DATA_PROT __attribute__ ((__dllimport__))
-# else
-# define BGD_EXPORT_DATA_PROT __declspec(dllimport)
-# endif
-# endif
-# define BGD_STDCALL
-# define BGD_EXPORT_DATA_IMPL
-#else
-# if defined(__GNUC__) || defined(__clang__)
-# define BGD_EXPORT_DATA_PROT __attribute__ ((__visibility__ ("default")))
-# define BGD_EXPORT_DATA_IMPL __attribute__ ((__visibility__ ("hidden")))
-# else
-# define BGD_EXPORT_DATA_PROT
-# define BGD_EXPORT_DATA_IMPL
-# endif
-# define BGD_STDCALL
-#endif
-
-#define BGD_DECLARE(rt) BGD_EXPORT_DATA_PROT rt BGD_STDCALL
-
-/* VS2012+ disable keyword macroizing unless _ALLOW_KEYWORD_MACROS is set
- We define inline, snprintf, and strcasecmp if they're missing
-*/
-#ifdef _MSC_VER
-# define _ALLOW_KEYWORD_MACROS
-# ifndef inline
-# define inline __inline
-# endif
-# ifndef strcasecmp
-# define strcasecmp _stricmp
-# endif
-#if _MSC_VER < 1900
- extern int snprintf(char*, size_t, const char*, ...);
-#endif
-#endif
-
-/* gd.h: declarations file for the graphic-draw module.
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, provided
- * that the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation. This software is provided "AS IS." Thomas Boutell and
- * Boutell.Com, Inc. disclaim all warranties, either express or implied,
- * including but not limited to implied warranties of merchantability and
- * fitness for a particular purpose, with respect to this code and accompanying
- * documentation. */
-
-/* stdio is needed for file I/O. */
-#include <stdio.h>
-#include <stdarg.h>
-#include "gd_io.h"
-
-/* The maximum number of palette entries in palette-based images.
- In the wonderful new world of gd 2.0, you can of course have
- many more colors when using truecolor mode. */
-
-#define gdMaxColors 256
-
-/* Image type. See functions below; you will not need to change
- the elements directly. Use the provided macros to
- access sx, sy, the color table, and colorsTotal for
- read-only purposes. */
-
-/* If 'truecolor' is set true, the image is truecolor;
- pixels are represented by integers, which
- must be 32 bits wide or more.
-
- True colors are repsented as follows:
-
- ARGB
-
- Where 'A' (alpha channel) occupies only the
- LOWER 7 BITS of the MSB. This very small
- loss of alpha channel resolution allows gd 2.x
- to keep backwards compatibility by allowing
- signed integers to be used to represent colors,
- and negative numbers to represent special cases,
- just as in gd 1.x. */
-
-#define gdAlphaMax 127
-#define gdAlphaOpaque 0
-#define gdAlphaTransparent 127
-#define gdRedMax 255
-#define gdGreenMax 255
-#define gdBlueMax 255
-
-/**
- * Group: Color Decomposition
- */
-
-/**
- * Macro: gdTrueColorGetAlpha
- *
- * Gets the alpha channel value
- *
- * Parameters:
- * c - The color
- *
- * See also:
- * - <gdTrueColorAlpha>
- */
-#define gdTrueColorGetAlpha(c) (((c) & 0x7F000000) >> 24)
-
-/**
- * Macro: gdTrueColorGetRed
- *
- * Gets the red channel value
- *
- * Parameters:
- * c - The color
- *
- * See also:
- * - <gdTrueColorAlpha>
- */
-#define gdTrueColorGetRed(c) (((c) & 0xFF0000) >> 16)
-
-/**
- * Macro: gdTrueColorGetGreen
- *
- * Gets the green channel value
- *
- * Parameters:
- * c - The color
- *
- * See also:
- * - <gdTrueColorAlpha>
- */
-#define gdTrueColorGetGreen(c) (((c) & 0x00FF00) >> 8)
-
-/**
- * Macro: gdTrueColorGetBlue
- *
- * Gets the blue channel value
- *
- * Parameters:
- * c - The color
- *
- * See also:
- * - <gdTrueColorAlpha>
- */
-#define gdTrueColorGetBlue(c) ((c) & 0x0000FF)
-
-/**
- * Group: Effects
- *
- * The layering effect
- *
- * When pixels are drawn the new colors are "mixed" with the background
- * depending on the effect.
- *
- * Note that the effect does not apply to palette images, where pixels
- * are always replaced.
- *
- * Modes:
- * gdEffectReplace - replace pixels
- * gdEffectAlphaBlend - blend pixels, see <gdAlphaBlend>
- * gdEffectNormal - default mode; same as gdEffectAlphaBlend
- * gdEffectOverlay - overlay pixels, see <gdLayerOverlay>
- * gdEffectMultiply - overlay pixels with multiply effect, see
- * <gdLayerMultiply>
- *
- * See also:
- * - <gdImageAlphaBlending>
- */
-#define gdEffectReplace 0
-#define gdEffectAlphaBlend 1
-#define gdEffectNormal 2
-#define gdEffectOverlay 3
-#define gdEffectMultiply 4
-
-#define GD_TRUE 1
-#define GD_FALSE 0
-
-#define GD_EPSILON 1e-6
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-
-/* This function accepts truecolor pixel values only. The
- source color is composited with the destination color
- based on the alpha channel value of the source color.
- The resulting color is opaque. */
-
-BGD_DECLARE(int) gdAlphaBlend (int dest, int src);
-BGD_DECLARE(int) gdLayerOverlay (int dest, int src);
-BGD_DECLARE(int) gdLayerMultiply (int dest, int src);
-
-
-/**
- * Group: Color Quantization
- *
- * Enum: gdPaletteQuantizationMethod
- *
- * Constants:
- * GD_QUANT_DEFAULT - GD_QUANT_LIQ if libimagequant is available,
- * GD_QUANT_JQUANT otherwise.
- * GD_QUANT_JQUANT - libjpeg's old median cut. Fast, but only uses 16-bit
- * color.
- * GD_QUANT_NEUQUANT - NeuQuant - approximation using Kohonen neural network.
- * GD_QUANT_LIQ - A combination of algorithms used in libimagequant
- * aiming for the highest quality at cost of speed.
- *
- * Note that GD_QUANT_JQUANT does not retain the alpha channel, and
- * GD_QUANT_NEUQUANT does not support dithering.
- *
- * See also:
- * - <gdImageTrueColorToPaletteSetMethod>
- */
-enum gdPaletteQuantizationMethod {
- GD_QUANT_DEFAULT = 0,
- GD_QUANT_JQUANT = 1,
- GD_QUANT_NEUQUANT = 2,
- GD_QUANT_LIQ = 3
-};
-
-
-/**
- * Group: Transform
- *
- * Constants: gdInterpolationMethod
- *
- * GD_BELL - Bell
- * GD_BESSEL - Bessel
- * GD_BILINEAR_FIXED - fixed point bilinear
- * GD_BICUBIC - Bicubic
- * GD_BICUBIC_FIXED - fixed point bicubic integer
- * GD_BLACKMAN - Blackman
- * GD_BOX - Box
- * GD_BSPLINE - BSpline
- * GD_CATMULLROM - Catmullrom
- * GD_GAUSSIAN - Gaussian
- * GD_GENERALIZED_CUBIC - Generalized cubic
- * GD_HERMITE - Hermite
- * GD_HAMMING - Hamming
- * GD_HANNING - Hannig
- * GD_MITCHELL - Mitchell
- * GD_NEAREST_NEIGHBOUR - Nearest neighbour interpolation
- * GD_POWER - Power
- * GD_QUADRATIC - Quadratic
- * GD_SINC - Sinc
- * GD_TRIANGLE - Triangle
- * GD_WEIGHTED4 - 4 pixels weighted bilinear interpolation
- * GD_LINEAR - bilinear interpolation
- *
- * See also:
- * - <gdImageSetInterpolationMethod>
- * - <gdImageGetInterpolationMethod>
- */
-typedef enum {
- GD_DEFAULT = 0,
- GD_BELL,
- GD_BESSEL,
- GD_BILINEAR_FIXED,
- GD_BICUBIC,
- GD_BICUBIC_FIXED,
- GD_BLACKMAN,
- GD_BOX,
- GD_BSPLINE,
- GD_CATMULLROM,
- GD_GAUSSIAN,
- GD_GENERALIZED_CUBIC,
- GD_HERMITE,
- GD_HAMMING,
- GD_HANNING,
- GD_MITCHELL,
- GD_NEAREST_NEIGHBOUR,
- GD_POWER,
- GD_QUADRATIC,
- GD_SINC,
- GD_TRIANGLE,
- GD_WEIGHTED4,
- GD_LINEAR,
- GD_METHOD_COUNT = 23
-} gdInterpolationMethod;
-
-/* define struct with name and func ptr and add it to gdImageStruct gdInterpolationMethod interpolation; */
-
-/* Interpolation function ptr */
-typedef double (* interpolation_method )(double);
-
-
-/*
- Group: Types
-
- typedef: gdImage
-
- typedef: gdImagePtr
-
- The data structure in which gd stores images. <gdImageCreate>,
- <gdImageCreateTrueColor> and the various image file-loading functions
- return a pointer to this type, and the other functions expect to
- receive a pointer to this type as their first argument.
-
- *gdImagePtr* is a pointer to *gdImage*.
-
- See also:
- <Accessor Macros>
-
- (Previous versions of this library encouraged directly manipulating
- the contents ofthe struct but we are attempting to move away from
- this practice so the fields are no longer documented here. If you
- need to poke at the internals of this struct, feel free to look at
- *gd.h*.)
-*/
-typedef struct gdImageStruct {
- /* Palette-based image pixels */
- unsigned char **pixels;
- int sx;
- int sy;
- /* These are valid in palette images only. See also
- 'alpha', which appears later in the structure to
- preserve binary backwards compatibility */
- int colorsTotal;
- int red[gdMaxColors];
- int green[gdMaxColors];
- int blue[gdMaxColors];
- int open[gdMaxColors];
- /* For backwards compatibility, this is set to the
- first palette entry with 100% transparency,
- and is also set and reset by the
- gdImageColorTransparent function. Newer
- applications can allocate palette entries
- with any desired level of transparency; however,
- bear in mind that many viewers, notably
- many web browsers, fail to implement
- full alpha channel for PNG and provide
- support for full opacity or transparency only. */
- int transparent;
- int *polyInts;
- int polyAllocated;
- struct gdImageStruct *brush;
- struct gdImageStruct *tile;
- int brushColorMap[gdMaxColors];
- int tileColorMap[gdMaxColors];
- int styleLength;
- int stylePos;
- int *style;
- int interlace;
- /* New in 2.0: thickness of line. Initialized to 1. */
- int thick;
- /* New in 2.0: alpha channel for palettes. Note that only
- Macintosh Internet Explorer and (possibly) Netscape 6
- really support multiple levels of transparency in
- palettes, to my knowledge, as of 2/15/01. Most
- common browsers will display 100% opaque and
- 100% transparent correctly, and do something
- unpredictable and/or undesirable for levels
- in between. TBB */
- int alpha[gdMaxColors];
- /* Truecolor flag and pixels. New 2.0 fields appear here at the
- end to minimize breakage of existing object code. */
- int trueColor;
- int **tpixels;
- /* Should alpha channel be copied, or applied, each time a
- pixel is drawn? This applies to truecolor images only.
- No attempt is made to alpha-blend in palette images,
- even if semitransparent palette entries exist.
- To do that, build your image as a truecolor image,
- then quantize down to 8 bits. */
- int alphaBlendingFlag;
- /* Should the alpha channel of the image be saved? This affects
- PNG at the moment; other future formats may also
- have that capability. JPEG doesn't. */
- int saveAlphaFlag;
-
- /* There should NEVER BE ACCESSOR MACROS FOR ITEMS BELOW HERE, so this
- part of the structure can be safely changed in new releases. */
-
- /* 2.0.12: anti-aliased globals. 2.0.26: just a few vestiges after
- switching to the fast, memory-cheap implementation from PHP-gd. */
- int AA;
- int AA_color;
- int AA_dont_blend;
-
- /* 2.0.12: simple clipping rectangle. These values
- must be checked for safety when set; please use
- gdImageSetClip */
- int cx1;
- int cy1;
- int cx2;
- int cy2;
-
- /* 2.1.0: allows to specify resolution in dpi */
- unsigned int res_x;
- unsigned int res_y;
-
- /* Selects quantization method, see gdImageTrueColorToPaletteSetMethod() and gdPaletteQuantizationMethod enum. */
- int paletteQuantizationMethod;
- /* speed/quality trade-off. 1 = best quality, 10 = best speed. 0 = method-specific default.
- Applicable to GD_QUANT_LIQ and GD_QUANT_NEUQUANT. */
- int paletteQuantizationSpeed;
- /* Image will remain true-color if conversion to palette cannot achieve given quality.
- Value from 1 to 100, 1 = ugly, 100 = perfect. Applicable to GD_QUANT_LIQ.*/
- int paletteQuantizationMinQuality;
- /* Image will use minimum number of palette colors needed to achieve given quality. Must be higher than paletteQuantizationMinQuality
- Value from 1 to 100, 1 = ugly, 100 = perfect. Applicable to GD_QUANT_LIQ.*/
- int paletteQuantizationMaxQuality;
- gdInterpolationMethod interpolation_id;
- interpolation_method interpolation;
-}
-gdImage;
-
-typedef gdImage *gdImagePtr;
-
-
-/* Point type for use in polygon drawing. */
-
-/**
- * Group: Types
- *
- * typedef: gdPointF
- * Defines a point in a 2D coordinate system using floating point
- * values.
- * x - Floating point position (increase from left to right)
- * y - Floating point Row position (increase from top to bottom)
- *
- * typedef: gdPointFPtr
- * Pointer to a <gdPointF>
- *
- * See also:
- * <gdImageCreate>, <gdImageCreateTrueColor>,
- **/
-typedef struct
-{
- double x, y;
-}
-gdPointF, *gdPointFPtr;
-
-
-/*
- Group: Types
-
- typedef: gdFont
-
- typedef: gdFontPtr
-
- A font structure, containing the bitmaps of all characters in a
- font. Used to declare the characteristics of a font. Text-output
- functions expect these as their second argument, following the
- <gdImagePtr> argument. <gdFontGetSmall> and <gdFontGetLarge> both
- return one.
-
- You can provide your own font data by providing such a structure and
- the associated pixel array. You can determine the width and height
- of a single character in a font by examining the w and h members of
- the structure. If you will not be creating your own fonts, you will
- not need to concern yourself with the rest of the components of this
- structure.
-
- Please see the files gdfontl.c and gdfontl.h for an example of
- the proper declaration of this structure.
-
- > typedef struct {
- > // # of characters in font
- > int nchars;
- > // First character is numbered... (usually 32 = space)
- > int offset;
- > // Character width and height
- > int w;
- > int h;
- > // Font data; array of characters, one row after another.
- > // Easily included in code, also easily loaded from
- > // data files.
- > char *data;
- > } gdFont;
-
- gdFontPtr is a pointer to gdFont.
-
-*/
-typedef struct {
- /* # of characters in font */
- int nchars;
- /* First character is numbered... (usually 32 = space) */
- int offset;
- /* Character width and height */
- int w;
- int h;
- /* Font data; array of characters, one row after another.
- Easily included in code, also easily loaded from
- data files. */
- char *data;
-}
-gdFont;
-
-/* Text functions take these. */
-typedef gdFont *gdFontPtr;
-
-typedef void(*gdErrorMethod)(int, const char *, va_list);
-
-BGD_DECLARE(void) gdSetErrorMethod(gdErrorMethod);
-BGD_DECLARE(void) gdClearErrorMethod(void);
-
-/* For backwards compatibility only. Use gdImageSetStyle()
- for MUCH more flexible line drawing. Also see
- gdImageSetBrush(). */
-#define gdDashSize 4
-
-/**
- * Group: Colors
- *
- * Colors are always of type int which is supposed to be at least 32 bit large.
- *
- * Kinds of colors:
- * true colors - ARGB values where the alpha channel is stored as most
- * significant, and the blue channel as least significant
- * byte. Note that the alpha channel only uses the 7 least
- * significant bits.
- * Don't rely on the internal representation, though, and
- * use <gdTrueColorAlpha> to compose a truecolor value, and
- * <gdTrueColorGetAlpha>, <gdTrueColorGetRed>,
- * <gdTrueColorGetGreen> and <gdTrueColorGetBlue> to access
- * the respective channels.
- * palette indexes - The index of a color palette entry (0-255).
- * special colors - As listed in the following section.
- *
- * Constants: Special Colors
- * gdStyled - use the current style, see <gdImageSetStyle>
- * gdBrushed - use the current brush, see <gdImageSetBrush>
- * gdStyledBrushed - use the current style and brush
- * gdTiled - use the current tile, see <gdImageSetTile>
- * gdTransparent - indicate transparency, what is not the same as the
- * transparent color index; used for lines only
- * gdAntiAliased - draw anti aliased
- */
-
-#define gdStyled (-2)
-#define gdBrushed (-3)
-#define gdStyledBrushed (-4)
-#define gdTiled (-5)
-#define gdTransparent (-6)
-#define gdAntiAliased (-7)
-
-/* Functions to manipulate images. */
-
-/* Creates a palette-based image (up to 256 colors). */
-BGD_DECLARE(gdImagePtr) gdImageCreate (int sx, int sy);
-
-/* An alternate name for the above (2.0). */
-#define gdImageCreatePalette gdImageCreate
-
-/* Creates a truecolor image (millions of colors). */
-BGD_DECLARE(gdImagePtr) gdImageCreateTrueColor (int sx, int sy);
-
-/* Creates an image from various file types. These functions
- return a palette or truecolor image based on the
- nature of the file being loaded. Truecolor PNG
- stays truecolor; palette PNG stays palette-based;
- JPEG is always truecolor. */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPng (FILE * fd);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngCtx (gdIOCtxPtr in);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngPtr (int size, void *data);
-
-/* These read the first frame only */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGif (FILE * fd);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGifCtx (gdIOCtxPtr in);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGifPtr (int size, void *data);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMP (FILE * inFile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPCtx (gdIOCtx * infile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPPtr (int size, void *data);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpeg (FILE * infile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegEx (FILE * infile, int ignore_warning);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegCtx (gdIOCtx * infile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegCtxEx (gdIOCtx * infile, int ignore_warning);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegPtr (int size, void *data);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegPtrEx (int size, void *data, int ignore_warning);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebp (FILE * inFile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpPtr (int size, void *data);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpCtx (gdIOCtx * infile);
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiff(FILE *inFile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiffCtx(gdIOCtx *infile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiffPtr(int size, void *data);
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTga( FILE * fp );
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTgaCtx(gdIOCtx* ctx);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTgaPtr(int size, void *data);
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromBmp (FILE * inFile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromBmpPtr (int size, void *data);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromBmpCtx (gdIOCtxPtr infile);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromFile(const char *filename);
-
-
-/*
- Group: Types
-
- typedef: gdSource
-
- typedef: gdSourcePtr
-
- *Note:* This interface is *obsolete* and kept only for
- *compatibility. Use <gdIOCtx> instead.
-
- Represents a source from which a PNG can be read. Programmers who
- do not wish to read PNGs from a file can provide their own
- alternate input mechanism, using the <gdImageCreateFromPngSource>
- function. See the documentation of that function for an example of
- the proper use of this type.
-
- > typedef struct {
- > int (*source) (void *context, char *buffer, int len);
- > void *context;
- > } gdSource, *gdSourcePtr;
-
- The source function must return -1 on error, otherwise the number
- of bytes fetched. 0 is EOF, not an error!
-
- 'context' will be passed to your source function.
-
-*/
-typedef struct {
- int (*source) (void *context, char *buffer, int len);
- void *context;
-}
-gdSource, *gdSourcePtr;
-
-/* Deprecated in favor of gdImageCreateFromPngCtx */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngSource (gdSourcePtr in);
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd (FILE * in);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGdCtx (gdIOCtxPtr in);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGdPtr (int size, void *data);
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2 (FILE * in);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Ctx (gdIOCtxPtr in);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Ptr (int size, void *data);
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Part (FILE * in, int srcx, int srcy, int w,
- int h);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2PartCtx (gdIOCtxPtr in, int srcx, int srcy,
- int w, int h);
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2PartPtr (int size, void *data, int srcx, int srcy,
- int w, int h);
-/* 2.0.10: prototype was missing */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromXbm (FILE * in);
-BGD_DECLARE(void) gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out);
-
-/* NOTE: filename, not FILE */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromXpm (char *filename);
-
-BGD_DECLARE(void) gdImageDestroy (gdImagePtr im);
-
-/* Replaces or blends with the background depending on the
- most recent call to gdImageAlphaBlending and the
- alpha channel value of 'color'; default is to overwrite.
- Tiling and line styling are also implemented
- here. All other gd drawing functions pass through this call,
- allowing for many useful effects.
- Overlay and multiply effects are used when gdImageAlphaBlending
- is passed gdEffectOverlay and gdEffectMultiply */
-
-BGD_DECLARE(void) gdImageSetPixel (gdImagePtr im, int x, int y, int color);
-/* FreeType 2 text output with hook to extra flags */
-
-BGD_DECLARE(int) gdImageGetPixel (gdImagePtr im, int x, int y);
-BGD_DECLARE(int) gdImageGetTrueColorPixel (gdImagePtr im, int x, int y);
-
-BGD_DECLARE(void) gdImageAABlend (gdImagePtr im);
-
-BGD_DECLARE(void) gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color);
-
-/* For backwards compatibility only. Use gdImageSetStyle()
- for much more flexible line drawing. */
-BGD_DECLARE(void) gdImageDashedLine (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color);
-/* Corners specified (not width and height). Upper left first, lower right
- second. */
-BGD_DECLARE(void) gdImageRectangle (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color);
-/* Solid bar. Upper left corner first, lower right corner second. */
-BGD_DECLARE(void) gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2, int y2,
- int color);
-BGD_DECLARE(void) gdImageSetClip(gdImagePtr im, int x1, int y1, int x2, int y2);
-BGD_DECLARE(void) gdImageGetClip(gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P);
-BGD_DECLARE(void) gdImageSetResolution(gdImagePtr im, const unsigned int res_x, const unsigned int res_y);
-BGD_DECLARE(int) gdImageBoundsSafe (gdImagePtr im, int x, int y);
-BGD_DECLARE(void) gdImageChar (gdImagePtr im, gdFontPtr f, int x, int y, int c,
- int color);
-BGD_DECLARE(void) gdImageCharUp (gdImagePtr im, gdFontPtr f, int x, int y, int c,
- int color);
-BGD_DECLARE(void) gdImageString (gdImagePtr im, gdFontPtr f, int x, int y,
- unsigned char *s, int color);
-BGD_DECLARE(void) gdImageStringUp (gdImagePtr im, gdFontPtr f, int x, int y,
- unsigned char *s, int color);
-BGD_DECLARE(void) gdImageString16 (gdImagePtr im, gdFontPtr f, int x, int y,
- unsigned short *s, int color);
-BGD_DECLARE(void) gdImageStringUp16 (gdImagePtr im, gdFontPtr f, int x, int y,
- unsigned short *s, int color);
-
-/* 2.0.16: for thread-safe use of gdImageStringFT and friends,
- call this before allowing any thread to call gdImageStringFT.
- Otherwise it is invoked by the first thread to invoke
- gdImageStringFT, with a very small but real risk of a race condition.
- Return 0 on success, nonzero on failure to initialize freetype. */
-BGD_DECLARE(int) gdFontCacheSetup (void);
-
-/* Optional: clean up after application is done using fonts in
- gdImageStringFT(). */
-BGD_DECLARE(void) gdFontCacheShutdown (void);
-/* 2.0.20: for backwards compatibility. A few applications did start calling
- this function when it first appeared although it was never documented.
- Simply invokes gdFontCacheShutdown. */
-BGD_DECLARE(void) gdFreeFontCache (void);
-
-/* Calls gdImageStringFT. Provided for backwards compatibility only. */
-BGD_DECLARE(char *) gdImageStringTTF (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y,
- const char *string);
-
-/* FreeType 2 text output */
-BGD_DECLARE(char *) gdImageStringFT (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y,
- const char *string);
-
-
-/*
- Group: Types
-
- typedef: gdFTStringExtra
-
- typedef: gdFTStringExtraPtr
-
- A structure and associated pointer type used to pass additional
- parameters to the <gdImageStringFTEx> function. See
- <gdImageStringFTEx> for the structure definition.
-
- Thanks to Wez Furlong.
-*/
-
-/* 2.0.5: provides an extensible way to pass additional parameters.
- Thanks to Wez Furlong, sorry for the delay. */
-typedef struct {
- int flags; /* Logical OR of gdFTEX_ values */
- double linespacing; /* fine tune line spacing for '\n' */
- int charmap; /* TBB: 2.0.12: may be gdFTEX_Unicode,
- gdFTEX_Shift_JIS, gdFTEX_Big5,
- or gdFTEX_Adobe_Custom;
- when not specified, maps are searched
- for in the above order. */
- int hdpi; /* if (flags & gdFTEX_RESOLUTION) */
- int vdpi; /* if (flags & gdFTEX_RESOLUTION) */
- char *xshow; /* if (flags & gdFTEX_XSHOW)
- then, on return, xshow is a malloc'ed
- string containing xshow position data for
- the last string.
-
- NB. The caller is responsible for gdFree'ing
- the xshow string.
- */
- char *fontpath; /* if (flags & gdFTEX_RETURNFONTPATHNAME)
- then, on return, fontpath is a malloc'ed
- string containing the actual font file path name
- used, which can be interesting when fontconfig
- is in use.
-
- The caller is responsible for gdFree'ing the
- fontpath string.
- */
-
-}
-gdFTStringExtra, *gdFTStringExtraPtr;
-
-#define gdFTEX_LINESPACE 1
-#define gdFTEX_CHARMAP 2
-#define gdFTEX_RESOLUTION 4
-#define gdFTEX_DISABLE_KERNING 8
-#define gdFTEX_XSHOW 16
-/* The default unless gdFTUseFontConfig(1); has been called:
- fontlist is a full or partial font file pathname or list thereof
- (i.e. just like before 2.0.29) */
-#define gdFTEX_FONTPATHNAME 32
-/* Necessary to use fontconfig patterns instead of font pathnames
- as the fontlist argument, unless gdFTUseFontConfig(1); has
- been called. New in 2.0.29 */
-#define gdFTEX_FONTCONFIG 64
-/* Sometimes interesting when fontconfig is used: the fontpath
- element of the structure above will contain a gdMalloc'd string
- copy of the actual font file pathname used, if this flag is set
- when the call is made */
-#define gdFTEX_RETURNFONTPATHNAME 128
-
-/* If flag is nonzero, the fontlist parameter to gdImageStringFT
- and gdImageStringFTEx shall be assumed to be a fontconfig font pattern
- if fontconfig was compiled into gd. This function returns zero
- if fontconfig is not available, nonzero otherwise. */
-BGD_DECLARE(int) gdFTUseFontConfig(int flag);
-
-/* These are NOT flags; set one in 'charmap' if you set the
- gdFTEX_CHARMAP bit in 'flags'. */
-#define gdFTEX_Unicode 0
-#define gdFTEX_Shift_JIS 1
-#define gdFTEX_Big5 2
-#define gdFTEX_Adobe_Custom 3
-
-BGD_DECLARE(char *) gdImageStringFTEx (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y,
- const char *string, gdFTStringExtraPtr strex);
-
-
-/*
- Group: Types
-
- typedef: gdPoint
-
- typedef: gdPointPtr
-
- Represents a point in the coordinate space of the image; used by
- <gdImagePolygon>, <gdImageOpenPolygon> and <gdImageFilledPolygon>
- for polygon drawing.
-
- > typedef struct {
- > int x, y;
- > } gdPoint, *gdPointPtr;
-
-*/
-typedef struct {
- int x, y;
-}
-gdPoint, *gdPointPtr;
-
-/**
- * Typedef: gdRect
- *
- * A rectangle in the coordinate space of the image
- *
- * Members:
- * x - The x-coordinate of the upper left corner.
- * y - The y-coordinate of the upper left corner.
- * width - The width.
- * height - The height.
- *
- * Typedef: gdRectPtr
- *
- * A pointer to a <gdRect>
- */
-typedef struct {
- int x, y;
- int width, height;
-}
-gdRect, *gdRectPtr;
-
-
-BGD_DECLARE(void) gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c);
-BGD_DECLARE(void) gdImageOpenPolygon (gdImagePtr im, gdPointPtr p, int n, int c);
-BGD_DECLARE(void) gdImageFilledPolygon (gdImagePtr im, gdPointPtr p, int n, int c);
-
-/* These functions still work with truecolor images,
- for which they never return error. */
-BGD_DECLARE(int) gdImageColorAllocate (gdImagePtr im, int r, int g, int b);
-/* gd 2.0: palette entries with non-opaque transparency are permitted. */
-BGD_DECLARE(int) gdImageColorAllocateAlpha (gdImagePtr im, int r, int g, int b, int a);
-/* Assumes opaque is the preferred alpha channel value */
-BGD_DECLARE(int) gdImageColorClosest (gdImagePtr im, int r, int g, int b);
-/* Closest match taking all four parameters into account.
- A slightly different color with the same transparency
- beats the exact same color with radically different
- transparency */
-BGD_DECLARE(int) gdImageColorClosestAlpha (gdImagePtr im, int r, int g, int b, int a);
-/* An alternate method */
-BGD_DECLARE(int) gdImageColorClosestHWB (gdImagePtr im, int r, int g, int b);
-/* Returns exact, 100% opaque matches only */
-BGD_DECLARE(int) gdImageColorExact (gdImagePtr im, int r, int g, int b);
-/* Returns an exact match only, including alpha */
-BGD_DECLARE(int) gdImageColorExactAlpha (gdImagePtr im, int r, int g, int b, int a);
-/* Opaque only */
-BGD_DECLARE(int) gdImageColorResolve (gdImagePtr im, int r, int g, int b);
-/* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha */
-BGD_DECLARE(int) gdImageColorResolveAlpha (gdImagePtr im, int r, int g, int b, int a);
-
-/* A simpler way to obtain an opaque truecolor value for drawing on a
- truecolor image. Not for use with palette images! */
-
-#define gdTrueColor(r, g, b) (((r) << 16) + \
- ((g) << 8) + \
- (b))
-
-/**
- * Group: Color Composition
- *
- * Macro: gdTrueColorAlpha
- *
- * Compose a truecolor value from its components
- *
- * Parameters:
- * r - The red channel (0-255)
- * g - The green channel (0-255)
- * b - The blue channel (0-255)
- * a - The alpha channel (0-127, where 127 is fully transparent, and 0 is
- * completely opaque).
- *
- * See also:
- * - <gdTrueColorGetAlpha>
- * - <gdTrueColorGetRed>
- * - <gdTrueColorGetGreen>
- * - <gdTrueColorGetBlue>
- * - <gdImageColorExactAlpha>
- */
-#define gdTrueColorAlpha(r, g, b, a) (((a) << 24) + \
- ((r) << 16) + \
- ((g) << 8) + \
- (b))
-
-BGD_DECLARE(void) gdImageColorDeallocate (gdImagePtr im, int color);
-
-/* Converts a truecolor image to a palette-based image,
- using a high-quality two-pass quantization routine
- which attempts to preserve alpha channel information
- as well as R/G/B color information when creating
- a palette. If ditherFlag is set, the image will be
- dithered to approximate colors better, at the expense
- of some obvious "speckling." colorsWanted can be
- anything up to 256. If the original source image
- includes photographic information or anything that
- came out of a JPEG, 256 is strongly recommended.
-
- Better yet, don't use these function -- write real
- truecolor PNGs and JPEGs. The disk space gain of
- conversion to palette is not great (for small images
- it can be negative) and the quality loss is ugly.
-
- DIFFERENCES: gdImageCreatePaletteFromTrueColor creates and
- returns a new image. gdImageTrueColorToPalette modifies
- an existing image, and the truecolor pixels are discarded.
-
- gdImageTrueColorToPalette() returns TRUE on success, FALSE on failure.
-*/
-
-BGD_DECLARE(gdImagePtr) gdImageCreatePaletteFromTrueColor (gdImagePtr im, int ditherFlag,
- int colorsWanted);
-
-BGD_DECLARE(int) gdImageTrueColorToPalette (gdImagePtr im, int ditherFlag,
- int colorsWanted);
-
-BGD_DECLARE(int) gdImagePaletteToTrueColor(gdImagePtr src);
-
-/* An attempt at getting the results of gdImageTrueColorToPalette to
- * look a bit more like the original (im1 is the original and im2 is
- * the palette version */
-
-BGD_DECLARE(int) gdImageColorMatch(gdImagePtr im1, gdImagePtr im2);
-
-/* Selects quantization method used for subsequent gdImageTrueColorToPalette calls.
- See gdPaletteQuantizationMethod enum (e.g. GD_QUANT_NEUQUANT, GD_QUANT_LIQ).
- Speed is from 1 (highest quality) to 10 (fastest).
- Speed 0 selects method-specific default (recommended).
-
- Returns FALSE if the given method is invalid or not available.
-*/
-BGD_DECLARE(int) gdImageTrueColorToPaletteSetMethod (gdImagePtr im, int method, int speed);
-
-/*
- Chooses quality range that subsequent call to gdImageTrueColorToPalette will aim for.
- Min and max quality is in range 1-100 (1 = ugly, 100 = perfect). Max must be higher than min.
- If palette cannot represent image with at least min_quality, then image will remain true-color.
- If palette can represent image with quality better than max_quality, then lower number of colors will be used.
- This function has effect only when GD_QUANT_LIQ method has been selected and the source image is true-color.
-*/
-BGD_DECLARE(void) gdImageTrueColorToPaletteSetQuality (gdImagePtr im, int min_quality, int max_quality);
-
-/* Specifies a color index (if a palette image) or an
- RGB color (if a truecolor image) which should be
- considered 100% transparent. FOR TRUECOLOR IMAGES,
- THIS IS IGNORED IF AN ALPHA CHANNEL IS BEING
- SAVED. Use gdImageSaveAlpha(im, 0); to
- turn off the saving of a full alpha channel in
- a truecolor image. Note that gdImageColorTransparent
- is usually compatible with older browsers that
- do not understand full alpha channels well. TBB */
-BGD_DECLARE(void) gdImageColorTransparent (gdImagePtr im, int color);
-
-BGD_DECLARE(void) gdImagePaletteCopy (gdImagePtr dst, gdImagePtr src);
-
-typedef int (*gdCallbackImageColor)(gdImagePtr im, int src);
-
-BGD_DECLARE(int) gdImageColorReplace(gdImagePtr im, int src, int dst);
-BGD_DECLARE(int) gdImageColorReplaceThreshold(gdImagePtr im, int src, int dst, float threshold);
-BGD_DECLARE(int) gdImageColorReplaceArray(gdImagePtr im, int len, int *src, int *dst);
-BGD_DECLARE(int) gdImageColorReplaceCallback(gdImagePtr im, gdCallbackImageColor callback);
-
-BGD_DECLARE(void) gdImageGif (gdImagePtr im, FILE * out);
-BGD_DECLARE(void) gdImagePng (gdImagePtr im, FILE * out);
-BGD_DECLARE(void) gdImagePngCtx (gdImagePtr im, gdIOCtx * out);
-BGD_DECLARE(void) gdImageGifCtx (gdImagePtr im, gdIOCtx * out);
-BGD_DECLARE(void) gdImageTiff(gdImagePtr im, FILE *outFile);
-BGD_DECLARE(void *) gdImageTiffPtr(gdImagePtr im, int *size);
-BGD_DECLARE(void) gdImageTiffCtx(gdImagePtr image, gdIOCtx *out);
-
-BGD_DECLARE(void *) gdImageBmpPtr(gdImagePtr im, int *size, int compression);
-BGD_DECLARE(void) gdImageBmp(gdImagePtr im, FILE *outFile, int compression);
-BGD_DECLARE(void) gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression);
-
-/* 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all,
- 1 is FASTEST but produces larger files, 9 provides the best
- compression (smallest files) but takes a long time to compress, and
- -1 selects the default compiled into the zlib library. */
-BGD_DECLARE(void) gdImagePngEx (gdImagePtr im, FILE * out, int level);
-BGD_DECLARE(void) gdImagePngCtxEx (gdImagePtr im, gdIOCtx * out, int level);
-
-BGD_DECLARE(void) gdImageWBMP (gdImagePtr image, int fg, FILE * out);
-BGD_DECLARE(void) gdImageWBMPCtx (gdImagePtr image, int fg, gdIOCtx * out);
-
-BGD_DECLARE(int) gdImageFile(gdImagePtr im, const char *filename);
-BGD_DECLARE(int) gdSupportsFileType(const char *filename, int writing);
-
-
-/* Guaranteed to correctly free memory returned by the gdImage*Ptr
- functions */
-BGD_DECLARE(void) gdFree (void *m);
-
-/* Best to free this memory with gdFree(), not free() */
-BGD_DECLARE(void *) gdImageWBMPPtr (gdImagePtr im, int *size, int fg);
-
-/* 100 is highest quality (there is always a little loss with JPEG).
- 0 is lowest. 10 is about the lowest useful setting. */
-BGD_DECLARE(void) gdImageJpeg (gdImagePtr im, FILE * out, int quality);
-BGD_DECLARE(void) gdImageJpegCtx (gdImagePtr im, gdIOCtx * out, int quality);
-
-/* Best to free this memory with gdFree(), not free() */
-BGD_DECLARE(void *) gdImageJpegPtr (gdImagePtr im, int *size, int quality);
-
-BGD_DECLARE(void) gdImageWebpEx (gdImagePtr im, FILE * outFile, int quantization);
-BGD_DECLARE(void) gdImageWebp (gdImagePtr im, FILE * outFile);
-BGD_DECLARE(void *) gdImageWebpPtr (gdImagePtr im, int *size);
-BGD_DECLARE(void *) gdImageWebpPtrEx (gdImagePtr im, int *size, int quantization);
-BGD_DECLARE(void) gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization);
-
-
-/**
- * Group: GifAnim
- *
- * Legal values for Disposal. gdDisposalNone is always used by
- * the built-in optimizer if previm is passed.
- *
- * Constants: gdImageGifAnim
- *
- * gdDisposalUnknown - Not recommended
- * gdDisposalNone - Preserve previous frame
- * gdDisposalRestoreBackground - First allocated color of palette
- * gdDisposalRestorePrevious - Restore to before start of frame
- *
- * See also:
- * - <gdImageGifAnimAdd>
- */
-enum {
- gdDisposalUnknown,
- gdDisposalNone,
- gdDisposalRestoreBackground,
- gdDisposalRestorePrevious
-};
-
-BGD_DECLARE(void) gdImageGifAnimBegin(gdImagePtr im, FILE *outFile, int GlobalCM, int Loops);
-BGD_DECLARE(void) gdImageGifAnimAdd(gdImagePtr im, FILE *outFile, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm);
-BGD_DECLARE(void) gdImageGifAnimEnd(FILE *outFile);
-BGD_DECLARE(void) gdImageGifAnimBeginCtx(gdImagePtr im, gdIOCtx *out, int GlobalCM, int Loops);
-BGD_DECLARE(void) gdImageGifAnimAddCtx(gdImagePtr im, gdIOCtx *out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm);
-BGD_DECLARE(void) gdImageGifAnimEndCtx(gdIOCtx *out);
-BGD_DECLARE(void *) gdImageGifAnimBeginPtr(gdImagePtr im, int *size, int GlobalCM, int Loops);
-BGD_DECLARE(void *) gdImageGifAnimAddPtr(gdImagePtr im, int *size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm);
-BGD_DECLARE(void *) gdImageGifAnimEndPtr(int *size);
-
-
-
-/*
- Group: Types
-
- typedef: gdSink
-
- typedef: gdSinkPtr
-
- *Note:* This interface is *obsolete* and kept only for
- *compatibility*. Use <gdIOCtx> instead.
-
- Represents a "sink" (destination) to which a PNG can be
- written. Programmers who do not wish to write PNGs to a file can
- provide their own alternate output mechanism, using the
- <gdImagePngToSink> function. See the documentation of that
- function for an example of the proper use of this type.
-
- > typedef struct {
- > int (*sink) (void *context, char *buffer, int len);
- > void *context;
- > } gdSink, *gdSinkPtr;
-
- The _sink_ function must return -1 on error, otherwise the number of
- bytes written, which must be equal to len.
-
- _context_ will be passed to your sink function.
-
-*/
-
-typedef struct {
- int (*sink) (void *context, const char *buffer, int len);
- void *context;
-}
-gdSink, *gdSinkPtr;
-
-BGD_DECLARE(void) gdImagePngToSink (gdImagePtr im, gdSinkPtr out);
-
-BGD_DECLARE(void) gdImageGd (gdImagePtr im, FILE * out);
-BGD_DECLARE(void) gdImageGd2 (gdImagePtr im, FILE * out, int cs, int fmt);
-
-/* Best to free this memory with gdFree(), not free() */
-BGD_DECLARE(void *) gdImageGifPtr (gdImagePtr im, int *size);
-
-/* Best to free this memory with gdFree(), not free() */
-BGD_DECLARE(void *) gdImagePngPtr (gdImagePtr im, int *size);
-BGD_DECLARE(void *) gdImagePngPtrEx (gdImagePtr im, int *size, int level);
-
-/* Best to free this memory with gdFree(), not free() */
-BGD_DECLARE(void *) gdImageGdPtr (gdImagePtr im, int *size);
-
-/* Best to free this memory with gdFree(), not free() */
-BGD_DECLARE(void *) gdImageGd2Ptr (gdImagePtr im, int cs, int fmt, int *size);
-
-/* Style is a bitwise OR ( | operator ) of these.
- gdArc and gdChord are mutually exclusive;
- gdChord just connects the starting and ending
- angles with a straight line, while gdArc produces
- a rounded edge. gdPie is a synonym for gdArc.
- gdNoFill indicates that the arc or chord should be
- outlined, not filled. gdEdged, used together with
- gdNoFill, indicates that the beginning and ending
- angles should be connected to the center; this is
- a good way to outline (rather than fill) a
- 'pie slice'. */
-#define gdArc 0
-#define gdPie gdArc
-#define gdChord 1
-#define gdNoFill 2
-#define gdEdged 4
-
-BGD_DECLARE(void) gdImageFilledArc (gdImagePtr im, int cx, int cy, int w, int h, int s,
- int e, int color, int style);
-BGD_DECLARE(void) gdImageArc (gdImagePtr im, int cx, int cy, int w, int h, int s, int e,
- int color);
-BGD_DECLARE(void) gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color);
-BGD_DECLARE(void) gdImageFilledEllipse (gdImagePtr im, int cx, int cy, int w, int h,
- int color);
-BGD_DECLARE(void) gdImageFillToBorder (gdImagePtr im, int x, int y, int border,
- int color);
-BGD_DECLARE(void) gdImageFill (gdImagePtr im, int x, int y, int color);
-BGD_DECLARE(void) gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h);
-BGD_DECLARE(void) gdImageCopyMerge (gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int w, int h, int pct);
-BGD_DECLARE(void) gdImageCopyMergeGray (gdImagePtr dst, gdImagePtr src, int dstX,
- int dstY, int srcX, int srcY, int w, int h,
- int pct);
-
-/* Stretches or shrinks to fit, as needed. Does NOT attempt
- to average the entire set of source pixels that scale down onto the
- destination pixel. */
-BGD_DECLARE(void) gdImageCopyResized (gdImagePtr dst, gdImagePtr src, int dstX, int dstY,
- int srcX, int srcY, int dstW, int dstH, int srcW,
- int srcH);
-
-/* gd 2.0: stretches or shrinks to fit, as needed. When called with a
- truecolor destination image, this function averages the
- entire set of source pixels that scale down onto the
- destination pixel, taking into account what portion of the
- destination pixel each source pixel represents. This is a
- floating point operation, but this is not a performance issue
- on modern hardware, except for some embedded devices. If the
- destination is a palette image, gdImageCopyResized is
- substituted automatically. */
-BGD_DECLARE(void) gdImageCopyResampled (gdImagePtr dst, gdImagePtr src, int dstX,
- int dstY, int srcX, int srcY, int dstW, int dstH,
- int srcW, int srcH);
-
-/* gd 2.0.8: gdImageCopyRotated is added. Source
- is a rectangle, with its upper left corner at
- srcX and srcY. Destination is the *center* of
- the rotated copy. Angle is in degrees, same as
- gdImageArc. Floating point destination center
- coordinates allow accurate rotation of
- objects of odd-numbered width or height. */
-BGD_DECLARE(void) gdImageCopyRotated (gdImagePtr dst,
- gdImagePtr src,
- double dstX, double dstY,
- int srcX, int srcY,
- int srcWidth, int srcHeight, int angle);
-
-BGD_DECLARE(gdImagePtr) gdImageClone (gdImagePtr src);
-
-BGD_DECLARE(void) gdImageSetBrush (gdImagePtr im, gdImagePtr brush);
-BGD_DECLARE(void) gdImageSetTile (gdImagePtr im, gdImagePtr tile);
-BGD_DECLARE(void) gdImageSetAntiAliased (gdImagePtr im, int c);
-BGD_DECLARE(void) gdImageSetAntiAliasedDontBlend (gdImagePtr im, int c, int dont_blend);
-BGD_DECLARE(void) gdImageSetStyle (gdImagePtr im, int *style, int noOfPixels);
-/* Line thickness (defaults to 1). Affects lines, ellipses,
- rectangles, polygons and so forth. */
-BGD_DECLARE(void) gdImageSetThickness (gdImagePtr im, int thickness);
-/* On or off (1 or 0) for all three of these. */
-BGD_DECLARE(void) gdImageInterlace (gdImagePtr im, int interlaceArg);
-BGD_DECLARE(void) gdImageAlphaBlending (gdImagePtr im, int alphaBlendingArg);
-BGD_DECLARE(void) gdImageSaveAlpha (gdImagePtr im, int saveAlphaArg);
-
-BGD_DECLARE(gdImagePtr) gdImageNeuQuant(gdImagePtr im, const int max_color, int sample_factor);
-
-enum gdPixelateMode {
- GD_PIXELATE_UPPERLEFT,
- GD_PIXELATE_AVERAGE
-};
-
-BGD_DECLARE(int) gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode);
-
-typedef struct {
- int sub;
- int plus;
- unsigned int num_colors;
- int *colors;
- unsigned int seed;
-} gdScatter, *gdScatterPtr;
-
-BGD_DECLARE(int) gdImageScatter(gdImagePtr im, int sub, int plus);
-BGD_DECLARE(int) gdImageScatterColor(gdImagePtr im, int sub, int plus, int colors[], unsigned int num_colors);
-BGD_DECLARE(int) gdImageScatterEx(gdImagePtr im, gdScatterPtr s);
-BGD_DECLARE(int) gdImageSmooth(gdImagePtr im, float weight);
-BGD_DECLARE(int) gdImageMeanRemoval(gdImagePtr im);
-BGD_DECLARE(int) gdImageEmboss(gdImagePtr im);
-BGD_DECLARE(int) gdImageGaussianBlur(gdImagePtr im);
-BGD_DECLARE(int) gdImageEdgeDetectQuick(gdImagePtr src);
-BGD_DECLARE(int) gdImageSelectiveBlur( gdImagePtr src);
-BGD_DECLARE(int) gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, float offset);
-BGD_DECLARE(int) gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha);
-BGD_DECLARE(int) gdImageContrast(gdImagePtr src, double contrast);
-BGD_DECLARE(int) gdImageBrightness(gdImagePtr src, int brightness);
-BGD_DECLARE(int) gdImageGrayScale(gdImagePtr src);
-BGD_DECLARE(int) gdImageNegate(gdImagePtr src);
-
-BGD_DECLARE(gdImagePtr) gdImageCopyGaussianBlurred(gdImagePtr src, int radius,
- double sigma);
-
-
-/**
- * Group: Accessor Macros
- */
-
-/**
- * Macro: gdImageTrueColor
- *
- * Whether an image is a truecolor image.
- *
- * Parameters:
- * im - The image.
- *
- * Returns:
- * Non-zero if the image is a truecolor image, zero for palette images.
- */
-#define gdImageTrueColor(im) ((im)->trueColor)
-
-/**
- * Macro: gdImageSX
- *
- * Gets the width (in pixels) of an image.
- *
- * Parameters:
- * im - The image.
- */
-#define gdImageSX(im) ((im)->sx)
-
-/**
- * Macro: gdImageSY
- *
- * Gets the height (in pixels) of an image.
- *
- * Parameters:
- * im - The image.
- */
-#define gdImageSY(im) ((im)->sy)
-
-/**
- * Macro: gdImageColorsTotal
- *
- * Gets the number of colors in the palette.
- *
- * This macro is only valid for palette images.
- *
- * Parameters:
- * im - The image
- */
-#define gdImageColorsTotal(im) ((im)->colorsTotal)
-
-/**
- * Macro: gdImageRed
- *
- * Gets the red component value of a given color.
- *
- * Parameters:
- * im - The image.
- * c - The color.
- */
-#define gdImageRed(im, c) ((im)->trueColor ? gdTrueColorGetRed(c) : \
- (im)->red[(c)])
-
-/**
- * Macro: gdImageGreen
- *
- * Gets the green component value of a given color.
- *
- * Parameters:
- * im - The image.
- * c - The color.
- */
-#define gdImageGreen(im, c) ((im)->trueColor ? gdTrueColorGetGreen(c) : \
- (im)->green[(c)])
-
-/**
- * Macro: gdImageBlue
- *
- * Gets the blue component value of a given color.
- *
- * Parameters:
- * im - The image.
- * c - The color.
- */
-#define gdImageBlue(im, c) ((im)->trueColor ? gdTrueColorGetBlue(c) : \
- (im)->blue[(c)])
-
-/**
- * Macro: gdImageAlpha
- *
- * Gets the alpha component value of a given color.
- *
- * Parameters:
- * im - The image.
- * c - The color.
- */
-#define gdImageAlpha(im, c) ((im)->trueColor ? gdTrueColorGetAlpha(c) : \
- (im)->alpha[(c)])
-
-/**
- * Macro: gdImageGetTransparent
- *
- * Gets the transparent color of the image.
- *
- * Parameters:
- * im - The image.
- *
- * See also:
- * - <gdImageColorTransparent>
- */
-#define gdImageGetTransparent(im) ((im)->transparent)
-
-/**
- * Macro: gdImageGetInterlaced
- *
- * Whether an image is interlaced.
- *
- * Parameters:
- * im - The image.
- *
- * Returns:
- * Non-zero for interlaced images, zero otherwise.
- *
- * See also:
- * - <gdImageInterlace>
- */
-#define gdImageGetInterlaced(im) ((im)->interlace)
-
-/**
- * Macro: gdImagePalettePixel
- *
- * Gets the color of a pixel.
- *
- * Calling this macro is only valid for palette images.
- * No bounds checking is done for the coordinates.
- *
- * Parameters:
- * im - The image.
- * x - The x-coordinate.
- * y - The y-coordinate.
- *
- * See also:
- * - <gdImageTrueColorPixel>
- * - <gdImageGetPixel>
- */
-#define gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)]
-
-/**
- * Macro: gdImageTrueColorPixel
- *
- * Gets the color of a pixel.
- *
- * Calling this macro is only valid for truecolor images.
- * No bounds checking is done for the coordinates.
- *
- * Parameters:
- * im - The image.
- * x - The x-coordinate.
- * y - The y-coordinate.
- *
- * See also:
- * - <gdImagePalettePixel>
- * - <gdImageGetTrueColorPixel>
- */
-#define gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)]
-
-/**
- * Macro: gdImageResolutionX
- *
- * Gets the horizontal resolution in DPI.
- *
- * Parameters:
- * im - The image.
- *
- * See also:
- * - <gdImageResolutionY>
- * - <gdImageSetResolution>
- */
-#define gdImageResolutionX(im) (im)->res_x
-
-/**
- * Macro: gdImageResolutionY
- *
- * Gets the vertical resolution in DPI.
- *
- * Parameters:
- * im - The image.
- *
- * See also:
- * - <gdImageResolutionX>
- * - <gdImageSetResolution>
- */
-#define gdImageResolutionY(im) (im)->res_y
-
-/* I/O Support routines. */
-
-BGD_DECLARE(gdIOCtx *) gdNewFileCtx (FILE *);
-/* If data is null, size is ignored and an initial data buffer is
- allocated automatically. NOTE: this function assumes gd has the right
- to free or reallocate "data" at will! Also note that gd will free
- "data" when the IO context is freed. If data is not null, it must point
- to memory allocated with gdMalloc, or by a call to gdImage[something]Ptr.
- If not, see gdNewDynamicCtxEx for an alternative. */
-BGD_DECLARE(gdIOCtx *) gdNewDynamicCtx (int size, void *data);
-/* 2.0.21: if freeFlag is nonzero, gd will free and/or reallocate "data" as
- needed as described above. If freeFlag is zero, gd will never free
- or reallocate "data", which means that the context should only be used
- for *reading* an image from a memory buffer, or writing an image to a
- memory buffer which is already large enough. If the memory buffer is
- not large enough and an image write is attempted, the write operation
- will fail. Those wishing to write an image to a buffer in memory have
- a much simpler alternative in the gdImage[something]Ptr functions. */
-BGD_DECLARE(gdIOCtx *) gdNewDynamicCtxEx (int size, void *data, int freeFlag);
-BGD_DECLARE(gdIOCtx *) gdNewSSCtx (gdSourcePtr in, gdSinkPtr out);
-BGD_DECLARE(void *) gdDPExtractData (struct gdIOCtx *ctx, int *size);
-
-#define GD2_CHUNKSIZE 128
-#define GD2_CHUNKSIZE_MIN 64
-#define GD2_CHUNKSIZE_MAX 4096
-
-#define GD2_VERS 2
-#define GD2_ID "gd2"
-
-#define GD2_FMT_RAW 1
-#define GD2_FMT_COMPRESSED 2
-
-/* Image comparison definitions */
-BGD_DECLARE(int) gdImageCompare (gdImagePtr im1, gdImagePtr im2);
-
-BGD_DECLARE(void) gdImageFlipHorizontal(gdImagePtr im);
-BGD_DECLARE(void) gdImageFlipVertical(gdImagePtr im);
-BGD_DECLARE(void) gdImageFlipBoth(gdImagePtr im);
-
-#define GD_FLIP_HORINZONTAL 1 /* typo, kept for BC */
-#define GD_FLIP_HORIZONTAL 1
-#define GD_FLIP_VERTICAL 2
-#define GD_FLIP_BOTH 3
-
-/**
- * Group: Crop
- *
- * Constants: gdCropMode
- * GD_CROP_DEFAULT - Same as GD_CROP_TRANSPARENT
- * GD_CROP_TRANSPARENT - Crop using the transparent color
- * GD_CROP_BLACK - Crop black borders
- * GD_CROP_WHITE - Crop white borders
- * GD_CROP_SIDES - Crop using colors of the 4 corners
- *
- * See also:
- * - <gdImageCropAuto>
- **/
-enum gdCropMode {
- GD_CROP_DEFAULT = 0,
- GD_CROP_TRANSPARENT,
- GD_CROP_BLACK,
- GD_CROP_WHITE,
- GD_CROP_SIDES,
- GD_CROP_THRESHOLD
-};
-
-BGD_DECLARE(gdImagePtr) gdImageCrop(gdImagePtr src, const gdRect *crop);
-BGD_DECLARE(gdImagePtr) gdImageCropAuto(gdImagePtr im, const unsigned int mode);
-BGD_DECLARE(gdImagePtr) gdImageCropThreshold(gdImagePtr im, const unsigned int color, const float threshold);
-
-BGD_DECLARE(int) gdImageSetInterpolationMethod(gdImagePtr im, gdInterpolationMethod id);
-BGD_DECLARE(gdInterpolationMethod) gdImageGetInterpolationMethod(gdImagePtr im);
-
-BGD_DECLARE(gdImagePtr) gdImageScale(const gdImagePtr src, const unsigned int new_width, const unsigned int new_height);
-
-BGD_DECLARE(gdImagePtr) gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor);
-
-typedef enum {
- GD_AFFINE_TRANSLATE = 0,
- GD_AFFINE_SCALE,
- GD_AFFINE_ROTATE,
- GD_AFFINE_SHEAR_HORIZONTAL,
- GD_AFFINE_SHEAR_VERTICAL
-} gdAffineStandardMatrix;
-
-BGD_DECLARE(int) gdAffineApplyToPointF (gdPointFPtr dst, const gdPointFPtr src, const double affine[6]);
-BGD_DECLARE(int) gdAffineInvert (double dst[6], const double src[6]);
-BGD_DECLARE(int) gdAffineFlip (double dst_affine[6], const double src_affine[6], const int flip_h, const int flip_v);
-BGD_DECLARE(int) gdAffineConcat (double dst[6], const double m1[6], const double m2[6]);
-
-BGD_DECLARE(int) gdAffineIdentity (double dst[6]);
-BGD_DECLARE(int) gdAffineScale (double dst[6], const double scale_x, const double scale_y);
-BGD_DECLARE(int) gdAffineRotate (double dst[6], const double angle);
-BGD_DECLARE(int) gdAffineShearHorizontal (double dst[6], const double angle);
-BGD_DECLARE(int) gdAffineShearVertical(double dst[6], const double angle);
-BGD_DECLARE(int) gdAffineTranslate (double dst[6], const double offset_x, const double offset_y);
-BGD_DECLARE(double) gdAffineExpansion (const double src[6]);
-BGD_DECLARE(int) gdAffineRectilinear (const double src[6]);
-BGD_DECLARE(int) gdAffineEqual (const double matrix1[6], const double matrix2[6]);
-BGD_DECLARE(int) gdTransformAffineGetImage(gdImagePtr *dst, const gdImagePtr src, gdRectPtr src_area, const double affine[6]);
-BGD_DECLARE(int) gdTransformAffineCopy(gdImagePtr dst, int dst_x, int dst_y, const gdImagePtr src, gdRectPtr src_region, const double affine[6]);
-/*
-gdTransformAffineCopy(gdImagePtr dst, int x0, int y0, int x1, int y1,
- const gdImagePtr src, int src_width, int src_height,
- const double affine[6]);
-*/
-BGD_DECLARE(int) gdTransformAffineBoundingBox(gdRectPtr src, const double affine[6], gdRectPtr bbox);
-
-/**
- * Group: Image Comparison
- *
- * Constants:
- * GD_CMP_IMAGE - Actual image IS different
- * GD_CMP_NUM_COLORS - Number of colors in pallette differ
- * GD_CMP_COLOR - Image colors differ
- * GD_CMP_SIZE_X - Image width differs
- * GD_CMP_SIZE_Y - Image heights differ
- * GD_CMP_TRANSPARENT - Transparent color differs
- * GD_CMP_BACKGROUND - Background color differs
- * GD_CMP_INTERLACE - Interlaced setting differs
- * GD_CMP_TRUECOLOR - Truecolor vs palette differs
- *
- * See also:
- * - <gdImageCompare>
- */
-#define GD_CMP_IMAGE 1
-#define GD_CMP_NUM_COLORS 2
-#define GD_CMP_COLOR 4
-#define GD_CMP_SIZE_X 8
-#define GD_CMP_SIZE_Y 16
-#define GD_CMP_TRANSPARENT 32
-#define GD_CMP_BACKGROUND 64
-#define GD_CMP_INTERLACE 128
-#define GD_CMP_TRUECOLOR 256
-
-/* resolution affects ttf font rendering, particularly hinting */
-#define GD_RESOLUTION 96 /* pixels per inch */
-
-
-/* Version information functions */
-BGD_DECLARE(int) gdMajorVersion(void);
-BGD_DECLARE(int) gdMinorVersion(void);
-BGD_DECLARE(int) gdReleaseVersion(void);
-BGD_DECLARE(const char *) gdExtraVersion(void);
-BGD_DECLARE(const char *) gdVersionString(void);
-
-/* newfangled special effects */
-#include "gdfx.h"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GD_H */
diff --git a/Build/source/libs/gd/libgd-src/src/gd2copypal.c b/Build/source/libs/gd/libgd-src/src/gd2copypal.c
deleted file mode 100644
index 5a4675585d3..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd2copypal.c
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- gdImagePtr pal;
- FILE *in, *out;
- if (argc != 3) {
- fprintf(stderr, "Usage: gd2copypal palettefile.gd2 filename.gd2\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Palette file does not exist!\n");
- exit (1);
- }
- pal = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!pal) {
- fprintf(stderr, "Palette is not in GD2 format!\n");
- exit (1);
- }
-
- in = fopen (argv[2], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!im) {
- fprintf(stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
-
- gdImagePaletteCopy (im, pal);
-
- out = fopen (argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImageGd2 (im, out, 128, 2);
- fclose (out);
- gdImageDestroy (pal);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd2time.c b/Build/source/libs/gd/libgd-src/src/gd2time.c
deleted file mode 100644
index 3c9e8af2c7b..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd2time.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h> /* for atoi */
-#include <time.h> /* For time */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in;
- int x, y, w, h;
- int c;
- int i;
- int t0;
-
- if (argc != 7) {
- fprintf(stderr, "Usage: gd2time filename.gd count x y w h\n");
- exit (1);
- }
-
- c = atoi (argv[2]);
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
-
- printf ("Extracting %d times from (%d, %d), size is %dx%d\n", c, x, y, w,
- h);
-
- t0 = time (0);
- for (i = 0; i < c; i++) {
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
-
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- fclose (in);
-
- if (!im) {
- fprintf(stderr, "Error reading source file!\n");
- exit (1);
- }
- gdImageDestroy (im);
- };
- t0 = time (0) - t0;
- printf ("%d seconds to extract (& destroy) %d times\n", t0, c);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd2togif.c b/Build/source/libs/gd/libgd-src/src/gd2togif.c
deleted file mode 100644
index 5b15994d01c..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd2togif.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "gd.h"
-
-/* A short program which converts a .gif file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int main(int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3) {
- fprintf(stderr, "Usage: gd2togif filename.gd2 filename.gif\n");
- exit(1);
- }
- in = fopen(argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit(1);
- }
- im = gdImageCreateFromGd2(in);
- fclose(in);
- if (!im) {
- fprintf(stderr, "Input is not in GD2 format!\n");
- exit(1);
- }
- out = fopen(argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy(im);
- exit(1);
- }
- gdImageGif(im, out);
- fclose(out);
- gdImageDestroy(im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd2topng.c b/Build/source/libs/gd/libgd-src/src/gd2topng.c
deleted file mode 100644
index 5e8ca8740db..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd2topng.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd2 file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd2 format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int x=0, y=0, w=0, h=0;
- if ((argc != 3) && (argc != 7)) {
- fprintf (stderr,
- "Usage: gd2topng filename.gd2 filename.png [srcx srcy width height]\n");
- fprintf (stderr,
- "If the coordinates are absent,t he entire image is converted.\n");
- exit (1);
- }
- if (argc == 7) {
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
- if (argc == 7) {
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- } else {
- im = gdImageCreateFromGd2 (in);
- }
- fclose (in);
- if (!im) {
- fprintf(stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_bmp.c b/Build/source/libs/gd/libgd-src/src/gd_bmp.c
deleted file mode 100644
index e186ac951be..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_bmp.c
+++ /dev/null
@@ -1,1165 +0,0 @@
-/*
- gd_bmp.c
-
- Bitmap format support for libgd
-
- * Written 2007, Scott MacVicar
- ---------------------------------------------------------------------------
-
- Todo:
-
- Bitfield encoding
-
- ----------------------------------------------------------------------------
- */
-
-/**
- * File: BMP IO
- *
- * Read and write BMP images.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <limits.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-#include "bmp.h"
-
-static int compress_row(unsigned char *uncompressed_row, int length);
-static int build_rle_packet(unsigned char *row, int packet_type, int length, unsigned char *data);
-
-static int bmp_read_header(gdIOCtxPtr infile, bmp_hdr_t *hdr);
-static int bmp_read_info(gdIOCtxPtr infile, bmp_info_t *info);
-static int bmp_read_windows_v3_info(gdIOCtxPtr infile, bmp_info_t *info);
-static int bmp_read_os2_v1_info(gdIOCtxPtr infile, bmp_info_t *info);
-static int bmp_read_os2_v2_info(gdIOCtxPtr infile, bmp_info_t *info);
-
-static int bmp_read_direct(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header);
-static int bmp_read_1bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header);
-static int bmp_read_4bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header);
-static int bmp_read_8bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header);
-static int bmp_read_rle(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info);
-
-static int _gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression);
-
-#define BMP_DEBUG(s)
-
-static int gdBMPPutWord(gdIOCtx *out, int w)
-{
- /* Byte order is little-endian */
- gdPutC(w & 0xFF, out);
- gdPutC((w >> 8) & 0xFF, out);
- return 0;
-}
-
-static int gdBMPPutInt(gdIOCtx *out, int w)
-{
- /* Byte order is little-endian */
- gdPutC(w & 0xFF, out);
- gdPutC((w >> 8) & 0xFF, out);
- gdPutC((w >> 16) & 0xFF, out);
- gdPutC((w >> 24) & 0xFF, out);
- return 0;
-}
-
-/*
- Function: gdImageBmpPtr
-
- Outputs the given image as BMP data, but using a <gdIOCtx> instead
- of a file. See <gdImageBmp>.
-
- Parameters:
- im - the image to save.
- size - Output: size in bytes of the result.
- compression - whether to apply RLE or not.
-
- Returns:
-
- A pointer to memory containing the image data or NULL on error.
-*/
-BGD_DECLARE(void *) gdImageBmpPtr(gdImagePtr im, int *size, int compression)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImageBmpCtx(im, out, compression))
- rv = gdDPExtractData(out, size);
- else
- rv = NULL;
- out->gd_free(out);
- return rv;
-}
-
-/*
- Function: gdImageBmp
-
- <gdImageBmp> outputs the specified image to the specified file in
- BMP format. The file must be open for writing. Under MSDOS and all
- versions of Windows, it is important to use "wb" as opposed to
- simply "w" as the mode when opening the file, and under Unix there
- is no penalty for doing so. <gdImageBmp> does not close the file;
- your code must do so.
-
- In addition, <gdImageBmp> allows to specify whether RLE compression
- should be applied.
-
- Variants:
-
- <gdImageBmpCtx> write via a <gdIOCtx> instead of a file handle.
-
- <gdImageBmpPtr> store the image file to memory.
-
- Parameters:
-
- im - the image to save.
- outFile - the output FILE* object.
- compression - whether to apply RLE or not.
-
- Returns:
- nothing
-*/
-BGD_DECLARE(void) gdImageBmp(gdImagePtr im, FILE *outFile, int compression)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageBmpCtx(im, out, compression);
- out->gd_free(out);
-}
-
-/*
- Function: gdImageBmpCtx
-
- Outputs the given image as BMP data, but using a <gdIOCtx> instead
- of a file. See <gdImageBmp>.
-
- Parameters:
- im - the image to save.
- out - the <gdIOCtx> to write to.
- compression - whether to apply RLE or not.
-*/
-BGD_DECLARE(void) gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression)
-{
- _gdImageBmpCtx(im, out, compression);
-}
-
-static int _gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression)
-{
- int bitmap_size = 0, info_size, total_size, padding;
- int i, row, xpos, pixel;
- int error = 0;
- unsigned char *uncompressed_row = NULL, *uncompressed_row_start = NULL;
- FILE *tmpfile_for_compression = NULL;
- gdIOCtxPtr out_original = NULL;
- int ret = 1;
-
- /* No compression if its true colour or we don't support seek */
- if (im->trueColor) {
- compression = 0;
- }
-
- if (compression && !out->seek) {
- /* Try to create a temp file where we can seek */
- if ((tmpfile_for_compression = tmpfile()) == NULL) {
- compression = 0;
- } else {
- out_original = out;
- if ((out = (gdIOCtxPtr)gdNewFileCtx(tmpfile_for_compression)) == NULL) {
- out = out_original;
- out_original = NULL;
- compression = 0;
- }
- }
- }
-
- bitmap_size = ((im->sx * (im->trueColor ? 24 : 8)) / 8) * im->sy;
-
- /* 40 byte Windows v3 header */
- info_size = BMP_WINDOWS_V3;
-
- /* data for the palette */
- if (!im->trueColor) {
- info_size += im->colorsTotal * 4;
- if (compression) {
- bitmap_size = 0;
- }
- }
-
- /* bitmap header + info header + data */
- total_size = 14 + info_size + bitmap_size;
-
- /* write bmp header info */
- gdPutBuf("BM", 2, out);
- gdBMPPutInt(out, total_size);
- gdBMPPutWord(out, 0);
- gdBMPPutWord(out, 0);
- gdBMPPutInt(out, 14 + info_size);
-
- /* write Windows v3 headers */
- gdBMPPutInt(out, BMP_WINDOWS_V3); /* header size */
- gdBMPPutInt(out, im->sx); /* width */
- gdBMPPutInt(out, im->sy); /* height */
- gdBMPPutWord(out, 1); /* colour planes */
- gdBMPPutWord(out, (im->trueColor ? 24 : 8)); /* bit count */
- gdBMPPutInt(out, (compression ? BMP_BI_RLE8 : BMP_BI_RGB)); /* compression */
- gdBMPPutInt(out, bitmap_size); /* image size */
- gdBMPPutInt(out, 0); /* H resolution */
- gdBMPPutInt(out, 0); /* V ressolution */
- gdBMPPutInt(out, im->colorsTotal); /* colours used */
- gdBMPPutInt(out, 0); /* important colours */
-
- /* The line must be divisible by 4, else its padded with NULLs */
- padding = ((int)(im->trueColor ? 3 : 1) * im->sx) % 4;
- if (padding) {
- padding = 4 - padding;
- }
-
- /* 8-bit colours */
- if (!im->trueColor) {
- for(i = 0; i< im->colorsTotal; ++i) {
- gdPutC(gdImageBlue(im, i), out);
- gdPutC(gdImageGreen(im, i), out);
- gdPutC(gdImageRed(im, i), out);
- gdPutC(0, out);
- }
-
- if (compression) {
- /* Can potentially change this to X + ((X / 128) * 3) */
- uncompressed_row = uncompressed_row_start = (unsigned char *) gdCalloc(gdImageSX(im) * 2, sizeof(char));
- if (!uncompressed_row) {
- /* malloc failed */
- goto cleanup;
- }
- }
-
- for (row = (im->sy - 1); row >= 0; row--) {
- if (compression) {
- memset (uncompressed_row, 0, gdImageSX(im));
- }
-
- for (xpos = 0; xpos < im->sx; xpos++) {
- if (compression) {
- *uncompressed_row++ = (unsigned char)gdImageGetPixel(im, xpos, row);
- } else {
- gdPutC(gdImageGetPixel(im, xpos, row), out);
- }
- }
-
- if (!compression) {
- /* Add padding to make sure we have n mod 4 == 0 bytes per row */
- for (xpos = padding; xpos > 0; --xpos) {
- gdPutC('\0', out);
- }
- } else {
- int compressed_size = 0;
- uncompressed_row = uncompressed_row_start;
- if ((compressed_size = compress_row(uncompressed_row, gdImageSX(im))) < 0) {
- error = 1;
- break;
- }
- bitmap_size += compressed_size;
-
-
- gdPutBuf(uncompressed_row, compressed_size, out);
- gdPutC(BMP_RLE_COMMAND, out);
- gdPutC(BMP_RLE_ENDOFLINE, out);
- bitmap_size += 2;
- }
- }
-
- if (compression && uncompressed_row) {
- gdFree(uncompressed_row);
- if (error != 0) {
- goto cleanup;
- }
- /* Update filesize based on new values and set compression flag */
- gdPutC(BMP_RLE_COMMAND, out);
- gdPutC(BMP_RLE_ENDOFBITMAP, out);
- bitmap_size += 2;
-
- /* Write new total bitmap size */
- gdSeek(out, 2);
- gdBMPPutInt(out, total_size + bitmap_size);
-
- /* Total length of image data */
- gdSeek(out, 34);
- gdBMPPutInt(out, bitmap_size);
- }
-
- } else {
- for (row = (im->sy - 1); row >= 0; row--) {
- for (xpos = 0; xpos < im->sx; xpos++) {
- pixel = gdImageGetPixel(im, xpos, row);
-
- gdPutC(gdTrueColorGetBlue(pixel), out);
- gdPutC(gdTrueColorGetGreen(pixel), out);
- gdPutC(gdTrueColorGetRed(pixel), out);
- }
-
- /* Add padding to make sure we have n mod 4 == 0 bytes per row */
- for (xpos = padding; xpos > 0; --xpos) {
- gdPutC('\0', out);
- }
- }
- }
-
-
- /* If we needed a tmpfile for compression copy it over to out_original */
- if (tmpfile_for_compression) {
- unsigned char* copy_buffer = NULL;
- int buffer_size = 0;
-
- gdSeek(out, 0);
- copy_buffer = (unsigned char *) gdMalloc(1024 * sizeof(unsigned char));
- if (copy_buffer == NULL) {
- goto cleanup;
- }
-
- while ((buffer_size = gdGetBuf(copy_buffer, 1024, out)) != EOF) {
- if (buffer_size == 0) {
- break;
- }
- gdPutBuf(copy_buffer , buffer_size, out_original);
- }
- gdFree(copy_buffer);
-
- /* Replace the temp with the original which now has data */
- out->gd_free(out);
- out = out_original;
- out_original = NULL;
- }
-
- ret = 0;
-cleanup:
- if (tmpfile_for_compression) {
-#ifdef _WIN32
- _rmtmp();
-#else
- fclose(tmpfile_for_compression);
-#endif
- tmpfile_for_compression = NULL;
- }
-
- if (out_original) {
- out_original->gd_free(out_original);
- }
- return ret;
-}
-
-static int compress_row(unsigned char *row, int length)
-{
- int rle_type = 0;
- int compressed_length = 0;
- int pixel = 0, compressed_run = 0, rle_compression = 0;
- unsigned char *uncompressed_row = NULL, *uncompressed_rowp = NULL, *uncompressed_start = NULL;
-
- uncompressed_row = (unsigned char *) gdMalloc(length);
- if (!uncompressed_row) {
- return -1;
- }
-
- memcpy(uncompressed_row, row, length);
- uncompressed_start = uncompressed_rowp = uncompressed_row;
-
- for (pixel = 0; pixel < length; pixel++) {
- if (compressed_run == 0) {
- uncompressed_row = uncompressed_rowp;
- compressed_run++;
- uncompressed_rowp++;
- rle_type = BMP_RLE_TYPE_RAW;
- continue;
- }
-
- if (compressed_run == 1) {
- /* Compare next byte */
- if (memcmp(uncompressed_rowp, uncompressed_rowp - 1, 1) == 0) {
- rle_type = BMP_RLE_TYPE_RLE;
- }
- }
-
- if (rle_type == BMP_RLE_TYPE_RLE) {
- if (compressed_run >= 128 || memcmp(uncompressed_rowp, uncompressed_rowp - 1, 1) != 0) {
- /* more than what we can store in a single run or run is over due to non match, force write */
- rle_compression = build_rle_packet(row, rle_type, compressed_run, uncompressed_row);
- row += rle_compression;
- compressed_length += rle_compression;
- compressed_run = 0;
- pixel--;
- } else {
- compressed_run++;
- uncompressed_rowp++;
- }
- } else {
- if (compressed_run >= 128 || memcmp(uncompressed_rowp, uncompressed_rowp - 1, 1) == 0) {
- /* more than what we can store in a single run or run is over due to match, force write */
- rle_compression = build_rle_packet(row, rle_type, compressed_run, uncompressed_row);
- row += rle_compression;
- compressed_length += rle_compression;
- compressed_run = 0;
- pixel--;
- } else {
- /* add this pixel to the row */
- compressed_run++;
- uncompressed_rowp++;
- }
-
- }
- }
-
- if (compressed_run) {
- compressed_length += build_rle_packet(row, rle_type, compressed_run, uncompressed_row);
- }
-
- gdFree(uncompressed_start);
-
- return compressed_length;
-}
-
-static int build_rle_packet(unsigned char *row, int packet_type, int length, unsigned char *data)
-{
- int compressed_size = 0;
- if (length < 1 || length > 128) {
- return 0;
- }
-
- /* Bitmap specific cases is that we can't have uncompressed rows of length 1 or 2 */
- if (packet_type == BMP_RLE_TYPE_RAW && length < 3) {
- int i = 0;
- for (i = 0; i < length; i++) {
- compressed_size += 2;
- memset(row, 1, 1);
- row++;
-
- memcpy(row, data++, 1);
- row++;
- }
- } else if (packet_type == BMP_RLE_TYPE_RLE) {
- compressed_size = 2;
- memset(row, length, 1);
- row++;
-
- memcpy(row, data, 1);
- row++;
- } else {
- compressed_size = 2 + length;
- memset(row, BMP_RLE_COMMAND, 1);
- row++;
-
- memset(row, length, 1);
- row++;
-
- memcpy(row, data, length);
- row += length;
-
- /* Must be an even number for an uncompressed run */
- if (length % 2) {
- memset(row, 0, 1);
- row++;
- compressed_size++;
- }
- }
- return compressed_size;
-}
-
-/*
- Function: gdImageCreateFromBmp
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromBmp(FILE * inFile)
-{
- gdImagePtr im = 0;
- gdIOCtx *in = gdNewFileCtx(inFile);
- if (in == NULL) return NULL;
- im = gdImageCreateFromBmpCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromBmpPtr
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromBmpPtr(int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- if (in == NULL) return NULL;
- im = gdImageCreateFromBmpCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromBmpCtx
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromBmpCtx(gdIOCtxPtr infile)
-{
- bmp_hdr_t *hdr;
- bmp_info_t *info;
- gdImagePtr im = NULL;
- int error = 0;
-
- if (!(hdr= (bmp_hdr_t *)gdCalloc(1, sizeof(bmp_hdr_t)))) {
- return NULL;
- }
-
- if (bmp_read_header(infile, hdr)) {
- gdFree(hdr);
- return NULL;
- }
-
- if (hdr->magic != 0x4d42) {
- gdFree(hdr);
- return NULL;
- }
-
- if (!(info = (bmp_info_t *)gdCalloc(1, sizeof(bmp_info_t)))) {
- gdFree(hdr);
- return NULL;
- }
-
- if (bmp_read_info(infile, info)) {
- gdFree(hdr);
- gdFree(info);
- return NULL;
- }
-
- BMP_DEBUG(printf("Numcolours: %d\n", info->numcolors));
- BMP_DEBUG(printf("Width: %d\n", info->width));
- BMP_DEBUG(printf("Height: %d\n", info->height));
- BMP_DEBUG(printf("Planes: %d\n", info->numplanes));
- BMP_DEBUG(printf("Depth: %d\n", info->depth));
- BMP_DEBUG(printf("Offset: %d\n", hdr->off));
-
- if (info->depth >= 16) {
- im = gdImageCreateTrueColor(info->width, info->height);
- } else {
- im = gdImageCreate(info->width, info->height);
- }
-
- if (!im) {
- gdFree(hdr);
- gdFree(info);
- return NULL;
- }
-
- switch (info->depth) {
- case 1:
- BMP_DEBUG(printf("1-bit image\n"));
- error = bmp_read_1bit(im, infile, info, hdr);
- break;
- case 4:
- BMP_DEBUG(printf("4-bit image\n"));
- error = bmp_read_4bit(im, infile, info, hdr);
- break;
- case 8:
- BMP_DEBUG(printf("8-bit image\n"));
- error = bmp_read_8bit(im, infile, info, hdr);
- break;
- case 16:
- case 24:
- case 32:
- BMP_DEBUG(printf("Direct BMP image\n"));
- error = bmp_read_direct(im, infile, info, hdr);
- break;
- default:
- BMP_DEBUG(printf("Unknown bit count\n"));
- error = 1;
- }
-
- gdFree(hdr);
- gdFree(info);
-
- if (error) {
- gdImageDestroy(im);
- return NULL;
- }
-
- return im;
-}
-
-static int bmp_read_header(gdIOCtx *infile, bmp_hdr_t *hdr)
-{
- if(
- !gdGetWordLSB(&hdr->magic, infile) ||
- !gdGetIntLSB(&hdr->size, infile) ||
- !gdGetWordLSB(&hdr->reserved1, infile) ||
- !gdGetWordLSB(&hdr->reserved2 , infile) ||
- !gdGetIntLSB(&hdr->off , infile)
- ) {
- return 1;
- }
- return 0;
-}
-
-static int bmp_read_info(gdIOCtx *infile, bmp_info_t *info)
-{
- /* read BMP length so we can work out the version */
- if (!gdGetIntLSB(&info->len, infile)) {
- return 1;
- }
-
- switch (info->len) {
- /* For now treat Windows v4 + v5 as v3 */
- case BMP_WINDOWS_V3:
- case BMP_WINDOWS_V4:
- case BMP_WINDOWS_V5:
- BMP_DEBUG(printf("Reading Windows Header\n"));
- if (bmp_read_windows_v3_info(infile, info)) {
- return 1;
- }
- break;
- case BMP_OS2_V1:
- if (bmp_read_os2_v1_info(infile, info)) {
- return 1;
- }
- break;
- case BMP_OS2_V2:
- if (bmp_read_os2_v2_info(infile, info)) {
- return 1;
- }
- break;
- default:
- BMP_DEBUG(printf("Unhandled bitmap\n"));
- return 1;
- }
- return 0;
-}
-
-static int bmp_read_windows_v3_info(gdIOCtxPtr infile, bmp_info_t *info)
-{
- if (
- !gdGetIntLSB(&info->width, infile) ||
- !gdGetIntLSB(&info->height, infile) ||
- !gdGetWordLSB(&info->numplanes, infile) ||
- !gdGetWordLSB(&info->depth, infile) ||
- !gdGetIntLSB(&info->enctype, infile) ||
- !gdGetIntLSB(&info->size, infile) ||
- !gdGetIntLSB(&info->hres, infile) ||
- !gdGetIntLSB(&info->vres, infile) ||
- !gdGetIntLSB(&info->numcolors, infile) ||
- !gdGetIntLSB(&info->mincolors, infile)
- ) {
- return 1;
- }
-
- /* Unlikely, but possible -- largest signed value won't fit in unsigned. */
- if (info->height == 0 || info->height == INT_MIN)
- return 1;
- if (info->height < 0) {
- info->topdown = 1;
- info->height = -info->height;
- } else {
- info->topdown = 0;
- }
-
- info->type = BMP_PALETTE_4;
-
- /* Height was checked above. */
- if (info->width <= 0 || info->numplanes <= 0 || info->depth <= 0 ||
- info->numcolors < 0 || info->mincolors < 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int bmp_read_os2_v1_info(gdIOCtxPtr infile, bmp_info_t *info)
-{
- if (
- !gdGetWordLSB((signed short int *)&info->width, infile) ||
- !gdGetWordLSB((signed short int *)&info->height, infile) ||
- !gdGetWordLSB(&info->numplanes, infile) ||
- !gdGetWordLSB(&info->depth, infile)
- ) {
- return 1;
- }
-
- /* OS2 v1 doesn't support topdown */
- info->topdown = 0;
-
- /* The spec says the depth can only be a few value values. */
- if (info->depth != 1 && info->depth != 4 && info->depth != 8 &&
- info->depth != 16 && info->depth != 24) {
- return 1;
- }
-
- info->numcolors = 1 << info->depth;
- info->type = BMP_PALETTE_3;
-
- if (info->width <= 0 || info->height <= 0 || info->numplanes <= 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int bmp_read_os2_v2_info(gdIOCtxPtr infile, bmp_info_t *info)
-{
- char useless_bytes[24];
- if (
- !gdGetIntLSB(&info->width, infile) ||
- !gdGetIntLSB(&info->height, infile) ||
- !gdGetWordLSB(&info->numplanes, infile) ||
- !gdGetWordLSB(&info->depth, infile) ||
- !gdGetIntLSB(&info->enctype, infile) ||
- !gdGetIntLSB(&info->size, infile) ||
- !gdGetIntLSB(&info->hres, infile) ||
- !gdGetIntLSB(&info->vres, infile) ||
- !gdGetIntLSB(&info->numcolors, infile) ||
- !gdGetIntLSB(&info->mincolors, infile)
- ) {
- return 1;
- }
-
- /* Lets seek the next 24 pointless bytes, we don't care too much about it */
- if (!gdGetBuf(useless_bytes, 24, infile)) {
- return 1;
- }
-
- /* Unlikely, but possible -- largest signed value won't fit in unsigned. */
- if (info->height == 0 || info->height == INT_MIN)
- return 1;
- if (info->height < 0) {
- info->topdown = 1;
- info->height = -info->height;
- } else {
- info->topdown = 0;
- }
-
- info->type = BMP_PALETTE_4;
-
- /* Height was checked above. */
- if (info->width <= 0 || info->numplanes <= 0 || info->depth <= 0 ||
- info->numcolors < 0 || info->mincolors < 0) {
- return 1;
- }
-
- return 0;
-}
-
-static int bmp_read_direct(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header)
-{
- int ypos = 0, xpos = 0, row = 0;
- int padding = 0, alpha = 0, red = 0, green = 0, blue = 0;
- signed short int data = 0;
-
- switch(info->enctype) {
- case BMP_BI_RGB:
- /* no-op */
- break;
-
- case BMP_BI_BITFIELDS:
- if (info->depth == 24) {
- BMP_DEBUG(printf("Bitfield compression isn't supported for 24-bit\n"));
- return 1;
- }
- BMP_DEBUG(printf("Currently no bitfield support\n"));
- return 1;
- break;
-
- case BMP_BI_RLE8:
- if (info->depth != 8) {
- BMP_DEBUG(printf("RLE is only valid for 8-bit images\n"));
- return 1;
- }
- break;
- case BMP_BI_RLE4:
- if (info->depth != 4) {
- BMP_DEBUG(printf("RLE is only valid for 4-bit images\n"));
- return 1;
- }
- break;
- case BMP_BI_JPEG:
- case BMP_BI_PNG:
- default:
- BMP_DEBUG(printf("Unsupported BMP compression format\n"));
- return 1;
- }
-
- /* There is a chance the data isn't until later, would be weird but it is possible */
- if (gdTell(infile) != header->off) {
- /* Should make sure we don't seek past the file size */
- if (!gdSeek(infile, header->off)) {
- return 1;
- }
- }
-
- /* The line must be divisible by 4, else its padded with NULLs */
- padding = ((int)(info->depth / 8) * info->width) % 4;
- if (padding) {
- padding = 4 - padding;
- }
-
-
- for (ypos = 0; ypos < info->height; ++ypos) {
- if (info->topdown) {
- row = ypos;
- } else {
- row = info->height - ypos - 1;
- }
-
- for (xpos = 0; xpos < info->width; xpos++) {
- if (info->depth == 16) {
- if (!gdGetWordLSB(&data, infile)) {
- return 1;
- }
- BMP_DEBUG(printf("Data: %X\n", data));
- red = ((data & 0x7C00) >> 10) << 3;
- green = ((data & 0x3E0) >> 5) << 3;
- blue = (data & 0x1F) << 3;
- BMP_DEBUG(printf("R: %d, G: %d, B: %d\n", red, green, blue));
- } else if (info->depth == 24) {
- if (!gdGetByte(&blue, infile) || !gdGetByte(&green, infile) || !gdGetByte(&red, infile)) {
- return 1;
- }
- } else {
- if (!gdGetByte(&blue, infile) || !gdGetByte(&green, infile) || !gdGetByte(&red, infile) || !gdGetByte(&alpha, infile)) {
- return 1;
- }
- }
- /*alpha = gdAlphaMax - (alpha >> 1);*/
- gdImageSetPixel(im, xpos, row, gdTrueColor(red, green, blue));
- }
- for (xpos = padding; xpos > 0; --xpos) {
- if (!gdGetByte(&red, infile)) {
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-static int bmp_read_palette(gdImagePtr im, gdIOCtxPtr infile, int count, int read_four)
-{
- int i;
- int r, g, b, z;
-
- for (i = 0; i < count; i++) {
- if (
- !gdGetByte(&b, infile) ||
- !gdGetByte(&g, infile) ||
- !gdGetByte(&r, infile) ||
- (read_four && !gdGetByte(&z, infile))
- ) {
- return 1;
- }
- im->red[i] = r;
- im->green[i] = g;
- im->blue[i] = b;
- im->open[i] = 1;
- }
- return 0;
-}
-
-static int bmp_read_1bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header)
-{
- int ypos = 0, xpos = 0, row = 0, index = 0;
- int padding = 0, current_byte = 0, bit = 0;
-
- if (info->enctype != BMP_BI_RGB) {
- return 1;
- }
-
- if (!info->numcolors) {
- info->numcolors = 2;
- } else if (info->numcolors < 0 || info->numcolors > 2) {
- return 1;
- }
-
- if (bmp_read_palette(im, infile, info->numcolors, (info->type == BMP_PALETTE_4))) {
- return 1;
- }
-
- im->colorsTotal = info->numcolors;
-
- /* There is a chance the data isn't until later, would be weird but it is possible */
- if (gdTell(infile) != header->off) {
- /* Should make sure we don't seek past the file size */
- if (!gdSeek(infile, header->off)) {
- return 1;
- }
- }
-
- /* The line must be aligned on a 32 bits word, else it is padded with zeros */
- padding = (info->width + 7) / 8 % 4;
- if (padding) {
- padding = 4 - padding;
- }
-
- for (ypos = 0; ypos < info->height; ++ypos) {
- if (info->topdown) {
- row = ypos;
- } else {
- row = info->height - ypos - 1;
- }
-
- for (xpos = 0; xpos < info->width; xpos += 8) {
- /* Bitmaps are always aligned in bytes so we'll never overflow */
- if (!gdGetByte(&current_byte, infile)) {
- return 1;
- }
-
- for (bit = 0; bit < 8; bit++) {
- index = ((current_byte & (0x80 >> bit)) != 0 ? 0x01 : 0x00);
- if (im->open[index]) {
- im->open[index] = 0;
- }
- gdImageSetPixel(im, xpos + bit, row, index);
- /* No need to read anything extra */
- if ((xpos + bit) >= info->width) {
- break;
- }
- }
- }
-
- for (xpos = padding; xpos > 0; --xpos) {
- if (!gdGetByte(&index, infile)) {
- return 1;
- }
- }
- }
- return 0;
-}
-
-static int bmp_read_4bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header)
-{
- int ypos = 0, xpos = 0, row = 0, index = 0;
- int padding = 0, current_byte = 0;
-
- if (info->enctype != BMP_BI_RGB && info->enctype != BMP_BI_RLE4) {
- return 1;
- }
-
- if (!info->numcolors) {
- info->numcolors = 16;
- } else if (info->numcolors < 0 || info->numcolors > 16) {
- return 1;
- }
-
- if (bmp_read_palette(im, infile, info->numcolors, (info->type == BMP_PALETTE_4))) {
- return 1;
- }
-
- im->colorsTotal = info->numcolors;
-
- /* There is a chance the data isn't until later, would be weird but it is possible */
- if (gdTell(infile) != header->off) {
- /* Should make sure we don't seek past the file size */
- if (!gdSeek(infile, header->off)) {
- return 1;
- }
- }
-
- /* The line must be divisible by 4, else its padded with NULLs */
- padding = ((int)ceil(0.5 * info->width)) % 4;
- if (padding) {
- padding = 4 - padding;
- }
-
- switch (info->enctype) {
- case BMP_BI_RGB:
- for (ypos = 0; ypos < info->height; ++ypos) {
- if (info->topdown) {
- row = ypos;
- } else {
- row = info->height - ypos - 1;
- }
-
- for (xpos = 0; xpos < info->width; xpos += 2) {
- if (!gdGetByte(&current_byte, infile)) {
- return 1;
- }
-
- index = (current_byte >> 4) & 0x0f;
- if (im->open[index]) {
- im->open[index] = 0;
- }
- gdImageSetPixel(im, xpos, row, index);
-
- /* This condition may get called often, potential optimsations */
- if (xpos >= info->width) {
- break;
- }
-
- index = current_byte & 0x0f;
- if (im->open[index]) {
- im->open[index] = 0;
- }
- gdImageSetPixel(im, xpos + 1, row, index);
- }
-
- for (xpos = padding; xpos > 0; --xpos) {
- if (!gdGetByte(&index, infile)) {
- return 1;
- }
- }
- }
- break;
-
- case BMP_BI_RLE4:
- if (bmp_read_rle(im, infile, info)) {
- return 1;
- }
- break;
-
- default:
- return 1;
- }
- return 0;
-}
-
-static int bmp_read_8bit(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info, bmp_hdr_t *header)
-{
- int ypos = 0, xpos = 0, row = 0, index = 0;
- int padding = 0;
-
- if (info->enctype != BMP_BI_RGB && info->enctype != BMP_BI_RLE8) {
- return 1;
- }
-
- if (!info->numcolors) {
- info->numcolors = 256;
- } else if (info->numcolors < 0 || info->numcolors > 256) {
- return 1;
- }
-
- if (bmp_read_palette(im, infile, info->numcolors, (info->type == BMP_PALETTE_4))) {
- return 1;
- }
-
- im->colorsTotal = info->numcolors;
-
- /* There is a chance the data isn't until later, would be weird but it is possible */
- if (gdTell(infile) != header->off) {
- /* Should make sure we don't seek past the file size */
- if (!gdSeek(infile, header->off)) {
- return 1;
- }
- }
-
- /* The line must be divisible by 4, else its padded with NULLs */
- padding = (1 * info->width) % 4;
- if (padding) {
- padding = 4 - padding;
- }
-
- switch (info->enctype) {
- case BMP_BI_RGB:
- for (ypos = 0; ypos < info->height; ++ypos) {
- if (info->topdown) {
- row = ypos;
- } else {
- row = info->height - ypos - 1;
- }
-
- for (xpos = 0; xpos < info->width; ++xpos) {
- if (!gdGetByte(&index, infile)) {
- return 1;
- }
-
- if (im->open[index]) {
- im->open[index] = 0;
- }
- gdImageSetPixel(im, xpos, row, index);
- }
- /* Could create a new variable, but it isn't really worth it */
- for (xpos = padding; xpos > 0; --xpos) {
- if (!gdGetByte(&index, infile)) {
- return 1;
- }
- }
- }
- break;
-
- case BMP_BI_RLE8:
- if (bmp_read_rle(im, infile, info)) {
- return 1;
- }
- break;
-
- default:
- return 1;
- }
- return 0;
-}
-
-static int bmp_read_rle(gdImagePtr im, gdIOCtxPtr infile, bmp_info_t *info)
-{
- int ypos = 0, xpos = 0, row = 0, index = 0;
- int rle_length = 0, rle_data = 0;
- int padding = 0;
- int i = 0, j = 0;
- int pixels_per_byte = 8 / info->depth;
-
- for (ypos = 0; ypos < info->height && xpos <= info->width;) {
- if (!gdGetByte(&rle_length, infile) || !gdGetByte(&rle_data, infile)) {
- return 1;
- }
- row = info->height - ypos - 1;
-
- if (rle_length != BMP_RLE_COMMAND) {
- if (im->open[rle_data]) {
- im->open[rle_data] = 0;
- }
-
- for (i = 0; (i < rle_length) && (xpos < info->width);) {
- for (j = 1; (j <= pixels_per_byte) && (xpos < info->width) && (i < rle_length); j++, xpos++, i++) {
- index = (rle_data & (((1 << info->depth) - 1) << (8 - (j * info->depth)))) >> (8 - (j * info->depth));
- if (im->open[index]) {
- im->open[index] = 0;
- }
- gdImageSetPixel(im, xpos, row, index);
- }
- }
- } else if (rle_length == BMP_RLE_COMMAND && rle_data > 2) {
- /* Uncompressed RLE needs to be even */
- padding = 0;
- for (i = 0; (i < rle_data) && (xpos < info->width); i += pixels_per_byte) {
- int max_pixels = pixels_per_byte;
-
- if (!gdGetByte(&index, infile)) {
- return 1;
- }
- padding++;
-
- if (rle_data - i < max_pixels) {
- max_pixels = rle_data - i;
- }
-
- for (j = 1; (j <= max_pixels) && (xpos < info->width); j++, xpos++) {
- int temp = (index >> (8 - (j * info->depth))) & ((1 << info->depth) - 1);
- if (im->open[temp]) {
- im->open[temp] = 0;
- }
- gdImageSetPixel(im, xpos, row, temp);
- }
- }
-
- /* Make sure the bytes read are even */
- if (padding % 2 && !gdGetByte(&index, infile)) {
- return 1;
- }
- } else if (rle_length == BMP_RLE_COMMAND && rle_data == BMP_RLE_ENDOFLINE) {
- /* Next Line */
- xpos = 0;
- ypos++;
- } else if (rle_length == BMP_RLE_COMMAND && rle_data == BMP_RLE_DELTA) {
- /* Delta Record, used for bmp files that contain other data*/
- if (!gdGetByte(&rle_length, infile) || !gdGetByte(&rle_data, infile)) {
- return 1;
- }
- xpos += rle_length;
- ypos += rle_data;
- } else if (rle_length == BMP_RLE_COMMAND && rle_data == BMP_RLE_ENDOFBITMAP) {
- /* End of bitmap */
- break;
- }
- }
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_color.c b/Build/source/libs/gd/libgd-src/src/gd_color.c
deleted file mode 100644
index ba0efd823d7..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_color.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-#include "gd_color.h"
-
-/**
- * The threshold method works relatively well but it can be improved.
- * Maybe L*a*b* and Delta-E will give better results (and a better
- * granularity).
- */
-int gdColorMatch(gdImagePtr im, int col1, int col2, float threshold)
-{
- const int dr = gdImageRed(im, col1) - gdImageRed(im, col2);
- const int dg = gdImageGreen(im, col1) - gdImageGreen(im, col2);
- const int db = gdImageBlue(im, col1) - gdImageBlue(im, col2);
- const int da = gdImageAlpha(im, col1) - gdImageAlpha(im, col2);
- const int dist = dr * dr + dg * dg + db * db + da * da;
-
- return (100.0 * dist / 195075) < threshold;
-}
-
-/*
- * To be implemented when we have more image formats.
- * Buffer like gray8 gray16 or rgb8 will require some tweak
- * and can be done in this function (called from the autocrop
- * function. (Pierre)
- */
-#if 0
-static int colors_equal (const int col1, const in col2)
-{
-
-}
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_color.h b/Build/source/libs/gd/libgd-src/src/gd_color.h
deleted file mode 100644
index 08b06cee09b..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_color.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef GD_COLOR_H
-#define GD_COLOR_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- int gdColorMatch(gdImagePtr im, int col1, int col2, float threshold);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_color_map.c b/Build/source/libs/gd/libgd-src/src/gd_color_map.c
deleted file mode 100644
index 46f3bfa5e81..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_color_map.c
+++ /dev/null
@@ -1,794 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "gd.h"
-#include "gd_color_map.h"
-
-static const gdColorMapEntry GD_COLOR_MAP_X11_ENTRIES[] = {
- {"AliceBlue", 240, 248, 255},
- {"AntiqueWhite", 250, 235, 215},
- {"AntiqueWhite1", 255, 239, 219},
- {"AntiqueWhite2", 238, 223, 204},
- {"AntiqueWhite3", 205, 192, 176},
- {"AntiqueWhite4", 139, 131, 120},
- {"BlanchedAlmond", 255, 235, 205},
- {"BlueViolet", 138, 43, 226},
- {"CadetBlue", 95, 158, 160},
- {"CadetBlue1", 152, 245, 255},
- {"CadetBlue2", 142, 229, 238},
- {"CadetBlue3", 122, 197, 205},
- {"CadetBlue4", 83, 134, 139},
- {"CornflowerBlue", 100, 149, 237},
- {"DarkBlue", 0, 0, 139},
- {"DarkCyan", 0, 139, 139},
- {"DarkGoldenrod", 184, 134, 11},
- {"DarkGoldenrod1", 255, 185, 15},
- {"DarkGoldenrod2", 238, 173, 14},
- {"DarkGoldenrod3", 205, 149, 12},
- {"DarkGoldenrod4", 139, 101, 8},
- {"DarkGray", 169, 169, 169},
- {"DarkGreen", 0, 100, 0},
- {"DarkGrey", 169, 169, 169},
- {"DarkKhaki", 189, 183, 107},
- {"DarkMagenta", 139, 0, 139},
- {"DarkOliveGreen", 85, 107, 47},
- {"DarkOliveGreen1", 202, 255, 112},
- {"DarkOliveGreen2", 188, 238, 104},
- {"DarkOliveGreen3", 162, 205, 90},
- {"DarkOliveGreen4", 110, 139, 61},
- {"DarkOrange", 255, 140, 0},
- {"DarkOrange1", 255, 127, 0},
- {"DarkOrange2", 238, 118, 0},
- {"DarkOrange3", 205, 102, 0},
- {"DarkOrange4", 139, 69, 0},
- {"DarkOrchid", 153, 50, 204},
- {"DarkOrchid1", 191, 62, 255},
- {"DarkOrchid2", 178, 58, 238},
- {"DarkOrchid3", 154, 50, 205},
- {"DarkOrchid4", 104, 34, 139},
- {"DarkRed", 139, 0, 0},
- {"DarkSalmon", 233, 150, 122},
- {"DarkSeaGreen", 143, 188, 143},
- {"DarkSeaGreen1", 193, 255, 193},
- {"DarkSeaGreen2", 180, 238, 180},
- {"DarkSeaGreen3", 155, 205, 155},
- {"DarkSeaGreen4", 105, 139, 105},
- {"DarkSlateBlue", 72, 61, 139},
- {"DarkSlateGray", 47, 79, 79},
- {"DarkSlateGray1", 151, 255, 255},
- {"DarkSlateGray2", 141, 238, 238},
- {"DarkSlateGray3", 121, 205, 205},
- {"DarkSlateGray4", 82, 139, 139},
- {"DarkSlateGrey", 47, 79, 79},
- {"DarkTurquoise", 0, 206, 209},
- {"DarkViolet", 148, 0, 211},
- {"DeepPink", 255, 20, 147},
- {"DeepPink1", 255, 20, 147},
- {"DeepPink2", 238, 18, 137},
- {"DeepPink3", 205, 16, 118},
- {"DeepPink4", 139, 10, 80},
- {"DeepSkyBlue", 0, 191, 255},
- {"DeepSkyBlue1", 0, 191, 255},
- {"DeepSkyBlue2", 0, 178, 238},
- {"DeepSkyBlue3", 0, 154, 205},
- {"DeepSkyBlue4", 0, 104, 139},
- {"DimGray", 105, 105, 105},
- {"DimGrey", 105, 105, 105},
- {"DodgerBlue", 30, 144, 255},
- {"DodgerBlue1", 30, 144, 255},
- {"DodgerBlue2", 28, 134, 238},
- {"DodgerBlue3", 24, 116, 205},
- {"DodgerBlue4", 16, 78, 139},
- {"FloralWhite", 255, 250, 240},
- {"ForestGreen", 34, 139, 34},
- {"GhostWhite", 248, 248, 255},
- {"GreenYellow", 173, 255, 47},
- {"HotPink", 255, 105, 180},
- {"HotPink1", 255, 110, 180},
- {"HotPink2", 238, 106, 167},
- {"HotPink3", 205, 96, 144},
- {"HotPink4", 139, 58, 98},
- {"IndianRed", 205, 92, 92},
- {"IndianRed1", 255, 106, 106},
- {"IndianRed2", 238, 99, 99},
- {"IndianRed3", 205, 85, 85},
- {"IndianRed4", 139, 58, 58},
- {"LavenderBlush", 255, 240, 245},
- {"LavenderBlush1", 255, 240, 245},
- {"LavenderBlush2", 238, 224, 229},
- {"LavenderBlush3", 205, 193, 197},
- {"LavenderBlush4", 139, 131, 134},
- {"LawnGreen", 124, 252, 0},
- {"LemonChiffon", 255, 250, 205},
- {"LemonChiffon1", 255, 250, 205},
- {"LemonChiffon2", 238, 233, 191},
- {"LemonChiffon3", 205, 201, 165},
- {"LemonChiffon4", 139, 137, 112},
- {"LightBlue", 173, 216, 230},
- {"LightBlue1", 191, 239, 255},
- {"LightBlue2", 178, 223, 238},
- {"LightBlue3", 154, 192, 205},
- {"LightBlue4", 104, 131, 139},
- {"LightCoral", 240, 128, 128},
- {"LightCyan", 224, 255, 255},
- {"LightCyan1", 224, 255, 255},
- {"LightCyan2", 209, 238, 238},
- {"LightCyan3", 180, 205, 205},
- {"LightCyan4", 122, 139, 139},
- {"LightGoldenrod", 238, 221, 130},
- {"LightGoldenrod1", 255, 236, 139},
- {"LightGoldenrod2", 238, 220, 130},
- {"LightGoldenrod3", 205, 190, 112},
- {"LightGoldenrod4", 139, 129, 76},
- {"LightGoldenrodYellow", 250, 250, 210},
- {"LightGray", 211, 211, 211},
- {"LightGreen", 144, 238, 144},
- {"LightGrey", 211, 211, 211},
- {"LightPink", 255, 182, 193},
- {"LightPink1", 255, 174, 185},
- {"LightPink2", 238, 162, 173},
- {"LightPink3", 205, 140, 149},
- {"LightPink4", 139, 95, 101},
- {"LightSalmon", 255, 160, 122},
- {"LightSalmon1", 255, 160, 122},
- {"LightSalmon2", 238, 149, 114},
- {"LightSalmon3", 205, 129, 98},
- {"LightSalmon4", 139, 87, 66},
- {"LightSeaGreen", 32, 178, 170},
- {"LightSkyBlue", 135, 206, 250},
- {"LightSkyBlue1", 176, 226, 255},
- {"LightSkyBlue2", 164, 211, 238},
- {"LightSkyBlue3", 141, 182, 205},
- {"LightSkyBlue4", 96, 123, 139},
- {"LightSlateBlue", 132, 112, 255},
- {"LightSlateGray", 119, 136, 153},
- {"LightSlateGrey", 119, 136, 153},
- {"LightSteelBlue", 176, 196, 222},
- {"LightSteelBlue1", 202, 225, 255},
- {"LightSteelBlue2", 188, 210, 238},
- {"LightSteelBlue3", 162, 181, 205},
- {"LightSteelBlue4", 110, 123, 139},
- {"LightYellow", 255, 255, 224},
- {"LightYellow1", 255, 255, 224},
- {"LightYellow2", 238, 238, 209},
- {"LightYellow3", 205, 205, 180},
- {"LightYellow4", 139, 139, 122},
- {"LimeGreen", 50, 205, 50},
- {"MediumAquamarine", 102, 205, 170},
- {"MediumBlue", 0, 0, 205},
- {"MediumOrchid", 186, 85, 211},
- {"MediumOrchid1", 224, 102, 255},
- {"MediumOrchid2", 209, 95, 238},
- {"MediumOrchid3", 180, 82, 205},
- {"MediumOrchid4", 122, 55, 139},
- {"MediumPurple", 147, 112, 219},
- {"MediumPurple1", 171, 130, 255},
- {"MediumPurple2", 159, 121, 238},
- {"MediumPurple3", 137, 104, 205},
- {"MediumPurple4", 93, 71, 139},
- {"MediumSeaGreen", 60, 179, 113},
- {"MediumSlateBlue", 123, 104, 238},
- {"MediumSpringGreen", 0, 250, 154},
- {"MediumTurquoise", 72, 209, 204},
- {"MediumVioletRed", 199, 21, 133},
- {"MidnightBlue", 25, 25, 112},
- {"MintCream", 245, 255, 250},
- {"MistyRose", 255, 228, 225},
- {"MistyRose1", 255, 228, 225},
- {"MistyRose2", 238, 213, 210},
- {"MistyRose3", 205, 183, 181},
- {"MistyRose4", 139, 125, 123},
- {"NavajoWhite", 255, 222, 173},
- {"NavajoWhite1", 255, 222, 173},
- {"NavajoWhite2", 238, 207, 161},
- {"NavajoWhite3", 205, 179, 139},
- {"NavajoWhite4", 139, 121, 94},
- {"NavyBlue", 0, 0, 128},
- {"OldLace", 253, 245, 230},
- {"OliveDrab", 107, 142, 35},
- {"OliveDrab1", 192, 255, 62},
- {"OliveDrab2", 179, 238, 58},
- {"OliveDrab3", 154, 205, 50},
- {"OliveDrab4", 105, 139, 34},
- {"OrangeRed", 255, 69, 0},
- {"OrangeRed1", 255, 69, 0},
- {"OrangeRed2", 238, 64, 0},
- {"OrangeRed3", 205, 55, 0},
- {"OrangeRed4", 139, 37, 0},
- {"PaleGoldenrod", 238, 232, 170},
- {"PaleGreen", 152, 251, 152},
- {"PaleGreen1", 154, 255, 154},
- {"PaleGreen2", 144, 238, 144},
- {"PaleGreen3", 124, 205, 124},
- {"PaleGreen4", 84, 139, 84},
- {"PaleTurquoise", 175, 238, 238},
- {"PaleTurquoise1", 187, 255, 255},
- {"PaleTurquoise2", 174, 238, 238},
- {"PaleTurquoise3", 150, 205, 205},
- {"PaleTurquoise4", 102, 139, 139},
- {"PaleVioletRed", 219, 112, 147},
- {"PaleVioletRed1", 255, 130, 171},
- {"PaleVioletRed2", 238, 121, 159},
- {"PaleVioletRed3", 205, 104, 137},
- {"PaleVioletRed4", 139, 71, 93},
- {"PapayaWhip", 255, 239, 213},
- {"PeachPuff", 255, 218, 185},
- {"PeachPuff1", 255, 218, 185},
- {"PeachPuff2", 238, 203, 173},
- {"PeachPuff3", 205, 175, 149},
- {"PeachPuff4", 139, 119, 101},
- {"PowderBlue", 176, 224, 230},
- {"RosyBrown", 188, 143, 143},
- {"RosyBrown1", 255, 193, 193},
- {"RosyBrown2", 238, 180, 180},
- {"RosyBrown3", 205, 155, 155},
- {"RosyBrown4", 139, 105, 105},
- {"RoyalBlue", 65, 105, 225},
- {"RoyalBlue1", 72, 118, 255},
- {"RoyalBlue2", 67, 110, 238},
- {"RoyalBlue3", 58, 95, 205},
- {"RoyalBlue4", 39, 64, 139},
- {"SaddleBrown", 139, 69, 19},
- {"SandyBrown", 244, 164, 96},
- {"SeaGreen", 46, 139, 87},
- {"SeaGreen1", 84, 255, 159},
- {"SeaGreen2", 78, 238, 148},
- {"SeaGreen3", 67, 205, 128},
- {"SeaGreen4", 46, 139, 87},
- {"SkyBlue", 135, 206, 235},
- {"SkyBlue1", 135, 206, 255},
- {"SkyBlue2", 126, 192, 238},
- {"SkyBlue3", 108, 166, 205},
- {"SkyBlue4", 74, 112, 139},
- {"SlateBlue", 106, 90, 205},
- {"SlateBlue1", 131, 111, 255},
- {"SlateBlue2", 122, 103, 238},
- {"SlateBlue3", 105, 89, 205},
- {"SlateBlue4", 71, 60, 139},
- {"SlateGray", 112, 128, 144},
- {"SlateGray1", 198, 226, 255},
- {"SlateGray2", 185, 211, 238},
- {"SlateGray3", 159, 182, 205},
- {"SlateGray4", 108, 123, 139},
- {"SlateGrey", 112, 128, 144},
- {"SpringGreen", 0, 255, 127},
- {"SpringGreen1", 0, 255, 127},
- {"SpringGreen2", 0, 238, 118},
- {"SpringGreen3", 0, 205, 102},
- {"SpringGreen4", 0, 139, 69},
- {"SteelBlue", 70, 130, 180},
- {"SteelBlue1", 99, 184, 255},
- {"SteelBlue2", 92, 172, 238},
- {"SteelBlue3", 79, 148, 205},
- {"SteelBlue4", 54, 100, 139},
- {"VioletRed", 208, 32, 144},
- {"VioletRed1", 255, 62, 150},
- {"VioletRed2", 238, 58, 140},
- {"VioletRed3", 205, 50, 120},
- {"VioletRed4", 139, 34, 82},
- {"WhiteSmoke", 245, 245, 245},
- {"YellowGreen", 154, 205, 50},
- {"alice blue", 240, 248, 255},
- {"antique white", 250, 235, 215},
- {"aquamarine", 127, 255, 212},
- {"aquamarine1", 127, 255, 212},
- {"aquamarine2", 118, 238, 198},
- {"aquamarine3", 102, 205, 170},
- {"aquamarine4", 69, 139, 116},
- {"azure", 240, 255, 255},
- {"azure1", 240, 255, 255},
- {"azure2", 224, 238, 238},
- {"azure3", 193, 205, 205},
- {"azure4", 131, 139, 139},
- {"beige", 245, 245, 220},
- {"bisque", 255, 228, 196},
- {"bisque1", 255, 228, 196},
- {"bisque2", 238, 213, 183},
- {"bisque3", 205, 183, 158},
- {"bisque4", 139, 125, 107},
- {"black", 0, 0, 0},
- {"blanched almond", 255, 235, 205},
- {"blue", 0, 0, 255},
- {"blue violet", 138, 43, 226},
- {"blue1", 0, 0, 255},
- {"blue2", 0, 0, 238},
- {"blue3", 0, 0, 205},
- {"blue4", 0, 0, 139},
- {"brown", 165, 42, 42},
- {"brown1", 255, 64, 64},
- {"brown2", 238, 59, 59},
- {"brown3", 205, 51, 51},
- {"brown4", 139, 35, 35},
- {"burlywood", 222, 184, 135},
- {"burlywood1", 255, 211, 155},
- {"burlywood2", 238, 197, 145},
- {"burlywood3", 205, 170, 125},
- {"burlywood4", 139, 115, 85},
- {"cadet blue", 95, 158, 160},
- {"chartreuse", 127, 255, 0},
- {"chartreuse1", 127, 255, 0},
- {"chartreuse2", 118, 238, 0},
- {"chartreuse3", 102, 205, 0},
- {"chartreuse4", 69, 139, 0},
- {"chocolate", 210, 105, 30},
- {"chocolate1", 255, 127, 36},
- {"chocolate2", 238, 118, 33},
- {"chocolate3", 205, 102, 29},
- {"chocolate4", 139, 69, 19},
- {"coral", 255, 127, 80},
- {"coral1", 255, 114, 86},
- {"coral2", 238, 106, 80},
- {"coral3", 205, 91, 69},
- {"coral4", 139, 62, 47},
- {"cornflower blue", 100, 149, 237},
- {"cornsilk", 255, 248, 220},
- {"cornsilk1", 255, 248, 220},
- {"cornsilk2", 238, 232, 205},
- {"cornsilk3", 205, 200, 177},
- {"cornsilk4", 139, 136, 120},
- {"cyan", 0, 255, 255},
- {"cyan1", 0, 255, 255},
- {"cyan2", 0, 238, 238},
- {"cyan3", 0, 205, 205},
- {"cyan4", 0, 139, 139},
- {"dark blue", 0, 0, 139},
- {"dark cyan", 0, 139, 139},
- {"dark goldenrod", 184, 134, 11},
- {"dark gray", 169, 169, 169},
- {"dark green", 0, 100, 0},
- {"dark grey", 169, 169, 169},
- {"dark khaki", 189, 183, 107},
- {"dark magenta", 139, 0, 139},
- {"dark olive green", 85, 107, 47},
- {"dark orange", 255, 140, 0},
- {"dark orchid", 153, 50, 204},
- {"dark red", 139, 0, 0},
- {"dark salmon", 233, 150, 122},
- {"dark sea green", 143, 188, 143},
- {"dark slate blue", 72, 61, 139},
- {"dark slate gray", 47, 79, 79},
- {"dark slate grey", 47, 79, 79},
- {"dark turquoise", 0, 206, 209},
- {"dark violet", 148, 0, 211},
- {"deep pink", 255, 20, 147},
- {"deep sky blue", 0, 191, 255},
- {"dim gray", 105, 105, 105},
- {"dim grey", 105, 105, 105},
- {"dodger blue", 30, 144, 255},
- {"firebrick", 178, 34, 34},
- {"firebrick1", 255, 48, 48},
- {"firebrick2", 238, 44, 44},
- {"firebrick3", 205, 38, 38},
- {"firebrick4", 139, 26, 26},
- {"floral white", 255, 250, 240},
- {"forest green", 34, 139, 34},
- {"gainsboro", 220, 220, 220},
- {"ghost white", 248, 248, 255},
- {"gold", 255, 215, 0},
- {"gold1", 255, 215, 0},
- {"gold2", 238, 201, 0},
- {"gold3", 205, 173, 0},
- {"gold4", 139, 117, 0},
- {"goldenrod", 218, 165, 32},
- {"goldenrod1", 255, 193, 37},
- {"goldenrod2", 238, 180, 34},
- {"goldenrod3", 205, 155, 29},
- {"goldenrod4", 139, 105, 20},
- {"gray", 190, 190, 190},
- {"gray0", 0, 0, 0},
- {"gray1", 3, 3, 3},
- {"gray10", 26, 26, 26},
- {"gray100", 255, 255, 255},
- {"gray11", 28, 28, 28},
- {"gray12", 31, 31, 31},
- {"gray13", 33, 33, 33},
- {"gray14", 36, 36, 36},
- {"gray15", 38, 38, 38},
- {"gray16", 41, 41, 41},
- {"gray17", 43, 43, 43},
- {"gray18", 46, 46, 46},
- {"gray19", 48, 48, 48},
- {"gray2", 5, 5, 5},
- {"gray20", 51, 51, 51},
- {"gray21", 54, 54, 54},
- {"gray22", 56, 56, 56},
- {"gray23", 59, 59, 59},
- {"gray24", 61, 61, 61},
- {"gray25", 64, 64, 64},
- {"gray26", 66, 66, 66},
- {"gray27", 69, 69, 69},
- {"gray28", 71, 71, 71},
- {"gray29", 74, 74, 74},
- {"gray3", 8, 8, 8},
- {"gray30", 77, 77, 77},
- {"gray31", 79, 79, 79},
- {"gray32", 82, 82, 82},
- {"gray33", 84, 84, 84},
- {"gray34", 87, 87, 87},
- {"gray35", 89, 89, 89},
- {"gray36", 92, 92, 92},
- {"gray37", 94, 94, 94},
- {"gray38", 97, 97, 97},
- {"gray39", 99, 99, 99},
- {"gray4", 10, 10, 10},
- {"gray40", 102, 102, 102},
- {"gray41", 105, 105, 105},
- {"gray42", 107, 107, 107},
- {"gray43", 110, 110, 110},
- {"gray44", 112, 112, 112},
- {"gray45", 115, 115, 115},
- {"gray46", 117, 117, 117},
- {"gray47", 120, 120, 120},
- {"gray48", 122, 122, 122},
- {"gray49", 125, 125, 125},
- {"gray5", 13, 13, 13},
- {"gray50", 127, 127, 127},
- {"gray51", 130, 130, 130},
- {"gray52", 133, 133, 133},
- {"gray53", 135, 135, 135},
- {"gray54", 138, 138, 138},
- {"gray55", 140, 140, 140},
- {"gray56", 143, 143, 143},
- {"gray57", 145, 145, 145},
- {"gray58", 148, 148, 148},
- {"gray59", 150, 150, 150},
- {"gray6", 15, 15, 15},
- {"gray60", 153, 153, 153},
- {"gray61", 156, 156, 156},
- {"gray62", 158, 158, 158},
- {"gray63", 161, 161, 161},
- {"gray64", 163, 163, 163},
- {"gray65", 166, 166, 166},
- {"gray66", 168, 168, 168},
- {"gray67", 171, 171, 171},
- {"gray68", 173, 173, 173},
- {"gray69", 176, 176, 176},
- {"gray7", 18, 18, 18},
- {"gray70", 179, 179, 179},
- {"gray71", 181, 181, 181},
- {"gray72", 184, 184, 184},
- {"gray73", 186, 186, 186},
- {"gray74", 189, 189, 189},
- {"gray75", 191, 191, 191},
- {"gray76", 194, 194, 194},
- {"gray77", 196, 196, 196},
- {"gray78", 199, 199, 199},
- {"gray79", 201, 201, 201},
- {"gray8", 20, 20, 20},
- {"gray80", 204, 204, 204},
- {"gray81", 207, 207, 207},
- {"gray82", 209, 209, 209},
- {"gray83", 212, 212, 212},
- {"gray84", 214, 214, 214},
- {"gray85", 217, 217, 217},
- {"gray86", 219, 219, 219},
- {"gray87", 222, 222, 222},
- {"gray88", 224, 224, 224},
- {"gray89", 227, 227, 227},
- {"gray9", 23, 23, 23},
- {"gray90", 229, 229, 229},
- {"gray91", 232, 232, 232},
- {"gray92", 235, 235, 235},
- {"gray93", 237, 237, 237},
- {"gray94", 240, 240, 240},
- {"gray95", 242, 242, 242},
- {"gray96", 245, 245, 245},
- {"gray97", 247, 247, 247},
- {"gray98", 250, 250, 250},
- {"gray99", 252, 252, 252},
- {"green", 0, 255, 0},
- {"green yellow", 173, 255, 47},
- {"green1", 0, 255, 0},
- {"green2", 0, 238, 0},
- {"green3", 0, 205, 0},
- {"green4", 0, 139, 0},
- {"grey", 190, 190, 190},
- {"grey0", 0, 0, 0},
- {"grey1", 3, 3, 3},
- {"grey10", 26, 26, 26},
- {"grey100", 255, 255, 255},
- {"grey11", 28, 28, 28},
- {"grey12", 31, 31, 31},
- {"grey13", 33, 33, 33},
- {"grey14", 36, 36, 36},
- {"grey15", 38, 38, 38},
- {"grey16", 41, 41, 41},
- {"grey17", 43, 43, 43},
- {"grey18", 46, 46, 46},
- {"grey19", 48, 48, 48},
- {"grey2", 5, 5, 5},
- {"grey20", 51, 51, 51},
- {"grey21", 54, 54, 54},
- {"grey22", 56, 56, 56},
- {"grey23", 59, 59, 59},
- {"grey24", 61, 61, 61},
- {"grey25", 64, 64, 64},
- {"grey26", 66, 66, 66},
- {"grey27", 69, 69, 69},
- {"grey28", 71, 71, 71},
- {"grey29", 74, 74, 74},
- {"grey3", 8, 8, 8},
- {"grey30", 77, 77, 77},
- {"grey31", 79, 79, 79},
- {"grey32", 82, 82, 82},
- {"grey33", 84, 84, 84},
- {"grey34", 87, 87, 87},
- {"grey35", 89, 89, 89},
- {"grey36", 92, 92, 92},
- {"grey37", 94, 94, 94},
- {"grey38", 97, 97, 97},
- {"grey39", 99, 99, 99},
- {"grey4", 10, 10, 10},
- {"grey40", 102, 102, 102},
- {"grey41", 105, 105, 105},
- {"grey42", 107, 107, 107},
- {"grey43", 110, 110, 110},
- {"grey44", 112, 112, 112},
- {"grey45", 115, 115, 115},
- {"grey46", 117, 117, 117},
- {"grey47", 120, 120, 120},
- {"grey48", 122, 122, 122},
- {"grey49", 125, 125, 125},
- {"grey5", 13, 13, 13},
- {"grey50", 127, 127, 127},
- {"grey51", 130, 130, 130},
- {"grey52", 133, 133, 133},
- {"grey53", 135, 135, 135},
- {"grey54", 138, 138, 138},
- {"grey55", 140, 140, 140},
- {"grey56", 143, 143, 143},
- {"grey57", 145, 145, 145},
- {"grey58", 148, 148, 148},
- {"grey59", 150, 150, 150},
- {"grey6", 15, 15, 15},
- {"grey60", 153, 153, 153},
- {"grey61", 156, 156, 156},
- {"grey62", 158, 158, 158},
- {"grey63", 161, 161, 161},
- {"grey64", 163, 163, 163},
- {"grey65", 166, 166, 166},
- {"grey66", 168, 168, 168},
- {"grey67", 171, 171, 171},
- {"grey68", 173, 173, 173},
- {"grey69", 176, 176, 176},
- {"grey7", 18, 18, 18},
- {"grey70", 179, 179, 179},
- {"grey71", 181, 181, 181},
- {"grey72", 184, 184, 184},
- {"grey73", 186, 186, 186},
- {"grey74", 189, 189, 189},
- {"grey75", 191, 191, 191},
- {"grey76", 194, 194, 194},
- {"grey77", 196, 196, 196},
- {"grey78", 199, 199, 199},
- {"grey79", 201, 201, 201},
- {"grey8", 20, 20, 20},
- {"grey80", 204, 204, 204},
- {"grey81", 207, 207, 207},
- {"grey82", 209, 209, 209},
- {"grey83", 212, 212, 212},
- {"grey84", 214, 214, 214},
- {"grey85", 217, 217, 217},
- {"grey86", 219, 219, 219},
- {"grey87", 222, 222, 222},
- {"grey88", 224, 224, 224},
- {"grey89", 227, 227, 227},
- {"grey9", 23, 23, 23},
- {"grey90", 229, 229, 229},
- {"grey91", 232, 232, 232},
- {"grey92", 235, 235, 235},
- {"grey93", 237, 237, 237},
- {"grey94", 240, 240, 240},
- {"grey95", 242, 242, 242},
- {"grey96", 245, 245, 245},
- {"grey97", 247, 247, 247},
- {"grey98", 250, 250, 250},
- {"grey99", 252, 252, 252},
- {"honeydew", 240, 255, 240},
- {"honeydew1", 240, 255, 240},
- {"honeydew2", 224, 238, 224},
- {"honeydew3", 193, 205, 193},
- {"honeydew4", 131, 139, 131},
- {"hot pink", 255, 105, 180},
- {"indian red", 205, 92, 92},
- {"ivory", 255, 255, 240},
- {"ivory1", 255, 255, 240},
- {"ivory2", 238, 238, 224},
- {"ivory3", 205, 205, 193},
- {"ivory4", 139, 139, 131},
- {"khaki", 240, 230, 140},
- {"khaki1", 255, 246, 143},
- {"khaki2", 238, 230, 133},
- {"khaki3", 205, 198, 115},
- {"khaki4", 139, 134, 78},
- {"lavender", 230, 230, 250},
- {"lavender blush", 255, 240, 245},
- {"lawn green", 124, 252, 0},
- {"lemon chiffon", 255, 250, 205},
- {"light blue", 173, 216, 230},
- {"light coral", 240, 128, 128},
- {"light cyan", 224, 255, 255},
- {"light goldenrod", 238, 221, 130},
- {"light goldenrod yellow", 250, 250, 210},
- {"light gray", 211, 211, 211},
- {"light green", 144, 238, 144},
- {"light grey", 211, 211, 211},
- {"light pink", 255, 182, 193},
- {"light salmon", 255, 160, 122},
- {"light sea green", 32, 178, 170},
- {"light sky blue", 135, 206, 250},
- {"light slate blue", 132, 112, 255},
- {"light slate gray", 119, 136, 153},
- {"light slate grey", 119, 136, 153},
- {"light steel blue", 176, 196, 222},
- {"light yellow", 255, 255, 224},
- {"lime green", 50, 205, 50},
- {"linen", 250, 240, 230},
- {"magenta", 255, 0, 255},
- {"magenta1", 255, 0, 255},
- {"magenta2", 238, 0, 238},
- {"magenta3", 205, 0, 205},
- {"magenta4", 139, 0, 139},
- {"maroon", 176, 48, 96},
- {"maroon1", 255, 52, 179},
- {"maroon2", 238, 48, 167},
- {"maroon3", 205, 41, 144},
- {"maroon4", 139, 28, 98},
- {"medium aquamarine", 102, 205, 170},
- {"medium blue", 0, 0, 205},
- {"medium orchid", 186, 85, 211},
- {"medium purple", 147, 112, 219},
- {"medium sea green", 60, 179, 113},
- {"medium slate blue", 123, 104, 238},
- {"medium spring green", 0, 250, 154},
- {"medium turquoise", 72, 209, 204},
- {"medium violet red", 199, 21, 133},
- {"midnight blue", 25, 25, 112},
- {"mint cream", 245, 255, 250},
- {"misty rose", 255, 228, 225},
- {"moccasin", 255, 228, 181},
- {"navajo white", 255, 222, 173},
- {"navy", 0, 0, 128},
- {"navy blue", 0, 0, 128},
- {"old lace", 253, 245, 230},
- {"olive drab", 107, 142, 35},
- {"orange", 255, 165, 0},
- {"orange red", 255, 69, 0},
- {"orange1", 255, 165, 0},
- {"orange2", 238, 154, 0},
- {"orange3", 205, 133, 0},
- {"orange4", 139, 90, 0},
- {"orchid", 218, 112, 214},
- {"orchid1", 255, 131, 250},
- {"orchid2", 238, 122, 233},
- {"orchid3", 205, 105, 201},
- {"orchid4", 139, 71, 137},
- {"pale goldenrod", 238, 232, 170},
- {"pale green", 152, 251, 152},
- {"pale turquoise", 175, 238, 238},
- {"pale violet red", 219, 112, 147},
- {"papaya whip", 255, 239, 213},
- {"peach puff", 255, 218, 185},
- {"peru", 205, 133, 63},
- {"pink", 255, 192, 203},
- {"pink1", 255, 181, 197},
- {"pink2", 238, 169, 184},
- {"pink3", 205, 145, 158},
- {"pink4", 139, 99, 108},
- {"plum", 221, 160, 221},
- {"plum1", 255, 187, 255},
- {"plum2", 238, 174, 238},
- {"plum3", 205, 150, 205},
- {"plum4", 139, 102, 139},
- {"powder blue", 176, 224, 230},
- {"purple", 160, 32, 240},
- {"purple1", 155, 48, 255},
- {"purple2", 145, 44, 238},
- {"purple3", 125, 38, 205},
- {"purple4", 85, 26, 139},
- {"red", 255, 0, 0},
- {"red1", 255, 0, 0},
- {"red2", 238, 0, 0},
- {"red3", 205, 0, 0},
- {"red4", 139, 0, 0},
- {"rosy brown", 188, 143, 143},
- {"royal blue", 65, 105, 225},
- {"saddle brown", 139, 69, 19},
- {"salmon", 250, 128, 114},
- {"salmon1", 255, 140, 105},
- {"salmon2", 238, 130, 98},
- {"salmon3", 205, 112, 84},
- {"salmon4", 139, 76, 57},
- {"sandy brown", 244, 164, 96},
- {"sea green", 46, 139, 87},
- {"seashell", 255, 245, 238},
- {"seashell1", 255, 245, 238},
- {"seashell2", 238, 229, 222},
- {"seashell3", 205, 197, 191},
- {"seashell4", 139, 134, 130},
- {"sienna", 160, 82, 45},
- {"sienna1", 255, 130, 71},
- {"sienna2", 238, 121, 66},
- {"sienna3", 205, 104, 57},
- {"sienna4", 139, 71, 38},
- {"sky blue", 135, 206, 235},
- {"slate blue", 106, 90, 205},
- {"slate gray", 112, 128, 144},
- {"slate grey", 112, 128, 144},
- {"snow", 255, 250, 250},
- {"snow1", 255, 250, 250},
- {"snow2", 238, 233, 233},
- {"snow3", 205, 201, 201},
- {"snow4", 139, 137, 137},
- {"spring green", 0, 255, 127},
- {"steel blue", 70, 130, 180},
- {"tan", 210, 180, 140},
- {"tan1", 255, 165, 79},
- {"tan2", 238, 154, 73},
- {"tan3", 205, 133, 63},
- {"tan4", 139, 90, 43},
- {"thistle", 216, 191, 216},
- {"thistle1", 255, 225, 255},
- {"thistle2", 238, 210, 238},
- {"thistle3", 205, 181, 205},
- {"thistle4", 139, 123, 139},
- {"tomato", 255, 99, 71},
- {"tomato1", 255, 99, 71},
- {"tomato2", 238, 92, 66},
- {"tomato3", 205, 79, 57},
- {"tomato4", 139, 54, 38},
- {"turquoise", 64, 224, 208},
- {"turquoise1", 0, 245, 255},
- {"turquoise2", 0, 229, 238},
- {"turquoise3", 0, 197, 205},
- {"turquoise4", 0, 134, 139},
- {"violet", 238, 130, 238},
- {"violet red", 208, 32, 144},
- {"wheat", 245, 222, 179},
- {"wheat1", 255, 231, 186},
- {"wheat2", 238, 216, 174},
- {"wheat3", 205, 186, 150},
- {"wheat4", 139, 126, 102},
- {"white", 255, 255, 255},
- {"white smoke", 245, 245, 245},
- {"yellow", 255, 255, 0},
- {"yellow green", 154, 205, 50},
- {"yellow1", 255, 255, 0},
- {"yellow2", 238, 238, 0},
- {"yellow3", 205, 205, 0},
- {"yellow4", 139, 139, 0},
-};
-
-BGD_EXPORT_DATA_PROT gdColorMap GD_COLOR_MAP_X11 = {
- sizeof(GD_COLOR_MAP_X11_ENTRIES)/sizeof(gdColorMapEntry),
- (gdColorMapEntry *)GD_COLOR_MAP_X11_ENTRIES
-};
-
-/*
- Function: gdColorMapLookup
-*/
-BGD_DECLARE(int)
-gdColorMapLookup(const gdColorMap color_map, const char *color_name, int *r, int *g, int *b)
-{
- gdColorMapEntry *entries = color_map.entries;
- int low = 0;
- int high = color_map.num_entries - 1;
- while (low <= high) {
- int i = (low+high)/2;
- int result = strcmp(color_name, entries[i].color_name);
- if (result == 0) {
- *r = entries[i].red;
- *g = entries[i].green;
- *b = entries[i].blue;
- return 1;
- } else if (result < 0) {
- high = i - 1;
- } else {
- low = i + 1;
- }
- }
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_color_map.h b/Build/source/libs/gd/libgd-src/src/gd_color_map.h
deleted file mode 100644
index 6d2275e5647..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_color_map.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef GD_COLOR_MAP_H
-#define GD_COLOR_MAP_H 1
-
-#include "gd.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct {
- char *color_name;
- int red;
- int green;
- int blue;
-} gdColorMapEntry;
-
-typedef struct {
- int num_entries;
- gdColorMapEntry *entries;
-} gdColorMap;
-
-extern BGD_EXPORT_DATA_PROT gdColorMap GD_COLOR_MAP_X11;
-
-BGD_DECLARE(int) gdColorMapLookup(const gdColorMap color_map, const char *color_name, int *r, int *g, int *b);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_color_map_test.c b/Build/source/libs/gd/libgd-src/src/gd_color_map_test.c
deleted file mode 100644
index 26e08bd8516..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_color_map_test.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include "gd.h"
-#include "gd_color_map.h"
-
-int
-main(void)
-{
- int r, g, b;
- int i;
- for (i=0; i<GD_COLOR_MAP_X11.num_entries; i++) {
- char *color_name = GD_COLOR_MAP_X11.entries[i].color_name;
- if (gdColorMapLookup(GD_COLOR_MAP_X11, color_name, &r, &g, &b)) {
- printf("%s found: #%02x%02x%02x\n", color_name, r, g, b);
- } else {
- fprintf(stderr, "%s not found\n", color_name);
- return 1;
- }
- }
- if (gdColorMapLookup(GD_COLOR_MAP_X11, "no such name", &r, &g, &b)) {
- return 2;
- }
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_color_match.c b/Build/source/libs/gd/libgd-src/src/gd_color_match.c
deleted file mode 100644
index f0194302ee1..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_color_match.c
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/*
- Function: gdImageColorMatch
-
- Bring the palette colors in im2 to be closer to im1.
- */
-BGD_DECLARE(int) gdImageColorMatch (gdImagePtr im1, gdImagePtr im2)
-{
- unsigned long *buf; /* stores our calculations */
- unsigned long *bp; /* buf ptr */
- int color, rgb;
- int x,y;
- int count;
-
- if (!im1->trueColor) {
- return -1; /* im1 must be True Color */
- }
- if (im2->trueColor) {
- return -2; /* im2 must be indexed */
- }
- if ((im1->sx != im2->sx) || (im1->sy != im2->sy)) {
- return -3; /* the images are meant to be the same dimensions */
- }
- if (im2->colorsTotal < 1) {
- return -4; /* At least 1 color must be allocated */
- }
-
- buf = (unsigned long *)gdMalloc(sizeof(unsigned long) * 5 * gdMaxColors);
- memset (buf, 0, sizeof(unsigned long) * 5 * gdMaxColors );
- for (x=0; x < im1->sx; x++) {
- for( y=0; y<im1->sy; y++ ) {
- color = im2->pixels[y][x];
- rgb = im1->tpixels[y][x];
- bp = buf + (color * 5);
- (*(bp++))++;
- *(bp++) += gdTrueColorGetRed(rgb);
- *(bp++) += gdTrueColorGetGreen(rgb);
- *(bp++) += gdTrueColorGetBlue(rgb);
- *(bp++) += gdTrueColorGetAlpha(rgb);
- }
- }
- bp = buf;
- for (color=0; color < im2->colorsTotal; color++) {
- count = *(bp++);
- if( count > 0 ) {
- im2->red[color] = *(bp++) / count;
- im2->green[color] = *(bp++) / count;
- im2->blue[color] = *(bp++) / count;
- im2->alpha[color] = *(bp++) / count;
- } else {
- bp += 4;
- }
- }
- gdFree(buf);
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_crop.c b/Build/source/libs/gd/libgd-src/src/gd_crop.c
deleted file mode 100644
index 05a1dce1701..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_crop.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/**
- * File: Cropping
- *
- * Crop an image
- *
- * Some functions to crop images, automatically (auto detection of the border
- * color), using a given color (with or without tolerance) or using a given
- * rectangle.
- *
- * Example:
- * (start code)
- * im2 = gdImageAutoCrop(im, GD_CROP_SIDES);
- * if (im2) {
- * gdImageDestroy(im); // unless you need the original image subsequently
- * // do something with the cropped image
- * }
- * gdImageDestroy(im2);
- * (end code)
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include "gd.h"
-#include "gd_color.h"
-
-static int gdGuessBackgroundColorFromCorners(gdImagePtr im, int *color);
-
-/**
- * Function: gdImageCrop
- *
- * Crop an image to a given rectangle
- *
- * Parameters:
- * src - The image.
- * crop - The cropping rectangle, see <gdRect>.
- *
- * Returns:
- * The newly created cropped image, or NULL on failure.
- *
- * See also:
- * - <gdImageCropAuto>
- * - <gdImageCropThreshold>
- */
-BGD_DECLARE(gdImagePtr) gdImageCrop(gdImagePtr src, const gdRect *crop)
-{
- gdImagePtr dst;
- int alphaBlendingFlag;
-
- if (gdImageTrueColor(src)) {
- dst = gdImageCreateTrueColor(crop->width, crop->height);
- } else {
- dst = gdImageCreate(crop->width, crop->height);
- }
- if (!dst) return NULL;
- alphaBlendingFlag = dst->alphaBlendingFlag;
- gdImageAlphaBlending(dst, gdEffectReplace);
- gdImageCopy(dst, src, 0, 0, crop->x, crop->y, crop->width, crop->height);
- gdImageAlphaBlending(dst, alphaBlendingFlag);
-
- return dst;
-}
-
-/**
- * Function: gdImageCropAuto
- *
- * Crop an image automatically
- *
- * This function detects the cropping area according to the given _mode_.
- *
- * Parameters:
- * im - The image.
- * mode - The cropping mode, see <gdCropMode>.
- *
- * Returns:
- * The newly created cropped image, or NULL on failure.
- *
- * See also:
- * - <gdImageCrop>
- * - <gdImageCropThreshold>
- */
-BGD_DECLARE(gdImagePtr) gdImageCropAuto(gdImagePtr im, const unsigned int mode)
-{
- const int width = gdImageSX(im);
- const int height = gdImageSY(im);
-
- int x,y;
- int color, match;
- gdRect crop;
-
- crop.x = 0;
- crop.y = 0;
- crop.width = 0;
- crop.height = 0;
-
- switch (mode) {
- case GD_CROP_TRANSPARENT:
- color = gdImageGetTransparent(im);
- break;
-
- case GD_CROP_BLACK:
- color = gdImageColorClosestAlpha(im, 0, 0, 0, 0);
- break;
-
- case GD_CROP_WHITE:
- color = gdImageColorClosestAlpha(im, 255, 255, 255, 0);
- break;
-
- case GD_CROP_SIDES:
- gdGuessBackgroundColorFromCorners(im, &color);
- break;
-
- case GD_CROP_DEFAULT:
- default:
- color = gdImageGetTransparent(im);
- break;
- }
-
- /* TODO: Add gdImageGetRowPtr and works with ptr at the row level
- * for the true color and palette images
- * new formats will simply work with ptr
- */
- match = 1;
- for (y = 0; match && y < height; y++) {
- for (x = 0; match && x < width; x++) {
- match = (color == gdImageGetPixel(im, x,y));
- }
- }
-
- /* Whole image would be cropped > bye */
- if (match) {
- return NULL;
- }
-
- crop.y = y - 1;
-
- match = 1;
- for (y = height - 1; match && y >= 0; y--) {
- for (x = 0; match && x < width; x++) {
- match = (color == gdImageGetPixel(im, x,y));
- }
- }
- crop.height = y - crop.y + 2;
-
- match = 1;
- for (x = 0; match && x < width; x++) {
- for (y = 0; match && y < crop.y + crop.height; y++) {
- match = (color == gdImageGetPixel(im, x,y));
- }
- }
- crop.x = x - 1;
-
- match = 1;
- for (x = width - 1; match && x >= 0; x--) {
- for (y = 0; match && y < crop.y + crop.height; y++) {
- match = (color == gdImageGetPixel(im, x,y));
- }
- }
- crop.width = x - crop.x + 2;
-
- return gdImageCrop(im, &crop);
-}
-
-/**
- * Function: gdImageCropThreshold
- *
- * Crop an image using a given color
- *
- * The _threshold_ defines the tolerance to be used while comparing the image
- * color and the color to crop. The method used to calculate the color
- * difference is based on the color distance in the RGB(A) cube.
- *
- * Parameters:
- * im - The image.
- * color - The crop color.
- * threshold - The crop threshold.
- *
- * Returns:
- * The newly created cropped image, or NULL on failure.
- *
- * See also:
- * - <gdImageCrop>
- * - <gdImageCropAuto>
- */
-BGD_DECLARE(gdImagePtr) gdImageCropThreshold(gdImagePtr im, const unsigned int color, const float threshold)
-{
- const int width = gdImageSX(im);
- const int height = gdImageSY(im);
-
- int x,y;
- int match;
- gdRect crop;
-
- crop.x = 0;
- crop.y = 0;
- crop.width = 0;
- crop.height = 0;
-
- /* Pierre: crop everything sounds bad */
- if (threshold > 100.0) {
- return NULL;
- }
-
- if (!gdImageTrueColor(im) && color >= gdImageColorsTotal(im)) {
- return NULL;
- }
-
- /* TODO: Add gdImageGetRowPtr and works with ptr at the row level
- * for the true color and palette images
- * new formats will simply work with ptr
- */
- match = 1;
- for (y = 0; match && y < height; y++) {
- for (x = 0; match && x < width; x++) {
- match = (gdColorMatch(im, color, gdImageGetPixel(im, x,y), threshold)) > 0;
- }
- }
-
- /* Whole image would be cropped > bye */
- if (match) {
- return NULL;
- }
-
- crop.y = y - 1;
-
- match = 1;
- for (y = height - 1; match && y >= 0; y--) {
- for (x = 0; match && x < width; x++) {
- match = (gdColorMatch(im, color, gdImageGetPixel(im, x, y), threshold)) > 0;
- }
- }
- crop.height = y - crop.y + 2;
-
- match = 1;
- for (x = 0; match && x < width; x++) {
- for (y = 0; match && y < crop.y + crop.height; y++) {
- match = (gdColorMatch(im, color, gdImageGetPixel(im, x,y), threshold)) > 0;
- }
- }
- crop.x = x - 1;
-
- match = 1;
- for (x = width - 1; match && x >= 0; x--) {
- for (y = 0; match && y < crop.y + crop.height; y++) {
- match = (gdColorMatch(im, color, gdImageGetPixel(im, x,y), threshold)) > 0;
- }
- }
- crop.width = x - crop.x + 2;
-
- return gdImageCrop(im, &crop);
-}
-
-/* This algorithm comes from pnmcrop (http://netpbm.sourceforge.net/)
- * Three steps:
- * - if 3 corners are equal.
- * - if two are equal.
- * - Last solution: average the colors
- */
-static int gdGuessBackgroundColorFromCorners(gdImagePtr im, int *color)
-{
- const int tl = gdImageGetPixel(im, 0, 0);
- const int tr = gdImageGetPixel(im, gdImageSX(im) - 1, 0);
- const int bl = gdImageGetPixel(im, 0, gdImageSY(im) -1);
- const int br = gdImageGetPixel(im, gdImageSX(im) - 1, gdImageSY(im) -1);
-
- if (tr == bl && tr == br) {
- *color = tr;
- return 3;
- } else if (tl == bl && tl == br) {
- *color = tl;
- return 3;
- } else if (tl == tr && tl == br) {
- *color = tl;
- return 3;
- } else if (tl == tr && tl == bl) {
- *color = tl;
- return 3;
- } else if (tl == tr || tl == bl || tl == br) {
- *color = tl;
- return 2;
- } else if (tr == bl || tr == br) {
- *color = tr;
- return 2;
- } else if (br == bl) {
- *color = bl;
- return 2;
- } else {
- register int r,b,g,a;
-
- r = (2 + gdImageRed(im, tl) + gdImageRed(im, tr) + gdImageRed(im, bl) + gdImageRed(im, br)) / 4;
- g = (2 + gdImageGreen(im, tl) + gdImageGreen(im, tr) + gdImageGreen(im, bl) + gdImageGreen(im, br)) / 4;
- b = (2 + gdImageBlue(im, tl) + gdImageBlue(im, tr) + gdImageBlue(im, bl) + gdImageBlue(im, br)) / 4;
- a = (2 + gdImageAlpha(im, tl) + gdImageAlpha(im, tr) + gdImageAlpha(im, bl) + gdImageAlpha(im, br)) / 4;
- *color = gdImageColorClosestAlpha(im, r, g, b, a);
- return 0;
- }
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_errors.h b/Build/source/libs/gd/libgd-src/src/gd_errors.h
deleted file mode 100644
index 4ecee94b386..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_errors.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef GD_ERRORS_H
-#define GD_ERRORS_H
-
-#ifndef _WIN32
-# include <syslog.h>
-#else
-/*
- * priorities/facilities are encoded into a single 32-bit quantity, where the
- * bottom 3 bits are the priority (0-7) and the top 28 bits are the facility
- * (0-big number). Both the priorities and the facilities map roughly
- * one-to-one to strings in the syslogd(8) source code. This mapping is
- * included in this file.
- *
- * priorities (these are ordered)
- */
-# define LOG_EMERG 0 /* system is unusable */
-# define LOG_ALERT 1 /* action must be taken immediately */
-# define LOG_CRIT 2 /* critical conditions */
-# define LOG_ERR 3 /* error conditions */
-# define LOG_WARNING 4 /* warning conditions */
-# define LOG_NOTICE 5 /* normal but significant condition */
-# define LOG_INFO 6 /* informational */
-# define LOG_DEBUG 7 /* debug-level messages */
-#endif
-
-/*
-LOG_EMERG system is unusable
-LOG_ALERT action must be taken immediately
-LOG_CRIT critical conditions
-LOG_ERR error conditions
-LOG_WARNING warning conditions
-LOG_NOTICE normal, but significant, condition
-LOG_INFO informational message
-LOG_DEBUG debug-level message
-*/
-
-#define GD_ERROR LOG_ERR
-#define GD_WARNING LOG_WARNING
-#define GD_NOTICE LOG_NOTICE
-#define GD_INFO LOG_INFO
-#define GD_DEBUG LOG_DEBUG
-
-void gd_error(const char *format, ...);
-void gd_error_ex(int priority, const char *format, ...);
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_filename.c b/Build/source/libs/gd/libgd-src/src/gd_filename.c
deleted file mode 100644
index d668b01ddf3..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_filename.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/* Convenience functions to read or write images from or to disk,
- * determining file type from the filename extension. */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include "gd.h"
-
-typedef gdImagePtr (BGD_STDCALL *ReadFn)(FILE *in);
-typedef void (BGD_STDCALL *WriteFn)(gdImagePtr im, FILE *out);
-typedef gdImagePtr (BGD_STDCALL *LoadFn)(char *filename);
-
-#ifdef HAVE_LIBZ
-static void BGD_STDCALL writegd2(gdImagePtr im, FILE *out) {
- gdImageGd2(im, out, 0, GD2_FMT_COMPRESSED);
-}/* writegd*/
-#endif
-
-#ifdef HAVE_LIBJPEG
-static void BGD_STDCALL writejpeg(gdImagePtr im, FILE *out) {
- gdImageJpeg(im, out, -1);
-}/* writejpeg*/
-#endif
-
-static void BGD_STDCALL writewbmp(gdImagePtr im, FILE *out) {
- int fg = gdImageColorClosest(im, 0, 0, 0);
-
- gdImageWBMP(im, fg, out);
-}/* writejpeg*/
-
-static void BGD_STDCALL writebmp(gdImagePtr im, FILE *out) {
- gdImageBmp(im, out, GD_TRUE);
-}/* writejpeg*/
-
-
-enum FType {UNKNOWN, PNG, JPG, GIF, TIFF, GD, GD2, WEBP};
-static struct FileType {
- const char *ext;
- ReadFn reader;
- WriteFn writer;
- LoadFn loader;
-} Types[] = {
- {".gif", gdImageCreateFromGif, gdImageGif, NULL},
- {".gd", gdImageCreateFromGd, gdImageGd, NULL},
- {".wbmp", gdImageCreateFromWBMP, writewbmp, NULL},
- {".bmp", gdImageCreateFromBmp, writebmp, NULL},
-
- {".xbm", gdImageCreateFromXbm, NULL, NULL},
- {".tga", gdImageCreateFromTga, NULL, NULL},
-
-#ifdef HAVE_LIBPNG
- {".png", gdImageCreateFromPng, gdImagePng, NULL},
-#endif
-
-#ifdef HAVE_LIBJPEG
- {".jpg", gdImageCreateFromJpeg, writejpeg, NULL},
- {".jpeg", gdImageCreateFromJpeg, writejpeg, NULL},
-#endif
-
-#ifdef HAVE_LIBTIFF
- {".tiff", gdImageCreateFromTiff, gdImageTiff, NULL},
- {".tif" , gdImageCreateFromTiff, gdImageTiff, NULL},
-#endif
-
-#ifdef HAVE_LIBZ
- {".gd2", gdImageCreateFromGd2, writegd2, NULL},
-#endif
-
-#ifdef HAVE_LIBWEBP
- {".webp", gdImageCreateFromWebp, gdImageWebp, NULL},
-#endif
-
-#ifdef HAVE_LIBXPM
- {".xpm", NULL, NULL, gdImageCreateFromXpm},
-#endif
-
- {NULL, NULL, NULL}
-};
-
-
-struct FileType *
-ftype(const char *filename) {
- int n;
- char *ext;
-
- /* Find the file extension (i.e. the last period in the string. */
- ext = strrchr(filename, '.');
- if (!ext) return NULL;
-
- for (n = 0; Types[n].ext; n++) {
- if (strcasecmp(ext, Types[n].ext) == 0) {
- return &Types[n];
- }/* if */
- }/* for */
-
- return NULL;
-}/* ftype*/
-
-
-/*
- Function: gdSupportsFileType
-
- Tests if a given file type is supported by GD.
-
- Given the name of an image file (which does not have to exist),
- returns 1 (i.e. TRUE) if <gdImageCreateFromFile> can read a file
- of that type. This is useful if you do not know which image types
- were enabled at compile time.
-
- If _writing_ is true, the result will be true only if
- <gdImageFile> can write a file of this type.
-
- Note that filename parsing is done exactly the same as is done by
- <gdImageCreateFromFile> and <gdImageFile> and is subject to the
- same limitations.
-
- Assuming LibGD is compiled with support for these image types, the
- following extensions are supported:
-
- - .gif
- - .gd, .gd2
- - .wbmp
- - .bmp
- - .xbm
- - .tga
- - .png
- - .jpg, .jpeg
- - .tiff, .tif
- - .webp
- - .xpm
-
- Names are parsed case-insenstively.
-
- Parameters:
-
- filename - Filename with tested extension.
- writing - Flag: true tests if writing works
-
- Returns:
-
- GD_TRUE (1) if the file type is supported, GD_FALSE (0) if not.
-
-*/
-BGD_DECLARE(int)
-gdSupportsFileType(const char *filename, int writing) {
- struct FileType *entry = ftype(filename);
- return !!entry && (!writing || !!entry->writer);
-}/* gdSupportsFileType*/
-
-
-/*
- Function: gdImageCreateFromFile
-
- Read an image file of any supported.
-
- Given the path to a file, <gdImageCreateFromFile> will open the
- file, read its contents with the appropriate _gdImageCreateFrom*_
- function and return it.
-
- File type is determined by the filename extension, so having an
- incorrect extension will probably not work. For example, renaming
- PNG image "foo.png" to "foo.gif" and then attempting to load it
- will fail even if GD supports both formats. See
- <gdSupportsFiletype> for more details.
-
- NULL is returned on error.
-
- Parameters:
-
- filename - the input file name
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
-*/
-
-BGD_DECLARE(gdImagePtr)
-gdImageCreateFromFile(const char *filename) {
- struct FileType *entry = ftype(filename);
- FILE *fh;
- gdImagePtr result;
-
- if (!entry) return NULL;
- if (entry->loader) return entry->loader((char *)filename);
- if (!entry->reader) return NULL;
-
- fh = fopen(filename, "rb");
- if (!fh) return NULL;
-
- result = entry->reader(fh);
-
- fclose(fh);
-
- return result;
-}/* gdImageCreateFromFile*/
-
-
-
-/*
- Function: gdImageFile
-
- Writes an image to a file in the format indicated by the filename.
-
- File type is determined by the extension of the file name. See
- <gdSupportsFiletype> for an overview of the parsing.
-
- For file types that require extra arguments, <gdImageFile>
- attempts to use sane defaults:
-
- <gdImageGd2> - chunk size = 0, compression is enabled.
- <gdImageJpeg> - quality = -1 (i.e. the reasonable default)
- <gdImageWBMP> - foreground is the darkest available color
-
- Everything else is called with the two-argument function and so
- will use the default values.
-
- <gdImageFile> has some rudimentary error detection and will return
- GD_FALSE (0) if a detectable error occurred. However, the image
- loaders do not normally return their error status so a result of
- GD_TRUE (1) does **not** mean the file was saved successfully.
-
- Parameters:
-
- im - The image to save.
- filename - The path to the file to which the image is saved.
-
- Returns:
-
- GD_FALSE (0) if an error was detected, GD_TRUE (1) if not.
-
-*/
-
-BGD_DECLARE(int)
-gdImageFile(gdImagePtr im, const char *filename) {
- struct FileType *entry = ftype(filename);
- FILE *fh;
-
- if (!entry || !entry->writer) return GD_FALSE;
-
- fh = fopen(filename, "wb");
- if (!fh) return GD_FALSE;
-
- entry->writer(im, fh);
-
- fclose(fh);
-
- return GD_TRUE;
-}/* gdImageFile*/
diff --git a/Build/source/libs/gd/libgd-src/src/gd_filter.c b/Build/source/libs/gd/libgd-src/src/gd_filter.c
deleted file mode 100644
index 7855190f090..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_filter.c
+++ /dev/null
@@ -1,1062 +0,0 @@
-/**
- * File: Image Filters
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_intern.h"
-
-#ifdef _WIN32
-# include <windows.h>
-#else
-# include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <time.h>
-#include <math.h>
-
-#undef NDEBUG
-/* Comment out this line to enable asserts.
- * TODO: This logic really belongs in cmake and configure.
- */
-#define NDEBUG 1
-#include <assert.h>
-
-typedef int (BGD_STDCALL *FuncPtr)(gdImagePtr, int, int);
-
-#define GET_PIXEL_FUNCTION(src)(src->trueColor?gdImageGetTrueColorPixel:gdImageGetPixel)
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#define MAX(a,b) ((a)<(b)?(b):(a))
-
-#ifdef _WIN32
-# define GD_SCATTER_SEED() (unsigned int)(time(0) * GetCurrentProcessId())
-#else
-# define GD_SCATTER_SEED() (unsigned int)(time(0) * getpid())
-#endif
-
-/*
- Function: gdImageScatter
- */
-BGD_DECLARE(int) gdImageScatter(gdImagePtr im, int sub, int plus)
-{
- gdScatter s;
-
- s.sub = sub;
- s.plus = plus;
- s.num_colors = 0;
- s.seed = GD_SCATTER_SEED();
- return gdImageScatterEx(im, &s);
-}
-
-/*
- Function: gdImageScatterColor
- */
-BGD_DECLARE(int) gdImageScatterColor(gdImagePtr im, int sub, int plus, int colors[], unsigned int num_colors)
-{
- gdScatter s;
-
- s.sub = sub;
- s.plus = plus;
- s.colors = colors;
- s.num_colors = num_colors;
- s.seed = GD_SCATTER_SEED();
- return gdImageScatterEx(im, &s);
-}
-
-/*
- Function: gdImageScatterEx
- */
-BGD_DECLARE(int) gdImageScatterEx(gdImagePtr im, gdScatterPtr scatter)
-{
- register int x, y;
- int dest_x, dest_y;
- int pxl, new_pxl;
- unsigned int n;
- int sub = scatter->sub, plus = scatter->plus;
-
- if (plus == 0 && sub == 0) {
- return 1;
- } else if (sub >= plus) {
- return 0;
- }
-
- (void)srand(scatter->seed);
-
- if (scatter->num_colors) {
- for (y = 0; y < im->sy; y++) {
- for (x = 0; x < im->sx; x++) {
- dest_x = (int) (x + ((rand() % (plus - sub)) + sub));
- dest_y = (int) (y + ((rand() % (plus - sub)) + sub));
-
- if (!gdImageBoundsSafe(im, dest_x, dest_y)) {
- continue;
- }
-
- pxl = gdImageGetPixel(im, x, y);
- new_pxl = gdImageGetPixel(im, dest_x, dest_y);
-
- for (n = 0; n < scatter->num_colors; n++) {
- if (pxl == scatter->colors[n]) {
- gdImageSetPixel(im, dest_x, dest_y, pxl);
- gdImageSetPixel(im, x, y, new_pxl);
- }
- }
- }
- }
- } else {
- for (y = 0; y < im->sy; y++) {
- for (x = 0; x < im->sx; x++) {
- dest_x = (int) (x + ((rand() % (plus - sub)) + sub));
- dest_y = (int) (y + ((rand() % (plus - sub)) + sub));
-
- if (!gdImageBoundsSafe(im, dest_x, dest_y)) {
- continue;
- }
-
- pxl = gdImageGetPixel(im, x, y);
- new_pxl = gdImageGetPixel(im, dest_x, dest_y);
-
- gdImageSetPixel(im, dest_x, dest_y, pxl);
- gdImageSetPixel(im, x, y, new_pxl);
- }
- }
- }
-
- return 1;
-}
-
-/*
- Function: gdImagePixelate
- */
-BGD_DECLARE(int) gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode)
-{
- int x, y;
-
- if (block_size <= 0) {
- return 0;
- } else if (block_size == 1) {
- return 1;
- }
- switch (mode) {
- case GD_PIXELATE_UPPERLEFT:
- for (y = 0; y < im->sy; y += block_size) {
- for (x = 0; x < im->sx; x += block_size) {
- if (gdImageBoundsSafe(im, x, y)) {
- int c = gdImageGetPixel(im, x, y);
- gdImageFilledRectangle(im, x, y, x + block_size - 1, y + block_size - 1, c);
- }
- }
- }
- break;
- case GD_PIXELATE_AVERAGE:
- for (y = 0; y < im->sy; y += block_size) {
- for (x = 0; x < im->sx; x += block_size) {
- int a, r, g, b, c;
- int total;
- int cx, cy;
-
- a = r = g = b = c = total = 0;
- /* sampling */
- for (cy = 0; cy < block_size; cy++) {
- for (cx = 0; cx < block_size; cx++) {
- if (!gdImageBoundsSafe(im, x + cx, y + cy)) {
- continue;
- }
- c = gdImageGetPixel(im, x + cx, y + cy);
- a += gdImageAlpha(im, c);
- r += gdImageRed(im, c);
- g += gdImageGreen(im, c);
- b += gdImageBlue(im, c);
- total++;
- }
- }
- /* drawing */
- if (total > 0) {
- c = gdImageColorResolveAlpha(im, r / total, g / total, b / total, a / total);
- gdImageFilledRectangle(im, x, y, x + block_size - 1, y + block_size - 1, c);
- }
- }
- }
- break;
- default:
- return 0;
- }
- return 1;
-}
-
-/**
- * Function: gdImageNegate
- *
- * Invert an image
- *
- * Parameters:
- * src - The image.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- */
-BGD_DECLARE(int) gdImageNegate(gdImagePtr src)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f (src, x, y);
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- new_pxl = gdImageColorAllocateAlpha(src, 255-r, 255-g, 255-b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, 255-r, 255-g, 255-b, a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- return 1;
-}
-
-/**
- * Function: gdImageGrayScale
- *
- * Convert an image to grayscale
- *
- * The red, green and blue components of each pixel are replaced by their
- * weighted sum using the same coefficients as the REC.601 luma (Y')
- * calculation. The alpha components are retained.
- *
- * For palette images the result may differ due to palette limitations.
- *
- * Parameters:
- * src - The image.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- */
-BGD_DECLARE(int) gdImageGrayScale(gdImagePtr src)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- FuncPtr f;
- int alpha_blending;
-
- if (src==NULL) {
- return 0;
- }
-
- alpha_blending = src->alphaBlendingFlag;
- gdImageAlphaBlending(src, gdEffectReplace);
-
- f = GET_PIXEL_FUNCTION(src);
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f (src, x, y);
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
- r = g = b = (int) (.299 * r + .587 * g + .114 * b);
-
- new_pxl = gdImageColorAllocateAlpha(src, r, g, b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, r, g, b, a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- gdImageAlphaBlending(src, alpha_blending);
-
- return 1;
-}
-
-/**
- * Function: gdImageBrightness
- *
- * Change the brightness of an image
- *
- * Parameters:
- * src - The image.
- * brightness - The value to add to the color channels of all pixels.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageContrast>
- * - <gdImageColor>
- */
-BGD_DECLARE(int) gdImageBrightness(gdImagePtr src, int brightness)
-{
- int x, y;
- int r,g,b,a;
- int new_pxl, pxl;
- FuncPtr f;
-
- if (src==NULL || (brightness < -255 || brightness > 255)) {
- return 0;
- }
-
- if (brightness==0) {
- return 1;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f (src, x, y);
-
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- r = r + brightness;
- g = g + brightness;
- b = b + brightness;
-
- r = (r > 255)? 255 : ((r < 0)? 0:r);
- g = (g > 255)? 255 : ((g < 0)? 0:g);
- b = (b > 255)? 255 : ((b < 0)? 0:b);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)r, (int)g, (int)b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)r, (int)g, (int)b, a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- return 1;
-}
-
-
-/**
- * Function: gdImageContrast
- *
- * Change the contrast of an image
- *
- * Parameters:
- * src - The image.
- * contrast - The contrast adjustment value. Negative values increase, postive
- * values decrease the contrast. The larger the absolute value, the
- * stronger the effect.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageBrightness>
- */
-BGD_DECLARE(int) gdImageContrast(gdImagePtr src, double contrast)
-{
- int x, y;
- int r,g,b,a;
- double rf,gf,bf;
- int new_pxl, pxl;
-
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- contrast = (double)(100.0-contrast)/100.0;
- contrast = contrast*contrast;
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- pxl = f(src, x, y);
-
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- rf = (double)r/255.0;
- rf = rf-0.5;
- rf = rf*contrast;
- rf = rf+0.5;
- rf = rf*255.0;
-
- bf = (double)b/255.0;
- bf = bf-0.5;
- bf = bf*contrast;
- bf = bf+0.5;
- bf = bf*255.0;
-
- gf = (double)g/255.0;
- gf = gf-0.5;
- gf = gf*contrast;
- gf = gf+0.5;
- gf = gf*255.0;
-
- rf = (rf > 255.0)? 255.0 : ((rf < 0.0)? 0.0:rf);
- gf = (gf > 255.0)? 255.0 : ((gf < 0.0)? 0.0:gf);
- bf = (bf > 255.0)? 255.0 : ((bf < 0.0)? 0.0:bf);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)rf, (int)gf, (int)bf, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)rf, (int)gf, (int)bf, a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- return 1;
-}
-
-
-/**
- * Function: gdImageColor
- *
- * Change channel values of an image
- *
- * Parameters:
- * src - The image.
- * red - The value to add to the red channel of all pixels.
- * green - The value to add to the green channel of all pixels.
- * blue - The value to add to the blue channel of all pixels.
- * alpha - The value to add to the alpha channel of all pixels.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageBrightness>
- */
-BGD_DECLARE(int) gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha)
-{
- int x, y;
- int new_pxl, pxl;
- FuncPtr f;
-
- if (src == NULL) {
- return 0;
- }
-
- f = GET_PIXEL_FUNCTION(src);
-
- for (y=0; y<src->sy; ++y) {
- for (x=0; x<src->sx; ++x) {
- int r,g,b,a;
-
- pxl = f(src, x, y);
- r = gdImageRed(src, pxl);
- g = gdImageGreen(src, pxl);
- b = gdImageBlue(src, pxl);
- a = gdImageAlpha(src, pxl);
-
- r = r + red;
- g = g + green;
- b = b + blue;
- a = a + alpha;
-
- r = (r > 255)? 255 : ((r < 0)? 0 : r);
- g = (g > 255)? 255 : ((g < 0)? 0 : g);
- b = (b > 255)? 255 : ((b < 0)? 0 : b);
- a = (a > 127)? 127 : ((a < 0)? 0 : a);
-
- new_pxl = gdImageColorAllocateAlpha(src, r, g, b, a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, r, g, b, a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- return 1;
-}
-
-/**
- * Function: gdImageConvolution
- *
- * Apply a convolution matrix to an image
- *
- * Depending on the matrix a wide range of effects can be accomplished, e.g.
- * blurring, sharpening, embossing and edge detection.
- *
- * Parameters:
- * src - The image.
- * filter - The 3x3 convolution matrix.
- * filter_div - The value to divide the convoluted channel values by.
- * offset - The value to add to the convoluted channel values.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageEdgeDetectQuick>
- * - <gdImageGaussianBlur>
- * - <gdImageEmboss>
- * - <gdImageMeanRemoval>
- * - <gdImageSmooth>
- */
-BGD_DECLARE(int) gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, float offset)
-{
- int x, y, i, j, new_a;
- float new_r, new_g, new_b;
- int new_pxl, pxl=0;
- gdImagePtr srcback;
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- /* We need the orinal image with each safe neoghb. pixel */
- srcback = gdImageCreateTrueColor (src->sx, src->sy);
- if (srcback==NULL) {
- return 0;
- }
-
- gdImageSaveAlpha(srcback, 1);
- new_pxl = gdImageColorAllocateAlpha(srcback, 0, 0, 0, 127);
- gdImageFill(srcback, 0, 0, new_pxl);
-
- gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
-
- f = GET_PIXEL_FUNCTION(src);
-
- for ( y=0; y<src->sy; y++) {
- for(x=0; x<src->sx; x++) {
- new_r = new_g = new_b = 0;
- pxl = f(srcback, x, y);
- new_a = gdImageAlpha(srcback, pxl);
-
- for (j=0; j<3; j++) {
- int yv = MIN(MAX(y - 1 + j, 0), src->sy - 1);
- for (i=0; i<3; i++) {
- pxl = f(srcback, MIN(MAX(x - 1 + i, 0), src->sx - 1), yv);
- new_r += (float)gdImageRed(srcback, pxl) * filter[j][i];
- new_g += (float)gdImageGreen(srcback, pxl) * filter[j][i];
- new_b += (float)gdImageBlue(srcback, pxl) * filter[j][i];
- }
- }
-
- new_r = (new_r/filter_div)+offset;
- new_g = (new_g/filter_div)+offset;
- new_b = (new_b/filter_div)+offset;
-
- new_r = (new_r > 255.0f)? 255.0f : ((new_r < 0.0f)? 0.0f:new_r);
- new_g = (new_g > 255.0f)? 255.0f : ((new_g < 0.0f)? 0.0f:new_g);
- new_b = (new_b > 255.0f)? 255.0f : ((new_b < 0.0f)? 0.0f:new_b);
-
- new_pxl = gdImageColorAllocateAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- gdImageDestroy(srcback);
- return 1;
-}
-
-/*
- Function: gdImageSelectiveBlur
- */
-BGD_DECLARE(int) gdImageSelectiveBlur( gdImagePtr src)
-{
- int x, y, i, j;
- float new_r, new_g, new_b;
- int new_pxl, cpxl, pxl, new_a=0;
- float flt_r [3][3];
- float flt_g [3][3];
- float flt_b [3][3];
- float flt_r_sum, flt_g_sum, flt_b_sum;
-
- gdImagePtr srcback;
- FuncPtr f;
-
- if (src==NULL) {
- return 0;
- }
-
- /* We need the orinal image with each safe neoghb. pixel */
- srcback = gdImageCreateTrueColor (src->sx, src->sy);
- if (srcback==NULL) {
- return 0;
- }
- gdImageCopy(srcback, src,0,0,0,0,src->sx,src->sy);
-
- f = GET_PIXEL_FUNCTION(src);
-
- for(y = 0; y<src->sy; y++) {
- for (x=0; x<src->sx; x++) {
- flt_r_sum = flt_g_sum = flt_b_sum = 0.0;
- cpxl = f(src, x, y);
-
- for (j=0; j<3; j++) {
- for (i=0; i<3; i++) {
- if ((j == 1) && (i == 1)) {
- flt_r[1][1] = flt_g[1][1] = flt_b[1][1] = 0.5;
- } else {
- pxl = f(src, x-(3>>1)+i, y-(3>>1)+j);
- new_a = gdImageAlpha(srcback, pxl);
-
- new_r = ((float)gdImageRed(srcback, cpxl)) - ((float)gdImageRed (srcback, pxl));
-
- if (new_r < 0.0f) {
- new_r = -new_r;
- }
- if (new_r != 0) {
- flt_r[j][i] = 1.0f/new_r;
- } else {
- flt_r[j][i] = 1.0f;
- }
-
- new_g = ((float)gdImageGreen(srcback, cpxl)) - ((float)gdImageGreen(srcback, pxl));
-
- if (new_g < 0.0f) {
- new_g = -new_g;
- }
- if (new_g != 0) {
- flt_g[j][i] = 1.0f/new_g;
- } else {
- flt_g[j][i] = 1.0f;
- }
-
- new_b = ((float)gdImageBlue(srcback, cpxl)) - ((float)gdImageBlue(srcback, pxl));
-
- if (new_b < 0.0f) {
- new_b = -new_b;
- }
- if (new_b != 0) {
- flt_b[j][i] = 1.0f/new_b;
- } else {
- flt_b[j][i] = 1.0f;
- }
- }
-
- flt_r_sum += flt_r[j][i];
- flt_g_sum += flt_g[j][i];
- flt_b_sum += flt_b [j][i];
- }
- }
-
- for (j=0; j<3; j++) {
- for (i=0; i<3; i++) {
- if (flt_r_sum != 0.0) {
- flt_r[j][i] /= flt_r_sum;
- }
- if (flt_g_sum != 0.0) {
- flt_g[j][i] /= flt_g_sum;
- }
- if (flt_b_sum != 0.0) {
- flt_b [j][i] /= flt_b_sum;
- }
- }
- }
-
- new_r = new_g = new_b = 0.0;
-
- for (j=0; j<3; j++) {
- for (i=0; i<3; i++) {
- pxl = f(src, x-(3>>1)+i, y-(3>>1)+j);
- new_r += (float)gdImageRed(srcback, pxl) * flt_r[j][i];
- new_g += (float)gdImageGreen(srcback, pxl) * flt_g[j][i];
- new_b += (float)gdImageBlue(srcback, pxl) * flt_b[j][i];
- }
- }
-
- new_r = (new_r > 255.0f)? 255.0f : ((new_r < 0.0f)? 0.0f:new_r);
- new_g = (new_g > 255.0f)? 255.0f : ((new_g < 0.0f)? 0.0f:new_g);
- new_b = (new_b > 255.0f)? 255.0f : ((new_b < 0.0f)? 0.0f:new_b);
- new_pxl = gdImageColorAllocateAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- if (new_pxl == -1) {
- new_pxl = gdImageColorClosestAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a);
- }
- gdImageSetPixel (src, x, y, new_pxl);
- }
- }
- gdImageDestroy(srcback);
- return 1;
-}
-
-/**
- * Function: gdImageEdgeDetectQuick
- *
- * Edge detection of an image
- *
- * (see edge_detect_quick.jpg)
- *
- * Parameters:
- * src - The image.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageMeanRemoval>
- * - <gdImageConvolution>
- */
-BGD_DECLARE(int) gdImageEdgeDetectQuick(gdImagePtr src)
-{
- float filter[3][3] = {{-1.0,0.0,-1.0},
- {0.0,4.0,0.0},
- {-1.0,0.0,-1.0}};
-
- return gdImageConvolution(src, filter, 1, 127);
-}
-
-/*
- Function: gdImageGaussianBlur
-
- <gdImageGaussianBlur> performs a Gaussian blur of radius 1 on the
- image. The image is modified in place.
-
- *NOTE:* You will almost certain want to use
- <gdImageCopyGaussianBlurred> instead, as it allows you to change
- your kernel size and sigma value. Future versions of this
- function may fall back to calling it instead of
- <gdImageConvolution>, causing subtle changes so be warned.
-
- Parameters:
- im - The image to blur
-
- Returns:
- GD_TRUE (1) on success, GD_FALSE (0) on failure.
-
-*/
-
-BGD_DECLARE(int) gdImageGaussianBlur(gdImagePtr im)
-{
- float filter[3][3] = {
- {1.0, 2.0, 1.0},
- {2.0, 4.0, 2.0},
- {1.0, 2.0, 1.0}
- };
-
- return gdImageConvolution(im, filter, 16, 0);
-}
-
-/**
- * Function: gdImageEmboss
- *
- * Emboss an image
- *
- * (see emboss.jpg)
- *
- * Parameters:
- * im - The image.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageConvolution>
- */
-BGD_DECLARE(int) gdImageEmboss(gdImagePtr im)
-{
-/*
- float filter[3][3] = {{1.0,1.0,1.0},
- {0.0,0.0,0.0},
- {-1.0,-1.0,-1.0}};
-*/
- float filter[3][3] = {{ 1.5, 0.0, 0.0},
- { 0.0, 0.0, 0.0},
- { 0.0, 0.0,-1.5}};
-
- return gdImageConvolution(im, filter, 1, 127);
-}
-
-/**
- * Function: gdImageMeanRemoval
- *
- * Mean removal of an image
- *
- * (see mean_removal.jpg)
- *
- * Parameters:
- * im - The image.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageEdgeDetectQuick>
- * - <gdImageConvolution>
- */
-BGD_DECLARE(int) gdImageMeanRemoval(gdImagePtr im)
-{
- float filter[3][3] = {{-1.0,-1.0,-1.0},
- {-1.0,9.0,-1.0},
- {-1.0,-1.0,-1.0}};
-
- return gdImageConvolution(im, filter, 1, 0);
-}
-
-/**
- * Function: gdImageSmooth
- *
- * Smooth an image
- *
- * (see smooth.jpg)
- *
- * Parameters:
- * im - The image.
- * weight - The strength of the smoothing.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdImageConvolution>
- */
-BGD_DECLARE(int) gdImageSmooth(gdImagePtr im, float weight)
-{
- float filter[3][3] = {{1.0,1.0,1.0},
- {1.0,0.0,1.0},
- {1.0,1.0,1.0}};
-
- filter[1][1] = weight;
-
- return gdImageConvolution(im, filter, weight+8, 0);
-}
-
-
-/* ======================== Gaussian Blur Code ======================== */
-
-/* Return an array of coefficients for 'radius' and 'sigma' (sigma >=
- * 0 means compute it). Result length is 2*radius+1. */
-static double *
-gaussian_coeffs(int radius, double sigmaArg) {
- const double sigma = (sigmaArg <= 0.0) ? (2.0/3.0)*radius : sigmaArg;
- const double s = 2.0 * sigma * sigma;
- double *result;
- double sum = 0;
- int x, n, count;
-
- count = 2*radius + 1;
-
- result = gdMalloc(sizeof(double) * count);
- if (!result) {
- return NULL;
- }/* if */
-
- for (x = -radius; x <= radius; x++) {
- double coeff = exp(-(x*x)/s);
-
- sum += coeff;
- result[x + radius] = coeff;
- }/* for */
-
- for (n = 0; n < count; n++) {
- result[n] /= sum;
- }/* for */
-
- return result;
-}/* gaussian_coeffs*/
-
-
-
-static inline int
-reflect(int max, int x)
-{
- assert(x > -max && x < 2*max);
-
- if(x < 0) return -x;
- if(x >= max) return max - (x - max) - 1;
- return x;
-}/* reflect*/
-
-
-
-static inline void
-applyCoeffsLine(gdImagePtr src, gdImagePtr dst, int line, int linelen,
- double *coeffs, int radius, gdAxis axis)
-{
- int ndx;
-
- for (ndx = 0; ndx < linelen; ndx++) {
- double r = 0, g = 0, b = 0, a = 0;
- int cndx;
- int *dest = (axis == HORIZONTAL) ?
- &dst->tpixels[line][ndx] :
- &dst->tpixels[ndx][line];
-
- for (cndx = -radius; cndx <= radius; cndx++) {
- const double coeff = coeffs[cndx + radius];
- const int rndx = reflect(linelen, ndx + cndx);
-
- const int srcpx = (axis == HORIZONTAL) ?
- src->tpixels[line][rndx] :
- src->tpixels[rndx][line];
-
- r += coeff * (double)gdTrueColorGetRed(srcpx);
- g += coeff * (double)gdTrueColorGetGreen(srcpx);
- b += coeff * (double)gdTrueColorGetBlue(srcpx);
- a += coeff * (double)gdTrueColorGetAlpha(srcpx);
- }/* for */
-
- *dest = gdTrueColorAlpha(uchar_clamp(r, 0xFF), uchar_clamp(g, 0xFF),
- uchar_clamp(b, 0xFF), uchar_clamp(a, 0x7F));
- }/* for */
-}/* applyCoeffsLine*/
-
-
-static void
-applyCoeffs(gdImagePtr src, gdImagePtr dst, double *coeffs, int radius,
- gdAxis axis)
-{
- int line, numlines, linelen;
-
- if (axis == HORIZONTAL) {
- numlines = src->sy;
- linelen = src->sx;
- } else {
- numlines = src->sx;
- linelen = src->sy;
- }/* if .. else*/
-
- for (line = 0; line < numlines; line++) {
- applyCoeffsLine(src, dst, line, linelen, coeffs, radius, axis);
- }/* for */
-}/* applyCoeffs*/
-
-/*
- Function: gdImageCopyGaussianBlurred
-
- Return a copy of the source image _src_ blurred according to the
- parameters using the Gaussian Blur algorithm.
-
- _radius_ is a radius, not a diameter so a radius of 2 (for
- example) will blur across a region 5 pixels across (2 to the
- center, 1 for the center itself and another 2 to the other edge).
-
- _sigma_ represents the "fatness" of the curve (lower == fatter).
- If _sigma_ is less than or equal to 0,
- <gdImageCopyGaussianBlurred> ignores it and instead computes an
- "optimal" value. Be warned that future versions of this function
- may compute sigma differently.
-
- The resulting image is always truecolor.
-
- More Details:
-
- A Gaussian Blur is generated by replacing each pixel's color
- values with the average of the surrounding pixels' colors. This
- region is a circle whose radius is given by argument _radius_.
- Thus, a larger radius will yield a blurrier image.
-
- This average is not a simple mean of the values. Instead, values
- are weighted using the Gaussian function (roughly a bell curve
- centered around the destination pixel) giving it much more
- influence on the result than its neighbours. Thus, a fatter curve
- will give the center pixel more weight and make the image less
- blurry; lower _sigma_ values will yield flatter curves.
-
- Currently, <gdImageCopyGaussianBlurred> computes the default sigma
- as
-
- (2/3)*radius
-
- Note, however that we reserve the right to change this if we find
- a better ratio. If you absolutely need the current sigma value,
- you should set it yourself.
-
- Parameters:
-
- src - the source image
- radius - the blur radius (*not* diameter--range is 2*radius + 1)
- sigma - the sigma value or a value <= 0.0 to use the computed default
-
- Returns:
-
- The new image or NULL if an error occurred. The result is always
- truecolor.
-
- Example:
- (start code)
-
- FILE *in;
- gdImagePtr result, src;
-
- in = fopen("foo.png", "rb");
- src = gdImageCreateFromPng(in);
-
- result = gdImageCopyGaussianBlurred(im, src->sx / 10, -1.0);
-
- (end code)
-*/
-
-/* TODO: Look into turning this into a generic seperable filter
- * function with Gaussian Blur being one special case. (At the
- * moment, I can't find any other useful separable filter so for not,
- * it's just blur.) */
-BGD_DECLARE(gdImagePtr)
-gdImageCopyGaussianBlurred(gdImagePtr src, int radius, double sigma)
-{
- gdImagePtr tmp = NULL, result = NULL;
- double *coeffs;
- int freeSrc = 0;
-
- if (radius < 1) {
- return NULL;
- }/* if */
-
- /* Compute the coefficients. */
- coeffs = gaussian_coeffs(radius, sigma);
- if (!coeffs) {
- return NULL;
- }/* if */
-
- /* If the image is not truecolor, we first make a truecolor
- * scratch copy. */
- if (!src->trueColor) {
- int tcstat;
-
- src = gdImageClone(src);
- if (!src) {
- gdFree(coeffs);
- return NULL;
- }
-
- tcstat = gdImagePaletteToTrueColor(src);
- if (!tcstat) {
- gdImageDestroy(src);
- gdFree(coeffs);
- return NULL;
- }/* if */
-
- freeSrc = 1;
- }/* if */
-
- /* Apply the filter horizontally. */
- tmp = gdImageCreateTrueColor(src->sx, src->sy);
- if (!tmp) {
- gdFree(coeffs);
- return NULL;
- }
- applyCoeffs(src, tmp, coeffs, radius, HORIZONTAL);
-
- /* Apply the filter vertically. */
- result = gdImageCreateTrueColor(src->sx, src->sy);
- if (result) {
- applyCoeffs(tmp, result, coeffs, radius, VERTICAL);
- }/* if */
-
- gdImageDestroy(tmp);
- gdFree(coeffs);
-
- if (freeSrc) gdImageDestroy(src);
-
- return result;
-}/* gdImageCopyGaussianBlurred*/
diff --git a/Build/source/libs/gd/libgd-src/src/gd_gd.c b/Build/source/libs/gd/libgd-src/src/gd_gd.c
deleted file mode 100644
index 0771fd37cbe..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_gd.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/**
- * File: GD IO
- *
- * Read and write GD images.
- *
- * The GD image format is a proprietary image format of libgd. *It has to be*
- * *regarded as being obsolete, and should only be used for development and*
- * *testing purposes.*
- *
- * Structure of a GD image file:
- * - file header
- * - color header (either truecolor or palette)
- * - image data
- *
- * All numbers are stored in big-endian format. Note that all GD output is done
- * in the GD 2.x format (not to be confused with the GD2 format), but input may
- * also be in the GD 1.x format.
- *
- * GD 1.x file header structure:
- * width - 1 word
- * height - 1 word
- *
- * GD 1.x color header (palette only):
- * count - 1 byte (the number of used palette colors)
- * transparent - 1 word (257 signals no transparency)
- * palette - 256×3 bytes (RGB triplets)
- *
- * GD 2.x file header structure:
- * signature - 1 word ("\xFF\xFE" for truecolor, "\xFF\xFF" for palette)
- * width - 1 word
- * height - 1 word
- *
- * GD 2.x truecolor image color header:
- * truecolor - 1 byte (always "\001")
- * transparent - 1 dword (ARGB color); "\377\377\377\377" means that no
- * transparent color is set
- *
- * GD 2.x palette image color header:
- * truecolor - 1 byte (always "\0")
- * count - 1 word (the number of used palette colors)
- * transparent - 1 dword (palette index); "\377\377\377\377" means that no
- * transparent color is set
- * palette - 256 dwords (RGBA colors)
- *
- * Image data:
- * Sequential pixel data; row-major from top to bottom, left to right:
- * - 1 byte per pixel for palette images
- * - 1 dword (ARGB) per pixel for truecolor images
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gd_errors.h"
-
-/* 2.3: gd is no longer mandatory */
-#if ENABLE_GD_FORMATS
-
-#define TRUE 1
-#define FALSE 0
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD2_DBG(s) (s) */
-#define GD2_DBG(s)
-
-/* */
-/* Shared code to read color tables from gd file. */
-/* */
-int
-_gdGetColors (gdIOCtx * in, gdImagePtr im, int gd2xFlag)
-{
- int i;
- if (gd2xFlag) {
- int trueColorFlag;
- if (!gdGetByte (&trueColorFlag, in)) {
- goto fail1;
- }
- /* 2.0.12: detect bad truecolor .gd files created by pre-2.0.12.
- Beginning in 2.0.12 truecolor is indicated by the initial 2-byte
- signature. */
- if (trueColorFlag != im->trueColor) {
- goto fail1;
- }
- /* This should have been a word all along */
- if (!im->trueColor) {
- if (!gdGetWord (&im->colorsTotal, in)) {
- goto fail1;
- }
- if (im->colorsTotal > gdMaxColors) {
- goto fail1;
- }
- }
- /* Int to accommodate truecolor single-color transparency */
- if (!gdGetInt (&im->transparent, in)) {
- goto fail1;
- }
- } else {
- if (!gdGetByte (&im->colorsTotal, in)) {
- goto fail1;
- }
- if (!gdGetWord (&im->transparent, in)) {
- goto fail1;
- }
- }
- /* Make sure transparent index is within bounds of the palette. */
- if (!(im->trueColor) && (im->transparent >= im->colorsTotal || im->transparent < 0)) {
- im->transparent = (-1);
- }
- GD2_DBG (printf
- ("Palette had %d colours (T=%d)\n", im->colorsTotal,
- im->transparent));
- if (im->trueColor) {
- return TRUE;
- }
- for (i = 0; (i < gdMaxColors); i++) {
- if (!gdGetByte (&im->red[i], in)) {
- goto fail1;
- }
- if (!gdGetByte (&im->green[i], in)) {
- goto fail1;
- }
- if (!gdGetByte (&im->blue[i], in)) {
- goto fail1;
- }
- if (gd2xFlag) {
- if (!gdGetByte (&im->alpha[i], in)) {
- goto fail1;
- }
- }
- }
-
- for (i = 0; (i < im->colorsTotal); i++) {
- im->open[i] = 0;
- };
-
- return TRUE;
-fail1:
- return FALSE;
-}
-
-/* */
-/* Use the common basic header info to make the image object. */
-/* */
-static gdImagePtr
-_gdCreateFromFile (gdIOCtx * in, int *sx, int *sy)
-{
- gdImagePtr im;
- int gd2xFlag = 0;
- int trueColorFlag = 0;
- if (!gdGetWord (sx, in)) {
- goto fail1;
- }
- if ((*sx == 65535) || (*sx == 65534)) {
- /* This is a gd 2.0 .gd file */
- gd2xFlag = 1;
- /* 2.0.12: 65534 signals a truecolor .gd file.
- There is a slight redundancy here but we can
- live with it. */
- if (*sx == 65534) {
- trueColorFlag = 1;
- }
- if (!gdGetWord (sx, in)) {
- goto fail1;
- }
- }
- if (!gdGetWord (sy, in)) {
- goto fail1;
- }
-
- GD2_DBG (printf ("Image is %dx%d\n", *sx, *sy));
- if (trueColorFlag) {
- im = gdImageCreateTrueColor (*sx, *sy);
- } else {
- im = gdImageCreate (*sx, *sy);
- }
- if (!im) {
- goto fail1;
- }
- if (!_gdGetColors (in, im, gd2xFlag)) {
- goto fail2;
- }
-
- return im;
-fail2:
- gdImageDestroy (im);
-fail1:
- return 0;
-}
-
-/*
- Function: gdImageCreateFromGd
-
- <gdImageCreateFromGd> is called to load images from gd format
- files. Invoke <gdImageCreateFromGd> with an already opened pointer
- to a file containing the desired image in the gd file format,
- which is specific to gd and intended for very fast loading. (It is
- not intended for compression; for compression, use PNG or JPEG.)
-
- <gdImageCreateFromGd> returns a <gdImagePtr> to the new image, or
- NULL if unable to load the image (most often because the file is
- corrupt or does not contain a gd format
- image). <gdImageCreateFromGd> does not close the file. You can
- inspect the sx and sy members of the image to determine its
- size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- Variants:
-
- <gdImageCreateFromGdPtr> creates an image from GD data (i.e. the
- contents of a GD file) already in memory.
-
- <gdImageCreateFromGdCtx> reads in an image using the functions in
- a <gdIOCtx> struct.
-
- Parameters:
-
- infile - The input FILE pointer
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
-
- > gdImagePtr im;
- > FILE *in;
- > in = fopen("mygd.gd", "rb");
- > im = gdImageCreateFromGd(in);
- > fclose(in);
- > // ... Use the image ...
- > gdImageDestroy(im);
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in;
-
- in = gdNewFileCtx (inFile);
- if (in == NULL) return NULL;
- im = gdImageCreateFromGdCtx (in);
-
- in->gd_free (in);
-
- return im;
-}
-
-/*
- Function: gdImageCreateFromGdPtr
-
- Parameters:
-
- size - size of GD data in bytes.
- data - GD data (i.e. contents of a GIF file).
-
- Reads in GD data from memory. See <gdImageCreateFromGd>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGdPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
- if(!in)
- return 0;
- im = gdImageCreateFromGdCtx (in);
- in->gd_free (in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromGdCtx
-
- Reads in a GD image via a <gdIOCtx> struct. See
- <gdImageCreateFromGd>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGdCtx (gdIOCtxPtr in)
-{
- int sx, sy;
- int x, y;
- gdImagePtr im;
-
- /* Read the header */
- im = _gdCreateFromFile (in, &sx, &sy);
-
- if (im == NULL) {
- goto fail1;
- };
-
- /* Then the data... */
- /* 2.0.12: support truecolor properly in .gd as well as in .gd2.
- Problem reported by Andreas Pfaller. */
- if (im->trueColor) {
- for (y = 0; (y < sy); y++) {
- for (x = 0; (x < sx); x++) {
- int pix;
- if (!gdGetInt (&pix, in)) {
- goto fail2;
- }
- im->tpixels[y][x] = pix;
- }
- }
- } else {
- for (y = 0; (y < sy); y++) {
- for (x = 0; (x < sx); x++) {
- int ch;
- ch = gdGetC (in);
- if (ch == EOF) {
- goto fail2;
- }
- /* ROW-MAJOR IN GD 1.3 */
- im->pixels[y][x] = ch;
- }
- }
- }
- return im;
-
-fail2:
- gdImageDestroy (im);
-fail1:
- return 0;
-}
-
-void
-_gdPutColors (gdImagePtr im, gdIOCtx * out)
-{
- int i;
-
- gdPutC (im->trueColor, out);
- if (!im->trueColor) {
- gdPutWord (im->colorsTotal, out);
- }
- gdPutInt (im->transparent, out);
- if (!im->trueColor) {
- for (i = 0; (i < gdMaxColors); i++) {
- gdPutC ((unsigned char) im->red[i], out);
- gdPutC ((unsigned char) im->green[i], out);
- gdPutC ((unsigned char) im->blue[i], out);
- gdPutC ((unsigned char) im->alpha[i], out);
- }
- }
-}
-
-static void
-_gdPutHeader (gdImagePtr im, gdIOCtx * out)
-{
- /* 65535 indicates this is a gd 2.x .gd file.
- 2.0.12: 65534 indicates truecolor. */
- if (im->trueColor) {
- gdPutWord (65534, out);
- } else {
- gdPutWord (65535, out);
- }
- gdPutWord (im->sx, out);
- gdPutWord (im->sy, out);
-
- _gdPutColors (im, out);
-
-}
-
-static void
-_gdImageGd (gdImagePtr im, gdIOCtx * out)
-{
- int x, y;
-
- _gdPutHeader (im, out);
-
- for (y = 0; (y < im->sy); y++) {
- for (x = 0; (x < im->sx); x++) {
- /* ROW-MAJOR IN GD 1.3 */
- if (im->trueColor) {
- gdPutInt (im->tpixels[y][x], out);
- } else {
- gdPutC ((unsigned char) im->pixels[y][x], out);
- }
- }
- }
-}
-
-/*
- Function: gdImageGd
- */
-BGD_DECLARE(void) gdImageGd (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- if (out == NULL) return;
- _gdImageGd (im, out);
- out->gd_free (out);
-}
-
-/*
- Function: gdImageGdPtr
- */
-BGD_DECLARE(void *) gdImageGdPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- if (out == NULL) return NULL;
- _gdImageGd (im, out);
- rv = gdDPExtractData (out, size);
- out->gd_free (out);
- return rv;
-}
-
-#else /* no HAVE_LIBZ or !ENABLE_GD_FORMATS */
-
-static void _noGdError (void)
-{
- gd_error("GD image support has been disabled\n");
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd (FILE * inFile)
-{
- _noGdError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGdPtr (int size, void *data)
-{
- _noGdError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGdCtx (gdIOCtxPtr in)
-{
- _noGdError();
- return NULL;
-}
-
-BGD_DECLARE(void) gdImageGd (gdImagePtr im, FILE * outFile)
-{
- _noGdError();
-}
-
-BGD_DECLARE(void *) gdImageGdPtr (gdImagePtr im, int *size)
-{
- _noGdError();
- return NULL;
-}
-
-#endif /* ENABLE_GD_FORMATS */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_gd2.c b/Build/source/libs/gd/libgd-src/src/gd_gd2.c
deleted file mode 100644
index 760e85b9fd9..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_gd2.c
+++ /dev/null
@@ -1,1194 +0,0 @@
-/*
- * gd_gd2.c
- *
- * Implements the I/O and support for the GD2 format.
- *
- * Changing the definition of GD2_DBG (below) will cause copious messages
- * to be displayed while it processes requests.
- *
- * Designed, Written & Copyright 1999, Philip Warner.
- *
- */
-
-/**
- * File: GD2 IO
- *
- * Read and write GD2 images.
- *
- * The GD2 image format is a proprietary image format of libgd. *It has to be*
- * *regarded as being obsolete, and should only be used for development and*
- * *testing purposes.*
- *
- * Structure of a GD2 image file:
- * - file header
- * - chunk headers (only for compressed data)
- * - color header (either truecolor or palette)
- * - chunks of image data (chunk-row-major, top to bottom, left to right)
- *
- * All numbers are stored in big-endian format.
- *
- * File header structure:
- * signature - 4 bytes (always "gd2\0")
- * version - 1 word (e.g. "\0\002")
- * width - 1 word
- * height - 1 word
- * chunk_size - 1 word
- * format - 1 word
- * x_chunk_count - 1 word
- * y_chunk_count - 1 word
- *
- * Recognized formats:
- * 1 - raw palette image data
- * 2 - compressed palette image data
- * 3 - raw truecolor image data
- * 4 - compressed truecolor image data
- *
- * Chunk header:
- * offset - 1 dword
- * size - 1 dword
- *
- * There are x_chunk_count * y_chunk_count chunk headers.
- *
- * Truecolor image color header:
- * truecolor - 1 byte (always "\001")
- * transparent - 1 dword (ARGB color); "\377\377\377\377" means that no
- * transparent color is set
- *
- * Palette image color header:
- * truecolor - 1 byte (always "\0")
- * count - 1 word (the number of used palette colors)
- * transparent - 1 dword (palette index); "\377\377\377\377" means that no
- * transparent color is set
- * palette - 256 dwords (RGBA colors)
- *
- * Chunk structure:
- * Sequential pixel data of a rectangular area (chunk_size x chunk_size),
- * row-major from top to bottom, left to right:
- * - 1 byte per pixel for palette images
- * - 1 dword (ARGB) per pixel for truecolor images
- *
- * Depending on format, the chunk may be ZLIB compressed.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* 2.0.29: no more errno.h, makes windows happy */
-#include <math.h>
-#include <limits.h>
-#include <string.h>
-#include "gd.h"
-#include "gd_errors.h"
-#include "gdhelpers.h"
-
-/* 2.03: gd2 is no longer mandatory */
-/* JCE - test after including gd.h so that HAVE_LIBZ can be set in
- * a config.h file included by gd.h */
-#if defined(HAVE_LIBZ) && ENABLE_GD_FORMATS
-#include <zlib.h>
-
-#define TRUE 1
-#define FALSE 0
-
-/* 2.11: not part of the API, as the save routine can figure it out
- from im->trueColor, and the load routine doesn't need to tell
- the end user the saved format. NOTE: adding 2 is assumed
- to result in the correct format value for truecolor! */
-#define GD2_FMT_TRUECOLOR_RAW 3
-#define GD2_FMT_TRUECOLOR_COMPRESSED 4
-
-#define gd2_compressed(fmt) (((fmt) == GD2_FMT_COMPRESSED) || \
- ((fmt) == GD2_FMT_TRUECOLOR_COMPRESSED))
-
-#define gd2_truecolor(fmt) (((fmt) == GD2_FMT_TRUECOLOR_RAW) || \
- ((fmt) == GD2_FMT_TRUECOLOR_COMPRESSED))
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD2_DBG(s) (s) */
-#define GD2_DBG(s)
-
-typedef struct {
- int offset;
- int size;
-}
-t_chunk_info;
-
-extern int _gdGetColors (gdIOCtx * in, gdImagePtr im, int gd2xFlag);
-extern void _gdPutColors (gdImagePtr im, gdIOCtx * out);
-
-/* */
-/* Read the extra info in the gd2 header. */
-/* */
-static int
-_gd2GetHeader (gdIOCtxPtr in, int *sx, int *sy,
- int *cs, int *vers, int *fmt, int *ncx, int *ncy,
- t_chunk_info ** chunkIdx)
-{
- int i;
- int ch;
- char id[5];
- t_chunk_info *cidx;
- int sidx;
- int nc;
-
- GD2_DBG (printf ("Reading gd2 header info\n"));
-
- for (i = 0; i < 4; i++) {
- ch = gdGetC (in);
- if (ch == EOF) {
- goto fail1;
- };
- id[i] = ch;
- };
- id[4] = 0;
-
- GD2_DBG (printf ("Got file code: %s\n", id));
-
- /* Equiv. of 'magick'. */
- if (strcmp (id, GD2_ID) != 0) {
- GD2_DBG (printf ("Not a valid gd2 file\n"));
- goto fail1;
- };
-
- /* Version */
- if (gdGetWord (vers, in) != 1) {
- goto fail1;
- };
- GD2_DBG (printf ("Version: %d\n", *vers));
-
- if ((*vers != 1) && (*vers != 2)) {
- GD2_DBG (printf ("Bad version: %d\n", *vers));
- goto fail1;
- };
-
- /* Image Size */
- if (!gdGetWord (sx, in)) {
- GD2_DBG (printf ("Could not get x-size\n"));
- goto fail1;
- }
- if (!gdGetWord (sy, in)) {
- GD2_DBG (printf ("Could not get y-size\n"));
- goto fail1;
- }
- GD2_DBG (printf ("Image is %dx%d\n", *sx, *sy));
-
- /* Chunk Size (pixels, not bytes!) */
- if (gdGetWord (cs, in) != 1) {
- goto fail1;
- };
- GD2_DBG (printf ("ChunkSize: %d\n", *cs));
-
- if ((*cs < GD2_CHUNKSIZE_MIN) || (*cs > GD2_CHUNKSIZE_MAX)) {
- GD2_DBG (printf ("Bad chunk size: %d\n", *cs));
- goto fail1;
- };
-
- /* Data Format */
- if (gdGetWord (fmt, in) != 1) {
- goto fail1;
- };
- GD2_DBG (printf ("Format: %d\n", *fmt));
-
- if ((*fmt != GD2_FMT_RAW) && (*fmt != GD2_FMT_COMPRESSED) &&
- (*fmt != GD2_FMT_TRUECOLOR_RAW) &&
- (*fmt != GD2_FMT_TRUECOLOR_COMPRESSED)) {
- GD2_DBG (printf ("Bad data format: %d\n", *fmt));
- goto fail1;
- };
-
-
- /* # of chunks wide */
- if (gdGetWord (ncx, in) != 1) {
- goto fail1;
- };
- GD2_DBG (printf ("%d Chunks Wide\n", *ncx));
-
- /* # of chunks high */
- if (gdGetWord (ncy, in) != 1) {
- goto fail1;
- };
- GD2_DBG (printf ("%d Chunks vertically\n", *ncy));
-
- if (gd2_compressed (*fmt)) {
- if (overflow2(*ncx, *ncy)) {
- GD2_DBG(printf ("Illegal chunk counts: %d * %d\n", *ncx, *ncy));
- goto fail1;
- }
- nc = (*ncx) * (*ncy);
-
- GD2_DBG (printf ("Reading %d chunk index entries\n", nc));
- if (overflow2(sizeof(t_chunk_info), nc)) {
- goto fail1;
- }
- sidx = sizeof (t_chunk_info) * nc;
- if (sidx <= 0) {
- goto fail1;
- }
-
- cidx = gdCalloc (sidx, 1);
- if (cidx == NULL) {
- goto fail1;
- }
- for (i = 0; i < nc; i++) {
- if (gdGetInt (&cidx[i].offset, in) != 1) {
- goto fail2;
- };
- if (gdGetInt (&cidx[i].size, in) != 1) {
- goto fail2;
- };
- if (cidx[i].offset < 0 || cidx[i].size < 0 || cidx[i].size == INT_MAX)
- goto fail2;
- };
- *chunkIdx = cidx;
- };
-
- GD2_DBG (printf ("gd2 header complete\n"));
-
- return 1;
-fail2:
- gdFree(cidx);
-fail1:
- return 0;
-}
-
-static gdImagePtr
-_gd2CreateFromFile (gdIOCtxPtr in, int *sx, int *sy,
- int *cs, int *vers, int *fmt,
- int *ncx, int *ncy, t_chunk_info ** cidx)
-{
- gdImagePtr im;
-
- if (_gd2GetHeader (in, sx, sy, cs, vers, fmt, ncx, ncy, cidx) != 1) {
- GD2_DBG (printf ("Bad GD2 header\n"));
- goto fail1;
- }
- if (gd2_truecolor (*fmt)) {
- im = gdImageCreateTrueColor (*sx, *sy);
- } else {
- im = gdImageCreate (*sx, *sy);
- }
- if (im == NULL) {
- GD2_DBG (printf ("Could not create gdImage\n"));
- goto fail2;
- };
-
- if (!_gdGetColors (in, im, (*vers) == 2)) {
- GD2_DBG (printf ("Could not read color palette\n"));
- goto fail3;
- }
- GD2_DBG (printf ("Image palette completed: %d colours\n", im->colorsTotal));
-
- return im;
-
-fail3:
- gdImageDestroy (im);
-fail2:
- gdFree(*cidx);
-fail1:
- return 0;
-
-}
-
-static int
-_gd2ReadChunk (int offset, char *compBuf, int compSize, char *chunkBuf,
- uLongf * chunkLen, gdIOCtx * in)
-{
- int zerr;
-
- if (gdTell (in) != offset) {
- GD2_DBG (printf ("Positioning in file to %d\n", offset));
- gdSeek (in, offset);
- } else {
- GD2_DBG (printf ("Already Positioned in file to %d\n", offset));
- };
-
- /* Read and uncompress an entire chunk. */
- GD2_DBG (printf ("Reading file\n"));
- if (gdGetBuf (compBuf, compSize, in) != compSize) {
- return FALSE;
- };
- GD2_DBG (printf
- ("Got %d bytes. Uncompressing into buffer of %d bytes\n", compSize,
- *chunkLen));
- zerr =
- uncompress ((unsigned char *) chunkBuf, chunkLen,
- (unsigned char *) compBuf, compSize);
- if (zerr != Z_OK) {
- GD2_DBG (printf ("Error %d from uncompress\n", zerr));
- return FALSE;
- };
- GD2_DBG (printf ("Got chunk\n"));
- return TRUE;
-}
-
-
-/*
- Function: gdImageCreateFromGd2
-
- <gdImageCreateFromGd2> is called to load images from gd2 format
- files. Invoke <gdImageCreateFromGd2> with an already opened
- pointer to a file containing the desired image in the gd2 file
- format, which is specific to gd2 and intended for fast loading of
- parts of large images. (It is a compressed format, but generally
- not as good as maximum compression of the entire image would be.)
-
- <gdImageCreateFromGd2> returns a <gdImagePtr> to the new image, or
- NULL if unable to load the image (most often because the file is
- corrupt or does not contain a gd format
- image). <gdImageCreateFromGd2> does not close the file. You can
- inspect the sx and sy members of the image to determine its
- size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
-
- Variants:
-
- <gdImageCreateFromGd2Ptr> creates an image from GD data (i.e. the
- contents of a GD2 file) already in memory.
-
- <gdImageCreateFromGd2Ctx> reads in an image using the functions in
- a <gdIOCtx> struct.
-
- Parameters:
-
- infile - The input FILE pointer
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
-
- > gdImagePtr im;
- > FILE *in;
- > in = fopen("mygd.gd2", "rb");
- > im = gdImageCreateFromGd2(in);
- > fclose(in);
- > // ... Use the image ...
- > gdImageDestroy(im);
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2 (FILE * inFile)
-{
- gdIOCtx *in = gdNewFileCtx (inFile);
- gdImagePtr im;
-
- if (in == NULL) return NULL;
- im = gdImageCreateFromGd2Ctx (in);
-
- in->gd_free (in);
-
- return im;
-}
-
-/*
- Function: gdImageCreateFromGd2Ptr
-
- Parameters:
-
- size - size of GD2 data in bytes.
- data - GD2 data (i.e. contents of a GIF file).
-
- See <gdImageCreateFromGd2>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Ptr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
- if(!in)
- return 0;
- im = gdImageCreateFromGd2Ctx (in);
- in->gd_free (in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromGd2Ctx
-
- Reads in a GD2 image via a <gdIOCtx> struct. See
- <gdImageCreateFromGd2>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Ctx (gdIOCtxPtr in)
-{
- int sx, sy;
- int i;
- int ncx, ncy, nc, cs, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int vers, fmt;
- t_chunk_info *chunkIdx = NULL; /* So we can gdFree it with impunity. */
- unsigned char *chunkBuf = NULL; /* So we can gdFree it with impunity. */
- int chunkNum = 0;
- int chunkMax = 0;
- uLongf chunkLen;
- int chunkPos = 0;
- int compMax = 0;
- int bytesPerPixel;
- char *compBuf = NULL; /* So we can gdFree it with impunity. */
-
- gdImagePtr im;
-
- /* Get the header */
- im =
- _gd2CreateFromFile (in, &sx, &sy, &cs, &vers, &fmt, &ncx, &ncy,
- &chunkIdx);
- if (im == NULL) {
- /* No need to free chunkIdx as _gd2CreateFromFile does it for us. */
- return 0;
- }
-
- bytesPerPixel = im->trueColor ? 4 : 1;
- if (overflow2(ncx, ncy))
- goto fail;
- nc = ncx * ncy;
-
- if (overflow2(ncy, cs) || overflow2(ncx, cs) || overflow2(bytesPerPixel, cs))
- goto fail;
-
- if (gd2_compressed (fmt)) {
- /* Find the maximum compressed chunk size. */
- compMax = 0;
- for (i = 0; (i < nc); i++) {
- if (chunkIdx[i].size > compMax) {
- compMax = chunkIdx[i].size;
- };
- };
- compMax++;
-
- /* Allocate buffers */
- chunkMax = cs * bytesPerPixel * cs;
- chunkBuf = gdCalloc (chunkMax, 1);
- if (!chunkBuf) {
- goto fail;
- }
- compBuf = gdCalloc (compMax, 1);
- if (!compBuf) {
- goto fail;
- }
-
- GD2_DBG (printf ("Largest compressed chunk is %d bytes\n", compMax));
- };
-
- /* if ( (ncx != sx / cs) || (ncy != sy / cs)) { */
- /* goto fail2; */
- /* }; */
-
- /* Read the data... */
- for (cy = 0; (cy < ncy); cy++) {
- for (cx = 0; (cx < ncx); cx++) {
-
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > im->sy) {
- yhi = im->sy;
- };
-
- GD2_DBG (printf
- ("Processing Chunk %d (%d, %d), y from %d to %d\n",
- chunkNum, cx, cy, ylo, yhi));
-
- if (gd2_compressed (fmt)) {
-
- chunkLen = chunkMax;
-
- if (!_gd2ReadChunk (chunkIdx[chunkNum].offset,
- compBuf,
- chunkIdx[chunkNum].size,
- (char *) chunkBuf, &chunkLen, in)) {
- GD2_DBG (printf ("Error reading comproessed chunk\n"));
- goto fail;
- };
-
- chunkPos = 0;
- };
-
- for (y = ylo; (y < yhi); y++) {
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > im->sx) {
- xhi = im->sx;
- };
- /*GD2_DBG(printf("y=%d: ",y)); */
- if (!gd2_compressed (fmt)) {
- for (x = xlo; x < xhi; x++) {
-
- if (im->trueColor) {
- if (!gdGetInt (&im->tpixels[y][x], in)) {
- gd_error("gd2: EOF while reading\n");
- goto fail;
- }
- } else {
- int ch;
- if (!gdGetByte (&ch, in)) {
- gd_error("gd2: EOF while reading\n");
- goto fail;
- }
- im->pixels[y][x] = ch;
- }
- }
- } else {
- for (x = xlo; x < xhi; x++) {
- if (im->trueColor) {
- /* 2.0.1: work around a gcc bug by being verbose.
- TBB */
- int a = chunkBuf[chunkPos++] << 24;
- int r = chunkBuf[chunkPos++] << 16;
- int g = chunkBuf[chunkPos++] << 8;
- int b = chunkBuf[chunkPos++];
- /* 2.0.11: tpixels */
- im->tpixels[y][x] = a + r + g + b;
- } else {
- im->pixels[y][x] = chunkBuf[chunkPos++];
- }
- };
- };
- /*GD2_DBG(printf("\n")); */
- };
- chunkNum++;
- };
- };
-
- GD2_DBG (printf ("Freeing memory\n"));
-
- gdFree (chunkBuf);
- gdFree (compBuf);
- gdFree (chunkIdx);
-
- GD2_DBG (printf ("Done\n"));
-
- return im;
-
-fail:
- gdImageDestroy (im);
- if (chunkBuf) {
- gdFree (chunkBuf);
- }
- if (compBuf) {
- gdFree (compBuf);
- }
- if (chunkIdx) {
- gdFree (chunkIdx);
- }
- return 0;
-}
-
-
-/*
- Function: gdImageCreateFromGd2Part
-
- <gdImageCreateFromGd2Part> is called to load parts of images from
- gd2 format files. Invoked in the same way as <gdImageCreateFromGd2>,
- but with extra parameters indicating the source (x, y) and
- width/height of the desired image. <gdImageCreateFromGd2Part>
- returns a <gdImagePtr> to the new image, or NULL if unable to load
- the image. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- Variants:
-
- <gdImageCreateFromGd2PartPtr> creates an image from GD2 data
- (i.e. the contents of a GD2 file) already in memory.
-
- <gdImageCreateFromGd2Ctx> reads in an image using the functions in
- a <gdIOCtx> struct.
-
- Parameters:
-
- infile - The input FILE pointer
- srcx, srcy - The source X and Y coordinates
- w, h - The resulting image's width and height
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Part (FILE * inFile, int srcx, int srcy, int w, int h)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx (inFile);
-
- if (in == NULL) return NULL;
- im = gdImageCreateFromGd2PartCtx (in, srcx, srcy, w, h);
-
- in->gd_free (in);
-
- return im;
-}
-
-/*
- Function: gdImageCreateFromGd2PartPtr
-
- Parameters:
-
- size - size of GD data in bytes.
- data - GD data (i.e. contents of a GIF file).
- srcx, srcy - The source X and Y coordinates
- w, h - The resulting image's width and height
-
- Reads in part of a GD2 image file stored from memory. See
- <gdImageCreateFromGd2Part>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2PartPtr (int size, void *data, int srcx, int srcy, int w,
- int h)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
- if(!in)
- return 0;
- im = gdImageCreateFromGd2PartCtx (in, srcx, srcy, w, h);
- in->gd_free (in);
- return im;
-}
-
-
-/*
- Function: gdImageCreateFromGd2PartCtx
-
- Parameters:
-
- in - The data source.
- srcx, srcy - The source X and Y coordinates
- w, h - The resulting image's width and height
-
- Reads in part of a GD2 data image file via a <gdIOCtx> struct. See
- <gdImageCreateFromGd2Part>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2PartCtx (gdIOCtx * in, int srcx, int srcy, int w, int h)
-{
- int scx, scy, ecx, ecy, fsx, fsy;
- int nc, ncx, ncy, cs, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int dstart, dpos;
- int i;
- /* 2.0.12: unsigned is correct; fixes problems with color munging.
- Thanks to Steven Brown. */
- unsigned int ch;
- int vers, fmt;
- t_chunk_info *chunkIdx = NULL;
- unsigned char *chunkBuf = NULL;
- int chunkNum;
- int chunkMax = 0;
- uLongf chunkLen;
- int chunkPos = 0;
- int compMax;
- char *compBuf = NULL;
-
- gdImagePtr im;
-
- /* */
- /* The next few lines are basically copied from gd2CreateFromFile */
- /* - we change the file size, so don't want to use the code directly. */
- /* but we do need to know the file size. */
- /* */
- if (_gd2GetHeader (in, &fsx, &fsy, &cs, &vers, &fmt, &ncx, &ncy, &chunkIdx)
- != 1) {
- goto fail1;
- }
-
- GD2_DBG (printf ("File size is %dx%d\n", fsx, fsy));
-
- /* This is the difference - make a file based on size of chunks. */
- if (gd2_truecolor (fmt)) {
- im = gdImageCreateTrueColor (w, h);
- } else {
- im = gdImageCreate (w, h);
- }
- if (im == NULL) {
- goto fail1;
- };
-
- if (!_gdGetColors (in, im, vers == 2)) {
- goto fail2;
- }
- GD2_DBG (printf ("Image palette completed: %d colours\n", im->colorsTotal));
-
- /* Process the header info */
- nc = ncx * ncy;
-
- if (gd2_compressed (fmt)) {
- /* Find the maximum compressed chunk size. */
- compMax = 0;
- for (i = 0; (i < nc); i++) {
- if (chunkIdx[i].size > compMax) {
- compMax = chunkIdx[i].size;
- };
- };
- compMax++;
-
- if (im->trueColor) {
- chunkMax = cs * cs * 4;
- } else {
- chunkMax = cs * cs;
- }
- chunkBuf = gdCalloc (chunkMax, 1);
- if (!chunkBuf) {
- goto fail2;
- }
- compBuf = gdCalloc (compMax, 1);
- if (!compBuf) {
- goto fail2;
- }
-
- };
-
- /* Don't bother with this... */
- /* if ( (ncx != sx / cs) || (ncy != sy / cs)) { */
- /* goto fail2; */
- /* }; */
-
-
- /* Work out start/end chunks */
- scx = srcx / cs;
- scy = srcy / cs;
- if (scx < 0) {
- scx = 0;
- };
- if (scy < 0) {
- scy = 0;
- };
-
- ecx = (srcx + w) / cs;
- ecy = (srcy + h) / cs;
- if (ecx >= ncx) {
- ecx = ncx - 1;
- };
- if (ecy >= ncy) {
- ecy = ncy - 1;
- };
-
- /* Remember file position of image data. */
- dstart = gdTell (in);
- GD2_DBG (printf ("Data starts at %d\n", dstart));
-
- /* Loop through the chunks. */
- for (cy = scy; (cy <= ecy); cy++) {
-
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > fsy) {
- yhi = fsy;
- };
-
- for (cx = scx; (cx <= ecx); cx++) {
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > fsx) {
- xhi = fsx;
- };
-
- GD2_DBG (printf
- ("Processing Chunk (%d, %d), from %d to %d\n", cx, cy, ylo,
- yhi));
-
- if (!gd2_compressed (fmt)) {
- GD2_DBG (printf ("Using raw format data\n"));
- if (im->trueColor) {
- dpos =
- (cy * (cs * fsx) * 4 + cx * cs * (yhi - ylo) * 4) +
- dstart;
- } else {
- dpos = cy * (cs * fsx) + cx * cs * (yhi - ylo) + dstart;
- }
- /* gd 2.0.11: gdSeek returns TRUE on success, not 0.
- Longstanding bug. 01/16/03 */
- if (!gdSeek (in, dpos)) {
- gd_error("Seek error\n");
- goto fail2;
- };
- GD2_DBG (printf
- ("Reading (%d, %d) from position %d\n", cx, cy,
- dpos - dstart));
- } else {
- chunkNum = cx + cy * ncx;
-
- chunkLen = chunkMax;
- if (!_gd2ReadChunk (chunkIdx[chunkNum].offset,
- compBuf,
- chunkIdx[chunkNum].size,
- (char *) chunkBuf, &chunkLen, in)) {
- printf ("Error reading comproessed chunk\n");
- goto fail2;
- };
- chunkPos = 0;
- GD2_DBG (printf
- ("Reading (%d, %d) from chunk %d\n", cx, cy,
- chunkNum));
- };
-
- GD2_DBG (printf
- (" into (%d, %d) - (%d, %d)\n", xlo, ylo, xhi, yhi));
- for (y = ylo; (y < yhi); y++) {
-
- for (x = xlo; x < xhi; x++) {
- if (!gd2_compressed (fmt)) {
- if (im->trueColor) {
- if (!gdGetInt ((int *) &ch, in)) {
- ch = 0;
- /*printf("EOF while reading file\n"); */
- /*goto fail2; */
- }
- } else {
- ch = gdGetC (in);
- if ((int) ch == EOF) {
- ch = 0;
- /*printf("EOF while reading file\n"); */
- /*goto fail2; */
- }
- }
- } else {
- if (im->trueColor) {
- ch = chunkBuf[chunkPos++];
- ch = (ch << 8) + chunkBuf[chunkPos++];
- ch = (ch << 8) + chunkBuf[chunkPos++];
- ch = (ch << 8) + chunkBuf[chunkPos++];
- } else {
- ch = chunkBuf[chunkPos++];
- }
- };
-
- /* Only use a point that is in the image. */
- if ((x >= srcx) && (x < (srcx + w)) && (x < fsx) && (x >= 0)
- && (y >= srcy) && (y < (srcy + h)) && (y < fsy)
- && (y >= 0)) {
- /* 2.0.11: tpixels */
- if (im->trueColor) {
- im->tpixels[y - srcy][x - srcx] = ch;
- } else {
- im->pixels[y - srcy][x - srcx] = ch;
- }
- }
- };
- };
- };
- };
-
- gdFree (chunkBuf);
- gdFree (compBuf);
- gdFree (chunkIdx);
-
- return im;
-
-fail2:
- gdImageDestroy (im);
-fail1:
- if (chunkBuf) {
- gdFree (chunkBuf);
- }
- if (compBuf) {
- gdFree (compBuf);
- }
- if (chunkIdx) {
- gdFree (chunkIdx);
- }
- return 0;
-
-}
-
-static void
-_gd2PutHeader (gdImagePtr im, gdIOCtx * out, int cs, int fmt, int cx, int cy)
-{
- int i;
-
- /* Send the gd2 id, to verify file format. */
- for (i = 0; i < 4; i++) {
- gdPutC ((unsigned char) (GD2_ID[i]), out);
- };
-
- /* */
- /* We put the version info first, so future versions can easily change header info. */
- /* */
- gdPutWord (GD2_VERS, out);
- gdPutWord (im->sx, out);
- gdPutWord (im->sy, out);
- gdPutWord (cs, out);
- gdPutWord (fmt, out);
- gdPutWord (cx, out);
- gdPutWord (cy, out);
-
-}
-
-static void
-_gdImageGd2 (gdImagePtr im, gdIOCtx * out, int cs, int fmt)
-{
- int ncx, ncy, cx, cy;
- int x, y, ylo, yhi, xlo, xhi;
- int chunkLen;
- int chunkNum = 0;
- char *chunkData = NULL; /* So we can gdFree it with impunity. */
- char *compData = NULL; /* So we can gdFree it with impunity. */
- uLongf compLen;
- int idxPos = 0;
- int idxSize;
- t_chunk_info *chunkIdx = NULL;
- int posSave;
- int bytesPerPixel = im->trueColor ? 4 : 1;
- int compMax = 0;
-
- /*printf("Trying to write GD2 file\n"); */
-
- /* */
- /* Force fmt to a valid value since we don't return anything. */
- /* */
- if ((fmt != GD2_FMT_RAW) && (fmt != GD2_FMT_COMPRESSED)) {
- fmt = GD2_FMT_COMPRESSED;
- };
- if (im->trueColor) {
- fmt += 2;
- }
- /* */
- /* Make sure chunk size is valid. These are arbitrary values; 64 because it seems */
- /* a little silly to expect performance improvements on a 64x64 bit scale, and */
- /* 4096 because we buffer one chunk, and a 16MB buffer seems a little large - it may be */
- /* OK for one user, but for another to read it, they require the buffer. */
- /* */
- if (cs == 0) {
- cs = GD2_CHUNKSIZE;
- } else if (cs < GD2_CHUNKSIZE_MIN) {
- cs = GD2_CHUNKSIZE_MIN;
- } else if (cs > GD2_CHUNKSIZE_MAX) {
- cs = GD2_CHUNKSIZE_MAX;
- };
-
- /* Work out number of chunks. */
- ncx = (im->sx + cs - 1) / cs;
- ncy = (im->sy + cs - 1) / cs;
-
- /* Write the standard header. */
- _gd2PutHeader (im, out, cs, fmt, ncx, ncy);
-
- if (gd2_compressed (fmt)) {
- /* */
- /* Work out size of buffer for compressed data, If CHUNKSIZE is large, */
- /* then these will be large! */
- /* */
- /* The zlib notes say output buffer size should be (input size) * 1.01 * 12 */
- /* - we'll use 1.02 to be paranoid. */
- /* */
- compMax = cs * bytesPerPixel * cs * 1.02 + 12;
-
- /* */
- /* Allocate the buffers. */
- /* */
- chunkData = gdCalloc (cs * bytesPerPixel * cs, 1);
- if (!chunkData) {
- goto fail;
- }
- compData = gdCalloc (compMax, 1);
- if (!compData) {
- goto fail;
- }
-
- /* */
- /* Save the file position of chunk index, and allocate enough space for */
- /* each chunk_info block . */
- /* */
- idxPos = gdTell (out);
- idxSize = ncx * ncy * sizeof (t_chunk_info);
- GD2_DBG (printf ("Index size is %d\n", idxSize));
- gdSeek (out, idxPos + idxSize);
-
- chunkIdx = gdCalloc (idxSize * sizeof (t_chunk_info), 1);
- if (!chunkIdx) {
- goto fail;
- }
- };
-
- _gdPutColors (im, out);
-
- GD2_DBG (printf ("Size: %dx%d\n", im->sx, im->sy));
- GD2_DBG (printf ("Chunks: %dx%d\n", ncx, ncy));
-
- for (cy = 0; (cy < ncy); cy++) {
- for (cx = 0; (cx < ncx); cx++) {
-
- ylo = cy * cs;
- yhi = ylo + cs;
- if (yhi > im->sy) {
- yhi = im->sy;
- };
-
- GD2_DBG (printf
- ("Processing Chunk (%dx%d), y from %d to %d\n", cx, cy,
- ylo, yhi));
- chunkLen = 0;
- for (y = ylo; (y < yhi); y++) {
-
- /*GD2_DBG(printf("y=%d: ",y)); */
-
- xlo = cx * cs;
- xhi = xlo + cs;
- if (xhi > im->sx) {
- xhi = im->sx;
- };
-
- if (gd2_compressed (fmt)) {
- for (x = xlo; x < xhi; x++) {
- /* 2.0.11: use truecolor pixel array. TBB */
- /*GD2_DBG(printf("%d...",x)); */
- if (im->trueColor) {
- int p = im->tpixels[y][x];
- chunkData[chunkLen++] = gdTrueColorGetAlpha (p);
- chunkData[chunkLen++] = gdTrueColorGetRed (p);
- chunkData[chunkLen++] = gdTrueColorGetGreen (p);
- chunkData[chunkLen++] = gdTrueColorGetBlue (p);
- } else {
- int p = im->pixels[y][x];
- chunkData[chunkLen++] = p;
- }
- };
- } else {
- for (x = xlo; x < xhi; x++) {
- /*GD2_DBG(printf("%d, ",x)); */
-
- if (im->trueColor) {
- gdPutInt (im->tpixels[y][x], out);
- } else {
- gdPutC ((unsigned char) im->pixels[y][x], out);
- }
- };
- };
- /*GD2_DBG(printf("y=%d done.\n",y)); */
- };
- if (gd2_compressed (fmt)) {
- compLen = compMax;
- if (compress ((unsigned char *)
- &compData[0], &compLen,
- (unsigned char *) &chunkData[0],
- chunkLen) != Z_OK) {
- printf ("Error from compressing\n");
- } else {
- chunkIdx[chunkNum].offset = gdTell (out);
- chunkIdx[chunkNum++].size = compLen;
- GD2_DBG (printf
- ("Chunk %d size %d offset %d\n", chunkNum,
- chunkIdx[chunkNum - 1].size,
- chunkIdx[chunkNum - 1].offset));
-
- if (gdPutBuf (compData, compLen, out) <= 0) {
- gd_error("gd write error\n");
- };
- };
- };
- };
- };
- if (gd2_compressed (fmt)) {
- /* Save the position, write the index, restore position (paranoia). */
- GD2_DBG (printf ("Seeking %d to write index\n", idxPos));
- posSave = gdTell (out);
- gdSeek (out, idxPos);
- GD2_DBG (printf ("Writing index\n"));
- for (x = 0; x < chunkNum; x++) {
- GD2_DBG (printf
- ("Chunk %d size %d offset %d\n", x, chunkIdx[x].size,
- chunkIdx[x].offset));
- gdPutInt (chunkIdx[x].offset, out);
- gdPutInt (chunkIdx[x].size, out);
- };
- /* We don't use fwrite for *endian reasons. */
- /*fwrite(chunkIdx, sizeof(int)*2, chunkNum, out); */
- gdSeek (out, posSave);
- };
-
- /*printf("Memory block size is %d\n",gdTell(out)); */
-fail:
- GD2_DBG (printf ("Freeing memory\n"));
-
- if (chunkData) {
- gdFree (chunkData);
- }
- if (compData) {
- gdFree (compData);
- }
- if (chunkIdx) {
- gdFree (chunkIdx);
- }
- GD2_DBG (printf ("Done\n"));
-
-}
-
-/*
- Function: gdImageGd2
-*/
-BGD_DECLARE(void) gdImageGd2 (gdImagePtr im, FILE * outFile, int cs, int fmt)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- if (out == NULL) return;
- _gdImageGd2 (im, out, cs, fmt);
- out->gd_free (out);
-}
-
-/*
- Function: gdImageGd2Ptr
-*/
-BGD_DECLARE(void *) gdImageGd2Ptr (gdImagePtr im, int cs, int fmt, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- if (out == NULL) return NULL;
- _gdImageGd2 (im, out, cs, fmt);
- rv = gdDPExtractData (out, size);
- out->gd_free (out);
- return rv;
-}
-
-#else /* no HAVE_LIBZ or !ENABLE_GD_FORMATS */
-static void _noGd2Error (void)
-{
-#if !ENABLE_GD_FORMATS
- gd_error("GD2 image support has been disabled\n");
-#else
- gd_error("GD2 support is not available - no libz\n");
-#endif
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2 (FILE * inFile)
-{
- _noGd2Error();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Ctx (gdIOCtxPtr in)
-{
- _noGd2Error();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Part (FILE * inFile, int srcx, int srcy, int w, int h)
-{
- _noGd2Error();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2Ptr (int size, void *data)
-{
- _noGd2Error();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2PartCtx (gdIOCtx * in, int srcx, int srcy, int w, int h)
-{
- _noGd2Error();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGd2PartPtr (int size, void *data, int srcx, int srcy, int w,
- int h)
-{
- _noGd2Error();
- return NULL;
-}
-
-BGD_DECLARE(void) gdImageGd2 (gdImagePtr im, FILE * outFile, int cs, int fmt)
-{
- _noGd2Error();
-}
-
-BGD_DECLARE(void *) gdImageGd2Ptr (gdImagePtr im, int cs, int fmt, int *size)
-{
- _noGd2Error();
- return NULL;
-}
-#endif /* HAVE_LIBZ */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_gif_in.c b/Build/source/libs/gd/libgd-src/src/gd_gif_in.c
deleted file mode 100644
index 1ae0e32b23f..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_gif_in.c
+++ /dev/null
@@ -1,759 +0,0 @@
-/**
- * File: GIF Input
- *
- * Read GIF images.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* Used only when debugging GIF compression code */
-/* #define DEBUGGING_ENVARS */
-
-#ifdef DEBUGGING_ENVARS
-
-static int verbose_set = 0;
-static int verbose;
-
-#define VERBOSE (verbose_set ? verbose : set_verbose())
-
-static int set_verbose(void)
-{
- verbose = !!getenv("GIF_VERBOSE");
- verbose_set = 1;
- return(verbose);
-}
-
-#else
-
-#define VERBOSE 0
-
-#endif
-
-#define MAXCOLORMAPSIZE 256
-
-#define TRUE 1
-#define FALSE 0
-
-#define CM_RED 0
-#define CM_GREEN 1
-#define CM_BLUE 2
-
-#define MAX_LWZ_BITS 12
-
-#define INTERLACE 0x40
-#define LOCALCOLORMAP 0x80
-
-#define BitSet(byte, bit) (((byte) & (bit)) == (bit))
-
-#define ReadOK(file, buffer, len) (gdGetBuf(buffer, len, file) == len)
-
-#define LM_to_uint(a, b) (((b)<<8)|(a))
-
-/* We may eventually want to use this information, but def it out for now */
-#if 0
-static struct {
- unsigned int Width;
- unsigned int Height;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- unsigned int BitPixel;
- unsigned int ColorResolution;
- unsigned int Background;
- unsigned int AspectRatio;
-} GifScreen;
-#endif
-
-#if 0
-static struct {
- int transparent;
- int delayTime;
- int inputFlag;
- int disposal;
-} Gif89 = { -1, -1, -1, 0 };
-#endif
-
-#define STACK_SIZE ((1<<(MAX_LWZ_BITS))*2)
-
-#define CSD_BUF_SIZE 280
-
-typedef struct {
- unsigned char buf[CSD_BUF_SIZE];
- int curbit;
- int lastbit;
- int done;
- int last_byte;
-} CODE_STATIC_DATA;
-
-typedef struct {
- int fresh;
- int code_size, set_code_size;
- int max_code, max_code_size;
- int firstcode, oldcode;
- int clear_code, end_code;
- int table[2][(1<< MAX_LWZ_BITS)];
- int stack[STACK_SIZE], *sp;
- CODE_STATIC_DATA scd;
-} LZW_STATIC_DATA;
-
-static int ReadColorMap (gdIOCtx *fd, int number, unsigned char (*buffer)[256]);
-static int DoExtension (gdIOCtx *fd, int label, int *Transparent, int *ZeroDataBlockP);
-static int GetDataBlock (gdIOCtx *fd, unsigned char *buf, int *ZeroDataBlockP);
-static int GetCode (gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP);
-static int LWZReadByte (gdIOCtx *fd, LZW_STATIC_DATA *sd, char flag, int input_code_size, int *ZeroDataBlockP);
-
-static void ReadImage (gdImagePtr im, gdIOCtx *fd, int len, int height, unsigned char (*cmap)[256], int interlace, int *ZeroDataBlockP); /*1.4//, int ignore); */
-
-/*
- Function: gdImageCreateFromGif
-
- <gdImageCreateFromGif> is called to load images from GIF format
- files. Invoke <gdImageCreateFromGif> with an already opened
- pointer to a file containing the desired
- image.
-
- <gdImageCreateFromGif> returns a <gdImagePtr> to the new image, or
- NULL if unable to load the image (most often because the file is
- corrupt or does not contain a GIF image). <gdImageCreateFromGif>
- does not close the file. You can inspect the sx and sy members of
- the image to determine its size. The image must eventually be
- destroyed using <gdImageDestroy>.
-
- Variants:
-
- <gdImageCreateFromGifPtr> creates an image from GIF data (i.e. the
- contents of a GIF file) already in memory.
-
- <gdImageCreateFromGifCtx> reads in an image using the functions in
- a <gdIOCtx> struct.
-
- Parameters:
-
- infile - The input FILE pointer
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
-
- > gdImagePtr im;
- > ... inside a function ...
- > FILE *in;
- > in = fopen("mygif.gif", "rb");
- > im = gdImageCreateFromGif(in);
- > fclose(in);
- > // ... Use the image ...
- > gdImageDestroy(im);
-
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGif(FILE *fdFile)
-{
- gdIOCtx *fd = gdNewFileCtx(fdFile);
- gdImagePtr im;
-
- if (fd == NULL) return NULL;
- im = gdImageCreateFromGifCtx(fd);
-
- fd->gd_free(fd);
-
- return im;
-}
-
-/*
- Function: gdImageCreateFromGifPtr
-
- Parameters:
-
- size - size of GIF data in bytes.
- data - GIF data (i.e. contents of a GIF file).
-
- See <gdImageCreateFromGif>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGifPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- if(!in) {
- return 0;
- }
- im = gdImageCreateFromGifCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromGifCtx
-
- See <gdImageCreateFromGif>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromGifCtx(gdIOCtxPtr fd)
-{
- int BitPixel;
-#if 0
- int ColorResolution;
- int Background;
- int AspectRatio;
-#endif
- int Transparent = (-1);
- unsigned char buf[16];
- unsigned char c;
- unsigned char ColorMap[3][MAXCOLORMAPSIZE];
- unsigned char localColorMap[3][MAXCOLORMAPSIZE];
- int imw, imh, screen_width, screen_height;
- int useGlobalColormap;
- int bitPixel, i;
- /*1.4//int imageCount = 0; */
- /* 2.0.28: threadsafe storage */
- int ZeroDataBlock = FALSE;
- int haveGlobalColormap;
-
- gdImagePtr im = 0;
-
- memset(ColorMap, 0, 3 * MAXCOLORMAPSIZE);
- memset(localColorMap, 0, 3 * MAXCOLORMAPSIZE);
-
- if(!ReadOK(fd, buf, 6)) {
- return 0;
- }
-
- if(strncmp((char *)buf, "GIF", 3) != 0) {
- return 0;
- }
-
- if(memcmp((char *)buf + 3, "87a", 3) == 0) {
- /* GIF87a */
- } else if(memcmp((char *)buf + 3, "89a", 3) == 0) {
- /* GIF89a */
- } else {
- return 0;
- }
-
- if(!ReadOK(fd, buf, 7)) {
- return 0;
- }
-
- BitPixel = 2 << (buf[4] & 0x07);
-#if 0
- ColorResolution = (int) (((buf[4]&0x70)>>3)+1);
- Background = buf[5];
- AspectRatio = buf[6];
-#endif
- screen_width = imw = LM_to_uint(buf[0], buf[1]);
- screen_height = imh = LM_to_uint(buf[2], buf[3]);
-
- haveGlobalColormap = BitSet(buf[4], LOCALCOLORMAP); /* Global Colormap */
- if(haveGlobalColormap) {
- if(ReadColorMap(fd, BitPixel, ColorMap)) {
- return 0;
- }
- }
-
- for (;;) {
- int top, left;
- int width, height;
-
- if(!ReadOK(fd, &c, 1)) {
- return 0;
- }
-
- if (c == ';') { /* GIF terminator */
- goto terminated;
- }
-
- if(c == '!') { /* Extension */
- if(!ReadOK(fd, &c, 1)) {
- return 0;
- }
-
- DoExtension(fd, c, &Transparent, &ZeroDataBlock);
- continue;
- }
-
- if(c != ',') { /* Not a valid start character */
- continue;
- }
-
- /*1.4//++imageCount; */
-
- if(!ReadOK(fd, buf, 9)) {
- return 0;
- }
-
- useGlobalColormap = !BitSet(buf[8], LOCALCOLORMAP);
-
- bitPixel = 1 << ((buf[8] & 0x07) + 1);
- left = LM_to_uint(buf[0], buf[1]);
- top = LM_to_uint(buf[2], buf[3]);
- width = LM_to_uint(buf[4], buf[5]);
- height = LM_to_uint(buf[6], buf[7]);
-
- if(((left + width) > screen_width) || ((top + height) > screen_height)) {
- if(VERBOSE) {
- printf("Frame is not confined to screen dimension.\n");
- }
- return 0;
- }
-
- if(!(im = gdImageCreate(width, height))) {
- return 0;
- }
-
- im->interlace = BitSet(buf[8], INTERLACE);
- if(!useGlobalColormap) {
- if(ReadColorMap(fd, bitPixel, localColorMap)) {
- gdImageDestroy(im);
- return 0;
- }
-
- ReadImage(im, fd, width, height, localColorMap, BitSet(buf[8], INTERLACE), &ZeroDataBlock);
- } else {
- if(!haveGlobalColormap) {
- gdImageDestroy(im);
- return 0;
- }
-
- ReadImage(im, fd, width, height, ColorMap, BitSet(buf[8], INTERLACE), &ZeroDataBlock);
- }
-
- if(Transparent != (-1)) {
- gdImageColorTransparent(im, Transparent);
- }
-
- goto terminated;
- }
-
-terminated:
- /* Terminator before any image was declared! */
- if(!im) {
- return 0;
- }
-
- /* Check for open colors at the end, so
- * we can reduce colorsTotal and ultimately
- * BitsPerPixel */
- for(i = im->colorsTotal - 1; i >= 0; i--) {
- if(im->open[i]) {
- im->colorsTotal--;
- } else {
- break;
- }
- }
-
- if(!im->colorsTotal) {
- gdImageDestroy(im);
- return 0;
- }
-
- return im;
-}
-
-static int
-ReadColorMap(gdIOCtx *fd, int number, unsigned char (*buffer)[256])
-{
- int i;
- unsigned char rgb[3];
-
- for(i = 0; i < number; ++i) {
- if(!ReadOK(fd, rgb, sizeof(rgb))) {
- return TRUE;
- }
-
- buffer[CM_RED][i] = rgb[0];
- buffer[CM_GREEN][i] = rgb[1];
- buffer[CM_BLUE][i] = rgb[2];
- }
-
- return FALSE;
-}
-
-static int
-DoExtension(gdIOCtx *fd, int label, int *Transparent, int *ZeroDataBlockP)
-{
- unsigned char buf[256];
-
- switch(label) {
- case 0xf9: /* Graphic Control Extension */
- memset(buf, 0, 4); /* initialize a few bytes in the case the next function fails */
- (void) GetDataBlock(fd, (unsigned char*) buf, ZeroDataBlockP);
-#if 0
- Gif89.disposal = (buf[0] >> 2) & 0x7;
- Gif89.inputFlag = (buf[0] >> 1) & 0x1;
- Gif89.delayTime = LM_to_uint(buf[1], buf[2]);
-#endif
- if((buf[0] & 0x1) != 0) {
- *Transparent = buf[3];
- }
-
- while(GetDataBlock(fd, (unsigned char*) buf, ZeroDataBlockP) > 0);
-
- return FALSE;
-
- default:
- break;
- }
-
- while(GetDataBlock(fd, (unsigned char*) buf, ZeroDataBlockP) > 0);
-
- return FALSE;
-}
-
-static int
-GetDataBlock_(gdIOCtx *fd, unsigned char *buf, int *ZeroDataBlockP)
-{
- unsigned char count;
-
- if(!ReadOK(fd, &count, 1)) {
- return -1;
- }
-
- *ZeroDataBlockP = count == 0;
-
- if((count != 0) && (!ReadOK(fd, buf, count))) {
- return -1;
- }
-
- return count;
-}
-
-static int
-GetDataBlock(gdIOCtx *fd, unsigned char *buf, int *ZeroDataBlockP)
-{
- int rv, i;
-
- rv = GetDataBlock_(fd,buf, ZeroDataBlockP);
-
- if(VERBOSE) {
- printf("[GetDataBlock returning %d",rv);
- if(rv > 0) {
- printf(":");
- for(i = 0; i < rv; i++) {
- printf(" %02x",buf[i]);
- }
- }
- printf("]\n");
- }
-
- return rv;
-}
-
-static int
-GetCode_(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)
-{
- int i, j, ret;
- int count;
-
- if(flag) {
- scd->curbit = 0;
- scd->lastbit = 0;
- scd->last_byte = 2;
- scd->done = FALSE;
- return 0;
- }
-
- if((scd->curbit + code_size) >= scd->lastbit) {
- if(scd->done) {
- if(scd->curbit >= scd->lastbit) {
- /* Oh well */
- }
- return -1;
- }
-
- scd->buf[0] = scd->buf[scd->last_byte - 2];
- scd->buf[1] = scd->buf[scd->last_byte - 1];
-
- if((count = GetDataBlock(fd, &scd->buf[2], ZeroDataBlockP)) <= 0) {
- scd->done = TRUE;
- }
-
- scd->last_byte = 2 + count;
- scd->curbit = (scd->curbit - scd->lastbit) + 16;
- scd->lastbit = (2 + count) * 8;
- }
-
- if ((scd->curbit + code_size - 1) >= (CSD_BUF_SIZE * 8)) {
- ret = -1;
- } else {
- ret = 0;
- for (i = scd->curbit, j = 0; j < code_size; ++i, ++j) {
- ret |= ((scd->buf[i / 8] & (1 << (i % 8))) != 0) << j;
- }
- }
-
- scd->curbit += code_size;
-
- return ret;
-}
-
-static int
-GetCode(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)
-{
- int rv;
-
- rv = GetCode_(fd, scd, code_size,flag, ZeroDataBlockP);
-
- if(VERBOSE) {
- printf("[GetCode(,%d,%d) returning %d]\n",code_size,flag,rv);
- }
-
- return rv;
-}
-
-static int
-LWZReadByte_(gdIOCtx *fd, LZW_STATIC_DATA *sd, char flag, int input_code_size, int *ZeroDataBlockP)
-{
- int code, incode, i;
-
- if(flag) {
- sd->set_code_size = input_code_size;
- sd->code_size = sd->set_code_size + 1;
- sd->clear_code = 1 << sd->set_code_size;
- sd->end_code = sd->clear_code + 1;
- sd->max_code_size = 2 * sd->clear_code;
- sd->max_code = sd->clear_code + 2;
-
- GetCode(fd, &sd->scd, 0, TRUE, ZeroDataBlockP);
-
- sd->fresh = TRUE;
-
- for(i = 0; i < sd->clear_code; ++i) {
- sd->table[0][i] = 0;
- sd->table[1][i] = i;
- }
-
- for(; i < (1 << MAX_LWZ_BITS); ++i) {
- sd->table[0][i] = sd->table[1][0] = 0;
- }
-
- sd->sp = sd->stack;
-
- return 0;
-
- } else if(sd->fresh) {
- sd->fresh = FALSE;
-
- do {
- sd->firstcode = sd->oldcode =
- GetCode(fd, &sd->scd, sd->code_size, FALSE, ZeroDataBlockP);
- } while(sd->firstcode == sd->clear_code);
-
- return sd->firstcode;
- }
-
- if(sd->sp > sd->stack) {
- return *--sd->sp;
- }
-
- while((code = GetCode(fd, &sd->scd, sd->code_size, FALSE, ZeroDataBlockP)) >= 0) {
- if(code == sd->clear_code) {
- for(i = 0; i < sd->clear_code; ++i) {
- sd->table[0][i] = 0;
- sd->table[1][i] = i;
- }
-
- for (; i < (1 << MAX_LWZ_BITS); ++i) {
- sd->table[0][i] = sd->table[1][i] = 0;
- }
-
- sd->code_size = sd->set_code_size + 1;
- sd->max_code_size = 2 * sd->clear_code;
- sd->max_code = sd->clear_code + 2;
- sd->sp = sd->stack;
- sd->firstcode = sd->oldcode =
- GetCode(fd, &sd->scd, sd->code_size, FALSE, ZeroDataBlockP);
-
- return sd->firstcode;
- } else if(code == sd->end_code) {
- int count;
- unsigned char buf[260];
-
- if(*ZeroDataBlockP) {
- return -2;
- }
-
- while((count = GetDataBlock(fd, buf, ZeroDataBlockP)) > 0);
-
- if(count != 0) {
- return -2;
- }
- }
-
- incode = code;
-
- if(sd->sp == (sd->stack + STACK_SIZE)) {
- /* Bad compressed data stream */
- return -1;
- }
-
- if(code >= sd->max_code) {
- *sd->sp++ = sd->firstcode;
- code = sd->oldcode;
- }
-
- while(code >= sd->clear_code) {
- if(sd->sp == (sd->stack + STACK_SIZE)) {
- /* Bad compressed data stream */
- return -1;
- }
- if(code >= (1 << MAX_LWZ_BITS)) {
- /* Corrupted code */
- return -1;
- }
-
- *sd->sp++ = sd->table[1][code];
-
- if(code == sd->table[0][code]) {
- /* Oh well */
- }
-
- code = sd->table[0][code];
- }
- if(code >= (1 << MAX_LWZ_BITS)) {
- /* Corrupted code */
- return -1;
- }
-
- *sd->sp++ = sd->firstcode = sd->table[1][code];
-
- if((code = sd->max_code) < (1 << MAX_LWZ_BITS)) {
- sd->table[0][code] = sd->oldcode;
- sd->table[1][code] = sd->firstcode;
- ++sd->max_code;
-
- if((sd->max_code >= sd->max_code_size) && (sd->max_code_size < (1<<MAX_LWZ_BITS))) {
- sd->max_code_size *= 2;
- ++sd->code_size;
- }
- }
-
- sd->oldcode = incode;
-
- if(sd->sp > sd->stack) {
- return *--sd->sp;
- }
- }
-
- return code;
-}
-
-static int
-LWZReadByte(gdIOCtx *fd, LZW_STATIC_DATA *sd, char flag, int input_code_size, int *ZeroDataBlockP)
-{
- int rv;
-
- rv = LWZReadByte_(fd, sd, flag, input_code_size, ZeroDataBlockP);
-
- if(VERBOSE) {
- printf("[LWZReadByte(,%d,%d) returning %d]\n",flag,input_code_size,rv);
- }
-
- return rv;
-}
-
-static void
-ReadImage(gdImagePtr im, gdIOCtx *fd, int len, int height, unsigned char (*cmap)[256], int interlace, int *ZeroDataBlockP) /*1.4//, int ignore) */
-{
- unsigned char c;
- int xpos = 0, ypos = 0, pass = 0;
- int v, i;
- LZW_STATIC_DATA sd;
-
- /* Initialize the Compression routines */
- if(!ReadOK(fd, &c, 1)) {
- return;
- }
-
- if(c > MAX_LWZ_BITS) {
- return;
- }
-
- /* Stash the color map into the image */
- for(i=0; (i < gdMaxColors); i++) {
- im->red[i] = cmap[CM_RED][i];
- im->green[i] = cmap[CM_GREEN][i];
- im->blue[i] = cmap[CM_BLUE][i];
- im->open[i] = 1;
- }
-
- /* Many (perhaps most) of these colors will remain marked open. */
- im->colorsTotal = gdMaxColors;
- if(LWZReadByte(fd, &sd, TRUE, c, ZeroDataBlockP) < 0) {
- return;
- }
-
- /*
- ** If this is an "uninteresting picture" ignore it.
- ** REMOVED For 1.4
- */
- /*if (ignore) { */
- /* while (LWZReadByte(fd, &sd, FALSE, c) >= 0) */
- /* ; */
- /* return; */
- /*} */
-
- while((v = LWZReadByte(fd, &sd, FALSE, c, ZeroDataBlockP)) >= 0 ) {
- if(v >= gdMaxColors) {
- v = 0;
- }
-
- /* This how we recognize which colors are actually used. */
- if(im->open[v]) {
- im->open[v] = 0;
- }
-
- gdImageSetPixel(im, xpos, ypos, v);
-
- ++xpos;
- if(xpos == len) {
- xpos = 0;
- if(interlace) {
- switch (pass) {
- case 0:
- case 1:
- ypos += 8;
- break;
- case 2:
- ypos += 4;
- break;
- case 3:
- ypos += 2;
- break;
- }
-
- if(ypos >= height) {
- ++pass;
- switch (pass) {
- case 1:
- ypos = 4;
- break;
- case 2:
- ypos = 2;
- break;
- case 3:
- ypos = 1;
- break;
- default:
- goto fini;
- }
- }
- } else {
- ++ypos;
- }
- }
-
- if(ypos >= height) {
- break;
- }
- }
-
-fini:
- if(LWZReadByte(fd, &sd, FALSE, c, ZeroDataBlockP) >=0) {
- /* Ignore extra */
- }
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_gif_out.c b/Build/source/libs/gd/libgd-src/src/gd_gif_out.c
deleted file mode 100644
index 2dd866a74a6..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_gif_out.c
+++ /dev/null
@@ -1,1636 +0,0 @@
-/**
- * File: GIF Output
- *
- * Write GIF images.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* Code drawn from ppmtogif.c, from the pbmplus package
-**
-** Based on GIFENCOD by David Rowley <mgardi@watdscu.waterloo.edu>. A
-** Lempel-Zim compression based on "compress".
-**
-** Modified by Marcel Wijkstra <wijkstra@fwi.uva.nl>
-**
-** Copyright (C) 1989 by Jef Poskanzer.
-**
-** Permission to use, copy, modify, and distribute this software and its
-** documentation for any purpose and without fee is hereby granted, provided
-** that the above copyright notice appear in all copies and that both that
-** copyright notice and this permission notice appear in supporting
-** documentation. This software is provided "as is" without express or
-** implied warranty.
-**
-** The Graphics Interchange Format(c) is the Copyright property of
-** CompuServe Incorporated. GIF(sm) is a Service Mark property of
-** CompuServe Incorporated.
-*/
-
-/* a code_int must be able to hold 2**GIFBITS values of type int, and also -1 */
-typedef int code_int;
-
-#ifdef SIGNED_COMPARE_SLOW
-typedef unsigned long int count_int;
-typedef unsigned short int count_short;
-#else /* SIGNED_COMPARE_SLOW */
-typedef long int count_int;
-#endif /* SIGNED_COMPARE_SLOW */
-
-/* 2.0.28: threadsafe */
-
-#define maxbits GIFBITS
-
-/* should NEVER generate this code */
-#define maxmaxcode ((code_int)1 << GIFBITS)
-
-#define HSIZE 5003 /* 80% occupancy */
-#define hsize HSIZE /* Apparently invariant, left over from compress */
-
-typedef struct {
- int Width, Height;
- int curx, cury;
- long CountDown;
- int Pass;
- int Interlace;
- int n_bits;
- code_int maxcode;
- count_int htab [HSIZE];
- unsigned short codetab [HSIZE];
- /* first unused entry */
- code_int free_ent;
- /* block compression parameters -- after all codes are used up,
- * and compression rate changes, start over. */
- int clear_flg;
- int offset;
- long int in_count;
- /* # of codes output (for debugging) */
- long int out_count;
- int g_init_bits;
- gdIOCtx * g_outfile;
- int ClearCode;
- int EOFCode;
- unsigned long cur_accum;
- int cur_bits;
- int a_count;
- char accum[ 256 ];
-} GifCtx;
-
-static int gifPutWord(int w, gdIOCtx *out);
-static int colorstobpp(int colors);
-static void BumpPixel(GifCtx *ctx);
-static int GIFNextPixel(gdImagePtr im, GifCtx *ctx);
-static void GIFEncode(gdIOCtxPtr fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im);
-static void GIFAnimEncode(gdIOCtxPtr fp, int IWidth, int IHeight, int LeftOfs, int TopOfs, int GInterlace, int Transparent, int Delay, int Disposal, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im);
-static void compress(int init_bits, gdIOCtx *outfile, gdImagePtr im, GifCtx *ctx);
-static void output(code_int code, GifCtx *ctx);
-static void cl_block(GifCtx *ctx);
-static void cl_hash(register count_int chsize, GifCtx *ctx);
-static void char_init(GifCtx *ctx);
-static void char_out(int c, GifCtx *ctx);
-static void flush_char(GifCtx *ctx);
-
-static int _gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out);
-static int _gdImageGifAnimAddCtx(gdImagePtr im, gdIOCtxPtr out,
- int LocalCM, int LeftOfs, int TopOfs,
- int Delay, int Disposal,
- gdImagePtr previm);
-
-
-
-/*
- Function: gdImageGifPtr
-
- Identical to <gdImageGif> except that it returns a pointer to a
- memory area with the GIF data. This memory must be freed by the
- caller when it is no longer needed.
-
- The caller *must* invoke <gdFree>, not _free()_. This is because
- it is not guaranteed that libgd will use the same implementation
- of malloc, free, etc. as your proggram.
-
- The 'size' parameter receives the total size of the block of
- memory.
-
- Parameters:
-
- im - The image to write
- size - Output: the size of the resulting image.
-
- Returns:
-
- A pointer to the GIF data or NULL if an error occurred.
-
-*/
-BGD_DECLARE(void *) gdImageGifPtr(gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImageGifCtx(im, out)) {
- rv = gdDPExtractData(out, size);
- } else {
- rv = NULL;
- }
- out->gd_free(out);
- return rv;
-}
-
-/*
- Function: gdImageGif
-
- <gdImageGif> outputs the specified image to the specified file in
- GIF format. The file must be open for binary writing. (Under MSDOS
- and all versions of Windows, it is important to use "wb" as
- opposed to simply "w" as the mode when opening the file; under
- Unix there is no penalty for doing so). <gdImageGif> does not close
- the file; your code must do so.
-
- GIF does not support true color; GIF images can contain a maximum
- of 256 colors. If the image to be written is a truecolor image,
- such as those created with gdImageCreateTrueColor or loaded from a
- JPEG or a truecolor PNG image file, a palette-based temporary
- image will automatically be created internally using the
- <gdImageCreatePaletteFromTrueColor> function. The original image
- pixels are not modified. This conversion produces high quality
- palettes but does require some CPU time. If you are regularly
- converting truecolor to palette in this way, you should consider
- creating your image as a palette-based image in the first place.
-
- Variants:
-
- <gdImageGifCtx> outputs the image via a <gdIOCtx> struct.
-
- <gdImageGifPtr> stores the image in a large array of bytes.
-
- Parameters:
-
- im - The image to write
- outFile - The FILE pointer to write the image to.
-
- Returns:
-
- Nothing
-
- Example:
-
- > gdImagePtr im;
- > int black, white;
- > FILE *out;
- > // Create the image
- > im = gdImageCreate(100, 100);
- > // Allocate background
- > white = gdImageColorAllocate(im, 255, 255, 255);
- > // Allocate drawing color
- > black = gdImageColorAllocate(im, 0, 0, 0);
- > // Draw rectangle
- > gdImageRectangle(im, 0, 0, 99, 99, black);
- > // Open output file in binary mode
- > out = fopen("rect.gif", "wb");
- > // Write GIF
- > gdImageGif(im, out);
- > // Close file
- > fclose(out);
- > // Destroy image
- > gdImageDestroy(im);
-
-*/
-BGD_DECLARE(void) gdImageGif(gdImagePtr im, FILE *outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageGifCtx(im, out);
- out->gd_free(out);
-}
-
-/*
- Function: gdImageGifCtx
-
- Writes a GIF image via a <gdIOCtx>. See <gdImageGif>.
-
- Parameters:
-
- im - The image to write
- out - The <gdIOCtx> struct used to do the writing.
-
- Returns:
-
- Nothing.
-
-*/
-BGD_DECLARE(void) gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
-{
- _gdImageGifCtx(im, out);
-}
-
-/* returns 0 on success, 1 on failure */
-static int _gdImageGifCtx(gdImagePtr im, gdIOCtxPtr out)
-{
- gdImagePtr pim = 0, tim = im;
- int interlace, BitsPerPixel;
- interlace = im->interlace;
-
- if(im->trueColor) {
- /* Expensive, but the only way that produces an
- acceptable result: mix down to a palette
- based temporary image. */
- pim = gdImageCreatePaletteFromTrueColor(im, 1, 256);
- if(!pim) {
- return 1;
- }
- tim = pim;
- }
-
- BitsPerPixel = colorstobpp(tim->colorsTotal);
-
- /* All set, let's do it. */
- GIFEncode(
- out, tim->sx, tim->sy, interlace, 0, tim->transparent, BitsPerPixel,
- tim->red, tim->green, tim->blue, tim);
-
- if(pim) {
- /* Destroy palette based temporary image. */
- gdImageDestroy( pim);
- }
-
- return 0;
-}
-
-
-/*
- Function: gdImageGifAnimBeginPtr
-
- Like <gdImageGifAnimBegin> except that it outputs to a memory
- buffer. See <gdImageGifAnimBegin>.
-
- The returned memory must be freed by the caller when it is no
- longer needed. **The caller must invoke <gdFree>(), not free()**,
- unless the caller is absolutely certain that the same
- implementations of malloc, free, etc. are used both at library
- build time and at application build time (but don't; it could
- always change).
-
- The 'size' parameter receives the total size of the block of
- memory.
-
- Parameters:
-
- im - The reference image
- size - Output: the size in bytes of the result.
- GlobalCM - Global colormap flag: 1 -> yes, 0 -> no, -1 -> do default
- Loops - Loop count; 0 -> infinite, -1 means no loop
-
- Returns:
-
- A pointer to the resulting data (the contents of the start of the
- GIF) or NULL if an error occurred.
-
-*/
-
-BGD_DECLARE(void *) gdImageGifAnimBeginPtr(gdImagePtr im, int *size, int GlobalCM, int Loops)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) return NULL;
- gdImageGifAnimBeginCtx(im, out, GlobalCM, Loops);
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
- return rv;
-}
-
-
-/*
- Function: gdImageGifAnimBegin
-
- This function must be called as the first function when creating a
- GIF animation. It writes the correct GIF file headers to selected
- file output, and prepares for frames to be added for the
- animation. The image argument is not used to produce an image
- frame to the file, it is only used to establish the GIF animation
- frame size, interlacing options and the color
- palette. <gdImageGifAnimAdd> is used to add the first and
- subsequent frames to the animation, and the animation must be
- terminated by writing a semicolon character (;) to it or by using
- gdImageGifAnimEnd to do that.
-
- The GlobalCM flag indicates if a global color map (or palette) is
- used in the GIF89A header. A nonzero value specifies that a global
- color map should be used to reduce the size of the animation. Of
- course, if the color maps of individual frames differ greatly, a
- global color map may not be a good idea. GlobalCM=1 means write
- global color map, GlobalCM=0 means do not, and GlobalCM=-1 means
- to do the default, which currently is to use a global color map.
-
- If Loops is 0 or greater, the Netscape 2.0 extension for animation
- loop count is written. 0 means infinite loop count. -1 means that
- the extension is not added which results in no looping. -1 is the
- default.
-
- Variants:
-
- <gdImageGifAnimBeginCtx> outputs the image via a <gdIOCtx> struct.
-
- <gdImageGifAnimBeginPtr> stores the image in a large array of bytes.
-
- Parameters:
-
- im - The reference image
- outfile - The output FILE*.
- GlobalCM - Global colormap flag: 1 -> yes, 0 -> no, -1 -> do default
- Loops - Loop count; 0 -> infinite, -1 means no loop
-
- Returns:
-
- Nothing.
-
- Example:
-
- See <gdImageGifAnimBegin>.
-
-*/
-
-BGD_DECLARE(void) gdImageGifAnimBegin(gdImagePtr im, FILE *outFile, int GlobalCM, int Loops)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageGifAnimBeginCtx(im, out, GlobalCM, Loops);
- out->gd_free(out);
-}
-
-
-
-/*
- Function: gdImageGifAnimBeginCtx
-
- Like <gdImageGifAnimBegin> except that it outputs to <gdIOCtx>.
- See <gdImageGifAnimBegin>.
-
- Parameters:
-
- im - The reference image
- out - Pointer to the output <gdIOCtx>.
- GlobalCM - Global colormap flag: 1 -> yes, 0 -> no, -1 -> do default
- Loops - Loop count; 0 -> infinite, -1 means no loop
-
- Returns:
-
- Nothing.
-
-*/
-BGD_DECLARE(void) gdImageGifAnimBeginCtx(gdImagePtr im, gdIOCtxPtr out, int GlobalCM, int Loops)
-{
- int B;
- int RWidth, RHeight;
- int Resolution;
- int ColorMapSize;
- int BitsPerPixel;
- int Background = 0;
- int i;
-
- /* Default is to use global color map */
- if (GlobalCM < 0) {
- GlobalCM = 1;
- }
-
- BitsPerPixel = colorstobpp(im->colorsTotal);
- ColorMapSize = 1 << BitsPerPixel;
-
- RWidth = im->sx;
- RHeight = im->sy;
-
- Resolution = BitsPerPixel;
-
- /* Write the Magic header */
- gdPutBuf("GIF89a", 6, out);
-
- /* Write out the screen width and height */
- gifPutWord(RWidth, out);
- gifPutWord(RHeight, out);
-
- /* Indicate that there is a global colour map */
- B = GlobalCM ? 0x80 : 0;
-
- /* OR in the resolution */
- B |= (Resolution - 1) << 4;
-
- /* OR in the Bits per Pixel */
- B |= (BitsPerPixel - 1);
-
- /* Write it out */
- gdPutC(B, out);
-
- /* Write out the Background colour */
- gdPutC(Background, out);
-
- /* Byte of 0's (future expansion) */
- gdPutC(0, out);
-
- /* Write out the Global Colour Map */
- if(GlobalCM) {
- for(i = 0; i < ColorMapSize; ++i) {
- gdPutC(im->red[i], out);
- gdPutC(im->green[i], out);
- gdPutC(im->blue[i], out);
- }
- }
-
- if(Loops >= 0) {
- gdPutBuf("!\377\13NETSCAPE2.0\3\1", 16, out);
- gifPutWord(Loops, out);
- gdPutC(0, out);
- }
-}
-
-
-
-/*
- Function: gdImageGifAnimAddPtr
-
- Like <gdImageGifAnimAdd> (which contains more information) except
- that it stores the data to write into memory and returns a pointer
- to it.
-
- This memory must be freed by the caller when it is no longer
- needed. **The caller must invoke <gdFree>(), not free(),** unless
- the caller is absolutely certain that the same implementations of
- malloc, free, etc. are used both at library build time and at
- application build time (but don't; it could always change).
-
- The 'size' parameter receives the total size of the block of
- memory.
-
- Parameters:
-
- im - The image to add.
- size - Output: the size of the resulting buffer.
- LocalCM - Flag. If 1, use a local color map for this frame.
- LeftOfs - Left offset of image in frame.
- TopOfs - Top offset of image in frame.
- Delay - Delay before next frame (in 1/100 seconds)
- Disposal - MODE: How to treat this frame when the next one loads.
- previm - NULL or a pointer to the previous image written.
-
- Returns:
-
- Pointer to the resulting data or NULL if an error occurred.
-
-*/
-BGD_DECLARE(void *) gdImageGifAnimAddPtr(gdImagePtr im, int *size, int LocalCM,
- int LeftOfs, int TopOfs, int Delay,
- int Disposal, gdImagePtr previm)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImageGifAnimAddCtx(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm)) {
- rv = gdDPExtractData(out, size);
- } else {
- rv = NULL;
- }
- out->gd_free(out);
- return rv;
-}
-
-
-/*
- Function: gdImageGifAnimAdd
-
- This function writes GIF animation frames to GIF animation, which
- was initialized with <gdImageGifAnimBegin>. With _LeftOfs_ and
- _TopOfs_ you can place this frame in different offset than (0,0)
- inside the image screen as defined in <gdImageGifAnimBegin>. Delay
- between the previous frame and this frame is in 1/100s
- units. _Disposal_ is usually <gdDisposalNone>, meaning that the
- pixels changed by this frame should remain on the display when the
- next frame begins to render, but can also be <gdDisposalUnknown>
- (not recommended), <gdDisposalRestoreBackground> (restores the
- first allocated color of the global palette), or
- <gdDisposalRestorePrevious> (restores the appearance of the
- affected area before the frame was rendered). Only
- <gdDisposalNone> is a sensible choice for the first frame. If
- _previm_ is passed, the built-in GIF optimizer will always use
- <gdDisposalNone> regardless of the Disposal parameter.
-
- Setting the _LocalCM_ flag to 1 adds a local palette for this
- image to the animation. Otherwise the global palette is assumed
- and the user must make sure the palettes match. Use
- <gdImagePaletteCopy> to do that.
-
- Automatic optimization is activated by giving the previous image
- as a parameter. This function then compares the images and only
- writes the changed pixels to the new frame in animation. The
- _Disposal_ parameter for optimized animations must be set to 1,
- also for the first frame. _LeftOfs_ and _TopOfs_ parameters are
- ignored for optimized frames. To achieve good optimization, it is
- usually best to use a single global color map. To allow
- <gdImageGifAnimAdd> to compress unchanged pixels via the use of a
- transparent color, the image must include a transparent color.
-
-
- Variants:
-
- <gdImageGifAnimAddCtx> outputs its data via a <gdIOCtx> struct.
-
- <gdImageGifAnimAddPtr> outputs its data to a memory buffer which
- it returns.
-
- Parameters:
-
- im - The image to add.
- outfile - The output FILE* being written.
- LocalCM - Flag. If 1, use a local color map for this frame.
- LeftOfs - Left offset of image in frame.
- TopOfs - Top offset of image in frame.
- Delay - Delay before next frame (in 1/100 seconds)
- Disposal - MODE: How to treat this frame when the next one loads.
- previm - NULL or a pointer to the previous image written.
-
- Returns:
-
- Nothing.
-
- Example:
- (start code)
-
- {
- gdImagePtr im, im2, im3;
- int black, white, trans;
- FILE *out;
-
- im = gdImageCreate(100, 100); // Create the image
- white = gdImageColorAllocate(im, 255, 255, 255); // Allocate background
- black = gdImageColorAllocate(im, 0, 0, 0); // Allocate drawing color
- trans = gdImageColorAllocate(im, 1, 1, 1); // trans clr for compression
- gdImageRectangle(im, 0, 0, 10, 10, black); // Draw rectangle
-
- out = fopen("anim.gif", "wb");// Open output file in binary mode
- gdImageGifAnimBegin(im, out, 1, 3);// Write GIF hdr, global clr map,loops
- // Write the first frame. No local color map. Delay = 1s
- gdImageGifAnimAdd(im, out, 0, 0, 0, 100, 1, NULL);
-
- // construct the second frame
- im2 = gdImageCreate(100, 100);
- (void)gdImageColorAllocate(im2, 255, 255, 255); // White background
- gdImagePaletteCopy (im2, im); // Make sure the palette is identical
- gdImageRectangle(im2, 0, 0, 15, 15, black); // Draw something
- // Allow animation compression with transparent pixels
- gdImageColorTransparent (im2, trans);
- gdImageGifAnimAdd(im2, out, 0, 0, 0, 100, 1, im); // Add second frame
-
- // construct the third frame
- im3 = gdImageCreate(100, 100);
- (void)gdImageColorAllocate(im3, 255, 255, 255); // white background
- gdImagePaletteCopy (im3, im); // Make sure the palette is identical
- gdImageRectangle(im3, 0, 0, 15, 20, black); // Draw something
- // Allow animation compression with transparent pixels
- gdImageColorTransparent (im3, trans);
- // Add the third frame, compressing against the second one
- gdImageGifAnimAdd(im3, out, 0, 0, 0, 100, 1, im2);
- gdImageGifAnimEnd(out); // End marker, same as putc(';', out);
- fclose(out); // Close file
-
- // Destroy images
- gdImageDestroy(im);
- gdImageDestroy(im2);
- gdImageDestroy(im3);
- }
-
- (end code)
-*/
-
-BGD_DECLARE(void) gdImageGifAnimAdd(gdImagePtr im, FILE *outFile, int LocalCM,
- int LeftOfs, int TopOfs, int Delay,
- int Disposal, gdImagePtr previm)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageGifAnimAddCtx(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
- out->gd_free(out);
-}
-
-static int comparewithmap(gdImagePtr im1, gdImagePtr im2, int c1, int c2, int *colorMap)
-{
- if(!colorMap) {
- return c1 == c2;
- }
-
- if(-2 != colorMap[c1]) {
- return colorMap[c1] == c2;
- }
-
- return (colorMap[c1] = gdImageColorExactAlpha(im2, im1->red[c1], im1->green[c1], im1->blue[c1], im1->alpha[c1])) == c2;
-}
-
-/*
- Function: gdImageGifAnimAddCtx
-
- Adds an animation frame via a <gdIOCtxPtr>. See gdImageGifAnimAdd>.
-
- Parameters:
-
- im - The image to add.
- out - The output <gdIOCtxPtr>.
- LocalCM - Flag. If 1, use a local color map for this frame.
- LeftOfs - Left offset of image in frame.
- TopOfs - Top offset of image in frame.
- Delay - Delay before next frame (in 1/100 seconds)
- Disposal - MODE: How to treat this frame when the next one loads.
- previm - NULL or a pointer to the previous image written.
-
- Returns:
-
- Nothing.
-
-*/
-BGD_DECLARE(void) gdImageGifAnimAddCtx(gdImagePtr im, gdIOCtxPtr out,
- int LocalCM, int LeftOfs, int TopOfs,
- int Delay, int Disposal,
- gdImagePtr previm)
-{
- _gdImageGifAnimAddCtx(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
-}
-
-/* returns 0 on success, 1 on failure */
-static int _gdImageGifAnimAddCtx(gdImagePtr im, gdIOCtxPtr out,
- int LocalCM, int LeftOfs, int TopOfs,
- int Delay, int Disposal,
- gdImagePtr previm)
-{
- gdImagePtr pim = NULL, tim = im;
- int interlace, transparent, BitsPerPixel;
- interlace = im->interlace;
- transparent = im->transparent;
-
- /* Default is no local color map */
- if(LocalCM < 0) {
- LocalCM = 0;
- }
-
- if(im->trueColor) {
- /* Expensive, but the only way that produces an
- acceptable result: mix down to a palette
- based temporary image. */
- pim = gdImageCreatePaletteFromTrueColor(im, 1, 256);
- if (!pim) {
- return 1;
- }
- tim = pim;
- }
-
- if (previm) {
- /* create optimized animation. Compare this image to
- the previous image and crop the temporary copy of
- current image to include only changed rectangular
- area. Also replace unchanged pixels inside this
- area with transparent color. Transparent color
- needs to be already allocated!
- Preconditions:
- TopOfs, LeftOfs are assumed 0
-
- Images should be of same size. If not, a temporary
- copy is made with the same size as previous image.
-
- */
- gdImagePtr prev_pim = 0, prev_tim = previm;
- int x, y;
- int min_x = 0;
- int min_y = tim->sy;
- int max_x = 0;
- int max_y = 0;
- int colorMap[256];
-
- if (previm->trueColor) {
- prev_pim = gdImageCreatePaletteFromTrueColor(previm, 1, 256);
- if (!prev_pim) {
- goto fail_end;
- }
- prev_tim = prev_pim;
- }
-
- for (x = 0; x < 256; ++x) {
- colorMap[x] = -2;
- }
-
- /* First find bounding box of changed areas. */
- /* first find the top changed row */
- for (y = 0; y < tim->sy; ++y) {
- for (x = 0; x < tim->sx; ++x) {
- if (!comparewithmap(prev_tim, tim,
- prev_tim->pixels[y][x],
- tim->pixels[y][x],
- colorMap)) {
- min_y = max_y = y;
- min_x = max_x = x;
- goto break_top;
- }
- }
- }
-
-break_top:
- if (tim->sy == min_y) {
- /* No changes in this frame!! Encode empty image. */
- transparent = 0;
- min_x = min_y = 1;
- max_x = max_y = 0;
- } else {
- /* Then the bottom row */
- for (y = tim->sy - 1; y > min_y; --y) {
- for (x = 0; x < tim->sx; ++x) {
- if (!comparewithmap
- (prev_tim, tim,
- prev_tim->pixels[y][x],
- tim->pixels[y][x],
- colorMap)) {
- max_y = y;
- if(x < min_x) {
- min_x = x;
- }
- if(x > max_x) {
- max_x = x;
- }
- goto break_bot;
- }
- }
- }
-
-break_bot:
- /* left side */
- for (x = 0; x < min_x; ++x) {
- for (y = min_y; y <= max_y; ++y) {
- if (!comparewithmap
- (prev_tim, tim,
- prev_tim->pixels[y][x],
- tim->pixels[y][x],
- colorMap)) {
- min_x = x;
- goto break_left;
- }
- }
- }
-
-break_left:
- /* right side */
- for (x = tim->sx - 1; x > max_x; --x) {
- for (y = min_y; y <= max_y; ++y) {
- if (!comparewithmap
- (prev_tim, tim,
- prev_tim->pixels[y][x],
- tim->pixels[y][x],
- colorMap)) {
- max_x = x;
- goto break_right;
- }
- }
- }
-
-break_right:
- ;
- }
-
- LeftOfs = min_x;
- TopOfs = min_y;
- Disposal = 1;
-
- /* Make a copy of the image with the new offsets.
- But only if necessary. */
- if (min_x != 0 || max_x != tim->sx - 1
- || min_y != 0 || max_y != tim->sy - 1
- || transparent >= 0) {
-
- gdImagePtr pim2 = gdImageCreate(max_x-min_x + 1, max_y-min_y + 1);
-
- if (!pim2) {
- if (prev_pim) {
- gdImageDestroy(prev_pim);
- }
- goto fail_end;
- }
-
- gdImagePaletteCopy(pim2, LocalCM ? tim : prev_tim);
- gdImageCopy(pim2, tim, 0, 0, min_x, min_y,
- max_x - min_x + 1, max_y - min_y + 1);
-
- if (pim) {
- gdImageDestroy(pim);
- }
-
- tim = pim = pim2;
- }
-
- /* now let's compare pixels for transparent
- optimization. But only if transparent is set. */
- if (transparent >= 0) {
- for(y = 0; y < tim->sy; ++y) {
- for (x = 0; x < tim->sx; ++x) {
- if(comparewithmap
- (prev_tim, tim,
- prev_tim->pixels[min_y + y][min_x + x],
- tim->pixels[y][x], 0)) {
- gdImageSetPixel(tim, x, y, transparent);
- break;
- }
- }
- }
- }
-
- if(prev_pim) {
- gdImageDestroy(prev_pim);
- }
- }
-
- BitsPerPixel = colorstobpp(tim->colorsTotal);
-
- /* All set, let's do it. */
- GIFAnimEncode(
- out, tim->sx, tim->sy, LeftOfs, TopOfs, interlace, transparent,
- Delay, Disposal, BitsPerPixel,
- LocalCM ? tim->red : 0, tim->green, tim->blue, tim);
- return 0;
-
-fail_end:
- if(pim) {
- /* Destroy palette based temporary image. */
- gdImageDestroy(pim);
- }
- return 1;
-}
-
-
-
-/*
- Function: gdImageGifAnimEnd
-
- Terminates the GIF file properly.
-
- (Previous versions of this function's documentation suggested just
- manually writing a semicolon (';') instead since that is all this
- function does. While that has no longer changed, we now suggest
- that you do not do this and instead always call
- <gdImageGifAnimEnd> (or equivalent) since later versions could
- possibly do more or different things.)
-
- Variants:
-
- <gdImageGifAnimEndCtx> outputs its data via a <gdIOCtx> struct.
-
- <gdImageGifAnimEndPtr> outputs its data to a memory buffer which
- it returns.
-
- Parameters:
-
- outfile - the destination FILE*.
-
- Returns:
-
- Nothing.
-
-*/
-
-BGD_DECLARE(void) gdImageGifAnimEnd(FILE *outFile)
-{
-#if 1
- putc(';', outFile);
-#else
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageGifAnimEndCtx(out);
- out->gd_free(out);
-#endif
-}
-
-/*
- Function: gdImageGifAnimEndPtr
-
- Like <gdImageGifAnimEnd> (which contains more information) except
- that it stores the data to write into memory and returns a pointer
- to it.
-
- This memory must be freed by the caller when it is no longer
- needed. **The caller must invoke <gdFree>(), not free(),** unless
- the caller is absolutely certain that the same implementations of
- malloc, free, etc. are used both at library build time and at
- application build time (but don't; it could always change).
-
- The 'size' parameter receives the total size of the block of
- memory.
-
- Parameters:
-
- size - Output: the size of the resulting buffer.
-
- Returns:
-
- Pointer to the resulting data or NULL if an error occurred.
-
-*/
-
-BGD_DECLARE(void *) gdImageGifAnimEndPtr(int *size)
-{
- char *rv = (char *) gdMalloc(1);
- if(!rv) {
- return 0;
- }
- *rv = ';';
- *size = 1;
- return (void *)rv;
-}
-
-/*
- Function: gdImageGifAnimEndCtx
-
- Like <gdImageGifAnimEnd>, but writes its data via a <gdIOCtx>.
-
- Parameters:
-
- out - the destination <gdIOCtx>.
-
- Returns:
-
- Nothing.
-
-*/
-
-BGD_DECLARE(void) gdImageGifAnimEndCtx(gdIOCtx *out)
-{
- /*
- * Write the GIF file terminator
- */
- gdPutC(';', out);
-}
-
-static int colorstobpp(int colors)
-{
- int bpp = 0;
-
- if(colors <= 2)
- bpp = 1;
- else if(colors <= 4)
- bpp = 2;
- else if(colors <= 8)
- bpp = 3;
- else if(colors <= 16)
- bpp = 4;
- else if(colors <= 32)
- bpp = 5;
- else if(colors <= 64)
- bpp = 6;
- else if(colors <= 128)
- bpp = 7;
- else if(colors <= 256)
- bpp = 8;
-
- return bpp;
-}
-
-/*****************************************************************************
- *
- * GIFENCODE.C - GIF Image compression interface
- *
- * GIFEncode( FName, GHeight, GWidth, GInterlace, Background, Transparent,
- * BitsPerPixel, Red, Green, Blue, gdImagePtr )
- *
- *****************************************************************************/
-
-#define TRUE 1
-#define FALSE 0
-
-/* Bump the 'curx' and 'cury' to point to the next pixel */
-static void BumpPixel(GifCtx *ctx)
-{
- /* Bump the current X position */
- ++(ctx->curx);
-
- /* If we are at the end of a scan line, set curx back to the beginning
- * If we are interlaced, bump the cury to the appropriate spot,
- * otherwise, just increment it. */
- if(ctx->curx == ctx->Width) {
- ctx->curx = 0;
-
- if(!ctx->Interlace) {
- ++(ctx->cury);
- } else {
- switch(ctx->Pass) {
-
- case 0:
- ctx->cury += 8;
- if(ctx->cury >= ctx->Height) {
- ++(ctx->Pass);
- ctx->cury = 4;
- }
- break;
-
- case 1:
- ctx->cury += 8;
- if(ctx->cury >= ctx->Height) {
- ++(ctx->Pass);
- ctx->cury = 2;
- }
- break;
-
- case 2:
- ctx->cury += 4;
- if(ctx->cury >= ctx->Height) {
- ++(ctx->Pass);
- ctx->cury = 1;
- }
- break;
-
- case 3:
- ctx->cury += 2;
- break;
- }
- }
- }
-}
-
-/* Return the next pixel from the image */
-static int GIFNextPixel(gdImagePtr im, GifCtx *ctx)
-{
- int r;
-
- if(ctx->CountDown == 0) {
- return EOF;
- }
-
- --(ctx->CountDown);
-
- r = gdImageGetPixel(im, ctx->curx, ctx->cury);
-
- BumpPixel(ctx);
-
- return r;
-}
-
-/* public */
-
-static void GIFEncode(gdIOCtxPtr fp, int GWidth, int GHeight, int GInterlace, int Background, int Transparent, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im)
-{
- int B;
- int RWidth, RHeight;
- int LeftOfs, TopOfs;
- int Resolution;
- int ColorMapSize;
- int InitCodeSize;
- int i;
- GifCtx ctx;
-
- memset(&ctx, 0, sizeof(ctx));
-
- ctx.Interlace = GInterlace;
- ctx.in_count = 1;
-
- ColorMapSize = 1 << BitsPerPixel;
-
- RWidth = ctx.Width = GWidth;
- RHeight = ctx.Height = GHeight;
- LeftOfs = TopOfs = 0;
-
- Resolution = BitsPerPixel;
-
- /* Calculate number of bits we are expecting */
- ctx.CountDown = (long)ctx.Width * (long)ctx.Height;
-
- /* Indicate which pass we are on (if interlace) */
- ctx.Pass = 0;
-
- /* The initial code size */
- if(BitsPerPixel <= 1) {
- InitCodeSize = 2;
- } else {
- InitCodeSize = BitsPerPixel;
- }
-
- /* Set up the current x and y position */
- ctx.curx = ctx.cury = 0;
-
- /* Write the Magic header */
- gdPutBuf(Transparent < 0 ? "GIF87a" : "GIF89a", 6, fp);
-
- /* Write out the screen width and height */
- gifPutWord(RWidth, fp);
- gifPutWord(RHeight, fp);
-
- /* Indicate that there is a global colour map */
- /* Yes, there is a color map */
- B = 0x80;
-
- /* OR in the resolution */
- B |= (Resolution - 1) << 4;
-
- /* OR in the Bits per Pixel */
- B |= (BitsPerPixel - 1);
-
- /* Write it out */
- gdPutC(B, fp);
-
- /* Write out the Background colour */
- gdPutC(Background, fp);
-
- /* Byte of 0's (future expansion) */
- gdPutC(0, fp);
-
- /* Write out the Global Colour Map */
- for(i = 0; i < ColorMapSize; ++i) {
- gdPutC(Red[i], fp);
- gdPutC(Green[i], fp);
- gdPutC(Blue[i], fp);
- }
-
- /* Write out extension for transparent colour index, if necessary. */
- if(Transparent >= 0) {
- gdPutC('!', fp);
- gdPutC(0xf9, fp);
- gdPutC(4, fp);
- gdPutC(1, fp);
- gdPutC(0, fp);
- gdPutC(0, fp);
- gdPutC((unsigned char) Transparent, fp);
- gdPutC(0, fp);
- }
-
- /* Write an Image separator */
- gdPutC(',', fp);
-
- /* Write the Image header */
- gifPutWord(LeftOfs, fp);
- gifPutWord(TopOfs, fp);
- gifPutWord(ctx.Width, fp);
- gifPutWord(ctx.Height, fp);
-
- /* Write out whether or not the image is interlaced */
- if(ctx.Interlace) {
- gdPutC(0x40, fp);
- } else {
- gdPutC(0x00, fp);
- }
-
- /* Write out the initial code size */
- gdPutC(InitCodeSize, fp);
-
- /* Go and actually compress the data */
- compress(InitCodeSize + 1, fp, im, &ctx);
-
- /* Write out a Zero-length packet (to end the series) */
- gdPutC(0, fp);
-
- /* Write the GIF file terminator */
- gdPutC(';', fp);
-}
-
-static void GIFAnimEncode(gdIOCtxPtr fp, int IWidth, int IHeight, int LeftOfs, int TopOfs, int GInterlace, int Transparent, int Delay, int Disposal, int BitsPerPixel, int *Red, int *Green, int *Blue, gdImagePtr im)
-{
- int B;
- int ColorMapSize;
- int InitCodeSize;
- int i;
- GifCtx ctx;
-
- memset(&ctx, 0, sizeof(ctx));
-
- ctx.Interlace = GInterlace;
- ctx.in_count = 1;
-
- ColorMapSize = 1 << BitsPerPixel;
-
- if(LeftOfs < 0) {
- LeftOfs = 0;
- }
- if(TopOfs < 0) {
- TopOfs = 0;
- }
- if(Delay < 0) {
- Delay = 100;
- }
- if(Disposal < 0) {
- Disposal = 1;
- }
-
- ctx.Width = IWidth;
- ctx.Height = IHeight;
-
- /* Calculate number of bits we are expecting */
- ctx.CountDown = (long)ctx.Width * (long)ctx.Height;
-
- /* Indicate which pass we are on (if interlace) */
- ctx.Pass = 0;
-
- /* The initial code size */
- if(BitsPerPixel <= 1) {
- InitCodeSize = 2;
- } else {
- InitCodeSize = BitsPerPixel;
- }
-
- /* Set up the current x and y position */
- ctx.curx = ctx.cury = 0;
-
- /* Write out extension for image animation and looping */
- gdPutC('!', fp);
- gdPutC(0xf9, fp);
- gdPutC(4, fp);
- gdPutC((Transparent >= 0 ? 1 : 0) | (Disposal << 2), fp);
- gdPutC((unsigned char)(Delay & 255), fp);
- gdPutC((unsigned char)((Delay >> 8) & 255), fp);
- gdPutC((unsigned char) Transparent, fp);
- gdPutC(0, fp);
-
- /* Write an Image separator */
- gdPutC(',', fp);
-
- /* Write out the Image header */
- gifPutWord(LeftOfs, fp);
- gifPutWord(TopOfs, fp);
- gifPutWord(ctx.Width, fp);
- gifPutWord(ctx.Height, fp);
-
- /* Indicate that there is a local colour map */
- B = (Red && Green && Blue) ? 0x80 : 0;
-
- /* OR in the interlacing */
- B |= ctx.Interlace ? 0x40 : 0;
-
- /* OR in the Bits per Pixel */
- B |= (Red && Green && Blue) ? (BitsPerPixel - 1) : 0;
-
- /* Write it out */
- gdPutC(B, fp);
-
- /* Write out the Local Colour Map */
- if(Red && Green && Blue) {
- for(i = 0; i < ColorMapSize; ++i) {
- gdPutC(Red[i], fp);
- gdPutC(Green[i], fp);
- gdPutC(Blue[i], fp);
- }
- }
-
- /* Write out the initial code size */
- gdPutC(InitCodeSize, fp);
-
- /* Go and actually compress the data */
- compress(InitCodeSize + 1, fp, im, &ctx);
-
- /* Write out a Zero-length packet (to end the series) */
- gdPutC(0, fp);
-}
-
-/***************************************************************************
- *
- * GIFCOMPR.C - GIF Image compression routines
- *
- * Lempel-Ziv compression based on 'compress'. GIF modifications by
- * David Rowley (mgardi@watdcsu.waterloo.edu)
- *
- ***************************************************************************/
-
-/* General DEFINEs */
-
-#define GIFBITS 12
-
-#ifdef NO_UCHAR
-typedef char char_type;
-#else /* NO_UCHAR */
-typedef unsigned char char_type;
-#endif /* NO_UCHAR */
-
-/*
- *
- * GIF Image compression - modified 'compress'
- *
- * Based on: compress.c - File compression ala IEEE Computer, June 1984.
- *
- * By Authors: Spencer W. Thomas (decvax!harpo!utah-cs!utah-gr!thomas)
- * Jim McKie (decvax!mcvax!jim)
- * Steve Davies (decvax!vax135!petsd!peora!srd)
- * Ken Turkowski (decvax!decwrl!turtlevax!ken)
- * James A. Woods (decvax!ihnp4!ames!jaw)
- * Joe Orost (decvax!vax135!petsd!joe)
- *
- */
-#include <ctype.h>
-
-#define ARGVAL() (*++(*argv) || (--argc && *++argv))
-
-#ifdef COMPATIBLE /* But wrong! */
-# define MAXCODE(n_bits) ((code_int) 1 << (n_bits) - 1)
-#else /* COMPATIBLE */
-# define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1)
-#endif /* COMPATIBLE */
-
-#define HashTabOf(i) ctx->htab[i]
-#define CodeTabOf(i) ctx->codetab[i]
-
-
-/*
- * To save much memory, we overlay the table used by compress() with those
- * used by decompress(). The tab_prefix table is the same size and type
- * as the codetab. The tab_suffix table needs 2**GIFBITS characters. We
- * get this from the beginning of htab. The output stack uses the rest
- * of htab, and contains characters. There is plenty of room for any
- * possible stack (stack used to be 8000 characters).
- */
-
-#define tab_prefixof(i) CodeTabOf(i)
-#define tab_suffixof(i) ((char_type*)(htab))[i]
-#define de_stack ((char_type*)&tab_suffixof((code_int)1 << GIFBITS))
-
-/*
- * compress stdin to stdout
- *
- * Algorithm: use open addressing double hashing (no chaining) on the
- * prefix code / next character combination. We do a variant of Knuth's
- * algorithm D (vol. 3, sec. 6.4) along with G. Knott's relatively-prime
- * secondary probe. Here, the modular division first probe is gives way
- * to a faster exclusive-or manipulation. Also do block compression with
- * an adaptive reset, whereby the code table is cleared when the compression
- * ratio decreases, but after the table fills. The variable-length output
- * codes are re-sized at this point, and a special CLEAR code is generated
- * for the decompressor. Late addition: construct the table according to
- * file size for noticeable speed improvement on small files. Please direct
- * questions about this implementation to ames!jaw.
- */
-
-static void output(code_int code, GifCtx *ctx);
-
-static void compress(int init_bits, gdIOCtxPtr outfile, gdImagePtr im, GifCtx *ctx)
-{
- register long fcode;
- register code_int i;
- register int c;
- register code_int ent;
- register code_int disp;
- register code_int hsize_reg;
- register int hshift;
-
- /* Set up the globals:
- * g_init_bits - initial number of bits
- * g_outfile - pointer to output file */
- ctx->g_init_bits = init_bits;
- ctx->g_outfile = outfile;
-
- /* Set up the necessary values */
- ctx->offset = 0;
- ctx->out_count = 0;
- ctx->clear_flg = 0;
- ctx->in_count = 1;
- ctx->maxcode = MAXCODE(ctx->n_bits = ctx->g_init_bits);
-
- ctx->ClearCode = (1 << (init_bits - 1));
- ctx->EOFCode = ctx->ClearCode + 1;
- ctx->free_ent = ctx->ClearCode + 2;
-
- char_init(ctx);
-
- ent = GIFNextPixel(im, ctx);
-
- hshift = 0;
- for(fcode = (long)hsize; fcode < 65536L; fcode *= 2L) {
- ++hshift;
- }
- hshift = 8 - hshift; /* set hash code range bound */
-
- hsize_reg = hsize;
- cl_hash((count_int) hsize_reg, ctx); /* clear hash table */
-
- output((code_int)ctx->ClearCode, ctx);
-
-#ifdef SIGNED_COMPARE_SLOW
- while((c = GIFNextPixel(im, ctx)) != (unsigned) EOF) {
-#else /* SIGNED_COMPARE_SLOW */
- while((c = GIFNextPixel(im, ctx)) != EOF) {
-#endif /* SIGNED_COMPARE_SLOW */
-
- ++(ctx->in_count);
-
- fcode = (long) (((long) c << maxbits) + ent);
- i = (((code_int)c << hshift) ^ ent); /* xor hashing */
-
- if(HashTabOf(i) == fcode) {
- ent = CodeTabOf (i);
- continue;
- } else if ((long)HashTabOf (i) < 0) {/* empty slot */
- goto nomatch;
- }
-
- disp = hsize_reg - i; /* secondary hash (after G. Knott) */
-
- if(i == 0) {
- disp = 1;
- }
-
-probe:
- if((i -= disp) < 0) {
- i += hsize_reg;
- }
-
- if(HashTabOf(i) == fcode) {
- ent = CodeTabOf (i);
- continue;
- }
-
- if((long)HashTabOf(i) > 0) {
- goto probe;
- }
-
-nomatch:
- output((code_int) ent, ctx);
- ++(ctx->out_count);
- ent = c;
-#ifdef SIGNED_COMPARE_SLOW
- if((unsigned) ctx->free_ent < (unsigned) maxmaxcode) {
-#else /*SIGNED_COMPARE_SLOW*/
- if (ctx->free_ent < maxmaxcode) { /* } */
-#endif /*SIGNED_COMPARE_SLOW*/
- CodeTabOf(i) = ctx->free_ent++; /* code -> hashtable */
- HashTabOf(i) = fcode;
- } else {
- cl_block(ctx);
- }
- }
-
- /* Put out the final code. */
- output((code_int)ent, ctx);
- ++(ctx->out_count);
- output((code_int) ctx->EOFCode, ctx);
-}
-
-/*****************************************************************
- * TAG( output )
- *
- * Output the given code.
- * Inputs:
- * code: A n_bits-bit integer. If == -1, then EOF. This assumes
- * that n_bits =< (long)wordsize - 1.
- * Outputs:
- * Outputs code to the file.
- * Assumptions:
- * Chars are 8 bits long.
- * Algorithm:
- * Maintain a GIFBITS character long buffer (so that 8 codes will
- * fit in it exactly). Use the VAX insv instruction to insert each
- * code in turn. When the buffer fills up empty it and start over.
- */
-
-static const unsigned long masks[] = {
- 0x0000, 0x0001, 0x0003, 0x0007, 0x000F,
- 0x001F, 0x003F, 0x007F, 0x00FF,
- 0x01FF, 0x03FF, 0x07FF, 0x0FFF,
- 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF
-};
-
-/* Arbitrary value to mark output is done. When we see EOFCode, then we don't
- * expect to see any more data. If we do (e.g. corrupt image inputs), cur_bits
- * might be negative, so flag it to return early.
- */
-#define CUR_BITS_FINISHED -1000
-
-static void output(code_int code, GifCtx *ctx)
-{
- if (ctx->cur_bits == CUR_BITS_FINISHED)
- return;
- ctx->cur_accum &= masks[ctx->cur_bits];
-
- if(ctx->cur_bits > 0) {
- ctx->cur_accum |= ((long)code << ctx->cur_bits);
- } else {
- ctx->cur_accum = code;
- }
-
- ctx->cur_bits += ctx->n_bits;
-
- while(ctx->cur_bits >= 8) {
- char_out((unsigned int)(ctx->cur_accum & 0xff), ctx);
- ctx->cur_accum >>= 8;
- ctx->cur_bits -= 8;
- }
-
- /*
- * If the next entry is going to be too big for the code size,
- * then increase it, if possible.
- */
- if(ctx->free_ent > ctx->maxcode || ctx->clear_flg) {
- if(ctx->clear_flg) {
- ctx->maxcode = MAXCODE (ctx->n_bits = ctx->g_init_bits);
- ctx->clear_flg = 0;
- } else {
- ++(ctx->n_bits);
- if(ctx->n_bits == maxbits) {
- ctx->maxcode = maxmaxcode;
- } else {
- ctx->maxcode = MAXCODE(ctx->n_bits);
- }
- }
- }
-
- if(code == ctx->EOFCode) {
- /* At EOF, write the rest of the buffer. */
- while(ctx->cur_bits > 0) {
- char_out((unsigned int)(ctx->cur_accum & 0xff), ctx);
- ctx->cur_accum >>= 8;
- ctx->cur_bits -= 8;
- }
- /* Flag that it's done to prevent re-entry. */
- ctx->cur_bits = CUR_BITS_FINISHED;
-
- flush_char(ctx);
- }
-}
-
-/*
- * Clear out the hash table
- */
-static void cl_block (GifCtx *ctx) /* table clear for block compress */
-{
- cl_hash((count_int) hsize, ctx);
- ctx->free_ent = ctx->ClearCode + 2;
- ctx->clear_flg = 1;
-
- output((code_int)ctx->ClearCode, ctx);
-}
-
-static void cl_hash(register count_int chsize, GifCtx *ctx) /* reset code table */
-{
- register count_int *htab_p = ctx->htab+chsize;
- register long i;
- register long m1 = -1;
-
- i = chsize - 16;
- do { /* might use Sys V memset(3) here */
- *(htab_p - 16) = m1;
- *(htab_p - 15) = m1;
- *(htab_p - 14) = m1;
- *(htab_p - 13) = m1;
- *(htab_p - 12) = m1;
- *(htab_p - 11) = m1;
- *(htab_p - 10) = m1;
- *(htab_p - 9) = m1;
- *(htab_p - 8) = m1;
- *(htab_p - 7) = m1;
- *(htab_p - 6) = m1;
- *(htab_p - 5) = m1;
- *(htab_p - 4) = m1;
- *(htab_p - 3) = m1;
- *(htab_p - 2) = m1;
- *(htab_p - 1) = m1;
- htab_p -= 16;
- } while((i -= 16) >= 0);
-
- for(i += 16; i > 0; --i) {
- *--htab_p = m1;
- }
-}
-
-/******************************************************************************
- *
- * GIF Specific routines
- *
- ******************************************************************************/
-
-/*
- * Set up the 'byte output' routine
- */
-static void char_init(GifCtx *ctx)
-{
- ctx->a_count = 0;
-}
-
-/*
- * Add a character to the end of the current packet, and if it is 254
- * characters, flush the packet to disk.
- */
-static void char_out(int c, GifCtx *ctx)
-{
- ctx->accum[ctx->a_count++] = c;
- if(ctx->a_count >= 254) {
- flush_char(ctx);
- }
-}
-
-/*
- * Flush the packet to disk, and reset the accumulator
- */
-static void flush_char(GifCtx *ctx)
-{
- if(ctx->a_count > 0) {
- gdPutC(ctx->a_count, ctx->g_outfile);
- gdPutBuf(ctx->accum, ctx->a_count, ctx->g_outfile);
- ctx->a_count = 0;
- }
-}
-
-static int gifPutWord(int w, gdIOCtx *out)
-{
- /* Byte order is little-endian */
- gdPutC(w & 0xFF, out);
- gdPutC((w >> 8) & 0xFF, out);
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_intern.h b/Build/source/libs/gd/libgd-src/src/gd_intern.h
deleted file mode 100644
index 3bf1fa884b7..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_intern.h
+++ /dev/null
@@ -1,86 +0,0 @@
-#ifndef GD_INTERN_H
-#define GD_INTERN_H
-
-#include <limits.h>
-
-#ifndef MAXPATHLEN
-# ifdef PATH_MAX
-# define MAXPATHLEN PATH_MAX
-# elif defined(MAX_PATH)
-# define MAXPATHLEN MAX_PATH
-# else
-# if defined(__GNU__)
-# define MAXPATHLEN 4096
-# else
-# define MAXPATHLEN 256 /* Should be safe for any weird systems that do not define it */
-# endif
-# endif
-#endif
-
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#else
-# if defined(HAVE_INTTYPES_H)
-# include <inttypes.h>
-# else
-# include "msinttypes/inttypes.h"
-# endif
-#endif
-
-#include "gd.h"
-
-#ifndef MIN
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#endif
-#define MIN3(a,b,c) ((a)<(b)?(MIN(a,c)):(MIN(b,c)))
-#ifndef MAX
-#define MAX(a,b) ((a)<(b)?(b):(a))
-#endif
-#define MAX3(a,b,c) ((a)<(b)?(MAX(b,c)):(MAX(a,c)))
-
-
-typedef enum {
- HORIZONTAL,
- VERTICAL,
-} gdAxis;
-
-/* Convert a double to an unsigned char, rounding to the nearest
- * integer and clamping the result between 0 and max. The absolute
- * value of clr must be less than the maximum value of an unsigned
- * short. */
-static inline unsigned char
-uchar_clamp(double clr, unsigned char max) {
- unsigned short result;
-
- //assert(fabs(clr) <= SHRT_MAX);
-
- /* Casting a negative float to an unsigned short is undefined.
- * However, casting a float to a signed truncates toward zero and
- * casting a negative signed value to an unsigned of the same size
- * results in a bit-identical value (assuming twos-complement
- * arithmetic). This is what we want: all legal negative values
- * for clr will be greater than 255. */
-
- /* Convert and clamp. */
- result = (unsigned short)(short)(clr + 0.5);
- if (result > max) {
- result = (clr < 0) ? 0 : max;
- }/* if */
-
- return result;
-}/* uchar_clamp*/
-
-
-/* Internal prototypes: */
-
-/* gd_rotate.c */
-gdImagePtr gdImageRotate90(gdImagePtr src, int ignoretransparent);
-gdImagePtr gdImageRotate180(gdImagePtr src, int ignoretransparent);
-gdImagePtr gdImageRotate270(gdImagePtr src, int ignoretransparent);
-
-
-
-
-
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_interpolation.c b/Build/source/libs/gd/libgd-src/src/gd_interpolation.c
deleted file mode 100644
index 73407fdd1f3..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_interpolation.c
+++ /dev/null
@@ -1,2343 +0,0 @@
-/*
- * The two pass scaling function is based on:
- * Filtered Image Rescaling
- * Based on Gems III
- * - Schumacher general filtered image rescaling
- * (pp. 414-424)
- * by Dale Schumacher
- *
- * Additional changes by Ray Gardener, Daylon Graphics Ltd.
- * December 4, 1999
- *
- * Ported to libgd by Pierre Joye. Support for multiple channels
- * added (argb for now).
- *
- * Initial sources code is avaibable in the Gems Source Code Packages:
- * http://www.acm.org/pubs/tog/GraphicsGems/GGemsIII.tar.gz
- *
- */
-
-/*
- Summary:
-
- - Horizontal filter contributions are calculated on the fly,
- as each column is mapped from src to dst image. This lets
- us omit having to allocate a temporary full horizontal stretch
- of the src image.
-
- - If none of the src pixels within a sampling region differ,
- then the output pixel is forced to equal (any of) the source pixel.
- This ensures that filters do not corrupt areas of constant color.
-
- - Filter weight contribution results, after summing, are
- rounded to the nearest pixel color value instead of
- being casted to ILubyte (usually an int or char). Otherwise,
- artifacting occurs.
-
-*/
-
-/*
- Additional functions are available for simple rotation or up/downscaling.
- downscaling using the fixed point implementations are usually much faster
- than the existing gdImageCopyResampled while having a similar or better
- quality.
-
- For image rotations, the optimized versions have a lazy antialiasing for
- the edges of the images. For a much better antialiased result, the affine
- function is recommended.
-*/
-
-/*
-TODO:
- - Optimize pixel accesses and loops once we have continuous buffer
- - Add scale support for a portion only of an image (equivalent of copyresized/resampled)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#undef NDEBUG
-/* Comment out this line to enable asserts.
- * TODO: This logic really belongs in cmake and configure.
- */
-#define NDEBUG 1
-#include <assert.h>
-
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_intern.h"
-
-#ifdef _MSC_VER
-# pragma optimize("t", on)
-# include <emmintrin.h>
-#endif
-
-static gdImagePtr gdImageScaleBilinear(gdImagePtr im,
- const unsigned int new_width,
- const unsigned int new_height);
-static gdImagePtr gdImageScaleBicubicFixed(gdImagePtr src,
- const unsigned int width,
- const unsigned int height);
-static gdImagePtr gdImageScaleNearestNeighbour(gdImagePtr im,
- const unsigned int width,
- const unsigned int height);
-static gdImagePtr gdImageRotateNearestNeighbour(gdImagePtr src,
- const float degrees,
- const int bgColor);
-static gdImagePtr gdImageRotateGeneric(gdImagePtr src, const float degrees,
- const int bgColor);
-
-
-#define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
-
-/* only used here, let do a generic fixed point integers later if required by other
- part of GD */
-typedef long gdFixed;
-/* Integer to fixed point */
-#define gd_itofx(x) ((x) << 8)
-
-/* Float to fixed point */
-#define gd_ftofx(x) (long)((x) * 256)
-
-/* Double to fixed point */
-#define gd_dtofx(x) (long)((x) * 256)
-
-/* Fixed point to integer */
-#define gd_fxtoi(x) ((x) >> 8)
-
-/* Fixed point to float */
-# define gd_fxtof(x) ((float)(x) / 256)
-
-/* Fixed point to double */
-#define gd_fxtod(x) ((double)(x) / 256)
-
-/* Multiply a fixed by a fixed */
-#define gd_mulfx(x,y) (((x) * (y)) >> 8)
-
-/* Divide a fixed by a fixed */
-#define gd_divfx(x,y) (((x) << 8) / (y))
-
-typedef struct
-{
- double *Weights; /* Normalized weights of neighboring pixels */
- int Left,Right; /* Bounds of source pixels window */
-} ContributionType; /* Contirbution information for a single pixel */
-
-typedef struct
-{
- ContributionType *ContribRow; /* Row (or column) of contribution weights */
- unsigned int WindowSize, /* Filter window size (of affecting source pixels) */
- LineLength; /* Length of line (no. or rows / cols) */
-} LineContribType;
-
-/* Each core filter has its own radius */
-#define DEFAULT_FILTER_LINEAR 1.0f
-#define DEFAULT_FILTER_BICUBIC 3.0f
-#define DEFAULT_FILTER_BOX 0.5f
-#define DEFAULT_FILTER_GENERALIZED_CUBIC 0.5f
-#define DEFAULT_FILTER_RADIUS 1.0f
-#define DEFAULT_LANCZOS8_RADIUS 8.0f
-#define DEFAULT_LANCZOS3_RADIUS 3.0f
-#define DEFAULT_HERMITE_RADIUS 1.0f
-#define DEFAULT_BOX_RADIUS 0.5f
-#define DEFAULT_TRIANGLE_RADIUS 1.0f
-#define DEFAULT_BELL_RADIUS 1.5f
-#define DEFAULT_CUBICSPLINE_RADIUS 2.0f
-#define DEFAULT_MITCHELL_RADIUS 2.0f
-#define DEFAULT_COSINE_RADIUS 1.0f
-#define DEFAULT_CATMULLROM_RADIUS 2.0f
-#define DEFAULT_QUADRATIC_RADIUS 1.5f
-#define DEFAULT_QUADRATICBSPLINE_RADIUS 1.5f
-#define DEFAULT_CUBICCONVOLUTION_RADIUS 3.0f
-#define DEFAULT_GAUSSIAN_RADIUS 1.0f
-#define DEFAULT_HANNING_RADIUS 1.0f
-#define DEFAULT_HAMMING_RADIUS 1.0f
-#define DEFAULT_SINC_RADIUS 1.0f
-#define DEFAULT_WELSH_RADIUS 1.0f
-
-static double KernelBessel_J1(const double x)
-{
- double p, q;
-
- register long i;
-
- static const double
- Pone[] =
- {
- 0.581199354001606143928050809e+21,
- -0.6672106568924916298020941484e+20,
- 0.2316433580634002297931815435e+19,
- -0.3588817569910106050743641413e+17,
- 0.2908795263834775409737601689e+15,
- -0.1322983480332126453125473247e+13,
- 0.3413234182301700539091292655e+10,
- -0.4695753530642995859767162166e+7,
- 0.270112271089232341485679099e+4
- },
- Qone[] =
- {
- 0.11623987080032122878585294e+22,
- 0.1185770712190320999837113348e+20,
- 0.6092061398917521746105196863e+17,
- 0.2081661221307607351240184229e+15,
- 0.5243710262167649715406728642e+12,
- 0.1013863514358673989967045588e+10,
- 0.1501793594998585505921097578e+7,
- 0.1606931573481487801970916749e+4,
- 0.1e+1
- };
-
- p = Pone[8];
- q = Qone[8];
- for (i=7; i >= 0; i--)
- {
- p = p*x*x+Pone[i];
- q = q*x*x+Qone[i];
- }
- return (double)(p/q);
-}
-
-static double KernelBessel_P1(const double x)
-{
- double p, q;
-
- register long i;
-
- static const double
- Pone[] =
- {
- 0.352246649133679798341724373e+5,
- 0.62758845247161281269005675e+5,
- 0.313539631109159574238669888e+5,
- 0.49854832060594338434500455e+4,
- 0.2111529182853962382105718e+3,
- 0.12571716929145341558495e+1
- },
- Qone[] =
- {
- 0.352246649133679798068390431e+5,
- 0.626943469593560511888833731e+5,
- 0.312404063819041039923015703e+5,
- 0.4930396490181088979386097e+4,
- 0.2030775189134759322293574e+3,
- 0.1e+1
- };
-
- p = Pone[5];
- q = Qone[5];
- for (i=4; i >= 0; i--)
- {
- p = p*(8.0/x)*(8.0/x)+Pone[i];
- q = q*(8.0/x)*(8.0/x)+Qone[i];
- }
- return (double)(p/q);
-}
-
-static double KernelBessel_Q1(const double x)
-{
- double p, q;
-
- register long i;
-
- static const double
- Pone[] =
- {
- 0.3511751914303552822533318e+3,
- 0.7210391804904475039280863e+3,
- 0.4259873011654442389886993e+3,
- 0.831898957673850827325226e+2,
- 0.45681716295512267064405e+1,
- 0.3532840052740123642735e-1
- },
- Qone[] =
- {
- 0.74917374171809127714519505e+4,
- 0.154141773392650970499848051e+5,
- 0.91522317015169922705904727e+4,
- 0.18111867005523513506724158e+4,
- 0.1038187585462133728776636e+3,
- 0.1e+1
- };
-
- p = Pone[5];
- q = Qone[5];
- for (i=4; i >= 0; i--)
- {
- p = p*(8.0/x)*(8.0/x)+Pone[i];
- q = q*(8.0/x)*(8.0/x)+Qone[i];
- }
- return (double)(p/q);
-}
-
-static double KernelBessel_Order1(double x)
-{
- double p, q;
-
- if (x == 0.0)
- return (0.0f);
- p = x;
- if (x < 0.0)
- x=(-x);
- if (x < 8.0)
- return (p*KernelBessel_J1(x));
- q = (double)sqrt(2.0f/(M_PI*x))*(double)(KernelBessel_P1(x)*(1.0f/sqrt(2.0f)*(sin(x)-cos(x)))-8.0f/x*KernelBessel_Q1(x)*
- (-1.0f/sqrt(2.0f)*(sin(x)+cos(x))));
- if (p < 0.0f)
- q = (-q);
- return (q);
-}
-
-static double filter_bessel(const double x)
-{
- if (x == 0.0f)
- return (double)(M_PI/4.0f);
- return (KernelBessel_Order1((double)M_PI*x)/(2.0f*x));
-}
-
-
-static double filter_blackman(const double x)
-{
- return (0.42f+0.5f*(double)cos(M_PI*x)+0.08f*(double)cos(2.0f*M_PI*x));
-}
-
-double filter_linear(const double x) {
- double ax = fabs(x);
- if (ax < 1.0f) {
- return (1.0f - ax);
- }
- return 0.0f;
-}
-
-
-/**
- * Bicubic interpolation kernel (a=-1):
- \verbatim
- /
- | 1-2|t|**2+|t|**3 , if |t| < 1
- h(t) = | 4-8|t|+5|t|**2-|t|**3 , if 1<=|t|<2
- | 0 , otherwise
- \
- \endverbatim
- * ***bd*** 2.2004
- */
-static double filter_bicubic(const double t)
-{
- const double abs_t = (double)fabs(t);
- const double abs_t_sq = abs_t * abs_t;
- if (abs_t<1) return 1-2*abs_t_sq+abs_t_sq*abs_t;
- if (abs_t<2) return 4 - 8*abs_t +5*abs_t_sq - abs_t_sq*abs_t;
- return 0;
-}
-
-/**
- * Generalized cubic kernel (for a=-1 it is the same as BicubicKernel):
- \verbatim
- /
- | (a+2)|t|**3 - (a+3)|t|**2 + 1 , |t| <= 1
- h(t) = | a|t|**3 - 5a|t|**2 + 8a|t| - 4a , 1 < |t| <= 2
- | 0 , otherwise
- \
- \endverbatim
- * Often used values for a are -1 and -1/2.
- */
-static double filter_generalized_cubic(const double t)
-{
- const double a = -DEFAULT_FILTER_GENERALIZED_CUBIC;
- double abs_t = (double)fabs(t);
- double abs_t_sq = abs_t * abs_t;
- if (abs_t < 1) return (a + 2) * abs_t_sq * abs_t - (a + 3) * abs_t_sq + 1;
- if (abs_t < 2) return a * abs_t_sq * abs_t - 5 * a * abs_t_sq + 8 * a * abs_t - 4 * a;
- return 0;
-}
-
-#ifdef FUNCTION_NOT_USED_YET
-/* CubicSpline filter, default radius 2 */
-static double filter_cubic_spline(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-
- if (x < 1.0 ) {
- const double x2 = x*x;
-
- return (0.5 * x2 * x - x2 + 2.0 / 3.0);
- }
- if (x < 2.0) {
- return (pow(2.0 - x, 3.0)/6.0);
- }
- return 0;
-}
-#endif
-
-#ifdef FUNCTION_NOT_USED_YET
-/* CubicConvolution filter, default radius 3 */
-static double filter_cubic_convolution(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
- const double x2 = x1 * x1;
- const double x2_x = x2 * x;
-
- if (x <= 1.0) return ((4.0 / 3.0)* x2_x - (7.0 / 3.0) * x2 + 1.0);
- if (x <= 2.0) return (- (7.0 / 12.0) * x2_x + 3 * x2 - (59.0 / 12.0) * x + 2.5);
- if (x <= 3.0) return ( (1.0/12.0) * x2_x - (2.0 / 3.0) * x2 + 1.75 * x - 1.5);
- return 0;
-}
-#endif
-
-static double filter_box(double x) {
- if (x < - DEFAULT_FILTER_BOX)
- return 0.0f;
- if (x < DEFAULT_FILTER_BOX)
- return 1.0f;
- return 0.0f;
-}
-
-static double filter_catmullrom(const double x)
-{
- if (x < -2.0)
- return(0.0f);
- if (x < -1.0)
- return(0.5f*(4.0f+x*(8.0f+x*(5.0f+x))));
- if (x < 0.0)
- return(0.5f*(2.0f+x*x*(-5.0f-3.0f*x)));
- if (x < 1.0)
- return(0.5f*(2.0f+x*x*(-5.0f+3.0f*x)));
- if (x < 2.0)
- return(0.5f*(4.0f+x*(-8.0f+x*(5.0f-x))));
- return(0.0f);
-}
-
-#ifdef FUNCTION_NOT_USED_YET
-static double filter_filter(double t)
-{
- /* f(t) = 2|t|^3 - 3|t|^2 + 1, -1 <= t <= 1 */
- if(t < 0.0) t = -t;
- if(t < 1.0) return((2.0 * t - 3.0) * t * t + 1.0);
- return(0.0);
-}
-#endif
-
-#ifdef FUNCTION_NOT_USED_YET
-/* Lanczos8 filter, default radius 8 */
-static double filter_lanczos8(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-#define R DEFAULT_LANCZOS8_RADIUS
-
- if ( x == 0.0) return 1;
-
- if ( x < R) {
- return R * sin(x*M_PI) * sin(x * M_PI/ R) / (x * M_PI * x * M_PI);
- }
- return 0.0;
-#undef R
-}
-#endif
-
-#ifdef FUNCTION_NOT_USED_YET
-/* Lanczos3 filter, default radius 3 */
-static double filter_lanczos3(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-#define R DEFAULT_LANCZOS3_RADIUS
-
- if ( x == 0.0) return 1;
-
- if ( x < R)
- {
- return R * sin(x*M_PI) * sin(x * M_PI / R) / (x * M_PI * x * M_PI);
- }
- return 0.0;
-#undef R
-}
-#endif
-
-/* Hermite filter, default radius 1 */
-static double filter_hermite(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-
- if (x < 1.0) return ((2.0 * x - 3) * x * x + 1.0 );
-
- return 0.0;
-}
-
-/* Trangle filter, default radius 1 */
-static double filter_triangle(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
- if (x < 1.0) return (1.0 - x);
- return 0.0;
-}
-
-/* Bell filter, default radius 1.5 */
-static double filter_bell(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-
- if (x < 0.5) return (0.75 - x*x);
- if (x < 1.5) return (0.5 * pow(x - 1.5, 2.0));
- return 0.0;
-}
-
-/* Mitchell filter, default radius 2.0 */
-static double filter_mitchell(const double x)
-{
-#define KM_B (1.0f/3.0f)
-#define KM_C (1.0f/3.0f)
-#define KM_P0 (( 6.0f - 2.0f * KM_B ) / 6.0f)
-#define KM_P2 ((-18.0f + 12.0f * KM_B + 6.0f * KM_C) / 6.0f)
-#define KM_P3 (( 12.0f - 9.0f * KM_B - 6.0f * KM_C) / 6.0f)
-#define KM_Q0 (( 8.0f * KM_B + 24.0f * KM_C) / 6.0f)
-#define KM_Q1 ((-12.0f * KM_B - 48.0f * KM_C) / 6.0f)
-#define KM_Q2 (( 6.0f * KM_B + 30.0f * KM_C) / 6.0f)
-#define KM_Q3 (( -1.0f * KM_B - 6.0f * KM_C) / 6.0f)
-
- if (x < -2.0)
- return(0.0f);
- if (x < -1.0)
- return(KM_Q0-x*(KM_Q1-x*(KM_Q2-x*KM_Q3)));
- if (x < 0.0f)
- return(KM_P0+x*x*(KM_P2-x*KM_P3));
- if (x < 1.0f)
- return(KM_P0+x*x*(KM_P2+x*KM_P3));
- if (x < 2.0f)
- return(KM_Q0+x*(KM_Q1+x*(KM_Q2+x*KM_Q3)));
- return(0.0f);
-}
-
-
-
-#ifdef FUNCTION_NOT_USED_YET
-/* Cosine filter, default radius 1 */
-static double filter_cosine(const double x)
-{
- if ((x >= -1.0) && (x <= 1.0)) return ((cos(x * M_PI) + 1.0)/2.0);
-
- return 0;
-}
-#endif
-
-/* Quadratic filter, default radius 1.5 */
-static double filter_quadratic(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-
- if (x <= 0.5) return (- 2.0 * x * x + 1);
- if (x <= 1.5) return (x * x - 2.5* x + 1.5);
- return 0.0;
-}
-
-static double filter_bspline(const double x)
-{
- if (x>2.0f) {
- return 0.0f;
- } else {
- double a, b, c, d;
- /* Was calculated anyway cause the "if((x-1.0f) < 0)" */
- const double xm1 = x - 1.0f;
- const double xp1 = x + 1.0f;
- const double xp2 = x + 2.0f;
-
- if ((xp2) <= 0.0f) a = 0.0f; else a = xp2*xp2*xp2;
- if ((xp1) <= 0.0f) b = 0.0f; else b = xp1*xp1*xp1;
- if (x <= 0) c = 0.0f; else c = x*x*x;
- if ((xm1) <= 0.0f) d = 0.0f; else d = xm1*xm1*xm1;
-
- return (0.16666666666666666667f * (a - (4.0f * b) + (6.0f * c) - (4.0f * d)));
- }
-}
-
-#ifdef FUNCTION_NOT_USED_YET
-/* QuadraticBSpline filter, default radius 1.5 */
-static double filter_quadratic_bspline(const double x1)
-{
- const double x = x1 < 0.0 ? -x1 : x1;
-
- if (x <= 0.5) return (- x * x + 0.75);
- if (x <= 1.5) return (0.5 * x * x - 1.5 * x + 1.125);
- return 0.0;
-}
-#endif
-
-static double filter_gaussian(const double x)
-{
- /* return(exp((double) (-2.0 * x * x)) * sqrt(2.0 / M_PI)); */
- return (double)(exp(-2.0f * x * x) * 0.79788456080287f);
-}
-
-static double filter_hanning(const double x)
-{
- /* A Cosine windowing function */
- return(0.5 + 0.5 * cos(M_PI * x));
-}
-
-static double filter_hamming(const double x)
-{
- /* should be
- (0.54+0.46*cos(M_PI*(double) x));
- but this approximation is sufficient */
- if (x < -1.0f)
- return 0.0f;
- if (x < 0.0f)
- return 0.92f*(-2.0f*x-3.0f)*x*x+1.0f;
- if (x < 1.0f)
- return 0.92f*(2.0f*x-3.0f)*x*x+1.0f;
- return 0.0f;
-}
-
-static double filter_power(const double x)
-{
- const double a = 2.0f;
- if (fabs(x)>1) return 0.0f;
- return (1.0f - (double)fabs(pow(x,a)));
-}
-
-static double filter_sinc(const double x)
-{
- /* X-scaled Sinc(x) function. */
- if (x == 0.0) return(1.0);
- return (sin(M_PI * (double) x) / (M_PI * (double) x));
-}
-
-#ifdef FUNCTION_NOT_USED_YET
-static double filter_welsh(const double x)
-{
- /* Welsh parabolic windowing filter */
- if (x < 1.0)
- return(1 - x*x);
- return(0.0);
-}
-#endif
-
-#if defined(_MSC_VER) && !defined(inline)
-# define inline __inline
-#endif
-
-/* keep it for future usage for affine copy over an existing image, targetting fix for 2.2.2 */
-#ifdef FUNCTION_NOT_USED_YET
-/* Copied from upstream's libgd */
-static inline int _color_blend (const int dst, const int src)
-{
- const int src_alpha = gdTrueColorGetAlpha(src);
-
- if( src_alpha == gdAlphaOpaque ) {
- return src;
- } else {
- const int dst_alpha = gdTrueColorGetAlpha(dst);
-
- if( src_alpha == gdAlphaTransparent ) return dst;
- if( dst_alpha == gdAlphaTransparent ) {
- return src;
- } else {
- register int alpha, red, green, blue;
- const int src_weight = gdAlphaTransparent - src_alpha;
- const int dst_weight = (gdAlphaTransparent - dst_alpha) * src_alpha / gdAlphaMax;
- const int tot_weight = src_weight + dst_weight;
-
- alpha = src_alpha * dst_alpha / gdAlphaMax;
-
- red = (gdTrueColorGetRed(src) * src_weight
- + gdTrueColorGetRed(dst) * dst_weight) / tot_weight;
- green = (gdTrueColorGetGreen(src) * src_weight
- + gdTrueColorGetGreen(dst) * dst_weight) / tot_weight;
- blue = (gdTrueColorGetBlue(src) * src_weight
- + gdTrueColorGetBlue(dst) * dst_weight) / tot_weight;
-
- return ((alpha << 24) + (red << 16) + (green << 8) + blue);
- }
- }
-}
-
-static inline int _setEdgePixel(const gdImagePtr src, unsigned int x, unsigned int y, gdFixed coverage, const int bgColor)
-{
- const gdFixed f_127 = gd_itofx(127);
- register int c = src->tpixels[y][x];
- c = c | (( (int) (gd_fxtof(gd_mulfx(coverage, f_127)) + 50.5f)) << 24);
- return _color_blend(bgColor, c);
-}
-#endif
-
-static inline int getPixelOverflowTC(gdImagePtr im, const int x, const int y, const int bgColor)
-{
- if (gdImageBoundsSafe(im, x, y)) {
- const int c = im->tpixels[y][x];
- if (c == im->transparent) {
- return bgColor == -1 ? gdTrueColorAlpha(0, 0, 0, 127) : bgColor;
- }
- return c;
- } else {
- return bgColor;
- }
-}
-
-#define colorIndex2RGBA(c) gdTrueColorAlpha(im->red[(c)], im->green[(c)], im->blue[(c)], im->alpha[(c)])
-#define colorIndex2RGBcustomA(c, a) gdTrueColorAlpha(im->red[(c)], im->green[(c)], im->blue[(c)], im->alpha[(a)])
-static inline int getPixelOverflowPalette(gdImagePtr im, const int x, const int y, const int bgColor)
-{
- if (gdImageBoundsSafe(im, x, y)) {
- const int c = im->pixels[y][x];
- if (c == im->transparent) {
- return bgColor == -1 ? gdTrueColorAlpha(0, 0, 0, 127) : bgColor;
- }
- return colorIndex2RGBA(c);
- } else {
- return bgColor;
- }
-}
-
-static int getPixelInterpolateWeight(gdImagePtr im, const double x, const double y, const int bgColor)
-{
- /* Closest pixel <= (xf,yf) */
- int sx = (int)(x);
- int sy = (int)(y);
- const double xf = x - (double)sx;
- const double yf = y - (double)sy;
- const double nxf = (double) 1.0 - xf;
- const double nyf = (double) 1.0 - yf;
- const double m1 = xf * yf;
- const double m2 = nxf * yf;
- const double m3 = xf * nyf;
- const double m4 = nxf * nyf;
-
- /* get color values of neighbouring pixels */
- const int c1 = im->trueColor == 1 ? getPixelOverflowTC(im, sx, sy, bgColor) : getPixelOverflowPalette(im, sx, sy, bgColor);
- const int c2 = im->trueColor == 1 ? getPixelOverflowTC(im, sx - 1, sy, bgColor) : getPixelOverflowPalette(im, sx - 1, sy, bgColor);
- const int c3 = im->trueColor == 1 ? getPixelOverflowTC(im, sx, sy - 1, bgColor) : getPixelOverflowPalette(im, sx, sy - 1, bgColor);
- const int c4 = im->trueColor == 1 ? getPixelOverflowTC(im, sx - 1, sy - 1, bgColor) : getPixelOverflowPalette(im, sx, sy - 1, bgColor);
- int r, g, b, a;
-
- if (x < 0) sx--;
- if (y < 0) sy--;
-
- /* component-wise summing-up of color values */
- if (im->trueColor) {
- r = (int)(m1*gdTrueColorGetRed(c1) + m2*gdTrueColorGetRed(c2) + m3*gdTrueColorGetRed(c3) + m4*gdTrueColorGetRed(c4));
- g = (int)(m1*gdTrueColorGetGreen(c1) + m2*gdTrueColorGetGreen(c2) + m3*gdTrueColorGetGreen(c3) + m4*gdTrueColorGetGreen(c4));
- b = (int)(m1*gdTrueColorGetBlue(c1) + m2*gdTrueColorGetBlue(c2) + m3*gdTrueColorGetBlue(c3) + m4*gdTrueColorGetBlue(c4));
- a = (int)(m1*gdTrueColorGetAlpha(c1) + m2*gdTrueColorGetAlpha(c2) + m3*gdTrueColorGetAlpha(c3) + m4*gdTrueColorGetAlpha(c4));
- } else {
- r = (int)(m1*im->red[(c1)] + m2*im->red[(c2)] + m3*im->red[(c3)] + m4*im->red[(c4)]);
- g = (int)(m1*im->green[(c1)] + m2*im->green[(c2)] + m3*im->green[(c3)] + m4*im->green[(c4)]);
- b = (int)(m1*im->blue[(c1)] + m2*im->blue[(c2)] + m3*im->blue[(c3)] + m4*im->blue[(c4)]);
- a = (int)(m1*im->alpha[(c1)] + m2*im->alpha[(c2)] + m3*im->alpha[(c3)] + m4*im->alpha[(c4)]);
- }
-
- r = CLAMP(r, 0, 255);
- g = CLAMP(g, 0, 255);
- b = CLAMP(b, 0, 255);
- a = CLAMP(a, 0, gdAlphaMax);
- return gdTrueColorAlpha(r, g, b, a);
-}
-
-/**
- * InternalFunction: getPixelInterpolated
- * Returns the interpolated color value using the default interpolation
- * method. The returned color is always in the ARGB format (truecolor).
- *
- * Parameters:
- * im - Image to set the default interpolation method
- * y - X value of the ideal position
- * y - Y value of the ideal position
- * method - Interpolation method <gdInterpolationMethod>
- *
- * Returns:
- * GD_TRUE if the affine is rectilinear or GD_FALSE
- *
- * See also:
- * <gdSetInterpolationMethod>
- */
-int getPixelInterpolated(gdImagePtr im, const double x, const double y, const int bgColor)
-{
- const int xi=(int)(x);
- const int yi=(int)(y);
- int yii;
- int i;
- double kernel, kernel_cache_y;
- double kernel_x[12], kernel_y[4];
- double new_r = 0.0f, new_g = 0.0f, new_b = 0.0f, new_a = 0.0f;
-
- /* These methods use special implementations */
- if (im->interpolation_id == GD_NEAREST_NEIGHBOUR) {
- return -1;
- }
-
- if (im->interpolation_id == GD_WEIGHTED4) {
- return getPixelInterpolateWeight(im, x, y, bgColor);
- }
-
- if (im->interpolation_id == GD_NEAREST_NEIGHBOUR) {
- if (im->trueColor == 1) {
- return getPixelOverflowTC(im, xi, yi, bgColor);
- } else {
- return getPixelOverflowPalette(im, xi, yi, bgColor);
- }
- }
- if (im->interpolation) {
- for (i=0; i<4; i++) {
- kernel_x[i] = (double) im->interpolation((double)(xi+i-1-x));
- kernel_y[i] = (double) im->interpolation((double)(yi+i-1-y));
- }
- } else {
- return -1;
- }
-
- /*
- * TODO: use the known fast rgba multiplication implementation once
- * the new formats are in place
- */
- for (yii = yi-1; yii < yi+3; yii++) {
- int xii;
- kernel_cache_y = kernel_y[yii-(yi-1)];
- if (im->trueColor) {
- for (xii=xi-1; xii<xi+3; xii++) {
- const int rgbs = getPixelOverflowTC(im, xii, yii, bgColor);
-
- kernel = kernel_cache_y * kernel_x[xii-(xi-1)];
- new_r += kernel * gdTrueColorGetRed(rgbs);
- new_g += kernel * gdTrueColorGetGreen(rgbs);
- new_b += kernel * gdTrueColorGetBlue(rgbs);
- new_a += kernel * gdTrueColorGetAlpha(rgbs);
- }
- } else {
- for (xii=xi-1; xii<xi+3; xii++) {
- const int rgbs = getPixelOverflowPalette(im, xii, yii, bgColor);
-
- kernel = kernel_cache_y * kernel_x[xii-(xi-1)];
- new_r += kernel * gdTrueColorGetRed(rgbs);
- new_g += kernel * gdTrueColorGetGreen(rgbs);
- new_b += kernel * gdTrueColorGetBlue(rgbs);
- new_a += kernel * gdTrueColorGetAlpha(rgbs);
- }
- }
- }
-
- new_r = CLAMP(new_r, 0, 255);
- new_g = CLAMP(new_g, 0, 255);
- new_b = CLAMP(new_b, 0, 255);
- new_a = CLAMP(new_a, 0, gdAlphaMax);
-
- return gdTrueColorAlpha(((int)new_r), ((int)new_g), ((int)new_b), ((int)new_a));
-}
-
-static inline LineContribType * _gdContributionsAlloc(unsigned int line_length, unsigned int windows_size)
-{
- unsigned int u = 0;
- LineContribType *res;
- size_t weights_size;
-
- if (overflow2(windows_size, sizeof(double))) {
- return NULL;
- } else {
- weights_size = windows_size * sizeof(double);
- }
- res = (LineContribType *) gdMalloc(sizeof(LineContribType));
- if (!res) {
- return NULL;
- }
- res->WindowSize = windows_size;
- res->LineLength = line_length;
- if (overflow2(line_length, sizeof(ContributionType))) {
- gdFree(res);
- return NULL;
- }
- res->ContribRow = (ContributionType *) gdMalloc(line_length * sizeof(ContributionType));
- if (res->ContribRow == NULL) {
- gdFree(res);
- return NULL;
- }
- for (u = 0 ; u < line_length ; u++) {
- res->ContribRow[u].Weights = (double *) gdMalloc(weights_size);
- if (res->ContribRow[u].Weights == NULL) {
- unsigned int i;
-
- for (i=0;i<u;i++) {
- gdFree(res->ContribRow[i].Weights);
- }
- gdFree(res->ContribRow);
- gdFree(res);
- return NULL;
- }
- }
- return res;
-}
-
-static inline void _gdContributionsFree(LineContribType * p)
-{
- unsigned int u;
- for (u = 0; u < p->LineLength; u++) {
- gdFree(p->ContribRow[u].Weights);
- }
- gdFree(p->ContribRow);
- gdFree(p);
-}
-
-static inline LineContribType *_gdContributionsCalc(unsigned int line_size, unsigned int src_size, double scale_d, const interpolation_method pFilter)
-{
- double width_d;
- double scale_f_d = 1.0;
- const double filter_width_d = DEFAULT_BOX_RADIUS;
- int windows_size;
- unsigned int u;
- LineContribType *res;
-
- if (scale_d < 1.0) {
- width_d = filter_width_d / scale_d;
- scale_f_d = scale_d;
- } else {
- width_d= filter_width_d;
- }
-
- windows_size = 2 * (int)ceil(width_d) + 1;
- res = _gdContributionsAlloc(line_size, windows_size);
- if (res == NULL) {
- return NULL;
- }
- for (u = 0; u < line_size; u++) {
- const double dCenter = (double)u / scale_d;
- /* get the significant edge points affecting the pixel */
- register int iLeft = MAX(0, (int)floor (dCenter - width_d));
- int iRight = MIN((int)ceil(dCenter + width_d), (int)src_size - 1);
- double dTotalWeight = 0.0;
- int iSrc;
-
- /* Cut edge points to fit in filter window in case of spill-off */
- if (iRight - iLeft + 1 > windows_size) {
- if (iLeft < ((int)src_size - 1 / 2)) {
- iLeft++;
- } else {
- iRight--;
- }
- }
-
- res->ContribRow[u].Left = iLeft;
- res->ContribRow[u].Right = iRight;
-
- for (iSrc = iLeft; iSrc <= iRight; iSrc++) {
- dTotalWeight += (res->ContribRow[u].Weights[iSrc-iLeft] = scale_f_d * (*pFilter)(scale_f_d * (dCenter - (double)iSrc)));
- }
-
- if (dTotalWeight < 0.0) {
- _gdContributionsFree(res);
- return NULL;
- }
-
- if (dTotalWeight > 0.0) {
- for (iSrc = iLeft; iSrc <= iRight; iSrc++) {
- res->ContribRow[u].Weights[iSrc-iLeft] /= dTotalWeight;
- }
- }
- }
- return res;
-}
-
-
-static inline void
-_gdScaleOneAxis(gdImagePtr pSrc, gdImagePtr dst,
- unsigned int dst_len, unsigned int row, LineContribType *contrib,
- gdAxis axis)
-{
- unsigned int ndx;
-
- for (ndx = 0; ndx < dst_len; ndx++) {
- double r = 0, g = 0, b = 0, a = 0;
- const int left = contrib->ContribRow[ndx].Left;
- const int right = contrib->ContribRow[ndx].Right;
- int *dest = (axis == HORIZONTAL) ?
- &dst->tpixels[row][ndx] :
- &dst->tpixels[ndx][row];
-
- int i;
-
- /* Accumulate each channel */
- for (i = left; i <= right; i++) {
- const int left_channel = i - left;
- const int srcpx = (axis == HORIZONTAL) ?
- pSrc->tpixels[row][i] :
- pSrc->tpixels[i][row];
-
- r += contrib->ContribRow[ndx].Weights[left_channel]
- * (double)(gdTrueColorGetRed(srcpx));
- g += contrib->ContribRow[ndx].Weights[left_channel]
- * (double)(gdTrueColorGetGreen(srcpx));
- b += contrib->ContribRow[ndx].Weights[left_channel]
- * (double)(gdTrueColorGetBlue(srcpx));
- a += contrib->ContribRow[ndx].Weights[left_channel]
- * (double)(gdTrueColorGetAlpha(srcpx));
- }/* for */
-
- *dest = gdTrueColorAlpha(uchar_clamp(r, 0xFF), uchar_clamp(g, 0xFF),
- uchar_clamp(b, 0xFF),
- uchar_clamp(a, 0x7F)); /* alpha is 0..127 */
- }/* for */
-}/* _gdScaleOneAxis*/
-
-
-static inline int
-_gdScalePass(const gdImagePtr pSrc, const unsigned int src_len,
- const gdImagePtr pDst, const unsigned int dst_len,
- const unsigned int num_lines,
- const gdAxis axis)
-{
- unsigned int line_ndx;
- LineContribType * contrib;
-
- /* Same dim, just copy it. */
- assert(dst_len != src_len); // TODO: caller should handle this.
-
- contrib = _gdContributionsCalc(dst_len, src_len,
- (double)dst_len / (double)src_len,
- pSrc->interpolation);
- if (contrib == NULL) {
- return 0;
- }
-
- /* Scale each line */
- for (line_ndx = 0; line_ndx < num_lines; line_ndx++) {
- _gdScaleOneAxis(pSrc, pDst, dst_len, line_ndx, contrib, axis);
- }
- _gdContributionsFree (contrib);
- return 1;
-}/* _gdScalePass*/
-
-
-static gdImagePtr
-gdImageScaleTwoPass(const gdImagePtr src, const unsigned int new_width,
- const unsigned int new_height)
-{
- const unsigned int src_width = src->sx;
- const unsigned int src_height = src->sy;
- gdImagePtr tmp_im = NULL;
- gdImagePtr dst = NULL;
- int scale_pass_res;
-
- assert(src != NULL);
-
- /* First, handle the trivial case. */
- if (src_width == new_width && src_height == new_height) {
- return gdImageClone(src);
- }/* if */
-
- /* Convert to truecolor if it isn't; this code requires it. */
- if (!src->trueColor) {
- gdImagePaletteToTrueColor(src);
- }/* if */
-
- /* Scale horizontally unless sizes are the same. */
- if (src_width == new_width) {
- tmp_im = src;
- } else {
- tmp_im = gdImageCreateTrueColor(new_width, src_height);
- if (tmp_im == NULL) {
- return NULL;
- }
- gdImageSetInterpolationMethod(tmp_im, src->interpolation_id);
-
- scale_pass_res = _gdScalePass(src, src_width, tmp_im, new_width, src_height, HORIZONTAL);
- if (scale_pass_res != 1) {
- gdImageDestroy(tmp_im);
- return NULL;
- }
- }/* if .. else*/
-
- /* If vertical sizes match, we're done. */
- if (src_height == new_height) {
- assert(tmp_im != src);
- return tmp_im;
- }/* if */
-
- /* Otherwise, we need to scale vertically. */
- dst = gdImageCreateTrueColor(new_width, new_height);
- if (dst != NULL) {
- gdImageSetInterpolationMethod(dst, src->interpolation_id);
- scale_pass_res = _gdScalePass(tmp_im, src_height, dst, new_height, new_width, VERTICAL);
- if (scale_pass_res != 1) {
- gdImageDestroy(dst);
- if (src != tmp_im) {
- gdImageDestroy(tmp_im);
- }
- return NULL;
- }
- }/* if */
-
-
- if (src != tmp_im) {
- gdImageDestroy(tmp_im);
- }/* if */
-
- return dst;
-}/* gdImageScaleTwoPass*/
-
-
-/*
- BilinearFixed, BicubicFixed and nearest implementations are
- rewamped versions of the implementation in CBitmapEx
-
- http://www.codeproject.com/Articles/29121/CBitmapEx-Free-C-Bitmap-Manipulation-Class
-
- Integer only implementation, good to have for common usages like
- pre scale very large images before using another interpolation
- methods for the last step.
-*/
-static gdImagePtr
-gdImageScaleNearestNeighbour(gdImagePtr im, const unsigned int width, const unsigned int height)
-{
- const unsigned long new_width = MAX(1, width);
- const unsigned long new_height = MAX(1, height);
- const float dx = (float)im->sx / (float)new_width;
- const float dy = (float)im->sy / (float)new_height;
- const gdFixed f_dx = gd_ftofx(dx);
- const gdFixed f_dy = gd_ftofx(dy);
-
- gdImagePtr dst_img;
- unsigned long dst_offset_x;
- unsigned long dst_offset_y = 0;
- unsigned int i;
-
- dst_img = gdImageCreateTrueColor(new_width, new_height);
-
- if (dst_img == NULL) {
- return NULL;
- }
-
- for (i=0; i<new_height; i++) {
- unsigned int j;
- dst_offset_x = 0;
- if (im->trueColor) {
- for (j=0; j<new_width; j++) {
- const gdFixed f_i = gd_itofx(i);
- const gdFixed f_j = gd_itofx(j);
- const gdFixed f_a = gd_mulfx(f_i, f_dy);
- const gdFixed f_b = gd_mulfx(f_j, f_dx);
- const long m = gd_fxtoi(f_a);
- const long n = gd_fxtoi(f_b);
-
- dst_img->tpixels[dst_offset_y][dst_offset_x++] = im->tpixels[m][n];
- }
- } else {
- for (j=0; j<new_width; j++) {
- const gdFixed f_i = gd_itofx(i);
- const gdFixed f_j = gd_itofx(j);
- const gdFixed f_a = gd_mulfx(f_i, f_dy);
- const gdFixed f_b = gd_mulfx(f_j, f_dx);
- const long m = gd_fxtoi(f_a);
- const long n = gd_fxtoi(f_b);
-
- dst_img->tpixels[dst_offset_y][dst_offset_x++] = colorIndex2RGBA(im->pixels[m][n]);
- }
- }
- dst_offset_y++;
- }
- return dst_img;
-}
-
-#if 0
-static inline int getPixelOverflowColorTC(gdImagePtr im, const int x, const int y, const int color)
-{
- if (gdImageBoundsSafe(im, x, y)) {
- const int c = im->tpixels[y][x];
- if (c == im->transparent) {
- return gdTrueColorAlpha(0, 0, 0, 127);
- }
- return c;
- } else {
- register int border = 0;
- if (y < im->cy1) {
- border = im->tpixels[0][im->cx1];
- goto processborder;
- }
-
- if (y < im->cy1) {
- border = im->tpixels[0][im->cx1];
- goto processborder;
- }
-
- if (y > im->cy2) {
- if (x >= im->cx1 && x <= im->cx1) {
- border = im->tpixels[im->cy2][x];
- goto processborder;
- } else {
- return gdTrueColorAlpha(0, 0, 0, 127);
- }
- }
-
- /* y is bound safe at this point */
- if (x < im->cx1) {
- border = im->tpixels[y][im->cx1];
- goto processborder;
- }
-
- if (x > im->cx2) {
- border = im->tpixels[y][im->cx2];
- }
-
-processborder:
- if (border == im->transparent) {
- return gdTrueColorAlpha(0, 0, 0, 127);
- } else{
- return gdTrueColorAlpha(gdTrueColorGetRed(border), gdTrueColorGetGreen(border), gdTrueColorGetBlue(border), 127);
- }
- }
-}
-#endif
-
-static gdImagePtr gdImageScaleBilinearPalette(gdImagePtr im, const unsigned int new_width, const unsigned int new_height)
-{
- long _width = MAX(1, new_width);
- long _height = MAX(1, new_height);
- float dx = (float)gdImageSX(im) / (float)_width;
- float dy = (float)gdImageSY(im) / (float)_height;
- gdFixed f_dx = gd_ftofx(dx);
- gdFixed f_dy = gd_ftofx(dy);
- gdFixed f_1 = gd_itofx(1);
-
- int dst_offset_h;
- int dst_offset_v = 0;
- long i;
- gdImagePtr new_img;
- const int transparent = im->transparent;
-
- new_img = gdImageCreateTrueColor(new_width, new_height);
- if (new_img == NULL) {
- return NULL;
- }
-
- if (transparent < 0) {
- /* uninitialized */
- new_img->transparent = -1;
- } else {
- new_img->transparent = gdTrueColorAlpha(im->red[transparent], im->green[transparent], im->blue[transparent], im->alpha[transparent]);
- }
-
- for (i=0; i < _height; i++) {
- long j;
- const gdFixed f_i = gd_itofx(i);
- const gdFixed f_a = gd_mulfx(f_i, f_dy);
- register long m = gd_fxtoi(f_a);
-
- dst_offset_h = 0;
-
- for (j=0; j < _width; j++) {
- /* Update bitmap */
- gdFixed f_j = gd_itofx(j);
- gdFixed f_b = gd_mulfx(f_j, f_dx);
-
- const long n = gd_fxtoi(f_b);
- gdFixed f_f = f_a - gd_itofx(m);
- gdFixed f_g = f_b - gd_itofx(n);
-
- const gdFixed f_w1 = gd_mulfx(f_1-f_f, f_1-f_g);
- const gdFixed f_w2 = gd_mulfx(f_1-f_f, f_g);
- const gdFixed f_w3 = gd_mulfx(f_f, f_1-f_g);
- const gdFixed f_w4 = gd_mulfx(f_f, f_g);
- unsigned int pixel1;
- unsigned int pixel2;
- unsigned int pixel3;
- unsigned int pixel4;
- register gdFixed f_r1, f_r2, f_r3, f_r4,
- f_g1, f_g2, f_g3, f_g4,
- f_b1, f_b2, f_b3, f_b4,
- f_a1, f_a2, f_a3, f_a4;
-
- /* 0 for bgColor; (n,m) is supposed to be valid anyway */
- pixel1 = getPixelOverflowPalette(im, n, m, 0);
- pixel2 = getPixelOverflowPalette(im, n + 1, m, pixel1);
- pixel3 = getPixelOverflowPalette(im, n, m + 1, pixel1);
- pixel4 = getPixelOverflowPalette(im, n + 1, m + 1, pixel1);
-
- f_r1 = gd_itofx(gdTrueColorGetRed(pixel1));
- f_r2 = gd_itofx(gdTrueColorGetRed(pixel2));
- f_r3 = gd_itofx(gdTrueColorGetRed(pixel3));
- f_r4 = gd_itofx(gdTrueColorGetRed(pixel4));
- f_g1 = gd_itofx(gdTrueColorGetGreen(pixel1));
- f_g2 = gd_itofx(gdTrueColorGetGreen(pixel2));
- f_g3 = gd_itofx(gdTrueColorGetGreen(pixel3));
- f_g4 = gd_itofx(gdTrueColorGetGreen(pixel4));
- f_b1 = gd_itofx(gdTrueColorGetBlue(pixel1));
- f_b2 = gd_itofx(gdTrueColorGetBlue(pixel2));
- f_b3 = gd_itofx(gdTrueColorGetBlue(pixel3));
- f_b4 = gd_itofx(gdTrueColorGetBlue(pixel4));
- f_a1 = gd_itofx(gdTrueColorGetAlpha(pixel1));
- f_a2 = gd_itofx(gdTrueColorGetAlpha(pixel2));
- f_a3 = gd_itofx(gdTrueColorGetAlpha(pixel3));
- f_a4 = gd_itofx(gdTrueColorGetAlpha(pixel4));
-
- {
- const unsigned char red = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_r1) + gd_mulfx(f_w2, f_r2) + gd_mulfx(f_w3, f_r3) + gd_mulfx(f_w4, f_r4));
- const unsigned char green = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_g1) + gd_mulfx(f_w2, f_g2) + gd_mulfx(f_w3, f_g3) + gd_mulfx(f_w4, f_g4));
- const unsigned char blue = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_b1) + gd_mulfx(f_w2, f_b2) + gd_mulfx(f_w3, f_b3) + gd_mulfx(f_w4, f_b4));
- const unsigned char alpha = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_a1) + gd_mulfx(f_w2, f_a2) + gd_mulfx(f_w3, f_a3) + gd_mulfx(f_w4, f_a4));
-
- new_img->tpixels[dst_offset_v][dst_offset_h] = gdTrueColorAlpha(red, green, blue, alpha);
- }
-
- dst_offset_h++;
- }
-
- dst_offset_v++;
- }
- return new_img;
-}
-
-static gdImagePtr gdImageScaleBilinearTC(gdImagePtr im, const unsigned int new_width, const unsigned int new_height)
-{
- long dst_w = MAX(1, new_width);
- long dst_h = MAX(1, new_height);
- float dx = (float)gdImageSX(im) / (float)dst_w;
- float dy = (float)gdImageSY(im) / (float)dst_h;
- gdFixed f_dx = gd_ftofx(dx);
- gdFixed f_dy = gd_ftofx(dy);
- gdFixed f_1 = gd_itofx(1);
-
- int dst_offset_h;
- int dst_offset_v = 0;
- long i;
- gdImagePtr new_img;
-
- new_img = gdImageCreateTrueColor(new_width, new_height);
- if (!new_img){
- return NULL;
- }
-
- for (i=0; i < dst_h; i++) {
- long j;
- dst_offset_h = 0;
- for (j=0; j < dst_w; j++) {
- /* Update bitmap */
- gdFixed f_i = gd_itofx(i);
- gdFixed f_j = gd_itofx(j);
- gdFixed f_a = gd_mulfx(f_i, f_dy);
- gdFixed f_b = gd_mulfx(f_j, f_dx);
- const long m = gd_fxtoi(f_a);
- const long n = gd_fxtoi(f_b);
- gdFixed f_f = f_a - gd_itofx(m);
- gdFixed f_g = f_b - gd_itofx(n);
-
- const gdFixed f_w1 = gd_mulfx(f_1-f_f, f_1-f_g);
- const gdFixed f_w2 = gd_mulfx(f_1-f_f, f_g);
- const gdFixed f_w3 = gd_mulfx(f_f, f_1-f_g);
- const gdFixed f_w4 = gd_mulfx(f_f, f_g);
- unsigned int pixel1;
- unsigned int pixel2;
- unsigned int pixel3;
- unsigned int pixel4;
- register gdFixed f_r1, f_r2, f_r3, f_r4,
- f_g1, f_g2, f_g3, f_g4,
- f_b1, f_b2, f_b3, f_b4,
- f_a1, f_a2, f_a3, f_a4;
- /* 0 for bgColor; (n,m) is supposed to be valid anyway */
- pixel1 = getPixelOverflowTC(im, n, m, 0);
- pixel2 = getPixelOverflowTC(im, n + 1, m, pixel1);
- pixel3 = getPixelOverflowTC(im, n, m + 1, pixel1);
- pixel4 = getPixelOverflowTC(im, n + 1, m + 1, pixel1);
-
- f_r1 = gd_itofx(gdTrueColorGetRed(pixel1));
- f_r2 = gd_itofx(gdTrueColorGetRed(pixel2));
- f_r3 = gd_itofx(gdTrueColorGetRed(pixel3));
- f_r4 = gd_itofx(gdTrueColorGetRed(pixel4));
- f_g1 = gd_itofx(gdTrueColorGetGreen(pixel1));
- f_g2 = gd_itofx(gdTrueColorGetGreen(pixel2));
- f_g3 = gd_itofx(gdTrueColorGetGreen(pixel3));
- f_g4 = gd_itofx(gdTrueColorGetGreen(pixel4));
- f_b1 = gd_itofx(gdTrueColorGetBlue(pixel1));
- f_b2 = gd_itofx(gdTrueColorGetBlue(pixel2));
- f_b3 = gd_itofx(gdTrueColorGetBlue(pixel3));
- f_b4 = gd_itofx(gdTrueColorGetBlue(pixel4));
- f_a1 = gd_itofx(gdTrueColorGetAlpha(pixel1));
- f_a2 = gd_itofx(gdTrueColorGetAlpha(pixel2));
- f_a3 = gd_itofx(gdTrueColorGetAlpha(pixel3));
- f_a4 = gd_itofx(gdTrueColorGetAlpha(pixel4));
- {
- const unsigned char red = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_r1) + gd_mulfx(f_w2, f_r2) + gd_mulfx(f_w3, f_r3) + gd_mulfx(f_w4, f_r4));
- const unsigned char green = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_g1) + gd_mulfx(f_w2, f_g2) + gd_mulfx(f_w3, f_g3) + gd_mulfx(f_w4, f_g4));
- const unsigned char blue = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_b1) + gd_mulfx(f_w2, f_b2) + gd_mulfx(f_w3, f_b3) + gd_mulfx(f_w4, f_b4));
- const unsigned char alpha = (unsigned char) gd_fxtoi(gd_mulfx(f_w1, f_a1) + gd_mulfx(f_w2, f_a2) + gd_mulfx(f_w3, f_a3) + gd_mulfx(f_w4, f_a4));
-
- new_img->tpixels[dst_offset_v][dst_offset_h] = gdTrueColorAlpha(red, green, blue, alpha);
- }
-
- dst_offset_h++;
- }
-
- dst_offset_v++;
- }
- return new_img;
-}
-
-static gdImagePtr
-gdImageScaleBilinear(gdImagePtr im, const unsigned int new_width,
- const unsigned int new_height)
-{
- if (im->trueColor) {
- return gdImageScaleBilinearTC(im, new_width, new_height);
- } else {
- return gdImageScaleBilinearPalette(im, new_width, new_height);
- }
-}
-
-static gdImagePtr
-gdImageScaleBicubicFixed(gdImagePtr src, const unsigned int width,
- const unsigned int height)
-{
- const long new_width = MAX(1, width);
- const long new_height = MAX(1, height);
- const int src_w = gdImageSX(src);
- const int src_h = gdImageSY(src);
- const gdFixed f_dx = gd_ftofx((float)src_w / (float)new_width);
- const gdFixed f_dy = gd_ftofx((float)src_h / (float)new_height);
- const gdFixed f_1 = gd_itofx(1);
- const gdFixed f_2 = gd_itofx(2);
- const gdFixed f_4 = gd_itofx(4);
- const gdFixed f_6 = gd_itofx(6);
- const gdFixed f_gamma = gd_ftofx(1.04f);
- gdImagePtr dst;
-
- unsigned int dst_offset_x;
- unsigned int dst_offset_y = 0;
- long i;
-
- /* impact perf a bit, but not that much. Implementation for palette
- images can be done at a later point.
- */
- if (src->trueColor == 0) {
- gdImagePaletteToTrueColor(src);
- }
-
- dst = gdImageCreateTrueColor(new_width, new_height);
- if (!dst) {
- return NULL;
- }
-
- dst->saveAlphaFlag = 1;
-
- for (i=0; i < new_height; i++) {
- long j;
- dst_offset_x = 0;
-
- for (j=0; j < new_width; j++) {
- const gdFixed f_a = gd_mulfx(gd_itofx(i), f_dy);
- const gdFixed f_b = gd_mulfx(gd_itofx(j), f_dx);
- const long m = gd_fxtoi(f_a);
- const long n = gd_fxtoi(f_b);
- const gdFixed f_f = f_a - gd_itofx(m);
- const gdFixed f_g = f_b - gd_itofx(n);
- unsigned int src_offset_x[16], src_offset_y[16];
- long k;
- register gdFixed f_red = 0, f_green = 0, f_blue = 0, f_alpha = 0;
- unsigned char red, green, blue, alpha = 0;
- int *dst_row = dst->tpixels[dst_offset_y];
-
- if ((m < 1) || (n < 1)) {
- src_offset_x[0] = n;
- src_offset_y[0] = m;
- } else {
- src_offset_x[0] = n - 1;
- src_offset_y[0] = m;
- }
-
- src_offset_x[1] = n;
- src_offset_y[1] = m;
-
- if ((m < 1) || (n >= src_w - 1)) {
- src_offset_x[2] = n;
- src_offset_y[2] = m;
- } else {
- src_offset_x[2] = n + 1;
- src_offset_y[2] = m;
- }
-
- if ((m < 1) || (n >= src_w - 2)) {
- src_offset_x[3] = n;
- src_offset_y[3] = m;
- } else {
- src_offset_x[3] = n + 1 + 1;
- src_offset_y[3] = m;
- }
-
- if (n < 1) {
- src_offset_x[4] = n;
- src_offset_y[4] = m;
- } else {
- src_offset_x[4] = n - 1;
- src_offset_y[4] = m;
- }
-
- src_offset_x[5] = n;
- src_offset_y[5] = m;
- if (n >= src_w-1) {
- src_offset_x[6] = n;
- src_offset_y[6] = m;
- } else {
- src_offset_x[6] = n + 1;
- src_offset_y[6] = m;
- }
-
- if (n >= src_w - 2) {
- src_offset_x[7] = n;
- src_offset_y[7] = m;
- } else {
- src_offset_x[7] = n + 1 + 1;
- src_offset_y[7] = m;
- }
-
- if ((m >= src_h - 1) || (n < 1)) {
- src_offset_x[8] = n;
- src_offset_y[8] = m;
- } else {
- src_offset_x[8] = n - 1;
- src_offset_y[8] = m;
- }
-
- src_offset_x[9] = n;
- src_offset_y[9] = m;
-
- if ((m >= src_h-1) || (n >= src_w-1)) {
- src_offset_x[10] = n;
- src_offset_y[10] = m;
- } else {
- src_offset_x[10] = n + 1;
- src_offset_y[10] = m;
- }
-
- if ((m >= src_h - 1) || (n >= src_w - 2)) {
- src_offset_x[11] = n;
- src_offset_y[11] = m;
- } else {
- src_offset_x[11] = n + 1 + 1;
- src_offset_y[11] = m;
- }
-
- if ((m >= src_h - 2) || (n < 1)) {
- src_offset_x[12] = n;
- src_offset_y[12] = m;
- } else {
- src_offset_x[12] = n - 1;
- src_offset_y[12] = m;
- }
-
- if (!(m >= src_h - 2)) {
- src_offset_x[13] = n;
- src_offset_y[13] = m;
- }
-
- if ((m >= src_h - 2) || (n >= src_w - 1)) {
- src_offset_x[14] = n;
- src_offset_y[14] = m;
- } else {
- src_offset_x[14] = n + 1;
- src_offset_y[14] = m;
- }
-
- if ((m >= src_h - 2) || (n >= src_w - 2)) {
- src_offset_x[15] = n;
- src_offset_y[15] = m;
- } else {
- src_offset_x[15] = n + 1 + 1;
- src_offset_y[15] = m;
- }
-
- for (k = -1; k < 3; k++) {
- const gdFixed f = gd_itofx(k)-f_f;
- const gdFixed f_fm1 = f - f_1;
- const gdFixed f_fp1 = f + f_1;
- const gdFixed f_fp2 = f + f_2;
- register gdFixed f_a = 0, f_b = 0, f_d = 0, f_c = 0;
- register gdFixed f_RY;
- int l;
-
- if (f_fp2 > 0) f_a = gd_mulfx(f_fp2, gd_mulfx(f_fp2,f_fp2));
- if (f_fp1 > 0) f_b = gd_mulfx(f_fp1, gd_mulfx(f_fp1,f_fp1));
- if (f > 0) f_c = gd_mulfx(f, gd_mulfx(f,f));
- if (f_fm1 > 0) f_d = gd_mulfx(f_fm1, gd_mulfx(f_fm1,f_fm1));
-
- f_RY = gd_divfx((f_a - gd_mulfx(f_4,f_b) + gd_mulfx(f_6,f_c) - gd_mulfx(f_4,f_d)),f_6);
-
- for (l = -1; l < 3; l++) {
- const gdFixed f = gd_itofx(l) - f_g;
- const gdFixed f_fm1 = f - f_1;
- const gdFixed f_fp1 = f + f_1;
- const gdFixed f_fp2 = f + f_2;
- register gdFixed f_a = 0, f_b = 0, f_c = 0, f_d = 0;
- register gdFixed f_RX, f_R, f_rs, f_gs, f_bs, f_ba;
- register int c;
- const int _k = ((k+1)*4) + (l+1);
-
- if (f_fp2 > 0) f_a = gd_mulfx(f_fp2,gd_mulfx(f_fp2,f_fp2));
-
- if (f_fp1 > 0) f_b = gd_mulfx(f_fp1,gd_mulfx(f_fp1,f_fp1));
-
- if (f > 0) f_c = gd_mulfx(f,gd_mulfx(f,f));
-
- if (f_fm1 > 0) f_d = gd_mulfx(f_fm1,gd_mulfx(f_fm1,f_fm1));
-
- f_RX = gd_divfx((f_a-gd_mulfx(f_4,f_b)+gd_mulfx(f_6,f_c)-gd_mulfx(f_4,f_d)),f_6);
- f_R = gd_mulfx(f_RY,f_RX);
-
- c = src->tpixels[*(src_offset_y + _k)][*(src_offset_x + _k)];
- f_rs = gd_itofx(gdTrueColorGetRed(c));
- f_gs = gd_itofx(gdTrueColorGetGreen(c));
- f_bs = gd_itofx(gdTrueColorGetBlue(c));
- f_ba = gd_itofx(gdTrueColorGetAlpha(c));
-
- f_red += gd_mulfx(f_rs,f_R);
- f_green += gd_mulfx(f_gs,f_R);
- f_blue += gd_mulfx(f_bs,f_R);
- f_alpha += gd_mulfx(f_ba,f_R);
- }
- }
-
- red = (unsigned char) CLAMP(gd_fxtoi(gd_mulfx(f_red, f_gamma)), 0, 255);
- green = (unsigned char) CLAMP(gd_fxtoi(gd_mulfx(f_green, f_gamma)), 0, 255);
- blue = (unsigned char) CLAMP(gd_fxtoi(gd_mulfx(f_blue, f_gamma)), 0, 255);
- alpha = (unsigned char) CLAMP(gd_fxtoi(gd_mulfx(f_alpha, f_gamma)), 0, 127);
-
- *(dst_row + dst_offset_x) = gdTrueColorAlpha(red, green, blue, alpha);
-
- dst_offset_x++;
- }
- dst_offset_y++;
- }
- return dst;
-}
-
-/**
- * Function: gdImageScale
- *
- * Scale an image
- *
- * Creates a new image, scaled to the requested size using the current
- * <gdInterpolationMethod>.
- *
- * Note that GD_WEIGHTED4 is not yet supported by this function.
- *
- * Parameters:
- * src - The source image.
- * new_width - The new width.
- * new_height - The new height.
- *
- * Returns:
- * The scaled image on success, NULL on failure.
- *
- * See also:
- * - <gdImageCopyResized>
- * - <gdImageCopyResampled>
- */
-BGD_DECLARE(gdImagePtr) gdImageScale(const gdImagePtr src, const unsigned int new_width, const unsigned int new_height)
-{
- gdImagePtr im_scaled = NULL;
-
- if (src == NULL || (uintmax_t)src->interpolation_id >= GD_METHOD_COUNT) {
- return NULL;
- }
-
- if (new_width == 0 || new_height == 0) {
- return NULL;
- }
- if (new_width == gdImageSX(src) && new_height == gdImageSY(src)) {
- return gdImageClone(src);
- }
- switch (src->interpolation_id) {
- /*Special cases, optimized implementations */
- case GD_NEAREST_NEIGHBOUR:
- im_scaled = gdImageScaleNearestNeighbour(src, new_width, new_height);
- break;
-
- case GD_BILINEAR_FIXED:
- case GD_LINEAR:
- im_scaled = gdImageScaleBilinear(src, new_width, new_height);
- break;
-
- case GD_BICUBIC_FIXED:
- case GD_BICUBIC:
- im_scaled = gdImageScaleBicubicFixed(src, new_width, new_height);
- break;
-
- /* generic */
- default:
- if (src->interpolation == NULL) {
- return NULL;
- }
- im_scaled = gdImageScaleTwoPass(src, new_width, new_height);
- break;
- }
-
- return im_scaled;
-}
-
-static int gdRotatedImageSize(gdImagePtr src, const float angle, gdRectPtr bbox)
-{
- gdRect src_area;
- double m[6];
-
- gdAffineRotate(m, angle);
- src_area.x = 0;
- src_area.y = 0;
- src_area.width = gdImageSX(src);
- src_area.height = gdImageSY(src);
- if (gdTransformAffineBoundingBox(&src_area, m, bbox) != GD_TRUE) {
- return GD_FALSE;
- }
-
- return GD_TRUE;
-}
-
-static gdImagePtr
-gdImageRotateNearestNeighbour(gdImagePtr src, const float degrees,
- const int bgColor)
-{
- float _angle = ((float) (-degrees / 180.0f) * (float)M_PI);
- const int src_w = gdImageSX(src);
- const int src_h = gdImageSY(src);
- const gdFixed f_0_5 = gd_ftofx(0.5f);
- const gdFixed f_H = gd_itofx(src_h/2);
- const gdFixed f_W = gd_itofx(src_w/2);
- const gdFixed f_cos = gd_ftofx(cos(-_angle));
- const gdFixed f_sin = gd_ftofx(sin(-_angle));
-
- unsigned int dst_offset_x;
- unsigned int dst_offset_y = 0;
- unsigned int i;
- gdImagePtr dst;
- gdRect bbox;
- int new_height, new_width;
-
- gdRotatedImageSize(src, degrees, &bbox);
- new_width = bbox.width;
- new_height = bbox.height;
-
- dst = gdImageCreateTrueColor(new_width, new_height);
- if (!dst) {
- return NULL;
- }
- dst->saveAlphaFlag = 1;
- for (i = 0; i < new_height; i++) {
- unsigned int j;
- dst_offset_x = 0;
- for (j = 0; j < new_width; j++) {
- gdFixed f_i = gd_itofx((int)i - (int)new_height / 2);
- gdFixed f_j = gd_itofx((int)j - (int)new_width / 2);
- gdFixed f_m = gd_mulfx(f_j,f_sin) + gd_mulfx(f_i,f_cos) + f_0_5 + f_H;
- gdFixed f_n = gd_mulfx(f_j,f_cos) - gd_mulfx(f_i,f_sin) + f_0_5 + f_W;
- long m = gd_fxtoi(f_m);
- long n = gd_fxtoi(f_n);
-
- if ((m > 0) && (m < src_h-1) && (n > 0) && (n < src_w-1)) {
- if (dst_offset_y < new_height) {
- dst->tpixels[dst_offset_y][dst_offset_x++] = src->tpixels[m][n];
- }
- } else {
- if (dst_offset_y < new_height) {
- dst->tpixels[dst_offset_y][dst_offset_x++] = bgColor;
- }
- }
- }
- dst_offset_y++;
- }
- return dst;
-}
-
-static gdImagePtr
-gdImageRotateGeneric(gdImagePtr src, const float degrees, const int bgColor)
-{
- float _angle = ((float) (-degrees / 180.0f) * (float)M_PI);
- const int src_w = gdImageSX(src);
- const int src_h = gdImageSY(src);
- const gdFixed f_H = gd_itofx(src_h/2);
- const gdFixed f_W = gd_itofx(src_w/2);
- const gdFixed f_cos = gd_ftofx(cos(-_angle));
- const gdFixed f_sin = gd_ftofx(sin(-_angle));
-
- unsigned int dst_offset_x;
- unsigned int dst_offset_y = 0;
- unsigned int i;
- gdImagePtr dst;
- int new_width, new_height;
- gdRect bbox;
-
- if (bgColor < 0) {
- return NULL;
- }
-
- if (src->interpolation == NULL) {
- gdImageSetInterpolationMethod(src, GD_DEFAULT);
- }
-
- gdRotatedImageSize(src, degrees, &bbox);
- new_width = bbox.width;
- new_height = bbox.height;
-
- dst = gdImageCreateTrueColor(new_width, new_height);
- if (!dst) {
- return NULL;
- }
- dst->saveAlphaFlag = 1;
-
- for (i = 0; i < new_height; i++) {
- unsigned int j;
- dst_offset_x = 0;
- for (j = 0; j < new_width; j++) {
- gdFixed f_i = gd_itofx((int)i - (int)new_height / 2);
- gdFixed f_j = gd_itofx((int)j - (int)new_width / 2);
- gdFixed f_m = gd_mulfx(f_j,f_sin) + gd_mulfx(f_i,f_cos) + f_H;
- gdFixed f_n = gd_mulfx(f_j,f_cos) - gd_mulfx(f_i,f_sin) + f_W;
- long m = gd_fxtoi(f_m);
- long n = gd_fxtoi(f_n);
-
- if (m < -1 || n < -1 || m >= src_h || n >= src_w ) {
- dst->tpixels[dst_offset_y][dst_offset_x++] = bgColor;
- } else {
- dst->tpixels[dst_offset_y][dst_offset_x++] = getPixelInterpolated(src, gd_fxtod(f_n), gd_fxtod(f_m), bgColor);
- }
- }
- dst_offset_y++;
- }
- return dst;
-}
-
-/**
- * Function: gdImageRotateInterpolated
- *
- * Rotate an image
- *
- * Creates a new image, counter-clockwise rotated by the requested angle
- * using the current <gdInterpolationMethod>. Non-square angles will add a
- * border with bgcolor.
- *
- * Parameters:
- * src - The source image.
- * angle - The angle in degrees.
- * bgcolor - The color to fill the added background with.
- *
- * Returns:
- * The rotated image on success, NULL on failure.
- *
- * See also:
- * - <gdImageCopyRotated>
- */
-BGD_DECLARE(gdImagePtr) gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor)
-{
- /* round to two decimals and keep the 100x multiplication to use it in the common square angles
- case later. Keep the two decimal precisions so smaller rotation steps can be done, useful for
- slow animations, f.e. */
- const int angle_rounded = fmod((int) floorf(angle * 100), 360 * 100);
-
- if (src == NULL || bgcolor < 0) {
- return NULL;
- }
-
- /* impact perf a bit, but not that much. Implementation for palette
- images can be done at a later point.
- */
- if (src->trueColor == 0) {
- if (bgcolor < gdMaxColors) {
- bgcolor = gdTrueColorAlpha(src->red[bgcolor], src->green[bgcolor], src->blue[bgcolor], src->alpha[bgcolor]);
- }
- gdImagePaletteToTrueColor(src);
- }
-
- /* 0 && 90 degrees multiple rotation, 0 rotation simply clones the return image and convert it
- to truecolor, as we must return truecolor image. */
- switch (angle_rounded) {
- case 0: {
- gdImagePtr dst = gdImageClone(src);
-
- if (dst == NULL) {
- return NULL;
- }
- if (dst->trueColor == 0) {
- gdImagePaletteToTrueColor(dst);
- }
- return dst;
- }
-
- case -27000:
- case 9000:
- return gdImageRotate90(src, 0);
-
- case -18000:
- case 18000:
- return gdImageRotate180(src, 0);
-
- case -9000:
- case 27000:
- return gdImageRotate270(src, 0);
- }
-
- if (src->interpolation_id < 1 || src->interpolation_id > GD_METHOD_COUNT) {
- return NULL;
- }
-
- switch (src->interpolation_id) {
- case GD_NEAREST_NEIGHBOUR:
- return gdImageRotateNearestNeighbour(src, angle, bgcolor);
- break;
-
- case GD_BILINEAR_FIXED:
- case GD_BICUBIC_FIXED:
- default:
- return gdImageRotateGeneric(src, angle, bgcolor);
- }
- return NULL;
-}
-
-/**
- * Group: Affine Transformation
- **/
-
- static void gdImageClipRectangle(gdImagePtr im, gdRectPtr r)
-{
- int c1x, c1y, c2x, c2y;
- int x1,y1;
-
- gdImageGetClip(im, &c1x, &c1y, &c2x, &c2y);
- x1 = r->x + r->width - 1;
- y1 = r->y + r->height - 1;
- r->x = CLAMP(r->x, c1x, c2x);
- r->y = CLAMP(r->y, c1y, c2y);
- r->width = CLAMP(x1, c1x, c2x) - r->x + 1;
- r->height = CLAMP(y1, c1y, c2y) - r->y + 1;
-}
-
-void gdDumpRect(const char *msg, gdRectPtr r)
-{
- printf("%s (%i, %i) (%i, %i)\n", msg, r->x, r->y, r->width, r->height);
-}
-
-/**
- * Function: gdTransformAffineGetImage
- * Applies an affine transformation to a region and return an image
- * containing the complete transformation.
- *
- * Parameters:
- * dst - Pointer to a gdImagePtr to store the created image, NULL when
- * the creation or the transformation failed
- * src - Source image
- * src_area - rectangle defining the source region to transform
- * dstY - Y position in the destination image
- * affine - The desired affine transformation
- *
- * Returns:
- * GD_TRUE if the affine is rectilinear or GD_FALSE
- */
-BGD_DECLARE(int) gdTransformAffineGetImage(gdImagePtr *dst,
- const gdImagePtr src,
- gdRectPtr src_area,
- const double affine[6])
-{
- int res;
- double m[6];
- gdRect bbox;
- gdRect area_full;
-
- if (src_area == NULL) {
- area_full.x = 0;
- area_full.y = 0;
- area_full.width = gdImageSX(src);
- area_full.height = gdImageSY(src);
- src_area = &area_full;
- }
-
- gdTransformAffineBoundingBox(src_area, affine, &bbox);
-
- *dst = gdImageCreateTrueColor(bbox.width, bbox.height);
- if (*dst == NULL) {
- return GD_FALSE;
- }
- (*dst)->saveAlphaFlag = 1;
-
- if (!src->trueColor) {
- gdImagePaletteToTrueColor(src);
- }
-
- /* Translate to dst origin (0,0) */
- gdAffineTranslate(m, -bbox.x, -bbox.y);
- gdAffineConcat(m, affine, m);
-
- gdImageAlphaBlending(*dst, 0);
-
- res = gdTransformAffineCopy(*dst,
- 0,0,
- src,
- src_area,
- m);
-
- if (res != GD_TRUE) {
- gdImageDestroy(*dst);
- *dst = NULL;
- return GD_FALSE;
- } else {
- return GD_TRUE;
- }
-}
-
-/** Function: getPixelRgbInterpolated
- * get the index of the image's colors
- *
- * Parameters:
- * im - Image to draw the transformed image
- * tcolor - TrueColor
- *
- * Return:
- * index of colors
- */
-static int getPixelRgbInterpolated(gdImagePtr im, const int tcolor)
-{
- unsigned char r, g, b, a;
- int ct;
- int i;
-
- b = (unsigned char)tcolor;
- g = (unsigned char)(tcolor >> 8);
- r = (unsigned char)(tcolor >> 16);
- a = (unsigned char)(tcolor >> 24);
-
- b = CLAMP(b, 0, 255);
- g = CLAMP(g, 0, 255);
- r = CLAMP(r, 0, 255);
- a = CLAMP(a, 0, 127);
-
- for (i = 0; i < im->colorsTotal; i++) {
- if (im->red[i] == r && im->green[i] == g && im->blue[i] == b && im->alpha[i] == a) {
- return i;
- }
- }
-
- ct = im->colorsTotal;
- if (ct == gdMaxColors) {
- return -1;
- }
-
- im->colorsTotal++;
- im->red[ct] = r;
- im->green[ct] = g;
- im->blue[ct] = b;
- im->alpha[ct] = a;
- im->open[ct] = 0;
-
- return ct;
-}
-/**
- * Function: gdTransformAffineCopy
- * Applies an affine transformation to a region and copy the result
- * in a destination to the given position.
- *
- * Parameters:
- * dst - Image to draw the transformed image
- * src - Source image
- * dstX - X position in the destination image
- * dstY - Y position in the destination image
- * src_area - Rectangular region to rotate in the src image
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE on failure
- */
-BGD_DECLARE(int) gdTransformAffineCopy(gdImagePtr dst,
- int dst_x, int dst_y,
- const gdImagePtr src,
- gdRectPtr src_region,
- const double affine[6])
-{
- int c1x,c1y,c2x,c2y;
- int backclip = 0;
- int backup_clipx1, backup_clipy1, backup_clipx2, backup_clipy2;
- register int x, y, src_offset_x, src_offset_y;
- double inv[6];
- gdPointF pt, src_pt;
- gdRect bbox;
- int end_x, end_y;
- gdInterpolationMethod interpolation_id_bak = src->interpolation_id;
-
- /* These methods use special implementations */
- if (src->interpolation_id == GD_BILINEAR_FIXED || src->interpolation_id == GD_BICUBIC_FIXED || src->interpolation_id == GD_NEAREST_NEIGHBOUR) {
- gdImageSetInterpolationMethod(src, GD_BICUBIC);
- }
-
- gdImageClipRectangle(src, src_region);
- c1x = src_region->x;
- c1y = src_region->y;
- c2x = src_region->x + src_region->width -1;
- c2y = src_region->y + src_region->height -1;
-
- if (src_region->x > 0 || src_region->y > 0
- || src_region->width < gdImageSX(src)
- || src_region->height < gdImageSY(src)) {
- backclip = 1;
-
- gdImageGetClip(src, &backup_clipx1, &backup_clipy1,
- &backup_clipx2, &backup_clipy2);
-
- gdImageSetClip(src, src_region->x, src_region->y,
- src_region->x + src_region->width - 1,
- src_region->y + src_region->height - 1);
- }
-
- if (!gdTransformAffineBoundingBox(src_region, affine, &bbox)) {
- if (backclip) {
- gdImageSetClip(src, backup_clipx1, backup_clipy1,
- backup_clipx2, backup_clipy2);
- }
- gdImageSetInterpolationMethod(src, interpolation_id_bak);
- return GD_FALSE;
- }
-
- end_x = bbox.width + abs(bbox.x);
- end_y = bbox.height + abs(bbox.y);
-
- /* Get inverse affine to let us work with destination -> source */
- if (gdAffineInvert(inv, affine) == GD_FALSE) {
- gdImageSetInterpolationMethod(src, interpolation_id_bak);
- return GD_FALSE;
- }
-
- src_offset_x = src_region->x;
- src_offset_y = src_region->y;
-
- if (dst->alphaBlendingFlag) {
- for (y = bbox.y; y <= end_y; y++) {
- pt.y = y + 0.5;
- for (x = bbox.x; x <= end_x; x++) {
- pt.x = x + 0.5;
- gdAffineApplyToPointF(&src_pt, &pt, inv);
- if (floor(src_offset_x + src_pt.x) < c1x
- || floor(src_offset_x + src_pt.x) > c2x
- || floor(src_offset_y + src_pt.y) < c1y
- || floor(src_offset_y + src_pt.y) > c2y) {
- continue;
- }
- gdImageSetPixel(dst, dst_x + x, dst_y + y, getPixelInterpolated(src, (int)(src_offset_x + src_pt.x), (int)(src_offset_y + src_pt.y), 0));
- }
- }
- } else {
- for (y = bbox.y; y <= end_y; y++) {
- unsigned char *dst_p = NULL;
- int *tdst_p = NULL;
-
- pt.y = y + 0.5;
- if ((dst_y + y) < 0 || ((dst_y + y) > gdImageSY(dst) -1)) {
- continue;
- }
- if (dst->trueColor) {
- tdst_p = dst->tpixels[dst_y + y] + dst_x;
- } else {
- dst_p = dst->pixels[dst_y + y] + dst_x;
- }
-
- for (x = bbox.x; x <= end_x; x++) {
- pt.x = x + 0.5;
- gdAffineApplyToPointF(&src_pt, &pt, inv);
-
- if ((dst_x + x) < 0 || (dst_x + x) > (gdImageSX(dst) - 1)) {
- break;
- }
- if (floor(src_offset_x + src_pt.x) < c1x
- || floor(src_offset_x + src_pt.x) > c2x
- || floor(src_offset_y + src_pt.y) < c1y
- || floor(src_offset_y + src_pt.y) > c2y) {
- continue;
- }
- if (dst->trueColor) {
- *(tdst_p + dst_x + x) = getPixelInterpolated(src, (int)(src_offset_x + src_pt.x), (int)(src_offset_y + src_pt.y), -1);
- } else {
- *(dst_p + dst_x + x) = getPixelRgbInterpolated(dst, getPixelInterpolated(src, (int)(src_offset_x + src_pt.x), (int)(src_offset_y + src_pt.y), -1));
- }
- }
- }
- }
-
- /* Restore clip if required */
- if (backclip) {
- gdImageSetClip(src, backup_clipx1, backup_clipy1,
- backup_clipx2, backup_clipy2);
- }
-
- gdImageSetInterpolationMethod(src, interpolation_id_bak);
- return GD_TRUE;
-}
-
-/**
- * Function: gdTransformAffineBoundingBox
- * Returns the bounding box of an affine transformation applied to a
- * rectangular area <gdRect>
- *
- * Parameters:
- * src - Rectangular source area for the affine transformation
- * affine - the affine transformation
- * bbox - the resulting bounding box
- *
- * Returns:
- * GD_TRUE if the affine is rectilinear or GD_FALSE
- */
-BGD_DECLARE(int) gdTransformAffineBoundingBox(gdRectPtr src, const double affine[6], gdRectPtr bbox)
-{
- gdPointF extent[4], min, max, point;
- int i;
-
- extent[0].x=0.0;
- extent[0].y=0.0;
- extent[1].x=(double) src->width;
- extent[1].y=0.0;
- extent[2].x=(double) src->width;
- extent[2].y=(double) src->height;
- extent[3].x=0.0;
- extent[3].y=(double) src->height;
-
- for (i=0; i < 4; i++) {
- point=extent[i];
- if (gdAffineApplyToPointF(&extent[i], &point, affine) != GD_TRUE) {
- return GD_FALSE;
- }
- }
- min=extent[0];
- max=extent[0];
-
- for (i=1; i < 4; i++) {
- if (min.x > extent[i].x)
- min.x=extent[i].x;
- if (min.y > extent[i].y)
- min.y=extent[i].y;
- if (max.x < extent[i].x)
- max.x=extent[i].x;
- if (max.y < extent[i].y)
- max.y=extent[i].y;
- }
- bbox->x = (int) min.x;
- bbox->y = (int) min.y;
- bbox->width = (int) ceil((max.x - min.x));
- bbox->height = (int) ceil(max.y - min.y);
-
- return GD_TRUE;
-}
-
-/**
- * Group: Interpolation Method
- */
-
-/**
- * Function: gdImageSetInterpolationMethod
- *
- * Set the interpolation method for subsequent operations
- *
- * Parameters:
- * im - The image.
- * id - The interpolation method.
- *
- * Returns:
- * Non-zero on success, zero on failure.
- *
- * See also:
- * - <gdInterpolationMethod>
- * - <gdImageGetInterpolationMethod>
- */
-BGD_DECLARE(int) gdImageSetInterpolationMethod(gdImagePtr im, gdInterpolationMethod id)
-{
- if (im == NULL || (uintmax_t)id > GD_METHOD_COUNT) {
- return 0;
- }
-
- switch (id) {
- case GD_NEAREST_NEIGHBOUR:
- case GD_WEIGHTED4:
- im->interpolation = NULL;
- break;
-
- /* generic versions*/
- /* GD_BILINEAR_FIXED and GD_BICUBIC_FIXED are kept for BC reasons */
- case GD_BILINEAR_FIXED:
- case GD_LINEAR:
- im->interpolation = filter_linear;
- break;
- case GD_BELL:
- im->interpolation = filter_bell;
- break;
- case GD_BESSEL:
- im->interpolation = filter_bessel;
- break;
- case GD_BICUBIC_FIXED:
- case GD_BICUBIC:
- im->interpolation = filter_bicubic;
- break;
- case GD_BLACKMAN:
- im->interpolation = filter_blackman;
- break;
- case GD_BOX:
- im->interpolation = filter_box;
- break;
- case GD_BSPLINE:
- im->interpolation = filter_bspline;
- break;
- case GD_CATMULLROM:
- im->interpolation = filter_catmullrom;
- break;
- case GD_GAUSSIAN:
- im->interpolation = filter_gaussian;
- break;
- case GD_GENERALIZED_CUBIC:
- im->interpolation = filter_generalized_cubic;
- break;
- case GD_HERMITE:
- im->interpolation = filter_hermite;
- break;
- case GD_HAMMING:
- im->interpolation = filter_hamming;
- break;
- case GD_HANNING:
- im->interpolation = filter_hanning;
- break;
- case GD_MITCHELL:
- im->interpolation = filter_mitchell;
- break;
- case GD_POWER:
- im->interpolation = filter_power;
- break;
- case GD_QUADRATIC:
- im->interpolation = filter_quadratic;
- break;
- case GD_SINC:
- im->interpolation = filter_sinc;
- break;
- case GD_TRIANGLE:
- im->interpolation = filter_triangle;
- break;
- case GD_DEFAULT:
- id = GD_LINEAR;
- im->interpolation = filter_linear;
- break;
- default:
- return 0;
- }
- im->interpolation_id = id;
- return 1;
-}
-
-
-/**
- * Function: gdImageGetInterpolationMethod
- *
- * Get the current interpolation method
- *
- * This is here so that the value can be read via a language or VM with an FFI
- * but no (portable) way to extract the value from the struct.
- *
- * Parameters:
- * im - The image.
- *
- * Returns:
- * The current interpolation method.
- *
- * See also:
- * - <gdInterpolationMethod>
- * - <gdImageSetInterpolationMethod>
- */
-BGD_DECLARE(gdInterpolationMethod) gdImageGetInterpolationMethod(gdImagePtr im)
-{
- return im->interpolation_id;
-}
-
-#ifdef _MSC_VER
-# pragma optimize("", on)
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io.c b/Build/source/libs/gd/libgd-src/src/gd_io.c
deleted file mode 100644
index 94032771efc..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * io.c
- *
- * Implements the simple I/O 'helper' routines.
- *
- * Not really essential, but these routines were used extensively in GD,
- * so they were moved here. They also make IOCtx calls look better...
- *
- * Written (or, at least, moved) 1999, Philip Warner.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define IO_DBG(s) (s) */
-#define IO_DBG(s)
-
-#define GD_IO_EOF_CHK(r) \
- if(r == EOF) { \
- return 0; \
- }
-
-void gdPutC(const unsigned char c, gdIOCtx *ctx)
-{
- (ctx->putC)(ctx, c);
-}
-
-void gdPutWord (int w, gdIOCtx *ctx)
-{
- IO_DBG(printf("Putting word...\n"));
- (ctx->putC)(ctx, (unsigned char)(w >> 8));
- (ctx->putC)(ctx, (unsigned char)(w & 0xFF));
- IO_DBG(printf("put.\n"));
-}
-
-void gdPutInt (int w, gdIOCtx *ctx)
-{
- IO_DBG(printf("Putting int...\n"));
- (ctx->putC)(ctx, (unsigned char) (w >> 24));
- (ctx->putC)(ctx, (unsigned char) ((w >> 16) & 0xFF));
- (ctx->putC)(ctx, (unsigned char) ((w >> 8) & 0xFF));
- (ctx->putC)(ctx, (unsigned char) (w & 0xFF));
- IO_DBG(printf("put.\n"));
-}
-
-int gdGetC(gdIOCtx *ctx)
-{
- return ((ctx->getC)(ctx));
-}
-
-int gdGetByte(int *result, gdIOCtx *ctx)
-{
- int r;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result = r;
-
- return 1;
-}
-
-int gdGetWord(int *result, gdIOCtx *ctx)
-{
- int r;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result = r << 8;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result += r;
-
- return 1;
-}
-
-int gdGetWordLSB(signed short int *result, gdIOCtx *ctx)
-{
- int high = 0, low = 0;
- low = (ctx->getC) (ctx);
- if (low == EOF) {
- return 0;
- }
-
- high = (ctx->getC) (ctx);
- if (high == EOF) {
- return 0;
- }
-
- if (result) {
- *result = (high << 8) | low;
- }
-
- return 1;
-}
-
-int gdGetInt(int *result, gdIOCtx *ctx)
-{
- unsigned int r;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result = r << 24;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result += r << 16;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result += r << 8;
-
- r = (ctx->getC)(ctx);
- if(r == EOF) {
- return 0;
- }
-
- *result += r;
-
- return 1;
-}
-
-int gdGetIntLSB(signed int *result, gdIOCtx *ctx)
-{
- unsigned int c;
- unsigned int r = 0;
-
- c = (ctx->getC) (ctx);
- if (c == EOF) {
- return 0;
- }
- r |= (c << 24);
- r >>= 8;
-
- c = (ctx->getC) (ctx);
- if (c == EOF) {
- return 0;
- }
- r |= (c << 24);
- r >>= 8;
-
- c = (ctx->getC) (ctx);
- if (c == EOF) {
- return 0;
- }
- r |= (c << 24);
- r >>= 8;
-
- c = (ctx->getC) (ctx);
- if (c == EOF) {
- return 0;
- }
- r |= (c << 24);
-
- if (result) {
- *result = (signed int)r;
- }
-
- return 1;
-}
-
-int gdPutBuf(const void *buf, int size, gdIOCtx *ctx)
-{
- IO_DBG(printf("Putting buf...\n"));
- return (ctx->putBuf)(ctx, buf, size);
- IO_DBG(printf("put.\n"));
-}
-
-int gdGetBuf(void *buf, int size, gdIOCtx *ctx)
-{
- return (ctx->getBuf)(ctx, buf, size);
-}
-
-int gdSeek(gdIOCtx *ctx, const int pos)
-{
- IO_DBG(printf("Seeking...\n"));
- return ((ctx->seek)(ctx, pos));
- IO_DBG(printf("Done.\n"));
-}
-
-long gdTell(gdIOCtx *ctx)
-{
- IO_DBG(printf("Telling...\n"));
- return ((ctx->tell)(ctx));
- IO_DBG(printf("told.\n"));
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io.h b/Build/source/libs/gd/libgd-src/src/gd_io.h
deleted file mode 100644
index df37fccb8d5..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io.h
+++ /dev/null
@@ -1,93 +0,0 @@
-#ifndef GD_IO_H
-#define GD_IO_H 1
-
-#include <stdio.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- Group: Types
-
- typedef: gdIOCtx
-
- gdIOCtx structures hold function pointers for doing image IO.
-
- Most of the gd functions that read and write files, such as
- <gdImagePng> also have variants that accept a <gdIOCtx> structure;
- see <gdImagePngCtx> and <gdImageCreateFromJpegCtx>.
-
- Those who wish to provide their own custom routines to read and
- write images can populate a gdIOCtx structure with functions of
- their own devising to to read and write data. For image reading, the
- only mandatory functions are getC and getBuf, which must return the
- number of characters actually read, or a negative value on error or
- EOF. These functions must read the number of characters requested
- unless at the end of the file.
-
- For image writing, the only mandatory functions are putC and putBuf,
- which return the number of characters written; these functions must
- write the number of characters requested except in the event of an
- error. The seek and tell functions are only required in conjunction
- with the gd2 file format, which supports quick loading of partial
- images. The gd_free function will not be invoked when calling the
- standard Ctx functions; it is an implementation convenience when
- adding new data types to gd. For examples, see gd_png.c, gd_gd2.c,
- gd_jpeg.c, etc., all of which rely on gdIOCtx to implement the
- standard image read and write functions.
-
- > typedef struct gdIOCtx
- > {
- > int (*getC) (struct gdIOCtx *);
- > int (*getBuf) (struct gdIOCtx *, void *, int wanted);
- >
- > void (*putC) (struct gdIOCtx *, int);
- > int (*putBuf) (struct gdIOCtx *, const void *, int wanted);
- >
- > // seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek!
- > int (*seek) (struct gdIOCtx *, const int);
- > long (*tell) (struct gdIOCtx *);
- >
- > void (*gd_free) (struct gdIOCtx *);
- > } gdIOCtx;
-
-
-
-
- */
-typedef struct gdIOCtx {
- int (*getC)(struct gdIOCtx *);
- int (*getBuf)(struct gdIOCtx *, void *, int);
- void (*putC)(struct gdIOCtx *, int);
- int (*putBuf)(struct gdIOCtx *, const void *, int);
- /* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! */
- int (*seek)(struct gdIOCtx *, const int);
- long (*tell)(struct gdIOCtx *);
- void (*gd_free)(struct gdIOCtx *);
- void *data;
-} gdIOCtx;
-
-typedef struct gdIOCtx *gdIOCtxPtr;
-
-void gdPutC(const unsigned char c, gdIOCtx *ctx);
-int gdPutBuf(const void *, int, gdIOCtx *);
-void gdPutWord(int w, gdIOCtx *ctx);
-void gdPutInt(int w, gdIOCtx *ctx);
-
-int gdGetC(gdIOCtx *ctx);
-int gdGetBuf(void *, int, gdIOCtx *);
-int gdGetByte(int *result, gdIOCtx *ctx);
-int gdGetWord(int *result, gdIOCtx *ctx);
-int gdGetWordLSB(signed short int *result, gdIOCtx *ctx);
-int gdGetInt(int *result, gdIOCtx *ctx);
-int gdGetIntLSB(signed int *result, gdIOCtx *ctx);
-
-int gdSeek(gdIOCtx *ctx, const int offset);
-long gdTell(gdIOCtx *ctx);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io_dp.c b/Build/source/libs/gd/libgd-src/src/gd_io_dp.c
deleted file mode 100644
index ec259e7a69f..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io_dp.c
+++ /dev/null
@@ -1,431 +0,0 @@
-/*
- * io_dp.c
- *
- * Implements the dynamic pointer interface.
- *
- * Based on GD.pm code by Lincoln Stein for interfacing to libgd.
- * Added support for reading as well as support for 'tell' and 'seek'.
- *
- * As with all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * gdDPExtractData is the exception to this: it will return the pointer to
- * the internal data, and reset the internal storage.
- *
- * Written/Modified 1999, Philip Warner.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* this is used for creating images in main memory */
-typedef struct dpStruct {
- void *data;
- int logicalSize;
- int realSize;
- int dataGood;
- int pos;
- int freeOK;
-}
-dynamicPtr;
-
-typedef struct dpIOCtx {
- gdIOCtx ctx;
- dynamicPtr *dp;
-}
-dpIOCtx;
-
-typedef struct dpIOCtx *dpIOCtxPtr;
-
-/* these functions operate on in-memory dynamic pointers */
-static int allocDynamic(dynamicPtr *dp, int initialSize, void *data);
-static int appendDynamic(dynamicPtr *dp, const void *src, int size);
-static int gdReallocDynamic(dynamicPtr *dp, int required);
-static int trimDynamic(dynamicPtr *dp);
-static void gdFreeDynamicCtx(struct gdIOCtx *ctx);
-static dynamicPtr *newDynamic(int initialSize, void *data, int freeOKFlag);
-
-static int dynamicPutbuf(struct gdIOCtx *, const void *, int);
-static void dynamicPutchar(struct gdIOCtx *, int a);
-
-static int dynamicGetbuf(gdIOCtxPtr ctx, void *buf, int len);
-static int dynamicGetchar(gdIOCtxPtr ctx);
-
-static int dynamicSeek(struct gdIOCtx *, const int);
-static long dynamicTell(struct gdIOCtx *);
-
-/*
- Function: gdNewDynamicCtx
-
- Return data as a dynamic pointer.
-*/
-BGD_DECLARE(gdIOCtx *) gdNewDynamicCtx(int initialSize, void *data)
-{
- /* 2.0.23: Phil Moore: 'return' keyword was missing! */
- return gdNewDynamicCtxEx(initialSize, data, 1);
-}
-
-/*
- Function: gdNewDynamicCtxEx
-*/
-BGD_DECLARE(gdIOCtx *) gdNewDynamicCtxEx(int initialSize, void *data, int freeOKFlag)
-{
- dpIOCtx *ctx;
- dynamicPtr *dp;
-
- ctx = (dpIOCtx *)gdMalloc(sizeof (dpIOCtx));
- if(ctx == NULL) {
- return NULL;
- }
-
- dp = newDynamic(initialSize, data, freeOKFlag);
- if(!dp) {
- gdFree (ctx);
- return NULL;
- };
-
- ctx->dp = dp;
-
- ctx->ctx.getC = dynamicGetchar;
- ctx->ctx.putC = dynamicPutchar;
-
- ctx->ctx.getBuf = dynamicGetbuf;
- ctx->ctx.putBuf = dynamicPutbuf;
-
- ctx->ctx.seek = dynamicSeek;
- ctx->ctx.tell = dynamicTell;
-
- ctx->ctx.gd_free = gdFreeDynamicCtx;
-
- return (gdIOCtx *)ctx;
-}
-
-/*
- Function: gdDPExtractData
-*/
-BGD_DECLARE(void *) gdDPExtractData (struct gdIOCtx *ctx, int *size)
-{
- dynamicPtr *dp;
- dpIOCtx *dctx;
- void *data;
-
- dctx = (dpIOCtx *)ctx;
- dp = dctx->dp;
-
- /* clean up the data block and return it */
- if(dp->dataGood) {
- trimDynamic(dp);
- *size = dp->logicalSize;
- data = dp->data;
- } else {
- *size = 0;
- data = NULL;
- /* 2.0.21: never free memory we don't own */
- if((dp->data != NULL) && (dp->freeOK)) {
- gdFree(dp->data);
- }
- }
-
- dp->data = NULL;
- dp->realSize = 0;
- dp->logicalSize = 0;
-
- return data;
-}
-
-static void gdFreeDynamicCtx(struct gdIOCtx *ctx)
-{
- dynamicPtr *dp;
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *)ctx;
- dp = dctx->dp;
-
- gdFree(ctx);
-
- /* clean up the data block and return it */
- /* 2.0.21: never free memory we don't own */
- if((dp->data != NULL) && (dp->freeOK)) {
- gdFree(dp->data);
- dp->data = NULL;
- }
-
- dp->realSize = 0;
- dp->logicalSize = 0;
-
- gdFree(dp);
-}
-
-static long dynamicTell(struct gdIOCtx *ctx)
-{
- dpIOCtx *dctx;
-
- dctx = (dpIOCtx *)ctx;
- return (dctx->dp->pos);
-}
-
-static int dynamicSeek(struct gdIOCtx *ctx, const int pos)
-{
- int bytesNeeded;
- dynamicPtr *dp;
- dpIOCtx *dctx;
-
- if (pos < 0) {
- return FALSE;
- }
- dctx = (dpIOCtx *)ctx;
- dp = dctx->dp;
-
- if(!dp->dataGood) {
- return FALSE;
- }
-
- bytesNeeded = pos;
- if(bytesNeeded > dp->realSize) {
- /* 2.0.21 */
- if(!dp->freeOK) {
- return FALSE;
- }
-
- if(overflow2(dp->realSize, 2)) {
- return FALSE;
- }
-
- if(!gdReallocDynamic(dp, dp->realSize * 2)) {
- dp->dataGood = FALSE;
- return FALSE;
- }
- }
-
- /* if we get here, we can be sure that we have enough bytes
- * to copy safely */
-
- /* Extend the logical size if we seek beyond EOF. */
- if(pos > dp->logicalSize) {
- dp->logicalSize = pos;
- };
-
- dp->pos = pos;
-
- return TRUE;
-}
-
-/* return data as a dynamic pointer */
-static dynamicPtr *newDynamic(int initialSize, void *data, int freeOKFlag)
-{
- dynamicPtr *dp;
-
- dp = (dynamicPtr *) gdMalloc(sizeof (dynamicPtr));
- if(dp == NULL) {
- return NULL;
- }
-
- if(!allocDynamic(dp, initialSize, data)) {
- gdFree(dp);
- return NULL;
- }
-
- dp->pos = 0;
- dp->freeOK = freeOKFlag;
-
- return dp;
-}
-
-static int dynamicPutbuf(struct gdIOCtx *ctx, const void *buf, int size)
-{
- dpIOCtx *dctx;
- dctx = (dpIOCtx *)ctx;
-
- appendDynamic(dctx->dp, buf, size);
-
- if(dctx->dp->dataGood) {
- return size;
- } else {
- return -1;
- };
-}
-
-static void dynamicPutchar(struct gdIOCtx *ctx, int a)
-{
- unsigned char b;
- dpIOCtxPtr dctx;
-
- b = a;
- dctx = (dpIOCtxPtr) ctx;
-
- appendDynamic(dctx->dp, &b, 1);
-}
-
-/* returns the number of bytes actually read; 0 on EOF and error */
-static int dynamicGetbuf(gdIOCtxPtr ctx, void *buf, int len)
-{
- int rlen, remain;
- dpIOCtxPtr dctx;
- dynamicPtr *dp;
-
- dctx = (dpIOCtxPtr) ctx;
- dp = dctx->dp;
-
- if (dp->pos < 0 || dp->pos >= dp->realSize) {
- return 0;
- }
-
- remain = dp->logicalSize - dp->pos;
- if(remain >= len) {
- rlen = len;
- } else {
- if(remain <= 0) {
- return 0;
- }
-
- rlen = remain;
- }
-
- if (dp->pos + rlen > dp->realSize) {
- rlen = dp->realSize - dp->pos;
- }
-
- if (rlen < 0) {
- return 0;
- }
-
- memcpy(buf, (void *) ((char *)dp->data + dp->pos), rlen);
- dp->pos += rlen;
-
- return rlen;
-}
-
-static int dynamicGetchar(gdIOCtxPtr ctx)
-{
- unsigned char b;
- int rv;
-
- rv = dynamicGetbuf(ctx, &b, 1);
-
- if(rv != 1) {
- return EOF;
- } else {
- return b; /* (b & 0xff); */
- }
-}
-
-/**********************************************************************
- * InitDynamic - Return a dynamically resizable void*
- **********************************************************************/
-static int allocDynamic(dynamicPtr *dp, int initialSize, void *data)
-{
- if(data == NULL) {
- dp->logicalSize = 0;
- dp->dataGood = FALSE;
- dp->data = gdMalloc(initialSize);
- } else {
- dp->logicalSize = initialSize;
- dp->dataGood = TRUE;
- dp->data = data;
- }
-
- if(dp->data != NULL) {
- dp->realSize = initialSize;
- dp->dataGood = TRUE;
- dp->pos = 0;
- return TRUE;
- } else {
- dp->realSize = 0;
- return FALSE;
- }
-}
-
-/* append bytes to the end of a dynamic pointer */
-static int appendDynamic(dynamicPtr * dp, const void *src, int size)
-{
- int bytesNeeded;
- char *tmp;
-
- if(!dp->dataGood) {
- return FALSE;
- }
-
- /* bytesNeeded = dp->logicalSize + size; */
- bytesNeeded = dp->pos + size;
-
- if(bytesNeeded > dp->realSize) {
- /* 2.0.21 */
- if(!dp->freeOK) {
- return FALSE;
- }
-
- if(overflow2(dp->realSize, 2)) {
- return FALSE;
- }
-
- if(!gdReallocDynamic(dp, bytesNeeded * 2)) {
- dp->dataGood = FALSE;
- return FALSE;
- }
- }
-
- /* if we get here, we can be sure that we have enough bytes
- * to copy safely */
-
- /*printf("Mem OK Size: %d, Pos: %d\n", dp->realSize, dp->pos); */
-
- tmp = (char *)dp->data;
- memcpy ((void *)(tmp + (dp->pos)), src, size);
- dp->pos += size;
-
- if(dp->pos > dp->logicalSize) {
- dp->logicalSize = dp->pos;
- };
-
- return TRUE;
-}
-
-/* grow (or shrink) dynamic pointer */
-static int gdReallocDynamic(dynamicPtr *dp, int required)
-{
- void *newPtr;
-
- /* First try gdRealloc(). If that doesn't work, make a new
- * memory block and copy. */
- if((newPtr = gdRealloc(dp->data, required))) {
- dp->realSize = required;
- dp->data = newPtr;
- return TRUE;
- }
-
- /* create a new pointer */
- newPtr = gdMalloc(required);
- if(!newPtr) {
- dp->dataGood = FALSE;
- return FALSE;
- }
-
- /* copy the old data into it */
- memcpy(newPtr, dp->data, dp->logicalSize);
- gdFree(dp->data);
- dp->data = newPtr;
-
- dp->realSize = required;
- return TRUE;
-}
-
-/* trim pointer so that its real and logical sizes match */
-static int trimDynamic(dynamicPtr *dp)
-{
- /* 2.0.21: we don't reallocate memory we don't own */
- if(!dp->freeOK) {
- return TRUE;
- }
-
- return gdReallocDynamic(dp, dp->logicalSize);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io_file.c b/Build/source/libs/gd/libgd-src/src/gd_io_file.c
deleted file mode 100644
index 40c4f5921b6..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io_file.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * io_file.c
- *
- * Implements the file interface.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * Most functions are just 'wrappers' for standard file functions.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-/* For platforms with incomplete ANSI defines. Fortunately,
- * SEEK_SET is defined to be zero by the standard. */
-
-#ifndef SEEK_SET
-# define SEEK_SET 0
-#endif /* SEEK_SET */
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* this is used for creating images in main memory */
-
-typedef struct fileIOCtx {
- gdIOCtx ctx;
- FILE *f;
-}
-fileIOCtx;
-
-gdIOCtx *newFileCtx(FILE *f);
-
-static int fileGetbuf(gdIOCtx *, void *, int);
-static int filePutbuf(gdIOCtx *, const void *, int);
-static void filePutchar(gdIOCtx *, int);
-static int fileGetchar(gdIOCtx *ctx);
-
-static int fileSeek(struct gdIOCtx *, const int);
-static long fileTell(struct gdIOCtx *);
-static void gdFreeFileCtx(gdIOCtx *ctx);
-
-/*
- Function: gdNewFileCtx
-
- Return data as a dynamic pointer.
-*/
-BGD_DECLARE(gdIOCtx *) gdNewFileCtx(FILE *f)
-{
- fileIOCtx *ctx;
-
- if (f == NULL) return NULL;
- ctx = (fileIOCtx *)gdMalloc(sizeof(fileIOCtx));
- if(ctx == NULL) {
- return NULL;
- }
-
- ctx->f = f;
-
- ctx->ctx.getC = fileGetchar;
- ctx->ctx.putC = filePutchar;
-
- ctx->ctx.getBuf = fileGetbuf;
- ctx->ctx.putBuf = filePutbuf;
-
- ctx->ctx.tell = fileTell;
- ctx->ctx.seek = fileSeek;
-
- ctx->ctx.gd_free = gdFreeFileCtx;
-
- return (gdIOCtx *)ctx;
-}
-
-static void gdFreeFileCtx(gdIOCtx *ctx)
-{
- gdFree(ctx);
-}
-
-
-static int filePutbuf(gdIOCtx *ctx, const void *buf, int size)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *)ctx;
-
- return fwrite(buf, 1, size, fctx->f);
-}
-
-static int fileGetbuf(gdIOCtx *ctx, void *buf, int size)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *)ctx;
-
- return (fread(buf, 1, size, fctx->f));
-}
-
-static void filePutchar(gdIOCtx *ctx, int a)
-{
- unsigned char b;
- fileIOCtx *fctx;
- fctx = (fileIOCtx *)ctx;
-
- b = a;
-
- putc(b, fctx->f);
-}
-
-static int fileGetchar(gdIOCtx *ctx)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *)ctx;
-
- return getc(fctx->f);
-}
-
-static int fileSeek(struct gdIOCtx *ctx, const int pos)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *)ctx;
- return (fseek(fctx->f, pos, SEEK_SET) == 0);
-}
-
-static long fileTell (struct gdIOCtx *ctx)
-{
- fileIOCtx *fctx;
- fctx = (fileIOCtx *)ctx;
-
- return ftell(fctx->f);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io_ss.c b/Build/source/libs/gd/libgd-src/src/gd_io_ss.c
deleted file mode 100644
index abff844affa..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io_ss.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * io_ss.c
- *
- * Implements the Source/Sink interface.
- *
- * As will all I/O modules, most functions are for local use only (called
- * via function pointers in the I/O context).
- *
- * The Source/Sink model is the primary 'user' interface for alternate data
- * sources; the IOCtx interface is intended (at least in version 1.5) to be
- * used internally until it settles down a bit.
- *
- * This module just layers the Source/Sink interface on top of the IOCtx; no
- * support is provided for tell/seek, so GD2 writing is not possible, and
- * retrieving parts of GD2 files is also not possible.
- *
- * A new SS context does not need to be created with both a Source and a Sink.
- *
- * Written/Modified 1999, Philip Warner.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-/* this is used for creating images in main memory */
-
-typedef struct ssIOCtx {
- gdIOCtx ctx;
- gdSourcePtr src;
- gdSinkPtr snk;
-}
-ssIOCtx;
-
-typedef struct ssIOCtx *ssIOCtxPtr;
-
-static int sourceGetbuf(gdIOCtx *, void *, int);
-static int sourceGetchar(gdIOCtx *ctx);
-static int sinkPutbuf(gdIOCtx *ctx, const void *buf, int size);
-static void sinkPutchar(gdIOCtx *ctx, int a);
-static void gdFreeSsCtx(gdIOCtx *ctx);
-
-/*
- Function: gdNewSSCtx
-
- Return data as a dynamic pointer.
-*/
-BGD_DECLARE(gdIOCtx *) gdNewSSCtx(gdSourcePtr src, gdSinkPtr snk)
-{
- ssIOCtxPtr ctx;
-
- ctx = (ssIOCtxPtr)gdMalloc(sizeof (ssIOCtx));
- if (ctx == NULL) {
- return NULL;
- }
-
- ctx->src = src;
- ctx->snk = snk;
-
- ctx->ctx.getC = sourceGetchar;
- ctx->ctx.getBuf = sourceGetbuf;
-
- ctx->ctx.putC = sinkPutchar;
- ctx->ctx.putBuf = sinkPutbuf;
-
- ctx->ctx.tell = NULL;
- ctx->ctx.seek = NULL;
-
- ctx->ctx.gd_free = gdFreeSsCtx;
-
- return (gdIOCtx *)ctx;
-}
-
-static void gdFreeSsCtx(gdIOCtx *ctx)
-{
- gdFree(ctx);
-}
-
-static int sourceGetbuf(gdIOCtx *ctx, void *buf, int size)
-{
- ssIOCtx *lctx;
- int res;
-
- lctx = (ssIOCtx *)ctx;
-
- res = ((lctx->src->source)(lctx->src->context, buf, size));
-
- /*
- * Translate the return values from the Source object:
- * 0 is EOF, -1 is error
- */
-
- if (res == 0) {
- return 0;
- } else if (res < 0) {
- return 0;
- } else {
- return res;
- }
-}
-
-static int sourceGetchar(gdIOCtx *ctx)
-{
- int res;
- unsigned char buf;
-
- res = sourceGetbuf(ctx, &buf, 1);
-
- if (res == 1) {
- return buf;
- } else {
- return EOF;
- }
-}
-
-static int sinkPutbuf(gdIOCtx *ctx, const void *buf, int size)
-{
- ssIOCtxPtr lctx;
- int res;
-
- lctx = (ssIOCtx *)ctx;
-
- res = (lctx->snk->sink)(lctx->snk->context, buf, size);
-
- if (res <= 0) {
- return 0;
- } else {
- return res;
- }
-}
-
-static void sinkPutchar(gdIOCtx *ctx, int a)
-{
- unsigned char b;
-
- b = a;
-
- sinkPutbuf(ctx, &b, 1);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io_stream.cxx b/Build/source/libs/gd/libgd-src/src/gd_io_stream.cxx
deleted file mode 100644
index 0d64c72c2b7..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io_stream.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/* *****************************************************************************
-** Initial file written and documented by:
-** Kevin Shepherd <kshepherd@php.net> December 2007
-** of Scarlet Line http://www.scarletline.com/
-*******************************************************************************/
-/** \file gd_io_stream.cxx
- \brief Implementation of the methods of the gdIOCtx std stream specialization.
-
- Implements the derived specializations of gdIOCtx.
- These methods are not called by users of libgd, they
- are internal implementation.
- Note that half of the below methods are trivial stubs,
- as an input stream has no need of output methods, and vice-versa.
-*/
-#ifdef __cplusplus
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd_io_stream.h"
-
-/** Read into buffer from stream
- Return the number of bytes successfully read.
- If an error occurs, or the end-of-file is reached, the return value
- is a short byte count (or zero).
-*/
-int istreamIOCtx::Getbuf (struct gdIOCtx * ctx, void * buf, int size)
- {
- stream_type * _str = ( (istreamIOCtx * ) ctx )->_M_stream;
- _str->read((char * )buf, size);
- return _str->gcount();
- }
-/** Write from buffer to stream
- Return the number of bytes successfully written.
- If an error occurs, or the end-of-file is reached, the return value
- is a short byte count (or zero).
-*/
-int istreamIOCtx::Putbuf (struct gdIOCtx * , const void * , int )
- {
- return 0;
- }
-
-/** Reads the next character from stream and returns it as an
- unsigned char cast to an int, or EOF on end of file or error.
-*/
-int istreamIOCtx::Getchar (struct gdIOCtx * ctx)
- {
- stream_type * _str = ( (istreamIOCtx * ) ctx )->_M_stream;
- return _str->get();
- }
-/** Write the character to stream
- Character is cast to unsigned char before writing
-*/
-void istreamIOCtx::Putchar (struct gdIOCtx * , int )
- {
- }
-
-/** Seek to position offset from the beginning of the stream
- must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek!
-*/
-int istreamIOCtx::Seek (struct gdIOCtx * ctx, const int pos)
- {
- stream_type * _str = ( (istreamIOCtx * ) ctx )->_M_stream;
- _str->seekg(pos);
- return !_str->fail();
- }
-/** Obtains the current value of the stream position.
- Returns -1 on error.
-*/
-long istreamIOCtx::Tell (struct gdIOCtx * ctx)
- {
- stream_type * _str = ( (istreamIOCtx * ) ctx )->_M_stream;
- return _str->tellg();
- }
-/** Deallocate the context
-*/
-void istreamIOCtx::FreeCtx (struct gdIOCtx * ctx)
- {
- delete (istreamIOCtx * )ctx;
- }
-
-/** Read into buffer from stream
- Return the number of bytes successfully read.
- If an error occurs, or the end-of-file is reached, the return value
- is a short byte count (or zero).
-*/
-int ostreamIOCtx::Getbuf (struct gdIOCtx * , void * , int )
- {
- return 0;
- }
-/** Write from buffer to stream
- Return the number of bytes successfully written.
- If an error occurs, or the end-of-file is reached, the return value
- is a short byte count (or zero).
-*/
-int ostreamIOCtx::Putbuf (struct gdIOCtx * ctx, const void * buf, int size)
- {
- stream_type * _str = ( (ostreamIOCtx * ) ctx )->_M_stream;
- _str->write((const char * )buf, size);
- return _str->bad()?0:size;
- }
-
-/** Reads the next character from stream and returns it as an
- unsigned char cast to an int, or EOF on end of file or error.
-*/
-int ostreamIOCtx::Getchar (struct gdIOCtx * )
- {
- return EOF;
- }
-/** Write the character to stream
- Character is cast to unsigned char before writing
-*/
-void ostreamIOCtx::Putchar (struct gdIOCtx * ctx, int c)
- {
- stream_type * _str = ( (ostreamIOCtx * ) ctx )->_M_stream;
- _str->put((char)c);
- }
-
-/** Seek to position offset from the beginning of the stream
- must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek!
-*/
-int ostreamIOCtx::Seek (struct gdIOCtx * ctx, const int pos)
- {
- stream_type * _str = ( (ostreamIOCtx * ) ctx )->_M_stream;
- _str->seekp(pos);
- return !_str->fail();
- }
-/** Obtains the current value of the stream position.
- Returns -1 on error.
-*/
-long ostreamIOCtx::Tell (struct gdIOCtx * ctx)
- {
- stream_type * _str = ( (ostreamIOCtx * ) ctx )->_M_stream;
- return _str->tellp();
- }
-/** Deallocate the context
-*/
-void ostreamIOCtx::FreeCtx (struct gdIOCtx * ctx)
- {
- delete (ostreamIOCtx * )ctx;
- }
-
-#endif /* __cplusplus */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_io_stream.h b/Build/source/libs/gd/libgd-src/src/gd_io_stream.h
deleted file mode 100644
index dd76d7786a0..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_io_stream.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/* *****************************************************************************
-** Initial file written and documented by:
-** Kevin Shepherd <kshepherd@php.net> December 2007
-** of Scarlet Line http://www.scarletline.com/
-*******************************************************************************/
-/** \file gd_io_stream.h
- \brief C++ standard library iostream specializations of gdIOCtx.
-
- Note that all of the methods defined in this header are internal to the
- libgd library, except for the constructors.
- Only the constructors are needed by a user of the libgd API.
- This file does not use or need gdpp.h, but if GD::Image is
- used, then C++ coding becomes even simpler, and the classes below
- become entirely hidden implementation details.
- Example usage, convert png to gif:
- #include <fstream>
- #include "gd_io_stream.h"
- std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
- if (in.good())
- {
- istreamIOCtx _in_ctx(in);
- gdImagePtr im_in = gdImageCreateFromPngCtx ( & _in_ctx);
- std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
- ostreamIOCtx _out_ctx(out);
- gdImageGifCtx(im_in, & _out_ctx);
- }
- gdImageDestroy(im_in);
-*/
-#ifndef _gd_io_stream_h
-#define _gd_io_stream_h
-#ifdef __cplusplus
-
-#include "gd.h"
-#include <iostream>
-
-/** Standard library input stream specialization of gdIOCtx
-*/
-class BGD_EXPORT_DATA_IMPL istreamIOCtx : public gdIOCtx
-{
-public:
- typedef std::istream stream_type;
- /** Construct an instance of this input stream specialization,
- given an input stream.
- For example:
- std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
- istreamIOCtx in_ctx(in);
- */
- istreamIOCtx(stream_type & __stream) {
- init( & __stream);
- }
-
- static int Getbuf (struct gdIOCtx * ctx, void * buf, int size);
- static int Putbuf (struct gdIOCtx * , const void * , int );
- static void Putchar (struct gdIOCtx * , int );
- static int Getchar (struct gdIOCtx * ctx);
- static int Seek (struct gdIOCtx * ctx, const int pos);
- static long Tell (struct gdIOCtx * ctx);
- static void FreeCtx (struct gdIOCtx * ctx);
-
- void init(stream_type * __stream) {
- getC = Getchar;
- putC = Putchar;
- getBuf = Getbuf;
- putBuf = Putbuf;
- tell = Tell;
- seek = Seek;
- gd_free = FreeCtx;
- _M_stream = __stream;
- }
-private:
- stream_type * _M_stream;
-};
-/** Allocate a new instance of the class
-*/
-inline gdIOCtx * gdNewIstreamCtx (std::istream * __stream)
-{
- return new istreamIOCtx(* __stream);
-}
-
-/** Standard library output stream specialization of gdIOCtx
-*/
-class BGD_EXPORT_DATA_IMPL ostreamIOCtx : public gdIOCtx
-{
-public:
- typedef std::ostream stream_type;
- /** Construct an instance of this output stream specialization,
- given an output stream.
- For example:
- std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
- ostreamIOCtx out_ctx(out);
- */
- ostreamIOCtx(stream_type & __stream) {
- init( & __stream);
- }
-
- static int Getbuf (struct gdIOCtx * , void * , int );
- static int Putbuf (struct gdIOCtx * ctx, const void * buf, int size);
- static int Getchar (struct gdIOCtx * );
- static void Putchar (struct gdIOCtx * ctx, int a);
- static int Seek (struct gdIOCtx * ctx, const int pos);
- static long Tell (struct gdIOCtx * ctx);
- static void FreeCtx (struct gdIOCtx * ctx);
-
- void init(stream_type * __stream) {
- getC = Getchar;
- putC = Putchar;
- getBuf = Getbuf;
- putBuf = Putbuf;
- tell = Tell;
- seek = Seek;
- gd_free = FreeCtx;
- _M_stream = __stream;
- }
-private:
- stream_type * _M_stream;
-};
-/** Allocate a new instance of the class
-*/
-inline gdIOCtx * gdNewOstreamCtx (std::ostream * __stream)
-{
- return new ostreamIOCtx(* __stream);
-}
-
-#endif /* __cplusplus */
-#endif /* _gd_io_stream_h */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_jpeg.c b/Build/source/libs/gd/libgd-src/src/gd_jpeg.c
deleted file mode 100644
index f2dd329aac0..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_jpeg.c
+++ /dev/null
@@ -1,1266 +0,0 @@
-/*
- * gd_jpeg.c: Read and write JPEG (JFIF) format image files using the
- * gd graphics library (http://www.libgd.org).
- *
- * This software is based in part on the work of the Independent JPEG
- * Group. For more information on the IJG JPEG software (and JPEG
- * documentation, etc.), see ftp://ftp.uu.net/graphics/jpeg/.
- *
- * NOTE: IJG 12-bit JSAMPLE (BITS_IN_JSAMPLE == 12) mode is not
- * supported at all on read in gd 2.0, and is not supported on write
- * except for palette images, which is sort of pointless (TBB). Even that
- * has never been tested according to DB.
- *
- * Copyright 2000 Doug Becker, mailto:thebeckers@home.com
- *
- * Modification 4/18/00 TBB: JPEG_DEBUG rather than just DEBUG,
- * so VC++ builds don't spew to standard output, causing
- * major CGI brain damage
- *
- * 2.0.10: more efficient gdImageCreateFromJpegCtx, thanks to
- * Christian Aberger
- */
-
-/**
- * File: JPEG IO
- *
- * Read and write JPEG images.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <setjmp.h>
-#include <limits.h>
-#include <string.h>
-
-#include "gd.h"
-#include "gd_errors.h"
-/* TBB: move this up so include files are not brought in */
-/* JCE: arrange HAVE_LIBJPEG so that it can be set in gd.h */
-#ifdef HAVE_LIBJPEG
-#include "gdhelpers.h"
-
-#if defined(_WIN32) && defined(__MINGW32__)
-# define HAVE_BOOLEAN
-#endif
-
-/* 1.8.1: remove dependency on jinclude.h */
-#include "jpeglib.h"
-#include "jerror.h"
-
-static const char *const GD_JPEG_VERSION = "1.0";
-
-typedef struct _jmpbuf_wrapper {
- jmp_buf jmpbuf;
- int ignore_warning;
-}
-jmpbuf_wrapper;
-
-static void jpeg_emit_message(j_common_ptr jpeg_info, int level)
-{
- char message[JMSG_LENGTH_MAX];
- jmpbuf_wrapper *jmpbufw;
- int ignore_warning = 0;
-
- jmpbufw = (jmpbuf_wrapper *) jpeg_info->client_data;
-
- if (jmpbufw != 0) {
- ignore_warning = jmpbufw->ignore_warning;
- }
-
- (jpeg_info->err->format_message)(jpeg_info,message);
-
- /* It is a warning message */
- if (level < 0) {
- /* display only the 1st warning, as would do a default libjpeg
- * unless strace_level >= 3
- */
- if ((jpeg_info->err->num_warnings == 0) || (jpeg_info->err->trace_level >= 3)) {
- if (!ignore_warning) {
- gd_error("gd-jpeg, libjpeg: recoverable error: %s\n", message);
- }
- }
-
- jpeg_info->err->num_warnings++;
- } else {
- /* strace msg, Show it if trace_level >= level. */
- if (jpeg_info->err->trace_level >= level) {
- if (!ignore_warning) {
- gd_error("gd-jpeg, libjpeg: strace message: %s\n", message);
- }
- }
- }
-}
-
-/* Called by the IJG JPEG library upon encountering a fatal error */
-static void fatal_jpeg_error(j_common_ptr cinfo)
-{
- jmpbuf_wrapper *jmpbufw;
- char buffer[JMSG_LENGTH_MAX];
-
- (*cinfo->err->format_message)(cinfo, buffer);
- gd_error_ex(GD_WARNING, "gd-jpeg: JPEG library reports unrecoverable error: %s", buffer);
-
- jmpbufw = (jmpbuf_wrapper *)cinfo->client_data;
- jpeg_destroy(cinfo);
-
- if(jmpbufw != 0) {
- longjmp(jmpbufw->jmpbuf, 1);
- gd_error_ex(GD_ERROR, "gd-jpeg: EXTREMELY fatal error: longjmp returned control; terminating\n");
- } else {
- gd_error_ex(GD_ERROR, "gd-jpeg: EXTREMELY fatal error: jmpbuf unrecoverable; terminating\n");
- }
-
- exit(99);
-}
-
-static int _gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality);
-
-/*
- * Write IM to OUTFILE as a JFIF-formatted JPEG image, using quality
- * QUALITY. If QUALITY is in the range 0-100, increasing values
- * represent higher quality but also larger image size. If QUALITY is
- * negative, the IJG JPEG library's default quality is used (which
- * should be near optimal for many applications). See the IJG JPEG
- * library documentation for more details.
- */
-
-
-/*
- Function: gdImageJpeg
-
- <gdImageJpeg> outputs the specified image to the specified file in
- JPEG format. The file must be open for writing. Under MSDOS and
- all versions of Windows, it is important to use "wb" as opposed to
- simply "w" as the mode when opening the file, and under Unix there
- is no penalty for doing so. <gdImageJpeg> does not close the file;
- your code must do so.
-
- If _quality_ is negative, the default IJG JPEG quality value (which
- should yield a good general quality / size tradeoff for most
- situations) is used. Otherwise, for practical purposes, _quality_
- should be a value in the range 0-95, higher quality values usually
- implying both higher quality and larger image sizes.
-
- If you have set image interlacing using <gdImageInterlace>, this
- function will interpret that to mean you wish to output a
- progressive JPEG. Some programs (e.g., Web browsers) can display
- progressive JPEGs incrementally; this can be useful when browsing
- over a relatively slow communications link, for
- example. Progressive JPEGs can also be slightly smaller than
- sequential (non-progressive) JPEGs.
-
- Variants:
-
- <gdImageJpegCtx> stores the image using a <gdIOCtx> struct.
-
- <gdImageJpegPtr> stores the image to RAM.
-
- Parameters:
-
- im - The image to save
- outFile - The FILE pointer to write to.
- quality - Compression quality (0-95, 0 means use the default).
-
- Returns:
-
- Nothing.
-
- Example:
- (start code)
-
- gdImagePtr im;
- int black, white;
- FILE *out;
- // Create the image
- im = gdImageCreate(100, 100);
- // Allocate background
- white = gdImageColorAllocate(im, 255, 255, 255);
- // Allocate drawing color
- black = gdImageColorAllocate(im, 0, 0, 0);
- // Draw rectangle
- gdImageRectangle(im, 0, 0, 99, 99, black);
- // Open output file in binary mode
- out = fopen("rect.jpg", "wb");
- // Write JPEG using default quality
- gdImageJpeg(im, out, -1);
- // Close file
- fclose(out);
- // Destroy image
- gdImageDestroy(im);
-
- (end code)
-*/
-
-BGD_DECLARE(void) gdImageJpeg(gdImagePtr im, FILE *outFile, int quality)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageJpegCtx(im, out, quality);
- out->gd_free(out);
-}
-
-/*
- Function: gdImageJpegPtr
-
- Identical to <gdImageJpeg> except that it returns a pointer to a
- memory area with the JPEG data. This memory must be freed by the
- caller when it is no longer needed.
-
- The caller *must* invoke <gdFree>, not free(). This is because it
- is not guaranteed that libgd will use the same implementation of
- malloc, free, etc. as your proggram.
-
- The 'size' parameter receives the total size of the block of
- memory.
-
- Parameters:
-
- im - The image to write
- size - Output: the size of the resulting image.
- quality - Compression quality.
-
- Returns:
-
- A pointer to the JPEG data or NULL if an error occurred.
-
-*/
-BGD_DECLARE(void *) gdImageJpegPtr(gdImagePtr im, int *size, int quality)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImageJpegCtx(im, out, quality)) {
- rv = gdDPExtractData(out, size);
- } else {
- rv = NULL;
- }
- out->gd_free(out);
- return rv;
-}
-
-void jpeg_gdIOCtx_dest(j_compress_ptr cinfo, gdIOCtx *outfile);
-
-/*
- Function: gdImageJpegCtx
-
- Write the image as JPEG data via a <gdIOCtx>. See <gdImageJpeg>
- for more details.
-
- Parameters:
-
- im - The image to write.
- outfile - The output sink.
- quality - Image quality.
-
-*/
-BGD_DECLARE(void) gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
-{
- _gdImageJpegCtx(im, outfile, quality);
-}
-
-/* returns 0 on success, 1 on failure */
-static int _gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
-{
- struct jpeg_compress_struct cinfo;
- struct jpeg_error_mgr jerr;
- int i, j, jidx;
- /* volatile so we can gdFree it on return from longjmp */
- volatile JSAMPROW row = 0;
- JSAMPROW rowptr[1];
- jmpbuf_wrapper jmpbufw;
- JDIMENSION nlines;
- char comment[255];
-
-#ifdef JPEG_DEBUG
- gd_error_ex(GD_DEBUG, "gd-jpeg: gd JPEG version %s\n", GD_JPEG_VERSION);
- gd_error_ex(GD_DEBUG, "gd-jpeg: JPEG library version %d, %d-bit sample values\n", JPEG_LIB_VERSION, BITS_IN_JSAMPLE);
- if (!im->trueColor) {
- for(i = 0; i < im->colorsTotal; i++) {
- if(!im->open[i]) {
- gd_error_ex(GD_DEBUG, "gd-jpeg: gd colormap index %d: (%d, %d, %d)\n", i, im->red[i], im->green[i], im->blue[i]);
- }
- }
- }
-#endif /* JPEG_DEBUG */
-
- memset(&cinfo, 0, sizeof(cinfo));
- memset(&jerr, 0, sizeof(jerr));
-
- cinfo.err = jpeg_std_error(&jerr);
- cinfo.client_data = &jmpbufw;
-
- if(setjmp(jmpbufw.jmpbuf) != 0) {
- /* we're here courtesy of longjmp */
- if(row) {
- gdFree(row);
- }
- return 1;
- }
-
- cinfo.err->emit_message = jpeg_emit_message;
- cinfo.err->error_exit = fatal_jpeg_error;
-
- jpeg_create_compress(&cinfo);
-
- cinfo.image_width = im->sx;
- cinfo.image_height = im->sy;
- cinfo.input_components = 3; /* # of color components per pixel */
- cinfo.in_color_space = JCS_RGB; /* colorspace of input image */
-
- jpeg_set_defaults(&cinfo);
-
- cinfo.density_unit = 1;
- cinfo.X_density = im->res_x;
- cinfo.Y_density = im->res_y;
-
- if(quality >= 0) {
- jpeg_set_quality(&cinfo, quality, TRUE);
- if (quality >= 90) {
- cinfo.comp_info[0].h_samp_factor = 1;
- cinfo.comp_info[0].v_samp_factor = 1;
- }
- }
-
- /* If user requests interlace, translate that to progressive JPEG */
- if(gdImageGetInterlaced(im)) {
-#ifdef JPEG_DEBUG
- gd_error_ex(GD_DEBUG, "gd-jpeg: interlace set, outputting progressive JPEG image\n");
-#endif
- jpeg_simple_progression(&cinfo);
- }
-
- jpeg_gdIOCtx_dest(&cinfo, outfile);
-
- row = (JSAMPROW)gdCalloc(1, cinfo.image_width * cinfo.input_components * sizeof(JSAMPLE));
- if(row == 0) {
- gd_error("gd-jpeg: error: unable to allocate JPEG row structure: gdCalloc returns NULL\n");
- jpeg_destroy_compress(&cinfo);
- return 1;
- }
-
- rowptr[0] = row;
-
- jpeg_start_compress(&cinfo, TRUE);
-
- sprintf(comment, "CREATOR: gd-jpeg v%s (using IJG JPEG v%d),", GD_JPEG_VERSION, JPEG_LIB_VERSION);
-
- if(quality >= 0) {
- sprintf (comment + strlen(comment), " quality = %d\n", quality);
- } else {
- strcat(comment + strlen(comment), " default quality\n");
- }
-
- jpeg_write_marker(&cinfo, JPEG_COM, (unsigned char *) comment, (unsigned int)strlen(comment));
-
- if(im->trueColor) {
-#if BITS_IN_JSAMPLE == 12
- gd_error(
- "gd-jpeg: error: jpeg library was compiled for 12-bit\n"
- "precision. This is mostly useless, because JPEGs on the web are\n"
- "8-bit and such versions of the jpeg library won't read or write\n"
- "them. GD doesn't support these unusual images. Edit your\n"
- "jmorecfg.h file to specify the correct precision and completely\n"
- "'make clean' and 'make install' libjpeg again. Sorry.\n"
- );
- goto error;
-#endif /* BITS_IN_JSAMPLE == 12 */
- for(i = 0; i < im->sy; i++) {
- for(jidx = 0, j = 0; j < im->sx; j++) {
- int val = im->tpixels[i][j];
- row[jidx++] = gdTrueColorGetRed(val);
- row[jidx++] = gdTrueColorGetGreen(val);
- row[jidx++] = gdTrueColorGetBlue(val);
- }
-
- nlines = jpeg_write_scanlines(&cinfo, rowptr, 1);
-
- if(nlines != 1) {
- gd_error("gd_jpeg: warning: jpeg_write_scanlines returns %u -- expected 1\n", nlines);
- }
- }
- } else {
- for(i = 0; i < im->sy; i++) {
- for(jidx = 0, j = 0; j < im->sx; j++) {
- int idx = im->pixels[i][j];
-
- /*
- * NB: Although gd RGB values are ints, their max value is
- * 255 (see the documentation for gdImageColorAllocate())
- * -- perfect for 8-bit JPEG encoding (which is the norm)
- */
-#if BITS_IN_JSAMPLE == 8
- row[jidx++] = im->red[idx];
- row[jidx++] = im->green[idx];
- row[jidx++] = im->blue[idx];
-#elif BITS_IN_JSAMPLE == 12
- row[jidx++] = im->red[idx] << 4;
- row[jidx++] = im->green[idx] << 4;
- row[jidx++] = im->blue[idx] << 4;
-#else
-#error IJG JPEG library BITS_IN_JSAMPLE value must be 8 or 12
-#endif
- }
-
- nlines = jpeg_write_scanlines(&cinfo, rowptr, 1);
- if(nlines != 1) {
- gd_error("gd_jpeg: warning: jpeg_write_scanlines"
- " returns %u -- expected 1\n", nlines);
- }
- }
- }
-
- jpeg_finish_compress(&cinfo);
- jpeg_destroy_compress(&cinfo);
- gdFree(row);
- return 0;
-}
-
-
-
-
-/*
- Function: gdImageCreateFromJpeg
-
- See <gdImageCreateFromJpegEx>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpeg(FILE *inFile)
-{
- return gdImageCreateFromJpegEx(inFile, 1);
-}
-
-
-/*
- Function: gdImageCreateFromJpegEx
-
- <gdImageCreateFromJpegEx> is called to load truecolor images from
- JPEG format files. Invoke <gdImageCreateFromJpegEx> with an
- already opened pointer to a file containing the desired
- image. <gdImageCreateFromJpegEx> returns a <gdImagePtr> to the new
- truecolor image, or NULL if unable to load the image (most often
- because the file is corrupt or does not contain a JPEG
- image). <gdImageCreateFromJpegEx> does not close the file.
-
- You can inspect the sx and sy members of the image to determine
- its size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- *The returned image is always a truecolor image.*
-
- Variants:
-
- <gdImageCreateFromJpegPtrEx> creates an image from JPEG data
- already in memory.
-
- <gdImageCreateFromJpegCtxEx> reads its data via the function
- pointers in a <gdIOCtx> structure.
-
- <gdImageCreateFromJpeg>, <gdImageCreateFromJpegPtr> and
- <gdImageCreateFromJpegCtx> are equivalent to calling their
- _Ex_-named counterparts with an ignore_warning set to 1
- (i.e. TRUE).
-
- Parameters:
-
- infile - The input FILE pointer.
- ignore_warning - Flag. If true, ignores recoverable warnings.
-
- Returns:
-
- A pointer to the new *truecolor* image. This will need to be
- destroyed with <gdImageDestroy> once it is no longer needed.
-
- On error, returns NULL.
-
- Example:
- (start code)
-
- gdImagePtr im;
- FILE *in;
- in = fopen("myjpeg.jpg", "rb");
- im = gdImageCreateFromJpegEx(in, GD_TRUE);
- fclose(in);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegEx(FILE *inFile, int ignore_warning)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- if (in == NULL) return NULL;
- im = gdImageCreateFromJpegCtxEx(in, ignore_warning);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromJpegPtr
-
- Parameters:
-
- size - size of JPEG data in bytes.
- data - pointer to JPEG data.
-
- See <gdImageCreateFromJpegEx>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegPtr(int size, void *data)
-{
- return gdImageCreateFromJpegPtrEx(size, data, 1);
-}
-
-/*
- Function: gdImageCreateFromJpegPtrEx
-
- Parameters:
-
- size - size of JPEG data in bytes.
- data - pointer to JPEG data.
- ignore_warning - if true, ignore recoverable warnings
-
- See <gdImageCreateFromJpegEx>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegPtrEx(int size, void *data, int ignore_warning)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- if(!in) {
- return 0;
- }
- im = gdImageCreateFromJpegCtxEx(in, ignore_warning);
- in->gd_free(in);
- return im;
-}
-
-void jpeg_gdIOCtx_src(j_decompress_ptr cinfo, gdIOCtx *infile);
-
-static int CMYKToRGB(int c, int m, int y, int k, int inverted);
-
-/*
- Function: gdImageCreateFromJpegCtx
-
- See <gdImageCreateFromJpeg>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegCtx(gdIOCtx *infile)
-{
- return gdImageCreateFromJpegCtxEx(infile, 1);
-}
-
-/*
- Function: gdImageCreateFromJpegCtxEx
-
- See <gdImageCreateFromJpeg>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegCtxEx(gdIOCtx *infile, int ignore_warning)
-{
- struct jpeg_decompress_struct cinfo;
- struct jpeg_error_mgr jerr;
- jmpbuf_wrapper jmpbufw;
- /* volatile so we can gdFree them after longjmp */
- volatile JSAMPROW row = 0;
- volatile gdImagePtr im = 0;
- JSAMPROW rowptr[1];
- JDIMENSION i, j;
- int retval;
- JDIMENSION nrows;
- int channels = 3;
- int inverted = 0;
-
-#ifdef JPEG_DEBUG
- gd_error_ex(GD_DEBUG, "gd-jpeg: gd JPEG version %s\n", GD_JPEG_VERSION);
- gd_error_ex(GD_DEBUG, "gd-jpeg: JPEG library version %d, %d-bit sample values\n", JPEG_LIB_VERSION, BITS_IN_JSAMPLE);
- gd_error_ex(GD_DEBUG, "sizeof: %d\n", sizeof(struct jpeg_decompress_struct));
-#endif
-
- memset(&cinfo, 0, sizeof(cinfo));
- memset(&jerr, 0, sizeof(jerr));
-
- jmpbufw.ignore_warning = ignore_warning;
-
- cinfo.err = jpeg_std_error(&jerr);
- cinfo.client_data = &jmpbufw;
-
- cinfo.err->emit_message = jpeg_emit_message;
-
- if(setjmp(jmpbufw.jmpbuf) != 0) {
- /* we're here courtesy of longjmp */
- if(row) {
- gdFree(row);
- }
- if(im) {
- gdImageDestroy(im);
- }
- return 0;
- }
-
- cinfo.err->error_exit = fatal_jpeg_error;
-
- jpeg_create_decompress(&cinfo);
-
- jpeg_gdIOCtx_src(&cinfo, infile);
-
- /* 2.0.22: save the APP14 marker to check for Adobe Photoshop CMYK
- * files with inverted components.
- */
- jpeg_save_markers(&cinfo, JPEG_APP0 + 14, 256);
-
- retval = jpeg_read_header(&cinfo, TRUE);
- if(retval != JPEG_HEADER_OK) {
- gd_error("gd-jpeg: warning: jpeg_read_header returns"
- " %d, expected %d\n", retval, JPEG_HEADER_OK);
- }
-
- if(cinfo.image_height > INT_MAX) {
- gd_error("gd-jpeg: warning: JPEG image height (%u) is"
- " greater than INT_MAX (%d) (and thus greater than"
- " gd can handle)", cinfo.image_height, INT_MAX);
- }
-
- if(cinfo.image_width > INT_MAX) {
- gd_error("gd-jpeg: warning: JPEG image width (%u) is"
- " greater than INT_MAX (%d) (and thus greater than"
- " gd can handle)\n", cinfo.image_width, INT_MAX);
- }
-
- im = gdImageCreateTrueColor((int)cinfo.image_width, (int)cinfo.image_height);
- if(im == 0) {
- gd_error("gd-jpeg error: cannot allocate gdImage struct\n");
- goto error;
- }
-
- /* check if the resolution is specified */
- switch (cinfo.density_unit) {
- case 1:
- im->res_x = cinfo.X_density;
- im->res_y = cinfo.Y_density;
- break;
- case 2:
- im->res_x = DPCM2DPI(cinfo.X_density);
- im->res_y = DPCM2DPI(cinfo.Y_density);
- break;
- }
-
- /* 2.0.22: very basic support for reading CMYK colorspace files. Nice for
- * thumbnails but there's no support for fussy adjustment of the
- * assumed properties of inks and paper.
- */
- if((cinfo.jpeg_color_space == JCS_CMYK) || (cinfo.jpeg_color_space == JCS_YCCK)) {
- cinfo.out_color_space = JCS_CMYK;
- } else {
- cinfo.out_color_space = JCS_RGB;
- }
-
- if(jpeg_start_decompress(&cinfo) != TRUE) {
- gd_error("gd-jpeg: warning: jpeg_start_decompress"
- " reports suspended data source\n");
- }
-
-#ifdef JPEG_DEBUG
- gd_error_ex(GD_DEBUG, "gd-jpeg: JPEG image information:");
- if(cinfo.saw_JFIF_marker) {
- gd_error_ex(GD_DEBUG, " JFIF version %d.%.2d", (int)cinfo.JFIF_major_version, (int)cinfo.JFIF_minor_version);
- } else if(cinfo.saw_Adobe_marker) {
- gd_error_ex(GD_DEBUG, " Adobe format");
- } else {
- gd_error_ex(GD_DEBUG, " UNKNOWN format");
- }
-
- gd_error_ex(GD_DEBUG, " %ux%u (raw) / %ux%u (scaled) %d-bit", cinfo.image_width,
- cinfo.image_height, cinfo.output_width,
- cinfo.output_height, cinfo.data_precision
- );
- gd_error_ex(GD_DEBUG, " %s", (cinfo.progressive_mode ? "progressive" : "baseline"));
- gd_error_ex(GD_DEBUG, " image, %d quantized colors, ", cinfo.actual_number_of_colors);
-
- switch(cinfo.jpeg_color_space) {
- case JCS_GRAYSCALE:
- gd_error_ex(GD_DEBUG, "grayscale");
- break;
-
- case JCS_RGB:
- gd_error_ex(GD_DEBUG, "RGB");
- break;
-
- case JCS_YCbCr:
- gd_error_ex(GD_DEBUG, "YCbCr (a.k.a. YUV)");
- break;
-
- case JCS_CMYK:
- gd_error_ex(GD_DEBUG, "CMYK");
- break;
-
- case JCS_YCCK:
- gd_error_ex(GD_DEBUG, "YCbCrK");
- break;
-
- default:
- gd_error_ex(GD_DEBUG, "UNKNOWN (value: %d)", (int)cinfo.jpeg_color_space);
- break;
- }
-
- gd_error_ex(GD_DEBUG, " colorspace\n");
- fflush(stdout);
-#endif /* JPEG_DEBUG */
-
- /* REMOVED by TBB 2/12/01. This field of the structure is
- * documented as private, and sure enough it's gone in the
- * latest libjpeg, replaced by something else. Unfortunately
- * there is still no right way to find out if the file was
- * progressive or not; just declare your intent before you
- * write one by calling gdImageInterlace(im, 1) yourself.
- * After all, we're not really supposed to rework JPEGs and
- * write them out again anyway. Lossy compression, remember? */
-#if 0
- gdImageInterlace (im, cinfo.progressive_mode != 0);
-#endif
- if(cinfo.out_color_space == JCS_RGB) {
- if(cinfo.output_components != 3) {
- gd_error("gd-jpeg: error: JPEG color quantization"
- " request resulted in output_components == %d"
- " (expected 3 for RGB)\n", cinfo.output_components);
- goto error;
- }
- channels = 3;
- } else if(cinfo.out_color_space == JCS_CMYK) {
- jpeg_saved_marker_ptr marker;
- if(cinfo.output_components != 4) {
- gd_error("gd-jpeg: error: JPEG color quantization"
- " request resulted in output_components == %d"
- " (expected 4 for CMYK)\n", cinfo.output_components);
- goto error;
- }
- channels = 4;
-
- marker = cinfo.marker_list;
- while(marker) {
- if( (marker->marker == (JPEG_APP0 + 14)) &&
- (marker->data_length >= 12) &&
- (!strncmp((const char *)marker->data, "Adobe", 5))) {
- inverted = 1;
- break;
- }
- marker = marker->next;
- }
- } else {
- gd_error("gd-jpeg: error: unexpected colorspace\n");
- goto error;
- }
-#if BITS_IN_JSAMPLE == 12
- gd_error_ex(GD_ERROR,
- "gd-jpeg: error: jpeg library was compiled for 12-bit\n"
- "precision. This is mostly useless, because JPEGs on the web are\n"
- "8-bit and such versions of the jpeg library won't read or write\n"
- "them. GD doesn't support these unusual images. Edit your\n"
- "jmorecfg.h file to specify the correct precision and completely\n"
- "'make clean' and 'make install' libjpeg again. Sorry.\n");
- goto error;
-#endif /* BITS_IN_JSAMPLE == 12 */
-
- row = gdCalloc(cinfo.output_width *channels, sizeof(JSAMPLE));
- if(row == 0) {
- gd_error("gd-jpeg: error: unable to allocate row for"
- " JPEG scanline: gdCalloc returns NULL\n");
- goto error;
- }
- rowptr[0] = row;
- if(cinfo.out_color_space == JCS_CMYK) {
- for(i = 0; i < cinfo.output_height; i++) {
- register JSAMPROW currow = row;
- register int *tpix = im->tpixels[i];
- nrows = jpeg_read_scanlines(&cinfo, rowptr, 1);
- if(nrows != 1) {
- gd_error("gd-jpeg: error: jpeg_read_scanlines"
- " returns %u, expected 1\n", nrows);
- goto error;
- }
- for(j = 0; j < cinfo.output_width; j++, currow += 4, tpix++) {
- *tpix = CMYKToRGB(currow[0], currow[1], currow[2], currow[3], inverted);
- }
- }
- } else {
- for(i = 0; i < cinfo.output_height; i++) {
- register JSAMPROW currow = row;
- register int *tpix = im->tpixels[i];
- nrows = jpeg_read_scanlines(&cinfo, rowptr, 1);
- if(nrows != 1) {
- gd_error("gd-jpeg: error: jpeg_read_scanlines"
- " returns %u, expected 1\n", nrows);
- goto error;
- }
- for(j = 0; j < cinfo.output_width; j++, currow += 3, tpix++) {
- *tpix = gdTrueColor(currow[0], currow[1], currow[2]);
- }
- }
- }
-
- if(jpeg_finish_decompress (&cinfo) != TRUE) {
- gd_error("gd-jpeg: warning: jpeg_finish_decompress"
- " reports suspended data source\n");
- }
- /* TBB 2.0.29: we should do our best to read whatever we can read, and a
- * warning is a warning. A fatal error on warnings doesn't make sense. */
-#if 0
- /* This was originally added by Truxton Fulton */
- if (cinfo.err->num_warnings > 0)
- goto error;
-#endif
-
- jpeg_destroy_decompress(&cinfo);
- gdFree(row);
- return im;
-
-error:
- jpeg_destroy_decompress(&cinfo);
-
- if(row) {
- gdFree(row);
- }
- if(im) {
- gdImageDestroy(im);
- }
-
- return 0;
-}
-
-/* A very basic conversion approach, TBB */
-
-static int CMYKToRGB(int c, int m, int y, int k, int inverted)
-{
- if(inverted) {
- c = 255 - c;
- m = 255 - m;
- y = 255 - y;
- k = 255 - k;
- }
-
- return gdTrueColor(
- (255 - c) * (255 - k) / 255,
- (255 - m) * (255 - k) / 255,
- (255 - y) * (255 - k) / 255
- );
-#if 0
- if (inverted) {
- c = 255 - c;
- m = 255 - m;
- y = 255 - y;
- k = 255 - k;
- }
- c = c * (255 - k) / 255 + k;
- if (c > 255) {
- c = 255;
- }
- if (c < 0) {
- c = 0;
- }
- m = m * (255 - k) / 255 + k;
- if (m > 255) {
- m = 255;
- }
- if (m < 0) {
- m = 0;
- }
- y = y * (255 - k) / 255 + k;
- if (y > 255) {
- y = 255;
- }
- if (y < 0) {
- y = 0;
- }
- c = 255 - c;
- m = 255 - m;
- y = 255 - y;
- return gdTrueColor (c, m, y);
-#endif
-}
-
-/*
- * gdIOCtx JPEG data sources and sinks, T. Boutell
- * almost a simple global replace from T. Lane's stdio versions.
- */
-
-/* Expanded data source object for gdIOCtx input */
-typedef struct {
- struct jpeg_source_mgr pub; /* public fields */
- gdIOCtx *infile; /* source stream */
- unsigned char *buffer; /* start of buffer */
- boolean start_of_file; /* have we gotten any data yet? */
-}
-my_source_mgr;
-
-typedef my_source_mgr *my_src_ptr;
-
-#define INPUT_BUF_SIZE 4096 /* choose an efficiently fread'able size */
-
-/*
- * Initialize source --- called by jpeg_read_header
- * before any data is actually read.
- */
-
-void init_source(j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr)cinfo->src;
-
- /* We reset the empty-input-file flag for each image,
- * but we don't clear the input buffer.
- * This is correct behavior for reading a series of images from one source.
- */
- src->start_of_file = TRUE;
-}
-
-
-/*
- * Fill the input buffer --- called whenever buffer is emptied.
- *
- * In typical applications, this should read fresh data into the buffer
- * (ignoring the current state of next_input_byte & bytes_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been reloaded. It is not necessary to
- * fill the buffer entirely, only to obtain at least one more byte.
- *
- * There is no such thing as an EOF return. If the end of the file has been
- * reached, the routine has a choice of ERREXIT() or inserting fake data into
- * the buffer. In most cases, generating a warning message and inserting a
- * fake EOI marker is the best course of action --- this will allow the
- * decompressor to output however much of the image is there. However,
- * the resulting error message is misleading if the real problem is an empty
- * input file, so we handle that case specially.
- *
- * In applications that need to be able to suspend compression due to input
- * not being available yet, a FALSE return indicates that no more data can be
- * obtained right now, but more may be forthcoming later. In this situation,
- * the decompressor will return to its caller (with an indication of the
- * number of scanlines it has read, if any). The application should resume
- * decompression after it has loaded more data into the input buffer. Note
- * that there are substantial restrictions on the use of suspension --- see
- * the documentation.
- *
- * When suspending, the decompressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_input_byte & bytes_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point must be rescanned after resumption, so move it to
- * the front of the buffer rather than discarding it.
- */
-
-#define END_JPEG_SEQUENCE "\r\n[*]--:END JPEG:--[*]\r\n"
-
-boolean fill_input_buffer(j_decompress_ptr cinfo)
-{
- my_src_ptr src = (my_src_ptr)cinfo->src;
- /* 2.0.12: signed size. Thanks to Geert Jansen */
- /* 2.0.14: some platforms (mingw-msys) don't have ssize_t. Call
- * an int an int.
- */
- int nbytes = 0;
- memset(src->buffer, 0, INPUT_BUF_SIZE);
-
- while(nbytes < INPUT_BUF_SIZE) {
- int got = gdGetBuf(src->buffer + nbytes, INPUT_BUF_SIZE - nbytes, src->infile);
-
- if((got == EOF) || (got == 0)) {
- /* EOF or error. If we got any data, don't worry about it.
- * If we didn't, then this is unexpected. */
- if(!nbytes) {
- nbytes = -1;
- }
- break;
- }
- nbytes += got;
- }
-
- if(nbytes <= 0) {
- if(src->start_of_file) {
- /* Treat empty input file as fatal error */
- ERREXIT(cinfo, JERR_INPUT_EMPTY);
- }
- WARNMS(cinfo, JWRN_JPEG_EOF);
- /* Insert a fake EOI marker */
- src->buffer[0] = (unsigned char)0xFF;
- src->buffer[1] = (unsigned char)JPEG_EOI;
- nbytes = 2;
- }
-
- src->pub.next_input_byte = src->buffer;
- src->pub.bytes_in_buffer = nbytes;
- src->start_of_file = FALSE;
-
- return TRUE;
-}
-
-/*
- * Skip data --- used to skip over a potentially large amount of
- * uninteresting data (such as an APPn marker).
- *
- * Writers of suspendable-input applications must note that skip_input_data
- * is not granted the right to give a suspension return. If the skip extends
- * beyond the data currently in the buffer, the buffer can be marked empty so
- * that the next read will cause a fill_input_buffer call that can suspend.
- * Arranging for additional bytes to be discarded before reloading the input
- * buffer is the application writer's problem.
- */
-
-void skip_input_data(j_decompress_ptr cinfo, long num_bytes)
-{
- my_src_ptr src = (my_src_ptr)cinfo->src;
-
- /* Just a dumb implementation for now. Not clear that being smart is worth
- * any trouble anyway --- large skips are infrequent.
- */
- if(num_bytes > 0) {
- while(num_bytes > (long)src->pub.bytes_in_buffer) {
- num_bytes -= (long)src->pub.bytes_in_buffer;
- (void)fill_input_buffer(cinfo);
- /* note we assume that fill_input_buffer will never return FALSE,
- * so suspension need not be handled.
- */
- }
- src->pub.next_input_byte += (size_t)num_bytes;
- src->pub.bytes_in_buffer -= (size_t)num_bytes;
- }
-}
-
-/*
- * An additional method that can be provided by data source modules is the
- * resync_to_restart method for error recovery in the presence of RST markers.
- * For the moment, this source module just uses the default resync method
- * provided by the JPEG library. That method assumes that no backtracking
- * is possible.
- */
-
-/*
- * Terminate source --- called by jpeg_finish_decompress
- * after all data has been read. Often a no-op.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-void term_source(j_decompress_ptr cinfo)
-{
- (void)cinfo;
-}
-
-
-/*
- * Prepare for input from a gdIOCtx stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing decompression.
- */
-
-void jpeg_gdIOCtx_src(j_decompress_ptr cinfo, gdIOCtx *infile)
-{
- my_src_ptr src;
-
- /* The source object and input buffer are made permanent so that a series
- * of JPEG images can be read from the same file by calling jpeg_gdIOCtx_src
- * only before the first one. (If we discarded the buffer at the end of
- * one image, we'd likely lose the start of the next one.)
- * This makes it unsafe to use this manager and a different source
- * manager serially with the same JPEG object. Caveat programmer.
- */
- if(cinfo->src == NULL) {
- /* first time for this JPEG object? */
- cinfo->src = (struct jpeg_source_mgr *)
- (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT,
- sizeof(my_source_mgr));
- src = (my_src_ptr)cinfo->src;
- src->buffer = (unsigned char *)
- (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT,
- INPUT_BUF_SIZE * sizeof(unsigned char));
- }
-
- src = (my_src_ptr)cinfo->src;
- src->pub.init_source = init_source;
- src->pub.fill_input_buffer = fill_input_buffer;
- src->pub.skip_input_data = skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart; /* use default method */
- src->pub.term_source = term_source;
- src->infile = infile;
- src->pub.bytes_in_buffer = 0; /* forces fill_input_buffer on first read */
- src->pub.next_input_byte = NULL; /* until buffer loaded */
-}
-
-/* Expanded data destination object for stdio output */
-typedef struct {
- struct jpeg_destination_mgr pub; /* public fields */
- gdIOCtx *outfile; /* target stream */
- unsigned char *buffer; /* start of buffer */
-}
-my_destination_mgr;
-
-typedef my_destination_mgr *my_dest_ptr;
-
-#define OUTPUT_BUF_SIZE 4096 /* choose an efficiently fwrite'able size */
-
-/*
- * Initialize destination --- called by jpeg_start_compress
- * before any data is actually written.
- */
-
-void init_destination(j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr)cinfo->dest;
-
- /* Allocate the output buffer --- it will be released when done with image */
- dest->buffer = (unsigned char *)
- (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_IMAGE,
- OUTPUT_BUF_SIZE * sizeof(unsigned char));
-
- dest->pub.next_output_byte = dest->buffer;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-}
-
-
-/*
- * Empty the output buffer --- called whenever buffer fills up.
- *
- * In typical applications, this should write the entire output buffer
- * (ignoring the current state of next_output_byte & free_in_buffer),
- * reset the pointer & count to the start of the buffer, and return TRUE
- * indicating that the buffer has been dumped.
- *
- * In applications that need to be able to suspend compression due to output
- * overrun, a FALSE return indicates that the buffer cannot be emptied now.
- * In this situation, the compressor will return to its caller (possibly with
- * an indication that it has not accepted all the supplied scanlines). The
- * application should resume compression after it has made more room in the
- * output buffer. Note that there are substantial restrictions on the use of
- * suspension --- see the documentation.
- *
- * When suspending, the compressor will back up to a convenient restart point
- * (typically the start of the current MCU). next_output_byte & free_in_buffer
- * indicate where the restart point will be if the current call returns FALSE.
- * Data beyond this point will be regenerated after resumption, so do not
- * write it out when emptying the buffer externally.
- */
-
-boolean empty_output_buffer(j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr)cinfo->dest;
-
- if(gdPutBuf(dest->buffer, OUTPUT_BUF_SIZE, dest->outfile) != (size_t)OUTPUT_BUF_SIZE) {
- ERREXIT(cinfo, JERR_FILE_WRITE);
- }
-
- dest->pub.next_output_byte = dest->buffer;
- dest->pub.free_in_buffer = OUTPUT_BUF_SIZE;
-
- return TRUE;
-}
-
-
-/*
- * Terminate destination --- called by jpeg_finish_compress
- * after all data has been written. Usually needs to flush buffer.
- *
- * NB: *not* called by jpeg_abort or jpeg_destroy; surrounding
- * application must deal with any cleanup that should happen even
- * for error exit.
- */
-
-void term_destination(j_compress_ptr cinfo)
-{
- my_dest_ptr dest = (my_dest_ptr) cinfo->dest;
- int datacount = OUTPUT_BUF_SIZE - dest->pub.free_in_buffer;
-
- /* Write any data remaining in the buffer */
- if(datacount > 0) {
- if(gdPutBuf(dest->buffer, datacount, dest->outfile) != datacount) {
- ERREXIT(cinfo, JERR_FILE_WRITE);
- }
- }
-}
-
-/*
- * Prepare for output to a stdio stream.
- * The caller must have already opened the stream, and is responsible
- * for closing it after finishing compression.
- */
-
-void jpeg_gdIOCtx_dest(j_compress_ptr cinfo, gdIOCtx *outfile)
-{
- my_dest_ptr dest;
-
- /* The destination object is made permanent so that multiple JPEG images
- * can be written to the same file without re-executing jpeg_stdio_dest.
- * This makes it dangerous to use this manager and a different destination
- * manager serially with the same JPEG object, because their private object
- * sizes may be different. Caveat programmer.
- */
- if(cinfo->dest == NULL) {
- /* first time for this JPEG object? */
- cinfo->dest = (struct jpeg_destination_mgr *)
- (*cinfo->mem->alloc_small)((j_common_ptr)cinfo, JPOOL_PERMANENT,
- sizeof(my_destination_mgr));
- }
-
- dest = (my_dest_ptr)cinfo->dest;
- dest->pub.init_destination = init_destination;
- dest->pub.empty_output_buffer = empty_output_buffer;
- dest->pub.term_destination = term_destination;
- dest->outfile = outfile;
-}
-
-#else /* !HAVE_LIBJPEG */
-
-static void _noJpegError(void)
-{
- gd_error("JPEG image support has been disabled\n");
-}
-
-BGD_DECLARE(void) gdImageJpeg(gdImagePtr im, FILE *outFile, int quality)
-{
- _noJpegError();
-}
-
-BGD_DECLARE(void *) gdImageJpegPtr(gdImagePtr im, int *size, int quality)
-{
- _noJpegError();
- return NULL;
-}
-
-BGD_DECLARE(void) gdImageJpegCtx(gdImagePtr im, gdIOCtx *outfile, int quality)
-{
- _noJpegError();
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpeg(FILE *inFile)
-{
- _noJpegError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegEx(FILE *inFile, int ignore_warning)
-{
- _noJpegError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegPtr(int size, void *data)
-{
- _noJpegError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegPtrEx(int size, void *data, int ignore_warning)
-{
- _noJpegError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegCtx(gdIOCtx *infile)
-{
- _noJpegError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromJpegCtxEx(gdIOCtx *infile, int ignore_warning)
-{
- _noJpegError();
- return NULL;
-}
-
-#endif /* HAVE_LIBJPEG */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_matrix.c b/Build/source/libs/gd/libgd-src/src/gd_matrix.c
deleted file mode 100644
index ada63e694ca..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_matrix.c
+++ /dev/null
@@ -1,335 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include "gd.h"
-#include <math.h>
-
-#ifndef M_PI
-# define M_PI 3.14159265358979323846
-#endif
-
-/**
- * Title: Matrix
- * Group: Affine Matrix
- */
-
-/**
- * Function: gdAffineApplyToPointF
- * Applies an affine transformation to a point (floating point
- * gdPointF)
- *
- *
- * Parameters:
- * dst - Where to store the resulting point
- * affine - Source Point
- * flip_horz - affine matrix
- *
- * Returns:
- * GD_TRUE if the affine is rectilinear or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineApplyToPointF (gdPointFPtr dst, const gdPointFPtr src,
- const double affine[6])
-{
- double x = src->x;
- double y = src->y;
- dst->x = x * affine[0] + y * affine[2] + affine[4];
- dst->y = x * affine[1] + y * affine[3] + affine[5];
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineInvert
- * Find the inverse of an affine transformation.
- *
- * All non-degenerate affine transforms are invertible. Applying the
- * inverted matrix will restore the original values. Multiplying <src>
- * by <dst> (commutative) will return the identity affine (rounding
- * error possible).
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * src_affine - Original affine matrix
- * flip_horz - Whether or not to flip horizontally
- * flip_vert - Whether or not to flip vertically
- *
- * See also:
- * <gdAffineIdentity>
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE on failure
- */
-BGD_DECLARE(int) gdAffineInvert (double dst[6], const double src[6])
-{
- double r_det = (src[0] * src[3] - src[1] * src[2]);
-
- if (fabs(r_det) <= 0.0) {
- return GD_FALSE;
- }
-
- r_det = 1.0 / r_det;
- dst[0] = src[3] * r_det;
- dst[1] = -src[1] * r_det;
- dst[2] = -src[2] * r_det;
- dst[3] = src[0] * r_det;
- dst[4] = -src[4] * dst[0] - src[5] * dst[2];
- dst[5] = -src[4] * dst[1] - src[5] * dst[3];
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineFlip
- * Flip an affine transformation horizontally or vertically.
- *
- * Flips the affine transform, giving GD_FALSE for <flip_horz> and
- * <flip_vert> will clone the affine matrix. GD_TRUE for both will
- * copy a 180° rotation.
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * src_affine - Original affine matrix
- * flip_h - Whether or not to flip horizontally
- * flip_v - Whether or not to flip vertically
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineFlip (double dst[6], const double src[6], const int flip_h, const int flip_v)
-{
- dst[0] = flip_h ? - src[0] : src[0];
- dst[1] = flip_h ? - src[1] : src[1];
- dst[2] = flip_v ? - src[2] : src[2];
- dst[3] = flip_v ? - src[3] : src[3];
- dst[4] = flip_h ? - src[4] : src[4];
- dst[5] = flip_v ? - src[5] : src[5];
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineConcat
- * Concat (Multiply) two affine transformation matrices.
- *
- * Concats two affine transforms together, i.e. the result
- * will be the equivalent of doing first the transformation m1 and then
- * m2. All parameters can be the same matrix (safe to call using
- * the same array for all three arguments).
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * m1 - First affine matrix
- * m2 - Second affine matrix
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineConcat (double dst[6], const double m1[6], const double m2[6])
-{
- double dst0, dst1, dst2, dst3, dst4, dst5;
-
- dst0 = m1[0] * m2[0] + m1[1] * m2[2];
- dst1 = m1[0] * m2[1] + m1[1] * m2[3];
- dst2 = m1[2] * m2[0] + m1[3] * m2[2];
- dst3 = m1[2] * m2[1] + m1[3] * m2[3];
- dst4 = m1[4] * m2[0] + m1[5] * m2[2] + m2[4];
- dst5 = m1[4] * m2[1] + m1[5] * m2[3] + m2[5];
- dst[0] = dst0;
- dst[1] = dst1;
- dst[2] = dst2;
- dst[3] = dst3;
- dst[4] = dst4;
- dst[5] = dst5;
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineIdentity
- * Set up the identity matrix.
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineIdentity (double dst[6])
-{
- dst[0] = 1;
- dst[1] = 0;
- dst[2] = 0;
- dst[3] = 1;
- dst[4] = 0;
- dst[5] = 0;
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineScale
- * Set up a scaling matrix.
- *
- * Parameters:
- * scale_x - X scale factor
- * scale_y - Y scale factor
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineScale (double dst[6], const double scale_x, const double scale_y)
-{
- dst[0] = scale_x;
- dst[1] = 0;
- dst[2] = 0;
- dst[3] = scale_y;
- dst[4] = 0;
- dst[5] = 0;
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineRotate
- * Set up a rotation affine transform.
- *
- * Like the other angle in libGD, in which increasing y moves
- * downward, this is a counterclockwise rotation.
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * angle - Rotation angle in degrees
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineRotate (double dst[6], const double angle)
-{
- const double sin_t = sin (angle * M_PI / 180.0);
- const double cos_t = cos (angle * M_PI / 180.0);
-
- dst[0] = cos_t;
- dst[1] = sin_t;
- dst[2] = -sin_t;
- dst[3] = cos_t;
- dst[4] = 0;
- dst[5] = 0;
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineShearHorizontal
- * Set up a horizontal shearing matrix || becomes \\.
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * angle - Shear angle in degrees
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineShearHorizontal(double dst[6], const double angle)
-{
- dst[0] = 1;
- dst[1] = 0;
- dst[2] = tan(angle * M_PI / 180.0);
- dst[3] = 1;
- dst[4] = 0;
- dst[5] = 0;
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineShearVertical
- * Set up a vertical shearing matrix, columns are untouched.
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * angle - Shear angle in degrees
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineShearVertical(double dst[6], const double angle)
-{
- dst[0] = 1;
- dst[1] = tan(angle * M_PI / 180.0);
- dst[2] = 0;
- dst[3] = 1;
- dst[4] = 0;
- dst[5] = 0;
- return GD_TRUE;
-}
-
-/**
- * Function: gdAffineTranslate
- * Set up a translation matrix.
- *
- * Parameters:
- * dst - Where to store the resulting affine transform
- * offset_x - Horizontal translation amount
- * offset_y - Vertical translation amount
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineTranslate (double dst[6], const double offset_x, const double offset_y)
-{
- dst[0] = 1;
- dst[1] = 0;
- dst[2] = 0;
- dst[3] = 1;
- dst[4] = offset_x;
- dst[5] = offset_y;
- return GD_TRUE;
-}
-
-/**
- * gdAffineexpansion: Find the affine's expansion factor.
- * @src: The affine transformation.
- *
- * Finds the expansion factor, i.e. the square root of the factor
- * by which the affine transform affects area. In an affine transform
- * composed of scaling, rotation, shearing, and translation, returns
- * the amount of scaling.
- *
- * GD_TRUE on success or GD_FALSE
- **/
-BGD_DECLARE(double) gdAffineExpansion (const double src[6])
-{
- return sqrt (fabs (src[0] * src[3] - src[1] * src[2]));
-}
-
-/**
- * Function: gdAffineRectilinear
- * Determines whether the affine transformation is axis aligned. A
- * tolerance has been implemented using GD_EPSILON.
- *
- * Parameters:
- * m - The affine transformation
- *
- * Returns:
- * GD_TRUE if the affine is rectilinear or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineRectilinear (const double m[6])
-{
- return ((fabs (m[1]) < GD_EPSILON && fabs (m[2]) < GD_EPSILON) ||
- (fabs (m[0]) < GD_EPSILON && fabs (m[3]) < GD_EPSILON));
-}
-
-/**
- * Function: gdAffineEqual
- * Determines whether two affine transformations are equal. A tolerance
- * has been implemented using GD_EPSILON.
- *
- * Parameters:
- * m1 - The first affine transformation
- * m2 - The first affine transformation
- *
- * Returns:
- * GD_TRUE on success or GD_FALSE
- */
-BGD_DECLARE(int) gdAffineEqual (const double m1[6], const double m2[6])
-{
- return (fabs (m1[0] - m2[0]) < GD_EPSILON &&
- fabs (m1[1] - m2[1]) < GD_EPSILON &&
- fabs (m1[2] - m2[2]) < GD_EPSILON &&
- fabs (m1[3] - m2[3]) < GD_EPSILON &&
- fabs (m1[4] - m2[4]) < GD_EPSILON &&
- fabs (m1[5] - m2[5]) < GD_EPSILON);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_nnquant.c b/Build/source/libs/gd/libgd-src/src/gd_nnquant.c
deleted file mode 100644
index 8b9aa7945b8..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_nnquant.c
+++ /dev/null
@@ -1,631 +0,0 @@
-/* NeuQuant Neural-Net Quantization Algorithm
- * ------------------------------------------
- *
- * Copyright (c) 1994 Anthony Dekker
- *
- * NEUQUANT Neural-Net quantization algorithm by Anthony Dekker, 1994.
- * See "Kohonen neural networks for optimal colour quantization"
- * in "Network: Computation in Neural Systems" Vol. 5 (1994) pp 351-367.
- * for a discussion of the algorithm.
- * See also http://members.ozemail.com.au/~dekker/NEUQUANT.HTML
- *
- * Any party obtaining a copy of these files from the author, directly or
- * indirectly, is granted, free of charge, a full and unrestricted irrevocable,
- * world-wide, paid up, royalty-free, nonexclusive right and license to deal
- * in this software and documentation files (the "Software"), including without
- * limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons who receive
- * copies from any such party to do so, with the only requirement being
- * that this copyright notice remain intact.
- *
- *
- * Modified to process 32bit RGBA images.
- * Stuart Coyle 2004-2007
- * From: http://pngnq.sourceforge.net/
- *
- * Ported to libgd by Pierre A. Joye
- * (and make it thread safety by droping static and global variables)
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_errors.h"
-
-#include "gd_nnquant.h"
-
-/* Network Definitions
- ------------------- */
-
-#define maxnetpos (MAXNETSIZE-1)
-#define netbiasshift 4 /* bias for colour values */
-#define ncycles 100 /* no. of learning cycles */
-
-/* defs for freq and bias */
-#define intbiasshift 16 /* bias for fractions */
-#define intbias (((int) 1)<<intbiasshift)
-#define gammashift 10 /* gamma = 1024 */
-#define gamma (((int) 1)<<gammashift)
-#define betashift 10
-#define beta (intbias>>betashift) /* beta = 1/1024 */
-#define betagamma (intbias<<(gammashift-betashift))
-
-/* defs for decreasing radius factor */
-#define initrad (MAXNETSIZE>>3) /* for 256 cols, radius starts */
-#define radiusbiasshift 6 /* at 32.0 biased by 6 bits */
-#define radiusbias (((int) 1)<<radiusbiasshift)
-#define initradius (initrad*radiusbias) /* and decreases by a */
-#define radiusdec 30 /* factor of 1/30 each cycle */
-
-/* defs for decreasing alpha factor */
-#define alphabiasshift 10 /* alpha starts at 1.0 */
-#define initalpha (((int) 1)<<alphabiasshift)
-
-/* radbias and alpharadbias used for radpower calculation */
-#define radbiasshift 8
-#define radbias (((int) 1)<<radbiasshift)
-#define alpharadbshift (alphabiasshift+radbiasshift)
-#define alpharadbias (((int) 1)<<alpharadbshift)
-
-#define ALPHA 0
-#define RED 1
-#define BLUE 2
-#define GREEN 3
-
-typedef int nq_pixel[5];
-
-typedef struct {
- /* biased by 10 bits */
- int alphadec;
-
- /* lengthcount = H*W*3 */
- int lengthcount;
-
- /* sampling factor 1..30 */
- int samplefac;
-
- /* Number of colours to use. Made a global instead of #define */
- int netsize;
-
- /* for network lookup - really 256 */
- int netindex[256];
-
- /* ABGRc */
- /* the network itself */
- nq_pixel network[MAXNETSIZE];
-
- /* bias and freq arrays for learning */
- int bias[MAXNETSIZE];
- int freq[MAXNETSIZE];
-
- /* radpower for precomputation */
- int radpower[initrad];
-
- /* the input image itself */
- unsigned char *thepicture;
-} nn_quant;
-
-/* Initialise network in range (0,0,0,0) to (255,255,255,255) and set parameters
- ----------------------------------------------------------------------- */
-static void initnet(nnq, thepic, len, sample, colours)
-nn_quant *nnq;
-unsigned char *thepic;
-int len;
-int sample;
-int colours;
-{
- register int i;
- register int *p;
-
- /* Clear out network from previous runs */
- /* thanks to Chen Bin for this fix */
- memset((void*)nnq->network, 0, sizeof(nq_pixel)*MAXNETSIZE);
-
- nnq->thepicture = thepic;
- nnq->lengthcount = len;
- nnq->samplefac = sample;
- nnq->netsize = colours;
-
- for (i=0; i < nnq->netsize; i++) {
- p = nnq->network[i];
- p[0] = p[1] = p[2] = p[3] = (i << (netbiasshift+8)) / nnq->netsize;
- nnq->freq[i] = intbias / nnq->netsize; /* 1/netsize */
- nnq->bias[i] = 0;
- }
-}
-
-/* -------------------------- */
-
-/* Unbias network to give byte values 0..255 and record
- * position i to prepare for sort
- */
-/* -------------------------- */
-
-static void unbiasnet(nn_quant *nnq)
-{
- int i,j,temp;
-
- for (i=0; i < nnq->netsize; i++) {
- for (j=0; j<4; j++) {
- /* OLD CODE: network[i][j] >>= netbiasshift; */
- /* Fix based on bug report by Juergen Weigert jw@suse.de */
- temp = (nnq->network[i][j] + (1 << (netbiasshift - 1))) >> netbiasshift;
- if (temp > 255) temp = 255;
- nnq->network[i][j] = temp;
- }
- nnq->network[i][4] = i; /* record colour no */
- }
-}
-
-/* Output colormap to unsigned char ptr in RGBA format */
-static void getcolormap(nnq, map)
-nn_quant *nnq;
-unsigned char *map;
-{
- int i,j;
- for(j=0; j < nnq->netsize; j++) {
- for (i=3; i>=0; i--) {
- *map = nnq->network[j][i];
- map++;
- }
- }
-}
-
-/* Insertion sort of network and building of netindex[0..255] (to do after unbias)
- ------------------------------------------------------------------------------- */
-static void inxbuild(nn_quant *nnq)
-{
- register int i,j,smallpos,smallval;
- register int *p,*q;
- int previouscol,startpos;
-
- previouscol = 0;
- startpos = 0;
- for (i=0; i < nnq->netsize; i++) {
- p = nnq->network[i];
- smallpos = i;
- smallval = p[2]; /* index on g */
- /* find smallest in i..netsize-1 */
- for (j=i+1; j < nnq->netsize; j++) {
- q = nnq->network[j];
- if (q[2] < smallval) { /* index on g */
- smallpos = j;
- smallval = q[2]; /* index on g */
- }
- }
- q = nnq->network[smallpos];
- /* swap p (i) and q (smallpos) entries */
- if (i != smallpos) {
- j = q[0];
- q[0] = p[0];
- p[0] = j;
- j = q[1];
- q[1] = p[1];
- p[1] = j;
- j = q[2];
- q[2] = p[2];
- p[2] = j;
- j = q[3];
- q[3] = p[3];
- p[3] = j;
- j = q[4];
- q[4] = p[4];
- p[4] = j;
- }
- /* smallval entry is now in position i */
- if (smallval != previouscol) {
- nnq->netindex[previouscol] = (startpos+i)>>1;
- for (j=previouscol+1; j<smallval; j++) nnq->netindex[j] = i;
- previouscol = smallval;
- startpos = i;
- }
- }
- nnq->netindex[previouscol] = (startpos+maxnetpos)>>1;
- for (j=previouscol+1; j<256; j++) nnq->netindex[j] = maxnetpos; /* really 256 */
-}
-
-
-/* Search for ABGR values 0..255 (after net is unbiased) and return colour index
- ---------------------------------------------------------------------------- */
-static unsigned int inxsearch(nnq, al,b,g,r)
-nn_quant *nnq;
-register int al, b, g, r;
-{
- register int i, j, dist, a, bestd;
- register int *p;
- unsigned int best;
-
- bestd = 1000; /* biggest possible dist is 256*3 */
- best = 0;
- i = nnq->netindex[g]; /* index on g */
- j = i-1; /* start at netindex[g] and work outwards */
-
- while ((i<nnq->netsize) || (j>=0)) {
- if (i< nnq->netsize) {
- p = nnq->network[i];
- dist = p[2] - g; /* inx key */
- if (dist >= bestd) i = nnq->netsize; /* stop iter */
- else {
- i++;
- if (dist<0) dist = -dist;
- a = p[1] - b;
- if (a<0) a = -a;
- dist += a;
- if (dist<bestd) {
- a = p[3] - r;
- if (a<0) a = -a;
- dist += a;
- }
- if(dist<bestd) {
- a = p[0] - al;
- if (a<0) a = -a;
- dist += a;
- }
- if (dist<bestd) {
- bestd=dist;
- best=p[4];
- }
- }
- }
-
- if (j>=0) {
- p = nnq->network[j];
- dist = g - p[2]; /* inx key - reverse dif */
- if (dist >= bestd) j = -1; /* stop iter */
- else {
- j--;
- if (dist<0) dist = -dist;
- a = p[1] - b;
- if (a<0) a = -a;
- dist += a;
- if (dist<bestd) {
- a = p[3] - r;
- if (a<0) a = -a;
- dist += a;
- }
- if(dist<bestd) {
- a = p[0] - al;
- if (a<0) a = -a;
- dist += a;
- }
- if (dist<bestd) {
- bestd=dist;
- best=p[4];
- }
- }
- }
- }
-
- return(best);
-}
-
-/* Search for biased ABGR values
- ---------------------------- */
-static int contest(nnq, al,b,g,r)
-nn_quant *nnq;
-register int al,b,g,r;
-{
- /* finds closest neuron (min dist) and updates freq */
- /* finds best neuron (min dist-bias) and returns position */
- /* for frequently chosen neurons, freq[i] is high and bias[i] is negative */
- /* bias[i] = gamma*((1/netsize)-freq[i]) */
-
- register int i,dist,a,biasdist,betafreq;
- unsigned int bestpos,bestbiaspos;
- double bestd,bestbiasd;
- register int *p,*f, *n;
-
- bestd = ~(((int) 1)<<31);
- bestbiasd = bestd;
- bestpos = 0;
- bestbiaspos = bestpos;
- p = nnq->bias;
- f = nnq->freq;
-
- for (i=0; i< nnq->netsize; i++) {
- n = nnq->network[i];
- dist = n[0] - al;
- if (dist<0) dist = -dist;
- a = n[1] - b;
- if (a<0) a = -a;
- dist += a;
- a = n[2] - g;
- if (a<0) a = -a;
- dist += a;
- a = n[3] - r;
- if (a<0) a = -a;
- dist += a;
- if (dist<bestd) {
- bestd=dist;
- bestpos=i;
- }
- biasdist = dist - ((*p)>>(intbiasshift-netbiasshift));
- if (biasdist<bestbiasd) {
- bestbiasd=biasdist;
- bestbiaspos=i;
- }
- betafreq = (*f >> betashift);
- *f++ -= betafreq;
- *p++ += (betafreq<<gammashift);
- }
- nnq->freq[bestpos] += beta;
- nnq->bias[bestpos] -= betagamma;
- return(bestbiaspos);
-}
-
-
-/* Move neuron i towards biased (a,b,g,r) by factor alpha
- ---------------------------------------------------- */
-
-static void altersingle(nnq, alpha,i,al,b,g,r)
-nn_quant *nnq;
-register int alpha,i,al,b,g,r;
-{
- register int *n;
-
- n = nnq->network[i]; /* alter hit neuron */
- *n -= (alpha*(*n - al)) / initalpha;
- n++;
- *n -= (alpha*(*n - b)) / initalpha;
- n++;
- *n -= (alpha*(*n - g)) / initalpha;
- n++;
- *n -= (alpha*(*n - r)) / initalpha;
-}
-
-
-/* Move adjacent neurons by precomputed alpha*(1-((i-j)^2/[r]^2)) in radpower[|i-j|]
- --------------------------------------------------------------------------------- */
-
-static void alterneigh(nnq, rad,i,al,b,g,r)
-nn_quant *nnq;
-int rad,i;
-register int al,b,g,r;
-{
- register int j,k,lo,hi,a;
- register int *p, *q;
-
- lo = i-rad;
- if (lo<-1) lo=-1;
- hi = i+rad;
- if (hi>nnq->netsize) hi=nnq->netsize;
-
- j = i+1;
- k = i-1;
- q = nnq->radpower;
- while ((j<hi) || (k>lo)) {
- a = (*(++q));
- if (j<hi) {
- p = nnq->network[j];
- *p -= (a*(*p - al)) / alpharadbias;
- p++;
- *p -= (a*(*p - b)) / alpharadbias;
- p++;
- *p -= (a*(*p - g)) / alpharadbias;
- p++;
- *p -= (a*(*p - r)) / alpharadbias;
- j++;
- }
- if (k>lo) {
- p = nnq->network[k];
- *p -= (a*(*p - al)) / alpharadbias;
- p++;
- *p -= (a*(*p - b)) / alpharadbias;
- p++;
- *p -= (a*(*p - g)) / alpharadbias;
- p++;
- *p -= (a*(*p - r)) / alpharadbias;
- k--;
- }
- }
-}
-
-
-/* Main Learning Loop
- ------------------ */
-
-static void learn(nnq, verbose) /* Stu: N.B. added parameter so that main() could control verbosity. */
-nn_quant *nnq;
-int verbose;
-{
- register int i,j,al,b,g,r;
- int radius,rad,alpha,step,delta,samplepixels;
- register unsigned char *p;
- unsigned char *lim;
-
- nnq->alphadec = 30 + ((nnq->samplefac-1)/3);
- p = nnq->thepicture;
- lim = nnq->thepicture + nnq->lengthcount;
- samplepixels = nnq->lengthcount/(4 * nnq->samplefac);
- /* here's a problem with small images: samplepixels < ncycles => delta = 0 */
- delta = samplepixels/ncycles;
- /* kludge to fix */
- if(delta==0) delta = 1;
- alpha = initalpha;
- radius = initradius;
-
- rad = radius >> radiusbiasshift;
-
- for (i=0; i<rad; i++)
- nnq->radpower[i] = alpha*(((rad*rad - i*i)*radbias)/(rad*rad));
-
- if (verbose) gd_error_ex(GD_NOTICE, "beginning 1D learning: initial radius=%d\n", rad);
-
- if ((nnq->lengthcount%prime1) != 0) step = 4*prime1;
- else {
- if ((nnq->lengthcount%prime2) !=0) step = 4*prime2;
- else {
- if ((nnq->lengthcount%prime3) !=0) step = 4*prime3;
- else step = 4*prime4;
- }
- }
-
- i = 0;
- while (i < samplepixels) {
- al = p[ALPHA] << netbiasshift;
- b = p[BLUE] << netbiasshift;
- g = p[GREEN] << netbiasshift;
- r = p[RED] << netbiasshift;
- j = contest(nnq, al,b,g,r);
-
- altersingle(nnq, alpha,j,al,b,g,r);
- if (rad) alterneigh(nnq, rad,j,al,b,g,r); /* alter neighbours */
-
- p += step;
- while (p >= lim) p -= nnq->lengthcount;
-
- i++;
- if (i%delta == 0) { /* FPE here if delta=0*/
- alpha -= alpha / nnq->alphadec;
- radius -= radius / radiusdec;
- rad = radius >> radiusbiasshift;
- if (rad <= 1) rad = 0;
- for (j=0; j<rad; j++)
- nnq->radpower[j] = alpha*(((rad*rad - j*j)*radbias)/(rad*rad));
- }
- }
- if (verbose) gd_error_ex(GD_NOTICE, "finished 1D learning: final alpha=%f !\n",((float)alpha)/initalpha);
-}
-
-/**
- * Function: gdImageNeuQuant
- *
- * Creates a new palette image from a truecolor image
- *
- * This is the same as calling <gdImageCreatePaletteFromTrueColor> with the
- * quantization method <GD_QUANT_NEUQUANT>.
- *
- * Parameters:
- * im - The image.
- * max_color - The number of desired palette entries.
- * sample_factor - The quantization precision between 1 (highest quality) and
- * 10 (fastest).
- *
- * Returns:
- * A newly create palette image; NULL on failure.
- */
-BGD_DECLARE(gdImagePtr) gdImageNeuQuant(gdImagePtr im, const int max_color, int sample_factor)
-{
- const int newcolors = max_color;
- const int verbose = 1;
-
- int bot_idx, top_idx; /* for remapping of indices */
- int remap[MAXNETSIZE];
- int i,x;
-
- unsigned char map[MAXNETSIZE][4];
- unsigned char *d;
-
- nn_quant *nnq = NULL;
-
- int row;
- unsigned char *rgba = NULL;
- gdImagePtr dst = NULL;
-
- /* Default it to 3 */
- if (sample_factor < 1) {
- sample_factor = 3;
- }
- /* Start neuquant */
- /* Pierre:
- * This implementation works with aligned contiguous buffer only
- * Upcoming new buffers are contiguous and will be much faster.
- * let don't bloat this code to support our good "old" 31bit format.
- * It alos lets us convert palette image, if one likes to reduce
- * a palette
- */
- if (overflow2(gdImageSX(im), gdImageSY(im))
- || overflow2(gdImageSX(im) * gdImageSY(im), 4)) {
- goto done;
- }
- rgba = (unsigned char *) gdMalloc(gdImageSX(im) * gdImageSY(im) * 4);
- if (!rgba) {
- goto done;
- }
-
- d = rgba;
- for (row = 0; row < gdImageSY(im); row++) {
- int *p = im->tpixels[row];
- register int c;
-
- for (i = 0; i < gdImageSX(im); i++) {
- c = *p;
- *d++ = gdImageAlpha(im, c);
- *d++ = gdImageRed(im, c);
- *d++ = gdImageBlue(im, c);
- *d++ = gdImageGreen(im, c);
- p++;
- }
- }
-
- nnq = (nn_quant *) gdMalloc(sizeof(nn_quant));
- if (!nnq) {
- goto done;
- }
-
- initnet(nnq, rgba, gdImageSY(im) * gdImageSX(im) * 4, sample_factor, newcolors);
-
- learn(nnq, verbose);
- unbiasnet(nnq);
- getcolormap(nnq, (unsigned char*)map);
- inxbuild(nnq);
- /* remapping colormap to eliminate opaque tRNS-chunk entries... */
- for (top_idx = newcolors-1, bot_idx = x = 0; x < newcolors; ++x) {
- if (map[x][3] == 255) { /* maxval */
- remap[x] = top_idx--;
- } else {
- remap[x] = bot_idx++;
- }
- }
- if (bot_idx != top_idx + 1) {
- gd_error(" internal logic error: remapped bot_idx = %d, top_idx = %d\n",
- bot_idx, top_idx);
- goto done;
- }
-
- dst = gdImageCreate(gdImageSX(im), gdImageSY(im));
- if (!dst) {
- goto done;
- }
-
- for (x = 0; x < newcolors; ++x) {
- dst->red[remap[x]] = map[x][0];
- dst->green[remap[x]] = map[x][1];
- dst->blue[remap[x]] = map[x][2];
- dst->alpha[remap[x]] = map[x][3];
- dst->open[remap[x]] = 0;
- dst->colorsTotal++;
- }
-
- /* Do each image row */
- for ( row = 0; row < gdImageSY(im); ++row ) {
- int offset;
- unsigned char *p = dst->pixels[row];
-
- /* Assign the new colors */
- offset = row * gdImageSX(im) * 4;
- for(i=0; i < gdImageSX(im); i++) {
- p[i] = remap[
- inxsearch(nnq, rgba[i * 4 + offset + ALPHA],
- rgba[i * 4 + offset + BLUE],
- rgba[i * 4 + offset + GREEN],
- rgba[i * 4 + offset + RED])
- ];
- }
- }
-
-done:
- if (rgba) {
- gdFree(rgba);
- }
-
- if (nnq) {
- gdFree(nnq);
- }
- return dst;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_nnquant.h b/Build/source/libs/gd/libgd-src/src/gd_nnquant.h
deleted file mode 100644
index 11643b7d622..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_nnquant.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* maximum number of colours that can be used.
- actual number is now passed to initcolors */
-#define MAXNETSIZE 256
-
-/* For 256 colours, fixed arrays need 8kb, plus space for the image
- ---------------------------------------------------------------- */
-
-
-/* four primes near 500 - assume no image has a length so large */
-/* that it is divisible by all four primes */
-#define prime1 499
-#define prime2 491
-#define prime3 487
-#define prime4 503
-
-#define minpicturebytes (4*prime4) /* minimum size for input image */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_png.c b/Build/source/libs/gd/libgd-src/src/gd_png.c
deleted file mode 100644
index 8119cf39c05..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_png.c
+++ /dev/null
@@ -1,1145 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gd_errors.h"
-
-/* JCE: Arrange HAVE_LIBPNG so that it can be set in gd.h */
-#ifdef HAVE_LIBPNG
-
-#include "gdhelpers.h"
-#include "png.h" /* includes zlib.h and setjmp.h */
-
-#define TRUE 1
-#define FALSE 0
-
-/*---------------------------------------------------------------------------
-
- gd_png.c Copyright 1999 Greg Roelofs and Thomas Boutell
-
- The routines in this file, gdImagePng*() and gdImageCreateFromPng*(),
- are drop-in replacements for gdImageGif*() and gdImageCreateFromGif*(),
- except that these functions are noisier in the case of errors (comment
- out all fprintf() statements to disable that).
-
- GD 2.0 supports RGBA truecolor and will read and write truecolor PNGs.
- GD 2.0 supports 8 bits of color resolution per channel and
- 7 bits of alpha channel resolution. Images with more than 8 bits
- per channel are reduced to 8 bits. Images with an alpha channel are
- only able to resolve down to '1/128th opaque' instead of '1/256th',
- and this conversion is also automatic. I very much doubt you can see it.
- Both tRNS and true alpha are supported.
-
- Gamma is ignored, and there is no support for text annotations.
-
- Last updated: 9 February 2001
-
- ---------------------------------------------------------------------------*/
-
-/**
- * File: PNG IO
- *
- * Read and write PNG images.
- */
-
-#ifdef PNG_SETJMP_SUPPORTED
-typedef struct _jmpbuf_wrapper {
- jmp_buf jmpbuf;
-}
-jmpbuf_wrapper;
-
-static void
-gdPngErrorHandler (png_structp png_ptr, png_const_charp msg)
-{
- jmpbuf_wrapper *jmpbuf_ptr;
-
- /* This function, aside from the extra step of retrieving the "error
- * pointer" (below) and the fact that it exists within the application
- * rather than within libpng, is essentially identical to libpng's
- * default error handler. The second point is critical: since both
- * setjmp() and longjmp() are called from the same code, they are
- * guaranteed to have compatible notions of how big a jmp_buf is,
- * regardless of whether _BSD_SOURCE or anything else has (or has not)
- * been defined. */
-
- gd_error_ex(GD_WARNING, "gd-png: fatal libpng error: %s\n", msg);
-
- jmpbuf_ptr = png_get_error_ptr (png_ptr);
- if (jmpbuf_ptr == NULL) { /* we are completely hosed now */
- gd_error_ex(GD_ERROR, "gd-png: EXTREMELY fatal error: jmpbuf unrecoverable; terminating.\n");
- exit (99);
- }
-
- longjmp (jmpbuf_ptr->jmpbuf, 1);
-}
-#endif
-
-static void
-gdPngReadData (png_structp png_ptr, png_bytep data, png_size_t length)
-{
- int check;
- check = gdGetBuf (data, length, (gdIOCtx *) png_get_io_ptr (png_ptr));
- if (check != (int)length) {
- png_error(png_ptr, "Read Error: truncated data");
- }
-}
-
-static void
-gdPngWriteData (png_structp png_ptr, png_bytep data, png_size_t length)
-{
- gdPutBuf (data, length, (gdIOCtx *) png_get_io_ptr (png_ptr));
-}
-
-static void
-gdPngFlushData (png_structp png_ptr)
-{
- (void)png_ptr;
-}
-
-/*
- Function: gdImageCreateFromPng
-
- <gdImageCreateFromPng> is called to load images from PNG format
- files. Invoke <gdImageCreateFromPng> with an already opened
- pointer to a FILE containing the desired
- image. <gdImageCreateFromPng> returns a <gdImagePtr> to the new
- image, or NULL if unable to load the image (most often because the
- file is corrupt or does not contain a PNG
- image). <gdImageCreateFromPng> does not close the file. You can
- inspect the sx and sy members of the image to determine its
- size. The image must eventually be destroyed using
- gdImageDestroy().
-
- If the PNG image being loaded is a truecolor image, the resulting
- gdImagePtr will refer to a truecolor image. If the PNG image being
- loaded is a palette or grayscale image, the resulting gdImagePtr
- will refer to a palette image. gd retains only 8 bits of
- resolution for each of the red, green and blue channels, and only
- 7 bits of resolution for the alpha channel. The former restriction
- affects only a handful of very rare 48-bit color and 16-bit
- grayscale PNG images. The second restriction affects all
- semitransparent PNG images, but the difference is essentially
- invisible to the eye. 7 bits of alpha channel resolution is, in
- practice, quite a lot.
-
- Variants:
-
- <gdImageCreateFromPngPtr> creates an image from PNG data (i.e. the
- contents of a PNG file) already in memory.
-
- <gdImageCreateFromPngCtx> reads in an image using the functions in
- a <gdIOCtx> struct.
-
- <gdImageCreateFromPngSource> is similar to
- <gdImageCreateFromPngCtx> but uses the old <gdSource> interface.
- It is *obsolete*.
-
- Parameters:
-
- infile - The input FILE pointer.
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
- (start code)
-
- gdImagePtr im;
- ... inside a function ...
- FILE *in;
- in = fopen("mypng.png", "rb");
- im = gdImageCreateFromPng(in);
- fclose(in);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
- */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPng (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx (inFile);
- if (in == NULL) return NULL;
- im = gdImageCreateFromPngCtx (in);
- in->gd_free (in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromPngPtr
-
- See <gdImageCreateFromPng>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
- if(!in)
- return 0;
- im = gdImageCreateFromPngCtx (in);
- in->gd_free (in);
- return im;
-}
-
-
-
-/* This routine is based in part on the Chapter 13 demo code in
- * "PNG: The Definitive Guide" (http://www.libpng.org/pub/png/book/).
- */
-
-/*
- Function: gdImageCreateFromPngCtx
-
- See <gdImageCreateFromPng>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngCtx (gdIOCtx * infile)
-{
- png_byte sig[8];
-#ifdef PNG_SETJMP_SUPPORTED
- jmpbuf_wrapper jbw;
-#endif
- png_structp png_ptr;
- png_infop info_ptr;
- png_uint_32 width, height, rowbytes, w, h, res_x, res_y;
- int bit_depth, color_type, interlace_type, unit_type;
- int num_palette = 0, num_trans;
- png_colorp palette;
- png_color_16p trans_gray_rgb;
- png_color_16p trans_color_rgb;
- png_bytep trans;
- png_bytep image_data = NULL;
- png_bytepp row_pointers = NULL;
- gdImagePtr im = NULL;
- int i, j, *open = NULL;
- volatile int transparent = -1;
- volatile int palette_allocated = FALSE;
-
- /* Make sure the signature can't match by dumb luck -- TBB */
- /* GRR: isn't sizeof(infile) equal to the size of the pointer? */
- memset (sig, 0, sizeof (sig));
-
- /* first do a quick check that the file really is a PNG image; could
- * have used slightly more general png_sig_cmp() function instead */
- if (gdGetBuf (sig, 8, infile) < 8) {
- return NULL;
- }
-
- if (png_sig_cmp(sig, 0, 8) != 0) { /* bad signature */
- return NULL; /* bad signature */
- }
-
-#ifdef PNG_SETJMP_SUPPORTED
- png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, &jbw, gdPngErrorHandler, NULL);
-#else
- png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-#endif
- if (png_ptr == NULL) {
- gd_error("gd-png error: cannot allocate libpng main struct\n");
- return NULL;
- }
-
- info_ptr = png_create_info_struct (png_ptr);
- if (info_ptr == NULL) {
- gd_error("gd-png error: cannot allocate libpng info struct\n");
- png_destroy_read_struct (&png_ptr, NULL, NULL);
-
- return NULL;
- }
-
- /* we could create a second info struct here (end_info), but it's only
- * useful if we want to keep pre- and post-IDAT chunk info separated
- * (mainly for PNG-aware image editors and converters)
- */
-
- /* setjmp() must be called in every non-callback function that calls a
- * PNG-reading libpng function. We must reset it everytime we get a
- * new allocation that we save in a stack variable.
- */
-#ifdef PNG_SETJMP_SUPPORTED
- if (setjmp(jbw.jmpbuf)) {
- gd_error("gd-png error: setjmp returns error condition 1\n");
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
-
- return NULL;
- }
-#endif
-
- png_set_sig_bytes (png_ptr, 8); /* we already read the 8 signature bytes */
-
- png_set_read_fn (png_ptr, (void *) infile, gdPngReadData);
- png_read_info (png_ptr, info_ptr); /* read all PNG info up to image data */
-
- png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, &interlace_type, NULL, NULL);
- if ((color_type == PNG_COLOR_TYPE_RGB) || (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
- || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
- im = gdImageCreateTrueColor ((int) width, (int) height);
- } else {
- im = gdImageCreate ((int) width, (int) height);
- }
- if (im == NULL) {
- gd_error("gd-png error: cannot allocate gdImage struct\n");
- goto error;
- }
-
- if (bit_depth == 16) {
- png_set_strip_16 (png_ptr);
- } else if (bit_depth < 8) {
- png_set_packing (png_ptr); /* expand to 1 byte per pixel */
- }
-
- /* setjmp() must be called in every non-callback function that calls a
- * PNG-reading libpng function. We must reset it everytime we get a
- * new allocation that we save in a stack variable.
- */
-#ifdef PNG_SETJMP_SUPPORTED
- if (setjmp(jbw.jmpbuf)) {
- gd_error("gd-png error: setjmp returns error condition 2\n");
- goto error;
- }
-#endif
-
-#ifdef PNG_pHYs_SUPPORTED
- /* check if the resolution is specified */
- if (png_get_valid(png_ptr, info_ptr, PNG_INFO_pHYs)) {
- if (png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y, &unit_type)) {
- switch (unit_type) {
- case PNG_RESOLUTION_METER:
- im->res_x = DPM2DPI(res_x);
- im->res_y = DPM2DPI(res_y);
- break;
- }
- }
- }
-#endif
-
- switch (color_type) {
- case PNG_COLOR_TYPE_PALETTE:
- png_get_PLTE (png_ptr, info_ptr, &palette, &num_palette);
-#ifdef DEBUG
- gd_error("gd-png color_type is palette, colors: %d\n", num_palette);
-#endif /* DEBUG */
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {
- /* gd 2.0: we support this rather thoroughly now. Grab the
- * first fully transparent entry, if any, as the value of
- * the simple-transparency index, mostly for backwards
- * binary compatibility. The alpha channel is where it's
- * really at these days.
- */
- int firstZero = 1;
- png_get_tRNS (png_ptr, info_ptr, &trans, &num_trans, NULL);
- for (i = 0; i < num_trans; ++i) {
- im->alpha[i] = gdAlphaMax - (trans[i] >> 1);
- if ((trans[i] == 0) && (firstZero)) {
- /* 2.0.5: long-forgotten patch from Wez Furlong */
- transparent = i;
- firstZero = 0;
- }
- }
- }
- break;
-
- case PNG_COLOR_TYPE_GRAY:
- /* create a fake palette and check for single-shade transparency */
- if ((palette = (png_colorp) gdMalloc (256 * sizeof (png_color))) == NULL) {
- gd_error("gd-png error: cannot allocate gray palette\n");
- goto error;
- }
- palette_allocated = TRUE;
- if (bit_depth < 8) {
- num_palette = 1 << bit_depth;
- for (i = 0; i < 256; ++i) {
- j = (255 * i) / (num_palette - 1);
- palette[i].red = palette[i].green = palette[i].blue = j;
- }
- } else {
- num_palette = 256;
- for (i = 0; i < 256; ++i) {
- palette[i].red = palette[i].green = palette[i].blue = i;
- }
- }
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {
- png_get_tRNS (png_ptr, info_ptr, NULL, NULL, &trans_gray_rgb);
- if (bit_depth == 16) { /* png_set_strip_16() not yet in effect */
- transparent = trans_gray_rgb->gray >> 8;
- } else {
- transparent = trans_gray_rgb->gray;
- }
- /* Note slight error in 16-bit case: up to 256 16-bit shades
- * may get mapped to a single 8-bit shade, and only one of them
- * is supposed to be transparent. IOW, both opaque pixels and
- * transparent pixels will be mapped into the transparent entry.
- * There is no particularly good way around this in the case
- * that all 256 8-bit shades are used, but one could write some
- * custom 16-bit code to handle the case where there are gdFree
- * palette entries. This error will be extremely rare in
- * general, though. (Quite possibly there is only one such
- * image in existence.) */
- }
- break;
-
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- png_set_gray_to_rgb(png_ptr);
-
- case PNG_COLOR_TYPE_RGB:
- case PNG_COLOR_TYPE_RGB_ALPHA:
- /* gd 2.0: we now support truecolor. See the comment above
- for a rare situation in which the transparent pixel may not
- work properly with 16-bit channels. */
- if (png_get_valid (png_ptr, info_ptr, PNG_INFO_tRNS)) {
- png_get_tRNS (png_ptr, info_ptr, NULL, NULL, &trans_color_rgb);
- if (bit_depth == 16) { /* png_set_strip_16() not yet in effect */
- transparent = gdTrueColor (trans_color_rgb->red >> 8,
- trans_color_rgb->green >> 8,
- trans_color_rgb->blue >> 8);
- } else {
- transparent = gdTrueColor (trans_color_rgb->red,
- trans_color_rgb->green,
- trans_color_rgb->blue);
- }
- }
- break;
- default:
- gd_error("gd-png color_type is unknown: %d\n", color_type);
- goto error;
- }
-
- png_read_update_info (png_ptr, info_ptr);
-
- /* allocate space for the PNG image data */
- rowbytes = png_get_rowbytes (png_ptr, info_ptr);
- if (overflow2(rowbytes, height))
- goto error;
- image_data = (png_bytep) gdMalloc (rowbytes * height);
- if (!image_data) {
- gd_error("gd-png error: cannot allocate image data\n");
- goto error;
- }
- if (overflow2(height, sizeof (png_bytep)))
- goto error;
-
- row_pointers = (png_bytepp) gdMalloc (height * sizeof (png_bytep));
- if (!row_pointers) {
- gd_error("gd-png error: cannot allocate row pointers\n");
- goto error;
- }
-
- /* setjmp() must be called in every non-callback function that calls a
- * PNG-reading libpng function. We must reset it everytime we get a
- * new allocation that we save in a stack variable.
- */
-#ifdef PNG_SETJMP_SUPPORTED
- if (setjmp(jbw.jmpbuf)) {
- gd_error("gd-png error: setjmp returns error condition 3\n");
- goto error;
- }
-#endif
-
- /* set the individual row_pointers to point at the correct offsets */
- for (h = 0; h < height; ++h) {
- row_pointers[h] = image_data + h * rowbytes;
- }
-
- png_read_image (png_ptr, row_pointers); /* read whole image... */
- png_read_end (png_ptr, NULL); /* ...done! */
-
- if (!im->trueColor) {
- im->colorsTotal = num_palette;
- /* load the palette and mark all entries "open" (unused) for now */
- open = im->open;
- for (i = 0; i < num_palette; ++i) {
- im->red[i] = palette[i].red;
- im->green[i] = palette[i].green;
- im->blue[i] = palette[i].blue;
- open[i] = 1;
- }
- for (i = num_palette; i < gdMaxColors; ++i) {
- open[i] = 1;
- }
- }
- /* 2.0.12: Slaven Rezic: palette images are not the only images
- with a simple transparent color setting */
- im->transparent = transparent;
- im->interlace = (interlace_type == PNG_INTERLACE_ADAM7);
-
- /* can't nuke structs until done with palette */
- png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
- switch (color_type) {
- case PNG_COLOR_TYPE_RGB:
- for (h = 0; h < height; h++) {
- int boffset = 0;
- for (w = 0; w < width; w++) {
- register png_byte r = row_pointers[h][boffset++];
- register png_byte g = row_pointers[h][boffset++];
- register png_byte b = row_pointers[h][boffset++];
- im->tpixels[h][w] = gdTrueColor (r, g, b);
- }
- }
- break;
-
- case PNG_COLOR_TYPE_GRAY_ALPHA:
- case PNG_COLOR_TYPE_RGB_ALPHA:
- for (h = 0; h < height; h++) {
- int boffset = 0;
- for (w = 0; w < width; w++) {
- register png_byte r = row_pointers[h][boffset++];
- register png_byte g = row_pointers[h][boffset++];
- register png_byte b = row_pointers[h][boffset++];
-
- /* gd has only 7 bits of alpha channel resolution, and
- * 127 is transparent, 0 opaque. A moment of convenience,
- * a lifetime of compatibility.
- */
-
- register png_byte a = gdAlphaMax - (row_pointers[h][boffset++] >> 1);
- im->tpixels[h][w] = gdTrueColorAlpha(r, g, b, a);
- }
- }
- break;
- default:
- if (!im->trueColor) {
- /* Palette image, or something coerced to be one */
- for (h = 0; h < height; ++h) {
- for (w = 0; w < width; ++w) {
- register png_byte idx = row_pointers[h][w];
- im->pixels[h][w] = idx;
- open[idx] = 0;
- }
- }
- }
- }
-#ifdef DEBUG
- if (!im->trueColor) {
- for (i = num_palette; i < gdMaxColors; ++i) {
- if (!open[i]) {
- fprintf (stderr,
- "gd-png warning: image data references out-of-range"
- " color index (%d)\n", i);
- }
- }
- }
-#endif
-
- done:
- if (palette_allocated) {
- gdFree (palette);
- }
- if (image_data)
- gdFree(image_data);
- if (row_pointers)
- gdFree(row_pointers);
-
- return im;
-
- error:
- png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
- if (im) {
- gdImageDestroy(im);
- im = NULL;
- }
- goto done;
-}
-
-
-/*
- Function: gdImagePngEx
-
- <gdImagePngEx> outputs the specified image to the specified file in
- PNG format. The file must be open for writing. Under MSDOS and all
- versions of Windows, it is important to use "wb" as opposed to
- simply "w" as the mode when opening the file, and under Unix there
- is no penalty for doing so. <gdImagePngEx> does not close the file;
- your code must do so.
-
- In addition, <gdImagePngEx> allows the level of compression to be
- specified. A compression level of 0 means "no compression." A
- compression level of 1 means "compressed, but as quickly as
- possible." A compression level of 9 means "compressed as much as
- possible to produce the smallest possible file." A compression level
- of -1 will use the default compression level at the time zlib was
- compiled on your system.
-
- Variants:
-
- <gdImagePng> is equivalent to calling <gdImagePngEx> with
- compression of -1.
-
- <gdImagePngCtx> and <gdImagePngCtxEx> write via a <gdIOCtx>
- instead of a file handle.
-
- <gdImagePngPtr> and <gdImagePngPtrEx> store the image file to
- memory.
-
- Parameters:
-
- im - the image to write
- outFile - the output FILE* object.
- level - compression level: 0 -> none, 1-9 -> level, -1 -> default
-
- Returns:
-
- Nothing.
-
- Example:
- (start code)
-
- gdImagePtr im;
- int black, white;
- FILE *out;
-
- im = gdImageCreate(100, 100); // Create the image
- white = gdImageColorAllocate(im, 255, 255, 255); // Alloc background
- black = gdImageColorAllocate(im, 0, 0, 0); // Allocate drawing color
- gdImageRectangle(im, 0, 0, 99, 99, black); // Draw rectangle
- out = fopen("rect.png", "wb"); // Open output file (binary)
- gdImagePngEx(im, out, 9); // Write PNG, max compression
- fclose(out); // Close file
- gdImageDestroy(im); // Destroy image
-
- (end code)
-*/
-BGD_DECLARE(void) gdImagePngEx (gdImagePtr im, FILE * outFile, int level)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- if (out == NULL) return;
- gdImagePngCtxEx (im, out, level);
- out->gd_free (out);
-}
-
-/*
- Function: gdImagePng
-
- Equivalent to calling <gdImagePngEx> with compression of -1.
-
- Parameters:
-
- im - the image to save.
- outFile - the output FILE*.
-
- Returns:
-
- Nothing.
-*/
-BGD_DECLARE(void) gdImagePng (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx (outFile);
- if (out == NULL) return;
- gdImagePngCtxEx (im, out, -1);
- out->gd_free (out);
-}
-
-static int _gdImagePngCtxEx(gdImagePtr im, gdIOCtx * outfile, int level);
-
-/*
- Function: gdImagePngPtr
-
- Equivalent to calling <gdImagePngPtrEx> with compression of -1.
-
- See <gdImagePngEx> for more information.
-
- Parameters:
-
- im - the image to save.
- size - Output: size in bytes of the result.
-
- Returns:
-
- A pointer to memory containing the image data or NULL on error.
-
-*/
-BGD_DECLARE(void *) gdImagePngPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImagePngCtxEx (im, out, -1)) {
- rv = gdDPExtractData (out, size);
- } else {
- rv = NULL;
- }
- out->gd_free (out);
- return rv;
-}
-
-/*
- Function: gdImagePngPtrEx
-
- Identical to <gdImagePngEx> except that it returns a pointer to a
- memory area with the PNG data. This memory must be freed by the
- caller when it is no longer needed. **The caller must invoke
- gdFree(), not free()**
-
- The 'size' parameter receives the total size of the block of
- memory.
-
- See <gdImagePngEx> for more information.
-
- Parameters:
-
- im - the image to save.
- size - Output: size in bytes of the result.
- level - compression level: 0 -> none, 1-9 -> level, -1 -> default
-
- Returns:
-
- A pointer to memory containing the image data or NULL on error.
-
-*/
-BGD_DECLARE(void *) gdImagePngPtrEx (gdImagePtr im, int *size, int level)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImagePngCtxEx (im, out, level)) {
- rv = gdDPExtractData (out, size);
- } else {
- rv = NULL;
- }
- out->gd_free (out);
- return rv;
-}
-
-
-
-/*
- Function: gdImagePngCtx
-
- Equivalent to calling <gdImagePngCtxEx> with compression of -1.
- See <gdImagePngEx> for more information.
-
- Parameters:
-
- im - the image to save.
- outfile - the <gdIOCtx> to write to.
-
- Returns:
-
- Nothing.
-
-*/
-BGD_DECLARE(void) gdImagePngCtx (gdImagePtr im, gdIOCtx * outfile)
-{
- /* 2.0.13: 'return' here was an error, thanks to Kevin Smith */
- gdImagePngCtxEx (im, outfile, -1);
-}
-
-
-
-
-/*
- Function: gdImagePngCtxEx
-
- Outputs the given image as PNG data, but using a <gdIOCtx> instead
- of a file. See <gdIamgePnEx>.
-
- Parameters:
-
- im - the image to save.
- outfile - the <gdIOCtx> to write to.
- level - compression level: 0 -> none, 1-9 -> level, -1 -> default
-
- Returns:
-
- Nothing.
-
-*/
-BGD_DECLARE(void) gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level)
-{
- _gdImagePngCtxEx(im, outfile, level);
-}
-
-/* This routine is based in part on code from Dale Lutz (Safe Software Inc.)
- * and in part on demo code from Chapter 15 of "PNG: The Definitive Guide"
- * (http://www.libpng.org/pub/png/book/).
- */
-/* returns 0 on success, 1 on failure */
-static int _gdImagePngCtxEx(gdImagePtr im, gdIOCtx * outfile, int level)
-{
- int i, j, bit_depth = 0, interlace_type;
- int width = im->sx;
- int height = im->sy;
- int colors = im->colorsTotal;
- int *open = im->open;
- int mapping[gdMaxColors]; /* mapping[gd_index] == png_index */
- png_byte trans_values[256];
- png_color_16 trans_rgb_value;
- png_color palette[gdMaxColors];
- png_structp png_ptr;
- png_infop info_ptr;
- png_bytep *row_pointers = NULL;
- volatile int transparent = im->transparent;
- volatile int remap = FALSE;
-#ifdef PNG_SETJMP_SUPPORTED
- jmpbuf_wrapper jbw;
-#endif
- int ret = 0;
-
- /* width or height of value 0 is invalid in IHDR;
- see http://www.w3.org/TR/PNG-Chunks.html */
- if (width == 0 || height ==0) return 1;
-
-#ifdef PNG_SETJMP_SUPPORTED
- png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING,
- &jbw, gdPngErrorHandler,
- NULL);
-#else
- png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-#endif
- if (png_ptr == NULL) {
- gd_error("gd-png error: cannot allocate libpng main struct\n");
- return 1;
- }
-
- info_ptr = png_create_info_struct (png_ptr);
- if (info_ptr == NULL) {
- gd_error("gd-png error: cannot allocate libpng info struct\n");
- png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
- return 1;
- }
-
-#ifdef PNG_SETJMP_SUPPORTED
- if (setjmp(jbw.jmpbuf)) {
- gd_error("gd-png error: setjmp returns error condition\n");
- png_destroy_write_struct (&png_ptr, &info_ptr);
-
- if (row_pointers) {
- for (i = 0; i < height; ++i)
- gdFree(row_pointers[i]);
- gdFree(row_pointers);
- }
-
- return 1;
- }
-#endif
-
- png_set_write_fn (png_ptr, (void *) outfile, gdPngWriteData,
- gdPngFlushData);
-
- /* This is best for palette images, and libpng defaults to it for
- palette images anyway, so we don't need to do it explicitly.
- What to ideally do for truecolor images depends, alas, on the image.
- gd is intentionally imperfect and doesn't spend a lot of time
- fussing with such things. */
-
- /* Faster if this is uncommented, but may produce larger truecolor files.
- Wait for gdImagePngCtxEx. */
-#if 0
- png_set_filter (png_ptr, 0, PNG_FILTER_NONE);
-#endif
-
- /* 2.0.12: this is finally a parameter */
- png_set_compression_level (png_ptr, level);
-
-#ifdef PNG_pHYs_SUPPORTED
- /* 2.1.0: specify the resolution */
- png_set_pHYs(png_ptr, info_ptr, DPI2DPM(im->res_x), DPI2DPM(im->res_y),
- PNG_RESOLUTION_METER);
-#endif
-
- /* can set this to a smaller value without compromising compression if all
- * image data is 16K or less; will save some decoder memory [min == 8] */
- /* png_set_compression_window_bits(png_ptr, 15); */
-
- if (!im->trueColor) {
- if (transparent >= im->colorsTotal ||
- (transparent >= 0 && open[transparent]))
- transparent = -1;
- }
- if (!im->trueColor) {
- for (i = 0; i < gdMaxColors; ++i)
- mapping[i] = -1;
- }
- if (!im->trueColor) {
- /* count actual number of colors used (colorsTotal == high-water mark) */
- colors = 0;
- for (i = 0; i < im->colorsTotal; ++i) {
- if (!open[i]) {
- mapping[i] = colors;
- ++colors;
- }
- }
- if (colors == 0) {
- gd_error("gd-png error: no colors in palette\n");
- ret = 1;
- goto bail;
- }
- if (colors < im->colorsTotal) {
- remap = TRUE;
- }
- if (colors <= 2)
- bit_depth = 1;
- else if (colors <= 4)
- bit_depth = 2;
- else if (colors <= 16)
- bit_depth = 4;
- else
- bit_depth = 8;
- }
- interlace_type = im->interlace ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE;
-
- if (im->trueColor) {
- if (im->saveAlphaFlag) {
- png_set_IHDR (png_ptr, info_ptr, width, height, 8,
- PNG_COLOR_TYPE_RGB_ALPHA, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT,
- PNG_FILTER_TYPE_DEFAULT);
- } else {
- png_set_IHDR (png_ptr, info_ptr, width, height, 8,
- PNG_COLOR_TYPE_RGB, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT,
- PNG_FILTER_TYPE_DEFAULT);
- }
- } else {
- png_set_IHDR (png_ptr, info_ptr, width, height, bit_depth,
- PNG_COLOR_TYPE_PALETTE, interlace_type,
- PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
- }
- if (im->trueColor && (!im->saveAlphaFlag) && (transparent >= 0)) {
- /* 2.0.9: fixed by Thomas Winzig */
- trans_rgb_value.red = gdTrueColorGetRed (im->transparent);
- trans_rgb_value.green = gdTrueColorGetGreen (im->transparent);
- trans_rgb_value.blue = gdTrueColorGetBlue (im->transparent);
- png_set_tRNS (png_ptr, info_ptr, 0, 0, &trans_rgb_value);
- }
- if (!im->trueColor) {
- /* Oy veh. Remap the PNG palette to put the
- entries with interesting alpha channel
- values first. This minimizes the size
- of the tRNS chunk and thus the size
- of the PNG file as a whole. */
- int tc = 0;
- int i;
- int j;
- int k;
- for (i = 0; (i < im->colorsTotal); i++) {
- if ((!im->open[i]) && (im->alpha[i] != gdAlphaOpaque)) {
- tc++;
- }
- }
- if (tc) {
-#if 0
- for (i = 0; (i < im->colorsTotal); i++) {
- trans_values[i] = 255 -
- ((im->alpha[i] << 1) + (im->alpha[i] >> 6));
- }
- png_set_tRNS (png_ptr, info_ptr, trans_values, 256, NULL);
-#endif
- if (!remap) {
- remap = TRUE;
- }
- /* (Semi-)transparent indexes come up from the bottom
- of the list of real colors; opaque
- indexes come down from the top */
- j = 0;
- k = colors - 1;
- for (i = 0; (i < im->colorsTotal); i++) {
- if (!im->open[i]) {
- if (im->alpha[i] != gdAlphaOpaque) {
- /* Andrew Hull: >> 6, not >> 7! (gd 2.0.5) */
- trans_values[j] = 255 -
- ((im->alpha[i] << 1) + (im->alpha[i] >> 6));
- mapping[i] = j++;
- } else {
- mapping[i] = k--;
- }
- }
- }
- png_set_tRNS (png_ptr, info_ptr, trans_values, tc, NULL);
- }
- }
-
- /* convert palette to libpng layout */
- if (!im->trueColor) {
- if (remap)
- for (i = 0; i < im->colorsTotal; ++i) {
- if (mapping[i] < 0)
- continue;
- palette[mapping[i]].red = im->red[i];
- palette[mapping[i]].green = im->green[i];
- palette[mapping[i]].blue = im->blue[i];
- }
- else
- for (i = 0; i < colors; ++i) {
- palette[i].red = im->red[i];
- palette[i].green = im->green[i];
- palette[i].blue = im->blue[i];
- }
- png_set_PLTE (png_ptr, info_ptr, palette, colors);
- }
-
- /* write out the PNG header info (everything up to first IDAT) */
- png_write_info (png_ptr, info_ptr);
-
- /* make sure < 8-bit images are packed into pixels as tightly as possible */
- png_set_packing (png_ptr);
-
- /* This code allocates a set of row buffers and copies the gd image data
- * into them only in the case that remapping is necessary; in gd 1.3 and
- * later, the im->pixels array is laid out identically to libpng's row
- * pointers and can be passed to png_write_image() function directly.
- * The remapping case could be accomplished with less memory for non-
- * interlaced images, but interlacing causes some serious complications. */
- if (im->trueColor) {
- /* performance optimizations by Phong Tran */
- int channels = im->saveAlphaFlag ? 4 : 3;
- /* Our little 7-bit alpha channel trick costs us a bit here. */
- unsigned char *pOutputRow;
- int **ptpixels = im->tpixels;
- int *pThisRow;
- unsigned char a;
- int thisPixel;
- png_bytep *prow_pointers;
- int saveAlphaFlag = im->saveAlphaFlag;
- if (overflow2(sizeof (png_bytep), height)) {
- ret = 1;
- goto bail;
- }
- /* Need to use calloc so we can clean it up sanely in the error handler. */
- row_pointers = gdCalloc(height, sizeof (png_bytep));
- if (row_pointers == NULL) {
- gd_error("gd-png error: unable to allocate row_pointers\n");
- ret = 1;
- goto bail;
- }
- prow_pointers = row_pointers;
- for (j = 0; j < height; ++j) {
- if (overflow2(width, channels) || ((*prow_pointers =
- (png_bytep) gdMalloc (width * channels)) == NULL)) {
- gd_error("gd-png error: unable to allocate rows\n");
- for (i = 0; i < j; ++i)
- gdFree (row_pointers[i]);
- /* 2.0.29: memory leak TBB */
- gdFree(row_pointers);
- ret = 1;
- goto bail;
- }
- pOutputRow = *prow_pointers++;
- pThisRow = *ptpixels++;
- for (i = 0; i < width; ++i) {
- thisPixel = *pThisRow++;
- *pOutputRow++ = gdTrueColorGetRed (thisPixel);
- *pOutputRow++ = gdTrueColorGetGreen (thisPixel);
- *pOutputRow++ = gdTrueColorGetBlue (thisPixel);
-
- if (saveAlphaFlag) {
- /* convert the 7-bit alpha channel to an 8-bit alpha channel.
- We do a little bit-flipping magic, repeating the MSB
- as the LSB, to ensure that 0 maps to 0 and
- 127 maps to 255. We also have to invert to match
- PNG's convention in which 255 is opaque. */
- a = gdTrueColorGetAlpha (thisPixel);
- /* Andrew Hull: >> 6, not >> 7! (gd 2.0.5) */
- *pOutputRow++ = 255 - ((a << 1) + (a >> 6));
- }
- }
- }
-
- png_write_image (png_ptr, row_pointers);
- png_write_end (png_ptr, info_ptr);
-
- for (j = 0; j < height; ++j)
- gdFree (row_pointers[j]);
- gdFree (row_pointers);
- } else {
- if (remap) {
- png_bytep *row_pointers;
- if (overflow2(sizeof (png_bytep), height)) {
- ret = 1;
- goto bail;
- }
- row_pointers = gdMalloc (sizeof (png_bytep) * height);
- if (row_pointers == NULL) {
- gd_error("gd-png error: unable to allocate row_pointers\n");
- ret = 1;
- goto bail;
- }
- for (j = 0; j < height; ++j) {
- if ((row_pointers[j] = (png_bytep) gdMalloc (width)) == NULL) {
- gd_error("gd-png error: unable to allocate rows\n");
- for (i = 0; i < j; ++i)
- gdFree (row_pointers[i]);
- /* TBB: memory leak */
- gdFree (row_pointers);
- ret = 1;
- goto bail;
- }
- for (i = 0; i < width; ++i)
- row_pointers[j][i] = mapping[im->pixels[j][i]];
- }
-
- png_write_image (png_ptr, row_pointers);
- png_write_end (png_ptr, info_ptr);
-
- for (j = 0; j < height; ++j)
- gdFree (row_pointers[j]);
- gdFree (row_pointers);
- } else {
- png_write_image (png_ptr, im->pixels);
- png_write_end (png_ptr, info_ptr);
- }
- }
- /* 1.6.3: maybe we should give that memory BACK! TBB */
-bail:
- png_destroy_write_struct (&png_ptr, &info_ptr);
- return ret;
-}
-
-#else /* !HAVE_LIBPNG */
-
-static void _noPngError(void)
-{
- gd_error("PNG image support has been disabled\n");
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPng (FILE * inFile)
-{
- _noPngError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngPtr (int size, void *data)
-{
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngCtx (gdIOCtx * infile)
-{
- return NULL;
-}
-
-BGD_DECLARE(void) gdImagePngEx (gdImagePtr im, FILE * outFile, int level)
-{
- _noPngError();
-}
-
-BGD_DECLARE(void) gdImagePng (gdImagePtr im, FILE * outFile)
-{
- _noPngError();
-}
-
-BGD_DECLARE(void *) gdImagePngPtr (gdImagePtr im, int *size)
-{
- return NULL;
-}
-
-BGD_DECLARE(void *) gdImagePngPtrEx (gdImagePtr im, int *size, int level)
-{
- return NULL;
-}
-
-BGD_DECLARE(void) gdImagePngCtx (gdImagePtr im, gdIOCtx * outfile)
-{
- _noPngError();
-}
-
-BGD_DECLARE(void) gdImagePngCtxEx (gdImagePtr im, gdIOCtx * outfile, int level)
-{
- _noPngError();
-}
-
-#endif /* HAVE_LIBPNG */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_rotate.c b/Build/source/libs/gd/libgd-src/src/gd_rotate.c
deleted file mode 100644
index 3d7025001bf..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_rotate.c
+++ /dev/null
@@ -1,364 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include "gd.h"
-#include "gd_intern.h"
-#include <math.h>
-
-/*
- * Rotate function Added on 2003/12
- * by Pierre-Alain Joye (pierre@php.net)
- **/
-/* Begin rotate function */
-#ifdef ROTATE_PI
-#undef ROTATE_PI
-#endif /* ROTATE_PI */
-
-typedef int (BGD_STDCALL *FuncPtr)(gdImagePtr, int, int);
-
-#define ROTATE_DEG2RAD 3.1415926535897932384626433832795/180
-void gdImageSkewX (gdImagePtr dst, gdImagePtr src, int uRow, int iOffset, double dWeight, int clrBack, int ignoretransparent)
-{
- int i, r, g, b, a, clrBackR, clrBackG, clrBackB, clrBackA;
- FuncPtr f;
-
- int pxlOldLeft, pxlLeft=0, pxlSrc;
-
- /* Keep clrBack as color index if required */
- if (src->trueColor) {
- pxlOldLeft = clrBack;
- f = gdImageGetTrueColorPixel;
- } else {
- pxlOldLeft = clrBack;
- clrBackR = gdImageRed(src, clrBack);
- clrBackG = gdImageGreen(src, clrBack);
- clrBackB = gdImageBlue(src, clrBack);
- clrBackA = gdImageAlpha(src, clrBack);
- clrBack = gdTrueColorAlpha(clrBackR, clrBackG, clrBackB, clrBackA);
- f = gdImageGetPixel;
- }
-
- for (i = 0; i < iOffset; i++) {
- gdImageSetPixel (dst, i, uRow, clrBack);
- }
-
- if (i < dst->sx) {
- gdImageSetPixel (dst, i, uRow, clrBack);
- }
-
- for (i = 0; i < src->sx; i++) {
- pxlSrc = f (src,i,uRow);
-
- r = (int)(gdImageRed(src,pxlSrc) * dWeight);
- g = (int)(gdImageGreen(src,pxlSrc) * dWeight);
- b = (int)(gdImageBlue(src,pxlSrc) * dWeight);
- a = (int)(gdImageAlpha(src,pxlSrc) * dWeight);
-
- if (r>255) {
- r = 255;
- }
-
- if (g>255) {
- g = 255;
- }
-
- if (b>255) {
- b = 255;
- }
-
- if (a>127) {
- a = 127;
- }
-
- pxlLeft = gdTrueColorAlpha(r, g, b, a);
-
- r = gdImageRed(src,pxlSrc) - (r - gdImageRed(src,pxlOldLeft));
- g = gdImageGreen(src,pxlSrc) - (g - gdImageGreen(src,pxlOldLeft));
- b = gdImageBlue(src,pxlSrc) - (b - gdImageBlue(src,pxlOldLeft));
- a = gdImageAlpha(src,pxlSrc) - (a - gdImageAlpha(src,pxlOldLeft));
-
- if (r>255) {
- r = 255;
- }
-
- if (g>255) {
- g = 255;
- }
-
- if (b>255) {
- b = 255;
- }
-
- if (a>127) {
- a = 127;
- }
-
- if (ignoretransparent && pxlSrc == dst->transparent) {
- pxlSrc = dst->transparent;
- } else {
- pxlSrc = gdImageColorAllocateAlpha(dst, r, g, b, a);
-
- if (pxlSrc == -1) {
- pxlSrc = gdImageColorClosestAlpha(dst, r, g, b, a);
- }
- }
-
- if ((i + iOffset >= 0) && (i + iOffset < dst->sx)) {
- gdImageSetPixel (dst, i+iOffset, uRow, pxlSrc);
- }
-
- pxlOldLeft = pxlLeft;
- }
-
- i += iOffset;
-
- if (i < dst->sx) {
- gdImageSetPixel (dst, i, uRow, pxlLeft);
- }
-
- gdImageSetPixel (dst, iOffset, uRow, clrBack);
-
- i--;
-
- while (++i < dst->sx) {
- gdImageSetPixel (dst, i, uRow, clrBack);
- }
-}
-
-void gdImageSkewY (gdImagePtr dst, gdImagePtr src, int uCol, int iOffset, double dWeight, int clrBack, int ignoretransparent)
-{
- int i, iYPos=0, r, g, b, a;
- FuncPtr f;
- int pxlOldLeft, pxlLeft=0, pxlSrc;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
-
- for (i = 0; i<=iOffset; i++) {
- gdImageSetPixel (dst, uCol, i, clrBack);
- }
- r = (int)((double)gdImageRed(src,clrBack) * dWeight);
- g = (int)((double)gdImageGreen(src,clrBack) * dWeight);
- b = (int)((double)gdImageBlue(src,clrBack) * dWeight);
- a = (int)((double)gdImageAlpha(src,clrBack) * dWeight);
-
- pxlOldLeft = gdImageColorAllocateAlpha(dst, r, g, b, a);
-
- for (i = 0; i < src->sy; i++) {
- pxlSrc = f (src, uCol, i);
- iYPos = i + iOffset;
-
- r = (int)((double)gdImageRed(src,pxlSrc) * dWeight);
- g = (int)((double)gdImageGreen(src,pxlSrc) * dWeight);
- b = (int)((double)gdImageBlue(src,pxlSrc) * dWeight);
- a = (int)((double)gdImageAlpha(src,pxlSrc) * dWeight);
-
- if (r>255) {
- r = 255;
- }
-
- if (g>255) {
- g = 255;
- }
-
- if (b>255) {
- b = 255;
- }
-
- if (a>127) {
- a = 127;
- }
-
- pxlLeft = gdTrueColorAlpha(r, g, b, a);
-
- r = gdImageRed(src,pxlSrc) - (r - gdImageRed(src,pxlOldLeft));
- g = gdImageGreen(src,pxlSrc) - (g - gdImageGreen(src,pxlOldLeft));
- b = gdImageBlue(src,pxlSrc) - (b - gdImageBlue(src,pxlOldLeft));
- a = gdImageAlpha(src,pxlSrc) - (a - gdImageAlpha(src,pxlOldLeft));
-
- if (r>255) {
- r = 255;
- }
-
- if (g>255) {
- g = 255;
- }
-
- if (b>255) {
- b = 255;
- }
-
- if (a>127) {
- a = 127;
- }
-
- if (ignoretransparent && pxlSrc == dst->transparent) {
- pxlSrc = dst->transparent;
- } else {
- pxlSrc = gdImageColorAllocateAlpha(dst, r, g, b, a);
-
- if (pxlSrc == -1) {
- pxlSrc = gdImageColorClosestAlpha(dst, r, g, b, a);
- }
- }
-
- if ((iYPos >= 0) && (iYPos < dst->sy)) {
- gdImageSetPixel (dst, uCol, iYPos, pxlSrc);
- }
-
- pxlOldLeft = pxlLeft;
- }
-
- i = iYPos;
- if (i < dst->sy) {
- gdImageSetPixel (dst, uCol, i, pxlLeft);
- }
-
- i--;
- while (++i < dst->sy) {
- gdImageSetPixel (dst, uCol, i, clrBack);
- }
-}
-
-/* Rotates an image by 90 degrees (counter clockwise) */
-gdImagePtr gdImageRotate90 (gdImagePtr src, int ignoretransparent)
-{
- int uY, uX;
- int c,r,g,b,a;
- gdImagePtr dst;
- FuncPtr f;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst = gdImageCreateTrueColor(src->sy, src->sx);
- if (dst != NULL) {
- int old_blendmode = dst->alphaBlendingFlag;
- dst->alphaBlendingFlag = 0;
-
- dst->transparent = src->transparent;
-
- gdImagePaletteCopy (dst, src);
-
- for (uY = 0; uY<src->sy; uY++) {
- for (uX = 0; uX<src->sx; uX++) {
- c = f (src, uX, uY);
- if (!src->trueColor) {
- r = gdImageRed(src,c);
- g = gdImageGreen(src,c);
- b = gdImageBlue(src,c);
- a = gdImageAlpha(src,c);
- c = gdTrueColorAlpha(r, g, b, a);
- }
- if (ignoretransparent && c == dst->transparent) {
- gdImageSetPixel(dst, uY, (dst->sy - uX - 1), dst->transparent);
- } else {
- gdImageSetPixel(dst, uY, (dst->sy - uX - 1), c);
- }
- }
- }
- dst->alphaBlendingFlag = old_blendmode;
- }
-
- return dst;
-}
-
-/* Rotates an image by 180 degrees (counter clockwise) */
-gdImagePtr gdImageRotate180 (gdImagePtr src, int ignoretransparent)
-{
- int uY, uX;
- int c,r,g,b,a;
- gdImagePtr dst;
- FuncPtr f;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst = gdImageCreateTrueColor(src->sx, src->sy);
-
- if (dst != NULL) {
- int old_blendmode = dst->alphaBlendingFlag;
- dst->alphaBlendingFlag = 0;
-
- dst->transparent = src->transparent;
-
- gdImagePaletteCopy (dst, src);
-
- for (uY = 0; uY<src->sy; uY++) {
- for (uX = 0; uX<src->sx; uX++) {
- c = f (src, uX, uY);
- if (!src->trueColor) {
- r = gdImageRed(src,c);
- g = gdImageGreen(src,c);
- b = gdImageBlue(src,c);
- a = gdImageAlpha(src,c);
- c = gdTrueColorAlpha(r, g, b, a);
- }
-
- if (ignoretransparent && c == dst->transparent) {
- gdImageSetPixel(dst, (dst->sx - uX - 1), (dst->sy - uY - 1), dst->transparent);
- } else {
- gdImageSetPixel(dst, (dst->sx - uX - 1), (dst->sy - uY - 1), c);
- }
- }
- }
- dst->alphaBlendingFlag = old_blendmode;
- }
-
- return dst;
-}
-
-/* Rotates an image by 270 degrees (counter clockwise) */
-gdImagePtr gdImageRotate270 (gdImagePtr src, int ignoretransparent)
-{
- int uY, uX;
- int c,r,g,b,a;
- gdImagePtr dst;
- FuncPtr f;
-
- if (src->trueColor) {
- f = gdImageGetTrueColorPixel;
- } else {
- f = gdImageGetPixel;
- }
- dst = gdImageCreateTrueColor (src->sy, src->sx);
-
- if (dst != NULL) {
- int old_blendmode = dst->alphaBlendingFlag;
- dst->alphaBlendingFlag = 0;
-
- dst->transparent = src->transparent;
-
- gdImagePaletteCopy (dst, src);
-
- for (uY = 0; uY<src->sy; uY++) {
- for (uX = 0; uX<src->sx; uX++) {
- c = f (src, uX, uY);
- if (!src->trueColor) {
- r = gdImageRed(src,c);
- g = gdImageGreen(src,c);
- b = gdImageBlue(src,c);
- a = gdImageAlpha(src,c);
- c = gdTrueColorAlpha(r, g, b, a);
- }
-
- if (ignoretransparent && c == dst->transparent) {
- gdImageSetPixel(dst, (dst->sx - uY - 1), uX, dst->transparent);
- } else {
- gdImageSetPixel(dst, (dst->sx - uY - 1), uX, c);
- }
- }
- }
- dst->alphaBlendingFlag = old_blendmode;
- }
-
- return dst;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_security.c b/Build/source/libs/gd/libgd-src/src/gd_security.c
deleted file mode 100644
index 0051ebf4559..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_security.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * gd_security.c
- *
- * Implements buffer overflow check routines.
- *
- * Written 2004, Phil Knirsch.
- * Based on netpbm fixes by Alan Cox.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include "gd.h"
-#include "gd_errors.h"
-
-int overflow2(int a, int b)
-{
- if(a <= 0 || b <= 0) {
- gd_error_ex(GD_WARNING, "one parameter to a memory allocation multiplication is negative or zero, failing operation gracefully\n");
- return 1;
- }
- if(a > INT_MAX / b) {
- gd_error_ex(GD_WARNING, "product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully\n");
- return 1;
- }
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_ss.c b/Build/source/libs/gd/libgd-src/src/gd_ss.c
deleted file mode 100644
index 248699e370b..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_ss.c
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gd_errors.h"
-
-#define TRUE 1
-#define FALSE 0
-
-/* Use this for commenting out debug-print statements. */
-/* Just use the first '#define' to allow all the prints... */
-/*#define GD_SS_DBG(s) (s) */
-#define GD_SS_DBG(s)
-
-#ifdef HAVE_LIBPNG
-/*
- Function: gdImagePngToSink
-*/
-BGD_DECLARE(void) gdImagePngToSink (gdImagePtr im, gdSinkPtr outSink)
-{
- gdIOCtx *out = gdNewSSCtx (NULL, outSink);
- gdImagePngCtx (im, out);
- out->gd_free (out);
-}
-
-/*
- Function: gdImageCreateFromPngSource
-
- See <gdImageCreateFromPng> for documentation. This is obsolete; use
- <gdImageCreateFromPngCtx> instead.
- */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngSource (gdSourcePtr inSource)
-{
- gdIOCtx *in = gdNewSSCtx (inSource, NULL);
- gdImagePtr im;
-
- im = gdImageCreateFromPngCtx (in);
-
- in->gd_free (in);
-
- return im;
-}
-#else /* no HAVE_LIBPNG */
-BGD_DECLARE(void) gdImagePngToSink (gdImagePtr im, gdSinkPtr outSink)
-{
- (void)im;
- (void)outSink;
- gd_error("PNG support is not available\n");
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromPngSource (gdSourcePtr inSource)
-{
- (void)inSource;
- gd_error("PNG support is not available\n");
- return NULL;
-}
-#endif /* HAVE_LIBPNG */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_tga.c b/Build/source/libs/gd/libgd-src/src/gd_tga.c
deleted file mode 100644
index cae9428da50..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_tga.c
+++ /dev/null
@@ -1,360 +0,0 @@
-/**
- * File: TGA Input
- *
- * Read TGA images.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "gd_tga.h"
-#include "gd.h"
-#include "gd_errors.h"
-#include "gdhelpers.h"
-
-/*
- Function: gdImageCreateFromTga
-
- Creates a gdImage from a TGA file
-
- Parameters:
-
- infile - Pointer to TGA binary file
- */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTga(FILE *fp)
-{
- gdImagePtr image;
- gdIOCtx* in = gdNewFileCtx(fp);
- if (in == NULL) return NULL;
- image = gdImageCreateFromTgaCtx(in);
- in->gd_free( in );
- return image;
-}
-
-/*
- Function: gdImageCreateFromTgaPtr
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTgaPtr(int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
- if (in == NULL) return NULL;
- im = gdImageCreateFromTgaCtx(in);
- in->gd_free(in);
- return im;
-}
-
-
-/*
- Function: gdImageCreateFromTgaCtx
-
- Creates a gdImage from a gdIOCtx referencing a TGA binary file.
-
- Parameters:
- ctx - Pointer to a gdIOCtx structure
- */
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTgaCtx(gdIOCtx* ctx)
-{
- int bitmap_caret = 0;
- oTga *tga = NULL;
- /* int pixel_block_size = 0;
- int image_block_size = 0; */
- volatile gdImagePtr image = NULL;
- int x = 0;
- int y = 0;
-
- tga = (oTga *) gdMalloc(sizeof(oTga));
- if (!tga) {
- return NULL;
- }
-
- tga->bitmap = NULL;
- tga->ident = NULL;
-
- if (read_header_tga(ctx, tga) < 0) {
- free_tga(tga);
- return NULL;
- }
-
- /*TODO: Will this be used?
- pixel_block_size = tga->bits / 8;
- image_block_size = (tga->width * tga->height) * pixel_block_size;
- */
-
- if (read_image_tga(ctx, tga) < 0) {
- free_tga(tga);
- return NULL;
- }
-
- image = gdImageCreateTrueColor((int)tga->width, (int)tga->height );
-
- if (image == 0) {
- free_tga( tga );
- return NULL;
- }
-
- /*! \brief Populate GD image object
- * Copy the pixel data from our tga bitmap buffer into the GD image
- * Disable blending and save the alpha channel per default
- */
- if (tga->alphabits) {
- gdImageAlphaBlending(image, 0);
- gdImageSaveAlpha(image, 1);
- }
-
- /* TODO: use alphabits as soon as we support 24bit and other alpha bps (ie != 8bits) */
- for (y = 0; y < tga->height; y++) {
- register int *tpix = image->tpixels[y];
- for ( x = 0; x < tga->width; x++, tpix++) {
- if (tga->bits == TGA_BPP_24) {
- *tpix = gdTrueColor(tga->bitmap[bitmap_caret + 2], tga->bitmap[bitmap_caret + 1], tga->bitmap[bitmap_caret]);
- bitmap_caret += 3;
- } else if (tga->bits == TGA_BPP_32 && tga->alphabits) {
- register int a = tga->bitmap[bitmap_caret + 3];
-
- *tpix = gdTrueColorAlpha(tga->bitmap[bitmap_caret + 2], tga->bitmap[bitmap_caret + 1], tga->bitmap[bitmap_caret], gdAlphaMax - (a >> 1));
- bitmap_caret += 4;
- }
- }
- }
-
- if (tga->flipv && tga->fliph) {
- gdImageFlipBoth(image);
- } else if (tga->flipv) {
- gdImageFlipVertical(image);
- } else if (tga->fliph) {
- gdImageFlipHorizontal(image);
- }
-
- free_tga(tga);
-
- return image;
-}
-
-/*! \brief Reads a TGA header.
- * Reads the header block from a binary TGA file populating the referenced TGA structure.
- * \param ctx Pointer to TGA binary file
- * \param tga Pointer to TGA structure
- * \return int 1 on sucess, -1 on failure
- */
-int read_header_tga(gdIOCtx *ctx, oTga *tga)
-{
-
- unsigned char header[18];
-
- if (gdGetBuf(header, sizeof(header), ctx) < 18) {
- gd_error("fail to read header");
- return -1;
- }
-
- tga->identsize = header[0];
- tga->colormaptype = header[1];
- tga->imagetype = header[2];
- tga->colormapstart = header[3] + (header[4] << 8);
- tga->colormaplength = header[5] + (header[6] << 8);
- tga->colormapbits = header[7];
- tga->xstart = header[8] + (header[9] << 8);
- tga->ystart = header[10] + (header[11] << 8);
- tga->width = header[12] + (header[13] << 8);
- tga->height = header[14] + (header[15] << 8);
- tga->bits = header[16];
- tga->alphabits = header[17] & 0x0f;
- tga->fliph = (header[17] & 0x10) ? 1 : 0;
- tga->flipv = (header[17] & 0x20) ? 0 : 1;
-
-#if DEBUG
- printf("format bps: %i\n", tga->bits);
- printf("flip h/v: %i / %i\n", tga->fliph, tga->flipv);
- printf("alpha: %i\n", tga->alphabits);
- printf("wxh: %i %i\n", tga->width, tga->height);
-#endif
-
- if (!((tga->bits == TGA_BPP_24 && tga->alphabits == 0)
- || (tga->bits == TGA_BPP_32 && tga->alphabits == 8)))
- {
- gd_error_ex(GD_WARNING, "gd-tga: %u bits per pixel with %u alpha bits not supported\n",
- tga->bits, tga->alphabits);
- return -1;
- }
-
- tga->ident = NULL;
-
- if (tga->identsize > 0) {
- tga->ident = (char *) gdMalloc(tga->identsize * sizeof(char));
- if(tga->ident == NULL) {
- return -1;
- }
-
- gdGetBuf(tga->ident, tga->identsize, ctx);
- }
-
- return 1;
-}
-
-/*! \brief Reads a TGA image data into buffer.
- * Reads the image data block from a binary TGA file populating the referenced TGA structure.
- * \param ctx Pointer to TGA binary file
- * \param tga Pointer to TGA structure
- * \return int 0 on sucess, -1 on failure
- */
-int read_image_tga( gdIOCtx *ctx, oTga *tga )
-{
- int pixel_block_size = (tga->bits / 8);
- int image_block_size;
- int* decompression_buffer = NULL;
- unsigned char* conversion_buffer = NULL;
- int buffer_caret = 0;
- int bitmap_caret = 0;
- int i = 0;
- int encoded_pixels;
- int rle_size;
-
- if(overflow2(tga->width, tga->height)) {
- return -1;
- }
-
- if(overflow2(tga->width * tga->height, pixel_block_size)) {
- return -1;
- }
-
- image_block_size = (tga->width * tga->height) * pixel_block_size;
- if(overflow2(image_block_size, sizeof(int))) {
- return -1;
- }
-
- /*! \todo Add more image type support.
- */
- if (tga->imagetype != TGA_TYPE_RGB && tga->imagetype != TGA_TYPE_RGB_RLE)
- return -1;
-
- /*! \brief Allocate memmory for image block
- * Allocate a chunk of memory for the image block to be passed into.
- */
- tga->bitmap = (int *) gdMalloc(image_block_size * sizeof(int));
- if (tga->bitmap == NULL)
- return -1;
-
- switch (tga->imagetype) {
- case TGA_TYPE_RGB:
- /*! \brief Read in uncompressed RGB TGA
- * Chunk load the pixel data from an uncompressed RGB type TGA.
- */
- conversion_buffer = (unsigned char *) gdMalloc(image_block_size * sizeof(unsigned char));
- if (conversion_buffer == NULL) {
- return -1;
- }
-
- if (gdGetBuf(conversion_buffer, image_block_size, ctx) != image_block_size) {
- gd_error("gd-tga: premature end of image data\n");
- gdFree(conversion_buffer);
- return -1;
- }
-
- while (buffer_caret < image_block_size) {
- tga->bitmap[buffer_caret] = (int) conversion_buffer[buffer_caret];
- buffer_caret++;
- }
-
- gdFree(conversion_buffer);
- break;
-
- case TGA_TYPE_RGB_RLE:
- /*! \brief Read in RLE compressed RGB TGA
- * Chunk load the pixel data from an RLE compressed RGB type TGA.
- */
- decompression_buffer = (int*) gdMalloc(image_block_size * sizeof(int));
- if (decompression_buffer == NULL) {
- return -1;
- }
- conversion_buffer = (unsigned char *) gdMalloc(image_block_size * sizeof(unsigned char));
- if (conversion_buffer == NULL) {
- gd_error("gd-tga: premature end of image data\n");
- gdFree( decompression_buffer );
- return -1;
- }
-
- rle_size = gdGetBuf(conversion_buffer, image_block_size, ctx);
- if (rle_size <= 0) {
- gdFree(conversion_buffer);
- gdFree(decompression_buffer);
- return -1;
- }
-
- buffer_caret = 0;
-
- while( buffer_caret < rle_size) {
- decompression_buffer[buffer_caret] = (int)conversion_buffer[buffer_caret];
- buffer_caret++;
- }
-
- buffer_caret = 0;
-
- while( bitmap_caret < image_block_size ) {
-
- if (buffer_caret + pixel_block_size > rle_size) {
- gdFree( decompression_buffer );
- gdFree( conversion_buffer );
- return -1;
- }
-
- if ((decompression_buffer[buffer_caret] & TGA_RLE_FLAG) == TGA_RLE_FLAG) {
- encoded_pixels = ( ( decompression_buffer[ buffer_caret ] & ~TGA_RLE_FLAG ) + 1 );
- buffer_caret++;
-
- if ((bitmap_caret + (encoded_pixels * pixel_block_size)) > image_block_size
- || buffer_caret + pixel_block_size > rle_size) {
- gdFree( decompression_buffer );
- gdFree( conversion_buffer );
- return -1;
- }
-
- for (i = 0; i < encoded_pixels; i++) {
- memcpy(tga->bitmap + bitmap_caret, decompression_buffer + buffer_caret, pixel_block_size * sizeof(int));
- bitmap_caret += pixel_block_size;
- }
- buffer_caret += pixel_block_size;
-
- } else {
- encoded_pixels = decompression_buffer[ buffer_caret ] + 1;
- buffer_caret++;
-
- if ((bitmap_caret + (encoded_pixels * pixel_block_size)) > image_block_size
- || buffer_caret + (encoded_pixels * pixel_block_size) > rle_size) {
- gdFree( decompression_buffer );
- gdFree( conversion_buffer );
- return -1;
- }
-
- memcpy(tga->bitmap + bitmap_caret, decompression_buffer + buffer_caret, encoded_pixels * pixel_block_size * sizeof(int));
- bitmap_caret += (encoded_pixels * pixel_block_size);
- buffer_caret += (encoded_pixels * pixel_block_size);
- }
- }
- gdFree( decompression_buffer );
- gdFree( conversion_buffer );
- break;
- }
-
- return 1;
-}
-
-/*! \brief Cleans up a TGA structure.
- * Dereferences the bitmap referenced in a TGA structure, then the structure itself
- * \param tga Pointer to TGA structure
- */
-void free_tga(oTga * tga)
-{
- if (tga) {
- if (tga->ident)
- gdFree(tga->ident);
- if (tga->bitmap)
- gdFree(tga->bitmap);
- gdFree(tga);
- }
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_tga.h b/Build/source/libs/gd/libgd-src/src/gd_tga.h
deleted file mode 100644
index 297f3dc99d6..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_tga.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef __TGA_H
-#define __TGA_H 1
-
-#include "gd.h"
-#include "gdhelpers.h"
-
-#include "gd_intern.h"
-
-typedef struct oTga_ {
- uint8_t identsize; // size of ID field that follows 18 uint8_t header (0 usually)
- uint8_t colormaptype; // type of colour map 0=none, 1=has palette [IGNORED] Adrian requested no support
- uint8_t imagetype; // type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed
-
- int colormapstart; // first colour map entry in palette [IGNORED] Adrian requested no support
- int colormaplength; // number of colours in palette [IGNORED] Adrian requested no support
- uint8_t colormapbits; // number of bits per palette entry 15,16,24,32 [IGNORED] Adrian requested no support
-
- int xstart; // image x origin
- int ystart; // image y origin
- int width; // image width in pixels
- int height; // image height in pixels
- uint8_t bits; // image bits per pixel 8,16,24,32
- uint8_t alphabits; // alpha bits (low 4bits of header 17)
- uint8_t fliph; // horizontal or vertical
- uint8_t flipv; // flip
- char *ident; // identifcation tag string
- int *bitmap; // bitmap data
-
-} oTga;
-
-#define TGA_TYPE_NO_IMAGE 0
-#define TGA_TYPE_INDEXED 1
-#define TGA_TYPE_RGB 2
-#define TGA_TYPE_GREYSCALE 3
-#define TGA_TYPE_INDEXED_RLE 9
-#define TGA_TYPE_RGB_RLE 10
-#define TGA_TYPE_GREYSCALE_RLE 11
-#define TGA_TYPE_INDEXED_HUFFMAN_DELTA_RLE 32
-#define TGA_TYPE_RGB_HUFFMAN_DELTA_QUADTREE_RLE 33
-
-#define TGA_BPP_8 8
-#define TGA_BPP_16 16
-#define TGA_BPP_24 24
-#define TGA_BPP_32 32
-
-#define TGA_RLE_FLAG 128
-
-int read_header_tga(gdIOCtx *ctx, oTga *tga);
-int read_image_tga(gdIOCtx *ctx, oTga *tga);
-void free_tga(oTga *tga);
-
-#endif //__TGA_H
diff --git a/Build/source/libs/gd/libgd-src/src/gd_tiff.c b/Build/source/libs/gd/libgd-src/src/gd_tiff.c
deleted file mode 100644
index 4020a6f7054..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_tiff.c
+++ /dev/null
@@ -1,1113 +0,0 @@
-/*
- TIFF - Tagged Image File Format Encapsulation for GD Library
-
- gd_tiff.c
- Copyright (C) Pierre-A. Joye, M. Retallack
-
- ---------------------------------------------------------------------------
- **
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
- **
- ---------------------------------------------------------------------------
- Ctx code written by M. Retallack
-
- Todo:
-
- If we fail - cleanup
- Writer: Use gd error function, overflow check may not be necessary as
- we write our own data (check already done)
-
- Implement 2 color black/white saving using group4 fax compression
- Implement function to specify encoding to use when writing tiff data
-
- ----------------------------------------------------------------------------
- */
-
-/**
- * File: TIFF IO
- *
- * Read and write TIFF images.
- *
- * There is only most basic support for the TIFF format available for now;
- * for instance, multiple pages are not yet supported.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gd.h"
-#include "gd_errors.h"
-#include "gdfonts.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#include "gdhelpers.h"
-
-#ifdef HAVE_LIBTIFF
-
-#include "tiff.h"
-#include "tiffio.h"
-
-#define GD_SUCCESS 1
-#define GD_FAILURE 0
-
-#define TRUE 1
-#define FALSE 0
-
-/* I define those here until the new formats
- * are commited. We can then rely on the global
- * def
- */
-#define GD_PALETTE 1
-#define GD_TRUECOLOR 2
-#define GD_GRAY 3
-#define GD_INDEXED 4
-#define GD_RGB 5
-
-#define MIN(a,b) (a < b) ? a : b;
-#define MAX(a,b) (a > b) ? a : b;
-
-
-typedef struct tiff_handle {
- int size;
- int pos;
- gdIOCtx *ctx;
- int written;
-}
-tiff_handle;
-
-/*
- Functions for reading, writing and seeking in gdIOCtx
- This allows for non-file i/o operations with no
- explicit use of libtiff fileio wrapper functions
-
- Note: because libtiff requires random access, but gdIOCtx
- only supports streams, all writes are buffered
- into memory and written out on close, also all
- reads are done from a memory mapped version of the
- tiff (assuming one already exists)
-*/
-
-tiff_handle * new_tiff_handle(gdIOCtx *g)
-{
- tiff_handle * t;
-
- if (!g) {
- gd_error("Cannot create a new tiff handle, missing Ctx argument");
- return NULL;
- }
-
- t = (tiff_handle *) gdMalloc(sizeof(tiff_handle));
- if (!t) {
- gd_error("Failed to allocate a new tiff handle");
- return NULL;
- }
-
- t->size = 0;
- t->pos = 0;
- t->ctx = g;
- t->written = 0;
-
- return t;
-}
-
-/* TIFFReadWriteProc tiff_readproc - Will use gdIOCtx procs to read required
- (previously written) TIFF file content */
-static tsize_t tiff_readproc(thandle_t clientdata, tdata_t data, tsize_t size)
-{
- tiff_handle *th = (tiff_handle *)clientdata;
- gdIOCtx *ctx = th->ctx;
-
- size = (ctx->getBuf)(ctx, data, size);
-
- return size;
-}
-
-/* TIFFReadWriteProc tiff_writeproc - Will use gdIOCtx procs to write out
- TIFF data */
-static tsize_t tiff_writeproc(thandle_t clientdata, tdata_t data, tsize_t size)
-{
- tiff_handle *th = (tiff_handle *)clientdata;
- gdIOCtx *ctx = th->ctx;
-
- size = (ctx->putBuf)(ctx, data, size);
- if(size + th->pos>th->size) {
- th->size = size + th->pos;
- th->pos += size;
- }
-
- return size;
-}
-
-/* TIFFSeekProc tiff_seekproc
- * used to move around the partially written TIFF */
-static toff_t tiff_seekproc(thandle_t clientdata, toff_t offset, int from)
-{
- tiff_handle *th = (tiff_handle *)clientdata;
- gdIOCtx *ctx = th->ctx;
- int result;
-
- switch(from) {
- default:
- case SEEK_SET:
- /* just use offset */
- break;
-
- case SEEK_END:
- /* invert offset, so that it is from start, not end as supplied */
- offset = th->size + offset;
- break;
-
- case SEEK_CUR:
- /* add current position to translate it to 'from start',
- * not from durrent as supplied
- */
- offset += th->pos;
- break;
- }
-
- /* now, move pos in both io context and buf */
- if((result = (ctx->seek)(ctx, offset))) {
- th->pos = offset;
- }
-
- return result ? offset : (toff_t)-1;
-}
-
-/* TIFFCloseProc tiff_closeproc - used to finally close the TIFF file */
-static int tiff_closeproc(thandle_t clientdata)
-{
- (void)clientdata;
- /*tiff_handle *th = (tiff_handle *)clientdata;
- gdIOCtx *ctx = th->ctx;
-
- (ctx->gd_free)(ctx);*/
-
- return 0;
-}
-
-/* TIFFSizeProc tiff_sizeproc */
-static toff_t tiff_sizeproc(thandle_t clientdata)
-{
- tiff_handle *th = (tiff_handle *)clientdata;
- return th->size;
-}
-
-/* TIFFMapFileProc tiff_mapproc() */
-static int tiff_mapproc(thandle_t h, tdata_t *d, toff_t *o)
-{
- (void)h;
- (void)d;
- (void)o;
- return 0;
-}
-
-/* TIFFUnmapFileProc tiff_unmapproc */
-static void tiff_unmapproc(thandle_t h, tdata_t d, toff_t o)
-{
- (void)h;
- (void)d;
- (void)o;
-}
-
-
-/* tiffWriter
- * ----------
- * Write the gd image as a tiff file (called by gdImageTiffCtx)
- * Parameters are:
- * image: gd image structure;
- * out: the stream where to write
- * bitDepth: depth in bits of each pixel
- */
-void tiffWriter(gdImagePtr image, gdIOCtx *out, int bitDepth)
-{
- int x, y;
- int i;
- int r, g, b, a;
- TIFF *tiff;
- int width, height;
- int color;
- char *scan;
- int samplesPerPixel = 3;
- int bitsPerSample;
- int transparentColorR = -1;
- int transparentColorG = -1;
- int transparentColorB = -1;
- uint16 extraSamples[1];
- uint16 *colorMapRed = NULL;
- uint16 *colorMapGreen = NULL;
- uint16 *colorMapBlue = NULL;
-
- tiff_handle *th;
-
- th = new_tiff_handle(out);
- if (!th) {
- return;
- }
- extraSamples[0] = EXTRASAMPLE_ASSOCALPHA;
-
- /* read in the width/height of gd image */
- width = gdImageSX(image);
- height = gdImageSY(image);
-
- /* reset clip region to whole image */
- gdImageSetClip(image, 0, 0, width, height);
-
- /* handle old-style single-colour mapping to 100% transparency */
- if(image->transparent != -1) {
- /* set our 100% transparent colour value */
- transparentColorR = gdImageRed(image, image->transparent);
- transparentColorG = gdImageGreen(image, image->transparent);
- transparentColorB = gdImageBlue(image, image->transparent);
- }
-
- /* Open tiff file writing routines, but use special read/write/seek
- * functions so that tiff lib writes correct bits of tiff content to
- * correct areas of file opened and modifieable by the gdIOCtx functions
- */
- tiff = TIFFClientOpen("", "w", th, tiff_readproc,
- tiff_writeproc,
- tiff_seekproc,
- tiff_closeproc,
- tiff_sizeproc,
- tiff_mapproc,
- tiff_unmapproc);
-
- TIFFSetField(tiff, TIFFTAG_IMAGEWIDTH, width);
- TIFFSetField(tiff, TIFFTAG_IMAGELENGTH, height);
- TIFFSetField(tiff, TIFFTAG_COMPRESSION, COMPRESSION_DEFLATE);
- TIFFSetField(tiff, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
- TIFFSetField(tiff, TIFFTAG_PHOTOMETRIC,
- (bitDepth == 24) ? PHOTOMETRIC_RGB : PHOTOMETRIC_PALETTE);
-
- bitsPerSample = (bitDepth == 24 || bitDepth == 8) ? 8 : 1;
- TIFFSetField(tiff, TIFFTAG_BITSPERSAMPLE, bitsPerSample);
-
- TIFFSetField(tiff, TIFFTAG_XRESOLUTION, (float)image->res_x);
- TIFFSetField(tiff, TIFFTAG_YRESOLUTION, (float)image->res_y);
-
- /* build the color map for 8 bit images */
- if(bitDepth != 24) {
- colorMapRed = (uint16 *) gdMalloc(3 * (1 << bitsPerSample));
- if (!colorMapRed) {
- gdFree(th);
- return;
- }
- colorMapGreen = (uint16 *) gdMalloc(3 * (1 << bitsPerSample));
- if (!colorMapGreen) {
- gdFree(colorMapRed);
- gdFree(th);
- return;
- }
- colorMapBlue = (uint16 *) gdMalloc(3 * (1 << bitsPerSample));
- if (!colorMapBlue) {
- gdFree(colorMapRed);
- gdFree(colorMapGreen);
- gdFree(th);
- return;
- }
-
- for(i = 0; i < image->colorsTotal; i++) {
- colorMapRed[i] = gdImageRed(image,i) + (gdImageRed(image,i) * 256);
- colorMapGreen[i] = gdImageGreen(image,i)+(gdImageGreen(image,i)*256);
- colorMapBlue[i] = gdImageBlue(image,i) + (gdImageBlue(image,i)*256);
- }
-
- TIFFSetField(tiff, TIFFTAG_COLORMAP, colorMapRed, colorMapGreen,
- colorMapBlue);
- samplesPerPixel = 1;
- }
-
- /* here, we check if the 'save alpha' flag is set on the source gd image */
- if ((bitDepth == 24) &&
- (image->saveAlphaFlag || image->transparent != -1)) {
- /* so, we need to store the alpha values too!
- * Also, tell TIFF what the extra sample means (associated alpha) */
- samplesPerPixel = 4;
- TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, samplesPerPixel);
- TIFFSetField(tiff, TIFFTAG_EXTRASAMPLES, 1, extraSamples);
- } else {
- TIFFSetField(tiff, TIFFTAG_SAMPLESPERPIXEL, samplesPerPixel);
- }
-
- TIFFSetField(tiff, TIFFTAG_ROWSPERSTRIP, 1);
-
- if(overflow2(width, samplesPerPixel)) {
- if (colorMapRed) gdFree(colorMapRed);
- if (colorMapGreen) gdFree(colorMapGreen);
- if (colorMapBlue) gdFree(colorMapBlue);
- gdFree(th);
- return;
- }
-
- if(!(scan = (char *)gdMalloc(width * samplesPerPixel))) {
- if (colorMapRed) gdFree(colorMapRed);
- if (colorMapGreen) gdFree(colorMapGreen);
- if (colorMapBlue) gdFree(colorMapBlue);
- gdFree(th);
- return;
- }
-
- /* loop through y-coords, and x-coords */
- for(y = 0; y < height; y++) {
- for(x = 0; x < width; x++) {
- /* generate scan line for writing to tiff */
- color = gdImageGetPixel(image, x, y);
-
- a = (127 - gdImageAlpha(image, color)) * 2;
- a = (a == 0xfe) ? 0xff : a & 0xff;
- b = gdImageBlue(image, color);
- g = gdImageGreen(image, color);
- r = gdImageRed(image, color);
-
- /* if this pixel has the same RGB as the transparent colour,
- * then set alpha fully transparent */
- if (transparentColorR == r &&
- transparentColorG == g &&
- transparentColorB == b) {
- a = 0x00;
- }
-
- if(bitDepth != 24) {
- /* write out 1 or 8 bit value in 1 byte
- * (currently treats 1bit as 8bit) */
- scan[(x * samplesPerPixel) + 0] = color;
- } else {
- /* write out 24 bit value in 3 (or 4 if transparent) bytes */
- if(image->saveAlphaFlag || image->transparent != -1) {
- scan[(x * samplesPerPixel) + 3] = a;
- }
-
- scan[(x * samplesPerPixel) + 2] = b;
- scan[(x * samplesPerPixel) + 1] = g;
- scan[(x * samplesPerPixel) + 0] = r;
- }
- }
-
- /* Write the scan line to the tiff */
- if(TIFFWriteEncodedStrip(tiff, y, scan, width * samplesPerPixel) == -1) {
- if (colorMapRed) gdFree(colorMapRed);
- if (colorMapGreen) gdFree(colorMapGreen);
- if (colorMapBlue) gdFree(colorMapBlue);
- gdFree(th);
- /* error handler here */
- gd_error("Could not create TIFF\n");
- return;
- }
- }
-
- /* now cloase and free up resources */
- TIFFClose(tiff);
- gdFree(scan);
- gdFree(th);
-
- if(bitDepth != 24) {
- gdFree(colorMapRed);
- gdFree(colorMapGreen);
- gdFree(colorMapBlue);
- }
-}
-
-/*
- Function: gdImageTiffCtx
-
- Write the gd image as a tiff file.
-
- Parameters:
-
- image - gd image structure;
- out - the stream where to write
-*/
-BGD_DECLARE(void) gdImageTiffCtx(gdImagePtr image, gdIOCtx *out)
-{
- int clipx1P, clipy1P, clipx2P, clipy2P;
- int bitDepth = 24;
-
- /* First, switch off clipping, or we'll not get all the image! */
- gdImageGetClip(image, &clipx1P, &clipy1P, &clipx2P, &clipy2P);
-
- /* use the appropriate routine depending on the bit depth of the image */
- if(image->trueColor) {
- bitDepth = 24;
- } else if(image->colorsTotal == 2) {
- bitDepth = 1;
- } else {
- bitDepth = 8;
- }
-
- tiffWriter(image, out, bitDepth);
-
- /* reset clipping area to the gd image's original values */
- gdImageSetClip(image, clipx1P, clipy1P, clipx2P, clipy2P);
-}
-
-/* Check if we are really in 8bit mode */
-static int checkColorMap(n, r, g, b)
-int n;
-uint16 *r, *g, *b;
-{
- while (n-- > 0)
- if (*r++ >= 256 || *g++ >= 256 || *b++ >= 256)
- return (16);
- return (8);
-}
-
-
-/* Read and convert a TIFF colormap */
-static int readTiffColorMap(gdImagePtr im, TIFF *tif, char is_bw, int photometric)
-{
- uint16 *redcmap, *greencmap, *bluecmap;
- uint16 bps;
- int i;
-
- if (is_bw) {
- if (photometric == PHOTOMETRIC_MINISWHITE) {
- gdImageColorAllocate(im, 255,255,255);
- gdImageColorAllocate(im, 0, 0, 0);
- } else {
- gdImageColorAllocate(im, 0, 0, 0);
- gdImageColorAllocate(im, 255,255,255);
- }
- } else {
- uint16 min_sample_val, max_sample_val;
-
- if (!TIFFGetField(tif, TIFFTAG_MINSAMPLEVALUE, &min_sample_val)) {
- min_sample_val = 0;
- }
- if (!TIFFGetField(tif, TIFFTAG_MAXSAMPLEVALUE, &max_sample_val)) {
- max_sample_val = 255;
- }
-
- if (photometric == PHOTOMETRIC_MINISBLACK || photometric == PHOTOMETRIC_MINISWHITE) {
- /* TODO: use TIFFTAG_MINSAMPLEVALUE and TIFFTAG_MAXSAMPLEVALUE */
- /* Gray level palette */
- for (i=min_sample_val; i <= max_sample_val; i++) {
- gdImageColorAllocate(im, i,i,i);
- }
- return GD_SUCCESS;
-
- } else if (!TIFFGetField(tif, TIFFTAG_COLORMAP, &redcmap, &greencmap, &bluecmap)) {
- gd_error("Cannot read the color map");
- return GD_FAILURE;
- }
-
- TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps);
-
-#define CVT(x) (((x) * 255) / ((1L<<16)-1))
- if (checkColorMap(1<<bps, redcmap, greencmap, bluecmap) == 16) {
- for (i = (1<<bps)-1; i > 0; i--) {
- redcmap[i] = CVT(redcmap[i]);
- greencmap[i] = CVT(greencmap[i]);
- bluecmap[i] = CVT(bluecmap[i]);
- }
- }
- for (i = 0; i < 256; i++) {
- gdImageColorAllocate(im, redcmap[i], greencmap[i], bluecmap[i]);
- }
-#undef CVT
- }
- return GD_SUCCESS;
-}
-
-static void readTiffBw (const unsigned char *src,
- gdImagePtr im,
- uint16 photometric,
- int startx,
- int starty,
- int width,
- int height,
- char has_alpha,
- int extra,
- int align)
-{
- int x = startx, y = starty;
-
- (void)has_alpha;
- (void)extra;
- (void)align;
-
- for (y = starty; y < starty + height; y++) {
- for (x = startx; x < startx + width;) {
- register unsigned char curr = *src++;
- register unsigned char mask;
-
- if (photometric == PHOTOMETRIC_MINISWHITE) {
- curr = ~curr;
- }
- for (mask = 0x80; mask != 0 && x < startx + width; x++, mask >>= 1) {
- gdImageSetPixel(im, x, y, ((curr & mask) != 0)?0:1);
- }
- }
- }
-}
-
-static void readTiff8bit (const unsigned char *src,
- gdImagePtr im,
- uint16 photometric,
- int startx,
- int starty,
- int width,
- int height,
- char has_alpha,
- int extra,
- int align)
-{
- int red, green, blue, alpha;
- int x, y;
-
- (void)extra;
- (void)align;
-
- switch (photometric) {
- case PHOTOMETRIC_PALETTE:
- /* Palette has no alpha (see TIFF specs for more details */
- for (y = starty; y < starty + height; y++) {
- for (x = startx; x < startx + width; x++) {
- gdImageSetPixel(im, x, y,*(src++));
- }
- }
- break;
-
- case PHOTOMETRIC_RGB:
- if (has_alpha) {
- gdImageAlphaBlending(im, 0);
- gdImageSaveAlpha(im, 1);
-
- for (y = starty; y < starty + height; y++) {
- for (x = startx; x < startx + width; x++) {
- red = *src++;
- green = *src++;
- blue = *src++;
- alpha = *src++;
- red = MIN (red, alpha);
- blue = MIN (blue, alpha);
- green = MIN (green, alpha);
-
- if (alpha) {
- gdImageSetPixel(im, x, y, gdTrueColorAlpha(red * 255 / alpha, green * 255 / alpha, blue * 255 /alpha, gdAlphaMax - (alpha >> 1)));
- } else {
- gdImageSetPixel(im, x, y, gdTrueColorAlpha(red, green, blue, gdAlphaMax - (alpha >> 1)));
- }
- }
- }
-
- } else {
- for (y = 0; y < height; y++) {
- for (x = 0; x < width; x++) {
- register unsigned char r = *src++;
- register unsigned char g = *src++;
- register unsigned char b = *src++;
-
- gdImageSetPixel(im, x, y, gdTrueColor(r, g, b));
- }
- }
- }
- break;
-
- case PHOTOMETRIC_MINISWHITE:
- if (has_alpha) {
- /* We don't process the extra yet */
- } else {
- for (y = starty; y < starty + height; y++) {
- for (x = startx; x < startx + width; x++) {
- gdImageSetPixel(im, x, y, ~(*src++));
- }
- }
- }
- break;
-
- case PHOTOMETRIC_MINISBLACK:
- if (has_alpha) {
- /* We don't process the extra yet */
- } else {
- for (y = starty; y < height; y++) {
- for (x = 0; x < width; x++) {
- gdImageSetPixel(im, x, y, *src++);
- }
- }
- }
- break;
- }
-}
-
-static int createFromTiffTiles(TIFF *tif, gdImagePtr im, uint16 bps, uint16 photometric,
- char has_alpha, char is_bw, int extra)
-{
- uint16 planar;
- int im_width, im_height;
- int tile_width, tile_height;
- int x, y, height, width;
- unsigned char *buffer;
- int success = GD_SUCCESS;
-
- if (!TIFFGetField (tif, TIFFTAG_PLANARCONFIG, &planar)) {
- planar = PLANARCONFIG_CONTIG;
- }
- if (TIFFGetField (tif, TIFFTAG_IMAGEWIDTH, &im_width) == 0 ||
- TIFFGetField (tif, TIFFTAG_IMAGELENGTH, &im_height) == 0 ||
- TIFFGetField (tif, TIFFTAG_TILEWIDTH, &tile_width) == 0 ||
- TIFFGetField (tif, TIFFTAG_TILELENGTH, &tile_height) == 0) {
- return FALSE;
- }
-
- buffer = (unsigned char *) gdMalloc (TIFFTileSize (tif));
- if (!buffer) {
- return FALSE;
- }
-
- for (y = 0; y < im_height; y += tile_height) {
- for (x = 0; x < im_width; x += tile_width) {
- if (TIFFReadTile(tif, buffer, x, y, 0, 0) < 0) {
- success = GD_FAILURE;
- goto end;
- }
- width = MIN(im_width - x, tile_width);
- height = MIN(im_height - y, tile_height);
- if (bps == 16) {
- } else if (bps == 8) {
- readTiff8bit(buffer, im, photometric, x, y, width, height, has_alpha, extra, 0);
- } else if (is_bw) {
- readTiffBw(buffer, im, photometric, x, y, width, height, has_alpha, extra, 0);
- } else {
- /* TODO: implement some default reader or detect this case earlier use force_rgb */
- }
- }
- }
-end:
- gdFree(buffer);
- return success;
-}
-
-static int createFromTiffLines(TIFF *tif, gdImagePtr im, uint16 bps, uint16 photometric,
- char has_alpha, char is_bw, int extra)
-{
- uint16 planar;
- uint32 im_height, im_width, y;
-
- unsigned char *buffer;
- int success = GD_SUCCESS;
-
- if (!TIFFGetField(tif, TIFFTAG_PLANARCONFIG, &planar)) {
- planar = PLANARCONFIG_CONTIG;
- }
-
- if (!TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &im_height)) {
- gd_error("Can't fetch TIFF height\n");
- return FALSE;
- }
-
- if (!TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &im_width)) {
- gd_error("Can't fetch TIFF width \n");
- return FALSE;
- }
-
- buffer = (unsigned char *)gdMalloc(im_width * 4);
- if (!buffer) {
- return GD_FAILURE;
- }
- if (planar == PLANARCONFIG_CONTIG) {
- switch (bps) {
- case 16:
- /* TODO
- * or simply use force_rgba
- */
- break;
-
- case 8:
- for (y = 0; y < im_height; y++ ) {
- if (TIFFReadScanline (tif, buffer, y, 0) < 0) {
- gd_error("Error while reading scanline %i", y);
- success = GD_FAILURE;
- break;
- }
- /* reading one line at a time */
- readTiff8bit(buffer, im, photometric, 0, y, im_width, 1, has_alpha, extra, 0);
- }
- break;
-
- default:
- if (is_bw) {
- for (y = 0; y < im_height; y++ ) {
- if (TIFFReadScanline (tif, buffer, y, 0) < 0) {
- gd_error("Error while reading scanline %i", y);
- success = GD_FAILURE;
- break;
- }
- /* reading one line at a time */
- readTiffBw(buffer, im, photometric, 0, y, im_width, 1, has_alpha, extra, 0);
- }
- } else {
- /* TODO: implement some default reader or detect this case earlier > force_rgb */
- }
- break;
- }
- } else {
- /* TODO: implement a reader for separate panes. We detect this case earlier for now and use force_rgb */
- }
-
- gdFree(buffer);
- return success;
-}
-
-static int createFromTiffRgba(TIFF * tif, gdImagePtr im)
-{
- int a;
- int x, y;
- int alphaBlendingFlag = 0;
- int color;
- int width = im->sx;
- int height = im->sy;
- uint32 *buffer;
- uint32 rgba;
- int success;
-
- buffer = (uint32 *) gdCalloc(sizeof(uint32), width * height);
- if (!buffer) {
- return GD_FAILURE;
- }
-
- /* switch off colour merging on target gd image just while we write out
- * content - we want to preserve the alpha data until the user chooses
- * what to do with the image */
- alphaBlendingFlag = im->alphaBlendingFlag;
- gdImageAlphaBlending(im, 0);
-
- success = TIFFReadRGBAImage(tif, width, height, buffer, 1);
-
- if (success) {
- for(y = 0; y < height; y++) {
- for(x = 0; x < width; x++) {
- /* if it doesn't already exist, allocate a new colour,
- * else use existing one */
- rgba = buffer[(y * width + x)];
- a = (0xff - TIFFGetA(rgba)) / 2;
- color = gdTrueColorAlpha(TIFFGetR(rgba), TIFFGetG(rgba), TIFFGetB(rgba), a);
-
- /* set pixel colour to this colour */
- gdImageSetPixel(im, x, height - y - 1, color);
- }
- }
- }
-
- gdFree(buffer);
-
- /* now reset colour merge for alpha blending routines */
- gdImageAlphaBlending(im, alphaBlendingFlag);
- return success;
-}
-
-/*
- Function: gdImageCreateFromTiffCtx
-
- Create a gdImage from a TIFF file input from an gdIOCtx.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiffCtx(gdIOCtx *infile)
-{
- TIFF *tif;
- tiff_handle *th;
-
- uint16 bps, spp, photometric;
- uint16 orientation;
- int width, height;
- uint16 extra, *extra_types;
- uint16 planar;
- char has_alpha, is_bw, is_gray;
- char force_rgba = FALSE;
- char save_transparent;
- int image_type;
- int ret;
- float res_float;
-
- gdImagePtr im = NULL;
-
- th = new_tiff_handle(infile);
- if (!th) {
- return NULL;
- }
-
- tif = TIFFClientOpen("", "rb", th, tiff_readproc,
- tiff_writeproc,
- tiff_seekproc,
- tiff_closeproc,
- tiff_sizeproc,
- tiff_mapproc,
- tiff_unmapproc);
-
- if (!tif) {
- gd_error("Cannot open TIFF image");
- gdFree(th);
- return NULL;
- }
-
- if (!TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width)) {
- gd_error("TIFF error, Cannot read image width");
- goto error;
- }
-
- if (!TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height)) {
- gd_error("TIFF error, Cannot read image width");
- goto error;
- }
-
- TIFFGetFieldDefaulted (tif, TIFFTAG_BITSPERSAMPLE, &bps);
-
- /* Unsupported bps, force to RGBA */
- if (bps != 1 /*bps > 8 && bps != 16*/) {
- force_rgba = TRUE;
- }
-
- TIFFGetFieldDefaulted (tif, TIFFTAG_SAMPLESPERPIXEL, &spp);
-
- if (!TIFFGetField (tif, TIFFTAG_EXTRASAMPLES, &extra, &extra_types)) {
- extra = 0;
- }
-
- if (!TIFFGetField (tif, TIFFTAG_PHOTOMETRIC, &photometric)) {
- uint16 compression;
- if (TIFFGetField(tif, TIFFTAG_COMPRESSION, &compression) &&
- (compression == COMPRESSION_CCITTFAX3 ||
- compression == COMPRESSION_CCITTFAX4 ||
- compression == COMPRESSION_CCITTRLE ||
- compression == COMPRESSION_CCITTRLEW)) {
- gd_error("Could not get photometric. "
- "Image is CCITT compressed, assuming min-is-white");
- photometric = PHOTOMETRIC_MINISWHITE;
- } else {
- gd_error("Could not get photometric. "
- "Assuming min-is-black");
-
- photometric = PHOTOMETRIC_MINISBLACK;
- }
- }
- save_transparent = FALSE;
-
- /* test if the extrasample represents an associated alpha channel... */
- if (extra > 0 && (extra_types[0] == EXTRASAMPLE_ASSOCALPHA)) {
- has_alpha = TRUE;
- save_transparent = FALSE;
- --extra;
- } else if (extra > 0 && (extra_types[0] == EXTRASAMPLE_UNASSALPHA)) {
- has_alpha = TRUE;
- save_transparent = TRUE;
- --extra;
- } else if (extra > 0 && (extra_types[0] == EXTRASAMPLE_UNSPECIFIED)) {
- /* assuming unassociated alpha if unspecified */
- gd_error("alpha channel type not defined, assuming alpha is not premultiplied");
- has_alpha = TRUE;
- save_transparent = TRUE;
- --extra;
- } else {
- has_alpha = FALSE;
- }
-
- if (photometric == PHOTOMETRIC_RGB && spp > 3 + extra) {
- has_alpha = TRUE;
- extra = spp - 4;
- } else if (photometric != PHOTOMETRIC_RGB && spp > 1 + extra) {
- has_alpha = TRUE;
- extra = spp - 2;
- }
-
- is_bw = FALSE;
- is_gray = FALSE;
-
- switch (photometric) {
- case PHOTOMETRIC_MINISBLACK:
- case PHOTOMETRIC_MINISWHITE:
- if (!has_alpha && bps == 1 && spp == 1) {
- image_type = GD_INDEXED;
- is_bw = TRUE;
- } else {
- image_type = GD_GRAY;
- }
- break;
-
- case PHOTOMETRIC_RGB:
- image_type = GD_RGB;
- break;
-
- case PHOTOMETRIC_PALETTE:
- image_type = GD_INDEXED;
- break;
-
- default:
- force_rgba = TRUE;
- break;
- }
-
- /* Force rgba if image has 1bps, but is not bw */
- if (bps == 1 && !is_bw) {
- force_rgba = TRUE;
- }
-
- if (!TIFFGetField (tif, TIFFTAG_PLANARCONFIG, &planar)) {
- planar = PLANARCONFIG_CONTIG;
- }
-
- /* Force rgba if image plans are not contiguous */
- if (force_rgba || planar != PLANARCONFIG_CONTIG) {
- image_type = GD_RGB;
- }
-
- if (!force_rgba &&
- (image_type == GD_PALETTE || image_type == GD_INDEXED || image_type == GD_GRAY)) {
- im = gdImageCreate(width, height);
- if (!im) goto error;
- readTiffColorMap(im, tif, is_bw, photometric);
- } else {
- im = gdImageCreateTrueColor(width, height);
- if (!im) goto error;
- }
-
-#ifdef DEBUG
- printf("force rgba: %i\n", force_rgba);
- printf("has_alpha: %i\n", has_alpha);
- printf("save trans: %i\n", save_transparent);
- printf("is_bw: %i\n", is_bw);
- printf("is_gray: %i\n", is_gray);
- printf("type: %i\n", image_type);
-#else
- (void)is_gray;
- (void)save_transparent;
-#endif
-
- if (force_rgba) {
- ret = createFromTiffRgba(tif, im);
- } else if (TIFFIsTiled(tif)) {
- ret = createFromTiffTiles(tif, im, bps, photometric, has_alpha, is_bw, extra);
- } else {
- ret = createFromTiffLines(tif, im, bps, photometric, has_alpha, is_bw, extra);
- }
-
- if (!ret) {
- gdImageDestroy(im);
- im = NULL;
- goto error;
- }
-
- if (TIFFGetField(tif, TIFFTAG_XRESOLUTION, &res_float)) {
- im->res_x = (unsigned int)res_float; //truncate
- }
- if (TIFFGetField(tif, TIFFTAG_YRESOLUTION, &res_float)) {
- im->res_y = (unsigned int)res_float; //truncate
- }
-
- if (TIFFGetField(tif, TIFFTAG_ORIENTATION, &orientation)) {
- switch (orientation) {
- case ORIENTATION_TOPLEFT:
- case ORIENTATION_TOPRIGHT:
- case ORIENTATION_BOTRIGHT:
- case ORIENTATION_BOTLEFT:
- break;
-
- default:
- gd_error("Orientation %d not handled yet!", orientation);
- break;
- }
- }
-error:
- TIFFClose(tif);
- gdFree(th);
- return im;
-}
-
-/*
- Function: gdImageCreateFromTIFF
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiff(FILE *inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- if (in == NULL) return NULL;
- im = gdImageCreateFromTiffCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromTiffPtr
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiffPtr(int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx (size, data, 0);
- if (in == NULL) return NULL;
- im = gdImageCreateFromTiffCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageTiff
-*/
-BGD_DECLARE(void) gdImageTiff(gdImagePtr im, FILE *outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageTiffCtx(im, out); /* what's an fg again? */
- out->gd_free(out);
-}
-
-/*
- Function: gdImageTiffPtr
-*/
-BGD_DECLARE(void *) gdImageTiffPtr(gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx (2048, NULL);
- if (out == NULL) return NULL;
- gdImageTiffCtx(im, out); /* what's an fg again? */
- rv = gdDPExtractData(out, size);
- out->gd_free(out);
- return rv;
-}
-
-#else
-
-static void _noTiffError(void)
-{
- gd_error("TIFF image support has been disabled\n");
-}
-
-BGD_DECLARE(void) gdImageTiffCtx(gdImagePtr image, gdIOCtx *out)
-{
- _noTiffError();
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiffCtx(gdIOCtx *infile)
-{
- _noTiffError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiff(FILE *inFile)
-{
- _noTiffError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromTiffPtr(int size, void *data)
-{
- _noTiffError();
- return NULL;
-}
-
-BGD_DECLARE(void) gdImageTiff(gdImagePtr im, FILE *outFile)
-{
- _noTiffError();
-}
-
-BGD_DECLARE(void *) gdImageTiffPtr(gdImagePtr im, int *size)
-{
- _noTiffError();
- return NULL;
-}
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_topal.c b/Build/source/libs/gd/libgd-src/src/gd_topal.c
deleted file mode 100644
index 5ac226ae8fd..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_topal.c
+++ /dev/null
@@ -1,1803 +0,0 @@
-/* TODO: oim and nim in the lower level functions;
- correct use of stub (sigh). */
-
-/* 2.0.12: a new adaptation from the same original, this time
- by Barend Gehrels. My attempt to incorporate alpha channel
- into the result worked poorly and degraded the quality of
- palette conversion even when the source contained no
- alpha channel data. This version does not attempt to produce
- an output file with transparency in some of the palette
- indexes, which, in practice, doesn't look so hot anyway. TBB */
-
-/*
- * gd_topal, adapted from jquant2.c
- *
- * Copyright (C) 1991-1996, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains 2-pass color quantization (color mapping) routines.
- * These routines provide selection of a custom color map for an image,
- * followed by mapping of the image to that color map, with optional
- * Floyd-Steinberg dithering.
- * It is also possible to use just the second pass to map to an arbitrary
- * externally-given color map.
- *
- * Note: ordered dithering is not supported, since there isn't any fast
- * way to compute intercolor distances; it's unclear that ordered dither's
- * fundamental assumptions even hold with an irregularly spaced color map.
- */
-
-/**
- * File: Color Quantization
- *
- * Functions for truecolor to palette conversion
- */
-
-/*
- * THOMAS BOUTELL & BAREND GEHRELS, february 2003
- * adapted the code to work within gd rather than within libjpeg.
- * If it is not working, it's not Thomas G. Lane's fault.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef HAVE_LIBIMAGEQUANT
-#include <libimagequant.h>
-#endif
-
-/* (Re)define some defines known by libjpeg */
-#define QUANT_2PASS_SUPPORTED
-
-#define RGB_RED 0
-#define RGB_GREEN 1
-#define RGB_BLUE 2
-
-#define JSAMPLE unsigned char
-#define MAXJSAMPLE (gdMaxColors-1)
-#define BITS_IN_JSAMPLE 8
-
-#define JSAMPROW int*
-#define JDIMENSION int
-
-#define METHODDEF(type) static type
-#define LOCAL(type) static type
-
-
-/* We assume that right shift corresponds to signed division by 2 with
- * rounding towards minus infinity. This is correct for typical "arithmetic
- * shift" instructions that shift in copies of the sign bit. But some
- * C compilers implement >> with an unsigned shift. For these machines you
- * must define RIGHT_SHIFT_IS_UNSIGNED.
- * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
- * It is only applied with constant shift counts. SHIFT_TEMPS must be
- * included in the variables of any routine using RIGHT_SHIFT.
- */
-
-#ifdef RIGHT_SHIFT_IS_UNSIGNED
-#define SHIFT_TEMPS INT32 shift_temp;
-#define RIGHT_SHIFT(x,shft) \
- ((shift_temp = (x)) < 0 ? \
- (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
- (shift_temp >> (shft)))
-#else
-#define SHIFT_TEMPS
-#define RIGHT_SHIFT(x,shft) ((x) >> (shft))
-#endif
-
-
-#define range_limit(x) { if(x<0) x=0; if (x>255) x=255; }
-
-
-#ifndef INT16
-#define INT16 short
-#endif
-
-#ifndef UINT16
-#define UINT16 unsigned short
-#endif
-
-#ifndef INT32
-#define INT32 int
-#endif
-
-#ifndef FAR
-#define FAR
-#endif
-
-
-
-#ifndef boolean
-#define boolean int
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-
-#define input_buf (oim->tpixels)
-#define output_buf (nim->pixels)
-
-
-#ifdef QUANT_2PASS_SUPPORTED
-
-
-/*
- * This module implements the well-known Heckbert paradigm for color
- * quantization. Most of the ideas used here can be traced back to
- * Heckbert's seminal paper
- * Heckbert, Paul. "Color Image Quantization for Frame Buffer Display",
- * Proc. SIGGRAPH '82, Computer Graphics v.16 #3 (July 1982), pp 297-304.
- *
- * In the first pass over the image, we accumulate a histogram showing the
- * usage count of each possible color. To keep the histogram to a reasonable
- * size, we reduce the precision of the input; typical practice is to retain
- * 5 or 6 bits per color, so that 8 or 4 different input values are counted
- * in the same histogram cell.
- *
- * Next, the color-selection step begins with a box representing the whole
- * color space, and repeatedly splits the "largest" remaining box until we
- * have as many boxes as desired colors. Then the mean color in each
- * remaining box becomes one of the possible output colors.
- *
- * The second pass over the image maps each input pixel to the closest output
- * color (optionally after applying a Floyd-Steinberg dithering correction).
- * This mapping is logically trivial, but making it go fast enough requires
- * considerable care.
- *
- * Heckbert-style quantizers vary a good deal in their policies for choosing
- * the "largest" box and deciding where to cut it. The particular policies
- * used here have proved out well in experimental comparisons, but better ones
- * may yet be found.
- *
- * In earlier versions of the IJG code, this module quantized in YCbCr color
- * space, processing the raw upsampled data without a color conversion step.
- * This allowed the color conversion math to be done only once per colormap
- * entry, not once per pixel. However, that optimization precluded other
- * useful optimizations (such as merging color conversion with upsampling)
- * and it also interfered with desired capabilities such as quantizing to an
- * externally-supplied colormap. We have therefore abandoned that approach.
- * The present code works in the post-conversion color space, typically RGB.
- *
- * To improve the visual quality of the results, we actually work in scaled
- * RGB space, giving G distances more weight than R, and R in turn more than
- * B. To do everything in integer math, we must use integer scale factors.
- * The 2/3/1 scale factors used here correspond loosely to the relative
- * weights of the colors in the NTSC grayscale equation.
- * If you want to use this code to quantize a non-RGB color space, you'll
- * probably need to change these scale factors.
- */
-
-#define R_SCALE 2 /* scale R distances by this much */
-#define G_SCALE 3 /* scale G distances by this much */
-#define B_SCALE 1 /* and B by this much */
-
-/* Relabel R/G/B as components 0/1/2, respecting the RGB ordering defined
- * in jmorecfg.h. As the code stands, it will do the right thing for R,G,B
- * and B,G,R orders. If you define some other weird order in jmorecfg.h,
- * you'll get compile errors until you extend this logic. In that case
- * you'll probably want to tweak the histogram sizes too.
- */
-
-#if RGB_RED == 0
-#define C0_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 0
-#define C0_SCALE B_SCALE
-#endif
-#if RGB_GREEN == 1
-#define C1_SCALE G_SCALE
-#endif
-#if RGB_RED == 2
-#define C2_SCALE R_SCALE
-#endif
-#if RGB_BLUE == 2
-#define C2_SCALE B_SCALE
-#endif
-
-
-/*
- * First we have the histogram data structure and routines for creating it.
- *
- * The number of bits of precision can be adjusted by changing these symbols.
- * We recommend keeping 6 bits for G and 5 each for R and B.
- * If you have plenty of memory and cycles, 6 bits all around gives marginally
- * better results; if you are short of memory, 5 bits all around will save
- * some space but degrade the results.
- * To maintain a fully accurate histogram, we'd need to allocate a "long"
- * (preferably unsigned long) for each cell. In practice this is overkill;
- * we can get by with 16 bits per cell. Few of the cell counts will overflow,
- * and clamping those that do overflow to the maximum value will give close-
- * enough results. This reduces the recommended histogram size from 256Kb
- * to 128Kb, which is a useful savings on PC-class machines.
- * (In the second pass the histogram space is re-used for pixel mapping data;
- * in that capacity, each cell must be able to store zero to the number of
- * desired colors. 16 bits/cell is plenty for that too.)
- * Since the JPEG code is intended to run in small memory model on 80x86
- * machines, we can't just allocate the histogram in one chunk. Instead
- * of a true 3-D array, we use a row of pointers to 2-D arrays. Each
- * pointer corresponds to a C0 value (typically 2^5 = 32 pointers) and
- * each 2-D array has 2^6*2^5 = 2048 or 2^6*2^6 = 4096 entries. Note that
- * on 80x86 machines, the pointer row is in near memory but the actual
- * arrays are in far memory (same arrangement as we use for image arrays).
- */
-
-#define MAXNUMCOLORS (MAXJSAMPLE+1) /* maximum size of colormap */
-
-/* These will do the right thing for either R,G,B or B,G,R color order,
- * but you may not like the results for other color orders.
- */
-#define HIST_C0_BITS 5 /* bits of precision in R/B histogram */
-#define HIST_C1_BITS 6 /* bits of precision in G histogram */
-#define HIST_C2_BITS 5 /* bits of precision in B/R histogram */
-
-/* Number of elements along histogram axes. */
-#define HIST_C0_ELEMS (1<<HIST_C0_BITS)
-#define HIST_C1_ELEMS (1<<HIST_C1_BITS)
-#define HIST_C2_ELEMS (1<<HIST_C2_BITS)
-
-/* These are the amounts to shift an input value to get a histogram index. */
-#define C0_SHIFT (BITS_IN_JSAMPLE-HIST_C0_BITS)
-#define C1_SHIFT (BITS_IN_JSAMPLE-HIST_C1_BITS)
-#define C2_SHIFT (BITS_IN_JSAMPLE-HIST_C2_BITS)
-
-
-typedef UINT16 histcell; /* histogram cell; prefer an unsigned type */
-
-typedef histcell FAR *histptr; /* for pointers to histogram cells */
-
-typedef histcell hist1d[HIST_C2_ELEMS]; /* typedefs for the array */
-typedef hist1d FAR *hist2d; /* type for the 2nd-level pointers */
-typedef hist2d *hist3d; /* type for top-level pointer */
-
-
-/* Declarations for Floyd-Steinberg dithering.
- *
- * Errors are accumulated into the array fserrors[], at a resolution of
- * 1/16th of a pixel count. The error at a given pixel is propagated
- * to its not-yet-processed neighbors using the standard F-S fractions,
- * ... (here) 7/16
- * 3/16 5/16 1/16
- * We work left-to-right on even rows, right-to-left on odd rows.
- *
- * We can get away with a single array (holding one row's worth of errors)
- * by using it to store the current row's errors at pixel columns not yet
- * processed, but the next row's errors at columns already processed. We
- * need only a few extra variables to hold the errors immediately around the
- * current column. (If we are lucky, those variables are in registers, but
- * even if not, they're probably cheaper to access than array elements are.)
- *
- * The fserrors[] array has (#columns + 2) entries; the extra entry at
- * each end saves us from special-casing the first and last pixels.
- * Each entry is three values long, one value for each color component.
- *
- * Note: on a wide image, we might not have enough room in a PC's near data
- * segment to hold the error array; so it is allocated with alloc_large.
- */
-
-#if BITS_IN_JSAMPLE == 8
-typedef INT16 FSERROR; /* 16 bits should be enough */
-typedef int LOCFSERROR; /* use 'int' for calculation temps */
-#else
-typedef INT32 FSERROR; /* may need more than 16 bits */
-typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */
-#endif
-
-typedef FSERROR FAR *FSERRPTR; /* pointer to error array (in FAR storage!) */
-
-
-/* Private subobject */
-
-typedef struct {
- /* Variables for accumulating image statistics */
- hist3d histogram; /* pointer to the histogram */
-
-
- /* Variables for Floyd-Steinberg dithering */
- FSERRPTR fserrors; /* accumulated errors */
-
- boolean on_odd_row; /* flag to remember which row we are on */
- int *error_limiter; /* table for clamping the applied error */
- int *error_limiter_storage; /* gdMalloc'd storage for the above */
-}
-my_cquantizer;
-
-typedef my_cquantizer *my_cquantize_ptr;
-
-
-/*
- * Prescan some rows of pixels.
- * In this module the prescan simply updates the histogram, which has been
- * initialized to zeroes by start_pass.
- * An output_buf parameter is required by the method signature, but no data
- * is actually output (in fact the buffer controller is probably passing a
- * NULL pointer).
- */
-
-METHODDEF (void)
-prescan_quantize (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-{
- register JSAMPROW ptr;
- register histptr histp;
- register hist3d histogram = cquantize->histogram;
- int row;
- JDIMENSION col;
- int width = oim->sx;
- int num_rows = oim->sy;
-
- (void)nim;
-
- for (row = 0; row < num_rows; row++) {
- ptr = input_buf[row];
- for (col = width; col > 0; col--) {
- int r = gdTrueColorGetRed (*ptr) >> C0_SHIFT;
- int g = gdTrueColorGetGreen (*ptr) >> C1_SHIFT;
- int b = gdTrueColorGetBlue (*ptr) >> C2_SHIFT;
- /* 2.0.12: Steven Brown: support a single totally transparent
- color in the original. */
- if ((oim->transparent >= 0) && (*ptr == oim->transparent)) {
- ptr++;
- continue;
- }
- /* get pixel value and index into the histogram */
- histp = &histogram[r][g][b];
- /* increment, check for overflow and undo increment if so. */
- if (++(*histp) == 0)
- (*histp)--;
- ptr++;
- }
- }
-}
-
-
-/*
- * Next we have the really interesting routines: selection of a colormap
- * given the completed histogram.
- * These routines work with a list of "boxes", each representing a rectangular
- * subset of the input color space (to histogram precision).
- */
-
-typedef struct {
- /* The bounds of the box (inclusive); expressed as histogram indexes */
- int c0min, c0max;
- int c1min, c1max;
- int c2min, c2max;
- /* The volume (actually 2-norm) of the box */
- INT32 volume;
- /* The number of nonzero histogram cells within this box */
- long colorcount;
-}
-box;
-
-typedef box *boxptr;
-
-
-LOCAL (boxptr) find_biggest_color_pop (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest color population */
-/* Returns NULL if no splittable boxes remain */
-{
- register boxptr boxp;
- register int i;
- register long maxc = 0;
- boxptr which = NULL;
-
- for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
- if (boxp->colorcount > maxc && boxp->volume > 0) {
- which = boxp;
- maxc = boxp->colorcount;
- }
- }
- return which;
-}
-
-
-LOCAL (boxptr) find_biggest_volume (boxptr boxlist, int numboxes)
-/* Find the splittable box with the largest (scaled) volume */
-/* Returns NULL if no splittable boxes remain */
-{
- register boxptr boxp;
- register int i;
- register INT32 maxv = 0;
- boxptr which = NULL;
-
- for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
- if (boxp->volume > maxv) {
- which = boxp;
- maxv = boxp->volume;
- }
- }
- return which;
-}
-
-
-LOCAL (void)
-update_box (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize, boxptr boxp)
-{
- hist3d histogram = cquantize->histogram;
- histptr histp;
- int c0, c1, c2;
- int c0min, c0max, c1min, c1max, c2min, c2max;
- INT32 dist0, dist1, dist2;
- long ccount;
- (void)oim;
- (void)nim;
-
- c0min = boxp->c0min;
- c0max = boxp->c0max;
- c1min = boxp->c1min;
- c1max = boxp->c1max;
- c2min = boxp->c2min;
- c2max = boxp->c2max;
-
- if (c0max > c0min)
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++) {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0) {
- boxp->c0min = c0min = c0;
- goto have_c0min;
- }
- }
-have_c0min:
- if (c0max > c0min)
- for (c0 = c0max; c0 >= c0min; c0--)
- for (c1 = c1min; c1 <= c1max; c1++) {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0) {
- boxp->c0max = c0max = c0;
- goto have_c0max;
- }
- }
-have_c0max:
- if (c1max > c1min)
- for (c1 = c1min; c1 <= c1max; c1++)
- for (c0 = c0min; c0 <= c0max; c0++) {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0) {
- boxp->c1min = c1min = c1;
- goto have_c1min;
- }
- }
-have_c1min:
- if (c1max > c1min)
- for (c1 = c1max; c1 >= c1min; c1--)
- for (c0 = c0min; c0 <= c0max; c0++) {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++)
- if (*histp++ != 0) {
- boxp->c1max = c1max = c1;
- goto have_c1max;
- }
- }
-have_c1max:
- if (c2max > c2min)
- for (c2 = c2min; c2 <= c2max; c2++)
- for (c0 = c0min; c0 <= c0max; c0++) {
- histp = &histogram[c0][c1min][c2];
- for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
- if (*histp != 0) {
- boxp->c2min = c2min = c2;
- goto have_c2min;
- }
- }
-have_c2min:
- if (c2max > c2min)
- for (c2 = c2max; c2 >= c2min; c2--)
- for (c0 = c0min; c0 <= c0max; c0++) {
- histp = &histogram[c0][c1min][c2];
- for (c1 = c1min; c1 <= c1max; c1++, histp += HIST_C2_ELEMS)
- if (*histp != 0) {
- boxp->c2max = c2max = c2;
- goto have_c2max;
- }
- }
-have_c2max:
-
- /* Update box volume.
- * We use 2-norm rather than real volume here; this biases the method
- * against making long narrow boxes, and it has the side benefit that
- * a box is splittable iff norm > 0.
- * Since the differences are expressed in histogram-cell units,
- * we have to shift back to JSAMPLE units to get consistent distances;
- * after which, we scale according to the selected distance scale factors.
- */
- dist0 = ((c0max - c0min) << C0_SHIFT) * C0_SCALE;
- dist1 = ((c1max - c1min) << C1_SHIFT) * C1_SCALE;
- dist2 = ((c2max - c2min) << C2_SHIFT) * C2_SCALE;
- boxp->volume = dist0 * dist0 + dist1 * dist1 + dist2 * dist2;
-
- /* Now scan remaining volume of box and compute population */
- ccount = 0;
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++) {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++, histp++)
- if (*histp != 0) {
- ccount++;
- }
- }
- boxp->colorcount = ccount;
-}
-
-
-LOCAL (int)
-median_cut (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- boxptr boxlist, int numboxes, int desired_colors)
-/* Repeatedly select and split the largest box until we have enough boxes */
-{
- int n, lb;
- int c0, c1, c2, cmax;
- register boxptr b1, b2;
-
- while (numboxes < desired_colors) {
- /* Select box to split.
- * Current algorithm: by population for first half, then by volume.
- */
- if (numboxes * 2 <= desired_colors) {
- b1 = find_biggest_color_pop (boxlist, numboxes);
- } else {
- b1 = find_biggest_volume (boxlist, numboxes);
- }
- if (b1 == NULL) /* no splittable boxes left! */
- break;
- b2 = &boxlist[numboxes]; /* where new box will go */
- /* Copy the color bounds to the new box. */
- b2->c0max = b1->c0max;
- b2->c1max = b1->c1max;
- b2->c2max = b1->c2max;
- b2->c0min = b1->c0min;
- b2->c1min = b1->c1min;
- b2->c2min = b1->c2min;
- /* Choose which axis to split the box on.
- * Current algorithm: longest scaled axis.
- * See notes in update_box about scaling distances.
- */
- c0 = ((b1->c0max - b1->c0min) << C0_SHIFT) * C0_SCALE;
- c1 = ((b1->c1max - b1->c1min) << C1_SHIFT) * C1_SCALE;
- c2 = ((b1->c2max - b1->c2min) << C2_SHIFT) * C2_SCALE;
- /* We want to break any ties in favor of green, then red, blue last.
- * This code does the right thing for R,G,B or B,G,R color orders only.
- */
-#if RGB_RED == 0
- cmax = c1;
- n = 1;
- if (c0 > cmax) {
- cmax = c0;
- n = 0;
- }
- if (c2 > cmax) {
- n = 2;
- }
-#else
- cmax = c1;
- n = 1;
- if (c2 > cmax) {
- cmax = c2;
- n = 2;
- }
- if (c0 > cmax) {
- n = 0;
- }
-#endif
- /* Choose split point along selected axis, and update box bounds.
- * Current algorithm: split at halfway point.
- * (Since the box has been shrunk to minimum volume,
- * any split will produce two nonempty subboxes.)
- * Note that lb value is max for lower box, so must be < old max.
- */
- switch (n) {
- case 0:
- lb = (b1->c0max + b1->c0min) / 2;
- b1->c0max = lb;
- b2->c0min = lb + 1;
- break;
- case 1:
- lb = (b1->c1max + b1->c1min) / 2;
- b1->c1max = lb;
- b2->c1min = lb + 1;
- break;
- case 2:
- lb = (b1->c2max + b1->c2min) / 2;
- b1->c2max = lb;
- b2->c2min = lb + 1;
- break;
- }
- /* Update stats for boxes */
- update_box (oim, nim, cquantize, b1);
- update_box (oim, nim, cquantize, b2);
- numboxes++;
- }
- return numboxes;
-}
-
-
-LOCAL (void)
-compute_color (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- boxptr boxp, int icolor)
-{
- hist3d histogram = cquantize->histogram;
- histptr histp;
- int c0, c1, c2;
- int c0min, c0max, c1min, c1max, c2min, c2max;
- long count = 0; /* 2.0.28: = 0 */
- long total = 0;
- long c0total = 0;
- long c1total = 0;
- long c2total = 0;
- (void)oim;
-
- c0min = boxp->c0min;
- c0max = boxp->c0max;
- c1min = boxp->c1min;
- c1max = boxp->c1max;
- c2min = boxp->c2min;
- c2max = boxp->c2max;
-
- for (c0 = c0min; c0 <= c0max; c0++)
- for (c1 = c1min; c1 <= c1max; c1++) {
- histp = &histogram[c0][c1][c2min];
- for (c2 = c2min; c2 <= c2max; c2++) {
- if ((count = *histp++) != 0) {
- total += count;
- c0total +=
- ((c0 << C0_SHIFT) + ((1 << C0_SHIFT) >> 1)) * count;
- c1total +=
- ((c1 << C1_SHIFT) + ((1 << C1_SHIFT) >> 1)) * count;
- c2total +=
- ((c2 << C2_SHIFT) + ((1 << C2_SHIFT) >> 1)) * count;
- }
- }
- }
-
- /* 2.0.16: Paul den Dulk found an occasion where total can be 0 */
- if (total) {
- nim->red[icolor] = (int) ((c0total + (total >> 1)) / total);
- nim->green[icolor] = (int) ((c1total + (total >> 1)) / total);
- nim->blue[icolor] = (int) ((c2total + (total >> 1)) / total);
- } else {
- nim->red[icolor] = 255;
- nim->green[icolor] = 255;
- nim->blue[icolor] = 255;
- }
- nim->open[icolor] = 0;
-}
-
-
-LOCAL (void)
-select_colors (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize, int desired_colors)
-/* Master routine for color selection */
-{
- boxptr boxlist;
- int numboxes;
- int i;
-
- /* Allocate workspace for box list */
- /* This can't happen because we clamp desired_colors at gdMaxColors,
- but anyway */
- if (overflow2(desired_colors, sizeof (box))) {
- return;
- }
- boxlist = (boxptr) gdMalloc (desired_colors * sizeof (box));
- if (!boxlist) {
- return;
- }
- /* Initialize one box containing whole space */
- numboxes = 1;
- boxlist[0].c0min = 0;
- boxlist[0].c0max = MAXJSAMPLE >> C0_SHIFT;
- boxlist[0].c1min = 0;
- boxlist[0].c1max = MAXJSAMPLE >> C1_SHIFT;
- boxlist[0].c2min = 0;
- boxlist[0].c2max = MAXJSAMPLE >> C2_SHIFT;
- /* Shrink it to actually-used volume and set its statistics */
- update_box (oim, nim, cquantize, &boxlist[0]);
- /* Perform median-cut to produce final box list */
- numboxes = median_cut (oim, nim, cquantize, boxlist, numboxes, desired_colors);
- /* Compute the representative color for each box, fill colormap */
- for (i = 0; i < numboxes; i++)
- compute_color (oim, nim, cquantize, &boxlist[i], i);
- nim->colorsTotal = numboxes;
-
- /* If we had a pure transparency color, add it as the last palette entry.
- * Skip incrementing the color count so that the dither / matching phase
- * won't use it on pixels that shouldn't have been transparent. We'll
- * increment it after all that finishes. */
- if (oim->transparent >= 0) {
- /* Save the transparent color. */
- nim->red[nim->colorsTotal] = gdTrueColorGetRed (oim->transparent);
- nim->green[nim->colorsTotal] = gdTrueColorGetGreen (oim->transparent);
- nim->blue[nim->colorsTotal] = gdTrueColorGetBlue (oim->transparent);
- nim->alpha[nim->colorsTotal] = gdAlphaTransparent;
- nim->open[nim->colorsTotal] = 0;
- }
-
- gdFree (boxlist);
-}
-
-
-/*
- * These routines are concerned with the time-critical task of mapping input
- * colors to the nearest color in the selected colormap.
- *
- * We re-use the histogram space as an "inverse color map", essentially a
- * cache for the results of nearest-color searches. All colors within a
- * histogram cell will be mapped to the same colormap entry, namely the one
- * closest to the cell's center. This may not be quite the closest entry to
- * the actual input color, but it's almost as good. A zero in the cache
- * indicates we haven't found the nearest color for that cell yet; the array
- * is cleared to zeroes before starting the mapping pass. When we find the
- * nearest color for a cell, its colormap index plus one is recorded in the
- * cache for future use. The pass2 scanning routines call fill_inverse_cmap
- * when they need to use an unfilled entry in the cache.
- *
- * Our method of efficiently finding nearest colors is based on the "locally
- * sorted search" idea described by Heckbert and on the incremental distance
- * calculation described by Spencer W. Thomas in chapter III.1 of Graphics
- * Gems II (James Arvo, ed. Academic Press, 1991). Thomas points out that
- * the distances from a given colormap entry to each cell of the histogram can
- * be computed quickly using an incremental method: the differences between
- * distances to adjacent cells themselves differ by a constant. This allows a
- * fairly fast implementation of the "brute force" approach of computing the
- * distance from every colormap entry to every histogram cell. Unfortunately,
- * it needs a work array to hold the best-distance-so-far for each histogram
- * cell (because the inner loop has to be over cells, not colormap entries).
- * The work array elements have to be INT32s, so the work array would need
- * 256Kb at our recommended precision. This is not feasible in DOS machines.
- *
- * To get around these problems, we apply Thomas' method to compute the
- * nearest colors for only the cells within a small subbox of the histogram.
- * The work array need be only as big as the subbox, so the memory usage
- * problem is solved. Furthermore, we need not fill subboxes that are never
- * referenced in pass2; many images use only part of the color gamut, so a
- * fair amount of work is saved. An additional advantage of this
- * approach is that we can apply Heckbert's locality criterion to quickly
- * eliminate colormap entries that are far away from the subbox; typically
- * three-fourths of the colormap entries are rejected by Heckbert's criterion,
- * and we need not compute their distances to individual cells in the subbox.
- * The speed of this approach is heavily influenced by the subbox size: too
- * small means too much overhead, too big loses because Heckbert's criterion
- * can't eliminate as many colormap entries. Empirically the best subbox
- * size seems to be about 1/512th of the histogram (1/8th in each direction).
- *
- * Thomas' article also describes a refined method which is asymptotically
- * faster than the brute-force method, but it is also far more complex and
- * cannot efficiently be applied to small subboxes. It is therefore not
- * useful for programs intended to be portable to DOS machines. On machines
- * with plenty of memory, filling the whole histogram in one shot with Thomas'
- * refined method might be faster than the present code --- but then again,
- * it might not be any faster, and it's certainly more complicated.
- */
-
-
-/* log2(histogram cells in update box) for each axis; this can be adjusted */
-#define BOX_C0_LOG (HIST_C0_BITS-3)
-#define BOX_C1_LOG (HIST_C1_BITS-3)
-#define BOX_C2_LOG (HIST_C2_BITS-3)
-
-#define BOX_C0_ELEMS (1<<BOX_C0_LOG) /* # of hist cells in update box */
-#define BOX_C1_ELEMS (1<<BOX_C1_LOG)
-#define BOX_C2_ELEMS (1<<BOX_C2_LOG)
-
-#define BOX_C0_SHIFT (C0_SHIFT + BOX_C0_LOG)
-#define BOX_C1_SHIFT (C1_SHIFT + BOX_C1_LOG)
-#define BOX_C2_SHIFT (C2_SHIFT + BOX_C2_LOG)
-
-
-/*
- * The next three routines implement inverse colormap filling. They could
- * all be folded into one big routine, but splitting them up this way saves
- * some stack space (the mindist[] and bestdist[] arrays need not coexist)
- * and may allow some compilers to produce better code by registerizing more
- * inner-loop variables.
- */
-
-LOCAL (int)
-find_nearby_colors (
- gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- int minc0, int minc1, int minc2, JSAMPLE colorlist[])
-/* Locate the colormap entries close enough to an update box to be candidates
- * for the nearest entry to some cell(s) in the update box. The update box
- * is specified by the center coordinates of its first cell. The number of
- * candidate colormap entries is returned, and their colormap indexes are
- * placed in colorlist[].
- * This routine uses Heckbert's "locally sorted search" criterion to select
- * the colors that need further consideration.
- */
-{
- int numcolors = nim->colorsTotal;
- int maxc0, maxc1, maxc2;
- int centerc0, centerc1, centerc2;
- int i, x, ncolors;
- INT32 minmaxdist, min_dist, max_dist, tdist;
- INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */
- (void)oim;
- (void)cquantize;
-
- /* Compute true coordinates of update box's upper corner and center.
- * Actually we compute the coordinates of the center of the upper-corner
- * histogram cell, which are the upper bounds of the volume we care about.
- * Note that since ">>" rounds down, the "center" values may be closer to
- * min than to max; hence comparisons to them must be "<=", not "<".
- */
- maxc0 = minc0 + ((1 << BOX_C0_SHIFT) - (1 << C0_SHIFT));
- centerc0 = (minc0 + maxc0) >> 1;
- maxc1 = minc1 + ((1 << BOX_C1_SHIFT) - (1 << C1_SHIFT));
- centerc1 = (minc1 + maxc1) >> 1;
- maxc2 = minc2 + ((1 << BOX_C2_SHIFT) - (1 << C2_SHIFT));
- centerc2 = (minc2 + maxc2) >> 1;
-
- /* For each color in colormap, find:
- * 1. its minimum squared-distance to any point in the update box
- * (zero if color is within update box);
- * 2. its maximum squared-distance to any point in the update box.
- * Both of these can be found by considering only the corners of the box.
- * We save the minimum distance for each color in mindist[];
- * only the smallest maximum distance is of interest.
- */
- minmaxdist = 0x7FFFFFFFL;
-
- for (i = 0; i < numcolors; i++) {
- /* We compute the squared-c0-distance term, then add in the other two. */
- x = nim->red[i];
- if (x < minc0) {
- tdist = (x - minc0) * C0_SCALE;
- min_dist = tdist * tdist;
- tdist = (x - maxc0) * C0_SCALE;
- max_dist = tdist * tdist;
- } else if (x > maxc0) {
- tdist = (x - maxc0) * C0_SCALE;
- min_dist = tdist * tdist;
- tdist = (x - minc0) * C0_SCALE;
- max_dist = tdist * tdist;
- } else {
- /* within cell range so no contribution to min_dist */
- min_dist = 0;
- if (x <= centerc0) {
- tdist = (x - maxc0) * C0_SCALE;
- max_dist = tdist * tdist;
- } else {
- tdist = (x - minc0) * C0_SCALE;
- max_dist = tdist * tdist;
- }
- }
-
- x = nim->green[i];
- if (x < minc1) {
- tdist = (x - minc1) * C1_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc1) * C1_SCALE;
- max_dist += tdist * tdist;
- } else if (x > maxc1) {
- tdist = (x - maxc1) * C1_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc1) * C1_SCALE;
- max_dist += tdist * tdist;
- } else {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc1) {
- tdist = (x - maxc1) * C1_SCALE;
- max_dist += tdist * tdist;
- } else {
- tdist = (x - minc1) * C1_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
- x = nim->blue[i];
- if (x < minc2) {
- tdist = (x - minc2) * C2_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - maxc2) * C2_SCALE;
- max_dist += tdist * tdist;
- } else if (x > maxc2) {
- tdist = (x - maxc2) * C2_SCALE;
- min_dist += tdist * tdist;
- tdist = (x - minc2) * C2_SCALE;
- max_dist += tdist * tdist;
- } else {
- /* within cell range so no contribution to min_dist */
- if (x <= centerc2) {
- tdist = (x - maxc2) * C2_SCALE;
- max_dist += tdist * tdist;
- } else {
- tdist = (x - minc2) * C2_SCALE;
- max_dist += tdist * tdist;
- }
- }
-
- mindist[i] = min_dist; /* save away the results */
- if (max_dist < minmaxdist)
- minmaxdist = max_dist;
- }
-
- /* Now we know that no cell in the update box is more than minmaxdist
- * away from some colormap entry. Therefore, only colors that are
- * within minmaxdist of some part of the box need be considered.
- */
- ncolors = 0;
- for (i = 0; i < numcolors; i++) {
- if (mindist[i] <= minmaxdist)
- colorlist[ncolors++] = (JSAMPLE) i;
- }
- return ncolors;
-}
-
-
-LOCAL (void) find_best_colors (
- gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- int minc0, int minc1, int minc2,
- int numcolors, JSAMPLE colorlist[],
- JSAMPLE bestcolor[])
-/* Find the closest colormap entry for each cell in the update box,
- * given the list of candidate colors prepared by find_nearby_colors.
- * Return the indexes of the closest entries in the bestcolor[] array.
- * This routine uses Thomas' incremental distance calculation method to
- * find the distance from a colormap entry to successive cells in the box.
- */
-{
- int ic0, ic1, ic2;
- int i, icolor;
- register INT32 *bptr; /* pointer into bestdist[] array */
- JSAMPLE *cptr; /* pointer into bestcolor[] array */
- INT32 dist0, dist1; /* initial distance values */
- register INT32 dist2; /* current distance in inner loop */
- INT32 xx0, xx1; /* distance increments */
- register INT32 xx2;
- INT32 inc0, inc1, inc2; /* initial values for increments */
- /* This array holds the distance to the nearest-so-far color for each cell */
- INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
- (void)oim;
- (void)cquantize;
-
- /* Initialize best-distance for each cell of the update box */
- bptr = bestdist;
- for (i = BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS - 1; i >= 0; i--)
- *bptr++ = 0x7FFFFFFFL;
-
- /* For each color selected by find_nearby_colors,
- * compute its distance to the center of each cell in the box.
- * If that's less than best-so-far, update best distance and color number.
- */
-
- /* Nominal steps between cell centers ("x" in Thomas article) */
-#define STEP_C0 ((1 << C0_SHIFT) * C0_SCALE)
-#define STEP_C1 ((1 << C1_SHIFT) * C1_SCALE)
-#define STEP_C2 ((1 << C2_SHIFT) * C2_SCALE)
-
- for (i = 0; i < numcolors; i++) {
- int r, g, b;
- icolor = colorlist[i];
- r = nim->red[icolor];
- g = nim->green[icolor];
- b = nim->blue[icolor];
-
- /* Compute (square of) distance from minc0/c1/c2 to this color */
- inc0 = (minc0 - r) * C0_SCALE;
- dist0 = inc0 * inc0;
- inc1 = (minc1 - g) * C1_SCALE;
- dist0 += inc1 * inc1;
- inc2 = (minc2 - b) * C2_SCALE;
- dist0 += inc2 * inc2;
- /* Form the initial difference increments */
- inc0 = inc0 * (2 * STEP_C0) + STEP_C0 * STEP_C0;
- inc1 = inc1 * (2 * STEP_C1) + STEP_C1 * STEP_C1;
- inc2 = inc2 * (2 * STEP_C2) + STEP_C2 * STEP_C2;
- /* Now loop over all cells in box, updating distance per Thomas method */
- bptr = bestdist;
- cptr = bestcolor;
- xx0 = inc0;
- for (ic0 = BOX_C0_ELEMS - 1; ic0 >= 0; ic0--) {
- dist1 = dist0;
- xx1 = inc1;
- for (ic1 = BOX_C1_ELEMS - 1; ic1 >= 0; ic1--) {
- dist2 = dist1;
- xx2 = inc2;
- for (ic2 = BOX_C2_ELEMS - 1; ic2 >= 0; ic2--) {
- if (dist2 < *bptr) {
- *bptr = dist2;
- *cptr = (JSAMPLE) icolor;
- }
- dist2 += xx2;
- xx2 += 2 * STEP_C2 * STEP_C2;
- bptr++;
- cptr++;
- }
- dist1 += xx1;
- xx1 += 2 * STEP_C1 * STEP_C1;
- }
- dist0 += xx0;
- xx0 += 2 * STEP_C0 * STEP_C0;
- }
- }
-}
-
-
-LOCAL (void)
-fill_inverse_cmap (
- gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize,
- int c0, int c1, int c2)
-/* Fill the inverse-colormap entries in the update box that contains */
-/* histogram cell c0/c1/c2. (Only that one cell MUST be filled, but */
-/* we can fill as many others as we wish.) */
-{
- hist3d histogram = cquantize->histogram;
- int minc0, minc1, minc2; /* lower left corner of update box */
- int ic0, ic1, ic2;
- register JSAMPLE *cptr; /* pointer into bestcolor[] array */
- register histptr cachep; /* pointer into main cache array */
- /* This array lists the candidate colormap indexes. */
- JSAMPLE colorlist[MAXNUMCOLORS];
- int numcolors; /* number of candidate colors */
- /* This array holds the actually closest colormap index for each cell. */
- JSAMPLE bestcolor[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
-
- /* Convert cell coordinates to update box ID */
- c0 >>= BOX_C0_LOG;
- c1 >>= BOX_C1_LOG;
- c2 >>= BOX_C2_LOG;
-
- /* Compute true coordinates of update box's origin corner.
- * Actually we compute the coordinates of the center of the corner
- * histogram cell, which are the lower bounds of the volume we care about.
- */
- minc0 = (c0 << BOX_C0_SHIFT) + ((1 << C0_SHIFT) >> 1);
- minc1 = (c1 << BOX_C1_SHIFT) + ((1 << C1_SHIFT) >> 1);
- minc2 = (c2 << BOX_C2_SHIFT) + ((1 << C2_SHIFT) >> 1);
-
- /* Determine which colormap entries are close enough to be candidates
- * for the nearest entry to some cell in the update box.
- */
- numcolors =
- find_nearby_colors (oim, nim, cquantize, minc0, minc1, minc2, colorlist);
- find_best_colors (oim, nim, cquantize, minc0, minc1, minc2, numcolors,
- colorlist, bestcolor);
-
- /* Save the best color numbers (plus 1) in the main cache array */
- c0 <<= BOX_C0_LOG; /* convert ID back to base cell indexes */
- c1 <<= BOX_C1_LOG;
- c2 <<= BOX_C2_LOG;
- cptr = bestcolor;
- for (ic0 = 0; ic0 < BOX_C0_ELEMS; ic0++) {
- for (ic1 = 0; ic1 < BOX_C1_ELEMS; ic1++) {
- cachep = &histogram[c0 + ic0][c1 + ic1][c2];
- for (ic2 = 0; ic2 < BOX_C2_ELEMS; ic2++) {
- *cachep++ = (histcell) ((*cptr++) + 1);
- }
- }
- }
-}
-
-
-/*
- * Map some rows of pixels to the output colormapped representation.
- */
-
-METHODDEF (void)
-pass2_no_dither (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-{
- register int *inptr;
- register unsigned char *outptr;
- int width = oim->sx;
- int num_rows = oim->sy;
- hist3d histogram = cquantize->histogram;
- register int c0, c1, c2;
- int row;
- JDIMENSION col;
- register histptr cachep;
-
-
- for (row = 0; row < num_rows; row++) {
- inptr = input_buf[row];
- outptr = output_buf[row];
- for (col = width; col > 0; col--) {
- /* get pixel value and index into the cache */
- int r, g, b;
- r = gdTrueColorGetRed (*inptr);
- g = gdTrueColorGetGreen (*inptr);
- /*
- 2.0.24: inptr must not be incremented until after
- transparency check, if any. Thanks to "Super Pikeman."
- */
- b = gdTrueColorGetBlue (*inptr);
-
- /* If the pixel is transparent, we assign it the palette index that
- * will later be added at the end of the palette as the transparent
- * index. */
- if ((oim->transparent >= 0) && (oim->transparent == *inptr)) {
- *outptr++ = nim->colorsTotal;
- inptr++;
- continue;
- }
- inptr++;
- c0 = r >> C0_SHIFT;
- c1 = g >> C1_SHIFT;
- c2 = b >> C2_SHIFT;
- cachep = &histogram[c0][c1][c2];
- /* If we have not seen this color before, find nearest colormap entry */
- /* and update the cache */
- if (*cachep == 0)
- fill_inverse_cmap (oim, nim, cquantize, c0, c1, c2);
- /* Now emit the colormap index for this cell */
- *outptr++ = (*cachep - 1);
- }
- }
-}
-
-
-METHODDEF (void)
-pass2_fs_dither (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-{
- hist3d histogram = cquantize->histogram;
- register LOCFSERROR cur0, cur1, cur2; /* current error or pixel value */
- LOCFSERROR belowerr0, belowerr1, belowerr2; /* error for pixel below cur */
- LOCFSERROR bpreverr0, bpreverr1, bpreverr2; /* error for below/prev col */
- register FSERRPTR errorptr; /* => fserrors[] at column before current */
- histptr cachep;
- int dir; /* +1 or -1 depending on direction */
- int dir3; /* 3*dir, for advancing inptr & errorptr */
- int row;
- JDIMENSION col;
- int *inptr; /* => current input pixel */
- unsigned char *outptr; /* => current output pixel */
- int width = oim->sx;
- int num_rows = oim->sy;
- int *colormap0 = nim->red;
- int *colormap1 = nim->green;
- int *colormap2 = nim->blue;
- int *error_limit = cquantize->error_limiter;
-
-
- SHIFT_TEMPS for (row = 0; row < num_rows; row++) {
- inptr = input_buf[row];
- outptr = output_buf[row];
- if (cquantize->on_odd_row) {
- /* work right to left in this row */
- inptr += (width - 1) * 3; /* so point to rightmost pixel */
- outptr += width - 1;
- dir = -1;
- dir3 = -3;
- errorptr = cquantize->fserrors + (width + 1) * 3; /* => entry after last column */
- } else {
- /* work left to right in this row */
- dir = 1;
- dir3 = 3;
- errorptr = cquantize->fserrors; /* => entry before first real column */
- }
- /* Preset error values: no error propagated to first pixel from left */
- cur0 = cur1 = cur2 = 0;
- /* and no error propagated to row below yet */
- belowerr0 = belowerr1 = belowerr2 = 0;
- bpreverr0 = bpreverr1 = bpreverr2 = 0;
-
- for (col = width; col > 0; col--) {
-
- /* If this pixel is transparent, we want to assign it to the special
- * transparency color index past the end of the palette rather than
- * go through matching / dithering. */
- if ((oim->transparent >= 0) && (*inptr == oim->transparent)) {
- *outptr = nim->colorsTotal;
- errorptr[0] = 0;
- errorptr[1] = 0;
- errorptr[2] = 0;
- errorptr[3] = 0;
- inptr += dir;
- outptr += dir;
- errorptr += dir3;
- continue;
- }
- /* curN holds the error propagated from the previous pixel on the
- * current line. Add the error propagated from the previous line
- * to form the complete error correction term for this pixel, and
- * round the error term (which is expressed * 16) to an integer.
- * RIGHT_SHIFT rounds towards minus infinity, so adding 8 is correct
- * for either sign of the error value.
- * Note: errorptr points to *previous* column's array entry.
- */
- cur0 = RIGHT_SHIFT (cur0 + errorptr[dir3 + 0] + 8, 4);
- cur1 = RIGHT_SHIFT (cur1 + errorptr[dir3 + 1] + 8, 4);
- cur2 = RIGHT_SHIFT (cur2 + errorptr[dir3 + 2] + 8, 4);
- /* Limit the error using transfer function set by init_error_limit.
- * See comments with init_error_limit for rationale.
- */
- cur0 = error_limit[cur0];
- cur1 = error_limit[cur1];
- cur2 = error_limit[cur2];
- /* Form pixel value + error, and range-limit to 0..MAXJSAMPLE.
- * The maximum error is +- MAXJSAMPLE (or less with error limiting);
- * this sets the required size of the range_limit array.
- */
- cur0 += gdTrueColorGetRed (*inptr);
- cur1 += gdTrueColorGetGreen (*inptr);
- cur2 += gdTrueColorGetBlue (*inptr);
- range_limit (cur0);
- range_limit (cur1);
- range_limit (cur2);
-
- /* Index into the cache with adjusted pixel value */
- cachep =
- &histogram[cur0 >> C0_SHIFT][cur1 >> C1_SHIFT][cur2 >> C2_SHIFT];
- /* If we have not seen this color before, find nearest colormap */
- /* entry and update the cache */
- if (*cachep == 0)
- fill_inverse_cmap (oim, nim, cquantize, cur0 >> C0_SHIFT,
- cur1 >> C1_SHIFT, cur2 >> C2_SHIFT);
- /* Now emit the colormap index for this cell */
- {
- register int pixcode = *cachep - 1;
- *outptr = (JSAMPLE) pixcode;
- /* Compute representation error for this pixel */
-#define GETJSAMPLE
- cur0 -= GETJSAMPLE (colormap0[pixcode]);
- cur1 -= GETJSAMPLE (colormap1[pixcode]);
- cur2 -= GETJSAMPLE (colormap2[pixcode]);
-#undef GETJSAMPLE
- }
- /* Compute error fractions to be propagated to adjacent pixels.
- * Add these into the running sums, and simultaneously shift the
- * next-line error sums left by 1 column.
- */
- {
- register LOCFSERROR bnexterr, delta;
-
- bnexterr = cur0; /* Process component 0 */
- delta = cur0 * 2;
- cur0 += delta; /* form error * 3 */
- errorptr[0] = (FSERROR) (bpreverr0 + cur0);
- cur0 += delta; /* form error * 5 */
- bpreverr0 = belowerr0 + cur0;
- belowerr0 = bnexterr;
- cur0 += delta; /* form error * 7 */
- bnexterr = cur1; /* Process component 1 */
- delta = cur1 * 2;
- cur1 += delta; /* form error * 3 */
- errorptr[1] = (FSERROR) (bpreverr1 + cur1);
- cur1 += delta; /* form error * 5 */
- bpreverr1 = belowerr1 + cur1;
- belowerr1 = bnexterr;
- cur1 += delta; /* form error * 7 */
- bnexterr = cur2; /* Process component 2 */
- delta = cur2 * 2;
- cur2 += delta; /* form error * 3 */
- errorptr[2] = (FSERROR) (bpreverr2 + cur2);
- cur2 += delta; /* form error * 5 */
- bpreverr2 = belowerr2 + cur2;
- belowerr2 = bnexterr;
- cur2 += delta; /* form error * 7 */
- }
- /* At this point curN contains the 7/16 error value to be propagated
- * to the next pixel on the current line, and all the errors for the
- * next line have been shifted over. We are therefore ready to move on.
- */
- inptr += dir; /* Advance pixel pointers to next column */
- outptr += dir;
- errorptr += dir3; /* advance errorptr to current column */
- }
- /* Post-loop cleanup: we must unload the final error values into the
- * final fserrors[] entry. Note we need not unload belowerrN because
- * it is for the dummy column before or after the actual array.
- */
- errorptr[0] = (FSERROR) bpreverr0; /* unload prev errs into array */
- errorptr[1] = (FSERROR) bpreverr1;
- errorptr[2] = (FSERROR) bpreverr2;
- }
-}
-
-
-/*
- * Initialize the error-limiting transfer function (lookup table).
- * The raw F-S error computation can potentially compute error values of up to
- * +- MAXJSAMPLE. But we want the maximum correction applied to a pixel to be
- * much less, otherwise obviously wrong pixels will be created. (Typical
- * effects include weird fringes at color-area boundaries, isolated bright
- * pixels in a dark area, etc.) The standard advice for avoiding this problem
- * is to ensure that the "corners" of the color cube are allocated as output
- * colors; then repeated errors in the same direction cannot cause cascading
- * error buildup. However, that only prevents the error from getting
- * completely out of hand; Aaron Giles reports that error limiting improves
- * the results even with corner colors allocated.
- * A simple clamping of the error values to about +- MAXJSAMPLE/8 works pretty
- * well, but the smoother transfer function used below is even better. Thanks
- * to Aaron Giles for this idea.
- */
-
-LOCAL (void)
-init_error_limit (gdImagePtr oim, gdImagePtr nim, my_cquantize_ptr cquantize)
-/* Allocate and fill in the error_limiter table */
-{
- int *table;
- int in, out;
- (void)oim;
- (void)nim;
-
- cquantize->error_limiter_storage =
- (int *) gdMalloc ((MAXJSAMPLE * 2 + 1) * sizeof (int));
- if (!cquantize->error_limiter_storage) {
- return;
- }
- table = cquantize->error_limiter_storage;
-
- table += MAXJSAMPLE; /* so can index -MAXJSAMPLE .. +MAXJSAMPLE */
- cquantize->error_limiter = table;
-
-#define STEPSIZE ((MAXJSAMPLE+1)/16)
- /* Map errors 1:1 up to +- MAXJSAMPLE/16 */
- out = 0;
- for (in = 0; in < STEPSIZE; in++, out++) {
- table[in] = out;
- table[-in] = -out;
- }
- /* Map errors 1:2 up to +- 3*MAXJSAMPLE/16 */
- for (; in < STEPSIZE * 3; in++, out += (in & 1) ? 0 : 1) {
- table[in] = out;
- table[-in] = -out;
- }
- /* Clamp the rest to final out value (which is (MAXJSAMPLE+1)/8) */
- for (; in <= MAXJSAMPLE; in++) {
- table[in] = out;
- table[-in] = -out;
- }
-#undef STEPSIZE
-}
-
-
-/*
- * Finish up at the end of each pass.
- */
-
-static void
-zeroHistogram (hist3d histogram)
-{
- int i;
- /* Zero the histogram or inverse color map */
- for (i = 0; i < HIST_C0_ELEMS; i++) {
- memset (histogram[i],
- 0, HIST_C1_ELEMS * HIST_C2_ELEMS * sizeof (histcell));
- }
-}
-
-
-/**
- * Function: gdImageTrueColorToPaletteSetMethod
- *
- * Selects the quantization method
- *
- * That quantization method is used for all subsequent
- * <gdImageTrueColorToPalette> and <gdImageCreatePaletteFromTrueColor> calls.
- *
- * Parameters:
- * im - The image.
- * method - The quantization method, see <gdPaletteQuantizationMethod>.
- * speed - The quantization speed between 1 (highest quality) and
- * 10 (fastest). 0 selects a method-specific default (recommended).
- *
- * Returns:
- * Zero if the given method is invalid or not available; non-zero otherwise.
- *
- * See also:
- * - <gdImageTrueColorToPaletteSetQuality>
- */
-BGD_DECLARE(int) gdImageTrueColorToPaletteSetMethod (gdImagePtr im, int method, int speed)
-{
-#ifndef HAVE_LIBIMAGEQUANT
- if (method == GD_QUANT_LIQ) {
- return FALSE;
- }
-#endif
-
- if (method >= GD_QUANT_DEFAULT && method <= GD_QUANT_LIQ) {
- im->paletteQuantizationMethod = method;
-
- if (speed < 0 || speed > 10) {
- speed = 0;
- }
- im->paletteQuantizationSpeed = speed;
- }
- return TRUE;
-}
-
-/**
- * Function: gdImageTrueColorToPaletteSetQuality
- *
- * Chooses a quality range for quantization
- *
- * That quality range is used in all subsequent calls to
- * <gdImageTrueColorToPalette> and <gdImageCreatePaletteFromTrueColor>
- * if the quantization method is <GD_QUANT_LIQ>.
- *
- * Parameters:
- * im - The image.
- * min_quality - The minimum quality in range 1-100 (1 = ugly, 100 = perfect).
- * If the palette cannot represent the image with at least
- * min_quality, then no conversion is done.
- * max_quality - The maximum quality in range 1-100 (1 = ugly, 100 = perfect),
- * which must be higher than the min_quality. If the palette can
- * represent the image with a quality better than max_quality,
- * then fewer colors than requested will be used.
- */
-BGD_DECLARE(void) gdImageTrueColorToPaletteSetQuality (gdImagePtr im, int min_quality, int max_quality)
-{
- if (min_quality >= 0 && min_quality <= 100 &&
- max_quality >= 0 && max_quality <= 100 && min_quality <= max_quality) {
- im->paletteQuantizationMinQuality = min_quality;
- im->paletteQuantizationMaxQuality = max_quality;
- }
-}
-
-static int gdImageTrueColorToPaletteBody (gdImagePtr oim, int dither, int colorsWanted, gdImagePtr *cimP);
-
-/**
- * Function: gdImageCreatePaletteFromTrueColor
- *
- * Creates a new palette image from a truecolor image
- *
- * Parameters:
- * im - The image.
- * dither - Whether dithering should be applied.
- * colorsWanted - The number of desired palette entries.
- *
- * Returns:
- * A newly create palette image; NULL on failure.
- *
- * See also:
- * - <gdImageCreatePaletteFromTrueColor>
- * - <gdImageTrueColorToPaletteSetMethod>
- * - <gdImageNeuQuant>
- */
-BGD_DECLARE(gdImagePtr) gdImageCreatePaletteFromTrueColor (gdImagePtr im, int dither, int colorsWanted)
-{
- gdImagePtr nim;
- if (TRUE == gdImageTrueColorToPaletteBody(im, dither, colorsWanted, &nim)) {
- return nim;
- }
- return NULL;
-}
-
-/**
- * Function: gdImageTrueColorToPalette
- *
- * Converts a truecolor image to a palette image
- *
- * Parameters:
- * im - The image.
- * dither - Whether dithering should be applied.
- * colorsWanted - The number of desired palette entries.
- *
- * Returns:
- * Non-zero if the conversion succeeded, zero otherwise.
- *
- * See also:
- * - <gdImageCreatePaletteFromTrueColor>
- * - <gdImageTrueColorToPaletteSetMethod>
- * - <gdImagePaletteToTrueColor>
- */
-BGD_DECLARE(int) gdImageTrueColorToPalette (gdImagePtr im, int dither, int colorsWanted)
-{
- return gdImageTrueColorToPaletteBody(im, dither, colorsWanted, 0);
-}
-
-#ifdef HAVE_LIBIMAGEQUANT
-/**
- LIQ library needs pixels in RGBA order with alpha 0-255 (opaque 255).
- This callback is run whenever source rows need to be converted from GD's format.
-*/
-static void convert_gdpixel_to_rgba(liq_color output_row[], int y, int width, void *userinfo)
-{
- gdImagePtr oim = userinfo;
- int x;
- for(x = 0; x < width; x++) {
- output_row[x].r = gdTrueColorGetRed(input_buf[y][x]) * 255/gdRedMax;
- output_row[x].g = gdTrueColorGetGreen(input_buf[y][x]) * 255/gdGreenMax;
- output_row[x].b = gdTrueColorGetBlue(input_buf[y][x]) * 255/gdBlueMax;
- int alpha = gdTrueColorGetAlpha(input_buf[y][x]);
- if (gdAlphaOpaque < gdAlphaTransparent) {
- alpha = gdAlphaTransparent - alpha;
- }
- output_row[x].a = alpha * 255/gdAlphaMax;
- }
-}
-#endif
-
-static void free_truecolor_image_data(gdImagePtr oim)
-{
- int i;
- oim->trueColor = 0;
- /* Junk the truecolor pixels */
- for (i = 0; i < oim->sy; i++) {
- gdFree (oim->tpixels[i]);
- }
- gdFree (oim->tpixels);
- oim->tpixels = 0;
-}
-
-#ifdef HAVE_LIBIMAGEQUANT
-/* liq requires 16 byte aligned heap memory */
-static void *malloc16(size_t size)
-{
- void *p;
- return posix_memalign(&p, 16, size) == 0 ? p : NULL;
-}
-#endif
-
-/*
- * Module initialization routine for 2-pass color quantization.
- */
-
-static int gdImageTrueColorToPaletteBody (gdImagePtr oim, int dither, int colorsWanted, gdImagePtr *cimP)
-{
- my_cquantize_ptr cquantize = NULL;
- int i, conversionSucceeded=0;
-
- /* Allocate the JPEG palette-storage */
- size_t arraysize;
- int maxColors = gdMaxColors;
- gdImagePtr nim;
-
- if (cimP) {
- nim = gdImageCreate(oim->sx, oim->sy);
- *cimP = nim;
- if (!nim) {
- return FALSE;
- }
- } else {
- nim = oim;
- }
-
- if (!oim->trueColor) {
- /* (Almost) nothing to do! */
- if (cimP) {
- gdImageCopy(nim, oim, 0, 0, 0, 0, oim->sx, oim->sy);
- *cimP = nim;
- }
- return TRUE;
- }
-
- /* If we have a transparent color (the alphaless mode of transparency), we
- * must reserve a palette entry for it at the end of the palette. */
- if (oim->transparent >= 0) {
- maxColors--;
- }
- if (colorsWanted > maxColors) {
- colorsWanted = maxColors;
- }
- if (!cimP) {
- nim->pixels = gdCalloc (sizeof (unsigned char *), oim->sy);
- if (!nim->pixels) {
- /* No can do */
- goto outOfMemory;
- }
- for (i = 0; (i < nim->sy); i++) {
- nim->pixels[i] = (unsigned char *) gdCalloc (sizeof (unsigned char), oim->sx);
- if (!nim->pixels[i]) {
- goto outOfMemory;
- }
- }
- }
-
-
- if (oim->paletteQuantizationMethod == GD_QUANT_NEUQUANT) {
- if (cimP) { /* NeuQuant alwasy creates a copy, so the new blank image can't be used */
- gdImageDestroy(nim);
- }
- nim = gdImageNeuQuant(oim, colorsWanted, oim->paletteQuantizationSpeed ? oim->paletteQuantizationSpeed : 2);
- if (cimP) {
- *cimP = nim;
- }
- if (!nim) {
- return FALSE;
- } else {
- free_truecolor_image_data(oim);
- gdImageCopy(oim, nim, 0, 0, 0, 0, oim->sx, oim->sy);
- gdImageDestroy(nim);
- }
- return TRUE;
- }
-
-
-#ifdef HAVE_LIBIMAGEQUANT
- if (oim->paletteQuantizationMethod == GD_QUANT_DEFAULT ||
- oim->paletteQuantizationMethod == GD_QUANT_LIQ) {
- liq_attr *attr = liq_attr_create_with_allocator(malloc16, free);
- liq_image *image;
- liq_result *remap;
- int remapped_ok = 0;
-
- liq_set_max_colors(attr, colorsWanted);
-
- /* by default make it fast to match speed of previous implementation */
- liq_set_speed(attr, oim->paletteQuantizationSpeed ? oim->paletteQuantizationSpeed : 9);
- if (oim->paletteQuantizationMaxQuality) {
- liq_set_quality(attr, oim->paletteQuantizationMinQuality, oim->paletteQuantizationMaxQuality);
- }
- image = liq_image_create_custom(attr, convert_gdpixel_to_rgba, oim, oim->sx, oim->sy, 0);
- remap = liq_quantize_image(attr, image);
- if (!remap) { /* minimum quality not met, leave image unmodified */
- liq_image_destroy(image);
- liq_attr_destroy(attr);
- goto outOfMemory;
- }
-
- liq_set_dithering_level(remap, dither ? 1 : 0);
- if (LIQ_OK == liq_write_remapped_image_rows(remap, image, output_buf)) {
- remapped_ok = 1;
- const liq_palette *pal = liq_get_palette(remap);
- nim->transparent = -1;
- unsigned int icolor;
- for(icolor=0; icolor < pal->count; icolor++) {
- nim->open[icolor] = 0;
- nim->red[icolor] = pal->entries[icolor].r * gdRedMax/255;
- nim->green[icolor] = pal->entries[icolor].g * gdGreenMax/255;
- nim->blue[icolor] = pal->entries[icolor].b * gdBlueMax/255;
- int alpha = pal->entries[icolor].a * gdAlphaMax/255;
- if (gdAlphaOpaque < gdAlphaTransparent) {
- alpha = gdAlphaTransparent - alpha;
- }
- nim->alpha[icolor] = alpha;
- if (nim->transparent == -1 && alpha == gdAlphaTransparent) {
- nim->transparent = icolor;
- }
- }
- nim->colorsTotal = pal->count;
- }
- liq_result_destroy(remap);
- liq_image_destroy(image);
- liq_attr_destroy(attr);
-
- if (remapped_ok) {
- if (!cimP) {
- free_truecolor_image_data(oim);
- }
- return TRUE;
- }
- }
-#endif
-
- cquantize = (my_cquantize_ptr) gdCalloc (sizeof (my_cquantizer), 1);
- if (!cquantize) {
- /* No can do */
- goto outOfMemory;
- }
- cquantize->fserrors = NULL; /* flag optional arrays not allocated */
- cquantize->error_limiter = NULL;
-
-
- /* Allocate the histogram/inverse colormap storage */
- cquantize->histogram = (hist3d) gdMalloc (HIST_C0_ELEMS * sizeof (hist2d));
- for (i = 0; i < HIST_C0_ELEMS; i++) {
- cquantize->histogram[i] =
- (hist2d) gdMalloc (HIST_C1_ELEMS * HIST_C2_ELEMS * sizeof (histcell));
- if (!cquantize->histogram[i]) {
- goto outOfMemory;
- }
- }
-
-
- cquantize->fserrors = (FSERRPTR) gdMalloc (3 * sizeof (FSERROR));
- init_error_limit (oim, nim, cquantize);
- arraysize = (size_t) ((nim->sx + 2) * (3 * sizeof (FSERROR)));
- /* Allocate Floyd-Steinberg workspace. */
- cquantize->fserrors = gdReallocEx(cquantize->fserrors, arraysize);
- if (!cquantize->fserrors) {
- goto outOfMemory;
- }
- memset(cquantize->fserrors, 0, arraysize);
- cquantize->on_odd_row = FALSE;
-
- /* Do the work! */
- zeroHistogram (cquantize->histogram);
- prescan_quantize (oim, nim, cquantize);
- /* TBB 2.0.5: pass colorsWanted, not 256! */
- select_colors (oim, nim, cquantize, colorsWanted);
- zeroHistogram (cquantize->histogram);
- if (dither) {
- pass2_fs_dither (oim, nim, cquantize);
- } else {
- pass2_no_dither (oim, nim, cquantize);
- }
-#if 0 /* 2.0.12; we no longer attempt full alpha in palettes */
- if (cquantize->transparentIsPresent) {
- int mt = -1;
- int mtIndex = -1;
- for (i = 0; (i < im->colorsTotal); i++) {
- if (im->alpha[i] > mt) {
- mtIndex = i;
- mt = im->alpha[i];
- }
- }
- for (i = 0; (i < im->colorsTotal); i++) {
- if (im->alpha[i] == mt) {
- im->alpha[i] = gdAlphaTransparent;
- }
- }
- }
- if (cquantize->opaqueIsPresent) {
- int mo = 128;
- int moIndex = -1;
- for (i = 0; (i < im->colorsTotal); i++) {
- if (im->alpha[i] < mo) {
- moIndex = i;
- mo = im->alpha[i];
- }
- }
- for (i = 0; (i < im->colorsTotal); i++) {
- if (im->alpha[i] == mo) {
- im->alpha[i] = gdAlphaOpaque;
- }
- }
- }
-#endif
-
- /* If we had a 'transparent' color, increment the color count so it's
- * officially in the palette and convert the transparent variable to point to
- * an index rather than a color (Its data already exists and transparent
- * pixels have already been mapped to it by this point, it is done late as to
- * avoid color matching / dithering with it). */
- if (oim->transparent >= 0) {
- nim->transparent = nim->colorsTotal;
- nim->colorsTotal++;
- }
-
- /* Success! Get rid of the truecolor image data. */
- conversionSucceeded = TRUE;
- if (!cimP) {
- free_truecolor_image_data(oim);
- }
-
- goto freeQuantizeData;
- /* Tediously free stuff. */
-outOfMemory:
- conversionSucceeded = FALSE;
- if (oim->trueColor) {
- if (!cimP) {
- /* On failure only */
- if (nim->pixels) {
- for (i = 0; i < nim->sy; i++) {
- if (nim->pixels[i]) {
- gdFree (nim->pixels[i]);
- }
- }
- gdFree (nim->pixels);
- }
- nim->pixels = NULL;
- } else {
- gdImageDestroy(nim);
- *cimP = 0;
- }
- }
-
-freeQuantizeData:
- if (cquantize) {
- if (cquantize->histogram) {
- for (i = 0; i < HIST_C0_ELEMS; i++) {
- if (cquantize->histogram[i]) {
- gdFree (cquantize->histogram[i]);
- }
- }
- gdFree (cquantize->histogram);
- }
- if (cquantize->fserrors) {
- gdFree (cquantize->fserrors);
- }
- if (cquantize->error_limiter_storage) {
- gdFree (cquantize->error_limiter_storage);
- }
- gdFree (cquantize);
- }
-
- return conversionSucceeded;
-}
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gd_transform.c b/Build/source/libs/gd/libgd-src/src/gd_transform.c
deleted file mode 100644
index fae1a5851ff..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_transform.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * File: Transformations
- */
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include "gd.h"
-
-/**
- * Function: gdImageFlipVertical
- *
- * Flip an image vertically
- *
- * The image is mirrored upside-down.
- *
- * Parameters:
- * im - The image.
- *
- * See also:
- * - <gdImageFlipHorizontal>
- * - <gdImageFlipBoth>
- */
-BGD_DECLARE(void) gdImageFlipVertical(gdImagePtr im)
-{
- register int x, y;
-
- if (im->trueColor) {
- for (y = 0; y < im->sy / 2; y++) {
- int *row_dst = im->tpixels[y];
- int *row_src = im->tpixels[im->sy - 1 - y];
- for (x = 0; x < im->sx; x++) {
- register int p;
- p = row_dst[x];
- row_dst[x] = im->tpixels[im->sy - 1 - y][x];
- row_src[x] = p;
- }
- }
- } else {
- unsigned char p;
- for (y = 0; y < im->sy / 2; y++) {
- for (x = 0; x < im->sx; x++) {
- p = im->pixels[y][x];
- im->pixels[y][x] = im->pixels[im->sy - 1 - y][x];
- im->pixels[im->sy - 1 - y][x] = p;
- }
- }
- }
- return;
-}
-
-/**
- * Function: gdImageFlipHorizontal
- *
- * Flip an image horizontally
- *
- * The image is mirrored left-right.
- *
- * Parameters:
- * im - The image.
- *
- * See also:
- * - <gdImageFlipVertical>
- * - <gdImageFlipBoth>
- */
-BGD_DECLARE(void) gdImageFlipHorizontal(gdImagePtr im)
-{
-
- int x, y;
-
- if (im->trueColor) {
- int *px1, *px2, tmp;
-
- for (y = 0; y < im->sy; y++) {
- px1 = im->tpixels[y];
- px2 = im->tpixels[y] + im->sx - 1;
- for (x = 0; x < (im->sx >> 1); x++) {
- tmp = *px1;
- *px1 = *px2;
- *px2 = tmp;
- px1++;
- px2--;
- }
- }
- } else {
- unsigned char *px1, *px2, tmp;
-
- for (y = 0; y < im->sy; y++) {
- px1 = im->pixels[y];
- px2 = im->pixels[y] + im->sx - 1;
- for (x = 0; x < (im->sx >> 1); x++) {
- tmp = *px1;
- *px1 = *px2;
- *px2 = tmp;
- px1++;
- px2--;
- }
- }
- }
-}
-
-/**
- * Function: gdImageFlipBoth
- *
- * Flip an image vertically and horizontally
- *
- * The image is mirrored upside-down and left-right.
- *
- * Parameters:
- * im - The image.
- *
- * See also:
- * - <gdImageFlipVertical>
- * - <gdImageFlipHorizontal>
- */
-BGD_DECLARE(void) gdImageFlipBoth(gdImagePtr im)
-{
- gdImageFlipVertical(im);
- gdImageFlipHorizontal(im);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_version.c b/Build/source/libs/gd/libgd-src/src/gd_version.c
deleted file mode 100644
index 46725b0dae9..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_version.c
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include "gd.h"
-
-
-/* These functions return the version information. We use functions
- * so that changes in the shared library will automatically be
- * reflected in executables using it without recompiling them. */
-
-/*
- Function: gdMajorVersion
-*/
-BGD_DECLARE(int) gdMajorVersion()
-{
- return GD_MAJOR_VERSION;
-}
-
-/*
- Function: gdMinorVersion
-*/
-BGD_DECLARE(int) gdMinorVersion()
-{
- return GD_MINOR_VERSION;
-}
-
-/*
- Function: gdReleaseVersion
-*/
-BGD_DECLARE(int) gdReleaseVersion()
-{
- return GD_RELEASE_VERSION;
-}
-
-/*
- Function: gdExtraVersion
-*/
-BGD_DECLARE(const char *) gdExtraVersion() {
- return GD_EXTRA_VERSION;
-}
-
-/*
- Function: gdVersionString
-*/
-BGD_DECLARE(const char *) gdVersionString() {
- return GD_VERSION_STRING;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_wbmp.c b/Build/source/libs/gd/libgd-src/src/gd_wbmp.c
deleted file mode 100644
index a49bdbecbb1..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_wbmp.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * WBMP: Wireless Bitmap Type 0: B/W, Uncompressed Bitmap
- * Specification of the WBMP format can be found in the file:
- * SPEC-WAESpec-19990524.pdf
- * You can download the WAP specification on: http://www.wapforum.com/
- *
- * gd_wbmp.c
- *
- * Copyright (C) Johan Van den Brande (johan@vandenbrande.com)
- *
- * Fixed: gdImageWBMPPtr, gdImageWBMP
- *
- * Recoded: gdImageWBMPCtx for use with my wbmp library
- * (wbmp library included, but you can find the latest distribution
- * at http://www.vandenbrande.com/wbmp)
- *
- * Implemented: gdImageCreateFromWBMPCtx, gdImageCreateFromWBMP
- *
- *--------------------------------------------------------------------------
- *
- * Parts of this code are from Maurice Smurlo.
- *
- ** Copyright (C) Maurice Szmurlo --- T-SIT --- January 2000
- ** (Maurice.Szmurlo@info.unicaen.fr)
- **
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
- *
- *--------------------------------------------------------------------------
- *
- * Parts of this code are inspired by 'pbmtowbmp.c' and 'wbmptopbm.c' by
- * Terje Sannum <terje@looplab.com>.
- *
- ** Permission to use, copy, modify, and distribute this software and its
- ** documentation for any purpose and without fee is hereby granted, provided
- ** that the above copyright notice appear in all copies and that both that
- ** copyright notice and this permission notice appear in supporting
- ** documentation. This software is provided "as is" without express or
- ** implied warranty.
- *
- *--------------------------------------------------------------------------
- *
- * Todo:
- *
- * gdCreateFromWBMP function for reading WBMP files
- *
- *--------------------------------------------------------------------------
- */
-
-/**
- * File: WBMP IO
- *
- * Read and write WBMP images.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gd.h"
-#include "gd_errors.h"
-#include "gdfonts.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-
-#include "wbmp.h"
-
-/* gd_putout
- * ---------
- * Wrapper around gdPutC for use with writewbmp
- */
-void gd_putout(int i, void *out)
-{
- gdPutC(i, (gdIOCtx *)out);
-}
-
-/* gd_getin
- * --------
- * Wrapper around gdGetC for use with readwbmp
- */
-int gd_getin(void *in)
-{
- return (gdGetC((gdIOCtx *)in));
-}
-
-static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out);
-
-/*
- Function: gdImageWBMPCtx
-
- Write the image as a wbmp file
-
- Parameters:
- image - gd image structure
- fg - the index of the foreground color. any other value will be
- considered as background and will not be written
- out - the stream where to write
-*/
-BGD_DECLARE(void) gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
-{
- _gdImageWBMPCtx(image, fg, out);
-}
-
-/* returns 0 on success, 1 on failure */
-static int _gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out)
-{
- int x, y, pos;
- Wbmp *wbmp;
-
- /* create the WBMP */
- if((wbmp = createwbmp(gdImageSX(image), gdImageSY(image), WBMP_WHITE)) == NULL) {
- gd_error("Could not create WBMP\n");
- return 1;
- }
-
- /* fill up the WBMP structure */
- pos = 0;
- for(y = 0; y < gdImageSY(image); y++) {
- for(x = 0; x < gdImageSX(image); x++) {
- if(gdImageGetPixel(image, x, y) == fg) {
- wbmp->bitmap[pos] = WBMP_BLACK;
- }
- pos++;
- }
- }
-
- /* write the WBMP to a gd file descriptor */
- if(writewbmp(wbmp, &gd_putout, out)) {
- freewbmp(wbmp);
- gd_error("Could not save WBMP\n");
- return 1;
- }
-
- /* des submitted this bugfix: gdFree the memory. */
- freewbmp(wbmp);
-
- return 0;
-}
-
-/*
- Function: gdImageCreateFromWBMPCtx
-
- Reads in a WBMP image via a <gdIOCtx> struct. See
- <gdImageCreateFromWBMP>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPCtx(gdIOCtx *infile)
-{
- Wbmp *wbmp;
- gdImagePtr im = NULL;
- int black, white;
- int col, row, pos;
-
- if(readwbmp(&gd_getin, infile, &wbmp)) {
- return (NULL);
- }
-
- if(!(im = gdImageCreate(wbmp->width, wbmp->height))) {
- freewbmp(wbmp);
- return NULL;
- }
-
- /* create the background color */
- white = gdImageColorAllocate(im, 255, 255, 255);
- /* create foreground color */
- black = gdImageColorAllocate(im, 0, 0, 0);
-
- /* fill in image (in a wbmp 1 = white/ 0 = black) */
- pos = 0;
- for(row = 0; row < wbmp->height; row++) {
- for(col = 0; col < wbmp->width; col++) {
- if(wbmp->bitmap[pos++] == WBMP_WHITE) {
- gdImageSetPixel(im, col, row, white);
- } else {
- gdImageSetPixel(im, col, row, black);
- }
- }
- }
-
- freewbmp(wbmp);
-
- return im;
-}
-
-
-/*
- Function: gdImageCreateFromWBMP
-
- <gdImageCreateFromWBMP> is called to load images from WBMP format
- files. Invoke <gdImageCreateFromWBMP> with an already opened
- pointer to a file containing the desired
- image. <gdImageCreateFromWBMP> returns a gdImagePtr to the new
- image, or NULL if unable to load the image (most often because the
- file is corrupt or does not contain a WBMP
- image). <gdImageCreateFromWBMP> does not close the file. You can
- inspect the sx and sy members of the image to determine its
- size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- Variants:
-
- <gdImageCreateFromWBMPPtr> creates an image from WBMP data (i.e. the
- contents of a WBMP file) already in memory.
-
- <gdImageCreateFromWBMPCtx> reads in an image using the functions in
- a <gdIOCtx> struct.
-
- Parameters:
-
- infile - The input FILE pointer
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
- (start code)
-
- gdImagePtr im;
- FILE *in;
- in = fopen("mywbmp.wbmp", "rb");
- im = gdImageCreateFromWBMP(in);
- fclose(in);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
-*/
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMP(FILE *inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- if (in == NULL) return NULL;
- im = gdImageCreateFromWBMPCtx(in);
- in->gd_free(in);
- return im;
-}
-
-
-/*
- Function: gdImageCreateFromWBMPPtr
-
- Parameters:
-
- size - size of WBMP data in bytes.
- data - WBMP data (i.e. contents of a WBMP file).
-
- See <gdImageCreateFromWBMP>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWBMPPtr(int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- if(!in) {
- return 0;
- }
- im = gdImageCreateFromWBMPCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageWBMP
-*/
-BGD_DECLARE(void) gdImageWBMP(gdImagePtr im, int fg, FILE *outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) return;
- gdImageWBMPCtx(im, fg, out);
- out->gd_free(out);
-}
-
-/*
- Function: gdImageWBMPPtr
-*/
-BGD_DECLARE(void *) gdImageWBMPPtr(gdImagePtr im, int *size, int fg)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) return NULL;
- if (!_gdImageWBMPCtx(im, fg, out)) {
- rv = gdDPExtractData(out, size);
- } else {
- rv = NULL;
- }
- out->gd_free(out);
- return rv;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gd_webp.c b/Build/source/libs/gd/libgd-src/src/gd_webp.c
deleted file mode 100644
index ab15109d548..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_webp.c
+++ /dev/null
@@ -1,417 +0,0 @@
-/**
- * File: WebP IO
- *
- * Read and write WebP images.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gd_errors.h"
-#include "gdhelpers.h"
-
-#ifdef HAVE_LIBWEBP
-#include "webp/decode.h"
-#include "webp/encode.h"
-
-#define GD_WEBP_ALLOC_STEP (4*1024)
-
-/*
- Function: gdImageCreateFromWebp
-
- <gdImageCreateFromWebp> is called to load truecolor images from
- WebP format files. Invoke <gdImageCreateFromWebp> with an
- already opened pointer to a file containing the desired
- image. <gdImageCreateFromWebp> returns a <gdImagePtr> to the new
- truecolor image, or NULL if unable to load the image (most often
- because the file is corrupt or does not contain a WebP
- image). <gdImageCreateFromWebp> does not close the file.
-
- You can inspect the sx and sy members of the image to determine
- its size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- *The returned image is always a truecolor image.*
-
- Variants:
-
- <gdImageCreateFromJpegPtr> creates an image from WebP data
- already in memory.
-
- <gdImageCreateFromJpegCtx> reads its data via the function
- pointers in a <gdIOCtx> structure.
-
- Parameters:
-
- infile - The input FILE pointer.
-
- Returns:
-
- A pointer to the new *truecolor* image. This will need to be
- destroyed with <gdImageDestroy> once it is no longer needed.
-
- On error, returns NULL.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebp (FILE * inFile)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewFileCtx(inFile);
- if (!in) {
- return 0;
- }
- im = gdImageCreateFromWebpCtx(in);
- in->gd_free(in);
-
- return im;
-}
-
-
-/*
- Function: gdImageCreateFromWebpPtr
-
- See <gdImageCreateFromWebp>.
-
- Parameters:
-
- size - size of WebP data in bytes.
- data - pointer to WebP data.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpPtr (int size, void *data)
-{
- gdImagePtr im;
- gdIOCtx *in = gdNewDynamicCtxEx(size, data, 0);
- if (!in)
- return 0;
- im = gdImageCreateFromWebpCtx(in);
- in->gd_free(in);
- return im;
-}
-
-/*
- Function: gdImageCreateFromWebpCtx
-
- See <gdImageCreateFromWebp>.
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpCtx (gdIOCtx * infile)
-{
- int width, height;
- uint8_t *filedata = NULL;
- uint8_t *argb = NULL;
- unsigned char *read, *temp;
- size_t size = 0, n;
- gdImagePtr im;
- int x, y;
- uint8_t *p;
-
- do {
- temp = gdRealloc(filedata, size+GD_WEBP_ALLOC_STEP);
- if (temp) {
- filedata = temp;
- read = temp + size;
- } else {
- if (filedata) {
- gdFree(filedata);
- }
- gd_error("WebP decode: realloc failed");
- return NULL;
- }
-
- n = gdGetBuf(read, GD_WEBP_ALLOC_STEP, infile);
- if (n>0 && n!=EOF) {
- size += n;
- }
- } while (n>0 && n!=EOF);
-
- if (WebPGetInfo(filedata,size, &width, &height) == 0) {
- gd_error("gd-webp cannot get webp info");
- gdFree(temp);
- return NULL;
- }
-
- im = gdImageCreateTrueColor(width, height);
- if (!im) {
- gdFree(temp);
- return NULL;
- }
- argb = WebPDecodeARGB(filedata, size, &width, &height);
- if (!argb) {
- gd_error("gd-webp cannot allocate temporary buffer");
- gdFree(temp);
- gdImageDestroy(im);
- return NULL;
- }
- for (y = 0, p = argb; y < height; y++) {
- for (x = 0; x < width; x++) {
- register uint8_t a = gdAlphaMax - (*(p++) >> 1);
- register uint8_t r = *(p++);
- register uint8_t g = *(p++);
- register uint8_t b = *(p++);
- im->tpixels[y][x] = gdTrueColorAlpha(r, g, b, a);
- }
- }
- /* do not use gdFree here, in case gdFree/alloc is mapped to something else than libc */
- free(argb);
- gdFree(temp);
- im->saveAlphaFlag = 1;
- return im;
-}
-
-
-/* returns 0 on success, 1 on failure */
-static int _gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
-{
- uint8_t *argb;
- int x, y;
- uint8_t *p;
- uint8_t *out;
- size_t out_size;
- int ret = 0;
-
- if (im == NULL) {
- return 1;
- }
-
- if (!gdImageTrueColor(im)) {
- gd_error("Palette image not supported by webp");
- return 1;
- }
-
- if (quality == -1) {
- quality = 80;
- }
-
- if (overflow2(gdImageSX(im), 4)) {
- return 1;
- }
-
- if (overflow2(gdImageSX(im) * 4, gdImageSY(im))) {
- return 1;
- }
-
- argb = (uint8_t *)gdMalloc(gdImageSX(im) * 4 * gdImageSY(im));
- if (!argb) {
- return 1;
- }
- p = argb;
- for (y = 0; y < gdImageSY(im); y++) {
- for (x = 0; x < gdImageSX(im); x++) {
- register int c;
- register char a;
- c = im->tpixels[y][x];
- a = gdTrueColorGetAlpha(c);
- if (a == 127) {
- a = 0;
- } else {
- a = 255 - ((a << 1) + (a >> 6));
- }
- *(p++) = gdTrueColorGetRed(c);
- *(p++) = gdTrueColorGetGreen(c);
- *(p++) = gdTrueColorGetBlue(c);
- *(p++) = a;
- }
- }
- out_size = WebPEncodeRGBA(argb, gdImageSX(im), gdImageSY(im), gdImageSX(im) * 4, quality, &out);
- if (out_size == 0) {
- gd_error("gd-webp encoding failed");
- ret = 1;
- goto freeargb;
- }
- gdPutBuf(out, out_size, outfile);
- free(out);
-
-freeargb:
- gdFree(argb);
-
- return ret;
-}
-
-
-/*
- Function: gdImageWebpCtx
-
- Write the image as WebP data via a <gdIOCtx>. See <gdImageWebpEx>
- for more details.
-
- Parameters:
-
- im - The image to write.
- outfile - The output sink.
- quality - Image quality.
-
- Returns:
-
- Nothing.
-*/
-BGD_DECLARE(void) gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
-{
- _gdImageWebpCtx(im, outfile, quality);
-}
-
-/*
- Function: gdImageWebpEx
-
- <gdImageWebpEx> outputs the specified image to the specified file in
- WebP format. The file must be open for writing. Under MSDOS and
- all versions of Windows, it is important to use "wb" as opposed to
- simply "w" as the mode when opening the file, and under Unix there
- is no penalty for doing so. <gdImageWebpEx> does not close the file;
- your code must do so.
-
- If _quality_ is -1, a reasonable quality value (which should yield a
- good general quality / size tradeoff for most situations) is used. Otherwise
- _quality_ should be a value in the range 0-100, higher quality values
- usually implying both higher quality and larger image sizes.
-
- Variants:
-
- <gdImageWebpCtx> stores the image using a <gdIOCtx> struct.
-
- <gdImageWebpPtrEx> stores the image to RAM.
-
- Parameters:
-
- im - The image to save.
- outFile - The FILE pointer to write to.
- quality - Compression quality (0-100).
-
- Returns:
-
- Nothing.
-*/
-BGD_DECLARE(void) gdImageWebpEx (gdImagePtr im, FILE * outFile, int quality)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) {
- return;
- }
- _gdImageWebpCtx(im, out, quality);
- out->gd_free(out);
-}
-
-/*
- Function: gdImageWebp
-
- Variant of <gdImageWebpEx> which uses the default quality (-1).
-
- Parameters:
-
- im - The image to save
- outFile - The FILE pointer to write to.
-
- Returns:
-
- Nothing.
-*/
-BGD_DECLARE(void) gdImageWebp (gdImagePtr im, FILE * outFile)
-{
- gdIOCtx *out = gdNewFileCtx(outFile);
- if (out == NULL) {
- return;
- }
- _gdImageWebpCtx(im, out, -1);
- out->gd_free(out);
-}
-
-/*
- Function: gdImageWebpPtr
-
- See <gdImageWebpEx>.
-*/
-BGD_DECLARE(void *) gdImageWebpPtr (gdImagePtr im, int *size)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) {
- return NULL;
- }
- if (_gdImageWebpCtx(im, out, -1)) {
- rv = NULL;
- } else {
- rv = gdDPExtractData(out, size);
- }
- out->gd_free(out);
-
- return rv;
-}
-
-/*
- Function: gdImageWebpPtrEx
-
- See <gdImageWebpEx>.
-*/
-BGD_DECLARE(void *) gdImageWebpPtrEx (gdImagePtr im, int *size, int quality)
-{
- void *rv;
- gdIOCtx *out = gdNewDynamicCtx(2048, NULL);
- if (out == NULL) {
- return NULL;
- }
- if (_gdImageWebpCtx(im, out, quality)) {
- rv = NULL;
- } else {
- rv = gdDPExtractData(out, size);
- }
- out->gd_free(out);
- return rv;
-}
-
-#else /* !HAVE_LIBWEBP */
-
-static void _noWebpError(void)
-{
- gd_error("WEBP image support has been disabled\n");
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebp (FILE * inFile)
-{
- _noWebpError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpPtr (int size, void *data)
-{
- _noWebpError();
- return NULL;
-}
-
-BGD_DECLARE(gdImagePtr) gdImageCreateFromWebpCtx (gdIOCtx * infile)
-{
- _noWebpError();
- return NULL;
-}
-
-BGD_DECLARE(void) gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quality)
-{
- _noWebpError();
-}
-
-BGD_DECLARE(void) gdImageWebpEx (gdImagePtr im, FILE * outFile, int quality)
-{
- _noWebpError();
-}
-
-BGD_DECLARE(void) gdImageWebp (gdImagePtr im, FILE * outFile)
-{
- _noWebpError();
-}
-
-BGD_DECLARE(void *) gdImageWebpPtr (gdImagePtr im, int *size)
-{
- _noWebpError();
- return NULL;
-}
-
-BGD_DECLARE(void *) gdImageWebpPtrEx (gdImagePtr im, int *size, int quality)
-{
- _noWebpError();
- return NULL;
-}
-
-#endif /* HAVE_LIBWEBP */
diff --git a/Build/source/libs/gd/libgd-src/src/gd_xbm.c b/Build/source/libs/gd/libgd-src/src/gd_xbm.c
deleted file mode 100644
index cf0545efdb4..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gd_xbm.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/**
- * File: XBM IO
- *
- * Read and write XBM images.
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <ctype.h>
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include "gd.h"
-#include "gd_errors.h"
-#include "gdhelpers.h"
-
-#ifdef _MSC_VER
-# define strcasecmp _stricmp
-#endif
-
-#define MAX_XBM_LINE_SIZE 255
-
-
-/*
- Function: gdImageCreateFromXbm
-
- <gdImageCreateFromXbm> is called to load images from X bitmap
- format files. Invoke <gdImageCreateFromXbm> with an already opened
- pointer to a file containing the desired
- image. <gdImageCreateFromXbm> returns a <gdImagePtr> to the new
- image, or NULL if unable to load the image (most often because the
- file is corrupt or does not contain an X bitmap format
- image). <gdImageCreateFromXbm> does not close the file.
-
- You can inspect the sx and sy members of the image to determine
- its size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- X11 X bitmaps (which define a char[]) as well as X10 X bitmaps (which define
- a short[]) are supported.
-
- Parameters:
-
- fd - The input FILE pointer
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
- (start code)
-
- gdImagePtr im;
- FILE *in;
- in = fopen("myxbm.xbm", "rb");
- im = gdImageCreateFromXbm(in);
- fclose(in);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromXbm(FILE * fd)
-{
- char fline[MAX_XBM_LINE_SIZE];
- char iname[MAX_XBM_LINE_SIZE];
- char *type;
- int value;
- unsigned int width = 0, height = 0;
- int fail = 0;
- int max_bit = 0;
-
- gdImagePtr im;
- int bytes = 0, i;
- int bit, x = 0, y = 0;
- int ch;
- char h[8];
- unsigned int b;
-
- rewind(fd);
- while (fgets(fline, MAX_XBM_LINE_SIZE, fd)) {
- fline[MAX_XBM_LINE_SIZE-1] = '\0';
- if (strlen(fline) == MAX_XBM_LINE_SIZE-1) {
- return 0;
- }
- if (sscanf(fline, "#define %s %d", iname, &value) == 2) {
- if (!(type = strrchr(iname, '_'))) {
- type = iname;
- } else {
- type++;
- }
-
- if (!strcmp("width", type)) {
- width = (unsigned int) value;
- }
- if (!strcmp("height", type)) {
- height = (unsigned int) value;
- }
- } else {
- if ( sscanf(fline, "static unsigned char %s = {", iname) == 1
- || sscanf(fline, "static char %s = {", iname) == 1)
- {
- max_bit = 128;
- } else if (sscanf(fline, "static unsigned short %s = {", iname) == 1
- || sscanf(fline, "static short %s = {", iname) == 1)
- {
- max_bit = 32768;
- }
- if (max_bit) {
- bytes = (width + 7) / 8 * height;
- if (!bytes) {
- return 0;
- }
- if (!(type = strrchr(iname, '_'))) {
- type = iname;
- } else {
- type++;
- }
- if (!strcmp("bits[]", type)) {
- break;
- }
- }
- }
- }
- if (!bytes || !max_bit) {
- return 0;
- }
-
- if(!(im = gdImageCreate(width, height))) {
- return 0;
- }
- gdImageColorAllocate(im, 255, 255, 255);
- gdImageColorAllocate(im, 0, 0, 0);
- h[2] = '\0';
- h[4] = '\0';
- for (i = 0; i < bytes; i++) {
- while (1) {
- if ((ch=getc(fd)) == EOF) {
- fail = 1;
- break;
- }
- if (ch == 'x') {
- break;
- }
- }
- if (fail) {
- break;
- }
- /* Get hex value */
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[0] = ch;
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[1] = ch;
- if (max_bit == 32768) {
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[2] = ch;
- if ((ch=getc(fd)) == EOF) {
- break;
- }
- h[3] = ch;
- }
- if (sscanf(h, "%x", &b) != 1) {
- gd_error("invalid XBM");
- gdImageDestroy(im);
- return 0;
- }
- for (bit = 1; bit <= max_bit; bit = bit << 1) {
- gdImageSetPixel(im, x++, y, (b & bit) ? 1 : 0);
- if (x == im->sx) {
- x = 0;
- y++;
- if (y == im->sy) {
- return im;
- }
- break;
- }
- }
- }
-
- gd_error("EOF before image was complete");
- gdImageDestroy(im);
- return 0;
-}
-
-
-/* {{{ gdCtxPrintf */
-static void gdCtxPrintf(gdIOCtx * out, const char *format, ...)
-{
- char buf[1024];
- int len;
- va_list args;
-
- va_start(args, format);
- len = vsnprintf(buf, sizeof(buf)-1, format, args);
- va_end(args);
- out->putBuf(out, buf, len);
-}
-/* }}} */
-
-/* The compiler will optimize strlen(constant) to a constant number. */
-#define gdCtxPuts(out, s) out->putBuf(out, s, strlen(s))
-
-
-/**
- * Function: gdImageXbmCtx
- *
- * Writes an image to an IO context in X11 bitmap format.
- *
- * Parameters:
- *
- * image - The <gdImagePtr> to write.
- * file_name - The prefix of the XBM's identifiers. Illegal characters are
- * automatically stripped.
- * gd - Which color to use as forground color. All pixels with another
- * color are unset.
- * out - The <gdIOCtx> to write the image file to.
- *
- */
-BGD_DECLARE(void) gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out)
-{
- int x, y, c, b, sx, sy, p;
- char *name, *f;
- size_t i, l;
-
- name = file_name;
- if ((f = strrchr(name, '/')) != NULL) name = f+1;
- if ((f = strrchr(name, '\\')) != NULL) name = f+1;
- name = strdup(name);
- if ((f = strrchr(name, '.')) != NULL && !strcasecmp(f, ".XBM")) *f = '\0';
- if ((l = strlen(name)) == 0) {
- free(name);
- name = strdup("image");
- } else {
- for (i=0; i<l; i++) {
- /* only in C-locale isalnum() would work */
- if (!isupper(name[i]) && !islower(name[i]) && !isdigit(name[i])) {
- name[i] = '_';
- }
- }
- }
-
- /* Since "name" comes from the user, run it through a direct puts.
- * Trying to printf it into a local buffer means we'd need a large
- * or dynamic buffer to hold it all. */
-
- /* #define <name>_width 1234 */
- gdCtxPuts(out, "#define ");
- gdCtxPuts(out, name);
- gdCtxPuts(out, "_width ");
- gdCtxPrintf(out, "%d\n", gdImageSX(image));
-
- /* #define <name>_height 1234 */
- gdCtxPuts(out, "#define ");
- gdCtxPuts(out, name);
- gdCtxPuts(out, "_height ");
- gdCtxPrintf(out, "%d\n", gdImageSY(image));
-
- /* static unsigned char <name>_bits[] = {\n */
- gdCtxPuts(out, "static unsigned char ");
- gdCtxPuts(out, name);
- gdCtxPuts(out, "_bits[] = {\n ");
-
- free(name);
-
- b = 1;
- p = 0;
- c = 0;
- sx = gdImageSX(image);
- sy = gdImageSY(image);
- for (y = 0; y < sy; y++) {
- for (x = 0; x < sx; x++) {
- if (gdImageGetPixel(image, x, y) == fg) {
- c |= b;
- }
- if ((b == 128) || (x == sx - 1)) {
- b = 1;
- if (p) {
- gdCtxPuts(out, ", ");
- if (!(p%12)) {
- gdCtxPuts(out, "\n ");
- p = 12;
- }
- }
- p++;
- gdCtxPrintf(out, "0x%02X", c);
- c = 0;
- } else {
- b <<= 1;
- }
- }
- }
- gdCtxPuts(out, "};\n");
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdcache.c b/Build/source/libs/gd/libgd-src/src/gdcache.c
deleted file mode 100644
index 3aad153dc04..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdcache.c
+++ /dev/null
@@ -1,231 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef HAVE_LIBTTF
-# define NEED_CACHE 1
-#else
-#ifdef HAVE_LIBFREETYPE
-# define NEED_CACHE 1
-#endif
-#endif
-
-#ifdef NEED_CACHE
-
-/*
- * gdcache.c
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@graphviz.org) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST -DNEED_CACHE gdcache.c -lgd
- * or
- * gcc -o gdcache -g -Wall -DTEST -DNEED_CACHE gdcache.c libgd.a
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
-#include "gdcache.h"
-
-/*********************************************************/
-/* implementation */
-/*********************************************************/
-
-/* create a new cache */
-gdCache_head_t *gdCacheCreate(int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease)
-{
- gdCache_head_t *head;
-
- head = (gdCache_head_t *)gdMalloc(sizeof(gdCache_head_t));
- if(!head) {
- return NULL;
- }
-
- head->mru = NULL;
- head->size = size;
- head->gdCacheTest = gdCacheTest;
- head->gdCacheFetch = gdCacheFetch;
- head->gdCacheRelease = gdCacheRelease;
-
- return head;
-}
-
-void gdCacheDelete(gdCache_head_t *head)
-{
- gdCache_element_t *elem, *prev;
-
- elem = head->mru;
- while(elem) {
- (*(head->gdCacheRelease))(elem->userdata);
- prev = elem;
- elem = elem->next;
- gdFree((char *)prev);
- }
-
- gdFree((char *)head);
-}
-
-void * gdCacheGet(gdCache_head_t *head, void *keydata)
-{
- int i = 0;
- gdCache_element_t *elem, *prev = NULL, *prevprev = NULL;
- void *userdata;
-
- elem = head->mru;
- while(elem) {
- if((*(head->gdCacheTest))(elem->userdata, keydata)) {
- if(i) {
- /* if not already most-recently-used */
- /* relink to top of list */
- prev->next = elem->next;
- elem->next = head->mru;
- head->mru = elem;
- }
-
- return elem->userdata;
- }
-
- prevprev = prev;
- prev = elem;
- elem = elem->next;
- i++;
- }
-
- userdata = (*(head->gdCacheFetch))(&(head->error), keydata);
- if(!userdata) {
- /* if there was an error in the fetch then don't cache */
- return NULL;
- }
-
- if(i < head->size) {
- /* cache still growing - add new elem */
- elem = (gdCache_element_t *)gdMalloc(sizeof(gdCache_element_t));
- if(!elem) {
- (*(head->gdCacheRelease)) (userdata);
- return NULL;
- }
- } else {
- /* cache full - replace least-recently-used */
- if(!prevprev) {
- /* cache size is 1 */
- head->mru = NULL;
- } else {
- /* prevprev becomes new end of list */
- prevprev->next = NULL;
- }
- elem = prev;
- (*(head->gdCacheRelease))(elem->userdata);
- }
-
- /* relink to top of list */
- elem->next = head->mru;
- head->mru = elem;
- elem->userdata = userdata;
-
- return userdata;
-}
-
-/*********************************************************/
-/* test stub */
-/*********************************************************/
-
-#ifdef TEST
-
-#include <stdio.h>
-
-typedef struct {
- int key;
- int value;
-}
-key_value_t;
-
-static int cacheTest(void *map, void *key)
-{
- return (((key_value_t *)map)->key == *(int *)key);
-}
-
-static void *cacheFetch(char **error, void *key)
-{
- key_value_t *map;
-
- map = (key_value_t *)gdMalloc(sizeof(key_value_t));
- if (!map) {
- *error = "gdMalloc failed";
- return NULL;
- }
- map->key = *(int *)key;
- map->value = 3;
-
- *error = NULL;
-
- return (void *)map;
-}
-
-static void cacheRelease(void *map)
-{
- gdFree((char *)map);
-}
-
-int main(int argc, char **argv)
-{
- gdCache_head_t *cacheTable;
- int elem, key;
-
- cacheTable = gdCacheCreate(3, cacheTest, cacheFetch, cacheRelease);
- if(!cacheTable) {
- exit(1);
- }
-
- key = 20;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 40;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 50;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
- key = 30;
- elem = *(int *)gdCacheGet(cacheTable, &key);
-
- gdCacheDelete(cacheTable);
-
- return 0;
-}
-
-#endif /* TEST */
-#endif /* NEED_CACHE */
diff --git a/Build/source/libs/gd/libgd-src/src/gdcache.h b/Build/source/libs/gd/libgd-src/src/gdcache.h
deleted file mode 100644
index 751a842154c..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdcache.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /*
- * gdcache.h
- *
- * Caches of pointers to user structs in which the least-recently-used
- * element is replaced in the event of a cache miss after the cache has
- * reached a given size.
- *
- * John Ellson (ellson@graphviz.org) Oct 31, 1997
- *
- * Test this with:
- * gcc -o gdcache -g -Wall -DTEST -DNEED_CACHE gdcache.c -lgd
- * or
- * gcc -o gdcache -g -Wall -DTEST -DNEED_CACHE gdcache.c libgd.a
- *
- * The cache is implemented by a singly-linked list of elements
- * each containing a pointer to a user struct that is being managed by
- * the cache.
- *
- * The head structure has a pointer to the most-recently-used
- * element, and elements are moved to this position in the list each
- * time they are used. The head also contains pointers to three
- * user defined functions:
- * - a function to test if a cached userdata matches some keydata
- * - a function to provide a new userdata struct to the cache
- * if there has been a cache miss.
- * - a function to release a userdata struct when it is
- * no longer being managed by the cache
- *
- * In the event of a cache miss the cache is allowed to grow up to
- * a specified maximum size. After the maximum size is reached then
- * the least-recently-used element is discarded to make room for the
- * new. The most-recently-returned value is always left at the
- * beginning of the list after retrieval.
- *
- * In the current implementation the cache is traversed by a linear
- * search from most-recent to least-recent. This linear search
- * probably limits the usefulness of this implementation to cache
- * sizes of a few tens of elements.
- */
-
- /*********************************************************/
- /* header */
- /*********************************************************/
-
-#include <stdlib.h>
-#ifndef NULL
-# define NULL (void *)0
-#endif
-
- /* user defined function templates */
- typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata);
- typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata);
- typedef void (*gdCacheReleaseFn_t)(void *userdata);
-
- /* element structure */
- typedef struct gdCache_element_s gdCache_element_t;
- struct gdCache_element_s {
- gdCache_element_t *next;
- void *userdata;
- };
-
- /* head structure */
- typedef struct gdCache_head_s gdCache_head_t;
- struct gdCache_head_s {
- gdCache_element_t *mru;
- int size;
- char *error;
- gdCacheTestFn_t gdCacheTest;
- gdCacheFetchFn_t gdCacheFetch;
- gdCacheReleaseFn_t gdCacheRelease;
- };
-
- /* function templates */
- gdCache_head_t *gdCacheCreate(int size,
- gdCacheTestFn_t gdCacheTest,
- gdCacheFetchFn_t gdCacheFetch,
- gdCacheReleaseFn_t gdCacheRelease
- );
-
- void gdCacheDelete(gdCache_head_t *head);
-
- void *gdCacheGet(gdCache_head_t *head, void *keydata);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdcmpgif.c b/Build/source/libs/gd/libgd-src/src/gdcmpgif.c
deleted file mode 100644
index d440f717276..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdcmpgif.c
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifndef _WIN32
-#include <unistd.h> /* For unlink function */
-#endif
-
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-void CompareImages(char *msg, gdImagePtr im1, gdImagePtr im2);
-
-
-int main(int argc, char **argv)
-{
- gdImagePtr im1, im2;
- FILE *in;
-
- if (argc != 3) {
- fprintf(stderr, "Usage: gdcmpgif filename.gif filename.gif\n");
- exit(1);
- }
- in = fopen(argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit(1);
- }
- im1 = gdImageCreateFromGif(in);
- fclose(in);
-
- if (!im1) {
- fprintf(stderr, "Input is not in GIF format!\n");
- exit(1);
- }
-
- in = fopen(argv[2], "rb");
- if (!in) {
- fprintf(stderr, "Input file 2 does not exist!\n");
- exit(1);
- }
- im2 = gdImageCreateFromGif(in);
- fclose(in);
-
- if (!im2) {
- fprintf(stderr, "Input 2 is not in GIF format!\n");
- exit(1);
- }
-
- CompareImages("gdcmpgif", im1, im2);
-
- gdImageDestroy(im1);
- gdImageDestroy(im2);
-
- return 0;
-}
-
-void CompareImages(char *msg, gdImagePtr im1, gdImagePtr im2)
-{
- int cmpRes;
-
- cmpRes = gdImageCompare(im1, im2);
-
- if (cmpRes & GD_CMP_IMAGE) {
- printf("%%%s: ERROR images differ: BAD\n",msg);
- } else if (cmpRes != 0) {
- printf("%%%s: WARNING images differ: WARNING - Probably OK\n",msg);
- } else {
- printf("%%%s: OK\n",msg);
- return;
- }
-
- if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y)) {
- printf("-%s: INFO image sizes differ\n",msg);
- }
-
- if (cmpRes & GD_CMP_NUM_COLORS) {
- printf("-%s: INFO number of palette entries differ %d Vs. %d\n",msg,
- im1->colorsTotal, im2->colorsTotal);
- }
-
- if (cmpRes & GD_CMP_COLOR) {
- printf("-%s: INFO actual colours of pixels differ\n",msg);
- }
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gddemo.c b/Build/source/libs/gd/libgd-src/src/gddemo.c
deleted file mode 100644
index 69d9d35ddd3..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gddemo.c
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <math.h>
-#include <stdlib.h>
-#include "gd.h"
-#include "gdfontt.h"
-#include "gdfonts.h"
-#include "gdfontmb.h"
-#include "gdfontl.h"
-#include "gdfontg.h"
-
-int
-main (void)
-{
- /* Input and output files */
- FILE *in;
- FILE *out;
-
- /* Input and output images */
- gdImagePtr im_in = 0, im_out = 0;
-
- /* Brush image */
- gdImagePtr brush;
-
- /* Color indexes */
- int white;
- int blue;
- int red;
- int green;
-
- /* Points for polygon */
- gdPoint points[3];
- int i;
-
- /* gd fonts for font test */
- gdFontPtr fonts[5];
- int y;
-
- /* Create output image, in true color. */
- im_out = gdImageCreateTrueColor (256 + 384, 384);
- /* 2.0.2: first color allocated would automatically be background in a
- palette based image. Since this is a truecolor image, with an
- automatic background of black, we must fill it explicitly. */
- white = gdImageColorAllocate (im_out, 255, 255, 255);
- gdImageFilledRectangle (im_out, 0, 0, gdImageSX (im_out),
- gdImageSY (im_out), white);
-
- /* Set transparent color. */
- gdImageColorTransparent (im_out, white);
-
- /* Try to load demoin.png and paste part of it into the
- output image. */
- in = fopen ("demoin.png", "rb");
- if (!in) {
- fprintf(stderr, "Can't load source image; this demo\n");
- fprintf(stderr, "is much more impressive if demoin.png\n");
- fprintf(stderr, "is available.\n");
- im_in = 0;
- } else {
- int a;
- im_in = gdImageCreateFromPng (in);
- fclose (in);
- /* Now copy, and magnify as we do so */
- gdImageCopyResampled (im_out, im_in, 32, 32, 0, 0, 192, 192, 255, 255);
- /* Now display variously rotated space shuttles in a circle of our own */
- for (a = 0; (a < 360); a += 45) {
- int cx = cos (a * .0174532925) * 128;
- int cy = -sin (a * .0174532925) * 128;
- gdImageCopyRotated (im_out, im_in,
- 256 + 192 + cx, 192 + cy,
- 0, 0, gdImageSX (im_in), gdImageSY (im_in), a);
- }
- }
- red = gdImageColorAllocate (im_out, 255, 0, 0);
- green = gdImageColorAllocate (im_out, 0, 255, 0);
- blue = gdImageColorAllocate (im_out, 0, 0, 255);
- /* Fat Rectangle */
- gdImageSetThickness (im_out, 4);
- gdImageLine (im_out, 16, 16, 240, 16, green);
- gdImageLine (im_out, 240, 16, 240, 240, green);
- gdImageLine (im_out, 240, 240, 16, 240, green);
- gdImageLine (im_out, 16, 240, 16, 16, green);
- gdImageSetThickness (im_out, 1);
- /* Circle */
- gdImageArc (im_out, 128, 128, 60, 20, 0, 720, blue);
- /* Arc */
- gdImageArc (im_out, 128, 128, 40, 40, 90, 270, blue);
- /* Flood fill: doesn't do much on a continuously
- variable tone jpeg original. */
- gdImageFill (im_out, 8, 8, blue);
- /* Polygon */
- points[0].x = 64;
- points[0].y = 0;
- points[1].x = 0;
- points[1].y = 128;
- points[2].x = 128;
- points[2].y = 128;
- gdImageFilledPolygon (im_out, points, 3, green);
- /* 2.0.12: Antialiased Polygon */
- gdImageSetAntiAliased (im_out, green);
- for (i = 0; (i < 3); i++) {
- points[i].x += 128;
- }
- gdImageFilledPolygon (im_out, points, 3, gdAntiAliased);
- /* Brush. A fairly wild example also involving a line style! */
- if (im_in) {
- int style[8];
- brush = gdImageCreateTrueColor (16, 16);
- gdImageCopyResized (brush, im_in,
- 0, 0, 0, 0,
- gdImageSX (brush), gdImageSY (brush),
- gdImageSX (im_in), gdImageSY (im_in));
- gdImageSetBrush (im_out, brush);
- /* With a style, so they won't overprint each other.
- Normally, they would, yielding a fat-brush effect. */
- style[0] = 0;
- style[1] = 0;
- style[2] = 0;
- style[3] = 0;
- style[4] = 0;
- style[5] = 0;
- style[6] = 0;
- style[7] = 1;
- gdImageSetStyle (im_out, style, 8);
- /* Draw the styled, brushed line */
- gdImageLine (im_out, 0, 255, 255, 0, gdStyledBrushed);
- }
- /* Text (non-truetype; see gdtestft for a freetype demo) */
- fonts[0] = gdFontGetTiny ();
- fonts[1] = gdFontGetSmall ();
- fonts[2] = gdFontGetMediumBold ();
- fonts[3] = gdFontGetLarge ();
- fonts[4] = gdFontGetGiant ();
- y = 0;
- for (i = 0; (i <= 4); i++) {
- gdImageString (im_out, fonts[i], 32, 32 + y, (unsigned char *) "hi",
- red);
- y += fonts[i]->h;
- }
- y = 0;
- for (i = 0; (i <= 4); i++) {
- gdImageStringUp (im_out, fonts[i], 64 + y, 64,
- (unsigned char *) "hi", red);
- y += fonts[i]->h;
- }
- /* Random antialiased lines; coordinates all over the image,
- but the output will respect a small clipping rectangle */
- gdImageSetClip (im_out, 0, gdImageSY (im_out) - 100,
- 100, gdImageSY (im_out));
- /* Fixed seed for reproducibility of results */
- srand (100);
- for (i = 0; (i < 100); i++) {
- int x1 = rand () % gdImageSX (im_out);
- int y1 = rand () % gdImageSY (im_out);
- int x2 = rand () % gdImageSX (im_out);
- int y2 = rand () % gdImageSY (im_out);
- gdImageSetAntiAliased (im_out, white);
- gdImageLine (im_out, x1, y1, x2, y2, gdAntiAliased);
- }
- /* Make output image interlaced (progressive, in the case of JPEG) */
- gdImageInterlace (im_out, 1);
- out = fopen ("demoout.png", "wb");
- /* Write PNG */
- gdImagePng (im_out, out);
- fclose (out);
- out = fopen ("demoout.gif", "wb");
- /* Write GIF (2.0.28) */
- gdImageGif (im_out, out);
- fclose (out);
- /* 2.0.12: also write a paletteized png comparable to the gif */
- out = fopen ("demooutp.png", "wb");
- gdImageTrueColorToPalette (im_out, 0, 256);
- gdImagePng (im_out, out);
- fclose (out);
- gdImageDestroy (im_out);
- if (im_in) {
- gdImageDestroy (im_in);
- }
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontg.c b/Build/source/libs/gd/libgd-src/src/gdfontg.c
deleted file mode 100644
index 2fe71662cf9..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontg.c
+++ /dev/null
@@ -1,4402 +0,0 @@
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2
- at Mon Jan 26 14:45:58 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-/**
- * File: Giant Font
- *
- * A very large ISO-8859-2 raster font (9x15 pixels).
- *
- * The font is supposed to be used with <gdImageChar> and <gdImageString>
- * and their variants.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gdfontg.h"
-
-char gdFontGiantData[] = {
- /* Char 0 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 1 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 2 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 1, 0,
-
- /* Char 3 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 4 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 5 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 6 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 7 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 8 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 9 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 10 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 11 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 12 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 13 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 14 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 15 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 16 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 17 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 18 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 19 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 20 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 21 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 22 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 23 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 24 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 25 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 26 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 27 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 28 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 29 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 30 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 31 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 32 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 33 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 34 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 35 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 36 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 37 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 38 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 39 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 40 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 41 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 42 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 43 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 44 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 45 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 46 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 47 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 48 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 49 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 50 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 51 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 52 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 53 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 54 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 55 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 56 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 57 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 58 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 59 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 60 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 61 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 62 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 63 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 64 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 65 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 66 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 67 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 68 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 69 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 70 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 71 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 72 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 73 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 74 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 75 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 76 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 77 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 78 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 79 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 80 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 81 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 82 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 83 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 84 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 85 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 86 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 87 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 88 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 89 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 90 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 91 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 92 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 93 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 94 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 95 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 96 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 97 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 98 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 99 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 100 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 101 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 102 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 103 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
- /* Char 104 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 105 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 106 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0, 0,
-
- /* Char 107 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 108 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 109 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 110 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 111 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 112 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 113 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 114 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 115 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 116 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 117 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 118 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 119 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 120 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 121 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
- /* Char 122 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 123 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 124 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 125 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 126 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 127 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 128 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 129 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 130 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 131 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 132 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 133 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 134 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 135 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 136 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 137 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 138 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 139 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 140 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 141 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 142 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 143 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 144 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 145 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 146 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 147 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 148 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 149 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 150 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 151 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 152 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 153 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 154 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 155 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 156 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 157 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 158 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 159 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 160 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 161 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 162 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 163 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 164 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 165 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 166 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 167 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 168 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 169 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 170 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
-
- /* Char 171 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 172 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 173 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 174 */
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 175 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 176 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 177 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1,
-
- /* Char 178 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
-
- /* Char 179 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 180 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 181 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 182 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 183 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 184 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
- /* Char 185 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 186 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
-
- /* Char 187 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 188 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 189 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 190 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 191 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 192 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 193 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 194 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 195 */
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 196 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 197 */
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 198 */
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 199 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
- /* Char 200 */
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 201 */
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 202 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
-
- /* Char 203 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 204 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 205 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 206 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 207 */
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 208 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 209 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 210 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 211 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 212 */
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 213 */
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 214 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 215 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 216 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 217 */
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 218 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 219 */
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 220 */
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 221 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 222 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
- /* Char 223 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 224 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 225 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 226 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 227 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 228 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 229 */
- 0, 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 230 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 231 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
- /* Char 232 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 233 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 234 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
-
- /* Char 235 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 236 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 237 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 238 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 239 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 240 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 241 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 242 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 243 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 244 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 245 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 246 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 247 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 248 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 249 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 250 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 251 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 252 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 253 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0, 0,
-
- /* Char 254 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0, 0,
-
- /* Char 255 */
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontGiantRep = {
- 256,
- 0,
- 9,
- 15,
- gdFontGiantData
-};
-
-BGD_EXPORT_DATA_PROT gdFontPtr gdFontGiant = &gdFontGiantRep;
-
-/**
- * Function: gdFontGetGiant
- *
- * Returns the built-in giant font.
- */
-BGD_DECLARE(gdFontPtr) gdFontGetGiant (void)
-{
- return gdFontGiant;
-}
-
-/* This file has not been truncated. */
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontg.h b/Build/source/libs/gd/libgd-src/src/gdfontg.h
deleted file mode 100644
index 5d85812cf42..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontg.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _GDFONTG_H_
-#define _GDFONTG_H_ 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2
- at Mon Jan 26 14:45:58 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-#include "gd.h"
-
-extern BGD_EXPORT_DATA_PROT gdFontPtr gdFontGiant;
-BGD_DECLARE(gdFontPtr) gdFontGetGiant(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontl.c b/Build/source/libs/gd/libgd-src/src/gdfontl.c
deleted file mode 100644
index f7ce2726375..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontl.c
+++ /dev/null
@@ -1,4660 +0,0 @@
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2
- at Tue Jan 6 19:39:27 1998.
-
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-/**
- * File: Large Font
- *
- * A large ISO-8859-2 raster font (8x16 pixels).
- *
- * The font is supposed to be used with <gdImageChar> and <gdImageString>
- * and their variants.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gdfontl.h"
-
-char gdFontLargeData[] = {
- /* Char 0 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 1 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 2 */
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 1,
-
- /* Char 3 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 4 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 5 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 6 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 7 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 8 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 9 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 10 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 11 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 12 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 13 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 14 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 15 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 16 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 17 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 18 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 19 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 20 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 21 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 22 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 23 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 24 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 25 */
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 26 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 27 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 28 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 29 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 30 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 31 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 32 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 33 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 34 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 35 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 36 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 37 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 38 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 39 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 40 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 41 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 42 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 43 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 44 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 45 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 46 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 47 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 48 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 49 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 50 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 51 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 52 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 53 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 54 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 55 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 56 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 57 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 58 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 59 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 60 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 61 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 62 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 63 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 64 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 65 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 66 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 67 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 68 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 69 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 70 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 71 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 72 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 73 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 74 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 75 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 76 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 77 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 78 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 79 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 80 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 81 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 0, 1, 0,
- 0, 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 82 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 83 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 84 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 85 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 86 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 87 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 88 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 89 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 90 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 91 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 92 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 93 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 94 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 95 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 96 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 97 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 98 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 99 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 100 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 101 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 102 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 103 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
-
- /* Char 104 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 105 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 106 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 107 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 108 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 109 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 110 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 111 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 112 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
-
- /* Char 113 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
-
- /* Char 114 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 115 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 116 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 117 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 118 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 119 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 120 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 121 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
- /* Char 122 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 123 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 124 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 125 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 126 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 127 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 128 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 129 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 130 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 131 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 132 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 133 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 134 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 135 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 136 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 137 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 138 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 139 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 140 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 141 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 142 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 143 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 144 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 145 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 146 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 147 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 148 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 149 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 150 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 151 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 152 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 153 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 154 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 155 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 156 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 157 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 158 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 159 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 160 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 161 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 162 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 163 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 164 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 165 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 166 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 167 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 168 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 169 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 170 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 171 */
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 172 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 173 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 174 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 175 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 176 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 177 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 178 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
-
- /* Char 179 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 180 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 181 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 182 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 183 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 184 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
- /* Char 185 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 186 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 187 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 188 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 189 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 190 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 191 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 192 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 193 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 194 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 195 */
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 196 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 197 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 198 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 199 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
- /* Char 200 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 201 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 202 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 203 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 204 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 205 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 206 */
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 207 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 208 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 209 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 210 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 211 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 212 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 213 */
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 214 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 215 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 216 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 217 */
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 218 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 219 */
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 220 */
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 221 */
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 222 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 223 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 224 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 225 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 226 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 227 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 228 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 229 */
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 230 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 231 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
- /* Char 232 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 233 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 234 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
-
- /* Char 235 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 236 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 237 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 238 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 239 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 240 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 241 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 242 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 243 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 244 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 245 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 246 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 247 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 248 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 249 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 250 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 251 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 1,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 252 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 253 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0, 0,
-
- /* Char 254 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0, 0, 0,
-
- /* Char 255 */
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontLargeRep = {
- 256,
- 0,
- 8,
- 16,
- gdFontLargeData
-};
-
-BGD_EXPORT_DATA_PROT gdFontPtr gdFontLarge = &gdFontLargeRep;
-
-/**
- * Function: gdFontGetLarge
- *
- * Returns the built-in large font.
- */
-BGD_DECLARE(gdFontPtr)
-gdFontGetLarge (void)
-{
- return gdFontLarge;
-}
-
-/* This file has not been truncated. */
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontl.h b/Build/source/libs/gd/libgd-src/src/gdfontl.h
deleted file mode 100644
index 2fc91ca6bff..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontl.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef _GDFONTL_H_
-#define _GDFONTL_H_ 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2
- at Tue Jan 6 19:39:27 1998.
-
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-#include "gd.h"
-
-extern BGD_EXPORT_DATA_PROT gdFontPtr gdFontLarge;
-BGD_DECLARE(gdFontPtr) gdFontGetLarge(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontmb.c b/Build/source/libs/gd/libgd-src/src/gdfontmb.c
deleted file mode 100644
index ed0f1ace780..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontmb.c
+++ /dev/null
@@ -1,3890 +0,0 @@
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2
- at Thu Jan 8 13:54:57 1998.
- No copyright info was found in the original bdf.
- */
-
-/**
- * File: Medium Bold Font
- *
- * A medium bold ISO-8859-2 raster font (7x13 pixels).
- *
- * The font is supposed to be used with <gdImageChar> and <gdImageString>
- * and their variants.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gdfontmb.h"
-
-char gdFontMediumBoldData[] = {
- /* Char 0 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 1 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 2 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 3 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 4 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 5 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 6 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 7 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 8 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 9 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 10 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 11 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 12 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 13 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 14 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 15 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 16 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 17 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 18 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 19 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 20 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 21 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 22 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 23 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 24 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 25 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 26 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 27 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 28 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 29 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 30 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 31 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 32 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 33 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 34 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 35 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 36 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 37 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 38 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 39 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 40 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 41 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 42 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 43 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 44 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 45 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 46 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 47 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 48 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 49 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 50 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 51 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 52 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 53 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 54 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 55 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 56 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 57 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 58 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 59 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 60 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 61 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 62 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 63 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 64 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 65 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 66 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 67 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 68 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 69 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 70 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 71 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 72 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 73 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 74 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 75 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 76 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 77 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 78 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 79 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 80 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 81 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 82 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 83 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 84 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 85 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 86 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 87 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 88 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 89 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 90 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 91 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 92 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 93 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 94 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 95 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 96 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 97 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 98 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 99 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 100 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 101 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 102 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 103 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
- /* Char 104 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 105 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 106 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
- /* Char 107 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 108 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 109 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 110 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 111 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 112 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
-
- /* Char 113 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 114 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 115 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 116 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 117 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 118 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 119 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 120 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 121 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
- /* Char 122 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 123 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 124 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 125 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 126 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 127 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 128 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 129 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 130 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 131 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 132 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 133 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 134 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 135 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 136 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 137 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 138 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 139 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 140 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 141 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 142 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 143 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 144 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 145 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 146 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 147 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 148 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 149 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 150 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 151 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 152 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 153 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 154 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 155 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 156 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 157 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 158 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 159 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 160 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 161 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 162 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 163 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 164 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 165 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 166 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 167 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 168 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 169 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 170 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 171 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 172 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 173 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 174 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 175 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 176 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 177 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 178 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
-
- /* Char 179 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 1, 0,
- 0, 0, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 180 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 181 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 182 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 183 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 184 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
-
- /* Char 185 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 186 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 187 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 188 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 189 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 190 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 191 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 192 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 193 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 194 */
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 195 */
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 196 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 197 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 198 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 199 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 200 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 201 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 202 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
-
- /* Char 203 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 204 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 205 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 206 */
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 207 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 208 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 209 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 210 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 211 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 212 */
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 213 */
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 214 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 215 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 216 */
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 217 */
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 218 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 219 */
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 220 */
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 221 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 222 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
-
- /* Char 223 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 1, 1, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 224 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 225 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 226 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 227 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 228 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 229 */
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 230 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 231 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 232 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 233 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 234 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0, 0,
-
- /* Char 235 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 236 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 237 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 238 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 239 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 1, 1, 0, 1,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 1, 1, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 240 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 241 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 242 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 243 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 244 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 245 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 246 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 247 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 248 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 249 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 250 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 251 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 1, 1,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 252 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
- /* Char 253 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 1, 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 1, 1, 0, 0,
-
- /* Char 254 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 1, 0,
- 0, 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0, 0,
-
- /* Char 255 */
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontMediumBoldRep = {
- 256,
- 0,
- 7,
- 13,
- gdFontMediumBoldData
-};
-
-BGD_EXPORT_DATA_PROT gdFontPtr gdFontMediumBold = &gdFontMediumBoldRep;
-
-/**
- * Function: gdFontGetMediumBold
- *
- * Returns the built-in medium bold font.
- */
-BGD_DECLARE(gdFontPtr)
-gdFontGetMediumBold (void)
-{
- return gdFontMediumBold;
-}
-
-/* This file has not been truncated. */
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontmb.h b/Build/source/libs/gd/libgd-src/src/gdfontmb.h
deleted file mode 100644
index e6807db4eb8..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontmb.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _GDFONTMB_H_
-#define _GDFONTMB_H_ 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2
- at Thu Jan 8 13:54:57 1998.
- No copyright info was found in the original bdf.
- */
-
-#include "gd.h"
-
-extern BGD_EXPORT_DATA_PROT gdFontPtr gdFontMediumBold;
-BGD_DECLARE(gdFontPtr) gdFontGetMediumBold(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdfonts.c b/Build/source/libs/gd/libgd-src/src/gdfonts.c
deleted file mode 100644
index e184e364ca9..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfonts.c
+++ /dev/null
@@ -1,3890 +0,0 @@
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2
- at Thu Jan 8 14:13:20 1998.
- No copyright info was found in the original bdf.
- */
-
-/**
- * File: Small Font
- *
- * A small ISO-8859-2 raster font (7x13 pixels).
- *
- * The font is supposed to be used with <gdImageChar> and <gdImageString>
- * and their variants.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gdfonts.h"
-
-char gdFontSmallData[] = {
- /* Char 0 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 1 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 2 */
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1, 0,
-
- /* Char 3 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 4 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 5 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 6 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 7 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 8 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 9 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 10 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 11 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 12 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 13 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 14 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 15 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 16 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 17 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 18 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 19 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 20 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 21 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 22 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 23 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 24 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 25 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 26 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 27 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 28 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 29 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 30 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 31 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 32 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 33 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 34 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 35 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 36 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 37 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 38 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 39 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 40 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 41 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 42 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 43 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 44 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 45 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 46 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 47 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 48 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 49 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 50 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 51 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 52 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 53 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 54 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 55 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 56 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 57 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 58 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 59 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 60 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 61 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 62 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 63 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 64 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 65 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 66 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 67 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 68 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 69 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 70 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 71 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 72 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 73 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 74 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 75 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 76 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 77 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 1, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 78 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 79 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 80 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 81 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 82 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 83 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 84 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 85 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 86 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 87 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 88 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 89 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 90 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 91 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 92 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 93 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 94 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 95 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 96 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 97 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 98 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 99 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 100 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 101 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 102 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 103 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
-
- /* Char 104 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 105 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 106 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
- /* Char 107 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 108 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 109 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 110 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 111 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 112 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
-
- /* Char 113 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
-
- /* Char 114 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 115 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 116 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 117 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 118 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 119 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 120 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 121 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
-
- /* Char 122 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 123 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 124 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 125 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 126 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 127 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 128 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 129 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 130 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 131 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 132 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 133 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 134 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 135 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 136 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 137 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 138 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 139 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 140 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 141 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 142 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 143 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 144 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 145 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 146 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 147 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 148 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 149 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 150 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 151 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 152 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 153 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 154 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 155 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 156 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 157 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 158 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 159 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 160 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 161 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1,
-
- /* Char 162 */
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 163 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 164 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 165 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 166 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 167 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 168 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 169 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 170 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
-
- /* Char 171 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 172 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 173 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 174 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 175 */
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 176 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 177 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 1, 1,
-
- /* Char 178 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
- /* Char 179 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 180 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 181 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1,
- 0, 1, 1, 0, 0, 1,
- 0, 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 182 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 183 */
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 184 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
- /* Char 185 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 186 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
-
- /* Char 187 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 188 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 189 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 190 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 191 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 192 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 193 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 194 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 195 */
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 196 */
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 197 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 198 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 199 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
- /* Char 200 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 201 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 202 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
- /* Char 203 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 204 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 205 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 206 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 207 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 208 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 209 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 210 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 211 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 212 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 213 */
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 214 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 215 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 216 */
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 217 */
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 218 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 219 */
- 0, 0, 1, 0, 0, 1,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 220 */
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 221 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 222 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 223 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 224 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 225 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 226 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 227 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 228 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 229 */
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 230 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 231 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0, 0,
-
- /* Char 232 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 233 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 234 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
-
- /* Char 235 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 236 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 237 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 238 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 239 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 1,
- 0, 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 240 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 241 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 242 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 243 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 244 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 245 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 246 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 247 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 248 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 249 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 250 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 251 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 252 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
- /* Char 253 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 1, 0,
- 0, 1, 1, 0, 1, 0,
- 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0, 0,
-
- /* Char 254 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 1, 0,
- 0, 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0, 0,
-
- /* Char 255 */
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontSmallRep = {
- 256,
- 0,
- 6,
- 13,
- gdFontSmallData
-};
-
-BGD_EXPORT_DATA_PROT gdFontPtr gdFontSmall = &gdFontSmallRep;
-
-/**
- * Function: gdFontGetSmall
- *
- * Returns the built-in small font.
- */
-BGD_DECLARE(gdFontPtr)
-gdFontGetSmall (void)
-{
- return gdFontSmall;
-}
-
-/* This file has not been truncated. */
diff --git a/Build/source/libs/gd/libgd-src/src/gdfonts.h b/Build/source/libs/gd/libgd-src/src/gdfonts.h
deleted file mode 100644
index b5127e971a6..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfonts.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _GDFONTS_H_
-#define _GDFONTS_H_ 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2
- at Thu Jan 8 14:13:20 1998.
- No copyright info was found in the original bdf.
- */
-
-#include "gd.h"
-
-extern BGD_EXPORT_DATA_PROT gdFontPtr gdFontSmall;
-BGD_DECLARE(gdFontPtr) gdFontGetSmall(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontt.c b/Build/source/libs/gd/libgd-src/src/gdfontt.c
deleted file mode 100644
index 1fb96e14e25..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontt.c
+++ /dev/null
@@ -1,2611 +0,0 @@
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2
- at Thu Jan 8 13:49:54 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-/**
- * File: Tiny Font
- *
- * A very small ISO-8859-2 raster font (5x8 pixels).
- *
- * The font is supposed to be used with <gdImageChar> and <gdImageString>
- * and their variants.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gdfontt.h"
-
-char gdFontTinyData[] = {
- /* Char 0 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 1 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 2 */
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
-
- /* Char 3 */
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
- /* Char 4 */
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 0, 1, 1, 1,
- 1, 0, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 5 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 1,
-
- /* Char 6 */
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 7 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 8 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 9 */
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
-
- /* Char 10 */
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
- /* Char 11 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 12 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 13 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 14 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 15 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 16 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 17 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 18 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 19 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 20 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 21 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 22 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 23 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 24 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 25 */
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 26 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 27 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 28 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 29 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 30 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 1,
- 1, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 31 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 32 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 33 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 34 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 35 */
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 1, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 36 */
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 37 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 0, 0, 1,
- 1, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 1,
- 1, 0, 0, 1, 1,
- 0, 0, 0, 0, 0,
-
- /* Char 38 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 1,
- 0, 0, 0, 0, 0,
-
- /* Char 39 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 40 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 41 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 42 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 43 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 44 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 45 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 46 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 47 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 48 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 49 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 50 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 51 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 52 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 53 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 54 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 55 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 56 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 57 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 58 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 59 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
- /* Char 60 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 61 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 62 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 63 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 64 */
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
-
- /* Char 65 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 66 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 67 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 68 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 69 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 70 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 71 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 72 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 73 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 74 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 75 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 76 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 77 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 78 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 79 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 80 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 81 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
-
- /* Char 82 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 83 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 84 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 85 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 86 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 87 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 88 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 89 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 1, 0, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 90 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 91 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 92 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
-
- /* Char 93 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 94 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 95 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
-
- /* Char 96 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 97 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 98 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 99 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 100 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 101 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 102 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 103 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
- /* Char 104 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 105 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 106 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
-
- /* Char 107 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 108 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 109 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
-
- /* Char 110 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 111 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 112 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
-
- /* Char 113 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 0, 1, 0,
-
- /* Char 114 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 115 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 116 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 117 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 118 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 119 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 1, 0, 1, 0, 1,
- 1, 0, 1, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 120 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 121 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
- /* Char 122 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 123 */
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 124 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 125 */
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 126 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 127 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 128 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 129 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 130 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 131 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 132 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 133 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 134 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 135 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 136 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 137 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 138 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 139 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 140 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 141 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 142 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 143 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 144 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 145 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 146 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 147 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 148 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 149 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 150 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 151 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 152 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 153 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 154 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 155 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 156 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 157 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 158 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 159 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 160 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 161 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
- /* Char 162 */
- 1, 0, 0, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 163 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 1,
- 0, 0, 0, 0, 0,
-
- /* Char 164 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 0, 1,
- 0, 1, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 1,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 165 */
- 0, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 166 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 167 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
- /* Char 168 */
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 169 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 170 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
- /* Char 171 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 172 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 173 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 174 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 175 */
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 176 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 177 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 1, 1,
-
- /* Char 178 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 1, 1,
-
- /* Char 179 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 180 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 181 */
- 0, 0, 0, 1, 1,
- 1, 1, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 182 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 183 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 184 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
- /* Char 185 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 186 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 0, 1, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
- /* Char 187 */
- 0, 0, 0, 1, 1,
- 0, 1, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 188 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 189 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 190 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 191 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 192 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 193 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 194 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 195 */
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 196 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 197 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 198 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 199 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 1, 0, 0, 0,
-
- /* Char 200 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 201 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 202 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
- /* Char 203 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 204 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 205 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 206 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 207 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 208 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 1, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 209 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 210 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 1, 1, 1, 0,
- 1, 0, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 211 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 212 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 213 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 214 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 215 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 216 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 217 */
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 218 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 219 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 220 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 221 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 1, 0, 0, 0, 1,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 222 */
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 1,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 0, 0, 0,
-
- /* Char 223 */
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 0, 0, 0,
-
- /* Char 224 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 225 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 226 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 227 */
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 228 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 229 */
- 0, 0, 0, 0, 1,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 230 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 231 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 1, 1, 0, 0,
-
- /* Char 232 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 233 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 234 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 1,
-
- /* Char 235 */
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 236 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 1, 0,
- 1, 1, 0, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 237 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 238 */
- 0, 0, 1, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 239 */
- 0, 0, 0, 1, 1,
- 0, 0, 1, 0, 1,
- 0, 0, 1, 0, 1,
- 0, 1, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 240 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 1, 1,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 241 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 242 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 243 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 244 */
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 245 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 246 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 247 */
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 1, 1, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 248 */
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 1, 0, 0,
- 1, 1, 0, 1, 0,
- 1, 0, 0, 0, 0,
- 1, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 249 */
- 0, 1, 1, 0, 0,
- 0, 1, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 250 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 251 */
- 0, 1, 0, 0, 1,
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 252 */
- 1, 0, 0, 1, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 1, 1, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 0, 0, 0,
-
- /* Char 253 */
- 0, 0, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 1, 0, 0, 1, 0,
- 1, 0, 0, 1, 0,
- 0, 1, 1, 1, 0,
- 0, 0, 0, 1, 0,
- 0, 1, 1, 0, 0,
-
- /* Char 254 */
- 0, 0, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 0, 0,
- 1, 1, 1, 0, 0,
- 0, 1, 0, 0, 0,
- 0, 1, 0, 1, 0,
- 0, 0, 1, 0, 0,
- 0, 1, 1, 0, 0,
-
- /* Char 255 */
- 0, 0, 0, 0, 0,
- 0, 0, 1, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0,
-
-
-};
-
-gdFont gdFontTinyRep = {
- 256,
- 0,
- 5,
- 8,
- gdFontTinyData
-};
-
-BGD_EXPORT_DATA_PROT gdFontPtr gdFontTiny = &gdFontTinyRep;
-
-/**
- * Function: gdFontGetTiny
- *
- * Returns the built-in tiny font.
- */
-BGD_DECLARE(gdFontPtr)
-gdFontGetTiny (void)
-{
- return gdFontTiny;
-}
-
-/* This file has not been truncated. */
diff --git a/Build/source/libs/gd/libgd-src/src/gdfontt.h b/Build/source/libs/gd/libgd-src/src/gdfontt.h
deleted file mode 100644
index d61b01ff4a0..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfontt.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _GDFONTT_H_
-#define _GDFONTT_H_ 1
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*
- This is a header file for gd font, generated using
- bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz
- from bdf font
- -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2
- at Thu Jan 8 13:49:54 1998.
- The original bdf was holding following copyright:
- "Libor Skarvada, libor@informatics.muni.cz"
- */
-
-#include "gd.h"
-
-extern BGD_EXPORT_DATA_PROT gdFontPtr gdFontTiny;
-BGD_DECLARE(gdFontPtr) gdFontGetTiny(void);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdft.c b/Build/source/libs/gd/libgd-src/src/gdft.c
deleted file mode 100644
index f84cada6840..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdft.c
+++ /dev/null
@@ -1,1931 +0,0 @@
-/********************************************/
-/* gd interface to freetype library */
-/* */
-/* John Ellson ellson@graphviz.org */
-/********************************************/
-
-
-/**
- * File: FreeType font rendering
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_intern.h"
-
-/* 2.0.10: WIN32, not MSWIN32 */
-#if !defined(_WIN32) && !defined(_WIN32_WCE)
-#include <unistd.h>
-#elif defined(_WIN32_WCE)
-#include <wce_stdlib.h> /* getenv() */
-#include <wce_unistd.h> /* access() */
-#define getenv wceex_getenv
-#define access wceex_access
-#else /* _WIN32_WCE */
-#include <io.h>
-#ifndef R_OK
-#define R_OK 04 /* Needed in Windows */
-#endif
-#endif
-
-/* number of antialised colors for indexed bitmaps */
-#define GD_NUMCOLORS 8
-
-#ifdef HAVE_LIBFONTCONFIG
-static int fontConfigFlag = 0;
-
-/* translate a fontconfig fontpattern into a fontpath.
- return NULL if OK, else return error string */
-static char *font_pattern(char **fontpath, char *fontpattern);
-#endif
-
-#ifdef HAVE_LIBFREETYPE
-#include "entities.h"
-static char *font_path(char **fontpath, char *name_list);
-#endif
-
-/* 2.0.30: move these up here so we can build correctly without freetype
- but with fontconfig */
-
-/*
- * The character (space) used to separate alternate fonts in the
- * fontlist parameter to gdImageStringFT. 2.0.18: space was a
- * poor choice for this.
- */
-#define LISTSEPARATOR ";"
-
-/*
- * DEFAULT_FONTPATH and PATHSEPARATOR are host type dependent and
- * are normally set by configure in config.h. These are just
- * some last resort values that might match some Un*x system
- * if building this version of gd separate from graphviz.
- */
-
-#ifndef DEFAULT_FONTPATH
-# if defined(_WIN32)
-# define DEFAULT_FONTPATH "C:\\WINDOWS\\FONTS;C:\\WINNT\\FONTS"
-# elif defined(__APPLE__) || (defined(__MWERKS__) && defined(macintosh))
-# define DEFAULT_FONTPATH "/usr/share/fonts/truetype:/System/Library/Fonts:/Library/Fonts"
-# else
- /* default fontpath for unix systems - whatever happened to standards ! */
-# define DEFAULT_FONTPATH "/usr/X11R6/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/truetype:/usr/X11R6/lib/X11/fonts/TTF:/usr/share/fonts/TrueType:/usr/share/fonts/truetype:/usr/openwin/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/Type1:/usr/lib/X11/fonts/Type1:/usr/openwin/lib/X11/fonts/Type1"
-# endif
-#endif
-
-#ifndef PATHSEPARATOR
-# if defined(_WIN32)
-# define PATHSEPARATOR ";"
-# else
-# define PATHSEPARATOR ":"
-# endif
-#endif
-
-
-#ifndef TRUE
-#define FALSE 0
-#define TRUE !FALSE
-#endif
-
-/**
- * Function: gdImageStringTTF
- *
- * Alias of <gdImageStringFT>.
- */
-BGD_DECLARE(char *) gdImageStringTTF (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y, const char *string)
-{
- /* 2.0.6: valid return */
- return gdImageStringFT (im, brect, fg, fontlist, ptsize,
- angle, x, y, string);
-}
-
-#ifndef HAVE_LIBFREETYPE
-BGD_DECLARE(char *) gdImageStringFTEx (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y, const char *string,
- gdFTStringExtraPtr strex)
-{
- (void)im;
- (void)brect;
- (void)fg;
- (void)fontlist;
- (void)ptsize;
- (void)angle;
- (void)x;
- (void)y;
- (void)string;
- (void)strex;
-
- return "libgd was not built with FreeType font support\n";
-}
-
-BGD_DECLARE(char *) gdImageStringFT (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y, const char *string)
-{
- (void)im;
- (void)brect;
- (void)fg;
- (void)fontlist;
- (void)ptsize;
- (void)angle;
- (void)x;
- (void)y;
- (void)string;
-
- return "libgd was not built with FreeType font support\n";
-}
-#else
-
-#include "gdcache.h"
-/* 2.0.16 Christophe Thomas: starting with FreeType 2.1.6, this is
- mandatory, and it has been supported for a long while. */
-#ifdef HAVE_FT2BUILD_H
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-#include FT_SIZES_H
-#else
-#include <freetype/freetype.h>
-#include <freetype/ftglyph.h>
-#include <freetype/ftsizes.h>
-#endif
-
-/* number of fonts cached before least recently used is replaced */
-#define FONTCACHESIZE 6
-
-/* number of antialias color lookups cached */
-#define TWEENCOLORCACHESIZE 32
-
-/*
- * Line separation as a factor of font height.
- * No space between if LINESPACE = 1.00
- * Line separation will be rounded up to next pixel row.
- */
-#define LINESPACE 1.05
-
-typedef struct {
- char *fontlist; /* key */
- int flags; /* key */
- char *fontpath;
- FT_Library *library;
- FT_Face face;
-}
-font_t;
-
-typedef struct {
- const char *fontlist; /* key */
- int flags; /* key */
- FT_Library *library;
-}
-fontkey_t;
-
-typedef struct {
- int pixel; /* key */
- int bgcolor; /* key */
- int fgcolor; /* key *//* -ve means no antialias */
- gdImagePtr im; /* key */
- int tweencolor;
-}
-tweencolor_t;
-
-typedef struct {
- int pixel; /* key */
- int bgcolor; /* key */
- int fgcolor; /* key *//* -ve means no antialias */
- gdImagePtr im; /* key */
-}
-tweencolorkey_t;
-
-/********************************************************************
- * gdTcl_UtfToUniChar is borrowed from Tcl ...
- */
-/*
- * tclUtf.c --
- *
- * Routines for manipulating UTF-8 strings.
- *
- * Copyright (c) 1997-1998 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) tclUtf.c 1.25 98/01/28 18:02:43
- */
-
-/*
- *---------------------------------------------------------------------------
- *
- * gdTcl_UtfToUniChar --
- *
- * Extract the Tcl_UniChar represented by the UTF-8 string. Bad
- * UTF-8 sequences are converted to valid Tcl_UniChars and processing
- * continues. Equivalent to Plan 9 chartorune().
- *
- * The caller must ensure that the source buffer is long enough that
- * this routine does not run off the end and dereference non-existent
- * memory looking for trail bytes. If the source buffer is known to
- * be '\0' terminated, this cannot happen. Otherwise, the caller
- * should call Tcl_UtfCharComplete() before calling this routine to
- * ensure that enough bytes remain in the string.
- *
- * Results:
- * *chPtr is filled with the Tcl_UniChar, and the return value is the
- * number of bytes from the UTF-8 string that were consumed.
- *
- * Side effects:
- * None.
- *
- *---------------------------------------------------------------------------
- */
-
-#ifdef JISX0208
-#include "jisx0208.h"
-#endif
-
-static int comp_entities(const void *e1, const void *e2)
-{
- struct entities_s *en1 = (struct entities_s *) e1;
- struct entities_s *en2 = (struct entities_s *) e2;
- return strcmp(en1->name, en2->name);
-}
-
-extern int any2eucjp (char *, const char *, unsigned int);
-
-/* Persistent font cache until explicitly cleared */
-/* Fonts can be used across multiple images */
-
-/* 2.0.16: thread safety (the font cache is shared) */
-gdMutexDeclare (gdFontCacheMutex);
-static gdCache_head_t *fontCache;
-static FT_Library library;
-
-#define Tcl_UniChar int
-#define TCL_UTF_MAX 3
-static int
-gdTcl_UtfToUniChar (const char *str, Tcl_UniChar * chPtr)
-/* str is the UTF8 next character pointer */
-/* chPtr is the int for the result */
-{
- int byte;
- char entity_name_buf[ENTITY_NAME_LENGTH_MAX+1];
- char *p;
- struct entities_s key, *res;
-
- /* HTML4.0 entities in decimal form, e.g. &#197; */
- /* or in hexadecimal form, e.g. &#x6C34; */
- byte = *((unsigned char *) str);
- if (byte == '&') {
- int i, n = 0;
-
- byte = *((unsigned char *) (str + 1));
- if (byte == '#') {
- byte = *((unsigned char *) (str + 2));
- if (byte == 'x' || byte == 'X') {
- for (i = 3; i < 8; i++) {
- byte = *((unsigned char *) (str + i));
- if (byte >= 'A' && byte <= 'F')
- byte = byte - 'A' + 10;
- else if (byte >= 'a' && byte <= 'f')
- byte = byte - 'a' + 10;
- else if (byte >= '0' && byte <= '9')
- byte = byte - '0';
- else
- break;
- n = (n * 16) + byte;
- }
- } else {
- for (i = 2; i < 8; i++) {
- byte = *((unsigned char *) (str + i));
- if (byte >= '0' && byte <= '9')
- n = (n * 10) + (byte - '0');
- else
- break;
- }
- }
- if (byte == ';') {
- *chPtr = (Tcl_UniChar) n;
- return ++i;
- }
- } else {
- key.name = p = entity_name_buf;
- for (i = 1; i <= 1 + ENTITY_NAME_LENGTH_MAX; i++) {
- byte = *((unsigned char *) (str + i));
- if (byte == '\0')
- break;
- if (byte == ';') {
- *p++ = '\0';
- res = bsearch(&key, entities, NR_OF_ENTITIES,
- sizeof(entities[0]), *comp_entities);
- if (res) {
- *chPtr = (Tcl_UniChar) res->value;
- return ++i;
- }
- break;
- }
- *p++ = byte;
- }
- }
- }
-
- /*
- * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones.
- */
-
- byte = *((unsigned char *) str);
-#ifdef JISX0208
- if (0xA1 <= byte && byte <= 0xFE) {
- int ku, ten;
-
- ku = (byte & 0x7F) - 0x20;
- ten = (str[1] & 0x7F) - 0x20;
- if ((ku < 1 || ku > 92) || (ten < 1 || ten > 94)) {
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-
- *chPtr = (Tcl_UniChar) UnicodeTbl[ku - 1][ten - 1];
- return 2;
- } else
-#endif /* JISX0208 */
- if (byte < 0xC0) {
- /*
- * Handles properly formed UTF-8 characters between
- * 0x01 and 0x7F. Also treats \0 and naked trail
- * bytes 0x80 to 0xBF as valid characters representing
- * themselves.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xE0) {
- if ((str[1] & 0xC0) == 0x80) {
- /*
- * Two-byte-character lead-byte followed
- * by a trail-byte.
- */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x1F) << 6) | (str[1] & 0x3F));
- return 2;
- }
- /*
- * A two-byte-character lead-byte not followed by trail-byte
- * represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- } else if (byte < 0xF0) {
- if (((str[1] & 0xC0) == 0x80) && ((str[2] & 0xC0) == 0x80)) {
- /*
- * Three-byte-character lead byte followed by
- * two trail bytes.
- */
-
- *chPtr = (Tcl_UniChar) (((byte & 0x0F) << 12)
- | ((str[1] & 0x3F) << 6) | (str[2] & 0x3F));
- return 3;
- }
- /*
- * A three-byte-character lead-byte not followed by
- * two trail-bytes represents itself.
- */
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
- }
-#if TCL_UTF_MAX > 3
- else {
- int ch, total, trail;
-
- total = totalBytes[byte];
- trail = total - 1;
- if (trail > 0) {
- ch = byte & (0x3F >> trail);
- do {
- str++;
- if ((*str & 0xC0) != 0x80) {
- *chPtr = byte;
- return 1;
- }
- ch <<= 6;
- ch |= (*str & 0x3F);
- trail--;
- } while (trail > 0);
- *chPtr = ch;
- return total;
- }
- }
-#endif
-
- *chPtr = (Tcl_UniChar) byte;
- return 1;
-}
-
-#ifdef HAVE_LIBRAQM
-#include <raqm.h>
-#endif
-
-typedef struct {
- unsigned int index;
- FT_Pos x_advance;
- FT_Pos x_offset;
- FT_Pos y_offset;
- uint32_t cluster;
-} glyphInfo;
-
-static ssize_t
-textLayout(uint32_t *text, int len,
- FT_Face face, gdFTStringExtraPtr strex,
- glyphInfo **glyph_info)
-{
-#ifndef HAVE_LIBRAQM
- FT_UInt glyph_index = 0, previous = 0;
- FT_Vector delta;
- FT_Error err;
-#endif
- size_t count;
- glyphInfo *info;
-
- if (!len) {
- return 0;
- }
-
-#ifdef HAVE_LIBRAQM
- size_t i;
- raqm_glyph_t *glyphs;
- raqm_t *rq = raqm_create ();
-
- if (!rq || !raqm_set_text (rq, text, len) ||
- !raqm_set_freetype_face (rq, face) ||
- !raqm_set_par_direction (rq, RAQM_DIRECTION_DEFAULT) ||
- !raqm_layout (rq)) {
- raqm_destroy (rq);
- return -1;
- }
-
- glyphs = raqm_get_glyphs (rq, &count);
- if (!glyphs) {
- raqm_destroy (rq);
- return -1;
- }
-
- info = (glyphInfo*) gdMalloc (sizeof (glyphInfo) * count);
- if (!info) {
- raqm_destroy (rq);
- return -1;
- }
-
- for (i = 0; i < count; i++) {
- info[i].index = glyphs[i].index;
- info[i].x_offset = glyphs[i].x_offset;
- info[i].y_offset = glyphs[i].y_offset;
- info[i].x_advance = glyphs[i].x_advance;
- info[i].cluster = glyphs[i].cluster;
- }
-
- raqm_destroy (rq);
-#else
- info = (glyphInfo*) gdMalloc (sizeof (glyphInfo) * len);
- if (!info) {
- return -1;
- }
- for (count = 0; count < len; count++) {
- /* Convert character code to glyph index */
- glyph_index = FT_Get_Char_Index (face, text[count]);
-
- /* retrieve kerning distance */
- if (! (strex && (strex->flags & gdFTEX_DISABLE_KERNING))
- && ! FT_IS_FIXED_WIDTH(face)
- && FT_HAS_KERNING(face)
- && previous
- && glyph_index)
- FT_Get_Kerning (face, previous, glyph_index, ft_kerning_default, &delta);
- else
- delta.x = delta.y = 0;
-
- err = FT_Load_Glyph (face, glyph_index, FT_LOAD_DEFAULT);
- if (err) {
- gdFree (info);
- return -1;
- }
- info[count].index = glyph_index;
- info[count].x_offset = 0;
- info[count].y_offset = 0;
- if (delta.x != 0)
- info[count - 1].x_advance += delta.x;
- info[count].x_advance = face->glyph->metrics.horiAdvance;
- info[count].cluster = count;
-
- /* carriage returns or newlines */
- if (text[count] == '\r' || text[count] == '\n')
- previous = 0; /* clear kerning flag */
- else
- previous = glyph_index;
- }
-#endif
-
- *glyph_info = info;
- return count <= SSIZE_MAX ? count : -1;
-}
-
-/********************************************************************/
-/* font cache functions */
-
-static int
-fontTest (void *element, void *key)
-{
- font_t *a = (font_t *) element;
- fontkey_t *b = (fontkey_t *) key;
-
- return (strcmp (a->fontlist, b->fontlist) == 0 && a->flags == b->flags);
-}
-
-#ifdef HAVE_LIBFONTCONFIG
-static int useFontConfig(int flag)
-{
- if (fontConfigFlag) {
- return (!(flag & gdFTEX_FONTPATHNAME));
- }
- return flag & gdFTEX_FONTCONFIG;
-}
-#endif
-
-static void *
-fontFetch (char **error, void *key)
-{
- font_t *a;
- fontkey_t *b = (fontkey_t *) key;
- char *suffix;
- FT_Error err;
- const unsigned int b_font_list_len = strlen(b->fontlist);
-
- *error = NULL;
-
- a = (font_t *) gdMalloc (sizeof (font_t));
- if (!a) {
- return NULL;
- }
-
- a->fontlist = (char *) gdMalloc(b_font_list_len + 1);
- if (a->fontlist == NULL) {
- gdFree(a);
- return "could not alloc full list of fonts";
- }
- memcpy(a->fontlist, b->fontlist, b_font_list_len);
- a->fontlist[b_font_list_len] = 0;
-
- a->flags = b->flags;
- a->library = b->library;
- a->fontpath = NULL;
-
-#ifdef HAVE_LIBFONTCONFIG
- if (!useFontConfig(b->flags))
- *error = font_path(&(a->fontpath), a->fontlist);
- else
- *error = font_pattern(&(a->fontpath), a->fontlist);
-#else
- *error = font_path(&(a->fontpath), a->fontlist);
-#endif /* HAVE_LIBFONTCONFIG */
- if (*error || !a->fontpath || !a->fontpath[0]) {
- gdFree(a->fontlist);
- if (a->fontpath)
- free(a->fontpath);
- gdFree(a);
-
- if (!*error)
- *error = "font_path() returned an empty font pathname";
-
- return NULL;
- }
-
- err = FT_New_Face(*b->library, a->fontpath, 0, &a->face);
-
- /* Read kerning metrics for Postscript fonts. */
- if (!err
- && ((suffix = strstr(a->fontpath, ".pfa"))
- || (suffix = strstr(a->fontpath, ".pfb")))
- && ((strcpy(suffix, ".afm") && (access(a->fontpath, R_OK) == 0))
- || (strcpy(suffix, ".pfm") && (access(a->fontpath, R_OK) == 0)))) {
- err = FT_Attach_File(a->face, a->fontpath);
- }
-
- if (err) {
- gdFree (a->fontlist);
- free(a->fontpath);
- gdFree(a);
- *error = "Could not read font";
- return NULL;
- }
-
- return (void *) a;
-}
-
-static void
-fontRelease (void *element)
-{
- font_t *a = (font_t *) element;
-
- FT_Done_Face (a->face);
- gdFree (a->fontlist);
- gdFree (a->fontpath);
- gdFree ((char *) element);
-}
-
-/********************************************************************/
-/* tweencolor cache functions */
-
-static int
-tweenColorTest (void *element, void *key)
-{
- tweencolor_t *a = (tweencolor_t *) element;
- tweencolorkey_t *b = (tweencolorkey_t *) key;
-
- return (a->pixel == b->pixel
- && a->bgcolor == b->bgcolor
- && a->fgcolor == b->fgcolor && a->im == b->im);
-}
-
-/*
- * Computes a color in im's color table that is part way between
- * the background and foreground colors proportional to the gray
- * pixel value in the range 0-GD_NUMCOLORS. The fg and bg colors must already
- * be in the color table for palette images. For truecolor images the
- * returned value simply has an alpha component and gdImageAlphaBlend
- * does the work so that text can be alpha blended across a complex
- * background (TBB; and for real in 2.0.2).
- */
-static void *
-tweenColorFetch (char **error, void *key)
-{
- tweencolor_t *a;
- tweencolorkey_t *b = (tweencolorkey_t *) key;
- int pixel, npixel, bg, fg;
- gdImagePtr im;
-
- (void)error;
-
- a = (tweencolor_t *) gdMalloc (sizeof (tweencolor_t));
- if (!a) {
- return NULL;
- }
-
- pixel = a->pixel = b->pixel;
- bg = a->bgcolor = b->bgcolor;
- fg = a->fgcolor = b->fgcolor;
- im = a->im = b->im;
-
- /* if fg is specified by a negative color idx, then don't antialias */
- if (fg < 0) {
- if ((pixel + pixel) >= GD_NUMCOLORS)
- a->tweencolor = -fg;
- else
- a->tweencolor = bg;
- } else {
- npixel = GD_NUMCOLORS - pixel;
- if (im->trueColor) {
- /* 2.0.1: use gdImageSetPixel to do the alpha blending work,
- or to just store the alpha level. All we have to do here
- is incorporate our knowledge of the percentage of this
- pixel that is really "lit" by pushing the alpha value
- up toward transparency in edge regions. */
- a->tweencolor = gdTrueColorAlpha (gdTrueColorGetRed (fg),
- gdTrueColorGetGreen (fg),
- gdTrueColorGetBlue (fg),
- gdAlphaMax -
- (gdTrueColorGetAlpha (fg) *
- pixel / GD_NUMCOLORS));
- } else {
- a->tweencolor = gdImageColorResolve (im,
- (pixel * im->red[fg] +
- npixel * im->red[bg]) /
- GD_NUMCOLORS,
- (pixel * im->green[fg] +
- npixel * im->green[bg]) /
- GD_NUMCOLORS,
- (pixel * im->blue[fg] +
- npixel * im->blue[bg]) /
- GD_NUMCOLORS);
- }
- }
- return (void *) a;
-}
-
-static void
-tweenColorRelease (void *element)
-{
- gdFree ((char *) element);
-}
-
-/* draw_bitmap - transfers glyph bitmap to GD image */
-static char *
-gdft_draw_bitmap (gdCache_head_t * tc_cache, gdImage * im, int fg,
- FT_Bitmap bitmap, int pen_x, int pen_y)
-{
- unsigned char *pixel = NULL;
- int *tpixel = NULL;
- int opixel;
- int x, y, row, col, pc, pcr;
-
- tweencolor_t *tc_elem;
- tweencolorkey_t tc_key;
-
- /* copy to image, mapping colors */
- tc_key.fgcolor = fg;
- tc_key.im = im;
- /* Truecolor version; does not require the cache */
- if (im->trueColor) {
- for (row = 0; row < bitmap.rows; row++) {
- pc = row * bitmap.pitch;
- pcr = pc;
- y = pen_y + row;
- /* clip if out of bounds */
- /* 2.0.16: clipping rectangle, not image bounds */
- if ((y > im->cy2) || (y < im->cy1))
- continue;
- for (col = 0; col < bitmap.width; col++, pc++) {
- int level;
- if (bitmap.pixel_mode == ft_pixel_mode_grays) {
- /*
- * Scale to 128 levels of alpha for gd use.
- * alpha 0 is opacity, so be sure to invert at the end
- */
- level = (bitmap.buffer[pc] * gdAlphaMax /
- (bitmap.num_grays - 1));
- } else if (bitmap.pixel_mode == ft_pixel_mode_mono) {
- /* 2.0.5: mode_mono fix from Giuliano Pochini */
- level =
- ((bitmap.
- buffer[(col >> 3) +
- pcr]) & (1 << (~col & 0x07))) ?
- gdAlphaTransparent : gdAlphaOpaque;
- } else {
- return "Unsupported ft_pixel_mode";
- }
- if (level == 0) /* if background */
- continue;
-
- if ((fg >= 0) && (im->trueColor)) {
- /* Consider alpha in the foreground color itself to be an
- upper bound on how opaque things get, when truecolor is
- available. Without truecolor this results in far too many
- color indexes. */
- level =
- level * (gdAlphaMax -
- gdTrueColorGetAlpha (fg)) / gdAlphaMax;
- }
- level = gdAlphaMax - level; /* inverting to get alpha */
- x = pen_x + col;
- /* clip if out of bounds */
- /* 2.0.16: clip to clipping rectangle, Matt McNabb */
- if ((x > im->cx2) || (x < im->cx1))
- continue;
- /* get pixel location in gd buffer */
- tpixel = &im->tpixels[y][x];
- if (fg < 0) {
- if (level < (gdAlphaMax / 2)) {
- *tpixel = -fg;
- }
- } else {
- if (im->alphaBlendingFlag) {
- opixel = *tpixel;
- if (gdTrueColorGetAlpha(opixel) != gdAlphaTransparent) {
- *tpixel = gdAlphaBlend (opixel,
- (level << 24) + (fg & 0xFFFFFF));
- } else {
- *tpixel = (level << 24) + (fg & 0xFFFFFF);
- }
- } else {
- *tpixel = (level << 24) + (fg & 0xFFFFFF);
- }
- }
- }
- }
- return (char *) NULL;
- }
- /* Non-truecolor case, restored to its more or less original form */
- for (row = 0; row < bitmap.rows; row++) {
- int pcr;
- pc = row * bitmap.pitch;
- pcr = pc;
- if (bitmap.pixel_mode == ft_pixel_mode_mono)
- pc *= 8; /* pc is measured in bits for monochrome images */
-
- y = pen_y + row;
-
- /* clip if out of bounds */
- if (y > im->cy2 || y < im->cy1)
- continue;
-
- for (col = 0; col < bitmap.width; col++, pc++) {
- if (bitmap.pixel_mode == ft_pixel_mode_grays) {
- /*
- * Round to GD_NUMCOLORS levels of antialiasing for
- * index color images since only 256 colors are
- * available.
- */
- tc_key.pixel = ((bitmap.buffer[pc] * GD_NUMCOLORS)
- + bitmap.num_grays / 2)
- / (bitmap.num_grays - 1);
- } else if (bitmap.pixel_mode == ft_pixel_mode_mono) {
- /* 2.0.5: mode_mono fix from Giuliano Pochini */
- tc_key.pixel =
- ((bitmap.
- buffer[(col >> 3) +
- pcr]) & (1 << (~col & 0x07))) ? GD_NUMCOLORS : 0;
- } else {
- return "Unsupported ft_pixel_mode";
- }
- if (tc_key.pixel == 0) /* if background */
- continue;
-
- x = pen_x + col;
-
- /* clip if out of bounds */
- if (x > im->cx2 || x < im->cx1)
- continue;
- /* get pixel location in gd buffer */
- pixel = &im->pixels[y][x];
- if (tc_key.pixel == GD_NUMCOLORS) {
- /* use fg color directly. gd 2.0.2: watch out for
- negative indexes (thanks to David Marwood). */
- *pixel = (fg < 0) ? -fg : fg;
- } else {
- /* find antialised color */
-
- tc_key.bgcolor = *pixel;
- tc_elem = (tweencolor_t *) gdCacheGet (tc_cache, &tc_key);
- if (!tc_elem) return tc_cache->error;
- *pixel = tc_elem->tweencolor;
- }
- }
- }
- return (char *) NULL;
-}
-
-/**
- * Function: gdFreeFontCache
- *
- * Alias of <gdFontCacheShutdown>.
- */
-BGD_DECLARE(void) gdFreeFontCache ()
-{
- gdFontCacheShutdown ();
-}
-
-/**
- * Function: gdFontCacheShutdown
- *
- * Shut down the font cache and free the allocated resources.
- *
- * Important:
- * This function has to be called whenever FreeType operations have been
- * invoked, to avoid resource leaks. It doesn't harm to call this function
- * multiple times.
- */
-BGD_DECLARE(void) gdFontCacheShutdown ()
-{
- if (fontCache) {
- gdMutexLock(gdFontCacheMutex);
- gdCacheDelete (fontCache);
- /* 2.0.16: Gustavo Scotti: make sure we don't free this twice */
- fontCache = 0;
- gdMutexUnlock(gdFontCacheMutex);
- gdMutexShutdown (gdFontCacheMutex);
- FT_Done_FreeType (library);
- }
-}
-
-/**
- * Function: gdImageStringFT
- *
- * Render an UTF-8 string onto a gd image.
- *
- * Parameters:
- * im - The image to draw onto.
- * brect - The bounding rectangle as array of 8 integers where each pair
- * represents the x- and y-coordinate of a point. The points
- * specify the lower left, lower right, upper right and upper left
- * corner.
- * fg - The font color.
- * fontlist - The semicolon delimited list of font filenames to look for.
- * ptsize - The height of the font in typographical points (pt).
- * angle - The angle in radian to rotate the font counter-clockwise.
- * x - The x-coordinate of the basepoint (roughly the lower left corner) of the first letter.
- * y - The y-coordinate of the basepoint (roughly the lower left corner) of the first letter.
- * string - The string to render.
- *
- * Variant:
- * - <gdImageStringFTEx>
- *
- * See also:
- * - <gdImageString>
- */
-BGD_DECLARE(char *) gdImageStringFT (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y, const char *string)
-{
- return gdImageStringFTEx (im, brect, fg, fontlist,
- ptsize, angle, x, y, string, 0);
-}
-
-/**
- * Function: gdFontCacheSetup
- *
- * Set up the font cache.
- *
- * This is called automatically from the string rendering functions, if it
- * has not already been called. So there's no need to call this function
- * explicitly.
- */
-BGD_DECLARE(int) gdFontCacheSetup (void)
-{
- if (fontCache) {
- /* Already set up */
- return 0;
- }
- gdMutexSetup (gdFontCacheMutex);
- if (FT_Init_FreeType (&library)) {
- gdMutexShutdown (gdFontCacheMutex);
- return -1;
- }
- fontCache = gdCacheCreate (FONTCACHESIZE, fontTest, fontFetch, fontRelease);
- if (!fontCache) {
- return -2;
- }
- return 0;
-}
-
-/*
- Function: gdImageStringFTEx
-
- gdImageStringFTEx extends the capabilities of gdImageStringFT by
- providing a way to pass additional parameters.
-
- If the strex parameter is not null, it must point to a
- gdFTStringExtra structure. As of gd 2.0.5, this structure is defined
- as follows:
- (start code)
-
- typedef struct {
- // logical OR of gdFTEX_ values
- int flags;
-
- // fine tune line spacing for '\n'
- double linespacing;
-
- // Preferred character mapping
- int charmap;
-
- // Rendering resolution
- int hdpi;
- int vdpi;
- char *xshow;
- char *fontpath;
- } gdFTStringExtra, *gdFTStringExtraPtr;
-
- (end code)
-
- To output multiline text with a specific line spacing, include
- gdFTEX_LINESPACE in the setting of flags:
-
- > flags |= gdFTEX_LINESPACE;
-
- And also set linespacing to the desired spacing, expressed as a
- multiple of the font height. Thus a line spacing of 1.0 is the
- minimum to guarantee that lines of text do not collide.
-
- If gdFTEX_LINESPACE is not present, or strex is null, or
- gdImageStringFT is called, linespacing defaults to 1.05.
-
- To specify a preference for Unicode, Shift_JIS Big5 character
- encoding, set or To output multiline text with a specific line
- spacing, include gdFTEX_CHARMAP in the setting of flags:
-
- > flags |= gdFTEX_CHARMAP;
-
- And set charmap to the desired value, which can be any of
- gdFTEX_Unicode, gdFTEX_Shift_JIS, gdFTEX_Big5, or
- gdFTEX_Adobe_Custom. If you do not specify a preference, Unicode
- will be tried first. If the preferred character mapping is not found
- in the font, other character mappings are attempted.
-
- GD operates on the assumption that the output image will be rendered
- to a computer screen. By default, gd passes a resolution of 96 dpi
- to the freetype text rendering engine. This influences the "hinting"
- decisions made by the renderer. To specify a different resolution,
- set hdpi and vdpi accordingly (in dots per inch) and add
- gdFTEX_RESOLUTION to flags:
-
- > flags | gdFTEX_RESOLUTION;
-
- GD 2.0.29 and later will normally attempt to apply kerning tables,
- if fontconfig is available, to adjust the relative positions of
- consecutive characters more ideally for that pair of
- characters. This can be turn off by specifying the
- gdFTEX_DISABLE_KERNING flag:
-
- > flags | gdFTEX_DISABLE_KERNING;
-
- GD 2.0.29 and later can return a vector of individual character
- position advances, occasionally useful in applications that must
- know exactly where each character begins. This is returned in the
- xshow element of the gdFTStringExtra structure if the gdFTEX_XSHOW
- flag is set:
-
- > flags | gdFTEX_XSHOW;
-
- The caller is responsible for calling gdFree() on the xshow element
- after the call if gdFTEX_XSHOW is set.
-
- GD 2.0.29 and later can also return the path to the actual font file
- used if the gdFTEX_RETURNFONTPATHNAME flag is set. This is useful
- because GD 2.0.29 and above are capable of selecting a font
- automatically based on a fontconfig font pattern when fontconfig is
- available. This information is returned in the fontpath element of
- the gdFTStringExtra structure.
-
- > flags | gdFTEX_RETURNFONTPATHNAME;
-
- The caller is responsible for calling gdFree() on the fontpath
- element after the call if gdFTEX_RETURNFONTPATHNAME is set.
-
- GD 2.0.29 and later can use fontconfig to resolve font names,
- including fontconfig patterns, if the gdFTEX_FONTCONFIG flag is
- set. As a convenience, this behavior can be made the default by
- calling <gdFTUseFontConfig> with a nonzero value. In that situation it
- is not necessary to set the gdFTEX_FONTCONFIG flag on every call;
- however explicit font path names can still be used if the
- gdFTEX_FONTPATHNAME flag is set:
-
- > flags | gdFTEX_FONTPATHNAME;
-
- Unless <gdFTUseFontConfig> has been called with a nonzero value, GD
- 2.0.29 and later will still expect the fontlist argument to the
- freetype text output functions to be a font file name or list
- thereof as in previous versions. If you do not wish to make
- fontconfig the default, it is still possible to force the use of
- fontconfig for a single call to the freetype text output functions
- by setting the gdFTEX_FONTCONFIG flag:
-
- > flags | gdFTEX_FONTCONFIG;
-
- GD 2.0.29 and above can use fontconfig to resolve font names,
- including fontconfig patterns, if the gdFTEX_FONTCONFIG flag is
- set. As a convenience, this behavior can be made the default by
- calling <gdFTUseFontConfig> with a nonzero value. In that situation it
- is not necessary to set the gdFTEX_FONTCONFIG flag on every call;
- however explicit font path names can still be used if the
- gdFTEX_FONTPATHNAME flag is set:
-
- > flags | gdFTEX_FONTPATHNAME;
-
- For more information, see <gdImageStringFT>.
-*/
-
-/* the platform-independent resolution used for size and position calculations */
-/* the size of the error introduced by rounding is affected by this number */
-#define METRIC_RES 300
-
-BGD_DECLARE(char *) gdImageStringFTEx (gdImage * im, int *brect, int fg, const char *fontlist,
- double ptsize, double angle, int x, int y, const char *string,
- gdFTStringExtraPtr strex)
-{
- FT_Matrix matrix;
- FT_Vector penf, oldpenf, total_min = {0,0}, total_max = {0,0}, glyph_min, glyph_max;
- FT_Face face;
- FT_CharMap charmap = NULL;
- FT_Glyph image;
- FT_GlyphSlot slot;
- FT_Error err;
- FT_UInt glyph_index;
- double sin_a = sin (angle);
- double cos_a = cos (angle);
- int i, ch;
- font_t *font;
- fontkey_t fontkey;
- const char *next;
- char *tmpstr = 0;
- uint32_t *text;
- glyphInfo *info = NULL;
- ssize_t count;
- int render = (im && (im->trueColor || (fg <= 255 && fg >= -255)));
- FT_BitmapGlyph bm;
- /* 2.0.13: Bob Ostermann: don't force autohint, that's just for testing
- freetype and doesn't look as good */
- int render_mode = FT_LOAD_DEFAULT;
- int encoding, encodingfound;
- /* Now tuneable thanks to Wez Furlong */
- double linespace = LINESPACE;
- /* 2.0.6: put this declaration with the other declarations! */
- /*
- * make a new tweenColorCache on every call
- * because caching colormappings between calls
- * is not safe. If the im-pointer points to a
- * brand new image, the cache gives out bogus
- * colorindexes. -- 27.06.2001 <krisku@arrak.fi>
- */
- gdCache_head_t *tc_cache;
- /* Tuneable horizontal and vertical resolution in dots per inch */
- int hdpi, vdpi, horiAdvance, xshow_alloc = 0, xshow_pos = 0;
- FT_Size platform_specific, platform_independent;
-
- if (strex) {
- if ((strex->flags & gdFTEX_LINESPACE) == gdFTEX_LINESPACE) {
- linespace = strex->linespacing;
- }
- }
- tc_cache = gdCacheCreate (TWEENCOLORCACHESIZE,
- tweenColorTest, tweenColorFetch,
- tweenColorRelease);
-
- /***** initialize font library and font cache on first call ******/
- if (!fontCache) {
- if (gdFontCacheSetup () != 0) {
- gdCacheDelete (tc_cache);
- return "Failure to initialize font library";
- }
- }
- /*****/
- gdMutexLock (gdFontCacheMutex);
- /* get the font (via font cache) */
- fontkey.fontlist = fontlist;
- if (strex)
- fontkey.flags = strex->flags & (gdFTEX_FONTPATHNAME |
- gdFTEX_FONTCONFIG);
- else
- fontkey.flags = 0;
- fontkey.library = &library;
- font = (font_t *) gdCacheGet (fontCache, &fontkey);
- if (!font) {
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return fontCache->error;
- }
- face = font->face; /* shortcut */
- slot = face->glyph; /* shortcut */
-
- if (brect) {
- total_min.x = total_min.y = 0;
- total_max.x = total_max.y = 0;
- }
-
- /*
- * Added hdpi and vdpi to support images at non-screen resolutions, i.e. 300 dpi TIFF,
- * or 100h x 50v dpi FAX format. 2.0.23.
- * 2004/02/27 Mark Shackelford, mark.shackelford@acs-inc.com
- */
- hdpi = GD_RESOLUTION;
- vdpi = GD_RESOLUTION;
- encoding = gdFTEX_Unicode;
- if (strex) {
- if (strex->flags & gdFTEX_RESOLUTION) {
- hdpi = strex->hdpi;
- vdpi = strex->vdpi;
- }
- if (strex->flags & gdFTEX_XSHOW) {
- strex->xshow = NULL;
- }
- /* 2.0.12: allow explicit specification of the preferred map;
- but we still fall back if it is not available. */
- if (strex->flags & gdFTEX_CHARMAP) {
- encoding = strex->charmap;
- }
- /* 2.0.29: we can return the font path if desired */
- if (strex->flags & gdFTEX_RETURNFONTPATHNAME) {
- const unsigned int fontpath_len = strlen(font->fontpath);
-
- strex->fontpath = (char *) gdMalloc(fontpath_len + 1);
- if (strex->fontpath == NULL) {
- gdCacheDelete(tc_cache);
- gdMutexUnlock(gdFontCacheMutex);
- return "could not alloc full list of fonts";
- }
- memcpy(strex->fontpath, font->fontpath, fontpath_len);
- strex->fontpath[fontpath_len] = 0;
- }
- }
-
- matrix.xx = (FT_Fixed) (cos_a * (1 << 16));
- matrix.yx = (FT_Fixed) (sin_a * (1 << 16));
- matrix.xy = -matrix.yx;
- matrix.yy = matrix.xx;
-
- /* set rotation transform */
- FT_Set_Transform (face, &matrix, NULL);
-
- FT_New_Size (face, &platform_independent);
- FT_Activate_Size (platform_independent);
- if (FT_Set_Char_Size (face, 0, (FT_F26Dot6)(ptsize*64), METRIC_RES, METRIC_RES)) {
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Could not set character size";
- }
-
- if (render) {
- FT_New_Size (face, &platform_specific);
- FT_Activate_Size (platform_specific);
- if (FT_Set_Char_Size (face, 0, (FT_F26Dot6)(ptsize*64), hdpi, vdpi)) {
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Could not set character size";
- }
- }
-
- if (fg < 0)
- render_mode |= FT_LOAD_MONOCHROME;
-
- /* find requested charmap */
- encodingfound = 0;
- for (i = 0; i < face->num_charmaps; i++) {
- charmap = face->charmaps[i];
-
-#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 3)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2)))
- if (encoding == gdFTEX_Unicode) {
- if (charmap->encoding == FT_ENCODING_MS_SYMBOL
- || charmap->encoding == FT_ENCODING_UNICODE
- || charmap->encoding == FT_ENCODING_ADOBE_CUSTOM
- || charmap->encoding == FT_ENCODING_ADOBE_STANDARD) {
- encodingfound++;
- break;
- }
- } else if (encoding == gdFTEX_Adobe_Custom) {
- if (charmap->encoding == FT_ENCODING_ADOBE_CUSTOM) {
- encodingfound++;
- break;
- }
- } else if (encoding == gdFTEX_Big5) {
- /* renamed sometime after freetype-2.1.4 */
-#ifndef FT_ENCODING_BIG5
-#define FT_ENCODING_BIG5 FT_ENCODING_MS_BIG5
-#endif
- if (charmap->encoding == FT_ENCODING_BIG5) {
- encodingfound++;
- break;
- }
- } else if (encoding == gdFTEX_Shift_JIS) {
- /* renamed sometime after freetype-2.1.4 */
-#ifndef FT_ENCODING_SJIS
-#define FT_ENCODING_SJIS FT_ENCODING_MS_SJIS
-#endif
- if (charmap->encoding == FT_ENCODING_SJIS) {
- encodingfound++;
- break;
- }
- }
-#else
- if (encoding == gdFTEX_Unicode) {
- if ((charmap->platform_id = 3 && charmap->encoding_id == 1) /* Windows Unicode */
- || (charmap->platform_id == 3 && charmap->encoding_id == 0) /* Windows Symbol */
- || (charmap->platform_id == 2 && charmap->encoding_id == 1) /* ISO Unicode */
- || (charmap->platform_id == 0)) { /* Apple Unicode */
- encodingfound++;
- break;
- }
- } else if (encoding == gdFTEX_Big5) {
- if (charmap->platform_id == 3 && charmap->encoding_id == 4) { /* Windows Big5 */
- encodingfound++;
- break;
- }
- } else if (encoding == gdFTEX_Shift_JIS) {
- if (charmap->platform_id == 3 && charmap->encoding_id == 2) { /* Windows Sjis */
- encodingfound++;
- break;
- }
- }
-#endif
- }
- if (encodingfound) {
- FT_Set_Charmap(face, charmap);
- } else {
- /* No character set found! */
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "No character set found";
- }
-
-#ifndef JISX0208
- if (encoding == gdFTEX_Shift_JIS) {
-#endif
- if ((tmpstr = (char *) gdMalloc (BUFSIZ))) {
- any2eucjp (tmpstr, string, BUFSIZ);
- next = tmpstr;
- } else {
- next = string;
- }
-#ifndef JISX0208
- } else {
- next = string;
- }
-#endif
-
- oldpenf.x = oldpenf.y = 0; /* for postscript xshow operator */
- penf.x = penf.y = 0; /* running position of non-rotated glyphs */
- text = (uint32_t*) gdCalloc (sizeof (uint32_t), strlen(next));
- i = 0;
- while (*next) {
- int len;
- ch = *next;
- switch (encoding) {
- case gdFTEX_Unicode: {
- /* use UTF-8 mapping from ASCII */
- len = gdTcl_UtfToUniChar (next, &ch);
- /* EAM DEBUG */
- /* TBB: get this exactly right: 2.1.3 *or better*, all possible cases. */
- /* 2.0.24: David R. Morrison: use the more complete ifdef here. */
-#if ((defined(FREETYPE_MAJOR)) && (((FREETYPE_MAJOR == 2) && (((FREETYPE_MINOR == 1) && (FREETYPE_PATCH >= 3)) || (FREETYPE_MINOR > 1))) || (FREETYPE_MAJOR > 2)))
- if (charmap->encoding == FT_ENCODING_MS_SYMBOL)
-#else
- if (charmap->platform_id == 3 && charmap->encoding_id == 0)
-#endif /* Freetype 2.1 or better */
- {
- /* I do not know the significance of the constant 0xf000. */
- /* It was determined by inspection of the character codes */
- /* stored in Microsoft font symbol.ttf */
- ch |= 0xf000;
- }
- /* EAM DEBUG */
- next += len;
- }
- break;
- case gdFTEX_Shift_JIS: {
- unsigned char c;
- int jiscode;
- c = *next;
- if (0xA1 <= c && c <= 0xFE) {
- next++;
- jiscode = 0x100 * (c & 0x7F) + ((*next) & 0x7F);
-
- ch = (jiscode >> 8) & 0xFF;
- jiscode &= 0xFF;
-
- if (ch & 1)
- jiscode += 0x40 - 0x21;
- else
- jiscode += 0x9E - 0x21;
-
- if (jiscode >= 0x7F)
- jiscode++;
- ch = (ch - 0x21) / 2 + 0x81;
- if (ch >= 0xA0)
- ch += 0x40;
-
- ch = (ch << 8) + jiscode;
- } else {
- ch = c & 0xFF; /* don't extend sign */
- }
- if (*next) next++;
- }
- break;
- case gdFTEX_Big5: {
- /*
- * Big 5 mapping:
- * use "JIS-8 half-width katakana" coding from 8-bit characters. Ref:
- * ftp://ftp.ora.com/pub/examples/nutshell/ujip/doc/japan.inf-032092.sjs
- */
- ch = (*next) & 0xFF; /* don't extend sign */
- next++;
- if (ch >= 161 /* first code of JIS-8 pair */
- && *next) {
- /* don't advance past '\0' */
- /* TBB: Fix from Kwok Wah On: & 255 needed */
- ch = (ch * 256) + ((*next) & 255);
- next++;
- }
- }
- break;
-
- case gdFTEX_Adobe_Custom:
- default:
- ch &= 0xFF;
- next++;
- break;
- }
- text[i] = ch;
- i++;
- }
-
- FT_Activate_Size (platform_independent);
-
- count = textLayout (text , i, face, strex, &info);
-
- if (count < 0) {
- gdFree (text);
- gdFree (tmpstr);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Problem doing text layout";
- }
-
- for (i = 0; i < count; i++) {
- FT_Activate_Size (platform_independent);
-
- ch = text[info[i].cluster];
-
- /* carriage returns */
- if (ch == '\r') {
- penf.x = 0;
- continue;
- }
-
- /* newlines */
- if (ch == '\n') {
- /* 2.0.13: reset penf.x. Christopher J. Grayce */
- penf.x = 0;
- penf.y += linespace * ptsize * 64 * METRIC_RES / 72;
- penf.y &= ~63; /* round down to 1/METRIC_RES */
- continue;
- }
-
- glyph_index = info[i].index;
- /* When we know the position of the second or subsequent character,
- save the (kerned) advance from the preceeding character in the
- xshow vector */
- if (i && strex && (strex->flags & gdFTEX_XSHOW)) {
- /* make sure we have enough allocation for two numbers
- so we don't have to recheck for the terminating number */
- if (! xshow_alloc) {
- xshow_alloc = 100;
- strex->xshow = gdMalloc(xshow_alloc);
- if (!strex->xshow) {
- if (tmpstr)
- gdFree (tmpstr);
- gdFree(text);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Problem allocating memory";
- }
- xshow_pos = 0;
- } else if (xshow_pos + 20 > xshow_alloc) {
- xshow_alloc += 100;
- strex->xshow = gdReallocEx(strex->xshow, xshow_alloc);
- if (!strex->xshow) {
- if (tmpstr)
- gdFree (tmpstr);
- gdFree(text);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Problem allocating memory";
- }
- }
- xshow_pos += sprintf(strex->xshow + xshow_pos, "%g ",
- (double)(penf.x - oldpenf.x) * hdpi / (64 * METRIC_RES));
- }
- oldpenf.x = penf.x;
-
- /* load glyph image into the slot (erase previous one) */
- err = FT_Load_Glyph (face, glyph_index, render_mode);
- if (err) {
- if (tmpstr)
- gdFree (tmpstr);
- gdFree(text);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Problem loading glyph";
- }
-
- horiAdvance = info[i].x_advance;
-
- if (brect) {
- /* only if need brect */
-
- glyph_min.x = penf.x + slot->metrics.horiBearingX;
- glyph_min.y = penf.y - slot->metrics.horiBearingY;
-
-#if 0
- if (ch == ' ') { /* special case for trailing space */
- glyph_max.x = penf.x + horiAdvance;
- } else {
- glyph_max.x = glyph_min.x + slot->metrics.width;
- }
-#else
- glyph_max.x = penf.x + horiAdvance;
-#endif
- glyph_max.y = glyph_min.y + slot->metrics.height;
-
- if (i==0) {
- total_min = glyph_min;
- total_max = glyph_max;
- } else {
- if (glyph_min.x < total_min.x)
- total_min.x = glyph_min.x;
- if (glyph_min.y < total_min.y)
- total_min.y = glyph_min.y;
- if (glyph_max.x > total_max.x)
- total_max.x = glyph_max.x;
- if (glyph_max.y > total_max.y)
- total_max.y = glyph_max.y;
- }
- }
-
- if (render) {
- FT_Pos pen_x;
- FT_Pos pen_y;
- FT_Activate_Size (platform_specific);
-
- /* load glyph again into the slot (erase previous one) - this time with scaling */
- err = FT_Load_Glyph (face, glyph_index, render_mode);
- if (err) {
- if (tmpstr)
- gdFree (tmpstr);
- gdFree(text);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Problem loading glyph";
- }
-
- /* load and transform glyph image */
- FT_Get_Glyph (slot, &image);
-
- if (image->format != ft_glyph_format_bitmap) {
- err = FT_Glyph_To_Bitmap (&image, ft_render_mode_normal, 0, 1);
- if (err) {
- FT_Done_Glyph(image);
- if (tmpstr)
- gdFree (tmpstr);
- gdFree(text);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return "Problem rendering glyph";
- }
- }
-
- /* now, draw to our target surface */
- bm = (FT_BitmapGlyph) image;
- /* position rounded down to nearest pixel at current dpi
- (the estimate was rounded up to next 1/METRIC_RES, so this should fit) */
- pen_x = penf.x + info[i].x_offset;
- pen_y = penf.y - info[i].y_offset;
- gdft_draw_bitmap (tc_cache, im, fg, bm->bitmap,
- (int)(x + (pen_x * cos_a + pen_y * sin_a)*hdpi/(METRIC_RES*64) + bm->left),
- (int)(y - (pen_x * sin_a - pen_y * cos_a)*vdpi/(METRIC_RES*64) - bm->top));
-
- FT_Done_Glyph (image);
- }
-
-
- penf.x += horiAdvance;
- }
-
- gdFree(text);
- if (info) {
- gdFree(info);
- }
-
- /* Save the (unkerned) advance from the last character in the xshow vector */
- if (strex && (strex->flags & gdFTEX_XSHOW) && strex->xshow) {
- sprintf(strex->xshow + xshow_pos, "%g",
- (double)(penf.x - oldpenf.x) * hdpi / (64 * METRIC_RES) );
- }
-
- if (brect) {
- /* only if need brect */
- double scalex = (double)hdpi / (64 * METRIC_RES);
- double scaley = (double)vdpi / (64 * METRIC_RES);
-
- /* rotate bounding rectangle, scale and round to int pixels, and translate */
- brect[0] = x + (total_min.x * cos_a + total_max.y * sin_a)*scalex;
- brect[1] = y - (total_min.x * sin_a - total_max.y * cos_a)*scaley;
- brect[2] = x + (total_max.x * cos_a + total_max.y * sin_a)*scalex;
- brect[3] = y - (total_max.x * sin_a - total_max.y * cos_a)*scaley;
- brect[4] = x + (total_max.x * cos_a + total_min.y * sin_a)*scalex;
- brect[5] = y - (total_max.x * sin_a - total_min.y * cos_a)*scaley;
- brect[6] = x + (total_min.x * cos_a + total_min.y * sin_a)*scalex;
- brect[7] = y - (total_min.x * sin_a - total_min.y * cos_a)*scaley;
- }
-
- FT_Done_Size (platform_independent);
- if (render)
- FT_Done_Size (platform_specific);
-
- if (tmpstr)
- gdFree (tmpstr);
- gdCacheDelete (tc_cache);
- gdMutexUnlock (gdFontCacheMutex);
- return (char *) NULL;
-}
-
-#endif /* HAVE_LIBFREETYPE */
-
-#ifdef HAVE_LIBFONTCONFIG
-/* Code to find font path, with special mapping for Postscript font names.
- *
- * Dag Lem <dag@nimrod.no>
- */
-
-#include <fontconfig/fontconfig.h>
-
-/* #define NO_POSTSCRIPT_ALIAS 1 */
-#ifndef NO_POSTSCRIPT_ALIAS
-typedef struct _PostscriptAlias {
- char* name;
- char* family;
- char* style;
-} PostscriptAlias;
-
-/* This table maps standard Postscript font names to URW Type 1 fonts.
- The mapping is converted from Ghostscript (Fontmap.GS)
- for use with fontconfig. */
-static PostscriptAlias postscript_alias[] = {
- { "AvantGarde-Book", "URW Gothic L", "Book" },
- { "AvantGarde-BookOblique", "URW Gothic L", "Book Oblique" },
- { "AvantGarde-Demi", "URW Gothic L", "Demi" },
- { "AvantGarde-DemiOblique", "URW Gothic L", "Demi Oblique" },
-
- { "Bookman-Demi", "URW Bookman L", "Demi Bold" },
- { "Bookman-DemiItalic", "URW Bookman L", "Demi Bold Italic" },
- { "Bookman-Light", "URW Bookman L", "Light" },
- { "Bookman-LightItalic", "URW Bookman L", "Light Italic" },
-
- { "Courier", "Nimbus Mono L", "Regular" },
- { "Courier-Oblique", "Nimbus Mono L", "Regular Oblique" },
- { "Courier-Bold", "Nimbus Mono L", "Bold" },
- { "Courier-BoldOblique", "Nimbus Mono L", "Bold Oblique" },
-
- { "Helvetica", "Nimbus Sans L", "Regular" },
- { "Helvetica-Oblique", "Nimbus Sans L", "Regular Italic" },
- { "Helvetica-Bold", "Nimbus Sans L", "Bold" },
- { "Helvetica-BoldOblique", "Nimbus Sans L", "Bold Italic" },
-
- { "Helvetica-Narrow", "Nimbus Sans L", "Regular Condensed" },
- { "Helvetica-Narrow-Oblique", "Nimbus Sans L", "Regular Condensed Italic" },
- { "Helvetica-Narrow-Bold", "Nimbus Sans L", "Bold Condensed" },
- { "Helvetica-Narrow-BoldOblique", "Nimbus Sans L", "Bold Condensed Italic" },
-
- { "NewCenturySchlbk-Roman", "Century Schoolbook L", "Roman" },
- { "NewCenturySchlbk-Italic", "Century Schoolbook L", "Italic" },
- { "NewCenturySchlbk-Bold", "Century Schoolbook L", "Bold" },
- { "NewCenturySchlbk-BoldItalic", "Century Schoolbook L", "Bold Italic" },
-
- { "Palatino-Roman", "URW Palladio L", "Roman" },
- { "Palatino-Italic", "URW Palladio L", "Italic" },
- { "Palatino-Bold", "URW Palladio L", "Bold" },
- { "Palatino-BoldItalic", "URW Palladio L", "Bold Italic" },
-
- { "Symbol", "Standard Symbols L", "Regular" },
-
- { "Times-Roman", "Nimbus Roman No9 L", "Regular" },
- { "Times-Italic", "Nimbus Roman No9 L", "Regular Italic" },
- { "Times-Bold", "Nimbus Roman No9 L", "Medium" },
- { "Times-BoldItalic", "Nimbus Roman No9 L", "Medium Italic" },
-
- { "ZapfChancery-MediumItalic", "URW Chancery L", "Medium Italic" },
-
- { "ZapfDingbats", "Dingbats", "" },
-};
-#endif
-
-
-static FcPattern* find_font(FcPattern* pattern)
-{
- FcResult result;
-
- FcConfigSubstitute(0, pattern, FcMatchPattern);
- FcConfigSubstitute(0, pattern, FcMatchFont);
- FcDefaultSubstitute(pattern);
-
- return FcFontMatch(0, pattern, &result);
-}
-
-
-#ifndef NO_POSTSCRIPT_ALIAS
-static char* find_postscript_font(FcPattern **fontpattern, char* fontname)
-{
- FcPattern* font = NULL;
- size_t i;
-
- *fontpattern = NULL;
- for (i = 0; i < sizeof(postscript_alias)/sizeof(*postscript_alias); i++) {
- if (strcmp(fontname, postscript_alias[i].name) == 0) {
- FcChar8* family;
-
- FcPattern* pattern =
- FcPatternBuild(0,
- FC_FAMILY, FcTypeString, postscript_alias[i].family,
- FC_STYLE, FcTypeString, postscript_alias[i].style,
- (char*)0);
- font = find_font(pattern);
- FcPatternDestroy(pattern);
-
- if (!font)
- return "fontconfig: Couldn't find font.";
- if (FcPatternGetString(font, FC_FAMILY, 0, &family) != FcResultMatch) {
- FcPatternDestroy(font);
- return "fontconfig: Couldn't retrieve font family name.";
- }
-
- /* Check whether we got the font family we wanted. */
- if (strcmp((const char *)family, postscript_alias[i].family) != 0) {
- FcPatternDestroy(font);
- return "fontconfig: Didn't find expected font family. Perhaps URW Type 1 fonts need installing?";
- }
- break;
- }
- }
-
- *fontpattern = font;
- return NULL;
-}
-#endif
-
-static char * font_pattern(char **fontpath, char *fontpattern)
-{
- FcPattern* font = NULL;
- FcChar8* file;
- FcPattern* pattern;
-#ifndef NO_POSTSCRIPT_ALIAS
- char *error;
-#endif
-
- *fontpath = NULL;
-#ifndef NO_POSTSCRIPT_ALIAS
- error = find_postscript_font(&font, fontpattern);
-
- if (!font) {
- if (error)
- return error;
-#endif
- pattern = FcNameParse((const FcChar8 *)fontpattern);
- font = find_font(pattern);
- FcPatternDestroy(pattern);
-#ifndef NO_POSTSCRIPT_ALIAS
- }
-#endif
-
- if (!font)
- return "fontconfig: Couldn't find font.";
- if (FcPatternGetString(font, FC_FILE, 0, &file) != FcResultMatch) {
- FcPatternDestroy(font);
- return "fontconfig: Couldn't retrieve font file name.";
- } else {
- const unsigned int file_len = strlen((const char *)file);
-
- *fontpath = (char *) gdMalloc(file_len + 1);
- if (*fontpath == NULL) {
- return "could not alloc font path";
- }
- memcpy(*fontpath, (const char *)file, file_len);
- (*fontpath)[file_len] = 0;
- }
- FcPatternDestroy(font);
-
- return NULL;
-}
-
-#endif /* HAVE_LIBFONTCONFIG */
-
-#ifdef HAVE_LIBFREETYPE
-/* Look up font using font names as file names. */
-static char * font_path(char **fontpath, char *name_list)
-{
- int font_found = 0;
- char *fontsearchpath, *fontlist;
- char *fullname = NULL;
- char *name, *dir;
- char *path;
- char *strtok_ptr = NULL;
- const unsigned int name_list_len = strlen(name_list);
-
- /*
- * Search the pathlist for any of a list of font names.
- */
- *fontpath = NULL;
- fontsearchpath = getenv ("GDFONTPATH");
-#ifdef _WIN32
- if (!fontsearchpath) {
- char *ffptr = getenv ("WINDIR");
- if (ffptr) {
- fontsearchpath = malloc (strlen(ffptr) + strlen("\\Fonts") + 1);
- strcpy(fontsearchpath, ffptr);
- strcat(fontsearchpath, "\\Fonts");
- }
- }
-#endif
- if (!fontsearchpath)
- fontsearchpath = DEFAULT_FONTPATH;
- path = (char *) gdMalloc(sizeof(char) * strlen(fontsearchpath) + 1);
- if( path == NULL ) {
- return "could not alloc full list of fonts";
- }
- path[0] = 0;
-
- fontlist = (char *) gdMalloc(name_list_len + 1);
- if (fontlist == NULL) {
- gdFree(path);
- return "could not alloc full list of fonts";
- }
- memcpy(fontlist, name_list, name_list_len);
- fontlist[name_list_len] = 0;
-
- /*
- * Must use gd_strtok_r else pointer corrupted by strtok in nested loop.
- */
- for (name = gd_strtok_r (fontlist, LISTSEPARATOR, &strtok_ptr); name;
- name = gd_strtok_r (0, LISTSEPARATOR, &strtok_ptr)) {
- char *path_ptr = NULL;
-
- /* make a fresh copy each time - strtok corrupts it. */
- sprintf (path, "%s", fontsearchpath);
- /*
- * Allocate an oversized buffer that is guaranteed to be
- * big enough for all paths to be tested.
- */
- /* 2.0.22: Thorben Kundinger: +8 is needed, not +6. */
- fullname = gdReallocEx(fullname,
- strlen (fontsearchpath) + strlen (name) + 8);
- if (!fullname) {
- gdFree(fontlist);
- gdFree(path);
- return "could not alloc full path of font";
- }
- /* if name is an absolute or relative pathname then test directly */
- if (strchr (name, '/')
- || (name[0] != 0 && name[1] == ':'
- && (name[2] == '/' || name[2] == '\\')))
- {
- sprintf (fullname, "%s", name);
- if (access (fullname, R_OK) == 0) {
- font_found++;
- break;
- }
- }
- for (dir = gd_strtok_r (path, PATHSEPARATOR, &path_ptr); dir;
- dir = gd_strtok_r (0, PATHSEPARATOR, &path_ptr)) {
- if (strchr (name, '.')) {
- sprintf (fullname, "%s/%s", dir, name);
- if (access (fullname, R_OK) == 0) {
- font_found++;
- break;
- } else {
- continue;
- }
- }
- sprintf (fullname, "%s/%s.ttf", dir, name);
- if (access (fullname, R_OK) == 0) {
- font_found++;
- break;
- }
- sprintf (fullname, "%s/%s.pfa", dir, name);
- if (access (fullname, R_OK) == 0) {
- font_found++;
- break;
- }
- sprintf (fullname, "%s/%s.pfb", dir, name);
- if (access (fullname, R_OK) == 0) {
- font_found++;
- break;
- }
- sprintf (fullname, "%s/%s.dfont", dir, name);
- if (access (fullname, R_OK) == 0) {
- font_found++;
- break;
- }
- }
-
- if (font_found)
- break;
- }
- gdFree (path);
- if (fontlist != NULL) {
- gdFree (fontlist);
- fontlist = NULL;
- }
- if (!font_found) {
- gdFree (fullname);
- return "Could not find/open font";
- }
-
- *fontpath = fullname;
- return NULL;
-}
-#endif
-
-/**
- * Function: gdFTUseFontConfig
- *
- * Enable or disable fontconfig by default.
- *
- * If GD is built without libfontconfig support, this function is a NOP.
- *
- * Parameters:
- * flag - Zero to disable, nonzero to enable.
- *
- * See also:
- * - <gdImageStringFTEx>
- */
-BGD_DECLARE(int) gdFTUseFontConfig(int flag)
-{
-#ifdef HAVE_LIBFONTCONFIG
- fontConfigFlag = flag;
- return 1;
-#else
- (void)flag;
- return 0;
-#endif /* HAVE_LIBFONTCONFIG */
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdfx.c b/Build/source/libs/gd/libgd-src/src/gdfx.c
deleted file mode 100644
index 557f51c4653..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfx.c
+++ /dev/null
@@ -1,524 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include "gd.h"
-#include "gd_errors.h"
-#include <math.h>
-
-/* In tests this is sufficient to prevent obvious artifacts */
-#define MAG 4
-
-#define PI 3.141592
-#define DEG2RAD(x) ((x)*PI/180.)
-
-#define MAX(x,y) ((x) > (y) ? (x) : (y))
-#define MIN(x,y) ((x) < (y) ? (x) : (y))
-
-#define MAX4(x,y,z,w) \
- ((MAX((x),(y))) > (MAX((z),(w))) ? (MAX((x),(y))) : (MAX((z),(w))))
-#define MIN4(x,y,z,w) \
- ((MIN((x),(y))) < (MIN((z),(w))) ? (MIN((x),(y))) : (MIN((z),(w))))
-
-#define MAXX(x) MAX4(x[0],x[2],x[4],x[6])
-#define MINX(x) MIN4(x[0],x[2],x[4],x[6])
-#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
-#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
-
-/**
- * Function: gdImageStringFTCircle
- *
- * Draw text curved along the top and bottom of a circular area of an image.
- *
- * Parameters:
- * im - The image to draw onto.
- * cx - The x-coordinate of the center of the circular area.
- * cy - The y-coordinate of the center of the circular area.
- * radius - The radius of the circular area.
- * textRadius - The height of each character; if textRadius is 1/2 of radius,
- * characters extend halfway from the edge to the center.
- * fillPortion - The percentage of the 180 degrees of the circular area
- * assigned to each section of text, that is actually occupied
- * by text. The value has to be in range 0.0 to 1.0, with useful
- * values from about 0.4 to 0.9; 0.9 looks better than 1.0 which
- * is rather crowded.
- * font - The fontlist that is passed to <gdImageStringFT>.
- * points - The point size, which functions as a hint. Although the size
- * of the text is determined by radius, textRadius and
- * fillPortion, a point size that 'hints' appropriately should be
- * passed. If it's known that the text will be large, a large
- * point size such as 24.0 should be passed to get the best
- * results.
- * top - The text to draw clockwise at the top of the circular area.
- * bottom - The text to draw counterclockwise at the bottom of the
- * circular area.
- * fgcolor - The font color.
- *
- * Returns:
- * NULL on success, or an error string on failure.
- */
-BGD_DECLARE(char*)
-gdImageStringFTCircle (gdImagePtr im,
- int cx,
- int cy,
- double radius,
- double textRadius,
- double fillPortion,
- char *font,
- double points, char *top, char *bottom, int fgcolor)
-{
- char *err;
- int w;
- int brect[8];
- int sx1, sx2, sy1, sy2, sx, sy;
- int x, y;
- int fr, fg, fb, fa;
- int ox, oy;
- double prop;
- gdImagePtr im1;
- gdImagePtr im2;
- gdImagePtr im3;
- /* obtain brect so that we can size the image */
- err = gdImageStringFT ((gdImagePtr) NULL,
- &brect[0], 0, font, points * MAG, 0, 0, 0, bottom);
- if (err) {
- return err;
- }
- sx1 = MAXX (brect) - MINX (brect) + 6;
- sy1 = MAXY (brect) - MINY (brect) + 6;
- err = gdImageStringFT ((gdImagePtr) NULL,
- &brect[0], 0, font, points * MAG, 0, 0, 0, top);
- if (err) {
- return err;
- }
- sx2 = MAXX (brect) - MINX (brect) + 6;
- sy2 = MAXY (brect) - MINY (brect) + 6;
- /* Pad by 4 pixels to allow for slight errors
- observed in the bounding box returned by freetype */
- if (sx1 > sx2) {
- sx = sx1 * 2 + 4;
- } else {
- sx = sx2 * 2 + 4;
- }
- if (sy1 > sy2) {
- sy = sy1;
- } else {
- sy = sy2;
- }
- im1 = gdImageCreateTrueColor (sx, sy);
- if (!im1) {
- return "could not create first image";
- }
- err = gdImageStringFT (im1, 0, gdTrueColor (255, 255, 255),
- font, points * MAG,
- 0, ((sx / 2) - sx1) / 2, points * MAG, bottom);
- if (err) {
- gdImageDestroy (im1);
- return err;
- }
- /* We don't know the descent, which would be needed to do this
- with the angle parameter. Instead, implement a simple
- flip operation ourselves. */
- err = gdImageStringFT (im1, 0, gdTrueColor (255, 255, 255),
- font, points * MAG,
- 0, sx / 2 + ((sx / 2) - sx2) / 2, points * MAG, top);
- if (err) {
- gdImageDestroy (im1);
- return err;
- }
- /* Flip in place is tricky, be careful not to double-swap things */
- if (sy & 1) {
- for (y = 0; (y <= (sy / 2)); y++) {
- int xlimit = sx - 2;
- if (y == (sy / 2)) {
- /* If there is a "middle" row, be careful
- not to swap twice! */
- xlimit -= (sx / 4);
- }
- for (x = (sx / 2) + 2; (x < xlimit); x++) {
- int t;
- int ox = sx - x + (sx / 2) - 1;
- int oy = sy - y - 1;
- t = im1->tpixels[oy][ox];
- im1->tpixels[oy][ox] = im1->tpixels[y][x];
- im1->tpixels[y][x] = t;
- }
- }
- } else {
- for (y = 0; (y < (sy / 2)); y++) {
- int xlimit = sx - 2;
- for (x = (sx / 2) + 2; (x < xlimit); x++) {
- int t;
- int ox = sx - x + (sx / 2) - 1;
- int oy = sy - y - 1;
- t = im1->tpixels[oy][ox];
- im1->tpixels[oy][ox] = im1->tpixels[y][x];
- im1->tpixels[y][x] = t;
- }
- }
- }
-#if STEP_PNGS
- {
- FILE *out = fopen ("gdfx1.png", "wb");
- gdImagePng (im1, out);
- fclose (out);
- }
-#endif /* STEP_PNGS */
- /* Resample taller; the exact proportions of the text depend on the
- ratio of textRadius to radius, and the value of fillPortion */
- if (sx > sy * 10) {
- w = sx;
- } else {
- w = sy * 10;
- }
- im2 = gdImageCreateTrueColor (w, w);
- if (!im2) {
- gdImageDestroy (im1);
- return "could not create resampled image";
- }
- prop = textRadius / radius;
- gdImageCopyResampled (im2, im1,
- gdImageSX (im2) * (1.0 - fillPortion) / 4,
- sy * 10 * (1.0 - prop),
- 0, 0,
- gdImageSX (im2) * fillPortion / 2, sy * 10 * prop,
- gdImageSX (im1) / 2, gdImageSY (im1));
- gdImageCopyResampled (im2, im1,
- (gdImageSX (im2) / 2) +
- gdImageSX (im2) * (1.0 - fillPortion) / 4,
- sy * 10 * (1.0 - prop),
- gdImageSX (im1) / 2, 0,
- gdImageSX (im2) * fillPortion / 2, sy * 10 * prop,
- gdImageSX (im1) / 2, gdImageSY (im1));
-#if STEP_PNGS
- {
- FILE *out = fopen ("gdfx2.png", "wb");
- gdImagePng (im2, out);
- fclose (out);
- }
-#endif /* STEP_PNGS */
-
- gdImageDestroy (im1);
-
- /* Ready to produce a circle */
- im3 = gdImageSquareToCircle (im2, radius);
- if (im3 == NULL) {
- gdImageDestroy(im2);
- return 0;
- }
- gdImageDestroy (im2);
- /* Now blend im3 with the destination. Cheat a little. The
- source (im3) is white-on-black, so we can use the
- red component as a basis for alpha as long as we're
- careful to shift off the extra bit and invert
- (alpha ranges from 0 to 127 where 0 is OPAQUE).
- Also be careful to allow for an alpha component
- in the fgcolor parameter itself (gug!) */
- fr = gdTrueColorGetRed (fgcolor);
- fg = gdTrueColorGetGreen (fgcolor);
- fb = gdTrueColorGetBlue (fgcolor);
- fa = gdTrueColorGetAlpha (fgcolor);
- ox = cx - (im3->sx / 2);
- oy = cy - (im3->sy / 2);
- for (y = 0; (y < im3->sy); y++) {
- for (x = 0; (x < im3->sx); x++) {
- int a = gdTrueColorGetRed (im3->tpixels[y][x]) >> 1;
- a *= (127 - fa);
- a /= 127;
- a = 127 - a;
- gdImageSetPixel (im, x + ox, y + oy,
- gdTrueColorAlpha (fr, fg, fb, a));
- }
- }
- gdImageDestroy (im3);
- return 0;
-}
-
-#if GDFX_MAIN
-
-int
-main (int argc, char *argv[])
-{
- FILE *in;
- FILE *out;
- gdImagePtr im;
- int radius;
- /* Create an image of text on a circle, with an
- alpha channel so that we can copy it onto a
- background */
- in = fopen ("eleanor.jpg", "rb");
- if (!in) {
- im = gdImageCreateTrueColor (300, 300);
- } else {
- im = gdImageCreateFromJpeg (in);
- fclose (in);
- }
- if (gdImageSX (im) < gdImageSY (im)) {
- radius = gdImageSX (im) / 2;
- } else {
- radius = gdImageSY (im) / 2;
- }
- gdImageStringFTCircle (im,
- gdImageSX (im) / 2,
- gdImageSY (im) / 2,
- radius,
- radius / 2,
- 0.8,
- "arial",
- 24,
- "top text",
- "bottom text", gdTrueColorAlpha (240, 240, 255, 32));
- out = fopen ("gdfx.png", "wb");
- if (!out) {
- gd_error("Can't create gdfx.png\n");
- return 1;
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
- return 0;
-}
-
-#endif /* GDFX_MAIN */
-
-/* Note: don't change these */
-#define SUPER 2
-#define SUPERBITS1 1
-#define SUPERBITS2 2
-
-/**
- * Function: gdImageSquareToCircle
- *
- * Apply polar coordinate transformation to an image.
- *
- * The X axis of the original will be remapped to theta (angle) and the Y axis
- * of the original will be remapped to rho (distance from center).
- *
- * Parameters:
- * im - The image, which must be square, i.e. width == height.
- * radius - The radius of the new image, i.e. width == height == radius * 2.
- *
- * Returns:
- * The transformed image, or NULL on failure.
- */
-BGD_DECLARE(gdImagePtr)
-gdImageSquareToCircle (gdImagePtr im, int radius)
-{
- int x, y;
- double c;
- gdImagePtr im2;
- if (im->sx != im->sy) {
- /* Source image must be square */
- return 0;
- }
- im2 = gdImageCreateTrueColor (radius * 2, radius * 2);
- if (!im2) {
- return 0;
- }
- /* Supersampling for a nicer result */
- c = (im2->sx / 2) * SUPER;
- for (y = 0; (y < im2->sy * SUPER); y++) {
- for (x = 0; (x < im2->sx * SUPER); x++) {
- double rho = sqrt ((x - c) * (x - c) + (y - c) * (y - c));
- int pix;
- int cpix;
- double theta;
- double ox;
- double oy;
- int red, green, blue, alpha;
- if (rho > c) {
- continue;
- }
- theta = atan2 (x - c, y - c) + PI / 2;
- if (theta < 0) {
- theta += 2 * PI;
- }
- /* Undo supersampling */
- oy = (rho * im->sx) / (im2->sx * SUPER / 2);
- ox = theta * im->sx / (3.141592653 * 2);
- pix = gdImageGetPixel (im, ox, oy);
- cpix = im2->tpixels[y >> SUPERBITS1][x >> SUPERBITS1];
- red =
- (gdImageRed (im, pix) >> SUPERBITS2) + gdTrueColorGetRed (cpix);
- green =
- (gdImageGreen (im, pix) >> SUPERBITS2) +
- gdTrueColorGetGreen (cpix);
- blue =
- (gdImageBlue (im, pix) >> SUPERBITS2) + gdTrueColorGetBlue (cpix);
- alpha =
- (gdImageAlpha (im, pix) >> SUPERBITS2) +
- gdTrueColorGetAlpha (cpix);
- im2->tpixels[y >> SUPERBITS1][x >> SUPERBITS1] =
- gdTrueColorAlpha (red, green, blue, alpha);
- }
- }
- /* Restore full dynamic range, 0-63 yields 0-252. Replication of
- first 2 bits in last 2 bits has the desired effect. Note
- slightly different arithmetic for alpha which is 7-bit.
- NOTE: only correct for SUPER == 2 */
- for (y = 0; (y < im2->sy); y++) {
- for (x = 0; (x < im2->sx); x++) {
- /* Copy first 2 bits to last 2 bits, matching the
- dynamic range of the original cheaply */
- int cpix = im2->tpixels[y][x];
-
- im2->tpixels[y][x] = gdTrueColorAlpha ((gdTrueColorGetRed (cpix) &
- 0xFC) +
- ((gdTrueColorGetRed (cpix) &
- 0xC0) >> 6),
- (gdTrueColorGetGreen (cpix) &
- 0xFC) +
- ((gdTrueColorGetGreen (cpix)
- & 0xC0) >> 6),
- (gdTrueColorGetBlue (cpix) &
- 0xFC) +
- ((gdTrueColorGetBlue (cpix) &
- 0xC0) >> 6),
- (gdTrueColorGetAlpha (cpix) &
- 0x7C) +
- ((gdTrueColorGetAlpha (cpix)
- & 0x60) >> 6));
- }
- }
- return im2;
-}
-
-/* 2.0.16: Called by gdImageSharpen to avoid excessive code repetition
- Added on 2003-11-19 by
- Paul Troughton (paul<dot>troughton<at>ieee<dot>org)
- Given filter coefficents and colours of three adjacent pixels,
-returns new colour for centre pixel
-*/
-
-int
-gdImageSubSharpen (int pc, int c, int nc, float inner_coeff, float
- outer_coeff)
-{
- float red, green, blue, alpha;
-
- red = inner_coeff * gdTrueColorGetRed (c) + outer_coeff *
- (gdTrueColorGetRed (pc) + gdTrueColorGetRed (nc));
- green = inner_coeff * gdTrueColorGetGreen (c) + outer_coeff *
- (gdTrueColorGetGreen (pc) + gdTrueColorGetGreen (nc));
- blue = inner_coeff * gdTrueColorGetBlue (c) + outer_coeff *
- (gdTrueColorGetBlue (pc) + gdTrueColorGetBlue (nc));
- alpha = gdTrueColorGetAlpha (c);
-
- /* Clamping, as can overshoot bounds in either direction */
- if (red > 255.0f) {
- red = 255.0f;
- }
- if (green > 255.0f) {
- green = 255.0f;
- }
- if (blue > 255.0f) {
- blue = 255.0f;
- }
- if (red < 0.0f) {
- red = 0.0f;
- }
- if (green < 0.0f) {
- green = 0.0f;
- }
- if (blue < 0.0f) {
- blue = 0.0f;
- }
-
- return gdTrueColorAlpha ((int) red, (int) green, (int) blue, (int) alpha);
-}
-
-/**
- * Function: gdImageSharpen
- *
- * Sharpen an image.
- *
- * Uses a simple 3x3 convolution kernel and makes use of separability.
- * It's faster, but less flexible, than full-blown unsharp masking.
- * Silently does nothing to non-truecolor images and for pct<0, as it's not a useful blurring function.
- *
- * Parameters:
- * pct - The sharpening percentage, which can be greater than 100.
- *
- * Author:
- * Paul Troughton (paul<dot>troughton<at>ieee<dot>org)
- */
-BGD_DECLARE(void)
-gdImageSharpen (gdImagePtr im, int pct)
-{
- int x, y;
- int sx, sy;
- float inner_coeff, outer_coeff;
-
- sx = im->sx;
- sy = im->sy;
-
- /* Must sum to 1 to avoid overall change in brightness.
- * Scaling chosen so that pct=100 gives 1-D filter [-1 6 -1]/4,
- * resulting in a 2-D filter [1 -6 1; -6 36 -6; 1 -6 1]/16,
- * which gives noticeable, but not excessive, sharpening
- */
-
- outer_coeff = -pct / 400.0;
- inner_coeff = 1 - 2 * outer_coeff;
-
- /* Don't try to do anything with non-truecolor images, as
- pointless,
- * nor for pct<=0, as small kernel size leads to nasty
- artefacts when blurring
- */
- if ((im->trueColor) && (pct > 0)) {
-
- /* First pass, 1-D convolution column-wise */
- for (x = 0; x < sx; x++) {
-
- /* pc is colour of previous pixel; c of the
- current pixel and nc of the next */
- int pc, c, nc;
-
- /* Replicate edge pixel at image boundary */
- pc = gdImageGetPixel (im, x, 0);
-
- /* Stop looping before last pixel to avoid
- conditional within loop */
- for (y = 0; y < sy - 1; y++) {
-
- c = gdImageGetPixel (im, x, y);
-
- nc = gdImageGetTrueColorPixel (im, x, y + 1);
-
- /* Update centre pixel to new colour */
- gdImageSetPixel (im, x, y,
- gdImageSubSharpen (pc, c, nc, inner_coeff,
- outer_coeff));
-
- /* Save original colour of current
- pixel for next time round */
- pc = c;
- }
-
- /* Deal with last pixel, replicating current
- pixel at image boundary */
- c = gdImageGetPixel (im, x, y);
- gdImageSetPixel (im, x, y, gdImageSubSharpen
- (pc, c, c, inner_coeff, outer_coeff));
- }
-
- /* Second pass, 1-D convolution row-wise */
- for (y = 0; y < sy; y++) {
- int pc, c;
- pc = gdImageGetPixel (im, 0, y);
- for (x = 0; x < sx - 1; x++) {
- int c, nc;
- c = gdImageGetPixel (im, x, y);
- nc = gdImageGetTrueColorPixel (im, x + 1, y);
- gdImageSetPixel (im, x, y,
- gdImageSubSharpen (pc, c, nc, inner_coeff,
- outer_coeff));
- pc = c;
- }
- c = gdImageGetPixel (im, x, y);
- gdImageSetPixel (im, x, y, gdImageSubSharpen
- (pc, c, c, inner_coeff, outer_coeff));
- }
- }
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdfx.h b/Build/source/libs/gd/libgd-src/src/gdfx.h
deleted file mode 100644
index b00f573a609..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdfx.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef GDFX_H
-#define GDFX_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-BGD_DECLARE(gdImagePtr) gdImageSquareToCircle(gdImagePtr im, int radius);
-
-BGD_DECLARE(char *) gdImageStringFTCircle(
- gdImagePtr im,
- int cx,
- int cy,
- double radius,
- double textRadius,
- double fillPortion,
- char *font,
- double points,
- char *top,
- char *bottom,
- int fgcolor);
-
-BGD_DECLARE(void) gdImageSharpen (gdImagePtr im, int pct);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GDFX_H */
diff --git a/Build/source/libs/gd/libgd-src/src/gdhelpers.c b/Build/source/libs/gd/libgd-src/src/gdhelpers.c
deleted file mode 100644
index de7a0a39c8e..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdhelpers.c
+++ /dev/null
@@ -1,116 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-#include "gdhelpers.h"
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <ctype.h>
-
-/* TBB: gd_strtok_r is not portable; provide an implementation */
-
-#define SEP_TEST (separators[*((unsigned char *) s)])
-
-char *
-gd_strtok_r (char *s, char *sep, char **state)
-{
- char separators[256];
- char *result = 0;
- memset (separators, 0, sizeof (separators));
- while (*sep) {
- separators[*((unsigned char *) sep)] = 1;
- sep++;
- }
- if (!s) {
- /* Pick up where we left off */
- s = *state;
- }
- /* 1. EOS */
- if (!(*s)) {
- *state = s;
- return 0;
- }
- /* 2. Leading separators, if any */
- if (SEP_TEST) {
- do {
- s++;
- } while (SEP_TEST);
- /* 2a. EOS after separators only */
- if (!(*s)) {
- *state = s;
- return 0;
- }
- }
- /* 3. A token */
- result = s;
- do {
- /* 3a. Token at end of string */
- if (!(*s)) {
- *state = s;
- return result;
- }
- s++;
- } while (!SEP_TEST);
- /* 4. Terminate token and skip trailing separators */
- *s = '\0';
- do {
- s++;
- } while (SEP_TEST);
- /* 5. Return token */
- *state = s;
- return result;
-}
-
-void * gdCalloc (size_t nmemb, size_t size)
-{
- return calloc (nmemb, size);
-}
-
-void *
-gdMalloc (size_t size)
-{
- return malloc (size);
-}
-
-void *
-gdRealloc (void *ptr, size_t size)
-{
- return realloc (ptr, size);
-}
-
-void *
-gdReallocEx (void *ptr, size_t size)
-{
- void *newPtr = gdRealloc (ptr, size);
- if (!newPtr && ptr)
- gdFree(ptr);
- return newPtr;
-}
-
-/*
- Function: gdFree
-
- Frees memory that has been allocated by libgd functions.
-
- Unless more specialized functions exists (for instance, <gdImageDestroy>),
- all memory that has been allocated by public libgd functions has to be
- freed by calling <gdFree>, and not by free(3), because libgd internally
- doesn't use alloc(3) and friends but rather its own allocation functions,
- which are, however, not publicly available.
-
- Parameters:
-
- ptr - Pointer to the memory space to free. If it is NULL, no operation is
- performed.
-
- Returns:
-
- Nothing.
-*/
-BGD_DECLARE(void) gdFree (void *ptr)
-{
- free (ptr);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdhelpers.h b/Build/source/libs/gd/libgd-src/src/gdhelpers.h
deleted file mode 100644
index 9c7ef104c28..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdhelpers.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef GDHELPERS_H
-#define GDHELPERS_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* sys/types.h is needed for size_t on Sparc-SunOS-4.1 */
-#ifndef _WIN32_WCE
-#include <sys/types.h>
-#else
-#include <stdlib.h>
-#endif /* _WIN32_WCE */
-
- /* TBB: strtok_r is not universal; provide an implementation of it. */
-
- char * gd_strtok_r (char *s, char *sep, char **state);
-
- /* These functions wrap memory management. gdFree is
- in gd.h, where callers can utilize it to correctly
- free memory allocated by these functions with the
- right version of free(). */
- void *gdCalloc (size_t nmemb, size_t size);
- void *gdMalloc (size_t size);
- void *gdRealloc (void *ptr, size_t size);
- /* The extended version of gdReallocEx will free *ptr if the
- * realloc fails */
- void *gdReallocEx (void *ptr, size_t size);
-
- /* Returns nonzero if multiplying the two quantities will
- result in integer overflow. Also returns nonzero if
- either quantity is negative. By Phil Knirsch based on
- netpbm fixes by Alan Cox. */
-
- int overflow2(int a, int b);
-
- /* 2.0.16: portable mutex support for thread safety. */
-#if defined(CPP_SHARP)
-# define gdMutexDeclare(x)
-# define gdMutexSetup(x)
-# define gdMutexShutdown(x)
-# define gdMutexLock(x)
-# define gdMutexUnlock(x)
-#elif defined(_WIN32)
- /* 2.0.18: must include windows.h to get CRITICAL_SECTION. */
-# include <windows.h>
-# define gdMutexDeclare(x) CRITICAL_SECTION x
-# define gdMutexSetup(x) InitializeCriticalSection(&x)
-# define gdMutexShutdown(x) DeleteCriticalSection(&x)
-# define gdMutexLock(x) EnterCriticalSection(&x)
-# define gdMutexUnlock(x) LeaveCriticalSection(&x)
-#elif defined(HAVE_PTHREAD)
-# include <pthread.h>
-# define gdMutexDeclare(x) pthread_mutex_t x
-# define gdMutexSetup(x) pthread_mutex_init(&x, 0)
-# define gdMutexShutdown(x) pthread_mutex_destroy(&x)
-# define gdMutexLock(x) pthread_mutex_lock(&x)
-# define gdMutexUnlock(x) pthread_mutex_unlock(&x)
-#else
-# define gdMutexDeclare(x)
-# define gdMutexSetup(x)
-# define gdMutexShutdown(x)
-# define gdMutexLock(x)
-# define gdMutexUnlock(x)
-#endif /* _WIN32 || HAVE_PTHREAD */
-
-#define DPCM2DPI(dpcm) (unsigned int)((dpcm)*2.54 + 0.5)
-#define DPM2DPI(dpm) (unsigned int)((dpm)*0.0254 + 0.5)
-#define DPI2DPCM(dpi) (unsigned int)((dpi)/2.54 + 0.5)
-#define DPI2DPM(dpi) (unsigned int)((dpi)/0.0254 + 0.5)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* GDHELPERS_H */
diff --git a/Build/source/libs/gd/libgd-src/src/gdkanji.c b/Build/source/libs/gd/libgd-src/src/gdkanji.c
deleted file mode 100644
index c670d986433..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdkanji.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/* gdkanji.c (Kanji code converter) */
-/* written by Masahito Yamaga (ma@yama-ga.com) */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_errors.h"
-#include <errno.h>
-#include <stdarg.h>
-#if defined(HAVE_ICONV_H)
-#include <iconv.h>
-#endif
-
-#ifndef HAVE_ICONV_T_DEF
-typedef void *iconv_t;
-#endif
-
-#ifndef HAVE_ICONV
-#define ICONV_CONST /**/
-iconv_t iconv_open (const char *, const char *);
-size_t iconv (iconv_t, ICONV_CONST char **, size_t *, char **, size_t *);
-int iconv_close (iconv_t);
-
-iconv_t
-iconv_open (const char *tocode, const char *fromcode)
-{
- (void)tocode;
- (void)fromcode;
- return (iconv_t) (-1);
-}
-
-size_t
-iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t * inbytesleft,
- char **outbuf, size_t * outbytesleft)
-{
- (void)cd;
- (void)inbuf;
- (void)inbytesleft;
- (void)outbuf;
- (void)outbytesleft;
- return 0;
-}
-
-int
-iconv_close (iconv_t cd)
-{
- (void)cd;
- return 0;
-}
-
-#endif /* !HAVE_ICONV */
-
-#define LIBNAME "any2eucjp()"
-
-#if defined(__MSC__) || defined(__BORLANDC__) || defined(__TURBOC__) || defined(_Windows) || defined(MSDOS)
-#ifndef SJISPRE
-#define SJISPRE 1
-#endif
-#endif
-
-#ifdef TRUE
-#undef TRUE
-#endif
-#ifdef FALSE
-#undef FALSE
-#endif
-
-#define TRUE 1
-#define FALSE 0
-
-#define NEW 1
-#define OLD 2
-#define ESCI 3
-#define NEC 4
-#define EUC 5
-#define SJIS 6
-#define EUCORSJIS 7
-#define ASCII 8
-
-#define NEWJISSTR "JIS7"
-#define OLDJISSTR "jis"
-#define EUCSTR "eucJP"
-#define SJISSTR "SJIS"
-
-#define ESC 27
-#define SS2 142
-
-/* DetectKanjiCode() derived from DetectCodeType() by Ken Lunde. */
-
-static int
-DetectKanjiCode (const unsigned char *str)
-{
- static int whatcode = ASCII;
- int oldcode = ASCII;
- int c, i;
- char *lang = NULL;
-
- c = '\1';
- i = 0;
-
- if (whatcode != EUCORSJIS && whatcode != ASCII) {
- oldcode = whatcode;
- whatcode = ASCII;
- }
-
- while ((whatcode == EUCORSJIS || whatcode == ASCII) && c != '\0') {
- if ((c = str[i++]) != '\0') {
- if (c == ESC) {
- c = str[i++];
- if (c == '$') {
- c = str[i++];
- if (c == 'B')
- whatcode = NEW;
- else if (c == '@')
- whatcode = OLD;
- } else if (c == '(') {
- c = str[i++];
- if (c == 'I')
- whatcode = ESCI;
- } else if (c == 'K')
- whatcode = NEC;
- } else if ((c >= 129 && c <= 141) || (c >= 143 && c <= 159))
- whatcode = SJIS;
- else if (c == SS2) {
- c = str[i++];
- if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160)
- || (c >= 224 && c <= 252))
- whatcode = SJIS;
- else if (c >= 161 && c <= 223)
- whatcode = EUCORSJIS;
- } else if (c >= 161 && c <= 223) {
- c = str[i++];
- if (c >= 240 && c <= 254)
- whatcode = EUC;
- else if (c >= 161 && c <= 223)
- whatcode = EUCORSJIS;
- else if (c >= 224 && c <= 239) {
- whatcode = EUCORSJIS;
- while (c >= 64 && whatcode == EUCORSJIS) {
- if (c >= 129) {
- if (c <= 141 || (c >= 143 && c <= 159))
- whatcode = SJIS;
- else if (c >= 253 && c <= 254)
- whatcode = EUC;
- }
- c = str[i++];
- }
- } else if (c <= 159)
- whatcode = SJIS;
- } else if (c >= 240 && c <= 254)
- whatcode = EUC;
- else if (c >= 224 && c <= 239) {
- c = str[i++];
- if ((c >= 64 && c <= 126) || (c >= 128 && c <= 160))
- whatcode = SJIS;
- else if (c >= 253 && c <= 254)
- whatcode = EUC;
- else if (c >= 161 && c <= 252)
- whatcode = EUCORSJIS;
- }
- }
- }
-
-#ifdef DEBUG
- if (whatcode == ASCII)
- gd_error_ex(GD_DEBUG, "Kanji code not included.");
- else if (whatcode == EUCORSJIS)
- gd_error_ex(GD_DEBUG, "Kanji code not detected.");
- else
- gd_error_ex(GD_DEBUG, "Kanji code detected at %d byte.", i);
-#endif
-
- if (whatcode == EUCORSJIS && oldcode != ASCII)
- whatcode = oldcode;
-
- if (whatcode == EUCORSJIS) {
- if (getenv ("LC_ALL"))
- lang = getenv ("LC_ALL");
- else if (getenv ("LC_CTYPE"))
- lang = getenv ("LC_CTYPE");
- else if (getenv ("LANG"))
- lang = getenv ("LANG");
-
- if (lang) {
- if (strcmp (lang, "ja_JP.SJIS") == 0 ||
-#ifdef hpux
- strcmp (lang, "japanese") == 0 ||
-#endif
- strcmp (lang, "ja_JP.mscode") == 0 ||
- strcmp (lang, "ja_JP.PCK") == 0)
- whatcode = SJIS;
- else if (strncmp (lang, "ja", 2) == 0)
-#ifdef SJISPRE
- whatcode = SJIS;
-#else
- whatcode = EUC;
-#endif
- }
- }
-
- if (whatcode == EUCORSJIS)
-#ifdef SJISPRE
- whatcode = SJIS;
-#else
- whatcode = EUC;
-#endif
-
- return whatcode;
-}
-
-/* SJIStoJIS() is sjis2jis() by Ken Lunde. */
-
-static void
-SJIStoJIS (int *p1, int *p2)
-{
- register unsigned char c1 = *p1;
- register unsigned char c2 = *p2;
- register int adjust = c2 < 159;
- register int rowOffset = c1 < 160 ? 112 : 176;
- register int cellOffset = adjust ? (31 + (c2 > 127)) : 126;
-
- *p1 = ((c1 - rowOffset) << 1) - adjust;
- *p2 -= cellOffset;
-}
-
-/* han2zen() was derived from han2zen() written by Ken Lunde. */
-
-#define IS_DAKU(c) ((c >= 182 && c <= 196) || (c >= 202 && c <= 206) || (c == 179))
-#define IS_HANDAKU(c) (c >= 202 && c <= 206)
-
-static void
-han2zen (int *p1, int *p2)
-{
- int c = *p1;
- int daku = FALSE;
- int handaku = FALSE;
- int mtable[][2] = {
- {129, 66},
- {129, 117},
- {129, 118},
- {129, 65},
- {129, 69},
- {131, 146},
- {131, 64},
- {131, 66},
- {131, 68},
- {131, 70},
- {131, 72},
- {131, 131},
- {131, 133},
- {131, 135},
- {131, 98},
- {129, 91},
- {131, 65},
- {131, 67},
- {131, 69},
- {131, 71},
- {131, 73},
- {131, 74},
- {131, 76},
- {131, 78},
- {131, 80},
- {131, 82},
- {131, 84},
- {131, 86},
- {131, 88},
- {131, 90},
- {131, 92},
- {131, 94},
- {131, 96},
- {131, 99},
- {131, 101},
- {131, 103},
- {131, 105},
- {131, 106},
- {131, 107},
- {131, 108},
- {131, 109},
- {131, 110},
- {131, 113},
- {131, 116},
- {131, 119},
- {131, 122},
- {131, 125},
- {131, 126},
- {131, 128},
- {131, 129},
- {131, 130},
- {131, 132},
- {131, 134},
- {131, 136},
- {131, 137},
- {131, 138},
- {131, 139},
- {131, 140},
- {131, 141},
- {131, 143},
- {131, 147},
- {129, 74},
- {129, 75}
- };
-
- if (*p2 == 222 && IS_DAKU (*p1))
- daku = TRUE; /* Daku-ten */
- else if (*p2 == 223 && IS_HANDAKU (*p1))
- handaku = TRUE; /* Han-daku-ten */
-
- *p1 = mtable[c - 161][0];
- *p2 = mtable[c - 161][1];
-
- if (daku) {
- if ((*p2 >= 74 && *p2 <= 103) || (*p2 >= 110 && *p2 <= 122))
- (*p2)++;
- else if (*p2 == 131 || *p2 == 69)
- *p2 = 148;
- } else if (handaku && *p2 >= 110 && *p2 <= 122)
- (*p2) += 2;
-}
-
-/* Recast strcpy to handle unsigned chars used below. */
-
-#define ustrcpy(A,B) (strcpy((char*)(A),(const char*)(B)))
-
-#define ustrncpy(A,B, maxsize) (strncpy((char*)(A),(const char*)(B), maxsize))
-
-static void
-do_convert (unsigned char **to_p, const unsigned char **from_p, const char *code)
-{
- unsigned char *to = *to_p;
- const unsigned char *from = *from_p;
-#ifdef HAVE_ICONV
- iconv_t cd;
- size_t from_len, to_len;
-
- if ((cd = iconv_open (EUCSTR, code)) == (iconv_t) - 1) {
- gd_error ("iconv_open() error");
-
- if (errno == EINVAL)
- gd_error ("invalid code specification: \"%s\" or \"%s\"", EUCSTR, code);
-
- ustrcpy (to, from);
- return;
- }
-
- from_len = strlen ((const char *)from) + 1;
- to_len = BUFSIZ;
-
- if ((int) (iconv (cd, (char **)from_p, &from_len, (char **)to_p, &to_len))
- == -1) {
-
- if (errno == EINVAL)
- gd_error ("invalid end of input string");
- else if (errno == EILSEQ)
- gd_error ("invalid code in input string");
- else if (errno == E2BIG)
- gd_error ("output buffer overflow at do_convert()");
- else
-
- gd_error ("something happen");
- ustrcpy (to, from);
- return;
- }
-
- if (iconv_close (cd) != 0) {
- gd_error ("iconv_close() error");
- }
-#else
- int p1, p2, i, j;
- int jisx0208 = FALSE;
- int hankaku = FALSE;
-
- j = 0;
- if (strcmp (code, NEWJISSTR) == 0 || strcmp (code, OLDJISSTR) == 0) {
- for (i = 0; from[i] != '\0' && j < BUFSIZ; i++) {
- if (from[i] == ESC) {
- i++;
- if (from[i] == '$') {
- jisx0208 = TRUE;
- hankaku = FALSE;
- i++;
- } else if (from[i] == '(') {
- jisx0208 = FALSE;
- i++;
- if (from[i] == 'I') /* Hankaku Kana */
- hankaku = TRUE;
- else
- hankaku = FALSE;
- }
- } else {
- if (jisx0208)
- to[j++] = from[i] + 128;
- else if (hankaku) {
- to[j++] = SS2;
- to[j++] = from[i] + 128;
- } else
- to[j++] = from[i];
- }
- }
- } else if (strcmp (code, SJISSTR) == 0) {
- for (i = 0; from[i] != '\0' && j < BUFSIZ; i++) {
- p1 = from[i];
- if (p1 < 127)
- to[j++] = p1;
- else if ((p1 >= 161) && (p1 <= 223)) {
- /* Hankaku Kana */
- to[j++] = SS2;
- to[j++] = p1;
- } else {
- p2 = from[++i];
- SJIStoJIS (&p1, &p2);
- to[j++] = p1 + 128;
- to[j++] = p2 + 128;
- }
- }
- } else {
- gd_error ("invalid code specification: \"%s\"", code);
- return;
- }
-
- if (j >= BUFSIZ) {
- gd_error ("output buffer overflow at do_convert()");
- ustrcpy (to, from);
- } else
- to[j] = '\0';
-#endif /* HAVE_ICONV */
-}
-
-static int
-do_check_and_conv (unsigned char *to, const unsigned char *from)
-{
- static unsigned char tmp[BUFSIZ];
- unsigned char *tmp_p = &tmp[0];
- int p1, p2, i, j;
- int kanji = TRUE;
- int copy_string = FALSE;
-
- switch (DetectKanjiCode (from)) {
- case NEW:
- gd_error_ex(GD_DEBUG, "Kanji code is New JIS.");
- do_convert (&tmp_p, &from, NEWJISSTR);
- break;
- case OLD:
- gd_error_ex(GD_DEBUG, "Kanji code is Old JIS.");
- do_convert (&tmp_p, &from, OLDJISSTR);
- break;
- case ESCI:
- gd_error_ex(GD_DEBUG, "This string includes Hankaku-Kana (jisx0201) escape sequence [ESC] + ( + I.");
- do_convert (&tmp_p, &from, NEWJISSTR);
- break;
- case NEC:
- gd_error_ex(GD_DEBUG, "Kanji code is NEC Kanji.");
- gd_error("cannot convert NEC Kanji.");
- copy_string = TRUE;
- kanji = FALSE;
- break;
- case EUC:
- gd_error_ex(GD_DEBUG, "Kanji code is EUC.");
- copy_string = TRUE;
- break;
- case SJIS:
- gd_error_ex(GD_DEBUG, "Kanji code is SJIS.");
- do_convert (&tmp_p, &from, SJISSTR);
- break;
- case EUCORSJIS:
- gd_error_ex(GD_DEBUG, "Kanji code is EUC or SJIS.");
- copy_string = TRUE;
- kanji = FALSE;
- break;
- case ASCII:
- gd_error_ex(GD_DEBUG, "This is ASCII string.");
- copy_string = TRUE;
- kanji = FALSE;
- break;
- default:
- gd_error_ex(GD_DEBUG, "This string includes unknown code.");
- copy_string = TRUE;
- kanji = FALSE;
- break;
- }
-
- if (copy_string) {
- ustrncpy (tmp, from, BUFSIZ);
- tmp[BUFSIZ-1] = '\0';
- }
-
- /* Hankaku Kana ---> Zenkaku Kana */
- if (kanji) {
- j = 0;
- for (i = 0; tmp[i] != '\0' && j < BUFSIZ; i++) {
- if (tmp[i] == SS2) {
- p1 = tmp[++i];
- if (tmp[i + 1] == SS2) {
- p2 = tmp[i + 2];
- if (p2 == 222 || p2 == 223)
- i += 2;
- else
- p2 = 0;
- } else
- p2 = 0;
- han2zen (&p1, &p2);
- SJIStoJIS (&p1, &p2);
- to[j++] = p1 + 128;
- to[j++] = p2 + 128;
- } else
- to[j++] = tmp[i];
- }
-
- if (j >= BUFSIZ) {
- gd_error("output buffer overflow at Hankaku --> Zenkaku");
- ustrcpy (to, tmp);
- } else
- to[j] = '\0';
- } else
- ustrcpy (to, tmp);
-
- return kanji;
-}
-
-int
-any2eucjp (unsigned char *dest, const unsigned char *src, unsigned int dest_max)
-{
- static unsigned char tmp_dest[BUFSIZ];
- int ret;
-
- if (strlen ((const char *) src) >= BUFSIZ) {
- gd_error("input string too large");
- return -1;
- }
- if (dest_max > BUFSIZ) {
- gd_error
- ("invalid maximum size of destination\nit should be less than %d.",
- BUFSIZ);
- return -1;
- }
- ret = do_check_and_conv (tmp_dest, src);
- if (strlen ((const char *) tmp_dest) >= dest_max) {
- gd_error("output buffer overflow");
- ustrcpy (dest, src);
- return -1;
- }
- ustrcpy (dest, tmp_dest);
- return ret;
-}
-
-#if 0
-unsigned int
-strwidth (unsigned char *s)
-{
- unsigned char *t;
- unsigned int i;
-
- t = (unsigned char *) gdMalloc (BUFSIZ);
- any2eucjp (t, s, BUFSIZ);
- i = strlen (t);
- gdFree (t);
- return i;
-}
-
-#ifdef DEBUG
-int
-main ()
-{
- unsigned char input[BUFSIZ];
- unsigned char *output;
- unsigned char *str;
- int c, i = 0;
-
- while ((c = fgetc (stdin)) != '\n' && i < BUFSIZ)
- input[i++] = c;
- input[i] = '\0';
-
- printf ("input : %d bytes\n", strlen ((const char *) input));
- printf ("output: %d bytes\n", strwidth (input));
-
- output = (unsigned char *) gdMalloc (BUFSIZ);
- any2eucjp (output, input, BUFSIZ);
- str = output;
- while (*str != '\0')
- putchar (*(str++));
- putchar ('\n');
- gdFree (output);
-
- return 0;
-}
-#endif
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/gdparttopng.c b/Build/source/libs/gd/libgd-src/src/gdparttopng.c
deleted file mode 100644
index 4bf2fc82778..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdparttopng.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h> /* For atoi */
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int x, y, w, h;
-
- if (argc != 7) {
- fprintf (stderr,
- "Usage: gdparttopng filename.gd filename.png x y w h\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
-
- x = atoi (argv[3]);
- y = atoi (argv[4]);
- w = atoi (argv[5]);
- h = atoi (argv[6]);
-
- printf ("Extracting from (%d, %d), size is %dx%d\n", x, y, w, h);
-
- im = gdImageCreateFromGd2Part (in, x, y, w, h);
- fclose (in);
- if (!im) {
- fprintf(stderr, "Input is not in GD2 format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdpp.cxx b/Build/source/libs/gd/libgd-src/src/gdpp.cxx
deleted file mode 100644
index 5e579da1fb3..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdpp.cxx
+++ /dev/null
@@ -1,261 +0,0 @@
-/* *****************************************************************************
-** Initial file written and documented by:
-** Kevin Shepherd <kshepherd@php.net> December 2007
-** of Scarlet Line http://www.scarletline.com/
-*******************************************************************************/
-/** \file gdpp.cxx
- \brief Implements the non-trivial methods of GD::Image.
-
- Implementation of the more complex methods defined
- in gdpp.h.
- Notably includes the methods which determine the image file
- format of a file before reading it into memory.
-*/
-#ifdef __cplusplus
-#include "gdpp.h"
-
-namespace GD
- {
- /**
- Load an image from a file, after attempting to
- determine it's image file format.
- Invoke CreateFrom with an already opened
- pointer to a file containing the desired image.
- CreateFrom does not close the file.
- \param[in] in An opened FILE * pointer.
- \return true for success, or false if unable to load the image (most often because the
- file is corrupt or does not contain a recognized image format).
- You can call Width() and Height() member functions of the image to determine its size.
- */
- bool Image::CreateFrom(FILE * in)
- {
- bool rtn;
- int c = fgetc(in);
- ungetc(c, in);
- switch (c)
- {
- /* PNG
- The first eight bytes of a PNG file always contain the following (decimal) values:
- 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
- == .PNG\r\n.\n
- */
- case 0x89: // PNG
- rtn = CreateFromPng(in);
- break;
-
- /* GIF
- 0x47 0x49 0x46
- */
- case 0x47: // GIF
- rtn = CreateFromGif(in);
- break;
- /* JPEG
- A JFIF-standard file will start with the four bytes (hex) FF D8 FF E0,
- followed by two variable bytes (often hex 00 10), followed by 'JFIF'.
- */
- case 0xFF: // JPEG
- rtn = CreateFromJpeg(in);
- break;
- /* WBMP
- WBMP Type 0: B/W, Uncompressed bitmap is the only gd supported type
- */
- case 0x00: // WBMP
- rtn = CreateFromWBMP(in);
- break;
- /* GD2
- 0x67 0x64 0x32 0x00
- == GD2\0
- Starts with gd2
- */
- case 0x67: // GD2
- rtn = CreateFromGd2(in);
- break;
- /* GD
- 0xFF 0xFE
- or
- 0xFF 0xFF
- Conflicts with Jpeg
- */
- /* XBM
- #define test_width 16
- #define test_height 7
- */
- case 0x23: // XBM
- rtn = CreateFromXbm(in);
- break;
- default:
- rtn = false;
- break;
- }
- return rtn;
- }
-
- /**
- Load an image from a standard input stream, after attempting to
- determine it's image file format.
- Invoke CreateFrom with an already opened stream
- containing the desired image.
- CreateFrom does not close the stream.
- \param[in] in An opened standard library input stream.
- \return true for success, or false if unable to load the image (most often because the
- file is corrupt or does not contain a recognized image format).
- You can call Width() and Height() member functions of the image to determine its size.
- Example usage, convert anything to gif:
- #include <fstream>
- #include <gdpp.h>
-
- std::ifstream in("image.xxx", std::ios_base::in | std::ios_base::binary );
- GD::Image im;
- im.CreateFrom(in);
- if (im.good())
- {
- std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
- im.Gif(out);
- }
- */
- bool Image::CreateFrom(std::istream & in)
- {
- bool rtn;
- switch (in.peek())
- {
- /* PNG
- The first eight bytes of a PNG file always contain the following (decimal) values:
- 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
- == .PNG\r\n.\n
- */
- case 0x89: // PNG
- rtn = CreateFromPng(in);
- break;
-
- /* GIF
- 0x47 0x49 0x46
- */
- case 0x47: // GIF
- rtn = CreateFromGif(in);
- break;
-
- /* JPEG
- A JFIF-standard file will start with the four bytes (hex) FF D8 FF E0,
- followed by two variable bytes (often hex 00 10), followed by 'JFIF'.
- */
- case 0xFF: // JPEG
- rtn = CreateFromJpeg(in);
- break;
-
- /* WBMP
- WBMP Type 0: B/W, Uncompressed bitmap is the only gd supported type
- */
- case 0x00: // WBMP
- rtn = CreateFromWBMP(in);
- break;
- /* GD2
- 0x67 0x64 0x32 0x00
- == GD2\0
- Starts with gd2
- */
- case 0x67: // GD2
- rtn = CreateFromGd2(in);
- break;
- /* GD
- 0xFF 0xFE
- or
- 0xFF 0xFF
- Conflicts with Jpeg
- */
- default:
- rtn = false;
- break;
- }
- return rtn;
- }
-
- /**
- Load an image from an in-RAM memory block, after attempting to
- determine it's image format.
- CreateFrom does not de-allocate the memory.
- \param[in] size The byte count of the memory block.
- \param[in] data A pointer to the memory block.
- \return true for success, or false if unable to load the image (most often because the
- formatting is corrupt or does not contain a recognized image format).
- You can call Width() and Height() member functions of the image to determine its size.
- */
- bool Image::CreateFrom(int size, void * data)
- {
- bool rtn;
- switch (((unsigned char * )data)[0])
- {
-
- /* PNG
- The first eight bytes of a PNG file always contain the following (decimal) values:
- 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
- == .PNG\r\n.\n
- */
- case 0x89: // PNG
- rtn = CreateFromPng(size, data);
- break;
-
- /* GIF
- 0x47 0x49 0x46
- */
- case 0x47: // GIF
- rtn = CreateFromGif(size, data);
- break;
-
- /* JPEG
- A JFIF-standard file will start with the four bytes (hex) FF D8 FF E0,
- followed by two variable bytes (often hex 00 10), followed by 'JFIF'.
- */
- case 0xFF: // JPEG
- rtn = CreateFromJpeg(size, data);
- break;
-
- /* WBMP
- WBMP Type 0: B/W, Uncompressed bitmap is the only gd supported type
- */
- case 0x00: // WBMP
- rtn = CreateFromWBMP(size, data);
- break;
- /* GD2
- 0x67 0x64 0x32 0x00
- == GD2\0
- Starts with gd2
- */
- case 0x67: // GD2
- rtn = CreateFromGd2(size, data);
- break;
- /* GD
- 0xFF 0xFE
- or
- 0xFF 0xFF
- Conflicts with Jpeg
- */
- default:
- rtn = false;
- break;
- }
- return rtn;
- }
- } // namespace GD
-/**
- Load an image from a standard input stream, regardless of it's image file format.
- You can call Width() and Height() member functions of the image to determine its size.
- Example usage, convert anything to gif:
- #include <fstream>
- #include <gdpp.h>
-
- std::ifstream in("image.xxx", std::ios_base::in | std::ios_base::binary );
- GD::Image im;
- in >> im;
- if (im.good())
- {
- std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
- im.Gif(out);
- }
-*/
-std::istream & operator>> (std::istream & in, GD::Image & img)
- {
- img.CreateFrom(in);
- return in;
- }
-
-#endif /* __cplusplus */
diff --git a/Build/source/libs/gd/libgd-src/src/gdpp.h b/Build/source/libs/gd/libgd-src/src/gdpp.h
deleted file mode 100644
index 3d58d899eed..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdpp.h
+++ /dev/null
@@ -1,1530 +0,0 @@
-/* *****************************************************************************
-** Initial file written and documented by:
-** Kevin Shepherd <kshepherd@php.net> December 2007
-** of Scarlet Line http://www.scarletline.com/
-** with contributions from Torben Nielsen.
-*******************************************************************************/
-/** \file gdpp.h
- \brief Object Oriented C++ wrappers around libgd functionality.
-
- Example usage, convert png to gif:
- #include <fstream>
- #include <gdpp.h>
-
- std::ifstream in("image.png", std::ios_base::in | std::ios_base::binary );
- GD::Image im(in, GD::Png_tag());
- if (im.good())
- {
- std::ofstream out("image.gif", std::ios_base::out | std::ios_base::binary );
- im.Gif(out);
- }
-*/
-#ifndef _gdpp_h
-#define _gdpp_h
-#ifdef __cplusplus
-
-#include "gd_io_stream.h"
-#include <string>
-
-/// namespace GD:: contains the C++ wrapper classes for libgd
-/** This namespace is primarily to avoid name clashes, and to
- contain all of the gd classes within one namespace.
- It is not recommended to use the "using namespace" directive with this namespace.
- Example usage:
- GD::Image im(64, 32, true); // Create a truecolor image 64 pixels wide by 32 pixels high
- GD::Point pt(10, 8); // The point at x=10, y=8.
- GD::Size sz(16, 8); // The size width=16, height=8.
- GD::TrueColor col(0xFF, 0, 0); // The colour red; R=255, G=0, B=0.
- im.Rectangle(pt, sz, col.Int()); // Draw a red rectangle with top left corner at pt, of size sz.
-*/
-namespace GD
-{
-/** This class GD::Point stores a point in two dimensions, somewhere
- on the plane of an image.
-*/
-class BGD_EXPORT_DATA_PROT Point
-{
-public:
- // Constructors
- Point(int x, int y)
- :_x(x), _y(y) {}
- Point(const Point & p)
- :_x(p._x), _y(p._y) {}
- Point()
- :_x(0), _y(0) {}
- Point & operator=(const Point & p) {
- _x = p._x;
- _y = p._y;
- return (* this);
- }
- // Accessors
- int X() const {
- return _x;
- }
- int Y() const {
- return _y;
- }
- // Updaters
- void X(int x) {
- _x = x;
- }
- void Y(int y) {
- _y = y;
- }
- void set(int x, int y) {
- _x = x;
- _y = y;
- }
- int & lhsX() {
- return _x;
- }
- int & lhsY() {
- return _y;
- }
-
- gdPointPtr as_gdPointPtr() {
- return (gdPointPtr) this;
- }
-protected:
- int _x, _y;
-};
-typedef Point * PointPtr;
-/** This class GD::Size stores length in two dimensions.
- Giving the size of an area as width and height.
-*/
-class BGD_EXPORT_DATA_PROT Size
-{
-public:
- // Constructors
- Size(int w, int h)
- :_w(w), _h(h) {}
- Size(const Size & p)
- :_w(p._w), _h(p._h) {}
- Size()
- :_w(0), _h(0) {}
- Size & operator=(const Size & p) {
- _w = p._w;
- _h = p._h;
- return (* this);
- }
- // Accessors
- int W() const {
- return _w;
- }
- int H() const {
- return _h;
- }
- // Updaters
- void W(int w) {
- _w = w;
- }
- void H(int h) {
- _h = h;
- }
- void set(int w, int h) {
- _w = w;
- _h = h;
- }
- int & lhsW() {
- return _w;
- }
- int & lhsH() {
- return _h;
- }
-protected:
- int _w, _h;
-};
-typedef Size * SizePtr;
-
-/** This class GD::TrueColor stores a colour as an RGBA quadruplet.
- It can also be read as an integer, and in other colour formats.
-*/
-class BGD_EXPORT_DATA_PROT TrueColor
-{
-public:
- union as_types {
- int as_int;
- struct uchars {
- unsigned char blue, green, red, alpha;
- } as_uchar;
- };
- TrueColor() {
- internal.as_int = 0;
- }
- TrueColor(int c) {
- internal.as_int = c;
- }
- TrueColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0) {
- internal.as_uchar.alpha = a;
- internal.as_uchar.red = r;
- internal.as_uchar.green = g;
- internal.as_uchar.blue = b;
- }
- // Accessors
- int Int() const {
- return internal.as_int;
- }
- unsigned char Red() const {
- return internal.as_uchar.red;
- }
- unsigned char Green() const {
- return internal.as_uchar.green;
- }
- unsigned char Blue() const {
- return internal.as_uchar.blue;
- }
- unsigned char Alpha() const {
- return internal.as_uchar.alpha;
- }
- // Updaters
- void set(int c) {
- internal.as_int = c;
- }
- void set(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 0) {
- internal.as_uchar.alpha = a;
- internal.as_uchar.red = r;
- internal.as_uchar.green = g;
- internal.as_uchar.blue = b;
- }
- void Red(unsigned char c) {
- internal.as_uchar.red = c;
- }
- void Green(unsigned char c) {
- internal.as_uchar.green = c;
- }
- void Blue(unsigned char c) {
- internal.as_uchar.blue = c;
- }
- void Alpha(unsigned char c) {
- internal.as_uchar.alpha = c;
- }
-protected:
- as_types internal;
-};
-/* The following tags are simply empty structures which are used
- to tell the compiler which constructor we want when we know
- the image file format.
-*/
-struct BGD_EXPORT_DATA_PROT Png_tag {};
-struct BGD_EXPORT_DATA_PROT Gif_tag {};
-struct BGD_EXPORT_DATA_PROT WBMP_tag {};
-struct BGD_EXPORT_DATA_PROT Jpeg_tag {};
-struct BGD_EXPORT_DATA_PROT Gd_tag {};
-struct BGD_EXPORT_DATA_PROT Gd2_tag {};
-struct BGD_EXPORT_DATA_PROT Xbm_tag {};
-
-/** This class GD::Image wraps all of the 'C' libgd functionality
- for the convenience of C++ users. An instance of this class
- corresponds to a single image.
-*/
-class BGD_EXPORT_DATA_PROT Image
-{
-public:
- /** Construct a null image
- */
- Image()
- :im(0)
- {}
- /** Construct a blank image, of the given size and colour format type.
- \param[in] sx Width of the image
- \param[in] sy Height of the image
- \param[in] istruecolor Create a true colour image, defaults to false, i.e. create an indexed palette image.
- */
- Image(int sx, int sy, bool istruecolor = false)
- :im(0) {
- if (istruecolor)
- CreateTrueColor(sx, sy);
- else
- Create(sx, sy);
- }
- /** Construct a blank image, of the given size and colour format type.
- \param[in] s Width and height of the image
- \param[in] istruecolor Create a true colour image, defaults to false, i.e. create an indexed palette image.
- */
- Image(const Size & s, bool istruecolor = false)
- :im(0) {
- if (istruecolor)
- CreateTrueColor(s);
- else
- Create(s);
- }
- /** Construct an instance of the GD::Image class, given the internal gdImage poimter.
- Note that gdImageDestroy will be called on the image pointer in the destructor.
- \param[in] i Pointer to the internal gdImage
- */
- Image(gdImagePtr i)
- :im(i) {}
- /** Copy constructor. Construct an instance of the GD::Image class,
- by making a copy of the GD::Image provided.
- \param[in] i Reference to the image to be copied
- */
- Image(const GD::Image & i)
- :im(0) {
- Copy(i);
- }
- /** Construct an image by reading from \p in. This constructor
- will first attempt to determine the file format.
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in)
- :im(0) {
- CreateFrom(in);
- }
- /** Construct an image by reading from \p in. This constructor
- will first attempt to determine the file format.
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in)
- :im(0) {
- CreateFrom(in);
- }
- /** Construct an image by reading from memory block \p data. This constructor
- will first attempt to determine the image formatting.
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data)
- :im(0) {
- CreateFrom(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in, Png_tag)
- :im(0) {
- CreateFromPng(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, Png_tag)
- :im(0) {
- CreateFromPng(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
- \param[in] in The io context from which to read the image data
- */
- Image(gdIOCtx * in, Png_tag)
- :im(0) {
- CreateFromPng(in);
- }
- /** Construct an image by reading from memory block \p data.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(sz, dat, GD::Png_tag()); // read a png file from dat
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data, Png_tag)
- :im(0) {
- CreateFromPng(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in, Gif_tag)
- :im(0) {
- CreateFromGif(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, Gif_tag)
- :im(0) {
- CreateFromGif(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gif_tag()); // read a gif file from input
- \param[in] in The io context from which to read the image data
- */
- Image(gdIOCtx * in, Gif_tag)
- :im(0) {
- CreateFromGif(in);
- }
- /** Construct an image by reading from memory block \p data.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(sz, dat, GD::Gif_tag()); // read a gif file from dat
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data, Gif_tag)
- :im(0) {
- CreateFromGif(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in, WBMP_tag)
- :im(0) {
- CreateFromWBMP(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, WBMP_tag)
- :im(0) {
- CreateFromWBMP(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::WBMP_tag()); // read a monchrome WBMP file from input
- \param[in] in The io context from which to read the image data
- */
- Image(gdIOCtx * in, WBMP_tag)
- :im(0) {
- CreateFromWBMP(in);
- }
- /** Construct an image by reading from memory block \p data.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(sz, dat, GD::WBMP_tag()); // read a monchrome WBMP file from dat
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data, WBMP_tag)
- :im(0) {
- CreateFromWBMP(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in, Jpeg_tag)
- :im(0) {
- CreateFromJpeg(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, Jpeg_tag)
- :im(0) {
- CreateFromJpeg(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Jpeg_tag()); // read a jpeg file from input
- \param[in] in The io context from which to read the image data
- */
- Image(gdIOCtx * in, Jpeg_tag)
- :im(0) {
- CreateFromJpeg(in);
- }
- /** Construct an image by reading from memory block \p data.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(sz, dat, GD::Jpeg_tag()); // read a jpeg file from dat
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data, Jpeg_tag)
- :im(0) {
- CreateFromJpeg(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in, Gd_tag)
- :im(0) {
- CreateFromGd(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, Gd_tag)
- :im(0) {
- CreateFromGd(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gd_tag()); // read a gd file from input
- \param[in] in The io context from which to read the image data
- */
- Image(gdIOCtx * in, Gd_tag)
- :im(0) {
- CreateFromGd(in);
- }
- /** Construct an image by reading from memory block \p data.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(sz, dat, GD::Gd_tag()); // read a gd file from dat
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data, Gd_tag)
- :im(0) {
- CreateFromGd(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gd2_tag()); // read a gd2 file from input
- \param[in] in The stream containing the image data
- */
- Image(std::istream & in, Gd2_tag)
- :im(0) {
- CreateFromGd2(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Png_tag()); // read a png file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, Gd2_tag)
- :im(0) {
- CreateFromGd2(in);
- }
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Gd2_tag()); // read a gd2 file from input
- \param[in] in The io context from which to read the image data
- */
- Image(gdIOCtx * in, Gd2_tag)
- :im(0) {
- CreateFromGd2(in);
- }
- /** Construct an image by reading from memory block \p data.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(sz, dat, GD::Gd2_tag()); // read a gd2 file from dat
- \param[in] size The byte count of the memory block
- \param[in] data Pointer to the memory block
- */
- Image(int size, void * data, Gd2_tag)
- :im(0) {
- CreateFromGd2(size, data);
- }
-
- /** Construct an image by reading from \p in.
- The tag is an empty struct which simply tells the compiler which image read function to use.
- e.g. GD::Image img(input, GD::Xbm_tag()); // read an xbm file from input
- \param[in] in An opened FILE * handle to a file containing the image data
- */
- Image(FILE * in, Xbm_tag)
- :im(0) {
- CreateFromXbm(in);
- }
-
- ~Image() {
- clear();
- }
-
- /** Assignment Operator. Make this a copy of the GD::Image provided.
- \param[in] src Reference to the image to be copied
- */
- GD::Image & operator=(const GD::Image & src) {
- Copy(src);
- return (* this);
- }
- /** Make this an exact copy of the GD::Image provided. Any existing iamge data is discarded.
- \param[in] src Reference to the image to be copied
- */
- void Copy(const GD::Image & src) {
- int w = src.Width(), h = src.Height();
- if (src.IsTrueColor())
- CreateTrueColor(w, h);
- else {
- Create(w, h);
- PaletteCopy(src);
- }
- Copy(src, 0, 0, 0, 0, w, h);
- }
- /** Check to see if this appears to be a valid image
- */
- bool good() const {
- return (im != 0);
- }
- // Creation:
- /**
- Create a palette-based image, with no more than 256 colors.
- \param sx Width of the desired image
- \param sy Height of the desired image
- \return true if it worked, else false
- */
- bool Create(int sx, int sy) {
- clear();
- return ((im = gdImageCreate(sx, sy)) != 0);
- }
- /**
- Create a truecolor image.
- \param sx Width of the desired image
- \param sy Height of the desired image
- \return true if it worked, else false
- */
- bool CreateTrueColor(int sx, int sy) {
- clear();
- return ((im = gdImageCreateTrueColor(sx, sy)) != 0);
- }
- /**
- Create a palette-based image, with no more than 256 colors.
- \param s Width and height of the desired image
- \return true if it worked, else false
- */
- bool Create(const Size & s) {
- return Create(s.W(), s.H());
- }
- /**
- Create a truecolor image.
- \param s Width and height of the desired image
- \return true if it worked, else false
- */
- bool CreateTrueColor(const Size & s) {
- return CreateTrueColor(s.W(), s.H());
- }
- // Create, determining the image format from the data
- /// Read an image from an open FILE * handle, after determining the image format
- bool CreateFrom(FILE * in);
- /// Read an image from an open standard library input stream, after determining the image format
- bool CreateFrom(std::istream & in);
- /// Read an image from a memory block, after determining the image format
- bool CreateFrom(int size, void * data);
-
- // Png
- bool CreateFromPng(FILE * in) {
- clear();
- return ((im = gdImageCreateFromPng(in)) != 0);
- }
- bool CreateFromPng(gdIOCtx * in) {
- clear();
- return ((im = gdImageCreateFromPngCtx(in)) != 0);
- }
- bool CreateFromPng(int size, void * data) {
- clear();
- return ((im = gdImageCreateFromPngPtr(size, data)) != 0);
- }
- bool CreateFromPng(std::istream & in) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromPngCtx( & _in_ctx)) != 0);
- }
-
- // Gif
- bool CreateFromGif(FILE * in) {
- clear();
- return ((im = gdImageCreateFromGif(in)) != 0);
- }
- bool CreateFromGif(gdIOCtx * in) {
- clear();
- return ((im = gdImageCreateFromGifCtx(in)) != 0);
- }
- bool CreateFromGif(int size, void * data) {
- clear();
- return ((im = gdImageCreateFromGifPtr(size, data)) != 0);
- }
- bool CreateFromGif(std::istream & in) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromGifCtx( & _in_ctx)) != 0);
- }
- // WBMP
- bool CreateFromWBMP(FILE * in) {
- clear();
- return ((im = gdImageCreateFromWBMP(in)) != 0);
- }
- bool CreateFromWBMP(gdIOCtx * in) {
- clear();
- return ((im = gdImageCreateFromWBMPCtx(in)) != 0);
- }
- bool CreateFromWBMP(int size, void * data) {
- clear();
- return ((im = gdImageCreateFromWBMPPtr(size, data)) != 0);
- }
- bool CreateFromWBMP(std::istream & in) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromWBMPCtx( & _in_ctx)) != 0);
- }
-
- // Jpeg
- /**
- Load a truecolor image from a JPEG format file.
- Invoke CreateFromJpeg with an already opened
- pointer to a file containing the desired image.
- CreateFromJpeg does not close the file.
- \return true for success, or false if unable to load the image (most often because
- the file is corrupt or does not contain a JPEG image).
- You can call Width() and Height() member functions of the image to determine its
- size. The returned image is always a truecolor image.
- */
- bool CreateFromJpeg(FILE * in) {
- clear();
- return ((im = gdImageCreateFromJpeg(in)) != 0);
- }
- /**
- Load a truecolor image from a JPEG format file.
- Invoke CreateFromJpeg with an already opened
- pointer to a file containing the desired image.
- CreateFromJpeg does not close the file.
- \return true for success, or false if unable to load the image (most often because the file is corrupt or does not contain a JPEG image).
- You can call Width() and Height() member functions of the image to determine its
- size. The returned image is always a truecolor image.
- */
- bool CreateFromJpeg(gdIOCtx * in) {
- clear();
- return ((im = gdImageCreateFromJpegCtx(in)) != 0);
- }
- /**
- Load a truecolor image from a JPEG format file.
- Invoke CreateFromJpeg with an already opened
- pointer to a file containing the desired image.
- CreateFromJpeg does not close the file.
- \return true for success, or false if unable to load the image (most often because the file is corrupt or does not contain a JPEG image).
- You can call Width() and Height() member functions of the image to determine its
- size. The returned image is always a truecolor image.
- */
- bool CreateFromJpeg(int size, void * data) {
- clear();
- return ((im = gdImageCreateFromJpegPtr(size, data)) != 0);
- }
- /**
- Load a truecolor image from a JPEG format file.
- Invoke CreateFromJpeg with an image file in memory.
- \return true for success, or false if unable to load the image (most often because the format is corrupt or does not contain a JPEG image).
- You can call Width() and Height() member functions of the image to determine its
- size. The returned image is always a truecolor image.
- */
- bool CreateFromJpeg(std::istream & in) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromJpegCtx( & _in_ctx)) != 0);
- }
-
- // Gd
- bool CreateFromGd(FILE * in) {
- clear();
- return ((im = gdImageCreateFromGd(in)) != 0);
- }
- bool CreateFromGd(gdIOCtx * in) {
- clear();
- return ((im = gdImageCreateFromGdCtx(in)) != 0);
- }
- bool CreateFromGd(int size, void * data) {
- clear();
- return ((im = gdImageCreateFromGdPtr(size, data)) != 0);
- }
- bool CreateFromGd(std::istream & in) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromGdCtx( & _in_ctx)) != 0);
- }
- // Gd2
- bool CreateFromGd2(FILE * in) {
- clear();
- return ((im = gdImageCreateFromGd2(in)) != 0);
- }
- bool CreateFromGd2(gdIOCtx * in) {
- clear();
- return ((im = gdImageCreateFromGd2Ctx(in)) != 0);
- }
- bool CreateFromGd2(int size, void * data) {
- clear();
- return ((im = gdImageCreateFromGd2Ptr(size, data)) != 0);
- }
- bool CreateFromGd2(std::istream & in) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromGd2Ctx( & _in_ctx)) != 0);
- }
- // Gd2 Part
- bool CreateFromGd2Part(FILE * in, int srcx, int srcy, int w, int h) {
- clear();
- return ((im = gdImageCreateFromGd2Part(in, srcx, srcy, w, h)) != 0);
- }
- bool CreateFromGd2Part(gdIOCtx * in, int srcx, int srcy, int w, int h) {
- clear();
- return ((im = gdImageCreateFromGd2PartCtx(in, srcx, srcy, w, h)) != 0);
- }
- bool CreateFromGd2Part(int size, void * data, int srcx, int srcy, int w, int h) {
- clear();
- return ((im = gdImageCreateFromGd2PartPtr(size, data, srcx, srcy, w, h)) != 0);
- }
- bool CreateFromGd2Part(std::istream & in, int srcx, int srcy, int w, int h) {
- clear();
- istreamIOCtx _in_ctx(in);
- return ((im = gdImageCreateFromGd2PartCtx( & _in_ctx, srcx, srcy, w, h)) != 0);
- }
- bool CreateFromGd2Part(FILE * in, const Point & src, const Size & s) {
- return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H());
- }
- bool CreateFromGd2Part(gdIOCtx * in, const Point & src, const Size & s) {
- return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H());
- }
- bool CreateFromGd2Part(int size, void * data, const Point & src, const Size & s) {
- return CreateFromGd2Part(size, data, src.X(), src.Y(), s.W(), s.H());
- }
- bool CreateFromGd2Part(std::istream & in, const Point & src, const Size & s) {
- return CreateFromGd2Part(in, src.X(), src.Y(), s.W(), s.H());
- }
- // Xbm
- bool CreateFromXbm(FILE * in) {
- clear();
- return ((im = gdImageCreateFromXbm(in)) != 0);
- }
- // Xpm
- bool CreateFromXpm(char * filename) {
- clear();
- return ((im = gdImageCreateFromXpm(filename)) != 0);
- }
- bool CreateFromXpm(std::string & filename) {
- return CreateFromXpm((char *)(filename.c_str()));
- }
-
- // Accessors, Updaters & Methods:
- void SetPixel(int x, int y, int color) {
- gdImageSetPixel(im, x, y, color);
- }
- void SetPixel(const Point & p, int color) {
- SetPixel(p.X(), p.Y(), color);
- }
- int GetPixel(int x, int y) const {
- return gdImageGetPixel(im, x, y);
- }
- int GetPixel(const Point & p) const {
- return GetPixel(p.X(), p.Y());
- }
- int GetTrueColorPixel(int x, int y) const {
- return gdImageGetTrueColorPixel(im, x, y);
- }
- int GetTrueColorPixel(const Point & p) const {
- return GetTrueColorPixel(p.X(), p.Y());
- }
-
- void SetPixel(int x, int y, TrueColor c) {
- SetPixel(x, y, c.Int());
- }
- void SetPixel(const Point & p, TrueColor c) {
- SetPixel(p.X(), p.Y(), c.Int());
- }
- void GetTrueColorPixel(TrueColor & c, int x, int y) const {
- c.set(GetTrueColorPixel(x, y));
- }
- void GetTrueColorPixel(TrueColor & c, const Point & p) const {
- c.set(GetTrueColorPixel(p.X(), p.Y()));
- }
-
- void AABlend() {
- gdImageAABlend(im);
- }
-
- void Line(int x1, int y1, int x2, int y2, int color) {
- gdImageLine(im, x1, y1, x2, y2, color);
- }
- void Line(const Point & p1, const Point & p2, int color) {
- Line(p1.X(), p1.Y(), p2.X(), p2.Y(), color);
- }
- void Rectangle(int x1, int y1, int x2, int y2, int color) {
- gdImageRectangle(im, x1, y1, x2, y2, color);
- }
- void Rectangle(const Point & p1, const Point & p2, int color) {
- Rectangle(p1.X(), p1.Y(), p2.X(), p2.Y(), color);
- }
- void Rectangle(const Point & p, const Size & s, int color) {
- Rectangle(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H(), color);
- }
- void FilledRectangle(int x1, int y1, int x2, int y2, int color) {
- gdImageFilledRectangle(im, x1, y1, x2, y2, color);
- }
- void FilledRectangle(const Point & p1, const Point & p2, int color) {
- FilledRectangle(p1.X(), p1.Y(), p2.X(), p2.Y(), color);
- }
- void FilledRectangle(const Point & p, const Size & s, int color) {
- FilledRectangle(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H(), color);
- }
-
- void SetClip(int x1, int y1, int x2, int y2) {
- gdImageSetClip(im, x1, y1, x2, y2);
- }
- void SetClip(const Point & p1, const Point & p2) {
- SetClip(p1.X(), p1.Y(), p2.X(), p2.Y());
- }
- void SetClip(const Point & p, const Size & s) {
- SetClip(p.X(), p.Y(), p.X() + s.W(), p.Y() + s.H());
- }
- void GetClip(int & x1, int & y1, int & x2, int & y2) const {
- gdImageGetClip(im, & x1, & y1, & x2, & y2);
- }
- void GetClip(Point & p1, Point & p2) const {
- GetClip(p1.lhsX(), p1.lhsY(), p2.lhsX(), p2.lhsY());
- }
- void GetClip(Point & p, Size & s) const {
- Point p2;
- GetClip(p.lhsX(), p.lhsY(), p2.lhsX(), p2.lhsY());
- s.set(p2.X() - p.X(), p2.Y() - p.Y());
- }
-
- bool BoundsSafe(int x, int y) const {
- return (gdImageBoundsSafe(im, x, y)?true:false);
- }
- bool BoundsSafe(const Point & p) const {
- return BoundsSafe(p.X(), p.Y());
- }
-
- void Char(gdFontPtr f, int x, int y, int c, int color) {
- gdImageChar(im, f, x, y, c, color);
- }
- void CharUp(gdFontPtr f, int x, int y, int c, int color) {
- gdImageCharUp(im, f, x, y, c, color);
- }
-
- void Char(gdFontPtr f, const Point & p, int c, int color) {
- Char(f, p.X(), p.Y(), c, color);
- }
- void CharUp(gdFontPtr f, const Point & p, int c, int color) {
- CharUp(f, p.X(), p.Y(), c, color);
- }
-
- void String(gdFontPtr f, int x, int y, unsigned char * s, int color) {
- gdImageString(im, f, x, y, (unsigned char *)s, color);
- }
- void StringUp(gdFontPtr f, int x, int y, unsigned char * s, int color) {
- gdImageStringUp(im, f, x, y, (unsigned char *)s, color);
- }
- void String(gdFontPtr f, int x, int y, unsigned short * s, int color) {
- gdImageString16(im, f, x, y, (unsigned short *)s, color);
- }
- void StringUp(gdFontPtr f, int x, int y, unsigned short * s, int color) {
- gdImageStringUp16(im, f, x, y, (unsigned short *)s, color);
- }
- void String(gdFontPtr f, int x, int y, char * s, int color) {
- gdImageString(im, f, x, y, (unsigned char *)s, color);
- }
- void StringUp(gdFontPtr f, int x, int y, char * s, int color) {
- gdImageStringUp(im, f, x, y, (unsigned char *)s, color);
- }
- void String(gdFontPtr f, int x, int y, const std::string & s, int color) {
- String(f, x, y, (char *)s.c_str(), color);
- }
- void StringUp(gdFontPtr f, int x, int y, const std::string & s, int color) {
- StringUp(f, x, y, (char *)s.c_str(), color);
- }
-
- void String(gdFontPtr f, const Point & p, unsigned char * s, int color) {
- String(f, p.X(), p.Y(), (unsigned char *)s, color);
- }
- void StringUp(gdFontPtr f, const Point & p, unsigned char * s, int color) {
- StringUp(f, p.X(), p.Y(), (unsigned char *)s, color);
- }
- void String(gdFontPtr f, const Point & p, unsigned short * s, int color) {
- String(f, p.X(), p.Y(), (unsigned short *)s, color);
- }
- void StringUp(gdFontPtr f, const Point & p, unsigned short * s, int color) {
- StringUp(f, p.X(), p.Y(), (unsigned short *)s, color);
- }
- void String(gdFontPtr f, const Point & p, char * s, int color) {
- String(f, p.X(), p.Y(), (unsigned char *)s, color);
- }
- void StringUp(gdFontPtr f, const Point & p, char * s, int color) {
- StringUp(f, p.X(), p.Y(), (unsigned char *)s, color);
- }
- void String(gdFontPtr f, const Point & p, const std::string & s, int color) {
- String(f, p, (char *)s.c_str(), color);
- }
- void StringUp(gdFontPtr f, const Point & p, const std::string & s, int color) {
- StringUp(f, p, (char *)s.c_str(), color);
- }
-
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- int x, int y, char * string) {
- return gdImageStringFT(im, brect, fg, fontlist, ptsize, angle, x, y, string);
- }
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- int x, int y, char * string, gdFTStringExtraPtr strex) {
- return gdImageStringFTEx(im, brect, fg, fontlist, ptsize, angle, x, y, string, strex);
- }
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- int x, int y, const std::string & string) {
- return StringFT(brect, fg, fontlist, ptsize, angle, x, y, (char *)string.c_str());
- }
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- int x, int y, const std::string & string, gdFTStringExtraPtr strex) {
- return StringFT(brect, fg, fontlist, ptsize, angle, x, y, (char *)string.c_str(), strex);
- }
-
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- const Point & p, char * string) {
- return StringFT(brect, fg, fontlist, ptsize, angle, p.X(), p.Y(), string);
- }
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- const Point & p, char * string, gdFTStringExtraPtr strex) {
- return StringFT(brect, fg, fontlist, ptsize, angle, p.X(), p.Y(), string, strex);
- }
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- const Point & p, const std::string & string) {
- return StringFT(brect, fg, fontlist, ptsize, angle, p, (char *)string.c_str());
- }
- char * StringFT(int * brect, int fg, char * fontlist, double ptsize, double angle,
- const Point & p, const std::string & string, gdFTStringExtraPtr strex) {
- return StringFT(brect, fg, fontlist, ptsize, angle, p, (char *)string.c_str(), strex);
- }
-
- void Polygon(gdPointPtr p, int n, int c) {
- gdImagePolygon(im, p, n, c);
- }
- void OpenPolygon(gdPointPtr p, int n, int c) {
- gdImageOpenPolygon(im, p, n, c);
- }
- void FilledPolygon(gdPointPtr p, int n, int c) {
- gdImageFilledPolygon(im, p, n, c);
- }
-
- void Polygon(PointPtr p, int n, int c) {
- Polygon(p->as_gdPointPtr(), n, c);
- }
- void OpenPolygon(PointPtr p, int n, int c) {
- OpenPolygon(p->as_gdPointPtr(), n, c);
- }
- void FilledPolygon(PointPtr p, int n, int c) {
- FilledPolygon(p->as_gdPointPtr(), n, c);
- }
-
- int ColorAllocate(int r, int g, int b) {
- return gdImageColorAllocate(im, r, g, b);
- }
- int ColorAllocate(int r, int g, int b, int a) {
- return gdImageColorAllocateAlpha(im, r, g, b, a);
- }
-
- int ColorClosest(int r, int g, int b) const {
- return gdImageColorClosest(im, r, g, b);
- }
- int ColorClosest(int r, int g, int b, int a) const {
- return gdImageColorClosestAlpha(im, r, g, b, a);
- }
- int ColorClosestHWB(int r, int g, int b) const {
- return gdImageColorClosestHWB(im, r, g, b);
- }
- int ColorExact(int r, int g, int b) const {
- return gdImageColorExact(im, r, g, b);
- }
- int ColorExact(int r, int g, int b, int a) const {
- return gdImageColorExactAlpha(im, r, g, b, a);
- }
- int ColorResolve(int r, int g, int b) {
- return gdImageColorResolve(im, r, g, b);
- }
- int ColorResolve(int r, int g, int b, int a) {
- return gdImageColorResolveAlpha(im, r, g, b, a);
- }
-
- void ColorDeallocate(int color) {
- gdImageColorDeallocate(im, color);
- }
-
- void TrueColorToPalette(int ditherFlag, int colorsWanted) {
- gdImageTrueColorToPalette(im, ditherFlag, colorsWanted);
- }
-
- void ColorTransparent(int color) {
- gdImageColorTransparent(im, color);
- }
-
- void PaletteCopy(gdImagePtr src) {
- gdImagePaletteCopy(im, src);
- }
- void PaletteCopy(const GD::Image & src) {
- PaletteCopy(src.im);
- }
-
- /**
- Write out this image in GIF file format to \p out.
- \param out A FILE * handle
- */
- void Gif(FILE * out) const {
- gdImageGif(im, out);
- }
- /**
- Write out this image in GIF file format to \p out.
- \param out A gdIOCtx * handle
- */
- void Gif(gdIOCtx * out) const {
- gdImageGifCtx(im, out);
- }
- /**
- Allocate sufficient memory, and write this image, in GIF file format, to that memory.
- \param size A pointer for the allocated memory
- \return A pointer to the allocated memory, containing the image GIF file formatted. Caller is responsible for freeing with gdFree().
- */
- void * Gif(int * size) const {
- return gdImageGifPtr(im, size);
- }
- /**
- Write out this image in GIF file format to \p out.
- \param out An output stream, already opened.
- */
- void Gif(std::ostream & out) const {
- ostreamIOCtx _out_ctx(out);
- gdImageGifCtx(im, & _out_ctx);
- }
-
- /**
- Write out this image in PNG file format to \p out.
- \param out A FILE * handle
- */
- void Png(FILE * out) const {
- gdImagePng(im, out);
- }
- /**
- Write out this image in PNG file format to \p out.
- \param out A gdIOCtx * handle
- */
- void Png(gdIOCtx * out) const {
- gdImagePngCtx(im, out);
- }
- /**
- Allocate sufficient memory, and write this image, in PNG file format, to that memory.
- \param size A pointer for the allocated memory
- \return A pointer to the allocated memory, containing the image PNG file formatted. Caller is responsible for freeing with gdFree().
- */
- void * Png(int * size) const {
- return gdImagePngPtr(im, size);
- }
- /**
- Write out this image in PNG file format to \p out.
- \param out An output stream, already opened.
- */
- void Png(std::ostream & out) const {
- ostreamIOCtx _out_ctx(out);
- gdImagePngCtx(im, & _out_ctx);
- }
- /**
- Write out this image in PNG file format to \p out.
- \param out A FILE * handle
- \param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
- */
- void Png(FILE * out, int level) const {
- gdImagePngEx(im, out, level);
- }
- /**
- Write out this image in PNG file format to \p out.
- \param out A gdIOCtx * handle
- \param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
- */
- void Png(gdIOCtx * out, int level) const {
- gdImagePngCtxEx(im, out, level);
- }
- /**
- Allocate sufficient memory, and write this image, in PNG file format, to that memory.
- \param size A pointer for the allocated memory
- \param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
- \return A pointer to the allocated memory, containing the image PNG file formatted. Caller is responsible for freeing with gdFree().
- */
- void * Png(int * size, int level) const {
- return gdImagePngPtrEx(im, size, level);
- }
- /**
- Write out this image in PNG file format to \p out.
- \param out An output stream, already opened.
- \param level The level of compression: 0 == "no compression", 1 == "compressed as quickly as possible" --> 9 == "compressed as much as possible", -1 == zlib default compression level
- */
- void Png(std::ostream & out, int level) const {
- ostreamIOCtx _out_ctx(out);
- gdImagePngCtxEx(im, & _out_ctx, level);
- }
-
- /**
- Write out this image in WBMP file format ( black and white only ) to \p out.
- \param fg The color index of the foreground. All other pixels considered background.
- \param out A FILE * handle
- */
- void WBMP(int fg, FILE * out) const {
- gdImageWBMP(im, fg, out);
- }
- /**
- Write out this image in WBMP file format ( black and white only ) to \p out.
- \param fg The color index of the foreground. All other pixels considered background.
- \param out A gdIOCtx * handle
- */
- void WBMP(int fg, gdIOCtx * out) const {
- gdImageWBMPCtx(im, fg, out);
- }
- /**
- Allocate sufficient memory, and write this image, in WBMP file format ( black and white only ), to that memory.
- \param size A pointer for the allocated memory
- \param fg The color index of the foreground. All other pixels considered background.
- \return A pointer to the allocated memory, containing the image WBMP file formatted. Caller is responsible for freeing with gdFree().
- */
- void * WBMP(int * size, int fg) const {
- return gdImageWBMPPtr(im, size, fg);
- }
- /**
- Write out this image in WBMP file format ( black and white only ) to \p out.
- \param fg The color index of the foreground. All other pixels considered background.
- \param out An output stream, already opened.
- */
- void WBMP(int fg, std::ostream & out) const {
- ostreamIOCtx _out_ctx(out);
- gdImageWBMPCtx(im, fg, & _out_ctx);
- }
-
- /**
- Write out this image in JPEG file format to \p out.
- \param out A FILE * handle
- \param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size. Default value is -1, indicating "use a sensible default value".
- */
- void Jpeg(FILE * out, int quality = -1) const {
- gdImageJpeg(im, out, quality);
- }
- /**
- Write out this image in JPEG file format to \p out.
- \param out A gdIOCtx * handle
- \param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size. Default value is -1, indicating "use a sensible default value".
- */
- void Jpeg(gdIOCtx * out, int quality = -1) const {
- gdImageJpegCtx(im, out, quality);
- }
- /**
- Allocate sufficient memory, and write this image, in JPEG file format, to that memory.
- \param size A pointer for the allocated memory
- \param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size. Default value is -1, indicating "use a sensible default value".
- \return A pointer to the allocated memory, containing the image JPEG file formatted. Caller is responsible for freeing with gdFree().
- */
- void * Jpeg(int * size, int quality = -1) const {
- return gdImageJpegPtr(im, size, quality);
- }
- /**
- Write out this image in JPEG file format to \p out.
- \param out An output stream, already opened.
- \param quality Should be a value in the range 0-95, higher numbers imply both higher quality and larger image size. Default value is -1, indicating "use a sensible default value".
- */
- void Jpeg(std::ostream & out, int quality = -1) const {
- ostreamIOCtx _out_ctx(out);
- gdImageJpegCtx(im, & _out_ctx, quality);
- }
-
- void GifAnimBegin(FILE * out, int GlobalCM, int Loops) const {
- gdImageGifAnimBegin(im, out, GlobalCM, Loops);
- }
- void GifAnimAdd(FILE * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const {
- gdImageGifAnimAdd(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
- }
- void GifAnimAdd(FILE * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const {
- GifAnimAdd(out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im);
- }
- inline static void GifAnimEnd(FILE * out) {
- gdImageGifAnimEnd(out);
- }
- void GifAnimBegin(gdIOCtx * out, int GlobalCM, int Loops) const {
- gdImageGifAnimBeginCtx(im, out, GlobalCM, Loops);
- }
- void GifAnimAdd(gdIOCtx * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const {
- gdImageGifAnimAddCtx(im, out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
- }
- void GifAnimAdd(gdIOCtx * out, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const {
- GifAnimAdd(out, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im);
- }
- inline static void GifAnimEnd(gdIOCtx * out) {
- gdImageGifAnimEndCtx(out);
- }
- void * GifAnimBegin(int * size, int GlobalCM, int Loops) const {
- return gdImageGifAnimBeginPtr(im, size, GlobalCM, Loops);
- }
- void * GifAnimAdd(int * size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, gdImagePtr previm) const {
- return gdImageGifAnimAddPtr(im, size, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm);
- }
- void * GifAnimAdd(int * size, int LocalCM, int LeftOfs, int TopOfs, int Delay, int Disposal, const GD::Image & previm) const {
- return GifAnimAdd(size, LocalCM, LeftOfs, TopOfs, Delay, Disposal, previm.im);
- }
- inline static void * GifAnimEnd(int * size) {
- return gdImageGifAnimEndPtr(size);
- }
-
- void Gd(FILE * out) const {
- gdImageGd(im, out);
- }
- void* Gd(int * size) const {
- return gdImageGdPtr(im, size);
- }
- void Gd2(FILE * out, int cs, int fmt) const {
- gdImageGd2(im, out, cs, fmt);
- }
- void* Gd2(int cs, int fmt, int * size) const {
- return gdImageGd2Ptr(im, cs, fmt, size);
- }
-
- void Ellipse(int cx, int cy, int w, int h, int color) {
- gdImageEllipse(im, cx, cy, w, h, color);
- }
- /**
- Draw a partial ellipse centered at the given point, with the specified width and height in pixels.
- */
- void FilledArc(int cx, int cy, int w, int h, int s, int e, int color, int style) {
- gdImageFilledArc(im, cx, cy, w, h, s, e, color, style);
- }
- void Arc(int cx, int cy, int w, int h, int s, int e, int color) {
- gdImageArc(im, cx, cy, w, h, s, e, color);
- }
- void FilledEllipse(int cx, int cy, int w, int h, int color) {
- gdImageFilledEllipse(im, cx, cy, w, h, color);
- }
- void FillToBorder(int x, int y, int border, int color) {
- gdImageFillToBorder(im, x, y, border, color);
- }
- void Fill(int x, int y, int color) {
- gdImageFill(im, x, y, color);
- }
-
- void Ellipse(const Point & c, const Size & s, int color) {
- Ellipse(c.X(), c.Y(), s.W(), s.H(), color);
- }
- void FilledArc(const Point & c, const Size & si, int s, int e, int color, int style) {
- FilledArc(c.X(), c.Y(), si.W(), si.H(), s, e, color, style);
- }
- void Arc(const Point & c, const Size & si, int s, int e, int color) {
- Arc(c.X(), c.Y(), si.W(), si.H(), s, e, color);
- }
- void FilledEllipse(const Point & c, const Size & s, int color) {
- FilledEllipse(c.X(), c.Y(), s.W(), s.H(), color);
- }
- void FillToBorder(const Point & p, int border, int color) {
- FillToBorder(p.X(), p.Y(), border, color);
- }
- void Fill(const Point & p, int color) {
- Fill(p.X(), p.Y(), color);
- }
-
- void Copy(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h) {
- gdImageCopy(im, src, dstX, dstY, srcX, srcY, w, h);
- }
- void CopyMerge(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
- gdImageCopyMerge(im, src, dstX, dstY, srcX, srcY, w, h, pct);
- }
- void CopyMergeGray(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
- gdImageCopyMergeGray(im, src, dstX, dstY, srcX, srcY, w, h, pct);
- }
-
- void CopyResized(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
- gdImageCopyResized(im, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- }
- void CopyResampled(const gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
- gdImageCopyResampled(im, src, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- }
- void CopyRotated(const gdImagePtr src, double dstX, double dstY, int srcX, int srcY, int srcWidth, int srcHeight, int angle) {
- gdImageCopyRotated(im, src, dstX, dstY, srcX, srcY, srcWidth, srcHeight, angle);
- }
-
- Image * CopyGaussianBlurred(int radius, double sigma) {
- return new Image(gdImageCopyGaussianBlurred(im, radius, sigma));
- }
-
- void Copy(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s) {
- Copy(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H());
- }
- void CopyMerge(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
- CopyMerge(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
- }
- void CopyMergeGray(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
- CopyMergeGray(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
- }
-
- void CopyResized(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
- CopyResized(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
- }
- void CopyResampled(const gdImagePtr src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
- CopyResampled(src, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
- }
- void CopyRotated(const gdImagePtr src, double dstX, double dstY, const Point & srcP, const Size & srcS, int angle) {
- CopyRotated(src, dstX, dstY, srcP.X(), srcP.Y(), srcS.W(), srcS.H(), angle);
- }
-
- void Copy(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h) {
- Copy(src.im, dstX, dstY, srcX, srcY, w, h);
- }
- void CopyMerge(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
- CopyMerge(src.im, dstX, dstY, srcX, srcY, w, h, pct);
- }
- void CopyMergeGray(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct) {
- CopyMergeGray(src.im, dstX, dstY, srcX, srcY, w, h, pct);
- }
-
- void CopyResized(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
- CopyResized(src.im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- }
- void CopyResampled(const GD::Image & src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH) {
- CopyResampled(src.im, dstX, dstY, srcX, srcY, dstW, dstH, srcW, srcH);
- }
- void CopyRotated(const GD::Image & src, double dstX, double dstY, int srcX, int srcY, int srcWidth, int srcHeight, int angle) {
- CopyRotated(src.im, dstX, dstY, srcX, srcY, srcWidth, srcHeight, angle);
- }
-
- void Copy(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s) {
- Copy(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H());
- }
- void CopyMerge(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
- CopyMerge(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
- }
- void CopyMergeGray(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & s, int pct) {
- CopyMergeGray(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), s.W(), s.H(), pct);
- }
-
- void CopyResized(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
- CopyResized(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
- }
- void CopyResampled(const GD::Image & src, const Point & dstP, const Point & srcP, const Size & dstS, const Size & srcS) {
- CopyResampled(src.im, dstP.X(), dstP.Y(), srcP.X(), srcP.Y(), dstS.W(), dstS.H(), srcS.W(), srcS.H());
- }
- void CopyRotated(const GD::Image & src, double dstX, double dstY, const Point & srcP, const Size & srcS, int angle) {
- CopyRotated(src.im, dstX, dstY, srcP.X(), srcP.Y(), srcS.W(), srcS.H(), angle);
- }
-
- Image * Clone() {
- return new Image(gdImageClone(im));
- }
-
- void SetBrush(gdImagePtr brush) {
- gdImageSetBrush(im, brush);
- }
- void SetBrush(const GD::Image & brush) {
- SetBrush(brush.im);
- }
- void SetTile(gdImagePtr tile) {
- gdImageSetTile(im, tile);
- }
- void SetTile(const GD::Image & tile) {
- SetTile(tile.im);
- }
- void SetAntiAliased(int c) {
- gdImageSetAntiAliased(im, c);
- }
- void SetAntiAliasedDontBlend(int c, int dont_blend) {
- gdImageSetAntiAliasedDontBlend(im, c, dont_blend);
- }
- void SetStyle(int * style, int noOfPixels) {
- gdImageSetStyle(im, style, noOfPixels);
- }
- void SetThickness(int thickness) {
- gdImageSetThickness(im, thickness);
- }
- void SetResolution(int res_x, int res_y) {
- gdImageSetResolution(im, res_x, res_y);
- }
- void SetInterpolationMethod(gdInterpolationMethod interpolation_method) {
- gdImageSetInterpolationMethod(im, interpolation_method);
- }
-
- Image * RotateInterpolated(const float angle, int bgcolor) {
- return new Image(gdImageRotateInterpolated(im, angle, bgcolor));
- }
-
- void Interlace(bool interlaceArg) {
- gdImageInterlace(im, interlaceArg?1:0);
- }
- void AlphaBlending(bool alphaBlendingArg) {
- gdImageAlphaBlending(im, alphaBlendingArg?1:0);
- }
- void SaveAlpha(bool saveAlphaArg) {
- gdImageSaveAlpha(im, saveAlphaArg?1:0);
- }
-
- int ColorReplace(int src, int dst) {
- return gdImageColorReplace(im, src, dst);
- }
- int ColorReplaceArray(int len, int * src, int * dst) {
- return gdImageColorReplaceArray(im, len, src, dst);
- }
- int ColorReplaceCallback(gdCallbackImageColor callback) {
- return gdImageColorReplaceCallback(im, callback);
- }
- int ColorReplaceThreshold(int src, int dst, float threshold) {
- return gdImageColorReplaceThreshold(im, src, dst, threshold);
- }
-
- bool Pixelate(int block_size, gdPixelateMode mode) {
- return gdImagePixelate(im, block_size, mode) == 0 ? false : true;
- }
-
- Image * Scale(int new_width, int new_height) {
- return new Image(gdImageScale(im, new_width, new_height));
- }
-
- bool IsTrueColor() const {
- return (gdImageTrueColor(im)?true:false);
- }
- int SX() const {
- return gdImageSX(im);
- }
- int SY() const {
- return gdImageSY(im);
- }
- int Width() const {
- return SX();
- }
- int Height() const {
- return SY();
- }
- int ResX() const {
- return gdImageResolutionX(im);
- }
- int ResY() const {
- return gdImageResolutionY(im);
- }
- void GetSize(Size & s) const {
- s.set(SX(), SY());
- }
- int ColorsTotal() const {
- return gdImageColorsTotal(im);
- }
- int Red(int color) const {
- return gdImageRed(im, color);
- }
- int Green(int color) const {
- return gdImageGreen(im, color);
- }
- int Blue(int color) const {
- return gdImageBlue(im, color);
- }
- int Alpha(int color) const {
- return gdImageAlpha(im, color);
- }
- int GetTransparent() const {
- return gdImageGetTransparent(im);
- }
- int GetInterlaced() const {
- return gdImageGetInterlaced(im);
- }
- int PalettePixel(int x, int y) const {
- return gdImagePalettePixel(im, x, y);
- }
- int TrueColorPixel(int x, int y) const {
- return gdImageTrueColorPixel(im, x, y);
- }
-
- const gdImagePtr GetPtr() const {
- return im;
- }
-
-protected:
- /// Free the internal image pointer
- void clear() {
- if (im)
- gdImageDestroy(im);
- im = 0;
- }
- gdImagePtr im;
-};
-} // namespace GD
-/// Read in an image from a standard library input stream
-std::istream & operator>> (std::istream & in, GD::Image & img);
-
-#endif /* __cplusplus */
-#endif /* _gdpp_h */
diff --git a/Build/source/libs/gd/libgd-src/src/gdtables.c b/Build/source/libs/gd/libgd-src/src/gdtables.c
deleted file mode 100644
index d368b8d9b78..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdtables.c
+++ /dev/null
@@ -1,725 +0,0 @@
-const int gdCosT[] = {
- 1024,
- 1023,
- 1023,
- 1022,
- 1021,
- 1020,
- 1018,
- 1016,
- 1014,
- 1011,
- 1008,
- 1005,
- 1001,
- 997,
- 993,
- 989,
- 984,
- 979,
- 973,
- 968,
- 962,
- 955,
- 949,
- 942,
- 935,
- 928,
- 920,
- 912,
- 904,
- 895,
- 886,
- 877,
- 868,
- 858,
- 848,
- 838,
- 828,
- 817,
- 806,
- 795,
- 784,
- 772,
- 760,
- 748,
- 736,
- 724,
- 711,
- 698,
- 685,
- 671,
- 658,
- 644,
- 630,
- 616,
- 601,
- 587,
- 572,
- 557,
- 542,
- 527,
- 512,
- 496,
- 480,
- 464,
- 448,
- 432,
- 416,
- 400,
- 383,
- 366,
- 350,
- 333,
- 316,
- 299,
- 282,
- 265,
- 247,
- 230,
- 212,
- 195,
- 177,
- 160,
- 142,
- 124,
- 107,
- 89,
- 71,
- 53,
- 35,
- 17,
- 0,
- -17,
- -35,
- -53,
- -71,
- -89,
- -107,
- -124,
- -142,
- -160,
- -177,
- -195,
- -212,
- -230,
- -247,
- -265,
- -282,
- -299,
- -316,
- -333,
- -350,
- -366,
- -383,
- -400,
- -416,
- -432,
- -448,
- -464,
- -480,
- -496,
- -512,
- -527,
- -542,
- -557,
- -572,
- -587,
- -601,
- -616,
- -630,
- -644,
- -658,
- -671,
- -685,
- -698,
- -711,
- -724,
- -736,
- -748,
- -760,
- -772,
- -784,
- -795,
- -806,
- -817,
- -828,
- -838,
- -848,
- -858,
- -868,
- -877,
- -886,
- -895,
- -904,
- -912,
- -920,
- -928,
- -935,
- -942,
- -949,
- -955,
- -962,
- -968,
- -973,
- -979,
- -984,
- -989,
- -993,
- -997,
- -1001,
- -1005,
- -1008,
- -1011,
- -1014,
- -1016,
- -1018,
- -1020,
- -1021,
- -1022,
- -1023,
- -1023,
- -1024,
- -1023,
- -1023,
- -1022,
- -1021,
- -1020,
- -1018,
- -1016,
- -1014,
- -1011,
- -1008,
- -1005,
- -1001,
- -997,
- -993,
- -989,
- -984,
- -979,
- -973,
- -968,
- -962,
- -955,
- -949,
- -942,
- -935,
- -928,
- -920,
- -912,
- -904,
- -895,
- -886,
- -877,
- -868,
- -858,
- -848,
- -838,
- -828,
- -817,
- -806,
- -795,
- -784,
- -772,
- -760,
- -748,
- -736,
- -724,
- -711,
- -698,
- -685,
- -671,
- -658,
- -644,
- -630,
- -616,
- -601,
- -587,
- -572,
- -557,
- -542,
- -527,
- -512,
- -496,
- -480,
- -464,
- -448,
- -432,
- -416,
- -400,
- -383,
- -366,
- -350,
- -333,
- -316,
- -299,
- -282,
- -265,
- -247,
- -230,
- -212,
- -195,
- -177,
- -160,
- -142,
- -124,
- -107,
- -89,
- -71,
- -53,
- -35,
- -17,
- 0,
- 17,
- 35,
- 53,
- 71,
- 89,
- 107,
- 124,
- 142,
- 160,
- 177,
- 195,
- 212,
- 230,
- 247,
- 265,
- 282,
- 299,
- 316,
- 333,
- 350,
- 366,
- 383,
- 400,
- 416,
- 432,
- 448,
- 464,
- 480,
- 496,
- 512,
- 527,
- 542,
- 557,
- 572,
- 587,
- 601,
- 616,
- 630,
- 644,
- 658,
- 671,
- 685,
- 698,
- 711,
- 724,
- 736,
- 748,
- 760,
- 772,
- 784,
- 795,
- 806,
- 817,
- 828,
- 838,
- 848,
- 858,
- 868,
- 877,
- 886,
- 895,
- 904,
- 912,
- 920,
- 928,
- 935,
- 942,
- 949,
- 955,
- 962,
- 968,
- 973,
- 979,
- 984,
- 989,
- 993,
- 997,
- 1001,
- 1005,
- 1008,
- 1011,
- 1014,
- 1016,
- 1018,
- 1020,
- 1021,
- 1022,
- 1023,
- 1023
-};
-
-const int gdSinT[] = {
- 0,
- 17,
- 35,
- 53,
- 71,
- 89,
- 107,
- 124,
- 142,
- 160,
- 177,
- 195,
- 212,
- 230,
- 247,
- 265,
- 282,
- 299,
- 316,
- 333,
- 350,
- 366,
- 383,
- 400,
- 416,
- 432,
- 448,
- 464,
- 480,
- 496,
- 512,
- 527,
- 542,
- 557,
- 572,
- 587,
- 601,
- 616,
- 630,
- 644,
- 658,
- 671,
- 685,
- 698,
- 711,
- 724,
- 736,
- 748,
- 760,
- 772,
- 784,
- 795,
- 806,
- 817,
- 828,
- 838,
- 848,
- 858,
- 868,
- 877,
- 886,
- 895,
- 904,
- 912,
- 920,
- 928,
- 935,
- 942,
- 949,
- 955,
- 962,
- 968,
- 973,
- 979,
- 984,
- 989,
- 993,
- 997,
- 1001,
- 1005,
- 1008,
- 1011,
- 1014,
- 1016,
- 1018,
- 1020,
- 1021,
- 1022,
- 1023,
- 1023,
- 1024,
- 1023,
- 1023,
- 1022,
- 1021,
- 1020,
- 1018,
- 1016,
- 1014,
- 1011,
- 1008,
- 1005,
- 1001,
- 997,
- 993,
- 989,
- 984,
- 979,
- 973,
- 968,
- 962,
- 955,
- 949,
- 942,
- 935,
- 928,
- 920,
- 912,
- 904,
- 895,
- 886,
- 877,
- 868,
- 858,
- 848,
- 838,
- 828,
- 817,
- 806,
- 795,
- 784,
- 772,
- 760,
- 748,
- 736,
- 724,
- 711,
- 698,
- 685,
- 671,
- 658,
- 644,
- 630,
- 616,
- 601,
- 587,
- 572,
- 557,
- 542,
- 527,
- 512,
- 496,
- 480,
- 464,
- 448,
- 432,
- 416,
- 400,
- 383,
- 366,
- 350,
- 333,
- 316,
- 299,
- 282,
- 265,
- 247,
- 230,
- 212,
- 195,
- 177,
- 160,
- 142,
- 124,
- 107,
- 89,
- 71,
- 53,
- 35,
- 17,
- 0,
- -17,
- -35,
- -53,
- -71,
- -89,
- -107,
- -124,
- -142,
- -160,
- -177,
- -195,
- -212,
- -230,
- -247,
- -265,
- -282,
- -299,
- -316,
- -333,
- -350,
- -366,
- -383,
- -400,
- -416,
- -432,
- -448,
- -464,
- -480,
- -496,
- -512,
- -527,
- -542,
- -557,
- -572,
- -587,
- -601,
- -616,
- -630,
- -644,
- -658,
- -671,
- -685,
- -698,
- -711,
- -724,
- -736,
- -748,
- -760,
- -772,
- -784,
- -795,
- -806,
- -817,
- -828,
- -838,
- -848,
- -858,
- -868,
- -877,
- -886,
- -895,
- -904,
- -912,
- -920,
- -928,
- -935,
- -942,
- -949,
- -955,
- -962,
- -968,
- -973,
- -979,
- -984,
- -989,
- -993,
- -997,
- -1001,
- -1005,
- -1008,
- -1011,
- -1014,
- -1016,
- -1018,
- -1020,
- -1021,
- -1022,
- -1023,
- -1023,
- -1024,
- -1023,
- -1023,
- -1022,
- -1021,
- -1020,
- -1018,
- -1016,
- -1014,
- -1011,
- -1008,
- -1005,
- -1001,
- -997,
- -993,
- -989,
- -984,
- -979,
- -973,
- -968,
- -962,
- -955,
- -949,
- -942,
- -935,
- -928,
- -920,
- -912,
- -904,
- -895,
- -886,
- -877,
- -868,
- -858,
- -848,
- -838,
- -828,
- -817,
- -806,
- -795,
- -784,
- -772,
- -760,
- -748,
- -736,
- -724,
- -711,
- -698,
- -685,
- -671,
- -658,
- -644,
- -630,
- -616,
- -601,
- -587,
- -572,
- -557,
- -542,
- -527,
- -512,
- -496,
- -480,
- -464,
- -448,
- -432,
- -416,
- -400,
- -383,
- -366,
- -350,
- -333,
- -316,
- -299,
- -282,
- -265,
- -247,
- -230,
- -212,
- -195,
- -177,
- -160,
- -142,
- -124,
- -107,
- -89,
- -71,
- -53,
- -35,
- -17
-};
diff --git a/Build/source/libs/gd/libgd-src/src/gdtest.c b/Build/source/libs/gd/libgd-src/src/gdtest.c
deleted file mode 100644
index cf0eff5477c..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdtest.c
+++ /dev/null
@@ -1,457 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef _WIN32
-#include <process.h>
-int
-unlink (const char *filename)
-{
- return _unlink (filename);
-}
-#else
-#include <unistd.h> /* for getpid(), unlink() */
-#endif
-#include "gd.h"
-
-void CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2);
-
-static int freadWrapper (void *context, char *buf, int len);
-static int fwriteWrapper (void *context, const char *buffer, int len);
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im, ref, im2, im3;
- FILE *in, *out;
- void *iptr;
- int sz;
- char of[256];
- int colRed, colBlu;
- gdSource imgsrc;
- gdSink imgsnk;
- int foreground;
- int i;
- if (argc != 2) {
- fprintf(stderr, "Usage: gdtest filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
-
- rewind (in);
- ref = gdImageCreateFromPng (in);
-
- fclose (in);
- if (!im) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
- if (!ref) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
-
- printf ("Reference File has %d Palette entries\n", ref->colorsTotal);
-
- CompareImages ("Initial Versions", ref, im);
-
-
- /* */
- /* Send to PNG File then Ptr */
- /* */
-#ifdef VMS
- sprintf (of, "%s-png", argv[1]);
-#else
- sprintf (of, "%s.png", argv[1]);
-#endif
- out = fopen (of, "wb");
- if (!out) {
- fprintf(stderr, "PNG Output file does not exist!\n");
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in) {
- fprintf(stderr, "PNG Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
-
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
-
- CompareImages ("GD->PNG File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- /* 2.0.21: use the new From*Ptr functions */
- iptr = gdImagePngPtr (im, &sz);
- im2 = gdImageCreateFromPngPtr (sz, iptr);
- gdFree (iptr);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromPngPtr failed.\n");
- exit (1);
- }
- CompareImages ("GD->PNG ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
-
- /* */
- /* Send to GD2 File then Ptr */
- /* */
-#ifdef VMS
- sprintf (of, "%s-gd2", argv[1]);
-#else
- sprintf (of, "%s.gd2", argv[1]);
-#endif
- out = fopen (of, "wb");
- if (!out) {
- fprintf(stderr, "GD2 Output file does not exist!\n");
- exit (1);
- }
- gdImageGd2 (im, out, 128, 2);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in) {
- fprintf(stderr, "GD2 Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromGd2 (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromGd2 failed.\n");
- exit (1);
- }
- CompareImages ("GD->GD2 File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImageGd2Ptr (im, 128, 2, &sz);
- /*printf("Got ptr %d (size %d)\n",iptr, sz); */
- im2 = gdImageCreateFromGd2Ptr (sz, iptr);
- gdFree (iptr);
- /*printf("Got img2 %d\n",im2); */
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromGd2Ptr failed.\n");
- exit (1);
- }
- CompareImages ("GD->GD2 ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
-
- /* */
- /* Send to GD File then Ptr */
- /* */
-#ifdef VMS
- sprintf (of, "%s-gd", argv[1]);
-#else
- sprintf (of, "%s.gd", argv[1]);
-#endif
- out = fopen (of, "wb");
- if (!out) {
- fprintf(stderr, "GD Output file does not exist!\n");
- exit (1);
- }
- gdImageGd (im, out);
- fclose (out);
-
- in = fopen (of, "rb");
- if (!in) {
- fprintf(stderr, "GD Output file does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromGd (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromGd failed.\n");
- exit (1);
- }
- CompareImages ("GD->GD File->GD", ref, im2);
-
- unlink (of);
- gdImageDestroy (im2);
-
- iptr = gdImageGdPtr (im, &sz);
- /*printf("Got ptr %d (size %d)\n",iptr, sz); */
- im2 = gdImageCreateFromGdPtr (sz, iptr);
- gdFree (iptr);
- /*printf("Got img2 %d\n",im2); */
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromGdPtr failed.\n");
- exit (1);
- }
-
- CompareImages ("GD->GD ptr->GD", ref, im2);
-
- gdImageDestroy (im2);
-
- /*
- * Test gdImageCreateFromPngSource'
- */
-
- in = fopen (argv[1], "rb");
-
- imgsrc.source = freadWrapper;
- imgsrc.context = in;
- im2 = gdImageCreateFromPngSource (&imgsrc);
- fclose (in);
-
- if (im2 == NULL) {
- printf
- ("GD Source: ERROR Null returned by gdImageCreateFromPngSource\n");
- } else {
- CompareImages ("GD Source", ref, im2);
- gdImageDestroy (im2);
- };
-
-
- /*
- * Test gdImagePngToSink'
- */
-#ifdef VMS
- sprintf (of, "%s-snk", argv[1]);
-#else
- sprintf (of, "%s.snk", argv[1]);
-#endif
- out = fopen (of, "wb");
- if (!out) {
- fprintf (stderr,
- "GD Sink: ERROR - GD Sink Output file does not exist!\n");
- exit (1);
- }
- imgsnk.sink = fwriteWrapper;
- imgsnk.context = out;
- gdImagePngToSink (im, &imgsnk);
- fclose (out);
- in = fopen (of, "rb");
- if (!in) {
- fprintf (stderr,
- "GD Sink: ERROR - GD Sink Output file does not exist!\n");
- } else {
- im2 = gdImageCreateFromPng (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
- CompareImages ("GD Sink", ref, im2);
- gdImageDestroy (im2);
- };
-
- unlink (of);
-
- /* */
- /* Test Extraction */
- /* */
- in = fopen ("test/gdtest_200_300_150_100.png", "rb");
- if (!in) {
- fprintf(stderr, "gdtest_200_300_150_100.png does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
-
- in = fopen ("test/gdtest.gd2", "rb");
- if (!in) {
- fprintf(stderr, "gdtest.gd2 does not exist!\n");
- exit (1);
- }
- im3 = gdImageCreateFromGd2Part (in, 200, 300, 150, 100);
- fclose (in);
- if (!im3) {
- fprintf(stderr, "gdImageCreateFromGd2Part failed.\n");
- exit (1);
- }
- CompareImages ("GD2Part (gdtest_200_300_150_100.png, gdtest.gd2(part))",
- im2, im3);
-
- gdImageDestroy (im2);
- gdImageDestroy (im3);
-
- /* */
- /* Copy Blend */
- /* */
- in = fopen ("test/gdtest.png", "rb");
- if (!in) {
- fprintf(stderr, "gdtest.png does not exist!\n");
- exit (1);
- }
- im2 = gdImageCreateFromPng (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
- im3 = gdImageCreate (100, 60);
- if (!im3) {
- fprintf(stderr, "gdImageCreate failed.\n");
- exit (1);
- }
- colRed = gdImageColorAllocate (im3, 255, 0, 0);
- colBlu = gdImageColorAllocate (im3, 0, 0, 255);
- gdImageFilledRectangle (im3, 0, 0, 49, 30, colRed);
- gdImageFilledRectangle (im3, 50, 30, 99, 59, colBlu);
-
- gdImageCopyMerge (im2, im3, 150, 200, 10, 10, 90, 50, 50);
- gdImageCopyMerge (im2, im3, 180, 70, 10, 10, 90, 50, 50);
-
- gdImageCopyMergeGray (im2, im3, 250, 160, 10, 10, 90, 50, 50);
- gdImageCopyMergeGray (im2, im3, 80, 70, 10, 10, 90, 50, 50);
-
- gdImageDestroy (im3);
-
- in = fopen ("test/gdtest_merge.png", "rb");
- if (!in) {
- fprintf(stderr, "gdtest_merge.png does not exist!\n");
- exit (1);
- }
- im3 = gdImageCreateFromPng (in);
- fclose (in);
- if (!im3) {
- fprintf(stderr, "gdImageCreateFromPng failed.\n");
- exit (1);
- }
- printf ("[Merged Image has %d colours]\n", im2->colorsTotal);
- CompareImages ("Merged (gdtest.png, gdtest_merge.png)", im2, im3);
-
- gdImageDestroy (im2);
- gdImageDestroy (im3);
-
-#ifdef HAVE_LIBJPEG
- out = fopen ("test/gdtest.jpg", "wb");
- if (!out) {
- fprintf(stderr, "Can't create file test/gdtest.jpg.\n");
- exit (1);
- }
- gdImageJpeg (im, out, -1);
- fclose (out);
- in = fopen ("test/gdtest.jpg", "rb");
- if (!in) {
- fprintf(stderr, "Can't open file test/gdtest.jpg.\n");
- exit (1);
- }
- im2 = gdImageCreateFromJpeg (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromJpeg failed.\n");
- exit (1);
- }
- gdImageDestroy (im2);
- printf ("Created test/gdtest.jpg successfully. Compare this image\n"
- "to the input image manually. Some difference must be\n"
- "expected as JPEG is a lossy file format.\n");
-#endif /* HAVE_LIBJPEG */
- /* Assume the color closest to black is the foreground
- color for the B&W wbmp image. */
- fprintf (stderr,
- "NOTE: the WBMP output image will NOT match the original unless the original\n"
- "is also black and white. This is OK!\n");
- foreground = gdImageColorClosest (im, 0, 0, 0);
- fprintf(stderr, "Foreground index is %d\n", foreground);
- if (foreground == -1) {
- fprintf(stderr, "Source image has no colors, skipping wbmp test.\n");
- } else {
- out = fopen ("test/gdtest.wbmp", "wb");
- if (!out) {
- fprintf(stderr, "Can't create file test/gdtest.wbmp.\n");
- exit (1);
- }
- gdImageWBMP (im, foreground, out);
- fclose (out);
- in = fopen ("test/gdtest.wbmp", "rb");
- if (!in) {
- fprintf(stderr, "Can't open file test/gdtest.wbmp.\n");
- exit (1);
- }
- im2 = gdImageCreateFromWBMP (in);
- fclose (in);
- if (!im2) {
- fprintf(stderr, "gdImageCreateFromWBMP failed.\n");
- exit (1);
- }
- fprintf(stderr, "WBMP has %d colors\n", gdImageColorsTotal (im2));
- fprintf(stderr, "WBMP colors are:\n");
- for (i = 0; (i < gdImageColorsTotal (im2)); i++) {
- fprintf(stderr, "%02X%02X%02X\n",
- gdImageRed (im2, i),
- gdImageGreen (im2, i), gdImageBlue (im2, i));
- }
- CompareImages ("WBMP test (gdtest.png, gdtest.wbmp)", ref, im2);
- out = fopen ("test/gdtest_wbmp_to_png.png", "wb");
- if (!out) {
- fprintf (stderr,
- "Can't create file test/gdtest_wbmp_to_png.png.\n");
- exit (1);
- }
- gdImagePng (im2, out);
- fclose (out);
- gdImageDestroy (im2);
- }
- gdImageDestroy (im);
- gdImageDestroy (ref);
-
- return 0;
-}
-
-void
-CompareImages (char *msg, gdImagePtr im1, gdImagePtr im2)
-{
- int cmpRes;
-
- cmpRes = gdImageCompare (im1, im2);
-
- if (cmpRes & GD_CMP_IMAGE) {
- printf ("%%%s: ERROR images differ: BAD\n", msg);
- } else if (cmpRes != 0) {
- printf ("%%%s: WARNING images differ: WARNING - Probably OK\n", msg);
- } else {
- printf ("%%%s: OK\n", msg);
- return;
- }
-
- if (cmpRes & (GD_CMP_SIZE_X + GD_CMP_SIZE_Y)) {
- printf ("-%s: INFO image sizes differ\n", msg);
- }
-
- if (cmpRes & GD_CMP_NUM_COLORS) {
- printf ("-%s: INFO number of palette entries differ %d Vs. %d\n", msg,
- im1->colorsTotal, im2->colorsTotal);
- }
-
- if (cmpRes & GD_CMP_COLOR) {
- printf ("-%s: INFO actual colours of pixels differ\n", msg);
- }
-}
-
-
-static int
-freadWrapper (void *context, char *buf, int len)
-{
- int got = fread (buf, 1, len, (FILE *) context);
- return got;
-}
-
-static int
-fwriteWrapper (void *context, const char *buffer, int len)
-{
- return fwrite (buffer, 1, len, (FILE *) context);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdtestft.c b/Build/source/libs/gd/libgd-src/src/gdtestft.c
deleted file mode 100644
index f50b17491ba..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdtestft.c
+++ /dev/null
@@ -1,180 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-#include <string.h>
-#include <stdlib.h>
-
-#define PI 3.141592
-#define DEG2RAD(x) ((x)*PI/180.)
-
-#define MAX(x,y) ((x) > (y) ? (x) : (y))
-#define MIN(x,y) ((x) < (y) ? (x) : (y))
-
-#define MAX4(x,y,z,w) \
- ((MAX((x),(y))) > (MAX((z),(w))) ? (MAX((x),(y))) : (MAX((z),(w))))
-#define MIN4(x,y,z,w) \
- ((MIN((x),(y))) < (MIN((z),(w))) ? (MIN((x),(y))) : (MIN((z),(w))))
-
-#define MAXX(x) MAX4(x[0],x[2],x[4],x[6])
-#define MINX(x) MIN4(x[0],x[2],x[4],x[6])
-#define MAXY(x) MAX4(x[1],x[3],x[5],x[7])
-#define MINY(x) MIN4(x[1],x[3],x[5],x[7])
-
-int
-main (int argc, char *argv[])
-{
- gdImagePtr im;
- int blue;
- int blueAlpha;
- int white;
- int brect[8];
- int x, y, sx, sy;
- char *err;
-#ifdef JISX0208
- char *s = "Hello. ‚±‚ñ‚É‚¿‚Í Qyjpqg,"; /* String to draw. */
-#else
- char *s = "Hello. ã“ã‚“ã«ã¡ã¯ Qyjpqg,"; /* String to draw. */
-#endif
-
- double sz = 40.;
-
-#if 0
- double angle = 0.;
-#else
- double angle = DEG2RAD (90);
-#endif
- char *f;
- if (argc == 2) {
- f = argv[1];
- } else {
- /* 2.02: usage message. Defaulting to Times wasn't working well for the
- many people with no /usr/share/fonts/truetype. */
- fprintf(stderr, "Usage: gdtestft fontfilename\n"
- "If fontfilename is not a full or relative path, GDFONTPATH is searched for\n"
- "it. If GDFONTPATH is not set, /usr/share/fonts/truetype is searched.\n");
- return 1;
- }
- /* obtain brect so that we can size the image */
- err =
- gdImageStringFT ((gdImagePtr) NULL, &brect[0], 0, f, sz, angle, 0, 0, s);
- if (err) {
- fprintf(stderr, "%s\n", err);
- return 1;
- }
-
- /* create an image just big enough for the string (x3) */
- sx = MAXX (brect) - MINX (brect) + 6;
- sy = MAXY (brect) - MINY (brect) + 6;
-#if 0
- /* Would be palette color 8-bit (which of course is still allowed,
- but not impressive when used with a JPEG background and antialiasing
- and alpha channel and so on!) */
- im = gdImageCreate (sx * 3, sy);
-#else
- /* gd 2.0: true color images can use freetype too,
- and they can do antialiasing against arbitrary
- complex backgrounds. */
- im = gdImageCreateTrueColor (sx * 3, sy);
-#endif
- /* Background color. gd 2.0: fill the image with it; truecolor
- images have a black background otherwise. */
- white = gdImageColorResolve (im, 255, 255, 255);
- /* Load a pretty background and resample it to cover the entire image */
- {
- FILE *in = fopen ("eleanor.jpg", "rb");
- gdImagePtr imb = NULL;
- if (in) {
-#ifdef HAVE_LIBJPEG
- imb = gdImageCreateFromJpeg (in);
-#else
- fprintf(stderr, "No JPEG library support.\n");
-#endif
- fclose(in);
-
- if (!imb) {
- fprintf(stderr, "gdImageCreateFromJpeg failed\n");
- return 1;
- }
- if (!im->trueColor) {
- /* If destination is not truecolor, convert the JPEG to a
- reasonably high-quality palette version. This is not as good
- as creating a truecolor output file, of course. Leave many
- colors for text smoothing. */
-#if 1
- gdImageTrueColorToPalette (imb, 0, 128);
-#endif
- }
- /* Resample background image to cover new image exactly */
- gdImageCopyResampled (im, imb, 0, 0, 0, 0, sx * 3, sy,
- gdImageSX (imb), gdImageSY (imb));
- } else {
- /* Can't get background, so paint a simple one */
- /* Truecolor images start out black, so paint it white */
- gdImageFilledRectangle (im, 0, 0, sx * 3, sy, white);
- }
- }
- /* TBB 2.0.2: only black was working, and I didn't know it because
- the test program used black. Funny, huh? Let's do a more interesting
- color this time. */
- blue = gdImageColorResolve (im, 128, 192, 255);
- /* Almost-transparent blue (alpha blending), with antialiasing */
- blueAlpha = gdImageColorResolveAlpha (im, 128, 192, 255, gdAlphaMax / 2);
- /* render the string, offset origin to center string */
- x = 0 - MINX (brect) + 3;
- y = 0 - MINY (brect) + 3;
-
- /* With antialiasing (positive color value) */
- err = gdImageStringFT (im, NULL, blue, f, sz, angle, x, y, s);
- if (err) {
- fprintf(stderr, "%s\n", err);
- return 1;
- }
- /* Without antialiasing (negative color value) */
- err = gdImageStringFT (im, NULL, -blue, f, sz, angle, sx + x, y, s);
- if (err) {
- fprintf(stderr, "%s\n", err);
- return 1;
- }
- /* With antialiasing, and 50% alpha blending (truecolor only) */
- err = gdImageStringFT (im, NULL, blueAlpha, f, sz, angle, sx * 2 + x, y, s);
- if (err) {
- fprintf(stderr, "%s\n", err);
- return 1;
- }
- /* TBB: Write img to test/fttest.jpg or test/fttest.png */
- if (im->trueColor) {
-#ifdef HAVE_LIBJPEG
- FILE *out = fopen ("test/fttest.jpg", "wb");
- if (!out) {
- fprintf(stderr, "Can't create test/fttest.jpg\n");
- exit (1);
- }
- /* Fairly high JPEG quality setting */
- gdImageJpeg (im, out, 90);
- fclose (out);
- fprintf(stderr, "Test image written to test/fttest.jpg\n");
-#else
- fprintf(stderr, "Test image not written; No JPEG library support.\n");
-#endif
- } else {
-#ifdef HAVE_LIBPNG
- FILE *out = fopen ("test/fttest.png", "wb");
- if (!out) {
- fprintf(stderr, "Can't create test/fttest.png\n");
- exit (1);
- }
- /* 2.0.10: correct ifdef, thanks to Gabriele Verzeletti */
- gdImagePng (im, out);
- fclose (out);
- fprintf(stderr, "Test image written to test/fttest.png\n");
-#else
- fprintf(stderr, "Test image not written; No PNG library support.\n");
-#endif
- }
- /* Destroy it */
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdtopng.c b/Build/source/libs/gd/libgd-src/src/gdtopng.c
deleted file mode 100644
index c937558eb19..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdtopng.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- if (argc != 3) {
- fprintf(stderr, "Usage: gdtopng filename.gd filename.png\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromGd (in);
- fclose (in);
- if (!im) {
- fprintf(stderr, "Input is not in GD format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImagePng (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gdxpm.c b/Build/source/libs/gd/libgd-src/src/gdxpm.c
deleted file mode 100644
index 4ac84662380..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gdxpm.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Add ability to load xpm files to gd, requires the xpm
- * library.
- * Caolan.McNamara@ul.ie
- * http://www.csn.ul.ie/~caolan
- */
-
-
-/**
- * File: XPM Input
- *
- * Read XPM images.
- */
-
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gd.h"
-#include "gdhelpers.h"
-#include "gd_color_map.h"
-#include "gd_errors.h"
-
-#ifndef HAVE_LIBXPM
-BGD_DECLARE(gdImagePtr) gdImageCreateFromXpm(char *filename)
-{
- (void)filename;
- gd_error_ex(GD_ERROR, "libgd was not built with xpm support\n");
- return NULL;
-}
-#else
-
-#include <X11/xpm.h>
-
-/*
- Function: gdImageCreateFromXpm
-
- <gdImageCreateFromXbm> is called to load images from XPM X Window
- System color bitmap format files. This function is available only
- if HAVE_XPM is selected in the Makefile and the Xpm library is
- linked with the application. Unlike most gd file functions, the
- Xpm functions *require filenames*, not file
- pointers. <gdImageCreateFromXpm> returns a <gdImagePtr> to the new
- image, or NULL if unable to load the image (most often because the
- file is corrupt or does not contain an XPM bitmap format
- image). You can inspect the sx and sy members of the image to
- determine its size. The image must eventually be destroyed using
- <gdImageDestroy>.
-
- Parameters:
-
- filename - The input filename (*not* FILE pointer)
-
- Returns:
-
- A pointer to the new image or NULL if an error occurred.
-
- Example:
- (start code)
-
- gdImagePtr im;
- FILE *in;
- in = fopen("myxpm.xpm", "rb");
- im = gdImageCreateFromXpm(in);
- fclose(in);
- // ... Use the image ...
- gdImageDestroy(im);
-
- (end code)
-
-*/
-BGD_DECLARE(gdImagePtr) gdImageCreateFromXpm(char *filename)
-{
- XpmInfo info;
- XpmImage image;
- unsigned int i, j, k, number, len;
- char buf[5];
- gdImagePtr im = 0;
- int *pointer;
- int red = 0, green = 0, blue = 0;
- int *colors;
- int ret;
-
- ret = XpmReadFileToXpmImage(filename, &image, &info);
- if(ret != XpmSuccess) {
- return 0;
- }
-
- number = image.ncolors;
- if(overflow2(sizeof(int), number)) {
- goto done;
- }
- for(i = 0; i < number; i++) {
- /*
- avoid NULL pointer dereference
- TODO better fix need to manage monochrome/monovisual
- see m_color or g4_color or g_color
- */
- if (!image.colorTable[i].c_color) {
- goto done;
- }
- }
-
- colors = (int *)gdMalloc(sizeof(int) * number);
- if(colors == NULL) {
- goto done;
- }
-
- if(!(im = gdImageCreate(image.width, image.height))) {
- gdFree(colors);
- goto done;
- }
-
- for(i = 0; i < number; i++) {
- char *c_color = image.colorTable[i].c_color;
- if(strcmp(c_color, "None") == 0) {
- colors[i] = gdImageGetTransparent(im);
- if(colors[i] == -1) colors[i] = gdImageColorAllocate(im, 0, 0, 0);
- if(colors[i] != -1) gdImageColorTransparent(im, colors[i]);
- continue;
- }
- len = strlen(c_color);
- if(len < 1) continue;
- if(c_color[0] == '#') {
- switch(len) {
- case 4:
- buf[2] = '\0';
- buf[0] = buf[1] = c_color[1];
- red = strtol(buf, NULL, 16);
-
- buf[0] = buf[1] = c_color[2];
- green = strtol(buf, NULL, 16);
-
- buf[0] = buf[1] = c_color[3];
- blue = strtol(buf, NULL, 16);
- break;
-
- case 7:
- buf[2] = '\0';
- buf[0] = c_color[1];
- buf[1] = c_color[2];
- red = strtol(buf, NULL, 16);
-
- buf[0] = c_color[3];
- buf[1] = c_color[4];
- green = strtol(buf, NULL, 16);
-
- buf[0] = c_color[5];
- buf[1] = c_color[6];
- blue = strtol(buf, NULL, 16);
- break;
-
- case 10:
- buf[3] = '\0';
- buf[0] = c_color[1];
- buf[1] = c_color[2];
- buf[2] = c_color[3];
- red = strtol(buf, NULL, 16);
- red /= 64;
-
- buf[0] = c_color[4];
- buf[1] = c_color[5];
- buf[2] = c_color[6];
- green = strtol(buf, NULL, 16);
- green /= 64;
-
- buf[0] = c_color[7];
- buf[1] = c_color[8];
- buf[2] = c_color[9];
- blue = strtol(buf, NULL, 16);
- blue /= 64;
- break;
-
- case 13:
- buf[4] = '\0';
- buf[0] = c_color[1];
- buf[1] = c_color[2];
- buf[2] = c_color[3];
- buf[3] = c_color[4];
- red = strtol(buf, NULL, 16);
- red /= 256;
-
- buf[0] = c_color[5];
- buf[1] = c_color[6];
- buf[2] = c_color[7];
- buf[3] = c_color[8];
- green = strtol(buf, NULL, 16);
- green /= 256;
-
- buf[0] = c_color[9];
- buf[1] = c_color[10];
- buf[2] = c_color[11];
- buf[3] = c_color[12];
- blue = strtol(buf, NULL, 16);
- blue /= 256;
- break;
- }
- } else if(!gdColorMapLookup(GD_COLOR_MAP_X11, c_color, &red, &green, &blue)) {
- continue;
- }
-
- colors[i] = gdImageColorResolve(im, red, green, blue);
- }
-
- pointer = (int *)image.data;
-
- for(i = 0; i < image.height; i++) {
- for(j = 0; j < image.width; j++) {
- k = *pointer++;
- gdImageSetPixel(im, j, i, colors[k]);
- }
- }
-
- gdFree(colors);
-
-done:
- XpmFreeXpmImage(&image);
- XpmFreeXpmInfo(&info);
- return im;
-}
-#endif /* HAVE_LIBXPM */
diff --git a/Build/source/libs/gd/libgd-src/src/getopt.c b/Build/source/libs/gd/libgd-src/src/getopt.c
deleted file mode 100644
index 8651b87de74..00000000000
--- a/Build/source/libs/gd/libgd-src/src/getopt.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* $NetBSD: getopt.c,v 1.29 2014/06/05 22:00:22 christos Exp $ */
-
-/*
- * Copyright (c) 1987, 1993, 1994
- * The Regents of the University of California. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-int opterr = 1, /* if error message should be printed */
- optind = 1, /* index into parent argv vector */
- optopt, /* character checked for validity */
- optreset; /* reset getopt */
-char *optarg; /* argument associated with option */
-
-#define BADCH (int)'?'
-#define BADARG (int)':'
-#define EMSG ""
-
-/*
- * getopt --
- * Parse argc/argv argument vector.
- */
-int
-getopt(int nargc, char * const nargv[], const char *ostr)
-{
- static const char *place = EMSG; /* option letter processing */
- char *oli; /* option letter list index */
-
- if (optreset || *place == 0) { /* update scanning pointer */
- optreset = 0;
- place = nargv[optind];
- if (optind >= nargc || *place++ != '-') {
- /* Argument is absent or is not an option */
- place = EMSG;
- return (-1);
- }
- optopt = *place++;
- if (optopt == '-' && *place == 0) {
- /* "--" => end of options */
- ++optind;
- place = EMSG;
- return (-1);
- }
- if (optopt == 0) {
- /* Solitary '-', treat as a '-' option
- if the program (eg su) is looking for it. */
- place = EMSG;
- if (strchr(ostr, '-') == NULL)
- return -1;
- optopt = '-';
- }
- } else
- optopt = *place++;
-
- /* See if option letter is one the caller wanted... */
- if (optopt == ':' || (oli = strchr(ostr, optopt)) == NULL) {
- if (*place == 0)
- ++optind;
- if (opterr && *ostr != ':')
- (void)fprintf(stderr,
- "%s: unknown option -- %c\n", nargv[0],
- optopt);
- return (BADCH);
- }
-
- /* Does this option need an argument? */
- if (oli[1] != ':') {
- /* don't need argument */
- optarg = NULL;
- if (*place == 0)
- ++optind;
- } else {
- /* Option-argument is either the rest of this argument or the
- entire next argument. */
- if (*place)
- optarg = (char *)place;
- else if (oli[2] == ':')
- /*
- * GNU Extension, for optional arguments if the rest of
- * the argument is empty, we return NULL
- */
- optarg = NULL;
- else if (nargc > ++optind)
- optarg = nargv[optind];
- else {
- /* option-argument absent */
- place = EMSG;
- if (*ostr == ':')
- return (BADARG);
- if (opterr)
- (void)fprintf(stderr,
- "%s: option requires an argument -- %c\n",
- nargv[0], optopt);
- return (BADCH);
- }
- place = EMSG;
- ++optind;
- }
- return (optopt); /* return option letter */
-}
diff --git a/Build/source/libs/gd/libgd-src/src/gifanimtest.c b/Build/source/libs/gd/libgd-src/src/gifanimtest.c
deleted file mode 100644
index 28b7d27381b..00000000000
--- a/Build/source/libs/gd/libgd-src/src/gifanimtest.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "gd.h"
-
-int main(void)
-{
- gdImagePtr im;
- gdImagePtr last, cim;
- int blue;
- FILE *out;
- int i;
- im = gdImageCreate(100, 100);
- blue = gdImageColorAllocate(im, 0, 0, 255);
- out = fopen("gifanim.gif", "wb");
- gdImageGifAnimBegin(im, out, 1, 10);
- last = 0;
- for (i = 0; (i <= 100); i += 2) {
- cim = gdImageCreate(100, 100);
- gdImagePaletteCopy(cim, im);
- gdImageArc(cim, 50, 50, i, i, 0, 360, blue);
- gdImageGifAnimAdd(cim, out, 0, 0, 0, 10, gdDisposalNone, last);
- if (last) {
- gdImageDestroy(last);
- }
- last = cim;
- }
- gdImageDestroy(last);
- gdImageGifAnimEnd(out);
- fclose(out);
- gdImageDestroy(im);
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/giftogd2.c b/Build/source/libs/gd/libgd-src/src/giftogd2.c
deleted file mode 100644
index 68c82a1e3fd..00000000000
--- a/Build/source/libs/gd/libgd-src/src/giftogd2.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "gd.h"
-
-/* A short program which converts a .gif file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int main(int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int cs, fmt;
-
- if (argc != 5) {
- fprintf(stderr, "Usage: giftogd2 filename.gif filename.gd2 cs fmt\n");
- fprintf(stderr, " where cs is the chunk size\n");
- fprintf(stderr, " fmt is 1 for raw, 2 for compressed\n");
- exit(1);
- }
- in = fopen(argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit(1);
- }
- im = gdImageCreateFromGif(in);
- fclose(in);
- if (!im) {
- fprintf(stderr, "Input is not in GIF format!\n");
- exit(1);
- }
- out = fopen(argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy(im);
- exit(1);
- }
- cs = atoi(argv[3]);
- fmt = atoi(argv[4]);
- gdImageGd2(im, out, cs, fmt);
- fclose(out);
- gdImageDestroy(im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/jisx0208.h b/Build/source/libs/gd/libgd-src/src/jisx0208.h
deleted file mode 100644
index 118c23e0aac..00000000000
--- a/Build/source/libs/gd/libgd-src/src/jisx0208.h
+++ /dev/null
@@ -1,1306 +0,0 @@
-#ifndef JISX0208_H
-#define JISX0208_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* This file was derived from "src/VF_Ftype.c" in VFlib2-2.24.2
- by Dr. Kakugawa */
-
- /* JIS -> Unicode mapping table */
- static const unsigned short UnicodeTbl[][94] = {
- { /* category 01 */
- 0x0000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B,
- 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E,
- 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD,
- 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C,
- 0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C,
- 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B,
- 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E,
- 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0x00F7,
- 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234,
- 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04,
- 0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0x00A7,
- 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7
- },
- { /* category 02 */
- 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B,
- 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A,
- 0x2229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207,
- 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235,
- 0x222B, 0x222C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, /**/
- 0x00B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x25EF
- },
- { /* category 03 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF10,
- 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18,
- 0xFF19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28,
- 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30,
- 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38,
- 0xFF39, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48,
- 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50,
- 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58,
- 0xFF59, 0xFF5A, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 04 */
- 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048,
- 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050,
- 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058,
- 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060,
- 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068,
- 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070,
- 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078,
- 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080,
- 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088,
- 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090,
- 0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 05 */
- 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8,
- 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0,
- 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8,
- 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0,
- 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8,
- 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0,
- 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8,
- 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0,
- 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8,
- 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0,
- 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 06 */
- 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
- 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0,
- 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8,
- 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0,
- 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 07 */
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416,
- 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
- 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426,
- 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E,
- 0x042F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436,
- 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
- 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446,
- 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E,
- 0x044F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 08 */
- 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C,
- 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B,
- 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F,
- 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 09 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 10 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 11 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 12 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 13 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 14 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 15 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 16 */
- 0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6,
- 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED,
- 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B,
- 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F,
- 0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D,
- 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937,
- 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905,
- 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E,
- 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF,
- 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32,
- 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0,
- 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D
- },
- { /* category 17 */
- 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF,
- 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893,
- 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5,
- 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2,
- 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3,
- 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834,
- 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5,
- 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712,
- 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF,
- 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276,
- 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A,
- 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC
- },
- { /* category 18 */
- 0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956,
- 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B,
- 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069,
- 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D,
- 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6,
- 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B,
- 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304,
- 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6,
- 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B,
- 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB,
- 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A,
- 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539
- },
- { /* category 19 */
- 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75,
- 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916,
- 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB,
- 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3,
- 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1,
- 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A,
- 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66,
- 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F,
- 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B,
- 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6,
- 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC,
- 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431
- },
- { /* category 20 */
- 0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2,
- 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C,
- 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE,
- 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57,
- 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF,
- 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E,
- 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2,
- 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC,
- 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811,
- 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA,
- 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE,
- 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4
- },
- { /* category 21 */
- 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63,
- 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC,
- 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993,
- 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947,
- 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409,
- 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD,
- 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7,
- 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D,
- 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08,
- 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8,
- 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8,
- 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC
- },
- { /* category 22 */
- 0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354,
- 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A,
- 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2,
- 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1,
- 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D,
- 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4,
- 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981,
- 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39,
- 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A,
- 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2,
- 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047,
- 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48
- },
- { /* category 23 */
- 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688,
- 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB,
- 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2,
- 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951,
- 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A,
- 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C,
- 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63,
- 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287,
- 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A,
- 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039,
- 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805,
- 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372
- },
- { /* category 24 */
- 0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79,
- 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375,
- 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B,
- 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00,
- 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1,
- 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56,
- 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87,
- 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D,
- 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7,
- 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E,
- 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C,
- 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411
- },
- { /* category 25 */
- 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F,
- 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18,
- 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643,
- 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69,
- 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05,
- 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154,
- 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC,
- 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805,
- 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5,
- 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A,
- 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170,
- 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC
- },
- { /* category 26 */
- 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068,
- 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A,
- 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6,
- 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF,
- 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9,
- 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73,
- 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E,
- 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750,
- 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4,
- 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B,
- 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F,
- 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237
- },
- { /* category 27 */
- 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1,
- 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09,
- 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6,
- 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178,
- 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F,
- 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9,
- 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307,
- 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B,
- 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2,
- 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE,
- 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D,
- 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642
- },
- { /* category 28 */
- 0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A,
- 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F,
- 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1,
- 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE,
- 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61,
- 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C,
- 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7,
- 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C,
- 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6,
- 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B,
- 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388,
- 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468
- },
- { /* category 29 */
- 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0,
- 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846,
- 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6,
- 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4,
- 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919,
- 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA,
- 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C,
- 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96,
- 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6,
- 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72,
- 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F,
- 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F
- },
- { /* category 30 */
- 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617,
- 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A,
- 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C,
- 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F,
- 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167,
- 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11,
- 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3,
- 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266,
- 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57,
- 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5,
- 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8,
- 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE
- },
- { /* category 31 */
- 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6,
- 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507,
- 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B,
- 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E,
- 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB,
- 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875,
- 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663,
- 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017,
- 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B,
- 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E,
- 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E,
- 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE
- },
- { /* category 32 */
- 0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4,
- 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574,
- 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F,
- 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93,
- 0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106,
- 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3,
- 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F,
- 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83,
- 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148,
- 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247,
- 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C,
- 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA
- },
- { /* category 33 */
- 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE,
- 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D,
- 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE,
- 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9,
- 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44,
- 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC,
- 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64,
- 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD,
- 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89,
- 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349,
- 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D,
- 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E
- },
- { /* category 34 */
- 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373,
- 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E,
- 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58,
- 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A,
- 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1,
- 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE,
- 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF,
- 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000,
- 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C,
- 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85,
- 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438,
- 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA
- },
- { /* category 35 */
- 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA,
- 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39,
- 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1,
- 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6,
- 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696,
- 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B,
- 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718,
- 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010,
- 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99,
- 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B,
- 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457,
- 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5
- },
- { /* category 36 */
- 0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2,
- 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074,
- 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A,
- 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88,
- 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC,
- 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB,
- 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F,
- 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3,
- 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448,
- 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C,
- 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B,
- 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013
- },
- { /* category 37 */
- 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575,
- 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9,
- 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55,
- 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9,
- 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835,
- 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B,
- 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA,
- 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD,
- 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B,
- 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7,
- 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977,
- 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230
- },
- { /* category 38 */
- 0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003,
- 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5,
- 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5,
- 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97,
- 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC,
- 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6,
- 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566,
- 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948,
- 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A,
- 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF,
- 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1,
- 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165
- },
- { /* category 39 */
- 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1,
- 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5,
- 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC,
- 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2,
- 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2,
- 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3,
- 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC,
- 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973,
- 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F,
- 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF,
- 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD,
- 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6
- },
- { /* category 40 */
- 0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61,
- 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197,
- 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A,
- 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB,
- 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF,
- 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6,
- 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0,
- 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C,
- 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2,
- 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9,
- 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E,
- 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E
- },
- { /* category 41 */
- 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D,
- 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867,
- 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19,
- 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF,
- 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED,
- 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3,
- 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66,
- 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7,
- 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C,
- 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66,
- 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A,
- 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D
- },
- { /* category 42 */
- 0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8,
- 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4,
- 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587,
- 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A,
- 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB,
- 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F,
- 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF,
- 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703,
- 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893,
- 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8,
- 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29,
- 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B
- },
- { /* category 43 */
- 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C,
- 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD,
- 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8,
- 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2,
- 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E,
- 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2,
- 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86,
- 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469,
- 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE,
- 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52,
- 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4,
- 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80
- },
- { /* category 44 */
- 0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC,
- 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D,
- 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727,
- 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E,
- 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D,
- 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302,
- 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499,
- 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24,
- 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301,
- 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2,
- 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3,
- 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652
- },
- { /* category 45 */
- 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5,
- 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C,
- 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091,
- 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89,
- 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA,
- 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194,
- 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21,
- 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83,
- 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765,
- 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71,
- 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229,
- 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483
- },
- { /* category 46 */
- 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387,
- 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409,
- 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E,
- 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE,
- 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7,
- 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1,
- 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A,
- 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E,
- 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2,
- 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62,
- 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B,
- 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F
- },
- { /* category 47 */
- 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2,
- 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C,
- 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E,
- 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6,
- 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0,
- 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900,
- 0x6E7E, 0x7897, 0x8155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 48 */
- 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F,
- 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212,
- 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3,
- 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE,
- 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D,
- 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69,
- 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF,
- 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5,
- 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6,
- 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043,
- 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C,
- 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2
- },
- { /* category 49 */
- 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED,
- 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116,
- 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B,
- 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169,
- 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F,
- 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9,
- 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD,
- 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0,
- 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A,
- 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E,
- 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D,
- 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8
- },
- { /* category 50 */
- 0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7,
- 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8,
- 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315,
- 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346,
- 0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E,
- 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5,
- 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC,
- 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440,
- 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E,
- 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492,
- 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2,
- 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8
- },
- { /* category 51 */
- 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6,
- 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539,
- 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557,
- 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F,
- 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9,
- 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4,
- 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9,
- 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B,
- 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0,
- 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC,
- 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7,
- 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709
- },
- { /* category 52 */
- 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C,
- 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769,
- 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3,
- 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3,
- 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821,
- 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885,
- 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE,
- 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC,
- 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD,
- 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D,
- 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A,
- 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969
- },
- { /* category 53 */
- 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6,
- 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11,
- 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36,
- 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD,
- 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C,
- 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43,
- 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69,
- 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83,
- 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4,
- 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3,
- 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28,
- 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53
- },
- { /* category 54 */
- 0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79,
- 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC,
- 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA,
- 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F,
- 0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C,
- 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84,
- 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7,
- 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB,
- 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36,
- 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F,
- 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F,
- 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF
- },
- { /* category 55 */
- 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8,
- 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE,
- 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29,
- 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51,
- 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83,
- 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99,
- 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4,
- 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019,
- 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026,
- 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A,
- 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B,
- 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A
- },
- { /* category 56 */
- 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1,
- 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5,
- 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4,
- 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147,
- 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134,
- 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A,
- 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153,
- 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A,
- 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8,
- 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3,
- 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200,
- 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B
- },
- { /* category 57 */
- 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241,
- 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282,
- 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294,
- 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8,
- 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C,
- 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350,
- 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB,
- 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369,
- 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6,
- 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D,
- 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A,
- 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC
- },
- { /* category 58 */
- 0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1,
- 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C,
- 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C,
- 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536,
- 0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E,
- 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F,
- 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2,
- 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603,
- 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644,
- 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F,
- 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698,
- 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC
- },
- { /* category 59 */
- 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9,
- 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727,
- 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746,
- 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9,
- 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7,
- 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE,
- 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C,
- 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3,
- 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD,
- 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5,
- 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908,
- 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD
- },
- { /* category 60 */
- 0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3,
- 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923,
- 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954,
- 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961,
- 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF,
- 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB,
- 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4,
- 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2,
- 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A,
- 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36,
- 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22,
- 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3
- },
- { /* category 61 */
- 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC,
- 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05,
- 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37,
- 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59,
- 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80,
- 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA,
- 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6,
- 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE,
- 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55,
- 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E,
- 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD,
- 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE
- },
- { /* category 62 */
- 0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36,
- 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C,
- 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95,
- 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6,
- 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5,
- 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E,
- 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B,
- 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF,
- 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3,
- 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5,
- 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE,
- 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC
- },
- { /* category 63 */
- 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80,
- 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E,
- 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9,
- 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1,
- 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F,
- 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030,
- 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1,
- 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9,
- 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166,
- 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195,
- 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4,
- 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC
- },
- { /* category 64 */
- 0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C,
- 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B,
- 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296,
- 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE,
- 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317,
- 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325,
- 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370,
- 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB,
- 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425,
- 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441,
- 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B,
- 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1
- },
- { /* category 65 */
- 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1,
- 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D,
- 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D,
- 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567,
- 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A,
- 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2,
- 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD,
- 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC,
- 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609,
- 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630,
- 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662,
- 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670
- },
- { /* category 66 */
- 0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B,
- 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8,
- 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1,
- 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704,
- 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738,
- 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E,
- 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6,
- 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7,
- 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926,
- 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A,
- 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB,
- 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC
- },
- { /* category 67 */
- 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919,
- 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955,
- 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA,
- 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC,
- 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F,
- 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49,
- 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88,
- 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6,
- 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF,
- 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6,
- 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18,
- 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50
- },
- { /* category 68 */
- 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65,
- 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98,
- 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D,
- 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD,
- 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07,
- 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27,
- 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54,
- 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65,
- 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB,
- 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD,
- 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B,
- 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06
- },
- { /* category 69 */
- 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32,
- 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68,
- 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D,
- 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB,
- 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8,
- 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A,
- 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22,
- 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32,
- 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79,
- 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE,
- 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94,
- 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A
- },
- { /* category 70 */
- 0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54,
- 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82,
- 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D,
- 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8,
- 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6,
- 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012,
- 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A,
- 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073,
- 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086,
- 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB,
- 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF,
- 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B
- },
- { /* category 71 */
- 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E,
- 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182,
- 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0,
- 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9,
- 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0,
- 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207,
- 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233,
- 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262,
- 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E,
- 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3,
- 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB,
- 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9
- },
- { /* category 72 */
- 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350,
- 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA,
- 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C,
- 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413,
- 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7,
- 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438,
- 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477,
- 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F,
- 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9,
- 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1,
- 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515,
- 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548
- },
- { /* category 73 */
- 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591,
- 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C,
- 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0,
- 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B,
- 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D,
- 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9,
- 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0,
- 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF,
- 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB,
- 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737,
- 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C,
- 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759
- },
- { /* category 74 */
- 0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF,
- 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3,
- 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D,
- 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815,
- 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844,
- 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E,
- 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892,
- 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1,
- 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902,
- 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913,
- 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B,
- 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E
- },
- { /* category 75 */
- 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E,
- 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6,
- 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA,
- 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10,
- 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52,
- 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82,
- 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3,
- 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4,
- 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C,
- 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33,
- 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F,
- 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B
- },
- { /* category 76 */
- 0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E,
- 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F,
- 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78,
- 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94,
- 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3,
- 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD,
- 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D,
- 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D,
- 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF,
- 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF,
- 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10,
- 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A
- },
- { /* category 77 */
- 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60,
- 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87,
- 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99,
- 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5,
- 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE,
- 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F,
- 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42,
- 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62,
- 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7,
- 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005,
- 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016,
- 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8
- },
- { /* category 78 */
- 0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056,
- 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082,
- 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF,
- 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112,
- 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165,
- 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB,
- 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9,
- 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5,
- 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E,
- 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B,
- 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9,
- 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E
- },
- { /* category 79 */
- 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C,
- 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394,
- 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD,
- 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407,
- 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452,
- 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470,
- 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F,
- 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0,
- 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA,
- 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC,
- 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642,
- 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E
- },
- { /* category 80 */
- 0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695,
- 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6,
- 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC,
- 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E,
- 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739,
- 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C,
- 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779,
- 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790,
- 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6,
- 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6,
- 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D,
- 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870
- },
- { /* category 81 */
- 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4,
- 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914,
- 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E,
- 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951,
- 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE,
- 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE,
- 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2,
- 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E,
- 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64,
- 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF,
- 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6,
- 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7
- },
- { /* category 82 */
- 0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25,
- 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44,
- 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93,
- 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4,
- 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3,
- 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0,
- 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12,
- 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30,
- 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76,
- 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03,
- 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15,
- 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48
- },
- { /* category 83 */
- 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89,
- 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2,
- 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2,
- 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A,
- 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B,
- 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8,
- 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4,
- 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4,
- 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08,
- 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54,
- 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A,
- 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0
- },
- { /* category 84 */
- 0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 85 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 86 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 87 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 88 */
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
- },
- { /* category 89 */
- 0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631,
- 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00,
- 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD,
- 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094,
- 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215,
- 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372,
- 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF,
- 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10,
- 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4,
- 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6,
- 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8,
- 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7
- },
- { /* category 90 */
- 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2,
- 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460,
- 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E,
- 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699,
- 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB,
- 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14,
- 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2,
- 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04,
- 0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC,
- 0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5,
- 0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C,
- 0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1
- },
- { /* category 91 */
- 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3,
- 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462,
- 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B,
- 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A,
- 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1,
- 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7,
- 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362,
- 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B,
- 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37,
- 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F,
- 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25,
- 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA
- },
- { /* category 92 */
- 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210,
- 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239,
- 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0,
- 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28,
- 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6,
- 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29,
- 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751,
- 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E,
- 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB,
- 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x0000, 0x0000,
- 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177,
- 0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02
- }
- };
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* JISX0208_H */
diff --git a/Build/source/libs/gd/libgd-src/src/msinttypes/inttypes.h b/Build/source/libs/gd/libgd-src/src/msinttypes/inttypes.h
deleted file mode 100644
index ead903f78e4..00000000000
--- a/Build/source/libs/gd/libgd-src/src/msinttypes/inttypes.h
+++ /dev/null
@@ -1,305 +0,0 @@
-// ISO C9x compliant inttypes.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// 3. The name of the author may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef _MSC_INTTYPES_H_ // [
-#define _MSC_INTTYPES_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include "stdint.h"
-
-// 7.8 Format conversion of integer types
-
-typedef struct {
- intmax_t quot;
- intmax_t rem;
-} imaxdiv_t;
-
-// 7.8.1 Macros for format specifiers
-
-#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) // [ See footnote 185 at page 198
-
-// The fprintf macros for signed integers are:
-#define PRId8 "d"
-#define PRIi8 "i"
-#define PRIdLEAST8 "d"
-#define PRIiLEAST8 "i"
-#define PRIdFAST8 "d"
-#define PRIiFAST8 "i"
-
-#define PRId16 "hd"
-#define PRIi16 "hi"
-#define PRIdLEAST16 "hd"
-#define PRIiLEAST16 "hi"
-#define PRIdFAST16 "hd"
-#define PRIiFAST16 "hi"
-
-#define PRId32 "I32d"
-#define PRIi32 "I32i"
-#define PRIdLEAST32 "I32d"
-#define PRIiLEAST32 "I32i"
-#define PRIdFAST32 "I32d"
-#define PRIiFAST32 "I32i"
-
-#define PRId64 "I64d"
-#define PRIi64 "I64i"
-#define PRIdLEAST64 "I64d"
-#define PRIiLEAST64 "I64i"
-#define PRIdFAST64 "I64d"
-#define PRIiFAST64 "I64i"
-
-#define PRIdMAX "I64d"
-#define PRIiMAX "I64i"
-
-#define PRIdPTR "Id"
-#define PRIiPTR "Ii"
-
-// The fprintf macros for unsigned integers are:
-#define PRIo8 "o"
-#define PRIu8 "u"
-#define PRIx8 "x"
-#define PRIX8 "X"
-#define PRIoLEAST8 "o"
-#define PRIuLEAST8 "u"
-#define PRIxLEAST8 "x"
-#define PRIXLEAST8 "X"
-#define PRIoFAST8 "o"
-#define PRIuFAST8 "u"
-#define PRIxFAST8 "x"
-#define PRIXFAST8 "X"
-
-#define PRIo16 "ho"
-#define PRIu16 "hu"
-#define PRIx16 "hx"
-#define PRIX16 "hX"
-#define PRIoLEAST16 "ho"
-#define PRIuLEAST16 "hu"
-#define PRIxLEAST16 "hx"
-#define PRIXLEAST16 "hX"
-#define PRIoFAST16 "ho"
-#define PRIuFAST16 "hu"
-#define PRIxFAST16 "hx"
-#define PRIXFAST16 "hX"
-
-#define PRIo32 "I32o"
-#define PRIu32 "I32u"
-#define PRIx32 "I32x"
-#define PRIX32 "I32X"
-#define PRIoLEAST32 "I32o"
-#define PRIuLEAST32 "I32u"
-#define PRIxLEAST32 "I32x"
-#define PRIXLEAST32 "I32X"
-#define PRIoFAST32 "I32o"
-#define PRIuFAST32 "I32u"
-#define PRIxFAST32 "I32x"
-#define PRIXFAST32 "I32X"
-
-#define PRIo64 "I64o"
-#define PRIu64 "I64u"
-#define PRIx64 "I64x"
-#define PRIX64 "I64X"
-#define PRIoLEAST64 "I64o"
-#define PRIuLEAST64 "I64u"
-#define PRIxLEAST64 "I64x"
-#define PRIXLEAST64 "I64X"
-#define PRIoFAST64 "I64o"
-#define PRIuFAST64 "I64u"
-#define PRIxFAST64 "I64x"
-#define PRIXFAST64 "I64X"
-
-#define PRIoMAX "I64o"
-#define PRIuMAX "I64u"
-#define PRIxMAX "I64x"
-#define PRIXMAX "I64X"
-
-#define PRIoPTR "Io"
-#define PRIuPTR "Iu"
-#define PRIxPTR "Ix"
-#define PRIXPTR "IX"
-
-// The fscanf macros for signed integers are:
-#define SCNd8 "d"
-#define SCNi8 "i"
-#define SCNdLEAST8 "d"
-#define SCNiLEAST8 "i"
-#define SCNdFAST8 "d"
-#define SCNiFAST8 "i"
-
-#define SCNd16 "hd"
-#define SCNi16 "hi"
-#define SCNdLEAST16 "hd"
-#define SCNiLEAST16 "hi"
-#define SCNdFAST16 "hd"
-#define SCNiFAST16 "hi"
-
-#define SCNd32 "ld"
-#define SCNi32 "li"
-#define SCNdLEAST32 "ld"
-#define SCNiLEAST32 "li"
-#define SCNdFAST32 "ld"
-#define SCNiFAST32 "li"
-
-#define SCNd64 "I64d"
-#define SCNi64 "I64i"
-#define SCNdLEAST64 "I64d"
-#define SCNiLEAST64 "I64i"
-#define SCNdFAST64 "I64d"
-#define SCNiFAST64 "I64i"
-
-#define SCNdMAX "I64d"
-#define SCNiMAX "I64i"
-
-#ifdef _WIN64 // [
-# define SCNdPTR "I64d"
-# define SCNiPTR "I64i"
-#else // _WIN64 ][
-# define SCNdPTR "ld"
-# define SCNiPTR "li"
-#endif // _WIN64 ]
-
-// The fscanf macros for unsigned integers are:
-#define SCNo8 "o"
-#define SCNu8 "u"
-#define SCNx8 "x"
-#define SCNX8 "X"
-#define SCNoLEAST8 "o"
-#define SCNuLEAST8 "u"
-#define SCNxLEAST8 "x"
-#define SCNXLEAST8 "X"
-#define SCNoFAST8 "o"
-#define SCNuFAST8 "u"
-#define SCNxFAST8 "x"
-#define SCNXFAST8 "X"
-
-#define SCNo16 "ho"
-#define SCNu16 "hu"
-#define SCNx16 "hx"
-#define SCNX16 "hX"
-#define SCNoLEAST16 "ho"
-#define SCNuLEAST16 "hu"
-#define SCNxLEAST16 "hx"
-#define SCNXLEAST16 "hX"
-#define SCNoFAST16 "ho"
-#define SCNuFAST16 "hu"
-#define SCNxFAST16 "hx"
-#define SCNXFAST16 "hX"
-
-#define SCNo32 "lo"
-#define SCNu32 "lu"
-#define SCNx32 "lx"
-#define SCNX32 "lX"
-#define SCNoLEAST32 "lo"
-#define SCNuLEAST32 "lu"
-#define SCNxLEAST32 "lx"
-#define SCNXLEAST32 "lX"
-#define SCNoFAST32 "lo"
-#define SCNuFAST32 "lu"
-#define SCNxFAST32 "lx"
-#define SCNXFAST32 "lX"
-
-#define SCNo64 "I64o"
-#define SCNu64 "I64u"
-#define SCNx64 "I64x"
-#define SCNX64 "I64X"
-#define SCNoLEAST64 "I64o"
-#define SCNuLEAST64 "I64u"
-#define SCNxLEAST64 "I64x"
-#define SCNXLEAST64 "I64X"
-#define SCNoFAST64 "I64o"
-#define SCNuFAST64 "I64u"
-#define SCNxFAST64 "I64x"
-#define SCNXFAST64 "I64X"
-
-#define SCNoMAX "I64o"
-#define SCNuMAX "I64u"
-#define SCNxMAX "I64x"
-#define SCNXMAX "I64X"
-
-#ifdef _WIN64 // [
-# define SCNoPTR "I64o"
-# define SCNuPTR "I64u"
-# define SCNxPTR "I64x"
-# define SCNXPTR "I64X"
-#else // _WIN64 ][
-# define SCNoPTR "lo"
-# define SCNuPTR "lu"
-# define SCNxPTR "lx"
-# define SCNXPTR "lX"
-#endif // _WIN64 ]
-
-#endif // __STDC_FORMAT_MACROS ]
-
-// 7.8.2 Functions for greatest-width integer types
-
-// 7.8.2.1 The imaxabs function
-#define imaxabs _abs64
-
-// 7.8.2.2 The imaxdiv function
-
-// This is modified version of div() function from Microsoft's div.c found
-// in %MSVC.NET%\crt\src\div.c
-#ifdef STATIC_IMAXDIV // [
-static
-#else // STATIC_IMAXDIV ][
-_inline
-#endif // STATIC_IMAXDIV ]
-imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
-{
- imaxdiv_t result;
-
- result.quot = numer / denom;
- result.rem = numer % denom;
-
- if (numer < 0 && result.rem > 0) {
- // did division wrong; must fix up
- ++result.quot;
- result.rem -= denom;
- }
-
- return result;
-}
-
-// 7.8.2.3 The strtoimax and strtoumax functions
-#define strtoimax _strtoi64
-#define strtoumax _strtoui64
-
-// 7.8.2.4 The wcstoimax and wcstoumax functions
-#define wcstoimax _wcstoi64
-#define wcstoumax _wcstoui64
-
-
-#endif // _MSC_INTTYPES_H_ ]
diff --git a/Build/source/libs/gd/libgd-src/src/msinttypes/stdint.h b/Build/source/libs/gd/libgd-src/src/msinttypes/stdint.h
deleted file mode 100644
index c66fbb817c0..00000000000
--- a/Build/source/libs/gd/libgd-src/src/msinttypes/stdint.h
+++ /dev/null
@@ -1,247 +0,0 @@
-// ISO C9x compliant stdint.h for Microsoft Visual Studio
-// Based on ISO/IEC 9899:TC2 Committee draft (May 6, 2005) WG14/N1124
-//
-// Copyright (c) 2006-2008 Alexander Chemeris
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice,
-// this list of conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright
-// notice, this list of conditions and the following disclaimer in the
-// documentation and/or other materials provided with the distribution.
-//
-// 3. The name of the author may be used to endorse or promote products
-// derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-// EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef _MSC_VER // [
-#error "Use this header only with Microsoft Visual C++ compilers!"
-#endif // _MSC_VER ]
-
-#ifndef _MSC_STDINT_H_ // [
-#define _MSC_STDINT_H_
-
-#if _MSC_VER > 1000
-#pragma once
-#endif
-
-#include <limits.h>
-
-// For Visual Studio 6 in C++ mode and for many Visual Studio versions when
-// compiling for ARM we should wrap <wchar.h> include with 'extern "C++" {}'
-// or compiler give many errors like this:
-// error C2733: second C linkage of overloaded function 'wmemchr' not allowed
-#ifdef __cplusplus
-extern "C" {
-#endif
-# include <wchar.h>
-#ifdef __cplusplus
-}
-#endif
-
-// Define _W64 macros to mark types changing their size, like intptr_t.
-#ifndef _W64
-# if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
-# define _W64 __w64
-# else
-# define _W64
-# endif
-#endif
-
-
-// 7.18.1 Integer types
-
-// 7.18.1.1 Exact-width integer types
-
-// Visual Studio 6 and Embedded Visual C++ 4 doesn't
-// realize that, e.g. char has the same size as __int8
-// so we give up on __intX for them.
-#if (_MSC_VER < 1300)
- typedef signed char int8_t;
- typedef signed short int16_t;
- typedef signed int int32_t;
- typedef unsigned char uint8_t;
- typedef unsigned short uint16_t;
- typedef unsigned int uint32_t;
-#else
- typedef signed __int8 int8_t;
- typedef signed __int16 int16_t;
- typedef signed __int32 int32_t;
- typedef unsigned __int8 uint8_t;
- typedef unsigned __int16 uint16_t;
- typedef unsigned __int32 uint32_t;
-#endif
-typedef signed __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-
-
-// 7.18.1.2 Minimum-width integer types
-typedef int8_t int_least8_t;
-typedef int16_t int_least16_t;
-typedef int32_t int_least32_t;
-typedef int64_t int_least64_t;
-typedef uint8_t uint_least8_t;
-typedef uint16_t uint_least16_t;
-typedef uint32_t uint_least32_t;
-typedef uint64_t uint_least64_t;
-
-// 7.18.1.3 Fastest minimum-width integer types
-typedef int8_t int_fast8_t;
-typedef int16_t int_fast16_t;
-typedef int32_t int_fast32_t;
-typedef int64_t int_fast64_t;
-typedef uint8_t uint_fast8_t;
-typedef uint16_t uint_fast16_t;
-typedef uint32_t uint_fast32_t;
-typedef uint64_t uint_fast64_t;
-
-// 7.18.1.4 Integer types capable of holding object pointers
-#ifdef _WIN64 // [
- typedef signed __int64 intptr_t;
- typedef unsigned __int64 uintptr_t;
-#else // _WIN64 ][
- typedef _W64 signed int intptr_t;
- typedef _W64 unsigned int uintptr_t;
-#endif // _WIN64 ]
-
-// 7.18.1.5 Greatest-width integer types
-typedef int64_t intmax_t;
-typedef uint64_t uintmax_t;
-
-
-// 7.18.2 Limits of specified-width integer types
-
-#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS) // [ See footnote 220 at page 257 and footnote 221 at page 259
-
-// 7.18.2.1 Limits of exact-width integer types
-#define INT8_MIN ((int8_t)_I8_MIN)
-#define INT8_MAX _I8_MAX
-#define INT16_MIN ((int16_t)_I16_MIN)
-#define INT16_MAX _I16_MAX
-#define INT32_MIN ((int32_t)_I32_MIN)
-#define INT32_MAX _I32_MAX
-#define INT64_MIN ((int64_t)_I64_MIN)
-#define INT64_MAX _I64_MAX
-#define UINT8_MAX _UI8_MAX
-#define UINT16_MAX _UI16_MAX
-#define UINT32_MAX _UI32_MAX
-#define UINT64_MAX _UI64_MAX
-
-// 7.18.2.2 Limits of minimum-width integer types
-#define INT_LEAST8_MIN INT8_MIN
-#define INT_LEAST8_MAX INT8_MAX
-#define INT_LEAST16_MIN INT16_MIN
-#define INT_LEAST16_MAX INT16_MAX
-#define INT_LEAST32_MIN INT32_MIN
-#define INT_LEAST32_MAX INT32_MAX
-#define INT_LEAST64_MIN INT64_MIN
-#define INT_LEAST64_MAX INT64_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-#define UINT_LEAST16_MAX UINT16_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-// 7.18.2.3 Limits of fastest minimum-width integer types
-#define INT_FAST8_MIN INT8_MIN
-#define INT_FAST8_MAX INT8_MAX
-#define INT_FAST16_MIN INT16_MIN
-#define INT_FAST16_MAX INT16_MAX
-#define INT_FAST32_MIN INT32_MIN
-#define INT_FAST32_MAX INT32_MAX
-#define INT_FAST64_MIN INT64_MIN
-#define INT_FAST64_MAX INT64_MAX
-#define UINT_FAST8_MAX UINT8_MAX
-#define UINT_FAST16_MAX UINT16_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-// 7.18.2.4 Limits of integer types capable of holding object pointers
-#ifdef _WIN64 // [
-# define INTPTR_MIN INT64_MIN
-# define INTPTR_MAX INT64_MAX
-# define UINTPTR_MAX UINT64_MAX
-#else // _WIN64 ][
-# define INTPTR_MIN INT32_MIN
-# define INTPTR_MAX INT32_MAX
-# define UINTPTR_MAX UINT32_MAX
-#endif // _WIN64 ]
-
-// 7.18.2.5 Limits of greatest-width integer types
-#define INTMAX_MIN INT64_MIN
-#define INTMAX_MAX INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-// 7.18.3 Limits of other integer types
-
-#ifdef _WIN64 // [
-# define PTRDIFF_MIN _I64_MIN
-# define PTRDIFF_MAX _I64_MAX
-#else // _WIN64 ][
-# define PTRDIFF_MIN _I32_MIN
-# define PTRDIFF_MAX _I32_MAX
-#endif // _WIN64 ]
-
-#define SIG_ATOMIC_MIN INT_MIN
-#define SIG_ATOMIC_MAX INT_MAX
-
-#ifndef SIZE_MAX // [
-# ifdef _WIN64 // [
-# define SIZE_MAX _UI64_MAX
-# else // _WIN64 ][
-# define SIZE_MAX _UI32_MAX
-# endif // _WIN64 ]
-#endif // SIZE_MAX ]
-
-// WCHAR_MIN and WCHAR_MAX are also defined in <wchar.h>
-#ifndef WCHAR_MIN // [
-# define WCHAR_MIN 0
-#endif // WCHAR_MIN ]
-#ifndef WCHAR_MAX // [
-# define WCHAR_MAX _UI16_MAX
-#endif // WCHAR_MAX ]
-
-#define WINT_MIN 0
-#define WINT_MAX _UI16_MAX
-
-#endif // __STDC_LIMIT_MACROS ]
-
-
-// 7.18.4 Limits of other integer types
-
-#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS) // [ See footnote 224 at page 260
-
-// 7.18.4.1 Macros for minimum-width integer constants
-
-#define INT8_C(val) val##i8
-#define INT16_C(val) val##i16
-#define INT32_C(val) val##i32
-#define INT64_C(val) val##i64
-
-#define UINT8_C(val) val##ui8
-#define UINT16_C(val) val##ui16
-#define UINT32_C(val) val##ui32
-#define UINT64_C(val) val##ui64
-
-// 7.18.4.2 Macros for greatest-width integer constants
-#define INTMAX_C INT64_C
-#define UINTMAX_C UINT64_C
-
-#endif // __STDC_CONSTANT_MACROS ]
-
-
-#endif // _MSC_STDINT_H_ ]
diff --git a/Build/source/libs/gd/libgd-src/src/pngtogd.c b/Build/source/libs/gd/libgd-src/src/pngtogd.c
deleted file mode 100644
index 4f9804d177a..00000000000
--- a/Build/source/libs/gd/libgd-src/src/pngtogd.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im = NULL;
- FILE *in, *out;
- if (argc != 3) {
- fprintf (stderr, "Usage: pngtogd filename.png filename.gd\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf (stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
- fclose (in);
- if (!im) {
- fprintf (stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out) {
- fprintf (stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- gdImageGd (im, out);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/pngtogd2.c b/Build/source/libs/gd/libgd-src/src/pngtogd2.c
deleted file mode 100644
index 20fbee25daa..00000000000
--- a/Build/source/libs/gd/libgd-src/src/pngtogd2.c
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* A short program which converts a .png file into a .gd2 file, for
- your convenience in creating images on the fly from a
- basis image that must be loaded quickly. The .gd2 format
- is not intended to be a general-purpose format. */
-
-int
-main (int argc, char **argv)
-{
- gdImagePtr im;
- FILE *in, *out;
- int cs, fmt;
-
- if (argc != 5) {
- fprintf(stderr, "Usage: pngtogd2 filename.png filename.gd2 cs fmt\n");
- fprintf(stderr, " where cs is the chunk size\n");
- fprintf(stderr, " fmt is 1 for raw, 2 for compressed\n");
- exit (1);
- }
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf(stderr, "Input file does not exist!\n");
- exit (1);
- }
- im = gdImageCreateFromPng (in);
- fclose (in);
- if (!im) {
- fprintf(stderr, "Input is not in PNG format!\n");
- exit (1);
- }
- out = fopen (argv[2], "wb");
- if (!out) {
- fprintf(stderr, "Output file cannot be written to!\n");
- gdImageDestroy (im);
- exit (1);
- }
- cs = atoi (argv[3]);
- fmt = atoi (argv[4]);
- gdImageGd2 (im, out, cs, fmt);
- fclose (out);
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/snprintf.c b/Build/source/libs/gd/libgd-src/src/snprintf.c
deleted file mode 100644
index 33d1b42c81d..00000000000
--- a/Build/source/libs/gd/libgd-src/src/snprintf.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Provide a snprintf on Windows for older Visual Studio builds.
- * VS2013 and older do not support C99 snprintf(). The subsitute _snprintf()
- * does not correctly NUL-terminate buffers in case of overflow.
- * This implementation emulates the ISO C99 snprintf() for VS2013 and older.
- */
-
-#if defined(_MSC_VER) && _MSC_VER < 1900
-
-#include <stdio.h>
-#include <stdarg.h>
-
-int snprintf(char* buf, size_t len, const char* fmt, ...)
-{
- int n;
- va_list ap;
- va_start(ap, fmt);
-
- n = _vscprintf(fmt, ap);
- vsnprintf_s(buf, len, _TRUNCATE, fmt, ap);
-
- va_end(ap);
- return n;
-}
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/testac.c b/Build/source/libs/gd/libgd-src/src/testac.c
deleted file mode 100644
index bea4308f082..00000000000
--- a/Build/source/libs/gd/libgd-src/src/testac.c
+++ /dev/null
@@ -1,118 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "gd.h"
-
-/* If palette is true, we convert from truecolor to palette at the end,
- to test gdImageTrueColorToPalette and see file size/
- quality tradeoffs. */
-
-void testDrawing (gdImagePtr im_in,
- double scale, int blending, int palette, char *filename);
-
-int
-main (int argc, char *argv[])
-{
- /* Input and output files */
- FILE *in;
-
- /* Input image */
- gdImagePtr im_in = 0;
-
- if (argc != 2) {
- fprintf (stderr, "Usage: testac filename.png\n");
- exit (1);
- }
- /* Load original PNG, which should contain alpha channel
- information. We will use it in two ways: preserving it
- literally, for use with compatible browsers, and
- compositing it ourselves against a background of our
- choosing (alpha blending). We'll change its size
- and try creating palette versions of it. */
- in = fopen (argv[1], "rb");
- if (!in) {
- fprintf (stderr, "Can't load %s.\n", argv[1]);
- exit (1);
- } else {
- im_in = gdImageCreateFromPng (in);
- fclose (in);
- }
- testDrawing (im_in, 1.0, 0, 0, "noblending-fullsize-truecolor.png");
- testDrawing (im_in, 1.0, 1, 0, "blending-fullsize-truecolor.png");
- testDrawing (im_in, 0.5, 0, 0, "noblending-halfsize-truecolor.png");
- testDrawing (im_in, 0.5, 1, 0, "blending-halfsize-truecolor.png");
- testDrawing (im_in, 2.0, 0, 0, "noblending-doublesize-truecolor.png");
- testDrawing (im_in, 2.0, 1, 0, "blending-doublesize-truecolor.png");
- testDrawing (im_in, 1.0, 0, 1, "noblending-fullsize-palette.png");
- testDrawing (im_in, 1.0, 1, 1, "blending-fullsize-palette.png");
- testDrawing (im_in, 0.5, 0, 1, "noblending-halfsize-palette.png");
- testDrawing (im_in, 0.5, 1, 1, "blending-halfsize-palette.png");
- testDrawing (im_in, 2.0, 0, 1, "noblending-doublesize-palette.png");
- testDrawing (im_in, 2.0, 1, 1, "blending-doublesize-palette.png");
- gdImageDestroy (im_in);
-
- return 0;
-}
-
-/* If palette is true, we convert from truecolor to palette at the end,
- to test gdImageTrueColorToPalette and see file size/
- quality tradeoffs. */
-void
-testDrawing (gdImagePtr im_in,
- double scale, int blending, int palette, char *filename)
-{
- gdImagePtr im_out;
- FILE *out;
- /* Create output image. */
- im_out = gdImageCreateTrueColor ((int) (gdImageSX (im_in) * scale),
- (int) (gdImageSY (im_in) * scale));
- /*
- Request alpha blending. This causes future
- drawing operations to perform alpha channel blending
- with the background, resulting in an opaque image.
- Without this call, pixels in the foreground color are
- copied literally, *including* the alpha channel value,
- resulting in an output image which is potentially
- not opaque. This flag can be set and cleared as often
- as desired. */
- gdImageAlphaBlending (im_out, blending);
-
- /* Flood with light blue. */
- gdImageFill (im_out, (int) (gdImageSX (im_in) * scale / 2),
- (int) (gdImageSY (im_in) * scale / 2),
- gdTrueColor (192, 192, 255));
- /* Copy the source image. Alpha blending should result in
- compositing against red. With blending turned off, the
- browser or viewer will composite against its preferred
- background, or, if it does not support an alpha channel,
- we will see the original colors for the pixels that
- ought to be transparent or semitransparent. */
- gdImageCopyResampled (im_out, im_in,
- 0, 0,
- 0, 0,
- (int) (gdImageSX (im_in) * scale),
- (int) (gdImageSY (im_in) * scale), gdImageSX (im_in),
- gdImageSY (im_in));
- /* Write PNG */
- out = fopen (filename, "wb");
-
- /* If this image is the result of alpha channel blending,
- it will not contain an interesting alpha channel itself.
- Save a little file size by not saving the alpha channel.
- Otherwise the file would typically be slightly larger. */
- gdImageSaveAlpha (im_out, !blending);
-
- /* If requested, convert from truecolor to palette. */
- if (palette) {
- /* Dithering, 256 colors. */
- gdImageTrueColorToPalette (im_out, 1, 256);
- }
-
- gdImagePng (im_out, out);
- fclose (out);
-
- gdImageDestroy (im_out);
-}
diff --git a/Build/source/libs/gd/libgd-src/src/testtr.c b/Build/source/libs/gd/libgd-src/src/testtr.c
deleted file mode 100644
index ed1b374a8e8..00000000000
--- a/Build/source/libs/gd/libgd-src/src/testtr.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif /* HAVE_CONFIG_H */
-
-#include <stdio.h>
-#include "gd.h"
-
-#define FALSE 0
-#define TRUE (!FALSE)
-
-int
-main(void)
-{
- int transparent, green, black;
- gdImagePtr im;
-
- im = gdImageCreateTrueColor(100,100);
-
- black = gdImageColorResolveAlpha(im, 0, 0, 0, gdAlphaOpaque);
- green = gdImageColorResolveAlpha(im, 0, gdGreenMax, 0, gdAlphaOpaque);
- transparent = gdImageColorResolveAlpha(im,
- gdRedMax-1, gdGreenMax, gdBlueMax, gdAlphaTransparent);
- gdImageColorTransparent(im, transparent);
-
- /* Blending must be off to lay a transparent basecolor.
- Nothing to blend with anyway. */
- gdImageAlphaBlending(im, FALSE);
- gdImageFill (im, im->sx/2, im->sy/2, transparent);
- /* Blend everything else together,
- especially fonts over non-transparent backgrounds */
- gdImageAlphaBlending(im, TRUE);
-
- gdImageFilledRectangle (im, 30, 30, 70, 70, green);
- gdImageStringFT (im, NULL, black, "Times", 18, 0, 50, 50, "Hello");
-
- gdImageSaveAlpha (im, TRUE);
-#ifdef HAVE_LIBPNG
- {
- FILE *out = fopen("testtr.png", "wb");
- gdImagePng(im, out);
- fclose(out);
- }
-#else
- fprintf(stderr, "Compiled without libpng support\n");
-#endif /* HAVE_LIBPNG */
- gdImageDestroy (im);
-
- return 0;
-}
diff --git a/Build/source/libs/gd/libgd-src/src/wbmp.c b/Build/source/libs/gd/libgd-src/src/wbmp.c
deleted file mode 100644
index 6f187f9b1c5..00000000000
--- a/Build/source/libs/gd/libgd-src/src/wbmp.c
+++ /dev/null
@@ -1,335 +0,0 @@
-/* WBMP
- * ----
- * WBMP Level 0: B/W, Uncompressed
- * This implements the WBMP format as specified in WAPSpec 1.1 and 1.2.
- * It does not support ExtHeaders as defined in the spec. The spec states
- * that a WAP client does not need to implement ExtHeaders.
- *
- * (c) 2000 Johan Van den Brande <johan@vandenbrande.com>
- */
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <stdio.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "wbmp.h"
-#include "gd.h"
-#include "gdhelpers.h"
-
-#ifdef NOTDEF
-# define __TEST /* Compile with main function */
-# define __DEBUG /* Extra verbose when with __TEST */
-# define __WRITE /* readwbmp and writewbmp(stdout) */
-# define __VIEW /* view the wbmp on stdout */
-#endif
-
-/* getmbi
- * ------
- * Get a multibyte integer from a generic getin function
- * 'getin' can be getc, with in = NULL
- * you can find getin as a function just above the main function
- * This way you gain a lot of flexibilty about how this package
- * reads a wbmp file.
- */
-int getmbi(int (*getin) (void *in), void *in)
-{
- unsigned int mbi = 0;
- int i;
-
- do {
- i = getin(in);
- if(i < 0) {
- return (-1);
- }
- mbi = (mbi << 7) | (i & 0x7f);
- } while(i & 0x80);
-
- return mbi;
-}
-
-/* putmbi
- * ------
- * Put a multibyte intgerer in some kind of output stream
- * I work here with a function pointer, to make it as generic
- * as possible. Look at this function as an iterator on the
- * mbi integers it spits out.
- *
- */
-void putmbi(int i, void (*putout)(int c, void *out), void *out)
-{
- int cnt, l, accu;
-
- /* Get number of septets */
- accu = cnt = 0;
- while(accu != i) {
- accu += i & 0x7f << 7 * cnt++;
- }
-
- /* Produce the multibyte output */
- for(l = cnt - 1; l > 0; l--) {
- putout(0x80 | (i & 0x7f << 7 * l) >> 7 * l, out);
- }
-
- putout(i & 0x7f, out);
-}
-
-/* skipheader
- * ----------
- * Skips the ExtHeader. Not needed for the moment
- */
-int skipheader(int (*getin)(void *in), void *in)
-{
- int i;
-
- do {
- i = getin(in);
- if(i < 0) {
- return (-1);
- }
- } while(i & 0x80);
-
- return 0;
-}
-
-/* create wbmp
- * -----------
- * create an empty wbmp
- */
-Wbmp *createwbmp(int width, int height, int color)
-{
- int i;
- Wbmp *wbmp;
-
- if((wbmp = (Wbmp *)gdMalloc(sizeof (Wbmp))) == NULL) {
- return (NULL);
- }
-
- if(overflow2(sizeof(int), width)) {
- gdFree(wbmp);
- return NULL;
- }
-
- if(overflow2(sizeof(int) * width, height)) {
- gdFree(wbmp);
- return NULL;
- }
-
- if((wbmp->bitmap = (int *)gdMalloc(sizeof(int) * width * height)) == NULL) {
- gdFree(wbmp);
- return NULL;
- }
-
- wbmp->width = width;
- wbmp->height = height;
-
- for(i = 0; i < width * height; wbmp->bitmap[i++] = color);
-
- return wbmp;
-}
-
-/* readwbmp
- * -------
- * Actually reads the WBMP format from an open file descriptor
- * It goes along by returning a pointer to a WBMP struct.
- */
-int readwbmp(int (*getin) (void *in), void *in, Wbmp **return_wbmp)
-{
- int row, col, byte, pel, pos;
- Wbmp *wbmp;
-
- if((wbmp = (Wbmp *)gdMalloc(sizeof(Wbmp))) == NULL) {
- return -1;
- }
-
- wbmp->type = getin(in);
- if(wbmp->type != 0) {
- gdFree(wbmp);
- return -1;
- }
-
- if(skipheader(getin, in)) {
- gdFree(wbmp);
- return -1;
- }
-
- wbmp->width = getmbi(getin, in);
- if(wbmp->width == -1) {
- gdFree(wbmp);
- return -1;
- }
-
- wbmp->height = getmbi(getin, in);
- if(wbmp->height == -1) {
- gdFree(wbmp);
- return -1;
- }
-
-#ifdef __DEBUG
- printf("W: %d, H: %d\n", wbmp->width, wbmp->height);
-#endif
-
- if( overflow2(sizeof(int), wbmp->width) ||
- overflow2(sizeof(int) * wbmp->width, wbmp->height)) {
- gdFree(wbmp);
- return -1;
- }
-
- if((wbmp->bitmap = (int *)gdMalloc(sizeof(int) * wbmp->width * wbmp->height)) == NULL) {
- gdFree(wbmp);
- return -1;
- }
-
-#ifdef __DEBUG
- printf("DATA CONSTRUCTED\n");
-#endif
-
- pos = 0;
- for(row = 0; row < wbmp->height; row++) {
- for(col = 0; col < wbmp->width;) {
- byte = getin(in);
-
- for(pel = 7; pel >= 0; pel--) {
- if(col++ < wbmp->width) {
- if(byte & 1 << pel) {
- wbmp->bitmap[pos] = WBMP_WHITE;
- } else {
- wbmp->bitmap[pos] = WBMP_BLACK;
- }
- pos++;
- }
- }
- }
- }
-
- *return_wbmp = wbmp;
-
- return 0;
-}
-
-/* writewbmp
- * ---------
- * Write a wbmp to a file descriptor
- *
- * Why not just giving a filedescriptor to this function?
- * Well, the incentive to write this function was the complete
- * integration in gd library from www.libgd.org. They use
- * their own io functions, so the passing of a function seemed to be
- * a logic(?) decision ...
- */
-int writewbmp(Wbmp *wbmp, void (*putout)(int c, void *out), void *out)
-{
- int row, col;
- int bitpos, octet;
-
- /* Generate the header */
- putout(0, out); /* WBMP Type 0: B/W, Uncompressed bitmap */
- putout(0, out); /* FixHeaderField */
-
- /* Size of the image */
- putmbi(wbmp->width, putout, out); /* width */
- putmbi(wbmp->height, putout, out); /* height */
-
-
- /* Image data */
- for(row = 0; row < wbmp->height; row++) {
- bitpos = 8;
- octet = 0;
-
- for(col = 0; col < wbmp->width; col++) {
- octet |= ((wbmp->bitmap[row * wbmp->width + col] == 1) ? WBMP_WHITE : WBMP_BLACK) << --bitpos;
- if(bitpos == 0) {
- bitpos = 8;
- putout(octet, out);
- octet = 0;
- }
- }
-
- if(bitpos != 8) {
- putout(octet, out);
- }
- }
-
- return 0;
-}
-
-/* freewbmp
- * --------
- * gdFrees up memory occupied by a WBMP structure
- */
-void freewbmp(Wbmp *wbmp)
-{
- gdFree(wbmp->bitmap);
- gdFree(wbmp);
-}
-
-/* printwbmp
- * ---------
- * print a WBMP to stdout for visualisation
- */
-void printwbmp(Wbmp *wbmp)
-{
- int row, col;
-
- for(row = 0; row < wbmp->height; row++) {
- for(col = 0; col < wbmp->width; col++) {
- if(wbmp->bitmap[wbmp->width * row + col] == WBMP_BLACK) {
- putchar('#');
- } else {
- putchar(' ');
- }
- }
- putchar('\n');
- }
-}
-
-#ifdef __TEST
-
-/* putout to file descriptor
- * -------------------------
- */
-int putout(int c, void *out)
-{
- return (putc(c, (FILE *)out));
-}
-
-/* getin from file descriptor
- * --------------------------
- */
-int getin(void *in)
-{
- return (getc((FILE *)in));
-}
-
-/* Main function
- * -------------
- */
-int main(int argc, char *argv[])
-{
- FILE *wbmp_file;
- Wbmp *wbmp;
-
- wbmp_file = fopen(argv[1], "rb");
- if(wbmp_file) {
- readwbmp(&getin, wbmp_file, &wbmp);
-#ifdef __VIEW
-#ifdef __DEBUG
- printf("\nVIEWING IMAGE\n");
-#endif
- printwbmp(wbmp);
-#endif
-#ifdef __WRITE
-#ifdef __DEBUG
- printf("\nDUMPING WBMP to STDOUT\n");
-#endif
- writewbmp(wbmp, &putout, stdout);
-#endif
- freewbmp(wbmp);
- fclose(wbmp_file);
- }
-}
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/wbmp.h b/Build/source/libs/gd/libgd-src/src/wbmp.h
deleted file mode 100644
index 9a93d6ebf09..00000000000
--- a/Build/source/libs/gd/libgd-src/src/wbmp.h
+++ /dev/null
@@ -1,51 +0,0 @@
- /* WBMP
- * ----
- * WBMP Level 0: B/W, Uncompressed
- * This implements the WBMP format as specified in WAPSpec 1.1 and 1.2.
- * It does not support ExtHeaders as defined in the spec. The spec states
- * that a WAP client does not need to implement ExtHeaders.
- *
- * (c) 2000 Johan Van den Brande <johan@vandenbrande.com>
- *
- * Header file
- */
-#ifndef __WBMP_H
-#define __WBMP_H 1
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- /* WBMP struct
- * -----------
- * A Wireless bitmap structure
- */
-
- typedef struct Wbmp_ {
- int type; /* type of the wbmp */
- int width; /* width of the image */
- int height; /* height of the image */
- int *bitmap;/* pointer to data: 0 = WHITE , 1 = BLACK */
- }
- Wbmp;
-
-#define WBMP_WHITE 1
-#define WBMP_BLACK 0
-
- /* Proto's
- * -------
- */
- void putmbi(int i, void (*putout)(int c, void *out), void *out);
- int getmbi(int (*getin)(void *in), void *in);
- int skipheader(int (*getin)(void *in), void *in);
- Wbmp *createwbmp(int width, int height, int color);
- int readwbmp(int (*getin)(void *in), void *in, Wbmp **wbmp);
- int writewbmp(Wbmp *wbmp, void (*putout)(int c, void *out), void *out);
- void freewbmp(Wbmp *wbmp);
- void printwbmp(Wbmp *wbmp);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/Build/source/libs/gd/libgd-src/src/webpng.c b/Build/source/libs/gd/libgd-src/src/webpng.c
deleted file mode 100644
index b376253def9..00000000000
--- a/Build/source/libs/gd/libgd-src/src/webpng.c
+++ /dev/null
@@ -1,293 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* Bring in standard I/O and string manipulation functions */
-#include <stdarg.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef __clang__
-/* Workaround broken clang behavior: https://llvm.org/bugs/show_bug.cgi?id=20144 */
-#undef strcmp
-#endif
-
-/* Bring in the gd library functions */
-#include "gd.h"
-
-#define KEEP_TRANS (-100)
-
-static const char argv0[] = "webpng";
-
-static void usage(const char *msg)
-{
- /* If the command failed, output an explanation. */
- fprintf(msg == NULL ? stdout : stderr,
- "Usage: %s [-i y|n] [-l] [-t index|none] [-d] [-a] pngname.png\n"
- " -i <y|n> Turns on/off interlace\n"
- " -l Prints the table of color indexes\n"
- " -t <index> Set the transparent color to the specified index (0-255 or \"none\")\n"
- " -d Reports the dimensions and other characteristics of the image\n"
- " -a Prints all alpha channels that are not 100%% opaque\n"
- "\n"
- "If you specify '-' as the input file, stdin/stdout will be used as input/output.\n",
- argv0);
- if (msg)
- fprintf(stderr, "\nError: %s\n", msg);
- exit(msg == NULL ? 0 : 1);
-}
-
-static void err(const char *fmt, ...)
-{
- va_list ap;
- int e = errno;
-
- fprintf(stderr, "%s: error: ", argv0);
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- if (e)
- fprintf(stderr, ": %s", strerror(e));
- fputs("\n", stderr);
-
- exit(1);
-}
-
-int
-main(int argc, char **argv)
-{
- FILE *in;
- FILE *out;
- const char *infile;
- char *tmpfile;
- int i;
- int use_stdin_stdout = 0;
-
- int interlace = -100;
- int list_color_table = 0;
- int trans_col = KEEP_TRANS;
- int report_details = 0;
- int print_alpha = 0;
-
- /* Declare our image pointer */
- gdImagePtr im = 0;
- /* We'll set 'write' once we know the user's request
- requires that the image be written back to disk. */
- int write = 0;
- int got_a_flag = 0;
-
- /* Consider each argument in turn. */
- opterr = 0;
- while ((i = getopt(argc, argv, "i:lt:da")) != -1) {
- got_a_flag = 1;
- switch (i) {
- case 'i':
- /* -i turns on and off interlacing. */
- if (strcmp(optarg, "y") == 0)
- interlace = 1;
- else if (strcmp(optarg, "n") == 0)
- interlace = 0;
- else
- usage("-i specified without y or n");
- write = 1;
- break;
-
- case 'l':
- /* List the colors in the color table. */
- list_color_table = 1;
- break;
-
- case 't':
- /* Set transparent index (or none). */
- if (strcmp(optarg, "none") == 0) {
- /* -1 means not transparent. */
- trans_col = -1;
- } else {
- /* XXX: Should check for errors. */
- trans_col = atoi(optarg);
- if (trans_col < 0 || trans_col > 255)
- err("-t has to be in the range of 0 and 255 (inclusive)");
- }
- write = 1;
- break;
-
- case 'd':
- /* Output dimensions, etc. */
- report_details = 1;
- break;
-
- case 'a':
- /* Alpha channel info -- thanks to Wez Furlong */
- print_alpha = 1;
- break;
-
- case 'h':
- usage(NULL);
- break;
- default:
- case '?':
- if (optind < argc && strcmp(argv[optind], "--help") == 0)
- usage(NULL);
- usage("unknown option");
- break;
- }
- }
-
- if (got_a_flag == 0)
- usage("missing operation flag");
-
- if (argc == optind)
- usage("missing filename");
- else if (argc != optind + 1)
- usage("can only specify one file");
-
- infile = argv[optind];
- if (strcmp(infile, "-") == 0) {
- /* - is synonymous with STDIN */
- use_stdin_stdout = 1;
- in = stdin;
- } else
- in = fopen(infile, "rb");
-
- if (!in)
- err("can't open file %s", infile);
-
- /* Now load the image. */
- im = gdImageCreateFromPng(in);
- fclose(in);
- /* If the load failed, it must not be a PNG file. */
- if (!im)
- err("%s is not a valid PNG file", infile);
-
- if (list_color_table) {
- /* List the colors in the color table. */
- if (!im->trueColor) {
- int j;
- /* Tabs used below. */
- printf("Index Red Green Blue Alpha\n");
- for (j = 0; j < gdImageColorsTotal(im); ++j) {
- /* Use access macros to learn colors. */
- printf("%d %d %d %d %d\n", j,
- gdImageRed(im, j),
- gdImageGreen(im, j),
- gdImageBlue(im, j),
- gdImageAlpha(im, j));
- }
- } else
- printf("Truecolor image, no palette entries to list.\n");
- }
-
- if (report_details) {
- /* Output dimensions, etc. */
- int t;
- printf("Width: %d Height: %d Colors: %d\n",
- gdImageSX(im),
- gdImageSY(im),
- gdImageColorsTotal(im));
-
- /* -1 means the image is not transparent. */
- t = gdImageGetTransparent(im);
- if (t != -1)
- printf("First 100%% transparent index: %d\n", t);
- else
- printf("First 100%% transparent index: none\n");
-
- if (gdImageGetInterlaced(im))
- printf("Interlaced: yes\n");
- else
- printf("Interlaced: no\n");
- }
-
- if (print_alpha) {
- /* Alpha channel info -- thanks to Wez Furlong */
- int maxx, maxy, x, y, alpha, pix, nalpha = 0;
-
- maxx = gdImageSX(im);
- maxy = gdImageSY(im);
-
- printf("alpha channel information:\n");
-
- if (im->trueColor) {
- for (y = 0; y < maxy; y++) {
- for (x = 0; x < maxx; x++) {
- pix = gdImageGetPixel(im, x, y);
- alpha = gdTrueColorGetAlpha(pix);
-
- if (alpha > gdAlphaOpaque) {
- /* Use access macros to learn colors. */
- printf("%d %d %d %d\n",
- gdTrueColorGetRed(pix),
- gdTrueColorGetGreen(pix),
- gdTrueColorGetBlue(pix),
- alpha);
- nalpha++;
- }
-
- }
- }
- } else
- printf("NOT a true color image\n");
-
- printf("%d alpha channels\n", nalpha);
- }
-
- /* If no modifications requested, break out. */
- if (write == 0) {
- gdImageDestroy(im);
- return 0;
- }
-
- if (interlace == 1)
- gdImageInterlace(im, 1);
- else if (interlace == 0)
- gdImageInterlace(im, 0);
-
- if (trans_col != KEEP_TRANS)
- gdImageColorTransparent(im, trans_col);
-
- if (use_stdin_stdout) {
- out = stdout;
- } else {
- /* Open a temporary file. */
- size_t filelen = strlen(infile);
- size_t len = filelen + 8;
- int outfd;
-
- tmpfile = malloc(len);
- if (tmpfile == NULL)
- err("could not create a tempfile");
- memcpy(tmpfile, infile, filelen);
- strcpy(tmpfile + filelen, ".XXXXXX");
-
- outfd = mkstemp(tmpfile);
- if (outfd == -1)
- err("could not open %s", tmpfile);
-
- out = fdopen(outfd, "wb");
- if (!out)
- err("could not open %s", tmpfile);
- }
-
- /* Write the new PNG. */
- gdImagePng(im, out);
-
- if (!use_stdin_stdout) {
- fclose(out);
- /* Erase the old PNG. */
- unlink(infile);
- /* Rename the new to the old. */
- if (rename(tmpfile, infile) != 0)
- err("unable to rename %s to %s", infile, tmpfile);
- }
-
- /* Delete the image from memory. */
- gdImageDestroy(im);
-
- /* All's well that ends well. */
- return 0;
-}