rockdodger-1.1.4/0000755000175000017500000000000013706632107014141 5ustar krawczykkrawczykrockdodger-1.1.4/guru_meditation.h0000644000175000017500000001005013706632107017505 0ustar krawczykkrawczyk#ifndef __GURU_MEDITATION_h_20130422__ #define __GURU_MEDITATION_h_20130422__ #include /* Colours... just for the fun of it! */ #define GM_FLAGS_YELLOW 0x0000 //!< Colour choice... yellow. #define GM_FLAGS_RECOVERY 0x0000 //!< Recovery alert, colour choice... yellow. #define GM_FLAGS_DEADEND 0x0001 //!< Colour choice... red. Never return from this alert! #define GM_FLAGS_GREEN 0x0002 //!< Colour choice... green. #define GM_FLAGS_BLUE 0x0003 //!< Colour choice... blue. #define GM_FLAGS_CHOICE 0x0800 //!< Press left to retry, right to abort... is being displayed. #define GM_FLAGS_AUTOTIMEOUT 0x2000 //!< Flash a few times and then continue #define GM_FLAGS_EXIT_VIA_TERM 0x4000 //!< Do not use the exit() function but raise(SIGTERM). #define GM_FLAGS_ABORTIFY 0x8000 //!< Pressing the right mouse button will call abort(). /* ---------- 8< ---------- */ /* These are actually the classic errors found on the Amiga. Use them on your own risk... */ /* Classic subsystems */ #define GM_SS_Exec 0x01000000 #define GM_SS_Graphics 0x02000000 #define GM_SS_Layers 0x03000000 #define GM_SS_Intuition 0x04000000 #define GM_SS_Math 0x05000000 #define GM_SS_Clist 0x06000000 #define GM_SS_DOS 0x07000000 #define GM_SS_RAM 0x08000000 #define GM_SS_ICON 0x09000000 #define GM_SS_Expansion 0x0A000000 #define GM_SS_Audio 0x10000000 #define GM_SS_Console 0x11000000 #define GM_SS_GamePort 0x12000000 #define GM_SS_KeyBoard 0x13000000 #define GM_SS_TrackDisk 0x14000000 #define GM_SS_Timer 0x15000000 #define GM_SS_CIA 0x20000000 #define GM_SS_Disk 0x21000000 #define GM_SS_Misc 0x22000000 #define GM_SS_BootStrap 0x30000000 #define GM_SS_WorkBench 0x31000000 #define GM_SS_DiskCopy 0x32000000 /* Classic general errors */ #define GM_GE_NoMemory 0x00010000 #define GM_GE_MakeLib 0x00020000 #define GM_GE_OpenLib 0x00030000 #define GM_GE_OpenDev 0x00040000 #define GM_GE_OpenRes 0x00050000 #define GM_GE_IOError 0x00060000 #define GM_GE_NoSignal 0x00070000 #define GM_GE_BadParm 0x00080000 #define GM_GE_CloseLib 0x00090000 #define GM_GE_CloseDev 0x000A0000 #define GM_GE_ProcCreate 0x000B0000 /*! \brief General purpose guru meditation display * * This function displays a Guru Meditation with subsystem, address * and text. * * This is only a display function! It will always return and will not * honor abort or deadend alerts (only make the appropriate changes to * the display). If you use GM_FLAGS_DEADEND the colour of the border * will be *always* red! * * \param ts target surface to display guru meditation on * \param flags or'ed together GM_FLAGS_* * \param subsystem subsystem id, define your own or use the Amiga ones * \param address adress where something happened * \param atext a text to display * \return which mouse button was pressed */ int guru_display_gp(SDL_Surface *ts, unsigned short flags, Uint32 subsystem, void *address, const char *atext); /*! \brief Display Guru Meditation Alert * * This function just displays a guru meditation alert. In contrast to * guru_meditation() this function will ignore the GM_FLAGS_DEADEND * flag. GM_FLAGS_ABORTIFY is honored, though. * * It uses the default display surface. * \param flags or'ed together GM_FLAGS_* * \param subsystem subsystem id, define your own or use the Amiga ones * \param address adress where something happened * \return which mouse button was pressed */ int guru_alert(unsigned short flags, Uint32 subsystem, void *address); /*! \brief Guru Meditation * * This is a true guru meditation alert. Warning! Setting * GM_FLAGS_DEADEND will never return but call exit(EXIT_FAILURE), * while using GM_FLAGS_ABORTIFY 0x8000 will call abort() on pressing * the right mouse button. * * It uses the default display surface. * \param flags or'ed together GM_FLAGS_* * \param subsystem subsystem id, define your own or use the Amiga ones * \param address adress where something happened * \return which mouse button was pressed or terminate application if GM_FLAGS_DEADEND was given. */ int guru_meditation(unsigned short flags, Uint32 subsystem, void *address); #endif rockdodger-1.1.4/display_subsystem.c0000644000175000017500000000524213706632107020073 0ustar krawczykkrawczyk#include "sparkles.h" #include "display_subsystem.h" #include "globals.h" #include "engine_exhaust.h" #include "mood_item.h" #include "sound.h" #include #define END_LEVEL_MARGIN 0.98 /*! \brief Draw the black infinity of space * * The space, the final frontier.... */ void draw_infinite_black() { float t; float l = level - floorf(level); Uint32 c = 0; if((l > END_LEVEL_MARGIN) && (state == GAME_PLAY)) { t = 4 * (1 - (1 - l) / (1 - END_LEVEL_MARGIN)); if(last_levelup_snd < level) { last_levelup_snd = ceilf(level); play_sound(4); } switch ((int) t) { case 0: // ramp up red c = SDL_MapRGB(surf_screen->format, (int) (255 * t), 0, 0); break; case 1: // ramp down red, ramp up green c = SDL_MapRGB(surf_screen->format, (int) (255 * (1 - t)), (int) (255 * (t - 1)), 0); break; case 2: // ramp down green, ramp up blue c = SDL_MapRGB(surf_screen->format, 0, (int) (255 * (3 - t)), (int) (255 * (t - 3))); break; case 3: // ramp down blue c = SDL_MapRGB(surf_screen->format, 0, 0, (int) (255 * (4 - t))); break; } } SDL_FillRect(surf_screen, NULL, c); } void draw_ghostly_rock_dodger(SDL_Surface *surf_t_rock, SDL_Surface *surf_t_dodger) { SDL_Rect src, dest; src.w = surf_t_rock->w; src.h = surf_t_rock->h; src.x = 0; src.y = 0; dest.w = src.w; dest.h = src.h; dest.x = (xsize - src.w) / 2 + cosf(fadetimer / 6.5) * 10; dest.y = (ysize / 2 - src.h) / 2 + sinf(fadetimer / 5) * 10; SDL_SetAlpha(surf_t_rock, SDL_SRCALPHA, (int) (170 + 85 * sinf(fadetimer))); SDL_BlitSurface(surf_t_rock, &src, surf_screen, &dest); src.w = surf_t_dodger->w; src.h = surf_t_dodger->h; dest.w = src.w; dest.h = src.h; dest.x = (xsize - src.w) / 2 + sinf(fadetimer / 6.5) * 10; dest.y = (ysize / 2 - src.h) / 2 + surf_t_rock->h + 20 + sinf((fadetimer + 1) / 5) * 10; SDL_SetAlpha(surf_t_dodger, SDL_SRCALPHA, (int) (170 + 85 * sinf(fadetimer - 1.0))); SDL_BlitSurface(surf_t_dodger, &src, surf_screen, &dest); } void drawdots(SDL_Surface * s) { // Draw the background stars (aka space dots - they can't possibly be stars // because then we'd be moving past them at something like 10,000 times the // speed of light) draw_space_dots(current_spacedot_engine, s); // Draw the mood item... draw_mood_item(s); // Draw all the engine dots SDL_LockSurface(s); draw_engine_dots(s); // Draw all outstanding bang dots and plumes draw_sparkles(s); SDL_UnlockSurface(s); } void draw_background_objects() { // Draw a fully black background draw_infinite_black(); // Draw the background dots drawdots(surf_screen); } rockdodger-1.1.4/blubats.h0000644000175000017500000000233713706632107015753 0ustar krawczykkrawczyk#ifndef __BLUBATS_H__ #define __BLUBATS_H__ #include #include "u-iff.h" #include "datafun.h" #include "globals.h" extern sdl_surfaces_t *surf_blubats; //!< blubat animation sequence /*! \brief Initialise blubats * * Load all images, etc. After initialisation a pointer to something * is returned. On any error a NULL pointer is returned -- do not use * this pointer. * * \param iff IFF context * \return NULL pointer on failure */ void *init_blubats(uiff_ctx_t iff); /*! \brief activate a single blubat * This function avtivate if possible a single blubat. * * \return 1 on success, else 0 */ int activate_one_blubat(); /*! \brief Check if a blubat was hit * Check if one of the active blubats was hit. * * \param ylaser Y position of the laser on the screen * \param maxx maximum X position of the laser * \return number of the killed blubat or -1 */ int check_blubat_hit(int ylaser, int maxx); void deactivate_all_blubats(void); //!< Remove all blubats from screen void display_blubats(SDL_Surface * surf_screen); //!< Display blubats void kill_blubat(unsigned int hit); //!< remove a single blubat void move_all_blubats(); //!< Move all blubats void shutdown_blubats(void); //!< Shutdown function. #endif rockdodger-1.1.4/game_state.h0000644000175000017500000000141213706632107016421 0ustar krawczykkrawczyk#ifndef __GAME_STATE_H__20130511 #define __GAME_STATE_H__20130511 /*! \brief Perform the dead pause * * Called when the player is dead. This will refill the shields and * reset the ship position. */ void dead_pause(); /*! \brief handle state changes due to timeout * * \param infoscreen_enabled = 1 if info screen should be displayed, zero if not */ void handle_state_timeout(int infoscreen_enabled); /* \brief toggle game pause status * * This switches the game state between GAME_PLAY and GAME_PAUSED. In * debug mode all other mode will cause an assertion error! */ void pausegame(); /*! \brief reset ship state * * Reset the ship information, like position, shields, etc. This is * usually called when the game begins. */ void reset_ship_state(); #endif rockdodger-1.1.4/main.c0000644000175000017500000010664313706632107015243 0ustar krawczykkrawczyk/* Space Rocks! Avoid the rocks as long as you can! Copyright (C) 2001 Paul Holt This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ // includes #include #include #include #include #include #include #include #include #include "config.h" #include "globals.h" #include "SFont.h" #include "sound.h" #include "random_gen.h" #include "sparkles.h" #include "blubats.h" #include "display_subsystem.h" #include "engine_exhaust.h" #include "game_state.h" #include "greeblies.h" #include "guru_meditation.h" #include "highscore_io.h" #include "input_functions.h" #include "intro.h" #include "laser.h" #include "mood_item.h" #include "powerup.h" #include "rocks.h" #include "ship.h" #include "datafun.h" #include "signal_handling.h" #include "sekrit_lab.h" #include "yellifish.h" #include "infoscreen.h" // constants #define M 255 #define BIG_FONT_FILE "20P_Betadance.png" #define ROCKIFF "iff.configdata.rock" //!< rockdodger iff file // macros #define COND_ERROR(a) if ((a)) {initerror=strdup(SDL_GetError());return 1;} #define NULL_ERROR(a) COND_ERROR((a)==NULL) #define NULL_GURU(a, b, c) if((a)==NULL){initerror=strdup(SDL_GetError()); guru_meditation(GM_FLAGS_DEADEND, (b), (void*)(c)); return 1;} typedef struct Game_Over_Structure { SDL_Surface *surf_t_game; // Title element "game" SDL_Surface *surf_t_over; // Title element "over" } GameOver_t; // SDL_Surface global variables SDL_Surface *surf_t_paused; // Title element "paused" SDL_Surface *surf_font_big; // The big font SDL_Surface *surf_gauge_shield[2]; // The shield gauge 0=on,1=off SDL_Surface *surf_gauge_laser[2]; // The laser gauge 0=on,1=off Scroller_t *highscore_scroller = NULL; //!< Scroller for highscore yellifishsubsystem_t *yellifishs; //!< array of yellifishs and more yellifish_t yellifish_for_infoscreen; SDL_Surface *mood_icon; //!< mood item icon for the infoscreen // Other global variables char topline[128]; char *initerror = ""; char *rockiff_name = NULL; //!< filename of rockdodger binary (iff) file with parameters/manipulation/configuration contents int laser = 0; int oss_sound_flag = 0; float faderate; struct min_max { int min, max; } rockfree_space_mm[121]; int rockfree_space_num = 0; int rockfree_space_max = 0; static const char *sequence[] = { "Rock Dodger", "Press SPACE to start!", "http://bitbucket.org/rpkrawczyk/rockdodger/", "Arrow keys move the ship.", "Press S for shield and D for laser.", "If you need a pause press P.", "Pressing F1 gets you to the setup screen.", "You can bounce off the sides of the screen.", "Caution, do not try this in real life. Space has no sides.", "", "If you have a <500Mhz machine -- buy a new one!", "", "The little green guys are called Greeblies.", "Later in the game you will meet their friends...", "...the very dangerous Blubats!", "Watch out! Blubats may leave some droppings!", "Blubat droppings should not be inhaled!", "Further on, you will meet the Yellifish,", "devious creatures they are... Beware!", "Cunning predators hunting you down!", "", "Code: RPK, Paul Holt", "GfX: RPK, Paul Holt", "Music: Jack Beatmaster, zake, Strobo, Roz", "", "Small icons floating leisurely over the screen", "are powerups. Get them!", "", "The engine on the back of the ship provides no thrust.", "It's a sparkler, there for effect.", "" }; const int nsequence = sizeof(sequence) / sizeof(char *); extern char *optarg; extern int optind, opterr, optopt; unsigned short screenshot_number = 0; /*!< Count the number of screen shots. This makes is possible to produce multiple screenshots per run. */ // ************************************* FUNCS /*! \brief Reinitialise all game parameters for a fresh start. * * \return 0 = OK, 1 = ERROR */ int restart_game() { static const char *txts[] = { "Congratulations! You have a high score.", "We have a winner!", "Wot a hero!", "A place in the hall of fame has been reserved for you!", "Amazing performance! You earned a high score.", "Unbelievable, do you do anything besides playing this game?", "Oh, come on... Admit it... You cheated, did you not?", /* Do you remember Uridium? */ "You have amassed a great score!" }; const int num_of_txts = sizeof(txts) / sizeof(const char *); char buf[160]; state = TITLE_PAGE; cleanup_globals(); destroy_space_dots(current_spacedot_engine); NULL_ERROR(current_spacedot_engine = init_space_dots_engine(surf_screen, opt_cicada_spacedots, *iff_ctx)); if(surf_green_block) SDL_FreeSurface(surf_green_block); surf_green_block = SDL_CreateRGBSurface(SDL_HWSURFACE|SDL_SRCALPHA, surf_screen->w, 22, 32, surf_screen->format->Rmask, surf_screen->format->Gmask, surf_screen->format->Bmask, surf_screen->format->Amask); NULL_ERROR(surf_green_block); SDL_FillRect(surf_green_block, NULL, SDL_MapRGB(surf_screen->format, 0, 0xa8, 0x1c)); if(highscore_scroller) destroy_scroller(highscore_scroller); strcat(strcpy(buf, txts[SDL_GetTicks() % num_of_txts]), " Please enter your name using the keyboard and press enter!"); assert(strlen(buf) < sizeof(buf) - 1); NULL_ERROR(highscore_scroller = init_scroller(buf, 14 * font_height + 110, 7.28, surf_screen->w)); deactivate_greeblies(); return 0; } void drawlaser() { int i, xc, hitrock, hitgreeb; yellifish_t *yptr; if(laserlevel < 0) return; laserlevel -= movementrate; if(laserlevel < 0) { // If the laser runs out completely, there will be a delay before it can be brought back up laserlevel = -W / 2; return; } hitrock = -1; hitgreeb = -1; xc = xsize; // let xc = x coordinate of the collision between the laser and a space rock // 1. Calculate xc and determine the asteroid that was hit for(i = 0; i < MAX_ROCKS; i++) { if(rock[i].active) { SDL_Surface *rocksurf = get_rock_surface(i, 0); if(shipdata.yship + 12 > rock[i].y && shipdata.yship + 12 < rock[i].y + rocksurf->h && shipdata.xship + 32 < rock[i].x + (rocksurf->w / 2) && rock[i].x + (rocksurf->w / 2) < xc) { xc = rock[i].x + (rocksurf->w / 2); hitrock = i; } } } for(i = 0; i < MAX_GREEBLES; i++) { int greebheight = 16; int greebwidth = 16; struct greeble *g; g = the_greeblies + i; if(g->active) { int greebx = (int) g->x; int greeby = (int) g->y; if(g->landed) { greebx += rock[g->target_rock_number].x; greeby += rock[g->target_rock_number].y; } if(shipdata.yship + 12 > greeby && shipdata.yship + 12 < greeby + greebheight && shipdata.xship + 32 < greebx + (greebwidth / 2) && greebx + (greebwidth / 2) < xc) { xc = greebx + (greebwidth / 2); hitgreeb = i; } } } if(hitrock >= 0) heat_rock_up(hitrock, movementrate); if(hitgreeb >= 0) kill_greeb(hitgreeb); if((yptr = check_yellifish_hit(yellifishs, shipdata.xship + 32, xc, shipdata.yship + 12))) { inc_score(shipdata.xship + 32, shipdata.yship + 12, YELLIFISH_KILL_POINTS); kill_yellifish(yptr); } if((hitgreeb = check_blubat_hit((int) shipdata.yship + 12, xc)) >= 0) { kill_blubat(hitgreeb); } // Plot a number of random dots between shipdata.xship and xsize (or xc as in x-collision) draw_random_dots(surf_screen, shipdata.yship + 12, shipdata.xship + 32, xc); } /*! \brief Set the SDL video mode * * This function sets the video mode and surf_screen. It will use the * fullscreen flag to decide if it is a fullscreen surface or not. * * \return the new surf_screen */ SDL_Surface *set_video_mode() { Uint32 flag; // Attempt to get the required video size flag = SDL_DOUBLEBUF | SDL_HWSURFACE; if(opt_fullscreen) flag |= SDL_FULLSCREEN; surf_screen = SDL_SetVideoMode(xsize, ysize, RD_VIDEO_BPP, flag); return surf_screen; } int init(GameOver_t *game_over_data) { int i; // Make sure that the name_input_buf is null terminated. *name_input_buf = '\0'; read_high_score_table(); data_dir = get_data_dir(); if(oss_sound_flag) { // Initialise SDL with audio and video if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0) { oss_sound_flag = 0; printf("Can't open sound, starting without it\n"); atexit(SDL_Quit); } else { atexit(SDL_Quit); atexit(SDL_CloseAudio); oss_sound_flag = init_sound(); } } else { // Initialise with video only COND_ERROR(SDL_Init(SDL_INIT_VIDEO) != 0); atexit(SDL_Quit); } // Attempt to get the required video size set_video_mode(); NULL_ERROR(surf_screen); NULL_GURU(iff_ctx = get_iff_rock(rockiff_name != NULL ? rockiff_name : load_file(ROCKIFF)), GM_FLAGS_DEADEND | GM_FLAGS_ABORTIFY | GM_FLAGS_CHOICE | GM_SS_BootStrap | GM_GE_OpenLib | GURU_SEC_main, &get_iff_rock); edition_name = load_edition_name(*iff_ctx); //TODO: Add a splash screen... SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0x2e, 0x2e, 0x2e)); SDL_Flip(surf_screen); // Attempt to initialize a joystick if(joystick_flag) { if(SDL_InitSubSystem(SDL_INIT_JOYSTICK) != 0) { joystick_flag = 0; printf("Can't initialize joystick subsystem, starting without it.\n"); } else { int njoys; njoys = SDL_NumJoysticks(); printf("%d joystick(s) detected\n", njoys); if(njoys == 0) { printf ("That's not enough joysticks to start with joystick support\n"); joystick_flag = 0; } else { joysticks[0] = SDL_JoystickOpen(0); if(joysticks[0] == NULL) { printf("Couldn't open joystick %d\n", 0); joystick_flag = 0; } } } } set_signalhandling_up(); // Set the title bar text SDL_WM_SetCaption("Rock Dodgers", "rockdodgers"); // Set the heat color from the range 0 (cold) to 300 (blue-white) for(i = 0; i < W * 3; i++) { heatcolor[i] = SDL_MapRGB(surf_screen->format, (i < W) ? (i * M / W) : (M), (i < W) ? 0 : (i < 2 * W) ? ((i - W) * M / W) : M, (i < 2 * W) ? 0 : ((i - W) * M / W) // Got that? ); #ifdef DEBUG printf("heatcolor[%04x] = { %02x, %02x, %02x }\t", i, (i < W) ? (i * M / W) : (M), (i < W) ? 0 : (i < 2 * W) ? ((i - W) * M / W) : M, (i < 2 * W) ? 0 : ((i - W) * M / W) ); //No, not really... if(i == W * 3 - 1) putchar('\n'); #endif } // Load global font if(!(surf_font_big = IMG_Load(load_file(BIG_FONT_FILE)))) { guru_meditation(GM_FLAGS_DEADEND, 0x30060000, (void*)0x464f4e54); return 1; } InitFont(surf_font_big); // Load the Title elements // GM_SS_Graphics | GM_GE_IOError NULL_GURU(surf_t_rock = load_image("rock.png", 255, 0, 0), GM_SS_Graphics | GM_GE_IOError, 0x524f434b); NULL_GURU(surf_t_dodger = load_image("dodgers.png", 255, 0, 0), GM_SS_Graphics | GM_GE_IOError, 0x444f4447); NULL_GURU(game_over_data->surf_t_game = load_image("game.png", 255, 0, 0), GM_SS_Graphics | GM_GE_IOError, 0x47414d45); NULL_GURU(game_over_data->surf_t_over = load_image("over.png", 255, 0, 0), GM_SS_Graphics | GM_GE_IOError, 0x4f564552); NULL_GURU(surf_t_paused = IMG_Load(load_file("paused.png")), GM_SS_Graphics | GM_GE_IOError, 0x50415553); NULL_GURU(surf_gauge_laser[0] = IMG_Load(load_file("laser0.png")), GM_SS_Graphics | GM_GE_IOError, 0x4c415330); NULL_GURU(surf_gauge_laser[1] = IMG_Load(load_file("laser1.png")), GM_SS_Graphics | GM_GE_IOError, 0x4c415331); NULL_GURU(surf_gauge_shield[0] = IMG_Load(load_file("shield0.png")), GM_SS_Graphics | GM_GE_IOError, 0x53484930); NULL_GURU(surf_gauge_shield[1] = IMG_Load(load_file("shield1.png")), GM_SS_Graphics | GM_GE_IOError, 0x53484931); // Load the little spaceship surface from the spaceship file NULL_GURU(surf_small_ship = load_image("ship_small.png", 0, 255, 0), GM_SS_Graphics | GM_GE_IOError, 0x5348534d); NULL_GURU(init_ship(), 0x40000000 | GM_GE_ProcCreate, 0x53484950); init_engine_dots(); NULL_GURU(init_infoscreen(*iff_ctx), GM_SS_Misc | GM_GE_OpenDev | GURU_SEC_infoscreen, &init_infoscreen); NULL_ERROR(init_blubats(*iff_ctx)); NULL_ERROR(init_powerup()); NULL_ERROR(mood_icon = init_mood_item(*iff_ctx)); // Load all our lovely rocks NULL_ERROR(init_rocks()); NULL_ERROR(init_greeblies()); NULL_ERROR((yellifishs = init_yellifish_subsystem(*iff_ctx))); init_yellifish(yellifishs, &yellifish_for_infoscreen, 0, 0); NULL_GURU(init_sparkles(*iff_ctx), GM_SS_Graphics | GM_GE_OpenLib | GURU_SEC_sparkles, &init_sparkles); // Remove the mouse cursor #ifdef SDL_DISABLE SDL_ShowCursor(SDL_DISABLE); #endif return 0; } void showgauge(int x, SDL_Surface * surf[2], float fraction) { static int endx, w; static SDL_Rect src, dest; src.y = 0; if(fraction > 0) { if(fraction > 1) fraction = 1.0; src.x = 0; w = src.w = surf[0]->w * fraction; src.h = surf[0]->h; endx = src.w; dest.w = src.w; dest.h = src.h; dest.x = x; dest.y = ysize - src.h - 10; SDL_BlitSurface(surf[0], &src, surf_screen, &dest); } else { endx = 0; w = 0; } src.x = endx; src.w = surf[1]->w - w; src.h = surf[1]->h; dest.w = src.w; dest.h = src.h; dest.x = x + endx; dest.y = ysize - src.h - 10; SDL_BlitSurface(surf[1], &src, surf_screen, &dest); } void display_version_n_text() { char buf[120]; const char *text; assert(edition_name); sprintf(buf, "Version %s - The %s edition ( %s )", VERSION, edition_name, COMPILEDATE); int x = (xsize - SFont_wide(buf)) / 2 + sinf(fadetimer / 4.5) * 10; PutString(surf_screen, x, ysize - 50 + sinf(fadetimer / 2) * 5, buf); text = sequence[(int) (fadetimer / 40) % nsequence]; x = (xsize - SFont_wide(text)) / 2 + cosf(fadetimer / 4.5) * 10; PutString(surf_screen, x, ysize - 100 + cosf(fadetimer / 3) * 5, text); fadetimer += movementrate / 2.0; } /*! \brief Display de list o high scores mon. */ void display_highscores() { unsigned int i; char s[128]; PutString(surf_screen, 180, 50, "High scores"); for(i = 0; i < MAXIMUM_HIGH_SCORE_ENTRIES; ++i) { sprintf(s, "#%1d", i + 1); PutString(surf_screen, 150, 50 + (i + 2) * font_height, s); sprintf(s, "%4ld", high[i].score); PutString(surf_screen, 200, 50 + (i + 2) * font_height, s); sprintf(s, "%3s", high[i].name); PutString(surf_screen, 330, 50 + (i + 2) * font_height, s); } } /*! \brief Enter the highscore * * Called once per frame from draw() if we are in highscore enter * mode. */ void enter_highscore(void) { int i; assert(state == HIGH_SCORE_ENTRY); for(i = 0; i < MAXIMUM_HIGH_SCORE_ENTRIES - 1; ++i) { if(high[i].score < high[i + 1].score) { i = guru_meditation(GM_FLAGS_ABORTIFY | GM_FLAGS_DEADEND, GM_SS_GamePort | GM_GE_BadParm | GURU_SEC_main, &enter_highscore); printf("guru_meditation() = %d\n", i); return; } } if(scorerank >= 0) { play_tune(2); if(SFont_Input (surf_screen, 330, 50 + (scorerank + 2) * font_height, 300, name_input_buf)) { // Insert new high score and name into high score table high[scorerank].score = score; high[scorerank].name = strdup(name_input_buf); high[scorerank].allocated = 1; scorerank = -1; //we are unworthy again // Set the global name string to "", ready for the next winner name_input_buf[0] = 0; // Change state to briefly show high scores page state = HIGH_SCORE_DISPLAY; state_timeout = 200; // Write the high score table to the file write_high_score_table(); // Play the title page tune play_tune(0); } } else { state = HIGH_SCORE_DISPLAY; state_timeout = 400; play_tune(0); } } void draw_titlepage(void) { draw_ghostly_rock_dodger(surf_t_rock, surf_t_dodger); display_version_n_text(); } /*! \brief Draw the fading game over. * * This function draws the gostly GAME OVER once the last ship was * lost. Currently these are also global variables but this is goint * to change. * * \param fadetimer timer variable * \param gost game over structure pointer * \param surf_screen target-screen surface */ void draw_gameover(float fadetimer, const GameOver_t *gost, SDL_Surface *surf_screen) { SDL_Rect src, dest; float fadegame, fadeover; if(fadetimer < 3.0 / faderate) { fadegame = fadetimer / (3.0 / faderate); } else { fadegame = 1.0; } if(fadetimer < 3.0 / faderate) { fadeover = 0.0; } else if(fadetimer < 6.0 / faderate) { fadeover = ((3.0 / faderate) - fadetimer) / (6.0 / faderate); } else { fadeover = 1.0; } src.w = gost->surf_t_game->w; src.h = gost->surf_t_game->h; src.x = 0; src.y = 0; dest.w = src.w; dest.h = src.h; dest.x = (xsize - src.w) / 2; dest.y = (ysize - src.h) / 2 - 40; SDL_SetAlpha(gost->surf_t_game, SDL_SRCALPHA, (int) (fadegame * (200 + 55 * cosf(fadetimer)))); SDL_BlitSurface(gost->surf_t_game, &src, surf_screen, &dest); src.w = gost->surf_t_over->w; src.h = gost->surf_t_over->h; dest.w = src.w; dest.h = src.h; dest.x = (xsize - src.w) / 2; dest.y = (ysize - src.h) / 2 + 40; SDL_SetAlpha(gost->surf_t_over, SDL_SRCALPHA, (int) (fadeover * (200 + 55 * sinf(fadetimer)))); SDL_BlitSurface(gost->surf_t_over, &src, surf_screen, &dest); } void yellifish_displayer(SDL_Surface *target, SDL_Rect *dest) { yellifish_for_infoscreen.posx = dest->x + yellifishs->headoffsetx; yellifish_for_infoscreen.posy = dest->y + yellifishs->headoffsety; display_yellifish(yellifishs, &yellifish_for_infoscreen, target); } void display_infoscreen() { struct Entry infotxt[] = { #ifndef NDEBUG { "DEBUG", 640, 400, {INFOICON, {surf_small_ship}}, -1 }, #endif { "The good", 0, 0, {INFONONE}, 0 }, { "", 0, 0, {INFONONE}, 0 }, { "Laser powerup", 0, 0, {INFOICON, {surf_powerups[POWERUP_LASER]->surfaces[0]}}, 0 }, { "shield powerup", 0, 0, {INFOICON, {surf_powerups[POWERUP_SHIELD]->surfaces[0]}}, 0 }, { "Extra life", 0, 0, {INFOICON, {surf_powerups[POWERUP_LIFE]->surfaces[0]}}, 0 }, /* ------------------------------------------------------------ */ { "The bad", 0, 0, {INFONONE}, 1 }, { "", 0, 0, {INFONONE}, 1 }, { "Rocks", 0, 0, {INFOICON, {get_rock_surface(0, 0)}}, 1 }, { "Greeblies (100 pts)", 0, 0, {INFOICON, {surf_greeblies->surfaces[0]}}, 1 }, { "Blubats (125 pts)", 0, 0, {INFOICON, {surf_blubats->surfaces[0]}}, 1 }, { "Yellifish (175 pts)", 0, 0, {INFOFUNP, {.icondisplayfun = &yellifish_displayer}}, 1}, /* ------------------------------------------------------------ */ { "The other", 0, 0, {INFONONE}, 2 }, { "", 0, 0, {INFONONE}, 2 }, { "Your ship", 0, 0, {INFOICON, {surf_small_ship}}, 2 }, { "Mood items (harmless)", 0, 0, {INFOICON, {mood_icon}}, 2 }, { NULL } }; display_infotext(infotxt, surf_screen); } /*! \brief Handle powerups * * This function checks if there is a powerup displayed, if the ship * has "hit" it, and than handles the powerup procedure. * * \param shieldsup is the shield up? */ void handle_powerups(int shieldsup) { // If the game displays the laserpowerup. The check is done // explicitly. if(get_current_powerup() != POWERUP_NONE) { display_powerup(surf_screen); //Yes, shields protect against *everything*! if(!((initialshield > 0) || (shieldsup && shieldlevel > 0))) { int bangpowerup = ship_check_collision(surf_screen); if(bangpowerup) { switch(get_current_powerup()) { case POWERUP_LASER: laserlevel += 16; if(laserlevel > 3 * W) { laserlevel = 3 * W; } break; case POWERUP_SHIELD: shieldlevel += 13; if(shieldlevel > 3 * W) { shieldlevel = 3 * W; } break; case POWERUP_LIFE: nships += 1; //Increase number of ships. break; /* None will never happen as it is checked above. But better to be save then sorry... */ case POWERUP_NONE: case POWERUP_MAXPOWERUP: puts("Illegal powerup!"); play_sound(4); /* * We use this goto so that only one sound is played. The * powerup must always be deactivated. */ goto illegal_powerup_encounterd; break; } play_sound(5); illegal_powerup_encounterd: deactivate_powerup(); } } } } static void draw_paused(SDL_Surface *screen) { SDL_Rect dest; dest.w = surf_t_paused->w; dest.h = surf_t_paused->h; dest.x = (xsize - dest.w) / 2; dest.y = (ysize - dest.h) / 2; SDL_BlitSurface(surf_t_paused, NULL, screen, &dest); } /*! \brief Draw all * * Draw all the objects on the standard surface. * * \param shieldsup is the shield up? * \param game_over_data pointer to game over structure * \return bang=0 if everything ok, bang=1 if ship was hit. */ int draw(int shieldsup, const GameOver_t *game_over_data) { int i; int bang; bang = 0; draw_background_objects(); // If it's firing, draw the laser if(laser) { drawlaser(); } else { if(laserlevel < 3 * W) { laserlevel += movementrate / 4; } } // Draw ship if(state == GAME_PLAY || state == GAME_PAUSED || state == DEMO) { draw_ship(surf_screen); // Create more engine dots comin out da back if(state == GAME_PAUSED) { create_engine_dots(87); } else { create_engine_dots(250); } } // Draw all the rocks, in all states. display_rocks(surf_screen); // Draw all blubats display_blubats(surf_screen); // Draw the yellifish display_yellifishs(yellifishs, surf_screen); switch (state) { case GAME_OVER: // If it's game over, show the game over graphic in the dead centre draw_gameover(fadetimer, game_over_data, surf_screen); fadetimer += movementrate / 1.0; break; case RESTART_GAME: case TITLE_PAGE: draw_titlepage(); break; case HIGH_SCORE_ENTRY: enter_highscore(); update_and_draw_scroller(highscore_scroller, surf_screen, movementrate); display_highscores(); break; case HIGH_SCORE_DISPLAY: display_highscores(); display_version_n_text(); break; case INFO_SCREEN: display_infoscreen(); display_version_n_text(); break; case GAME_PAUSED: draw_paused(surf_screen); break; case DEAD_PAUSE: case GAME_PLAY: // This many points per screen update. inc_score(0, 0, SCORE_INCREMENT_FACTOR); break; case DEMO: #if defined(DEBUG) { int i; for(i = 0; i < rockfree_space_num; ++i) { SDL_Rect rect = { xsize - 10, rockfree_space_mm[i].min, 9, rockfree_space_mm[i].max - rockfree_space_mm[i].min}; Uint32 col = i != rockfree_space_max ? SDL_MapRGB(surf_screen->format, 0xa8, 0x1, 0x22) : SDL_MapRGB(surf_screen->format, 0x8, 0xb1, 0x22); SDL_FillRect(surf_screen, &rect, col); } } #endif display_version_n_text(); break; case SETUP: //Not done here! assert(0); case QUIT_GAME: break; // handled below } if(state == GAME_PLAY || state == DEMO) { // Show the freaky shields if((initialshield > 0) || (shieldsup && shieldlevel > 0)) { draw_ship_shield(surf_screen); } else { // When the shields are off, check that the black points // on the ship are still black, and not covered up by rocks bang = ship_check_collision(surf_screen); } handle_powerups(shieldsup); } // Draw all the little ships if(state == GAME_PLAY || state == DEAD_PAUSE || state == GAME_OVER || state == DEMO) { draw_little_ships(nships, surf_screen); // Show the shield gauge showgauge(10, surf_gauge_shield, shieldlevel / (3 * W)); // Show the laser gauge showgauge(200, surf_gauge_laser, laserlevel / (3 * W)); } #ifdef DEBUG //printf("last_ticks=%08X ticks_since_last=%02X movementrate=%10.4e\n", last_ticks, ticks_since_last, movementrate); char tempbuf[80]; sprintf(tempbuf, "state_timeout=%g", state_timeout); PutString(surf_screen, 0, 0, tempbuf); #endif // Always draw the last score i = xsize - 250; snprintf(topline, sizeof(topline), "Score: %ld", score); PutString(surf_screen, i, 30, topline); snprintf(topline, sizeof(topline), "Level: %d", (int) level); PutString(surf_screen, i, 50, topline); // Update the surface SDL_Flip(surf_screen); return bang; } /*! \brief called if ship was hit */ void crash_boom_bang() { if(oss_sound_flag) { // Play the explosion sound play_sound(0); } if(state != DEMO) { way_of_the_exploding_ship(); if(--nships <= 0) { state = GAME_OVER; state_timeout = 200.0; fadetimer = 0.0; faderate = movementrate; /* Otherwise if level is >x.98 and smaller then x+1 the * function draw_infinite_black() will cause problems. It will * loop the sound and will not black the background. */ level = floorf(level); //Remove blubats deactivate_all_blubats(); //Remove yellifish deactivate_all_yellifish(yellifishs); } else { state = DEAD_PAUSE; state_timeout = 120.0; } } } /* Subsystems [Loki Games, Programming Linux Games, No Starch Press, p 15, 2001]: Keyboard Mouse Input Subsystem Game Pad Network Subsystem LAN or Internet Update Subsystem 3D Hardware / Framebuffer Display Subsystem Audio Subsystem Sound Card Figure 1–1: A typical game loop */ /*! \brief Prepare ship for start. * * This function is called before the game begins. It deactivates all * enemies, resets the level, and sets the game-play state. */ void ready_for_takeoff(void) { deactivate_greeblies(); deactivate_all_blubats(); deactivate_all_yellifish(yellifishs); reset_rocks(); level = 1; last_levelup_snd = 0; state = GAME_PLAY; play_tune(1); sfx_enabled = 1; //Now we want all the SFXs! play_sound(4); reset_ship_state(); } /*! \brief perform the demo feat * * The ship is moved into the biggest available space between the * rocks. In debug mode bars visualize the available spaces. Shields * are avtivated if the rocks are too close. * * \param inputstate pointer the the input state */ void perform_demonstration(inputstate_t *inputstate) { int i, j; rockfree_space_num = 1; rockfree_space_mm[0].min = 0; rockfree_space_mm[0].max = ysize; for(i = 0; i < MAX_ROCKS; ++i) { if(rock[i].active && rock[i].x + get_rock_surface(i, 0)->w > shipdata.xship) { int y = rock[i].y; int Y = rock[i].y + get_rock_surface(i, 0)->h; for(j = 0; j < rockfree_space_num; ++j) { if(y > rockfree_space_mm[j].min && Y < rockfree_space_mm[j].max) { rockfree_space_mm[rockfree_space_num] = rockfree_space_mm[j]; rockfree_space_mm[j].max = y; rockfree_space_mm[rockfree_space_num].min = Y; ++rockfree_space_num; break; } else if(y > rockfree_space_mm[j].min && y < rockfree_space_mm[j].max) { rockfree_space_mm[j].max = y; break; } else if(Y > rockfree_space_mm[j].min && Y < rockfree_space_mm[j].max) { rockfree_space_mm[j].min = Y; } if((rockfree_space_mm[j].max - rockfree_space_mm[j].min) < 10 && rockfree_space_num > 0) { rockfree_space_mm[j] = rockfree_space_mm[rockfree_space_num--]; } } } } for(i = 0, j = 0; j < rockfree_space_num; ++j) { if(rockfree_space_mm[j].max - rockfree_space_mm[j].min >= rockfree_space_mm[i].max - rockfree_space_mm[i].min) i = j; } rockfree_space_max = i; inputstate->inputstate[SHIELD] = 1; for(j = 0; j < rockfree_space_num; ++j) { if(shipdata.yship >= rockfree_space_mm[j].min && shipdata.yship + surfaces_ship->surfaces[0]->h <= rockfree_space_mm[j].max) { inputstate->inputstate[SHIELD] = 0; break; } } inputstate->inputstate[LASER] = inputstate->inputstate[SHIELD]; if(shipdata.yship < rockfree_space_mm[rockfree_space_max].min) { inputstate->inputstate[DOWN] = 1; } if(shipdata.yship > rockfree_space_mm[rockfree_space_max].max) { inputstate->inputstate[UP] = 1; } } /*! \brief Move the enemy game objects * * The enemy object are moved. This function is called once per * frame. Currently this includes the rocks, greeblies, blubats, and * yellifish. * * \param yelli Yellifish subsystem pointer * \param preyx x-position of prey * \param preyy y-position of prey */ void update_enemy_objects(yellifishsubsystem_t *yelli, float preyx, float preyy) { assert(yelli != NULL); // Move all the rocks. update_rocks(); // And now the greeblies. move_all_greeblies(); // Update blubats. move_all_blubats(); // Update yellifishs update_yellifishs(yelli, preyx, preyy); } /*! \brief Get/update the input state. * * This will get the newest input state, getting keyboard and joystick * input. * * \param inputstate pointer to inputstate structure to be filled * \return laserstatus 0=laser does not fire, 1=laser fires */ int get_input_state(inputstate_t *inputstate) { int laser = 0; if(state == GAME_PLAY || state == DEMO) { if(state != DEMO) get_joystick_input(inputstate); if(inputstate->inputstate[UP]) { shipdata.yvel -= 1.5 * movementrate; create_engine_dots2(5, 3); // Create engine dots out the side we're moving from } if(inputstate->inputstate[DOWN]) { shipdata.yvel += 1.5 * movementrate; create_engine_dots2(5, 1); } if(inputstate->inputstate[LEFT]) { shipdata.xvel -= 1.5 * movementrate; create_engine_dots2(5, 2); } if(inputstate->inputstate[RIGHT]) { shipdata.xvel += 1.5 * movementrate; create_engine_dots2(5, 0); } if(inputstate->inputstate[LASER]) { laser = 1; } } return laser; } /*! \brief game loop called once per frame * * This is the game loop where all the magic happens. This loop is * only left if state == QUIT_GAME or RESTART_GAME. * * \param game_over_data pointer to game-over structure * \return 0 == quit the game, 1 == restart game */ int gameloop(const GameOver_t *game_over_data) { inputstate_t inputstate; Uint8 *keystate; while(state != QUIT_GAME && state != RESTART_GAME) { update_movement_rate(); keystate = input_subsystem(&inputstate); handle_state_timeout(infoscreen_enabled); ingame_maybe_rock(); switch(state) { case TITLE_PAGE: // Before the rocks are drawn, the greeblies are shown playing amongst them. activate_one_greeblie(); // TODO: where is the prey? update_enemy_objects(yellifishs, 0, 0); // Move the powerup update_powerup(); update_sparkles(surf_screen); if((last_ticks / 5391) % 7 == 6) { //Rockmania! create_rock(); } break; case DEMO: perform_demonstration(&inputstate); //Fall through case DEAD_PAUSE: case GAME_PLAY: // Increase difficulty level += movementrate / 250; //Activate a blubat if necessary if(rnd() < (level - 5) / 797.141347 && ((int)level) % 5 != 0) { //Every 5th level no blubats activate_one_blubat(); } maybe_activate_yellifish(yellifishs, (int)level, xsize + 34, -24); //Update greeblies if(rnd() < .02 * level * movementrate) { activate_one_greeblie(); } update_enemy_objects(yellifishs, shipdata.xship, shipdata.yship - 87.8228228); // Move ship to new position ship_update_position(); // Move the powerup update_powerup(); update_sparkles(surf_screen); break; case GAME_OVER: if(keystate[SDLK_ESCAPE]) play_sound(SAMPLE_XBAD); //DANGER! Falls through! case INFO_SCREEN: case HIGH_SCORE_DISPLAY: case HIGH_SCORE_ENTRY: update_enemy_objects(yellifishs, xsize / 2, ysize); // Move ship to new position ship_update_position(); // Move the powerup update_powerup(); update_sparkles(surf_screen); break; case SETUP: /* * The ignore is necessary so that we do not switch back and * forth between the two. It can be removed later on(?). */ temporary_disable_key_input(); setuploop(); temporary_disable_key_input(); break; case RESTART_GAME: case GAME_PAUSED: case QUIT_GAME: break; } //Was the ship hit? if(draw(inputstate.inputstate[SHIELD], game_over_data) && (state == GAME_PLAY || state == DEMO)) { crash_boom_bang(); } if(keystate[SDLK_SPACE] && (state == HIGH_SCORE_DISPLAY || state == TITLE_PAGE || state == DEMO || state == INFO_SCREEN)) { ready_for_takeoff(); } laser = get_input_state(&inputstate); //Check for screen shot. if(state != HIGH_SCORE_ENTRY && inputstate.inputstate[SCREENSHOT]) { int ret; char buf[21]; sprintf(buf, "snapshot.%02hX.bmp", screenshot_number++); ret = SDL_SaveBMP(surf_screen, buf); fprintf(stderr, "Screenshot '%s' saved %s.\n", buf, ret == 0 ? "successfully" : "unsuccessfully(!)"); } } return state == RESTART_GAME ? 1 : 0; } void shutdown_subsystems() { int i; shutdown_greeblies(); shutdown_blubats(); shutdown_powerups(); shutdown_yellifish_subsystem(yellifishs); destroy_mood_item(); i = uiff_close(iff_ctx); assert(printf("close IFF context returned $%08"PRIx32"\n", i)); if(i) fprintf(stderr, "Error on closing IFF context!\n"); //We can free this safely as rockiff_name is either a result of strdup or NULL. free(rockiff_name); free(edition_name); } int main(int argc, char **argv) { int i, x; int force_intro = 0; GameOver_t game_over_data; assert(RD_VIDEO_BPP == 8 * sizeof(RD_VIDEO_TYPE)); oss_sound_flag = 1; load_setup(); while((x = getopt(argc, argv, "P:Ifwskh?x:y:")) >= 0) switch (x) { case 'P': rockiff_name = strdup(optarg); break; case 'I': force_intro = 1; break; case 'x': xsize = atoi(optarg); printf("xsize %d\n", xsize); break; case 'y': ysize = atoi(optarg); printf("ysize %d\n", ysize); break; case 's': oss_sound_flag = 0; break; case 'k': joystick_flag = 0; break; case 'f': opt_fullscreen = 1; break; case 'w': opt_fullscreen = 0; break; case '?': case 'h': printf("Rock Dodgers\n" " -h This help message\n" " -f Full screen\n" " -w Window mode\n" " -x xsize\n" " -y ysize\n" " -k Keyboard only - disable joystick\n" " -s Silent mode (no sound)\n" " -P parameter file\n" " -I force intro\n" ); exit(0); break; } initrnd(); if(init(&game_over_data)) { printf("Cannot start: '%s'\n", initerror); return 1; } if((optind < argc) && (perform_a_sekrit_test(argv[optind]) != 0)) { //A non option argument was given! printf("Testing for %lu ticks.\n", (unsigned long int)SDL_GetTicks()); } else { play_intro(force_intro, oss_sound_flag, *iff_ctx); //Sometimes the game slips directly from intro to gameplay if space was pressed. last_ticks = SDL_GetTicks(); temporary_disable_key_input(); if(oss_sound_flag) play_tune(0); while(1) { if(restart_game() != 0) { break; //We are gone now... } i = gameloop(&game_over_data); if(i == 0) { break; } else if(i == 1) { if(!set_video_mode()) { fprintf(stderr, "Setting video mode (%d, %d) failed!\n", xsize, ysize); break; } if(restart_game() != 0) { fprintf(stderr, "Cannot start: '%s'\n", initerror); break; } } SDL_Delay(1000); } } shutdown_subsystems(); return 0; } rockdodger-1.1.4/sekrit_lab.h0000644000175000017500000000033713706632107016434 0ustar krawczykkrawczyk#ifndef __SEKRIT_LAB_H__2014 #define __SEKRIT_LAB_H__2014 /*! \brief Perform one of the tests. * * For debugging only! * * \return 0 = no valid test found, otherwise 1 */ int perform_a_sekrit_test(char *arg); #endif rockdodger-1.1.4/greeblies.c0000644000175000017500000001624713706632107016260 0ustar krawczykkrawczyk#include "sparkles.h" #include "datafun.h" #include "greeblies.h" #include "guru_meditation.h" #include "highscore_io.h" #include "random_gen.h" #include "rocks.h" #include "globals.h" #include "ship.h" #include "sound.h" #include #include #include #include #define GREEBLIE_DATA_SIZE (sizeof(struct greeble) * MAX_GREEBLES) struct greeble *the_greeblies; // THE GREEBLIES sdl_surfaces_t *surf_greeblies; // The images void deactivate_greeblies() { unsigned int i; for(i = 0; i < MAX_GREEBLES; i++) the_greeblies[i].active = 0; for(i = 0; i < MAX_ROCKS; i++) rock[i].greeb = 0; } void *init_greeblies() { #ifdef DEBUG FILE *f; char debugname[] = "/tmp/rockdodger$greeblies.XXXXXX"; if(mkstemp(debugname) == -1) { perror("No mkstemp"); return NULL; } f = fopen(debugname, "w+"); if(f == NULL) { perror("no tmpfile"); return f; } if(ftruncate(fileno(f), GREEBLIE_DATA_SIZE) == -1) return NULL; the_greeblies = mmap(NULL, GREEBLIE_DATA_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fileno(f), 0); printf("init_greeblies(): the_greeblies=%p f=%p, sizeof=$%04lx\n", the_greeblies, f, (unsigned long)GREEBLIE_DATA_SIZE); fclose(f); #else the_greeblies = malloc(GREEBLIE_DATA_SIZE); #endif if(the_greeblies == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_BootStrap | GM_GE_NoMemory | GURU_SEC_greeblies, &init_greeblies); } else { deactivate_greeblies(); // Load all the available greeblies if((surf_greeblies = load_images_ck("greeblie%d.bmp", 0, 0, 255)) == NULL) return NULL; if(surf_greeblies->num_surfaces == 0) return NULL; } memset(the_greeblies, 0, GREEBLIE_DATA_SIZE); return the_greeblies; } void shutdown_greeblies() { assert(the_greeblies != NULL); #ifdef DEBUG munmap(the_greeblies, GREEBLIE_DATA_SIZE); #else free(the_greeblies); #endif the_greeblies = NULL; } void activate_greeblie(struct greeble *g) { int j; if(g->active) guru_meditation(GM_FLAGS_RECOVERY, GM_GE_BadParm | GURU_SEC_greeblies, &activate_greeblie); /* Choose an active rock to become attracted to. If there are no * such available rocks in the first 14.3% of spots we search, then * give up without activating any greeblies at all. * * As the rocks are quite fast usually we do not use up all the * greeblie slots. If MAX_ROCKS rocks would be on the screen we * really get a greeblie mania. */ for(j = 0; j < (MAX_ROCKS / 7); j++) { int i = rnd() * MAX_ROCKS; if(rock[i].active && rock[i].greeb == 0 && 4 * rock[i].x > 3 * xsize) { // Create a new greeb, alive, flying, from the right side of the screen at a // random position. g->active = 1; g->landed = 0; g->x = xsize; g->y = rnd() * ysize; g->imgcnt = 0; // It's flying to this rock, and the rock knows it. g->target_rock_number = i; rock[i].greeb = g - the_greeblies; return; } } } void activate_one_greeblie() { assert(the_greeblies != NULL); int i; for(i = 0; i < MAX_GREEBLES; i++) { if(!the_greeblies[i].active) { activate_greeblie(&the_greeblies[i]); return; } } } void move_all_greeblies() { struct greeble *g; int i; assert(the_greeblies != NULL); for(i = 0; i < MAX_GREEBLES; i++) { g = &the_greeblies[i]; if(g->active) { if(g->landed) { g->boredom++; // Landed greebles may take it into their head to jump off their // rock and travel to a new one. Boredom can cause this, but a // ship getting close to their rock will do it too. //printf("%f %f %f\n",shipdata.yship,rock[g->target_rock_number].y,g->y); if(rnd() < (0.001 * (g->boredom - 100)) || (g->target_rock_number && fabsf(shipdata.yship - (rock[g->target_rock_number].y + g->y)) < 10 && (shipdata.xship < rock[g->target_rock_number].x))) { int j; for(j = 0; j < (MAX_ROCKS / 10) && g->landed; j++) { // Find a target int i = rnd() * MAX_ROCKS; int dx; struct rock_struct *r = &rock[i]; if(r->active && r->greeb == 0 && (dx = (rock[g->target_rock_number].x - r->x)) > 0 && dx < xsize / 3) { // Change the greeble coordinates to represent free // space coordinates g->x += rock[g->target_rock_number].x; g->y += rock[g->target_rock_number].y; rock[g->target_rock_number].greeb = 0; g->target_rock_number = i; r->greeb = g - the_greeblies; g->active = 1; g->landed = 0; } } // It's no problem if we don't find a target, just don't // bother leaving the current one. } // If the greeble leaves the left side of the screen, he's gone. if(rock[g->target_rock_number].x + g->x < 0) { g->active = 0; rock[g->target_rock_number].greeb = 0; } } else { float dx = g->x - rock[g->target_rock_number].x + 10; float dy = g->y - rock[g->target_rock_number].y + 10; float dist = sqrtf(dx * dx + dy * dy); // Greebles are attracted to rocks. If the greeble is within a // certain distance of the target rock, set it to 'landed' mode. if(dist < 10) { g->landed = 1; g->boredom = 0; // Change the greeble coordinates to represent the // offset from the host rock. g->x = dx - 10; g->y = dy - 10; } else { g->x -= 20 * movementrate * dx / dist; g->y -= 10 * movementrate * dy / dist; } } } } } void display_greeb(struct greeble *g, SDL_Surface * surf_screen) { static SDL_Rect src, dest; short int surf_greeblies_idx; const short int speed_divisor = 3; surf_greeblies_idx = movementrate; if(g->active) { if(g->landed) { dest.x = (int) (g->x + rock[g->target_rock_number].x); dest.y = (int) (g->y + rock[g->target_rock_number].y); } else { dest.x = (int) (g->x); dest.y = (int) (g->y); } src.x = 0; src.y = 0; if(g->imgcnt < 0) { surf_greeblies_idx = 0; } else { surf_greeblies_idx = g->imgcnt / speed_divisor; } if(surf_greeblies_idx < surf_greeblies->num_surfaces) { src.w = surf_greeblies->surfaces[surf_greeblies_idx]->w; src.h = surf_greeblies->surfaces[surf_greeblies_idx]->h; dest.w = src.w; dest.h = src.h; SDL_BlitSurface(surf_greeblies->surfaces[surf_greeblies_idx], &src, surf_screen, &dest); } } g->imgcnt += movementrate; if(g->imgcnt / speed_divisor >= surf_greeblies->num_surfaces) { g->imgcnt = -24; //A pause before replaying animation. } } void kill_greeb(int hitgreeb) { //The unfortunate greeblie. struct greeble *unfog; int r; assert(printf("kill_greeb(hitgreeb=%d):\n", hitgreeb)); assert(the_greeblies != NULL); assert(hitgreeb < MAX_GREEBLES); unfog = &the_greeblies[hitgreeb]; unfog->active = 0; if((r = unfog->target_rock_number)) { rock[r].greeb = 0; } if(unfog->landed) { play_sound(1 + (int) (rnd() * 3)); makebangdots((int) (unfog->x + rock[unfog->target_rock_number].x), (int) (unfog->y + rock[unfog->target_rock_number].y), 0, 0, surf_greeblies->surfaces[0], 15, 1); } else { makebangdots((int) (unfog->x), (int) (unfog->y), 0, 0, surf_greeblies->surfaces[0], 15, 1); play_sound(1 + (int) (rnd() * 3)); } assert(printf("\t unfog=%p target_rock=%d\n", unfog, r)); inc_score(unfog->x, unfog->y, GREEBLE_KILL_POINTS); } rockdodger-1.1.4/powerup.h0000644000175000017500000000326113706632107016015 0ustar krawczykkrawczyk#ifndef __POWERUP_H__2010 #define __POWERUP_H__2010 #include #include "datafun.h" #include "globals.h" typedef enum powerup_types { POWERUP_NONE, POWERUP_LASER, POWERUP_SHIELD, POWERUP_LIFE, POWERUP_MAXPOWERUP } powerup_types_t; //!< This structure holds all information about the powerup. typedef struct powerup { float x, y; //!< Position on the display float dx, dy; //!< velocity float countdown; //!< countdown before we get a new one... enum powerup_types active; //!< Is active? Which type? float img_ctr; //!< Counter of the current image surface } powerup_t; /*! \brief array with power surfaces * * Here we store all surfaces for the powerup animations. The order is * the same as the powerup numbers. */ extern sdl_surfaces_t *surf_powerups[POWERUP_MAXPOWERUP]; /*! \brief Get the current powerup type. * * If currently no powerup is active then this will return * POWERUP_NONE. * * \return current powerup */ powerup_types_t get_current_powerup(void); /*! \brief Initialise powerups. * * Initialises the powerups. Must be called before all other * functions. * * \returns pointer to the powerup or NULL on error */ powerup_t *init_powerup(); void display_powerup(SDL_Surface * surf_screen); void deactivate_powerup(); /*! Do per screen update for the powerup. * * If the powerup is active it will be moved. If it is inactive the * counter will be updated and if it is time a new powerup will be * created. */ void update_powerup(); /*! \brief Shut down the whole powerup engine. * * Make sure to stop using powerup functions after this. Otherwise you * will get, hmm, interesting results. */ void shutdown_powerups(); #endif rockdodger-1.1.4/mood_item.c0000644000175000017500000000603613706632107016266 0ustar krawczykkrawczyk#include #include "guru_meditation.h" #include "mood_item.h" #include "globals.h" #include "random_gen.h" #include "datafun.h" #if DEBUG > 0 #include #endif #define MOOD_ITEM_SPEED 0.04 #define MOOD_ITEM_TIME_GAP 29179 static sdl_surfaces_t* mood_item_surfaces; static SDL_Surface *current_item_surface = NULL; //NULL means none active SDL_Surface *mood_icon_surface = NULL; static float mood_item_x; static float mood_item_y; static Uint32 mood_item_last_ticks = 0; static Uint32 mood_item_time_gap = MOOD_ITEM_TIME_GAP; static float mood_item_speed = MOOD_ITEM_SPEED; /* * Parameters for the mood items are stored in the FORM.ROCK MOOD * chunk. The chunk has the following structure: * * 0000 UWORD mood item time-gap * 0002 UWORD mood item speed * 65536 / 4 - 1, default is $028B */ SDL_Surface *init_mood_item(uiff_ctx_t iff) { int32_t chunksize; unsigned int i; chunksize = uiff_find_chunk_wflags(&iff, MakeID('M', 'O', 'O', 'D'), IFF_FIND_REWIND); assert(printf("FORM.ROCK MOOD size = $%08X\n", chunksize)); if(chunksize >= 2) { mood_item_time_gap = read16(iff.f); printf("\ttime gap = $%04X\n", (unsigned)mood_item_time_gap); } if(chunksize >= 4) { i = read16(iff.f); mood_item_speed = i + 1; mood_item_speed *= 4.0 / 65536; printf("\titem speed = $%04X %12.6e\n", i, mood_item_speed); } else guru_meditation(GM_FLAGS_GREEN | GM_FLAGS_ABORTIFY, GM_SS_Graphics | GM_GE_BadParm | GURU_SEC_mood_item, &mood_item_speed); if((mood_item_surfaces = load_images_ck("mood_item.%02hx.png", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_mood_item, &init_mood_item); return NULL; } if((mood_icon_surface = load_image("icon.mood_item.png", 0, 255, 0)) == NULL) { destroy_mood_item(); guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_mood_item, &mood_icon_surface); return NULL; } return mood_icon_surface; } void destroy_mood_item(void) { assert(printf("destroy mood item %p %p\n", mood_icon_surface, mood_item_surfaces)); if(mood_icon_surface) SDL_FreeSurface(mood_icon_surface); mood_icon_surface = NULL; if(mood_item_surfaces) destroy_sdl_surfaces(mood_item_surfaces); mood_item_surfaces = NULL; } void draw_mood_item(SDL_Surface *target) { SDL_Rect dest; if(!current_item_surface && (rnd() < 1e-3) && (last_ticks - mood_item_last_ticks > mood_item_time_gap)) { current_item_surface = mood_item_surfaces->surfaces[(int)(mood_item_surfaces->num_surfaces * rnd())]; mood_item_x = xsize; mood_item_y = rnd() * (ysize - current_item_surface->h); } else if(current_item_surface) { /* We still need to check if an item is active. */ dest.x = mood_item_x; dest.y = mood_item_y; dest.w = current_item_surface->w; dest.h = current_item_surface->h; SDL_BlitSurface(current_item_surface, NULL, target, &dest); mood_item_x -= mood_item_speed; if(mood_item_x < -current_item_surface->w) { current_item_surface = NULL; mood_item_last_ticks = last_ticks; } } } rockdodger-1.1.4/config.h.in0000644000175000017500000000074213706632107016167 0ustar krawczykkrawczyk#ifndef __CONFIG_H__ #define __CONFIG_H__ #include //Always make sure that the next two variables are always in sync otherwise you will get trouble #define RD_VIDEO_BPP 16 //!< rockdodger video display bits per pixel #define RD_VIDEO_TYPE Uint16 //!< rockdodger video type for accessing the pixel #define GAMESDIR "@gamesdir@" #define DATADIR "@datadir@" #define PACKAGENAME "@PACKAGENAME@" //Current name of the package // Local Variables: // mode: c // End: #endif rockdodger-1.1.4/sound.c0000644000175000017500000000765213706632107015447 0ustar krawczykkrawczyk#include #include #include #include #include #include "datafun.h" #include "globals.h" #define CONDERROR(a) if ((a)) {fprintf(stderr,"Error: %s\n",SDL_GetError());exit(1);} #define NULLERROR(a) CONDERROR((a)==NULL) #define NUM_TUNES 5 #define SOUND_BANG 0 #define NUM_SOUNDS 12 int sfx_enabled; static Mix_Music *music[NUM_TUNES]; /*! \brief Fractions for calculating the real volume. * * Each of this values is multiplied times the global music volume * variable and then shifted seven bits to the right. With this we can * balance the music volumes a bit, as the song "front_1.mod" is quite * loud in comparison to the others. See play_tune(). */ static int music_volumefractions[NUM_TUNES] = { 128, 128, 128, 134, 71 }; static Mix_Chunk *wav[NUM_SOUNDS]; static int audio_rate; static Uint16 audio_format; static int audio_channels; static int playing = -1; const char *wav_file[] = { "booom.wav", "cboom.wav", "boom.wav", "bzboom.wav", "speedup.wav", /* 4 */ "drip.wav", /* 5 */ "fart.1.aiff", "fart.2.aiff", "fart.3.aiff", "fart.4.aiff", "shockwave-water.aiff" /* 10, from ST-45 */, "xbad.aiff" /* 11, modified from ST-15 */ }; const char *tune_file[] = { "magic.mod", "getzznew.mod", "4est_fulla3s.mod", "ramcharg.mod", "front_1.mod", NULL }; int init_sound() { // Return 1 if the sound is ready to roll, and 0 if not. int i; #ifdef DEBUG printf("Initialise sound\n"); #endif // Initialise output with SDL_mixer if(Mix_OpenAudio (MIX_DEFAULT_FREQUENCY, AUDIO_S16, MIX_DEFAULT_CHANNELS, 512) < 0) { fprintf(stderr, "Couldn't open SDL_mixer audio: %s\n", SDL_GetError()); return 0; } // What kind of sound did we get? Ah who cares. As long as it can play // some basic bangs and simple music. Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels); printf("Opened audio at %d Hz %d bit %s\n", audio_rate, (audio_format & 0xFF), (audio_channels > 1) ? "stereo" : "mono"); // Preload all the tunes into memory for(i = 0; i < NUM_TUNES; i++) { const char *tune_name = tune_file[i]; #ifdef DEBUG printf("Loading tune '%s'.\n", load_file(tune_name)); #endif if(tune_name == NULL) { fprintf(stderr, "We are at tune %d and got a NULL pointer.\nBlack hole encountered and can not reach the event horizon...\n", i); break; } if(!(music[i] = Mix_LoadMUS(load_file(tune_name)))) { printf("Failed to load '%s'.\n", load_file(tune_name)); } } // Preload all the wav files into memory for(i = 0; i < NUM_SOUNDS; i++) { wav[i] = Mix_LoadWAV(load_file(wav_file[i])); if(wav[i] == NULL) { fprintf(stderr, "Error while loading '%s'.\n", wav_file[i]); } else { #ifdef DEBUG printf("i=$%02x name='%s'\n", i, wav_file[i]); #endif } } sfx_enabled = 1; return 1; } void play_sound(int i) { #ifdef DEBUG int uc = -1; //used channel #endif if(sfx_enabled) { if(i >= NUM_SOUNDS) fprintf(stderr, "Sound number %d is >= than %d!\n", i, NUM_SOUNDS); #ifdef DEBUG uc = Mix_PlayChannel(-1, wav[i], 0); #else (void) Mix_PlayChannel(-1, wav[i], 0); #endif } #ifdef DEBUG printf("play sound %d on first free channel (%d)\n", i, uc); #endif } void play_tune(int i) { int vol; if(playing == i) return; if(playing) { Mix_FadeOutMusic(15); #ifdef DEBUG printf("Stop playing %d\n", playing); #endif } if(i >= NUM_TUNES || music[i] == NULL) return; //Illegal song number. #ifdef DEBUG printf("Play music %d\n", i); printf("volume %d fraction %d\n", music_volume, music_volumefractions[i]); #endif Mix_FadeInMusic(music[i], -1, 20); vol = (music_volumefractions[i] * music_volume) >> 7; Mix_VolumeMusic(vol); playing = i; } /* * * The init_sound() routine is called first. * The play_sound() routine is called with the index number of the sound we wish to play. * The play_tune() routine is called with the index number of the tune we wish to play. * */ rockdodger-1.1.4/game_state.c0000644000175000017500000000411113706632107016413 0ustar krawczykkrawczyk#include #include "game_state.h" #include "globals.h" #include "highscore_io.h" #include "ship.h" #include "sound.h" void dead_pause() { play_tune(1); initialshield = 150; shipdata.xship = 10; shipdata.yship = ysize / 2; shipdata.xvel = 2; shipdata.yvel = 0; shieldlevel = 3 * W; laserlevel = 3 * W; } void handle_state_timeout(int infoscreen_enabled) { //Ignore any state timeout in GAME PLAY mode. if(state == GAME_PLAY) return; // Count down the game loop timer, and change state when it gets to zero or less; if((state_timeout -= movementrate * 3) < 0) { switch (state) { case DEAD_PAUSE: // Create a new ship and start all over again state = GAME_PLAY; dead_pause(); break; case GAME_OVER: state = HIGH_SCORE_ENTRY; game_over(); break; case HIGH_SCORE_DISPLAY: if(infoscreen_enabled) { state = INFO_SCREEN; state_timeout = 593.0002; } else { state = TITLE_PAGE; state_timeout = 500.0; } break; case INFO_SCREEN: state = TITLE_PAGE; state_timeout = 500.0; break; case HIGH_SCORE_ENTRY: // state = TITLE_PAGE; // play_tune(1); // state_timeout=100.0; break; case TITLE_PAGE: state = DEMO; state_timeout = 400.0; sfx_enabled = 0; reset_ship_state(); level = 0; break; case DEMO: state = HIGH_SCORE_DISPLAY; state_timeout = 242.365; break; case SETUP: state = TITLE_PAGE; state_timeout = 500.0; break; case GAME_PLAY: case RESTART_GAME: assert(0); //Never happens. break; case GAME_PAUSED: case QUIT_GAME: break; } } } void pausegame() { switch(state) { case GAME_PLAY: state = GAME_PAUSED; break; case GAME_PAUSED: state = GAME_PLAY; break; default: assert(0); } } void reset_ship_state() { nships = 4; clear_score(); shipdata.xvel = 0; shipdata.yvel = 0; shipdata.xship = 10; shipdata.yship = ysize / 2; shieldlevel = 3 * W; laserlevel = 3 * W; initialshield = 150; } rockdodger-1.1.4/input_functions.h0000644000175000017500000000323313706632107017542 0ustar krawczykkrawczyk#ifndef __INPUT_FUNCTIONS_H_2013__ #define __INPUT_FUNCTIONS_H_2013__ #include #define JOYSTICK_DEADZONE 1024 /* * The input states are names for mappings between input device states and game * inputs. */ enum inputstates { UP, DOWN, LEFT, RIGHT, LASER, SHIELD, FAST, NOFAST, SCREENSHOT, INPUT_SELECT, _INPUTSTATESEND }; #define NUM_INPUTS (_INPUTSTATESEND + 1) /*! \brief input state data * * This struct will hold all the information about input, e.g., * movement and laser and shields. */ typedef struct { int inputstate[NUM_INPUTS]; //!< The input states for each valid input } inputstate_t; extern int joystick_flag; //!< If == 1 then joystick is enabled. extern SDL_Joystick *joysticks[1]; //!< Joystick data /*! \brief input subsystem function * * This will call the get joystick/keyboard functions. * * \param inputstate Write current state there. * \return keyboard state for quick check of pressed keys */ Uint8 *input_subsystem(inputstate_t *inputstate); /*! \brief get the joystick input * * \param inputstate The input state to write the information to. * \return The modified inputstate (same as inputstate) */ inputstate_t *get_joystick_input(inputstate_t *inputstate); /*! \brief get the keyboard input * * The keyboad input is handled differently according to the current * game state... * * \param keystate current keyboard states * \param inputstate updated after call */ void get_keyboard_input(Uint8 *keystate, inputstate_t *inputstate); /*! \brief temporaryly disable keyboard input * * This function uses the global variable last_ticks. */ void temporary_disable_key_input(); #endif rockdodger-1.1.4/signal_handling.h0000644000175000017500000000010713706632107017431 0ustar krawczykkrawczyk#ifndef __SIGNAL_HANDLING_H__ void set_signalhandling_up(void); #endif rockdodger-1.1.4/u-iff.c0000644000175000017500000001112013706632107015306 0ustar krawczykkrawczyk#include "u-iff.h" #include #include #include #include uiff_ctx_t *uiff_new_ctx(FILE *f, uiff_ctx_t *ctx) { if(ctx == NULL) ctx = malloc(sizeof(uiff_ctx_t)); if(ctx) { memset(ctx, 0, sizeof(uiff_ctx_t)); ctx->f = f; //ctx->grbegin = 0; ctx->grend = LONG_MAX; ctx->grsz = INT32_MAX; } return ctx; } uiff_ctx_t *uiff_from_file(FILE *f, ID grID, ID subID) { uiff_ctx_t *ctx; ctx = calloc(sizeof(uiff_ctx_t), 1); if(ctx) { rewind(f); uiff_new_ctx(f, ctx); if(uiff_find_group_ctx(ctx, 0, grID, subID) >= 0) { } else { free(ctx); return NULL; } } return ctx; } int32_t uiff_close(uiff_ctx_t *ctx) { int ret; ret = fclose(ctx->f); free(ctx); if(ret != 0) return DOS_ERROR; return IFF_OKAY; } uint32_t read32(FILE *inf) { uint32_t u32 = 0; int c, i; for(i = 0; i < 4; ++i) { u32 <<= 8; c = fgetc(inf); //if(c == EOF) return SHORT_CHUNK; u32 |= c; } //if(u32 & 0x80808080) return -8; return u32; } uint16_t read16(FILE *inf) { uint16_t u16; int c; c = fgetc(inf); u16 = c << 8; c = fgetc(inf); u16 |= c; return u16; } int32_t uiff_find_chunk(FILE *inf, long length, ID ckID) { ID tmpid; int32_t size; long maxpos; maxpos = ftell(inf) + length; while(ftell(inf) < maxpos) { tmpid = read32(inf); if(feof(inf)) return SHORT_CHUNK; size = read32(inf); if(size < 0) return BAD_FORM; if(feof(inf)) return SHORT_CHUNK; if(ckID == 0 || tmpid == ckID) { return size; } fseek(inf, (size + 1) & ~1L, SEEK_CUR); } return NOT_IFF; } int32_t uiff_find_chunk_ctx(uiff_ctx_t *ctx, ID ckID) { int32_t size; long pos; pos = ftell(ctx->f); if(pos < ctx->grbgn || pos > ctx->grend) return CLIENT_ERROR; //fseek(ctx->f, ctx->grbgn, SEEK_SET); size = uiff_find_chunk(ctx->f, ctx->grsz, ckID); if(size >= 0) { pos = ftell(ctx->f); ctx->ckID = ckID; ctx->ckbgn = pos; ctx->ckend = pos + size; if(ctx->ckend > ctx->grend) { //Something went wrong! Chunk end is after group end. size = BAD_IFF; } } ctx->cksz = size; return size; } int32_t uiff_find_chunk_wflags(uiff_ctx_t *ctx, ID ckID, unsigned flags) { if(flags & IFF_FIND_REWIND) uiff_rewind_group(ctx); return uiff_find_chunk_ctx(ctx, ckID); } int32_t uiff_find_group(FILE *inf, long length, ID ckID, ID subID) { ID tmpid; int32_t size; long pos, maxpos; int found = 0; maxpos = ftell(inf) + length; while((pos = ftell(inf)) < maxpos) { size = uiff_find_chunk(inf, (maxpos - pos), ckID); if(size < 0) return size; if(size < 4) return BAD_FORM; if(ckID != 0) { found = 1; } else { //ckID = 0, find any group type fseek(inf, -8, SEEK_CUR); //Go back to ID tmpid = read32(inf); fseek(inf, 4, SEEK_CUR); //Skip size if(tmpid == FORM || tmpid == PROP || tmpid == LIST || tmpid == CAT) found = 1; } if(found) { tmpid = read32(inf); size -= 4; //Bytes left to read if(feof(inf)) return SHORT_CHUNK; if(tmpid == subID) { return size; } else found = 0; } fseek(inf, size, SEEK_CUR); } return NOT_IFF; } int32_t uiff_find_group_ctx(uiff_ctx_t *ctx, unsigned flags, ID ckID, ID subID) { int32_t size; long pos; if(flags & IFF_FIND_REWIND) uiff_rewind_group(ctx); pos = ftell(ctx->f); //Am I within a group? if(pos < ctx->grbgn || pos > ctx->grend) return CLIENT_ERROR; //fseek(ctx->f, ctx->grbgn, SEEK_SET); size = uiff_find_group(ctx->f, ctx->grsz, ckID, subID); if(size >= 0) { pos = ftell(ctx->f); ctx->grID = ckID; ctx->grsID = subID; ctx->grbgn = pos; ctx->grend = pos + size; ctx->grsz = size; ctx->ckID = 0; //We have no current chunk, set everything to zero/default. ctx->ckbgn = 0; ctx->ckend = 0; ctx->cksz = -1; } ctx->grsz = size; return size; } void *uiff_reada_chunk_ctx(uiff_ctx_t *ctx) { size_t bytes_read; void *ptr = NULL; long pos = ftell(ctx->f); if(pos >= ctx->grbgn && pos < ctx->grend && ctx->cksz > 0) { //We actually have to read something ptr = malloc(ctx->cksz); if(ptr) { bytes_read = fread(ptr, 1, ctx->cksz, ctx->f); if(bytes_read < ctx->cksz) { free(ptr); return NULL; // This is bad } ctx->last_data = ptr; } } return ptr; } int32_t uiff_skip(uiff_ctx_t *ctx) { long pos = ftell(ctx->f); if(pos < ctx->ckbgn || pos >= ctx->ckend) return CLIENT_ERROR; fseek(ctx->f, ctx->ckend, SEEK_SET); return (int32_t)(ctx->ckend - pos); } void uiff_rewind_group(uiff_ctx_t *ctx) { fseek(ctx->f, ctx->grbgn, SEEK_SET); } rockdodger-1.1.4/SFont.c0000644000175000017500000001675713706632107015356 0ustar krawczykkrawczyk#include #include "SFont.h" #include "string.h" SFont_FontInfo InternalFont; int alpha = 127; int font_height; SDL_Surface *Back = NULL; char tmp[1024]; Uint32 GetPixel(SDL_Surface * Surface, Sint32 X, Sint32 Y) { Uint8 *bits; Uint32 Bpp; if(X < 0) puts ("SFONT ERROR: x too small in GetPixel. Report this to "); if(X >= Surface->w) puts ("SFONT ERROR: x too big in GetPixel. Report this to "); Bpp = Surface->format->BytesPerPixel; bits = ((Uint8 *) Surface->pixels) + Y * Surface->pitch + X * Bpp; // Paint the walls with the fresh blood of your enemies // Get the pixel switch (Bpp) { case 1: return *((Uint8 *) Surface->pixels + Y * Surface->pitch + X); break; case 2: return *((Uint16 *) Surface->pixels + Y * Surface->pitch / 2 + X); break; case 3:{ // Format/endian independent Uint8 r, g, b; r = *((bits) + Surface->format->Rshift / 8); g = *((bits) + Surface->format->Gshift / 8); b = *((bits) + Surface->format->Bshift / 8); return SDL_MapRGB(Surface->format, r, g, b); } break; case 4: return *((Uint32 *) Surface->pixels + Y * Surface->pitch / 4 + X); break; } return -1; } void InitFont2(SFont_FontInfo * Font) { int x = 0, i = 0; if(Font->Surface == NULL) { printf("The font has not been loaded!\n"); exit(1); } while(x < Font->Surface->w) { if(GetPixel(Font->Surface, x, 0) == SDL_MapRGB(Font->Surface->format, 255, 0, 255)) { Font->CharPos[i++] = x; while((x < Font->Surface->w - 1) && (GetPixel(Font->Surface, x, 0) == SDL_MapRGB(Font->Surface->format, 255, 0, 255))) x++; Font->CharPos[i++] = x; } x++; } Font->h = Font->Surface->h; font_height = Font->h; SDL_SetColorKey(Font->Surface, SDL_SRCCOLORKEY, GetPixel(Font->Surface, 0, Font->Surface->h - 1)); } void InitFont(SDL_Surface * Font) { InternalFont.Surface = Font; InitFont2(&InternalFont); } int SFont_wide(const char *text) { int i = 0, xwide = 0; int ofs; SFont_FontInfo *Font = &InternalFont; while(text[i]) { if(text[i] == ' ') { xwide += (int) (Font->CharPos[2] - Font->CharPos[1]); } else { ofs = (text[i] - 33) * 2 + 1; xwide += (int) (Font->CharPos[ofs + 1] - Font->CharPos[ofs]); } i++; } return xwide; } int SFont_height() { return InternalFont.Surface->h - 1; } void PutString2(SDL_Surface * Surface, SFont_FontInfo * Font, int x, int y, const char *text) { int ofs; int i = 0; SDL_Rect srcrect, dstrect; while(text[i]) { if(text[i] == ' ') { x += Font->CharPos[2] - Font->CharPos[1]; } else { // printf("-%c- %c - %u\n",228,text[i],text[i]); ofs = (text[i] - 33) * 2 + 1; //printf("printing %c %d\n",text[i],ofs); srcrect.w = dstrect.w = (Font->CharPos[ofs + 2] + Font->CharPos[ofs + 1]) / 2 - (Font->CharPos[ofs] + Font->CharPos[ofs - 1]) / 2; srcrect.h = dstrect.h = Font->Surface->h - 1; srcrect.x = (Font->CharPos[ofs] + Font->CharPos[ofs - 1]) / 2; srcrect.y = 1; dstrect.x = x - (float) (Font->CharPos[ofs] - Font->CharPos[ofs - 1]) / 2; dstrect.y = y; //SDL_SetAlpha ( Font->Surface, SDL_SRCALPHA, 127); SDL_BlitSurface(Font->Surface, &srcrect, Surface, &dstrect); x += Font->CharPos[ofs + 1] - Font->CharPos[ofs]; } i++; } } // Return a new surface, with the text on it. // This surface is new, fresh, and must eventually be freed. // Create the new surface with the same colour system as a parent surface. SDL_Surface *new_Surface_PutString(SDL_Surface * parent, const char *text) { Uint32 rmask = parent->format->Rmask; Uint32 gmask = parent->format->Gmask; Uint32 bmask = parent->format->Bmask; Uint32 amask = parent->format->Amask; Uint32 bytesperpixel = parent->format->BytesPerPixel; return SDL_CreateRGBSurface(SDL_SWSURFACE, SFont_wide(text), SFont_height(), bytesperpixel, rmask, gmask, bmask, amask); } void PutString(SDL_Surface * Surface, int x, int y, const char *text) { PutString2(Surface, &InternalFont, x, y, text); } int TextWidth2(SFont_FontInfo * Font, char *text) { int x = 0, i = 0; unsigned char ofs = 0; while(text[i] != '\0') { if(text[i] == ' ') { x += Font->CharPos[2] - Font->CharPos[1]; i++; } else { ofs = (text[i] - 33) * 2 + 1; x += Font->CharPos[ofs + 1] - Font->CharPos[ofs]; i++; } } return x + Font->CharPos[ofs + 2] - Font->CharPos[ofs + 1]; } int TextWidth(char *text) { return TextWidth2(&InternalFont, text); } void TextAlpha(int a) { alpha = a; } void XCenteredString2(SDL_Surface * Surface, SFont_FontInfo * Font, int y, char *text) { PutString2(Surface, &InternalFont, Surface->w / 2 - TextWidth(text) / 2, y, text); } void XCenteredString(SDL_Surface * Surface, int y, char *text) { XCenteredString2(Surface, &InternalFont, y, text); } void clearBuffer() { SDL_Event event; // Delete the event buffer while(SDL_PollEvent(&event)); // start input SDL_EnableUNICODE(1); } int SFont_Input2(SDL_Surface * Dest, SFont_FontInfo * Font, int x, int y, int PixelWidth, char *text) { SDL_Event event; SDL_Rect rect; int ofs = (text[0] - 33) * 2 + 1; int leftshift; int ch = 0; //Fixes a warning: may be used unintialised. char *sptr; if(ofs < 0) { leftshift = 0; } else { leftshift = (Font->CharPos[ofs] - Font->CharPos[ofs - 1]) / 2; } rect.x = x - leftshift; rect.y = y; rect.w = PixelWidth; rect.h = Font->Surface->h; //SDL_SetAlpha (Dest, SDL_SRCALPHA, 127); SDL_BlitSurface(Dest, &rect, Back, NULL); sprintf(tmp, "%s_", text); PutString2(Dest, Font, x, y, tmp); SDL_UpdateRect(Dest, x - leftshift, y, PixelWidth, Font->h); while(SDL_PollEvent(&event) && event.type == SDL_KEYDOWN) { // Find the character pressed ch = event.key.keysym.unicode; // If the character is illegal, we PASS IT THROUGH TO APPEND TO THE // STRING ANYWAY! Boy are we dumb sometimes. This character should // first be checked to see if it's in the list of characters supported // by this font. // TODO // If backspace and the length of the text > 0, reduce the string by 1 character if(ch == '\b') { if(strlen(text) > 0) { text[strlen(text) - 1] = '\0'; } } else { for(sptr = text; *sptr; ++sptr) ; //Find end of string. *sptr++ = ch; *sptr++ = '\0'; } // If the new character would exceed the allowed width if(TextWidth2(Font, text) > PixelWidth) { text[strlen(text) - 1] = '\0'; } //SDL_SetAlpha (Back, SDL_SRCALPHA, 127); SDL_BlitSurface(Back, NULL, Dest, &rect); PutString2(Dest, Font, x, y, text); if(ofs > 0) { SDL_UpdateRect(Dest, x - (Font->CharPos[ofs] - Font->CharPos[ofs - 1]) / 2, y, PixelWidth, Font->Surface->h); } } if(ch == SDLK_RETURN) { SDL_FreeSurface(Back); Back = NULL; text[strlen(text)-1]='\0'; //Remove the CR character as this produces weird effects. return 1; } else return 0; } int SFont_Input(SDL_Surface * Dest, int x, int y, int PixelWidth, char *text) { if(Back == NULL) { Back = SDL_AllocSurface(Dest->flags, PixelWidth, InternalFont.h, Dest->format->BitsPerPixel, Dest->format->Rmask, Dest->format->Gmask, Dest->format->Bmask, 0); } return SFont_Input2(Dest, &InternalFont, x, y, PixelWidth, text); // ph: // Returns 1 when the return key is pressed // Returns 0 when nothing exceptional happened } rockdodger-1.1.4/rockdodger.desktop0000644000175000017500000000043713706632107017663 0ustar krawczykkrawczyk[Desktop Entry] Categories=Game;ArcadeGame; Comment=Addictive rock-dodging greeblie-killing platform game Exec=rockdodger GenericName=Addictive rock-dodging greeblie-killing platform game Icon=rockdodger Name=Rock Dodger StartupNotify=false Terminal=false Type=Application Version=1.0 rockdodger-1.1.4/intro.c0000644000175000017500000002267713706632107015456 0ustar krawczykkrawczyk#include "intro.h" #include "datafun.h" #include "guru_meditation.h" #include "random_gen.h" #include "SFont.h" #include #include #include #include #include #include #include #include #include "sparkles.h" #include "blubats.h" #include "display_subsystem.h" #include "engine_exhaust.h" #include "greeblies.h" #include "globals.h" #include "ship.h" #include "sound.h" /* * FORM.ROCK FORM.INTR is a FORM chunk with further data for the intro. * * . . TEXT Chunk with further text for the scroller. * */ static struct { SDL_Color min; SDL_Color max; } minmaxcolors[NUM_COPPERBARS] = { { { 0x30, 0, 0 }, { 0xcf, 0x40, 0x4f } }, //Red { { 0, 0x10, 0 }, { 0x11, 0xc0, 0xa } }, //Green { { 0, 0, 0x40 }, { 0x7, 0x8, 0xaf } }, //Blue { { 0xa, 0x1a, 0x13 }, { 0x12, 0xcd, 0xad } }, //Cyan { { 1, 1, 1 }, { 0xc0, 0xc1, 0xc0 } }, //Gray { { 0x10, 0x10, 0 }, { 0xc0, 0xbf, 0xa } } //Yellow }; char intro_default_text[] = "Exploding Rock Productions presents \"Rock Dodger\" V"VERSION". " "Press any key to continue! " " %s " "Credits: Coding by Paul Holt, RPK. Music by Jack Beatmaster, Roz, Strobo, zake. Gfx: Paul Holt, RPK. Font: ripped from lib-sge. " " A little bit of history: In 1984 Paul Holt programmed the first version of the game in his computer science class. The game was later (in 2001) ported to Linux and SDL. In December 2010 I (RPK) joined the project and started cleaning up the code and added the eye blink to the greeblies. In 2015 we moved the main development site to https://bitbucket.org/rpkrawczyk/rockdodger. And here we are... Enjoy! " ; static char txtbuf[8001]; struct rockintro *init_intro(SDL_Surface *target, uiff_ctx_t *iff) { int i, j, x, y; int32_t chunksize; SDL_Color colors[16]; SDL_Surface *surf; char readbuf[sizeof(txtbuf) - sizeof(intro_default_text) - 3]; int xsize = target->w; struct rockintro *rockiptr = calloc(sizeof(struct rockintro), 1); if(rockiptr) { strcpy(txtbuf, "Intro data is kaputt... Game may be borked... "); chunksize = uiff_find_group_ctx(iff, IFF_FIND_REWIND, FORM, MakeID('I', 'N', 'T', 'R')); assert(printf("FORM.ROCK FORM.INTR size = $%08lX\n", (long)chunksize)); if(chunksize <= 0) { guru_meditation(GM_FLAGS_RECOVERY | GM_FLAGS_CHOICE | GM_FLAGS_ABORTIFY, GM_SS_BootStrap | GM_GE_OpenRes | GURU_SEC_intro, &init_intro); } else { chunksize = uiff_find_chunk_wflags(iff, MakeID('T', 'E', 'X', 'T'), IFF_FIND_REWIND); assert(printf(". . TEXT size = $%08lX\n", (long)chunksize)); if(chunksize > 0) { i = fread(readbuf, chunksize, 1, iff->f); if(i > 0 && i < sizeof(readbuf)) snprintf(txtbuf, sizeof(txtbuf), intro_default_text, readbuf); } else guru_meditation(GM_FLAGS_RECOVERY | GM_FLAGS_CHOICE | GM_FLAGS_ABORTIFY, GM_SS_BootStrap | GM_GE_IOError | GURU_SEC_intro, &init_intro); } if((surf = load_image("exploding_rock.png", 0, 0xff, 0)) != NULL) { rockiptr->intro_image = SDL_DisplayFormat(surf); SDL_FreeSurface(surf); } else return NULL; rockiptr->scroller = init_scroller(txtbuf, 440, 3.141, target->w); if(rockiptr->scroller == NULL) return NULL; for(i = 0; i < NUM_COPPERBARS; ++i) { rockiptr->positions[i] = 2 * M_PI / NUM_COPPERBARS * i; rockiptr->speeds[i] = 1.9 / 30.0; for(j = 0; j < 8; ++j) { SDL_Color col; unsigned u; u = (8 - j) * minmaxcolors[i].min.r; u += j * minmaxcolors[i].max.r; col.r = u / 8; u = (8 - j ) * minmaxcolors[i].min.g; u += j * minmaxcolors[i].max.g; col.g = u / 8; u = (8 - j ) * minmaxcolors[i].min.b; u += j * minmaxcolors[i].max.b; u /= 8; col.b = u; colors[j] = col; } surf = SDL_CreateRGBSurface(SDL_HWSURFACE, xsize, 16, 8, 0, 0, 0, 0); if(surf == NULL) return NULL; SDL_LockSurface(surf); SDL_SetColors(surf, colors, 0, 16); for(y = 0; y < 8; ++y) { for(x = 0; x < xsize; ++x) { Uint8 *pixels = surf->pixels; pixels[y * surf->w + x] = y; pixels[(15 - y) * surf->w + x] = y; } } SDL_UnlockSurface(surf); rockiptr->copperbars[i] = SDL_DisplayFormat(surf); SDL_SetAlpha(rockiptr->copperbars[i], SDL_SRCALPHA|SDL_RLEACCEL, 141); SDL_FreeSurface(surf); } } else { // No memory... guru_alert(GM_FLAGS_DEADEND, GM_SS_BootStrap | GM_GE_NoMemory | GURU_SEC_intro, &init_intro); } return rockiptr; } void fld_logo(struct rockintro *intro, SDL_Surface *target, float movementrate) { int rastline; SDL_Surface *lsurf = intro->intro_image; SDL_Rect r = { (target->w - 640) / 2, 0, 0, 0 }; SDL_Rect s = { 0, 0, lsurf->w, 1}; if(intro->fld_amplitude <= 0) { s.h = lsurf->h; SDL_BlitSurface(intro->intro_image, NULL, target, &r); } else { float phi = intro->fld_logophase; float tline = intro->fld_logo_wagging_amplitude * sinf(phi); float camp = intro->fld_amplitude; // cosine amplitude intro->fld_last_topline = (int)tline; for(rastline = 0; rastline < lsurf->h; ++rastline) { s.y = rastline; r.y = tline; SDL_BlitSurface(intro->intro_image, &s, target, &r); tline += 1 + camp + cosf(phi) * camp; phi += 1.0 / 200.0 * M_PI; } intro->fld_logophase += movementrate / 11; } } void update_and_draw_intro(struct rockintro *intro, SDL_Surface *target, float movementrate) { int i, j; float z_positions[NUM_COPPERBARS]; Sint16 y_positions[NUM_COPPERBARS]; int minimum = 0; SDL_Rect r = { 0, 0, 0, 0 }; for(i = 0; i < NUM_COPPERBARS; ++i) { y_positions[i] = sinf(intro->positions[i]) * 40 + 440; z_positions[i] = cosf(intro->positions[i]); intro->positions[i] += intro->speeds[i] * movementrate; } for(i = 0; i < NUM_COPPERBARS; ++i) { minimum = 0; for(j = 1; j < NUM_COPPERBARS; ++j) if(z_positions[j] < z_positions[minimum]) minimum = j; r.y = y_positions[minimum]; SDL_BlitSurface(intro->copperbars[minimum], NULL, target, &r); z_positions[minimum] = 666; } fld_logo(intro, target, movementrate); update_and_draw_scroller(intro->scroller, target, movementrate * 1.412); draw_sparkles(target); update_sparkles(target); } void shutdown_intro(struct rockintro *intro) { int i; for(i = 0; i < NUM_COPPERBARS; ++i) { SDL_FreeSurface(i[intro->copperbars]); } destroy_scroller(intro->scroller); SDL_FreeSurface(intro->intro_image); reset_sparkles(); free(intro); } void play_intro(int force, int oss_sound_flag, uiff_ctx_t iff) { SDL_Event event; int state; register int i; int last_state = -1; int running = 1; SDL_Surface *surf_screen = SDL_GetVideoSurface(); short deltah, heading = 0; float *fp; if(force == 0) { switch(opt_intro) { case 3: case 2: //Do not bug user again... opt_intro = 0; save_setup(); case 1: break; case 0: return; default: assert(0); return; } } struct rockintro *intro = init_intro(surf_screen, &iff); if(intro == NULL) { fprintf(stderr, "Can not initialise intro!\n"); return; } if(oss_sound_flag) play_tune(3); while(running) { while(SDL_PollEvent(&event) != 0) { if(event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_KEYDOWN) running = 0; } ticks_since_last = SDL_GetTicks() - last_ticks; last_ticks = SDL_GetTicks(); if(ticks_since_last > 200) { movementrate = 0; } else { movementrate = ticks_since_last / 50.0; } SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0, 0, 0)); update_and_draw_intro(intro, surf_screen, movementrate); state = (last_ticks / 0x1BC6) % 10; if(state != last_state) { switch(state) { case 6: shipdata.xship = -37; shipdata.yship = 225; break; case 5: shipdata.xship = -37; shipdata.yship = 370; break; case 1: shipdata.xship = -37; shipdata.yship = 80; break; case 3: while(activate_one_blubat()); shipdata.xship = xsize / 2; shipdata.yship = ysize + 42; break; } last_state = state; } SDL_LockSurface(surf_screen); draw_engine_dots(surf_screen); SDL_UnlockSurface(surf_screen); switch(state) { case 5: case 1: case 6: draw_ship(surf_screen); create_engine_dots(220); shipdata.xship += movementrate * 6.08 * surf_screen->w / 800.0; //Ship should have the same speed, regardless of the screen size. if(shipdata.xship > xsize + 40) shipdata.xship = -40; break; case 2: draw_ghostly_rock_dodger(surf_t_rock, surf_t_dodger); fadetimer += movementrate / 1.92; break; case 3: display_blubats(surf_screen); move_all_blubats(); break; case 4: draw_ghostly_rock_dodger(surf_t_rock, surf_t_dodger); fadetimer += movementrate / 1.41; break; case 7: case 8: deltah = (surf_screen->w - 640) / 2; i = intro->fld_last_topline; create_plumedots(7, 168 + deltah, i + 47, -heading, 4, 8); create_plumedots(7, surf_screen->w - 158 - deltah, i + 47, heading, 4, 8); heading += 2; break; case 9: fp = &intro->fld_logo_wagging_amplitude; if(*fp < 20) *fp += movementrate / 61.51; fp = &intro->fld_amplitude; if(*fp < 1.0 / 5.014847583) *fp += movementrate / 77.8111472142; break; } SDL_Flip(surf_screen); } init_engine_dots(); deactivate_all_blubats(); shutdown_intro(intro); fadetimer = 0; //Reset the fade timer as the title page will otherwise not begin correctly. See display_version_n_text(). } rockdodger-1.1.4/yellifish.h0000644000175000017500000001042713706632107016306 0ustar krawczykkrawczyk#ifndef __YELLIFISH_H_2014__ #define __YELLIFISH_H_2014__ #include #include "u-iff.h" #include "sprite.h" #define YELLIFISH_TENTACLESEGMENTS 16 #define YELLIFISH_TENTACLENO 4 #define YELLIFISH_MAXNUM 3 //!< maximum number of yellifish typedef struct Yellifish { float posx, posy; float velx, vely; float offset[YELLIFISH_TENTACLENO]; //!< offset in pixel for the tentacle animation unsigned char tentacleparts[YELLIFISH_TENTACLENO][YELLIFISH_TENTACLESEGMENTS]; //!< which tentaclepart float tspeed[YELLIFISH_TENTACLENO]; //!< speed for each tentacle float length; //!< length is the total length of the long tentacle short tentacle_active; //!< is the tentacle active? 0=no, 1=tentacle moving down, -1=tentacle moving up unsigned short partoffset[YELLIFISH_TENTACLENO]; //!< offset in the tentacleparts table short active; //!< this is > 0 if the yellifish is active, < 0 the yellifish is dying struct sprite ysprite; //!< yellifish sprite } yellifish_t; typedef struct Yellifishsubsystem { struct Yellifish yellifishs[YELLIFISH_MAXNUM]; int minimum_level; //!< minimum level before yellifish appear int level_modulo; //!< for checking level % level_modulo == 0 (only then yellifish do appear) float minimum_length; //!< minimum tentacle length float maximum_length; //!< maximum tentacle length float maximum_velocity; //!< maximum velovity component of yellifish float attack_distance; //!< if X-Distance smaller then attack prey float delta_velocity; //!< delta velocity per update float yelliprobability; //!< probability that a yellifish appears short headoffsetx, headoffsety; //!< offset between head image and tentacle images } yellifishsubsystem_t; /*! \brief initialise yellifish subsystem * * This loads the animation graphics, etc. After calling this function * init_yellifish() may be called. * * \return 0 on OK, != 0 on error */ yellifishsubsystem_t *init_yellifish_subsystem(uiff_ctx_t iff); /*! \brief Shutdown yellifish subsystem * * Shutdown subsystem and free system resources. * * \param yellifishs pointer to subsystem structure */ void shutdown_yellifish_subsystem(yellifishsubsystem_t *yellifishs); /*! \brief initialise a single yellifish * * Yellifish is initialised with some default values. Uses the random * number generator. * * \param ysys pointer to yellifish subsystem structure * \param yelli pointer to a yellifish structure * \param posx starting X-position * \param posy starting Y-position */ void init_yellifish(yellifishsubsystem_t *ysys, yellifish_t *yelli, int posx, int posy); /*! \brief activate a yellifish if conditions are right * * This function will create a new yellifish if there is a free slot * available and if the level modulo the level module is zero and a * random number is below the random number threshold. Of course the * minimum level needed is also taken into account. * * \param yelli pointer to yellifish subsystem * \param level current level as an int * \param x x-position of newly created yellfish * \param y y-position of newly created yellfish * \return NULL if no yellfish created or no more yellifish slots available, pointer to yellifish_t struct on success */ yellifish_t *maybe_activate_yellifish(yellifishsubsystem_t *yelli, int level, int x, int y); yellifish_t *activate_yellifish(yellifishsubsystem_t *yelli, int x, int y); /*! \brief yellifish display function * * This will also update the animation. * * \param ysys pointer to the yellifish subsystem struct * \param yelli pointer to a single yellifish * \param surf_screen display on which the yellifish is displayed */ void display_yellifish(yellifishsubsystem_t *ysys, yellifish_t *yelli, SDL_Surface *surf_screen); void display_yellifishs(yellifishsubsystem_t *yelli, SDL_Surface *surf_screen); /*! \brief update yellifish * * Update the yellifish positions. This means that the yellifish will follow its prey. * \param yelli Yellifish subsystem pointer * \param preyx x-position of prey * \param preyy y-position of prey */ void update_yellifishs(yellifishsubsystem_t *yelli, float preyx, float preyy); yellifish_t *check_yellifish_hit(yellifishsubsystem_t *yelli, float minlaserx, float maxlaserx, float lasery); void kill_yellifish(yellifish_t *yptr); void deactivate_all_yellifish(yellifishsubsystem_t *yelli); #endif rockdodger-1.1.4/spacedots.c0000644000175000017500000002077413706632107016304 0ustar krawczykkrawczyk#include "guru_meditation.h" #include "globals.h" #include "spacedots.h" #include "random_gen.h" #include #define MAX_CICADA_SPACEDOTS 0x0800 /*! \file spacedots.c * Space dots are the stars in the background. Currently there are two * different engines to draw all the stars. Constants will be read * from the IFF file. * * FORM ROCK Rockdodger iff file * . FORM SPDT space dots form * . . NDOT Number of space dots in the normal generation * engine. * * NDOT chunk * ---------- * * uint16 number of space dots (normal generation engine) */ /*! \brief Initialise space dots. * * The information is written into the spacedots_t union. * * \param surf_screen The surface which is displayed. * \param spacedots Structure to be initialised. * \param max_space_dots Number of spacedots to allocate. * \return 0 = failure, 1 = OK */ int init_space_dots(spacedots_t *spacedots, SDL_Surface *surf_screen, unsigned int max_space_dots) { int i, intensity; spacedots->num_spacedots = max_space_dots; spacedots->spacedots = malloc(sizeof(struct spacedot) * spacedots->num_spacedots); if(spacedots->spacedots == NULL) { fprintf(stderr, "Can not allocate space for %d spacedots!\n", spacedots->num_spacedots); return 0; } for(i = 0; i < spacedots->num_spacedots; i++) { float r = rnd_next_float(); // We are in init and can take our time. spacedots->spacedots[i].x = rnd() * (xsize - 5); spacedots->spacedots[i].y = rnd() * (ysize - 5) + 2.5; r = r * r; spacedots->spacedots[i].dx = -r * 4; // -1/((1-r)+.3); intensity = (int) (r * 180 + 50); spacedots->spacedots[i].color = SDL_MapRGB(surf_screen->format, intensity, intensity, intensity); #if DEBUG > 0 printf("r=%E spacedots->spacedots.dx=%E\n", r, spacedots->spacedots[i].dx); #endif } return 1; } unsigned short read_number_of_dots(uiff_ctx_t *iff) { unsigned short ndots = MAX_SPACE_DOTS; int32_t size = uiff_find_group_ctx(iff, IFF_FIND_REWIND, FORM, MakeID('S', 'P', 'D', 'T')); assert(printf("FORM.ROCK FORM.SPDT size = $%08lX\n", (unsigned long)size)); if(size >= 0) { if((size = uiff_find_chunk_ctx(iff, MakeID('N', 'D', 'O', 'T'))) >= 2) { //Chunk found and it is long enough... ndots = read16(iff->f); assert(printf("FORM.ROCK FORM.SPDT MDOT size = $%08lX ndot = $%04hX\n", (unsigned long)size, ndots)); } else { guru_meditation(GM_FLAGS_RECOVERY, GM_SS_BootStrap | GM_GE_BadParm | GURU_SEC_spacedots, &read_number_of_dots); } } else { guru_meditation(GM_FLAGS_RECOVERY, GM_SS_BootStrap | GM_GE_OpenLib | GURU_SEC_spacedots, &read_number_of_dots); } return ndots; } void draw_space_dots_pixel(spacedots_t *spacedots, SDL_Surface *surf_screen) { int i; RD_VIDEO_TYPE *rawpixel = (RD_VIDEO_TYPE *) surf_screen->pixels; assert(spacedots->type == 0); struct spacedot *sdot = spacedots->spacedots; assert(sdot != NULL); SDL_LockSurface(surf_screen); for(i = 0; i < spacedots->num_spacedots; ++i) { rawpixel[surf_screen->pitch / sizeof(RD_VIDEO_TYPE) * sdot[i].y + (int) (sdot[i].x)] = sdot[i].color; sdot[i].x += sdot[i].dx * movementrate; if(sdot[i].x < 0) sdot[i].x = xsize; } SDL_UnlockSurface(surf_screen); } /* * List of Prime Numbers up to 1000. * * 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, * 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, * 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, * 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, * 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, * 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, * 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, * 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, * 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, * 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, * 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, * 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, * 967, 971, 977, 983, 991, 997 */ int init_cicada_spacedots(spacedots_t *spacedots, SDL_Surface *surf_screen) { #ifdef DEBUG printf("Entering %s@%p.\n", __func__, &init_cicada_spacedots); #endif SDL_Surface *surf; int current_playfield, j, x, y; SDL_Color colors[256]; int widths[] = {307, 337, 349, 367, 373, 379, 383, 389}; #if (NUMBER_CICADA_PLAYFIELDS > 8) #error "Not enough primes!" #endif assert(surf_screen->w == xsize); assert(surf_screen->h == ysize); if((spacedots->cicadadots = malloc(sizeof(struct cicada_spacedots_playfield) * NUMBER_CICADA_PLAYFIELDS)) == NULL) return 0; spacedots->num_cicada_playfields = NUMBER_CICADA_PLAYFIELDS; /* Fill colors with colour information */ for(j = 0; j < 256; j++) { float jj = j / 255.0 * 180.0 + 40; colors[j].r = jj; colors[j].g = jj; colors[j].b = jj; } struct cicada_spacedots_playfield *cicada_spacedots_playfields = spacedots->cicadadots; for(current_playfield = 0; current_playfield < NUMBER_CICADA_PLAYFIELDS; ++current_playfield) { if((surf = SDL_CreateRGBSurface(SDL_HWSURFACE, widths[current_playfield], ysize, 8, 0, 0, 0, 0)) == NULL) return 0; #ifdef DEBUG printf("playfield %d at %p\n", current_playfield, surf); #endif SDL_LockSurface(surf); SDL_SetColors(surf, colors, 0, 256); cicada_spacedots_playfields[current_playfield].playfield = surf; cicada_spacedots_playfields[current_playfield].speed = current_playfield * .885 + .162; cicada_spacedots_playfields[current_playfield].pos = 0; unsigned char *pixels = surf->pixels; float maxcol = (float)(current_playfield + 1)/ NUMBER_CICADA_PLAYFIELDS; float mincol = (float)(current_playfield) / NUMBER_CICADA_PLAYFIELDS; #ifdef DEBUG printf("mincol=%e maxcol=%e\n", mincol, maxcol); #endif for(j = 0; j < MAX_CICADA_SPACEDOTS / (NUMBER_CICADA_PLAYFIELDS + 1); ++j) { x = rnd_next_float() * surf->w; y = rnd_next_float() * (ysize - 5) + 2.5; float r = (mincol + rnd_next_float() * (maxcol - mincol)); assert(r >= 0 && r < 1); pixels[y * surf->w + x] = 256 * r; } SDL_SetColorKey(surf, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(surf->format, 0, 0, 0)); SDL_UnlockSurface(surf); } return 1; } void draw_cicada_dots(spacedots_t *spacedots, SDL_Surface *surf_screen) { int i; float pos; SDL_Rect rect = { 0, 0, 0, 0 }; assert(spacedots->type == 1); for(i = 0; i < spacedots->num_cicada_playfields; ++i) { struct cicada_spacedots_playfield *playf = spacedots->cicadadots + i; for(pos = playf->pos; pos < xsize; pos += playf->playfield->w) { rect.x = pos; SDL_BlitSurface(playf->playfield, NULL, surf_screen, &rect); } if((playf->pos -= playf->speed * movementrate) < -playf->playfield->w) playf->pos = 0; } } spacedots_t *init_space_dots_engine(SDL_Surface *surf_screen, short type, uiff_ctx_t iff) { unsigned short number_of_dots; spacedots_t *spacedots = calloc(sizeof(spacedots_t), 1); int ret = 0; if(spacedots) { spacedots->type = type; switch(spacedots->type) { case 0: number_of_dots = read_number_of_dots(&iff); ret = init_space_dots(spacedots, surf_screen, number_of_dots); assert(spacedots->spacedots != NULL); assert(spacedots->num_spacedots == number_of_dots); break; case 1: ret = init_cicada_spacedots(spacedots, surf_screen); break; default: return NULL; } if(!ret) { #ifdef DEBUG fprintf(stderr, "Spacedot initialisation failed!\n"); #endif free(spacedots); spacedots = NULL; } } else { //We return NULL and the error is handled in main(). guru_alert(GM_FLAGS_DEADEND, GM_SS_Misc|GM_GE_NoMemory|GURU_SEC_spacedots, init_space_dots_engine); } return spacedots; } void draw_space_dots(spacedots_t *spacedots, SDL_Surface *surf_screen) { switch(spacedots->type) { case 0: draw_space_dots_pixel(spacedots, surf_screen); break; case 1: draw_cicada_dots(spacedots, surf_screen); break; default: assert(0); } } void destroy_space_dots(spacedots_t *spacedots) { //Null pointer is harmless... if(spacedots == NULL) return; switch(spacedots->type) { case 0: free(spacedots->spacedots); break; case 1: free(spacedots->cicadadots); break; case -1: //Do not care about double destroy... return; default: /* In debug mode please crash, otherwise just cross your fingers and hope for the best... */ assert(0); } spacedots->type = -1; free(spacedots); } rockdodger-1.1.4/Makefile0000644000175000017500000000720513706632107015605 0ustar krawczykkrawczyk# Rock Dodger! Avoid the rocks as long as you can! # Copyright (C) 2001- Paul Holt , # 2010- Robert P Krawczyk # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA profile=0 debug=0 VMAJOR=1 VMINOR=1 VRELEASE=4 VERSION=$(VMAJOR).$(VMINOR).$(VRELEASE) PACKAGENAME=rockdodger prefix = $(DESTDIR)/usr/local INSTALL=/usr/bin/install TMP=/tmp exec_prefix = $(prefix) datarootdir = $(prefix)/share datadir = $(datarootdir) bindir = $(exec_prefix)/bin docdir = $(datarootdir)/doc/$(PACKAGENAME) mandir = $(datarootdir)/man localstatedir = $(prefix)/var gamesdir = $(localstatedir)/games NEWD=$(PACKAGENAME)-$(VERSION) COMPILEDATE=$(shell date --date=@$${SOURCE_DATE_EPOCH:-$$(date +%s)} '+%Y-%m-%d') TARPKGNAME=$(NEWD).pkg.tgz OPTIONS=-DVERSION=\"$(VERSION)\" -DCOMPILEDATE=\"$(COMPILEDATE)\" -Wall `$(SDL_CONFIG) --cflags` EXENAME=rockdodger SOUNDLIBRARIES=-lSDL_mixer SDL_CONFIG=sdl-config LIBRARIES=`$(SDL_CONFIG) --libs` -lSDL_image $(SOUNDLIBRARIES) -lm OBJECTS=SFont.o guru_meditation.o signal_handling.o random_gen.o datafun.o sound.o input_functions.o scroller.o display_subsystem.o \ game_state.o highscore_io.o sprite.o \ blubats.o greeblies.o powerup.o rocks.o spacedots.o ship.o engine_exhaust.o laser.o \ mood_item.o sparkles.o yellifish.o infoscreen.o \ u-iff.o sekrit_lab.o\ globals.o intro.o main.o MANPAGE=rockdodger.6 ifeq ($(profile),1) OPTIONS+=-pg endif ifeq ($(debug),0) OPTIONS+=-O2 -DNDEBUG ifneq ($(profile),1) OPTIONS+=-fomit-frame-pointer endif else OPTIONS+=-O1 -DDEBUG endif CFLAGS=-MMD -g $(OPTIONS) $(MOREOPTS) all: $(EXENAME) config.h config.h: config.h.in sed -e 's:@gamesdir@:$(gamesdir):' -e 's/@PACKAGENAME@/$(PACKAGENAME)/' -e 's:@datadir@:$(datadir):' $^ > $@ $(EXENAME): config.h $(OBJECTS) ifeq ($(profile),1) $(CC) -pg -o $(EXENAME) $(OBJECTS) $(LIBRARIES) else $(CC) $(LDFLAGS) -o $(EXENAME) $(OBJECTS) $(LIBRARIES) endif clean: rm -f *.o *.d $(EXENAME) config.h TAGS dist: $(MAKE) clean mkdir -p $(TMP)/$(NEWD)/data cp *.c *.h *.in Makefile COPYING *.xpm $(MANPAGE) rockdodger.desktop $(TMP)/$(NEWD) cp -r data/* $(TMP)/$(NEWD)/data ( cd $(TMP); tar zcf $(NEWD).tar.gz $(NEWD) ) rm -rf $(TMP)/$(NEWD) mv $(TMP)/$(NEWD).tar.gz . pkg: $(EXENAME) (DTEMP=`mktemp -d $(TMP)/rock.XXXXX`; $(MAKE) install DESTDIR=$$DTEMP; echo $$DTEMP; \ tar -C $$DTEMP -cvzf $(TARPKGNAME) . && rm -r $$DTEMP) install: all $(INSTALL) -d $(bindir) $(gamesdir) $(INSTALL) $(EXENAME) $(bindir) -chgrp games $(bindir)/$(EXENAME) chmod g+s $(bindir)/$(EXENAME) $(MAKE) -C data install touch $(gamesdir)/rockdodger.scores -chgrp games $(gamesdir)/rockdodger.scores chmod g+rw $(gamesdir)/rockdodger.scores mkdir -p $(mandir)/man6 gzip -9n < $(MANPAGE) > $(mandir)/man6/$(MANPAGE).gz uninstall: rm -f $(gamesdir)/rockdodger.scores rm -f $(bindir)/$(EXENAME) rm -f $(mandir)/man6/$(MANPAGE).gz $(MAKE) -C data uninstall tags: etags *.c *.h >TAGS .PHONY: all clean install uninstall dist pkg tags -include $(OBJECTS:.o=.d) rockdodger-1.1.4/sparkles.c0000644000175000017500000002361613706632107016141 0ustar krawczykkrawczyk#include #include #include "sparkles.h" #include "random_gen.h" #include "globals.h" #include "guru_meditation.h" #include "u-iff.h" /* * Sparkles are small colour changing dots which are painted directly * onto a surface. Important information like the colours defined are * read from a IFF FORM ROCK file. * * FORM ROCK Rockdodger iff file * . FORM SPRK sparkles form * . . MDOT maximum number of dots chunk * . . CMAP colour map chunk (as known from ILBM files) * must occur at least two times * * MDOT chunk * ---------- * * uint32 maximum number of dots/sparkles * uint16 further flags for sparkles engine (= 0) * (bit 0 = 1: debug output on overflow) */ #ifdef DEBUG #include static unsigned long max_bangdots_used = 0; #endif sparkle_life_colours_t hot_colours; sparkle_life_colours_t cool_colours; static sparkle_t *sparkles; static sparkle_t *sparkles_end; uint32_t max_bang_dots = MAX_BANG_DOTS; uint16_t mdot_flags = 0; sparkle_t *init_sparkles(uiff_ctx_t iff) { int32_t size; int32_t cidx; sparkle_life_colours_t splcls; sparkle_t *ret = NULL; int index = -1; //This destroys the old context group-information but we do not need it any longer anyway. size = uiff_find_group_ctx(&iff, IFF_FIND_REWIND, FORM, MakeID('S', 'P', 'R', 'K')); assert(printf("FORM.ROCK FORM.SPRK size = $%08X\n", size)); if(size >= 0) { if((size = uiff_find_chunk_ctx(&iff, MakeID('M', 'D', 'O', 'T'))) >= 4) { //Chunk found and it is long enough... max_bang_dots = read32(iff.f); assert(printf("FORM.ROCK FORM.SPRK MDOT size = $%08X mdot = $%08X\n", size, max_bang_dots)); } if(size >= 6) { //Chunk found and it is long enough... mdot_flags = read16(iff.f); assert(printf("FORM.ROCK FORM.SPRK MDOT size = $%08X mdot_flags = $%04hX\n", size, mdot_flags)); } uiff_rewind_group(&iff); index = 0; while((size = uiff_find_chunk_ctx(&iff, MakeID('C', 'M', 'A', 'P'))) > 0) { assert(printf("FORM.ROCK FORM.SPRK CMAP size = $%08X\n", size)); if(size % 3 != 0) return NULL; splcls.cl_len = size / 3; if((splcls.clist = malloc((splcls.cl_len + 1/*Space for duplicate*/) * sizeof(SDL_Color))) == NULL) return NULL; for(cidx = 0; cidx < splcls.cl_len && ftell(iff.f) < iff.ckend; ++cidx) { splcls.clist[cidx].r = fgetc(iff.f); splcls.clist[cidx].g = fgetc(iff.f); splcls.clist[cidx].b = fgetc(iff.f); } assert(printf("splcls.cl_len = $%x splcls.clist = %p\n", splcls.cl_len, splcls.clist)); splcls.clist[splcls.cl_len] = splcls.clist[splcls.cl_len - 1]; #ifdef DEBUG int i; for(i = 0; i < splcls.cl_len; ++i) { printf("\t $%02x $%02x $%02x\n", (unsigned)splcls.clist[i].r, (unsigned)splcls.clist[i].g, (unsigned)splcls.clist[i].b); } #endif switch(index++) { case 0: hot_colours = splcls; break; case 1: cool_colours = splcls; break; default: break; //We are OK } } } if(index < 2) return NULL; /* We need at least two colour maps. */ if(!(sparkles = malloc(sizeof(sparkle_t) * max_bang_dots))) { perror("Can not allocate sparkles"); return NULL; } else sparkles_end = sparkles; ret = sparkles; assert(printf("ret = %p\n", ret)); return ret; } Uint32 get_life_colour(float life, sparkle_life_colours_t *fcols, SDL_Surface *surf) { int index; float mixing; Uint8 r, g, b; assert(fcols->cl_len > 0); if(life < 0 || life > 1) { #ifdef DEBUG fprintf(stderr, "life=%e, fcols=%p, surf=%p\n", (double)life, fcols, surf); #endif guru_meditation(GM_FLAGS_RECOVERY, GM_SS_Graphics | GM_GE_BadParm | GURU_SEC_bangdots, &get_life_colour); life = life < 0 ? 0 : 1; } index = floorf(life * fcols->cl_len); mixing = 1 - (fcols->cl_len * life - index); //Now you hopefully see, why we substracted one... r = mixing * fcols->clist[index].r + (1 - mixing) * fcols->clist[index + 1].r; g = mixing * fcols->clist[index].g + (1 - mixing) * fcols->clist[index + 1].g; b = mixing * fcols->clist[index].b + (1 - mixing) * fcols->clist[index + 1].b; //fprintf(stderr, "life=%e, fcols=%p, surf=%p index=%d mixing=%e r=%x g=%x b=%x\n", (double)life, fcols, surf, index, (double)mixing, (int)r, (int)g, (int)b); return SDL_MapRGB(surf->format, r, g, b); } /* * \return pointer to new sparkle */ sparkle_t *create_colour_sparkle(float x, float y, float dx, float dy, float decay, RD_VIDEO_TYPE col) { #ifdef DEBUG unsigned long nmax; nmax = sparkles_end - sparkles; if(nmax > max_bangdots_used) { max_bangdots_used = nmax; printf("new: max_bangdots_used = $%lX\n", max_bangdots_used); } #endif if(sparkles_end - sparkles >= max_bang_dots) { guru_meditation(GM_FLAGS_GREEN, GM_SS_Intuition | GM_GE_ProcCreate | GURU_SEC_bangdots, &create_colour_sparkle); } else { sparkles_end->x = x; sparkles_end->y = y; sparkles_end->dx = dx; sparkles_end->dy = dy; sparkles_end->life = 1.0; sparkles_end->decay = decay; sparkles_end->col = col; sparkles_end->spty = 0; return sparkles_end++; } return NULL; } /* * \return pointer to new sparkle */ sparkle_t *create_sparkle(float x, float y, float dx, float dy, float decay, sparkle_life_colours_t *col) { #ifdef DEBUG unsigned long nmax; nmax = sparkles_end - sparkles; if(nmax > max_bangdots_used + 0x100) { max_bangdots_used = nmax; printf("new: max_bangdots_used = $%lX\n", max_bangdots_used); } //In debug mode always guru meditate. mdot_flags |= 1; #endif assert(hot_colours.clist != NULL); assert(cool_colours.clist != NULL); if(sparkles_end - sparkles >= max_bang_dots) { if((mdot_flags & 0x0001) != 0) { guru_meditation(GM_FLAGS_GREEN, GM_SS_Intuition | GM_GE_ProcCreate | GURU_SEC_bangdots, &create_sparkle); } } else { assert(sparkles_end < sparkles + max_bang_dots); sparkles_end->x = x; sparkles_end->y = y; sparkles_end->dx = dx; sparkles_end->dy = dy; sparkles_end->life = 1.0; sparkles_end->decay = decay; sparkles_end->fading = col; sparkles_end->spty = 1; return sparkles_end++; } return NULL; } void draw_sparkle(sparkle_t *sparkle, SDL_Surface *surf) { int x = sparkle->x; int y = sparkle->y; RD_VIDEO_TYPE col; RD_VIDEO_TYPE *rawpixel = (RD_VIDEO_TYPE *) surf->pixels; switch(sparkle->spty) { case 0: col = sparkle->col; break; case 1: col = get_life_colour(sparkle->life, sparkle->fading, surf); sparkle->oldfadecol = col; break; default: col = guru_meditation(GM_FLAGS_RECOVERY | GM_FLAGS_AUTOTIMEOUT | GM_FLAGS_ABORTIFY | GM_FLAGS_CHOICE, GM_SS_Graphics | GM_GE_BadParm | GURU_SEC_bangdots, &draw_sparkle); } rawpixel[surf->pitch / sizeof(RD_VIDEO_TYPE) * y + x] = col; } void update_sparkles(SDL_Surface *surf) { Uint32 mycol, bgpixel; sparkle_t *sptr; sparkle_t *target; RD_VIDEO_TYPE *rawpixel; SDL_LockSurface(surf); rawpixel = (RD_VIDEO_TYPE *) surf->pixels; for(sptr = sparkles, target = sparkles; sptr < sparkles_end; ++sptr) { sptr->life = sptr->life - sptr->decay * movementrate; if(sptr->life < 0) continue; //It's dead, Jim. if(sptr->life < 0.87) { bgpixel = rawpixel[(int) (surf->pitch / sizeof(RD_VIDEO_TYPE) * (int) (sptr->y)) + (int) (sptr->x)]; switch(sptr->spty) { case 0: mycol = sptr->col; break; case 1: //Use last generated one... mycol = sptr->oldfadecol; break; default: mycol = -1; } if(bgpixel != mycol) { // Continue and do not copy continue; } } sptr->x += sptr->dx * movementrate; sptr->y += sptr->dy * movementrate; if(sptr->x <= 0 || sptr->x >= xsize || sptr->y <= 0 || sptr->y >= ysize) { // If the dot has drifted outside the perimeter, kill it continue; } *target++ = *sptr; } SDL_UnlockSurface(surf); sparkles_end = target; //This points after the last one } void makebangdots(int xbang, int ybang, int xvel, int yvel, SDL_Surface * s, int power, int amtdots) { int x, y, endcount; RD_VIDEO_TYPE *rawpixel, c; double theta, r; float sx, sy, dx, dy; int begin_generate; sparkle_t *sptr; begin_generate = SDL_GetTicks(); SDL_LockSurface(s); rawpixel = (RD_VIDEO_TYPE *) s->pixels; endcount = 0; while(endcount < amtdots) { for(x = 0; x < s->w; x++) { for(y = 0; y < s->h; y++) { c = rawpixel[s->pitch / sizeof(RD_VIDEO_TYPE) * y + x]; if(c && c != SDL_MapRGB(s->format, 0, 255, 0)) { theta = rnd() * M_PI * 2; r = 1 - (rnd() * rnd()); sx = x + xbang; sy = y + ybang; dx = (power / 50.0) * 45.0 * cos(theta) * r + xvel; dy = (power / 50.0) * 45.0 * sin(theta) * r + yvel; // Replace the last few bang dots with the pixels from the exploding object if(endcount > 0) { sptr = create_colour_sparkle(sx, sy, dx, dy, (rnd() * 3 + 1) / 100.0, c); } else { sptr = create_sparkle(sx, sy, dx, dy, (rnd() * 3 + 1) / 100.0, &hot_colours); } if(sptr == NULL) goto exitloop; } } } if(SDL_GetTicks() - begin_generate > 3) endcount++; } exitloop: SDL_UnlockSurface(s); } void draw_sparkles(SDL_Surface * s) { sparkle_t *sptr; for(sptr = sparkles; sptr < sparkles_end; ++sptr) { draw_sparkle(sptr, s); } } void reset_sparkles(void) { sparkles_end = sparkles; } void create_plumedots(int num, short x, short y, short heading, short angle, float speed) { sparkle_t *sptr; float fheading; float speed_; /* * The -sinf is needed as the Y coordinate increases from top to * bottom and we would like to have the angles in the mathematical * sense. So 0 is to the right, 90 up, 180 left and 270 down. */ while(--num > 0 && sparkles_end - sparkles < max_bang_dots) { fheading = heading + (rnd() - 0.5) * angle; fheading *= 2 * M_PI / 360.0; speed_ = speed * (0.3 + 0.8 * rnd()); sptr = create_sparkle(x + (rnd() - 0.5) * 7, y + (rnd() - 0.5) * 7, cosf(fheading) * speed_, -sinf(fheading) * speed_, (rnd() * 3 + 1) / 100.0, &cool_colours); if(sptr == NULL) break; } } rockdodger-1.1.4/rockdodger.60000644000175000017500000000441313706632107016355 0ustar krawczykkrawczyk.\" Hey, EMACS: -*- nroff -*- .TH ROCKDODGER 6 "May 29, 2017" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME rockdodger \- dodge and blow up rocks with your spaceship .SH SYNOPSIS .B rockdodger .RI [ options ] .SH DESCRIPTION This manual page documents briefly the .B rockdodger game. .PP Use the space key to start a new game. You have to dodge the rocks that come flying in from the right. By shooting at them with your laser you can heat them until they explode. The shield makes you invincible while you keep it activated. Both shield and laser have a limited power supply which recharges only slowly. .SS Keyboard Controls .TP .B Cursor keys Move spaceship in the given direction. .TP .B F1 Setup screen. .TP .B d Fire laser. .TP .B s Activate shields. .TP .B p Pause/unpause game. .TP .B Esc Quit game. .SH GURU MEDITATION (Errors) Error messages (aka software failures) are usually reported by a so called "guru meditation". The guru meditation will be displayed in the top of the screen in a blinking border. If this happens please send in a bug report and provide the colour of the border (red, yellow, green, blue) and the two hex numbers after the hash ('#'). This will help greatly in locating the failure. .SH OPTIONS .TP .B \-h Show summary of options. .TP .B \-f Run in full screen mode (default). .TP .B \-w Run in window mode. .TP .B \-x Provide the width of the rockdodger screen. .TP .B \-y Provide the height of the rockdodger screen. .TP .B \-k Use keyboard only, disable joystick. .TP .B \-s Run in silent mode (no sound). .TP .B \-I Please show me always the intro. .TP .B \-P Provide a rockdodger parameter file. Certain aspects of the game may be changed using this parameter file. This is an IFF FORM ROCK file. .SH AUTHOR This manual page was written by Andreas Bombe and RPK, for the Debian GNU/Linux system (but may be used by others). rockdodger-1.1.4/COPYING0000644000175000017500000004310713706632107015201 0ustar krawczykkrawczyk GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. rockdodger-1.1.4/display_subsystem.h0000644000175000017500000000133613706632107020100 0ustar krawczykkrawczyk#ifndef __DISPLAY_SUBSYSTEM_H_2013__ #define __DISPLAY_SUBSYSTEM_H_2013__ /*! \brief Draw the background items. * * Harmless items in the background without any interaction. These are * infinite black and space dots. */ void draw_background_objects(); /*! \brief draw the ghostly (fading) rock dodger title * * This function will use the fadetime to change the alpha of the * given surfaces (they are modified!). You can, of course, provide * other surfaces and this function should work euqally well... * * \param surf_t_rock Surface to the "Rock" title string * \param surf_t_dodger Surface to the "Dodger" title string */ void draw_ghostly_rock_dodger(SDL_Surface *surf_t_rock, SDL_Surface *surf_t_dodger); #endif rockdodger-1.1.4/u-iff.h0000644000175000017500000001253713706632107015330 0ustar krawczykkrawczyk#ifndef __MICRO_IFF_H__ #define __MICRO_IFF_H__ #include #include typedef int32_t IFFP; /* Status code result from an IFF procedure */ /* LONG, because must be type compatable with ID for GetChunkHdr.*/ /* Note that the error codes below are not legal IDs.*/ #define IFF_OKAY 0L /* Keep going...*/ #define END_MARK -1L /* As if there was a chunk at end of group.*/ #define IFF_DONE -2L /* clientProc returns this when it has READ enough. * It means return thru all levels. File is Okay.*/ #define DOS_ERROR -3L #define NOT_IFF -4L /* not an IFF file.*/ #define NO_FILE -5L /* Tried to open file, DOS didn't find it.*/ #define CLIENT_ERROR -6L /* Client made invalid request, for instance, write * a negative size chunk.*/ #define BAD_FORM -7L /* A client read proc complains about FORM semantics; * e.g. valid IFF, but missing a required chunk.*/ #define SHORT_CHUNK -8L /* Client asked to IFFReadBytes more bytes than left * in the chunk. Could be client bug or bad form.*/ #define BAD_IFF -9L /* mal-formed IFF file. [TBD] Expand this into a * range of error codes.*/ #define LAST_ERROR BAD_IFF // Flags for calling the group find function #define IFF_FIND_REWIND 1 //!< rewind before searching /*! \brief Four-character IDentifier builder.*/ #define MakeID(a,b,c,d) ( (int32_t)(a)<<24L | (int32_t)(b)<<16L | (c)<<8 | (d) ) /* Standard group IDs. A chunk with one of these IDs contains a SubTypeID followed by zero or more chunks.*/ #define FORM MakeID('F','O','R','M') #define PROP MakeID('P','R','O','P') #define LIST MakeID('L','I','S','T') #define CAT MakeID('C','A','T',' ') #define FILLER MakeID(' ',' ',' ',' ') #define JUNK MakeID('J', 'U', 'N', 'K') typedef int32_t ID; /*! \brief An ID is four printable ASCII chars * but stored as a int32_t for efficient copy * & compare.*/ typedef struct Uiff_CTX { FILE *f; void *last_data; //!< last data was read here ID grID; //! #include #include #include #include #include char *data_dir; char *get_data_dir(void) { char buf[4096]; buf[sizeof(buf) - 1] = 0; strcpy(buf, "./data"); if(missing(buf)) { char *env; env = getenv("ROCKDODGER_DATADIR"); if(env != NULL) { strncpy(buf, env, sizeof(buf) - 1); if(missing(buf)) { fprintf(stderr, "Cannot find data directory $ROCKDODGER_DATADIR\n"); exit(-1); } } else { snprintf(buf, sizeof(buf) - 1, "%s/%s", DATADIR, PACKAGENAME); if(missing(buf)) { fprintf(stderr, "Cannot find data in %s\n", buf); exit(-2); } } } return strdup(buf); } char *load_file(const char *s) { static char retval[1024]; snprintf(retval, sizeof(retval), "%s/%s", data_dir, s); retval[sizeof(retval) - 1] = '\0'; return retval; } const char *load_file_dir(const char *dir, const char *name) { static char retval[4096]; snprintf(retval, sizeof(retval), "%s/%s/%s", data_dir, dir, name); retval[sizeof(retval) - 1] = '\0'; return retval; } SDL_Surface *load_image_no_convert(const char *fname, short kr, short kg, short kb) { SDL_Surface *surf = IMG_Load(load_file_dir("images", fname)); if(surf != NULL) { if(kr >= 0 && kg >= 0 && kb >= 0) { RD_VIDEO_TYPE key = (RD_VIDEO_TYPE) SDL_MapRGB(surf->format, kr, kg, kb); SDL_SetColorKey(surf, SDL_SRCCOLORKEY | SDL_RLEACCEL, key); } } else { #ifdef DEBUG fprintf(stderr, "IMG_Load(): %s\n", SDL_GetError()); #endif } return surf; } SDL_Surface *load_image(const char *fname, short kr, short kg, short kb) { SDL_Surface *surf = NULL; SDL_Surface *temp = load_image_no_convert(fname, kr, kg, kb); if(temp != NULL) { surf = SDL_DisplayFormat(temp); SDL_FreeSurface(temp); } return surf; } int missing(const char *dirname) { struct stat buf; if(lstat(dirname, &buf) == 0) { return (!S_ISDIR(buf.st_mode)); } #ifdef DEBUG perror("missing()"); #endif return 1; } sdl_surfaces_t *load_images_no_convert(const char *fname, short kr, short kg, short kb) { unsigned short int i, j; char name[256]; SDL_Surface *tmpsurf[1<<16]; //Maximum! sdl_surfaces_t *surfaces; for(i = 0; i < (1<<16) - 1; i++) { snprintf(name, sizeof(name), fname, i); if((tmpsurf[i] = load_image_no_convert(name, kr, kg, kb)) == NULL) { if(i == 0) { return NULL; } /* maybe later: fill up to n with first image... see greeeblies */ break; } else { printf("\tImage '%s' was loaded.\n", name); } } if(i == (1<<16) - 1) return NULL; //That many images??? surfaces = malloc(sizeof(struct sdl_surfaces)); if(surfaces != NULL) { surfaces->num_surfaces = i; if( (surfaces->surfaces = calloc(i, sizeof(SDL_Surface*))) == NULL) return NULL; surfaces->surfaces_end = surfaces->surfaces + i; for(j = 0; j < i; ++j) *(surfaces->surfaces + j) = tmpsurf[j]; } return surfaces; } sdl_surfaces_t *load_images_ck(const char *fname, short kr, short kg, short kb) { unsigned short int i, j; char name[256]; SDL_Surface *tmpsurf[1<<16]; //Maximum! sdl_surfaces_t *surfaces; for(i = 0; i < (1<<16) - 1; i++) { snprintf(name, sizeof(name), fname, i); if((tmpsurf[i] = load_image(name, kr, kg, kb)) == NULL) { if(i == 0) { return NULL; } /* maybe later: fill up to n with first image... see greeeblies */ break; } else { printf("\tImage '%s' was loaded.\n", name); } } if(i == (1<<16) - 1) return NULL; //That many images??? surfaces = malloc(sizeof(struct sdl_surfaces)); if(surfaces != NULL) { surfaces->num_surfaces = i; if( (surfaces->surfaces = calloc(i, sizeof(SDL_Surface*))) == NULL) return NULL; surfaces->surfaces_end = surfaces->surfaces + i; for(j = 0; j < i; ++j) *(surfaces->surfaces + j) = tmpsurf[j]; } return surfaces; } void destroy_sdl_surfaces(sdl_surfaces_t *surfaces) { SDL_Surface **ptr; for(ptr = surfaces->surfaces; ptr < surfaces->surfaces_end; ++ptr) { SDL_FreeSurface(*ptr); } //Free array of surface pointers. free(surfaces->surfaces); memset(surfaces, 0, sizeof(*surfaces)); //Free the surfaces free(surfaces); } rockdodger-1.1.4/laser.c0000644000175000017500000000106113706632107015411 0ustar krawczykkrawczyk#include "laser.h" #include "config.h" #include "random_gen.h" void draw_random_dots(SDL_Surface *surf, int ypos, int x_min, int x_max) { RD_VIDEO_TYPE c, *rawpixel; int i; int x, y; SDL_LockSurface(surf); rawpixel = (RD_VIDEO_TYPE *) surf->pixels; c = SDL_MapRGB(surf->format, rnd() * 128, 128 + rnd() * 120, rnd() * 128); for(i = 0; i < (x_max - x_min) * 5; i += 10) { x = rnd() * (x_max - x_min) + x_min; y = ypos + (rnd() - 0.5) * 1.5; rawpixel[surf->pitch / sizeof(RD_VIDEO_TYPE) * y + x] = c; } SDL_UnlockSurface(surf); } rockdodger-1.1.4/laser.h0000644000175000017500000000057613706632107015430 0ustar krawczykkrawczyk#ifndef __LASER_H__2012 #define __LASER_H__2012 #include /*! \brief draw (laser) random dots * * Draw horizontal random laser dots. * * \param surf surface to draw on (is being locked!) * \param ypos horizontal position * \param x_min minimum x * \param x_max maximum x */ void draw_random_dots(SDL_Surface *surf, int ypos, int x_min, int x_max); #endif rockdodger-1.1.4/infoscreen.h0000644000175000017500000000174413706632107016453 0ustar krawczykkrawczyk#ifndef __INFOSCREEN_20141004___ #define __INFOSCREEN_20141004___ #include #include #include "u-iff.h" #include "globals.h" #define INFOSCRCREEN_MAX_COLUMNS 3 #define INFOICON 1 #define INFOFUNP 2 #define INFONONE 0 typedef void (*Infoscreen_icon_function)(SDL_Surface *target, SDL_Rect *dest); struct Entry { const char *text; int16_t posx, posy; struct { unsigned char icontype; union { SDL_Surface *icon; Infoscreen_icon_function icondisplayfun; }; }; signed char column; }; /*! \brief infoscreen enabled? * * This variable has the value 0 if the the screen is not enabled and * 1 if it is enabled. */ extern int infoscreen_enabled; /*! \brief initialise info-screen data-structure * * Initialises infoscreen and loads parameter. * * \param iff IFF context * \return NULL pointer on failure */ void *init_infoscreen(uiff_ctx_t iff); void display_infotext(const struct Entry *entries, SDL_Surface *display); #endif rockdodger-1.1.4/datafun.h0000644000175000017500000000705513706632107015743 0ustar krawczykkrawczyk#ifndef __DATAFUN_H__ #define __DATAFUN_H__ #include /*! \brief structure to hold multiple surfaces * * Mostly used for load_images_ck... All fields are set by the load * functions and should be left alone. surfaces_end and num_surfaces * are redundant! */ typedef struct sdl_surfaces { SDL_Surface **surfaces; //!< pointer to an array of surfaces SDL_Surface **surfaces_end; //!< pointer to SDL_Surface *after* the last surface unsigned short num_surfaces; //!< number of surfaces } sdl_surfaces_t; /*! \brief global variable for the path to the data directory * This variable must be set before any other function is called */ extern char *data_dir; /*! \brief Determine rockdodger data directory * * The following directories are tried: * - default: ./data * - second alternative: ROCKDODGER_DATADIR * - final alternative: @datadir@/@PACKAGENAME@ * * \return a freshly allocated string with the data-directory name */ char *get_data_dir(void); /*! \brief get load file name * * Get the load file name of a file. Actually does only prepend the * file path. The returned value is a static array! * * \return pointer to static array */ char *load_file(const char *s); /*! \brief get load file name in a directory * * Get the load file name of a file. Actually does only prepend the * data directory path and the dir path. The returned value is a * static array! * * \return pointer to a static array */ const char *load_file_dir(const char *dir, const char *name); /*! \brief load an image with optional colour key * * This function loads an image in the standard image directory and * transforms it to the display format. Optionally a colour key for * transparency can be given. If any of the kr, kg, kb is < 0 then no * colour key transparency is done. * * \warning The image is transformed into the screen format, this * breaks transparency! * * \param fname file name * \param kr red component for colour key * \param kg green component for colour key * \param kb blue component for colour key * \return surface or NULL on any error */ SDL_Surface *load_image(const char *fname, short kr, short kg, short kb); /*! \brief load images with optional colour key * * This function loads images in the standard image directory and * transforms it to the display format. Optionally a colour key for * transparency can be given. If any of the kr, kg, kb is < 0 then no * colour key transparency is done. * * \warning The image is transformed into the screen format, this * breaks transparency! * * \param fname file name pattern with format qualifier for a unsigned short, e.g. "image.%hx.lbm" (I know this could lead to a security hole...) * \param kr red component for colour key * \param kg green component for colour key * \param kb blue component for colour key * \return surfaces or NULL on any error */ sdl_surfaces_t *load_images_ck(const char *fname, short kr, short kg, short kb); sdl_surfaces_t *load_images_no_convert(const char *fname, short kr, short kg, short kb); /*! \brief Check is directory is missing * * \param dirname directory name * \return 0 = no directory */ int missing(const char *dirname); /*! \brief Destroy multiple surfaces in sdl_surfaces_t * * This function deletes all the surfaces which can be found in the * structure. It will also clear the whole surfaces so that there will * be no more dangling pointers. This sets the number of surfaces also * to zero. * * \param surfaces pointer to a sdl_surfaces_t which will be destroyed */ void destroy_sdl_surfaces(sdl_surfaces_t *surfaces); #endif rockdodger-1.1.4/scroller.h0000644000175000017500000000221013706632107016132 0ustar krawczykkrawczyk#ifndef __SCROLLER_H_20130126__ #define __SCROLLER_H_20130126__ #include typedef struct Scoller_t { SDL_Surface *playfield; //!< scroller surface with the whole text float position; //!< position of the scroller float speed; //!< default speed multiplier per frame Sint16 y; //!< at which position is the scroller? } Scroller_t; /*!\brief Intialise a scroller structure * * Frees memory on errors. * * \param stext text for scroller * \param pos y position of the scroller * \param defspeed default speed per frame * \param visiwidth visible width of the scroller * \return pointer to Scroller_t structure or NULL */ Scroller_t *init_scroller(const char *stext, Sint16 pos, float defspeed, Uint16 visiwidth); /*! \brief Free memory of the scroller * */ void destroy_scroller(Scroller_t *scroller); /*! \brief Update scroller and draw it on the target surface * * \param scroller Scroller_t structure pointer * \param target Surface to draw on * \param speed Speed fraction per frame, 1.0 = exact framerate was hit */ void update_and_draw_scroller(Scroller_t *scroller, SDL_Surface *target, float speed); #endif rockdodger-1.1.4/random_gen.c0000644000175000017500000000340513706632107016420 0ustar krawczykkrawczyk#include "random_gen.h" #include #include #ifdef DEBUG #include #endif #define RANDOM_LIST_SIZE (1L<<18) static float random_list[RANDOM_LIST_SIZE]; static unsigned long random_list_index; static unsigned long new_random_index = 0; /* * Random numbers involve a call to the operating system, and may take some * time to complete. I can't call the random number generator multiple times * per frame. In one old version, it would take half a second before the ship * explosion was generated when the rnd() function was calling the operating * system function. * The solution is to generate random numbers during initialisation, and store * in a circular array. This will (of course) repeat, but it is not noticeable * (unless RANDOM_LIST_SIZE is very very small). */ float rnd_next_float() { return (float) random() / (float) RAND_MAX; } void initrnd() { unsigned long i; time_t starttime; if(time(&starttime) != -1) { srandom((unsigned int) starttime); } for(i = 0; i < RANDOM_LIST_SIZE; i++) { random_list[i] = rnd_next_float(); } random_list_index = 0; #ifdef DEBUG float min = *random_list; float max = *random_list; for(i = 0; i < RANDOM_LIST_SIZE; ++i) { float next = random_list[i]; if(next < min) min = next; if(next > max) max = next; } printf("%ld random numbers have been initialised (min=%g, max=%g).\n", RANDOM_LIST_SIZE, min, max); #endif } float rnd() { if(++random_list_index >= RANDOM_LIST_SIZE) { random_list_index = 0; //From time to time insert a new random number to keep the list "fresh". random_list[new_random_index++ % RANDOM_LIST_SIZE] = rnd_next_float(); #ifdef DEBUG puts("Random numbers are recycled!"); #endif } return random_list[random_list_index]; } rockdodger-1.1.4/ship.c0000644000175000017500000001324713706632107015257 0ustar krawczykkrawczyk#include #include "config.h" #include "sparkles.h" #include "datafun.h" #include "guru_meditation.h" #include "ship.h" #include "globals.h" #include "random_gen.h" struct black_point_struct { int x, y; }; static struct black_point_struct black_point[MAX_BLACK_POINTS], *blackptr = black_point; SDL_Surface *surf_small_ship; sdl_surfaces_t *surfaces_ship; struct sprite ship_sprite; ship_t shipdata; void draw_little_ships(int nships, SDL_Surface * surf_screen) { int i; SDL_Rect dest; for(i = 0; i < nships - 1; i++) { dest.w = surf_small_ship->w; dest.h = surf_small_ship->h; dest.x = (i + 1) * (surf_small_ship->w + 10); dest.y = 40; SDL_BlitSurface(surf_small_ship, NULL, surf_screen, &dest); } } void draw_ship(SDL_Surface * surf_screen) { static SDL_Rect dest; dest.w = 0; //src.w; dest.h = 0; //src.h; dest.x = (int) shipdata.xship; dest.y = (int) shipdata.yship; SDL_BlitSurface(get_current_sprite_surface(&ship_sprite, last_ticks), NULL, surf_screen, &dest); } void outline_detector() { char buf[256][256]; int x, y; SDL_Surface *surf_ship = get_current_sprite_surface(&ship_sprite, last_ticks); SDL_LockSurface(surf_ship); RD_VIDEO_TYPE *raw_pixels = (RD_VIDEO_TYPE *) surf_ship->pixels; x = surf_ship->w - 1; y = surf_ship->h - 1; RD_VIDEO_TYPE background = raw_pixels[y * surf_ship->pitch / sizeof(RD_VIDEO_TYPE) + x]; memset(buf, 0, sizeof(buf)); for(y = 0; y < surf_ship->h; y++) { for(x = 0; x < surf_ship->w; x++) { buf[x + 1][y + 1] = raw_pixels[y * surf_ship->pitch / sizeof(RD_VIDEO_TYPE) + x] != background; } } for(y = 0; y < surf_ship->h + 2; y++) { for(x = 0; x < surf_ship->w + 2; x++) { if(buf[x][y] && (!buf[x][y - 1] || !buf[x][y + 1] || !buf[x - 1][y] || !buf[x + 1][y])) printf("%d %d\t", x - 1, y - 1); } putchar('\n'); } SDL_UnlockSurface(surf_ship); } SDL_Surface *init_ship() { int i, j, numblack; SDL_Surface *surf_ship; // Load the spaceship surface from the spaceship file if((surfaces_ship = load_images_ck("ship.%02x.png", 0, 255, 0)) == NULL) { fprintf(stderr, "%s\n", SDL_GetError()); guru_meditation(GM_FLAGS_DEADEND | GM_FLAGS_ABORTIFY, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_ship, (void*)0x53484950); //We never return from there... } init_sprite2(&ship_sprite, surfaces_ship, 117, initticks); /* * Remember that we assume that the ship has always *exactly* the * same size. If not you will get funny effects. And you will * explode all the time, of course. */ surf_ship = surfaces_ship->surfaces[0]; // Create the array of black points; SDL_LockSurface(surf_ship); RD_VIDEO_TYPE *raw_pixels = (RD_VIDEO_TYPE *) surf_ship->pixels; numblack = 0; for(i = 0; i < surf_ship->w; i++) for(j = 0; j < surf_ship->h; j++) if(raw_pixels[j * surf_ship->pitch / sizeof(RD_VIDEO_TYPE) + i] == 0) { blackptr->x = i; blackptr->y = j; blackptr++; if(++numblack > MAX_BLACK_POINTS) return NULL; } SDL_UnlockSurface(surf_ship); //outline_detector(); return surf_ship; } void draw_ship_shield(SDL_Surface * surf_screen) { // Show the freaky shields RD_VIDEO_TYPE *raw_pixels = (RD_VIDEO_TYPE *) surf_screen->pixels; struct black_point_struct *p; int x, y; RD_VIDEO_TYPE c; SDL_LockSurface(surf_screen); if(initialshield > 0) { initialshield -= movementrate; c = SDL_MapRGB(surf_screen->format, 0, 255, 255); } else { c = heatcolor[(int) shieldlevel]; shieldlevel -= movementrate; } shieldpulse += 0.1; for(p = black_point; p < blackptr; p++) { x = p->x + (int) shipdata.xship + (rnd() + rnd() - 1) * sin(shieldpulse) * 4 + 1; y = p->y + (int) shipdata.yship + (rnd() + rnd() - 1) * sin(shieldpulse) * 4 + 1; if(x > 0 && y > 0 && x < xsize && y < ysize) { int offset = surf_screen->pitch / sizeof(RD_VIDEO_TYPE) * y + x; raw_pixels[offset] = c; } } SDL_UnlockSurface(surf_screen); } int ship_check_collision(SDL_Surface * surf_screen) { struct black_point_struct *p; RD_VIDEO_TYPE *raw_pixels; int bang = 0; SDL_LockSurface(surf_screen); raw_pixels = (RD_VIDEO_TYPE *) surf_screen->pixels; // When the shields are off, check that the black points // on the ship are still black, and not covered up by rocks for(p = black_point; p < blackptr; p++) { int offset = surf_screen->pitch / sizeof(RD_VIDEO_TYPE) * (p->y + (int) shipdata.yship) + p->x + (int) shipdata.xship; if(raw_pixels[offset]) { // Set the bang flag, a collision with something happened bang = 1; break; } } SDL_UnlockSurface(surf_screen); return bang; } void ship_update_position(void) { SDL_Surface *surf_ship = get_current_sprite_surface(&ship_sprite, last_ticks); // FRICTION? In space? Oh well. shipdata.xvel *= powf(0.9, movementrate); shipdata.yvel *= powf(0.9, movementrate); // if (abs(shipdata.xvel)<0.00001) shipdata.xvel=0; // if (abs(shipdata.yvel)<0.00001) shipdata.yvel=0; // INERTIA shipdata.xship += shipdata.xvel * movementrate; shipdata.yship += shipdata.yvel * movementrate; // BOUNCE X (okay, throwing all pretense of realism out the // window) if(shipdata.xship < 0 || shipdata.xship > xsize - surf_ship->w) { // BOUNCE from left and right wall shipdata.xship -= shipdata.xvel * movementrate; shipdata.xvel *= -0.99; } // BOUNCE Y if(shipdata.yship < 0 || shipdata.yship > ysize - surf_ship->h) { // BOUNCE from top and bottom wall shipdata.yship -= shipdata.yvel * movementrate; shipdata.yvel *= -0.99; } } void way_of_the_exploding_ship(void) { makebangdots(shipdata.xship, shipdata.yship, shipdata.xvel, shipdata.yvel, get_current_sprite_surface(&ship_sprite, last_ticks), 30, 3); } rockdodger-1.1.4/ship.h0000644000175000017500000000404213706632107015255 0ustar krawczykkrawczyk#ifndef __SHIP_H__ #define __SHIP_H__ #include #include "datafun.h" #include "sprite.h" /*! \brief Structure with important ship information * * In this structure we keep all inportant game information about the * ship. For now this will be the position and velocity. */ typedef struct Ship_struct { float xship; //!< X position of ship, 0..XSIZE float yship; //!< Y position of ship, 0..YSIZE float xvel; //!< Change in X position per tick. float yvel; //!< Change in Y position per tick. } ship_t; extern SDL_Surface *surf_small_ship; //!< Indicator of number of ships remaining extern sdl_surfaces_t *surfaces_ship; //!< Spaceship surfaces extern struct sprite ship_sprite; //!< the sprite for the ship extern ship_t shipdata; //!< Collected ship data. /*! \brief Draw the ship. * * This function uses the global variable xship and yship. * * \param surf_screen Surface to draw on. */ void draw_ship(SDL_Surface * surf_screen); /*! \brief Draw the little ships. * * This is used to show the player how many "lives" he has left. After * that... * * \param nships Number of ships to draw. * \param surf_screen Surface to draw on. */ void draw_little_ships(int nships, SDL_Surface * surf_screen); /*! \brief Initialise the ship * * \return The ship SDL_Surface* or NULL if an error occured. */ SDL_Surface *init_ship(); /*! \brief Shields up! * * \param surf_screen Surface to draw on. */ void draw_ship_shield(SDL_Surface * surf_screen); /*! \brief Check for collision. * * Simple algorithm checks if the black pixels around the ship are * still black... * * \param surf_screen Surface where everything is drawn on * \return 0 = no collision, 1 = BANG! */ int ship_check_collision(SDL_Surface * surf_screen); /*! \brief Update ship position. * * Update the position of the ship using the global variables xvel, * yvel. */ void ship_update_position(void); /* \brief Make the ship explode * * The ship will explode, current just the bangdots are created. */ void way_of_the_exploding_ship(void); #endif rockdodger-1.1.4/SFont.h0000644000175000017500000000462413706632107015351 0ustar krawczykkrawczyk/************************************************************************ * SFONT - SDL Font Library by Karl Bartel * * * * All functions are explained below. There are two versions of each * * funtction. The first is the normal one, the function with the * * 2 at the end can be used when you want to handle more than one font * * in your program. * * * ************************************************************************/ #include extern int font_height; // Delcare one variable of this type for each font you are using. // To load the fonts, load the font image into YourFont->Surface // and call InitFont( YourFont ); typedef struct { SDL_Surface *Surface; int CharPos[512]; int h; } SFont_FontInfo; // Initializes the font // Font: this contains the suface with the font. // The font must be loaded before using this function. void InitFont(SDL_Surface * Font); void InitFont2(SFont_FontInfo * Font); // Blits a string to a surface // Destination: the suface you want to blit to // text: a string containing the text you want to blit. void PutString(SDL_Surface * Surface, int x, int y, const char *text); void PutString2(SDL_Surface * Surface, SFont_FontInfo * Font, int x, int y, const char *text); // Returns the width of "text" in pixels int TextWidth(char *text); int TextWidth2(SFont_FontInfo * Font, char *text); // Blits a string to with centered x position void XCenteredString(SDL_Surface * Surface, int y, char *text); void XCenteredString2(SDL_Surface * Surface, SFont_FontInfo * Font, int y, char *text); // Allows the user to enter text // Width: What is the maximum width of the text (in pixels) // text: This string contains the text which was entered by the user // ph: nonblocking int SFont_Input(SDL_Surface * Destination, int x, int y, int Width, char *text); int SFont_Input2(SDL_Surface * Destination, SFont_FontInfo * Font, int x, int y, int Width, char *text); /*! \brief Get width of a text * * \param text text string * \return width in pixels */ int SFont_wide(const char *text); /*! \brief Clear the event queue! * * This function clears the event buffer and enables unicode input or * so... * * What!? */ void clearBuffer(); rockdodger-1.1.4/globals.c0000644000175000017500000002705513706632107015741 0ustar krawczykkrawczyk#include "globals.h" #include #include #include "display_subsystem.h" #include "game_state.h" #include "highscore_io.h" #include "input_functions.h" #include "SFont.h" #include "scroller.h" #include "ship.h" #include "sound.h" struct Setup_Data { Scroller_t *scroller; short current; const char *entry_name; const char *description; //!< will be in the scroller on the bottom of the screen char *values[12]; }; char *edition_name; int xsize = 800; int ysize = 600; SDL_Surface *surf_screen = NULL; SDL_Surface *surf_green_block = NULL; SDL_Surface *surf_t_rock = NULL; // Title element "rock" SDL_Surface *surf_t_dodger = NULL; // Title element "dodgers" spacedots_t *current_spacedot_engine = NULL; unsigned short opt_fullscreen = 1; unsigned short opt_cicada_spacedots = 0; unsigned short opt_intro = 2; float movementrate; float level = 0; float shieldlevel, laserlevel, shieldpulse = 0; int initialshield, gameover = 0; RD_VIDEO_TYPE heatcolor[W * 3]; enum states state = TITLE_PAGE; //!< current game state float state_timeout = 600.0; //!< timeout before next game state switch float fadetimer = 0; Uint32 initticks = 0; Uint32 last_ticks = 0; Uint32 ticks_since_last = 0; Uint32 ign_k_utl_ticks = 0; int music_volume = 128; //See sound.c... int nships; int last_levelup_snd; uiff_ctx_t *iff_ctx; static const char resolution_format[] = "resolution = ( %d, %d )\n"; static const char spacedots_format[] = "spacedots = %31s\n"; static const char fullscreen_format[] = "fullscreen = %31s\n"; static const char intro_format[] = "intro = %31s\n"; static const char version_format[] = "version = %13s\n"; static const char music_volume_format[] = "musvol = %13s\n"; static char configuration_file_version[14]; struct Setup_Data setup[] = { { NULL, 0, "", "Use cursor keys to select and change options, press enter or F1 to quit the screen.", { "", NULL } }, { NULL, 0, "resolution", "Select the screen resolution!", { "", "640x480", "800x480", "800x600", "1024x768", "1152x864", "1280x1024", "1440x900", "1600x900", NULL } }, { NULL, 0, "fullscreen", "Use the full-screen display or windowed mode for rockdodger?", { "fullscreen", "windowed", NULL } }, { NULL, 0, "spacedots", "How are the spacedots (the little stars in the background) drawn? The classic version draws them directly into the surface, the cicada version uses surfaces (may be faster).", { "classic", "cicada", NULL } }, { NULL, 8, "music volume", "Set the volume for the background music.", { "0", "16", "32", "48", "64", "80", "96", "112", "128", "144", "160" } }, { NULL, 0, "intro", "Should the intro be displayed? The intro is usually only displayed for the first time after a version change.", { "no", "yes", NULL } }, { NULL, 0, "", "Rockdoger V"VERSION" compiled on "COMPILEDATE".", { "", NULL } }, { NULL, 0, "activate config?", "Set this to yes and press ENTER to activate the current configuration. Valid options are: 'no' keep old configuration, 'yes' activate configuration, 'yes and save' activate and save the configuration.", { "no", "yes", "yes and save", NULL } }, { NULL, 0, NULL } }; #define SETUP_SIZE (sizeof(setup) / sizeof(struct Setup_Data)) void update_movement_rate() { ticks_since_last = SDL_GetTicks() - last_ticks; last_ticks = SDL_GetTicks(); if(ticks_since_last > 200) { movementrate = 0; } else { movementrate = ticks_since_last / 50.0; } } void cleanup_globals() { struct Setup_Data *setupptr; initticks = SDL_GetTicks(); for(setupptr = setup; setupptr->entry_name; ++setupptr) { if(setupptr->scroller) { destroy_scroller(setupptr->scroller); setupptr->scroller = NULL; } } } struct Setup_Data *find_setup_entry(const char *name) { struct Setup_Data *setupptr; for(setupptr = setup; setupptr->entry_name; ++setupptr) { if(strcmp(name, setupptr->entry_name) == 0) return setupptr; } return NULL; } void save_setup() { FILE *f; char buf[256]; struct Setup_Data *setupptr; snprintf(buf, sizeof(buf) - 1, "%s/.rockdodger", getenv("HOME")); if((f = fopen(buf, "w")) == NULL) return; #ifdef DEBUG fprintf(stderr, "Writing config to '%s'.\n", buf); #endif fprintf(f, "#rockdodger configuration\n"); fprintf(f, version_format, VERSION); fprintf(f, resolution_format, xsize, ysize); // setupptr = find_setup_entry("spacedots"); assert(setupptr); fprintf(f, spacedots_format, setupptr->values[setupptr->current]); // setupptr = find_setup_entry("fullscreen"); assert(setupptr); fprintf(f, fullscreen_format, setupptr->values[setupptr->current]); // setupptr = find_setup_entry("intro"); assert(setupptr); fprintf(f, intro_format, setupptr->values[setupptr->current]); // setupptr = find_setup_entry("music volume"); assert(setupptr); fprintf(f, music_volume_format, setupptr->values[setupptr->current]); fclose(f); } int load_setup() { FILE *f; char buf[256]; char inpbuf[32]; int x0, x1; snprintf(buf, sizeof(buf) - 1, "%s/.rockdodger", getenv("HOME")); if(!(f = fopen(buf, "r"))) return 0; while(fgets(buf, sizeof(buf), f) != NULL) { if(strlen(buf) == 0 || buf[0] == '#') continue; if(sscanf(buf, resolution_format, &x0, &x1) == 2) { if(x0 > 0 && x1 > 0) { xsize = x0; ysize = x1; } } else if(sscanf(buf, spacedots_format, inpbuf) == 1) { if(strcmp(inpbuf, "cicada") == 0) opt_cicada_spacedots = 1; else opt_cicada_spacedots = 0; } else if(sscanf(buf, fullscreen_format, inpbuf) == 1) { if(strcmp(inpbuf, "fullscreen") == 0) opt_fullscreen = 1; else opt_fullscreen = 0; } else if(sscanf(buf, intro_format, inpbuf) == 1) { if(opt_intro != 3) opt_intro = (strcmp(inpbuf, "yes") == 0) ? 1 : 0; } else if(sscanf(buf, version_format, configuration_file_version) == 1) { if(strcmp(configuration_file_version, VERSION) != 0) opt_intro = 3; } else if(sscanf(buf, music_volume_format, inpbuf) == 1) { music_volume = atoi(inpbuf); //Check for illegal values. Oh boy, I am sooo lazy. if(music_volume < 0) music_volume = 0; else if(music_volume > 160) music_volume = 160; } else { printf("Unknown setup line '%s'.\n", buf); } } fclose(f); return 1; } void setuploop() { int i; short old_config[SETUP_SIZE]; inputstate_t inputstate; char txtbuf[181]; int crsrpos = 0; struct Setup_Data *setupptr; char resolution_buf[10]; short activate_config; SDL_Rect drect = { 16, 0, 0, 0 }; SDL_Rect srect = { 0, 0, surf_screen->w - 32, 20 }; play_tune(4); for(i = 0; i < SETUP_SIZE; ++i) old_config[i] = setup[i].current; state_timeout = 69105; setupptr = find_setup_entry("music volume"); assert(setupptr); setupptr->current = music_volume >> 4; assert(setupptr->current < 11); setupptr = find_setup_entry("fullscreen"); assert(setupptr); setupptr->current = opt_fullscreen == 0 ? 1 : 0; setupptr = find_setup_entry("intro"); assert(setupptr); setupptr->current = opt_intro == 1 ? 1 : 0; setupptr = find_setup_entry("spacedots"); assert(setupptr); setupptr->current = opt_cicada_spacedots; setupptr = find_setup_entry("resolution"); assert(setupptr); sprintf(resolution_buf, "%dx%d", xsize, ysize); setupptr->values[0] = resolution_buf; while(state == SETUP) { update_movement_rate(); (void) input_subsystem(&inputstate); /* TODO: really not possible in setup? */ handle_state_timeout(0); if(inputstate.inputstate[UP]) { --crsrpos; temporary_disable_key_input(); } else if(inputstate.inputstate[DOWN]) { ++crsrpos; temporary_disable_key_input(); } else if(inputstate.inputstate[RIGHT]) { setupptr = setup + crsrpos; if(setupptr->values[++setupptr->current] == NULL) setupptr->current = 0; temporary_disable_key_input(); } else if(inputstate.inputstate[LEFT]) { setupptr = setup + crsrpos; if(--setupptr->current < 0) { while(setupptr->values[++setupptr->current]); //This will find the null pointer. --setupptr->current; //Now last entry. } temporary_disable_key_input(); } else if(inputstate.inputstate[INPUT_SELECT]) { state = TITLE_PAGE; } /* * If the cursor positon is less then zero set it to zero or if * the position would be pointing to NULL which is the end of * available options also ignore the keystroke. If the first * character is less then a space then ignore it, too. We will use * control characters for special use cases... */ if(crsrpos < 0) crsrpos = 0; else if(setup[crsrpos].entry_name == NULL || (setup[crsrpos].entry_name[0] < ' ' && setup[crsrpos].entry_name[0] != 0)) --crsrpos; if(setup[crsrpos].scroller == NULL) { setup[crsrpos].scroller = init_scroller(setup[crsrpos].description, surf_screen->h - 30, 4.62384, surf_screen->w); } //display subsystem draw_background_objects(); XCenteredString(surf_screen, 20, "SETUP"); for(setupptr = setup, i = 0; setupptr->entry_name; ++setupptr, ++i) { sprintf(txtbuf, "%-70s %12s", setupptr->entry_name, setupptr->values[setupptr->current]); PutString(surf_screen, 20, 60 + i * 22, setupptr->entry_name); PutString(surf_screen, surf_screen->w - 20 - SFont_wide(setupptr->values[setupptr->current]), 60 + i * 22, setupptr->values[setupptr->current]); SDL_SetAlpha(surf_green_block, SDL_SRCALPHA, (int) (51.0 + 30.0 * sinf(fadetimer))); drect.y = 60 + crsrpos * 22; SDL_BlitSurface(surf_green_block, &srect, surf_screen, &drect); } assert(setup[crsrpos].scroller); if(setup[crsrpos].scroller) update_and_draw_scroller(setup[crsrpos].scroller, surf_screen, movementrate); // Update the surface SDL_Flip(surf_screen); fadetimer += movementrate / 8.2; } //We are leaving... check if activated setupptr = find_setup_entry("activate config?"); assert(setupptr); activate_config = setupptr->current; assert(activate_config >= 0 && activate_config <= 2); if(activate_config > 0) { setupptr->current = 0; //Activate setupptr = find_setup_entry("resolution"); assert(setupptr); if(setupptr->current > 0) { i = sscanf(setupptr->values[setupptr->current], "%dx%d", &xsize, &ysize); assert(i == 2); } setupptr = find_setup_entry("fullscreen"); assert(setupptr); opt_fullscreen = setupptr->current == 0 ? 1 : 0; //0=fullscreen, 1=no fullscrenn, qed. setupptr = find_setup_entry("spacedots"); assert(setupptr); opt_cicada_spacedots = setupptr->current; setupptr = find_setup_entry("music volume"); assert(setupptr); music_volume = atoi(setupptr->values[setupptr->current]); state = RESTART_GAME; } if(activate_config == 2) { save_setup(); } if(activate_config == 0) for(i = 0; i < SETUP_SIZE; ++i) setup[i].current = old_config[i]; play_tune(0); state_timeout = 496.69105; } uiff_ctx_t *get_iff_rock(const char *fname) { FILE *f = NULL; uiff_ctx_t *ctx = NULL; printf("Rockdodger data file is '%s'.\n", fname); if(!(f = fopen(fname, "r"))) { perror("Can not open rockdodger data-file"); } else if((ctx = uiff_from_file(f, FORM, MakeID('R', 'O', 'C', 'K'))) == NULL) { perror("No context"); fclose(f); } return ctx; } char *load_edition_name(uiff_ctx_t iff) { int32_t chunksize; char buf[33]; size_t bread; uiff_rewind_group(&iff); chunksize = uiff_find_chunk_ctx(&iff, MakeID('E', 'D', 'T', 'N')); assert(printf("FORM.ROCK EDTN size = %d\n", (int)chunksize)); if(chunksize < 0) { edition_name = strcpy(buf, "#UNKNOWN#"); } else { bread = fread(buf, 1, chunksize < sizeof(buf) - 1 ? chunksize : sizeof(buf) - 1, iff.f); assert(bread < sizeof(buf) - 1); buf[bread] = 0; } return strdup(buf); } rockdodger-1.1.4/spacedots.h0000644000175000017500000000502713706632107016303 0ustar krawczykkrawczyk#ifndef __SPACEDOTS_H__ #define __SPACEDOTS_H__ #include #include "config.h" #include "globals.h" #include "u-iff.h" /*! \brief Star background * * Space dots are harmless background items All are active. When one * falls off the edge, another is created at the start. */ struct spacedot { float x, dx; int y; RD_VIDEO_TYPE color; }; /*! \brief cicade spacedots data structure * * Contains all the information needed for displaying a nice star * background. */ struct cicada_spacedots_playfield { SDL_Surface *playfield; float speed; float pos; }; typedef struct { short type; union { struct { struct spacedot *spacedots; unsigned int num_spacedots; }; struct { struct cicada_spacedots_playfield *cicadadots; unsigned short num_cicada_playfields; }; }; } spacedots_t; /*! \brief Initialise space dots. * * The space dots engine is initialised and the information is written * into the spacedots_t union. * * \param surf_screen The surface which is displayed. * \param type 0 = normal spacedots, 1 = cicada spacedots * \param iff iff context for rockdodger data-file * \return 0 = failure, 1 = OK */ spacedots_t *init_space_dots_engine(SDL_Surface *surf_screen, short type, uiff_ctx_t iff); /*! \brief Draw the background * * This draws the background space dots and updates the coordinates at * the same time. It will chose the right function automatically. * * \param spacedots Spacedots engine * \param surf_screen The surface to draw on * \param s Surface to draw on. */ void draw_space_dots(spacedots_t *spacedots, SDL_Surface *surf_screen); /*! \brief Cicada star background * * This function takes its parameters from the global variables xsize * and ysize. The returned function is actually * draw_cicada_spacedots(). * * \param surf_screen The surface which is displayed. * \param spacedots Structure to be initialised. * \return 0 = failure, 1 = OK */ int init_cicada_spacedots(spacedots_t *spacedots, SDL_Surface *surf_screen); /*! \brief Draw cicada spacedots. * * Draw different layers of spacedots into the surface. * * \param spacedots Spacedots engine * \param surf_screen surface to draw on */ void draw_cicada_dots(spacedots_t *spacedots, SDL_Surface *surf_screen); /*! \brief Destroy cicada spacedots engine. * * Destroy the spacedots engine and free the memory. It will also set * the type field to -1. A NULL pointer is just ignored. * * \param spacedots Spacedots engine */ void destroy_space_dots(spacedots_t *spacedots); #endif rockdodger-1.1.4/greeblies.h0000644000175000017500000000433413706632107016257 0ustar krawczykkrawczyk#ifndef __GREEBLIES_H__ #define __GREEBLIES_H__ #include #include "globals.h" #include "datafun.h" /*! \brief Structure describing a Greeble */ struct greeble { int active; //!< This is set nonzero if the greeblie is active (drawn, moving). float x, y; //!< When landed, these represent an offset from the host rock other coordinates on the screen. int target_rock_number; //!< The number of the rock the greeblie is flying to. Cross reference with use rock_struct.greeb. int landed; //!< Has the greeblie landed? int boredom; //!< Goes up while landed. /*! \brief Counter to the displayed image of the greeble. * * Every frame we increment this counter and divide it by three the * get the surface for drawing. See display_greeb. This must be a * float so that we can work with movementrate. */ float imgcnt; }; extern struct greeble *the_greeblies; //!< The greeblies extern sdl_surfaces_t *surf_greeblies; //! The greeblie images for a greeblie animation. /*! \brief initialise greeblies * * Initialise greeblies, must be called first. * * \return NULL pointer on error, != NULL if everything was ok (do not * use this pointer!) */ void *init_greeblies(); /*! \brief Shutdown the greeblie engine * * Memory is freed and never call any of the other functions after * this function has been called. */ void shutdown_greeblies(); /*! \brief Activate a single greeble * * \param g pointer to a greeble structure which will be activated */ void activate_greeblie(struct greeble *g); /*! \brief Deactivate all greeblies * * Will deactivate and remove all greeblies from screen. */ void deactivate_greeblies(); /*! \brief activate a single greeble * * A greeble is activated and is flying to its rock. */ void activate_one_greeblie(); /*! \brief display a greeble * * Displays a single greeble. * * \param g pointer to a greeble structure * \param surf_screen Surface to draw on */ void display_greeb(struct greeble *g, SDL_Surface * surf_screen); /*! \brief kill a greeble * * \param hitgreeb Index of the killed greeble */ void kill_greeb(int hitgreeb); /*! \brief Move all the greeblies * * Move all greeblies to their corresponding rocks. */ void move_all_greeblies(); #endif rockdodger-1.1.4/blubats.c0000644000175000017500000003620613706632107015750 0ustar krawczykkrawczyk#include "globals.h" #include "blubats.h" #include "sparkles.h" #include "guru_meditation.h" #include "highscore_io.h" #include "random_gen.h" #include "ship.h" #include "sprite.h" #include "sound.h" #include #include #include #include #ifdef DEBUG #include #endif //! Maximum number of blubat droppingss #define MAX_BLUBAT_DROPPINGS 24 // Maximum number of possible doctrines #define MAX_DOCTRINES 16 // Maximum length of any doctrine (to help detect runaway arguments) #define MAX_DOCTRINE_LENGTH 8 static float blubat_attack_prob = 0.99862; //!< 1 - attack probability static int max_blubats = 7; //!< maximum number of blubats /*! \brief positions for "spline" in doctrine */ struct doctrine_pos { float x[4]; //!< The X positions float y[4]; //!< The Y positions }; /*! \brief a doctrine * * A doctrine consists of doctrine positions and a size. */ struct doctrine { struct doctrine_pos *positions; //!< pointer to position array unsigned size; //!< number of elements }; struct doctrine doctrines[MAX_DOCTRINES]; //!< array with doctrines unsigned int number_of_doctrines = 0; //!< how many doctrines do we have? /*! \brief Structure describing a Blubat */ struct blubat { struct sprite sprite; struct doctrine *doctrine; //!< pointer to doctrine position array unsigned int docpos; //!< position in doctrine float t; //!< parameter for "spline": t in [0..1] float x; //!< last valid x position float y; //!< last valid y position float attack_probability; //!< probability of an attack short loaded_droppings; //!< number of droppings a blubat has }; /*! \brief Blubat dropping */ struct blubat_dropping { float x; //!< last valid x position float y; //!< last valid y position float dx; //!< velocity, x component float dy; //!< velocity, y component struct sprite sprite; }; //------------------------------------------------------------------ static struct doctrine_pos doctrine0[] = { {{-0.2, 2, -1, 1.2}, {-0.2, 1, 1, -0.2}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine1[] = { {{-0.3, 1.4, -0.4, 1.2}, {-0.3, 0, 1, 1.2}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine2[] = { {{1.2, -0.5, 1.5, -0.2}, {1, 0, 0, 1}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine3[] = { {{1.2, 1, 0, -0.2}, {1, 0, 0, 1}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine4[] = { {{-0.2, 1, 1, 0.5}, {-0.2, 0, 1, 1.2}}, {{0.5, 0, 0, 1.5}, {1.2, 1, 0, 0.5}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine5[] = { {{0.4, 0.6, 0.8, 0.3}, {1.2, -1.4, 2.4, -0.4}}, {{0.3, 0.7, 0.3, -0.5}, {-0.4, 0.8, 1.3, 0.33}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine6[] = { {{-0.2, 1.6, 0.8, 0.7}, {0.2, 0.2, 0.5, 1.4}}, {{0.7, 0.7, 1.1, -0.2}, {1.4, -0.8, 1.1, 0.8}}, {{-0.2, 0.6, 0.7, -0.2}, {0.8, 0.7, 0.3, 0.4}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine7[] = { {{-0.2, 2.2, 0.8, -0.1}, {0.6, 0.5, 0.9, 1.1}}, {{666}, {NAN}} }; static struct doctrine_pos doctrine8[] = { {{0.55, 1.4, -0.4, 0.45}, {-0.1, 0.6, 0.6, -0.1}}, {{0.55, 1.1, -0.1, 0.35}, {-0.1, 1.6, 1.6, -0.1}}, {{0.35, 0.1, 0.1, 0.3}, {-0.1, 1.3, -1.1, -0.1}}, {{0.35, 0.2, 0.2, -0.1}, {-0.1, 0.6, 0.7, 0.7}}, {{666}, {NAN}} }; sdl_surfaces_t *surf_blubats; static struct blubat *blubats; static struct blubat *blu_end; static sdl_surfaces_t *surf_blubat_droppings; static struct blubat_dropping blubat_droppings[MAX_BLUBAT_DROPPINGS]; static struct blubat_dropping *bludrop_end = blubat_droppings; static float calc_doctrine(float t, const float pos[4]) { float t_ = 1 - t; float t_2 = t_ * t_; float t_3 = t_2 * t_; float t2 = t * t; float t3 = t2 * t; assert(pos != NULL); return pos[0] * t_3 + 3 * pos[1] * t_2 * t + 3 * pos[2] * t_ * t2 + pos[3] * t3; } #ifdef DEBUG static const char *doctrine2str(struct doctrine_pos *d) { static char buf[128]; float *x = d->x; float *y = d->y; sprintf(buf, "(%.6e, %.6e), (%.6e, %.6e), (%.6e, %.6e), (%.6e, %.6e)", *x, *y, x[1], y[1], x[2], y[2], x[3], y[3] ); return buf; } static struct doctrine_pos *str2doctrine(const char *docstr) { int i; struct doctrine_pos *d = malloc(sizeof(struct doctrine_pos)); float *x = d->x; float *y = d->y; if(d) { i = sscanf(docstr, "(%e, %e), (%e, %e), (%e, %e), (%e, %e)", x, y, x + 1, y + 1, x + 2, y + 2, x + 3, y + 3); if(i != 8) { free(d); d = NULL; } } return d; } #endif /* * FORM.ROCK FORM.BBAT is a FORM chunk with further data for blubats. * * . . APBB attack probability for blubats * 0000 UWORD (1-probability)*65535 * * . . PARA Blubat parameter * 0000 UWORD maximum number of blubats */ void *init_blubats(uiff_ctx_t iff) { unsigned int i; struct doctrine_pos **docarrptr; struct doctrine_pos *docptr; static struct doctrine_pos *doc_pos_arrs[] = { doctrine0, doctrine1, doctrine2, doctrine3, doctrine4, doctrine5, doctrine6, doctrine7, doctrine8 }; int32_t size; size = uiff_find_group_ctx(&iff, IFF_FIND_REWIND, FORM, MakeID('B', 'B', 'A', 'T')); assert(printf("FORM.BBAT size = $%08X\n", size)); if(size >= 0) { if((size = uiff_find_chunk_ctx(&iff, MakeID('A', 'P', 'B', 'B'))) >= 2) { //Chunk found and it is long enough... i = read16(iff.f); assert(printf("FORM.BBAT APBB size = $%08X i = $%08X\n", size, i)); blubat_attack_prob = 1 - (i / (float)((1 << 16) - 1)); assert(printf("\tnew attack probability is %e\n", blubat_attack_prob)); } size = uiff_find_chunk_wflags(&iff, MakeID('P', 'A', 'R', 'A'), IFF_FIND_REWIND); assert(printf("FORM.BBAT PARA size = $%04X\n", (int)size)); if(size >= 2) { max_blubats = read16(iff.f); assert(printf("\tmax_blubats = %d\n", max_blubats)); } } else { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_blubats | GM_SS_BootStrap | GM_GE_OpenRes, &init_blubats); return NULL; } blubats = calloc(max_blubats, sizeof(struct blubat)); if(!blubats) { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_blubats | GM_SS_BootStrap | GM_GE_NoMemory, &blubats); return NULL; } else blu_end = blubats; number_of_doctrines = 0; for(i = 0; i < max_blubats; ++i) { blubats[i].doctrine = NULL; } if((surf_blubats = load_images_ck("blubat.%02hx.xpm", -1, -1, -1)) == NULL) { guru_alert(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError, (void*)0x4242); return NULL; } if((surf_blubat_droppings = load_images_ck("bb-dropping.%02hx.xpm", -1, -1, -1)) == NULL) { guru_alert(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError, (void*)0x42424452); return NULL; } for(docarrptr = doc_pos_arrs; docarrptr < doc_pos_arrs + sizeof(doc_pos_arrs) / sizeof(struct doctrine_pos *); ++docarrptr) { docptr = *docarrptr; for(i = 0; i < MAX_DOCTRINE_LENGTH; ++i) { if(docptr[i].x[0] == 666 || docptr[i].y[0] == NAN) { assert(number_of_doctrines < MAX_DOCTRINES); doctrines[number_of_doctrines].size = i; doctrines[number_of_doctrines++].positions = docptr; #ifdef DEBUG printf("doctrine %ld ptr=%p, size=$%02X\n", docarrptr - doc_pos_arrs, docptr, i); #endif break; } } assert(i < MAX_DOCTRINE_LENGTH); } assert(number_of_doctrines != 0); return docarrptr; } /*! \brief Check if a float is smaller then epsilon. * * If f is smaller than epsilon it will be set to epsilon * * \param f pointer to a float, can be modifiedchanged * \param epsilon value to check for */ static inline void no_smaller_than(float *f, float epsilon) { assert(epsilon > 0); if(fabsf(*f) < epsilon) { *f = *f < 0 ? -epsilon : epsilon; } } static void activate_one_dropping(const struct blubat *blubat) { if(bludrop_end - blubat_droppings >= MAX_BLUBAT_DROPPINGS) return; struct blubat_dropping *bptr = bludrop_end++; float x = blubat->x; float y = blubat->y; const float maxdx = 35; const float maxdy = 30; bptr->x = x; bptr->y = y; bptr->dx = (shipdata.xship + surfaces_ship->surfaces[0]->w / 2 - x) / 51.1; if(bptr->dx > maxdx) { x = bptr->dx / maxdx; //Scaling factor, otherwise our blubats always miss... bptr->dx = maxdx; bptr->dy *= x; } bptr->dy = (shipdata.yship + surfaces_ship->surfaces[0]->h / 2 - y) / 51.1; if(bptr->dy > maxdy) { y = bptr->dy / maxdy; //Scaling factor bptr->dx *= y; bptr->dy = maxdy; } //If droppings are too slow, speed them up (otherwise they never leave the screen) no_smaller_than(&bptr->dx, 0.15); no_smaller_than(&bptr->dy, 0.15); init_sprite2(&bptr->sprite, surf_blubat_droppings, 130, last_ticks); } int activate_one_blubat() { if(blu_end - blubats >= max_blubats) return 0; struct blubat *bptr = blu_end++; bptr->doctrine = doctrines + (unsigned) (rnd() * number_of_doctrines); bptr->docpos = 0; bptr->attack_probability = blubat_attack_prob; bptr->loaded_droppings = rnd() * 3 + 1; bptr->t = 0; bptr->x = calc_doctrine(0, bptr->doctrine->positions->x) * xsize; bptr->y = calc_doctrine(0, bptr->doctrine->positions->y) * ysize; init_sprite2(&bptr->sprite, surf_blubats, 100, last_ticks); #ifdef DEBUG unsigned i; printf("bptr=%p blu_end=%p doctrine=%p x=%9.4e y=%9.4e\n", bptr, blu_end, bptr->doctrine, bptr->x, bptr->y); for(i = 0; i < bptr->doctrine->size; ++i) { printf("\t%s\n", doctrine2str(bptr->doctrine->positions + i)); } #endif return 1; } int check_blubat_hit(int ylaser, int maxx) { struct blubat *bluptr; for(bluptr = blubats; bluptr < blu_end; ++bluptr) { //Just to be sure... if((bluptr->doctrine) == NULL) continue; float x = bluptr->x; float y = bluptr->y; if(ylaser >= y && ylaser < y + 16) { if(x <= maxx && shipdata.xship < x) { #ifdef DEBUG printf("bluptr=%p blu_end=%p ylaser=%d maxx=%d x=%e y=%e\n", bluptr, blu_end, ylaser, maxx, bluptr->x, bluptr->y); #endif return bluptr - blubats; } } } return -1; } void deactivate_all_blubats(void) { blu_end = blubats; } static void display_droppings(SDL_Surface * surf_screen) { float x, y; struct blubat_dropping *dropptr; for(dropptr = blubat_droppings; dropptr < bludrop_end; ++dropptr) { x = dropptr->x; y = dropptr->y; draw_sprite(&dropptr->sprite, x, y, surf_screen, last_ticks); } } void display_blubats(SDL_Surface * surf_screen) { struct blubat *bluptr; float x, y; for(bluptr = blubats; bluptr < blu_end; ++bluptr) { if((bluptr->doctrine) != NULL) { x = bluptr->x; y = bluptr->y; draw_sprite(&bluptr->sprite, x, y, surf_screen, last_ticks); } } display_droppings(surf_screen); } void kill_blubat(unsigned int hit) { struct blubat *bluptr = blubats + hit; int x = (int) bluptr->x; int y = (int) bluptr->y; bluptr->doctrine = NULL; play_sound(1 + (int) (rnd() * 3)); makebangdots(x, y, 0, 0, get_current_sprite_surface(&bluptr->sprite, last_ticks), 15, 1); inc_score(x, y, BLUBAT_KILL_POINTS); } static void move_all_droppings() { float x, y; struct blubat_dropping *bptr; struct blubat_dropping *target = blubat_droppings; for(bptr = blubat_droppings; bptr < bludrop_end; ++bptr) { x = bptr->x + bptr->dx * movementrate; y = bptr->y + bptr->dy * movementrate; if(x > xsize || y > ysize || x < -surf_blubat_droppings->surfaces[0]->w || y < -surf_blubat_droppings->surfaces[0]->h) continue; bptr->x = x; bptr->y = y; if(target != bptr) { *target = *bptr; } ++target; } bludrop_end = target; } void move_all_blubats() { struct blubat *bluptr; float t; for(bluptr = blubats; bluptr < blu_end; ++bluptr) { //We have to check as a blubat may be killed already! if((bluptr->doctrine) == NULL) { #ifdef DEBUG printf("bluptr=%p blu_end=%p x=%e y=%e, swapping with ", bluptr, blu_end, bluptr->x, bluptr->y); #endif /* * Reduce end pointer until it is the current one (we are done * then) or reduce end pointer if this is also a NULL doctrine. */ while(--blu_end != bluptr) { if(blu_end->doctrine != NULL) break; } #ifdef DEBUG printf("blu_end=%p\n", bluptr); #endif //Copy the old end to the current one. if(bluptr < blu_end) { *bluptr = *blu_end; } else { break; //The whole loop as we are done now. } assert(blu_end >= bluptr); } t = bluptr->t + 1.0 / 200 * movementrate; if(t <= 1.0) { assert(bluptr->doctrine != NULL); bluptr->x = calc_doctrine(t, bluptr->doctrine->positions[bluptr->docpos].x) * xsize; bluptr->y = calc_doctrine(t, bluptr->doctrine->positions[bluptr->docpos].y) * ysize; bluptr->t = t; } else { //Get next part of the spline! //Set time to beginning again. bluptr->t = 0; //Get next spline part. if(++bluptr->docpos >= bluptr->doctrine->size) { //This was the last part, remove this blubat! bluptr->doctrine = NULL; } } //Check if blubat start to drop something if(bluptr->loaded_droppings > 0 && bluptr->x >= 0 && bluptr->x < xsize && bluptr->y >= 0 && bluptr->y < ysize) { if(rnd() >= bluptr->attack_probability) { --bluptr->loaded_droppings; activate_one_dropping(bluptr); play_sound(6 + (int) (rnd() * 4)); bluptr->attack_probability = blubat_attack_prob; //Reset attack probability } else { bluptr->attack_probability *= blubat_attack_prob; //Increase } } } move_all_droppings(); //See if http://www.ferzkopp.net/Software/SDL_gfx-2.0/ is of any help... /* * /usr/share/doc/libsdl-sge/html/index.html * /usr/share/doc/libsdl-gfx1.2-4/html/index.html */ //http://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/gfxsdl/tut4 } void shutdown_blubats(void) { #ifdef DEBUG unsigned i; printf("blubats=%p\n", blubats); for(i = 0; i < max_blubats; ++i) { printf("\t%cblubat[%X]: doctrine=%p docpos=%03X t=%12.6e x=%e y=%e\n", blubats + i < blu_end ? '!' : ' ', i, blubats[i].doctrine, blubats[i].docpos, blubats[i].t, blubats[i].x, blubats[i].y); } printf("blu_end=%p\n", blu_end); #endif free(blubats); destroy_sdl_surfaces(surf_blubats); destroy_sdl_surfaces(surf_blubat_droppings); } #ifdef IAMMAIN int main(int argc, char **argv) { float x, y, t; int i; FILE *f; //cc -D IAMMAIN blubats.c -lSDL -lSDL_mixer -lSDL_image random_gen.o globals.o sprite.o sound.o bangdots.o datafun.o ship.o highscore_io.o struct doctrine_pos doctrine0 = { {-1, 2, -2, 1}, {-1, 1, 1, -1} }; struct doctrine_pos dtemp; float xs[10]; float *x_ptr = xs; //i = sscanf("(0.1, -0.2), (0.3, 0.4)", "(%e, %e), (%e, %e)", x_ptr++, x_ptr++, x_ptr++, x_ptr++); i = sscanf("(0.1, -0.2), (0.3, 0.4)", "(%e, %e), (%e, %e)", xs, xs + 1, xs + 2, xs + 3); printf("i=%d %e %e %e %e\n", i, xs[0], xs[1], xs[2], xs[3]); printf("%s\n", doctrine2str(&doctrine0)); /* * for(i = 0; i <= 40; ++i) { * t = i / 40.0; * x = calc_doctrine(t, doctrine3_1.x); * y = calc_doctrine(t, doctrine3_1.y); * printf("%e %e %e\n", t, x, y); * } * for(i = 0; i <= 40; ++i) { * t = i / 40.0; * x = calc_doctrine(t, doctrine3_2.x); * y = calc_doctrine(t, doctrine3_2.y); * printf("%e %e %e\n", t + 1, x, y); * } */ f = fopen("input.iff", "r"); if(f) { printf("%p\n", f); } return 0; } #endif rockdodger-1.1.4/infoscreen.c0000644000175000017500000000424413706632107016444 0ustar krawczykkrawczyk#include "infoscreen.h" #include #include "SFont.h" /* * This was written while traveling in France on my pandora. Any * errors are due to the roads, etc. And the nice red vine, of * course... */ static struct { } data = { }; short int infoscreen_is_initialised = 0; int infoscreen_enabled = 1; int infoscreen_linespacing = 24; /* * FORM.ROCK IFSC is the chunk with information about the infoscreen. * * . IFSC info screen * 0000 UBYTE active? 1=yes, 0=0 * 0001 UBYTE pad * 0002 UWORD line spacing in px. */ void *init_infoscreen(uiff_ctx_t iff) { int32_t chunksize; uint16_t ui16; int i; chunksize = uiff_find_chunk_wflags(&iff, MakeID('I', 'F', 'S', 'C'), IFF_FIND_REWIND); assert(printf("FORM.ROCK IFSC size = $%08lX\n", (unsigned long int)chunksize)); if(chunksize >= 4) { i = fgetc(iff.f); if(i == 1) infoscreen_enabled = 1; else infoscreen_enabled = 0; i = fgetc(iff.f); //Padding ui16 = read16(iff.f); assert(printf("\tline spacing is $%04hX\n", ui16)); infoscreen_linespacing = ui16; } infoscreen_is_initialised = 0x7353; return &data; } void display_infotext(const struct Entry *entries, SDL_Surface *display) { SDL_Rect dest; int x, y, i; int columny[INFOSCRCREEN_MAX_COLUMNS]; int columnx[INFOSCRCREEN_MAX_COLUMNS]; assert(infoscreen_is_initialised); assert(entries); assert(display); for(i = 0; i < INFOSCRCREEN_MAX_COLUMNS; ++i) { columnx[i] = 21 + (display->w - 42) / 3 * i; columny[i] = 72; } for(; entries->text; ++entries) { x = entries->posx; y = entries->posy; if(entries->column >= 0) { assert(entries->column < INFOSCRCREEN_MAX_COLUMNS); x = columnx[entries->column]; y = columny[entries->column] += infoscreen_linespacing; } PutString(display, x + 48, y, entries->text); switch(entries->icontype) { case INFONONE: break; case INFOICON: if(entries->icon) { dest.x = x; dest.y = y; SDL_BlitSurface(entries->icon, NULL, display, &dest); } break; case INFOFUNP: assert(entries->icondisplayfun); dest.x = x; dest.y = y; (entries->icondisplayfun)(display, &dest); break; } } } rockdodger-1.1.4/signal_handling.c0000644000175000017500000000304013706632107017423 0ustar krawczykkrawczyk#include #include #include "guru_meditation.h" /*! \brief end game prematurely * * \param code return code, exit is called with 128 + code */ static void prematurely_quit_game(int code) { SDL_Quit(); exit(128 + code); } static struct sigaction old_sa_structs[32]; static void handlesignal(int signal, siginfo_t *si, void *unused) { SDL_Surface *scr; #ifdef DEBUG fprintf(stderr, "signal=%d si=%p ctx=%p\n", signal, si, unused); #endif if((scr = SDL_GetVideoSurface()) != NULL) { guru_meditation(GM_FLAGS_DEADEND | GM_FLAGS_ABORTIFY, signal, si->si_addr); switch(signal) { case SIGHUP: case SIGINT: case SIGILL: case SIGTRAP: case SIGBUS: case SIGSEGV: case SIGTERM: case SIGCHLD: case SIGURG: case SIGSYS: old_sa_structs[signal].sa_sigaction(signal, si, unused); default: abort(); } } prematurely_quit_game(signal); } void set_signalhandling_up(void) { struct sigaction sa; int i; int signums[] = { SIGHUP, SIGINT, SIGQUIT, SIGILL, SIGTRAP, SIGBUS, SIGFPE, SIGUSR1, SIGUSR2, SIGTERM, SIGCHLD, SIGURG, SIGSYS }; sa.sa_flags = SA_SIGINFO; sigemptyset(&sa.sa_mask); sa.sa_sigaction = handlesignal; for(i = 0; i < sizeof(signums)/sizeof(int); ++i) { if(sigaction(signums[i], &sa, old_sa_structs + signums[i]) == -1) abort(); //Nothing to be done here... } #ifndef DEBUG //Just too useful: catchsegv, etc. i = SIGSEGV; if(sigaction(signums[i], &sa, old_sa_structs + signums[i]) == -1) abort(); //Nothing to be done here... #endif } rockdodger-1.1.4/engine_exhaust.h0000644000175000017500000000143113706632107017317 0ustar krawczykkrawczyk#ifndef __ENGINE_EXHAUST_H__ #define __ENGINE_EXHAUST_H__ //! Engine dots stream out the back of the ship, getting darker as they go. struct enginedots { float x, y, dx, dy; // The life of an engine dot // is a number starting at between 0 and 50 and counting backward. float life; // When reduced to 0, kill }; /*! \brief Initialise engine dots * * This function can also be used to remove all engine dots as it only * resets the engine-dot pointers. */ void init_engine_dots(); /*! \brief draw engine exhaust dots * * Function to draw the exhaus effect. Draws the particles on the supplied surface. * * \param s surface to draw on */ void draw_engine_dots(SDL_Surface *s); void create_engine_dots(int newdots); void create_engine_dots2(int newdots, int m); #endif rockdodger-1.1.4/mood_item.h0000644000175000017500000000057313706632107016273 0ustar krawczykkrawczyk#ifndef __MOOD_ITEM_H__ #define __MOOD_ITEM_H__ #include #include "u-iff.h" /*! \brief Initialise mood items * * \param iff IFF context * \return NULL on error, else return mood-item icon */ SDL_Surface *init_mood_item(uiff_ctx_t iff); void draw_mood_item(SDL_Surface *target); /*! \brief destroy mood item subsystem */ void destroy_mood_item(void); #endif rockdodger-1.1.4/highscore_io.c0000644000175000017500000001176413706632107016760 0ustar krawczykkrawczyk#include #include #include #include #include #include "config.h" #include "globals.h" #include "highscore_io.h" #include "SFont.h" // High score table struct highscore high[MAXIMUM_HIGH_SCORE_ENTRIES] = { {13000, "Pad", 2, 0}, {12500, "Pad", 2, 0}, {6500, "RPK", 1, 0}, {5000, "RPK", 1, 0}, {3000, "Pad", 1, 0}, {2500, "RPK", 1, 0}, {2000, "Pad", 1, 0}, {1500, "RPK", 1, 0} }; long score = 0; int scorerank = -1; char name_input_buf[512]; static const char *HIGHSCORE_HEADER_FORMAT = "rockdodger highscore %x\n"; static const int HIGHSCORE_VERSION = 6; FILE *hs_fopen(const char *mode) { mode_t mask; char s[1024]; FILE *f = NULL; s[sizeof(s) - 1] = '\0'; snprintf(s, sizeof(s) - 1, "%s/rockdodger.scores", GAMESDIR); mask = umask(0111); if((f = fopen(s, mode)) == NULL) { umask(0117); snprintf(s, sizeof(s) - 1, "%s/.rockdodger_high", getenv("HOME")); if((f = fopen(s, mode)) == NULL) { perror(s); fprintf(stderr, "Could not open highscore file '%s', mode '%s'!\n", s, mode); } } umask(mask); return f; } static int compare_highscore(const void *xptr, const void *yptr) { const struct highscore *x = xptr; const struct highscore *y = yptr; /* * See e.g.: * https://www.gnu.org/software/libc/manual/html_node/Comparison-Functions.html. The * negation is on purpose as we need the highest scores in the * beginning of the array. */ return -((x->score > y->score) - (x->score < y->score)); } void read_high_score_table() { FILE *f; int i, giveup = 0; if((f = hs_fopen("r")) != NULL) { // If the file exists, read from it if(fscanf(f, HIGHSCORE_HEADER_FORMAT, &i) == 1) { #ifdef DEBUG printf(HIGHSCORE_HEADER_FORMAT, i); #endif if(i == HIGHSCORE_VERSION) { #ifdef DEBUG char debugbuf[889]; long pos = ftell(f); if(fgets(debugbuf, sizeof(debugbuf), f) == NULL) { perror("fgets in read_high_score_table()"); } printf("next line pos=%04lX '%s'\n", pos, debugbuf); fseek(f, pos, SEEK_SET); #endif for(i = 0; i < MAXIMUM_HIGH_SCORE_ENTRIES && !giveup; ++i) { char s[1024]; long int highscore; int scanret; if(high[i].allocated) { free(high[i].name); high[i].allocated = 0; } scanret = fscanf(f, "%ld %1023[^\n]", &highscore, s); #ifdef DEBUG printf("i=%d scanret=%d pos=%04lX highscore=%5ld '%s'\n", i, scanret, ftell(f), highscore, s); #endif switch (scanret) { case 2: /* * The highscore name is truncated to 72 characters. This * will help in dealing with overlong lines and broken * highscore files. Normally you can not enter more than * (about) 40 characters anyway. */ high[i].name = strndup(s, 72); high[i].score = highscore; high[i].allocated = 1; break; case 1: high[i].name = ""; high[i].score = highscore; high[i].allocated = 0; break; default: giveup = 1; break; } } // Now sort the list in case it got garbled. qsort(high, MAXIMUM_HIGH_SCORE_ENTRIES, sizeof(struct highscore), compare_highscore); } } fclose(f); } } void write_high_score_table() { FILE *f; int i; if((f = hs_fopen("w")) != NULL) { // If the file exists, write to it fprintf(f, HIGHSCORE_HEADER_FORMAT, HIGHSCORE_VERSION); for(i = 0; i < MAXIMUM_HIGH_SCORE_ENTRIES; ++i) { fprintf(f, "%ld %s\n", high[i].score, high[i].name); } fclose(f); } /* #ifdef DEBUG */ /* FILE *debugfile = fopen("$HIGHSCORE:MEMORY", "w"); */ /* if(debugfile) { */ /* fwrite(high, sizeof(name_input_buf), 1, debugfile); */ /* fseek(debugfile, 0x1000, SEEK_SET); */ /* fwrite(high, sizeof(struct highscore), MAXIMUM_HIGH_SCORE_ENTRIES, debugfile); */ /* for(i = 0; i < MAXIMUM_HIGH_SCORE_ENTRIES; ++i) { */ /* fseek(debugfile, 0x2000 + 0x0100 * i, SEEK_SET); */ /* fwrite(high[i].name, sizeof(char), 0x0100, debugfile); */ /* } */ /* fclose(debugfile); */ /* } */ /* #endif */ } void inc_score(int x, int y, long dscore) { score += dscore; } long clear_score(void) { long old = score; score = 0.0; return old; } void game_over() { int i; clearBuffer(); state_timeout = 5.0e6; if(score >= high[MAXIMUM_HIGH_SCORE_ENTRIES - 1].score) { // Read the high score table from the storage file read_high_score_table(); // Find ranking of this score, store as scorerank for(i = 0; i < MAXIMUM_HIGH_SCORE_ENTRIES; ++i) { if(high[i].score <= score) { scorerank = i; break; } } // Lose the lowest name forever (loser!) if(high[MAXIMUM_HIGH_SCORE_ENTRIES - 1].allocated) { high[MAXIMUM_HIGH_SCORE_ENTRIES - 1].allocated = 0; free(high[MAXIMUM_HIGH_SCORE_ENTRIES - 1].name); } // Move all lower scores down a notch for(i = MAXIMUM_HIGH_SCORE_ENTRIES - 1; i > scorerank; --i) { high[i] = high[i - 1]; } // Insert blank high score high[scorerank].score = score; high[scorerank].name = ""; high[scorerank].allocated = 0; } } rockdodger-1.1.4/sekrit_lab.c0000644000175000017500000001157013706632107016430 0ustar krawczykkrawczyk#include #include #include #include "sekrit_lab.h" #include "guru_meditation.h" #include "SFont.h" #include "datafun.h" #include "laser.h" #include "random_gen.h" #include "globals.h" #include "sparkles.h" #include "yellifish.h" /*! \brief Perform one of the tests. * * For debugging only! * * \return 0 = no valid test found, otherwise 1 */ int perform_a_sekrit_test(char *arg) { SDL_Event event; int running = 1; printf("Looking for test '%s'...\n", arg); movementrate = 1.0; if(strcmp(arg, "guru") == 0) { SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0, 0x55, 0xAA)); printf("guru_display() = %d\n", guru_display_gp(surf_screen, GM_FLAGS_AUTOTIMEOUT | 2, 3, (void*)0xDEADBEA1, "Greeblies at work...")); printf("guru_display() = %d\n", guru_display_gp(surf_screen, GM_FLAGS_AUTOTIMEOUT| 1 | GM_FLAGS_CHOICE, 3, (void*)0xDEADBEA1, "Alert! This needs still a lot of work!")); printf("guru_display() = %d\n", guru_display_gp(surf_screen, GM_FLAGS_AUTOTIMEOUT | 0, 4, (void*)0xAA55AA55, "Normal...")); printf("guru_meditation() = %d\n", guru_meditation(GM_FLAGS_DEADEND | GM_FLAGS_EXIT_VIA_TERM, 0x48454c50, (void*)0x68656c70)); return 1; } else if(strcmp(arg, "yellifish") == 0) { yellifish_t yelli1, yelli2, yelli3; yellifishsubsystem_t *ysys = init_yellifish_subsystem(*iff_ctx); init_yellifish(ysys, &yelli1, 100, 80); init_yellifish(ysys, &yelli2, 150, 70); init_yellifish(ysys, &yelli3, 250, 80); while(running) { while(SDL_PollEvent(&event)) { if(event.type == SDL_MOUSEBUTTONDOWN) running = 0; } SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0, 0, 0)); display_yellifish(ysys, &yelli1, surf_screen); display_yellifish(ysys, &yelli2, surf_screen); display_yellifish(ysys, &yelli3, surf_screen); SDL_Flip(surf_screen); SDL_Delay(60); } SDL_Flip(surf_screen); SDL_Delay(2600); return 1; } else if(strcmp(arg, "laserpointer") == 0) { float positions[10]; float speeds[10]; int i; int ysize2 = ysize / 2 - 3; for(i = 0; i < 10; ++i) { speeds[i] = rnd() / 100; positions[i] = 0; } while(running) { if(SDL_PollEvent(&event) != 0 && event.type == SDL_MOUSEBUTTONDOWN) running = 0; SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0, 0, 0x13)); for(i = 0; i < 10; ++i) { draw_random_dots(surf_screen, sinf(positions[i]) * ysize2 + ysize2 + 1, 0, xsize); positions[i] += speeds[i]; } SDL_Flip(surf_screen); SDL_Delay(60); } return 1; } else if(strcmp(arg, "sparkles") ==0) { int i, j; float x; RD_VIDEO_TYPE *rawpixel; while(running) { if(SDL_PollEvent(&event) != 0 && event.type == SDL_MOUSEBUTTONDOWN) running = 0; SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0, 0, 0x13)); SDL_LockSurface(surf_screen); rawpixel = (RD_VIDEO_TYPE *) surf_screen->pixels; for(i = 0; i < xsize; ++i) { x = i / (xsize - 1.0); for(j = 10; j < 50; ++j) { rawpixel[surf_screen->pitch / sizeof(RD_VIDEO_TYPE) * j + i] = (RD_VIDEO_TYPE)get_life_colour(x, &hot_colours, surf_screen); } for(j = 110; j < 150; ++j) { rawpixel[surf_screen->pitch / sizeof(RD_VIDEO_TYPE) * j + i] = (RD_VIDEO_TYPE)get_life_colour(x, &cool_colours, surf_screen); } } SDL_UnlockSurface(surf_screen); SDL_Flip(surf_screen); SDL_Delay(60); } return 1; } else if(strcmp(arg, "key_lab") ==0) { unsigned int event_nr = 0, k; unsigned int row = 0; char buf[30][128]; SDL_Rect rect = { 0, 0, surf_screen->w, 20 }; restart_game(); assert(surf_screen != NULL); assert(surf_green_block != NULL); memset(buf, 0, sizeof(buf)); while(running) { while(SDL_PollEvent(&event) == 1) { row = event_nr % 30; switch(event.type) { case SDL_QUIT: running = 0; break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: sprintf(buf[row], "button=%d state=%d x=$%04hX y=$%04hX", event.button.button, event.button.state, event.button.x, event.button.y); break; case SDL_KEYDOWN: case SDL_KEYUP: sprintf(buf[row], "state=%d sym=$%04X", event.key.state, event.key.keysym.sym); break; case SDL_MOUSEMOTION: //Ignore this one... --event_nr; break; default: sprintf(buf[row], "event_nr = $%x, event.type = $%x", event_nr, (unsigned int)event.type); } ++event_nr; } SDL_FillRect(surf_screen, NULL, SDL_MapRGB(surf_screen->format, 0xf, 0, 0xf)); SDL_SetAlpha(surf_green_block, SDL_SRCALPHA, (int) (129 + 66 * sinf(fadetimer))); rect.y = row * 20; SDL_BlitSurface(surf_green_block, NULL, surf_screen, &rect); for(k = 0; k < 30; ++k) { PutString(surf_screen, 12, k * 20, buf[k]); } SDL_Flip(surf_screen); SDL_Delay(50); fadetimer += .192; } return 1; } puts("Not found!"); return 0; } rockdodger-1.1.4/data/0000755000175000017500000000000013706632107015052 5ustar krawczykkrawczykrockdodger-1.1.4/data/xbad.aiff0000644000175000017500000004714613706632107016633 0ustar krawczykkrawczykFORMN^AIFFCOMM&@ AUTHST-15?ANNOmodifiedSSNDMݍݑ݌ݎ߱߹߱&IrM 0qP F $黫fYKbݾ' 3!##%2݋/1g2 yZ  8с܁ՁځԒX݇߁ҁۆژśO؁ցفגRKفׁؘţɁׁڃ݇ݔ U Oz? -C !23-'a#08888838888888888888888888888888888888888888888888888888888*283  !  x]p~݋-ƽRݎ-Pԁۚ3mSt֍Pځׁׁ؁؁ׁفՁځׁց܁сЍTԁہԄD݁؁טÒX҂ցׁ۝ǻ)~OΠ6 (vBq]<݊ H@݋: r[S;;  4    Z  F8   :  88(58w -8-(28/>%;!+88'Y808883 "S,c888858888884 888788'W6k!82!4C8882"V8 8888-8888{888'Y(8-! m_-3( 8883 o 886f1+ 8 ݕ(V yVQ!8m2883ݕ 8%4ݍفՁۘ mݑLځ݊U -3|8873r!83ԄR6cʣ!"R ݍ 887ݏ78"Wn2788݌1-  "X;=-888 6/K-8:zr}:ƌ ݖ 5݌ \|Q J ~ F ݯ-݋랆ݑF ݈݉ ݐ.-Lࣀ b߁؁ځԒU 7 ݏݍ( 879(݌/ !86e6 4288߻*R 88 ݑ, 8888} & 88"P4 ' *98-x - # 8 --388-w "\8 8288-888-\ )2887-3 i;883O 888883{ʺo-88"Sݐݎ -888"S;ݒ݋ %8"S {/86e83􀇐"W(3 :L8888 i<#8( < -888 g188* 888-  !088{ !,_-38-88+388"TS-! | /(L  'Y-ܯٻ*S - ꯳+ /0Ly 0|v'[ zQԁޣ}-3"Yأ YY,c N28* 0!"Z 8 88 h+8388-  (-6j(;F> -)8- z (S  28  , 0-V -8-88݌)T887ԒV /# 8I9 -88 i·V +\(1b(.1{뉏C7 2c(OɫU 2jb٤ɬ k7 ]tb 2F f;Q 0~S9:0< -M(R 2f2j (CO(12f + _ L  (32d2fjʫ2h2f#M@ *#2g1 ۈM  ~%(2f0{cl{9 2j{ ;9$ 2e0|G p ~T P}¦C82i2e ,8 # }!: $W/ (0 (02f+am8 2`2m &RT*1(+2n2^- 02c( (2d2g*2f2g2h#32i2e %2f2f(O (.( ]| $  -O2c- ©2c2k(6{363Z0N" K!  X '$B1|21ØE\0!1~ 0;  .-)0~t3Q (d"': "4+*n G, !]iޱ# N˛9R xq ! Q50C'\**W&.&uӣ "M 'ff! % 'D. 0:72')08:n F!e/7$=/7#p>, "f6/:6!SI(.L+t n0;2Ԅod +- ǚYAGOW`4c  vǰ$#@#R!*C$j ;@ $ G60k>KA0:#T$* x1R=8\ e"];p'! l&( <C!w[<C%/9-?6@BI)qi'8%J-')74W /wAu_eg<0Z! &415hB+#äIP,19bU]U'9# 5 g>K؁S z~ 몷<ʺH& a] B8!9J- |![ ˆ&*1k) & ʿԘ)-q ->pا_38\_g  T pOO24Ygc!WU ( '> )w@""! 2t-zB\URSG.6Amh.N `t68#|3Zŭ}.i XO7r @Nɶ*b#\݀ HSJACXΖ(6 &(p5"'Ჿ.:Hz# 0.^)BP'#".-#w'J6i7'P;M-6$<?@ !I$*`̿85[֤s !cs1* E]!+ J%a& " 7&-E:E@=t޶];M '`Y"''Db!''pioZ 1/-'(Vu#)Hn1GH$\dﳂźV @)ȝDݮ&LРuG c g f*r 5ܼGu;H =; ٍ]0: /D ,,vԧW2nڥ( #q g(/9"M8+^,1 " %+=&T:{ kE= 5B`z "3._ԝ`&#3y"+zВ~jek$>m&*5#M\* 8 v(y~n'.W=.^)3W;=% %0K?N'/wܢz!"e.+ $g _6}3>ɦ"s),7MZ\82 EpUG&WN u",j9Q G@3;NH$?:[63.o, FV)8~([ s0N2+&{ x) %śc66$ =2Q3Y Q+7' g@T%C0:3* (D:+*aFR9:#s>`Mb5c;"=GX 4,(d)R;Pɗ~ 6$ϲf.#|DB57l +#bݳ =q1N.z.A'ݑ_3Jv$BW%T?;3û6$b;Ri@ " %Q|)N /#{^B%@ Ly˴w\SD;Ѡ|1j"޵v&d,O.9y0 z<1T0؜q1 $` 8a 0bXDb #;e E '&/n40kp%K8i1]0 Q"2!^+Z'.<:o s : . p:"(θ*o  )(#ag" %Hb-" 4'X з0)⸤ h} W9@]M!Kإ[d\u[`p.?㊂4 ^IpD!gBi-ޢ7١ $ٶ ;0|e,$ߍvv 9.5};~BAH$aCmKm6j, C܍b&:%.b qPp< :;i#XΨFɱ?0 iz!Y6%)J*?/+"V _%?.%Q-d RZi=+o_A5CT3NUڶ mDsb:S5"'d 'w8ى'al*BSn6j@+ .n3(  ;Yj <87-<8DgmMYm/] l%i)nAe($\A  X5( B@y~*׶la8> hF'ʈQ4<"+͑ -$&~ 7(XE+#;4 &1,Ãa}{ Gz vi N b \ #& #%;A|uŷZa'Du23 ^~POR6-Q<LT;291j5O({ Prj 3g!d,% >N3z#r&\^ =#3 ?U]H$a{2= W6Ԉ&B Ҥi  $D4N^+~ N&) IJ3JMUSu%30()I8+3<+m'0P3еwC1wEB1,q&BfJP3nnTP|a]t o1,A  g׷SƮ 4 /$&Z_ yu" kp <}NҦ~5r _{h  f)Dރߠ-P"/OU/=g##f55:]+ ,"4$ Z]oS~J(#庮Ӣ }ݩ=%1M`nToGiN} SjГ ۺ϶91&|4[1MEhH@%#/'Β^((oHZ/r᧷?N,(wޚT#'3Z6y*0(*Wu#" 0)(,d: + KuOHՆ,/& %,_"d $e% V l!<X!% +4C b/ 8K -d3/#,zƑI@, &"O5$OA ! >Y+fL;[Q CHu*=*Y"Ę3%+𼹰 ?,%s0{'>Va|y9_5X$&E}a6%a WH7w:m{9H(.ȿSȳG~2!l "!*~ wr)OA]5&U#Ru;BC ^*A6vܣMe  u#jPC/  n<@"3ǛF$pXum;q8~E'pm{vۓa l.q6>" ME+  et (!A૱ Ay&HKǦ0x .2*J{ * @  %*-zcԛ>Iuq K Wb'EGUj(n/} P x}*5sS3p1zg l5KB !Q#$˾<жa=Ի CݫwbҺ`9$t c#[zg|WCtr޹ܙw?d3I6%DMd,QЅ (v! !**!# ,/E45k@q嫤d 4r^.C+ 7.G%7)o{ \#y#f)#T(=>gӞ`NZvG$ũ k?6 / 1 ;ن QlEl#t$W5hiK vhk$p H4y /Ƹ$ r (ôy &c)1M^ "e(A2NR'o6&Y毐% 9V$ 607 so   C[r%l Cf U2P%ȋtR2wuOVSX n4RX";mHGKpDMGK#C-JJsg,P>^(0t @Y,j#H/ v 51$!#3w1!5b9kR)嶿')# A&!1`JA w, z;*wX O$%-+>Ϣ ~(fH?A*+,1 )(ل U$Ht&&}& \ y E} !+ IO7«T}1Y60cB{ޥ$ 3170" & {4?aݔ&g:1RD#4 B$O" J:3&t>X2,,(G%g3,pNPVH"T^ 1b#wV;}Samx ߄t  ͬ! &JEWͮIM@{'%De V=DARl׼=:q4 5apd"D290^.[#e T7-9 ;Z"0O7a^+e.WNGɘT E|8A1pD>ˇ1$ LX.hFmn'n7GBU"A{V-$J6יW{ PYW 0 | U t,C=NoB)$c |!!;w#Ǿ% JG!B' $PX3J < 'y2  i42Wk;$g ͂t> Y!sA2xR4 '`A(4 "M* 7lc+N%:F+> JnBf>869 ^ I?p"ٜ{s%m n) ]??-j1ݐ A+u2>iy/ G/5Q߯5@Z"\5uL VY oSp )'U&; ^zA*~`vԡ o-!((6=.r|AV,&?-i@ڟc1 >%y  0< )6\[. W(#TKHQ ךגA )A$ƊK1 ,p % ʀ<+ $%1K i} #$Q8$ #3>_N$ #E+;E85~{)BZ!SՃZ  {T 0e o|]]] vl,)-3&E" u zH 7 3$*G$9 ` ^8ޢQQ-Kˆ;#7|! 6!HD <5,z'n)PFy b 3} >'B# _4yHu=~& lvҲ!Ȏ5b &YRQ6 < ք t0uv/>쮄ܽ ]Q{M놞׺҉=nۄ]!A n {}D!{ `$4'@e+{ԆԂ}K 2:'h:)ũxV wu%| &%#/7XI.t"347"$)Ek'`2bxg#%o#$(%h   .)5; 6/#b|(@ -4N' <H* }  94 ߡ*MQ>G!C!_ 63# `D9 s5NWs1Z$C,IPKpLO%zH^*u 0U$2(,Eʗ-G1B002@%) "d8 U)tqFf 0 i}}M 1`1qJ!m ΋&]' $l:d k1}[F <- tQ+=6 u! 0:*_!} sa]F P RJzڨ],%Q8D*x#*=*Ж>fb֐3_v}j  H{ "z oHPu.x;I  &o#hR 2\!9?)G߰;"%]ps%,",=sa"HnL",\'d | 6 T)/'1 %_ e "" / 5co)CŠr{`  0$="L* 8$ D 'kX[*.U= & ' v }.[}3h-`&j|*ջ0,6 7kt-8'l%M8 r&ӷӒK:P75Aͬt k<$" ٻ@22'+! QR<4 YhR .9ǡЗm A$zD- 9$9 " Eq#4H#WyǐV`HP@LT ()  x ! 0] & %>,+evȸCd +&. #*%$J3N)U!%J-ճ#A%3E tP FZ Bx/orD  H ] 6 a'mW&'z|u21(] T PJ!ʜOk  {  9w5v(/][ =Vu D28 +"2,D"i N ֭ё$(d&J `R"" ?5 , [[? Y6 J%,z yx,,,B#o%+d T5WMc*  ߂~UO W t7, p( {=ΊzV iKd L 6 Ve>gJ#XNDI :7 J HJ\joI ]h7v w g4xU | X 8TK:Ò'7[ 7!m  ,]1 9,mG!{/@?j nt n[ty4PH -._& |+["?' *?ǥ!\(:/7) , 'CT 6}{ t{sY8p|sA w wWik?D~b` #,R  V ` D dkc]eGC& $!r J7 A`@xj&֢@ (r pLd, %+`3ƥj 1f#dZ W"Y _"! q^"&&iRI ߛq J !d E zO <2,]Y  4Pxkf H K  r2{y  m& *| b%&R7u 57* e 0}F =z&5;] @ P 6Ͻ W     I* L 9+ ߎMP<H}f n|H yߐ/V0hC$ j 2  #_s S\,kd^h QZ I) <Tb]# ubef  "_ M' m C$N$  y_6jF s P X\^@m$ 6)$ >DT J!' p"  y  m <"/ ey ~,ަxN }j}`x_^TK3d Bg^  ui Y4p $K =`N#A n:mDq+&՜p9.o_ "yp ?AX30bd(  m moF.@b|zO , & 3b6 z\ :o# r   N%vq%WpJ %{:'vSd F 1 I h y  h K hjS3Gq z * % ,)- i.v* ? . sba S}  h"1{N( i\RFM3) M  T6 K %$y R W"@7D ?  $ K: ? ` )_'Y oV 6 Zڎ Rq8 zhIO~0! v/ p ! w (U#T  5SR? ?nE  W  o g[ = C F M[mP lmH b9a+ NF< L[S%${) P-\v3Ja+D:P60t QQbb uK_%X{((5IbZ%E_2 a  uEA!p2[@|\%BXOu )>ksi a u 8>,7+LpP" ( 4 { n X w uJD: PSX_C232N-WW%   A 4P};eqQT'Uc/NS3}  sB`b a j 3  7 nSjJB&')3 tr pAe]U  Y {mqoL h![u%f#Q=>h%(5J]7 )]~]BZJ*@ :" L,e<% 4 9)B7) l ;6q o Zu (=`^q"iXP ok "K,ra3 "fizT&uf{F7H6a{< MjK.t 6x]Tz7eb qO? 3&;PI?)4e*~:w>Ia>]n 0 Y !VR'd#L28rH05uHUXAra2Yw}It(. &yY k%+_&o#k jZ$ou! ^`QW  mZ3Wx<@=$TE7&# &PEh[zr 0bnK@P{Sfp0q*LcF<3HhoY R'^.J0Y(CyT}^w?dya5~yYTY(Ae0CL2[@ 4}eBl  ;>o ;7Y1PI/sp&}+MjC f1cM,b_GThrM6 G*B86QZQr;0[qq 3Iw-A;tLHV98]%  +& ID3 >ID3@4  /47TPE1ST-15?COMM modifiedrockdodger-1.1.4/data/laser1.png0000644000175000017500000000054713706632107016755 0ustar krawczykkrawczykPNG  IHDRtXbKGDD`O pHYs  @AtIME.9dIDATx@Cy,{6c8@084 oa:6SPZ<67nMkl`S ZJhBv9`[n @P:Uhs0'ȧ2*F}o.>- G:*o!FACi8kGnBOQGOrn@Y+~x~8c>:o?߂ObM>R}rXwspt {E-cڱSi}w@z\?cU?eAXCk%% :?[PۊP|mZ9ASRG @dt~oOڶPʚ.(TGRJp@@Bq32 rHy"$* j[4Q[x\kSk3,+:$mJfu,yL @{ eṶ&3%2?؍|BɨDdj?1AK,WSVDcfw h6A[Mgy@QeL1H[wgªm *~=j<&dHP(@y]gz >PdڳZ} i250*[صO.+[QntTYnOޠG|ӫ:=9sږѳ*OGUѵ1jQ5{Vs69Od?ЦG ֎x&X+VF{N5٢Su 1'eM+`7O[h|U_[_r,RiZַ^^%U*F.Pώ dX]9P7~^^׿^i4hTeePlnF(6M @ؿ?ͨm\P|V/ .*bھi8abpc= < 7QCVn(|MUaT'n(| AB ?Ai U9pHh O5u jaL ۺvo2(|O97"c?QGxތWΫ_FMfʾؓSőp2Iuz:cݧ;m`zm[h^gM_4i]9_֚w۶)t@o.sݤL5׿|@Uk8(]2 聲umqԻڬFwO\ZGM*rzSFTVc4eC$Zc%sxệm ' Uᇢ36'Y hIspfO"-E@4`K:7l_Or9J(}\Ygژ𜩦̗Zo0?+ ۿ=~mkr>C^9h l/Qv>~Wgy0O gS_VPdi~l0;!}H`^ttFrs}.K0/e2E pR"Tx0un;ÿ^#5 J'WH˙T47Zhœ^1繺m[h@QP S9;(R LцPFqviB8\oNR*˥}qxv=]ǧz$tr &: e5Ptym t׭+J4=48%S/K`3_Ρ岄m%e8GOhk {6mm0 dnoULjx%c*LuWi_i?5B=O-`lpP^SJ'̘f6p\w_~ԯ%mU?u^(WTYׇSWxVG6N - ^ %(:0Sǟ0U}?چT}~(:Xǜp*B6F1NgϨdԾȟAΣmdiN@Ȓ\sB97]M i=MTe46Pw;ŁpOY:d&(Yڽ[z'{M^ ("G}*.SePcqu5hpg@m ȣG]ő"7 (A9M7dJTJCYO"{^uʴ:>A/ e*(2V#~ A[/Q߯+k^m\e%}*O7mϒ{vdm5 QȑrI1G51=yM_~)!ڝ710 ica8P*~wk>w`@8^[? ݋xĄ?Ro=w*eXF n;4/Nlx[ck7#7B#­l…s8P|sM3@gڍER/.o+tjR0pm}*Cs⑦k['k uwb#oWK!AYf_㲓}sTw?#jfGt%g4/qdf"4<)a[y>? Pt #G&s4Y?(f'oh5PhB,N?@gIN(i,'n^3sɼ_L3며eݠ8pjBeb;XUyuײCW/0;}K/E0X6;0V\س\nśg5/l@IXh*6cGN*g]2o/Z[66qiVr"( ✩UD3;2֗ڶЌn10$==u8Aݱ[r:1͑0AOOl=wfӥ^KH7肢T=S%W/}@1AWHt9qǹے"wew1q̷3)V/Y9wH۶DiQPVUǙln:*!d+ Uyvzf /f^/v .(Zk%RYM yO^YVtScm7-]Ğn y6q-C1+7ZN6cr,BPeOtO[;C)k#"vF`+ mgkʙCC:Ma_a8sCƤ,Ku]u0> M2]^c` ɆWв}mE5\Kuh:ER pb+9R(Gh۴#߸tKRⴠa@džwtȮ@q+ۅjş߫i?LOvZeDУۘNLɠ9.GfPxEL˖m[h}Υ7_<~M^97XDP?_ 0>#s,N2?pPkRk6@q@'}Eu:g 1<~u$4 (A11l,#˯;B1l͗+™W7Jbͪ8èLLW66}θ(>XOj,}xOW^ux, A)S p(#`jMMdk1c8 `LC "z;tl7nj 3|c1`Ukjki˽ mSvrdm7Zg6ټ /[+ބ [hϝu̓9,nB9b}L_jUkUc(*~|g<\g5}ϿdnL.`E^L]/p7F-XrחfMd&EO&r#oeM]Z_1.fT~x'{\&r. ^ZϷ9[]wxלbqY9!JfϼqKT|u/x+_}_q _{Xg%mLwTcHEPʃm}%~G4(Riϝ Ui"-"ۓݧ_D@g"Klx*lʊe_8}j*_z-6m~71뼿?7PlܪFӔa@@0 S41 vIexlm{m[hTȍԱKSdʕ1,8cgCbϿ9R'p/O&eq`y_8gW(kzg4|Up.ˊ?V!4*G+gcfJh+|zm#M)w=zqeOg}Si륞.~{I^N_kog,OrW>}a*Lf^箰[ (r햃'edwFS3s)b؉bO-x`:Щ ?S`mQ LX|O޸ @@{犒dn:\XDl۵'VWU3Mv~HLd#(O& xx.rBq2y1կV00NDĻ-WƗ688'`8.4Ӹlp'ۛ:M ~YX+ZI H˪T=8(ay^f \@.ѰǷ񀵳d'`Rͥ j 0$ YBX)m(^ߗZ#Er&%\EUZa&Cc_F9ĺ"~XWRw2owH*>`[>}}x1X+hcԠjRҡ'?Ju#泩l`+PKUr&Ѫ~i{EԄ&SԉFEK 7gPKh%a,ՀH3g-E9)%VkD>7ψm #QW Ol/Zhҏ bL5rP)QP8ӷ#cqkV  ;cѵ D97&3-ȃFU:,$r7H;2,p;\bb7'Ԯ腍PsMD?2r6|,VOY~1jcUWcڿ?[:3"P{~ru=NMՂ*0LvDahژ d>s⪷f؍QCT2x~oK6|ht` =ifͩ +֫Z'@%x(x)ЉQ%Cef| ?.Э}ֶb.w^kp[2@ ,29o> wR!+ɴ5ITyvѦkZnҞb&llO%4,c9gƞ0*4{ک˸2I?1"=enpgo( ]i (`ʕu4}%.o1% pP}byN*O#DfD@VN(Lmo9˒˱Yow|k;&pʩL*6nٔBAa(}$"76Rb4A { W|&)G,?*K[vb+nHU(] sq؜ԃ7PHwF_zA@>7bg:o~T, _^Zl,87b izBo4/4~f4ONKo3Jlk[H&j1xMnZx/kY2?BRӗzK9s]QIH]4|J,]g[An!0aa7ze⇅-7ſDbL@(KclZ3EV<<(1Rl:|ҋs wUA0'7EJȽc[r-8nb=ɷa|O6,8ԏvw茀ij0^/~3}x:#_mb̦J}Y32\ԗA3zY %}7Syp6VC4팂u&&ʽL3{2SI>L55ࢀ}j0lMǧ4Hic{nfs]k8nɎ17]\(~,f}mPq_g*ХwɫC.lYfIò8T͙|[IkhY-sZ3=j_0/U/?е7aCS,HFKieOD(Ŋ'}9 ݸ zJ[K%Wml(2צdi*}4%F\tIN=!8tusQJGZ2trW+`T1~Ƭ]O)mKPtV: :34>~  *`Ԟ*K¤]k3x`:V=W5pg/l~,dܵǸOt2ʹqgqBfY$P߶.1`DߴqO{#@y+;Y8e,">Ո3DY07ZH*C[UN'9 j,_/#'xȔNEwB̴IǶR6۶XLKLg2f؍SچjW`n5 v,dr2-q1[E-}Tf +}\w6\pvr0 `/De6fDGgOc, %Z X<,3 -' E pB&nwpմ(Ygk _g~`aS.,bpsLfۍFɥNY̦ L87 )XXE0O3ʧnN{%rʗ+C x2cn\KV?Dl+v2oHێwno@W@ JY'ٯ6rW\v $zO:uug) O"M + ,FG: [7Lߞmm{_ڵt%`_^g/·ҊeQhtlUǙnSLTN͎wceڵ4!_(Gȸl U^m4y$ b3tm"u", 8+}eCCjuS j?[]o^,7o# yDPxi3 {<n<,8|IpÚA+L (bHי-SlKV岶 #Gw|Se K=B fҡy>-1L.=6$^Ϫw:4(HsoS+v(7 %/rsfy2)rNrljr_@ {0=MoKkw@i(pȈx A۞ټ2'rE: JuY!2-nZK|(Nr2MIy*|L_oRubJM9$xV"=A3ɚ/62 _c6ogW! 53 ~׸Tˊh-5/QS:c`[dH3DN|/`h-1buH 6ï0O sW-puV'izGWlLL3r,k_cٺT_7t+serl?\M}8׵+ k ug>:Hf Ν6wK)exuPN3ַ7])̞2ՄQBm:svu&殴CCu#O5jRkJ)^S UFA,Xf1}S]p[ռ.@>:1=Q5Tez-ّXbdr5]fۙu@>m슿W@)'C jYLaJY&`G ^3(Yj Xu8bE9AojCrxEd>-, 5"K3s(qH~_xlr$hRFeNvo$sDkc]k>:,-F .(GOlv Vwuyչ:xAjF`,(tvͬ=vGzʈ'ƂiWgq!!BP|DfXO"wj9AwĖe+1veP%/ht0L)~*{BWrMsS3 _#/˲+ u[D2yDxƬF;_KB_Oc}{@ŤDdZY54άp9ϱv\mLAncshg[kf~yo{@ls# /oژ(Δ`&%dz:]9 șdP^ d֮MZ緝`$w`-BGN'& +w'jМ1^7zR*>oNvd,/ѻDO i'T-䘺K|vj1*C 6ڏI;Eۻr*=6\G:?0ZO7QN0MZٓ~&k`m_dFyݱ`5 rjAaIoٞ`WP1 0p K\LFB66@,"􅇊bg6sP9vV^8<䑁OYFΜn0;T!aمfn2qxTbnûu<{w}q2qO =X'Ź1pHF'ύԚ]̕/X'XUh#}&`iM2-nl>T9b\&?.&,[ڌ/,dN=G䇤1#]'I&.xŢԙwFSqO?4KA al$#mc"iXinfA/- }\:LJ8gdS2qR_rIfR4<6\9dN7mj1 I( GK{8wp-610P ڰlS+}ż2eHJ%avV 1l'7nYl0̞S|m}{ୋW9 漷$ 3UֹFS3/K 6Lߝ55S6!|$°:9V}b!*nkRńջw.>+_.=]9b?qU}2j+`_ t{!bQ\ueH1s5w5qeZ~{DŽgOE?ioDEn8mt=g]R[0@#&Kaj(CRiP%134#MF'MbAAVr9J(G@q*JƖEg< 0'9.ڑfWבLj1L^P;b`,6ſ"JE&>|}E+p miyĄ:J}Oi݃z{m'_ܑӃ쒇wKSXm.WX:Vj)1ѐ4[R y,3w呀@]]v8*L3D":%&ƁjώiSSε􈆌M ibFP  ^bi Wԑrb 2fF% mA3&Et1YrՀ`9%\n ,_ 5Lk?c2Eu3Eui=9v3e1&捶Ϝ;sjFFiCݸ+[u^C^Ru0%eѬ7m5Z!q Gc2f~Qrzc%4kSYz#)`5NޛAPދ-`mcھԕ rlX&51$eWl?Zelqêi>=:gǙ,uEn% 1x1Iz-%/c~vN|y8Ve Vrs#ѻ:Е-ryT"[R\ጺOQXaڽ͆3~uxVy>Kdx)^ZSDZߞlRQ@w_ilbl㲐)l~[Q,KI'^@>_w% Nx?.8Qi5WO}G@ IO*}7 0SSrǏYZ2dZĽAMF}}o*kٛBQ0RK9Sf>t`$b {8/6J?y׀uk5;^f2ɆR7jI4 3BuOZ+pY 1$I ټ0;ެ %֕oΊ}H~h\ۺ`pp/:(n2xy"j3-{'Ǭ æNՓAF,u$o7?7RZsZ|qO5 SxsOQʹ$6eʱ_akr nlPZi]{T'3=#;+,0r|}Gɛ|?>;(Z?c1>@ڽByreڳg]PLZ]!e'8ZG %ICWwGt߆?^O$P6jv2<Y6$Op tP>-hZz풃RW"Wz}sSqfk 2oX@i  Z@j6 ԷJz Fe PN' NZba6~=soIߋޤ6T?Ѳ3_3u; 3< qԒ)  A1;9X6 gCfb91Ev4|,p^4=o |"8)d84^ڐfm_dNRiӷ=l:H)yO 瞊rNkbܫ̲ݱ,zO{JDu=)Ҡ(1,m)'h@fƧSXqH$%e1SRT΍в5^w5ȑiO6<9$w>Xvs}JD/ "B"dN[LzIj?B&j̤[d&TeX0Llsrϻs)4nOSL0k[߇ 8-93]3>Fv 󾗡3Nu:;&|2J'Y S#?y;a~tk<`&MyցoUZ3?wDi[lڔB0C41*!vZʟ7ɿIzk0"}ץi[J;9gVx%3y7 ۲ 76NL XR% cU`o-%Vy> LMF:9nuy y1"P2oL2h7͌\"_&Vvn>Dz.$Hw!z,gff8,s'8^b /%:k71{%1*J)QDw,NkH)FE-s#xoH(QȄr&۳B#փRbyPsTۏEsiд% !|+S.!DeGb7_gO 9Tvw祭y c-d E9An-8Xi & ;(‰-FS9XO͗r\ 6-fgO3s 3լX(z-HL&8JpDE:nSF(;\A/rRz {Vp/d6%'| U2b9 IDATp ^ϱMr:a˳ӟE(@~Qn.!4_-z}Oq}C91gHez~ 33فmL"W X BBv~#1fkwL@NDX67Z?%Je! 5lX_Oa+=Ҟ4!{/$c5{T|yX+8L_2]@OaټブZ4`(9޶=A^_䓗ɿvFm'f42Ը)휀ڸQֱxsr&5 v,mlt3Ɉ @6^٧uyۡQe&`8o}78{ؠUg=9epw|_EvuDzr`v\VC/G߻eo7C苋¦E!P`tӉW6p@_IH[M'-ْeX.To1摒\I|93lk٬8n/Ђ$wwxCғǍu䥤"4a=A?k% ps`40R']6P173hzOm9ף0;'wʜlJ(Z"M8mVy=°HSa܅@V_ٝ$JyQ˄ , $rA`e.gog>[|TtFrd4X{oP>:@jrOy1Itde-0FI3f's.]1Ǣ'0OPJ.brH2 58#] f6UP&Peנ%'d}e41*2 >r ;ad0n7x1b{ZKh @s;1uWOVm67TDɤ@Rj/cSܩ5_Q ! sø 5Eڙ)D_nNox/qGw72jG.-M4g0.]>8FјPu<=&JE\^T]tJıѤT_'Ig<5dU['?",ܻ kK:3?bKMP2p}U_K:y};6g"btge&Ħ>NЖM..OφJdߜn[-~r[8>]).cqL*nAUXH%|ݹin'&铭of=6!76>J~}7s[ɥ]#+4 +(êW"񫻝Ot|G=1v>dfN>}[9Xty_y!a>I `i9kѶ+ic]yޑw6f/3I!1(ژ8+@Y Xg/=)>0vcNߟÒ B8|wMra؝2m.Pכ*(2 b1Jl+6L&,c*JҎ K.oͺ= %@ s-+1 h(vyW{eam9|Dzn@(2$kwVN෪k1%}*9[HHżZL_MA#{j|ʳ 5J2g9OOBd$/ґ.ݜ~?xAsUu ylv E4cIԡ=ҡ?S0y909EcY)CUDS]D^i {=~ OkXQfZ%2t 9e8PP&O_nrrdJ#\-5\͊l׺m!u t*px;K#z1ip<ۺ5e,q0'jff5%YOq !u+u[H:.~- UsL725G37ܟ6f,DSbS;sagNoKƍJX&׻wSNV2A*W+/ O4̔hxTpG5Za@1-9SƙvZ/XqYKn}GǪwf(S}8b;kkJީwG\i{Z~ǰ{QmrI,q@M `# Ja8|KFAG#"ëGRwu;`Z;KyPWO%ZL;[f`PQSt INq%N5vp0z \-{Q5̏T/w鎼xXPSf)f$]0V`.iS͵ H.mzNXލQ檡Fx2 7z W8ky`Χ[%v9beE >͆<.E#F"J#`o1f^K '38< ѕuS%q!'# Γ/ʥ'ߞz\5/ژlPwAFBv,+%3ή,wh ~J}Ur1:ڠӕ32fDN{st049H{ ,8ԛu<yn gz$~W~-r@ 3=DuE {O!A$]cu)">=8>pSRƉ͵7)shRp`^pźP'_DB ~FZXb/T=6Ƕa1HcS z{Qu1 7,A4E)ޯj L܏HO?;<8fiu2EK\/{r KL?=Uk8=cEpﭢ)_|fƳG>S0˝zXZCQ0DIO;>@s"Ws:!^&m%`%bQOHlbؓB+:jJ߫=iۓ.sŏlS'ى$:USl*RO fyܡե! q(;!T9rkO e Oo7w>w_zF>[M|׿ͨ,-#Yaj;N=::\ Q*BSɮB|%"r[ &l "Y뱅VٱYŚL!Ў-CX&9 %Աha$\7=uww5 & ~e_ꐫB3f&[BuRS%oQ76K&l ?캢uoD[pכ }vpXZЏUy!:yh.XIzvGO BjHZK=n%`3zBl]ع Kf9Mg;B/c>Pz;YsWq浾??}dܠ**~rnhΫ3FdOR~浱<ҧ K^<1*+<8=Ø%夽Yy g&ٚf}>GUڔpփ%ev/_,^fB[[V+?V,]seD<]vF_&̒S+Z :h7x" 5bM+/ξU^wp-zIa9!FY[@D;ZMXɞ1\qgu:]NR% uhs SЧ]fI\• dPd$2cW.wBdG[Br|E3`{"x C䨻WFow*cj_ -(8+FX1ɜm|jH1٨v2Xg6Wj@=tScJUa攞gxNrP?ಱM *9ou8R4'c`7*%zx0\fj# fJ`V|ᲵYgYM<#ޛ)G+m_L-qWCh;l#f@}ga |x*mr {KY= )n!澦ng&r\R>R)][fy0rlnP4 Y(K_+Kc=Q*zԤ%K0׸g#6S0eN>Q WVg]*x ~4Yg._ic)4)N|D)cLc/Bq~p)?1Iw!AMiWJ)"{:6bYI /ifzg3޸S,"n㣎NryHih,S`8"꾦JtQH[U#O;AR͛LJڙ%:e&T_f̏#agw `H&q]5 N[l5 }@RL6ft@.$5LQ1)\ hȯ7m"#WBk\h8fKPBULNs%J*MkfQ;ҐU6 z%/D60yl1nO(Pg qNȘ,Z KarJ^$v~}軕zoc.>-{_lΜ.՘sȷSiYuzW9<1pKB6CA:rɨaX4m;ȑ9U +t0u9J_fWmm /MhfqFSL/mQ.qj~ `|(W]vpT^%/ Dv9sZ)Cvϫ5A4GբH?^ up_Zc߄es0UuG,ѧC3.tOj*d#/ogo?-LŨT4Np<"&;6-·OK'x1OJh򨖟\:_FK3ʾ"sS;FsRX7 a\$jh#&U@$gޡ$gtZHZC*MTl@"v*zo ] u{rq'Qvn(egrHnI&u*,TGjHV07ۜyi^B$Ѷy#GBIXH}5 ^ k|>vJD@;;) WsFΘoQ%wB.T+`9Ol +͙+6f|߰{2^9Log ڰ'&HmxCƪ1sոL"½ WqZz,Y?*~Oac9_2wp7=M*%N[6?X̂n!,%z2Q~SOy}d7MnWce f}[0ED]{Q e ԉE)"n$eu&CY(άHxiH-,0>}x,P8^?|2&s| p:`8u@A3R0z"pwK$`PWqeʉg#XV'DbbI B/knޓqX;0{rwŰB Q3fw>jg|Oltks@[ϴgpɯIb֡n9.${oa[),_9QuÞ5r@PK3&H:֔-*>8M6 ٕgG˓r&$懜4?`^9z OHBC#^̻gHOgP2lR7+dkα̛:gOiKZX{@EK|?r(g YGZ-'[`9[[KE^pzDJs*痋+w59NiBGgۦ|yeRÀ*;~#=j=(_ IDATϡ́TW4t4A%=Zȶ ڹ#!~6 ٷv\LH"XhML8tv*Å⚙MĊ3-hqm}he/mtV0(@\5՗N]ޖ,9HAܙ v1gMTpulP\iB3xi|v}/96T)Uub`NFJHI:R[Z36YR+ Ship.y.@٬^1k)53hfԬP(t,ӧ5/P oK߸5ÆY!3VShf[c1{&mG|TwitpS;dݺX0zYx42``GY_Qg ~%~:s?ϒ&;N/q79<_j$Z%!a&':A i1 ys矔8aMJa*Խ›XPg8 *m^.hLjyrЍlI^˔-7<7ΜŬ_[PV{~[{y3oe4Z|6!(͜XsyYe(tG\H;kA5^4S%qՊ C.;3W'pdsq:D|(ȳ '`L|ݗpt"9j?/E.릜2LgEYE8[se޸]/i*leY6J[bӨ̀>(2\ݰŘKiD{ Q̘I]B硙D@mNJgS_YZnx-Rh:*32@SROxc7S c%3Ï=7?_2GEy@MJSr`/0()cjN+f:$}h:sw raeF&?'­>K`|͸~՛WfO@;x:3n17S)]65MR\9T^+KmYRX_PIYO1vgbdT-z26axٰThluM"#BkKRЩ:kϊvuÞ55ZwbD0 .;7:t 2'ktKls,S;r.+dLt^ g` &PfeNi9zs6:N#p`W5Yz| =ۙjVdfqiGi5WgL _gսKf"=lTgt߈iIM0E̛K ǫko2%qF'U668Y`L{az f׳itOFKC77g׉[Ҭ^#v2 3cpxLU㆗nB[m|“*͟NC&ލ#_ )m6[E/ș-)pS8+B(EY#(+1%c;=º)cT/a4bKA'8i=es)WXQ){;t1uSro09y$"LOgp @(yt9f d{芾:tO)~aWA;<BPbb 1rV)Uka2HOFXaJxs=.ƘB";iC.ゞssa9#j`䔨 [`W;S\u}+}% XrR=k͑[0 }w5߽5xl 3Vhe=/Wߓv0F|pУ,߇(o9SGNinʗFu$'ur.:M>xCs^P(oy#FCpY^tQ1GY_ӳL)DJNrqm"B># +o {կJN8?IJul+֞]KQ]LWGIwvs8WbXKa;==!,_:m]beڜ{fO`9xqXk0oa7<ZZdZ6LcZK2ktgS[޾`uXn3\Y|*#nm@frlRyx!ͧB]ptm1z(  {x ]3J_NJ7tiz=Gp+RFujECoMeP%_2V&Bh64e-̗K>ߛ+"antOw9%aKKm+.lCIP)|s9Mپft>.||XYm,vz5lj&QMh'W2r&5rڑ.:RRXSL5^8̗JR֜ ,=FviZ0g$aDX%+z9̗Y-U('}ρgREa}Sc=ycFLʍj[+1מ"hYHS"D cxK5>XЧ6΃ b˱f! V%uM,ir#;M4c$ڕ1r[ӭ"g8\`J$3n۝f_IAKѤb$U%:r 7SO@a[_[bHC2iQNE2\DB(fj@c|GʢVGi/QH4r@a({>K9W|f.rm wU^ۊL^K{YvSd7̏،)T+׿ O=ZС,1X:H=gp(;&JFRy㌢f?3):5FSh+s5Rlrv>=0p˞~9@^otUf?'Jg_+\Naѽݝnyn$8Bh> oᆰ4x${8\'P҃O"g[\Cq)6گ\ʲuS{z8_Y̿}ߌ2Y0kkeBXJ5*QScYc,&o*. onJ‘HH1ͪ% /K;[J5ߦl^3o u1k0f!VAC嵬@vx%\qAq7Jwyɾ3+}Po>*뗇7q#aA~_^,ꄘ0r^epG!M̚c-=aȿcYA>.~? 0n/##Ԅ~7&w1w<plI+,'F{Q˫Ah+"vG5(^O=7x00do&-4.sc„.(>6]xtG}hY#!,"^)w/in_! ~ܵTi3[?e|=cT 2mc?zB}E(;{p7 =81 X+>X2jba 5R2H Y*,cwMq`#~w^kVj@aBck{r,w¯R "**&C>)pW6_YiFWʿ?ptg w_qj>0?Uwcg[`8orqW?zκ83X1brΥ߆]r')JdiC\#qXTabZ쳂6)4,þ:xZ%U޲\o M4.C3$Q3/lszkj,$rRt1Bs֚sm/_ };#+0W yDG|93Qͳދ_T)&cͻ֟n-EnD}:g8M|_n^3Y.A^{Ms+x"* 8_K/؎=}j){GM;]Zv%Jc?~#ť瞱7!ss:ud#|sRŭ"Arohw|TW5'-|)ÀRׇ>#FҲK=~tC_ߌsp&?xFԳn铜ǻ\Z^ȭ#{n r-ȕ_|Rg!eO/^Jҍ}%%CMP ޥ˓}nǥ5ooUVAd'{rl5W-4Uc_N`DޮںQî;k7H=R")PL?+u}_r@D5OgTng?&@x;.[==SXj$ԧ^.qXV>l8}u+uG=_}ߪ O1.5}~|$?ʶ~j 4ۯhOn#1L}ӌƓSOW`?ҳÙm/WZBRL4N+*CHOFnw]1xΘle%g{$Ӟ5MN 7(~%xnI*`oiꑝJt=e'^OI`8*;JDXkv!wjwL/pM CDz3 AVJ!T. n+-䓓oN}D٫cʼU߷.cg p&e7<B= Yx}~&z/_Q][win1$zզݴx )B힞z꣍7Щrk l:=]fXzQ{eoU?@jkYM]'[e»)kE! n8{2Q.#wڹ~ˢ 8 *hԙӯ3ݴV6diy %PsBN7GnVRJ1Aamch- _&XrOPFӝfa)75rK(/wkпiBN g4Dz:{if\ Cm5 n^.`' Kj:})Un>'b[xzAi_`=Էw_ҬEhf.8bQXd1uZy?+7?ѿuCXJ+{wFcMoH 3[z?SOY̔v='?/۟6@j[M/Ķҷ5-f}ԧ7ne)Fh3݃B`' @, /rp ")(}Ofs9M =-h;gLf*oR^s/4-9m_|]7]OeoU2^RRcci&wa>Iޒ}Q0̢C0/N䞜Fgǧmdm9Iq]('dԟ;'mQE.Gl1ukE.|YRbƊ۪~ujJ9Ӱ.rݻŰf]T j\N݁i2K{7o/ D}'BKA=^ ‚# @@gfl~<,~Ά]F% B.NV7!+3Ck Ӄ+Jf.ҋM)mܷ2il>Lt}o' Oo$Pٴ W5r_]5~& ,BTuc1)`YW $ ٱ e3]N>Z `p5Lz ʙŠ4v\4iu5nAAv7TvyP?O/,˰ƀ%yXJB X\𵺏43_>vo: o]EY `g/X#)Ż߻(u?o*Um-,YGeFJ#Ѷa MD?ȸ<ƴPkvjf cVwwUlcD)h8Vt%T$>@Er%?.5J(HǺZ p*v# fWڑn- kHc:-DpWhk?n9~ӡ̬}gElJڠ/\Zux`_?!(̨!5zcNgcٗF+C Xs6(IQ.sjcM$Oٞ%1.&[TWͨ&7mVNvL'`Lm /چUX"ѓ: NP4?/<ԁ[ s!i|+yQG%DC䴶F!u%4N8/%%ۆr!}7w/|G1/FGs+@~t9}>%t_Եo(-|4KGEo?cVR/ ¦'o:W G^/F_ /Qq:]㡯8ض KeE ˥t~XGǷ)!o^f:5HFn诹famčCrhв4:0(mJ:s]@ys~Z1wHroI箔;.\pĴVz+7Կr]޵?< >$=CTj]G>Q{;N Or}0+nTa8orvsqG#{gwC'07A(ud3+~=16p/}:}bag/O)描-BNZwhl;NdSЮ03G \LmV^'6y98>%9'M:v~c&m>ڟb֙]`ݹ֯FkqWG?Xc]bL~Zo gq/Ż=+d203űԸۇw+ȋ G'[tM5)j/2y!^~3l KN);a*/-v}b|zNNSzX wm5 ï\ѵyU}#@QSE rA.ʰBa2wrqVւsz7,7XV2N(\v?O#D`ś2WB_4F^oUTE?-kz |h|l Tbzj)R8^1/)*=P-|ύgea~/qLqB癥y%г~ʮ.z ȟ7=p~"'޲Z$OԳl~;.}\p V8F@ݟV{> v+*ұdM!8LJ[: uteUU $낾^APyy١JڂRj/ 6ѣBUىvumT .\X;E.vFƲL0tfÍ⻃(L6KT% \V.l*T CTqs6[չB>` UP*X\ SI܀O 9vwR9u1yhXCڨ~b h@+^W_6K< p䇫\u%9) -aIENDB`rockdodger-1.1.4/data/booom.wav0000644000175000017500000006705513706632107016721 0ustar krawczykkrawczykRIFF%nWAVEfmt "V"Vdatanw|ummmmlkkkvj}haaaaafowoel{aa`_^^bqnYYYYXXsyZUTSSSSSUfwveSQQQQQ`ro`n|kONLKKKKJXseGGGGFFP\bVJGHLuu]PCazQL^p|t_K@@@Pbpw~nU@@@@@@@@@@@@@EYniT@@@@@@]rYA@@@@@@@@@@GPZdnjWC@@Myg@@@LavdOH[m~|{yyy}{r[E@@CQ`wvV{tU@@@@@@@@AAASfjWD@@EZon]Qx_GVeyTxq]HGPYOF@@@@@@@@SoiN@@@@@IayyqgWGNd{sH@@Ip|sikhDVigUB@@@@@@@DWjwnQ@@@GNTX\VKCcf\b\jwbMI\ojAAA@@@EJLGBNas}zlHckWC@@@@@NcxuKEBNwmBAA@@@@@@@@QkqMHC@@@N\is}zsrnBmqU@@@@@@@@Sy[H_wmU@@@@@@Th~iGDBYyvtvyv_H@@CjydO@@@@@@@@Md{xtrtueQ@@@@@AQalry`SH@@@]yxxy{s\E@@@@@IXgoVDhlQJB]q[KFAdz`G@@E\t`FDA@@BGLJE@@@@@@@@AAAAA@@@Tx}bGSjbE@@@@@@@Cgdh[ROV}^QH@@@@@BVjw{yxhR@@@@@@RcotyhR@@@QkrWMC@@@@@@@@b`@@@@@@@@AAAfzqjwiYsYNC@@@@@@@Alz\ydQ@@@@@@@@@@@@@@@@@@@@@J`vuSLD@@@@@@@@@@@@@@@@d|hR@@@@@@@@@@@RepdWNG@@@CHMjlZNBUhuz|wu}wbOCJQn`KFAgb@@@@@@@@@@@^qM@@@@@@@@@@Ko`@@@@@@gbjUFCDlmQJB@@@@@@@@^}mLGB@@@@@@@@TkmKuqDhvK@@@@@V}~X@@@@@@@@@@@@@@@@Wq^d_@@@@@@@@@@@XzsZB@@ER_yb@@@@@@@@Jhof{bJ@@@@@DKRMFDSazqVMC@@Fl|bUH@@@@@BIQ[fruxpZD@@MyfPHA@@ETb[L@@@@@@@@@@@@@@@@DIMHC@@@`cVI@@@@@@@@@@@@@OskAAA@@@@@Ko`@@@U{lVLCHR`mBn[@@@@@@@@@@@hxLaT@@@eywxz{}wcO@@@BEI]pnXB@@ADGftI@@EYnvwwvt|ZilQJBCEIUajs{{zyyysPw^SLL[iwrJ@@@@@FPZdowz}|yr]H@@CisIpqRKC@@AHOYeriXMB@@MsoIKXhlAAA@@@@@@@@@@Ep|U[kukaVK@@@TYitJEB@@@@@BLVTJ@@@@@@@@@@@L]ouaQAj}{zwtnbWNG@@@@@@@@GXjz_QH@@@Z}YGZm{~qdgno\H@@@@@@@@@@@@@@@@@@@@@bhTJA@@PvgLGB@@@@@Qu[FCA@@@@@FMU_itnVALXblvyz{zzuogXH@@@@@@@@IT`mz}yvxNkv`KHXhyMbx]A@@@@@@@Ioe@@@@@@@@Jnq`]ZgvhN@@@@@@@@@@@@@DLSvrRKD@@@gyqjlzaGM]jotsniYJ@@@@@@@@@@AN[emuxzgAAATx{kkr|xQID@@@@@@@@@@@N]qdAAAZWAAAUl~~~}{rjb[TME@@@UqnVLB@@@@@X|xTUy_hp{uz{`GDBHWelspZE@@@@@X~|mZG@@@@@@@@@@FUeow{{|]cwrHq[NF@@@@@@@@@@@AANziAAADLSMEOwyhT@@@HXh[L@@@Qi~~rZBUknMHCBEHPYYNBL[mmRFTblsu_IM`s_L@@@JU`jt}gP@@@@@@@@@@@MZndAAAZq\OB@@@@@Odu`KWrRKD@@@LWahptw}WAAA@@@@@Z~v\BjrRKC@@@@@Os}l[\k{{vrsu|phbZOD@@AAAZz`F@@@@@@@@@@Pt}yyyzfQ@@@@@@@@@@@@@@@@@@BKUlvXNENe{{{ytnvfJ]eg^AAA@@@@@ZzYOE@@@@@@@@ITb~iXF@@@@@HVdiTJAhwmhtaAAA@@DkyTLE@@@@@@@@Oe{|ZhwvaKQ]bTE@@@@@@@@ISdvsycM@@@@@@@@Usw`I@@AO^ipvy|mIT`^PBN\oyS@@@AAQ}yZaipv|}mV@@@@@@@@@@@@@C\tbOHAO]_QCdrZCLYkhGtsIEB@@@@@@@@@@@@@Pt~ncWPLGEB@@@@@AAAN_nprhUAQcgUDc^QHEUeu|fP@@@@@@@@HUazRp}uuuvw{gO@@@@@@@@Sp~[SLWyZJEAWmpZD@@@@@@@B[s^NGFo|rkcTF@@@@@FS`mz}`C@@@@@KYjnBm~zywMl~jI@@@@@@@@@@@@@Vp^FDAdkN@@@@@@@@@@@@@IWffIAAFqmB@@@@@@@HlsV@@@@@@@@@@@@@FXiqRKC@@@@@@@@@@FZmfR@@@GTajsyyyT[~zuw~hN@@@bvnaQA@@@@@@@@@@@@AUivxywO@@CijJ@@@@@FOYldG@@@@@@@@@@HYkortwz]\^NGFowcPCR`]N@@@@@@_xQrnBAA@@@@@@@@@@@@@@@@JUgiAAA@@@@@Mq}|z}lQ@@@Rg}kAAAJ`utSKDU{cLGB@@@@@@@@@@ENXcm{gPIA@@@@@Z~vdSA@@@@@@@@@@@@@@@@@@ZyiK@@@@@HVdXJ@@@@@FjeB@@@@@Qg|~tKEBIc}yuzV@@@AAHdy\CnnC@@@@@DINPSi[J`vskbTF@@@@@@@@@@@@@Pf|pVLC@@@@@GR^fokWDKXijAAA@@@amR@@@M]fVG@@@@@CHMosQ@@@@@FVepxu_QBfe@@@@@@Th~jGDBXfprGAAEUentwaK@@@@@@@@@@@@@@@AUjmXDSj{xu]\^NGFn~eK@@@@@EQ\zvSLD@@@@@CJR^ly}bF@@DWjrtuj_WSN]oyoeYLBP^ur\F_lA@@@@@@@Hlc@@@I\oaNBGLXhutrv~rZ{zz}tx{~tgVD@@@@@Mauuuvxy~cH`s^I@@@@@@@@@@@@@@@@@@@@@@@ADGECCScz\AAAaz{~tJEBNwb@@@@@@UiytW@@@@@BXnuL@@BMXfvrXo{pdcp}iVK@@@@@@@@@@@GQ[gt][r}xvtuxnGEBU}tokklkZH@@@AAGWfq\OB@@DOZt\FCA@@@@@@@BMY]]]RG@@@@@F`z|uhUB@@@@@@@DYmjUA@@@@@@@@@@L]opVLC@@@@@GR]RGI[n|P^nXMB@@@@@GQ[iwiJUaxzcSC@@@@@Y}|uoid`agmsxhJWe`PAKT^gpqqqqqstvwyz|}|eM@@@@@@@@@@CVj\NGHpxfUC@@@@@@@BQadYOWbr|~}}{TIDKs{wutoiglptx|~tjZJ@@@@@@@@@@BfsRKDHUahotvwoe[PEAABN[pYJE@@@DLSvxLAA@@@@@@@@@@@Tm~zugS@@@@@@@@@@@@@Ef\NFDXliXGEB@@@@@BGLhXAAAetL`vOID@@@@@@@@ELTyyi[NBluI@@@@@NdycMAAA@@@@@@@@@@DLS_kmYE@@DYnqeZPF@@@@@@@@@@AN[p{\S^iklnqstuuuu`FDA@@ImybK@@@@@@@@@@Fcz]@@@I^ruup\G@@BSe{`AAA^{S@@@JT]fptwyyylV@@@@@@@@@@@@@AFKUbpyyTLE@@@_lUKBM[hpyynd_bekryzwuqh`VJ@@@@@@@@@@@ITb~|k\MHCRvXJEFoc@@@@@@@@ENX_ekothS@@@KbxXkcA@@ER_xmGEBCHMry_E@@CLV`jt|jJ@@@@@@@@ivKbeVI@@@JVf}yvsk_SLE@@@@@DRapz_CO_smR@@@@@@@@M`t}zx~|vqgUDO`s{eO@@@@@@@@CHMIC@@@^qMNcxxyxXOEVr\F@@@@@@@AAAHWg\L@@@X|yRIDMv~|zxurstq]I@@@@@LhaTbpg[Zn~xrmhebWKEYn_FDAcrX@@@@@@@@@@@@@@@@IWevJAAJr~`SG@@@JS`twP@@AHO]t~y{~taMBGLT[cmvrfYPF@@@JUbr{tvximmi}cI@@@@@Njw`MHC@@@N]`RC@@@@@@@ASdptyfP@@@QhnautW@@@@@@@@GUd~TFC@@@@@@EJ\fAAA@@Ag~^@@@@@@@@@@@@@CRby\NFDSc`PAWmywvdP@@@@@@@@@@@O_n}]ENXbmq]H@@AQamv~kR@@@GQZeoiVBhyyx}cF@@IoeCnw{cC@@NtcOHAkt`K@@@EJX||uZAAAVprZC@@@@@@@@@@Tx{WQ}mULB@@@@@Y}v]C@@@@@@@CUfptwwwfN@@@GNWdqx{~~}||zywqlmsy}o_Wes{kO@@@[z~[zxOEC@@@@@AP^ipweO@@@^kBTinYE@@@@@SrxaPIB@@@@@@@@@@@@@@@@@@QhjQIB_uOK]neSI@@@@@@@@GZmcP@@@Ng{vlXDFN\~aD@@@@@IVepDAA@@@Z|}gdoyyywqk\M@@@@@ALXmiNAAAGOYgvlWKZipsvvw{ZFCA@@CKRarnqunYD@@@@@Y}vR@@@Sh}kNx~iR@@@@@@@@@@@LXj{lifu}Z|p^KT^NG@@@@@@O_lt||yxxy|yocSC@@@@@@@@@@Rv}YNy`c]AAA@@ADFasWMD\~U@@@@@Ievqqqqqrtwyz{{{xpmjQIB@@@@@IUbehnxnO@@@@@DP[jzkXDKXcksx{drkalVAHOXblorsqndUGEB@@@@@@@@@@@@@HTadhthDRekXE`rYA@@LitWDTd`P@@@@@@@@@@@QjvnaRBQbhVE@@GmgOCHMZjq\H@@ALXXMB@@@@@@@@@@DLS`m~ZMFJs{yyz~jHObv}gRAAA@@@@@@@@M\nmM@@ACFO`quxvj][\^goqkfmv~t\LFAc{P]zeP@@@@@Eqv`J@@@@@I\puxywt{zRIDMu{zx}zkJ@@@@@FOYquS@@@@@JqcDp}gTA@@@@@@@CLVoht{aG@@D\sn^MUkz\@@@@@@VmhTJAYqu]EdwS@@@@@@@@@@FrtcPCNYdozzYOEK_thXLGCEJS{h@@@@@@@@@@@@@@@@@@@@@BGLjS@@@@@@@@M]n~sgqYNC@@@@@IUbmx}{z}Teo]LGXjrx}}}{{{y[@@@@@@_}gT@@@GWgmcYa{v^GKYgoxw`I@@AUixteVFL\jnrux{|hXHJ]pstnZE@@AAAOf~}o^MFCAP^pYJE@@@TxhH@@DUg~wcO@@@@@BSezpicrZAAA@@@@@@@@@@@@@@@DMWs]CP]hr|vR@@@GOYj{eZy{\QF@@@@@Kj}yyyxwp\H@@@@@@@@GNWakaPADF\}VlkQaphSDphM@@@@@@@@@@@@@@@@@@MhpT@@@@@BUhhUBVnn\I@@@@@QyYAAAhzN@@EkmBAAGWgr|}cJ@@ALXcmxXabE@@@@@@@@@@GVdp|oCAAPx|zxePADGLS[iwdGDA_}ZPFER_houuu^FDAdcSIAAAL`tx{}{ziS@@@W}}pfilqx`FUet|wut{Q\v{]RF@@@EJQ\fe_[gtuU@@@@@AGLKFBQacSC@@@@@@@C^z|xtswzkTGr}|wrlf`WK@@@@@@@@Lwg@@@TzZBGLkT[v]E@@@@@@@AN[foxnMHC@@@@@@@@Pcx~{ysbRJE@@@IYivXNDAABVjbaqaweAAA@@ANZoiJ@@BP^hnsuv{hRDR`]N@@@@@@`lOJ[lsxt]F@@@@@CHMdzcAAA@@@@@Ry\@@@@@@@@Tw|X@@@@@BLV[^bjsy||xsh]p}}au}vnlryyyywtfS@@@@@@AAH\poe]]]cmw|VME@@@]wQYlXD@@Hl~sh\QF@@@@@LnfF@@@@@Of}vb^hq{kSJE@@@IWfuIfbE@@@@@@@@@@@@@@@@@@@@@@@V|y\PE@@@@@GYjsyxaI@@BYqx^cVIGZmtwxrllquuuyqZC@@DOZk|fOMnnWAO]iqxzZ@@@@@@@@@@@@@@@@@@@@@IXhs}fo}ytkb`ei{uuvxz}}{xbL@@@@@AAAXxewsS@@@@@@@@@@@@@IZlpsskdx|}gTJ@@@@@@ceH@@@@@UyzW@@@@@@@@@@@@@HZkquwwwoGEB@@@@@@@@@@@@@HVeeeecbsiXG@@@@@Lc{}SFC@@@@@@c}hRCNYdnxr^K@@@@@DOZdlssrrN@@AYp|xr^JPn]NGE`||gQAAA@@BKUdytR@@@@@@@@PeztJoxY@@@@@@@@@@@@@EXkv}b@@@XY@@@cvN@@@@@RvkVMC@@DXmzbJ@@AHO\nmS@@@IVcwcCizn[I@@@fnH`vlbZSLGB@@@@@Mcz{}}}}bGDA@@@@@HUblvr[D@@@@@@@Dp|yyyyyt^HAAAIP[hvmaVMCQh}}}}}}g@@@@@@O_s|wpmj\L@@@GQ]zzeOEP[ozYOESy[@@@@@@@@Ndzrg_a~jN@@@@@@@@@@@@@@@@@@Nr]@@@@@@@@Qu{fQIDCNYfsudVG@@@@@@@@@@BNYeq}|bD@@FWif\SKD@@@MYdjpjaZ]`rx_EN^qtUESbysvyyyt^H@@DplQJB@@@@@IYivJAAIrhPIAEJR`o|s[BKVi}S@@@@@EP[l~}rbQAP^iqylGDBHVe~rJ@@@@@@@AeaSH@@@@@Ec`Bj}vncSC@@@@@@@@@@EOYk~{yy}jQIBaycMAAA@@F[oy~xriZKEC@@@V}si_RFGQZclu|~zyy{{gR@@@@@@@@@@@N_nsx}scSJE@@@IZlsy|wstx~sIEBPx}lV@@@@@@Qez~zrkoaAEJQZdjqvwyzY@@@@@@@@FQ]gqvpkfa_gpr_NF]s{{{gGDA@@ALXblvpZE@@@@@@@@@@@@@GNWcofS@@@@@@RfmYF@@CTfuqRKCSrq[D@@DSazWAAAfoMHCXy_E@@@@@@@@@@@@@CFKVbimtpDk|xtjWD@@@@@@@@@@@@@Sg}e[iwz|eH@@@@@Y\Q~~hr|u\D@@@@@GQ[oyZCUfqw}m[H@@AN[paAAA@@BRbgb^hryyytlcUG@@@@@CKR^ju}~rRKDXteTB@@@@@Qh~{naVLCCEIRZagnqu~dVH@@@@@@@@WumM@@@@@OoyYOE@@@@@LpoXA@@@@@@@@@@BEHWffTC@@EUe}pVLCM\nfpwqqqqqqqq|rporFTho[F@@@@@@@@VliO@@@UlqEAA@@@@@D\s}kJ@@BP_lymWAUiljoYB@@@@@Z|wbM@@@@@DRay|qf][Z\_clu|{{~|WMFKm]@@@@@@huh]YUZdntHTjywttut_K@@@@@KiyZGsjWDRh|`SH@@@@@CScz}yyzz{{ywpi_PB@@@@@_qR@@@@@@@@L]omQJC@@Flw[PGAAAN]kqw}}yteTR|vV@@@@@BMYpsV@@@\mUBNY`einsvxy{|uV@@@@@@@@IYijJ@@@@@@@@@@@@@\p_OAKU^gqstqaRJEBO\n}VmtMHC@@@@@DSan|yjZRPNZfnqsuv}zdN@@@HR\iukU@@@GVdtvXND@@Ag}cI@@@@@@@@@@CMWalvwyyyy{}zm`dlrsux{~iI@@AAACEGEBBGLl}RAA@@@@@@_p_OBP_qwXNEHUalwoT@@@@@BMXo}`GEBDINPRSSS]iu_@@@@@@`rZB@@AAAAA@@@L`tyoeYMBO[emu~yurokt{S[jqbRMMMHCEOY[\ZOC@@@@@Ngq\yraPFCA@@@@@@@Fh{twzsV@@@@@@@@IZl|kS@@@@@@@@GWgou}nU@@@@@@HOYix~vutvxyyyyyyyy{|jJ@@@@@K`twkos|xty}}|rh_WOJE@@@@@@@@@@@AAFWhrysILQ\swx{}}}{xvy|}yxx{~fNGUdjptvyyyyyyyyynbYYYtyOECHj|zywwwy{~~~|zqgeoy{{waJ@@AJT`qVc}{zyyyz|}xqhYKWj~o_SIAHPW^etoCAA@@@@@GexbMHDRq{wtqnrw~}{mjfiotwz}vSLD@@@@@@@@JVcmwzgVMC@@@@@IYiv}~z^C@@G[nuxyyyvpjZJAAA^}wvtssty}~{x|uommwydNAAAAAAAADIMHC@@@@@@@@Odx}cJAA@@@J]puuuoh_RE@@@@@BDG^xxyy|zY@@@DINYdkossrlYF@@BMXfvywwuj`VJ@@@@@@JSbz~wwvuuvvw|_BSfu}|fUC@@COZepz{}~~~}yvnfenx{|}|zyyzkJ@@@@@@@@Qbq}`KFA@@ADG^{~{z{}weR@@@@@@P_lrxz{~zwvwwvtjYHTakosfUGDBL_rvhVEPdyq^K@@@@@@@@@@@@@@@@JS^lz|UID@@@@@@@@@@@Rfw}bSI@@@@@@LYidOHAgnW@@@@@@@@@@@JXfpzt`MER_fmm[H@@@@@@@@GNWes}eTX\ro^MFDDVi}hRLww~~n^QIB@@DWjtx{xtpmjmrvx{ba_KFA@@@@@LZi{ysnu|}voaO@@@Qn}{zzyyyyytlfkou|}w|kZOGAAALaw}zyvoh]O@@@@@@EJQap{yyyyyyyz{}}}}xriXF@@ACFFDBAA@@@@@D\sycMGUd|}|}aF@@@@@GPZfs}}}r]H@@BUhsvy}~zvrsuz}}}~~|{zzxussrtwz{}ZFCAWmq[NB@@@@@@@@@@J\maKFA@@@@@M^nsy~zlFAA@@@Narux|rW@@@MavwdVKBWm}~~|xsleqnYIOVTJA@@@@@KWfyyvsvv^FL\jqwxrl_P@@@EOXhxyrj[KETbjouz[AAAFPYblsw{zywwvwz~~}{zziS@@@Nfujf}xeSB@@H^tkPAAA@@@@@@@@@@GTa{}{zyyyyy{|~}{{{|iYNBJU`jtyz|~{xsi`\[]ugJ@@@@@@@@Rez[@@@@@@@@GP[}n^PB@@Lmjaabceiqy|aE@@@@@@@@@@u@@@@@@@@DIParzz{t[C@@@@@AADXljcp~ti]QEAA@@@@@@@@@@@[}ufgpz|{yyyyyymaXSNYhu}}zxrkglrw{}|hB@@@@@@@CNYk}}}|tljlnsx{{{{zyyyyyyvshUB@@H_v|xtpmjou{ubOADGO[filoqsuvxyyyyyxvm^NIDGXj||}}}}pdXMB@@@@@Ody}umhebm{xdP@@@@@@@@AAA`vmdbnz~||~zruxvP@@AMZhxyof]crtg`js~|~~}ynbcktxkYF@@DZps[Tcq}tj_SF@@@@@@@@@@@@@ELT`msssqoorv}yyy~zcMHC@@@EJScrjZMHCAABQat~|yvgWMMMVajnrnf]RG@@@@@@@@M`t~xuqlgd`^jw~ztleeejry~uuuvxyz{|}gPGZmkYL@@@@@@Rfx||zuoib\VOHVdpv|ypg^VOQV\eotwz{}~}{ui]RI@@@Lau}{skmrz{zxxyyz{{yxxyyyyyyy}ocYYYbn{xqi`WNID@@@KWbceiovxzr[D@@AAAM^nprtvwgJ@@@@@AAAThw{zsmjgpzuoaP@@@@@@EJUlmPAAA@@ESajqxy{{yxqjgmrux{}{zz{}}}}rf\XUd|}uromkjmpu|z{}{zz{|}}}|zwwvvxyyywoghknsx{xurle_WOORSSSW\bpysmgafxyqie`ajrw||xtkXF@@@@@BEG]r|yyz{}}}}|zyvtsrruxuj_SGAA@@@FS_q}{zwurlg_VMHC@@@JSZ\]UJBIQ\kzzwuux{~vogc``irwy{{{|}}~~}}}~}{q[E@@@@@@@AFKUev|xsqqrrsnaUMF@@@@@@@@@@@CFN_p|}{xqkiikuteeejqy~|zz|}wZ@@@@@@@@G[ovy||}}}}}}~}|zyxwtporuwxxphc``spt{`AAADINZgoswyz{{z{|~~yeQETdlquaLAAA@@EUesungZLBDGJOT`ksvy~}wrmjgkrz{yxxyz~~}}}}}yyyz{|~xriWF@@ACFQex|xur_L@@@Sj{vpjqxyyx|}{ztnha[\_crxncUFIWfpz}}}~xrjbiry|~}{{zumf\SLGA@@DVgryq`TJA@@EP[htqaWRNU]eoysV@@@JXgueUKFA@@ADGSbnsx}}{zyyyxxyz{{{|}}}zwqlheb\WQIB@@ADGFC@@@NmzwtplgaZSQOPTY\_bfigd`SF@@@MYgxzm`SF@@@@@@@@KWclty|~|ytnkhgmswy|~iXMBPaorvpdYOEBEGZnwpjloqnjiiiiilrwsbQ@@@@@@@@FWiptxz|zqi^SKFA@@GYl{zpfeeglqsvy}}}}z{}{z{{~v`J@@@@@GWgpx|toihpw{fQIDADGSdtwz|~}|zywuuuwy{|zwtqqqrstuwy{}{{{~}ungbehkosvy}}ywtsstuwy|wphb\TJAFKQ[djotuwxyz~|vqoswy|~~|rjkmoru{~xrld\YYZcmokf_XWcntwz~{uobSGGGP_n~}{{{{zyyyzwtsrqqqstvwyz|~~zyy}~wqke_Z]`fnu{zm`TIDTdmqvz}ysrrsuwww{{ywvy}~{{|~ysmf`bjqtxvl`RC@@@@@L_r~xrnqsrokYH@@@O]hov}|}{xm]MIDJ]py}||{xupkfilpty}{yxxzpmmnswxqeSBCFGGGECBLUamy}}|}}{xwvutrqqqrsux{{zztnjlmry|{{|~~~}|||ywusle`]Z[\^aeaZTY_foy{|}{zyyyyxxyy||}{snhecb]WUX\bhnty~~{xpf\SKNZfnw{{zyyz{}~{zxwvvvwxyy{|~~{{{{{{{zyyyyyyyyyyzz{|}}zwmYD@@CNYdoz~|zri`XPT]fkqsssqonqsuvwwwwwwz~~~{xrcSKFBKT^gpuz~toljpu}~|{{{zywwvuuvvwxyyyyyyywtrrsw}}{yyy}}|z}|{yyyyxxxyyyyyyz{{~}zxwvuuuuuvwyz|}ywvvwy}vk\NFDBFKSaox{wtvwxyzz{{{{{{{{{xtn]MGGIZkv}~zvwxz{}~~|zyxxyyyyzz{|~~~~}|}}}}wqkloruxz|}}}}}}yruxz|}}|{{{{zyyyz|~ueTQOQZcc`]\Z`kvy}}|{{{zxwvutriYIEBAAAHR[dmsvy~~~{zxxyy{}}}}}}~~~}|yvspnkheeeecbiqyzneb_aejnrvznywtssssrpmjiijlmpsvwyz|}~|wsnifkprtuvwwwwwwxy{{{{{{{zzyy{}zxyz|}}|{{{zzyyyyyyxwwwwwwyz|}~}{{zz{{{{{zzyyz~~~}}}|zxwvy|~yuncWVZ^dkpuy}zocSCAADQ]fnvy||zywvvwxz{}}}|{ywwwxyyyxwwwxyzz{|~~|{zzyyyyyyyz~{xuuuuuvy}~~|{zzz{|~~yqf[YYZ[]bhnrw~~~|{yxvvwwy{|}}}}}|zyyyyyz{{~}||}}~}|{{{{{{{{{zzyyz{}}||skgjmqvyyyyxxy{~}z|}~~|yxvusrrstwy{|~~~}}}}}}||zywvttvw{~|yyy{|{yxwwwwwy{~~|{{{yvsrrv}~}{yyyyyyyyz{}}}~~}|{zz|}}}}|zyxxxyyyy{|}}}}||}{zxwvvtsqqqoljosx~~~|{yyyz|~}{zxwurooqtwz}}|zyxyy{|~}{ywuux{~|{{{}}|{{|}~~~~|{xrljlnqtvxyz{{{{{{|}zxvusssuvxxyz|}}{{zyyyyyyyyyyz~~~}{{{{{{{{|}}~~|{yyyxwvvwy{}~~~|{yxvuuvvwxz{}~}|}xof[NAN\hovyz||}}}}}}~~|zyyyyyz{}~|{{{{{{{{{{{{{{zyyyz|}}}}}}}|{{zxvtsstuuwz||zxwvvwxz||}~|wsmgbiosuwxyz{{{{|}|ywwxz|{zxwwwxyyyyyyz~}{ywwwz}}}~~|{z{{{{{zxwwwxyz{{{{||}~}|{{{{{{{{{{{{{|}~|{zzyyz|}~~}}}}}}}~~~}}}}}}}}|zxvttuwy{|{z{~|{zz{|}}}|{yyy{~}{{zyyyyyyyy{|~}{zwutuuvwxxyz|~}|zyxxxyzz{{{||}}||{{~}{ywwvvxy{|~~|{{{|}}{zyxxxyz{||}~}{{{{{}}}}~}{{zz|}~|{{{{{{{zxwvvwxyyz{{{{{zyyyz|}~|{zzyyz{}}|zywwvuuuwyyyyyyyyyyyz{}~~~}||}}{yyy|~|{zzyxwwwwwwwwxyyz{~~}}}}}|{yxvwz}~~}}}}}}|||}~|{zyyxwvvuuvwy{|~~}|zyyyyyz|}~~|{zzyyyyyz{|}~~}}}}}~~}}~~|{{{|}~~|{yxy{|~}|{{|~~}||~~~}zyxy{|~~~~}|{{zyyyyyyyyyyyyyyyy{|~~~}|{zyyyyyyxvvwxz|{yxwwxxyz{{{{|~}{{{|~}}}~~}|||}}}}}}~~|z{|~|{zzyyyyy{|}}}}}}~}|zywvuuvy}~}}}}}}}}}}~~~}}}}|{{{{{{{{{{{{{|}}{zyyz{}~}{{zyyy{}~~}}}}}}}}}|zyyyyyz|}}||}~~~}{{zyyy{}~|zyyz{}~|{{{{{{{{{{{{zyyyyyyyyyyz{}~}}}||{{{{{{{{|}~~|{yyyz{{~}}}}}}~~}}}~|{{{|}}}}~~|{zz{|}~~|{yyyz|}~{yyyz|}}|{{{}~~}{{{{{{{{|}}~~{yxwvvwyz|}}}~~~~}|zyyzz{{{{{zyyy{|~~}{{zyyyyyyyyyyyyyz{|}~||}}}}}}|{{|}~}{{zz{{{{|}}~}||{{|}~}}~~~}}}}}~~~}}}}|{zyyyyyy{|~}}}~~}}}}}}}}~~~~}}}}}~~}}}~}{zyyz{}}}}}}}}}}}}}}~}}}~~|{yyyz{{{{{{{|}~~}|{{{{{|}~~}}~~~}}}}}}}}}}}}}}}~~~}}}}}~}|{zz{}~}}~~|{zzyyyyy{|}}}}}}}}}}}}}}}}}}}}}~~}}}}}}||{zyyyz{||}~~}}||~~}{zyyyyyyyyz{{{{}~}}|{{|}}||{zzz{|}}}|{{{}~~}}}}}}}}}}~~~~}}}}}}|{{{{{|}~}|{{{|}}}}}}}~}}}}}}}}~}}}}}}}}}|{{{{{||}~~}}}}}~~}}}}}}}}~~}}|{{{{{|}}~}~}}}}}}}}}}}}}}}}}}}~~~|{yyyz{{{{{{{|}}}}}}~~~~}|{{{{{{{{|}}~~}}~~~}}}}}}}}~~}}}}}}}|{{{{{{{{{{||}~}}||}}}}}}}}}}}}}}~~~~}|{{{{{{}~}{{{}~~}}}}}~~~}}}}}}}}~~}}}}}}}}~~}}}}}}}}}}~~~~}}~~~}}}}}}}}}}}}}}}~~~}}~}||{{||}~}}}}}}}}~~~}}}}}~~}}}}}}}}}}}~~}}}}}~~}}}}}}}~~}}}}}}}}}}}}}}}}}}}}}~~~}|{{{|}~~~}{{{|}}}}}}}}}~~}}}}}}~~}}}}}}}}}}}}}}}}~~}}~~~~}}}}}}}}}}~~}}}}}}}}}}~~}}}}}~~rockdodger-1.1.4/data/cboom.wav0000644000175000017500000002235013706632107016672 0ustar krawczykkrawczykRIFF$WAVEfmt ++data$2("7{̿½u}doJxxdetP~Y4P 4k5jy{ V.  fg)a`-QhIr\q]!`R0;-Rރ\\3Hq1cŶxLg|iRT{sg,?*8Sq+ ϳiTRWjYOp{tjv# ?\x8#,&Y~f55&@qopzr>"%}Q?^7#  - 9γqM9RN2 ݷTBtқ4Rf[pЪgkӚ9=ocK%@<+(8Bqv8 jϸ! DuưϿ̿ޣe^\-8@)d{L 0=M8ESGC,  0RPLID-!=]Poůy}뿼ƔŰgvBH~s;`ZZ`PdJ)=:QvsN78.  #/1FYcbE  !;HDMIDB6   !/LmÝźĿuq}Ѹ{aCK]S=670)0OblY8% ',FO@* #VjkixxfbaUEEUTIZyuQCKTbdN83452-+0;Gb}cVMOWRKYzŲмsnhi|kS=  ':OpƔW0!!2=7.8Sde`O.#+..)"4G[vƤκٷ|ULOKA4*% $9Yz{qZ5ABAE84FZWC6/%8Vp}QA=;>Fb}j_L?Kh{nb]`gka^w~|~q\OOVcs}ug^\_j~vakojtzaJSjsmhf_ZN3 /5)3HXk~ʽzx}yylY[l|xe\TG84:>;AZw~rniXTg{xtecf[H?I`noluv{ĺxR=2.=Xu~qgedftgC$ E]`gznW>/4EPRPF=Fdǯɸ{w|r^SU\ccbnwfbW6 AleH85?[olt{H$'17;-):RrˣuP;NyúbH96. 2p{bIACMZbftɥ|ngaZ[l~ưqM8Gaf[UUWZQ6 )$3Jd}ycvv|qi^\^\Q;1Gd~zbTF/ Dkyqsm^axu\\kkbar|wx|޹yC  -V{þmgt}q^T]Z* Y}\^wϰjdzvhXWnZ:/:DHF:7;=?4#5[yˬn\QTfsunjtwWN_otkXQmuuu^MSefK66@Tw]@2(&6Ja|ubahiiggss^NPh}{mrzpcUMMWgqxyǶncoòmM:9I[aZYdcRC>FfzeVRQXsz[A-! 8LKEGHEObifef`c|sipyymYFHft_NB9=Wuz~~~seF%!6Oh~ƷĜp`iu}ud_YJ6&-Py]GVťx]YY[j}yrmr{{nfi}ŧ}oO& 9YgifXG?HV\WJCPlzuumZO\ouoqn\U[^[]nósf_cneZ_lusvIJume`fs{vnbK0@c{ϺyosŮsXKGQmv}vd\dpkUHUqmenwro^F87;=FR\dowtxwuxtg^f~ͽzbM7 5Rd_KCDLZd`RA/)/;LhγynvuaA/7JW]cgjjga[SKB9442)!$=^vɭ{u|r\XXQG=0*0=5/&#0Eiżxa>"+Pp~y`SOOUgĶqiliV=04874:L\gtx]PNOQSRJBBHF=:BPXWRS^q|wpso`RMMP[j{żzknwwk]SQW[RB9>LZdskb]UPQ_u|aWWTF53AOW]adlhODFLWh{zytlc^^bjstmb_enwz{~aOFGRcu|vttw||qeTC>?BBFJNSZ_acekt{pmu~~}~tijurd^]^cfjmia^k{y}zrsqf[TOOS]isz{xvne_WLD?<9/A]mmf\QB88C[{Ƹzp`PDBGTf}ùplxmP<53+ 3Z~ٷ\K;! #AVahpuydE@GH>8D]rz~lP:8Ha{~uu|xj]WUY_^WOR_o~tSA;@Rlmfcdr|j^d{~vnaUNKFCHMPTXZX[gt~ztk`]f|zw{w{otl\W]ddejf^f~ma`qЯvmhitsgdhpthTB70-1=Oajosrnsvh^VPPXl|zqlr|pi_L81=Rcny~ytwǾxjdflv~tyr_P5*:?9,&0Nvvi^UU]c_X]nȤ~dWQPSU^pѺpd`acda\YVV`uyvrnqy~{zzvtoc\afb\WQMLKPYe{{pgen|vgchnw|eSG==Ib}cI1"8Q\f{ykXMRTH;>V~ʹo^fťeO=4-)1;?ES_kraNFNY_jvwsWJQ\[PF:.,8I]wyecszlv}}}ǻo\J7( #5Nfpniedhnsvx|sps{~~wpnqtqjfnz~{xgQ@>Sk||mjsxxsj]I4%$-Ce}|mdhvwXB64;Mcpttuyó~kfbZZ^UC<@G[s}|xnr}vvy{}{w{{k`VQOI<3598:BHN\vxrysmhaWOKNT_jvzfWTZZUPRZ^bmzrmgbbdiquod[Yap|{vzþsiegkqsfXZgjeiu}lO;,#$0>O]chpuh_Z^jt|~wqouqjgcj|yyvqlb[YTG::HZhllqrr{~stv|zo`WXWNHMSSPUerurld]^gpurjcdn}}x{ÿ|eSNLC;AP[hxumfba_]fz{rhbcfcYQMJGHMPQU_jr||wnga\[^a`^ZXXZ_cdbXOJKMSap~}~|{yla[ZZYZ`iorstrlhghnx|wrw~~~th`bhqy}|wtvy{voha_adhouy}yuqt~sdWLEEGHPbw|yztty|{ysjfeeekqqms|{xvutroqvwy}}rprt}}zwlbchiikifilnsy}raWUTT[fkhju~zuw~}xtpnrtqszzwvn^W\`[[ahpzspty~{sruslgb`bkv}yusturlcWOORUbxɼ|qfXIAEMPR[oyh\PHHR]`[UZfosz{vqt|ĸsok`TG>:>KYbe`YZcuzywl^Y\ahntwyôy{wpvvsl^ND<:=>?Ke|{rjedbbhmkjw}zxyxss|}}silt|~vid^RKNSSVZZ[dnz|xrpw~xljprruvxum`OD<0% %2GZgxyojhinsrrxzzxf_^YUTSWcjhhovvvy~õ~n^URJ?<@=2,2>KWWUWZYZ]XNJNXfxõ|hWOKJKMQU[]YPMLE815BWit}ĺt]F=AN`s}unhgffjqurh\WYYRPVcrǺ~gSB;CLH@>AHQXZerwtsvwxy|vrv~}tj_TH=6540/6@HJJJPZbfoǺsjgb`m}º}maYUUTQJDCKRTSOPT[gu~yoeZRJILRX_fmrwywri[OGCCGLQ[fr{û|xx|}wqle[NFCEILQ[dlswwxvmc`ccbiv}|zysnu|wvtrw}||¶qgccgmt{|smlnrv|~|zumknme[TPQWakrvy~yuusprw|zrliipy}xvsnlnokffgku{xuqrvz~}zskb[URSX\^dr|uusk`WUV[`ed^WX^bhqyzslcZVRNOYdkuüysi]TRSSWbjlmoplinzxyxutvvvyumfa`do}ujb_`^VPQZblysga`bcgkrw~ukb[TKDBJWcnx}uqqtyzxupkf_VNHC=;;@HS]gpz{tqpnmpuvtpkfc_\[[XRPMLKPXahpy~yupkhgfefeddedcfkoqtvwuuuutsu{}vqprsttsqlhfeegkot|}zvpmmnpsw}zrje`\Z\_bflt|~|}~|}~~|xtqpmigfffhkqxumf_\ZYZ^dlt|~}yyz|~~ztplgb^[ZZ[^birz}{y|yrjedeeegiijmptx{~|zzy{|~~~{xtqmigfdbceffgioty}}zyywrlgdb^\\\]_bfmsx}LISTINFOICRD 1995-05-27fact$rockdodger-1.1.4/data/Makefile0000644000175000017500000000155113706632107016514 0ustar krawczykkrawczykPACKAGENAME=rockdodger prefix = $(DESTDIR)/usr/local datarootdir = $(prefix)/share datadir = $(datarootdir) bindir = $(exec_prefix)/bin docdir = $(datarootdir)/doc/$(PACKAGENAME) mandir = $(datarootdir)/man localstatedir = $(prefix)/var gamesdir = $(localstatedir)/games INSTALL = /usr/bin/install DATAFILES=$(wildcard *.bmp) $(wildcard *.png) $(wildcard *.aiff) $(wildcard *.wav) $(wildcard *.mod) $(wildcard iff.*) IMAGES = $(wildcard ./images/*.png) $(wildcard ./images/*.bmp) $(wildcard ./images/*.xpm) $(wildcard ./images/*.ilbm) all: @echo "prefix = $(prefix)" @echo datadir = $(datadir) @echo PACKAGENAME = $(PACKAGENAME) install: $(INSTALL) -d $(datadir)/$(PACKAGENAME)/images cp $(DATAFILES) $(datadir)/$(PACKAGENAME) cp $(IMAGES) $(datadir)/$(PACKAGENAME)/images uninstall: rm -rf $(datadir)/$(PACKAGENAME)/ .PHONY: all clean install uninstall dist rockdodger-1.1.4/data/fart.2.aiff0000644000175000017500000035421213706632107017004 0ustar krawczykkrawczykFORM؂AIFFCOMM@DAUTHc64 fart generatorSSNDnthputlqrtnnvoropwktnvmtlwmtmunspptnrrpqqqrppsprospqroulunsqosprospqrnvlvltqpqrprqosqpsorqpsorprprprprprqqpsosntosoqsorqoumtorqqptmunspqrotnspqqrospqqqqqrorrososprorrprorrosorqqqqqpsosososorrotnspqrqpsntpoulwkvlvmtoqsosorpsntoqrpqrpqrosprpqroumsqoulvlvmtoqsorqotorprpsoqsosoqrqqprprqqprqqqqoumtpprqpsososorqqqqqqqpsosppsosorqqptlvmtosntorpsntoqrqprprqprpsorpsntorqprprqoumsqpsorpsorpsntnsqqprprqprqpsntosososotnrrosppspqqqqrprprprqpsntosorqqqqqqqqqqqpsosorqqqqqpspqqqptmumtosorqpsorqpsosntnumspqrqospqsnsqotorqqpspptmunspqrospqrosppsososorqqqqqqqqqqqpsppsntpqqqpsosppsntorprpsnsprqqpsososotmunrrososotmunrrpqrosospqrntosorqpsntnumtorqqqqpsosososnumumsqprpqrprprprpqrprpqrospqqrnunrqqqqrospqrotnspqqrotnrsmvmrsntorqpsntppsorqqpsosorqqqpsotmtospqqqqqqqrorqqrorqqrososotnspqrqprprpsmvlunsqotntorprqprprqprprqprprprpqrprosotnsotmvluoqqrotnrqqqqqqqqqqqrososotlvnrrorqqqrorrospqqqpsorqprqpsorpsnuluoqrprprprprqprprqprqpsntorqqprprprprprprqprqqqqpsorqpsnsprprpqsmvmsrntorqqqqpsorrnumtpqqrospptmunrqqpsorqqqqpsotnrrosprotmvltpqqqqqqqpspqqqqqrnunrqqqrnumunspqqrprpqsmuntntmvlvluoqrpqsntnsqpsorprqqqpsosospqqqqqrotmtpqrosososorqqqrososprosospqqpspqqqqqqrotmunspqrpqrotntnspqsntnsqprqouluorpsmvlvmtorprqqqqpspqrospqrpqqqrpqqqrpqqrotnsqprqoulvmsqprprqqprqqprpsnspqrorrosospqrotnsprqprprqqqqqpspqqprqpsorqpsosososprpqrprprprpqqqrqpqqqrpqrososotmumunsppsprpqqrprprpqsntntoqrpsoqrprqpsntntorqotorqprqprqprprqprprqprprpqrotnrrospqqrpqqqqqqqqqqqqqqqqqqqqqqrpqrotnspqrotmunspqqrprpqrprprospqqrosorrotlwlunrrotmtpqqqpspqqqqrotmvlunsqprpqsorqpsosososorqpsnulvmtosnumtoqtlvnrqqpsososppsorrosorqqqprpsntnspqsmvkwmsosprpqqrpqsmunsprosospqrosprpqrotmumunsosospptnrrnunsospqqqqrpqrosqoukwluorpqrprprotmvlumunspqqqqrososososorqqpsorrnumumunspqrpqroulunrrpqrnunrrntosntntorprqqqqqqrpqrotorprqqprpspprprqprprprprpqsntnsprprospqrosospqrnumunrqqqqqpsosntorqprprqqpsnumtorqpsntntorprprprotntnrrotmunsppsotnsospqqqqrpqprqsmulvnsosntntntmtqotmuntmvmtoqrqpsntntntnspqrpqrpqrpqsntnsprpqrotnrrotnspqrprqoulvluorpqqrpqqrprospsoqrprrmvmtorpsntorqprprprprpsntorrntosorprprprprpqrpqrospqrpqrprprqqprqqrorqqqqqpsntntnulvlvmtososnumumtorprprprpsnsqpsoqsntntoqrotoqrotntntnsqprprprqpsntntorprpsntntntnspqrotmvmrsmvluntntnsqprqoulvlunspqrnunsorqrosotnsosqprosprprososotmtospqptntnsprpsorqprqqqqpqtmumsqqqqqpsorqqqqqqqqqqqqqrosntpqqqptmtpqrososososorqpsosntosorqqrntosorqoulvmtntorqprqqprpsnsotnsorrospqrpqqrprpqrprprprprqprprqqpsorqqqqqqqqqqqqpsntorprotnspqrososqososprorrospptmunspqrprprpqrotnspqrotmvmspqrprpqrotntnsqotntoqrotnsososppsosorrnumsrntoqsntnsprprpqrprprpsmvlvluoqrotoqrprqprqpsosntpqqqptnspqrprprprprprqprpsnumtorqqprqptlvmtososorqqqqpsnumtorqqqqqqpsosorqqprqqqprqpsntntosorqqrpqrosprotmunspqrpqrosqotmunspqrotmunspqqqqqrosorrosorqptlvlupoukwmsqosqpqrnvltppsorqpsntorqprqqqprqqqprpsorprprprprprqprprprpqqrospqrospqqqrosotmuntnsosprosospqqrospqsmunspqrpqrpqrprprprqprqpsorqpsorqprqqqqpsotnspqrprprprprprprprpqrprpqrprpqsntntorpsnumtorqqrntntorprpqrpsnsprqotntnsqotntnsprqpqrpsoqsntoqsorprprprprotntnsprprpqrprprprprqqprqqqpsosorqqqqpsosorrosppspqrorqqqqqqqqpspqrnunspqqrpqrpqrotnsospqrotmuntnspqrotnsosotmunsospqsmuoqrosprotmunsqososprospqrosqpqrotorprprqprqprpqrpqrnumtppsntosorprqprpqrpqrpqrospqqqpsosntorqpsoqsntorqqprqprqpsmuorpqrprprqprpsoqsosntprorrpqqqrorrpprrqpotqppspqprsnrpumrptopqunpqtqnqtrmqstlpuqpmtvkprwmltwmnozpguwrho{udozydj||dd~b[dH~c'wztz{}lrvrjiloadch[][`XRWVRMNOLEHGF>@A=;5<54020-(-&)'"   ~z~zyxxtusqrmpkngkfhfbdaa]_Z]XYVWTSRPRKPILIHGEEBBA>?<=7<58616/5,1.,.)+)'(%&#$!!!!     |||}wvzwvxutvpvnunpmnmmimhkfhgggbgbcc_c_^`\^[\Y]U\TYVUWQWOWMVMTNPOOMOKNKMILIJIHIFIDHEDGAFADBAAA?A=A;A9@:<<8=7;79785838261604/3/1///.---,,*+**(*&*$*"*!'##% $ ##"    y\G4S*{SES Jd$168uS%U5Vgr{ncIC xImrJo;s8 [A.w5E>`4AZWA=$ (    [ O  <ElWL&k;CBHGMOPXT\\_dcijoptt{z   $#)'--2257:<>@BEHJLMRQXV[[`_edhimnsqxu|z   '!)&*-+1.63879?:C@ACBEDGFJFNFPLOQPRTRXSZU[Y\[]`[e\g_fdgggjhnionosovrwszv{x|{| 3A`t5]9rI7B4|"t{/ N  L +  { nZOHSWn,`}Zw _CsL1Y |  /Vq-2JYmlkln,4l4*i_  a x ` ^ y R E c [ @ . A D )  # '   { s s q g Y ] X R C B B 9 . , ' &     { v t n f b _ U W G K C = : 3 0 ( $      y|qpifaZZQPIF@?56,.$!  }xtomhd^\UVLNCH:@27-+) "  ~xyrpjkcdZZVSPJGF@?874.-)%$  ||uvopiieaaZZUSQLJHDC>>8931.,('"!  }zzutqnlkfh`d]][UXQRNLJHFC@><;66300*,&(&  ~~z{wvurqonjleidba`\^YWXTTPQKPGJGDDB>@<9<38230--+((%$"!   ~{}xzwvvstntkqjljhggcf`b_`[^Y[WXTWRQSMPMJMGIDGCC@A>?;;;7945605/00---***'(%&#$" !   ~{y~w}vzvvxrwqtrpsmpokpjljijgiffedddac_b`^_]^Z^V_UZXT[O[NWSOXKWLROONPLMMKMJKJIJGJFHEGFDEDBEACAA@A??>?<@9>;:>6<79:5874835525040200//0,/,,.)-)+)))')&&'%%&!&"#"!!!            $=Lh)Km)]0r&j0\O  f  r 2 v m ~ { ha:d4g#y@?3'lJYQ,WB #4 %G?&Ixh|0'c6| % Y $ 1 [|)?IKv Qn"D_z*V$ _ o  /Bi(lKub\Ou5 E_  ?  ' tvjVDMY|>uc ? ;L T{;@!~#tr.h y{ ,|OTu 7?m4  VO 7GQ(=F=GQ& ( -)p!)w ` c m/_I(k9^  <;;Vkqt  0DFPdsz (1EFWcsx-7>NXdpv .3FKYbow !+6@LU^kp *->DMY`jx{ '37GHX]ip{"+1>DMU^gow '+6=DOR_elwz&/3?@NQYeesv} %'08>DNP[`ept|')29=FLPZ]ejst%*07;@GNRY\cjlux(*33??A?CCCGCJFIKIOJPNPSNXOZRZU\X\\]_`badbgdifjjkknmpppsrvrzr}u|{z{      $%$## $$%%$(%)%*'+',(/'1'2)2+3,20040342838587898;9:<:==<>>>?@?B@ACBCCDEGEIEJHHKILIMKNKPLOPNROQRQUPVQWTVVVXVZWZY[Y\[\]]]^_^a^c^e_dbebgcffgekdlgilhninjpkpnnppqptnvpuusvuvwwv{vzzwx}z~||~~ (;KZw3SvAj3`K#U!m?: @ W  j I \ :iNG76:IDbq+NF !.!"o#"#$^%%&f&D%$#""! 7Ys~ .+(8>6 $ * 7 . o"{/P,ciy , 7 / z Sg2R8[Fg "#L#Q! )KEfCj: G $-UkPN D +;~vv !!,& S ' funjw\Eo}^ Q q tR[R9b78lQA x ,C~3fdlBAx F Qj#R 4 Z,Cm; N vQn)> ,6J`Iq S  X0+7 ^?FA) |}p]OJH-#ph_WE98% sf]UH>2,! uibWNB:1& {qj_VMD;2)  wle\SLA</) yqibWQGA71'!  } w n f ^ W P G A 9 2 , !    | v p f d X U N D B 3 8 $ +    v r i f \ W R J E > 7 2 * %     x w p j d ^ Z Q P D B < 6 . .  $      ~ ~ s r j f ` \ U S I H ? = 8 / 1 $ &     ~svjkbaYZMSBH<<60/'%  }~ttnigb]\SUKNBD>972-+$!  ~wxorhhd]_VWPOJGD@<:44--(&! {wwsnoihd`^[YTTLNHGE?@9;622+.(#$  yztsookkfeb^bV_RYORMLLCGA@?:9925.0*+&&"!   ~~yzwvsspmohmdi`f]cY]YWYPVNQMJLFHDAE;@9:947/4-.,(+")&      |}z{vzrxqspqlpilhifgbe`b_\`Y\XXVVTRSNQMMKJHIDHAE?@@==99885543211..-,,)*&(#&!$!        {zz|y|u}r{rxsssrroplqkningmdkgfgdfbe`ca^b\`\\\[Y[U\T[RWSVQVOUPQQORLQLOMLLLJKKGLFHJDIDGCH@H?E@D?B??A<@<><<;;<7=6:7959458172332112-3,1,..+.*++**',#-"*$&%%"'(&""!         }}}~}{{~{|}{{{{z{y{zyzyzxyv{vxxt|q{qztuvryrvsustruqssptqoumtorpsosoqsnumsprqprotnspqrospqqrotmuntnsospqqqqqqqqqqqqqqrorqptmtppsppukwltqososprntospqpsnumtpqpsnunrqqptmunspqqrososorprpsntnsqpsntoqrprprotoqsmvmsqprpqrprpqrosprososprotnsprpqrotopsospqrososprosososososotmunspqrosotnrrotnrqqqqqprprqoulvmsqpsntorqprqpsorqprqprpqrprosprprprprprprprprprosqotmunspqqrotnsosotnrqpsosntntoqrprprprpqsntntorqprqqqpsntppsntosorqpsorprqprpqsntnsprprpqqsntoqrpqsnsprproumtntorpqsnspqrnunspptmtotnrpspqounsntqoqsprntprnssopqtpnrxz3TcHp/_ Bw>yaD Q|>[z ]\1ND^h[O%o?~?|'\E2:6+)-021:3EM_fg~CWe Bpz H * R+Y+K&3 nH|,{1Q0GCl 0*yf Ox`QPtL2lB"(l-2%  u tU^~jC;apK6_{HPRjg$AduKk-mI * ePh|Q@5w(Ma " i -:%B?:wlE1 }a e"ba"d!2Gjf3b  T4,HF-#29""*  {uvulmfl^cY_USQOLICG?;<771-0)(!#   |yzqwlpjidh]dZ\WXQTMNKIEDB??9:5600,,'("$   ~|{vzrvppnljkdgd_eY_Z[TZOUPLNJHHDE@B<>:;4905//,,((&$"     ~}{{ywwuttpqnpjngjhegbcb^a\\]W\SYSURPQNMLLHJEFG?G<C<><;7;3:14202-/-+-()*$*!' &#     ~~|~z}yyyu{qzqvrrrqpoolpiohlgkfhfdgcd`d`c^`^_[^Z\ZXZWWWSYQWPVPUORPQNQLPLOJOHMKHMEJJCM@LAHCECCBD?D<E;D9C9A9?9=9;98;5;4864818/8-7.22-3,1,/-+.*,+(+'+&)%)#(#&#$#""" "!"         }~}}~~}{~~zyy}y{}w}w|yzyyyxxywxwu|p}o{tuutvvrwqwququrqtouoqqrprprprotntnsprprprqprprqprotntnspqrpqrpqsmunsprososprpqrprpqrprorrosorqrososososorqqqprqqqprqqqqpsorrnunqsnunrqprqqqqqqqrotnsospqqqqqqqqqrpqrnuoqrorqqqqprqpsntorqpsorqpsosnumtorqqprqpsnumtorqqpsntnumtntososorqqqrorqqqqqpsososnunrrnunrqpspqqqqrprpqrpsoqsnumtorqqprqqqqounrrntpqqqqqrospqrospqqqqqqqqqqqrosospqqpsosorqqqqqqqrnumtpprqpsntpqqqqrosprpqpsprpqqqrprprpqrpsoqrotnspqqqqqrosososososospqrprotntnspqrpqrpqsmvmsqotnspqqqrpptlxktpqqqqqqqqpsorqqqqprqqqqpspqrospqsmunsprosospqqqqqqqqqqqqqqqrosotnspqrprpqrprqoulvmtorqqqpsntorqprprqprqprqpsntorqpqsntnsqpsntorqqpsntntorpqsosorqqqrntorqprprpqrqpqqqsnsospqqrnumtppsorqpsosorrospptnsorrnvjxltorqprprqprospsnspqrpqsmvkwltpqqqqqrpqrprprprprprprprprpqrprorrprosotnspqrpqqqqrpqqqrpqrpqrospprqqqprpsorqqqqprqqpsntntntntnsqotntorprpsntntorprprqprpqsnsqotnspqqrpqqqqqrospqqrotoqrprqprprqqprprqpqrosqotmunspqrorqqrppsospqqqqqqpsosntososorqqrosospqqqqqrosorqqqqqprqptlvnrqpsorprqqotntorprpsnuluorqqoumtoqsoqrpqrosqpqrprqotntnsotnsorrosnunsospqrotnsospqqqptmumunrrospqrpqrpqsntnsprqprqprqqqqprrorqpsosntntorqpsorrnvltpptnrrnunspqqqrpqrospptmumtosospptmtpqqrnunrrnunsorqqqqprqqqpsnunqsorrorqpspqqqqqrospptmumtpqrnumumumtpovkuorqqqpsospqqrotnsqosprprotorprprqpsoqsnunrqprqpsntntntoqrqprprrntntpprprqqprqqpsntorprprprprqoulvmsqprqpsorqqqqqqqqqqqptmumunsosprospqrospqrprosprqotnsqprpqsnsqotnsprospqrospqrospqrosospqqqqqqqqqpsosorpsosoqrqprqotntnsprprotntnsotntnrrprprprqotorqotorqpsorqqqqqprqqqprpsorqqpsorrospqqrotnspqrosospqrnunsppspqrnumunspqqrotnsqnunsppsosorqqpspqprptmsqqqprqqprqqpqspprpsoqsorpqsnrrqqosroqqtmeaVL;.!qV1g>tC WOu/;C9}U'Kp *)801}V:}.hu]G}.N80J,.!qvtqpunv | W  _= JU"M[\7: r`gPYHt 3  < sSX;~/$yTNWs77(X1 [  [C w 5gtw}MgY3!cl| AG MQSj0~ghQO(j*;:  a Wf+V[heqzD( ^ - 5DgaB "=;:Ngmg~$'AGURkv{ (*;CRX_px"*4AFSXgpw!,5EIJSQY\`dgjousx  %&/+63<;BDFKMQUXZ_aeijoqww} &((./4599@?DEIMNSRYX^_afhjonuuy{}  &!)(,-03497==AAEGIMNOSUV[Z^acdihlonusxyz}  !!$&)(,-.222879;=>C@GCJHLMOPRUUXYZ]]_aaedgjiojqprttwxy|{   !!'#)&)-)/-02/62958:9?;?>@BADBHDGIGLJLMOMSOVRVVWXX\X`Yb[c_dbdefgigmgpjpnprrvswwwzzz}|~     "#!!%'"%%%&(%()',)+.(1(1-///1/30241534656687889;:=:><>?' t H?~X,W Yr|rm~guekwxf_oqa[blZWXdVNSYSFJPMAAJD=9A?63790,/2*%'+#!$   }{}zwzvtvqsopmmkjjfgdebb^a\][YZVWSVPSNPMKLHJGDG@E?@?;=::7847231/1+/,*,')'%'"$"#   ~}{~y|xwzuwuswovntnoonmllimgihgffdecad`c^`^^^[[]W[XXWWSWSVRTQTOTMTLQMONLLMKKKJHLEKFGGEGDECEBD@C@A@@>@<?<==:=7>7;78885829171513112-4*3+./)0(.(,(*((('%($&%!(&#!            }|~}}}~|~}{xy{}xu}yy}v{yxyyu}r{vvysxuvuutwttustuqvowmwntpqqrosorrososososososososospqqqrprpptntoptmunspqrospqrprosotnsorrorrnumtorrntorqpsntntorprprqoulvnrpsppsorroqsosorpsosnumtorprprpqrotntnspqrpqrosospqqqqrosospqqpsosntorqprpsntnsqqotntorprprprotnspqrotntnsprqprpqsnumspqsntmunspqqrpqqqqrosososotmunrrospqqqrpqrotnsqprpqsorprprprprotmunsotmumtosppsorqqqpsnumtorrnunsospqrospqrosotmumunspptmunrrospqqrprproumsqprqqqqpspqqqqqqqqptmumtpqqqqrpqrotorqprqprqpsoqsorqprqpsmvlupnvmsqotorproulvmsqprprprqotntorpsntntoqrpsorqpsososnumumtorrntorqprqpsntorqprqpsorqpsosntosorprqqqprprqpsntorrospptmvlunrqqqrosospqrpqrprqprprpsorqoumumtososososospptmtorqqqpsosotnspqrpqrosospqqqrpqrpqrprpqrprotnspqqrosppspqrorqqqqprprprprprprprprprpsntnsqprpqrpqrprprpsorqpsosorqptmtorqqqqpsosorqqpsntoqsorqpsosnumumspsosntosnumunrqqrosprpqqqrpqqqqrospqqqqrpqrosprpqqqrprosotnsppsospqqqqqrosospqrotnsprqprprpsosntosppsntosoqrprprprprqprprprqprprprprqpqrpsoqrprqpqrpqsmvluoqrprososqorrnunsppspqrnunsorqqqqqpsorrnumumumunsosospqqqptmumtorqpsntntorpqrprpqqrotmumumtoqsntnsqprprqqprprprpqrosososorrnumtososorqqrorqqqqqqqpsosnumtorqqqqqqqqrpqrospqrpptmvmsprpsntoqsmunsqospqqqrotmtppsosntosppsnunspqqqrosorrosnunspptntnsprprpsnuluppsnsprprprqpsosppsosorprqqpsnunrqqqrntorrntoqsorqprqpsntoqsmvlvluoqrotorosprqprqpsorrnumtppsorqptmtorqqqqqpspqqqqrpqqrouluoqsntntntorprqptlvnrrosnunsorqrososorrpqqpspqqpsosppsospqrosospqqrotmuntnspqrpqrpqsntnsqprpqrpqrotnsppulunsprprprprqpsntorprpsoqrprprpqqqrososospqrnvkwlunsospqqrotnrrpqsmunsqprpqsntoqrprpqqrprpqrprqprprpsorprpsoqsntorprqpsorqqqqqprqpsorprqpsorqprqqqpsorqpsorpsosntpqrntospqpsospqrospqrosppspptlvnrqqprqpsntntorqprqqqqqqqqqqpsntorprprqqprpsorpsosntorqprqprprqprpsntnsqotorprpsorqpsorqqqqqqrososososntnumulvmtpqptlvnrqqpsoqsosorpsosorqprqprqpsntpptmtososorqprprpqqqqqqqqrososprnumunrqqqrnumtorpsntorqqqqqptmtppspptmtososorrnumunrqqqqqqqrospqqrosososppsorrosorqrpqrprpqrpsntnsqpsntoqsntnsprpqqqrprotnspqrqososqprpqrprqotnsqprprqqprprqprprqpsnumumumtppsososnunsorpsorpqrqprpsosntosorqpsorqpsosorqqqqptmumtpqrppsotnsospqrosprprotntntoqrprqotntntnsprprospqqqqqqpsntosorprrnumunsprotntnsprpqrotnspqrotmvmsqpsntorqqprpqsorpqrpsntorqqptmtpqqqqqqqqqqqqrntpqqrnumtpqqpsorrnumtosososorrospqqqqqrpqrnunspqptlwltpprqqqqprpsntntntmunrrospqrpqrprpqqqqqqqprrnumsrorqpsosorqpsosntnunrqqqrpqrprqotntnsospqqqptmumtpqqqpsppsorqqpsnumumtorqqprprqprqpsntorqotnsqpqrnwkunrrqpqrotnsprprotntnsqotmunsprpqrqprqptluorrntnunrqqrpqrprqotntoqrotoqrotntntnspqsoqsmuoqsntmuntnsprpqqrprpqrpqrpqsnspqrqpqrouluoqsntorqpsorprqprprpqroulunrrpqrososprospqqqqrpptnspqrpqrosospqqqqqpsorpqrqprpqsnumsqprqprqprprpsnspqrpqqqqqqpsosorqpsorqpsntorqqprqpsosntorrospqqrqprprqprqqqqpsososorqprqprprprprqprpsosntorqqqqqpsospqqpsosorqpsntorqprpsntoqsorprpsorpsntosorpsosorqqqqqqqqqrpqqqrpqrotmunsprpqqqsoqqqrqpqrprqprqpsorqpsososospptmunsosospqqqqqqprqprprpsntorqqqptmumtprorqqrosospqrosotnsorqqrppsosqotopspsnquoi]ZUC2#zR;!j7 |F^(c ]~3E>4wOLq$m *Mq :xF,s-s%OAH  v 9  C'g@7sM.YmjijblldT[U >    \+$@ Vcb6|VL< 9 ,>s/2  w sTM9aCA]~ ) q05Au &,zHTiX/- 75 5 <HSSy, O-nCg(D$.q ,#w[  p vd7-##/h'Abd %%CA8;ZdU[qvz &*,.=HFLXbajn~ !)-:9CGSVYdftq| "'/48@EJPU[bdno{z &+-68=EFORY[ecqlzx  $)-35>;IDSN[Xccinqw{ #"*+349>?GHLTQ]Zbfgmouw~~##+)2189>ACKHSOU[Yb`ekjrsu{{ $$)+,4188;???C@EDFIELGNJNMORNTRTWTXWY[[[^]_`b_g`jdjglinlmrlunvsuwt|v{|z|~    "$&((#%'#*#+%+'+(,+*.+///.10130415446476787:7;9;;<;= A;;TYPJRQE>PPB--$# $8S1Hw  G j /J "dN zc~ NU "V$uj7n;z88 G *c$('Y1W t %EcYi_2 z M 0342He/ 5 (S(x,O#Y7t /! `#_5= + o o o d R N P F 7 / 3 '    } | q h c ] V M E C = / . " $     y s j f a W S N D B 6 5 , (      } u s i i [ _ P P I @ ? 6 2 * (       | w r l f c [ Y Q K I > B 3 8 * + #      zzqoica\VTLKDA=54,)& }|xqrgjaaZWSOJHA?9700)&# |ywrnneh]aVWQOKHBC;;53..''!  }yxtpojiea_]XWPQLKGCD=?68210(,"&  |zytuonljhebb^]XXTUONMIIE@B>;<3812--)'&#!  }{{zwvtrppkngjdec``\\YZTWOULPJKGHCE?B;?89836.3,-+')%""    |~x~t|rxpvnskpjmgjffebc`a\_Z\YWXTVQTOPMKMHJFGCF?D>?=<:<5:28333.4+2*-+*)('&%"""#!      ~~|~y{zyywvwutsrrqqnqkpjohlhjhgfgdfcebaa```\^][\YZX[TXUVUURRSPTMSMPOMOKNJNIKKGMDKFIDIAJAFBDAD@B?B=B<?===<:=9;998:596582725232120/1-1----,+,)+*'*('(%'%&#&!&&%! !          ~~~{z||}{~yy}z{{y{yzyyyxywxywyuyuxvuwtxqyqvsvpwptstpuprsososospqrprprpsnumtorrnulvnrprprprprqotnsqpqsmvluntntnsprprpqrotnspqrpqrprosotnrqqqqpsososorqqqqqptmtosotlwkwkvmtorprospqrosppsosppsorqqqqqpsosppsnunrrnunrrospqqqrosospqqqqqrnumunrqqqrnumtorqprqoulvmtnumsqovkuntntnsprotmvlunsprotmvltqospqsmuntoqrpsntorprpsnsprpqqrprosprpqqrprpqrpqrprotmvlunsprprprprprpsntntorqqqqptmvlunrrosorqqprqpsntorprprprprprosprpqqqrpqqrotmuntnsprprprpqrprprprqpsososospqqqqrotmuoqrosqpqqrprprprprqprpqsntnsprprpqrpsntntoqrqotmuntnsprqqpsosorqqqprpsntnsqprpqrprprpqrotnspqqrotntnsotorprprprqqqprpspqqpsotmtpptmsrosppsospqrososospqqqpsosppsosorqrorqptmtosorqpsorqpsorrosososososorqqqqqqrospqrosprppspqrnunrrntppsntorprpsnspqrprprotosorpsosorpsorrntorqqprqprqprprqprqprprqprprprprprotnsprprotorprotnsprotmunsprprpqsntntorprqpsnumsrnvkupptmtosorqpsnumtpptmunspqrospqqqqqqqqpsosorptlwltppspqqqpspqqprrpqqqqqqptmtorqqqpsososorrnumtorpsntntnsprpqqqrosorrosorrosospqqqqqqqqqqqrosprosospprqqqqqqrotmunspqqqqptmumtososospqqqrotnspqrqprotosoqrpsntnsqotorprprqprprprprqqprqqrntorqprpsorqoumtorpsmvmtoqrpsoqsntpovkvnrrpptnspptnrrotnsotntntntntososospqrotnspqrprproulvmsqprpsntorqpsosorrosntosorprpsosnulwkvmtorpsntoqrpqsntmvmtorpsntntntnsprprpqrprpqrprpqrqprprqprqpsorrntososntpqqqqqrososospqqqrotmunsprorrpsnrrpsnsprqproumtorqqqqprqqqprprprprpqsmvmsqpqsmvlunsprosprosotnrqqrorqqrorqqqrososprotmvlvmtntosnumtosotlwltqosppspptmunrqrpqqqqrosorqqqqpsorqqqqpsosorqqqqqqqqqqqqqpsntoqsnspqrpqrpqrprprouluopulvluntoqrotorqprpsotmtorqqqqqprqqqqpsosorqqqqqpsnunrqpsososntorqpqrprqprpsorqqqqqqrosospqqqqqqqqqqqqpsnvjxkvnrqqqqqpsorqprqpsorprpsntnsqprqpsorqqqqqqqqqrososotmumtpqqqptmunrrospqqrotnsprprotntnsprprpqrprpqqsntnsqprpsmvluoqrprprprpsmwkupotoqsoqrprqprpqrpsnsprpsntntorpqrpqrospqrpqrprpqrprpptmvmrrnunrrnunrqptmunqtlwltorqprqpsntorprpsntntorpsorqpsorqqqqpsososorqqqqprqpsorprqqqpsnumulvmtpprrnumunsospqqqqqqprqpsnsqprpqrprprosoulvltprqprprqpsntorqprqprprqprotntntnsprpsntntosorqpsorqprqotnulvlvnrprqqqotntorprpsosorqqqqprqqprqpsnumtorqprqprprprprqotntpotntosnsprprpqrpqrqprpqsoqrotoqqrprpqrprpqrprpqrprprqprqprqouluoqrosqprprprqpsnsqprpqsntnsqqqqprrnvkvmtorqpsosnumunrqqqqqqqqqqqqptmumsrosososorrosorqqpsososnumtorprprprprprprprprprpsntntntntorprprqprqprprqpsnumtosorprqprpqrpqrprpqroulunsprprotntoqrotntnspqrqotnsqotntoqrprpqrotmtppsososntorrosorrpqrospqqrotmuntoqqqsnukwmsqprprotoqsmvmtntosorpsosorqpsosorpsnumsqoulvmsprpsnsqprqpsntosorqqrosospqqqqqrosospqqqrpqqqqrotmumunspqrpqqqrpqqptmumtpqqqpsososnumtppsorqpsntorqprqqprpsnulvmsqprprprprprqprprqprprqqpsosorqqqqprpsosntospqqqptmumtosnumtorqqqpsososotmtprpqqqqrosorrosososososorrnumumumtpqpsospptnsqoulvmtorprprprprotntnsprprospqrososososososorqqptlvmsrntorqprqqqpsosorrosospqqqptnspovlvmsprprqotntorprqpsntorprpqrotnspptntntnspqsnsprpqrprpqrqososqprpqrqqqqpsospqrosprprpqsntorpsnumtorqpsosorqqqqpsososospqrpqqrprosprosprotlwltpqqqqqrospqrosprosospqqqqqqqqqqqrotnspqsntmuntnsosprospqrosososppsospqqrospqrppsotnsorrprosprproulvnqrqqprprqpqrotntnspqrosprosnvlumtpqqqqqqqqrpqqrprprotmuoqqqrprpqrqprprpsntorprprqprpqrpsnsprpqrprospqrotnrqqrpqpsosppsorrnumtoqsosntntppsntososnunrrnunsosospqqrotnsprosotnsososppukvoptmumunsosospqrotnspqrprpqqroultpqqsmuoqrpqsntnsqotntntnsprpsmvluoqrpqqrotnrrosppsosppsospqrospqrospqqqqrpqqqrprosotmumunrrotnspqrpqrprotmwkuoqsorqounrpqsnuluoqrqprprprpqrpqsmvluorqprqptmtorqqpsorprpsorqprqqpsorqqptmunrrosorrosoqtnsorqqqqqqpsosnumumtosnumtosnumsrosppsppspqrnumumtpqqqqrospqrotmumuoqptnsotntlvppqpspqqqrorqqrki[XIA* ~aE)o:xI]/x1i Ec X87`@d CSishmr\g$Kk5b/^0yO],X<tJ(   YlR J>M; zw~Q8_M/}A-pb8Ct I  n UM 4 /tQ0x9@ [(d$b$y4 U5 v 0J vsCL@I9B HW+,~l & 9.@ k # o+<,$$ '."*+3-/3875<>>=BEEGDOKMORTSWX\Y[``cafhgjiplppttuvzz{}~  #$ )!,$,).+1-404568:9<;>=@?BBCDDIGJILKNMOQPSQVTVXV[Y[][`^`bacedghijklmmqnrspwswwxx{{{~}    !# "&%!%#&#(#)%)('+(*+*.+/-.1-200313334548395897;7<::>8AC@BCCCECGCHFGGIGKHJLINIPJONMRLSNSQQSSTSVRYSYUYV[V]W[\[\][`]_^``a`c`eaddedgeejdlfhlhlkiphrhrmpnrlxjymvrutuvuxuyxw{w}x}yzz~~~|XP=(X6^-[r2g,B[ `]>XOd#"z0TjB+6?N3[Yp< j 0 Ti ( ^vBJebG+ 1 :  pT?&qL/](H|%[O0|!j(r ) 3 H"hE  4~r[G% c1t  g mO ^sGL5 ghsrtkesu^[^iQOOWG?AC?-550%%%&    }zzuqnmkce^_YWRRMJJDE=@7:32/-'*"# |}xwtrnmjghba`\[XUVPPKKHFBC>>9956/1,+*#' !  ~}|zxuwpsologjefca__Z]VWWQSONLKHHDEA?@;;;3:05/-0'-%&&#  |~{y|uysurspmpkljhieebca__\\ZZXWUSUPSMNNJLHGHDEBB?B:@9::6835313-3*1'0'+&(&$%#"!      {|{~y}xyyvzryqwqsqqqmqlnlkkkgkejdfedcc`c`^`^^^Z]Z[YWZUXTVTTTRTQQSMTLQNNMMMLKKJKIIHIGGGEFFCF@FABC>D=A?>?=<>;<;:;8:8969493645332303.3-0/-.-,-+*+*+&,$+%''$'"&##"""! !!           }~~|~|~|~zxy|{y|x{zzyzxzxwzwxvxvxuvwtvtuvtususttquqsrrqrosprpqrotnspqqqqqqqpsnulvmtosorqptmumumumtqospptnspqrotmunspqrotntnspqrprpqrpsntntpprpqsntntnsprprotntnsprprotntnsqotmvmsotnuluorqqpsorrorrospqqrospqrnvlunrrotmunsppsospqptmunrrosorqpsorqoumumtososppsospprqqqprprqprprpsntntosntorrorrnvkvnrqqqqqqqqqqrososotmtospqqqqqqqqrososprotnspqrpqqqqqrppspqrospqrotmvlvlvlvmsqprqprprprpqrpqqrotnspqrprpqqqqqqqpsnumtpqqqqqrospqrprprprprprpqrotnspqrospqrospqrosprprotntoqrotoqqrotnsqotntoqrprqprprqprprqprprprotntnsotmunsosososnumtppsnumunrqqqqrnumunspqrospqqqpsorqqpsorqqqrososprprpqsnumtosntorqprotnspqqrnumtppsorrosorqqqqqpsosososppsospqqqqqqrosntorqprprprprqprprqprqprpqsnspqrpqrotnspqrprotmvmsqotorprprprprprqqprrotmtpqrpqqqqrososospqqqrotmuoptntnsotntnsprotnsqprqprqpsorpsorqoumtntmvluoqrprqprpsntnsqprpqrpqsnspqrprprosqotmtqnvlunsotnspqrotnspqrprprprprprqprpqsntnspqrpqrotnsqpsntntnulvmtorqqqqqqqqqrospqqqrosorrososnunspqqqrprospqrososotmumunrrotnspqrprprprprqpsntorqqprprqpqrospqrososotnrqqrqorrotnsososppsorrosorrnvlunrrprpqrpqrotnsorqrotmunsqotmuntnrrosqnunspqqqrprpqqsorpqrqotntnsprprotnspqqrospptnrqqrpqqqqqrosorrpqrotmvlvltpqrpqrosprpqqrprorrprpqqqrpsnsprpsmwkunsqprospqqqqptmunrrprqprpqsntnsqpqrqqqprqqqqqpsorqpsorqpsntosntntpotntoqrprprpqrprprotntorprprqqoulvnrpsorrntorprprpqrprpqsnsprqpqrprqotntoqrprqpqrprprpsntorqprprprpqsntntnulvmsqpqrospqqqqqpsospptlvmtorpsnulupptmtorqpsorprqprprqqprprqqpsorqprqpsntorqpsosospqqrprpqrqprpqsntoqrotnspqrpqqrotmunsorrpqrotoqqrpsoqrprqotorprpsorqqqqpsosospqqqrqpqqrprprosprprnvlunsotmuoqqrotnsprprpqqqrprnunsprotntoqrprqotorprprqpsorprqqqprqprprprpqrprpqrotnsppsosorqpsntntorqotorqprqprprqqprpsorqqpsnumumtososntosorprrntnsqpqrosqprpqrqqqprprqprotnspqrprospqsmuoptnsrlxjwmsprprprpsntoqsoqsntorpsorprpsorprpsorprqqpsospptnspqrotntnsprpqqrosospqrospqrpqqqqqqpsorqpsntorqprqprqqqprqpsorqpsosntpqpsnunqsntpotnsqprprprprprqotoqsntoqrotoqqqqrpptmvltpqrpqqqqqqqqpsospqqqqrpqqrospptnrqqqqqqqqqqrospqrotmunspqqqqqqrnunrrospqrospqsmuoptntnsotntmuoqrosprpqrotnspqrotnspqrososppsosorqqrnulvmtpqprqqqqprqpsntnumtorqqqrosotntnsqpsntorqprrnumtorqpsntoqrotnsosotmtppsososntorqprqprpsosorqprqqprprqpsntorrorrnumumumtorqqprprqprprpsntnsqoukwmsprprpqrprprprprprqprprpsntoqsntorprqprpsorotorpqsntnsrntnsqotmvlumunspptmunspqrotnspqqrotnspqrprqosqpsnsprprpqsntorqprqqqpqsntntntnsprprosprpqqqrpqqpspptlwkvnspqqrpqrotnspqqrotmumunrqqqrosprotmvlunsprprprpsnsqprpqsntmuorpqrpsmvmtoqrqprospqrprpqrqqprpsorqqqqqqrotmumunsppsorqqpsorqqqqrospqrpqrprotnspqqqqqrnumunrqrosorrosorqqpsntorprqqqprqrosntpqqqpsosososososprososqpqqqqrospqqqqrosorrnunrqpspqqqqqqqqqqqqpspqrosqotnsprprpqrprpqrprpqsntnsqqotmuoqqqqrososospqrorrotnsospqrotnspqrprprqqpsosososorqqqqqqqqrpqrpqrpqrospqptntmuoqrotnsospqqqqqqqpsntorprprqprqpsorqqqprqqrntntpqqotorqpsorprqqprprqprpsnulvnqsnumsqpsorqpsorqpspoumumtorqqpsntorpsntorqprqqprpspqqqqqqrprnunsqospqsntnsqotorprotntntnsqotoqsntntntorqprqqqqpsososorqqqqqqqqrotmuoqrprpsntorqqpsnumumtorrosorrosppspptmtpptmumumumtpqrorqrosorqqqqqpspqrpqsmuorqprouluorprosprpqqqrpqqqqrpqqqqrpqrotntmuorqprpsnumtorqqpsntorqprprpsntntntntnsprprotntoqsmvmtnsqpsnsqprqotntoqrprqprqprqpsoqrpqrpqrotnspqsnspqrosprotmuntoqrprqprpqrprpqqqrotmunrqqqrosospqqrospqrotnsqotnsprosospqrosospqqqpsosososppspqsmunrsntoqrpsnumtorqqqpsntorprotorprprqqpsnumumumumumunrqpsnumtoqrqqprprqprprprpqqrotmunspqrprprprprprqprprqqqpsososorrnumtorqprprqprpsntntorprotorpqrpsntnsqprprprotoqsmvmsprotnsqotntoqrqpsmuoqrotmunrsmunspqrprosprpqrpqrotnrrospptnrqqqqrorqpspprqpsntoqtlvmtosnumtorqprprprpqrotnsppsospprqpsorqprqpsntorqprqqpsosnulwkvmtorqptmumtososorprqpsmupouluoqrprqprpqrprpqqqqqqqqptlvmtosntntorqotnsprosorrospqqqqrpqrosprpqqrosorrosorrotnsospqrnunsorqqrorqpsorprpsntntorqqpsnunrqpsppsospptnspptnsosorqpsorpsorqqpsorqqpsospqqqrprpqrprprprpqrpqrnvlumuntmumvmrsmuoqrpqqrprosprpqqrpqrosprotmunspqrosprotnsqotntntoqrotnsosospptmuoqrprprprprprprprotorprprqpsorqqptmunrrotmunrqqpsntntnsqotnsprprpqrotnspqqrpqqqqqqqqqqpsotnsorrprosotnspqqrotnsprprprqpsnumtososntppsoqsnsqpqrpqrosprpqqpsprppsnunrqpsorqqqqqqrososotmunrrnunrqprqprprprprprprprotnsppspqrospqrotmunspqqrospqqqqqqqpsosorqpsorqpsosnunsppsosppsnunrqpsorqqqprpsosntorqpsorqpsnumtntorqoulvlvmtorqpsotmtorrorqqpsososospqrosospqqprqqqqpsorrotmtprprosprpqqqqrntnumtnsqpsnulvmtpprqprqpsntntorqprqpsntorqpsosorrotmunsosospqqrospqsmvlvlvlvmsprprpqrpqrotnsqotnsqpqrprppsprpqpsospqpsntpprqpspoumtppsosntospqqrnvmspqrprotoqrprqprqprprprpqrospqrpqrotnspqrospqrpqqqqqqqqqqptmvkwltppsososnumumumunsorrosorqqqqqqrpqrouluntntnsprqpsmvmtorpsorpsosorqqqpsosorpsntorqprqqqqqqrpqqqrprosospqrpqqrpsnsqprqprqpsorptmtososntppsntorqqpsntorqprpsntntoqrprpqrprpqrprosotnrqptnsppsprososqnumunrrorqqpsnumsprprprprprqqpsorqprpsntoqrqpsorqprqprprpqrotnrrpqslxjwmsqprotntoqrpqqrotmunsotntnsprpqrotnsososorqprprpsmvlvmsprprqotntosmvlvlvlunsprososprorrotnrrospqqqqqqqqqqqqrpqqqrqosotoqqrprpqsmvlunsprpqrprpqrpqqrprosprprpqrpsntnumtnumtntorprprpqsnspqrprotmvmtnsqprqoulupprpsosntpqpsorqpsppspqqqrpqqqrosotmuntmtprppsprorsmtprqntpuv)G_<bP-o+nD)w%w   5 [  ] ?$h y - % 8i)$k#kb2xK={#W@d&=u ";FLgvCc{&Z ; e w ' k  u-{1uX&-WC=_;r9==A>DBDGCIHHLHNMMQNRRRUTXUYX[[Z`Zd\cbeeffihkkknnnrossttxt{w{{{~~~   ! $"$$#'%%(&'*&**),)-+.,.-0.0001215182848696:8;9:<:?:=?B@BC@ECEFFFHFJFLGLIKLMJPKPMPNRPPSQSSRVTUVTYUYWYYYZ\WbTcZ]`]_```b`ccbdcfdgcjdjghjhmgnhokmokrlrmtnsrqusrxp{ryvwyxyy{z|z}{}}~} .<L[v 3Qy JxF2u>]F< 9 J  y 4  } G(|XLB=EFU!9zZe @  T=-Oy T 6i$>e7?W,CISf%E]z " D u &6MIX  i <w^3FQYZw yEL4# $ |j*Tlh^ {9~5 ''"(5365BBDBNORQY^^`dkknrwzz !"$)(//276<>@EEJKNSQZX^_behklqrwx}| "!&&**1-4389=:A;?;A;B>A?B@G>J?HEEHFHHHIJKHNIMNJPLQMQOPRQSQTRUTVSYTYVYXY[X[\Y_Z_\_]`_a`aabcccedeefheighkglhninkmnnnpnqospsrrvruvtxuwyv{v}vw~zzz|~ID3 3ID3@)  KU1lTPE1c64 fart generatorrockdodger-1.1.4/data/getzznew.mod0000644000175000017500000024123513706632107017437 0ustar krawczykkrawczykGet ZZ NEWComposed by:@TurboSector of@Nordic Vision@ @Greets to:@ZiBBA@A.K. Metal@Markukkuu@TuukkaX@And all members of @Nordic Vision k@ M.K.0ְ0ְ/0ְ0ְ/0ְ@ʰ0ְ0ְ/0ְ0ְ/0ʰ@ְ:0:0/:0:0/:0@:0:0/:0P:0PPP/:0PP@PP0ְ`0ְ/``0`ְ`0ְ/0ְ@ʰ0ְ`0ְ/``0`ְ`0ְ.`/0ʰ`@ְ:0`:0/``:0``:0/:0@:0`:0/``:0``:0 `/:0 `@``0ְ`0ְ/``0`ְ`0ְ`/0`ְ`@`ʰ`0ְ`0ְ/``0`ְ``0`ְ``/0`ʰ`@`ְ`:0`:0/``:0``:0`/:0``@``:0`:0/``:0``:0`/:0``@``ְ ` ְ /```ְ` ְ ` / `ְ  `  `ʰ `ְ ` ְ /```ְ`` `ְ ` `/ `ʰ  `  `ְ `   `  / `` `` ` /.` .`.` `   `  / `` `` ` /.` .`.` `ְ ` ְ /```ְ` ְ ` / `ְ  `  `ʰ `ְ ` ְ /```ְ`` `ְ ` `/ `ʰ  `  `ְ `   `  / `` `` ` /.` .`.` `   `  / `` `` ` /.` .`.` `0ְ`0ְ/``0`ְ`0ְ/0ְ@ʰ0ְ`0ְ/``0`ְ`0ְ.`/0ʰ`@ְ:0:0/:0:0/:0@:0:0/:0P:0PPP/:0PP@PP0`ְ`0`ְ/0ְ`0ְ`/0ְ@ʰ0`ְ`0`ְ/0ְ`0ְ`/0ʰ@ְ:0``:0`/:0`:0`/:0@:0``:0`/:0`:0`/:0@0`ְ`0`ְ/0ְ`0ְ`/0ְ@ʰ0`ְ`0`ְ/0ְ`0ְ`/0ʰ@ְ:0``:0`/:0`:0`/:0@:0``:0`/:0`:0`/:0@ְ ` ְ /```ְ` ְ ` / `ְ  `  `ʰ `ְ ` ְ /```ְ`` `ְ ` `/ `ʰ  `  `ְ `   `  / `` `` ` /.` .`.` `   `  / `` `` ` /.` .`.` ` ``````````.`ր h` h0ְ`0ְ/``0`ְ`0ְ/0ְ@ʰ:0`:0/``:0``:0/:0@:0`:0/``:0``:0`/:0``@``ְ ` ְ /```ְ` ְ ` / `ְ  `  `ʰ `:0`:0/``:0``:0/:0@ְ ` ְ /```ְ` ְ ` / `ְ  `  `ʰ `0ְ`0ְ/``0`ְ`0ְ`/0`ְ`@`ʰ`0ְ`0ְ/``0`ְ``0`ְ``/0`ʰ`@`ְ`:0`:0/``:0``:0/:0@:0`:0/``:0``:0 `/:0 `@``0`ְ`0`ְ/0ְ`0ְ`/0ְ@ʰ0`ְ`0`ְ/0ְ`0ְ`/0ʰ@ְ:0``:0`/:0`:0`/:0@:0``:0`/:0`:0`/:0@0`ְ`0`ְ/0ְ`0ְ`/0ְ@ʰ0`ְ`0`ְ/0ְ`0ְ`/0ʰ@ְ:0``:0`/:0`:0`/:0@:0``:0`/:0`:0`/:0@0``0`/+ WY$9Q ſ ++F2س㑘 3\JK9G3>NV8-8=K.001M7/1"2FTG* Ā'IBQbtq\mataw>c%Fݬ͛´怤iW DjmR5pWUdN1eY\dbsk[^m/VoHYU_`chY^m}an[wkhta]z`IUR(Z7="((׵Ӷc2NHe2yJ7qbw;Y^ed``omv`akNUkSQv7YfXH_VX>ROCUFAGf5b8FE3JH(J3Z ɸԈ§ģΖijçͰپ %05N>9e`8Y`]tdvygpp~w~k{~x{jomzbdfYKMZQKI7Z8S1208/5)#>=($ )' ## §Žɰټ  #,1&:6F@BNS\Ib^^hck[w}xfxd~|tmwuwvovsprV{c\dV^L`VEAY76>8#21&'* ۼϵʵŴ  +!&&!!3#-(!-!7&7/%7)567:E8LD?OVNOaY_VkgX^zfynmjiykftazdvretp`hfdjcX_[[VTU;QC???=5%5" "  ɳο˱¯®ȿ  !#"( &/+50743;=5=A?C;<9600&& ڵ)! #&#. ""K&1GC-0BGAXN1SDIZ_[ODW`Yf>_uVXbYiiTIeoe\iUUnfPckTL][Vi\@WYHVrSSR@IWhYPODH^]KKSKAMHHML6A?=GF?16/3>=2--300."   ˻ȹü !#"&!5&'6.0?2%%A9K;.8AF?JODATYAJVE_]WMdlOc^^[j\dhf\dsiZ`hddoW]ll[ah\[^^W^^S_ZTJOZINO=FPL6KB8:@972:7/11%3,&%' &$ ļǼ   !"%"* $'. )2)'3*&94)67/8924:<9E76>@=C?F?F>?B?8_*,7.)-D?7J$6-#?H: #W ! ' +! - J (3!    *  ,  #   -# +0 ?+   )' %.$- *)+  /  ) ( " # "  - (  ) "          #"       "       %                  = ',    6!u҃BK6 $4# #-. ! #    '-                       ۾01kϼw^IeuRYetFVFˀ'܀Ɉဗ_EJp`Vw"Nw"TS|wcP4ߐĺɠջ䍀བ1IUXvMNY7{$0QRu> :LoXh3 3K::.֭֬݊<0;_a|5GXmdMF'4grFUYM29Q ЀӀɨӯ 3 9Q\&voYwszes;BCrVhHS7GeCV* 【ۀㅀƙ&\YfJ7@phtV`()PSKH52?=CA߽ǑĊTN,ÀEM>K.xp(07Y"xg:Ey-wun(eiRIVzkNCMWvV\N]zKTyXR?9aq /ѾΙ٪Ƿ退ƎϷ%Mkp8n^|x@HiVo8dU^jfxwq>R[XgAyTlZ]b\R:]faV:^ALE7c@8m%V, 9&& ɶḧŵᰡԮŭö $L,;7%27FlNXiLh[`Vphwrs`vzwxTemrrQi\SjnG<0>ACEWI9%3);%' #< %1 ƪĵ̵   6314 )W)ZPMQBdwYxktsuW{w{`prpr}t}||uffq^UUXUNU_VA39E/1*( ƵȺƽéŵƵ )$%5! %,*$'!"%- )2;34?/.9:EN8:2CBRm\VWLUhd~ndkm~eynmxyztkm[dz}~lliffnjbVbZKQ?MHIKD82& (!! üǴʶ¼ɻ  )(30!",/=E@,&3;7:GBEH;NL=F>ONLIX\[TWQX^RY[^i\YW_drlfd]^ejloigrwxiqmpvuktrwoksl^adgmi\]WZ[SRMCHBC;9>8.*!  #!&%/=<16;:=?GHPNDELPQY_`?W`^][Sue\V\Sk[^d`V[TqmjTIlxk[VMUyYRcZINl\R`^@_K?ITR@169IU7iVAHXEKA)0BD<:7(8B4/0&&3%$0' &  öͿ   !&!!-$21Ŏ,'A=@99.<7:TRJHIAN[BLeY]WXP\j\^Vf]e]^`gkZ^hYlc]^mbQogUWcZ[ZPXW_LGW?BXW;BR8AB1)@D)87200*&2- ,+* ɯĸ   #&"&+) !-.#$'/92-.05(2<207B56=2AD>9KB/IB?B@B?9:<<6A563031031%'(%2*#!($!      ɾƼɾ  ! "(*!)%76'**157/*10369:5/577=?8>=:4==?DBBB;/T*eP.a) j&)KN AB>0?9''/E#' G9@5%8,>2!KC.%*7)+%E# !E!/  & ?B ,*  !)@@* ;  ( # @.N & R . *0PG "% 7H( .7B9 *P #8(1/      ,   ,0/ %  67&,#+;,?  '# &     "      "       )$                          %  ; /00$                                          X9R|3-75XIB' && !"%3ԃ,,3CٺT툯&bWι*#1M(X:ДĄ\OK]S ]sVײ,`F\ĸ/2) ĺ#E4E)8' ȩ3j3vZ ,ЃږJ a3^xG:Y61E^::2 +2Ý"ֱҖ&=~}hT0sfNcR Ȫ˄5@`wnҤ)?7 |gE`[Ϯ0?PTWZXVWUOOQHEA- +" ȿ#=K*Ʋ'3D?1ѿ '3و?.\ծY$EJ$q%BJȾ.],֗IO@&4DͿɴ/Hl! -[))ƬT$I9AIT ٬4M)@;5-) ;n$d<;$=}* /DO ᴈEt.]qtE@ 4d)\$}Qž% I H*˼pPHň'he 9e$@,눆1@AJXE,1O[ #݈T\9Hู.) D3H١D|I ,Xi$$Xy-Ň! `OU\ p5X87թ褬X/ϴ ʈ?d=Ql|51I(U1}F ٻ*@f'7. " Y Ѫ⠆ GgnA\/A Ť I%=EỈʱB٥e/ rtE' X<:6:Q @P8e -ي¼=UQQh "qJǡ@Y(-֧l\)E랼@ x%88i/G㬹`` ԥ t,U<築1ᄍ$@5ydM&E/I<๜+T+$,QȍY@< 9XKy8"Mbv!ġ+4M%KӠ7;lGppIŰ%=; ɧ`7B-⧈ɴ dS`l-g-w9-ѹA^/DoAt3ϝﻼ-Gy:Ga D9n}!/ňl<<ȴ4@Mq$`H85Y>ĺAG) W)&ֽ 81'e 7)F91L)Aш l`=Ġ .,Waec)MU `T8 5- ڬ`-W<&HEr,!ٔ%n%Q<ݨ QX aQ\oaϽ`  AA6Ք 又-a TEڼ?q IeUF $xad9dķ̸Gٙ)D!Gڤ q\/~[>%@aiP\ "$وϟ4o5s4  m@78@I `AG̈g`o5􍽷tG61Ȉ+.%>/i\ du4 $4̡M>lG=ո\,S,OMK( I,5T؜`X.1 58͏ױEAхEWWoC+A ্/\INGQ żT(e@H)5YZ'Fa1-ɯT8$QIMo#7,7!ӈՔHi@QC=0*.o/Y8ԉ`E\δu4D˯hOË!,@/QTD%9<4ĆяThBOT&<Nj%1n9BY/m hHD*>I(3D 4T䔇pIA؈˩@+aAm71H7чڝ$oEZ6K'Z*S9ň繼T@5p .3QGu_@@Ȉ֑ 48$H)Ay%!@5 ňZuI3;Ai@ňvo%IPМէ9j%kC%8A/ %8G,ᆇe]=ApAL/,ш=C,@W]),B1eɥø=nw/g4)()1M!ܕ)'3͈-4 Vl )m) /ר@1*+DP/(sK7\!֧ʲ!,k6Y@Ǽ/ M (V 3O!䭇㼭Be' A=XI/) 4餠 -'͇-,\!-Xc4M7罇ݭ(CK=4 M1Iͮ%L[Fц}99Pn Wq !>ꝩ$) !e, fA$L,߷խ$KH7*X1 /;-XE͠(}07I)R oh-L嘈頽,+ $k$p(/M෇Ϲ,`53A '`-݅Z"TG%̆MJL^[ PI ]y  \C zF<ѠױHS% l" ue)\DĬ:,I%qH lKd ǛuX%!m,+وG]!D>БѮ u 48̕~(t"Dp1לlU$pQ4`@ 9NࡑԮ-3R aA,nI"`%WC'Ә -bO8nF須 dVYh(O9$чఽK6= ٔ5bE9ZT@M3ǿL] ) u (5y J\wWϴ5m`Eu@ٙ@1ȈP9D͜L`U@dKDQ q- Ԉҵ-l , .N2`@Oh@`2V(&&̱ ,F G8IC98+0%պ̝:!&(4/@!40+C0*'8K:0.',*@@A@?*"38#ٸ̑У'(!08#:1[@'#Y"825 ,  + 11E? -?:0 .,# 8 ) #  $- ضھ +E  <B *&!+ ̿ȯ&2 *%'<"0'@.2. (A/%2O%3 !'$ -+8  $0/3 A+:% "(ؼ / := & *  # !$ ( ' ) /! *" # $   #$3/*'& ,0   . #*  "+ &/5  #( *(# '$"    &!    '  & 2"             #      !                                                                                           М2/,#?m9ǯ&:.%%/LjJ+=}~C 䱜(P61H7& 1V|Kݟ4:A"NzZ;# ,%*6QmT< ̯[m`A$MbwJࣕ$ Ѵ$MvvvU4@]{hV֮  мGrvzZ;$49?% 伥EJO(د4lu|y;ڵN`rW=ʨ%ɾ  Ĺ*QdxhY7'N\k^R)ԧHOW65ZfN$ #Ư #&A]em\K,ôJS\]^RG5$ ǽ  -7ACE=60*"  $9IZ^ca`ZTMG"+171+#  !&0;61*BNZ_dfhgf[Q0)/61,$   "()+  '8K_hqrtmgZN:' ).4/*#  !$''(%"  '9L\mu}||tm]M7! ļ &-.0,)#    &0:BJKMLLF@6,!                               %   40!MٱҨ /@1*,vlAY5ԍ8|xl)`y>: V!׿7Tro[|MN`ܕ1mO!(&w(,Wnd8@ ب͈˜TpnWP픉懇@4  ,AE%aW4.,8G!xa@+ԷܱӇ,=MahoxVQPe- ȿψ(  -XO9 bEv, Ae ۝֨IQSJ^iXtO/lN쌅P;pGTmOuYG!)l˵ըͶ)Af=OaQ4G==) ʮ! 1 !``-·=%g`, w)!"!'ԩǩ-=:*8#<>@@,ܦaYD8TI4c8I .$ ) ٴǼݕ% (\hT0w!)7  @m0 " &  ߼ `L &H^-(NJyuهъ:Y/Y.<'!χ -/X,==+q +% UfT<MktOtŇ4/Ĉ#a<]uH[AQ4򆼙Փ܈'@/()FxA9`G9OS8 ῴˇrߤވ] T_'L 󘆬 '2L{Q8lO !q܆|sL'X@ liIL}_Ҝ䠇[nA/ͼ O'OO @C ̠Ϲˡԍ9R6gi!`mT4( )ܴ2 &-u BV,յ"CDF 8TE 79?A<IO$@DAѠļ !W65%I,,P8!4  =6鯴ԕɠ 2)4qi@4$j<!   X ,7  +0 -ĨͰ!#4trTJ|MY ε Juer_wnbcf9($  رմ%(5&5?elT=l5))T,,%O~LEa~~T~~]?yʀg @{~~~~~ N)d~~~~~( /,<:|Drr(~~~~i(H7 B,өM|Z`b~~~~~~~~~~~~~~~~~B}w{6T!R~~wi<̳©ʁ(U~~~~~~~~~~~~~~~~~~~~~~|k'1ϳ˼ßȮ)&K+V^tu~~~~~~~~~~~~~~~~~~zn{\zdD#˾䒧ٹµEB_om~~~~~~~~~~~~~~~~~lgW<49 Ỡ !/F7CPYhvx~~~~~~~~~~~~~~~~~~~~[mK:1  ۾Ҿž"111EF?VL]l{{~~~~~~~~~~~~~~{yekjdP@7 Ǹƺ85dSrn|~~~~~~~~~~~~~~~~}d]\Z@C&)$ν (8D;U]dpm~q}~~~~~~~~~~~~~~|x^VEEC5® 0DKgoy~~~~~~~~~~~~~~~~~~~scT:F Ʋ "5@K^Uffy~~}{~~~ljux~|jsto\[NU^A@*&ĸ&';?CA?FJRI[l{~~y}~}{|twfeaMI<8/7ֹ1;<+0%"л¼ͩ &/*ECBDCZNNY_nghsrogn`dX]J@3,ʼ  %4@DIRWZYYfi]Yjh[SSKKKC=8/% ˻ȹ!&!!.67B@?O;7723FBC:RLB818/# м¼  "709-60(4&'+!#859."  ƺĽ ! (%&#/*-            '*.'&(  !'/-2 & "+%/<()    &"/6)&)&"1(!&(/+5"  "&1(6=@>BD?<<<486,3-"" ȿ&!'$-<47DPSSLPGI?B??J<+,$,%  Ŀ $(+-,)559@D?69A?55E.!  "%(+10/,*1,./(/;90'+#   +1-634/057813-').)'&$  ƿ *4/788186@8788<1*+2,,'   źξ"#1&--:85>>FAAC@;8.(!   $##! &&)(2(%("  "$"+ $# !" '#"!"%  $!#     $!$&'   !'% "#!&''%*   " ##&$- &$*!   " #%*))'+*)##   ++(*("%!      "                                                                                                                                              %'T9+4333F0+Ry^ZL:<>! "&o (&$24T vvsuid^HL9>X.&0",PIHVTyXscrTs|truu|||d:OP ! .(73N@EOTRJ]VT\OTTT\NPRR3Bttc1pnVbbDLKN䈝Ʊ$ (%  '$0gLaTTToIRR3*(:(ؼڤΩ$ '&$BDB>+I&JB>]d@ZR=F`(  @*+9LE`R`r]Kisnzy|y|ddumnXZ[OaLD ' $6433FIWINP=RNVRRJLsxjZZ[OR="s^Z[OTVH\   `7\T,ZL6C>>4KaFDEXӗ.@2F(433XKB]K!(""",423o$94NU.EE]IX{||gid{|yvxuuuuuuruijj23B2.433333333Zjbba]fX]UPWb?aJ[R,"  [91$""42-++'.g=f' + :ڦ:. 2.+,8EB@aCH[TR?,BW%(+cZ]\d|vo~uy|||||||||||t|yx||yv|||||||||yxvuva+2DB>+=B>>>+I=+1I=8 &"1' ",:133323%( "(Tӥ  !&!* $$  &$ծ7%$"B23KF`R`]fbbp[lQ4BHRNPTTTV`\\f^[vb|oyuv|KK~{v||||||||||||||||||yumzus3L4?+I&4'2' 16 %6L F<233N:>P:BK=K=>BKFE9>(BKD9>B>>>+232-=7.3F̴´Ƌ %2*P@J[TT`\oZv9XxxrFRTTPTTTVVTbZ\fcb|v9XED]RVvccD{|jjg|||pjxuuuur-8 " 0 '%CQ\QTVT`QT`NT`EJ4EaQT<:4HWβ.=aaPT`NTVTTJQ=:,4Z9@(c%:>> 2P:+*Tλ  ?]W`ntvu]honppXx||\abbxVo]r[r[dbr2>((8괥ǸTh[htvx|pjdlhhzI4Bts~uuvvuvuxuuuuuuxF0K9BI`OJX\OagoluuH{j|prppgx-42 0TOEEEB@@>>+42&%&$24mRTTbLTT>U?:4-P!4.'" "-۬ !o>>&(++[ļӮ ٴ䑮$%udbt|lzuuux|in1FEF>aRTT`Wa||||||||||||||yBOUTRT`[gbjjl~2{m~|p~|||t:K7(42*822233PZHK8CE9>+43F= U\CHQNP6O6,C[ 4- 6$:8$'3E$933F(38+!%' д! IR`Pbuclnl~HRTTT,<>@@>>\TR\Ofruuj~]caHbQTbcW~y||||||||UOURRR3?(32 "1612233F=@TpW\NR=@>>B> g62313FB>u$ >[9X6Z.-1IH&3%0-ͬ D=!""$,: zDZT`Wl<1?@B>>>>>V]@7EB\9cU`vryv|||||sdnabccv:{|||||UBNC=B@BB>L=H9333F=+4F=P3EBa.-4FfVRP=BET ^9.I=+g % "1%,6R>>>+426% [ϱ  $7 O:HF?b8-.lZWT71+%,@2F=4COZTTbuZOTTTlplu`~uuvu||||||pd{6z||XDZQR?ON8K>>>>P3,4333213*%:= WKQWRH"?D' & $ CPE86a% !'7  (( %'?%^lcH8,I&433F(+7%6%B- " =!    %% " ($ "0+.,,+433LF7C>@>BBWTRIRNVTTT`Nc\[]]\rxuiK^XgV^[uogxuuuruuuuuu[VX{s\^XXOTTTRRTTR=TV:BJE9K?XL0EB>>&7F=+(+"$$" 6&""\Id\>    $( " 3*  0'r<< D%+ 1+"3133F@BB>Zplr9>Nxa|43"-,8333NHHH]QR\\fjo|t]o|nvxXOZ[[X\rjhj~yvuHvd`^|||y3XB>+12 -(+"1"gCRB^V>(T !  Q%&$"Rά 'ƴĵĶ7$,!@2FI?@>ozozxy33B>>1`iWRZlC"611=K@\QR\OfIPRF[NRVXg[f~u[NWX[]&v|||||UOPT9Ruhndyl|800333F=>BW6(?.2H(132H=@>>>@I8>>>a`\]UPRF =%%*  $".867.31U Ԭϴ %*=2>>>B$Ju{vumpVzH"D'413B>2.IH8DJ[NUbcrnpnNv|||puuruy>B@L:CbuuuuPP61* $&>*++7323F=>^DOVR,]gvz]UTaQRJ '63!(7 % - !ZQ:@B>+'[Үʴ  %27bhtvuuuvyuT:FHKWIXNPB>c{rpX[caRQ]t>C,3,6F=BEH[T3||||||y||gJ&62H=>4C@>:xWc\bV^aRQc]*,3 ""<,L'I=B@I8gmruuuicW82$-'-9ü""" +828'8)'豈᥀ '̱ÀӀ 'G)G"8 @249$ޟ"0 렠Æ'մ">+>9>2)G2Y\L89 "2$ ȧ¹ Ӛܹ+'YD0=2\OEa9$  -'4붼 ٹ2O\2"$׻"9 [[0DmU"J2Q80ӠÄ $2܀@aY$02f>LEh") лìÚ-ö"ì)GJ+d q'G'G@>JDY=ȼ̶$)ն ̴" $>4E)8=+""8E)2" ﻟà"ȼ9J=4$)> 0"O 0== Հ Ȼ'8$ 0O'8 $)->JQ@$="-8@d+4+'"9"2" +$- $' ܴ +)=9+'22-)"$2")ӹ  229+  2")L׻ 0-+G24G)> 0488 "80 +8  )8  ' 2'J $)"J    ׻89$$ G"++  ж«0Jȶ«+\"+4J $+O$8 -ä« )-)2׶ȴ@ OQ-'>8' $""20+ȫ0+ܶΧQ8+Y+'жD$qa=Q\UGGչ980-+)ӼDZܹ >2>9+E28 ׼ȹJ\O8G=>8TJ)$Ø)'" )ȜO8-QDGL-@89ȶ4L4>@DL2)O=E᠟  -8ȴ  ӟӬ$+$892D2 D+" +2"8+L8䴴   488@9T>"4"2")")$"+8 δΐ䶬$)+'8'))))-2@9@$+9  ჴӠ'  0'888"$  - ܶȱ2 դ8E Of$4 $\==q2 )ާ2 $Q̱̻"λȻȱ$0E )'++0J9Yw\2+D44Ȥ 0E+ ̹ ȴGJ8+'2=  OGG\8408"2-ӻ)+ ι+û)02YG8=>'ך"[E8lp[G42$4- ̬˜4`+)$ȱÏ'Y>4T-'8δ8-88h`[p89" λ -">Ï J  +4>DL=p "ȴ+O=U=9}q8襀̧ )+")䤀Ú $ +9U8$">O)@L+П¶ܬ׻䶧+)8'@04'""@$2L+00 Ӥﱻȯܻެ""-G+)4$"\4-'$@'9T軟ܼ4)$[Q" " Y8 >8 =@ -܀4ȓ =>["4f'L@f=p8\̯"Ӵ-4δY02T G$ӻ'002л)$=> " = +>++)) ޻ D$`$2 "JT"" 89ӻ  -$ 2$ 08"}G\À4JôY[J”Gl }`'-|p Qa\Of$ᤴȶ0ά Gữ+88=Q8l@}$9T\ 9=à񻻼-ιÚ̶')4>Y- h$E222)80 8$8Ӽ׻  $@'JE=0J8$+Ы Ü ) )'$""U+DT++"8-ӻ豱"+ ìȶ"=-0E>m$lT4f>89'=  ìХӱᶥ  2"+@8Q`=Y >"- ȋλ ܻȤÐ  $ $>2OT9Qp$  )` ̋ìȐô4" 2)@$)OT+>+  4)+8 Ȥޱöι  )$-4@GE9T4 0 մ$ "'- =2" ) p9@"0O"4$ Ӌȶ ᬼ""Y''E- Y=TY09$"8+)ȼޱޚ맹ȤED)"LE+ `p2QY2+ "8"μä䧴ç89GqplE8}O+Y28$μбα$-+ @ L>4LDY4[9+$ 뱫Κ޴λ2E9+882-[wO DQ $䶘8 է Ӵ$$+h\YT =D'Ȼ ំ8'"fd})02$8==̱ "öܴ¤+""2)mO'w`dJ>w8>)ȋӶ ׼ '@'>`@"8Y\`$aE'88-=O)9D[8E>2$$ן 2JGJ`\'DT"$=D$$ж0EL$-+4-  )  عC݀nǼ}ˀ0C`UM8＀&Ur}}jM4ֹ)02-&4CMSF8&  &?QcrryrgJ?8- F}i?ϲn4ݹ 04"ǜ4gF A)췟CQF0 ṑ?pn? ߼)4CUgprpg`MC6&"$ Dz ")'))&000" -?Urn cyiUF4& 0H\ry`M8ˮ &&&&"IJ-0400-)& )48FMUagnrry}}nUC-  &-8CMUcgg`M4  ǹ  )-48?CFFMQQQQUUQQUQMMFF=84- ˾ -?Qcp}rncUJC?4&    ֹµ 08FMU`jnr}rjgcUQJF?4-" &-8CMU`jry}yrj`UQJ?80) ļ &)-048888884-& Ǯ &8Qcr}yngUM;0" &-48CJMQU```cgggggigccc`UUUMFC84-&   ļ$)28?FJMQUUUUUUUUSMJC84) )?Ul}lUJ8)  $)-48??CFMMMMOMMMMJJFCA88400-))))--08?JScrrgQA0 "$&)))--//000000246888?CFMSU`jr~}nUJ8) "&)/48?CJQU`gpy~paQF8)    $)06?FLQUcjry}rj`UJ?4)  "&)-044888??CCFFFJJJJJJJJJFFFDCCA?;888420/-)&&  ")068CFMQUU`cgjnprrrrrrrrrnlge`UUQJC?80)  &+048?CFJMQUUUU`ccggjjlnnnnnnnnnnjjjjgccc`^UUUQQMJFCC?8640-)&  $&')--/000//--)'&" ļ $)048CFLQUU`cglnrry}}}rrrnngca`UUQOJFC?882-)&  $)048CFMSUUcglpry}}{rrnjgc`UUQMJFC?840)&"  ")-48?CJMSUUcgjnrr}~}yrrnjgc`UUUQMJC?8840)&"  "'-088AFJMSUU`cgjnrry}~}}rrrpnjgc`UUUQMJFC?8620)&"   ")-04;?CFHLOOXZ``cgjjjruuww{{}}}~}}}yyyuurrniiieea^ZXWLLLJFC?;:820+)&"   "&'-/248;;;;;DFHJLMOOOOOUWWWXXXXWZZZZXXWWWWUUUSQMLLLJHFFDDA?8888420/-)'$$      U3"rockdodger-1.1.4/data/fart.3.aiff0000644000175000017500000057114213706632107017010 0ustar krawczykkrawczykFORMZAIFFCOMMx@DAUTHc64 fart generatorSSND       ').+I07.uw&<0Wfo ,/%BE49WZQKlphe|z   !)6177T,bER>2 F!(7OBY\& T  w Y"^PN b;y . 3  7ZA06,wF: QN?Qq eO$ I Y $ q  H[<x 9 1NN % B = 5 ^   ] RES, #"]t01FFle ep`: # ^ =$Cv %uhcq# O w9 \  @h) < e<l>v> n `W/   6=HFw R;Z?[ A) ~ $=U " Y [ u"0P Qt w v F ]( S[ZBDvN DQ) _F?kj HQ 4(n]! 5wL( b6s6_$I&MiP>"a8 C+ax: KYf'+7MHg5$XZAl_) 'C:0@U]HZkthm *629AJNMY^dgjxv )(42?=HFRS[Zgdro{{  ')/28=?IGRQY]adlluw| ''.16;>AFJOQWY^cekkruy} $&)/-83?AECIFMIPPPVSXYY^\a^daheihlloopupzty{z~~   !#"$&)(*+-..1224586::;=;@B?CAGDEGHKHJOMJRNVNQVYRVX]YW]b\]afe]elgdermfittjlv{ok~}vn|vs}tww~{|y}{rl aYZ)Up6%EWgECH~:wq_i Q pE\o x<2th[9sNTz13 6$  /= 8= (/ZQ8g 3vn"$`!"(!` MT ]qQl"d ~$t=C5~je  kR@d]hh [ Ku Xm*V t.{ {"'sD66 df*/B.^W H 6c u/yH)Z\ )]NmU!  + & O h&A  J "N!'J^ 5#b-#T fi T}Ep [29D7s8-B(!L, L g'  1![M O7 "@ E Sk 5 F+MGyf F(Y  o %8 cd @$ l of:IlEIMSW\_fgorvz %*,24:;DBLJRVX^abnissw~ "%(.,64=;BDIJRNZS`]fclisqxw} !!'&,.0559==BDFLKQQUX[\baghmmrryw~} !#%'++//467;;@?ECIIMOQRWWZ^Zf_jfioltpxwyz ""&%(*--01274:9<>>BBFEHJMLROTVTZYZ^]_c`fdiimjpmsrtuxv~x~   #%!&%')(,+..1/62758:9=:>=@BADCEGFHJILJOLQOQRSTUWU[V\Z\^]`^caedgggjhnjokqppuovvs{t|x|{}|~   "#!# $"%"&$%($)&)'**)+++/+0-0/1/212325354757696;6=6>8>:>=@>@@@B@D@FAEEDFGEGIFLDNFNILLLMNNONPORQPTQTSSVTVUXUYWYZW\Y^Y\^[aZ``^aa_e]gaecchdfeihghhmgliojknomnnrqkuqumtuxouv{ruz|twzvxzyx}}y~v{}zz|yy|wpojjlsofsYE4?T a 8 2  M < ([-H#2 e] !V <j!` 9oMkNbU|ltV6#+7ww8bZp#n+# $ A )l;k <:$^J2N 4/G! l} #6\("*b) E$O )!E S qt0y .3m  /s?#uf'Gtq"\ &E  'zQ / z2" e b ,H_Y+  W'Aa  gTB !u 73 3 1: N/ 9"#1lb `$u Z 8# E!tp g uPqkV VE 8,cg m# 1UZNb\|e" fzazM "=.AA idlE,'5nC\LDO9I'G A 8/*  ~~|}}}}}}}}}zyw}|x}xz{xx|u{vxzu{s{szsxvtwsvtusurupvqtsptqqsorprqprotntmunspqqrprpqrpqrotmtpptmtosppsnumsqpsnsprqprpqrpqsmunspqrprosprpqrospqrospqqqqrosorrosososorrososprpqrotnspqqrososprorrotmtosnumtoqsosorqqpsosntorrnumtppsorqprprprprprprqpsmvmsqpqsnsqprqpsntnumtnsqprpqsntnsprqosprprpqsnsqoulvmsqpsososorrotmtosososososotmvlunsospqqqqqqqqrpqqqqrospqrospqsmunsqotntorpsnumsqpsntorqotntoqrprqprqqqqprrotmsrotnrqrprosprpqrotoqqrpsntntntntnsprprotnsqotnsprprpqrqpqrpsmuntoqrprprqprprprotoqrpqrpqrprprotoqsntoqsnulvmumtorrnulvmtorprprqprpsntntpprprqqprprprprosprpqpspqrososprprospqsnrqqqsmumtqotlwlumtotmumunsosotmunspqqrpqrospqqqqqrnumumtorrntorqpsorqqpsntorqoulvmsqprprprprpqqrpqrotnspqrpqrotoqrpsorqpsorrnumumumumtorqprprpsnspqsnspqrqotnsqotnspqrotmunspqqqqrotnrrospqqqqqqqqrospqrpqrpqrprosprprotntorprprprpqqrprpqqrprpqqqrotmunsprprqoumtorprprpqqrpqqqrprnvkwmrrorqpsorqprprqpsmvluorosospqqqqqqrospptmunrqqqqqqqqqqrnunsosnumunrqqqrospqrppspqslvnsosososotnrrotnsotnsosprpqrprprprpqrprqotntorpsntntosntntorqprprpsntorprprpqqrosorrospqqqrpqpsppqrqqosqpqrrnsounqqsposrornwmrmxmrmvqoostmqqvkrqvlqn{korstituqkqwrkovvinwvjmuzikvymgvzpcu|rbr~scmy`i{af}b^fY{kQwqKm|D^@J6)/T*  ; t h \ ( @   } r d | R F  %gwL   t c 5/,/ZALWt Y% VY 'SUg$ qDV_^qv] @gjx3 s Qj.VL9 /N @W ?>] Ly q] C *#RqO'IaeY NY4]h ! ZUdS jAX l8 V # @T1 ? x +) M F[biv L s0< w 5R$ 9 ZU! r[.g} i ?& 2xn & O#g -  l}:2.#f| THD _ < B*hczjRA?[SlzIyr{B}k} ;i5Uw&#=3R<*EcYBZvr^lx  &0394FHJMU`^dhssy{  )*14:KBIHGLJLNLPQOTRSWTXZY[][`^`acafdeigijkkomnslwpuvtxx{z}|}~     !#!###$%%%'%('(*'+)+++-,-.-0.0/2032445466695998;9:<;=;><@=A!Bi=t B #I~ jU %(U  J/ n`  r$} "-l.b   w5C 9G ]@!muBJ y<8h txR KNV Iw 9?V-K2Q    j 2Adqt?(@4 &d3>(<b6a NSyw go_=iiZsj0MiAp/qy~|y}}{~t~q~l{xmqzepwychrsbako^]dh^Ua_[TU`RQPXRHOMPFEMFD?DE<><?:6995518/2-3-,,++($(&#"#!!!!      ~~}{y~xzzvxxsxrttpspponlpjlihjhghciag`daa`_^^_Y^Y[ZWXXWWSWPYNWORROQQKTIQKMLMILIJIHHIFFGDGCEBEABC>D>@?=@==<<<;::;6<5:67573725223111.3+2+/.+-++*,(*(')'%($%&"%"#""$$          |}|}~{z|~{}{~z|z{|yzy|x|wzxzvzxu{szuvwuvvrxttvstuqvqssqtpspqrprpqrqpqrotoqrosprpqrpqrprprotnsprpqrpsoqrqprqprpqsorpqrqprprprprrntntpqprprqprprprprqprprqprqprprprqprotntntmvkwltpqqrososprorqqrpqqqqrpqqqqrosorqqqqqqqqqrpqrnumtosmvmtoqsosntosorqpsososntorqqprqpsorpsorqotpoumsqpsorqqqqqqqqqqqqqqqpspptlwkvnrqprqpsnumtppsospqqqqrosorrososospqqqqrpqqrpqrotnsospqqrotmunspqrpqqqrotmunsosospqpsnumtorqprprprpqrospqrosotnspqrpqsnsprprosprosorrnumtntosnsqprprprospqqqqqqpsosorqqqqpsppsnunrqpsorqqptlwltososppsosppsnumumtorqqqqpsosppsosososntntnumtntorqoumsqotoqrprprpqrosprosospqrpqrotnsospptlwlunspqsntoqrprprprpqsntntorotntnsprprotorqprqqpsorrnunrrnvkwkvmtorprprpqrprospqrospqqqqqqprqqprpspoulwkvmtpprqpsntntnspqqrospqrotmunsqorqqrospqrprqpsosppsospqptmunsqosotoqqpspqrntpptnrrospqrpqrospqrprotntoqrqpsmvnqtkyiwmsqprprprprqprotntnspqrotmvkwltorqqprprqprprqprpsntorqqpsoqsnumspqsoqrprqprpsosorqqqpsorqprqouluoqsnsqpsntppsospqqrotnspqqrotmumuoqrosprprospqqqqrosospqrpqqrotnspqqrosososorqpsosntntorqpsnumtososorqqqqqpsosorqpsososntorqprotnsqotnsqotnsqotntnsprqqpsntpqrososorrososnulwltorprprqotnsqprqpsorqqqqqqpsntorprpqsmvmsqotnsprprpqrpsorprqqpsntorqprpsorpqrprpqrprprqprprqprqprqptmtpptmunrrospqqqrnvkwltorqqprqouluorprprqotorqotorqpsoqrqqqprqpsorqprqprprpsntorqqprqqqqotorqpqrprpqqrqosprprotorpsorqqptmumsqpsntnspqrosprpqrotntntnsqoumtorqqpsosososorrorrorrnvltpqqrotmunsprprpqrpqqrospptmunsqospqrospqqqqqqrorpsosorqprqprprprotntntntoqsmvmtnsprqprprpqsntmuoqptororsoqrpsmuororsoqptpoqtpqmvpqntsmqrtonsunnrvqjsurlpvsknzpoiztlluykhywoev{ofq~rbr|waly`k{^f|b`zfYxkUrsMp}JfJYKNL?Q+Z\hw}rm 4 W n r + i  V } @ % {  n  R 0j|J "-"iP >\U8I `$'  XW M 6 6\~l' k)[GU&q%ix F z #+1J n 7P)4 ~ue@t A { kmfX9= G}. d 1 Kz(S ,)M O]/ f = ;- T/p TA"XPQnSp}2t D rO ).(%@)/]j N*Q v" 3[V j ^f}y\:H5Ue!  4tJaeS}O-F@DTCfFrQV`h}yx{      "!""!$"&#&%&'&)&**'-'.*,---/-0/1011326191:48788::8=8><;?;@=@@>C?BBCCDDFFHDJFKGKHLJMJOJPKRLRMSPQTOWPWRWTWUYVYXYZY\Y^Z^\^]`^_b^caacdbfcdhdhgekfkiikklknkonmqnqpqqsquqvsvuwuxwxzwzz{{{{~||~~      () ,0 ,2"EZr4lsB*Mn &! y Hm V!t%PZmZQM ,ty {@18{+YVPZ  ( 2 8!Snkj? pgDK2 0pjc XefH w6;D?\  $ if2l  a '3 ;_ ;  MR;-p+ J S]   Rx[8   ) b}%GBHj rs:J]?. O   x Sr % ?tsCB{I\h K_ l? 39a_)Ma>(Wy3X ^L$e%*:??:l/j(YEN]JrKNYcl{}~  $'1/0$+7"G[k 1ticjQ? 9d?$}"_X~ yg  E  u O 8G# Bm@d o |&;31t![b{A:YR0i5]pR3e9Z1 R`-db'8'$tt 5\] %wwW[l*h].Yc  L r27`o_OX` Jg >B[ '=H 2L'E>smrY QAP bh5Q(lX D%  & i}z 9 ~ 8 sxoX>" i) rc|j j:"[f =X  *   K    r  A ~   `  ?  !wezVnpEVqc8?\P1&G@!-. xoqql_`__NPPLB>?=10*-#  {wtopggaaZYTQNIHAC9:34,-$&   {ztvlmief\aU]PROKJFC??:8611,,%'!  ~}v{rspllhhbe\aZWYQTOMJKEDC=?:7833..**&#%!  }~xzwtuqpnmildgbc]aY^WWUTROOLKIGEEAA=?9;67420/--')%%#!   ~~z|wzuwtrspnpklkhiefdbc_`]][ZYWXRWOUMNNKKIHFGCCC???<=98:584431/1,/*,*)(&'%$#!#!      ~~{y}xzyvzrysursqrpoookojlkgkghffcgbdaaa_a\`Z_X]X[XYUZQZQTUNXLVLSNPNMOLMLJMIKIHKEJEHEFDEEBDACB@A@?@>=?<>;;<9=6;87:49474544232120/2,1--.+.*-'-()+$*&'&&#&$"&$!! !!          ~~|z|}|~{}||||z}z|zx}xz{u}vyxxwxuztzsxwsxtuuurxpvrstqtpsrrrpqqqrpqrospqrpqrprprprprprpqrotnspqqqrotmtpqqrorrospptnsotntnrqqrpprpsosntososorqqqqqqqprqqqprqprprqprqprprqpsntnsqprotnspqrotntmuntorprpsorqqpsnumtososotmvluoqrospqqpspprqqrospqqqrprospqrospptmumtospqqqqqrospptmunsosotmunspqrospqrososotmumunrqqrosorqrotmtotmumumunspqqrprpqqrotmtpqqpsosppsorqqpsntorqpsntorqqotntoqrotoqrotnsprpqqqrpqqqqrospptnsprotmvlunsprpqrprqprpsntntorqprqovjxlsrntorrnuluoqrpqqqrotmvmspqrqosotnspqsntorqpsosorqqqqqpsorqprrnumunspqrpqrpqqrospqrosospqrospqrprprotmvltpptnsotntnsprpqrpqqrotmunrqrprosprqospqrososososososospptmtppsorqqqprqqprprqotntntnsqotntorprqqpsntorqprprqprprprprprprpqrprpqrprprprprpsntorpsnvlsqpsppsosorqqqpsorqprrmwkvmsqpsorqqpsorrntososntosorqqqqpsorqpsntorpsnumtntorqpqrprqpqrpsnulvlvmtorqqprqqrntntorprotntoqrprqprprprprprprqprpsnulvmsqpsnsqpsorpsosorqqprqpsntorqpsnunrqprrnumtoqtlwkuosnulvnrqpsorqprqpsntorqpsosososprpqrotnsprospqsmvmsqoulvluoqrpqqrotnspqrprpqqrosorqqqpsorrosppsprosorrorqoumtoqrqpsntntorqprqpsnumtorrnumtpprqqpsntorpsnumtososososospqrosprprpqrotnspqrotntnsprpqrotnsqotmuorpqrpqrprpqqqrprpqqqrprorqrosospqqqqqqqpsnumtorqpsorqpsoqsorqprqprqprprqpqrpqsnsqnvlunspqqqqqrnumumtorqprprprosprpqqrotnspqrprosotmvkwluntntnspqsnspqqrospqqrospqrprprotntnsqprprprqpsnsqprpqrprpqrqpsntorpsosntosppsosospqqqqrospqqqptmumumtpptmtorqqqprqpsorqprqprqpsntorqprqprpqsmuoqrpqrospqrosppsospqprqqqprprprprprprprqpsoqsnunrprprqprpqrqotnsqpqrprpqrprospqrpqqroukvorotmunsprpqrotoqrospqqrospqqrospptmtppsorrnumtorqqqpsntosorprqqprqqqprrosorrosorrnumtppsososososnumtpotorqprpsorqpspqqqqrpqrosqprprprprprosqotnsqprqprprprotntntnsprprospqqqrospptmunspqrpqrotoqrotntntorpsosorqqqpsorqprpqrprosospqrnvkxjvoqrpqrospqqqqqqqpsososorrotmtospqqqpspqrosqosqpsnsqprqotntnspqsmuntoqrprqprprprprotmuoqrpqsntntorprprqprqprqprqprprprqpsntorqprqprprpqsntnsprprprpqsntoqsntoqrprpqqqrosppsosqosospqqrosososospprqpsoqrprqpqrprprprpqrprpqqqrpqqrpsnsqpsorprpsnspqrpptmunrqrotnrrospqqrosospqqqqrpqqqrprprpqrprprotmvmsqotoqsnsqprprprprpqqqrosppsorsmunrrpqrospqqqqqqqpsosorqqrososospptmunsprotntnsqprqprqptlwjxlsqotoqrotorprprqprprqprqpsntorqprprpsntorqpsosppsppsososorqqqpsnumtntorqprprprprprosprqosotorpqqrqprotntnsprotmuoqsntorqqqqpsorqpsososotntnsprpqrotnsqprqqqprqrntorqpspprrpqpsqoqsqoqrrporumpsrqnrunpoxnpmynpmxqmnwrojxvjnszkkszpdwwtcr}remuehwdg|`d|g[|kWwoTpuPj~MbNWQLTAa1i)txdN0 #q-=27'{\S~7(BP3}]hz rl   ybXN@ w)G0o {4jmxTbF \8]>}i[ vN{Y `U < " #4U٘Bmyk G#5'z.DpKSw޻ -/ u u\?>  @C>jBh S7 D fP<  v .   vWUm'&:OvjX#9+-(}|}|}|y|x{vwyrutstntnpokqjlkijhhggchagbad^b_]aZ]]X]WYYVWSXRVSQVOSQPPPNPMMNKNJLJIKHIHHEIDGECFBDBBBA@@@?>>=>=:=:;:99:6959466354060301/1.0,/-,,,*,)*(*&*$)$'%#&"$""!#"           ~}}}}{{{}{}z}y|{y{yzyyyyyxxywxvxwwtxtxttwsustutsrtsrsptprqprqpsorqpsosorqpsorrntorrosnulwkvmsprprprprprpsorprqqqpsosospqqqqqqqqqqpsorqprqpsnsprqqprqprqpsnsqouluorprprprprqpqrpsorpqsosntosorqpsorpsosorqqqqqqpsntnsqpqrotnsqprprprprprosqososprosotnsosprosprprotntnsospqqqrospqrospqrosospqqrprosprpqqqrpqrospqrprotntorpsorrnumsqqqprpsorpsorqpsorqqqqqqqqqqqqqqqprqqqprprqpsosnumunrqqqqqqqqqqqqqqqqqqqqrosospqqqqqrososotmunsospqrorrorrorrospqqrotnspqrpqrpqrprpqrprospqrosprprosprprotntoqsnulvmtntorpqrqprpsorprqprpqrospqrotntntntoqrpqrotmumunsprprprprpsnspqrqotmuoqqqptmtorqqprqpsosorpsosorqqqqpsosorpsorpqsorqoumtorqqqqpsospqqqrotmunspqqqqqqqqqqqqqqqqqqqqqqqrorqqrppsospqqrospqqrospqqrnunrrorrospqqrospqrospqqrprpqrprqprosprpqqrotmunrrosorqqqqqqqqqqqqqqqpsosorqqrosorrosorqqpsnulwkvnqtmtosnumsqpqrprqpqsnunrqqqqqqqqpsnumsqprqoumtnsqqpqqrqppsprpqqrpqrprqprprqprqpsorqpsosorprprprprprprqpsnumtntppsntorpsorprqqqprqpsntntorpqsorpqsntoqsntorqqprqpsorqpsosorqqqqprqqqqpsospqrotntntorprprpqrosospqpsprorrotnspqqsoqrotoqrotnspqrpqrpqrprprosprpqqqqqqqrospqrprprprqprprqpsntoqsntoqrprqosqprqotnsqpqrotnsotnspqrprprotorqotoqsntoqrqprqouluoqrpqrospqrosospqqqqqqqqrnumunspqqqrprpqrpqsntoqsorqprqqqqprrosoqsosorqqrosprqospqrpqqqqqqpsnuluoqrprprpqrprqpqrprqprprqprprprprprqpsnumtosorqpsorqqprprqpqqrotmunsospqrospqrprotntoqrprpqqqqqqpsorqqqqqqqrnumunrqqqqpsosorqqqqqrpqqqrqospqsnspqsorprprqpsntorqprqpsntorqprprqprqoulvnrprprqotntntntorqpsosososospqrnunsosospprrosospqqqqqqpsorprqqqpsppsosppsntorqprprqpsososprotnsqotnsprpqrprotorprprqprpqsntnspqrpqrospqrpqqrpqrpqrprpqrprpqrpqrprqprqpsosntosorpsosorqqpsnumtoqrqpsnsqprpqrprospqsmvluorprospqrorqqqqprrorqounqsnunsnunsqosqotnrsmvkvnsqpqqrpsntntntoqrpsoqrpsoqrqprpqsntoqrprqotoqrotntnspqrprotntnsprprprprprprqprprprqpsoqsorrntorqqpsnumtorqpsorprpsntorqprqptmtorqqpsntoqsmuntntmunsqpqqqqrosososospqqqqrospqqqqqrorrnumunsosotnspqrospqrpqqrotnrrosorrosntpqqqqqqqqqqqpsosorqqqqqpsorqqqqpsososorprqqotnsrmvmsqqpsorrntppsorqqqqqqqqqqqrospqrpqsntntnumtntosoqsorqprqpsorpqsosnsqpsorprpsntnsprprosqotmunspqrospqrpqrotnsqpqrprqospqrorqptnrqqqrprosotnsosprotmunsqnunspqqqrotmumumunrqqqrorqqrosorrosppspqrpqrotoqrotoqqrprqoulvmtorpsososospqrospqrpqrpsntntorprprqprprprqprprprqprprqqotoqsntorqpsnumtorqpsnumtorqqqqpsosppsospqqqrpqrprprpsntntorqprqpsntntoqrprprprpqrprpqqrotnsprotnsqprprqpsntorpsntoqtmtoqspqprpsppsorqrorrotnrrpqqqqrosorrotnrqqqrorqqqqqptmunsosospqqqqqqrotmunspqqqqqqpsppsntpqprprrntntosntntpotnsqpqrospqqqqqqqqqqqqrnvkvnsotmunrrpqqqrosorrorprpsoqroumtnsprprotnsqosqouluntntnsqotntoqsntpprqoumsqpqrprprpqrpqrprprotnspqrpptmunrrosorrotmunsqotnspqrpqqqrosososnumtorprpsorprqqqpsorqpsnulvmsqprpqrqpsmuorprprpqroukwltprorqqqqpsntoqsnsqotoqrprqpqroulunsqprqprprqqotmvlunsprotnsprprprprqpsoqsntorprprpsnumtntorqotntnsqprpqsnspqrpqrpqrprprpqsmvluoqrpqrpqrpqrosotmumunspptnsotlxjuqnunrqqqqqprrorprqqprqqpsnumtorprqpsmuoqsmuntnspqrprpqqrotmtpqrpqpsosppsntosorpsosorpsosorqqqpsntoqrprqprprrnulvnrprprqotntntntosntorqprqotntnsotnspqrosospqqqptmunspqqrprprotnspqrpqrprprpsorqqqqqqrpqqqrpqrotnspqrprprotmvlvkvnspqpsorqqqpsosorqrososospqrosospqrososospqrpqrqoulvnqrprqprpqsnspqqrpqqqqsmvlvlvlvmspqsnspqsntntorqpsnumumtosososppsospptmtppsososososospqqqqqrotmuntmvkxjvoptlwlunsprqpsorqprqqprprqprprqprqpsntorprprqprprqqqpsnunrrosprpsnsqpsnsqprqoulvmtntntoqrotntnsqouluorqpqrqprpqsntntnuluoqsnspqqrpqrospqqrprorrprppsprprprqpsosorqqqqpsosorqqrppsosppsorqpsorqqptmumunspptnspqqrnunspqptmvlumunspqrpqqrpsmuntntntnsqoukxjwmsqotorpqsorotorosqqnuntmtpslupsnrrrmtptmqsslspvlqqvmostonqxmnqvqloyookzrlmwulluyjls{mgvwser{rgmrgk~wfh||ffz~iazk^un\qtXn{SkRdL_CSQQx-t!nf^%V{(,V?;%F3"_fu0fM&rI{.E'JYx6tHnl߉  $}L;/oRc0/v#$[44_5 S Q p$8B%O9a~R6 ,rTs'L[E*Dm{cA-`BHH0KS\|`mkZjRmJ~mEik@\k@Fya><f];0XV6)GM48E,);%.# "  ~zzvxtqromligibda_^Z]UZRTRNOKLGHCEA?A7@4:5230-/(+&'"#!     |{|zxyuuuovmopgqelegddba^_\][X[UVUSRQPLPIMHHFGDBA?A;?8=686461302-/-+-(*)%(#%$ #        }}}|{y|v{tytvtstqrormplnljkjiifggdecf`d_c__]_]\Z[ZZWXVXSVSTSSQSNTMRNMQJPJNKKJJJIHIFIDIBIAG@G?E?B@A>@>>><==:<:;8:88958483715324.4.2/.0,/,.*-*+)+())%)&&'"(!&!## #"           ~~~||~}|y~{{~w~zz|y{zx{v}vyxwxxuztwvtzryrwtutsusstquouotprosorrosorqrosospqqqqqqqqqqqrososppsososotnsprprotntnrsmvlunsotntmtqoukvnspqqqqrotnsprprpqrprpqrotnrqrpqqptnsososososospptmunrqqqqqqqqpsppsorrorqqrpqqqrprosososorqpsorqpsososnumunrqpsppsnumtosorpsnumtorpsosnulvmtoqrqqprotoqsnrrpsoqrpsorqpsntoqsntoqrpqsntoqrprpqrpqsnsqoulunsqotnspqrpqrpqqqrpqqqqqqqqqqqqqqrprprprqpsnulvmtorqpsnumtorrososprosprprouluntorprqprpsorpqsnuluoqsnsprprosprprospqqqqqqprqpsorpsnulvnrrnumunsorqqqqprqpsnsqpsoqsntpprqprqoumtntorrntorrorqptmumtospqqpsorqqqqprrosorqrotmtpqqrospqqqqrpqrotntnsqotnrrorrntorprprprpsosorrotnsospqrorqpsorproulvmsprprpqrpqqqrpqpspqrnunrqqqpsnumtososppsososnumtorqqqpsorqprqprprprprpqroulvmrsnumsprqotmunspqqqqqqrotlvnsorqprprqotnspqrprotntoqrotntmunsqotnspqsnrrotoptmunsppsprosnuoqqpsosospqqrprqpsorqqqqqqqqqqqqqqqqpsppsorsmtpqqrospptmunsosnunrqqpsnumtorqpsorqoulvmspqrqprpqrprprotorpsntorpsmvlvmsqprqprprprpqrqotntorprqpsorqpsorqprqpsntorprprpqqrotnsosprpqqrpqrospqrospqqrosorrosnumtpptmtosorqpsnsprqosospqqpsososotmtpptnrqqqrpqqrotnsotnsosprpqrprprqprqpsorqqqqqpsosntpqqqptmumumumumumunsosotnsprpqrprpqqsmunsprotmvkxjwluoqrprqprqqpsnumtorqqqpsosorprqprqotorqprqpsntorqqprqqqqpsppsntpprprqqprprqpsntorrnumtorprpqrpqrprpqrotnsppsosppspqqpspqrnumtpqqprqqqprprpqrorrosorqqqqprprqprprprprpqqqqrososospqrotnsprprospqqpsosorqqqqqqqqrpqrosqotnspqqqrosorrnvkwkwlvkvnspprqqqprqprprqqprprpsorpqrqqqprpsorqpsnsqqprotorprpsntososnumtorqpsorprqqqpsorrosorrorqqqqpsosorqpsntntosntnunrpsosososnumumtoqsorrntosorqprqprpqrqprpqsnumtntorpsmwjwmtnulvmtorprqotnsqotnsqotnsqprpqrpsoqqqrpqqqpsnunrqqqrospqqqqrosospqrotnspqsnsprprprprprqotoqsntoqrprpqqrpqrpqrprpqrpqqrosnunrqprqprqpqrprqpqrprprpsnsqoumtnsprprotnspqrprpqqqrpqqqrprosqpsnspsntoqrprprosprpqrotoptnspqrosnunrqprqqpsntosorqpsnumtorprprqpqrpqrotnsosprpqqrotnsospqrosprpqrprprpsorqpsosospprpspprprqpsntntorqotntorprpsorqpspqpsotnrqqqqqpsorqqpsntppsntosorqqqqpsorqpsntnulvluoqrospqqqqrotmunspqqqqrosppsosppsospqqrprprotnspqrpqrpsnumtppsorrorqpsosnulvmtorpsorrnvltpqqrosososososnumtpprqpsorqqqqqqrospqrprotmvlvlunsprprprotnsprotmunsosorqprprqpsntoqtmuluorqpqsntnsprpqqqqqqqpsnumtososntorqprprprprpsorqprrotmtotmvlunsprprprprqpsorqqqrosospqqqpsorqqpsntpprprqqprqqqpsorqpsorpsnvjyixltpqqqqqqqqqqqqrosprqpqrpsntntntntorqpsnumtorpsmvluoqqrotnrrpqrnvlvkvmunrqpsntorqprqqprpsnulvmtntntoqrprprprprqpsntorpsorprprpqrprospqrosprotnsqotntnsqotmuorproulvmtppsorrnvkvmsqprpqrpqrprprpsntntpotnsqotntntnspqrprpqqrprotnspqrprotmuntmunrrospqqrososososorqqqqpsorqpsoqsntpoumtpqptmunrqptlvnqsorqqpsosorpsosntososospqqqrprosprpqrosqnvkvnspqpsotmtosorpsorprqpqrpsnsprprprpsmvlvmspqsntnsqpsorrnumumumtpptmtpqrorqrorprqprprprqprprprqprprpsntoqsntnsprqotnsrnulvmtpprprqprpqrpqsmunsqotmuntnrrospqrpqrotntnrrotnrrotnspqsntoqsnulvmsqotoqrotoqqqqrpqqqptmvltpqrpqrpqsmunsqprpqsosorqqqpsosorqqqqqpsosoqsososospptmvlunspqrprosprprotnspqrpqrospqrotmunspqqrosprppsprppspqrospqqrotnrrosqprotntoqsntnsqprpqsnsprqqoumumtpqqqpsorrntorpsmvmsprosprotmuoqqroulunspqrpqqqqrorqqqqqqqqpsosppsnunspqqrprprpsorpqsorprprprprqprqoumtorqqqpsososososospqqqptmumtppsospprqqrosososososppsorqqqrnsqqrntosososppsososorqpsorprqprprqprqptlvmtorprqprprqprqpsnsqpsmuorqosqprpqrprpqrprprprotntnspqrotnspqrprprpsntntpotntpprprpsntoqsosntospqprpsorprpsntorprpsorqprqqqqpsorqqqqqpsppsorrntorprqqprpsosntorrmvmtorpsntntntntmunspqqrpqrprprotnsqospqrotorqotorqqqqprqqqpsorpqrqprotnspqrpqrospqrospqrotnsosprosososososospqqqqrpqptmunrrorqrppsosorroqrqrnrtmtmuqnrrqpqqsopsrootrpnsrsktsqltrslpwqlputmkysmlvuohwxmis{ogr{reqzxan~wclz~ce}eazh\xnWttSozSd~T\WOYJZCf4|r/h&["D". ) 3JAdRi?[@OR*r')43A[/ m 8  h ) 6  -3uS.,R| tF/`qN}Z_.2G5 G \ u t j l fP"@B}BN+|GKY = r  x  l /F  a I 4- M  a k ;V.cwwa<4C Lg SC X  AeCv 4 M| u { Y^L[C9ZB;h[/^ anw|}}z}xzyzsy{yqtxvorrulnpqinhqfiiigdfgcc`f`__`_^[^\ZZW]UWWTWSTTSSQSOROPPLPMLNJMLHLHKFKEIFEFGAI>GABC?B?@>A;@;=<<;:::8:6975837435233/4.2//./,/+,-(.'+)(()$*#($$%#"%$  !!            ~}~~}~~~}~}~|z~z~z|z|z{x|x|yw}u|uzvzvvytxuvvuutvutustupwoupuotorqqptmtppsorqpsntorqprqqpsntorpsntorpsnumtnsqprpqrpqqrpqrotnrrpqrnunrqqqqprqqqqprqqrosospqrpqrprqprprpsnsqotnsqpqqrotnrqqqqqpsorqpsorqqqqqpsorrnulvmtorprqpsntorpsorqprrnunrqqrosospqqrotnsprqqotosorqqqqprrosorqqqqrntospprqqqpsnumtorqqprpsorqotntntnspqrpqrprprprqprqpsntntntntoqsnumtpqqqqqrososososorqpsntorqprqqqqpsospqrnumvlumtpqqqrotmunsprpqqrotmumunsosotmtppsorprqprprqpsntoqrprprosospqqpspqqqqqqqqrosotntntoqsntoqrprprprprprpqsmwjwnqsorrososotnsosospqrospqrotnspqrpqrotmvkwkvnrqqqqqqqqrotmtpqrorqpsosorpsppsososorrnumtpqqpsosorqprqoulvmsqqpsorqqqqqptnrrotmunspprrosorrospqrprprprprqpsntntorqotnspqrpqrotnspqrqospqsmunsosospqrnuntoqqqrotmtorqpsosnumvkvnrqpsosorrospqrprotoqtkxlsqprqprprqprqpsntosorqpsntntntmvkwlunrrospptmumumumtppsososorqqqqqprqpsorqqprqqrorrotnrrosorqproulvmsqoumtorqqprqqqqpsorrosorqqqqqqpsososorqqqprqqqprpsnumtntntpotntorprqqqqqqqrprpqrqprprqqprpsnulvlvmtoqsnumtosotlwlunrqrosnunsorqqqqqptmunrrpqrososososososospptmunspqrprprprprqotntoqrprpqrqprotorqpqsntoqrprprotorqotorprqpsmvmtoqsntoqsnsqprpqsntnsprotnspqrpqrotntnsqoulvmtnspqsnsotnumsrospqrpqqrotmunspqrpqrotntnspqrpqrosospqqqqqqqqrosospqqqqqqqpsosorpsorqpsorrosospqqqqrorqqqrnumtorrosntosppsorrnumtosorpsorqpsorrntppsntosorqqpsorrntppsnumumtorqqqqqqqqqrosorqqpsorprqqqpsorqqqqpsnumtosospqrpqrprotnspqsntnsqoulunsqpqqqsnsosprotntoqsnunsorqrprospqsmvlunspqrpqrotmunspqqrospqrospqrnumunrqpspqpsnunrqprqqqqprqqqqpsosorqqqpsnunrqpspqqqqqqqqqprqpsntorqprqqprprqprqqpsntppsorqpsososososososorqpsosorprqqpsntnsqprprqpqsnumsqqqqpsospptmuntntnsprprpptntnspqrotnsosotmunspptmvltpqrosprprpqrprpqrospqrosprpqrprprprqprprprprpqqrqosprqotnuluoqsnsprprotmunspqqqqrosospqqqqrospqqqqrosorqqqqqqptlwlssmtppspqrosotmumunsospqrpqrosqpqqrprpqqqrosospqqqrprprprprqqprpsosorqqqqqprqpsnsqpsnsqpsorqpsososososospqrospqrospqrospqqrprosotnsprprpqsntorprprqprpqsnspqrprprprpsntoqrpqrpptmunsosprotnspqrprotnsqprprqprqpsntpqqpsnunrqpsospptmunsososorprprqosqouluppsntpqqqqqrospqrosprprotntnsqprpqrqprprpsorqpsosorqqqqqqqrospqrospqqqqqqqpsntoqsnsqotnsprprotnspqrorqrosospqqrpqrososotmumunspqrprotmuoqrospqqrospqsmunsqotntnspqsntnsprqqprprqpsntntorprqprprprprqotnsprpqqqqrpptnspqrprosprotntoqrprpsoqrprrntoqsntoqrprprprpqrprpqrprotorprpsorqqrosotntmunsqnumunsososospqprqqqoumtoqrprprosospqqqqrosospqqqptmumtosorqqqpsotnrrotoqrprprotntnspqrpqrosospqrospqrpqrpqrpqsmuoqsntorprpsntmvlvmsqpsosorqqrosospqqrosososnumtosnulvmtorprqprpqsnspqqrospqrotntnsprqososprorqpsorpsntnsqprpqrpqrosososorqpsnuluoqrprprotorpqsnukxkunsprprosospqqqrotnsqprprpsnsqpsnsqpsntorqpsorqqqqpsosorrospqqqqrprosospqrnumtppsorqpsorprqpsntoqsnumtntnumsprprotntntoqrprqprqqpsospqrospqrpqrotnsotntnspqrprpqrprprpsntorpsosoqtlwkvnrrnvkwlunsospqrospqrprprprprpsoqrpsorqpsospqqrpqrotntnspqsnspqrprprotntoqrpqrqotnsqpqrpqsntntnulunsprosorqrosorrosospqqqrpqqqrpqqqrpqrpqrprpqqrprosotntnsprpsnspqrprpqqrprotnsospqqqqrnumumtorqprqqpsnumumtorqpsosorqqqrosospqqqqqqqqprqpsnsqprprprospqrospqrprprprprpqqrotmumunsorqqqqqptlvmtorprqprpsnumtpoumumsqptmtosprosprpqqqrpqrotnspqrpqqqqrospqrotnspqrosorrosnumvltqnvlunsotmumunspqrpqrprpqqqrososososospqqpsosorqpsorqqpsorqpsosorrosososososorqqptlvmtpoulvnrqqpspqqrotmuoqsmvluorpqrpsnsqpsorqpsososnumunrqqqrosospptmunrqqqqpsnumtosntosppqsnumsqotorpqrprpqrprproukxjxkuoqsosnumunrqqqqqpsorqpsorqqqpsntorprotorpqqrprpqrotnspqrprospqrotntnsprprpqrpqrospqrosprotmuoqrpqqrotnspqrpqrotnsotnsqotoptntoqqrprotnspptmtpqqqpsososntosososososppsppsorqqpsorqqpsntorqprpqsntoqsnsqqqqotosntntorprprprprpqrotntnspqsntorprpsorpsosorrotnspqqrosososososorrnulvmtorqqqpsosososntorqprprprqprprqqqpsorrososnunrrospqqrotmumtppsorqpsosorqqqqqqpsosppsorrnumsrorrmwkvnrqqqqptmunsprospqrpqqqrprosprprotnsprprotnsprprotntmuorqosprqprpsntoqtlvnrpsnumtorpsntorqprpsntntorpsorqqrosospqrosospqrpqqrpsnspqrospqqqqrosospqqrorqqrosnumunrqqqqqqqqpsosntorqpqsntnspqrpqrpqsntorqqqqpsospqqqqrprososospqqpspqrospqrprotntnsprosprpqrprprprqprprqprpsntntorprprqprprqprprprosprprnvlvmtoqsorqotorpqqsosnsprqqotnspqrqpqqrpsmunspqrosorrosososospqrospqrpqrosprpqqrpqqqsnsospqrotmtpqrpptmtpptmtorqqqqqqqqqqqqqqqpsorprqpsmvmsqprprprprqprqpsorqqprprqotnsqprqoumsqotnspqrotmvlunsprpqrpqrpqqqrotlvnrqqpsntnumtorqpsosorqqpsorqpsorprprprqprqqqqpsorqprprprprprpsntorqprpsntntntorqprqqqqqqqqqrospqqrotnrrotnspqqqrprosprpqrprpptmumunrqpspqqqrnunsosnunrrorqqqqqqqqqrpqrprprosqotmtpqqrnumunspqrotntoqsntorqqprprprprpqrprqotntorpqrprprotmunspqqqpsosorpsnsqoukwmsotoqroumsprqotorppumsosrnspsopunslwoqosrporumqoxlqpuqmpwpnnxqlpuujpsyimuxmiuynhs{oho~qfn~sgivfg~{ee|f`{h]woVusUn|OiP`RTXI[A~c7rn.c"SI O0d}%:B@aIb7W L~:R)$Gt , *'Qlms7TsZ ;Wfpq =ca{0  I PU@}&u]m7)/CDFLJNQQWVX]\cbeghokspvv{y~  "#(&,(0,4/576;8@>A=B>D?DACEBGBHDHFHHHJHMKLMKPLPOMTLUNUPURUSWTWVVZVZW[Y\Z[][`Za\a__b`acbcdceegcifhhhiilhnhnlmokrktlsprqtqutsxryuwyvzyx|x~y~{~}}|}   ':mK O >  ' S      ) ~GCP Wrxa '\'k|356+hZ$zD d_ b* f2 ZYn S @<## wbsD8 Eh| 4 H q]j@rY H +D\s,N <E2I\m L0B3 G Y_GEJ.oZ ?+l3 B6UX e|8#ueEj0B!%F^IA_ziax!27<8IUWSdnuq{%'10;BHOOa^iks{~ !))56?DGQR\]hjrt|  #*-47>AGLRW[bfkpt{$',16;?CHLST[]eeonvz} $)*22::BCGNNVW\_ffokvt} % ,*.467@?DHHOQTYXb_fijqqvy|  $$'*-/61=7@ACGJJQPUWY^_dcjipnswx~|  !' *(+-03578==@EBJHLNQQVW[\]acffjkppsvvzz}  $'$)**.-31467<:>?@DBIELIOMRQUUXZX_[a_bdgfkhnlpoupxtyzz}~  # %"'''**-,/-40454979<<=>>AAAEAIAKELHKNKSLUNWPXTXXYY]Y`\a^badebidjihmkmnppssswtyvzz{|}}   !" #!#$!&#'$'&()*(+**/'2(1,/0.2/21224345377496:;8<9>9@:?>=A>@AAACADDBFDFGDIFIHIINGPJNNMOOOQPRPRSTRVRVVUXVXWYYZZZ[[]\^]]__```b`cbcdddfdhdighhjgmhmjmkolonopppqrqtqvruvtwvvzvzw{y{{{}{{}   ",9DP*ZPdBo ~}g{Qc%,+[&(" $'%"$l'M%"$(%V "k KTfo#&'$""#$$"yGwX'",&3# !'#M5o#=w WK' ) )%<"%7 #!j4u 3 C&] /qs5Hr1 # zan@_e z  = ' @fx H\!*3~u%!.@6:JZUVctrq %+11=FJKV]fbps} #'/0<>EHRT[afnpv~ %*02;ADGHNKWRYZ\`dckgqpswx|  !"'%++//357;;??DEFKJPQRVWY_\d`hfljppsvv{|~  "!%&',*/-40749:;=@?EBGGKKOMSQVUXY[]^aaddejfnioopsrvvxzz~} " &!(%))*-,.0108/967<:;?<@@ABDBGEGIGMGPIRNQSRUTWVYYY]Z^]``b`dcffghhkkkoksntqwrytyzx}{}~    !""! $ &!&"'%%(%*(***,*.+.-./.1.21041425546586879<8=:<><=@;C : 2 * &     { w p j c _ Y R P C D : 6 1 * '      { v p m e b X Z L Q D A ? 3 6 * * "    yyqnhd_\UTLIF=?44,)#!  ysvmkg`aVZNRGH@A7800() {{tsnkge_^VWOQHIB@>7710+*$!  ~|yuuomjgdb[_TYOQJMCI=A9:541-+)#$ ~y{svmqilfde__[YWVQRKOGID@C<<:4811--'+"$!   {}wyswnujpikffdc_bXaT]QXPSMOILGGCE?@>;:96441..*,&)!&      ~}{|xzvvurtoqlojmfkcjadb_a^Z`V\VWVSTQPONMJLELDEDBB?>=;<96:29232100,/*,*)''#' $"  }~yw|zwzvvypypuqroqplpjnkikekfhefcfad`aa^_^\^Z[ZYYWYVWSVTSUOVNSPPPOMPKPIPHLLGNCOCJHCJCFDEAF@D@AB>A?=A:@;<=9=7<88:587566263331301/1.//+0*-+-(,()*''(&&&$%$#$!$$#          |{}}~|~}|yywv~x{zy|w{xzwzvyxuztxwszrwtvsyoyqutrtrsqtpspqqrpqqrpqrosppsorqqpsntorqpsntoqsntorpsntoqsorprprqprpsntorqprqprprqprpsntntorqprqprqpsoqrqpsorqqqqpsnumsqpsorpsosorqqqqqqrososprosotorosotnsososorrpqqqqsmunsprprpqrprpqrpqrprpqrqpsntnumulunumsprqprpsorpsosososospqqqqqrotmtpqrpqqqqrpqqqrprpqqrprqotntorprqpsntorpsntntoqsntoqsoqsntoqsnulvmsqpqrprpqqrprprprprprprprprpsnumtosnumumtorrntorqprpsntntorprqqpsnunrqpsosnumumtososorqqqqqqqqpsosorqpsorqprprqqqpsososppsnunrqqqrosprospqslwkvnsosnumunsosnumumtorqqqqqpsososorqqrosotoqrpqsnspqrpqrotnsqotntnsproukwmrrpqqrnvkvnrqqqpsorqqpsntpprpsnulvmsqqpsntpqqqpsorrnulvmunrrnunspqqrprpqrpsoqsmvlvmsppulunsprospqrospqqqqqqpsorprqqqqoumunrqptmtorqprprpqrprprprpsnsprqpqrprprprpqrprospqrosososorqqqprpsorqqpsososospptmtpqqqqpspqrnuntnspqrpqrosqotmuntntnsprprpqsmwjxjwmsprprotnulvmtorqpsntppsnunspqqsmuntntmuorprpsorqqqqpsppsntppsorqqqqqpsorqqpsntorqpsntntorqprqpsnumtntorpqsorprpsorqprprprprprprpsntoqsosntospprqqpsnsqprqotoqrqprprprpsntnsrnsqpsntnumtorprprpqqrospptmtppsososorqrotmtprpqrotnrrososospqrotntnsqotmvlvluntntntoqsntoqsorprpsorprqqqpsosppsospqqqqrosprpqqrpsmunsqprprprqqprpsorpqsntoqsntorrnumtorqprprpsntntorqpsnsprqprprqpsnulvmtppsospqrotmumumtnumtnsrntntntntorprqptlvmtpqpsosososorqpsorprpsntntntntnsqprqotoqsntoqrprqprqotntorosprpqqqrososospqqqptnsorrprotntntntntntntntntntorprpsosntntorpqqqsnsosprotmunrsmtpqqqprrntorqqpsorrnumsqprpqqrpqrospptmumtorqqpsnumtppsntosoqsnumtorqqqpsosoqsorqprqprprqpsntorqpsorqprqprqpsnsqprpqrprosotmvltqospqrpqqrotmunrrososososppsososorqprrnulvmtppsorrnumtppsnumtorqprprqprqotorqpqrprprpqqqqsmvkvoqrpqrotmunrqqqqqprqprprpsntoqsorrmvmtoqrqprprqotoqrpqsmuntorpqrqprprprprqpsnulvmsqprqprqovkvnrqqqqrnumumumtorrntorrnumunspqrprpqrprpqrprpqrprosprqotntppsntorqprpqsntnsqotorprprqprprprpqrospqqqptmvluntntntorosprqosprpqsmwjwmsqprqpsorqqqrosospptnsppsprotmunspqqrospptmunrrospqrpqrprprpsnsqpsoqsososnunrqqpsosorprqqprpsnumtorqqprqprprpsntorqprpsorprprqpsnsqpsntntorqprqqpsosorqqqpsorqpsorprqpsntorqqqqqpsososotmunspqrpqqrprpqrpqrotnspqqrprprotntoqsntorpsnumtorqprprpqqqqqqqptmunrrotntmuntnsotnspptmunrrotntntntntoqrosprprosprprprpqrprpqrotnspqrprpqrprpqrprpqrpqsmvlvluoqsnsqpsntososnunrqpspprqqrorqqqqqprpsosntntorqprprqqprpsntntoqrprqprprqqprqqqqpspqqqrpqqqrpqqqqqpsntorprprprprpqrotnspqrprotnsqotnsprprotoqsnsqotorprqprqpsorqprqqpsnumsqqqqprqqqqqqrosotnsprotnsqprprotntnspqrpqqqqrosotmuntoqqrprotnsqotoqrpqrospqqqrprpqrprprprqosqqqpqsosntosorqpsnumulvmtppsntppsntpprprqprpsnulvnqsntorpsntorrorqpsorrntorqqpsosososospqqqqqrnumtppsntosorqpsorrososospptlwkvmsqprprqpsmvmtoqrprqpqrprqprprpsorqpsnulvmsqprprprpqrpqrospqqqrotmunspqrpqqqrosorrorrosppspqqqpsorqqpsorqpsosnumunrqqrosospqqpsosorqqqqpsosorqpsorqpsososorqqqqprpsosntorqprqprotnsqouluorprprqoumtorpsosorqqpsorqpsorqprqpsntntorqqpsosososntorqpqrprprprprqprprprprprprpqsnuluorqqpsorqprprpqrotnsprprpqrotnrqpspprpspprqqrnumunrrotnspqrpqrpqqqqrpqrotnspqrpptmunsprospqrnvlunrsntnsprqprosqprosprpqqrotnspqrqprprqpsnsqotmunsospqqpspqqqqqqqrotmunspqrotnsqprpqsorprpsorprpsntntorpsososprpqqrpsoqrotorqprprqqqqqprqpsorqprqprqpsnsqpsoqsorqpsorqprqpsntorqqqqqqrpqrosqotmtososorqqpsospprqpsntntmuntmtospqprqpsorqpsorrnumtpqprqqrorqqrorqqqqqpsosorqqqpsotmtprprotntmumvlumumvkwkvnsorqqqrnunrsmtpptmumumtpqqqpsorqprpqrprpqqrpsnspqsntnsprprprprqpsntosntorqprprprqpqrprqprpqrprpqrosqotnrsnspqrprospqqrorqqqrnumunrrosorrosorrnumtorqqprpsntoqsnsqqpsntorpsosorprrosorqqqqqpsosorqpsnumtpptmunsprosorrosorpsosorpsorqprqprpqrpqqqrpqqqrpqqqqrospqrosprpqrpqrotnspqrotnsprprpqsntnsprprpqrprprprprotoqrpqsntntntntnsprprosprpqrotnsprpqrosqotmtososntorprqqqqqqqqqrorqqqqqqrospqrpqqqqqrntosorqptmtospqqqqqqqqrnumunsorrppsospqqqqqqrorqprqqprotntnsprprqpsorqpsntntntntntntoqsnsprprosososososorrosorqqpsntpoumtppsospqqqqrppsospqpsospprqpsorqqpsnumumtorrosospqqqrososorrotmtosososntorprprpqqrososotmunrrospqqqqqrosotntmvlvmsprprprprprqprprpsntoqrqprprprosqprpqrpsntntorqpsososorrotmtpqqpsosorqqpsososnumtppsosospqqqqrpptmunrrosososppspqrorrpqrospqqrpqqptntnrrprqprqprqpsntorprqqqprqqqqpsnunrqprqqqqqprqptmtntosorqqqrotnspqrosospqqqqrpqrpqsmvmsqotorprprprotmvltpqrospqrospqqqrosppsorqqpsntorqprprqprpqsorprqprprqprprpsoqrprpqrpqqrosorqqpsoqsnumtorqqqprpsorprprpsntoqtlvnqtmumumumumumtosnumtorqqqqpsososososorrnumtorqpsorqqpspptlvnqsnsqospqqrospqrpqrpqrprprosqotnrrprpqqrpqqqrosorqrotmuntnsprprpqqrotmunsppspqqpsotlvnrrospqqqqrpqrosotntmunsqotmuoqrospqqrotnrqqrpqpspqqprqqqprpsntnumtorqprqprpqrpqsmunsprpqqqrpqpsprososqprpqqqqrntnsqotntorprqpsntorpsmwkvnrrnumunrqqqpsosoqsnumsqprqprqpsntntorprprqprprprpqrotnspqrprososqotmuntntntmvluoqrospqqqqqqpsnumumumtpptmtospqqqrprospqrosorqqqqpspqqpspqqqqqqrosprqorsntnsproulvlvmtorqpsosorqqqqqqqqqqqqpsorqpsorqpsorqpsorprpsnspqqrospptmvkwlunsotnspqqrotmtpqqqptmtorqqqpsospqrprpqrprpqrprprprprqprprprpqsntnsprprospqrpqrprotnsppsppsorrospqqqrotmtososorqqpsorqprrntorqprpsntorprpsorqpsososospqrosprpqrpqrospqrosospqqqrnumunsososotnrqrotmuorpqsmwkuoqrqotnsqotnsprotnsqotnsqprpqrprospqqqqrpqqrprpqrprpqqqrpqqqqrpqqrprpqqrpqrospqrprotnsqospqrospqrotoqrprqprqprqpsosorqqrosospqrprprprqprprprqprprqpqsnultqqqqoumtpptmumumumvkvnrsmunsprprotntnspqrpqqrotnsqouluorqproulvlvlunsqpqrpsnsprprospqqrotnrrprpqqrpqqqqqpsosorqqrosospqrosorrpqqpspqqqrososppsososospqrpqrpqsntmuorpqqrprospqrospqrospqrpqrosqotnsqprprqprprqprqprqpsorqpsosntorqprqpsntosorpsosntorqprpqrqotnsprotmuopsosppsospptmumtpqqqpsorqprqotnsqotorprpsorqpsorrnumumulvnrqprpsorprqqprprqpsoqsntppsorqqqqqqqqqqqqqqqqrpqqrprpqrpqrososososososppsososnulvnrqqpsorrosppspqrorrpqqptnsorrotlvnrrntorqprprprpqrpqsmvmsqoulvluoqrprqprprqprprotnsqospqrpqrpqrpqrpqrppulunspsnspqrprpqqrotnspqrpqroulunsprpqrospqrotnsqoulvmsqpsnsprprosqotnsqotntnspqqqqqqprpsnuluorqprprqqproumtnspsntntorqprqqqqqqqqqrosospqrotnsqotnspqqqrotmunspqrospqrpqrotnsprpqrotoqrprprprprprprqpsntorqqqprprqprprprqprpqrprpqrprpqsntorprprrntorqqqqqqqqqqqqqqqqqqrotmunrrososnumtoqrqprpqsntorpsnulvmtorprpsosorqqqqqqqqqqqrpqrotorpqsmvlunsososorqqqpsntppsntosorqprpsorpqsnulvmsqpsntorpsntoqsntnsprprpqsmvmtntntorprqprqpsntorprprqprqpsosososppsppsnunsorrosospqqqqqqqrosospqrospqrotmunsosnumtorprprqprpqrprosprpqqrprpqrprprprprqqprqpsorprprotntnsqqqqqqqqqqpsosorpsosorqqqqqqpsosorqpsospprqpsoqsntoqrqprprpsmvmsqprprprprpsoqsnumtosntntoqqqqqrosntpqqqpsorqprprqqpqrpsorqprprqprotntnsprprprprpsmvlvmspqrprprpqroultpqrosospqqqptmtorqqpsntosorprqprprpqqqqqrorqptnsosprososososorprqqqpqsnumtorqqqqpsorqprqpsntorpsntoqsmvmtntnunrqqrotmunspqqqqrotnsqouluoqsnsqprqprqprqotntnsprpsntorqprqprpqrprotnsqotntntntntorqprqqqqpsosorqqpsorrnumumumtpqqqqqqqrospqrpqrprprpsntorrntntorprotmvluntntntorpsorpqsntntorprpsoqrprqotorqprqqqqprqpsoqsnumtorqprqprprqprprqprpqrotnspqrprprprqprprqpqrpsorprqrospqqqqrosospqqrosospqqpsosorqqpsnunrqqqqrospptmuntnspqrprpqqqrpqqrosospqqqqrpqqrprpqqrotnsosotnsotntnsqprqoulvlvmsqoumtntntoqsmvlunspqqqrprospsntnsqprprprpsntntosorpsosorpsnumsprpsntorprqqpsntppsntpqqqpspqqqptmumtorrosorrpqqrprotntoqrpsorqpsorrosorqqqqpsnumtppsospqqqqqqrosorrpqqqqrosososorqqqqpsosorqprqpsntorqqqpsorqoumtnsqprprprotntnsprprprprprprprotntoqrprprotntnsprprprotntntntntorpqsntnsqprprqqqotnulunspqqqrotmunsprprosprpqqrpqrprqouluoqsnsosprppspqrospqrprotmunspqqqqrpqrotmumunspqqqqrprospqsmuoqsmunsqotnsprpsorqpsospqqqqqqrpqqqqrotnspqrqprqotntoqrotnsprprprprprprqprprqqpsosorqqqqprqpsorpsorprqprotntorprqqqpsorqpsorprpsnumsrnunrqqqrosososppsnumtorqqpsorrntososorqqqqqpsnumtntosorqqqqqqqqqqrorqrotmtqosospqqqqqqqqqrospqrpptnspqqrprpqrprprpsmuoqsntorprprqprprprqpsntosntorqprqprqpsntntorqpqrprprotnsprpqrpsnsprqprotntntnsprprprprprqpsntorprprprprprprprprprpqqsmvkwlunspqrotntnsqprprqprprqprqprprqpsntorrorrosospqqptnrqqqqqqpsnumtntosoqsntnsprpqqqrospqrppsprpqqrpqrotnspqrprotntorqprqpsntorpsorqpsorqqqqqptnspqqrotnspptnsosospqqqqqrpptmunsospqqqqrpqpsotmtosososppspptlvnsosnunrqpsoqrprqotntntntorprprqpsntntorqprprqpsntoqsntoqsntorprprprprpqrprpqrospqrosospqrorqqrpqqqrprpqrpsorprqpsorqprqprpqrotmtppsosorqptmtorrorqpspqqqqrpqsntoqsorqqptmtpptmumtpqqqpspqqqqqrprprpsosospqqqqrorpsorpqrqprotntnspqrpqqqqrorqqqrorrnunrqqpsosorqptmtorqrosospqqqqqqprqprpqrprospqrosppsosppsnunrrntppsorrnunspqqrprpqrprpqrotnsqosprprpqsmvlvmsprqqprpsorqprqpsorprprqotnsprprpqsmvluoqrprpqrprprpqrpsnspqsmvltpptnrrnunrqpsntorqprpsnumtorqqpsorqotpprprqqpsntorrntorqqprqpsntntntorqprqprqqqqprqqqqprqpsntorpsosorrotmumunrqqpsorqqprqqqprqqqpsntorqprqprqpsorqqqqqqqrososprotnsprprospqqqrpqqqrprososppsosorqqqptlwkuppsosnumumtososntosppsosppsososorrnvkvnrrosppsosorqprpsnulvmtorqpsosntosorprprprpqsmwjwnqrqprqpsppspqqrotnrrprpqrprotntmumvlunspqrprotntoqsmvmsqprprprprprprqotnumspqsoqrotntmvlunsprprpqrqprprqqpsnunsosospqqqqqqqpsnumtorqqqqqqqrosotnsorrpqpsosorrosorqqpsntorpsnumtososorrosnumtorpsnumtosorpsosntosnumtorqqqpsorqpsorprpsntnsrmvluoqroulvmsprprqprpqrqprprprprprqprpsoroumumsqqqrntpqrpptnspqrpqrprpqrprotnsosotnspqqrprpqrprprqprprprprprprpqrqpqqqrpqqqrosorrosorqpsosorqqqrososotmunrrososnumtorprprpqsmunsprospqqqrotmuorprpsntoqsntorprpsorprqpsntorprprprprqotoqsntorqoumumtosorqqpsosorpsosorqpsorqpsorqpsososospqrosprprpqrqotntorotorqprprqprprprprpqqrosospqqqrpqqrotmumtosppsnumtpqqqpsorrntorqqqpsosorqpsnumtorqqqqpsnumtorpsorqpsososorqqqqqqqqqptmtpptmsrotnsosotnrrnunrrnulvnrqprqqpsnunrqpspqqqqrosospqrospqrospqqqqqqqptmunrrprosotmumunrqqqqqpsorqprprprqospqrqpsorqqqqqqqqprqprqqqqqptmunsospqrpqrprprpsntnumtorqqprqqqqpsospqrosprpqrprosotnspqqrprpqrprpqrprqotnsqprotmvluntnspqrprosprqpqrqqprqprprqqprprqqqqpsospqqrotnspptnsorrosnunrqqqrospqqrpqqqrpqqqrpqqrprpqrprprqpqrpsoqrprqqprprqprprpqrprqotoqsntorpsosntosorprprprprosprpqqqrosososnulwkvnrqqpsntoqrospqrotntntorqprprqprotnspqsmunspqqrosntosntmvmtnsqpsntososospqqqrpqrotnsprpqqqrpqqqqsmvltrmvluntntnspqrpqrotmunsqprqprqptmulwkwkvmtntntnsprpqrqqprprqprpqrprpqrprqpqrprqotnsqprpqrprpqsmunrsmunrrosprprotnuluorqprqqqqqqptmumtpqrnumunrqpsorqpsosorqqpsnunqsnumtosorqqqqqqqqqrorqqrososprotnsqprprpsntorqpsosnumumtosorqqpsosorqqrospqqrpqrotntmunspqqqrnumtppsntorqprqpsntorqprqprqpsntorqpsorqqqqqqqqqqqqqqqqqqqrpqqqqrospqqqqrososososorqpsorqqptlvnrrorqqrpqqrotntnrrpqrotnsprpqqsnspqrpqrprprprqqqqpsosppsnunrqpsososorqqqqpsnulvmtoqsntorqprpsorpsosorqrorrnvkvnrrnunsorqrpqqqqqrpqqpspqqqptmunspqqqrorrnumtpqqqqrotntnsprprprqosqprpqsnsqotorprotoqrospqrorqqqqqpsorrnumtorqqqqpspqrnunspptnsososorqprprqprprpsntnspqrpqrospqrpqqqqrosnulwltpqptmvlunspqrosososnumtpqqqqqrprprotosntntpoumtorpsntorqqprqqrnulwkwkvmtpqpsosppsorqqpsntorqpsorqqqqqqqpsosnsqprotnsospqqqqqqpsntorprprqprqprprpsntorqqpsospprqqqqpsorpsorqpsososospqrosospqqqqrospqqqqrorrosososorqprqoulvmsrnumtppsosorqqqqqpsorrorqqqqqqqrospqrpqrotntnsprqpqqsoqqqrprprpqsntnspqqrotmunsproukwlunspqqqqrosorqrosntpqqqqqqqqrosospqqqrpqqrotnrsmunsotntnsotorpqqrqprosprprprprqqqqpsppsntorprprpqrprpqrpqsnuluorrntorqpsosorqqqqqqqpsosppsosprososqpqqqrospqqprqrosososprpqqqrospptmunsospqqqqrpqqrprprprqoulupoulvnqrprqotnspqsntmvlvmspqsntmvmtnsqqprprrntorqqpsorqpsorqpsnsqqqprpsnumtosntorqqpsntorqprprqqprprqprqprprqpsntososntorqotmvlunsprpqrospptmumtospqqqqqrpqqqqrospqqqqrppsotnspqsorqqptmunrrososppsosorqqqpsnulvmtnsprpqqqqrosospqrnunspqqqqrotmtpqqqqrososososorqprqqqprqrorqqqqqrnumtppsorqqprqpsnsrnumtospqrnunrrosorptmtoqsntoqrprqprprprprqprpsorqqqqprqqprprprprprpsorprqqqprqqpsntorqpqsnumsqpsoqsntorpsntorqqprprpsntorqqqqqqqrnumtppsorqprqpsntoqsntorprqqqprrnulvnrprprqotnspqrospptmtpptmtorqqqprpsnulvlvlwjwmtntntorotntnspqrpqrotmunsqnumunrrosorqqqqqqqpsorqqpsntorqpsnumtppsorrnvkvmsrorprqqqprqpsorqprqqqpsnunrpsosorqrosnunspqqqqrpqqqqrospqrotntoqrpsoqroumsprprqprprprotnspqqrpqqqqrorqqptlwkuppsorqqpsospprqqqqpsosorqprprprpqrqprprqqprqpsorqpsorqpsnumtorqqqpsorrnulvmtoqrqprprqqotntoqrotmunspqqrotnspqrpqrprprprprprprqprqpsppsntppsorrntpqrososososososorrosppsospqqqqrosospqqqqrotmunsososorqqpsorqprrososotnsprotmunrrosososososorrorqptmulvmtosntntoqrprprosprotmuoptmuoptmunsospqqqqrosospqqqrotnrrospqqqqpspptlvnspqqqrososotlwkvnsosospqrosprotnsqotoqrprqproulvmsqqprqpsnsqprpqrprqprotorpqrprotmuoptlwlunrqqqrospptnsqotorqprqprqpsntospqqqqrprotmvluoqrospqrotmunrsmumtpqqqpspqqrospptnsorqrpqpsotnrrnunrqqpsorqqpsosppsorqqqprprqprprpsnspsntmvmspqrpqrprpqrprqotntorotntnsprpqrqprprqprprprpsntntntnsprosospqqqrosospqqqrotmunspqrotntmvlvmsprprprpqrotmtpqrosotnsqprqprqprqprosprppspqrotnspqrprprprprqprprprpqrospqqqqrpqrprprpsmvlunsotmumunspqrprotntnrrosppsntnulunsqprosqprprqqotorqprqprqqqpsososospqqqqrpqqqrospptlwltorqpsnumtospqqqqrosospqqqrprotntntnulvlvmtnsprprospqrpqrosqprprpsntntorprprprqotntoqrpqrpqrososotlwkvnrqqpsosorpsorqpsosntospqprqqqqpsosnumtososntpqqpsotlvmtorqpsnsqprqotnsprotntnsprqprpqrprpqqqrososotnspqrpsntnsqpsntoqsnsqosqotnsotntnspqrprpqrprpqrqotntorotntopsotnsosospqrospqrpqrotnspqrpqrprprpsntorqpsnumtoqsorprqqprpsorqpsosnumunrrosprpqqqrpqqqqrospptnsqosprpsmunsqpqqrprpqrospqqqptmumunsppsorqqprpqsorqpsosnumumsqprpqrqospqrprpqqqrososorqqqqqqrosotnspqqrotnsorrospptmuntntmunspqqqqqqqpsosorqptmtppspptmtpqrospqrospqqqqqrorqqrpqqqqqqqqqprpsorpqsntoptntntmvmsprprpqrpqrpqsmvmsqprpsnumtpptmumumtppsorrotmunsprotnsprprpqsnuluorqprqpsorqptmtppsosppsosorpsosorpsosorqqqqqpsosorqqqpsosorqqqqprqqqprqqqprqqprqprprprotnsospqrotmunspqqqqqrprotntoqsorqpsorqqqqpsnunrqpspqpspqrosotmunrrorqqqrnunrrosqnvluntntnspqrotmtpptmtorrosorqqqqqqpsntpoukwmtoqqrprprpqrprqotntoqrpqrpqrosotmtpptmtosososntorqproulvmsqprpsorqptmunspqrpqqqqrosososppsososnunrqqqqrorrotnrroulunsqprotnsqprproumtpotppsorqqpsntorqprqoumtorpsorqpsorqpsorqpsntoqsmvmsqprprqprotntmvlvmtntorrntorpsosntorqqqqprqrorqqrorqrosospqqqqrosososorqprqprqpsntorprprpqrprpqsntnsqprprpsntntntoqsntoqsorqoumtnspsntnsqotorprotnsprpqqqrpqqqqqpsorqqqqqqrosososospqqrotnsprprpqsnulvmsqotorosprqosqprqoumtpprqpsorqpsosppspqrosotnspqrprpqrpqrorrpqqqptnspqqrosorrorprqqprpsosntnumumtorqqprqotnspqqqrosospqrospqsmumvlumunsospqqqqqqqqqqptmumunsppsospqqpspqrospqrotnspqsntnsqprpqrpqrospqqqrpqqqrpqqqqqqpsnumsqprprprpqrqotmuorososqosospqqqqqqpsntppsntpqrotnsqotorproumtnsprpqqqqrosososotmumtppspprqpsntorqprqprqprqprqprqpsntntorqprprqqprpsorprpsoqrotorpqrprpqrprppsprpqqqqqqrosntosppsnunrqqqqprqqqprpsorqpsorrnumsrorqoumumtospqqrprpqsntntnsprpqrotntnsprprosqospqrosprpqqqqrosnumtososorqqrorpsosntntnsprprosqprprprpqsmunsosospqqqrotnsprprpqrprqprpsosppsosprososqprosqprpqsnsqouluntntoqsorpsnvkvmtorqprqotnsqpqrotnspqrpqrprprprqotntorprqpsorqpsorprprpqrospqqqqqqqrpqroulvmsqotntorprqpsorqprqprprpqrprosprosotnsospqrosprprprpsntnsprpqqqqrpqrpqrotoqrpqqrouluorpsnumumumtpptlwkvnsososososorqqqqpsospqrosospqrososprosprpqqrosppspptlvnrrnumtosppsnunrrnumtppsososntpqqqpsosntorprprqotntorprprprprotmuoqslvoqrorrosospqrosprpqrotntntnspqrosorqqpsntppsntorqqpsnumumtosntorqprprprprosospqrnumunsosotnspptnspqqrotnsosprppsprpqroulvmsqpsorqpsorqprprqprotorqprqprqpsntorqprqpsntorprpsnsprprosospqqpsotmtospqprptmtntnumsqotntnspptmunrqqpspptmuoqqrprqosqpsntntoqsnsprqproumulvlvmtoqsntorprpsorprqprqprqoumtorqqqprqqqprqprqpsntorqqpsntorqprqprpsorprqprprprqotnsqotnsprprprqqpsnumumtpovkvnrqqqqpspqqpspqrnvkvnrqqqprprqotnsqotnsqoulvlvmtnsqprprqqprrosososorqqqqqqqqqrosorrosorqqqprqpsntnumtorqpsospptmunspqqqqqrorqqrosorrorrntorrosntpqrorqrospqrosprpqqqrpqqptmunrqpspqqpsosososorqqqqprrorqqqqqqrorqqrosntpqrorqqrorqpsnsqprprpsntorqprpsntntorpsnulvmtorqpsososososososorrosososososorqpsosorprrorprqprpsoqrprqprpqrprpqqrprprprpsntoqsmuorprotnspqrpqqqrprpqsntoqsorqprpsorqprqpsososospqqqptmunrqqqrorqpsorqoumtorqqprqqqqpsorrosorqqpsnulvmtppsorqqqqqpsorrntpqrorqrprpqrprprpsnsqoumtntorqpsnulvmspsntntosorqqpsosorprrosntpqqqpsorqprpsntorqqpsnumtoqsorqpsosorqqqqpsorpsorprpsntoqrotnsosososospqrotntmvlvmsprqqqoulwlsqprqqpsntorqprprprprprotnspqrprosqotmunspqqqqqqqpsosorpsososososorrosorqptmumtpqrosospqqqrpqrprqprpsntoqsnsprqotmvlvluoqrqotoqrpqrpqrosososntorqqpsosososorqqqqprqpsorqoumtorrosorrospptlwkvnrqpsosntorqprprprpqqrprospqrotnspqrprproulvluorqprqpsorqprqprprqqpsosppsprpqptntmumvluoptmvmtnsprqprprprpsorprqqqprqprprprprotntoptnuluorqqpsorqprprpqqqrosorqqqprpsorqpsorqpsntoqsntntorqprqqprqpsorpsosorpsosntorqqqqprqqprprosprpptntnspqrososospqrotntntntoqrqpsntorprqpsntoqsoqrprqosprpqqrpqrotnspqqqqrosorrpqqqqrososososorrotmtpqrorqqqqqptmunrrososotmuntorqpspqqpsotmtorqptlvmtorpsorprqprprqprpsntntorqprqqqprqqqprqpsorqpsppsnumtorprqpsntorqqpsorqprqqprqpsntppsntorprprotnspqrpqqrprotmvlunsprospqrpqrpqsnsqprqotntntnsqotnspqrotmtpqrosospqrospqrprprprpsntntosnspsorotntnsqotnsqprpqrqpqrprqprprprpqsntntntntntoqqrotmuntmuntntntnsprpqqqrotnspqrprpqrotnsospqqrotmtpqrpqqqqrosorqqqqpsososorqqqqpsosorqqpsnumtoqtlwkuorqprprqprqoumtoqsorprprqpsntosorqpsorqqqqpsosorqpsntorqotnulvkxkvluorqprqprqprqprqoumtorqpsosnumunspqqrprospqrnumumumtpptmunsososppsosorpspprpspprpsorqprqqpsntpprqprpqsnsppulunsqprprqpsntorqqprqpsntorqpsnumunrrnvkvnrrntorrntorqprqqprprpsntnsqprpsnumtppsorrntorqprpsorpqsosntnumtorpsntnsprpqqqqqrorqptmsqprqotoqrotorosprpqrprprprprprprpqrprpqrprprprprpqrprqotntorprprprpqqrprosotoqrotorpqsorprptlvmtosososospqqrosqnunsprnunspqqqqrosospqrotnsprprprpqroulvkwluoqrpqrprprotnspqqrospqrotmvmsqotosntoqtlvnqtmunrrotnspqrprpqqrqosotopsospqrntpptmtpptlwkwmspqrqprpqsnsosprorqqrorpsosorqqqqqqqqqqqqrososprospqrpqrpqrprpqrprqnvlvmsprprprqotorqpsorrnunrqprqpsmvluoqrpqrotoqqqrqosprqotorqotosntnulvmtoroulvluntntoqsntoqrprotmvltpqrpqrotnspqsnsosqprosprprprprpqsmvlunspqqqqqqqpsntorqprqqpsorqprqprpqrprpqrpsmuntoqqrprprprprqotntoqrosqprprpsososotmtpqrorrospqrososprorqqqqprqprpqsntorprpsoqrpsmunsqospqrotmuoqrpptorpqrprprqprpsosorqqqpsnumtntntorqprpsosppsnumumtorprprqprprqprpsoqrprqpqsmvmsqotorpqrpsmvluorosprpqpsosorrnunrrppsppsnsqprotnspqrpqrprotnumsprpsntntntorqotosorprrosntososntorqqpsntpqrnunspqqrnumunrqpsosososospqqqqqqqqqqpsosorqqqpsorqqpsntorqprqprprprprqprprrosntorrntnsqprprprprqprprprprotntnsprpqrprprprprprprprotntnspqsnsqoumsqprqotoqrosqprpqrqpsntntoqsntoqsorqpsorqpsntorqotntnsosososososospqqpsosnumtorqqqpsososospptmtppsorpsnumtosnumtpqqqptnspqrpqrotnspqrosospqqqqqrotmunspptmvluoqrprprprpqrpqrotmtpqqpsosorqqqpsorqprqprqotntoqrpqsmvluoqsnsqprpqrpqqqqrospqrpqrprpqrprpqrotnsprotntnsprpqrprpqrprprprprprqprpqsntorqprqpsorqpsosososospqqqqrosospqpsprpqqrqprpqrpqrprotmvluntnspqrprpqqrprotmvmsqotntnspqqrorrotnrqrprospqrpqrprprotoqsntoqsosorqpsosorqqqqqpsososospptnsppsospprqqqqpsosntorqprprpsorqpsosorprqprosqotntoqsnulvmumsqprqqqqpspqqqqrososorqqqqpsosorrprosotnrrotnspqrpsntoqsnunrqpsospptlwkvnrqqqqpsososorpsorqoumtorqqqpsorqprqprprqqpsntorqqprprprprpqqrpqqqrososppsntppsntppsorrotnsprpqrotnrrnunsprotorqprqpsntorqprqqpsnumsqprqotntntmunsppspptlwltpptmunrrnumtppsntorqprprpqrpqrotntntorqpsorqprqpsnsprqprprpqsntnspqrprpqrqqprprqprpqrpqrotnsprprprqprprpsntntnsqprpqrprprotmvlunspqrospptmtorrntorqprprprqpqrpsorprprqpsntorqqpsntorproumsqoumspsntnsqpqrpqsnsqnvmtoqrprqotnsprprotntoqrprpqrprpqrpqrprprprpqrqqprpqsntorotntorprqpsorqqprqqqqprrosorqqpsosorqqqqrosospqrosospqqqqqqqqpsosnumunrrnumtppsorrospqrospqrosososososososnumtorqqpsosorqqqqpsospqqrotnspqqqrososotmumunspptnspqrpqrouluntorotntorprotorprprqpsorqpsorprpsntnsprprprprpsorqprqqqqprqqpsorqpsorqpsnumsqoumtorqqpsorqpsorqqqqpsosorqqqqpsosorqqqqpspqqqpsosorprpsntntnsprqpqqrprososososososososnumtorqprpsorpqsorpqrqotmuntntmvmsqprqprqprprpsnsqotoqrpqsntorqqqqqqqqqptlvmtosntorqpsnulvmtorprqprpqrprqprprpsorprprqprotosnsprqprqpsorrospqrosotmvkwltpqrosospqqrosprprotnsprpqqqrpqrprqotntorprotnsqprpqrprprpqrotntnsqotorpsnumsqqpsntorqprprpsntorqqqqqqpsosorpspqrnunsppsorqprprqprprqprpqrpqrosppsorqqpsntorqpsntntntnspqrospqrotnsprpqrotnrrosorqqqqqpsospqqrosospqqqqqqqqqqptmunqtnsppsospqqqrprprqqpsnulvmsqprqotorqpsntntorpqsmvmsqoulvlvnqroumspqsntntntorprqqprpsntoqrosqospqrpqrprpqqqsnspqrpqrpqrpqrnunspqqqrotnspqqrotmunspqqrosospqrosprprpqrpqrpqrotnspqrprprprpsnulvmtosorpsotmtorrososorqqqqpsorqqpsosppsprotmunspqqqqqqqqqqqqpsosorqqqqptnrqqrpqqqqrotmtprpqptnspqqrotnsospqrorqpsppsnumunrrnumunrqpsosntorqprpsmwjxkuntntoqsmwltorqrosospqrprprpsorprqqqprpsntnsqpqqqrosprpqqrqpsnsqpsntnumtorqqrpqqqrotmunrqqqpsnumtntorqprprprqosotoqrotoqsntorprqqqpqsntoqqrotnsospqrosososorqprqprprqprprqpsorqpsorqprqqqprqqrorqpspqqprrorqpsoqsntntoqrpqsmvmsprpsorprqrorqptmulwkwltosotnspqrqprprpsmunrrosntospqpsosppsosorqqrososprpqqrprprprprqprprqprprqprqprqpsntorprqpsmvmtorprqqpsntorpsntoqsntorqprprprpqqqrosospqqqrotmvlunsqotnsqospqrpqqrotnspqrprospqqrprorrpqqqrosospqqrprosprprprotnuluorprotntnsorrpqrnvlunsqotntoqrqoumtnsprpqrpqqqrotmunspqqqqrosospqqqqqqqqqqqqqqrosospqqpsprppsotoqrnunspqqqqqrpqqqrpqqqqqqqqprqqprprqprqprprprprprosqouluoqsntorqqpsososospptmumunsppsososososososososntosorpsorqprprprprqpqsnulvmtpoumsrmvluoqqqqqrnumtospqpsprpqqrprpqrprotmvlumunspqrosotnsosospqrnunrrnumtorqprqpsosorqrosorrnumtosorqptlvnsorptnsosospqrospqqqrotmumunspqqqqqrpqqqrpqrpqrprpqrprpqrprotntorpsorqqqqqqqqptmumunspqrososorqpsntntntntoqrprqprprpqrotmunsosospqrosprotntnrrprpqrotnspqrpqqqqsmunrrorrorqqqrospqrpqqrprpptmwkunsqqqpsososospqqqqrprpqrprqprpqrprosprpptntnsqotmvlunsprotntoqsnulvmtppsospqqrprotmvlunsprprprqpsntorqprprprprospqqqqqqpsosorqqqrosososospqqqqrprotntoqrpsnulvmumtppsorqqpsorrnumunrqpsososnvkwltpqqrnvkvnrrpprpspqqotosorprqprqotnsqotnsprqprpqsntnsotnspqqqqrpqqqrqotnsqpqsntorpsorqotorpqqrprotnsqpsntnumtntntoqrotnspqrpqrosprosospqqrnvltqnunspqqrotmvlunspqrotmunsppsosppsnumumumtppsorqqpsosorqqqprqqprqqqprqqqqqpsososospqqqrotmunspqqrotmuoqqrprpqrqoukxkuorprprqprprqpqrprprosprprotntnsqoultqotopulunspsntntorqqpsntppsorqqqqqqrospqrpqsmvluorpsntorqpsnumsqpsnulvmtntntoqrprprprpqrpqrotnspqrprprosotnsppsospqqqqqqrotnsprprprqprprprprprotntntntnsqprpqrotnsorqpsntoqrpsntntpprqpsosorqpsnsqprosprpqrprpqrotnspqqqqqrorrotnsprqprprqpqsntnsqprprprotnspqqrososotnspqqrpqrnunsorqrosntqnulvnsososospqrosprprprpsosorqqqpsosorpsosorqqqqpsosososorrospqrospqsmumuntmunsqotoqsmvmspqrprprpqrprpqqrosospqprqqqqprrnvkvnrrospqqqrotmtpqrosospqrosospqqqqqrotntmvlvmsprprprprqotnspqqqrososprotmunsqososprpqqqrprpqrprqotntorqprpsorprqoulvmsprqprprprotntnspqrpqrospqqqrotmuntntnsqprqprprprprprprqpsosorrosospqrotntorprprqprprqprqqqqpsorqprqoulvmsqprpqrprpqrprprqprpsosntpqqqqrospqrosqotnsprprotnsqnvmsqnvlvluntmvkwmrrospqrpqrprqotntntntorpsosorqqrorqqqqqqqqpsntorqqpsnunrrnunqtmtoqtmtnsqprpqrotntnsqprprqprprqotnumtoqsnumsprqpqqrprosppsprosotorosprqpqrprpqrpqrotnsprprpqsnuluntorpqrqotnsqosprpqqrprotnspqrpqrotnspqrpqqqqrorrospqqrpqrospqqqqqqqqqqqrosprosospqprqqqprqqprpsntnsqotntntntosntososntpqqqpsososorqqqqpsorqqpsnumtnumtorqqqqqpsnulvlunsqospqsmunsprotmvmsqoulwkvmsqqpsntpoumumtorqprpqsntorqqqqqrpqqqqrorqpsorqprprqpsntorqqqqqqqrosospqqqqrososotmunrqqqqqpsorqpsorqpsosorqqqrorrnvltpqrospqrosprospqsmunspqrpqrotntnspqrpqrpqrospqqrorqptmtososnunsppspqrospqqrotnspqrqprotntnspqrosososososorrosorrorqpsorqqqqpsosorqpsorprqqprprqqpsntosnumtorpsppsntorqqqprpsorqprprqqprqpsnulvmtorprprprpqqrotmunsorrpqqprqprqotnsprprprprprqotorproulunspqrprpqrprqospqrosososososorqqrorqqrosososprorqqrorpsorprpsnsqprpqrprosotnsospqqqqrnunsosprotmvltqpqqqrpqqrpqqsnsotoqqrqorrprorsmsrosorsmsqsmsptnprumotrrkswoisq7ID3 3ID3@)  KU1lTPE1c64 fart generatorrockdodger-1.1.4/data/4est_fulla3s.mod0000644000175000017500000005752213706632107020076 0ustar krawczykkrawczyk4est_fulla'3sroz/rno^fit-11-10-97!9@'@i@[@ @ @  0 M.K.S `SS@S0S SP S@ SP S0S@SPS0S0S@SPS0S, SPS@SPS0S,0S0S SS@SPS0S SPS@ SPS0֠SPS@ SPS0S0 S@SPS0 S, SPS@ SPS0SS\0S@S0S pS@S0S SP S@ SP S0S@SPS0S0S@SPS0S, SPS@SPS0S,0S0S SS@SPS0S SPS@ SPS0֠SPS@ SPS0S0 S@SPS0 S, SPS@ SPS0SS\0S@S0S `S@S0S SP S@ SP S0S@SPS0S0S@SPS0S, SPS@SPS0S,0S0S SS@SPS0}S SSPS@ SPS0SPS@ SPS0S0 S@SSPS0 S, SSPS@ SPS0S\0S@S0}S pS@S0S SP S@ SP S0S@SPS0S0S@SPS0S, SPS@SPS0S,0S0S S S@SPS0S SPS@ SPS0SSPS@ SPS0SS0 S@}SPS0 S, }SPS@ SPS0S\0S@S0.Zitt?D Ѣ"˗8uzW$Ԣ/DTkweY: ŲCXu|f]I4#"   ü ',)>8C>?=<849-)%%%!.38HHX_o{}ysmg_\OJD4*  4Leu{sib^ONKI?=<98=7858652/5/,//(##³ #+7CNVcko~wm]LC3)  $+4;BIOW]cjou{~yonjf]ZUOJE>;5.)#  #(.37:?DHLOTV[^_bcfgggihihgfdd__]ZVSOMIC?<8/.*&#  !%),./368789::9:87<4642/-+))&%$$#"""####%&&&&%%$$$!  "&))*++-.-../..///////2///2//22342322///-++*'%  !"#%%%&'()**)*()(&%$"  "##%%%%$##$"!  "#!!!"!"                            )g/X# "O?_>$3YwK Ѡ|j\c/ӕ&/iutmode[%XR)o /ʦj3DU"6 *_C7(#C,2ױ2:DDIH7(/ơɷ#" *$/_( 6 //-$ I"OcX) <#;(."!#4ۓ-"#3 ( M9-C %& , " 6 +?!2  $/ . )   "  )   #*   )    ,            !   "#                                                                                                                                            (iZ!3 (*&*    #%9"# $"                      %                                                               ;##  /+; '3!MO/?N,-'"#+/          $       $                  "$                               $!                               *$ $   '!  $9*! !,!    '2%' %,        $  ,:6'    #    ,   . ($$1,/$          ,(% %##,   ',!  '21(     $ '*'!+%! !%2* # !     #  .,!$##!.'       #   # .!    #        #$     !#+.     # '*., #%   !   '.%$##    (  (*%          #'!        !%+(+(      !!,15%#        !' (,$      !/6/,!      !('    !  $+++$#,(    '    !        #$     !( #'  #  $#!+(      ( !         !    #   #        ,*$'  $ (!  $    !           ##9+/    #!*  *6       # (*(!     #    #     !(*( #       6*  *!#    /+9##           !    $  !( $  '$*,        #   #    !         ! (      (+!#$  #  '# (!     $#        !    '    (,#$+++$  !    '(!      !,/6/!      $,( '!        #%51,!!      (+(+%!        !'#          %*(  (    ##$%.'   !   %# ,.*' #     .+#!     $#        #    !. #   #       '.!##$!,.  #     ! # *2%! !%+!'*' $     (12'  !,'   ,##% %(,          $/,1$$( .   ,    #    '6:,  $        ,% '%2'    !,! !*9$  !'   $ $*      #1*##          !,?:.#     ! !.,          (/( !$(       !                   !#'%           %/(*++ $$     ('$%# $!%(            $# (*     ! %! #'#  !!       !$$ #%#      % $!#%$!(%           '%#+*%/* *32%     #'$ '+(1%!     ((!! #!,*(' %((   '36+*,..(+1%! #    .51+$,831*(%     /??.!%,8C9$       #8A?<1!2?@?+#    %..((' $$6<2       *8FH=?,##,?=HF8*       2<6$$ '((..%    #+?@?2!1iŰqy9r o% @w L AC4`/{Z* qc? GA G+r̨>Un*_M%0xYcj^pQMÄp@M(;'6 {^)DnPl$v4DQ&G4KZv3BGE!PLVn+5pa4wUrB&G>(ލH#rvAY>%s:tS9iL%R&M46&κryMtl k|.!?#z}&+r:@cP& KB2q1DT%O1bsZŭP4 wI& 6%|nl:(C2]_S4Z9/%6Ѻ+ 9CE\9HȖerpAq-_;s\ÄT'oI">x_tVخC]_t?j*qLUaP +Ѱ>Bi9JIVANwT%*Ezr&ؓȲ~6\Ȏ|^q]oyF"m6zrYmrj99tIfU9%QH5IgDz._ϵ)W"Ѧv[Sx[|"+~FvL ž6|~ռKN8º6Δ3f:۩믇 @zfᫍ6nJWB"tڷ7|b^nZ'6|sIGS@UsKjL9#ϒ+J'jcm7JcÄQRu=m?\趮_1>gct s Z#ֈx&qڵ~בMԭ ܱ4HI3&\avy/PIoWvgךq<@S@F L{U׿o/۱mN.SۢP\^W]߁DWmge.n ݫNDcl@D,IZ*fk\Oz=ISOo*Kwșme!Q4M$SRf aɯecbgC0'q_mll?f~[rqN666CJ] 2iv, ! x8N~''[^j}Cu"7AMT%VR&t6W\g"y9,OSS(;g0XLv p cKQ/&f&BM] I& x˔RWv5w_i*um7ܞp"[SrM'}Q3JnyT/v,dQhi:|E~Lq`u8^ iuOdS=n0"v(E"vʹif(Dң&MDGrF޵KQ̏7~LP VI K_Eej?)NA0Τ:EFCֵr^OKVHsi0ZtnEM7̧RS&g5+Z+eR~Pu\WSRDw2VKrgsqs-' *[ fH <²P >q R4z @3t.+@ЄKQ'&1M:A*O@ Dd,bNm}\R/O|/2u`bJ@J0 Q s iq؂řzzËrSHOdd*ECurZ)LKVHsk0Yh|NAsvk"Ҥ/pOD66Ōu0׋UrrOv{_$`lΐq9\H]юz2,qe.(pAY4g53ULHX$`Ǖ% UQ>0hR9Hh[A1K8ToAOZ:LST(6kM,#Z\m~Wx} ^d &v9$ 2J9h4=ߪ)&jUGqЩs1yd6rh.k_" hWy4b&$龴-j$źp!¹ R`9KSI >0)&G %6>&׊3"1LGlf;k]]oRYc^34Dn*J׼ <$x) wE8}Uvd.n1]]IߕEsTk9Ȅc>Fj41יQ[^Շ+yn= #ER1Y^9h5W^o}T,NĂvDdԿw}R>,\iKc3gzʡ^,16?ߢmn]+z|_Ew;FƊo2ִѻ{01{N[=i_wh1:Vv?a &K{OK좡yg_O]YyKR51XX6Sq@iU4L.c1CI19g)sѪo. @m\TxS.?bvV WbNO|y#DcA"}>)M1e>Gg969bM!qx?F\PU(=՗UW Lͅh^@I@N;Y9Ui v%JIaA zze.0*GAd` Ts.E^HS4|| eg܋g/̨^tU|%PQEnomi-Z!02FBh`"p.wN9oQjzqvk6)Mo1n `o9enQ/?Hrss>4ԋLJeQҞÙT!Bgn (!33} RWC I9L@QdyP<65%=eb͑>q l,ԓ̫\0 SZr鷾]SjOT go0 =-]ղ{_F@J& p TwmXU0 їfXȓb)9*ݰw#TmpkLFJZ1;s9Qo/gdja $dj.AY8?3$x JO"dY_8B FFc S:)c`)d~:h }0jdv)켄rz kU[Tp9- xg?ƃ;+O*O廭抭$-(L BjLs!S<&DNR)HKZmeѥ.(_Hbf9: ~#{ګ/{ŭ 'x i>$|&$ͣah,{oT1Z2m[S &U| M?ȹ{1V}꫿Ǡ666iyUGv u h66EZgrc0~47/K© n]޷9E+Y򭃡9 ?o#x:mM54+=A*E=nAș[u Q)Ja`|vwt]%YUr]N8%~$MR ˹O g75~Z/M=JYCr7YO o e=4܇'K۱IC/R>*<(ee_d r_ZJu[Wy\IW*tk$M=B31CD>ɚ+250#nii ׾b0]y-4u+%r1Q3ȪXBuWS%pƒu4d· (ЫZ&m}E< ]9ܚS`MF= ue?1R.[ﲝe_wQΣ|j}%u5\"ܾNX5nja -@`|<5w>o~r4 Šu>c/=wwcqk\ĕI]l>W |sp>a¨Ndoa}( '#M=grgCgH3\Zː!EˢA}4(<:z9!m&UeeVr=%m͇岔k@QK&ewcaas}-[JպVn vx1+{%Gyp=}zU3~Zl+(/tP.gZFZeVdYkxDq]-[äEl*9;7pw6\7R! }O~bap9h+.{uyR .Ɔ 4> pu9B_anHL,mjq_Cȇe{K{@3*XAit,,@u $eo˜`82tHdCp^v؋W+A;=zTP2^_Fnz5НY6@O>ز<1(xB:OmAxe.ktIנx4 !bčcz78875txw) /7=d}@$ߥ#]ڕP=֢ TK_<~gY%]s ={]qNl! g<IҳF.E 6jt-WR`ԔYa2yΘC-n.>=7Vƴ\ȻOt:P4X $=Yu@ƌw;xÑCp#*:>OPm͎KGCA)D  WAw[0 }^L3ai0~h7͆ LCD|.`ŨD ͨ*0pLjbX":&6IƔXm9Tx;x}xUzض:a@ӶSJ,p}RedP92mPX7};n }Zs^> ѣ3U oUJeccsoyY>FG|FhM NݷֈvH^b7T] s 0^ֱ}3^aR`.e=>t?3^t?HR`=-}2u3:b7)U0˧@nUC@þpCXyBv,>NF%gz4owP@lݻ0ϰ/zyK#| ?h,RUը{ޜ7x7_^ ^ 2]O-z/3-ϕmڤѦߦ>|HAlvd.F;Ll)/y;aB.7<\.g*&Ϡj>Fd1v`[gj9{Kr 1xڭA219Qea3OY@q/]/2Faʿ`MZ< YV0(*u2[w`pa %FkJ,fNБ1ғY;2`p 1M+2W!3ïgWֹ%.TS󆹘wI: AZeniCnEE(g̀O?H/GOӡ=rF+## tZߔwwD+)£sB rmf05R̈́8vwU^M wu098nr!=2p@[˥7/u @Po% y{|_c^xf&4/7!̶4=X qo*\o]BZ:a\lk덀"2ЌzGRdaSb# ?r>IK&C]~5lYg@n:n.$iybLY_(D $_o,[/.cQ >)Vg3 Lamq rBmn( eLh4`$ˁ'#Pu kh1s\bio yqX/0B?˕<|CM8v mL>9/ê`$p,]Zm|:L=P8T@N) [0v$d?,(b) gE$Q8T\4G-t"^%{'xbW Fk!X-obmw$1 |x}DH3L3.P20בŭ]' z#QL6~Gq5hѷjWL"Víǫ>A3¡CM Gfh1Y^S BQk"ka} [+U%huƱc:oA<ʋ1}%~~YD,軒^ƈ (8cqr4nΧӁ]rij&yJOwG)"ABJ ?v.#t\<sT `/|5]g8VLZMC֢kÌq\}b?b̦SP$LWd0g2i>?R:\|B,Nl˘X͇C9]FuL%C$z{eĂeT/)ΈA}8o-t3d*h Yx/osѭW`Z=Һ&Z𦲆n?8}|* >qhb3~0a!} CpBfT IyY} *mX<]?EXٕuS ѲSC[t_63x~/؇p|FIswS(鴣@!^nI+=/ !I(-ApAXfɝH#Fp\4HӘ\pn;XA\OE =ٴXSpGɁ+:mT`&O4~ ˷H}|#|VSۺ Ǥ]I GmV4Ĭ}MIu^;qp !*> R>GVIi3{ڎE$04JX͵fǫ]1vTl4%͵&cu02Ւsh/Yv4c@$_ߝޛE);d1Z&d)ob*A4 Dz%1(bK' d;Q̈ArdYs72K2UH{tv T쀵9\۲hn&k4($*-PVt7wB_/k2_A\y%O8N;=@EʗBhI7'3ҳKv m͛!@,Y·]ON@KhaҼ)kK͙ . M>0`4SüR q 6?"3ԱY|mn=&fhmJ#rvT mON.xH.s81Ά/| Nm;WS[}L)ɹƵ+bM<~d*iPIeU%1TB\ݺϿ=Nlm\G )n/B98wM_ heV˧`!=rr<XI%)uUs;'fcӥ\a S#ĨAR.(څk#Շ0i >|fu~< }Sh/mڛ4a\K̖.x@h=z4I4&0Y(&G‹Ie#Ll]CX1Ep߾H~x:.$Va 46r!4W.e7r ) N=tR)5q/Tބ %^ZK.Gk\j6 ?3p^xEp62\mB Ji OT>QL6 ¥3`aj{R&q 2~XOR{2a/fbmu'| D± ; Z;uISd +i7t ޲CFd!s+ЍP^Cn([6]Vk% BǚcD?2>5.^zѕvskV9pDjzEUow=,-5,Fo[3L|ʺvxϸEW{[5P%bfU>P‘*$yV[Y}fI<"\~bzzE(rM96́Gbl>B'N#>}=#d"YFZά@O +n^P:khM-[!"ia&w7_!__ҡ pqomx~OUf 3{̇ϑZx4+%YCypT{+hYnWMtkg$+;qm,Vt{3L#h )% KzjZ nЧ W8oZAC sPF6gWʦ/3e*{s_C0qxێP F}hp3=ڟ=P ZUHSpr:@|:מ WX#;\2ZMϯe+*84s `m T<_=mn¼xj]w%ٽ ɰg oD 片ǭ>hߘţ+$c%,I癆"DZ"<Ù tXuC|ǥǎZ1f>2MmllGM^H"P Sm-,3d3A@f{፽0&{X|ܫͭk4tWy|a~K^A"GHAMm+I9s/LH4H|d/c}5qecR!,p+ck}fl.inRa4,qor߹(7?ڷh=:C8GS2 PԦ2#eL4<3Iǿ^ₔ2XS~g&5d͎H ٓ3fuN5)XXyz8dW"#Lv>p\!6s_u|kW_¨'oit:+þ&'+;}y 9匕R|=Ү%@׬lu?YmRLgc̶ܣ픜V +3vq)F϶ogbr(Zh='}>hya ^9o$~z~[/ "D$4Kݦp^{ŧ YMF_H)aѢyYy *dl^8[[>n[Gn rV޽s,bw: homZ]b˩N=B nx$%)2]4teL,YDr[=$]5lQ0 0cA.dpsV)lqrNtd!S0(G۴9y_e8x_8Zz+FzN~()uQ+rxX$ ֠8J&Q`ga.f|.APk- T/z;hHk̲{L' y}Mx!)Gj-MFݲ[NM(/Zo[Gm{ZHJѥѿ >WP;ZG\eN׃Wz͆P,g)l/ܺ];C_o-9tr Pܽ6oZl |]tS+,YUwO5X#oߗLr9t+a9n ^> Q je  5/x@mַ;g|NXdDwM/BQi2 qLk(P[o-*gg+BƹhA@9ɕKD OKoe[6TM򒵅zKڕ#DXt4t{v~>v#]MqFw,[m62|LA:pU9]h} óHHʈڍAWy=l:&q~ n+'^4sl>B"MCϓߑ{K??/g#+ml:J)ڱsL >ݵس笌1b`wSPJpGkW+a9dt \>?p}vS?ƒ%%:@u}_:KEX˺eʖuOoI\=ʙc͘ 5DY"gpjq@zhAz[mi#LaP@ڜBQBTV}_Ky.!ZJ]{Yn'sX Vb/XdmrT;ۖaV֥MmzrI^34Efn5woLk4u1~vX6}5Cbu.I ~{re0aj+:sN`ߐiZd 6,Li28yxUEiN\u N8Sw4|Zʆ'v:_Y~k}WS̕y_~wWN~'Nv 0]6i}=vũ kWWk8*,9t`p 0LMpX19ap ľ Nk+÷}U,Pk_A}/'"hZBG#jeI(ǜWOڟUs,xƴ,˰:]> ig㣬1IJHB "$**m-+ww{koiKxm-M[w+TqW`Ym  !Bf2<]sg2WW\Og|oŕm@cL#bmoMOD~1rF>c, -:?EwOxGh̦\;Vo|\ἔ3_om.8ВυaaC`A -82i5Wlll lq(6kDAbik~ eQdvI!xafD,~.@Hq6XÔY%/(yU%O.z{%1vȦom#ޥǀJ 'I&u痐q\u[{lly)^ RD=rk1RFp,r8պg%H]eK2Q+edjPIwR:8V7!Nlt^_o )!$ Ⱥ*dtOJWwB7SU*U묙yzrjX _Gkz/iל|)NH_tO ʘ7D9#GpaR'\J`0p y(9ul*_/^P0ʼn dI8g+鞓UB>h e͙@և[+z,Vd[1p3I e8ЋH؇ӂAG;.`)k:lB\9 #-~$jFH%cҞ:&-li[ ¹ډ" Ok'"rm8@U: -&Ŗ^@T7&8K0k2}@s)~E9zud@_<֗h%˭LxN{~ b~I$Y)/\Qcv}!lIH;v=4\&d->6r0}yAA~i|'{ 8a|my47ÝAÃ%RT|m5R?E4~> <쀆 a аbLMkMK͘a(s}›6gVtiŒBqILq^qJ2֮/IE)I&U aVWy@1q)!"s8&+ESU /Gm+2<3,1^)saG\ץ%Uߗ5FXHM[mw/#mz6d~܉tNנuqC^5gU=mw"I%MkPw;1m X4JݨzzNqmA˪rH)Ry,k+@dJ^$ طo4e5%@LZ$gjni;)Ԗ?"t Y~v?G0R췵)ˢ:>ht;O s-u%2Oδf479'39߬l&4^AkP2k5h;3gX,P tY۞O5w?k25gz "J2|d>5K̠S6UN\wڃ i'ym0`X`;ǣz}ktj7?r25kN XN )u\T\dt݇")}_\hOZ Jǻ mb휘C6ޕ& ơ5N&,t^'mTo YV|-nQfp\~=(Z]'"/_,b ;J锑?#/]eB'5a@8 &gS|ﲡjw/=a!NwB_|Jo݋ _$ſX@fę1Wv9}Ebǘ~̑4p,GP7 Ok5gJ% Ƃs%Nݨ쳀(ɂ? q;3WJ.2DwYC RD9{.bZ) 0঵zX xt.LZٱUMro8">}KpcZԽ{|-+,)TNHSƿP4x1YVD[R}A_$-eW_̷ԇ T_Ӷo`-Ph1]REk&YtO〝UC`˗5>xeE}uDrP,-@ZzfVKٲb!IXQ("1m1_68ӁVRtbUrw`%/"K<NHģ u,Y[<# O~yn7rEB.3ߙo i0.p;pȱ sؔ%'`Ɓ6^} 2k7(ISORk^svc}|F`Ga#PrB_ղS1_lr 2}ŝ-7ݽKƇ4>=8E23׶L\'Ďwo W^r+F*bAGr݌y%75u][\/)]JvWm;*I>0b;{#%f\/,C*°Zd8%A`* Z ћLq9NƝkK W/n-`e"VYa+*,TYR*MBR6E7 {`dbc`L P(F!TEs!ij>j?0tp}@\tj~I g/m; &{_Sam*H.JZ`[B\r5ҟdV^_㥚#t}6Bh=ȜȀK{:J{Cq"^ \/zPhiG%OɥN9]T@s}l-5j#<1Xts!\LjPqPU"$ؒH^8%K\}Okp1ySjy!K5z>fDZ0,%'4!r60}6JNrȥoӵc4W#CJ U$3G~PLJw?u̩YC{#뀿I|a1 Yp3L @DzPDZZOBY'zgviS-|r0* UnpT)m .+ẃKwH?-- P[#vH晎B|]*uLí o9v>U!|A3/Oge槡~52EYscFE/(&D_2rvsk6e6U#9f\HʪREx-P|jy*1Ҭ}&.z=Cħ"ҚOVCQ̾p1mrחjCW]JQ4< 쀷W8ےVfQ}AKQh_-, \iN^ K铭yR-D磆3kۊGZ`fqMx>ַP'fږrOhP-rmA "P̔،\yyi=~ e7 E߆GvgϦp:};f~ Qh0 WA ɳH3n@F UKƓDf#P7{ۏ>-5%bG1#&3NB~S(Ju~5~N X fԧLj_h@In|_!tǪ4 f"\\Ĕ7$skG ]ᢊ6.^@"h! ( Sr}׸탦 BGDَ$0TJGr6 CJZ !U T/,SR,t,޳p9 @)AvB^8L_,AXmj;m㣍T_׏,`{U= ;=*JCa pjZG8Cs>{@A= ձ#X8^Pzbrxzq"CWzq@եJpb7o9<:kO Q dσf.)t"2ƍY 1IDQݷkŀEhNhn7؞;OTRgd)ۑ ;Pw3;b+tHȺ]\߉4L A,Njtq)mmȏoNo h\A&Fb_;^Ѱ_)1Ə~'h),BR<6'GCK mQr-B[<+YK|xGɫvSQǗto: \ \(ӴdY56QWUDQ@[)<2}/wlL{˿ vjj?]mIW|?1}*q8}]Du߅^B-i+PJc sy"45q q DI%9͌"J¥{x [/%UްȌ5Mr!xLr;,n&g_e{! wSr!]'J `F|&Tl4meR<(ʮ> SsLE,ϼHXiUĔ>>m /ƆFu {O>l]<:퇎#rRm90&4HӠ\2?R'#͖IU`(EopǞpx FXMH.e~Z%jOrI^Ô;]6XmIbFrfE )/a$TbL98=xՈ>291a6B6~ $o܍J$]=_257V1s9_ }6P'Y3KQܑ]QoC8wĽC2<:V.r;*e7UDI.n >.lcm` )`+ꁧsgXf]Ho@cDno4'ut7s`ɇGJ`&dC~-4Ƭ7w'uo7:8\[g:aH&Pl0s@*~T|m7=g"pp^ mF)={{)%ߢ#_)ڮ;!Jh=Bs!0BY7zڅwbF9`\?Y J /ysȲ9( ^'z,whm5jۮKvb,}|9^#*ێ'Q>Mj c!| {*ݎnH7vZLBqaQ>X$?jH;x]$s^"(d =Fu1Y=Y}GZvUiI׸0 B%航y9(e{D&\12Ḑ/6_{ n:"J&x᝷uNGR^*3,5 k&$%'l%ԽV EH#P{QV mRx ywèw!Qj?l#̰cԝz">J`Ր8"ě?k`VNo;熇V;Q oA}wA keI&Ҧ!cv@_i0ԌbuR ljpP;Z?o%>ؙvx=I8{vt|(= hRn\g+Ø"h 9h!b$7='):cd-ӡJЭET;R~\+礜 J(L~Q p˅<%pȝjFng7M0ol쨓ˀGsf;aJ/!xe; nb\+4_o DvIp:~_C˵"T4ɤluOdԶ/,&w9)Ӝ?ѮacT~(W0 @70lZ i +[nxf_'p1$ V6Lr.io"X9(M1Lat=Maӹ[653x}^Bb;PRT|k0fqœje.ƈx0H1YNJzMwys] ʠ{ Wĩ6/7nzWj&ulw S5@Cg͸>99: WQ{0.oMC/{B^hYOX&Ҽ;d$S{i Uqy_AZ(=2;[ W+n.2roeV79/YYPӬ@㈯Wih?` a\[F)fYiUǛ)N_&E춏(:.;j.6'#+bW;[HOtXDQpuþi'[-)!WZRi)u /mǩUC]")]=}G׉gJ+3WB-rq200,B{4u1TP(]aX{V{;b,vȉ> zx5F # d=p6JJ^/EơT̸^?_|+ vPL[ &Q혭U0I/A׫>8SvbU-smv*2oUq'^\듽q [dG8 qJʴ 6\8&,] ,avP :Nɤo볼C (N6d}R,KIIV Gқ H9De}8/LJR<́qkPK| SH "&*65#WON -(jU HyŲt2x?%Cebc!cO-s13"I2V<ߦ=&~MwէR8wِf.nzO)a e؀6pɗop=d^LF|< U{  t~"%Q1%JGRw$! Upn7lJKVU6-nA/gC\F'K PlbO_&hW(s>cO[f\UQyRpp xg=XS*M}8O0("GYlK֙yQ' LzJ fKLSMvnuOB >!sjLj)$}WIS=X{g{ ?Iq}L.<M X4dB t3^fR͙k~#aSA1͈MUFgP.(fFH ӁQ #P؇xq?}c9cFSJl [!.;,1jE*n~pZEb_})=F<m zPK |mY UEK*>Wu!T)LN-:!=+GeU+(fY UKdqWP9s:Uؾ /f2E^c'-('ҭ" [8 f=q/\ mH@=Aɭ(HU6v;X¦vȘ>JF<#uL 6#oI2՗ز>$4 V^Ȫu!6R^r^.R H"/.n2 ~ rW*mE}4ľ_([]y-U}'q+{. 7)]ܩ2VM9z >߄sQX&Bp ݑO5Jn};! pSIS \H9xJnvwB7!8Ɨ7&Td#7 8b١ߥG _f31ŰgbbXR+ytfl], 'eKď#0mpvWX60sT(*W G <[>A0o.1Ks4?UbU"GT*áU V{\Խ0U PpawUx^^doY=?~Y%*;w\#D}$T)jnxL3Rգ s,or\mgr02q:L֮Ċ";ݧOU BM4mF%7"5m>jNUB/d|D=Dھ'41cr'|N߂jI߀MLk_F܍xUm& ]&xFt]kCggd;չ? [poe-X <EY't< :px_MlpZfV%]QA'Bk<(*rL8/?e\|a۬~/kB#kɮ>0;:}}R>bBKm_u9jBhN$ӞjW͕Ix"LO\:ϴ (; \!4<ವ * apl_SytoOC ZTnsg =Ļ7},vZln0e!Ly ޕ B b49?& L?_̝o9EݢZ)nT pf6lR.1\!xmbdqmL~v\h^nE,C- 5|rOۥ'CJpr$Z- $Tض&%T$K%U"ьyr\"J7ai7ppvf~adak3yhyB,ڒ!azy׋p,T1D,)BX&[RXDQXh6 i@ @,T0aWӴvπʀ N|5C: 53w؀?oP錙AJ|jay 5ߩ˱j@!D'0Ɓ oc !~.BbnӞF /ÅH*[e:v 5^+OT ۛJg v\>_B.t"rMh \`!5U/K&jM+yZ*G l GA9֦/v2s.} 5|m@/"L塲Cծ)Q溭U s87ۤ\e؆Fy )u1"l79У;eP!$irTO;RI)Z*VU%2&ajU46YdʁK!'^ӳ?H{ YO ױ4M`pz *u3r˺\U:s) z%¬}sjک #]ِ~+(7zqR^, TjYX-%g{}}jb#jy>MÄP߃)#nkV druPivY̻ 2E͏/piCz8__,n8-`0|ޕ,{@w pX*8"NBanw[9aI\jj9BCe2=~Iwad<}dԞs@ Swp-.LVT.e5P]&o'ʼn }MоHk2.kH3EnYx^=w|ؾ*V&-@)u5͟](UL5({RrܿaJkk߃e:TVDi)a/ {!xw/\yHd\_ru2бH8ܖ2/kg$MD[ osA=93-$yf]Sx\+m )Ýuws-8pr;^Q\ǻeLYL`t0`9U U&:9ݜaJإ+aw%+Ei[wրW=4˩4BzART@[j`~ݕоIXc}h,s&d8J =,Vrt@|X&FLgLrD~MBxÁ<\{:2)(+=3MʠRUgϥ|2,,Y9ڶH{8]:2_';\'׹o]y|.Ns  F=cWx|LyQQfB .KߞXFk,ԩABwԕK@8^rt!o:)B꤆-Pyx+3IkӠ #hϏϒ {a| D|i?;= }I>Amя4< <-eCcP8fD.ss@rTavOH3S0mT&{mrfкTRꎎrcZ´ҤNob;lA}@)\1I_)YBw4gP "Z ` Si3# ҖZ[x]i=׉׃ Xr6!NC!m0n[/~h&A^i)>6pvZBղO ([S6@L IDATֹ6R ւK=Cn$OB<_l ^IPʫ42sO~Ca&{7brq!>(zkMȷX–B梦 M䢜l0"r=_i}H}p%sR}H?Ci:8׈ Of\މ"cc f4[E\+I(o;aa=5σNv%b Z596<ޗ >W_ 5*"P #|Ngg-DπCOPzV &s4N^fy,g rPwٲ0WLM ? QDaj0 cxNlgtq>cTWgFD3 wVI?Ec9iuw7[`4G)Zӊ:1 C^kK ƀSwsȷ*妁rY_==P`:$ dDc?}d,f󪫔$%C&r4x\cg_HCQ}`-A%A~Rz+j;A}sgo\xyðçH]cGW`e0Ineg]@2Trv1 ҰK a(?3HePMq ! 4 _OSY^A!_._J nC•vxz6pjO ` {@Y._o% UP"< /~)!p8tPߑ<<.:{"n~J@[&L_2ۘsc3-<{|q dqJS@l[8c]cT3TƌT"ixbgO\;O;&bFJP,2$۾_Qk)UG`وf4s>.{aL; Іf$R`7,Yl:k=ǛU ٸT*c0*A&փu;N~BlNA97bJkZDxzo%cE]$% _đaJ5UÑ)~DH[b Vc]Y0# C)Q"jUvUpg'=sC滸ҥ\TRw} LW5I߿9'7$5BVf  :(=|eeH۷ XTԜ?|Y[ί:t@ypv t!-}W\f ґUߞLq`}?SˊH;td aW; ,s;/j^[>/|K^7(3d5Nw>g93l JE`<+ܣ~48&ܬez_sVpz u/vR -Ea.X]qk+JSk`{ӥ%4 B!AoXMQl|Mږr^8FjㅌR_H`T7][x{1ذޗ xsUPo`p8ݒI+1›M}F\_ZtU-3y\f߀$7b~}>>iBC5E*"3[RhB.e ";=oBOkP}W xJ{aZ ߻r&HRp<{c ;tZg| 5VlTï\[f`}2Ɨ%Zs+ԣpr}#g['}?`%Ci1y{/ t?S%ӱ A_"ŌVi6Ÿ`ڳ)iHJއ68>|G,  f&t񑧵cZc[nؚJ]|ьAaB 2(d\/u#OGR.b-گG&_S7 ;TɗtD}ݻ۟/ɠ?l>` ,W+ޞOr(.By.aorZC`cp (@ JiA>#k4vLycо{aV_BK)RnG; EIUF߈\N xNcF 'k$0= '}D—Q1$]#/™JSx\ŇËC꜌:wCxKC1S0aF7b9 Ejj(,,ĸ-s[ʅyǏ P2EƹƔ}t z*K)QE.v@*A0@{N1ZRХ6fk;BVi;aJ )j_lZ88-qߵ)7!k jo7 *eEpA8H!l@vV#ʹ4BF; xF$^*St7} 3>p7*(\JߠPr#jV9\ ,{ $&c\%f&|p5{ǘ@eZ'e >s# "Gb^*26kK0Xwx6jFkӫO2JLriX3s"D^^8?owcY'@8 &OiJRIT>GBO}\H߃LeFef9!TOY,l2Rv=$M-൮:N:)V!4yho'gsm'jML+l}6hYഠ;/tDj9 (DyɋC|3,_)W+CtaY4Af)AdIZy[dHo&Vsro'wB/{j|97yr[avĤ;xC*>Z8* )XI% `| '@MyVW5wdpx#, E8lzREX9[qq!l?ӅLi~f-DNY;oTHOLWSx@ch YNW#>i/^ E'7BA&NOR~.$J7Js@o8kWps7j 7̂Yj 2v6H֕F[1g#d:W箮ii.'mJc~vj1sI >+@{X:3?YST$_?P VBNe~йM>aFB~γ#_ʊ/4 ;-h;weNimo!Q6BB"Ku 2tjlkBt>1~k 6 =5+#8A&6#%.X:ʨn@#(3m/[ 6fز ^wg1Y&n&\33i[G.T @H,-1~]M()\cmޟ%w8up8،;=>g*,?6 @ ḙ^4Fy=:wZkՑuS,zdObħ޼X{ǘ.'>J3bX Xd!wf_^F)B e$7mZ UT$j_]tRbivQFZ#+&v#sL/Gg'*H䤳^$hfPUږ$3>2aQIpڏf!|?:?sn+ tnBSjioS6[[ػP\>w[ev1 UK{jmAt/86BqEH8>B1T{_zl iL͝NHC6 JCs9FTQ%'\E{"z(SrI_-֮ĎK=hnBSiƓV8k>OJ#5NP4>eT@U>\uB(ՆB@i%;M@h \ ɳ(:kß998^h_MQ,_L| dM!ka񞐿s2α iʢ`p,{IWHb#"'#:ɷ÷أ} $ȳF7 @hpkTavu~ ~r~ݒOXcCEG[> 1\(VQ _]5U'1TOkrVp}2iMgimM~`{1`K`d>j38wny#G1tOcMi?Ǽ$޽rpzLBqO;8"g Em@|W!@~9!~^97bjZ`@۔p:-ξgpJޅ.ܥiw} *$Jm4IdN'g'TWLBZķz"RIL\ 4U*Q.ckdYZ*pE tGncHm&>$A=a"No F/w#&/m3ۀp;Z#>5xVKA}T{7[Iu{IO셦&nM~H?"mqae&5~!*`hQgV\ ] n5Ac3;0V>EpF/vpHRϧKy.NDςIxhYjgCV)[ ʸv=b|>H2.M31v (4"(c^hdx Eh PLuAL(!S%|m.Z/%CZJ@SϠV,>˺\(rj8ԊĦr,ZQ)]5XV[M"kL.KMlUwXKgTg) pUg0Hco.W:ئgL1)3H) PVSSf!>iU[58玏"+˪ :ܷ$NBm *1V~贙k자Rw\f@K{ڪ @)pṿ5LE]n,g$U\8F;^z=8WC)hn`1% v+|: E .pP pS(nsu i#= 6~+ ="f B6hVt}݂:.)UHAJe;bqo.|\0p&A l*Sbo5fU&>'9KHyĺr|`|* @S>aM`(>(c9틠s&.M@\K2!M`z7 m,rM@ ˆ=iCGZҒm b5s #&Hx`Bb EiZXë~we^4L7e x77,OV~90sjӯ™(/˸>-+ g5 -+e\,Β5|a+`-1cu M 'oVD2c8A:B:7ld+)?Q |Y0$ji.k!qϗNyR[{.#xqm>b<q;+(B9MM(2b8N2RGP384ςY[«~ ajOZ~k1[PM U'옧JlW D^X3zҩ ЇrȽ -k(2(ǘD`vBXjaiMGHӿ} +FMrzg=9S /?ƭ u_r$=z]'y?:ZNh ?'$NŨ2ȱTة؀ǜAcPd5F"$+q! w} P䛤Ɗ l0"d*1n ;lG'g-{ /Gjymm_xd\OqR9 2/i#Tog# cއ7PV9Ξ,6߈QӟoQ>g7Mz12O$C!fbā2ƉJB4G&(9xWnח$IIgWqP3ȷǴBFNMe?$N  ?Gᰨ2uQۦM-JEJ$Wh6rYLat1?(B;x 5"_fO|5-̓ƒT8Z~Wߞ3OK5-iƼ3Uu^'(B;s,0}M;qBAFiH&Bi^[ީ́d;)˾ 5=6PcCl0f } QGGǁPR@uA2SYYr>pf7֏wpy |`Y$ }hsdXFfP0pNAZJi'"~"ڱӲKG$U'sִ'O~_o8.X yFΗ}j8LysJ7K-kՑjKDWצ]MC q3@e\V_Ihi"~w-qET4n`_ 2*EZUTԣ]u 6]hnɰRwsd+vBoo'd:PNӞg "z[Qdw4s)ڮѼw2Ǘ㖙MΕ>.[g3q4 B.Co*<"Uɖ ҅ѬM>'̣3`M y]㯓 T۬|{)̅_R s4?JVan/&88ɤ_7UmQ<_?vNɲ̃zK6{ 8J0A[I'"0ҿ_` g{i;hl& ~d!g=#1Yd@BZ݁~jI~WL8ԶcJ^6tD*up4ǠW&69Zi`ߠ IDATD˕1y^8=8=||:R4a- /WlcImツc)s X7 '+D]Ȩ0&[)YZ!En(!-p*]([|b-H@K~$ɅL= Ƙ@ fx'(5kGIqY@B>BaFL/YvSeϛ}_ ~4_8a {˶Agຌd lgQELl! {[Uz!ijB  1J Qq\?b)>d4\*P?3{1)]$t@+`H?>HDA촑`{4a^wtś)qf:[rAx^=A=YŖB1LPD ~m|}61DnWe@8m>Gqȶ{;#N2ì T,|$SP%@SLW!mꯅad2t~#ǽw҅0j(-'s1 iEwy`؛L #\=PHL$ J擾ٖ}-1jn!,S%Uñ6eƎtyŬ̀P7xpnCo XZ[ΝJ46/C)8ǰ&mYuߠdu7P|%جzlL\o8t\GKS_0| SRD^pڋM=OHh7D ytas3Alc.9ݳ ?PuO϶rz,xGkMI}~!p@k(puwr% -_+A3\.l͸Jle(c|J% K;@4=*hAT1YI-g>^;DIQn@8&. lmۤ<2 gZ9sKJg WVC3%Ш84d>=i/B @#udzc xcÃC:,&#"qI(}_ O¾d [WoCDDnM"6~cVޚ'Yu>cҐgQIRSrБ I:C?Wf [ˠ8:0xZۆXk8v = lHiWQ`KZ x> V` -$np 8ƀ:ߕ= C@ pXOytیF=SN*s`7Vj'[ಗ;`8]ԣ9f[@Tyuf*gRTCcRˑB r-"퐿N(|Z,T.6X;(! JhEDE[B`$Ջ*ky]{D F9 R#)n̴"r$pY2ֳ@4z{TyxVQGaR~ ^7ᴦvyXiq )?U&@CʔN]Si0D o&21*X:S_޳#6c0n||R3s}.nak!7NA9Us}8eiKrʹ!R_*E鈩xA+iU 's1/Akd.7bziONpoб P+8Vؼ~٪׆*8.(l*"l3Ͷ\54mCY&et(M=U;i-0һIU9: ҝ |_53.y;}>Lݡ=IGJ?g*c*R#"M븹䖒|?a𶥤x.ސ$;'.~M$e9.x <(E ,P$ %oRgJ(۵Af8?E mxy.>Q(~.]cSxH`qzWA=_$/JSHx}oH)kW0OmJK,#_Zi=3Itg\aUϠAe"7.\aGU>wfml>c|)x!~ܯOX-l7Dql,brЬ+ؚcO6 t =ӳ.`h~ ^~VȦUDSn#\iGaܓo.1v6?Kgq$,CO|%%gup_%6ELbb\uJ)^55e yi|Xય'a}1)IH]@NK;XS~sgey%8ZHL6ub%9$S"6 t Xߤ25'3)#1qZO 8ZYG %I9U0ۚe:iKC#$bkI$nR6XmUߟ:_$ $sҨe!H-߅+@ӡdBi?s"&VMчiv ܚ4LԼgؾ.Yuz6gw΀?ܳc68e#mZ>[ĵKOEPR2OGiﱮC.@}bk6T{ Y&ﳩ^1Ao &u˒cmv_6Νr2[G?A־@d3q-N#tmc`-/䒿F@A>8c̥b9v2hCσ?`ygX*I>}C(]d:@2)u7/IL+^M1.P_@VҒ82!`pr[p|po{U‰zHr֤=a[84TE뷊sF-!bLR)hfW }%sVI( LpcM≯NPP PoTǞRbI*c _Z,^HDhIBd`P l3qx6ShkHGLX Hwo Mأ0np>3izô%]t'^ݨoK%2WR”a0_9̈́*eӫp$)mq֠8!}L$nh=;öU4#1Bb5W1晻4tJrp+i5{4HAvv۠nn$\±' :"ݻ9&f01NJz<{)0h,%|Y8z#lc,͞ GB EI(A3A1Wr͍HjNz1NYʈ)u"I ~d95PP ̀k+-3(+b UXA׿ Hζ~fLxXȸ>_XeLUNCOy!+ňpjy1αJjIu8GS?fԗD ]?:?Q# 2@1Gv *jJhxNG 1vXBB  .QA/6z ̒2<[G@Y YT?nx\%(0+e]>7c'`J~NE1Z%zg.m0A1}Os鑂x\pX[/ޗd r-}|Ja,Gv<Xap/I˰w= -V8ӱ}5F2#>E@ "wcFRzH(ȼZ, U'3`oap<#[lをbSYn-:||.xobOٮDc\H"t)j|gH2Ƥi^MpZ 6V G%֧#xg#\w0 4j_0"WY0thBFуqˤ#+"H>݉R$O[#1X5VV|ɤ"igQUOouܴ!1)KeHT gK2s;鋙ZZ)k@ ,"[J< ^r>z"2=&OH:L3' T\mJz~fp"C9_fWR'Oa1kXcXմe|32:8ëULr G:0F6[w'\H"\E cWg_+sL{82ZNÀ&#ވqI)uV s, =18~S/` <Ӷax`B>)F.2D0>YSi<}lxXo,jZ`3e#5 1&!PPӂ0b f{ w RS#*fpt2.y(GYfj>8L˾ ^X&#&7ٟk.Smjkڑp?]h h)c \lF-w5Ѝqp]'y>f  W^uo DE#O?Qbrft(x4"<0A%XV {}Zh椖E?خkx>6C;/'kȦ.u/f(IT{C4KVR5`Fp7mdthǷ74 *W+YЬY':x6OțipwOn(ڗT|$ c<}+5-0Ͷ>}xa%  }3 \2&1Ԫ O`rF.!O'JA=/pR Q.ռ ~c)4|cO".vfφlÔVd= @0}J]ү nOǸqDʉ+Ķ$kv/yX߁ϿEk ŋMG½0>Je4,gp8Q"4Sv(  nZgX*Z.h (QfZEvVbL^KX+,NTP jUhajpxZh/yn8Y37 |( }(eUQsQNr- -or8y ^^{Ba_E-/C}khE: ӛvKz+X 7S)%_{u߹4W620`m8 nHCB}u,ڒNhC5 IHBbRpqcLƶ0` IBo{f}ks{}hߒ6M}"Ɏ)X8E] Ӏi9u[c,.P NhDf] ߌ|/R} | p[Dl5o4ʕc-NOq N' ,rCmԧYQƼ?ߛ<& KHYB2# lT+2Y[ f1e`.6*uVlZIٕEl %V_pr͐zf bw/VݳPix,1h.g<]knސw* {WWOlFR:\ݓZD@m^-L 4 E&l +?MbТF];R7oD VVZi7{OM(.(^قZm o qAYg(W}ɇlW?7~[ 9o&M DB=b 3OB]%Dw=5Aup n-VDqzT;`_ֹ.oBSV#1hȿW&7)Nw<߳oI^g{F䂾w'a܍aJ Eӿ@,bDLIëPV=.0פw(;+獓{BX- MP͠tO.~13˴uGh;mW@{eSӉ Sp~`Ok,;TtvrT^D&ps'&:.}Bys (=}nHPz5K6r9v,;|&|&$* Oz3ۚ m~K[U 2%*8'pN4j/G6yM_gP]Zkenv Ĭ~8SiM]dGzKKp_x\7`p,fuߊ:}ދ`sw9|k=-cBnX #nf[zi/p=[#Mu{M\8XEpoOl)E3۱p[8r[Jb|֧$gд;0^hx'Sn.LT04vd~MwJW%3!tQ繱~gm"_62N?@6)PVI]f}ß#VG2Aա\}_ ϬSg]Sdxm7x )xNҳ (Оե8;! E+ϤJ&:pw=_;ys*N:v4Ʒ#x`J'W0d Y?Ze/WM33OBޯ`N/4X+]E0n= mf`D#+ *ۼ\pƏLb^m9}p]Aoa3Ua5RXːѝ(%Tx ԯ=$eT&&J|ޱNQKDT-W^"3onԟ9uЭ?b9vo9~ I+7 ᒫT7Rp`3yOpm2a?;P 3.p\*(7 ݠqsaB^<[Ι'iP7/ɵȮ~Dms>'N<'AgYOvH'/O/v@KB&zJN¨=|vQc@Lϋ*.xvh%`]%%PyU7rEY i ma1H"sZ/>8z({i"',G`Ey@9$*2N'HJ_yR,+;~"V{$;~&Rd<zԈ5^8\vV0Vp<'gwp 4!jJ;E;ALg纋V\m\*IgZt~qRr.gL+e¥yW+eצڈہE}`l\!(nƙrծ+_{1|8dr) > |({_wj*F|7,Jz --E\n$Yq //DwwU4S 0Kehf>ϔmnYseal^vdFqP2u:sB[p wXx!$u7/IJ< f0d{2?ʨu5ީ]⑬ .HYNn2c2]vHÇp 4rZ9k7:H8 ?mB-G`4<BI&kZ׽'gSEƎW? zJf_oVX0PYr^9C6T,rĒ/Ep~lpe/Lc9ÄAS(F|1# QRNV:6H:~=zb.aƑV&f Mr5BaK-/8wb|3X_p\~T/|E=>YrgJ7(bu"dMWgb6QȖ}Owaj/Q CafUz]T,~Ƙ+où2(X@ 8Sy2~'q]qE p1n`]]FoeuJ:i%/4#x g5]ly >j!s*IC}gwMROOm>2%hX`8Sӱ,xZZ/[ 7ɜx' }4#q.O3$3JByJ93ņ 梂Fm`) $Hj$:dN'{}X3A^‘&h0!dt_p^zFM5"ηwW{iN epj#$ggYy!3f 480SBJ]φH9_*a4e(sf:ڋJ;&Z:np.J6#z N\qH]&QP>0Tv.#PVA]<Q6Ox9% x #xJ쩃77CqJ19b BȄ;eOYJBah5Q>̼BBTgw ^)x,C2FrKZҭSSO|bY%O@RyKYV]/guO( .]G@qh+RdZezmQ.^XJÈ u;_r ~m&ԏ$Wx_I$vܒ7%ȖkТ /UOċPbv.b6X'̾ gD_+A?#RXozJK!р_f97f7o5rRsG0?ɡoDkTMMzeAc/gXwR@ !oX: Jz`JՄ5/Z._n;c9A$Y V?8+HIRBuuš2 uV3WCy 7Eit) QIlYXQ+.l2̉6#vJ4m`6W9t?Xkk%ubyƟP{*ݡK&x183)zYXqO˱m&l3js==hMkj$6{VZc.l.]ZBjԈ[>sX*7 ,ݤfsOᗔ \rMW\#U?K_g =!S'BI9 ˄xb'_)b;{sgU&$q4 =83V2ܤIpPGP' MΠ x,W>>mJ݄mN{\g@7AcHHqI8n&h?BS+[_[7:y43oRXslBM:fC'dku5qЭtGZB\L=gO+re _yԵ[/$)Z2%fBylqm3_-MuJd"ѸpS٤{2e,<.Qÿ㯲'~>ȶvL-ykD;H Op7[֮{K藿9ť mMIU .X/:?.xW| p_[Mx9cLHjT. \9b¼^IM![/[rYВ.O(h u܅S4ߵu/Rr2ͳs wrp̻8̿>Nֳ9 e`Tp)և65K{#RcJqhg5*o8w^z(ψRW7h;YeչJc2_d鞂cUiFψ51b@k< ZA}3:Y٩ߕ_8n$ޙYr_+sqPR8UFKaE2@T:5U+/+C-%D7K5Q}^EkmRP^r"5Ƴ: XJHS-fX[xb־F8eFW\ZL ë_*OTw]߷JOiԥd}M'9ٻ 1 X+/5r.YOxV0`ǪDs*y[k-KB:*X:.SE{u *ڬ9:=ϵ9wlZ,3Wt<95}&D!ړKJ2yZ;8\"ik?.ݽL_`DG~0DzEAc3kk|pv8ZHйzD^nY% F>ua4 D 0!" y)9f]G("2o܊j&~mvpmI}YAF_Kb_H9.fge g&":Ֆ~9ۦ]ŮP|ZLG_R@eխ'#u1jw2q~6]v 84fo Vm%wN;)\֮uiwGAknĔfZsJŮn~}XFLy%&)mK?jU{Q cUz1 x%4`-ڱU++2gD%F݄;^1g&P_y?m$BW1]KmD٘fmd8EؘH"zL~:X.:/)ݹ0GLMr{&J,eWmbu6=گT&Qsn:ivP|$\7PQeo؞ YAj{O)ujk aCg(J=51o'&AyaFRMpT+0&gN E aʾ/\qُ *44Ӕݼz]-h1%x]cn7DȹrlPZ7bGx)0=$tj4ptaZnj dmJg!}_SF̼'㑣!cV,G3ڼ[ij"u{N^"WzHGz;|cDUbW`ؘ7ϕ(:6(E)jF'PILE3]P 8[M8r]=q朗J6D91y2=l"ޑwȻIl̸9cI֤ƦPo;Ş)bK?;W ;yW6cO_(~eCS*ݲs)S~\.ĩ+z', 8ݴ3* *eT"C.sA Ȭ)4?W]I[ŎC3|"DBU6Џr{W/E{lMo;Д\&=UL7c E*յ&(u)k*N:ި.}[Fú/E 3?mD=jIȉS,݆jɃCoR$FjJZw;1H4#D?)GvBzJ*mhij}:>8(֜Knj![NKbiƯ ik:צI91 %NSy{(-a #>\2!Vnc|udgsTr\o4${:*7).puZ[uıq'W{_J_Rz{.uȋF(fWDE@8"^G (bU2]_> t JΐKw#=L$+ fmy:hfJm8z4_љ鼸R,"nZ)z]/au\ڱϜjEuR0[QtX=̅w٩zYֹ+Ntj7)\?Gh?9F;-R-9 _ v =(~Ș>*ӛ)Q@pމJ~=MzK8v+"+.Gc덖 MWiCGf~Ӝ  ܙ͔!/:fGX@vG^+z}I:@þڽ}Ғ^rm.9f4 $>7^iNzT;F ,=F:o"k_DG~>\Z)gDJ -Q#8}ZV-{R09 =nkm.5gBI`Њg;Vdί%sFJ]6$zMjhSRQWpꜣEoŦ#XL2YGq9^" y=uEVՎ[ChT+43o2e[dZ(Zk۞*.W.|B3B=iw&c}n|~mww@א pIDATcۼ &;8H٫:F9:΍1*K8X}po.˦͹][FYyj/fUԌ W }{s}U n>/ƠSi]+BH*rxFaL]ПN Č]̱U@~GVo3`t|A>Q*\//ෳi3ya˷pqZ@3<3[cA@P˷'_~Aʟ_ 2O ,5?&lb9kSsykێ”Y,?'T LACJ[(.%xBwK3{14Չhy-+ 0aH9/s6gf+4>\f0tXdVsU*[&.lcMK3 KI#(+8sKΞr ")+ sBhiDƏ/Û(fdZKR2+#~;TBTK* Pol[av-p__UH\!@5ՠdմdV 22\Q~ǡL7dJo;2a 3WC5d[$6 9C'Iy3wE\wIl ,wI@vf ?-@  ['y"5sU`F:f>އM<yWXδ@]u@\_C^+%@1܅H6vv0忖0B*C`7e@xG+U)M.p*8 lN[ n t`+էll>,%7%2b(tBEfX᭍PC,wCS\7Y]΢FC?MGA9 :?*B@*s?( JĒ XiicO_eƔaL ffyM;^/66IA]. @, NJNgL_}BH_L`zHB|DƬp, 򖱮qߕT()#9-ntII]L~cMXov pk;Kw~]vXޱJh\SdNZ}\AZ pՌ '6 t山 {?mqI\;ٜ +V=e"6XZ6 V%92|pjOISݥ s;afkLRjK'){Fvj0eLZfKur,KD$nWMzбI) n%$uaTf4\zENnĶ5FYK#z)!p-ݢT0KU:EY(Z`˚K )wnsaA9,StyYګMQI}t{tѴtVꮟ*GْW*4 qIENDB`rockdodger-1.1.4/data/shield1.png0000644000175000017500000000056213706632107017114 0ustar krawczykkrawczykPNG  IHDRtXbKGDD`O pHYs  @AtIME/ +;IDATxm@៕[GGBAmr!ZɶLdᵕ]V@zby9,cn_)o/s&MwYG`',n-n6=_`lk0޻Y~I ܒ|5pZx@*W& XHv\G|uT{GuWN}oO)@)e,Y(E)R(E+XE$f`*||2AA {B[{E9T_}sZA8MzULtGϨ(uM 77oܛCqqnJ%?e𥉯j8 =oLhd޼B)َ843ӛ3w7]IjD Ԭg+Tq+W/T_ߘ9M:cXGq |.SE%5=ģNEjUW{/O|+Ss&OϫXX^(ǁ1r{Wp65Vt0z'~}lzn_E43~1ۿ7)Ut*KUhᒬm_g{)\uė^9g0kѡ ],s3vhtMLoR..f7yBųͦ b[=~*,R$* 11҃!ڰ 5Wh}P%NzwYtrs/_~z}krբBe 4S{#InUK<$}bEʗ4 aֳ1aޛ7(ϩÒwr+kҚϷ}mӃ[ FJzTQԓfz;{e+.$P$yeh`:OD|w!Y ?Rmɭ0v.xz<͙01%́Mj7 K o8GJavV!%XܥYo23ڋ;;HvJv?KN0 z>lCʜllo Vo><^U/: <@;H4_W5'ʃ' JoY2tW$^WEi% (h Ǽ,^Ҡ^nwT Q/ )Te7 U6(vs;N~wvbg`ΈDb .5] fz ZEj%<&tz)H3T\uGZQ]KqTP ]J<dv7Q%fc1 ÕWW$[hrup2IEʃ_usʅVPI&kN%-[Jkdꜳ֊pokYvF1NFmU"e䔛qܫU36119Δ|S%Z%ߥ*iM'ys^px[UtCazfU8sS@'D (h?l^+;L8k" L#OLe0[OĜzάB6E|o٢T暉!Jn KHҼ9(x >Tbden ykv]m8irޜ6(ԬQajs涮HlH%_ywx vgɫmב_Ni!ס_tWC\RYj8,rE(/:2(>amXZ4;t>YpŖF;Nd0 3,cgH,;-'"/f8̮`>40|T$Hbqokm9(8m  b EKŎp{?.aݢ*t23T]&׽^nѸ 0B|, KQqʲ嵚QĀ Ǜe6V'Wilt{/2oKCƈ%;-<N6 7iE#,a"$ӥCޡO5>R#*iiZf#lkveq>s`n8迹dݥ!}N;=P<ޮ/FX-vw"r[ʂ#E<0AYrWtIZ^9D5y= q]X &| [9XK]̉ze%ϩNR;HnVP]/k":[Ɍԇuue :{3v('v ?x rspA#b!r< ץsq}FT*,oKml_wPEo.4VP;koׯ{6UK;' l!w'6|f-/lt4>fʆ#p_#=ӅH[ĜTDDzUs_*ߠ2{&KڸRY=wC iv>~I{UV#8Fd>|Fc2L}@|&\6qʫ8d2o3lv{8O >[b1f88HnFϗN?SԵo#.-V^irvulg:Ux.. r̢K~Zp6 Og/+)菥]jo$-_]5Ił-h^2 џMQ~Р] 7/72ۆ\Q ޕcFF?/.ڽˍ[~b|S4iT ;}.Gcqea鎳LO,ETG/IENDB`rockdodger-1.1.4/data/shield0.png0000644000175000017500000000063213706632107017111 0ustar krawczykkrawczykPNG  IHDRtXbKGDD`O pHYs  @AtIME/'IDATx1N@ƅ{ (c គֹA얂en`:"T,ŎJI$#l"YivVK rv\^r rw wϟoZ\:hh-e~]>XGKZs`U_5cas`ah[ 4ƫod[oX<($dBc%Wd0[P@m-𝱳X礈yIxH9 -}]LSpuؕ$Y&ؕ$uJ\ ~M]]IENDB`rockdodger-1.1.4/data/magic.mod0000644000175000017500000044460013706632107016643 0ustar krawczykkrawczykmagic !! magic !! \@P ! t3chn0mania rulez !@ composed 2.4.1992 :@ by str0b0 / stellar 3@ for those of you who[@ want to contact me @ for something, writeQ@to following address:@ niko nyman Q@ kiviahontie 12 @ 00760 hki @ finland p@pi will be veery happy @to see your letter,so @ grab your chair and @sit on your pen.. @ greez go (of course)@ to all > stellar < @ members... @c+2 tommi makila: 'didF@ ya notice d invasion@of sokea erkki? ::) '+2 nucleupp: 'where'sda disk maggy???' + special 2 bukefalos'not so hardcore, butanyway... =) ' +2 vapaa-palo kunta: 'i've learnt it too!'+2 all techno-freaks!sorry dalmak... =)  M.K.\\  \\  S*S* S* S*S*S* S* S*S*S* S* S*S*S* S* S*S*S* S* S*\S*S* S* \S*S*S* S* S*  S*S* S* S*S*S* S* S*S*S* S* S*S*S* S* S*S*S* S* S*S*S* S* S*\S*S* S* \S*S*S* S* S*  S*S* S* S*q9:S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*  q0S*q0S* S* q9:S*q9:S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* q0S*  q0S*S* q0S* q<S*q9:S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*  q0S*q0S* S* q9:S*q9:S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*q0S*S* S* S*S*S* S* S*  @S*}aq9:S*cS* cS* S*`q0S* S* `S* `S*S* S* `S* S*`q0S* S*  `S* S*`S*S* S* S*`q0S* S* `S* `S*S* S* `S* S* q0S* `q0S* S* q9:S*}aq9:S*cS* cS* S*`q0S* S* `S* `S*S* S* `S* S*`q0S* S*  `S* S*`S*S* S* S*`q0S* S* `S* `S*S* S* `S* q0S* q0S* `S* q0S* q<S*.q9:S*.p * p* p*p}q0@*p}* S* | * S*|*  * .*}q0@*}* րS* p}*.pS* * p* .*}q0@*| }* .| S* *|0 S*. *   * |*|}q0@*.}q0* q9:S*  |}*.q9:S*.p * p* p*p}q0@*p}* S* | * S*|*  * .*}q0@*}* րS* p}*.pS* * p* .*}q0@*| }* .0S* .| * S*.* .| * q0*.}q0@*.|}* q0S* .}q<*.q9:S*.p * p* p*p}q0@*p}* S* | * S*|*  * .*}q0@*}* րS* p}*.pS* * p* .*}q0@*| }* .| S* *|0 S*. *   * |*|}q0@*.}q0* q9:S*  |}*.q9:S*.p * p* p*p}q0@*p}* S* | * S*|*  * .*}q0@*}* րS* p}*.pS*  | .  }|}..|  ..| .}.|} .}Zq9:S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `S*``q0*`S* `* c``S*Z`S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `S*``q0*`q0S* `* `q9:S*Zq9:S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `S*``q0*`S* `* c``S*Z`S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `q0S*`q0*`S* `q0* `q<S*Zq9:S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `S*``q0*`S* `* c``S*Z`S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `S*``q0*`q0S* `* `q9:S*Zq9:S*Z`S* Z`* Z`S*Z`q0*Z`S* Z`* Z`S*Z`S*Z`S* P`* `S*``q0*`S* `* c``S*Z`q0q9:Z`q0S* Z`q0* Z`q0S*Z`q0q9:Z`q0S* Z`q0* Z`q0S*Z`q0q9:Z`q0S* P`q0* `q0S*P`q0q9:`q0S* `q0* `q0S*S}q9:*S| * S*Sq0* S | * *`* S *  *@q0* *  * SS}*S * SSS*Sq0*S S S * S *`* S * *@q0* q0* *  q9:SS}q9:*S| * S*Sq0* S | * *`* S *  *@q0* *  * SS}*S * SSS*Sq0*S S S * S *`* S * q0*@q0* * q0*  q<SS}q9:*S| * S*Sq0* S | * *`* S *  *@q0* *  * SS}*S * SSS*Sq0*S S S * S *`* S * *@q0* q0* *  q9:SS}q9:*S| * S*Sq0* S | * *`* S *  *@q0* *  * SS}*S * SSS*Sq0*S S S * S *`* q0S q0* q0*@q0* q<* q0*  q< Sq9:*`* `q9: @`q9:*`q0*` @`* `q0*`q0l@`q9:S* `S* ` @`q0S*` @`S* `l `q9:*`* `q9: @`q9:*`q0*` @`* `q0*`q0l@`S* `q9:S* ` @`q0S*` @`S* `l q9:*`* `q9: @`q9:*`q0*` @`* `q0*`q0l@`q9:S* `S* ` @`q0S*` @`S* `l `q9:*`* `q9: @`q9:*`q0*` @`* `q0*`q0l@`S* `q9:S* ` @`q0S*`q0 @`q0S* `q0l `q9: S Ű ż @q0} } } }Ű @ż} } Ű ż} @}q0 h h S @S S SŰ ż @q0} } Ű ż @} } h hSl@Sq0 q0S lSq9:l@q9: S Ű ż @q0} } } }Ű @ż} } Ű ż} @}q0 h h S @S   S SŰ ż @} } Ű ż @} } h hSl@S S lS q9:** @ ,* q0*, @ * * * * @hS* S, hq0S*S, @hS* S, ** @ ,* q0*, @ * * * * @.S* S, .q0S*q0S, @.S* q9:S, q9:** @ ,* q0*, @ * * * * @hS* S, hq0S*S, @hS* S, ** @ ,* q0*, @ * * * * @@S* S, @q0S*S, @@S* S, q9:** @ ,* q0*, @ * * * * @hS* S, hq0S*S, @hS* S, ** @ ,* q0*, @ * * * * @.S* S, .q0S*q0S, @.S* q9:S, q9:** @ ,* q0*, @ * * * * @hS* S, hq0S*S, @hS* S, ** @ ,* q0*, @ * * q0* q0* @@q0S* q0S, @q0S*q0S, @@q0S* q0S,      q0Pq9:q0\ .q0\.q0\q0Pq9:q0\ .q0\.q0q0\ q0Pq9:q0\ .q0\.q0\q0Pq9:q0\ .q0\.q0q9:q0\ q9:q9:Pq9:\ .q9:\.q9:\q9:Pq9:\ .q9:\.q9:\ q9:Pq9:\ .q9:\.q9:\q9:Pq9:\ .q0q9:\.q0q0\ q0q0q0q9:@L`@@ q0@L,@ @L:,@@ L.q0@ L@@@L`@@ q0@L,@ @L:,@@ L.q0 @   L @q9: @ Lq9:@L@@ q0@L,@ @L:,@@ L.q0@ L@@@L@@ q0@L,@ @L:,@@ L q0 @L, @LP@L`\@@ P@L,\@ P@L:,\@P@ L.\@ PL@P@P@L`\@@ P@L,\@ P@L:,\@P@ L.P @  L @P @ LP@L\@@ P@L,\@ P@L:,\@P@ L.\@ PL@P@P@L\@@ P@L,\@ P@L:,\@P@ L P @L,P @LP@L`\@@ P@L,\@ P@L:,\@P@ L.\@ PL@P@P@L`\@@ P@L,\@ P@L:,\@P@ L.P @  L @P @ LP@L\@@ P@L,\@ P@L:,\@P@ L.\@ PL@P@P@  , :,  ,,,,,,,     EA=952.+)'&&&&&'()+,/1368:<=>???>>=<;9741-*&# 'RSQNMLIHFDCA?=;:86431/.-*)'&%"!  Cb{zwutrqpnmkihgdc`_^[ZWVSQOMLIFEC@?<:7631.-*'%"! ɻ MA??===<;:87764321/.-+*)'&%$"    -;Dlmigdb_\ZWUROMJHEC@=;8631.+)&%"  CHHFDA@=<:87431/-+)'%$!   +)'?ldb``_^\\[ZYWVUSRQNMLJIFEDC@?=;:763!.-.)%3IDCZ}wvtqpmkigdc`^\ZWVSROMLIFECA?=;:74- %"_VYWVSRONMJIFEDA@=<:7632/-+)&%"  *&$""Fc`_^\[ZYWVUSRONMLJHFEDCA@=<:763+!+-%"!  AA@=DINSX]bfjorrrrrrriF .Srrrrrrrrrrrrrrrrrrrrrrrrrrri2.CB>;730+'" ÿ  &+17Wnrqqqqqqqqqqqrrrrrrrrrrrrf[N@1"ƾ  %+059=CJPU[_cgkosssssssssmZE1!  $5I_qqqqqqqqqqqqqrrrrrrrrrrrg]TI?3' "',05:>CINTY_dhlprrrrrrrrrrl[J8) ".=NbqrrqqqqqqqqrrrrrrrrrrrrkbYQG=2'ƿ !%*.38CGLQUZ_djnrrrrrrrrrj_TH=2' (1;FR^lrrrrrrrrrrrrrrrrrrrrrne\TLC9/% ¾ $)/4:>BGKPUZ_cgkoqrrplhc\TLC:2*#!&,27>FP[enrrrrrrrrrrrrrrrrrmg`YRKB:1)  #'-27;?CGMRW\`dhjkkifc_ZTMF?70)# #'+2:BLT]dlrrrrrrrrrrrroid]XQKC;4,$   $(-37;>BFKPUY]_bccb`]ZVRMHA:4.(" $*19AHPV\aehkmoqrpmid`[VPJC<5-&  "'+059=AEIOTX\_aaba_]YVRNIE?:5/*%  #(.4:@FLPUX[^beghgeb^ZVQLGA;4,%  #',15:=AEIMRW[^`aaa`^[XTPLHD@;61,)&$#""""""$&).37;@CGILPSVZ\]]\ZWTQNJE@;4-'  !%).27;?DHKPSX[^abccba`]ZWSOKFB=83/,)(''''''')+.26:=@BDGILORTVWWWURPNKHD?:3-&  "%)-269=@DGKOSWZ]`abba`_]ZWSNJFA<840-+)((''&'(),05982+%  !%).37;>BEIMQTX[]`abaa`^\YVQMID@;730-+))('&&'(*-159BFJNSVY\_abbbba_]ZWSNJFB=840.+*)('&&')+.259CGKOSVY\^_aaa`_]ZWTPLHE@;72/,)(&%$$%&(*-147:=@CFILNOPQQQQPOMJGC>94/)#  !$(+/48ADFIJKLLLLLKJHFB>:61+&   "%(+/37;@DIMQUX[]_abbcba`]ZWTPLIEA<84/,)'%$$$%')+-0358:=@CEGHIJJKKJJHFC@<84/*%   #'*.159=AEJNRVY\^`bccdcb`]ZWTPLIEB=950,*'&%$$$&(*,.0247:;840,(#   #&*.159<@DIMQUX[^`bdeeeeda_[XTPMIEA=951-*(&%%$%&'(*+-0257:<=?@ABBAA@?><962/+'#  !%(,037:>BFJNRVY\_acdefeeda_[XTPLIEA=952.+)'&&&&&'()+,/1368:<=>???>>=<;9741-*&# """#'"" ++++""&#" ++""#"  '*"#322"."'2*"#+*"" /;6;??:7?J?2/?OK?*+?>???>>??*/6" ¢—¢‹ʢ«?Wgnokg^V:?of_R*7orR;?R>+#;WZB3???2?B" ?:??*.‚ߢ¯#??S^RO_j_nf^ZRRF2* '’Ң;* /?:?gbWgZSn~n_g~~Z?VJ2/;>*/?2 +ҢҢ  7;2??ZV??cbgojkjF?ob:?R*/:"  Ҫ¢֢¢¢‚£¯ /* 76/7;??WR?WVSZR_rR_b?r~w~on~fooooZ2?_R??:/;;;>*" үҪʪ’—¯"  +*""#/?N?/;?:+?Z>;_R3?R2?g^RW_kjRVR?g^R_fbgzZ?_Z2?zZWfRWfkrR?_^^fbR[fB?jB?_fJ+?_R*?WVB[J?J*7??2;">"& ⓿ ү⧿ګ҂ү⣿Ҧ+"*/:6" "'?;6."#;>"'?Z2?R?J*/??N: '??>"[Z?2;?_R*/gR"+?[R2+?WJ??gR"/?2?V2/?:;R>+??2;???*'7?2?J+.*/2+"'*+6*2""*""— ";:?: " />?*;62+?"?6?:/?*/?>?WJ??*/WZ?++?bB?j??RRR>?V?2;?JSZJ??^>/?fR*'?_R2+??ZB6.&3?bR:?R>/?:"/*';2"/???" ";*':"" #"  "֯ "Ңƒ £ڦ£ꢗ⪫« ګ 2*'¿7"/6& /*"/>7*';"/:"+2"/."/>"/?* '?>2.+/?B ?"/_R*?B'?J*/?^R???R:/?S[VK_fZV_bJ[kR_Z;?_~R?gR;?oZ&?_Z:3?ZF?[_R2;_b2?:+?V>"'?>;>???:*?2#/2"?2'+#?:/.""⒯҃ ’򢂿⪯Ң’҆҂Ӣ‚҂ƒ‚¦ʢƦү":"2"&&';:;?6."7?2"?gRWbB"'?B?W^B?oj^Z;?ob???SRSozZSgzB?j_R?Wo~ZWgr>?ojW{r*?z6?b7?r_fRO_bob?WZ?_RWz^VR??b?_rZ>;?nZSgb*?fB'?R+;?W^2?ZF??">.3?27?:?"""#.¯§үʢڧªƫꦓʒʪʒ¢֢«¢Ң’Ғ֫җҧҫ¢ҿ **+*>"72>2 "':*/;2"???:+??R>"/???J:?R??V?Wb_rB67?R#?bR:7WR>?r:7SOWB7?f:'?rB?R+?b"?R?[R;?^B;?SZ*7_R;?V>#7WZ>&7????J3?fB?J:;WB#?:?V:?bF?>7;;7?nR+????2?V:'?nB/V:?gB?Z"?B+?Z"Z: /??6;:7?:/?WB /R?V"6+?>?R&..""/?":"2""ң"ҧ⓿֫ҪʫʯƢʇꢯƫ¯Ʈƪ⢗«үҢ⒓֫ʧ£¯ګ⢯'6"¿ 2" #*"7N": /2?>?2??2'?^:';OVR27VR???fB7_bOZ?_nB?~R?gbgnR?_n^gkfcoj_kjbZo~R?rccorbWoZ?_nZW~R?onB?jRSgf^_[g^B;?b_^B2??S_R??f^??oR"/^B'?R/?ZRR?2+7??:/?fB*/?>2/WR";:";R2 '?J"+.'?R*?:+"?> '*#""'"' ҿ§⢯ү»Ғҫ҂֢¯֫ &ү "&".* ?:>/2'*+*#/*+6.+ +?:?*/6&&"#.*+33?>"&+;*#?:?R?b*/>" ?Z2???> ;?WbB/V:/?[R???2/?VJ*/?jR+?>+?R??_R>3?VR2#?^F;:;????>?S^:+?:;>&/?bR>;;?R>6;?67Z:?:"?ZJ?;?R:;;2?>/R2+?Z2"/?2?B"?R*/?:>*+?2'+"?BW2?:2"."'3."?*+?*6""&" ;>?2:"/2?>** /?"2 ?*"+2:;> /" +*+ ""/""¯ ¯һ—үү§§⒯ҧ ¯ү¿&¯";":+*2""?"?">"& 7**7?2"7"?"?"?:72?>?2?Z*?jR?2/??:;;3?jR3:#??_Z?gB'?_b"?bVf2WZ[[^R27_b????ZWR/onB3?jB;VJJ?Z>?WFVR?RF*;Sob2?knV2?Z"[R?3?j"wj"?>?*?^:?B?R?R"'>2/6???>*/?B/?R*??>" ?:'2"32"/";2'"2/2/2/2 &""/*ү"""'""""'"  *72/*/2ү+/*—"&"ҿ  ү    ¯  * ";"+*#*/?";:"?:?2':*2&/"+". "/*&'2""&'+*"/"72+6**"+?R*:?Z2*/;2&/?R:?N?"?B#./?F>>6?V"??S:'?Z>"?R"/fR??:;^2_R2?[R?J*7_R*+?^>;??K;?WR??OJ:/?_fR[R*/[R2?R"'?[R*?b"?B /:';:';:6"/?:*6&#*"+*+/+'*/:&/+/*'* "722/> '+&" /* +""?:*+:"/:/:/"2&"2" &#"+" #"""""" ҿ&""  ">"  +"'" #"+"""'"72+"7N"?*?"'*/2 #7?>/2 /;***"':+++"+.."/7*/:&/;"/*/?2 &#++7?:"6*/>"?2 >2'""+7*"/?2?2/.;*:7*&+"#732"'6&"+>>:"+"?:&/>*/6*"';6*"+*/?2?:7:?J ?:"3??>"?:';* /?"'?:/>"??* :2."+>*7>"/>" />2"?>#&".*++;:&+"6* /*&'"'"""#/* /"#** +"7"; " "."  '""'"     ++" * " "" "   "#"  "    *   '"   #"  " ':"+"+* " 2/* 3"'* " +*"#:""+""'" +*&"#+"?2;*/.""'2" #2*"#+3*/*"+32"+?:;* >";3.."#+#/2/?2#'*#/*#..'+2*'+.+++.*#+2&'72*2.*."/?:"/2+6*/;2*'+;2"+2++."#2"/:"/;.2"+2"&"'*"+."32*/2*""#+&"'?2;>?2+2:"&'."'2"##" '+*"* ""      "        "  " "" "" "" '" +"+" #*"  # " " /"& +"+"+""+*" +." #*'&" #"'" "" +"""""""""" ""#"""""#""""&""""#""""""#&"""*"+"#+&&'+&&'#"""+&.&'*"&+&+2"#3*"&""+2"'3+"++&'*&#+"+++*"&&"#'++"+*""""+."#*&&"'+*+2&"#&"""""*""""'& &" "#""" "#&#" #""" "" "   ""                                    " ""  " #"  """"#*"""#*"#""""&"###+*"&&""'+&"#**+*#""+'#'**&&"'*+++"'2*"'++"+2"#/+"'+.*&+++"'/2*"'/+'&&+*++***+*'++*&&++*&#'*&++&'++*"#+*"&+""'.*"&'#&&&&&""&"&**"""*+#"'&#""#'&""'"""&*"'""#+*"&""#&""'"#"#"""""""""""""""""""                                                  """"""""""#"##""""""""""""""#"#""##"""##""##"""#"""#"#"#""""#"#"#""##"&"""'#"""&&""#"&*"#'*&#'##''+*&#&**&#'**&**&&&&''&##&&&&&#"#&&"#"""#""#""#"""""""""""""#"""""""    '"6'"" *  " '"* * "'"+ '"+""  # #"" +2""+":"+"'" 7*/*#" 6++*?:";OJ*?[RJ2???2"??* .2".ү"'*  "/;3?>">"??;?gb"/[R;*+>;;??_ob_VWjR7;2/7?SWgf_gfZ>+?:'2""#?Z>7?bR?>?R2"#'7?2/?:"ү" 3++6*'2"'" '2+""  "#/*/??2&?R>2??:?>?>+7?:...*#+22"?:;*/2'.&/?:";?>;.3???;3;;23?2/6* ҫҫڦʯ   /*/**"#"':" ."+."6" /*&+" /*&/2/?* >.++'7>:*'/?:&763:*+?>++76.3?:"+?2 /;" 72*" &" —ү⪿ګ"*+*"'32.3?:&;?>????;?ZJ??J;?J?^V;?_bR3?_RSJ;?jB.?SF??;?>3??27?*;;:*+?"""++"+" ."      #";*?2?>"+??27R:+?F????S[R??_^>?_RSV?VR?SRRZR;?VNR?3?^B'?R2+?J:+;?2&+?:."?"'"      " ""#"6" '2*&"?> /+'3./*#*"#6"2"+&++"'*"  "      " &2&'2"?:"#3>:3;23??;;?:?>+?J:3??;?F:?>7??;.7?J2?J2"#??2';+32'2"""&""""    "    "" ##*"/"/*/2'?*7."#'&+.""72/6*"+72*?:/:."/?* ;*'2"'+&" "   * '+.+"#"72 ?263?2 '?62"'?:"';;336:2*7?2'>;;*#7;.&+;*'227*2"#""/2+2""/""#+*'" +"     "" +*"+7*3++/+/2*/>>&?>+/>2/?2+737;;:2+/7>;2"/?2"+:2/2"7:"*&++""#&"*" +""  ""  "'&#* ""*+""+*"/".+*;*2"+""""+&":" /2"7:"2"" '2&2"."*&   ""*#* ""#"#""#""/*32"/.#"+3*&++/."+2+/;2+:+2"76/:*72"+."#&&# " +" # '    "    *"#""+"&"+.&&#/:"7*'3+/*"/762"+6232&'7>2"'62/;*3++2.2*/:&+2;*"/2'"""#"" "  #"     #"&#" &'*+*'"+"#/*/*""#3**/6"+:";*#7:" ';*+&#""+*"""#"""# "# "      " +";"32" ;2"'62"'6*"'+'.".+*"/:" 2*#"'*2"#*""'*+*#" ""&   ""  ""  "  "" """&"."+*+"##+2*7*+*'+/*"/2"#;2"++.*"72"+*+"'2'+"/" #" "       """" & +&""/2'2"#&.&"3* 6"'**&+"#+*"#*""*"*"'"*"""& #" " "     " "&+'"#*"+*'2*7*'2"#+2"/2"#&+2"/*"/* '2+"""#*""" ""*""    """""""""""*"/""#*"#.*#22&72""+33*:*'"72"+;2"':2";*'*"#"#"#" "     "    "*&"#"'&+"#&2&*"'."""'#"*+*"**"""&&&"'"+*#&""#*"/*" /*&+"." ""+**" ""     "   " &"#" ""&"+*#&"#"#"#/" '2&'*"'."2*&"""'&'"#"& "  "    ""  #           " +" #"+3"'*/*'72"/."+*#"+/2*"/62"+;2"+26+"+*#;:" '???"/?N?* #" ֪¯¢¯  *;?+/?>2+++7?:;?WZWZRSZR>;??K??_kbkj^VWZB;?>?F:?[cROWbRRF?62+26"'.72.;>>;6*"/* ګ¯       ++"'37;?>;??VJ??_R?V[_VOW_Z??^R??NR???J??????;??J:+?R>/???????J>6??>2*/;*#*" ¯ʦƫҪ§Ҧ #" ""&*##+./2"+;;;2+;>:2/3;:2+3;2:?:/??27??;??>???????RF???ORF;?SJ?????:???;:>;?>2623:2*+.&""  ƫ«¢ªʫ   """#32223???>???????ZR??_ZJ?WbZJ?W[ZWJS_R?SZ_R??_R???N??????:7?:"/>2"'//&"+."*  ¯Ҫ  &"/2"++/>6;?;??F;?SR??RSRSW_^WWcgbV[gbZZ^f^J?gV?RORR??R;;??7?>7:63266"/""   "+*#+*&'7>2";?2+;?>>;;?>??>6;?;2;?>63;:;:2;2&/>2"#.62"3."#'*++"+""""&       '"#/+"'32/77;?;>>???????K??SJORNSRNWVJ?WRKRJSR??RRF:?RF:7??;:7;:2./;2*"/2"#&" '    ""+*"#+&++*&+/36*#7>63+/;:.+7;2/;;*+;:::23??:37;>63?>2/;;272/22./*'+.&"""   """'"#+**"'/2"#7:2++?>*+??:/??;;;??>:;?>3>?>:;??;37?>2.;:2/+7:*'++.*"'2*"#'*&"""&&     &&""#+2*'32/3;;27?;??:;?J27??>?????;;??>;???:3??::>??:27;;2236++2"'/*"#*""" "   """#'+"'2"#++*##/6."#;6"#/72++.662+/:2+223222222+/./..2*+2..&"+3*"+*"#*""     #"""#+*"/:*"'/72*#7>2"/>2+33;;+3?:23;63:67;2+3;2+.232****/*"++"&"      """"""#++*"+6/3.+;2+3::23;?:+7??:.;?;;;7>;?>67?:/;>2;;23376*+.32'"+++*"#&"""""""        ""+"'*"#+&""#++'**'++..++/:.++/:2//76.363:.+7;62+/62*/32+&+62"/6*.."#""""       &"'+*"/2&'/36:*#;>++/;2//6:2+;6+22/72*/:6.&/.+.*&/.""+*'*""+"""""            " '"&&"#*"""&&*&++**+.2++..22//3./32+/32.++/22/.*/:*'.*""#/**" "      "&"&#""#++&#'+*"+2*/6"+2*"'/..*"'7*"'.+.+&+2+*+.+&++*''++&&*+&"&#'+&/*&""       """"#+&"++"'/*#/.*/2+/./32..373.+363...+32*+.*/+"'+*'&&+"+*""""                  "            #"&""""#""#+"++"#/++.+&+2*+22/22/2662+7;2..7;222773.+/2*""'7>2&+2&#""""+//+"  "#"   "  +>*&" ;*"+2"'"+"#"+??>27?2"'?J"/?>7>?^J3??>"?R* 7R>6;?: ¯'?>"/WZ>*.7"/*/?J"/23"?R>"+2‹گ""ҫ«ˢʿ¿—ʢ‚+/??"/J;?R??S_fjZksf_~Z_B'/?OR2ªʪү 7???J?VVRNWonobJ>3;* ;2+ҢƫƯ'/?J2?WSRKW[_Z[gbgjgojg~grgonofcV?VB>6+?>;?2"" " Ƨƫʫƪ#727;??WRSf^^_ffkzboz~koonj_^^[^RJJ????:'?*+"""  «ëǪ#"'?:;??NRS[_gowsf_b^ZR?J????:*"&" ¯« **&++;>;???KRW_bgoroonbkf_^__ZSWWR??J????????>:236+**+*'"       """"""'/*+.+//;:3;>?>???????KJO?OWSVZ_^[__fjc_kjgfknnnkownonnjnnjfggfb__^[ZSRRRJ???>?>;7..+*&""  « ""#'**++/337;?;;>???????????JJ?KJNKRRROKOONRRONJ?NJ??KJ??K????????K????KNNNNRRRJORVRRRSRSSWSRSWRRWWWVWZVZZWWZZZVZZWVWVVRSRRRSRRRRJ?KJJ????????>??>?;;:;:72//32./32++++'""""""""  º¯ ""'+/./26:;>???????????JORRRRWWVVWZ[_^^^ZZ[_^^^^^^_^^__^_^_^^____ZZZWWVWZWVWWVVVSSSRSVVVSRRRRRRSSRVRRRNRRSRRSVVSWVSRSRSVVWV[Z[WW[WVVVWWW[VWWWVWWWWZ[VVWVVVRWVSSRRSRNJKJK????????????>?>>;;62./..+**&""" ¯ "#*''+++++.+.///32236632::;;;>?>???????????????NK???NNJKRSRNJ?KRRJNNNRSRKONRRRNRRROSRRJKSWWWRSVWVRSW[Z[Z[___^____bfccfbcggfggkkfc_cgjjjkjkjjgkjfgkjfbcggjjffb__^ZZVW[[[WVVRSRRRNSR????????????>>;;;66232.+**#""" ¯¯º« #++++//776;;;?????????NRRRSRWZ_^__ccfbc_bgfgjknooonooooosrrroosrrooooonnookknnkgkjgfbb__cc^^__^^VVVVVVVVVVRRRSSRRRNNOJ??????????????????????????>????>;;;;>?>>;;;;;?????>;;;;>>;;>>:637;;>;;?>;::;66766;73.+.33./+*++*&#&"#"""  «¯ ""#'+++++/../37;;;;>;;;>???????????KNONJJORRNRSRSWZW[WVWSWZZ[Z^ZZVVVWZZVWSRRRRRSWVVRRRNJJKJ????????????????????????>?>?;::;;:6632......//./.+++++*++*++*+*+*#"'&'&&&"&&#"#+++**++*&&++*&'+*+&++++/.++../.222223336622323766766:6772...2.++.+/.+++*#&*'&#&""""" ¯ '" "& " ";2* 2/"?>*+??2+??>+?R>3?RF;?RB;WZ???WjB??_ZS2?WjR;???;WbRV"???[ZR:+??RW_F?>"'W_Z??B??2?bZFWZ;>*;F3?R_^B?:+?N>7?VWZ??J";??J2?nbS_b*>3?>/?fR?b>;ZB7???"/??ZR_VRR>?R27?2+;??Z??RSR???:";"/>"/?????RF?;;:"""*"&??:*+.&*" ""ڢ"  "" ""   """" #"#"/*#."/6"&+232';>"+7:272#;*3./*&/;>":+"+*&&""" #"" +"#"'" '2#"+/72"/?2+7>?:'??27;??;?????O??R??R???WVR?O^ZJ?[[Z_VSgZO[[Z__ZW_b_cob?_ZWZ?_jR?_ZVZR?WV?VB?Z???J?>?>;???;+;>;*#/./2"'+"+"""          ""#"# """#"#*""&*"+"&**"+&&"+"*"""""""""""#          ""#"""""##**''"+*'+&#.++*+6/++32/+/;2+666;2/7;::63?:3;;:;?>:;?;;>>??>6;?;;3??;6;?:367;;27;:2.376*+62+*+2.+#'+++"#+*"""""""#"""""*"""""*"#+&"*&""'&'*#'*+*&++++**+/++32.*+22.+322/2662222673:2362/37227362/32++..++++++++**'+*""#&"#"#"""                 """"""""""""""""""""""""""""""    """#""""####*+*'++++++++++..++/2/2.22323332332333323322322323322333222//+/222/.++.++++.+.+*++++*++*****'&'+&#'&&'##""""#"#""#""""""#""""#""""""""""""""""""""""""""""""""""       """""""'##&"'&&'*&&+++*+**+**&'***+*+**&*****''&'####&""""#"""""""""""""""""""""##"""#&'&'&&+**+++++++++++.+/....2..2..22//332./222////....+++++.+++*+******&'&#"#""#""""""""""                 """"""""#"""#"#""#""&"""##'"#"''''&'&&&''&'&&&&&+&++*&&&&&#"#'&&'&&&"#"""#"""""""""""""""""""""""""""""#""""#""""""""#"##'&''&'''*&+++*+++++++++++++.+++/+.+........2.//2./../////..../222.+.........+++++**+++++**''&&&&##'##"###""""""""""""         """"""#"##"#"""#&&&&&""#"#&&*'''*"''&'&&&&*&&''#'&*&&''#""'&&'#""#&&""#"##"#""""#"""##""""""#"#"""#""""""##""###"""""""""""""""""""""""""""""""""""""""""""""""#""##"""#""##"""#"#""""###""#"#""""""""""""#"""""""""""""   " .""*+2"* " /*& "'"+"/;"?*. /22"?"6 & ::#*"  *""&/*/:"*/+"¯ҿ+2'?:'?>7?:?"?"3?:"/VB/:"?*.“/22?JO_^F?R>+?RF?SR"*""֧*/"WJ?;?fR2+?2?>+" ?*"?:2"/?:3* /2?*+??R2?" '27??*?^J"'?J:;2+;:"2+"72/?:"?SF2#?>"7:'/"';6"2";* /:7"/2&;>"?2+".&"+2"?: 6""&'& "":*  './&"'"" #"/*'72+*'*7* #""" &&/2""+""/?"?" "*"*" "+" &""/;*;>?:"/?" ';*+2"/""+"+" &'2. "'&# " .2 "  ;*'"H 7?";2.*/?"7**'"/*"':"+23*?""':"/*'/?2>:"#&/* ?::*" '"'**  +"." *""/*+***/"* :*;>7*#2"+"*+/;*;3;* /R2?"?>*/>2"'?;:"?2/2/63."+3:;:"'>"3:++2*'3."#6*+2&'??"72"/?* :2";2#+/27* "+""*" /""'.. ""*.7"*2" *##& "" * '""&"  &"3"+"#"'*":" "'""+#"2#+"+" '2 #"*" "*2""* +" /:">":"+*+"'*#"""& 72 +>"+/+2":"2/*'+ 2"+"/""  "*&+2 " " 2+"#& :*"/"+"+"* +& '*+;"" &'& ""&" &" +" &+ /6'2"+:"." #""/23*";*?+/:2":'" /:++"/"'*#++*/*"+?"72"+2&"/2"2"#?2:""+6" /:"+. '>2/* "'2"2#./22"#+"7*/*  #"2"+"/"**" '+*"2*"3"""#*""#"+?*7"*"" #+*.72""+*/&"+"2" +"'"'" *+"+"  " """"""  ++"2+"."/"6"6"/"'/*72* +*+* #7*/:" /2*/27*+"+" 2""  &+*"  ."*"'*'2"/* *"*'"+*:"#+* /:"+"7"+""* /"""""'* &+" +"#&".&#""+&"**&"#'""" +*&+*""#" /"+'2 6""""#""+"'*"""72/*"'*""."*""." """"#"*"++ " #."." "" .""  *+"/"*;*/2 "#*"& """+" ."#"/*'.* /2/?*/*'"'""#"+"+#* ':"';*/" '"+ * '*/26"'6"/2/*""":"&"&+" +* /2 * &"*/6""#"";*3"#/*:"'6"*"" 7". #"""&"" *+"+"+" "  " #"+" """* " * ."'"+"+" /*""" * " #'+* #&& +".**"#""'"/""" ."*"  "  """'"* +"'"*"*'  ** +"/"" +"&".+"#"# '"/*/"&&* * &/"""& """*6"**"+*""2"+" "#""&+&"/"'."6"'*" +2"/*+"""* &  " + " #*." 2"#+.*2" +:"/6"+6" /""#" *" +" * +*" '6"*"#"*"##*#.&/"+"" **"'"'"'."6*""&"'""2""'&"+""& +"""+"6*"7" +3*2 "/2/* '" +"" "&"+" +" '."2" #"+2"2+""" +" '* ."*" " '&"."." * /""'"'"+"/* '"' /2* './"?"?2?2 "?6"/27*#;2:*+";:""..;"".+:"  '?2""./2'#" /;2"';2""??>"?* ?:*#/;*" //?2;:""  #;>"3;:+&""#*  +"3"#?:++'/;"*""*+++/?2?:2"'++*" 2*"  &""+2;>*;>2+;2/:.*&"+2"+"    ""+"."/*'7*3:"'*/2+"/?:?2+'*/2 /*    "* "#* '"/"2"+*+:*'?:"?>"/?:?*/;6*/?*?2/2* &       '"'.";&3*62"&'62"'"+2.*+:*#/2.*/?*."/66*'22*"+"#7*3*+6">"*+*" "    "" ""*   " '*+2 +"/"3*&"+3*;:"'6"+;2+7:*72"+;2"7>"/:"#.'++&/*'+#/*.+*.+"'+#"'*"" :";" #*"*'* &+"+" "  #* " " """  .*  * '& /*#""" **"""* /2 +*'2"&#+"+*&"'."*"'*"""#/*"'3*72"/2"#72 ;2';* /6":" '+"7*'*&""'" '+"&#+2." **"'" "" "   "  * "  " &"""   #""  #" "     " " " """ "   " & '*+.*'"""""""#""'&."&""*"#&#+" *""+"*"#"'."#*&+*#"#+"."':" 2*+&""'*&"+*+*"'.*+."#+"+."#"'"/*"+*+&"+*"/+ *"'""#"+"*"&"&"+" &""" '*" #""""#" +'"'"""""#" ."*" *" " '"   " " ""## "'"   "  ""    ""  #&   " " "#" "  "" """""*+" #""*""" "+" '"."'"""'* " " +" """*" '& &"""*"2"+" '2*#&&""" """"" * *""&"""&*&#" &"#" #"""#"+" '*" &""""&" ""#"*" "#""&" "#"'& """'" """#"""" &'" +* *""""'*+" #""""+""#"" &"" &"#"+*2"+" """"""#"" #&"+" #" "" " '"&" " ""  ""* ""."""& "" #""""#&" '" "" " "  "  "   "'"+""   *&" +"&"" '" " "" #" #"&"#" #"" &  #"" *"  *** #"." " "" "#"#"2&"""#""#""&" +&+""'""#* ""#*'*#"*""&+" *""" &##" ""&""#&"* ""'"""+" +&." &"+" "#"#" &""#" *""""&" ""&"""" '" & " #""& " ""#""#""&"" "#" +" "" # " " " &  &"" '"*" """" """ "&" """"""#"&""#" & " " " ""& """" "" " " """""  "   """" " " "#' #" " " " "&""&" #"""* &"#"'"&"*"*" &"" # """"" """" " """ +,,+,,,,,,,-,++++++++++++++++++++++++++++++++++++++++++++,+++,,++++,,-,,,,+,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,-,,-..,...--....----,--,,,,-,-..--,,,,,,,+-----WYYWYYYXXYXZXWWWWWWWWWWWWWWWWWVWVVVVVWWWWVVVWVVVVVVVVVVVVWVVVXXVWVVXXYWWWWUVSSRU[a]ZWYYXXVVVVVVUTTTSTUUTTTUTTUUUUTUTUUUVVVVVVVWWXXXYZZZXXUPOS[`ba_[ZURRTUVWZ[[[[[ZYXXUPLKRZ\\\[TL<8BQckklkL,,-LkkkkjS609M_]R%Joqpce`YQY_[UZ_h]ED[mmmmmmZ712OjmmmlaM?L_g^WVIQUO\OECO^nmmkU/-.:^nnmnh\VR]kiU/+'-HnroiA0/Okklmg?+,AK=.-6QYijieL,+8JV[gi_SMKJKKPTZkwkfYWY\\URUXgmnjdZSNU]ffgZ@,:Nfmjki^H-4?VhpppmS4#:Vpt<GxZ" (HbgZSWjRHFE`^PCHVZLMTiV1&PnyXJ Og[D5qsf`R\]ZQlwZ#%,L\<@uu{h#-clyX(M}lh}oNEB6.]i1gxk_lvp]mzPdl4DUX\[Y""#JX67\z^5 ,F[ldKFNZc]]edD,+.R[bu|uX09aj[X_g{T2Jhuhba]:!>d{xkb["7l~sb b\>s}bTYyA034koaXp|lFahXLDQ[ns`!acaxf(5C}eS,𤨝Cf9+3% (x;F{c`hXFFUD.1Zu~[D:́5TWT7'pU6'Tu`SMijgvVΩ -ȢDXYC!1R4E%Hj!0XG  Kv!龣ӭ -vzd~N hRN2܍ !$@<◯niTE;U_fbpzX#/`I=NY# '.Ū"}f63D@nZ6 %[fzL&ݡKp@ز.`B޲̣tmrV#ˑ `j: 6ߠFJ`a,B.AQZ\瀀̣"3\\ 6FeUH^vuOM]*ګ^|=4AS;̮/FK!yE!>zh.,YZRǞ@PIJ^lXYH>+n^6P<*4/?EJhU3P}S6 ϔ~gbTPȤ@z0αгSzd"*Jx¿nl6@ ,>bzxlXO]jW5Ά%/Tir_HITWRĎ.J^jM;B<ZR&^/)@TZhCAZ4@>>@.uO(&.Vv>ݐ"ZGIfllYJ 0PP_rVjZK>>:/F>"-4OrzCx[2"ܚ .tfXBR]& ' ۄ NdnqD4ɘ84$f8ﵡ^|>"_bB*-GM=ÿ Jj>jF6\fi:819SnzSapHY>`Lnb 2b^>/F>V?R,NͯD\h~f>#>:?M?rNߔ/0VTR,6QJJ2 '(1J\ENaii1׀E|>4^>8NXA?%Fj{$߭MGƬ6~N[VNVD@.HPA@Þ6tS>р*&:7VZ,QujU_~=2H8N?退*Dn@`[v^6:?@N6Ѐ Ctv~~$#\B8֗DDzR >=0 ᖼ(-lz~*N>!Fni$6L].B>2*@г@znjBյ 6'6&+KӥZ?*ѷ1E59GDF9@B-@04woԬ.t~y:6+Ͽ&2@B^n߾(!zw(A.R >i0>K[X)  +jYɐ>meZJ>*..tn:(4562*4"Nf5`nFWfi^.?x^^tT٣ֶD\thVH>͌jhne'Hnsr>ъڨ.=2~Ϭvz~~~joW߀O~~&+-^~~}G䦠&O]S1ئ6R>$*;2RX6ӧhn_o~g~ŬIeb6DN:4X^^r~n>WF"DV^N**D2B>Tt>._fN>L^޸ٿF/:@R[bN-#1?FV ɤ/, SVT0..:Pڬɿ Zr-?fnuLθ4@2(?>Dv°,>>J`' 2F(몀6BXjjh^P2Bf&θٯNr&&@pL课"Jdq2*B*঎ ?fx~th`;6& ⟀ .Vr\3 *9~\F>^Jθ">KkJV<1ޮ&8FNf~s*&pGFl|dnrUƾ+A?2 2K[v_$ p&$N<ְbO"&Xl,ۮ4tJ.BB@>JV,9X/ V`잒HM? .>@]X="+34:,<*(0B8:>|m3ƀB.."6>>>",IWjH (࿠<INF?3-FXZ**>" ;jIhn٠Bx5" bX6$*翿.8-&Th@ / .h* 4*-J^\2-bBF"Z}~>"2>JH>鱫 Cx 1X~~~wjP,ҁWzx@<3 4|f><;~~{x|I &HhM4Ȩu^NFONNlFonI,3^6>@pd&޲RLR0]J[lZƾ"Zn|~rOԺ񧀀Hy~M83#<^p~\JTXD 'ኀ'lysr|ndvT8$'VZ."rYHxjN 'nrE% 8N^hT (>vqNNXF+]j~}vpX5Եز bx< їbͽXoT*?2纴>xf $AQc[ljG$#/%Ml<*3,$)ߙDrdmrdż=`mibdZQFPvza 0GJLShQNtEб/Uz~F3⩀1LZmpzP3)Nz{)+7@XN>@50$7CVQ! )˃&+8Rfli@:; ,H]~zh9  Bfj6 4^x:IdOT{zxfS# RiPPPG<-  -84 8bW!/&8LmFç ;fr[EBchLH&.#]~n^U;LP4 Ⱦ$5";TV.696$>gT! *1!0Oi` B~Y*&8ME=店)okhnN$VwE.4V|xi?ݼEezfgpothaWOdq:ŵ,MNF5Kf~nd>,;>/)#VhHQ9! #lX-6`zvwtL-Vk{vb[OC]|AѾ0N<$fr{n2 %_\I>*QhgW>;NWLں39CCFX`qlxsx~}I K[_? B0 08>oqM4ɮ7KVZVE46T$#!Mn9 (';5fo06EDPaQ) afeHFV~`2 .E4.\WC8BTVZp234 5WnhQMIIJGRQd^fz}k>.Mgvh/+5-XnbOB)'(3ieB,6G^{yZUhvj^^cQ@*BehOBCBB9(5:/4/<@KA1KV>!0C'=ZhY\lKNhbDEgDNqb*0BaVL; 0QpxbgprR=AahaH849PkfO<.^w[L-9C* (]fU8Dw~vqw~jex{cYYNWYgk>$7P]lgMO0Dened_[xx|si>!@O`ld^C6Rekovb)β +Vuxk*:EgXHNb^^QPK:6bdպ BitljZB<+)%92(%-Yy}6# Ce^5ư6D-H|w[Q1+@JYj{nYC,(*ή8 A^v~u]VJ0':N=% 0EA3+#:\JF7-*?Fgwxy_T<,9NTRE+DN38[jnfSG9,.4FTZVO@75*.9MbZ8ǿ8L@'9nn7 4VZH/'Fknk[Q@0?KlZ(FWjhWK5;VWjefVC0RyR&02"5XpjF2-BPHZ`lwqiwu|}{yj^atyrdJWk|hlorx}vphc^jryz|ZJB,6>+3??*Ҿɼ;'빛&L]`P7 "KprhR@83CM_a^aenvx|xroxvoglt{VKMaoP:&+6?DGC=PYgpohgix~y}}tr|odl}_^XTIG@3&-AWglmVJSeof]K,-:HSbhnkdbcjcR> 䲼#:CLJD5' &HMMLS]^L90%, $,439/! %5HOVTGKNKB90(*52'.LdllntrY8%$ "3-(&-):<6" "9JKH?EQbZapfC %"(:HKE5=?E=?Rejj_J>DGB@2-AIGE>>2.8_mtplshW5/)57=UjfodTWcrvbC80(1+>K>) 2>KP9Ǵ  ꬁ &7HVI3#  0?<9=CFFJeokVOL@PNSSTVZald]Yczt`JC636CmthfkqoHDHJXwoj\G?9HXUTN5!25ʮ -! Ć3                +    %% )&)&# #1.%  35&# &88(!!#58-&.93+   .390 )560  (8;0.>9%  #(0&#(#        %#!  &#          & ! -+)  !- ! ׽  !.!½   &;.Ͼ)3- ( %   (%-11)  (5;-(-( +5+!)%03# &&#&##¸+-(#&(%!!10@=& -EF6 -9=1 %+.% .1(  .5!   !59   &56 #01  .;;1  )R[M (NZC(8[S0 --+HH- 56.+0+  --(! (153%9>. .(.) %  & #          !%                ( %+  ((;81 ;5&% 18) +!  55  19! #0-%     #) -=) 1) % # )(03  13 .&      #(  +)  10 )   ͽ          # # -(# >9 %85(& #-  ++            )-!3+#1#8C(9; +KF!SK%E3  ;S) ES#)ȸ(S[3 8[X) ׾>[[#% 0RS)   (CC% .J8%B;&%61##-#    #  !)& %6;0Ⱦ +;5 ý +6)% 56&=5# 01( !0! 1=. 3E3.8) 18% +HC1 (>E1 5C8! &.    &#&5)%&  !+& +>=& 5B5%!()   #       #                         (      ! !!#! 13)) 10 !1)-%        &      !   !    #          #%  #) %3( 0!)+% &1!;E.=(8K)&8( =S=!B>+P@.5  H@  #B6(# %JB(%%NC %(>9  >9=8 %RB %UH & EEEJ- =E)KR=ER9 >S@ % =]N+ 1VMӸ 1SH.NJ͸CM ڲ >C ݵ @F&綾>M3ž ;P6.NEʶ6[M ǰ 1`g.߳ # %Rb= BZC --+B8%0 19. 8J>  (>B# ;>+88%%.0  +5(( #!(8)  (>#  3+ #-00.% 66&) +;31) 36&18%0!1=)380 %&! ǻ&%&)--0%..!%5(& &+(%   )#     &%%  .+&&#  &+!  61 19)5.  +(&5&.F;KS8 EN) #+3) (5)%>=1 #CE#--- .-% &-+  #.      .5 %H; -B5  +!         # )+51! &0016( (J`S+ Ҹ %J^X9Ӹ )MPHN&5@E3-B) #3) -%  %&  #.# (9+#%     ).   0-# 35# .!%.-% & !! % ## 9>& !+## %8C( #BE3!+   #    (;3 &=K@!(51     (   %# #%1>)(@SB# #3=B5 )358))#.)...3# ˾ &.6+ &%  #( &     #5&  %(.-% --)1F-.EE)  -5- %  %1(1((&   -=5 (-  +6   %  (!!95!-0(  #   !;> (-# +&  &(&%  +9  )@E8 (8;+  &>=.#1.+(.58. (@N@ 5=9!! 0533)! #)=>(#;C8&)(  .BE. (#.3)  -0-!   (. &(  %!! #+) !18 #(%  86! ú &))& )&#0% )86! &(!  %% -  )  (!   #       &   )-(   !   #     %0+          !             #   %# .+   )86&(+!     $         '*  &*   #(#"$ )! "  ! 7H8 +;3) GE,%$ 3$    % '*,- !!$" #-( 74  )(! '(    5(  3= %*%$&$ !     +ȿ,#ؽ%( +6(/ "     (  ;0& +,*3.)" Ȼ?`@(& ) /4#(# 64̿+7, 'I:'    "   /(;2%*& *) >8  Ľ  !'* /0 78&-0İ -54 '6,+*  * /::95$ »5=:133& )396"  $  $= /)"<A[NǽWƾ" í*0Q9Xk< Q~ƀ9X+ F4ܙ@#@~+"j Ep:>q4Ѐ|k=kGNh΀8g1im丬Q$ %!&:"+ܿCoL'ˋ $!N-+ ]OyL21 *e9 n(,T,Q"(ǿ]ꀖ&Wl7@"Fmrd쀞1[$*`Y=ZWۨ,]Gߵ)q05"1=S J Fg>riHĽw(&C(Y5R̛>>+<̴\?'dX3f ]%8`iŏNEFp @Wu(~=~)kրr d)C>@-SNω齡# "       !! !!!!"""""########$$$$$$%%%%% Ω '޸$z. ۀ6       ! !!!! !"""""""#$$$$$$$$%&%$$%%&&&&&%&'((''''''(((''())))))))***)*****&" e< (1ձJU *&       ! !!!!  !!!!!!!"#$%$$$$%%%%%$$$%%&%%&&&&(((((())()))(()))))))***+++***+++++*&#!Ky'1::Ȼ=7  %)׾)#     #BL+HDʶ )#               + ,                      ""1:_E   ) *N˹%:;.2K % \ͱ- '3 ,J -*U[gIA1+>H ;QAc.,B`==1'T^ 6)4S0f;P 8AV8!Y{iqȽ  #耘Bc %e-nmR  K{(E_jÊ-     "F1쀬,G I0           `l/@?w ?@Ȩ?@ࠀ?P/hP$ر/@  ?>7O8иOxP޿+B;0;DM@&0*0+$/?0-7) %3,"(" )7D'     #  #(    "    #            $ #'$ %!(.             ! # #,$%  "&  )7;, /83+ '$  %$  (//$      !&+*'!+' 0$ 060'00  ?D0$'& .3(#;;2')$%    $  #         '/   ''  #'$   #  ,%    #(  !#      $  %   )+   !"  #*      #       '"  (   %,($)'" !$  ' $"   #)&  " !&           ("  "#    %%     $ +)                        ()(     %&$                                         [`_7 rhK0ЀHgrhw|@ࠋPx@Ȕ?wx@=L6?koi`HGOagodD& /Og~}[3 WbH(*??>$и3@@1(,'0HWgu[@గ.OyzT( 'KXgiX@,ɶ6?OTJFL;;7D?6ʼ+?P_hlP:(;WWP0$ *! &3+-, '"-765*$ '-FGCH0(,?FOF47((  #('07<3?B@H0#7T_^S@/" '?WPP@0  (  0*8?K:>333(%!+/?;E8( "(8@@D:><(  )*3171>5&( 3:CQGD2( 05@88'  '&" '(3,.  $(/)0  '(   (&   % /5(# *+*     $/$  +;ED4$+!     '     $  "&() ($$,  -19(   $%-0$ $&,10-" %09("& $#&$('/&)0+'10 &    %#'&   $#0     '(!   "'$      ) ##%  $,&##        '(  +'-  %   %   $(                             $             ##  '$    !#              (                    >J6  U ;$6 * E7  F-5  :$- ! - +&8! 5 % " T$ 5 ? 5  [")?)f2$- 1K'  4B H&& $?"4 -1! %    7.3+ھ*&H5   =8%- & P#) AҜ #9# 13<&< V" 2=Q.4.Q &%ZD6&Ν I@  $NZ25M 'lG+㾍J7 Hr!܍U ^Z* 5? +nA' 쿍,8A[% Ӕ:$)!GG2 %D!(B:0ŝ9@ %8;&ʳ =E -0=!ȯ K12$*: ʝ!I  :" Л6- ,!.Ҽ 7 %$ ;-* !0-׿    " Խ    /, ۱ !# !) . ڷ#)" *        %" '   &$ %, 4, )-,  !1%  #/ " - '    "                 $2 @!Q&*@" N&  3 -0&0N "2  3DQ Q9#ִ 361 &0     ( % (6(        !  */2  %26  '   +8*      =. cb`HA2 Pd0ٶ-)ƷDzȣн '# ?RZ5%R:S %#' .*1 )#0<%/ (6G="Ѭ &$.5$Ȳ Ģ"   O`T<:@D,# ?KP=94#05@TL0  =UG94"ϿG8)?/%$70ǧзû " %#  (E4&/F4* ;X@&3@7) ¹  /C$',;%3# #?*4;-#_:3G/ 쪕 /$ ",73?<0/5:( ) .0(,$2HC2;- Զ7D:(9,򺞯״ո /TJ#  nj'?1<0 OC  /! 'S:4 *0C  ħ*@  Զ242<"  #?RB@A1 /+3L$҇   ױ(9  'WP!;0 DD(  # #/ 7L8*0ͦ: ȷ  /7?50谺,(.211 #78/6?%'!'*,ï ȸ"0?FJESG,') #$ -E>59@0%+&  !"!  ! "&$"$ "!%%$&&#""#            !"&!" / :'(4,#@   #    (;4/2E2 4,304 *8(0; ;??F E( :92#/+"$ +0"'&0   "@;0  ,0'@?GDEC3 ;C(    04 #+'(:00 "       * &  *7*:@ 9  %  " ǯ,5(.OXJ>28,4ԲֿF?:0$"   ǵ;IIIb{pUC<81%,FL@0@H, !е ! 80(!@%֩+Kci`XF<*    3-Խ :( /+ '/$!'/="37 ׺"&>5/>VD4?D к',#UlP "Ф *Ϡۿ-?\0$4ƿ5CEGM6%)0 /J/?WD5?>4(  (  иͻC@#*0# '%586LT4Ġǿ$ ¿˼#OS=?G> 7EI<'?G5     ;I,л$⯿7=B%& !' #'' ++ غ4*+(%50$19)*%  0  #?FK>/^H0 ս :E8GC -   ػ  ԫҺ+/D4!9UR<"-"0P`@IPXB$, @0(:94;1HH45D:0 "0   ȼ'   ѳȧʩ˻ʷ )=I9YH7ZN,&'- #" .&&61;P:# ;-ѻ -6- 4@(!+((.5- ԸǸ %98+4QSK@3" !0044-&!&0(!!%      (44-  %% )0-).2-(-,!%  %-)&% $" "-)!#)()% )!  &'(2, ##.0)!-)&#  '!  )%#!$$  #))!(-'$      %%(-!!( #)  !'  "     ".,$   ! )'  # !     (17.)     !%   '8850(   %!     %2;953,"   !,' #/8, ľ---,4=?EBFI?#ĺ!!('250*%   !0--,& " ĸ ('3B?JXP;::&!Ƚ»   (73*+582)    )  07219<2 ľ )?C?FXUM:%!"  !:8/+(,-$   3,  (668=72$¸ !3&d2#2e,2ee3ee@?e3XeeeSEeS,E HY&eee3LeS%eXe`eL ͚ed %2eeeceeYeeee3XeeeeLY2ecDSXe6 eeU3,Xee3%eLY Xce32e%e2eec ee,X&&e3edFXL e\eS8LL@@] e3ee8 DA"e32@ 4 2 ?L%,3 )ee&)eYe <X2 12`_e@ e@2eeeee)%ǚ缹% < Xe_F%F?Ld3?,? ,2Ȱ% LeeY3 L`@8eY %L,?d@$0?&͚ٴ $%S, ͸!   %3     /#*    %0%$!,9<&"& , # %"2)%   *"2"  ,     $'&%3'    $% !   !),9#$   ' "      ,&    '      $ #    00/)##(&$%(         $$   '+                             "#                                                                                                                                                                                                                      rockdodger-1.1.4/data/speedup.wav0000644000175000017500000004366213706632107017251 0ustar krawczykkrawczykRIFFGWAVEfmt UdataG        $(,048888840,$     $$       ߸۰׬դѠϠϠϨӰ׸ۼ         $(,,(               $((,04400,($                                                   $   ߸۴ٴٴٴټ   $4<D"D"<40000,(    ߼ݼݼݼ $4<D"D"D"@ 84,$ ݴ٬ըӨӨӰ׸  $0@ P(\.d2h4h4h4d2`0X,L&@ 4$ ݬդѠϜ͔ɐLjÄŔɠϬո 08@ D"H$L&P(P(P(L&H$D"@ <8840(  ݼݼ (0<D"H$P(T*X,X,T*P(H$D"<8840(  ݰרӜ͔ɌňÈÐǘˠϨӬհ״ټ 0@ L&\.`0`0X,P(H$@ 4(   ߴ٬ըӨӰ׸ 4D"T*`0h4h4`0X,H$<,$ ߰נϔɐǐǐǘˠϨӴ$<L&T*\.\.X,P(D"<4,(($  ۤјːǔɜ͠ϨӰ׸ۼ,D"T*\.`0`0\.T*H$<40048@ @ 80          $,,(߸۰װ   4H$T*\.T*@ ,     ל͔ɘ˨ (H$`0p8x cBT%24˛Ո %.: ?>N1T^^/&=>MH4F8Sұ1FI;w}WHxܖ 4aK K 8㰾޳!B ): ;z-O-uo1@&!Tܜm, T;!' mopDl AM|g(,XZW V?{}).B  WWADX)milܙ\oA{)576.$- U . #b0'-M#g|nC,B <(&:+0&0!*{!ҭ74gFPOIA"-O Y9`F#iAFLr:㯷ɦκG 76IA 2)\d:IA%0!_vĉܚ#fEaC2{\ `A?: F<-Oұ`ĉ*+<<0%K˛q@ & Slj.BmlU*im-B@hVܜҮJ')!*Ү4o#h2)) 25.\aE#d8-N}cuq>P?!d78K : Յlzf, Sh<*=?: &8#g B|*@Tl~)) ?( j> @C @(j +2$q mW 0#0$BA )*{\l U}lB+h~h o&= U(UC+ R S)mYg}F@B%-Ulh+ S X ( v1:O㯳ܝ:0&-N)<0$5$/]r+82R^ !O U^Ղ3B> iUD/@ X QWY/z }C/B ') V| i Sj@~ SV  *z*y . 1$; 1*|%[@ hDYAk)> (} )( U@V,@@>ih ?jVUl R VՂ &=88$Ջ >M>L!- ܙ?2)5 1' wܙ4b}˜i77.ұrAZ~+4bS_s@#e-O}\F) ;z8!+ˡC=1<:)k[3/o$Sg.?AoX+)}UD* fAA+ Q !CAg*|$=&ҰBm  -O*z|VEC* T U!&<+{Xs: dl& V}+DB+ #c'&7!jl $&3\F=. &1ܘ ' R112 A"Qұ: -RTB1H.\ܙ'h UA+llA%˚7;: $Ո^Mćj1?;t'h^raF)>LE`<$\7qt &:: B>M.R/v-D {)S|h[]1]/k-!+'*WXr[A 5' U'+'n[ܚ P'>}Fܛ.E*x:A!8! RW U/3˞ 1MMV_R8 S1 L-P˛&:!B) -QC~ P[E()SA?i@k T ?o,UWj  XS/l*@(**iX@e.Zp-M`&:-Q]2 1BQ+ Q '!!)?P )VjTY SQDB'XU>Q/;Sh F4g 4c'q 8Զ`$ WU$$;xQ[7F H78 A EcO3:4f2h:?Y>B>p=|VD X T kl:Y='ҰH'^5'G+Cu&Z˛Q H: A"-PG= SұCB-OҲo $ҳF &6FBI(^p 1!X. -)!_C)!Zro&;.RՈG3.;4f: 'L=:E]80p| ..$ 0 BFP*{*zgZү[0#S%/]E>1$m6 ~76;y *ՋՊ| 1C~2AY@768QZF ! .=tkE  Se*|ćM8IIf K 0&ܝ<] 74 W) QSZHE_4<2-M CܝC[˛4e !@8 -Oqү1 {E?..OܘnAi S WW+~ ~Z@' o+Eb0# ˝+8'\ݲ"H IF'HJ? C<^JB>OOY9 -K14a-PҰxܘaK8U[`) CD\4eE^-RF&;S$Շ˜2-R^?'#b?8E_$0Lv-NAE`&:-P\H6Ċ$+"^A-Lc 2 !c ;y#d*[F?$&)!E*y'Wܛ~Zܘ / ) ՅܙD( $]RC+F*we!+< >l0?,qh S.S\m@ .>KFKCHP&8-Qa79G8 XC!?Y U}G-M>L B<2ү?!r+I CM RHE`YF8A.C~Y |\ U1>I+ V&=#gJ[AB< V R&=˟*y UD#i PˡdB A2ҭ@2ć+O˞ܙC S#fXL8fH2ҳ?ү?79^5ʹRF U&9Z<ұB+V?E' 75\-PB\9!˚:Y0%w+!8B-Pa+2c>;u FI: Zܙ+ R ingkoҭ*x1*A =*X ? ; V,Y O 1Ү |@ U SF +$H5ѬqA(>RҮA#C`Pa79 '-R\1Ҳ=o5κ7<@*~+[+M+=-M2)C||+ l -?Մ$'@ 'rnjhX R@XhDA U#fH[i T$ұ+ 75dBa>N>L!)Ұ U'? 8G Bܜ-PҲ RҰӺ+a'+Z<^BҳIdIC8[7:&:*;! - T= U &;?-Sҭܝ-NҰO=!O UGC+?-N`&7A# Rs Q+ OIU Y !onB<qo -N㯽t<Pҳ&=>K C Ca=5ܛ+ܟ? W0ܜ!( A*w#g Rpܛ?A Z &,+!ܖ-OI'үIf(H . R\: -Q) ܜ&m4e A#;w U V>J`&8 V;-PL? *ve*xҳ2y-KT+-Q; %+ү UFұ2e|4eܛ=zұ8a U4c>K˘!' S#eܜF0#$ѩ+ S+ҭ멟-PH TA$ S SUiXܚ2A+94hZD@DV;[R\W TF-OՇ ү&<ܛA+! O fWҵS˜>??mҰ'!ܛ<Ү %ҵeҰ()F+CZ<?ܚWjX0%!7:)Ql)' V( Tz+++GҰ-P +L -O2!+F[|'>l F S=p+Y!-#aASWRG Q.G-OY!&;X++Ҳ$DҮ USG8CҰ 'Dҭs2-R= Tf!-O!|ҰG+!8'ҵ>!2-KUE P-O!X W VP!#e-O8PPS-P+HҴ! JrZ Q>NҰ=!:V&<8~+e?-Rd S~EcQ}F D@GkP_\!0&ү2 ܛ!F 8ұ*zڼ ˝ !)Ҳ-QC E Z N X' R-L-Q1 ү+C5LW+0# TC-NYF$TlBN ! T 2P T-P' Y+!' D-SU R&<+$*z-PX} R&=E!!)Q-OC-M U5 Sҳ< SYW G+2-N SV @+>N-OC T ' T ')VүC@D= ?캠̥cs wՇVWmHscҳ$2&>!!!!-R:-P!P> Sh8 Hܝ$;z+Ұҳ S@ QY:W S SZұY|+ұ!!dz,-N5>J+p+!0"I~ D! U T&+AF]YR=ܛ $b!0$+R-N-PI +?n}{ ܙ >!!˛\'Eұ-OF !8>W=) CY-N8D k\U:#eLX T78D T'ܙY ˠB\ OmU Ҵ QC-O DyXR=ү;-Lҭ Xܝ>$=&;c+I{HWˠ$GW!?75P'22E8 \:c2<ް! T&:YZg=4b!CRBX)LvҰC UY \*wܝ$;@T?ү4c!I$!=:YA>9}p R Y Ұ!D!D>[!aE!&:Y^),@W*ܚܛ Ұ$ҳ!Y;{Xܗ?RAF D'r-OGA ܝ==@l@hˡ%*w{ TS@+Vܘ!H5δCu-Q-OH;uҳ&Ұ+0%>Jҳ>LZ$)= *PCPܛB$>4e+ R) Vp(ұ? TRq!  CG(˞G<FClk+,(ܜkܘW S! .:@> >DՇ[Cܛ'&94e R(WGH' !] T8*z =+ UE) ( o&:&F&#jh@'j ~A+ OD iYVoi, T*AA Q)krV )!2X*Z>- Uog+/A>!l &  X  Wf~ ~EFA&i~*@ RUe !oCҲi#f|ܙ- T(ܙ %  -' RXA;  Uܚ Ro lW.TU  ܗ  ** T } R0='| SAXTU hX#i P;},R Yp1@#gh|Y<$j)klUD T U?jgCh(B% e W4> z!WD)*z TCZC=1Qg #c (Ҳ +2X2, $oܜ})*x~,* l #i)~) TZ<Df R$+!E*[X$Sܝ!D&F@!Z&<@N3&:k|/*+@mkAp< Ahn{ j+~ VV B U)~A~VCl X''| ZB'ܛ<'Y  QjF<   WT ?'>~ { V@ T V-l S@h( ShjXjpT ,U+ V ln SAUhS>m+j,j k>,>.{AV?f ?#doyX$H T jT }, ( lY& UiUV@, D= @W > Al=p)~A @ E<C> > U R U  Q)Yl%+ R lh{  -fD'  @ R"#e*z#dn}*@> W- k j%R|~~ 'm R VC} Q  RX jR=?Aqd{j @o&G ܙS,i-k TV*A*kX~C  RkB Sm>Y,WQ/?lTl@-)VV?jV @Wn Sh1&[ R>AA|h.  ? Agk*/QS.>iPQDE%#gV*j S? @(}iAh>A!=ElNl-|ki=V @ @Ah~h TjB? ~ k}?>nU)n}?o(kY~ , U,gj~Wh V-mW?T>)Z>? )Vj>G D SW C ) V}B   U) &A -~/ l BjD}W ,? (|? m:E=?~, O+o Co+DUA@W+}W S U Dk V| UYj ,@ T T).~-g  T&j ~- V  ,V@i V<D i R@k n V~}[ T Rj(kh MSXU S @A  li-  Q W T S i *.fi jf'i U)% Y'  AnB?)(* U,*i.>Y| E0~CV= V(V[Y W  SpjW}Zki,n@,.Vk--,h  Sl'X =@V ;i  i)  ,&* )()=<B,SRSA=Bk~)*'*( T  R @}  * S;++>A>>,ikl R )jl=  hjk?@??,U~,SB,?@i) QD}UjTk Umh<S~X@i-V @U( UD=B>)WC<k*,+l).lj|}?} R*  l?,jB=?,?h W  iA>ikjk@h-Simk@ki(/okj @V,T ng. l Uk,)hkVVV@+=kj?VS+jT~.X+j*,U)-mSA?*j,=h,+AUli*~+U+@CfEBjA=jk>>k?l@>l?=lA)mk>ilk@<hCjlmi,lmmk)m,}?AmS)W)n,+i;XVlU+?>+|VkW+>,Y/(jA(U+(Z)Y)~Yl)B)-W)-)lkj*T.+kj,,imChhi+,Uj= V=S} l(l ~ W@=Aikk?gifnnkl?>jmiojjkj:(+?i)llm,@iYSAll,kim/,.'oh,,+*Xii'.T-*,W)&'..'.-&(.h++j-),).)iS-,U,*kV*V)mUW+=*WT+,*j-jj,-*kjk+hmikjmii;h)j>,jkjjm?im> m>@;:e>@k?kk@.(?-)-B<>mX)m>kXV+**+,WU,+,X-T/++U-)++UU,-.//m,Vk*j+,i+j*B/;&Dg,ZgB)>>ljhjlliljimjmijllmfA-)-B=<VX??WU--TY(l@mn<B,WT;-Tjj,X*jAi,@kj,kUlR.ijk+jkVA+B(=,,?k.hkn'(li,lhlldiiiilkihigogmlilklil,j?,nj,m)k)-jh.)*k+.)/-)-lj*,*rockdodger-1.1.4/data/exploding_rock.gif0000644000175000017500000007546513706632107020571 0ustar krawczykkrawczykGIF89a%%   <81  J!*  Z; d1 %$Fs<'--')Et_k-13}E,F:54+,~78E('88R0.89d 79v"$a9C).p5GDB[%%q7N&ҵoC(cDVIMONHn13B?>B;_B ODdH3?qNRe~R*fa`DWeHR],90lguny>;FDAB<`/tpNOIh7zZr&szbdg={t>ҁb҆͂~܉ԖݖK~Ӓԡr Ҟ/כۖoWbz!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,"](4hT1ިF丣>dYP?$AK"d/ГYiA[b9a>RP\`b2cR \YXHe per6t.gB]٧_iN&AYz l0dqnZZ[G٩LҹV*j>>I{e:穜뛟9(jԦoڂ{[a!꫓(Jj]{- *ne-BZdl1De¨h&'v&jE.U-lnv>i0;&Ƴ^u?颞L&W0]^r` ^[:4앵F I&SbL_*.|-^ sK @BrQ-#[zYg j q.0wӔON9_shFjmfP;:x=2mƁnW3@_9+WnKYPS ߪB;FEx1A's{Tp6Ic^ X+KVgm$g%#OyU;ꡯJ-R4 ްB(B τBd7 L ]fH (.XQ<@M)Vu[·,*vAւW9],\ e?"y!aT6RxqWwpy+F::1f{0B5#FR񎐌dWl F ?*+S#x%{=ʹ҄tb'u6 bF-ei2m ̄o_1Cd1|V`[N3*9OZ9 -Fw=򞤔>t3ffpw.,$(uFZҤU8ѸԜK*yyAP!VH<ܩS@4,=g8 Ź-?i? UPڪ?g6aЇF=*X S;u<_xSEp\Nrt4(&ֶbP E @ V&1,\/I겇b:Wbb$cx6 ;bNseWj]bPL6ZsvRC)W*#54s kؒv:|~xl <"qM8.t5̊y&ܒɚʧlU݇Jv NmZ63i=Fz]/\8s䋵Jf}0YKӭÝK+h'NL<{'<,Iz߮\9nYk&kULdԴ7mOSou! ~DNNKpưl^8j:Sm=meq0yl+kzLAmlG_" ןiM 锧,o9Jf-LMgNqsC$ 17FŞ~9|k\UυSմ ~ydɳHh{!3mm3UlAG67F68㧔JIw3+!<>y_{^ϷaL'\ |ܚ<yX䏼q|9ntݧHOllMeSGc}}{;VpFWW}3ђ˖.~r$] GUtV|ׁ`heOw7c&pTjBׁ6jVwgBv7|"& hm)X^PyUQf:2hD0s9gzHr7ǁ@ef&~&1*Hdv,OX:v9[gjxQTTt^~^3Hx-׆-ih`vp(^Hd'xpOt9~XؗgX6WurFcy؃ |e8hSeC(rXJ|Ջ搸]ZXhZ[IhhX]7}J·sjH ~qj@Ef6^eZ]p-X9؉r%Tu8h'7UKQ-oo1|~`q])~HW8Qy9<9\W_&`6V"gg348{Fx)Շ(i#g.:ّx|FY6r f2(pfSU؁vPoEpś{7ٓH(W)IYzƖ I4AdmZGi(w^h{>ʍ:ɏ韇HnI-Jq\|guǍ (\Fp(gɥ_9XɏXd8u}9Kgv룥l*TjIs:t]^ فgWxH~?چ|Ӡ[$Wa@ڎyF9܈l&k\XzSU_:a֗&i*wIm7MIZ77hFI f؟9:٭ک楈˺jSW d"ʫDj؎y M}Ja`ysԮIyexVzF'#:ﶤG(Kڟ8(Ǘ7^(٫ijxr.ˎE$7@q2SZگ|)Z)۴NrG7@TKMJI$g1py45wX0۞XcWLt[g(ȀGW0^'`)Hh~xH۷k&ESM;KjdbQh*1chkr'JdQn;ʥۻ{1ٷ[k8Q;vuWPU

Y;Yɶ7F4`WIk~KIӌc\6H"e#0|].q,2.첥EÈxYZ1Y۬bڇrNKmF o8ËxGDHx"g[P]!L[Iu\^9xKebzaG`(e|IPjFs iHlڮ31L™e{J,$罤KӇ^`BIfUaUKV#nA~MnO‰[nCH6O.Ҳtŋp hle^C&$%Rۇ.Xa4K:=,lm`WN HLIj#4h25R9; 3ܨQ<(]]+:D.BWU,74%v'zPԅ_4Tcž*Ǘy\ aj;i)ӟ4wSli'Ok̭it<f\~̧}0Ub𿏝Op5gQũ>Ԇ.Xjb]ȝTδN'/kmH,}S8_6<nbX(FZ!(A#~ƍ%2lE/P,ӦKЦ;^2reF~XB iFg"/,ҋIGz HY׬_Ŏ%[Yiծe[qΥ[]yժul?~ \aĉCAt`6 ĩo .vlxIv~+OfO$EQvNuʁq7zLJViؽѥO^uٵogߊ>80H7TV\y[L?"s j;֐(5M&ni&R2J*+0;STqE[tE~ 1/b )O" :B6`HTJJ$r0MA b$?JFj9sN:NT*G"̻ʤ.Z&KÅ$i"(%SSj"UJ%p&hR6M4ӭ*8$8X20U:TˣVdFgh_T?DN2QfUyW2Jͅ {H°0G#'cQ)ֽ7 Q&yiϣHN(k"$ӓƟYUV=Y|&`Z$_Z$_SY>,R]DVbN+3HjV3dTʈч *E#t׏|0E!%qD0LK0*3pK>-z ) 5.),QF21=NȆkaF2c: Wg.(\j!Px gnm T>CXk'ցJA㢠f7nIYvH D5Jd*{BWr e:A P]N2y!H\3Bf6ڳvʧWLiZG9Dcf~Q(%Dfg&x+t`sYϏsrդYf&bn X}G)^&)$21'dt6pA#䌔o[p>ȍMHˮ+2 h#o& # ^+l%>>^T.KJ-H޳r|t3t 9x55{?%'do^@r\LWʾX:G~B\D*빑j@"7k3|QU]&VÖ·Vx/mӧbPb >c'bSF8Xne!rG (-R7>:r,Xm@;naDKw%G7 }uӨ,\R_RK,Xw(8dQ=#qQB,/AC c88[:0orʛ]Bh2v)86qY7pjA0dةɠHaJ)sq%*4 0 D2 8*b A Ò;Ɋ(VORm r24l{K>s3%&h3 cS/,+Bȏ/?1u)yO"CCC=qAڢ.X ;r!;+0-'Y &" 3 BJKS бG( QŪJ̳$L x|N]ѱ̼1Mb2 [ϴ`Y!'[+HL05U2š)&m/ތo5Ἇ+-ɱq dNǼ |P9auCÀ < @ʑq! `#Gُ  jtX|X ?E?hZ&y$ʼ Qps P)u5@ (N( j'ڐ=xA![=,'I ͫ`E: 2#DS}E)6+E ,B%z>ѽG1bDʏ- Im6ԄB3>ֲ*1ZUUg LVy3NB (: 5>Q*C >ko Ft IME^0t"ePW.3(}VѓV񀈆X1ͨUM(Br%)D {0$>3ZRV{juQN˔t9 X,R5rW.Y (mXUh @! H1@E֏a.*ىC1In7f6ʯpL2-1fYQ;TҔ[ .ԥmZ5e"H- a tT YIE\Fg8!Mۙʉ3q!Lɵ+m˸ZCzĬ5Ȇ ]^ŨV IVs8%LHc,TdC=Ҁ *@&Y Ӻ;ͨHEI67 w1BH.| mpލ Q,%3R OԊe&xL`۶q1ě둯79xYB 8@|DyԶK &J9 nFX 8 R BS2o"6PC| _RpcA )lE}dS]l}2- yGJ;%nH\'PV`3LOÀؓ‰t߽6˵ɛ2|1)L&`%{zɔ.`̉e 6a!Eݯ# .a+R=& %ԏ/RPInοI N=rWٸr <ʇsD;Z` pᢺ-性k%d;Cfj\,t& &Jf(jnk}jL0}_s)k[P >D=dxn<>>L&)N\)H"i[9H屌bQ&;&=\19#Z+3 ֘z2$eET1É|)WFYk't3}ڍ63T#pWIq)SZqꆽ mN°NʉCq+_3 53\CiO3eL z7ayh >%q312&4^討lK&¡,]@"Բ)gT+"Zrݞn3ka#>R0F8t;KTnS؜vnȫ&d1u~x4’d:'Kuo9 c-R!Μ! q۶SKP@MD &ԍٰąS8H6,Gsp<+LNà$nQ𔢫/m"밀9֡%}z >{oy)Dʴ)fZr%fr'/6 .6-(Pv/0B˻v^8Dx5@fC DB}*`\PtMBPP ) ]U"!|PW> ā*hWH% HILDv)QOX&bhQm_H $n)hX.!qRwG'?൓܋ (ZH C@ʤDfO)@lOgKVix;h) 'G%j:yjZQ~.yDy;UgkrbbiwS0u.I ;ֹrR/pQDD~Bw 7N8Bin!.~lQJIaLMi6j{hhawX(zʈ?VtLyLqT# N??#"2"H痉d5A $0)eu ZFo}HN=;|x2$?x1bA Z-4Ҧ A^~84QB Gjq!ĈD̘Ya&7p2SgF(zئK('Mlҩ@. l r Q= @ bǒ-k+L6iŸr1k.޼z/.l0Ċ31dMD!2f`nJO# j&K x0 ̸hG$I.ydK8K?2\ŌvbԨ*|4A(FPW$ڴg׳'0Sb 6ҏ1?tW eFlYf@W)P9ECETKPEvGH)TvQ8h'߅'5DVT\՝] UO/EQD'Q:*w%YtO7Y}8&ey&i5 1h e'U曚ZZ-v  U塑3QP0U,F]PI":\Dݘ@&1C^@PQyaGe$Lil\Iy^TZ%Y&+W\`&{,hJE'n*xٛJkMԧ5Z5C*mu0d3tqaI]q(zᐇLDu'q*'@^%p+eK9ui FTk1h.(cF+C$ZBio%SDm]}rħB&{4ҾHruѽ wP+92gaXJI֍װw1u}_A!Gvs,()ѻZ5+4^6XF$bQJRriĒs] 3~SNIBfMMO,)HRx݀4^Hcq! EK-qQbr$&)J,.OL6R"„1\Xd?5\0#XűHDeu:'I,CJ(%LoJùr IZ/>A%խ^! ʖaCP#3xSiD Z?Q%ra6#-1=^hHK֔Cu|sCef(4O:u6jTjPqW%qk["Ţֵ4p)}5I''*_5Z%uaP4&T(M}(<i$]OAD4vQi+_e YKш[ln3;*@ǎS'ΏYW[g"5' G#,$#|U, E ; هjOT& IR$܋RYmImȸ'ٌB<@DKzJ[bc)J7Nnrˁ|RMfh'5$ɛg"p(lK)STÃ2r42#ҩ%I\'Kd;Rl()u %QMQS/<C40^N/9_, imP% )'T1Xl}kÈPǤBVlSjSCq& Z-봓ȰySXnlRїN[~7-A_}dH5^8l>v\]v,ě!x[,&Xu`م.bR3gXcw Y }P^ > c v֏c(7 v`2δAoZ?.nY" oMޭb>Rp Q pVM,X)ψL16D%dh1d\ '%Eeޯ UP\@gJ9XĐytD ^,OޚZHpa`TY`RFŀ0)]xNϦXZmxՠ,i)ʵk؝q !Q!V,Q)"Aԝ!܅iVJ!Q8r=G#~bDF!aMBE@lT5&OX JuƛpƬ nޤhU2VlyNf2A(|jImZkDЙQJ4ct~Bv)]f.6Z`aĩV-(Pv+ϘU%R@D GQLDLHD`j hJ A i'˽Rl.)m<8-Ͻ@X .C*x }FS[g\ISS6-zl]2AI ܽ$ME?=kq"M"r]ڹF&֎`ǝ H jLMb0-<5? R N`ZR"tE̔**DiZ&bT`e OpNoIEV.Z/8hsMV޹o k]"Vo0B"Tj]GE^zՅV.j/nֵڒ7ݑ v`GxS\h@}dFϢ!+͝[VF}:}@>hpjga` s?E-&Tgn#BE*0%abcT,ٝJ'Y|8D;%45۾ם!hl ĬƬmudNi^9%gQuز$kJF.{{Ň"ntƴ%Fz͜*Nfn^Hfd/gO=hÙNtKCߩF/y؆wP ؽE(|K‘HPL&G_h ֔8F^>Jj$ؽpp<]j$I೙[ocҥ\ŢT&4%N-\;ݑ~%% 7lNTt1IhLCh1f۾}S^Y!tA4 G턗p\V>nXj(q3Sn;P50HCk(ESm$+%;^*Zt`'.nmopD1O9 u B *Ԡ5pED,1 Nj]yD?Se2+Dî$l6XE^8u`@lwDp7xжax!EΎUgfT*7ڲ\čo Dw1Ith)Yoْ4݇ʢ@PF6ԣM+T_=*ml^DRcbvFoh^ l+V_t.{~X!;w9Mկ)!hIQaUĊ"F&2uIɈiTWCDlMwM5OO\aM㺑FNIOPŷ ,=M"@]u12٩rxy s_(]L5`FoaPg?4naRoCPdVL qNpLtN#άS-NJ1syYRDn4rd "}T{J0q谩6Zaʍ<+c%^kgڦ6,C8lE7UQZ,,rOjpI,Da ϩ;uoNg3ь0f8c5qi7wgCdN %EkuGӣų:$y}zXix&G2_rLb% jɣ|UŪ}oEr{wjR טUY [rHuHGoRKkLnpG/Pp?xi3a FBi%a H&yCF~٦.[%E/+HPA4z)|ZiE NTh֠5[hիVcɒZYѶu;6[sֵ{o^{۴]N;UBq!ғ :DF?n(0ך[ӴF,(0K5w`pᰁk`.˝>PC ΊJ%MeIa*QQPBՋ`O5w-+‹ .z%B4Cm?0m.ӎ>.AD3O$6 ,( a'( njG8 bۉ#@p,1 +Io~ܩFjѦFͩDsţ| C6+\J x’7IB@rF}H! ;MP/ Ϊ25P+Rrx 蹃>l }Z" -o4\ b\H Oz sQ7ը,+K,h54c $n@Ѹv٢Dq2ͧVI=I*C*b4`$=֋N?#sY *HDL#b.#.ICȲ/E> ͮbX'4vs ǾH"v#͊TȢq*7hku*+3<:)R}3Ks7,ˈp/b("N5H옾Nui)g7S2׹:a{{*цQj̱trK2SnE󹨌̦ipW^)Dz9Ӕ9\ZH~;„L(;0"`"vVC XoW"> oFjH4HCvytM(q Y+;eCvRC-{"8=ЅCzV)qe,%e\'0R>I!F",^`$)b⯍#}:6 4 )Mp'/úlusSdL=FN`>sO~j&URLy-aR:I%JП 0j? "2R,hy^!N'e&m? 0$(y޸&29byީ&KO~V[zNkz3n JUITcW8-s䪶z k%eԪõ62BRX-Sn\Bݺr+zuvт YZ@PO=y'd0ܫr\63&DfU PYv)$'#0!xװ4lJnس&!X0agK-VLU6bC9QHas.j}QxyL!5bpԫXPx~C-J^6;=m"MF8y'!m2魯#sSUky1$]mya&%LZJcֈ8 r % 8RlK]Ư}tԎ*\D$Gx ZKTIe8)PIڍ _L$$B?(i) 6v˒ҖrZNE NR(5Z*}EY=h8)]&z/t 702~̨F) +CprV5@"(.ȵ,I)ұwGLQM]s}n͛J ~p9^}l?MhR(֏d1bz) 3&^ ?F|>c)r{SDb xơ*+QIhEd3jPruE`tNidx-YRr]Q_657+ZG}j"n{.Z 0xR7*.;cC" g#<}*9 ?irEt{'7V#)[=Lz~@hVC+'ZSDnGx}\jd7,-^\}ƽ'@|FR鏀BO J=/4 E/* M0$8/0Ob62p"MXXo'mDBYM4hkob6p/@o{:p)H( .pP7,4"nfa]m c # ՇU*r&lNBK*֨2O gB$,P$"bʉX ~Enl8CŨl)H >4kM%f"MjLf'ȨV1`X~od) 񢩨bEFb=H;^CP"^N>Dd2?Zc6Eu蒎bclX$".>2pQ)0/rI/֬&4%"+'dL>B[a5bR&] 8fm>nEG2~(ʏLlF_ Ia 2 SQ/X"'RD+R)Z"" zGJ-2t#!+m.,#ZcszͰ҉ h2)- z R3)T:.$_bB ',KE3<τ$I @_и-=CB&$L f|ǛX[՛Fi%Hx4:~kO[Ui(cm4n=Ħ&S_`l{*1['3 -,S/B?/(PVԫƭ:q|"rd?5,bVW5`)2 &v7s4j :PDN h=*]i*Z?ƳUcJ.JwL/Vd u6 R ?VA_,1ȑgST6 KČrs*p.:EbOi b7D7ucdL5PWN#O$KuyXpnhczUkC.L+ob(wu-'ЗU慃;kCغ{7'C<"WSx< Xŋz8i0Omv|wŬ[!'; 46؃mW8)uZE~ 0$iwƴN*gX~t7u-Ot'_\vhCF7)? bh=o8qn qCR]j*?֔M**XrF+ْ#$%\'l$ NY: .5@\GExDDa ND" Cu^-& Y֢Q4aJ!%wljP"DXi1,'cXE䄶SbuJyY&C BZ'fham\4aK:8/$Җ5q-MX !ej 1[YW`yxBD8Puh4yH֨qMhE ŝ^ȂpSHZyzQ+04E$#i(Owz&:.VDY#ڲ+,ӅYjU!@QV 8{5"[Jv#Im80GHTXDDVKbbL*_[Kj4ye6##9زi0&ڡvDgkmyr%/Ĩ=0R,$3+Dnؙ約9zN ƙw&۬y·CCdv.tt]5$SyѪY|CBdB N I;$8>E㶲i*ŤL#Zr͞Rc|2٥nrtKgED "4Ç&?fg({! 1jPD ܯ?;e@BeLeZ+jZܦ%B,]l(r% I1pg\;wx|<4C\ż1oadLJwtjeШ?9ʧB`b,\A}{}2$u6=jѮ XU GPN6BrO+&(y}grQ6R:4KɄU[aRc11./\Rz4~˕x.N;Y1W nRpq<^7bbM'sXu!{YyKn¥eZGI>) }d\ Xþ0Y[o>K[LyNY`7h`:)hƻ~ZՖdCP'߯%bDۆӯ곝{i󡲶[)_If3cSkU^oTW'B7䧘䢟#Z3jSR槭I<>aܮøn7v:C{LY<˟ka0EN&ɞ b0a8|P B+Z1ƍ;z2ȑ$Kla^tB"eDΝ&ey Dm 4ҥL:} `ʔ]thųmlVd˚86EUܹtmsԩ2j˶ LۖX~ 9{_D9xM~'{1.6/f4լ[ ;̾;!ӧs oϴv2G;#]!x>z-m>εۿ?~#`Pm` .]jMtNHa1wOna?ۇ&b %&"R*c>T[$c:(i.6BIsF4Ӂ?dNZWdV^Q?Dieb9?lP`fnVc ?@wgxy&PzJ(|'.Yhx 7Й3h]t}i)BB詮 kJkފkk lKll.l> mNKm^mnm~ nKn枋nn oKoދoo pLpp /p? qOLq_qoq r"Lr&r*r. s2Ls6ߌs:s> tBMtFtJ/tN? uROMuV_uZou^ vbMvfvjvn wrMwvߍwzw~ xNxx/l@!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8<@-DmH'L7PG-TWmXg\w`-dmhlp-tmx|߀.qn'v(8 3PG (ĐCjS.30朣]x裷N9 ,C ;^ @ "d%pz|΂3@.9`vⅣ0^x̓/1p =H!: uԁ(CSDŽ8/K ny+1@ .qo , a (Dapk@ tC40h! I@@ RN&9̡p N8RȂHF)R g8 8 ]pa#`34rToQ $` \4l[W>4WBVv} 2P:pPbԩh6A>;ʅ+l5zU3Ɓ s8 l*SղmlURu Kȭn1‘up[\: d |Є2 jtK]!u]}w3bsF@B`zem@/omv8Ǎ  \^ XL|a ep|[,!XUm|7aÍv3p܈)^&a¬eE,a[-0{lAC.r!%O`p &L!e clfݑ=3GhoNytuv}3Pvq! .c;"p xtgtE 1 TswqYJ7YrSMbNf;ЎMj[ζn{MrNvMzη~NO;'N[ϸ7{ GN( OWr!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻ Nȓ+_μУKNسkνËOӫ_Ͼ˟OϿ(h& 6F(Vhfv ($h(,0(4h8<@)DiH&L6PF)TViXf\v`)dihlp)tix|矀*蠄j衈&袌6裐F*餔Vj饘f馜v駠*ꨤjꩨꪬ꫰*무j뭸뮼+k&6F+Vkfv+k覫+k,l' 7G,Wlgw ,$l(,0,4l8眜sN>==4AMJP t!)=5AWS]SZw$]3`]QdT}vQ`Bkl7CT4$tc A{k7 =@K~jv LzDk~w:䰫8]{=:3B[=yP>{Йdy_4S.4D?xrSE~mBTxD>.EGo{7NBZO{K 8}ܓnִ]G2: j_C8 ~O!4:z ^'Q7BĄ Q@P G7*OwlbI,ґG&ʸ*inT('B 23YE6vpb'91Y΃'#Iw/s :}\՚?k e6U+b1D8y=ѠSdC=iNE#U3f /z*v u$?9TYp\"JЇrp/-PyEyڲa\sg8hIa !T`=! E_Z BT=C ǩ32]תgu(E1'T*Ȑ Ά,`ѭBC(I?ԥzrMae՗z,]!ŗS%lxWOӊ錩ԷDX+[Kd>LfQnOJgÍJȥj]yּ2y"1јHnslAMh^uwF;ѣU{!fZ֩fzYZ7 C s"/jv!,GiϰE'mk(&aS6%^-[2hsĿlGKT8 ӷ2pT+`^"Fd^CpKWf; [UB9V)d LBؕ#0i!|Uݷ,{"^a\쯥c=a$+5+bBzht;-t,]Z\ު;TnyUqz-+@B8DXFxHJL؄NPR8TXVxXZ\؅^`b8dXfxhjl؆npr8tXvxxz|؇~8Xx؈&8Xx؉8!,H*\ȰÇ#JHŋ3jȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϟ@ JѣH*]ʴӧPJJիXjʵׯ`ÊKٳhӪ]˶۷pʝKݻx˷߿ LÈ+^̸ǐ#KL˘3k̹ϠCMӨS^ͺװc˞M۸sͻOCqWTNy;:ws$ ͧ]o_\/{ؓ^ݕ! FXC q`z`Fh 4!m~mra(` QƉ+H#"+^h,\(HޏEHQ"㈴ĔTV9eAg#X6$9nie@.i]"W飘`*Q5&P& *({ǜueBgПi]ޢ Zg{=Z24)vJzis*vJzj}Bgk,&{k:|"&К iD-+ݚW.2d,n+$~>6l '09wh`vpE Fބ [eF~;` ;l(+oMjnƜq> xY0b TK]<8)=ɦ_kqn j sU|AXL3TjM6a}hm6Y>Wd晏6r)zkyV*W0X)ֹ:on~66f§6ؿ7k؃:O#Z涿/]>OX.~^k(pjU=`]N.qAXL`xAbmp7!寊fc:-qX9ln'Ѕ}DFш>ߗC^YErdCA.bŔ tG[ B/͎hhoR+>~fӣ;GY HE1f4yu_\Z}F=y_%gK9.$ ;bSԝb(Je2Sӥ'Fa'ުh_jP$)U2/\ct&43Omps84<;'exe5OUu,%.s'(9Ќ®tb :t}(Bνs'DZ>ʹ~uQ}O:j~:ePe͠RpJF JTSqzӥڔ~>}$TCr-+oZNƔ(S{FruThWMԬPU\Zל19鵦?kGxS-lLKY}*KzUjdDTr2[ב.k9i+SuTLٞV5k{Zt+h*ZwV.o WMn2{׷Uahc 튕{ $cWǦU~͛\2m.~X^Wiv:^ݧwaQem)βVqj,aXͪv+&,HNƌn~!c[V][dŸ'foK'_ݒݣ:657?&bBڅpO'j/"PȻ,.د}fvp9a/KOu~hg䁆w/13X3=,=;ϕE\JґPz.+d՛f@aa-Cmco4%}l~Sj g5]NH<4խ@PtsKV3wFoosOM:C{%w}IpBo5<.ٙ[[f}:%ːcw39pm<1/f}M̔Ew'g5hҟL"/ɔ-LD#I&gRߺ*ѮJZcǮHǬh\#2KZNoKܕ-)݆N /_2M0 3^r|I(.]`]yG:|9s/ҒJUTB0W}>Z⮝+q%?aO~}? G0%} vJ˛@B9DYFyHJLٔNPR9TYVyXZ\ٕ^`b9dYfyhjlٖnpr9tYvyxz|ٗ~9Yy٘9Yyٙ9Yyٚ9Yyٛ9Yyșʹٜ9Yyؙڹٝ9Yy虞깞ٞ9Yyٟ:Zz ڠ:Zzڡ ":$Z&z(*,ڢ.02:4Z6z8:<ڣ>@B:DZFzHJLڤNPR:TZVzXZ\ڥ^`b:dZfzhjlڦnpr:tZvzxz|ڧ~:Zzڨ:Zzک:Zzڪ:Zzګ:ZzȚʺڬ:Zzؚںڭ:Zz蚮꺮ڮ:Zzگ;[{;;rockdodger-1.1.4/data/laser0.png0000644000175000017500000000061513706632107016750 0ustar krawczykkrawczykPNG  IHDRtXbKGDD`O pHYs  @AtIME.*-tIDATx=N@P8@"=sA$Jn:"T Ůo{'5>3 [nC'ߪ-psܖVώ [?@v[ͭ xgܞzg:O(_3 H]թ!i~9lN47PNE B+-6nViMzW|-e\,R1ԃK.85$!O݈ep~UqNdbQNd^4%-m'+_J-ZIENDB`rockdodger-1.1.4/data/drip.wav0000644000175000017500000006021613706632107016534 0ustar krawczykkrawczykRIFF`WAVEfmt DLIST>INFOICMT2Modified from Debian package gnome-media-common.data`o"i_ lj>| %Vt  8| 37%V\JzHp;5 m=<B  (~ :_N%Q=(,g9Z|Xh5 0) 1oO{ A @ f-4z~%K   R>&}"JU'D1J}-!*4s#DX\<s ߘԕAV9a̹x^xk^w\ 1 -'-1 97p1(3I/*'d I@5 9_ m ? ub#{ˠ5iΆkfI= 7Qs#oL'-6u443g,$j 5UP:8,z\ 6 `ؼо@ a-Бgְܛ w  ; r `E%$ ,/R-38!7+4N3-,$F8 M`S8ӈ ]<(4e+ƛjʃPܔ >  D \R'2S&8gO;tAEC@;J3'*` [  svE- Ln-1jڷdbSkkMoB"L.:6E8E+#X -  * .q1ܣ!~öXoXMTAvGٝ4:K. , :D{KfPQPPS J0RB%w9.do5H3k7   R ߱,,ܱ;o~ \ 2" ,G4`:BYIFoDV@9/T$k m5H,@K]_$^bM\Jby~t cA0',11 `2 A5 4 -0 L,cB& ag[ HA fU >*ΜdGȦ˖zSޟj(&N;L)-23.53.+q$'` 'Bg mљ12ʡI!  A c 2 A = ?3   '4 c2^A5T-5'E%7B/ t:  &юoMx& {Bۉ<AS !#!Q,s/q* '+9J)II' & } 0 c = ke ' ~ _d ͺ | )܃ LAB 5nQ"#%el%&+%lUT\ x12b*ހڅ4^Hb  Gݏ ) }   zN&*+z*]*4*w%C|#dL!%O{Ve Φqq-,N\U >c *3b 6;?g&=7"1 + !Y  B / : ف y a )) maH!ʿMOo#1)[4s:?AC@*964kk,0 jvnA}Bն÷ϻSЎ?8l  * ( S6 "@S F J I8 >H B < M/ $gcF]JzָfA߹7!MȿEF;w U)9e6DD@FGGulD?), ՙ Ь y & w /m  v |e)/0:R68Dp62,~$7 B_tRjέ$ǿǶ4˸ ҴFVF}# \0j 9@ D@nDFTD}=5),,3 (  ~o;7Y`G4S0hI'@ >9\'Սƃ ӱkŮݳ5ݼ¼ʹKwcΧg '7D#M&-R@P)KB6Í(&^"›>i}i|ɵ "n5;ؤ8;9Hw] sgJ0Ph;nlCqrHpHfB]9TZ.[WOjJIK6Fҩ4$)!6 )ʽsӡ |S",v3}7Ƙ7+4.+"Ő Jv"O]\߹s9,Nf"P(($-*|9-J,S)sT%?UMY]b-f'gRbX\O=IK`F>k2x%zIXYʏ=}\^EӴzr  N fapʥf. )_%.4 jGx ftmۈұKʞ7#:.j'9.dCH4KTPRzUP!XZx/'_,}D~ H4{JnIKKnYK>IFB=:h|6<0w%$'.F0'->"C7VO?7[h9ć^('70⮝2,^i cY584Aj֓yTz.]#z/3"U/#&/9AGKkN*PQK\RjSR$yR&M"G]A=;g5޷,( $  ڗ݄(̨۸l0vA޴{±nNӯT ԰丷ߔM ]ǐTrG"B"[` t`!L>)0*7_>DH!KNOMxKuIʟFIJAJ-(?H=#J龡KbHs>:A= M[,K!d;JO,*$$x ﷯̤ <Hum]q2W^&s5vo8ǾdAGx]XL:oΨrbwɱܪj2!,& pۿ(6:<{~N8 $E 6m̹2}w1B m^ޱQF=$>O-51\+Tjt ).P!)<4W!*UE4;>m@%ZA.JB3E*HFK2IBz;6I02*B $!= G/'-S+{ ՈMxklMdR ] &W*ʈΈؔ&Rl,/ n$C'-=,26k99 9=g@`A?;163v1Q,$'! 3I&|~"RV'D1a}-*ۻo#CDCZwHˠDҬԪU![*s{V w*(6i>YDJXQ3U,'X -AZ1[9Z7W1(S&3L/F*='4,"?4:b 3;Cπ})*j.K4g+dޒ㢟ȟ1' 8R#G'-r݅6x44$3c,$A)W3P=5GOQ5fXw] bebedЕc@`c̢ZRJ B7h+w:|6pD SELצ$ ,/E+38 7)4K3-(.$6EH4Lxw3箻oǤ4֕ ]Ş(“d*~l.*P6Uq?FMRWA\YD^';_2^"8ZO;UVvA}RELCEC@F: ;J13j'-*_ !u-q؇'Im-&0Y׷AdǏmnL꺱tB"ʬ.6 9 2*^"3րKOk|a"/א:,ҤAvH˵LoUK|GŲB ڜ) :>췝 дRIt 0"y# [$ #""/A91@  F6 KJG) UC>4 8+X -2.ΠzqVqP±yYzxJJAMIi0 ,:pD3yKBPQTP+ JSRBRy9y.`3:=Okּ︹U߱JĎ/Ϝܒ z[!0"% ,(4+:(.BH/XIS/F0 D!2@19-/c(U$#pp BM[ 5V׃?lI ۡ%ͅHӋK8\aֺ{s Թ0'Ģ,~ 1Ѣ1`2@B5 430tO, >&o~ b&f/d8@MVEj+IL@DPR+oQhO7KbF@yX:3+!,Q9Ke(-2d3q53.+M'i\ $*z³o޽ʧn/577̎z Jώ]!+}4_d;0pAAE H?JKJ'qHb2E@5>B-='s6(7./& > ;movۭ ָ Yq˚3);~ܙ@O"6س4S!!HR,/q*' +YM)bO"+ *2`!g? Ԁb# n )^ N(D X B#6#}%m%(&q+ %IV" W  - H ٸrrX;:"ݗ.}L<Ԯ;G0O Վ&+~+߷,{)~J)_ڔHݳ $-6@ JTPSwUK&@U*U+S*P*L5*E%;/'w$SS,R8WY,`յi͟uώх!ی 夸ÿPWt ўbL *3)6@; ?[)=7 1 '+n,!-j.B..3/=.4,'wt"" nIkKM#p2u)\4r:?A C @974l,o3b O bnxnjtӶʷӻЩ+4: '(@O6@F.یJ2I4>HBDćƼ9!z ӹ J9+ S'e42:7??ׂ?A=ֽ7n/#e*q W+IՕ+5\l>E|ƘJN{ЀN ےJE< b3 (%,Y2O6 4U0`*S", em%ӑJL̘4Ҫ?\w!4)Y% H.q+5C4;8.A:?E&9ED5gC,? <#6(.&{ 5F׿m1@ĽFC>0t GP:(=7CIJLKGd>0'N d_՘4ٱ^oȮYܳڼP5{ f't7'D.M3+R8Bt=6;)&v8`3.';:fNeŵukFSw oO0;!C}nH9HmB9.e|I(Ű5-csӥދ^ CDR"L, t3~7_7),4#4.;"BHMKI INH[^E&?D8 /|%Qu,ak"M$ȱ*y-_,)%C[*@'6Q$2;`2vyD@~ zX( j* >B ZlCykp $Q!i$m'c( &(2%!1(8 l ECwek5}La+K>ɜns3IMSݡwBQ!k{/0) #t wݬV_  Ɨ.$ğ'<#g } U92;LiY6^kY;bL8lc~s%f.զ0*-XA"8:UQˣ̪K|,6&Q,J&%),TO, '4+(:O.]?*hC~8Uu"2p 54x@:zG$\kJu.$?>(&;较ap '$="[ $dTLO!-$&w% ˤ լHm8qW&'xCpv;VeG]X:)r `s3! ,$&lq jl̎~e ~8m&E`=Q&](ș|w63>]K8$ E 2r5zl B   j \ Nvj(O@86Y62*kfqd)i.)5KVdVOaP#a,J". 34*$,2h5t{3 .t&A d?t <R!m __^w4gN@ &UaCz7  { l>O T3eܬs^XJ| JH. P#D%'x&a#-z wQ2p!!0sPDͽ:ήЭU'9 6;ym^ $NY$u*,*% vVw n&E)'" A 0D3Af3SRwQ=f|xR I{%*..,0(! %$ O, beUzN3~\zb;:& tEe##!D>` oT[W9E}Q- p%Nr'jf g  .   y \u  ~ 4!!1So f{',n}; p B  /ls(> E ?=!^j}O=+hi3 yB d.# , Wbr ;b .*y[cx$vd/H&}"R'KB1~-*t#cDmG $uԴ ѡν\ḏyվJv hV[V.+' - 1 9K71y(3I/F*O' ,@ 06<D|%ju˱6hmgZz.Ȩ '4 Mc#H'- 6Sq44#3&f,'$% 4NT 7} _FAd̝xE&W.pu358a4m- #Ebt$m ,/423;8b%7dz*4L3-1$H!zN5ݾ)ӑ/2 E0Zx*$Œ"b)" kg_M܏ X f@['~25#8 O;'wA.E1C1@-";7&30**  Y!sӨr+KmP.3ݷ5dnѥ(/H1/W(rC".6/E!:_+A1wH2L.TK(vG BY췠 δ ͟ wtz E "F/V9*@mFK J GUC>#8&+'Y a$,`3 /D}WVp8L:!UQyVKUq|G+ ,y:DHO &+N,)G G)0 h*#' 4g)W9v\̋g  ޖ{{}! w'+,v.30N,%#>1 l , Wkj; Gӛ4_mZG K zP&3*W+**5*%%7Q*+vSI X [ ۴d\pϑѕ O)U4 ]* 3. 65;?)=7"1C + !  Cw1?0 xS %>nFHI[LN!|/Q) [4 q:?.A9C@L9r64o,3m H_oʸ–\ նŷ2лw*8} J (M62@RFYJI ?HBX ɗ ӵ J3 : / AQ'42):C?|?C={7Rp/}#:&pn b  q \CƱzІA ~ X%,X2r640c*U" 5*\{ӘJ̣5ϼ]~G{* T s+D48:'9VF5 , F !G'}ڥE:9ڿZ @Ģ͒F٤  a 9( >7 C3 MJ-LKGa>0Z# b/֝ƣ ױkĮٳ/ټʾ Ljz]'7^DN M .R?P9K/B6m'&\iK>i `fĵRh" y M0;rCYlHݪH4Bر9٧.%fJ;Ҩp'ŋ2Œ,sGi% ) S"^,xt3377)4-"? NPCYߺi o s*la$|*-,Z)A%*a(V"<_Zzu7{F.8X <XAzq O gnWbo+VQ%6 Eu*a hMıR=olo1Q M20zP!Sw/c."'q7i=qv%.0)-@"k9hV#O=ٟ[h2,S^('n502,h aW2dQ>ŀSWx[#/32X/#C|Kh KtkR$A&",ZX;Ue)!T ĸXu^&!py~nN #VNY \M=H""X"V>b4_P%GO o!Y D }  | v 2 Ĉ~ӟc,z64|(!Kf˓PRwH8MUT^;J1N 0lNr 2LUK0 ]~&gش~H :)jV_>Tj 9kb$FY/0\ &L(E͙҂(+7I.Z?fC3}8kx|emA5z@:G$[fxEJ[. ? > (  9_^So =n[!dIOZ,$ ̤ HmbqW[!&Nuq>eeG]X`:_rQ+aNrdH!,&6t;  ẹ|a 8@'EW`=O&Z[ʭ"]z/60>eM8$H W׃6oV34e{C Wm_P %-Ab5a(cq).e")[M5 WffUĄˤ!7+Z.38*aw{> Ta? Q= ~~xlMd+ (&iTfO^"n#Re  /E`P)wYMU= UFL(Eu4-DNq!!1>PDA;B; cS8 uj'K$ZbKA+ c]#O/}M=Fqxr0CVG?XM g H:3aQ5 I F    V8lR@~TG x   =r X 6 n p {>d"G]  n   [2Rv{W ^ *?5Pb   Q  4 3c# J 2!g1Ww : !g rockdodger-1.1.4/data/front_1.mod0000644000175000017500000006035613706632107017135 0ustar krawczykkrawczykfront 1hardbdrum@hardsnare@ @g)F242bass3@ST-01:korgfilter@ M.K._@P0P0 @P@P0 P0@P@:P0: P0@P@ P0@: :P00P P@ :P0:@@ @P@P0P0 @P@P0 P0@P@ŀP0Ō P0@P@ P0@Ō :P0P P@}:P0} @@ @_@P0P0 @P@P0 P0@P@:P0: P0@P@ P0@ :P0:P P@: :P0@@ @P@P0P0 @P@P0 0P0 @@P@ P0 P0 0@P@}@P0 @:P0 0P P@}@:P0 @@ @0_@P0P0 @P@P0 P0@P@P0 P0@P@@P0@ @:P0SP P@S :P0@}@} @P@P0P0"@P@ P0 P0 @P@ P0 P0 @P@ P0@:P0P P@:P0@@@_@P0hpP0h| @P@P0h|P0h|@P@P0P0@P@P @hp @p @p P P@p @hp 0 h| @ @P@P0hpP0h| @P@P0h|P0h|@P@P0P0@P@P 0hp@p:P0pP P@p :P0hp@h|@@_@P0P0@P@P0P0@P@P0P0@P@P0@:P0P P@:P0@@@P@P0P0@P@P0P0@P@P0P0@P@P0@:P0P P@:P0@@@_@PP@PPP@PPP@PP:PP P:PP@PP@PPP@PPP@P0P0@:P0P P0:P@00@@_@PhpPh| @PPh|Ph|@PPP@PP hp p p P Pp hp h| P@PhpPh| @PPh|Ph|@PPP@PP hpp:PpP Pp :Phph|_@P0\ P0 @P@ 0P0 @P0@P@P0P0@P@P @ @ @ P P@ @ 0 @ @P@P0P0@P@P0P0@P@P0P0@P@P 0@:P0P P@ :P0@@@_@P0P0@P@P0P0@P@P0P0@P@P @ @ @ P P@ @ 0 @ @P@P0P0@P@P0P0@P@P0P0@P@P 0@:P0P P@ :P0@@ @       @8@>@@@@8؃@0x_@_`|@Op?@xpp~_Sx|?pwW|a|pq|Oqp|??xgWoO`_@?@ >@?@迁🠟࿧@@P%_#_@p?|?Ap_qw|o~|?pp?p?|||F`_A@.@? 0 ( @_3P?/SQ`popG~{ao~W|_`^_`p?EX?@(?<ЦԼԿ<?? (@O`/@NOIPO@o[c`|x|cSpxa|P_twpxe|o~`w{|zoxpg|p_K`_dGdG`?@8?G?`- %8(8ȿܯȷȠ̳ȿû'H/8 "7?@H?@TSKXOR]_cnd_p|rpw~yw{htoxhxg`x_pW`]c`VOPGHP?OK@:+06;0(!!,Ŀ  &?8 078??@EF@?GVTWXXOdW`_l|l_crto{}wxwwxx|x}}xoyx}rvptw~{|phegvlh_kjhf]d^^X\[\_XTOPTOKLIBODB>@?B?4738704-,/0( ("         +0$,/*,'/670/78015>?;@;7?:??=?@=?A@=;?@F@7=?;9=>98476744,0/10-*)*('*/! +($  # %        !'(' #*+0&!"+-($')+(+()-,("#.-0%',*$%*'*'&( $&),$  %'(( (%                  '$ #%#(%"#&%*+,))'+.+*+-2/+(552,++0/31+,+120+0.,(('-,+)/(%$)'-&$!%%$! '"  ´İ @?`!xoa~O`@`pA@~@@px|?|_o~@p~G`_~|@` `_?Ox~`xC`px@?@@P?@~ @p?߀xO?x'p`px`(@``p`@(``p@`p`@p{|/`8#@@_px@|ߠ@@?/? ?``px@Ox`@@C@O``x\@X?~g@?@8p߀>p_@p`@>@|??p|l`~?xpp?x?p?~x@?@~`>``0@@?@0@@?@ ??_ ?v'`?>`>P~G@a`?||`@0` 0?_ @@C`xO` ׃x80ďh`@`O_p|p@?@p`@p8 ? @`x/@.@< 0P@> @@p|?l#5 ,0\p?h ?H@/ @?~?@ ?_?g@@Xx@``x#8^\?n@0>  ~p @'?@@@> ?|Pp@`?@x/0(`@?O@?@?`@P>< #@ `P @P L0@@?@?0@?`#`H<@?pop?@ ?<@&<< (ߐ >.##`%@?@`G@~3@?@'`?> //`CO@P\/`/@?_ 0p P 0@0PP<  ? 0 @?`?/(' 0?`@P>G`744@@ \!0 < /@@(` 'X? $P<@> @ @8 ?0 0??@ `  <>/ /08@@!@?`??PA@@?'? _`0(X//4/ з0(7@ ? ? ?@>  00| % $ H  00>ě 0 P @0/` +_ ?P7?`PP(/ ?OP ?@) $ί̱м? /?@@ 01@?P /@ 4KH?H4X @(࠿0ȼ฿ 0@?6 ?P @ P#\ '0@?0 0' øHl9puY]9BUǀHyB]5ܾЀ0Py$yaH( о=Y}PaB$ Hp(f= 9l=U  $U}l= 9a,HuP0 ,Pup]=( $0Lfy}}}}yyyyyyuyyyyyyuuuuuyyuuuuuuuuuyyyyyyyy}}}yp]H9$  $$(( $9Papu}}plllfffaaaaaaaaaaaaaaaaaaaaaaa]aa]afffffffflllpupupuuuuuyyyyul]PB0$ $((((,,􀀀(9LYaalpppupppppuupuuuuuuuupuuyuuuuuyyfYYUUUUUUUUPPPPPPPPPPPPPUPUPPUPPPPPPUUUUYUUY]]aaaaaffffffllllf]UH=0$$$(,,0005$0=HPUYYYYY]]]]]]]aaaaaaaaaaaaaaaafffBBBB=BBB=============BBBBBBBBBBBBBBHHHHHHHHLLPUUUUUUYYYYY]]]YYUHB50($$$$$$$(((,0555999,59=BBHHLHHHLLLLLLPPPPPPPPPPPUUUUUU}=550050000,,,,,,00,,0000555555555559999=======HHHHHLLLPPPLLPPPLHB=50,,,0,00000599=BBBB $$((((((B}uluullpY  $$((,,,,00000055599999===BBHHHLLLLPPUUYYY  $$$((((=yuluullll  $$((,,,,,0000055555599===BBBHHHLLLPPUUUUU $$$$(((0pulpulfllfP   $$((((,,,0,0005555599===BBBBHHHLLLPPUUUUY( $$$$$(0lpfpulflfff $(((((,,,,,,005555999====BBHHHHLLPPUUUUUU9 $$($$$(UullupfllfffL $$($((((,,,,00555599999==BBBHHHLLLPPPPUUUU $$$$$$$,fpflulfllafl  $$$$$$(((,,,,0555599999===BBBHHHLLLPPPUUUU0 $$$$$$$$(Uuflupfllff=  $$$(((,,000555599999==BBHHHHLLPPPPPUU瀀 $$$$$$$((5ppfpulfly  $$$((((,005555559999==BBBHHHHLLPPPPB $$$$$($$$$(((0puflp9  $$((((,0=LpyԫԚˀˇUyU=ypԫ܀U$ppfyUpLfˀ܀=fL琀,L$pUpy]p]]ԀpL=LU]L=L,L=Ð,],L=y=,y]]5,y5܀=pUUfܚ˫,5]ܴ=U5$$=5U$Ԁ=,U=y$ˇ=U܀L磀À5fp5ܴܣf]=,$,=LUUp$,L$皇yU$p=,],yyL5瀀,pUԐ$$ܐːԫԴ$Ԛ,ܴˀˇԚô$$$紴,fppUfpLL5,5$=f˴5]]ܣԴf]5,5ˀ=]=,5˴Դãpp,ã˴ÐԴԚëܴ$UfUyfU==pp]$琀ããU=L$ԫôԚë$ﴴ˴$$܀ë$UypU=$ˇ=5LULf=ë紀5Ð5==fL$˫Ú=pypy]=ô,Lf==UfyL,$ԣô˴,fp]U=竣ˣԚˇÇ$=]Uô4<4KT[3+ľ׾ž忹Һ!Ӽ߿ƺ²ù  8EEEDDDD7- п ǻ 1;EHB1̪#(;\mi\;Ͼ1JJ(iM% Ի4foB倀aR%^wVaa Ԝ ?o}\ Rf,^aJрPM^}9o#몀//ǀR;;M4J,; %M (7m\ؗ1VV倀 %,BEB,1H7 % 1BV/7J它# ,BJ/ %4HMω 1(9HE /ER㧋19 #,HJ19RY̗7/(4J1 4EV?병,; /EH19R\Ԣ7;Ѹ,1M% 9B\\򸚢#99 ,9;/;M^ग/4 /B 7BRa򾗟 /1%77(;H\J뤗%// ,9 #4BRdɜ %,1 4((9HVd讓#/ (4 1?Pa9۟#7/(;JYi,;#//BP^d㢗1?%#9EVd Ś #;/ #,?M^i럗 1E% #7HVdHќ%?J (BJ^f/HM%ǻ %1JRdiݚ %4J1ϻ(;M\i?/BP 1HVdo뚜 %4JV Ÿ,4PYia̗/7PV ذ1;V^o 1EV; %7JYmsNj/9R\ Ϫ/9R\oV 4?Va踧#9J\iu㤟,9P^iŧ1?Rass 1BVaEѫ *;FOZ'̷%-3   rockdodger-1.1.4/data/ramcharg.mod0000644000175000017500000040607213706632107017350 0ustar krawczykkrawczykramcharger x01realitybass:realityhighop1Alienbdrum)5Alienvoicesnare*df1:Alienhooman)@Alienlongbackstr @apydiabass2 p@dx11syntha4&@dx11syntha32E@hyperspace1I@ hyperspace2@ @  M.K._0:` 0@}P0hP :`0}P@P P0:` 0@0 :`0@@@P0:` 0@}P0hP :`0}P@P @P0:` 0@0 :`0@@@_0` 0@P0P `0P@P P0` 0@0 `0@@@P0` 0@P0P `0P@P @P0` 0@0 `0@@@_0:` 0@}P0hP :`0}P@P P:` P:` P:` @@@@P0:` 0@}P0hP :`0}P@P @P0:` 0@0 :`0@@@@0:` @ 0:` @ @0:` @  0:` @ 0` @ \0`\ @\ @0` @ \ 0`\ @\ \0X` \@ 0X` @ \0X` \@ 0X` @\ 0:` @ 0:` @ 0:` @ 0:`@@@@0:` @ 0:` @@ h0:` }@ h0:` }@ 0` @} \0`\ @\ 0` @ \0`\ }@\ \0X` \@ 0X` @ \0X` \@ 0X` @\ :0:` @ 0:` @ 0:` @ 0:`@@@@0:` @ 0:` @ 0:` @ 0:` @ \0X`}h }\@h }h0X`} h@}h }\0X`}h }\@h }h0X`} h@}h }}0`S@ }S@@} S\@0`}S\ @}@S@\ S}0`S@ }S@@} S\@0`}S\ @}\@S@ S0:` @ 0:` @ 0:` @ 0:`LLL L%L0 L5 @_X P P       0   P0 0 0 0P PX0 0 0 0 _0:l @ 0:l @P P0:l0 @ 0:` @% P00:` 5@ 0:` @P P0:` @ 0:` @ 0 0@0 0@ @0 0@0 0@@@}0 0@0\ \0@\ @0\ 0}@\}0@ \@0@h@h@0 0@0  0@ }0 }  }0 }@  }0} X 00 }@ @@ 0 0@0X 0@ @0 0@0 0@@@:0:`: :0:@:0: :`::0:@: }0` } }0}@ }0}  `0 }@ @ @0`@ 0@@0@ `0@@@ @@\0\`\. \0\@.\0\: :`:0::@0:@:@_0:` @ 0:` @P P:` P:` P:` @@@@\00:` @ 0:` @\  \0:` @ 0:`@@@@:X:`::::::`::::}X`} }}} }}} }`}} }}} } }X`@@@`@@@\X\`\.\\.\\::`::::::X:`: ::: ::`:: :: X`    `    0X`@ 0@ @0` @0@ @\0X\`\. \\0.\ \:@:`:@0L :@:@0L :@:@_0:` 0@}P0hP :`0}P@P P:` P:` P:` @@@@P0:` 0@}P0hP :`0}P@P @P0:` 0@0 :`0@@@\0X` \@ 0X` @ \0X` \@ :0X` @\ :0:` @ 0:` @ 0:` @ L:`LLLL L%L0L5洀%%LVpV={piV=LLi0Ԩ^@VV^{d^V=0%ɪI7=L=%%%%00,0@=0==,@@=@@VL@VV@Vi%7L^^ipu{pV0Է0IVipi^V@0%ɷԜ%%%,00070=@=@@@LLVVL@^p{X%洪0LV^i{iV@%Է,@Viuui^V@=%÷%%%%%,00070=@@@@@@0@V^V=%0@V^iu{{{udV@0Է%0LViuuiXV@7%÷%%%%,0007==@@@@=0=LVV@0,=IV^ip{{ui^VI=%ê%=LVi{{i^VL@0%%%%%,000===@@@=7@LVL@7%%0@LV^iu{{pi^V@0%%=LViu{piXV@=,%%%%%%,007=====7=@I@@7,%0@LV^ip{{{uiiXL@0%%=IVdp{{idVV@=,%÷%%%%%,0007770=@@@=0,%%0@LV^iiu{{{{{uii^VL=,%=LVip{ui^VL@0%÷%%%%%,00707==@@@=0,%%0=IVVdiiuu{upii^VV@7%,@LVi{{ii^VL@=,%ɷ%%%%%,00777==@@@@@@@@@@I=@==0=0700,%%%%%%%%00007=====@====700,,%%%%%%%,00===@@@@@@@@@@==7000%%%%$  .Eu!66H<3-Z! <-$3? <!*?Hl 6!!C( ! -EQ6d 3616*3!IU U( E @$E$C! $!E@HHEHHH!lEH7!!<$iZC$~H!61$EH!3ϠliEL$66EZ rlE llEE6!6E$@$E!H$!3l{!H66H!Z6~Z H$Z!EEr lH676E$?H6$E 3 l`Ec$p!g ? EEHU!H63H6c$$*3!!$$E6E$ @61ܜl!H!E-HZ $?- E!$ZLE$L?EH6E 6!Z*!3C!H6!!C$ !$$E$!(6?!  ?(!6QH1H3C*EQ E! 6EH!!-E !! 3$~sv d(C^k4 X/ ' 4#ܪ#J2Ģ4gOXК~fd{_O,vO(!;'H?OVD7 P>*r;#Sd(;񶀀' ؀Ā•쀤퀪#!*#D'z,!2v2SF#R(wZg,P?(*Pn8w'zv7~pVJ>!֦'Ԁ݀Ā̀倆$2ܖ>PvH,z2zX SfrXSRD~_{rs8v_Pw?z;JPOPg?gXC~ء€ɀԀ̉ŕ88OO* p2{sCKRPpS?k^~zPSwfvgzpsfr{jsw^fz0XZn7K0>P,DdC4ЍЭę°¤֐حԡ S 0O(2#X7\;/wC_7g_nS{cgwvwkccsvjDZVZg{sCFK~pr__jj*Sfskjggf>8O^;dZf8DcX7H? 4;'  (ؽٶܱѱخαŭŝݼªٜٝɦ钸½рٰ΀Į܆Ί݆ĉĜѶѼ '#,'/H!047(>Xd#r00~>c\gKrk_^~vc{{~szk~\vcgkgO{8r7X7g#<>;#;(!!̽Ķ   #$,4204??4FDCHOOROcSc^ZnfXpjkpnzgzwzvr~~vvs~{v~zzjzssrdskgdfddXgPR^~O,S c$j;ߵ̕vD߀쀀Z#X J#~j^߀7 >݀ 7?~JZ!D\8$kn/0pOݤ7(VĮ,Ѐ2'FRF? Ф0D2̵02VdF ݀;?2cֵ݂Pz^kĵ(v/JȊ,/k݀(, F? _^Ԫ$ي8J SV#/##$$>́F20*ر  g*0ą,*!Pwټ4İ ,nC<* #Hܺ7VVHSnѺ#,7SF, !H >#47#̚!,;*ߤH!>!28>ֱܱ(F$ż# 8(غ(,; θ4/2J!77D;(< (n ݪZ (ܤ\;4Fٕ;$Ŧŵ$V$ ɍJ𰀊 ?,$̭ O< *,$>ݎ!!<47p (̜C#($0,XO̚$dJ !(2(/颼#(!H'2;• *P'HO8HF ZV;#g8̪X$0#ĕ>((ĭ \>µ'O$؜P(ź! 4Ÿ'妢7Ckќ'0ؤC (İ$!/7$'ټ72CٖK# J/ 8V?08  $;خ##J/ $0(ء* , *  (<( !> ;(   !##                    ++BB[[XXRRDD''!!++33--ү%%,,߼ 99||II99++--BB==''''--33II-- ̾99BBBB==$$ʷBB66''44!!ٱ BBuuJJ4466LL44 %%--,,''  ´33==,,ۼ..,,%%Ґ44VVuuLL44@@OO++$$$$--66%% ʾ,,%%%%!! 晙44@@,, ɓVVllxx``QQ''3377,,,,,,++ 3377336666Ԟ ++̩ iixx~~uuRR77JJ44  !!%% ''!!%%ɴ44664499,, ᥥ梢 aa~~uussll^^QQHH33$$%%%%$$>>$$  %%,,..%%ձ%%44''ل%%̢Ǔ@@xxssmm@@33$$%%44BBOOOOJJ.. ++++$$ɨ 66''++>>33ۙ$$ᮮŸHH``>>QQmm||bbXX%%ҾBB>>==Ӯ44$$ᱱJJuussII!!33WW``aaDD %%LLVV٢ ዋaa||[[>> !!QQ{{xxHH$$ǯ͂$$++ssssmmhhJJ-->>hhppbbQQJJ@@6666,,Ǿ 99ɢ¾ $$ ۋ++RRDDiitt==99IIXX``>>664444@@BB==𶶞%%66殮@@ --44 77 ͘· >>BBJJ||[[99 >>OOQQJJ>>66++LL^^II!!++66缼$$JJQQ$$ 99HH缼 66BB̟ @@aa~~OO$$@@XXII''VVbbmmhh33ܱ뷷$$WWmmWW44QQ^^DD>>II!! ¯HHpp{{ii++ ,,%%3344'',,LLWW66VVJJåܸⶶJJttggll``>>$$ ٯ@@mm~~ssss== ..BB==^^ggBBBBRR@@BB++ҶJJppiiiiii++ '' 𐐋 33JJQQ..''33XXhhaa````^^BB99^^WW==” 33BBۋ կ++,,,,33-- RR||hhuuppHHJJBBhh~~ttssJJII33''ܮ  縸33ۀ7777%%xx[[VV$$DD>>>>BB!!,,pp,,ê==7733 ɢ++êJJ'' ,,IIWW^^XX==--LLHHWWWWHHRRJJHH{{ss@@ 77QQDD..ឞɗ%% ,,IIppuuXXHH !!VVQQQQDDLLxxllpp..44QQJJWWOO 碢ԴԱ 33aammJJ$$$$,,>>DD++33@@aaOO..÷ --%%OORRDDDD>> ٸ ۟--uu{{mm33%%..++++++ %%%%@@iiOO++ͼ!!++WWVV44%%,,9999==$$Ҽ멩>>''OOaaBBII9933aammJJ== ..HHaa99%% ..``uu$$ʱᅅɥQQVV66--66xx^^QQssRR77WWWW^^~~ttRRBB ..LLsshh77--''¶==$$77ͼî ++OORROO!!++!!!!BBWWRROOJJll||ll````[[HH..>>JJhhuu||hh44--44Դ[[{{llxxLL Ǡߟ==77JJQQ$$%%++RRIIJJ``ggxxggppaa99>>99HH{{sssstthh99!!QQ``VVaaaaBB--%%''ɼǾ !!7733%%66@@BB44%%44aa||HHHH^^pp||hh!!99``HH++99==99--$$44>>ʾ,,tt{{||ssRR66Ӣ$$llJJ,,33..BB{{ppLLʢ''33HH77 QQ99!!.. Ǟ>>VV;걱xx~~VV33 66++66OOVViittQQꪪɱ4433 '',,44II@@,,--Ô++%%--66ǂۮ''++@@``ggBB$$ 33xxxxss^^--DDuuDD--BBRRIIVV^^ɴ++ܩ̀ %% BB9966DD--HHXXWWll~~LL,,99>>>>pp..ឞ``pp[[BB77 Ҿ ̴Դ JJ''hhiiXXxxuullhhaa``[[uu[[44å''BB@@%%ٯɄ..QQ..^^ggWW``RR~~XXұ--BBhh^^''򴴓JJWWٱߨNj66@@ DDgglluubbBB^^pp BBIIʄ ||{{xx33QQii3333OOll{{^^BBXXuussWWDD''....ܸOODDBB@@ʢ𼼘 ʴppVV''==tt`` 33iiWW@@774466''ե..XXttBB 66 !!ͼ99||pp>>OOHH@@~~JJ++33BB ͮ%%$$,,II$$ᥥԘ길±++[[== 77ttuu``OO77^^OO''==DD''%%++Է%%..@@33%%᷷ᮮ99++77tt{{tt||ppbbllllDD66%% ⾾ 66,,4466Ԣ ә; ++XXRRWW````bbDD77 IIQQiiVVJJ33 $$ɢ,,>>66DDҍɮ ++@@mmVVVVhh[[lluuRRHH''!!99BB[[~~^^++ٓ--==44¨XXmmllhhBB͙è WWttppHHOOLL44BBQQhhiiVV++==bbVV[[hh,,Ԫ99LLaassXX++۾ïʾþ++ >>{{JJ@@RRJJLLggaahhgg--  993366WW==Ӟ ܱ¢Ը++!!$$''==BBuuHH @@DDWWRR77--!! %%ᯯ$$ 33==HHշ꼼''++RRllWW==llJJ 99BB>>==-- 77BB++ꩩ++-->>JJRR^^ ٴ44DDaa^^@@==++VV$$ !!HHJJӟ$$,,Ӷ99>>..Ӌ!!Ǵ $$$$==QQWWQQLL>>6644BBWWiihhiibbiiiiDDJJ``XX%% 3333ҷ!!  ø,,99BBLLDD,,++LLllii{{ttggDD44JJLL^^uuhhOO++̥%%,,%%̩HH66%%ʗ++++𸸙..,,==JJmmll^^[[iiaaII@@77II..II````XXJJ++'' ô   ,,77HHDD^^{{[[^^[[HHLL^^XXggOO66WW[[99HH33̢ ++33漼̮ ,,LLII44!!%%66>>==6644>>bb~~mmJJ--!!==QQLL>>%%ü++''$$$$⸸%%,,''ʮߪ>>..''HHJJXXWW^^mm^^,, WWxxtt~~RROOLL@@XXggaa^^''Ԫ  ̢ !!!!ɯ %%,,44RR^^iiaaBBʹ$$QQllhhggaaQQbbpphhWWXX--̢OOHH..'',,,,⾾͟ɩ77VVaattQQ ⢢''>>hhpp^^aaaa[[^^>> %%''33''봴ʼ  ͷggmm~~RR==[[--ɍ,,hhVV33..!!66 !!%%ܯ۶ ʠbb{{aa33 ʶ99DDLLiiaa@@,,%%$$%% ''!! շ⢢BBLL !!!!BBQQII''--$$!!,,44++''$$ ̘ ͩ==XXssWW HH@@BB!!--II[[QQ%% $$++!!==OO>>ԩ!!''!!77--33HHBB ռ''++$$BBRRJJ..$$$$$$%%%%''  ۨ++4433!! $$--!!%%!!  DDHH444444%% ++ ----  ǨBB99    !!!! ,,'',,LL==$$++++..336644 ”--66--!! ++33-- $$44HH,,%%--DD>>9977 --JJXXOOBBʼ++66==ٷ BBssggOOBB ++!!ٶ,,IIJJBB >>^^[[JJII$$ !!44DD'' $$++''%%͸پ 99^^WWQQ@@++ 9977-- -->>>>LL66 $$   ® $$!! 99HHOOWW44!!; 44..4433%%,,,, ''$$ ө @@RRggWWII99窪 ++  ..$$!!++''Ӹ %%!!77>>HH99''߯ ..--%%$$ 4444..!! 77@@ ;44''99LL..!!$$66==%%BB^^II!!$$--44Ӹ!! ʱ$$,, ++77 ''OOVVII66XXaaOO66 ɯ̨  $$  44QQVVQQ,,$$==JJBB ɾ ʮ $$$$''44''$$ ''7799>>JJ>>,,++%%$$!!ʼ%%%%!!!!  %%7799779944%%,,7744--77,, âկ3333..$$  $$%%!!66II774477==66 33,, ''⾾ ӷ $$,,7777 ++''$$6699BBBB++$$  %%%%© !!33..-- -->>%%774444'',,>>66''--''Լ   !!%%%% --44''  !!JJQQII$$  ټ   ,,%%!! !!33++ ++997766''     ++44!! $$$$!!$$   %%$$%%''++!!%%!!!!  %% %%Ծ$$33==  44..!!  ++!!''$$ '' --77..!! !!..@@,, !!$$$$DDII@@%% @@99    ,,7733ø $$ ''779977$$ 33..==99%%    ++%% !! 33RRXXHH99!!%%$$  --''33HHBB̸66aaXXII44''$$ !!66@@44   $$++33,, 44LLWWDD,,$$ ++99BB>>    ++++%%  %%--%%!!   $$$$       !!%% $$   !!-- %%>>66++++%%    !!>>==,,3399BB99  ,,>>DD==''    444444''        !! %%!!Ǿ  !!   !!$$!! !!$$''    '' ,,,,!!      ++ %%,, --6699%%    !!''%%..--''Ҹ 6644++  %%,,44''     %%,,%% ..''          --..++    $$%%''  %%,,              ++$$  ''    $$++$$  !!!!  !! $$++!!  !!--,,     !!!!                               !!      $$                             $$                   QQ E, &   -佋-OK- °::D  (Ԑթ 0$ 6((2lR%!'Ԩ%ã!!%+K  2R+%JJ:%X>½ -2EK$$WP'+üɜ% JbQ`4ҩ  :  ͬ-V:ҽ߽ E]uz(Å %EW6'62 !7Ó>R.[iuR$>>$Ԩ4RO>ε ''':hJ=>!ý'Q24^Kܰ-$ ذ.0.z- (R%- ï76-!PÜ-<:-%>R %RiJ(:-а⼨ [pO00 2Խ --'$ɬ >ɽ 4[I`I2(%2!]:B2R.':R^b2𻓀2K%Խ6h[[lduh-Ԝ'<'B- ɰ7>>6'%綣-:`WKR£$$KE<!!񰟢%ߵ =:꽦'2$77P>ʰɯ%2.[iI. ҩ:bC> ý-Q%K>Ԝ-O>D~uKƶDI>('>zd>-՟$궈RKΐ7- %($ԍ ҮCof>':߼ͽθ%$uRԴ(ΰν74>hJ د>>$ թ( Ƹɽ-BEI[>CK0꽴'$ =O $Bfb> !Ǵ- >$ꬰ-']d[Q>0Jð- IfIν70R]>02R(+2(æ$K7Oi[hB!B[B.⵬ 7-!bs[( Ե.b|](񽰨(E::lzi>.B]z'(2Դ >>(<zRO2-ᯀ2i4CRBhpWRKOK>ضWzBՈ%7-ƙ>RQQ Ù>b]ui'®$x$Γ (ئ .W6ظ'-(4KoO('ʹumO Ԕ%2C%>!°ܶ.(7©2KWhz>߸%[uhO- ڦ ظ ::>J߽QJED%߰RC>:2!  'R(멁C4':Q2 ة2$22Ƭ4.ɴ!>(>O7>]$ߦͼE[:6+ɽͮ:K-$%4(- O<JJBDð©2>RO  νи -0-R($72ɸ'`: K>'%KI.>-K2 6B.ᓀ>>0PQ6£C6:-2pI  񽜜RCB!ТDxii+ҸC>+% +.%ʠ$$'0 ɣɼ4mV$°BO=2!:0 ư>>ƽ %%ʽܶ$pB%2- Լ'Q:I  Q>$Ե(7%->K<ɯ%$-E4 J`V-E]0%:ƶԩ.K>ռ%ҽƬ+0%:m|6 <6( $<--(Ԛ +4 7`>V(>ʩ :꽯:J-ͣ۵]uR 7 (ԣ'm:ƴi[$%>Π'R>-I$Φ:D+뼵>]꬜2-ԗ=WsC%-(2'RB블Vd6ƽ( 罍Ɍ2|`0+=ROI>'% PpO6⽽ذE[`^2-6b]( :Ƽ񶀓KI.>bPdI4z|:穨%ة0<(::罈͗:R[zO2'꠰24'$((԰$%ά$2222ffp]--:%ؽʼ2-7+-ɶ.'2$RKRi>ߚs[%ζ%'%7X$0ʴ԰ 2bXf:IRiP%%-B>-4$  Eɻߩ(6=XO>'%22D î 44 %=%븯ɼ2+.BXvzR7+PR4Խ D(¶->0WO>:(>:+ɸ.R> ⽴(44OBEEImz>Եж .>R[6 ʢҰո4`<: :`iI+ý 0KEB27:.ǽܵ佸®%$'.DmpmuPɩ 2>'IK6ɮԣXJ~V(>4$߽:IO6I^Bl^$ԴËʻ¢ >]udC7%ɽ!$((>R+ܽ Ω0`ubO<2ɓ-d~m: Զ%°( (:bo^>+Rf22%7Bzf ɠꯚD(ʍ - 2`iK!: ʹ 7>IIzK'h|m]2  Ԯ>i|06J-.ʆ00$뼈 %E Ը6][ҽiV< %h2öǣiu`K `uu>ܽЯ<mo:2<2%¬7!'!'D-Ԉ hd]0B2>:ƣ!7-4QK<(-:øɽҽ .K~uf[:>R(% (6RK>ꚟظ!2 4hu>%$ ![.(:% ؽ>4+VimR!=[$ öܼ>WDxlW( 72>-ܽ!ưɀi]h4!(+> (ضýPI2-2(ک괰 (ov>! ($صï VoC(''Ƭ EbR2Զ2: 2(ꦌìЮ-s>2K0'6δ'V> -h6+ԩBuRmW»C '>'>B񰍂 K]:2`V-Խ(--ؼʽԶ fEPxP %+<% J! .0䵜WR$>2B  ʶ%ʹ :>($^E-4 '4'- ܵ%<<Խ2!εhuO'% !7R<Ԧ7¸6R(԰-'᮰ uR [o $ ꣂ%ظ ih2ʜԮWu]iI !ؔ(]R>:2:[$-RҢ%ΰu^D ҵB.$½(=VʼƮKi=!լ $KR +I6,,վ  ´ 3: ٻ %,%%+ $      "1 O0".n&ht'znJBtIc4>1϶ٻΰ B"ڜ00+0c1PcQzNOcJPcan?thUB&%>ᯪШJIK%6+[cE*J"zJFn%&01<[UzJ%0%<%" ! ?ٰ !ϟϱ%Ժ011+jTFF*R7%' "ܺӬֽǸ̽> ag[BF4B%'"' tyop^PTC4.2̻ɢɣT,C' VpBbEKF*4  ɺլɤ  Ibp[]F44B''2>pplTHT?'  ֽǸ 2 >-*PT^FK@+4$+2 λӱ--" *tbp[b4a-'&2' 4bt~pppT><>42һɱ4' FjR>2bT-,C " ջ»ɬ* 2~yb~RBVR'' ' o~ppaHF229 ɾ % + *4IK[72T@2 & ̻֬® * %4xpb[KB<2' 2j~tpbTIB>,  ¾ &% *PPPE@>>4-'     Vxp^ZF?9-%4xzpg]PC42&  %' &RTKEFCB42'%Ļ I~ppbTFB>4%$V~ppaZI>4-$ ĸ%"$  ,TTKFFF?<2-,%  ɻ  Ctxp\VIC?9- R~xp^[KF4* &'' ,KTHBCCC>442$ @nupbVVKK>4'I~tgVTI<-ɻ--'  CH94>??>.+"ɾ  @fpjb[PK?9' 4pp^VTB?,22,& 424>4>74 $ ¸4jpfbTPCB2*dzpfTb^B>."ɾ -,$ 22@4>*% ľ " 2[ppb[VE7'"&atptpaTF2*  .% '*%% ''  [db[TC4%Kupxba]H4+% .' &-" ɻ-'$-V[VVE7- 4x~xpp[PK>4-   4- Ҿ&  ½'2,  4[^PI>. >pbVTCB*4''$& '4-  ,'$ >[]PC9$2ss^ZRPH<<<0*&%+$ ü ((>TOB7%9ntgLLED<400'$  !*% ξ'+$ (IPF:*&FrzzyiXICB>787-& ̾ !& 8KF@44Ltyu{xuuz{zpi^N>=<9<89, " Ǽ('  BID9,Ip~uvppv~{vmd`PIDB<::62% !$!  ,LPD>[{t{{tl][PI@:=:32%! Ľ&$ 2OLDXuv{~sf]PJHB:762,!$'% ,EET|~vpt{{pf[RJID=772-'+$! ·'&  +CLp{tptvpf`[LIIC=:=7, (+!ü&,& 2Q~|zxpf`[TPOHBDB7+$,'!Ļ&,( ,f~xvph^][[VQPIDB6'! ,,'ǽ 2.& 7vupmb^[[VPPPID7,& +,+! Ƽ..+% `zsmd]]][[PPOJD:6,! !,,'!ƽ$32.,'  ,~tla]^``[VPPOE=72' &,+$.730,,'  ]vma]]ad][RQPI>97- 66,$ '=>6.,+'!={xxuma^``ba[[TPIB:7-! &76,$  4ED90,+'& 'vvtpmf`]]``[VQLHB:3'492,! :EE>2+''&  Z~togd`[[[[[TPID>72$+<9.+$ ɾ:IIEB7,&$$! ,Q~tmb]][VTQPLHB>72+2>7+!Ǽ$DKIDB=2'$$!  !>[zof][[[TPKIE>=73,!!>D9,!Ļ+EOIDB>6,%!!&=D]ui^[[[[QIDB=972,!,@>92'6KOID>=7.'!  '<>D`{mb[[[[VKB:7632+!6D=62'ǻ7LPPJD>93,&!   4>=7Tv~sh^[[[[PD94222,$!7I>60+! CPPPLEB<6.,'! 2>@72Qvvnf`]][TI=40.2,&!4ED92+!ͽ7OQQPID<6.,,&  ':>9,&Bfpmfa`][RE72222,&2DD>7,$  ƻ ,KTTPKE>92-0.' 7>7,!6`omgd`][QB7666-&+BDB<2%  ½ DT[TPLD=6222.' $97,!'Vpphd``[K>=<93+'>ID>7+$! DV[VQɸ %''''''''''''%%%%%%%%$$! 䔀+0000000........,++(+......,,,,++(((,,,,,,,,,,+++++% $'$΍%'Ս,23' %6%379777776666663366666633333332'%!2220000, 䪀ê(20+΍ƪ (76ǀ(=. 0=3!=============:99:::::::::996.!(66666660 !+ 37662%ǀ7:>>2Ǫ 0>@>=>@:$>@@@@@@@@@@@@>>===>>>>>>=9+  (:::::993 (+ ܸ(973,򸀀63$ 2=>=3$7DDEEEEDDDDDDDDDB@@BBB>3$ 0>>>>>>>9$  '73$ΜǾ!՜ >9  3IIKKKKKKIIIIIIIHHD@9'%!%BDDDDDDB3$(>>>>=2򸐘բ ,7>2一7LL9EOOOPPPPPOOOOOOK@2$!'7+(EIIIIIII@2$3+0BDDBBB=+ǜEHHB2ǟ(LRRPP9!ERRRRRRRRRRPKB2'%,.>9'7LLLLLLLKB2+$ ! 7:$%>EEEEEED=$ǣժ9IIH9øƪERRRRRP@ >PRPPPPRPOH9+%,6+%E9$7KLLLLLKKE:2.+(% +2%B:$%>EEEEEEDD=+ܸ獀9IH9ǀOPPPPPOL=$(BOOLLLKIB6'$+6. 7D+!7EHHIIIHHH@=766993'(3+ 3@.%=BBBBB@@@:+B(>'ՀIKKKKKKKB3%$!(3@IIIHHD>2%!,3'7@+(>@@@BBBBBB@>>>@@=6'+00=.0====:::9,Ǿ (9%ǀ97HHEEEEEEB>::>DDDDBB@9, '2'(>9,::::============:90$%. 36 .666662 ܼ9 䍀7+7BBBBBB@@@@@@@@@>>==90$(0 66 .667999999999977763,$ ,'!2. (22. 伻 Հ(.΀7.%=>>>>>>>>=======:::96.$!.+!30 (36666666666333332.% !,., $Ǵ($Ս$䍀6η+('(+,.2379:993,% $ (222222222222220,$+$!.$ '!ǜ(6999::::9999777663336760'(. ,3+ (3333333333320+! '. !(䪔$ ǀ$0===9%3:9.($$%+392 (799996.' %.%%32  .3333333332+  (0 ǣ 甀ǀՀ0>>:% 0::62..03::.,7::::999962'%33 (62 ,6666663.' %0.и ՜ǜǀ!>@@3$0:=====:9+(79:==::::9966632+ (62 %36+%26663.%%2.丗 06BB9$(27::92,!079:=>=====:96667:=:9.$%69+(76'(360'%+窀Ս0BD:'!(,,+$(799:=>>>==>=:97779:>>>>=6.!,99' (79+ '$뱍Ǎ,BE9'(6:::=>@@@>>@>=:999:=>@@@@@>90%(7=. !0:9'  ǔǜɼ7E@2'  (3=>===>BDBB@BB@>=:::=>@BBBBB@=6+ %6>9%'6=2('՜ ܪΪ !7EB9.+%$%(2:@@@>>@@DEDDDDDB@>====>@DEEDDD>9.$(7B=+ !.3+ %.ǟ!+ǍΪ!(!7DD>9637>DEDB@@@BDEHHEEEEDB@>==>@BDHHHD>3+ !0>D9'!'' % ټ=9ٸ!0$,>HHDDEIIHEDBBBBDEIIHHHHEDB@>>>>@DED>6+! '6DE:'!(,%%'ձ 39Ǎٸ020@HKKKKIHEDBBBDEIKKIHHIHEDB@>>=93,%!%0>IE9$ '060 ,.$ռ%'գر,6 %6BIKLKIHEDDDDEIKKKIIIIHEB=2(%7EK@.  $!$,7@=. !390!ʥ69.=EKKKIHEDEEHILLLKKIE>2% ,7B>2$!'%$(3@IH9$(7@9+ ܵɼٸ7@+ 0>EHIHHHEHIKLOKH=2($$(6@B9+%''+6BKOH9$!6BD:,  $$ !%$DZ 丮ʮΪ!>D+,6=BDEEHHEB=6,''.:EKD3$ (7EPRK=.   %7EIB6' !%%$!%,32$伦+ջθΜ(@>$(2:@@@:3,%$'0>ILH9+  ,7IPPI=2%!0BKLH9+$!$''%!%,7>:+0,Ǽи䪀 %7:+(.0,'  (6BKKB3'! !$! $,7ELOKB92+% !.>KPOD9+$$%(('%'.6:2 ٸ%2$ǼǼ 'Ք(3. %3>ED=2+$$%'%$ $,7DLPOID:62.,'$!!(3BLRPH9,%$'+,+''(,(%. %+ܜ!+''3>D@90+%%(('%$%.:EPVVPIB=97762,('(0>KRVOB6+'(,0.,% (6.DZ 'Ǎ !.=DE@9,'%%(((''.7IT^baWOE@=:973.+(,3BLTVOD9.+,.0+>OBǪǍ (=KPL@3+%%(,...2:ETbiif]VLH@=93.+'(0:ERWVK@3.,,$ǵ3TZD缜 գ  (7IRTOD9.+(.3:>BDIOWaimmhaWOD:2+%!%,7ERWVK@6+Ǹ%ERBǜǜ$'+,,,,+,2=IRWVOD=:=BKPPPOLOT^hmpoi]PB2' %0>KTTL='ǻ3=2ǣʪ %.7@EHE@9203:ET^dd^ZTPPRTVTRPPRZbipsmdVB2'$(2>ILB+ǵ (:2ʸ  (3=DKPTVRLH@:9>HTfp{{sh^WTTVWWVTRTZahlldZK@637=:0ո'72䪀Ǽ (3>EKPVZ[]]]ZVPOOR[fp~~sh^ZWWZ[[ZWVVW[]]ZVPKB9' '.򸀀ø+6>ELRW[]^abfhhhfdaabfmxtla][[]]][WTPOLOPOI=+($ 䪀û '3=ELRW[]^adhlotvxvsmhfhmx~shb^^^^^[VOHB>=93+ %.$䱀ǵǾ (3>ELTW[^abfimtx~{xslimtvlfbaa^[RH@92,+% ,63 ʜ±Ǽ!07BKPW[]abfimtx~{vompx~slhd^ZRI@966793+(7:+ժɾ%0:DLRW[^adhmpvz{{{zvttxvohaZRIB==BIOPK:%.99$Ϊ¼(3>HOTZ]adhlmoommmov{vmh^WOHB@EO[fifV= !03+ǟþ '0=EOTZ]^^][ZWW]fp~voiaZOHDEL[i{~hK+.62Ǧü +6@ILOKHDBDIRao~ztmd]RIHKTbpvZ90>D=+αû!(,.0026@L[it{{tlbWPOPZfxzfO9 >LWRD+伟» $0>LWafhfdbbflpvz{xof]ZW[bo~sfWI9$7ThldO..>LRRROLKKORW]bfhihfbabhp{viaZRI:+!Ebx~xdHҮ¼ ʾ'27::9669=@DILPRVZ]ahmsz~slda]WO@.(PmsV.ܸ¼ɻ !%'+,.037:>BEKOV]dmv~zslfda[P@23TpvV+ձ¾þ !'+.0369>DIR[bmv~~vmif^WK9 (Lmz]9ܸ  %(,0269>ELWbmxzsmfZK9 (Ii{zfHα %(.237=@ELTalx~sfVB, 7TdidR9иü$',037=BEKPT[bmv{hV9 .DTZR@%ʵǸ ¼%06:>>@DIOT[ahmsx~dH+2DOL@%Ǫʸ .=IRVWZ[^biox~ztsstxsV2,@KL@'东ª  !6ETaiovzvmhddhozzdH.%7IPK: Ϊʻ  $0@Pao~tlb][^fmxzxsdVH6,+0=LW[VB$ٱ !',3:ETbvzsf]ZVPLHB=6203:IZfmmdO+东 !,3:>@DHOZfvzodVD3% %7Ri{zlO+ܸ%0:DILPRW[blx{l]K9 (E^p~zmV9ʮ   (6BIORW[adip{vdV@+ 3LamslZ@$  (3=EKPTZ]bhmx{sdVB2  0EWdhbR9ܼ   $,6>BHKORV[bmx{si^P@0 %6L]hhaO2ά%++' %,37::=@DIP[hx~{vmdV@,'7RfpslV9ǣ'2662+$!%'%%%(.7DTfx{thV@,(>Tm~zdH$Ϊǵ(7>@:3.'!!0>Pbp~~~~zoaO>+ '7Lbxva@Ϊθ !3>DD@92' !.:ET^hpz{zxxz{~~zti]O@2' $+7IWfotm^H+DZ,7BB=2(%.39>BHLPTZ]afimpsttsstvz~{sdVH9,'%(0:EP[^]R@+δǮǸ ',,'! %+.00.,,,,.037=BHLRZaflpv~sZI9''0=EOOI=+ʸDZɸ  %(,.0000.,+('$  %,6>LZfpsZB,(7BIH@6$ǻεǸ(3:@B@=60'$  (7LbphO9 !0>EHB9+ ʱǴ,:DHHD>3+!!3I^psV=% (7@DB9, ټ!3>EIHB:0% !3E[psV=$%2=@>6+ !! ܼ(7BIIH@6+  +7K]ohO9  %3=@=2$ '+$Ǯ%3>DED>6+!  %,3>ITbot]D.  ,7>>9+Ҽ '($Ǯ!,39:93.'   $+3:>EKPT[^fip{lWH2' $,3=@=6'θ !ε!%(('$ $,7BLV]bfiihdaadip~~sdVI>967>DIIH@2$DZռ $$!!%'(.6>IT^it{~xoidbabddb^ZVLH@=:>DLTWZVK=+ %,0.+  %,39@IR[fp{vslhb]VK@9.'$!%,6BLT[[VO@.»Ǹ%0696.$  +7DP[itztldWK=,  ,7DILKE=.Ǹ(0362.% ,=L^o{sfZI9''06992+ǵ%,00.(! ,>Rb{sdO@.  $+.0.+$ μ',.,($ (>Rf{zfV@+  $,2662+ л%+..,'$ (7Lbvm]I9'%09>>92%Ǯ (0332.+%  0BTizl]K=0% (3:>>92$%07=>=:6.' $3E[m{zsf[OB6+$ (06::6.$ʸ!0:BEHD>3+(7ET^ipz~~ztldWK>2%%06:=90$!0=DHD>6+ !'.3:@EKPW]dlsz~zsh[K:' $3>EIHB9'ǵ!,232.(! !$!$(3>L[ixsdO9' !3ER[^]VD2μǸ $'(+,.....,+'$%6I[p{hR@,0EZhosmaO9 μ%2=DIKIHB:3+$0E[mvfV@. '7Laoz{vlV=ܼ%.0,!ռ%6DLRTROH=3+ 0EWhvvfVD2%!.=L^ltvsdP9ټ%3=>:. DZ(7BIKKHB:2$ 0BPbmzxl[O=2%!,7ETbiidVD+ո !0:>@9,DZ (27=>=92+ !6BRamz~saRB3'  (6DR]a^WH2DZ ,6:=:2$ !(06662.' ,>L^m{vfVH9+ '3BLW]ZRD2ʴ(27:92'ǵ !(0332.($,>RbpsdP@2'  %0>IRWVPD2Ҽ $,020+ǵ !(0333.+$ !3I[l{saRD6,%$'.7EPVWVK=+μ  $$ μ ,3:==92+$'7L^o{{saRD9,''(2>KT]^]RD2µ ɼ¼(7BEHD=6+  '7Pap~vhVH3'%0@O[bd^VB.ǻ ¸ 0=EIHB:2% (>Tft~saO=, !0>KTWVOD2$07::92+$ '7EZfotsi]PB9+$ !'07>DD@9, $$ !!!  $,7DPZaa]VOE=62.03:@DD@90$ ',+%   $(06=ELTZZVK@6,%$%+3>KTWWPH3  ¸$066.  !%(06=DKPZ]^[VI:+!0DT^ff^R@+ɻ  ǵ !09:3'  !(07@HOT[^]ZPH9' .BRailf]K2θ  ǵ07=9.!   !(0:@HLTWWVLD9+ (=L[flibV@+Ǵ ǵ 0:=9. !%%$ %+06=BHKKID=3+ $0BR^hif]O:$ ͼ,7@>6+%''%   !%+269::62,%$.:KZbiidVH.DZ !''$ʼ0>DB9+ $%%!  %,26662,%!!%0:KZdlmfZH,ռ %,,+! Ǽ(=HKH:+ $$$$$$$$$! $,36762,'$%,7ETbloi]K2DZ %++%Ǽ(>IOLD6$ '07=@@>92(!,369630,++07DP[ab]RB.ǻ ɾ,>LRPH9$ʼ !0>ILOLE:. +067632.,('(.6>KRVTOD6$Ǽ !7IOOD2 (7BIIH@6' $,0330,'! ,=KT]^]RD3   ǻ(:BB:. (020,%!(++'  0E]mx{vm]H2Ǹ !%%! Ǹ'6>B@90$   %%!%7TizzfO9λ!%(+,,' μ7IRWVOB2    3Kbp~mZ@$ô !%((((%ʸ0ET[]WO=+  0E[m{vhV=$ɼ !$%%'$ǵ,BOWWRI9'  !3K^mvxthZB+ !%$µ.>IOLH9+  ,>Rbilh^O9$ ! !0:@>9,    %((% (7KV]]WL=+  %(,(! (020,% (7@EHD:.   $(+($(.332.(%! !%+.22.(   !%'''$!,2662+ !',02369=>BDB>9,   %%$ !',3:>@=9,!.7:=92'$,3=ELTWZVPD3 !%$  '0:DILKD9' (0662+! (6BLW]a^ZO@,  !.:DIIH@2$ !!   .>KT]a^[PB2   $0>EKID=.  (=KW^baZO@,  (7BIKHB9+  6ET^dd]RB2  .:EKKH@2%  ¼ %=P[bdaZL='   0>HLOKD9+ ! þ6K[bdaZK:'   '3BKPPLD9' (020+! ¾3I[bfd]O='   '3BLRVTL@0Ǹ!0:>>9, ¼ %>Tfmmh]K9!$%%$   $,7ERZZVI9$ʻ%2=>=3+ þ%D[issi]K9Ǹ$,2663.'  $$%%%%(,3=EIIE=0 %((%ɾ(E^mtsfV@$$07>@>9.$ !(02320.+%!!'.232.( 7TfomdR=$ǻ(6>B@:0% %07=>=90'(7BKLKD9+ 3L[baWH3 '033.'(3=@>90%$7L[fih]O='¸ %(,,,+'Ҽ0EW^^VH9$   '.6760(   0BTbimiaP='ǵ(069993.% θ (DWad]R@.!%(,,,(%  %0>LZaa]VH2±+3:>>:6.'Ǭ6L]dbZK9$    %(,0220,+%!!(6BLRVRK>.ɸ (27==93.'Ǯ0EW^]RD2  $+27>@@@=92+$$(3>EIIH=.ɾ !(0220,'! վ3DLLD9'  '0:DKOOOIB92+%%%(07@DD@9+ þ !$$$! DZ,696+ !  !.:EPTWVRI@7.(%%(.6>DED>0$ °%,+$  '++(% +:IV[^[VL@6+$ !'0:DEE@6'Ʒ ,36,  (...,'%7HT^db[RD6( (09==:3'Ǿ$0:=7(  $''%  +9HTZ[ZPK@3+ $(,,+'(3993('.:BEIIHD=72+%! !$$$  '2660%  $%''(+,026:>BD@=60,'%! !%'+,(%  ø +663, !%+039>@EHKKLKH>7+$'.22.% ɻ!,230%    %,2:BHLPTVVTKB7,!  '0330(õ $+,(    !+3=EKRVZ[WRH>2'   +063.'   õ !!   '07@EKORTROE=2'  (022,%  ɼ !(06:>BEHIHB=6.%!(.0,' »       %+.267=>@@=93,'!$'(% ƾ    !$%'+.269:962,'!  ƾ    !',267732,%      '.399960(!   '((%     '.69962+%$(++'      ',0320,'!  $$$   !',000.+'!         '+.000,(%        %(,....+%        %(+,,+'$       !$%%%!          !%Ш ͠.6+01$ F]`^[ZH+7FN0 $蠟 ''-3 FNQNLT=:RcTRi`"ǣ,J&!CD꥽C-ٰ=<&:-ӵ,<ٽg>s Ǔ,JǯCJ ģ,,a>T3߼7!74 ,Ӽ ' Ӣ0O7|DՓChJ g=-€ 꽽 v9+Nj,0(22! 'č ZH  p>ꥀL3 E3!,9ǣ7P߽(>-œV!꽻 I<,V'ԽټC9 hP9ǾD -!꽽Z[0€p[ ǽ,$7 %꽨ZDǾ 2O3+±,P ͵J<,!꽽:!  7Lǽ -,.$Ǯ Os3߀O-߈CVZVٽOW9;=-'9!꼀ZDǥ=V0 3 6%&-ZsT['ǣ +! ,HZJ· % ,2,g9𽀽 vg £&gٽ K]B-»CT-ս(Zn9 ü '%7L!é3 3꽊7d-C< 2- W9Lj pP𽴽7d[9f9îʨ:L0,~9 B-ፀCH$OP&6Zgἀg,%,O`PǓZaӜéC[ᥣOV'$@'Ӵ,hD ,pa!ª'!ĽC@-  Ta3ᾓ=3  ӗp-꾸7DZ-꼀pd>꽻 3-4>- ӼZL>3߼  l~9ʼ^I9-Ӽ =0꾻IaD꽣,Tp9𽁽' % CgH ӍO0 Ӎ,{[ž,Z> 3Z[-ý@lh-优 x%À@D- ð Wzs-꾠,XJCn-ӈCZ9İ$꽽7D(4' Ľ`P %$+ µZ9 ¯Cs ӯ:H>߼,gNj@3 TlR߽†CC!° (T{m3꽄Z[!ʽ,2,B!,O3 ! Ĭ¥4l{-ʽZg! !ӽbaH4ǥ &2KL!͠09H9 ’ 7!!  7! Z[B0E-!$ýI{P%٥2lJ &Kl9꽞@>=-!ӜER@:3Ց+$ 76% %C3˜LZ|Dʬ,%'ÍTvuHI> ǙV- &Of^Ÿ7pm-꼮 Zi3ӽ 꽠,ng-ǽ]-,lxJ,Wi]9ꥷ ,C% ,3 ´294>.! ٽ,LC0 ,9' ( ͼ,Zs-¥%7-,' :6!ï2-,.' ,%  2QTldP-ռ %&ZJïռTn|[߽7`laQf[-ٽ&BI]D&fm<, <-߼KR9!,Zt9佢|g73 7ZL0 ǥZgD:Zn[-Ü(- ·,-(<6: 'Zd`[6ӽ:4(TO ә 4-&TR3پ(IXJ OD! ,,- €&7=- ,%Ǔ,ip|~Dì6ClOo|[¥CPOlxJ꼂7lx[D=> ӼThP% CJWPٙ&Ts-ٽ(ɽ,$߼ CfgZZP Ǎ7fXOEQV9ʼ,[-Þ,n[ ,6 OL0 ߾ Cps' ʽ l>CB0ŸCs Ľ,ORZ[!۾ ,CEOLH3ǽ 22bblb4='å=Xo~n!꽓=dmiPfsPǼ,QB' ,>&&(2-¥@H (Hfs-ǥ(ZvD ' :ZP+Ӿ&BBOD ,%47ZP C94Z-ê=J=I[3&    IbmDšZn[9 2TV3Ǩǥ2WfvmRD>7.å7Td`^zx- ļ° ,O]WJ-$7:'ǽ 7Zl> CQ4 ۽ >- 7D3% &- 40”7T:,-꾯!+,' ǽ,2$!%(06!  4P@IO9-ǽ;,=>-  CLD'!&ZdLT9ν&=OO-76(Ľ %=vgVZP»̽=lm>% ,  C9,0' %7K>$ ® ,93:OB6ͽCl^>! ӽ 2:! <>' ߾ ,:>!  Ľ:C- ,-7W>-! 'ٍ OsD! ͽ &!ͬ+279Խ CpsD00ͽ=ELZ>$&(+ 43KfR'>9ӽ7lP! 9'70:D $ ý !  '(2' ,bsdXLB=+%@̽ =Z[3&$!Ӽ,fP'!ٽ(.'%290@R߽(@ToguH ⋮@::K0,`-¨%&4@3   &20:9%%  &ʾ '' +CJ'µ&=C|gǩ¬ Onp|iRRRD6( ,-νʽ%,Zl`D-,2!&@=630.,+(4OnPOD!ɽ@ICKB'$4B=% &I<;&<0 ü(4CD:6=PTL>+$,!&;ʽ OP'   70 49 !!$ʽ $ӽ &O2 =W9 ʽİ4'!2HWf[&3%KI0 ߾7! &4=<:>:73@TPǨ@RJ44OX-ӽ  2-&4=@>' ! +CVH-0=9 ƽ&D6%7-Ӿ! &%6- $0!® 7E3!& TgP6-:3ǽ &22!   COZLC@IV][0 æC[Q:,=D6į 7OZ`XJ<@B=ʥǾ !%2:<@@><9:BE6!7Bͽٽ (C`gVHJQbn-Ľ 27- ,@77=:-%ս   ,QH- 7^aP9.7CC@-  × ,Tmm`PIC=7- ɽν (B> &  (-  ,3Ǽ KJ9.,:DEHEC@&,67$ɾOhmdXD6. ͽ 7K=:IXX<Ľ (((-ɾ,LWXZ^Wfa>& üCDǽ KQQ>$+7=!ԽӾCzsddV@-  !&(& %(+! Ù(4IbtvnaLB>6'  !!ʽ 670 &26$CZ^WKC3%(CT-ǥ ê&QXQD- Ohl[-  $&'Ľ,IWh[9! +.0 ,<%ýCXdP'$ ཀ ,ʾ2T[bn[<'0($&2IJ0Ǽ$  $4:- % ,B<@CJRPH>3! Ǿ '$@JC@=><9-! 2<4  .' +27<2&۾ıͽ,:CfogddH'  &  C`aVJ>2 Ǿ$!%&.66KVLPKE3-$%ľ(=IOI3%(,% =QT-  7Z]J@EI= ǪʾǾ $ (%    !$,0-   $,:TZR><@D9.-ý,,! ,ZfQ6!&'60'!%$ 6.   ',:C@-   ,6@@93+     ¾7B9..992:6 $-!  (0! %&(&!$3!+,' &! 2- !  $&27=HI9'(  '(%$.-!%..&%Ľ ,CD0    !!&(,,.+   &23! $,+    %.0%    20 ,%       !,3-    $    %,$   $  &-   &=I:!   WO^Qj,T& %(* +22=93@%+%&   %9BC8K912%9 .0   $,B92.U0.+3 !339 6 .8C:& Ȳߤ +8+89+&%+.,4.7  ,2.D3H8&%4   8?1QLC*4.0%63&- %>(=0 :1.8*8  :! 48,& :  ! -.8(K93! 3 KQ&'  .<-3F@92%4ȼӶ "*$.BV98H& &80 679&'(0  & %9*2F(.%0%%BXUrr`90ȴ%%H2@Br{omihLKV Ȉ3UQKmn^iVZi<&.̷.C?KjKV^fhXKCв· +%((%> 8064=67ȴƸ%KK^brolZg4=0ӗ8<>8mnhshnV6&ɱ :3Kf]UcXR[> ̲ê  =0 1̱Ⱥ3+.mfyhc`BD9%Ȫ%803JBvVXd>'ǸȀȍȒ 3+%2 =K{xL8X0!̼ȷ %8UU{L^i10Ӵ33Z`Vm[9FL: 9%%9%UFr|^|LI&Ǵ%<=hi^i[rQ"6ô K0KVBQ+6!&KL-Q089 Ȳ39.B!B98-FHFb@R9.&ȼȶ08fVhQ?C$&̲""B?KL1%KWL^LK9%&̰%9Kscsz`KV̲¨%2F980ȴ.4c^lP`D0%=XH^gP^9 %Пߠ!.8Dߴ B@^^y`KO2"!:=CP>@0ͣ1ǟ?ZxyiB>%489! Ǽ (=L8L*ɗ.3RFbhd2& д+8HK]>&ڗ "3=L4ش  2\LK9ȱ8VKV80ȯ 8=PEL&*.@cXn&% Ȝ0?+K&Ǣ 8&Ⱦ%K{nmVCڪ ڴDz%Z`]cVL .&Ǘ%KbNO]+>1(7(8ZlxriLЪ ?Z~n{s^C ̽ ".60Ǿ 9INC. ȓǼ"2!& "1?H@&ɴ,"9$.=Ul`I<Ъ%70%JUclQ9&Ƞ.B>& ,Khrx|`&& ǒUfhxi[L^t`0ڟȒ%?UzjV<& "3DBKV>䴗%Kh`CǠ==QLC( *3?-ǀ0%9,$.BFRcs9(Ƞ KlL&8@3CЪ8^{Lǯ-,B@-7.8UyiC䴩ȱ8Q^Q4 ȴ"Klp`C&$=UjsiCȍKrv`+*.=:J9̠( ڲ%9IH6&%1DE&3 ȥν?@8@ %8O>Ǚ'+ 3hV+ɥȲ8vsC(ڴ8L6,"KKfQɒ .^|VǢƽ8VP`hbh|LȲ 䴵ȴBhuV4$*&$ ȍɯ6(B~X9-6r|V Р6 ηK4 Fs>%ڥ8v|V9 38^l9 ǐȍ8oQ:& :?r`9+3H2.9М%^~V=>ǚ8J9ȁ8ra>Ǿ3+ UnLǩȘ.2'%=fdL&%KrV&ڥ3^u[08XCI7hLȫ>ɘƸ^|`\r`А H2΍*&8&ߴFdQ&8mzsЗKz[&DIT&^V&Ȁ*м%cs>3cL8>(%3ȒȸKs>8E0Fn<䠀KV4 B{s>8?0̀ 2"B9ȟ3&Fh9ǀKQ&8{|9,KLڗBr`2 ڠDz8L8L%XE&=rs0̍K|C%$!ǀFh|9?cL Д̨3ZC&KbV&䴓.O+Kr`ڜ% K`0.2ǂǍFs0%0ȄȲ^V&Z~VȤ䴗, Ky|9Ȁ ^&48n9 ^L0̫ϴ8d9 8ri0М%[^x>Dz 8X9hi03 .̀KL ,Ȅ-Ku9:&ڍ>%9̟ ȇ,hQ %n0ЗKQ&hxLǀȪ%i&KQ%I^ Ѐڜ89Ȳ&̆Kd KL䥩%|L8x̤ȀBV%ȀB9Ks0FH 9K`.̀K9䀀%j&KsBl9%{VȍKx&%H Ks3O0ڀ1LJ. BL%H ȲǚK+KFC^+&퍀8&̚8&%Lr J&ȀȀn08ǂ0K&$80ڲKd %d&6ǀB\0ښ%O9^LrLߢ8ǀȀQFLښ%[ՒK&K9̀ ɖKsK9ȟ8L%rL̤Ȁ s %s%xCڀȌ%C8LɅ|0^Lڀ䀌K&CKsKsڼȀJ %L%9LύLڀ.LȲ.^LȚȍ>|9X8VڀȀ89LKLڲ8&rs̀%L8L&K9Ȁ90ǂ%`%r089nj%䀲8sږKiB̀&KL^`Ȍ.Ȍ%%`LЀV%i&`V8K0rL% IBڀ&B0 8srR8ڲ%8&Dz&KȲhKڀ&L0n&rs̲VQ%&r`& Lr&rL8Lnjڲ39nj%V.0K&9&π9&&^ sK&.X`BB%`9`XL߀KBr>|K9snj0BKr&0ڀr&8L&&9KLV&rrsBڲK&ٴVa%{LK^LKQڀƍ%%Vڀ &9Z&9K6ČK&`c0KKLBLKxs1ڲ%`rhs%Vr`sL80ȀK&&%K zhLK`.K&ـr8Kr|Qr&ڀDzi$%?&sJr9KLBڀ>x%L8LȀ>LKV0ǀrLs^KV&Ȁ9%&rsr>%[KLK!%^fL|h+`K%s%88\L9^]&njKLLLi{L&8ڟmπ%&BrU%s%i8JL& B`&%`\[nrs4%%L8sr&6KidKm rL8rU`&ƀ8K.9Ȁ91ǀV@&>pLUsKLǒ48h&%x9 >%&B9&%K&%LKF0%F98nL%ȀmQ%V.C8L`UL8 KL.8C{Cu&%9r 'Ǵ&&*r`rLȷZ3%V&`"^&Bʲ&89@zL9LbL9KK: 9&L`Ls`^|4%H Q.&8=&8 Ȗ &%VQZs.KK>%BǍǴ.+r|%3*+>ڽ>&%KCـB%3%QQ99%&r9 Vƀ% B48&UBhLϴ FKh=%L&L& QXrL&rRU%91^% &'ǀ%C%& LL&rQdLک%&ǟ&ss&LK%& &^LL߀Ki9s%9%C.&Q8 09%hXI&ȲC098L*.Ǣ&8s%d&ڀ2%`s Ȳ%pK83Bs|&QK&&%=Ls%%KiDz&̟%VK0%6ڌK`d9>.0`Ks9Lڀ%%QBK`K9^LCBL98LsVȀK.%d9%x&L8d^J&L!&&%6BLK%K 0B4rL% L.L&Fr98H&0sL$%ȲL?&s iLL0 %rs>퀲LL&{0Ȁ%8%r L^0LNLp&&ɲ&7s$ U%!EB& KVH7r&d%CB9L 9N|9%9<.ڴ89s9`&&Ȳ&p!KL%%ڲ=9>̲8&d&&9%`6%s8Hn&+% K&H&C- L > %@0% &7& &. %$ %6.? %g99Ж ̲Q N69%&K`W&8ȀK+ BKi>  &VU9& J4 .9C L % 3V!LDz0%7+ >%%+E.&9DzU& &K0&%KV &0 &8&K U` >ZV%L%̲%&E%&QK%>9ڲ F&,a&38CB0 !H$&?0%&39 V4%8&4 0K&% >&8H %FQ%H9% %L.3&@F.=%&Kd 9.43 BL%% 8 7=6 .! i^%9̗4+J%C9Q8LK& B&ȟ8%0.((.C$ B 9ڲ&8 0!`.,̮!8 &B %&!O8> K9>%(4J?9 Kd4.&8%6". 9g&8&%0& K0"!%36? 3 NO.&%%. 8>, ?%&*9 %B&ڌ K&84K9 8`% J@%0&%&% >%>9-HB< >8%!K+ &8&%,.&%, &+&%1 ? "%%K&%833 % & &%& & 7& 4K97 &B%-& <3 0% 0 %% 8&  %& & . & &ߩ%+$, & !* 8. ,  &.6&, && %,(  2 %&V& dQ$$Bha mLʀOQ@Vh76Vٟ%u.$6mu%BW怀~ԀⷀJpt^~|mO'^s^gBp%+>Q+[m6OJ+7^ـ怴ꀀ܀궙 @%€u,JQI~6D~iVWL,+@W$.@WuWm,mW@@J=Þ'=եܼԀꞀـ͌%3B.Wa'.m@6I~Xp@LV@mJmD{@WL+IW{hWmJh>+p4I'D緋楐, À€̀ʀԀ܀瀀ـ>h6[%$h~W+O^WmsViX[u7Ipm@ss{JJ@mgsmm~@Xm4%@shuu7mpLB3JD ɴ4ԅʀ􀀀€Ҿ%,V[shV+6,u QQJh$g.aOm4~Jts4^@p[%h~|=hsu7$B+D@m > pO=[=b@W$B%4 +O+@[D.$  $,,¥aʼ紶篼À%ʨҼͼ̼ÞҴž ۂҥ퀩ှ܀ـҀꀐ܀À̟ܥ$@J,.[|$[,h3m3aDQ|Q=pbtQtQtgm@gs4{J>LiBXW=|D^=sQVBh%+I,7 J^վҢ̀ՙܨҶ⯴=·QL$WD=4BgaJVBW,WV[~X>m{{[WuVuWummhubX^~|~uWJLg$Os^@3@IBD7.@@O@%=b   ᥟԀռܴٶ܀Հ٪ٙԀܩʱҪͷöɷ̪ ʶټ I%+ 4+66%g7>@D4'+7= 4,6%%W.=$++,QQB++I+V='+Q6@+7LI@V7++I=JQ%%7I%+$Q'%I@p%DD +W%.3a%^ ' % .7+3 %V%L + %Q%%  3%$3 %4I$+++$4+%O+@@=..7Q=+@@O%$+ @3+$ %%$+=  @%+=JQ %Q $@$%=++J % +=4 %3%I % J$%+Q+ W%.%+J+%@%+ I%%%+%3 %   $3%%+ %J%4+% .+@@.3 %+$$$4@%  I  L%3+%Q$@I+%43@%@+վJ @ 4+3@+h++%7@@ $ +3%%%%=%J+Q|+@++m=++O@++.QW+%%J3Ia+% +4$ @ 4+%=@@++%% =@4+IQ@3%$ %Q$+rockdodger-1.1.4/data/paused.png0000644000175000017500000007076013706632107017053 0ustar krawczykkrawczykPNG  IHDRϿgAMA abKGDC pHYs  ~tIME 0 IDATx{uEBo@F$1 /!Frps=c0}'Ɠ[3 ]3/e%BK 8ټ̼wilZad>k+ȻPZÄ\JP[? ܳFri)$J5i ^c.wڽRT.0yPqAXWKg ] s$ds..-{lM  Q4YC.;sIח2{ҤO[IPFMl2+ /kzLves ĹoMy\>s7Idi6=zf/H4}ݵnNRK٦%7[~vK _ly1p!{.iR fx[z|O:`oN6L3{s#0LkvnzS!ttAԳ! TM1霕 WqAC,"g>1ofg{g0{@8jםۿM@g `KdlK&l{?/ _^8]U+ф$GNCר\z1CȒ(gzaF[ F}>K/3@!  :^ kAоo&QKg/W4&ե4HJw5d.!r_?pBCq/F`\S:}Ev~fo΄V{}^K@^3H_Q3@qQNbIHI`;2~nAQT.MG6T9!HFTDϬ30r' p0.= §PT.[T%& 6;H v :{uK*w̚^dt6g\7=sFQ4{ݴTdtAT.gy QA\nk~CçوY R&PHǠHrʽ u< |@E a+0h&'a$%q~!ZZ7K۾!87eAb@?1WT.! ~AX:.śedʥOPߖn p<٢=?m5 o27O kcD߉DҾsOtd>_7 v [Q/{3zqa ?I\Tvri位"`0P}z N'.dO ܬ KI/%ߴs'+s#I.](f\אZ2urc~"w,*uE40af%uʕvC0Bi?nNbOf`@ oA=~LLgA%юҪ yi5 8 y poYR`: BO0Wi>y)Q6y :iᓞ߸ |Ul6Ge\MIM6ٛof~|RV^ƀm f!ͼ+hB/cFޏHjSm.nc"4͞73UC ݳBX~3%/O%vXT.D 6^A`1k坟f4{vH !- ~[׬|Sy$*NA{ p:Ol0>bDNŇ"_ʥ3g'Gٛ^z u ' ڙMU81mIC0xIaӐdEĚ)8VMCr]{o O/#RtL.B@ǗY$'Ӡ*? ܨߵ^@xzi_3ODDMٓZعdߗ\#(!wuʥc=8Xb>?c07?3sAG75p ;"fX<$$(}afosyv{=D^q>0 / ~78'6P$O`>xf bI ϰA}M3(xHrD$asZ,v \ǟvAxfbUSfG $%uH9sh`S0L<07EҿA%ȼHu߻ n{{ MC '_&BfS[4n~\IT.WlZzSwۜoEKmX@eu/e\oϒU§NߗzQt$_F|7G~=>`0@?.&it?x M:3%TdB6N3re?p_P F3Im ~LF݀eJ݂ #*.Wx~3 *~8]3{᧩{s' A:Aෑ|q?#*f}3?+JǮqDrA6vDŸ_s:ݛż{{ԀdC]< 8Ȟ~x30h=%`@KaBEHAw9K=I" `DYޙ_M y=#wj=/ +TH(0UOwtl?R,:UzQoVX!i{ +"6-߄,?9|S١3uNA  `px p>Hs O}V'xF $Z$"m3p4q2LD!2HffQMɧ^=f٩eg ; xop5II0  3 .k$Pdw,-6p}n@Kj; 1j fxFr1~$A.@]^d#Nֹ |CA෈: k8'6#@0 y@dИGlt1E0ئfMu u pWj1p ⟨ k~6I}4MsB [M#,Bqc‚ js^ }n`t;E=?"XTn<肰 `NFһЧ]nV' D0AE6f%59mާ;zQ3>hJen 3 'zY2~}#{{Ywc{})*zOZK 4K/(DT.IH\uDbI(GK I" `3c`hl};5 U#-XQ݆?u.gp+f~4=~%Qu;2l'@GXVuM#ov/@*Gɧ^߀&N-a5^w k/`& kL[.g,ʥ( d@$r: rO={bN\3"RIARܧBd L3\BC aNF#nʥca׹ pR13 .f:ݫG37"`sC!"1h>S놙'9.|;WPT.=S?ƽ+\yo |J5 r?u5' ksYT.E$lQT.\>$f*GNeKT.<@ܐB#0'D5NsF܅ћinZTsD_z{]P8!mbY,#IT.݊pMT.]Kw`&dafSF~pA]##]yRV(6nlYKԾ:R| &'F`F ~HYHc{\Y5weN >/)Y5wepymsaQb0v_0ͺ.FW]>K/ C̭O"!O*FV]H(Y8n`VǧivwpGTK:ĝ!\)UEߑWyB00>u^+w_13n!D2JOpؼ B@ei wSJ?K]oF7߳rw[J k[eM{1\ !><KwAUG7HJb0}~|T.SdrijcV P'i&xuWGon kCk«* ׾1K>5S| a7F\ gQa]8~3.v^8-7rrynbd=ZVwS}Tϩ3_?nUz\ھ&3 tqrdenw*S[}S5i`mYP>KO!ke%)τ:h;*(r2׾PqYee=)zaQ\8=c_< Db O9 @l035pC$TK_>'>UAWԏҺNl[Qmɉ"S*/=llEY=g)2#v w \S0x)78I-aSdr$)W걷\2Lb;eͼ 0凾'YDKf\ ÀYtxj60yOE% ]Hj<0سz__^zXWuy^,#ԏ7똗3W}l˕^U{UckW]7| ׾0cX N9o…[ޅ \܎~k}wj>=#W 0OWn)εoԿYueUM' Ec /}: >I03S$-ae9&?nf }8e},=2|^RZGQm7b70vfǁ]KY 8@sG+*.Zo3'!VUsWyFon%y:Ȼ=3C:ѷ)怨&1Mͳ W#y`08S5vT뱭HЁs44! ӌ?8fTK}y@QTE2Qi%{$!̀ IDAT`Q{CzX1e=Q/GMAa~ y'yѳc9VW`:s@m'qqgf>z4eP[{euÇA4"ɐjn(~|_˴׻YE֙R&dϞeM;2*l@ޡ tkO H342BX?c6[gyqh^ 0W L+q/ŕ, I &zo캤:9khy$dc1?& *$nGƙ2 h~OW]&TF9)?@fRխil޺` _G(|_nhEN|~=GQ]q< /㯥>D?%Tm@ 0Xv aD4ǁz^A=, ݘh0sm[OTM%-͑`a|I|:b3ݎ7 UT1I>39AP OH'yMt{`xLaO+xN~]%unK﨡tO3يHz;5Y0~-Kҏ[)p~$BF@_`5W;bT)7}= =Nc[yW:1dm"$ԝjr,dynFP{ <Ͼ&/l^NHJST}lPjaZqztOX 0ʊa~Xj#PedQ1QmqI!&G8F Āq5#߶ق MH+*Q^JtiϪ܁^ ɛ& TiZhIj"ozfY4sGyD{:S.c\ $w -TNj^⅒lnE&.Bs|yܬZiʆ^?|?6ntߔ,>CgV6k{fyv}Yb"().7FRul$.1@]ܽHP_2nP766?dܕdžs`ҮI߻g RN:6ͱKnu1Wz EQKMs,).>iGV]Y eW颈EHh]j(ЖX|@dkbYWeME#S?o9K{Ҥ=ytJk0@`QBS^Bo"5#>?FŨ\25!c^$ŷk\Q0' GT?^$\wQ̨m#ojJi:U6d㑹]]ܬZc, s)ش vQK=@,܎:VHV}=Yj'kR3k/eAPT.}jOaVѨ3h u/?@,DnE'zaV*ϳ^)1k͡ A cTVp_7\ ;/"~ }88qd3);] |`x igܥ>~ݶxD( *ww. V3Mf z\Lň 1|[URo䙅j Z -]S]7N3~RB[g~h@u:YC+qMS OHC]..l>$Nlhwl1)} v@jQѪ̸c] v]w6 E$S mԟ!q8\feZi;^ 1GQ)ca;-ݔtE@0uoZT| bw~8[苩:Bbr`|ʦ_.ߵ} ՄLbs[¡e?pgT.>?i4z{d1Ie2d H2\:Ok7{dm2 diwƱnVWSpM7 e}f|)y:W=X1x C C };f!"&7o.zajT~YylFˢrfH,yd 7VbэuFmk*)lv~(wqDj76P\77).~(!?ӳ[&qO2SNCԷsViD-yh7ySqYe~wm9ރHtw1Y$]~˯@e?GKza?ຆs3z@kgZK CKefJ&DlGQh͓@ i=c%bpxYO=YP256$RbՐ/bäUw?FJWyWw{t2懊^Ifz%wч4-`fyNg( -]^c 5Pkty~>9!eJn$9Ex~\D>ٍhdY@[xw'U""\]i'GՎݬZog_xiE+rAh5$p{9C3#؞Dͤ761jh^ȋ$Cl /{RR\ꡢu*,34~QV0#͊RF2l%J[T#j)eܬZ5 f'GfB4;ir+=g~O>Or6D7o36א~#^ iP2$itѶӤF脡zQ4q aHA%kH @"d`Y?@ eJII30 .5vBEIخ}kk&Qn:I<<;%T«y뱉i?֡N^\: 3${| 1m$$0:1=Hwè&LR<_d= 65^{e(9p ʥgv {ۨ9 |:(X6)gW"ͪUy2,x :ak>_}Vu.Y7<{kgH2_DR!.7$n;P :h!]FQ 1yd<S gD~]#;)Jo꼧%:n%AG.1dnGҐ,:)haKT.݄dW=ҪQ"BԱHH _V9oS&^nmT.9/v5*~Av?Dd&%VbblmxfZAn&"b75UUZhn),aAfj;@@-bB :wWk"<{U5ބ r5}Ȗ{MSD&"dm0߆~yʑ 0+bs ϩ̱HkG^^K}?! I<y?ck<" mȂFdj/c\~չ{VYZQXU}lyKҦmg"/v2?&ı(ЩsBN&{lf)T3j9hHvP/Dx bG^KuA_ʥ瀋OCYCpۺMU%iNcmoez9RG|= !!!$ppKkSI)&+ja xHmCrı\QB)z0`xs Zrj&*'"սjrRy XK+}Vp-$*Uu5wHo]ޞ?@%"kX?Jq^;3X[:v` ILpX*z P- ~#7z?P ] 9!x2xVb=t򩸬)|EBAjem'Mʋ{ tp}GgEì:l_bSd6 ҹ& }HBACWBC (PMEd}# dzd0>%~9v`08&avOV=?'+s~㝓6uL\2pIgNDh, `73u<)l1[=[HV^9$N2 2/CՑw$J^[$,jH"ÐRD$B/ 7nqd̛;HT ͮޫkQA\:F9iJE;?ӑ aya02g}u֊i&^ysF>.&lsc`1M?7CdvDP}Q^ؐǚk X zB ¨~0Ff&k;-S-2zS%^֓mɓx~ןzqBN7f5 bE2{{ D]kJzlĦج2uIv_6b5;̷IqtAƨG{J[pÑ:%"t~6`~7F;h\Ȼrܖ30FV//mTt҄Oӯ4,԰vcf&*܍Zsa" w4-72_dҕb!i]fMrҚd=Y I"zN T3IH5 B#08YF:Wo9By ܬZuh`C")#|# p @Y9~\3VmS4a7&7JI sL$2612%BNOLښL+7nP/}oS&[9Vww?՜EqؖLج8a Yݻ!*/Wj v 4 z̄$>H_sYrCԖ!d LЙ!nϐ|Q2#HO 7H'22)cVOB6񙫒jV{֌1y1пYr̤ve*:rIhvJ EogeIxStVYS| ,g=+g3?pFW~‹ R!{P(gtҎYHU;'qOp¢jyghaV 2 _HLRq@e$P]^_eΩHTUL%o;B*wkU' 7w@c?W`Zr` ;r$Ǐݢ\H #ojrGACYf# T!,A.-gK_i88es ΂8Hrk$%W*, GWW%-/V-`3I4\j<˚6IA:rٞs0|znQ^JS v;KӘ;з.-*wIH ͸cH3rt+'q\_N<ҥf!0ŸyuZrOwQyF)3l:YlSs&>F_ c`MWa.PBHf5/wW=kW;~8*lwma#1,sIm*!y@ nPsiAY <4*_zksy)ZI\XT-R6}i\ĥٜړ&\ YE-1u[QI&~?w RG1˵;HF`\c0Yfw܁Վ8`:Ih],.+-00DV.]7e_ V#xqkɃ*HfkNr@uG2c <*PFs%BߊǏR{ȧ ' rSQIS1>RN;M0aVf&.\s M|Ɇ߭jE n9sw#.+ziQ  f!+3e=z^2_COE^i> 'K6FE&kCh y]̒;xxS)KE_% k\fmEE.T5rTXP{f2cJ IDAT6Ruܛ%iCk'; 12e`QT.-VmH WV$ɉd|FD}v;N,`º. ؓVӤĥZv tz Y#H`+mL=-d阧z2]Wq]TMS_ *@-4QkId47 5*x5FJvx~/PA.pѯđ #T6M! IIr7.2*?vKt\zaq^;Hh#\ g9K#eSd:w_&~=ц5d<EB}E|Nzvw[gKCGde'K6[ F<>;l>ݸ{GMF ݌vAh}:Oc|!,ԗh0 Y|3YH"iĶas??{9 W;J:R}Ԍ<}06[&rf!}i=8[!#@4Rh{y)k<^1X&,?R HhBØS}"Qq̚VDК{)e2uzl1qm豧=ofQ➣(6XQt qc87T fI%ydIv1qkx{>LڀH/E{-0W5dS_LHJa}9ZL&uyMi0 P>m] HVt =~fk@):j=7"hYjqqCU/I!W"D҇T=f=@Xzc@aiȠja tC%L*֙QԬIx#b5/DQ!vJ{,mo$2p^)(Nj-$G}=Ĵi{ f0;-X_ľ(xa2'1 z"K'ڑgw|h!,?w@nuW1Ω\nYME&w"hQ5a/6=ŋBBz"sޱt6%-Zf!d Id4^Vj/1m2SD8׀~ݎVbFrOF6f@10v@ EX(,m6(δ ~4ʃvK6s[7C{LY ,m+[Iؽ}t0MYQ󟎄l|d9Klm`{[;I,&!#.sO6ސu,s9}{GY=w?YMDla<=-"O4SʥeHw e~5왏A,t m$2tfeIv >F^(毯XJjJK'(Yȩ~6^bgJ@cjJ q]rD$93G6ILbcYvbf.qˀlhG-`޵P,2^>$t(7 h?l LCWzM9t6.X7܊c͊lɈ_WlZK54܁z[/'vםx̨Ȕ?f!v~4=gގtI@@BiEWf+;A@ ϔ4 Y5'z14*.X9\"sied R}LdnO23\˖1|H?0 .q׵Ω\91| y-o^ӥ%J^6-st22E_W/ L}O&[cƜ0GT)~ ͻ5# O9{r./Հ?%/T3(,davV-X'+'3 8b R&!"^D4=+w Nd{`EߙYȲ0,p.qfs.o ~lҙIœm %*4&̠Nx޲?\+g3;h7z0 %bkH#CZ1ly߬3~DJ$Uu2 3+!y5\T3;g/cD.@}z:O%$I^Yށ` XPŵ.26 Y6qqk Mq;6\0Tؗ3@ I[~VU#ÌP*)^Fu*X L+pAx2$@#^FMr1@,08i4#ѧ}J|-ip4$zHuͬ¹BnFyac&ͪUNYxT_pyNs_Jf%ETbGߋg Qd ·p DMܴȜwt6qCwPdYB6P^6Мf9z4I?ڀ՘f}̀:f~cXjȪOnm&gELuA8-Bfš~s@+mnsznォ<E"&6 G13 ͤE9p/n&*o;R??]JcAUDm0m l )W6ػgJvx?z pl3Z3_}^`aSnBg[Q;g7XUs&^h;+\T4 xK$&ڀu4jOmkV`*d ޚb",Vo__XT-3i{%Eͯ:.fժM*u?f8{`_άl,qi!y7g@ -Q4 * er_d3 $,Ksj=9d74A="ߘ\Κ#~}@VÔhжk֕0 C.}>CfƚHT\Vٔ 4zdn%*x-l2;&Fx`~70xFC\W=$aļP[ )lQ}ٌG !xj fQy3زͪ |zy `T<ij 4uhgZG4tfeG^w7eʥ'mB HV!{~3pՀ@5í[cf]4 ಉ;e%jfvs`W>$s$>H viҮkVFN_@Z)1jUw9ۇWw_A]l5,?zKp  p>2ActBЙ f\fZ 1A=/rZ;h `7 H.}坓0 E}&8O#@2k>ĦmR@G8.ڀR6q]SaYh1-*¢jYL Imi~!6F6*L[}ʦ`CMB]E@͇X_hʆ 0ؤ2qF'YZ>WcR` >_bSП5F~sB&Z?\VQNOГj^R3-h^ϑk ia7ٮv ‚ڋLލz?4DUܾK \\K,w{Vyo)?kPfukQtnpsKɌ>:ݬZue2݇f¢jpt{ٵ릭޾[ kC֭Z߅heHrV"v _fK]'F*>gIU6z7-_T/`N35;5jt ԟ螬ީD+Tf2)Z\,?6,nʥ+e0$%כZ:r'O7XKV20޵p᭽LjHQ?5qGYӠ(Ygh^/Z\yo Bv3p 8x uv k^ߌ y*hfժ#[ ׾QユͰPy~3uv!vUS3R&f.2jF _9O#07ϸcґUsWVr?Erߟ~ݶR%͈ t~2nVGQ'#iœNqd/hJlOGn׌t yf,dv- H쵈t;1ZDdn)-෉C7 [Dzہ %QP3T dś BsS#hZ1mlSy~ U^S3oNsAn ʥk]ޠZm#է.  62ϐ7?[(nխ 0Mr5S]ZU Q4' c A:3̦^ | tk5UnKE tI3!{Ax^e#&<:9USbO1~!/:DukL <NEJCE*~_H=7ALẁlg vN¬A1?r{YQa=/3 p]'92s0=o>(*>aوC,:dgm~ F_"x30\'| ȤKa6 ;c.9Wd|8E]$u'G^đ3%W_0O]KnG%D@}&wJ:;rw5* "ⶠ ~f6"~s6>Oqx߄GS:TALuq1ri RBf3E|IcxUD'4@@%f{?O?ߩ?Mj@0~cV5D `l;}@5qV貓~s+p2h:&^@݃.OaL>A^!/b\s4 }vHi)!vEȄ~1)&!ozz?0ċ1bn~@l:3^"ZA `l޻|VHڿS081 XçN;܋wи.w-,BqĀFz,.=f]ު߭Ae?]Wc!c+N̊H+|jx $a_"Ai@H'6vnŞԭ[UQ]}suY+)ٖ *rs?ِ "݉82 tɑW&@#γIIDAT:[2Igۿ!k ZM~!b-b6 88X7g 78Ame"wM45ңxTql1/)?@?_ȅ,5c!~.ˍo -Wq8+ߌ^7#xh HA1d1m_;@^552x !ߪyn_R5U?,dcבkgCR Ôs('fg~'I^!ѭJHFɵĴժ5ᾧ ^F.t"t@)Ģ??&V;  ^(j!!_ !zJO3SZlU#(r߅>`|[ 5$U <-8P1|:q:GRhKsCL>|SY;[AzNZ?lY9d?1?d2 1W|##{hwx*ڝgo8]El ER#ij%SH:"qlRAˈy6O}-)w gMt*m 鬺@օw"B5M#0 SA7Ʋm2  ;,!}G!iԅmOU/50|8^x@[|N@߂} 4f g|ռ4!҉F" _lBv6HNʋ)=J FG='BhAc.GFH"B_u?{Wsb9k%%۲XYMB"?N\p:]?Uh>_GlTeOΡݞGp Gd .ώkUW`g3|,xKH;=HW/ߏB+b6 $'>eu;5걑"Ž N!ބ16oy'}, '?qBkYe(W<"1|wp OV]*sYUG+&2N|wRNj,eyNMz |hBr|$~oo ߅w) ,bJ(Z6 B!G]D$m{32 H>%F令FQaYkHW ]0rt:`Tc%.;@-~7)mЌނ]{JFRadrڽFӞ?a9)s>pbC, _mi.#! (⧑b\Z4Wx,Ij'Y'ңo#Kٴc i?6~}cCE$Sgxuw7s}]H{D6}gVRS]olոKJ ЯPCxv+kٳ3b_+>cuJw]E+b17uQi CWDC$U[)!1RNR_C< rsa糊]6CI6`0]I!7Wb輦J^6#>b@fO)!\w88[=X]RwH>܁Dv s49zN)5E?ߜbwՁSzi 7+5Iz=V9%.^sݎU௛y!q PO罶BTDc2P\DS8!1JMTGt\pz)TK;k/"C6T(nlƨk31W0@EWeG}]BlbYfqzte8t_9gjG]&XE!Z>)=Jֲ|44@$ Ak[iNAp:_qgQjgX]ej"1 ~!kv}5 ͝b( %d ]oX`̩v1k@A2eZWSR]@UU"KI tِ.#zhνoBF[(Lq.~'јo;O3zF6uThYtGvy!!{j$x+"nc?_]F f0/nD2Xm aa hƸd@kH7Xfn J5?>FbYA{ HZ\Gh1lH*[B0J q4ѽ{o@9mQnLYh!o *sC}>9K.;_Cq8(ljmjȦBcvuvbgz]&ɖRs=|b71rm9='16o k9Ʈq^qsjCaZj_ :o. WMPtcY+شIcMeI)Vh:/3KY>r=StV"z-/Ux]@meKJi=4^# {!%wE$JsV::r~fIjMv$ۆ}"Z֓R TYx7̹zFW(KϺ_Óh!E|= jA)_ϹrJI@W-چa GpE?:Rc|0.u*i(9NhR=̏FJr-=u>J̐4>tZ產|4|sx=*;ȑk] 9Ů!$}HuvF@7]iqTLE6s!<&Er#&A ( lXfs@q-ܓeC=1E$[t!1y#8g+FǮNI8&Ĕּ@̜T'b*uoy݇12 X?Kk[nV EmX8pu|F3|'Q&wE\I$(׭ꈠkdMZG+FIngM7[mh"Y t٭wX}w;Un6XϚ=\TFbA]0דTml7h-b[u6Ŷkn40]o V`Q8 SeE5u@߻dKI$I$If#"$Iv8Hy$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$InL]"[@IENDB`rockdodger-1.1.4/data/fart.1.aiff0000644000175000017500000024621213706632107017003 0ustar krawczykkrawczykFORMLAIFFCOMM@DAUTHc64 fart generatorSSNDLotgqtvjrqunotpsmtpsmtroqqrroqrqqotorpqsorpsnumuopsotmtososntorqpsnumumumunrrnumtorpsorqpsppsosososospqqqqrososorrntpptlvmunrqpsosorqqrorqptmtorpsorqotorqotntoqsntnsqprprprprproulunsprpqrosqosotnsosqprprprpsntntorqprqqqprprprprosprpqrotoqrprprotorotmvluoqrotorpqrqpqrpsnsprprotnspqrprpqrprqosqprpqrqotnsqpqrpqrospqqrotnsqotnspqrotnspqrotmunrrnumumtososntpptmtorqqqqpsnunrrotnsotntnspqrotmunsppsotnsosprpqqrprpqrotntnspqrosotnspqrpqrprpqqrpqqqrosnunsosotmvlunspqrnvlunrrotnspptnspqqrosososorqpsorqpsorqqqqpsosorqpsorqoumtorpsnumumtorrorqpsntorqprpsnumtorqqqqqprqpsnsqprpqrqprprqpsnunrrososotnrqqqrosorqqrorqqrososppsorqpsppsospqqrosososososospqqrprpqrqpsmvmsrntntnulvlvmspqrqprprqqqqqqqqqqqqqqpsosorqqqqqqqqqrospqrosprprotntoqrpqrpqrosprospqrospqqqqrospqrprotntoqqrprpqqrosososorrospqqrotnspqrpqrotntmuntnspqrpqqqqrppsosppsorrosorrprorrotmumumtpptmtpptmtorrnumtppsppsorrorqpsosorprqprprqprqotorqpqrprprprpqqrpqrospqrpqrospqqqpsorprprpqrpqqqqrorrososospqqqpsorprqpqrprqpqrprqpqrprpsntntorprqprqqqpsnulvmsqotnsqprprpsntoqsorpqrpsnsprqprotnsosorqpsorqqqqqqrpqqqrpqrotmunsprotnsprprotntnsprotmuopsospqqqrnunspqqrotnspqrpqqqrotmtpqqrososprpptntoqrotnukxkuoqrqprprprpqsmvltpqqqpspqqqqqqqrpqpsotnrqqqqqptnrqqrprnvluntnsqotntnspqrosotmumunsospqqqqqqqpsorqprqprprqprprqprqqprprqprprpsmvluoqqrotntnsqpsnsprqprotntntoqrprqprqqqqqqqqpsntntoqrprqotntnspqrpqqqqrospqrotntnsprqospqrosotmumuntmumuoqrosprprprqprprprprpqrprpqsntoqsnsqqpsmvlvmspqrprotnspqqrosospqqqrotmuoptnsqospqsmunspqrprpqrprqotntntnumsprqpsmvmtpprqqpsnunrqqqqqrotlvnrrorqpsppsososnumtppsnunsosososorqpsnsrnumtpqqqqqrntorqprqprprqprotntorprprqprqpqsnumsqpsntorqprqpsntoqtluoqsnsprprotntntntoqrpqsnrrprpqqrpqqqqqqqqqpsorqpsorprqqpsosppspptmtppsppsnunrqpsorqpsntpovjxltpqqqrpqrotnsprotmvlumuntmumuoqsmuntoqrotoqqroukvnrrntpoukwmsprosotntmuntmunrrorrntpptmumumunrrorrotmumunsppsotnsosotnspqrpqrprprprpqrpqrosospqqqqrorqqrorqqqqpsorprqpqrotmunsosprppsprpqqrospqrorrotmunspqrotmunsosprpqrqprprqqpqrqqqpqsnumtntntnsqpqqqrpqqrpqrotntoqrprprqprprqprprprprprqprprrntoqtluoqrpqrososqnvluorprpqsntnsprpqrotnspqqrpqqqrpqqqrospqqrnvkwltpptnsospqqqqrospqrotnsqotnrsnsososorqprqprqotnsqososqosospqqqrosntppsntpprqpsntorprprqpsntosorqpsosorqqrntorqqpsntntntnspqqrospqqqpsppsososorrospprqpsosnumtpqrpptmunspqpsprososqotntntorrorrnvkwltorqqqprqqqprrppsotnsospqrosotnsososorqqqprqqqpsorqprqouluntntntorprpsntntosntorrosnumunrrpqqqrprosospqqpspqqpspqqqqqqqqqqqqqqqptlvmsrmvlvlvluoqrprprprpsnspqrpqqqrosospqqqqqqqqqpsosorqptmtpptnrrotnsosososnumtppsosotlwltpqqrorrospqqqqrpqqqrpqqrprprprprprpqsntntorprqprprqprprqpsnsqprqprprpsntntntnsqotoqrotnspqqqqqrorrnvlunsprprprprprprqprprprprprprqqqqptmumunrrnunrqqqqqptnspqrpqrprosotnsospqrpptmtqnumtpqqpsosorqqprqpsntosorqqrospqqqqrorqqqqqpsntoqrpqrotnspqsmvkwlunspqrosqprpqrpsntnsqospqrpqqrprprprpqsntntntntorpqrqqprounrqpsosorqpsososospqrospptmunrqrotmunspqqrospqqqqqqrnulvnsntorqpsntorqpsorpsosnsqprpqqrpqrotorprprqprprotnsqospqqrpqrnunspqpsotmtospqpsosorqpsosorqqrorqqrosospqrprprpsosntosorqqqqqpsorrnsqprqprqoulvlvmtorqqqqqqqqrososotmunrsmuoqrotntnrrpqqpspqqqqqqqqqqrosnumvlunsprotntnrrosppsorqpsntntoqrotnspqqqrosorrosorqqqqprqqqqpsosospqqqptmtorqqqqpsospprqqqpsnumtppsorqpsorpqsorpqrqprprqpsorqqptlvnqsnsqprqprprpsntnsqotntnsprotnspqrpqrotnspqqqrnumtpprrnvkvmumumtososnumumtorqqqpsnumtorqprqpsnsqqqpqsosorqpsorqpsorqpsorqpsntorprprprprpqrprprotoqrpsorpqtmtoqsosososospqqqqqqqqrorqqrososprotnsqprprprprqprprqprpqsmvluoqrosqpqqqrospqrnuntnspqsntoqrqqprprrnumtppspqrorrprpqqrprpptntoqrprprprpqrotnspqrpqqrotmunsososospprqqqqpsorpsosorqqpsosorqptlvmtorpsosorrospqqqqqrorqpsosntorrosppspqrorrntorqprqpsnunrqqpsorpsnuluorqotntoqrpsntorqprqprprprotmvkwltpqqrnunrrospqqqqqrnumtorqqprqqprpsppsntpqrppsospqqqqqpspqqptnsospqrospptnrrnunsosososososospqqqqqrososprpptntntntnsqprotorpqrqprprprprprprprqprprprqprprqqqpsosososorqrososotmunrrorrnumunrqqrpqqrosotntmuntntnspqrpqrpqrpsntorqprqprqproulwktqotntnspqrosprotlwltpqqqqqqrprotorqoulvlvlunsprotmuntmuntnspqrospqqrnumtppsosorrotnsqotorqotntoqsnsqprqprqprqprqpsorprqqprprprotnspqrpqqrpqrotnspqrprpqrprpqrpqrpqrnunspqqqrosqprosprpqqqrpqqqqrosppsosorqqqqpsnumtoqsosntnumtntntntnsosprpqqrprpqrqotmvmtntnumumtppsntpprpqsntntnsprqprpsorqqptlvnrqqpsppsosospptmunsprotntorqpsosorqpsosorqqqrnvkwlunsospqrosotnspqsnspqsntnsprqprotoqrprqprqpsorqpsntosorprqprqprprpsnumsqpsorqqqprqqqprpsorqpsosppsospqqrosotmumtpqprqpsorqprrosorqrnvkwkvnspqpspqrospqrotntntmuoqrosprososppsnumtntosorprqpsntnsprprospqrpqqqqrpqqqqrosprpqroulvlvmsqprqosqoultpqrpqrotmunsppsosppsososotmumunspqrpqqrotnsosotnrqqrpqqrpqrotnsqosprqosqpsntoqsorqpsorprrorqprpsmj[WJ:+nL+c7Hk0t-^v)@>4xSIg/GKVSSB5ZckGrY~=? nD>]?wQIT U 6 $ C P I J_7 f4gCr0n? 7B>b.s:ka#b w f SK B %o7}$+gjG(;(^XK -Z t Q":H^|Lj7Zm} j 4{@6DD|# ^  t 6 -~?D.P35`%WER$ !y Y :m1KP74@LzF [ % D-BoEJ : 7N6J1DrA I Qt V8Hk c`~pn}jTRTL802( w u m d [ S O F < 8 0 ( #    z v l f _ X R J D ? 4 0 ' "      z v n g d Z X L K @ > 5 0 ) "      y t n i a ] T T H H = : 2 / ) ! !     } z u l m ` a Y T P F G < < 5 / , &     ~ywnned\[RQKEC=96.-%% ~wxnpfga[[TQNEG=@39,/&% ~|wsrljfb_\WVPMIEC>;832-,&%   yzstmnhfc`]ZVVPNJIGC??8<320++("#  ~y|uusnohkddc^\^UXTPRKKHFDA?>9;452/-,(&%"  {z|vyruqoojkjdh`d_^[]VZSTRPNMKHHFBE=A;=7:3612.-+)*#(%   }~z}wywtwptpnphpfkegedaa`_][\YXXTVSQRONNIODNAICCB@@=>:;9874515.2...*-(+''&%%"""      ~gS4fEb4QWC[ ig [.q3du$.ID*${@,U.w> O߰(rݪݠoL%z_D8"|qdGB?=" 5'K8T de(/,R'!zk&{%f-I %jv ]%_Y+om _ C X 2FG_Pw) vS\[|nUfB'G*  8 P(#HTb$D*:l=jsC  0BbJyJJz  ^ 0H$B([@OQuhc$ucz H q *BLUu}H}~YHW|C .Y}S m!w$ i e yw"AkM  L @).3B,D:'+R@0Ah_M^|~lx #0527LLPNfckiy$*/49EAON\Zbfosv~ #%+05;>DHPSX``kksxy $,,46HRLLT`YZajjeouztz  (%-*1358:?ADDKKPPVXWaZi_lhqntvy{|  "&&**0.355<:?A@GFJKMRRWUY^\d`hdnhqottyv~{  ! "$&(*+..30576<9>>BAEEHKKMOQRUUX[Y^\b^g_iejhnjqorstvxyz}}    !!#$&$+&,+,0-2055678:;=<>@?BADDEEIFKIJNKPNRPVQXSZU[Y\[^\b^badcfffjfmimmmpprsutvxv{y|{~|    !" #!###%#&&$*#+%+'+)+*-+,.,//-2/32160653855:4<5<7<8>9>;=? 8itB!*M o81 - t_8 >  r  Q G  (  y  o ` h f \ K L Q C 6 3 : , !  !     } w p j i b \ T U M F @ > : 3 + * &     ~tvlkda\XQQHG>=55+,$! ~}sxjpbhZ_TVLOBG=::,3''# }vyqmmgcb[[VROKIDB<;630,(( !  }{uvoqhjcd^]WXQSJLFDB?;:723-+*&"!  x|svpnmiide_^]XZSSSLNIEI>E:?97622.,+&(!#  |}w{svqslqfoehcbc]_Y[WVTSRMNKKHFDBC>><8:6531.1),(&'" "    ~{|zxyuuuptnpnkkjifhbg_c]`[^W\VXTUQTMSJPGNEKDEEAC??==;9:65725101/.-+,*(*$(%"%#   ~}{}z|w{wvzp{owqsprnqmnmljmgkhekbhcddac_b^^_]]\[Z\U]R\RXRVRTRRRQORNPOLOLMMJMGNFLGIGGFHCHBECCD@D=E<C<A<?<=<;;<8<6:95:48546261413.4-2-0-..*.+++)+'+&(''%'$$%"%!$%%             r]M5* |X5j9m.~D6FVZS/k4Px /2>38 YU\J Nk)T*sJb?$ oQL0  L  [tbt=zS>b6KK(;M^)pH Y=l6  'X K 0\^ c4H[x_ XLN& [ D DICj`). 'UH> kq E1(NP%?0q l x l ttR I hVA@`2; .Ya ^ Rde{^'Ny$A *8 y &6'R|fr ;IHActuq""+?LLVext$':A=@C?EDCIEIIIMIPKSNSSSVVVYYY\\\`\c_cccgcjelhlknmorowpxtxxx|y}}}      #!"!##$#&#'%(%)'*'+(-*+-+/+2*5,5/331626474876;5;9::<:=<=>=@=AAAD?G?HBFFEGGGJFKGNFPFPJOLONNRMSPQSQTTSUUTYSZVXYYY[Y\\[]]^\a]a_`babbcdddegcjdjgihkijminllpkpoporosqsssusvuvwvyvzxzz{z|||~}~~tfVA(c>bF(^0>^AI8Zs>xR7 w f ] \ f r  -Kq<mJ#pji$ !/!"#$$-#"!  8VV]y eN?@$+ok3=|; !f ^68 !!R 59PRis | } p \MTq ;"o%xJ6G[:N)" M 'l<_z~DBD+   jvns PQ@O f{8D+ 6 ud y c/Jl>57/0(+!# }}yuumnhfc`]YZPUKMIED@?9;16,/)($" }yxurpoikbh_b\ZZVUPQJODJBAB:>7734-1(,$&#     z{yvwptnpkkhhecc_^]ZZWUTRPPKLIGGDAA?<>6:634/1-*+'("#!   |yx{wwwsvmwjrkknel`k_g^a_]^X^T[SWSSPPOMLKIIFGCDB@A=>;;979472411..--),&,$(#%#"!       }}}{|zx|uxxqyoynvoprlrjphoiikfigdhbecbab^b[bY_Z[[ZYXXVVVSVRTQTOTNQPNPLOLMLLJKJIJHHGHEHDEEDCCBCB?C<D<@==?:>9=::99979676555434131110/0-/.+0(/(-))*(((&''#(!'"##!##            |}}~~~~|~}||{}|{z{{zy|w~u|xzwzu{uywvxszrysuvtuutttsstrtptpsprprospqqqptmtorrorqptlvmtoqrpsntnsqprprprpqsntntntoqsntorpsorprqprprqprprprqpqqrqpqqrprpqrotoqqqrqospqrotnrrpqqovmqsnvlsrotkxmsnsrpqotsz~0Tm#Mo3e GAVJB 6 M  P ' gJ=*3"g\ ` - } 0 .'h X#l+eK|@IHOVVa`glnuw#&)0/98@@IIQRW[_cdniwr}z ")&105::B@JEPMUWZ]`dgjnowwz #")(-.356;;CAFIIPOSXV_]bdhholttx|{ " %&(,,/237:9?>CCJEOJSPVT[Z_`agdkjmrquxw~z ## %%')+-/0263;5>=@?ACBECHEKFKLIQKPQOTQWQZTZZZ^[`]b`bdbgegihjkmkqktnuoxqzuw|x~|~    "# #"$"&"'%%(&')((,)-,+/,/.0-3.3031525366577797::8>9>==?=A=B?C?E?FBDFBICIEHHIIIKHOHOJOLONOPPPQQTPVQUUSXTYUXXX[W\X]\Z_Yb[a]`a_c_e_g`gbfgdheigkemglkklmlolpnpppqsnxnvtswtvwwwxyx{x}y|||~}~~~~+:Kan0Gp0]#O8v9~ L-|p  m ' @  k 4 fIesWx{%<qk7 I8s/]$D s 6Kk"#4K1,Kk?>#=Ot 0My 1 a 7nXdzU wr \ K }>?@RZ[G3O X ^ZeoT( V .\nZm 1S: d V62MXt@O . l ]ClP2 ?Wp 6pYzhd{ %&)+CGDJ^cgd{+/4:BPLX[jkqy #-,;:GDTT`ahqt|#%2/@DJLVU_bfopx|"#,+55FFKLPPVX[^`bggmmquu|z  ""&&*+0/62:8=@?EDIIMMRSWWZ^\dafiioluozu|{~  $ ($*(.,005396<<>?ACFEJGOKQPSUVW\Y`]_d`hcihlknootstyu{z~}   " &"&'(+*,./0116476;8=:?=@>BCCFEGIHJLJPKQORQTSVUXW[W^Y`\_b^eagdifkiklmnpnspusvtyv{y{|~||     "###%%""'"(&'')'+',)-*,-,/-///010312434547696;7:;9<<9@;>?B?AAD@F@FDEFEIDMFKJIMJMLLOMOOOPPRQRSRURWSWUWWWYW[XZ[[[^Z_\`]`_`aaabbdbfcdialbkfjhilhnhojpjrjslsnspsrtrutvuuwwyvyyy{zz~y||{~zaQ4jGi2WG V)~khq ~B t@" n ^ K C , 8+IJjx?Y2` *"c U!!"~##$%Z%W$#"!! 3Sbf} qD!8D{XY[J  U (wf$0!" "?!ipx| { u^RG: Ji-e l (HL^ :(n  5Ukn$EgM7FfW7 O ]PU8 3Qs  59I T,` m bNIRF%&3%  { k m g b L M K @ 4 , , #     | u n d ^ Z R I B ? 6 0 & !     { v o h a ^ R Q H D ; 6 - + #     w w m f e Z Y P L D @ 8 6 - )        w w k m c ^ Z R Q H G > ; 4 0 , $ $     xxnmgb\\QTHIC;>05)(# {zwmqgeb\XYLRDG>=831+)#"  ~|xsshnae]\VVOMKCF<=842,+'$! ~zyuqqjjfc`^XYSQOKHHAA=:9420-*'$!  ~|{vwqqlmfiad_][WVUQOMKHHAE=?:97410,,'(#"   ~z{yuxqrpmmjihceaa]][YWUTSPMLLGJAG@A><:;5823//-+*&'##!    }yu~tytttpqnollihifedac_`][]XZWUVSRQPOLNHLGGFDDB@@>=<:;5:362202..-+-)))%(%#%#       ~}z~|{zywywtwsvpvlwkrnmnklkjihifffdfbbbbaa]`]^[]Y\W[U[RYQYPWQRTOTNQOPMPKOKNINHKIJHIFHEHDFEAGACC@AB>A>?>=>:@8=:9;8987776563615132/3-2..0*1(1(-(,)))'(''$(#&#$#""" " ##!           ~~}~}{~||~{||z|z{z{x|yy{v|vzxvzt{txuwuwswsvvqypvsruquouprrpqqrosososorqptmunrrprotmvmrrospqqrosospqrospqrpqrprprpsorqpsorqpsorqqqqqqqqqqqpsorqpsntorroqsnvkvmtosorqqqrorqqqrntosorprrnumsqprqpsnumsrosorqqrntpptmtppsorqprqotorqoulvmsrmvluoqrprpqrouluopuluoqrospqrosospqrospqqqqrpqqqqrpqrosprprotorqotorqotntnspqrpqrprprpsntntorpqrotnsotmvkvoqrpqrprprqotoqsnsprqprotorprotnsprprpqsntntorpqrprqprprqprprqprprprqoulvmtorrnumtpqpsnumtorqqprqqqprqqprprpqrpqqqqrososorqprrmvluoqsntntntntoqrprprprpqrpqrosprpqqrprpqsnsqprqoumsqprprprqotntntmuoqrosqotnsqosprpqrotnsqotmunsotnspqrpqrpqqrosorslvnrqpspqpsotmtpqqqqrorqrosotnrqrpqrpqqqsopsqpqqrrmtpsnrrqpouoqprslst~|9VoEjLz$WL_H* $ x D N 5 e B$\& n I  ] "6;6 dEA1l C}6aw$[zA"8Rh!B]"T} +@gj .nuJ-_ ;|[i~pYCe x$r b8RS@ c K@#}sjG|yLZq[9'./*).   ) 7 LYUg:3\&?8BXjnq -0BBDFDIFLGMJOMOQNWNXRWXV\W]Z_]`_abcgdhhhkkknnoorqtswsywy{{{~}  !%% !&)(%&)&()(+)*-(0*.-..0/0020405336386888:8<9<;<=BA@D@FAEECHDHHGKHKJKKMKPIRLPQLUMUPSRUSUVRZTYVXZV^V]Z[]\]^]__`_b_cadbcfbfgblbjghkhjkjmkmmmonopoqsnuqsurvutyr|tzxxz{y|{{z|}"+?Nbt5V~$NP?D*l c`  m 1 S # f =,t|},fp!sDr  !x""#d$8$$##%"G!r 2P`}++3 > J K A Q[YGI`^B/?D% $k;@Zz D o KE] 7!"![fO ^5+ * GRcYk#[^b8@(WP < V5s,K4g+8 n UkqJ4fI+&&  }wosCz5G[-* ~o]XI;'% zk^QF:)tf[KF4*ymaXJC1+uibPL<5+si`SM=8*" }xmcYNF;4%  rk`YNG;4($vof]VKF:3*!xuffXQM><0'$  u p i ] [ O K A < 2 + %   w n l _ _ S O G ? : 2 + &      x p n b a W S K F > : 1 - %    ~ ~ v p k e _ Y S N G D 9 9 . + &       z w p m e c Z W P M E C : 8 2 - ( #      xzoqei\^VRNGF=>35+,"!  yxtlneb_YVROHI??;53,-"' }wxrlmdg]^XWQOKFG=@8711)*$" ~ywupmldg__ZXVRNLIIAD=<9723-*+#&  x{rvnpjjfed^`Z[VVRQOJJFFB@?:;6621.,*&'""  ||ywvupsmoikhdg`b`[]X[TVQSMPGOBJAF=C9?8948/6*1***$'"!    ~|{~wzvvvrsqoplllihgfecb`a]][Y[T[PXOSPNOJMHIHEFBCA?@<;>5=38452301/-/)/'*'%&$#" "!     ~|}{{{v|uztvustsqroponnjohmhhjeicgceae^f[eZa\\^X]W[WWWUVTSSRTOSOQOPMOMMMLKKLGMFKFIEJBIBGBF@F>E>C?>C9D8A:>:<:9<5=5967583551604020/1./.-,0'1&-*(+')'&)"*!'##$""!"#!       |}}~}{~|}~{~z}|y}y|zy{yyyyxzuzxwyuxxtysxtwswrvstuqupvqtqsqspqqqrprotmvlvmsqpsosnulvmtorpqsnumtorpsorqpsosorqrotlwlunsosorqqqqqpspqrospqqrotmunspqqrotmunrsmunsprosqotnsqprpqsorprpsorpsnumtorqqqqptmumunsospqrotnsprqotmvmspqrotntoqrprqprprprprqotorqpqsorprqprprqprotntnrrospqrpptmvmrrosppsorqpsnsqqqqpspqrospqrosososppsospqptmvltqprqotorprotnspqrotmvlvluntorprpsntoqsntoqsntorpsmwkuoqsntnsqprpqrotnspqrotmvlunspqqrosorrosorqqptmunqtntnrqrprospqsntnsprqpqqrpsnsqpsnulvnqsntorqotntorprpsorqqqqqqqqqqqqptlwkvmtpqpsnumtorprprpqrosososppsospqqqqqqqqqpsnumsqpsntorqpsorqqqqqpsososntosorqptmumunrqqqqqpsosososppsososnumtorqqqprqqpsorqpsosorrnumumumtpqqqqqrosorrosorqpsnumtntorrntorqqprprqosotnspqrotntnsprprpqrprospqrospqqrpqqqrpqrnunsosnumsqpsntntorqprqprpqsnspqrprprosprprospqrpqrospqsnsqotorqprpsorpsoroukk[WI;* nL+oK[">:q$H^` V9t :j7Pemxyk`M<| x.%*߿߱c-%u[A["s]]K(mmj[D5;1*,0& . e 3 # ; U7v?c@}\Fs`l>6xY83 4r v276Mh_9gb"E5'(uXZC _2 u@  s r s d [ T V K @ : 7 3 "    z v p g ` ^ R P F C < 5 - ) #     w v j i ` ] V O L A C 5 5 - & $       x s n i d ^ X S O G F > : 6 / + '      xvolf_aTXMLGA>941+&! wwpmhca\XTPLGF=@47.-("" }|wsrljdc\\VTPMIDD==57-0((#!  zxvpqkhhaa]YXSRNJIDCA;<58/2),'$  y|uutlqflddb^_X\SUQMPHJDEB=@8:634-0'+%#$   zy{ytxpsonljhhdd`b\^X[VUUOTJOJIHECCA;@6=55501.,,(($& !   |{}{xyuxruprnolmihhegad`_bXaW\VZRXPTQNPKMKHIFGBF?B?><>7;7672331/0-.-)+)('&%$#!#      ~||~|{{{w{vxvutsuotnrnnnlnhnfmfghfffbf`f\f[c[`[^Y\YZXVYUXRWPWPRSNUKTLPNMMMKLLIKIIIGIEICIBFCDDBAC?BA>@=?=>;>9=9;9:6;59574735333204-4,0/-/+/(0'-)*)(()%)#($%#%""$#! ""          }~}}~|z|}}}{}|{{{|x~u~xz{w{wzv{uzuxvysxtwuuusxrvsttrtsqunvnuluoqsmunspqrnumvkvmtppsorqqqqqpsososososnunsorqqqqqqqqqpsosorpsntosorprrorqpsorqprqpsntorpsosorpsorprotnspqqrpqrprprprprpsntorqqpsosppspqrpqrospqrospqqrotmunspqrotntoqsorqounsorptmunrrospqqqqqqqprqpsorqqqqqqrpqqqrpqqqqrosorrosorqqqprprqqprpsosntorqprqpsnumtososntosorprqpsnumtospqqptntmunspqqqqqqpsosorqptlwkvmtosppsospqqqrososotmtorqqprqpsntospqqqqsntmvmsqotoqqrprpptnspqqrprosotoqrosprqprpqsntorprprprotnsosotmunspqrprprprqoulvnrqprrotlvmunsppsospqrotmtqprpptoqrosqprpqsntoqsmvlunrrprosotnspptmvlunsqpsnsqprpqrprprprqpsntorprprprprqpsoqsnumtntosnulvmtorqoumunrqqrpqqqqrotmtpptnsppspqsmumunspqqqqqqqqqqpsorrnumtpqqqqrorqqqqpsntntorproulvmtntntorpqqrprpptntnsprpqqrprospqrosospqrosotntnsprprpqrprososppsorqprqqprprqprprpqrprotntorprpsorqpsorqpsorprqprpsnulwkuorqqotntnsospqqpsosppsososnvltorqqqqqqpspqqqpsppsoqtlvmtorqprprqprpsnsqqqqotosorpsorqqqqpsososppsosorqqqprqqpsnunrqpspqprqqqqotorprotoqrprpsosntntppsntosntorqqprprqqpqsntnsprospqrosprospqsmunsqotnspqqqrotlwlunsprprotnumtntppsntorprqpsntppsorrorqqqqqptmunrrotnrrprpqrprprprprotntoptnspqrprotntoqsntoqrprqprprprprpqrprpqrprprprpqrprprprprprprpsmuntntnsprprprpsnsqpsntntoqsorqotntnsprotnsqprqpqrprqprpqsorprprotnspqrpqrprpqrqpqrprprprprqprqqprqqqotosnsqpqrpsnrsoqrqrnqyz5F\pJ%lDj|>w8V^x a 5)W!Oo!+*0 ra<M=Jߪsݷn0ٵڢۅh9+|t\CA=7"$&* 6J6!+QV>Jqqw#M"y/!hR5gMegYV&Ee_Q~Yu \mQP{*w]pVUo $6HM^r /;HSlr*6GT`oz +9DR_mx/8GR_ly "2;JQbky)3@IV`kz !&6>JV_lv  (3>GS^fry #/8CJX]jp)-8BIT[fmy!&36FFYVjix}$(77HFVZbnp| +%:4FFRW`gnxz !),6CIPW\egpt}~  ++78@GJQVZcfmrzz % /+78@EGPRW_`ijtt "#+-45=?EJKUT^`ejnqyz !$*,24:?BAGDKGOKQOURZS_X_]aadcggikkonptpytyzy~    ###($+(,,..02163788;:=A@CAGDHHHKKKOLOSMVOWSXVXYY]Z_]_`abcdffiiimjolppqsqvrztzxz|z{     !#%&!$%"(",#,&*(-'/(-.+0*3+3-3/304342729396;7;9:=9>;>=>?=C=BA@DADCDECHDHFHIJIMGPHOMMNNPNSMTNUQTSSVTVVUYVYXYZX]Y^Z]\`[b[c]c_cacbecedffggfjflgkkjlmjpkopktlsprqstrutuvws|r}u{x|x}z}|}}}~~}~&4GTj}3Qt6p0hLJ^A. 0 G f 4 _ / |QO&4#8/GHf~DG1 W!A9=5631.-)(&""  z~wzsxosnnkjheg`c_\^XYWTTPPLLJHFDD@@=;<69251.0+)+%%$ !   }}z|wzswssqopmllglefdcba_]_ZZ[T\PXPSPONLLIKDK?I?C@>=>8=7773614000,/++*))%)!'!$        |~||{z{v|r{swrvpuoqqmqjpjlkhkfjdicedcbb`a^`[bY_X]YZVZTZPYQVQSRRPSLSMONNLMMHPFMGKGJEIEHDFDDDBD@D>C??@=?><>;;<9<9996:4:383626141211/0//-/+.,*-)+)(*'(''$(#&#$"%$##!            ~}~~~~~}{|}}|{}|y~x|zy{zy{w{wzxxxwwwytxtwuvswswsusvqurstqqsqrpqrotnspqrprospqrpqqqqrpqqqrpqrprqprqpsntorqpqsorqprqqprpsnumtppspqrospqrosprpqrprpqsmvltqnumunrpsosoqtmtorqrnunrrnvlunspqrospqqrnunspqqrprotmunrrososospptmuoqrosprpqqrpqqqrpqqqqqqqqqqqqqqrosorrnumumtpqrpqrprprpqsmvlunsotnsprotnsqotnspqqqrpqqpspqrosprprprqprqpsntnumtnspsntntorqprprqprpqrprprotntntnsqprpqrpqrosospqrotntnsprotlwltppsnumtoqrqprprpsntorprqqprpsorprqqpsntorqqqotosoqrqqpqsorqpsppsotmumtppsorqpsnumtntorqoumtntosoqsntorprprproulvluorqpqrqpsmuntnspqrosprpqrprotntoqrpsorqpsorrnumtpqqqpsospqpsosorqqqprqprqoumsprpsoqrqpsntntoqrprqpqrqpsntorpsnumtoqtmumsrosntorqpqsnsqotnsprprprqpsnulvlvmtnspqsntnsprqprprqpsorqqqrosotmumtppsnulvmtpprpsorprprqprosqprosprpqrprprprprprprprprprpsntorqqptmumunsosotnsorrosorqpsntntpprprqqprprqprprqqotosppspqrosotmumsrnumtorqrorqptmumunrrotnspqqqqrpqqqrpqqrprosospqrosospqqqrososososorqqqprqpsorqprqqqqpspqqqqqrosorqqqpsnuluorqotorqpspptmunrrosorrntorqpqsntoqrprqprqqpsnunrqpsorqpsorqpsnulvmtorpsorqpsorqpsorqprqprprqprprqoulvlvlvltqotnsosprpqqqrotnspqqrprpqrprotntnsprprprqprprqprotnspqrosotmvlunrrotnrrosqotnsprpqrotnspqrpqqrprosotnrrpqrpqrprqotntoqrotntmunsosospoulwkvmtntorqprqprqprprprotnspqrotnspqrotnsqnvltqnunrrospqqqrprosotnspqqrospqrotmuoqrprpsntorqqqpsorrorqpsppsnumumumumunspptnrrosorqqqqpsnunrqpsorqqqqpspqqpsosoqsoqtlvnqtlwjxkvmsprotntnsotntnspqrprprpqsntorpsntorqqqprqqqprqpsntntorqpsntorqprprprprpsnsqpsntntorqpqsntnrrosppsososososorqqrosospqqrotmuoqrpqsntntnsprpqrotnsotnspqqqrpqrospqrpqqqqqrososotmunsqospqsnsosprpqqrospqrospqqqrpqqrotnsqosprpqrospqqrnvkvnqtmumsqqqqprqpsntorqprqpsntorqprqprpqsnspqrospqqqqqqqqqqpsnumtnsqpsmvlvmtntntoqsnspqrpqqrospqqqqrosospqqrospptmunrrospqqqqqqqqrospqrosprotnspqrqpqrprprpsntorqqpsorrntorqprprprprprprqprpsntntorpsntntorprprprprprotmunrqqptlvmtorqqprpsoqsorqprqpsorprqqprqqqpsosososnumtppsoqsppsntppsntppsoqsorrnsqpsntntnsqprqotorqprprprprqqprqptmtorqpsntntorpqrqproulvlvmtoqsntoqrprqotorqprqpsorqprprprpqrotnsprotmuoqrorrospqqrososprorpspqqpsotnsprpsntorqprpsorprqqqpsosorqqpsntorprprprprososososntosppsososospptmumumumtosorpsotlvnspqqrprprprprprprqprqpsosorqpsoqrotorpqroulvluntnsprprprprotntnsprprprprotnsqotnsqpsorqqrososprotmunsososorqqqqpsorqqqqqpspqrosprosprotmumtosorprprqprqprqptlvmtppsntorqpqrqprosqotmuoqrpqsntnsqouluoqsntntntnspqqqrpptlxjupqrorpspqqprrosorqqqrosospqqqptmtpptmunspptnspqqrospqrosotmunrrosppsorqpsorqpsorqqpsorqprqqprprqprqprprqqpqrotorpqqrqprprprqprprqpqrpqrosospqrosprotmunsotnspqqrosppsorqpsorpsosorrosospqqpsosorqqqqpsososorqqqqqptmunsotmunrrospqrotorproulvluntnspqrpqrotmunspqqqrotmtpqrosnunrqpsosntpqqprqrosorqqqqqqqpsotmunsosotnsosotnspqrpqrpqrotnspqrpqrprprprqprpqsnspptmumtorqqqpsnunrqpsosntorqqprqpsorqpsorpsnumtpotospprpsosntorqpsosoqsosorprqprpqsorpqrqqprprqprqpsorqqqqqqprqqqqprqpsorqpsososotmvluntntntntnsprpqrotnspqrososososorqqqqpsnulvluorprotntoqsnsqotntnspqrprprprqpsnulvmtorprqotnsqotnsprqpsnumtorrosntpqqqpsospqqqqqrpqqpsprosotntnsqotnspqrososorqqprpsorpsnulvmtntntorpsnumumtosorprqpqrpsnsprqprprprprprprprprprpsoqrprqprosprprprprqqqpsnulwkunsqotnspqrqprpqsntoqrotntnspqrprprpqrprqprpqsntntntntorpqrprpqqrpqrprprprprprpqrprpqrprqotntnspqrospqrpqqqrprospqrpqrospqqrotnrrotnsprprotorqprprqprotnsqospptnspqrotmvlunspqqqrotnspqqsmvlunsprpqrprprprprprprqprotosoqrqqprqqrnsqqqqpsosorrosorqqqqpsosorqqpsosorptmunrqqrotmunspqrprpqrpsntntntoqsmuoqrpptnspqqrpqqqrpqqqrpqqrotnspqrqosotnsorqqpsntorqprprprprpqrpsntntoqsmvluoqrpqrpqrospqrospqqrotmtprpqqrprprqotntorprprprpsntntntntntnspqrprpqqqrprospqrprpqrprpqrpsntntosorprqqqprprqpsmvluoqrprotntoqrprprprpqrpsmvkwmsqotnsqotorpqrqqqotpptluorprpqrotmumunsosotmunsprotnspqrqosprprotoqrprqotnsqotnsqospqrotmumtpqqrnumumunrrnunspqqqrotnspqqrotmumtppsososospptmunrqqqqqpspqqpspqqqrpqqqqrnvkupptmtospqpsorqouluorprotoqsntntnumtorqprqqprprqqprqptmunspqrotnspqrpqrotntnsprqprprprpsmumvlumtpqqqprqprpqrprospqsmvluoqrqprprprosprosospqrprproulvluntntnsprprprprprqprpsorprpsntntorprprpqrprososqotnsprprprprprqprotntnrqqqrnvlunsqprprprospqrpqrprqpsnumtorqqqqqqqqqqqqqqrnumtppsosntnunrqpsososososososppspqrnumunrqqqqqqqqpsorqqpsorrorrnumtosorqqqrorqpsorqotntntorprprqprpqrqprprprqpsmvlvmspqrprpqrprqotntoqrotoqqqrpqrotmunspqqrospqrososospqqqptmumtppsorqqpsntntorprprprprqospqsmunrrorqqqqqptmumtpqqqpsorrnumumtosorprqprqpsntpptlvmtorqpsntorqprprqprprrntosososorqqqqpsnumumumtpqrosotntnspqrpqrprpqqrqprotntntntnsprprotntnsprotmvluoqrqqqprqqqpsorprqqqprqqqqpsosorqptmumunspqrotnspqrotnsqotnsqqqprqqqrososotmtorqqpsorrnunsososppsnumtoqtmtoqsosorprqqqqpsnumtorqprqqqqpsosorprprprprprqprqprprpqrprpqrpqrprpqrprprprprprprqotorpqrprorsnsospqqqrorqsmsrpslvosmtrnsovmpqwkroxogv}r6ID3 3ID3@)  KU1lTPE1c64 fart generatorrockdodger-1.1.4/data/fart.4.aiff0000644000175000017500000013757613706632107017022 0ustar krawczykkrawczykFORMvAIFFCOMM_y@DAUTHc64 fart generatorSSND     # -279#>4;M8k0F%`rA~hf2D/#) .\KxL3O>yRR<&-usu LU>5?mm6K`.P\tjXNO*j7 X> @ q S ? n8fIRIYO ^u  F'\<B " 9 ;sz^D=)WzE :nU10Z =]$:hi@A Z } = 7+ <qlC M f iT?HvU/ |+ v//QJ q@ |{E?G\,N6te ]x X# s XY[SC@IELKNRTT[Va[dbdkgpmrswv}x} !#%'&-)0.126799=nx sRMN7h m'OV|A{ D  (uQ ^F $A  , <wQ) H8~1=U<yq+9pTVO RZt!7g)oA5Gp vS:(nvD}ZFn>= pYtuQ/CM&  ulsjUCHD,  uh[ZPC83,vpd\ULA;/, |ol_[NL?:/) ~ u o f a X O K ? < 2 + #     ~ w q h c Y W I J = 9 4 ( '      ~ w q l b _ V Q M B @ 6 3 , %     z z l l c _ X W G M < > 6 0 * $      } r t h g ` \ U S I G A < 6 5 ( -  !    zxrkkc_\VRNGCA89/.)# ~{xpqhga_XYOPIGA?87//'&!  ~vynrihb`\XVPOKEF>=:43.+(%"  {yxpsjlgbeY_UWRNMGJ@E:?7722-*+!% ~}zxstookjgdc__[YWUSPLMGHE@C;=8925/.,*&'!"   ~{{{typvlrkkkegdba_\\XZUURPPMKIGFEAA>>;994621/-++''$#!    Zpie-`\1US!KM>D*a c R?'$2&)O0u<niCq9F3VFil1B UnQ654+>Z;Շߑ:Y+Zߵ5~,YܳWzrPz L>[X\PG = ZJgm|/xpr$A-MzVZ m1?, caCOX<^ @Tt~*r{W9ݱr"E 0F  lc 4Q/<DlA+j~sn%{%\h-e1j_2 $@ nZ ^ # '  prD&C_?  $G/Nc$w3+IpgJ2HNv7'lsR -4!Q^HGtwq!#*BLFPetmx ,33BLYZer}} +2;BPS^eox "/3>ELW[fkuz (,4;CLQZ`jox} #(/::HGTXbdqr| #./;CEJOQV[]bfkluq|{ "')-23:>EBJIPOVR\Y``dgjmnsszx}  $"%+(0-2468:>>DBGIJNMUPZV\^^ccfijoosrytx~  "$"$()+-,206388<:@>DCFFJKLOOSRVWYZ]\a^dbhcjiknkrpssuzu|z}  &'/%=*I%Y%"b@vW^' ;_cft.CL"F a W R 8 @ J -:[ZPi/G1y >Al:+[@w 1Ge 5\[?}^4zLF A t f  J W  z8r x . 2k%6H3#  Emd;_ Y  @  } S  RH>&Fy #/ C% |)Uz;B.&` O' HZWqA##  H p*! PT*3)<F'  # P!n 4Fb  6aUGX>   V G L Z &' v  I=nH"o!2$`  pq r uMQ. Hy m  n -j b\ w  !: f {U   f> iw^s vGS\&+H=3s3Bq06((]j * e1"P4uAKT@FHNQS\Yfbimnvw}~  ##+*045>;DAKJPRTY\`cfilptu{z #(&,./44;<>BBIINORVU_Xf]jglnrrxy{ !##*),0-567;<=CBEHINMSRVXY^\d`jeklpqutzy|~ #(&&&,,-013577;;?>ACDJEMJOOQTSZT]X_]``cdffjjmnoqtrxt{x}|   $ '%'(*++..10236678::?9C:D?AFAHCJFNGPIQNPQRRVTUYVZ[Y^\^_a`cafdfhgjnhqjrnsptswtxxx|y}~|~    "+*'.)/.31#0;#+B)(G/$L:#KG HTL[# Gg-@s:3M$d Qi   ] 3 " ]  Y d 0    Vn):e%""X#z""!" ""!,  [2h}!^2n:|oF Y< =  - %dV P3 : G(Xki,H"kX rg!tV + #+Y [tp|Q:*Hr 1S_n  f&j-AHQ P c3b F 8L M6 g F ZTvQjY (\V{]nHA f,  Q7C[9' w4I:/=J; > J AdJ '_Ix2k}kEp_ ODAh>S o9&[D]=pIz5k'Z <:oTs%75KT),^oNFurb~/36,EMNJ[ggdr|{"%..8=DFNUZ^ehtq| #)+37DDGHLLRQVV[Xb]fchilnpstxx|}~  !!$''*,+1/2567:9?>BBCHFKJMPOSTTZXZ]]^c_gbhiklmopssuvyx}{~   "# &$)&**-,.0124295:7=:@;A>C@EBGDHIFNGOLMSMWNXRXVXZY[\]_^a_dbedgfihkjmlonqqstuvwyw|y}~|~       #$ / $4$9B%E3I?KPNd MLCg[zbc.`E1`o-a{`c =}uJwT:tTN 6r6&5 47 C ;  L j a [/6pRD" ;m$ J }o Uf; <N!k(!L `tMQU FR& )Z= k Zu^i z' 1 4 M<XMb # YsPzYJ 'S@lj3r[ 3 RO{e'_MB|>m' H2tq  r ` ;!Y X(  iDS4 ^'!: (^5? i]t 5+.k |*|?EG O?f "CXR p{v `V 8C T g 4 ~  2  1_ } &  < X \  e u  u u V 0 F p < D :  5 U 3 1 0  + V ' - ^   ?   t _ y l N Y q Y 8 B R G $ ( 6 3        | x z r n _ d ` T Q K J B : 9 4 - ( !     urofh^[YPPHEB881.*#!  yyrnmee][USNIGA?:52/)'! }zuukoch\_WWQOJIC@>881/,*%!!  ~wysqojhda^[XURPLKGBE9C2;110)*%#!  ||vxqrlngicd__Z\UVSPNLHHDC?@:;5721.,*(#&! }~yzxuurppkmgkddd^b[]YXWSTRMNKIJCFAC><>6<3712./*,&)#$     |~z{vztuuqqqlpingihci_da^aY^XZWUWSRRNQLMJKGIDFD@D=A;=:<58656/5/3,0+/(,'(&$$$!"  {}~y~z{xxzvvtwstqrsomrnlllmihiji`igdb`gc]`abZ\]aXU_YYQZXWKXVTKRVRJMWOIISSCHQPDCMT@?KRB9IPD5BSC2<TC/9LM(4KM)+IP*"DU*<Y/5]3 ,\AbH gUdq^[XID1a#vK%s[hFfb ~E`#~y>ij=WxiS ib Xp K  ?F[,,,Fp'z:AZ xV I,5 i 5 ny$9[7[z5 q :&T i Om+J+Il 9P vGMy Q Vx 9c g J9 U %*V b [~  i XqQ $uEeRfBC}Z. " <yz  M& 4$X} ^E;E E:dcAzUn0rR<m6 ;d]EUe="-=!}svw_NRS>..,   {n`aXND<:-"  } r m c [ X L F > 7 2 ' "   } p q c a W Q K C > 6 . ) !    y w m j a \ U O H E 8 : * .       z t p e d \ U U G H @ 8 6 - ' %      v v n i f \ \ P S G F ? < 3 1 + % #    ~zvoned[[SRJGC=;41+)!!  xwnpgfa]XVPNIDA>840,'& zxvpmlce\\WUOOGHAA9;22.*)$  |wynsikde^_YVVOPJIGBA==67/2-)(#$  z}s{lvingfea`^X]RYMRKLHFDB@<;:5602,-'%&!  {{wysuppoklghecd]aY_VYURUNONIKFDF@A>;<:59/7,2*-)&) %     {~x}uzswqsopnkmhjhegbca`__Z]W[VVVRSQNQLLLFMCIBDC@@=><::694724/01+0*,*)(%* )%##    oQ~Z!Oj[{g?nav}}#r ]w=G|׫@l7]TB8? 3{QXb=&%!DT3!D1{(,z'O1jUS0{l 8>%&E5bexx%O#oM"2L Dcfߑvn,I7i;';.\Px b3@ gLO)Yh51&N=+ I{K= d7GVx[ UiH| _#ZL?sS.--*{m =)Q[kwJlJY 1@vbEuU{x0rLdkU)I81L"ST UT(M9LE FOBX*?]:"@`H,CaT9De]EKciOQgnYWjrd]mwmcr{uls|r}}~ !"#$&&(+(.,1-406385<7=;=>@>C@DDFHGIJKMLOMROTSSTXVXZX^Y_\b^abdbhbjiillkqlsosrutwwv|w}{}~  !" ""#"$#&%(&')'+(+).(/)0,/-1-2004/60626394;59:9;9=8A8@= 8 v I uc7 g Mz@'\]G7P/3m9LE#MgSS]Af3f-lh%Ti>xd(bXKK5= / "yw|xqjmoc___YUPULJGGC?;>5400.''"%  {vwtponijead\`V[USTIRFJEBC=>995400-*('!&  }{{xvstoqlljfhdd_`^Z]UYSUOQMLKHGDE?D9A6<6615-2),*&'#"      ~z}yyytvuptmrknilgichae^b^\_W\WXUUSPVIUGOJIHGEEB@A?<?8;96744412.1,/+,(+&)%%$#"!      ~}|}{{zzwyvxswsssorpnolojmhmfkdjdibfcbc`aa]_^[^ZZ\WYXUZRXSSUOVMVLTLQMONKOJLKKILFKFIFGFFDFBEBCBB@A@?@>=@:?;;<:9<6;697575644424/6-3//0-/-.+-+,)+))*%+$(&%&$#%"$ # !  !          vwrqs|YD %s" D^U%q_0&>O1u>.Is  =^syJx\#nE'. Nv8e/$lSbU;(8gj45b[=zQ:nIqFFBw @VFc he : MF E T @2V]   qY l ^Qf]A(>s tr  4'   XQ T6L _ h Q q ? 0 7 a ) 4 ' # ] " ;     _ w  9 _   ? "  m z W v g I V n U 8 < V C ) & < 2   #   u|tnafb[RQPJ@@<9/,*% wzroig`aXWPQGI@?971/)## }wwpojgd_^XVRNKHCB;;54.+)#& y|svnnjeg__[WVROKKFDB<?6902,,'&#    {}vwrqmmhhce^_[ZXSSONMGICD??;;58/5+-(($$   ||xwxrsponijfhbb`_^Y[VWTQRNMKIIEDC@A;=987431/--)((#$!    ~|z|vztutrqqlpilhifffbb`^_]Z[XXVUTRROONKMGLDHDCD@@>>;<9794643120/-/)/&+&'#&"""!     ~|}|z{wzxwwsxqvovnslrlokllijigidgeeaf_d^`b]`Z^\[[XYYUYTVTRTSQSNTMRMPMNMLMKKKIKGKFHGFGDGBFCBDABB>C=A>>=><<<:<8<6<59685646261330201.0...-+.*+,'.%+&)&)")#%& &!#!!!             t$n-_{2&WG7hO:I7Kd'H?}e8|GB IILkpQ~ L]`xj|=Tc&r :o4: q-$T0%FfC kXFo;e_C+_ ? %- 5\f=X79r8I ><8.50+I_4Y4 lvY L5k8u a*z|) l #X ; Ck   7 X  o K ! y j u T i B o _ 3 N v N # 5 W F   > 2   &   ukxqdZabQHLMC5;91'#* }wwmtbj\bVVNNGD@<921,($   zwupnhgb_]TVOLKCE;?38.0*'#  yytsolhfca\ZWTQNKHGB@>::34,/)(##  ~|yxsulphigcaa[\YUTSOMKFJ?G9B98742/-,(("$   ~{{vysuoqmlkghddb_^[]WYSTRPOKMFIFBD?>?8<58240-0(,'%& "   |}zyxwvtsqromlkjigdhad`_`\]Z[VYTVRTNRLOJMFJGDFAD?@=>;::69435/5,2,/+*+)(($'"%!!       ~~}|{|zxywxwsxqvqqtmrkomllhlhifhgefbecab``_^^\^X^W\UZTZTUURUPUNULUKSKOOKNKKMHLHJIGHGGEGCGBDCBCB?B?@@=?==<>9=9:::6<3:575635333203.2//./,.-+-)-'-&*('(&&%&#&"$""!"" !         }vmicf6=`[]lMxml8&p/&6?Z>! (okIDim jk#x=:}N$#Yi5%r\b 8hv-Q(rS+gߙI`q(1rl ڏU9v=\L2jRP2"{8 yk k%ThCll2w~ ||x|yx|zws|synvupqqosgsjohkkighfibede`c_b^^_^\\Z\ZXXXWVTWPXOVPRPRPOONOMNKMLIMHKHHIGGGDHCFCCDBBB@A@@>?>>=<<<:=7<7:7876739/:.71213-5+2-./*1'0'.'-%,&')%'$'"&"#%$#"          ~}~}~~~|~|~z~z~x~wttu}wzyxxywxwu{syrytwtswtwrtururruprspsorqpsntorqqqqqrosospqqqqqqqrospqrosqotmuntnspqrpqrpqrotmumtorqprqpsorqpsorqotorqprpsorqpsorqprqpsorprqpsntntntntnspqrotnspptmumtpqqqpsososorpsntorqprqqqqqqqqqqqqqpsosorqqqqpsnumtorqpsntorqqpsnumtorqqotntoqrprprqprpsorprqprprprprpqrprprotnsqotnspqqrosospqrotntorqprpsorpqrprososppsosppsososospqqrospqrorrotmtpqqrosososorqqqpsorrosppspqrosorrpqqqqsnsprpsnsqprprprosprpqqqrotmumunsospqrpqrotntmvluoqsmvlvmsqprprqqotoqrotnsospqqqqqqqpsorqotorpqrprosprpqrprpqrpqrotnrqqrpqqqqrpqrosqotmuoqrosqosospqqqqqqqqpsppsosppsprntprnunsorrppqtoosqsltrqoptslquqnoutlosxipswmktxohuwqio~lnjpjl{tjkzuiowon{qQo89T AW3t\#kbbgNt!*'agpz0l\oml7:ڎޚ]|CB*J743_w8#IM w'DvG-6 7u}I4hC % 2 w mW 2 . K L ak8 ! Vܵ]d5mHxK 1E: qگng/ . 9L%|](\4'WWC8RiU9ZS \;^ZUxOK+I@DSC^ Cm4AuQH}`;JxHX`_smz    '+%)2543?HILKQVYS^`cbelomtr~u}  "'$),,/2388;=A?HBKKLRQSXX]]`agekinpsuvzz}  "!$&&),,.01575<8@@>@B?E>EAEDEDFEHFIFJHKHLJLLMLNNOOOPQQQSQUQWRWSXUXXV[WZZZ\[\\^\`\a_`a`bbcbdcfdffeifihijilinjmnkrkqnprprqstrvrxrzsywxxzx{{z{~{}{|}}     (-66'6G728+< Rln)x|.m ^2'Q7V6Hq)';VSDuvV#!an5I< Z7`[l=`H I P XT*? ' e7v7oBnug6 Q { Zi ("R Kg= p d  %  :F ["5hkc_WX.2!ZkMU ?9.Soqi~ 2CCFevvy 7ACOdqu~ ,3GKQW[cfmsy} &*.79?EGPRX``liut~#"*/0<7EBLLSW\`eipqzz !%)-23;;CFIPOXZ]dbkksty| !'(/.66<>BFHMNSWW_\efklqrxz| #!(',-1488>=CEEMJRSTY[^`ddkkoquv{|~ "#&(+*3-647=A@DDIENHQNRQWUZW\]_b_fcifkioksmvqxt|w}|    #& '#)(),+.-1143577:::=:@ED<=KE>@IL@>MME?KTEALVK@K\MCHaQFDdXFF`cFE`hM@bkU=_sY>[wc+$B5"&H=.+KE92LP@;OVKBS^QNUd]Q\gdZallcfqrljvxto}{|v{ !$ %&&)'-+,//13255799<:>>?@ABCDEGFHJILKMOPPTPWSXUZW[\Z_]__c`ebffghhkklmnorqtswtxwzy}y|     "!"#"%"'")#(&)(+(-)-*/*1+1-00104-8.8081:296798:<9=:?;?>  XX  ::33   XX44 4411ffpp((aa88hh<<**nn88މXX --22  ooTT@@00KKXX88@@11ޣޞܞ܇##ܥ66 PPtt nnPP\\hh||ll   ,,aaLL99  ((   77 jj44dd| | XX]])),,VV     | | mm \\7 7  nn@ @ uuߩ,,} } dd$$?"?"wwSS֎ҎMMkk3*3*))$$11ݑ  ''!!44y2y2  ޘ  @-@-99!! HHX!X!..++W$W$''kk''77++**:.:.vvBB``  B/B/qqLLKK44ll11 % %;;;;~'~'Q,Q,kkjjS S hhcc  \\uu,,o&o&"" z z OOWWфqq,,yyllSSݩ&& kk } } hh==;;!!00%% ҫ22QQɨǨrr HHՠ00;;||l)l)7799j5j53311h0h0..W,W,))##88| | II̭̭dd00jjɔɷη΁ց****44 / /8822,,!! yyo o   llll88··GGxx``̛ЛЖ֖((ݽPPRRwwNNHHWW JJ$$",",41412200,,&&*!*!  66TT99%%kkޞթ̩̮ŮttXXʺ̺\\ޣXX  [[ x!x!<$<$P'P'))))++++((''''A*A*,,--00V2V24499>>AAAA??|<|<}9}944'.'.{'{'<<,,MM``ooߌccccxx88xxߓܓEE33߿,,aa܈ttְڰڽݽݑpp'' //##M2M2V)V)>&>&++**))####t$t$5%5%E&E&&&<&<&**:1:122..,,--X-X-//D0D0//.. - -**G'G'O(O(++,,8,8,--11W5W5k5k54433.. + +&&`#`# GGUU. .  66AA880000SSԣУуӃHH??qqLL33ווׁׁ;;ٺںhhFFddOOߔߔރۃ99QQ55AAbbkk" " MM~$~$$$%%:&:&&&''..,,))G,G,**--l,l,-)-)##GGgg 00''11664411 4 42211//..,,++@)@)''$$hh44YY]]ճ<>EKEK V V__aaXXGGJJbWbWNNNN$N$NJJLLKKII==T0T0""  ppPP((HH$$,,??\\##T(T(,,``uuNN$$##|,|,3=3=DDc?c?77O'O'vv||A A ccSS""'',,//))AAOO:: ccQQII EE 77FFvv//qq//55ݰܰެ;;NN<>xxiiP&P&_2_2==$>$>::88664422//++&&""ll  4 4 66hh ؘQQ33 BB\\ʳʳ88((22ӄք֖ٖvvIIoo//WWxxDD||XXgg __::**`3`3^%^%!! 22!!i#i#%%##y!y!!!T!T!!!v"v"""h h UUW W K K ee))44z7z700{'{'qq\\<6>q=q=99_8_855.4.400z-z-(( &&11  }},,DDvv//ddժժGG""qqFFΌ،ؙHH֓++PP00//}}$$$ $ ,,m&m&::==8822,,00%%LLQQvvllff IIppmmYYSSۑّ֖ӖϤʤʢĢ""ααϷϷܹܹxx55ɾ̾̋ҋҴ״ppܥTT ""BB  sszz$$))//4499KBKB0H0HXJXJIIJIJI)H)HEECCAA??Y=Y=9944D0D0{*{*a$a$++b b ))llTT||¯ǯΞמפjjwwjjII""77@@x8x811**АŐŮЮkkSS**++aaee1133kk‘ɑ~~QQְڰ==ݡ>>DD "("(n:n:/G/G;H;H=D=D@@;;b6b6~1~1..++()()&&RR< < ==;;SSߌڌ((||ννWWœɓə̙̯ϯ@@HH   ::ll&&v*v*11&:&:OCOCLL`S`S|S|SPPNNhLhLJJ3H3HlElEAA>>?9?9 4 400--x*x*"&"&!!  $$  ggLLgg\\EEMM׏ҏҺͺ͔ȔȻ88 ð~~ǔ˔˛ϛII,,XXhh B B &&r r t%t%@)@)11<<,, G%G%''D0D0n>n> J JIIcFcF]D]D4B4B??<D>QFQFhEhE7C7CAA>>g9g944..))K$K$\\PPX X ((\\MM]]ZZԽԽÈÊ͊--ʣʾdžUU11یތaa33 I IPPKKfGfGBB;;11##88gg!!iiKKpp PPxx$$**33qAqAbAbA??CChAhAj>j>::774411,,%%77  h h @@;;,,ǮǮ<<{{ssɃ΃οӿDD ||\\UUdd@@ tt&&,.,.YY##!!K+K+ 3 3::DD G GCCAA??w=w=::77w3w3//W*W*=&=&<#<#UU  !! ZZDD!!**>>hhNNCC@@--ɾoo޵޵ PPżƼƥƥqqQQvvݵQQooyyjjX X <<``cc>>  $$**--55\E\EOO@M@MIIFFAA==55==%C%C<<<<88P7P7~5~5..**p#p#22""||ZZSS55||\\``GGڵٵٷٷFF``ppQQľľ󹣺HHOOŲżɼ&&pp]]77kk]]))RR&&uuYY  ||))R"R"""0#0#a#a#$$t&t&$*$*//55(8(8:;:;wAwAIILLIIGGEECCAA??==;;77K2K2f-f-O(O(##ppDDBBii LL~~߲߲^^kkyy\\HH""**ߢKK__XX$$3*3*77kEkEIIxFxFCCAAi>00DD!!::SS!!%%((g-g-22 6 6T-T-220?0?66S0S0@4@4 3 3..T/T/(/(/,,@-@-//h2h211--&(&(%%,,4545e;e; : :0707553311//,,''>$>$""**<<xxttBB88||__؇@@ƹƹxx,,ԮԮgg88PP$$88ssJJ@@e e 6622IIpp55JJqq44wGwGIIACAC99Z%Z%SS88w w .9.9BB<<44 . .F(F(  ,,<<88šŔє  yy? ? ==55ĴZZ))ppږߖߗhh\\BBOO;;4J4JGIGI??>3>3\\((##dd݅66))??2E2EJ@J@4<4<55j/j/))""ss  @@66OO$$֦&&ȔȪת55_"_"  OOjj۽۽&&SSzzdd!(!(X(X( LL 22ĉljzzmmPP11DD܂@@ RRR(R(66/G/GRRQQMMmKmKHH`F`FGCGCd>d>7700%%$$ff۴ۙ__KKT T DD// 9 9//NN,,77UU++55<<XX TT4$4$8484??==8833j%j%! ! pp ##,,,,%%.. nnQQ**pp**CCkkAAٺ׺׀րּּbbiiʰðÄʄQQШ qq??wwšŚwwзѷфք֨٨mmYY>>,,vvm m 33(( h"h"$$&&''''z'z'v)v),,1177==rArAhGhGKKlJlJ H HFFBDBDAA??5:5:[4[411 5 588O5O5..))!(!(##  pp}}66^ ^ 44//8888ݛڗٗذװPPxxϐ͐[[ȼȼȷȷ߽߽ffŽǽdd44ll||}} WW yy;!;!++ : :&M&MlTlTNNHH@@;; p p !!::FFdFdFAA<<7744//++&&!!llhh9 9 OOӨ!!tt88ғ͓NN66--00|6|6//މ``ȓƓƟͬ͟լ\\__}}CC))4 4 ,2,2DDBBX1X100c!c!22BBDD@@==P;P;l8l8j5j511++##ttPP zzݺٺِ'' $$jj޸ɨںں̤C C $$ԃƙҰذ߈MM44O9O977.. " "  ::ՠLL==]]kk||pp  << Q'Q'c5c5EE;K;KBB22\\x$x$d6d6> ޘߘߕݕ((ـ׀ִմ88OOļļ""^^ccZZρӁgg֠נvvي܊||33uujj@@| | A A ggt#t#:,:,::??%%99==FF R RMMKKII6G6GDDAAV=V=<<6600--(($$ܫ \\vvƞ88Ɋɤ͖ͤЖމ,,''<<$$99BBC:C:*+*+h h ,, ''88p9p9..LLccڄل\\tt  . .|5|5((M4M422))66 f f ؼdd++bbOO!!ддҐ h h PP]]Ր00''44ttҜ՜^^ ݴ-9-9@@ : ://tt##l l ""ZZܜTTy y p&p&88`J`J4L4L@A@A,,   >>HH<<**00::ttRRZZJ1J199++%%AA"="=8866|4|422--))N$N$>>d d hh00}}EE٬٬$${{,,==hhiizzĜȜhhΕٕjj((dd)) XX\\!,!,Q=Q=NFNFDD@@E=E=-9-9@6@6 3 34/4/U)U)L"L" 88rr߅ޅ޳޳pp``wwRRdd$$‰…ŅNNpp..  MM;;&&44ODOD>BBIIQQPPMMKKtItIGGEECCxAxA??<>'A'A>>~<~<::-8-84400--i i ll{{kktt[[ ee))--1*1*%%++00kk[[--__))> > h h ((XXaabbۅׅLLԨѨ}}κȺZZxx((ggccRR88RRxx $$ʾ̾MM}}MM dd**::xJxJtRtROOLLII5F5FVAVA;;44%*%*$$--4545,,LLII qq!!]]EExxmm44׻׻)) ..AA##pp  <<LLz*z*77FFQQTTlRlRrNrNKKIIFF??77**$$6600"" !!ƔДKKҜ˜˻һ##ڬKK""  44JJNN`I`IEE@@y;y;7722,,r)r)''##ؒ((TTƉYY77rr[[jjAA>>ooX X nn""8 8 pp\\__k k $$;);)|,|,c-c-=/=/44;;6?6?==f;f;l9l9|6|622%0%0\-\-(($$g g %%NN,,llzz{{''rrи̸̘˘˨ɨeeܲܲpp״״ttXX ĬǬ>>XXݧ%%  1414XHXHFF::((P P LL۾EEj&j&  pp\\5 5 FFyymm--@@!!1"1""%"%|+|+33==FFmImIFFADADfBfB @ @J=J=Q9Q95511d+d+%%!!gg  ; ; NNVVmmCCwwww{{\\rrΐ88qq00aaBBȹȹĸNNܔ&&449944**)%)% ::LL JJ11<<==ٿɿɇHHJJݸ00KKddGG oo  EE%%J-J-L8L8FFQQMQMQMMKKIIGGEEACAC@@<2>2n0n0--=)=)$$ kk11ff--ll??ۗppTTȪȪЪЪUU..WW҃ ||ll<<āqqǝ˝˨ϨԼܼXX))  F F %%x(x(X.X.99EGEGLL$I$IFFCC==22))88}6}6))"")!)! HH8877##ƷOOnn jjѤVVCCaaܢ Ǖȕȿʿvv2233zzؒے !!&&==66}}  QQ$$QQ--AA"G"G]0]0  ((++ / /|8|8DDGG&:&:7373CCOOKKHHUEUEAA44 * *H=H=AAl9l955 0 0**|$|$з!!nnLLҿ##»ǻrrUU9900ڒAAhhPP< < c5c5AA==33HH((1212c7c755M-M-$$ # #&&88MM` ` <<ww::XX..EE11++<<ڙmmppծ֮וՕՊҊ;ǾBBWW--ƴɴwwGG((YY>>BB||ZZ,,&&k8k8==55??JJ??1>1>yFyFCy>g> G GDD??1:1:[7[7224+4+$$XXxx aa==Д봈88!!llݴxxAA^^Ø̘DD[[((II11>>> >     ## - -e:e:JJVOVOKKIIfGfGiEiEhChC@@== 8 833j/j/((  **IIFF SSDD˜͵͵XXUU ss&&VV44==,,dFdFWNWNJJFFQBQB;;00l l  8"8";;3737''("("  "" ,,yy::վվ‰ˆLjǬЬdd  GG00͎ŎϤؤt0t033'' ))WW ssllHH}}4"4"M%M%&&b&b&6*6*(7(7`E`E~F~FFBFB@@D>D>e><>I9I9x+x+&&--00|3|3**P%P%"";;}}AA  11qq((EE؈88\\xxqqYYHH00ϺϺll11άԬ ۠PPJJ``//ddnnff""<:>IIxIxI&F&FCCAA>>99b5b5o2o2D/D/++''r#r#o o P P ffDDʵʵԽԽ{{==մܴxxttT T hh!! . ...   >>!!:0:0@@jCjC??<>,,((־7#7#LL,,<<ʦզmm::EE==AA::"" ''::KKFFv5v5bbPP ,,@@8H8H?E?EAA>>::55&0&0w'w'QQi#i#%%FF66 u u ffggff<<99Ԡ\\bbSSmmnnhh55ffĹɹ77  **69690101$$_ _ ll||PPAAuuff ZZr r WW ! ! ((5'5'..77??IDIDAAV>@<@<44,-,-**%%GGddkkGG11qqUUDDxx,,cc88 hhZZ||ܽۓٓوӈ˧ȧ҄ׄ{{&&@@33$$8 8 mm??((  //  E"E"((d.d.00F0F011 5 5n8n8@<@<DDGG]<]<777C7CEEBB?@?@E>E><<::88665522//Y+Y+L&L&BBLL\\||%%''؍ٍ kkύȍȮ((\\XXTTll$$DD55Ѩٜ֨֜##ttXX22> > ``@@``!!!!&&Z6Z6)D)DHHEE~C~CEAEA>>99j5j533..2)2)&&$$' ' rr,,VV ``ttkkTT??dd1122KKDDNNKKWW\\--UUMM77;;Ӭߓffppv v ''%%77] ] zz[ [ (( 2222DDxJxJEEBBP>P>55""++44##Ԩzzll<>::55R1R1--O*O*O(O(&&""!!$$,,yyӠ88==ѐƐ󵠭**uu||@@Ɨ×((jjȚɚ ppӡءZZ44((\\ ddQQ] ] ++88CCLLLLVIVIKGKGEEBCBC@@e>e>:: 4 4K*K*!!''r r 00xxHHPPMM..NN**((ڍּԼ""||ԠԠԢѢ88QQ ZZ44,,JJ;;PPffdd,,99FF  $$HHk k JJAA$$..*1*1$2$2667744"5"544a1a1--''r$r$##  YY  b$b$&(&(((?&?&$$!!^^P"P"%%%%%%'')),,,,-1-1777744`3`3j1j1//--A,A,?*?*''/#/# CCmmdd?? rrGGEEӬ̬ KKFFϻϻĜɿɿPP~~==88??ggUU<y>88$2$2++''$$7 7 ""B B ||nnTT22??بۨ؃݃((vv[[88!!\\&&4/4/33Q=Q=`>`>33ppZZq q __JJ##99==88n5n511++n n 55$$GGhh }*}*))33ddS S jjWW""ttWW,,ϐΐ<<Ю֮֔۔}}!!ww  ] ] rr  77,,,,7777D0D08(8(!!  ))__܊<<RRP P ~~99:: >>RR>>KKߙۙ%%֏яѣϣϩЩα˱--ůƯȝʝ**͢ϢߚssBB22VV ! !AAII 55#!#!$ $ 11} } # #S(S(3.3.334444*9*9::77;;aAaAW@W@;:;:j3j3--%%""''''?$?$A A  ++11$3$3&1&1//--++ * *''%%## EE^ ^ yyuujjǯǯߨߨ髡ħ7788вٲQQ;;## " "  gg }}ff??&&YYLLttQQSSTTIIZZ''--**ggllPPюՎցҁҩϩ__22 ׌ٌyy((DD]]aa] ] //]]))jj!!,, 5 56677==BBXCXC-C-CiEiEOHOHHH><<3;3;!9!96622..++,(,(f%f%$$ " "VVIIr r JJLLDD%%%%uuܑؓӓȫƫ[[llwwooϾϾšǚ[[̹ɹ}}ΚҚ<<ޚYY  ooUUAApp;;0#0#**Y2Y2o?o?FFEEBB@@>><<995522,,cc~~QQjj'-'-++A!A!w w 55<<66jjUUWW gg77ZZ??ޟ۟۝ܝ 66 CCǟŸȷԷAAߵܵ22ܼܨִ֨ٴhhCC AA` ` qq##  --:#:#!!.!.!&&U+U+S(S(z'z'o-o-00))%%h*h***Q)Q)++**$$\ \ **881;1;77553311r0r0m.m.},},((## ss ``LL00nn޵++ۧקזܖܵݵddеҵaaZZȥ¥ѿѿ||[[**!!vvZZuuVVii``  YYEESSqq ##*%*%s#s# W W 1"1"%%X+X+ 1 1I6I6j9j9k>1>1>7=7=k;k;9977}4}4//..//e+e+""HHVV&&DD**jj^^==hhrr KKKK44ZZٌیۏހzz~~qq£ģkkNJɊɯ˯^^\\Өب++ss//\\!!^^EE{{ ""*,*,//00O1O1;.;.))))%4%488K:K:AA-C-C0@0@L>L>n>=B=B>>a6a69&9&00/ /  K K VV""!!##))..h.h...N-N-''@@qq####$$A)A)**((%%"" S S $$!!\\PPHHrr,,ֲ߲ЍҍiiVVcc7766PP##GG44αӱִӴӎώ˓œŽŽǢɢɭ˭[[gg$$jj$$**zz-- LL n&n&//7766X/X/="=" ` ` 11==A A ++{{  AA  ""%%-"-"{{ !!b"b"##''#,#,00M1M1..W-W-|+|+**J)J)t't'%%!!44""BBMMnnIILLܒْ..iiOOԛӛnnww̾ξddŮîQQggƪǪʺ̺;;UUss[[jjppN N !!VV55P P ,,{ { JJ__ ''''"'"'//88::22##>>00ZZ{"{"++44L5L511-,-,K K __UU aa("("CCUU8"8"%%I!I! XX,,''oo__޺gg--8800ܤؤ܇݇ݪت؊ҊKKӆ҆үʯooܓQQ33عй]] ֯دܹ޹݀zzXXII"" ''[[::,,ff&&77IJIJRLRLGG~D~D>>11 --??AA==R;R;99m6m611 , ,((%%SS 8 8 ggPPPPRRttllgg KKڭڐِ(( ..**ll;;XXYY77SS00 b+b+//3399<<99!8!866334040++N'N'>#>#-#-#!!HHiiB B 55CCآ˗͗UU͙͙ͼӼ۶޶VVeeoo' ' ggppHHRR[[LL55  llss::YYZZ**vvs%s%++**))j'j'%%$$'#'#!!d d GG T T pp11 ssQQ^^BBZZߵcc44nnnn00LLFFaa ܄܂ςDDɗ̗77 ҄Ԅԟ֟PPgguu ))$$##u u WWhhdd??RR??ee))[/[/ff@@QQ``$$44@@DDAA@?@?<<6600l7l79696/./.x.x.Q,Q,''%%$$!!rraa ??TTGG eeMM,,TTffBB,,22eeYY Բֲttkkqqtt%%iiXXKK   ttv v 6 6 J J # #E*E*..002295954400,,))G,G,11W3W33333!1!1//R.R.,,/+/+))%'%'""22UUvvGGPPKKFF%%LL::hhMMўڞڋދ޻ܑܻޑ((::44 ˾̗̾Η22IIFF{{ݩ||##55' ' i i     ''@@""$$$$v%v%6$6$k%k%v'v' ' '**&-&- , ,E1E1776644331100'/'/--b,b,**(($$L"L"!!nnIIk k XX--BBTT\\oottxxPPNN##ff ձұVVϪΪ..11((эӍVVؓՓՠԠւ؂qqܟssss&&33}}``kk--<><<;;9977554242j-j-++++++&&``,, @@ݝ55**))@@NNKKڴݴssooxx--!!1 1 dd,, X#X#..33b2b2//--=+=+(&(&HHtt .'.' FF88]]II QQ%%DZɱ??ͲѲڐBB**< < &&\\MMII&&޻ڻڐԐҠנכۛ11gg CC]]ܦݦ6 6 ++''tt!!j j 55!)!),,''  <<jjBBWWCC   KK!!v$v$!!JJZZ!!y!y! D"D"&&((&&## $$%'%'))++t)t)''&&G%G%##!!zzll? ? ||TTxxPPcc--LLڹܹ((bb==ۦݦ__RR##UU++##٧ڧچۆ֧ЧII՗֗SSټڼaaLLަ __rrQQ2288{%{%5588M6M6E3E3,/,/''!!H#H#^&^&4&4&((''9&9&,','0&0&## RR1177aa]] ``33rrhhxx$$bbSSRRBB bb55kkoo!!$${"{"g g q"q"$$&&))S,S,t,t,++))|(|(''%%## 55HH hhAAYY GGYYbbkkgg<<۰ٰ ww$$ʘ̘TTВҒzz!!֊؊33݀]] wwll[[ppllss]] EEbb99o#o#f.f.B1B1++""++B.B.M*M*+'+'q!q!~~GGBB> >   S S ##  J J zzw w XXSS$$SSnn@@Ժyyɼͼ++LLIIטԘHH##ԈՈccIIޏZZ:: l$l$/1/1 5 53300>->-**''$$$$H#H#9988aa b b CCaa__%%{{22GGމ55ޛ؛ޣRR9 9 D D   [ [ ooVV==_"_"A.A.22++i i }} V V { { 0 0 $$vv  NN & &1)1)''_&_&F%F%$$"" &&VV||uu% % ,,\\??22%%yyΆʆȇɇ99̹͹33ϠРpp__ڇ݇66yy$$oo||<<~~N N ^^gg##))P/P/0000//--I,I,**^)^)''3#3#11g g GGwwAAUUJJzzyyCC??$$\\jjLLUUբ֢ר٨::44wwCCyyOOxx CC>>``LLH H M"M"!! ""**//a-a-++**Z)Z):(:(&& % %##77]]ee5 5 ((YY44**}}NNZZڙӎΎyyRR؏ُNN''ܿݿKKLL{{ooAA    3 3 E E ggccOO^^{#{#((**))''&&`%`%'$'$!!xx{{mm0 0  ++eeccQQ00EE۲ۇՇөթߚߚ%%ߥݥ݅ۅIIܺݺcc--ooFF$$QQUU""zzIIbb G G ##!"!"j"j"o"o"G"G"**e1e111z/z/+.+.,,++))r%r%vvzz..! ! PPII'' //""NN==JJ,,99UUqq;;xx33߸22%%''//޸޼ۼ$$wwxx44::[[**44   zzJJ##66{{ZZKKmm4#4#$$"". . % % !!+"+"!! ppss>>dd>>kkUU ? ?  ff99EEOOss޸ҴԴԸڸ߼ݼ99UU܃؃ddMM׃؃؞ٞNN22wwDDaallZZSS%%bb..9 9 t t MM::O$O$ww]]ffPPh h !!KK||__ E E llTTV V llGGP P ZZ&&]]EEffݭEEaa܅؅]]FFCCTTסء##ppFFkk##eekkMM 77!!$$]#]#  cc % % 99**UU{ { w w   44mm88iiWWrraa44^^ߟBBRR dd::AAKKWW`` 4 4 ] ] ~ ~ F F ??eeRR  SSWW$$<<!!\\qqFF++xxffggs s ssxx}}::YYkkEEZZ//QQ__޺!!ܤؤ؟՟KKېڐ22ךؚ؃كOOQQ""VV9988UU99F F !!jj !!RR``ZZ$$M%M%  !!!!|!|!X X 88K K VV772 2 __\\@@rrppKKXXttAAiiMMvv wwތޑߑQQ]]ff\\RR!!(( $!$!((&& UU  ||L L ##%%!%!%7#7# 77++YY,,z z QQJJ!!((QQ&&CC::++VV**ܧާ((__\\EEhh&&PP.. 9966ss!!DD@@33//%%pp!!1#1#q"q"!!yyAAxx..EE88XXPP   bbMMPPMMߧ00IIqq rrRR^^ }}rr////ccppAAEE^^VV^^zzppVV ,,JJgg} } ""##,$,$9#9#]"]"""$$%%Y$Y$!!~ ~ !! ++!!!! w w   ++llCC%%MM>>qqݎUU MMkkLL<< AAssJJ##99YY [ [ TTEEllDDcc44vvWW? ? cc}}__$$,,ww = = UUzzփփoo !!ZZHH{{ ^^QQ   mm]]ccAA@@KK&&--llCCCC//88xx66ffQQ99uum m   IIRR;;}}ll]]11**  XXTT  ccII__??JJ@@vv\\__SSb b + + eevvxxyyCC**BB ""1144KKؗ֗MM<<څڅڦۦۇ܇ܦݦݲ޲޶߶߾ HH44%%~~ZZww//@@kktt/ / NN;; 99RR55c c ,!,!ww**<< [[zz11m m   _ _ A A # # ^ ^ S S NN@@c c SSYY{{P P     y y 22mm44WWttcc..,,ff""FF"">>44@@zz))))mmXXSShhGG y y >>""##K K  d$d$M$M$F#F#X"X"r!r! <<&&  y y 2 2 --%%EETT__ߎ}}&&$$UUssz z TT 11BBMMXX-- ii**SS88OO%%``$$FF ==&&hhgg99DDcc}}44||ss44 llffyyRR??DD YYvv^^ hh;;]]QQFF((pp)) uu"" wwuu44JJiiffP P UUBBBBEEhh""PP[[!!11DDQQgg LL>>++mm..77``kktt AA]] VV44;;ssCC22bbhhHHNNdd00   + +   oo11^^RRBB  {{IInn66UUUU11""  ==BB{{ G G {{YYBB88--}} 33EEUUcczz++^^kk88zz%%OOZZ??NN--((KK $$++[[  G G ``||..%%GG))tt..!!^^||[[<<E E k k qqIIKK mmKK++SS!!99>>vv!!::BBII!!((HH]]MM9966ccg g 1 1 @@ddFF>>,,FFTT;;IIOO// q q wwC C CCaaLL**NNp p ''BB  oo66''00AA::   DDqq$$xx__FF}},,99llgguuYYhh..11kkss**{{qq0099||tt66EE@@FFcc[[mm  PP??pp[[""KK  ##  kkBBDDN N IIPPVVkk11QQUUff**XXcchh00LL>>||QQkk''}}--TTVVjj$ $ ??  88KKUUgg   !!VV88XX\\eeppNN%%..00cc^^ww$$NNff a a ||  44k k v v @@  JJ++>>22YYll~~::EEcc||zz<> BB;;RRFF__wwaa))BB NNXX ZZ@@? ? S S 77++rrCCllqqxxHHSS~~UUffWW--EE88YY88**yyIIee   ttZZ%%ii6 6 33nn??<<@@UU""HH2 2    ) )   " " ZZ<<DDMMCCNNNN||PPll}}yycc@@BB==QQBB))iiBB KKdd))33..gg aa  CC##**LL    DD<< ~ ~ > >  z z dd22**AA55QQ//uu55yy~~QQYY::SS,,uu||NNjj$$EE>> 1 1 O O - - AAaaWWTT11YYBBzz q q dd11kk~~nn@@22mmC C ^ ^ / / 8 8 c c 5 5 G G 0 0 j j O O K K = = b b h h     ;;77iiFF--IIBBOO""UUqq!!IIXXzzZZ## **))%%}}ssss YYPPYY&&~~ff wwrr}}zzLL 22bb99  tt__ee$$ttbbww  nn__88##S S Y Y ( ( h h n n g g   M M ' ' ~~^^O O ! !   n n EEAANN$$YY22SS&&**QQ--;;++55oo33--bbvv --ffFF88EE>>??==FF44zzdd  S S 77tt00\\((__BBllZZ%%GGLL++  44##==hh==TTww!!>>&&1133 77SSee22>>MMDDZZEE77??99FF99qq99zz%%CCrrnnNNVVDD..-- @ @ Y Y { { ..mmjjvv))88RR[[11uun n ; ;   RR ZZttoo''ii}}DDYYpp--^^ffee||hhllyyCCMM66VVll~~* * $ $ PPwwww))# # n n //QQ&&KKFF==NN00 {{ddtt22DD66ooNNttEE>>KKttBBss DD((55mm{{}}V V   66##__MMSSUUYY&&bb;;&&EE__KK{{UU   H H x x ccaa""8 8   22    [[99XXuu00PP!!~~55  BB  __HHKKEE NN||VVVVPP..LLll,,33HH==llhhvv''''[[^^..KK``  ppvv>> 3 3 U U r r s s ++  g g   R R | | Z Z jj3344QQeeZZttee kkff##bb88ffppnn kkCCdd..%%??LL6 6 33}}llll, , i i II" " : : zz##xxzzUUxx??^^TTqqEEbbbbD D   x x   8 8 &&++DD11"" ||%%TTii%%22iiAAKKBB ww||55__JJJJ''bb||HH55kkmm;;4488 @ @ ) ) = = W W b b ? ? $$##00  llvvee55XXrr uuEELLBBii((QQllxx 5 5 a a h h & &   4 4 11FFMMkkrr 11YYVV??}}YYjjyy@@]]""}}FFllx x % % jjgg''++%%iiUUs s ` ` > > Z Z   ''vvjjyy@@##uuyyaa..JJ ffWW  rrii==KK ? ? - - 33ppAAccppbbhh((ZZMM``--RR^^))ff??$$\\ll@@;;kk,,ttHHBBOO+ + 4 4 7 7 / / A A 22pp   Q Q M M C C   ##ccJJVV""  ll 7 7 ??[[--BB  aaPPWW''ggCCNN__11 <>bbqq((TT99--UU--MMUUvvBBqqBB : : gg<<SS[[$$""SSooNNAAhh~~77eejjoo--!!ii^^..NNss  ssFFbbYY>>  ||<<  IIBB''TT!!eeLL66AAbb>>~~DDmmTT6677JJooDDrr>>DD,,YY$$]]**CCvvddUUAA__~~ff..::xx ccVV  {{  qqUUss""ppZZ--{{77KKtt''00QQ>>99__PP^^mm9988||NN/ / I I   AANNYY[[aaddBBAANN..PP,,^^rrddPP((KK66vv''))uummBBeexxLL ??[[~~qq==11ll^^GG$$<<mmOO&&rrooffww77[[ff<<**ss((\\SSmm&&//ff||RR__BB!!AAjjUU//pp--VV??44bb''//88gg  66bbOOhh00DD11SSAA99ggvvvvGG**DDQQnnbbQQ**ee55 GGeeJJUUWW//++##ee((tt\\VV}}QQ..iipprrLLPPqqvv>>!!II44rrppTTQQ}}##@@ss&&CC<<77::QQuuDDqqPP..)) NN88gg44xxMMOOJJ1122EEoo((....&&5566++ll,,tt::YYuunnOOLLNN&&##tt__++''88ffxxww~~((  YYbbCCTTEE&&ZZ0022MMddPPee^^ppnnZZ66 PPKK++{{CC####ll$$TT~~~~uuXXaa>>..{{%%nnllRR||ff]]\\]]eeRR}}ggddggWW--\\..44NN22ee&&EEWWJJ?? 00kk11!!xx55NNcc ff==yyhhjj<<nn22''bbOOss  00aaPP**zzOO22..ee??PP$$QQgg..JJXX22zz{{{{FF::ccHH>>33##llzz//EEFF..nnSS!!,,::nnFFCC<<UU55rrQQCC88hh5577EEiiss``ll00tt__ppII$$QQllzz  33((vvKK!!aa||ZZYYRRCC==YYKKhh ffMM||TTDDDDffQQJJ $$''''""88++bbVVggJJee''33ddssDDSS99..55@@oo22--ff~~llhhvvXXWWmmff77]] OOXXBBbbXX22ppSSRRxxZZee||!!~~OO1133HHHH##((  qq[[// JJ88UU!!mmMMKKff))DDHHYYttJJkk LLFFII~~BBjj((__zzWW^^11IIll##<>==oo,,~~88nn""%%FF}}  &&6699<<BBHHOOnn  RR}}{{OOWWaa$$YYbb@@llVV??4433\\^^ss!!UU%%XX>>kk>>__ bb--kk<<;;mm++99rr--ppSS==**00NN{{kk////##  zzVV<<aa((rrPP iiCC%%ww}}cc44VVGGqq..jj''\\  AAww  JJ]]00SSnnTT88[[bbOO>><<__nn((ssttmm::>>gg||TTuu}}ii--66 iirr<<44ff//CC++OO xx22WWww==zz&&33''\\,,ddaa@@eeBB$$  ??nn LL))``QQ}}ee++55<<--wwLL,,pp88  {{KK!!ooEE{{JJssWWNNVVccppuurrppyy..``KK((aa--__nnjjkk33dd__,,OOOO ss\\TTHH##{{::}}^^SS@@;;LLmmkkii}}EEXXLL9922..'' 44ffdd22$$UU::CCgg;;qq~~33jjyyppnn}}||II**!!//HHccttOO''  ++>>@@//iiEE!!zznnffccUU??""ll^^MM4488tt ##RR!!66RRss!!EE``iioo44TTiiffZZEE++  ]]--rrHHUUxxMM**''<<[[}}SS88ffww!!((MMNNPPNN77%%{{ppbbZZLL))ffPP33qq==oo--&&KKqq||llUUEE@@9944<>VVrr88WWyy##EEYY^^^^ccmmeeKK88%%rockdodger-1.1.4/data/images/0000755000175000017500000000000013706632107016317 5ustar krawczykkrawczykrockdodger-1.1.4/data/images/deadlithiumrock.02.png0000644000175000017500000000146613706632107022424 0ustar krawczykkrawczykPNG  IHDR"#(UgAMA a cHRMz&u0`:pQ<cPLTE 4N>ZI0SjpnW%9c`]e!hE(+BJbKGD k=tIME+IDAT8˥n 8 xHa[Tv^AHt|!C erH2:aEUZ+\cBds6=;>yʥ(h,e]}'G9@F;OdvgOvQ3)}D+(l7OYޱDDPGdkumЎdɥOgIzZ8 IjհvQyi?SJ=l4j8pTi:6R&&tDOykhu`]yqΟsp'G-t'\:ߑ:ޏBW<[yyְWs Bȶ/o Չ…~#zQ;Bވ-|D0o|{5W8g6+PTqQ HJ?Pyz)w}߮~i ֥_Z#V@anoȄ~GO!|!%tEXtdate:create2018-06-02T22:29:43+02:00h%tEXtdate:modify2018-06-02T22:29:43+02:00IENDB`rockdodger-1.1.4/data/images/laserpowerup.1A.png0000644000175000017500000000067113706632107022021 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 5 5IDAT5Y0 @QhZ\@E; oBQƨ)qcAn$ Տs߲R_~c\:Iu&j c`@{Sa𥂕fJV"BJJ M ~B86g4.[-'?g iXIENDB`rockdodger-1.1.4/data/images/ship.04.png0000644000175000017500000000261713706632107020220 0ustar krawczykkrawczykPNG  IHDR, sRGB pHYs 4)$tIME /Q!IDATHǭKTESUoiafđ++*H"$!Dn &.1qo FI@haP$ : jIlVN Qޖmk6f@eD>`ߟ(/Dorяzn\cVZilr\(U&*(XD"T(Z˳lp׮;W w4MOxWSjFHHiDr3v۷w^PCpvx5In6k]cN=<22ܟejAC &l\tݻ%=̃;O`'~صεҼtQ*@m݅t~%!ee`||1{`M]D֔ e/gF=Wy;MCin-;>tmuS6%FyZм$r{&vbLEϞ݄nW\z%پs^)$YD!CCATz˜2ZkUZGf֯R]#"˕"quwRXՎ$B"0䫂pDDjcc f":_eq5͂$&Hݮ-lw+E[90( JaD VC6Fb6?V}⿎͵k , IìZʬ/X}##~岪*z@0Ud8(غyaxtU .\CZU$PY: ۚivIk"=k Ő#NJ$3ueRp"y>ŝ.1$ZN7@) 8SF;7Ч#BZN6j! "A<EZ64>Gur&b{R~U l°p7\< G:=s9wcU4@D!< wo's,Wkg`һڦlk3s9RJD"R^Nέ/uC˪vҪ}~T bKGDH pHYs  @AtIME -")sQIDAT=0 EQEֺ:g ;G(!o\|Q:Z} 1*[]AV Vic!oiys"S86 ab[yu'΢ܘVc}IENDB`rockdodger-1.1.4/data/images/deadrock2.bmp0000644000175000017500000000316213706632107020657 0ustar krawczykkrawczykBMr6(< rockdodger-1.1.4/data/images/laserpowerup.0C.png0000644000175000017500000000067113706632107022022 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME .;f5GRIDATM0 Eᖴ#?yȴg&e`,}$^nY@Dpuxb[V q;'m͕']l16 404[ Rl@ A[(PIKDպ_X%~&ĒYd`+9qrcr2|}9IENDB`rockdodger-1.1.4/data/images/deadrock5.bmp0000644000175000017500000000206613706632107020664 0ustar krawczykkrawczykBM66( rockdodger-1.1.4/data/images/blubat.00.xpm0000644000175000017500000000161613706632107020540 0ustar krawczykkrawczyk/* XPM */ static char * blubat_00_xpm[] = { "32 20 9 1", " c None", ". c #0000FE", "+ c #000091", "@ c #0000FF", "# c #0000F1", "$ c #0000FA", "% c #FF0064", "& c #0000FD", "* c #000016", " ", " ", " ", " ", " ...... ...... ", " ....++++. .++++.... ", " ...++...+. .+...++... ", " ..++....+.. ..+....++.. ", " ...+ ..+... ...+.. +... ", " . .+.... ....+. . ", ". +@. .# .. .@+ .", " .... ", " .....$ ", " .%..%. ", " .....& ", " ..**.& ", " &&&& ", " ", " ", " "}; rockdodger-1.1.4/data/images/deadlithiumrock.01.ilbm0000644000175000017500000000122213706632107022550 0ustar krawczykkrawczykFORMILBMBMHD  CMAP!"`\ B,?\ B&0F?0 ?x0@|0@C.8<@6`x9/PD9?:E  S ?E8X$98P~.h"> dc= i?|??>~T?(' 880(81@~s` rockdodger-1.1.4/data/images/laserpowerup.0A.png0000644000175000017500000000066713706632107022025 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+  YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T5p}bKGDH pHYs  @AtIME . IDATE@ FSdZ9ԼIrld~WƨFR 쾂SQ"۞7,}dn}eQՖF&&5fJ^"BJF2(Ka1Jl%~'3N*_84\{.IENDB`rockdodger-1.1.4/data/images/lifepowerup.09.ilbm0000644000175000017500000000021613706632107021753 0ustar krawczykkrawczykFORMILBMBMHD CMAPBODYP}~?~}rockdodger-1.1.4/data/images/yellifishtentacle.00.png0000644000175000017500000000044013706632107022751 0ustar krawczykkrawczykPNG  IHDR)AA PLTE6W pHYs  tIME  NAtEXtCommentCreated with GIMPWIDAT=̱ @Dэ8p(:pйǂ 9>$J0!qp7<DEYQ+ >Y+"/-b܂A ;X#J#u#n劖IENDB`rockdodger-1.1.4/data/images/rock2.bmp0000644000175000017500000000316213706632107020041 0ustar krawczykkrawczykBMr6(<  (()..0++- !    **,55799;::<99;66822322499;;;=;;=88:--.**,::<;;=;;=;;=;;=;;=;;=446 --/;;=;;=;;=;;=;;=;;=;;=557557;;=;;=;;=;;=;;=;;=;;=;;=..0889;;=;;=;;=;;=;;=;;=;;=;;=;;=..0 (()99;;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=88:..0::<;;===?BBCHHINNNQQQRRRPPPJJKAAB<<>;;=;;=;;=;;=;;=;;=;;=;;=;;=(()++-99;??@HHIQQRVVVVVVVVVVVVVVVUUUSSSJJKBBC>>@<<>;;=;;=;;=;;=;;=;;=778 !88:JJKUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVUUURRSNNNHHIBBD==?;;=;;=;;=;;=&&' >>?TTTVVVXXXccessxvv|ssxeegXXYVVVVVVVVVVVVVVVUUUPPQIIJ??@;;=;;=;;=557 ffhffheehww|yyyyyyyyllpXXXVVVVVVVVVVVVVVVVVVTTTJJK==?;;=;;=::<yyyyxx~yyyyyyyyyyyykkovv{yyww}mmq^^_WWWVVVSSSCCE;;=;;=;;=<<=yyyyyyyyyyyyyyyyyyyyyyyyyyyyxx~ggjXXXUUULLM;;=;;=;;= ! yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxx}^^`VVVQQR;;=;;=;;= yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyffhVVVSST;;=;;=::< xx~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyffiVVVSST;;=;;=445 ==>xx~yyyyyyyyyyyyyyyyyyyyyyyyyyyyxx~bbdVVVQQR;;=;;= !ccettzyyyyyyyyyyyyyyyyyyyyyyyyyyxx~^^_VVVLLM;;=,,- ""#[[[rrwyyyyyyyyyyyyyyyyxx~yyyyxx~oot[[[SST<<>%%& !cceww}yyyyyyyyyyyymmq^^`hhkqqummq$$% eeiww|yyyyyyvv|ffi>>?  $$%>>>778!!"rockdodger-1.1.4/data/images/blubat.04.xpm0000644000175000017500000000317513706632107020546 0ustar krawczykkrawczyk/* XPM */ static char * blubat_04_xpm[] = { "32 20 59 1", " c None", ". c #000019", "+ c #00005E", "@ c #0000A7", "# c #00004F", "$ c #00009E", "% c #0000EA", "& c #0000FF", "* c #0000E8", "= c #0000C5", "- c #0000E9", "; c #000038", "> c #0000E5", ", c #0000BC", "' c #00008E", ") c #0000AB", "! c #0000D9", "~ c #00008D", "{ c #00001C", "] c #00006C", "^ c #0000FD", "/ c #0000B7", "( c #0000B9", "_ c #00009D", ": c #0000E3", "< c #00001E", "[ c #0000D5", "} c #000099", "| c #0000FE", "1 c #0000C4", "2 c #0000EB", "3 c #000002", "4 c #00008F", "5 c #00004C", "6 c #000031", "7 c #0000F0", "8 c #0000CD", "9 c #000030", "0 c #000050", "a c #000058", "b c #00009A", "c c #00000D", "d c #000091", "e c #0000D6", "f c #000084", "g c #00001A", "h c #0000B5", "i c #0000F2", "j c #00002D", "k c #0000BB", "l c #000021", "m c #00006D", "n c #00005A", "o c #000018", "p c #0000FA", "q c #00007A", "r c #000036", "s c #FF0064", "t c #000016", " ", " ", " ", " .+@ @+ ", " #$%&*=-; ;-=*&%$# ", " >&,')$!~{ {~!$)',&> ", " ]&^/(&&>_&: :&_>&&(/^&] ", " <%&[}&|^12|&' 3 '&|21^|&}[&% ", " &|4562&4*&17890%71&*4&2654|& ", " a&&bc de&f gh|i8j f&ed cb&&a ", " @k lmno ^||||p nml k@ ", " qr |s||s| rq ", " , |||||^ , ", " ||tt|^ ", " ^^^^ ", " ", " ", " ", " ", " "}; rockdodger-1.1.4/data/images/laserpowerup.17.png0000644000175000017500000000067413706632107022012 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 4%IDAT=W0 &٘P=!XAQƨ81zv?ADO3{"*n s߲!o\;MՖ;MLl4PrB*TҒ8d M.+aDk2t'ؚ8uLp%~}/!VIENDB`rockdodger-1.1.4/data/images/lifepowerup.02.png0000777000175000017500000000000013706632107025070 2lifepowerup.00.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/deadlithiumrock.01.png0000644000175000017500000000111613706632107022413 0ustar krawczykkrawczykPNG  IHDR txҿgAMA a cHRMz&u0`:pQ<$PLTE"jI0}9/Q?LF76~ˊRjTB?BU,cڞs{-uTGJJ@ٜ0*+c)blTm=+xccх%լH̓R$e PyÛhF6ACn4L }]+㾴_ ֣j6Xb`NY^2}+"Ž角 GI\N8tTi#uA/v傣sp֚)„>w[F]/xDcJFjS?IQUfyhcMҺLŖRu$IGOgj7siz,<Z/HJ"qRo0sm%:1[@UTJ$})S(ZimA1#6-s9z?=oʘ&!a#~o$0%tEXtdate:create2013-01-14T21:50:44+01:00Bb %tEXtdate:modify2013-01-14T21:50:44+01:003?IIENDB`rockdodger-1.1.4/data/images/lifepowerup.07.png0000644000175000017500000000074213706632107021616 0ustar krawczykkrawczykPNG  IHDR(-SgAMA a cHRMz&u0`:pQ<cPLTE ##//CCI%'%+@]UU~z22Df>I{5/ S FG*--D12[ _ bKGD k=tIME6|IDATM0D`Ӻ4՚]Ix V/Q})q#d` Wdp@OFgm,Q2<'wAV ެÊV)[,1nsܾӡ%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/ship.09.png0000777000175000017500000000000013706632107022106 2ship.03.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/yellifish.0B.png0000777000175000017500000000000013706632107024167 2yellifish.01.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/shieldpowerup.02.png0000644000175000017500000000125613706632107022143 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-s-u|HbVaZyWFowgvl?49)EPAHSUeU*U=r9    $$XXtv VY{*   !?     &%+ :@?EDIFK_cei  UЪ{Ӫ~c~㙣   KVK pHYs  @AtIME  1rGYoIDATc%%(B8U)" ( W!+" J-yJ.p:QA&% ̌H;~eOHHOf'& l-!R,NCnKd()zxNsc-IENDB`rockdodger-1.1.4/data/images/rock0.bmp0000644000175000017500000000210613706632107020034 0ustar krawczykkrawczykBMF6(    //188:88://1 ,,.;;=;;=;;=;;=;;=;;=//0 001;;=;;=;;=;;=;;=;;=;;=;;=../  !889;;=;;=;;=;;=;;=;;=;;=;;=;;=::<##$ @@AIIJKKKKKLKKKJJKGGHBBC==?;;=;;=;;=;;=446 GGHVVVVVVVVVVVVVVVVVVVVVTTTOOPBBC;;=;;=;;=::<VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTTTDDE;;=;;=;;=,,-778VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTTT??@;;=;;=668VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIIJ;;=;;=::<PPQVVVVVVXXYbbdiimhhk__`XXXVVVVVVVVVVVVRRR;;=;;=::< !kkovv{xx~yyyyyyvv{cceVVVVVVVVVVVVUUV;;=;;=224 xx~yyyyyyyyyyyyuuzXXXVVVVVVVVVUUU==?;;=yyyyyyyyyyyyyyyy]]^VVVVVVVVVUUU??A//1 yyyyyyyyyyyyyyaacVVVVVVVVVUUV>>?yyyyyyyyyyyy``bVVVVVVVVVUUU//0 !yyyyyyyyuuz^^_VVVVVVVVVSSS!!"yyyyyyxx~iilXXXVVVVVV@@Ayyyyyyvv{[[\VVVIII  !yyxx~778rockdodger-1.1.4/data/images/shieldpowerup.04.png0000777000175000017500000000000013706632107025756 2shieldpowerup.02.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/shieldpowerup.01.png0000644000175000017500000000133713706632107022142 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-s-u|HbVaZyWFowgvl?49)EPAHSUeU*U=r9    $$XXtv VY{*   !?     &%+ :@?EDIFK_cei  UЪ{Ӫ~c~㙣   KVK pHYs  @AtIME )SIDATc%%%LƘ:! U)j\ 9ٲ:.jJ8GRrmldP H@U5ATPII"iί bic1)\VD[ bhuZ0 *aB<|ܖNp*)iz"yN[sHT3IENDB`rockdodger-1.1.4/data/images/laserpowerup.00.png0000644000175000017500000000067213706632107022000 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~P}cibKGDH pHYs  @AtIME *{IDATU0 FwCvs@E,"&zQ ñѳݽDO3D4 w OL}/h']J/Sc`@0V%_(Xh6d -dXID:ñi_ 9~ƶ/KVy-pI  <"IENDB`rockdodger-1.1.4/data/images/deadrock4.bmp0000644000175000017500000000352613706632107020665 0ustar krawczykkrawczykBMV6(  rockdodger-1.1.4/data/images/lifepowerup.0B.png0000644000175000017500000000050713706632107021630 0ustar krawczykkrawczykPNG  IHDRbgAMA a cHRMz&u0`:pQ< PLTE9t-bKGDf |dtIME6;IDAT- 0 BQ|ާݠT^y?J Nr5|569F%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/lithiumrock.01.ilbm0000644000175000017500000000122213706632107021732 0ustar krawczykkrawczykFORMILBMBMHD  CMAP!,""N<`\ B,?\ B&0F?0 ?x0@|0@C.8<@6`x9/PD9?:E  S ?E8X$98P~.h"> dc= i?|??>~T?(' 880(81@~s` rockdodger-1.1.4/data/images/greeblie4.bmp0000777000175000017500000000000013706632107023216 2greeblie2.bmpustar krawczykkrawczykrockdodger-1.1.4/data/images/lifepowerup.05.ilbm0000644000175000017500000000063213706632107021751 0ustar krawczykkrawczykFORMILBMBMHD CMAP` ##00CCI.^O_Ĺ#)AQco7Jςc胃ts=@E7{5/JG*#! \D12[BODY;x~~~A? @`L 0@: ?_a>`@  ^`^^~=`!x Trockdodger-1.1.4/data/images/shieldpowerup.05.png0000777000175000017500000000000013706632107025756 2shieldpowerup.01.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/laserpowerup.13.png0000644000175000017500000000067313706632107022005 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 060IDATU0 EhZ7Pg<L\&1spcfAvwo.GGV{";^-fk :_š>p 3VV[VN44 X]/,4PB2TRq"jشss̄}/iy-pɋ/bXh^IENDB`rockdodger-1.1.4/data/images/deadlithiumrock.00.ilbm0000644000175000017500000000151613706632107022555 0ustar krawczykkrawczykFORMFILBMBMHD CMAPW )-~A19bfvj!ZVzRNIr^nE5=BODY  ??? p0X  /@8i1&`@</x ({>I"p@ A߾A?.p|s~zx<w@??` /? ?  P@@rockdodger-1.1.4/data/images/yellifishtentacle.03.png0000644000175000017500000000043113706632107022754 0ustar krawczykkrawczykPNG  IHDR)AA PLTE8w@( pHYs  tIME  )EtEXtCommentCreated with GIMPW{IDAT51@@M{R( ND4  5^M_͛dFR'R.FDI! "'X\9tD*a8֒af8笅|2W c #000078", ", c #000053", "' c #000046", ") c #0000C4", "! c #000082", "~ c #000038", "{ c #0000BA", "] c #0000F9", "^ c #0000FC", "/ c #0000BC", "( c #000036", "_ c #00003C", ": c #0000B8", "< c #0000F3", "[ c #00003A", "} c #000064", "| c #0000FD", "1 c #0000FE", "2 c #0000FA", "3 c #FF0064", "4 c #000016", " ", " ", " .+ +. ", " @#$%& &%$#@ ", " *=-;;>, ,>;;-=* ", " ');-;-;;;!~ ~!;;;-;-;)' ", " {];-;;-^^;; ;;^^-;;-;]{ ", " ;;;-;;-]/(_:;<- [/]-;;-;;; ", " ;; ;;-} |11112 }-;; ;; ", " ;; 131131 ;; ", " ;; 11111| ;; ", " ;;; 11441| ;;; ", " |||| ", " ", " ", " ", " ", " ", " ", " "}; rockdodger-1.1.4/data/images/lithiumrock.00.ilbm0000644000175000017500000000153013706632107021733 0ustar krawczykkrawczykFORMPILBMBMHD CMAP]$(  qqE44 ,$$<,,iUUuYYiiy]]qYYaMM]IImmYEEUAAM<|NI" q?+.vxxs~{x<w@??`//?/? @@rockdodger-1.1.4/data/images/ship.0b.png0000777000175000017500000000000013706632107022155 2ship.01.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/laserpowerup.0E.png0000644000175000017500000000067213706632107022025 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T3<bKGDH pHYs  @AtIME /+bfwIDATUY0 ] dq`'-k%$#Fosf<$! ܬ!00s==oNg~CGWlSbv<\0Eq,c L,;0!]%F쭭a1J-act[ /-hIENDB`rockdodger-1.1.4/data/images/deadicerock.02.png0000644000175000017500000000210713706632107021502 0ustar krawczykkrawczykPNG  IHDR0NPLTE?==Š=Q=C@=@=BM==WbzcbtEXtSoftwareGrafx2SjIDAT( b vTYvb>ɹP9{,%\"TQ{;m>yE$f-Ơ‹ CXbJJ$j_L`H37Jrܵ?Ll9+ 37Z#pd@=C%VF_]weUL~(B;`M[F'>MNt?jsnq_czG]|IENDB`rockdodger-1.1.4/data/images/deadicerock.03.png0000644000175000017500000000224013706632107021501 0ustar krawczykkrawczykPNG  IHDR(( H_PLTE^^cn^aa^d^r^^^`׷^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז^ז`׷`ھ`````````````aaaaaa``````_____^^^^^^^^^^^^^^^^Wbz tEXtSoftwareGrafx2Sj@IDAT8A0 Ÿg u?H6m;nj,ru0~\݋`$p/ykBFE $VPD=P!OHJIT}cwlb/X{wOJDQ(n7KѥKn31C'w?IZTd*%IENDB`rockdodger-1.1.4/data/images/lithiumrock.02.png0000644000175000017500000000146613706632107021606 0ustar krawczykkrawczykPNG  IHDR"#(UgAMA a cHRMz&u0`:pQ<cPLTE M@4t`N]M>nZlYIG;0{fSjpnkW7-%UF9!ycv`r] |e2)!h,%fUE;1(@5+bQB(!bKGD k=tIMEdd(0IDAT8˥n 8 xHa[Tv^AHt|!C erH2:aEUZ+\cBds6=;>yʥ(h,e]}'G9@F;OdvgOvQ3)}D+(l7OYޱDDPGdkumЎdɥOgIzZ8 IjհvQyi?SJ=l4j8pTi:6R&&tDOykhu`]yqΟsp'G-t'\:ߑ:ޏBW<[yyְWs Bȶ/o Չ…~#zQ;Bވ-|D0o|{5W8g6+PTqQ HJ?Pyz)w}߮~i ֥_Z#V@anoȄ~GO!|!%tEXtdate:create2018-06-02T22:31:00+02:00]%tEXtdate:modify2018-06-02T22:31:00+02:00[QIENDB`rockdodger-1.1.4/data/images/lifepowerup.08.png0000644000175000017500000000050713706632107021616 0ustar krawczykkrawczykPNG  IHDRbgAMA a cHRMz&u0`:pQ< PLTEfQbKGDf |dtIME6;IDAT- 0 BQ|ާݠT^y?J Nr5|569F%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/yellifish.01.png0000644000175000017500000000314413706632107021236 0ustar krawczykkrawczykPNG  IHDR S4bKGD pHYs  tIME {tEXtCommentYellifish>IDATHǝowfv")c7N4i EDTi]ǖ%ѢN0b;su"@) CX\9:[ޣЯ17w\ğ:߽x/!<b P@70:'g9Ps lEj` =Fq|pjlhzˡ#̄b)Lyv 0M(@" 0ٔq/lu`̋p^,c_j{)aU8q}4G_S0 _?$*o=Ȭ6\*ƅf B-B#UY~b(`Q(OOtcly_rG\m+o‚XGրW}5y.lhor `G=:d^ctMwX-eldľѢ-*JU5R^ ?8\aM2O%NL[*vzp\LwlYQ@,S P(ԍ&?>:Y˺J25px>VAj~έpVwjt"\"[kHM5H]()pY>'#fcDIe_{K*Ҭh1jaRsl[`nfTdYEqdlLJs4@Hcg tJR[\5R5)˞]G;rr{՞ q*yBW])`Œvpɥn& +^.qP42oVC )32A j!T USŞى?&pk4FΎYJ/u 6w!3P#eUi tViq u B9 kCj% ‚ ƷJ4 Y.yN{`Rp\5-(2i@v ֵl[ T\ %dvy UbljmB]sD5hF<5MKyd*(6*BskPAK0MNDAWiqu[l2&x@ࠅۦ<3Mig,/!JR*S,O+Su*X'DHM;B*2K4U*Hާǿq\\;wo` n IENDB`rockdodger-1.1.4/data/images/yellifish.0A.png0000777000175000017500000000000013706632107024167 2yellifish.02.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/laserpowerup.0D.png0000644000175000017500000000067113706632107022023 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+  YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T5p}bKGDH pHYs  @AtIME /:*fIDATU0 EQhZ7pӞi iD cgTm9zE۞p`#I\_O}J$n^}P.їV[V] X_ /4PB TR8d.ph\DZaN2O%7qb6D3IENDB`rockdodger-1.1.4/data/images/yellifishtentacle.04.png0000644000175000017500000000042513706632107022760 0ustar krawczykkrawczykPNG  IHDR)AA PLTE58 pHYs  tIME  :tEXtCommentCreated with GIMPWwIDATU 0PKH ),","Ҁ xc%;DU|Y*08A"BvXz|4Đ d&HjUN<;MTHVvVy`@  `^>?b%| Trockdodger-1.1.4/data/images/yellifish.05.png0000644000175000017500000000325713706632107021247 0ustar krawczykkrawczykPNG  IHDR S4bKGD pHYs  tIME  =JtEXtCommentYellifish>IDATHǝ]oW}y<qIiJiEB\ ?P\ $Jĉgx=_9JS܌^k:!0cX_99[Fu `X@ˉ 3wC'wo}~=;  4ߧU@iwAoB R aVRYA͆-1 3'Njpmu~߄> #U^9I"sy߫Ӻc'B qzBcE>WNv-ٌX_4qEq඀7!О+0)3Bo-Ҹ9ϝJWPUOV} 0v(pͲ/NS[ 6 l-N5 ڶnym*ؽgig}o& !& O-k5 ȝU Ԛq[db+^sWyx[UFv"kyYfm">RdF84/ e9۲ybMq_NW)gx n-*MV%*v.&Tynzj{ǬIH;v99C{͗⤛zVyH=y&l‰(f`ݔ'b \PݤXAIIbC1O ?-VZ|*E #V2'FB9-,g\:/'~Fppr %IENDB`rockdodger-1.1.4/data/images/laserpowerup.1D.png0000644000175000017500000000067213706632107022025 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+  YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T5p}bKGDH pHYs  @AtIME 68IDATU ESU [ʴ?ی!CȅB'(űѳ jV=0Qn{~1[+S{;ݖk'W@톜oF_[mYyb lh2`b{j V0l@ A[PHDպhr/fX 3/-Ô^"ጓ/ jioIENDB`rockdodger-1.1.4/data/images/laserpowerup.16.png0000644000175000017500000000067213706632107022007 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 3;>Z<IDAT= ESRĭuejUÜIBQZcl6q&Ag,,DT=܆ecd C~aYu|&zgj ZAMtlw fE(9!`*YI2u]!q ~JXh_4.yqDr1˥u[IENDB`rockdodger-1.1.4/data/images/mood_item.03.png0000644000175000017500000002610313706632107021224 0ustar krawczykkrawczykPNG  IHDRKsRGBPLTE $* &3%($.&%4&A/"86.ID4."?439AH0V4&R;,X;'H@/7G0^?&c>.g?)bB#l?&JLQVNIxG-~E0bKHuH3F+sK=iN?K1L+P3OCj\XVAS.T3U9[N[CV@WNZ=bifEjro[m-}{ysZ|m}ģ pHYs  tIME 8 oqx IDATx Cȶqc " BH {zghc3Zr:UV;888Վ{@jcy^-WWˇ-/_f_iN)aN·J)7rѷ>σ6a7ߞ,̱/Ǔɸ?ρo?6Qq }_n?mqlTp79f `=!uDn۷ mb9!h`7. Z.. 4`u 'U9FI3f VHEKj E?rn &5}B.h l[pG^it>!ڧx/=a dNm%O{H:=lT1DPdZQ8Gdx}}$otڍf;ێ;=@<M |1H]yN^\$KuMwz|ƒj0$ H0/-dVSZ3<ɥ' I~o9=F:$描9Hmakjv RTm>NĘ \_Я}Չ^g<1O&ԁfal@=2,HeެG*I>C\_)Hw0zlNq>>BQ]BK6ϞbA+ G5 U_ǫ: ]Jj)kaZuB;@L`6?4_{0 S4o $䠦æzKqH`3%(p œGٷgḌua4 IzSr23^z ⏦xC>c_wsɧ@k)|L(9=ի<,+VVZ9sd0 i h P)51y^$sP #ȉf+dTȴ8B36c1@O@gbCɣ  &`) m >!)f~Tp֝o$ Gޥj!{h>U3 9=dRI+zub2rN Js|+JI~+qݼGKc9m>op ݟIqPgic8 %9aY֞8  dX$^l{.G]8DҌW@z6tLLt2HŅ"R)i꾦Axr ビ:W0j GPpQáXeoN6.3mc.LsjhZqZ= ]hNɈEO/AGUKCl#Cq~*}漎P4ԌXV&+hW{:]DW?]M蹫rX0}`CbͽGA~N8:2ȐÄ 28i4kP\O`eaH " /gRGiZjWW4!7@0i٨GX4yz c sAہ8DR!L!U&x!I h#< Cx/MŻZ5iN8Gj=ƒۮW uGpH؀ \l>~xȱlA:Ⰺ ^ϵu b'=f4 6 p 7L8|JfHFz-ͧDzaJy,Lnw}0KR _lwq ho8ٖSeGuc:^[LAL2 65%H`T@fG8y[&8tf ~7JepjP˲/U.|KalH f@~.MUXo;luپb=:riU 'u9rL}@H AQkqQ#zW!sb ߲8HH$Ov( %uEq{-Pi7#!rVŮjGH xa=@9;O|xJqqI#pf#΍x>W $"d|3CuYM sٞpN͈u‘݀@G 9"#" ukr3wK"<`hJ+y @(e!Yf 7pOH@9\BHSQh@O4d7_ GTۍbI\ͫF<qHW@ڪX{Ɋ( }' a5@F"B!.. oADT;ٛRu6^V׼|{J4gE.H^n@( V25a7<"6(FuɰD<b2F]9.+q\)2b8.RD+yD1$Pdy^9 1TaEE-.4vަﳚD e'>eYa ;VR+$'Ѱb*D/t鱓,0C@"j y[W vyIe+G!b$Hɉ ; iB]`/-utwֵ7a+FD2)Ă@DTiN l5I{)ݦk a "aAo2U,cZQ03I]xf=/ Va!"pYc#8%B 퉐f`pDS$I ~e|h#u5j<&Hu T8caXUP竮߾لV+?Cj~1@VZ9H$aY\Z?n_AD,*vZ[4XH,X.C_0-Uw##U@j"c\'sÞ$7S+q.^ʂH5 7ϠPqK/@`I"02AN q 䁋}X" Ɨ%jK2CWj$: j$+iD.71W6ww|{+˄@@3"9 %YH2}V >{ x]q |G98ݔU+QWc /[^\# =G6p$_ [r %']K# p9@ߍzdcsrqӂ#JVv`IuД80rEѡ+O240-|B>,v[m޵( Ջ}TTZQ@W#Ij]P0ߍ=Ql|8tDeiF"I8Ia47w//O@p`悈8 |iJe<N;⠖I3azz "ڎEȪIFf|”#N3޳d_J4>ݜW3Wh}ryo9dsw jE̸k2M He>4z\`D숳B@&z A;7A&Ȭ(~?3 IB&HE$SЭmJbI!BȒ;J 8 y}rZ{ s˱A3p\LofLgᜡ,EIX<-WHG{$2 "HR3c+P&cd^tVJ88S\0t.2BEiTn[Ighw@6`?H1CD1XoFNsggY\Zѡ3,=ZJ 8T A?//`u~o HR*@6Rסgғȡ Tv_8ddrkRA<7Ap-]AvUˆCm-.zC,qQGרh 'Sij̅Gј#pFNH`ÍPB i*O@& $" H5M =#u0 V v#&D^A"$|Mm Ȳ4/? Zbk5+GP1l6Ni9Dp΃'G"JHy FEy% %1.JDY”'AB nFXަDlwl HݻV"4kE]1bl}@d8jsygAn-+FF"y vvZ +_0X8<BDX)aW[{D ˰x^;Q1U^ * ղ4$ bER4r!Ȇ=pbyֵ-Ƃe ^'<-z$"U=^aF,0I1 {3%l8a~|jI2Hu H+ ױ0q,.f:~G`r _86?߁S5r|^??-H *{:Hb?kVC A,ȭM+HX#{e=9ȁ8T3L jWa\ΧS*Qqڋ+*UN0[D+UG~I"ECs6GQt+N=\c85عͮt`!n9q+6K]&scRSQ GX.̌ @k;"l`͛M0by1B9}ZɁI`e > &O`%ק ݧd@K8\dFټ0!Hq XgA"q: N$ni%'V.l#J [:5N]lg$ KhC|@q=ƥrIF)20GZHò2kH3=Pv"n.n rWkwao\V7 0iI. #ّMx}VBHbAo"Rs7x;R>iiLn4%BqDAG2l,)b}13+ X2 9h9`u@DpI,L$.%Z?\\%JdG%?1#m 7c:gb),[{E(.D+*γa}*g |j䒟-Z|33Qe"6i`y:dIRU2&e7'=p6܇%i;р755&>U;2.KR ǮĬWr\Vс]QH,nx/H^$ޢn6,Lf6`ڛC݋5ݜ 2jvY1iZ$,fw&P%L1cIdm%Á$yX;x{>NՈ+xՙ/HRJdZstu-d% k;5ܜ82iІf=^XLn &yZTz!ncDACr@EGthWNGCuM;4D|p*cFV(inngͨp9 ոyY6dY(:;D ~ph˦t0mC'#>5)i-LYjy&QGUKe!2ʆApc!tV$(Tv@ָ9pqtlFvFAdB,pU/Asg`22Hd6"wr&IA^]G?BXVGiiӰc|X{X!逍t$(87SaL +cNjX0O]G;m%9*-䆃 pew17U-DvyzgUB@X 9"y&2@H$h4IM`D"Vlb6)$,lL;Dfo3?s PP-PFq@QUnYT^ U/lw6g;v0YyXx9G(;Du;R>˼^\哶|Lh0iHf H qaXef6)Ӈ=7΋xku&K֥yWOLź\`YECgLPٯO49)+]rnGo8>#'lq{. yOetKiG)~ ;cJ:!oYP Ѝ6M/㞳0}X3Ta .0%'Λd{cfFv&9?>3!. _xdo0BsжIۡ$+]q*wyƱw ^qE{Px#ЊP_BD|FOJB t3fT5z% ̆2~OrD FNo`)U0 \_"ܧQh/b@iN|`5K]UvPahQѮ?="p]MQfd7GوG=ۣ:>g$ Ss<)"^{cNO"H=7rk^M7O6@:N_O==C<52$Ri2c\*6'٘Sp)2q}p0<:v3:jkoi6|qfN[p v[\GGws:<:˵jc~Ux'֬-yeh?w:I7iMz&m|3*ٻG;noNeN'ސѥZpqjN' r FuN@OCmA@+4Nާ ۻMqW`h0>׍!ўN~&M:P8hq Ab1/SG4kΌq^&>M `S36fqRNHpԚ 7#Qt|\8M]!ih'hҮ7QK!9DSζDO[H> oIicGJ@QDi:@"!&mÐP=i <ᦿ6k]xCt^gtJ r\}LrS2 fsg.@|!:Y۔S[fp~j k*V Mk2NEOs|Ć F[j]RIECZiSFS #hmzf =Ӟ~OtInlNmn0eLj4@'euۓoA -Uli4K䶌!q'}Oca>Q% ď~:ѱnǞ%VO﷈{g~ɀ7Y>z ׯtڎ0Dt2A߶1)i?I9$iKD9*Sׅ֧3#[+ s~*BK,*[r)vֹmLJ4jYyQ->dyyσyajj7.!k8 ~ R;>kϵZw R੩{:k܎. /ȿ O@|F`gIENDB`rockdodger-1.1.4/data/images/rock7.bmp0000644000175000017500000000057613706632107020054 0ustar krawczykkrawczykBM~v(CCCMMMfffDDDDDDD@D@DDDD@DDDDD@D3DDDD@@1DDDD@@3331DDD@3"30DDD@2"!@32@31#332133!0313!3332!#3313""33A33333@3331D333@DD0333@DD@331D@DDDD331D@DDDDD@DDD@rockdodger-1.1.4/data/images/yellifish.07.png0000777000175000017500000000000013706632107024160 2yellifish.05.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/rock4.bmp0000644000175000017500000000352613706632107020047 0ustar krawczykkrawczykBMV6(     !!"11388999;::<::<446))+$$%224::<;;=;;=;;=;;=;;=;;=;;=;;=223--/99;;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=))+ %%&11299;;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=446 ..0??A@@B@@B@@B@@BAABCCDFFGLLMPPPQQROOOHHI??@;;=;;=;;=;;=;;=;;=::<IIJPPQUUUUUUSSSSSTUUUVVVVVVVVVVVVVVVVVVTTTQQRBBD;;=;;=;;=;;=;;=::< NNNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVSSS??@;;=;;=;;=;;=446 VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVKKL;;=;;=;;=;;=))+ VVVVVVVVVVVVVVVXXX__aiiliimbbdXXYVVVVVVVVVVVVVVVVVVTTT==?;;=;;=224 aac__`ZZZWWWWWWddfuuzyyyyyytty__`WWWVVVVVVVVVVVVVVVDDE::<,,.yyxx~qqvcceggjxx~yyyyyyyyyyww}__`VVVVVVVVVVVVVVVJJK667%%&yyyyyyyyyyyyyyyyyyyyyyxx~jjnZZ[VVVVVVVVVNNN99; yyyyyyyyyyyyyyyyyyyyyyyyyyqqvYYZVVVVVVNNO::< yyyyyyyyyyyyyyyyyyyyyyyyyyyyddgVVVVVVLLM557 yyyyyyyyyyyyyyyyyyyyyyyyyyyyjjnVVVUUUGGH))*yyyyyyyyyyyyyyyyyyyyyyyyyyyyggjVVVOOP??@yyyyyyyyyyyyyyyyyyyyyyyyyyvv|]]_RRREEG$$&yyyyyyyyyyyyyyyyyyyyyyyyww}ggjVVVEEG&&'yyyyyyyyyyyyyyyyyyyyyyssxddgXXYQQQyyyyyyyyyyyyyyyyyyyyaacVVV!!"yyyyyyyyyyyyyyyyyy001778yyyyyyyyyy##$ rockdodger-1.1.4/data/images/laserpowerup.19.png0000644000175000017500000000067313706632107022013 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 5bcIDAT= ESU [tϴU iB ñѳ v=͂.8>(>1 [+]ȥ'N]//?16 40_*Xh6d -%q"j]iroVX+&%ͫP=P1TY FCN#Y ` ` ` ` ` TF!e/ ` ` ` ` ` ` ` ` ` ODwو/wEڅxxEڅg ]"""ñEڅ _000{{{x W''' i>>> i i>> ixߤT' ccc i i iq㢱 i i>bN '''2VB(URAas~r~w<<< rockdodger-1.1.4/data/images/laserpowerup.14.png0000644000175000017500000000067413706632107022007 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T}bKGDH pHYs  @AtIME 1(IDATU0QԐ^3Skq0 .kͻx )_r=o50scqN K,w욭T^WܰNrĀ?Jw `S}CE0&`4BT FHz%FHKo|# h2mDO^'s dqIENDB`rockdodger-1.1.4/data/images/lifepowerup.03.ilbm0000644000175000017500000000063213706632107021747 0ustar krawczykkrawczykFORMILBMBMHD CMAP` %%CCI.^O_‹)-GГQco7Jςc胃ts=@E?{05/JG*-- \D BODY=|~~^>A  @A>r @z|>!`@  ~^>?b}$ Trockdodger-1.1.4/data/images/yellifish.explosion_map.png0000644000175000017500000000037013706632107023671 0ustar krawczykkrawczykPNG  IHDR = PLTEglg pHYs  tIME %`IDAT}1 0 E =@yK!*N^vZ$|!~7"T0bI@w}`3874vp+$4fCM>zEPPVQd/6Y3VPIENDB`rockdodger-1.1.4/data/images/icerock.01.png0000644000175000017500000000060713706632107020666 0ustar krawczykkrawczykPNG  IHDR(6 sRGB0PLTE!+B o 1(&9G<RF\fWa{xg|v(Qp pHYs  tIME IDATc`@0;ExQ̒{̒{F*kۻw,w@v,wo.7i}Rk޹7Y//5DaIZ b1Ȝd9sj)k 5k՚ԪU@3:kT`(k L,+jLWG+b\r i+9BX3`i.`*xU $ԘR!!dll ^!%AXEel7CIENDB`rockdodger-1.1.4/data/images/laserpowerup.03.png0000644000175000017500000000067213706632107022003 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TG%bKGDH pHYs  @AtIME , tPIDATU@EP7qZƶ'jy ${yc3 )zsRs|āGAKBI}~`W$̾U ^ С SgsJ+F*CFOQ{k dưaPl P?1"Z 2NB55GQ}O%SN) E& 2dO3MHOb7!X?83 JF>avRyhYf̰pa'IENDB`rockdodger-1.1.4/data/images/over.png0000644000175000017500000000617713706632107020013 0ustar krawczykkrawczykPNG  IHDR"N tgAMA abKGDC pHYs  ~tIME   ?1P IDATx]핣:~[FlL֑Ld Ӈ@B?$[2Y?g,˖%˲0TT|T1PG uT1PG uT1PG uT1lZ#LcJEπ)=mWA"ixp`?%h1#ixzՏjW{8yPEun7N4=pQHNH7$Uk5e63]^+p#_oi4@„Z 8i yMRJ0{ nL@V39׭}й+]clmRGtY?ILyQ@1&XqLqY =ЪÊ#bez]Ύ̙N#[)?K%PjL}dӘXT ICUiZx 6aTSQTR\Gb#UNz_"KW}Oϥ1o*͢L74bnk^†燋$!l ίbJQv⏯ʗ cv jRFeŒߞf| Jw9ܞ=mjVYZzx2iw)=,֣5tt^̸9%$f<3P8}x.KBUeMGڪWk "82G73b/sv|ٞ33mA&|V<n;^v}Qp2!+~c*.d͚W '[Qa"훗&{geGS6$ ̦6(cLL%bFg,^ݭ;Tzd$Hp"O4s߰N_~Ɋ +hc mA$.>ņ}\z1'S/zqmW"kE_B[/t?K/8DZ4wf$3IbB~~¾2ևdž|ү033$*Ig,t;~IwC+\:8xƾ~#}&y,1n`O| ֐φ*c~-4z]fLWesyRZhܸs0t5 9~1hCӈKLD'BI+('ie$.Ĺ*K!o-}7HęIS6f+lR({iCm1V=t5̖1rYs"ݘ*ĺ!TJ[⹵H>!|:R\9ȵ`:7*64(r7l R䋚?-z`=2F!μ/lo1H>D \b]J16g 떓ʁ@thy+wcaWBvHE4ۤ.-,fiQJ Ȃd4<\Iw8o<%8eJش'U6!h/D l߆ItBt,IF{qCtq[>c!Ɍ&~(]-̂YoO;=HG]ƴIg-  !fHݘ&HV n˲uRkp>Bֱ¬O4sD)!na%/}'Ri<(oaC'`'|Tfg S<|֐ԒQTd'pJ@[a'꒽)4k j/W-gf%LbUjӳP5v_U36j`"fXP>\f)%YVAJB1nbMmJ2Sr,O!'X^7,Кl8.!Le-v1ZY4-|sǓՂ!gdwI[' :l`΢&$`mU,n/a8G:}!43sb-`w@?b}#|S%ӄsBsˈ}9}8 ƲWŘLHߏX#Yo2@Pܔ3O數2}vb]b0o jF5)JϡlR~as+xBe?zEFѽ66[D yeY%M ]'f]XXs>ZYOE&STكyxOcd?+ Cٟ@IG%P wѫKE*"|R`A6Jyh)O&iQTYo{v>ܞ$ .hd1n}#b1|b8?XgLguN}q&eݺ^Zs:AN\çn>᰺ '[ 'kE.j<"*ko}b璲uAH =<CL&DT1K7J]@K7AU@DtHKUnqO7[ZW\mWdZJ~^Vkdqcwb\_jnk{nvn|wvz4TP]],NVzzz=!B)bxAȽN+ FO@8Ɵ}\¡ ɖ|_mW@m0C80^M9Fy T9?0z"|w h?@SZ0n[ˁ|J>%7KE-(aZ!'*T@f֬EƛIq6 RoFVѧZ+ 9Qo@]^ʕZ3Ii׍Mk)С ;-%X^Ot>Fh7h4y2p_66>U_Sf#` 2ƍ8IJI|`Z>_@EZhh:8c(!nƀIjuY"Olb@ paxkż<K%:܋#Wf3.Bz'''nu}@ ?HyC]7zI\D%fEDz@w~@)x~ KiZ6 ? sN24wPJ3]\@fݕ'It l`nVB_&}}|@¼N\{zܟR?/t 6 |% m:@+1)B>p=\ bq2#uG?@A |qZA>gI(QY ?0[bvz%V7/ԈdPVBOȔvg(pDpIFrX%H$8*u[2ֺ(?y0/q߻<>><Y#b+TJEױH7.L F2! 9y \^QZR0 $<=7>p !"<Oz ]ZW( ˨rh1x4MV{8 q%xv'*@qV_4@L$ߴ?tfshx#  PAX/rs?[`5/P7| ) 8h%:)ػ(U Nk0D^lGϸEpqu]/7@#2Q̚)i(|{ lY>g`ϓV_\<-zy<1ZIBCka"YCVπY]﮾.@0ʒft6>PmnPE!Dtp*vX^^&p"  Р[P|(b m{ROꧧ !Yί*OH<{D"D%~WA0lpbIhs|qݘ|^@{aRTC#lҎ!Ǹ @dxHw>iZz% nSlC IK 6DHTVi , 54"DZ=Pn5uRQ+.LZ>=N28ѧD8bianTVEE :N8I] r)G?} l`hJ2'aZ3n$MF| m??|LJ>{n&@C,-xɰ Px b )z9'ҤtQN'D,(=A*([@t@hDcϜtiA*qZK3^\ +iM3(p_r $e뀞 8$ @prG/x>' fҍ['db =hDQhRT!HŻa]6a֙!ST&g݄j }H=i%x8wJ$X14OFH$#s+`bm7 8|3U3 ϗ잴Z!rnzA'(F8A ƣ%9/-(*ҫ0`)Zwι톥.r A*x9e' ӺnH$lXS>Gcy~d+js@V)׸M$)94!BHy ^=YXvOE/6Jk@LxoM7Fh$\Z%`٣:8DMPqV.HǨ=QG].H~Jl&,42[~܏3)^Ycr](-P ?^Z啬J& l}Yƌf*#hK/h_Rd#ddLkAt3;\˶"mNFPdOAFt5k+PohPkP֖/q=qЖ @/(fyz{OENHa'PXI7cAWebie%"_S D߲b~K]+%0y(5 jҮ';h6T/X ?汪0IENDB`rockdodger-1.1.4/data/images/dodgers.png0000644000175000017500000000427013706632107020457 0ustar krawczykkrawczykPNG  IHDRaMPLTEUq8Ҁ6bKGDH pHYs  d_tIMEaM IDATxZSSI/x, 61`E7ܲhjko"z˂^5Vstgw U>(LO==(\2e._U]keҬiQv+! 4g١[h&O Drʠ;涖3o3-zvGjU66iG0ҖIq e!C= Zv` !ƏM,/-F:qňo?0^Ƨ8T}N{P,jCn{7=ۤh'Vh@3Vi,tr9ba9l?Ɩ,}O˸lqf)n:.kҮ3`Ϗ([7BV?!{838ȲԄ9S$=Pm:w KtSi r,i#w8?(S}7]ouAŸE%g/[iZ[L@NNqW1D𪜤VN,HbVJBKך=אG&f:sPwiGi;V8-ٖ; k6XA0(p|bx@mz|^oIƠȋ>#7˴wa0{3>.w E8+H,HLnxKs#Ŕ%w}A֖< 3:-8 ̋H3h/#F+QǬl34̪Tɺ#xAU#r~wʷ  hfYѝ'?KjeD.*x(m- &R;C!wjb@Q U xAxLFMIwW5bKb՚;aH0}ކNIs@9mN4+k 3aӈV]BX8| N B_k@~ع'ˣR$ 5ć!d5 -8Dl+KrefE%SpXyTXrv->.\}B[준El{f7r8fׁ20 |4 f Y"vzHգ⶚Sڸ1톓EE%i̠x3 f ݠ\ѥ3MIoϬq$פI*a 3ʍUҙ`h@gyLaU$UQABG AvD}jؖ?Y܃Qy"ycDL^InaP2W[o*xY+{/ aR\cwK>%3-2.""O&tc h;z쒆rӾi0\$^ @~X *]hUU;1\f?w(ɼ_$*S`:[LH'_*a* .ѡ8qxZ4'x[ ]Ƅ2Q|c8%Mdl 2) ,bP8>S jgL'ĨVgU@ǚEX#DVYmy&0޺S٩1'[ޓ0O+ܲw9k#lF.ð% %C)lIr=gx}~N3bP;;=;;=;;=;;=;;=779 VVVVVVVVVTTTPPPPPPOOPKKLCCE==?;;=99; !VVVVVVVVVVVVVVVVVVVVVVVVUUUSSSJJK??@;;=889""#\\]\\]YYZWWWVVVVVVVVVVVVVVVVVVVVVUUUIIJ==?;;=002jjnvv|ww|mmq]]^VVVVVVVVVVVVVVVVVVVVVVVVSSSCCE;;=::<ffixx~yyyyyyqqvXXXVVVVVVVVVVVVVVVVVVVVVVVVLLL<<>;;=--. lloyyyyyyyyyyooshhkddf[[\WWWVVVVVVVVVVVVRRR>>@;;=668iimyyyyyyyyyyyyyyww}kknYYZVVVVVVVVVVVVUUU@@A;;=::<jjnyyyyyyyyyyyyyyyyww}\\]VVVVVVVVVVVVVVV@@B;;=88:ttyyyyyyyyyyyyyyyyyyy]]_VVVVVVVVVVVVTTT@@A;;=112xx~yyyyyyyyyyyyyyyyyyllpZZZVVVVVVVVVOOO>>@;;=%%& bbfyyyyyyyyyyyyyyyyyyyymmqXXXVVVVVVEEF<<>++-xx~yyyyyyyyyyyyyyyyyyxx~[[\VVVJJJ778 ssxyyyyyyyyyyyyyyyyyy\\]000  >>?yyyyyy""# rockdodger-1.1.4/data/images/ship.0a.png0000777000175000017500000000000013706632107022155 2ship.02.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/lifepowerup.00.ilbm0000644000175000017500000000063213706632107021744 0ustar krawczykkrawczykFORMILBMBMHD CMAP` %%CCI.^O_‹)-GГQco7Jςc胃tBDs=?{610JG*-- \D BODY=|~~^>A  @A~d? Ac ^>!`@  ~^>?b}$ Trockdodger-1.1.4/data/images/laserpowerup.11.png0000644000175000017500000000067013706632107022000 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 0ǼIDATU ES-qk]g!gɅF}֛=Xo }J$nq }k-+p.7Mܬ0ZDs1lB%-CAV ˧a%=6?Li\] &3NnLp_1GIENDB`rockdodger-1.1.4/data/images/laserpowerup.1F.png0000644000175000017500000000067113706632107022026 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 616IDATU0 E] de'ղu!en0}Wf?.$#=nCZ!7.<ur~b}ie1Qɀյ`𥂙n[PB T" M ~BX{l5~ӴlI gTLp_-YIENDB`rockdodger-1.1.4/data/images/lifepowerup.06.png0000644000175000017500000000075513706632107021621 0ustar krawczykkrawczykPNG  IHDR(-SgAMA a cHRMz&u0`:pQ<cPLTE ##00CCI#)A]UU;Гo7Jςc胃tDf>E{5/ k5SFG*--D12[ _ΜbKGD k=tIME6IDATM l^yrA~pMU194Hd^EGޮu0Ηܘ7FBpq1鿨 <_SVT j$V)ZϦ/?Or)%iy"()\d%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/blubat.01.xpm0000644000175000017500000000317513706632107020543 0ustar krawczykkrawczyk/* XPM */ static char * blubat_01_xpm[] = { "32 20 59 1", " c None", ". c #000019", "+ c #00005E", "@ c #0000A7", "# c #00004F", "$ c #00009E", "% c #0000EA", "& c #0000FF", "* c #0000E8", "= c #0000C5", "- c #0000E9", "; c #000038", "> c #0000E5", ", c #0000BC", "' c #00008E", ") c #0000AB", "! c #0000D9", "~ c #00008D", "{ c #00001C", "] c #00006C", "^ c #0000FD", "/ c #0000B7", "( c #0000B9", "_ c #00009D", ": c #0000E3", "< c #00001E", "[ c #0000D5", "} c #000099", "| c #0000FE", "1 c #0000C4", "2 c #0000EB", "3 c #000002", "4 c #00008F", "5 c #00004C", "6 c #000031", "7 c #0000F0", "8 c #0000CD", "9 c #000030", "0 c #000050", "a c #000058", "b c #00009A", "c c #00000D", "d c #000091", "e c #0000D6", "f c #000084", "g c #00001A", "h c #0000B5", "i c #0000F2", "j c #00002D", "k c #0000BB", "l c #000021", "m c #00006D", "n c #00005A", "o c #000018", "p c #0000FA", "q c #00007A", "r c #000036", "s c #FF0064", "t c #000016", " ", " ", " ", " .+@ @+ ", " #$%&*=-; ;-=*&%$# ", " >&,')$!~{ {~!$)',&> ", " ]&^/(&&>_&: :&_>&&(/^&] ", " <%&[}&|^12|&' 3 '&|21^|&}[&% ", " &|4562&4*&17890%71&*4&2654|& ", " a&&bc de&f gh|i8j f&ed cb&&a ", " @k lmno ^||||p nml k@ ", " qr |s||s| rq ", " , |||||^ , ", " ||tt|^ ", " ^^^^ ", " ", " ", " ", " ", " "}; rockdodger-1.1.4/data/images/lifepowerup.00.png0000644000175000017500000000075213706632107021610 0ustar krawczykkrawczykPNG  IHDR(-SgAMA a cHRMz&u0`:pQ<cPLTE %%CCI.^O_‹)-GГQco7Jςc胃tBDs=?{610JG*-- \D bKGD k=tIME6IDATU EW8̒Q3, 4 ;l&E4m[ E6O pMM"|JGJ IDATHǝ[I̪t}  H_G%^`%͞ %K*ĉGOЉ%0v[V$`| | ;[Gp ;#ρ:SG]M`~)U"'~t?.<] R͕ z h2s 䅓 @InN@A"DJh'I+ޞNd^NLOB|~ X1:X6:U+RթOufIf̍orO.Nd'p=69g-cfz:TWxҩ`t{śEe߽ )p\wSh6%@t;zfV쵱AX?_`:`׀_gy:g}| <vETM:"˗F)jhFMٲS$U}7i߲gՋ4g`A^R1`s͞9{4Ta[݁Q bB{}\ys l!Ff6hi։~Hc^6oNJ<vVꍢ`^m;UDbu;_߰[Y$wsNL/:uzv*UquE>jUI` $GRbI "VEGx-0u@j<UeXkNks}r )D+}4<.N rT KU-SoyY.^TD#,E۰1uJ=Y,V1fhj&jz˨4 B]`٬2H+M:$@+/[ِRX ,-ŤRPۃZ >qYT͆pi Q*D@xO ֵl K 76O% ] lR݂ BJ@#`,4 8>AhmfM&gﲟv;X,b Zf!#ߚQY260dt inʯ-u݆ktuK1o QZ74 ɌYy5N<,9UtOxo-8׏n/tIENDB`rockdodger-1.1.4/data/images/laserpowerup.png0000644000175000017500000000130313706632107021552 0ustar krawczykkrawczykPNG  IHDRabKGDAT pHYs  @AtIME CPIDATxuKUQܫ]7M RH 4@4Aa4,AH@ H^=sjp|`~,>S VysYeڒ\苖L6B6CyG4`[d,M4@=HZVx BW>;˝/-͉uHv'=Iks&Z2w[c>(3VH PҤ^ʃ1JQG ?eY7KI&.M|2I?Զqi "" `wL aDj3;_3aT?cIQ&bu&"R?@ˆ8~GYbEig@tۅ=x0nAZB!giiS.]u g N˂KktaQD)CT@\Bf&>.֠ sIyk/cz?;^ĨW7*rBO:BZ\kF̄=<:&eo;얠Ԫ QG In)3U=UDZ#A/ <8*U\rV.Fe#5IENDB`rockdodger-1.1.4/data/images/laserpowerup.18.png0000644000175000017500000000067613706632107022015 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T bKGDH pHYs  @AtIME 40AdIDAT= DSxk*S+V=N.&1j`,V|^Ozwy#=3=OC+De ġ=eiC1Qـ͵1x`ŀ*B^*Te%IE`ҺhoVXV8M/K; Ȓ{}OgIENDB`rockdodger-1.1.4/data/images/ship.08.png0000777000175000017500000000000013706632107022106 2ship.04.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/ship.07.png0000777000175000017500000000000013706632107022106 2ship.05.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/rock6.bmp0000644000175000017500000000367213706632107020053 0ustar krawczykkrawczykBM6("   ! !!!"""###$$$%%%&&&'''((()))***++++,+,-,-.-././0/0001112223334445556667778889999:9:;:;<;<=<=>=>?>?@?@@@AAABBBCCCDDDEEEFFFFGFGHGHIHIJIJKJKLKLMLMNMNONOPOPPPQQQRRRSSSTTTTUTUVUVWVWXWXYXYZYZ[Z[\[\]\]^]^_^___```aaabbbbcbcdcdedefefgfghghihijijkjklklmlmnmnonoooppppqpqrqrsrststutuvuvwvwxwxyxyzyz{z{|{|}|}~}~~YuA Y,q8EQ]iu4QmˊעMey$<4]QymǾM$e0AMYeqy4QmMIc_zu/G_v ,8 IU a$(q,8}8EMY]mu <<MQYe eymy(}8Mau||zbWHHHHHHHHHHHHHHH\\\\HHHHHHHHHHHHHH\\\\\\HHHHHHHHHHHHHH\\\\\\\\HHHHHHHHHHHHHiiiii\\\\\\\HHHHHHHHHHHHHiiiiiii\\\\\\\\\\\\\HHHHHHHiiiiii\\\\\\\\\\\\\\HHHHHHiiii\\\\\\\\\\\\\\\\\HHHiiiiiiiii\\\\\\\\\\\\\HHHiiiiiiiiiii\iiii\\\\\\HHHiiiiiiiiiiiiiiii\\\\\HHiiiiiiiiiii\\\HHHHiiiii\\\\HHHii\\\\HHHiiii\\HHHHiiiii\\\HHHHiiii\\\\\HHHiiiii\\\\\Hiiiii\\\\iii\\\ii\rockdodger-1.1.4/data/images/lifepowerup.05.png0000644000175000017500000000075513706632107021620 0ustar krawczykkrawczykPNG  IHDR(-SgAMA a cHRMz&u0`:pQ<cPLTE ##00CCI.^O_Ĺ#)AQco7Jςc胃ts=@E7{5/JG*#! \D12[bKGD k=tIME6IDATM D⥊ ZagxIHvDm0 kD:mwṯY.R8=eXಇ'p nP H^<6._uYJ"9%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/laserpowerup.15.png0000644000175000017500000000067313706632107022007 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TXbKGDH pHYs  @AtIME 3&JXIDATM ESU [tԪy` In Qƨ}U~&A'Yhn*H }P.їV[V] X_ /4P!` *)IZ86M. aﱉaNSt'ؒ>S:y1kۿ_:kIENDB`rockdodger-1.1.4/data/images/blubat.02.xpm0000644000175000017500000000236713706632107020546 0ustar krawczykkrawczyk/* XPM */ static char * blubat_02_xpm[] = { "32 20 33 1", " c None", ". c #000035", "+ c #00002A", "@ c #000057", "# c #0000B3", "$ c #000088", "% c #000040", "& c #000009", "* c #00006F", "= c #0000D6", "- c #0000BE", "; c #0000FF", "> c #000078", ", c #000053", "' c #000046", ") c #0000C4", "! c #000082", "~ c #000038", "{ c #0000BA", "] c #0000F9", "^ c #0000FC", "/ c #0000BC", "( c #000036", "_ c #00003C", ": c #0000B8", "< c #0000F3", "[ c #00003A", "} c #000064", "| c #0000FD", "1 c #0000FE", "2 c #0000FA", "3 c #FF0064", "4 c #000016", " ", " ", " .+ +. ", " @#$%& &%$#@ ", " *=-;;>, ,>;;-=* ", " ');-;-;;;!~ ~!;;;-;-;)' ", " {];-;;-^^;; ;;^^-;;-;]{ ", " ;;;-;;-]/(_:;<- [/]-;;-;;; ", " ;; ;;-} |11112 }-;; ;; ", " ;; 131131 ;; ", " ;; 11111| ;; ", " ;;; 11441| ;;; ", " |||| ", " ", " ", " ", " ", " ", " ", " "}; rockdodger-1.1.4/data/images/ship.05.png0000644000175000017500000000261113706632107020213 0ustar krawczykkrawczykPNG  IHDR, sRGB pHYs 4)$tIME!|IDATHǭKEƿUL.0.ZyET( H䠑ċq211&MoEV"|0 FIDATHǝY\Wܡܞڣ qc`<xA PhbvlwcUW՝J:*T笽^{ç&b:O|Eivxk{ďp0!4xaq?6Ct"ԘdV c\;wnҎ$;$g8I\ vyvN4q{>!=7h/Z}]S e{_'Z;1A!~A>U вcʖrLIt^b*oqoS`Ip+>iJ򌲙 L=0YO*>Ax]jxC@zpw%yd.?ɞj_h\wq"[^S]u2%_įcRoI@pL8c oǪXzizڮzOk4"JѾ< sN_idO^uwZi7hlK;͌,_ 9hZ[ N^U 77\}.X'~C?v ]K{:>Ž #'{S`}"5~鈃^!9y0'z*KBE%?`Y2A< MBX GGMok2t= jؐ=P>Y{T"-s~x̆#emU`QTEATkY렚Q5Tg)"C<*z˖ X0혯r\P=LKږnNVIi\G=XҝtT,!v$wa"k4Fgi;M39 e(o`Xy}VN%H 'xNңG4=~G(N|]ÿXPBEIENDB`rockdodger-1.1.4/data/images/yellifish.06.png0000644000175000017500000000331213706632107021240 0ustar krawczykkrawczykPNG  IHDR S4bKGD pHYs  tIME  - O0tEXtCommentYellifish>:IDATHǝˎ]WZkmc6r@ Dx^^$CBXbw}9ZU ζd JGZ~/ى%0` ( 8 r/'`k_ρ?wߓ ?8Vm1=G@ I | GG;@Q- v `:X{ eANgd'}`S>C; g$E+"ĺ50Mv li܁e8ަ#j<~IÍmm{ԍyyj!K:?6 \8>|Cಲ;}rus<]{w#MHyZDBL?EнMrU] S@X[ej+ ڊRQ8_+#%VMo_w"UU~Ǔ^*8ɼ , W2Uׯ>2#Ad'r]'&w#G׺W2jmt((Nڮځ΃ZKvywcG|%;qNoMc>< 52@TnaƦRb`6YJi/4:Vs!=hu6|߂jyl&ںLx:uF5]20 {XY.lK[A/Q)]%iʽӱ]2g;oә)=JG騷@ܛf I٥Nܖ+vI0X RdeP.[_'1)/fy~Z1 $ure`2p+yX,gƶM\`bf^0ԭNmB_磃Ng|PJ `O1JbRDs[ZXLu`5iEʊn-,`6`U^h!Nm 6z;l4N{ݑbXzM\h_ώ7rTsIENDB`rockdodger-1.1.4/data/images/rock3.bmp0000644000175000017500000000542613706632107020047 0ustar krawczykkrawczykBM 6(      ,,.557::<::<446))+002::<;;=;;=;;=;;=;;=;;=223'')779;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=**+ ''(88:;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=557))+778;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=::<""#88:;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;= !<<>FFGLLMPPQRRRQQQLLLCCE>>???@BBDDDEDDECCD??A<<>;;=;;=;;=;;=;;=;;=;;=;;=;;= %%'DDEOOPUUUVVVVVVVVVVVVUUUTTTQQRSSSVVVVVVVVVVVVRRSGGH==?;;=;;=;;=;;=;;=;;=;;=;;=666IIJSSSVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVMMM<<>;;=;;=;;=;;=;;=;;=779 223TTTVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIIJ;;=;;=;;=;;=;;=;;=--/VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUU??A;;=;;=;;=;;=;;===?VVVVVVVVVVVVVVVWWWbbduuzxx~uuzggjYYZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVIIJ;;=;;=;;=;;=99; ZZZhhkqqummq^^`WWW[[\uuzyyyyyyyyrrw]]^WWWVVVVVVVVVVVVVVVVVVVVVVVVPPQ;;=;;=;;=;;=668 kkoxx~yyyyssx\\]]]^yyyyyyyyyyyyvv{__`XXYddgrrwuu{rrwhhk[[\WWWSSS;;=;;=;;=;;=../ ww}yyyyyyyyhhkhhkxx~yyyyyyyyyyyyww|ggiuuzyyyyyyxx~llpYYZRRS;;=;;=;;=::<yyyyyyyyyyuu{xx}yyyyyyyyyyyyyyyyvv|yyyyyyyyyyww}\\]NNO;;=;;=;;=779yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxx~\\]EEF;;=;;=::<""#yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy~yyyyyyyyttyVVW==?;;=99;$$% yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyynnrww}xx~ttybbeFFG::::<yyyyyyyyyyyyyyyykknyyyyyyyyyyffijjmeehTTU==?;;=::< yyyyyyyyyyyyyyyyoosyyyyyyyyyyxx}yyyyqqu;;=;;=;;= yyyyyyyyyyyyyyyyqquootxx~yyxx~yy~yyyyyyyy;;=;;=::<%%&yyyyyyyyyyyyxx~kkn__`ppuww|xx}yyyyyyyyyy;;=;;=//1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy;;=;;=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\\`;;=(()yyyyyyyyyyyyyyddhyyyyyyyyyy333##$ 778yyyy ! rockdodger-1.1.4/data/images/ship.06.png0000644000175000017500000000261213706632107020215 0ustar krawczykkrawczykPNG  IHDR, sRGB pHYs 4)$tIME50IDATHǭKEƿUuL:.ZE@@ȍDM'cbDQ#l`If*J&H/)UJ@ ޝH_C/%Cov=sֆ[y+M ]Zv GFh-9U袸ټ֙ WYnvᛑd&5wP0+$]XM%ɺ> L$ cJNDk2Y1BͼV[ЏV |Fa"i2JQDVC@a;[LNA6lY25Y5UY [/[FFÿ]V=wt!Z/8I㉞.mmw(r6w0a͕+;DkPA[BDw3n4'YS qvO+8ȬUZbbJ&e^5DDpҀ0]αs}9&Jh6"A<EZ%m.kV[Z5r&b۠#wn8^MG$X'VmzTs h" n{G9=u봳􁠺y:{.˙y)%"HQdor?yƍjn`DZ$cR)g@,y9}?=Z`߾C:NEEo)]-b<62r%U0x`zz\~EXə-sBDZW,Kg̃DH_,npEiGk2-(uVylo3P.ܼy6M5QhL Xe7d^X• z^}+̲ IENDB`rockdodger-1.1.4/data/images/laserpowerup.12.png0000644000175000017500000000067213706632107022003 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+  YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T5p}bKGDH pHYs  @AtIME 0'u$IDATU0 E] d vBX-$CBFñѳ 6=MNY( OLCJ܌CP>їV[V} X_ /4PB TRr"j]`nuX caN2O%7qb ,imOIENDB`rockdodger-1.1.4/data/images/mood_item.01.png0000644000175000017500000001727313706632107021232 0ustar krawczykkrawczykPNG  IHDRH#sRGBPLTE 1=* XfI #," >@229k.`8_)XFCQQN9Y=aU=pYTOjeOaiKpGv^SrXypk}mm‰vĆklǧaȰ~ pHYs  tIME  IDATx wز3l m޻qH'wdH筚N:d>9W/_֟_xy^Zߓqyw}zv dU].^@Krly =X 4[˸JydjjxJzN߁5 UI J͚͖e|^$Ғlu쏱r~ c-j|VwX3lW*~y:t%0W&nWB7;Vz \h6M߿&۸[&,-zofdhT lj[T`)Yg] m0C1Ox0%|v xT)+d"}Q-c? +R: &r<1s@NA8Ʒ4Qo(IgngX=9Q/Jl`- #: `8m~+,8iMcnpuj?_ 8Wz=2UgFvÇ`AVa-ަ!IȊ]>>Dac !@wR\\4I#0d=u *Y7Џ"nM|$$IabX F`J Xigoh;OC{~)b^µN mw)#)u@+ US~\fI`y|JY4@al֛5awM4cvxPbr +QAKQ4iQA? 9 N1S#.ovw=V"Z" !GX $*sS5 2Oj0(#i(9v7_l̠fYVgfLZ&u&+^ӊnX芸Djpx^DdmXH^r/@;'L/ZJM*u T<SSA+ATjI -x[HYe#iE[8E Osyzmd D]Bӛ%59OV!ʎ1+Z,w_bWg]IY٩b@C `4h BD+Ny)f 6qrLHt#P›X+ &"#t_@xP^ʼr9䁊@-J~EIUjuO߬{CKųTF`TAalPugT \4~Z1 8YJ笢d K/vsHP.-(`ɵ|'t^jh U"`*T˨Jkq|<>vOOnn9\ 0#{GX/X>\D+:=UN ڕZ`].WáSv Y7Vs>ûc} V V3UBl U+5S_H,h 0qMfC' kl[VWf27HXiڵ/e)ãCpɻCEX|$6f{9:V} ^e`ɖո*;@*BXR̀Hq+5CiHkJNg~fW?,PXNZpmcg% kqs0JYHp̹c7е}r*D{; oXsPWXt8xśЖ Lc$$w˔5!eſ|4-넿a0U ,9 R:^YjcY %,fZr- UKb?fGu뭦d) @-[q X=}ZHѻ3|se?-N!j*p+ւlt:hRR~+X䮘6֪Z ~0 Jb}wj&[N7d_mxZ2oEPۢ7"VS-HvV̬7'I2gr0?`(Uv^{ùV-@1@mAӧJb`EtP Tԋ={3S͕Ƌ?W:>1cP{\y׬^d SZ8j=btJC˫8 _LF\ ج-y0` hAwc]q T3Ӎ>DJX!S"`dkTe\̎Cah $Ω]]^JCFd-S:\쨬8K_ "+Y)sYB|Ū0kHZ& vz!F,WV|]%qH{O{YQYUҫ%a}\B.g^m=j{Xٳbߟnk)@K}]]tiw;8 QUlRVºzݖ{ַ.вeg+dcu3 :D1ʡj'07־dkZC6N YŐVW{;4[\kmMZY0<2X%gYbZkXaUZvra:'R|=lKrv X^' ({8VHclbco/2l0ӹX c}nM7^"kua@|=>xYCb2t= r8~mKUw:P;~kud&Ku݋ h< KM C/?\` ~g+2j{л@&Pig@qgMnq+iNQe=hs-Q^BՇn?ܶȰXwLذm1BPq5I;jlmuTo+cEGȺ=i2ym:eaȯww[CjaȻ-!*McS7:373XA|.>{tVzԒw{JvI`jaΚPVBFuKMkٮe}8񷬙̱橰Yև[ޒ2x_jDPв!ێbfl}Vܥ+@7ma!J%lX5CMY{+TpB=$w;UaRBhlÚcв60s7kpUloXm{ȘЇ_rn@EjЖsocd2w]~5Tr:{dU8smHq_߻JRsaֻO֌!..6z,$;%f%y5dqA+2l*N]˴^uYWȵh/ԦK`Tu0丛3)&P hgͽQؑ-cmA8X<"ҕUYBTXkѴ!lDP#=,B:mY -)+Zd+-r1tq_hDžD2e 1Vw["XM BmtikQ5] ,p!Ka]- \VjӶZ7eK) /P`j +Xlw:J,:b;l)؀FS#tڸ{O6cq֫VTĪ@pL{u':W̊ #d-d99\<~|Uؘ[[}FK\͹Ծ`͠ej KuΝcJYp` V6"-sH\\wiš-im*-s#F%Zh vʢU ,YYqu&kgzJزqWS=GV f0W*b61yW(Ybmzdr[μ ؀dxVrwX%.+s-th3C- &/[l1|v|ͭžk`+,XWe2ʞ~)ǺklTM(V'u$s-Sdmi,Qt>\M4^e XHCrYqăb~ᖽtSxqz@/)kb!a;}لM-(a{Kh^<:[Ѫ^lSWh#fZXEC]|Z'&6d6~8J!95H%HaMWY|W^OGkmD68}9w: jcG9]- _\ _ps^{O Z؝tM8xpip/N:Ruy8W¡g<;'Қb(BEbpv<ѹaM!츰?&RF@:b QܫzaK2Vb[P5F\hqCUW&`ȃ?-uěKM7A1ݳf},9suYZ-=\&+^&BEHl总#Dݮ>#TZܛeyw.3_+[<bk.ڂU4W,_!6$ V~ ,FSs΅7 m:U887VbvbRXC't@XRAL  s/m ȸ.Xw B5zCN7:У@_V/VZjJP&`fŊC4k=*>0*88u,G!1g=|u> WQ"ITk) |SfԌ1sb} L,Hz@S񩃸@3- .Jx5uK2*vQxЋXXx$7?`>CO+Zp +:K\6x`Sݏ^Y=a5p3to# 'r;|euEgKO;ɽHYxnOXN`# KshшI _٧Ǫ#Pdrώfigc߲~iɭpΨ=du{A:k,@- rEu:|Ch4<|L2v{5F|]:R(_yQ2~І:YPl~A)ܹ+U 0f&[졧:„u-S-XL_Y_"NqHbP1xX<'C(c9.8}į\}RgWɘa-Gz.H`zf8/ 'S(s[@{d-#2'IO!f3boѿ.xeVN>#=<(?r)|r~2uuql'F5yH3(~Ug<+<ܥ0TC>_ixWC:^&$/}/_ֿY~J3kar_}l_s^k\s|+&6#oAWsX|voZT=" IENDB`rockdodger-1.1.4/data/images/lifepowerup.03.png0000644000175000017500000000075213706632107021613 0ustar krawczykkrawczykPNG  IHDR(-SgAMA a cHRMz&u0`:pQ<cPLTE %%CCI.^O_‹)-GГQco7Jςc胃ts=@E?{05/JG*-- \D xbKGD k=tIME6IDATU E16\EZ  @|8Xk@D;]?DPEB2Y7LqOg8y1!s+3gqÚVjx}*EgD_KJ~=N9[{= \p%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/laserpowerup.1E.png0000644000175000017500000000067213706632107022026 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 6#BG]IDATU0 FwCvs@E,"&zQ ñѳݽDO3D4 w OL}/h']J/7 X]/,4PB2T4 AY3Q9fB-m˒e` 9qR15,IENDB`rockdodger-1.1.4/data/images/laserpowerup.1B.png0000644000175000017500000000067213706632107022023 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~Tj.bKGDH pHYs  @AtIME 5*:IDATM0 E T}$g܈-\2 1~ݽG 3dmDnܲ1 p=-!ShFOS;RС65xgXe _c# id`4Pq>\UBTXin~e,9b JjIENDB`rockdodger-1.1.4/data/images/laserpowerup.10.png0000644000175000017500000000067113706632107022000 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 0IDATU0 FwCvsYg1XAQ ñѳݭ;GOD4 wzCJ$n_ǡ=p 3;6WV[VxC˪vҪ}~T5p}bKGDH pHYs  @AtIME ,(нdIDATE0 EhZ\@E硓6/H0JÒ ӫ$vgDLVϹ85d ẔE IacZ С~%xWHQe 'YQ*4ֻ}%lqS Ӗo1b]>3M|_xIENDB`rockdodger-1.1.4/data/images/lifepowerup.04.png0000644000175000017500000000075313706632107021615 0ustar krawczykkrawczykPNG  IHDR(-SgAMA a cHRMz&u0`:pQ<cPLTE ##00CCI.^O_Ĺ)-GГQco7Jςc胃ts=@E7{5/JG*-- \D ]bKGD k=tIME6IDATM Egi`H-, L8o;  i+ (t]\olY7 í797 jo1 /Cww,"y VOJk%J3qRoq=m֭%tEXtdate:create2018-06-02T22:24:16+02:00 %tEXtdate:modify2018-06-02T22:24:16+02:00}zqIENDB`rockdodger-1.1.4/data/images/shieldpowerup.07.png0000777000175000017500000000000013706632107025757 2shieldpowerup.00.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/bb-dropping.03.xpm0000644000175000017500000000024513706632107021472 0ustar krawczykkrawczyk/* XPM */ static char * bb_dropping_03_xpm[] = { "4 4 5 1", " c None", ". c #000010", "+ c #1122EF", "@ c #334AFF", "# c #CC62FF", ".++.", "+@@+", "+#@+", ".++."}; rockdodger-1.1.4/data/images/mood_item.04.png0000644000175000017500000001431213706632107021224 0ustar krawczykkrawczykPNG  IHDRAsRGB`PLTE % J".,:)XA(d>.II%~C8:<|]EchCsdta}ffv~ǐꨠȢåھФ庱Mł pHYs  tIME ;0˟IDATx]vD66`cc vUw2ޅl=wELvlQ-ew]+ ~7=ω:OpAOx9oPr;LH!S'A__Q\_& , 45%gYHlE]00:?sp"Myǃ*H'z(:@>` }4l)l>mS H}k$#Kđ+j*08^L7#{J'8Kl[/g0E Hz)a_I. 8A>OkS؆:)/3qY|O6c$؄zE0X"u$eB-ZyM~<]x<@u^+4چ/hrL\3C] a cxrٌs}1E=M *T C-b=ΆW$Qv"#h WuVfH^*0b"@Nh}%@WGcPZғ тV_toڶP_:d lI#z]:臅as49Oۤ.͊ol5zs؇Ɇ|GR%LyG{!xN 6rXt]Ck|:X$k㟐u"<:LAP1^mXZH1@/j=ę٣ܣy uhJ?PSg}SvLV ;(ih"^nAm)f cJ6z[b\őijh43Obl9:JFC7ʳz<`e!*J!"ʝ]"Mbk>ƾ3Dၡ0n/i`J1PﴘG#j_VL>V&':o~BE0zŘ;@Yu< 6px0JmP`?HkGVk.ZNbQp-Nfk?b9x^RE$ڸn˷ f;JwolV ft ;l@ch~'3!m'ґUX x[|2EYWKZ;'LA8,ms1;tHBj銉ClJ#O$0ټsb=\ z}8yp{j j*u*jw&tފ@B@G#(ǍSuT gt;<'VTkBQ5#+V?01_PS2dۓힲ\bJSgoꡌn՘Rz܉Tؑv,it.n% IVЮڏD<%`F݊^cjA$NIUlٴrdb3R Jyq(ϊ'$]Hc[u991#;r{׷ˌgmS4PM} gul*MٳkgP=0M&tD>xgaM3{>4J΋qtC@fR@;}7W<Tc` (M5m]dsF}ZT8jެxR\}Sa-j,qm8oձb5ݕgG:WH:َhNl.s'` ::.zm+ѱ0QFY}U6ѯ@?vtRAPN*N~MKL]0X#Oޒ_s I#臒-ՏU٠^MJ gfiPEuj,5udA#S7D;y/)=3i1 jwAEkWCI*T/yy6LvSwrwN8-n/!ZgO,RdwNWusEԲhοPi?NKY|U \Ou?}P' `)ŭ GfR}R.(ܧDZ,5~?V[u=UFG(hF~6&S4`*/,&ۃ?Л·^4 j4ՏE<|.u?pEZ3<vUHtXN?8'PCF,P/kنCzk-^K7Jz-w$!dhOFdusvc<kџhj5k_}%b6Ϲ+t2vHl5@FE) >CVaMٟ[gn Tn)6Y@G䞑Ӡ'k1bqg7J@Y@gT /hqtd'=6/"\yԩrӫ6ßŇɌzKzgH$!17XeaKaZX.Ss]Dwr ^t~rՃրcu?(_3Ҋ|,]\|t-  ¯; wxI/u/ W%+ MIENDB`rockdodger-1.1.4/data/images/lifepowerup.01.ilbm0000777000175000017500000000000013706632107025365 2lifepowerup.00.ilbmustar krawczykkrawczykrockdodger-1.1.4/data/images/yellifish.09.png0000777000175000017500000000000013706632107024160 2yellifish.03.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/lithiumrock.02.ilbm0000644000175000017500000000222213706632107021734 0ustar krawczykkrawczykFORMILBMBMHD"# "#CMAP` M@4t`N]M>nZlYIG;0{fSjpnkW7-%UF9!ycv`r] |e2)!h,%fUE;1(@5+bQB(!BODYfFP@+@0yN6B&  @3(`@ `r 0AD FHF@3;x$,,/r 3Ch l_#~h!-ȮP%U?֯,b1/O]>/6`Ȁ3hȀ @Wx#kM̀S9!y$| Kf\@*@)ۀVz@, @7W=+@^oDhf ^0h n=@} U_P@*H@u'u_E6U>>][ ?\>^>F"6`unm >&W$@:@/?22  rockdodger-1.1.4/data/images/deadrock6.bmp0000644000175000017500000000367213706632107020671 0ustar krawczykkrawczykBM6("JKrockdodger-1.1.4/data/images/icerock.00.png0000644000175000017500000000071213706632107020662 0ustar krawczykkrawczykPNG  IHDR txҿsRGB0PLTE!+B o 1(&9G<RF\fWa{xg|v(QpbKGDH pHYs  tIME +IDAT(υJA>YX_ `* ւ\a/r%B8[lA8/ZɾVbs;Eہ|z):+IJ+͇磦at":섧|F 7B>qEPZ 诼ȉf~.vg?V&.$&7&0qiK$EIP!H00 20 0==cwW[u(Eս[n-`Ӧׯ\1Z/!D4pxS&j|O|cxŵڹjß(fdJ2QA௅I!|JUr4o/zš #iz1gjtH$w"nwvn֭%k̉'lc-{t]"ę 4NΥJ~cǞ$yp{Y>zj \VGO㫣afR11흠V,-)ɘgοhCpͤۈRMk.#wWtTV7ё̾uY].?xfgnvI[~>wLXi_ڶ}kFh] Sraԙl^%$Qӱ;x=㽼{e Gߍkvuhe^ڙHM$ɪB#cRi1ef'"dYY1bMX]}ߏvt*OQtrrRyȔJXə-sBDZz?C8YFJJ5ε7"-∴s-ȹ9/]m4jO& +ZOsKJeR˃O?ſHIENDB`rockdodger-1.1.4/data/images/laserpowerup.1C.png0000644000175000017500000000067413706632107022026 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME 5;IDATU08zԹEgl% 0LRƨwp\S|Ģ喙 c[)iDZ݉<jHMj% Hc1Z3͹1xaŀB^,TX,gC,lVY >Ewk?`d { Pk"]\IENDB`rockdodger-1.1.4/data/images/lifepowerup.08.ilbm0000644000175000017500000000021613706632107021752 0ustar krawczykkrawczykFORMILBMBMHD CMAPfBODYP}~?~}rockdodger-1.1.4/data/images/ship.01.png0000644000175000017500000000264413706632107020215 0ustar krawczykkrawczykPNG  IHDR, sRGBbKGD pHYs 4)$tIME68x|$IDATHǭKTESUoiaq1@1.4qa|L\X7&0ai {$1D!J40! 0CO}q1#$}6wQuo}_(Aش鍋7l̐ˈ|-<?Q~WtZh9gJ=PK7.1Qh:|>r\\RJTR*kaa@R5,[o~q(CC?xޑ4=y^KJuDzDH$R8sv}k۷ok;Wk˖דv{ }̃y )"k*GOn׋'۽VRk|32>m4 |>?Nsmi=?۸s3FwV ޼gf|%h_@=}3oC79tlUW" HM&ɚw7 HA*'2;&K̊YˬuҮVuhy^)_ qDHƘbund @`Z3h]DAj$Y-rWnV+ VՈ(@Vu &Z1b v&سl֕y05YuY ;XFG eU] ԑZ $/crOY/ =s V?_h0Q/Ivu.(AQ֙Ͳ3͝;e1dz\JQ$/'ߙW-'HDVp!9UFB@,H "HE!H DŽEv(5DDDR|ynNib r /% }ܕi=ʾs9Ǽp1" o%ލd%m{lLz8?\=<CL&DT1K7J]@K7AU@DtHKUnqO7[ZW\mWdZJ~^Vkdqcwb\_jnk{nvn|wvz4 s:`4)XO0g\)=CGA9FcB |F6bܥξ„r<aaƃ  + VsP$*_r[kzsA,v0B?{gEoh?_юIENDB`rockdodger-1.1.4/data/images/yellifish.08.png0000777000175000017500000000000013706632107024160 2yellifish.04.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/laserpowerup.01.png0000644000175000017500000000067213706632107022001 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME +IDATU0 FwCvs@E,"&zen0},%zqd'QmxbkV^A.^]J/"ܩK}1Qɀյ*1BB%+l!CJ> AY3\ ~c&mi_4.y-r+W 04wIENDB`rockdodger-1.1.4/data/images/greeblie3.bmp0000644000175000017500000000146613706632107020667 0ustar krawczykkrawczykBM66(  g07*C7\9uEC _ j1 `$  :Q T `9Q$X2@ANEMCN=K_/ ] `x87 ^DNFMEM?O>P=P1TY FCN#Y ` ` ` ` ` TF!e/ ` ` ` ` ` ` ` ` ` ODw>>>/w>>>Eڅg ]"""> i i i> i i i>Eڅ _000 i i i i i i i i ix W''' i i i i i i i i ixߤT' ccc i i iq㢱 i i>bN '''2VB(URAas~r~w<<< rockdodger-1.1.4/data/images/laserpowerup.09.png0000644000175000017500000000067213706632107022011 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME -;MIDAT= ESU [tZC K5`,6zvj<$#s߰!o\:y:j ܹc`@[]a𥂅fD$AY ?M. a߱cI2O%81 ?cN[IENDB`rockdodger-1.1.4/data/images/exploding_rock.png0000644000175000017500000006561213706632107022046 0ustar krawczykkrawczykPNG  IHDR,sRGBPLTE%%   <81  J!*  Z; d1 %$Fs<'--')Et_k-13}E,F:54+,~78E('88R0.89d 79v"$a9C).p5GDB[%%q7N&ҵoC(cDVIMONHn13B?>B;_B ODdH3?qNRe~R*fa`DWeHR],90lguny>;FDAB<`/tpNOIh7zZr&szbdg={t>ҁb҆͂~܉ԖݖK~Ӓԡr Ҟ/כۖoWbz9 bKGDH pHYs  tIME ? IDATx $U&Ŗe-e+j+i6 1q[IESn,S bhW__/kYUYYv3+2_fӤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4ir2)y/_ov͗^\&dyOW|n /\\k>﹒ӗof|U窟1]yMϔ+j?Fov͗^u33ssnrTɩ{ǯzg7yksAs[Jrgk⃩7(~|u\|/U_?X,Q ?>3w*QI[#%x9y0`<ίqCRwN*ov9=/N9agFN9)[S%x9\'V^/k'JR5novq%L_ A;HjfoO@/3y<suy_KO ^_P闖?_?O˃&Ϡόr$5{AsoJrSy<))g8 Gy|7 7;rgqyP$ѿSf/ha-=%x9QCKt貐 5G+_KFR)Kz3O7{zKOzP¤lzk>Oy4{ӆ X%,wz`p\X!TE4t>>)')?(aUK`6ށNեh'埌 -&rJ. (TiIΩg)O[~'Zi>i|#>,8|=iygLxY>(8'+ݷ OU{ |Kv!ќѾ|\IT7ak>+|j wW{r/J|y" P'if7J[I۬: C=✔UjaF'.K6PgN+wuKd:X'{|zzꜞ7zZ<`~ߖ+ ۱JE#\:ԯ&ջ㝨_Z41;8տ߷BUCR ~G:Wp`3?Z-Qu>Ն̫sz규ׂTV }V-J3xDx%5WOWTI>Z7rO8>~K+ۚaPǹi=w=M}usbߤ=Oӧ8}Zsy~xG2? ڵ‹q}U3=j2YIiHursz;B`5,h /ڧŤf>xSY=~41|˛i6Q|ꜞ7ϫs.FB5<]+h zQg;6W5h<`y56Q?:h9mCqw(`ZE{>UsMX|JW|&uꍦ;B`E6ebZMW`IdP^!< M &767 <Qǩߨ:g@XTfjZmT.$d- Mjj9S4Y_礎3{>g@p_=Z&W/ ){Q M^=|yd/˻_?d&M4iҤI&Ml6]4iҤI&6y7q؀]'55s6;m0i&oNL`b[2i[PgVƦz zO[x)&yK ss56A_SMnp, ƿ]2Mnv]g!VkrY3f~ؽ5+'7Av)a]7; 9m{5B^+`W#N_?u07v9mS H΁ns3v, )k~](@(@OA(PN vw ,P8,73RnrT_ItpHX`6F`C)i{BS?@~]=z nk3S,q譄` M?% < б +l  쇠w'vkQ35~{TA۸[JJ u,ٴ_Si?BnO,߆~4v{䴌E@Tu\t!%o+U<@ȭFV*|4Bp  mvEjSgLȽte8ns.IjHwuΙ{@5h" d%՗W`W½5x/(vŜ~Bᗾf!!LCD?$sn\j@3`ʠ%wL@pֳ%GPٮn 0t@5ׁTE\حQL' !*MjƆ~T\ T/i{ @06->5Pw㉜1/ѠO9Hs:БhDd6&иpESEM,:Hѥ7,/c[|w\69V;0W^_C T֊er/ @=8VXaq,D A:Yr0tPpSG\x}O02,T 7k xA4!&\|fѻž+x WPɡM79Ivx[og6mQa }9w) 3 L*0sɘzӡw#XWfKz@sn(ܮ9da,'s]̝ $Q QZZYl D W;.KjWL1&WnW+n=R} | 0<)Ęի o-5xFt,8 9Pe׉Tp#7P{* JW`y;\T`p,b~0'Duq, ,y F`q%YQZ7 'g(b8(;4 @|ѳZA𚕃K"0`ޠIhJF:خk FU,UuOq0Q+/5bbyGn@XM! >aC ྍ3^82~Yr0TO6Y$>C.8CJi@at+!Lp\e']Ϟ&PDSR)Ae++.S6Sè=pHnX\0-ͧ1.!fЭU=X8k BS!aU+_ə צ^R~Ԗ\* ;cvEܨ,Q <3l!AbaQ(Ο^ 8 Ekj(Z)CѺ&Gj;[70ǿA69?B+, >z=ц92 >)x 4!Q!gEd7M4xToX4ci3yoHItFp-ݮ"0W5P)Z2' _$=EΖ%1AE4aPl7ׁhAY=%kS)_$zg#ܟxo7t:˺*UqDm`K c9xX8R=jR53/TNlt0F vU?^E=[ӲnK8 %F@]GSmRY0Ceu UPkbv*2ɽB0N}׮ńdFU:aDZp7G B*ݮi@f3 a %.}I E.wXZFE0/⋞א g BY闂d7LCbU0Vp!0tHt v/. vѮɘš ^q%v!Nǻ`׺cp!p9k߹@u~,ȿK~ѐ|CB21O+ C#%OI>/!vW CpS]Vb4%yX;@KZ, @q,}93_ugv7;(ŷGjvChBm }oC>aJ`FhTtun JhGݹ ..^vh6;ց81 sTFQNfm<< BV !\^H5dpQ-8=R`5 kR v]E9Pv!;#jCHMn?Ford~4^uv_FG3F;` ]ʤׇØQ;o+Uq-ا; th, OhgrhŘ37bU!mS1U"ЬO ؟b6B>اV@&+Ya C |to%+< ,W8J= DtK7a@BX2eiL_"]ͥ 8f)B;h3C!!Sҩ(y`@;JqADw & D+3&  I9p-h\?ܤcĭ+E8h`Q.`,cИ#\UG.=W[($:p◱'}>,P $o<41L~"O׬˯ծA~)Ε(n By.Ű NpG`q'% J2k K}(ru^&@OyRì=fQЉ3 ŤwØ ݻ0Pj!jZGMt>ŶL֍ŦW`O\. |R@'i?uJZ T&c(!NGus&Slals4<'`(+O)aX2Ѡ;]Yg@p0"p{Zp mqAJHloV605̮ƠъC,Ain @^JAwv+?腱h@0fs.0GC AW4 #d(W7.X |tjLpO߶' pgAz^v~,uAN4Z1 @cf^X B9v]kS3q'כ%2R$5mXRMuxI ObJH+F HGyնm|n(Qq[rwd)amo11@dZ9UP[+\fV2DV6,u=$ ]z+S P dx)j6 K^("{?hHr/@736wҀyh?gB\>`.r=#g@e>V#ʃ) [`/Kܐ[/#kʯy.easX> iX.tCBTI0GV9" XRz <ґ Qx'h 5n u}xP1 QP2a~ H4q9p`r9.Sk:Lt* W0h&}mbBDgHWW}څH dž x1%M$6aE O4mU%T蹟5 }^,uj -Դ dpn]E V'+:EyQ9A0ɸl^ZF.Kr*ݞ[ 7^4z1ֻR' z!(َhW-J{;%O܀*FQqq{'EL82 P5ec }01o/&g~z;& L٢/_Hm\ne6ӖB@+ qϿT1yNڝA=V6X{@>b -0Ċm^A_S\Ȩ֣Ly #DV̳CxиnK75]u.j) yY WU䫕`:4ZDhҝDX۵_A{-f{8)A baNj}g}P'RUKgވnuMyeZ\c_̹lsnDxyTFXP1mtR>'P7t3i @1V8+V\("֚OO:(A,NE^=7Pm0w F:0Œ=_pVJ cw an  ԬMrT;KrE 1тh"[lwvŐ1 ɑa $od޾CC0bf&#b "[XsQl=)B*t:x2=Z r$b_Wzou83r>Shh`6Rdb9fViyz3{-VA 7d1U|;t+*+HɎSpCn1Y5{}iٲL")ۄB C)J%l`9HMyG?3O/ =VF`5O2vHq\HW =Z@f&y9 mW'/xU4O^|*grSkE_LLB8 +[!o-'v]̛Ij) ($)`Azᾀ/Tng cja ,(vܯ/N1.|u8rZ!m2阌<꣕|)5n=/efa!YѥWR*DF-0A/Qz1N Q#@q*\vv7Ym@taQ$Z٢cGjLb?˫Qd~\M&38[/"8#3!/P}9 &w.?!/Z8{YD8G4:3×pI0 T=QApzL'b.9lNxC^g dECTY-[1(\eЯ̬AWJ@+r/M@.=0j$ :[PmҼ-_܈LIwTxuF .B_?$tY&hE@U7t [aG08 ^Ma+yaΖ< YbѥAL~N$X^aEKL`}O8CdfVT&|^IN`7<X$]2`ϰA=ÐgAǪI)h}3eGO VX+8>N2Ǥm% p  XجjH vHȬ?䳶,ܮ-yҡ FW!++\eKBS$8Cb!I B]ٙ:đ]a*΅҄_;11Q%6RW:.V;u+ ֝:mJY: mG! ͫpDBfsԁ 0ck$TPF- ucfŸ@#͉Af_p[;W eVBA\žnN? @>NRx 2iDʸm;D`=Q"-jKFT}`_~S g.3yf^4 nq)Cv "Zay++ f_/ ;Ɓ(3KDZ4ݢYg^GͰ d> %T%t^e>mԛ]+,LbfWo׫x#k<%u( 8wwchg3)f5zjAϽuf5U&=SĜuKMXA5LV}D<'aWRX=3dmwI Ro |$C7elYyC4">]37ݙ#T` u~LY-Dr:. f"1|'M!4o6-`Z]fs4s+%EI+ioePԏdƕ5㲝L)fZ@KeXՍ4hCzMN] I}}23Ya2{8`-ÂZ[e1݂?yĜhDbhz{.ǪJ II>SwOh^ZSx5!XT Oփ4vb" pDpהdwASۑ厫GmR,RK--6g鞜0`8} KnRtcK;nBp>kBKx YIo]~]QK}44l)"l.,!1̴Ь,mlSuqrNʅ%,rx;LZVXIM @̓?d|@(YodRIKAJVE0NBo-E 0 WdKmdZr#a,BS i>i@G_obDl:۰8I؋C=KZn”bf0"͉ =mY*6|tY]n=(VZp?G'2}l|k l2S0"p)BfU]쉕34H!"3u1t4l)-hPͬsM~- B`B>u /KF]=az4lT /yC$%b/fb1tyRN-|~ J Ԑa]!ؐu^[`7k YbegRy\7]x@̀Vz^gsjiA>i$޽KƤ_u^`5]~ti[-gyL ?!YЂp+7g ]jHdةe[&nJ\94Q-@6h6elH@U,rK+9Ar<҃̚\7da9ςBvYHN @%"a)C\ |t^CᮢkB O5ʯ!3R>t4rmGn "yjb^9" A4<,6"](]FBx\;[(80J-.Y )<2efID',06h3ٗY\މ$P2^kUs$gחq0sv;?N#!aL%+>=-züa{C^=7Dҍ(<A7]gV DT+LІa6GYJMM=JT/E W۰`W4ǣSH1\"Pc }+y1 P[EJlI J"v~omU~ X?v =&׼@M힩]k]H p"|pJ~hq> vI-L#yD6?ؤg#IɹpG?8=a8p@i_~L,婡Ѡ)e.! @)90`#;#(L3* 3P:Y*ph:R艘fBʺjN#_d5#Q`4LKQKw42#UOn\ h|͋%03'RkhzC>oh i5ykʴsk` @,[V3' H66Pj2[\(qJ:8kq3hL0fsw@ ۫!a}֢^ )=8~mՌJtud8;2w7, LpU6&Ȋ#뼱̑faU .%W<`"L{dcn+?䧛.t:Jq75`L*x8Q8M S25_3AGF2=]SV,b@-VsDG ocu 8K/Yo[awqi7ak #C0.ũ-*@}H}-[dqt<> =;y$+*zIck!d! oD? č[`9uC'=jL\`<ȿIS\(J; e#Mi2=)mGV pKQ`%4)A7ETE P 6|eKm)-A=aQ{[T;@ջ gh5|h)ܕi|1HFRYd+<&152`t;_:-osu&Y鰶55 njXFk쭕p/i (f[݃ޱ*)J缫: _Z=Mw< =bDQur9iRY a7 2jjpNmIoٝxVb}G1f 2Id^@QþjA NWg3;+&^ ar285d|;z;rgIƺ |\5 ^R}N2 fچAӾ!΢=nc7n)&g~` feD֊ 0;L }jK^1Ӑ,PW-i56X6(pjڤcaP ptA SJYB0qs1[I 5#CO\ zbeR) P6$xx&.C[:0}!snQT$J#pò6ҫ {~8Qٽ&8->lWJqjNʬaT|Y+<*S,V|A`Q ՐmWzVW"23 l0 wL͇,%Ky(z~H_\pQiusagKA2C2S\<ƞ19K΂aaȚns+xiTԄ#U19evsC% E(kj' IDAT]#YVjR!ڹή}nU {Ny ~X1Ԩ7Hx:Էt{q H-Qߧ;UrT?Sv[J_+:,6b``J䏥itgs|۶:>28yv>/ܖ.Ȝ=s3%{"P88_5wmm:gKMSE>e(r:Hr{j63``>m~/lMN NsA،\wX'U0nVW01M3yQ_D3)s~yゐJP-*~1;j*{XO\ea0HX<#B6[k*K0/+ŌaE6K7F=9WiHO-y5nJÏHv>G.},V U I rƜח\vg&apFu1`UM@E{zWvrO^26aNՉk0)pry1UEt&-.bTsbߔ&ZzneK9Vr*׊zl ~9Ʈ2k[? SBIi[1_)j.Ӿ+E Լ/-dYSQ́%rZV0:to' EiTaZ+ՂÄ$60Yw/pRRI$ ݧDD06) Z42C,D~UjAȕ2v)FHyz.U#S4aiɲ"%y` 66x fd< \IϳR }*bt$\\ ;GfJ`̀O7iEOyIc ~E(d>yQ#$Ff\ɉK$eqOd9)ȝ1Z:Qa0VsZ+I̓&9|&KD {&a3a}Ҟ _8d)I݁;5v)0|?5- !3\O.7tD;R2n>_몈 p%H^FF ;FQıF:=Wyrj 0!S:6֖J Nӄt ߛ$SnlQ`uYENEoN>`so! >0i^3wQhte᪥QF3X>~TY1%9+l vW:3La I2Nm`Q5"8Zcoh0G)8:͐ih@-0%PCֱ h=8䄱];ΌIy)&^ܸm|etdЏzbIT36ܪnx#TyyUOLATάQz 3E:?0hqa1K6G6kx5QZZYk"1,ݬ8//UN>a DŽMʯPW`pap7b`\eBMCcggPʉݶʮ/N,%t.@ږ`c]GZ vӼÈ=GgTSpOaT*޽ yÿ %#hxxpun '1a܋ߏP<ݿf誋BƂĶKFE4 ]$CSm\-E0`KqW@eW5#%e)`O0[\4G8h<ԝ&0{9-ø?MPiIqMMR#t%/a:T#5U%\ RUSN8ve ϻG^ĚXe / 'K7lj=A!͗4K*WVmu:1GxA@N4JWIN qޑQ_06bb>PHU(%jR I!r\D(e;9H+jޒ1s GVN89nm3 ҍix\m7%jвznwanw3ZFFء視Xʴ1}7YMj C lL;rYh ~{q! HcSH6bW}ם⎜s6\!h-0` cz=Mͷp>==Q܁pO`18%$WoXw@+`>387ҼtFDѿ䊴n?ib~0pT)7!Tl!oL1'J# YsYwq%Lk٤-,ϑ%t +jd]5ˋ{mCzz{ZC`}00Qzf*76R%N h{&7*mr9U k0)hsX3ػ_9tL28V+_̤rov =ƿɡ8Չ']r'Z"q*LĆ^Ǽ03w[w: k(ؚ_&Ѕk]\qruj/!8@eYD2D:ʹDe#/ Ͱ,Ve}STaW`JG"K !i"J:bĒpL( :KЮӶyNDɠ5_0{\7iblUV,Kra ukgrʂAv+H%BbYˊ_}#bC$Ԓȏ Ɔ#1'+,kX#?I_m$p=< ]7-::^(AwvĪF~me"Hib!p# GHS)Pac77*Jp3E&@77חJGa4C<ڂU 6z[n)_ jP$Ly#E1EuyòM d;MDgfpIy>kd2{[]I Ҏ(w;ɬntp-Ӄ7p$n0JdF":`_Ue%-҃y9" vהw=/*;Cč5{vXy{"N &0(N)B՛cNhU }\ LZMVD\8+>3E5!LJ0 0\y'NPRa/k7Θj;Xe5oòn22w/clڜrUvÈ;͉⺊Ң9x8,uL7Kl||O|O%c'"/./2 2T7eSok8N"Q8]J[~ @$uD!=؊Fx%'2hI}VYiS9 xdH>;?y_Lу駈[wM9.Y5&Ǹ]/ک=F 9y(A9=mAoB8]ttQf :&J;OCE$tJF:tׅ G}2nek{(])Hƹ 4PUv~lb>[c0!u{K!˳>,= sA??$QsCfm7#J"nJ+|!崨wV D*)Y\WS\D~gڬ}aq@>F?r<|q1> o}p8naH<TB"9[I p5[Ec(t'4 o+4:Ra}dBX?F[>?| K <:6 r0GC8VmXǒwogsAC!tt "rz~vaBX_xr\U˒0#+G$cf@ etA 6T܁Ts;ti?n'~;S@_ ˞sXjdz5Mlr"-F4E[QRW{L1GO97,WւPa2&QO$~_韾l*&`*D~9^3]`1T(,1ƲrPjn%F  e7W*rì<JgOp 5Bgi \?,}~S70qd*7BtD K$LC -f*`U(D~1_i@4o0 ~|" z'B'V•{|'IM?jl$} ^TV܌0qLǂ v*2M0&&>zd? /7 q|^ *#!osQC†X,n.{6]5UBXRodeM ~{>@Lշy=LO[Bc6!g?_|PL/~8!8-h- Z\9q33sIH 9[i]FIDAT+Nug~?qg dNNTY;riw1 rT_oΘ O|d~ (g__'ٳ ݶʾF$Ӏ5J#?c_>2vi]S`8{c\{J(s&W&|ld{3Ux@' sggO~BIsF7aN#asW|`Bn]<՝IgcXnEP<*~J֚G;L0g? l n@FTM\ `Zj%#t*ͬ0w: =MxI' o Le|UaDAȗ=|O$nGXvx]+x:g@@+"DK|BH!>4׆pz5|fo##'O{ ~^ E~G?~'~g/n?o6wu!=lJ0<nsg$("oO?'O.? }+7 ~?|xϛPߜA0h4;P\$SqkJxjɣF>xO?*!_ү?Ǐ=ާ{c~FR-l~7fS@?LdگڗOL$({'H;#KRlx ;$0WxBM/X%{1G}5 _oo>S@( dNp׼'G[3f;^ڍ.ޣ@]Bw_%y}B~.r"#E(Qfm .r@_}|2 Fk*mx%mhlG#ӺOy&60l.lsx\Z`~+iݯy}bPo~W׿z _= +jk No^"GrYˤ㐩V]W|KVk \wP/}6/m? _4+50-al(lf Mި$&Mހ 6wM7M! xMag8ɝCЩ5"Aɛ0x !D`F`i] G36OgirL&0JiE4sɚ&ozB_`;R#fcV`{X G;atoѤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI&M4iҤI,?xC8IENDB`rockdodger-1.1.4/data/images/yellifishtentacle.01.png0000644000175000017500000000042513706632107022755 0ustar krawczykkrawczykPNG  IHDR)AA PLTEN+h pHYs  tIME  ^S0tEXtCommentCreated with GIMPWwIDATUͱ 0EQw! Yb2AďwH4zVT&~4[6k1. >9Ó@#d4R̖MOF/xC +,0hV*wzQ?<ҺIENDB`rockdodger-1.1.4/data/images/laserpowerup.06.png0000644000175000017500000000067313706632107022007 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME -bwhIDAT=0 EhZ\?硓i\Hʘ*>ƾw?AvwY GV{"k'ckى8t WN:r~`}eec`@K[c𕂅fJV"BJ$AY &B(qh_4.['79Io>IENDB`rockdodger-1.1.4/data/images/lifepowerup.06.ilbm0000644000175000017500000000063013706632107021750 0ustar krawczykkrawczykFORMILBMBMHD CMAP` ##00CCI#)A]UU;Гo7Jςc胃tDf>E{5/ k5SFG*--D12[ _BODY;x~frAO@`O 0@```@@>FFFf=~q, Prockdodger-1.1.4/data/images/deadrock0.bmp0000644000175000017500000000210613706632107020652 0ustar krawczykkrawczykBMF6( rockdodger-1.1.4/data/images/bb-dropping.01.xpm0000644000175000017500000000024513706632107021470 0ustar krawczykkrawczyk/* XPM */ static char * bb_dropping_01_xpm[] = { "4 4 5 1", " c None", ". c #000010", "+ c #1122EF", "@ c #CC62FF", "# c #334AFF", ".++.", "+@#+", "+##+", ".++."}; rockdodger-1.1.4/data/images/bb-dropping.04.xpm0000644000175000017500000000024513706632107021473 0ustar krawczykkrawczyk/* XPM */ static char * bb_dropping_04_xpm[] = { "4 4 5 1", " c None", ". c #000010", "+ c #1122EF", "@ c #334AFF", "# c #EEEEF8", " .. ", "+#@+", "+@#+", " ++ "}; rockdodger-1.1.4/data/images/yellifishtentacle.02.png0000644000175000017500000000043213706632107022754 0ustar krawczykkrawczykPNG  IHDR)AA PLTE3F= pHYs  tIME  K]tEXtCommentCreated with GIMPW|IDATUͭ `a*  m@@)3$̓s  aȍ_ll-c2PC7\|1 #xwfXU%dFX둝^7IENDB`rockdodger-1.1.4/data/images/deadlithiumrock.02.ilbm0000644000175000017500000000222213706632107022552 0ustar krawczykkrawczykFORMILBMBMHD"# "#CMAP` 4N>ZI0SjpnW%9c`]e!hE(+BBODYfFP@+@0yN6B&  @3(`@ `r 0AD FHF@3;x$,,/r 3Ch l_#~h!-ȮP%U?֯,b1/O]>/6`Ȁ3hȀ @Wx#kM̀S9!y$| Kf\@*@)ۀVz@, @7W=+@^oDhf ^0h n=@} U_P@*H@u'u_E6U>>][ ?\>^>F"6`unm >&W$@:@/?22  rockdodger-1.1.4/data/images/lifepowerup.0A.ilbm0000644000175000017500000000021613706632107021763 0ustar krawczykkrawczykFORMILBMBMHD CMAPr BODYP}~?~}rockdodger-1.1.4/data/images/lifepowerup.02.ilbm0000777000175000017500000000000013706632107025366 2lifepowerup.00.ilbmustar krawczykkrawczykrockdodger-1.1.4/data/images/yellifish.03.png0000644000175000017500000000320613706632107021237 0ustar krawczykkrawczykPNG  IHDR S4bKGD pHYs  tIME  '$VtEXtCommentYellifish>IDATHǝ[owjIQpcَd+p y[ \a?IHQ${twaځ ]U:;<^G@v5  s/[`\l= h:x <~]K :*VɣVgcoȪ%o Th E$ )x뾍ym:s`b98 7"'KP+hVoWZ6ݳ.~Plӎ\ڒˮ\ ХlF- eGg]#E(XL:|zCt7̤uǃڥawɼJ4 q( 8֋{|iva% | L~ hr h9c[+i2PVL,qS10Ak-Q < *TqP:` lnA\f һUJáؕ[CW` -ļmUU7PӅJ4 Y.iJ`p\ʨBh |lh`]0 pi\RށKbI<b&AHj@k  u AmgXB=C}wOcn'SAq 3EXA@t BӴDt껌 LA.!SMZ%Z`ۺ[AiΓ IENDB`rockdodger-1.1.4/data/images/deadlithiumrock.00.png0000644000175000017500000000115013706632107022410 0ustar krawczykkrawczykPNG  IHDRY-OgAMA a cHRMz&u0`:pQ<ZPLTE )-~A19bfvj!ZVzRNIr^nE5=bKGDqtIME+ IDAT(ύE +Hs߬jۄKU_QAmKO B#eե"5>%AU,! ZʓM| 32*:l+t'Vv=~`Ays/E\@R{RګsޙvM;tOrc⼹W蓳5ֆDbmw8"k7Gd\DsIc"/^]/%O\%tEXtdate:create2018-06-02T22:29:43+02:00h%tEXtdate:modify2018-06-02T22:29:43+02:00IENDB`rockdodger-1.1.4/data/images/laserpowerup.0F.png0000644000175000017500000000067113706632107022025 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~T;RbKGDH pHYs  @AtIME 3.ϥIDATU0 FwCvsYg1XAQ ñѳݭ;GOD4 wzCJ$n_ǡ=p 3;6WV[VxP=P1TY FCN#Y ` ` ` ` ` TF!e/ ` ` ` ` ` ` ` ` ` ODwو/wEڅxxEڅg ]"""ñEڅ _000{{{x W'''xߤT' cccq㢱>bN '''2VB(URAas~r~w<<< rockdodger-1.1.4/data/images/deadrock3.bmp0000644000175000017500000000542613706632107020665 0ustar krawczykkrawczykBM 6(  rockdodger-1.1.4/data/images/lifepowerup.07.ilbm0000644000175000017500000000062613706632107021756 0ustar krawczykkrawczykFORMILBMBMHD CMAP` ##//CCI%'%+@]UU~z22Df>I{5/ S FG*--D12[ _ BODY;x~BbA@@0>PpP,??``@>BBB=b)|\\ rockdodger-1.1.4/data/images/bb-dropping.05.xpm0000644000175000017500000000022613706632107021473 0ustar krawczykkrawczyk/* XPM */ static char * bb_dropping_05_xpm[] = { "4 4 4 1", " c None", ". c #000010", "+ c #1122EF", "@ c #334AFF", ".++.", "+@@+", "+@@+", ".++."}; rockdodger-1.1.4/data/images/shieldpowerup.png0000644000175000017500000000146013706632107021720 0ustar krawczykkrawczykPNG  IHDRabKGDAT pHYs  @AtIME 0iIDATx}oTewef0mDlH "H18,D ꆍ$v4!h? @&H -B(}X<'99ɓc@b.)dg"1'@a`,pp K*}@7|d7y]c3ÜxeUjᱷ݂V $W~lTNsKRrɯ(EސL_4*7COtJMju$P_q$ ErjV^%. @wl in% s0P:Ujw=ϾH 40Ҷ OmGkO Tk$/Fh6aũebLSjnBO&2%>dY<gTij4xq_g8Gܠw2~p?Y)DVuV}8{b;2x"tq1|p61x*4ج3!2e+ZWȅ^ L"xDiӏfayi8չ=cc.4 pi t1ԙT/@#O}Ե)CG6㮼۾dý_{*ozf1QK\j9VsΥhaeiޯnѶ)JX58c6ɀMߔ7*v?(=|'K NIENDB`rockdodger-1.1.4/data/images/laserpowerup.04.png0000644000175000017500000000067313706632107022005 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~Tj.bKGDH pHYs  @AtIME ,dTIDATM ESZM@Z׎V q< r/sfAYHBJA7zL+uC˪vҪ}~T bKGDH pHYs  @AtIME --̡IDAT=0 EQE* TiNIz~àT=MΐY( oزs"}ƶWJh/q^i ZBecsm*ja*c "#-OA9c c߬V]l 3KVy+~,J[;_ ׅIENDB`rockdodger-1.1.4/data/images/laserpowerup.02.png0000644000175000017500000000067213706632107022002 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME ++sIDATU ES-qk]g!g&p/75 >F+h\oit|KD'$ }r}%P.;6V[V]o ؜_+h6$B*T8d<\V %l S匓ӯ_il$IENDB`rockdodger-1.1.4/data/images/lifepowerup.01.png0000777000175000017500000000000013706632107025067 2lifepowerup.00.pngustar krawczykkrawczykrockdodger-1.1.4/data/images/mood_item.00.png0000644000175000017500000002744113706632107021227 0ustar krawczykkrawczykPNG  IHDRe${NgAMA asRGB cHRMz&u0`:pQ<PLTE4%7"2&:!5$:"/! 4 5'+#8%7 !+#(1#/%2#+7"'+'@+#<,(7.#8/9.'<.:-/6/'7/+@.!?.%700<1C/A1@2$?3(C3>5%@5"B5<7%=7#>6*?7<7+=62>7/B7(A8,?:)G> pHYs   vpAg{3A-GIDATx՝ CR[ͼr% B";Ƙk.j|rYwۼI\.*_~,Ȏ!xO7ooB.ao(c<C 'ac<+//wn;h^,ߒ1/W^;l;V6d *^]$/Εb <~VD<*gV /98łbUjjK[ձ ?_|RQQT8oSxt&jHi eM#i`hȏK!ڧ_9"{eoT[;90 =  {~)2 RᏨBr$e7* 'o"w,> -' _rd^ald>P^}UI{tߟkzSoo#+C}TObgʨv7y 7ߦ[˩ڨ7]#-?-VKVGUl>nf"n/; [EzqV*r8uˑW~ɂx6g匢c B_(uYT*E툟eH)Ki:T]mCxjWQW@r)a)1* א7aп~ư5ėQW_),|| ohۗt5)W(~;UŌ*N| eCk#3uEMـ/)w|2[>X= \[Wxꆾ`**LN%A 7O9!l+<:6+˧ ,.gw"J/}pPz@[r9i+=*fP4bJU^HH6-)zoE)Yt3 9 u e;7푻~05%o7ja8s5*2J{?4YrE!|")q} om/(wA˓]"qoGWGٿ`K,dw &=&lԖE3or? 68 @szZ,_?tF! Wݼ ~B/^h>GķvSϩc'}%_1OT͞TY`琂/ӿ߇ gl$>/!|w2J8zQ+|ZT?+}}]v(}K )J887oVт~ _ f>/ '6OGΥBz!+oTCM|I5_~Lj,fY *m\R\=Ha6C79fs;b'Dؓ$!<; Ŀ T@due <ȕ}2^>5W_dnIC!"IBx؃n,ɿS!`& lģ!?U;eS 1pok@KqSЏ,loVrw`&}dꞾ:a!Q~ X,2z^>@?P/)k :S2VGZ 2АjX&2n 0O_Dy=3H)3`>ü#.1|(%lީlԬcS/4XshS`'bgĔsC3G'FF(TU>Q%XIĂM9F_%qmdqSXQZ&KoKwtdjiO&+<^0^.2GMt :m%/ jQvD4=`gL{;Ȁru]t Yi3XZ~/Ͼ^A@n3vDÓ2( ^(BbPJ>bTmI:H0ir2L85~o2Ï`P愲;&^}ZiyIG VM =mm!?keObf8*p'b>|} gyt&:UNA7y<|Fŕ[Z젟*t%3386A%ݥcځ'Ǥ$ )4K1/?s.DL)sQ~41݈_^GxoϏKggggk7: $˃wP(x :?8G,~"?*Aomw٧< צ"znՙރ),/@dƲ_iH˓~'R|P\g%0k~ S{t7=2]o 4'n,KKQ.9Bɀs77wP}_)ɫ8~ʡO.s@|L~9'y*[}Ћj_ONJTS|OJA!=2OK^=[ 3wөOE+uU-z4EBsssc txfgӃw^#Y>`!]-?{GU<#S{Q]!i |]F_ܩ[SMH<6lN'9G#K4|>KMGSr3Lբ?/cxzsJA$ ,Ô9߾ > omR5.2\L.o 9cEϤC|P߾-=6kzYa߃@ݽ = Ej.^C7UʿG|50{ ID%! [^u ߾ɋpۘu7GC7K3o#>!l=;LL`k8P%tpр:fD/ü3R[뛮[%ž(ۏ!W~MnWa]5p7'iZ[/*#M -L՗jMw _ Mx(Iz©'z`¨$x f|#a /t#Y0~`ɤP"•j@zDK}>ߔi|*XNz,2+~-M@ҫ76Na5UzJ}N^n) A5 l"_A?aey _)KnlYOۉ31WZ㷅׻YR LN2Ӟζ% >b&g*Ok 8D"+OhF=\j Q: Q5lWCߒ˄_^N ZBFM~XvsI8|[V,7 G]U}}lifLsdz$̓OL;{F ͙%8 /Q.®d^-Gn >E ]Y̔4 Oi%YzT6^xX )LA o9zAF}Tg//t{]'{g؈# ~#&l~nfrGّ Ī-.GoGAOwzPaz"z]|v %KQ|OsJ)`G|p?x HFS#|a^sxl_߽;FwQw]sz!k?>V`/4'ZVc-ብl*=᧚gC7ٔux!rM?| {`?F$uhoQSleB[|즷.^]Y^\r@ZEۂ ~oųoWgBГAcuRhbR͚Jl>? FFvot]o ;K,ﶷ<; 35>gnG@.J_KFٯpI3n^Rx}a pC-t~X ~뛜W3ɧ8Kcp扛am(\p/yYP o/v,hKZ氆9kx=+|ikׁ^5ü1soٴ7hK]fB-hnS7`ʦyOt;K$3'Ԡev* Z~لcۃ ^r,P\VcJ)zMoR&TZTMXANgԜIVrg 6K".5tDe#%|X# |J|LW6=1ZMXN#Ghvm b' <à>gw6`y7x|JS f&e̙6DWځw?o͵Ë띩&mTr]Ǔɭr3z5$\=mo onS5$cj Qgu sd|*Y-5cY3pwx.a-\dC@Y%nO2|B*l/mNJM '\/ d~KgQ ݻdVL<;X6 B<[^%%gq}=Agi]Odבu3sY++J ͜]/ّ$/}ߕ>ȋ[ҙ_e"nMǘirvvt_rr쿁Nl#ZӄgSV %֌ F77|ܸJʄ4Z^Rǧ_Lrc 9xLjj3ߔC#-b];H[rY*qG1S{p]^l /e <'%i?ܥBׁ-bε{v( ?L^?#qx=Fm>y u75zɛ5c.v`^P>/4纯 _~maUۋhn' _JR9xȾ wpb\[A &?#|7У=Bܐrf+͵kV-[˟p̟B gzj,DOkt"0{pgJ^53+㒎WgؤÒޮ>|ayw i H#) ++7JoRlĩgsL ^64\avG+%k)irS:wR:R2 58?RpH/K  [Bޔn^-' ]c~@5kd~*}~ rZcbyD+< s53nعvIoEAJ'?ABW/{1tY_|FvӀuqkfzM'7>|~z*z'+0`ѽF&U1FQ^ ҕܕ2>L^Otnyn͏bfSۣ,(Zm3;gzC,퀝󋽗勆EaE9`b}Op3 ZޓMI}Mo-{ww ~zVx1W>4s1dgY_lxrM[F{fa G_9?c7wnd^x_91s8ͦl*_mjA6hg].Ϧb fN`j}pklOWow!8L~p*%ϟ4?B)m (5E4ᝫ?g[u`{$۵F̿x;vYd2ф+͠v{k}[MR6+ X\ڝ6  2dnj؝xv OXwu*AV>"qjA=|7M䆷2@`lߑC-zEc\mbBE_?E1|`foiڣ'ƸoJV@a[MVSlt>ξd޲{FHÕAݏDFK秿~7mdzBwU2sQvMˋ1»Y {yDBy*|ٓ5,y"uFv]v՜zA m_ӿ] ߡ6IBѻԢ$}wopBSyн_`aoW^3J%7;_mờ`;R2;)zJyBz}_C;$ |f#`4^ʋOT2n&?׾g[>^xv¯ZaU^81Xk4zxדYU5tymu_[x`w<]wnl^ fjy`ȼޡ݉gz֚Ez U޲5؝?HL(ޖJ*=&x{k4zWIľ .40Ef~u;ԯg!yFrУGrzɼ*xٜB[AkUOjWpi&?gPx܊Eoy㛘OBqB,ˤ탳DwU!IʱCxoyCXrMvj&8bסAϮ6|?ˇu2K;-Q$^]o6t&[6yHlA7 yox߮7݂i5*=SpQ/H?G6o xv̉ ]vYT 7 a}:_H>{ {ϓ?Esx|7hw0Qw9vϬu0xsj;g 7C@{{)^ Ƚڿ/`䊦J'C)h-Kobǀ&}g%e1/>=Coo1QDž`DF )G-\:Q;BWӧ ?ʓ&%tEXtdate:create2011-04-13T20:16:32+02:007%tEXtdate:modify2011-04-13T19:59:54+02:00t IENDB`rockdodger-1.1.4/data/images/icerock.03.png0000644000175000017500000000224013706632107020663 0ustar krawczykkrawczykPNG  IHDR(( H_PLTE|vxgfWa{\RF9G<&1(  oB+!!(/ 6=DKRZ"a&h)o-v1}59<@DHLPTX\`d~h}l|pztyxx|vwqrlmghbc\^WYRTMOHJBE=@8;36.1(Wbz([չtEXtSoftwareGrafx2Sj@IDAT8A0 Ÿg u?H6m;nj,ru0~\݋`$p/ykBFE $VPD=P!OHJIT}cwlb/X{wOJDQ(n7KѥKn31C'w?IZTd*%IENDB`rockdodger-1.1.4/data/images/deadicerock.01.png0000644000175000017500000000204113706632107021476 0ustar krawczykkrawczykPNG  IHDR(/PLTE/---A-30-0-2=--Wbz5­tEXtSoftwareGrafx2SjIDAT( P= v3p4Bn(dV".)jP9NteHUHzT$6T>n,%.xႊG .b-F"iĻDDbbK 5ƮbEStVU!m1;;+.U";W?8& &h6JeH)X*< t7qIENDB`rockdodger-1.1.4/data/images/rock1.bmp0000644000175000017500000001171613706632107020044 0ustar krawczykkrawczykBM6(,&  ! 88:;;=;;=;;=;;=;;=::<%%& 88:;;=;;=;;=;;=;;=;;=;;=::<113::<;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=::<::<557$$& CCCLLMQQQSSTTTTSSSOOPHHI??@;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=556 ""#mmq^^`WWWVVVVVVVVVVVVVVVUUUSSSFFG<<>;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=335  ""$yyxx~oos[[[VVVVVVVVVVVVVVVVVVVVVUUUGGI==?;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=::<::<::<::<::<;;=;;=::< !yyyyyyxx~]]^VVVVVVVVVVVVVVVVVVVVVVVVUUUGGH<<>;;=;;=;;=;;=;;=;;=99;;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=))+ yyyyyyyyww}[[\WWW\\]aacaac\\]WWWVVVVVVVVVUUUHHI<<>==?BBCFFGHHIGGHCCD>>@;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=::<++, yyyyyyyyvv|]]^aacttyyyyyxx~mmqZZZVVVVVVVVVUUVJJKIIJOOPTTTVVVUUUTTTPPPHHI>>@;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=;;=//1 yyyyyyyyyyuuzuuzyyyyyyyyxx~hhkVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUUMMNCCDDDEGGHHHIFFGBBC==?;;=;;=;;=;;=;;=;;=224yyyyyyyyyyyyyyyyyyyyyyyyrrwYYZWWWVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUUVVVVVVVVVVUUUPPPHHI??@;;=;;=;;=;;=;;=;;=yyyyyyyyyyyyyyyyyyyyyyyyxx~rrwffhYYYVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVTTUJJK==?;;=;;=;;=;;=;;=002 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyqqv[[[WWWaacttyxx~ssxffh[[[WWWVVVVVVVVVVVVVVVVVVVVVVVVVVVSSSCCE;;=;;=;;=;;=;;=445""#yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrrwbbevv|yyyyyyyyvv|iilZZ[VVVVVVVVVVVVVVVVVVVVVVVVUUUKKL;;=;;=;;=;;=;;=446 yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyrrwyyyyyyyyyyyyxx~kkoffhrrwttyllo]]^WWWVVVVVVVVVPPQ;;=;;=;;=;;=;;=446 xx~xx}xx~yyyyyyyyyyyyyyyyyyyyyyyyxx~yyyyyyyyyyyyyyww}uu{yyyyyyqqu[[[VVVVVVVVVRRR;;=;;=;;=;;=;;=,,.xx~uu{ttyxx~yyyyyyyyyyyyyyyyyyww}xx~yyyyyyyyyyyyyyxx~yyyyyyyyyyddgVVVVVVVVVPPQ;;=;;=;;=;;=;;=113yyyyyyyyyyyyyyyyyyyyyyyyyymmqoosyyyyyyyyyyyyxx~ttxyyyyyyyyyypptWWWVVVVVVLLM;;=;;=;;=;;=;;=::<yyyyyyyyyyyyyyyyyyyyyyyyyyww}ggimmqvv{ww}ttyqqussxnnrccdyyyyyyyyyyww}^^_VVVUUUGGH;;=;;=;;=;;=;;=;;=yyyyyyyyyyyyyyyyyyyyyyyyyyxx~bbeWWWVVVVVVVVVVVVVVVWWWxx~yyyyyyyyyyttyZZZPPQBBC;;=;;=;;=;;=;;=;;=yyyyyyyyyyyyyyyyyyyyyyyyyyyyuuzYYZVVVVVVVVVVVVVVVVVVpptyyyyyyyyyyyyggkHHI==?;;=;;=;;=;;=;;=;;=##$yyyyyyyyyyyyyyyyyyyyyyyyyyyy\\]VVVVVVVVVVVVVVVVVV^^`ssxyyyyyyyyyynns??@;;=;;=;;=;;=;;=;;=::< yyyyyyyyyyyyyyyyyyyyyyyyyyyyrrwqqwjjl]]_WWWVVVVVVWWW[[\qquyyyyyyxx~HHJ;;=;;=;;=;;=;;=;;=::<$$%))*yyyyyyyyyyyyyyyyyyyyyyxx~yyyyyyvv{bbdWWWVVVVVVVVV[[[llovv|xx~nnsWWYBBC<<>;;=;;=;;=::<yyyyyyyyyyyyyyyyvv{pptssxyyyyyyyyyyww|]]_VVVVVVVVVVVVXXX[[\]]^[[[WWWOOO@@B;;=;;=;;=335yyyyyyyyyyyyyymmqVVVhhkyyyyyyyyyyyyvv{aabXXXVVVVVVVVVVVVVVVVVVVVVVVVIIJ==?;;=;;=..0yyyyyyyyyyppu^^`VVV__`uuzyyyyyyyyyyyyww}jjnjjmnnrjjm__aXXXVVVVVVVVVQQQ??A;;=;;=yyyyyyxx~kkn\\]WWWVVVXXXbbdttyyyyyyyyyyyyyyyyyyyxx~ppu^^`VVVVVVVVVUUU@@B;;=..0yyyyyyyyxx~rrvlloeegZZ[VVVYYZootyyyyyyyyyyyyyyyyyyxx~ffhVVVVVVVVVUUU@@B;;=yyyyyyyyyyyyyyyyww}nnsmmquu{yyyyyyyyyyyyyyyyyyxx~mmq__aZZZWWWSSS??A99; yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxx~mmq[[\OOO==?446 !yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxx~eehGGI::<(()yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyggk@@B557yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyybbeDDE!!"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyppu[[\yyyyyyyyyyyyyyyyyyyyyyww}))* yyyyyyyyuuzww}))* rockdodger-1.1.4/data/images/icerock.02.png0000644000175000017500000000210713706632107020664 0ustar krawczykkrawczykPNG  IHDR0NPLTE!+B o 1(&9G<RF\fWa{xg|vWbz{9tEXtSoftwareGrafx2SjIDAT( b vTYvb>ɹP9{,%\"TQ{;m>yE$f-Ơ‹ CXbJJ$j_L`H37Jrܵ?Ll9+ 37Z#pd@=C%VF_]weUL~(B;`M[F'>MNt?jsnq_czG]|IENDB`rockdodger-1.1.4/data/images/greeblie5.bmp0000777000175000017500000000000013706632107023216 2greeblie1.bmpustar krawczykkrawczykrockdodger-1.1.4/data/images/deadrock1.bmp0000644000175000017500000001171613706632107020662 0ustar krawczykkrawczykBM6(,& rockdodger-1.1.4/data/images/rock.png0000644000175000017500000000300113706632107017755 0ustar krawczykkrawczykPNG  IHDR:[HgAMA aPLTEqU8 T4bKGDH pHYs  ~tIME *4 YIDATxXKsE^ëd^(:.nfجnl(#` 7W!?gwό >QJ;=_=3=ot[AfLH?h'KA/g-x=iKhogdk EgQX#&||3K.O7D]3_nP,l];z0{Fe_;.qÜ <5=6kN'ݨC&&VI= N-5Gylȕ'r@'Ϟ`@vpn,̰#琊#tjb092*sM=b#ytTT 38 t/{0T( B9~lb%8WŽ!3c EQE6ٻ3H#Zx;@%Bv)"yMf%O|B^t0-3鏌;EÔ ON ]1Zb2bvZkFcdX)8IkOF#\Tx"ÀVGhxA+)o5daݙCOB mBƮ6H{-pC;Ѓ\1`n.t_eF6دG k2@,U."}dEV@<&V?eеCR iL4)[&й{籈 \s w w8{mX $/VvIS}'}{3}UjV􆺂C\OdX>8UQTMK3,eyOݹc7o2}bIG&ʣʨH!L[=Wߪ`:@dd|%{ybC{ 3bjO\:4;{+MznJ۱ CeW$qDŵ Y:'_'GnBvc?`nmk!o#u1`[j@n߁-&xlFh#O !Gき˯ġC_˓= bsS4`;JA]omu%y!;tܿ72຅"elLKT_)&ڐ?o"Rѷ~ZOo"m+kfܵ?m񽻷7i@QIENDB`rockdodger-1.1.4/data/images/ship.03.png0000644000175000017500000000262313706632107020214 0ustar krawczykkrawczykPNG  IHDR, sRGB pHYs 4)$tIME5+5@%IDATHǭKTESUoiap1/ .4+]4Ƅ "D" CgOVbF%$ }6wQuo}_{(AoXW7l̀|<?V.R*?ӾroZPs7.1Q\^1w0aɥKDkPE : eˬsA"nҩ YK(qvQ"YD.C; BDpҀ0hαs}9"ŪSe ZHsĂ$ dPOA)aG4qVdR#@A~`HDP)ק4&֯> !5hvf?">uCq1f hBi@bO%siKjg`ښ,gsD"%r䝻_`+VyiR4ef$k^655<ŬDsf,)+ϟ^  OLT*ORiWm2'DumgzH0 Ǟ1 <\BܹVFEv97ԍz˷z1 Zmic,Ey\2yAާzMO mCIENDB`rockdodger-1.1.4/data/images/bb-dropping.02.xpm0000644000175000017500000000024513706632107021471 0ustar krawczykkrawczyk/* XPM */ static char * bb_dropping_02_xpm[] = { "4 4 5 1", " c None", ". c #000010", "+ c #1122EF", "@ c #334AFF", "# c #CC62FF", ".++.", "+@@+", "+@#+", ".++."}; rockdodger-1.1.4/data/images/game.png0000644000175000017500000000601713706632107017742 0ustar krawczykkrawczykPNG  IHDR [GgAMA abKGDC pHYs  ~tIME  93 IDATx]kv* e݇{ב>}$]G}p$N=@`;3! `0gk '@`a|b00>1h 4O ' @*=nwnI& }բ%];p}d8q҉]/`p8?芓TNգk,;A#=@AĞ}0ѧ<p+cE ^>ΰLW=%/ N0;j< &en޳b2u҉WwF<(ui]>IJ*SkONGUDp܇DMbVR#Jyͮ-ÅʒЂLXi!Z3fraf EFҿ]]˗ e֥5*Ļ}k"j#]ܚI٥jExPcǙQ7vYYsLGqgYkTR$I.n*ўG7*)T> X۪*iw_tDI!LSRYO.Se%ɫL/ D>!~0BaHlIZD$ ;i,e Z5-js(xvI۸-Np]1+ /kz:!mS%'vKҚ?W{![rGPLꑌq%VJ2ѩ"6ݏȐ[zZo<")'/yq!)~~hw %̳ {"L.3|^z_hpF'D[s(0@$e A"g@"&rٍ'Udoa D]n"U?4:i?&UƥXb|xZ)E\(w܀e:nַ?8IXԚ ܃{F۱:ֳ߼Ppw:>e:ƜW8n %o~喬(,Ȕ c VPGtk̥!5)[F~Gc($6\ez&/5Ƴ12,Fh}iI\bT3PZ|k֘.d[)^?S )1AƊf9+4"m+/UlW jQQqЊ{Ё Lr }B "'\'ny[*4W+oLI1-84=l"JQ$BJ'YO""&K> ;w?<ܓdpxQ>SܞyЪ\RK6>2(p gT &:%ˉnэ{?꫄Ì>г̢Nd'$DZ@llqD E趏KUPCBI=Mul1E?$MbiD*5 E3< y2Fhdw TRV$߈~HE#ұ7\THT8Ugj<`x⤖k,;'Bْ"EDNݤc*F}AaoEgZXAGo^c|Bm@&4l子) K+d4,ޗ%r'Qs - |ɑZ[RTwѩʹn^II'M@=Cr|ϭ#,bHMg g1 d) nBzGl}W H% W#g7'Oϛ:A࢙#'D\I9,hGq5R|9bލ\ߪZp!R{Ԙ1h 4O Ɨ=g3IENDB`rockdodger-1.1.4/data/images/greeblie2.bmp0000644000175000017500000000146613706632107020666 0ustar krawczykkrawczykBM66(  g07*C7\9uEC _ j1 `$  :Q T `9Q$X2@ANEMCN=K_/ ] `x87 ^DNFMEM?O>P=P1TY FCN#Y ` ` ` ` ` TF!e/ ` ` ` ` ` ` ` ` ` ODwو/wEڅxxEڅg ]""" iñEڅ _000 i>>> i>>> ix W''' i i i i i i i i ixߤT' ccc i i iq㢱 i i>bN '''2VB(URAas~r~w<<< rockdodger-1.1.4/data/images/yellifish.02.png0000644000175000017500000000314113706632107021234 0ustar krawczykkrawczykPNG  IHDR S4bKGD pHYs  tIME .*tEXtCommentYellifish>IDATHǝݏG{˻ڎ v9$!!Cg@(Kzggv>.UbHZ3un{ϹGױ%0#`8F"|prw|5Wu`X@WCğ:߽[ ! H ezm _xwOA?:@ 9.s{kC''^}0:~B `Ϡxl b ?>𭓓:.3)Ӡ!j9WD5/ܺ^Ǐ?Y@p D{,Z׾=;EE{cґdH-쿇ҽk O@`cj4X/~oIe6 BfsՄ1 *~ eu9Y?$XA85_^zE=A0*ؗR=#{|P=2aV_?w1`sϾ: :pt4L N1Ѿ@%YDz-K >z6;EeN_QQg5o p7v4 Łh-j`?6"*a}:-4p'K? k:7⫰լ΃~_)A I3b:+?"smGETVٜKyl85ZMV:^in&:(Um-W ĥ⃡+D!nov$hRb 悏PҮªUQPU$! ?,K+T7g{F#u̚Y#`ڨ5Mefj%T!lݦg"tL/00.\8P_ue9)BEB|Jֻԅk elBQ!*LȠG0_svh{#sh K혦LC-"0P # *'[P`Ȓf〛Gn F[EARZX6Ϳ[" dFȬ'lhdI~βa`i~[ D[EFG~IENDB`rockdodger-1.1.4/data/images/laserpowerup.0B.png0000644000175000017500000000067213706632107022022 0ustar krawczykkrawczykPNG  IHDR(-SsRGBPLTE-tbX:Qq+ YWYg}+   #$*LE/=CEJ_cei>C˪vҪ}~TqbKGDH pHYs  @AtIME .&3+IDATU0 EW9_",B4dv>(cx9=lo9zp`#AaV q͞+'_@9߱ڲw|(dR1JL%P! uC_X%~&ZĜ2OMS2N^LG|Z0IENDB`rockdodger-1.1.4/data/images/lithiumrock.01.png0000644000175000017500000000111613706632107021575 0ustar krawczykkrawczykPNG  IHDR txҿgAMA a cHRMz&u0`:pQ<$PLTE,""N< #include #include #define FONTWIDTH 6 #define FONTHEIGHT 13 #if FONTWIDTH > 8 #error "Font width > 8" #endif static const unsigned char font_ripped_from_sge[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaf, 0x07, 0xaf, 0x07, 0xaf, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x87, 0x5f, 0x5f, 0x8f, 0xd7, 0xd7, 0x0f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x57, 0xaf, 0xef, 0xdf, 0xbf, 0xaf, 0x57, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x5f, 0x5f, 0xbf, 0x5f, 0x67, 0x6f, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xdf, 0xdf, 0xbf, 0xbf, 0xbf, 0xdf, 0xdf, 0xef, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xdf, 0xdf, 0xef, 0xef, 0xef, 0xdf, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x57, 0x07, 0x8f, 0x07, 0x57, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0x07, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x8f, 0xdf, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xef, 0xef, 0xdf, 0xbf, 0xbf, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xaf, 0x77, 0x77, 0x77, 0x77, 0x77, 0xaf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x9f, 0x5f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x07, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf7, 0xef, 0xdf, 0x8f, 0xf7, 0xf7, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xef, 0xef, 0xcf, 0xaf, 0xaf, 0x6f, 0x07, 0xef, 0xef, 0xff, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x7f, 0x4f, 0x37, 0xf7, 0xf7, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x7f, 0x7f, 0x0f, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf7, 0xef, 0xef, 0xdf, 0xdf, 0xbf, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x77, 0x8f, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x77, 0x87, 0xf7, 0xf7, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x8f, 0xdf, 0xff, 0xff, 0xdf, 0x8f, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x8f, 0xdf, 0xff, 0xff, 0xcf, 0xdf, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0xf7, 0xef, 0xdf, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x67, 0x57, 0x57, 0x4f, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xaf, 0x77, 0x77, 0x77, 0x07, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xb7, 0xb7, 0xb7, 0x8f, 0xb7, 0xb7, 0xb7, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x7f, 0x7f, 0x0f, 0x7f, 0x7f, 0x7f, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, 0x7f, 0x7f, 0x7f, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x7f, 0x7f, 0x7f, 0x67, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0x07, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0x6f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x6f, 0x5f, 0x3f, 0x5f, 0x6f, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x07, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x27, 0x57, 0x57, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x77, 0x37, 0x37, 0x57, 0x57, 0x67, 0x67, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x77, 0x77, 0x77, 0x0f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x57, 0x8f, 0xf7, 0xff, 0xff, 0xff, 0x0f, 0x77, 0x77, 0x77, 0x0f, 0x5f, 0x6f, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x7f, 0x7f, 0x8f, 0xf7, 0xf7, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x07, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0xaf, 0xaf, 0xaf, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0x57, 0x57, 0x57, 0x27, 0x77, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0xaf, 0xaf, 0xdf, 0xaf, 0xaf, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0xaf, 0xaf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x07, 0xf7, 0xef, 0xef, 0xdf, 0xbf, 0xbf, 0x7f, 0x07, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0x8f, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xbf, 0xbf, 0xdf, 0xef, 0xef, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xaf, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xcf, 0xef, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0xf7, 0x87, 0x77, 0x77, 0x87, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x0f, 0x77, 0x77, 0x77, 0x77, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x7f, 0x7f, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0x87, 0x77, 0x77, 0x77, 0x77, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x07, 0x7f, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xb7, 0xbf, 0xbf, 0x0f, 0xbf, 0xbf, 0xbf, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x77, 0x87, 0xf7, 0x77, 0x8f, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x4f, 0x37, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x9f, 0xdf, 0xdf, 0xdf, 0xdf, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xcf, 0xef, 0xef, 0xef, 0xef, 0x6f, 0x6f, 0x9f, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x6f, 0x5f, 0x3f, 0x5f, 0x6f, 0x77, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x57, 0x57, 0x57, 0x57, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x37, 0x77, 0x77, 0x77, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x77, 0x77, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x77, 0x77, 0x77, 0x0f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x77, 0x77, 0x77, 0x87, 0xf7, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x37, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x77, 0x9f, 0xef, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xbf, 0x0f, 0xbf, 0xbf, 0xbf, 0xb7, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x77, 0x67, 0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0xaf, 0xaf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x57, 0x57, 0x57, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0xaf, 0xdf, 0xdf, 0xaf, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x77, 0x77, 0x77, 0x67, 0x97, 0xf7, 0x77, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xef, 0xdf, 0xbf, 0x7f, 0x07, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xdf, 0xdf, 0xdf, 0x3f, 0xdf, 0xdf, 0xdf, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xdf, 0xdf, 0xdf, 0xe7, 0xdf, 0xdf, 0xdf, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x57, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a }; static void put_char(SDL_Surface *ts, Uint32 col, int x, int y, char c) { const unsigned char *fptr; int l, i; int bpp = ts->format->BytesPerPixel; if(c >= 0x20 && c <= 0x7f) { fptr = font_ripped_from_sge + (c - 0x20) * FONTHEIGHT; //Point to first byte of the character. for(l = 0; l < FONTHEIGHT; ++l) { int shift = 0x80; for(i = 0; i < FONTWIDTH; i++) { if(!(*fptr & shift)) { Uint8 *p = (Uint8 *)ts->pixels + (y + l) * ts->pitch + (x + i) * bpp; switch(bpp) { case 1: *p = col; break; case 2: *(Uint16 *)p = col; break; case 3: if(SDL_BYTEORDER == SDL_BIG_ENDIAN) { p[0] = (col >> 16) & 0xff; p[1] = (col >> 8) & 0xff; p[2] = col & 0xff; } else { p[0] = col & 0xff; p[1] = (col >> 8) & 0xff; p[2] = (col >> 16) & 0xff; } break; case 4: *(Uint32 *)p = col; break; default: abort(); } } shift >>= 1; } ++fptr; } } } static void center_text(SDL_Surface *ts, Uint32 col, int y, const char *cptr) { int i; size_t slen = strlen(cptr); int x = (ts->w - slen * FONTWIDTH) / 2; for(i = 0; i < slen; ++i) { put_char(ts, col, x, y, *cptr++); x += FONTWIDTH; } } static int do_delay() { SDL_Event event; int i; int button = -1; for(i = 0; button == -1 && i < 15; ++i) { while(SDL_PollEvent(&event) == 1) { switch(event.type) { case SDL_QUIT: abort(); break; case SDL_MOUSEBUTTONDOWN: //case SDL_MOUSEBUTTONUP: button = event.button.button; break; case SDL_KEYDOWN: case SDL_KEYUP: if(event.key.keysym.sym == SDLK_ESCAPE) button = 1; break; default: break; } } SDL_Delay(100); } return button; } int guru_display_lowlevel(SDL_Surface *ts, unsigned short flags, const char **atext0) { int i, button; Uint32 fg_col; Uint32 black = SDL_MapRGB(ts->format, 0xb, 0, 0); int borderflag = 0; int lines = 0; const int border = 6; const char **txtptr = atext0; int max_border_flashes = 19; //Flash border that many times before continuing... while(*(txtptr++) != NULL) lines++; switch(flags & 0x03) { case 0: fg_col = SDL_MapRGB(ts->format, 0xef, 0xed, 0x3); break; case 2: fg_col = SDL_MapRGB(ts->format, 0xb, 0xfb, 0x3); break; case 3: fg_col = SDL_MapRGB(ts->format, 0x63, 0x6b, 0xfb); break; default: //Red on all other occasions. Mostly to make the compiler happy... fg_col = SDL_MapRGB(ts->format, 0xfb, 0xb, 0x3); break; } do { int y = 20; SDL_Rect rect = { 0, 0, ts->w, y + FONTHEIGHT * (lines + 1) }; borderflag = ~borderflag; if(borderflag) { SDL_FillRect(ts, &rect, fg_col); rect.x += border; rect.y += border; rect.w -= 2 * border; rect.h -= 2 * border; } SDL_FillRect(ts, &rect, black); SDL_LockSurface(ts); for(i = 0; i < lines; ++i) { center_text(ts, fg_col, y, atext0[i]); y += FONTHEIGHT; } SDL_UnlockSurface(ts); SDL_Flip(ts); button = do_delay(); if(flags & GM_FLAGS_AUTOTIMEOUT && --max_border_flashes < 0) { button = 1; //Left button was pressed... } } while(button == -1); return button; } int guru_display_gp(SDL_Surface *ts, unsigned short flags, Uint32 subsystem, void *address, const char *atext) { int button; int i; char buf[2][80]; /* char tmpbuf[20]; */ const char* cptrs[4] = { buf[0], atext, buf[1], NULL }; sprintf(buf[0], "Software Failure. Press left mouse button to %s.", flags & GM_FLAGS_CHOICE ? "retry, right for abort." : "continue"); i = sprintf(buf[1], "Guru Meditation #%08X.", subsystem); /* sprintf(tmpbuf, "%p", address); */ /* strcpy(buf[1] + i, tmpbuf + 2); */ if(sizeof(void*) > 4) { //TODO: Check for static asserts to do this correctly! i = sprintf(buf[1] + i, "%016lX", (unsigned long int)address); } else { i = sprintf(buf[1] + i, "%08lX", (unsigned long int)address); } button = guru_display_lowlevel(ts, flags, cptrs); return button; } int guru_alert(unsigned short flags, Uint32 subsystem, void *address) { int button; SDL_Surface *ts; ts = SDL_GetVideoSurface(); button = guru_display_gp(ts, flags, subsystem, address, ""); return button; } int guru_meditation(unsigned short flags, Uint32 subsystem, void *address) { int button = guru_alert(flags, subsystem, address); if(button == 3 && (flags & GM_FLAGS_ABORTIFY)) abort(); if(flags & GM_FLAGS_DEADEND) { if(flags & GM_FLAGS_EXIT_VIA_TERM) { raise(SIGTERM); } else { exit(EXIT_FAILURE); } raise(SIGILL); } return button; } int guru_display_alert2(unsigned short flags, const char *file, unsigned long line) { //Guru Meditation @guru_meditation.c:296. return -1; } /* * Guru Meditation 0000:0000:00000000.00000000 oder so... */ rockdodger-1.1.4/rockdodger.icon.64x64.xpm0000644000175000017500000001242313706632107020535 0ustar krawczykkrawczyk/* XPM */ static char * rockdodger_icon_64x64_xpm[] = { "64 64 65 1", " c None", ". c #010200", "+ c #090819", "@ c #070D2E", "# c #03113C", "$ c #0A0C5E", "% c #0B0F4C", "& c #0B0E72", "* c #1B1A10", "= c #361213", "- c #351E00", "; c #8F0503", "> c #A40004", ", c #1B2341", "' c #5A1A02", ") c #252A01", "! c #242631", "~ c #6F1411", "{ c #1E209F", "] c #B10A00", "^ c #2C2E29", "/ c #CA0602", "( c #1D24DC", "_ c #2224CE", ": c #2123F1", "< c #302E96", "[ c #292FC6", "} c #383F00", "| c #6F2B62", "1 c #6C2A83", "2 c #503755", "3 c #403F90", "4 c #42445D", "5 c #464378", "6 c #93374B", "7 c #EF2701", "8 c #78474E", "9 c #575550", "0 c #F83939", "a c #FE2EAA", "b c #F53B5E", "c c #EE4336", "d c #605ECF", "e c #F24146", "f c #8467C0", "g c #887190", "h c #7C79B0", "i c #F46265", "j c #D26D6D", "k c #E6721A", "l c #CA8700", "m c #C18C8C", "n c #F97FCD", "o c #FF858A", "p c #A69EDC", "q c #F9907E", "r c #F89798", "s c #F7A864", "t c #C8B1D4", "u c #F6B728", "v c #FDC0B9", "w c #FBD792", "x c #F7E92B", "y c #FFE4D3", "z c #FEFF82", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "......................... ", "..,$$$$$&&&&&&&&&&&%,!^^^. ", ".,3(__(::::::::::::[3549^. ", ".$[:(((___________((((({59.. ", ".%[(__((((_________((((_{<4!. ", ".#<[[_[_______________(((_5!. ", ".^g3{{3<[((((((_((:(:::::(349.. ", " .*+++++++53<_((:[&#%${{<3499^*.. ", " ........!45{[_[<599433hmm944!..+ ", " ..9!#%,mvyyyvvvyr8##,24!.. ", " ..9jrrrvvyvg,,4rj8@@###@@!+........ ", " .*mrvvvvvvvm@,2rj8@@@####4^-)=====8. ", " .8yvvyvvvqoj888orq62,#@@#2vwzyvrrrv............ ", "..........{dpttttttvvrrrroiiiij6222jwzzsqooorrrrnnnrrrrrm.. ", ".+%@@@@%%#_[dffddddfffffgnieeeei666iuxxsqiiiiooonnnoooooj=~~ ", ".$[{{{{(::((((((::::::(_[16ecc00ceccuxxkceeeccebaaab00000ei;. ", ".4ppppphhhhhhhhhfffdd[(_[d48eeeeeeecuxxkceeeecebaaabeceeeee00. ", ".!4444444!8886666666|111||6~eeeece0cuxxkceeeecebaaabeccc00c07;'*", "..........~;;;>>>>>>>;;]]///c00c0eccuxxkceeeecebaaabeccccc///7>*", " .;]>]>>>>>>>>>>>>>>]0eceeecuxxk//]]]]]]///]]]]>>>]//.. ", " .;>>>>>>>>>>>>>>>>>>cc]cc//luxk/////////////////]/;=. ", " .~;;>>>>>>]>>>>>>>>>>>>////kluk//>>]>>>>>>>>>]]]>]~. ", " ...~;]]>]/]>>>>>>>>>>>]]]kkuuk77.................. ", " ..)-';;;>]]>>>>>>>>>;;]]/7kl*-==. ", " .*})-'~~~>>>>>>>>>>;;;]>;]kl.... ", " ..)))))}}~]//////////77=.... ", " ........)*%%$%%#++=====''''...== ", " **.++@++.)!&&&&&$%%@@@#@+---.... ", ".^94<[[<%@#%$$&&&&&&&&&&&&)). ", ".!4&[___[{&$$$$$$$$$$&&&$,.. ", ".!5{_(((__{&$$$$$$$$$$$%#.. ", ".,5{_(___([{$&&&&&$&$%@**. ", ".^4&[__((:(_{&%@+**)))}*. ", ".*!#%$$$$$$$%@+...****). ", "....................... ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; rockdodger-1.1.4/scroller.c0000644000175000017500000000431313706632107016133 0ustar krawczykkrawczyk#include "scroller.h" #include "SFont.h" #include #define SCROLLER_GAP 45.0 Scroller_t *init_scroller(const char *stext, Sint16 pos, float defspeed, Uint16 visiwidth) { int text_scroller_width; Scroller_t *scroller = calloc(1, sizeof(Scroller_t)); SDL_Surface *surf = NULL; if(scroller) { scroller->position = -((float)visiwidth) - SCROLLER_GAP; scroller->speed = defspeed; scroller->y = pos; text_scroller_width = SFont_wide(stext); #ifdef DEBUG printf("Text scroller surface has a width of %d pixels.\n", text_scroller_width); #endif /* * Just create a surface, no special needs, etc. Therefore we use * a simple 2-bit surface, give it a colorkey for transparency and * convert it to the display format. */ if((surf = SDL_CreateRGBSurface(SDL_SWSURFACE, text_scroller_width, 36, 2, 0, 0, 0, 0)) != NULL) { SDL_SetColorKey(surf, SDL_SRCCOLORKEY, 0); //Set black (default fill?) to transparent scroller->playfield = SDL_DisplayFormat(surf); //Convert to display format (no problems with rgbamask, etc.) if(scroller->playfield == NULL) goto on_error; SDL_FreeSurface(surf); surf = NULL; PutString(scroller->playfield, 0, 0, stext); } else goto on_error; } return scroller; on_error: if(surf != NULL) SDL_FreeSurface(surf); if(scroller != NULL) free(scroller); return NULL; } void destroy_scroller(Scroller_t *scroller) { SDL_FreeSurface(scroller->playfield); free(scroller); } void update_and_draw_scroller(Scroller_t *scroller, SDL_Surface *target, float speed) { SDL_Rect r = { 0, scroller->y, 0, 0 }; assert(scroller != NULL); assert(target != NULL); scroller->position += scroller->speed * speed; if(scroller->position <= -target->w) { } else if(scroller->position <= 0) { r.w = target->w + scroller->position; r.x = -scroller->position; SDL_BlitSurface(scroller->playfield, NULL, target, &r); } else if(scroller->position > scroller->playfield->w){ scroller->position = -target->w - SCROLLER_GAP; } else { SDL_Rect src = { scroller->position, 0, target->w, scroller->playfield->h }; r.w = target->w; r.x = 0; SDL_BlitSurface(scroller->playfield, &src, target, &r); } } rockdodger-1.1.4/spacerocks.xpm0000644000175000017500000002065213706632107017031 0ustar krawczykkrawczyk/* XPM */ static char * spacerocks_xpm[] = { "44 24 397 2", " c None", ". c #000000", "+ c #383869", "@ c #1D1DA3", "# c #1D1DA1", "$ c #2121B7", "% c #2424C7", "& c #2525CE", "* c #2525CF", "= c #2626CF", "- c #2727CC", "; c #2727CA", "> c #2E2EA7", ", c #39396B", "' c #42425D", ") c #434348", "! c #24249E", "~ c #2626D1", "{ c #2626D0", "] c #2424C5", "^ c #2525BB", "/ c #343493", "( c #414160", "_ c #2A2A8C", ": c #2121B5", "< c #2323C0", "[ c #2424C6", "} c #2525CD", "| c #2E2EAB", "1 c #42425B", "2 c #404055", "3 c #262677", "4 c #1B1B87", "5 c #29297E", "6 c #2A2A95", "7 c #2828B6", "8 c #2828C0", "9 c #2525C3", "0 c #2525CB", "a c #2323C1", "b c #2020B2", "c c #3E3E63", "d c #474747", "e c #3E3E68", "f c #353583", "g c #2222BD", "h c #2525CC", "i c #2323C3", "j c #1F1F77", "k c #3D3D58", "l c #3B3B69", "m c #353592", "n c #443FA0", "o c #746597", "p c #736F78", "q c #494D57", "r c #353942", "s c #43434A", "t c #3A3A67", "u c #38387F", "v c #5F4E7C", "w c #D9939A", "x c #FEC2C2", "y c #F3BEC0", "z c #B99099", "A c #B9949E", "B c #F29FA0", "C c #B8717B", "D c #222141", "E c #161B3D", "F c #2B2846", "G c #1F2B46", "H c #5D5555", "I c #F09393", "J c #FFACAC", "K c #FEB7B7", "L c #FFC6C6", "M c #C098A1", "N c #303250", "O c #30314F", "P c #BF737C", "Q c #B86E78", "R c #13193C", "S c #001035", "T c #011035", "U c #081538", "V c #2A303E", "W c #E8A9BA", "X c #EEB6C4", "Y c #F2C6D0", "Z c #F7B7BD", "` c #FEBBBC", " . c #FF9B9B", ".. c #E48387", "+. c #855365", "@. c #845264", "#. c #E07E82", "$. c #EB7E7F", "%. c #9E5663", "&. c #432D48", "*. c #171A3B", "=. c #021136", "-. c #031136", ";. c #604557", ">. c #EFC089", ",. c #EFC372", "'. c #EE9888", "). c #E08383", "!. c #D27B7B", "~. c #DC8282", "{. c #3F3FCE", "]. c #9488DD", "^. c #BAACE4", "/. c #B4A5E2", "(. c #B497D1", "_. c #9B7BB8", ":. c #CC95BC", "<. c #D592B0", "[. c #CA859F", "}. c #CF819A", "|. c #E47784", "1. c #EE6466", "2. c #EE5B5B", "3. c #E85657", "4. c #BC4C54", "5. c #703548", "6. c #6F394D", "7. c #CF8263", "8. c #FAE26D", "9. c #FDE672", "0. c #F8A17B", "a. c #F57E7E", "b. c #F37777", "c. c #F67F7F", "d. c #FA8A8A", "e. c #FD8DA1", "f. c #FD86C8", "g. c #FC78C2", "h. c #F8869B", "i. c #FD9090", "j. c #FF9191", "k. c #E08888", "l. c #19197E", "m. c #1A1A7D", "n. c #1E1E7D", "o. c #282889", "p. c #3131C2", "q. c #3535CD", "r. c #3333CA", "s. c #3232C9", "t. c #3232C5", "u. c #2E2EC9", "v. c #2828CF", "w. c #2424D3", "x. c #2C2CD1", "y. c #2F2FC6", "z. c #2D2CAC", "A. c #8A4194", "B. c #CC4351", "C. c #DD4343", "D. c #EC4444", "E. c #ED4949", "F. c #E84B4B", "G. c #E94D4D", "H. c #EE7543", "I. c #FBD637", "J. c #FBD639", "K. c #F07846", "L. c #EC4D4D", "M. c #ED4C4C", "N. c #EE4B4B", "O. c #EE4F4F", "P. c #F24A6B", "Q. c #FC3EA9", "R. c #FC40AA", "S. c #F44466", "T. c #F24343", "U. c #F24242", "V. c #F14141", "W. c #F24141", "X. c #6A6AA1", "Y. c #6D6D9F", "Z. c #6E6E9E", "`. c #717199", " + c #676799", ".+ c #68689A", "++ c #656290", "@+ c #725A8A", "#+ c #7C5182", "$+ c #7F558C", "%+ c #764E98", "&+ c #6C4FA0", "*+ c #6548A7", "=+ c #4F43BF", "-+ c #413CCB", ";+ c #4938B8", ">+ c #5C4394", ",+ c #5F3A43", "'+ c #CF4040", ")+ c #E94141", "!+ c #ED4141", "~+ c #EF4141", "{+ c #F2693D", "]+ c #FACA31", "^+ c #F1693D", "/+ c #ED4242", "(+ c #EE4141", "_+ c #F33D61", ":+ c #FC33A7", "<+ c #F43D61", "[+ c #F14140", "}+ c #EF3E3C", "|+ c #EB3A35", "1+ c #732222", "2+ c #790F0F", "3+ c #900909", "4+ c #9A0707", "5+ c #9B0606", "6+ c #970A0A", "7+ c #95080C", "8+ c #860A1A", "9+ c #860C1E", "0+ c #9D0C1A", "a+ c #AE1216", "b+ c #B31919", "c+ c #DD3737", "d+ c #F04141", "e+ c #F4763C", "f+ c #FDDE35", "g+ c #F5763D", "h+ c #EC4141", "i+ c #F43D60", "j+ c #F93198", "k+ c #F62F8F", "l+ c #EE3856", "m+ c #E53B37", "n+ c #E13831", "o+ c #E6372F", "p+ c #E23228", "q+ c #D52819", "r+ c #C21C0D", "s+ c #1B1700", "t+ c #8F0202", "u+ c #9B0202", "v+ c #9F0202", "w+ c #A20202", "x+ c #A00303", "y+ c #A10303", "z+ c #BE1919", "A+ c #E93A3A", "B+ c #E53737", "C+ c #EF3F3F", "D+ c #EF4040", "E+ c #F06B35", "F+ c #EEC621", "G+ c #E7BF18", "H+ c #D85311", "I+ c #C61F0B", "J+ c #B71E09", "K+ c #BF1D0D", "L+ c #C01A0E", "M+ c #BE1413", "N+ c #C40B14", "O+ c #C60A13", "P+ c #BB110D", "Q+ c #B71606", "R+ c #B91905", "S+ c #AE1A03", "T+ c #AB1402", "U+ c #B11102", "V+ c #A60601", "W+ c #720000", "X+ c #890101", "Y+ c #A30303", "Z+ c #A20404", "`+ c #A30404", " @ c #B91616", ".@ c #B71313", "+@ c #CD2116", "@@ c #CB1F0B", "#@ c #CC4003", "$@ c #D38D00", "%@ c #D59500", "&@ c #CA3E00", "*@ c #B71000", "=@ c #AF0B00", "-@ c #AD0A00", ";@ c #A40500", ">@ c #A30400", ",@ c #A30300", "'@ c #A40400", ")@ c #A50500", "!@ c #AA0700", "~@ c #AC0800", "{@ c #A30500", "]@ c #2A0000", "^@ c #740303", "/@ c #980303", "(@ c #9E0202", "_@ c #B40303", ":@ c #A20303", "<@ c #A30505", "[@ c #A00404", "}@ c #AF0A00", "|@ c #B61702", "1@ c #CC4E03", "2@ c #D28300", "3@ c #D28700", "4@ c #C24200", "5@ c #A40900", "6@ c #2D2D00", "7@ c #302000", "8@ c #5E0803", "9@ c #820A0A", "0@ c #890707", "a@ c #9E0303", "b@ c #950202", "c@ c #840000", "d@ c #A30401", "e@ c #AE1303", "f@ c #C93E03", "g@ c #202003", "h@ c #1D1C0B", "i@ c #221C09", "j@ c #282001", "k@ c #3B2710", "l@ c #640B0A", "m@ c #9B0505", "n@ c #990303", "o@ c #A20808", "p@ c #A00505", "q@ c #A10707", "r@ c #A00606", "s@ c #950505", "t@ c #9E0707", "u@ c #990B01", "v@ c #232302", "w@ c #0F0F53", "x@ c #0A0A5A", "y@ c #0B0B5D", "z@ c #0A0A57", "A@ c #080837", "B@ c #151434", "C@ c #1D1522", "D@ c #211226", "E@ c #21132D", "F@ c #39170A", "G@ c #441C05", "H@ c #451C02", "I@ c #46464A", "J@ c #343462", "K@ c #272796", "L@ c #252599", "M@ c #191964", "N@ c #0D0D3D", "O@ c #0A0A3A", "P@ c #0A0A54", "Q@ c #0B0B62", "R@ c #0C0C63", "S@ c #0C0C62", "T@ c #0C0C61", "U@ c #070745", "V@ c #252501", "W@ c #3B3B5C", "X@ c #181886", "Y@ c #2424C8", "Z@ c #2222C2", "`@ c #1C1CA7", " # c #101071", ".# c #0B0B5E", "+# c #080851", "@# c #090952", "## c #18182B", "$# c #313161", "%# c #1C1C9A", "&# c #2525C9", "*# c #191998", "=# c #0D0D68", "-# c #0D0D66", ";# c #08084E", "># c #0A0A56", ",# c #09092D", "'# c #1E1E16", ")# c #404050", "!# c #1A1A6E", "~# c #1D1D9D", "{# c #1E1EA7", "]# c #2222BC", "^# c #2222BA", "/# c #131380", "(# c #080849", "_# c #000021", ":# c #10101E", "<# c #17170D", "[# c #1C1C05", "}# c #212100", "|# c #2B2B00", ". . . . . . . . . . . . . . . . . ", ". + @ # $ % & & * = = - ; > , ' ) . ", ". ! = = ~ ~ ~ ~ ~ ~ ~ { { = ] ^ / ( . ", ". _ : < [ { { = { & } { { ~ ~ { } | 1 . ", ". 2 3 4 5 6 7 8 9 { { ~ 0 a ] = = b c d . ", " . . . . . . e f g h i j k l m n o p q r . . ", " . s t u v w x y z A B C D E F G . . ", " . H I J J K L M N O P Q R S T S U V . . . . . . ", " . W X Y Z ` ...+.@.#.$.%.&.*.=.-.;.>.,.'.).!.~.. . . . . . . . ", ". . . . . . . {.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.7.8.9.0.a.b.c.d.e.f.g.h.i.j.k.. . ", ". l.m.n.o.p.q.r.s.t.u.v.~ w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.V.. ", ". X.Y.Z.`. +.+++@+#+$+%+&+*+=+-+;+>+,+'+)+)+!+~+{+]+]+^+~+/+/+(+_+:+:+<+V.W.W.[+}+|+. ", ". . . . . . . 1+2+3+4+5+6+7+8+9+0+a+b+c+d+d+W.W.e+f+f+g+~+d+h+V.i+j+k+l+m+n+o+p+q+r+r+s+", " . t+u+v+v+v+v+v+w+w+x+y+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+. ", " . W+X+u+v+v+v+Y+w+Z+`+x+x+Z+ @.@+@@@#@$@%@&@*@=@-@;@>@,@'@>@)@!@~@'@{@. ", " . ]@^@/@(@v+_@:@y+y+:@<@y+[@`+}@|@1@2@3@4@5@. . . . . . . . . . . . ", " . 6@7@8@9@0@`+v+a@y+x+<@Z+b@c@d@e@f@2@. . . ", " . g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@. . . ", " . . . . . . v@w@x@y@z@A@B@C@D@E@F@G@H@. . . ", ". I@J@K@L@M@N@O@P@Q@R@R@S@R@T@S@S@U@V@. ", ". W@X@Y@h Z@`@ #R@.#x@+#@#T@T@S@.###. ", ". $#%#} Y@Y@&#*#=#-#R@y@;#>#U@,#'#. ", ". )#!#~#{#]#^#b /#(#_#:#<#[#}#|#. ", ". . . . . . . . . . . . . . . . "}; rockdodger-1.1.4/sparkles.h0000644000175000017500000000546213706632107016145 0ustar krawczykkrawczyk#ifndef __BANGDOTS_H__2010 #define __BANGDOTS_H__2010 #include "config.h" #include "u-iff.h" /*! \brief A list of colours * * Remember that the colour-list length is one less than the actual * number of elements. See the get_life_colour() function for further * information. */ typedef struct Sparkle_life_colours { SDL_Color *clist; //!< colour list if multiple colours unsigned cl_len; //!< length of colour list excluding the last duplicated element } sparkle_life_colours_t; /*! \brief sparkles for the "particle engine" * * Sparkles can have a single colour or may change colour. The colour * is chosen from a list. */ typedef struct Sparkle { float x; //!< X-position float y; //!< Y-position float dx; //!< delta X float dy; //!< delta Y float life; //!< When reduced to 0, kill float decay; //!< Amount by which to reduce life each time dot is drawn union { RD_VIDEO_TYPE col; //!< colour if a single colour is used struct { sparkle_life_colours_t *fading; //!< fading colours Uint32 oldfadecol; //!< we save the last generated colour here for testing if pixel was overwritten }; }; unsigned short spty; //!< sparcle type } sparkle_t; extern sparkle_life_colours_t hot_colours; extern sparkle_life_colours_t cool_colours; Uint32 get_life_colour(float life, sparkle_life_colours_t *fcols, SDL_Surface *surf); /*! \brief initialise sparkles engine * * Initialises the engine, the information about parameters and colours * is read from the file with filename datafn. * * \param iff iff context (call by value!) * \return NULL on error */ sparkle_t *init_sparkles(uiff_ctx_t iff); /*! \brief Create bangdots * * Bangdots are used for explosions etc. */ void makebangdots(int xbang, int ybang, int xvel, int yvel, SDL_Surface * s, int power, int amtdots); /*! \brief Draw the sparkles (bangdots (explosion), plume dots, etc.) * * \param surf Surface to draw on. */ void draw_sparkles(SDL_Surface *surf); /*! \brief Move and age bangdots. * * This function moves all sparkles and cools them. If they are too * cool or have moved out of the screen they are set to inactive * status. Also all sparkles are inactivated which collide with * something or leave the screen. */ void update_sparkles(SDL_Surface *surf); /*! \brief Reset all sparkles/dots. * * The sparkles/dots are reset so that no more dots are active. */ void reset_sparkles(void); /* \brief Create the icy plumedots * * \param num maximum number of plumedots to create * \param x coordinate of center * \param y coordinate of center * \param heading in which direction do the plumes fly? * \param angle spreading angle of the plumes, 360 is the full circle * \param speed speed of the plumes */ void create_plumedots(int num, short x, short y, short heading, short angle, float speed); #endif rockdodger-1.1.4/sprite.c0000644000175000017500000000224113706632107015612 0ustar krawczykkrawczyk#include "sprite.h" #ifdef DEBUG #include #endif int draw_sprite(struct sprite *sprite, Sint16 x, Sint16 y, SDL_Surface * target, Uint32 now) { static SDL_Rect dest; static SDL_Surface *source; source = get_current_sprite_surface(sprite, now); dest.x = x; dest.y = y; dest.w = source->w; dest.h = source->h; return SDL_BlitSurface(source, NULL, target, &dest); } SDL_Surface *get_current_sprite_surface(struct sprite * sprite, Uint32 now) { return sprite-> surface_ptr[((now - sprite->start_tick) / sprite->speed_divisor) % sprite->surface_count]; } void init_sprite(struct sprite *sprite, SDL_Surface ** surfaces, Uint16 surface_count, Uint16 delay, Uint32 now) { sprite->start_tick = now; sprite->surface_ptr = surfaces; sprite->surface_count = surface_count; sprite->speed_divisor = delay; #ifdef DEBUG printf("init sprite=%p start=$%08X divisor=$%04hx count=$%04hx\n", sprite, sprite->start_tick, sprite->speed_divisor, surface_count); #endif } void init_sprite2(struct sprite *sprite, sdl_surfaces_t *surfaces, Uint16 delay, Uint32 now) { init_sprite(sprite, surfaces->surfaces, surfaces->num_surfaces, delay, now); } rockdodger-1.1.4/highscore_io.h0000644000175000017500000000302013706632107016747 0ustar krawczykkrawczyk#ifndef __HIGHSCORE_IO_H_20101222__ #define __HIGHSCORE_IO_H_20101222__ #define MAXIMUM_HIGH_SCORE_ENTRIES 8 /*! \brief Highscore table structure * * The highscore table consists of the score, a char pointer to the * name of the winner, the level reached and an integer called * "allocated" which is set to 1 if the memory for the name was * allocated, 0 otherwise. */ struct highscore { long score; char *name; int level; int allocated; }; //! high is a an array of highscore structs. extern struct highscore high[MAXIMUM_HIGH_SCORE_ENTRIES]; extern long score; //!< The current score. extern int scorerank; //!< minus one means no scorerank, we are not worthy extern char name_input_buf[]; //!< name input buffer FILE *hs_fopen(const char *mode); void read_high_score_table(); void write_high_score_table(); /*! \brief Increment the score * * Increment the score counter. Currently there is no dependency on * the coordinates. * * \param x x coordinate of the item * \param y y coordinate of the item * \param dscore points to add */ void inc_score(int x, int y, long dscore); /*! \brief clear score * * Clear the score counter and return old score. * * \return old score */ long clear_score(void); /*! \brief handle game over (get lowest highscore, etc.) * * This function read always the high scores from disk (why?) and * updates the scorerank. If there is a scorerank found then the * corresponding entry is freed and replaced by an empty name with the * appropriate score. */ void game_over(); #endif rockdodger-1.1.4/globals.h0000644000175000017500000001443013706632107015737 0ustar krawczykkrawczyk#ifndef __ROCKDODGER_GLOBALS_H__20101222 #define __ROCKDODGER_GLOBALS_H__20101222 #include #include "config.h" #include "spacedots.h" #include "u-iff.h" //! Number of points per yellifish kills #define YELLIFISH_KILL_POINTS 175 //! Number of points per blubat kills #define BLUBAT_KILL_POINTS 125 //! Number of points per greeble kills #define GREEBLE_KILL_POINTS 100 //! Number of points per screen update #define SCORE_INCREMENT_FACTOR 1 //! Size of the bangdots array #define MAX_BANG_DOTS 0x20400 //! Maximum number of stars in the background #define MAX_SPACE_DOTS 0x1000 //! Number of playfields for cicada display #define NUMBER_CICADA_PLAYFIELDS 4 //! Maximum number of engine exhaust dots #define MAX_ENGINE_DOTS 0x2000 //! Maximum number of black points around the ship for collision detection. #define MAX_BLACK_POINTS 150 #define POWERUPDELAY 511 //!< Skip so many frames before we get a new powerup #define MAX_BLUBAT_IMAGES 8 //!< Max number of blubat image files #define MAX_GREEBLES 70 //!< Max number of greeblies #define MAX_ROCKS 120 //!< MaX Rocks visible at once #define MAX_ROCK_IMAGESS 8 //!< Number of rock image files, not number of rocks visible #define MAX_POWERUP_IMAGES 64 //!< Maximum number of powerup images for the animation //! TODO: ??? #define W 100 /* Guru Specific Error Codes / Rockdodger sections */ #define GURU_SEC_bangdots 0x0001 #define GURU_SEC_blubats 0x0002 #define GURU_SEC_datafun 0x0003 #define GURU_SEC_display_subsystem 0x0004 #define GURU_SEC_engine_exhaust 0x0005 #define GURU_SEC_gas_plume 0x0006 #define GURU_SEC_greeblies 0x0007 #define GURU_SEC_guru_meditation 0x0008 #define GURU_SEC_highscore_io 0x0009 #define GURU_SEC_input_functions 0x000A #define GURU_SEC_intro 0x000B #define GURU_SEC_laser 0x000C #define GURU_SEC_main 0x000D #define GURU_SEC_mood_item 0x000E #define GURU_SEC_powerup 0x000F #define GURU_SEC_random_gen 0x0010 #define GURU_SEC_globals 0x0011 #define GURU_SEC_rocks 0x0012 #define GURU_SEC_scroller 0x0013 #define GURU_SEC_SFont 0x0014 #define GURU_SEC_ship 0x0015 #define GURU_SEC_signal_handling 0x0016 #define GURU_SEC_sound 0x0017 #define GURU_SEC_spacedots 0x0018 #define GURU_SEC_sprite 0x0019 #define GURU_SEC_sparkles 0x001A #define GURU_SEC_yellifish 0x001B #define GURU_SEC_infoscreen 0x001C /*! \brief Simple function for updating a surface */ typedef void (*Simple_surface_update_function)(SDL_Surface *); extern char *edition_name; //! Width of the screen extern int xsize; //! Height of the screen extern int ysize; //Surfaces extern SDL_Surface *surf_green_block; //!< Just a green block for highlighting extern SDL_Surface *surf_t_rock; //!< Title element "rock" extern SDL_Surface *surf_t_dodger; //!< Title element "dodgers" /*! \brief screen display surface * * This actually is set in set_video_mode() and can also be get by a * call to SDL_GetVideoSurface(). I do not know how fast this function * call is and if the variable is actually useless... (RPK) */ extern SDL_Surface *surf_screen; /*! \brief pointer to spacedots (background) engine */ extern spacedots_t *current_spacedot_engine; //! Fullscreen? extern unsigned short opt_fullscreen; extern unsigned short opt_cicada_spacedots; //!< use cicada space dots or normal ones? extern unsigned short opt_intro; //!< should the intro be displayed? /*! \brief Speed of the game * * This is set to number of ticks since last frame divided by 50. A * value of one means we are running at 50 frames per second. If the * game runs slower or faster it can be scaled appropriately. * */ extern float movementrate; extern float level; //!< The current game level. Take care! This is a float! extern float shieldlevel, laserlevel, shieldpulse; extern int initialshield; extern RD_VIDEO_TYPE heatcolor[W * 3]; //! Available game states enum states { TITLE_PAGE, GAME_PLAY, DEAD_PAUSE, GAME_OVER, GAME_PAUSED, HIGH_SCORE_ENTRY, HIGH_SCORE_DISPLAY, DEMO, SETUP, INFO_SCREEN, RESTART_GAME, QUIT_GAME }; extern enum states state; //!< current game state extern float state_timeout; //!< timeout before next game state switch extern float fadetimer; //!< timer for the on and off appearence of the ghostly rock dodger extern Uint32 initticks; //!< set at each start of the gameloop extern Uint32 last_ticks; //!< set at each *end* of the draw function extern Uint32 ticks_since_last; //!< at end of draw function: ticks_since_last = SDL_GetTicks()-last_ticks; extern Uint32 ign_k_utl_ticks; //!< ignore all keys until this tick count has been reached extern int music_volume; //!< the global volume used for playing the music, see sound.c. extern int nships; //!< Number of ships the player has. extern int last_levelup_snd; //!< When was the last sound on level change? extern uiff_ctx_t *iff_ctx; //!< global context for rockdodger iff file /*! \brief clean up global variables * * This will clean up the global variables and bring them into a sane * state. This is necessary if we like to restart the game, etc. */ void cleanup_globals(); /*! \brief update movement rate and tick counters * * This will set the global variables ticks_since_last, last_ticks, * and movementrate. */ void update_movement_rate(); /*! \brief Reinitialise all game parameters for a fresh start. * * \return 0 = OK, 1 = ERROR */ int restart_game(); /*! \brief Setuploop during game * */ void setuploop(); void save_setup(); int load_setup(); /*! \brief Get rockdodger iff file context * * This will open the file fname and create an iff context if this a * rockdodger file. If not it will return NULL. * * \param fname file name to open * \return NULL or pointer to iff context */ uiff_ctx_t *get_iff_rock(const char *fname); /*! \brief Load the edition name from the iff context * * This will load the edition from the parameter file. The context is * passed by value as this is the easiest way to handle changes to the * structure. Remember to free the string. If the edition can not be * loaded "#unknown#" is returned. * * \param iff iff context to load from * \return strdup of edition name */ char *load_edition_name(uiff_ctx_t iff); #endif rockdodger-1.1.4/rocks.c0000644000175000017500000002374313706632107015437 0ustar krawczykkrawczyk#include "rocks.h" #include "sparkles.h" #include "datafun.h" #include "greeblies.h" #include "guru_meditation.h" #include "random_gen.h" #include "globals.h" #include "sound.h" #include #include float rockrate; //!< How many rocks are created per time unit? float rockspeed; //!< How fast are the rocks? float countdown = 0; //!< countdown before next rock creation struct rock_struct rock[MAX_ROCKS]; sdl_surfaces_t *surf_rocks = NULL; //!< All the rocky asteroid surfaces. sdl_surfaces_t *surf_dead_rocks = NULL; //!< All the dead asteroid surfaces. sdl_surfaces_t *surf_lithiumrocks = NULL; //!< All the heavy-duty asteroid surfaces. sdl_surfaces_t *surf_dead_lithiumrocks = NULL; //!< All the dead/hot heavy-duty asteroid surfaces. sdl_surfaces_t *surf_icerocks = NULL; //!< All the ice asteroid surfaces. sdl_surfaces_t *surf_dead_icerocks = NULL; //!< All the dead/hot ice asteroid surfaces. SDL_Surface *get_rock_surface(int rockidx, int hot) { sdl_surfaces_t *surfs; unsigned short imgidx = rock[rockidx].type_number; assert(rock[rockidx].type_class <= 2); switch(rock[rockidx].type_class) { case 2: surfs = hot == 1 ? surf_dead_icerocks : surf_icerocks; break; case 1: surfs = hot == 1 ? surf_dead_lithiumrocks : surf_lithiumrocks; break; default: //Defaults to normal rocks so that the game does (somehow) function. surfs = hot == 1 ? surf_dead_rocks : surf_rocks; break; } if(imgidx >= surfs->num_surfaces) { Uint32 addr = rockidx; if(hot) { addr |= 0x8000; } addr |= (imgidx & 0xFF) << 24; addr |= (surfs->num_surfaces & 0xFF) << 16; guru_meditation(GM_FLAGS_RECOVERY | GM_FLAGS_CHOICE | GM_FLAGS_ABORTIFY, GM_SS_Misc | GM_GE_BadParm | GURU_SEC_rocks, (void *)(unsigned long)addr); imgidx = 0; } return surfs->surfaces[imgidx]; } void heat_rock_up(int rockidx, float mvmt) { struct rock_struct *rptr; float plume_phi; if(rockidx < 0 || rockidx >= MAX_ROCKS) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Misc | GM_GE_BadParm | GURU_SEC_rocks, (void *)(long)rockidx); } rptr = rock + rockidx; rock[rockidx].heat += mvmt / rock[rockidx].heat_capacity; if(rock[rockidx].type_class == 2) { SDL_Surface *image = get_rock_surface(rockidx, 0); float size = (image->w + image->h) / 2.0; create_plumedots(9, rptr->x + image->w / 2, rptr->y + image->h / 2, rptr->plume_angle, 2, 17.27); plume_phi = (rptr->plume_angle + 180) / 360.0 * 2 * M_PI; rptr->xvel += 1.442 * cosf(plume_phi) / size; rptr->yvel += 1.442 * -sinf(plume_phi) / size; } } void create_rock() { // rockspeed current default speed of the rock, modified by a random amount struct rock_struct *rockptr; for(rockptr = rock; rockptr < rock + MAX_ROCKS; ++rockptr) { if(!rockptr->active && (rockptr->greeb == 0 || the_greeblies[rockptr->greeb].landed)) { rockptr->x = (float) xsize; rockptr->y = rnd() * ysize; rockptr->xvel = -(rockspeed) * (1 + rnd()); rockptr->yvel = (rockspeed / 3.0) * (rnd() - 0.5); rockptr->heat = 0; rockptr->active = 1; rockptr->greeb = 0; //TODO: really zero? if(level > 3 && rnd() < 0.0713645) { //Start with third level... rockptr->type_class = 2; rockptr->type_number = random() % surf_icerocks->num_surfaces; rockptr->heat_capacity = 1.0 / 3; rockptr->plume_angle = 360 * rnd(); } else if(level > 5 && rnd() < 0.068073) { //Start with fifth level... rockptr->type_class = 1; rockptr->type_number = random() % surf_lithiumrocks->num_surfaces; rockptr->heat_capacity = 34.0 / 49.0; } else { rockptr->type_class = 0; rockptr->type_number = random() % MAX_ROCK_IMAGESS; rockptr->heat_capacity = 1.0 / 3; } break; //Done with the loop! } } #ifdef DEBUG //printf("create_rock(): rock=%p MAXrock=%p rockptr=%p\n", rock, rock + MAX_ROCKS, rockptr); #endif } static void way_of_the_exploding_rock(struct rock_struct *rockp, int last_rock, SDL_Surface *image, SDL_Surface *surf_screen) { int g; short x, y; rockp->active = 0; play_sound(1 + (int) (rnd() * 3)); switch(rockp->type_class) { case 2: //Ice rocks are different x = rockp->x + image->w / 2; y = rockp->y + image->h / 2; create_plumedots(1659, x, y, 180, 360, 10.9312); create_plumedots(539, x, y, 180, 360, 2.73002); create_plumedots(367, x, y, 90, 109, 4.656); create_plumedots(367, x, y, 270, 109, 4.656); create_plumedots(467, x + rockp->xvel, y + rockp->yvel, 90, 109, 1.7656); create_plumedots(467, x + rockp->xvel, y + rockp->yvel, 270, 109, 1.7656); create_plumedots(426, x - rockp->xvel, y - rockp->yvel, 90, 109, 1.37656); create_plumedots(426, x - rockp->xvel, y - rockp->yvel, 270, 109, 1.37656); break; default: makebangdots(rockp->x, rockp->y, rockp->xvel, rockp->yvel, image, 10, 3); } // If a greeblie was going to this rock if((g = rockp->greeb)) { // ...and had landed, then the greeblie explodes too. if(the_greeblies[g].landed) kill_greeb(g); else { // If the greeblie is not yet landed, then it must now // find another rock to jump to. Choose the last active // rock found. rockp->greeb = 0; rock[last_rock].greeb = g; the_greeblies[g].target_rock_number = last_rock; } } #ifdef DEBUG printf("explode rock: %3ld %9.2e %9.2e %9.2e %9.2e %04X %04X %9.2e %9.2e %04x %04X\n", rockp - rock, rockp->x, rockp->y, rockp->xvel, rockp->yvel, rockp->type_class, rockp->type_number, rockp->heat, rockp->heat_capacity, rockp->greeb, rockp->plume_angle); #endif } void display_rocks(SDL_Surface *surf_screen) { int i; static int last_rock = 1; SDL_Rect dest; dest.w = 0; dest.h = 0; for(i = 0; i < MAX_ROCKS; i++) { struct rock_struct *rcki = &rock[i]; if(rcki->active) { SDL_Surface *image = get_rock_surface(i, 0); if(!rcki->greeb) last_rock = i; dest.x = (int) rcki->x; dest.y = (int) rcki->y; // Draw the rock SDL_BlitSurface(image, NULL, surf_screen, &dest); // Draw the heated part of the rock, in an alpha which reflects the // amount of heat in the rock. if(rcki->heat > 0) { SDL_Surface *deadrock = get_rock_surface(i, 1); SDL_SetAlpha(deadrock, SDL_SRCALPHA, rcki->heat * 255 / image->h); dest.x = (int) rcki->x; // kludge SDL_BlitSurface(deadrock, NULL, surf_screen, &dest); if(rnd() < 0.3) rcki->heat -= movementrate; } // If the rock is heated past a certain point, the water content of // the rock flashes to steam, releasing enough energy to destroy // the rock in spectacular fashion. if(rcki->heat > image->h) { way_of_the_exploding_rock(rcki, last_rock, image, surf_screen); } } // Draw any greeblies attached to (or going to) the rock, whether the rock is active or not. if(rcki->greeb && the_greeblies[rcki->greeb].target_rock_number == i) display_greeb(&the_greeblies[rcki->greeb], surf_screen); } } void update_rocks(void) { int i; for(i = 0; i < MAX_ROCKS; i++) if(rock[i].active) { rock[i].x += rock[i].xvel * movementrate; rock[i].y += rock[i].yvel * movementrate; if(rock[i].x < -52.0) rock[i].active = 0; } } void *init_rocks(void) { int i; sdl_surfaces_t *surfs[] = { surf_rocks, surf_dead_rocks, surf_lithiumrocks, surf_dead_lithiumrocks, surf_icerocks, surf_dead_icerocks, NULL }; sdl_surfaces_t **ptrs; assert(surf_rocks == NULL && surf_dead_rocks == NULL); for(ptrs = surfs; *ptrs != NULL; ++ptrs) { if(!(*ptrs == NULL)) { guru_meditation(GM_FLAGS_RECOVERY | GM_FLAGS_ABORTIFY | GM_FLAGS_CHOICE, GM_SS_BootStrap | GM_GE_BadParm | GURU_SEC_rocks, &init_rocks); } } if((surf_rocks = load_images_ck("rock%hd.bmp", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_rocks, (void*)0x524f434b); } if((surf_dead_rocks = load_images_ck("deadrock%hd.bmp", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_rocks, (void*)~0x524f434b); } if((surf_lithiumrocks = load_images_ck("lithiumrock.%02hX.png", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_rocks, (void*)0x4c495448); } if((surf_dead_lithiumrocks = load_images_ck("deadlithiumrock.%02hX.png", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_rocks, (void*)~0x4c495448); } if((surf_icerocks = load_images_ck("icerock.%02hX.png", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_rocks, (void*)0x494345); } if((surf_dead_icerocks = load_images_ck("deadicerock.%02hX.png", 0, 255, 0)) == NULL) { guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_rocks, (void*)~0x494345); } if(!surf_rocks || !surf_dead_rocks || !surf_lithiumrocks || !surf_dead_lithiumrocks || !surf_icerocks || !surf_dead_icerocks ) { return NULL; } for(ptrs = surfs; *ptrs != NULL; ++ptrs) { assert((*ptrs)->num_surfaces == (*(ptrs + 1))->num_surfaces); if(!((*ptrs)->num_surfaces == (*(ptrs + 1))->num_surfaces)) guru_meditation(GM_FLAGS_RECOVERY | GM_FLAGS_ABORTIFY | GM_FLAGS_CHOICE, GM_SS_Misc | GM_GE_BadParm | GURU_SEC_rocks, *ptrs); ptrs = ptrs + 2; } assert(surf_rocks->num_surfaces >= MAX_ROCK_IMAGESS); for(i = 0; i < MAX_ROCKS; ++i) { rock[i].active = 0; rock[i].greeb = 0; } return surf_rocks; } void reset_rocks(void) { unsigned int i; rockspeed = 5.0 * xsize / 640.0; for(i = 0; i < MAX_ROCKS; i++) rock[i].active = 0; rockrate = 0.0; countdown = 1.111; } void ingame_maybe_rock() { if(state != GAME_PAUSED) { rockspeed = 4.885 * xsize / 640.0 + sqrtf(floorf(level)) / 5.0; rockrate = 0.13182 + sqrtf(floorf(level)) / 18.0; if(level - (int) level < 0.8) { if(state != GAME_PLAY && state != DEMO) { countdown -= 0.3 * movementrate; } else { countdown -= rockrate * movementrate; } while(countdown < 0) { countdown++; create_rock(); } } } } rockdodger-1.1.4/engine_exhaust.c0000644000175000017500000000705013706632107017315 0ustar krawczykkrawczyk#include #include #include "config.h" #include "globals.h" #include "engine_exhaust.h" #include "random_gen.h" #include "ship.h" /* * Rewriting this part to use sparkles is not that easy as the engine * dots do not vanish when they collide with something. Also they * start with a short life. TODO: An idea is needed in order to get a * smooth working version. */ #ifdef DEBUG #include unsigned int max_edots_used = 0; #endif // Structure global variables struct enginedots edot1[MAX_ENGINE_DOTS]; static struct enginedots *edots_begin = edot1; static struct enginedots *edots_end = edot1; void init_engine_dots() { edots_begin = edot1; edots_end = edot1; } void draw_engine_dots(SDL_Surface *s) { struct enginedots edot; struct enginedots *dotptr; struct enginedots *targetptr = edots_begin; int heatindex; RD_VIDEO_TYPE *rawpixel; rawpixel = (RD_VIDEO_TYPE *) s->pixels; for(dotptr = edots_begin; dotptr < edots_end; ++dotptr) { edot = *dotptr; edot.x += edot.dx * movementrate; edot.y += edot.dy * movementrate; if((edot.life -= movementrate * 3) < 0 || edot.y < 0 || edot.y > ysize || edot.x < 0 || edot.x > xsize) { continue; } heatindex = edot.life * 6; rawpixel[(int) (s->pitch / sizeof(RD_VIDEO_TYPE) * (int) (edot.y)) + (int) (edot.x)] = heatindex > 3 * W ? heatcolor[3 * W - 1] : heatcolor[heatindex]; *targetptr++ = edot; } edots_end = targetptr; } void create_engine_dots(int newdots) { unsigned int i; double theta, r, dx, dy; SDL_Surface *surf_ship = get_current_sprite_surface(&ship_sprite, last_ticks); for(i = 0; i < newdots * movementrate; ++i) { if(edots_end - edots_begin >= MAX_ENGINE_DOTS) break; theta = rnd() * M_PI * 2; r = rnd(); dx = cosf(theta) * r; dy = sinf(theta) * r; edots_end->x = shipdata.xship + surf_ship->w / 2 - 14; edots_end->y = shipdata.yship + surf_ship->h / 2 + (rnd() - 0.5) * 5 - 1; edots_end->dx = 10 * (dx - 1.5) + shipdata.xvel; edots_end->dy = 1 * dy + shipdata.yvel; edots_end->life = 45 + rnd() * 5; edots_end++; } #ifdef DEBUG i = edots_end - edots_begin; if(i > max_edots_used) { max_edots_used = i; printf("new: max_edots_used = $%X\n", max_edots_used); } #endif } void create_engine_dots2(int newdots, int m) { int i; double theta, r, dx, dy; SDL_Surface *surf_ship = get_current_sprite_surface(&ship_sprite, last_ticks); // Don't create fresh engine dots when // the game is not being played and a demo is not beng shown if(state != GAME_PLAY && state != DEMO) return; for(i = 0; i < newdots; i++) { if(edots_end - edots_begin >= MAX_ENGINE_DOTS) break; theta = rnd() * M_PI * 2; r = rnd(); dx = cosf(theta) * r; dy = sinf(theta) * r; edots_end->x = shipdata.xship + surf_ship->w / 2 + (rnd() - 0.5) * 1; edots_end->y = shipdata.yship + surf_ship->h / 2 + (rnd() - 0.5) * 1; switch (m) { case 0: edots_end->x -= 14; edots_end->dx = 5 * (dx - 1.5) + shipdata.xvel; edots_end->dy = 1 * dy + shipdata.yvel; break; case 1: edots_end->dy = 5 * (dy - 1.5) + shipdata.yvel; edots_end->dx = 1 * dx + shipdata.xvel; break; case 2: edots_end->x += 14; edots_end->dx = -5 * (dx - 1.5) + shipdata.xvel; edots_end->dy = 1 * dy + shipdata.yvel; break; case 3: edots_end->dy = 5 * (dy + 1.5) + shipdata.yvel; edots_end->dx = 1 * dx + shipdata.xvel; break; } edots_end->life = 45 + rnd() * 20; ++edots_end; } } rockdodger-1.1.4/sound.h0000644000175000017500000000103613706632107015442 0ustar krawczykkrawczyk#ifndef __SOUND_H__ #define __SOUND_H__ #define TUNE_TITLE_PAGE 0 #define TUNE_GAMEPLAY 1 #define TUNE_HIGH_SCORE_ENTRY 2 enum Soundsample_t { SAMPLE_BOOM0, SAMPLE_BOOM1, SAMPLE_BOOM2, SAMPLE_BOOM3, SAMPLE_SPEEDUP, SAMPLE_DRIP, SAMPLE_FART1, SAMPLE_FART2, SAMPLE_FART3, SAMPLE_FART4, SAMPLE_SHOCKWAVE, SAMPLE_XBAD, SAMPLE_ }; extern int sfx_enabled; //!< if equal to one then play sound effects. This is used during demo so that the music is heard. int init_sound(); void play_sound(int i); void play_tune(int i); #endif rockdodger-1.1.4/random_gen.h0000644000175000017500000000074413706632107016430 0ustar krawczykkrawczyk#ifndef __RANDOM_GEN_H__20101222 #define __RANDOM_GEN_H__20101222 /*! Initialise the random number generator for the game */ void initrnd(); /*! Get the next random number * \return next random number */ float rnd(); /*! \brief Get next float from random number generator * * This function actually calls the OS random number generator and * returns its value. It does *not* use the random number array. * * \return random float number */ float rnd_next_float(); #endif rockdodger-1.1.4/input_functions.c0000644000175000017500000000663513706632107017546 0ustar krawczykkrawczyk#include "input_functions.h" #include "game_state.h" #include "globals.h" SDL_Joystick *joysticks[1] = { NULL }; int joystick_flag = 1; Uint32 screenshot_last_ticks = 0; //!< We really need a delay... inputstate_t *get_joystick_input(inputstate_t *inputstate) { SDL_Joystick *joystick; int stick_x, stick_y, button; if(joystick_flag == 1) { joystick = joysticks[0]; stick_x = SDL_JoystickGetAxis(joystick, 0); stick_y = SDL_JoystickGetAxis(joystick, 1); if(stick_x > JOYSTICK_DEADZONE) { inputstate->inputstate[RIGHT] |= 1; } if(stick_x < -JOYSTICK_DEADZONE) { inputstate->inputstate[LEFT] |= 1; } if(stick_y > JOYSTICK_DEADZONE) { inputstate->inputstate[DOWN] |= 1; } if(stick_y < -JOYSTICK_DEADZONE) { inputstate->inputstate[UP] |= 1; } button = SDL_JoystickGetButton(joystick, 0); if(button == 1) { inputstate->inputstate[LASER] |= 1; } button = SDL_JoystickGetButton(joystick, 1); if(button == 1) { inputstate->inputstate[SHIELD] |= 1; } } return inputstate; } void get_keyboard_input(Uint8 *keystate, inputstate_t *inputstate) { //Always update this. if(keystate[SDLK_3]) { if(screenshot_last_ticks < last_ticks) { inputstate->inputstate[SCREENSHOT] |= 1; screenshot_last_ticks = last_ticks + 500; //Half a second delay. } } //Update according to state. switch(state) { case HIGH_SCORE_DISPLAY: case TITLE_PAGE: case DEMO: if(keystate[SDLK_F1]) { //Setup? state = SETUP; } break; case SETUP: if(keystate[SDLK_F1]) { //Setup? state = TITLE_PAGE; } if(keystate[SDLK_RETURN]) { inputstate->inputstate[INPUT_SELECT] |= 1; } case GAME_PLAY: if(keystate[SDLK_UP]) { inputstate->inputstate[UP] |= 1; } if(keystate[SDLK_DOWN]) { inputstate->inputstate[DOWN] |= 1; } if(keystate[SDLK_LEFT]) { inputstate->inputstate[LEFT] |= 1; } if(keystate[SDLK_RIGHT]) { inputstate->inputstate[RIGHT] |= 1; } if(keystate[SDLK_d /*Pandora SDLK_HOME*/]) { inputstate->inputstate[LASER] |= 1; } #ifdef CHEAT if(keystate[SDLK_1]) { inputstate->inputstate[FAST] |= 1; } if(keystate[SDLK_2]) { inputstate->inputstate[NOFAST] |= 1; } #endif if(keystate[SDLK_s /*Pandora SDLK_RSHIFT*/]) { inputstate->inputstate[SHIELD] |= 1; } break; default: break; } #ifndef NDEBUG if(keystate[SDLK_k]) abort(); #endif } Uint8 *input_subsystem(inputstate_t *inputstate) { int i; Uint8 *keystate; for(i = 0; i < NUM_INPUTS; i++) { inputstate->inputstate[i] = 0; } SDL_PumpEvents(); keystate = SDL_GetKeyState(NULL); if((last_ticks += movementrate) < ign_k_utl_ticks) return keystate; get_keyboard_input(keystate, inputstate); #ifdef CHEAT if(keystate[SDLK_5]) { inc_score(0, 0, 10000); level++; } #endif if(keystate[SDLK_q] || keystate[SDLK_ESCAPE]) switch(state) { case HIGH_SCORE_ENTRY: break; case GAME_PLAY: state = GAME_OVER; temporary_disable_key_input(); state_timeout = 96.161802; break; default: state = QUIT_GAME; } if((state == GAME_PLAY || state == GAME_PAUSED) && (keystate[SDLK_PAUSE] || keystate[SDLK_p])) { pausegame(); temporary_disable_key_input(); } return keystate; } void temporary_disable_key_input() { ign_k_utl_ticks = last_ticks + 139; } rockdodger-1.1.4/powerup.c0000644000175000017500000000725313706632107016015 0ustar krawczykkrawczyk#include #include "powerup.h" #include "datafun.h" #include "guru_meditation.h" #include "random_gen.h" #include "globals.h" static struct PowerupInformationForIni { const char *pname; const char *pfilename; short ckr, ckg, ckb; // colour keys } powerupiniinfo[] = { { "NONE", NULL }, { "Laserpowerups", "laserpowerup.%02X.png", 0, 0, 255 }, { "Shieldpowerups", "shieldpowerup.%02X.png", 0, 0, 255 }, { "Lifepowerups", "lifepowerup.%02X.png", 0, 255, 0 } }; /*! \brief array with power surfaces * * Here we store all surfaces for the powerup animations. The order is * the same as the powerup numbers. */ sdl_surfaces_t *surf_powerups[POWERUP_MAXPOWERUP]; /*! \brief powerup state data */ static powerup_t powerup; powerup_types_t get_current_powerup(void) { return powerup.active; } powerup_t *init_powerup() { int ip; struct PowerupInformationForIni *iniptr; for(ip = POWERUP_NONE + 1; ip < POWERUP_MAXPOWERUP; ++ip) { iniptr = powerupiniinfo + ip; printf("%s:\n", iniptr->pname); surf_powerups[ip] = load_images_ck(iniptr->pfilename, iniptr->ckr, iniptr->ckg, iniptr->ckb); if(surf_powerups[ip] == NULL) { #ifndef DEBUG guru_meditation(GM_FLAGS_DEADEND, GM_SS_Graphics | GM_GE_IOError | GURU_SEC_powerup, iniptr); #endif return NULL; } } deactivate_powerup(); #ifdef DEBUG printf("surf_powerups[POWERUP_LASER]=%p surf_powerups[POWERUP_SHIELD]=%p surf_powerups[POWERUP_LIFE]=%p\n", surf_powerups[POWERUP_LASER], surf_powerups[POWERUP_SHIELD], surf_powerups[POWERUP_LIFE]); #endif return &powerup; } void shutdown_powerups() { int ip; deactivate_powerup(); for(ip = POWERUP_NONE + 1; ip < POWERUP_MAXPOWERUP; ++ip) { assert(surf_powerups[ip]); destroy_sdl_surfaces(surf_powerups[ip]); #ifdef DEBUG printf("Free '%s' at %p.\n", powerupiniinfo[ip].pname, surf_powerups[ip]); #endif } } SDL_Surface *get_powerup_surface() { SDL_Surface *source; int pownum; sdl_surfaces_t *surfaces = NULL; pownum = get_current_powerup(); if(pownum <= POWERUP_NONE || pownum >= POWERUP_MAXPOWERUP) { guru_meditation(GM_FLAGS_DEADEND | GM_FLAGS_ABORTIFY, GM_SS_Graphics | GM_GE_BadParm | GURU_SEC_powerup, &get_powerup_surface); assert(0); return NULL; } surfaces = surf_powerups[pownum]; assert(surfaces); source = surfaces->surfaces[(unsigned short)powerup.img_ctr % surfaces->num_surfaces]; assert(source); return source; } void display_powerup(SDL_Surface * surf_screen) { SDL_Rect dest; SDL_Surface *source; dest.w = 0; //powersurf->w; dest.h = 0; //powersurf->h; dest.x = powerup.x; dest.y = powerup.y; source = get_powerup_surface(); SDL_BlitSurface(source, NULL, surf_screen, &dest); } void deactivate_powerup() { powerup.active = POWERUP_NONE; powerup.countdown = POWERUPDELAY; powerup.img_ctr = 0; } void update_powerup() { if(powerup.active != POWERUP_NONE) { SDL_Surface *surf = get_powerup_surface(); powerup.x += powerup.dx * movementrate; powerup.y += powerup.dy * movementrate; if(powerup.x < -surf->w || powerup.y < -surf->h || powerup.x > xsize || powerup.y > ysize) { deactivate_powerup(); } } else { powerup.countdown -= movementrate; if(powerup.countdown < 0 && rnd() < .3) { powerup.x = xsize; powerup.dx = -(3 + rnd() * 5); powerup.dy = .5 + rnd() * 3; if((powerup.y = rnd() * ysize) >= ysize / 2) powerup.dy = -powerup.dy; if(rnd() < 0.051807) { powerup.active = POWERUP_LIFE; } else if(rnd() < .7) { powerup.active = POWERUP_LASER; } else { powerup.active = POWERUP_SHIELD; } assert(powerup.active != POWERUP_NONE); } } powerup.img_ctr += movementrate; } rockdodger-1.1.4/sprite.h0000644000175000017500000000342313706632107015622 0ustar krawczykkrawczyk#ifndef __SPRITE_H__ #define __SPRITE_H__ #include #include "datafun.h" /*! \brief Simple sprite struct */ struct sprite { Uint32 start_tick; SDL_Surface **surface_ptr; Uint16 surface_count; Uint16 speed_divisor; }; /*! \brief Draw a sprite * * It will draw a sprite while animating it. * * \param sprite pointer to a sprite struct * \param x x-position * \param y y-position * \param target target surface * \param now return from SDL_GetTicks, used for selecting the frame * \return return value of SDL_BlitSurface */ int draw_sprite(struct sprite *sprite, Sint16 x, Sint16 y, SDL_Surface * target, Uint32 now); /*! \brief get current image * \param sprite sprite pointer * \param now return from SDL_GetTicks * \return the current surface */ SDL_Surface *get_current_sprite_surface(struct sprite *sprite, Uint32 now); /*! \brief Initialise a sprite struct * * \param sprite pointer to a sprite * \param surfaces pointer to an array of surfaces * \param surface_count number of surfaces in this array * \param delay delay in ms for each frame * \param now return from SDL_GetTicks */ void init_sprite(struct sprite *sprite, SDL_Surface ** surfaces, Uint16 surface_count, Uint16 delay, Uint32 now); /*! \brief Initialise a sprite struct * * This function uses the surfaces as given by an sdl_surfaces_t * struct. This function was introduced as loading the surfaces and * using them for a sprite happen quite often. * * \param sprite pointer to a sprite * \param surfaces pointer to an array of surfaces * \param surface_count number of surfaces in this array * \param delay delay in ms for each frame * \param now return from SDL_GetTicks */ void init_sprite2(struct sprite *sprite, sdl_surfaces_t *surfaces, Uint16 delay, Uint32 now); #endif rockdodger-1.1.4/yellifish.c0000644000175000017500000002614613706632107016306 0ustar krawczykkrawczyk#include "yellifish.h" #include #include #include "guru_meditation.h" #include "SFont.h" #include "globals.h" #include "random_gen.h" #include "datafun.h" #include "sparkles.h" #include "sound.h" static sdl_surfaces_t *yellifish_tentacles; static sdl_surfaces_t *yellifish_head; static SDL_Surface *yellifish_head_explosion_map; /*! \brief load yellifish parameter from IFF file * * The data is stored in the FORM.ROCK YLLI chunk. The chunk has the * following structure: * * 0000 UWORD minimum level before yellifish appear * 0002 ULONG yellifish probability * 2^32 * 0006 UWORD yellifish modulo, if level modulo this value is zero then no yellifish appear * 0008 UWORD x-distance in pixel before yellifish attack * 000A UWORD minimum tentacle length in pixel * 000C UWORD maximum tentacle length in pixel * 000E ULONG delta velocity * 2^32, e.g. 1173957729 = 0.2733333336655 * 0012 ULONG maximum velocity / 16 * 2^32 * 0016 UWORD head X-offset * 0018 UWORD head Y-offset * * \param yelli pointer to yellifish subsystem structure * \param iff iff context * \return NULL on error */ static yellifishsubsystem_t *load_yellifish_parameter(yellifishsubsystem_t *yelli, uiff_ctx_t iff) { int32_t chunksize; double d; chunksize = uiff_find_chunk_wflags(&iff, MakeID('Y', 'L', 'L', 'I'), IFF_FIND_REWIND); assert(printf("FORM.ROCK YLLI size = $%08X\n", chunksize)); if(chunksize >= 26) { //Chunk found and is big enough. yelli->minimum_level = read16(iff.f); d = read32(iff.f); yelli->yelliprobability = d / UINT32_MAX; yelli->level_modulo = read16(iff.f); assert(printf("\tyelli->minimum_level=%d yelli->yelliprobability=%e yelli->level_modulo=%d\n", yelli->minimum_level, yelli->yelliprobability, yelli->level_modulo)); yelli->attack_distance = read16(iff.f); yelli->minimum_length = read16(iff.f); yelli->maximum_length = read16(iff.f); d = read32(iff.f); yelli->delta_velocity = d / UINT32_MAX; d = read32(iff.f); yelli->maximum_velocity = d * 16 / UINT32_MAX; assert(printf("\tyelli->delta_velocity=%e, yelli->maximum_velocity=%e\n", yelli->delta_velocity, yelli->maximum_velocity)); yelli->headoffsetx = read16(iff.f); yelli->headoffsety = read16(iff.f); assert(printf("\tyelli->headoffsetx=%hd, headoffsety=%d\n", yelli->headoffsetx, yelli->headoffsety)); } else { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_yellifish | GM_SS_BootStrap | GM_GE_OpenRes, &load_yellifish_parameter); return NULL; } return yelli; } yellifishsubsystem_t *init_yellifish_subsystem(uiff_ctx_t iff) { yellifishsubsystem_t *yellifish_data_struct = NULL; yellifish_data_struct = calloc(1, sizeof(struct Yellifishsubsystem)); if(!yellifish_data_struct) { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_yellifish | GM_SS_BootStrap | GM_GE_NoMemory, &init_yellifish_subsystem); } else { yellifish_tentacles = load_images_ck("yellifishtentacle.%02hX.png", 0xFF, 0xFF, 0xFF); #ifndef NDEBUG printf("yellifisch_tentacles = %p\n", yellifish_tentacles); #endif if(!yellifish_tentacles) { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_yellifish | GM_SS_Graphics | GM_GE_OpenRes, &yellifish_tentacles); } else { yellifish_head = load_images_no_convert("yellifish.%02hX.png", -1, -1, -1); #ifndef NDEBUG printf("yellifish_head = %p\n", yellifish_head); #endif if(!yellifish_head) { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_yellifish | GM_SS_Graphics | GM_GE_OpenRes, &yellifish_head); } yellifish_head_explosion_map = load_image("yellifish.explosion_map.png", 0, 0xFF, 0); if(!yellifish_head_explosion_map) { guru_alert(GM_FLAGS_DEADEND, GURU_SEC_yellifish | GM_SS_Graphics | GM_GE_OpenRes, &yellifish_head_explosion_map); } } } return load_yellifish_parameter(yellifish_data_struct, iff); } void shutdown_yellifish_subsystem(yellifishsubsystem_t *yellifishs) { if(!yellifishs || !yellifish_tentacles || !yellifish_head || !yellifish_head_explosion_map) { if(guru_alert(GM_FLAGS_RECOVERY | GM_FLAGS_CHOICE, GURU_SEC_yellifish | GM_SS_RAM | GM_GE_BadParm, &shutdown_yellifish_subsystem) != 1) return; } #ifndef NDEBUG printf("Freeing yellifish=%p, yellifish_tentacles=%p, yellifish_head=%p.\n", yellifishs, yellifish_tentacles, yellifish_head); #endif free(yellifishs); destroy_sdl_surfaces(yellifish_tentacles); destroy_sdl_surfaces(yellifish_head); SDL_FreeSurface(yellifish_head_explosion_map); } void init_yellifish(yellifishsubsystem_t *ysys, yellifish_t *yelli, int posx, int posy) { int i, j; float spd; assert(yelli != NULL); memset(yelli, 0, sizeof(struct Yellifish)); yelli->length = ysys->minimum_length; yelli->posx = posx; yelli->posy = posy; for(j = 0; j < YELLIFISH_TENTACLENO; ++j) { spd = rnd_next_float() * 2.1039 + 0.67779; if(rnd_next_float() < 0.41221221) spd *= -1; yelli->tspeed[j] = spd; for(i = 0; i < YELLIFISH_TENTACLESEGMENTS; ++i) { yelli->tentacleparts[j][i] = rnd_next_float() * yellifish_tentacles->num_surfaces; //printf("yelli->tentacleparts[%d][%d] = %d\n", j, i, (int)(yelli->tentacleparts[j][i])); } } yelli->active = 1; init_sprite2(&yelli->ysprite, yellifish_head, 217, last_ticks); } static SDL_Surface *yellifish_get_tentacle_surface(yellifish_t *yelli, int tentaclenum, int tentaclepart) { return yellifish_tentacles->surfaces[yelli->tentacleparts[tentaclenum][tentaclepart % YELLIFISH_TENTACLESEGMENTS]]; } static SDL_Surface *yellifish_get_current_tentacle_surface(yellifish_t *yelli, int tentaclenum) { return yellifish_get_tentacle_surface(yelli, tentaclenum, yelli->partoffset[tentaclenum]); } yellifish_t *maybe_activate_yellifish(yellifishsubsystem_t *yelli, int level, int x, int y) { if((level > yelli->minimum_level) && (level % yelli->level_modulo != 0) && (rnd() < yelli->yelliprobability * movementrate)) { /*1.81117733e-3*/ return activate_yellifish(yelli, x, y); } return NULL; } yellifish_t *activate_yellifish(yellifishsubsystem_t *yelli, int x, int y) { yellifish_t *yptr = yelli->yellifishs; yellifish_t *yend = yptr + YELLIFISH_MAXNUM; while(yptr < yend) { if(!yptr->active) { init_yellifish(yelli, yptr, x, y); #ifndef NDEBUG printf("yptr=%p (%d,%d)\n", yptr, x, y); #endif return yptr; } ++yptr; } return NULL; } void display_yellifishs(yellifishsubsystem_t *yelli, SDL_Surface *surf_screen) { yellifish_t *yptr = yelli->yellifishs; yellifish_t *yend = yptr + YELLIFISH_MAXNUM; while(yptr < yend) { if(yptr->active) display_yellifish(yelli, yptr, surf_screen); ++yptr; } } void display_yellifish(yellifishsubsystem_t *ysys, yellifish_t *yelli, SDL_Surface *surf_screen) { SDL_Rect src; SDL_Surface *yellisurf; int day_of_the_tentacle; //Number of the current tentacle SDL_Rect dest; src.x = 0; src.w = 16; for(day_of_the_tentacle = 0; day_of_the_tentacle < YELLIFISH_TENTACLENO; ++day_of_the_tentacle) { float length = yelli->length; float offset = yelli->offset[day_of_the_tentacle]; int tentaclepart = yelli->partoffset[day_of_the_tentacle]; float posx = yelli->posx; float posy = yelli->posy; while(length > 0) { src.y = offset; src.h = length; yellisurf = yellifish_get_tentacle_surface(yelli, day_of_the_tentacle, tentaclepart); dest.x = posx; dest.y = posy; SDL_BlitSurface(yellisurf, &src, surf_screen, &dest); posy += yellisurf->h - offset; length -= yellisurf->h - offset; offset = 0; tentaclepart++; } yelli->offset[day_of_the_tentacle] += yelli->tspeed[day_of_the_tentacle] * movementrate; if(yelli->offset[day_of_the_tentacle] >= yellifish_get_current_tentacle_surface(yelli, day_of_the_tentacle)->h) { yelli->offset[day_of_the_tentacle] -= yellifish_get_current_tentacle_surface(yelli, day_of_the_tentacle)->h; yelli->partoffset[day_of_the_tentacle]++; } else if(yelli->offset[day_of_the_tentacle] < 0) { --yelli->partoffset[day_of_the_tentacle]; yelli->offset[day_of_the_tentacle] += yellifish_get_current_tentacle_surface(yelli, day_of_the_tentacle)->h; } } draw_sprite(&yelli->ysprite, yelli->posx - ysys->headoffsetx, yelli->posy - ysys->headoffsety, surf_screen, last_ticks); } void update_yellifishs(yellifishsubsystem_t *yelli, float preyx, float preyy) { yellifish_t *yptr = yelli->yellifishs; yellifish_t *yend = yptr + YELLIFISH_MAXNUM; #ifdef DEBUG //char buf[80]; #endif while(yptr < yend) { if(yptr->active > 0) { yptr->posx += yptr->velx * movementrate; if(yptr->posx < preyx) yptr->velx += yelli->delta_velocity * movementrate; else if(yptr->posx > preyx) yptr->velx -= yelli->delta_velocity * movementrate; if(yptr->velx > yelli->maximum_velocity) yptr->velx *= .892444; yptr->posy += yptr->vely * movementrate; if(yptr->posy < preyy) yptr->vely += yelli->delta_velocity; else if(yptr->posy > preyy) yptr->vely -= yelli->delta_velocity; if(yptr->vely > yelli->maximum_velocity) yptr->vely *= .892444; switch(yptr->tentacle_active) { case 1: yptr->length += movementrate * 4.141; if(yptr->length > yelli->maximum_length) { yptr->tentacle_active = -1; } break; case -1: yptr->length -= movementrate * 4.171; if(yptr->length < yelli->minimum_length) { yptr->length = yelli->minimum_length; yptr->tentacle_active = 0; } break; case 0: if(fabsf(yptr->posx - preyx) < yelli->attack_distance) { yptr->tentacle_active = 1; play_sound(10); } break; default: guru_alert(GM_FLAGS_RECOVERY, GURU_SEC_yellifish | GM_SS_Misc | GURU_SEC_yellifish | GM_GE_BadParm, &update_yellifishs); } } else if(yptr->active < 0) { yptr->vely += yelli->delta_velocity * 2; yptr->posx += yptr->velx * movementrate; yptr->posy += yptr->vely * movementrate; //yptr->velx *= .9589131313; yptr->length *= .9589131313; if(yptr->posy > ysize) yptr->active = 0; } yptr++; } #ifdef DEBUG //yptr = yelli->yellifishs; /* snprintf(buf, sizeof(buf), "%f %f, %f %f", yptr->posx, yptr->posy, yptr->velx, yptr->vely); */ //printf("%14.7e %14.7e, %14.7e %14.7e\n", yptr->posx, yptr->posy, yptr->velx, yptr->vely); /* PutString(surf_screen, 10, 480, buf); */ /* SDL_Flip(surf_screen); */ #endif } yellifish_t *check_yellifish_hit(yellifishsubsystem_t *yelli, float minlaserx, float maxlaserx, float lasery) { yellifish_t *yptr; for(yptr = yelli->yellifishs; yptr < yelli->yellifishs + YELLIFISH_MAXNUM; ++yptr) { if(yptr->active > 0) { if((minlaserx < yptr->posx && yptr->posx < maxlaserx) && (lasery >= yptr->posy && lasery < yptr->posy + yellifish_head->surfaces[0]->h)) { yptr->active = -1; return yptr; } } } return NULL; } void kill_yellifish(yellifish_t *yptr) { #ifdef DEBUG printf("killing yptr=%p\n", yptr); #endif assert(yellifish_head_explosion_map); makebangdots(yptr->posx - 4, yptr->posy - 8, yptr->velx, yptr->vely, yellifish_head_explosion_map, 39, 1); play_sound(11); } void deactivate_all_yellifish(yellifishsubsystem_t *yelli) { yellifish_t *yptr; for(yptr = yelli->yellifishs; yptr < yelli->yellifishs + YELLIFISH_MAXNUM; ++yptr) { yptr->active = 0; } } rockdodger-1.1.4/rocks.h0000644000175000017500000000465713706632107015447 0ustar krawczykkrawczyk#ifndef __ROCKS_H__2010 #define __ROCKS_H__2010 #include #include "globals.h" /*! \brief Structure describing rocks/asteroids */ struct rock_struct { float x, y, xvel, yvel; int active; //!< Is the rock active? Is it moving and being displayed? unsigned short type_class; //!< 0 = normal, 1 = lithium, 2 = ice unsigned short type_number; float heat; float heat_capacity; //!< How much energy is needed to heat the rock? // rock_struct.greeb is an index into greeb[], the destination (or landing // site) of the rock's greeb. This of course limits the number of greebs // flying to the same rock. int greeb; // Angle for plumes when rock is heated. short plume_angle; }; extern struct rock_struct rock[MAX_ROCKS]; //!< Structure of all the rocks. /*! \brief Get the current surface of the rock with index rockidx. * * \param rockidx Index to rock. * \param hot 1 == return the "hot" surface, 0 == return "cool" surface * \return Surface found (should never be illegal) */ SDL_Surface *get_rock_surface(int rockidx, int hot); /*! \brief Heat a rock * * The rock is heated and the internal heat of the rock increased. * * \param rockidx index number of the rock to heat * \param mvmt current movementrate */ void heat_rock_up(int rockidx, float mvmt); /*! \brief Draw the rocks. * * This function will also draw the greeblies flying to its * rock. TODO: Check if this can be untangled. * * \param surf_screen Surface to draw on. */ void display_rocks(SDL_Surface *surf_screen); /*! \brief Update the rocks. * * Updates the position of the rocks. Uses the global movementrate. * * \param surf_screen Surface to draw on. */ void update_rocks(void); /*! \brief Create a rock. * * Create a rock, if maximum number of rocks reached function returns * immediately. * */ void create_rock(void); /*! \brief Initialise rock data. * * Initialise all data and load all beautiful rock images. * * \return NULL = fail, otherwise something else (do not rely on it for now!) */ void *init_rocks(void); /*! \brief Reset rock system * * Reset the rock system to sensible values. This function should be * called on every start of a game. */ void reset_rocks(void); /*! \brief Create a rock while in game. * * This function will update the rock countdown and create a new rock * if the correct level has been reached. Call this function once per * frame if in-game mode. */ void ingame_maybe_rock(); #endif rockdodger-1.1.4/intro.h0000644000175000017500000000315413706632107015450 0ustar krawczykkrawczyk#ifndef __rockdodger_INTRO_H__ #define __rockdodger_INTRO_H__ #include "scroller.h" #include "u-iff.h" #define NUM_COPPERBARS 6 struct rockintro { SDL_Surface *copperbars[NUM_COPPERBARS]; SDL_Surface *intro_image; float positions[NUM_COPPERBARS]; float speeds[NUM_COPPERBARS]; Scroller_t *scroller; float fld_logophase; float fld_amplitude; float fld_logo_wagging_amplitude; int fld_last_topline; }; /*! \brief Initialise the intro. * * \param target Surface to be painted later on (for witdth, etc.) * \param iff context for loading parameters for the intro * \return NULL on error or pointer to allocated rockintro structure */ struct rockintro *init_intro(SDL_Surface *target, uiff_ctx_t *iff); /*! \brief Do the intro thingy. * * \param intro Pointer to the intro structure with the current state * \param target SDL_Surface to draw on. * \param movementrate Relative speed to 50 fps, see globals.h. */ void update_and_draw_intro(struct rockintro *intro, SDL_Surface *target, float movementrate); /*! Shutdown intro and free data * * Warning! Do not call on the same structure twice! * * \param intro Pointer to the intro structure with the current state */ void shutdown_intro(struct rockintro *intro); /*! \brief Play the whole intro * * This function will check if a file in the $HOME directory exists in * order not to bug the player too much. * * \param force if nonzero then always play the intro * \param oss_sound_flag if nonzero then play a sound * \param iff context for loading parameters for the intro */ void play_intro(int force, int oss_sound_flag, uiff_ctx_t iff); #endif