Ajouter un enemi et réorganiser le code pour la norme

This commit is contained in:
xamora 2022-12-29 17:34:27 +01:00
parent 6b216f73b1
commit 191fba3a12
99 changed files with 115254 additions and 695 deletions

View file

@ -11,11 +11,11 @@
# **************************************************************************** # # **************************************************************************** #
GNL = get_next_line/get_next_line.c get_next_line/get_next_line_utils.c GNL = get_next_line/get_next_line.c get_next_line/get_next_line_utils.c
SRCS = so_long.c ${GNL} SRCS = games/init.c games/map.c games/player.c games/position.c games/quit.c games/render.c ${GNL}
OBJS = ${SRCS:.c=.o} OBJS = ${SRCS:.c=.o}
LIBS = libft/libft.a minilibx-linux/libmlx.a LIBS = libft/libft.a minilibx-linux/libmlx.a
CC = clang CC = clang
CFLAGS = -g -Wall -Wextra -Werror CFLAGS = -gdwarf-4 -g -Wall -Wextra -Werror
NAME = so_long NAME = so_long
# PENSER ENLEVER -G # PENSER ENLEVER -G
@ -25,7 +25,7 @@ all: ${NAME}
${NAME}: ${OBJS} ${NAME}: ${OBJS}
make -C libft make -C libft
make -C minilibx-linux make -C minilibx-linux
${CC} ${CFLAGS} -o ${NAME} ${OBJS} ${LIBS} -lXext -lX11 ${CC} ${CFLAGS} -o ${NAME} ${OBJS} ${LIBS} -lm -lXext -lX11
%.o:%.c %.o:%.c
${CC} ${CFLAGS} -c -o $@ $< ${CC} ${CFLAGS} -c -o $@ $<

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

View file

@ -1,68 +0,0 @@
/* XPM */
static char * background_64_xpm[] = {
"64 64 1 1",
" c #000000",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 938 B

5856
assets/collectible_0.xpm Normal file

File diff suppressed because it is too large Load diff

4891
assets/collectible_1.xpm Normal file

File diff suppressed because it is too large Load diff

3474
assets/collectible_2.xpm Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,85 +0,0 @@
/* XPM */
static char * collectible_64_xpm[] = {
"64 64 18 1",
" c #000000",
". c #002600",
"+ c #013A00",
"@ c #013700",
"# c #014400",
"$ c #09B700",
"% c #0DDC00",
"& c #10F800",
"* c #10F600",
"= c #0ABD00",
"- c #058D00",
"; c #09BA00",
"> c #11FD00",
", c #11FB00",
"' c #10F900",
") c #059100",
"! c #0DDA00",
"~ c #0DD900",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .+++++@ ",
" #$%&&&&&*=-. ",
" @;*>>>>>>>>>,%- ",
" -%>>>>>>>>>>>>>';@ ",
" )'>>>>>>>>>>>>>>>>!@ ",
" #*>>>>>>>>>>>>>>>>>>; ",
" .~>>>>>>>>>>>>>>>>>>>'- ",
" -,>>>>>>>>>>>>>>>>>>>>%. ",
" .%>>>>>>>>>>>>>>>>>>>>>,- ",
" #'>>>>>>>>>>>>>>>>>>>>>>= ",
" $>>>>>>>>>>>>>>>>>>>>>>>*@ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" -,>>>>>>>>>>>>>>>>>>>>>>%. ",
" @*>>>>>>>>>>>>>>>>>>>>>>$ ",
" ;>>>>>>>>>>>>>>>>>>>>>*# ",
" #*>>>>>>>>>>>>>>>>>>>>; ",
" ),>>>>>>>>>>>>>>>>>>%@ ",
" .~>>>>>>>>>>>>>>>>>'- ",
" @~,>>>>>>>>>>>>>>*) ",
" .)*>>>>>>>>>>>,~# ",
" #;*,>>>>>>'%-. ",
" @-;;;;;$#. ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 900 B

View file

@ -1,86 +0,0 @@
/* XPM */
static char * enemy_64_xpm[] = {
"64 64 19 1",
" c #000000",
". c #260000",
"+ c #3B0000",
"@ c #380000",
"# c #450000",
"$ c #B90000",
"% c #DE0000",
"& c #FA0000",
"* c #F80000",
"= c #BE0000",
"- c #8E0000",
"; c #BB0000",
"> c #FF0000",
", c #FD0000",
"' c #FB0000",
") c #920000",
"! c #DC0000",
"~ c #DB0000",
"{ c #930000",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .+++++@ ",
" #$%&&&&&*=-. ",
" @;*>>>>>>>>>,%- ",
" -%>>>>>>>>>>>>>';@ ",
" )'>>>>>>>>>>>>>>>>!@ ",
" #*>>>>>>>>>>>>>>>>>>; ",
" .~>>>>>>>>>>>>>>>>>>>'- ",
" -,>>>>>>>>>>>>>>>>>>>>%. ",
" .%>>>>>>>>>>>>>>>>>>>>>,- ",
" #'>>>>>>>>>>>>>>>>>>>>>>= ",
" $>>>>>>>>>>>>>>>>>>>>>>>*@ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" ;>>>>>>>>>>>>>>>>>>>>>>>&+ ",
" -,>>>>>>>>>>>>>>>>>>>>>>%. ",
" @*>>>>>>>>>>>>>>>>>>>>>>$ ",
" ;>>>>>>>>>>>>>>>>>>>>>*# ",
" #*>>>>>>>>>>>>>>>>>>>>; ",
" {,>>>>>>>>>>>>>>>>>>%@ ",
" .~>>>>>>>>>>>>>>>>>'- ",
" @~,>>>>>>>>>>>>>>*) ",
" .{*>>>>>>>>>>>,~# ",
" #;*,>>>>>>'%-. ",
" @-;;;;;$#. ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

7509
assets/exit_0.xpm Normal file

File diff suppressed because it is too large Load diff

5580
assets/exit_1.xpm Normal file

File diff suppressed because it is too large Load diff

3823
assets/exit_2.xpm Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,75 +0,0 @@
/* XPM */
static char * exit_64_xpm[] = {
"64 64 8 1",
" c #000000",
". c #030021",
"+ c #2900A3",
"@ c #2A00A6",
"# c #060031",
"$ c #3B00DE",
"% c #3C00E2",
"& c #3A00DA",
" ",
" ",
" ",
" ",
" .+@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+. ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$# ",
" #&$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$&# ",
" ###################################################### ",
" ",
" ",
" "};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

8791
assets/player_0*.xpm Normal file

File diff suppressed because it is too large Load diff

7971
assets/player_0.xpm Normal file

File diff suppressed because it is too large Load diff

8791
assets/player_1*.xpm Normal file

File diff suppressed because it is too large Load diff

8108
assets/player_1.xpm Normal file

File diff suppressed because it is too large Load diff

8791
assets/player_2*.xpm Normal file

File diff suppressed because it is too large Load diff

8252
assets/player_2.xpm Normal file

File diff suppressed because it is too large Load diff

8791
assets/player_3*.xpm Normal file

File diff suppressed because it is too large Load diff

8288
assets/player_3.xpm Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,83 +0,0 @@
/* XPM */
static char * player_64_xpm[] = {
"64 64 16 1",
" c #000000",
". c #262626",
"+ c #383838",
"@ c #454545",
"# c #B6B6B6",
"$ c #BABABA",
"% c #8D8D8D",
"& c #DCDCDC",
"* c #F8F8F8",
"= c #FDFDFD",
"- c #FBFBFB",
"; c #F6F6F6",
"> c #BDBDBD",
", c #8C8C8C",
"' c #DADADA",
") c #919191",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" .+@#$$$$$%++ ",
" .%$&**======-*;>#@ ",
" @#&-===============;>%. ",
" +$;====================-&, ",
" ,&========================*$+ ",
" +$*===========================&, ",
" +'==============================*) ",
" +'================================*) ",
" +'==================================*) ",
" +'====================================*) ",
" $======================================;@ ",
" ,*======================================='. ",
" +&========================================-) ",
" $==========================================;@ ",
" @;===========================================$ ",
" #============================================;+ ",
" .&============================================-% ",
" %-=============================================&. ",
" $==============================================*+ ",
" .&==============================================-% ",
" +*===============================================$ ",
" @*===============================================> ",
" #================================================;+ ",
" $================================================*+ ",
" $================================================*+ ",
" $================================================*+ ",
" $================================================*+ ",
" $================================================*+ ",
" %-===============================================&. ",
" +*===============================================$ ",
" +;===============================================# ",
" >==============================================*@ ",
" #==============================================;+ ",
" @;=============================================$ ",
" >============================================*@ ",
" %-===========================================&. ",
" .&==========================================-% ",
" ,*========================================='. ",
" $========================================;@ ",
" +&======================================-) ",
" ,*====================================='. ",
" )*==================================='+ ",
" )*================================='+ ",
" )*==============================='+ ",
" );============================-'+ ",
" @'-=========================;). ",
" .);======================-'@ ",
" @$;-=================*&%. ",
" +%&*-===========*;$@. ",
" .+%$>;*****&$#@+ ",
" ++++++. ",
" ",
" ",
" ",
" ",
" ",
" "};

9014
assets/player_new2.xpm Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 730 B

4072
assets/wall_0.xpm Normal file

File diff suppressed because it is too large Load diff

1897
assets/wall_1.xpm Normal file

File diff suppressed because it is too large Load diff

682
assets/wall_2.xpm Normal file
View file

@ -0,0 +1,682 @@
/* XPM */
static char * wall_2_xpm[] = {
"128 128 551 2",
" c #0E0906",
". c #0C0704",
"+ c #0D0805",
"@ c #0B0503",
"# c #0D0704",
"$ c #0C0604",
"% c #0B0604",
"& c #0F0B08",
"* c #0E0B08",
"= c #0F0C08",
"- c #0D0905",
"; c #0E0905",
"> c #0D0803",
", c #0F0904",
"' c #0D0804",
") c #0C0603",
"! c #0D0703",
"~ c #0F0905",
"{ c #0F0A06",
"] c #100C06",
"^ c #0F0B06",
"/ c #0E0A06",
"( c #0C0804",
"_ c #0C0806",
": c #0C0906",
"< c #0B0603",
"[ c #0A0503",
"} c #0D0906",
"| c #0B0804",
"1 c #0B0805",
"2 c #0C0805",
"3 c #0D0904",
"4 c #0E0A05",
"5 c #0F0A05",
"6 c #100B06",
"7 c #0E0804",
"8 c #0D0705",
"9 c #110C07",
"0 c #120D08",
"a c #130D08",
"b c #110D07",
"c c #120D07",
"d c #110B06",
"e c #110C06",
"f c #130F08",
"g c #140F08",
"h c #141009",
"i c #15100A",
"j c #140F09",
"k c #150F0A",
"l c #16110C",
"m c #16110B",
"n c #15100B",
"o c #16100B",
"p c #0D0706",
"q c #0A0403",
"r c #0B0403",
"s c #090302",
"t c #0A0303",
"u c #0B0504",
"v c #090303",
"w c #090503",
"x c #090403",
"y c #0A0605",
"z c #0A0504",
"A c #0B0605",
"B c #0F0C09",
"C c #0D0A07",
"D c #0B0705",
"E c #0A0404",
"F c #0B0404",
"G c #0C0807",
"H c #0C0706",
"I c #0C0907",
"J c #0D0908",
"K c #0A0604",
"L c #0D0907",
"M c #110F0C",
"N c #110F0B",
"O c #110E0C",
"P c #0F0B09",
"Q c #0C0504",
"R c #0C0505",
"S c #0D0605",
"T c #0C0605",
"U c #0D0806",
"V c #0F0908",
"W c #100908",
"X c #0F0807",
"Y c #060201",
"Z c #070201",
"` c #080202",
" . c #080201",
".. c #090202",
"+. c #0B0302",
"@. c #0B0303",
"#. c #0A0302",
"$. c #070202",
"%. c #050101",
"&. c #060202",
"*. c #090404",
"=. c #0D0504",
"-. c #0A0202",
";. c #0C0303",
">. c #080603",
",. c #090605",
"'. c #080303",
"). c #080302",
"!. c #070402",
"~. c #080402",
"{. c #0C0403",
"]. c #0C0302",
"^. c #0D0403",
"/. c #0D0604",
"(. c #040101",
"_. c #060101",
":. c #040100",
"<. c #100B08",
"[. c #0B0202",
"}. c #090201",
"|. c #0C0402",
"1. c #070101",
"2. c #060100",
"3. c #080101",
"4. c #050100",
"5. c #0D0B08",
"6. c #080403",
"7. c #030101",
"8. c #0D0302",
"9. c #0A0201",
"0. c #0C0905",
"a. c #0B0806",
"b. c #050201",
"c. c #090402",
"d. c #040000",
"e. c #100C08",
"f. c #0C0503",
"g. c #0D0B06",
"h. c #080503",
"i. c #0B0201",
"j. c #0C0202",
"k. c #030201",
"l. c #0F0B07",
"m. c #0C0404",
"n. c #0D0503",
"o. c #060302",
"p. c #030100",
"q. c #100D09",
"r. c #100D0C",
"s. c #030000",
"t. c #050202",
"u. c #110C08",
"v. c #110D09",
"w. c #0F0403",
"x. c #090101",
"y. c #100C09",
"z. c #0D0807",
"A. c #110E09",
"B. c #0E0A08",
"C. c #0D0303",
"D. c #070302",
"E. c #0F0706",
"F. c #080504",
"G. c #100805",
"H. c #0F0705",
"I. c #020101",
"J. c #0E0303",
"K. c #060402",
"L. c #110D08",
"M. c #110E0B",
"N. c #050302",
"O. c #0D0A06",
"P. c #0B0606",
"Q. c #060403",
"R. c #0F0605",
"S. c #0D0B07",
"T. c #0F0D09",
"U. c #090504",
"V. c #090604",
"W. c #0F0906",
"X. c #0E0806",
"Y. c #0F0806",
"Z. c #100806",
"`. c #0E0604",
" + c #0E0705",
".+ c #100906",
"++ c #0D0602",
"@+ c #0D0603",
"#+ c #090502",
"$+ c #0C0602",
"%+ c #0C0502",
"&+ c #0B0502",
"*+ c #0B0402",
"=+ c #0D0502",
"-+ c #080502",
";+ c #0B0602",
">+ c #0A0502",
",+ c #0C0703",
"'+ c #0E0803",
")+ c #0F0803",
"!+ c #0F0804",
"~+ c #0E0904",
"{+ c #0C0702",
"]+ c #0F0903",
"^+ c #110C05",
"/+ c #130C05",
"(+ c #130D06",
"_+ c #100A06",
":+ c #0E0B06",
"<+ c #0F0C07",
"[+ c #0F0B05",
"}+ c #100C07",
"|+ c #120E08",
"1+ c #120F09",
"2+ c #100A08",
"3+ c #100D0D",
"4+ c #0D0B09",
"5+ c #0C0908",
"6+ c #0E0B09",
"7+ c #0F0C0B",
"8+ c #0F0D0C",
"9+ c #110F0D",
"0+ c #100D0B",
"a+ c #100C0A",
"b+ c #100C0B",
"c+ c #0D0909",
"d+ c #0D0808",
"e+ c #090705",
"f+ c #0E0A09",
"g+ c #110E0D",
"h+ c #0C0808",
"i+ c #0A0806",
"j+ c #0F0A09",
"k+ c #110D0A",
"l+ c #110D0B",
"m+ c #100B09",
"n+ c #110C0B",
"o+ c #120E0D",
"p+ c #130F0D",
"q+ c #0E0805",
"r+ c #0E0302",
"s+ c #0F0503",
"t+ c #100605",
"u+ c #100604",
"v+ c #110805",
"w+ c #110705",
"x+ c #110604",
"y+ c #0F0504",
"z+ c #130907",
"A+ c #120604",
"B+ c #110806",
"C+ c #130906",
"D+ c #0D0505",
"E+ c #100A07",
"F+ c #0E0503",
"G+ c #0E0403",
"H+ c #100503",
"I+ c #0F0302",
"J+ c #110A07",
"K+ c #0F0604",
"L+ c #0C0201",
"M+ c #0F0402",
"N+ c #100302",
"O+ c #0E0502",
"P+ c #120D09",
"Q+ c #0E0402",
"R+ c #0D0202",
"S+ c #110B08",
"T+ c #0D0402",
"U+ c #0E0B07",
"V+ c #100907",
"W+ c #0A0603",
"X+ c #100D08",
"Y+ c #100603",
"Z+ c #070303",
"`+ c #0A0101",
" @ c #100905",
".@ c #100B05",
"+@ c #100904",
"@@ c #0D0C08",
"#@ c #0F0C06",
"$@ c #090603",
"%@ c #0C0803",
"&@ c #100D0A",
"*@ c #0E0603",
"=@ c #0E0704",
"-@ c #0F0805",
";@ c #0D0C09",
">@ c #0E0C09",
",@ c #11100D",
"'@ c #13100D",
")@ c #100E0C",
"!@ c #100E0B",
"~@ c #0F0909",
"{@ c #0E0908",
"]@ c #110C0A",
"^@ c #0D0606",
"/@ c #060303",
"(@ c #0E0807",
"_@ c #110C09",
":@ c #110B09",
"<@ c #100A09",
"[@ c #110908",
"}@ c #0E0605",
"|@ c #040202",
"1@ c #110808",
"2@ c #120B09",
"3@ c #100B07",
"4@ c #080100",
"5@ c #070100",
"6@ c #040201",
"7@ c #0B0703",
"8@ c #0D0201",
"9@ c #0A0402",
"0@ c #100E0A",
"a@ c #130D0B",
"b@ c #0E0706",
"c@ c #120F0C",
"d@ c #100807",
"e@ c #0E0808",
"f@ c #0F0808",
"g@ c #050301",
"h@ c #100A05",
"i@ c #100B04",
"j@ c #100C05",
"k@ c #0D0A08",
"l@ c #110D0D",
"m@ c #110D0C",
"n@ c #13100F",
"o@ c #13100E",
"p@ c #12100F",
"q@ c #100403",
"r@ c #100705",
"s@ c #12100C",
"t@ c #100903",
"u@ c #080301",
"v@ c #0D0702",
"w@ c #0D0903",
"x@ c #0E0903",
"y@ c #0E0B0A",
"z@ c #0D0A09",
"A@ c #0E0C0B",
"B@ c #090706",
"C@ c #0B0706",
"D@ c #120D0C",
"E@ c #0F0907",
"F@ c #14100D",
"G@ c #0F0A08",
"H@ c #0F0D0B",
"I@ c #020100",
"J@ c #020000",
"K@ c #0E0504",
"L@ c #100502",
"M@ c #11100C",
"N@ c #120D0A",
"O@ c #0B0803",
"P@ c #110B07",
"Q@ c #090100",
"R@ c #130D09",
"S@ c #0F0603",
"T@ c #0F0502",
"U@ c #0B0101",
"V@ c #110E0A",
"W@ c #110C04",
"X@ c #100B03",
"Y@ c #110B03",
"Z@ c #100A03",
"`@ c #110B05",
" # c #110D06",
".# c #100A04",
"+# c #130F0B",
"@# c #13100C",
"## c #100803",
"$# c #090606",
"%# c #080605",
"&# c #030202",
"*# c #100504",
"=# c #100402",
"-# c #080505",
";# c #0B0505",
"># c #090505",
",# c #14100E",
"'# c #0D0101",
")# c #0F0201",
"!# c #0C0100",
"~# c #0E0101",
"{# c #0D0000",
"]# c #0C0000",
"^# c #130000",
"/# c #140100",
"(# c #0D0100",
"_# c #050000",
":# c #100000",
"<# c #0B0000",
"[# c #080000",
"}# c #0A0000",
"|# c #160100",
"1# c #0C0101",
"2# c #120C09",
"3# c #120000",
"4# c #110000",
"5# c #090000",
"6# c #0F0000",
"7# c #140000",
"8# c #150100",
"9# c #0C0705",
"0# c #170100",
"a# c #130100",
"b# c #140101",
"c# c #060000",
"d# c #0E0000",
"e# c #120101",
"f# c #130D0C",
"g# c #0E0100",
"h# c #100201",
"i# c #0A0602",
"j# c #0E0703",
"k# c #0E0602",
"l# c #0F0703",
"m# c #0C0802",
"n# c #0E0907",
"o# c #0E0C08",
"p# c #130E0D",
"q# c #110907",
"r# c #110605",
"s# c #0D0301",
"t# c #110603",
"u# c #0F0602",
"v# c #110905",
"w# c #100804",
"x# c #100602",
"y# c #100D07",
"z# c #110E08",
"A# c #090806",
"B# c #0B0908",
"C# c #13100B",
"D# c #12100B",
"E# c #0C0301",
"F# c #120D0B",
"G# c #0B0704",
"H# c #110F0A",
"I# c #120F0B",
"J# c #11100B",
"K# c #130E08",
"L# c #130E09",
"M# c #120E09",
"N# c #130F09",
"O# c #131009",
"P# c #130D07",
"Q# c #110F09",
"R# c #0F0A07",
"S# c #120F0A",
"T# c #120F08",
"U# c #120D06",
"V# c #130F07",
"W# c #141109",
"X# c #130E0C",
"Y# c #14110F",
"Z# c #141110",
"`# c #14110D",
" $ c #14110E",
".$ c #130F0C",
"+$ c #130E0B",
"@$ c #120F0D",
"#$ c #110706",
"$$ c #0B0100",
"%$ c #060301",
"&$ c #0B0301",
"*$ c #070403",
"=$ c #0E0301",
"-$ c #0E0201",
";$ c #13110C",
">$ c #130B08",
",$ c #130F0A",
"'$ c #110906",
")$ c #0F0301",
"!$ c #110503",
"~$ c #13110D",
"{$ c #110A05",
"]$ c #120C08",
"^$ c #13110B",
"/$ c #14120D",
"($ c #13100A",
"_$ c #14110B",
":$ c #16120B",
"<$ c #15110A",
"[$ c #17130B",
"}$ c #17120B",
"|$ c #100D06",
"1$ c #141210",
"2$ c #120E0B",
"3$ c #15120F",
"4$ c #120E0A",
"5$ c #15110D",
"6$ c #171310",
"7$ c #120605",
"8$ c #110403",
"9$ c #120503",
"0$ c #130503",
"a$ c #150704",
"b$ c #110502",
"c$ c #110402",
"d$ c #120402",
"e$ c #150603",
"f$ c #130402",
"g$ c #120603",
"h$ c #130502",
"i$ c #110302",
"j$ c #120302",
"k$ c #0E0202",
"l$ c #140503",
"m$ c #140705",
"n$ c #140603",
"o$ c #160704",
"p$ c #13110E",
"q$ c #150604",
"r$ c #120502",
"s$ c #150502",
"t$ c #150402",
"u$ c #100301",
"v$ c #130302",
"w$ c #140403",
"x$ c #170603",
"y$ c #0F0404",
"z$ c #120403",
"A$ c #140302",
"B$ c #0F0704",
"C$ c #130805",
"D$ c #130704",
"E$ c #160A07",
"F$ c #150A06",
"G$ c #170B07",
"H$ c #14110C",
"I$ c #120C06",
"J$ c #130C06",
"K$ c #140D07",
"L$ c #150D07",
"M$ c #171109",
"N$ c #171008",
"O$ c #181109",
"P$ c #170E07",
"Q$ c #181009",
"R$ c #170D07",
"S$ c #180E08",
"T$ c #14100B",
"U$ c #16120D",
"V$ c #15120D",
"W$ c #15110C",
"X$ c #16110D",
"Y$ c #17130D",
"Z$ c #19140F",
" . . + . @ @ # $ % % + & * = - + ; > , , , ' ) ! ' # ~ ~ - { ] ~ ; ~ ' , ' ~ + ; ^ ~ ~ / ~ ' ' ( _ : < [ @ . ' ' ; + - - } - } } + + | 1 } 2 2 ( + 3 ' - ; ; - ; 4 ^ 5 6 5 7 7 8 % ' ' 6 6 6 6 9 9 0 a 9 b 9 c d e 0 b a a f a g g h i j k i l m j n o m ",
"p q r r s q r t r u v v q t t t t r t v w x x [ x x y z u z A B = C D q u A % % % u u u [ u @ A u % E z u z z A u A F r A _ G H A G A u A H I _ J A q A u u q x x z K z q q t q @ [ t q v v q q A q A u q v v s u u u u L M N O P p r Q $ R S T S R S U V V W X ",
"Y Z ` ` s s ` .Z ` ....+.@.@.#...` ..$.%.%.&.` Y Z ` Z ` t *.} ; r Q u A Q S Q =.=.=.T r r @.t @.#.` Z $.` ..+.s +.s -...........@.;.;.` >.,.1 ,.'.x ).).s s $...` ` &.&.$.` ` $.Y &.$.&.$.` ` ..#.s #.s #.s @.q t r '.!.~.!.,.S Q Q =.{.{.].^.u /.s s #.$.r ",
"(.(.(.(.%.%._.%.:.(.%.Y Z _.Z Y ` Y &.&.Y %._.%.%.%.(.%._.]...{ 6 <.s [.}.|... ._.1._.%.%.2._._. .3. .4. .%.4.4.2.2.4._.1._.%._.....Y }...'.2 1 5.6.7._.%._..._.` _._.%.%._.Y _.Y Y %.%.%.%.(._.` ].8.9.[.8.....[.].-.s 7.: 0.a.a.b...;.].........Z c.&.b.$.Y Y ",
"%.:.:.:._.4.d.4. ._._.b._.%.&.&.s ` ` s $.(.%._.%.:.%.%. .9...+ / e.f.%.4.4._._._.1.1.1.4.:.4.1. . . .}. .:.%.%.4. .%.%.}._...}. . .}. .Y &.g.} 5.h.7._.4.4.%.%.1.%._.%._. .3.}.}.1._._.4.%.:.%.+.}.i.[.j.[. .;.[._...` k.l.B 5._ m.+.[.[.[. .` .-.n.Y &.&.u o.",
"_.1.3. .i._.:._._._._.v %.$.&.t /.r s ` b.(.p._.4.:.:.4.%._._./ 2 l.S %.3. .1.%.%._._. ._.3.1._. . .Z _._.%.%.%.%._._._...3._.%._._. .....&.q.r.q.A 7.s.4.%.` %._._.%.%. ........._.$.Y _.:.:.p.].j.[.i.[.[.[...[.}.].+.t.u.v.& L v ..].^.....w.+.].$.).Q /.=.$.",
"3._.3...9.}.}.3.x. ._.Y &.$.Q =.@.&.` ` %.7.%.4.:.:.4._.}.}._. } = Q $.1._. .:.%.Z _._._.3.4.4._.1._.%.:.:._._.%.Y %...}.4.2._._. .....` &.= y.y.z.7.s.d._.3.&. ._._._._.....-. .Z +...+._.:._.-.i. . .i. .[.[.-.}.[.@.t.v.A.y.B.$...[.}... .C.3.#.x D.).S $ @ ",
"_.3.}.1._.1._._.3.[...[.@.Q E.{.` ` ` &.%.(.%.4.:.p.%._... ._.} = e.{.%._._._.4. ._.1.}._.:.4.4. . ._._._.%._._.%._.%.[. .` .3._._._. .&.(.* q.q.F.7.%._.....[. .%.%.%.}...}.` %. .@.1. .4._._.....Z #.j._.].j.}.-.` Y o.u.A.q.J &...C.].[. .[.[.^.@ ).n.G.H.r ",
"_.3.%.:._._._.%.}.[. ...{.q r r r s ` %.(.(.%...:.4._. .1.[.Y } = <.r . .1.%.4.%._._._._._.:.4. .3.%._. .1.].[...[.` . ._._._.4._._.....%.l.q.y.F.I._. .}..._.%. .Y -...+. .....s Y Y _. ._.%.}.}.].-.}.-.[.[.[.J...$.K.L.A.M.A (.[.^.[...+.8.8.#.=.8 @ f.S r ",
"Y 1._.Y 3.3...1._.}. ...` F =.{.v ` _.%.%.(._. .%._.}.3... ._.} = e.r %._._.1._._._._. ._.}.2.` . . .}.3. ._. ... ._._._. ._.4.1. .}.[._.%.} = B h.7._.(._...%.%.%.Y (.` ` Y Y Y ..` ` ..` %...^.8.+.+...].[._._...p.&.N.v.v.q._ ` ^.8.[...}.-.}...r ).[ $ /./.",
"}.3.}.}.}.}.1._.[.8.....Y ..` v @.` &.%.%.7.%._. .}.}.1. .4._.- = y.x _.3.3.}._._.4.%._.}.2.:.3.3..... . ._.` _._. . ...}.` Z 3. .}. ._.Y $.O.= q.P.%.Y $.$.` s s ..` #.` ` s v @.v $.&.` s ` s r ` ..` +.t ` s ..` '.D.Q.L.A.v.V ).[.[.[. .....Z ` @ @ /./.8 R.",
"3._._.4.1.}._.3.}.[. .[.` &.` v s @ T ).%.(.%. ... ._.%._._._.} = q.` _.` .._._.%.Y _... ._.%._.` r ` Y %.(.` ` . ._.&.` Y _.%.%.%.%._._...S.B T.U D.U.w K A '.U.u @ f.w $ T x u T 6.V.T @ $ T W.X.X.Y.+ S T T U.V.,.Q.L.M.= _ (.` ..$...Z ..[.+.H.Z.`. +.+Y.",
"++@+#+$+$+$+%+++%+%+$+%+$+$+@+! $+$+$+++&+< s %+*+$+$+%+%+*+$+^ q.q.< s &+&+#+s &+$+@+=+%+&+&+-+@+! > ' ) < %+&+&+$+$+$+$+;+&+#+>+~.c.#+#+c.^ e.v.; ;+#+#+;+;+;+#+;+&+$+@+> ) > ' ; ,+> > < < - > 7 ~ '+> )+! !+! $+&+) ~+L.v.e.' #+< ,+! > $+) {+> , ]+^+^+/+(+",
"} } 2 2 ( U + U + 2 2 + + 2 2 + + + ' ' + - + + + - } ; ; 6 e.q.e.<.6 ^ _+^ ~ ~ ; ^ 6 ; 6 ^ ^ { } } _ 2 } 2 2 g.+ 2 - } + ( } 2 1 2 2 1 2 _ :+e.= & ^ } e.<+:+; } } { ^ ; 6 ^ ^ ^ ; ^ ^ ; [+5 ^ 6 6 [+5 { 5 6 ; ~ ~ ^ ] e.e.}+6 ] 6 6 6 ] 9 }+9 9 u.a 0 |+1+",
"p V V T V W <.2+V V U P 3+3+4+J } J 5+G 5+4+6+6+7+8+r.r.r.r.r.9+7+P B 0+a+b+a+P P y.c+B P P J & 4+6+J _ d+a._ 1 e+J 5.4+4+J P f+J 6+P 4+J 5.4+y.0+g+B 5+a.a.h+: i+a._ J U J z.J V j+J B.J O.} q.0+y.<.P 6+y.P B P L J 5+J J 6+0+k+l+l+l+P & m+O l+O M l+n+b+o+p+",
"_._._._... .3.[. ._.$.S _ 5.a.1 S./ s ` Y ` ` . ...s Y ..n.s ` )...+.s s ..s Y Z ` Y {.Z ..Y ..]...Y +.` &.K._ _ U.%.&.` . . ._.s Y (.b.b.Y ).s &.Y &._._._._._.p._.Y .+.#.....#...` w ^ q+i.[.9.].[.}.i.}.[.9.}.3.3. .].8.r+8.8.s+8.t+u+u+v+w+x+y+z+A+B+C+",
"_.%.%.(.` [.+. . ._._. ...D+u 2 :+& ..Y _.%.%.%.+.Y Y %.Y ..s ` +.s ^.+.s s .` +...+. . . .[.].].C. ...` (.>.O.= U.Y (. ._.4.4._.%.Y 7.7.(.%.Y 7.%.%.%.%.%.%.%.%.%.%._.%._. . . ._._._.c.} g.E+j.3.3.[.}.3. .}.}.3.3.3.x.}.8.8.].F+^.8.u+].].8.8.s+G+s+8.H+w.I+",
"1._._.+.-.j..... ._.3.3.}.}.:.2 } l.+.+. ._.3.].8.}.j.Z [.[.[... .%. ._.3.}._. ._...].}...j.[._.[.3._. .[.&.1 g.e.x %._.%.d.:.:.4.:.(.7.7.(.(.(.(.%.%.%.%.%.%.%.%.%.%...` ..}.}.1.}. ._.h.^ } J+].}.9.j.}.}.}.}.}. .1.2.3.}.8.^.K+8.n.].w.[.K+8.[.].L+G+M+N+r+r+",
"..[...[...j._.9.x.].}.}.}.}.(.( } ^ n.}.3._.}.].}._.}...[.}.;. .....Y %._._. . ._.[.].j.i.i.}...}.4._.}.+.%.2 } & A ` _.2.4._.:.%.:.7.(.7.7.(.b.%.%.%.%.4.:.4.4.%. . ...'.3.3._. ...[.Y w <+l..+].i.j.L+i. . .}.9.i.i.3.x.L+s+O+F+8.].8.8.].8.j.j.8.M+8.M+8.8.H+",
"}. . .[.i.j.i.9.j.j.}.+.[...7.} } <./...}.3.}.3. .3.}.+.1.}.+..._._. .1.}._. .i.}.}.j._.4.3. .3._._.3.[. .b.: } } % Y _._.2.4.4.4.4.b.(.c.7.(.b.%.%.%.(.%._.4.4.1. .` [._.}.}. ...j...Y w ^ e.P+8.}.i.i.i. .}.i.i.j.i._.x.8.r+Q++.G+8.G+M+r+8.].].w.w.r+[.8.r+R+",
"[.j.[.}.[.}.[.[.j.}.}.[.}.Z b.} l.& {...}.}.[.].j.}.[. ._....._._.` _._... .}.4._.3.x.3.1.}.[.}...}...j. .Y } C _ A _.1.2.4.s.s.p.%.Y (.(.7.(.%.b.%._._.&.Y Y .. .3. . ...}.-._.}.}.3._.w }+y.k+[.x.}.8.i.i.}.i.}.i.i.].j.L+M+M+F+G+8.Q+8.r+].w.8.G+8.K+G+r+u+r+",
"..}.Z ..].^.8.j.j.j.s 3._...b. S.& Q [. ._...}.3. .}...-.[.}.}.}._.4._._.1. ._._.}.8.}.}.j.}.4.}.}.}. .` Y :+& : o._._.4.%.d.s.p.%.%.%.7.7.7.b.b.(.Y .1..._.}.[. . .1...}.}..... . ...,.e.= S+j.i.L+i.x.3.i.i.i.i.i.}.x.8.I+T+T+8.[.T+s+i.8.^.8.u+M+r+u+w.G+8.",
"].j.[.[.}.n.j.[.9.3.i.x.}.[.b.} U+& Y ....}.}._.3._. ._._._.}.-. ._. ._..... .3. .[.}.[.[.}.Y [. .[...}.[.).} & } '.Y _.2._.4.d.4.%.b.Y 7.7.(.&.%.%.Y _._. .}.+..._._.}.[.3.}. .3. .[.].% e.q.V+j.L+R+i.i.}.}.R+j.L+i.9.i.8.r+8.j.M+M+s+j.Q+8.8.i.}.8.^.8.T+].Q+",
"}.+.-.+.f.n.+.+.[.}.x.i.[.}.D.:+= q.&...}.3.}._.Y [.}. .3.-.].]._.%.%.` +. .` _.` s .].j.].[.+.+...}.....o.g.* 5.&._. ._.2.4._._.b.o.o.(.(.(.%.b.%.Y ..s ..+. . .&.{.[.].}.8... .[.[...W+X+l+W j.i.R+L+i.L+L+i.i.x.L+}.L+j.8.Q+8.8.8.i.r+R+8.j.].8.s+w.Y+8.G+F+",
"Z .. .s s -. . . ._.3._.1.` D.l.y.0+$._._._._.3.......}.[.^.+.].Y ` ` ` +...+.+.#...t+8...+.+.{.+.+.s ;.+.~.= * } 7.7.%.(.:.4._.%.%.w ).).o.Z+` (.%.Y Z Y ` s ` ` .` ].].Y ` _.&... .` U.e.q..+i.x.i.`+i.i.i.L+8.R+j.j.L+[.i.Q+8.j.8.8.j.R+r+L+8.8.I+r+8.8.y+y+",
" @.@~ , +@, , 7 > > > $+,+> < ^ q.q.@+< c.W+< < + ! ++) > ! '+]+> > , > > ,+! ' ~ ' , )+' ' )+> @~ !+'+, ; e.e.= @@#@- < ( ,+3 ' ' ' '+' ' ' } 2 _ _ % $@) . ( ( + + ' < ) . %@> > > 3 [+e.&@l.' ' !+7 @+++*@@+@+) ) @++ ( + q+' =@*+@+# 7 '+# -@!+, 7 !+-@!+ @",
"e.0+&@T.B B = & & & & :+ :+:+e.y.q.e.<.e.e.& <.l.l.l.^ & * :+e.& :+& e.] .@}+= = y.y.B B y.y.& B * * ;@B >@B &@q.,@'@,@l+0+y.r.0+0+q.0+* B 0+0+)@M ,@l+6 }+q.N M l+q.l+q.y.y.q.= e.e.e.e.0+&@0+l+e.q.e.= q.y.e.e.y.q.e.q.q.q.e.&@e.e.L.e.e.2 L.M q.q.!@q.k+v.M.",
"P U z.~@{@]@W X Y.S S ^@{.).o.o.Z+/@A U T p r S x U.x r T T A Q x % z 6.>.^ ^ <.p ^@T W.X.Y.p p T T u r Q @ Q V S W W W <.m+W.<.V V+X (@S S Y.{@V P _ _ ^ e._@l+:@<@n+:@_@.+[@W n.n.r ).).U.Q .+.+n./.% }@=.@ x '.s +.r +.f.=.F+R.}@% ; 5 | |@Q.6.'.6.Q =.W 1@2@",
").%.%._.Z ..+... .` Y .._.Y _._.(.%.` Y _._.$.@.%.Y _.+.s &.6.s s +.).|@: ^ 3@.+_._....._._.%._._.4.4.%.%._.%.Z %._.Y Y Z _._._.Z [.` ._.Y . ._.%.p.$@^ e.Z.}. .3.3.9.2.2.3.3.4@5@2.x.3. .3.i.}.i.i.^.].i.}.}.}.j.i.i.4@L+8.^.i.j.w & = o.%._.%.3.^.@.j.{.G+[.",
"S &.Z _. .]. ._..._.%...Y _._. .%.&.&.6@Y t.Y ` &.Y s +.f.@ $ f.@ s @ &.-+^ e..+_.4.3. .}._.4.4.3.4.2.4.4. . . .1.3. .` Z _._.1._. .Y }...1.3... ...Y h.^ }+Z.].x.}.}. .3.3.3.3.x.3.5@ .8.8.8.8.M+j.j.j.x.}. . .x.8.].L+j.8.I+8.r+8.% y.q.s 1. . .[.].[.j.}.}...",
"u.%.7.(.Y $.Y . .` %.` ` s Y ` +.s ` ).v ).Y ` ` s $ f.s s +./.).&.&.6@( ^ }+-@` 3.3.i.3.3._.}. ._.2.4.4._.}. .3.3.i._.1._.Y _. ._.[.3. .}.}..... .Y #+^ e.<.j.3.i.j.L+}.i.}.}.j.i.}.}.8.8.i.8.8.[.+.j.i.j.j.i.j.8.j.j.L+8.L+8.8.8.2 e.q.x ..}.i.[.+...-.i.[.8.",
"v.$.Y %.Y Y ..#.c.&.&.Y s ).).v Y &.` Y &.b.Y +.....s . .[ /.^.` Y t.&.7@6 e..+ .1.3.}.3._.2.x. ._.Y 4.4.2.3.}.}... .}. .Z .}... .].}. .}.+. .}. .` )./ ] V+[.}.i.i.i.}.8.L+8@9.3.}.i.8.].j.8.8.F+8.i.8.8.[.i.i.].j.8.^.L+T+8@8.8./.X+q.q+^.].].[.}.1.[.].].i.",
"l+t &.$.9@s &.s ` Y b.u s Y +.r r ` Y &.Y ` ).` Y s {.+.+.c.` ).x ` ` %.( 6 }+.+3.2.}.3.3.2.3. .4._._.4._._.}.3.}. ._.[.` _.}. .4.-.}.3.}.}.[...}.....w & = <.j.[.i.}.[.}.i.}.}.x.}.i.R+8.^.M+T+8.[.i.j.8.8@i.3.j.8.8.L+9.i.r+r+[.j.A q.q. +].j.].].i.Z [.}.+.^.",
"l+..b.` |...s Z Y %.Y ..Y Y Y %.7.b.Y Y Y Z &.Y ` Y Y .` w ..%.%.&.%.%.+ ] e..+ .2.3.x._.2.3.3.4.2.2.4.4...j.+. .[.}.3.}.....3.1. .3.3. .}._. .}. ._.~.^ }+8 }.3.}.[.8.8.j.8._.j.9.i.}.i.8.T+j.j.L+R+].8.].3.}.R+r+8.j.T+R+8.r+F+s+T 0@!@S ^.;.+.....+.[...+.-.",
"a@s $.x ..Y Y ` Y Y %.` Y %.$.%.7.(.Y Y Y Y (.Y s Y ._.Y Y (.Y (.p.7.7.( ^ e.G.3._.3.3.4.1.3.3. .3.2.4._.3.}.}.3.}. ...[.1.}._._...[..... .3.[.G+}...W+^ e.U [.x.}.j.j.i.L+}.x.}.x.3.x.8.M+M+Q+O+8.8.s+F+M+9.8.^.R+i.8.8.M+8.L+8.R+$ q.q.<.Z.Y.b@Z.R.{.}@Y.Z.[@",
"c@T ` %.p.4.:.(.(.(.%.Y %.` ..&.Y &.Y .` Y s Y Y .Y s +.Y Y ` %.%.(.7.| l.e.Z._.2.i.}.3.3._... ._. .3._.}.}. . .[.+... ...[. .}.[.}. ._._. .+.}...` % :+X+X.R+3.i.[.j.}.i.j.j.}.}.i.R+8.8.j.8.].].8.8.].}.[.8.j.8.s+H+8.R+8.I+R+^.@ = !@2+E.W 2+V+V }@m+d@:@W ",
"'@|@t.&.p.(.7.&.Y Y &.#...Z ` Y ` b.).Y s ` Y $...s +.Y '.Y Y ` %.%.%.7.1 & y.+ %.Y ` }. .1. .}.]. .[. . .s {.^...{.....` s .. .%...+.[.+.).}. . .s ..% l.q.V ].9.i.i.[.L+i.[.i.i.L+8.L+u+H+H+8.8.w.8.8.Q+8.8.-.8.M+w.8.i.i.j.L+8.8.T y.&@y./.X.^@e@f@f@Y.f@X W ",
"k+~.g@Y b.Y ).c.).c.&+*+s >+c.&+&+c.D.~.).c.).o.&+&+s &.).).s $.&.&.% o.g.= q. Y ). . . .s s s |.%+f.s %+n.s s *++.s . .s +.+.Y ].|.}.s Y Y ` #.` s } e.y.U ].}.i.x.9.i.}.8.8.Q+T+Q+].H+s+].].].T+8.n.+.T+T+%+n.T+=+*+c.n.%+*+%+@+3@X+q.e.f.S S X.^@f./.`./.u ",
"k+u.6 ^ 6 ^ .@[+[+h@.@~ ' 6 6 6 ] 6 6 6 6 6 ] 6 ] .@.@.@.@.@.@.@6 .@.@.@6 ^ e.6 .@.@.@.@.@.@.@.@~ @.@.@.@.@.@.@.@i@.@j@.@+@+@, , @~ .@~ 6 ~ ~ 6 [+6 ] e.e.L.] .@~ .@ @+@.@.@' ] 6 ] 6 6 ] ] ] ] .@6 6 .@] ] 6 ^ 6 ] ^ ] e.] %@6 ] X+X+e.v.}+e.e.] ] ] 6 6 ^ 6 ",
":@R.s 6.6.x '.x q v r w '.% u @.x A z 6 y.0+y.B & & & & U * P {@& } _ a.a.} * B J } } D _ _ : : _ _ : a.I } k@5.J = e.* 5.} A ,.} } * J J 5.y.y.y.* P L 6+'@'@* } L } } _ J } J * 5.5+y.r.B k@B q.q.r.0+r.l@,@,@0+0+r.r.g+r.b+m@r.a+0+0+n@n@o@n@p@9+g+r.0+b+P ",
" .i.i.5@` 3.2.9.L+L+L+}.3.9.i.}.[...}.D.] 6 f.{.s +.+.s ..|.n.` s *+n.r ` $.).s T x %.%.7.7.b.Y (.&.(.&.).@ r v w o.] 6 +. .` ..+.s Q |.+.+.n./.{.f.` f.n.+./.f.&. .Y s s ` x R.F++.S ^.F+n.`.U ] 6 _@<@Z.S =.@.{.+.+... ._.1...+... .+.[.+.+.[...;.[.[.[.-.}.",
"` 8.r+8.j.j.L+L+R+8.j. .}.i.[.[.j.}._.V.X+e.Q+8.` |.8...+.].]...{./.+...s ` s ].+...Y Y %.Y +.}.+.+.@.{.^.].+.+.@ &.e.6 W...].[.j.].^.{.].%.Y n.|.s s s +.` s ].+.s [...|.+.}.^.[.[.].[.].8.8.T++ X+X+Y.].].[.[._.4.4.2.4.2.4.%._...}. .].....+.[.....[. .j.].].",
"..i.L+L+R+8@R+R+r+R+R+[.}.L+9.j.j.}._.+ e.l+s+[.i.j.L+T+R+].[.[.i._.Y +.+...+.+.+.` +.+.;.8.8.+.}.i. .8.[._._.#.r ).L.L.W.+.j.].R+j.8.8.^.` ..F+n.+.;.#...-.+...#.+. ...T+}.n.j.[.[.[.8.j.8@Q+{.+ X+v.Y...1.3.L+[.4._.3.2.4.4.2._.[.8.[.]. .....].....}._.8.[.[.",
"i.i.R+8.r+R+i.R+R+8.L+8.}.9.8.R+i.-.[.' }+M.F+8.8.8.[.j.j.=.i. .-.[.[.+...].}.}.}.i.x.i.[.j.}. .^.i.[.i.[.8...;.v t.}+}+6 ^.8.j.i.8.8.i.[.^.[.r n.{.+.` ..[.8.[.j.}.j.i.8.[.8.q@H+8.j.j.j.8.M+n.2 X+v.X... . .}.2._.3.}.3._._.4.2. ..._.^._.+.{.[. .3. .` ].}.+.",
"}.8.8.r+L+8@R+R+R+8.L+R+}.8.8.3.[.j.8.( e.v.K+8.i.j.j.8.j.I+j. .s }.[.}.[.}.....[.[.i.j.i.[.i.L+3. .8.Q+M+j.].;.v K.] }+L.s+R+8.r+[.j.8.3.^.}.{. ._.3...}.+.}.+.i.8._.].8.F+8.8.2.}.8.j.j.i.}.|.} q.q.W }.}.3.Z _.2.%.2.2.3. .4.1.j.].;.+...8.+.[.9.].-. .[. . .",
"i.i.j.R+9.i.i.i.9.8@R+L+}.L+x.}.8.j.j.+ e.L.r@8.[.].}.j.R+}.}.}.].M+8.j.[.j.+.].j.[.[.x.].L+r+].[.}.8.i.i.}.j.^.@ w ] e._@Q+G+8.1.j.8.R+}.}.+.].]. . .+.8.[.}...}.i._.s+8.8.I+8.Q+T+R+8.j...{.{.} q.q.P ` }.}.3. ._.}.Y _.3.3.9.^.Z.[.[.+.-.].].[.].[.3. .i.` 8.",
"9.8@L+i.x.L+L+L+R+R+R+i.3.}.i.i.].3.[.@+e.s@Z.j.R+R+9.].].}.[.].].}.}.8.[.].}.3.}.i.8.}.[.[.R+j.i. .[.j.8.j.[.+.v o.] e.u.T+].i.8.i.L+[...8.3.[.}.3.=.n.[.].].}.+.-.3.[.8.j.R+[...i.j.8.8.[.C.s } q.l+$ 1. .i.j.[.[.j.i.}.}. .1.3.]._.^.].}.^.+.8.[... .` +.].].",
"i.L+L+i.i.8@L+L+i.8.i.i. .i.}.}.i.}.].. X+N =.].8.8.8.L+j.j.}...[.{..._._.}...` [...` ..[.[.8.s+C.+.F+8.-.[.j.{.u ).] q.k+8.8.3.[.}.r+].8.].}.].+.n... .Y .. .[.F+[.}.8.M+T+].r+].8.M+R+8.j.[. .g.q.M.S _.}.i.}.[.}.i.j.}.}... .].]. .[.......+.+... .Y s +.j.[.",
"i.8@8.8.R+R+8@L+8.8.L+}.3.[.}.L+j.i.[.( L.M.F+8.8.R+[.}.].R+[.[.[.8.[.{.[.&... . .+.]...-.;.+.8.[.^.C.n.n.8.{./.Q ~.3@e.e.^.n.].G+].].n.].[.` n.F+n.s s T+8.8.8.8.^.}.H+8.j.8.8.].].8.8.8.j.y+` O.q.M.u .. .[... .}.}. ._. .[...[.^.n.{.+.s ..@.f.s s s r {.{.+.",
"[.j.j.i.i.j.j.[.j.x.x. .3.@.3. .3.3. .- 3@v.G.[... ... .8.].[.].].].^.8.]. .{.` ^.].+.+.r f.S S S @+f.{.Q +.Q /.S w e.q.y.^.^.].[.].].8.].8.Y ^.n.T+].n...-.+.8.s [.-.B+u+u+u+s+G+#.n.n.j.}.^./.g.q.q.T ` ..+.+.` ]...+.]...{.+.n.n.S Q f.S Q f.f.s s ..` #.s -.",
") ,+> ]+]++@)+t@)+)+.@~ +@+@, @, .@.@] L.L. @$+$+++++++++u@%+v@)+'+'+)+'+)+)+'+)+'+)+'+)+> )+)+'+> )+'+> > > > > w@] q.X+6 ; ~ .@~ ~ , +@~+' x@'+> > > $+) > )+)+'+'+)+++> '+ @)+> ++> '+'+++++~ q.L.:+) > @+) @+@+++! > '+'+~+'+> > > > @+$+'+'+'+!+! > 7 ! '+",
"^ :+& } :+^ / * & } } ^ ^ 6 ^ ^ e.3@3@e.e.3@6 W.6 6 5 ~ 6 ^ 6 6 ~ 6 6 ~ 6 6 6 e ] 6 ^ 6 ^ { 6 ^ ^ 3@6 W.6 ^ { :+X+q.q.q.q.e.U+= = = = ^ e.& e.y.U+l.6 3 @X+}+^ 6 6 } e.= l.e.e.}+e.e.] 6 ^ 6 e.e.e.e.e.X+e.}+e.] 6 ^ 6 e.e.e.e.] ] ] ] }+] ] 6 6 ] 6 ^ 6 6 ",
"e.} B y@z@7+A@z@c+J U _ P L a.,.U J V J & y.l+0+A A A a.a.a.B@C@_ L J C@: 3@] 9 W.m+m+y.l+y.D@l+W.<.m+W W.V W W V 2+E@m+]@F@D@m+8 _@2+2+W Y.Y.V V+W U u } ^ y.P y.l+l+0+l+G@L <.} } B.L _ a.I * I 5.q.v.B 5.J 5.P a+* 5.H@0+0+)@9+P e.q.q.B B 5.4+B >@6+B >@B ",
"] < o.I.I@6@&.(.(.(.(.b.%.(.J@).+. .+.$.Y &.s {.Z ).&.s s ..` U.Y &.7.7.&.; ] ] 8 .1. ... .}.8...].}.j.[.]. .j.[.+.8.G+..n.T+[.+.8.+.+.[. .[.].].^.^.K@+ ^ e.q+s s .s x Y ..` .s . .Z Y Y Y .Y .r +.*+s s s /.@+/.@+/.S @+G.Y.u V.& b._.Z .3._.4.}.F+K+F+",
"e.+ ).b.s +.%.Y Z %.Z 7.%.p.J@` ..` {...+.{.{.+.{.-.+.^.+......._.Y &.b.7.' 6 6 n.}.j.i.-. .}.8...9.2.}.}.L+[.i.}.x.L+j.j.].j.[.8.[.].+.}.1.T+j...8.].].( 6 ^ @+.... ._._.%.` ._._.4._.%._.1._._.Y _.Y %.....&.}..... . . .Z .Y %.(.} q.q+8.L@8.M+H+].O+8.8.T+",
"}+ ).Z +.1. ._._.-.%.` ` %.J@` ;.s ` _..._. ...[.[.}._._.s+[.}._.` (.t.&.' 6 6 + R+j.1._._. .[.}.[.}.}.[.j.3.[.x.}.8... .].j.r+i.8.8.].[.:.[.j.].}.+.[.' 6 } K+[.i.}.9.}.3.3.1.x.x.2._.2. . . .Y .` _.3...+.[.+.].8.].8.8.j.i.j.}._.6 M@N@s+8.8.G+8.Q+r+s+].8.",
"e.u.@ ` ._.}.3. . .%. ._.%.J@..-.1._.s. .[.[.].[. .-.8.f.j.}.[.3.` Y ).&.2 6 6 /.L+i.}._._._.}.}.i.3.2.}.[.i.j.}.j.i.}.8.M+i.i.3.].}._.3._.].3.3.+.[.+.< }+^ ^.i.3.}.L+}.i.3.4@}.x.3.x.x.}.}.].-...` _. .[.}._.j.R+8.8.r+r+8.8.}.x._.6 v._@H+r+M+8.Y+s+8.].8.8.",
"}+u.&.&.` ` |...}._.3._.%._.J@` [.].].v +.[. ...[.}.[. .i...2...[. .s &.&.O@6 6 f.x.].3.3.%._.%._._. .4.L+3.9.3.L+8.].[.[.}.].8.[.[. .2. .-.[.+.}.j. ...< e.e.r@i.}.i.i.i.L+i.1.j.3.3.i.5@x.}.^.[.+.#.` 1.+.]. .3.+.}.L+j.i.}.i.}.[. .^ L.W.w.T+T+j.^.8.s+s+].8.",
"u.P@t.b.Y Y .%._. . .Z .. .J@&.+.8.+...}.[.+.8... .3._.[.i.}.Q+}.[.` t.t.$ 6 }+Y.i.9. ._.4.(.%.p.:.p.s. ._. .1.j.i. .1. .s $.Z Y . ._.Z ..+.9.i.j.1.j.% e.e.n.i.i.`+i.i.2.1. .}.}.5@Q@4@9.x.T+[.#.+. .[.}.}. .8.j.x.R+8.i.x.8@j.8. .& v._ 8.M+M+Q+H+M+8.r+T+Q+",
"L.R@t.).Z . .` ` _._.3...%.J@*.@.t ..` [.].;.+. .[. .[.^.[.n.[.j.[.%.$.t.%@^ e.Y. .3._.%.%.%.p.J@7.J@(.s.s.s.d._.Y _._._._.s.4.J@(.p.p.(._._.Z 9.}.i.-.- e.e.S@x.4@i.i.i.x.2.x.i...}.+.}.L+L+8.8.].f.` [.[.j.[.x.i.8.L+L+j.3.i.x.3._.e.v.+ s+8.s+Q+H+T@s+8.|.8.",
"L.v.).%. .` ^.` ` }.s ..Z Y s...+.+.` '.#.{...{.r +.Y ^.+._.+.` +. .&.&.'.' e.e.<.[. .4.:.b.:.7.J@J@J@J@7.s.4.:._.p.%.4.%.:.p.J@J@(.J@J@p.p.s.s.%...}.8.' e.Y+U@L+i.L+i.L+}.i.x.x.3.x.}. .-.j.+.|.+.` ^.j.].[.[.8.i.i.[.R+}.8.i.j._.q.q.} Z.y+].n.S@^.}@@.n.|.",
"v.u.b.).` ` Y Z .. . .s ..&.7.f.+.s s r ` f.` r ` +.f.n.|.+.|.` .Y b.r &.; }+l.b+[._.:.%._._.%.:.p.J@p.:.7.Z _._.%.Y %._.%.s.:.s.(.s.J@J@s.s.p.Y .[. .- 3@; Y+x.L+L+L+i.}.i.i.[. . .[.}.i.}.j.i.n.+._.+.j.i.i.+.8.}.j.2.8@i.i.8.}. .3@q.k+n.n.T+K+K+*@H.`.}@`.",
"L.e.o.c.7.Y Y o.c.c...s I@).7.*+s c. .c...` 6@k.Y Y Y s ` .s s s $.v &.o.} e.q.l+ . .%. . ._._._.Y .Y _.x.].[.8.[. .3. .4..._.p.4.:._.:.s.d.4._.3.< & e.e.W.s+3.5@2.i.3.9.}.x.i.R+[.[.j.[.].9...+. ._.s ..[.].[.8.8.8.8.R+R+R+L+[.Y = V@l+Z.G.G.`.n.K+f.n.Z r ",
"] d ^+W@X@Y@Z@`@`@`@^+i@5 ] ; ^+`@^+ #e j@.@6 .@ @x@.#+@.@+@.@.@`@+@.@`@e ] e.}++#L.~+! ! 7 @+> ' > ! > w@~+]+i@.#+@h@.@[+5 @~ - ~ - ~+~++ ; - ; h@e.L. #L.^ ~ > ;+&+c.).#+c.#+> ) ) } # # < ) ) $ $ % $ $ ) ) ) ) &+&+< %+&+*+*+@ ) X+v.@# @!+##!+> !+# ( 2 } ",
"5.& e.} } U+} 5.B & * 5.& = = y.q.y.y.& ^ e.l+e.e.3@= { <.<.& & e.& <.& q.& l.= M q.e.& e.e.l.}+q.e.e.e.<.l.^ }+e.l.^ ~ e 3@3@3@<.e.e.e.<.e.v.6 3@<.<.<.{ .+U .+6 } 6 + + 2 + 2 W.W. W.6 W.<.<..+} 6 ] e.q.q.y.q.<.e.e.y.e.e.<.e.e.e.e.q.s@l+y.e.q.= & <.& l.y.",
",.$#%#|@k.I.I.&#Q.o.o.U.U.A C@,.,.h.,.$@] b y.F+^.t+s+s+Z.x+t+=.^.Z.R.{.Y.n.t+^.R.Z.s+F+n.{.8.s ` ` ..+.Z . .#.` _.%.~+7 .+t+G+*#I+I+i.8@8.R+R+j.L+L+R+R+I+R+u+H+8.r+8.H+L+8.i.8.i.8.8@8.=#I+=#q@t++ V.J U.6.B.-#F.,.^@;#x Z.^@^@S @ ^@>#A u ;#x v q ` ..+.@.{.",
").&.o.6@o.N.7.6@6@Y Z s #.Y Y s I.&.Q.N.; ] ]@+.j.}.3.8.].L+j. .8.8.8.].8.8.j.j.R+j.i.x.i.9.4@3.4.2.j.j.j.8.R+L+-. ...; 6 .+R+U@x.i.x.x.i.i.L+i.5@x.Q@9.8@r+8.8@L+8.j.L+i.}.8.R+L+L+8.L+L+I+L+8.r+8.^ q.* A 6.h.k.I.&.v ` &...].;.n.Y.#.b.Y ` ` p.(.d.:.%.%._.%.",
"r x &.(.).t.b.` ` #.s +...` ..` Y k.|@|@^ X+'@].}.].i.R+i.i.x. .8.i.i.x.8.L+S@L+8@8.L+L+L+i.8.L+].Z w.8.i.}.R+x.L+8.j.6 }+6 R+x.U@8@}.x.3.}.}.9.5@x.x.L+r+L+j.8.8.8.8.L+L+j.L+j.}.L+8.8@8.8.M+8@r+].e.v.2 o.6.z o.I.o.).t b.}@..+...` &.).` ..%.:.s.s.4.4.1.1.-.",
"s Q .Y s %.&...+.[...[....... .7.b.o.N.6 X+,#F+j.L+3.x.i.j.8.i.8.j.j.3.8.8.4.j.}.x.i.i.8@L+i.R+j...8.i.R+8.i.i.[.M+j.^ }+-@8.U@8@'#)#!#i.3.2.5@4@x.}.8@8@8.L+L+i.i.j.j.i.L+i.].[.i.i.}.}.R+I+r+8.].e.q.J ,.A K A k.t.f.$...j.}.^.r ` t.b.` v _.4.Z s.d.2.1.}.9.",
"r _. .%.].Y ....T+[.].}.j. .` ` s D.&#6@] e._@[.3.4.3.3.}.i.i.x.i.i.x.}.+.j.4.8.1.8.8.8.H+j.R+H+ . .8.9.].x.}.8.L+R+}.6 e.L.q@~#{#]#{#^#/#(#4@x.i.}.x.i.L+8.L+x.i.}.8@L+i.i.i.i.].L+L+i.i.r+8@i.r+j.] }+_ 6.o.D.&.t.o.v &.s _.%...{.....b.` ` 3.}.@._.4.}.}.].}.",
"....].%.Y (._...}... .[.}.].s Y (.b.&#o.] X+l+}.j.3.3.[.}.i.i._. .}.2.i.L+}.%.}.}.L+x.x.4@_#}.3._.}.[.3.3.8.L+L+x.j.}.}+L.R@8@:#<#[#}#:#|#/#1#3.x.x.L+j.r+R+i.=.i.^.L+8.L+i.x.i.3.i.i.R+8.8@8@r+8.8.:+e.%#6.U.U.w U.6..._.$.8..._.$.b.` 7.s %.[.4.3._.Y [.}.1.1.",
"{.+.` %.s ).` f.` ].+. ... .p.%.6@(.&#N.] e.2#j.i.}.Q+}.}.3.L+i.i.}.4.j.8.L+}.j.i.x.x.}.L+4@L+R+3. .8.i.T+i.L+L+8.n.[.] L.e.8@3#4#]#5#<#6#7#8#(# .4@4@i.8@3.j.8.F+R+].8@i.L+}.j.L+i.j.8.L+i.8@I+8.8.} & B U.9#J F.N.(._.&.` 4._...v '.s %.&.Y -.3.}._._.1.3.3.3.",
"f._.b.(.b.&.&.` s Y Y s +.s ..).(.o.o.o.6 ] a@8.R+i.8.i...].x.i.8.L+j.M+i.i.}.].j.i.i.I+8@}.L+i.9.8.8.x.i.L+}.j.=#8.n.] X+u.T+/#0#4#5#[#[#<#/#a#4@2.x.i.i.L+R+R+i.L+L+].L+i.i.3.i.8@8.8.R+8.8@8@M+]./ 6 o.D.A N.I.k.&.&.7.` 1.Y ..s &.).&.` .1._.Y _. . ._...8.",
"s &.).c.$.b.).u &.s *+r s 9@v &.&.o.|@N.] L.v.j.}.i.8.x.i.i.8.i.j.i.4@9.R+j.i.j.i.8.8@R+8@4@R+I+[.8.8.w.I+R+n.j.].3. .6 L.P@9.]#b#4#<#[#c#c#d#e#x.}.i.L+8.8@R+[.j.R+8.8.i.i.x.i.8@L+L+L+8.8.8.8.8.8.} ^ t.o.|@|@k.k.k.Q.&.(.s ;.s %.` s v Y ` ..` _.:.(...#.s _.",
").6.U.t.w 6./@|@A A % % N.h.F.Q.t.|@I.h.e.e.f#].i.j.[.[.i.8.j.I+I+J.j.].i.n.w.8.w.r+].r+j.8.w.N+j.8.8.8.9.9.8.[.3.}...3@L.u.}.2.4@x.4@c#c#[#g#h#9.j.}.].R+K+Q+8.Q+8.8.T+j.[.}.}.8.8.8.i.[.j.s+8.r+n.#+6 K.|@&.I.k.k.I.&.o.v s r '.b.%.u &.Y %.&.` ..(.` ..@.%.$.",
"! ;+> > > %@%@> > > ]+'+> > > ' $+;+i#[+.@ #6 +@'+'+j#++++v@++k#++'+! )+)+)+x@> '+' ' > > ~++ ! &+' ' ' ' + 2 2 P ^ - L.L.u.f.s Y .Y Y .}.+.+.|.f.%+@+@+f.@+%+@+*@j#$+%+%+@+&+! @+%+l#++=+++++++++~+}+- ,+< $+;+;+;+> > > m#$+$+{+%@> m#;+{+> > > w@> > > > %@",
".@.@.@ @+@h@.@.@.@`@.@.@.@ @.@.@+@.@h@~ 6 ] 6 .@+@+@+@t@ @+@+@h@+@+@.@, .#.@.@.@.@i@.@.@+@.@.@.@.@.@e e e e ^+e e e #L.e.}+L. #e e .@b e # #.@] ] ~ ] e # #e ^+ #^+ # #.@6 # #L. #j@e j@ # # #e .@] .@.@.@.@+@+@+@+@i@.#i@i@^+^+.@j@j@.@.@.@i@.@.@.@.@.@^+^+",
"H@B B & & & {@G@m+& * * } & & & & * y.m+y.0+m+l+& _ _ _ 5+_ _ U 2 _ J L U * } :+& & * <.<.L V m+m+<.e.= y.y.& e.m+e.q.y.y.l+'@l+= e. 0+9+l+& & B I D I >@y.q.= B * n#m+6+} 5.5.5.* * = P J & 5.y.J L J 5.6+k@& _ _ _ J 5.5.5.* B o#>@4+B B } 5.5.} : L L } k@* ",
"$ L.p#].].+.8.^.].n.=.+.+.8.].^.].n.n...}.].[.j...4@` 3.3.5@2.}.}.3.x.}.i.j.+.} L.8.8.8.R+u+8.L+R+8@R+8.n.8.Y+n.T+T+H+8.H+H+s+8.M+8.F+R+r+F+F+q@Q+|.@.+.H+].6 W.n.;.{.[.;.].[. .j.j.j.i.U@i.j.;.[.[.n.^.n.r q#r#].=.{.r [.f.S ^.=.U S u } r C.y+[.^.[.j.r+[.2. .",
"q L.J+_.2.4.4.}.4@3.x.2._.3.3.3.3.4@3.2.2.2.2.2.2.4@4@4@5@4@4@2.2.2.2.4@2.3.1.}+L.F+i.L+9.x.Q@9.}.}.}.4@}.}.4@3.4@4@x.i.Q@Q@Q@Q@i.3.4@L+U@4@i.i.L+x.2.3.L+].] u.i._.1.2.5@2.x.i.9.4@5@5@4@3.4@4@4@3.x.x.}.3.[.G+}.}.3.3._.}.3.2.3.3. .` X+n.i.3.3.3.2.}.}.3.+.G+",
"f.L..+3.2.2.d.2.i.j.i.3.2.}.5@}.3.2.2.2.2.2.2. .5@2.3.3.4@2.5@2.3.4@x.4@4@5@_.] L.*@U@4@3.4@1.2._._.2.2.3.4@2.2.2.2.2.5@5@5@3.5@3.}.L+3.Q@}.3.x.}.3.2.1.x.f.6 u.i.3.4@x.4@2.3.3.x.}.4@4@5@Q@4@4@4@i.4@i.R+i.}.x.i.}.}.3.3.4@9.9.i.i.i.+.] +.i._._.2.4... .3.3.}.",
"S L.6 }.3.2._#2.1._.2.2.4@3.3.3.3.1.2.2.2.2.2. .5@2.5@5@5@2.2.4@5@4@2.4@4@4@s e b 6 x.3.2.4@Z 4.d.2.4.4. . .4@2._.3. .4. .2.2.2. .2.3.4@ .2.2.#.2._._._.3.&.1 ..i.}.x.3.2.4@3.3.}.4@4@4@4@x.`+Q@4@x.}.i.i.L+x.}.}.x.3.3.3.4@}.x.i.}.*+^ ` i.}.3.}._. .3. . . .",
"f.L.v.3.4@2.4.2.3.x.4@3.2.3.3. .3.3._._.2.2.5@2.2.2.2.4@2.2.2.2.2.2.2.5@4@5@ .] L.u.}. .3. .3._.%.4._#4.2.2.2.2.2.4._.4.2.1.2.4.2.5@4@x.x.4@3. .2.4.s.:.d.b.$@( j.i.i.i.}. .3.3.5@x.4@2.5@5@x.i.i.x.j.}.].i.[.3.x.}.x.i. .3.3.}.i.}.}.-.6 .[. .3. .2.1.2.3.[.}.",
"c.L. @}.3.3.4.4@4@3.5@3.5@3.}.3.3.2.2.2.5@2.3.2.4@2.5@4@2.4@2.2.2.2.2.4@4@4@ .] v.W.i.2.2.5@x.i.x.4@2.2.5@_.2.4.4.2.2.2.4.2.2.5@4@Q@i.s#i.}.i.1.4@_.4.4.2.Y V.( 3.3.x.}.x.}.4@x.3.}.3.x.i.i.L+R+L+}.9.}.L+8@[.3.4@3.5@4@3.3.3.}.i.[.}.s / Y 3.1._._.4._._.}.i.}.",
"s L.6 }.3._.4.4@4@4@3.3.3.4@3.3.1.2._.2.2.2.5@2._#2.2.3.3.Q@5@5@_.3.4@3.2.5@3.] L.W.3.5@2.2.x.i.U@i.}.4@3.4@2.3.4@2.4@4@2.1.2.4@U@M+L+j.i.}.U@L+`+1._.}. .~.: 2 .L+R+i.[.i.}.x.3.i.L+`+L+i.L+8@i.4@}.[.i.L+}.4@1.}.3.3.4@2.2.3.L+L+8. .e.` 9.3.3.3._.x.}.}.3.}.",
"#.L.Y.1._.1.4.2.4@4@3.4@4@3.3.}.2.2.3.5@4@3.3.2.2.2.4@4@2.4@4@2.5@5@2.4@2.2._.] v.W.}.3.5@2.4@5@4@x.x.4@x.}.3.}.}.}.x.x.5@x.x.4@L+8@i.i.L+8@8.L+L+3.1.}.3.).- } 3.i.i.x.i.}.x.x.3.i.x.4@}.L+i.i.3.3.x.i.}.L+}.i.4@}.5@4@3.3.4@}.j.L+9.` U+` 9. ._.1._. ... .}.3.",
"+.L.+ 1.2.2.4.2.4@3.4@4@3.3.4@3.4@2.3.3.2._.3.1.4.2.3.3.x.x.3.2.3.4@5@3.2.5@3.e L.q+i.}.2.3.2.3.x.i.U@4@L+i.j.M+L+L+x.U@i.x.U@}.x.8@i.8@I+I+L+8.8@i.3.}._.~.S.} 3.3.}.j.i.3.3.j.3.x.i.Q@i.8@i.L+L+2.x.L+i.i.L+x.3.}.i.3.4@3.x.9.L+i.j.f.X++.i.}.}.}.}.i.+.+.i.}.",
"s L.5 3._._.2.2._. .x.3.3.3.3.3.1.3.3.3.1.1._._.4@2.3.3.x.x.}._.3.4@3._.1.3.}.L.v.|.x.x.3.4@}.L+8.L+L+i.8@=#M+8.x.R+i.i.].8@i.}.R+r+H+t#M+8.r+M+=#i.}. .3.w ] + x.x.i.x.}.4@}.x.x.j.i.x.i.U@i.L+j.[.}.8.8.8.8.}.}.3.x.4@4@3.3.}...}.[.f.L.n.R+].C.+.}.C.G+C.G+G+",
"e L.u.' @+@+> ) ) ) %+$+%+%+|.@+@+) %+@+@+$+) @+++$+%+@+++> *@++@+++++$+%+=+ @L.L.L.++=+=+) |.++*@k#*@k#*@k#u#k#=+=+++=+8.+.T+T+=+v#w#=+O++@Y+x#u#++*@) &+! X+q.- @+$+++=+$+%+%+@+%+++%+++@+@+> 7 ' '+' @+++++@+%+%+*+*+*+@ f.@ q+@+6 v.{ n.T+n.+._.|.f.n.n.f.",
"X+q.e.X+q.e.X+e.X+e.L.] e.q.e.X+e.e.e.X+L.e.X+] X+e.e.u.L.6 9 ] 9 ] L.e e e ] e.L.L. #] e e ] L.] ] 6 ] e 6 ] ] ] b e #] L.] b ] ] ] #e ] e e e 6 e ] ] }+L.L.L.L.L. #b b #] e. # #] L.L.L.L.L.L.X+X+X+X+X+X+y#X+v.q.X+v.L.L.L.v.v.v.v.v.L.b # #L.z#L.L.b z#",
"N.Q.,.,.y _ _ C@A#J I B J 4+4+5+4+4+B#= L.+ x Y ).` &.6.r p S X.^@S S T T ^@8 U E@X.U S U Y.X.U Y.S T $ u S $ T v @ L. #A.~.t.o.v /.s ~.).D.).o./@'.6.6.V.A U.D ).s *++.f.x ).o.).~.w 6.w T Y.W. X+& U U V S U S X.V V m+m+<.y.<.l+<.<.V W <.L T u T U p z K z ",
"6@6@t.6@6@6@&.o.k.h.t.D.~.).D.&.t.b.I.( e ' _._._._. ._.}...}.[.x.}.}.x.}.}.3.}.}.3.3.x.3.3.3.3.-.}.3.3.-.].8.i.8.n.L.L.e.(. ...].].....-.[..._._._._._._._._._._.3.1._.` Y .3. ._._._.3...}.}./.N & s .3. . .Y ._.Z _. .....}. .` .}. .#.` .3.}.3.}. .3._.",
"6@k.6@6@o.k.b.&.N.6.&.o.&.w D.&.6@b.6@( #' _._._.5@3.2.}.x.x.}.3.3.}.9.i.}.3.i.x.4@i.x.}.x.3.5@4@2.3.}.}.}.L+i.9.f.L.b ] (._.1.3._._.3. .1.3.1._. ._._._._._.4.4.2._.2._._.3._.3.2.3.1._.}.-.}.$ @#* Z _.2.2._._.3._._.@._.}.9. .}.[. .}.}.].}.3.3.[.}.9.3.[.1.",
").&.&.6@t.b.6@6.7.&.~.o.o.6.~.b.t.t.k.3 #' Y 3.4@3.3._._.i.3.i.3.}.j.L+}.3.3.3.4@2.4@4@4@3.i.4@3.3.3.}.i.}.}.x.}.f. #b ] &. ..... ._.}.1.3. ._.2.2.2._._.2.4.4.4._#2.2.2._.2.d._.2.2.2.5@3. ._.) +#& .. .3. .3.}.}.2.3.i.3.i.i. .j.].+.3.[.[.}.9.9.[.].i.i.].].",
"6.o.o.6@Q.t.!.o.I.K w 6.6.< ).6@o.t.b.' e + Y .3.}. .2.3.3.3.x.x.3.}.3.}.}.i.x.x.4@3.5@i.4@x.}.j.x.i.}._.}.}.L+i.f.L.L.L.% ...}.}.1.1.1.3. . .2.4.2.3.3._.4.4.4.4._.4.2.4.2.2.2.2.%.%.2.4@2.2.) C#y.^.j.i.-.}. .2.3.3.}.1.....8.]. . .}.8.8.i.i.}.i.[.].8.L+}.",
"o.o.|@|@o.|@&.o.I.o.K.6.o.o.&.t.b.&.6@- b - ` }.x.3.x. .L+3.3.}.3.3.i.9.}.x.3.5@x.x.x.8.U@x.x.x.x._.3. .3.i.i.L+[.s L.L.L.x ..]. .}. .` _._.(.4.2.4.2.2.2. .4.4.2.4.` 2.2.4.2.4.2.2.2.2.2.2.2.2.@ D#&@=.T+[.}.}.+.i._.}. .}.i.[.[.}.}.+.[.8.8.+.L+i.j.i.].L+].}.",
"F.t.t.t.K.o.7.o.k.&.t.t.7.t.6@6@b.o.b.- L.} _. .}.3.x._.3.3.3.x.3.3.3.x.3.}.x.}.x.x.U@3.2.3.x.3.x.3.}...x.9.}.L+i.s L.X+v.&. .}.+. ._._.` _.%.4.2._._.1.2.3.4.4.:.2.2.4._.2.2.2.4.2.4.4.4.2._._.< @#l+^.j.3.i.}.}._. .}...s }.}.{.i. .[.}.8.].9.x.`+j.].j.i.i.}.",
"~.t.k.6.o.6@I.k.7.o.6@~.b.o.D.6.o.6.7.- #} _._.3.x.}._.i.}.3.x.3.3.}.i.i.}.}.3.x.9.x.}.3.3.i.x.x.i.-.1.3.}.}.8.}.*+A.v.M.Y Y ..3.1.3._...:.2._._.2._.1.2.2.%.2.4.d.2.2.2.2.4.:.2.2.4.2.2.5@2._.@ '@l+[.}.}.].i.}.}.}.}.i.}.}.9.}.}.[.}.}.i.i.r+j.8.Q+8.i.M+8.[.",
"o.).&.k.&.t.I.o.7.).o.h.k.6@o.o.o.).t.- v.- _._.2.}.}.3.i.3.4@2.4@3.}.x.3.3.}.}.5@x.i.x.R+i.i.8@L++.i...}.L+8@R+x.n.v.v.V@b.(.].[.....Y ` %.4._._._.2.2. ._._._._._.4._.(._.%._._.2.2.2._._.3.1.r N u.[.x. .}.}. .[.}.[. . .+.i.9.9.[.r+L+Q+8.i.8.8.8.[.j.E#}.i.",
"h.Q.b.k.6@b.6.).7.t.w 6@t.~.&.).~.6.o.- v.} _...3.3.3.3.}.1.3. .3.3.3.}.x.x.3...}.x.i.i.i.4@i.i.L+i.].[.j.R+j.[.[.n.A.v.N o.&...+.[...` .%.Y 1._.` .[. .` _._._._._._._._._._._.%.%.%._._...f./.M@F#i.}.x.3.3.3.}.}.x.}.j.i.[.}.i.G+].].8.8.8.8.j.r+I+8.8.8@}.",
"w ).< 2 % % 2 G#V.: 2 ,.$@W+< i##+-+#+L.H#e.@ ) @ x .` -.` ` s s s @ @ f.|.#.+.[.8.[.i.}.i.8.8.].8.[.s T+T+|.n.@+ I#A.J#6.Y r R./.p ` r F V ^@<.^@^@=.}@S ` ..&.%.f... .Y .Y s %.4. .f.7 + 3@/.@#'@!+@+@+%+f.) &+%+*+@+|.f.*@n.n.!+@+f.n.T+T+T+|.+.+.i.+.T+K+",
"K#L.L#a L.0 b #L.L.a K#0 # # # #e b L.L.v.L.L.L.L.L.L.L.M#C#M#M#N#P+N#L.L#0 K#c #e e #L.0 a f 0 L.f O#O#N#P#K#f |+Q#A.L.] L.h@+@.@j@6 .@.@] .@i@^+ # #~ +@e 6 6 6 ] e.e.<.R#} } & N v.L.v.S#A.1+N#z#L.L.L.L.z#Q#M#M#1+P+M#N#N#M#1+1+|+1+M#K#N#N#T#U#V#f f W#",
"M.N q.0+y._@l+q.y.O 9+l+&@m+y.0+k@B.* * 0+0+y.y.y.v.k+X#Y#Z#'@m@'@`#Z#Y# $'@.$+#M#v.u.u.P@u.u.u.u.u.v.<.3@/ L * U+S.k@C S+P@d @' ( - ^ } :+} + + - } - 5 L.6 6 L.u.e.v.l++$a@'@l+.$.$V .$a@o@a@p+.$p+v._@u.<._@y.l+k+]@y.y.y.a+l+c@@$A.v.6+)@M c@@$9+l+M p+N ",
"N v.% Z.G.t+`.n.K+R.n.}@].u+8.n.}.j.}. .}.].^.[.n.].F+T+[.F+^.Z.t+/.=.^.+.}.}.; #$I+8.8@R+x.8.8@8@L+i.i.Q@Q@$$}.4@4@x.L+L+x.U@Q@Q@}.x.4@4@Q@4@4@3.4@5@_.D y.+.j.i.i.L+i.].i.i.L+x.8.i.8@L+T+8.8.M+8.F+8.8.8.8.8.^.q@r+r+I+8.r+w.x+*#@+V@&@h._ t.%$b.b.o.D.6@o.",
"I#D#<.T+i.i.x.3.3.x.x.}.}.}.9.x.3.x.i.L+i.`+U@Q@4@4@R+i.x.i.x.i.x.x.4@..2.3.}.e.d r+i.L+j.i.3.j.L+L+Q@4@4@4@x.4@L+Q@4@4@9.U@x.4@4@Q@4@4@4@4@4@4@4@4@Q@4@}.e.M@f.i.9.4@i.L+x.3.x.U@x.i.i.Q@i.r+8.s#8@8@8@8@8@8.R+}.&$8.8.8@s#s#Q+H+M+r+f.@#+#% h.Y 6@b.b.o.o.o.b.",
"N#C#R@8.R+i.L+L+L+L+R+9.3.[.i.1.}.R+R+8@r+8@L+x.Q@Q@L+i.i.U@8@L+Q@j.[.Q@4@x.3.; ~ 8.`+8@i.L+U@x.i.i.x.Q@4@Q@Q@Q@Q@4@Q@x.`+i.4@4@4@5@4@4@4@4@4@4@4@4@4@4@}.= @#f.i.L+L+8@L+L+L+L+8@L+i.L+Q@8@8@8@8@8.8.s+R+R+8@i.}.9.8.r+8.M+r+I+I+r+r+/.C#@#w |@t.~.&.&.b.o.o.&.",
"L.S#a@L+L+L+i.U@U@8@R+i.}.[.].3.3.8@8@L+8@L+L+L+$$4@)#8@L+8@L+L+8@8@i.L+i.i.x._+6 s+x.Q@i.x.i.i.i.x.3.Q@i.4@4@i.$$x.x.Q@i.4@x.}.Q@x.Q@x.4@4@4@4@Q@x.4@4@3.X+M S i.R+R+i.i.x.8@L+8@L+i.L+$$8@8@j.r+8.8.8@8.R+8@`+i. .r+r+r+8@r+r+M+M+].n.@#+#K 6.o.*$6.6.D.o.o.b.",
"X+I#2#R+U@L+L+8@8@8@8.].i.T+[.3.i.8@8@i.L+i.Q@4@4@Q@L+i.R+8@8@L+x.8@[.i.U@L+i.6 L.8.U@i.L+x.x.U@x.x.Q@Q@$$Q@Q@9.i.8.L+x.L+8@L+x.4@x.4@x.i.4@4@4@Q@Q@Q@4@}.q.@# +L+L+}...L+i.i.i.i.L+U@Q@i.8@8@8.R+8.r+8.8@8.].8.L+8.w.8.8.8.8@r+Q+r+G+`.@#.$% b.% V.6.D.D.).Y o.",
"e.N a@I+8@8@i.L+8@r+i.[.}.|.8.}.L+8.8@Q@8@i.x.U@4@4@8@=$I+8@8@8@8.8@i.j.U@R+L++@ @j.`+4@i.U@i.L+4@..x.i.x.Q@U@j.U@i.4@}.x.U@4@4@Q@9.9.4@x.i.Q@Q@x.4@x.Q@ .e.'@S U@L+8.i.i.9.8.i.L+L+L+i.L+8@8@r+r+8@8.8.R+L+8.8.i.L+8@r+8.9.r+i.r+Y+w./.C#+#% *$o.o.6.D.&.&.6@o.",
"v.I#S+8.L+L+8@L+8@8@L+}.3.[.}.3.L+i.L+].L+9.Q@`+U@}.L+L+-$8@L+L+x.L+i.L+x.8@i.~ 6 j.`+}.L+8@L+U@i.x.L+4@Q@Q@Q@Q@x.L+i.Q@x.x.`+4@Q@4@Q@i.i.Q@4@4@Q@U@U@U@ .e.s@-@}.L+i.L+j.i.L+U@8@8.8.i.i.8.8@8.L+8.M+8.R+8.8.L+9.r+s#L+].8.8.}.T+H+i.`.;$I#% *$!.6.D.t.D.A o.).",
"v.I#>$=#8@8@L+8@8@-$8.].].[. .}.`+r+8@L+L+}.L+U@U@x.8@8@-$L+L+L+L+j.L+L+L+R+i..#e L+x.8.R+i.8@U@i.L+U@x.x.x.4@L+8@8@U@i.i.`+8@i.4@x.x.L+i.`+x.i.`+x.8@L+}.e.'@/.i.8.8@L+L+L+i.L+8@8@i.L+Q@8@8@L+8@i.i.i.M+s#s#L+8.s#8.s#s#i.i.8@s+M+G+.+,$v.n#6.6.K x D.x '.o.Y ",
"I#@#'$8@8@8@i.8@8@8@8.j.i.i.n.i.8@8@L+8@L+8.L+8@i.Q@)#8@)$-$R+r+L+x.R+i.i.L+3.6 L.].8.L+L+R+8.L+L+L+i.i.i.`+x.8@-$L+8@R+j.i.i.i.i.i.}.i.9.x.U@i.U@x.L+[.].e.@#W i.L+8.r+R+Q@L+s#i.L+8@8@8@I+8.I+8@M+=#M+Q+8.s#r+8.s#8.s#r+8@s#I+=#=#u+-@I#'@_ o.W+# w [ o.).).c.",
"+#@#[@8@U@x.`+L+L+8@L+T+n.]./.9.L+i.L+I+R+8@R+r+R+L+N+I+=#r+L+i.L+j.r+L+i.i.i.u.u.}.i.i.8.8.8.j.j.r+w.8.G+L+i.I+I+M+Q+F+T+8.].T+T+s+].F+M+8.8.8.8.Q+j.T+T+e.,@l+j.8.8.8.L+].I+R+M+I+I+8.r+8.R+[.s+8@8@s#8.r+r+8.s#L+r+L+L+8@r+I+H+H+!$^.~$ $Q.6.Z+w w $ w % .+/.",
"@#@#v.3 ; ' @+@+)+)+!+)+)++@~ , +@+@+@+@w#+@~ h@+@.@`@ @.@ @+@+@.@t@t@t@t@t@.@1+D#<., , 6 @_+.+e P@d }+9 ] ] 9 e d @d {$d 6 {$ @ @6 6 6 6 { <.3@e.3@e.L.C#'@'@u.<._+} /./.-@.+; -@ @ @.+.+W.<.3@+ q+X+L.6 d u.6 6 6 6 d e e ]$u.v.0 T#^$/$`#($_$O#i :$<$[$}$[$",
"@#@#M#L.1+L#L.] |$e.L.] L.L.L.v.v.v.v.N#A.X+e.e.L.] X+L.L.L.L.L.] ] #e e ] ] L.L.R@+#'@C#C#@#+#+#@#~$`#Y#Y#Y#1$'@I#N#C#2$e.] e.^ ^ = e._@v._@k+v.v.v.v.N@v.l+m@O .$a@I#v.k+M k+v.N l+M.M.M.N M@@#@#C#s@k+L.= q.q.M.M.V@I#'@@#.$M.N@c@k+v.c@3$`#.$c@4$+#+#+#5$6$",
"[ z.f.H.%.b._.:.%._._.%.(.%._.` Y D.e.L.e.Y }.j.j.j.j.^.].].n./.n.^.G+^.y+F+F+^.s+K+t+t+s+s+K+t+t+t+t+t+t+Z.r@t+^@} O#C#_@n.].R+j.R+L+8.r+H+I+I+8.I+H+I+I+I+8.F+H+r+H+I+M+C+x+=#H+H+8.H+v+v+v+Z.S } O.{.K+*#u+^.K@G+=.`.^.8.].s+r+r+8.R+8.u+w.#$w.!$A+7$8$9$0$a$",
"^.[...[.Z _.1._._.3.3._._.` 1.3.}.3.;+.@v.r }.j.x.x.x.i.}.L+9.j.[.9.L+i.x.i.8.L+i.8@8.`+i.x.}.8.R+8.8.].j.].^.^.S 1 L.Q#u.s+M+=#8.I+i.8.r+8@r+I+8@I+-$L+N+I+8@8.r+8@r+8.8.r+R+=#8.8.x.s+I+8.M+8.f.l+&@R.[.i.x.2.x.x.3.i.}.3.x.x.U@`+i.`+r+s#I+N+b$N+c$I+c$d$e$f$",
"9.4@ .|.].}.3.x.x.j.i._.}.9.}.L+].}.' L.+#n.}.x.i.i.L+L+i.}.3.x.8.i.i.i.8.L+i.i.x.L+L+8@8@i.L+8@i.j.8@L+R+j.i.8...^ 0 N#V+8.8@8@8@8.R+L+i.L+8@R+L+s#8@I+I+i.j.8.L+8@8.8@8.R+8.8.8@8@i.8.R+I+L+8.) I#'@r#r+8.L+i.i.3.}.8.i.].}.i.8@R+8@r+I+r+I+c$g$!$c$c$c$h$i$j$",
"L+i.3.8.].[.i.i.i.j.x.}.i.i.i.}.x.1.3 v.I#K+[.j.i.3.x.3.}.}.3.}.}.i.L+L+8.L+x.x.x.i.`+4@4@L+8@8@I+L+L+i.x.i.^.^.f.g.N#,$u.j.I+8@8.L+L+L+R+8@8@L+8@8@k$I+8.R+T+R+r+8.j.L+r+R+8.8@L+8@x.R+8.R+L+8./.D#@#G+r+8.8.L+L+9.r+L+8.8@r+L+r+r+8.=$8.8@=#!$I+-$c$I+=#i$i$l$",
"8@I+j.^.` }.8@R+R+L+L+3.i.].j.i.3. .[+v.+#S@8.L+i.}.}.i.}.9.i.L+9.}.}.}.i.i.j.R+L+8@L+i.3.i.x.j.L+2.i.i.L+i.[.8.s :+C#+#_@8.r+8@R+8.L+L+L+8.8@R+R+R+L+L+i.r+r+8@8.8.8.8@L+3.L+L+L+r+x.8.L+I+8.8.+ s@@#r#r+s#8.L+8@}.w.I+G+Q+j.L+I+8@=$I+8@8@=#N+N+!$!$!$d$c$m$n$",
"r+8@r+]._.}.8@-$8@i.L+3.i.i.L+3.]...] 1+C#S@}.x.}.L+}.i.}.x.3.3.x.j.}.i.j.i.].j.j.i.8.[.].8.i.8@8@x.}.8@j.9.8.[.).:+C#@#S+L+8.L+8@L+i.L+L+i.8@L+8@L+8@8.8@L+i.i.8.R+8.L+R+L+L+i.8.L+2.r+8.8@j.L++ C#~$C.8@r+8@i.8.i.8.i.j.L+8@8@-$I+r+I+s#I+r+t#c$N+c$N+f$8$o$i$",
"L+k$M+F+1.3.8.k$U@i.i.3.2.}.i.L+j...^ A.+#u+x.i.i.i.3.}.}.}.x.i.i.9.}.i.L+3.L+i.L+`+4@Q@L+Q@x.L+L+i.I+L+x.j.R+].+.^ ($@#_@8.8.r+8.8.9.L+L+L+L+L+L+8@8.I+N+8@8.R+8@8.8@L+8@].8.i.L+R+x.8.8.=#8.R++ s@p$F+r+s#8.8.8.j.9.}.i.8.8@8@8@M+r+I+s#!$=#c$c$)#c$i$f$j$q$f$",
"L+Q+Q+r+ .}.8.i.j.j.L+1.x.i.}.[.j.3.6 v..$S@3.L+}.}.}.}.i.L+i.L+i.i.j.j.i.j.L+i.U@i.i.U@i.8.L+r+8@R+R+i.j.8.s+].+.} C#'@_@8.I+r+r+R+x.8@8.8@8@8@k$8@8@8@8@i.8@i.8.8.L+8.8@L+}.L+8.i.4@8.8.L+R+8.q+@#~$r#M+I+r+i.8@x.i.i.s#i.L+I+I+r+M+)$N+I+c$c$I+8$r$0$0$i$s$t$",
"w.G+s+{...].r+I+R+8.].-.[.[.[.8.j...6 L.C#K+}.8.3.[.].i.R+i.8.x.}.[.i.8.i.j.9.j.j.L+r+N+8@8.R+q@q@R+R+[.8.w.j.n.*+^ C#~$S+8.r+R+8@I+].8@L+8@R+R+8@8@8@R+L+L+R+L+T+L+8.8.i.x.i.L+8@=.9.8.R+L+8.].+ I#~$R.8.w.r+s#].}.i.8@I+r+8@r+I+I+i$=$!$!$c$I+u$i$d$i$f$v$w$x$",
"t+K@B+G+..#.F+s+G+^.....+.^.8.8.].+.6 L.D#Z.[...+.[.}. .-.}.....-.#.+.Q K@n.{.[.}.}. .3.}.C.C.y$].C.w.r#t+t+B+^.Q e.C#`#.+s+x+w.x+H+i.r+M+R+L+I+8@8@R+r+8@L+R+L+L+L+i.j.i.L+8@L+j.L+i.8.j.R+j.j.S @#~$2+r+r+8.r+8.R+8@8.r+8@r+I+=#8$I+q@q@k$N+I+!$8$i$z$f$v$q$A$",
"f.#.f.*+9@9@*+f.@ #. .` .s s *+@ x L.M.J#3@@ x [ *+ .` s ` .1.` {.#.r @ @ f.s }... . . . .#.s }...s s . . .s @ v.C#~$E@r [.].+.+.+.+.+.+.|.@+K+K+K+*@F+`.B$*@@+S@n.n.T+8.T+T+T+T+|.n.8.T+T+8.-@C#p$}@F+`.n.F+*@n.*@*@F+n.*@K+S@S@Y+s+M+S@H+H+t#x+A+C$D$E$F$G$",
"f.#.@ @ # . $ f.9@@ 9@s ....s &+&+*+K#1+N#6 7 ~ ~ ! 9@< 9@s ' # ) &+#.&+) ! , ! # . ! # ; ' ~ 6 ' ~ ' ' ) @ s s + H$C#H$}+< { ^ $ $ < {.*+*++ ^ 6 e.v.M#~ 9 _+d _+d d @S@B$ @~ B$F+S@!+!+F+B$B$e C#C#|+_+e d d d e |+c #d I$(+(+a P#J$J$K$L$M$M$N$M$O$P$Q$R$S$",
"`#@#4$'@'@c@2$2$4$e.& e.y.y.& n#n#n#B q.q.@$'@m@y.k+q.q.l+l+v.v.q.k+k+N '@~$`#H$6 V E+<.E@U $ # + 2 9#U & } l.% 8 } } W.} W.+ T 9#_ A U 8 $ 8 W.<.y.q.v.L.L.e.e.<.G@B.5.& G@* } 5.& & & = = q.M.M.M.M.v.y.B B.W.X.y.<.P V@y.y._@N +#T$:$U$V$W$V$U$W$n W$X$Y$Z$"};

View file

@ -1,68 +0,0 @@
/* XPM */
static char * wall_64_xpm[] = {
"64 64 1 1",
" c #FFFFFF",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "};

26
games/enemy.c Normal file
View file

@ -0,0 +1,26 @@
int pathfinding(char **map, char **map_cpy, int x, int y, int *check)
{
if (map[x][y] == 'E')
return (1);
map_cpy[x][y] = 'x';
if (map_cpy[x][y + 1] != '1' && map_cpy[x][y + 1] != 'x')
if (is_possible(map, map_cpy, x, y + 1, check))
*check = 1;
if (map_cpy[x + 1][y] != '1' && map_cpy[x + 1][y] != 'x')
if (is_possible(map, map_cpy, x + 1, y, check))
*check = 1;
if (map_cpy[x - 1][y] != '1' && map_cpy[x - 1][y] != 'x')
if (is_possible(map, map_cpy, x - 1, y, check))
*check = 1;
if (map_cpy[x][y - 1] != '1' && map_cpy[x][y - 1] != 'x')
if (is_possible(map, map_cpy, x, y - 1, check))
*check = 1;
if (!has_element(map_cpy, 'C') && *check)
return (1);
return (0);
}
void move_enemy(t_data *data)
{
}

131
games/init.c Normal file
View file

@ -0,0 +1,131 @@
#include "../so_long.h"
int key_hook(int key, t_data *data)
{
if (key == K_ESC)
quit(data);
else if (key == K_LEFT)
move(data, -1, 0);
else if (key == K_RIGHT)
move(data, 1, 0);
else if (key == K_UP)
move(data, 0, -1);
else if (key == K_DOWN)
move(data, 0, 1);
data->update = 1;
return (0);
}
static void init_data(t_data *data)
{
data->update = 1;
data->size = 128;
data->x_player = 1;
data->y_player = 1;
data->x_ene = -1;
data->y_ene = -1;
data->move = 1;
data->tick = 0;
data->mlx = mlx_init();
mlx_get_screen_size(data->mlx, &data->w_screen, &data->h_screen);
data->imgs.ply = (void**)malloc(sizeof(void*) * 8);
data->imgs.ply[0] = mlx_xpm_file_to_image(data->mlx, "assets/player_0.xpm", &data->size, &data->size);
data->imgs.ply[1] = mlx_xpm_file_to_image(data->mlx, "assets/player_1.xpm", &data->size, &data->size);
data->imgs.ply[2] = mlx_xpm_file_to_image(data->mlx, "assets/player_2.xpm", &data->size, &data->size);
data->imgs.ply[3] = mlx_xpm_file_to_image(data->mlx, "assets/player_3.xpm", &data->size, &data->size);
data->imgs.ply[4] = mlx_xpm_file_to_image(data->mlx, "assets/player_0*.xpm", &data->size, &data->size);
data->imgs.ply[5] = mlx_xpm_file_to_image(data->mlx, "assets/player_1*.xpm", &data->size, &data->size);
data->imgs.ply[6] = mlx_xpm_file_to_image(data->mlx, "assets/player_2*.xpm", &data->size, &data->size);
data->imgs.ply[7] = mlx_xpm_file_to_image(data->mlx, "assets/player_3*.xpm", &data->size, &data->size);
data->imgs.bg = mlx_xpm_file_to_image(data->mlx, "assets/background.xpm", &data->size, &data->size);
data->imgs.wall = (void**)malloc(sizeof(void*) * 3);
data->imgs.wall[0] = mlx_xpm_file_to_image(data->mlx, "assets/wall_0.xpm", &data->size, &data->size);
data->imgs.wall[1] = mlx_xpm_file_to_image(data->mlx, "assets/wall_1.xpm", &data->size, &data->size);
data->imgs.wall[2] = mlx_xpm_file_to_image(data->mlx, "assets/wall_2.xpm", &data->size, &data->size);
data->imgs.col = (void**)malloc(sizeof(void*) * 3);
data->imgs.col[0] = mlx_xpm_file_to_image(data->mlx, "assets/collectible_0.xpm", &data->size, &data->size);
data->imgs.col[1] = mlx_xpm_file_to_image(data->mlx, "assets/collectible_1.xpm", &data->size, &data->size);
data->imgs.col[2] = mlx_xpm_file_to_image(data->mlx, "assets/collectible_2.xpm", &data->size, &data->size);
data->imgs.exit = (void**)malloc(sizeof(void*) * 3);
data->imgs.exit[0] = mlx_xpm_file_to_image(data->mlx, "assets/exit_0.xpm", &data->size, &data->size);
data->imgs.exit[1] = mlx_xpm_file_to_image(data->mlx, "assets/exit_1.xpm", &data->size, &data->size);
data->imgs.exit[2] = mlx_xpm_file_to_image(data->mlx, "assets/exit_2.xpm", &data->size, &data->size);
data->imgs.ene = mlx_xpm_file_to_image(data->mlx, "assets/enemy.xpm", &data->size, &data->size);
}
int trgb(int t, int r, int g, int b)
{
return (t << 24 | r << 16 | g << 8 | b);
}
int render(t_data *data)
{
/*if (data->tick >= 5 && data->x_ene != -1)
{
data->tick = 0;
move_enemy(data);
}
else
data->tick++;*/
if (data->update == 1)
{
draw(data);
mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.bg, 0, 0);
mlx_string_put(data->mlx, data->mlx_win, 100, 100, trgb(0, 150, 0, 0), ft_itoa(data->move));
data->update = 0;
}
return (0);
}
int quit(t_data *data)
{
int i;
mlx_destroy_image(data->mlx, data->imgs.bg);
i = 0;
while (i < 8)
mlx_destroy_image(data->mlx, data->imgs.ply[i++]);
free(data->imgs.ply);
i = 0;
while (i < 3)
mlx_destroy_image(data->mlx, data->imgs.wall[i++]);
free(data->imgs.wall);
i = 0;
while (i < 3)
mlx_destroy_image(data->mlx, data->imgs.col[i++]);
free(data->imgs.col);
i = 0;
while (i < 3)
mlx_destroy_image(data->mlx, data->imgs.exit[i++]);
free(data->imgs.exit);
mlx_destroy_image(data->mlx, data->imgs.ene);
mlx_clear_window(data->mlx, data->mlx_win);
mlx_destroy_window(data->mlx, data->mlx_win);
mlx_destroy_display(data->mlx);
mlx_loop_end(data->mlx);
i = 0;
while (data->map[i])
free(data->map[i++]);
free(data->map);
free(data->mlx);
exit(0);
return (0);
}
int main(int argc, char *argv[])
{
t_data data;
(void)argc;
(void)argv;
init_data(&data);
if (get_map(argv, &data) == NULL)
return (1);
data.mlx_win = mlx_new_window(data.mlx, data.w_screen, data.h_screen, "lili meli");
mlx_hook(data.mlx_win, 17, 0, quit, &data);
mlx_key_hook(data.mlx_win, key_hook, &data);
mlx_loop_hook(data.mlx, render, &data);
mlx_loop(data.mlx);
return (0);
}

170
games/map.c Normal file
View file

@ -0,0 +1,170 @@
#include "../so_long.h"
void *read_map(char *argv[], t_data *data)
{
char *tmp_map;
char *map;
int i;
int fd;
fd = open(argv[1], O_RDONLY);
if (fd == -1)
return NULL;
i = 0;
map = NULL;
tmp_map = NULL;
while (i == 0 || tmp_map != NULL)
{
tmp_map = get_next_line(fd);
if (tmp_map && map)
map = ft_strjoin_free(map, tmp_map, 1);
else if (tmp_map)
map = ft_strdup(tmp_map);
free(tmp_map);
i++;
}
data->map = ft_split(map, '\n');
data->h_map = i - 1;
free(map);
return (&data->map);
}
int is_rectangular(t_data *data, char **map)
{
int x;
int y;
int w_map;
x = 0;
w_map = -1;
while (map[x])
{
y = 0;
while (map[x][y])
{
if (map[x][y] == ' ')
return (0);
y++;
}
if (w_map != -1 && y != w_map)
return (0);
w_map = y;
x++;
}
data->w_map = w_map;
return (1);
}
int is_surrounded_by_wall(char **map, int h_map)
{
int x;
int y;
x = 0;
y = 0;
while (map[x] && map[x][y])
{
if (map[x][y] != '1')
return (0);
y++;
if (!map[x][y] && h_map - 1 != x)
{
x = h_map - 1;
y = 0;
}
}
while(x > 0)
{
if (!map[x] || map[x][0] != '1' || map[x][y - 1] != '1')
return (0);
x--;
}
return (1);
}
int is_possible(char **map, char **map_cpy, int x, int y, int *check)
{
if (map[x][y] == 'E')
return (1);
map_cpy[x][y] = 'x';
if (map_cpy[x][y + 1] != '1' && map_cpy[x][y + 1] != 'x')
if (is_possible(map, map_cpy, x, y + 1, check))
*check = 1;
if (map_cpy[x + 1][y] != '1' && map_cpy[x + 1][y] != 'x')
if (is_possible(map, map_cpy, x + 1, y, check))
*check = 1;
if (map_cpy[x - 1][y] != '1' && map_cpy[x - 1][y] != 'x')
if (is_possible(map, map_cpy, x - 1, y, check))
*check = 1;
if (map_cpy[x][y - 1] != '1' && map_cpy[x][y - 1] != 'x')
if (is_possible(map, map_cpy, x, y - 1, check))
*check = 1;
if (!has_element(map_cpy, 'C') && *check)
return (1);
return (0);
}
/*int is_possible(t_data *data)
{
int x;
int y;
char **map;
x = data->x_player;
y = data->y_player;
map = ft_strdups(data->map);
while (data->map[x][y] != 'E')
{
map[x][y] = 'x';
if (map[x][y + 1] != '1' && map[x][y + 1] != 'x')
y++;
else if (map[x + 1][y] != '1' && map[x + 1][y] != 'x')
x++;
else if (map[x - 1][y] != '1' && map[x - 1][y] != 'x')
x--;
else if (map[x][y - 1] != '1' && map[x][y - 1] != 'x')
y--;
else
return(0);
}
return (1);
}*/
void *get_map(char *argv[], t_data *data)
{
int i;
char **map_cpy;
if (read_map(argv, data) == NULL)
return (NULL);
if (!has_element(data->map, 'C') || !has_element(data->map, 'E') || !has_element(data->map, 'P') || !has_element(data->map, '1'))
{
write(1, "Error\nIl manque des elements", 28);
return (NULL);
}
if (!is_rectangular(data, data->map))
{
write(1, "Error\nLa carte n'est pas rectangulaire", 38);
return (NULL);
}
if (!is_surrounded_by_wall(data->map, data->h_map))
{
write(1, "Error\nLa carte n'est pas entoure de mur", 39);
return (NULL);
}
data = set_position_player(data, get_position(data->map, 'P'));
i = 0;
map_cpy = ft_strdups(data->map);
if (!is_possible(data->map, map_cpy, data->y_player, data->x_player, &i))
{
write(1, "Error\nLa carte est impossible a faire", 37);
return (NULL);
}
i = 0;
while (map_cpy[i])
free(map_cpy[i++]);
free(map_cpy);
return (data);
}

34
games/player.c Normal file
View file

@ -0,0 +1,34 @@
#include "../so_long.h"
static int get_new_element(t_data *data, int x, int y)
{
return(data->map[data->y_player + y][data->x_player + x]);
}
static void set_new_element(t_data *data, int x, int y)
{
data->map[data->y_player + y][data->x_player + x] = '0';
}
void *set_position_player(t_data *data, t_xy *xy)
{
data->x_player = xy->x;
data->y_player = xy->y;
free(xy);
return (data);
}
void move(t_data *data, int x, int y)
{
if (get_new_element(data, x, y) == '1')
return ;
if (get_new_element(data, x, y) == 'C')
set_new_element(data, x, y);
if (get_new_element(data, x, y) == 'E')
if (end(data))
return ;
data->x_player += x;
data->y_player += y;
ft_putnbr_fd(data->move++, 1);
ft_putchar_fd('\n', 1);
}

44
games/position.c Normal file
View file

@ -0,0 +1,44 @@
#include "../so_long.h"
t_xy *get_position(char **map, char c)
{
int y;
t_xy *xy;
y = 0;
xy = NULL;
while (map[y])
{
if (ft_strchr_gnl(map[y], c) != -1)
{
xy = ft_calloc(1, sizeof(t_xy));
xy->x = ft_strchr_gnl(map[y], c);
xy->y = y;
break;
}
y++;
}
return (xy);
}
int has_element(char **map, char c)
{
t_xy *xy;
xy = get_position(map, c);
if (xy == NULL)
{
free(xy);
return (0);
}
else
{
free(xy);
return (1);
}
}
char get_element(t_data *data, t_xy xy)
{
return (data->map[xy.y][xy.x]);
}

13
games/quit.c Normal file
View file

@ -0,0 +1,13 @@
#include "../so_long.h"
int end(t_data *data)
{
if (get_position(data->map, 'C') == NULL)
quit(data);
return (1);
}
void all_free(t_data *data)
{
(void)data;
}

60
games/render.c Normal file
View file

@ -0,0 +1,60 @@
#include "../so_long.h"
static void *assets(t_data *data, int x, int y)
{
int dist;
char c;
c = data->map[y][x];
dist = sqrt(pow(x - data->x_player, 2) + pow(y - data->y_player, 2)) - 1;
if (dist > 2)
dist = 2;
if (c == '0' || c == 'P')
return (data->imgs.bg);
else if (c == '1')
return (data->imgs.wall[dist]);
else if (c == 'C')
return (data->imgs.col[dist]);
else if (c == 'E')
return (data->imgs.exit[dist]);
return (NULL);
}
void draw(t_data *data)
{
int x;
int y;
int range;
if (has_element(data->map, 'C'))
range = 2;
else
{
if (data->x_ene == -1)
data->x_ene = data->x_player;
range = 4;
}
x = data->x_player - range;
while (x <= data->x_player + range)
{
while (x < -1)
x++;
y = data->y_player - range;
while (y <= data->y_player + range)
{
while (y < -1)
y++;
if (x == data->x_player && y == data->y_player)
if (has_element(data->map, 'C'))
mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.ply[(x + y) % 4], data->w_screen / 2, data->h_screen / 2);
else
mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.ply[((x + y) % 4) + 4], data->w_screen / 2, data->h_screen / 2);
else if (y < 0 || x < 0 || y >= data->h_map || x >= data->w_map)
mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.bg, (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size));
else
mlx_put_image_to_window(data->mlx, data->mlx_win, assets(data, x, y), (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size));
y++;
}
x++;
}
}

Binary file not shown.

Binary file not shown.

View file

@ -16,7 +16,8 @@ ft_strlcat.c ft_toupper.c ft_tolower.c ft_strchr.c ft_strrchr.c ft_strncmp.c \
ft_memchr.c ft_memcmp.c ft_strnstr.c ft_atoi.c ft_calloc.c ft_strdup.c \ ft_memchr.c ft_memcmp.c ft_strnstr.c ft_atoi.c ft_calloc.c ft_strdup.c \
ft_substr.c ft_strjoin.c ft_strtrim.c ft_split.c ft_itoa.c ft_strmapi.c \ ft_substr.c ft_strjoin.c ft_strtrim.c ft_split.c ft_itoa.c ft_strmapi.c \
ft_striteri.c ft_putchar_fd.c ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c \ ft_striteri.c ft_putchar_fd.c ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c \
ft_get_size.c ft_power.c ft_atoi_check.c ft_strlen_double.c ft_strjoin_free.c ft_get_size.c ft_power.c ft_atoi_check.c ft_strlen_double.c ft_strjoin_free.c \
ft_strdup_free.c ft_strdups.c
OBJS = ${SRCS:.c=.o} OBJS = ${SRCS:.c=.o}
BONUS_SRCS = ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c \ BONUS_SRCS = ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c \
ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c ft_lstiter.c ft_lstmap.c ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c ft_lstiter.c ft_lstmap.c

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

32
libft/ft_strdup_free.c Normal file
View file

@ -0,0 +1,32 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strdup_free.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/07/26 14:25:30 by erey-bet #+# #+# */
/* Updated: 2022/09/28 16:32:55 by erey-bet ### ########.fr */
/* */
/* ************************************************************************** */
#include "libft.h"
char *ft_strdup_free(char *src)
{
char *src_copy;
int i;
src_copy = (char *)malloc(sizeof(char) * ft_strlen(src) + 1);
if (src_copy == NULL)
return (NULL);
i = 0;
while (src[i])
{
src_copy[i] = src[i];
i++;
}
src_copy[i] = '\0';
free(src);
return (src_copy);
}

45
libft/ft_strdups.c Normal file
View file

@ -0,0 +1,45 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_strdups.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: erey-bet <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/07/26 14:25:30 by erey-bet #+# #+# */
/* Updated: 2022/09/28 16:32:55 by erey-bet ### ########.fr */
/* */
/* ************************************************************************** */
#include "libft.h"
static int ft_strslen(char **src)
{
int i;
i = 0;
while (src[i])
i++;
return (i);
}
char **ft_strdups(char **src)
{
char **src_copy;
int x;
int y;
src_copy = ft_calloc(ft_strslen(src) + 1, (sizeof(char *)));
if (src_copy == NULL)
return (NULL);
x = -1;
while (src[++x])
{
src_copy[x] = ft_calloc(ft_strlen(src[x]) + 1, 1);
y = -1;
while (src[x][++y])
src_copy[x][y] = src[x][y];
src_copy[x][y] = '\0';
}
src_copy[x] = NULL;
return (src_copy);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -42,6 +42,8 @@ char *ft_strrchr(const char *str, int search);
int ft_strncmp(const char *s1, const char *s2, size_t n); int ft_strncmp(const char *s1, const char *s2, size_t n);
size_t ft_strlcat(char *dest, const char *src, size_t size); size_t ft_strlcat(char *dest, const char *src, size_t size);
char *ft_strdup(const char *src); char *ft_strdup(const char *src);
char *ft_strdup_free(char *src);
char **ft_strdups(char **src);
int ft_atoi(const char *nptr); int ft_atoi(const char *nptr);
char **ft_split(char const *s, char c); char **ft_split(char const *s, char c);
void *ft_calloc(size_t nitems, size_t size); void *ft_calloc(size_t nitems, size_t size);

49
map/map_big.ber Normal file
View file

@ -0,0 +1,49 @@
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1P0C000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1C00000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
100000000000000000000000000000000E000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1000000000000000000000000000000000000000000001
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111

View file

@ -1,5 +1,5 @@
1111111111111 1111111111111
10010000000C1 10010000000C1
1000011111001 1000011111001
1P0011E000001 1P0011E0000C1
1111111111111 1111111111111

6
map/map_test3.txt Normal file
View file

@ -0,0 +1,6 @@
111111111111111111111111111111111
1E0000000000000000000000000000001
101001010010000010100100000001011
101001001010101000100100000001011
1P00000000000000000000000000000C1
111111111111111111111111111111111

3
map/not_minimun.txt Normal file
View file

@ -0,0 +1,3 @@
11111
10CE1
11111

5
map/not_possible.txt Normal file
View file

@ -0,0 +1,5 @@
1111111111111
1P1C010110001
1011100010101
10000010001E1
1111111111111

4
map/not_rectangular.txt Normal file
View file

@ -0,0 +1,4 @@
11111
1P01
10CE1
11111

4
map/not_surrounded.txt Normal file
View file

@ -0,0 +1,4 @@
11111
1PCE1
10001
1111E

BIN
so_long

Binary file not shown.

224
so_long.c
View file

@ -12,227 +12,3 @@
#include "so_long.h" #include "so_long.h"
#include <stdio.h> #include <stdio.h>
void all_free(t_data *data)
{
(void)data;
}
int quit(t_data *data)
{
int i;
mlx_destroy_image(data->mlx, data->imgs.ply);
mlx_destroy_image(data->mlx, data->imgs.bg);
mlx_destroy_image(data->mlx, data->imgs.wall);
mlx_destroy_image(data->mlx, data->imgs.col);
mlx_destroy_image(data->mlx, data->imgs.exit);
mlx_destroy_image(data->mlx, data->imgs.ene);
mlx_clear_window(data->mlx, data->mlx_win);
mlx_destroy_window(data->mlx, data->mlx_win);
mlx_destroy_display(data->mlx);
mlx_loop_end(data->mlx);
i = 0;
while (data->map[i])
free(data->map[i++]);
free(data->map);
free(data->mlx);
exit(0);
return (0);
}
t_xy *get_position(t_data *data, char c)
{
int y;
t_xy *xy;
y = 0;
xy = NULL;
while (data->map[y])
{
if (ft_strchr_gnl(data->map[y], c) != -1)
{
xy = ft_calloc(1, sizeof(t_xy));
xy->x = ft_strchr_gnl(data->map[y], c);
xy->y = y;
break;
}
y++;
}
return (xy);
}
char get_element(t_data *data, t_xy xy)
{
return (data->map[xy.y][xy.x]);
}
int get_new_element(t_data *data, int x, int y)
{
return(data->map[data->y_player + y][data->x_player + x]);
}
void set_new_element(t_data *data, int x, int y)
{
data->map[data->y_player + y][data->x_player + x] = '0';
}
int end(t_data *data)
{
if (get_position(data, 'C') == NULL)
quit(data);
return (1);
}
void set_position_player(t_data *data, t_xy *xy)
{
data->x_player = xy->x;
data->y_player = xy->y;
free(xy);
}
void move(t_data *data, int x, int y)
{
if (get_new_element(data, x, y) == '1')
return ;
if (get_new_element(data, x, y) == 'C')
set_new_element(data, x, y);
if (get_new_element(data, x, y) == 'E')
if (end(data))
return ;
data->x_player += x;
data->y_player += y;
}
int key_hook(int key, t_data *data)
{
if (key == K_ESC)
quit(data);
else if (key == K_LEFT)
move(data, -1, 0);
else if (key == K_RIGHT)
move(data, 1, 0);
else if (key == K_UP)
move(data, 0, -1);
else if (key == K_DOWN)
move(data, 0, 1);
data->update = 1;
return (0);
}
void *assets(t_data *data, char c)
{
if (c == '0' || c == 'P')
return (data->imgs.bg);
else if (c == '1')
return (data->imgs.wall);
else if (c == 'C')
return (data->imgs.col);
else if (c == 'E')
return (data->imgs.exit);
return (NULL);
}
void draw(t_data *data)
{
int x;
int y;
int range;
range = 3;
x = data->x_player - range;
while (x < data->x_player + range)
{
while (x < -1)
x++;
y = data->y_player - range;
while (y < data->y_player + range)
{
while (y < -1)
y++;
if (x == data->x_player && y == data->y_player)
mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.ply, data->w_screen / 2, data->h_screen / 2);
else if (y < 0 || x < 0 || y >= data->h_map || data->map[y][x] == '\n' || data->map[y][x] == '\0')
mlx_put_image_to_window(data->mlx, data->mlx_win, data->imgs.bg, (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size));
else
mlx_put_image_to_window(data->mlx, data->mlx_win, assets(data, data->map[y][x]), (data->w_screen / 2) + ((x - data->x_player) * data->size), (data->h_screen / 2) + ((y - data->y_player) * data->size));
y++;
}
x++;
}
}
int render(t_data *data)
{
if (data->update == 1)
{
//mlx_clear_window(data->mlx, data->mlx_win);
draw(data);
data->update = 0;
}
return (0);
}
void init_data(t_data *data)
{
data->update = 1;
data->size = 128;
data->x_player = 0;
data->y_player = 0;
data->mlx = mlx_init();
mlx_get_screen_size(data->mlx, &data->w_screen, &data->h_screen);
data->imgs.ply = mlx_xpm_file_to_image(data->mlx, "assets/player.xpm", &data->size, &data->size);
data->imgs.bg = mlx_xpm_file_to_image(data->mlx, "assets/background.xpm", &data->size, &data->size);
data->imgs.wall = mlx_xpm_file_to_image(data->mlx, "assets/wall.xpm", &data->size, &data->size);
data->imgs.col = mlx_xpm_file_to_image(data->mlx, "assets/collectible.xpm", &data->size, &data->size);
data->imgs.exit = mlx_xpm_file_to_image(data->mlx, "assets/exit.xpm", &data->size, &data->size);
data->imgs.ene = mlx_xpm_file_to_image(data->mlx, "assets/enemy.xpm", &data->size, &data->size);
}
void get_map(char *argv[], t_data *data)
{
char *tmp_map;
char *map;
int i;
int fd;
fd = open(argv[1], O_RDONLY);
if (fd == -1)
return ;
i = 0;
map = NULL;
tmp_map = NULL;
while (i == 0 || tmp_map != NULL)
{
tmp_map = get_next_line(fd);
if (tmp_map && map)
map = ft_strjoin_free(map, tmp_map, 1);
else if (tmp_map)
map = ft_strdup(tmp_map);
free(tmp_map);
i++;
}
data->map = ft_split(map, '\n');
data->h_map = i - 1;
free(map);
}
int main(int argc, char *argv[])
{
t_data data;
(void)argc;
(void)argv;
init_data(&data);
get_map(argv, &data);
if (data.map == NULL)
return (1);
set_position_player(&data, get_position(&data, 'P'));
data.mlx_win = mlx_new_window(data.mlx, data.w_screen, data.h_screen, "lili meli");
mlx_hook(data.mlx_win, 17, 0, quit, &data);
mlx_key_hook(data.mlx_win, key_hook, &data);
mlx_loop_hook(data.mlx, render, &data);
mlx_loop(data.mlx);
return (0);
}

View file

@ -20,22 +20,40 @@
# include "libft/libft.h" # include "libft/libft.h"
# include "get_next_line/get_next_line.h" # include "get_next_line/get_next_line.h"
# include <fcntl.h> # include <fcntl.h>
# include <math.h>
# include <stdio.h>
typedef struct s_img
{
void **ply;
void *bg;
void **wall;
void **col;
void **exit;
void *ene;
} t_img;
typedef struct s_data typedef struct s_data
{ {
void *mlx; void *mlx;
void *mlx_win; void *mlx_win;
void *mlx_img;
char **map; char **map;
t_img imgs;
int tick;
int h_map; int h_map;
int w_map; int w_map;
int update; int update;
int size; int size;
int x_player; int x_player;
int y_player; int y_player;
int x_ene;
int y_ene;
int h_screen; int h_screen;
int w_screen; int w_screen;
int move;
} t_data; } t_data;
typedef struct s_xy typedef struct s_xy
@ -44,4 +62,24 @@ typedef struct s_xy
int y; int y;
} t_xy; } t_xy;
// Map
void *get_map(char *argv[], t_data *data);
// Render
int render(t_data *data);
void draw(t_data *data);
// Player
void move(t_data *data, int x, int y);
void *set_position_player(t_data *data, t_xy *xy);
// Position
t_xy *get_position(char **map, char c);
int has_element(char **map, char c);
char get_element(t_data *data, t_xy xy);
// Quit
int quit(t_data *data);
int end(t_data *data);
#endif #endif

BIN
so_long.o

Binary file not shown.