New icons

Also update IMG_xpm.c
This commit is contained in:
Steel Titanium 2019-07-16 19:18:13 -04:00
parent 049789025f
commit 3ffb7b6192
4 changed files with 122 additions and 182 deletions

View file

@ -1,6 +1,6 @@
/* /*
SDL_image: An example image loading library for use with SDL SDL_image: An example image loading library for use with SDL
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2019 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -48,7 +48,7 @@
// SDLCALL terms removed from original SDL_image declarations // SDLCALL terms removed from original SDL_image declarations
int IMG_isXPM(SDL_RWops *src); int IMG_isXPM(SDL_RWops *src);
SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src); SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src);
SDL_Surface *IMG_ReadXPMFromArray(const char **xpm); SDL_Surface *IMG_ReadXPMFromArray(char **xpm);
#define IMG_SetError SDL_SetError #define IMG_SetError SDL_SetError
#define IMG_GetError SDL_GetError #define IMG_GetError SDL_GetError
#endif #endif
@ -79,7 +79,7 @@ int IMG_isXPM(SDL_RWops *src)
#define STARTING_HASH_SIZE 256 #define STARTING_HASH_SIZE 256
struct hash_entry { struct hash_entry {
const char *key; char *key;
Uint32 color; Uint32 color;
struct hash_entry *next; struct hash_entry *next;
}; };
@ -110,7 +110,7 @@ static struct color_hash *create_colorhash(int maxnum)
/* we know how many entries we need, so we can allocate /* we know how many entries we need, so we can allocate
everything here */ everything here */
hash = (struct color_hash *)SDL_malloc(sizeof *hash); hash = (struct color_hash *)SDL_calloc(1, sizeof(*hash));
if (!hash) if (!hash)
return NULL; return NULL;
@ -119,15 +119,29 @@ static struct color_hash *create_colorhash(int maxnum)
; ;
hash->size = s; hash->size = s;
hash->maxnum = maxnum; hash->maxnum = maxnum;
bytes = hash->size * sizeof(struct hash_entry **); bytes = hash->size * sizeof(struct hash_entry **);
hash->entries = NULL; /* in case malloc fails */ /* Check for overflow */
hash->table = (struct hash_entry **)SDL_malloc(bytes); if ((bytes / sizeof(struct hash_entry **)) != hash->size) {
IMG_SetError("memory allocation overflow");
SDL_free(hash);
return NULL;
}
hash->table = (struct hash_entry **)SDL_calloc(1, bytes);
if (!hash->table) { if (!hash->table) {
SDL_free(hash); SDL_free(hash);
return NULL; return NULL;
} }
SDL_memset(hash->table, 0, bytes);
hash->entries = (struct hash_entry *)SDL_malloc(maxnum * sizeof(struct hash_entry)); bytes = maxnum * sizeof(struct hash_entry);
/* Check for overflow */
if ((bytes / sizeof(struct hash_entry)) != maxnum) {
IMG_SetError("memory allocation overflow");
SDL_free(hash->table);
SDL_free(hash);
return NULL;
}
hash->entries = (struct hash_entry *)SDL_calloc(1, bytes);
if (!hash->entries) { if (!hash->entries) {
SDL_free(hash->table); SDL_free(hash->table);
SDL_free(hash); SDL_free(hash);
@ -150,7 +164,7 @@ static int add_colorhash(struct color_hash *hash,
} }
/* fast lookup that works if cpp == 1 */ /* fast lookup that works if cpp == 1 */
#define QUICK_COLORHASH(hash, key) ((hash)->table[*(const Uint8 *)(key)]->color) #define QUICK_COLORHASH(hash, key) ((hash)->table[*(Uint8 *)(key)]->color)
static Uint32 get_colorhash(struct color_hash *hash, const char *key, int cpp) static Uint32 get_colorhash(struct color_hash *hash, const char *key, int cpp)
{ {
@ -174,14 +188,16 @@ static void free_colorhash(struct color_hash *hash)
} }
} }
#define EXTENDED_XPM_COLORS
/* /*
* convert colour spec to RGB (in 0xrrggbb format). * convert colour spec to RGB (in 0xrrggbb format).
* return 1 if successful. * return 1 if successful.
*/ */
static int color_to_rgb(const char *spec, int speclen, Uint32 *rgb) static int color_to_rgb(char *spec, int speclen, Uint32 *rgb)
{ {
/* poor man's rgb.txt */ /* poor man's rgb.txt */
static struct { const char *name; Uint32 rgb; } known[] = { static struct { char *name; Uint32 rgb; } known[] = {
{ "none", 0xFFFFFFFF }, { "none", 0xFFFFFFFF },
{ "black", 0x000000 }, { "black", 0x000000 },
{ "white", 0xFFFFFF }, { "white", 0xFFFFFF },
@ -895,7 +911,7 @@ static int color_to_rgb(const char *spec, int speclen, Uint32 *rgb)
*rgb = (Uint32)SDL_strtol(buf, NULL, 16); *rgb = (Uint32)SDL_strtol(buf, NULL, 16);
return 1; return 1;
} else { } else {
size_t i; int i;
for (i = 0; i < SDL_arraysize(known); i++) { for (i = 0; i < SDL_arraysize(known); i++) {
if (SDL_strncasecmp(known[i].name, spec, speclen) == 0) { if (SDL_strncasecmp(known[i].name, spec, speclen) == 0) {
*rgb = known[i].rgb; *rgb = known[i].rgb;
@ -912,14 +928,14 @@ static int color_to_rgb(const char *spec, int speclen, Uint32 *rgb)
static char *linebuf; static char *linebuf;
static int buflen; static int buflen;
static const char *error; static char *error;
/* /*
* Read next line from the source. * Read next line from the source.
* If len > 0, it's assumed to be at least len chars (for efficiency). * If len > 0, it's assumed to be at least len chars (for efficiency).
* Return NULL and set error upon EOF or parse error. * Return NULL and set error upon EOF or parse error.
*/ */
static const char *get_next_line(const char ***lines, SDL_RWops *src, int len) static char *get_next_line(char ***lines, SDL_RWops *src, int len)
{ {
char *linebufnew; char *linebufnew;
@ -991,7 +1007,7 @@ do { \
} while (0) } while (0)
/* read XPM from either array or RWops */ /* read XPM from either array or RWops */
static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src) static SDL_Surface *load_xpm(char **xpm, SDL_RWops *src)
{ {
Sint64 start = 0; Sint64 start = 0;
SDL_Surface *image = NULL; SDL_Surface *image = NULL;
@ -1003,8 +1019,8 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
struct color_hash *colors = NULL; struct color_hash *colors = NULL;
SDL_Color *im_colors = NULL; SDL_Color *im_colors = NULL;
char *keystrings = NULL, *nextkey; char *keystrings = NULL, *nextkey;
const char *line; char *line;
const char ***xpmlines = NULL; char ***xpmlines = NULL;
int pixels_len; int pixels_len;
error = NULL; error = NULL;
@ -1035,6 +1051,11 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
goto done; goto done;
} }
/* Check for allocation overflow */
if ((size_t)(ncolors * cpp)/cpp != ncolors) {
error = "Invalid color specification";
goto done;
}
keystrings = (char *)SDL_malloc(ncolors * cpp); keystrings = (char *)SDL_malloc(ncolors * cpp);
if (!keystrings) { if (!keystrings) {
error = "Out of memory"; error = "Out of memory";
@ -1066,7 +1087,7 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
goto done; goto done;
} }
for (index = 0; index < ncolors; ++index ) { for (index = 0; index < ncolors; ++index ) {
const char *p; char *p;
line = get_next_line(xpmlines, src, 0); line = get_next_line(xpmlines, src, 0);
if (!line) if (!line)
goto done; goto done;
@ -1076,7 +1097,7 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
/* parse a colour definition */ /* parse a colour definition */
for (;;) { for (;;) {
char nametype; char nametype;
const char *colname; char *colname;
Uint32 rgb, pixel; Uint32 rgb, pixel;
SKIPSPACE(p); SKIPSPACE(p);
@ -1102,8 +1123,9 @@ static SDL_Surface *load_xpm(const char **xpm, SDL_RWops *src)
c->g = (Uint8)(rgb >> 8); c->g = (Uint8)(rgb >> 8);
c->b = (Uint8)(rgb); c->b = (Uint8)(rgb);
pixel = index; pixel = index;
} else } else {
pixel = rgb; pixel = rgb;
}
add_colorhash(colors, nextkey, cpp, pixel); add_colorhash(colors, nextkey, cpp, pixel);
nextkey += cpp; nextkey += cpp;
if (rgb == 0xffffffff) if (rgb == 0xffffffff)
@ -1168,7 +1190,7 @@ SDL_Surface *IMG_LoadXPM_RW(SDL_RWops *src)
return load_xpm(NULL, src); return load_xpm(NULL, src);
} }
SDL_Surface *IMG_ReadXPMFromArray(const char **xpm) SDL_Surface *IMG_ReadXPMFromArray(char **xpm)
{ {
if (!xpm) { if (!xpm) {
IMG_SetError("array is NULL"); IMG_SetError("array is NULL");

View file

@ -1,163 +1,81 @@
/* XPM */ /* XPM */
const char * SDL_icon_xpm[] = { static char * SDL_icon_xpm[] = {
"96 96 64 1", "32 32 46 1",
" c None", " c None",
". c #040656", ". c #000033",
"+ c #0100B2", "+ c #000045",
"@ c #04056E", "@ c #00006C",
"# c #0000BD", "# c #01007E",
"$ c #0B0C09", "$ c #000193",
"% c #0B0D26", "% c #00009F",
"& c #090C42", "& c #060766",
"* c #060AA7", "* c #0F0F10",
"= c #1604DA", "= c #0C11CC",
"- c #020CD5", "- c #0D13B8",
"; c #100F8D", "; c #1415E0",
"> c #040DE4", "> c #1E1AED",
", c #11129B", ", c #1B1CFE",
"' c #1D1A83", "' c #272576",
") c #2A10FD", ") c #313179",
"! c #1318FA", "! c #3A3AB1",
"~ c #25225B", "~ c #3A3AFF",
"{ c #252271", "{ c #434497",
"] c #312E2B", "] c #4F4AAE",
"^ c #33334D", "^ c #4748FE",
"/ c #363775", "/ c #494DE8",
"( c #3D3B69", "( c #7A5137",
"_ c #3A3B8B", "_ c #5E57A7",
": c #373AFF", ": c #5957C4",
"< c #4142AA", "< c #616360",
"[ c #4B4864", "[ c #855E93",
"} c #4D4B4A", "} c #796979",
"| c #60492F", "| c #9C6473",
"1 c #4F4C57", "1 c #6D6EF4",
"2 c #4A4A9E", "2 c #7171FF",
"3 c #4F4E85", "3 c #817F9D",
"4 c #474ADE", "4 c #B37C5A",
"5 c #4E4FFE", "5 c #898A8D",
"6 c #5D5CB3", "6 c #A28572",
"7 c #686663", "7 c #A3829B",
"8 c #666682", "8 c #8988FF",
"9 c #676875", "9 c #C39D82",
"0 c #66659E", "0 c #ABADAB",
"a c #8B6538", "a c #DCA57C",
"b c #6465D5", "b c #ABAAFE",
"c c #7F694F", "c c #C1C3C0",
"d c #6767FF", "d c #F7C095",
"e c #7272FF", "e c #CFD1CE",
"f c #91795C", "f c #DDE0DD",
"g c #7677FD", "g c #FAFCF9",
"h c #828396", " ",
"i c #A78153", " {]]]]]]) ",
"j c #888989", " {:1222222221::) ",
"k c #8D897E", " :1222222222^^>,,>% ",
"l c #9190FD", " ' ]122222222:]>,,;=%$& ",
"m c #CA9048", " @~] :222222221://-=%%%#. ",
"n c #C09968", " #>^{122222222:1][~&%%%@ ",
"o c #A9A8A1", " #>=122221221:/|a4,&%$& ",
"p c #A6A8B0", " #-!22228bb12/4ad9,&$+ ",
"q c #B0B1FB", " ##^2221bbb2~,!ad7,@'{ ",
"r c #EEAC61", " )!,/22281^,,,,:d_,-221:) ",
"s c #E3B478", " /,;,,>,,-_!;,,,[=>=~2222: ",
"t c #C3C4BE", " {=,,,,;3fgg0;,,,,;,,,~^221{ ",
"u c #FFC68C", " 3_,,,>5ggggg3,,,,,,,,,,,>^2] ",
"v c #FCCD90", " 05,,,_fgg0egc>,,,,,,,,,,,,,~! ",
"w c #D4D7D3", " 00>,>0ggf00gf;,,,,,,,,,,,,,,,- ",
"x c #E3E5E0", " 5e%,!fggf55gf=,,,,,,,,,,>>>>,, ",
"y c #FCFFFB", " <f+%5gggf*<ge;,,,,>==-%%%%%%$$#",
" ", " f*@cgggg*5g0>,>-%%%%%%$@@+ ",
" ", "5e<<cggggg5cg)%%%%%%%$@+ ",
" ", " ***99fggggg3%%%%%%#@@ ",
" ", " (4dd9fggf6}$%%%%$$=,% ",
" ", " 4dddd99dda6%$$%%%;,> ",
" ", " 4ddddda9a6$#%%%%=,,- ",
" ", " 4addddda*#%%%%%%>,; ",
" ", " (444 +@$%%%-,, ",
" ", " &$%%=,$ ",
" ttj7777777joot ", " &$%>- ",
" 9hh8830000088hh9 ", " +#-= ",
" 9888(//__<bbbb2////3[888hpp ", " @- ",
" oj}^/_6bbbbgggggggb2///_bgbbbbb631kt ", " & ",
" (80066bgeeegggggggb22262/bbggeggb66081 ", " "};
" p9^jj pp8(_2bgggggeeeeeeeegb2~_bgb//6geegged5*'(hp ",
" ^2<3[7 j^/2bbggggeeeeeeeeeeggb2_({'4eb/2ggge5:!!!>-*{^kt ",
" &,5b60^ (02<beggggeeeeeeeeeegb62__7}~:5g/_bgd5!))))))=+;20k ",
" @#:egb3^ pp({4dgggeeeeeeeeeeeeegg6/__3im}+:e//bd:!)))))))))!#;87 ",
" p'-!:dgb3] 7['4egeeeeeeeeeeeeeeeegg2/__[armc,-523<:!)))))))))))!>*{} ",
" tp,-)!5egb3} ~_<4dgggeeeeeeeeeeeeeegb6/_2[amusf'#!<_'>))))))))))))!)>+{~ ",
" p;-))!5gb2^^'#5eggeeeeeeeeeeeeeeegg6/_23amrusi{#!+;;>))))))))))))))!!-'8p ",
" tp'#!)):d6(@*>5egeeeeeeeeeeeeeeeegg6_/<(amrrvvn{+)-,;>))))))!!!!!!)))!!>,~j ",
" p;#!))-'{'+-5eggeeeeeeeeeeeeeeeegb222(cmrruvvn{+)>,@>!)!!)!!>>>>======>-,/8 ",
" ;#)!-*.;-!5eggeeeeeeeeeeeeeeeegb2_<6|mrrsvvvn{+)!,.-!!!!>>=--######+++-#@(k ",
" h@-)+@.*>!5egeeeeeeeeeeeeeeeeeegb_</]mrrruvvvn{+))*@->>--###++++++###+;@{(9j ",
" kh,#+@@,>!:dggeeeeeeeeeeeeeeeeeeebbb_]mrruuvvsf'#)!*.+-###+++++++##+*;'3(&^9 ",
" 8*,@@*)):dggeeeeeeeeeeeeeeeeeeeeggg<(|iruvvvsc,=!!*.;*++++++++###+,@&1o ",
" 8@@@-!)!5eeeeeeeeeeeeeeeeeeeeeeeeeggb2[csvvvn^#)!!+@;*#+++++###*@~[ ",
" 9&@*!)):5geeeeeeeeeeeeeeeeeeeeeeeeegge637nsvf{>))!+;;*-######*;{.^ ",
" 9%;!!)):dgeeeeeeeeeeeeeeeeeeeeeeeeeeeggb_1ir7;>))!+;;,++++++*'(} ",
" 9{+!))!5egeeeeeeeeeeeeeeeeeddddeeeeeeeege2}|~#!))!#;@...@@@.^hp ",
" 8,=!))):dggeeeeeeeeeeeeeeeeggggeeeeeeeeggb_~,>!))!+@@@;;;;@&^o ",
" }(-)))))!:eegeeeeeeeeeeeeeegllllgeeeeeeeegd5+=))))!+;,#>--#,'/hj ",
" o8.>))))))!:dgggeeeeeeeeeeellqqqqlgeeeeggg5:!!!)))))-*+>)!:55db631 ",
" p8<*!)))))))!:5deggggggeeeegqqqqqqqqlggged5:!))))))))>->!!:5ddeegb3/ ",
" oh'#!))))))))))!:ddeeeeeeeeglqqqqqqqqlgedd:!)))))))))))))!:dggggeggg239 ",
" ^*>!))!)))))))))!::55dddeegglll600333_4:!!)))))))))))))):dggeeeeeeggb6(9o ",
" ~+=-+#>))))))))))!!!:::::5554<3889988[/,=)))))))))))))):5gggeeeeeeeggb6087 ",
" ~**@~'+>!))))))))))))))))!!>*{1kkooook7(,-!)))))))))))!:5deeeeeeeeeeeggb289 ",
" ~,'1o7(*>!))))))))))))))))=,[jtttwxxxwto^;>!))))))))))!!!::5deggeeeeeeegbb3] ",
" ~@/oxt7'#))))))))))))))))=,3ktwxxyyyyyyxk/+!))))))))))))))!:::5degggeeegggb3^ ",
" ^&8xyyt^,)))))))))))))))>,3otwxyyyyyyyyyxh'>)))))))))))))))))):5ddeeeeeeeggb3^ ",
" 771pyyyx7'=!)))))))))))!!#(jtxxyyyyyyyyyyyt3-)))))))))))))))))))!!::degggeeegb2[o ",
" 77tyyyxk/+!!)))))))))))-;9owxyyyyyyyyyyyywh*>)))))))))))))))))))))!::5ddgggggb68j ",
" owyyyyt8;>))))))))))))*(otwyyyyyyyyyyyyyxp'-)))))))))))))))))))))))!!:5deeeggg_8j ",
" jtxyyyyxh'>)))))))))!!#_ktxyyyyyyyyyyyyyyyt_+))))))))))))))))))))))))))!!:5deggg63j ",
" 7jwyyyyyyp/=))))))))))>,3owxyyyyyyyyyyyyyyyw/+))))))))))))))))))))))))))))!::5degb689 ",
" 7xyyyyyyo[#))))))))))-/jtwyyyyyyyyyyyyyyyyw/*)))))))))))))))))))))))))))))))!:5dgg_/ ",
" }xyyyyyyt9*=))))))))=*9owyyyyyyyyyyyyyyyyyw/*)))))))))))))))))))))))))))))))))!!:5d3} ",
" }xyyyyyywj'#!))))))!#@7oxyyyyyyyyyyyyyyyyyw/*)))))))))))))))))))))))))))))))))))!!:4/7 ",
" 7xyyyyyyxj&,!!))))!!,%}oyyyyyyyyyyyyyyyyyyw/*))))))))))))))))))))))))))))))))))))))>487 ",
" 7xyyyyyywk$@!!)))!!-.$]oyyyyyyyyyyyyyyyyyyw/+))))))))))))))))))))))))))))))!!!!))))!>' ",
" }xyyyyyywj$&+!!)!)>;%$]jyyyyyyyyyyyyyyyyyyt{#)))))))))))))))))))))!!!!!!))!)!!!!!!))!#' ",
" 7xyyyyyyt7$%@-!)!>*[]$$jyyyyyyyyyyyyyyyyyxp;-))))))))))))))))))!!!!!!!!!!!!>>>>>>>>>>!,^ ",
" 7xyyyyyyt}$][;-)=,(o7$$7yyyyyyyyyyyyyyyyyxp,-)))))))))))!!!!)!!!!>>>>=-----########--=+'9 ",
" jwyyyyyyo}$}o(';@~7wj$$7yyyyyyyyyyyyyyyyywh*>)))))))))))!>>>=>=---#####+########+++***;@17 ",
" otxyyyyyt}$7t7}1}7kw7$$7yyyyyyyyyyyyyyyyyt0-)))))))))!!!>--####+++++++++++++##+***,;''.&] ",
" ooowyyyyyt}$}j7owwojo}$$jyyyyyyyyyyyyyyyyyp2>)))))))!!!=##++++++++++++++###+*;@.~[8[9hph ",
" ojtyyyyywj$$}jwyyxo}$$]jyyyyyyyyyyyyyyyyyp'>))))))!>>-#++++++++++++####+,;'_3/&^}77kot ",
" 7tyyyyyxo]$$oxyyyt]$$}tyyyyyyyyyyyyyyyyx0*!)))!!!>-#++++++++++++#+##+*;.&1ko ",
" 7tyyyyyyx7]}xyyyyxj}]oxyyyyyyyyyyyyyyyyp<=)!!!!>-#++++++++++++####*;.(8h ",
" owxyxxyytooywptwwtppxyyyyyyyyyyyyyyyxp3,-=!)!>-#++++++++++###+*,'_{&1k ",
" jtwwttwtwwtj7kjowxyyyyyyyyyyyyyyyyxt7~'',+>=#+++++++++++###*;@&^j ",
" ]joojj7}]}]|innfc7jtwyyyyyyyyyyyxtjcfnnnf[@*#+++++++++###+@.&%% ",
" ]$}77}}$$$$]fsssnnifkkotwwwwwwwtpjkfinvvvsi}@*#++++++###*;@.@@&[ ",
" o7$]]]]]$$]|isvvvvvusifckopppopok7cisvvvvvvvn(,#++++++#+*@.&@*#;3o ",
" }}$]|||fnnsvvvuvvvuuvvsniffffffnnsvvvvuuuvvvc{*+#++##*@&.@*+#--<7 ",
" }]cninsuvvvvuuuuuuvvvvusnnnnnssuvvvvvuuuuvvc~*+#+++*@.@;*##=>>,^ ",
" 7fvvvvvvuuuuuuuuuuuuvvvvvvvvvvvuuuuuuuuuvvc~*+#+#+,.@*###->!!*~ ",
" pkivvvvuuuuuuuuuuuuuuuvvvvvvvvuuuvsnsuuuvvf~*+#++++*+++->!!)!#. ",
" kfsuvvuuuuuuuuuuuuuuuuuuuuuuuuuvvnfsuvuvvc{++#++++###->!!))!-;h ",
" kisvvvuuuuuuuuuuuuuuuuuuuuuuuvvvicsvvvvs1@##+++++++#>!!))))=,ho ",
" 7imuvvvuuuuuuuuuuuuuuuuuuuuvusfcivvuvvn~;##+++++++#>!!))))!#8k ",
" cimruuuuuvuuuuuuuuuuuuuuuuvsnfisuvvvsc@*#+++++++++#>!!))))-3} ",
" 7amrruuuuuuuuuuuuuuuuuuuuvsnnsvvuvvi^,##++++++++++#>!!)))>/^ ",
" kfamrruuuuvvvuuuuuuuuuuuuuvvvvvvvn1@+#++++++++++++#>!)))>{~ ",
" 7|iimrrruuuuuuuuuuuuuuuuvvvvuusn1'+#########++++++->!))>; ",
" 7cammrrrrruuuuuuvvvvvuuuuurrm|.*-#+#######+###+++->!!!*' ",
" ookcaimmrrrrrruuuuurrrrrmi|]%.@@@@@;,*,*+########->!!*6o ",
" p7}|ainiimmmmmmmmmmminnia|$%.....{3322_{''',,**+#=!!#6k ",
" j7||aaiiiiiaa||7j ookok711^&.';,*+=!><k ",
" koooook hph[~@+>><k ",
" ppppp tk7^3_,+<j ",
" o7^@3j ",
" 9jj ",
" o ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

After

Width:  |  Height:  |  Size: 62 KiB