Mercurial > hg > orthanc
changeset 1610:2dff2bdffdb8
font support within Orthanc
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 04 Sep 2015 13:44:21 +0200 |
parents | c74495267acf |
children | 5e9b2aac8b89 |
files | CMakeLists.txt Core/Enumerations.cpp Core/Enumerations.h Core/ImageFormats/Font.cpp Core/ImageFormats/Font.h Core/ImageFormats/FontRegistry.cpp Core/ImageFormats/FontRegistry.h Core/ImageFormats/ImageProcessing.cpp Core/ImageFormats/JpegReader.cpp Core/ImageFormats/PngReader.cpp OrthancServer/OrthancInitialization.cpp OrthancServer/OrthancInitialization.h Plugins/Include/orthanc/OrthancCPlugin.h Resources/ErrorCodes.json Resources/Fonts/GenerateFont.py Resources/Fonts/README.txt Resources/Fonts/UbuntuMonoBold-16.json UnitTestsSources/ImageTests.cpp |
diffstat | 18 files changed, 741 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Wed Sep 02 15:07:47 2015 +0200 +++ b/CMakeLists.txt Fri Sep 04 13:44:21 2015 +0200 @@ -121,6 +121,8 @@ Core/MultiThreading/ReaderWriterLock.cpp Core/MultiThreading/Semaphore.cpp Core/MultiThreading/SharedMessageQueue.cpp + Core/ImageFormats/Font.cpp + Core/ImageFormats/FontRegistry.cpp Core/ImageFormats/ImageAccessor.cpp Core/ImageFormats/ImageBuffer.cpp Core/ImageFormats/ImageProcessing.cpp @@ -236,6 +238,7 @@ CONFIGURATION_SAMPLE ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Configuration.json DICOM_CONFORMANCE_STATEMENT ${CMAKE_CURRENT_SOURCE_DIR}/Resources/DicomConformanceStatement.txt LUA_TOOLBOX ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Toolbox.lua + FONT_UBUNTU_MONO_BOLD_16 ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Fonts/UbuntuMonoBold-16.json )
--- a/Core/Enumerations.cpp Wed Sep 02 15:07:47 2015 +0200 +++ b/Core/Enumerations.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -139,6 +139,9 @@ case ErrorCode_Unauthorized: return "Bad credentials were provided to an HTTP request"; + case ErrorCode_BadFont: + return "Badly formatted font file"; + case ErrorCode_SQLiteNotOpened: return "SQLite: The database is not opened";
--- a/Core/Enumerations.h Wed Sep 02 15:07:47 2015 +0200 +++ b/Core/Enumerations.h Fri Sep 04 13:44:21 2015 +0200 @@ -76,6 +76,7 @@ ErrorCode_UnknownDicomTag = 27 /*!< Unknown DICOM tag */, ErrorCode_BadJson = 28 /*!< Cannot parse a JSON document */, ErrorCode_Unauthorized = 29 /*!< Bad credentials were provided to an HTTP request */, + ErrorCode_BadFont = 30 /*!< Badly formatted font file */, ErrorCode_SQLiteNotOpened = 1000 /*!< SQLite: The database is not opened */, ErrorCode_SQLiteAlreadyOpened = 1001 /*!< SQLite: Connection is already open */, ErrorCode_SQLiteCannotOpen = 1002 /*!< SQLite: Unable to open the database */,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Core/ImageFormats/Font.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,298 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#include "../PrecompiledHeaders.h" +#include "Font.h" + +#include "../Toolbox.h" +#include "../OrthancException.h" + +#include <stdio.h> +#include <memory> +#include <boost/lexical_cast.hpp> + +namespace Orthanc +{ + Font::~Font() + { + for (Characters::iterator it = characters_.begin(); + it != characters_.end(); it++) + { + delete it->second; + } + } + + + void Font::LoadFromMemory(const std::string& font) + { + Json::Value v; + Json::Reader reader; + if (!reader.parse(font, v) || + v.type() != Json::objectValue || + !v.isMember("Name") || + !v.isMember("Size") || + !v.isMember("Characters") || + v["Name"].type() != Json::stringValue || + v["Size"].type() != Json::intValue || + v["Characters"].type() != Json::objectValue) + { + throw OrthancException(ErrorCode_BadFont); + } + + name_ = v["Name"].asString(); + size_ = v["Size"].asUInt(); + maxHeight_ = 0; + + Json::Value::Members characters = v["Characters"].getMemberNames(); + + for (size_t i = 0; i < characters.size(); i++) + { + const Json::Value& info = v["Characters"][characters[i]]; + if (info.type() != Json::objectValue || + !info.isMember("Advance") || + !info.isMember("Bitmap") || + !info.isMember("Height") || + !info.isMember("Top") || + !info.isMember("Width") || + info["Advance"].type() != Json::intValue || + info["Bitmap"].type() != Json::arrayValue || + info["Height"].type() != Json::intValue || + info["Top"].type() != Json::intValue || + info["Width"].type() != Json::intValue) + { + throw OrthancException(ErrorCode_BadFont); + } + + std::auto_ptr<Character> c(new Character); + + c->advance_ = info["Advance"].asUInt(); + c->height_ = info["Height"].asUInt(); + c->top_ = info["Top"].asUInt(); + c->width_ = info["Width"].asUInt(); + c->bitmap_.resize(info["Bitmap"].size()); + + if (c->height_ > maxHeight_) + { + maxHeight_ = c->height_; + } + + for (Json::Value::ArrayIndex j = 0; j < info["Bitmap"].size(); j++) + { + if (info["Bitmap"][j].type() != Json::intValue) + { + throw OrthancException(ErrorCode_BadFont); + } + + int value = info["Bitmap"][j].asInt(); + if (value < 0 || value > 255) + { + throw OrthancException(ErrorCode_BadFont); + } + + c->bitmap_[j] = value; + } + + int index = boost::lexical_cast<int>(characters[i]); + if (index < 0 || index > 255) + { + throw OrthancException(ErrorCode_BadFont); + } + + characters_[static_cast<char>(index)] = c.release(); + } + } + + + void Font::LoadFromFile(const std::string& path) + { + std::string font; + Toolbox::ReadFile(font, path); + LoadFromMemory(font); + } + + + static unsigned int MyMin(unsigned int a, + unsigned int b) + { + return a < b ? a : b; + } + + + void Font::DrawCharacter(ImageAccessor& target, + const Character& character, + int x, + int y, + const uint8_t color[4]) const + { + // Compute the bounds of the character + if (x >= static_cast<int>(target.GetWidth()) || + y >= static_cast<int>(target.GetHeight())) + { + // The character is out of the image + return; + } + + unsigned int left = x < 0 ? -x : 0; + unsigned int top = y < 0 ? -y : 0; + unsigned int width = MyMin(character.width_, target.GetWidth() - x); + unsigned int height = MyMin(character.height_, target.GetHeight() - y); + + uint8_t bpp = target.GetBytesPerPixel(); + + // Blit the font bitmap OVER the target image + // https://en.wikipedia.org/wiki/Alpha_compositing + + for (unsigned int cy = top; cy < height; cy++) + { + uint8_t* p = reinterpret_cast<uint8_t*>(target.GetRow(y + cy)) + (x + left) * bpp; + unsigned int pos = cy * character.width_ + left; + + switch (target.GetFormat()) + { + case PixelFormat_Grayscale8: + { + assert(bpp == 1); + for (unsigned int cx = left; cx < width; cx++, pos++, p++) + { + uint16_t alpha = character.bitmap_[pos]; + *p = (alpha * static_cast<uint16_t>(color[0]) + (255 - alpha) * static_cast<uint16_t>(*p)) >> 8; + } + + break; + } + + case PixelFormat_RGB24: + { + assert(bpp == 3); + for (unsigned int cx = left; cx < width; cx++, pos++, p += 3) + { + uint16_t alpha = character.bitmap_[pos]; + p[0] = (alpha * static_cast<uint16_t>(color[0]) + (255 - alpha) * static_cast<uint16_t>(p[0])) >> 8; + p[1] = (alpha * static_cast<uint16_t>(color[1]) + (255 - alpha) * static_cast<uint16_t>(p[1])) >> 8; + p[2] = (alpha * static_cast<uint16_t>(color[2]) + (255 - alpha) * static_cast<uint16_t>(p[2])) >> 8; + } + + break; + } + + case PixelFormat_RGBA32: + { + assert(bpp == 4); + + for (unsigned int cx = left; cx < width; cx++, pos++, p += 4) + { + float alpha = static_cast<float>(character.bitmap_[pos]) / 255.0f; + float beta = (1.0f - alpha) * static_cast<float>(p[3]) / 255.0f; + float denom = 1.0f / (alpha + beta); + + for (uint8_t i = 0; i < 3; i++) + { + p[i] = static_cast<uint8_t>((alpha * static_cast<float>(color[i]) + + beta * static_cast<float>(p[i])) * denom); + } + + p[3] = static_cast<uint8_t>(255.0f * (alpha + beta)); + } + + break; + } + + default: + throw OrthancException(ErrorCode_NotImplemented); + } + } + + } + + + void Font::DrawInternal(ImageAccessor& target, + const std::string& utf8, + int x, + int y, + const uint8_t color[4]) const + { + if (target.GetFormat() != PixelFormat_Grayscale8 && + target.GetFormat() != PixelFormat_RGB24 && + target.GetFormat() != PixelFormat_RGBA32) + { + throw OrthancException(ErrorCode_NotImplemented); + } + + int a = x; + + std::string s = Toolbox::ConvertFromUtf8(utf8, Encoding_Latin1); + + for (size_t i = 0; i < s.size(); i++) + { + if (s[i] == '\n') + { + // Go to the next line + a = x; + y += maxHeight_ + 1; + } + else + { + Characters::const_iterator c = characters_.find(s[i]); + if (c != characters_.end()) + { + DrawCharacter(target, *c->second, a, y + static_cast<int>(c->second->top_), color); + a += c->second->advance_; + } + } + } + } + + + void Font::DrawText(ImageAccessor& target, + const std::string& utf8, + int x, + int y, + uint8_t grayscale) const + { + uint8_t color[4] = { grayscale, grayscale, grayscale, 255 }; + DrawInternal(target, utf8, x, y, color); + } + + + void Font::DrawText(ImageAccessor& target, + const std::string& utf8, + int x, + int y, + uint8_t r, + uint8_t g, + uint8_t b) const + { + uint8_t color[4] = { r, g, b, 255 }; + DrawInternal(target, utf8, x, y, color); + } + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Core/ImageFormats/Font.h Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,105 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "ImageAccessor.h" + +#include <stdint.h> +#include <vector> +#include <map> + +namespace Orthanc +{ + class Font + { + private: + struct Character + { + unsigned int width_; + unsigned int height_; + unsigned int top_; + unsigned int advance_; + std::vector<uint8_t> bitmap_; + }; + + typedef std::map<char, Character*> Characters; + + std::string name_; + unsigned int size_; + Characters characters_; + unsigned int maxHeight_; + + void DrawCharacter(ImageAccessor& target, + const Character& character, + int x, + int y, + const uint8_t color[4]) const; + + void DrawInternal(ImageAccessor& target, + const std::string& utf8, + int x, + int y, + const uint8_t color[4]) const; + + public: + ~Font(); + + void LoadFromMemory(const std::string& font); + + void LoadFromFile(const std::string& path); + + const std::string& GetName() const + { + return name_; + } + + unsigned int GetSize() const + { + return size_; + } + + void DrawText(ImageAccessor& target, + const std::string& utf8, + int x, + int y, + uint8_t grayscale) const; + + void DrawText(ImageAccessor& target, + const std::string& utf8, + int x, + int y, + uint8_t r, + uint8_t g, + uint8_t b) const; + }; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Core/ImageFormats/FontRegistry.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,86 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#include "../PrecompiledHeaders.h" +#include "FontRegistry.h" + +#include "../OrthancException.h" + +#include <memory> + +namespace Orthanc +{ + FontRegistry::~FontRegistry() + { + for (Fonts::iterator it = fonts_.begin(); it != fonts_.end(); ++it) + { + delete *it; + } + } + + + void FontRegistry::AddFromMemory(const std::string& font) + { + std::auto_ptr<Font> f(new Font); + f->LoadFromMemory(font); + fonts_.push_back(f.release()); + } + + + void FontRegistry::AddFromFile(const std::string& path) + { + std::auto_ptr<Font> f(new Font); + f->LoadFromFile(path); + fonts_.push_back(f.release()); + } + + + void FontRegistry::AddFromResource(EmbeddedResources::FileResourceId resource) + { + std::string content; + EmbeddedResources::GetFileResource(content, resource); + AddFromMemory(content); + } + + + const Font& FontRegistry::GetFont(size_t i) const + { + if (i >= fonts_.size()) + { + throw OrthancException(ErrorCode_ParameterOutOfRange); + } + else + { + return *fonts_[i]; + } + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Core/ImageFormats/FontRegistry.h Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,64 @@ +/** + * Orthanc - A Lightweight, RESTful DICOM Store + * Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics + * Department, University Hospital of Liege, Belgium + * + * This program is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * In addition, as a special exception, the copyright holders of this + * program give permission to link the code of its release with the + * OpenSSL project's "OpenSSL" library (or with modified versions of it + * that use the same license as the "OpenSSL" library), and distribute + * the linked executables. You must obey the GNU General Public License + * in all respects for all of the code used other than "OpenSSL". If you + * modify file(s) with this exception, you may extend this exception to + * your version of the file(s), but you are not obligated to do so. If + * you do not wish to do so, delete this exception statement from your + * version. If you delete this exception statement from all source files + * in the program, then also delete it here. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + **/ + + +#pragma once + +#include "Font.h" + +#include <EmbeddedResources.h> // Autogenerated file + +namespace Orthanc +{ + class FontRegistry + { + private: + typedef std::vector<Font*> Fonts; + + Fonts fonts_; + + public: + ~FontRegistry(); + + void AddFromMemory(const std::string& font); + + void AddFromFile(const std::string& path); + + void AddFromResource(EmbeddedResources::FileResourceId resource); + + size_t GetSize() const + { + return fonts_.size(); + } + + const Font& GetFont(size_t i) const; + }; +}
--- a/Core/ImageFormats/ImageProcessing.cpp Wed Sep 02 15:07:47 2015 +0200 +++ b/Core/ImageFormats/ImageProcessing.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -378,6 +378,25 @@ return; } + if (target.GetFormat() == PixelFormat_Grayscale8 && + source.GetFormat() == PixelFormat_RGBA32) + { + for (unsigned int y = 0; y < source.GetHeight(); y++) + { + const uint8_t* p = reinterpret_cast<const uint8_t*>(source.GetConstRow(y)); + uint8_t* q = reinterpret_cast<uint8_t*>(target.GetRow(y)); + for (unsigned int x = 0; x < source.GetWidth(); x++, q++) + { + *q = static_cast<uint8_t>((2126 * static_cast<uint32_t>(p[0]) + + 7152 * static_cast<uint32_t>(p[1]) + + 0722 * static_cast<uint32_t>(p[2])) / 10000); + p += 4; + } + } + + return; + } + if (target.GetFormat() == PixelFormat_RGB24 && source.GetFormat() == PixelFormat_RGBA32) {
--- a/Core/ImageFormats/JpegReader.cpp Wed Sep 02 15:07:47 2015 +0200 +++ b/Core/ImageFormats/JpegReader.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -76,8 +76,8 @@ throw OrthancException(ErrorCode_NotEnoughMemory); } - accessor.AssignReadOnly(format, cinfo.output_width, cinfo.output_height, pitch, - content.empty() ? NULL : content.c_str()); + accessor.AssignWritable(format, cinfo.output_width, cinfo.output_height, pitch, + content.empty() ? NULL : &content[0]); uint8_t* target = reinterpret_cast<uint8_t*>(&content[0]); while (cinfo.output_scanline < cinfo.output_height)
--- a/Core/ImageFormats/PngReader.cpp Wed Sep 02 15:07:47 2015 +0200 +++ b/Core/ImageFormats/PngReader.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -201,7 +201,7 @@ png_read_image(rabi.png_, &rows[0]); - AssignReadOnly(format, width, height, pitch, &data_[0]); + AssignWritable(format, width, height, pitch, &data_[0]); } void PngReader::ReadFromFile(const char* filename)
--- a/OrthancServer/OrthancInitialization.cpp Wed Sep 02 15:07:47 2015 +0200 +++ b/OrthancServer/OrthancInitialization.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -75,6 +75,7 @@ static Json::Value configuration_; static boost::filesystem::path defaultDirectory_; static std::string configurationAbsolutePath_; + static FontRegistry fontRegistry_; static std::string GetGlobalStringParameterInternal(const std::string& parameter, @@ -348,6 +349,8 @@ LOG(WARNING) << "Registering JPEG codecs"; DJDecoderRegistration::registerCodecs(); #endif + + fontRegistry_.AddFromResource(EmbeddedResources::FONT_UBUNTU_MONO_BOLD_16); } @@ -920,7 +923,6 @@ } - void Configuration::GetConfiguration(Json::Value& result) { boost::mutex::scoped_lock lock(globalMutex_); @@ -936,4 +938,10 @@ Json::StyledWriter w; result = w.write(config); } + + + const FontRegistry& Configuration::GetFontRegistry() + { + return fontRegistry_; + } }
--- a/OrthancServer/OrthancInitialization.h Wed Sep 02 15:07:47 2015 +0200 +++ b/OrthancServer/OrthancInitialization.h Fri Sep 04 13:44:21 2015 +0200 @@ -42,6 +42,7 @@ #include "OrthancPeerParameters.h" #include "IDatabaseWrapper.h" #include "../Core/FileStorage/IStorageArea.h" +#include "../Core/ImageFormats/FontRegistry.h" namespace Orthanc { @@ -112,5 +113,7 @@ static void GetConfiguration(Json::Value& result); static void FormatConfiguration(std::string& result); + + static const FontRegistry& GetFontRegistry(); }; }
--- a/Plugins/Include/orthanc/OrthancCPlugin.h Wed Sep 02 15:07:47 2015 +0200 +++ b/Plugins/Include/orthanc/OrthancCPlugin.h Fri Sep 04 13:44:21 2015 +0200 @@ -209,6 +209,7 @@ OrthancPluginErrorCode_UnknownDicomTag = 27 /*!< Unknown DICOM tag */, OrthancPluginErrorCode_BadJson = 28 /*!< Cannot parse a JSON document */, OrthancPluginErrorCode_Unauthorized = 29 /*!< Bad credentials were provided to an HTTP request */, + OrthancPluginErrorCode_BadFont = 30 /*!< Badly formatted font file */, OrthancPluginErrorCode_SQLiteNotOpened = 1000 /*!< SQLite: The database is not opened */, OrthancPluginErrorCode_SQLiteAlreadyOpened = 1001 /*!< SQLite: Connection is already open */, OrthancPluginErrorCode_SQLiteCannotOpen = 1002 /*!< SQLite: Unable to open the database */,
--- a/Resources/ErrorCodes.json Wed Sep 02 15:07:47 2015 +0200 +++ b/Resources/ErrorCodes.json Fri Sep 04 13:44:21 2015 +0200 @@ -169,13 +169,16 @@ "HttpStatus": 401, "Name": "Unauthorized", "Description": "Bad credentials were provided to an HTTP request" + }, + { + "Code": 30, + "Name": "BadFont", + "Description": "Badly formatted font file" }, - - /** SQLite **/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Fonts/GenerateFont.py Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,113 @@ +#!/usr/bin/python + +# Orthanc - A Lightweight, RESTful DICOM Store +# Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics +# Department, University Hospital of Liege, Belgium +# +# This program is free software: you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# In addition, as a special exception, the copyright holders of this +# program give permission to link the code of its release with the +# OpenSSL project's "OpenSSL" library (or with modified versions of it +# that use the same license as the "OpenSSL" library), and distribute +# the linked executables. You must obey the GNU General Public License +# in all respects for all of the code used other than "OpenSSL". If you +# modify file(s) with this exception, you may extend this exception to +# your version of the file(s), but you are not obligated to do so. If +# you do not wish to do so, delete this exception statement from your +# version. If you delete this exception statement from all source files +# in the program, then also delete it here. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + + + +# sudo pip install freetype-py + + + +import freetype +import json +import os +import sys +import unicodedata + + +if len(sys.argv) != 3: + print('Usage: %s <Font> <Size>\n' % sys.argv[0]) + print('Example: %s /usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-B.ttf 16\n' % sys.argv[0]) + sys.exit(-1) + + + +FONT = sys.argv[1] +PIXEL_SIZE = int(sys.argv[2]) +CHARSET = 'latin-1' + + +# Load the font +face = freetype.Face(FONT) +face.set_char_size(PIXEL_SIZE * 64) + +# Generate all the characters between 0 and 255 +characters = ''.join(map(chr, range(0, 256))) + +# Interpret the string using the required charset +characters = characters.decode(CHARSET, 'ignore') + +# Keep only non-control characters +characters = filter(lambda c: unicodedata.category(c)[0] != 'C', characters) + +font = { + 'Name' : os.path.basename(FONT), + 'Size' : PIXEL_SIZE, + 'Characters' : {} +} + + +def PrintCharacter(c): + pos = 0 + for i in range(c['Height']): + s = '' + for j in range(c['Width']): + if c['Bitmap'][pos] > 127: + s += '*' + else: + s += ' ' + pos += 1 + print s + + +for c in characters: + face.load_char(c) + + info = { + 'Width' : face.glyph.bitmap.width, + 'Height' : face.glyph.bitmap.rows, + 'Advance' : face.glyph.metrics.horiAdvance / 64, + 'Top' : -face.glyph.metrics.horiBearingY / 64, + 'Bitmap' : face.glyph.bitmap.buffer, + } + + font['Characters'][ord(c)] = info + + #PrintCharacter(info) + +minTop = min(map(lambda (k, v): v['Top'], font['Characters'].iteritems())) +for c in font['Characters']: + font['Characters'][c]['Top'] -= minTop + +font['MaxAdvance'] = max(map(lambda (k, v): v['Advance'], font['Characters'].iteritems())) +font['MaxHeight'] = max(map(lambda (k, v): v['Height'], font['Characters'].iteritems())) + +print json.dumps(font)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Fonts/README.txt Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,6 @@ +This file contains a precompiled version of several open-source fonts, +that are used to draw text on images within Orthanc. These fonts are +encoded as JSON files through the "./GenerateFont.py" script. + +- UbuntuMonoBold-16.json is the Ubuntu Mono Bold, size 16, licensed + under the Ubuntu Font Licence.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Resources/Fonts/UbuntuMonoBold-16.json Fri Sep 04 13:44:21 2015 +0200 @@ -0,0 +1,1 @@ +{"MaxAdvance": 9, "MaxHeight": 15, "Name": "UbuntuMono-B.ttf", "Characters": {"32": {"Width": 0, "Advance": 8, "Bitmap": [], "Top": 14, "Height": 0}, "33": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 254, 251, 245, 242, 224, 223, 196, 199, 0, 0, 199, 198, 199, 198], "Top": 4, "Height": 10}, "34": {"Width": 5, "Advance": 8, "Bitmap": [255, 255, 0, 255, 255, 248, 247, 0, 248, 247, 226, 226, 0, 226, 226, 197, 196, 0, 197, 196, 160, 160, 0, 160, 162], "Top": 3, "Height": 5}, "35": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 31, 255, 254, 255, 225, 0, 0, 0, 93, 255, 250, 255, 163, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 234, 255, 255, 255, 21, 0, 0, 25, 255, 253, 255, 231, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 163, 243, 161, 255, 93, 0, 0, 0, 225, 94, 105, 255, 31, 0, 0], "Top": 4, "Height": 10}, "36": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 8, 0, 33, 198, 255, 255, 248, 169, 190, 255, 255, 255, 255, 202, 246, 255, 46, 8, 44, 66, 216, 255, 231, 148, 27, 0, 71, 243, 255, 255, 239, 59, 0, 23, 115, 205, 255, 205, 82, 56, 10, 42, 255, 246, 211, 255, 255, 255, 255, 209, 120, 227, 255, 255, 245, 72, 0, 0, 255, 255, 15, 0, 0, 0, 255, 255, 0, 0], "Top": 3, "Height": 13}, "37": {"Width": 7, "Advance": 8, "Bitmap": [127, 242, 123, 0, 0, 77, 179, 240, 57, 239, 0, 8, 213, 33, 240, 55, 239, 0, 128, 127, 0, 126, 243, 123, 34, 213, 8, 0, 0, 0, 0, 179, 76, 0, 0, 0, 0, 77, 179, 0, 0, 0, 0, 8, 213, 33, 126, 59, 124, 0, 128, 127, 0, 240, 6, 239, 34, 213, 8, 0, 240, 68, 240, 179, 76, 0, 0, 128, 243, 126], "Top": 4, "Height": 10}, "38": {"Width": 9, "Advance": 8, "Bitmap": [0, 39, 190, 245, 206, 57, 0, 0, 0, 0, 201, 255, 255, 255, 219, 0, 0, 0, 0, 242, 255, 55, 255, 233, 0, 0, 0, 0, 184, 255, 116, 255, 110, 0, 0, 0, 0, 128, 255, 255, 130, 6, 188, 52, 0, 102, 255, 103, 202, 235, 70, 255, 70, 0, 225, 255, 11, 26, 231, 249, 255, 45, 0, 240, 255, 82, 17, 174, 255, 255, 17, 0, 162, 255, 255, 255, 255, 255, 255, 125, 0, 14, 152, 229, 240, 188, 114, 255, 235, 7], "Top": 4, "Height": 10}, "39": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 251, 250, 230, 230, 200, 199, 161, 163], "Top": 3, "Height": 5}, "40": {"Width": 5, "Advance": 8, "Bitmap": [0, 0, 9, 152, 142, 0, 12, 199, 253, 110, 0, 166, 255, 118, 0, 46, 255, 207, 2, 0, 146, 255, 106, 0, 0, 209, 255, 40, 0, 0, 239, 255, 12, 0, 0, 242, 255, 14, 0, 0, 213, 255, 43, 0, 0, 157, 255, 117, 0, 0, 58, 255, 219, 8, 0, 0, 180, 255, 153, 0, 0, 17, 207, 255, 160, 0, 0, 12, 157, 119], "Top": 3, "Height": 14}, "41": {"Width": 6, "Advance": 8, "Bitmap": [120, 194, 49, 0, 0, 0, 82, 230, 250, 103, 0, 0, 0, 23, 219, 255, 93, 0, 0, 0, 32, 242, 243, 24, 0, 0, 0, 129, 255, 131, 0, 0, 0, 45, 255, 208, 0, 0, 0, 8, 255, 245, 0, 0, 0, 9, 255, 247, 0, 0, 0, 50, 255, 216, 0, 0, 0, 140, 255, 146, 0, 0, 50, 247, 250, 37, 0, 47, 235, 255, 117, 0, 121, 250, 253, 123, 0, 0, 80, 201, 60, 0, 0, 0], "Top": 3, "Height": 14}, "42": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 136, 189, 68, 255, 66, 183, 136, 213, 255, 255, 255, 255, 255, 214, 0, 7, 161, 248, 162, 8, 0, 0, 174, 255, 132, 255, 176, 0, 0, 67, 187, 4, 185, 63, 0], "Top": 4, "Height": 7}, "43": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 6, "Height": 8}, "44": {"Width": 4, "Advance": 8, "Bitmap": [0, 140, 243, 125, 0, 246, 255, 240, 0, 166, 255, 234, 0, 40, 255, 177, 49, 203, 240, 42, 204, 174, 39, 0], "Top": 11, "Height": 6}, "45": {"Width": 4, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255], "Top": 9, "Height": 2}, "46": {"Width": 3, "Advance": 9, "Bitmap": [91, 243, 85, 234, 255, 212, 91, 244, 85], "Top": 11, "Height": 3}, "47": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 47, 255, 217, 0, 0, 0, 0, 124, 255, 139, 0, 0, 0, 0, 201, 255, 62, 0, 0, 0, 24, 254, 237, 3, 0, 0, 0, 99, 255, 164, 0, 0, 0, 0, 176, 255, 87, 0, 0, 0, 8, 245, 250, 15, 0, 0, 0, 75, 255, 189, 0, 0, 0, 0, 152, 255, 111, 0, 0, 0, 0, 228, 255, 34, 0, 0, 0, 50, 255, 213, 0, 0, 0, 0, 127, 255, 136, 0, 0, 0, 0, 204, 255, 59, 0, 0, 0, 26, 254, 235, 2, 0, 0, 0], "Top": 3, "Height": 14}, "48": {"Width": 6, "Advance": 8, "Bitmap": [0, 125, 237, 238, 130, 0, 85, 255, 255, 255, 255, 89, 183, 255, 112, 114, 255, 184, 231, 255, 28, 30, 255, 231, 251, 255, 205, 204, 255, 250, 251, 255, 205, 204, 255, 249, 232, 255, 28, 30, 255, 230, 185, 255, 112, 114, 255, 184, 90, 255, 255, 255, 255, 89, 0, 131, 238, 238, 131, 0], "Top": 4, "Height": 10}, "49": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 48, 216, 255, 0, 0, 49, 161, 252, 255, 255, 0, 0, 196, 255, 221, 255, 255, 0, 0, 56, 80, 3, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "50": {"Width": 7, "Advance": 8, "Bitmap": [0, 31, 166, 239, 236, 162, 19, 0, 206, 255, 255, 255, 255, 177, 0, 93, 125, 21, 76, 255, 247, 0, 0, 0, 0, 22, 255, 200, 0, 0, 0, 5, 182, 247, 54, 0, 0, 9, 184, 244, 73, 0, 0, 3, 184, 233, 49, 0, 0, 0, 117, 255, 60, 0, 0, 0, 0, 227, 255, 255, 255, 255, 255, 0, 253, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "51": {"Width": 6, "Advance": 8, "Bitmap": [78, 198, 247, 226, 148, 13, 201, 255, 255, 255, 255, 155, 66, 71, 13, 62, 255, 236, 0, 0, 12, 99, 255, 226, 0, 255, 255, 255, 250, 88, 0, 255, 255, 255, 251, 95, 0, 1, 16, 94, 255, 228, 69, 33, 7, 76, 255, 239, 215, 255, 255, 255, 255, 162, 145, 222, 251, 233, 144, 13], "Top": 4, "Height": 10}, "52": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 64, 249, 255, 0, 0, 0, 34, 238, 255, 255, 0, 0, 3, 198, 241, 255, 255, 0, 0, 119, 255, 91, 255, 255, 0, 33, 246, 179, 0, 255, 255, 0, 165, 252, 37, 0, 255, 255, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0], "Top": 4, "Height": 10}, "53": {"Width": 6, "Advance": 8, "Bitmap": [0, 171, 255, 255, 255, 255, 0, 184, 255, 255, 255, 255, 0, 198, 236, 0, 0, 0, 0, 221, 255, 215, 118, 2, 0, 244, 255, 255, 255, 118, 0, 4, 34, 154, 255, 218, 0, 0, 0, 12, 255, 246, 60, 25, 8, 96, 255, 216, 213, 255, 255, 255, 255, 108, 156, 231, 251, 222, 106, 1], "Top": 4, "Height": 10}, "54": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 42, 155, 221, 227, 0, 91, 249, 255, 255, 249, 42, 249, 237, 115, 42, 11, 156, 255, 140, 100, 31, 0, 223, 255, 255, 255, 244, 68, 249, 254, 158, 193, 255, 204, 247, 252, 1, 13, 255, 246, 211, 255, 78, 70, 255, 222, 121, 255, 255, 255, 255, 126, 4, 144, 237, 244, 147, 4], "Top": 4, "Height": 10}, "55": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 77, 255, 161, 0, 0, 3, 218, 241, 18, 0, 0, 89, 255, 135, 0, 0, 0, 205, 253, 26, 0, 0, 45, 255, 193, 0, 0, 0, 132, 255, 111, 0, 0, 0, 201, 255, 52, 0, 0, 0, 242, 255, 14, 0, 0], "Top": 4, "Height": 10}, "56": {"Width": 6, "Advance": 8, "Bitmap": [7, 142, 237, 243, 186, 38, 123, 255, 255, 255, 255, 203, 184, 255, 52, 50, 255, 244, 137, 255, 104, 72, 255, 153, 16, 237, 255, 255, 213, 7, 136, 255, 86, 183, 255, 130, 231, 255, 9, 19, 255, 233, 241, 255, 68, 67, 255, 239, 174, 255, 255, 255, 255, 159, 21, 168, 238, 242, 158, 14], "Top": 4, "Height": 10}, "57": {"Width": 6, "Advance": 8, "Bitmap": [3, 141, 242, 235, 131, 1, 125, 255, 255, 255, 255, 93, 224, 255, 60, 85, 255, 198, 246, 255, 12, 2, 253, 236, 205, 255, 198, 166, 255, 249, 69, 244, 255, 255, 255, 228, 0, 29, 93, 127, 255, 174, 0, 15, 80, 227, 255, 74, 0, 253, 255, 255, 154, 0, 0, 236, 203, 101, 1, 0], "Top": 4, "Height": 10}, "58": {"Width": 3, "Advance": 9, "Bitmap": [91, 243, 85, 234, 255, 212, 91, 244, 85, 0, 0, 0, 0, 0, 0, 91, 243, 85, 234, 255, 212, 91, 244, 85], "Top": 6, "Height": 8}, "59": {"Width": 4, "Advance": 8, "Bitmap": [0, 91, 243, 85, 0, 234, 255, 212, 0, 91, 244, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, 243, 125, 0, 246, 255, 240, 0, 166, 255, 234, 0, 40, 255, 177, 49, 203, 240, 42, 204, 174, 39, 0], "Top": 6, "Height": 11}, "60": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 94, 131, 0, 0, 0, 32, 185, 255, 203, 0, 2, 112, 244, 255, 255, 192, 27, 201, 255, 255, 234, 98, 1, 72, 255, 252, 148, 16, 0, 0, 72, 255, 252, 147, 16, 0, 0, 25, 195, 255, 255, 234, 97, 1, 0, 1, 108, 243, 255, 255, 192, 0, 0, 0, 30, 183, 255, 203, 0, 0, 0, 0, 0, 93, 131], "Top": 3, "Height": 10}, "61": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 8, "Height": 5}, "62": {"Width": 6, "Advance": 8, "Bitmap": [132, 83, 0, 0, 0, 0, 206, 255, 166, 18, 0, 0, 195, 255, 255, 231, 78, 0, 2, 108, 241, 255, 255, 161, 0, 0, 26, 172, 255, 255, 0, 0, 26, 171, 255, 255, 2, 107, 241, 255, 255, 155, 195, 255, 255, 229, 73, 0, 206, 255, 165, 17, 0, 0, 132, 82, 0, 0, 0, 0], "Top": 3, "Height": 10}, "63": {"Width": 6, "Advance": 8, "Bitmap": [98, 200, 241, 241, 170, 22, 200, 255, 255, 255, 255, 174, 68, 61, 11, 67, 255, 243, 0, 0, 0, 65, 255, 196, 0, 1, 119, 250, 232, 40, 0, 132, 255, 220, 35, 0, 0, 245, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 195, 0, 0, 0, 0, 198, 198, 0, 0, 0], "Top": 4, "Height": 10}, "64": {"Width": 7, "Advance": 8, "Bitmap": [0, 30, 175, 244, 229, 135, 6, 10, 211, 81, 14, 124, 255, 132, 111, 139, 0, 0, 10, 255, 224, 190, 59, 31, 209, 247, 255, 252, 232, 20, 172, 255, 247, 255, 255, 249, 5, 235, 255, 47, 255, 255, 248, 4, 251, 255, 2, 255, 255, 229, 21, 231, 255, 45, 255, 255, 179, 70, 152, 255, 253, 255, 255, 88, 176, 14, 159, 237, 229, 129, 1, 181, 163, 45, 7, 0, 0, 0, 5, 120, 209, 246, 254, 216], "Top": 4, "Height": 12}, "65": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 4, "Height": 10}, "66": {"Width": 6, "Advance": 8, "Bitmap": [212, 240, 251, 232, 160, 21, 255, 255, 255, 255, 255, 182, 255, 255, 5, 53, 255, 244, 255, 255, 1, 70, 255, 222, 255, 255, 255, 255, 247, 70, 255, 255, 255, 255, 251, 125, 255, 255, 1, 66, 255, 237, 255, 255, 2, 62, 255, 246, 255, 255, 255, 255, 255, 169, 206, 242, 251, 228, 151, 14], "Top": 4, "Height": 10}, "67": {"Width": 7, "Advance": 8, "Bitmap": [0, 15, 140, 225, 248, 209, 91, 10, 208, 255, 255, 255, 255, 223, 124, 255, 216, 58, 9, 72, 133, 210, 255, 64, 0, 0, 0, 0, 247, 255, 8, 0, 0, 0, 0, 249, 255, 15, 0, 0, 0, 0, 219, 255, 67, 0, 0, 0, 0, 148, 255, 211, 51, 8, 64, 134, 27, 235, 255, 255, 255, 255, 225, 0, 37, 171, 238, 249, 205, 87], "Top": 4, "Height": 10}, "68": {"Width": 7, "Advance": 8, "Bitmap": [214, 244, 252, 229, 159, 29, 0, 255, 255, 255, 255, 255, 229, 23, 255, 255, 5, 42, 212, 255, 143, 255, 255, 0, 0, 65, 255, 218, 255, 255, 0, 0, 12, 255, 247, 255, 255, 0, 0, 15, 255, 246, 255, 255, 0, 0, 72, 255, 214, 255, 255, 8, 61, 219, 255, 135, 255, 255, 255, 255, 255, 219, 17, 217, 248, 250, 221, 145, 19, 0], "Top": 4, "Height": 10}, "69": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "70": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 4, "Height": 10}, "71": {"Width": 7, "Advance": 8, "Bitmap": [0, 20, 151, 231, 254, 255, 234, 13, 215, 255, 255, 255, 255, 190, 130, 255, 219, 61, 11, 72, 122, 212, 255, 68, 0, 0, 0, 0, 247, 255, 13, 0, 0, 0, 0, 248, 255, 13, 0, 0, 255, 255, 219, 255, 58, 0, 0, 255, 255, 148, 255, 200, 39, 5, 255, 255, 28, 236, 255, 255, 255, 255, 255, 0, 40, 178, 242, 255, 255, 255], "Top": 4, "Height": 10}, "72": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 4, "Height": 10}, "73": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "74": {"Width": 6, "Advance": 8, "Bitmap": [0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 8, 255, 252, 115, 93, 9, 109, 255, 223, 216, 255, 255, 255, 255, 128, 72, 209, 249, 232, 131, 4], "Top": 4, "Height": 10}, "75": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 74, 255, 182, 255, 255, 0, 12, 223, 245, 35, 255, 255, 0, 163, 255, 107, 0, 255, 255, 114, 255, 172, 0, 0, 255, 255, 253, 236, 11, 0, 0, 255, 255, 216, 255, 127, 0, 0, 255, 255, 30, 235, 253, 62, 0, 255, 255, 0, 77, 255, 217, 3, 255, 255, 0, 0, 179, 255, 97, 255, 255, 0, 0, 56, 255, 205], "Top": 4, "Height": 10}, "76": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "77": {"Width": 7, "Advance": 8, "Bitmap": [119, 255, 43, 16, 255, 255, 17, 142, 255, 131, 44, 255, 255, 53, 163, 228, 217, 72, 255, 227, 88, 180, 191, 230, 149, 236, 183, 120, 195, 200, 158, 246, 164, 193, 151, 209, 210, 85, 255, 89, 204, 177, 221, 220, 0, 0, 0, 216, 199, 232, 230, 0, 0, 0, 227, 219, 242, 240, 0, 0, 0, 239, 234, 251, 250, 0, 0, 0, 250, 248], "Top": 4, "Height": 10}, "78": {"Width": 7, "Advance": 8, "Bitmap": [255, 246, 31, 0, 0, 255, 255, 255, 255, 171, 0, 0, 255, 255, 255, 255, 255, 53, 0, 255, 255, 255, 255, 229, 185, 0, 255, 255, 255, 255, 106, 255, 57, 255, 255, 255, 255, 6, 223, 178, 255, 255, 255, 255, 0, 97, 254, 255, 255, 255, 255, 0, 5, 229, 255, 255, 255, 255, 0, 0, 120, 255, 255, 255, 255, 0, 0, 17, 244, 255], "Top": 4, "Height": 10}, "79": {"Width": 7, "Advance": 8, "Bitmap": [0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 4, "Height": 10}, "80": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 255, 236, 199, 95, 1, 255, 255, 255, 255, 255, 255, 124, 255, 255, 5, 12, 120, 255, 226, 255, 255, 0, 0, 12, 255, 250, 255, 255, 0, 15, 122, 255, 223, 255, 255, 255, 255, 255, 255, 118, 255, 255, 255, 234, 195, 89, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0], "Top": 4, "Height": 10}, "81": {"Width": 7, "Advance": 8, "Bitmap": [0, 76, 212, 249, 214, 81, 0, 53, 251, 255, 255, 255, 252, 55, 166, 255, 146, 19, 145, 255, 166, 225, 255, 32, 0, 34, 255, 224, 250, 255, 5, 0, 7, 255, 248, 246, 255, 5, 0, 7, 255, 245, 223, 255, 31, 0, 36, 255, 221, 168, 255, 143, 19, 150, 255, 165, 63, 253, 255, 255, 255, 252, 60, 0, 94, 231, 255, 227, 92, 0, 0, 0, 52, 255, 181, 70, 18, 0, 0, 0, 175, 255, 255, 210, 0, 0, 0, 4, 101, 192, 149], "Top": 4, "Height": 13}, "82": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 249, 214, 121, 2, 255, 255, 255, 255, 255, 122, 255, 255, 7, 106, 255, 222, 255, 255, 0, 10, 255, 249, 255, 255, 6, 105, 255, 212, 255, 255, 255, 255, 252, 77, 255, 255, 255, 247, 51, 0, 255, 255, 142, 255, 133, 0, 255, 255, 7, 214, 252, 47, 255, 255, 0, 73, 255, 189], "Top": 4, "Height": 10}, "83": {"Width": 6, "Advance": 8, "Bitmap": [11, 142, 225, 248, 211, 92, 153, 255, 255, 255, 255, 216, 234, 255, 58, 7, 74, 128, 241, 255, 144, 31, 0, 0, 139, 255, 255, 253, 157, 10, 3, 118, 233, 255, 255, 149, 0, 0, 5, 111, 255, 240, 135, 69, 7, 61, 255, 238, 223, 255, 255, 255, 255, 167, 97, 212, 249, 231, 160, 19], "Top": 4, "Height": 10}, "84": {"Width": 8, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 4, "Height": 10}, "85": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 4, "Height": 10}, "86": {"Width": 7, "Advance": 8, "Bitmap": [232, 250, 3, 0, 3, 249, 230, 182, 255, 35, 0, 39, 255, 178, 123, 255, 79, 0, 84, 255, 123, 62, 255, 124, 0, 131, 255, 63, 7, 247, 175, 0, 182, 249, 9, 0, 188, 228, 0, 233, 190, 0, 0, 120, 255, 65, 255, 120, 0, 0, 50, 255, 194, 255, 48, 0, 0, 1, 232, 255, 225, 0, 0, 0, 0, 156, 255, 147, 0, 0], "Top": 4, "Height": 10}, "87": {"Width": 7, "Advance": 8, "Bitmap": [252, 248, 0, 0, 0, 253, 251, 245, 234, 0, 0, 0, 246, 241, 236, 221, 0, 0, 0, 237, 231, 225, 209, 32, 120, 29, 223, 221, 215, 196, 120, 255, 109, 210, 210, 201, 182, 189, 241, 177, 197, 197, 186, 182, 248, 108, 241, 191, 181, 170, 237, 227, 2, 230, 237, 165, 148, 255, 149, 0, 153, 255, 146, 124, 255, 71, 0, 72, 255, 126], "Top": 4, "Height": 10}, "88": {"Width": 8, "Advance": 8, "Bitmap": [178, 255, 160, 0, 0, 137, 255, 178, 32, 246, 252, 37, 29, 247, 246, 32, 0, 124, 255, 164, 159, 255, 124, 0, 0, 7, 218, 253, 253, 218, 7, 0, 0, 0, 82, 255, 255, 87, 0, 0, 0, 0, 152, 255, 255, 173, 0, 0, 0, 45, 253, 212, 213, 255, 68, 0, 0, 184, 255, 89, 92, 255, 206, 1, 68, 255, 221, 3, 3, 225, 255, 81, 197, 255, 109, 0, 0, 119, 255, 200], "Top": 4, "Height": 10}, "89": {"Width": 8, "Advance": 8, "Bitmap": [201, 255, 76, 0, 0, 57, 255, 203, 92, 255, 172, 0, 0, 158, 255, 98, 6, 232, 249, 22, 17, 245, 233, 8, 0, 118, 255, 130, 120, 255, 120, 0, 0, 9, 227, 236, 234, 233, 11, 0, 0, 0, 98, 255, 255, 101, 0, 0, 0, 0, 2, 255, 255, 2, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 4, "Height": 10}, "90": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 177, 0, 0, 0, 148, 245, 31, 0, 0, 39, 251, 123, 0, 0, 0, 177, 222, 8, 0, 0, 62, 255, 86, 0, 0, 0, 200, 201, 0, 0, 0, 79, 255, 67, 0, 0, 0, 204, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "91": {"Width": 4, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "92": {"Width": 6, "Advance": 8, "Bitmap": [220, 255, 44, 0, 0, 0, 147, 255, 116, 0, 0, 0, 75, 255, 189, 0, 0, 0, 10, 248, 249, 12, 0, 0, 0, 186, 255, 78, 0, 0, 0, 113, 255, 150, 0, 0, 0, 40, 255, 223, 0, 0, 0, 0, 223, 255, 40, 0, 0, 0, 151, 255, 112, 0, 0, 0, 79, 255, 185, 0, 0, 0, 12, 249, 247, 9, 0, 0, 0, 190, 255, 74, 0, 0, 0, 117, 255, 146, 0, 0, 0, 44, 255, 219], "Top": 3, "Height": 14}, "93": {"Width": 4, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "94": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 49, 250, 251, 54, 0, 0, 0, 7, 211, 255, 255, 218, 11, 0, 0, 139, 255, 171, 169, 255, 155, 0, 60, 253, 235, 22, 19, 231, 255, 80, 74, 201, 88, 0, 0, 76, 208, 90], "Top": 4, "Height": 5}, "95": {"Width": 8, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 15, "Height": 2}, "96": {"Width": 4, "Advance": 8, "Bitmap": [64, 187, 34, 0, 175, 255, 245, 113, 0, 65, 179, 136], "Top": 3, "Height": 3}, "97": {"Width": 7, "Advance": 8, "Bitmap": [0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 6, "Height": 8}, "98": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 250, 172, 10, 255, 255, 255, 255, 255, 124, 255, 255, 0, 94, 255, 210, 255, 255, 0, 10, 255, 242, 255, 255, 0, 12, 255, 238, 255, 255, 0, 95, 255, 198, 255, 255, 243, 255, 255, 87, 183, 232, 250, 226, 101, 0], "Top": 3, "Height": 11}, "99": {"Width": 6, "Advance": 8, "Bitmap": [0, 71, 198, 246, 240, 172, 60, 253, 255, 255, 255, 201, 187, 255, 160, 26, 10, 32, 236, 255, 19, 0, 0, 0, 239, 255, 20, 0, 0, 0, 197, 255, 157, 23, 7, 34, 84, 255, 255, 255, 255, 218, 0, 86, 206, 248, 240, 182], "Top": 6, "Height": 8}, "100": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 118, 226, 254, 255, 255, 255, 90, 255, 255, 255, 255, 255, 255, 199, 255, 128, 8, 0, 255, 255, 239, 255, 14, 0, 0, 255, 255, 238, 255, 21, 0, 0, 255, 255, 194, 255, 154, 17, 6, 255, 255, 70, 255, 255, 255, 255, 255, 255, 0, 86, 206, 248, 246, 226, 185], "Top": 3, "Height": 11}, "101": {"Width": 8, "Advance": 8, "Bitmap": [0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 6, "Height": 8}, "102": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 19, 159, 232, 248, 223, 147, 0, 0, 186, 255, 255, 255, 255, 208, 0, 0, 250, 255, 50, 6, 34, 54, 255, 255, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 3, "Height": 11}, "103": {"Width": 7, "Advance": 8, "Bitmap": [0, 67, 191, 243, 247, 224, 174, 72, 253, 255, 255, 255, 255, 255, 195, 255, 162, 23, 6, 255, 255, 245, 255, 23, 0, 0, 255, 255, 242, 255, 13, 0, 0, 255, 255, 206, 255, 129, 10, 34, 255, 255, 101, 255, 255, 255, 255, 255, 255, 1, 129, 230, 249, 210, 255, 244, 0, 0, 0, 6, 77, 255, 209, 27, 255, 255, 255, 255, 255, 106, 45, 198, 239, 250, 220, 122, 2], "Top": 6, "Height": 11}, "104": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 228, 246, 171, 16, 255, 255, 255, 255, 255, 153, 255, 255, 16, 82, 255, 228, 255, 255, 0, 8, 255, 251, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255], "Top": 3, "Height": 11}, "105": {"Width": 7, "Advance": 8, "Bitmap": [0, 201, 199, 0, 0, 0, 0, 0, 201, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 0, 238, 255, 63, 0, 0, 0, 0, 180, 255, 255, 255, 173, 0, 0, 33, 189, 244, 234, 136], "Top": 3, "Height": 11}, "106": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 0, 0, 201, 199, 0, 0, 0, 0, 201, 199, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 2, 255, 254, 48, 156, 25, 64, 255, 233, 122, 255, 255, 255, 255, 157, 48, 175, 234, 238, 163, 16], "Top": 3, "Height": 14}, "107": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 1, 182, 255, 141, 255, 255, 0, 129, 255, 158, 1, 255, 255, 94, 255, 161, 2, 0, 255, 255, 252, 216, 2, 0, 0, 255, 255, 179, 255, 136, 0, 0, 255, 255, 9, 205, 255, 100, 0, 255, 255, 0, 34, 241, 248, 49, 255, 255, 0, 0, 97, 196, 148], "Top": 3, "Height": 11}, "108": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 243, 255, 40, 0, 0, 0, 199, 255, 255, 223, 0, 0, 59, 220, 247, 187], "Top": 3, "Height": 11}, "109": {"Width": 7, "Advance": 8, "Bitmap": [185, 234, 244, 179, 232, 228, 76, 255, 255, 255, 255, 255, 255, 208, 255, 255, 35, 244, 37, 255, 245, 255, 255, 0, 255, 1, 255, 255, 255, 255, 0, 255, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 6, "Height": 8}, "110": {"Width": 7, "Advance": 8, "Bitmap": [175, 217, 238, 251, 229, 144, 8, 255, 255, 255, 255, 255, 255, 143, 255, 255, 7, 9, 115, 255, 222, 255, 255, 0, 0, 12, 255, 250, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 6, "Height": 8}, "111": {"Width": 7, "Advance": 8, "Bitmap": [0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 6, "Height": 8}, "112": {"Width": 6, "Advance": 8, "Bitmap": [178, 228, 249, 227, 118, 0, 255, 255, 255, 255, 255, 90, 255, 255, 8, 119, 255, 200, 255, 255, 0, 16, 255, 239, 255, 255, 0, 9, 255, 241, 255, 255, 20, 92, 255, 209, 255, 255, 255, 255, 255, 122, 255, 255, 210, 247, 164, 6, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 6, "Height": 11}, "113": {"Width": 6, "Advance": 8, "Bitmap": [0, 98, 225, 251, 232, 181, 85, 255, 255, 255, 255, 255, 197, 255, 117, 8, 255, 255, 239, 255, 15, 0, 255, 255, 243, 255, 9, 0, 255, 255, 212, 255, 92, 0, 255, 255, 126, 255, 255, 255, 255, 255, 7, 168, 250, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255], "Top": 6, "Height": 11}, "114": {"Width": 6, "Advance": 8, "Bitmap": [122, 195, 239, 253, 239, 187, 255, 255, 255, 255, 255, 200, 255, 255, 28, 3, 17, 34, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 6, "Height": 8}, "115": {"Width": 6, "Advance": 8, "Bitmap": [28, 163, 237, 249, 227, 158, 196, 255, 255, 255, 255, 213, 239, 255, 54, 8, 40, 65, 144, 255, 239, 158, 58, 0, 0, 79, 171, 244, 255, 125, 94, 48, 7, 49, 255, 236, 227, 255, 255, 255, 255, 209, 123, 217, 250, 241, 185, 42], "Top": 6, "Height": 8}, "116": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 250, 255, 48, 7, 48, 0, 0, 209, 255, 255, 255, 221, 0, 0, 62, 210, 249, 237, 170], "Top": 4, "Height": 10}, "117": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 6, "Height": 8}, "118": {"Width": 7, "Advance": 8, "Bitmap": [166, 255, 49, 0, 1, 236, 220, 97, 255, 110, 0, 53, 255, 149, 26, 254, 182, 0, 133, 255, 75, 0, 203, 247, 11, 218, 241, 6, 0, 123, 255, 131, 255, 162, 0, 0, 35, 255, 251, 255, 67, 0, 0, 0, 198, 255, 224, 2, 0, 0, 0, 98, 255, 123, 0, 0], "Top": 6, "Height": 8}, "119": {"Width": 8, "Advance": 8, "Bitmap": [245, 255, 0, 0, 0, 0, 255, 244, 224, 255, 0, 0, 0, 0, 255, 221, 201, 255, 64, 255, 116, 0, 255, 195, 174, 255, 113, 255, 217, 1, 255, 164, 143, 255, 166, 235, 255, 75, 255, 130, 105, 255, 227, 84, 242, 199, 255, 89, 63, 255, 245, 8, 123, 255, 255, 45, 13, 253, 179, 0, 8, 222, 246, 3], "Top": 6, "Height": 8}, "120": {"Width": 8, "Advance": 8, "Bitmap": [154, 255, 212, 9, 0, 132, 255, 168, 6, 199, 255, 153, 55, 252, 230, 18, 0, 26, 231, 255, 234, 255, 74, 0, 0, 0, 58, 253, 255, 160, 0, 0, 0, 0, 109, 255, 255, 210, 8, 0, 0, 64, 251, 238, 204, 255, 138, 0, 22, 231, 255, 83, 32, 243, 252, 46, 174, 255, 180, 0, 0, 112, 255, 188], "Top": 6, "Height": 8}, "121": {"Width": 8, "Advance": 8, "Bitmap": [0, 222, 255, 34, 0, 30, 255, 222, 0, 153, 255, 105, 0, 89, 255, 156, 0, 80, 255, 180, 0, 152, 255, 88, 0, 9, 244, 249, 16, 219, 253, 19, 0, 0, 165, 255, 141, 255, 200, 0, 0, 0, 66, 255, 254, 255, 120, 0, 0, 0, 1, 214, 255, 255, 37, 0, 0, 0, 0, 123, 255, 196, 0, 0, 0, 0, 44, 228, 255, 86, 0, 0, 174, 255, 255, 255, 185, 0, 0, 0, 198, 249, 234, 156, 13, 0, 0, 0], "Top": 6, "Height": 11}, "122": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 153, 0, 0, 29, 237, 201, 6, 0, 3, 195, 240, 31, 0, 0, 126, 255, 90, 0, 0, 49, 250, 175, 0, 0, 0, 206, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 6, "Height": 8}, "123": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 77, 220, 252, 255, 0, 0, 221, 255, 255, 255, 0, 0, 253, 255, 36, 0, 0, 0, 255, 255, 0, 0, 0, 1, 255, 255, 0, 0, 0, 59, 255, 228, 0, 0, 255, 255, 218, 76, 0, 0, 255, 255, 219, 76, 0, 0, 0, 61, 255, 228, 0, 0, 0, 1, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 253, 255, 36, 0, 0, 0, 221, 255, 255, 255, 0, 0, 77, 221, 253, 255], "Top": 3, "Height": 14}, "124": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "125": {"Width": 6, "Advance": 8, "Bitmap": [255, 252, 218, 74, 0, 0, 255, 255, 255, 221, 0, 0, 0, 38, 255, 253, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 1, 0, 0, 0, 229, 255, 59, 0, 0, 0, 78, 220, 255, 255, 0, 0, 74, 217, 255, 255, 0, 0, 228, 255, 61, 0, 0, 0, 255, 255, 1, 0, 0, 0, 255, 255, 0, 0, 0, 37, 255, 253, 0, 0, 255, 255, 255, 222, 0, 0, 255, 253, 219, 74, 0, 0], "Top": 3, "Height": 14}, "126": {"Width": 7, "Advance": 8, "Bitmap": [31, 211, 234, 134, 22, 146, 178, 174, 255, 255, 255, 255, 255, 168, 180, 143, 24, 137, 235, 212, 29], "Top": 8, "Height": 3}, "160": {"Width": 0, "Advance": 8, "Bitmap": [], "Top": 14, "Height": 0}, "161": {"Width": 2, "Advance": 8, "Bitmap": [199, 198, 199, 198, 0, 0, 202, 193, 226, 219, 245, 240, 254, 251, 255, 255, 255, 255, 255, 255], "Top": 7, "Height": 10}, "162": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 2, 0, 78, 206, 255, 255, 217, 70, 252, 255, 255, 255, 188, 191, 255, 151, 21, 0, 0, 240, 255, 18, 0, 0, 0, 240, 255, 19, 0, 0, 0, 193, 255, 154, 22, 7, 33, 73, 253, 255, 255, 255, 219, 0, 80, 207, 255, 255, 227, 0, 0, 0, 255, 255, 3, 0, 0, 0, 255, 255, 0], "Top": 4, "Height": 12}, "163": {"Width": 6, "Advance": 8, "Bitmap": [0, 24, 171, 238, 236, 148, 0, 172, 255, 255, 255, 162, 0, 240, 255, 56, 81, 54, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 0, 255, 249, 0, 0, 0, 0, 255, 224, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255], "Top": 4, "Height": 10}, "164": {"Width": 8, "Advance": 8, "Bitmap": [52, 190, 17, 0, 0, 16, 189, 54, 156, 255, 226, 242, 242, 225, 255, 153, 0, 217, 255, 255, 255, 255, 216, 0, 0, 249, 255, 60, 60, 255, 248, 0, 0, 216, 255, 255, 255, 255, 216, 0, 153, 255, 226, 245, 245, 227, 255, 155, 55, 189, 16, 0, 0, 17, 190, 52], "Top": 6, "Height": 7}, "165": {"Width": 8, "Advance": 8, "Bitmap": [185, 255, 52, 0, 0, 52, 255, 182, 46, 253, 156, 0, 0, 155, 254, 44, 0, 161, 246, 24, 24, 245, 172, 0, 0, 38, 252, 146, 147, 255, 55, 0, 0, 0, 162, 248, 248, 188, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 4, "Height": 10}, "166": {"Width": 2, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 3, "Height": 14}, "167": {"Width": 6, "Advance": 8, "Bitmap": [27, 167, 232, 247, 218, 148, 190, 255, 255, 255, 255, 154, 241, 255, 74, 1, 0, 0, 162, 255, 255, 224, 113, 2, 183, 255, 255, 255, 255, 148, 250, 255, 47, 133, 255, 241, 240, 255, 125, 44, 255, 228, 149, 255, 255, 255, 255, 121, 4, 119, 231, 255, 255, 175, 133, 91, 14, 82, 255, 243, 218, 255, 255, 255, 255, 202, 105, 207, 247, 241, 188, 41], "Top": 4, "Height": 12}, "168": {"Width": 5, "Advance": 8, "Bitmap": [199, 198, 0, 199, 199, 201, 199, 0, 201, 201], "Top": 3, "Height": 2}, "169": {"Width": 8, "Advance": 8, "Bitmap": [0, 58, 185, 244, 243, 184, 56, 0, 57, 241, 113, 23, 23, 113, 240, 55, 189, 108, 78, 227, 245, 38, 112, 186, 244, 14, 229, 58, 10, 0, 15, 244, 244, 14, 232, 61, 11, 0, 15, 244, 188, 105, 84, 230, 242, 42, 109, 184, 43, 236, 107, 21, 21, 108, 235, 39, 0, 43, 181, 244, 244, 179, 42, 0], "Top": 6, "Height": 8}, "170": {"Width": 5, "Advance": 8, "Bitmap": [0, 213, 249, 225, 83, 0, 21, 53, 255, 226, 7, 72, 90, 255, 254, 191, 255, 184, 255, 255, 240, 255, 22, 255, 255, 100, 224, 250, 238, 205], "Top": 4, "Height": 6}, "171": {"Width": 8, "Advance": 8, "Bitmap": [0, 41, 193, 16, 0, 46, 191, 14, 1, 194, 218, 1, 1, 198, 216, 1, 99, 255, 110, 0, 101, 255, 108, 0, 216, 255, 27, 0, 216, 255, 27, 0, 93, 255, 111, 0, 96, 255, 110, 0, 0, 188, 220, 2, 0, 193, 218, 1, 0, 37, 191, 15, 0, 41, 190, 14], "Top": 6, "Height": 7}, "172": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255], "Top": 8, "Height": 6}, "174": {"Width": 8, "Advance": 8, "Bitmap": [0, 58, 185, 244, 243, 184, 56, 0, 57, 241, 113, 23, 23, 113, 240, 55, 189, 108, 0, 239, 245, 142, 112, 186, 244, 14, 0, 255, 45, 234, 15, 244, 244, 14, 0, 255, 255, 82, 15, 244, 188, 105, 0, 255, 126, 198, 114, 184, 43, 236, 107, 21, 21, 108, 235, 39, 0, 43, 181, 244, 244, 179, 42, 0], "Top": 6, "Height": 8}, "175": {"Width": 5, "Advance": 8, "Bitmap": [255, 255, 255, 255, 255], "Top": 4, "Height": 1}, "176": {"Width": 4, "Advance": 8, "Bitmap": [88, 232, 230, 81, 233, 53, 51, 229, 234, 54, 52, 230, 94, 234, 231, 83], "Top": 3, "Height": 4}, "177": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 5, "Height": 9}, "178": {"Width": 4, "Advance": 8, "Bitmap": [115, 232, 239, 110, 139, 41, 255, 241, 0, 90, 255, 211, 42, 240, 238, 42, 193, 255, 83, 0, 250, 255, 255, 255], "Top": 4, "Height": 6}, "179": {"Width": 5, "Advance": 8, "Bitmap": [146, 233, 237, 128, 0, 133, 47, 255, 241, 0, 0, 255, 255, 174, 0, 0, 1, 62, 254, 16, 136, 32, 52, 252, 15, 179, 244, 230, 108, 0], "Top": 4, "Height": 6}, "180": {"Width": 4, "Advance": 8, "Bitmap": [0, 35, 187, 63, 113, 245, 255, 174, 136, 179, 64, 0], "Top": 3, "Height": 3}, "181": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 8, 0, 255, 255, 255, 255, 84, 6, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 230, 248, 225, 172, 255, 246, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 6, "Height": 11}, "182": {"Width": 7, "Advance": 8, "Bitmap": [1, 104, 203, 240, 248, 230, 190, 129, 255, 255, 255, 254, 255, 255, 238, 255, 255, 255, 1, 255, 255, 243, 255, 255, 255, 0, 255, 255, 188, 255, 255, 255, 0, 255, 255, 36, 200, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255, 0, 0, 255, 255, 0, 255, 255], "Top": 4, "Height": 13}, "183": {"Width": 3, "Advance": 9, "Bitmap": [91, 243, 85, 234, 255, 212, 91, 244, 85], "Top": 8, "Height": 3}, "184": {"Width": 3, "Advance": 8, "Bitmap": [0, 176, 122, 0, 61, 235, 207, 247, 150], "Top": 14, "Height": 3}, "185": {"Width": 5, "Advance": 8, "Bitmap": [27, 122, 236, 255, 0, 208, 224, 255, 255, 0, 26, 2, 255, 255, 0, 0, 0, 255, 255, 0, 255, 255, 255, 255, 255], "Top": 4, "Height": 5}, "186": {"Width": 6, "Advance": 8, "Bitmap": [5, 136, 238, 239, 137, 5, 122, 255, 255, 255, 255, 122, 217, 255, 75, 75, 255, 216, 246, 255, 6, 7, 255, 246, 218, 255, 73, 73, 255, 218, 125, 255, 255, 255, 255, 126, 5, 140, 231, 231, 140, 6], "Top": 4, "Height": 7}, "187": {"Width": 7, "Advance": 8, "Bitmap": [165, 77, 0, 159, 90, 0, 0, 153, 233, 21, 145, 237, 25, 0, 32, 250, 176, 22, 243, 181, 0, 0, 187, 255, 55, 162, 255, 56, 31, 250, 179, 21, 242, 183, 0, 152, 235, 24, 144, 240, 28, 0, 164, 84, 0, 159, 97, 0, 0], "Top": 6, "Height": 7}, "188": {"Width": 8, "Advance": 8, "Bitmap": [85, 247, 0, 0, 0, 60, 191, 0, 236, 255, 0, 0, 0, 188, 63, 0, 50, 255, 0, 0, 61, 190, 0, 0, 0, 255, 0, 0, 189, 62, 0, 0, 0, 0, 0, 62, 189, 0, 0, 0, 0, 0, 0, 190, 61, 0, 0, 0, 0, 0, 63, 188, 1, 186, 255, 0, 0, 0, 191, 60, 110, 149, 255, 0, 0, 64, 188, 0, 241, 255, 255, 255, 0, 191, 60, 0, 0, 0, 255, 0], "Top": 4, "Height": 10}, "189": {"Width": 8, "Advance": 8, "Bitmap": [69, 246, 0, 0, 0, 35, 213, 6, 198, 255, 0, 0, 0, 174, 81, 0, 0, 255, 0, 0, 63, 191, 0, 0, 0, 255, 0, 2, 204, 49, 0, 0, 0, 0, 0, 97, 158, 0, 0, 0, 0, 0, 12, 218, 25, 0, 0, 0, 0, 0, 132, 123, 0, 143, 245, 176, 0, 30, 216, 9, 0, 0, 40, 234, 0, 166, 89, 0, 0, 75, 205, 65, 56, 198, 1, 0, 0, 229, 255, 255], "Top": 4, "Height": 10}, "190": {"Width": 8, "Advance": 8, "Bitmap": [156, 246, 126, 0, 0, 3, 206, 46, 11, 91, 199, 0, 0, 102, 153, 0, 25, 255, 236, 0, 14, 219, 22, 0, 209, 250, 169, 0, 136, 119, 0, 0, 0, 0, 0, 33, 215, 7, 0, 0, 0, 0, 0, 171, 85, 0, 0, 0, 0, 0, 60, 194, 0, 171, 255, 88, 0, 1, 201, 52, 94, 164, 240, 88, 0, 94, 161, 0, 225, 255, 255, 219, 10, 217, 27, 0, 0, 0, 240, 88], "Top": 4, "Height": 10}, "191": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 199, 193, 0, 0, 0, 0, 200, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 255, 48, 0, 0, 67, 254, 244, 10, 0, 29, 236, 255, 115, 0, 0, 170, 255, 173, 2, 0, 0, 240, 255, 19, 0, 0, 0, 233, 255, 79, 11, 103, 129, 148, 255, 255, 255, 255, 217, 13, 160, 240, 247, 196, 73], "Top": 6, "Height": 11}, "192": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 64, 187, 34, 0, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 0, "Height": 14}, "193": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 0, "Height": 14}, "194": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 0, 4, 162, 255, 255, 161, 4, 0, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 0, "Height": 14}, "195": {"Width": 8, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 1, "Height": 13}, "196": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 199, 198, 0, 199, 199, 0, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 255, 255, 92, 0, 0, 0, 0, 122, 255, 255, 172, 0, 0, 0, 0, 204, 234, 207, 244, 7, 0, 0, 32, 255, 165, 135, 255, 71, 0, 0, 113, 255, 98, 72, 255, 146, 0, 0, 191, 255, 42, 18, 255, 217, 0, 16, 251, 255, 255, 255, 255, 255, 30, 85, 255, 255, 255, 255, 255, 255, 98, 154, 255, 147, 0, 0, 130, 255, 161, 222, 255, 89, 0, 0, 70, 255, 224], "Top": 1, "Height": 13}, "197": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 27, 133, 134, 30, 0, 0, 0, 0, 197, 137, 137, 209, 0, 0, 0, 0, 213, 114, 113, 221, 0, 0, 0, 0, 134, 255, 255, 149, 0, 0, 0, 0, 195, 255, 255, 211, 0, 0, 0, 16, 252, 206, 208, 255, 28, 0, 0, 85, 255, 113, 115, 255, 100, 0, 0, 158, 255, 31, 33, 255, 172, 0, 0, 227, 214, 0, 0, 218, 237, 1, 39, 255, 255, 255, 255, 255, 255, 47, 104, 255, 255, 255, 255, 255, 255, 111, 165, 255, 70, 0, 0, 76, 255, 169, 226, 255, 18, 0, 0, 20, 255, 227], "Top": 1, "Height": 13}, "198": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 45, 255, 255, 255, 255, 255, 0, 0, 135, 243, 255, 255, 255, 255, 0, 0, 222, 183, 255, 255, 0, 0, 0, 52, 255, 118, 255, 255, 0, 0, 0, 134, 255, 57, 255, 255, 255, 0, 0, 210, 247, 6, 255, 255, 255, 0, 28, 255, 255, 255, 255, 255, 0, 0, 98, 255, 255, 255, 255, 255, 0, 0, 163, 255, 104, 0, 255, 255, 255, 255, 225, 255, 48, 0, 255, 255, 255, 255], "Top": 4, "Height": 10}, "199": {"Width": 8, "Advance": 8, "Bitmap": [0, 14, 140, 225, 248, 209, 91, 0, 9, 206, 255, 255, 255, 255, 223, 0, 122, 255, 216, 58, 9, 72, 133, 0, 209, 255, 64, 0, 0, 0, 0, 0, 246, 255, 8, 0, 0, 0, 0, 0, 248, 255, 16, 0, 0, 0, 0, 0, 213, 255, 74, 0, 0, 0, 0, 0, 126, 255, 221, 65, 11, 29, 155, 2, 9, 191, 255, 255, 255, 255, 255, 1, 0, 4, 116, 205, 255, 240, 123, 0, 0, 0, 0, 10, 236, 121, 0, 0, 0, 0, 0, 16, 46, 239, 0, 0, 0, 0, 0, 209, 244, 133, 0, 0], "Top": 4, "Height": 13}, "200": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "201": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "202": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "203": {"Width": 6, "Advance": 8, "Bitmap": [199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 0, 255, 255, 255, 255, 255, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 1, "Height": 13}, "204": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "205": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "206": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 0, "Height": 14}, "207": {"Width": 6, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255], "Top": 1, "Height": 13}, "208": {"Width": 8, "Advance": 8, "Bitmap": [0, 213, 243, 252, 231, 161, 31, 0, 0, 255, 255, 255, 255, 255, 231, 25, 0, 255, 255, 4, 42, 212, 255, 144, 0, 255, 255, 0, 0, 65, 255, 218, 255, 255, 255, 255, 0, 12, 255, 247, 255, 255, 255, 255, 0, 15, 255, 246, 0, 255, 255, 0, 0, 72, 255, 214, 0, 255, 255, 9, 62, 220, 255, 135, 0, 255, 255, 255, 255, 255, 219, 17, 0, 219, 247, 250, 223, 146, 19, 0], "Top": 4, "Height": 10}, "209": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 255, 246, 31, 0, 0, 255, 255, 255, 255, 171, 0, 0, 255, 255, 255, 255, 255, 53, 0, 255, 255, 255, 255, 229, 185, 0, 255, 255, 255, 255, 106, 255, 57, 255, 255, 255, 255, 6, 223, 178, 255, 255, 255, 255, 0, 97, 254, 255, 255, 255, 255, 0, 5, 229, 255, 255, 255, 255, 0, 0, 120, 255, 255, 255, 255, 0, 0, 17, 244, 255], "Top": 1, "Height": 13}, "210": {"Width": 7, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 0, "Height": 14}, "211": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 0, "Height": 14}, "212": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 0, "Height": 14}, "213": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 1, "Height": 13}, "214": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 213, 249, 215, 83, 0, 55, 252, 255, 255, 255, 252, 57, 168, 255, 146, 19, 145, 255, 169, 226, 255, 32, 0, 34, 255, 226, 250, 255, 5, 0, 7, 255, 249, 250, 255, 5, 0, 7, 255, 249, 227, 255, 31, 0, 34, 255, 225, 170, 255, 145, 19, 147, 255, 168, 59, 253, 255, 255, 255, 252, 56, 0, 84, 215, 250, 215, 82, 0], "Top": 1, "Height": 13}, "215": {"Width": 6, "Advance": 8, "Bitmap": [102, 139, 0, 0, 141, 99, 156, 255, 132, 133, 255, 154, 1, 144, 255, 255, 140, 0, 0, 129, 255, 255, 132, 0, 145, 255, 124, 131, 255, 148, 98, 123, 0, 0, 129, 92], "Top": 7, "Height": 6}, "216": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 0, 150, 18, 0, 34, 169, 237, 249, 214, 253, 52, 25, 233, 255, 255, 236, 255, 255, 0, 145, 255, 181, 20, 143, 255, 255, 0, 216, 255, 44, 57, 245, 255, 255, 0, 247, 255, 14, 216, 146, 255, 255, 0, 250, 255, 137, 247, 31, 255, 248, 0, 226, 255, 252, 143, 30, 255, 223, 0, 165, 255, 254, 46, 136, 255, 165, 0, 49, 254, 255, 255, 255, 252, 54, 0, 46, 246, 213, 249, 215, 81, 0, 0, 17, 139, 0, 0, 0, 0, 0, 0], "Top": 3, "Height": 12}, "217": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 0, "Height": 14}, "218": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 0, "Height": 14}, "219": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 0, "Height": 14}, "220": {"Width": 6, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 249, 255, 7, 8, 255, 249, 225, 255, 71, 73, 255, 225, 148, 255, 255, 255, 255, 145, 14, 168, 245, 244, 164, 13], "Top": 1, "Height": 13}, "221": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 255, 76, 0, 0, 57, 255, 203, 92, 255, 172, 0, 0, 158, 255, 98, 6, 232, 249, 22, 17, 245, 233, 8, 0, 118, 255, 130, 120, 255, 120, 0, 0, 9, 227, 236, 234, 233, 11, 0, 0, 0, 98, 255, 255, 101, 0, 0, 0, 0, 2, 255, 255, 2, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0], "Top": 0, "Height": 14}, "222": {"Width": 6, "Advance": 8, "Bitmap": [255, 255, 2, 0, 0, 0, 255, 255, 254, 226, 136, 8, 255, 255, 249, 255, 255, 133, 255, 255, 0, 84, 255, 220, 255, 255, 0, 9, 255, 246, 255, 255, 3, 100, 255, 217, 255, 255, 255, 255, 255, 121, 255, 255, 252, 221, 125, 4, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0], "Top": 4, "Height": 10}, "223": {"Width": 7, "Advance": 8, "Bitmap": [9, 146, 238, 249, 193, 44, 0, 140, 255, 255, 255, 255, 206, 0, 225, 255, 88, 48, 255, 249, 0, 252, 255, 5, 44, 255, 194, 0, 255, 255, 0, 176, 255, 60, 0, 255, 255, 0, 244, 255, 20, 0, 255, 255, 0, 184, 255, 191, 17, 255, 255, 0, 7, 141, 255, 181, 255, 255, 0, 115, 40, 255, 245, 255, 255, 0, 231, 255, 255, 215, 255, 255, 0, 177, 248, 219, 70], "Top": 3, "Height": 11}, "224": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "225": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "226": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "227": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 3, "Height": 11}, "228": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 3, "Height": 11}, "229": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 141, 244, 141, 0, 0, 0, 0, 244, 72, 244, 0, 0, 0, 0, 143, 245, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 232, 250, 235, 164, 19, 0, 211, 255, 255, 255, 255, 163, 0, 35, 15, 6, 71, 255, 235, 22, 160, 230, 250, 234, 255, 255, 198, 255, 255, 255, 255, 255, 255, 249, 255, 76, 6, 8, 255, 255, 195, 255, 255, 255, 255, 255, 255, 27, 168, 234, 251, 241, 223, 186], "Top": 2, "Height": 12}, "230": {"Width": 9, "Advance": 8, "Bitmap": [0, 182, 243, 205, 99, 226, 207, 37, 0, 0, 218, 255, 255, 255, 255, 255, 170, 0, 0, 36, 14, 183, 255, 144, 81, 234, 0, 47, 203, 249, 247, 255, 255, 255, 255, 2, 206, 255, 255, 255, 255, 255, 255, 255, 6, 245, 255, 55, 123, 255, 150, 7, 26, 0, 189, 255, 255, 255, 255, 255, 255, 214, 0, 34, 194, 244, 196, 102, 214, 246, 186, 0], "Top": 6, "Height": 8}, "231": {"Width": 6, "Advance": 8, "Bitmap": [0, 70, 198, 246, 242, 179, 57, 253, 255, 255, 255, 190, 183, 255, 160, 26, 0, 0, 235, 255, 19, 0, 0, 0, 241, 255, 20, 0, 0, 0, 192, 255, 157, 23, 0, 0, 64, 249, 255, 255, 255, 211, 0, 59, 185, 252, 253, 206, 0, 0, 0, 211, 114, 0, 0, 0, 0, 44, 238, 0, 0, 0, 207, 245, 136, 0], "Top": 6, "Height": 11}, "232": {"Width": 8, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 2, "Height": 12}, "233": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 2, "Height": 12}, "234": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 0, 4, 162, 255, 255, 161, 4, 0, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 2, "Height": 12}, "235": {"Width": 8, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 203, 249, 225, 119, 0, 0, 63, 253, 255, 255, 255, 255, 93, 0, 190, 255, 85, 8, 76, 255, 203, 0, 244, 255, 255, 255, 255, 255, 241, 0, 246, 255, 255, 255, 255, 255, 255, 4, 196, 255, 107, 20, 1, 0, 0, 0, 64, 251, 255, 255, 255, 255, 203, 0, 0, 57, 179, 236, 251, 234, 178, 0], "Top": 3, "Height": 11}, "236": {"Width": 6, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 2, "Height": 12}, "237": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 35, 187, 63, 0, 0, 113, 245, 255, 174, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 2, "Height": 12}, "238": {"Width": 6, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 4, 162, 255, 255, 161, 4, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 2, "Height": 12}, "239": {"Width": 6, "Advance": 8, "Bitmap": [199, 198, 0, 199, 199, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 241, 255, 47, 103, 0, 0, 193, 255, 255, 239, 0, 0, 53, 215, 241, 155], "Top": 3, "Height": 11}, "240": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 109, 207, 59, 38, 74, 0, 0, 113, 255, 253, 255, 195, 0, 0, 196, 197, 217, 255, 53, 0, 0, 1, 0, 58, 255, 146, 0, 85, 203, 237, 247, 255, 208, 97, 255, 255, 255, 255, 255, 244, 213, 255, 116, 21, 13, 255, 247, 245, 255, 10, 0, 32, 255, 222, 212, 255, 108, 15, 149, 255, 164, 104, 255, 255, 255, 255, 254, 59, 0, 106, 223, 249, 215, 88, 0], "Top": 3, "Height": 11}, "241": {"Width": 7, "Advance": 8, "Bitmap": [75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 175, 217, 238, 251, 229, 144, 8, 255, 255, 255, 255, 255, 255, 143, 255, 255, 7, 9, 115, 255, 222, 255, 255, 0, 0, 12, 255, 250, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255], "Top": 3, "Height": 11}, "242": {"Width": 7, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 2, "Height": 12}, "243": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 2, "Height": 12}, "244": {"Width": 7, "Advance": 8, "Bitmap": [0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 2, "Height": 12}, "245": {"Width": 7, "Advance": 8, "Bitmap": [0, 75, 226, 203, 49, 86, 167, 0, 167, 85, 52, 206, 225, 75, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 3, "Height": 11}, "246": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 214, 249, 215, 89, 0, 64, 255, 255, 255, 255, 255, 66, 195, 255, 130, 13, 126, 255, 194, 246, 255, 16, 0, 15, 255, 246, 245, 255, 14, 0, 17, 255, 245, 192, 255, 123, 13, 133, 255, 192, 64, 254, 255, 255, 255, 254, 63, 0, 75, 215, 250, 216, 76, 0], "Top": 3, "Height": 11}, "247": {"Width": 6, "Advance": 8, "Bitmap": [0, 0, 199, 200, 0, 0, 0, 0, 201, 202, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, 0, 0, 0, 0, 199, 200, 0, 0], "Top": 6, "Height": 8}, "248": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 0, 0, 21, 9, 0, 86, 214, 248, 212, 206, 158, 64, 255, 255, 255, 255, 255, 86, 195, 255, 127, 45, 246, 255, 187, 246, 252, 11, 195, 131, 240, 237, 226, 239, 129, 195, 12, 253, 237, 86, 254, 245, 44, 128, 255, 196, 0, 146, 255, 255, 255, 255, 87, 0, 200, 189, 238, 235, 113, 0, 0, 29, 1, 0, 0, 0, 0], "Top": 5, "Height": 10}, "249": {"Width": 7, "Advance": 8, "Bitmap": [0, 64, 187, 34, 0, 0, 0, 0, 175, 255, 245, 113, 0, 0, 0, 0, 65, 179, 136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 2, "Height": 12}, "250": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 2, "Height": 12}, "251": {"Width": 7, "Advance": 8, "Bitmap": [0, 0, 1, 139, 139, 1, 0, 0, 4, 162, 255, 255, 161, 4, 0, 8, 186, 91, 89, 188, 8, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 2, "Height": 12}, "252": {"Width": 7, "Advance": 8, "Bitmap": [0, 199, 198, 0, 199, 199, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 255, 255, 251, 255, 14, 0, 0, 255, 255, 226, 255, 120, 10, 12, 255, 255, 139, 255, 255, 255, 255, 255, 255, 10, 148, 231, 251, 238, 215, 168], "Top": 3, "Height": 11}, "253": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 0, 35, 187, 63, 0, 0, 0, 0, 113, 245, 255, 174, 0, 0, 0, 0, 136, 179, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 255, 34, 0, 30, 255, 222, 0, 153, 255, 105, 0, 89, 255, 156, 0, 80, 255, 180, 0, 152, 255, 88, 0, 9, 244, 249, 16, 219, 253, 19, 0, 0, 165, 255, 141, 255, 200, 0, 0, 0, 66, 255, 254, 255, 120, 0, 0, 0, 1, 214, 255, 255, 37, 0, 0, 0, 0, 123, 255, 196, 0, 0, 0, 0, 44, 228, 255, 86, 0, 0, 174, 255, 255, 255, 185, 0, 0, 0, 198, 249, 234, 156, 13, 0, 0, 0], "Top": 2, "Height": 15}, "254": {"Width": 7, "Advance": 8, "Bitmap": [255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 240, 246, 198, 73, 0, 255, 255, 255, 255, 255, 254, 71, 255, 255, 8, 19, 163, 255, 196, 255, 255, 0, 0, 24, 255, 246, 255, 255, 0, 0, 14, 255, 238, 255, 255, 28, 10, 131, 255, 197, 255, 255, 255, 255, 255, 255, 90, 255, 255, 203, 248, 228, 106, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0, 255, 255, 0, 0, 0, 0, 0], "Top": 3, "Height": 14}, "255": {"Width": 8, "Advance": 8, "Bitmap": [0, 0, 199, 198, 0, 199, 199, 0, 0, 0, 201, 199, 0, 201, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 222, 255, 34, 0, 30, 255, 222, 0, 153, 255, 105, 0, 89, 255, 156, 0, 80, 255, 180, 0, 152, 255, 88, 0, 9, 244, 249, 16, 219, 253, 19, 0, 0, 165, 255, 141, 255, 200, 0, 0, 0, 66, 255, 254, 255, 120, 0, 0, 0, 1, 214, 255, 255, 37, 0, 0, 0, 0, 123, 255, 196, 0, 0, 0, 0, 44, 228, 255, 86, 0, 0, 174, 255, 255, 255, 185, 0, 0, 0, 198, 249, 234, 156, 13, 0, 0, 0], "Top": 3, "Height": 14}}, "Size": 16}
--- a/UnitTestsSources/ImageTests.cpp Wed Sep 02 15:07:47 2015 +0200 +++ b/UnitTestsSources/ImageTests.cpp Fri Sep 04 13:44:21 2015 +0200 @@ -33,14 +33,18 @@ #include "PrecompiledHeadersUnitTests.h" #include "gtest/gtest.h" -#include <stdint.h> +#include "../Core/ImageFormats/Font.h" #include "../Core/ImageFormats/Image.h" +#include "../Core/ImageFormats/ImageProcessing.h" +#include "../Core/ImageFormats/JpegReader.h" +#include "../Core/ImageFormats/JpegWriter.h" #include "../Core/ImageFormats/PngReader.h" #include "../Core/ImageFormats/PngWriter.h" -#include "../Core/ImageFormats/JpegReader.h" -#include "../Core/ImageFormats/JpegWriter.h" #include "../Core/Toolbox.h" #include "../Core/Uuid.h" +#include "../OrthancServer/OrthancInitialization.h" + +#include <stdint.h> TEST(PngWriter, ColorPattern) @@ -239,3 +243,17 @@ } } } + + +TEST(Font, Basic) +{ + Orthanc::Image s(Orthanc::PixelFormat_RGB24, 640, 480); + memset(s.GetBuffer(), 0, s.GetPitch() * s.GetHeight()); + + ASSERT_GE(1, Orthanc::Configuration::GetFontRegistry().GetSize()); + Orthanc::Configuration::GetFontRegistry().GetFont(0).DrawText(s, "Hello world É\n\rComment ça va ?\nq", 50, 60, 255, 0, 0); + + Orthanc::PngWriter w; + w.WriteToFile("UnitTestsResults/font.png", s); +} +