ide: Experimental CUDA support

This commit is contained in:
Mirek Fidler 2025-02-14 13:47:58 +01:00
parent 6c61776b41
commit 7b23c67a77
16 changed files with 441 additions and 224 deletions

28
reference/Cuda/Cuda.cpp Normal file
View file

@ -0,0 +1,28 @@
#include <Core/Core.h>
#include "shared.h"
using namespace Upp;
void cuda_mul_a(float a, float *x, int count);
CONSOLE_APP_MAIN
{
StdLogSetup(LOG_COUT|LOG_FILE);
Vector<float> x;
for(float i = 0; i < 10; i++)
x << i;
DDUMP(x);
cuda_mul_a(10, x.begin(), x.GetCount());
DDUMP(x);
x.Clear();
for(int i = 0; i < 123456780; i++)
x << (float)i;
auto xx = clone(x);
for(float& m : xx)
m *= 13;
cuda_mul_a(13, x.begin(), x.GetCount());
ASSERT(x == xx);
}

17
reference/Cuda/Cuda.upp Normal file
View file

@ -0,0 +1,17 @@
description "Simple CUDA example (experimental)\377";
uses
Core;
library
cudart_static.lib;
file
Test.cu,
Cuda.cpp,
info.qtf,
MSVS22x64.bm;
mainconfig
"" = "CUDA";

View file

@ -0,0 +1,27 @@
BUILDER = "MSC22X64";
COMPILER = "";
COMMON_OPTIONS = "/bigobj -D_CRT_SECURE_NO_WARNINGS";
COMMON_CPP_OPTIONS = "/std:c++17";
COMMON_C_OPTIONS = "";
COMMON_LINK = "";
COMMON_FLAGS = "";
DEBUG_INFO = "2";
DEBUG_BLITZ = "1";
DEBUG_LINKMODE = "0";
DEBUG_OPTIONS = "-Od";
DEBUG_FLAGS = "";
DEBUG_LINK = "/STACK:20000000";
DEBUG_CUDA = "-Xcompiler=-MTd";
RELEASE_BLITZ = "0";
RELEASE_LINKMODE = "0";
RELEASE_OPTIONS = "-O2";
RELEASE_FLAGS = "";
RELEASE_LINK = "/STACK:20000000";
RELEASE_CUDA = "-Xcompiler=-MT";
DEBUGGER = "c:/program files/microsoft visual studio/2022/community/vc/tools/msvc/Common7/IDE/devenv.exe";
ALLOW_PRECOMPILED_HEADERS = "1";
DISABLE_BLITZ = "0";
PATH = "c:/program files/microsoft visual studio/2022/community/vc/tools/msvc/14.42.34433/bin/hostx64/x64;c:/program files (x86)/windows kits/10/bin/10.0.26100.0/x64;C:\\upp\\bin/SDL2/lib/x64;C:\\upp\\bin/pgsql/x64/bin;C:\\upp\\bin/mysql/lib64";
INCLUDE = "c:/program files/microsoft visual studio/2022/community/vc/tools/msvc/14.42.34433/include;c:/program files (x86)/windows kits/10/include/10.0.26100.0/um;c:/program files (x86)/windows kits/10/include/10.0.26100.0/ucrt;c:/program files (x86)/windows kits/10/include/10.0.26100.0/shared;C:\\upp\\bin/openssl/include;C:\\upp\\bin/SDL2/include;C:\\upp\\bin/pgsql/x64/include;C:\\upp\\bin/mysql/include;C:\\upp\\bin/llvm";
LIB = "c:/program files/microsoft visual studio/2022/community/vc/tools/msvc/14.42.34433/lib/x64;c:/program files (x86)/windows kits/10/lib/10.0.26100.0/ucrt/x64;c:/program files (x86)/windows kits/10/lib/10.0.26100.0/um/x64;C:\\upp\\bin/openssl/lib64;C:\\upp\\bin/SDL2/lib/x64;C:\\upp\\bin/pgsql/x64/lib;C:\\upp\\bin/mysql/lib64;C:\\upp\\bin/llvm;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.6\\lib\\x64";
LINKMODE_LOCK = "0";

25
reference/Cuda/Test.cu Normal file
View file

@ -0,0 +1,25 @@
#include <stdio.h>
__global__ void mul_a(float a, float* x)
{
int i = threadIdx.x + blockIdx.x * blockDim.x;
x[i] *= a;
}
void cuda_mul_a(float a, float *x, int count)
{
// Copy data to device.
float* device_x;
cudaMalloc(&device_x, count * sizeof(float));
cudaMemcpy(device_x, x, count * sizeof(float), cudaMemcpyHostToDevice);
// Launch the kernel.
mul_a<<<((count + 255) >> 8), 256>>>(a, device_x);
// Copy data back to host.
cudaDeviceSynchronize();
cudaMemcpy(x, device_x, count * sizeof(float), cudaMemcpyDeviceToHost);
cudaDeviceReset();
}

26
reference/Cuda/info.qtf Normal file

File diff suppressed because one or more lines are too long

4
reference/Cuda/shared.h Normal file
View file

@ -0,0 +1,4 @@
struct WTGPos {
float x = 0;
float y = 0;
};

View file

@ -36,7 +36,7 @@ void CreateLogSyntax(One<EditorSyntax>& e)
void RegisterSyntaxModules()
{
RegisterCSyntax("cpp", CSyntax::HIGHLIGHT_CPP,
"*.c *.cpp *.cc *.cxx *.h *.hpp *.hh *.hxx *.m *.mm *.icpp *.conf",
"*.c *.cpp *.cc *.cxx *.h *.hpp *.hh *.hxx *.m *.mm *.icpp *.conf *.cu",
"C/C++");
RegisterCSyntax("java", CSyntax::HIGHLIGHT_JAVA, "*.java", "Java");
RegisterCSyntax("js", CSyntax::HIGHLIGHT_JAVASCRIPT, "*.js", "JavaScript");

View file

@ -221,6 +221,9 @@ One<Builder> MakeBuild::CreateBuilder(Host *host)
b->common_link = bm.Get("COMMON_LINK", "");
b->debug_link = bm.Get("DEBUG_LINK", "");
b->release_link = bm.Get("RELEASE_LINK", "");
b->debug_cuda = bm.Get("DEBUG_CUDA", "");
b->release_cuda = bm.Get("RELEASE_CUDA", "");
b->main_conf = !!main_conf.GetCount();
b->allow_pch = bm.Get("ALLOW_PRECOMPILED_HEADERS", "") == "1";

View file

@ -215,6 +215,7 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
String fn = NormalizePath(srcfile[j]);
String ext = ToLower(GetFileExt(fn));
if(findarg(ext, ".c", ".cpp", ".cc", ".cxx", ".rc", ".brc") >= 0 ||
ext == ".cu" && HasFlag("CUDA") ||
(!release && blitz && ext == ".icpp")) {
if(FindIndex(sfile, fn) < 0) {
sfile.Add(fn);
@ -251,6 +252,8 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
}
}
}
String nvcc = "nvcc -c " + IncludesDefinesTargetTime(package, pkg) + " ";
String cc = CmdLine(package, pkg);
if(HasFlag("EVC")) {
@ -391,14 +394,20 @@ bool MscBuilder::BuildPackage(const String& package, Vector<String>& linkfile, V
}
}
else {
String c = cc;
int slot = AllocSlot();
if(HasAnyDebug())
c << Pdb(package, slot, !sContainsPchOptions(cc) && !sContainsPchOptions(soptions[i]));
c << " " + soptions[i] + (ext == ".c" ? Join(c_options, " -Tc") : Join(cpp_options, " -Tp")) + ' '
+ GetPathQ(fn) + " -Fo" + GetPathQ(objfile);
if(nopch.Find(fn) < 0)
c << pch_use;
String c;
if(ext == ".cu")
c << nvcc << (release ? release_cuda : debug_cuda) << " " << soptions[i]
<< " -o " << GetPathQ(objfile) << " " << GetPathQ(fn);
else {
c = cc;
if(HasAnyDebug())
c << Pdb(package, slot, !sContainsPchOptions(cc) && !sContainsPchOptions(soptions[i]));
c << " " + soptions[i] + (ext == ".c" ? Join(c_options, " -Tc") : Join(cpp_options, " -Tp")) + ' '
+ GetPathQ(fn) + " -Fo" + GetPathQ(objfile);
if(nopch.Find(fn) < 0)
c << pch_use;
}
if(slot < 0 || !Run(c, slot, objfile, 1))
execerr = true;
}

View file

@ -116,6 +116,9 @@ void IdeFileIcon0(bool dir, const String& filename, Image& img)
if(IsGLSLExt(ext))
img = IdeCommonImg::GLSL();
else
if(ext == ".cu")
img = IdeCommonImg::Cuda();
else
if(findarg(ext, ".cpp", ".cc", ".cxx", ".mm") >= 0)
img = IdeCommonImg::Cpp();
else

View file

@ -19,6 +19,7 @@ IMAGE_ID(InsertItem)
IMAGE_ID(Package)
IMAGE_ID(Cpp)
IMAGE_ID(Cpp__UHD)
IMAGE_ID(Cuda__UHD)
IMAGE_ID(Source)
IMAGE_ID(Source__UHD)
IMAGE_ID(GLSL__UHD)
@ -85,6 +86,7 @@ IMAGE_ID(JsonString)
IMAGE_ID(JsonString__UHD)
IMAGE_ID(JsonStruct)
IMAGE_ID(JsonStruct__UHD)
IMAGE_ID(Cuda)
IMAGE_ID(GLSL)
IMAGE_ID(Debugger)
@ -356,194 +358,249 @@ IMAGE_DATA(184,215,69,252,191,232,149,22,159,255,11,174,255,3,48,236,211,114,0,0
IMAGE_END_DATA(4000, 7)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,155,9,152,21,197,181,199,175,81,68,145,77,80,96,128,25,246,69,84,84,112,129,184,161,160,162,144,40,32)
IMAGE_DATA(46,4,5,21,20,17,16,65,134,29,134,69,17,13,225,17,159,107,220,136,193,36,24,98,204,226,22,140,34,1,132,1)
IMAGE_DATA(100,149,109,216,215,97,152,125,31,152,170,87,167,170,171,187,186,186,122,187,183,238,92,242,50,229,247,255,128,123,187,186)
IMAGE_DATA(186,127,117,250,95,167,78,95,35,245,35,245,35,209,181,52,108,255,179,170,250,195,241,110,98,173,79,159,62,184,111,223)
IMAGE_DATA(190,54,193,103,73,73,73,3,131,140,15,199,203,141,159,51,41,105,140,239,248,188,127,215,174,93,169,160,193,103,43,87)
IMAGE_DATA(174,52,206,1,215,17,221,248,240,39,40,72,127,113,124,177,193,247,94,132,85,227,71,211,159,143,47,95,71,162,198,23)
IMAGE_DATA(231,34,158,227,171,226,79,142,69,175,254,9,107,209,155,65,168,134,21,10,117,252,183,223,126,75,133,131,157,203,54,121)
IMAGE_DATA(188,63,244,229,253,161,193,103,222,253,35,84,17,163,31,21,255,55,249,51,45,45,45,92,127,28,168,191,234,254,172,190)
IMAGE_DATA(88,253,189,216,159,179,226,226,253,35,66,127,249,123,191,254,214,127,56,134,254,56,80,127,165,204,190,216,239,254,149,252)
IMAGE_DATA(173,190,56,208,252,193,117,193,247,214,49,172,47,191,94,251,119,206,254,78,97,249,126,131,62,11,110,76,244,55,201,12)
IMAGE_DATA(206,17,254,94,39,160,228,190,53,82,82,90,190,55,97,194,180,146,201,147,211,242,39,77,154,33,104,166,41,248,14,142)
IMAGE_DATA(129,99,161,15,63,73,114,114,202,59,59,119,30,241,116,102,177,193,177,208,199,232,126,209,216,177,169,121,240,121,230,137)
IMAGE_DATA(162,202,194,50,132,114,75,16,58,178,235,40,218,179,118,11,58,126,224,20,202,35,255,206,205,173,68,121,185,21,40,59)
IMAGE_DATA(187,180,18,142,133,62,208,23,238,103,202,148,89,5,240,89,201,25,132,118,172,217,140,22,117,239,142,230,54,110,140,222)
IMAGE_DATA(29,252,8,154,215,182,45,90,50,242,89,84,90,129,72,95,24,163,2,193,177,208,135,243,152,152,58,45,31,62,219,248)
IMAGE_DATA(197,119,104,114,36,130,210,234,212,65,59,214,111,71,112,224,210,39,70,160,169,205,154,161,202,202,74,218,63,18,41,167)
IMAGE_DATA(253,83,83,103,230,243,254,83,166,206,162,253,231,54,79,70,227,73,255,175,223,251,29,130,139,44,41,197,120,211,242,181)
IMAGE_DATA(104,247,138,127,208,254,145,8,168,156,234,229,151,173,254,105,47,252,50,63,99,205,15,120,2,233,59,167,86,45,116,56)
IMAGE_DATA(227,40,42,38,125,243,114,207,160,226,50,114,158,10,140,79,87,156,65,32,62,254,196,137,86,255,217,243,23,229,111,92)
IMAGE_DATA(250,41,30,75,250,191,212,166,45,185,206,114,84,88,132,113,65,1,66,101,228,66,74,74,224,86,16,46,46,46,71,32)
IMAGE_DATA(71,255,121,11,243,183,252,253,159,248,57,210,127,94,203,86,40,39,247,52,42,32,119,148,155,123,6,175,252,227,50,180)
IMAGE_DATA(111,215,113,210,143,93,63,239,63,117,170,213,127,234,180,57,249,101,37,24,207,168,87,15,165,146,115,124,255,233,231,244)
IMAGE_DATA(152,31,190,89,67,255,157,177,121,191,113,239,76,140,191,213,127,242,164,153,116,254,54,126,249,29,154,219,164,9,154,117)
IMAGE_DATA(73,67,244,197,156,249,232,205,30,61,209,194,155,110,65,37,101,116,42,48,244,173,168,40,151,231,207,140,159,188,226,202)
IMAGE_DATA(202,172,83,229,104,211,55,171,208,87,239,253,22,109,93,177,14,229,228,195,188,159,70,167,178,72,0,160,10,148,153,233)
IMAGE_DATA(136,159,88,227,215,241,252,76,156,56,157,106,210,196,64,207,79,76,207,111,239,150,145,150,145,234,230,218,154,19,45,136)
IMAGE_DATA(184,173,86,209,107,129,113,110,191,177,15,61,243,204,115,120,199,142,67,228,97,196,90,4,231,130,115,194,185,61,174,129)
IMAGE_DATA(142,189,120,241,82,109,227,202,130,115,123,92,195,2,184,198,120,141,205,101,112,88,160,24,255,208,242,229,171,227,62,62)
IMAGE_DATA(140,97,48,144,91,168,243,164,175,90,21,245,53,68,92,50,27,191,241,94,232,213,11,165,65,134,36,105,122,139,22,232)
IMAGE_DATA(215,35,71,162,120,141,47,143,11,227,45,123,235,45,12,18,191,131,191,235,30,31,198,18,199,134,49,229,99,248,119,50)
IMAGE_DATA(3,158,89,70,59,190,60,182,27,99,126,156,124,109,177,140,15,99,201,204,189,230,7,190,231,49,25,137,168,21,102,124)
IMAGE_DATA(57,198,194,197,87,108,227,3,71,121,252,104,158,183,104,249,203,236,211,66,122,67,172,227,171,158,183,104,198,143,246,249)
IMAGE_DATA(147,199,15,250,92,7,185,247,170,186,255,88,198,15,243,236,193,177,112,189,65,159,189,32,227,195,185,130,196,191,120,156)
IMAGE_DATA(206,241,131,198,128,200,73,39,127,46,217,127,229,107,224,223,171,230,71,199,248,170,88,144,197,215,66,157,207,159,74,48)
IMAGE_DATA(191,124,205,229,138,230,217,247,24,63,209,249,87,162,243,207,68,231,223,230,53,36,104,255,33,94,67,162,246,95,255,117)
IMAGE_DATA(173,135,71,101,176,46,81,237,136,123,69,161,182,113,140,220,183,118,74,74,203,207,38,76,152,86,58,121,114,90,158,88)
IMAGE_DATA(205,16,171,132,240,29,28,3,199,26,231,162,45,57,57,229,179,40,42,43,159,241,107,30,59,54,181,20,62,207,202,42)
IMAGE_DATA(69,217,167,202,81,110,238,25,84,84,137,208,201,204,98,148,177,126,59,58,184,101,47,202,202,174,64,5,197,240,89,9)
IMAGE_DATA(50,42,59,165,252,126,167,76,97,149,57,168,136,21,149,96,92,88,138,208,167,51,102,163,89,245,235,163,87,123,220,134)
IMAGE_DATA(222,184,167,15,122,177,125,7,180,109,229,6,84,88,130,120,101,41,159,179,130,251,132,207,114,114,78,163,2,210,247,131)
IMAGE_DATA(129,15,163,209,145,8,250,120,92,42,42,66,8,157,56,154,143,198,145,127,255,235,195,63,160,210,51,172,63,244,225,92)
IMAGE_DATA(39,77,102,253,73,87,244,245,171,111,33,168,208,189,220,185,51,202,33,215,91,74,238,44,151,92,251,242,183,63,64,199)
IMAGE_DATA(14,102,225,188,124,69,127,99,252,108,50,216,107,119,222,5,213,69,252,151,113,19,80,57,84,187,200,53,229,231,87,98)
IMAGE_DATA(248,123,81,49,84,185,42,92,251,159,32,188,230,117,186,28,61,79,198,255,106,225,235,232,12,134,177,203,81,9,233,92)
IMAGE_DATA(90,129,113,126,94,37,130,123,116,235,159,153,83,129,94,233,210,133,86,55,191,90,248,26,58,77,62,43,44,36,102,176)
IMAGE_DATA(118,43,250,254,111,95,82,182,57,202,241,103,208,254,48,103,127,157,253,34,26,67,250,191,222,179,23,34,151,75,219,43)
IMAGE_DATA(93,187,162,197,3,6,34,114,9,248,212,201,82,185,191,57,127,48,239,249,132,193,146,97,35,208,36,114,142,119,250,13)
IMAGE_DATA(64,159,79,155,141,166,55,108,128,86,127,180,140,245,207,42,147,231,207,140,159,147,39,75,80,30,185,199,130,114,132,246)
IMAGE_DATA(239,56,128,190,91,250,9,90,241,209,199,132,123,54,173,16,194,181,67,140,73,241,19,107,252,186,60,63,51,172,10,161)
IMAGE_DATA(81,97,119,121,126,98,122,126,171,43,131,222,237,90,162,244,136,254,149,41,221,56,183,223,216,167,227,184,50,159,246,184)
IMAGE_DATA(6,58,118,21,100,38,110,215,144,94,133,153,89,186,98,252,211,85,152,153,158,86,140,31,245,57,195,86,45,34,81,236)
IMAGE_DATA(12,228,241,230,246,236,169,220,177,76,75,73,65,139,158,126,218,115,39,29,203,248,242,184,48,30,223,169,136,223,193,223)
IMAGE_DATA(117,143,15,99,137,99,123,85,9,189,24,68,51,190,60,182,219,249,249,113,94,59,183,176,227,195,88,50,115,175,249,129)
IMAGE_DATA(239,189,98,50,236,248,114,140,249,197,151,206,248,215,85,37,140,118,124,153,125,90,12,62,17,205,248,170,231,45,145,227)
IMAGE_DATA(123,61,215,255,31,239,63,204,179,7,199,194,245,250,197,103,152,241,99,169,18,234,24,63,104,12,136,156,116,242,231,146)
IMAGE_DATA(253,87,190,6,254,125,144,248,136,102,124,85,44,200,226,107,97,188,198,23,231,58,150,42,161,203,248,137,206,191,18,157)
IMAGE_DATA(127,38,58,255,54,175,33,65,251,15,241,26,18,181,255,250,175,107,157,134,70,134,38,250,26,170,91,117,171,110,213,173)
IMAGE_DATA(186,85,183,234,86,221,254,147,155,238,164,245,63,77,137,104,137,190,231,179,85,85,209,18,125,143,103,187,226,213,148,227)
IMAGE_DATA(125,143,207,24,58,141,215,82,85,224,117,84,229,56,157,170,140,106,61,46,165,218,128,75,168,54,226,98,170,31,112,17)
IMAGE_DATA(213,38,92,72,84,128,55,19,109,193,249,84,91,113,30,213,54,156,75,148,131,183,83,101,227,31,169,78,225,29,84,89)
IMAGE_DATA(120,39,62,73,181,11,103,82,237,198,39,168,246,224,227,68,199,112,6,213,81,188,151,234,8,222,135,15,83,237,199,135)
IMAGE_DATA(240,1,170,131,198,127,240,175,253,84,135,141,163,142,208,30,208,19,206,0,103,3,237,38,103,6,237,170,170,121,112,156)
IMAGE_DATA(127,13,97,206,21,100,14,214,27,115,16,132,255,102,131,255,22,131,255,86,237,252,143,152,252,247,59,248,31,8,197,255)
IMAGE_DATA(4,213,206,120,207,129,196,190,82,146,53,7,254,252,75,61,248,23,122,240,231,115,16,31,254,7,98,228,159,73,174,36)
IMAGE_DATA(78,252,149,236,87,99,68,229,156,3,251,51,224,206,191,36,106,254,219,29,252,179,170,136,127,134,39,255,56,204,129,194)
IMAGE_DATA(115,44,246,246,57,240,242,32,53,255,233,231,156,143,167,157,115,1,209,133,120,234,57,23,225,41,63,169,77,84,23,79)
IMAGE_DATA(254,73,61,162,139,241,164,115,27,16,93,130,39,158,123,41,81,35,156,122,110,19,156,122,94,82,96,254,207,157,223,150)
IMAGE_DATA(168,29,213,216,243,219,19,117,48,212,209,149,255,193,24,249,159,36,87,166,113,14,108,235,172,46,254,211,35,53,8,243)
IMAGE_DATA(154,6,247,90,120,170,7,247,212,115,27,19,230,77,240,4,194,125,194,121,205,240,243,231,53,39,74,198,227,107,164,248)
IMAGE_DATA(242,231,172,159,165,186,140,168,19,126,182,102,39,60,166,230,229,113,229,175,152,3,173,252,163,245,31,224,206,99,158,114)
IMAGE_DATA(167,49,95,199,224,94,63,32,247,22,68,45,241,184,26,173,124,249,3,111,96,61,166,230,21,134,174,196,163,169,58,199)
IMAGE_DATA(205,127,52,242,55,251,3,79,190,190,138,115,16,102,253,101,236,107,42,188,134,112,167,49,223,208,242,25,7,247,20,129)
IMAGE_DATA(123,107,162,54,129,214,223,49,6,235,209,53,175,162,26,85,243,106,60,234,130,107,168,226,177,254,138,252,179,136,75,198)
IMAGE_DATA(56,7,18,127,121,14,130,231,159,238,49,207,188,102,34,141,249,70,70,204,123,115,103,158,222,62,16,255,81,23,112,222)
IMAGE_DATA(93,168,158,185,160,43,209,181,84,186,243,207,248,242,175,112,204,129,83,110,236,107,90,236,109,49,223,192,140,121,238,53)
IMAGE_DATA(110,251,47,206,157,175,161,224,231,65,248,91,188,175,195,35,169,174,199,35,47,188,129,74,215,254,171,42,248,175,163,252)
IMAGE_DATA(43,12,190,124,30,44,173,117,176,103,252,237,126,83,135,72,21,243,77,164,220,83,230,159,107,219,255,194,250,105,229,255)
IMAGE_DATA(89,30,252,143,155,188,159,190,176,155,161,238,68,63,197,35,136,246,107,227,191,211,193,63,43,14,252,173,57,168,16,120)
IMAGE_DATA(91,220,101,246,16,251,34,123,203,111,172,152,87,231,254,5,30,185,127,142,153,123,186,243,63,97,242,183,120,223,72,116)
IMAGE_DATA(19,30,81,235,38,252,84,173,155,137,110,81,240,63,224,193,63,35,16,255,147,113,227,95,110,72,158,7,39,119,206,222)
IMAGE_DATA(225,55,102,110,195,98,62,92,237,193,185,247,242,227,15,123,47,96,206,121,63,85,235,86,252,36,85,15,162,219,180,242)
IMAGE_DATA(207,140,51,255,116,131,169,60,15,42,238,60,223,153,34,177,55,253,134,230,54,77,125,98,63,76,237,205,125,239,251,148)
IMAGE_DATA(192,251,201,90,183,227,225,23,129,122,18,245,18,248,59,115,127,139,255,94,15,254,162,247,203,252,183,107,230,95,102,168)
IMAGE_DATA(220,49,23,233,18,119,158,235,79,81,248,13,207,109,56,251,112,177,47,243,247,242,126,198,127,120,45,139,247,176,139,238)
IMAGE_DATA(48,116,39,209,93,158,123,47,153,191,61,247,223,163,88,123,227,203,127,189,201,223,95,112,172,202,235,173,124,62,217,55)
IMAGE_DATA(246,163,247,30,107,237,5,74,34,239,39,46,234,141,159,168,13,186,27,63,94,251,30,205,123,175,157,142,220,71,47,255)
IMAGE_DATA(82,67,101,62,98,199,217,217,51,191,153,96,228,243,50,251,232,98,63,72,221,237,184,193,156,241,126,188,118,31,170,199)
IMAGE_DATA(106,247,37,250,89,220,115,79,157,252,55,152,252,253,5,199,78,146,188,158,238,165,106,164,208,125,20,227,95,168,140,125)
IMAGE_DATA(186,71,37,251,37,158,183,67,254,200,243,70,154,195,208,252,133,175,165,183,249,212,157,143,219,120,63,86,251,231,120,104)
IMAGE_DATA(157,123,13,221,167,61,247,137,47,255,18,65,165,46,178,142,145,217,143,55,216,195,30,86,197,158,199,62,219,163,94,203)
IMAGE_DATA(246,74,52,111,239,78,115,117,150,199,88,220,185,175,123,121,15,144,178,152,223,71,212,15,15,169,211,223,208,128,24,215)
IMAGE_DATA(94,255,220,231,20,121,114,117,241,223,104,227,239,45,56,214,206,30,234,7,173,140,61,108,59,87,246,224,59,246,152,103)
IMAGE_DATA(121,59,203,31,121,30,195,184,115,95,247,138,125,32,101,49,31,128,31,173,115,63,126,180,238,64,67,15,120,240,247,242)
IMAGE_DATA(254,224,107,175,94,254,197,146,74,36,217,191,23,217,143,19,216,67,237,64,205,158,229,155,182,152,55,188,134,231,143,34)
IMAGE_DATA(119,238,235,126,239,92,44,230,15,224,71,234,62,72,244,16,213,224,186,15,7,244,158,232,215,94,157,252,193,179,157,115)
IMAGE_DATA(160,22,28,235,198,30,106,240,42,246,124,205,229,62,111,197,60,247,154,94,6,247,187,132,245,180,175,201,94,220,243,138)
IMAGE_DATA(252,57,115,224,61,184,238,32,60,184,222,47,240,47,168,6,251,120,79,16,239,247,94,123,117,243,15,35,53,251,78,180)
IMAGE_DATA(6,239,198,30,242,29,238,243,206,152,103,249,35,207,99,96,61,5,95,119,243,158,12,131,191,197,124,48,209,35,68,143)
IMAGE_DATA(226,65,245,134,80,121,121,79,80,239,119,171,251,0,123,157,252,193,51,130,178,135,99,221,216,67,45,222,141,253,54,143)
IMAGE_DATA(124,147,197,124,31,33,143,185,143,120,122,63,27,123,57,246,129,26,48,31,100,50,31,138,31,174,255,24,209,227,84,122)
IMAGE_DATA(189,199,233,253,186,249,135,145,27,123,168,199,67,110,105,113,119,103,47,238,181,30,167,57,36,207,101,216,154,10,222,238)
IMAGE_DATA(21,251,64,207,206,252,9,252,80,253,97,68,195,169,244,120,143,187,247,235,228,15,158,177,201,148,27,247,2,97,47,85)
IMAGE_DATA(224,202,30,106,241,97,216,195,94,235,177,58,60,230,33,151,97,107,42,120,187,87,236,3,127,145,249,131,245,159,196,15)
IMAGE_DATA(94,252,20,209,8,252,0,145,252,190,37,86,239,113,242,223,170,149,127,88,193,90,171,98,15,57,142,188,191,245,98,15)
IMAGE_DATA(251,92,22,243,3,12,238,15,152,107,170,154,253,49,243,119,38,118,230,79,19,141,196,3,47,126,134,104,84,28,188,199)
IMAGE_DATA(238,253,217,26,249,115,191,222,236,163,45,130,220,216,179,28,231,166,192,236,65,143,10,49,207,114,25,182,166,202,249,190)
IMAGE_DATA(252,59,31,153,249,192,139,71,227,251,27,140,161,138,126,207,21,204,123,226,193,63,184,242,168,216,251,238,46,14,246,60)
IMAGE_DATA(199,217,30,128,61,228,248,86,204,15,50,115,25,88,83,221,124,135,255,198,202,206,252,89,60,160,193,88,162,231,168,130)
IMAGE_DATA(199,126,52,222,163,151,63,247,235,45,62,218,42,201,172,39,152,236,111,52,217,67,94,63,140,228,245,98,158,163,98,207)
IMAGE_DATA(248,91,49,207,242,153,161,116,77,85,251,142,197,159,113,231,204,199,225,254,13,198,227,254,13,159,39,154,160,105,221,117)
IMAGE_DATA(247,30,189,252,115,29,108,221,149,107,10,60,102,228,133,215,187,178,31,102,238,167,172,156,126,136,205,235,13,191,161,57)
IMAGE_DATA(60,139,121,150,207,176,117,85,204,119,84,191,47,4,238,34,243,126,13,83,137,38,226,251,26,78,98,186,100,50,209,20)
IMAGE_DATA(124,47,213,84,67,211,92,21,100,207,21,15,254,60,71,217,234,163,109,14,49,127,231,123,90,206,126,184,43,251,254,134)
IMAGE_DATA(215,203,126,99,197,252,67,148,253,112,186,174,122,253,182,19,4,220,251,81,238,156,57,231,109,177,254,249,37,211,13,205)
IMAGE_DATA(48,52,19,255,236,82,174,52,155,84,177,175,202,123,24,255,45,26,249,231,8,82,113,206,149,142,17,215,213,28,131,253)
IMAGE_DATA(173,70,253,204,168,37,4,100,63,200,198,126,152,145,211,140,160,235,170,157,189,252,219,218,195,22,119,147,249,52,27,107)
IMAGE_DATA(139,241,44,170,190,151,206,22,52,199,161,160,235,46,40,71,35,255,237,2,75,21,103,145,181,188,166,90,107,107,182,192)
IMAGE_DATA(190,119,0,246,178,223,64,14,255,20,205,221,89,78,51,74,233,249,156,61,56,251,189,54,238,60,182,101,222,192,118,46)
IMAGE_DATA(238,67,245,2,83,35,208,139,14,101,134,240,30,189,252,179,163,210,143,210,218,74,107,9,70,29,199,157,189,221,235,69)
IMAGE_DATA(191,129,124,146,229,146,163,61,125,135,191,91,228,177,206,226,92,230,109,113,190,167,209,60,67,47,25,154,175,148,95,189)
IMAGE_DATA(33,91,240,30,157,252,127,180,177,244,226,236,228,173,202,107,184,96,173,13,202,94,206,117,220,217,91,191,43,225,177,206)
IMAGE_DATA(185,51,230,16,203,118,214,119,55,122,217,208,43,248,238,198,160,95,226,222,10,133,137,125,189,252,157,60,131,72,197,92)
IMAGE_DATA(204,43,229,247,87,246,90,178,184,183,13,207,222,173,190,108,213,25,130,230,251,193,114,206,83,82,236,231,144,29,169,46)
IMAGE_DATA(254,140,219,169,128,114,242,22,223,149,187,115,23,107,153,97,216,219,61,95,245,94,203,107,175,21,38,223,15,19,251,185)
IMAGE_DATA(218,249,135,151,138,121,236,220,131,178,119,175,111,250,215,25,194,213,153,85,177,175,147,191,147,97,150,36,39,99,63,230)
IMAGE_DATA(78,175,9,203,254,112,140,236,45,223,137,71,236,199,151,127,48,169,153,219,227,221,218,91,137,121,14,203,47,161,126,192)
IMAGE_DATA(247,176,124,31,21,132,61,172,165,108,205,252,21,190,171,241,66,162,69,248,206,38,191,38,122,53,20,251,32,123,93,183)
IMAGE_DATA(216,207,197,155,180,241,119,227,24,70,187,165,88,183,114,29,190,183,82,177,31,107,99,207,246,81,211,140,156,50,205,53)
IMAGE_DATA(238,123,55,94,96,112,255,31,147,251,29,77,94,195,189,154,188,30,147,239,132,137,253,188,132,242,63,161,240,22,203,99)
IMAGE_DATA(172,189,237,16,97,95,203,243,251,96,236,33,167,116,243,28,198,125,145,141,123,175,164,55,112,207,164,183,4,246,193,242)
IMAGE_DATA(157,32,190,163,138,125,157,252,213,28,195,200,242,117,168,167,241,186,2,207,241,161,166,0,251,90,216,91,221,223,96,180)
IMAGE_DATA(81,39,30,103,212,204,38,210,58,153,204,254,128,135,223,67,204,223,209,228,127,137,44,238,61,147,222,198,183,39,189,19)
IMAGE_DATA(131,239,132,139,125,189,252,143,135,98,109,95,71,237,178,251,14,247,124,94,83,24,109,212,233,199,25,181,51,206,126,170)
IMAGE_DATA(141,61,236,163,188,214,90,22,243,111,16,246,111,154,220,111,79,122,23,223,214,244,125,87,246,246,218,126,120,223,145,99)
IMAGE_DATA(63,15,255,160,141,191,27,203,96,58,102,230,50,86,236,11,190,35,120,62,207,76,196,53,86,197,30,106,5,110,249,61)
IMAGE_DATA(200,138,249,223,24,220,223,35,250,0,247,104,186,56,176,231,71,187,230,114,246,122,249,31,11,173,12,133,88,29,159,248)
IMAGE_DATA(78,61,209,119,88,77,71,230,238,204,111,152,223,248,177,135,158,102,204,83,238,239,83,238,61,154,126,136,111,109,246,59)
IMAGE_DATA(147,125,88,207,15,226,59,34,255,124,141,252,85,44,131,201,114,219,189,230,239,113,134,8,249,142,225,59,196,243,221,184)
IMAGE_DATA(59,235,9,110,236,173,51,0,123,136,249,30,52,230,127,75,185,223,210,108,9,209,239,93,217,219,61,127,135,175,231,123)
IMAGE_DATA(197,126,62,213,70,141,252,143,134,210,94,165,142,8,107,238,48,33,246,71,5,226,238,23,243,98,93,193,30,243,192,253)
IMAGE_DATA(35,124,115,179,63,224,155,155,47,245,96,239,239,249,78,223,113,174,185,241,224,175,230,233,165,35,14,237,163,252,237,177)
IMAGE_DATA(47,230,59,222,220,131,179,7,1,251,91,77,246,191,39,236,255,136,111,106,254,49,209,159,98,96,31,220,119,128,125,129)
IMAGE_DATA(86,254,78,158,94,218,167,212,97,101,236,243,124,39,44,247,67,54,199,18,71,207,48,252,230,35,34,22,243,192,253,198)
IMAGE_DATA(230,203,136,62,113,101,31,214,243,189,124,135,241,223,160,141,191,24,97,222,58,236,170,253,148,191,58,246,251,55,28,79)
IMAGE_DATA(223,141,195,251,89,53,119,247,152,151,217,131,3,138,126,195,216,255,25,255,52,249,47,68,127,13,192,62,140,231,171,125)
IMAGE_DATA(167,64,51,127,249,142,253,56,219,101,143,90,85,236,243,92,31,222,23,194,59,43,200,53,253,99,126,159,237,169,19,87)
IMAGE_DATA(32,59,251,79,8,247,79,113,119,194,190,123,242,223,53,176,247,247,29,96,175,151,255,161,152,197,163,152,231,60,170,216)
IMAGE_DATA(183,114,253,89,236,29,33,201,53,131,198,188,184,175,98,236,151,9,236,255,134,187,37,255,3,119,75,249,60,20,123,107)
IMAGE_DATA(189,13,231,59,160,66,141,252,157,14,224,205,216,210,65,165,108,181,77,69,236,211,119,133,141,94,160,239,7,225,157,32)
IMAGE_DATA(212,49,157,220,213,236,65,246,184,103,236,111,32,236,111,72,249,50,4,251,96,158,175,138,253,66,170,245,26,249,171,57)
IMAGE_DATA(134,145,236,233,247,11,245,53,248,141,136,28,251,176,207,226,117,100,168,101,66,77,199,141,187,184,167,5,57,217,127,129)
IMAGE_DATA(175,79,249,10,95,223,98,185,70,246,238,190,3,236,117,242,63,40,252,231,205,215,239,40,103,46,35,214,54,225,119,10)
IMAGE_DATA(180,198,32,197,62,171,223,191,74,235,152,80,87,80,197,188,88,79,112,99,127,93,139,127,197,200,222,223,243,57,251,34)
IMAGE_DATA(173,252,99,139,126,111,247,98,158,110,197,254,28,250,27,133,187,27,205,183,197,62,173,169,209,186,206,219,180,166,115,76)
IMAGE_DATA(138,121,177,150,3,107,45,247,28,145,253,181,45,190,13,204,94,149,235,184,123,190,221,119,138,168,210,181,241,87,57,188)
IMAGE_DATA(157,109,208,21,66,157,199,136,235,42,171,175,189,100,120,207,2,163,150,111,197,62,171,45,188,175,172,161,241,220,30,242)
IMAGE_DATA(156,110,134,223,139,236,187,182,92,25,146,189,119,174,163,98,95,104,176,143,15,255,232,228,157,177,170,118,112,25,244,55)
IMAGE_DATA(56,44,246,23,209,90,62,212,147,121,236,179,90,230,135,138,250,37,203,237,187,165,124,198,216,167,252,211,198,190,75,203)
IMAGE_DATA(85,202,189,85,24,246,254,190,195,216,23,107,228,31,60,251,15,34,183,93,115,134,180,174,102,152,239,15,153,247,188,73)
IMAGE_DATA(216,255,198,168,171,45,166,123,92,49,230,197,188,158,123,254,117,45,190,38,236,191,33,236,191,163,236,175,105,185,38,206)
IMAGE_DATA(236,69,254,235,206,2,254,123,61,120,171,153,203,235,234,29,10,239,97,53,205,37,182,152,23,243,122,203,119,190,33,252)
IMAGE_DATA(87,16,254,255,38,236,87,227,107,90,173,13,144,223,235,97,175,147,127,184,234,79,52,188,229,60,210,190,182,154,235,110)
IMAGE_DATA(211,119,105,77,25,106,107,80,99,80,237,101,65,204,119,190,22,124,7,216,127,143,175,110,149,174,136,121,255,60,199,157)
IMAGE_DATA(253,6,87,246,37,120,109,2,249,103,248,176,246,103,46,174,173,42,239,129,186,102,166,99,47,203,114,75,30,251,93,91)
IMAGE_DATA(128,239,252,155,250,206,213,173,214,225,171,90,109,208,206,190,80,193,94,55,255,112,213,127,181,88,189,109,140,130,183,154)
IMAGE_DATA(57,95,87,221,188,7,106,60,98,204,243,188,18,228,140,253,181,52,246,59,183,222,168,244,250,120,176,215,203,127,143,36)
IMAGE_DATA(117,28,171,196,25,115,254,252,119,13,176,231,117,99,206,165,202,123,184,247,64,77,95,174,217,243,218,49,203,121,86,56)
IMAGE_DATA(98,191,115,235,77,113,98,159,238,96,95,138,191,215,198,63,252,219,95,103,124,139,245,78,185,230,96,189,87,183,246,188)
IMAGE_DATA(119,54,150,242,78,238,253,134,247,64,141,77,230,206,101,203,121,12,223,191,170,213,70,124,101,235,205,248,138,214,219,240)
IMAGE_DATA(229,109,118,224,78,109,118,225,203,218,102,224,142,109,247,227,14,237,14,226,246,237,142,224,118,237,142,225,182,237,79,16)
IMAGE_DATA(157,196,109,218,159,194,173,59,100,83,133,101,95,66,216,235,229,191,59,106,241,184,230,252,251,155,252,249,111,122,102,218)
IMAGE_DATA(249,55,126,133,228,157,191,50,242,254,215,140,223,144,56,189,95,197,157,231,54,178,247,92,213,106,61,137,253,31,8,255)
IMAGE_DATA(45,248,138,54,219,9,255,157,184,83,219,61,132,253,62,194,254,0,97,127,216,100,223,166,125,150,193,61,7,183,234,144)
IMAGE_DATA(71,21,13,123,157,252,143,59,60,34,168,44,47,177,248,139,245,102,185,230,51,95,216,119,185,229,253,75,28,123,88,57)
IMAGE_DATA(159,103,252,157,222,115,101,235,173,132,253,143,82,236,31,34,252,143,226,118,237,143,211,184,103,236,115,9,247,124,220,178)
IMAGE_DATA(99,33,81,81,84,236,203,240,26,141,252,119,69,165,19,130,224,183,85,214,111,10,83,205,223,180,49,254,115,140,255,15)
IMAGE_DATA(72,85,243,225,252,217,218,171,138,119,121,47,229,230,253,150,247,236,38,252,247,18,254,98,236,103,26,158,147,99,176,47)
IMAGE_DATA(194,45,58,22,19,149,70,197,94,39,127,150,103,239,10,168,157,174,178,189,111,49,249,167,121,242,23,115,31,47,238,226)
IMAGE_DATA(94,202,226,47,121,127,27,131,127,219,221,132,253,94,203,123,132,216,7,191,129,184,7,246,41,29,203,112,242,101,21,1)
IMAGE_DATA(216,175,53,217,151,26,236,203,240,234,88,249,43,230,32,184,50,29,218,225,80,16,254,126,241,46,114,231,185,77,87,202)
IMAGE_DATA(127,149,15,255,125,214,186,235,224,95,68,227,30,216,55,191,236,76,162,216,219,248,171,248,69,163,147,138,156,209,158,199)
IMAGE_DATA(56,215,212,160,220,115,124,243,74,103,110,233,157,95,122,231,247,162,231,136,236,203,227,192,63,204,28,156,116,72,205,218)
IMAGE_DATA(139,183,154,249,54,137,185,63,119,245,251,170,42,101,31,11,127,199,28,120,177,12,34,47,222,110,204,157,177,238,199,61)
IMAGE_DATA(92,204,139,117,52,209,235,207,2,246,161,231,32,203,38,119,206,222,188,221,98,61,22,238,225,98,62,8,251,178,170,97)
IMAGE_DATA(239,224,15,10,194,54,44,111,117,156,171,152,251,113,15,26,243,110,126,227,183,206,6,98,175,147,191,114,14,228,121,240)
IMAGE_DATA(102,27,38,198,221,153,71,195,221,43,230,131,249,141,59,123,55,46,154,217,251,206,67,181,226,206,93,108,137,190,199,179)
IMAGE_DATA(85,137,104,137,190,231,68,171,186,85,183,234,86,221,170,91,117,171,110,213,173,186,133,104,255,7,38,179,169,133,0,0)
IMAGE_END_DATA(5984, 7)
IMAGE_DATA(120,156,237,154,107,144,21,197,21,199,199,36,36,138,18,32,26,97,133,93,22,221,15,249,206,39,171,82,41,171,244,67)
IMAGE_DATA(170,224,107,190,9,242,208,4,119,21,150,24,246,193,242,184,200,99,213,10,101,137,47,240,177,10,66,84,18,52,160,70)
IMAGE_DATA(212,37,128,20,33,38,41,124,164,82,104,66,37,22,106,25,74,116,119,209,93,118,23,182,219,57,51,183,239,237,219,183)
IMAGE_DATA(103,186,123,230,204,244,92,118,254,212,191,128,59,115,230,204,252,122,102,250,220,115,219,153,226,76,113,162,169,64,43,255)
IMAGE_DATA(78,43,30,246,15,178,175,185,115,231,210,121,243,230,85,24,62,171,171,171,251,133,78,126,216,95,20,59,102,93,221,50)
IMAGE_DATA(101,126,22,63,103,206,28,207,32,248,236,232,209,163,197,99,192,121,68,203,15,127,131,117,226,249,252,188,96,123,24,97)
IMAGE_DATA(89,254,40,241,44,191,120,30,182,242,243,99,145,100,126,217,253,39,222,139,97,241,214,20,253,101,96,36,42,177,209,254)
IMAGE_DATA(135,15,31,246,76,245,142,85,49,120,44,30,98,89,60,8,62,11,143,119,60,59,197,56,207,236,255,238,223,133,66,193)
IMAGE_DATA(44,158,106,197,203,174,175,28,75,229,219,249,120,198,138,153,197,59,92,188,184,93,21,95,254,67,99,196,83,173,120,169)
IMAGE_DATA(75,177,84,117,253,82,254,229,88,170,53,126,112,94,176,189,188,143,31,203,206,183,114,91,117,124,181,169,120,189,186,207)
IMAGE_DATA(66,16,19,124,9,47,131,203,184,127,79,210,180,24,59,161,161,161,177,103,229,202,213,67,157,157,133,129,142,142,181,156)
IMAGE_DATA(215,149,12,219,96,31,216,23,98,216,65,234,235,27,158,250,240,195,79,67,223,204,188,96,95,136,41,134,95,217,218,218)
IMAGE_DATA(214,15,159,159,249,255,55,99,95,15,19,210,55,68,200,167,31,125,70,254,243,206,7,228,243,143,207,146,126,247,255,125)
IMAGE_DATA(125,99,164,191,111,148,124,249,229,249,49,216,23,98,32,22,174,103,213,170,245,231,224,179,161,139,132,156,60,254,62,121)
IMAGE_DATA(232,198,27,201,198,105,211,200,211,183,206,39,221,77,77,100,119,243,114,114,126,148,184,177,144,99,148,192,190,16,195,120)
IMAGE_DATA(180,183,173,30,128,207,78,28,120,155,116,58,14,41,76,154,68,78,254,227,95,4,118,220,179,100,41,233,154,49,131,140)
IMAGE_DATA(141,141,121,241,142,51,226,197,183,181,173,27,96,241,171,186,214,123,241,27,103,214,147,123,220,248,131,61,187,8,156,228)
IMAGE_DATA(208,121,74,223,235,125,135,252,251,200,107,94,188,227,128,71,60,63,240,64,57,190,176,233,183,3,167,142,191,75,87,186)
IMAGE_DATA(177,27,38,78,36,159,156,250,140,12,186,177,253,125,23,201,224,176,123,156,81,74,47,140,94,36,96,150,191,189,189,28)
IMAGE_DATA(127,239,253,15,13,156,216,179,143,182,186,241,247,221,208,228,158,231,8,249,250,27,74,207,157,35,100,216,61,145,161,33)
IMAGE_DATA(184,20,66,7,7,71,8,184,42,190,251,193,129,15,94,125,139,174,112,227,187,27,103,147,175,250,46,144,115,238,21,245)
IMAGE_DATA(245,93,164,71,95,220,75,254,251,209,231,110,156,127,254,44,190,171,171,28,223,181,122,195,192,240,16,165,107,39,79,38)
IMAGE_DATA(109,238,49,254,186,239,117,111,159,119,15,29,247,254,127,234,253,255,21,175,221,183,207,191,28,223,217,177,206,27,191,19)
IMAGE_DATA(111,188,77,54,78,159,78,214,95,115,53,57,176,225,126,178,237,166,155,201,131,63,253,25,25,26,246,134,130,66,236,232)
IMAGE_DATA(232,136,56,126,165,251,167,127,112,108,236,139,179,35,228,189,67,199,200,155,61,59,201,63,143,252,141,124,53,0,227,126)
IMAGE_DATA(129,156,253,194,189,1,200,40,57,115,166,234,254,137,123,255,86,61,63,237,237,107,60,119,180,107,61,63,177,158,223,159)
IMAGE_DATA(55,58,141,78,174,64,205,116,189,197,9,154,173,162,123,75,241,216,170,220,167,91,90,86,208,147,39,79,187,15,35,69)
IMAGE_DATA(49,28,11,142,9,199,14,57,7,47,247,142,29,123,208,242,138,134,99,135,156,195,22,56,199,164,114,51,23,57,108,145)
IMAGE_DATA(228,63,221,219,251,151,196,243,67,142,34,3,81,70,199,249,251,177,99,145,207,193,9,168,108,84,249,54,221,114,11,41)
IMAGE_DATA(64,133,36,120,205,172,89,100,107,115,51,73,42,191,152,23,242,237,221,190,157,130,249,109,240,111,236,252,144,139,207,13)
IMAGE_DATA(57,197,125,216,54,145,1,171,44,163,230,23,115,7,49,102,251,137,231,22,39,63,228,18,153,135,141,15,108,103,247,164)
IMAGE_DATA(227,200,109,146,95,188,199,204,238,175,120,249,129,163,152,63,202,243,22,149,191,200,190,96,248,110,136,155,95,246,188,69)
IMAGE_DATA(201,31,245,249,19,243,235,62,215,58,215,158,214,245,199,201,111,242,236,193,190,112,190,186,207,158,78,126,56,150,206,253)
IMAGE_DATA(207,239,135,153,95,247,30,224,57,97,242,103,22,223,191,226,57,176,237,178,241,193,200,47,187,23,68,179,185,16,243,249)
IMAGE_DATA(147,25,198,151,205,185,204,81,158,253,144,252,182,235,47,219,245,167,237,250,187,116,14,150,190,127,240,231,96,235,251,215)
IMAGE_DATA(184,211,79,22,58,11,109,159,67,174,92,185,114,229,202,149,43,87,45,11,187,104,173,53,219,144,237,107,206,170,211,144)
IMAGE_DATA(237,107,204,186,147,146,52,223,125,135,155,60,119,131,15,221,224,121,51,243,159,175,167,155,152,15,94,79,55,30,156,237)
IMAGE_DATA(187,119,54,221,208,219,232,251,173,178,239,125,115,86,201,235,223,104,40,185,112,0,92,239,121,221,235,224,153,158,215,254)
IMAGE_DATA(169,236,53,175,205,40,251,213,235,232,106,230,87,174,163,93,175,212,249,222,95,71,87,237,159,238,123,223,116,218,201,252)
IMAGE_DATA(199,105,180,131,249,229,107,105,59,243,75,224,31,123,110,219,11,190,198,243,202,63,148,157,210,56,84,115,63,210,20,204)
IMAGE_DATA(222,229,189,153,227,94,98,223,203,177,215,224,158,117,246,191,249,253,213,37,39,60,6,169,179,247,185,55,112,220,235,149)
IMAGE_DATA(220,215,112,220,211,100,127,207,158,31,121,78,136,127,237,178,223,207,177,223,199,177,119,121,119,114,220,59,42,184,95,203)
IMAGE_DATA(113,215,103,15,254,245,139,232,99,32,101,223,205,177,223,124,137,179,215,229,238,123,42,93,241,194,84,204,49,208,102,143)
IMAGE_DATA(55,207,214,54,123,223,83,240,249,167,194,30,103,158,181,205,190,245,121,20,254,53,201,62,141,121,86,197,158,57,230,24)
IMAGE_DATA(148,98,199,107,109,31,206,126,42,199,126,74,21,251,214,223,77,198,227,63,206,107,251,40,236,151,35,243,207,100,141,147)
IMAGE_DATA(97,246,152,252,51,201,222,66,109,111,194,126,249,238,31,226,241,191,68,217,99,205,179,50,246,203,16,249,231,181,125,8)
IMAGE_DATA(123,151,119,43,199,157,177,95,182,11,153,127,70,106,156,90,97,143,202,63,35,236,179,84,219,171,216,223,189,107,18,26)
IMAGE_DATA(255,52,217,155,202,86,141,163,98,127,247,115,136,252,19,174,237,177,149,86,125,89,226,190,155,227,94,100,127,215,115,87)
IMAGE_DATA(161,242,199,158,103,211,146,45,246,152,252,107,149,61,147,13,246,119,237,68,228,143,196,222,150,146,168,237,85,236,91,18)
IMAGE_DATA(224,159,22,251,176,250,50,14,255,36,106,28,224,94,98,191,179,204,190,101,199,149,168,252,163,214,56,38,50,173,237,179)
IMAGE_DATA(204,30,147,127,210,236,227,214,246,42,254,54,216,55,39,192,63,139,236,89,125,25,164,164,106,123,21,251,230,103,39,162)
IMAGE_DATA(241,143,82,219,235,10,235,59,173,138,127,82,53,78,11,199,190,153,99,159,4,127,236,250,18,179,159,144,53,246,216,252)
IMAGE_DATA(19,97,143,216,183,15,226,111,139,253,157,207,224,241,55,233,29,107,243,71,238,95,202,148,100,109,175,98,127,231,51,87)
IMAGE_DATA(32,243,207,46,251,96,254,201,215,56,65,236,113,249,227,246,208,146,232,219,203,148,56,251,42,238,62,251,165,61,190,177)
IMAGE_DATA(248,235,244,142,117,85,11,125,123,12,246,75,123,46,71,228,143,215,183,183,189,54,33,45,246,191,122,26,151,63,214,111)
IMAGE_DATA(38,89,88,23,130,59,207,202,217,99,242,87,253,62,62,126,217,95,193,177,191,188,130,61,54,255,176,181,9,186,202,194)
IMAGE_DATA(154,156,180,216,255,242,169,31,160,241,199,96,239,241,207,192,154,156,180,216,39,194,95,178,38,199,148,127,22,214,133,96)
IMAGE_DATA(212,246,42,246,232,252,3,214,133,152,40,75,236,121,233,212,56,65,146,113,191,227,201,239,123,70,227,31,178,38,199,136)
IMAGE_DATA(191,133,218,94,71,58,245,165,41,123,76,254,97,235,161,204,248,167,95,219,99,176,135,247,77,16,255,32,246,183,63,129)
IMAGE_DATA(204,63,96,45,90,86,216,171,230,217,64,254,154,181,189,76,97,236,81,249,199,100,207,248,103,161,190,20,165,59,207,134)
IMAGE_DATA(241,151,177,191,253,137,9,104,252,131,214,190,154,40,139,236,75,252,53,106,28,125,246,19,124,111,71,228,31,176,238,216)
IMAGE_DATA(140,191,253,218,94,202,95,179,190,148,241,15,99,191,100,251,247,80,249,203,126,175,50,149,237,218,62,42,123,25,127,21)
IMAGE_DATA(123,76,254,88,235,161,108,127,175,146,241,87,245,208,100,236,121,254,65,236,151,108,67,228,31,242,251,184,137,108,127,167)
IMAGE_DATA(21,165,195,30,222,51,50,241,243,44,112,47,177,223,230,123,49,34,255,176,223,76,162,240,183,209,183,151,73,135,189,140)
IMAGE_DATA(191,14,251,197,143,127,23,151,127,64,239,216,148,191,173,254,165,156,191,154,125,48,255,112,246,168,252,67,250,246,166,178)
IMAGE_DATA(213,59,14,102,31,222,67,131,119,124,53,127,53,251,69,136,252,85,125,123,83,254,73,177,103,146,125,167,21,21,149,189)
IMAGE_DATA(199,95,152,103,23,115,236,23,49,63,246,29,60,254,138,190,189,169,176,107,123,81,42,246,62,127,53,123,233,189,175,201)
IMAGE_DATA(126,33,50,255,176,222,177,169,48,107,28,153,196,239,180,65,252,85,236,101,252,117,217,99,242,215,233,219,155,143,65,60)
IMAGE_DATA(246,97,82,245,142,117,184,179,218,94,202,95,131,253,194,71,17,249,107,246,237,163,40,105,246,178,222,177,138,61,95,95)
IMAGE_DATA(86,241,151,204,179,192,125,17,199,29,124,219,163,151,33,242,215,235,29,199,145,201,239,85,42,254,170,222,113,84,246,32)
IMAGE_DATA(93,246,183,61,130,203,95,183,127,105,75,97,107,114,68,233,176,135,121,86,38,93,246,152,252,77,123,199,105,203,180,119)
IMAGE_DATA(12,138,194,30,164,203,126,193,35,14,34,127,243,190,125,26,138,218,59,102,146,245,208,152,96,158,149,73,156,103,65,30)
IMAGE_DATA(119,129,253,130,135,241,248,199,233,219,39,33,211,117,33,166,98,53,142,174,24,123,143,123,145,125,18,252,227,244,47,49)
IMAGE_DATA(20,103,77,142,174,196,250,82,71,50,246,243,183,226,242,183,177,46,4,20,101,221,177,201,247,217,10,238,1,181,189,148)
IMAGE_DATA(57,247,206,145,177,95,128,200,223,118,223,30,139,189,108,158,85,245,208,2,231,217,48,246,200,239,159,90,89,111,159,26)
IMAGE_DATA(123,97,158,229,217,207,127,56,25,254,217,89,119,156,93,246,11,182,86,126,134,197,63,59,236,245,215,190,218,188,239,147)
IMAGE_DATA(226,95,187,236,229,191,143,235,244,208,130,106,123,217,251,62,41,254,181,178,222,62,73,246,226,60,27,244,206,73,142,127)
IMAGE_DATA(246,215,219,167,197,222,123,223,132,112,199,231,95,59,245,101,26,236,195,238,121,68,254,21,99,80,11,236,211,172,237,83)
IMAGE_DATA(96,47,240,31,39,236,13,107,156,180,248,131,243,218,62,18,251,56,252,171,199,32,147,53,78,102,239,251,184,236,165,99)
IMAGE_DATA(144,45,246,118,106,251,20,217,87,241,7,95,74,236,163,212,246,26,236,49,249,75,199,0,60,94,107,123,5,119,108,246)
IMAGE_DATA(202,113,200,157,56,119,94,182,175,49,171,182,33,219,215,108,219,185,114,229,202,149,43,87,174,92,185,12,244,45,142,54)
IMAGE_DATA(253,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(2624, 5)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,155,7,152,21,213,25,134,215,138,226,130,8,74,19,22,150,46,42,42,88,176,163,160,98,73,20,16,11,33)
IMAGE_DATA(130,10,130,10,136,32,85,64,172,137,154,102,140,26,77,81,98,52,137,198,152,106,154,38,177,161,184,128,74,145,226,210)
IMAGE_DATA(17,216,93,182,47,187,44,224,252,57,255,41,51,103,206,156,51,229,222,115,185,152,220,225,249,158,7,118,103,230,204,125)
IMAGE_DATA(231,187,223,249,207,63,195,128,22,121,45,242,164,237,32,233,239,205,137,242,137,154,25,148,207,247,81,143,205,47,40,232)
IMAGE_DATA(252,198,180,105,115,26,102,205,154,95,53,115,230,125,213,158,230,185,194,223,225,62,184,47,63,23,221,58,118,44,120,99)
IMAGE_DATA(245,234,173,16,119,195,125,241,24,113,205,147,39,79,111,192,159,151,149,53,56,229,59,27,157,202,202,125,78,221,151,142)
IMAGE_DATA(83,90,178,203,41,94,188,210,217,180,108,157,83,86,190,199,169,217,133,63,171,119,112,95,60,70,124,222,217,179,239,175)
IMAGE_DATA(198,159,149,151,55,58,117,245,0,181,13,142,243,135,121,15,56,247,183,104,225,60,57,224,34,231,153,43,174,116,30,233)
IMAGE_DATA(209,211,89,241,238,18,167,182,222,161,199,227,49,130,21,126,78,252,89,69,197,94,167,134,28,251,194,240,27,157,137,121)
IMAGE_DATA(121,206,171,83,166,59,117,142,227,236,248,162,218,153,66,254,253,175,23,127,237,52,236,99,199,227,49,130,235,204,89,236)
IMAGE_DATA(120,114,168,243,214,147,207,58,147,201,190,143,245,233,227,84,144,235,109,32,159,172,146,92,251,155,207,189,224,108,219,84)
IMAGE_DATA(6,85,213,154,227,249,248,229,100,176,167,46,189,204,153,154,151,7,191,159,50,205,105,36,63,171,34,215,84,93,253,37)
IMAGE_DATA(224,223,235,200,249,202,201,185,76,199,239,32,188,190,213,251,68,231,30,50,254,63,190,255,180,179,15,112,236,70,167,158)
IMAGE_DATA(28,220,176,7,160,186,234,75,7,63,163,233,248,146,138,61,206,227,125,251,226,248,228,248,167,156,189,228,103,181,181,0)
IMAGE_DATA(171,22,45,119,62,252,211,223,41,219,10,237,248,243,232,241,120,207,254,248,192,35,206,36,114,252,211,3,7,57,228,114)
IMAGE_DATA(233,246,120,191,126,206,130,97,195,29,114,9,176,179,180,65,61,222,189,127,120,223,171,9,131,151,198,140,119,102,146,115)
IMAGE_DATA(252,116,200,48,231,175,115,30,112,230,182,106,233,44,124,249,53,118,124,217,110,245,254,185,254,41,45,173,119,170,200,103)
IMAGE_DATA(172,105,116,156,13,171,54,58,239,188,242,186,243,246,203,175,18,238,229,78,5,225,142,215,142,30,83,252,147,174,127,13)
IMAGE_DATA(223,159,121,213,51,102,204,165,98,223,159,251,76,223,159,180,190,191,131,59,231,117,206,203,109,198,237,116,162,34,34,176)
IMAGE_DATA(172,34,126,238,168,177,247,222,121,231,221,176,106,213,102,168,169,1,43,194,115,225,57,241,220,33,215,64,199,94,176,224)
IMAGE_DATA(21,107,227,170,194,115,135,92,67,17,94,99,166,198,22,226,28,138,52,227,239,125,243,205,133,25,31,31,199,224,12,212)
IMAGE_DATA(45,229,115,22,189,255,126,162,253,185,31,83,30,31,199,123,104,224,64,103,62,57,70,213,156,130,2,231,137,219,111,119)
IMAGE_DATA(50,53,190,58,46,142,247,218,179,207,2,74,254,29,254,221,246,248,56,150,60,54,142,169,238,35,126,23,198,32,149,241)
IMAGE_DATA(213,177,77,231,23,251,233,174,45,213,241,113,44,149,121,216,253,193,223,135,121,50,233,248,170,199,162,252,101,211,255,200)
IMAGE_DATA(81,29,63,233,247,45,157,241,85,246,243,211,200,137,84,198,215,125,223,178,57,126,216,247,250,127,241,243,39,249,238,225)
IMAGE_DATA(190,120,189,81,254,76,50,62,158,43,142,255,229,253,108,142,31,215,3,50,39,155,252,133,212,252,85,175,65,252,62,142)
IMAGE_DATA(63,82,25,95,231,5,85,98,46,204,212,248,242,189,22,115,174,144,5,255,103,187,254,202,118,253,153,237,250,219,189,134)
IMAGE_DATA(44,173,63,228,107,200,214,250,235,255,110,235,61,58,111,116,182,175,33,183,229,182,220,150,219,114,91,110,203,109,185,237)
IMAGE_DATA(171,188,217,46,90,191,106,202,198,150,237,207,124,160,106,127,108,217,254,140,7,186,50,181,105,199,251,16,246,113,237,133)
IMAGE_DATA(69,84,123,224,35,170,70,40,162,218,77,181,24,26,168,150,64,61,213,82,216,69,245,49,212,81,125,2,181,68,53,240)
IMAGE_DATA(41,209,50,168,166,90,14,85,84,43,160,146,168,2,86,82,149,195,103,84,59,97,21,85,25,172,134,82,170,53,80,66)
IMAGE_DATA(181,22,118,80,125,14,219,137,182,65,49,213,23,176,142,106,43,172,135,45,84,27,96,51,108,164,218,196,255,224,191,54)
IMAGE_DATA(80,109,225,123,109,165,71,224,145,120,6,60,27,106,45,57,51,106,205,254,186,15,129,243,127,64,152,11,197,185,7,139)
IMAGE_DATA(249,61,136,195,255,83,206,127,25,231,191,220,58,255,173,46,255,13,1,254,27,19,241,223,65,181,58,211,247,64,97,255)
IMAGE_DATA(165,34,239,30,68,243,111,8,225,95,27,194,95,220,131,204,240,223,152,38,255,18,114,37,25,226,175,101,191,16,28,170)
IMAGE_DATA(224,61,240,127,7,204,252,235,83,230,191,50,192,191,108,63,241,47,14,229,159,129,123,160,201,28,143,189,255,30,132,101)
IMAGE_DATA(144,158,255,220,131,14,135,57,7,29,65,116,36,220,123,208,81,48,251,224,124,162,230,48,235,224,163,137,142,129,153,135)
IMAGE_DATA(180,36,58,22,102,28,114,28,81,107,152,126,72,91,152,126,104,187,216,252,239,62,188,27,81,119,170,201,135,247,32,234)
IMAGE_DATA(201,213,203,200,127,83,154,252,75,201,149,89,188,7,190,121,214,22,255,185,121,135,17,230,77,56,247,166,112,111,8,247)
IMAGE_DATA(233,135,180,33,204,219,194,52,194,125,218,161,199,195,61,135,118,32,234,8,83,15,43,136,228,47,88,223,69,117,2,81)
IMAGE_DATA(111,184,171,73,111,152,212,228,196,140,242,215,220,3,171,252,83,205,31,228,46,60,79,185,83,207,55,227,220,91,196,228)
IMAGE_DATA(222,137,168,51,76,57,172,48,146,63,242,70,214,147,154,156,196,117,50,76,164,234,147,177,252,177,200,223,61,30,121,138)
IMAGE_DATA(249,85,190,7,73,230,95,198,190,137,38,107,8,119,234,249,86,94,206,4,184,23,72,220,187,16,117,141,53,255,78,226)
IMAGE_DATA(172,39,54,57,133,106,66,147,83,97,194,17,167,81,101,98,254,149,249,151,145,148,76,243,30,40,252,213,123,16,191,254)
IMAGE_DATA(52,123,158,101,205,12,234,249,214,220,243,225,220,89,166,247,136,197,127,194,17,130,119,95,170,59,143,232,71,116,58,149)
IMAGE_DATA(237,250,51,179,252,247,4,238,65,80,38,246,77,60,246,62,207,183,116,61,47,178,198,180,254,18,220,197,28,138,121,30)
IMAGE_DATA(135,191,199,251,12,184,131,234,76,184,227,200,179,168,108,173,191,246,7,255,143,40,255,61,156,175,184,15,158,22,5,216)
IMAGE_DATA(51,254,254,188,105,70,164,243,124,91,165,246,84,249,87,250,214,191,56,127,122,245,127,89,8,255,237,46,239,219,143,236)
IMAGE_DATA(207,117,54,209,57,48,158,104,131,53,254,171,3,252,203,50,192,223,187,7,123,36,222,30,119,149,61,122,95,102,239,229)
IMAGE_DATA(141,231,121,125,237,95,19,82,251,87,184,181,167,153,255,14,151,191,199,251,92,162,243,96,124,211,243,96,92,211,243,137)
IMAGE_DATA(46,208,240,223,24,194,191,56,22,255,210,140,241,111,228,82,239,67,144,187,96,31,200,27,183,182,97,158,79,214,123,8)
IMAGE_DATA(174,189,162,248,227,218,11,153,11,222,227,154,94,8,183,81,13,32,186,200,42,255,146,12,243,47,226,76,213,251,160,227)
IMAGE_DATA(46,234,157,217,10,123,55,111,104,109,211,62,194,251,73,122,111,230,181,239,56,137,247,109,77,47,134,177,71,161,6,18)
IMAGE_DATA(13,146,248,7,107,127,143,255,186,16,254,114,246,171,252,87,90,230,191,155,171,49,112,47,138,20,238,162,214,159,173,201)
IMAGE_DATA(27,81,219,8,246,201,188,175,242,15,203,126,198,127,108,83,143,247,152,163,46,225,186,148,232,178,208,181,151,202,223,95)
IMAGE_DATA(251,127,174,153,123,51,203,127,177,203,63,90,184,175,46,235,189,122,190,99,164,247,83,207,30,111,238,69,74,50,239,91)
IMAGE_DATA(143,26,12,183,230,163,46,135,91,242,175,176,188,246,90,29,168,125,236,242,111,224,218,29,33,182,159,159,61,203,155,105)
IMAGE_DATA(188,158,87,217,167,230,253,56,125,183,237,156,57,227,125,75,254,149,84,55,231,95,69,244,181,140,215,158,54,249,47,113)
IMAGE_DATA(249,71,11,247,157,169,100,61,93,75,29,86,64,215,81,140,127,173,214,251,116,141,74,214,75,162,110,199,250,81,212,141)
IMAGE_DATA(180,134,161,245,139,152,75,47,138,232,59,111,247,241,190,57,255,235,48,186,217,213,92,215,88,175,125,50,203,191,94,82)
IMAGE_DATA(131,65,222,62,42,251,169,156,61,174,97,117,236,133,247,217,26,245,116,182,86,162,117,251,217,180,86,103,117,140,199,93)
IMAGE_DATA(228,122,88,246,32,41,143,249,53,68,67,96,84,179,161,92,195,210,156,123,163,107,159,157,228,155,107,139,255,82,31,255)
IMAGE_DATA(112,225,190,126,246,216,63,40,228,107,216,238,70,246,152,59,126,207,179,186,157,213,143,162,142,97,220,69,174,135,121,31)
IMAGE_DATA(73,121,204,135,193,77,205,174,133,155,154,15,231,186,46,132,127,88,246,199,159,123,237,242,223,165,168,94,145,255,247,50)
IMAGE_DATA(251,41,18,123,236,29,232,217,179,122,211,231,121,158,53,162,126,148,185,139,92,143,122,230,226,49,191,14,190,217,252,122)
IMAGE_DATA(162,27,168,70,54,191,49,102,246,164,62,247,218,228,143,153,29,188,7,122,225,190,38,246,216,131,215,177,23,115,174,200)
IMAGE_DATA(121,207,243,34,107,6,113,238,151,73,243,233,85,46,123,121,205,43,243,23,204,145,247,200,230,35,96,228,209,223,128,111)
IMAGE_DATA(80,141,140,200,158,56,217,31,62,247,218,230,159,68,122,246,189,105,15,222,196,30,235,29,145,243,65,207,179,250,81,212)
IMAGE_DATA(49,56,159,98,174,155,178,167,152,243,247,152,143,36,250,38,209,77,48,226,232,81,84,97,217,19,55,251,77,125,31,100)
IMAGE_DATA(111,147,63,102,70,92,246,184,175,137,61,246,226,77,236,87,132,212,155,204,243,87,74,117,204,53,36,211,135,248,216,171)
IMAGE_DATA(222,71,106,200,124,132,203,124,52,220,216,226,102,162,91,168,236,102,79,48,251,109,243,79,34,19,123,236,199,99,109,233)
IMAGE_DATA(113,55,179,151,215,90,183,208,26,82,212,50,108,78,197,108,15,243,62,210,243,51,191,21,110,104,49,134,104,44,149,157)
IMAGE_DATA(236,49,103,191,77,254,152,25,159,184,50,113,175,145,214,82,53,70,246,216,139,79,194,30,215,90,55,55,19,158,199,90)
IMAGE_DATA(134,205,169,152,237,97,222,71,254,50,243,235,91,220,6,215,31,51,142,104,60,92,71,164,62,111,73,55,123,130,252,151)
IMAGE_DATA(91,229,159,84,56,215,234,216,99,141,163,174,111,195,216,227,58,151,121,126,24,231,126,157,59,167,234,217,111,115,223,51)
IMAGE_DATA(241,51,191,157,232,14,24,126,204,157,68,19,50,144,61,254,236,47,183,200,95,228,245,167,17,90,38,201,196,158,213,56)
IMAGE_DATA(231,197,102,143,186,73,242,60,171,101,216,156,170,214,251,234,123,62,42,243,225,199,76,132,107,91,78,162,74,125,205,21)
IMAGE_DATA(47,123,50,193,63,190,170,168,216,243,238,190,1,246,162,198,89,25,131,61,214,248,158,231,71,184,181,12,206,169,166,220)
IMAGE_DATA(17,239,88,249,153,223,5,195,90,78,38,186,155,42,190,247,83,201,30,187,252,69,94,47,139,208,114,69,110,63,193,101)
IMAGE_DATA(127,174,203,30,235,250,49,164,174,151,235,28,29,123,198,223,243,60,171,103,70,211,57,85,159,59,30,127,198,93,48,159)
IMAGE_DATA(2,67,91,78,133,161,173,238,33,154,102,105,222,53,103,143,93,254,149,1,182,102,85,186,194,140,185,227,200,51,141,236)
IMAGE_DATA(199,184,235,41,175,166,31,229,203,122,158,55,180,134,103,158,103,245,12,155,87,229,122,71,247,126,33,114,151,153,15,105)
IMAGE_DATA(53,157,104,6,92,211,106,38,211,177,179,136,102,195,213,84,247,114,205,49,42,206,154,43,19,252,69,141,178,60,66,43)
IMAGE_DATA(2,98,249,46,214,180,130,253,88,35,251,161,60,235,213,188,241,60,127,3,101,63,150,206,171,97,239,118,162,144,251,16)
IMAGE_DATA(202,93,48,23,188,61,214,95,63,118,46,215,60,174,251,224,107,199,9,205,247,73,231,125,93,221,195,248,47,179,200,191)
IMAGE_DATA(66,146,142,115,165,178,143,60,175,86,112,246,23,242,254,25,239,37,196,100,63,194,199,126,12,175,105,198,211,121,213,207)
IMAGE_DATA(94,125,183,118,139,199,221,101,62,199,199,218,99,124,63,213,85,199,61,32,233,193,128,226,206,187,168,10,139,252,87,74)
IMAGE_DATA(44,117,156,101,214,234,156,234,205,173,229,18,251,193,49,216,171,121,131,53,252,56,90,187,179,154,102,130,54,243,5,123)
IMAGE_DATA(76,246,171,125,220,133,183,85,222,200,246,33,184,146,234,97,166,214,168,71,2,42,73,144,61,118,249,151,167,164,207,148)
IMAGE_DATA(185,149,246,18,120,31,199,204,222,159,245,114,222,96,61,201,106,201,137,161,185,35,158,45,10,175,51,159,171,188,61,206)
IMAGE_DATA(87,180,254,22,215,183,185,30,213,42,170,223,80,46,101,143,77,254,159,249,88,134,113,14,242,214,213,53,66,56,215,198)
IMAGE_DATA(101,175,214,58,102,246,222,123,37,194,235,130,59,99,142,94,246,179,190,188,245,99,92,143,195,229,109,80,223,129,193,26)
IMAGE_DATA(37,241,190,93,254,65,158,113,164,99,46,215,149,234,243,43,127,47,89,94,219,38,103,111,234,47,123,125,134,184,245,126)
IMAGE_DATA(188,154,115,167,226,253,10,178,34,181,197,159,113,219,25,83,65,222,242,179,114,51,119,185,151,153,132,189,63,243,117,207)
IMAGE_DATA(181,194,214,90,73,234,253,36,222,175,180,206,63,185,116,204,211,231,30,151,189,185,191,25,221,103,72,214,103,214,121,223)
IMAGE_DATA(38,255,32,195,50,69,65,198,81,204,131,89,147,148,253,150,52,217,123,185,147,9,239,103,150,127,60,233,153,251,253,238)
IMAGE_DATA(173,173,228,58,135,213,151,216,63,16,107,88,177,142,138,195,30,231,82,54,103,126,15,46,107,243,125,162,39,224,210,182)
IMAGE_DATA(63,36,122,50,17,251,56,107,93,147,247,43,225,19,107,252,77,28,147,104,173,226,117,175,214,17,107,43,29,251,201,62)
IMAGE_DATA(246,108,29,53,135,215,148,243,141,190,31,220,230,187,156,251,15,92,238,151,180,125,10,6,181,125,58,173,220,73,226,253)
IMAGE_DATA(170,172,242,223,161,201,22,47,99,188,181,237,40,105,93,43,234,251,120,236,177,166,52,101,14,227,254,132,143,251,160,118)
IMAGE_DATA(207,192,192,118,207,74,236,227,213,59,113,114,71,231,125,155,252,245,28,147,200,203,117,236,167,137,190,130,168,241,177,167)
IMAGE_DATA(128,235,90,92,91,93,219,114,34,239,19,79,225,61,179,25,180,79,166,178,223,24,146,247,232,249,75,218,254,136,200,227)
IMAGE_DATA(62,176,221,115,112,113,187,159,166,145,59,201,188,111,151,255,246,68,172,253,243,168,95,254,220,17,153,47,122,10,19,121)
IMAGE_DATA(159,126,10,239,157,9,246,247,250,216,227,58,42,108,174,101,158,127,134,176,255,177,203,253,226,118,63,131,139,218,63,111)
IMAGE_DATA(100,239,239,237,39,207,29,213,251,85,240,177,53,254,38,150,241,180,205,173,101,60,239,75,185,35,101,190,168,76,228,57)
IMAGE_DATA(86,199,30,123,5,166,250,30,229,121,254,39,156,251,207,137,94,128,1,237,23,196,206,252,84,231,92,193,222,46,255,109)
IMAGE_DATA(137,85,172,17,235,227,147,220,57,90,206,29,214,211,81,185,7,235,27,150,55,81,236,241,72,215,243,148,251,243,148,251)
IMAGE_DATA(128,246,47,194,133,199,255,210,101,159,52,243,227,228,142,204,191,218,34,127,29,203,120,242,210,118,157,251,62,206,40,169)
IMAGE_DATA(222,225,185,67,50,223,196,61,216,79,48,177,247,206,128,236,209,243,3,168,231,127,65,185,95,112,252,75,68,191,50,178)
IMAGE_DATA(247,103,254,170,200,204,15,243,126,53,213,82,139,252,191,72,164,117,90,109,149,230,220,49,146,247,39,196,226,30,229,121)
IMAGE_DATA(185,175,224,247,60,114,127,25,206,63,254,215,112,126,135,87,66,216,71,103,126,48,119,130,115,110,38,248,235,121,134,105)
IMAGE_DATA(107,64,235,41,127,191,247,229,122,39,156,123,124,246,40,100,127,161,203,254,87,132,253,111,224,188,14,175,18,253,54,13)
IMAGE_DATA(246,241,115,7,217,215,88,229,31,228,25,166,245,90,109,209,122,95,212,59,73,185,111,246,37,150,60,122,49,207,155,151)
IMAGE_DATA(137,152,231,145,251,185,29,94,35,122,221,200,62,105,230,135,229,14,227,191,196,26,127,217,97,225,218,98,212,6,202,95)
IMAGE_DATA(239,253,161,173,166,210,103,227,248,124,86,207,221,236,121,149,61,38,160,156,55,140,253,239,224,156,142,191,39,250,99,12)
IMAGE_DATA(246,73,50,95,159,59,53,150,249,171,159,56,138,179,95,126,215,234,188,47,106,125,124,94,136,207,172,176,214,140,246,252)
IMAGE_DATA(122,223,183,78,158,129,252,236,95,39,220,255,0,103,19,246,103,119,252,179,5,246,209,185,131,236,237,242,223,156,182,132)
IMAGE_DATA(139,69,205,163,243,190,87,235,223,207,158,17,146,90,51,174,231,229,117,21,99,255,154,196,254,79,208,191,227,95,160,127)
IMAGE_DATA(193,95,19,177,247,230,219,100,185,131,170,181,200,63,152,0,225,140,61,109,210,202,215,219,212,120,159,62,43,108,253,48)
IMAGE_DATA(125,62,136,207,4,177,143,25,228,174,103,143,242,251,158,177,63,139,176,63,171,224,239,9,216,199,203,124,157,247,107,169)
IMAGE_DATA(22,91,228,175,231,152,68,106,166,95,43,245,215,240,29,17,213,251,184,206,18,125,100,236,101,98,79,199,196,93,94,211)
IMAGE_DATA(162,130,236,255,6,103,22,252,3,206,236,244,166,69,246,230,220,65,246,54,249,111,146,254,132,243,141,218,43,88,203,200)
IMAGE_DATA(189,77,124,79,129,246,24,20,239,179,254,253,147,180,143,137,125,5,157,231,229,126,130,137,253,25,157,254,149,38,251,232)
IMAGE_DATA(204,23,236,235,172,242,79,207,253,225,233,197,50,221,243,254,131,244,29,133,203,91,63,234,243,62,237,169,209,190,206,115)
IMAGE_DATA(180,167,179,77,241,188,220,203,193,185,86,100,142,204,254,244,78,255,137,205,94,87,235,152,51,223,159,59,117,84,69,214)
IMAGE_DATA(248,235,18,222,207,54,238,12,161,175,99,228,121,149,245,215,190,205,179,231,187,188,151,239,121,159,245,22,158,215,246,208)
IMAGE_DATA(68,109,143,117,78,127,158,247,50,251,126,157,223,77,200,62,188,214,209,177,175,229,236,51,195,63,53,133,87,172,186,21)
IMAGE_DATA(92,49,125,7,135,121,255,9,218,203,199,126,178,240,62,235,101,190,168,233,95,178,218,190,127,193,27,140,125,193,63,125)
IMAGE_DATA(236,251,118,126,95,187,182,74,194,62,58,119,24,251,93,22,249,199,175,254,227,200,180,106,46,86,230,213,98,247,249,33)
IMAGE_DATA(203,158,31,19,246,63,225,125,181,5,116,141,43,123,94,174,235,69,230,159,209,233,45,194,254,223,132,253,59,148,253,105)
IMAGE_DATA(157,63,200,48,123,153,255,71,7,0,255,117,33,188,245,204,213,121,245,18,77,246,176,158,230,75,62,207,203,117,189,151)
IMAGE_DATA(59,255,38,252,223,38,252,223,35,236,23,194,105,133,139,98,212,247,118,216,219,228,159,172,251,147,10,111,181,142,244,207)
IMAGE_DATA(173,238,188,219,254,103,180,167,140,189,53,236,49,232,214,178,40,150,59,111,73,185,131,236,63,132,83,11,139,52,158,143)
IMAGE_DATA(174,115,204,236,151,24,217,215,195,162,44,242,47,142,96,29,205,92,158,91,117,217,131,125,205,146,192,90,150,213,150,194)
IMAGE_DATA(251,253,58,97,238,188,71,115,231,212,194,143,224,148,194,37,214,217,215,106,216,219,230,159,172,251,175,23,235,183,77,210)
IMAGE_DATA(240,214,51,23,243,170,41,123,176,199,35,123,94,212,149,168,160,247,23,81,239,247,233,178,84,155,245,153,96,111,151,255)
IMAGE_DATA(231,138,244,62,214,73,48,22,252,197,123,13,184,230,53,49,23,210,213,61,34,123,176,167,175,246,236,69,239,152,213,60)
IMAGE_DATA(111,7,188,223,167,203,39,25,98,95,20,96,223,0,31,90,227,159,252,233,111,208,223,114,191,83,237,57,120,207,213,189)
IMAGE_DATA(53,239,165,109,148,186,83,100,63,207,30,236,177,169,220,133,124,53,15,207,253,83,10,151,194,201,93,62,133,147,186,172)
IMAGE_DATA(128,19,187,174,130,222,93,215,192,9,221,138,161,87,183,13,208,179,251,38,232,209,125,43,116,239,190,13,186,245,216,65)
IMAGE_DATA(84,10,93,123,236,132,46,61,203,169,146,178,175,39,236,237,242,95,155,178,132,175,5,255,161,46,127,241,78,207,125,126)
IMAGE_DATA(254,109,30,39,117,231,247,120,221,255,20,127,135,36,152,253,58,238,162,182,81,179,231,148,194,197,196,251,31,19,254,203)
IMAGE_DATA(224,164,174,43,9,255,213,208,187,219,231,132,253,122,194,126,35,97,191,197,101,223,181,71,25,231,94,1,133,61,171,168)
IMAGE_DATA(82,97,111,147,255,246,64,70,196,149,151,37,30,127,185,223,172,246,124,30,149,214,93,166,186,255,165,192,26,86,173,231)
IMAGE_DATA(25,255,96,246,156,220,101,57,97,255,153,226,253,205,132,255,23,208,189,199,118,234,123,198,190,146,112,175,134,206,189,106)
IMAGE_DATA(137,234,82,98,191,27,62,176,200,127,77,74,218,33,9,223,173,242,222,41,156,238,190,211,198,248,63,200,255,31,144,174)
IMAGE_DATA(231,35,248,179,185,87,231,119,117,45,101,202,126,47,123,214,18,254,235,8,127,217,251,37,60,115,42,56,251,58,232,212)
IMAGE_DATA(107,23,81,67,74,236,109,242,103,117,246,154,152,90,109,148,239,121,139,203,127,126,40,127,185,246,9,227,46,175,165,60)
IMAGE_DATA(254,74,246,119,229,252,187,173,37,236,215,121,217,35,121,31,243,6,125,143,236,11,122,237,134,142,39,236,137,193,126,145)
IMAGE_DATA(203,190,129,179,223,13,11,211,229,175,185,7,241,85,18,208,170,128,226,240,143,242,187,204,93,212,54,253,40,255,247,35)
IMAGE_DATA(248,175,247,230,221,0,255,58,234,123,100,223,225,132,125,217,98,239,227,175,227,151,138,74,53,53,163,191,142,9,206,169)
IMAGE_DATA(113,185,87,68,214,149,193,218,50,188,190,12,175,239,229,204,145,217,55,102,128,127,146,123,80,26,144,158,117,24,111,61)
IMAGE_DATA(243,21,10,243,104,238,250,231,85,251,149,125,58,252,3,247,32,140,101,28,133,241,54,49,15,122,61,138,123,50,207,203)
IMAGE_DATA(125,52,57,235,15,0,246,137,239,65,153,79,102,206,225,188,77,94,79,135,123,50,207,199,97,191,123,255,176,15,240,71)
IMAGE_DATA(197,97,155,148,183,222,231,58,230,81,220,227,122,222,148,55,81,243,108,44,246,54,249,107,239,129,122,31,194,217,38,241)
IMAGE_DATA(184,153,121,42,220,195,60,31,47,111,204,236,77,92,44,179,143,188,15,57,101,156,187,188,101,251,51,30,168,202,198,150)
IMAGE_DATA(237,207,156,109,229,182,220,150,219,114,91,110,203,109,185,45,183,229,182,4,219,127,1,109,199,225,21,0,0,0,0,0)
IMAGE_END_DATA(5024, 3)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,91,107,104,28,85,20,190,10,254,176,98,12,198,63,194,54,73,127,84,105,4,139,8,186,98,49,150,4,140)

View file

@ -534,6 +534,8 @@ struct Builder {
String c_options;
String debug_options;
String release_options;
String debug_cuda;
String release_cuda;
String common_link;
String debug_link;
String release_link;

View file

@ -362,11 +362,13 @@ void DefaultBuilderSetup::InitSetupCtrlsMap(VectorMap<Id, Ctrl*>& map)
map.Add("DEBUG_OPTIONS", &debug_options);
map.Add("DEBUG_FLAGS", &debug_flags);
map.Add("DEBUG_LINK", &debug_link);
map.Add("DEBUG_CUDA", &debug_cuda);
map.Add("RELEASE_BLITZ", &release_blitz);
map.Add("RELEASE_LINKMODE", &release_linkmode);
map.Add("RELEASE_OPTIONS", &speed_options);
map.Add("RELEASE_FLAGS", &release_flags);
map.Add("RELEASE_LINK", &release_link);
map.Add("RELEASE_CUDA", &release_cuda);
map.Add("DEBUGGER", &debugger);
map.Add("ALLOW_PRECOMPILED_HEADERS", &allow_pch);
map.Add("DISABLE_BLITZ", &disable_blitz);

View file

@ -18,16 +18,18 @@ NewPackageFileWindow::NewPackageFileWindow()
type.SetDropLines(20);
Type("cpp", "C++ source file");
Type("h", "C++ header file");
type.AddSeparator();
Type("c", "C source file");
Type("lay", "Layout file (dialog templates)");
Type("iml", "Image file (icons)");
Type("icpp", "Initialization C++ source file");
type.AddSeparator();
Type("key", "Keyboard shortcuts file");
Type("t", "Translation file");
Type("tpp", "Documentation folder");
Type("usc", "Escape script file (scripting TheIDE)");
Type("dbg", "Debugger pretty printing script file");
Type("witz", "Skylark template file (web framework files)");
Type("qtf", "U++ rich text file");
Type("t", "Translation file");
Type("tpp", "Documentation folder");
Type("icpp", "Initialization C++ source file (deprecated)");
type.AddSeparator();
Type("json", "JSON file");
Type("xml", "XML file");
@ -42,6 +44,14 @@ NewPackageFileWindow::NewPackageFileWindow()
Type("js", "JavaScript");
Type("py", "Python");
type.AddSeparator();
Type("cu", "CUDA source file");
Type("tesc", "GLSL tessellation control shader");
Type("vert", "GLSL vertex shader");
Type("tese", "GLSL tessellation evaluation shader");
Type("geom", "GLSL geometry shader");
Type("frag", "GLSL fragment shader");
Type("comp", "GLSL compute shader");
type.AddSeparator();
Type("clang-format", "ClangFormat configuration file");
Type("", "Other");

View file

@ -452,7 +452,7 @@ void PackageEditor::AdjustFileOptionCursor()
void PackageEditor::FileOptionMenu(Bar& bar)
{
bool b = IsActiveFile();
bar.Add(b, "Add compiler flags..", THISBACK(AddFileOption)).Key(K_INSERT);
bar.Add(b, "Add compiler options..", THISBACK(AddFileOption)).Key(K_INSERT);
bar.Add(b, "Add dependence..", THISBACK1(AddDepends, false)).Key(K_CTRL_INSERT);
bar.Add(b, "Add external dependence..", THISBACK1(AddDepends, true)).Key(K_SHIFT_INSERT);
bar.Separator();

View file

@ -264,29 +264,33 @@ LAYOUT(BuildMethodsDefaultBuilderSetupLayout, 648, 500)
ITEM(Upp::EditString, common_link_options, HSizePosZ(132, 0).TopPosZ(104, 19))
ITEM(Upp::Label, dv___12, SetLabel(t_("Common fixed flags")).LeftPosZ(0, 112).TopPosZ(124, 19))
ITEM(Upp::EditString, common_flags, HSizePosZ(132, 0).TopPosZ(124, 19))
ITEM(Upp::Label, dv___14, SetLabel(t_("Default debug info level:")).LeftPosZ(4, 132).TopPosZ(160, 19))
ITEM(Upp::DropList, debug_info, LeftPosZ(140, 116).TopPosZ(160, 19))
ITEM(TextOption, debug_blitz, SetLabel(t_("Use BLITZ")).HSizePosZ(264, 276).TopPosZ(160, 19))
ITEM(TextSwitch, debug_linkmode, SetLabel(t_("All static\nShared libs\nAll shared")).HSizePosZ(376, 20).TopPosZ(160, 19))
ITEM(Upp::Label, dv___18, SetLabel(t_("Debug options")).LeftPosZ(0, 112).TopPosZ(188, 19))
ITEM(Upp::EditString, debug_options, HSizePosZ(132, 0).TopPosZ(188, 19))
ITEM(Upp::Label, dv___20, SetLabel(t_("Debug fixed flags")).LeftPosZ(0, 112).TopPosZ(208, 19))
ITEM(Upp::EditString, debug_flags, HSizePosZ(132, 0).TopPosZ(208, 19))
ITEM(Upp::Label, dv___22, SetLabel(t_("Debug link options")).LeftPosZ(0, 112).TopPosZ(228, 19))
ITEM(Upp::EditString, debug_link, HSizePosZ(132, 0).TopPosZ(228, 19))
ITEM(TextSwitch, release_linkmode, SetLabel(t_("All static\nShared libs\nAll shared")).HSizePosZ(376, 20).TopPosZ(268, 16))
ITEM(Upp::LabelBox, dv___25, SetLabel(t_("Release mode defaults")).HSizePosZ(0, 0).TopPosZ(252, 36))
ITEM(TextOption, release_blitz, SetLabel(t_("Use BLITZ")).LeftPosZ(8, 256).TopPosZ(268, 15))
ITEM(Upp::Label, dv___27, SetLabel(t_("Release options")).LeftPosZ(0, 112).TopPosZ(292, 19))
ITEM(Upp::EditString, speed_options, HSizePosZ(132, 0).TopPosZ(292, 19))
ITEM(Upp::Label, dv___29, SetLabel(t_("Release fixed flags")).LeftPosZ(0, 112).TopPosZ(312, 19))
ITEM(Upp::EditString, release_flags, HSizePosZ(132, 0).TopPosZ(312, 19))
ITEM(Upp::Label, dv___31, SetLabel(t_("Release link options")).LeftPosZ(0, 112).TopPosZ(332, 19))
ITEM(Upp::EditString, release_link, HSizePosZ(132, 0).TopPosZ(332, 19))
ITEM(Upp::TabCtrl, paths, HSizePosZ(0, 0).VSizePosZ(376, 0))
ITEM(TextOption, allow_pch, SetLabel(t_("Allow precompiled headers")).LeftPosZ(0, 212).TopPosZ(356, 16))
ITEM(TextOption, disable_blitz, SetLabel(t_("Disable BLITZ")).LeftPosZ(164, 212).TopPosZ(356, 16))
ITEM(Upp::LabelBox, dv___36, SetLabel(t_("Debug mode defaults")).HSizePosZ(0, 0).TopPosZ(148, 36))
ITEM(Upp::Label, dv___14, SetLabel(t_("Debug mode defaults")).HSizePosZ(0, 516).TopPosZ(152, 20))
ITEM(Upp::Label, dv___15, SetLabel(t_("Debug level")).LeftPosZ(132, 132).TopPosZ(152, 20))
ITEM(Upp::DropList, debug_info, LeftPosZ(200, 72).TopPosZ(152, 20))
ITEM(TextOption, debug_blitz, SetLabel(t_("Use BLITZ")).HSizePosZ(296, 244).TopPosZ(152, 20))
ITEM(TextSwitch, debug_linkmode, SetLabel(t_("All static\nShared libs\nAll shared")).HSizePosZ(376, 20).TopPosZ(152, 20))
ITEM(Upp::Label, dv___19, SetLabel(t_("Debug options")).LeftPosZ(0, 124).TopPosZ(172, 19))
ITEM(Upp::EditString, debug_options, HSizePosZ(132, 0).TopPosZ(172, 19))
ITEM(Upp::Label, dv___21, SetLabel(t_("Debug fixed flags")).LeftPosZ(0, 124).TopPosZ(192, 19))
ITEM(Upp::EditString, debug_flags, HSizePosZ(132, 0).TopPosZ(192, 19))
ITEM(Upp::Label, dv___23, SetLabel(t_("Debug link options")).LeftPosZ(0, 124).TopPosZ(212, 19))
ITEM(Upp::EditString, debug_link, HSizePosZ(132, 0).TopPosZ(212, 19))
ITEM(Upp::Label, dv___25, SetLabel(t_("Debug CUDA options")).LeftPosZ(0, 124).TopPosZ(232, 19))
ITEM(Upp::EditString, debug_cuda, HSizePosZ(132, 0).TopPosZ(232, 19))
ITEM(Upp::Label, dv___27, SetLabel(t_("Release mode defaults")).HSizePosZ(0, 516).TopPosZ(256, 20))
ITEM(TextOption, release_blitz, SetLabel(t_("Use BLITZ")).LeftPosZ(132, 256).TopPosZ(256, 20))
ITEM(TextSwitch, release_linkmode, SetLabel(t_("All static\nShared libs\nAll shared")).HSizePosZ(376, 20).TopPosZ(256, 20))
ITEM(Upp::Label, dv___30, SetLabel(t_("Release options")).LeftPosZ(0, 112).TopPosZ(280, 19))
ITEM(Upp::EditString, speed_options, HSizePosZ(132, 0).TopPosZ(280, 19))
ITEM(Upp::Label, dv___32, SetLabel(t_("Release fixed flags")).LeftPosZ(0, 112).TopPosZ(300, 19))
ITEM(Upp::EditString, release_flags, HSizePosZ(132, 0).TopPosZ(300, 19))
ITEM(Upp::Label, dv___34, SetLabel(t_("Release link options")).LeftPosZ(0, 112).TopPosZ(320, 19))
ITEM(Upp::EditString, release_link, HSizePosZ(132, 0).TopPosZ(320, 19))
ITEM(Upp::Label, dv___36, SetLabel(t_("Release CUDA options")).LeftPosZ(0, 124).TopPosZ(340, 19))
ITEM(Upp::EditString, release_cuda, HSizePosZ(132, 0).TopPosZ(340, 19))
ITEM(TextOption, allow_pch, SetLabel(t_("Allow precompiled headers")).LeftPosZ(0, 212).TopPosZ(364, 16))
ITEM(TextOption, disable_blitz, SetLabel(t_("Disable BLITZ")).LeftPosZ(164, 212).TopPosZ(364, 16))
ITEM(Upp::TabCtrl, paths, HSizePosZ(0, 0).VSizePosZ(384, 0))
END_LAYOUT
LAYOUT(ModePaneLayout, 320, 460)