netrek-client-cow-3.3.2/0000775000175000017500000000000013657750475014056 5ustar jamesjamesnetrek-client-cow-3.3.2/socket.c0000664000175000017500000045325613657750470015524 0ustar jamesjames/* Socket.c * * Kevin P. Smith 1/29/89 UDP stuff v1.0 by Andy McFadden Feb-Apr 1992 * * UDP protocol v1.0 * * Routines to allow connection to the xtrek server. */ #include "config.h" #include "copyright2.h" #include #include #include #include #include #include #include #include #include INC_SYS_SELECT #include INC_MACHINE_ENDIAN #include INC_NETINET_IN #include INC_NETINET_TCP #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "ltd_stats.h" #include "wtext.h" #include "playerlist.h" #include "badversion.h" #include "defaults.h" #include "dmessage.h" #include "getship.h" #include "local.h" #include "map.h" #include "netstat.h" #include "newwin.h" #include "reserved.h" #include "playback.h" #include "rotate.h" #include "redraw.h" #include "short.h" #include "stats.h" #include "udpopt.h" #include "warning.h" #include "socket.h" #define statsFile stderr /* use stderr for stats output for now */ int gather_stats = 0; #ifdef WIN32 /* socket garbage in case * * the client is not running * * * on NT */ #define read(f,b,l) recv(f,b,l,0) #define write(f,b,l) send(f,b,l,0) #define close(s) closesocket(s) #endif #if 0 #define INCLUDE_SCAN /* include Amdahl scanning beams */ #endif #define INCLUDE_VISTRACT /* include visible tractor beams */ #define NETSTAT #ifdef GATEWAY /* (these values are now defined in "main.c":) char *gw_mach = * "charon"; |client gateway; strcmp(serverName) int gw_serv_port = * 5000; |what to tell the server to use int gw_port = 5001; * |where we will contact gw int gw_local_port = 5100; |where we * expect gw to contact us * * The client binds to "5100" and sends "5000" to the server (TCP). The server * sees that and sends a UDP packet to gw on port udp5000, which passes it * through to port udp5100 on the client. The client-gw gets the server's * host and port from recvfrom. (The client can't use the same method since * these sockets are one-way only, so it connect()s to gw_port (udp5001) on * the gateway machine regardless of what the server sends.) * * So all we need in .gwrc is: udp 5000 5001 tde.uts 5100 * * assuming the client is on tde.uts. Note that a UDP declaration will work for * ANY server, but you need one per player, and the client has to have the * port numbers in advance. * * If we're using a standard server, we're set. If we're running through a * gatewayed server, we have to do some unpleasant work on the server side... */ #endif void handleMessage(struct mesg_spacket *packet); void handlePlyrInfo(struct plyr_info_spacket *packet); void handleKills(struct kills_spacket *packet); void handlePlayer(struct player_spacket *packet); void handleTorpInfo(struct torp_info_spacket *packet); void handleTorp(struct torp_spacket *packet); void handlePhaser(struct phaser_spacket *packet); void handlePlasmaInfo(struct plasma_info_spacket *packet); void handlePlasma(struct plasma_spacket *packet); void handleWarning(struct warning_spacket *packet); void handleMotd(struct motd_spacket *packet); void handleSelf(struct you_spacket *packet); void handleQueue(struct queue_spacket *packet); void handleStatus(struct status_spacket *packet); void handlePlanet(struct planet_spacket *packet); void handlePickok(struct pickok_spacket *packet); void handleLogin(struct login_spacket *packet); void handleFlags(struct flags_spacket *packet); void handleMask(struct mask_spacket *packet); void handlePStatus(struct pstatus_spacket *packet); void handleBadVersion(struct badversion_spacket *packet); void handleHostile(struct hostile_spacket *packet); void handleStats(struct stats_spacket *packet); void handlePlyrLogin(struct plyr_login_spacket *packet, int sock); void handleReserved(struct reserved_spacket *packet, int sock); void handlePlanetLoc(struct planet_loc_spacket *packet); #ifdef HANDLE_SCAN void handleScan(struct scan_spacket *packet); #endif void handleUdpReply(struct udp_reply_spacket *packet); void handleSequence(struct sequence_spacket *packet); #ifdef RSA void handleRSAKey(struct rsa_key_spacket *packet); extern void rsa_black_box(unsigned char *, unsigned char *, unsigned char *, unsigned char *); #else void handleRSAKey(void *packet); #endif void handleShipCap(struct ship_cap_spacket *packet); static void handleGeneric32(struct generic_32_spacket *packet); extern void handlePing(struct ping_spacket *packet); /* ping.c */ extern void terminate(int error); #ifdef SHORT_PACKETS extern void handleShortReply(struct shortreply_spacket *packet); extern void handleSMessage(struct mesg_s_spacket *packet); extern void handleSWarning(struct warning_s_spacket *packet); extern void handleSelfShort(struct youshort_spacket *packet); extern void handleSelfShip(struct youss_spacket *packet); extern void handleVPlayer(unsigned char *sbuf); extern void handleVTorp(unsigned char *sbuf); extern void handleVTorpInfo(unsigned char *sbuf); extern void handleVPlanet(unsigned char *sbuf); /* S_P2 */ extern void handleVPhaser(unsigned char *sbuf); extern void handleVKills(unsigned char *sbuf); extern void handle_s_Stats(struct stats_s_spacket *packet); #endif /* SHORT_PACKETS */ #ifdef FEATURE_PACKETS extern void handleFeature(struct feature_cpacket *packet); #endif void handleRank (struct rank_spacket *packet); void handleLtd (struct ltd_spacket *packet); static void pickSocket(int old); static int connUdpConn(void); static int openUdpConn(void); static int recvUdpConn(void); static int doRead(int asock); char *strcpyp_return(register char *s1, register char *s2, register int length); void dummy(void) { } #ifdef SHORT_PACKETS unsigned char numofbits[256] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; static int vtsize[9] = {4, 8, 8, 12, 12, 16, 20, 20, 24}; /* How big is the torppacket * * */ int vtisize[9] = {4, 7, 9, 11, 13, 16, 18, 20, 22}; /* 4 byte Header + torpdata */ /* S_P2 */ int shortversion = SHORTVERSION; /* Which version do we use? */ #endif /* SHORT_PACKETS */ #ifdef PACKET_LOG void Log_Packet(char type, int act_size); void Log_OPacket(int tpe, int size); void print_opacket(char *packet, int size); void print_packet(char *packet, int size); #endif struct packet_handler handlers[] = { {0, NULL}, /* record 0 */ {sizeof(struct mesg_spacket), handleMessage}, /* SP_MESSAGE */ {sizeof(struct plyr_info_spacket), handlePlyrInfo}, /* SP_PLAYER_INFO */ {sizeof(struct kills_spacket), handleKills}, /* SP_KILLS */ {sizeof(struct player_spacket), handlePlayer}, /* SP_PLAYER */ {sizeof(struct torp_info_spacket), handleTorpInfo}, /* SP_TORP_INFO */ {sizeof(struct torp_spacket), handleTorp}, /* SP_TORP */ {sizeof(struct phaser_spacket), handlePhaser}, /* SP_PHASER */ {sizeof(struct plasma_info_spacket), handlePlasmaInfo}, /* SP_PLASMA_INFO * */ {sizeof(struct plasma_spacket), handlePlasma}, /* SP_PLASMA */ {sizeof(struct warning_spacket), handleWarning}, /* SP_WARNING */ {sizeof(struct motd_spacket), handleMotd}, /* SP_MOTD */ {sizeof(struct you_spacket), handleSelf}, /* SP_YOU */ {sizeof(struct queue_spacket), handleQueue}, /* SP_QUEUE */ {sizeof(struct status_spacket), handleStatus}, /* SP_STATUS */ {sizeof(struct planet_spacket), handlePlanet}, /* SP_PLANET */ {sizeof(struct pickok_spacket), handlePickok}, /* SP_PICKOK */ {sizeof(struct login_spacket), handleLogin}, /* SP_LOGIN */ {sizeof(struct flags_spacket), handleFlags}, /* SP_FLAGS */ {sizeof(struct mask_spacket), handleMask}, /* SP_MASK */ {sizeof(struct pstatus_spacket), handlePStatus}, /* SP_PSTATUS */ {sizeof(struct badversion_spacket), handleBadVersion}, /* SP_BADVERSION * */ {sizeof(struct hostile_spacket), handleHostile}, /* SP_HOSTILE */ {sizeof(struct stats_spacket), handleStats}, /* SP_STATS */ {sizeof(struct plyr_login_spacket), handlePlyrLogin}, /* SP_PL_LOGIN * */ {sizeof(struct reserved_spacket), handleReserved}, /* SP_RESERVED */ {sizeof(struct planet_loc_spacket), handlePlanetLoc}, /* SP_PLANET_LOC * */ #ifdef HANDLE_SCAN {sizeof(struct scan_spacket), handleScan} /* SP_SCAN (ATM) */ #else {0, dummy}, /* won't be called */ #endif {sizeof(struct udp_reply_spacket), handleUdpReply}, /* SP_UDP_STAT */ {sizeof(struct sequence_spacket), handleSequence}, /* SP_SEQUENCE */ {sizeof(struct sc_sequence_spacket), handleSequence}, /* SP_SC_SEQUENCE * */ #ifdef RSA {sizeof(struct rsa_key_spacket), handleRSAKey}, /* SP_RSA_KEY */ #else {0, dummy}, /* #31, and dummy won't */ #endif {sizeof(struct generic_32_spacket), handleGeneric32}, /* SP_GENERIC_32 */ {0, dummy}, /* 33 */ {0, dummy}, /* 34 */ {0, dummy}, /* 35 */ {0, dummy}, /* 36 */ {0, dummy}, /* 37 */ {0, dummy}, /* 38 */ {sizeof(struct ship_cap_spacket), handleShipCap}, /* SP_SHIP_CAP */ #ifdef SHORT_PACKETS {sizeof(struct shortreply_spacket), handleShortReply}, /* SP_S_REPLY * */ {-1, handleSMessage}, /* SP_S_MESSAGE */ {-1 /* sizeof(struct * * warning_s_spacket) */ , handleSWarning}, /* SP_S_WARNING */ {sizeof(struct youshort_spacket), handleSelfShort}, /* SP_S_YOU */ {sizeof(struct youss_spacket), handleSelfShip}, /* SP_S_YOU_SS */ {-1, /* variable */ handleVPlayer}, /* SP_S_PLAYER */ #else {0, dummy}, /* 40 */ {0, dummy}, /* 41 */ {0, dummy}, /* 42 */ {0, dummy}, /* 43 */ {0, dummy}, /* 44 */ {0, dummy}, /* 45 */ #endif {sizeof(struct ping_spacket), handlePing}, /* SP_PING */ #ifdef SHORT_PACKETS {-1, /* variable */ handleVTorp}, /* SP_S_TORP */ {-1, handleVTorpInfo}, /* SP_S_TORP_INFO */ {20, handleVTorp}, /* SP_S_8_TORP */ {-1, handleVPlanet}, /* SP_S_PLANET */ #else {0, dummy}, /* 47 */ {0, dummy}, /* 48 */ {0, dummy}, /* 49 */ {0, dummy}, /* 50 */ #endif {0, dummy}, /* 51 */ {0, dummy}, /* 52 */ {0, dummy}, /* 53 */ {0, dummy}, /* 54 */ {0, dummy}, /* 55 */ #ifdef SHORT_PACKETS /* S_P2 */ {0, dummy}, /* SP_S_SEQUENCE not yet * * * implemented */ {-1, handleVPhaser}, /* SP_S_PHASER */ {-1, handleVKills}, /* SP_S_KILLS */ {sizeof(struct stats_s_spacket), handle_s_Stats}, /* SP_S_STATS */ #else {0, dummy}, /* 56 */ {0, dummy}, /* 57 */ {0, dummy}, /* 58 */ {0, dummy}, /* 59 */ #endif #ifdef FEATURE_PACKETS {sizeof(struct feature_cpacket), handleFeature}, /* SP_FEATURE; 60 */ #endif {sizeof(struct rank_spacket), handleRank}, /* SP_RANK; 61 */ {sizeof(struct ltd_spacket), handleLtd}, /* SP_LTD; 62 */ }; int sizes[] = { 0, /* record 0 */ sizeof(struct mesg_cpacket), /* CP_MESSAGE */ sizeof(struct speed_cpacket), /* CP_SPEED */ sizeof(struct dir_cpacket), /* CP_DIRECTION */ sizeof(struct phaser_cpacket), /* CP_PHASER */ sizeof(struct plasma_cpacket), /* CP_PLASMA */ sizeof(struct torp_cpacket), /* CP_TORP */ sizeof(struct quit_cpacket), /* CP_QUIT */ sizeof(struct login_cpacket), /* CP_LOGIN */ sizeof(struct outfit_cpacket), /* CP_OUTFIT */ sizeof(struct war_cpacket), /* CP_WAR */ sizeof(struct practr_cpacket), /* CP_PRACTR */ sizeof(struct shield_cpacket), /* CP_SHIELD */ sizeof(struct repair_cpacket), /* CP_REPAIR */ sizeof(struct orbit_cpacket), /* CP_ORBIT */ sizeof(struct planlock_cpacket), /* CP_PLANLOCK */ sizeof(struct playlock_cpacket), /* CP_PLAYLOCK */ sizeof(struct bomb_cpacket), /* CP_BOMB */ sizeof(struct beam_cpacket), /* CP_BEAM */ sizeof(struct cloak_cpacket), /* CP_CLOAK */ sizeof(struct det_torps_cpacket), /* CP_DET_TORPS */ sizeof(struct det_mytorp_cpacket), /* CP_DET_MYTORP */ sizeof(struct copilot_cpacket), /* CP_COPILOT */ sizeof(struct refit_cpacket), /* CP_REFIT */ sizeof(struct tractor_cpacket), /* CP_TRACTOR */ sizeof(struct repress_cpacket), /* CP_REPRESS */ sizeof(struct coup_cpacket), /* CP_COUP */ sizeof(struct socket_cpacket), /* CP_SOCKET */ sizeof(struct options_cpacket), /* CP_OPTIONS */ sizeof(struct bye_cpacket), /* CP_BYE */ sizeof(struct dockperm_cpacket), /* CP_DOCKPERM */ sizeof(struct updates_cpacket), /* CP_UPDATES */ sizeof(struct resetstats_cpacket), /* CP_RESETSTATS */ sizeof(struct reserved_cpacket), /* CP_RESERVED */ #ifdef INCLUDE_SCAN sizeof(struct scan_cpacket), /* CP_SCAN (ATM) */ #else 0, #endif sizeof(struct udp_req_cpacket), /* CP_UDP_REQ */ sizeof(struct sequence_cpacket), /* CP_SEQUENCE */ #ifdef RSA sizeof(struct rsa_key_cpacket), /* CP_RSA_KEY */ #else 0, /* 37 */ #endif 0, /* 38 */ 0, /* 39 */ 0, /* 40 */ 0, /* 41 */ #ifdef PING sizeof(struct ping_cpacket), /* CP_PING_RESPONSE */ #else 0, #endif #ifdef SHORT_PACKETS sizeof(struct shortreq_cpacket), /* CP_S_REQ */ sizeof(struct threshold_cpacket), /* CP_S_THRS */ -1, /* CP_S_MESSAGE */ #else 0, /* 43 */ 0, /* 44 */ 0, /* 45 */ #endif 0, /* 46 */ 0, /* 47 */ 0, /* 48 */ 0, /* 49 */ 0, /* 50 */ 0, /* 51 */ 0, /* 52 */ 0, /* 53 */ 0, /* 54 */ 0, /* 55 */ 0, /* 56 */ 0, /* 57 */ 0, /* 58 */ 0, /* 59 */ #ifdef FEATURE_PACKETS sizeof(struct feature_cpacket), /* CP_FEATURE; 60 */ #endif }; #define NUM_PACKETS (sizeof(handlers) / sizeof(handlers[0]) - 1) #define NUM_SIZES (sizeof(sizes) / sizeof(sizes[0]) - 1) #ifdef PACKET_LOG /* stuff useful for logging server packets to see how much bandwidth netrek * is really using */ int log_packets = 0; /* whether or not to be * logging packets */ int packet_log[NUM_PACKETS]; /* number of packets logged */ int outpacket_log[NUM_SIZES]; int ALL_BYTES = 0; /* To log all bytes */ #endif /* PACKET_LOG */ int serverDead = 0; #define BUFSIZE 1024 char buf[BUFSIZE]; static int udpLocalPort = 0; static int udpServerPort = 0; static LONG serveraddr = 0; static LONG sequence = 0; static int drop_flag = 0; static int chan = -1; /* tells sequence checker * * * * where packet is from */ static short fSpeed, fDirection, fShield, fOrbit, fRepair, fBeamup, fBeamdown, fCloak, fBomb, fDockperm, fPhaser, fPlasma, fPlayLock, fPlanLock, fTractor, fRepress; /* internal prototypes */ static void dotimers(void); /* print the SP_S_TORP* packets. */ /* sbuf = pointer to packet buff */ /* type=1 print SP_S_TORP */ /* type=2 print SP_S_8_TORP */ /* type=3 print SP_S_TORP_INFO */ void print_sp_s_torp(char *sbuf, int type) { unsigned char which, *data, infobitset, *infodata; unsigned char bitset; int dx, dy; int shiftvar; int i; char status, war; register int shift = 0; /* How many torps are * * extracted (for shifting) */ if ( (type == 1) || (type == 2) ) { /* now we must find the data ... :-) */ if (sbuf[0] == SP_S_8_TORP) { /* MAX packet */ bitset = 0xff; which = sbuf[1]; data = (unsigned char *) &sbuf[2]; } else { /* Normal Packet */ bitset = sbuf[1]; which = sbuf[2]; data = (unsigned char *) &sbuf[3]; } fprintf(stderr, " bitset=0x%0X, which=%d, ", bitset, which); #ifdef CORRUPTED_PACKETS /* we probably should do something clever here - jmn */ #endif for (shift = 0, i = 0; i < 8; i++, bitset >>= 1) { if (bitset & 01) { dx = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dx |= (shiftvar & 511); shift++; dy = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dy |= (shiftvar & 511); shift++; if (shift == 8) { shift = 0; data++; } fprintf(stderr, "dx=%d, dy=%d, ",dx, dy); } } } else if (type == 3) { /* now we must find the data ... :-) */ bitset = sbuf[1]; which = sbuf[2]; infobitset = sbuf[3]; /* Where is the data ? */ data = (unsigned char *) &sbuf[4]; fprintf(stderr, " bitset=0x%0X, which=%d, infobitset=0x%0X, ", bitset, which, infobitset); infodata = (unsigned char *) &sbuf[vtisize[numofbits[(unsigned char) sbuf[1]]]]; for (shift = 0, i = 0; i < 8; bitset >>= 1, infobitset >>= 1, i++) { if (bitset & 01) { dx = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dx |= (shiftvar & 511); shift++; dy = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dy |= (shiftvar & 511); shift++; if (shift == 8) { shift = 0; data++; } fprintf(stderr, "dx=%d, dy=%d, ",dx, dy); } /* Now the TorpInfo */ if (infobitset & 01) { war = (unsigned char) *infodata & 15 /* 0x0f */ ; status = ((unsigned char) *infodata & 0xf0) >> 4; infodata++; fprintf(stderr, "war=0x%0X, status=0x%0X, ", war, status); } /* if */ } /* for */ } } /* reset all the "force command" variables */ static void resetForce(void) { fSpeed = fDirection = fShield = fOrbit = fRepair = fBeamup = fBeamdown = fCloak = fBomb = fDockperm = fPhaser = fPlasma = fPlayLock = fPlanLock = fTractor = fRepress = -1; } /* If something we want to happen hasn't yet, send it again. * * The low byte is the request, the high byte is a max count. When the max * count reaches zero, the client stops trying. Checking is done with a * macro for speed & clarity. */ #define FCHECK_FLAGS(flag, force, const) { \ if (force > 0) { \ if (((me->p_flags & flag) && 1) ^ ((force & 0xff) && 1)) { \ speedReq.type = const; \ speedReq.speed = (force & 0xff); \ sendServerPacket((struct player_spacket *) &speedReq); \ V_UDPDIAG(("Forced %d:%d\n", const, force & 0xff)); \ force -= 0x100; \ if (force < 0x100) force = -1; /* give up */ \ } else \ force = -1; \ } \ } #define FCHECK_VAL(value, force, const) { \ if (force > 0) { \ if ((value) != (force & 0xff)) { \ speedReq.type = const; \ speedReq.speed = (force & 0xff); \ sendServerPacket((struct player_spacket *) &speedReq); \ V_UDPDIAG(("Forced %d:%d\n", const, force & 0xff)); \ force -= 0x100; \ if (force < 0x100) force = -1; /* give up */ \ } else \ force = -1; \ } \ } #define FCHECK_TRACT(flag, force, const) { \ if (force > 0) { \ if (((me->p_flags & flag) && 1) ^ ((force & 0xff) && 1)) { \ tractorReq.type = const; \ tractorReq.state = ((force & 0xff) >= 0x40); \ tractorReq.pnum = (force & 0xff) & (~0x40); \ sendServerPacket((struct player_spacket *)&tractorReq); \ V_UDPDIAG(("Forced %d:%d/%d\n", const, \ tractorReq.state, tractorReq.pnum)); \ force -= 0x100; \ if (force < 0x100) force = -1; /* give up */ \ } else \ force = -1; \ } \ } void checkForce(void) { struct speed_cpacket speedReq; struct tractor_cpacket tractorReq; FCHECK_VAL(me->p_speed, fSpeed, CP_SPEED); /* almost always repeats */ #ifdef nodef /* not needed */ FCHECK_VAL(me->p_dir, fDirection, CP_DIRECTION); /* (ditto) */ #endif FCHECK_FLAGS(PFSHIELD, fShield, CP_SHIELD); FCHECK_FLAGS(PFORBIT, fOrbit, CP_ORBIT); FCHECK_FLAGS(PFREPAIR, fRepair, CP_REPAIR); FCHECK_FLAGS(PFBEAMUP, fBeamup, CP_BEAM); FCHECK_FLAGS(PFBEAMDOWN, fBeamdown, CP_BEAM); FCHECK_FLAGS(PFCLOAK, fCloak, CP_CLOAK); FCHECK_FLAGS(PFBOMB, fBomb, CP_BOMB); FCHECK_FLAGS(PFDOCKOK, fDockperm, CP_DOCKPERM); FCHECK_VAL(phasers[me->p_no].ph_status, fPhaser, CP_PHASER); /* bug: dir 0 * */ FCHECK_VAL(plasmatorps[me->p_no].pt_status, fPlasma, CP_PLASMA); /* (ditto) * */ FCHECK_FLAGS(PFPLOCK, fPlayLock, CP_PLAYLOCK); FCHECK_FLAGS(PFPLLOCK, fPlanLock, CP_PLANLOCK); FCHECK_TRACT(PFTRACT, fTractor, CP_TRACTOR); FCHECK_TRACT(PFPRESS, fRepress, CP_REPRESS); } void connectToServer(int port) { int s; struct sockaddr_in addr; struct sockaddr_in naddr; socklen_t len; fd_set readfds; struct timeval timeout; struct hostent *hp; int optval; serverDead = 0; if (sock != -1) { shutdown(sock, 2); close(sock); sock = -1; } #ifdef nodef sleep(3); /* I think this is necessary * * * for some unknown * reason */ #endif printf("Waiting for connection (port %d). \n", port); if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { printf("I can't create a socket\n"); terminate(2); } /* allow local address resuse */ optval = 1; if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &optval, sizeof(int)) < 0) { perror("setsockopt"); } addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(port); if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { #ifdef nodef sleep(10); if (bind(s, &addr, sizeof(addr)) < 0) { sleep(10); if (bind(s, &addr, sizeof(addr)) < 0) { printf("I can't bind to port!\n"); terminate(3); } } #endif perror("bind"); /* NEW */ terminate(1); } if (listen(s, 1) < 0) perror("listen"); len = sizeof(naddr); tryagain: timeout.tv_sec = 240; /* four minutes */ timeout.tv_usec = 0; FD_ZERO(&readfds); FD_SET(s, &readfds); if (s >= max_fd) max_fd = s + 1; if (SELECT(max_fd, &readfds, NULL, NULL, &timeout) == 0) { printf("Well, I think the server died!\n"); terminate(0); } sock = accept(s, (struct sockaddr *) &naddr, &len); if (sock == -1) { goto tryagain; } if (sock >= max_fd) max_fd = sock + 1; printf("Got connection.\n"); close(s); pickSocket(port); /* new socket != port */ /* This is necessary; it tries to determine who the caller is, and set * * * "serverName" and "serveraddr" appropriately. */ len = sizeof(struct sockaddr_in); if (getpeername(sock, (struct sockaddr *) &addr, &len) < 0) { perror("unable to get peername"); serverName = "nowhere"; printf("Connection from server\n"); } else { serveraddr = addr.sin_addr.s_addr; hp = gethostbyaddr((char *) &addr.sin_addr.s_addr, sizeof(LONG), AF_INET); if (hp != NULL) { serverName = (char *) malloc(strlen(hp->h_name) + 1); strcpy(serverName, hp->h_name); printf("Connection from server %s (%s)\n", serverName, inet_ntoa(addr.sin_addr)); } else { serverName = (char *) malloc(strlen(inet_ntoa(addr.sin_addr)) + 1); strcpy(serverName, inet_ntoa(addr.sin_addr)); printf("Connection from server %s\n", serverName); } } } static void set_tcp_opts(int s) { int optval = 1; struct protoent *ent; ent = getprotobyname("TCP"); if (!ent) { fprintf(stderr, "TCP protocol not found.\n"); return; } if (setsockopt(s, ent->p_proto, TCP_NODELAY, &optval, sizeof(int)) < 0) perror("setsockopt"); } #ifdef nodef static void set_udp_opts(int s) { int optval = BUFSIZ; struct protoent *ent; ent = getprotobyname("UDP"); if (!ent) { fprintf(stderr, "UDP protocol not found.\n"); return; } if (setsockopt(s, ent->p_proto, SO_RCVBUF, &optval, sizeof(int)) < 0) perror("setsockopt"); } #endif void callServer(int port, char *server) { int s; struct sockaddr_in addr; struct hostent *hp; serverDead = 0; fprintf(stderr, "connecting to %s on port %d\n", server, port); if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("failed in socket"); terminate(1); } set_tcp_opts(s); addr.sin_family = AF_INET; addr.sin_port = htons(port); if ((addr.sin_addr.s_addr = inet_addr(server)) == -1) { if ((hp = gethostbyname(server)) == NULL) { printf("unable to resolve hostname %s\n", server); terminate(1); } else { addr.sin_addr.s_addr = *(LONG *) hp->h_addr; } } serveraddr = addr.sin_addr.s_addr; if (connect(s, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("failed in connect"); fprintf(stderr, "connection failed\n"); terminate(1); } fprintf(stderr, "connected\n"); sock = s; if (sock >= max_fd) max_fd = sock + 1; #ifdef TREKHOPD /* We use a different scheme from gw: we tell the server who we want to * * * connect to and what our local UDP port is; it picks its own UDP ports * * * and tells us what they are. This is MUCH more flexible and avoids a * * * number of problems, and may come in handy if the blessed scheme * changes. * * It's also slightly more work. */ { extern int port_req, use_trekhopd, serv_port; extern char *host_req; struct mesg_cpacket msg; struct mesg_spacket reply; int n, count, *ip; char *buf; if (use_trekhopd) { msg.type = SP_MESSAGE; msg.group = msg.indiv = msg.pad1 = 0; ip = (int *) msg.mesg; *(ip++) = htons(port_req); *(ip++) = htons(gw_local_port); STRNCPY(msg.mesg + 8, login, 8); strcpy(msg.mesg + 16, host_req); if (gwrite(s, &msg, sizeof(struct mesg_cpacket)) < 0) { fprintf(stderr, "trekhopd init failure\n"); terminate(1); } printf("--- trekhopd request sent, awaiting reply\n"); /* now block waiting for reply */ count = sizeof(struct mesg_spacket); for (buf = (char *) &reply; count; buf += n, count -= n) { if ((n = read(s, buf, count)) <= 0) { perror("trekhopd read"); terminate(1); } } if (reply.type != SP_MESSAGE) { fprintf(stderr, "Got bogus reply from trekhopd (%d)\n", reply.type); terminate(1); } ip = (int *) reply.mesg; gw_serv_port = ntohl(*ip++); gw_port = ntohl(*ip++); serv_port = ntohl(*ip++); printf("--- trekhopd reply received\n"); /* printf("ports = %d/%d, %d\n", gw_serv_port, gw_port, serv_port); */ } } #endif /* TREKHOPD */ pickSocket(port); /* new socket != port */ } int isServerDead(void) { return serverDead; } void socketPauseCommon(int wake_on_user_input) { struct timeval timeout; fd_set readfds; int retval; timeout.tv_sec = 1; timeout.tv_usec = 0; FD_ZERO(&readfds); FD_SET(sock, &readfds); if (udpSock >= 0) /* new */ FD_SET(udpSock, &readfds); #ifndef HAVE_WIN32 if (wake_on_user_input) FD_SET(W_Socket(), &readfds); #endif retval = SELECT(max_fd, &readfds, 0, 0, &timeout); if (retval < 0) perror("select"); /* FIXME: EBADF on kill of ntserv during outfit */ } void socketPauseNoUser(void) { socketPauseCommon(0); } void socketPause(void) { socketPauseCommon(1); } int readFromServer(fd_set *readfds) { int retval = 0; if (serverDead) return 0; if (!readfds) { struct timeval timeout; int rs; fd_set mask; readfds = &mask; FD_ZERO(readfds); FD_SET(sock, readfds); if (udpSock >= 0) FD_SET(udpSock, readfds); timeout.tv_sec = 0; timeout.tv_usec = 0; if ((rs = SELECT(max_fd, readfds, 0, 0, &timeout)) == 0) { dotimers(); return 0; } if (rs < 0) { if (errno == EINTR) return 0; perror("select"); sleep(1); } } if (udpSock >= 0 && FD_ISSET(udpSock, readfds)) { /* WAS V_ */ UDPDIAG(("Activity on UDP socket\n")); chan = udpSock; if (commStatus == STAT_VERIFY_UDP) { sequence = 0; /* reset sequence #s */ resetForce(); printUdpInfo(); UDPDIAG(("UDP connection established.\n")); commMode = COMM_UDP; commStatus = STAT_CONNECTED; commSwitchTimeout = 0; if (udpClientRecv != MODE_SIMPLE) sendUdpReq(COMM_MODE + udpClientRecv); if (udpWin) { udprefresh(UDP_CURRENT); udprefresh(UDP_STATUS); } } retval += doRead(udpSock); } /* Read info from the xtrek server */ if (FD_ISSET(sock, readfds)) { chan = sock; if (commMode == COMM_TCP) drop_flag = 0; /* just in case */ /* Bug fix for unnecessary redraws with UDP on - reported by TP */ // if (commMode == COMM_UDP) // doRead (sock); // else retval += doRead (sock); } dotimers(); return retval != 0; /* convert to 1/0 */ } static void dotimers(void) { /* if switching comm mode, decrement timeout counter */ if (commSwitchTimeout > 0) { if (!(--commSwitchTimeout)) { /* timed out; could be initial request to non-UDP server (which * * * won't be answered), or the verify packet got lost en route to * * * the server. Could also be a request for TCP which timed out * * * (weird), in which case we just reset anyway. */ commModeReq = commMode = COMM_TCP; commStatus = STAT_CONNECTED; if (udpSock >= 0) closeUdpConn(); if (udpWin) { udprefresh(UDP_CURRENT); udprefresh(UDP_STATUS); } warning("Timed out waiting for UDP response from server"); UDPDIAG(("Timed out waiting for UDP response from server\n")); } } /* if we're in a UDP "force" mode, check to see if we need to do something */ if (udpClientSend > 1 && commMode == COMM_UDP) checkForce(); } int getvpsize(char *bufptr) { int size; switch (*bufptr) { case SP_S_MESSAGE: size = ((unsigned char) bufptr[4]); /* IMPORTANT Changed */ break; case SP_S_WARNING: if ((unsigned char) bufptr[1] == STEXTE_STRING || (unsigned char) bufptr[1] == SHORT_WARNING) { size = ((unsigned char) bufptr[3]); } else size = 4; /* Normal Packet */ break; case SP_S_PLAYER: if ((unsigned char) bufptr[1] & (unsigned char) 128) { /* Small +extended Header */ size = ((unsigned char) (bufptr[1] & 0x3f) * 4) + 4; } else if ((unsigned char) bufptr[1] & 64) { /* Small Header */ if (shortversion >= SHORTVERSION) /* S_P2 */ size = ((unsigned char) (bufptr[1] & 0x3f) * 4) + 4 + (bufptr[2] * 4); else size = ((unsigned char) (bufptr[1] & 0x3f) * 4) + 4; } else { /* Big Header */ size = ((unsigned char) bufptr[1] * 4 + 12); } break; case SP_S_TORP: size = vtsize[numofbits[(unsigned char) bufptr[1]]]; break; case SP_S_TORP_INFO: size = (vtisize[numofbits[(unsigned char) bufptr[1]]] + numofbits[(unsigned char) bufptr[3]]); break; case SP_S_PLANET: size = ((unsigned char) bufptr[1] * VPLANET_SIZE) + 2; break; case SP_S_PHASER: /* S_P2 */ switch ((unsigned char) bufptr[1] & 0x0f) { case PHFREE: case PHHIT: case PHMISS: size = 4; break; case PHHIT2: size = 8; break; default: size = sizeof(struct phaser_s_spacket); break; } break; case SP_S_KILLS: /* S_P2 */ size = ((unsigned char) bufptr[1] * 2) + 2; break; default: fprintf(stderr, "Unknown variable packet\n"); /* terminate(1); */ return -1; break; } if ((size % 4) != 0) { size += (4 - (size % 4)); } return size; } static int doRead(int asock) { struct timeval timeout; fd_set readfds; char *bufptr; int size; int count; int temp; timeout.tv_sec = 0; timeout.tv_usec = 0; count = read(asock, buf, BUFSIZE); #ifdef NETSTAT if (netstat && (asock == udpSock || commMode != COMM_UDP || udpClientRecv == MODE_TCP)) { ns_record_update(count); } #endif if (debug) printf("read %d bytes from %s socket\n", count, asock == udpSock ? "UDP" : "TCP"); if (count <= 0) { if (asock == udpSock) { #ifndef WIN32 if (errno == ECONNREFUSED) #else if (WSAGetLastError() == WSAECONNREFUSED) #endif { struct sockaddr_in addr; UDPDIAG(("asock=%d, sock=%d, udpSock=%d, errno=%d\n", asock, sock, udpSock, errno)); UDPDIAG(("count=%d\n", count)); UDPDIAG(("Hiccup(%d)! Reconnecting\n", errno)); addr.sin_addr.s_addr = serveraddr; addr.sin_port = htons(udpServerPort); addr.sin_family = AF_INET; if (connect(udpSock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("connect"); UDPDIAG(("Unable to reconnect\n")); /* and fall through to disconnect */ } else { UDPDIAG(("Reconnect successful\n")); return 0; } } UDPDIAG(("*** UDP disconnected (res=%d, err=%d)\n", count, errno)); warning("UDP link severed"); printUdpInfo(); closeUdpConn(); commMode = commModeReq = COMM_TCP; commStatus = STAT_CONNECTED; if (udpWin) { udprefresh(UDP_STATUS); udprefresh(UDP_CURRENT); } return 0; } printf("server disconnected\n"); close(asock); serverDead = 1; return 0; } bufptr = buf; while (bufptr < buf + count) { /* this goto label for a bug w/ short packets */ computesize: if (*bufptr < 1 || *bufptr > NUM_PACKETS || handlers[(unsigned char) *bufptr].size == 0) { int i; fprintf(stderr, "netrek protocol stream alignment failure, " "next byte %d (0x%02x)\n", *bufptr, *bufptr); fprintf(stderr, "protocol buffer dump, bytes %d, [bufptr] at %d :\n", count, (int) (bufptr - buf)); for (i = 0; i < count; i++) { if (i == (bufptr - buf)) { fprintf(stderr, "[%02x]", (unsigned int) buf[i] & 0xff); } else { fprintf(stderr, " %02x ", (unsigned int) buf[i] & 0xff); } } fprintf(stderr, "\n"); return 0; } size = handlers[(unsigned char) *bufptr].size; #ifdef SHORT_PACKETS if (size == -1) { /* variable packet */ size = getvpsize(bufptr); if (size <= 0) { fprintf(stderr, "Bad short-packet size value (%d)\n", size); return 0; } if (debug) printf("read variable packet size %d, type %d\n", size, *bufptr); } #endif /* SHORT_PACKETS */ if (size == 0) fprintf(stderr, "Variable packet has 0 length! type=%d Trying to read more!\n", *bufptr); /* read broke in the middle of a packet, wait until we get the rest */ while (size > count + (buf - bufptr) || size == 0) { /* We wait for up to ten seconds for rest of packet. If we don't * * * get it, we assume the server died. */ timeout.tv_sec = 20; timeout.tv_usec = 0; FD_ZERO(&readfds); FD_SET(asock, &readfds); /* readfds=1< buf + BUFSIZ) { MCOPY(buf + BUFSIZ, buf, BUFSIZ); if (count == BUFSIZ * 2) { FD_ZERO(&readfds); FD_SET(asock, &readfds); /* readfds = 1< 0) { temp = read(asock, buf + BUFSIZ, BUFSIZ); count = BUFSIZ + temp; if (temp <= 0) { printf("3) Got read() of %d. Server is dead\n", temp); serverDead = 1; close(sock); return 0; } } else { count = BUFSIZ; } } else { count -= BUFSIZ; } bufptr -= BUFSIZ; } #endif } return 1; } void handleTorp(struct torp_spacket *packet) { struct torp *thetorp; #ifdef CORRUPTED_PACKETS if (ntohs(packet->tnum) >= MAXPLAYER * MAXTORP) { fprintf(stderr, "handleTorp: bad index %d\n", ntohs(packet->tnum)); return; } #endif weaponUpdate = 1; thetorp = &torps[ntohs(packet->tnum)]; thetorp->t_x = ntohl(packet->x); thetorp->t_y = ntohl(packet->y); thetorp->t_dir = packet->dir; thetorp->t_updateFuse = MAX(2, TORP_UPDATE_FUSE * server_ups / 5); #ifdef ROTATERACE if (rotate) { rotate_coord(&thetorp->t_x, &thetorp->t_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&thetorp->t_dir, rotate_deg); } #endif if (gather_stats) { /*STATS_SP_TORP:DIR,TNUM,X,Y*/ fprintf(statsFile, "\nSTATS_SP_TORP:\t"); fprintf(statsFile, "%d\t%u\t%u\t%u", ((struct torp_spacket *) packet)->dir, ntohs(((struct torp_spacket *) packet)->tnum), ntohl(((struct torp_spacket *) packet)->x), ntohl(((struct torp_spacket *) packet)->y)); } } void handleTorpInfo(struct torp_info_spacket *packet) { struct torp *thetorp; #ifdef CORRUPTED_PACKETS if (ntohs(packet->tnum) >= MAXPLAYER * MAXTORP) { fprintf(stderr, "handleTorpInfo: bad index %d\n", ntohs(packet->tnum)); return; } #endif weaponUpdate = 1; thetorp = &torps[ntohs(packet->tnum)]; thetorp->t_updateFuse = MAX(2, TORP_UPDATE_FUSE * server_ups / 5); if (packet->status == TEXPLODE && thetorp->t_status == TFREE) { /* FAT: redundant explosion; don't update p_ntorp */ /* printf("texplode ignored\n"); */ return; } if (packet->status && thetorp->t_status == TFREE) { players[thetorp->t_owner].p_ntorp++; #ifdef nodef if (players[thetorp->t_owner].p_status == PEXPLODE) fprintf(stderr, "TORP STARTED WHEN PLAYER EXPLODED\n"); #endif /* BORG TEST */ #ifdef BD if (bd) bd_new_torp(ntohs(packet->tnum), thetorp); #endif } if (packet->status == TFREE && thetorp->t_status) { players[thetorp->t_owner].p_ntorp--; } thetorp->t_war = packet->war; if (packet->status != thetorp->t_status) { /* FAT: prevent explosion reset */ thetorp->t_status = packet->status; if (thetorp->t_status == TEXPLODE) { thetorp->t_fuse = NUMDETFRAMES * server_ups / 5; } } if (gather_stats) { /*STATS_SP_TORP_INFO:WAR\tSTATUS\tTNUM*/ fprintf(statsFile, "\nSTATS_SP_TORP_INFO:\t"); fprintf(statsFile, "%d\t%d\t%u", ((struct torp_info_spacket *) packet)->war, ((struct torp_info_spacket *) packet)->status, ntohs(((struct torp_info_spacket *) packet)->tnum)); } } void handleStatus(struct status_spacket *packet) { status->tourn = packet->tourn; status->armsbomb = ntohl(packet->armsbomb); status->planets = ntohl(packet->planets); status->kills = ntohl(packet->kills); status->losses = ntohl(packet->losses); status->time = ntohl(packet->time); status->timeprod = ntohl(packet->timeprod); if (debug) { printf("SERVER STATS:\n"); printf("time: %d\n", status->time / (60 * 60 * 10)); printf("kills: %d\n", status->kills); printf("losses: %d\n", status->losses); printf("planets: %d\n", status->planets); printf("armsbomb: %d\n", status->armsbomb); } if (gather_stats) { /*STATS_SP_STATUS:\tTOURN\tARMSBOMB\tPLANETS\tKILLS\tLOSSES\tTIME\tTIMEPROD*/ fprintf(statsFile, "\nSTATS_SP_STATUS:\t"); fprintf(statsFile, "\t%d\t%u\t%u\t%u\t%u\t%u\t%u", ((struct status_spacket *) packet)->tourn, ntohl(((struct status_spacket *) packet)->armsbomb), ntohl(((struct status_spacket *) packet)->planets), ntohl(((struct status_spacket *) packet)->kills), ntohl(((struct status_spacket *) packet)->losses), ntohl(((struct status_spacket *) packet)->time), ntohl(((struct status_spacket *) packet)->timeprod)); } } void become(struct player *pl) { int p_no; p_no = pl->p_no; memcpy(&pl->p_ship, &me->p_ship, sizeof(struct ship)); memcpy(&pl->p_stats, &me->p_stats, sizeof(struct stats)); memcpy(pl, me, sizeof(struct player)); pl->p_no = p_no; me->p_status = PFREE; } void handleSelf(struct you_spacket *packet) /* SP_YOU */ { struct player* pl; static int seen = 0; pl = &players[(unsigned char) packet->pnum]; #ifdef CORRUPTED_PACKETS if (packet->pnum < 0 || packet->pnum >= MAXPLAYER) { fprintf(stderr, "handleSelf: bad index %d\n", packet->pnum); return; } #endif if (seen && packet->pnum != me->p_no) become(pl); seen++; if (!F_many_self) { me = (ghoststart ? &players[ghost_pno] : pl); myship = &(me->p_ship); mystats = &(me->p_stats); } #ifdef PLIST2 if (pl->p_hostile != packet->hostile) { pl->p_hostile = packet->hostile; PlistNoteHostile(packet->pnum); } #else pl->p_hostile = packet->hostile; #endif pl->p_swar = packet->swar; pl->p_armies = packet->armies; #ifdef nodef if (((pl->p_flags & PFGREEN) && (ntohl(packet->flags) & PFRED)) || ((pl->p_flags & PFRED) && (ntohl(packet->flags) & PFGREEN))) printf("green/red transition\n"); #endif pl->p_flags = ntohl(packet->flags); if (pl->p_flags & PFPLOCK) { redrawPlayer[pl->p_playerl] = 1; } pl->p_damage = ntohl(packet->damage); pl->p_shield = ntohl(packet->shield); pl->p_fuel = ntohl(packet->fuel); pl->p_etemp = ntohs(packet->etemp); pl->p_wtemp = ntohs(packet->wtemp); pl->p_whydead = ntohs(packet->whydead); pl->p_whodead = ntohs(packet->whodead); #ifdef INCLUDE_VISTRACT if (packet->tractor & 0x40) { pl->p_tractor = (short) packet->tractor & (~0x40); /* ATM - visible * tractors */ } #ifdef nodef /* tmp */ else pl->p_tractor = -1; #endif /* nodef */ #endif } void handlePlayer(struct player_spacket *packet) { register struct player *pl; int x, y; #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLAYER) { fprintf(stderr, "handlePlayer: bad index %d\n", packet->pnum); return; } #endif pl = &players[(unsigned char) packet->pnum]; pl->p_dir = packet->dir; pl->p_speed = packet->speed; PlistNoteSpeed(packet->pnum); if (F_cloak_maxwarp && pl != me) { if (pl->p_speed == 0xf) pl->p_flags |= PFCLOAK; else if (pl->p_flags & PFCLOAK) pl->p_flags &= ~PFCLOAK; } x = ntohl(packet->x); y = ntohl(packet->y); #ifdef WARP_DEAD if (F_dead_warp && pl->p_speed == 14 && x == -10000 && y == -10000 && (pl->p_status != PEXPLODE)) { pl->p_status = PEXPLODE; x = pl->p_x; y = pl->p_y; if (pl->p_dir > DEADPACKETS) pl->p_explode = EX_FRAMES; else pl->p_explode = 0; redrawPlayer[packet->pnum] = 1; PlistNoteUpdate(packet->pnum); } #endif pl->p_x = x; pl->p_y = y; redrawPlayer[(unsigned char) packet->pnum] = 1; if (me == pl) { extern int my_x, my_y; /* From short.c */ my_x = x; my_y = y; } #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif if (gather_stats) { /* SP_PLAYER:PNUN,DIR,SPEED,X,Y */ fprintf(statsFile, "\nSTATS_SP_PLAYER:\t"); fprintf(statsFile, "%d\t%u\t%d\t%d\t%d", ((struct player_spacket *) packet)->pnum, ((struct player_spacket *) packet)->dir, ((struct player_spacket *) packet)->speed, ntohl(((struct player_spacket *) packet)->x), ntohl(((struct player_spacket *) packet)->y)); } } void handleWarning(struct warning_spacket *packet) { packet->mesg[sizeof(packet->mesg) - 1] = '\0'; /* guarantee null * * * termination */ warning(packet->mesg); } void sendShortPacket(char type, char state) { struct speed_cpacket speedReq; bzero(&speedReq, sizeof(speedReq)); speedReq.type = type; speedReq.speed = state; sendServerPacket((struct player_spacket *) &speedReq); /* if we're sending in UDP mode, be prepared to force it */ if (commMode == COMM_UDP && udpClientSend >= 2) { switch (type) { case CP_SPEED: fSpeed = state | 0x100; break; case CP_DIRECTION: fDirection = state | 0x100; break; case CP_SHIELD: fShield = state | 0xa00; break; case CP_ORBIT: fOrbit = state | 0xa00; break; case CP_REPAIR: fRepair = state | 0xa00; break; case CP_CLOAK: fCloak = state | 0xa00; break; case CP_BOMB: fBomb = state | 0xa00; break; case CP_DOCKPERM: fDockperm = state | 0xa00; break; case CP_PLAYLOCK: fPlayLock = state | 0xa00; break; case CP_PLANLOCK: fPlanLock = state | 0xa00; break; case CP_BEAM: if (state == 1) fBeamup = 1 | 0x500; else fBeamdown = 2 | 0x500; break; } /* force weapons too? */ if (udpClientSend >= 3) { switch (type) { case CP_PHASER: fPhaser = state | 0x100; break; case CP_PLASMA: fPlasma = state | 0x100; break; } } } } void sendServerPacket(void *buffer) { int size; struct player_spacket *packet = (struct player_spacket *) buffer; if (serverDead) return; if (packet->type < 1 || packet->type > NUM_SIZES || sizes[(unsigned char) packet->type] == 0) { printf("Attempt to send strange packet %d!\n", packet->type); return; } size = sizes[(unsigned char) packet->type]; #ifdef PACKET_LOG if (log_packets) { Log_OPacket(packet->type, size); print_opacket((char *) packet,size); } #endif if (commMode == COMM_UDP) { /* for now, just sent everything via TCP */ } if (commMode == COMM_TCP || !udpClientSend) { /* special case for verify packet */ if (packet->type == CP_UDP_REQ) { if (((struct udp_req_cpacket *) packet)->request == COMM_VERIFY) goto send_udp; } /* business as usual (or player has turned off UDP transmission) */ if (gwrite(sock, (char *) packet, size) != size) { printf("gwrite failed. Server must be dead\n"); serverDead = 1; } } else { /* UDP stuff */ switch (packet->type) { case CP_SPEED: case CP_DIRECTION: case CP_PHASER: case CP_PLASMA: case CP_TORP: case CP_QUIT: case CP_PRACTR: case CP_SHIELD: case CP_REPAIR: case CP_ORBIT: case CP_PLANLOCK: case CP_PLAYLOCK: case CP_BOMB: case CP_BEAM: case CP_CLOAK: case CP_DET_TORPS: case CP_DET_MYTORP: case CP_REFIT: case CP_TRACTOR: case CP_REPRESS: case CP_COUP: case CP_DOCKPERM: #ifdef INCLUDE_SCAN case CP_SCAN: #endif case CP_PING_RESPONSE: /* non-critical stuff, use UDP */ send_udp: packets_sent++; V_UDPDIAG(("Sent %d on UDP port\n", packet->type)); if (gwrite(udpSock, (char *) packet, size) != size) { UDPDIAG(("gwrite on UDP failed. Closing UDP connection\n")); warning("UDP link severed"); /* serverDead=1; */ commModeReq = commMode = COMM_TCP; commStatus = STAT_CONNECTED; commSwitchTimeout = 0; if (udpWin) { udprefresh(UDP_STATUS); udprefresh(UDP_CURRENT); } if (udpSock >= 0) closeUdpConn(); } break; default: /* critical stuff, use TCP */ if (gwrite(sock, (char *) packet, size) != size) { printf("gwrite failed. Server must be dead\n"); serverDead = 1; } } } } void handlePlanet(struct planet_spacket *packet) { struct planet *plan; /* FAT: prevent excessive redraw */ int redraw = 0; #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLANETS) { fprintf(stderr, "handlePlanet: bad index %d\n", packet->pnum); return; } #endif plan = &planets[(unsigned char) packet->pnum]; #ifdef nodef monpoprate(plan, packet); #endif if (plan->pl_owner != packet->owner) redraw = 1; plan->pl_owner = packet->owner; if (plan->pl_owner < FED || plan->pl_owner > ORI) plan->pl_owner = NOBODY; if (plan->pl_info != packet->info) redraw = 1; plan->pl_info = packet->info; /* Redraw the planet because it was updated by server */ if (plan->pl_flags != (int) ntohs(packet->flags)) redraw = 1; plan->pl_flags = (int) ntohs(packet->flags); if (plan->pl_armies != ntohl(packet->armies)) { /* don't redraw when armies change unless it crosses the '4' army * limit. Keeps people from watching for planet 'flicker' when * players are beaming */ int planetarmies = ntohl(packet->armies); if ((plan->pl_armies < 5 && planetarmies > 4) || (plan->pl_armies > 4 && planetarmies < 5)) redraw = 1; } plan->pl_armies = ntohl(packet->armies); #ifndef RECORDGAME if (plan->pl_info == 0) { plan->pl_owner = NOBODY; } #endif if (redraw) { plan->pl_flags |= PLREDRAW; } } void handlePhaser(struct phaser_spacket *packet) { struct phaser *phas; #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLAYER) { fprintf(stderr, "handlePhaser: bad index %d\n", packet->pnum); return; } if (packet->status == PHHIT && (ntohl(packet->target) < 0 || ntohl(packet->target) >= MAXPLAYER)) { fprintf(stderr, "handlePhaser: bad target %d\n", ntohl(packet->target)); return; } #endif weaponUpdate = 1; phas = &phasers[(unsigned char) packet->pnum]; phas->ph_status = packet->status; phas->ph_dir = packet->dir; phas->ph_x = ntohl(packet->x); phas->ph_y = ntohl(packet->y); phas->ph_target = ntohl(packet->target); phas->ph_fuse = 0; #ifdef SOUND phas->sound_phaser = 1; #endif phas->ph_updateFuse = PHASER_UPDATE_FUSE * server_ups / 10; #ifdef ROTATERACE if (rotate) { rotate_coord(&phas->ph_x, &phas->ph_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&phas->ph_dir, rotate_deg); } #endif if (gather_stats) { /* not getting any data?*/ /*STATS_SP_PHASER:\tpnum\tstats\tdir\tx\ty\ttarget*/ fprintf(statsFile, "\nSTATS_SP_PHASER\t"); fprintf(statsFile, "%d\t%d\t%u\t%d\t%d\t%d", ((struct phaser_spacket *) packet)->pnum, ((struct phaser_spacket *) packet)->status, ((struct phaser_spacket *) packet)->dir, ntohl(((struct phaser_spacket *) packet)->x), ntohl(((struct phaser_spacket *) packet)->y), ntohl(((struct phaser_spacket *) packet)->target)); } } void handleMessage(struct mesg_spacket *packet) { if (packet->m_from >= MAXPLAYER) packet->m_from = 255; #ifdef CORRUPTED_PACKETS packet->mesg[sizeof(packet->mesg) - 1] = '\0'; #endif /* printf("flags: 0x%x\n", packet->m_flags); * printf("from: %d\n", packet->m_from); * printf("recpt: %d\n", packet->m_recpt); * printf("mesg: %s\n", packet->mesg); */ dmessage(packet->mesg, packet->m_flags, packet->m_from, packet->m_recpt); if (gather_stats) { /*STATS_SP_MESSAGE:\tFLAGS\tRECPT\tFROM\tMESG*/ fprintf(statsFile, "\nSTATS_SP_MESSAGE:\t"); fprintf(statsFile, "0x%0X\t%d\t%d\t%s", ((struct mesg_spacket *) packet)->m_flags, ((struct mesg_spacket *) packet)->m_recpt, ((struct mesg_spacket *) packet)->m_from, ((struct mesg_spacket *) packet)->mesg); } } void handleQueue(struct queue_spacket *packet) { queuePos = ntohs(packet->pos); } void sendTeamReq(int team, int ship) { struct outfit_cpacket outfitReq; bzero(&outfitReq, sizeof(outfitReq)); outfitReq.type = CP_OUTFIT; outfitReq.team = team; outfitReq.ship = ship; sendServerPacket(&outfitReq); } void handlePickok(struct pickok_spacket *packet) { pickOk = packet->state; } void sendLoginReq(char *name, char *pass, char *login, char query) { struct login_cpacket packet; bzero(&packet, sizeof(packet)); strcpy(packet.name, name); strcpy(packet.password, pass); if (strlen(login) > 15) login[15] = 0; strcpy(packet.login, login); packet.type = CP_LOGIN; packet.query = query; sendServerPacket((struct player_spacket *) &packet); } void handleLogin(struct login_spacket *packet) { loginAccept = packet->accept; if (packet->accept) { /* no longer needed .. we have it in xtrekrc bcopy(packet->keymap, * mystats->st_keymap, 96); */ mystats->st_flags = ntohl(packet->flags); #ifdef nodef namemode = (me->p_stats.st_flags / ST_NAMEMODE) & 1; keeppeace = (me->p_stats.st_flags / ST_KEEPPEACE) & 1; showlocal = (me->p_stats.st_flags / ST_SHOWLOCAL) & 3; showgalactic = (me->p_stats.st_flags / ST_SHOWGLOBAL) & 3; #endif } } void sendTractorReq(char state, char pnum) { struct tractor_cpacket tractorReq; memset(&tractorReq, 0, sizeof(struct tractor_cpacket)); tractorReq.type = CP_TRACTOR; tractorReq.state = state; tractorReq.pnum = pnum; sendServerPacket((struct player_spacket *) &tractorReq); if (state) fTractor = pnum | 0x40; else fTractor = 0; } void sendRepressReq(char state, char pnum) { struct repress_cpacket repressReq; memset(&repressReq, 0, sizeof(struct repress_cpacket)); repressReq.type = CP_REPRESS; repressReq.state = state; repressReq.pnum = pnum; sendServerPacket((struct player_spacket *) &repressReq); if (state) fRepress = pnum | 0x40; else fRepress = 0; } void sendDetMineReq(short int torp) { struct det_mytorp_cpacket detReq; memset(&detReq, 0, sizeof(struct det_mytorp_cpacket)); detReq.type = CP_DET_MYTORP; detReq.tnum = htons(torp); sendServerPacket((struct player_spacket *) &detReq); } void handlePlasmaInfo(struct plasma_info_spacket *packet) { struct plasmatorp *thetorp; #ifdef CORRUPTED_PACKETS if (ntohs(packet->pnum) >= MAXPLAYER * MAXPLASMA) { fprintf(stderr, "handlePlasmaInfo: bad index %d\n", packet->pnum); return; } #endif weaponUpdate = 1; thetorp = &plasmatorps[ntohs(packet->pnum)]; thetorp->pt_updateFuse = MAX(2, PLASMA_UPDATE_FUSE * server_ups / 5); if (packet->status == PTEXPLODE && thetorp->pt_status == PTFREE) { /* FAT: redundant explosion; don't update p_nplasmatorp */ return; } if (!thetorp->pt_status && packet->status) { players[thetorp->pt_owner].p_nplasmatorp++; } if (thetorp->pt_status && !packet->status) { players[thetorp->pt_owner].p_nplasmatorp--; } thetorp->pt_war = packet->war; if (thetorp->pt_status != packet->status) { /* FAT: prevent explosion timer from being reset */ thetorp->pt_status = packet->status; if (thetorp->pt_status == PTEXPLODE) { thetorp->pt_fuse = NUMDETFRAMES * server_ups / 5; } } if (gather_stats) { /*STATS_SP_PLASMA_INFO:\tWAR\tSTATUS\tPNUM*/ fprintf(statsFile, "\nSTATS_SP_PLASMA_INFO:\t"); fprintf(statsFile, "%d\t%d\t%u", ((struct plasma_info_spacket *) packet)->war, ((struct plasma_info_spacket *) packet)->status, ntohs(((struct plasma_info_spacket *) packet)->pnum)); } } void handlePlasma(struct plasma_spacket *packet) { struct plasmatorp *thetorp; #ifdef CORRUPTED_PACKETS if (ntohs(packet->pnum) >= MAXPLAYER * MAXPLASMA) { fprintf(stderr, "handlePlasma: bad index %d\n", packet->pnum); return; } #endif weaponUpdate = 1; thetorp = &plasmatorps[ntohs(packet->pnum)]; thetorp->pt_x = ntohl(packet->x); thetorp->pt_y = ntohl(packet->y); thetorp->pt_updateFuse = MAX(2, PLASMA_UPDATE_FUSE * server_ups / 5); #ifdef ROTATERACE if (rotate) { rotate_coord(&thetorp->pt_x, &thetorp->pt_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); } #endif if (gather_stats) { /*STATS_SP_PLASMA:\tPNUM\tX\tY*/ fprintf(statsFile, "\nSTATS_SP_PLASMA:\t%u\t%d\t%d", ntohs(((struct plasma_spacket *) packet)->pnum), ntohl(((struct plasma_spacket *) packet)->x), ntohl(((struct plasma_spacket *) packet)->y)); } } void handleFlags(struct flags_spacket *packet) { struct player* pl; pl = &players[(unsigned char) packet->pnum]; #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLAYER) { fprintf(stderr, "handleFlags: bad index %d\n", packet->pnum); return; } #endif if (pl->p_flags != ntohl(packet->flags) #ifdef INCLUDE_VISTRACT || pl->p_tractor != ((short) packet->tractor & (~0x40)) #endif ) { /* FAT: prevent redundant player update */ redrawPlayer[(unsigned char) packet->pnum] = 1; } else return; pl->p_flags = ntohl(packet->flags); #ifdef INCLUDE_VISTRACT if (packet->tractor & 0x40) { pl->p_tractor = (short) packet->tractor & (~0x40); /* ATM visible tractors */ } else #endif /* INCLUDE_VISTRACT */ pl->p_tractor = -1; } void handleKills(struct kills_spacket *packet) { #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLAYER) { fprintf(stderr, "handleKills: bad index %d\n", packet->pnum); return; } #endif if (players[(unsigned char) packet->pnum].p_kills != ntohl(packet->kills) / 100.0) { players[(unsigned char) packet->pnum].p_kills = ntohl(packet->kills) / 100.0; /* FAT: prevent redundant player update */ PlistNoteUpdate((unsigned char) packet->pnum); #ifdef ARMY_SLIDER if (me == &players[(unsigned char) packet->pnum]) { calibrate_stats(); redrawStats(); } #endif /* ARMY_SLIDER */ } if (gather_stats) { /*STATS_SP_KILLS:\tPNUM\tKILLS*/ fprintf(statsFile, "\nSTATS_SP_KILLS:\t"); fprintf(statsFile, "%d\t%u", ((struct kills_spacket *) packet)->pnum, ntohl(((struct kills_spacket *) packet)->kills)); } } void handlePStatus(struct pstatus_spacket *packet) { register struct player *j; #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLAYER) { fprintf(stderr, "handlePStatus: bad index %d\n", packet->pnum); return; } #endif j = &players[(unsigned char) packet->pnum]; if (packet->status == j->p_status) return; if (packet->status == PEXPLODE) { j->p_explode = 0; } /* Ignore DEAD status. Instead, we treat it as PEXPLODE. This gives us time * * * to animate all the frames necessary for the explosions at our own * pace. */ else if (packet->status == PDEAD) { packet->status = PEXPLODE; if (j->p_status == PEXPLODE) /* Prevent redundant updates * */ return; } /* guarantees we won't miss the kill message since this is TCP */ else if (packet->status == PALIVE && j->p_status != PALIVE) j->p_kills = 0.; /* update the player list, especially if this signals a new arrival */ PlistNoteUpdate((unsigned char) packet->pnum); if (j->p_status == PFREE || packet->status == PFREE) PlistNoteArrive(packet->pnum); j->p_status = packet->status; redrawPlayer[(unsigned char) packet->pnum] = 1; } void handleMotd(struct motd_spacket *packet) { packet->line[sizeof(packet->line) - 1] = '\0'; newMotdLine(packet->line); } void sendMessage(char *mes, int group, int indiv) { struct mesg_cpacket mesPacket; bzero(&mesPacket, sizeof(mesPacket)); #ifdef SHORT_PACKETS if (recv_short) { int size; size = strlen(mes); size += 5; /* 1 for '\0', 4 * * * packetheader */ if ((size % 4) != 0) size += (4 - (size % 4)); mesPacket.pad1 = (char) size; sizes[CP_S_MESSAGE] = size; mesPacket.type = CP_S_MESSAGE; } else #endif mesPacket.type = CP_MESSAGE; mesPacket.group = group; mesPacket.indiv = indiv; STRNCPY(mesPacket.mesg, mes, 80); sendServerPacket((struct player_spacket *) &mesPacket); } void handleMask(struct mask_spacket *packet) { motd_refresh(); tournMask = packet->mask; } void sendOptionsPacket(void) { struct options_cpacket optPacket; bzero(&optPacket, sizeof(optPacket)); optPacket.type = CP_OPTIONS; optPacket.flags = htonl(ST_MAPMODE + /* always on */ ST_NAMEMODE * namemode + ST_SHOWSHIELDS + /* always on */ ST_KEEPPEACE * keeppeace + ST_SHOWLOCAL * showlocal + ST_SHOWGLOBAL * showgalactic); MCOPY(mystats->st_keymap, optPacket.keymap, 96); sendServerPacket((struct player_spacket *) &optPacket); } static void pickSocket(int old) { int newsocket; struct socket_cpacket sockPack; /* If baseLocalPort is defined we want to start from that */ if(baseLocalPort) newsocket = baseLocalPort; else newsocket = (getpid() & 32767); while (newsocket < 2048 || newsocket == old) { if(baseLocalPort) newsocket++; else newsocket = (newsocket + 10687) & 32767; } bzero(&sockPack,sizeof(sockPack)); sockPack.type = CP_SOCKET; sockPack.socket = htonl(newsocket); sockPack.version = (char) SOCKVERSION; sockPack.udp_version = (char) UDPVERSION; sendServerPacket((struct player_spacket *) &sockPack); /* Did we get new socket # sent? */ if (serverDead) return; nextSocket = newsocket; } static void handleBadVersionSorry (char *reason) { printf("%s\nTry again later.\n", reason); } void handleBadVersion(struct badversion_spacket *packet) { int badversion = packet->why; if (badversion >= 0 && badversion <= MAXBADVERSION) { handleBadVersionSorry(badversion_long_strings[badversion]); } terminate(EXIT_BADVERSION_BASE+badversion); } int gwrite(int fd, char *buf, register int bytes) { LONG orig = bytes; register LONG n; while (bytes) { n = write(fd, buf, bytes); if (n < 0) { if (fd == udpSock) { fprintf(stderr, "Tried to write %d, %d\n", fd, bytes); perror("write"); printUdpInfo(); } return -1; } bytes -= n; buf += n; } return orig; } void handleHostile(struct hostile_spacket *packet) { int p_no = packet->pnum; struct player *pl; #ifdef CORRUPTED_PACKETS if (p_no < 0 || p_no >= MAXPLAYER) { fprintf(stderr, "handleHostile: bad index %d\n", p_no); return; } #endif pl = &players[p_no]; if (pl->p_swar != packet->war || pl->p_hostile != packet->hostile) { /* FAT: prevent redundant player update & redraw */ pl->p_swar = packet->war; pl->p_hostile = packet->hostile; PlistNoteHostile(p_no); redrawPlayer[p_no] = 1; } } void handlePlyrLogin(struct plyr_login_spacket *packet, int sock) { int p_no = packet->pnum; struct player *pl; #ifdef CORRUPTED_PACKETS if (sock == udpSock) { fprintf(stderr, "garbage packet discarded.\n"); return; } if (packet->pnum < 0 || packet->pnum >= MAXPLAYER) { fprintf(stderr, "handlePlyrLogin: bad index %d\n", p_no); return; } packet->name[sizeof(packet->name) - 1] = '\0'; packet->monitor[sizeof(packet->monitor) - 1] = '\0'; packet->login[sizeof(packet->login) - 1] = '\0'; #endif pl = &players[p_no]; if (identityBlind) { strcpy(pl->p_name, ""); strcpy(pl->p_monitor, ""); strcpy(pl->p_login, ""); pl->p_stats.st_rank = 0; } else { strcpy(pl->p_name, packet->name); strcpyp_return(pl->p_monitor, packet->monitor, sizeof(pl->p_monitor)); strcpy(pl->p_login, packet->login); pl->p_stats.st_rank = packet->rank; } if (p_no == me->p_no) { /* This is me. Set some stats */ if (lastRank == -1) { if (loggedIn) { lastRank = packet->rank; } } else { if (lastRank != packet->rank) { lastRank = packet->rank; promoted = 1; } } } PlistNoteUpdate(p_no); if (gather_stats) { /* STATS_SP_PLAYER:PNUN,RANK,NAME,MONITOR,LOGIN */ fprintf(statsFile, "\nSTATS_SP_PL_LOGIN:\t"); fprintf(statsFile, "%d\t%d\t%s\t%s\t%s", ((struct plyr_login_spacket *) packet)->pnum, ((struct plyr_login_spacket *) packet)->rank, ((struct plyr_login_spacket *) packet)->name, ((struct plyr_login_spacket *) packet)->monitor, ((struct plyr_login_spacket *) packet)->login); } } void handleStats(struct stats_spacket *packet) { int p_no = packet->pnum; struct player *pl; #ifdef CORRUPTED_PACKETS if (p_no < 0 || p_no >= MAXPLAYER) { fprintf(stderr, "handleStats: bad index %d\n", p_no); return; } #endif pl = &players[p_no]; pl->p_stats.st_tkills = ntohl(packet->tkills); pl->p_stats.st_tlosses = ntohl(packet->tlosses); pl->p_stats.st_kills = ntohl(packet->kills); pl->p_stats.st_losses = ntohl(packet->losses); pl->p_stats.st_tticks = ntohl(packet->tticks); pl->p_stats.st_tplanets = ntohl(packet->tplanets); pl->p_stats.st_tarmsbomb = ntohl(packet->tarmies); pl->p_stats.st_sbkills = ntohl(packet->sbkills); pl->p_stats.st_sblosses = ntohl(packet->sblosses); pl->p_stats.st_armsbomb = ntohl(packet->armies); pl->p_stats.st_planets = ntohl(packet->planets); if ((pl->p_ship.s_type == STARBASE) && (SBhours)) { pl->p_stats.st_sbticks = ntohl(packet->maxkills); } else { pl->p_stats.st_maxkills = ntohl(packet->maxkills) / 100.0; } pl->p_stats.st_sbmaxkills = ntohl(packet->sbmaxkills) / 100.0; /* For some reason, we get updates for freed players. When this happens, don't bother to update the player list. */ if (pl->p_status != PFREE) PlistNoteUpdate(p_no); } void handlePlyrInfo(struct plyr_info_spacket *packet) { int p_no = packet->pnum; struct player *pl; static int lastship = -1; #ifdef CORRUPTED_PACKETS if (p_no < 0 || p_no >= MAXPLAYER) { fprintf(stderr, "handlePlyrInfo: bad index %d\n", p_no); return; } if (packet->team > ALLTEAM) { fprintf(stderr, "handlePlyrInfo: bad team %d\n", packet->team); return; } #endif pl = &players[p_no]; PlistNoteUpdate(p_no); if ((pl->p_team != packet->team) || /* Check 0 system default */ ((pl->p_team == 0) && (pl->p_mapchars[0] != teamlet[0]))) { pl->p_team = packet->team; pl->p_mapchars[0] = teamlet[pl->p_team]; PlistNoteArrive(p_no); if (pl == me) redrawall = 1; /* Update the map if I * * * change teams */ } getship(&pl->p_ship, packet->shiptype); pl->p_mapchars[1] = shipnos[pl->p_no]; if (me == pl && lastship != me->p_ship.s_type) { redrawTstats(); calibrate_stats(); redrawStats(); /* TSH */ } redrawPlayer[p_no] = 1; if (gather_stats) { /*STATS_SP_PLAYER_INFO:\tPNUM\tSHIPTYPE\tTEAM*/ fprintf(statsFile, "\nSTATS_SP_PLAYER_INFO:\t"); fprintf(statsFile, "%d\t%d\t%d", ((struct plyr_info_spacket *) packet)->pnum, ((struct plyr_info_spacket *) packet)->shiptype, ((struct plyr_info_spacket *) packet)->team); } } void sendUpdatePacket(LONG speed) { struct updates_cpacket packet; packet.type = CP_UPDATES; timerDelay = speed; packet.usecs = htonl(speed); sendServerPacket((struct player_spacket *) &packet); } void handlePlanetLoc(struct planet_loc_spacket *packet) { int pl_no = packet->pnum; struct planet *pl; #ifdef CORRUPTED_PACKETS if (pl_no < 0 || pl_no >= MAXPLANETS) { fprintf(stderr, "handlePlanetLoc: bad index\n"); return; } #endif pl = &planets[pl_no]; pl_update[pl_no].plu_x = pl->pl_x; pl_update[pl_no].plu_y = pl->pl_y; if (pl_update[pl_no].plu_update != -1) { pl_update[pl_no].plu_update = 1; } else pl_update[pl_no].plu_update = 0; pl->pl_x = ntohl(packet->x); pl->pl_y = ntohl(packet->y); strcpy(pl->pl_name, packet->name); pl->pl_namelen = strlen(packet->name); pl->pl_flags |= (PLREDRAW | PLCLEAR); reinitPlanets = 1; #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->pl_x, &pl->pl_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); } #endif if (gather_stats) { /*STATS_SP_PLANET_LOC:\tPNUM\tX\tY\tNAME*/ fprintf(statsFile, "\nSTATS_SP_PLANET_LOC:\t"); fprintf(statsFile, "%d\t%d\t%d\t%s", ((struct planet_loc_spacket *) packet)->pnum, ntohl(((struct planet_loc_spacket *) packet)->x), ntohl(((struct planet_loc_spacket *) packet)->y), ((struct planet_loc_spacket *) packet)->name); } } void handleReserved(struct reserved_spacket *packet, int sock) { struct reserved_cpacket response; bzero(&response, sizeof(response)); #ifdef CORRUPTED_PACKETS if (sock == udpSock) { fprintf(stderr, "garbage Reserved packet discarded.\n"); return; } #endif #if !defined(BORG) #ifndef RSA encryptReservedPacket(packet, &response, serverName, me->p_no); sendServerPacket((struct player_spacket *) &response); #else if (RSA_Client) { /* can use -o option for old * * * blessing */ /* client sends back a 'reserved' packet just saying RSA_VERSION info */ /* theoretically, the server then sends off a rsa_key_spacket * for the * * * client to then respond to */ warning(RSA_VERSION); STRNCPY(response.resp, RSA_VERSION, RESERVED_SIZE); MCOPY(packet->data, response.data, RESERVED_SIZE); response.type = CP_RESERVED; #ifdef DEBUG printf("Sending RSA reserved response\n"); #endif } else { /* If server gods don't like NEWMACRO/SMARTMACRO they better install * * * RSA... */ UseNewMacro = 1; UseSmartMacro = 1; encryptReservedPacket(packet, &response, serverName, me->p_no); } sendServerPacket((struct player_spacket *) &response); #endif /* RSA */ #endif /* defined(BORG) */ } void handleShipCap(struct ship_cap_spacket *packet) { unsigned short stype; stype = ntohs(packet->s_type); shipvals[stype].s_torpspeed = ntohs(packet->s_torpspeed); shipvals[stype].s_maxshield = ntohl(packet->s_maxshield); shipvals[stype].s_maxdamage = ntohl(packet->s_maxdamage); shipvals[stype].s_maxegntemp = ntohl(packet->s_maxegntemp); shipvals[stype].s_maxwpntemp = ntohl(packet->s_maxwpntemp); shipvals[stype].s_maxarmies = ntohs(packet->s_maxarmies); shipvals[stype].s_maxfuel = ntohl(packet->s_maxfuel); shipvals[stype].s_maxspeed = ntohl(packet->s_maxspeed); shipvals[stype].s_width = ntohs(packet->s_width); shipvals[stype].s_height = ntohs(packet->s_height); shipvals[stype].s_phaserdamage = ntohs(packet->s_phaserrange); getship(myship, myship->s_type); } static void handleGeneric32_a (struct generic_32_spacket_a *packet) { me->p_repair_time = packet->repair_time; me->pl_orbit = packet->pl_orbit; } static void handleGeneric32_b (struct generic_32_spacket_b *packet) { int rate; static int unsafe = GU_UNSAFE; static int idling = 0; static int saved_ups = 0; me->p_repair_time = ntohs(packet->repair_time); me->pl_orbit = packet->pl_orbit; context->gameup = ntohs(packet->gameup); context->tournament_teams = packet->tournament_teams; context->tournament_age = packet->tournament_age; context->tournament_age_units = packet->tournament_age_units; context->tournament_remain = packet->tournament_remain; context->tournament_remain_units = packet->tournament_remain_units; context->starbase_remain = packet->starbase_remain; context->team_remain = packet->team_remain; /* to maintain update rate when safe-idle, set updatespersec.idle: -1 */ rate = intDefault("updatespersec.idle", 1); if ((unsafe ^ context->gameup) & GU_UNSAFE) { unsafe = context->gameup; if (context->gameup & GU_UNSAFE) { if (idling) { if (rate < 0) { warning("Safe idle stop."); } else { sendUpdatePacket(1000000 / saved_ups); warning("Safe idle stop, normal update rate resumed."); } if (context->tournament_age_units == 's' && context->tournament_age < 5 && booleanDefault("game-begin-while-idle-beep", 1)) W_Beep(); idling = 0; } } else { if (!(context->gameup & GU_UNSAFE)) { if (!idling) { if (rate < 0) { warning("Safe idle start."); } else { saved_ups = client_ups; sendUpdatePacket(1000000 / rate); idling++; warning("Safe idle start, update rate reduced."); } } } } } } static void handleGeneric32 (struct generic_32_spacket *packet) { switch (packet->version) { case 0x60+GENERIC_32_VERSION_A: handleGeneric32_a((struct generic_32_spacket_a *) packet); break; case 0x60+GENERIC_32_VERSION_B: handleGeneric32_b((struct generic_32_spacket_b *) packet); break; } } void handleRank (struct rank_spacket *packet) { int i = packet->rnum; int j = packet->rmax + 1; if (i < 0 || j < 0 || i > j) return; if (j > nranks) { ranks = (struct rank *) realloc(ranks, j * sizeof(struct rank)); memset(&ranks[nranks], 0, (j - nranks) * sizeof(struct rank)); } nranks = j; W_ChangeBorder(rankw, gColor); packet->name[15] = 0; ranks[i].name = strdup(packet->name); packet->cname[7] = 0; ranks[i].cname = strdup(packet->cname); ranks[i].hours = (float) (ntohl (packet->hours) / 100.0); ranks[i].ratings = (float) (ntohl (packet->ratings) / 100.0); ranks[i].offense = (float) (ntohl (packet->offense) / 100.0); } static void dump_prefix(const char *abbr, const char *name) { fprintf(stderr, "%-10s %-30s ", abbr, name); } #define dump_stat(STAT) { \ fprintf(stderr, " %8u\n", (unsigned int) ltd.STAT); \ } #define dump_max(STAT) { \ fprintf(stderr, " %8u\n", (unsigned int) ltd.STAT); \ } void handleLtd (struct ltd_spacket *packet) { if (packet->version != LTD_VERSION) return; struct ltd_stats ltd; ltd.kills.total = ntohl(packet->kt); ltd.kills.max = (double)(ntohl(packet->kmax)) / 100.0; ltd.kills.first = ntohl(packet->k1); ltd.kills.first_potential = ntohl(packet->k1p); ltd.kills.first_converted = ntohl(packet->k1c); ltd.kills.second = ntohl(packet->k2); ltd.kills.second_potential = ntohl(packet->k2p); ltd.kills.second_converted = ntohl(packet->k2c); ltd.kills.phasered = ntohl(packet->kbp); ltd.kills.torped = ntohl(packet->kbt); ltd.kills.plasmaed = ntohl(packet->kbs); ltd.deaths.total = ntohl(packet->dt); ltd.deaths.potential = ntohl(packet->dpc); ltd.deaths.converted = ntohl(packet->dcc); ltd.deaths.dooshed = ntohl(packet->ddc); ltd.deaths.phasered = ntohl(packet->dbp); ltd.deaths.torped = ntohl(packet->dbt); ltd.deaths.plasmaed = ntohl(packet->dbs); ltd.deaths.acc = ntohl(packet->acc); ltd.planets.taken = ntohl(packet->ptt); ltd.planets.destroyed = ntohl(packet->pdt); ltd.bomb.planets = ntohl(packet->bpt); ltd.bomb.planets_8 = ntohl(packet->bp8); ltd.bomb.planets_core = ntohl(packet->bpc); ltd.bomb.armies = ntohl(packet->bat); ltd.bomb.armies_8 = ntohl(packet->ba8); ltd.bomb.armies_core = ntohl(packet->bac); ltd.ogged.armies = ntohl(packet->oat); ltd.ogged.dooshed = ntohl(packet->odc); ltd.ogged.converted = ntohl(packet->occ); ltd.ogged.potential = ntohl(packet->opc); ltd.ogged.bigger_ship = ntohl(packet->ogc); ltd.ogged.same_ship = ntohl(packet->oec); ltd.ogged.smaller_ship = ntohl(packet->olc); ltd.ogged.sb_armies = ntohl(packet->osba); ltd.ogged.friendly = ntohl(packet->ofc); ltd.ogged.friendly_armies = ntohl(packet->ofa); ltd.armies.total = ntohl(packet->at); ltd.armies.attack = ntohl(packet->aa); ltd.armies.reinforce = ntohl(packet->ar); ltd.armies.ferries = ntohl(packet->af); ltd.armies.killed = ntohl(packet->ak); ltd.carries.total = ntohl(packet->ct); ltd.carries.partial = ntohl(packet->cp); ltd.carries.completed = ntohl(packet->cc); ltd.carries.attack = ntohl(packet->ca); ltd.carries.reinforce = ntohl(packet->cr); ltd.carries.ferries = ntohl(packet->cf); ltd.ticks.total = ntohl(packet->tt); ltd.ticks.yellow = ntohl(packet->tyel); ltd.ticks.red = ntohl(packet->tred); ltd.ticks.zone[0] = ntohl(packet->tz0); ltd.ticks.zone[1] = ntohl(packet->tz1); ltd.ticks.zone[2] = ntohl(packet->tz2); ltd.ticks.zone[3] = ntohl(packet->tz3); ltd.ticks.zone[4] = ntohl(packet->tz4); ltd.ticks.zone[5] = ntohl(packet->tz5); ltd.ticks.zone[6] = ntohl(packet->tz6); ltd.ticks.zone[7] = ntohl(packet->tz7); ltd.ticks.potential = ntohl(packet->tpc); ltd.ticks.carrier = ntohl(packet->tcc); ltd.ticks.repair = ntohl(packet->tr); ltd.damage_repaired = ntohl(packet->dr); ltd.weapons.phaser.fired = ntohl(packet->wpf); ltd.weapons.phaser.hit = ntohl(packet->wph); ltd.weapons.phaser.damage.inflicted = ntohl(packet->wpdi); ltd.weapons.phaser.damage.taken = ntohl(packet->wpdt); ltd.weapons.torps.fired = ntohl(packet->wtf); ltd.weapons.torps.hit = ntohl(packet->wth); ltd.weapons.torps.detted = ntohl(packet->wtd); ltd.weapons.torps.selfdetted = ntohl(packet->wts); ltd.weapons.torps.wall = ntohl(packet->wtw); ltd.weapons.torps.damage.inflicted = ntohl(packet->wtdi); ltd.weapons.torps.damage.taken = ntohl(packet->wtdt); ltd.weapons.plasma.fired = ntohl(packet->wsf); ltd.weapons.plasma.hit = ntohl(packet->wsh); ltd.weapons.plasma.phasered = ntohl(packet->wsp); ltd.weapons.plasma.wall = ntohl(packet->wsw); ltd.weapons.plasma.damage.inflicted = ntohl(packet->wsdi); ltd.weapons.plasma.damage.taken = ntohl(packet->wsdt); return; fprintf(stderr, "SP_LTD test output begins\n"); dump_prefix("kt", "kills total"); dump_stat(kills.total); dump_prefix("kmax", "kills max"); dump_max(kills.max); dump_prefix("k1", "kills first"); dump_stat(kills.first); dump_prefix("k1p", "kills first potential"); dump_stat(kills.first_potential); dump_prefix("k1c", "kills first converted"); dump_stat(kills.first_converted); dump_prefix("k2", "kills second"); dump_stat(kills.second); dump_prefix("k2p", "kills second potential"); dump_stat(kills.second_potential); dump_prefix("k2c", "kills second converted"); dump_stat(kills.second_converted); dump_prefix("kbp", "kills by phaser"); dump_stat(kills.phasered); dump_prefix("kbt", "kills by torp"); dump_stat(kills.torped); dump_prefix("kbs", "kills by smack"); dump_stat(kills.plasmaed); dump_prefix("dt", "deaths total"); dump_stat(deaths.total); dump_prefix("dpc", "deaths as potential carrier"); dump_stat(deaths.potential); dump_prefix("dcc", "deaths as converted carrier"); dump_stat(deaths.converted); dump_prefix("ddc", "deaths as dooshed carrier"); dump_stat(deaths.dooshed); dump_prefix("dbp", "deaths by phaser"); dump_stat(deaths.phasered); dump_prefix("dbt", "deaths by torp"); dump_stat(deaths.torped); dump_prefix("dbs", "deaths by smack"); dump_stat(deaths.plasmaed); dump_prefix("acc", "actual carriers created"); dump_stat(deaths.acc); dump_prefix("ptt", "planets taken total"); dump_stat(planets.taken); dump_prefix("pdt", "planets destroyed total"); dump_stat(planets.destroyed); dump_prefix("bpt", "bombed planets total"); dump_stat(bomb.planets); dump_prefix("bp8", "bombed planets <=8"); dump_stat(bomb.planets_8); dump_prefix("bpc", "bombed planets core"); dump_stat(bomb.planets_core); dump_prefix("bat", "bombed armies total"); dump_stat(bomb.armies); dump_prefix("ba8", "bombed_armies <= 8"); dump_stat(bomb.armies_8); dump_prefix("bac", "bombed armies core"); dump_stat(bomb.armies_core); dump_prefix("oat", "ogged armies total"); dump_stat(ogged.armies); dump_prefix("odc", "ogged dooshed carrier"); dump_stat(ogged.dooshed); dump_prefix("occ", "ogged converted carrier"); dump_stat(ogged.converted); dump_prefix("opc", "ogged potential carrier"); dump_stat(ogged.potential); dump_prefix("o>c", "ogged bigger carrier"); dump_stat(ogged.bigger_ship); dump_prefix("o=c", "ogged same carrier"); dump_stat(ogged.same_ship); dump_prefix("odata; MCOPY(&saddr.sin_addr.s_addr, data, sizeof(saddr.sin_addr.s_addr)); data += sizeof(saddr.sin_addr.s_addr); MCOPY(&saddr.sin_port, data, sizeof(saddr.sin_port)); rsa_black_box(response.resp, packet->data, response.public, response.global); sendServerPacket((struct player_spacket *) &response); } #endif #ifdef INCLUDE_SCAN void handleScan(packet) struct scan_spacket *packet; { struct player *pp; #ifdef CORRUPTED_PACKETS if (packet->pnum >= MAXPLAYER) { fprintf(stderr, "handleScan: bad index\n"); return; } #endif if (packet->success) { pp = &players[packet->pnum]; pp->p_fuel = ntohl(packet->p_fuel); pp->p_armies = ntohl(packet->p_armies); pp->p_shield = ntohl(packet->p_shield); pp->p_damage = ntohl(packet->p_damage); pp->p_etemp = ntohl(packet->p_etemp); pp->p_wtemp = ntohl(packet->p_wtemp); informScan(packet->pnum); } } informScan(p) int p; { } #endif /* INCLUDE_SCAN */ /* UDP stuff */ void sendUdpReq(int req) { struct udp_req_cpacket packet; memset(&packet, 0, sizeof(struct udp_req_cpacket)); packet.type = CP_UDP_REQ; packet.request = req; if (req >= COMM_MODE) { packet.request = COMM_MODE; packet.connmode = req - COMM_MODE; sendServerPacket((struct player_spacket *) &packet); return; } if (req == COMM_UPDATE) { #ifdef SHORT_PACKETS if (recv_short) { /* not necessary */ /* Let the client do the work, and not the network :-) */ resetWeaponInfo(); } #endif sendServerPacket((struct player_spacket *) &packet); warning("Sent request for full update"); return; } if (req == commModeReq) { warning("Request is in progress, do not disturb"); return; } if (req == COMM_UDP) { /* open UDP port */ if (openUdpConn() >= 0) { UDPDIAG(("Bound to local port %d on fd %d\n", udpLocalPort, udpSock)); } else { UDPDIAG(("Bind to local port %d failed\n", udpLocalPort)); commModeReq = COMM_TCP; commStatus = STAT_CONNECTED; commSwitchTimeout = 0; if (udpWin) udprefresh(UDP_STATUS); warning("Unable to establish UDP connection"); return; } } /* send the request */ packet.type = CP_UDP_REQ; packet.request = req; packet.port = htonl(udpLocalPort); #ifdef GATEWAY if (!strcmp(serverName, gw_mach)) { packet.port = htons(gw_serv_port); /* gw port that server * * * should call */ UDPDIAG(("+ Telling server to contact us on %d\n", gw_serv_port)); } #endif #ifdef UDP_PORTSWAP if (portSwap) packet.connmode = CONNMODE_PORT; /* have him send his port */ else #endif packet.connmode = CONNMODE_PACKET; /* we get addr from packet */ sendServerPacket((struct player_spacket *) &packet); /* update internal state stuff */ commModeReq = req; if (req == COMM_TCP) commStatus = STAT_SWITCH_TCP; else commStatus = STAT_SWITCH_UDP; commSwitchTimeout = 25; /* wait 25 updates (about * * * five seconds) */ UDPDIAG(("Sent request for %s mode\n", (req == COMM_TCP) ? "TCP" : "UDP")); #ifdef UDP_PORTSWAP if (!portSwap) #endif if ((req == COMM_UDP) && recvUdpConn() < 0) { UDPDIAG(("Sending TCP reset message\n")); packet.request = COMM_TCP; packet.port = 0; commModeReq = COMM_TCP; sendServerPacket((struct player_spacket *) &packet); /* we will likely get a SWITCH_UDP_OK later; better ignore it */ commModeReq = COMM_TCP; commStatus = STAT_CONNECTED; commSwitchTimeout = 0; } if (udpWin) udprefresh(UDP_STATUS); } void handleUdpReply(struct udp_reply_spacket *packet) { struct udp_req_cpacket response; UDPDIAG(("Received UDP reply %d\n", packet->reply)); commSwitchTimeout = 0; memset(&response, 0, sizeof(struct udp_req_cpacket)); response.type = CP_UDP_REQ; switch (packet->reply) { case SWITCH_TCP_OK: if (commMode == COMM_TCP) { UDPDIAG(("Got SWITCH_TCP_OK while in TCP mode; ignoring\n")); } else { commMode = COMM_TCP; commStatus = STAT_CONNECTED; warning("Switched to TCP-only connection"); closeUdpConn(); UDPDIAG(("UDP port closed\n")); if (udpWin) { udprefresh(UDP_STATUS); udprefresh(UDP_CURRENT); } } break; case SWITCH_UDP_OK: if (commMode == COMM_UDP) { UDPDIAG(("Got SWITCH_UDP_OK while in UDP mode; ignoring\n")); } else { /* the server is forcing UDP down our throat? */ if (commModeReq != COMM_UDP) { UDPDIAG(("Got unsolicited SWITCH_UDP_OK; ignoring\n")); } else { #ifdef UDP_PORTSWAP if (portSwap) { udpServerPort = ntohl(packet->port); if (connUdpConn() < 0) { UDPDIAG(("Unable to connect, resetting\n")); warning("Connection attempt failed"); commModeReq = COMM_TCP; commStatus = STAT_CONNECTED; if (udpSock >= 0) closeUdpConn(); if (udpWin) { udprefresh(UDP_STATUS); udprefresh(UDP_CURRENT); } response.request = COMM_TCP; response.port = 0; goto send; } } #else /* this came down UDP, so we MUST be connected */ /* (do the verify thing anyway just for kicks) */ #endif UDPDIAG(("Connected to server's UDP port\n")); commStatus = STAT_VERIFY_UDP; if (udpWin) udprefresh(UDP_STATUS); response.request = COMM_VERIFY; /* send verify request on * * * UDP */ response.port = 0; commSwitchTimeout = 25; /* wait 25 updates */ send: sendServerPacket((struct player_spacket *) &response); } } break; case SWITCH_DENIED: if (ntohs(packet->port)) { UDPDIAG(("Switch to UDP failed (different version)\n")); warning("UDP protocol request failed (bad version)"); } else { UDPDIAG(("Switch to UDP denied\n")); warning("UDP protocol request denied"); } commModeReq = commMode; commStatus = STAT_CONNECTED; commSwitchTimeout = 0; if (udpWin) udprefresh(UDP_STATUS); if (udpSock >= 0) closeUdpConn(); break; case SWITCH_VERIFY: UDPDIAG(("Received UDP verification\n")); break; default: fprintf(stderr, "netrek: Got funny reply (%d) in UDP_REPLY packet\n", packet->reply); break; } } #define MAX_PORT_RETRY 10 static int openUdpConn(void) { struct sockaddr_in addr; struct hostent *hp; int attempts; if (udpSock >= 0) { fprintf(stderr, "netrek: tried to open udpSock twice\n"); return 0; /* pretend we succeeded * * * (this could be bad) */ } if ((udpSock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("netrek: unable to create DGRAM socket"); return -1; } #ifdef nodef set_udp_opts(udpSock); #endif /* nodef */ if (udpSock >= max_fd) max_fd = udpSock + 1; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_family = AF_INET; errno = 0; udpLocalPort = (getpid() & 32767) + (RANDOM() % 256); /* if baseLocalPort is defined, we want to start from that */ if (baseLocalPort) { udpLocalPort = baseLocalPort; UDPDIAG(("using base port %d\n", baseLocalPort)); } for (attempts = 0; attempts < MAX_PORT_RETRY; attempts++) { while (udpLocalPort < 2048) { udpLocalPort = (udpLocalPort + 10687) & 32767; } #ifdef GATEWAY /* we need the gateway to know where to find us */ if (!strcmp(serverName, gw_mach)) { UDPDIAG(("+ gateway test: binding to %d\n", gw_local_port)); udpLocalPort = gw_local_port; } #endif addr.sin_port = htons(udpLocalPort); if (bind(udpSock, (struct sockaddr *) &addr, sizeof(addr)) >= 0) break; /* bind() failed, so find another port. If we're tunneling through a * * * * router-based firewall, we just increment; otherwise we try to mix * it * * up a little. The check for ports < 2048 is done above. */ if (baseLocalPort) udpLocalPort++; else udpLocalPort = (udpLocalPort + 10687) & 32767; } if (attempts == MAX_PORT_RETRY) { perror("netrek: bind"); UDPDIAG(("Unable to find a local port to bind to\n")); close(udpSock); udpSock = -1; return -1; } UDPDIAG(("Local port is %d\n", udpLocalPort)); /* determine the address of the server */ if (!serveraddr) { if ((addr.sin_addr.s_addr = inet_addr(serverName)) == -1) { if ((hp = gethostbyname(serverName)) == NULL) { printf("Who is %s?\n", serverName); terminate(0); } else { addr.sin_addr.s_addr = *(LONG *) hp->h_addr; } } serveraddr = addr.sin_addr.s_addr; UDPDIAG(("Found serveraddr == %s\n", inet_ntoa(addr.sin_addr))); } return 0; } #ifdef UDP_PORTSWAP int connUdpConn() { struct sockaddr_in addr; addr.sin_addr.s_addr = serveraddr; addr.sin_family = AF_INET; addr.sin_port = htons(udpServerPort); UDPDIAG(("Connecting to host %s on port %d\n", inet_ntoa(addr.sin_addr), udpServerPort)); if (connect(udpSock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("netrek: unable to connect UDP socket"); printUdpInfo(); /* debug */ return -1; } #ifdef nodef len = sizeof(addr); if (getsockname(udpSock, &addr, &len) < 0) { perror("netrek: unable to getsockname(UDP)"); UDPDIAG(("Can't get our own socket; connection failed\n")); close(udpSock); udpSock = -1; return -1; } printf("udpLocalPort %d, getsockname port %d\n", udpLocalPort, addr.sin_port); #endif return 0; } #endif static int recvUdpConn(void) { fd_set readfds; struct timeval to; struct sockaddr_in from; int res; socklen_t fromlen; MZERO(&from, sizeof(from)); /* don't get garbage if * * * really broken */ ns_init(3); /* we patiently wait until the server sends a packet to us */ /* (note that we silently eat the first one) */ UDPDIAG(("Issuing recvfrom() call\n")); printUdpInfo(); fromlen = sizeof(from); FD_ZERO(&readfds); FD_SET(udpSock, &readfds); to.tv_sec = 6; /* wait 3 seconds, then * * * abort */ to.tv_usec = 0; if ((res = SELECT(max_fd, &readfds, 0, 0, &to)) <= 0) { if (!res) { UDPDIAG(("timed out waiting for response\n")); warning("UDP connection request timed out"); return -1; } else { perror("select() before recvfrom()"); return -1; } } if (recvfrom(udpSock, buf, BUFSIZE, 0, (struct sockaddr *) &from, &fromlen) < 0) { perror("recvfrom"); UDPDIAG(("recvfrom failed, aborting UDP attempt\n")); return -1; } if (from.sin_addr.s_addr != serveraddr) { /* safe? */ serveraddr = from.sin_addr.s_addr; UDPDIAG(("Warning: from different IP\n")); } if (from.sin_family != AF_INET) { UDPDIAG(("Warning: not AF_INET (%d)\n", from.sin_family)); } udpServerPort = ntohs(from.sin_port); UDPDIAG(("recvfrom() succeeded; will use server port %d\n", udpServerPort)); #ifdef GATEWAY if (!strcmp(serverName, gw_mach)) { UDPDIAG(("+ actually, I'm going to use %d\n", gw_port)); udpServerPort = gw_port; from.sin_port = htons(udpServerPort); } #endif if (connect(udpSock, (struct sockaddr *) &from, sizeof(from)) < 0) { perror("netrek: unable to connect UDP socket after recvfrom()"); close(udpSock); udpSock = -1; return -1; } return 0; } int closeUdpConn(void) { V_UDPDIAG(("Closing UDP socket\n")); if (udpSock < 0) { fprintf(stderr, "netrek: tried to close a closed UDP socket\n"); return -1; } shutdown(udpSock, 2); close(udpSock); udpSock = -1; return 0; } void printUdpInfo(void) /* doesn't use UDPDIAG macro because that is for level 2 of udpDebug; * printUdpInfo applies to level 1 as well */ #define PUDPDIAG(x) { if (udpDebug) { printf("UDP: "); printf x; }} { struct sockaddr_in addr; socklen_t len; len = sizeof(addr); if (getsockname(udpSock, (struct sockaddr *) &addr, &len) < 0) { /* perror("printUdpInfo: getsockname"); */ return; } PUDPDIAG(("LOCAL: addr=0x%x, family=%d, port=%d\n", addr.sin_addr.s_addr, addr.sin_family, ntohs(addr.sin_port))); if (getpeername(udpSock, (struct sockaddr *) &addr, &len) < 0) { /* perror("printUdpInfo: getpeername"); */ return; } PUDPDIAG(("PEER : addr=0x%x, family=%d, port=%d\n", addr.sin_addr.s_addr, addr.sin_family, ntohs(addr.sin_port))); } #undef PUDPDIAG void handleSequence(struct sequence_spacket *packet) { static int recent_count = 0, recent_dropped = 0; LONG newseq; drop_flag = 0; if (chan != udpSock) return; /* don't pay attention to * * * TCP sequence #s */ udpTotal++; recent_count++; /* update percent display every 256 updates (~50 seconds usually) */ if (!(udpTotal & 0xff)) if (udpWin) udprefresh(UDP_DROPPED); newseq = (LONG) ntohs(packet->sequence); /* printf("read %d - ", newseq); */ if (((unsigned short) sequence) > 65000 && ((unsigned short) newseq) < 1000) { /* we rolled, set newseq = 65536+sequence and accept it */ sequence = ((sequence + 65536) & 0xffff0000) | newseq; } else { /* adjust newseq and do compare */ newseq |= (sequence & 0xffff0000); if (!udpSequenceChk) { /* put this here so that * * * turning seq check */ sequence = newseq; /* on and off doesn't make * * * * us think we lost */ return; /* a whole bunch of packets. * */ } if (newseq > sequence) { /* accept */ if (newseq != sequence + 1) { udpDropped += (newseq - sequence) - 1; udpTotal += (newseq - sequence) - 1; /* want TOTAL packets * */ recent_dropped += (newseq - sequence) - 1; recent_count += (newseq - sequence) - 1; if (udpWin) udprefresh(UDP_DROPPED); UDPDIAG(("sequence=%d, newseq=%d, we lost some\n", (int) sequence, (int) newseq)); } sequence = newseq; /* S_P2 */ if (shortversion == SHORTVERSION && recv_short) { me->p_flags = (me->p_flags & 0xffff00ff) | (unsigned int) packet->flag16 << 8; } } else { /* reject */ if (packet->type == SP_SC_SEQUENCE) { V_UDPDIAG(("(ignoring repeat %d)\n", (int) newseq)); } else { UDPDIAG(("sequence=%d, newseq=%d, ignoring transmission\n", (int) sequence, (int) newseq)); } /* the remaining packets will be dropped and we shouldn't count the * * * SP_SEQUENCE packet either */ packets_received--; drop_flag = 1; } } /* printf("newseq %d, sequence %d\n", newseq, sequence); */ if (recent_count > UDP_RECENT_INTR) { /* once a minute (at 5 upd/sec), report on how many were dropped */ /* during the last UDP_RECENT_INTR updates */ udpRecentDropped = recent_dropped; recent_count = recent_dropped = 0; if (udpWin) udprefresh(UDP_DROPPED); } } #ifdef PACKET_LOG static int Max_CPS = 0; static int Max_CPSout = 0; static time_t Start_Time = 0; static double s2 = 0; static int sumpl = 0; static int numpl = 0; static int outdata_this_sec = 0; static double sout2 = 0; static int sumout = 0; /* HW clumsy but who cares ... :-) */ static int vari_sizes[NUM_PACKETS]; static int cp_msg_size; /* For CP_S_MESSAGE */ void Log_Packet(char type, int act_size) { static time_t lasttime; static int data_this_sec; time_t this_sec; if (log_packets == 0) return; if (type <= 0 && type > NUM_PACKETS) { fprintf(stderr, "Attempted to log a bad packet? \n"); return; } packet_log[(unsigned) type]++; /* data_this_sec += handlers[type].size; */ data_this_sec += act_size; /* HW */ ALL_BYTES += act_size; /* To get all bytes */ if (handlers[(unsigned) type].size == -1) { /* vari packet */ vari_sizes[(unsigned) type] += act_size; } this_sec = time(NULL); if (this_sec != lasttime) { lasttime = this_sec; if (log_packets > 1) { fprintf(stdout, "%d %d %d\n", (int) (this_sec - Start_Time), data_this_sec, outdata_this_sec); } if (Start_Time == 0) { Start_Time = this_sec; } /* ignore baudage on the first few seconds of reception -- * that's * * * when we get crushed by the motd being sent */ if (lasttime > Start_Time + 10) { if (data_this_sec > Max_CPS) Max_CPS = data_this_sec; if (outdata_this_sec > Max_CPSout) Max_CPSout = outdata_this_sec; sumpl += data_this_sec; s2 += (data_this_sec * data_this_sec); sout2 += outdata_this_sec * outdata_this_sec; sumout += outdata_this_sec; numpl++; } data_this_sec = 0; outdata_this_sec = 0; } } void Log_OPacket(int type, int size) { /* Log Packet will handle the per second resets of this */ if (log_packets == 0) return; outpacket_log[type]++; outdata_this_sec += size; #ifdef SHORT_PACKETS if (type == CP_S_MESSAGE) cp_msg_size += size; /* HW */ #endif } /* print out out the cool information on packet logging */ void Dump_Packet_Log_Info(void) { int i; time_t Now; int total_bytes = 0; int outtotal_bytes = 0; int calc_temp; Now = time(NULL); printf("Packet Logging Summary:\n"); printf("Start time: %s ", ctime(&Start_Time)); printf(" End time: %s Elapsed play time: %3.2f min\n", ctime(&Now), (float) ((Now - Start_Time) / 60)); printf("Maximum CPS in during normal play: %d bytes per sec\n", Max_CPS); printf("Standard deviation in: %d\n", (int) sqrt((numpl * s2 - sumpl * sumpl) / (numpl * (numpl - 1)))); printf("Maximum CPS out during normal play: %d bytes per sec\n", Max_CPSout); printf("Standard deviation out: %d\n", (int) sqrt((numpl * sout2 - sumout * sumout) / (numpl * (numpl - 1)))); #ifdef SHORT_PACKETS /* total_bytes = ALL_BYTES; *//* Hope this works HW */ for (i = 0; i <= NUM_PACKETS; i++) { /* I think it must be <= */ if (handlers[i].size != -1) total_bytes += handlers[i].size * packet_log[i]; else total_bytes += vari_sizes[i]; } /* The result should be == * * * * ALL_BYTES HW */ #else for (i = 0; i <= NUM_PACKETS; i++) { total_bytes += handlers[i].size * packet_log[i]; } #endif for (i = 0; i <= NUM_SIZES; i++) { #ifdef SHORT_PACKETS if (handlers[i].size != -1) outtotal_bytes += outpacket_log[i] * sizes[i]; else outtotal_bytes += cp_msg_size; /* HW */ #else outtotal_bytes += outpacket_log[i] * sizes[i]; #endif } printf("Total bytes received %d, average CPS: %4.1f\n", total_bytes, (float) (total_bytes / (Now - Start_Time))); printf("Server Packets Summary:\n"); printf("Num #Rcvd Size TotlBytes %%Total\n"); for (i = 0; i <= NUM_PACKETS; i++) { #ifdef SHORT_PACKETS if (handlers[i].size != -1) calc_temp = handlers[i].size * packet_log[i]; else calc_temp = vari_sizes[i]; printf("%3d %5d %4d %9d %3.2f\n", i, packet_log[i], handlers[i].size, calc_temp, (float) (calc_temp * 100 / total_bytes)); #else calc_temp = handlers[i].size * packet_log[i]; printf("%3d %5d %4d %9d %3.2f\n", i, packet_log[i], handlers[i].size, calc_temp, (float) (calc_temp * 100 / total_bytes)); #endif } printf("Total bytes sent %d, average CPS: %4.1f\n", outtotal_bytes, (float) (outtotal_bytes / (Now - Start_Time))); printf("Client Packets Summary:\n"); printf("Num #Sent Size TotlBytes %%Total\n"); for (i = 0; i <= NUM_SIZES; i++) #ifdef SHORT_PACKETS { if (sizes[i] == -1) calc_temp = cp_msg_size; else calc_temp = sizes[i] * outpacket_log[i]; printf("%3d %5d %4d %9d %3.2f\n", i, outpacket_log[i], sizes[i], calc_temp, (float) (calc_temp * 100 / outtotal_bytes)); } #else { calc_temp = sizes[i] * outpacket_log[i]; printf("%3d %5d %4d %9d %3.2f\n", i, outpacket_log[i], sizes[i], calc_temp, (float) (calc_temp * 100 / outtotal_bytes)); } #endif } void print_packet(char *packet, int size) { int i; /* lcv */ unsigned char *data; int kills, pnum, nplanets; struct planet_s_spacket *plpacket; if(log_packets == 0) return; switch ( packet[0] ) { case SP_MESSAGE: fprintf(stderr, "\nS->C SP_MESSAGE\t"); if (log_packets > 1) fprintf(stderr, " m_flags=0x%0X, m_recpt=%d, m_from=%d, mesg=\"%s\",", ((struct mesg_spacket *) packet)->m_flags, ((struct mesg_spacket *) packet)->m_recpt, ((struct mesg_spacket *) packet)->m_from, ((struct mesg_spacket *) packet)->mesg ); break; case SP_PLAYER_INFO : /* general player info not */ /* * elsewhere */ fprintf(stderr, "\nS->C SP_PLAYER_INFO\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, shiptype=%d, team=%d,", ((struct plyr_info_spacket *) packet)->pnum, ((struct plyr_info_spacket *) packet)->shiptype, ((struct plyr_info_spacket *) packet)->team ); break; case SP_KILLS : /* # kills a player has */ fprintf(stderr, "\nS->C SP_KILLS\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, kills=%u,", ((struct kills_spacket *) packet)->pnum, ntohl(((struct kills_spacket *) packet)->kills) ); break; case SP_PLAYER : /* x,y for player */ fprintf(stderr, "\nS->C SP_PLAYER\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, dir=%u, speed=%d, x=%d, y=%d,", ((struct player_spacket *) packet)->pnum, ((struct player_spacket *) packet)->dir, ((struct player_spacket *) packet)->speed, ntohl(((struct player_spacket *) packet)->x), ntohl(((struct player_spacket *) packet)->y) ); break; case SP_TORP_INFO : /* torp status */ fprintf(stderr, "\nS->C SP_TORP_INFO\t"); if (log_packets > 1) fprintf(stderr, " war=%d, status=%d, tnum=%u,", ((struct torp_info_spacket *) packet)->war, ((struct torp_info_spacket *) packet)->status, ntohs(((struct torp_info_spacket *) packet)->tnum) ); break; case SP_TORP : /* torp location */ fprintf(stderr, "\nS->C SP_TORP\t"); if (log_packets > 1) fprintf(stderr, " dir=%d, tnum=%u, x=%u, y=%u,", ((struct torp_spacket *) packet)->dir, ntohs(((struct torp_spacket *) packet)->tnum), ntohl(((struct torp_spacket *) packet)->x), ntohl(((struct torp_spacket *) packet)->y) ); break; case SP_PHASER : /* phaser status and * * * direction */ fprintf(stderr, "\nS->C SP_PHASER\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, status=%d, dir=%u, x=%d, y=%d, target=%d,", ((struct phaser_spacket *) packet)->pnum, ((struct phaser_spacket *) packet)->status, ((struct phaser_spacket *) packet)->dir, ntohl(((struct phaser_spacket *) packet)->x), ntohl(((struct phaser_spacket *) packet)->y), ntohl(((struct phaser_spacket *) packet)->target) ); break; case SP_PLASMA_INFO : /* player login information */ fprintf(stderr, "\nS->C SP_PLASMA_INFO\t"); if (log_packets > 1) fprintf(stderr, " war=%d, status=%d pnum=%u,", ((struct plasma_info_spacket *) packet)->war, ((struct plasma_info_spacket *) packet)->status, ntohs(((struct plasma_info_spacket *) packet)->pnum) ); break; case SP_PLASMA : /* like SP_TORP */ fprintf(stderr, "\nS->C SP_PLASMA\t"); if (log_packets > 1) fprintf(stderr, " pnum=%u, x=%d, y=%d,", ntohs(((struct plasma_spacket *) packet)->pnum), ntohl(((struct plasma_spacket *) packet)->x), ntohl(((struct plasma_spacket *) packet)->y) ); break; case SP_WARNING : /* like SP_MESG */ fprintf(stderr,"\nS->C SP_WARNING\t"); if (log_packets > 1) fprintf(stderr, " mesg=\"%s\",", ((struct warning_spacket *) packet)->mesg); break; case SP_MOTD : /* line from .motd screen */ fprintf(stderr,"\nS->C SP_MOTD\t"); if (log_packets > 1) fprintf(stderr, " line=\"%s\",", ((struct motd_spacket *) packet)->line); break; case SP_YOU : /* info on you? */ fprintf(stderr, "\nS->C SP_YOU\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, hostile=%d, swar=%d, armies=%d, flags=0x%0X, damage=%d, shield=%d, fuel=%d, etemp=%u, wtemp=%u, whydead=%u, whodead=%u,", ((struct you_spacket *) packet)->pnum, ((struct you_spacket *) packet)->hostile, ((struct you_spacket *) packet)->swar, ((struct you_spacket *) packet)->armies, ntohs(((struct you_spacket *) packet)->flags), ntohl(((struct you_spacket *) packet)->damage), ntohl(((struct you_spacket *) packet)->shield), ntohl(((struct you_spacket *) packet)->fuel), ntohs(((struct you_spacket *) packet)->etemp), ntohs(((struct you_spacket *) packet)->wtemp), ntohs(((struct you_spacket *) packet)->whydead), ntohs(((struct you_spacket *) packet)->whodead) ); break; case SP_QUEUE : /* estimated loc in queue? */ fprintf(stderr, "\nS->C SP_QUEUE\t"); if (log_packets > 1) fprintf(stderr, " pos=%u,", ntohs(((struct queue_spacket *) packet)->pos) ); break; case SP_STATUS : /* galaxy status numbers */ fprintf(stderr, "\nS->C SP_STATUS\t"); if (log_packets > 1) fprintf(stderr, " tourn=%d, armsbomb=%u, planets=%u, kills=%u, losses=%u, time=%u, timeprod=%u,", ((struct status_spacket *) packet)->tourn, ntohl(((struct status_spacket *) packet)->armsbomb), ntohl(((struct status_spacket *) packet)->planets), ntohl(((struct status_spacket *) packet)->kills), ntohl(((struct status_spacket *) packet)->losses), ntohl(((struct status_spacket *) packet)->time), ntohl(((struct status_spacket *) packet)->timeprod) ); break; case SP_PLANET : /* planet armies & * * * facilities */ fprintf(stderr, "\nS->C SP_PLANET\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, owner=%d, info=%d, flags=0x%0X, armies=%d,", ((struct planet_spacket *) packet)->pnum, ((struct planet_spacket *) packet)->owner, ((struct planet_spacket *) packet)->info, ntohs(((struct planet_spacket *) packet)->flags), ntohl(((struct planet_spacket *) packet)->armies) ); break; case SP_PICKOK : /* your team & ship was * * * accepted */ fprintf(stderr, "\nS->C SP_PICKOK\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct pickok_spacket *) packet)-> state ); break; case SP_LOGIN : /* login response */ fprintf(stderr, "\nS->C SP_LOGIN\t"); if (log_packets > 1) fprintf(stderr, " accept=%d, flags=0x%0X, keymap=\"%s\",", ((struct login_spacket *) packet)->accept, ntohl(((struct login_spacket *) packet)->flags), ((struct login_spacket *) packet)->keymap ); break; case SP_FLAGS : /* give flags for a player */ fprintf(stderr, "\nS->C SP_FLAGS\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, flags=0x%0X,", ((struct flags_spacket *) packet)->pnum, ntohl(((struct flags_spacket *) packet)->flags) ); break; case SP_MASK : /* tournament mode mask */ fprintf(stderr, "\nS->C SP_MASK\t"); if (log_packets > 1) fprintf(stderr, " mask=%d,", ((struct mask_spacket *) packet)->mask ); break; case SP_PSTATUS : /* give status for a player */ fprintf(stderr, "\nS->C SP_PSTATUS\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, status=%d,", ((struct pstatus_spacket *) packet)->pnum, ((struct pstatus_spacket *) packet)->status ); break; case SP_BADVERSION : /* invalid version number */ fprintf(stderr, "\nS->C SP_BADVERSION\t"); if (log_packets > 1) fprintf(stderr, " why=%d,", ((struct badversion_spacket *) packet)->why ); break; case SP_HOSTILE : /* hostility settings for a * * * player */ fprintf(stderr, "\nS->C SP_HOSTILE\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, war=%d, hostile=%d,", ((struct hostile_spacket *) packet)->pnum, ((struct hostile_spacket *) packet)->war, ((struct hostile_spacket *) packet)->hostile ); break; case SP_STATS : /* a player's statistics */ fprintf(stderr, "\nS->C SP_STATS\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, tkills=%d, tlosses=%d, kills=%d, losses=%d, tticks=%d, tplanets=%d, tarmies=%d, sbkills=%d, sblosses=%d, armies=%d, planets=%d, maxkills=%d, sbmaxkills=%d,", ((struct stats_spacket *) packet)->pnum, ntohl(((struct stats_spacket *) packet)->tkills), ntohl(((struct stats_spacket *) packet)->tlosses), ntohl(((struct stats_spacket *) packet)->kills), ntohl(((struct stats_spacket *) packet)->losses), ntohl(((struct stats_spacket *) packet)->tticks), ntohl(((struct stats_spacket *) packet)->tplanets), ntohl(((struct stats_spacket *) packet)->tarmies), ntohl(((struct stats_spacket *) packet)->sbkills), ntohl(((struct stats_spacket *) packet)->sblosses), ntohl(((struct stats_spacket *) packet)->armies), ntohl(((struct stats_spacket *) packet)->planets), ntohl(((struct stats_spacket *) packet)->maxkills), ntohl(((struct stats_spacket *) packet)->sbmaxkills) ); break; case SP_PL_LOGIN : /* new player logs in */ fprintf(stderr, "\nS->C SP_PL_LOGIN\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, rank=%d, name=\"%s\", monitor=\"%s\", login=\"%s\",", ((struct plyr_login_spacket *) packet)->pnum, ((struct plyr_login_spacket *) packet)->rank, ((struct plyr_login_spacket *) packet)->name, ((struct plyr_login_spacket *) packet)->monitor, ((struct plyr_login_spacket *) packet)->login ); break; case SP_RESERVED : /* for future use */ fprintf(stderr, "\nS->C SP_RESERVED\t"); if (log_packets > 1) { fprintf(stderr, " data="); for( i = 0; i < 16; i++) fprintf(stderr, "0x%0X ", (unsigned char)((struct reserved_spacket *) packet)->data[i]); fprintf(stderr, ","); } break; case SP_PLANET_LOC : /* planet name, x, y */ fprintf(stderr, "\nS->C SP_PLANET_LOC\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, x=%d, y=%d, name=\"%s\",", ((struct planet_loc_spacket *) packet)->pnum, ntohl(((struct planet_loc_spacket *) packet)->x), ntohl(((struct planet_loc_spacket *) packet)->y), ((struct planet_loc_spacket *) packet)->name ); break; #ifdef INCLUDE_SCAN /* NOTE: not implemented */ case SP_SCAN : /* ATM: results of player * * * scan */ fprintf(stderr, "\nS->C SP_SCAN\t"); if(log_packets > 1) fprintf(stderr, "not implemented,"); break; #endif case SP_UDP_REPLY : /* notify client of UDP * * * status */ fprintf(stderr, "\nS->C SP_UDP_REPLY\t"); if (log_packets > 1) fprintf(stderr, " reply=%d, port=%d,", ((struct udp_reply_spacket *) packet)->reply, ntohl(((struct udp_reply_spacket *) packet)->port) ); break; case SP_SEQUENCE : /* sequence # packet */ fprintf(stderr, "\nS->C SP_SEQUENCE\t"); if (log_packets > 1) fprintf(stderr, " flag16=0x%0X, sequence=%u,", ((struct sequence_spacket *) packet)->flag16, ntohs(((struct sequence_spacket *) packet)->sequence) ); break; case SP_SC_SEQUENCE : /* this trans is * * * semi-critical info */ fprintf(stderr, "\nS->C SP_SC_SEQUENCE\t"); if (log_packets > 1) fprintf(stderr, " sequence=%u,", ntohs(((struct sc_sequence_spacket *) packet)->sequence) ); break; #ifdef RSA case SP_RSA_KEY : /* handles binary * * * verification */ fprintf(stderr, "\nS->C SP_RSA_KEY\t"); if(log_packets > 1) { fprintf(stderr, " data="); for(i = 0; i < KEY_SIZE; i++) fprintf(stderr, "0x%0X ",((struct rsa_key_spacket *) packet)->data[i]); fprintf(stderr, ","); } break; #endif case SP_GENERIC_32 : fprintf(stderr, "\nS->C SP_GENERIC_32\t"); if (log_packets > 1) switch (((struct generic_32_spacket *)packet)->version) { case 0x60+GENERIC_32_VERSION_A: fprintf(stderr, " version=%c, repair_time=%d, pl_orbit=%d,", ((struct generic_32_spacket_a *) packet)->version, ((struct generic_32_spacket_a *) packet)->repair_time, ((struct generic_32_spacket_a *) packet)->pl_orbit); break; case 0x60+GENERIC_32_VERSION_B: fprintf(stderr, " version=%c, repair_time=%d, pl_orbit=%d, gameup=0x%x, tourn_teams=%d, tourn_age=%d, tourn_age_units=%c, tourn_remain=%d, tourn_remain_units=%c, starbase_remain=%d, team_remain=%d,", ((struct generic_32_spacket_b *) packet)->version, ntohs(((struct generic_32_spacket_b *) packet)->repair_time), ((struct generic_32_spacket_b *) packet)->pl_orbit, ntohs(((struct generic_32_spacket_b *) packet)->gameup), ((struct generic_32_spacket_b *) packet)->tournament_teams, ((struct generic_32_spacket_b *) packet)->tournament_age, ((struct generic_32_spacket_b *) packet)->tournament_age_units, ((struct generic_32_spacket_b *) packet)->tournament_remain, ((struct generic_32_spacket_b *) packet)->tournament_remain_units, ((struct generic_32_spacket_b *) packet)->starbase_remain, ((struct generic_32_spacket_b *) packet)->team_remain ); break; default: fprintf(stderr, " version=0x%x (unknown)", ((struct generic_32_spacket *)packet)->version); } break; case SP_SHIP_CAP : /* Handles server ship mods */ fprintf(stderr, "\nS->C SP_SHIP_CAP\t"); if (log_packets > 1) fprintf(stderr, " operation=%d, s_type=%u, s_torpspeed=%u, s_phaserrange=%u, s_maxspeed=%d, s_maxfuel=%d, s_maxshield=%d, s_maxdamage=%d, s_maxwpntemp=%d, s_maxegntemp=%d, s_width=%u, s_height=%d, s_maxarmies=%d, s_letter=%d, s_name=\"%s\", s_desig1=%c, s_desig2=%c, s_bitmap=%u,", ((struct ship_cap_spacket *) packet)->operation, ntohs(((struct ship_cap_spacket *) packet)->s_type), ntohs(((struct ship_cap_spacket *) packet)->s_torpspeed), ntohs(((struct ship_cap_spacket *) packet)->s_phaserrange), ((struct ship_cap_spacket *) packet)->s_maxspeed, ((struct ship_cap_spacket *) packet)->s_maxfuel, ((struct ship_cap_spacket *) packet)->s_maxshield, ((struct ship_cap_spacket *) packet)->s_maxdamage, ((struct ship_cap_spacket *) packet)->s_maxwpntemp, ((struct ship_cap_spacket *) packet)->s_maxegntemp, ntohs(((struct ship_cap_spacket *) packet)->s_width), ntohs(((struct ship_cap_spacket *) packet)->s_height), ntohs(((struct ship_cap_spacket *) packet)->s_maxarmies), ((struct ship_cap_spacket *) packet)->s_letter, ((struct ship_cap_spacket *) packet)->s_name, ((struct ship_cap_spacket *) packet)->s_desig1, ((struct ship_cap_spacket *) packet)->s_desig2, ntohs(((struct ship_cap_spacket *) packet)->s_bitmap) ); break; #ifdef SHORT_PACKETS case SP_S_REPLY : /* reply to send-short * * * request */ fprintf(stderr, "\nS->C SP_S_REPLY\t"); if (log_packets > 1) fprintf(stderr," repl=%d, windside=%u, gwidth=%d,", ((struct shortreply_spacket *) packet)->repl, ntohs(((struct shortreply_spacket *) packet)->winside), ntohl(((struct shortreply_spacket *) packet)->gwidth) ); break; case SP_S_MESSAGE : /* var. Message Packet */ fprintf(stderr, "\nS->C SP_S_MESSAGE\t"); if (log_packets > 1) fprintf(stderr, " m_flags=0x%0X, m_recpt=%u, m_from=%u, length=%u, mesg=\"%s\",", ((struct mesg_s_spacket *) packet)->m_flags, ((struct mesg_s_spacket *) packet)->m_recpt, ((struct mesg_s_spacket *) packet)->m_from, ((struct mesg_s_spacket *) packet)->length, &( ((struct mesg_s_spacket *) packet)->mesg ) ); break; case SP_S_WARNING : /* Warnings with 4 Bytes */ fprintf(stderr, "\nS->C SP_S_WARNING\t"); if (log_packets > 1) fprintf(stderr, " whichmessage=%u, argument=%d, argument2=%d,", ((struct warning_s_spacket *) packet)->whichmessage, ((struct warning_s_spacket *) packet)->argument, ((struct warning_s_spacket *) packet)->argument2 ); break; case SP_S_YOU : /* hostile,armies,whydead,etc * * * .. */ fprintf(stderr, "\nS->C SP_S_YOU\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, hostile=%d, swar=%d, armies=%d, whydead=%d, whodead=%d, flags=0x%0X,", ((struct youshort_spacket *) packet)->pnum, ((struct youshort_spacket *) packet)->hostile, ((struct youshort_spacket *) packet)->swar, ((struct youshort_spacket *) packet)->armies, ((struct youshort_spacket *) packet)->whydead, ((struct youshort_spacket *) packet)->whodead, ntohl(((struct youshort_spacket *) packet)->flags) ); break; case SP_S_YOU_SS : /* your ship status */ fprintf(stderr, "\nS->C SP_S_YOU_SS\t"); if (log_packets > 1) fprintf(stderr, " ddamage=%u, shield=%u, fuel=%u, etemp=%u, wtemp=%u,", ntohs(((struct youss_spacket *) packet)->damage), ntohs(((struct youss_spacket *) packet)->shield), ntohs(((struct youss_spacket *) packet)->fuel), ntohs(((struct youss_spacket *) packet)->etemp), ntohs(((struct youss_spacket *) packet)->wtemp) ); break; case SP_S_PLAYER : /* variable length player * * * packet */ fprintf(stderr, "\nS->C SP_S_PLAYER\t"); if (log_packets > 1) fprintf(stderr, " packets=%d, dir=%u, speed=%d, x=%d, y=%d,", ((struct player_s_spacket *) packet)->packets, ntohl(((struct player_s_spacket *) packet)->dir), ((struct player_s_spacket *) packet)->speed, ntohl(((struct player_s_spacket *) packet)->x), ntohl(((struct player_s_spacket *) packet)->y) ); break; #endif #ifdef PING case SP_PING : /* ping packet */ fprintf(stderr, "\nS->C SP_PING\t"); if (log_packets > 1) fprintf(stderr, " number=%u, lag=%u, tloss_sc=%u, tloss_cs=%u, iloss_sc=%u, iloss_cs=%u,", ((struct ping_spacket *) packet)->number, ((struct ping_spacket *) packet)->lag, ((struct ping_spacket *) packet)->tloss_sc, ((struct ping_spacket *) packet)->tloss_cs, ((struct ping_spacket *) packet)->iloss_sc, ((struct ping_spacket *) packet)->iloss_cs ); break; #endif #ifdef FEATURE_PACKETS case SP_FEATURE : fprintf(stderr, "\nS->C SP_FEATURE\t"); if (log_packets > 1) fprintf(stderr, " feature_type=%c, arg1=%d, arg2=%d, value=%d, name=\"%s\",", ((struct feature_cpacket *) packet)->feature_type, ((struct feature_cpacket *) packet)->arg1, ((struct feature_cpacket *) packet)->arg2, ntohl(((struct feature_cpacket *) packet)->value), ((struct feature_cpacket *) packet)->name ); break; #endif case SP_RANK : fprintf(stderr, "\nS->C SP_RANK\t"); if (log_packets > 1) fprintf(stderr, " rnum=%d, rmax=%d, name=\"%s\", hours=%d, ratings=%d, offense=%d, cname=\"%s\"", ((struct rank_spacket *) packet)->rnum, ((struct rank_spacket *) packet)->rmax, ((struct rank_spacket *) packet)->name, ntohl(((struct rank_spacket *) packet)->hours), ntohl(((struct rank_spacket *) packet)->ratings), ntohl(((struct rank_spacket *) packet)->offense), ((struct rank_spacket *) packet)->cname ); break; case SP_LTD : fprintf(stderr, "\nS->C SP_LTD\t"); if (log_packets > 2) { struct ltd_spacket *lp = (struct ltd_spacket *) packet; fprintf(stderr, " version='%c', " "kt=%d, " "kmax=%d/100, " "k1=%d, " "k1p=%d, " "k1c=%d, " "k2=%d, " "k2p=%d, " "k2c=%d, " "kbp=%d, " "kbt=%d, " "kbs=%d, " "dt=%d, " "dpc=%d, " "dcc=%d, " "ddc=%d, " "dbp=%d, " "dbt=%d, " "dbs=%d, " "acc=%d, " "ptt=%d, " "pdt=%d, " "bpt=%d, " "bp8=%d, " "bpc=%d, " "bat=%d, " "ba8=%d, " "bac=%d, " "oat=%d, " "odc=%d, " "occ=%d, " "opc=%d, " "ogc=%d, " "oec=%d, " "olc=%d, " "osba=%d, " "ofc=%d, " "ofa=%d, " "at=%d, " "aa=%d, " "ar=%d, " "af=%d, " "ak=%d, " "ct=%d, " "cp=%d, " "cc=%d, " "ca=%d, " "cr=%d, " "cf=%d, " "tt=%d, " "tyel=%d, " "tred=%d, " "tz0=%d, " "tz1=%d, " "tz2=%d, " "tz3=%d, " "tz4=%d, " "tz5=%d, " "tz6=%d, " "tz7=%d, " "tpc=%d, " "tcc=%d, " "tr=%d, " "dr=%d, " "wpf=%d, " "wph=%d, " "wpdi=%d, " "wpdt=%d, " "wtf=%d, " "wth=%d, " "wtd=%d, " "wts=%d, " "wtw=%d, " "wtdi=%d, " "wtdt=%d, " "wsf=%d, " "wsh=%d, " "wsp=%d, " "wsw=%d, " "wsdi=%d, " "wsdt=%d, \n", lp->version, ntohl(lp->kt), ntohl(lp->kmax), ntohl(lp->k1), ntohl(lp->k1p), ntohl(lp->k1c), ntohl(lp->k2), ntohl(lp->k2p), ntohl(lp->k2c), ntohl(lp->kbp), ntohl(lp->kbt), ntohl(lp->kbs), ntohl(lp->dt), ntohl(lp->dpc), ntohl(lp->dcc), ntohl(lp->ddc), ntohl(lp->dbp), ntohl(lp->dbt), ntohl(lp->dbs), ntohl(lp->acc), ntohl(lp->ptt), ntohl(lp->pdt), ntohl(lp->bpt), ntohl(lp->bp8), ntohl(lp->bpc), ntohl(lp->bat), ntohl(lp->ba8), ntohl(lp->bac), ntohl(lp->oat), ntohl(lp->odc), ntohl(lp->occ), ntohl(lp->opc), ntohl(lp->ogc), ntohl(lp->oec), ntohl(lp->olc), ntohl(lp->osba), ntohl(lp->ofc), ntohl(lp->ofa), ntohl(lp->at), ntohl(lp->aa), ntohl(lp->ar), ntohl(lp->af), ntohl(lp->ak), ntohl(lp->ct), ntohl(lp->cp), ntohl(lp->cc), ntohl(lp->ca), ntohl(lp->cr), ntohl(lp->cf), ntohl(lp->tt), ntohl(lp->tyel), ntohl(lp->tred), ntohl(lp->tz0), ntohl(lp->tz1), ntohl(lp->tz2), ntohl(lp->tz3), ntohl(lp->tz4), ntohl(lp->tz5), ntohl(lp->tz6), ntohl(lp->tz7), ntohl(lp->tpc), ntohl(lp->tcc), ntohl(lp->tr), ntohl(lp->dr), ntohl(lp->wpf), ntohl(lp->wph), ntohl(lp->wpdi), ntohl(lp->wpdt), ntohl(lp->wtf), ntohl(lp->wth), ntohl(lp->wtd), ntohl(lp->wts), ntohl(lp->wtw), ntohl(lp->wtdi), ntohl(lp->wtdt), ntohl(lp->wsf), ntohl(lp->wsh), ntohl(lp->wsp), ntohl(lp->wsw), ntohl(lp->wsdi), ntohl(lp->wsdt) ); } break; #ifdef SHORT_PACKETS case SP_S_TORP : /* variable length torp * * * packet */ fprintf(stderr, "\nS->C SP_S_TORP\t"); if (log_packets > 1) print_sp_s_torp(packet, 1); break; case SP_S_TORP_INFO : /* SP_S_TORP with TorpInfo */ fprintf(stderr, "\nS->C SP_S_TORP_INFO\t"); if (log_packets > 1) /* struct built by hand in handleVTorp */ print_sp_s_torp(packet, 3); break; case SP_S_8_TORP : /* optimized SP_S_TORP */ fprintf(stderr, "\nS->C SP_S_8_TORP\t"); if (log_packets > 1) print_sp_s_torp(packet, 2); break; case SP_S_PLANET : /* see SP_PLANET */ fprintf(stderr, "\nS->C SP_S_PLANET\t"); if (log_packets > 1) { plpacket = (struct planet_s_spacket *) &packet[2]; nplanets = packet[1]; fprintf(stderr, "nplanets = %d, ", nplanets); for(i = 0; i < nplanets; i++, plpacket++ ) fprintf(stderr, "pnum = %d, pl_owner = %d, info = %d, flags = %d, armies = %d ", plpacket->pnum, plpacket->owner, plpacket->info, plpacket->armies, ntohs(plpacket->flags) ); } fprintf(stderr,"\n"); break; /* S_P2 */ case SP_S_SEQUENCE : /* SP_SEQUENCE for * * * compressed packets */ fprintf(stderr, "\nS->C SP_S_SEQUENCE\t"); if (log_packets > 1) fprintf(stderr, " No struct defined,"); break; case SP_S_PHASER : /* see struct */ fprintf(stderr, "\nS->C SP_S_PHASER\t"); if (log_packets > 1) fprintf(stderr, " status=%d, pnum=%d, target=%d, dir=%d, x=%d, y=%d", ((((struct phaser_s_spacket *) packet)->status) & 0x0f), ((((struct phaser_s_spacket *) packet)->pnum) & 0x3f), ((struct phaser_s_spacket *) packet)->target, ((struct phaser_s_spacket *) packet)->dir, (SCALE * (ntohs(((struct phaser_s_spacket*) packet)->x))), (SCALE * (ntohs(((struct phaser_s_spacket*) packet)->y))) ); break; case SP_S_KILLS : /* # of kills player have */ fprintf(stderr, "\nS->C SP_S_KILLS\t"); if (log_packets > 1) { fprintf(stderr, " pnum=%d, ", (unsigned char) packet[1]); data = (unsigned char *) &packet[2]; for (i = 0; i < (unsigned) packet[1]; i++) { kills = (unsigned short) *data++; kills |= (unsigned short) ((*data & 0x03) << 8); pnum = (unsigned char) *data++ >> 2; fprintf(stderr, "pnum = %d, kills = %d ",pnum, kills); } } fprintf(stderr,"\n"); break; case SP_S_STATS : /* see SP_STATS */ fprintf(stderr, "\nS->C SP_S_STATS\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d, tplanets=%d, tkills=%d, tlosses=%d, kills=%d, losses=%d, tticks=%d, tarmies=%d, sbkills=%d, sblosses=%d, armies=%d, planets=%d, maxkills=%d, sbmaxkills=%d,", ((struct stats_spacket *) packet)->pnum, ntohs(((struct stats_spacket *) packet)->tplanets), ntohs(((struct stats_spacket *) packet)->tkills), ntohs(((struct stats_spacket *) packet)->tlosses), ntohs(((struct stats_spacket *) packet)->kills), ntohs(((struct stats_spacket *) packet)->losses), ntohl(((struct stats_spacket *) packet)->tticks), ntohl(((struct stats_spacket *) packet)->tarmies), ntohs(((struct stats_spacket *) packet)->sbkills), ntohs(((struct stats_spacket *) packet)->sblosses), ntohs(((struct stats_spacket *) packet)->armies), ntohs(((struct stats_spacket *) packet)->planets), ntohl(((struct stats_spacket *) packet)->maxkills), ntohl(((struct stats_spacket *) packet)->sbmaxkills) ); break; #endif default: fprintf(stderr, "\nS->C UNKNOWN\t"); if(log_packets > 1) fprintf(stderr, " type=%d,",packet[0]); } #ifdef nodef /* #ifdef SHORT_PACKETS */ switch( *((char *) packet) ) { /* variable length packets */ case VPLAYER_SIZE : fprintf(stderr, "\nS->C VPLAYER_SIZE\t"); if (log_packets > 1) fprintf(stderr, " No struct defined, same enum value as SP_PLAYER,"); break; case SHORTVERSION : /* other number blocks, like * * * UDP Version */ fprintf(stderr, "\nS->C SHORTVERSION\t"); if (log_packets > 1) fprintf(stderr, " No struct defined, same enum value as SP_MOTD,"); break; case OLDSHORTVERSION : /* S_P2 */ fprintf(stderr, "\nS->C OLDSHORTVERSION\t"); if (log_packets > 1) fprintf(stderr, " No struct defined, same enum value as SP_WARNING,"); break; } #endif } void print_opacket(char *packet, int size) { int i; /* lcv */ switch(packet[0]) { /* packets sent from remote client to xtrek server */ case CP_MESSAGE : /* send a message */ fprintf(stderr, "\nC->S CP_MESSAGE\t"); if (log_packets > 1) fprintf(stderr, " group=%d, indiv=%d, mesg=\"%s\",", ((struct mesg_cpacket *) packet)->group, ((struct mesg_cpacket *) packet)->indiv, ((struct mesg_cpacket *) packet)->mesg ); break; case CP_SPEED : /* set speed */ fprintf(stderr, "\nC->S CP_SPEED\t"); if (log_packets > 1) fprintf(stderr, " speed=%d,", ((struct speed_cpacket *) packet)->speed ); break; case CP_DIRECTION : /* change direction */ fprintf(stderr, "\nC->S CP_DIRECTION\t"); if (log_packets > 1) fprintf(stderr, " dir=%u,", ((struct dir_cpacket *) packet)->dir ); break; case CP_PHASER : /* phaser in a direction */ fprintf(stderr, "\nC->S CP_PHASER\t"); if (log_packets > 1) fprintf(stderr, " dir=%u,", ((struct phaser_cpacket *) packet)-> dir ); break; case CP_PLASMA : /* plasma (in a direction) */ fprintf(stderr, "\nC->S CP_PLAMSA\t"); if (log_packets > 1) fprintf(stderr, " dir=%u,", ((struct plasma_cpacket *) packet)->dir ); break; case CP_TORP : /* fire torp in a direction */ fprintf(stderr, "\nC->S CP_TORP\t"); if (log_packets > 1) fprintf(stderr, " dir=%u,", ((struct torp_cpacket *) packet)->dir ); break; case CP_QUIT : /* self destruct */ fprintf(stderr, "\nC->S CP_QUIT\t"); if (log_packets > 1) fprintf(stderr, " no args,"); break; case CP_LOGIN : /* log in (name, password) */ fprintf(stderr, "\nC->S CP_LOGIN\t"); if (log_packets > 1) fprintf(stderr, " query=%d, name=\"%s\", password=\"%s\", login=\"%s\",", ((struct login_cpacket *) packet)->query, ((struct login_cpacket *) packet)->name, ((struct login_cpacket *) packet)->password, ((struct login_cpacket *) packet)->login ); break; case CP_OUTFIT : /* outfit to new ship */ fprintf(stderr, "\nC->S CP_OUTFIT\t"); if (log_packets > 1) fprintf(stderr, " team=%d, ship=%d,", ((struct outfit_cpacket *) packet)->team, ((struct outfit_cpacket *) packet)->ship ); break; case CP_WAR : /* change war status */ fprintf(stderr, "\nC->S CP_WAR\t"); if (log_packets > 1) fprintf(stderr, " newmask=0x%0X,", ((struct war_cpacket *) packet)->newmask ); break; case CP_PRACTR : /* create practice robot? */ fprintf(stderr, "\nC->S CP_PRACTR\t"); if (log_packets > 1) fprintf(stderr, " no args,"); break; case CP_SHIELD : /* raise/lower sheilds */ fprintf(stderr, "\nC->S CP_SHIELD\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct shield_cpacket *) packet)->state ); break; case CP_REPAIR : /* enter repair mode */ fprintf(stderr, "\nC->S CP_REPAIR\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct repair_cpacket *) packet)-> state ); break; case CP_ORBIT : /* orbit planet/starbase */ fprintf(stderr, "\nC->S CP_ORBIT\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct orbit_cpacket *) packet)->state ); break; case CP_PLANLOCK : /* lock on planet */ fprintf(stderr, "\nC->S CP_PLANLOCK\t"); if (log_packets > 1) fprintf(stderr, " pnum = %d,", ((struct planlock_cpacket *) packet)->pnum ); break; case CP_PLAYLOCK : /* lock on player */ fprintf(stderr, "\nC->S CP_PLAYLOCK\t"); if (log_packets > 1) fprintf(stderr, " pnum=%d,", ((struct playlock_cpacket *) packet)->pnum ); break; case CP_BOMB : /* bomb a planet */ fprintf(stderr, "\nC->S CP_BOMB\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct bomb_cpacket *) packet)->state ); break; case CP_BEAM : /* beam armies up/down */ fprintf(stderr, "\nC->S CP_BEAM\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct beam_cpacket *) packet)->state ); break; case CP_CLOAK : /* cloak on/off */ fprintf(stderr, "\nC->S CP_CLOAK\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct cloak_cpacket *) packet)->state ); break; case CP_DET_TORPS : /* detonate enemy torps */ fprintf(stderr, "\nC->S CP_DET_TORPS\t"); if (log_packets > 1) fprintf(stderr, " no args,"); break; case CP_DET_MYTORP : /* detonate one of my torps */ fprintf(stderr, "\nC->S CP_DET_MYTORP\t"); if (log_packets > 1) fprintf(stderr, " tnum=%u,", ntohs(((struct det_mytorp_cpacket *) packet)->tnum) ); break; case CP_COPILOT : /* toggle copilot mode */ fprintf(stderr, "\nC->S CP_COPILOT\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct copilot_cpacket *) packet)->state ); break; case CP_REFIT : /* refit to different ship * * * * type */ fprintf(stderr, "\nC->S CP_REFIT\t"); if (log_packets > 1) fprintf(stderr, " ship=%d,", ((struct refit_cpacket *) packet)->ship ); break; case CP_TRACTOR : /* tractor on/off */ fprintf(stderr, "\nC->S CP_TRACTOR\t"); if (log_packets > 1) fprintf(stderr, " state=%d, pnum=%d,", ((struct tractor_cpacket *) packet)->state, ((struct tractor_cpacket *) packet)->pnum ); break; case CP_REPRESS : /* pressor on/off */ fprintf(stderr, "\nC->S CP_REPRESS\t"); if (log_packets > 1) fprintf(stderr, " state=%d, pnum=%d,", ((struct repress_cpacket *) packet)->state, ((struct repress_cpacket *) packet)->pnum ); break; case CP_COUP : /* coup home planet */ fprintf(stderr, "\nC->S CP_COUP\t"); if (log_packets > 1) fprintf(stderr, " no args,"); break; case CP_SOCKET : /* new socket for * * * reconnection */ fprintf(stderr, "\nC->S CP_SOCKET\t"); if (log_packets > 1) fprintf(stderr, " version=%d, udp_version=%d\n, socket=%u,", ((struct socket_cpacket *) packet)->version, ((struct socket_cpacket *) packet)->udp_version, ntohl(((struct socket_cpacket *) packet)->socket) ); break; case CP_OPTIONS : /* send my options to be * * * saved */ fprintf(stderr, "\nC->S CP_OPTIONS\t"); if (log_packets > 1) fprintf(stderr, " flags=0x%0X, keymap=\"%s\",", ntohl(((struct options_cpacket *) packet)->flags), ((struct options_cpacket *) packet)->keymap ); break; case CP_BYE : /* I'm done! */ fprintf(stderr, "\nC->S CP_BYE\t"); if (log_packets > 1) fprintf(stderr, " no args,"); break; case CP_DOCKPERM : /* set docking permissions */ fprintf(stderr, "\nC->S CP_DOCKPERM\t"); if (log_packets > 1) fprintf(stderr, " state=%d,", ((struct dockperm_cpacket *) packet)->state ); break; case CP_UPDATES : /* set number of usecs per * * * * update */ fprintf(stderr, "\nC->S CP_UPDATES\t"); if (log_packets > 1) fprintf(stderr, " usecs=%u,", ntohl(((struct updates_cpacket *) packet)->usecs) ); break; case CP_RESETSTATS : /* reset my stats packet */ fprintf(stderr, "\nC->S CP_RESETSTATS\t"); if (log_packets > 1) fprintf(stderr, " verify=%c,", ((struct resetstats_cpacket *) packet)->verify ); break; case CP_RESERVED : /* for future use */ fprintf(stderr, "\nC->S CP_RESERVED\t"); if (log_packets > 1) { fprintf(stderr, " data=" ); for( i = 0; i < 16; i++) fprintf(stderr, "0x%0X ", (unsigned char)((struct reserved_cpacket *) packet)->data[i]); fprintf(stderr, ", resp=" ); for( i = 0; i < 16; i++) fprintf(stderr, "0x%0X ", (unsigned char)((struct reserved_cpacket *) packet)->resp[i]); fprintf(stderr, ","); } break; #ifdef INCLUDE_SCAN /* NOTE: not implemented. */ case CP_SCAN : /* ATM: request for player * * * * scan */ fprintf(stderr, "\nC->S CP_SCAN\t"); if (log_packets > 1) fprintf(stderr, " not implemented," ); break; #endif case CP_UDP_REQ : /* request UDP on/off */ fprintf(stderr, "\nC->S CP_UDP_REQ\t"); if (log_packets > 1) fprintf(stderr, " request=%d, connmode=%d, port=%d,", ((struct udp_req_cpacket *) packet)->request, ((struct udp_req_cpacket *) packet)->connmode, ntohl(((struct udp_req_cpacket *) packet)->port) ); break; case CP_SEQUENCE : /* sequence # packet */ fprintf(stderr, "\nC->S CP_SEQUENCE\t"); if (log_packets > 1) fprintf(stderr, " sequence=%u,", ntohs(((struct sequence_cpacket *) packet)->sequence) ); break; #ifdef RSA case CP_RSA_KEY : /* handles binary * * * verification */ fprintf(stderr, "\nC->S CP_RSA_KEY\t"); if (log_packets > 1) { fprintf(stderr, " global="); for(i = 0; i < KEY_SIZE; i++) fprintf(stderr, "0x%0X ",((struct rsa_key_cpacket *)packet)->global[i]); fprintf(stderr,","); fprintf(stderr, " public="); for(i = 0; i < KEY_SIZE; i++) fprintf(stderr, "0x%0X ",((struct rsa_key_cpacket *)packet)->public[i]); fprintf(stderr,","); fprintf(stderr, " resp="); for(i = 0; i < KEY_SIZE; i++) fprintf(stderr, "0x%0X ",((struct rsa_key_cpacket *)packet)->resp[i]); fprintf(stderr,","); } break; #endif case CP_PING_RESPONSE : /* client response */ /* note: ping.c calls gwrite directly, so we do not see this */ fprintf(stderr, "\nC->S CP_PING_RESPONSE\t"); if (log_packets > 1) fprintf(stderr, " number=%u, pingme=%d, cp_sent=%d, cp_recv=%d", ((struct ping_cpacket *) packet)->number, ((struct ping_cpacket *) packet)->pingme, ntohl(((struct ping_cpacket *) packet)->cp_sent), ntohl(((struct ping_cpacket *) packet)->cp_recv) ); break; #ifdef SHORT_PACKETS case CP_S_REQ : fprintf(stderr, "\nC->S CP_S_REQ\t"); if (log_packets > 1) fprintf(stderr, " req=%d, version=%d,", ((struct shortreq_cpacket *) packet)->req, ((struct shortreq_cpacket *) packet)->version ); break; case CP_S_THRS : fprintf(stderr, "\nC->S CP_S_THRS\t"); if (log_packets > 1) fprintf(stderr, " thresh=%u,", ntohs(((struct threshold_cpacket *) packet)->thresh) ); break; case CP_S_MESSAGE : /* vari. Message Packet */ fprintf(stderr, "\nC->S CP_S_MESSAGE\t"); if (log_packets > 1) fprintf(stderr, " size=%d, group=%d, indiv=%d, mess=\"%s\",", ((struct mesg_cpacket *) packet)->pad1, ((struct mesg_cpacket *) packet)->group, ((struct mesg_cpacket *) packet)->indiv, ((struct mesg_cpacket *) packet)->mesg ); break; case CP_S_RESERVED : fprintf(stderr, "\nC->S CP_S_RESERVED\t"); if (log_packets > 1) fprintf(stderr, " no struct defined,"); break; case CP_S_DUMMY : fprintf(stderr, "\nC->S CP_S_DUMMY\t"); if (log_packets > 1) fprintf(stderr, " no struct defined,"); break; #endif #ifdef FEATURE_PACKETS case CP_FEATURE : fprintf(stderr, "\nC->S CP_FEATURE\t"); if (log_packets > 1) fprintf(stderr, " feature_type=%c, arg1=%d, arg2=%d, value=%d, name=\"%s\",", ((struct feature_cpacket *) packet)->feature_type, ((struct feature_cpacket *) packet)->arg1, ((struct feature_cpacket *) packet)->arg2, ntohl(((struct feature_cpacket *) packet)->value), ((struct feature_cpacket *) packet)->name ); break; #endif default : fprintf(stderr, "\nC->S UNKNOWN\t"); if(log_packets > 1) fprintf(stderr, " type=%d,",packet[0]); } } #endif /* PACKET_LOG */ char * strcpyp_return(register char *s1, register char *s2, register int length) { while (length && *s2) { *s1++ = *s2++; length--; } if (length > 0) { while (length--) *s1++ = ' '; } return s1; } netrek-client-cow-3.3.2/index.orig.html0000664000175000017500000000445213657750470017012 0ustar jamesjames COW 3.2.6

COW 3.2.6

Documentation


Sources


Patches

  • Use the COW CVS server on cowsrc.netrek.org for diffs

Binaries


COW binaries for small (800x600) screens


In case of problems send a mail to cow@netrek.org netrek-client-cow-3.3.2/lurk.py0000664000175000017500000003661013657750470015406 0ustar jamesjames#!/usr/bin/python """ netrek lurk, version 1.0 Copyright (C) 2007 James Cameron (quozl@us.netrek.org) 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 -- Usage: lurk.py server-name [verbose] """ import sys, socket, select, struct """ utility functions """ def strnul(input): """ convert a NUL terminated string to a normal string """ return input.split('\000')[0] """ netrek protocol documentation, from server include/packets.h general protocol state outline starting state CP_SOCKET CP_FEATURE, optional, to indicate feature packets are known SP_MOTD SP_FEATURE, only if CP_FEATURE was seen SP_QUEUE, optional, repeats until slot is available SP_YOU, indicates slot number assigned login state, player slot status is POUTFIT client shows name and password prompt and accepts input CP_LOGIN CP_FEATURE SP_LOGIN SP_YOU SP_PLAYER_INFO various other server packets outfit state, player slot status is POUTFIT client shows team selection window SP_MASK, sent regularly during outfit client accepts team selection input CP_OUTFIT SP_PICKOK, signals server acceptance of alive state alive state, server places ship in game and play begins SP_PSTATUS, indicates PDEAD state client animates explosion SP_PSTATUS, indicates POUTFIT state clients returns to team selection window CP_QUIT CP_BYE """ """ client originated packets """ class CP: def tabulate(self, number, format): global cp_table cp_table[number] = (struct.calcsize(format), format) cp_table = {} class CP_SOCKET(CP): def __init__(self): self.code = 27 self.format = '!bbbxI' self.tabulate(self.code, self.format) def data(self): print "CP_SOCKET" return struct.pack(self.format, self.code, 4, 10, 0) cp_socket = CP_SOCKET() class CP_BYE(CP): def __init__(self): self.code = 29 self.format = '!bxxx' self.tabulate(self.code, self.format) def data(self): print "CP_BYE" return struct.pack(self.format, self.code) cp_bye = CP_BYE() class CP_LOGIN(CP): def __init__(self): self.code = 8 self.format = '!bbxx16s16s16s' self.tabulate(self.code, self.format) def data(self, query, name, password, login): print "CP_LOGIN" return struct.pack(self.format, self.code, query, name, password, login) cp_login = CP_LOGIN() class CP_OUTFIT(CP): def __init__(self): self.code = 9 self.format = '!bbbx' self.tabulate(self.code, self.format) def data(self, team, ship=0): print "CP_OUTFIT" return struct.pack(self.format, self.code, team, ship) cp_outfit = CP_OUTFIT() class CP_UPDATES(CP): def __init__(self): self.code = 31 self.format = '!bxxxI' self.tabulate(self.code, self.format) def data(self, usecs): print "CP_UPDATES" return struct.pack(self.format, self.code, usecs) cp_updates = CP_UPDATES() class CP_MESSAGE(CP): def __init__(self): self.code = 1 self.format = "!bBBx80s" self.tabulate(self.code, self.format) def data(self, group, indiv, mesg): print "CP_MESSAGE group=",group,"indiv=",indiv,"mesg=",mesg return struct.pack(self.format, self.code, group, indiv, mesg) cp_message = CP_MESSAGE() class CP_QUIT(CP): def __init__(self): self.code = 7 self.format = '!bxxx' self.tabulate(self.code, self.format) def data(self): print "CP_QUIT" return struct.pack(self.format, self.code) cp_quit = CP_QUIT() class CP_RESERVED(CP): def __init__(self): self.code = 33 self.format = "!bxxx16s16s" self.tabulate(self.code, self.format) def data(self, data, resp): print "CP_RESERVED" return struct.pack(self.format, self.code, data, resp) cp_reserved = CP_RESERVED() class CP_PING_RESPONSE(CP): def __init__(self): self.code = 42 self.format = "!bBbxll" self.tabulate(self.code, self.format) def data(self, number, pingme, cp_sent, cp_recv): return struct.pack(self.format, self.code, number, pingme, cp_sent, cp_recv) cp_ping_response = CP_PING_RESPONSE() """ server originated packets """ class SP: def tabulate(self, number, format, instance): global sp_table sp_table[number] = (struct.calcsize(format), instance) def find(self, number): """ given a packet type return a tuple consisting of (size, instance) """ global sp_table if not sp_table.has_key(number): return (1, self) return sp_table[number] def handler(self, data): pass sp_table = {} sp = SP() class SP_MOTD(SP): def __init__(self): self.code = 11 self.format = '!bxxx80s' self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, message) = struct.unpack(self.format, data) print strnul(message) sp_motd = SP_MOTD() class SP_YOU(SP): def __init__(self): self.code = 12 self.format = '!bbbbbbxxIlllhhhh' self.tabulate(self.code, self.format, self) self.armed = True def handler(self, data): # send one CP_LOGIN when the first SP_YOU is seen if self.armed: global opt nt.send(cp_login.data(0, opt.name, opt.password, opt.login)) nt.send(cp_updates.data(1000000/opt.updates)) self.armed = False sp_you = SP_YOU() class SP_QUEUE(SP): def __init__(self): self.code = 13 self.format = '!bxh' self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, pos) = struct.unpack(self.format, data) print "SP_QUEUE pos=",pos sp_queue = SP_QUEUE() class SP_PL_LOGIN(SP): def __init__(self): self.code = 24 self.format = "!bbbx16s16s16s" self.tabulate(self.code, self.format, self) sp_pl_login = SP_PL_LOGIN() class SP_HOSTILE(SP): def __init__(self): self.code = 22 self.format = "!bbbb" self.tabulate(self.code, self.format, self) sp_hostile = SP_HOSTILE() class SP_PLAYER_INFO(SP): def __init__(self): self.code = 2 self.format = "!bbbb" self.tabulate(self.code, self.format, self) sp_player_info = SP_PLAYER_INFO() class SP_KILLS(SP): def __init__(self): self.code = 3 self.format = "!bbxxI" self.tabulate(self.code, self.format, self) sp_kills = SP_KILLS() class SP_PSTATUS(SP): def __init__(self): self.code = 20 self.format = "!bbbx" self.tabulate(self.code, self.format, self) sp_pstatus = SP_PSTATUS() class SP_PLAYER(SP): def __init__(self): self.code = 4 self.format = "!bbBbll" self.tabulate(self.code, self.format, self) sp_player = SP_PLAYER() class SP_FLAGS(SP): def __init__(self): self.code = 18 self.format = "!bbbxI" self.tabulate(self.code, self.format, self) sp_flags = SP_FLAGS() class SP_PLANET_LOC(SP): def __init__(self): self.code = 26 self.format = "!bbxxll16s" self.tabulate(self.code, self.format, self) sp_planet_loc = SP_PLANET_LOC() class SP_LOGIN(SP): def __init__(self): self.code = 17 self.format = "!bbxxl96s" self.tabulate(self.code, self.format, self) sp_login = SP_LOGIN() class SP_MASK(SP): def __init__(self): self.code = 19 self.format = "!bbxx" self.tabulate(self.code, self.format, self) self.armed = True def handler(self, data): (ignored, mask) = struct.unpack(self.format, data) print "SP_MASK" # automatically join first available team if self.armed: if mask & 0x1: nt.send(cp_outfit.data(0)) elif mask & 0x2: nt.send(cp_outfit.data(1)) elif mask & 0x4: nt.send(cp_outfit.data(2)) elif mask & 0x8: nt.send(cp_outfit.data(3)) self.armed = False sp_mask = SP_MASK() class SP_PICKOK(SP): def __init__(self): self.code = 16 self.format = "!bbxx" self.tabulate(self.code, self.format, self) sp_pickok = SP_PICKOK() class SP_RESERVED(SP): def __init__(self): self.code = 25 self.format = "!bxxx16s" self.tabulate(self.code, self.format, self) sp_reserved = SP_RESERVED() class SP_TORP_INFO(SP): def __init__(self): self.code = 5 self.format = "!bbbxhxx" self.tabulate(self.code, self.format, self) sp_torp_info = SP_TORP_INFO() class SP_TORP(SP): def __init__(self): self.code = 6 self.format = "!bBhll" self.tabulate(self.code, self.format, self) sp_torp = SP_TORP() class SP_PLASMA_INFO(SP): def __init__(self): self.code = 8 self.format = "!bbbxhxx" self.tabulate(self.code, self.format, self) sp_plasma_info = SP_PLASMA_INFO() class SP_PLASMA(SP): def __init__(self): self.code = 9 self.format = "!bxhll" self.tabulate(self.code, self.format, self) sp_plasma = SP_PLASMA() class SP_STATUS(SP): def __init__(self): self.code = 14 self.format = "!bbxxIIIIIL" self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, tourn, armsbomb, planets, kills, losses, time, timeprod) = struct.unpack(self.format, data) global opt # exit on t-mode transition if directed to do so if tourn == 1 and opt.twu: sys.exit() if tourn == 0 and opt.twd: sys.exit() sp_status = SP_STATUS() class SP_PHASER(SP): def __init__(self): self.code = 7 self.format = "!bbbBlll" self.tabulate(self.code, self.format, self) sp_phaser = SP_PHASER() class SP_PLANET(SP): def __init__(self): self.code = 15 self.format = "!bbbbhxxl" self.tabulate(self.code, self.format, self) sp_planet = SP_PLANET() class SP_MESSAGE(SP): def __init__(self): self.code = 1 self.format = "!bBBB80s" self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, m_flags, m_recpt, m_from, mesg) = struct.unpack(self.format, data) print strnul(mesg) sp_message = SP_MESSAGE() class SP_STATS(SP): def __init__(self): self.code = 23 self.format = "!bbxx13l" self.tabulate(self.code, self.format, self) sp_stats = SP_STATS() class SP_WARNING(SP): def __init__(self): self.code = 10 self.format = '!bxxx80s' self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, message) = struct.unpack(self.format, data) print strnul(message) sp_warning = SP_WARNING() class SP_FEATURE(SP): def __init__(self): self.code = 60 self.format = "!bbbbi80s" self.tabulate(self.code, self.format, self) sp_feature = SP_FEATURE() class SP_BADVERSION(SP): def __init__(self): self.code = 21 self.format = "!bbxx" self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, why) = struct.unpack(self.format, data) print "SP_BADVERSION why=",why sp_badversion = SP_BADVERSION() class SP_PING(SP): def __init__(self): self.code = 46 self.format = "!bBHBBBB" self.tabulate(self.code, self.format, self) def handler(self, data): (ignored, number, lag, tloss_sc, tloss_cs, iloss_sc, iloss_cs) = struct.unpack(self.format, data) nt.send(cp_ping_response.data(0, 1, 0, 0)) sp_ping = SP_PING() ## end of server packets class Client: """ Netrek TCP Client """ def __init__(self): self.socket = None def connect(self, host, port): self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.socket.connect((host, port)) def send(self, data): self.socket.send(data) def recv(self, time): while 1: is_readable = [self.socket] is_writable = [] is_error = [] r, w, e = select.select(is_readable, is_writable, is_error, time) if not r: return try: byte = self.socket.recv(1) except: print "recv failure" sys.exit() if len(byte) == 1: self.recv_packet(byte) else: print "server disconnection" sys.exit() def recv_packet(self, byte): number = struct.unpack('b', byte[0])[0] (size, instance) = sp.find(number) if size == 1: print "\n#### FIXME: UnknownPacketType ", number, "####\n" raise "UnknownPacketType, a packet was received from the server that is not known to this program, and since packet lengths are determined by packet types there is no reasonably way to continue operation" return rest = self.socket.recv(size-1, socket.MSG_WAITALL) if len(rest) != (size-1): print "### asked for %d and got %d bytes" % ((size-1), len(rest)) # handle the prefix byte and the rest of the packet as a whole instance.handler(byte + rest) # FIXME: packet almalgamation may occur, s.recv second time may # return something less than the expected number of bytes, so we # have to wait for them. from optparse import OptionParser parser= OptionParser() parser.add_option("-s", "--server", dest="server", help="netrek server to connect to") parser.add_option("-p", "--port", type="int", dest="port", default="2593", help="netrek observer port number to connect to") parser.add_option("--name", dest="name", default="guest", help="character name to show, default guest") parser.add_option("--password", dest="password", default="", help="password for character name") parser.add_option("--login", dest="login", default="lurker", help="username to show on player list") parser.add_option("-u", "--tournament-wait-up", "--for-fun", action="store_true", dest="twu", default="False", help="exit when t-mode begins or if already begun") parser.add_option("-d", "--tournament-wait-down", "--for-aid", action="store_true", dest="twd", default="False", help="exit when t-mode ends or if not yet t-mode") parser.add_option("-r", "--updates", type="int", dest="updates", default="1", help="updates per second from server, default 1") (opt, args) = parser.parse_args() def main(): global nt nt = Client() nt.connect(opt.server, int(opt.port)) nt.send(cp_socket.data()) try: while 1: nt.recv(1.0) nt.send(cp_ping_response.data(0, 1, 0, 0)) except: nt.send(cp_bye.data()) sys.exit() main() netrek-client-cow-3.3.2/patchlevel.h0000664000175000017500000000011413657750470016345 0ustar jamesjames#include "config.h" #define PATCHLEVEL 2 /* last digit of version number */ netrek-client-cow-3.3.2/cowmain.h0000664000175000017500000000006413657750470015657 0ustar jamesjameschar *query_cowid(void); void terminate(int error); netrek-client-cow-3.3.2/short.h0000664000175000017500000000137413657750470015366 0ustar jamesjames/* short.c */ void sendThreshold(short unsigned int v); void handleVTorp(unsigned char *sbuf); void handleSelfShort(struct youshort_spacket *packet); void handleSelfShip(struct youss_spacket *packet); void handleVPlayer(unsigned char *sbuf); void handleSMessage(struct mesg_s_spacket *packet); void handleShortReply(struct shortreply_spacket *packet); void handleVTorpInfo(unsigned char *sbuf); void handleVPlanet(unsigned char *sbuf); void resetWeaponInfo(void); void sendShortReq(char state); void handleSWarning(struct warning_s_spacket *packet); void add_whydead(char *s, int m); void handleVKills(unsigned char *sbuf); void handleVPhaser(unsigned char *sbuf); void handle_s_Stats(struct stats_s_spacket *packet); void new_flags(unsigned int data, int which); netrek-client-cow-3.3.2/mkkey.c0000664000175000017500000007335013657750470015345 0ustar jamesjames/* * mkkey.c -- create the public, private, and modulo keys for * netrek RSA verification and write out a keycap file * and generate a rsa "black box" that contains the code to * do a rsa encryption with the private key. * * Compile with something like: * cc -O -o mkkey mkkey.c -lmp * (if you're using GNU MP then: * cc -O -o mkkey mkkey.c -lmp -lgmp * mkkey needs stuff in gmp as well.) * * mkkey is used for two things: * * 1. Generating new RSA keys, creating the two keycap files key_name * and key_name.secret. key_name.secret is the keycap with the additional * field sk, which holds the secret (private) key. * * 2. Reading in a secret keycap file (or old-style keys.h file) and * generating a rsa "black box". The "black box" is a set of C * source files named basename.c, basename_0.c, ... basename_N.c. * Together these define a function called that looks like this: * * void rsa_black_box(unsigned char* out, unsigned char* in, * unsigned char* public, unsigned char* global) * * Each of these parameters is expected to be an array KEY_SIZE of elements, * except public and global which may be NULL. The function will perform an * RSA encryption on in, writing the result to out. If public (or global) * is non-NULL the public (or global) key will be copied to public (or * global). * * The obfuscation process used to generate the "black box" relies on * the fact that an encryption with a known private key can be expressed * as a sequence of operations (which I call X & Y, these correspond * to the two different steps of the standard expmod algorithm) on * two variables, the message being encrypted and the encryption result. * So instead of storing the private key, we represent it by the sequence * of X & Y's. * * To make the sequence harder to follow we generate arrays of messages * and results and store the "real" message/result in one of the slots. * X & Y's are semi-randomly performed on the elements of the array, * and the elements are shuffled every once in a while. I think of this * as playing a shell game with the message/result. * * As a final defense, the X & Y's & shufflings (which are called swaps * in the code) are split into N separate files. * * This is a merger of genkey.c (author: Ray Jones) and mkrsaclient.c * plus too many features. * * NOTE: the generated rsa "black box" files do not need any of the * rsa_util{mp}.c, or rsa_clientutil.c files. They *do* need to be * linked with GNU MP, and not say SunOS's MP. * * If you make any non-trivial enhancements or find any bugs I'd like * to hear about them. In any case, you are free to do whatever you * want with this code... * * Sam Shen (sls@aero.org) * */ /* if you hack mkkey and release it change the following line in * some reasonable way, perhaps like this: * static char version[] = "[atm: July 4, 1993] based on [sls: June 7, 1993]"; */ static char version[] = "[sls: Febuary 10, 1994] + atm random"; #include "config.h" #ifdef WIN32 #include #include #include #define getpid() GetCurrentProcessId() #define getuid() (int)GetModuleHandle(NULL) #else #include INC_MP #ifdef __GNU_MP__ #include #endif MPTYPEDEF #endif #include #include #include #include #include #include #include #include #include INC_SYS_TIME #include #include "defs.h" /* extern LONG random(); */ /* extern char* malloc();*/ extern void free(); extern int getpid(); #ifdef KEY_SIZE #define SIZE KEY_SIZE #define HALF (KEY_SIZE/2) #else #define SIZE 32 #define HALF 16 #endif #define DEFAULT_N_SHELLS 3 #define DEFAULT_SWAP_STEPS 2 #define DEFAULT_RSA_BOX_FILE "rsa_box" #define DEFAULT_N_FILES 5 #define DEFAULT_FILE_RATIO 0.8 /* fadden's World Famous random stuff */ int rand_state = 0; /* which state we're using */ char rand_state1[256]; /* big honking state for random() */ char rand_state2[256]; /* even more big honking state for random() */ static MPTYPE zero; #define check_positive(n) assert(mcmp(n, zero) >= 0) static LONG random256() { unsigned LONG tmp; rand_state = 1-rand_state; /* alternate between generators */ if (rand_state) /* select the appropriate state */ (void)setstate(rand_state1); else (void)setstate(rand_state2); tmp = RANDOM(); return (tmp >> 24) ^ ((tmp >> 16) & 0xff) ^ ((tmp >> 8) & 0xff) ^ (tmp & 0xff); } void rand_raw(str, num) unsigned char *str; int num; { int i; for (i = 0; i < num - 1; i++) str[i] = random256(); /* force it to be num digits long */ str[i] = 0; while (! str[i]) str[i] = random256(); i++; for (; i < SIZE; i++) str[i] = 0; } void raw_to_num(out, in) MPTYPE out; unsigned char *in; { int i; MPTYPE temp; MPTYPE twofiftysix; MPTYPE thisval; assignItom(temp,0); mult(temp, temp, out); /* IckyIcky how do you zero in libmp? */ assignItom(twofiftysix,256); for (i = 0; i < SIZE; i++) { mult(temp, twofiftysix, temp); assignItom(thisval,in[SIZE - i - 1]); madd(temp, thisval, temp); mfree(thisval); } madd(temp, out, out); /* There is no copy function! */ mfree(temp); mfree(twofiftysix); } void num_to_raw(out, in) /* Destroys in */ unsigned char *out; MPTYPE in; { int i; short temp; for (i = 0; i < SIZE; i++) { if (!mcmp (in, zero)) temp = 0; else sdiv(in, 256, in, &temp); out[i] = temp & 0xFF; } } #ifdef __GNU_MP__ #define is_prime(n) mpz_probab_prime_p(n, 50) #else int is_prime(n) MPTYPE n; { int i; short j; MPTYPE temp1; MPTYPE temp2; assignItom(temp2,0); /* 25 is quite a lot, actually */ for (i = 0; i < 25; i++) { /* * We should choose a number that is between 0 and n, but this * works well enough. */ j = (short) RANDOM(); if (j < 0) j = (-j); assignItom(temp1,j); mp_pow(temp1, n, n, temp2); if (mcmp(temp1, temp2)) { mfree(temp1); mfree(temp2); return (0); } mfree(temp1); } mfree(temp2); return (1); } #endif static void mmod(a, b, c) MPTYPE a, b, c; { MPTYPE quotient; assignItom(quotient,0); mdiv(a, b, quotient, c); mfree(quotient); } #ifdef __GNU_MP__ /* * GNU MP (and possibly other implementations of mp) does not have * invert so this was transliterated from the equivalent routine in * PGP 2.2 * * rjones had an my_invert here but it didn't seem to work */ #define move(src, dest) madd(src, zero, dest) #define iplus1 ( i==2 ? 0 : i+1 ) /* used by Euclid algorithms */ #define iminus1 ( i==0 ? 2 : i-1 ) /* used by Euclid algorithms */ static void invert(a, n, x) MPTYPE x, a, n; { MPTYPE g[3]; MPTYPE v[3]; MPTYPE y; MPTYPE temp; MPTYPE temp2; int i; assignItom(y,0); assignItom(temp,0); assignItom(temp2,0); for (i = 0; i < 3; i++) assignItom(g[i],0); move(n, g[0]); move(a, g[1]); assignItom(v[0], 0); assignItom(v[1], 1); assignItom(v[2], 0); i = 1; while (mcmp(g[i], zero)) { check_positive(g[iminus1]); check_positive(g[i]); mdiv(g[iminus1], g[i], y, g[iplus1]); mult(y, v[i], temp); move(v[iminus1], v[iplus1]); msub(v[iplus1], temp, temp2); move(temp2, v[iplus1]); i = iplus1; } move(v[iminus1], x); while (mcmp(x, zero) < 0) { madd(x, n, temp2); move(temp2, x); } for (i = 0; i < 3; i++) { mfree(v[i]); mfree(g[i]); } mfree(y); mfree(temp); mfree(temp2); } #endif /* verify_key checks to make sure a RSA key actually works */ void verify_key(raw_public, raw_private, raw_global) unsigned char* raw_public, *raw_private, *raw_global; { MPTYPE orig_message; MPTYPE message; MPTYPE crypt_text; MPTYPE public; MPTYPE private; MPTYPE global; int failures = 0; int i; unsigned char temp[SIZE]; assignItom(orig_message,0); assignItom(message,0); assignItom(crypt_text,0); assignItom(public,0); assignItom(private,0); assignItom(global,0); printf("Testing key"); fflush(stdout); raw_to_num(public, raw_public); raw_to_num(private, raw_private); raw_to_num(global, raw_global); for (i = 0; i < 50; i++) { rand_raw(temp, SIZE - 1); raw_to_num(orig_message, temp); mp_pow(orig_message, private, global, crypt_text); mp_pow(crypt_text, public, global, message); if (mcmp(message, orig_message) != 0) { putchar('!'); failures++; } else { putchar('.'); } fflush(stdout); } if (failures == 0) printf("key seems o.k.\n"); else { printf("\nSorry, key is bogus.\n"); exit(1); } mfree(orig_message); mfree(message); mfree(crypt_text); mfree(public); mfree(private); mfree(global); } /* kgetkeyname, kgetstr and kgetkey are stolen from Ted Hadley's * rsa_keycomp.c */ #define SEP ':' #define GLOBAL_KEY_FIELD "gk=" #define PUBLIC_KEY_FIELD "pk=" #define SECRET_KEY_FIELD "sk=" #define CLIENT_TYPE_FIELD "ct=" #define CREATOR_FIELD "cr=" #define CREATED_FIELD "cd=" #define ARCH_TYPE_FIELD "ar=" #define COMMENTS_FIELD "cm=" #ifndef KEY_SIZE #define KEY_SIZE SIZE #endif /* * Extract the key name descriptor from an entry buffer * "Key Name:" */ int kgetkeyname(src, dest) char *src; char *dest; { int l = strchr(src,SEP)-src; strncpy(dest, src, l); dest[l] = 0; return 1; } /* * Place contents of specified field entry into destination string. * "pk=Text Text Text:" */ int kgetstr(src, field, dest) char *src, *field, *dest; { char *s = (char*) strstr(src, field); int l; if(!s) return 0; s += strlen(field); l = strchr(s,SEP)-s; strncpy(dest, s, l); dest[l] = 0; return 1; } /* * Place contents of specified binary field entry into destination string. * "pk=Text Text Text:" */ int kgetkey(src, field, dest) char *src, *field; unsigned char *dest; { char unencoded_dest[KEY_SIZE*2+1], uc[3]; register char *s; unsigned int c; if(!kgetstr(src, field, unencoded_dest)) return 0; uc[2] = '\0'; /* convert encoded binary to binary */ s = unencoded_dest; while(*s){ uc[0] = *s++; uc[1] = *s++; sscanf(uc, "%x", &c); *dest++ = (unsigned char)c; } return 1; } int scan_array_element(buffer, xp, np) char* buffer; int* xp; int* np; { char* bp = buffer; while (*bp && isspace(*bp)) bp++; if (*bp == '0' && *(bp+1) == 'x') { if (sscanf(bp+2, "%x", xp) != 1) return 0; bp += 2; } else if (sscanf(bp, "%d", xp) != 1) return 0; while (*bp && isxdigit(*bp)) bp++; while (*bp && *bp != ',') bp++; bp++; *np = bp - buffer; return 1; } /* look through the text in buffer for name, and read in len comma * separated ints into data */ void get_array(buffer, name, data, len) char* buffer; char* name; unsigned char* data; int len; { int i, n, x; char* start; start = (char*) strstr(buffer, name); if (start == NULL) goto err; while (*start && *start != '{') start++; if (!*start) goto err; start++; for (i = 0; i < len; i++) { if (scan_array_element(start, &x, &n) != 1) goto err; data[i] = x; start += n; } return; err: fprintf(stderr, "Ooops! Couldn't get array %s in keys.h file.\n", name); exit(1); } static char* header = "\ /*\n\ * DO NOT EDIT THIS FILE!!! GENERATED AUTOMATICALLY!!!\n\ */\n\ #include \"config.h\"\n\ #include \n\ #include \n\ \n\ void rsa_black_box(out, in, public, global)\n\ unsigned char* out;\n\ unsigned char* in;\n\ unsigned char* public;\n\ unsigned char* global;\n\ {\n\ MP_INT m_msg;\n\ MP_INT m_result;\n\ MP_INT m_public;\n\ MP_INT m_global;\n\ MP_INT m_tmp;\n\ int i;\n\ mpz_init(&m_msg);\n\ mpz_init(&m_result);\n\ mpz_init(&m_public);\n\ mpz_init(&m_global);\n\ mpz_init(&m_tmp);\n\ for (i = 0; i < %d; i++) {\n\ mpz_mul_2exp(&m_msg, &m_msg, 8);\n\ mpz_add_ui(&m_msg, &m_msg, in[%d-1-i]);\n\ }\n\ "; static char* trailer = "\ for (i = 0; i < %d; i++) {\n\ mpz_divmod_ui(&m_result, &m_tmp, &m_result, 256);\n\ *out++ = mpz_get_ui(&m_tmp);\n\ }\n\ mpz_clear(&m_msg);\n\ mpz_clear(&m_result);\n\ mpz_clear(&m_public);\n\ mpz_clear(&m_global);\n\ mpz_clear(&m_tmp);\n\ }\n\ "; void gen_key(fp, name, key, len) FILE* fp; char* name; unsigned char* key; int len; { int i; unsigned LONG limb; for (i = len-4; i >= 0; i-= 4) { limb = (key[i+3] << 24) + (key[i+2] << 16) + (key[i+1] << 8) + key[i]; fprintf(fp, " mpz_mul_2exp(&m_%s, &m_%s, 32);\n", name, name); fprintf(fp, " mpz_add_ui(&m_%s, &m_%s, (unsigned LONG) 0x%lx);\n", name, name, limb); } fprintf(fp, " if (%s != NULL) {\n", name); for (i = 0; i < len; i++) fprintf(fp, " %s[%d] = %d;\n", name, i, key[i]); fprintf(fp, " }\n"); } #define rsa_box_defs "\ #define X(m, r, g) \\\n\ mpz_mul(r, m, r);\\\n\ mpz_mod(r, r, g)\n\ #define Y(m, r, g) \\\n\ mpz_mul(m, m, m);\\\n\ mpz_mod(m, m, g)\n\ #define SWAP(i, j) \\\n\ do { \\\n\ MP_INT tmp; \\\n\ tmp = m[i]; m[i] = m[j]; m[j] = tmp; \\\n\ tmp = r[i]; r[i] = r[j]; r[j] = tmp; \\\n\ } while(0)\n\ " #define sequence_header "\ {\n\ MP_INT r[%d], m[%d], m_swap_tmp;\n\ for (i = 0; i < %d; i++) {\n\ mpz_init_set_ui(&r[i], 1); mpz_init(&m[i]);\n\ }\n\ mpz_set(&m[%d], &m_msg);\n\ #define g &m_global\n\ " #define sequence_trailer "\ \n\ mpz_set(&m_result, &r[%d]);\n\ for (i = 0; i < %d; i++) {\n\ mpz_clear(&r[i]); mpz_clear(&m[i]);\n\ }\n\ }\n\ " #define per_box_header "\ #include \"config.h\"\n\ #include \n\ void rsa_partial_box_%d(m, r, g)\n\ MP_INT* m, * r;\n\ MP_INT* g;\n\ {\n\ " #define per_box_trailer "\ }\n\ " /* * Write out an obfuscated rsa computation. This code is a little * ugly, forgive me... */ void gen_rsa_sequence(clientsfp, clients_basename, n_files, raw_private, n_shells, swap_steps, file_ratio) FILE* clientsfp; unsigned char* raw_private; char* clients_basename; int n_files, n_shells, swap_steps; double file_ratio; { FILE* fp; int i, j, real_j, tmp, done, bit, n_bits, file_no, in_fp; int n_bits_in_section, bit_in_section; char buf[200]; char* op; double ratio; /* first, get a rough idea how many bits there are in raw_private */ for (i = SIZE-1; i >= 0; --i) { if (raw_private[i] != 0) break; } n_bits = i * 8; real_j = random256() % n_shells; fprintf(clientsfp, sequence_header, n_shells, n_shells, n_shells, real_j); fprintf(clientsfp, rsa_box_defs); bit = 0; file_no = 0; fp = NULL; bit_in_section = 0; n_bits_in_section = -1; in_fp = 0; while (1) { /* decide if we want to continue writing to wherever or to make * a change */ done = 0; finish: if (done || (bit_in_section > n_bits_in_section)) { if (in_fp) { fprintf(fp, per_box_trailer); fclose(fp); fprintf(clientsfp, " rsa_partial_box_%d(m, r, &m_global);\n", file_no); file_no++; fp = clientsfp; in_fp = 0; } else if (file_no < n_files) { sprintf(buf, "%s_%d.c", clients_basename, file_no); fp = fopen(buf, "w"); if (fp == NULL) { fprintf(stderr, "Couldn't open rsa box file \"%s\"!\n", buf); exit(1); } fprintf(fp, per_box_header, file_no); fprintf(fp, rsa_box_defs); in_fp = 1; } if (file_no == n_files) n_bits_in_section = n_bits - bit; else { int bits_remaining; if (in_fp) ratio = file_ratio; else ratio = 1.0 - file_ratio; bits_remaining = n_bits - bit; n_bits_in_section = (int) (ratio * (bits_remaining / (n_files - file_no))); /* have n_bits_in_section vary by 50% */ n_bits_in_section = (5 * n_bits_in_section / 4 - ((random256() % n_bits_in_section) / 2)); printf("%d bits left, %d files left, %d bits in %s\n", bits_remaining, n_files - file_no, n_bits_in_section, in_fp ? buf : "main file"); } bit_in_section = 0; } if (done) break; /* check if we're done */ done = 1; for (i = 0; i < SIZE; i++) if (raw_private[i] != 0) { done = 0; break; } if (done) goto finish; fprintf(fp, " /* real_j is %d, bit %d is %d */\n", real_j, bit, raw_private[0] & 0x1); for (j = 0; j < n_shells; j++) { if (j == real_j) { if (raw_private[0] & 0x1) op = "X"; else op = 0; } else if ((random256() % 2) == 0) { op = "X"; } else { op = "Y"; } if (op != 0) fprintf(fp, " %s(&m[%d], &r[%d], g);\n", op, j, j); } for (j = 0; j < n_shells; j++) { if (j == real_j || ((random256() % 2) == 0)) { op = "Y"; } else { op = "X"; } fprintf(fp, " %s(&m[%d], &r[%d], g);\n", op, j, j); } if ((random256() % (swap_steps + 1)) == 0) { for (j = 0; j < n_shells; j++) { tmp = random256() % (j + 1); if (real_j == tmp) { real_j = j; } else if (real_j == j) { real_j = tmp; } fprintf(fp, " SWAP(%d, %d);\n", j, tmp); } } for (i = 0; i < SIZE - 1; i++) { raw_private[i] >>= 1; if (raw_private[i+1] & 0x1) raw_private[i] |= 0x80; } raw_private[SIZE-1] >>= 1; bit++; bit_in_section++; } fprintf(fp, sequence_trailer, real_j, n_shells); } static char* allocbuf() { char* buf = (char*) malloc(BUFSIZ); assert(buf != NULL); return buf; } static char* usage_lines[] = { "", "-v", "\tVerify the key only.", "", "-h keys.h-file [ key_name client_type architecture/OS creator comments ]", "\tRead key from old-style keys.h file using key_name ... to complete", "\tthe key (keys.h files don't have this information.) If -v was used", "\tthen key_name etc are optional.", "", "-k keycap.secret-file", "\tRead key from keycap file with sk (secret key) field.", "", "-n n-shells", "\tSet the number of shells in the shell-game obfuscation.", "", "-s n-steps-to-swap", "\tSet the average number of steps between swaps.", "", "-nt", "\tSkip testing the key.", "", "-f n-files", "\tWrite out rsa computation into n-files separate files.", "", "-b client-sourcefile-basename", "\tUse client-sourcefile-basename as base name for rsa computation files.", "", "key_name client_type architecture/OS creator comments", "\tCreate a new key. You may have to quote some of the args to make", "\tyour shell do the right thing.", "", NULL }; static void usage() { int i; for (i = 0; usage_lines[i]; i++) { printf("%s\n", usage_lines[i]); } exit(1); } int main(argc, argv) int argc; char* argv[]; { MPTYPE x, y, global, xyminus1, private, public; MPTYPE one, two; unsigned char temp[SIZE]; unsigned char raw_global[SIZE], raw_private[SIZE], raw_public[SIZE]; FILE* clientsfp; /* clientsfp is the client source file */ FILE* keycapfp; /* keycapfp is the keycap file */ FILE* skeycapfp; /* skeycapfp is the keycap file with * the secret key included */ int i, n, verify_only, n_shells, swap_steps, test_key, n_files; double file_ratio; char buf[200]; time_t today; char* key_name, * client_type, * architecture, * creator, *class, *comments; char* created; char* keydoth, * keycap; char* clients_basename; /* * Initialize the random number generators. Both get 256-byte pieces * of state (default is 128). The second is partially seeded with * output from first. * * Total interesting bits in the seeds: * time: 24 bits (assuming you can guess when it was generated) * pid: 15 bits (most systems use a signed short) * uid: 10 bits (most users will fall in this range) * gid: ~3 bits (these are easy to guess) * * That's about 52 bits, perturbed in strange and unusual ways. If this * ain't random, I'm lost. */ /*srandom(time(0) ^ (getpid()<<16) ^ getuid());*/ (void) initstate(time(0) ^ (getpid()<<16) ^ getgid(), rand_state1, 256); (void) initstate((getuid() ^ RANDOM()) | (time(0) % 65239) << 16, rand_state2, 256); rand_state = 0; printf("mkkey version %s\n", version); created = NULL; keydoth = NULL; keycap = NULL; verify_only = 0; n_shells = DEFAULT_N_SHELLS; swap_steps = DEFAULT_SWAP_STEPS; n_files = DEFAULT_N_FILES; clients_basename = DEFAULT_RSA_BOX_FILE; file_ratio = DEFAULT_FILE_RATIO; assignItom(zero,0); test_key = 1; n = 1; while (argc > n) { if (!strcmp(argv[n], "-h")) { keydoth = argv[n+1]; n += 2; } else if (!strcmp(argv[n], "-k")) { keycap = argv[n+1]; n += 2; } else if (!strcmp(argv[n], "-v")) { verify_only = 1; n++; } else if (!strcmp(argv[n], "-n")) { n_shells = atoi(argv[n+1]); n += 2; } else if (!strcmp(argv[n], "-s")) { swap_steps = atoi(argv[n+1]); n += 2; } else if (!strcmp(argv[n], "-nt")) { test_key = 0; n++; } else if (!strcmp(argv[n], "-b")) { clients_basename = argv[n+1]; n += 2; } else if (!strcmp(argv[n], "-f")) { n_files = atoi(argv[n+1]); n += 2; } else if (!strcmp(argv[n], "-c")) { n_files = RANDOM() % 10+1; n++; } else if (!strcmp(argv[n], "-r")) { sscanf(argv[n+1], "%lf", &file_ratio); n += 2; } else break; } if (keycap != NULL && keydoth != NULL) { fprintf(stderr, "%s: can't use both a keys.h file and keycap file\n", argv[0]); usage(); } if (keycap == NULL && verify_only == 0 && (argc - n) !=5 && (argc - n) != 6) { usage(); } if (n_shells < 1) { fprintf(stderr, "%s: number of shells must >= 1\n", argv[0]); usage(); } if (swap_steps < 0) { fprintf(stderr, "%s: average number of steps between stops must be >= 0\n", argv[0]); usage(); } if (n_files < 1) { fprintf(stderr, "%s: number of files must be >= 1\n", argv[0]); usage(); } if (keycap == NULL) { key_name = argv[n]; client_type = argv[n+1]; architecture = argv[n+2]; creator = argv[n+3]; comments = argv[n+4]; if (argv[n+5]) class = argv[n+5]; else class = "???"; } printf("Source basename: \"%s\"\n", clients_basename); printf("Number of shells: %d\n", n_shells); printf("Number of steps between swaps: %d\n", swap_steps); printf("Number of files: %d\n", n_files); printf("Ratio of computation in files to main file: %lg\n", file_ratio); if (keydoth == NULL && keycap == NULL) { printf("Making new key, hold on....\n"); #ifdef __GNU_MP__ printf("(using GNU MP)\n"); #else printf("(using the system's mp)\n"); #endif assignItom(one,1); assignItom(two,2); assignItom(x,0); assignItom(y,0); assignItom(global,0); assignItom(private,0); assignItom(public,0); assignItom(xyminus1,0); /* * here we find x and y, two large primes */ rand_raw(temp, HALF); temp[0] |= 1; /* force odd */ raw_to_num(x, temp); while (! is_prime(x)) madd(x, two, x); check_positive(x); assert(is_prime(x)); rand_raw(temp, HALF); temp[0] |= 1; /* force odd */ raw_to_num(y, temp); while (! is_prime(y)) madd(y, two, y); check_positive(y); assert(is_prime(y)); /* * the private key is a large prime (it should be the larger * than x & y) */ rand_raw(temp, HALF + 1); temp[0] |= 1; /* force odd */ raw_to_num(private, temp); while (! is_prime(private)) madd(private, two, private); check_positive(private); assert(is_prime(private)); if (mcmp(x, private) > 0) { #ifdef HAVE_GMP2_H MPTYPE tmp; tmp[0] = x[0]; x[0] = private[0]; private[0] = tmp[0]; #else MPTYPE tmp; tmp = x; x = private; private = tmp; #endif } if (mcmp(y, private) > 0) { #ifdef HAVE_GMP2_H MPTYPE tmp; tmp[0] = x[0]; x[0] = private[0]; private[0] = tmp[0]; #else MPTYPE tmp; tmp = y; y = private; private = tmp; #endif } assert(mcmp(private, x) > 0); assert(mcmp(private, y) > 0); /* * the modulus global is x * y */ mult(x, y, global); check_positive(global); /* * the public key is such that * (public * private) mod ((x - 1) * (y - 1)) == 1 */ msub(x, one, x); msub(y, one, y); mult(x, y, xyminus1); assert(!is_prime(xyminus1)); invert(private, xyminus1, public); check_positive(public); /* check to make sure the invert worked */ { MPTYPE ps; MPTYPE m; MPTYPE one; assignItom(ps,0); assignItom(one,1); assignItom(m,0); mult(private, public, ps); mmod(ps, xyminus1, m); if (mcmp(m, one) != 0) { printf("Ooops! invert failed!\n"); exit(1); } mfree(ps); mfree(m); mfree(one); } /* * convert to raw format */ num_to_raw(raw_global, global); num_to_raw(raw_public, public); num_to_raw(raw_private, private); /* cleanup */ mfree(one); mfree(two); mfree(x); mfree(y); mfree(global); mfree(public); mfree(private); mfree(xyminus1); } else if (keydoth != NULL) { FILE* fp = fopen(keydoth, "r"); char* buffer; struct stat statbuf; printf("Reading old key from keys.h file \"%s\"...\n", keydoth); if (fp == NULL) { printf("%s: can't open keys.h file \"%s\"\n", argv[0], keydoth); perror(""); exit(1); } if (fstat(fileno(fp), &statbuf) < 0) { perror("fstat"); exit(1); } buffer = (char*) malloc(statbuf.st_size); assert(buffer != NULL); if (fread(buffer, 1, statbuf.st_size, fp) != statbuf.st_size) { perror("fread"); exit(1); } fclose(fp); get_array(buffer, "key_global", raw_global, SIZE); get_array(buffer, "key_public", raw_public, SIZE); get_array(buffer, "key_private", raw_private, SIZE); free(buffer); } else { char* buffer; struct stat statbuf; FILE* fp = fopen(keycap, "r"); printf("Reading key from keycap file \"%s\"...\n", keycap); if (fp == NULL) { printf("%s: can't open keycap file \"%s\"\n", argv[0], keycap); perror(""); exit(1); } if (fstat(fileno(fp), &statbuf) < 0) { perror("fstat"); exit(1); } buffer = (char*) malloc(statbuf.st_size); assert(buffer != NULL); if (fread(buffer, 1, statbuf.st_size, fp) != statbuf.st_size) { perror("fread"); exit(1); } fclose(fp); key_name = allocbuf(); client_type = allocbuf(); architecture = allocbuf(); creator = allocbuf(); created = allocbuf(); comments = allocbuf(); if (!kgetkeyname(buffer, key_name) || !kgetstr(buffer, CLIENT_TYPE_FIELD, client_type) || !kgetstr(buffer, CREATOR_FIELD, creator) || !kgetstr(buffer, CREATED_FIELD, created) || !kgetstr(buffer, ARCH_TYPE_FIELD, architecture) || !kgetstr(buffer, COMMENTS_FIELD, comments) || !kgetkey(buffer, GLOBAL_KEY_FIELD, raw_global) || !kgetkey(buffer, PUBLIC_KEY_FIELD, raw_public) || !kgetkey(buffer, SECRET_KEY_FIELD, raw_private)) { fprintf(stderr, "%s: can't parse keycap file \"%s\"\n", argv[0], keycap); exit(1); } free(buffer); } if (test_key) verify_key(raw_public, raw_private, raw_global); if (verify_only) exit(0); if (keycap == NULL) { keycapfp = fopen(key_name, "w"); assert(keycapfp != NULL); strcpy(buf, key_name); strcat(buf, ".secret"); skeycapfp = fopen(buf, "w"); assert(skeycapfp != NULL); } else { keycapfp = NULL; } sprintf(buf, "%s.c", clients_basename); printf("Writing...\n"); clientsfp = fopen(buf, "w"); assert(clientsfp != NULL); /* * first write out some generic info */ fprintf(clientsfp, "char key_name[] = \"%s\";\n", key_name); fprintf(clientsfp, "char client_type[] = \"%s\";\n", client_type); fprintf(clientsfp, "char client_arch[] = \"%s\";\n", architecture); fprintf(clientsfp, "char client_creator[] = \"%s\";\n", creator); fprintf(clientsfp, "char client_comments[] = \"%s\";\n", comments); if (created == NULL) { time(&today); strftime(buf, sizeof(buf), "%B %Y", gmtime(&today)); created = buf; } fprintf(clientsfp, "char client_key_date[] = \"%s\";\n", created); if (keycapfp != NULL) { fprintf(keycapfp, "%s:ct=%s:cr=%s:\\\n :cd=%s:ar=%s:cl=%s:\\\n :cm=%s:\\\n", key_name, client_type, creator, buf, architecture, class, comments); fprintf(skeycapfp, "%s:ct=%s:cr=%s:\\\n :cd=%s:ar=%s:cl=%s:\\\n :cm=%s:\\\n", key_name, client_type, creator, buf, architecture, class, comments); } /* * write the client source header */ fprintf(clientsfp, header, KEY_SIZE, KEY_SIZE); /* * write the global modulos */ if (keycapfp != NULL) { fprintf(keycapfp, " :gk="); fprintf(skeycapfp, " :gk="); for (i = 0; i < SIZE; i++) { fprintf(keycapfp, "%02x", (int) raw_global[i]); fprintf(skeycapfp, "%02x", (int) raw_global[i]); } fprintf(keycapfp, ":\\\n"); fprintf(skeycapfp, ":\\\n"); } gen_key(clientsfp, "global", raw_global, SIZE); /* * write the public key */ if (keycapfp != NULL) { fprintf(keycapfp, " :pk="); fprintf(skeycapfp, " :pk="); for (i = 0; i < SIZE; i++) { fprintf(keycapfp, "%02x", (int) raw_public[i]); fprintf(skeycapfp, "%02x", (int) raw_public[i]); } fprintf(keycapfp, ":\n"); fprintf(skeycapfp, ":\\\n"); } gen_key(clientsfp, "public", raw_public, SIZE); /* * write the private key */ if (keycapfp != NULL) { fprintf(skeycapfp, " :sk="); for (i = 0; i < SIZE; i++) fprintf(skeycapfp, "%02x", (int) raw_private[i]); fprintf(skeycapfp, ":\n"); } /* * write the sequence of computations that compute * (out ** private) mod global */ gen_rsa_sequence(clientsfp, clients_basename, n_files, raw_private, n_shells, swap_steps, file_ratio); /* * write the source trailer */ fprintf(clientsfp, trailer, KEY_SIZE); putc('\n', stdout); /* cleanup */ fclose(clientsfp); if (keycapfp != NULL) { fclose(keycapfp); fclose(skeycapfp); } exit(0); } netrek-client-cow-3.3.2/death.h0000664000175000017500000000005213657750470015304 0ustar jamesjamesvoid death(void); void updatedeath(void); netrek-client-cow-3.3.2/usleep.c0000664000175000017500000000214013657750470015507 0ustar jamesjames #include "config.h" #include #include INC_MATH #include #include #include #include #include INC_STRINGS #include INC_UNISTD usleep(microSeconds) U_LONG microSeconds; { u_int Seconds, uSec; int nfds, readfds, writefds, exceptfds; struct timeval Timer; nfds = readfds = writefds = exceptfds = 0; if( (microSeconds == (U_LONG) 0) || microSeconds > (U_LONG) 4000000 ) { errno = ERANGE; /* value out of range */ perror( "usleep time out of range ( 0 -> 4000000 ) " ); return -1; } Seconds = microSeconds / (U_LONG) 1000000; uSec = microSeconds % (U_LONG) 1000000; Timer.tv_sec = Seconds; Timer.tv_usec = uSec; if( select( nfds, &readfds, &writefds, &exceptfds, &Timer ) < 0 ) { if (errno != EINTR) { perror( "usleep (select) failed" ); return -1; } } return 0; } netrek-client-cow-3.3.2/Wlib.h0000664000175000017500000001574013657750470015126 0ustar jamesjames/* Wlib.h * Include file for the Windowing interface. * * Kevin P. Smith 6/11/89 * * The deal is this: * Call W_Initialize(), and then you may call any of the listed fuinctions. * Also, externals you are allowed to pass or use include W_BigFont, * W_RegularFont, W_UnderlineFont, W_HighlightFont, W_White, W_Black, * W_Red, W_Green, W_Yellow, W_Cyan, W_Grey, W_Textwidth, and W_Textheight. * */ #ifndef _h_Wlib #define _h_Wlib #include "copyright2.h" #include "defs.h" typedef void (*W_Callback) (); typedef char *W_Window; typedef struct event { int type; W_Window Window; unsigned char key; int x, y; #ifdef MOUSE_AS_SHIFT int modifier; #endif } W_Event; /* mapping for some X11 keys that are not represented by ASCII or Latin-1 */ #define W_Key_Up 1 #define W_Key_Down 2 extern W_Callback W_GetWindowKeyDownHandler (W_Window w); extern W_Callback W_GetWindowKeyUpHandler (W_Window w); extern W_Callback W_GetWindowButtonHandler (W_Window w); extern W_Callback W_GetWindowExposeHandler (W_Window w); extern void W_SetWindowKeyDownHandler (W_Window w, W_Callback c); extern void W_SetWindowKeyUpHandler (W_Window w, W_Callback c); extern void W_SetWindowButtonHandler (W_Window w, W_Callback c); extern void W_SetWindowExposeHandler (W_Window w, W_Callback c); typedef char *W_Icon; typedef char *W_Font; typedef int W_Color; extern W_Font W_BigFont, W_RegularFont, W_UnderlineFont, W_HighlightFont, W_IndyFont; extern W_Color W_White, W_Black, W_Red, W_Green, W_Yellow, W_Cyan, W_Grey; #ifdef RACE_COLORS extern W_Color W_Ind, W_Fed, W_Rom, W_Kli, W_Ori; #endif extern int W_BigTextwidth, W_BigTextheight, W_Textwidth, W_Textheight; extern int W_FastClear; extern W_Font W_MyPlanetFont, W_FriendlyPlanetFont, W_EnemyPlanetFont; extern void W_Initialize (char *str); extern void W_GetPixmaps(W_Window t, W_Window g); extern void W_RenameWindow(W_Window window, char *str); extern W_Window W_MakeWindow (char *name, int x, int y, int width, int height, W_Window parent, int border, W_Color color); extern W_Icon W_StoreBitmap (int width, int height, char *data, W_Window window); extern W_Window W_MakeTextWindow (char *name, int x, int y, int width, int height, W_Window parent, int border); extern W_Window W_MakeScrollingWindow (char *name, int x, int y, int width, int height, W_Window parent, int border); extern void W_FlushScrollingWindow(W_Window window); extern void W_SetSensitive(W_Window w, int v); extern W_Window W_MakeMenu (char *name, int x, int y, int width, int height, W_Window parent, int border); extern void W_WriteText (W_Window window, int x, int y, W_Color color, char *str, int len, W_Font font); extern void W_MaskText (W_Window window, int x, int y, W_Color color, char *str, int len, W_Font font); extern void W_WriteBitmap (int x, int y, W_Icon bit, W_Color color); extern void W_ClearArea (W_Window window, int x, int y, int width, int height); extern void W_MakeLine (W_Window window, int x0, int y0, int x1, int y1, W_Color color); extern void W_MapWindow (W_Window window); extern void W_UnmapWindow (W_Window window); extern int W_EventsPending (void); extern void W_NextEvent (W_Event *wevent); extern void W_SetWindowName(W_Window window, char *name); extern void W_TileWindow (W_Window window, W_Icon bit); extern void W_UnTileWindow (W_Window window); extern void W_ChangeBorder (W_Window window, int color); void W_DefineMapcursor(W_Window window); void W_DefineLocalcursor(W_Window window); void W_DefineFedCursor(W_Window window); void W_DefineRomCursor(W_Window window); void W_DefineKliCursor(W_Window window); void W_DefineOriCursor(W_Window window); void W_DefineTrekCursor(W_Window window); void W_DefineWarningCursor(W_Window window); void W_DefineTextCursor(W_Window window); extern void W_DefineCursor (W_Window window, int width, int height, char *bits, char *mask, int xhot, int yhot); extern int W_IsMapped (W_Window window); void W_ReinitMenu(W_Window window, int neww, int newh); void W_ResizeMenu(W_Window window, int neww, int newh); void W_ResizeWindow(W_Window window, int neww, int newh); extern void W_Beep (void); extern void W_DestroyWindow (W_Window window); extern int W_WindowWidth (W_Window window); extern int W_WindowHeight (W_Window window); extern int W_Socket (void); extern void W_ClearWindow (W_Window window); extern void W_SetIconWindow (W_Window main, W_Window icon); extern void W_CacheLine(W_Window, int, int, int, int, int); extern void W_MakeTractLine(W_Window, int, int, int, int, W_Color); extern void W_MakePhaserLine(W_Window, int, int, int, int, W_Color); extern void W_WriteCircle(W_Window, int, int, int, W_Color); extern void W_WriteTriangle(W_Window, int, int, int, int, W_Color); extern void W_CacheClearArea(W_Window, int, int, int, int); extern void W_FlushClearAreaCache(W_Window); extern void W_FlushLineCaches(W_Window); extern void W_ResizeTextWindow(W_Window, int, int); extern int W_Mono(void); extern int W_EventsQueuedCk(void); extern void W_OverlayBitmap(int, int, W_Icon, W_Color); extern void W_WriteTriangle(W_Window, int, int, int, int, W_Color); extern void W_Flush(void); #define W_EV_EXPOSE 1 #define W_EV_KEY 2 #define W_EV_BUTTON 3 #ifdef MOUSE_AS_SHIFT #define W_EV_MKEY 4 #endif #ifdef AUTOKEY #define W_EV_KEY_OFF 4 #endif /*AUTOKEY */ #ifdef MOTION_MOUSE #define W_EV_CM_BUTTON 5 #endif #define W_EV_CLOSED 6 /* window was closed by user action */ #define W_LBUTTON 1 #define W_MBUTTON 2 #define W_RBUTTON 3 #define W_WUBUTTON 4 // Mouse wheel up #define W_WDBUTTON 5 // wheel down #define W_X1BUTTON 6 // future extra keys #define W_X2BUTTON 7 #ifdef SHIFTED_MOUSE #define W_SHIFT_BUTTON 0x08 #define W_CTRL_BUTTON 0x10 #define W_BUTTON_RANGE 0x20 #else #define W_BUTTON_RANGE 8 #endif #define W_BoldFont W_HighlightFont void W_FillArea(W_Window window, int x, int y, int width, int height, W_Color color); void W_DefineArrowCursor(W_Window window); void W_GalacticBgd(int which); void W_LocalBgd(int which); int W_TTSTextHeight(void); int W_TTSTextWidth(char *s, int l); void W_EraseTTSText(W_Window window, int max_width, int y, int width); void W_WriteTTSText(W_Window window, int max_width, int y, int width, char *str, int len); void W_Halo(int x, int y, W_Color color); void W_FullScreenOn(W_Window window); void W_FullScreenOff(W_Window window); void W_FullScreenInitialise(void); int W_FullScreenToggle(W_Window window); #define FULLSCREEN_NOT_COMPILED -1 #define FULLSCREEN_OK 0 #define FULLSCREEN_FAILED 1 void W_FullScreenBegin(W_Window window); void W_FullScreen(W_Window window); void W_CameraSnap(W_Window window); int W_SpNextEvent(W_Event *wevent); int findMouseInWin(int *x, int *y, W_Window w); int W_EventsQueued(void); int W_EventsQueuedCk(void); void W_SetBackground(W_Window w, int which); void *W_SetBackgroundImage(W_Window w, char *name); void W_NextScreenShot(W_Window w, int x, int y); void W_DrawScreenShot(W_Window w, int x, int y); void *W_ReadImage(W_Window w, char *name); void W_DrawImage(int x, int y, void *sprite_v); void W_DropImage(void *sprite_v); #endif /* _h_Wlib */ netrek-client-cow-3.3.2/rotate.h0000664000175000017500000000016313657750470015520 0ustar jamesjames/* rotate.c */ void rotate_dir(unsigned char *d, int r); void rotate_coord(int *x, int *y, int d, int cx, int cy); netrek-client-cow-3.3.2/colors.h0000664000175000017500000000005013657750470015516 0ustar jamesjames/* colors.c */ void getColorDefs(void); netrek-client-cow-3.3.2/ranklist.c0000664000175000017500000000653013657750470016050 0ustar jamesjames/* ranklist.c * * Kevin P. Smith 12/5/88 * */ #include "config.h" #include "copyright2.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" /* Calculate DI to next rank, following server logic */ /* Credit: Bill Balcerski, revision 1.2, 2007/04/02 10:12:38, Netrek XP */ static float toNextRank(int rank) { int hourratio; float rankDI, myDI, oRating, pRating, bRating, Ratings; /* TODO: add support for INL mode */ if (!strcmp(me->p_name, "guest") || !strcmp(me->p_name, "Guest")) hourratio = 5; else hourratio = 1; oRating = offenseRating (me); pRating = planetRating (me); bRating = bombingRating (me); Ratings = oRating + pRating + bRating; myDI = (float) (Ratings * (me->p_stats.st_tticks / 36000.0)); rankDI = ranks[rank].ratings * ranks[rank].hours / hourratio; if (Ratings > ranks[rank].ratings) { if (myDI > rankDI) return (0.0); else return (rankDI - myDI); } else if (Ratings > (ranks[rank-1].ratings)) { if (myDI > 2*rankDI) return (0.0); else return (2*rankDI - myDI); } else if (me->p_stats.st_rank > 0 && Ratings > (ranks[rank-2].ratings)) { if (myDI > 4*rankDI) return (0.0); else return (4*rankDI - myDI); } else if (me->p_stats.st_rank >= 4 && Ratings > (ranks[rank-3].ratings)) { if (myDI > 8*rankDI) return (0.0); else return (8*rankDI - myDI); } else return (-1); } void ranklist(void) { int i; char buf[80]; int col = F_sp_rank ? textColor : W_Grey; static int size = 0; if (size != nranks) { W_ClearWindow(rankw); W_ResizeTextWindow(rankw, 65, nranks + 9); size = nranks; } strcpy(buf, " Rank Hours Offense Ratings DI"); W_WriteText(rankw, 1, 1, col, buf, strlen(buf), W_BoldFont); for (i = 0; i < nranks; i++) { sprintf(buf, "%-11.11s %5.0f %8.2f %8.2f %7.2f", ranks[i].name, ranks[i].hours, ranks[i].offense, ranks[i].ratings, ranks[i].ratings * ranks[i].hours); if (mystats->st_rank == i) { if (i < nranks-1) { char buf2[35]; float DI; if ((DI = toNextRank(i+1)) != -1) { sprintf(buf2, " (need %.2f DI)", DI); strcat(buf, buf2); } else { strcat(buf, " (need ratings)"); } } W_WriteText(rankw, 1, i + 2, W_Cyan, buf, strlen(buf), W_BoldFont); } else { W_WriteText(rankw, 1, i + 2, col, buf, strlen(buf), W_RegularFont); } } strcpy(buf, "To achieve a rank, you need the corresponding DI"); W_WriteText(rankw, 1, i + 3, col, buf, strlen (buf), W_RegularFont); strcpy(buf, "in less than the hours allowed (DI = ratings x hours)."); W_WriteText(rankw, 1, i + 4, col, buf, strlen (buf), W_RegularFont); strcpy(buf, "OR, get offense+bombing+planets above corresponding Ratings"); W_WriteText(rankw, 1, i + 5, col, buf, strlen (buf), W_RegularFont); strcpy(buf, "Promotions also occur at 2xDI with Ratings - 1"); W_WriteText(rankw, 1, i + 6, col, buf, strlen (buf), W_RegularFont); strcpy(buf, "4xDI with Ratings - 2, and 8xDI with Ratings - 3"); W_WriteText(rankw, 1, i + 7, col, buf, strlen (buf), W_RegularFont); W_Flush(); } netrek-client-cow-3.3.2/autogen.sh0000775000175000017500000000070113657750470016050 0ustar jamesjames#!/bin/sh rm -f config.guess config.sub ltmain.sh aclocal libtoolize --copy if [ ! -f config.sub ]; then # later versions of libtool silently fail to create config.sub # unless --install is added, yet --install is not valid on the # older versions. later versions also support --no-warn to reduce # output volume libtoolize --install --copy --no-warn fi autoconf chmod +x debian/rules tests/build echo "autogen.sh completed ok" netrek-client-cow-3.3.2/string_util.c0000664000175000017500000000402513657750470016561 0ustar jamesjames/* string_util.c * * The client actually uses lots of string functions, mostly to format the * information it displays. This module provides housing for all these * string functions. * */ #include "config.h" #include "copyright.h" #include char *itoapad(int val, char *result, int pad, int prec) { int lead_digit = 0, i, j, too_big = 1, h = 1; if (prec != 0) result[prec] = '\0'; /* Careful!!! maximum number convertable must be <=100000000. size < 9 */ for (i = 100000000, j = 0; i && h <= prec; i /= 10, j++) { if ((9 - prec) > j && too_big) continue; else if (h) { j = 0; too_big = 0; h = 0; } result[j] = (val % (i * 10)) / i + '0'; if (result[j] != '0' && !lead_digit) lead_digit = 1; if (!lead_digit && !pad) if ((result[j] = (val % (i * 10)) / i + '0') == '0') result[j] = ' '; } if (val == 0) result[prec - 1] = '0'; return (result); } char *ftoa(float fval, char *result, int pad, int iprec, int dprec) { int i, ival; float val = fval; if (fval < 0) { for (i = 0; i <= iprec + dprec + 1; i++) { result[i] = '?'; } result[iprec + dprec + 1] = '\0'; return result; } if ((iprec + dprec) != 0) result[iprec + dprec + 1] = '\0'; for (i = 0; i < dprec; i++) val *= 10.0; ival = val; itoapad(ival, result, pad, iprec + dprec); for (i = (iprec + dprec); i >= iprec; i--) if (result[i] == ' ') result[i + 1] = '0'; else result[i + 1] = result[i]; result[iprec] = '.'; if (fval < 1.0) result[iprec - 1] = '0'; return (result); } char * format(char *buf, char *from, int width, int right_justify) { int len = strlen(from), i; if (len > width) len = width; buf[width] = '\0'; if (right_justify) { STRNCPY(&(buf[width - len]), from, len); for (i = 0; i < (width - len); i++) buf[i] = ' '; } else { STRNCPY(buf, from, len); for (i = len; i < width; i++) buf[i] = ' '; } return (buf); } netrek-client-cow-3.3.2/setstate.c0000664000175000017500000003242313657750470016055 0ustar jamesjames#include "config.h" /* Avoid conflict with random in Xbsd 24/03/94 [007] * */ #if defined(HAVE_RANDOM) #define random rrandom #define srandom ssrandom #endif /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)random.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ #include #include long random(); void srandom(); /* * random.c: * * An improved random number generation package. In addition to the standard * rand()/srand() like interface, this package also has a special state info * interface. The initstate() routine is called with a seed, an array of * bytes, and a count of how many bytes are being passed in; this array is * then initialized to contain information for random number generation with * that much state information. Good sizes for the amount of state * information are 32, 64, 128, and 256 bytes. The state can be switched by * calling the setstate() routine with the same array as was initiallized * with initstate(). By default, the package runs with 128 bytes of state * information and generates far better random numbers than a linear * congruential generator. If the amount of state information is less than * 32 bytes, a simple linear congruential R.N.G. is used. * * Internally, the state information is treated as an array of longs; the * zeroeth element of the array is the type of R.N.G. being used (small * integer); the remainder of the array is the state information for the * R.N.G. Thus, 32 bytes of state information will give 7 longs worth of * state information, which will allow a degree seven polynomial. (Note: * the zeroeth word of state information also has some other information * stored in it -- see setstate() for details). * * The random number generation technique is a linear feedback shift register * approach, employing trinomials (since there are fewer terms to sum up that * way). In this approach, the least significant bit of all the numbers in * the state table will act as a linear feedback shift register, and will * have period 2^deg - 1 (where deg is the degree of the polynomial being * used, assuming that the polynomial is irreducible and primitive). The * higher order bits will have longer periods, since their values are also * influenced by pseudo-random carries out of the lower bits. The total * period of the generator is approximately deg*(2**deg - 1); thus doubling * the amount of state information has a vast influence on the period of the * generator. Note: the deg*(2**deg - 1) is an approximation only good for * large deg, when the period of the shift register is the dominant factor. * With deg equal to seven, the period is actually much longer than the * 7*(2**7 - 1) predicted by this formula. */ /* * For each of the currently supported random number generators, we have a * break value on the amount of state information (you need at least this * many bytes of state info to support this random number generator), a degree * for the polynomial (actually a trinomial) that the R.N.G. is based on, and * the separation between the two lower order coefficients of the trinomial. */ #define TYPE_0 0 /* linear congruential */ #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 #define TYPE_1 1 /* x**7 + x**3 + 1 */ #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 #define TYPE_2 2 /* x**15 + x + 1 */ #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 #define TYPE_3 3 /* x**31 + x**3 + 1 */ #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 #define TYPE_4 4 /* x**63 + x + 1 */ #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* * Array versions of the above information to make code run faster -- * relies on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* max number of types above */ static int degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 }; static int seps [MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }; /* * Initially, everything is set up as if from: * * initstate(1, &randtbl, 128); * * Note that this initialization takes advantage of the fact that srandom() * advances the front and rear pointers 10*rand_deg times, and hence the * rear pointer which starts at 0 will also end up at zero; thus the zeroeth * element of the state information, which contains info about the current * position of the rear pointer is just * * MAX_TYPES * (rptr - state) + TYPE_3 == TYPE_3. */ static long randtbl[DEG_3 + 1] = { TYPE_3, 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b, 0x27fb47b9, }; /* * fptr and rptr are two pointers into the state info, a front and a rear * pointer. These two pointers are always rand_sep places aparts, as they * cycle cyclically through the state information. (Yes, this does mean we * could get away with just one pointer, but the code for random() is more * efficient this way). The pointers are left positioned as they would be * from the call * * initstate(1, randtbl, 128); * * (The position of the rear pointer, rptr, is really 0 (as explained above * in the initialization of randtbl) because the state table pointer is set * to point to randtbl[1] (as explained below). */ static long *fptr = &randtbl[SEP_3 + 1]; static long *rptr = &randtbl[1]; /* * The following things are the pointer to the state information table, the * type of the current generator, the degree of the current polynomial being * used, and the separation between the two pointers. Note that for efficiency * of random(), we remember the first location of the state information, not * the zeroeth. Hence it is valid to access state[-1], which is used to * store the type of the R.N.G. Also, we remember the last location, since * this is more efficient than indexing every time to find the address of * the last element to see if the front and rear pointers have wrapped. */ static long *state = &randtbl[1]; static int rand_type = TYPE_3; static int rand_deg = DEG_3; static int rand_sep = SEP_3; static long *end_ptr = &randtbl[DEG_3 + 1]; /* * srandom: * * Initialize the random number generator based on the given seed. If the * type is the trivial no-state-information type, just remember the seed. * Otherwise, initializes state[] based on the given "seed" via a linear * congruential generator. Then, the pointers are set to known locations * that are exactly rand_sep places apart. Lastly, it cycles the state * information a given number of times to get rid of any initial dependencies * introduced by the L.C.R.N.G. Note that the initialization of randtbl[] * for default usage relies on values produced by this routine. */ void srandom (x) unsigned int x; { register int i, j; if (rand_type == TYPE_0) state[0] = x; else { j = 1; state[0] = x; for (i = 1; i < rand_deg; i++) state[i] = 1103515245 * state[i - 1] + 12345; fptr = &state[rand_sep]; rptr = &state[0]; for (i = 0; i < 10 * rand_deg; i++) (void) random (); } } /* * initstate: * * Initialize the state information in the given array of n bytes for future * random number generation. Based on the number of bytes we are given, and * the break values for the different R.N.G.'s, we choose the best (largest) * one we can and set things up for it. srandom() is then called to * initialize the state information. * * Note that on return from srandom(), we set state[-1] to be the type * multiplexed with the current value of the rear pointer; this is so * successive calls to initstate() won't lose this information and will be * able to restart with setstate(). * * Note: the first thing we do is save the current state, if any, just like * setstate() so that it doesn't matter when initstate is called. * * Returns a pointer to the old state. */ char * initstate(seed, arg_state, n) unsigned int seed; /* seed for R.N.G. */ char *arg_state; /* pointer to state array */ int n; /* # bytes of state info */ { register char *ostate = (char *)(&state[-1]); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = MAX_TYPES * (rptr - state) + rand_type; if (n < BREAK_0) { (void)fprintf(stderr, "random: not enough state (%d bytes); ignored.\n", n); return(0); } if (n < BREAK_1) { rand_type = TYPE_0; rand_deg = DEG_0; rand_sep = SEP_0; } else if (n < BREAK_2) { rand_type = TYPE_1; rand_deg = DEG_1; rand_sep = SEP_1; } else if (n < BREAK_3) { rand_type = TYPE_2; rand_deg = DEG_2; rand_sep = SEP_2; } else if (n < BREAK_4) { rand_type = TYPE_3; rand_deg = DEG_3; rand_sep = SEP_3; } else { rand_type = TYPE_4; rand_deg = DEG_4; rand_sep = SEP_4; } state = &(((long *)arg_state)[1]); /* first location */ end_ptr = &state[rand_deg]; /* must set end_ptr before srandom */ srandom(seed); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = MAX_TYPES*(rptr - state) + rand_type; return(ostate); } /* * setstate: * * Restore the state from the given state array. * * Note: it is important that we also remember the locations of the pointers * in the current state information, and restore the locations of the pointers * from the old state information. This is done by multiplexing the pointer * location into the zeroeth word of the state information. * * Note that due to the order in which things are done, it is OK to call * setstate() with the same state as the current state. * * Returns a pointer to the old state information. */ char * setstate(arg_state) char *arg_state; { register long *new_state = (long *)arg_state; register int type = new_state[0] % MAX_TYPES; register int rear = new_state[0] / MAX_TYPES; char *ostate = (char *)(&state[-1]); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = MAX_TYPES * (rptr - state) + rand_type; switch(type) { case TYPE_0: case TYPE_1: case TYPE_2: case TYPE_3: case TYPE_4: rand_type = type; rand_deg = degrees[type]; rand_sep = seps[type]; break; default: (void)fprintf(stderr, "random: state info corrupted; not changed.\n"); } state = &new_state[1]; if (rand_type != TYPE_0) { rptr = &state[rear]; fptr = &state[(rear + rand_sep) % rand_deg]; } end_ptr = &state[rand_deg]; /* set end_ptr too */ return(ostate); } /* * random: * * If we are using the trivial TYPE_0 R.N.G., just do the old linear * congruential bit. Otherwise, we do our fancy trinomial stuff, which is * the same in all the other cases due to all the global variables that have * been set up. The basic operation is to add the number at the rear pointer * into the one at the front pointer. Then both pointers are advanced to * the next location cyclically in the table. The value returned is the sum * generated, reduced to 31 bits by throwing away the "least random" low bit. * * Note: the code takes advantage of the fact that both the front and * rear pointers can't wrap on the same call by not testing the rear * pointer if the front one has wrapped. * * Returns a 31-bit random number. */ long random () { long i; if (rand_type == TYPE_0) i = state[0] = (state[0] * 1103515245 + 12345) & 0x7fffffff; else { *fptr += *rptr; i = (*fptr >> 1) & 0x7fffffff; /* chucking least random bit */ if (++fptr >= end_ptr) { fptr = state; ++rptr; } else if (++rptr >= end_ptr) rptr = state; } return (i); } netrek-client-cow-3.3.2/netrekrc.example0000664000175000017500000006055013657750470017251 0ustar jamesjames#------------# # .xtrekrc # #------------# # # This is the defaults file for netrek. Layout was taken from # jch's file, lots of other stuff from various places. # # Dave Gosselin # Apr 92 # Changes regularly # ############################################################################### # # How I found this stuff: # doc/patch files that come with the clients # greped code (booleanDefault, intDefault, getdefault, mostly) # scaned the code (defaults.c, etc) # # Most of these settings apply to Berkricksmoo2.00pl19 # ############################################################################### # # Modified this slightly to make defaults that newbies might like # better/find more instructive. Be sure to place this file in your # home directory and rename it to ".xtrekrc" - Jeff Nelson 8/11/93 # ############################################################################### # # Feb 95 Added new features - Kurt Siegl [007] ############ WARNING ############ WARNING ############## WARNING ######## # There seems to be a bug which makes defaults, containing # # comments or other garbage (blanks) at the right end INVALID. # ############ WARNING ############ WARNING ############## WARNING ######## # # Aug 99 Cleanup and uptodate settings - Kurt Siegl [007] # name: guest # set password to your player name password for autologin #password: oggtpau ############################################################################### # this sets the default server and port server: se.netrek.org port: 2592 # you can also make nicknames like: server.bronco: bronco.ece.cmu.edu port.bronco: 2592 server.hockey: hockey.netrek.org port.hockey: 2592 server.picklet: pickled.fox.cs.cmu.edu server.picklet-home: pickled.fox.cs.cmu.edu port.picklet-home: 4566 server.picklet-away: pickled.fox.cs.cmu.edu port.picklet-away: 4577 ############################################################################## # MetaServer options metaCache: .metaCache metaserver: metaserver.netrek.org ############################################################################### # a bunch of boolean sets/toggles # show shields in warning status warnShields: off # show shields based on damage varyShields: on # Warn hull state based on damage warnHull: off # stay peaceful after death keeppeace: on # really handy to see tractor/pressor showTractorPressor: on # no means visible shuts off in 2 updates continuetractors: on # only works sans window manager extraAlertBorder: on # I like color forcemono: off # really silly rom bitmaps ROMVLVS: off # as well as some fed bitmaps useTNGBitmaps: off # the babes when you bust (kinda sexist but oh well) babes: on # Good players dont waste space with planet names on the local map #showplanetnames: off # Show the planet owner on galactic as a team letter (a most annoying feature) showPlanetOwner: off # Extra highlight of independend planets showIND: on # New mucho-mondo dashboard # 0 - Text dashboard # 1 - COW style dashboard # 2 - KRP style dashboard # 3 - LABs new dashboard newDashboard: 3 # always show MOTD showMotd: on # I don't like the right justified distress calls newDistress: off # message logging logging: off logfile: Log_me # galactic map stuff: 0 = nothing 1 = ownership 2 = resources # 3 = MOO bitmaps 4 = rabbit ears showgalactic: 2 # local map stuff: 0 = nothing 1 = ownership 2 = resources # 3 = MOO bitmaps 4 = rabbit ears showlocal: 3 # Default updates per second # updatespersec: 5 # how many updates to keep infowins keepInfo: 15 # Time to auto-quit autoquit: 199 # lock: 0 = don't show, 1 = galactic only , 2 = tactical only, 3 = both showLock: 3 #characters shown for cloaker #cloakChars: >< # lagmeter stuff (which I don't use) netstats: off #netstatfreq: 5 # tryUdp: on/off tryUdp: on # udpClientSend: 0 = TCP only 1 = simple UDP 2 = enforced UDP (state only) # 3 = enforced UDP (state & weap) udpClientSend: 3 # udpClientReceive: 0 = TCP only 1 = simple UDP 2 = fat UDP 3 = double UDP udpClientReceive: 1 # udpSequenceCheck: on/off udpSequenceCheck: on # udpDebug: 0 = OFF 1 = ON (conect msgs only) 2 = ON (verbose output) udpDebug: 0 # short packets tryShort: on # PPosition or USPosition (PPosition if you use vtwm) WMXYHintMode: USPosition # Ignore Capslock key ignoreCaps: on # Recover after SEGV and BUS error ignoreSignals: on # Sound is really cool, but anoing for others. sounddir: /usr/games/netrek/sounds sound: off # Nice Color Graphics pixmapDir: /usr/games/netrek/pixmaps # Remote command for accessing Web sites wwwlink: echo 'netscape -remote "openURL(%s)"' ############################################################################### # my keymap # # q = warp 1, w = beam up, e = det own, r = pressor, t = tractor # a = maxwarp, s = shield tog, d = torps, f = tractor, g = plasma # z = 1/2 speed x = beam down, c = cloak v = lock # SPACE == det enemy torps # # Q = repair E = distress R = repair # A = info D = lock F = army call # # n = refit (new ship) # | = quit ( now fastquit - jn ) # / = docking # W = war window # # everything else is the default (I think) # turned off keymap, almost certainly this is individual taste # also | -> fast quit, not normal quit - jn #keymap: wweerrTTyyddDDffzzxxccbbOOq2wzeDrytTa%ssdtfTgf dAiDlWw/enrRRz#xxvl|qQROO #buttonmap: 1t2p3k # 007's extended mouse button map alows you to play with the mouse only. # Mouse Buttons: # Normal: torp phaser set course # Shift: shield traktor half warp # CNTRL: cloak pressor warp 6 # CTL-Shift: macro info lock continuousMouse: off shiftedMouse: on # Using virtual keys for ship independend macro overlays. buttonmap: 1^A2^B3^C4^D5^E6^F7^G8^H9^Ia^Jb^Kc^L ckeymap: ^At^Bp^Ck^Du^ET^F#^Gc^Hy^I6^JX^Ki^Ll keymap: afsDddzzxxccv%nrmm dXX0%-R++\-??wwiiIIKKOOSSVVBBUUDDee # Special combat speed keys dependend on ship types ckeymap-sc: ^F5^I% ckeymap-dd: ^F5^I7 ckeymap-ca: ^F4^I7 ckeymap-bb: ^F3^I6 ckeymap-as: ^F4^I% ckeymap-sb: ^F%^ID # Well I was playing around with them at one time.... color.white: white color.black: black color.red: red color.green: green color.yellow: yellow color.cyan: cyan color.light grey: lightgrey # Use different colors for the Races color.Ind: light grey color.Fed: yellow color.Rom: magenta color.Kli: green2 color.Ori: light steel blue # From Helix's .xtrekrc # Standard, except red is hard to see on some monitors #color.white: white #color.white: grey90 #color.black: black #color.black: grey35 #color.red: #FFB4FF #color.green: green #color.yellow: yellow #color.cyan: cyan #color.light grey: light grey ############################################################################### # Fonts # # I've gone through many iterations of this as you can see... # # Currently I'm only setting bigfont since the berkmoo defaults seem ok bigfont: lucidasanstypewriter-bold-24 # Using real italic fonts (bigger...) #font: -schumacher-clean-medium-r-normal--10-100-75-75-c-60-* #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-* #italicfont: -schumacher-clean-medium-i-normal--12-120-75-75-c-60-* # #font: 6x10 #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -schumacher-clean-medium-i-normal--12-120-75-75-c-60-iso8859-1 # My old defaults #font: 6x10 #font: -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -*-clean-medium-r-normal--6-60-75-75-c-60-* #italicfont: 6x10i #boldfont: -*-clean-bold-r-normal--10-100-75-75-c-60-* # A new idea #font: -*-clean-bold-r-normal--10-100-75-75-c-60-* #italicfont: 6x10 #boldfont: 6x10 # fonts from Helix's .xtrekrc # Give same size fonts with boldface, italics for small font using client # I have checked out all the fonts that are reasonable--pick the one you like #font: -schumacher-clean-medium-r-normal--10-100-75-75-c-60-iso8859-1 #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -schumacher-clean-medium-i-normal--12-120-75-75-c-60-iso8859-1 #font: 6x10 #font: -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 #boldfont: -adobe-courier-bold-r-normal--10-100-75-75-m-60-iso8859-1 #italicfont: -schumacher-clean-medium-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -adobe-courier-medium-o-normal--10-100-75-75-m-60-iso8859-1 #italicfont: -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1 #bigfont: lucidasanstypewriter-bold-24 # #smallfont: 5x8 #smallboldfont: lucidasanstypewriter-bold-8 #smitalicfont: lucidasanstypewriter-8 # 007's fonts using an underline font for oponents (kewl for B&W) #font: 6x10 #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: 6x10i #bigfont: lucidasanstypewriter-bold-24 tts_font: -*-lucida-bold-r-*-*-34-*-*-*-*-*-*-* ############################################################################### # Window placement # # Since changing fonts causes changes to the window sizes # this section has gone through many revisions as well # # The next iteration of all this using the new dashboard.... # I don't usually want to see the MOTD until I'm in #WaitMotd.mapped: off # To encourage motd reading I'll activate this - jn WaitMotd.mapped: on # start of gosellin's geometry, cool in some ways but mapping # various windows onto root has it's uses. I've commented # this out and replaced it with more standard mappings. - jn ## The main window -- only map it when there's no wait queue # ##netrek.geometry: 1150x875+0 # the maximal window for my sparc 2 ##netrek.geometry: 1002x795+145+79 # using old fonts #netrek.geometry: 1002x836+147+40 netrek.geometry: 1002x760 netrek.mapped: off # war.geometry: +800 # help.parent: netrek help.geometry: +0+547 ## planet.parent: netrek planet.geometry: +20 ## Ok, on the left side we have a column of six windows; message, ## warning, new dash (ie tstats), my messages, team messages, all ## messages. I have the total messages maped to cover this whole area ## so by using ? you can toggle between seeing the broken up messages ## or the total window. The stats window has been removed in favor of ## the new dashboard. # message.parent: netrek message.geometry: 496x20+502+500 message.mapped: on # warn.parent: netrek warn.geometry: 496x23+502+523 warn.mapped: on # #tstat.parent: netrek #tstat.geometry: 500x43+0+547 ##tstat.geometry: 500x43+501+500 # pre new dash method #tstat.mapped: on # review_your.parent: netrek #review_your.geometry: 81x5+0+591 # message below new dashboard... review_your.geometry: 81x4+0+547 review_your.mapped: on # review_team.parent: netrek #review_team.geometry: 81x9+0+652 review_team.geometry: 81x5+0+599 ##review_team.geometry: 81x5+0+609 # smaller team window ##review_team.geometry: 81x5+0+617 # big fonts review_team.mapped: on # review_all.parent: netrek review_all.geometry: 81x4+0+662 #review_all.geometry: 81x7+0+754 ##review_all.geometry: 81x5+0+690 # big fonts review_all.mapped: on # ## With this setup, you can use "?" to cycle between the big review window, the ## four small message windows, and no windows at all. # review.parent: netrek review.geometry: 81x20+0+547 review.mapped: off # ## On the right side we have the phaser window, player list, kill messages # ## phaser window ## dunno if the following line is really needed or not.... #phaserWindow: on ## 0 = don't show 1 = show on kill window 2 = show on phaser window ## 3 = show on total review window only #showPhaser: 2 #review_phaser.mapped: on #review_phaser.parent: netrek #review_phaser.geometry: 81x3+501+500 ## review_phaser.geometry: 81x4+501+543 # pre-newdash # # Player list layout player.parent: netrek #player.geometry: +502+530 player.geometry: +502+550 ##player.geometry: +502+595 player.mapped: on # And style settings # 0 - Custom player list # 1 - Old Player List # 2 - COW Player List # 3 - Kill Watch Player List # 4 - BRMH Player List playerListStyle: 2 # Sort acording race sortPlayers: on # My team is on top sortMyTeamFirst: on # Partition Playerlist with blank line? partitionPlist: off # Custom Playerlist settings #Spc Let Name Header #--- --- -------------------- ------------------- # 3 'n' Ship Number " No" # 3 'T' Ship Type " Ty" # 11 'R' Rank " Rank " # 17 'N' Name " Name " # 6 'K' Kills " Kills" # 17 'l' Login Name " Login " # 6 'O' Offense " Offse" # 6 'W' Wins " Wins" # 6 'D' Defense " Defse" # 6 'L' Losses " Loss" # 6 'S' Total Rating (stats) " Stats" # 6 'r' Ratio " Ratio" # 8 'd' Damage Inflicted(DI) " DI" # 1 ' ' White Space " " # 6 'B' Bombing " Bmbng" # 6 'b' Armies Bombed " Bmbed" # 6 'P' Planets " Plnts" # 6 'p' Planets Taken " Plnts" # 17 'M' Display/Host Machine " Host Machine " # 7 'H' Hours Played " Hours " # 6 'k' Max Kills " Max K" # 6 'V' Kills per Hour " KPH" # 6 'v' Deaths per Hour " DPH" playerlist: nKTNlSrVdR # reportkills: on review_kill.parent: netrek #review_kill.geometry: 81x6+501+768 review_kill.geometry: 81x4+0+714 review_kill.mapped: on # # start of new window mappings - jn #netrek.geometry: +0+0 #war.geometry: +800 #rank.parent: root #rank.geometry: 89x30 #review_all.mapped: on #review_all.geometry: 80x26+554+624 #review_your.parent: review_all #review_your.geometry: 80x6+0+0 #review_your.mapped: on #review_team.parent: review_all #review_team.geometry: 80x5+0+78 #review_team.mapped: on #review_kill.parent: review_all #review_kill.geometry: 80x4+0+143 #review_kill.mapped: on #help.geometry: 150x21 #player.geometry: 95x24+2+624 #player.mapped: on ## a couple of other window mappings # # Some UDP stuff udp.geometry: +0+0 udp.mapped: off # I'm planning on using the new dash instead showstats: off stats.parent: netrek #stats.geometry: 160x108+332+500 # old font stuff #stats.geometry: 160x108+332+550 # puts the stats window further down #stats.geometry: 160x108+332+547 stats.geometry: 160x94+842+500 ############################################################################### # from: jjudy@argon.berkeley.edu (Jack W. Judy) # Heh! This makes it almost impossible to screw-up and *accidently* choose # the *wrong* team! Got this idea from an old post. #fed - Fed selection window fed.parent: local fed.geometry: 75x75+0+424 #rom - Romulan selection window rom.parent: local rom.geometry: 75x75+0+0 #kli - Klingon selection window kli.parent: local kli.geometry: 75x75+425+0 #ori - Orion selection window ori.parent: local ori.geometry: 75x75+424+424 #quit quit.parent: local quit.geometry: 100x100+200+0 # from Helix's .xtrekrc # The team selection windows, put in their logical places # on the GALACTIC map! #fed.geometry: +0+400 #rom.geometry: +0+0 #kli.geometry: +400+0 #ori.geometry: +400+400 #quit.geometry: +200+400 #rom.parent: map #kli.parent: map #fed.parent: map #ori.parent: map #quit.parent: map # # Macros and distress calls # # Place all important macros and distess calls onto the mouse. # Requires 007's extended mouse button map. # Mouse Buttons: # Normal: pop control pickup # Shift: bombing escorting ogging # CNTRL: defend me ack player ogg # CTL-Shift: distress takeing carring dist.^A.pop: %T%c->%O %l%?%n>-1%{ @ %n%}! dist.bomb: %T%c: %?%n>4%{bomb %l @ %n%!BOMB%} dist.^B.save_planet: %T%c->%O Emergency at %L!!!! dist.space_control: %T%c: Danger Help Control at %l dist.^C.pickup: WATCH %u: %t%p++ @ %l dist.^D.bombing: %T%c: Bombing %l @ %n dist.^E.escorting: %T%c: Escorting %p dist.^F.ogging: %T%c: Ogging %p mac.^G.%u: defend %c mac.^H.%u: ACK dist.^I.ogg: OGG %u (%t%p) near >%l< dist.^J.help: %i (%S %T%c@%b): %?%S=SB%{SB%!%} Help! %d%% dam, %s%% shd, %f%% fuel %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}%?%a>0%{%a armies!!%!%} dist.^K.taking: %i (%S %T%c@%b): need ESCORT going to >%l%?%n>0%{@%n%}<%?%a>0%{, carrying %a armies!%} dist.^L.carrying: %i (%S %T%c@%b) has %a armies on board! ############################################################################### # Macro stuff # # Mostly so I will know how to play around with them if I ever # decide to... # ############################################################################### # #macro.x.X: #x is any ascii character; it is the "name" of the macro (the key you press #in macro mode to send the associated macro) #X can be A,T,F,R,K,O where A=all, T=team, F=fed, R=rom, K=kli, O=ori #(determines the message board to which the text body of the macro is sent) # # These are the "standard" macro things (ie mostly compiled in) macro.b.T: BOMB!!!! Using an AS! macro.s.T: We need a sc bomber. macro.g.T: Going sc bombing. ############################################################################### # # These are the "NEWMACRO" type macros # # Definitions: # %a armies I am carrying # %d my damage percentage # %s my shield percentage # %f my fuel percentage # %w my wtemp percentage # %e my etemp percentage # %p id character of player nearest mouse # %l three character name of planet nearest mouse # %t team id character of planet/player nearest mouse # %T team id character of my team # %c my id character # %n armies on planet nearest mouse # %E 1 if etemped, 0 if not # %W 1 if wtemped, 0 if not # %S my two character ship type # normalish macro mac.F.T: Help! Carrying %a!! # extra keystroke macro # need to do something like: XfT (send to team) mac.f: Help! Carrying %a!! # multiline (won't work without destination) mac.C.A: +-- +-+ + + Client simply mac.C.A: | | | | | Of the mac.C.A: +-- +-+ \^/ Win best. mac.D.A: D mac.D.A: O mac.D.A: O mac.D.A: S mac.D.A: H mac.7.A: | _/_/ _/_/ _/_/_/ With the mac.7.A: | _/ _/ _/ _/ _/ licence mac.7.A: | _/ _/ _/ _/ _/ to doosh. mac.7.A: | _/_/ _/_/ _/ ________/ ############################################################################### # # These are the "SMARTMACRO" type macros # # Test Definitions: # %? introduces a test # = equivalence # > greater # < less # # "Syntax" # # (1/0)%{ true %! false %} # ^^^^^ Test part (if whatever is here evaluates to 1 you get true # 0 you get false) # simple examples mac.R.A: I'm a %?%S=SB%{star base!%!twink!%} #mac.b.T: %?%n>4%{bomb %Gl at %n%!bomb%} mac.e.T: need escort going to %l%?%a>0%{, carrying %a armies!%} # complex examples mac.d.T: %E%{%!%W%{%!I'm fine. How are you? %}%}%E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} mac.a.T: %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} ############################################################################### # New new macros? # # %m the last message you sent # %i my full player name (16 character max) # %u full name of player nearest mouse (16 character max) # %z 3 letter team id of player/planet nearest mouse # # FULLY CAPITALIZED: # %L three character name of planet nearest mouse # %M the last message you sent # %I my full player name (16 character max) # %U full name of player nearest mouse (16 character max) # %Z 3 letter team id of player/planet nearest mouse #useful for INL... mac.C.%i: CAPTAIN mac.N.%i: NEWGALAXY mac.S.%i: START mac.T.%i: %Z mac.W.%t: SHUT UP, TWINKS!! mac.I.%u: %u: det when you escort! mac.O.%u: (%i) ogging key.C: captain key.B.0: base mac.A.C: Ack, Captain # What this does is allows you to send a macro to a player or # team specified by your mouse location instead of requiring # a 3rd character to be input. Also, it allows you to send # message to yourself without having to actual sit there and # figure out who you are (they tried and failed back in the '60s). # Macros without pressing a macro key. singleMacro: ^p^h^l # Various Macros mac.^p: %v ms ping with %V ms stdv(lag) and %y %% loss really sucks :< mac.^h: Hi, nice to doosh you. # Check the load of the machine mac.^l.!: who;uptime # Beep Lite and TTS UseLite: on # Some consider blinking ships borgish so turn off all the defaults DefLite: off #lite.taking: /c/l #lite.base_ogg: /g/m #lite.pickup: /h #lite.help: %?%S=SB%{/c%} # I like a big TTS ++ pickup message on my screen and TTS is not borgish lite.pickup: /|%p++ @ %l| # On a base ogg highlite own ship and beep (not borgish at all :) lite.base_ogg: /m/0/|sync on %p| lite.taking: /|%T%c@%b+%a -> %l| lite.help: /|help %T%c@%b+%a| # Let's have some neat formated kill messages msg.kill: %i (%S) (%T%c%?%a>0%{+%a babes) %>30 doosh%!) %>30 kill %} %?%d>0%{%k%!%} for %u (%r%p) %?%w>0%{%>70%W%!%} msg.planet: %i (%S) (%T%c%?%a>0%{+%a armies%!%} %>30 killed by %l (%z) msg.bomb: %N %>30 bombed by %i (%S) (%T%c) with %d%% dam msg.destroy: %N %>30 destroyed by %i (%T%c) msg.take: %N %>30 taken by %i (%T%c) msg.ghostbust: %i (%S) (%T%c) %>30 kill %k for the GhostBusters ############################################################################### # # This is the list of windows I've been able to find. Most you will # probably not want to screw around with, but these can be controlled # (at least it appears that way in the code...). # # Windows (specify mapped, geometry and parent) # DocWin # MetaServer List - Metaserver stuff # UDP - UDP controls # count # help - Help window (h) # info # lagMeter - The Lag-o-Meter # local - Main fighting window # macrow - Macro Listing (X-?) # map - Galactic map # message - Message sending window # motdbutton # netrek - The "main" window (parent) # netrek_icon # netstat - Network statistics # network # option - The options window # pingStats - Ping statistics window # planet - Planet listing (P) # player - Player list # quit - Quit box on entry # fed - Team windows on entry # rom - Team windows on entry # kli - Team windows on entry # ori - Team windows on entry # rank - The rank window (U) # review - The munged list of messages from all sources # review_all - Messages to all # review_kill - Kill messages # review_phaser - The phaser damage window # review_team - Messages to your team # review_your - Messages to you # scanner # sound # stats # tools # tstat - Dashboard # wait # waitmotd # waitquit # war - War delcarations # warn - Warnings ("forgot your toothbrush",et al) # xtrekrcWin # xtrekrc_help # # This gives you: # name.mapped (on/off for initial mapping) # name.parent (which window you want this one to be in) # name.geometry (size and location) # ############################################################################### # # THE END # ############################################################################### netrek-client-cow-3.3.2/struct.h0000664000175000017500000004605313657750470015556 0ustar jamesjames/* struct.h for the client of an xtrek socket protocol. * * Most of the unneeded stuff in the structures has been thrown away. * */ #include "copyright.h" #ifndef _h_struct #define _h_struct struct distress { unsigned char sender; unsigned char dam, shld, arms, wtmp, etmp, fuelp, sts; unsigned char wtmpflag, etempflag, cloakflag, distype, macroflag; unsigned char close_pl, close_en, tclose_pl, tclose_en, pre_app, i; unsigned char close_j, close_fr, tclose_j, tclose_fr; unsigned char cclist[6]; /* allow us some day to cc a * message up to 5 people */ /* sending this to the server allows the server to do the cc action */ /* otherwise it would have to be the client ... less BW this way */ char preappend[80]; /* text which we pre or append */ }; struct dmacro_list { unsigned char c; char *name; char *macro; }; struct status { unsigned char tourn; /* Tournament mode? */ /* These stats only updated during tournament mode */ unsigned int armsbomb, planets, kills, losses, time; /* Use LONG for this, so it never wraps */ unsigned LONG timeprod; }; enum dist_type { /* help me do series */ take = 1, ogg, bomb, space_control, save_planet, base_ogg, help1, help2, /* doing series */ escorting, ogging, bombing, controlling, asw, asbomb, doing1, doing2, /* other info series */ free_beer, /* ie. player x is totally * hosed now */ no_gas, /* ie. player x has no gas */ crippled, /* ie. player x is way hurt * but may have gas */ pickup, /* player x picked up armies */ pop, /* there was a pop somewhere */ carrying, /* I am carrying */ other1, other2, /* just a generic distress call */ generic #ifdef RCM ,rcm #endif }; /* The General distress has format: * * byte1: 00yzzzzz where zzzzz is dist_type, and y is 1 if this is a more * complicated macro and not just a simple distress (a simple distress will * ONLY send ship info like shields, armies, status, location, etc.). I guess * y=1 can be for ! future expansion. * * byte2: 1fff ffff - f = percentage fuel remaining (0-100) byte3: 1ddd dddd - % * damage byte4: 1sss ssss - % shields remaining byte5: 1eee eeee - % etemp * byte6: 1www wwww - % wtemp byte7: 100a aaaa - armies carried byte8: (lsb * of me->p_status) & 0x80 byte9: 1ppp pppp - planet closest to me byte10: * 1eee eeee - enemy closest to me byte11: 1ppp pppp - planet closest to * target byte12: 1eee eeee - enemy closest to target byte13: 1ttt tttt - * tclose_j byte14: 1jjj jjjj - close_j byte15: 1fff ffff - tclose_fr byte16: * 1ccc cccc - close_fr byte17+: cc list (each player to cc this message to * is 11pp ppp) cc list is terminated by 0x80 (pre-pend) or 0100 0000 * (append) ) byte18++: the text to pre or append .. depending on termination * above. text is null terminated and the last thing in this distress */ /* The following defines are for gameup field in SP_GENERIC_32 'b' */ #define GU_GAMEOK 0x1 #define GU_UNSAFE 0x1 /* not currently safe due idle */ #define GU_PRACTICE 0x2 /* Basepractice robot is present */ /* also set by INL robot during a pause, in pre-game, or post-game */ #define GU_CHAOS 0x4 /* also set by INL robot in post-game */ #define GU_PAUSED 0x8 #define GU_INROBOT 0x10 /* INL robot is present */ #define GU_NEWBIE 0x20 /* Newbie robot is present */ #define GU_PRET 0x40 /* Pre-t robot is present */ #define GU_BOT_IN_GAME 0x80 /* Pre-t robot + bots are present */ #define GU_CONQUER 0x100 /* conquest parade in progress */ #define GU_PUCK 0x200 /* Hockey robot is present */ #define GU_DOG 0x400 /* Dogfight robot is present */ #define GU_INL_DRAFTING 0x800 /* INL draft pre-game is in progress */ #define GU_INL_DRAFTED 0x1000 /* INL draft game is in progress */ #define PFREE 0 #define POUTFIT 1 #define PALIVE 2 #define PEXPLODE 3 #define PDEAD 4 #define POBSERV 5 #define PFSHIELD 0x0001 #define PFREPAIR 0x0002 #define PFBOMB 0x0004 #define PFORBIT 0x0008 #define PFCLOAK 0x0010 #define PFWEP 0x0020 #define PFENG 0x0040 #define PFROBOT 0x0080 #define PFBEAMUP 0x0100 #define PFBEAMDOWN 0x0200 #define PFSELFDEST 0x0400 #define PFGREEN 0x0800 #define PFYELLOW 0x1000 #define PFRED 0x2000 #define PFPLOCK 0x4000 /* Locked on a player */ #define PFPLLOCK 0x8000 /* Locked on a planet */ #define PFCOPILOT 0x10000 /* Allow copilots */ #define PFWAR 0x20000 /* computer reprogramming * for war */ #define PFPRACTR 0x40000 /* practice type robot (no * kills) */ #define PFDOCK 0x80000 /* true if docked to a * starbase */ #define PFREFIT 0x100000 /* true if about to refit */ #define PFREFITTING 0x200000 /* true if currently * refitting */ #define PFTRACT 0x400000 /* tractor beam activated */ #define PFPRESS 0x800000 /* pressor beam activated */ #define PFDOCKOK 0x1000000 /* docking permission */ #define PFOBSERV 0x8000000 /* observer */ #define KQUIT 0x01 /* Player quit */ #define KTORP 0x02 /* killed by torp */ #define KPHASER 0x03 /* killed by phaser */ #define KPLANET 0x04 /* killed by planet */ #define KSHIP 0x05 /* killed by other ship */ #define KDAEMON 0x06 /* killed by dying daemon */ #define KWINNER 0x07 /* killed by a winner */ #define KGHOST 0x08 /* killed because a ghost */ #define KGENOCIDE 0x09 /* killed by genocide */ #define KPROVIDENCE 0x0a /* killed by a hacker */ #define KPLASMA 0x0b /* killed by a plasma * * * torpedo */ #define TOURNEND 0x0c /* tournament game ended */ #define KOVER 0x0d /* game over */ #define TOURNSTART 0x0e /* tournament game starting */ #define KBADBIN 0x0f /* bad binary */ /* requires feature F_why_dead_2 aka WHY_DEAD_2 */ #define KTORP2 0x10 /* killed by detted torps */ #define KSHIP2 0x11 /* chain-reaction explosions */ #define KPLASMA2 0x12 /* killed by zapped plasma */ #define NUM_TYPES 8 #define SCOUT 0 #define DESTROYER 1 #define CRUISER 2 #define BATTLESHIP 3 #define ASSAULT 4 #define STARBASE 5 #define SGALAXY 6 #define ATT 7 struct ship { short s_phaserdamage; int s_maxspeed; int s_maxfuel; int s_maxshield; int s_maxdamage; int s_maxegntemp; int s_maxwpntemp; short s_maxarmies; short s_width; short s_height; short s_type; int s_torpspeed; }; struct stats { double st_maxkills; /* max kills ever */ int st_kills; /* how many kills */ int st_losses; /* times killed */ int st_armsbomb; /* armies bombed */ int st_planets; /* planets conquered */ int st_ticks; /* Ticks I've been in game */ int st_tkills; /* Kills in tournament play */ int st_tlosses; /* Losses in tournament play */ int st_tarmsbomb; /* Tournament armies bombed */ int st_tplanets; /* Tournament planets * conquered */ int st_tticks; /* Tournament ticks */ /* SB stats are entirely separate */ int st_sbkills; /* Kills as starbase */ int st_sblosses; /* Losses as starbase */ int st_sbticks; /* Time as starbase */ double st_sbmaxkills; /* Max kills as starbase */ LONG st_lastlogin; /* Last time this player was * played */ int st_flags; /* Misc option flags */ #ifdef MOUSE_AS_SHIFT unsigned char st_keymap[480]; /* keymap for this player */ #else unsigned char st_keymap[96]; /* keymap for this player */ #endif int st_rank; /* Ranking of the player */ }; #define ST_MAPMODE 1 #define ST_NAMEMODE 2 #define ST_SHOWSHIELDS 4 #define ST_KEEPPEACE 8 #define ST_SHOWLOCAL 16 /* two bits for these two */ #define ST_SHOWGLOBAL 64 struct player { int p_no; int p_updates; /* Number of updates ship * has survived */ int p_status; /* Player status */ unsigned int p_flags; /* Player flags */ char p_name[16]; char p_login[16]; char p_monitor[16]; /* Monitor being played on */ char p_mapchars[2]; /* Cache for map window * image */ struct ship p_ship; /* Personal ship statistics */ int p_x; int p_y; unsigned char p_dir; /* Real direction */ unsigned char p_desdir; /* desired direction */ int p_subdir; /* fraction direction change */ int p_speed; /* Real speed */ short p_desspeed; /* Desired speed */ int p_subspeed; /* Fractional speed */ short p_team; /* Team I'm on */ int p_damage; /* Current damage */ int p_subdamage; /* Fractional damage repair */ int p_shield; /* Current shield power */ int p_subshield; /* Fractional shield * recharge */ short p_cloakphase; /* Drawing stage of cloaking * engage/disengage. */ short p_ntorp; /* Number of torps flying */ short p_nplasmatorp; /* Number of plasma torps * active */ char p_hostile; /* Who my torps will hurt */ char p_swar; /* Who am I at sticky war * with */ float p_kills; /* Enemies killed */ short p_planet; /* Planet orbiting or locked * onto */ short pl_orbit; /* planet being orbited */ short p_playerl; /* Player locked onto */ #ifdef ARMY_SLIDER int p_armies; /* XXX: for stats */ #else short p_armies; #endif /* ARMY_SLIDER */ int p_fuel; short p_explode; /* Keeps track of final * explosion */ int p_etemp; short p_etime; int p_wtemp; short p_wtime; short p_whydead; /* Tells you why you died */ short p_whodead; /* Tells you who killed you */ struct stats p_stats; /* player statistics */ short p_genoplanets; /* planets taken since last * genocide */ short p_genoarmsbomb; /* armies bombed since last * genocide */ short p_planets; /* planets taken this game */ short p_armsbomb; /* armies bombed this game */ int p_docked; /* If starbase, # docked to, * else pno base host */ int p_port[4]; /* If starbase, pno of ship * docked to that port, * else p_port[0] = port * # docked to on host. */ short p_tractor; /* What player is in tractor * lock */ int p_pos; /* My position in the player * file */ short p_repair_time; /* seconds */ }; struct statentry { char name[16], password[16]; struct stats stats; }; /* Torpedo states */ #define TFREE 0 #define TMOVE 1 #define TEXPLODE 2 #define TDET 3 #define TOFF 4 #define TSTRAIGHT 5 /* Non-wobbling torp */ struct torp { unsigned char t_status; /* State information */ short t_owner; char t_war; /* enemies */ int t_x; int t_y; short t_fuse; /* Life left in current * * state */ unsigned char t_updateFuse; /* Updates before torp will * expire */ unsigned char t_dir; /* direction */ }; /* Plasma Torpedo states */ #define PTFREE 0 #define PTMOVE 1 #define PTEXPLODE 2 #define PTDET 3 struct plasmatorp { unsigned char pt_status; /* State information */ char pt_war; /* enemies */ short pt_owner; short pt_fuse; /* Life left in current * * * state */ short pt_updateFuse; /* Time till expiry */ int pt_x; int pt_y; }; #define PHFREE 0x00 #define PHHIT 0x01 /* When it hits a person */ #define PHMISS 0x02 #define PHHIT2 0x04 /* When it hits a photon */ struct phaser { unsigned char ph_status; /* What it's up to */ unsigned char ph_dir; /* direction */ short ph_target; /* Who's being hit (for * * * drawing) */ short ph_updateFuse; /* Time till expiry */ short ph_fuse; /* Life left for drawing */ int ph_x, ph_y; /* For when it hits a torp */ #ifdef SOUND int sound_phaser; /* yet to play the sound */ #endif }; #ifdef RSA struct rsa_key { unsigned char client_type[KEY_SIZE]; unsigned char architecture[KEY_SIZE]; unsigned char global[KEY_SIZE]; unsigned char public[KEY_SIZE]; }; #endif /* An important note concerning planets: The game assumes that the planets * are in a 'known' order. Ten planets per team, the first being the home * planet. */ /* the lower bits represent the original owning team */ #define PLREPAIR 0x010 #define PLFUEL 0x020 #define PLAGRI 0x040 #define PLREDRAW 0x080 /* Player close for redraw */ #define PLHOME 0x100 /* home planet for a given * team */ #define PLCOUP 0x200 /* Coup has occured */ #define PLCHEAP 0x400 /* Planet was taken from * undefended team */ #define PLCORE 0x800 #define PLCLEAR 0x1000 struct planet { int pl_no; int pl_flags; /* State information */ int pl_owner; int pl_x; int pl_y; char pl_name[16]; int pl_namelen; /* Cuts back on strlen's */ int pl_armies; int pl_info; /* Teams which have info on * planets */ int pl_deadtime; /* Time before planet will * support life */ int pl_couptime; /* Time before coup may take * place */ }; #define MVALID 0x01 #define MGOD 0x10 #define MMOO 0x12 #ifdef TOOLS #define MTOOLS 0x14 #endif /* order flags by importance (0x100 - 0x400) */ /* restructuring of message flags to squeeze them all into 1 byte - jmn */ /* hopefully quasi-back-compatible: MVALID, MINDIV, MTEAM, MALL, MGOD use up * 5 bits. this leaves us 3 bits. since the server only checks for those * flags when deciding message related things and since each of the above * cases only has 1 flag on at a time we can overlap the meanings of the * flags */ #define MINDIV 0x02 /* these go with MINDIV flag */ #ifdef STDBG #define MDBG 0x20 #endif #define MCONFIG 0x40 /* config messages from * * * server */ #define MDIST 0x60 /* flag distress type * * * messages properly */ #ifdef MULTILINE_MACROS #define MMACRO 0x80 #endif #define MTEAM 0x04 /* these go with MTEAM flag */ #define MTAKE 0x20 #define MDEST 0x40 #define MBOMB 0x60 #define MCOUP1 0x80 #define MCOUP2 0xA0 #define MDISTR 0xC0 /* flag distress type * messages */ #define MALL 0x08 /* these go with MALL flag */ #define MGENO 0x20 /* MGENO is not used in INL * server but beLONGs * here */ #define MCONQ 0x20 /* not enought bits to * distinguish MCONQ/MGENO :-( */ #define MKILLA 0x40 #define MKILLP 0x60 #define MKILL 0x80 #define MLEAVE 0xA0 #define MJOIN 0xC0 #define MGHOST 0xE0 /* MMASK not used in INL server */ #define MWHOMSK 0x1f /* mask with this to find * who msg to */ #define MWHATMSK 0xe0 /* mask with this to find * what message about */ /* old flags... * #define MVALID 0x01 * #define MINDIV 0x02 * #define MTEAM 0x04 * #define MALL 0x08 * #define MGOD 0x10 * * #define MGENO 0x100 order these by importance (0x100 - 0x400) * #define MCONQ 0x110 * #define MTAKE 0x120 * #define MDEST 0x130 * #define MKILLA 0x200 * #define MBOMB 0x210 * #define MKILLP 0x220 * #define MKILL 0x230 * #define MLEAVE 0x300 * #define MJOIN 0x310 * #define MGHOST 0x320 * #define MCOUP1 0x330 * #define MCOUP2 0x340 * end of old flags */ struct message { int m_no; int m_flags; int m_time; int m_recpt; char m_data[80]; }; /* message control structure */ struct mctl { int mc_current; }; /* This is a structure used for objects returned by mouse pointing */ #define PLANETTYPE 0x1 #define PLAYERTYPE 0x2 struct obtype { int o_type; int o_num; }; struct rank { float hours, ratings, offense; char *name, *cname; }; struct context { short gameup; /* server status flags */ unsigned char tournament_teams; /* what teams are involved */ unsigned char tournament_age; /* duration of t-mode so far */ char tournament_age_units; /* units for above, see s2du */ unsigned char tournament_remain; /* remaining INL game time */ char tournament_remain_units; /* units for above, see s2du */ unsigned char starbase_remain; /* starbase reconstruction, mins */ unsigned char team_remain; /* team surrender time, seconds */ }; struct memory { struct player players[MAXPLAYER]; struct torp torps[MAXPLAYER * MAXTORP]; struct plasmatorp plasmatorps[MAXPLAYER * MAXPLASMA]; struct status status[1]; struct planet planets[MAXPLANETS]; struct phaser phasers[MAXPLAYER]; struct mctl mctl[1]; struct message messages[MAXMESSAGE]; struct ship shipvals[NUM_TYPES]; struct context context[1]; }; struct plupdate { int plu_update; int plu_x, plu_y; }; struct macro_list { int type; unsigned char key; char who; char *string; }; /******************************************************************************/ /*** Distress structure definitions ***/ /*** ***/ /*** The LOW_DISTRESS, MID_DISTRESS, and HIGH_DISTRESS are all used to ***/ /*** index the correct items within the DISTRESS_BLOCK's item array. The ***/ /*** distress block contains a minimum and maximum value for each item, a ***/ /*** flag to indicate whether the distress on this value is active or not, ***/ /*** and three single character pointers for different severity levels. ***/ /******************************************************************************/ #define DIST_LOW ( 0 ) #define DIST_MID ( 1 ) #define DIST_HIGH ( 2 ) #define DIST_SHIELDS ( 0 ) #define DIST_DAMAGE ( 1 ) #define DIST_WTEMP ( 2 ) #define DIST_ETEMP ( 3 ) #define DIST_ARMYS ( 4 ) #define DIST_FUEL ( 5 ) typedef struct distress_block { int min, max; int on; char *item[3]; } DISTRESS_DESC; struct distress_list { /* need one for ships and * * * one for SBs */ DISTRESS_DESC problem[6]; }; #ifdef HOCKEY_LINES struct s_line { int begin_x, begin_y; /* Start point of the line */ int end_x, end_y; /* End point of the line */ W_Color color; /* The color of the line */ int orientation; /* Horizontal or Vertical? */ int *flag; /* Should line be drawn? */ }; #endif /* HOCKEY_LINES */ struct shipdef { char *name; char *rcfile; unsigned char *keymap; unsigned char *buttonmap; unsigned char *ckeymap; }; #ifdef TOOLS struct key_list { unsigned char dest; char *name; }; #endif #endif /* _h_struct */ netrek-client-cow-3.3.2/rotate.c0000664000175000017500000000260013657750470015511 0ustar jamesjames#include "config.h" #include "copyright2.h" #include INC_MACHINE_ENDIAN #include #include #include #include #include INC_NETINET_IN #include INC_NETINET_TCP #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "rotate.h" #ifdef ROTATERACE void rotate_dir(unsigned char *d, int r) { (*d) += r; } /* general rotation */ void rotate_coord(int *x, int *y, int d, int cx, int cy) /* values used and returned */ /* degree (pi == 128) */ /* around center point */ { register int ox, oy; ox = *x; oy = *y; switch (d) { case 0: return; case 64: case -192: *x = cy - oy + cx; *y = ox - cx + cy; break; case 128: case -128: *x = cx - ox + cx; *y = cy - oy + cy; break; case 192: case -64: *x = oy - cy + cx; *y = cx - ox + cy; break; default: { /* do it the hard way */ double dir; double r, dx, dy; double rd = (double) d * 3.1415927 / 128.; if (*x != cx || *y != cy) { dx = (double) (*x - cx); dy = (double) (cy - *y); dir = atan2(dx, dy) - 3.1415927 / 2.; r = hypot(dx, dy); dir += rd; *x = (int) (r * cos(dir) + cx); *y = (int) (r * sin(dir) + cy); } } } } #endif netrek-client-cow-3.3.2/WARN.CUR0000664000175000017500000000050613657750470015174 0ustar jamesjames 0( @ÿÿÿÀ@@@À€€À@@@@@@@@@@Àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿüÿÿüÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿø?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnetrek-client-cow-3.3.2/rint.c0000664000175000017500000000502413657750470015172 0ustar jamesjames /* * Copyright (c) 1985 Regents of the University of California. * * Use and reproduction of this software are granted in accordance with * the terms and conditions specified in the Berkeley Software License * Agreement (in particular, this entails acknowledgement of the programs' * source, and inclusion of this notice) with the additional understanding * that all recipients should regard themselves as participants in an * ongoing research project and hence should feel obligated to report * their experiences (good or bad) with these elementary function codes, * using "sendbug 4bsd-bugs@BERKELEY", to the authors. */ #ifdef VAX /* VAX D format */ static unsigned short msign=0x7fff; #else /*IEEE double format */ static unsigned short msign=0x7fff; #endif static double copysign(x,y) double x,y; { #if defined(NATIONAL) || defined(WIN32) unsigned short *px=(unsigned short *) &x+3, *py=(unsigned short *) &y+3; #else /* VAX, SUN, ZILOG */ unsigned short *px=(unsigned short *) &x, *py=(unsigned short *) &y; #endif #ifdef VAX if ( (*px & mexp) == 0 ) return(x); #endif *px = ( *px & msign ) | ( *py & ~msign ); return(x); } /* * algorithm for rint(x) in pseudo-pascal form ... * * real rint(x): real x; * ... delivers integer nearest x in direction of prevailing rounding * ... mode * const L = (last consecutive integer)/2 * = 2**55; for VAX D * = 2**52; for IEEE 754 Double * real s,t; * begin * if x != x then return x; ... NaN * if |x| >= L then return x; ... already an integer * s := copysign(L,x); * t := x + s; ... = (x+s) rounded to integer * return t - s * end; * * Note: Inexact will be signaled if x is not an integer, as is * customary for IEEE 754. No other signal can be emitted. */ #ifdef VAX static long Lx[] = {0x5c00,0x0}; /* 2**55 */ #define L *(double *) Lx #else /* IEEE double */ static double L = 4503599627370496.0E0; /* 2**52 */ #endif double rint(x) double x; { double s,t,one = 1.0,copysign(); #ifndef VAX if (x != x) /* NaN */ return (x); #endif if (copysign(x,one) >= L) /* already an integer */ return (x); s = copysign(L,x); t = x + s; /* x+s rounded to integer */ return (t - s); } netrek-client-cow-3.3.2/netstatopt.h0000664000175000017500000000007513657750470016431 0ustar jamesjamesvoid nswindow(void); void nsrefresh(int); void nsdone(void); netrek-client-cow-3.3.2/map.c0000664000175000017500000004226013657750470014776 0ustar jamesjames/* map.c * * Functions to maintain the galactic map. This file is a merger * of code from redraw.c, which was too big before, and planets.c, * which was too small. * */ #include "config.h" #include "copyright2.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "map.h" /* debugging feature, show rectangular redraw regions on galactic */ #undef DEBUG_SHOW_REGIONS extern void *S_mPlanet(int); extern void *S_mArmy(int); extern void *S_mRepair(int); extern void *S_mFuel(int); extern void *S_mOwner(int); extern int W_DrawSprite(void *, int, int, int); /* * Local Constants: * * DETAIL -- Size of the redraw array. * SIZE -- Scale of the rough planet map "roughMap". * * Note: Detail *MUST* be a factor of GWIDTH. */ #define DETAIL 100 #define SIZE (GWIDTH/DETAIL) /* * Local Variables: * * roughMap[x][y] -- Rough map of planets to help find overlaps. * roughMap2[x][y] -- Secondary rought map, to help with overlap. * initialized -- Has initPlanets() been called? */ static signed char roughMap[DETAIL][DETAIL]; static signed char roughMap2[DETAIL][DETAIL]; static int initialized = 0; /* * Global Variables: * * redrawall -- Erase and redraw the galactic? Must be true * on first map() call. * redrawPlayer[] -- Flag for each player on whether their position * on the galactic is not out of date. */ int redrawall = 1; unsigned char redrawPlayer[MAXPLAYER]; /* Function Definitions */ void initPlanets(void) /* * Make a rough map of the location of all the planets to help decide * whether a ship is possibly overlapping a planet. */ { int x, y, k; int startX, startY; int endX, endY; struct planet *pl; const int pRadius = mplanet_width * GWIDTH / GWINSIDE / 2; const int tHeight = W_Textheight * GWIDTH / GWINSIDE; const int tWidth = W_Textwidth * GWIDTH / GWINSIDE; for (x = 0; x < DETAIL; x++) { for (y = 0; y < DETAIL; y++) { roughMap[x][y] = -1; roughMap2[x][y] = -1; } } for (k = 0, pl = planets; k < MAXPLANETS; k++, pl++) { /* * Size of planet is pRadius but a ship will touch the planet if it is * one character away horizontally or half a character vertically. * Also remember the planet name at the bottom. This name can stick out * about half a character to the right. */ startX = (pl->pl_x - pRadius - tWidth) / SIZE; endX = (pl->pl_x + pRadius + tWidth + (tWidth / 2)) / SIZE; startY = (pl->pl_y - pRadius - (tHeight / 2)) / SIZE; endY = (pl->pl_y + pRadius + tHeight + (tHeight / 2)) / SIZE; if (startX < 0) startX = 0; if (endX >= DETAIL) endX = DETAIL - 1; if (startY < 0) startY = 0; if (endY >= DETAIL) endY = DETAIL - 1; for (x = startX; x <= endX; x++) { for (y = startY; y <= endY; y++) { if (roughMap[x][y] == -1) roughMap[x][y] = k; else roughMap2[x][y] = k; } } } initialized = 1; } #ifdef DEBUG_SHOW_REGIONS /* Debugging code */ void showRegions(void) /* * Make a rough map of the location of all the planets to help decide * whether a ship is possibly overlapping a planet. */ { int k; int startX, startY; int endX, endY; struct planet *pl; const int pRadius = mplanet_width * GWIDTH / GWINSIDE / 2; const int tHeight = W_Textheight * GWIDTH / GWINSIDE; const int tWidth = W_Textwidth * GWIDTH / GWINSIDE; for (k = 0, pl = planets; k < MAXPLANETS; k++, pl++) { startX = (pl->pl_x - pRadius - tWidth) / SIZE; endX = (pl->pl_x + pRadius + tWidth + (tWidth / 2)) / SIZE; startY = (pl->pl_y - pRadius - (tHeight / 2)) / SIZE; endY = (pl->pl_y + pRadius + tHeight + (tHeight / 2)) / SIZE; if (startX < 0) startX = 0; if (endX >= DETAIL) endX = DETAIL - 1; if (startY < 0) startY = 0; if (endY >= DETAIL) endY = DETAIL - 1; startX = startX * SIZE * GWINSIDE / GWIDTH; startY = startY * SIZE * GWINSIDE / GWIDTH; endX = (endX * SIZE + SIZE - 1) * GWINSIDE / GWIDTH; endY = (endY * SIZE + SIZE - 1) * GWINSIDE / GWIDTH; W_MakeLine(mapw, startX, startY, startX, endY, W_White); W_MakeLine(mapw, startX, startY, endX, startY, W_White); W_MakeLine(mapw, endX, endY, startX, endY, W_White); W_MakeLine(mapw, endX, endY, endX, startY, W_White); } } #endif /* none */ /* Debugging code */ inline static void checkRedraw(int x, int y) /* * Compare the given location of a ship with the rough planet map created * by initPlanets() to decide if part of the planet may have been erased * by the ship. * * Also force a redraw of every other player in the same grid square, * otherwise they will blink out of existence as a result of the * planet redraw. */ { int i; struct player *j; x /= SIZE; y /= SIZE; i = roughMap[x][y]; if (i == -1) return; planets[i].pl_flags |= PLREDRAW; for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) { if (j->p_status != PALIVE) continue; if (j->p_flags & PFOBSERV) continue; if (roughMap[j->p_x / SIZE][j->p_y / SIZE] != -1) { redrawPlayer[i] = 1; } } i = roughMap2[x][y]; if (i == -1) return; planets[i].pl_flags |= PLREDRAW; } inline static W_Icon planetmBitmap(register struct planet *p) /* * Choose the bitmap for a planet. */ { int i; if (showgalactic == 0) /* nothing */ { return (mbplanets[0]); } else if ((p->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) { if (showgalactic == 1) /* owner */ { return (mbplanets[remap[p->pl_owner]]); } else /* resources */ { i = 0; if (p->pl_armies > 4) i += 4; if (p->pl_flags & PLREPAIR) i += 2; if (p->pl_flags & PLFUEL) i += 1; switch (showgalactic) { case 2: /* standard */ return (mbplanets2[i]); case 3: /* MOO bitmap */ return (mbplanets3[i]); case 4: /* rabbit ears */ return (mbplanets4[i]); default: return (mbplanets[0]); } } } else { return (mbplanets[5]); } } static void DrawPlanets() /* * Draw the planets on the galactic map. */ { register struct planet *l; register int dx, dy; char ch; void *sprite; for (l = planets + MAXPLANETS - 1; l >= planets; --l) { if (!(l->pl_flags & PLREDRAW)) continue; l->pl_flags &= ~PLREDRAW; /* Turn redraw flag off! */ dx = l->pl_x * GWINSIDE / GWIDTH; dy = l->pl_y * GWINSIDE / GWIDTH; /* Erase the planet first */ if (pl_update[l->pl_no].plu_update == 1) { /* Allow Moving Planets */ int odx, ody; odx = pl_update[l->pl_no].plu_x * GWINSIDE / GWIDTH; ody = pl_update[l->pl_no].plu_y * GWINSIDE / GWIDTH; /* XFIX */ W_ClearArea(mapw, odx - (mplanet_width / 2), ody - (mplanet_height / 2), mplanet_width, mplanet_height); W_WriteText(mapw, odx - (mplanet_width / 2), ody + (mplanet_height / 2), backColor, l->pl_name, 3, planetFont(l)); pl_update[l->pl_no].plu_update = 0; } else #ifndef WIN32 if (l->pl_flags & PLCLEAR) #endif { /* Clear the planet normally */ /* XFIX */ W_ClearArea(mapw, dx - (mplanet_width / 2 + 4), dy - (mplanet_height / 2 + 4), mplanet_width + 8, mplanet_height + 8); l->pl_flags &= ~PLCLEAR; } /* Draw the new planet */ #ifdef BEEPLITE if (UseLite && emph_planet_seq_n[l->pl_no] > 0) { int seq_n = emph_planet_seq_n[l->pl_no] * 5 / server_ups % emph_planet_seq_frames; W_OverlayBitmap(dx - (emph_planet_seq_width / 2 + 1), dy - (emph_planet_seq_height / 2), emph_planet_seq[seq_n], W_White); W_WriteBitmap(dx - (mplanet_width / 2), dy - (mplanet_height / 2), planetmBitmap(l), planetColor(l)); emph_planet_seq_n[l->pl_no] -= 1; l->pl_flags |= PLREDRAW; /* Leave redraw on until * * * done highlighting */ l->pl_flags |= PLCLEAR; /* Leave redraw on until * * * done highlighting */ } else { #endif sprite = S_mPlanet(l->pl_no); if (sprite == NULL) pixFlags |= NO_MAP_PIX; if (!(pixFlags & NO_MAP_PIX)) { W_DrawSprite(sprite, dx, dy, GWINSIDE); W_DrawSprite(S_mArmy(l->pl_no), dx, dy, GWINSIDE); W_DrawSprite(S_mRepair(l->pl_no), dx, dy, GWINSIDE); W_DrawSprite(S_mFuel(l->pl_no), dx, dy, GWINSIDE); W_DrawSprite(S_mOwner(l->pl_no), dx, dy, GWINSIDE); if (!(pixFlags & NO_HALOS)) W_Halo(dx, dy, planetColor(l)); } else W_OverlayBitmap(dx - (mplanet_width / 2), dy - (mplanet_height / 2), planetmBitmap(l), planetColor(l)); #ifdef BEEPLITE } #endif W_WriteText(mapw, dx - (mplanet_width / 2), dy + (mplanet_height / 2), planetColor(l), l->pl_name, 3, planetFont(l)); if (showIND && ((l->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) && (l->pl_owner == NOBODY)) { W_MakeLine(mapw, dx + (mplanet_width / 2 - 1), dy + (mplanet_height / 2 - 1), dx - (mplanet_width / 2), dy - (mplanet_height / 2), W_White); W_MakeLine(mapw, dx - (mplanet_width / 2), dy + (mplanet_height / 2 - 1), dx + (mplanet_width / 2 - 1), dy - (mplanet_height / 2), W_White); } if (showPlanetOwner) { ch = ((l->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif )? tolower(teamlet[l->pl_owner]) : '?'; W_WriteText(mapw, dx + (mplanet_width / 2) + 2, dy - 4, planetColor(l), &ch, 1, planetFont(l)); } } } /* draw game state from sp_generic_32 packet */ static int gu_last_width = -1; static int gu_height; static char gu_text[80]; static int gu_length; static int gu_width; static int gu_redraw; static void gu_draw(W_Color color) { W_MaskText(mapw, TWINSIDE/2-(gu_width/2), TWINSIDE/2-(gu_height/2), color, gu_text, gu_length, W_BigFont); } static void gu_update() { int eager = 0; static int old_gameup = 0; static int old_tournament_remain = 0; static int old_flags = 0; /* initialisation */ if (gu_last_width == -1) { gu_height = W_BigTextheight; gu_width = -1; gu_redraw = 1; } /* no change detected */ if (!gu_redraw && (me->p_flags & PFOBSERV) == old_flags && context->gameup == old_gameup && context->tournament_remain == old_tournament_remain) return; old_flags = me->p_flags & PFOBSERV; old_gameup = context->gameup; old_tournament_remain = context->tournament_remain; /* remove the old text */ if (gu_last_width != -1) gu_draw(W_Black); /* add words for some of the gameup flags */ strcpy(gu_text, " "); if (!(context->gameup & GU_UNSAFE)) { strcat(gu_text, "SAFE-IDLE "); eager++; } if (me->p_flags & PFOBSERV) { strcat(gu_text, "OBSERVE "); eager++; } if (context->gameup & GU_INROBOT) { if (context->gameup & (GU_CHAOS | GU_PRACTICE)) { strcat(gu_text, "PREGAME "); eager++; } else if (context->gameup & (GU_PRACTICE | GU_PAUSED)) { strcat(gu_text, "PAUSED "); eager++; } if (context->gameup & GU_INL_DRAFTING) { strcat(gu_text, "DRAFTING "); eager++; } } else { if (context->gameup & GU_CONQUER) { strcat(gu_text, "CONQUEST PARADE "); eager++; } else if (context->gameup & GU_PAUSED) { strcat(gu_text, "PAUSED "); eager++; } } /* add remaining game time */ if (context->tournament_remain != 0) { char buf[40]; sprintf(buf, "%d%c ", context->tournament_remain, context->tournament_remain_units); strcat(gu_text, buf); eager++; } if (eager) { gu_length = strlen(gu_text); gu_width = W_BigTextwidth * gu_length; // FIXME: use checkRedraw on extents of area written, and redraw // the planets and players that have been clobbered by this text. gu_draw(W_Grey); } else { gu_width = -1; } gu_last_width = gu_width; gu_redraw = 0; } void map(void) /* * Update the 'galactic' map. */ { register int i; register unsigned char *update; register struct player *j; register struct planet *l; register int dx, dy; static char clearlock = 0; static int mclearzone[6][MAXPLAYER]; static int clearlmark[4]; static unsigned char lastUpdate[MAXPLAYER]; if (redrawall) { /* * Set things up so that the galactic will be redraw completely. This * code should also put critical variables into a sane state in case * COW has just started. */ if (!initialized) { /* Don't do anything if initPlanets() has not been called */ return; } #ifdef HOCKEY_LINES if (hockey_s_lines) W_GalacticBgd(HOCKEY_PIX); else #endif W_GalacticBgd(MAP_PIX); W_ClearWindow(mapw); clearlock = 0; for (i = 0; i < MAXPLAYER; i++) { lastUpdate[i] = 0; mclearzone[2][i] = 0; redrawPlayer[i] = 1; } for (l = planets + MAXPLANETS - 1; l >= planets; --l) l->pl_flags |= PLREDRAW; gu_redraw++; redrawall = 0; } else { if (clearlock) { clearlock = 0; W_WriteTriangle(mapw, clearlmark[0], clearlmark[1], clearlmark[2], clearlmark[3], backColor); } /* Erase the ships */ for (i = 0, update = lastUpdate; i < MAXPLAYER; i++, update++) { if (redrawPlayer[i]) { /* Erase the player if redrawPlayer[i] is set * or lastUpdate * * allows it. */ if (mclearzone[2][i]) { /* XFIX */ W_ClearArea(mapw, mclearzone[0][i], mclearzone[1][i], mclearzone[2][i], mclearzone[3][i]); /* Redraw the hole just left next update */ checkRedraw(mclearzone[4][i], mclearzone[5][i]); mclearzone[2][i] = 0; } /* Reset the last redrawn counter */ *update = 0; } else if (*update == server_ups) { /* * Redraw stationary ships every update so that these * ships are not hidden by planet updates. */ redrawPlayer[i] = 1; } else { ++(*update); } } } /* draw gameup flags */ gu_update(); /*! @bug overwrites ships on galactic */ /* Draw Planets */ DrawPlanets(); #ifdef DEBUG_SHOW_REGIONS /* Debugging code */ showRegions(); #endif /* Draw ships */ for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) { /* lastUpdate[i] has been set to 0 if redrawall or the ship has * been * * erased or a redraw has not taken place for a while. These * * * decisions are made at the top of the file. */ if (!redrawPlayer[i]) continue; if (j->p_status != PALIVE) continue; if (j->p_flags & PFOBSERV) continue; /* jmn - observer support */ if (j->p_x < 0 || j->p_x >= GWIDTH || j->p_y < 0 || j->p_y >= GWIDTH) continue; dx = j->p_x * GWINSIDE / GWIDTH; dy = j->p_y * GWINSIDE / GWIDTH; if (j->p_flags & PFCLOAK) { W_WriteText(mapw, dx - W_Textwidth, dy - W_Textheight / 2, unColor, cloakChars, (cloakChars[1] == '\0' ? 1 : 2), W_RegularFont); } else { W_WriteText(mapw, dx - W_Textwidth, dy - W_Textheight / 2, playerColor(j), j->p_mapchars, 2, shipFont(j)); } #ifdef BEEPLITE if ((UseLite && emph_player_seq_n[i] > 0) && (liteflag & LITE_PLAYERS_MAP)) { int seq_n = emph_player_seq_n[i] * 5 / server_ups % emph_player_seq_frames; W_WriteBitmap(dx - (emph_player_seq_width / 2 - 1), dy - (emph_player_seq_height / 2 + 1), emph_player_seq[seq_n], W_White); emph_player_seq_n[i] -= 1; mclearzone[0][i] = dx - (emph_player_seq_width / 2 - 1); mclearzone[1][i] = dy - (emph_player_seq_height / 2 + 1); mclearzone[2][i] = emph_player_seq_width; mclearzone[3][i] = emph_player_seq_height; mclearzone[4][i] = j->p_x; mclearzone[5][i] = j->p_y; /* Leave redraw on until done highlighting */ redrawPlayer[i] = 1; } else { #endif mclearzone[0][i] = dx - W_Textwidth; mclearzone[1][i] = dy - W_Textheight / 2; mclearzone[2][i] = W_Textwidth * 2; mclearzone[3][i] = W_Textheight; /* Set these so we can checkRedraw() next time */ mclearzone[4][i] = j->p_x; mclearzone[5][i] = j->p_y; redrawPlayer[i] = 0; #ifdef BEEPLITE } #endif } /* Draw the lock symbol (if needed */ if ((me->p_flags & PFPLOCK) && (showLock & 1)) { j = &players[me->p_playerl]; if (j->p_status == PALIVE && !(j->p_flags & PFCLOAK)) { dx = j->p_x * GWINSIDE / GWIDTH; dy = j->p_y * GWINSIDE / GWIDTH; W_WriteTriangle(mapw, dx, dy + 6, 4, 1, foreColor); clearlmark[0] = dx; clearlmark[1] = dy + 6; clearlmark[2] = 4; clearlmark[3] = 1; clearlock = 1; } } else if ((me->p_flags & PFPLLOCK) && (showLock & 1)) { struct planet *l = &planets[me->p_planet]; dx = l->pl_x * GWINSIDE / GWIDTH; dy = l->pl_y * GWINSIDE / GWIDTH; W_WriteTriangle(mapw, dx, dy - (mplanet_height) / 2 - 4, 4, 0, foreColor); clearlmark[0] = dx; clearlmark[1] = dy - (mplanet_height) / 2 - 4; clearlmark[2] = 4; clearlmark[3] = 0; clearlock = 1; } } netrek-client-cow-3.3.2/README.3.000000664000175000017500000005567613657750470015333 0ustar jamesjamesThis file contains the most recent changes to the COW client, with example .xtrekrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience. ***************************************************************** 1) Change Log ***************************************************************** 3.00 pl3 Jan. 2, 2000 - Expiry date removed [siegl] - minor bugfixes [various authors] 3.00 pl2 Jan. 7, 2000 - New default portSwap for UDP_PORTSWAP feature [siegl] - System wide .xtrekrc file set to "/etc/netrekrc" [siegl] - Cambot recording replay [koconnor] - various Win32 fixes [siegl] - V,B core dump with rabit ears fix [siegl] - remove DEFINES (BRMH NEW_DASHBOARD_2 RABBIT_EARS) [siegl] - MAX_MACRO increased to 255 [siegl] - -B options for automatic bug sumition [siegl] - new sample netrekrc file [siegl] - WindowMaker docking support [siegl] - Win32 Sound support [siegl] 3.00 pl1 Mar. 27, 1999 - Added UDP queries to the metaserver. [cameron, villalpando] - Added Multiple metaserver support. [cameron, villalpando] - Metaserver KEYGOD alias: clientkeys@clientkeys.netrek.org [villalpando] - New xtrekrc variables: metaverbose, metaUDPcache, metaType [cameron, villalpando] - modified behavior of metaserver to do multiple metaservers [cameron] - changed metaserver menu. Added age of data and refresh button [cameron] - new option, -M for TCP metaserver [cameron] - changed option -m for UDP metaserver [cameron] - Port to Cygnus Win32 [siegl] - Autoconfig detects Cygnus Win32 [siegl] - Win32 fixes [Gosselin] - Fix Pixmap transparancy [siegl] - Added hockey rink background XPM on galactic [siegl] 3.00 pl0 Feb. 28, 1998 - full color client [kellen] - metaserver defaults to: metaserver.netrek.org [sven] - new cow mailing list alias: cow@netrek.org [sven] - 32 views color pixmaps [Shawn] -- recording feature [koconnor] - KDE sound support (.wav files) [siegl] - Tab key fixes [koconnor] - OpenVMS fixes [cameron] - Auto upgrade via netscape [siegl] - whydead message fixes [siegl] - GMP 2 key generator fix [siegl] ***************************************************************** 2) Cut and past changes to make COW work like it used to. ***************************************************************** 3.00 pl0 The "-b" option disables the use of color pixmaps by the client. ***************************************************************** 3) Cut and past changes to turn on *all* new features. ***************************************************************** 3.00 pl1 WARNING: Sometimes the colored ships have color disturbences when having the shields up. In this case start COW with the option: [-n] use nearest colors in shared colormap 3.00 pl0 All new .xtrekrc entrys with defaults are: # backgroundPix: 1 # cloakPix: 1 # explosionPix: 1 # fedPix: 1 # indPix: 1 # kliPix: 1 # mapPix: 1 # oriPix: 1 # romPix: 1 # shipPix: 1 # weaponPix: 1 **************************************************************** 4) New manual sections **************************************************************** 3.00 pl0 3.1.8 NO PIXMAPS OPTION The "-b" option disables the use of color pixmaps by the client. 3.2 Pixmaps (Full Color COW) With the release of COW 3.00, dynamic color images are available. No color images have been compiled into the client, so without the additional files (described below) the client will behave as before. 3.2.1 Setup The xpm files should be available at the same site from which you got the client, in a file named pixmaps.tgz (PIXMAPS.ZIP for windows users). >>> YOU MUST DOWNLOAD AND UNPACK THIS FILE TO USE THE COLOR FEATURES. <<< It should create a subdirectory named "pixmaps" which should have several (obviously named) subdirectories. There should be several XPM files in each (except for Planets, which has a further subdirectory). UNIX users will see that they are gzipped to save space. You do NOT need to ungzip them unless you do not have gzip on your machine. >>> DO NOT REARRANGE OR RENAME THESE FILES IF YOU WANT TO USE THEM. <<< You need to add a line to your .xtrekrc telling the client where to look for the pixmaps. If you do not, it will assume that they are in a subdirectory of the directory you are in when you start the client. The option is called "pixmapDir". Tilde and environment variables WILL NOT WORK. Relative paths will only work if you always start netrek from the same directory. You should be ready to rock and roll. Fire it up. You may see some warnings about not being able to read some pixmaps. Some of the pixmaps that the client looks for haven't been drawn yet. Feel free to make your own set. OTOH, if you see any lines which read "TYPE PIXMAPS NOT AVAILABLE" it means that none of a certain type of pixmap were found. Check to make sure that the pixmaps are where you told it to look. If they are, and you are on a UNIX system, you may not have gzip installed. Go get it from any GNU mirror and either install it or use it to ungzip the XPM files. 3.2.2 Configuration In addition to simply creating your own XPMs with a paint program, you may want greater control over the pictures used. For example, you may find the explosions are too pretty, and you are dying because you forgot to dodge. The crude approach is to just remove that pixmap. The client will default back to the standard bitmaps in this case. The more elegant approach is to turn off just those pixmaps you don't like and keep the rest. This also allows you to switch back and forth WITHOUT having to exit and restart. So if the machine you are playing on is busy today, you can turn off the pixmaps until things improve, then switch back to full color without losing your 5 kills. Pixmaps can be turned on or off in groups on the new "Pixmap Menu" in the options window (shift-O). Each line in the window also corresponds to an .xtrekrc resource which you can use to set the initial values. If one type of pixmaps is not available, you will be unable to turn on that option. resource name default description indPix on \ fedPix on | Control whether or not the XPMs romPix on | for the ships of a given team kliPix on | should be used oriPix on / weaponPix on Torps and plasmatorps & their clouds explosionPix on ship and starbase explosions cloakPix on fade-in/-out and cloak icon mapPix on Color Planet icons on galactic (replaces the "colorgalactic" option) backgroundPix on Background stars & genocide/gb images (replaces the "babes" option) ownerhalo off Draws a colored ring around each planet on the galactic as a convenience, the option "shipPix" may be used to control all of the ship XPMs in one line. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + POWER USERS + + + + The MegaResource "pixFlags" can be used in your .xtrekrc + + to save a bit of typing. Simply bitwise OR together the + + things you want turned off: + + + + 0x0001 IND pixmaps + + 0x0002 FED pixmaps + + 0x0004 ROM pixmaps + + 0x0008 KLI pixmaps + + 0x0010 ORI pixmaps + + + + 0x0020 Weapons + + 0x0040 Explosions + + 0x0080 Cloaking + + 0x0100 Galactic Map Planet Icons + + + + 0x0400 Backgrounds + + + + 0x1000 Halos + + + + so, for exaple, no halos and no explosions would be + + specified as: (0x1040=4160) + + + + pixFlags: 4160 + + + + + + (Note that this OVERRIDES all the other resources) + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ If you hate them all, you can either set the "pixmapDir" to "None" or start the client with the -b (bitmap only) command line option. Then go ahead and delete all of the XPMS. Go ahead. We don't mind at all. It's not like we put any WORK into this ... :,-( 3.2.3 Babes/M31 and Generalized Backgrounds Gone. You can put up any picture you like when you GENO, GB, or just enter or hit shift-K. Just specify the genocide.xpm, ghostbust.xpm and/or hello.xpm. It's really none of my business what you look at in your off time. Absolutely no picture will be shown if you do not have an XPM in the specified place. It didn't belong in the client in the first place. DEAL WITH IT. And BTW, the ' key (quote) has the default action of retiling your local and galactic windows with the normal background (either black or your specified pixmap) to repair the damage done by the other possible pix. 3.2.4 AGRI pixmaps and FEATURE_PACKETS The client shows a different pixmap for AGRI planets than all others. This was announced, voted on and overwhelmingly adopted (80%+ in favor). But JUST IN CASE, this option can be disabled at the server by use of the feature packet "AGRI_PIXMAP". Users can choose to remove the AGRI.xpm file. The client will default to using the regular planet pixmap if it is missing. **************************************************************** 5) Changes details **************************************************************** 3.00 pl0 From: James Cameron Subject: COW 2.02pl2 OpenVMS Patch [Resend] The last time I built COW for OpenVMS was back in 1994, when it was 1.01pl0. Since my department is releasing a CD-ROM to it's private customers I was asked to provide a variety of Netrek software, as pre-built binaries for OpenVMS, Digital UNIX, and others. So I took 2.02pl2 and got it working again on OpenVMS. The new DEC C compiler on OpenVMS was quite reasonable about the code and had no significant trouble. I submit the patch to you for consideration. The changes were - removal of fopen declarations from functions, as it conflicted with the OpenVMS variant of (const char *, const char *, ... ) - a macro replacement of the select() call so that OpenVMS specific code could be called; the X-Windows implementation on OpenVMS does not support the use of ConnectionNumber() and select() to wait on X events. Code to support this was split out into a new file, vmsio.c. - suppression of the tools window behaviour, in the same manner as on WIN32, since SIGCHLD and popen() are only available in recent OpenVMS versions. - minor changes to vmsutils.c to comply with ANSI standard on initialisation of structures, (before I found the qualifier to turn off strict ANSI checking). - a new file config.h.vms, with OpenVMS version checking to work around old versions of OpenVMS. I've attached the patch to this message in MIME format. Strangely, the patch included cflags.c changes. I'm not sure why cflags.c should be in the manifest ... it created a needless diff output for it. Would you have preferred me moving the OpenVMS specific files into a subdirectory? For your interest, the 1.01pl0 port I did evolved into a bridged client, using serial I/O that was OpenVMS specific. This allowed me to run the Netrek protocol over a 14k4 modem without any SLIP or PPP overhead. Now, of course, OpenVMS has joined the ranks of operating systems providing serial internet protocol layers, and so my work is no longer required. Moving to 33k6 also helped. ;-) -- James Cameron (cameron@stl.dec.com) Digital Equipment Corporation (Australia) Pty. Ltd. A.C.N. 000 446 800 3.00 pl1 From: Jonathan Ellis (1) Replaced WINSIDE #define for SMALL_SCREEN with TWINSIDE and GWINSIDE for independent specification of tactical and galactic sizes on machines with painfully small displays. (I prefer to use a smaller galactic with a full-size tactical.) A lot of other functions used WINSIDE besides the actual drawing routines--mostly computing default window geometries. I tried to keep it consistent with the original look, but I might have goofed in a couple places. (2) cowmain changed so that if no server is specified, it tries to connect to the metaserver. This is much better behavior IMHO. Note: COW.DOC states, "The compiled in default server is bronco.ece.cmu.edu" This seems to be outdated: grep bronco *.c *.h defs.h:#define DEFAULT_SERVER "bronco.ece.cmu.edu" grep DEFAULT_SERVER *.c *.h defaults.c: * Otherwise we try DEFAULT_SERVER. */ defs.h:#define DEFAULT_SERVER "bronco.ece.cmu.edu" Note that the only time DEFAULT_SERVER was used is inside a comment (that, apparently, doesn't reflect the actual code. (3) added description of highlightFriendlyPhasers, censorMessages, and the new default server behavior to COW.DOC. (4) removed from COW.DOC: "Multiline macros are no-longer allowed at all. Primarily this is based on network traffic arguments." I suppose it's historical, but outdated documentation isn't cool. (5) Added note to COW.DOC that not specifying any plist options will default to old plist. (This wasn't obvious to me because 2 is called the "traditional" plist... perhaps an unintended connotation.) (6) removed from socket.c #ifdef FOR_MORONS { /* it _is_ an 'info' borg, * after all. ;-) */ extern int For_Morons; if (For_Morons) return; } #endif FOR_MORONS and For_Morons appeared nowhere else. I assume this is obsolete code. (7) removed from data.h extern int babes; after all, they're gone. ;) (8) merged the "Moo" docs (section 8 of COW-DOC) with the rest of it. It had to happen sometime. Cope. (This includes a bunch of minor changes that I won't ennumerate.) a. replaced an inaccurate line of defwin.c with "warnShields", BOOL_DEF, "Shield color based on alert status", b. someone who understands the server's ntserv/socket.c needs to explain what udpClientRecv really does. "simple" and "fat" don't say a whole lot. I don't have time to try to learn the server-side code right now. (9) the option menu as well as the example .xtrekrc claimed that the udpDebug resource took different options: 0 = OFF 1 = ON (conect msgs only) 2 = ON (verbose output) but in the code, udpDebug == 1 behaved exactly the same as udpDebug == 2 I tried to changed this to reflect the documentation by taking out all the UDPDIAG but printUdpInfo from udpDebug == 1. (10) (11) defaults.c: deleted legacy code from findDefaults dealing with server- specific .xtrekrc files. The code was broken (try it: move .xtrekrc to .xtrekrc-continuum, or whatever--it won't work). I don't know how long it's been broken, but if (serverName) { sprintf(serverfile, NETREKRCSERVER, serverName); if (findfile(serverfile, file)) return 1; sprintf(serverfile, XTREKRCSERVER, serverName); if (findfile(serverfile, file)) return 1; } never gets executed because serverName hasn't been initialized by the (first) call to findDefaults. If anybody actually used this feature there would have been complaints that it was broken... since, apparently, nobody really cared, I just got rid of it. Simplify, simplify. ;) Also: reread_defaults in input.c and newinput.c didn't work the way it was apparently intended to if no rc file was present. In order to get it to issue the warning that none was found, some things had to be changed, including initializing defaultsFile in data.c to "" instead of ".xtrekrc" (12) removed unused variables from dmessage.c char cmupigcall[80]; char pigcall[160]; (13) The ghost start option is still present in the code, but it doesn't seem to work. I have no clue what's wrong (possibly a server problem?) or if the idea is just inherently problematic. I left the documentation in, though, and even added it to what -u prints out. (14) Added -i to printUsage (15) Removed from options.c char *mapupdates[] = {"Don't update galactic map", "Update galactic map rarely", "Update galactic map frequently", ""}; apparently this isn't used anymore. (16) changed hard-coded geometries to be more sane, with focus on creating #ifdef-d alternates for SMALL_SCREEN. Parents of some windows were changed, so it should look pretty much like you'd expect without any foo.geometry: in your .xtrekrc. (17) Combined newPlanetBitmaps and whichNewPlanetBitmaps resources with showLocal/showGalactic. Cleaned up code in local.c. map.c doesn't perform the same things local.c does with equivalent options, but this is the bitmaps' fault. moobitmaps.h and rabbitbitmaps.h would need to be modified extensively. That's not my department. ;) ObBugReport: cloaking doesn't display correctly on my linux machine with pixmaps on; there's no state in between fully cloaked and fully uncloaked. One update you're visible, the next you're not. Very disconcerting. Other ideas: (sort of an addenum to the TODO ;) html-ize the new COW.DOC. cow.html was more than two years out of date even before my changes. ;) If COW.DOC were consistant in its use of section and subsection numbering this could be automated. a. "highlight" default value for xtrekrc options Make the xtrekrc sections of COW.DOC consistant with the shift-O menus and defwin.c (i.e. use the same categories for all three) ******************************************************************** March 1999 ******************************************************************** (1) ------ Added UDP metaserver, and multiple metaserver queries to client. Multiple metaservers is available only in UDP mode. Multiple metaservers may be listed in the metaservers variable, or a host name may have multiple IPs. Client essentially sends a '?' using UDP to the metaserver(s) and waits for a response. Client should expect anywhere from 0 to infinite responses. Response comes back in the form: r,NN\n Where r is the literal 'r', and NN is the nuber of servers returned. Server format is 1 per line in the following format, comma separated: (from the metaserver code snippet from disp_udp.c) sprintf(bp,"%s,%d,%d,%d,%d,%d,%c\n", sp->hostname, /* host name of server */ sp->port, /* port number of server */ extendedstatus, /* metaserver status code */ now - sp->last_update, /* age of data in seconds */ sp->player_count, /* count of players on server */ sp->queue_size, /* length of wait queue */ sp->type[0] ); /* type code, B, P, etc */ Two notes are required: 1) Line length is defind in the metaserver as: MAX_HOSTNAME+1 +6+1 +3+1 +6+1 +3+1 +3+1 +1+1 +1 host port stat age play que type \n where MAX_HOSTNAME is #define MAX_HOSTNAME 64 An example output is: r,19 hp06.ee.ualberta.ca,2592,6,244,0,0,P megalag.netrek.org,2592,4,1780,0,0,F moore.machine2.dsl.psn.net,2592,6,1804,0,0,B netrek.unh.edu,2592,6,524,0,0,B paradise.games.uk.demon.net,2592,6,1604,0,0,P tanya.ucsd.edu,2592,4,1781,0,0,P defiant.theo-physik.uni-kiel.de,2592,3,630,0,0,P europa.informatik.uni-frankfurt.de,2592,3,676,0,0,P mit.netrek.org,2592,3,676,0,0,B netrek.cs.mcgill.ca,2592,3,796,0,0,B netrek.syd.att.net.au,2592,3,800,0,0,B se.netrek.org,2592,3,864,0,0,B soda.csua.berkeley.edu,2592,3,878,0,0,B spamburger.openface.ca,2592,3,871,0,0,B kirk.hal-pc.org,2592,2,121,1,0,B continuum.us.netrek.org,2592,2,123,6,0,B hockey.netrek.org,2592,2,123,6,0,H monster.wormwood.org,2592,2,203,7,0,C guinness.crhc.uiuc.edu,2592,1,323,0,4,B 2) In TCP mode, if a game server is dead, the metaserver will print out sp->why_dead instead of sp->status. Since metastatuslevel filters out the metaserver output based on the game server status, sp->status had to be expanded in the metaserver to extended status when reporting back to the client. From disp_udp.c in the metaserver: /* this if structure is to satisfy COW's server filtering based on */ /* the TCP ouput of the metaserver. TCP was text, this is only #s */ if (sp->status == SS_NOCONN ) extendedstatus = (sp->why_dead == WD_TIMEOUT) ? 6 : 4; else extendedstatus = sp->status; And in the client, parsemeta.c: #define SS_WORKING 0 #define SS_QUEUE 1 #define SS_OPEN 2 #define SS_EMPTY 3 #define SS_NOCONN 4 #define SS_INIT 5 /* not a real metaserver number, but overcomes a limitation of dropping */ /* text description of sp->why_dead */ #define SS_TOUT 6 This note is here mainly for people looking at metaserver and client code at the same time. (2) --- A refresh button was added to the client selection window to re-query the metaservers. (3) --- KEYGOD changed to clientkeys@clientkeys.netrek.org (4) --- New command line option behavior was added. -m and -M set the default connection type to the metaserver UNLESS metaType is defined in the .xtrekrc. -m Default to UDP -M Default to TCP Out of bounds values for metaType default to TCP. netrek-client-cow-3.3.2/pingstats.h0000664000175000017500000000021213657750470016231 0ustar jamesjames/* pingstats.c */ int pStatsHeight(void); int pStatsWidth(void); void initPStats(void); void redrawPStats(void); void updatePStats(void); netrek-client-cow-3.3.2/hullbitmaps.h0000664000175000017500000000677313657750470016563 0ustar jamesjames #ifdef VARY_HULL #define hull_width 22 #define hull_height 22 #define HULL_FRAMES 8 #define HULL_BYTE_SIZE 66 static char hull_bits[HULL_FRAMES][HULL_BYTE_SIZE] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00}, { 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00} }; #endif netrek-client-cow-3.3.2/ChangeLog0000664000175000017500000005552513657750470015637 0ustar jamesjamesSat May 16 21:30:39 2020 James Cameron * netrek-client-cow-3.3.2: released - remove RSA; no longer served a purpose, - fix compilation errors, - remove translation support; no translations were contributed, - resize metaserver window, - add volume control, - fix safe-idling indicator. Tue Oct 18 21:28:57 2011 James Cameron * netrek-client-cow-3.3.1: released - fix cloaking animation, - double explosion imagery rate, restore beeplite feature to original design, amd restore original timeout for into window ... these had failed with the move of servers to 10 updates per second about ten years ago, - show number of players on metaserver window in slightly graphical fashion, - remove background changing keys, as they did not work, fixes LP #437975, - add --small-screen option for use on displays of 800x600 pixels, - merge several patches from Debian project, including typographical fixes and build hardening, Tue Jun 16 20:05:28 2009 James Cameron * netrek-client-cow-3.3.0: released - initial window: add logo and action images, add tips to the help button, fix refresh delay bug, fix bug leaving window behind on quit, decrease startup time by deferring imagery loading, send version to metaserver, report multicast empty servers as empty - wait queue window: suppress message of the day, use modern language, coloured buttons, - team window: allow new server side training tips to replace message of the day after initial death, - flight: adopt pixmaps graphics previously distributed in another package, full screen now centres game in a 1024x768 window, more sounds in parallel, display ranks based on server ranking system, update rate changes are immediate, report stall of data stream rather than just hanging if network is lost, - miscellaneous: include desktop icon, remove sound warnings, accept a system wide default file, remove obsolete metaserver TCP method, remove old style features support, add latent support for LTD statistics display. - fix ogg beeplite to identify oggee not caller [Pruitt] Wed Mar 18 18:57:36 2009 James Cameron * netrek-client-cow-3.2.10: released - fix %c macro directive, should only work if team is known, - installation support and native sound for SGI IRIX 5.2 to 6.5, - correct location of key file on "make install", - deprecate README.CVS, remove CVS logs and history fragments, - add distributed bug tracking system using ditz, - remove most compilation warnings (some remain in RSA generated code), - deprecate ATM scan feature, fixes segfault on "a", closes LP #331395, - add missing prototypes, closes Debian #512463, - commenced internationalisation infrastructure. Mon Jan 5 19:14:26 2009 James Cameron * netrek-client-cow-3.2.9: released - add identity blinding feature, which removes names, ranks, versions, - remove safe-idle from clue games, - include key file in binary distribution, - clarify license on work contributed by Lars Bernhardsson. Mon Sep 29 14:28:07 2008 James Cameron * netrek-client-cow-3.2.8: released - change of binary name, from netrek to netrek-client-cow. - COPYING: copyright and license review. - remove Java and Windows support. - remove debian/ directory from .tar.gz. - add mkportable script. - placing mouse in message composition window and typing did not behave in the historical fashion, the keystrokes were handled by the game as well as being added to the message being composed, reported by Zachary Uram. Mon Sep 15 16:41:12 2008 James Cameron * netrek-client-cow-3.2.7: released. - add a server feature for the metaserver list, - fix statistics rounding error, - fix ship flicker, - in safe-idle mode, lower update rate, beep on t-mode begin, - metaserver, fix unknown status, failed to initialise, - remove OpenVMS support, - fix a compilation issue on x86_64. Tue Jul 29 21:45:16 2008 James Cameron * netrek-client-cow-3.2.6: released. - add visible tractors for all ships, using the SHOW_ALL_TRACTORS feature set, - remove the observer ghost ship, shield ring, and ship number, draw the observed player as if it is the player, - metaserver window, remove all display delays, add a fast guest login feature using middle mouse button, add a cyclic refresh at 30 second interval, show result of playing on a server (e.g. pass through any connection failure, banned, or other problems so that they appear on the list), - login window, provide full screen refresh, don't hang when waiting for the server to respond, use colours to highlight, - team selection window, realignment of auto quit button, explain that the message of the day is from the server, explain the enter key joins a default team, realignment of message of the day, - disconnection during play, continue to show tactical and galactic state, advise user through a warning message, allow user controlled exit, show the result on the metaserver list, - add a newbie message window hint, backported from Netrek XP 2009, - fix unknown feature warnings on pickled, - provide slot change support, potential future feature, no server expected to use it yet, - add pointer to maintainer, build for Debian Etch, point to autogen in documentation. Tue Jul 22 19:51:10 2008 James Cameron * netrek-client-cow-3.2.5: released. - default fullscreen to off, it was causing problems for those with incomplete resolution support on their systems, - team selection window, provide space bar or enter key to re-enter previous team with previous ship type, or join the second largest team, or join a random team if the server is empty, handle server disconnection gracefully without hanging or terminating, remove team selection options when a request is in progress, quit more quickly, - metaserver window, add a help window, default list size, - metaserver window, add arrow keys to select, space or enter to join, 'o' to observe, - fix to allow windows to be closed by user actions via window manager, without crashing the program, - allow metaserver window to resize when number of servers listed changes. - allow user to override login name using .xtrekrc. - keep metaserver window visible and use new window for each play session. Wed Jul 16 09:30:55 2008 James Cameron * netrek-client-cow-3.2.4: released. - play, fixed inability to fire a stream of eight torps when in TCP mode, which was caused by a combination of packet amalgamation due to the TCP/IP Nagle algorithm, and the server's decision to prevent more than one torp from being fired per update. - play, fixed a delay in responding to keyboard and mouse events ... which was caused by a regression on Debian GNU/Linux Lenny where the latest Xlib and XCB more closely adhered to the manual pages for the X event queue functions. - clue play, add SP_GENERIC_32 version 'b' support, client now requests the packets from the server, and will display mid-galactic messages relating to INL mode games, including pregame, pause, and time left in game. - messaging, fixed bombing RCD to show planet name even when target planet is not scanned, - metaserver list window, changed default metaserver mode to UDP, avoid displaying metaserver list until at least one reply is received, default the list size to about 6 entries, and add keyboard keys for refresh and quit, - graphics, menu styles adjusted to remove thick white lines, - networking, banned during login or loss of connection during play, added messages corresponding to the reason code in the SP_BADVERSION packet, - networking, removed the reconnect after connection loss feature, since (a) the server side has removed it, and (b) most connection losses these days are not recoverable in this way. - graphics, finished full screen and camera support, fixed failure to restore original resolution in many cases, added a warning window message to acknowledge resolution change key ("), - login, fixed delay in and lack of "Seconds to go" on login screen caused by redraw, fixed delayed handling of keyboard events during login screen, removed login screen warning "Keep your mouse in this window to type" since the code now accepts keystrokes no matter what window they appear to be typed into, - usage, changed most stdout messages to be stderr, and lowercase, and changed from the term "ghostbusted" to "disconnected" or "server connection lost", to ease comprehension, - internal, fixed many compilation warnings, removed many redundant CVS revision logs from file headers, still more to go. Mon Sep 3 10:57:17 2007 James Cameron * netrek-client-cow-3.2.3: released. Mon Sep 3 10:42:35 2007 James Cameron * manifest: add missing key.mk.in, reported by Jon Akers. Tue Apr 3 17:08:19 2007 James Cameron * netrek-client-cow-3.2.2: released. Mon May 22 23:06:52 2006 James Cameron * x11window.c: add video mode change support, switches to 1024x768 if it is available, and switches back to previous mode on exit. * system.mk.in: add libXxf86vm. Mon May 22 22:59:54 2006 James Cameron * x11window.c, x11window.h: fix all compilation warnings. * defaults.h, smessage.h, defaults.h, x11sprite.h: add prototypes. * Wlib.h: change set handlers to void return. Mon May 22 22:59:54 2006 James Cameron * camera.c, camera.h: add frame counter and per frame file names, defer imlib2 initialisation to first use in an attempt to find segfaults. * input.c, playback.c: during playback, 's' toggles per frame camera snapshots. During game, 'C' takes a snapshot. Mon May 22 22:59:06 2006 James Cameron * ping.c, short.c, socket.c: initialise some more packet buffers before sending, to fix valgrind reports. Mon May 22 22:59:06 2006 James Cameron * data.c: change default to LABs dashboard, while it isn't well liked by the experienced players it is well liked by newbies, and it's newbies who count. * playerlist.c: change default to sorted player list. Same reasoning as above. Mon May 22 22:58:43 2006 James Cameron * configure.in: enable XPM in build. Sat May 20 19:22:35 2006 James Cameron * cowmain.c, feature.c, socket.c, ping.c, short.c: fix some valgrind reports of use of uninitialised data, possible sources of random information leakage in packets sent to server in situations where auto (stack) variables for packets may not be initialised. Sat May 20 18:10:01 2006 James Cameron * mkcflags.c (main): compilation fixes for -Wall. Tue May 16 16:21:29 2006 James Cameron * x11window.c, socket.c, reserved.c, mkcflags.c, input.c, defaults.c: compilation fixes. Tue May 16 15:51:12 2006 Bill Balcerski * newwin.c (newwin): enlarge planet list window. * inform.c (inform): add PLCORE. * planetlist.c (planetlist): add PLCORE. Fri Apr 14 20:33:28 2006 James Cameron * parsemeta.c (parseInput): fix format string for sscanf, more conversion specifiers were present than pointer arguments, suggesting that the code was trying to check for non-numeric in place of last specifier. Reported by: Stephen Thorne. Fri Apr 14 20:26:45 2006 James Cameron * parsemeta.c (version_r): fix growth of server list. Reported by: Stephen Thorne. Wed Mar 1 18:08:33 2006 James Cameron * netrek-client-cow-3.2.0: released. Tue Feb 28 12:44:24 2006 James Cameron * manifest: add files since last release sufficient to enable build, and remove non-source file win32/libgmp.a. Tue Feb 28 12:44:10 2006 James Cameron * Makefile (dist): change source package name to netrek-client-cow. Thu Feb 23 15:55:29 2006 James Cameron * dmessage.c, version.h, mkcflags.c, name.c: change version number format to x.y.z. Thu Feb 23 09:40:58 2006 James Cameron * parsemeta.c (ReadMetasSend): fix regression caused by previous change, resulting in bad file descriptor errors from select in ReadMetasRecv(). 2006-02-01 Bob Tanner * debian/changelog, debian/find-key.sh, debian/rules: - At compile time figure out what RSA key to build againts. - Created find-key.sh 2006-01-31 Bob Tanner * debian/control, debian/rules: - Missed the libxt-dev Build-Depdends (pbuilder rules) - For some reason configure cannot find the X11 headers, so added the location into the configure invocation * debian/control, debian/rules: - Missed gmp develop package - Little documentation in debian/rules about key.def * Makefile: - Couple GNU make specific changes to make building no dep targets build by default. At least I believe the "::" does that under GNU make. * system.mk.in: - cow's Makefile is pretty convoluted and under normal(?) circumstances requires 2 builds. At least under debian. Change the depends to make a 1 time build possible which makes using pbuilder easier :-) * .cvsignore: - Ignore some of the files that cdbs creates. * CVSROOT/loginfo: - Added netrek-dev@us.netrek.org too, since commits are very low volume lately.:-P * debian/README.Debian, debian/changelog, debian/control, debian/dirs, debian/netrek-client-cow.copyright, debian/netrek-client-cow.docs, debian/netrek-client-cow.examples, debian/netrek-client-cow.install, debian/netrek-client-cow.man, debian/netrek-client-cow.manpages, debian/rules, debian/source.lintian-overrides, debian/watch: - First commit for debian sid package. NOTE: Only worked the .deb on sid, once a few people QA build it (James?) on sid and we share out any lintian/linda issues, I'll build it for etch and sarge. * CVSROOT/loginfo: - Found the problems(!) First, syncmail was way out of date, I snarfed the recommended version and installed it into CVSROOT, of course the commit of that change failed to send an email notification (chick-n-egg problem) - Next, cvs commit to cow are failing because there is no longer a netrek-cow-cvs mailing list. - Upgraded syncmail to recommend revision from sourceforge's sitedocs. Fri Jan 27 20:47:54 2006 James Cameron * parsemeta.c: fix overloaded definition of global sock. Mon Jan 2 17:19:26 2006 James Cameron * parsemeta.c: add multicast server packets for discovering servers on a local area network. Fri Sep 30 21:33:15 2005 James Cameron * config.h.in: remove server defines. * configure.in: default configure script to --enable-unstable, since this is the version that most people are playing with, if they are playing a COW on UNIX at all. Remove server code base specific stuff. Add key file option --with-key. Mon Jul 8 01:29:36 2002 Bob Tanner * cow.desktop: Change Name to something more descriptive. Tue Jun 25 10:28:46 2002 James Cameron * socket.c: remove unused strcpy_return(), and tidy PACKET_LOG code. * socket.c (print_packet): add packet logging that logs packets to stderr rather than just count them. Was very useful in determining cause of update bug. Not intended for 3.01pl0. From: Carlos Villalpando. Sat Jun 22 14:30:42 2002 Bob Tanner * sound.c: Fixed a small, if sound is off in the .netrekrc, SDL sound still tried to play the .wav files. Forgot to initialize the sound_init var. Sat Jun 22 00:36:05 2002 Bob Tanner * configure.in: Added check for sdl_config, don't find it, don't look for the SDL_mixer library. Fri Jun 21 22:41:15 2002 Bob Tanner * newwin.c (newwin): Added code to just popup window saying SDL sound is an all or nothing option. * findslot.c (findslot): #ifdef'd out Exit_Sound() * cowmain.c: #ifdef'd out Abort_Sound(), it's not need with SDL. #ifdef'd out Exit_Sound() * playback.c: #ifdef'd out Abort_Sound(), it's not need with SDL * local.c: #ifdef'd out Abort_Sound(), it's not need with SDL * sound.c: Removed the ability to toggle sounds under SDL. It's an all or nothing thing now. If request, I'll make SDL work with Kurt's sound toggling code. Fri Jun 21 02:40:55 2002 Bob Tanner * socket.c (doRead): An attempt to fix the full update bug (where's the bugzilla tracking number!) by reading 1024 bytes (BUFSIZE) for the socket instead of 768 bytes. Fri Jun 21 00:43:53 2002 Bob Tanner * cow.spec: rolled new RPM from HEAD of cow tree Thu Jun 16 02:31:27 2002 Bob Tanner * cow.spec: added cow.png and cow.desktop Thu Jun 13 21:39:27 2002 Bob Tanner * Makefile (profile): Added 'make profile' to generate a netrek binary to we can compare cow with SDL_mixer vs cow with the old sound code. Wed Jun 12 22:52:13 2002 Bob Tanner * playback.c (pbmain): Converted enter_ship.wav * input.c (Key113): Converted self_destruct.wav * input.c (Key109): Converted message.wav * local.c (DrawMisc): Converted warning.wav * local.c (DrawPlasmaTorps): Converted plasma_hit.wav * local.c (DrawTorps): Converted torp_hit.wav * sound.h: added EXPLOSION_OTHER_WAV, PHASER_OTHER_WAV, FIRE_TORP_OTHER. and the code to load these new sounds. * local.c (DrawShips): Converted cloak.wav, uncloak.wav, shield_down.wav, shield_up.wav, explosion.wav, explosion_other.wav, phaser.wav, phaser_other.wav * cowmain.c (cowmain): Converted enter_ship.wav and engine.wav * sound.c: added isDirectory to check that the sounddir is actually a directory. Tue Jun 11 01:10:51 2002 Bob Tanner * system.mk.in: Added SDL_CFLAGS, SDL_CONFIG, SDL_LIBS, SDL_MIXER_LIBS * sound.c: Added HAVE_SDL wrapper, initialization of SDL system, opening of audio device, and loading of 17 cow sounds. * cowmain.c (cowmain): HAVE_SDL wrapper to Init_Sound using SDL. I moved the Init_Sound method to right after readdefaults() so the intro can start playing ASAP. * configure.in: Added AC_CANONICAL_SYSTEM, added check for SDL, add check for SDL_mixer. * config.h.in: add HAVE_SDL * spike: See spike/README for details Thu May 23 13:03:22 2002 James Cameron * data.h (PL_OFF): add constant for playback disabled. Tue May 7 09:15:16 2002 James Cameron * configure.in: --enable-unstable bug fix. From tanner@real-time.com Tue Jul 24 14:47:50 2001 James Cameron * parsemeta.c: fix delay during UDP startup, by waiting up four seconds for the first response from a metaserver, and not waiting one second between processing X events on the window.Update the list properly on a refresh. Fix empty window when the player is serviced by satellite delays. Change the colour on a server line to Cyan during a connection attempt to observe, and to Yellow during a normal connection attempt. Change to Green on successful connection. Change to Red if connection fails. Make better guesses as to the initial size of the window. Tidy up messages, remove excess periods, and add warning about no return packets suggesting a firewall as the cause. Tue Jun 12 16:32:48 2001 James Cameron * playback.c (pbmain): process all windowing events before proceeding to the next update, rather than just the one event. With pixmaps enabled on a playback, the event queue would grow causing the keystrokes to be ignored for many seconds. Enabling pixmaps generates more events. Tue Jun 12 12:03:42 2001 James Cameron * playback.c, input.c: add single-step playback keys, enter to step forward, backspace to step backward, and space to stop and start. Implemented as a flag (pb_stepping) that is non-zero when a step is in progress. Once the next frame has been displayed, the flag is cleared and the playback pauses. Required a minor change to input.c to catch keys that would otherwise be rejected because they were control characters. Fri Apr 27 21:46:13 2001 James Cameron * socket.c: when RSA is not defined, a warning is generated for the prototype of handleRSAKey because it references a struct rsa_key_spacket which is not defined. Moved the prototype into the #ifdef RSA. * socket.c: minor warning from casting in connect call. * input.c (initkeymap): getctrlkey() was being passed a "char *" instead of "unsigned char *". * main.c: include "defs.h" for getdefault() prototype. * docwin.c (loadxtrekrc): remove minor compiler warning. * config.h.in: remove superfluous definition of SIGSYS on Linux. * Makefile (distclean): add distclean target to comply with GNU package conventions. * configure.in: change testing of BSD signals in configure to shows an answer cache it. From code contributed to Vanilla by Benjamin `Quisar' Lerman * helpwin.c (help_message): rethink each help message, remove the word toggle and replace with on/off, as toggle is a technical term, remove mixed case descriptions in favour of lower case, move some verbs to the end of the message, and change the column fit algorithm to avoid overflow in normal and 800x600 mode. * input.c (keyaction): redirect keystrokes that would otherwise be ignored to be processed in the tactical window. Novice users find it painful to have to put the cursor unnecessarily into the tactical window before pressing a key. * getname.c (handleWEvents): accept keystrokes from any netrek window during login, and refresh the development team text on the login window as soon as a redraw is required rather than waiting for the next second. * getname.c (loaddude): if server rejects guest login, allow the user to retry with a real name. Current INL servers are coded to reject guest login. Having to restart the client is unnecessary. Fri Apr 27 11:34:50 2001 Benjamin `Quisar' Lerman * cowapi.h, data.c, data.h, defaults.c, main.c, socket.c: change -U to also adopt a local port number for TCP mode. Thu Apr 26 15:52:16 2001 James Cameron * Makefile (dist): change dist and distdoc targets to generate a .tar.gz file that unpacks to a directory below the current directory. Note: also writes the output kit file to the current directory rather than the directory above. * INSTALL: new file, standard generic installation instructions. * README: new file, explains the other important package documentation files. * ChangeLog: new file, a programmers change log as per GNU packaging standards and automated EMACS change log entry creation. * .cvsignore: add list of files to be ignored by CVS. netrek-client-cow-3.3.2/playback.h0000664000175000017500000000020713657750470016007 0ustar jamesjamesint readFromFile(); void pbsetspeed(char key); void pblockplayer(int who); void pblockplanet(int pl); int ckRecordPacket(char packet); netrek-client-cow-3.3.2/macrowin.c0000664000175000017500000001300313657750470016031 0ustar jamesjames/* macrowin.c from helpwin.c copyright 1993 Nick Trown copyright 1991 ERic * mehlhaff Free to use, hack, etc. Just keep these credits here. Use of this * code may be dangerous to your health and/or system. Its use is at your own * risk. I assume no responsibility for damages, real, potential, or * imagined, resulting from the use of it. Yeah.....what Eric said... * */ #include "config.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" /* Fills in macro window with the macros defined in the .xtrekrc. */ #define NUMLINES 80 #define MAXMACRO 65 /* maximum length in characters of key explanation */ #define MACROLEN 255 /* length of construction string since we don't know how long a macro can be */ int lineno = 0; char maclines[10][MAXMACRO]; int maclevel = 0; static int formatline(char *line) { register int end; char *temp; int num = 0; if (!line) return 0; if (strlen(line) <= MAXMACRO) { STRNCPY(maclines[num], line, sizeof(maclines[0])); lineno++; return 1; } temp = line; while (1) { end = MAXMACRO - 1; if (end > strlen(temp)) { lineno++; STRNCPY(maclines[num++], temp, sizeof(maclines[0])); return (num); } else for (; temp[end] != '%'; end--); lineno++; STRNCPY(maclines[num++], temp, end); temp = temp + end; } } static void filldist(int fill) { register int i; register int row; register int c; int num; char key[3]; lineno = 0; for (i = 1, row = 5; distmacro[i].macro != '\0'; i++) { if (fill) { if (distmacro[i].c < 128) sprintf(key, "%c", distmacro[i].c); else sprintf(key, "^%c", distmacro[i].c - 96); sprintf(maclines[0], "%-8s %s", key, distmacro[i].name); W_WriteText(macroWin, 2, row++, W_Yellow, maclines[0], strlen(maclines[0]), W_RegularFont); } lineno++; num = formatline(distmacro[i].macro); if (fill) { for (c = 0; c < num; c++) { W_WriteText(macroWin, 8, row++, textColor, maclines[c], strlen(maclines[c]), W_RegularFont); } } if (lineno > NUMLINES) continue; } } void fillmacro(void) { register int row, i; char macromessage[MACROLEN]; W_ClearWindow(macroWin); sprintf(macromessage, "Packages active: NBT%s%s", (UseNewMacro ? ", NEWMACRO" : ""), (UseSmartMacro ? ", SMARTMACRO" : "")); W_WriteText(macroWin, 2, 1, textColor, macromessage, strlen(macromessage), W_RegularFont); sprintf(macromessage, "Currently showing: %s", (maclevel ? "Macros" : "RCDS")); W_WriteText(macroWin, 2, 2, textColor, macromessage, strlen(macromessage), W_RegularFont); if (maclevel == 0) { W_WriteText(macroWin, 2, 4, W_Yellow, "Key Distress Name", 21, W_RegularFont); filldist(1); return; } /* 4 column macro window. This may be changed depending on font size */ for (row = 4, i = 0; i < macrocnt; row++, i++) { if (macro[i].key <= 128) sprintf(macromessage, "%c ", macro[i].key); else sprintf(macromessage, "^%c", macro[i].key - 96); if (macro[i].type == NEWMMOUSE) { switch (macro[i].who) { case MACRO_PLAYER: strcat(macromessage, " PL MS "); break; case MACRO_TEAM: strcat(macromessage, " TM MS "); break; default: strcat(macromessage, " SELF "); break; } } else { switch (macro[i].who) { case 'T': strcat(macromessage, " TEAM "); break; case 'A': strcat(macromessage, " ALL "); break; case 'F': strcat(macromessage, " FED "); break; case 'R': strcat(macromessage, " ROM "); break; case 'K': strcat(macromessage, " KLI "); break; case 'O': strcat(macromessage, " ORI "); break; case 'M': strcat(macromessage, " MOO "); break; #ifdef TOOLS case '!': strcat(macromessage, " SHELL "); break; #endif #ifdef NEWMACRO case '\0': strcat(macromessage, " SPEC "); break; #endif default: strcat(macromessage, " ---- "); break; } } strcat(macromessage, macro[i].string); macromessage[MAXMACRO] = '\0'; W_WriteText(macroWin, 2, row, textColor, macromessage, strlen(macromessage), W_RegularFont); } } static void switchmacros(void) { int num = macrocnt + 5; if (!macroWin) return; /* paranoia? */ maclevel = abs(maclevel - 1); if (maclevel == 0) { lineno = 0; filldist(0); num = lineno + 5; } W_ResizeTextWindow(macroWin, 80, num); W_SetWindowExposeHandler(macroWin, fillmacro); W_SetWindowButtonHandler(macroWin, switchmacros); W_MapWindow(macroWin); } void showMacroWin(void) { int num = macrocnt + 5; if (!macroWin) { if (maclevel == 0) { lineno = 0; filldist(0); num = lineno + 5; } /* we'll use GWINSIDE since it is (probably) less than or equal to * * TWINSIDE. The smaller the better. */ macroWin = W_MakeTextWindow("macrow", GWINSIDE + BORDER, BORDER, 80, num, NULL, BORDER); W_ResizeTextWindow(macroWin, 80, num); W_DefineTrekCursor(macroWin); W_SetWindowExposeHandler(macroWin, fillmacro); W_SetWindowButtonHandler(macroWin, switchmacros); W_MapWindow(macroWin); } else if (W_IsMapped(macroWin)) W_UnmapWindow(macroWin); else W_MapWindow(macroWin); } netrek-client-cow-3.3.2/censor.h0000664000175000017500000000015613657750470015515 0ustar jamesjames/* censor.c */ void initSkipArray(char *word, int *skip); void initCensoring(void); char *censor(char *text); netrek-client-cow-3.3.2/warning.c0000664000175000017500000000465113657750470015670 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include INC_SYS_TIME #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" /* The warning in text will be printed in the warning window. The message * will last WARNTIME/10 seconds unless another message comes through and * overwrites it. */ void warning(char *text) { int doPhaser; time_t curtime; struct tm *tm; char newtext[128]; if (warncount > 0) { /* XFIX */ W_ClearArea(warnw, 5, 5, W_Textwidth * warncount, W_Textheight); } doPhaser = showPhaser && (strncmp(text, "Phaser burst", 12) == 0); warncount = strlen(text); #ifdef PHASER_STATS if (doPhaser && phaserShowStats) { sprintf(newtext, "%s [%2d%%]", text, phaserStatTry ? (phaserStatHit * 100) / phaserStatTry : 0); warncount += 6; W_WriteText(warnw, 5, 5, textColor, newtext, warncount, W_RegularFont); } else #endif W_WriteText(warnw, 5, 5, textColor, text, warncount, W_RegularFont); /* set the line to be cleared */ warntimer = udcounter + WARNTIME * server_ups / 5; if (logmess || doPhaser) { time(&curtime); tm = localtime(&curtime); #ifdef PHASER_STATS sprintf(newtext, "%.100s %02d:%02d:%02d", (doPhaser && phaserShowStats) ? newtext : text, tm->tm_hour, #else sprintf(newtext, "%.100s %02d:%02d:%02d", text, tm->tm_hour, #endif tm->tm_min, tm->tm_sec); warncount = (warncount > 100) ? 109 : warncount + 9; if (logmess) { if (logFile != NULL) { fprintf(logFile, "%s\n", newtext); fflush(logFile); } else puts(newtext); } if (doPhaser) { W_WriteText(phaserwin, 0, 0, textColor, newtext, warncount, 0); switch (showPhaser) { /* 0 -- none 1 -- review all 2 -- review team 3 -- review indiv * * 4 -- review kill 5 -- total */ case 0: break; case 1: W_WriteText(messwa, 0, 0, textColor, newtext, warncount, 0); break; case 2: W_WriteText(messwt, 0, 0, textColor, newtext, warncount, 0); break; case 3: W_WriteText(messwi, 0, 0, textColor, newtext, warncount, 0); break; case 4: W_WriteText(messwk, 0, 0, textColor, newtext, warncount, 0); break; case 5: W_WriteText(reviewWin, 0, 0, textColor, newtext, warncount, 0); break; default: break; } } } } netrek-client-cow-3.3.2/TODO0000664000175000017500000002231313657750470014542 0ustar jamesjamesWelcome. Of the things we would welcome work on, it's the initial appearance of the package that will generate the most result. Placement in Gnome menus. Placement in KDE menus. Package description. Documentation. Initial startup appearance. Compatibility with all window managers. sound, distance and position see /usr/share/doc/libsdl-mixer1.2-dev/examples/playwave.c.gz sound, tonality sound, recognition torp fire request, tick, torp hit, noise bang ding, torp det, noise bang, torp self det, pfft, phaser fire request, tock, phaser hit, whistle ding, phaser plasma, whistle bang ding, phaser miss, whistle, tractor, low whistle rising, pressor, low whistle falling, shield up, shield down, explosion, as usual, beam up, high whistle rising, beam down, high whistle falling, repair, hammer, chainsaw, drill, warp, filtered noise, spike at cabin resonance, transwarp, bomb begin, bomb progress, bomb end, hurt, ding, crumple, etmp, noise whistle, contracting metal, wtmp, noise whistle, contracting metal, help me, sos carrying, pan pan teamspeak integration determine ports needed on orion advise player if there is t-mode on another server tactical planet pixmaps from tedturner or other clients www.ggzgamingzone.org/ bug id 9b966bd6ed186fa7d55efa6062582065a390b7b7 ship colours, eight per team. extend colortable, which increases NCOLORS change macros that determine colour for a ship to allocate a colour from available team colours on a join. sigh. http://mpt.net.nz/archive/2008/08/01/free-software-usability RCD i18n translations. safe-idle do not red alert issue audio notification when safe-idle ends without user action metaserver window, align columns flexibly. integrated newbie server integrated league server update information age every few seconds new version warning time to play notifier an audio sample if player has not played in past minute if n players moves from below threshold to threshold or above also change window or icon title login window, add a quit button, centre bottom Can't type control/d on password prompt to exit, as it may form part of a password. add a guest button, left side, if port is pickup if disconnect happens, add a reconnect button, right side, e.g. while user is reading docs on galactic? galactic intro text, theme of game, how to play flight windows, turn keys, Key187, Key189 from xp discoverability, keys, lack of replace player list area with new players' control panel commands flying: 0 stop, 3 dodge, 6 cruise, 9 top, right-click, ; lock, o orbit talking: shift-E distress, shift-F urgency i am carrying armies, mA defense: s shields, shift-T tractor, y pressor, d detonate enemy torps, c cloak, shift-R repair, attack: left-click fire torp, middle-click phaser, planets: ; lock, o orbit, ctrl-t announce, b bomb, z pick, x drop advisory game goal: take planets until no enemy (team name) planets remain tasks, bomb: identify enemy planet / fly / lock / bomb / raise shields / fly tasks, protect: identify enemy bomber / fly / fight / die tasks, control: identify front / fly / fight / die tasks, ogg: identify enemy carrier / fly / cloak / decloak / tractor / fight / die tasks, escort: identify carrier / fly / fight / die tasks, carry: get a kill / fly back / pick / fly / lock / bomb / drop / die mouse-over hints for windows. EnterNotify, set flag, enable MotionNotify, set timer, LeaveNotify, clear flag, clear timer, unmap hint, MotionNotify, calculate coordinate change per second using time in event, if above threshold then clear timer, on timer expiry, map hint dashboard elements, player list, tactical objects. general user interface clickable links in message windows, clickable links in documentation windows. this, is a planet, you can orbit it, you can bomb it, but usually only if it is the enemy team, and only if it has more than four armies, etc -- build static binary -- !!! PLCLEAR is set too often. Does not need to be set for every draw, just for BEEPLITE and moves The following are projects, ideas, and bugs for anyone who would like to contribute to BRM. Please send all patches to brmbugs@crissy.berkeley.edu These are listed in approximately order of importance. BUGS: ----------------------------------------------------------------- ----------------------------------------------------------------- TODO: ----------------------------------------------------------------- Create an rc editor that will allow: - keymap, buttonmap editing - configuration of all : options - window placement - choosing fonts - macro editing - etc... ----------------------------------------------------------------- Enhance macrowindow to include a display of receiver configurable distress calls. [I think Nick Trown has finished this and will include it in future patches] ----------------------------------------------------------------- Make a mouse button -> control key buttonmap ----------------------------------------------------------------- Add a meta-command mode into the client, so that people can imitate what they did with macromode earlier in terms of RCD. Further, sensative commands like 'q' and 'Q' could be mapped to a "safe" meta command mode. Ex: Have something like the following in xtrekrc. metaCommand: qQ^3 In order to do a fast quit, you then need to hit say 'W' (or whatever your meta command key is) followed by 'q'. In order to send the ^3 RCD, need to get into meta-command mode, then hit ^3. ----------------------------------------------------------------- Allow macros to be assigned to control keys ----------------------------------------------------------------- Suggestions for new MACRO arguments: %* automatically abort a macro (ie don't print it) whenever this occurs % that is %, this would be used mainly to start a macro with blanks in it, ie mac.a.T: % BOMB!! Don't print MACROs if they reduce down via SMARTMACRO to a null message. ----------------------------------------------------------------- jeffw writes: >How does one map a control key to a single key macro? Not possible, needs adding. ----------------------------------------------------------------- Include Hadley's xtrekrc window into the client. Steal as much of Hadley's other cool client features as possible. ----------------------------------------------------------------- From: "Joseph E. Beck" Just curious, do you have any idea on the status of "galaxy rotate" with short packets? It would be really cool if you could get something like: galaxy-position: lower-left galaxy-direction: up So when you enter the game your race is in the lower left corner, and you will fly upwards to meet your opponents. Granted, this is cosmetic but would be really neat. Do you know if anyone is looking at this, or is it dead? ----------------------------------------------------------------- From: "Joseph E. Beck" Highly related second question: is there (or could there be? :-) a way to have the received smartdistresses be displayed on 2 separate lines? Eg: F4->FED F4->FED ORG 5 armies @3 armies F4->FED CAN 60% fuel AS Which would be parsed as "F4 is at CAN in an AS with 60% fuel. He is heading to ORG@3 with 5 armies.". The reason for this is that I like to put a message board on my galactic window, but I can only have a partial width window (since if it was wider it would block the battle area). Shouldn't be too tough, right? :-) ----------------------------------------------------------------- Come up with some scheme for allowing keymaps to use control and meta keys, along with TAB, RETURN, DELETE, and other such keys. ----------------------------------------------------------------- Rewrite and update all the documentation. ----------------------------------------------------------------- Keep a team stats total in the playerlist, so that teams may be compared as a whole with one simple quotient. (idea came from Bharat.Mediratta I think, not sure) ----------------------------------------------------------------- From glaurent@indri.inria.fr Fri Sep 17 05:46:15 1993 Date: Fri, 17 Sep 1993 14:47:51 +0200 To: brmbugs@crown.berkeley.edu Subject: BRM 2.99pl1: we want the old new player list Last suggestion : the help window is a mess. A bit of sorting (by themes for ex.) would be a good idea... ----------------------------------------------------------------- Someone wrote: >Hmm.. I just tried un-keymapping the ` key. >I did options and `` and it still does the macro instead of the packetwindow.. > >Here's what I had in .xtrekrc: > xtrekrc entry: #newmacro stuff singleMacro: ` mac.`.A: %p: MAJOR FUCKING TWINK jn responded: If these are the lines you have in your .xtrekrc, it is not possible to use the ` key for anything but the specified macro. Macros override commands, and singleMacro means you automatically enter macro mode when that key is hit. As of this patchlevel [3.0 beta], keymap is entirely ignored when it comes to macros and dist.key.name configured distresses. In future patch levels we might provide a way to modify and remove whatever singleMacro is set to, right now editing and reloading xtrekrc is necessary. netrek-client-cow-3.3.2/cowapi.h0000664000175000017500000000377113657750470015514 0ustar jamesjames/* cowapi.h -- The COW Aplication interface */ /* Copyright (c) 1996 Kurt Siegl * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * The COW development team * */ #ifndef _h_cowapi #define _h_cowapi /* COW mainloop - starts up a client window */ extern int cowmain(char *server, int port, char *name); #ifdef RECORDGAME /* COW mainloop - starts up a client window */ extern int pbmain(char *name); #endif /* Variables passing Optional Arguments to cowmain */ extern char *deffile; extern char *recordFileName; extern int pb_create_index; extern char *logFileName; extern char *display_host; extern int passive; extern int checking; extern char *deffile; #ifdef META extern int usemeta; #endif /* Global COW Variables which may be set and/or used outside */ /* Version Information */ extern char cflags[], arch[], cdate[], cbugs[], cowid[], cwho[]; extern struct timeval tv_ctime; #ifndef PSEUDOSIZE #define PSEUDOSIZE 16 #endif extern char pseudo[PSEUDOSIZE]; extern char defpasswd[PSEUDOSIZE]; extern char login[PSEUDOSIZE]; extern int baseLocalPort; extern int log_packets; extern int ghoststart; extern int ghost_pno; extern int debug; extern int ignore_signals; extern char *title; #ifndef WIN32 extern int takeNearest; #endif #ifdef GATEWAY extern int use_trekhopd; extern unsigned LONG netaddr; #endif #ifdef TOOLS extern char *wwwlink; extern char *upgradeURL; extern char *releaseURL; extern char *bugURL; #endif #ifdef WINDOWMAKER extern char **wm_argv; extern int wm_argc; #endif extern int fastGuest; extern char *program; #endif /* _h_cow */ netrek-client-cow-3.3.2/short.c0000664000175000017500000016137013657750470015364 0ustar jamesjames/* This file implements all SHORT_PACKETS functions */ /* HW 19.07.93 */ #include "config.h" #ifdef SHORT_PACKETS #include INC_MACHINE_ENDIAN #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "distress.h" #include "dmessage.h" #include "local.h" #include "map.h" #include "playerlist.h" #include "rotate.h" #include "socket.h" #include "spopt.h" #include "stats.h" #include "warning.h" #include "short.h" /* from here on all SHORT_PACKETS */ #include "wtext.h" /* here are all warningdefines */ /* Here are all warnings that are send with SP_S_WARNING */ /* HW 93 */ /* DaemonMessages */ char *daemon_texts[] = { /* Game_Paused() */ "Game is paused. CONTINUE to continue.", /* 0 */ "Game is no-longer paused!", /* 1 */ "Game is paused. Captains CONTINUE to continue.", /* 2 */ "Game will continue in 10 seconds", /* 3 */ /* send_about_to_start() */ "Teams chosen. Game will start in 1 minute.", /* 4 */ "----------- Game will start in 1 minute -------------", /* 5 */ }; /* VARITEXTE = warnings with 1 or more arguments argument */ char *vari_texts[] = { /* redraw.c */ "Engineering: Energizing transporters in %d seconds", /* 0 */ "Stand By ... Self Destruct in %d seconds", /* 1 */ "Helmsman: Docking manuever completed Captain. All moorings secured at port %d.", /* 2 * */ /* interface.c from INL server */ "Not constructed yet. %d minutes required for completion", /* 3 */ }; char *w_texts[] = { /* socket.c */ "Tractor beams haven't been invented yet.", /* 0 */ "Weapons's Officer: Cannot tractor while cloaked, sir!", /* 1 */ "Weapon's Officer: Vessel is out of range of our tractor beam.", /* 2 */ /* handleRepressReq */ /**************** coup.c ***********************/ /* coup() */ "You must have one kill to throw a coup", /* 3 */ "You must orbit your home planet to throw a coup", /* 4 */ "You already own a planet!!!", /* 5 */ "You must orbit your home planet to throw a coup", /* 6 */ "Too many armies on planet to throw a coup", /* 7 */ "Planet not yet ready for a coup", /* 8 */ /* getentry.c */ /* getentry() */ "I cannot allow that. Pick another team", /* 9 */ "Please confirm change of teams. Select the new team again.", /* 10 * */ "That is an illegal ship type. Try again.", /* 11 */ "That ship hasn't beed designed yet. Try again.", /* 12 */ "Your new starbase is still under construction", /* 13 */ "Your team is not capable of defending such an expensive ship!", /* 14 * */ "Your team's stuggling economy cannot support such an expenditure!", /* 15 * */ "Your side already has a starbase!", /* 16 */ /* plasma.c */ /* nplasmatorp(course, type) */ "Plasmas haven't been invented yet.", /* 17 */ "Weapon's Officer: Captain, this ship is not armed with plasma torpedoes!", /* 18 * */ "Plasma torpedo launch tube has exceeded the maximum safe temperature!", /* 19 * */ "Our fire control system limits us to 1 live torpedo at a time captain!", /* 20 * */ "Our fire control system limits us to 1 live torpedo at a time captain!", /* 21 * */ "We don't have enough fuel to fire a plasma torpedo!", /* 22 */ "We cannot fire while our vessel is undergoing repairs.", /* 23 */ "We are unable to fire while in cloak, captain!", /* 24 */ /******** torp.c *********/ /* ntorp(course, type) */ "Torpedo launch tubes have exceeded maximum safe temperature!", /* 25 * */ "Our computers limit us to having 8 live torpedos at a time captain!", /* 26 * */ "We don't have enough fuel to fire photon torpedos!", /* 27 */ "We cannot fire while our vessel is in repair mode.", /* 28 */ "We are unable to fire while in cloak, captain!", /* 29 */ "We only have forward mounted cannons.", /* 30 */ /* phasers.c */ /* phaser(course) */ "Weapons Officer: This ship is not armed with phasers, captain!", /* 31 * */ "Phasers have not recharged", /* 32 */ "Not enough fuel for phaser", /* 33 */ "Can't fire while repairing", /* 34 */ "Weapons overheated", /* 35 */ "Cannot fire while cloaked", /* 36 */ "Phaser missed!!!", /* 37 */ "You destroyed the plasma torpedo!", /* 38 */ /* interface.c */ /* bomb_planet() */ "Must be orbiting to bomb", /* 39 */ "Can't bomb your own armies. Have you been reading Catch-22 again?", /* 40 * */ "Must declare war first (no Pearl Harbor syndrome allowed here).", /* 41 * */ "Bomb out of T-mode? Please verify your order to bomb.", /* 42 */ "Hoser!", /* 43 */ /* beam_up() */ "Must be orbiting or docked to beam up.", /* 44 */ "Those aren't our men.", /* 45 */ "Comm Officer: We're not authorized to beam foriegn troops on board!", /* 46 * */ /* beam_down() */ "Must be orbiting or docked to beam down.", /* 47 */ "Comm Officer: Starbase refuses permission to beam our troops over.", /* 48 * */ /* declare_war(mask) */ "Pausing ten seconds to re-program battle computers.", /* 49 */ /* do_refit(type) */ "You must orbit your HOME planet to apply for command reassignment!", /* 50 * */ "You must orbit your home planet to apply for command reassignment!", /* 51 * */ "Can only refit to starbase on your home planet.", /* 52 */ "You must dock YOUR starbase to apply for command reassignment!", /* 53 * */ "Must orbit home planet or dock your starbase to apply for command reassignment!", /* 54 * */ "Central Command refuses to accept a ship in this condition!", /* 55 * */ "You must beam your armies down before moving to your new ship", /* 56 * */ "That ship hasn't been designed yet.", /* 57 */ "Your side already has a starbase!", /* 58 */ "Your team is not capable of defending such an expensive ship", /* 59 * */ "Your new starbase is still under construction", /* 60 */ "Your team's stuggling economy cannot support such an expenditure!", /* 61 * */ "You are being transported to your new vessel .... ", /* 62 */ /* redraw.c */ /* auto_features() */ "Engineering: Energize. [ SFX: chimes ]", /* 63 */ "Wait, you forgot your toothbrush!", /* 64 */ "Nothing like turning in a used ship for a new one.", /* 65 */ "First officer: Oh no, not you again... we're doomed!", /* 66 */ "First officer: Uh, I'd better run diagnostics on the escape pods.", /* 67 * */ "Shipyard controller: This time, *please* be more careful, okay?", /* 68 * */ "Weapons officer: Not again! This is absurd...", /* 69 */ "Weapons officer: ... the whole ship's computer is down?", /* 70 */ "Weapons officer: Just to twiddle a few bits of the ship's memory?", /* 71 * */ "Weapons officer: Bah! [ bangs fist on inoperative console ]", /* 72 * */ "First Officer: Easy, big guy... it's just one of those mysterious", /* 73 * */ "First Officer: laws of the universe, like 'tires on the ether'.", /* 74 * */ "First Officer: laws of the universe, like 'Klingon bitmaps are ugly'.", /* 75 * */ "First Officer: laws of the universe, like 'all admirals have scummed'.", /* 76 * */ "First Officer: laws of the universe, like 'Mucus Pig exists'.", /* 77 * */ "First Officer: laws of the universe, like 'guests advance 5x faster'.", /* 78 * */ /* orbit.c */ /* orbit() */ "Helmsman: Captain, the maximum safe speed for docking or orbiting is warp 2!", /* 79 * */ "Central Command regulations prohibit you from orbiting foreign planets", /* 80 * */ "Helmsman: Sensors read no valid targets in range to dock or orbit sir!", /* 81 * */ /* redraw.c */ "No more room on board for armies", /* 82 */ "You notice everyone on the bridge is staring at you.", /* 83 */ /* startdaemon.c */ /* practice_robo() */ "Can't send in practice robot with other players in the game.", /* 84 * */ /* socket.c */ /* doRead(asock) */ "Self Destruct has been canceled", /* 85 */ /* handleMessageReq(packet) */ "Be quiet", /* 86 */ "You are censured. Message was not sent.", /* 87 */ "You are ignoring that player. Message was not sent.", /* 88 */ "That player is censured. Message was not sent.", /* 89 */ /* handleQuitReq(packet) */ "Self destruct initiated", /* 90 */ /* handleScan(packet) */ "Scanners haven't been invented yet", /* 91 */ /* handleUdpReq(packet) */ "WARNING: BROKEN mode is enabled", /* 92 */ "Server can't do that UDP mode", /* 93 */ "Server will send with TCP only", /* 94 */ "Server will send with simple UDP", /* 95 */ "Request for fat UDP DENIED (set to simple)", /* 96 */ "Request for double UDP DENIED (set to simple)", /* 97 */ /* forceUpdate() */ "Update request DENIED (chill out!)", /* 98 */ /* INL redraw.c */ "Player lock lost while player dead.", /* 99 */ "Can only lock on own team.", /* 100 */ "You can only warp to your own team's planets!", /* 101 */ "Planet lock lost on change of ownership.", /* 102 */ " Weapons officer: Finally! systems are back online!", /* 103 */ }; #define NUMWTEXTS (sizeof w_texts / sizeof w_texts[0]) #define NUMVARITEXTS ( sizeof vari_texts / sizeof vari_texts[0]) #define NUMDAEMONTEXTS ( sizeof daemon_texts / sizeof daemon_texts[0]) #define statsFile stderr /* use stderr for stats output for now */ extern int gather_stats; extern void sendShortReq(char); void new_flags(unsigned int data, int which); extern unsigned char numofbits[]; /* How many 1 bits in a char */ extern int vtisize[]; /* 4 byte Header + torpdata */ int Plx[MAXPLAYER], Ply[MAXPLAYER], Pgx[MAXPLAYER], Pgy[MAXPLAYER]; unsigned char Pdir[MAXPLAYER]; int my_x, my_y; /* for rotation we need to * * * * * keep track of our real * * * coordinates */ /* SP_S_WARNING vari texte */ char *s_texte[256]; /* Better with a malloc * * * * scheme */ char no_memory[] = {"Not enough memory for warning string!"}; /* For INL Server */ char *shiptype[NUM_TYPES] = {"SC", "DD", "CA", "BB", "AS", "SB", "??"}; int spwinside = 500; /* WINSIDE from Server */ #define SPWINSIDE 500 /* To make it safe */ LONG spgwidth = GWIDTH; void sendThreshold(short unsigned int v) { struct threshold_cpacket p; p.type = CP_S_THRS; p.thresh = v; sendServerPacket((struct player_spacket *) &p); } void handleVTorp(unsigned char *sbuf) { unsigned char *which, *data; unsigned char bitset; struct torp *thetorp; int dx, dy; int shiftvar; int i; register int shift = 0; /* How many torps are * * * * extracted (for shifting * ) */ /* now we must find the data ... :-) */ if (sbuf[0] == SP_S_8_TORP) { /* MAX packet */ bitset = 0xff; which = &sbuf[1]; data = &sbuf[2]; } else { /* Normal Packet */ bitset = sbuf[1]; which = &sbuf[2]; data = &sbuf[3]; } #ifdef CORRUPTED_PACKETS /* we probably should do something clever here - jmn */ #endif weaponUpdate = 1; thetorp = &torps[((unsigned char) *which * 8)]; for (shift = 0, i = 0; i < 8; i++, thetorp++, bitset >>= 1) { thetorp->t_updateFuse = MAX(2, TORP_UPDATE_FUSE * server_ups / 5); if (bitset & 01) { dx = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dx |= (shiftvar & 511); shift++; dy = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dy |= (shiftvar & 511); shift++; if (shift == 8) { shift = 0; data++; } /* This is necessary because TFREE/TMOVE is now encoded in the * * * bitset */ if (thetorp->t_status == TFREE) { thetorp->t_status = TMOVE; /* guess */ players[thetorp->t_owner].p_ntorp++; } else if (thetorp->t_owner == me->p_no && thetorp->t_status == TEXPLODE) { thetorp->t_status = TMOVE; /* guess */ } /* Check if torp is visible */ if (dx > SPWINSIDE || dy > SPWINSIDE) { thetorp->t_x = -100000; /* Not visible */ thetorp->t_y = -100000; } else { /* visible */ /* thetorp->t_x = me->p_x + ((dx - SPWINSIDE / 2) * SCALE); * * * thetorp->t_y = me->p_y + ((dy - SPWINSIDE / 2) * SCALE); */ thetorp->t_x = my_x + ((dx - SPWINSIDE / 2) * SCALE); thetorp->t_y = my_y + ((dy - SPWINSIDE / 2) * SCALE); #ifdef ROTATERACE if (rotate) { rotate_coord(&thetorp->t_x, &thetorp->t_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); } #endif } } /* if */ else { /* We got a TFREE */ if (thetorp->t_status && thetorp->t_status != TEXPLODE) { players[thetorp->t_owner].p_ntorp--; thetorp->t_status = TFREE; /* That's no guess */ } } } /* for */ } void handleSelfShort(struct youshort_spacket *packet) { struct player* pl; static int seen = 0; pl = &players[(int) packet->pnum]; if (seen && packet->pnum != me->p_no) become(pl); seen++; if (!F_many_self) { me = (ghoststart ? &players[ghost_pno] : pl); myship = &(me->p_ship); mystats = &(me->p_stats); } #ifdef PLIST2 if (pl->p_hostile != packet->hostile) { pl->p_hostile = packet->hostile; PlistNoteHostile(packet->pnum); } #else pl->p_hostile = packet->hostile; #endif pl->p_swar = packet->swar; pl->p_armies = packet->armies; pl->p_flags = ntohl(packet->flags); pl->p_whydead = packet->whydead; pl->p_whodead = packet->whodead; } void handleSelfShip(struct youss_spacket *packet) { struct player* pl; if (F_many_self) { pl = &players[(int) packet->pad1]; } else { if (!me) return; /* wait.. */ pl = me; if (F_self_8flags) me->p_flags = (me->p_flags & 0xffffff00) | (unsigned char) packet->pad1; else if (F_self_8flags2) { unsigned int new_flags = me->p_flags & ~(PFSHIELD | PFREPAIR | PFCLOAK | PFGREEN | PFYELLOW | PFRED | PFTRACT | PFPRESS); new_flags |= ((packet->pad1 & PFSHIELD) | (packet->pad1 & PFREPAIR) | ((packet->pad1 & (PFCLOAK << 2)) >> 2) | ((packet->pad1 & (PFGREEN << 7)) >> 7) | ((packet->pad1 & (PFYELLOW << 7)) >> 7) | ((packet->pad1 & (PFRED << 7)) >> 7) | ((packet->pad1 & (PFTRACT << 15)) >> 15) | ((packet->pad1 & (PFPRESS << 15)) >> 15)); me->p_flags = new_flags; } } pl->p_damage = ntohs(packet->damage); pl->p_shield = ntohs(packet->shield); pl->p_fuel = ntohs(packet->fuel); pl->p_etemp = ntohs(packet->etemp); pl->p_wtemp = ntohs(packet->wtemp); } void handleVPlayer(unsigned char *sbuf) { register int x, y, i, numofplayers, pl_no, save; register struct player *pl; numofplayers = (unsigned char) sbuf[1] & 0x3f; #ifdef CORRUPTED_PACKETS /* should do something clever here - jmn if(pl_no < 0 || pl_no >= * * * MAXPLAYER){ fprintf(stderr, "handleVPlayer: bad index %d\n", pl_no); * * * return; } */ #endif if (sbuf[1] & (unsigned char) 128) { /* Short Header + Extended */ sbuf += 4; for (i = 0; i < numofplayers; i++) { pl_no = ((unsigned char) *sbuf & 0x1f) + 32; if (pl_no >= MAXPLAYER) continue; /* a little error check */ save = (unsigned char) *sbuf; sbuf++; pl = &players[pl_no]; pl->p_speed = (unsigned char) *sbuf & 15; /* SPEED */ PlistNoteSpeed(pl_no); if (F_cloak_maxwarp && pl != me) { if (pl->p_speed == 0xf) pl->p_flags |= PFCLOAK; else if (pl->p_flags & PFCLOAK) pl->p_flags &= ~PFCLOAK; } Pdir[pl_no] = (unsigned char) *sbuf >> 4; /* DIR */ pl->p_dir = (unsigned char) Pdir[pl_no] * 16; /* real DIR */ sbuf++; x = (unsigned char) *sbuf++; y = (unsigned char) *sbuf++; /* The lower 8 Bits are * * * saved */ /* Now we must preprocess the coordinates */ if ((unsigned char) save & 64) x |= 256; if ((unsigned char) save & 128) y |= 256; #ifdef WARP_DEAD /* -10000 doesn't work for SP 501 is invisible needs server change * * * [007] */ if (F_dead_warp && pl->p_speed == 14 && x == 501 && y == 501 && (pl->p_status != PEXPLODE)) { pl->p_status = PEXPLODE; x = pl->p_x; y = pl->p_y; if (pl->p_dir > DEADPACKETS) pl->p_explode = EX_FRAMES; else pl->p_explode = 0; redrawPlayer[pl_no] = 1; PlistNoteUpdate(pl_no); } #endif /* Now test if it's galactic or local coord */ if (save & 32) { /* It's galactic */ if (x == 501 || y == 501) { Pgx[pl_no] = -500; Pgy[pl_no] = -500; } else { Pgx[pl_no] = x; Pgy[pl_no] = y; } Plx[pl_no] = -1; /* Not visible */ Ply[pl_no] = -1; redrawPlayer[pl->p_no] = 1; pl->p_x = Pgx[pl_no] * GWIDTH / SPWINSIDE; pl->p_y = Pgy[pl_no] * GWIDTH / SPWINSIDE; #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif } else { /* Local */ Plx[pl_no] = x; Ply[pl_no] = y; redrawPlayer[pl->p_no] = 1; pl->p_x = me->p_x + ((Plx[pl_no] - SPWINSIDE / 2) * SCALE); pl->p_y = me->p_y + ((Ply[pl_no] - SPWINSIDE / 2) * SCALE); Pgx[pl_no] = pl->p_x * SPWINSIDE / GWIDTH; Pgy[pl_no] = pl->p_y * SPWINSIDE / GWIDTH; pl->p_x = my_x + ((x - SPWINSIDE / 2) * SCALE); pl->p_y = my_y + ((y - SPWINSIDE / 2) * SCALE); #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif } } /* for */ } /* if */ else if (sbuf[1] & 64) { /* Short Header */ if (shortversion == SHORTVERSION) { /* flags S_P2 */ if (sbuf[2] == 2) { int *tmp = (int *) &sbuf[4]; new_flags(ntohl(*tmp), sbuf[3]); tmp++; new_flags(ntohl(*tmp), 0); sbuf += 8; } else if (sbuf[2] == 1) { int *tmp = (int *) &sbuf[4]; new_flags(ntohl(*tmp), sbuf[3]); sbuf += 4; } } sbuf += 4; for (i = 0; i < numofplayers; i++) { pl_no = ((unsigned char) *sbuf & 0x1f); if (pl_no >= MAXPLAYER) continue; save = (unsigned char) *sbuf; sbuf++; pl = &players[pl_no]; pl->p_speed = (unsigned char) *sbuf & 15; /* SPEED */ PlistNoteSpeed(pl_no); if (F_cloak_maxwarp && pl != me) { if (pl->p_speed == 0xf) pl->p_flags |= PFCLOAK; else if (pl->p_flags & PFCLOAK) pl->p_flags &= ~PFCLOAK; } Pdir[pl_no] = (unsigned char) *sbuf >> 4; /* DIR */ pl->p_dir = (unsigned char) Pdir[pl_no] * 16; /* real DIR */ sbuf++; x = (unsigned char) *sbuf++; y = (unsigned char) *sbuf++; /* The lower 8 Bits are * * * saved */ /* Now we must preprocess the coordinates */ if ((unsigned char) save & 64) x |= 256; if ((unsigned char) save & 128) y |= 256; #ifdef WARP_DEAD /* waiting for server change [007] */ if (F_dead_warp && pl->p_speed == 14 && x == 501 && y == 501 && (pl->p_status != PEXPLODE)) { pl->p_status = PEXPLODE; x = pl->p_x; y = pl->p_y; if (pl->p_dir > DEADPACKETS) pl->p_explode = EX_FRAMES; else pl->p_explode = 0; redrawPlayer[pl_no] = 1; PlistNoteUpdate(pl_no); } #endif /* Now test if it's galactic or local coord */ if (save & 32) { /* It's galactic */ if (x == 501 || y == 501) { Pgx[pl_no] = -500; Pgy[pl_no] = -500; } else { Pgx[pl_no] = x; Pgy[pl_no] = y; } Plx[pl_no] = -1; /* Not visible */ Ply[pl_no] = -1; redrawPlayer[pl->p_no] = 1; pl->p_x = Pgx[pl_no] * GWIDTH / SPWINSIDE; pl->p_y = Pgy[pl_no] * GWIDTH / SPWINSIDE; #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif } else { /* Local */ Plx[pl_no] = x; Ply[pl_no] = y; redrawPlayer[pl->p_no] = 1; pl->p_x = me->p_x + ((Plx[pl_no] - SPWINSIDE / 2) * SCALE); pl->p_y = me->p_y + ((Ply[pl_no] - SPWINSIDE / 2) * SCALE); Pgx[pl_no] = pl->p_x * SPWINSIDE / GWIDTH; Pgy[pl_no] = pl->p_y * SPWINSIDE / GWIDTH; pl->p_x = my_x + ((x - SPWINSIDE / 2) * SCALE); pl->p_y = my_y + ((y - SPWINSIDE / 2) * SCALE); #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif } } /* for */ } /* 2. if */ else { /* Big Packet */ struct player_s_spacket *packet = (struct player_s_spacket *) sbuf; pl = &players[me->p_no]; pl->p_dir = (unsigned char) packet->dir; Pdir[me->p_no] = (unsigned char) rosette(pl->p_dir); pl->p_speed = packet->speed; PlistNoteSpeed(me->p_no); if (F_cloak_maxwarp && pl != me) { if (pl->p_speed == 0xf) pl->p_flags |= PFCLOAK; else if (pl->p_flags & PFCLOAK) pl->p_flags &= ~PFCLOAK; } if (shortversion == SHORTVERSION) { /* S_P2 */ struct player_s2_spacket *pa2 = (struct player_s2_spacket *) sbuf; x = SCALE * (short) ntohs(pa2->x); y = SCALE * (short) ntohs(pa2->y); new_flags(ntohl(pa2->flags), 0); } else { /* OLDSHORTVERSION */ x = ntohl(packet->x); y = ntohl(packet->y); } #ifdef WARP_DEAD if (F_dead_warp && pl->p_speed == 14 && x == -10000 && y == -10000 && (pl->p_status != PEXPLODE)) { pl->p_status = PEXPLODE; x = pl->p_x; y = pl->p_y; if (pl->p_dir > DEADPACKETS) pl->p_explode = EX_FRAMES; else pl->p_explode = 0; redrawPlayer[me->p_no] = 1; PlistNoteUpdate(me->p_no); } #endif pl->p_x = my_x = x; pl->p_y = my_y = y; Plx[me->p_no] = TWINSIDE / 2; Ply[me->p_no] = TWINSIDE / 2; Pgx[me->p_no] = pl->p_x * GWINSIDE / GWIDTH; Pgy[me->p_no] = pl->p_y * GWINSIDE / GWIDTH; redrawPlayer[me->p_no] = 1; #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif if (sbuf[1] == 0) return; sbuf += 12; /* Now the small packets */ for (i = 0; i < numofplayers; i++) { pl_no = ((unsigned char) *sbuf & 0x1f); if (pl_no >= MAXPLAYER) continue; save = (unsigned char) *sbuf; sbuf++; pl = &players[pl_no]; pl->p_speed = (unsigned char) *sbuf & 15; /* SPEED */ PlistNoteSpeed(pl_no); if (F_cloak_maxwarp && pl != me) { if (pl->p_speed == 0xf) pl->p_flags |= PFCLOAK; else if (pl->p_flags & PFCLOAK) pl->p_flags &= ~PFCLOAK; } Pdir[pl_no] = (unsigned char) *sbuf >> 4; /* DIR */ pl->p_dir = (unsigned char) Pdir[pl_no] * 16; /* real DIR */ sbuf++; x = (unsigned char) *sbuf++; y = (unsigned char) *sbuf++; /* The lower 8 Bits are * * * saved */ /* Now we must preprocess the coordinates */ if ((unsigned char) save & 64) x |= 256; if ((unsigned char) save & 128) y |= 256; #ifdef WARP_DEAD if (F_dead_warp && pl->p_speed == 14 && x == 501 && y == 501 && (pl->p_status != PEXPLODE)) { pl->p_status = PEXPLODE; x = pl->p_x; y = pl->p_y; if (pl->p_dir > DEADPACKETS) pl->p_explode = EX_FRAMES; else pl->p_explode = 0; redrawPlayer[me->p_no] = 1; PlistNoteUpdate(me->p_no); } #endif /* Now test if it's galactic or local coord */ if (save & 32) { /* It's galactic */ if (x == 501 || y == 501) { Pgx[pl_no] = -500; Pgy[pl_no] = -500; } else { Pgx[pl_no] = x; Pgy[pl_no] = y; } Plx[pl_no] = -1; /* Not visible */ Ply[pl_no] = -1; redrawPlayer[pl->p_no] = 1; pl->p_x = Pgx[pl_no] * GWIDTH / SPWINSIDE; pl->p_y = Pgy[pl_no] * GWIDTH / SPWINSIDE; #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif } else { /* Local */ Plx[pl_no] = x; Ply[pl_no] = y; redrawPlayer[pl->p_no] = 1; pl->p_x = me->p_x + ((Plx[pl_no] - SPWINSIDE / 2) * SCALE); pl->p_y = me->p_y + ((Ply[pl_no] - SPWINSIDE / 2) * SCALE); Pgx[pl_no] = pl->p_x * SPWINSIDE / GWIDTH; Pgy[pl_no] = pl->p_y * SPWINSIDE / GWIDTH; pl->p_x = my_x + (x - SPWINSIDE / 2) * SCALE; pl->p_y = my_y + (y - SPWINSIDE / 2) * SCALE; #ifdef ROTATERACE if (rotate) { rotate_coord(&pl->p_x, &pl->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&pl->p_dir, rotate_deg); } #endif } } /* for */ } } void handleSMessage(struct mesg_s_spacket *packet) { char buf[100]; char addrbuf[9]; if (debug) printf("Length of Message is: %zd total Size %d \n", strlen(&packet->mesg), (int) packet->length); if (packet->m_from >= MAXPLAYER) packet->m_from = 255; if (packet->m_from == 255) strcpy(addrbuf, "GOD->"); else { sprintf(addrbuf, " %c%c->", teamlet[players[packet->m_from].p_team], shipnos[players[packet->m_from].p_no]); } switch (packet->m_flags & (MTEAM | MINDIV | MALL)) { case MALL: sprintf(addrbuf + 5, "ALL"); break; case MTEAM: sprintf(addrbuf + 5, "%s", teamshort[me->p_team]); break; case MINDIV: /* I know that it's me -> xxx but i copied it straight ... */ sprintf(addrbuf + 5, "%c%c ", teamlet[players[packet->m_recpt].p_team], shipnos[packet->m_recpt]); break; default: sprintf(addrbuf + 5, "ALL"); break; } sprintf(buf, "%-9s%s", addrbuf, &packet->mesg); dmessage(buf, packet->m_flags, packet->m_from, packet->m_recpt); } void handleShortReply(struct shortreply_spacket *packet) { switch (packet->repl) { case SPK_VOFF: /* S_P2 */ if (shortversion == SHORTVERSION && recv_short == 0) { /* retry for S_P 1 */ printf("Using Short Packet Version 1.\n"); shortversion = OLDSHORTVERSION; sendShortReq(SPK_VON); } else { recv_short = 0; sprefresh(SPK_VFIELD); /* * Get a `=' style update to fix the kills shown on the playerlist * when you first enter the game. It is more than likely that we * were waiting for short packets so that a `-' update could be * used instead. */ sendUdpReq(COMM_UPDATE); } break; case SPK_VON: recv_short = 1; sprefresh(SPK_VFIELD); spwinside = ntohs(packet->winside); spgwidth = ntohl(packet->gwidth); /* * Get a `-' style update to fix the kills shown on the playerlist * when you first enter and to fix other loss if short packets * have just been turned back on. */ sendShortReq(SPK_SALL); break; case SPK_MOFF: recv_mesg = 0; sprefresh(SPK_MFIELD); W_SetSensitive(reviewWin, 0); break; case SPK_MON: recv_mesg = 1; sprefresh(SPK_MFIELD); W_SetSensitive(reviewWin, 1); break; case SPK_M_KILLS: recv_kmesg = 1; sprefresh(SPK_KFIELD); break; case SPK_M_NOKILLS: recv_kmesg = 0; sprefresh(SPK_KFIELD); break; case SPK_M_WARN: recv_warn = 1; sprefresh(SPK_WFIELD); break; case SPK_M_NOWARN: recv_warn = 0; sprefresh(SPK_WFIELD); break; case SPK_THRESHOLD: break; default: fprintf(stderr, "%s: unknown response packet value short-req: %d\n", "netrek", packet->repl); } } void handleVTorpInfo(unsigned char *sbuf) { unsigned char *bitset, *which, *data, *infobitset, *infodata; struct torp *thetorp; int dx, dy; int shiftvar; char status, war; register int i; register int shift = 0; /* How many torps are * * * * extracted (for shifting * ) */ /* now we must find the data ... :-) */ bitset = &sbuf[1]; which = &sbuf[2]; infobitset = &sbuf[3]; /* Where is the data ? */ data = &sbuf[4]; infodata = &sbuf[vtisize[numofbits[(unsigned char) sbuf[1]]]]; weaponUpdate = 1; thetorp = &torps[((unsigned char) *which * 8)]; for (shift = 0, i = 0; i < 8; thetorp++, *bitset >>= 1, *infobitset >>= 1, i++) { thetorp->t_updateFuse = MAX(2, TORP_UPDATE_FUSE * server_ups / 5); if (*bitset & 01) { dx = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dx |= (shiftvar & 511); shift++; dy = (*data >> shift); data++; shiftvar = (unsigned char) *data; /* to silence gcc */ shiftvar <<= (8 - shift); dy |= (shiftvar & 511); shift++; if (shift == 8) { shift = 0; data++; } /* Check for torp with no TorpInfo */ if (!(*infobitset & 01)) { if (thetorp->t_status == TFREE) { thetorp->t_status = TMOVE; /* guess */ players[thetorp->t_owner].p_ntorp++; } else if (thetorp->t_owner == me->p_no && thetorp->t_status == TEXPLODE) { /* If TFREE got lost */ thetorp->t_status = TMOVE; /* guess */ } } /* Check if torp is visible */ if (dx > SPWINSIDE || dy > SPWINSIDE) { thetorp->t_x = -100000; /* Not visible */ thetorp->t_y = -100000; } else { /* visible */ /* thetorp->t_x = me->p_x + ((dx - SPWINSIDE / 2) * SCALE); * * * thetorp->t_y = me->p_y + ((dy - SPWINSIDE / 2) * SCALE); */ thetorp->t_x = my_x + ((dx - SPWINSIDE / 2) * SCALE); thetorp->t_y = my_y + ((dy - SPWINSIDE / 2) * SCALE); #ifdef ROTATERACE if (rotate) { rotate_coord(&thetorp->t_x, &thetorp->t_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); } #endif } } /* if */ else { /* Got a TFREE ? */ if (!(*infobitset & 01)) { /* No other TorpInfo for * * * this Torp */ if (thetorp->t_status && thetorp->t_status != TEXPLODE) { players[thetorp->t_owner].p_ntorp--; thetorp->t_status = TFREE; /* That's no guess */ } } } /* Now the TorpInfo */ if (*infobitset & 01) { war = (unsigned char) *infodata & 15 /* 0x0f */ ; status = ((unsigned char) *infodata & 0xf0) >> 4; infodata++; if (status == TEXPLODE && thetorp->t_status == TFREE) { /* FAT: redundant explosion; don't update p_ntorp */ continue; } if (thetorp->t_status == TFREE && status) { players[thetorp->t_owner].p_ntorp++; } if (thetorp->t_status && status == TFREE) { players[thetorp->t_owner].p_ntorp--; } thetorp->t_war = war; if (status != thetorp->t_status) { /* FAT: prevent explosion reset */ thetorp->t_status = status; if (thetorp->t_status == TEXPLODE) { thetorp->t_fuse = NUMDETFRAMES * server_ups / 5; } } } /* if */ } /* for */ } void handleVPlanet(unsigned char *sbuf) { register int i; register int numofplanets; /* How many Planets are in * * * * * the packet */ struct planet *plan; struct planet_s_spacket *packet = (struct planet_s_spacket *) &sbuf[2]; #ifdef ATM /* FAT: prevent excessive redraw */ int redraw = 0; #endif /* ATM */ numofplanets = (unsigned char) sbuf[1]; if (numofplanets > MAXPLANETS + 1) return; for (i = 0; i < numofplanets; i++, packet++) { if (packet->pnum >= MAXPLANETS) continue; plan = &planets[(unsigned char) packet->pnum]; #ifdef ATM if (plan->pl_owner != packet->owner) redraw = 1; #endif /* ATM */ plan->pl_owner = packet->owner; #ifdef TSH if (plan->pl_owner < FED || plan->pl_owner > ORI) plan->pl_owner = NOBODY; #endif /* TSH */ #ifdef ATM if (plan->pl_info != packet->info) redraw = 1; #endif /* ATM */ plan->pl_info = packet->info; /* Redraw the planet because it was updated by server */ #ifdef ATM if (plan->pl_flags != (int) ntohs(packet->flags)) redraw = 1; plan->pl_flags = (int) ntohs(packet->flags); #else plan->pl_flags = (int) ntohs(packet->flags) | PLREDRAW; #endif /* ATM */ #ifdef ATM if (plan->pl_armies != (unsigned char) packet->armies) { #ifdef EM /* don't redraw when armies change unless it crosses the '4' * army * * * limit. Keeps people from watching for planet 'flicker' * when * * * players are beaming */ int planetarmies = (unsigned char) packet->armies; if ((plan->pl_armies < 5 && planetarmies > 4) || (plan->pl_armies > 4 && planetarmies < 5)) #endif redraw = 1; } #endif /* ATM */ plan->pl_armies = (unsigned char) packet->armies; #ifndef RECORDGAME if (plan->pl_info == 0) { plan->pl_owner = NOBODY; } #endif #ifdef ATM if (redraw) plan->pl_flags |= PLREDRAW; #endif /* ATM */ if (gather_stats) { /*STATS_SP_S_PLANET:\tPNUM\tPL_OWNER\tINFO\tARMIES\tFLAGS*/ fprintf(statsFile, "\nSTATS_SP_S_PLANET:\t"); fprintf(statsFile, "%d\t%d\t%d\t%d\t%d", packet->pnum, packet->owner, packet->info, packet->armies, ntohs(packet->flags)); } } /* FOR */ } void resetWeaponInfo(void) /* * Give all weapons for all ships the status of not being active. */ { register int i; for (i = 0; i < MAXPLAYER * MAXTORP; i++) torps[i].t_status = TFREE; for (i = 0; i < MAXPLAYER * MAXPLASMA; i++) plasmatorps[i].pt_status = PTFREE; for (i = 0; i < MAXPLAYER; i++) { players[i].p_ntorp = 0; players[i].p_nplasmatorp = 0; phasers[i].ph_status = PHFREE; } } void sendShortReq(char state) { struct shortreq_cpacket shortReq; bzero(&shortReq, sizeof(shortReq)); shortReq.type = CP_S_REQ; shortReq.req = state; shortReq.version = shortversion; /* need a var now because 2 * * * S_P versions exist * S_P2 */ switch (state) { case SPK_VON: warning("Sending short packet request"); break; case SPK_VOFF: warning("Sending old packet request"); break; default: break; } if ((state == SPK_SALL || state == SPK_ALL) && recv_short) { /* Let the client do the work, and not the network :-) */ resetWeaponInfo(); if (state == SPK_SALL) warning("Sent request for small update (weapons+planets+kills)"); else if (state == SPK_ALL) warning("Sent request for medium update (all except stats)"); else warning("Sent some unknown request..."); } sendServerPacket((struct shortreq_cpacket *) &shortReq); } char *whydeadmess[] = {"", "[quit]", "[photon]", "[phaser]", "[planet]", "[explosion]", "[daemon]", "[winner]", "[ghostbust]", "[genocide]", "[hacker]", "[plasma]", "[tournend]", "[gameover]", "[gamestart]", "[bad binary]", "[detted photon]", "[chain explosion]", "[zapped plasma]", "", "[team det]", "[team explosion]"}; void handleSWarning(struct warning_s_spacket *packet) { char buf[80]; register struct player *target; register int damage; static int arg3, arg4; /* Here are the arguments * * * * for warnings with more * * * than 2 arguments */ static int karg3, karg4, karg5 = 0; #ifdef RCM struct distress dist; #else char killmess[20]; #endif switch (packet->whichmessage) { case TEXTE: /* damage used as tmp var */ damage = (unsigned char) packet->argument; damage |= (unsigned char) packet->argument2 << 8; #ifdef PHASER_STATS if (damage == 38) /* Plasma hit */ { phaserStatTry++; phaserStatHit++; } if (damage == 37) /* Miss */ phaserStatTry++; if ((damage == 37) && phaserShowStats) { /* Mung the message */ char phstatmsg[30]; sprintf(phstatmsg, "%s [%d%%]", w_texts[damage], phaserStatTry ? (phaserStatHit * 100) / phaserStatTry : 0); /* Divide by zero sucks */ warning(phstatmsg); } else #endif if (damage >= 0 && damage < NUMWTEXTS) warning(w_texts[damage]); break; case PHASER_HIT_TEXT: target = &players[(unsigned char) packet->argument & 0x3f]; damage = (unsigned char) packet->argument2; if ((unsigned char) packet->argument & 64) damage |= 256; if ((unsigned char) packet->argument & 128) damage |= 512; #ifdef PHASER_STATS phaserStatTry++; phaserStatHit++; #endif (void) sprintf(buf, "Phaser burst hit %s for %d points", target->p_name, damage); warning(buf); break; case BOMB_INEFFECTIVE: sprintf(buf, "Weapons Officer: Bombing is ineffective. Only %d armies are defending.", (int) packet->argument); /* nifty info feature * * * 2/14/92 TMC */ warning(buf); break; case BOMB_TEXT: sprintf(buf, "Weapons Officer: Bombarding %s... Sensors read %d armies left.", planets[(unsigned char) packet->argument].pl_name, (unsigned char) packet->argument2); warning(buf); break; case BEAMUP_TEXT: sprintf(buf, "%s: Too few armies to beam up", planets[(unsigned char) packet->argument].pl_name); warning(buf); break; case BEAMUP2_TEXT: sprintf(buf, "Beaming up. (%d/%d)", (unsigned char) packet->argument, (unsigned char) packet->argument2); warning(buf); break; case BEAMUPSTARBASE_TEXT: sprintf(buf, "Starbase %s: Too few armies to beam up", players[(unsigned char) packet->argument].p_name); warning(buf); break; case BEAMDOWNSTARBASE_TEXT: sprintf(buf, "No more armies to beam down to Starbase %s.", players[(unsigned char) packet->argument].p_name); warning(buf); break; case BEAMDOWNPLANET_TEXT: sprintf(buf, "No more armies to beam down to %s.", planets[(unsigned char) packet->argument].pl_name); warning(buf); break; case SBREPORT: sprintf(buf, "Transporter Room: Starbase %s reports all troop bunkers are full!", players[(unsigned char) packet->argument].p_name); warning(buf); break; case ONEARG_TEXT: if (packet->argument < NUMVARITEXTS) { sprintf(buf, vari_texts[(unsigned char) packet->argument], (unsigned char) packet->argument2); warning(buf); } break; case BEAM_D_PLANET_TEXT: sprintf(buf, "Beaming down. (%d/%d) %s has %d armies left", arg3, arg4, planets[(unsigned char) packet->argument].pl_name, packet->argument2); warning(buf); break; case ARGUMENTS: arg3 = (unsigned char) packet->argument; arg4 = (unsigned char) packet->argument2; break; case BEAM_U_TEXT: sprintf(buf, "Transferring ground units. (%d/%d) Starbase %s has %d armies left", (unsigned char) arg3, (unsigned char) arg4, players[(unsigned char) packet->argument].p_name, (unsigned char) packet->argument2); warning(buf); break; case LOCKPLANET_TEXT: sprintf(buf, "Locking onto %s", planets[(unsigned char) packet->argument].pl_name); warning(buf); break; case SBRANK_TEXT: sprintf(buf, "You need a rank of %s or higher to command a starbase!", ranks[(unsigned char) packet->argument].name); warning(buf); break; case SBDOCKREFUSE_TEXT: sprintf(buf, "Starbase %s refusing us docking permission captain.", players[(unsigned char) packet->argument].p_name); warning(buf); break; case SBDOCKDENIED_TEXT: sprintf(buf, "Starbase %s: Permission to dock denied, all ports currently occupied.", players[(unsigned char) packet->argument].p_name); warning(buf); break; case SBLOCKSTRANGER: sprintf(buf, "Locking onto %s (%c%c)", players[(unsigned char) packet->argument].p_name, teamlet[players[(unsigned char) packet->argument].p_team], shipnos[players[(unsigned char) packet->argument].p_no]); warning(buf); break; case SBLOCKMYTEAM: sprintf(buf, "Locking onto %s (%c%c) (docking is %s)", players[(unsigned char) packet->argument].p_name, teamlet[players[(unsigned char) packet->argument].p_team], shipnos[players[(unsigned char) packet->argument].p_no], (players[(unsigned char) packet->argument].p_flags & PFDOCKOK) ? "enabled" : "disabled"); warning(buf); break; case DMKILL: #ifdef RCM case INLDMKILL: #endif { struct mesg_spacket msg; unsigned char killer, victim, armies; #ifndef RCM float kills; #endif victim = (unsigned char) packet->argument & 0x3f; killer = (unsigned char) packet->argument2 & 0x3f; /* that's only a temp */ damage = (unsigned char) karg3; damage |= (karg4 & 127) << 8; #ifndef RCM kills = damage / 100.0; if (kills == 0.0) strcpy(killmess, "NO CREDIT"); else sprintf(killmess, "%0.2f", kills); #endif armies = (((unsigned char) packet->argument >> 6) | ((unsigned char) packet->argument2 & 192) >> 4); if (karg4 & 128) armies |= 16; #ifdef RCM dist.distype = rcm; dist.sender = victim; dist.tclose_j = killer; dist.arms = armies; dist.dam = damage / 100; dist.shld = damage % 100; dist.wtmp = karg5; makedistress(&dist, msg.mesg, rcm_msg[1].macro); msg.m_flags = MALL | MVALID | MKILL; #else if (armies == 0) { (void) sprintf(msg.mesg, "GOD->ALL %s (%c%c) was kill %s for %s (%c%c)", players[victim].p_name, teamlet[players[victim].p_team], shipnos[victim], killmess, players[killer].p_name, teamlet[players[killer].p_team], shipnos[killer]); msg.m_flags = MALL | MVALID | MKILL; } else { (void) sprintf(msg.mesg, "GOD->ALL %s (%c%c+%d armies) was kill %s for %s (%c%c)", players[victim].p_name, teamlet[players[victim].p_team], shipnos[victim], armies, killmess, players[killer].p_name, teamlet[players[killer].p_team], shipnos[killer]); msg.m_flags = MALL | MVALID | MKILLA; } if (why_dead) { dist->wtmp = karg5 add_whydead(msg.mesg, karg5); karg5 = 0; } #endif msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; case KILLARGS: karg3 = (unsigned char) packet->argument; karg4 = (unsigned char) packet->argument2; break; case KILLARGS2: karg5 = (unsigned char) packet->argument; break; case DMKILLP: #ifdef RCM case INLDMKILLP: #endif { struct mesg_spacket msg; #ifdef RCM dist.distype = rcm; dist.sender = packet->argument; dist.tclose_j = packet->argument; dist.arms = '\0'; dist.dam = '\0'; dist.shld = '\0'; dist.tclose_pl = packet->argument2; dist.wtmp = karg5; makedistress(&dist, msg.mesg, rcm_msg[2].macro); #else (void) sprintf(msg.mesg, "GOD->ALL %s (%c%c) killed by %s (%c)", players[packet->argument].p_name, teamlet[players[packet->argument].p_team], shipnos[packet->argument], planets[(unsigned char) packet->argument2].pl_name, teamlet[planets[(unsigned char) packet->argument2].pl_owner]); if (why_dead) { add_whydead(msg.mesg, karg5); karg5 = 0; } #endif msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_flags = MALL | MVALID | MKILLP; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; case DMBOMB: { struct mesg_spacket msg; #ifdef RCM dist.distype = rcm; dist.sender = packet->argument; dist.tclose_j = packet->argument; dist.arms = '\0'; dist.dam = arg3; dist.shld = '\0'; dist.tclose_pl = packet->argument2; dist.wtmp = karg5; makedistress(&dist, msg.mesg, rcm_msg[3].macro); #else char buf1[80]; (void) sprintf(buf, "%-3s->%-3s", planets[(unsigned char) packet->argument2].pl_name, teamshort[planets[(unsigned char) packet->argument2].pl_owner]); (void) sprintf(buf1, "We are being attacked by %s %c%c who is %d%% damaged.", players[packet->argument].p_name, teamlet[players[packet->argument].p_team], shipnos[packet->argument], arg3); (void) sprintf(msg.mesg, "%s %s", buf, buf1); #endif msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_flags = MTEAM | MBOMB | MVALID; msg.m_recpt = planets[(unsigned char) packet->argument2].pl_owner; msg.m_from = 255; handleMessage(&msg); } break; case DMDEST: { struct mesg_spacket msg; #ifdef RCM dist.distype = rcm; dist.sender = packet->argument2; dist.tclose_j = packet->argument2; dist.arms = '\0'; dist.dam = '\0'; dist.shld = '\0'; dist.tclose_pl = packet->argument; dist.wtmp = karg5; makedistress(&dist, msg.mesg, rcm_msg[4].macro); #else char buf1[80]; (void) sprintf(buf, "%s destroyed by %s (%c%c)", planets[(unsigned char) packet->argument].pl_name, players[packet->argument2].p_name, teamlet[players[packet->argument2].p_team], shipnos[(unsigned char) packet->argument2]); (void) sprintf(buf1, "%-3s->%-3s", planets[(unsigned char) packet->argument].pl_name, teamshort[planets[(unsigned char) packet->argument].pl_owner]); (void) sprintf(msg.mesg, "%s %s", buf1, buf); #endif msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_flags = MTEAM | MDEST | MVALID; msg.m_recpt = planets[(unsigned char) packet->argument].pl_owner; msg.m_from = 255; handleMessage(&msg); } break; case DMTAKE: { struct mesg_spacket msg; #ifdef RCM dist.distype = rcm; dist.sender = packet->argument2; dist.tclose_j = packet->argument2; dist.arms = '\0'; dist.dam = '\0'; dist.shld = '\0'; dist.tclose_pl = packet->argument; dist.wtmp = karg5; makedistress(&dist, msg.mesg, rcm_msg[5].macro); #else char buf1[80]; (void) sprintf(buf, "%s taken over by %s (%c%c)", planets[(unsigned char) packet->argument].pl_name, players[packet->argument2].p_name, teamlet[players[packet->argument2].p_team], shipnos[packet->argument2]); (void) sprintf(buf1, "%-3s->%-3s", planets[(unsigned char) packet->argument].pl_name, teamshort[players[packet->argument2].p_team]); (void) sprintf(msg.mesg, "%s %s", buf1, buf); #endif msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_flags = MTEAM | MTAKE | MVALID; msg.m_recpt = players[(unsigned char) packet->argument2].p_team; msg.m_from = 255; handleMessage(&msg); } break; case DGHOSTKILL: { struct mesg_spacket msg; unsigned short damage; damage = (unsigned char) karg3; damage |= (unsigned char) (karg4 & 0xff) << 8; #ifdef RCM dist.distype = rcm; dist.sender = packet->argument; dist.tclose_j = packet->argument; dist.arms = '\0'; dist.dam = damage / 100; dist.shld = damage % 100; dist.wtmp = karg5; makedistress(&dist, msg.mesg, rcm_msg[6].macro); #else (void) sprintf(msg.mesg, "GOD->ALL %s (%c%c) was kill %0.2f for the GhostBusters", players[(unsigned char) packet->argument].p_name, teamlet[players[(unsigned char) packet->argument].p_team], shipnos[(unsigned char) packet->argument], (float) damage / 100.0); #endif msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_flags = MALL | MVALID; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; /* INL Daemon Mesages */ #ifndef RCM case INLDMKILLP: { struct mesg_spacket msg; sprintf(buf, ""); if (arg3) { /* Armies */ sprintf(buf, "+%d", arg3); } (void) sprintf(msg.mesg, "GOD->ALL %s(%s) (%c%c%s) killed by %s (%c)", players[(unsigned char) packet->argument].p_name, shiptype[players[(unsigned char) packet->argument].p_ship.s_type], teamlet[players[(unsigned char) packet->argument].p_team], shipnos[(unsigned char) packet->argument], buf, planets[(unsigned char) packet->argument2].pl_name, teamlet[planets[(unsigned char) packet->argument2].pl_owner]); if (why_dead) { add_whydead(msg.mesg, karg5); karg5 = 0; } msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_flags = MALL | MVALID | MKILLP; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; case INLDMKILL: { struct mesg_spacket msg; int killer, victim, armies; float kills; victim = (unsigned char) packet->argument & 0x3f; killer = (unsigned char) packet->argument2 & 0x3f; /* that's only a temp */ damage = (unsigned char) karg3; damage |= (karg4 & 127) << 8; kills = damage / 100.0; armies = (((unsigned char) packet->argument >> 6) | ((unsigned char) packet->argument2 & 192) >> 4); if (karg4 & 128) armies |= 16; if (armies == 0) { (void) sprintf(msg.mesg, "GOD->ALL %s(%s) (%c%c) was kill %0.2f for %s(%s) (%c%c)", players[victim].p_name, shiptype[players[victim].p_ship.s_type], teamlet[players[victim].p_team], shipnos[victim], kills, players[killer].p_name, shiptype[players[killer].p_ship.s_type], teamlet[players[killer].p_team], shipnos[killer]); msg.m_flags = MALL | MVALID | MKILL; } else { (void) sprintf(msg.mesg, "GOD->ALL %s(%s) (%c%c+%d armies) was kill %0.2f for %s(%s) (%c%c)", players[victim].p_name, shiptype[players[victim].p_ship.s_type], teamlet[players[victim].p_team], shipnos[victim], armies, kills, players[killer].p_name, shiptype[players[killer].p_ship.s_type], teamlet[players[killer].p_team], shipnos[killer]); msg.m_flags = MALL | MVALID | MKILLA; } if (why_dead) { add_whydead(msg.mesg, karg5); karg5 = 0; } msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; #endif case INLDRESUME: { struct mesg_spacket msg; sprintf(msg.mesg, " Game will resume in %d seconds", (unsigned char) packet->argument); msg.m_flags = MALL | MVALID; msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; case INLDTEXTE: if ((unsigned char) packet->argument < NUMDAEMONTEXTS) { struct mesg_spacket msg; strcpy(msg.mesg, daemon_texts[(unsigned char) packet->argument]); msg.m_flags = MALL | MVALID; msg.type = SP_MESSAGE; msg.mesg[79] = '\0'; msg.m_recpt = 0; msg.m_from = 255; handleMessage(&msg); } break; case STEXTE: warning(s_texte[(unsigned char) packet->argument]); break; case SHORT_WARNING: { struct warning_spacket *warn = (struct warning_spacket *) packet; warning(warn->mesg); } break; case STEXTE_STRING: { struct warning_spacket *warn = (struct warning_spacket *) packet; warning(warn->mesg); s_texte[(unsigned char) warn->pad2] = (char *) malloc(warn->pad3 - 4); if (s_texte[(unsigned char) warn->pad2] == NULL) { s_texte[(unsigned char) warn->pad2] = no_memory; warning("Could not add warning! (No memory!)"); } else strcpy(s_texte[(unsigned char) warn->pad2], warn->mesg); } break; default: warning("Unknown Short Warning!"); break; } } #define MY_SIZEOF(a) (sizeof(a) / sizeof(*(a))) void add_whydead(char *s, int m) /* 7/22/93 LAB */ { char b[256]; if (m < MY_SIZEOF(whydeadmess)) { sprintf(b, "%-50s %s", s, whydeadmess[m]); b[79] = '\0'; strcpy(s, b); } } /* S_P2 */ void handleVKills(sbuf) unsigned char *sbuf; { register int i, numofkills, pnum; register unsigned short pkills; register unsigned char *data = &sbuf[2]; numofkills = (unsigned char) sbuf[1]; for (i = 0; i < numofkills; i++) { pkills = (unsigned short) *data++; pkills |= (unsigned short) ((*data & 0x03) << 8); pnum = (unsigned char) *data++ >> 2; #ifdef CORRUPTED_PACKETS if (pnum < 0 || pnum >= MAXPLAYER) { fprintf(stderr, "handleKills: bad index %d\n", pnum); return; } #endif if (players[pnum].p_kills != ((float) pkills / 100.0)) { players[pnum].p_kills = pkills / 100.0; /* FAT: prevent redundant player update */ PlistNoteUpdate(pnum); #ifdef ARMY_SLIDER if (me == &players[(int) pnum]) { calibrate_stats(); redrawStats(); } #endif /* ARMY_SLIDER */ } } /* for */ } /* handleVKills */ void handleVPhaser(sbuf) unsigned char *sbuf; { struct phaser *phas; struct phaser_s_spacket *packet = (struct phaser_s_spacket *) &sbuf[0]; /* not nice but.. */ register int pnum, status, target = 0, x = 0, y = 0, dir = 0; status = packet->status & 0x0f; pnum = packet->pnum & 0x3f; weaponUpdate = 1; switch (status) { case PHFREE: break; case PHHIT: target = (unsigned char) packet->target & 0x3f; break; case PHMISS: dir = (unsigned char) packet->target; break; case PHHIT2: x = SCALE * (ntohs(packet->x)); y = SCALE * (ntohs(packet->y)); target = packet->target & 0x3f; break; default: x = SCALE * (ntohs(packet->x)); y = SCALE * (ntohs(packet->y)); target = packet->target & 0x3f; dir = (unsigned char) packet->dir; break; } phas = &phasers[pnum]; phas->ph_status = status; phas->ph_dir = dir; phas->ph_x = x; phas->ph_y = y; phas->ph_target = target; phas->ph_fuse = 0; #ifdef SOUND phas->sound_phaser = 1; #endif phas->ph_updateFuse = PHASER_UPDATE_FUSE * server_ups / 10; #ifdef ROTATERACE if (rotate) { rotate_coord(&phas->ph_x, &phas->ph_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&phas->ph_dir, rotate_deg); } #endif } void handle_s_Stats(packet) struct stats_s_spacket *packet; { register struct player *pl; #ifdef CORRUPTED_PACKETS if (packet->pnum < 0 || packet->pnum >= MAXPLAYER) { fprintf(stderr, "handleStats: bad index %d\n", packet->pnum); return; } #endif pl = &players[(unsigned char) packet->pnum]; pl->p_stats.st_tkills = ntohs(packet->tkills); pl->p_stats.st_tlosses = ntohs(packet->tlosses); pl->p_stats.st_kills = ntohs(packet->kills); pl->p_stats.st_losses = ntohs(packet->losses); pl->p_stats.st_tticks = ntohl(packet->tticks); pl->p_stats.st_tplanets = ntohs(packet->tplanets); pl->p_stats.st_tarmsbomb = ntohl(packet->tarmies); pl->p_stats.st_sbkills = ntohs(packet->sbkills); pl->p_stats.st_sblosses = ntohs(packet->sblosses); pl->p_stats.st_armsbomb = ntohs(packet->armies); pl->p_stats.st_planets = ntohs(packet->planets); if ((pl->p_ship.s_type == STARBASE) && (SBhours)) { pl->p_stats.st_sbticks = ntohl(packet->maxkills); } else { pl->p_stats.st_maxkills = ntohl(packet->maxkills) / 100.0; } pl->p_stats.st_sbmaxkills = ntohl(packet->sbmaxkills) / 100.0; PlistNoteUpdate((unsigned char) packet->pnum); } void new_flags(unsigned int data, int which) { register int pnum, status; register unsigned int new, tmp; unsigned int oldflags; struct player *j; tmp = data; for (pnum = which * 16; pnum < (which + 1) * 16 && pnum < MAXPLAYER; pnum++) { new = tmp & 0x03; tmp >>= 2; j = &players[pnum]; oldflags = j->p_flags; switch (new) { case 0: /* PDEAD/PEXPLODE */ status = PEXPLODE; j->p_flags &= ~PFCLOAK; break; case 1: /* PALIVE & PFCLOAK */ status = PALIVE; j->p_flags |= PFCLOAK; break; case 2: /* PALIVE & PFSHIELD */ status = PALIVE; j->p_flags |= PFSHIELD; j->p_flags &= ~PFCLOAK; break; case 3: /* PALIVE & NO shields */ status = PALIVE; j->p_flags &= ~(PFSHIELD | PFCLOAK); break; default: break; } if (oldflags != j->p_flags) redrawPlayer[pnum] = 1; if (j->p_status == status) continue; if (status == PEXPLODE) { if (j->p_status == PALIVE) { j->p_explode = 0; j->p_status = status; } else /* Do nothing */ continue; } else { /* really PALIVE ? */ if (j == me) { /* Wait for POUTFIT */ if (j->p_status == POUTFIT || j->p_status == PFREE) { if (j->p_status != PFREE) j->p_kills = 0.; else PlistNoteArrive(pnum); j->p_status = PALIVE; } } else { if (j->p_status != PFREE) j->p_kills = 0.; else PlistNoteArrive(pnum); j->p_status = status; } } redrawPlayer[pnum] = 1; PlistNoteUpdate(pnum); } /* for */ } #endif /* END SHORT_PACKETS */ netrek-client-cow-3.3.2/bitmaps.h0000664000175000017500000077601113657750470015675 0ustar jamesjames #ifndef VIEWS #define VIEWS 16 #endif #ifdef BEEPLITE #include "litebitmaps.h" #endif #define fed_scout_width 20 #define fed_scout_height 20 static char fed_scout_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x80, 0xfb, 0x00, 0xe0, 0x70, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x03, 0xf8, 0xff, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xe0, 0x70, 0x00, 0x80, 0xfb, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0xe0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xe0, 0x70, 0x00, 0xf0, 0x1d, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0xff, 0x01, 0xfc, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf0, 0x1d, 0x00, 0xe0, 0x70, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define kli_scout_width 20 #define kli_scout_height 20 static char kli_scout_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x08, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x07, 0x00, 0x80, 0x07, 0x00, 0x40, 0x02, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe1, 0x01, 0xc0, 0xf7, 0x01, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0x18, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x83, 0x00, 0xc0, 0xe3, 0x01, 0xfc, 0xff, 0x01, 0xc0, 0xe3, 0x01, 0xc0, 0x83, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x18, 0x07, 0x00, 0xe0, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0xf7, 0x01, 0x00, 0xe1, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x02, 0x00, 0x80, 0x07, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xc7, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x7c, 0x1f, 0x00, 0x3c, 0x04, 0x00, 0x1c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x08, 0x1e, 0x00, 0x3c, 0x1e, 0x00, 0xfc, 0xff, 0x01, 0x3c, 0x1e, 0x00, 0x08, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x04, 0x00, 0x7c, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x12, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define rom_scout_width 20 #define rom_scout_height 20 static char rom_scout_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x20, 0x20, 0x00, 0x20, 0x20, 0x00, 0x20, 0x22, 0x00, 0x30, 0x67, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0x30, 0x67, 0x00, 0x20, 0x20, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x60, 0x40, 0x00, 0x60, 0x46, 0x00, 0xf0, 0x27, 0x00, 0xb0, 0x27, 0x00, 0x90, 0x3f, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf0, 0x43, 0x00, 0xc8, 0x23, 0x00, 0xc0, 0x13, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x63, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xf0, 0x3f, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0xf0, 0x3f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x63, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x07, 0x00, 0xd0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x13, 0x00, 0xc8, 0x23, 0x00, 0xf0, 0x43, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x3b, 0x00, 0x90, 0x3f, 0x00, 0xb0, 0x27, 0x00, 0xf0, 0x27, 0x00, 0x60, 0x46, 0x00, 0x60, 0x40, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x20, 0x20, 0x00, 0x30, 0x67, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0x30, 0x67, 0x00, 0x20, 0x22, 0x00, 0x20, 0x20, 0x00, 0x20, 0x20, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x06, 0x00, 0xe0, 0x4f, 0x00, 0x20, 0x6f, 0x00, 0x20, 0x7f, 0x00, 0x10, 0x33, 0x00, 0x10, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x0f, 0x00, 0x40, 0x1e, 0x00, 0x20, 0x9e, 0x00, 0x10, 0x7e, 0x00, 0x00, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x30, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x58, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3e, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x78, 0x00, 0x00, 0x58, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x30, 0x0e, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x07, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x30, 0x00, 0x00, 0x70, 0x00, 0x10, 0x7e, 0x00, 0x20, 0x9e, 0x00, 0x40, 0x1e, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x10, 0x30, 0x00, 0x10, 0x33, 0x00, 0x20, 0x7f, 0x00, 0x20, 0x6f, 0x00, 0xe0, 0x4f, 0x00, 0xe0, 0x06, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define ori_scout_width 20 #define ori_scout_height 20 static char ori_scout_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x0d, 0x00, 0x80, 0x06, 0x00, 0xc0, 0x17, 0x00, 0x40, 0x1f, 0x00, 0x40, 0x0c, 0x00, 0x60, 0x04, 0x00, 0x20, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe4, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1d, 0x00, 0x80, 0x3e, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x0b, 0x00, 0x10, 0x07, 0x00, 0x08, 0x03, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xd8, 0x01, 0x80, 0xf9, 0x01, 0xe0, 0x3c, 0x00, 0xb8, 0x37, 0x00, 0x0c, 0x03, 0x00, 0x80, 0x07, 0x00, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x27, 0x00, 0x80, 0xb1, 0x01, 0x00, 0xff, 0x03, 0x80, 0xb1, 0x01, 0xf8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x80, 0x07, 0x00, 0x0c, 0x03, 0x00, 0xb8, 0x37, 0x00, 0xe0, 0x3c, 0x00, 0x80, 0xf9, 0x01, 0x00, 0xd8, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x03, 0x00, 0x10, 0x07, 0x00, 0xe0, 0x0b, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x20, 0x04, 0x00, 0x60, 0x04, 0x00, 0x40, 0x0c, 0x00, 0x40, 0x1f, 0x00, 0xc0, 0x17, 0x00, 0x80, 0x06, 0x00, 0x80, 0x0d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x11, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x15, 0x00, 0x00, 0x15, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x42, 0x00, 0x00, 0x62, 0x00, 0x00, 0x23, 0x00, 0x80, 0x2f, 0x00, 0x80, 0x3e, 0x00, 0x00, 0x16, 0x00, 0x00, 0x1b, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x07, 0x00, 0x80, 0x05, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x8e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x17, 0x00, 0x80, 0x0b, 0x00, 0x80, 0x03, 0x00, 0x70, 0x02, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0c, 0x03, 0xc0, 0xde, 0x01, 0xc0, 0x73, 0x00, 0xf8, 0x19, 0x00, 0xb8, 0x01, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xfe, 0x01, 0xd8, 0x18, 0x00, 0xfc, 0x0f, 0x00, 0xd8, 0x18, 0x00, 0x40, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xb8, 0x01, 0x00, 0xf8, 0x19, 0x00, 0xc0, 0x73, 0x00, 0xc0, 0xde, 0x01, 0x00, 0x0c, 0x03, 0x00, 0x1e, 0x00, 0x00, 0x70, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x02, 0x00, 0x80, 0x03, 0x00, 0x80, 0x0b, 0x00, 0xc0, 0x17, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x05, 0x00, 0x00, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x16, 0x00, 0x80, 0x3e, 0x00, 0x80, 0x2f, 0x00, 0x00, 0x23, 0x00, 0x00, 0x62, 0x00, 0x00, 0x42, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define fed_cruiser_width 20 #define fed_cruiser_height 20 static char fed_cruiser_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x26, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x36, 0x00, 0x40, 0x26, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x7e, 0x00, 0x80, 0x3c, 0x00, 0x40, 0x0e, 0x00, 0x40, 0x46, 0x00, 0xe0, 0x27, 0x00, 0x20, 0x2f, 0x00, 0xa0, 0x1b, 0x00, 0x10, 0x11, 0x00, 0x10, 0x08, 0x00, 0x08, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xfa, 0x03, 0x00, 0xf9, 0x03, 0x80, 0xf8, 0x03, 0xc0, 0xff, 0x01, 0x20, 0x0e, 0x00, 0x10, 0x4f, 0x00, 0x08, 0x2b, 0x00, 0x04, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf2, 0x01, 0x80, 0xfb, 0x03, 0x60, 0xf8, 0x03, 0xf8, 0xfc, 0x03, 0x86, 0xff, 0x03, 0xc0, 0xf7, 0x01, 0xc0, 0x03, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x01, 0x00, 0x60, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xe7, 0x00, 0xc0, 0xf0, 0x01, 0x80, 0xf9, 0x03, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x03, 0x80, 0xf9, 0x03, 0xc0, 0xf0, 0x01, 0xfe, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x32, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0xf7, 0x01, 0x86, 0xff, 0x03, 0xf8, 0xf8, 0x03, 0xe0, 0xf8, 0x03, 0x00, 0xfb, 0x03, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x04, 0x15, 0x00, 0x88, 0x27, 0x00, 0x10, 0x07, 0x00, 0x60, 0xff, 0x00, 0xc0, 0xfd, 0x01, 0x80, 0xfc, 0x01, 0x00, 0xfd, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x08, 0x00, 0x10, 0x08, 0x00, 0x10, 0x10, 0x00, 0x20, 0x1b, 0x00, 0x20, 0x2f, 0x00, 0xe0, 0x27, 0x00, 0x40, 0x66, 0x00, 0x40, 0x0e, 0x00, 0x80, 0x3c, 0x00, 0x80, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x26, 0x00, 0xc0, 0x36, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x26, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x01, 0x00, 0x81, 0x00, 0x80, 0x80, 0x00, 0x80, 0x4d, 0x00, 0x40, 0x4f, 0x00, 0x40, 0x7e, 0x00, 0x60, 0x26, 0x00, 0x00, 0x27, 0x00, 0xc0, 0x13, 0x00, 0xe0, 0x17, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x80, 0x0a, 0x02, 0x40, 0x1e, 0x01, 0x20, 0x8e, 0x00, 0x00, 0x7f, 0x00, 0xf8, 0x23, 0x00, 0xfc, 0x13, 0x00, 0xfc, 0x0b, 0x00, 0xfc, 0x03, 0x00, 0xfc, 0x03, 0x00, 0xfc, 0x03, 0x00, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x08, 0x00, 0x00, 0x38, 0x00, 0xf8, 0x3e, 0x00, 0xfc, 0x1f, 0x06, 0xfc, 0xf3, 0x01, 0xfc, 0x71, 0x00, 0xfc, 0x0d, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xff, 0x03, 0x7c, 0x18, 0x00, 0xfe, 0x0c, 0x00, 0xfe, 0x3f, 0x00, 0xfe, 0x3f, 0x00, 0xfe, 0x0c, 0x00, 0x7c, 0x18, 0x00, 0x38, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x0d, 0x00, 0xfc, 0x71, 0x00, 0xfc, 0xf3, 0x01, 0xfc, 0x1f, 0x06, 0x78, 0x3f, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x04, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x38, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x0b, 0x00, 0xf8, 0x13, 0x00, 0xf8, 0x23, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x8e, 0x00, 0x40, 0x1e, 0x01, 0x80, 0x1a, 0x02, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xc0, 0x2f, 0x00, 0x80, 0x27, 0x00, 0x00, 0x4e, 0x00, 0x40, 0x4e, 0x00, 0x80, 0xfc, 0x00, 0x80, 0x9e, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x03, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x02, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}}; #define kli_cruiser_width 20 #define kli_cruiser_height 20 static char kli_cruiser_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x20, 0x8e, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xa0, 0xbf, 0x00, 0x20, 0x8a, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x60, 0x08, 0x00, 0xe0, 0x0e, 0x00, 0xe0, 0x0f, 0x00, 0xf0, 0x9f, 0x00, 0xd0, 0xff, 0x00, 0x88, 0x7f, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x01, 0x40, 0xe0, 0x01, 0x60, 0x10, 0x00, 0xf0, 0x0b, 0x00, 0xe8, 0x07, 0x00, 0xe4, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0xe0, 0xc0, 0x01, 0xf8, 0xc0, 0x03, 0xe4, 0xe1, 0x03, 0xe0, 0xbb, 0x01, 0xe0, 0x0f, 0x00, 0xf0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0x80, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x03, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x01, 0xf0, 0x83, 0x03, 0xe0, 0xff, 0x03, 0xf0, 0x83, 0x03, 0xe0, 0x01, 0x01, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0xbb, 0x01, 0xe4, 0xe1, 0x03, 0xf8, 0xc0, 0x03, 0xe0, 0xc0, 0x01, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0xe4, 0x0f, 0x00, 0xe8, 0x07, 0x00, 0xf0, 0x0b, 0x00, 0x60, 0x10, 0x00, 0x40, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x7e, 0x00, 0x88, 0x7f, 0x00, 0xd0, 0xff, 0x00, 0xf0, 0x9f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x0e, 0x00, 0x60, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x00, 0x20, 0x8a, 0x00, 0xa0, 0xbf, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x20, 0x8e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x3f, 0x02, 0xe0, 0x7f, 0x01, 0x20, 0xff, 0x01, 0x00, 0xfe, 0x00, 0x00, 0xee, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x7e, 0x01, 0x00, 0xfd, 0x00, 0x80, 0x60, 0x00, 0x78, 0x20, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfe, 0x00, 0xb0, 0xfb, 0x00, 0xf8, 0xf0, 0x04, 0x78, 0xe0, 0x03, 0x70, 0xe0, 0x00, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00, 0x08, 0x78, 0x00, 0x1c, 0xfc, 0x00, 0xfc, 0x7f, 0x00, 0x1c, 0xfc, 0x00, 0x08, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x00, 0x70, 0xe0, 0x00, 0x78, 0xe0, 0x03, 0xf8, 0xf0, 0x04, 0xb0, 0xfb, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x20, 0x00, 0x80, 0x60, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x7e, 0x01, 0x00, 0x7f, 0x02, 0x00, 0x3f, 0x00, 0x00, 0x3f, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0xc2, 0x00, 0x00, 0xee, 0x00, 0x00, 0xfe, 0x00, 0x20, 0xff, 0x01, 0xe0, 0x7f, 0x01, 0xc0, 0x3f, 0x02, 0xc0, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define rom_cruiser_width 20 #define rom_cruiser_height 20 static char rom_cruiser_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x01, 0x88, 0x1f, 0x01, 0xc8, 0x3f, 0x01, 0xe8, 0x7f, 0x01, 0xe8, 0x7f, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x38, 0xc0, 0x01, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0f, 0x00, 0xc8, 0x1f, 0x00, 0xe8, 0x3f, 0x00, 0xfc, 0x3f, 0x02, 0xfc, 0x3f, 0x01, 0xc4, 0x3f, 0x01, 0x02, 0xbe, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0xa0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x7f, 0x00, 0xe4, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x7e, 0x02, 0x00, 0x7c, 0x01, 0x00, 0xb8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x01, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1e, 0x01, 0x00, 0xce, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x06, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x03, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xce, 0x00, 0x00, 0x1e, 0x01, 0x00, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xfc, 0x0f, 0x00, 0xf0, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x00, 0x00, 0x78, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x7c, 0x01, 0x00, 0x7e, 0x02, 0x00, 0x7f, 0x04, 0x80, 0x7f, 0x00, 0xe4, 0x7f, 0x00, 0xf8, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xa0, 0x1f, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0x02, 0xbe, 0x00, 0xc4, 0x3f, 0x01, 0xfc, 0x3f, 0x01, 0xfc, 0x3f, 0x02, 0xe8, 0x3f, 0x00, 0xc8, 0x1f, 0x00, 0x10, 0x0f, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x08, 0x00, 0x01, 0x38, 0xc0, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xe8, 0x7f, 0x01, 0xe8, 0x7f, 0x01, 0xc8, 0x3f, 0x01, 0x88, 0x1f, 0x01, 0x08, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xd0, 0x07, 0x04, 0xc8, 0x3f, 0x02, 0xc8, 0xff, 0x03, 0xc4, 0xff, 0x03, 0xc0, 0x7f, 0x01, 0x80, 0x3f, 0x01, 0x00, 0x8f, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xa0, 0x03, 0x00, 0xd0, 0x07, 0x00, 0xc8, 0x0f, 0x00, 0xc4, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0xff, 0x04, 0xc0, 0xff, 0x03, 0x80, 0xff, 0x01, 0x00, 0xbf, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x06, 0x00, 0xc0, 0x07, 0x00, 0x30, 0x07, 0x00, 0x88, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xff, 0x03, 0x00, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x38, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xff, 0x03, 0xc0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x07, 0x00, 0x88, 0x07, 0x00, 0x30, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0xbf, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x03, 0xc0, 0xff, 0x04, 0xc0, 0x3f, 0x00, 0xc4, 0x1f, 0x00, 0xc8, 0x0f, 0x00, 0xd0, 0x07, 0x00, 0xa0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x8f, 0x00, 0x80, 0x3f, 0x01, 0xc0, 0x7f, 0x01, 0xc4, 0xff, 0x03, 0xc8, 0xff, 0x03, 0xc8, 0x3f, 0x02, 0xd0, 0x07, 0x04, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x60, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; #define ROMVLVS_width 20 #define ROMVLVS_height 20 static char ROMVLVS_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x02, 0x0f, 0x04, 0x86, 0x1f, 0x06, 0x9e, 0x9f, 0x07, 0xfa, 0xff, 0x05, 0xf2, 0xff, 0x04, 0xe2, 0x7f, 0x04, 0xc2, 0x3f, 0x04, 0x02, 0x0f, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x14, 0x0f, 0x00, 0xb4, 0x1f, 0x00, 0xf2, 0x1f, 0x00, 0xe2, 0x1f, 0x00, 0xe0, 0x1f, 0x04, 0xc0, 0xff, 0x03, 0xc0, 0x7f, 0x02, 0xc0, 0x0f, 0x01, 0x00, 0x01, 0x01, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x28, 0x00, 0x00, 0x24, 0x00, 0x00, 0x62, 0x1e, 0x00, 0x60, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0xc0, 0x3f, 0x04, 0x80, 0xfc, 0x03, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x8c, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x78, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x80, 0x07, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x30, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x78, 0x01, 0x00, 0x1e, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x18, 0x01, 0x00, 0x60, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x80, 0xfc, 0x03, 0xc0, 0x3f, 0x04, 0xe0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0x60, 0x3f, 0x00, 0x62, 0x1e, 0x00, 0x24, 0x00, 0x00, 0x28, 0x00, 0x00, 0x30, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x01, 0xc0, 0x0f, 0x01, 0xc0, 0x7f, 0x02, 0xc0, 0xff, 0x03, 0xe0, 0x1f, 0x04, 0xe2, 0x1f, 0x04, 0xf2, 0x1f, 0x00, 0xb4, 0x1f, 0x00, 0x14, 0x0f, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x02, 0x0f, 0x04, 0xc2, 0x3f, 0x04, 0xe2, 0x7f, 0x04, 0xf2, 0xff, 0x04, 0xfa, 0xff, 0x05, 0x9e, 0x9f, 0x07, 0x86, 0x1f, 0x06, 0x02, 0x0f, 0x04, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x08, 0x00, 0x08, 0x3f, 0x00, 0xe4, 0x3f, 0x00, 0xfc, 0x3f, 0x00, 0x82, 0x7f, 0x00, 0x82, 0x7f, 0x04, 0x80, 0xff, 0x04, 0x80, 0xdf, 0x02, 0x00, 0x8f, 0x02, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0xfc, 0x13, 0x00, 0xc2, 0x3f, 0x00, 0x00, 0x7f, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x6f, 0x00, 0x80, 0x67, 0x04, 0x00, 0x40, 0x02, 0x00, 0x40, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x30, 0x00, 0x00, 0xe8, 0x01, 0x00, 0x80, 0x07, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x80, 0xff, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10, 0x03, 0x00, 0xd0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x30, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x10, 0x03, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x3f, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x7f, 0x00, 0x80, 0xff, 0x00, 0x80, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x00, 0x80, 0x07, 0x00, 0xe8, 0x01, 0x00, 0x30, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x01, 0x00, 0x40, 0x02, 0x80, 0x67, 0x04, 0xc0, 0x6f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x7f, 0x00, 0x82, 0x3f, 0x00, 0xfc, 0x13, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0x8f, 0x02, 0x80, 0xdf, 0x02, 0x80, 0xff, 0x04, 0x80, 0x7f, 0x04, 0x82, 0x7f, 0x00, 0xfc, 0x3f, 0x00, 0xe4, 0x3f, 0x00, 0x08, 0x3f, 0x00, 0x08, 0x0c, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; #define ori_cruiser_width 20 #define ori_cruiser_height 20 static char ori_cruiser_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x30, 0xcf, 0x00, 0xb0, 0xdf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xf6, 0x00, 0xb0, 0xd0, 0x00, 0x30, 0xcf, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x78, 0x00, 0x40, 0x38, 0x00, 0x40, 0x0e, 0x00, 0x60, 0x1e, 0x00, 0x30, 0x1f, 0x00, 0xf0, 0x8f, 0x00, 0xf8, 0x8f, 0x00, 0x58, 0xdf, 0x00, 0x58, 0xf8, 0x00, 0xc8, 0x7d, 0x00, 0x00, 0x72, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0x01, 0x80, 0xe1, 0x01, 0xc0, 0xf8, 0x00, 0x60, 0x3c, 0x00, 0xf0, 0x3f, 0x00, 0xd8, 0x1f, 0x00, 0x48, 0x0f, 0x00, 0x44, 0x4f, 0x00, 0x40, 0x6c, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0xc0, 0x07, 0x03, 0xf0, 0x81, 0x07, 0xf0, 0xd2, 0x07, 0x8c, 0xff, 0x07, 0x40, 0x7f, 0x01, 0x20, 0x3f, 0x00, 0x40, 0x0f, 0x00, 0x40, 0x0e, 0x00, 0x80, 0x67, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0xfc, 0x0f, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x90, 0xcf, 0x01, 0xd0, 0xff, 0x03, 0xd0, 0xff, 0x03, 0x90, 0xcf, 0x01, 0xe0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x80, 0x67, 0x00, 0x40, 0x0e, 0x00, 0x40, 0x0f, 0x00, 0x20, 0x3f, 0x00, 0x40, 0x7f, 0x01, 0x8c, 0xff, 0x07, 0xf0, 0xd2, 0x07, 0xf0, 0x81, 0x07, 0xc0, 0x07, 0x03, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x80, 0x3f, 0x00, 0x40, 0x6c, 0x00, 0x44, 0x4f, 0x00, 0x48, 0x0f, 0x00, 0xd8, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0x60, 0x3c, 0x00, 0xc0, 0xf8, 0x00, 0x80, 0xe1, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x30, 0x00, 0x00, 0x76, 0x00, 0xc8, 0x7d, 0x00, 0x58, 0x78, 0x00, 0x58, 0xdf, 0x00, 0xf8, 0xcf, 0x00, 0xf8, 0x8f, 0x00, 0x30, 0x1f, 0x00, 0x70, 0x1e, 0x00, 0x60, 0x0e, 0x00, 0x40, 0x38, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x30, 0xcf, 0x00, 0xb0, 0xd0, 0x00, 0xf0, 0xf6, 0x00, 0xf0, 0xff, 0x00, 0xb0, 0xdf, 0x00, 0x30, 0xcf, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0x06, 0x00, 0xe0, 0x3b, 0x01, 0xe0, 0xa1, 0x01, 0xb0, 0xaf, 0x01, 0x30, 0xff, 0x01, 0x10, 0xff, 0x01, 0x80, 0xcf, 0x00, 0x80, 0xe7, 0x00, 0x00, 0x67, 0x00, 0xc0, 0x21, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x1f, 0x00, 0x60, 0x23, 0x00, 0x20, 0x2f, 0x02, 0x00, 0x2f, 0x01, 0x80, 0xbf, 0x01, 0xc0, 0xff, 0x00, 0xc0, 0x63, 0x00, 0xf0, 0x31, 0x00, 0x78, 0x18, 0x00, 0x78, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x07, 0x00, 0x60, 0x1e, 0x00, 0x00, 0x27, 0x00, 0x00, 0x2f, 0x00, 0xc0, 0x4f, 0x00, 0xe8, 0x2f, 0x00, 0xfe, 0x1f, 0x03, 0xbe, 0xf4, 0x00, 0x1e, 0xf8, 0x00, 0x0c, 0x3e, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xff, 0x03, 0x00, 0x30, 0x00, 0x00, 0x78, 0x00, 0x38, 0x9f, 0x00, 0xfc, 0xbf, 0x00, 0xfc, 0xbf, 0x00, 0x38, 0x9f, 0x00, 0x00, 0x78, 0x00, 0x00, 0x30, 0x00, 0x00, 0xff, 0x03, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x0c, 0x3e, 0x00, 0x1e, 0xf8, 0x00, 0xbe, 0xf4, 0x00, 0xfe, 0x1f, 0x03, 0xe8, 0x2f, 0x00, 0xc0, 0x4f, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x27, 0x00, 0x60, 0x1e, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x18, 0x00, 0xf0, 0x31, 0x00, 0xc0, 0x63, 0x00, 0xc0, 0xff, 0x00, 0x80, 0xbf, 0x01, 0x00, 0x2f, 0x01, 0x20, 0x2f, 0x02, 0x60, 0x23, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x21, 0x00, 0x00, 0x27, 0x00, 0x80, 0x67, 0x00, 0x80, 0xcf, 0x00, 0x10, 0xff, 0x00, 0x10, 0xff, 0x01, 0xb0, 0xaf, 0x01, 0xf0, 0xa1, 0x01, 0xe0, 0x3b, 0x01, 0xe0, 0x04, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}}; #define fed_battleship_width 20 #define fed_battleship_height 20 static char fed_battleship_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x80, 0xfc, 0x00, 0x80, 0x7c, 0x00, 0xc0, 0x1e, 0x00, 0x40, 0x4e, 0x00, 0x60, 0x6f, 0x00, 0xe0, 0x2f, 0x00, 0xa0, 0x2f, 0x00, 0xb0, 0x3f, 0x00, 0x90, 0x13, 0x00, 0x18, 0x19, 0x00, 0x08, 0x08, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf8, 0x01, 0x00, 0xf8, 0x03, 0x00, 0xfa, 0x03, 0x00, 0xf9, 0x03, 0x80, 0xf8, 0x03, 0x40, 0xfe, 0x01, 0xe0, 0x0f, 0x00, 0xd0, 0x4f, 0x00, 0xc8, 0x27, 0x00, 0xc4, 0x17, 0x00, 0xc2, 0x0f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0xf6, 0x07, 0x80, 0xf3, 0x07, 0xe0, 0xf0, 0x07, 0x7c, 0xfe, 0x07, 0xc6, 0xff, 0x07, 0xc0, 0xef, 0x03, 0xe0, 0x03, 0x00, 0xe0, 0x33, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcf, 0x01, 0xc0, 0xe0, 0x03, 0xe0, 0xf7, 0x07, 0xf0, 0xff, 0x07, 0xf0, 0xff, 0x07, 0xe0, 0xf7, 0x07, 0xc0, 0xe0, 0x03, 0xfe, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x1f, 0x00, 0xe0, 0x33, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0xef, 0x03, 0xc6, 0xff, 0x07, 0x78, 0xfe, 0x07, 0xe0, 0xf0, 0x07, 0x80, 0xf3, 0x07, 0x00, 0xf6, 0x07, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0xc2, 0x0f, 0x00, 0xc4, 0x17, 0x00, 0xc8, 0x27, 0x00, 0xd0, 0x4f, 0x00, 0xe0, 0x0f, 0x00, 0x40, 0xfe, 0x01, 0x80, 0xf8, 0x03, 0x00, 0xf9, 0x03, 0x00, 0xfa, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x01, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x08, 0x08, 0x00, 0x18, 0x19, 0x00, 0x90, 0x13, 0x00, 0xb0, 0x3f, 0x00, 0xa0, 0x2f, 0x00, 0xe0, 0x2f, 0x00, 0x60, 0x6f, 0x00, 0x40, 0x4e, 0x00, 0xc0, 0x1e, 0x00, 0x80, 0x7c, 0x00, 0x80, 0xfc, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x26, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x26, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x01, 0x80, 0x81, 0x01, 0x80, 0x9c, 0x00, 0xc0, 0xdf, 0x00, 0x40, 0x5e, 0x00, 0x40, 0x7f, 0x00, 0x60, 0x6f, 0x00, 0x20, 0x27, 0x00, 0x00, 0x37, 0x00, 0xe0, 0x13, 0x00, 0xf0, 0x17, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x3f, 0x00, 0x80, 0x3e, 0x02, 0x40, 0x3e, 0x01, 0x20, 0xbf, 0x00, 0x00, 0x7f, 0x00, 0xf8, 0x27, 0x00, 0xfc, 0x11, 0x00, 0xfc, 0x09, 0x00, 0xfc, 0x05, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1e, 0x00, 0x80, 0xf9, 0x00, 0x00, 0xfc, 0x00, 0xf8, 0x7e, 0x08, 0xfc, 0x7f, 0x06, 0xfc, 0xef, 0x01, 0xfc, 0x61, 0x00, 0xfc, 0x19, 0x00, 0xfc, 0x05, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xff, 0x07, 0x7c, 0x30, 0x00, 0xfe, 0x7e, 0x00, 0xfe, 0xff, 0x00, 0xfe, 0xff, 0x00, 0xfe, 0x7e, 0x00, 0x7c, 0x30, 0x00, 0x38, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x04, 0x00, 0xfc, 0x19, 0x00, 0xfc, 0xe1, 0x00, 0xfc, 0xff, 0x03, 0xfc, 0x7f, 0x0c, 0xf8, 0xfe, 0x00, 0x00, 0xfc, 0x00, 0x80, 0xf9, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x30, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf8, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x05, 0x00, 0xfc, 0x09, 0x00, 0xfc, 0x11, 0x00, 0xf8, 0x27, 0x00, 0x00, 0x7f, 0x00, 0x20, 0xbf, 0x00, 0x40, 0x3e, 0x01, 0x80, 0x3e, 0x02, 0x00, 0x3f, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x17, 0x00, 0xe0, 0x13, 0x00, 0x80, 0x37, 0x00, 0x20, 0x27, 0x00, 0x60, 0x6f, 0x00, 0x40, 0x7e, 0x00, 0xc0, 0x5e, 0x00, 0x80, 0xdf, 0x00, 0x80, 0x99, 0x00, 0x00, 0x81, 0x01, 0x00, 0x03, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}}; #define kli_battleship_width 20 #define kli_battleship_height 20 static char kli_battleship_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x20, 0x9f, 0x00, 0xa0, 0xbf, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x84, 0x00, 0x20, 0x84, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xb8, 0x00, 0x00, 0xd8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x40, 0x7c, 0x00, 0x40, 0x3c, 0x00, 0x60, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x9f, 0x00, 0xf0, 0xbf, 0x00, 0x90, 0xff, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x73, 0x00, 0x00, 0x21, 0x00, 0x80, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x02, 0x00, 0x70, 0x03, 0x80, 0xf8, 0x03, 0x40, 0xf8, 0x01, 0xe0, 0xff, 0x00, 0xf0, 0x7f, 0x00, 0xc8, 0x1f, 0x00, 0xc4, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x5f, 0x00, 0x40, 0x3f, 0x00, 0x20, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x03, 0xe0, 0xe0, 0x01, 0xf8, 0xf1, 0x04, 0xec, 0xff, 0x07, 0xc0, 0xff, 0x03, 0xe0, 0xff, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0x0f, 0x00, 0xc8, 0x07, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x07, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0xe7, 0x03, 0xe0, 0xff, 0x07, 0xfc, 0xff, 0x00, 0xe0, 0xff, 0x07, 0xe0, 0xe7, 0x03, 0xc0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xf8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x3f, 0x00, 0xc8, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0xff, 0x03, 0xec, 0xff, 0x07, 0xf8, 0xf1, 0x04, 0xe0, 0xe0, 0x01, 0x80, 0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x20, 0x18, 0x00, 0x40, 0x3f, 0x00, 0x80, 0x5f, 0x00, 0xc0, 0x1f, 0x00, 0xc4, 0x1f, 0x00, 0xc8, 0x1f, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0x40, 0xf8, 0x01, 0x80, 0xf8, 0x03, 0x00, 0x70, 0x03, 0x00, 0xe0, 0x02, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x20, 0x00, 0x00, 0x21, 0x00, 0x00, 0x73, 0x00, 0x08, 0x7f, 0x00, 0x90, 0xff, 0x00, 0xf0, 0xbf, 0x00, 0xe0, 0x9f, 0x00, 0xe0, 0x1f, 0x00, 0x60, 0x1f, 0x00, 0x40, 0x3c, 0x00, 0x40, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xd8, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x84, 0x00, 0x20, 0x84, 0x00, 0x20, 0x9f, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xa0, 0xbf, 0x00, 0x20, 0x9f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x20, 0x00, 0x80, 0x10, 0x00, 0xc0, 0x19, 0x00, 0xc0, 0x1f, 0x02, 0xe0, 0x3f, 0x01, 0xa0, 0xff, 0x01, 0x20, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xdf, 0x00, 0x80, 0x47, 0x00, 0xc0, 0x47, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0x60, 0x03, 0x00, 0xa0, 0x03, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x83, 0x00, 0x80, 0x5f, 0x00, 0x40, 0x3f, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x7f, 0x02, 0xc0, 0xff, 0x01, 0xe0, 0xff, 0x00, 0xf0, 0x43, 0x00, 0xf8, 0x23, 0x00, 0xd8, 0x01, 0x00, 0xe8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1e, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x7c, 0x02, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xf8, 0x7f, 0x00, 0xfc, 0xff, 0x06, 0xe4, 0xf1, 0x03, 0xf0, 0xe0, 0x00, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x38, 0x00, 0x00, 0x3c, 0x00, 0x7c, 0x7e, 0x00, 0xfe, 0x7f, 0x00, 0xf0, 0xff, 0x03, 0xfe, 0x7f, 0x00, 0x7c, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x00, 0xf0, 0xe0, 0x00, 0xe4, 0xf1, 0x03, 0xfc, 0xff, 0x06, 0xf8, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x7c, 0x02, 0x80, 0x1f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xe8, 0x00, 0x00, 0xd8, 0x01, 0x00, 0xf8, 0x23, 0x00, 0xf0, 0x43, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0xff, 0x01, 0x00, 0x7f, 0x02, 0x00, 0x7f, 0x04, 0x00, 0x7f, 0x00, 0x40, 0x3f, 0x00, 0x80, 0x5f, 0x00, 0x00, 0x83, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xa0, 0x03, 0x00, 0x60, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x47, 0x00, 0x80, 0x47, 0x00, 0x00, 0xdf, 0x00, 0x00, 0xff, 0x00, 0x20, 0xff, 0x00, 0xa0, 0xff, 0x01, 0xe0, 0x3f, 0x01, 0xc0, 0x1f, 0x02, 0xc0, 0x19, 0x00, 0x80, 0x10, 0x00, 0x80, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define rom_battleship_width 20 #define rom_battleship_height 20 static char rom_battleship_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x0f, 0x01, 0x88, 0x1f, 0x01, 0xc8, 0x3f, 0x01, 0xe8, 0x7f, 0x01, 0xe8, 0x7f, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x38, 0xcf, 0x01, 0x08, 0x06, 0x01, 0x48, 0x2f, 0x01, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x0f, 0x00, 0xd8, 0x1f, 0x00, 0xe8, 0x3f, 0x00, 0xf8, 0x3f, 0x02, 0xfc, 0x3f, 0x01, 0xdc, 0x3f, 0x01, 0x82, 0xbf, 0x01, 0x90, 0xff, 0x00, 0xd0, 0xf3, 0x00, 0xf8, 0x61, 0x00, 0xe8, 0x4b, 0x00, 0xc8, 0x27, 0x00, 0x84, 0x04, 0x00, 0x04, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0x08, 0xff, 0x00, 0x00, 0xff, 0x00, 0x20, 0xff, 0x08, 0x90, 0xff, 0x04, 0xf8, 0xff, 0x02, 0xe4, 0xe3, 0x01, 0xe2, 0xe1, 0x00, 0xc0, 0x65, 0x00, 0x00, 0x23, 0x00, 0x00, 0x11, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0xff, 0x00, 0x40, 0xfe, 0x01, 0x70, 0xfc, 0x01, 0x7c, 0xfe, 0x01, 0xe6, 0xff, 0x01, 0xe0, 0xff, 0x01, 0xe0, 0xf9, 0x00, 0xc0, 0x71, 0x04, 0x80, 0x73, 0x07, 0xc0, 0xf0, 0x01, 0x30, 0x38, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x1c, 0x00, 0x00, 0x7c, 0x00, 0xfc, 0xf9, 0x00, 0xc0, 0xf8, 0x01, 0xc0, 0xfd, 0x03, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x03, 0xc0, 0xfd, 0x03, 0xc0, 0xf8, 0x01, 0xfc, 0xf9, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x30, 0x38, 0x00, 0xc0, 0xf0, 0x01, 0x80, 0x73, 0x07, 0xc0, 0x71, 0x04, 0xe0, 0xf9, 0x00, 0xe0, 0xff, 0x01, 0xe6, 0xff, 0x01, 0x7c, 0xfe, 0x01, 0x70, 0xfc, 0x01, 0x40, 0xfe, 0x01, 0x00, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x23, 0x00, 0xc0, 0x65, 0x00, 0xe2, 0xe1, 0x00, 0xe4, 0xe3, 0x01, 0xf8, 0xff, 0x02, 0x90, 0xff, 0x04, 0x20, 0xff, 0x08, 0x00, 0xff, 0x00, 0x08, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x08, 0x00, 0x08, 0x09, 0x00, 0x90, 0x4f, 0x00, 0xd0, 0x97, 0x00, 0xf0, 0xc3, 0x00, 0xa0, 0xe7, 0x01, 0x20, 0xff, 0x01, 0x04, 0x7f, 0x03, 0xb8, 0x7f, 0x02, 0xf8, 0x7f, 0x02, 0xf0, 0x7f, 0x04, 0xd0, 0x7f, 0x00, 0xb0, 0x3f, 0x00, 0x20, 0x1e, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x26, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x48, 0x2f, 0x01, 0x08, 0x06, 0x01, 0x38, 0xcf, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xe8, 0x7f, 0x01, 0xe8, 0x7f, 0x01, 0xc8, 0x3f, 0x01, 0x88, 0x1f, 0x01, 0x08, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x01, 0x00, 0x09, 0x01, 0x20, 0x9f, 0x00, 0x90, 0xbe, 0x00, 0x30, 0xfc, 0x00, 0x78, 0x5e, 0x00, 0xf8, 0x4f, 0x00, 0xec, 0x0f, 0x02, 0xe4, 0xdf, 0x01, 0xe4, 0xff, 0x01, 0xe2, 0xff, 0x00, 0xe0, 0xbf, 0x00, 0xc0, 0xdf, 0x00, 0x80, 0x47, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x80, 0x08, 0x00, 0x40, 0x0c, 0x00, 0x60, 0x3a, 0x00, 0x70, 0x78, 0x04, 0x78, 0x7c, 0x02, 0xf4, 0xff, 0x01, 0xf2, 0x9f, 0x00, 0xf1, 0x4f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x01, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc0, 0xc1, 0x00, 0xf8, 0x30, 0x00, 0xee, 0x1c, 0x00, 0xe2, 0x38, 0x00, 0xf0, 0x79, 0x00, 0xf8, 0x7f, 0x00, 0xf8, 0x7f, 0x06, 0xf8, 0xe7, 0x03, 0xf8, 0xe3, 0x00, 0xf8, 0x27, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x00, 0xc0, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0xf9, 0x03, 0xf8, 0x31, 0x00, 0xfc, 0x3b, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x3b, 0x00, 0xf8, 0x31, 0x00, 0xf0, 0xf9, 0x03, 0xe0, 0x03, 0x00, 0x80, 0x03, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0x0f, 0x00, 0xf8, 0x27, 0x00, 0xf8, 0xe3, 0x00, 0xf8, 0xe7, 0x03, 0xf8, 0x7f, 0x06, 0xf8, 0x7f, 0x00, 0xf0, 0x79, 0x00, 0xe2, 0x38, 0x00, 0xee, 0x1c, 0x00, 0xf8, 0x30, 0x00, 0xc0, 0xc1, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0x0f, 0x01, 0xf0, 0x0f, 0x00, 0xf1, 0x4f, 0x00, 0xf2, 0x9f, 0x00, 0xf4, 0xff, 0x01, 0x78, 0x7c, 0x02, 0x70, 0x78, 0x04, 0x60, 0x3a, 0x00, 0x40, 0x0c, 0x00, 0x80, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x8f, 0x00, 0x80, 0xbf, 0x01, 0xc0, 0x7f, 0x01, 0xc4, 0xff, 0x01, 0xc8, 0xff, 0x03, 0xc8, 0xbf, 0x03, 0xd8, 0x1f, 0x04, 0xf0, 0x9f, 0x00, 0xf0, 0xbc, 0x00, 0x60, 0xf8, 0x01, 0x20, 0x7d, 0x01, 0x40, 0x3e, 0x01, 0x00, 0x12, 0x02, 0x00, 0x02, 0x02, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}}; #define ori_battleship_width 20 #define ori_battleship_height 20 static char ori_battleship_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x40, 0x5f, 0x00, 0x40, 0x5f, 0x00, 0x40, 0x4e, 0x00, 0x40, 0x4e, 0x00, 0x40, 0x4e, 0x00, 0xc0, 0x6e, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x6e, 0x00, 0xc0, 0x6e, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x7d, 0x00, 0x80, 0x7c, 0x00, 0x80, 0x3e, 0x00, 0xc0, 0xbe, 0x00, 0x40, 0x9e, 0x00, 0x60, 0x4e, 0x00, 0x60, 0x4f, 0x00, 0xf0, 0x67, 0x00, 0xf0, 0x37, 0x00, 0xf8, 0x3f, 0x00, 0xd8, 0x1f, 0x00, 0xd0, 0x1f, 0x00, 0x80, 0x1d, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf2, 0x01, 0x00, 0xf9, 0x01, 0x80, 0xfc, 0x01, 0x40, 0xfe, 0x00, 0x20, 0x7e, 0x00, 0x30, 0x3f, 0x00, 0xb8, 0x9f, 0x00, 0xfc, 0x47, 0x00, 0xfe, 0x23, 0x00, 0xf0, 0x11, 0x00, 0xf8, 0x0f, 0x00, 0xf0, 0x07, 0x00, 0xa0, 0x03, 0x00, 0x80, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x01, 0x80, 0xe3, 0x07, 0xe0, 0xfc, 0x07, 0x78, 0xfc, 0x07, 0x7e, 0xff, 0x07, 0xfe, 0xff, 0x00, 0xf8, 0x3f, 0x00, 0xfc, 0x41, 0x00, 0xfc, 0x70, 0x00, 0xfc, 0x1f, 0x00, 0xf0, 0x03, 0x00, 0x78, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0xfe, 0x00, 0x00, 0x78, 0xf8, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0x78, 0xf8, 0x03, 0xfe, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf0, 0x03, 0x00, 0xfc, 0x1f, 0x00, 0xfc, 0x70, 0x00, 0xfc, 0x41, 0x00, 0xf8, 0x3f, 0x00, 0xfe, 0xff, 0x00, 0x7e, 0xff, 0x07, 0x78, 0xfc, 0x07, 0xe0, 0xfc, 0x07, 0x80, 0xe3, 0x07, 0x00, 0x8e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x01, 0x00, 0xa0, 0x03, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x0f, 0x00, 0xf0, 0x11, 0x00, 0xfe, 0x23, 0x00, 0xfc, 0x47, 0x00, 0xb8, 0x9f, 0x00, 0x30, 0x3f, 0x00, 0x20, 0x7e, 0x00, 0x40, 0xfe, 0x00, 0x80, 0xfc, 0x01, 0x00, 0xf9, 0x01, 0x00, 0xf2, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x80, 0x1d, 0x00, 0xd0, 0x1f, 0x00, 0xd8, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x37, 0x00, 0xf0, 0x67, 0x00, 0x60, 0x4f, 0x00, 0x60, 0x4e, 0x00, 0x40, 0x9e, 0x00, 0xc0, 0xbe, 0x00, 0x80, 0x3e, 0x00, 0x80, 0x7c, 0x00, 0x00, 0x7d, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xc0, 0x6e, 0x00, 0xc0, 0x6e, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x6e, 0x00, 0x40, 0x4e, 0x00, 0x40, 0x4e, 0x00, 0x40, 0x4e, 0x00, 0x40, 0x5f, 0x00, 0x40, 0x5f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x37, 0x00, 0x00, 0x7f, 0x01, 0x00, 0x7f, 0x03, 0x80, 0xff, 0x03, 0x80, 0xfd, 0x01, 0xc0, 0xfc, 0x01, 0x40, 0xde, 0x00, 0x40, 0xce, 0x00, 0x20, 0x4f, 0x00, 0xa0, 0x6f, 0x00, 0x80, 0x2f, 0x00, 0xc0, 0x27, 0x00, 0xc0, 0x17, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0x00, 0x5c, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x01, 0x80, 0xf8, 0x00, 0x40, 0xfc, 0x07, 0x20, 0xfe, 0x03, 0x90, 0xdf, 0x01, 0xc0, 0xcf, 0x00, 0xe0, 0x47, 0x00, 0xf0, 0x27, 0x00, 0xf8, 0x13, 0x00, 0xf8, 0x09, 0x00, 0xf8, 0x04, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xfc, 0x00, 0x80, 0xff, 0x03, 0xe0, 0xf0, 0x03, 0x20, 0xf8, 0x03, 0xc0, 0xff, 0x01, 0xf0, 0xff, 0x07, 0xfe, 0xef, 0x07, 0xfe, 0xe3, 0x01, 0xfe, 0x73, 0x00, 0x7e, 0x1c, 0x00, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x07, 0x00, 0xf0, 0x07, 0xfc, 0xe1, 0x01, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xe1, 0x01, 0x00, 0xf0, 0x07, 0x80, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x07, 0x00, 0x7e, 0x1c, 0x00, 0xfe, 0x73, 0x00, 0xfe, 0xe3, 0x01, 0xfe, 0xef, 0x07, 0xf0, 0xff, 0x07, 0xc0, 0xff, 0x01, 0x20, 0xf8, 0x03, 0xe0, 0xf0, 0x03, 0x80, 0xff, 0x03, 0x00, 0xfc, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x04, 0x00, 0xf8, 0x09, 0x00, 0xf8, 0x13, 0x00, 0xf0, 0x27, 0x00, 0xe0, 0x47, 0x00, 0xc0, 0xcf, 0x00, 0x90, 0xdf, 0x01, 0x20, 0xfe, 0x03, 0x40, 0xfc, 0x07, 0x80, 0xf8, 0x00, 0x00, 0xff, 0x01, 0x00, 0xfe, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x17, 0x00, 0xc0, 0x27, 0x00, 0x80, 0x2f, 0x00, 0xa0, 0x6f, 0x00, 0x20, 0x4f, 0x00, 0x40, 0xce, 0x00, 0x40, 0xde, 0x00, 0xc0, 0xfc, 0x01, 0x80, 0xfd, 0x01, 0x80, 0xff, 0x03, 0x00, 0x7f, 0x03, 0x00, 0x7f, 0x01, 0x00, 0x37, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}}; #define fed_starbase_width 20 #define fed_starbase_height 20 static char fed_starbase_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x84, 0x0f, 0x03, 0x68, 0xf2, 0x00, 0x10, 0xf2, 0x00, 0x68, 0xf2, 0x00, 0xe8, 0xff, 0x00, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xfc, 0xff, 0x01, 0xc4, 0x1f, 0x01, 0xc4, 0x1f, 0x01, 0xf8, 0xbf, 0x00, 0x78, 0xb2, 0x00, 0x78, 0x42, 0x00, 0x78, 0xb2, 0x02, 0x86, 0x0f, 0x01, 0x04, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define kli_starbase_width 20 #define kli_starbase_height 20 static char kli_starbase_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x44, 0x29, 0x02, 0xe6, 0x70, 0x06, 0xe4, 0x79, 0x02, 0xfc, 0xff, 0x03, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x03, 0xe4, 0x79, 0x02, 0xe6, 0x70, 0x06, 0x44, 0x29, 0x02, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define rom_starbase_width 20 #define rom_starbase_height 20 static char rom_starbase_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x4f, 0x00, 0x60, 0xc4, 0x00, 0xf0, 0xc5, 0x01, 0xd0, 0x2f, 0x00, 0xd0, 0x1d, 0x00, 0x98, 0x3e, 0x03, 0xf8, 0xff, 0x03, 0x98, 0x2f, 0x03, 0x00, 0x77, 0x01, 0x80, 0x7e, 0x01, 0x50, 0xf4, 0x01, 0x30, 0xc4, 0x00, 0x60, 0x7e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define ori_starbase_width 20 #define ori_starbase_height 20 static char ori_starbase_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x80, 0x01, 0x1c, 0x80, 0x03, 0xbc, 0xd0, 0x03, 0x70, 0xe0, 0x00, 0xf0, 0x79, 0x00, 0xc8, 0x3f, 0x00, 0xd4, 0x37, 0x00, 0x82, 0x1d, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x3e, 0x01, 0xc0, 0xbf, 0x00, 0xe8, 0x79, 0x00, 0xf0, 0xe0, 0x00, 0x3c, 0xc1, 0x03, 0x1c, 0xa0, 0x03, 0x18, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define rom_assault_width 20 #define rom_assault_height 20 static char rom_assault_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0xa0, 0xbf, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x60, 0xce, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x9f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x3e, 0x00, 0x40, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0x7f, 0x01, 0x70, 0xff, 0x00, 0x18, 0xff, 0x00, 0x88, 0x77, 0x00, 0x80, 0x77, 0x00, 0xc0, 0x27, 0x00, 0xe0, 0x23, 0x00, 0xe0, 0x13, 0x00, 0x10, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xe0, 0xff, 0x01, 0xf0, 0xff, 0x01, 0x08, 0xfe, 0x00, 0x80, 0xff, 0x02, 0xc0, 0xff, 0x01, 0xc0, 0xf7, 0x00, 0xf0, 0x77, 0x00, 0xf8, 0x33, 0x00, 0xfc, 0x10, 0x00, 0xe0, 0x08, 0x00, 0x60, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0xce, 0x00, 0x80, 0xff, 0x01, 0xe0, 0xff, 0x03, 0x00, 0xfe, 0x03, 0x80, 0xfd, 0x03, 0xc0, 0xff, 0x03, 0xf8, 0xff, 0x01, 0xfe, 0xfb, 0x00, 0xf0, 0xfb, 0x01, 0x70, 0x78, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf8, 0x01, 0xbc, 0xfb, 0x03, 0xf8, 0xff, 0x07, 0xf0, 0xff, 0x07, 0xf8, 0xff, 0x07, 0xbc, 0xfb, 0x03, 0x00, 0xf8, 0x01, 0x00, 0x7c, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x38, 0x1c, 0x00, 0x70, 0x78, 0x00, 0xf0, 0xfb, 0x01, 0xfe, 0xfb, 0x00, 0xf8, 0xff, 0x01, 0xc0, 0xff, 0x03, 0x80, 0xfd, 0x03, 0x00, 0xfe, 0x03, 0xe0, 0xff, 0x03, 0x80, 0xff, 0x01, 0x00, 0xce, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x00, 0x00, 0xe0, 0x08, 0x00, 0xfc, 0x10, 0x00, 0xf8, 0x33, 0x00, 0xf0, 0x77, 0x00, 0xc0, 0xf7, 0x00, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x02, 0x08, 0xfe, 0x00, 0xf0, 0xff, 0x01, 0xe0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x01, 0x00, 0xf9, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x10, 0x03, 0x00, 0xe0, 0x13, 0x00, 0xe0, 0x23, 0x00, 0xc0, 0x27, 0x00, 0x80, 0x77, 0x00, 0x88, 0x77, 0x00, 0x18, 0xff, 0x00, 0x70, 0xff, 0x00, 0xf0, 0x7f, 0x01, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x40, 0x7f, 0x00, 0x40, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x9f, 0x00, 0x60, 0xce, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xa0, 0xbf, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x8c, 0x00, 0x80, 0x7c, 0x00, 0x40, 0x7c, 0x00, 0x40, 0x3e, 0x00, 0xe0, 0x1e, 0x00, 0xe0, 0x1e, 0x01, 0xf0, 0x8f, 0x01, 0xf0, 0xef, 0x00, 0xe8, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x2f, 0x00, 0xc0, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x60, 0x00, 0x00, 0x71, 0x00, 0x80, 0xf0, 0x03, 0xc0, 0xfc, 0x01, 0xe0, 0xfe, 0x00, 0xf0, 0x3e, 0x00, 0xf8, 0x3f, 0x00, 0xf4, 0x1f, 0x00, 0xf0, 0x07, 0x01, 0xf8, 0xff, 0x00, 0xf8, 0x7f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0x09, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0xc3, 0x01, 0xe0, 0xe1, 0x00, 0xf8, 0xfd, 0x00, 0xf0, 0xfd, 0x07, 0xf8, 0xff, 0x01, 0xfc, 0x3f, 0x00, 0xfc, 0x1b, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x7f, 0x00, 0xf8, 0x1f, 0x00, 0x30, 0x07, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0xe0, 0x03, 0x00, 0xf8, 0x01, 0x00, 0xfc, 0xdd, 0x03, 0xfe, 0xff, 0x01, 0xfe, 0xff, 0x00, 0xfe, 0xff, 0x01, 0xfc, 0xdd, 0x03, 0xf8, 0x01, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x30, 0x07, 0x00, 0xf8, 0x1f, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x1b, 0x00, 0xfc, 0x3f, 0x00, 0xf8, 0xff, 0x01, 0xf0, 0xfd, 0x07, 0xf8, 0xfd, 0x00, 0xe0, 0xe1, 0x00, 0x80, 0xc3, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x09, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x7f, 0x00, 0xf8, 0xff, 0x00, 0xf0, 0x07, 0x01, 0xf4, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x3e, 0x00, 0xe0, 0xfe, 0x00, 0xc0, 0xfc, 0x01, 0x80, 0xf0, 0x03, 0x00, 0x71, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x27, 0x00, 0xe0, 0x2f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xe8, 0xff, 0x00, 0xf0, 0xef, 0x00, 0xf0, 0x8f, 0x01, 0xe0, 0x1e, 0x01, 0xe0, 0x1e, 0x00, 0x40, 0x3e, 0x00, 0x40, 0x7c, 0x00, 0x80, 0x7c, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define ori_assault_width 20 #define ori_assault_height 20 static char ori_assault_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x70, 0xef, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x1e, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0x9c, 0x7f, 0x00, 0xcc, 0x7f, 0x00, 0xc0, 0x73, 0x00, 0x80, 0x3b, 0x00, 0x00, 0x38, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x01, 0xc0, 0xf1, 0x00, 0xf0, 0x7f, 0x00, 0xf8, 0x1f, 0x00, 0xfc, 0x1f, 0x00, 0x9c, 0x1f, 0x00, 0xc8, 0x3f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x3d, 0x00, 0xc0, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x01, 0xf8, 0xe1, 0x03, 0xfe, 0xfb, 0x03, 0xfe, 0xff, 0x03, 0xe0, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x0f, 0x00, 0xb8, 0x0f, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xf8, 0xb7, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xf8, 0xb7, 0x01, 0xe0, 0x03, 0x00, 0xf0, 0x03, 0x00, 0xfc, 0x01, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x07, 0x00, 0xb8, 0x0f, 0x00, 0xf8, 0x0f, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xfe, 0xff, 0x03, 0xfe, 0xfb, 0x03, 0xf8, 0xe1, 0x03, 0x40, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0xc0, 0x1c, 0x00, 0xe0, 0x3d, 0x00, 0xe0, 0x3f, 0x00, 0xc8, 0x3f, 0x00, 0x9c, 0x1f, 0x00, 0xfc, 0x1f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0x7f, 0x00, 0xc0, 0xf1, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x38, 0x00, 0x80, 0x3b, 0x00, 0xc0, 0x73, 0x00, 0xcc, 0x7f, 0x00, 0x9c, 0x7f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0x80, 0x1e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xcf, 0x00, 0x70, 0xef, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x1d, 0x00, 0xe0, 0x3c, 0x00, 0xe0, 0x3f, 0x03, 0xe0, 0x9f, 0x03, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x17, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x80, 0x33, 0x00, 0xc0, 0x7b, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x3f, 0x01, 0x80, 0x9f, 0x03, 0x80, 0xff, 0x03, 0x80, 0xff, 0x01, 0xe0, 0xff, 0x00, 0xf0, 0x38, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0xdf, 0x01, 0x00, 0xff, 0x01, 0x00, 0xfe, 0x01, 0xc0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xfc, 0xff, 0x07, 0xfc, 0xfd, 0x07, 0x7c, 0xf8, 0x01, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0xd8, 0xfe, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xd8, 0xfe, 0x01, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xf8, 0x03, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x20, 0x00, 0x7c, 0xf8, 0x01, 0xfc, 0xfd, 0x07, 0xfc, 0xff, 0x07, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x01, 0x00, 0xdf, 0x01, 0x00, 0x1e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x38, 0x00, 0xe0, 0xff, 0x00, 0x80, 0xff, 0x01, 0x80, 0xff, 0x03, 0x80, 0x9f, 0x03, 0xc0, 0x3f, 0x01, 0xc0, 0x7f, 0x00, 0xc0, 0x7b, 0x00, 0x80, 0x33, 0x00, 0x80, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x17, 0x00, 0x80, 0x7f, 0x00, 0x80, 0xff, 0x00, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xe0, 0x9f, 0x03, 0xe0, 0x3f, 0x03, 0xe0, 0x3c, 0x00, 0xc0, 0x1d, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}}; #define kli_assault_width 20 #define kli_assault_height 20 static char kli_assault_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x20, 0x9f, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x8e, 0x00, 0x20, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x40, 0x3e, 0x00, 0x60, 0x3e, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x9f, 0x00, 0xf0, 0xff, 0x00, 0x90, 0xff, 0x00, 0x88, 0x7f, 0x00, 0x88, 0x67, 0x00, 0x80, 0x23, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xf0, 0x03, 0x80, 0xf8, 0x03, 0xc0, 0xf8, 0x00, 0xe0, 0xff, 0x00, 0xf0, 0x7f, 0x00, 0xc8, 0x1f, 0x00, 0xc4, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x19, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x03, 0xe0, 0xa1, 0x07, 0xf8, 0xf9, 0x07, 0xe6, 0xff, 0x07, 0xc0, 0xff, 0x06, 0xf0, 0xff, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0x60, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xf0, 0x77, 0x03, 0xf8, 0xff, 0x07, 0xf8, 0xff, 0x07, 0xf8, 0xff, 0x07, 0xf0, 0x77, 0x03, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x60, 0x1f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0xff, 0x00, 0xc0, 0xff, 0x06, 0xe6, 0xff, 0x07, 0xf8, 0xf9, 0x07, 0xe0, 0xa1, 0x07, 0x80, 0x81, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0xe0, 0x0c, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf0, 0x0f, 0x00, 0xe2, 0x0f, 0x00, 0xe4, 0x0f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x7f, 0x00, 0x60, 0x7c, 0x00, 0x40, 0xfc, 0x01, 0x00, 0xf8, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x80, 0x23, 0x00, 0x88, 0x67, 0x00, 0x88, 0x7f, 0x00, 0x90, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x9f, 0x00, 0xe0, 0x1f, 0x00, 0x60, 0x3e, 0x00, 0x40, 0x3e, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x00, 0x20, 0x8e, 0x00, 0x20, 0x9f, 0x00, 0x20, 0x9f, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x20, 0x9f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x38, 0x00, 0xc0, 0x3c, 0x02, 0xc0, 0x3f, 0x02, 0xe0, 0x3f, 0x01, 0xe0, 0xff, 0x01, 0x20, 0xff, 0x00, 0x00, 0xff, 0x00, 0x80, 0xcf, 0x00, 0x80, 0x4f, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x73, 0x00, 0x80, 0xff, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x7f, 0x04, 0x00, 0x7f, 0x02, 0xc0, 0xff, 0x01, 0xe0, 0xff, 0x00, 0xe0, 0x63, 0x00, 0xf8, 0x23, 0x00, 0xf8, 0x01, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x6f, 0x00, 0x00, 0xff, 0x00, 0x00, 0xfe, 0x00, 0xc0, 0xff, 0x01, 0xf0, 0xff, 0x00, 0xf6, 0x3f, 0x00, 0xfe, 0x7f, 0x06, 0xfe, 0xf9, 0x01, 0x5e, 0x78, 0x00, 0x1c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0xec, 0xfe, 0x00, 0xfe, 0xff, 0x01, 0xfe, 0xff, 0x01, 0xfe, 0xff, 0x01, 0xec, 0xfe, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x30, 0x00, 0xbc, 0xf0, 0x00, 0xfc, 0xf3, 0x03, 0xfc, 0xff, 0x0c, 0xec, 0x7f, 0x00, 0xe0, 0xff, 0x01, 0x80, 0xff, 0x03, 0x00, 0xfc, 0x01, 0x00, 0xfe, 0x01, 0x00, 0xdf, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x38, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf8, 0x01, 0x00, 0xf8, 0x23, 0x00, 0xe0, 0x63, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0xff, 0x01, 0x00, 0x7f, 0x02, 0x00, 0x7f, 0x04, 0x00, 0xff, 0x00, 0xc0, 0xff, 0x00, 0x80, 0xff, 0x00, 0x00, 0x73, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x4f, 0x00, 0x80, 0xcf, 0x00, 0x00, 0xff, 0x00, 0x20, 0xff, 0x00, 0xe0, 0xff, 0x01, 0xe0, 0x3f, 0x01, 0xc0, 0x3f, 0x02, 0xc0, 0x3c, 0x02, 0x80, 0x38, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define fed_assault_width 20 #define fed_assault_height 20 static char fed_assault_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0xa0, 0x5f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x6f, 0x00, 0x20, 0x46, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x46, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x40, 0xff, 0x00, 0x40, 0xfe, 0x00, 0xc0, 0x7f, 0x00, 0x20, 0x1f, 0x00, 0x20, 0xbf, 0x00, 0x10, 0x67, 0x00, 0x90, 0x47, 0x00, 0x98, 0x27, 0x00, 0x88, 0x23, 0x00, 0xc0, 0x13, 0x00, 0x80, 0x11, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfd, 0x01, 0x80, 0xfc, 0x01, 0xc0, 0xff, 0x01, 0x20, 0xfe, 0x01, 0x10, 0xfe, 0x00, 0x88, 0x1f, 0x00, 0x84, 0x53, 0x00, 0xe0, 0x33, 0x00, 0xe0, 0x10, 0x00, 0xe0, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x00, 0xf3, 0x01, 0xe0, 0xff, 0x03, 0x78, 0xfc, 0x03, 0x0c, 0xfe, 0x03, 0xc0, 0xff, 0x03, 0xf0, 0xff, 0x01, 0xf0, 0x3f, 0x00, 0xf8, 0x11, 0x00, 0x30, 0x38, 0x00, 0x00, 0x0e, 0x00, 0xc0, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0xe6, 0x00, 0x00, 0xfc, 0x01, 0xd8, 0xfe, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xd8, 0xfe, 0x03, 0x00, 0xfc, 0x01, 0x00, 0xe6, 0x00, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x0e, 0x00, 0x30, 0x38, 0x00, 0xf8, 0x11, 0x00, 0xf0, 0x3f, 0x00, 0xf0, 0xff, 0x01, 0xc0, 0xff, 0x03, 0x0c, 0xfe, 0x03, 0x78, 0xfc, 0x03, 0xe0, 0xff, 0x03, 0x00, 0xf3, 0x01, 0x00, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0xe0, 0x08, 0x00, 0xe0, 0x10, 0x00, 0xe0, 0x33, 0x00, 0x84, 0x53, 0x00, 0x88, 0x1f, 0x00, 0x10, 0xfe, 0x00, 0x20, 0xfe, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xfc, 0x01, 0x00, 0xfd, 0x01, 0x00, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x80, 0x11, 0x00, 0xc0, 0x13, 0x00, 0x88, 0x23, 0x00, 0x98, 0x27, 0x00, 0x90, 0x47, 0x00, 0x10, 0x67, 0x00, 0x20, 0xbf, 0x00, 0x20, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0x40, 0xfe, 0x00, 0x40, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x46, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x46, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x46, 0x00, 0x60, 0x6f, 0x00, 0xe0, 0x7f, 0x00, 0xa0, 0x5f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x80, 0x18, 0x00, 0x80, 0x3c, 0x00, 0x40, 0x1c, 0x01, 0x40, 0x9e, 0x01, 0x20, 0x9e, 0x00, 0x60, 0x8e, 0x00, 0xd0, 0x4f, 0x00, 0x80, 0x4f, 0x00, 0xe0, 0x3f, 0x00, 0xf0, 0x27, 0x00, 0xf0, 0x2f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x71, 0x00, 0x80, 0x70, 0x00, 0xc0, 0x7c, 0x00, 0xa0, 0x1c, 0x02, 0x80, 0x1f, 0x01, 0xf0, 0x87, 0x00, 0xf8, 0x47, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x13, 0x00, 0xf8, 0x0b, 0x00, 0xf0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x83, 0x01, 0x00, 0xf1, 0x03, 0x80, 0xff, 0x01, 0xf0, 0xff, 0x01, 0xf8, 0x7f, 0x00, 0xf8, 0x0f, 0x06, 0xf8, 0xc7, 0x03, 0xf8, 0xff, 0x00, 0xf0, 0x19, 0x00, 0xe0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x70, 0x06, 0x00, 0xf8, 0x03, 0x00, 0xfc, 0xb7, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xb7, 0x01, 0xf8, 0x03, 0x00, 0x70, 0x06, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x04, 0x00, 0xf0, 0x19, 0x00, 0xf8, 0xff, 0x00, 0xf8, 0xc7, 0x03, 0xf8, 0x0f, 0x06, 0xf8, 0x7f, 0x00, 0xf0, 0xff, 0x01, 0x80, 0xff, 0x01, 0x00, 0xf1, 0x03, 0x80, 0x83, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x78, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x03, 0x00, 0xf8, 0x0b, 0x00, 0xf8, 0x13, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x47, 0x00, 0xf0, 0x87, 0x00, 0x80, 0x1f, 0x01, 0xa0, 0x1c, 0x02, 0xc0, 0x7c, 0x00, 0x80, 0x70, 0x00, 0x00, 0x71, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x2f, 0x00, 0xf0, 0x27, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x4f, 0x00, 0xd0, 0x4f, 0x00, 0x60, 0x8e, 0x00, 0x20, 0x9e, 0x00, 0x40, 0x9e, 0x01, 0x40, 0x1c, 0x01, 0x80, 0x3c, 0x00, 0x80, 0x18, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}}; #define kli_destroyer_width 20 #define kli_destroyer_height 20 static char kli_destroyer_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x10, 0x1f, 0x01, 0x90, 0x3f, 0x01, 0xf0, 0xff, 0x01, 0xf0, 0xff, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x10, 0x08, 0x00, 0x10, 0x0e, 0x00, 0x08, 0x0f, 0x00, 0xf8, 0x0f, 0x00, 0xf8, 0x0f, 0x00, 0xe0, 0x1f, 0x01, 0x80, 0x9f, 0x00, 0x00, 0xff, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x10, 0x20, 0x00, 0x08, 0x10, 0x00, 0x0c, 0x0e, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x0f, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x27, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x1c, 0x80, 0x01, 0x18, 0xc0, 0x03, 0x38, 0xf0, 0x01, 0xf8, 0x1d, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x03, 0x00, 0xf0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x05, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf8, 0x87, 0x01, 0xf8, 0xff, 0x03, 0xf8, 0x87, 0x01, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x05, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x03, 0x00, 0xf0, 0x03, 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x1d, 0x00, 0x38, 0xf0, 0x01, 0x18, 0xc0, 0x03, 0x1c, 0x80, 0x01, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x27, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0x0c, 0x0e, 0x00, 0x08, 0x10, 0x00, 0x10, 0x20, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x7f, 0x00, 0xc0, 0x4f, 0x00, 0xf0, 0x8f, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x07, 0x00, 0x84, 0x07, 0x00, 0x08, 0x07, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0xf0, 0xff, 0x01, 0xf0, 0xff, 0x01, 0x90, 0x3f, 0x01, 0x10, 0x1f, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x1f, 0x00, 0x20, 0x3f, 0x00, 0x10, 0xff, 0x00, 0x00, 0xfe, 0x03, 0x00, 0xfe, 0x03, 0x00, 0x1e, 0x02, 0x00, 0x0e, 0x01, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x80, 0x07, 0x00, 0x40, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x01, 0x00, 0xff, 0x03, 0x00, 0x07, 0x03, 0x80, 0x00, 0x01, 0x40, 0x80, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfe, 0x01, 0x80, 0xfb, 0x01, 0xf8, 0xc0, 0x01, 0x3c, 0x80, 0x01, 0x18, 0x80, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x00, 0x18, 0xfe, 0x01, 0xfc, 0xff, 0x01, 0x18, 0xfe, 0x01, 0x00, 0xf0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x30, 0x00, 0x07, 0x78, 0x00, 0x03, 0xf0, 0x81, 0x03, 0x00, 0xf7, 0x03, 0x00, 0xfc, 0x03, 0x00, 0xf8, 0x01, 0x00, 0xf8, 0x01, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x70, 0x00, 0x00, 0x74, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x40, 0x80, 0x00, 0x80, 0x00, 0x01, 0x00, 0x07, 0x03, 0x00, 0xff, 0x03, 0x00, 0xff, 0x01, 0x00, 0xfe, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3e, 0x00, 0x40, 0x0e, 0x00, 0x80, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x01, 0x00, 0x0e, 0x01, 0x00, 0x1e, 0x02, 0x00, 0xfe, 0x03, 0x00, 0xfe, 0x03, 0x10, 0xff, 0x00, 0x20, 0x3f, 0x00, 0xe0, 0x1f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define ori_destroyer_width 20 #define ori_destroyer_height 20 static char ori_destroyer_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x26, 0x00, 0xc0, 0x36, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xf6, 0x00, 0x70, 0xe6, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3e, 0x00, 0x80, 0x1e, 0x00, 0x80, 0x1e, 0x00, 0xf0, 0x0e, 0x00, 0xf0, 0x27, 0x00, 0xf8, 0x3f, 0x00, 0x38, 0x7f, 0x00, 0x1c, 0x73, 0x00, 0x0c, 0x70, 0x00, 0x04, 0x70, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x01, 0xe0, 0xf9, 0x00, 0xf0, 0x79, 0x00, 0xf8, 0x3f, 0x00, 0xfc, 0x0f, 0x00, 0x0e, 0x0f, 0x00, 0x82, 0x3f, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xf0, 0xc7, 0x07, 0xfc, 0xf3, 0x03, 0x9e, 0xf3, 0x03, 0x00, 0xff, 0x01, 0x80, 0x5f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x03, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x00, 0xf3, 0x01, 0xc0, 0xff, 0x07, 0xc0, 0xff, 0x07, 0x00, 0xf3, 0x01, 0x80, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0xf8, 0x03, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x5f, 0x00, 0x00, 0xff, 0x01, 0x9e, 0xf3, 0x03, 0xfc, 0xf3, 0x03, 0xf0, 0xc7, 0x07, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3d, 0x00, 0x82, 0x3f, 0x00, 0x0e, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x79, 0x00, 0xe0, 0xf9, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x08, 0xe0, 0x00, 0x18, 0xe0, 0x00, 0x38, 0xe6, 0x00, 0x70, 0xfe, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x4f, 0x00, 0xe0, 0x1d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x70, 0xe6, 0x00, 0xf0, 0xf6, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x36, 0x00, 0x40, 0x26, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x00, 0x60, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x00, 0x01, 0x70, 0x80, 0x01, 0x70, 0xc6, 0x01, 0xf0, 0xe7, 0x00, 0xe0, 0xff, 0x00, 0x20, 0x7f, 0x00, 0x80, 0x7b, 0x00, 0xc0, 0x0b, 0x00, 0xc0, 0x0b, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x0b, 0x00, 0xc0, 0x1f, 0x04, 0x00, 0x0f, 0x07, 0x00, 0xff, 0x03, 0xc0, 0xff, 0x01, 0xe0, 0xf9, 0x00, 0xf0, 0x79, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x1f, 0x00, 0xa0, 0x1f, 0x00, 0xf8, 0x0f, 0x00, 0xfc, 0x9c, 0x07, 0xfc, 0xfc, 0x03, 0x3e, 0xfe, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x03, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0xf0, 0x19, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x7f, 0x00, 0xf0, 0x19, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xf8, 0x03, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x3e, 0xfe, 0x00, 0xfc, 0xfc, 0x03, 0xfc, 0x9c, 0x07, 0xf8, 0x0f, 0x00, 0xa0, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x79, 0x00, 0xe0, 0xf9, 0x00, 0xc0, 0xff, 0x01, 0x00, 0xff, 0x03, 0x00, 0x0f, 0x07, 0xc0, 0x1f, 0x04, 0xc0, 0x0b, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x17, 0x00, 0x80, 0x17, 0x00, 0x00, 0xf7, 0x00, 0x40, 0xfe, 0x00, 0xc0, 0xff, 0x01, 0xe0, 0xcf, 0x01, 0xe0, 0x8c, 0x03, 0xe0, 0x00, 0x03, 0xe0, 0x00, 0x02, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define fed_destroyer_width 20 #define fed_destroyer_height 20 static char fed_destroyer_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x26, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xfe, 0x00, 0x80, 0xfe, 0x00, 0x80, 0x3c, 0x00, 0xc0, 0x0f, 0x00, 0x40, 0x6f, 0x00, 0x20, 0x3c, 0x00, 0x20, 0x20, 0x00, 0x20, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfd, 0x01, 0x80, 0xfd, 0x01, 0x40, 0xff, 0x01, 0x20, 0xff, 0x00, 0x10, 0x0e, 0x00, 0x08, 0x3c, 0x00, 0x04, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xfb, 0x03, 0xe0, 0xf9, 0x03, 0x38, 0xfb, 0x03, 0x0e, 0xff, 0x03, 0x00, 0xf6, 0x01, 0x00, 0xc6, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x01, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xe7, 0x00, 0x00, 0xf2, 0x01, 0x00, 0xfb, 0x03, 0x00, 0xff, 0x03, 0x00, 0xff, 0x03, 0x00, 0xfb, 0x03, 0x00, 0xf2, 0x01, 0xfc, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0xc6, 0x00, 0x00, 0xf6, 0x01, 0x0e, 0xff, 0x03, 0x38, 0xfb, 0x03, 0xe0, 0xf9, 0x03, 0x00, 0xfb, 0x03, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x04, 0x10, 0x00, 0x08, 0x3c, 0x00, 0x10, 0x0e, 0x00, 0x20, 0xff, 0x00, 0x40, 0xff, 0x01, 0x80, 0xfd, 0x01, 0x00, 0xfd, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x10, 0x08, 0x00, 0x10, 0x10, 0x00, 0x20, 0x10, 0x00, 0x20, 0x20, 0x00, 0x20, 0x3c, 0x00, 0x40, 0x6f, 0x00, 0xc0, 0x0f, 0x00, 0x80, 0x3c, 0x00, 0x80, 0xfe, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x26, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x81, 0x00, 0x80, 0x80, 0x00, 0x80, 0x40, 0x00, 0x40, 0x40, 0x00, 0xc0, 0x43, 0x00, 0x60, 0x2f, 0x00, 0x00, 0x3f, 0x00, 0xc0, 0x13, 0x00, 0xf0, 0x17, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x04, 0x80, 0x07, 0x02, 0x00, 0x0e, 0x01, 0xe0, 0x9f, 0x00, 0xf0, 0x5f, 0x00, 0xf0, 0x37, 0x00, 0xf0, 0x17, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x18, 0x00, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x30, 0x06, 0x00, 0xf8, 0x06, 0x00, 0xfc, 0x0f, 0x07, 0xfc, 0xcd, 0x01, 0xfc, 0x79, 0x00, 0xfc, 0x0d, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xfe, 0x03, 0xf8, 0x04, 0x00, 0xfc, 0x0d, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x0d, 0x00, 0xf8, 0x04, 0x00, 0x70, 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xfc, 0x0d, 0x00, 0xfc, 0x79, 0x00, 0xfc, 0xcd, 0x01, 0xfc, 0x0f, 0x07, 0xf8, 0x06, 0x00, 0x30, 0x06, 0x00, 0x80, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x18, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xf0, 0x17, 0x00, 0xf0, 0x37, 0x00, 0xf0, 0x5f, 0x00, 0xe0, 0x9f, 0x00, 0x00, 0x0e, 0x01, 0x80, 0x07, 0x02, 0x00, 0x01, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x2f, 0x00, 0x80, 0x27, 0x00, 0x00, 0x7e, 0x00, 0xc0, 0x5e, 0x00, 0x80, 0x87, 0x00, 0x80, 0x80, 0x00, 0x00, 0x81, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define rom_destroyer_width 20 #define rom_destroyer_height 20 static char rom_destroyer_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x04, 0x02, 0x08, 0x04, 0x02, 0x08, 0x04, 0x02, 0xf8, 0xff, 0x03, 0xf8, 0xff, 0x03, 0xc8, 0x7f, 0x02, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x10, 0x38, 0x00, 0x10, 0x08, 0x00, 0x08, 0x08, 0x00, 0x18, 0x04, 0x00, 0xfc, 0x04, 0x00, 0xf4, 0x07, 0x02, 0xe0, 0x0f, 0x02, 0xc0, 0x3f, 0x01, 0x80, 0xff, 0x01, 0x80, 0xff, 0x00, 0xc0, 0x83, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0xe0, 0x00, 0x10, 0xe0, 0x00, 0x38, 0xe0, 0x00, 0x70, 0x10, 0x00, 0xe0, 0x08, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x0f, 0x00, 0xf0, 0x1f, 0x01, 0xf8, 0xbc, 0x00, 0x68, 0x70, 0x00, 0x30, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x81, 0x07, 0xc0, 0x81, 0x03, 0xc0, 0xf3, 0x03, 0xc0, 0x1f, 0x00, 0xe0, 0x07, 0x00, 0xf8, 0x07, 0x00, 0xfe, 0x07, 0x00, 0x78, 0x0f, 0x00, 0x0c, 0x0e, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x03, 0x00, 0xfe, 0x83, 0x03, 0xfc, 0xff, 0x07, 0xfe, 0x83, 0x03, 0xc0, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x9c, 0x00, 0x0c, 0x0e, 0x00, 0x78, 0x0f, 0x00, 0xfe, 0x07, 0x00, 0xf8, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0xf3, 0x03, 0xc0, 0x81, 0x03, 0xc0, 0x81, 0x07, 0xc0, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x00, 0x68, 0x70, 0x00, 0xf8, 0xbc, 0x00, 0xf0, 0x1f, 0x01, 0xe0, 0x0f, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0x08, 0x00, 0x70, 0x10, 0x00, 0x38, 0xe0, 0x00, 0x10, 0xe0, 0x00, 0x20, 0xe0, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x83, 0x00, 0x80, 0xff, 0x00, 0x80, 0xff, 0x01, 0xc0, 0x3f, 0x01, 0xe0, 0x0f, 0x02, 0xf4, 0x07, 0x02, 0xfc, 0x04, 0x00, 0x18, 0x04, 0x00, 0x08, 0x08, 0x00, 0x10, 0x08, 0x00, 0x10, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0xc8, 0x7f, 0x02, 0xf8, 0xff, 0x03, 0xf8, 0xff, 0x03, 0x08, 0x04, 0x02, 0x08, 0x04, 0x02, 0x08, 0x04, 0x02, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x78, 0x00, 0x00, 0x38, 0x00, 0x10, 0x3c, 0x00, 0xf0, 0x1f, 0x00, 0xf8, 0x1f, 0x00, 0xc8, 0x3f, 0x00, 0x04, 0x7f, 0x00, 0x04, 0xfe, 0x02, 0x00, 0xf2, 0x03, 0x00, 0x82, 0x01, 0x00, 0x01, 0x01, 0x00, 0x81, 0x00, 0xc0, 0x81, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xc0, 0x00, 0xe0, 0x60, 0x01, 0xd0, 0xf3, 0x01, 0x88, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x71, 0x00, 0x80, 0xe0, 0x00, 0x70, 0xc0, 0x01, 0x70, 0x80, 0x00, 0x70, 0x40, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xe0, 0x01, 0x00, 0x90, 0x03, 0x00, 0x00, 0x07, 0x03, 0x00, 0xef, 0x01, 0x00, 0xfe, 0x07, 0x00, 0xfe, 0x01, 0x00, 0x7e, 0x00, 0x80, 0x3f, 0x00, 0xfc, 0x3c, 0x00, 0x1c, 0x38, 0x00, 0x1e, 0x38, 0x00, 0x00, 0x30, 0x00, 0x00, 0x70, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3c, 0x00, 0x1c, 0xfc, 0x07, 0xfe, 0xff, 0x03, 0x1c, 0xfc, 0x07, 0x00, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x38, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x60, 0x00, 0x3c, 0x70, 0x00, 0x38, 0x70, 0x00, 0xf8, 0x79, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x03, 0x00, 0xfc, 0x0f, 0x00, 0xde, 0x03, 0x00, 0x0e, 0x06, 0x20, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x70, 0x40, 0x00, 0x70, 0x80, 0x00, 0x70, 0xc0, 0x01, 0x80, 0xe0, 0x00, 0x00, 0x71, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7f, 0x00, 0x88, 0xff, 0x00, 0xd0, 0xf3, 0x01, 0xe0, 0x60, 0x01, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x81, 0x00, 0x00, 0x81, 0x00, 0x00, 0x01, 0x01, 0x00, 0x82, 0x01, 0x00, 0xf2, 0x03, 0x04, 0xfe, 0x02, 0x04, 0x7f, 0x00, 0xc8, 0x3f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0x10, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x78, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; static char sbexp_bits[7][800] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xef, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xfd, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xae, 0x22, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xf7, 0x3f, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x50, 0xbf, 0xbf, 0x85, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xee, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x91, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xf1, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x97, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0c, 0x8c, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x01, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x02, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x0c, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xe0, 0x0d, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0xc8, 0x07, 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x78, 0x2f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0xb0, 0x0a, 0x20, 0x77, 0x00, 0x00, 0x00, 0x00, 0x40, 0x13, 0x10, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x02, 0x78, 0xbb, 0x81, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xdc, 0xe7, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x78, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x40, 0x03, 0x74, 0x4b, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0xe8, 0x3e, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x80, 0x00, 0xf8, 0x49, 0x80, 0x09, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x40, 0x07, 0x00, 0x05, 0x1c, 0x00, 0x00, 0x00, 0x80, 0x09, 0x04, 0x80, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1d, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe3, 0x0b, 0x00, 0x22, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x8f, 0x10, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x4f, 0x20, 0x78, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x79, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7c, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xc0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x60, 0x06, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x64, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x08, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3b, 0x00, 0x00, 0xc0, 0x33, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x1b, 0x00, 0x00, 0x80, 0x42, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x30, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x03, 0x03, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0xe2, 0x82, 0x03, 0x00, 0x20, 0x00, 0x00, 0x40, 0x00, 0x00, 0x0e, 0x80, 0x03, 0x00, 0x4c, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0e, 0x80, 0x03, 0xec, 0x10, 0x00, 0x00, 0x60, 0x00, 0x00, 0x12, 0x00, 0x00, 0x05, 0x93, 0x01, 0x00, 0x20, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x5c, 0x0c, 0x00, 0x60, 0x00, 0x00, 0x30, 0x00, 0xc0, 0x05, 0x81, 0x10, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0xcc, 0x06, 0x00, 0x00, 0x20, 0x00, 0x00, 0x30, 0x00, 0x00, 0x28, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x80, 0x80, 0x22, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x80, 0x02, 0x20, 0x08, 0x00, 0x20, 0x02, 0x00, 0x38, 0x00, 0x00, 0x00, 0x11, 0x28, 0x00, 0x20, 0x06, 0x00, 0x20, 0x00, 0x80, 0x0e, 0xc0, 0x21, 0x00, 0x5c, 0x00, 0x00, 0x24, 0x00, 0x90, 0x40, 0x58, 0x04, 0x00, 0x20, 0x01, 0x00, 0x24, 0x00, 0x10, 0x22, 0x02, 0x05, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x28, 0xb6, 0x00, 0x00, 0x20, 0x01, 0x00, 0x70, 0x00, 0x00, 0x18, 0xc1, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x40, 0x83, 0x04, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x01, 0x80, 0xfc, 0x41, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x10, 0x02, 0x00, 0x40, 0x1d, 0x00, 0x00, 0x20, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x60, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x38, 0x00, 0x81, 0x0f, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0xf8, 0x02, 0x80, 0x0f, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xf8, 0x02, 0x80, 0x0f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x06, 0xc0, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x14, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x30, 0x00, 0x20, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xe0, 0x80, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x79, 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x19, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x90, 0x00, 0x00, 0x00, 0x40, 0x02, 0x02, 0x00, 0x80, 0x80, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x28, 0x90, 0x05, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x48, 0x05, 0x00, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x84, 0x00, 0x54, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x40, 0x05, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x02, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x08, 0x20, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x82, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x40, 0x40, 0x04, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0xa0, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x40, 0x02, 0x04, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x80, 0x84, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xc0, 0x05, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x04, 0x00, 0x02, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x10, 0x02, 0x00, 0x00, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x08, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x60, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xb8, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x01, 0x00, 0x01, 0x10, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x20, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x02, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x81, 0x07, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0d, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x02, 0x02, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x80, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define fed_galaxy_width 20 #define fed_galaxy_height 20 static char fed_galaxy_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x60, 0x6f, 0x00, 0x60, 0x6f, 0x00, 0x60, 0x66, 0x00, 0x60, 0x6f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x7f, 0x00, 0xc0, 0xff, 0x00, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x01, 0x20, 0xff, 0x00, 0x70, 0x7f, 0x00, 0x30, 0x07, 0x00, 0xf8, 0x33, 0x00, 0xf8, 0x33, 0x00, 0xec, 0x1f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xff, 0x01, 0x00, 0xff, 0x01, 0x00, 0xff, 0x03, 0x40, 0xff, 0x03, 0xe0, 0xfe, 0x03, 0x70, 0xff, 0x03, 0x38, 0xff, 0x01, 0xfc, 0xf7, 0x00, 0xe8, 0x09, 0x00, 0xc0, 0x1d, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfe, 0x01, 0xc0, 0xfe, 0x01, 0xf0, 0xfe, 0x03, 0x3c, 0xfe, 0x03, 0x3e, 0xff, 0x03, 0xf8, 0xff, 0x03, 0xf0, 0xff, 0x03, 0xf0, 0xf8, 0x01, 0xe0, 0xf2, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0xfc, 0xfd, 0x01, 0xfc, 0xfd, 0x01, 0x18, 0xfe, 0x03, 0xb8, 0xff, 0x03, 0xf8, 0xff, 0x03, 0xf8, 0xff, 0x03, 0xb8, 0xff, 0x03, 0x18, 0xfe, 0x03, 0xfc, 0xfd, 0x01, 0xfc, 0xfd, 0x01, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xe0, 0xf2, 0x00, 0xf0, 0xf8, 0x01, 0xf0, 0xff, 0x03, 0xf8, 0xff, 0x03, 0x3e, 0xff, 0x03, 0x3c, 0xfe, 0x03, 0xf0, 0xfe, 0x03, 0xc0, 0xfe, 0x01, 0x00, 0xfe, 0x01, 0x00, 0xfc, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x1d, 0x00, 0xe8, 0x09, 0x00, 0xfc, 0xf7, 0x00, 0x38, 0xff, 0x01, 0x70, 0xff, 0x03, 0xe0, 0xfe, 0x03, 0x40, 0xff, 0x03, 0x00, 0xff, 0x03, 0x00, 0xff, 0x01, 0x00, 0xff, 0x01, 0x00, 0xfe, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x1f, 0x00, 0xec, 0x1f, 0x00, 0xf8, 0x33, 0x00, 0xf8, 0x33, 0x00, 0x30, 0x07, 0x00, 0x70, 0x7f, 0x00, 0x20, 0xff, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x6f, 0x00, 0x60, 0x66, 0x00, 0x60, 0x6f, 0x00, 0x60, 0x6f, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x7f, 0x03, 0xc0, 0xfc, 0x01, 0xc0, 0xfc, 0x01, 0x00, 0xce, 0x00, 0xe0, 0xef, 0x00, 0xf0, 0x4f, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x77, 0x00, 0x00, 0xf2, 0x02, 0xe0, 0xfd, 0x07, 0xf0, 0x9f, 0x03, 0xf8, 0xdf, 0x01, 0xf8, 0xef, 0x00, 0xf8, 0x5f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x70, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7e, 0x00, 0xf0, 0x74, 0x00, 0xf8, 0xf1, 0x00, 0xfc, 0xff, 0x00, 0xfc, 0xff, 0x01, 0xfc, 0xcf, 0x07, 0xfc, 0xc7, 0x03, 0xfc, 0xf7, 0x00, 0xf8, 0x37, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf8, 0xfb, 0x03, 0xf8, 0xfb, 0x03, 0xfc, 0x87, 0x01, 0xfc, 0xdf, 0x01, 0xfc, 0xff, 0x01, 0xfc, 0xff, 0x01, 0xfc, 0xdf, 0x01, 0xfc, 0x87, 0x01, 0xf8, 0xfb, 0x03, 0xf8, 0xfb, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x03, 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x37, 0x00, 0xfc, 0xf7, 0x00, 0xfc, 0xc7, 0x03, 0xfc, 0xcf, 0x07, 0xfc, 0xff, 0x01, 0xfc, 0xff, 0x00, 0xf8, 0xf1, 0x00, 0xf0, 0x74, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x70, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xe0, 0x0f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x5f, 0x00, 0xf8, 0xef, 0x00, 0xf8, 0xdf, 0x01, 0xf0, 0x9f, 0x03, 0xe0, 0xfd, 0x07, 0x00, 0xf2, 0x02, 0x00, 0x77, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0x4f, 0x00, 0xe0, 0xef, 0x00, 0x00, 0xce, 0x00, 0xc0, 0xfc, 0x01, 0xc0, 0xfc, 0x01, 0x80, 0x7f, 0x03, 0x80, 0x1f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}}; #define rom_galaxy_width 20 #define rom_galaxy_height 20 static char rom_galaxy_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x04, 0x06, 0x02, 0xc4, 0x3f, 0x02, 0x7c, 0xef, 0x03, 0x0c, 0x06, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xf8, 0xff, 0x01, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3c, 0x00, 0x10, 0x38, 0x00, 0x18, 0x0c, 0x00, 0x18, 0x0c, 0x00, 0xfc, 0x0e, 0x00, 0xcc, 0x07, 0x00, 0x3c, 0x0f, 0x00, 0xfc, 0x3b, 0x03, 0xf8, 0xe7, 0x01, 0xf8, 0xdf, 0x01, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x01, 0xe0, 0xe0, 0x01, 0x70, 0xe0, 0x01, 0x78, 0xf0, 0x00, 0xd8, 0x3b, 0x00, 0x38, 0x1f, 0x00, 0x78, 0x0f, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0x93, 0x01, 0xf0, 0xf7, 0x00, 0xf0, 0xef, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xb8, 0xc1, 0x03, 0x78, 0xc1, 0x03, 0x78, 0xfb, 0x01, 0xf8, 0xbe, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x0d, 0x00, 0xfc, 0x0d, 0x00, 0xf8, 0x1b, 0x00, 0xf0, 0xfb, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x02, 0x00, 0xf8, 0x02, 0x00, 0xf8, 0x06, 0x00, 0xfc, 0x04, 0x00, 0xfe, 0xc6, 0x00, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0xfe, 0xc6, 0x00, 0xfc, 0x04, 0x00, 0xf8, 0x06, 0x00, 0xf8, 0x02, 0x00, 0xf0, 0x02, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xf0, 0x7b, 0x00, 0xf8, 0x0b, 0x00, 0xfc, 0x0d, 0x00, 0xfc, 0x0d, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0xbe, 0x00, 0x78, 0xfb, 0x01, 0x78, 0xc1, 0x03, 0xb8, 0xc1, 0x03, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xef, 0x00, 0xf0, 0xf7, 0x00, 0xf0, 0x93, 0x01, 0xf8, 0x1f, 0x00, 0xf8, 0x1f, 0x00, 0x78, 0x0f, 0x00, 0x38, 0x1f, 0x00, 0xd8, 0x3b, 0x00, 0x78, 0xf0, 0x00, 0x70, 0xe0, 0x01, 0xe0, 0xe0, 0x01, 0x80, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x3f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf8, 0xdf, 0x01, 0xf8, 0xe7, 0x01, 0xfc, 0x3b, 0x03, 0x3c, 0x0f, 0x02, 0xcc, 0x07, 0x00, 0xfc, 0x0e, 0x00, 0x18, 0x0c, 0x00, 0x18, 0x0c, 0x00, 0x10, 0x38, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf8, 0xff, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0x0c, 0x06, 0x03, 0x7c, 0xef, 0x03, 0xc4, 0x3f, 0x02, 0x04, 0x06, 0x02, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0xc0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xb8, 0xff, 0x01, 0x78, 0xfe, 0x01, 0xcc, 0xfd, 0x03, 0x04, 0xcf, 0x03, 0x00, 0x3e, 0x03, 0x00, 0xf7, 0x03, 0x00, 0x83, 0x01, 0x00, 0x83, 0x01, 0xc0, 0x81, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xe0, 0x7f, 0x00, 0x70, 0xff, 0x00, 0xf0, 0xfe, 0x00, 0x98, 0xfc, 0x00, 0x80, 0xff, 0x01, 0x80, 0xff, 0x01, 0x00, 0xef, 0x01, 0x80, 0xcf, 0x01, 0xc0, 0xbd, 0x01, 0xf0, 0xe0, 0x01, 0x78, 0xe0, 0x00, 0x78, 0x70, 0x00, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0xfd, 0x00, 0x00, 0xfd, 0x01, 0x00, 0xfb, 0x03, 0x00, 0xfb, 0x03, 0x00, 0xfe, 0x03, 0x00, 0xff, 0x03, 0xd0, 0xf7, 0x01, 0xf8, 0xed, 0x01, 0x3c, 0xe8, 0x01, 0x3c, 0xd8, 0x01, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x7a, 0x00, 0x00, 0xfa, 0x00, 0x00, 0xfb, 0x00, 0x00, 0xf9, 0x01, 0x18, 0xfb, 0x03, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0x18, 0xfb, 0x03, 0x00, 0xf9, 0x01, 0x00, 0xfb, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x3e, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x38, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x3c, 0xd8, 0x01, 0x3c, 0xe8, 0x01, 0xf8, 0xed, 0x01, 0xd0, 0xf7, 0x01, 0x00, 0xff, 0x03, 0x00, 0xfe, 0x03, 0x00, 0xfb, 0x03, 0x00, 0xfb, 0x03, 0x00, 0xfd, 0x01, 0xe0, 0xfd, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x10, 0x00, 0x78, 0x70, 0x00, 0x78, 0xe0, 0x00, 0xf0, 0xe0, 0x01, 0xe0, 0xbd, 0x01, 0x80, 0xcf, 0x01, 0x40, 0xef, 0x01, 0x80, 0xff, 0x01, 0x80, 0xff, 0x01, 0x98, 0xfe, 0x00, 0xf0, 0xfe, 0x00, 0x70, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0xc0, 0x81, 0x00, 0x00, 0x83, 0x01, 0x00, 0x83, 0x01, 0x00, 0xf7, 0x03, 0x00, 0x3e, 0x03, 0x04, 0xcf, 0x03, 0xcc, 0xfd, 0x03, 0x78, 0xfe, 0x01, 0xb8, 0xff, 0x01, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define kli_galaxy_width 20 #define kli_galaxy_height 20 static char kli_galaxy_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x02, 0x06, 0x04, 0x02, 0x06, 0x04, 0x02, 0x06, 0x04, 0x02, 0x0f, 0x04, 0x06, 0x0f, 0x06, 0x9e, 0x9f, 0x07, 0xfe, 0xf9, 0x07, 0xbc, 0xdf, 0x03, 0xb8, 0xdf, 0x01, 0xb0, 0xdf, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x38, 0x00, 0x08, 0x38, 0x00, 0x08, 0x38, 0x00, 0x0c, 0x0c, 0x00, 0x04, 0x0c, 0x00, 0x06, 0x06, 0x00, 0x8e, 0x07, 0x04, 0xfe, 0x07, 0x04, 0xbe, 0x0e, 0x02, 0xde, 0x0d, 0x02, 0xdc, 0x9f, 0x03, 0xec, 0xfd, 0x01, 0xf8, 0xfe, 0x01, 0xf8, 0xfe, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0xc0, 0x01, 0x0c, 0xe0, 0x01, 0x1c, 0xe0, 0x01, 0x3c, 0xf0, 0x00, 0x3c, 0x38, 0x00, 0xfc, 0x1f, 0x00, 0xbc, 0x0d, 0x00, 0xdc, 0x0b, 0x00, 0xe8, 0x0f, 0x00, 0xf8, 0x0f, 0x00, 0xf8, 0x0b, 0x00, 0xf8, 0x3d, 0x04, 0xf0, 0x7e, 0x02, 0xe0, 0xff, 0x01, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0xc0, 0x01, 0x00, 0x60, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x3c, 0xc0, 0x03, 0x7c, 0xc0, 0x03, 0xfe, 0xf1, 0x01, 0xfe, 0xbf, 0x00, 0x5e, 0x0f, 0x00, 0xe6, 0x06, 0x00, 0xfc, 0x07, 0x00, 0xfc, 0x02, 0x00, 0x3c, 0x03, 0x00, 0xd8, 0x03, 0x01, 0xf8, 0xe7, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x88, 0x00, 0x00, 0xfc, 0x01, 0x00, 0xfe, 0x87, 0x01, 0x7e, 0xff, 0x03, 0x7e, 0xff, 0x03, 0xfe, 0x87, 0x01, 0xfc, 0x01, 0x00, 0x88, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0xe0, 0x3f, 0x00, 0xf8, 0xe7, 0x00, 0xd8, 0x83, 0x01, 0x3c, 0x03, 0x00, 0xfc, 0x02, 0x00, 0xfc, 0x07, 0x00, 0xe6, 0x06, 0x00, 0x5e, 0x0f, 0x00, 0xfe, 0xbf, 0x00, 0xfe, 0xf1, 0x01, 0x7c, 0xc0, 0x03, 0x3c, 0xc0, 0x03, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xe0, 0xff, 0x01, 0xf0, 0x7e, 0x02, 0xf8, 0x3d, 0x04, 0xf8, 0x0b, 0x00, 0xf8, 0x0f, 0x00, 0xe8, 0x0f, 0x00, 0xd8, 0x0b, 0x00, 0xbc, 0x0d, 0x00, 0xfc, 0x1f, 0x00, 0x3c, 0x38, 0x00, 0x3c, 0xf0, 0x00, 0x1c, 0xe0, 0x01, 0x0c, 0xe0, 0x01, 0x08, 0xc0, 0x01, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xe0, 0x7f, 0x00, 0xf8, 0xfe, 0x00, 0xf8, 0xfe, 0x00, 0xec, 0xfd, 0x01, 0xdc, 0x9f, 0x03, 0xde, 0x0d, 0x02, 0xbe, 0x0e, 0x02, 0xfe, 0x07, 0x04, 0x8e, 0x07, 0x04, 0x06, 0x06, 0x00, 0x04, 0x0c, 0x00, 0x0c, 0x0c, 0x00, 0x08, 0x38, 0x00, 0x18, 0x3c, 0x00, 0x10, 0x38, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xb0, 0xdf, 0x00, 0xb8, 0xdf, 0x01, 0xbc, 0xdf, 0x03, 0xfe, 0xf9, 0x07, 0x9e, 0x9f, 0x07, 0x06, 0x0f, 0x06, 0x02, 0x0f, 0x04, 0x02, 0x06, 0x04, 0x02, 0x06, 0x04, 0x02, 0x06, 0x04, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf7, 0x01, 0xf0, 0xf7, 0x01, 0xf8, 0x7b, 0x03, 0x98, 0xbf, 0x03, 0x0c, 0xbb, 0x07, 0x04, 0xd7, 0x07, 0x04, 0xfe, 0x07, 0x00, 0x1e, 0x07, 0x00, 0x06, 0x06, 0x00, 0x03, 0x02, 0x00, 0x03, 0x03, 0x80, 0x01, 0x01, 0xc0, 0x81, 0x01, 0xc0, 0x81, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x00, 0xf8, 0x7f, 0x00, 0xe4, 0xf7, 0x00, 0xc2, 0xfb, 0x01, 0x00, 0xfd, 0x01, 0x00, 0xff, 0x01, 0x00, 0x7f, 0x01, 0x00, 0xbd, 0x03, 0x00, 0xdb, 0x03, 0x80, 0xff, 0x03, 0xc0, 0xc1, 0x03, 0xf0, 0xc0, 0x03, 0x78, 0x80, 0x03, 0x78, 0x00, 0x03, 0x38, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0x70, 0xff, 0x01, 0x08, 0xbc, 0x01, 0x00, 0xcc, 0x03, 0x00, 0xf4, 0x03, 0x00, 0xfe, 0x03, 0x00, 0x76, 0x06, 0x00, 0xaf, 0x07, 0xc0, 0xff, 0x07, 0xf8, 0xf8, 0x07, 0x3c, 0xe0, 0x03, 0x3c, 0xc0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf0, 0x01, 0x00, 0x10, 0x01, 0x00, 0xf8, 0x03, 0x18, 0xfe, 0x07, 0xfc, 0xef, 0x07, 0xfc, 0xef, 0x07, 0x18, 0xfe, 0x07, 0x00, 0xf8, 0x03, 0x00, 0x10, 0x01, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x01, 0x1e, 0xc0, 0x01, 0x1e, 0xe0, 0x01, 0x7c, 0xf0, 0x03, 0xe8, 0xff, 0x03, 0x80, 0x97, 0x03, 0x00, 0x7b, 0x02, 0x00, 0xfb, 0x03, 0x00, 0xfe, 0x01, 0x00, 0xe6, 0x01, 0x04, 0x9e, 0x01, 0x38, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x38, 0x00, 0x01, 0x78, 0x00, 0x03, 0x78, 0x80, 0x03, 0xf0, 0xc0, 0x03, 0xc0, 0xc1, 0x03, 0x80, 0xff, 0x03, 0x00, 0xdb, 0x03, 0x00, 0xbd, 0x01, 0x00, 0x7f, 0x01, 0x00, 0xff, 0x01, 0x00, 0xfd, 0x01, 0xc2, 0xfb, 0x01, 0xe4, 0xf7, 0x00, 0xf8, 0x7f, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x81, 0x01, 0xc0, 0x03, 0x01, 0xc0, 0x01, 0x03, 0x00, 0x03, 0x02, 0x00, 0x03, 0x06, 0x00, 0x06, 0x06, 0x00, 0x1e, 0x07, 0x02, 0xfe, 0x07, 0x06, 0xd6, 0x07, 0x04, 0xbb, 0x07, 0x0c, 0xbf, 0x03, 0xf8, 0x7b, 0x03, 0xf8, 0xf7, 0x01, 0xf0, 0xf7, 0x01, 0xe0, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00}}; #define ori_galaxy_width 20 #define ori_galaxy_height 20 static char ori_galaxy_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xa0, 0x5f, 0x00, 0xb0, 0xdf, 0x00, 0x90, 0x96, 0x00, 0x90, 0x96, 0x00, 0x18, 0x86, 0x01, 0x18, 0x8f, 0x01, 0xd8, 0xbf, 0x01, 0x78, 0xe6, 0x01, 0x18, 0x8f, 0x01, 0x78, 0xe6, 0x01, 0xf8, 0xf6, 0x01, 0x98, 0x9f, 0x01, 0x30, 0xcf, 0x00, 0x20, 0x4f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x80, 0x78, 0x00, 0xe0, 0x7c, 0x00, 0x20, 0x7a, 0x00, 0x30, 0x58, 0x00, 0x30, 0x5c, 0x02, 0x78, 0x0f, 0x03, 0xf8, 0x0f, 0x03, 0x1c, 0x0f, 0x01, 0xdc, 0x9f, 0x01, 0x94, 0xb3, 0x01, 0xb0, 0xe7, 0x00, 0xe0, 0xf1, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x73, 0x00, 0xc0, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0xe3, 0x01, 0xc0, 0xf9, 0x01, 0xe0, 0xe4, 0x01, 0x70, 0xf0, 0x01, 0xf8, 0xbb, 0x00, 0x3c, 0x9f, 0x00, 0x7c, 0x4e, 0x02, 0x64, 0x1f, 0x03, 0xa4, 0x9b, 0x01, 0xf0, 0xd1, 0x00, 0xf0, 0xf6, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x3c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x80, 0x0f, 0x00, 0xe0, 0x01, 0x00, 0x78, 0xf0, 0x03, 0xfc, 0xc0, 0x03, 0xb4, 0xf1, 0x03, 0x10, 0xff, 0x01, 0x50, 0x9f, 0x00, 0xd8, 0x4f, 0x00, 0xf8, 0x0f, 0x00, 0xfc, 0x0d, 0x03, 0x3c, 0xcd, 0x01, 0x78, 0x7c, 0x00, 0xc0, 0x3d, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0xf8, 0x7f, 0x00, 0x6c, 0xc1, 0x00, 0x60, 0x03, 0x00, 0x30, 0xf2, 0x00, 0x9c, 0xc6, 0x01, 0xfe, 0xff, 0x03, 0xfe, 0xff, 0x03, 0x9c, 0xc6, 0x01, 0x30, 0xf2, 0x00, 0x60, 0x03, 0x00, 0x6c, 0xc1, 0x00, 0xf8, 0x7f, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0x78, 0xfc, 0x00, 0x3c, 0x8d, 0x01, 0xfc, 0x05, 0x03, 0xfc, 0x0f, 0x00, 0xd8, 0x4f, 0x00, 0x50, 0x9f, 0x00, 0x10, 0xff, 0x01, 0xbc, 0xf1, 0x03, 0xfc, 0xc0, 0x03, 0x78, 0xf0, 0x03, 0xe0, 0x01, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x3c, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0xf0, 0xd1, 0x00, 0xa4, 0x9b, 0x01, 0x64, 0x1f, 0x03, 0x7c, 0x4e, 0x02, 0x38, 0x9f, 0x00, 0xf8, 0xbb, 0x00, 0x70, 0xf0, 0x01, 0xe0, 0xe4, 0x01, 0xc0, 0xf9, 0x01, 0x00, 0xe3, 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x31, 0x00, 0xe0, 0x73, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0xf1, 0x00, 0xb0, 0xe7, 0x00, 0x94, 0xb3, 0x01, 0xdc, 0x9f, 0x01, 0x1c, 0x0f, 0x01, 0xf8, 0x0f, 0x03, 0x78, 0x0f, 0x02, 0x30, 0x5c, 0x02, 0x30, 0x58, 0x00, 0x20, 0x7a, 0x00, 0x60, 0x7c, 0x00, 0xc0, 0x78, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x20, 0x4f, 0x00, 0x30, 0xcf, 0x00, 0x98, 0x9f, 0x01, 0xf8, 0xf6, 0x01, 0x78, 0xe6, 0x01, 0x18, 0x8f, 0x01, 0x78, 0xe6, 0x01, 0xd8, 0xbf, 0x01, 0x18, 0x8f, 0x01, 0x18, 0x86, 0x01, 0x90, 0x96, 0x00, 0x90, 0x96, 0x00, 0xb0, 0xdf, 0x00, 0xa0, 0x5f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x38, 0x00, 0xe0, 0x7c, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0x78, 0x00, 0x70, 0xde, 0x00, 0xd8, 0x9c, 0x02, 0x98, 0xbf, 0x03, 0x08, 0x8f, 0x03, 0x0c, 0xff, 0x01, 0x0c, 0xef, 0x01, 0xa4, 0xc3, 0x00, 0xa0, 0xc1, 0x00, 0xe0, 0x45, 0x00, 0xe0, 0x63, 0x00, 0xe0, 0x21, 0x00, 0xe0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x73, 0x00, 0xe0, 0xff, 0x00, 0xf0, 0xf6, 0x00, 0xb0, 0xf8, 0x00, 0x98, 0x5d, 0x02, 0x8c, 0x6f, 0x02, 0x24, 0xe7, 0x03, 0x90, 0xcf, 0x03, 0xd0, 0xfd, 0x01, 0xf8, 0xe0, 0x00, 0x78, 0x72, 0x00, 0xf8, 0x39, 0x00, 0x78, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xf0, 0xe3, 0x01, 0x18, 0xcb, 0x03, 0x0c, 0xfa, 0x03, 0x00, 0xff, 0x03, 0x20, 0xbf, 0x01, 0x90, 0xaf, 0x00, 0xf8, 0x8f, 0x00, 0xfc, 0xd8, 0x03, 0x3c, 0xf0, 0x03, 0xfc, 0xe0, 0x01, 0x00, 0x78, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xe0, 0xff, 0x01, 0x30, 0x68, 0x03, 0x00, 0x6c, 0x00, 0xf0, 0xc4, 0x00, 0x38, 0x96, 0x03, 0xfc, 0xff, 0x07, 0xfc, 0xff, 0x07, 0x38, 0x96, 0x03, 0xf0, 0xc4, 0x00, 0x00, 0x6c, 0x00, 0x30, 0x68, 0x03, 0xe0, 0xff, 0x01, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x78, 0x00, 0xfc, 0xe0, 0x01, 0x3c, 0xf0, 0x03, 0xfc, 0xd8, 0x03, 0xf8, 0x8f, 0x00, 0x90, 0xaf, 0x00, 0x20, 0xbf, 0x01, 0x00, 0xff, 0x03, 0x0c, 0xfa, 0x03, 0x18, 0xcb, 0x03, 0xf0, 0xe3, 0x01, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x78, 0x0c, 0x00, 0xf8, 0x39, 0x00, 0x78, 0x72, 0x00, 0xf8, 0xe0, 0x00, 0xd0, 0xfd, 0x01, 0x90, 0xcf, 0x01, 0x24, 0xe7, 0x03, 0x8c, 0x6f, 0x02, 0x98, 0x5d, 0x02, 0xb0, 0xf8, 0x00, 0xf0, 0xf6, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0x73, 0x00, 0x80, 0x03, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x00, 0xe0, 0x31, 0x00, 0xe0, 0x63, 0x00, 0xe0, 0x45, 0x00, 0xa0, 0xc1, 0x00, 0xa4, 0xc3, 0x00, 0x0c, 0xef, 0x01, 0x0c, 0xff, 0x01, 0x08, 0x8f, 0x03, 0x98, 0xbf, 0x03, 0xd8, 0x9c, 0x02, 0x70, 0xde, 0x00, 0xf0, 0x78, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7c, 0x00, 0xc0, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define ind_galaxy_width 20 #define ind_galaxy_height 20 static char ind_galaxy_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x04, 0x06, 0x02, 0x84, 0x16, 0x02, 0x84, 0x16, 0x02, 0xc4, 0x3f, 0x02, 0xce, 0x39, 0x07, 0xfe, 0xf9, 0x07, 0xfe, 0xf9, 0x07, 0xb8, 0xdf, 0x01, 0xf8, 0xff, 0x01, 0xb0, 0xdf, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x30, 0x00, 0x10, 0x18, 0x00, 0x08, 0x18, 0x00, 0x0c, 0x1d, 0x00, 0x8e, 0x0d, 0x00, 0xde, 0x2f, 0x00, 0xfe, 0x1f, 0x04, 0xfc, 0x3d, 0x02, 0xfc, 0x3c, 0x02, 0xfc, 0xbd, 0x03, 0xfc, 0xff, 0x03, 0xf8, 0xff, 0x03, 0xe0, 0xff, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0x3d, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x38, 0x40, 0x00, 0x3c, 0xe0, 0x00, 0x3c, 0x74, 0x00, 0xfc, 0x3b, 0x00, 0xfc, 0x1f, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x3c, 0x00, 0xf4, 0x1c, 0x00, 0xfc, 0x1f, 0x02, 0xf8, 0x1f, 0x02, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x00, 0xf0, 0xfe, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x78, 0x00, 0x00, 0xfc, 0x0b, 0x01, 0xfc, 0xe7, 0x03, 0xfc, 0xff, 0x00, 0xfc, 0x3f, 0x00, 0x78, 0x0c, 0x00, 0xfc, 0x3e, 0x00, 0xfe, 0x1f, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x07, 0x00, 0xe0, 0x8f, 0x01, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0x01, 0x00, 0xa8, 0x07, 0x00, 0xf8, 0x1f, 0x00, 0xfc, 0x07, 0x00, 0x7e, 0xfc, 0x03, 0x7e, 0xfc, 0x03, 0xfc, 0x07, 0x00, 0xf8, 0x1f, 0x00, 0xa8, 0x07, 0x00, 0xf8, 0x01, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x03, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x8f, 0x01, 0xf8, 0x07, 0x00, 0xfc, 0x0f, 0x00, 0xfe, 0x1f, 0x00, 0xfc, 0x3e, 0x00, 0x78, 0x0c, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0xff, 0x00, 0xfc, 0xe7, 0x03, 0xfc, 0x0b, 0x01, 0x78, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0xf0, 0xfe, 0x00, 0xf8, 0xff, 0x00, 0xf8, 0xff, 0x01, 0xf8, 0x1f, 0x02, 0xfc, 0x1f, 0x02, 0xf4, 0x1c, 0x00, 0xfc, 0x1c, 0x00, 0xfc, 0x2f, 0x00, 0xfc, 0x1f, 0x00, 0xfc, 0x3b, 0x00, 0x3c, 0x74, 0x00, 0x3c, 0xe0, 0x00, 0x38, 0x40, 0x00, 0x20, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x3d, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0xff, 0x01, 0xf8, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xbd, 0x03, 0xfc, 0x3c, 0x02, 0xfc, 0x3d, 0x02, 0xfe, 0x1f, 0x04, 0xde, 0x2f, 0x00, 0x8e, 0x0d, 0x00, 0x0c, 0x1d, 0x00, 0x08, 0x18, 0x00, 0x10, 0x18, 0x00, 0x10, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xe0, 0x7f, 0x00, 0xb0, 0xdf, 0x00, 0xf8, 0xff, 0x01, 0xb8, 0xdf, 0x01, 0xfe, 0xf9, 0x07, 0xfe, 0xf9, 0x07, 0xce, 0x39, 0x07, 0xc4, 0x3f, 0x02, 0x84, 0x16, 0x02, 0x84, 0x16, 0x02, 0x04, 0x06, 0x02, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xc0, 0x3b, 0x00, 0xe0, 0x7f, 0x00, 0xf8, 0x7f, 0x00, 0xfc, 0xff, 0x01, 0xfc, 0xff, 0x03, 0xdc, 0xfb, 0x03, 0xc4, 0xf3, 0x03, 0xc4, 0xfb, 0x03, 0x82, 0xff, 0x07, 0x40, 0xbf, 0x07, 0x00, 0x1b, 0x07, 0x80, 0x0b, 0x03, 0x80, 0x01, 0x01, 0x80, 0x81, 0x00, 0xc0, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0xf7, 0x00, 0xf0, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x84, 0xff, 0x01, 0x84, 0xff, 0x03, 0x80, 0xf3, 0x02, 0x80, 0xf3, 0x03, 0x40, 0xff, 0x03, 0x80, 0xff, 0x03, 0xc0, 0xfd, 0x03, 0xe0, 0xc4, 0x03, 0x70, 0xc0, 0x03, 0x20, 0xc0, 0x01, 0x00, 0x40, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0x18, 0x7f, 0x00, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x03, 0x80, 0xff, 0x07, 0xc0, 0xf7, 0x03, 0x00, 0xe3, 0x01, 0xc0, 0xff, 0x03, 0xf0, 0xff, 0x03, 0x7c, 0xfe, 0x03, 0x08, 0xfd, 0x03, 0x00, 0xe0, 0x01, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf8, 0x00, 0x00, 0xf8, 0x01, 0x00, 0x5e, 0x01, 0x80, 0xff, 0x01, 0x00, 0xfe, 0x03, 0xfc, 0xe3, 0x07, 0xfc, 0xe3, 0x07, 0x00, 0xfe, 0x03, 0x80, 0xff, 0x01, 0x00, 0x5e, 0x01, 0x00, 0xf8, 0x01, 0x00, 0xf8, 0x00, 0x00, 0x7c, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xe0, 0x01, 0x08, 0xfd, 0x03, 0x7c, 0xfe, 0x03, 0xf0, 0xff, 0x03, 0xc0, 0xff, 0x03, 0x00, 0xe3, 0x01, 0xc0, 0xf7, 0x03, 0x80, 0xff, 0x07, 0x00, 0xff, 0x03, 0x00, 0xfe, 0x01, 0x18, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x40, 0x00, 0x20, 0xc0, 0x01, 0x70, 0xc0, 0x03, 0xe0, 0xc4, 0x03, 0xc0, 0xfd, 0x03, 0x80, 0xff, 0x03, 0x00, 0xff, 0x03, 0xc0, 0xf3, 0x03, 0x80, 0xf3, 0x02, 0x84, 0xff, 0x03, 0x84, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf0, 0xff, 0x01, 0xf0, 0xf7, 0x00, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x80, 0x00, 0x80, 0x81, 0x00, 0x80, 0x01, 0x01, 0x80, 0x0b, 0x03, 0x00, 0x1b, 0x07, 0x40, 0xbf, 0x07, 0x82, 0xff, 0x07, 0xc4, 0xfb, 0x03, 0xc4, 0xf3, 0x03, 0xdc, 0xfb, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x01, 0xf8, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3b, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, }; #define ind_scout_width 20 #define ind_scout_height 20 static char ind_scout_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x40, 0x26, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x76, 0x00, 0x30, 0xc6, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x40, 0x0c, 0x00, 0x40, 0x07, 0x00, 0xe0, 0x2f, 0x00, 0xf0, 0x3f, 0x00, 0xd8, 0x1f, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x1d, 0x00, 0x00, 0x31, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x80, 0x38, 0x00, 0xc0, 0x1c, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x07, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x1f, 0x00, 0xe0, 0x0e, 0x00, 0x40, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0xf0, 0x61, 0x00, 0xe0, 0xfb, 0x00, 0xe0, 0x3f, 0x00, 0xc0, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xe0, 0x03, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x80, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x01, 0x00, 0x80, 0x03, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x01, 0x00, 0xc0, 0x07, 0x00, 0x60, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x03, 0x00, 0x80, 0x0f, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0xfb, 0x00, 0xf0, 0x61, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x40, 0x06, 0x00, 0xe0, 0x0e, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x07, 0x00, 0xe0, 0x07, 0x00, 0xfc, 0x0f, 0x00, 0xc0, 0x1c, 0x00, 0x80, 0x38, 0x00, 0x00, 0x70, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x31, 0x00, 0x80, 0x1d, 0x00, 0x80, 0x1f, 0x00, 0xd8, 0x1f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x2f, 0x00, 0x40, 0x07, 0x00, 0x40, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x30, 0xc6, 0x00, 0xe0, 0x76, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x26, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x08, 0x00, 0x80, 0x1b, 0x00, 0x80, 0x1f, 0x00, 0x80, 0xbf, 0x01, 0xc0, 0xff, 0x00, 0x40, 0x7f, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x23, 0x00, 0x00, 0x03, 0x00, 0x80, 0x03, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x26, 0x00, 0x00, 0x77, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x03, 0x80, 0x33, 0x00, 0xc0, 0x11, 0x00, 0xe0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x3e, 0x00, 0xc0, 0x7f, 0x00, 0xf0, 0x7d, 0x00, 0x60, 0xf8, 0x00, 0x00, 0x8c, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x60, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1c, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x60, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x01, 0x60, 0xf8, 0x00, 0xf0, 0x7d, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x18, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x11, 0x00, 0x80, 0x33, 0x00, 0x00, 0xff, 0x03, 0x00, 0xfe, 0x01, 0x00, 0x1e, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x77, 0x00, 0x00, 0x26, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x23, 0x00, 0x00, 0x2e, 0x00, 0x40, 0x7f, 0x00, 0xc0, 0xff, 0x00, 0x80, 0xbf, 0x01, 0x80, 0x1f, 0x00, 0x80, 0x1b, 0x00, 0xc0, 0x08, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; #define ind_cruiser_width 20 #define ind_cruiser_height 20 static char ind_cruiser_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x19, 0x00, 0xc0, 0x39, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x60, 0x6f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x6f, 0x00, 0x60, 0x6f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x66, 0x00, 0x60, 0x66, 0x00, 0x20, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x4f, 0x00, 0x80, 0xef, 0x00, 0x00, 0xfe, 0x00, 0x40, 0xfe, 0x01, 0xc0, 0xfe, 0x00, 0xe0, 0x1f, 0x00, 0x60, 0x2f, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0x6f, 0x00, 0xf0, 0x3f, 0x00, 0x98, 0x3f, 0x00, 0x88, 0x3f, 0x00, 0x00, 0x19, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x38, 0x01, 0x80, 0xf9, 0x03, 0xe0, 0xff, 0x03, 0x60, 0xff, 0x03, 0x70, 0x9f, 0x03, 0xfc, 0x1f, 0x01, 0xcc, 0x3f, 0x00, 0xc0, 0x77, 0x00, 0xe0, 0x1f, 0x00, 0x40, 0x1e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf3, 0x01, 0xe0, 0xf7, 0x00, 0xf8, 0x7a, 0x00, 0xfc, 0xff, 0x03, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x03, 0xf0, 0x8f, 0x03, 0xe0, 0x9b, 0x01, 0x80, 0x3f, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x03, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xcf, 0x00, 0xf0, 0xcf, 0x01, 0xc0, 0xc4, 0x03, 0xc0, 0xff, 0x03, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xc0, 0xff, 0x03, 0xc0, 0xc4, 0x03, 0xf0, 0xcf, 0x01, 0xf8, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0x9b, 0x01, 0xf0, 0x8f, 0x03, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xf8, 0x7a, 0x00, 0xe0, 0xf7, 0x00, 0x00, 0xf3, 0x01, 0x00, 0xf0, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x40, 0x1e, 0x00, 0xe0, 0x1f, 0x00, 0xc0, 0x77, 0x00, 0xcc, 0x3f, 0x00, 0xfc, 0x1f, 0x00, 0xf8, 0x9f, 0x03, 0x60, 0xff, 0x03, 0xe0, 0xff, 0x03, 0x80, 0xf9, 0x03, 0x80, 0x38, 0x01, 0x00, 0x3c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x19, 0x00, 0x88, 0x3f, 0x00, 0x98, 0x3f, 0x00, 0xf0, 0x3f, 0x00, 0xf0, 0x6f, 0x00, 0xf0, 0x7f, 0x00, 0x60, 0x2f, 0x00, 0xe0, 0x1f, 0x00, 0xc0, 0xfe, 0x00, 0x40, 0xfe, 0x01, 0x00, 0xfe, 0x00, 0x80, 0xef, 0x00, 0x80, 0x4f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x40, 0x00, 0x60, 0x66, 0x00, 0x60, 0x66, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x6f, 0x00, 0x60, 0x6f, 0x00, 0xe0, 0x7f, 0x00, 0x60, 0x6f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x39, 0x00, 0x80, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x09, 0x00, 0xc0, 0x1f, 0x01, 0xc0, 0x9f, 0x01, 0xc0, 0xff, 0x00, 0x60, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x40, 0x6f, 0x00, 0x80, 0x7f, 0x00, 0xf0, 0x37, 0x00, 0xf8, 0x27, 0x00, 0xf0, 0x07, 0x00, 0x70, 0x1f, 0x00, 0x20, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x06, 0x00, 0x80, 0x27, 0x00, 0x80, 0x7f, 0x00, 0xe0, 0x3c, 0x00, 0xc0, 0x3f, 0x03, 0x80, 0xff, 0x03, 0x9c, 0xff, 0x01, 0xfc, 0x6f, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x19, 0x00, 0xc8, 0x11, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0x98, 0x7d, 0x00, 0x1c, 0xff, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0xff, 0x03, 0xe0, 0xf5, 0x01, 0xf0, 0x7e, 0x00, 0xf8, 0x0c, 0x00, 0xf0, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0x01, 0x38, 0xff, 0x00, 0x3c, 0x32, 0x00, 0xfc, 0x3f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xfc, 0x3f, 0x00, 0x3c, 0x32, 0x00, 0x38, 0xff, 0x00, 0x30, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf8, 0x0c, 0x00, 0xf0, 0x7e, 0x00, 0xe0, 0xf5, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0x7f, 0x00, 0xfc, 0x7f, 0x00, 0x1c, 0xff, 0x00, 0x98, 0x7d, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xc0, 0x03, 0x00, 0xc8, 0x11, 0x00, 0xfc, 0x19, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x6f, 0x00, 0x9c, 0xef, 0x00, 0x88, 0xff, 0x03, 0xc0, 0x3f, 0x03, 0xe0, 0x3c, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x27, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x20, 0x1f, 0x00, 0x70, 0x1f, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x27, 0x00, 0xf0, 0x37, 0x00, 0x80, 0x7f, 0x00, 0x40, 0x6f, 0x00, 0xe0, 0xff, 0x00, 0x60, 0xff, 0x00, 0xc0, 0xff, 0x00, 0xc0, 0x9f, 0x01, 0xc0, 0x1f, 0x01, 0x80, 0x09, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; #define ind_battleship_width 20 #define ind_battleship_height 20 static char ind_battleship_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x10, 0x80, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xb0, 0xdf, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x80, 0x00, 0x00, 0x80, 0x1b, 0x00, 0x80, 0x7f, 0x00, 0xc0, 0xfc, 0x00, 0xc0, 0xf3, 0x03, 0xe0, 0x8f, 0x03, 0x00, 0x7f, 0x03, 0x00, 0xff, 0x03, 0x00, 0xff, 0x01, 0x80, 0x9f, 0x01, 0xf8, 0x0f, 0x00, 0xf8, 0x1f, 0x00, 0xdc, 0x1f, 0x00, 0x0c, 0x3f, 0x00, 0x0c, 0x7c, 0x00, 0x04, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x10, 0x00}, { 0x00, 0x08, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xf7, 0x00, 0x80, 0xe7, 0x01, 0x00, 0xdf, 0x03, 0x00, 0x9c, 0x03, 0x10, 0x7c, 0x07, 0xf8, 0x7f, 0x0e, 0xfc, 0xff, 0x06, 0xfe, 0xff, 0x03, 0xc7, 0xcf, 0x01, 0x82, 0x8f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x01, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xdc, 0x01, 0x20, 0xb8, 0x03, 0x78, 0xb8, 0x03, 0xff, 0xbd, 0x07, 0xe6, 0x7f, 0x07, 0xe0, 0x7f, 0x03, 0xc0, 0xff, 0x06, 0xc0, 0xff, 0x06, 0x80, 0xc7, 0x0f, 0x80, 0xc3, 0x01, 0x00, 0x43, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf0, 0x03, 0xfc, 0x70, 0x03, 0xc0, 0x61, 0x03, 0xc0, 0x73, 0x03, 0xc0, 0x7f, 0x07, 0xc0, 0x7f, 0x07, 0xc0, 0x7f, 0x07, 0xc0, 0x7f, 0x07, 0xc0, 0x73, 0x03, 0xc0, 0x61, 0x03, 0xfc, 0x70, 0x03, 0xfc, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x43, 0x00, 0x80, 0xc3, 0x01, 0x80, 0xc7, 0x0f, 0xc0, 0xff, 0x06, 0xc0, 0xff, 0x06, 0xe0, 0x7f, 0x03, 0xe6, 0x7f, 0x07, 0xff, 0xbd, 0x07, 0x78, 0xb8, 0x03, 0x20, 0xb8, 0x03, 0x00, 0xdc, 0x01, 0x00, 0xfc, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x01, 0x00, 0x80, 0x03, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0f, 0x00, 0x82, 0x8f, 0x00, 0xc7, 0xcf, 0x01, 0xe6, 0xcf, 0x03, 0xfc, 0xff, 0x07, 0xf8, 0x7f, 0x0e, 0x10, 0x7c, 0x07, 0x00, 0x9c, 0x03, 0x00, 0xdf, 0x03, 0x80, 0xe7, 0x01, 0x00, 0xf7, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x08, 0x00}, { 0x00, 0x10, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x04, 0x30, 0x00, 0x0c, 0x7c, 0x00, 0x0c, 0x3f, 0x00, 0xdc, 0x1f, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x0f, 0x00, 0x80, 0x9f, 0x01, 0x00, 0xff, 0x01, 0x00, 0xff, 0x03, 0x00, 0x7f, 0x03, 0xe0, 0x8f, 0x03, 0xc0, 0xf3, 0x03, 0xc0, 0xfc, 0x00, 0x80, 0x7f, 0x00, 0x80, 0x1b, 0x00, 0x80, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0x30, 0xc0, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0xb0, 0xdf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x10, 0x80, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00}, { 0x80, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0xc0, 0x00, 0x00, 0xc0, 0x00, 0x02, 0xe0, 0x03, 0x03, 0xc0, 0x0f, 0x03, 0x80, 0xbf, 0x03, 0x80, 0xff, 0x01, 0x00, 0xff, 0x01, 0x98, 0x1f, 0x00, 0xf8, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0xec, 0x0f, 0x00, 0x1c, 0x7f, 0x00, 0xfc, 0x3c, 0x00, 0xf0, 0x33, 0x00, 0xe0, 0x1f, 0x00, 0x80, 0x1d, 0x00, 0x00, 0x10, 0x00}, { 0x00, 0x08, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0x00, 0x80, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x10, 0x1f, 0x04, 0x38, 0x3f, 0x0e, 0x3c, 0x7f, 0x06, 0xfe, 0xff, 0x03, 0xe7, 0xff, 0x01, 0xee, 0x87, 0x00, 0x9c, 0x07, 0x00, 0xbc, 0x0f, 0x00, 0x78, 0x1e, 0x00, 0xf0, 0x0c, 0x00, 0xe0, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x01, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x1c, 0x00, 0x20, 0x0c, 0x00, 0x38, 0x1c, 0x00, 0x3f, 0x1e, 0x00, 0xf6, 0x3f, 0x00, 0xf6, 0x3f, 0x00, 0xec, 0x7f, 0x00, 0xee, 0x7f, 0x06, 0xde, 0xfb, 0x0f, 0xdc, 0xe1, 0x01, 0xdc, 0x41, 0x00, 0xb8, 0x03, 0x00, 0xf0, 0x03, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xf0, 0x03, 0xec, 0xf0, 0x03, 0x6c, 0x38, 0x00, 0xec, 0x3c, 0x00, 0xee, 0x3f, 0x00, 0xee, 0x3f, 0x00, 0xee, 0x3f, 0x00, 0xee, 0x3f, 0x00, 0xec, 0x3c, 0x00, 0x6c, 0x38, 0x00, 0xec, 0xf0, 0x03, 0xfc, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xf0, 0x03, 0x00, 0xb8, 0x03, 0x00, 0xdc, 0x41, 0x00, 0xdc, 0xe1, 0x01, 0xde, 0xfb, 0x0f, 0xee, 0x7f, 0x06, 0xec, 0x7f, 0x00, 0xf6, 0x3f, 0x00, 0xf6, 0x3f, 0x00, 0x3f, 0x1e, 0x00, 0x38, 0x1c, 0x00, 0x20, 0x0c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x01, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x07, 0x00, 0xf0, 0x0c, 0x00, 0x78, 0x1e, 0x00, 0xbc, 0x0f, 0x00, 0x9c, 0x07, 0x00, 0xee, 0x87, 0x00, 0xe7, 0xff, 0x01, 0xf6, 0xff, 0x03, 0xfc, 0xff, 0x07, 0x38, 0x3f, 0x0e, 0x10, 0x1f, 0x04, 0x00, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x80, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x08, 0x00}, { 0x00, 0x10, 0x00, 0x80, 0x1d, 0x00, 0xe0, 0x1f, 0x00, 0xf0, 0x33, 0x00, 0xfc, 0x3c, 0x00, 0x1c, 0x7f, 0x00, 0xec, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x0f, 0x00, 0x98, 0x1f, 0x00, 0x00, 0xff, 0x01, 0x80, 0xff, 0x01, 0x80, 0xbf, 0x03, 0xc0, 0x0f, 0x03, 0xe0, 0x03, 0x03, 0xc0, 0x00, 0x02, 0xc0, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x00, 0x00}, }; #define ind_starbase_width 20 #define ind_starbase_height 20 static char ind_starbase_bits[VIEWS][60] = { { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, { 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xf6, 0x00, 0x78, 0xe0, 0x01, 0xbc, 0xdf, 0x03, 0xdc, 0xbf, 0x03, 0xce, 0x36, 0x07, 0xdf, 0xb9, 0x0f, 0xdf, 0xb9, 0x0f, 0xce, 0x36, 0x07, 0xdc, 0xbf, 0x03, 0xbc, 0xdf, 0x03, 0x78, 0xe0, 0x01, 0xf0, 0xf6, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00}, }; #define ind_assault_width 20 #define ind_assault_height 20 static char ind_assault_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x8f, 0x00, 0x90, 0x9f, 0x00, 0xd0, 0xbf, 0x00, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x70, 0x00, 0xe0, 0x70, 0x00, 0xe0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x10, 0x00, 0x40, 0x3e, 0x00, 0xe0, 0x3f, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x02, 0xb8, 0x7f, 0x03, 0x58, 0xff, 0x03, 0x58, 0xff, 0x03, 0x68, 0xaf, 0x01, 0xf8, 0xaf, 0x01, 0xf8, 0xd7, 0x01, 0xf8, 0xdf, 0x00, 0x38, 0xff, 0x00, 0x3c, 0x7e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x07, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0x30, 0xff, 0x00, 0xb8, 0xfc, 0x00, 0x58, 0xfe, 0x00, 0x3c, 0xff, 0x04, 0xfc, 0xff, 0x03, 0xfc, 0xe7, 0x03, 0xfe, 0xd7, 0x03, 0x84, 0xcb, 0x00, 0x80, 0x77, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0xf0, 0x7c, 0x00, 0x38, 0xff, 0x01, 0xf8, 0xfc, 0x03, 0x7e, 0xff, 0x01, 0xfe, 0xff, 0x01, 0xfc, 0xff, 0x01, 0xe0, 0xff, 0x00, 0xc0, 0xf1, 0x06, 0xc0, 0xef, 0x01, 0xf0, 0xf3, 0x00, 0xf0, 0x7d, 0x00, 0xf0, 0x1f, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0xff, 0x01, 0x7c, 0x30, 0x00, 0xfc, 0x7f, 0x00, 0x7c, 0xf0, 0x00, 0xe0, 0xff, 0x01, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x03, 0xe0, 0xff, 0x01, 0x7c, 0xf0, 0x00, 0xfc, 0x7f, 0x00, 0x7c, 0x30, 0x00, 0xe0, 0xff, 0x01, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x7d, 0x00, 0xf0, 0xf3, 0x00, 0xc0, 0xef, 0x01, 0xc0, 0xf1, 0x06, 0xe0, 0xff, 0x00, 0xfc, 0xff, 0x01, 0xfe, 0xff, 0x01, 0x7e, 0xff, 0x01, 0xf8, 0xfc, 0x03, 0x38, 0xff, 0x01, 0xf0, 0x7c, 0x00, 0xe0, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x3f, 0x00, 0x80, 0x77, 0x00, 0x84, 0xcb, 0x00, 0xfe, 0xd7, 0x03, 0xfc, 0xe7, 0x03, 0xfc, 0xef, 0x03, 0xbc, 0xff, 0x06, 0x58, 0xfe, 0x00, 0xb8, 0xfc, 0x00, 0x30, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x03, 0x00, 0x80, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x3e, 0x00, 0x3c, 0x7e, 0x00, 0x38, 0xff, 0x00, 0xf8, 0xdf, 0x00, 0xf8, 0xd7, 0x01, 0xf8, 0xaf, 0x01, 0x68, 0xaf, 0x01, 0x58, 0xff, 0x03, 0x58, 0xff, 0x03, 0xb8, 0x7f, 0x03, 0xf0, 0x7f, 0x02, 0xf0, 0x7f, 0x00, 0xe0, 0x3f, 0x00, 0x40, 0x3e, 0x00, 0x80, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x70, 0x00, 0xe0, 0x70, 0x00, 0xe0, 0x70, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0x58, 0xaf, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xd0, 0xbf, 0x00, 0x90, 0x9f, 0x00, 0x10, 0x8f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xe0, 0xc7, 0x03, 0xf0, 0xcf, 0x01, 0xb0, 0xff, 0x01, 0xb8, 0xfe, 0x01, 0x58, 0xff, 0x01, 0x58, 0x6f, 0x01, 0xfc, 0xaf, 0x01, 0xfc, 0xaf, 0x01, 0xec, 0xdf, 0x01, 0xe4, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xc0, 0x7f, 0x00, 0xc0, 0x27, 0x00, 0x80, 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x3e, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x1f, 0x00, 0xe0, 0x1e, 0x00, 0x30, 0x1d, 0x02, 0xbc, 0xfc, 0x07, 0x7c, 0xfe, 0x03, 0x7c, 0xff, 0x03, 0xf6, 0xdf, 0x03, 0xf0, 0xa7, 0x01, 0xf0, 0xd7, 0x01, 0xf0, 0xcf, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xff, 0x00, 0xe0, 0xfb, 0x00, 0xf0, 0xfc, 0x00, 0x78, 0x3f, 0x00, 0xf6, 0x38, 0x00, 0xf0, 0x7f, 0x00, 0xf8, 0xff, 0x03, 0xf8, 0xff, 0x07, 0xf8, 0xef, 0x07, 0xfc, 0xf3, 0x01, 0xf8, 0xcf, 0x01, 0xe0, 0xf3, 0x00, 0x00, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0xf8, 0x7f, 0x00, 0xc0, 0xe0, 0x03, 0xe0, 0xff, 0x03, 0xf0, 0xe0, 0x03, 0xf8, 0x7f, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x7f, 0x00, 0xf8, 0x7f, 0x00, 0xf0, 0xe0, 0x03, 0xe0, 0xff, 0x03, 0xc0, 0xe0, 0x03, 0xf8, 0x7f, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x7f, 0x00, 0xe0, 0xf3, 0x00, 0xf8, 0xcf, 0x01, 0xfc, 0xf3, 0x01, 0xf8, 0xef, 0x07, 0xf8, 0xff, 0x07, 0xf8, 0xff, 0x03, 0xf0, 0x7f, 0x00, 0xf6, 0x38, 0x00, 0x78, 0x3f, 0x00, 0xf0, 0xfc, 0x00, 0xe0, 0xfb, 0x00, 0x80, 0xff, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1c, 0x00, 0xe0, 0x3f, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0xcf, 0x00, 0xf0, 0xd7, 0x01, 0xf0, 0xa7, 0x01, 0xf2, 0xcf, 0x03, 0xfc, 0xff, 0x03, 0x7c, 0xfe, 0x03, 0xbc, 0xfc, 0x07, 0x30, 0x1d, 0x02, 0xe0, 0x1e, 0x00, 0xc0, 0x1f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x80, 0x10, 0x00, 0xc0, 0x27, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0xe4, 0xff, 0x00, 0xec, 0xdf, 0x01, 0xfc, 0xaf, 0x01, 0xfc, 0xaf, 0x01, 0x58, 0x6f, 0x01, 0x58, 0xff, 0x01, 0xb8, 0xfe, 0x01, 0xb0, 0xff, 0x01, 0xf0, 0xcf, 0x01, 0xe0, 0xc7, 0x03, 0xc0, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00}, }; #define ind_destroyer_width 20 #define ind_destroyer_height 20 static char ind_destroyer_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x06, 0x00, 0x10, 0x86, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xcf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x36, 0x00, 0xc0, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x7f, 0x00, 0x20, 0x7e, 0x00, 0x60, 0x7c, 0x00, 0x30, 0xcc, 0x00, 0x30, 0x06, 0x00, 0xb8, 0x87, 0x00, 0xf8, 0xc7, 0x00, 0xe0, 0x6f, 0x00, 0xf0, 0x7f, 0x00, 0xb0, 0x7f, 0x00, 0xa0, 0x2f, 0x00, 0x80, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xc0, 0x7c, 0x00, 0xe0, 0x78, 0x00, 0x70, 0xf8, 0x00, 0x38, 0xfc, 0x00, 0x30, 0xcc, 0x00, 0xf0, 0xc7, 0x00, 0xf8, 0x07, 0x00, 0xfc, 0x67, 0x00, 0xe0, 0x77, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x80, 0x09, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0xe0, 0x79, 0x00, 0xf0, 0x70, 0x00, 0x60, 0xf0, 0x01, 0xf8, 0xf8, 0x01, 0xfc, 0xff, 0x00, 0xf8, 0xe7, 0x01, 0xf0, 0xc3, 0x00, 0xf8, 0x43, 0x00, 0xc0, 0x11, 0x00, 0xf0, 0x3f, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xc0, 0x27, 0x00, 0xf8, 0x60, 0x00, 0xf8, 0xe0, 0x00, 0xe0, 0xe1, 0x00, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xe0, 0xe1, 0x00, 0xf8, 0xe0, 0x00, 0xf8, 0x60, 0x00, 0xc0, 0x27, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x60, 0x0f, 0x00, 0xf0, 0x3f, 0x00, 0xc0, 0x11, 0x00, 0xf8, 0x43, 0x00, 0xf0, 0xc3, 0x00, 0xf8, 0xe7, 0x01, 0xfc, 0xff, 0x00, 0xf8, 0xf8, 0x01, 0x60, 0xf0, 0x01, 0xf0, 0x70, 0x00, 0xe0, 0x79, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x09, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x3f, 0x00, 0xe0, 0x77, 0x00, 0xfc, 0x67, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x87, 0x00, 0xf0, 0xcf, 0x00, 0x38, 0xfc, 0x00, 0x70, 0xf8, 0x00, 0xe0, 0x78, 0x00, 0xc0, 0x7c, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x0e, 0x00, 0xa0, 0x2f, 0x00, 0xb0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x6f, 0x00, 0xf8, 0xc7, 0x00, 0xb8, 0x87, 0x00, 0x30, 0x06, 0x00, 0x30, 0xcc, 0x00, 0x60, 0x7c, 0x00, 0x20, 0x7e, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x36, 0x00, 0xc0, 0x36, 0x00, 0xc0, 0x3f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xc6, 0x00, 0x10, 0x86, 0x00, 0x00, 0x06, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x17, 0x00, 0x40, 0x5f, 0x00, 0xe0, 0xdf, 0x00, 0xe0, 0xff, 0x00, 0x60, 0x7f, 0x00, 0x30, 0xfe, 0x01, 0x10, 0xde, 0x01, 0x00, 0xc6, 0x00, 0x30, 0xc3, 0x00, 0xe0, 0x63, 0x00, 0xe0, 0x47, 0x00, 0xe0, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x19, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x7f, 0x00, 0xe0, 0x7c, 0x00, 0x60, 0xfc, 0x03, 0x00, 0xfc, 0x01, 0x10, 0xfc, 0x00, 0x30, 0xff, 0x00, 0xf0, 0xc3, 0x01, 0xf0, 0xe1, 0x00, 0xe0, 0x71, 0x00, 0xe0, 0x37, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x6f, 0x00, 0xc0, 0xff, 0x00, 0x80, 0x38, 0x00, 0x20, 0xfc, 0x01, 0x30, 0xfc, 0x00, 0x78, 0xfe, 0x01, 0xf0, 0xff, 0x03, 0xf8, 0xf1, 0x01, 0xf8, 0x60, 0x00, 0xe0, 0xf0, 0x00, 0xe0, 0x79, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x40, 0x3e, 0x00, 0x60, 0xf0, 0x01, 0x70, 0xf0, 0x01, 0x70, 0x78, 0x00, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x70, 0x78, 0x00, 0x70, 0xf0, 0x01, 0x60, 0xf0, 0x01, 0x40, 0x3e, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xe0, 0x79, 0x00, 0xe0, 0xf0, 0x00, 0xf8, 0x60, 0x00, 0xf8, 0xf1, 0x01, 0xf0, 0xff, 0x03, 0x78, 0xfe, 0x01, 0x30, 0xfc, 0x00, 0x20, 0xfc, 0x01, 0x80, 0x38, 0x00, 0xc0, 0xff, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xe0, 0x37, 0x00, 0xe0, 0x71, 0x00, 0xf0, 0xe1, 0x00, 0xf0, 0xc3, 0x01, 0x30, 0xc7, 0x00, 0x30, 0xfe, 0x00, 0x00, 0xfc, 0x01, 0x60, 0xfc, 0x03, 0xe0, 0x7c, 0x00, 0xc0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x19, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x80, 0x0f, 0x00, 0xe0, 0x1f, 0x00, 0xe0, 0x47, 0x00, 0xe0, 0x63, 0x00, 0x30, 0xc3, 0x00, 0x00, 0xc6, 0x00, 0x10, 0xde, 0x01, 0x30, 0xfe, 0x01, 0x60, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xdf, 0x00, 0x40, 0x5f, 0x00, 0x00, 0x17, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; netrek-client-cow-3.3.2/newwin.c0000664000175000017500000013331513657750470015532 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include INC_STDLIB #include #include #include #include #include #include INC_SYS_TIME #include INC_SYS_SELECT #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "bitmaps.h" #include "moobitmaps.h" #include "rabbitbitmaps.h" #ifdef TNG_FED_BITMAPS #include "tngbitmaps.h" #endif #ifdef VARY_HULL #include "hullbitmaps.h" #endif #include "oldbitmaps.h" #include "packets.h" #include "colors.h" #include "cowmain.h" #include "death.h" #include "defaults.h" #include "lagmeter.h" #include "input.h" #include "interface.h" #include "macrowin.h" #include "map.h" #include "netstatopt.h" #include "option.h" #include "pingstats.h" #include "playerlist.h" #include "redraw.h" #include "smessage.h" #include "socket.h" #include "spopt.h" #include "udpopt.h" #include "war.h" #include "warning.h" #include "newwin.h" extern char cbugs[]; /* line number of motd to display at top of window */ static int motd_offset = 0; /* number of motd lines received since clear */ int motd_last = 0; /* number of times we have received a motd clear */ int motd_clears = 0; /* whether a refresh of the motd should be done on the next SP_MASK */ int motd_refresh_needed = 0; /* if a motd line from the server is this, the client will junk all motd * * data it currently has. New data may be received */ #define MOTDCLEARLINE "\033\030CLEAR_MOTD\000" /* number of lines of motd to display in window at a time */ #define MOTD_PAGE_SIZE 28 /* forward linked list of received motd lines */ struct motd_line { struct motd_line *next; char *data; int bold; }; /* pointer to first item in list */ static struct motd_line *motd_lines = NULL; #define BOXSIDE (TWINSIDE / 5) #define TILESIDE 16 #define MESSAGESIZE 20 #define PLISTSIZE 254 /* (MENU_PAD * 2 + * * (MAXPLAYERS + 3) * * * W_Textheight) */ #define STATSIZE (MESSAGESIZE * 2 + BORDER) #define YOFF 0 #define stipple_width 16 #define stipple_height 16 static char stipple_bits[] = { 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80}; /* ATM: extra stuff for those who don't like my visible tractors */ #define tract_width 5 #define tract_height 5 static char tract_bits[] = { 0x1f, 0x04, 0x04, 0x04, 0x04}; #define press_width 5 #define press_height 5 static char press_bits[] = { 0x0f, 0x11, 0x0f, 0x01, 0x01}; /* Event Handlers. */ extern void drawIcon(void), redrawTstats(void), planetlist(void); extern void ranklist(void), fillhelp(void); extern void redrawLMeter(void), redrawPStats(void), redrawStats(void); extern void nsaction(W_Event * data); extern void optionaction(W_Event * data); extern int checkMapped(char *name); extern int checkMappedPref(char *name, int preferred); extern void pastebuffer(void); /* internal function declarations */ static void savebitmaps(void); static void showValues(struct motd_line *data); static void ClearMotd(void); static void getResources(char *prog); static void getTiles(void); static void redrawTeam(W_Window win, int teamNo, int *lastnum); static void redrawQuit(void); static void showTimeLeft(time_t time, time_t max); static void handleMessageWindowKeyDown(W_Event * event) { smessage (event->key); } static void handleMessageWindowButton(W_Event * event) { switch (event->key) { case W_MBUTTON: pastebuffer(); break; case W_LBUTTON: if (messageon == 0) { Key109(); /* m */ if (messpend == 0) smessage('A'); } return; } } static char *newwin_last_hostmon; static char *newwin_last_progname; /*! @brief Fork a new process and repeat the display initialisation. @return process id returned by fork(2). */ pid_t newwin_fork() { pid_t pid; pid = fork(); if (pid == 0) { newwin(newwin_last_hostmon, newwin_last_progname); } return pid; } /*! @brief Minimal windowing interface initialisation for non-play. */ void newwinmeta(char *hostmon, char *progname) { newwin_last_hostmon = hostmon; newwin_last_progname = progname; W_Initialize(hostmon); getResources(progname); } /*! @brief Windowing interface initialisation for play. */ void newwin(char *hostmon, char *progname) { int need_width, need_height, main_width, main_height; int ow; /* offset width */ need_width = TWINSIDE + GWINSIDE + BORDER * 3; need_height = GWINSIDE + 4 * BORDER + PLISTSIZE; if (small_screen) { /* user wants sizes smaller than we need */ need_width = MIN(need_width, 800); need_height = MIN(need_height, 600); } main_width = MAX(need_width, small_screen ? 800 : 1024); main_height = MAX(need_height, small_screen ? 600 : 768); ow = (main_width - need_width) / 2; if (ow < 0) ow = 0; newwin_last_hostmon = hostmon; newwin_last_progname = progname; W_Initialize(hostmon); W_FullScreenInitialise(); baseWin = W_MakeWindow("netrek", 0, YOFF, main_width, main_height, NULL, BORDER, gColor); iconWin = W_MakeWindow("netrek_icon", 0, 0, icon_width, icon_height, NULL, BORDER, gColor); W_SetWindowExposeHandler(iconWin, drawIcon); W_SetIconWindow(baseWin, iconWin); w = W_MakeWindow("local", ow, 0, TWINSIDE, TWINSIDE, baseWin, BORDER, foreColor); mapw = W_MakeWindow("map", TWINSIDE+BORDER+ow, 0, GWINSIDE, GWINSIDE, baseWin, BORDER, foreColor); W_GetPixmaps(w, mapw); tstatw = W_MakeWindow("tstat", ow, TWINSIDE+BORDER, TWINSIDE, STATSIZE, baseWin, BORDER, foreColor); #ifdef nodef /* 01/18/95 No messages for * * * dashdord [007] */ W_SetWindowKeyDownHandler(tstatw, handleMessageWindowKeyDown); #endif W_SetWindowExposeHandler(tstatw, redrawTstats); warnw = W_MakeWindow("warn", ow+TWINSIDE+BORDER, GWINSIDE+BORDER, GWINSIDE, MESSAGESIZE, baseWin, BORDER, foreColor); W_SetWindowKeyDownHandler(warnw, handleMessageWindowKeyDown); messagew = W_MakeWindow("message", ow+TWINSIDE+BORDER, GWINSIDE+BORDER+MESSAGESIZE, GWINSIDE, MESSAGESIZE, baseWin, BORDER, foreColor); W_SetWindowKeyDownHandler(messagew, handleMessageWindowKeyDown); W_SetWindowButtonHandler(messagew, handleMessageWindowButton); planetw = W_MakeTextWindow("planet", 10, 10, 57, MAXPLANETS + 3, w, 2); W_SetWindowExposeHandler(planetw, planetlist); rankw = W_MakeTextWindow("rank", 48, 300, 65, nranks + 9, w, 2); W_SetWindowExposeHandler(rankw, ranklist); if (small_screen) { playerw = W_MakeTextWindow("player", ow+TWINSIDE+4, YOFF + GWINSIDE + 2 * BORDER + 2 * MESSAGESIZE, PlistMaxWidth(), 20, baseWin, 2); } else { playerw = W_MakeTextWindow("player", ow, YOFF + TWINSIDE + BORDER + STATSIZE + BORDER, PlistMaxWidth(), MAXPLAYER + 3, baseWin, 2); } W_SetWindowExposeHandler(playerw, RedrawPlayerList); helpWin = W_MakeTextWindow("help", 0, YOFF + TWINSIDE + 2 * BORDER + 2 * MESSAGESIZE, 160, 20, NULL, BORDER); W_SetWindowExposeHandler(helpWin, fillhelp); if (small_screen) { /* note that wk and phaswerwin are drawn under wi, and wa under wt-- there * * just isn't ROOM for them all */ messwt = W_MakeScrollingWindow("review_team", ow, YOFF + TWINSIDE + BORDER + STATSIZE, 80, 1, baseWin, 1); messwi = W_MakeScrollingWindow("review_your", ow, YOFF + TWINSIDE + MESSAGESIZE + STATSIZE, 80, 1, baseWin, 1); messwa = W_MakeScrollingWindow("review_all", ow, YOFF + TWINSIDE + 2 * MESSAGESIZE + STATSIZE, 80, 1, baseWin, 1); messwk = W_MakeScrollingWindow("review_kill", ow, YOFF + TWINSIDE + 3 * MESSAGESIZE + STATSIZE, 35, 1, baseWin, 1); phaserwin = W_MakeScrollingWindow("review_phaser", ow + 25 + 35 * W_Textwidth, YOFF + TWINSIDE + 3 * MESSAGESIZE + STATSIZE, 40, 1, baseWin, 1); reviewWin = W_MakeScrollingWindow("review", ow, YOFF + TWINSIDE + BORDER + STATSIZE + 3, 80, 5, baseWin, BORDER); } else { messwa = W_MakeScrollingWindow("review_all", ow + TWINSIDE + BORDER, YOFF + GWINSIDE + 3 * BORDER + 2 * MESSAGESIZE, 80, 10, baseWin, BORDER); messwt = W_MakeScrollingWindow("review_team", ow + TWINSIDE + BORDER, YOFF + GWINSIDE + 4 * BORDER + 2 * MESSAGESIZE + 10 * W_Textheight + 8, 80, 5, baseWin, BORDER); messwi = W_MakeScrollingWindow("review_your", ow + TWINSIDE + BORDER, YOFF + GWINSIDE + 5 * BORDER + 2 * MESSAGESIZE + 15 * W_Textheight + 16, 80, 4, baseWin, BORDER); messwk = W_MakeScrollingWindow("review_kill", ow + TWINSIDE + BORDER, YOFF + GWINSIDE + 6 * BORDER + 2 * MESSAGESIZE + 19 * W_Textheight + 24, 80, 6, baseWin, BORDER); phaserwin = W_MakeScrollingWindow("review_phaser", ow + TWINSIDE + BORDER, YOFF + GWINSIDE + 3 * BORDER + 2 * MESSAGESIZE + 15 * W_Textheight + 16, 80, 4, baseWin, BORDER); reviewWin = W_MakeScrollingWindow("review", ow + TWINSIDE + BORDER + 1, YOFF + GWINSIDE + BORDER + STATSIZE, 81, 21, baseWin, BORDER-1); } W_SetWindowKeyDownHandler(messwa, handleMessageWindowKeyDown); W_SetWindowKeyDownHandler(messwt, handleMessageWindowKeyDown); W_SetWindowKeyDownHandler(messwi, handleMessageWindowKeyDown); W_SetWindowKeyDownHandler(reviewWin, handleMessageWindowKeyDown); netstatWin = W_MakeMenu("netstat", TWINSIDE + 10, -BORDER + 10, 40, NETSTAT_NUMFIELDS, NULL, BORDER); W_SetWindowKeyDownHandler(netstatWin, nsaction); W_SetWindowButtonHandler(netstatWin, nsaction); lMeter = W_MakeWindow("lagMeter", 800, 4, lMeterWidth(), lMeterHeight(), NULL, BORDER, foreColor); W_SetWindowExposeHandler(lMeter, redrawLMeter); pStats = W_MakeWindow("pingStats", 500, 4, pStatsWidth(), pStatsHeight(), NULL, 1, foreColor); W_SetWindowExposeHandler(pStats, redrawPStats); udpWin = W_MakeMenu("UDP", TWINSIDE + 10, -BORDER + 10, 40, UDP_NUMOPTS, NULL, 2); W_SetWindowButtonHandler(udpWin, udpaction); #ifdef SHORT_PACKETS spWin = W_MakeMenu("network", TWINSIDE + 10, -BORDER + 10, 40, SPK_NUMFIELDS, NULL, 2); W_SetWindowKeyDownHandler(spWin, spaction); W_SetWindowButtonHandler(spWin, spaction); #endif #ifdef SOUND soundWin = W_MakeMenu("sound", TWINSIDE + 20, -BORDER + 10, 30, sound_window_height(), NULL, 2); W_SetWindowKeyDownHandler(soundWin, soundaction); W_SetWindowButtonHandler(soundWin, soundaction); W_DefineArrowCursor(soundWin); #endif #ifdef TOOLS toolsWin = W_MakeScrollingWindow("tools", TWINSIDE + BORDER, BORDER, 80, TOOLSWINLEN, NULL, BORDER); W_DefineTrekCursor(toolsWin); #endif #ifdef XTREKRC_HELP defWin = W_MakeTextWindow("xtrekrc_help", 1, 100, 174, 41, NULL, BORDER); #endif #ifdef DOC_WIN docwin = W_MakeWindow("DocWin", 0, 181, 500, 500, 0, 2, foreColor); xtrekrcwin = W_MakeWindow("xtrekrcWin", 0, 200, 500, 500, 0, 2, foreColor); #endif teamWin[0] = W_MakeWindow(teamshort[1 << 0], -1, 400, BOXSIDE, BOXSIDE, w, 1, foreColor); teamWin[1] = W_MakeWindow(teamshort[1 << 1], -1, -1, BOXSIDE, BOXSIDE, w, 1, foreColor); teamWin[2] = W_MakeWindow(teamshort[1 << 2], 400, -1, BOXSIDE, BOXSIDE, w, 1, foreColor); teamWin[3] = W_MakeWindow(teamshort[1 << 3], 400, 400, BOXSIDE, BOXSIDE, w, 1, foreColor); qwin = W_MakeWindow("quit", 200, 400, BOXSIDE, BOXSIDE, w, 1, foreColor); #ifdef ARMY_SLIDER statwin = W_MakeWindow("stats", 422, 13, 160, 110, NULL, 5, foreColor); #else statwin = W_MakeWindow("stats", 422, 13, 160, 95, NULL, 5, foreColor); #endif /* ARMY_SLIDER */ W_SetWindowExposeHandler(statwin, redrawStats); W_DefineArrowCursor(netstatWin); W_DefineArrowCursor(lMeter); W_DefineTrekCursor(baseWin); W_DefineLocalcursor(w); W_DefineMapcursor(mapw); W_DefineTrekCursor(pStats); W_DefineTextCursor(warnw); W_DefineTrekCursor(messwt); W_DefineTrekCursor(messwi); W_DefineTrekCursor(helpWin); W_DefineTrekCursor(reviewWin); W_DefineTrekCursor(messwk); W_DefineTrekCursor(phaserwin); W_DefineTrekCursor(playerw); W_DefineTrekCursor(rankw); W_DefineTrekCursor(statwin); W_DefineTrekCursor(iconWin); W_DefineTextCursor(messagew); W_DefineTrekCursor(tstatw); W_DefineWarningCursor(qwin); W_DefineArrowCursor(udpWin); #ifdef SHORT_PACKETS W_DefineArrowCursor(spWin); #endif W_DefineFedCursor(teamWin[0]); W_DefineRomCursor(teamWin[1]); W_DefineKliCursor(teamWin[2]); W_DefineOriCursor(teamWin[3]); #define WARHEIGHT 2 #define WARWIDTH 20 #define WARBORDER 2 war = W_MakeMenu("war", ow + TWINSIDE + 10, -BORDER + 10, WARWIDTH, 6, baseWin, WARBORDER); W_SetWindowButtonHandler(war, waraction); W_DefineArrowCursor(war); getResources(progname); savebitmaps(); } void mapAll(void) { W_MapWindow(mapw); W_MapWindow(tstatw); W_MapWindow(warnw); #ifdef XTRA_MESSAGE_UI /* Grr. checkMapped() defaults to off - not nice */ if (booleanDefault("message.mapped", 1)) #endif W_MapWindow(messagew); W_MapWindow(w); W_MapWindow(baseWin); W_FullScreenBegin(baseWin); /* since we aren't mapping windows that have root as parent in x11window.c (since that messes up the TransientFor feature) we have to map them here. (If already mapped, W_MapWindow returns) */ if (checkMapped("planet")) W_MapWindow(planetw); if (checkMapped("rank")) W_MapWindow(rankw); if (checkMapped("help")) W_MapWindow(helpWin); if (checkMapped("review_all") && !identityBlind) W_MapWindow(messwa); if (checkMapped("review_team") && !identityBlind) W_MapWindow(messwt); if (checkMapped("review_your") && !identityBlind) W_MapWindow(messwi); if (checkMapped("review_kill") && !identityBlind) W_MapWindow(messwk); if (checkMapped("netstat")) nswindow(); if (checkMapped("lagMeter")) W_MapWindow(lMeter); if (checkMapped("pingStats")) W_MapWindow(pStats); if (checkMapped("review_phaser")) { W_MapWindow(phaserwin); phaserWindow = 1; } if (checkMappedPref("player", 1)) W_MapWindow(playerw); if (checkMappedPref("review", 1) && !identityBlind) W_MapWindow(reviewWin); if (checkMapped("UDP")) udpwindow(); #ifdef SHORT_PACKETS if (checkMapped("network")) spwindow(); #endif } static void savebitmaps(void) { register int i; for (i = 0; i < VIEWS; i++) { #ifdef TNG_FED_BITMAPS tng_fed_bitmaps[SCOUT][i] = W_StoreBitmap(fed_scout_width, fed_scout_height, tng_fed_scout_bits[i], w); tng_fed_bitmaps[DESTROYER][i] = W_StoreBitmap(fed_destroyer_width, fed_destroyer_height, tng_fed_destroyer_bits[i], w); tng_fed_bitmaps[CRUISER][i] = W_StoreBitmap(fed_cruiser_width, fed_cruiser_height, tng_fed_cruiser_bits[i], w); tng_fed_bitmaps[BATTLESHIP][i] = W_StoreBitmap(fed_battleship_width, fed_battleship_height, tng_fed_battleship_bits[i], w); tng_fed_bitmaps[ASSAULT][i] = W_StoreBitmap(fed_assault_width, fed_assault_height, tng_fed_assault_bits[i], w); tng_fed_bitmaps[STARBASE][i] = W_StoreBitmap(fed_starbase_width, fed_starbase_height, fed_starbase_bits[i], w); tng_fed_bitmaps[SGALAXY][i] = W_StoreBitmap(fed_galaxy_width, fed_galaxy_width, fed_galaxy_bits[i], w); tng_fed_bitmaps[ATT][i] = W_StoreBitmap(fed_cruiser_width, fed_cruiser_height, fed_cruiser_bits[i], w); #endif ROMVLVS_bitmap[i] = W_StoreBitmap(rom_cruiser_width, rom_cruiser_height, ROMVLVS_bits[i], w); noinfoplanet = W_StoreBitmap(planet_width, planet_height, noinfo_bits, w); fed_bitmaps[SCOUT][i] = W_StoreBitmap(fed_scout_width, fed_scout_height, fed_scout_bits[i], w); fed_bitmaps[DESTROYER][i] = W_StoreBitmap(fed_destroyer_width, fed_destroyer_height, fed_destroyer_bits[i], w); fed_bitmaps[CRUISER][i] = W_StoreBitmap(fed_cruiser_width, fed_cruiser_height, fed_cruiser_bits[i], w); fed_bitmaps[BATTLESHIP][i] = W_StoreBitmap(fed_battleship_width, fed_battleship_height, fed_battleship_bits[i], w); fed_bitmaps[ASSAULT][i] = W_StoreBitmap(fed_assault_width, fed_assault_height, fed_assault_bits[i], w); fed_bitmaps[STARBASE][i] = W_StoreBitmap(fed_starbase_width, fed_starbase_height, fed_starbase_bits[i], w); fed_bitmaps[SGALAXY][i] = W_StoreBitmap(fed_galaxy_width, fed_galaxy_width, fed_galaxy_bits[i], w); fed_bitmaps[ATT][i] = W_StoreBitmap(fed_cruiser_width, fed_cruiser_height, fed_cruiser_bits[i], w); kli_bitmaps[SCOUT][i] = W_StoreBitmap(kli_scout_width, kli_scout_height, kli_scout_bits[i], w); kli_bitmaps[DESTROYER][i] = W_StoreBitmap(kli_destroyer_width, kli_destroyer_height, kli_destroyer_bits[i], w); kli_bitmaps[CRUISER][i] = W_StoreBitmap(kli_cruiser_width, kli_cruiser_height, kli_cruiser_bits[i], w); kli_bitmaps[BATTLESHIP][i] = W_StoreBitmap(kli_battleship_width, kli_battleship_height, kli_battleship_bits[i], w); kli_bitmaps[ASSAULT][i] = W_StoreBitmap(kli_assault_width, kli_assault_height, kli_assault_bits[i], w); kli_bitmaps[STARBASE][i] = W_StoreBitmap(kli_starbase_width, kli_starbase_height, kli_starbase_bits[i], w); kli_bitmaps[SGALAXY][i] = W_StoreBitmap(kli_galaxy_width, kli_galaxy_width, kli_galaxy_bits[i], w); kli_bitmaps[ATT][i] = W_StoreBitmap(kli_cruiser_width, kli_cruiser_height, kli_cruiser_bits[i], w); rom_bitmaps[SCOUT][i] = W_StoreBitmap(rom_scout_width, rom_scout_height, rom_scout_bits[i], w); rom_bitmaps[DESTROYER][i] = W_StoreBitmap(rom_destroyer_width, rom_destroyer_height, rom_destroyer_bits[i], w); rom_bitmaps[CRUISER][i] = W_StoreBitmap(rom_cruiser_width, rom_cruiser_height, rom_cruiser_bits[i], w); rom_bitmaps[BATTLESHIP][i] = W_StoreBitmap(rom_battleship_width, rom_battleship_height, rom_battleship_bits[i], w); rom_bitmaps[ASSAULT][i] = W_StoreBitmap(rom_assault_width, rom_assault_height, rom_assault_bits[i], w); rom_bitmaps[STARBASE][i] = W_StoreBitmap(rom_starbase_width, rom_starbase_height, rom_starbase_bits[i], w); rom_bitmaps[SGALAXY][i] = W_StoreBitmap(rom_galaxy_width, rom_galaxy_width, rom_galaxy_bits[i], w); rom_bitmaps[ATT][i] = W_StoreBitmap(rom_cruiser_width, rom_cruiser_height, rom_cruiser_bits[i], w); ori_bitmaps[SCOUT][i] = W_StoreBitmap(ori_scout_width, ori_scout_height, ori_scout_bits[i], w); ori_bitmaps[DESTROYER][i] = W_StoreBitmap(ori_destroyer_width, ori_destroyer_height, ori_destroyer_bits[i], w); ori_bitmaps[CRUISER][i] = W_StoreBitmap(ori_cruiser_width, ori_cruiser_height, ori_cruiser_bits[i], w); ori_bitmaps[BATTLESHIP][i] = W_StoreBitmap(ori_battleship_width, ori_battleship_height, ori_battleship_bits[i], w); ori_bitmaps[ASSAULT][i] = W_StoreBitmap(ori_assault_width, ori_assault_height, ori_assault_bits[i], w); ori_bitmaps[STARBASE][i] = W_StoreBitmap(ori_starbase_width, ori_starbase_height, ori_starbase_bits[i], w); ori_bitmaps[SGALAXY][i] = W_StoreBitmap(ori_galaxy_width, ori_galaxy_width, ori_galaxy_bits[i], w); ori_bitmaps[ATT][i] = W_StoreBitmap(ori_cruiser_width, ori_cruiser_height, ori_cruiser_bits[i], w); ind_bitmaps[SCOUT][i] = W_StoreBitmap(ind_scout_width, ind_scout_height, ind_scout_bits[i], w); ind_bitmaps[DESTROYER][i] = W_StoreBitmap(ind_destroyer_width, ind_destroyer_height, ind_destroyer_bits[i], w); ind_bitmaps[CRUISER][i] = W_StoreBitmap(ind_cruiser_width, ind_cruiser_height, ind_cruiser_bits[i], w); ind_bitmaps[BATTLESHIP][i] = W_StoreBitmap(ind_battleship_width, ind_battleship_height, ind_battleship_bits[i], w); ind_bitmaps[ASSAULT][i] = W_StoreBitmap(ind_assault_width, ind_assault_height, ind_assault_bits[i], w); ind_bitmaps[STARBASE][i] = W_StoreBitmap(ind_starbase_width, ind_starbase_height, ind_starbase_bits[i], w); ind_bitmaps[SGALAXY][i] = W_StoreBitmap(ind_galaxy_width, ind_galaxy_height, ind_galaxy_bits[i], w); ind_bitmaps[ATT][i] = W_StoreBitmap(ind_cruiser_width, ind_cruiser_height, ind_cruiser_bits[i], w); } clockpic = W_StoreBitmap(clock_width, clock_height, clock_bits, qwin); #ifdef BEEPLITE for (i = 0; i < emph_player_seq_frames; i++) { emph_player_seq[emph_player_seq_frames - (i + 1)] = W_StoreBitmap(emph_player_seq_width, emph_player_seq_height, emph_player_seq_bits[i], mapw); } for (i = 0; i < emph_player_seql_frames; i++) { emph_player_seql[emph_player_seql_frames - (i + 1)] = W_StoreBitmap(emph_player_seql_width, emph_player_seql_height, emph_player_seql_bits[i], w); } for (i = 0; i < emph_planet_seq_frames; i++) { emph_planet_seq[emph_planet_seq_frames - (i + 1)] = W_StoreBitmap(emph_planet_seq_width, emph_planet_seq_height, emph_planet_seq_bits[i], mapw); } #endif for (i = 0; i < 5; i++) { cloud[i] = W_StoreBitmap(cloud_width, cloud_height, cloud_bits[4 - i], w); plasmacloud[i] = W_StoreBitmap(plasmacloud_width, plasmacloud_height, plasmacloud_bits[4 - i], w); } etorp = W_StoreBitmap(etorp_width, etorp_height, etorp_bits, w); mtorp = W_StoreBitmap(mtorp_width, mtorp_height, mtorp_bits, w); eplasmatorp = W_StoreBitmap(eplasmatorp_width, eplasmatorp_height, eplasmatorp_bits, w); mplasmatorp = W_StoreBitmap(mplasmatorp_width, mplasmatorp_height, mplasmatorp_bits, w); bplanets[0] = W_StoreBitmap(planet_width, planet_height, indplanet_bits, w); bplanets[1] = W_StoreBitmap(planet_width, planet_height, fedplanet_bits, w); bplanets[2] = W_StoreBitmap(planet_width, planet_height, romplanet_bits, w); bplanets[3] = W_StoreBitmap(planet_width, planet_height, kliplanet_bits, w); bplanets[4] = W_StoreBitmap(planet_width, planet_height, oriplanet_bits, w); bplanets[5] = W_StoreBitmap(planet_width, planet_height, planet_bits, w); bplanets[6] = W_StoreBitmap(planet_width, planet_height, myplanet000_bits, w); mbplanets[0] = W_StoreBitmap(mplanet_width, mplanet_height, indmplanet_bits, mapw); mbplanets[1] = W_StoreBitmap(mplanet_width, mplanet_height, fedmplanet_bits, mapw); mbplanets[2] = W_StoreBitmap(mplanet_width, mplanet_height, rommplanet_bits, mapw); mbplanets[3] = W_StoreBitmap(mplanet_width, mplanet_height, klimplanet_bits, mapw); mbplanets[4] = W_StoreBitmap(mplanet_width, mplanet_height, orimplanet_bits, mapw); mbplanets[5] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet_bits, mapw); bplanets2[0] = bplanets[0]; mbplanets2[0] = mbplanets[0]; bplanets2[1] = W_StoreBitmap(planet_width, planet_height, planet001_bits, w); bplanets2[2] = W_StoreBitmap(planet_width, planet_height, planet010_bits, w); bplanets2[3] = W_StoreBitmap(planet_width, planet_height, planet011_bits, w); bplanets2[4] = W_StoreBitmap(planet_width, planet_height, planet100_bits, w); bplanets2[5] = W_StoreBitmap(planet_width, planet_height, planet101_bits, w); bplanets2[6] = W_StoreBitmap(planet_width, planet_height, planet110_bits, w); bplanets2[7] = W_StoreBitmap(planet_width, planet_height, planet111_bits, w); mbplanets2[1] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet001_bits, mapw); mbplanets2[2] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet010_bits, mapw); mbplanets2[3] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet011_bits, mapw); mbplanets2[4] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet100_bits, mapw); mbplanets2[5] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet101_bits, mapw); mbplanets2[6] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet110_bits, mapw); mbplanets2[7] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet111_bits, mapw); bplanets3[0] = W_StoreBitmap(planet_width, planet_height, myplanet000_bits, w); bplanets3[1] = W_StoreBitmap(planet_width, planet_height, myplanet001_bits, w); bplanets3[2] = W_StoreBitmap(planet_width, planet_height, myplanet010_bits, w); bplanets3[3] = W_StoreBitmap(planet_width, planet_height, myplanet011_bits, w); bplanets3[4] = W_StoreBitmap(planet_width, planet_height, myplanet100_bits, w); bplanets3[5] = W_StoreBitmap(planet_width, planet_height, myplanet101_bits, w); bplanets3[6] = W_StoreBitmap(planet_width, planet_height, myplanet110_bits, w); bplanets3[7] = W_StoreBitmap(planet_width, planet_height, myplanet111_bits, w); /* Added this */ mbplanets3[0] = W_StoreBitmap(mplanet_width, mplanet_height, myindmplanet_bits, mapw); mbplanets3[1] = W_StoreBitmap(mplanet_width, mplanet_height, mymplanet001_bits, mapw); mbplanets3[2] = W_StoreBitmap(mplanet_width, mplanet_height, mymplanet010_bits, mapw); mbplanets3[3] = W_StoreBitmap(mplanet_width, mplanet_height, mymplanet011_bits, mapw); mbplanets3[4] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet100_bits, mapw); mbplanets3[5] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet101_bits, mapw); mbplanets3[6] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet110_bits, mapw); mbplanets3[7] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet111_bits, mapw); bplanets4[0] = W_StoreBitmap(planet_width, planet_height, rmyplanet000_bits, w); bplanets4[1] = W_StoreBitmap(planet_width, planet_height, rmyplanet001_bits, w); bplanets4[2] = W_StoreBitmap(planet_width, planet_height, rmyplanet010_bits, w); bplanets4[3] = W_StoreBitmap(planet_width, planet_height, rmyplanet011_bits, w); bplanets4[4] = W_StoreBitmap(planet_width, planet_height, rmyplanet100_bits, w); bplanets4[5] = W_StoreBitmap(planet_width, planet_height, rmyplanet101_bits, w); bplanets4[6] = W_StoreBitmap(planet_width, planet_height, rmyplanet110_bits, w); bplanets4[7] = W_StoreBitmap(planet_width, planet_height, rmyplanet111_bits, w); mbplanets4[0] = W_StoreBitmap(mplanet_width, mplanet_height, rmyindmplanet_bits, mapw); mbplanets4[1] = W_StoreBitmap(mplanet_width, mplanet_height, rmymplanet001_bits, mapw); mbplanets4[2] = W_StoreBitmap(mplanet_width, mplanet_height, rmymplanet010_bits, mapw); mbplanets4[3] = W_StoreBitmap(mplanet_width, mplanet_height, rmymplanet011_bits, mapw); mbplanets4[4] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet100_bits, mapw); mbplanets4[5] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet101_bits, mapw); mbplanets4[6] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet110_bits, mapw); mbplanets4[7] = W_StoreBitmap(mplanet_width, mplanet_height, mplanet111_bits, mapw); for (i = 0; i < EX_FRAMES; i++) { expview[i] = W_StoreBitmap(ex_width, ex_height, ex_bits[i], w); } for (i = 0; i < SBEXPVIEWS; i++) { sbexpview[i] = W_StoreBitmap(sbexp_width, sbexp_height, sbexp_bits[i], w); } #ifndef VSHIELD_BITMAPS shield = W_StoreBitmap(shield_width, shield_height, shield_bits, w); #else for (i = 0; i < SHIELD_FRAMES; i++) shield[i] = W_StoreBitmap(shield_width, shield_height, shield_bits[i], w); #endif #ifdef VARY_HULL for (i = 0; i < HULL_FRAMES; i++) hull[i] = W_StoreBitmap(hull_width, hull_height, hull_bits[i], w); #endif cloakicon = W_StoreBitmap(cloak_width, cloak_height, cloak_bits, w); icon = W_StoreBitmap(icon_width, icon_height, icon_bits, iconWin); tractbits = W_StoreBitmap(tract_width, tract_height, tract_bits, w); pressbits = W_StoreBitmap(press_width, press_height, press_bits, w); } static int numShips(int owner) { int i, num = 0; struct player *p; for (i = 0, p = players; i < MAXPLAYER; i++, p++) if (p->p_status == PALIVE && p->p_team == owner) num++; return num; } static int realNumShips(int owner) { int i, num = 0; struct player *p; for (i = 0, p = players; i < MAXPLAYER; i++, p++) if (p->p_status != PFREE && p->p_team == owner) num++; return num; } /*! @brief choose a team and ship based on what team has fewer players @returns team number, ship type */ static void mercenary(int *team, int *ship) { int i, count[NUMTEAM], large[2] = {0, 0}; for (i=0; i count[large[0]]) { large[1] = large[0]; large[0] = i; } else if ((count[i] > count[large[1]]) || (large[0] == large[1])) { large[1] = i; } } /* large[0] == largest team, large[1] == second largest team */ /* if all teams are empty, pick a random team */ if (count[large[0]] == 0) { *team = random() % 4; *ship = CRUISER; return; } /* mercenary joins the second largest team */ *team = large[1]; *ship = CRUISER; } static void show_team_windows() { int i; for (i=0; ip_whydead != KWINNER && me->p_whydead != KGENOCIDE) showMotd(w, motd_offset); run_clock(startTime); updatedeath(); if (remap[me->p_team] == NOBODY) RedrawPlayerList(); /* When you first login */ else UpdatePlayerList(); /* Otherwise */ quittime = (time_t) intDefault("autoquit", quittime); if (fastGuest) { if (previous_team == -1 && previous_ship == -1) { mercenary(&chosen_team, &chosen_ship); } } pickOk = -1; while (1) { while (!W_EventsPending()) { fd_set rfds; struct timeval tv; int retval; /* send initial request to server */ if (request_sent == 0 && chosen_team != -1 && chosen_ship != -1) { if (isServerDead()) return; sendTeamReq(chosen_team, chosen_ship); request_sent++; request_time = time(NULL); hide_team_windows(); } /* periodically repeat request to server */ if (request_sent > 0 && (time(NULL) - request_time) > 3) { sendTeamReq(chosen_team, chosen_ship); warning("Odd, server has not replied, sending it again ..."); request_sent++; request_time = time(NULL); } #ifndef HAVE_WIN32 tv.tv_sec = 1; /* rate at which quit clock is updated */ #else tv.tv_sec = 0; #endif tv.tv_usec = 0; FD_ZERO(&rfds); #ifndef HAVE_WIN32 FD_SET(W_Socket(), &rfds); #endif if (!isServerDead()) { FD_SET(sock, &rfds); if (udpSock >= 0) FD_SET(udpSock, &rfds); } retval = SELECT(32, &rfds, 0, 0, &tv); if (retval < 0) { if (errno == EBADF) return; perror("select"); } if (FD_ISSET(W_Socket(), &rfds)) { W_EventsQueuedCk(); } if (FD_ISSET(sock, &rfds) || (udpSock >= 0 && FD_ISSET(udpSock, &rfds))) { readFromServer(&rfds); if (isServerDead()) { fprintf(stderr, "server connection lost, during team or ship selection\n"); warning("Lost connection to server, " "your only option is to quit and try again."); hide_team_windows(); } switch (pickOk) { case -1: /* nothing heard yet */ break; case 0: /* no */ show_team_windows(); chosen_team = -1; request_sent = 0; pickOk = -1; break; case 1: /* yes */ hide_quit_window(); previous_team = chosen_team; previous_ship = chosen_ship; *team = chosen_team; *s_type = chosen_ship; return; } } elapsed = time(NULL) - startTime; if (elapsed > quittime) { hide_quit_window(); hide_team_windows(); return; } #ifndef HAVE_WIN32 map(); /* jmn - update galactic */ #endif if (lasttime != time(NULL)) { run_clock(lasttime); updatedeath(); if (W_IsMapped(playerw)) UpdatePlayerList(); showTimeLeft(elapsed, quittime); lasttime = time(NULL); } okayMask = tournMask; for (i=0; i motd_last) { motd_offset = motd_offset - MOTD_PAGE_SIZE; break; } W_ClearWindow(w); showMotd(w, motd_offset); break; case 'b': /* Scroll motd backward */ if (motd_offset == 0) break; motd_offset = motd_offset - MOTD_PAGE_SIZE; if (motd_offset < 0) motd_offset = 0; W_ClearWindow(w); showMotd(w, motd_offset); break; case 'F': /* Scroll motd forward */ motd_offset = motd_offset + 4; if (motd_offset > motd_last) { motd_offset = motd_offset - 4; break; } W_ClearWindow(w); showMotd(w, motd_offset); break; case 'B': /* Scroll motd backward */ if (motd_offset == 0) break; motd_offset = motd_offset - 4; if (motd_offset < 0) motd_offset = 0; W_ClearWindow(w); showMotd(w, motd_offset); break; } } case W_EV_BUTTON: for (i=0; ipl_owner & owner) { num++; } } if (num != 0) return (0); return (1); } /*! @brief Check if a line should be highlighted on motd @details The line is checked at a particular known position for the player character name. Intended for use in highlighting your score in a list of scores. @returns zero for no, one for yes. */ static int checkBold(char *line) { char *s, *t; int i; int end = 0; if (me == NULL) return 0; if (strlen(line) < 60) return 0; s = line + 4; t = me->p_name; for (i = 0;i < 16;i++) { if (!end) { if (*t == '\0') end = 1; else if (*t != *s) return 0; } if (end) { if (*s != ' ') return 0; } s++; t++; } return 1; } static void show_motd_heading(W_Window w, char *text, int line, int colour) { int length = strlen(text); int center = TWINSIDE / 2 - (length * W_Textwidth) / 2; W_WriteText(w, center, line * W_Textheight, colour, text, length, W_RegularFont); } /*! @brief Redraw the message of the day (MOTD) */ void showMotd(W_Window w, int atline) { int i, length, top, center; struct motd_line *data; int count; char buf[128]; sprintf(buf, "--- %s ---", (char *) query_cowid()); length = strlen(buf); center = TWINSIDE / 2 - (length * W_Textwidth) / 2; W_WriteText(w, center, W_Textheight, W_Cyan, buf, length, W_BoldFont); show_motd_heading(w, cbugs, 3, W_Cyan); if (me == NULL) { show_motd_heading(w, "while you are in the queue", 5, W_Grey); show_motd_heading(w, "do some reading or play somewhere else", 6, W_Grey); } else { show_motd_heading(w, "this is the team selection window", 5, W_Grey); show_motd_heading(w, "press enter to join the default team", 6, W_Grey); } show_motd_heading(w, "server message follows below", 9, W_Grey); top = 11; data = motd_lines; while (data != NULL) { if (data->bold == -1) data->bold = checkBold(data->data); data = data->next; } data = motd_lines; for (i = 0; i < atline; i++) { if (data == NULL) { atline = 0; data = motd_lines; break; } data = data->next; } count = MOTD_PAGE_SIZE; for (i = top; i < 50; i++) { if (data == NULL) break; if (!strcmp(data->data, "\t@@@")) /* ATM */ break; if (data->bold) { W_WriteText(w, 20, i * W_Textheight, textColor, data->data, strlen(data->data), W_BoldFont); } else { W_WriteText(w, 20, i * W_Textheight, textColor, data->data, strlen(data->data), W_RegularFont); } data = data->next; count--; if (count <= 0) break; } if (!motd_clears) showValues(data); } /*! @brief Show the current values of the .sysdef parameters. */ static void showValues(struct motd_line *data) { int i; static char *msg = "Server options set:"; /* try to find the start of the info */ while (1) { if (data == NULL) return; if (!strcmp(data->data, STATUS_TOKEN)) break; data = data->next; } data = data->next; W_WriteText(mapw, 20, 14 * W_Textheight, textColor, msg, strlen(msg), W_RegularFont); for (i = 16; i < 50; i++) { int y = i * W_Textheight * 15 / 10; if (data == NULL) break; if (data->data[0] == '+') /* quick boldface hack */ W_WriteText(mapw, 20, y, textColor, data->data + 1, strlen(data->data) - 1, W_BoldFont); else W_WriteText(mapw, 20, y, textColor, data->data, strlen(data->data), W_RegularFont); data = data->next; } } /*! @brief Store a newly received SP_MOTD text line for display. */ void newMotdLine(char *line) { static struct motd_line *old = NULL; /* previous item allocated */ static int statmode = 0; struct motd_line *new; if (strcmp(line, MOTDCLEARLINE) == 0) { W_ClearWindow(w); ClearMotd(); statmode = 0; return; } if (!strcmp(line, STATUS_TOKEN)) statmode = 1; new = (struct motd_line *) malloc(sizeof(struct motd_line)); if (new == NULL) return; if (!statmode) motd_last++; /* add new line to tail of list */ new->next = NULL; new->bold = -1; new->data = strdup(line); if (motd_lines == NULL) { motd_lines = new; } else { old->next = new; } old = new; motd_refresh_needed++; } /*! @brief Refresh the displayed MOTD @details If a refresh is known to be needed, it is done. Called on receipt of an SP_MASK following a server's stream of SP_MOTD, as SP_MASK is not sent until SP_MOTD is completed and ready to be displayed. */ void motd_refresh() { if (motd_refresh_needed) { showMotd(w, motd_offset); motd_refresh_needed = 0; } } /*! @brief Refresh the displayed MOTD */ static void ClearMotd(void) { struct motd_line *next, *this; next = motd_lines; /* start of motd information */ while (next != NULL) { this = next; next = next->next; free(this->data); free(this); } motd_lines = NULL; motd_offset = 0; motd_last = 0; motd_clears++; } /* ARGSUSED */ static void getResources(char *prog) { getColorDefs(); getTiles(); } static void getTiles(void) { stipple = W_StoreBitmap(stipple_width, stipple_height, stipple_bits, w); } static void redrawTeam(W_Window win, int teamNo, int *lastnum) { char buf[BUFSIZ]; static char *teams[] = {"Federation", "Romulan", "Klingon", "Orion"}; int num = numShips(1 << teamNo); /* Only redraw if number of players has changed */ if (*lastnum == num) return; W_ClearWindow(win); W_WriteText(win, 5, 5, shipCol[teamNo + 1], teams[teamNo], strlen(teams[teamNo]), W_RegularFont); (void) sprintf(buf, "%d", num); W_MaskText(win, 5, 46, shipCol[teamNo + 1], buf, strlen(buf), W_BigFont); *lastnum = num; } static void redrawQuit(void) { char *msg = "Quit"; int tx = W_WindowWidth(qwin) / 2 - W_Textwidth * strlen(msg) / 2; W_WriteText(qwin, tx, 5, textColor, msg, -1, W_RegularFont); } void drawIcon(void) { W_WriteBitmap(0, 0, icon, W_White); } #define CLOCK_WID (BOXSIDE * 9 / 10) #define CLOCK_HEI (BOXSIDE * 2 / 3) #define CLOCK_BDR 0 #define CLOCK_X (BOXSIDE / 2 - CLOCK_WID / 2) #define CLOCK_Y (BOXSIDE / 2 - CLOCK_HEI / 2) #define XPI 3.141592654 static void showTimeLeft(time_t time, time_t max) { char buf[BUFSIZ], *cp; int cx, cy, ex, ey, tx, ty; if ((max - time) < 10 && time & 1) { W_Beep(); } /* XFIX */ W_ClearArea(qwin, CLOCK_X, CLOCK_Y, CLOCK_WID, CLOCK_HEI); cx = CLOCK_X + CLOCK_WID / 2; cy = CLOCK_Y + CLOCK_HEI / 2; ex = cx - clock_width / 2; ey = cy - clock_height / 2; W_WriteBitmap(ex, ey, clockpic, foreColor); ex = cx - clock_width * sin(2 * XPI * time / max) / 2; ey = cy - clock_height * cos(2 * XPI * time / max) / 2; W_MakeLine(qwin, cx, cy, ex, ey, foreColor); sprintf(buf, "%d", (int) (max - time)); tx = cx - W_Textwidth * strlen(buf) / 2; ty = cy - W_Textheight / 2; W_WriteText(qwin, tx, ty, textColor, buf, strlen(buf), W_RegularFont); cp = "Auto Quit Timer"; tx = cx - W_Textwidth * strlen(cp) / 2; ty = CLOCK_Y + CLOCK_HEI; W_WriteText(qwin, tx, ty, textColor, cp, strlen(cp), W_RegularFont); } netrek-client-cow-3.3.2/getship.h0000664000175000017500000000013213657750470015661 0ustar jamesjames/* getship.c */ void getshipdefaults(void); void getship(struct ship *shipp, int s_type); netrek-client-cow-3.3.2/mkcflags.c0000664000175000017500000000603113657750470016004 0ustar jamesjames#include "config.h" #include #include #include #include #include INC_SYS_TIME #include #include "version.h" #include "patchlevel.h" /*****************************************************************************/ /* */ /* This program generates cflags.c tm is not identical across arches, date */ /* is a poor way of getting the compilation time. A simple program (just */ /* like this one) is the answer. */ /* */ /* Oh yea, better have an ANSI compiler. --oh well. HP, you suck! */ /* ANSI C defines the tm structure in time.h so better learn ANSI C */ /* */ /*****************************************************************************/ int main (argc, argv) int argc; char *argv[]; { time_t seconds; struct tm *tm_date; char tbuff1[100], tbuff2[100]; char pigcall[120]; char *pigcallresp (); if (argc != 3) { fprintf (stderr, "This program takes 2 argument, why are you running it anyway?\n"); exit (1); } seconds = time(0); tm_date = localtime (&seconds); strftime (tbuff1, sizeof (tbuff1), "%a %b %d, %Y %r", tm_date); strftime (tbuff2, sizeof (tbuff2), "%D", tm_date); printf ("/*****************************************************************************/\n"); printf ("/* Cflags.c: generated by mkcflags on %s */\n", tbuff1); printf ("/*****************************************************************************/\n"); printf ("#include \"config.h\"\n"); printf ("#include \n"); printf ("#include INC_SYS_TIME\n\n"); printf ("char cflags[]=\"%s\";\n", argv[1]); printf ("char arch[]=\"%s\";\n", argv[2]); printf ("char cdate[]=\"%s\";\n", tbuff2); printf ("struct timeval tv_ctime={%u,0};\n", (int) seconds); printf ("char cbugs[]=\"feedback to: quozl@us.netrek.org\";\n"); printf ("char cowid[]=\"%s\";\n", pigcallresp (pigcall, tbuff2, argv[2])); exit (0); } /* slightly modified pigcallresp */ char * pigcallresp (pigcall, cdate, arch) char *pigcall; char *cdate; char *arch; { sprintf (pigcall, "%s.%d, %s, %s, ", version, PATCHLEVEL, arch, cdate); /* ack .... gross short hand fomulas for compile options!!! */ #ifdef RSA strcat (pigcall, "R"); #endif #ifdef NBT strcat (pigcall, "M"); #endif #ifdef DEBUG strcat (pigcall, "D"); #endif #ifdef CORRUPTED_PACKETS strcat (pigcall, "C"); #endif #ifdef SHORT_PACKETS strcat (pigcall, "S"); #endif #ifdef EXPIRE sprintf (buf, "E%d", EXPIRE); strcat (pigcall, buf); #endif #ifdef ARMY_SLIDER strcat (pigcall, "A"); #endif #ifdef META strcat (pigcall, "m"); #endif #ifdef TOOLS strcat (pigcall, "T"); #endif #ifdef SOUND strcat (pigcall, "s"); #endif #ifdef RCD strcat (pigcall, "r"); #endif strcat (pigcall, "P"); return (pigcall); } netrek-client-cow-3.3.2/camera.c0000664000175000017500000000317113657750470015447 0ustar jamesjames#include "config.h" #ifdef CAMERA #include #include #include #include #include "defs.h" /* internal context */ static Display *disp = NULL; static Visual *vis = NULL; static Screen *scr = NULL; static Colormap cm; static Window rw, tw; static int rx, ry; static unsigned int rdx, rdy; static int frame; static int initialised = 0; /* maximum file name size */ #define MAXFRAMEFILENAMESIZE 80 void camera_init(Display *arg_disp, Window arg_window) { if (initialised) return; disp = arg_disp; tw = arg_window; scr = ScreenOfDisplay(disp, DefaultScreen(disp)); vis = DefaultVisual(disp, XScreenNumberOfScreen(scr)); cm = DefaultColormap(disp, XScreenNumberOfScreen(scr)); rw = RootWindow(disp, XScreenNumberOfScreen(scr)); imlib_context_set_display(disp); imlib_context_set_visual(vis); imlib_context_set_colormap(cm); imlib_context_set_color_modifier(NULL); imlib_context_set_operation(IMLIB_OP_COPY); frame = 0; rx = 0; ry = 0; rdx = TWINSIDE; /* restrict to tactical */ rdy = TWINSIDE; imlib_context_set_drawable(tw); initialised++; } void camera_snap(Display *arg_disp, Window arg_window) { Imlib_Image image; char *name; camera_init(arg_disp, arg_window); image = imlib_create_image_from_drawable(rw, rx, ry, rdx, rdy, 0); imlib_context_set_image(image); imlib_image_attach_data_value("quality", NULL, 15, NULL); name = malloc(MAXFRAMEFILENAMESIZE); snprintf(name, MAXFRAMEFILENAMESIZE-1, "netrek-%03d.png", frame++); imlib_save_image(name); imlib_free_image_and_decache(); fprintf(stderr, "camera_snap: %s\n", name); free(name); } #endif netrek-client-cow-3.3.2/spopt.h0000664000175000017500000000107113657750470015366 0ustar jamesjames/* spopt.h Functions to look after the Short Packet window. */ void sprefresh(int i); /* Refresh button i in the Short Packed Window. Buttons are: SPK_VFIELD - Variable short packets. SPK_MFIELD - Messages. SPK_KFIELD - Kill Messages. SPK_WFIELD - Warn Messages. SPK_TFIELD - Recieve Threshold. SPK_DONE - Done. */ void spaction(W_Event * data); /* Handle a button press. */ void spwindow(void); /* Display the Short Packet window. */ void spdone(void); /* Unmap the Short Packet window. */ netrek-client-cow-3.3.2/sound.h0000664000175000017500000000317713657750470015362 0ustar jamesjames/* Sound defines * */ #ifndef __SOUND_H #define __SOUND_H #define NO_SOUND 0 #define FIRE_TORP_SOUND 1 #define PHASER_SOUND 2 #define FIRE_PLASMA_SOUND 3 #define EXPLOSION_SOUND 4 #define SBEXPLOSION_SOUND 5 #define CLOAK_SOUND 6 #define UNCLOAK_SOUND 7 #define SHIELD_DOWN_SOUND 8 #define SHIELD_UP_SOUND 9 #define TORP_HIT_SOUND 10 #define REDALERT_SOUND 11 #define BUZZER_SOUND 12 #define ENGINE_SOUND 13 #define THERMAL_SOUND 14 #define ENTER_SHIP_SOUND 15 #define SELF_DESTRUCT_SOUND 16 #define PLASMA_HIT_SOUND 17 #define MESSAGE_SOUND 18 #define MESSAGE1_SOUND 19 #define MESSAGE2_SOUND 20 #define MESSAGE3_SOUND 21 #define MESSAGE4_SOUND 22 #define MESSAGE5_SOUND 23 #define MESSAGE6_SOUND 24 #define MESSAGE7_SOUND 25 #define MESSAGE8_SOUND 26 #define MESSAGE9_SOUND 27 /* Other people's sounds; not all of these are currently used */ #define OTHER_SOUND_OFFSET 27 #define OTHER_FIRE_TORP_SOUND 28 #define OTHER_PHASER_SOUND 29 #define OTHER_FIRE_PLASMA_SOUND 30 #define OTHER_EXPLOSION_SOUND 31 #define OTHER_SBEXPLOSION_SOUND 32 #define NUM_SOUNDS 32 #if !defined(sgi) struct Sound { char *name; int priority; int flag; }; #endif /* Window stuff */ extern void sounddone(void); extern void soundwindow(void); extern int sound_window_height(void); extern void soundaction (W_Event * data); /* Global sound functions */ extern void Play_Sound(int type); extern void Init_Sound(void); extern void Exit_Sound(void); extern void Abort_Sound(int type); #if defined(sgi) #define ENG_OFF -1, -1 #define ENG_ON 0, 0 extern void Engine_Sound(int speed, int maxspeed); #endif #endif /* __SOUND_H */ netrek-client-cow-3.3.2/README.1.030000664000175000017500000001715413657750470015321 0ustar jamesjamesThis file contains the most recent changes to the COW client, with example .xtrekrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience. ***************************************************************** 1) Change Log ***************************************************************** 1.03 pl1 - map/unmap the motd window button [dearing] - RCD docs update [ahabig] - FTP server switched from infant2 to bigbang [ahabig] - SGI X crash bug fixed [siegl] - security enhancements [siegl] 1.03 pl0 - configurable destination macro keys [siegl] - added lots of tricks to XTREKRC.example [siegl] - invalid robots race char fix [siegl] - upgraded to autoconfig 2 [siegl] - add external rint() replacement function [siegl] Fixes by [Soutter] * Added a playerlist option "sortMyTeamFirst". * Added phaser shrink options "shrinkPhaserOnMiss" and "theirPhaserShrink". * map() now has its own module and is a little faster I think. * local() now has its own module and is a little faster I think. * Bug fixed: Lock symbol sometimes blurs on the galactic. * Bug fixed: Macros of the form "mac.: " don't work. * Bug fixed: Tractors sometimes drawn out of place if shrinkPhasers used. * Bug fixed: Local map not updated until you first move. * Bug fixed: Playerlist kills not updated when you first enter the game. * Bug fixed: Some buttons in the Short Packet window are not always drawn. * Bug fixed: When two ships overlap, the resulting color is sometimes black. * Bug fixed: Planets on the galactic are sometimes partially erased. * Bug fixed: You can write slightly longer messages than can be sent. * Bug improved: Stationary players can be hidden by planets on the galactic. * Bug fixed: When observing a player, the dashboard does not show torps, kills or max armies as it would in normal mode. * Bug Fixed: Holding down the `n' key for a few seconds will crash the client. * Bug fixed: Obviously dead torps/phasers/plasmas are sometimes drawn. * Bug fixed: The why-dead message is slightly different after window refresh. * Bug Fixed: Failed meta-server reads effect the metaCache file. * Bug Fixed: No positive feedback of selection from the meta-server window. ***************************************************************** 2) Cut and past changes to make COW work like it used to. ***************************************************************** 1.03 pl1 The WQ window looks different now and there's no way to get back the old one ;) 1.03 pl0 No changes visible exept all the bug fixes :) ***************************************************************** 3) Cut and past changes to turn on *all* new features. ***************************************************************** 1.03 pl1 No new features 1.03 pl0 # # Set symbolic names for macro # key.[key].[dest]: [name of key] # If the destination isn't specified the key default to team. # Set the actual destination by sending a message: # set [name of key] [destination id] # to the shell ("!") # key.C: captain # Set Captian to target player mac.^C.!: set captain %g # Macros to the captain. mac.o.C: Hi Captain let me suggest a base ogg? # key.B: base # Set Base to target player mac.^B.!: set base %g # Macros to the Base mac.a.B: BASE: Free armies for me? # key.m.A: me # set the me (m) key to myself mac.^m.!: set me %c # some Macro sent to myself mac.t.m: TIME theirPhaserShrink: 6 # # Range: 0-16 # # How much to shrink everybody else's phasers by. "phaserShrink" # still effects your own phasers. # shrinkPhaserOnMiss: on # # If on, a phaser is shrunk even if the phaser does not hit. # sortMyTeamFirst: on # # This option only applies if "sortPlayers" is on. # # With this option, the playerlist is order with your team at the top. # Otherwise, the playerlist has the enemy team(s) first. # **************************************************************** 4) New manual sections **************************************************************** *************************************************************** * Symbolic names for macro destinations - Kurt Siegl 27/4/95 *************************************************************** You always wanted to send a macro directly to the captain, base, or the second SC bomber? Symbolic macro keys will solve your problems. Here how it goes: In the .xtrekrc file you assign a key to a symbolic name: key.[key].[dest]: [name of key] If the destination isn't specified the key defaults to team. Examples: key.C: captain key.B.t: base key.m.A: me Then you can use that new key in your macros. Examples: mac.o.C: Hi Captain let me suggest a base ogg? mac.a.B: BASE: Free armies for me? mac.t.m: TIME Finally during runtime you may change the actual destination by sending a message: set [name of key] [destination id] to the shell ("!") tools. Of corse this may be done with macros as well. Examples: mac.^C.!: set captain %g mac.^m.!: set me %c You can check the settings on the shell tools window "M". *************************************************************** Connection Types: UDP and TCP explained *************************************************************** UDP provides an unreliable, packet-based protocol for sending data across an IP network. There are a variety of ways that a UDP packet can be lost or discarded, including a failure of the underlying communication mechanism. UDP implements a checksum over the data portion of the packet. If the checksum of a received packet is in error, the packet will be dropped with no indication given to the user. A queue of received packets is provided for each UDP socket. This queue has a limited capacity. Arriving datagrams which will not fit within its high-water capacity are silently discarded. Guest Rd 71 27 2% / 13% The stats above show a typically UDP connection. It has loss of packets but its round-trip times are fairly low. TCP provides a reliable, flow-controlled, in order transfer of data across an IP network. There is nothing fundamentally different about the way UDP and TCP packets travel over the wire. The only real difference is that TCP will keep sending the same packet over and over again until it gets an acknowledgement back. As a result, TCP connects are typically slower than UDP connections and usually require more bandwidth. TCP is slower because it guarantees that packets will arrive in order and so a lost packet can hold up later packets. Example: Guest Ff 405 669 0% / 0% ^^^ ^^^ ^^^^^^^^^ The above shows possibly the same connection with UDP turned off. There is no loss but the round trip times are much higher. NOTES: * COW always uses TCP for some things. For example, the text messages that you can send to other players are implement in TCP to guarentee that they always arrive. However, if a UDP connection is also available, it is used for the vast majority of communication. * COW will fall back to using a TCP only if it fails to open a UDP link. If you find that you have high lag and no loss, you probably should display the UDP control window (the default key is `+') and turn UDP back on by pressing the top button. * You are recommended to use a TCP connection if you are at the same site (within a few milliseconds lag) of the server you are playing on. The main reason for using UDP is to reduce your round trip times. * The option "tryUdp" can be used to set a preference for using UDP (tryUdp: on) or TCP only (tryUdp: off). netrek-client-cow-3.3.2/spopt.c0000664000175000017500000000636113657750470015370 0ustar jamesjames/* * spopt.c * * Functions to look after the Short Packet window. */ #include "config.h" #ifdef SHORT_PACKETS #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "short.h" #include "spopt.h" void sprefresh(int i) /* * Refresh button i in the Short Packed Window. * * Buttons are: * SPK_VFIELD - Variable short packets. * SPK_MFIELD - Messages. * SPK_KFIELD - Kill Messages. * SPK_WFIELD - Warn Messages. * SPK_TFIELD - Recieve Threshold. * SPK_DONE - Done. */ { char buf[BUFSIZ]; switch (i) { case SPK_VFIELD: sprintf(buf, "%seceive variable and short packets", recv_short ? "R" : "Don't r"); break; case SPK_MFIELD: sprintf(buf, "%seceive messages", recv_mesg ? "R" : "Don't r"); break; case SPK_KFIELD: sprintf(buf, "%seceive kill messages", recv_kmesg ? "R" : "Don't r"); break; case SPK_WFIELD: sprintf(buf, "%seceive warning messages", recv_warn ? "R" : "Don't r"); break; case SPK_TFIELD: sprintf(buf, "Receive threshold: %s_", recv_threshold_s); break; case SPK_DONE: sprintf(buf, "Done"); break; } W_WriteText(spWin, 0, i, textColor, buf, strlen(buf), 0); } void spaction(W_Event * data) /* * Handle a button press. */ { int v; register int i; register char *cp; switch (data->y) { case SPK_VFIELD: if (data->type == W_EV_BUTTON) { if (recv_short) sendShortReq(SPK_VOFF); else sendShortReq(SPK_VON); } break; case SPK_MFIELD: if (data->type == W_EV_BUTTON) { if (recv_mesg) sendShortReq(SPK_MOFF); else sendShortReq(SPK_MON); } break; case SPK_KFIELD: if (data->type == W_EV_BUTTON) { if (recv_kmesg) sendShortReq(SPK_M_NOKILLS); else sendShortReq(SPK_M_KILLS); } break; case SPK_WFIELD: if (data->type == W_EV_BUTTON) { if (recv_warn) sendShortReq(SPK_M_NOWARN); else sendShortReq(SPK_M_WARN); } break; case SPK_TFIELD: if (data->type == W_EV_KEY) { switch (data->key) { case '\b': case '\177': cp = recv_threshold_s; i = strlen(cp); if (i > 0) { cp += i - 1; *cp = '\0'; } break; case '\025': case '\030': recv_threshold_s[0] = '\0'; break; default: if (data->key >= '0' && data->key <= '9') { cp = recv_threshold_s; i = strlen(cp); if (i < 4) { cp += i; cp[1] = '\0'; cp[0] = data->key; } } break; } sprefresh(SPK_TFIELD); } break; case SPK_DONE: if (data->type == W_EV_BUTTON) { if (sscanf(recv_threshold_s, "%d", &v) != 1) strcpy(recv_threshold_s, "0"); else if (recv_threshold != v) { recv_threshold = v; sendThreshold(recv_threshold); } spdone(); } break; } } void spwindow(void) { register int i; for (i = 0; i < SPK_NUMFIELDS; i++) sprefresh(i); /* Map window */ W_MapWindow(spWin); } void spdone(void) { /* Unmap window */ W_UnmapWindow(spWin); } #endif netrek-client-cow-3.3.2/planetlist.c0000664000175000017500000000277713657750470016411 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" static char *teamname[9] = { "IND", "FED", "ROM", "", "KLI", "", "", "", "ORI" }; /* * Open a window which contains all the planets and their current * * statistics. Players will not know about planets that their team * has not * orbited. */ void planetlist(void) { register int i; register int k = 0; char buf[BUFSIZ]; register struct planet *j; /* W_ClearWindow(planetw); */ (void) sprintf(buf, "Planet Name own armies REPAIR FUEL AGRI CORE info"); W_WriteText(planetw, 2, 1, textColor, buf, strlen(buf), W_RegularFont); k = 2; for (i = 0, j = &planets[i]; i < MAXPLANETS; i++, j++) { if (j->pl_info & me->p_team) { (void) sprintf(buf, "%-16s %3s %3d %6s %4s %4s %4s %c%c%c%c", j->pl_name, teamname[j->pl_owner], j->pl_armies, (j->pl_flags & PLREPAIR ? "REPAIR" : " "), (j->pl_flags & PLFUEL ? "FUEL" : " "), (j->pl_flags & PLAGRI ? "AGRI" : " "), (j->pl_flags & PLCORE ? "CORE" : " "), (j->pl_info & FED ? 'F' : ' '), (j->pl_info & ROM ? 'R' : ' '), (j->pl_info & KLI ? 'K' : ' '), (j->pl_info & ORI ? 'O' : ' ')); W_WriteText(planetw, 2, k++, planetColor(j), buf, strlen(buf), planetFont(j)); } else { (void) sprintf(buf, "%-16s", j->pl_name); W_WriteText(planetw, 2, k++, unColor, buf, strlen(buf), W_RegularFont); } } } netrek-client-cow-3.3.2/pingstats.c0000664000175000017500000001314513657750470016235 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "pingstats.h" #define BX_OFF() ((textWidth + 1) * W_Textwidth + S_IBORDER) #define BY_OFF(line) ((line) * (W_Textheight + S_IBORDER) + S_IBORDER) #define TX_OFF(len) ((textWidth - len) * W_Textwidth + S_IBORDER) #define TY_OFF(line) BY_OFF(line) /* right side labels */ #define TEXT_WIDTH (5*W_Textwidth + 2*STAT_BORDER) #define STAT_WIDTH (260 + TEXT_WIDTH) #define STAT_HEIGHT BY_OFF(NUM_SLIDERS) #define STAT_BORDER 2 #define S_IBORDER 5 #define STAT_X 422 #define STAT_Y 13 #define SL_WID \ (STAT_WIDTH -TEXT_WIDTH - 2 * S_IBORDER - (textWidth + 1) * W_Textwidth) #define SL_HEI (W_Textheight) #define NUM_ELS(a) (sizeof (a) / sizeof (*(a))) #define NUM_SLIDERS NUM_ELS(sliders) typedef struct slider { char *label; int min, max; int green, yellow; int label_length; int diff; int *var; int lastVal; } SLIDER; typedef struct record { int *data; int last_value; } RECORD; static SLIDER sliders[] = { {"round trip time", 0, 500, 100, 200}, {"average r.t. time", 0, 500, 100, 200}, {"lag (st. dev.)", 0, 100, 20, 50}, {"%pack in loss", 0, 50, 10, 20}, {"%pack out loss", 0, 50, 10, 20}, {"tot %pack loss in", 0, 50, 5, 10}, {"tot %pack loss out", 0, 50, 5, 10}, }; static int textWidth = 0; static int initialized = 0; static void box(int filled, int x, int y, int wid, int hei, W_Color color), text(int value, int y); /* externals from ping.c (didn't feel like cluttering up data.c with them) */ extern int ping_iloss_sc; /* inc % loss 0--100, server * * * * to client */ extern int ping_iloss_cs; /* inc % loss 0--100, client * * * * to server */ extern int ping_tloss_sc; /* total % loss 0--100, * * * * server to client */ extern int ping_tloss_cs; /* total % loss 0--100, * * * * client to server */ extern int ping_lag; /* delay in ms of last ping */ extern int ping_av; /* average rt */ extern int ping_sd; /* standard deviation */ int pStatsHeight(void) { return STAT_HEIGHT; } int pStatsWidth(void) { return STAT_WIDTH; } void initPStats(void) { int i; if (initialized) return; initialized = 1; sliders[0].var = (int *) &ping_lag; sliders[1].var = (int *) &ping_av; sliders[2].var = (int *) &ping_sd; sliders[3].var = (int *) &ping_iloss_sc; sliders[4].var = (int *) &ping_iloss_cs; sliders[5].var = (int *) &ping_tloss_sc; sliders[6].var = (int *) &ping_tloss_cs; /* adjust */ if (ping_av > 0) { sliders[0].max = MAX(ping_av * 2, 200); sliders[1].max = MAX(ping_av * 2, 200); } for (i = 0; i < NUM_SLIDERS; i++) { sliders[i].label_length = strlen(sliders[i].label); textWidth = MAX(textWidth, sliders[i].label_length); sliders[i].diff = sliders[i].max - sliders[i].min; sliders[i].lastVal = 0; } } void redrawPStats(void) { int i; W_ClearWindow(pStats); initPStats(); for (i = 0; i < NUM_SLIDERS; i++) { sliders[i].lastVal = 0; } for (i = 0; i < NUM_SLIDERS; i++) { W_WriteText(pStats, TX_OFF(sliders[i].label_length), TY_OFF(i), textColor, sliders[i].label, sliders[i].label_length, W_RegularFont); box(0, BX_OFF() - 1, BY_OFF(i) - 1, SL_WID + 2, SL_HEI + 2, borderColor); sliders[i].lastVal = 0; } } void updatePStats(void) { int i, value, diff, old_x, new_x; W_Color color; SLIDER *s; /* do the average and standard deviation calculations */ initPStats(); for (i = 0; i < NUM_SLIDERS; i++) { s = &sliders[i]; value = *(s->var); /* update decimal values at the right */ text(*(s->var), BY_OFF(i)); if (value < s->min) value = s->min; else if (value > s->max) value = s->max; if (value == s->lastVal) continue; diff = value - s->lastVal; if (diff < 0) { /* bar decreasing */ old_x = s->lastVal * SL_WID / s->diff; new_x = value * SL_WID / s->diff; box(1, BX_OFF() + new_x, BY_OFF(i), old_x - new_x, SL_HEI, backColor); if (s->lastVal > s->green && value <= s->green) box(1, BX_OFF(), BY_OFF(i), new_x, SL_HEI, gColor); else if (s->lastVal > s->yellow && value <= s->yellow) box(1, BX_OFF(), BY_OFF(i), new_x, SL_HEI, yColor); } else { /* bar increasing */ if (s->lastVal <= s->yellow && value > s->yellow) { color = rColor; s->lastVal = 0; } else if (s->lastVal <= s->green && value > s->green) { color = yColor; s->lastVal = 0; } else if (value > s->yellow) color = rColor; else if (value > s->green) color = yColor; else color = gColor; old_x = s->lastVal * SL_WID / s->diff; new_x = value * SL_WID / s->diff; box(1, BX_OFF() + old_x, BY_OFF(i), new_x - old_x, SL_HEI, color); } s->lastVal = value; } } static void box(int filled, int x, int y, int wid, int hei, W_Color color) { if (wid == 0) return; if (filled) { /* XFIX */ W_FillArea(pStats, x, y, wid + 1, hei + 1, color); return; } W_MakeLine(pStats, x, y, x + wid, y, color); W_MakeLine(pStats, x + wid, y, x + wid, y + hei, color); W_MakeLine(pStats, x + wid, y + hei, x, y + hei, color); W_MakeLine(pStats, x, y + hei, x, y, color); } static void text(int value, int y) { char buf[6]; snprintf(buf, 6, "(%3d)", value); W_WriteText(pStats, STAT_WIDTH - TEXT_WIDTH, y, textColor, buf, 5, W_RegularFont); } netrek-client-cow-3.3.2/manifest0000664000175000017500000000411013657750470015576 0ustar jamesjamesCOPYING INSTALL README.releasing REPOSITORIES NETREK.RC NETREK.WRI TREK.CUR WARN.CUR Wlib.h audio.c audio.h badversion.h beeplite.c bitmaps.h check.c check.h censor.c colors.c copyright.h copyright2.h cow.css stars.gif cow.html newbie.html index.orig.html camera.c camera.h cowapi.h cowmain.c dashboard.c dashboard3.c data.c data.h death.c defaults.c defaults.h defs.h defwin.c distress.c dmessage.c dmessage.h docwin.c enter.c enter.h feature.c feature.h findslot.c findslot.h getname.c getname.h getship.c getship.h helpwin.c hullbitmaps.h inform.c inform.h input.c input.h interface.c lagmeter.c lagmeter.h litebitmaps.h local.c local.h macrowin.c main.c map.c map.h myf.c myf.h mkcflags.c mkfilent.mak mkkey.c key.mk.in moobitmaps.h name.c netstat.c netstat.h netstatopt.c newwin.c newwin.h ntrk6x10.alt ntrk6x10.fon oldbitmaps.h option.c option.h packets.h parsemeta.c parsemeta.h patchlevel.h ping.c ping.h pingstats.c pingstats.h planetlist.c playback.c playerlist.c playerlist.h rabbitbitmaps.h random.c randomize.c ranklist.c redraw.c redraw.h reserved.c rint.c rotate.c rotate.h senddist.c setstate.c short.c short.h sintab.c smessage.c smessage.h socket.c socket.h sound.c sound.h spopt.c spopt.h stats.c stats.h strdup.c string_util.c string_util.h struct.h tngbitmaps.h tools.c udpopt.c udpopt.h util.c util.h usleep.c version.h war.c warning.c warning.h wsl.c wtext.h x11window.c x11window.h x11sprite.c x11sprite.h xclrs.h CHANGES COW.DOC Makefile NEWMACRO.DOC README.1.02 README.1.03 README.2.00 README.2.02 README.3.00 README.3.01 README.html README.CVS SHORT_PACKETS.DOC TODO netrekrc.example autogen.sh config.h.in configure.ac system.mk.in configure config.sub config.guess cow.opt localcursor.bitmap manifest mapcursor.bitmap sample_key.def teams.bitmap install.sh ChangeLog README XTREKRC.example cow.png cow.desktop cow.spec lurk.py INSTALL.SGI beeplite.h censor.h colors.h cowmain.h dashboard.h death.h defwin.h distress.h docwin.h helpwin.h interface.h macrowin.h mkportable.sh netrek.png netstatopt.h playback.h reserved.h senddist.h tools.h war.h ltd_stats.h netrek-client-cow.desktop pixmaps netrek-client-cow-3.3.2/myf.c0000664000175000017500000000104513657750470015010 0ustar jamesjames#include "config.h" #include "copyright2.h" #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" void myf(int x, int y, W_Color color, W_Font font, const char *fmt, ...) { char buf[101]; int len; va_list args; va_start(args, fmt); len = vsnprintf(buf, 100, fmt, args); buf[len] = '\0'; W_WriteText(w, x, y, color, buf, len, font); va_end(args); } void myc(int x, int y) { W_ClearArea(w, x, y, TWINSIDE-x, W_Textheight); } netrek-client-cow-3.3.2/sintab.c0000664000175000017500000001252313657750470015500 0ustar jamesjames#include "config.h" #include "copyright.h" double Sin[] = { -1.0000, -0.9997, -0.9988, -0.9973, -0.9952, -0.9925, -0.9892, -0.9853, -0.9808, -0.9757, -0.9701, -0.9638, -0.9570, -0.9496, -0.9416, -0.9330, -0.9239, -0.9143, -0.9040, -0.8933, -0.8820, -0.8701, -0.8578, -0.8449, -0.8315, -0.8176, -0.8033, -0.7884, -0.7731, -0.7573, -0.7410, -0.7243, -0.7072, -0.6896, -0.6716, -0.6533, -0.6345, -0.6153, -0.5958, -0.5759, -0.5557, -0.5351, -0.5142, -0.4930, -0.4715, -0.4497, -0.4277, -0.4054, -0.3828, -0.3600, -0.3370, -0.3138, -0.2904, -0.2668, -0.2431, -0.2192, -0.1952, -0.1711, -0.1469, -0.1225, -0.0982, -0.0737, -0.0492, -0.0247, -0.0001, 0.0244, 0.0489, 0.0734, 0.0979, 0.1223, 0.1466, 0.1708, 0.1949, 0.2190, 0.2428, 0.2666, 0.2901, 0.3135, 0.3367, 0.3598, 0.3825, 0.4051, 0.4274, 0.4495, 0.4713, 0.4928, 0.5140, 0.5349, 0.5554, 0.5757, 0.5956, 0.6151, 0.6343, 0.6531, 0.6714, 0.6894, 0.7070, 0.7241, 0.7408, 0.7571, 0.7729, 0.7882, 0.8031, 0.8175, 0.8314, 0.8448, 0.8576, 0.8700, 0.8818, 0.8931, 0.9039, 0.9141, 0.9238, 0.9329, 0.9415, 0.9495, 0.9569, 0.9637, 0.9700, 0.9757, 0.9808, 0.9852, 0.9891, 0.9925, 0.9952, 0.9973, 0.9988, 0.9997, 1.0000, 0.9997, 0.9988, 0.9973, 0.9952, 0.9925, 0.9892, 0.9853, 0.9808, 0.9757, 0.9700, 0.9638, 0.9569, 0.9495, 0.9415, 0.9330, 0.9239, 0.9142, 0.9040, 0.8932, 0.8819, 0.8701, 0.8577, 0.8449, 0.8315, 0.8176, 0.8032, 0.7884, 0.7730, 0.7572, 0.7410, 0.7243, 0.7071, 0.6896, 0.6716, 0.6532, 0.6344, 0.6153, 0.5957, 0.5758, 0.5556, 0.5350, 0.5141, 0.4929, 0.4714, 0.4496, 0.4276, 0.4053, 0.3827, 0.3599, 0.3369, 0.3137, 0.2903, 0.2667, 0.2430, 0.2191, 0.1951, 0.1710, 0.1468, 0.1225, 0.0981, 0.0736, 0.0491, 0.0246, 0.0000, -0.0245, -0.0490, -0.0735, -0.0980, -0.1224, -0.1467, -0.1709, -0.1950, -0.2190, -0.2429, -0.2667, -0.2902, -0.3136, -0.3368, -0.3598, -0.3826, -0.4052, -0.4275, -0.4496, -0.4713, -0.4928, -0.5140, -0.5349, -0.5555, -0.5758, -0.5956, -0.6152, -0.6343, -0.6531, -0.6715, -0.6895, -0.7071, -0.7242, -0.7409, -0.7572, -0.7730, -0.7883, -0.8032, -0.8175, -0.8314, -0.8448, -0.8577, -0.8700, -0.8819, -0.8932, -0.9040, -0.9142, -0.9238, -0.9330, -0.9415, -0.9495, -0.9569, -0.9638, -0.9700, -0.9757, -0.9808, -0.9853, -0.9892, -0.9925, -0.9952, -0.9973, -0.9988, -0.9997 }; double Cos[] = { 0.0000, 0.0245, 0.0491, 0.0736, 0.0980, 0.1224, 0.1467, 0.1710, 0.1951, 0.2191, 0.2430, 0.2667, 0.2903, 0.3137, 0.3369, 0.3599, 0.3827, 0.4052, 0.4275, 0.4496, 0.4714, 0.4929, 0.5141, 0.5350, 0.5556, 0.5758, 0.5957, 0.6152, 0.6344, 0.6532, 0.6715, 0.6895, 0.7071, 0.7242, 0.7409, 0.7572, 0.7730, 0.7883, 0.8032, 0.8176, 0.8315, 0.8448, 0.8577, 0.8701, 0.8819, 0.8932, 0.9040, 0.9142, 0.9239, 0.9330, 0.9415, 0.9495, 0.9569, 0.9638, 0.9700, 0.9757, 0.9808, 0.9853, 0.9892, 0.9925, 0.9952, 0.9973, 0.9988, 0.9997, 1.0000, 0.9997, 0.9988, 0.9973, 0.9952, 0.9925, 0.9892, 0.9853, 0.9808, 0.9757, 0.9700, 0.9638, 0.9570, 0.9495, 0.9416, 0.9330, 0.9239, 0.9142, 0.9040, 0.8933, 0.8819, 0.8701, 0.8578, 0.8449, 0.8315, 0.8176, 0.8032, 0.7884, 0.7731, 0.7573, 0.7410, 0.7243, 0.7072, 0.6896, 0.6716, 0.6532, 0.6344, 0.6153, 0.5958, 0.5759, 0.5556, 0.5351, 0.5142, 0.4930, 0.4715, 0.4497, 0.4276, 0.4053, 0.3828, 0.3600, 0.3370, 0.3138, 0.2904, 0.2668, 0.2431, 0.2192, 0.1952, 0.1710, 0.1468, 0.1225, 0.0981, 0.0737, 0.0492, 0.0246, 0.0001, -0.0244, -0.0490, -0.0735, -0.0979, -0.1223, -0.1466, -0.1709, -0.1950, -0.2190, -0.2429, -0.2666, -0.2902, -0.3136, -0.3368, -0.3598, -0.3826, -0.4051, -0.4275, -0.4495, -0.4713, -0.4928, -0.5140, -0.5349, -0.5555, -0.5757, -0.5956, -0.6151, -0.6343, -0.6531, -0.6715, -0.6895, -0.7070, -0.7242, -0.7409, -0.7571, -0.7729, -0.7883, -0.8031, -0.8175, -0.8314, -0.8448, -0.8577, -0.8700, -0.8819, -0.8932, -0.9039, -0.9142, -0.9238, -0.9329, -0.9415, -0.9495, -0.9569, -0.9637, -0.9700, -0.9757, -0.9808, -0.9853, -0.9892, -0.9925, -0.9952, -0.9973, -0.9988, -0.9997, -1.0000, -0.9997, -0.9988, -0.9973, -0.9952, -0.9925, -0.9892, -0.9853, -0.9808, -0.9757, -0.9701, -0.9638, -0.9570, -0.9496, -0.9416, -0.9330, -0.9239, -0.9143, -0.9041, -0.8933, -0.8820, -0.8702, -0.8578, -0.8449, -0.8316, -0.8177, -0.8033, -0.7884, -0.7731, -0.7573, -0.7411, -0.7244, -0.7072, -0.6897, -0.6717, -0.6533, -0.6345, -0.6154, -0.5958, -0.5759, -0.5557, -0.5351, -0.5142, -0.4930, -0.4715, -0.4498, -0.4277, -0.4054, -0.3828, -0.3601, -0.3371, -0.3138, -0.2905, -0.2669, -0.2432, -0.2193, -0.1953, -0.1711, -0.1469, -0.1226, -0.0982, -0.0737, -0.0493, -0.0247 }; netrek-client-cow-3.3.2/xclrs.h0000664000175000017500000005372313657750470015367 0ustar jamesjames/* Std X11 color names, for the Windows port */ struct { char *name; unsigned char r,g,b; } xclrs[] = { "snow", 255, 250, 250, "GhostWhite", 248, 248, 255, "WhiteSmoke", 245, 245, 245, "gainsboro", 220, 220, 220, "FloralWhite", 255, 250, 240, "OldLace", 253, 245, 230, "linen", 250, 240, 230, "AntiqueWhite", 250, 235, 215, "PapayaWhip", 255, 239, 213, "BlanchedAlmond", 255, 235, 205, "bisque", 255, 228, 196, "PeachPuff", 255, 218, 185, "NavajoWhite", 255, 222, 173, "moccasin", 255, 228, 181, "cornsilk", 255, 248, 220, "ivory", 255, 255, 240, "LemonChiffon", 255, 250, 205, "seashell", 255, 245, 238, "honeydew", 240, 255, 240, "MintCream", 245, 255, 250, "azure", 240, 255, 255, "AliceBlue", 240, 248, 255, "lavender", 230, 230, 250, "LavenderBlush", 255, 240, 245, "MistyRose", 255, 228, 225, "white", 255, 255, 255, "black", 0, 0, 0, "DarkSlateGray", 47, 79, 79, "DarkSlateGrey", 47, 79, 79, "DimGray", 105, 105, 105, "DimGrey", 105, 105, 105, "SlateGray", 112, 128, 144, "SlateGrey", 112, 128, 144, "LightSlateGray", 119, 136, 153, "LightSlateGrey", 119, 136, 153, "gray", 190, 190, 190, "grey", 190, 190, 190, "LightGrey", 211, 211, 211, "LightGray", 211, 211, 211, "MidnightBlue", 25, 25, 112, "navy", 0, 0, 128, "NavyBlue", 0, 0, 128, "CornflowerBlue", 100, 149, 237, "DarkSlateBlue", 72, 61, 139, "SlateBlue", 106, 90, 205, "MediumSlateBlue", 123, 104, 238, "LightSlateBlue", 132, 112, 255, "MediumBlue", 0, 0, 205, "RoyalBlue", 65, 105, 225, "blue", 0, 0, 255, "DodgerBlue", 30, 144, 255, "DeepSkyBlue", 0, 191, 255, "SkyBlue", 135, 206, 235, "LightSkyBlue", 135, 206, 250, "SteelBlue", 70, 130, 180, "LightSteelBlue", 176, 196, 222, "LightBlue", 173, 216, 230, "PowderBlue", 176, 224, 230, "PaleTurquoise", 175, 238, 238, "DarkTurquoise", 0, 206, 209, "MediumTurquoise", 72, 209, 204, "turquoise", 64, 224, 208, "cyan", 0, 255, 255, "LightCyan", 224, 255, 255, "CadetBlue", 95, 158, 160, "MediumAquamarine", 102, 205, 170, "aquamarine", 127, 255, 212, "DarkGreen", 0, 100, 0, "DarkOliveGreen", 85, 107, 47, "DarkSeaGreen", 143, 188, 143, "SeaGreen", 46, 139, 87, "MediumSeaGreen", 60, 179, 113, "LightSeaGreen", 32, 178, 170, "PaleGreen", 152, 251, 152, "SpringGreen", 0, 255, 127, "LawnGreen", 124, 252, 0, "green", 0, 255, 0, "chartreuse", 127, 255, 0, "MediumSpringGreen", 0, 250, 154, "GreenYellow", 173, 255, 47, "LimeGreen", 50, 205, 50, "YellowGreen", 154, 205, 50, "ForestGreen", 34, 139, 34, "OliveDrab", 107, 142, 35, "DarkKhaki", 189, 183, 107, "khaki", 240, 230, 140, "PaleGoldenrod", 238, 232, 170, "LightGoldenrodYellow", 250, 250, 210, "LightYellow", 255, 255, 224, "yellow", 255, 255, 0, "gold", 255, 215, 0, "LightGoldenrod", 238, 221, 130, "goldenrod", 218, 165, 32, "DarkGoldenrod", 184, 134, 11, "RosyBrown", 188, 143, 143, "IndianRed", 205, 92, 92, "SaddleBrown", 139, 69, 19, "sienna", 160, 82, 45, "peru", 205, 133, 63, "burlywood", 222, 184, 135, "beige", 245, 245, 220, "wheat", 245, 222, 179, "SandyBrown", 244, 164, 96, "tan", 210, 180, 140, "chocolate", 210, 105, 30, "firebrick", 178, 34, 34, "brown", 165, 42, 42, "DarkSalmon", 233, 150, 122, "salmon", 250, 128, 114, "LightSalmon", 255, 160, 122, "orange", 255, 165, 0, "DarkOrange", 255, 140, 0, "coral", 255, 127, 80, "LightCoral", 240, 128, 128, "tomato", 255, 99, 71, "OrangeRed", 255, 69, 0, "red", 255, 0, 0, "HotPink", 255, 105, 180, "DeepPink", 255, 20, 147, "pink", 255, 192, 203, "LightPink", 255, 182, 193, "PaleVioletRed", 219, 112, 147, "maroon", 176, 48, 96, "MediumVioletRed", 199, 21, 133, "VioletRed", 208, 32, 144, "magenta", 255, 0, 255, "violet", 238, 130, 238, "plum", 221, 160, 221, "orchid", 218, 112, 214, "MediumOrchid", 186, 85, 211, "DarkOrchid", 153, 50, 204, "DarkViolet", 148, 0, 211, "BlueViolet", 138, 43, 226, "purple", 160, 32, 240, "MediumPurple", 147, 112, 219, "thistle", 216, 191, 216, "snow1", 255, 250, 250, "snow2", 238, 233, 233, "snow3", 205, 201, 201, "snow4", 139, 137, 137, "seashell1", 255, 245, 238, "seashell2", 238, 229, 222, "seashell3", 205, 197, 191, "seashell4", 139, 134, 130, "AntiqueWhite1", 255, 239, 219, "AntiqueWhite2", 238, 223, 204, "AntiqueWhite3", 205, 192, 176, "AntiqueWhite4", 139, 131, 120, "bisque1", 255, 228, 196, "bisque2", 238, 213, 183, "bisque3", 205, 183, 158, "bisque4", 139, 125, 107, "PeachPuff1", 255, 218, 185, "PeachPuff2", 238, 203, 173, "PeachPuff3", 205, 175, 149, "PeachPuff4", 139, 119, 101, "NavajoWhite1", 255, 222, 173, "NavajoWhite2", 238, 207, 161, "NavajoWhite3", 205, 179, 139, "NavajoWhite4", 139, 121, 94, "LemonChiffon1", 255, 250, 205, "LemonChiffon2", 238, 233, 191, "LemonChiffon3", 205, 201, 165, "LemonChiffon4", 139, 137, 112, "cornsilk1", 255, 248, 220, "cornsilk2", 238, 232, 205, "cornsilk3", 205, 200, 177, "cornsilk4", 139, 136, 120, "ivory1", 255, 255, 240, "ivory2", 238, 238, 224, "ivory3", 205, 205, 193, "ivory4", 139, 139, 131, "honeydew1", 240, 255, 240, "honeydew2", 224, 238, 224, "honeydew3", 193, 205, 193, "honeydew4", 131, 139, 131, "LavenderBlush1", 255, 240, 245, "LavenderBlush2", 238, 224, 229, "LavenderBlush3", 205, 193, 197, "LavenderBlush4", 139, 131, 134, "MistyRose1", 255, 228, 225, "MistyRose2", 238, 213, 210, "MistyRose3", 205, 183, 181, "MistyRose4", 139, 125, 123, "azure1", 240, 255, 255, "azure2", 224, 238, 238, "azure3", 193, 205, 205, "azure4", 131, 139, 139, "SlateBlue1", 131, 111, 255, "SlateBlue2", 122, 103, 238, "SlateBlue3", 105, 89, 205, "SlateBlue4", 71, 60, 139, "RoyalBlue1", 72, 118, 255, "RoyalBlue2", 67, 110, 238, "RoyalBlue3", 58, 95, 205, "RoyalBlue4", 39, 64, 139, "blue1", 0, 0, 255, "blue2", 0, 0, 238, "blue3", 0, 0, 205, "blue4", 0, 0, 139, "DodgerBlue1", 30, 144, 255, "DodgerBlue2", 28, 134, 238, "DodgerBlue3", 24, 116, 205, "DodgerBlue4", 16, 78, 139, "SteelBlue1", 99, 184, 255, "SteelBlue2", 92, 172, 238, "SteelBlue3", 79, 148, 205, "SteelBlue4", 54, 100, 139, "DeepSkyBlue1", 0, 191, 255, "DeepSkyBlue2", 0, 178, 238, "DeepSkyBlue3", 0, 154, 205, "DeepSkyBlue4", 0, 104, 139, "SkyBlue1", 135, 206, 255, "SkyBlue2", 126, 192, 238, "SkyBlue3", 108, 166, 205, "SkyBlue4", 74, 112, 139, "LightSkyBlue1", 176, 226, 255, "LightSkyBlue2", 164, 211, 238, "LightSkyBlue3", 141, 182, 205, "LightSkyBlue4", 96, 123, 139, "SlateGray1", 198, 226, 255, "SlateGray2", 185, 211, 238, "SlateGray3", 159, 182, 205, "SlateGray4", 108, 123, 139, "LightSteelBlue1", 202, 225, 255, "LightSteelBlue2", 188, 210, 238, "LightSteelBlue3", 162, 181, 205, "LightSteelBlue4", 110, 123, 139, "LightBlue1", 191, 239, 255, "LightBlue2", 178, 223, 238, "LightBlue3", 154, 192, 205, "LightBlue4", 104, 131, 139, "LightCyan1", 224, 255, 255, "LightCyan2", 209, 238, 238, "LightCyan3", 180, 205, 205, "LightCyan4", 122, 139, 139, "PaleTurquoise2", 174, 238, 238, "PaleTurquoise3", 150, 205, 205, "PaleTurquoise4", 102, 139, 139, "CadetBlue1", 152, 245, 255, "CadetBlue2", 142, 229, 238, "CadetBlue3", 122, 197, 205, "CadetBlue4", 83, 134, 139, "turquoise1", 0, 245, 255, "turquoise2", 0, 229, 238, "turquoise3", 0, 197, 205, "turquoise4", 0, 134, 139, "cyan1", 0, 255, 255, "cyan2", 0, 238, 238, "cyan3", 0, 205, 205, "cyan4", 0, 139, 139, "DarkSlateGray1", 151, 255, 255, "DarkSlateGray2", 141, 238, 238, "DarkSlateGray3", 121, 205, 205, "DarkSlateGray4", 82, 139, 139, "aquamarine1", 127, 255, 212, "aquamarine2", 118, 238, 198, "aquamarine3", 102, 205, 170, "aquamarine4", 69, 139, 116, "DarkSeaGreen1", 193, 255, 193, "DarkSeaGreen2", 180, 238, 180, "DarkSeaGreen3", 155, 205, 155, "DarkSeaGreen4", 105, 139, 105, "SeaGreen1", 84, 255, 159, "SeaGreen2", 78, 238, 148, "SeaGreen3", 67, 205, 128, "SeaGreen4", 46, 139, 87, "PaleGreen1", 154, 255, 154, "PaleGreen2", 144, 238, 144, "PaleGreen3", 124, 205, 124, "PaleGreen4", 84, 139, 84, "SpringGreen1", 0, 255, 127, "SpringGreen2", 0, 238, 118, "SpringGreen3", 0, 205, 102, "SpringGreen4", 0, 139, 69, "green1", 0, 255, 0, "green2", 0, 238, 0, "green3", 0, 205, 0, "green4", 0, 139, 0, "chartreuse1", 127, 255, 0, "chartreuse2", 118, 238, 0, "chartreuse3", 102, 205, 0, "chartreuse4", 69, 139, 0, "OliveDrab1", 192, 255, 62, "OliveDrab2", 179, 238, 58, "OliveDrab3", 154, 205, 50, "OliveDrab4", 105, 139, 34, "DarkOliveGreen1", 202, 255, 112, "DarkOliveGreen2", 188, 238, 104, "DarkOliveGreen3", 162, 205, 90, "DarkOliveGreen4", 110, 139, 61, "khaki1", 255, 246, 143, "khaki2", 238, 230, 133, "khaki3", 205, 198, 115, "khaki4", 139, 134, 78, "LightGoldenrod1", 255, 236, 139, "LightGoldenrod2", 238, 220, 130, "LightGoldenrod3", 205, 190, 112, "LightGoldenrod4", 139, 129, 76, "LightYellow1", 255, 255, 224, "LightYellow2", 238, 238, 209, "LightYellow3", 205, 205, 180, "LightYellow4", 139, 139, 122, "yellow1", 255, 255, 0, "yellow2", 238, 238, 0, "yellow3", 205, 205, 0, "yellow4", 139, 139, 0, "gold1", 255, 215, 0, "gold2", 238, 201, 0, "gold3", 205, 173, 0, "gold4", 139, 117, 0, "goldenrod1", 255, 193, 37, "goldenrod2", 238, 180, 34, "goldenrod3", 205, 155, 29, "goldenrod4", 139, 105, 20, "DarkGoldenrod1", 255, 185, 15, "DarkGoldenrod2", 238, 173, 14, "DarkGoldenrod3", 205, 149, 12, "DarkGoldenrod4", 139, 101, 8, "RosyBrown1", 255, 193, 193, "RosyBrown2", 238, 180, 180, "RosyBrown3", 205, 155, 155, "RosyBrown4", 139, 105, 105, "IndianRed1", 255, 106, 106, "IndianRed2", 238, 99, 99, "IndianRed3", 205, 85, 85, "IndianRed4", 139, 58, 58, "sienna1", 255, 130, 71, "sienna2", 238, 121, 66, "sienna3", 205, 104, 57, "sienna4", 139, 71, 38, "burlywood1", 255, 211, 155, "burlywood2", 238, 197, 145, "burlywood3", 205, 170, 125, "burlywood4", 139, 115, 85, "wheat1", 255, 231, 186, "wheat2", 238, 216, 174, "wheat3", 205, 186, 150, "wheat4", 139, 126, 102, "tan1", 255, 165, 79, "tan2", 238, 154, 73, "tan3", 205, 133, 63, "tan4", 139, 90, 43, "chocolate1", 255, 127, 36, "chocolate2", 238, 118, 33, "chocolate3", 205, 102, 29, "chocolate4", 139, 69, 19, "firebrick1", 255, 48, 48, "firebrick2", 238, 44, 44, "firebrick3", 205, 38, 38, "firebrick4", 139, 26, 26, "brown1", 255, 64, 64, "brown2", 238, 59, 59, "brown3", 205, 51, 51, "brown4", 139, 35, 35, "salmon1", 255, 140, 105, "salmon2", 238, 130, 98, "salmon3", 205, 112, 84, "salmon4", 139, 76, 57, "LightSalmon1", 255, 160, 122, "LightSalmon2", 238, 149, 114, "LightSalmon3", 205, 129, 98, "LightSalmon4", 139, 87, 66, "orange1", 255, 165, 0, "orange2", 238, 154, 0, "orange3", 205, 133, 0, "orange4", 139, 90, 0, "DarkOrange1", 255, 127, 0, "DarkOrange2", 238, 118, 0, "DarkOrange3", 205, 102, 0, "DarkOrange4", 139, 69, 0, "coral1", 255, 114, 86, "coral2", 238, 106, 80, "coral3", 205, 91, 69, "coral4", 139, 62, 47, "tomato1", 255, 99, 71, "tomato2", 238, 92, 66, "tomato3", 205, 79, 57, "tomato4", 139, 54, 38, "OrangeRed1", 255, 69, 0, "OrangeRed2", 238, 64, 0, "OrangeRed3", 205, 55, 0, "OrangeRed4", 139, 37, 0, "red1", 255, 0, 0, "red2", 238, 0, 0, "red3", 205, 0, 0, "red4", 139, 0, 0, "DeepPink1", 255, 20, 147, "DeepPink2", 238, 18, 137, "DeepPink3", 205, 16, 118, "DeepPink4", 139, 10, 80, "HotPink1", 255, 110, 180, "HotPink2", 238, 106, 167, "HotPink3", 205, 96, 144, "HotPink4", 139, 58, 98, "pink1", 255, 181, 197, "pink2", 238, 169, 184, "pink3", 205, 145, 158, "pink4", 139, 99, 108, "LightPink1", 255, 174, 185, "LightPink2", 238, 162, 173, "LightPink3", 205, 140, 149, "LightPink4", 139, 95, 101, "PaleVioletRed1", 255, 130, 171, "PaleVioletRed2", 238, 121, 159, "PaleVioletRed3", 205, 104, 137, "PaleVioletRed4", 139, 71, 93, "maroon1", 255, 52, 179, "maroon2", 238, 48, 167, "maroon3", 205, 41, 144, "maroon4", 139, 28, 98, "VioletRed1", 255, 62, 150, "VioletRed2", 238, 58, 140, "VioletRed3", 205, 50, 120, "VioletRed4", 139, 34, 82, "magenta1", 255, 0, 255, "magenta2", 238, 0, 238, "magenta3", 205, 0, 205, "magenta4", 139, 0, 139, "orchid1", 255, 131, 250, "orchid2", 238, 122, 233, "orchid3", 205, 105, 201, "orchid4", 139, 71, 137, "plum1", 255, 187, 255, "plum2", 238, 174, 238, "plum3", 205, 150, 205, "plum4", 139, 102, 139, "MediumOrchid1", 224, 102, 255, "MediumOrchid2", 209, 95, 238, "MediumOrchid3", 180, 82, 205, "MediumOrchid4", 122, 55, 139, "DarkOrchid1", 191, 62, 255, "DarkOrchid2", 178, 58, 238, "DarkOrchid3", 154, 50, 205, "DarkOrchid4", 104, 34, 139, "purple1", 155, 48, 255, "purple2", 145, 44, 238, "purple3", 125, 38, 205, "purple4", 85, 26, 139, "MediumPurple1", 171, 130, 255, "MediumPurple2", 159, 121, 238, "MediumPurple3", 137, 104, 205, "MediumPurple4", 93, 71, 139, "thistle1", 255, 225, 255, "thistle2", 238, 210, 238, "thistle3", 205, 181, 205, "thistle4", 139, 123, 139, "gray0", 0, 0, 0, "grey0", 0, 0, 0, "gray1", 3, 3, 3, "grey1", 3, 3, 3, "gray2", 5, 5, 5, "grey2", 5, 5, 5, "gray3", 8, 8, 8, "grey3", 8, 8, 8, "gray4", 10, 10, 10, "grey4", 10, 10, 10, "gray5", 13, 13, 13, "grey5", 13, 13, 13, "gray6", 15, 15, 15, "grey6", 15, 15, 15, "gray7", 18, 18, 18, "grey7", 18, 18, 18, "gray8", 20, 20, 20, "grey8", 20, 20, 20, "gray9", 23, 23, 23, "grey9", 23, 23, 23, "gray10", 26, 26, 26, "grey10", 26, 26, 26, "gray11", 28, 28, 28, "grey11", 28, 28, 28, "gray12", 31, 31, 31, "grey12", 31, 31, 31, "gray13", 33, 33, 33, "grey13", 33, 33, 33, "gray14", 36, 36, 36, "grey14", 36, 36, 36, "gray15", 38, 38, 38, "grey15", 38, 38, 38, "gray16", 41, 41, 41, "grey16", 41, 41, 41, "gray17", 43, 43, 43, "grey17", 43, 43, 43, "gray18", 46, 46, 46, "grey18", 46, 46, 46, "gray19", 48, 48, 48, "grey19", 48, 48, 48, "gray20", 51, 51, 51, "grey20", 51, 51, 51, "gray21", 54, 54, 54, "grey21", 54, 54, 54, "gray22", 56, 56, 56, "grey22", 56, 56, 56, "gray23", 59, 59, 59, "grey23", 59, 59, 59, "gray24", 61, 61, 61, "grey24", 61, 61, 61, "gray25", 64, 64, 64, "grey25", 64, 64, 64, "gray26", 66, 66, 66, "grey26", 66, 66, 66, "gray27", 69, 69, 69, "grey27", 69, 69, 69, "gray28", 71, 71, 71, "grey28", 71, 71, 71, "gray29", 74, 74, 74, "grey29", 74, 74, 74, "gray30", 77, 77, 77, "grey30", 77, 77, 77, "gray31", 79, 79, 79, "grey31", 79, 79, 79, "gray32", 82, 82, 82, "grey32", 82, 82, 82, "gray33", 84, 84, 84, "grey33", 84, 84, 84, "gray34", 87, 87, 87, "grey34", 87, 87, 87, "gray35", 89, 89, 89, "grey35", 89, 89, 89, "gray36", 92, 92, 92, "grey36", 92, 92, 92, "gray37", 94, 94, 94, "grey37", 94, 94, 94, "gray38", 97, 97, 97, "grey38", 97, 97, 97, "gray39", 99, 99, 99, "grey39", 99, 99, 99, "gray40", 102, 102, 102, "grey40", 102, 102, 102, "gray41", 105, 105, 105, "grey41", 105, 105, 105, "gray42", 107, 107, 107, "grey42", 107, 107, 107, "gray43", 110, 110, 110, "grey43", 110, 110, 110, "gray44", 112, 112, 112, "grey44", 112, 112, 112, "gray45", 115, 115, 115, "grey45", 115, 115, 115, "gray46", 117, 117, 117, "grey46", 117, 117, 117, "gray47", 120, 120, 120, "grey47", 120, 120, 120, "gray48", 122, 122, 122, "grey48", 122, 122, 122, "gray49", 125, 125, 125, "grey49", 125, 125, 125, "gray50", 127, 127, 127, "grey50", 127, 127, 127, "gray51", 130, 130, 130, "grey51", 130, 130, 130, "gray52", 133, 133, 133, "grey52", 133, 133, 133, "gray53", 135, 135, 135, "grey53", 135, 135, 135, "gray54", 138, 138, 138, "grey54", 138, 138, 138, "gray55", 140, 140, 140, "grey55", 140, 140, 140, "gray56", 143, 143, 143, "grey56", 143, 143, 143, "gray57", 145, 145, 145, "grey57", 145, 145, 145, "gray58", 148, 148, 148, "grey58", 148, 148, 148, "gray59", 150, 150, 150, "grey59", 150, 150, 150, "gray60", 153, 153, 153, "grey60", 153, 153, 153, "gray61", 156, 156, 156, "grey61", 156, 156, 156, "gray62", 158, 158, 158, "grey62", 158, 158, 158, "gray63", 161, 161, 161, "grey63", 161, 161, 161, "gray64", 163, 163, 163, "grey64", 163, 163, 163, "gray65", 166, 166, 166, "grey65", 166, 166, 166, "gray66", 168, 168, 168, "grey66", 168, 168, 168, "gray67", 171, 171, 171, "grey67", 171, 171, 171, "gray68", 173, 173, 173, "grey68", 173, 173, 173, "gray69", 176, 176, 176, "grey69", 176, 176, 176, "gray70", 179, 179, 179, "grey70", 179, 179, 179, "gray71", 181, 181, 181, "grey71", 181, 181, 181, "gray72", 184, 184, 184, "grey72", 184, 184, 184, "gray73", 186, 186, 186, "grey73", 186, 186, 186, "gray74", 189, 189, 189, "grey74", 189, 189, 189, "gray75", 191, 191, 191, "grey75", 191, 191, 191, "gray76", 194, 194, 194, "grey76", 194, 194, 194, "gray77", 196, 196, 196, "grey77", 196, 196, 196, "gray78", 199, 199, 199, "grey78", 199, 199, 199, "gray79", 201, 201, 201, "grey79", 201, 201, 201, "gray80", 204, 204, 204, "grey80", 204, 204, 204, "gray81", 207, 207, 207, "grey81", 207, 207, 207, "gray82", 209, 209, 209, "grey82", 209, 209, 209, "gray83", 212, 212, 212, "grey83", 212, 212, 212, "gray84", 214, 214, 214, "grey84", 214, 214, 214, "gray85", 217, 217, 217, "grey85", 217, 217, 217, "gray86", 219, 219, 219, "grey86", 219, 219, 219, "gray87", 222, 222, 222, "grey87", 222, 222, 222, "gray88", 224, 224, 224, "grey88", 224, 224, 224, "gray89", 227, 227, 227, "grey89", 227, 227, 227, "gray90", 229, 229, 229, "grey90", 229, 229, 229, "gray91", 232, 232, 232, "grey91", 232, 232, 232, "gray92", 235, 235, 235, "grey92", 235, 235, 235, "gray93", 237, 237, 237, "grey93", 237, 237, 237, "gray94", 240, 240, 240, "grey94", 240, 240, 240, "gray95", 242, 242, 242, "grey95", 242, 242, 242, "gray96", 245, 245, 245, "grey96", 245, 245, 245, "gray97", 247, 247, 247, "grey97", 247, 247, 247, "gray98", 250, 250, 250, "grey98", 250, 250, 250, "gray99", 252, 252, 252, "grey99", 252, 252, 252, "gray100", 255, 255, 255, "grey100", 255, 255, 255, "grey100", 255, 255, 255 }; #define XCLRS (sizeof(xclrs) / sizeof(xclrs[0])) netrek-client-cow-3.3.2/NEWMACRO.DOC0000664000175000017500000002713313657750470015621 0ustar jamesjamesChanges to MACRO: 9/10/93 - jn By pressing a single character you can now invoke a macro. Put a line in your defaults file like the following. singleMacro: EFTc This will make whatever macros normally assigned to keys E, F, T, and c, be invoked immediately, without needing a 'X' before them to enter macro mode. ------------------------------------------------------------------------- 9/2/93 - jmn, jn (no relation 8^) Receiver configurable distress calls have been added to the client and use a MACRO-like syntax. In order to change the distress type a line such as the following should be in your defaults file. dist.T.taking: (%i) Carrying %a to %l%?%n>-1%{ @ %n%} This has the format dist.[key].[name of distress]: [macro] Arguments for the macro and SMARTMACRO syntax are exactly the same as before. Any argument can be used, but usually only those in the groups "Standard" and "FULLY CAPITALIZED" apply. Below is a table giving the name of each distress, the key it is assigned to, and the default macro (at the time of this writing). Key Name Default Distress Macro T taking %T%c: (%i) Carrying %a to %l%?%n>-1%{ @ %n%} o ogg %T%c: Help Ogg %p at xx b bomb %T%c: %?%n>4%{bomb %l @ %n%!bomb%} c space_control %T%c: Help Control at %l 1 help1 %T%c: Help me! %d%% dam, %s%% shd, %f%% fuel %a lawyers. 2 help2 %T%c: Help me! %d%% dam, %s%% shd, %f%% fuel %a lawyers. 3 help3 %T%c: Help me! %d%% dam, %s%% shd, %f%% fuel %a lawyers. 4 help4 %T%c: Help me! %d%% dam, %s%% shd, %f%% fuel %a lawyers. e escorting %T%c: Escorting %p O ogging %T%c: Ogging %p B bombing %T%c: Bombing %l @ %n C controlling %T%c: Controlling at %l 5 doing1 %T%c: @%b %d%% dam, %s%% shd, %f%% fuel %a lawyers. 6 doing2 %T%c: @%b %d%% dam, %s%% shd, %f%% fuel %a lawyers. 7 doing3 %T%c: @%b %d%% dam, %s%% shd, %f%% fuel %a lawyers. 8 doing4 %T%c: @%b %d%% dam, %s%% shd, %f%% fuel %a lawyers. f free_beer %T%c: %p is free beer n no_gas %T%c: %p no gas h crippled %T%c: %p crippled 9 pickup %T%c: %p++ @ %l 0 pop %T%c: %l%?%n>-1%{ @ %n%}! F carrying %T%c@%b: %d%% dam, %s%% shd, %f%% fuel %a lawyers. @ other2 %T%c: @%b %d%% dam, %s%% shd, %f%% fuel %a lawyers. # other3 %T%c: @%b %d%% dam, %s%% shd, %f%% fuel %a lawyers. E help %T%c@%b: %?%S=SB%{SB%!%} Help! %d%% dam, %s%% shd, %f%% fuel %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}%?%a>0%{%a armies!!%!%} Here is some documentation written by jmn about how receiver configurable distress calls work: =========================== Well... here's how it works.... Each RC_DISTRESS compatible client can make the distress call appear as whatever you like through their .xtrekrc... If you DONT have a new enough client the server will do a default parsing of the distress call and you will see it like that. Also if the server is old then the distress call sent out by each client will appear the way _the sender_ likes to have them displayed. Let me summarize with an example: F0 likes 'F' to say 'Carrying 4 maggots.' F1 likes 'F' to say 'Carrying 4 armies.' F2 likes 'F' to say 'Carrying 4 lawyers. 20% fuel' The server default is 'Carrying 4.' Note: Advanced RC_DISTRESS users should note that 'F' can be remapped easily in at least 2 different ways. For example throught .xtrekrc dist.(.carrying: %T%c: Carrying %a maggots. singleMacro: ( (this will make 'X(' or '(' be the same as 'F' used to be) There will be more documentation on this coming later but basically the syntax is the same as SMARTMACRO and NEWMACRO. ----------- On a NEW server: Case 1: All of them are using a new client. F1 will ALWAYS see 'Carrying x armies.' No matter who sent it. Case 2: Only F1 is using an old client. F1 will see the _server_ set defaults for the carrying call from everybody. Note that the calls from F0 and F2 will appear in the same format to him on this server (but may appear in a different format on different servers). F2 and F0 will see F1's client-defined distress calls. --------------- On an old server: F1 will see whatever the sender likes to see (in this case the sender sends the pre-formatted text instead of the RC_DISTRESS short-hand). So a 'F' from F2 will appear to everybody as: 'Carrying 4 lawyers. 20% fuel' a 'F' from F0 will appear to everybody as: 'Carrying 4 maggots.' =========================== ------------------------------------------------------------------------- 8/16/93 - jn New feature for default file... rejectMacro: on (on/off) default to off, if on, BRM automatically stops NEWMACROs from being sent when the server has turned NEWMACROs off. That is any macro in your defaults file defined by a mac.*.*: (TEXT) line. Multiline macros are no-longer allowed at all. Primarily this is based on network traffic arguments. ------------------------------------------------------------------------- NEWMACRO and SMARTMACRO documentation - Jeff Nelson 6/4/1993 *WARNING* *WARNING* *WARNING* *WARNING* *WARNING* These features default OFF in the BRM client! A server will turn them on *for you* if they are allowed at that server. The BRM client will inform you by sending you a message line like: BRM: Features enabled: NEWMACRO, SMARTMACRO If you are not at a server that allows NEWMACRO, then all targetted macros will be treated as normal NBT macros (no argument substitution, %a will broadcast as %a). If you are not on a server that allows SMARTMACRO, then any conditional text or tests will *not* be evaluated, instead they will be sent as the macro appears in your defaults file! If you don't like this, complain to the server god!! Make a difference!! Compilers: In order to use the below features, NBT and NEWMACRO must be defined. In addition, SMARTMACRO must be defined to use the most advanced features. Here is the idea: A player should be able to include in his/her macros whatever reasonable information is available. And configuring its display in whatever way is desired. In order to do this, the following syntax is used (while remaining completely compatible with old NBT macros). A key is assigned in the defaults file (ie .xtrekrc, etc) by a line like: mac.F.T Help! Carrying %a!! This defines a macro which will send a distress containing the number of armies a player is carrying to his team. Note, this is NOT printf syntax! Any attempt to use formatting will fail miserably. Maybe in the future someone will want to develop a means of formatting the variables used in macros, but the only means I can think of are both bulky and ugly. Here is another example: mac.f Help! Carrying %a!! Unlike the first, this macro will not send directly to the team, instead it requires that you give a third keystroke specifying the recipient. For example, it could be invoked by: XfT <- to your team Xf1 <- to player 1 XfG <- if you are desperate, send to God XfA <- if you are stupid, send to ALL Old macros will still work in addition to these, thus be sure there are no conflicts. These generally cause suprising results. For example, if this is in your macro file: mac.E.T Help! I'm carrying!! macro.E.A You all suck! mac.E Help! I'm a twink!! mac.E.T Help! I'm carrying again!! macro.E.A You all suck even worse NOW! The suprising results would be that pressing XE would broadcast the first two messages, and then wait for the destination of the third. It would be impossible to ever use the last two. Unfortunately, multiline macros also do not work if they require a destination. There is no good reason for this, but since multiline macros annoy the hell out of me, I ain't fixing it. You can still do something like: mac.D.A: D mac.D.A: O mac.D.A: O mac.D.A: S mac.D.A: H This would properly broadcase 5 messages containing 1 character to all. If you tried to specify the destination for these by using "mac.D:", only 'D' would be sent. Also '?' can still not be used as a macro key. The following definitions will work in a macro: Standard: %a armies carried by sender %d sender damage percentage %s sender shield percentage %f sender fuel percentage %w sender wtemp percentage %e sender etemp percentage %t team id character of target planet %T team id character of sender team %c sender id character %n armies on target planet %E 1 if etemped, 0 if not %W 1 if wtemped, 0 if not %S sender two character ship type %p id character of target player %g id char of target friendly player %h id char of target enemy player %P id character of player nearest sender %G id char of friendly player nearest sender %H id char of enemy player nearest sender %l three character name of target planet %i sender full player name (16 character max) %u full name of target player (16 character max) %z 3 letter team id of target planet %b sender nearest planet FULLY CAPITALIZED: %L three character name of target planet %I sender full player name (16 character max) %U full name of target player (16 character max) %Z 3 letter team id of target planet %B sender nearest planet Ping stats: (may differ slightly from server '!' ping stats) %v average ping stat round trip time %V ping stat round trip standard deviation %y percent total packet loss as calculated by server formula Miscellanous: %m the last message you sent %M the last message you sent in all caps As a further extension to NEWMACRO, a macro may now be sent to any of the following destinations: %i %I %c send message to self %u %U %p send message to player nearest mouse %t %z %Z send message to team of player nearest mouse %g send message to nearest friendly player to my ship %h send message to nearest enemy player to my ship with a syntax like #useful for INL... mac.C.%i: CAPTAIN mac.N.%i: NEWGALAXY mac.S.%i: START mac.T.%i: %Z mac.W.%t: SHUT UP, TWINKS!! mac.I.%u: %u: det when you escort! mac.O.%u: (%i) ogging What this does is allows you to send a macro to a player or team specified by your mouse location instead of requiring a 3rd character to be input. Also, it allows you to send message to yourself without having to actual sit there and figure out who you are (they tried and failed back in the '60s). >>>>The above is available when NEWMACRO is defined; from here on, >>>>SMARTMACRO must be defined *in addition*. Further, tests may be done within the macro system, the syntax for these test is as follows. %? introduces a test = equivalence > greater < less Expressions are evaluated on a character by character basis until the test is resolved. The text of the test is then replaced in the macro by 1 or 0. Test are then fed to a syntax I call conditional text. The best way to demonstrate how this works is example. 1%{included if true%!included if false%} This would print: included if true 0%{included if true%!included if false%} included if false Combining the whole package, a very robust macroing system is quickly generated. One can easily design or mimic Distress calls, including the variable NBT distress of the BRM client and all the hardcoded message macroing built into my own client but never released. Here are a few more samples to work from: mac.F.T: Help! Carrying %a!! mac.f: Help! Carrying %a!! mac.c.T: %p++ near %l mac.b.T: %?%n>4%{bomb %l at %n%!bomb%} mac.d.T: %E%{%!%W%{%!I'm fine. How are you? %}%}%E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} mac.a.T: %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} mac.R.A: I'm a %?%S=SB%{star base!%!twink!%} mac.K.A: KissMy%S mac.t: thanks mac.y: yes mac.n: no mac.B: bye, getting hungry/sleep/horny mac.e.T: need escort going to %l%?%a>0%{, carrying %a armies!%} mac.v.%t: %T%c PING stats: Average: %v ms, Stdv: %V ms, Loss: %y%% #My Favorite: mac.m: %m netrek-client-cow-3.3.2/mkfilent.mak0000664000175000017500000001322013657750470016352 0ustar jamesjames# # ========================================================================= # COW on Win32 Makefile # This makefile is written for Watcom C++ 10.0, but it should # be fairly easy to convert to other compilers, mostly by changing # this top section of the makefile, and the link line, below # # !IFNDEF's added for MSVC - Microsoft Visual C++ # For No Debugging Info invoke with make nodebug=1 # # Note: creating the environment variable NODEBUG is an # alternate method to setting this option via the make command line. # Change this when you compile! CWHO = greynite@vnet.net !IFNDEF MSVC # Basic defs cc = wcc386 rc = wrc hc = whc link = wlink implib = wlib compileandlink = wcl386 !ELSE # Microsoft Visual C++ defs # hc == help compiler? cc = cl rc = rc hc = hcw link = link implib = lib compileandlink = cl !ENDIF # Compile Flags - must be specified after $(cc) # # Compiler flags (all other defaults are OK for NT): # -d2 - generate debugging information # -bt=nt - compile for NT # -c - compile only # -od - no optimization # -otexan - full optimization for speed # -zq - shut up, already (no banner message) !IFNDEF MSVC !IFDEF nodebug cflags = -zq -otexan -zp4 -5 -fp3 -dWIN32 !ELSE cflags = -zq -d2 -od -dWIN32 !ENDIF !ELSE # MS Visual C++ (v4.0) options # /nologo - no banner # /MT - Multi-threaded app # /Ox - max optimization # /Od - disable optimizations # /G4 - 486 optimized (386 running Win32? Uh, no) # /c - compile only # /Zi - debugging info # /Fr[file] - generate browse info !IFDEF nodebug cflags = /nologo /MT -DWIN32 /Ox /G4 ccompileonly = /c !ELSE cflags = /nologo /MT -DWIN32 /Od /G4 /Zi ccompileonly = /c !ENDIF !ENDIF # resource compiler rcvars = -DWIN32 ######################################## # Link flags # !IFNDEF MSVC !IFDEF NODEBUG ldebug = !ELSE ldebug = d all !ENDIF !ELSE !IFDEF NODEBUG ldebug = /INCREMENTAL:NO !ELSE ldebug = /INCREMENTAL:NO /DEBUG !ENDIF !ENDIF ######################################## # declarations common to all linker options !IFNDEF MSVC lflags = op st=8192 op symf # subsystem dependant flags conlflags = $(lflags) SYS nt guilflags = $(lflags) SYS nt_win # The space is neccesary!!! -SAC lout = "name " #GNU multi-byte precision library - for RSA GMPLIB = .\addon\lib\libgmp.lib !ELSE lflags = /STACK:8192 #Dunno here... conlflags = $(lflags) /NODEFAULTLIB /SUBSYSTEM:CONSOLE guilflags = $(lflags) /SUBSYSTEM:CONSOLE lout = "/OUT:" GMPLIB = libmp.lib libgmp.lib libcmt.lib user32.lib gdi32.lib\ wsock32.lib kernel32.lib winmm.lib mpr.lib !ENDIF # --------------------------------------------------------------------------- # - Start of makefile proper INCS = -I.\win32\h ARCH = Intel/Win32 # DEFS = -DRSA -DDEBUG DEFS = -DRSA -DDEBUG ROBJ = check.obj colors.obj data.obj death.obj defaults.obj dmessage.obj\ enter.obj findslot.obj getname.obj getship.obj helpwin.obj inform.obj\ interface.obj newwin.obj option.obj planetlist.obj macrowin.obj\ map.obj playerlist.obj ranklist.obj reserved.obj sintab.obj\ smessage.obj socket.obj stats.obj util.obj war.obj warning.obj\ udpopt.obj ping.obj pingstats.obj rotate.obj lagmeter.obj parsemeta.obj\ netstat.obj netstatopt.obj spopt.obj dashboard.obj dashboard3.obj\ short.obj distress.obj senddist.obj defwin.obj tools.obj sound.obj\ docwin.obj cflags.obj beeplite.obj feature.obj\ string_util.obj local.obj censor.obj cowmain.obj RSRC = check.c colors.c data.c death.c defaults.c dmessage.c\ enter.c findslot.c getname.c getship.c helpwin.c inform.c\ input.c interface.c newwin.c option.c planetlist.c\ macrowin.c map.c playerlist.c ranklist.c redraw.c\ smessage.c parsemeta.c socket.c stats.c util.c war.c\ warning.c udpopt.c sintab.c ping.c pingstats.c rotate.c\ lagmeter.c netstat.c netstatopt.c spopt.c dashboard.c dashboard3.c\ short.c distress.c senddist.c defwin.c tools.c sound.c\ docwin.c cflags.c beeplite.c feature.c reserved.c\ string_util.c local.c censor.c cowmain.c INPUTOBJ = input.obj redraw.obj MAINOBJ = main.obj MAINSRC = main.c RSASRC = RSAOBJ = WIN32_SRCS = winmain.c mswindow.c winsndlib.c WIN32_OBJS = winmain.obj mswindow.obj winsndlib.obj RANDOMOBJ = random.obj INCLUDES = struct.h packets.h defs.h copyright.h bitmaps.h data.h\ oldbitmaps.h tngbitmaps.h hullbitmaps.h rabbitbitmaps.h\ sound.h audio.h litebitmaps.h all: netrek.exe cflags.c: mkcflags.exe config.h mkfilent.mak mkcflags "$(cc) $(cflags)" "$(ARCH)" > cflags.c echo char cwho[]="$(CWHO)"; >> cflags.c mkcflags.exe: mkcflags.c patchlevel.h version.h config.h mkfilent.mak $(compileandlink) $(cflags) $(DEFS) $(INCS) mkcflags.c OBJS = $(ROBJ) $(MAINOBJ) $(RSAOBJ) $(INPUTOBJ) $(WIN32_OBJS) $(RANDOMOBJ) .c.obj: $(cc) $(cflags) $(ccompileonly) $(cdebug) $(DEFS) $(INCS) $< !IFNDEF MSVC RESOURCES = netrek.rc !ELSE RESOURCES = netrek.res $(RESOURCES): netrek.rc rc netrek.rc !ENDIF netrek.mif: mkfilent.mak @echo $(conlflags) $(ldebug) $(lout)netrek.exe > $@ !IFDEF MSVC @echo netrek.res >> $@ !ENDIF @echo $(GMPLIB) >> $@ for %i in ($(OBJS)) do echo %i >> $@ netrek.exe: $(OBJS) $(RESOURCES) warn.cur trek.cur main.ico netrek.mif $(link) @netrek.mif copy netrek.exe c:\games\netrek !IFNDEF MSVC $(rc) netrek.rc netrek.exe !ENDIF netrek-client-cow-3.3.2/moobitmaps.h0000664000175000017500000002075613657750470016406 0ustar jamesjames #define myplanet000_width 30 #define myplanet000_height 30 static char myplanet000_bits[] = { 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet001_width 30 #define myplanet001_height 30 static char myplanet001_bits[] = { 0x00, 0xb0, 0x01, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet010_width 30 #define myplanet010_height 30 static char myplanet010_bits[] = { 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet011_width 30 #define myplanet011_height 30 static char myplanet011_bits[] = { 0x00, 0xb0, 0x01, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet100_width 30 #define myplanet100_height 30 static char myplanet100_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet101_width 30 #define myplanet101_height 30 static char myplanet101_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0xff, 0x1f, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x40, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet110_width 30 #define myplanet110_height 30 static char myplanet110_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x28, 0x00, 0x80, 0x02, 0x10, 0x00, 0x00, 0x01, 0x28, 0x00, 0x80, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x28, 0x00, 0x80, 0x02, 0x10, 0x00, 0x00, 0x01, 0x28, 0x00, 0x80, 0x02, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myplanet111_width 30 #define myplanet111_height 30 static char myplanet111_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0xff, 0x1f, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x28, 0x00, 0x80, 0x02, 0x10, 0x00, 0x00, 0x01, 0x28, 0x00, 0x80, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x40, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x18, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x28, 0x00, 0x80, 0x02, 0x10, 0x00, 0x00, 0x01, 0x28, 0x00, 0x80, 0x02, 0xc0, 0x00, 0x60, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define myindmplanet_width 16 #define myindmplanet_height 16 static char myindmplanet_bits[] = { 0x20, 0x02, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00}; #define mymplanet011_width 16 #define mymplanet011_height 16 static char mymplanet011_bits[] = { 0x20, 0x02, 0x00, 0x00, 0x44, 0x11, 0x40, 0x01, 0xc0, 0x01, 0x81, 0x4c, 0x80, 0x14, 0x80, 0x14, 0x80, 0x14, 0x81, 0x5c, 0xc0, 0x01, 0x40, 0x01, 0x44, 0x11, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00}; #define mymplanet010_width 16 #define mymplanet010_height 16 static char mymplanet010_bits[] = { 0x20, 0x02, 0x00, 0x00, 0x44, 0x11, 0x40, 0x01, 0xc0, 0x01, 0x81, 0x40, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x81, 0x40, 0xc0, 0x01, 0x40, 0x01, 0x44, 0x11, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00}; #define mymplanet001_width 16 #define mymplanet001_height 16 static char mymplanet001_bits[] = { 0x20, 0x02, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x14, 0x00, 0x14, 0x00, 0x14, 0x01, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00}; #define noinfo_width 30 #define noinfo_height 30 static char noinfo_bits[] = { 0x00, 0xb8, 0x03, 0x00, 0x00, 0x47, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0xc0, 0x00, 0x10, 0x01, 0x20, 0x01, 0x10, 0x01, 0x00, 0x01, 0x10, 0x02, 0x80, 0x00, 0x08, 0x01, 0x40, 0x00, 0x10, 0x01, 0x40, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x40, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x1c, 0x00, 0x00, 0xb8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; netrek-client-cow-3.3.2/docwin.h0000664000175000017500000000016513657750470015507 0ustar jamesjames/* docwin.c */ void showdocs(int atline); void loaddocs(void); void showxtrekrc(int atline); void loadxtrekrc(void); netrek-client-cow-3.3.2/util.h0000664000175000017500000000032013657750470015172 0ustar jamesjames/* util.c */ int angdist(unsigned char x, unsigned char y); struct obtype *gettarget(W_Window ww, int x, int y, int targtype); struct obtype *gettarget2(int x, int y, int targtype); int troop_capacity(void); netrek-client-cow-3.3.2/myf.h0000664000175000017500000000015613657750470015017 0ustar jamesjames/* myf.c */ void myf(int x, int y, W_Color color, W_Font font, const char *fmt, ...); void myc(int x, int y); netrek-client-cow-3.3.2/tools.c0000664000175000017500000000311613657750470015356 0ustar jamesjames/* tools.c - shell escape, graphic toolsw - 10/10/93 * * copyright 1993 Kurt Siegl <007@netrek.org> Free to use, hack, etc. * Just keep these credits here. Use of this code may be dangerous to your * health and/or system. Its use is at your own risk. I assume no * responsibility for damages, real, potential, or imagined, resulting from * the use of it. * */ #include "config.h" #ifdef TOOLS #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "defaults.h" #include "tools.h" void sendTools(char *str) { char pipebuf[100]; char c; FILE *pipefp; int len, i; if (sscanf(str, "set %s %c", pipebuf, &c) == 2) { for (i = 0; keys[i]; i++) { if (strcmpi(macroKeys[i].name, pipebuf) == 0) { macroKeys[i].dest = c; W_WriteText(toolsWin, 0, 0, textColor, str, strlen(str), W_RegularFont); return; } } } if (!W_IsMapped(toolsWin)) showToolsWin(); #ifndef WIN32 SIGNAL(SIGCHLD, SIG_DFL); if (shelltools && (pipefp = popen(str, "r")) != NULL) { while (fgets(pipebuf, 80, pipefp) != NULL) { len = strlen(pipebuf); if (pipebuf[len - 1] == '\n') pipebuf[len - 1] = '\0'; W_WriteText(toolsWin, 0, 0, textColor, pipebuf, strlen(pipebuf), W_RegularFont); } pclose(pipefp); } else #endif W_WriteText(toolsWin, 0, 0, textColor, str, strlen(str), W_RegularFont); } void showToolsWin(void) { if (W_IsMapped(toolsWin)) W_UnmapWindow(toolsWin); else W_MapWindow(toolsWin); } #endif /* TOOLS */ netrek-client-cow-3.3.2/getname.h0000664000175000017500000000007613657750470015645 0ustar jamesjames/* getname.c */ void getname(char *defname, char *defpasswd); netrek-client-cow-3.3.2/input.c0000664000175000017500000014112613657750470015361 0ustar jamesjames#include #include "config.h" #include "copyright.h" #include #include #include #include #include INC_SYS_TIME #include INC_SYS_SELECT #include INC_STRINGS #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "cowmain.h" #include "defaults.h" #include "defwin.h" #include "docwin.h" #include "helpwin.h" #include "inform.h" #include "interface.h" #include "macrowin.h" #include "map.h" #include "netstatopt.h" #include "option.h" #include "pingstats.h" #include "playback.h" #include "playerlist.h" #include "redraw.h" #include "senddist.h" #include "short.h" #include "smessage.h" #include "socket.h" #include "spopt.h" #include "tools.h" #include "war.h" #include "warning.h" #include "udpopt.h" #include "input.h" static void detmine(void); static void keyaction(W_Event * data); int detallow = 1; /* flag used to figure out * * * * * if we're allowing det */ #ifdef DOC_WIN static int docline = 0; static int xtrekrcline = 0; #endif int opened_info = -2; /* counter for infowin popup, 6/1/93 LAB */ void doMacro(W_Event *); #ifdef THREADED void input2(); extern jmp_buf env; #endif struct obtype *gettarget(W_Window ww, int x, int y, int targtype), *target; unsigned char key = ' '; /* this used to be 177 for an unknown reason...I think it may * have included * various control characters. We don't support * those anyway right?? - jn */ #define MAXKEY 224 #define MAXASCII 128 /* this method of avoiding a massive switch should represent * massive * performance gains... instead of having to test * n/2 times for n different * keys, the key is run directly * via an array of input functions whose * index happens * to coorespond to the value of input char. - jn */ static void emptyKey(void), Key32(void), Key33(void), Key34(W_Event * data), Key35(void), Key36(void), Key37(void), Key38(void), Key39(void), Key40(void), Key41(W_Event * data), Key42(void), Key43(void), Key44(void), Key45(void), Key46(void), Key47(void), Key48(void), Key49(void), Key50(void), Key51(void), Key52(void), Key53(void), Key54(void), Key55(void), Key56(void), Key57(void), Key58(void), Key59(W_Event * data), Key60(void), Key61(void), Key62(void), Key63(void), Key64(void), Key65(W_Event * data), Key66(void), Key67(void), Key68(void), Key69(W_Event * data), Key70(W_Event * data), Key71(W_Event * data), Key72(W_Event * data), Key73(W_Event * data), Key74(W_Event * data), Key75(void), Key76(void), Key77(W_Event * data), Key78(void), Key79(void), Key80(void), Key81(void), Key82(void), Key83(void), Key84(W_Event * data), Key85(void), Key86(void), Key87(W_Event * data), Key88(void), Key89(W_Event * data), Key90(W_Event * data), Key91(void), Key92(void), Key93(void), Key94(W_Event * data), Key95(W_Event * data), Key96(void), Key98(void), Key99(void), Key100(void), Key101(void), Key102(W_Event * data), Key103(W_Event * data), Key104(void), Key105(W_Event * data), Key106(W_Event * data), Key107(W_Event * data), Key108(W_Event * data), Key110(W_Event * data), Key111(void), Key112(W_Event * data), Key113(void), Key114(void), Key115(void), Key116(W_Event * data), Key117(void), Key118(W_Event * data), Key119(void), Key120(void), Key121(W_Event * data), Key122(void), Key123(void), Key124(void), Key125(void), Key126(W_Event * data), Key127(W_Event * data); void Key109(void); /* control keys */ static void Key131(W_Event * data), Key144(W_Event * data), Key145(W_Event * data), Key146(W_Event * data), Key147(W_Event * data), Key148(W_Event * data), Key149(W_Event * data), Key150(W_Event * data), Key151(W_Event * data), Key152(W_Event * data), Key153(W_Event * data), Key160(W_Event * data), Key162(W_Event * data), Key163(W_Event * data), Key175(W_Event * data), Key180(W_Event * data), Key194(W_Event * data), Key195(W_Event * data), Key197(W_Event * data), Key198(W_Event * data), Key200(W_Event * data), Key206(W_Event * data), Key207(W_Event * data), Key204(W_Event * data), Key205(W_Event * data), Key208(W_Event * data), Key212(W_Event * data); typedef struct { void (*handler) (); } key_handler_type; key_handler_type key_handlers[MAXKEY] = { { emptyKey }, /* \0 */ { emptyKey }, /* 1 */ { emptyKey }, /* 2 */ { emptyKey }, /* 3 */ { emptyKey }, /* 4 */ { emptyKey }, /* 5 */ { emptyKey }, /* 6 */ { emptyKey }, /* 7 */ { emptyKey }, /* 8 */ { emptyKey }, /* 9 */ { emptyKey }, /* 10 */ { emptyKey }, /* 11 */ { emptyKey }, /* 12 */ { emptyKey }, /* 13 */ { emptyKey }, /* 14 */ { emptyKey }, /* 15 */ { emptyKey }, /* 16 */ { emptyKey }, /* 17 */ { emptyKey }, /* 18 */ { emptyKey }, /* 19 */ { emptyKey }, /* 20 */ { emptyKey }, /* 21 */ { emptyKey }, /* 22 */ { emptyKey }, /* 23 */ { emptyKey }, /* 24 */ { emptyKey }, /* 25 */ { emptyKey }, /* 26 */ { emptyKey }, /* 27 */ { emptyKey }, /* 28 */ { emptyKey }, /* 29 */ { emptyKey }, /* 30 */ { emptyKey }, /* 31 */ { Key32 }, /* space */ { Key33 }, /* ! */ { Key34 }, /* " */ { Key35 }, /* # */ { Key36 }, /* $ */ { Key37 }, /* % */ { Key38 }, /* & */ { Key39 }, /* ' */ { Key40 }, /* ( */ { Key41 }, /* ) */ { Key42 }, /* * */ { Key43 }, /* + */ { Key44 }, /* , */ { Key45 }, /* - */ { Key46 }, /* . */ { Key47 }, /* / */ { Key48 }, /* 0 */ { Key49 }, /* 1 */ { Key50 }, /* 2 */ { Key51 }, /* 3 */ { Key52 }, /* 4 */ { Key53 }, /* 5 */ { Key54 }, /* 6 */ { Key55 }, /* 7 */ { Key56 }, /* 8 */ { Key57 }, /* 9 */ { Key58 }, /* : */ { Key59 }, /* ; */ { Key60 }, /* < */ { Key61 }, /* = */ { Key62 }, /* > */ { Key63 }, /* ? - you know this is * * * boring as hell... */ { Key64 }, /* @ */ { Key65 }, /* A */ { Key66 }, /* B */ { Key67 }, /* C */ { Key68 }, /* D */ { Key69 }, /* E */ { Key70 }, /* F */ { Key71 }, /* G */ { Key72 }, /* H */ { Key73 }, /* I */ { Key74 }, /* J */ { Key75 }, /* K */ { Key76 }, /* L */ { Key77 }, /* M */ { Key78 }, /* N */ { Key79 }, /* O */ { Key80 }, /* P */ { Key81 }, /* Q */ { Key82 }, /* R */ { Key83 }, /* S */ { Key84 }, /* T */ { Key85 }, /* U */ { Key86 }, /* V */ { Key87 }, /* W */ { Key88 }, /* X */ { Key89 }, /* Y */ { Key90 }, /* Z */ { Key91 }, /* [ */ { Key92 }, /* \ */ { Key93 }, /* ] - ascii is fucked... */ { Key94 }, /* ^ */ { Key95 }, /* _ */ { Key96 }, /* ` */ { emptyKey }, /* a */ { Key98 }, /* b */ { Key99 }, /* c */ { Key100 }, /* d */ { Key101 }, /* e */ { Key102 }, /* f */ { Key103 }, /* g */ { Key104 }, /* h */ { Key105 }, /* i */ { Key106 }, /* j */ { Key107 }, /* k */ { Key108 }, /* l */ { Key109 }, /* m */ { Key110 }, /* n */ { Key111 }, /* o */ { Key112 }, /* p */ { Key113 }, /* q */ { Key114 }, /* r */ { Key115 }, /* s */ { Key116 }, /* t */ { Key117 }, /* u */ { Key118 }, /* v */ { Key119 }, /* w */ { Key120 }, /* x */ { Key121 }, /* y */ { Key122 }, /* z */ { Key123 }, /* { */ { Key124 }, /* | */ { Key125 }, /* } - my wife was once * * * bitten by a lhama */ { Key126 }, /* ~ */ { Key127 }, /* delete */ { emptyKey }, /* 128 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key131 }, /* ^# */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key144 }, /* ^0 */ { Key145 }, /* ^1 */ { Key146 }, /* ^2 */ { Key147 }, /* ^3 */ { Key148 }, /* ^4 */ { Key149 }, /* ^5 */ { Key150 }, /* ^6 */ { Key151 }, /* ^7 */ { Key152 }, /* ^8 */ { Key153 }, /* ^9 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key160 }, /* ^@ */ { emptyKey }, /* 31 */ { Key162 }, /* ^B */ { Key163 }, /* ^C */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key175 }, /* ^O */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key180 }, /* ^T */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key194 }, /* ^b */ { Key195 }, /* ^c */ { emptyKey }, /* 31 */ { Key197 }, /* ^e */ { Key198 }, /* ^f */ { emptyKey }, /* 31 */ { Key200 }, /* ^h */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key204 }, /* ^l */ { Key205 }, /* ^m */ { Key206 }, /* ^n */ { Key207 }, /* ^o */ { Key208 }, /* ^p */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { Key212 }, /* ^t */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 31 */ { emptyKey }, /* 223 */ }; unsigned char getctrlkey(unsigned char **s) { unsigned char *str = *s; unsigned char c; /* Character is control key. */ if (*str == '^') { str++; /* check for '^' key being specified with "^^" */ if (*str != '^') c = *str + 96; else c = *str; } else c = *str; str++; *s = str; return (c); } extern struct shipdef *myshipdef; void initkeymap(void) { unsigned char *str; /* in the future let me strongly recommed we move keymap * completely * * * outside of the stats structure. - jn */ if ((str = myshipdef->keymap) != NULL) { while (*str != '\0') { if (*str >= 32 && *str < 128) { mystats->st_keymap[*str - 32] = *(str + 1); } str += 2; } } /* See if we can get macroKey to work. What a hack -SAC */ if ((str = (unsigned char *) getdefault("macroKey")) != NULL) { unsigned char *p; if (strlen((char *)str) == 1) { /* This is a little pointless, but it'll preform as per * the * * documentation */ mystats->st_keymap[*str - 32] = 'X'; } else if (!strcmpi((char *) str, "TAB")) { p = (unsigned char *) "^i"; mystats->st_keymap[getctrlkey(&p) - 32] = 'X'; } else if (!strcmpi((char *) str, "ESC")) { p = (unsigned char *) "^["; mystats->st_keymap[getctrlkey(&p) - 32] = 'X'; } } if ((str = myshipdef->ckeymap) != NULL) { unsigned char c1, c2; while (*str != '\0') { if (*str >= 32 && *str < MAXASCII) { c1 = getctrlkey(&str) - 32; c2 = getctrlkey(&str); mystats->st_keymap[c1] = c2; } } } #ifdef MOUSE_AS_SHIFT if ((str = (unsigned char *) getdefault("b1keymap")) != NULL) { b1_as_shift = 1; while (*str != '\0') { if (*str >= 32 && *str < 176) { mystats->st_keymap[*str - 32 + 192] = *(str + 1); } str += 2; } } if ((str = (unsigned char *) getdefault("b2keymap")) != NULL) { b2_as_shift = 1; while (*str != '\0') { if (*str >= 32 && *str < 176) { mystats->st_keymap[*str - 32 + 288] = *(str + 1); } str += 2; } } if ((str = (unsigned char *) getdefault("b3keymap")) != NULL) { b3_as_shift = 1; while (*str != '\0') { if (*str >= 32 && *str < 176) { mystats->st_keymap[*str - 32 + 384] = *(str + 1); } str += 2; } } #endif /* note: not stored on server */ if ((str = myshipdef->buttonmap) != NULL) { while (*str != '\0') { switch (*str++) { case '1': buttonmap[1] = getctrlkey(&str); break; case '2': buttonmap[2] = getctrlkey(&str); break; case '3': buttonmap[3] = getctrlkey(&str); break; case 'd': buttonmap[4] = getctrlkey(&str); break; case 'e': buttonmap[5] = getctrlkey(&str); break; case 'f': buttonmap[6] = getctrlkey(&str); break; case 'g': buttonmap[7] = getctrlkey(&str); break; #ifdef SHIFTED_MOUSE case '4': buttonmap[9] = getctrlkey(&str); break; case '5': buttonmap[10] = getctrlkey(&str); break; case '6': buttonmap[11] = getctrlkey(&str); break; case 'h': buttonmap[12] = getctrlkey(&str); break; case 'i': buttonmap[13] = getctrlkey(&str); break; case 'j': buttonmap[14] = getctrlkey(&str); break; case 'k': buttonmap[15] = getctrlkey(&str); break; case '7': buttonmap[17] = getctrlkey(&str); break; case '8': buttonmap[18] = getctrlkey(&str); break; case '9': buttonmap[19] = getctrlkey(&str); break; case 'l': buttonmap[20] = getctrlkey(&str); break; case 'm': buttonmap[21] = getctrlkey(&str); break; case 'n': buttonmap[22] = getctrlkey(&str); break; case 'o': buttonmap[23] = getctrlkey(&str); break; case 'a': buttonmap[25] = getctrlkey(&str); break; case 'b': buttonmap[26] = getctrlkey(&str); break; case 'c': buttonmap[27] = getctrlkey(&str); break; case 'p': buttonmap[28] = getctrlkey(&str); break; case 'q': buttonmap[29] = getctrlkey(&str); break; case 'r': buttonmap[30] = getctrlkey(&str); break; case 's': buttonmap[31] = getctrlkey(&str); break; #endif default: fprintf(stderr, "%c ignored in buttonmap\n", *(str - 1)); break; } } } } RETSIGTYPE detsetallow(int _dummy) { detallow = 1; } #ifdef THREADED void input() { W_Event event; /* Under Windows we spawn off a separate thread to handle network * * interaction; this is because it would require some awkward rewrites to * * integrate event detection and handling into the select() mechanism. It * * probably also increases performance */ THREAD(input2); while (1) { if (!W_WaitForEvent()) /* W_WaitForEvent returns 0 * * if W_TerminateWait is * * called */ break; process_event(); } printf("Resetting game\n"); while (W_EventsPending()) W_NextEvent(&event); longjmp(env, 0); } void input2() #else void input() #endif { fd_set readfds; #ifndef HAVE_WIN32 int xsock = W_Socket(); #endif struct timeval timeout; int retval; int flush = 0; while (1) { FD_ZERO(&readfds); #ifndef HAVE_WIN32 FD_SET(xsock, &readfds); #endif if (!isServerDead()) { FD_SET(sock, &readfds); if (udpSock >= 0) FD_SET(udpSock, &readfds); } else { warning("Lost connection to server, press q to quit."); redrawall = 1; redraw(); flush++; } timeout.tv_sec = 1; timeout.tv_usec = 100000; retval = SELECT(max_fd, &readfds, 0, 0, &timeout); if (retval == 0) { warning("Stall in data stream from server!"); redrawall = 1; redraw(); flush++; } else if (retval > 0) { #ifndef THREADED #ifndef HAVE_WIN32 /* keyboard, mouse, and expose events from the X server cause the X socket to be readable, so we must direct Xlib to read them (W_EventsQueuedCk), then we process them. */ if (FD_ISSET(xsock, &readfds)) { while (W_EventsQueuedCk()) process_event(); flush++; } #else if (W_EventsPending()) { process_event(); flush++; } #endif /* !HAVE_WIN32 */ #endif /* !THREADED */ /* read from server */ if (FD_ISSET(sock, &readfds) || (udpSock >= 0 && FD_ISSET(udpSock, &readfds))) { intrupt(&readfds); flush++; if (isServerDead()) { warning("Lost connection to server!"); } /* manage expiry of info window every server update */ if (keepInfo > 0 && opened_info != -2) { /* 6/1/93 LAB */ opened_info--; if (opened_info < 0 && infomapped) destroyInfo(); } } } if (flush) { W_Flush(); flush = 0; } } } int process_event(void) { W_Event data; int loop = 0; W_Callback handler; do { loop++; if (!W_SpNextEvent(&data)) continue; /* continues at loop bottom */ switch ((int) data.type) { case W_EV_KEY: if ((handler = W_GetWindowKeyDownHandler(data.Window)) != NULL) (*handler) (&data); if (data.Window == messagew) break; if (isServerDead()) { if (data.key == 'q') terminate(EXIT_DISCONNECTED); } #ifdef DOC_WIN else if (data.Window == docwin) switch (data.key) { case 'f': docline += 28; if (docline >= maxdoclines) docline = maxdoclines - 28; showdocs(docline); break; case 'b': docline -= 28; if (docline < 0) docline = 0; showdocs(docline); break; case 'F': docline += 4; if (docline >= maxdoclines) docline = maxdoclines - 28; showdocs(docline); break; case 'B': docline -= 4; if (docline < 0) docline = 0; showdocs(docline); break; default: data.Window = w; keyaction(&data); break; } else if (data.Window == xtrekrcwin) switch (data.key) { case 'f': xtrekrcline += 28; if (xtrekrcline >= maxxtrekrclines) xtrekrcline = maxxtrekrclines - 28; showxtrekrc(xtrekrcline); break; case 'b': xtrekrcline -= 28; if (xtrekrcline < 0) xtrekrcline = 0; showxtrekrc(xtrekrcline); break; case 'F': xtrekrcline += 4; if (xtrekrcline >= maxxtrekrclines) xtrekrcline = maxxtrekrclines - 28; showxtrekrc(xtrekrcline); break; case 'B': xtrekrcline -= 4; if (xtrekrcline < 0) xtrekrcline = 0; showxtrekrc(xtrekrcline); break; default: data.Window = w; keyaction(&data); break; } #endif else if (messageon) smessage(data.key); else keyaction(&data); break; #ifdef MOTION_MOUSE case W_EV_CM_BUTTON: #endif case W_EV_BUTTON: if ((handler = W_GetWindowButtonHandler(data.Window)) != NULL) (*handler) (&data); else buttonaction(&data); break; case W_EV_EXPOSE: if ((handler = W_GetWindowExposeHandler(data.Window)) != NULL) (*handler) (&data); else if (data.Window == mapw) redrawall = 1; else if (data.Window == warnw) W_ClearWindow(warnw); else if (data.Window == messagew) { DisplayMessage(); } #ifdef XTREKRC_HELP else if (defWin && (data.Window == defWin)) showdef(); #endif #ifdef DOC_WIN else if (docwin && (data.Window == docwin)) showdocs(docline); else if (xtrekrcwin && (data.Window == xtrekrcwin)) showxtrekrc(xtrekrcline); #endif break; case W_EV_CLOSED: if (data.Window == baseWin) { fprintf(stderr, "you quit, by closing the play window in play\n"); fastQuit = 1; sendQuitReq(); } default: break; } } while (W_EventsQueued()); return loop; } static void keyaction(W_Event * data) { fastQuit = 0; /* any event, cancel * * * fastquit! */ /* remap events in other windows to local window */ if (data->Window != mapw && data->Window != w && data->Window != infow && data->Window != scanw) { data->Window = w; data->x = data->y = TWINSIDE / 2; } key = data->key; /* remap events in information window to the surrounding game window */ if (data->Window == infow) { int x, y; if (findMouseInWin(&x, &y, w)) { /* local window */ data->Window = w; data->x = x; data->y = y; } else if (findMouseInWin(&x, &y, mapw)) { /* galactic window */ data->Window = mapw; data->x = x; data->y = y; } } /* this may represent a considerable efficiency improvement */ /* removes the need for an INDEX and a couple tests */ if (localflags & (PFREFIT)) { switch (key) { case 'c': sendRefitReq(CRUISER); localflags &= ~(PFREFIT); return; break; case 'o': sendRefitReq(STARBASE); localflags &= ~(PFREFIT); return; break; case 'a': sendRefitReq(ASSAULT); localflags &= ~(PFREFIT); return; break; case 'd': sendRefitReq(DESTROYER); localflags &= ~(PFREFIT); return; break; case 'g': sendRefitReq(SGALAXY); localflags &= ~(PFREFIT); return; break; case 'b': sendRefitReq(BATTLESHIP); localflags &= ~(PFREFIT); return; break; case 's': sendRefitReq(SCOUT); localflags &= ~(PFREFIT); return; break; case '*': sendRefitReq(ATT); localflags &= ~(PFREFIT); return; break; default: localflags &= ~(PFREFIT); return; break; } } #ifdef RECORDGAME if (playback) switch(key) { case 0x8: case 0xd: pbsetspeed(key); return; } #endif if (key >= 32 && key < MAXKEY) { key = mystats->st_keymap[key - 32]; } else { fprintf(stderr, "input.c: keyaction() key %d outside range\n", key); W_Beep(); return; } #ifdef RECORDGAME /* If playing a recorded game, do not use regular keys. */ /* What follows is a hardcoded list of commands */ if (playback) { extern int pb_sequence_count; struct obtype *target; switch (key) { case 'Q': case 'q': /* Instant Quit */ terminate(0); break; case ' ': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case '!': case '#': case '%': case '(': case ')': case '<': case '>': case '@': case 'R': case 'j': case 'J': case 's': pbsetspeed(key); return; break; case 'l': target = gettarget(data->Window, data->x, data->y, TARG_PLAYER | TARG_CLOAK); pblockplayer(target->o_num); return; break; case ';': target = gettarget(data->Window, data->x, data->y, TARG_PLANET); pblockplanet(target->o_num); return; break; case '=': printf("sequence #%d\n", pb_sequence_count); return; break; case 'I': case 'i': case '?': /* Do the normal function */ /* Used for commands that do not try to send packets */ break; default: /* If key is not in above list dont run it. */ return; } } #endif /* suggestion: later we can add an option removing this to the emptyKey() * * * function. This would improve input efficiency considerably when * * * "singleMacro" is non-NULL. - jn */ if ((!MacroMode) && singleMacro[0] != '\0' && INDEX((char *) singleMacro, data->key)) { MacroMode = 1; MacroNum = -1; } if (MacroMode) { doMacro(data); return; } #ifdef MOTION_MOUSE if ((data->type == W_EV_CM_BUTTON) && /* KOC - 10/18/95 */ (!motion_mouse_enablable) && /* Hack for */ (key != 107)) /* continuous_steer */ return; #endif (*(key_handlers[key].handler)) (data); } #ifdef MOUSE_AS_SHIFT void mkeyaction(W_Event * data) { unsigned char key = data->key; fastQuit = 0; /* any event, cancel * * * fastquit! */ if (!INDEX("sbogadc", key) || !(localflags & PFREFIT)) { if (key >= 32 && key < 176) { int offset; switch (data->modifier) { case W_LBUTTON: offset = 192; break; case W_MBUTTON: offset = 288; break; case W_RBUTTON: offset = 384; break; } key = mystats->st_keymap[key - 32 + offset]; } } data->key = key; keyaction(data); } #endif void buttonaction(W_Event * data) { unsigned char course; struct obtype *gettarget(W_Window ww, int x, int y, int targtype); if (messageon) message_off(); /* ATM */ fastQuit = 0; /* any event, cancel * * * fastquit! */ #ifdef RECORDGAME /* While playing back recorded games, ignore the mouse */ if (playback) return; #endif #ifdef SHORT_PACKETS if (data->Window == reviewWin) { if (recv_mesg) { sendShortReq(SPK_MOFF); } else { sendShortReq(SPK_MON); } return; } #endif if (data->Window != w && data->Window != mapw && data->Window != infow) return; #ifdef SHIFTED_MOUSE if (data->key >= W_LBUTTON && data->key < W_BUTTON_RANGE) #else if (data->key > 0 && data->key <= 3) #endif { if (buttonmap[data->key] != '\0') { data->key = buttonmap[data->key]; keyaction(data); return; } } #ifdef MOTION_MOUSE if ((data->type == W_EV_CM_BUTTON) && /* KOC - 10/18/95 */ (!motion_mouse_enablable) && /* Hack for */ (data->key != W_RBUTTON)) /* continuous_steer */ return; #endif if (data->Window == infow) { int x, y; if (findMouseInWin(&x, &y, w)) { /* local window */ data->Window = w; data->x = x; data->y = y; } else if (findMouseInWin(&x, &y, mapw)) { /* galactic window */ data->Window = mapw; data->x = x; data->y = y; } } if (data->key == W_RBUTTON) { course = getcourse(data->Window, data->x, data->y); set_course(course); } else if (data->key == W_LBUTTON) { course = getcourse(data->Window, data->x, data->y); sendTorpReq(course); } else if (data->key == W_MBUTTON) { course = getcourse(data->Window, data->x, data->y); sendPhaserReq(course); } #ifdef NODEF /* SHIFTED_MOUSE - no defaults if not set */ else if (data->key == W_RBUTTON2) { set_speed(me->p_ship.s_maxspeed / 2); localflags &= ~(PFREFIT); } else if (data->key == W_LBUTTON2) { set_speed(99); /* Max speed... */ localflags &= ~(PFREFIT); } else if (data->key == W_MBUTTON2) { detmine(); } else if (data->key == W_RBUTTON3) { if (!infomapped) { inform(data->Window, data->x, data->y, 'i'); opened_info = keepInfo * server_ups / 5; } else { destroyInfo(); opened_info = -2; } } else if (data->key == W_LBUTTON3) { shield_tog(); } else if (data->key == W_MBUTTON3) { cloak(); } else if (data->key == W_RBUTTON4) { lockPlanetOrBase(data->Window, data->x, data->y); } else if (data->key == W_LBUTTON4) { struct obtype *gettarget(W_Window ww, int x, int y, int targtype), *target; if (me->p_flags & (PFTRACT | PFPRESS)) sendTractorReq(0, me->p_no); target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); me->p_tractor = target->o_num; sendTractorReq(1, target->o_num); } else if (data->key == W_MBUTTON4) { struct obtype *gettarget(W_Window ww, int x, int y, int targtype), *target; if (me->p_flags & (PFTRACT | PFPRESS)) sendRepressReq(0, me->p_no); target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); me->p_tractor = target->o_num; sendRepressReq(1, target->o_num); } #endif } int getcourse(W_Window ww, int x, int y) { if (ww == mapw) { int me_x, me_y; me_x = me->p_x * GWINSIDE / GWIDTH; me_y = me->p_y * GWINSIDE / GWIDTH; return ((unsigned char) nint((atan2((double) (x - me_x), (double) (me_y - y)) / 3.14159 * 128.) + 0.5)); } else return ((unsigned char) nint((atan2((double) (x - TWINSIDE / 2), (double) (TWINSIDE / 2 - y)) / 3.14159 * 128.) + 0.5)); } static void detmine(void) { register int i; for (i = 0; i < MAXTORP; i++) { if (torps[i + (me->p_no * MAXTORP)].t_status == TMOVE || torps[i + (me->p_no * MAXTORP)].t_status == TSTRAIGHT) { sendDetMineReq(i + (me->p_no * MAXTORP)); #ifdef SHORT_PACKETS if (recv_short) break; /* Let the server det for me * */ #endif } } } void lockPlanetOrBase(W_Window ww, int x, int y) /* special version of gettarget, 6/1/93 LAB */ { register int i; register struct player *j; register struct planet *k; int g_x, g_y; double dist, closedist; register int targtyp, targnum; if (ww == mapw) { g_x = x * GWIDTH / GWINSIDE; g_y = y * GWIDTH / GWINSIDE; } else { g_x = me->p_x + ((x - TWINSIDE / 2) * SCALE); g_y = me->p_y + ((y - TWINSIDE / 2) * SCALE); } closedist = GWIDTH; for (i = 0, k = &planets[i]; i < MAXPLANETS; i++, k++) { dist = hypot((double) (g_x - k->pl_x), (double) (g_y - k->pl_y)); if (dist < closedist) { targtyp = PLANETTYPE; targnum = i; closedist = dist; } } for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) { if (j->p_status != PALIVE) continue; if (j->p_flags & PFCLOAK) continue; if (j == me) continue; if ((j->p_ship.s_type == STARBASE) && (j->p_team == me->p_team)) { dist = hypot((double) (g_x - j->p_x), (double) (g_y - j->p_y)); if (dist < closedist) { targtyp = PLAYERTYPE; targnum = i; closedist = dist; } } } if (targtyp == PLAYERTYPE) { sendPlaylockReq(targnum); me->p_playerl = targnum; } else { sendPlanlockReq(targnum); me->p_planet = targnum; } } static void emptyKey(void) { fprintf(stderr, "input.c: emptyKey %d\n", key); W_Beep(); } void macro_on(void) { warning("In Macro Mode"); MacroMode = 1; MacroNum = -1; } void doMacro(W_Event * data) { struct obtype *gettarget(W_Window ww, int x, int y, int targtype), *target; int targettype; enum dist_type i; #ifdef NBT int c; char who; int found = 0; #endif warning(" "); /* We are here now, so turn * * off macro mode */ MacroMode = 0; #ifdef NBT if (data->key == '?') { showMacroWin(); return; } /* user defined macros *OVERRIDE* receiver configurable distresses. */ if (UseNewMacro) { /* sorry guys, I only program in kludge - jn 6/3/93 */ if (MacroNum > -1) { /* macro identified, who to? * */ if (MacroNum >= MAX_MACRO) fprintf(stderr, "Unknown Macro Num! There is a macro bug!!\n"); if (!pmacro(MacroNum, data->key, data)) W_Beep(); MacroNum = -1; return; } } for (c = 0; c < macrocnt; ++c) { if (macro[c].key == data->key) { if (!UseNewMacro) { if (rejectMacro && macro[c].type != NBTM) warning("NEWMACROs not allowed at this server!!"); else pnbtmacro(c); return; } /* Use New Macro */ switch (macro[c].type) { case NBTM: pnbtmacro(c); return; break; case NEWM: warning("Send macro to which player?"); MacroNum = c; MacroMode = 1; /* Need another key */ return; break; case NEWMMOUSE: { /* first translate into who, then send */ switch (macro[c].who) { struct player *j; struct planet *l; case MACRO_FRIEND: case MACRO_ENEMY: case MACRO_PLAYER: targettype = TARG_PLAYER; if (macro[c].who == MACRO_ENEMY) targettype |= TARG_ENEMY; else if (macro[c].who == MACRO_FRIEND) targettype |= TARG_FRIEND; target = gettarget(data->Window, data->x, data->y, TARG_PLAYER | TARG_CLOAK); if (target->o_type == PLAYERTYPE) { j = &players[target->o_num]; if (j->p_flags & PFCLOAK) maskrecip = 1; who = j->p_mapchars[1]; } else { who = me->p_mapchars[1]; warning("Can only send a message to a player"); } break; case MACRO_TEAM: target = gettarget(data->Window, data->x, data->y, TARG_PLAYER | TARG_PLANET); if (target->o_type == PLANETTYPE) { l = &planets[target->o_num]; who = teamlet[l->pl_owner]; } else if (target->o_type == PLAYERTYPE) { j = &players[target->o_num]; who = j->p_mapchars[0]; } else { who = me->p_mapchars[1]; warning("Player or planet only please"); } break; default: who = me->p_mapchars[1]; break; } if (!pmacro(c, who, data)) W_Beep(); return; break; } #ifdef MULTILINE_MACROS case NEWMULTIM: if (!pmacro(c, macro[c].who, data)) W_Beep(); found = 1; break; /* Loop again */ #endif case NEWMSPEC: if (!pmacro(c, macro[c].who, data)) W_Beep(); return; break; default: fprintf(stderr, "Unknown Macro Type! Jeff's a twink!!\n"); warning("Unknown macro type (eg There is a macro bug)"); return; break; } } } if (found) return; #ifdef DIST_KEY_NAME /* scan for distress call here */ for (i = take; distmacro[i].name; i++) { if (distmacro[i].c == data->key) { emergency(i, data); return; } } #endif warning("Unknown macro"); W_Beep(); #endif } static void Key32(void) { /* ' ' = clear special windows */ W_UnmapWindow(planetw); W_UnmapWindow(rankw); if (infomapped) destroyInfo(); W_UnmapWindow(helpWin); #ifdef NBT W_UnmapWindow(macroWin); #endif #ifdef XTREKRC_HELP if (defWin) W_UnmapWindow(defWin); #endif W_UnmapWindow(war); if (optionWin) optiondone(); if (udpWin) udpdone(); } static void Key33(void) { set_speed(11); } static void Key34(W_Event * data) { int ok = W_FullScreenToggle(baseWin); switch (ok) { case -1: warning("Full screen mode was not built in this program."); break; case 0: warning("Full screen mode toggled."); break; case 1: warning("Full screen mode not available here."); break; } } static void Key35(void) { set_speed(me->p_ship.s_maxspeed / 2); } static void Key36(void) { sendTractorReq(0, me->p_no); } static void Key37(void) { set_speed(99); /* Max speed... */ } static void Key38(void) { char mbuf[80]; if (strlen(defaultsFile) > 0) { sprintf(mbuf, "Re-reading %s", defaultsFile); warning(mbuf); initDefaults(defaultsFile); resetdefaults(); initkeymap(); } else { warning("no default file found"); } } static void Key39(void) { sendUdpReq(COMM_UPDATE); } static void Key40(void) { set_speed(10); } static void Key41(W_Event * data) { set_speed(10); } static void Key42(void) { sendPractrReq(); } static void Key43(void) { /* UDP: pop up UDP control window */ if (udpWin != NULL && W_IsMapped(udpWin)) udpdone(); else { char buf[80]; udpwindow(); sprintf(buf, "UDP client version %.1f", (float) UDPVERSION / 10.0); warning(buf); } } static void Key44(void) { if (W_IsMapped(pStats)) { W_UnmapWindow(pStats); } else { W_MapWindow(pStats); redrawPStats(); } } static void Key45(void) { #ifdef SHORT_PACKETS sendShortReq(SPK_SALL); #endif } static void Key46(void) { if (netstatWin != NULL && W_IsMapped(netstatWin)) nsdone(); else nswindow(); } static void Key47(void) { sortPlayers = !sortPlayers; RedrawPlayerList(); } static void Key48(void) { set_speed(0); } static void Key49(void) { set_speed(1); } static void Key50(void) { set_speed(2); } static void Key51(void) { set_speed(3); } static void Key52(void) { set_speed(4); } static void Key53(void) { set_speed(5); } static void Key54(void) { set_speed(6); } static void Key55(void) { set_speed(7); } static void Key56(void) { set_speed(8); } static void Key57(void) { set_speed(9); } static void Key58(void) { logmess = !logmess; if (logmess) warning("Message logging is ON"); else warning("Message logging is OFF"); } static void Key59(W_Event * data) { lockPlanetOrBase(data->Window, data->x, data->y); } /* < */ static void Key60(void) { set_speed(me->p_speed - 1); } static void Key61(void) { /* UDP: request for full update */ sendUdpReq(COMM_UPDATE); } /* > */ static void Key62(void) { set_speed(me->p_speed + 1); } static void Key63(void) { if (W_IsMapped(phaserwin)) phaserWindow = 1; if (!W_IsMapped(reviewWin)) { if (W_IsMapped(messwa)) { W_UnmapWindow(messwa); W_UnmapWindow(phaserwin); W_UnmapWindow(messwt); W_UnmapWindow(messwi); W_UnmapWindow(messwk); } else { W_MapWindow(reviewWin); } } else { W_UnmapWindow(reviewWin); W_MapWindow(messwa); W_MapWindow(messwt); W_MapWindow(messwi); W_MapWindow(messwk); if (phaserWindow) W_MapWindow(phaserwin); if (W_IsMapped(statwin)) { W_UnmapWindow(statwin); W_MapWindow(statwin); } } if (optionWin) { optionredrawtarget(reviewWin); optionredrawtarget(messwa); optionredrawtarget(phaserwin); optionredrawtarget(messwt); optionredrawtarget(messwi); optionredrawtarget(messwk); } } static void Key64(void) { set_speed(12); } static void Key65(W_Event * data) { /* W_ShowBitmaps(); */ emptyKey(); } static void Key66(void) { showgalactic++; if (showgalactic > 4) showgalactic = 0; redrawall = 2; } static void Key67(void) { sendCoupReq(); W_CameraSnap(w); } static void Key68(void) { detmine(); #ifdef AUTOKEY if (autoKey) autoKeyAllOff(); /* xx */ #endif } /* E */ static void Key69(W_Event * data) { emergency(generic, data); } /* F */ static void Key70(W_Event * data) { emergency(carrying, data); } static void Key71(W_Event * data) { emptyKey(); } static void Key72(W_Event * data) { emptyKey(); } static void Key73(W_Event * data) { /* I = get extended information */ if (!infomapped) { inform(data->Window, data->x, data->y, key); opened_info = keepInfo * server_ups / 5; } else { destroyInfo(); opened_info = -2; } } static void Key74(W_Event * data) { emptyKey(); } static void Key75(void) { /* testing feature, disabled ... display picture of a human on galactic */ /* W_GalacticBgd(GREET_PIX); */ } static void Key76(void) { if (W_IsMapped(playerw)) { W_UnmapWindow(playerw); } else { W_MapWindow(playerw); } } static void Key77(W_Event * data) { #ifdef TOOLS showToolsWin(); #else emptyKey(); #endif } static void Key78(void) { /* N = Toggle Name mode */ namemode = !namemode; if (optionWin) optionredrawoption(&namemode); } static void Key79(void) { if (optionWin != NULL && W_IsMapped(optionWin)) optiondone(); else optionwindow(); } static void Key80(void) { if (W_IsMapped(planetw)) { W_UnmapWindow(planetw); } else { W_MapWindow(planetw); } } static void Key81(void) { #ifdef SOUND Play_Sound(SELF_DESTRUCT_SOUND); #endif sendQuitReq(); } static void Key82(void) { sendRepairReq(1); } static void Key83(void) { if (W_IsMapped(statwin)) { W_UnmapWindow(statwin); } else { W_MapWindow(statwin); } } static void Key84(W_Event * data) { if (me->p_flags & (PFTRACT | PFPRESS)) { sendTractorReq(0, me->p_no); return; } target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); me->p_tractor = target->o_num; if (key == 'T') { sendTractorReq(1, target->o_num); } else { sendRepressReq(1, target->o_num); } } static void Key85(void) { if (W_IsMapped(rankw)) { W_UnmapWindow(rankw); } else { W_MapWindow(rankw); } } /* I really should get paid for this... */ static void Key86(void) { showlocal++; if (showlocal > 4) showlocal = 0; } static void Key87(W_Event * data) { emptyKey(); } static void Key88(void) { macro_on(); } static void Key89(W_Event * data) { emptyKey(); } static void Key90(W_Event * data) { emptyKey(); } static void Key91(void) { shield_down(); } static void Key92(void) { if (netstat) { if (lMeter != NULL && W_IsMapped(lMeter)) W_UnmapWindow(lMeter); else W_MapWindow(lMeter); } else { warning("Network stats are not being collected!"); } } static void Key93(void) { shield_up(); } static void Key94(W_Event * data) { if (me->p_flags & (PFTRACT | PFPRESS)) sendRepressReq(0, me->p_no); target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); me->p_tractor = target->o_num; sendRepressReq(1, target->o_num); } static void Key95(W_Event * data) { if (me->p_flags & (PFTRACT | PFPRESS)) sendTractorReq(0, me->p_no); target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); me->p_tractor = target->o_num; sendTractorReq(1, target->o_num); } static void Key96(void) { #ifdef SHORT_PACKETS if (spWin != NULL && W_IsMapped(spWin)) spdone(); else spwindow(); #endif } static void Key98(void) { #ifdef AUTOKEY if (autoKey && !(localflags & PFREFIT)) autoKeyBombReqOn(); else bomb_planet(); #else bomb_planet(); #endif /* AUTOKEY */ } static void Key99(void) { cloak(); } static void Key100(void) { static unsigned long lastdet = 0; unsigned long curtime; #ifdef AUTOKEY if (autoKey) autoKeyDetReqOn(); else sendDetonateReq(); #else /* want to limit these to one per update */ curtime = mstime(); if (curtime >= lastdet + 100) /* Allow one per 100 ms */ { sendDetonateReq(); lastdet = curtime; } #endif /* AUTOKEY */ detCircle = 1; } static void Key101(void) { if (me->p_flags & PFDOCKOK) sendDockingReq(0); else sendDockingReq(1); } static void Key102(W_Event * data) { unsigned char course; /* f = launch plasma torpedos */ #ifdef AUTOKEY if (autoKey) autoKeyPlasmaReqOn(); else { course = getcourse(data->Window, data->x, data->y); sendPlasmaReq(course); } #else course = getcourse(data->Window, data->x, data->y); sendPlasmaReq(course); #endif /* AUTOKEY */ } static void Key103(W_Event * data) { emptyKey(); } static void Key104(void) { /* h = Map help window */ if (W_IsMapped(helpWin)) { W_UnmapWindow(helpWin); } else { fillhelp(); W_MapWindow(helpWin); } if (optionWin) optionredrawtarget(helpWin); } static void Key105(W_Event * data) { if (!infomapped) { inform(data->Window, data->x, data->y, key); opened_info = keepInfo * server_ups / 5; } else { destroyInfo(); opened_info = -2; } } static void Key106(W_Event * data) { emptyKey(); } static void Key107(W_Event * data) { unsigned char course; /* Observers can't move. Also incorrectly removes the lock flag even though you are still locked */ if (me->p_flags & PFOBSERV) { warning("Course change ignored while observing!"); return; } course = getcourse(data->Window, data->x, data->y); set_course(course); me->p_flags &= ~(PFPLOCK | PFPLLOCK); } static void Key108(W_Event * data) { target = gettarget(data->Window, data->x, data->y, TARG_PLAYER | TARG_PLANET); if (target->o_type == PLAYERTYPE) { sendPlaylockReq(target->o_num); me->p_playerl = target->o_num; } else { /* It's a planet */ sendPlanlockReq(target->o_num); me->p_planet = target->o_num; } } void Key109(void) { #ifdef SOUND Play_Sound(MESSAGE_SOUND); #endif message_on(); } static void Key110(W_Event * data) { emptyKey(); } static void Key111(void) { #ifdef AUTOKEY if (autoKey) autoKeyOrbitReqOn(); else sendOrbitReq(1); #else sendOrbitReq(1); #endif /* AUTOKEY */ } static void Key112(W_Event * data) { unsigned char course; #ifdef AUTOKEY if (autoKey) autoKeyPhaserReqOn(); else { course = getcourse(data->Window, data->x, data->y); sendPhaserReq(course); } #else course = getcourse(data->Window, data->x, data->y); sendPhaserReq(course); #endif /* AUTOKEY */ } static void Key113(void) { #ifdef SOUND Play_Sound(SELF_DESTRUCT_SOUND); #endif fastQuit = 1; sendQuitReq(); } /* r */ static void Key114(void) { localflags |= PFREFIT; warning("s=scout, d=destroyer, c=cruiser, b=battleship, a=assault, g=galaxy, o=starbase/outpost"); } static void Key115(void) { shield_tog(); } static void Key116(W_Event * data) { unsigned char course; #ifdef AUTOKEY if (autoKey) autoKeyTorpReqOn(); else { course = getcourse(data->Window, data->x, data->y); sendTorpReq(course); } #else course = getcourse(data->Window, data->x, data->y); sendTorpReq(course); #endif /* AUTOKEY */ } static void Key117(void) { shield_tog(); } static void Key118(W_Event * data) { emptyKey(); } static void Key119(void) { /* w = map war stuff */ if (W_IsMapped(war)) W_UnmapWindow(war); else warwindow(); } static void Key120(void) { #ifdef AUTOKEY if (autoKey) autoKeyBeamDownReqOn(); else #endif beam_down(); } static void Key121(W_Event * data) { if (me->p_flags & (PFTRACT | PFPRESS)) { sendTractorReq(0, me->p_no); return; } target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); me->p_tractor = target->o_num; if (key == 'T') { sendTractorReq(1, target->o_num); } else { sendRepressReq(1, target->o_num); } } static void Key122(void) { #ifdef AUTOKEY if (autoKey) autoKeyBeamUpReqOn(); else #endif beam_up(); } static void Key123(void) { cloak_on(); } static void Key124(void) { #ifdef SHORT_PACKETS sendShortReq(SPK_ALL); #endif } static void Key125(void) { cloak_off(); } /* ~ */ static void Key126(W_Event * data) { #ifdef SOUND if ((soundWin != NULL) && W_IsMapped(soundWin)) sounddone(); else soundwindow(); #else emptyKey(); #endif } static void Key127(W_Event * data) { emptyKey(); } /* ^T */ static void Key180(W_Event * data) { emergency(take, data); } /* ^t */ static void Key212(W_Event * data) { emergency(take, data); } /* ^o */ static void Key207(W_Event * data) { emergency(ogg, data); } /* ^b */ static void Key194(W_Event * data) { emergency(bomb, data); } /* ^c */ static void Key195(W_Event * data) { emergency(space_control, data); } /* ^1 */ static void Key145(W_Event * data) { emergency(save_planet, data); } /* ^2 */ static void Key146(W_Event * data) { emergency(base_ogg, data); } /* ^3 */ static void Key147(W_Event * data) { emergency(help1, data); } /* ^4 */ static void Key148(W_Event * data) { emergency(help2, data); } /* ^e */ static void Key197(W_Event * data) { emergency(escorting, data); } /* ^p */ static void Key208(W_Event * data) { emergency(ogging, data); } /* ^m */ static void Key205(W_Event * data) { emergency(bombing, data); } /* ^l */ static void Key204(W_Event * data) { emergency(controlling, data); } /* ^O */ static void Key175(W_Event * data) { emergency(ogging, data); } /* ^B */ static void Key162(W_Event * data) { emergency(bombing, data); } /* ^C */ static void Key163(W_Event * data) { emergency(controlling, data); } /* ^5 */ static void Key149(W_Event * data) { emergency(asw, data); } /* ^6 */ static void Key150(W_Event * data) { emergency(asbomb, data); } /* ^7 */ static void Key151(W_Event * data) { emergency(doing1, data); } /* ^8 */ static void Key152(W_Event * data) { emergency(doing2, data); } /* ^f */ static void Key198(W_Event * data) { emergency(free_beer, data); } /* ^n */ static void Key206(W_Event * data) { emergency(no_gas, data); } /* ^h */ static void Key200(W_Event * data) { emergency(crippled, data); } /* ^9 */ static void Key153(W_Event * data) { emergency(pickup, data); } /* ^0 */ static void Key144(W_Event * data) { emergency(pop, data); } /* ^@ */ static void Key160(W_Event * data) { emergency(other1, data); } /* ^# */ static void Key131(W_Event * data) { emergency(other2, data); } netrek-client-cow-3.3.2/defs.h0000664000175000017500000003551613657750470015155 0ustar jamesjames#ifndef _h_defs #define _h_defs #include "copyright.h" /* #$!@$#% length of address field of messages */ #define ADDRLEN 10 #ifdef NBT #define MAX_MACRO 500 #endif #ifndef MAXPLAYER #define MAXPLAYER 36 /* Defined in config.h as well */ #endif #define TESTERS 4 /* Priveledged slots for * robots and game 'testers' */ #define MAXPLANETS 40 #define MAXTORP 8 #define MAXPLASMA 1 #define PKEY 128 #define GWINSIDE (small_screen ? 400 : 500) /* size of strategic window */ #define TWINSIDE 500 /* size of tactical window */ #define BORDER 3 /* border width for option * * * * windows */ #define PSEUDOSIZE 16 /*! @brief number of drawing phases in a cloak engage and disengage @details refer to udcloak() in server source, once p_cloakphases reaches one less than this value, position is randomised and updated slowly by server. This value was 7 for COW 2.02 with a server configured for five updates per second. Server changed to ten updates per second and broke the calculations. Now matches server value adjusted for updates per second. */ #define CLOAK_PHASES (12 * server_ups / 10) #define DEFAULT_NUMRANKS 9 /* These are configuration definitions */ #define GWIDTH 100000 /* galaxy is 100000 spaces * * * * on a side */ #define WARP1 20 /* warp one will move 20 * * * spaces per update */ #define SCALE 40 /* Window will be one pixel * * * for 20 spaces */ #define EXPDIST 350 /* At this range a torp will * * * explode */ #define DETDIST 1700 /* At this range a player * * * can detonate a torp */ #define NUM_PLANET_BITMAPS 7 #define NUM_PLANET_BITMAPS2 8 #define PHASEDIST 6000 /* At this range a player * * * can do damage with * * * phasers */ #define ENTORBDIST 900 /* At this range a player * * * can orbit a planet */ #define ORBDIST 800 /* A player will orbit at * * * this radius */ #define ORBSPEED 2 /* This is the fastest a * * * person can go into orbit */ #define PFIREDIST 1500 /* At this range a planet * * * will shoot at a player */ /* 6 minutes is maximum for autoquit -- anything more causes problems in the * server. (?) */ #define AUTOQUIT 9*60 /* auto logout in 5 minutes */ #define VACANT -1 /* indicates vacant port on * a starbase */ #define DOCKDIST 600 #define DOCKSPEED 2 /* If base is moving, there * will be some finesse * involved to dock */ #define NUMPORTS 4 #define SBFUELMIN 10000 /* If starbase's fuel is * less than this, it will * not refuel docked vessels */ #define TRACTDIST 6000 /* maximum effective tractor * beam range */ #define TRACTEHEAT 5 /* ammount tractor beams * heat engines */ #define TRACTCOST 20 /* fuel cost of activated * tractor beam */ #define KEY_SIZE 32 #define RESERVED_SIZE 16 #define NAME_LEN 16 #define KEYMAP_LEN 96 #define MSG_LEN 80 /* These are memory sections */ #define PLAYER 1 #define MAXMESSAGE 50 #define MAXREVIEWMESSAGE 20 #define rosette(x) ((((x) + 8) / 16) & 15) /* #define rosette(x) ((((x) + 256/VIEWS/2) / (256/VIEWS) + VIEWS) % VIEWS) */ /* (((x + 8) / 16 + 16) % 16) */ /* These are the teams */ /* Note that I used bit types for these mostly for messages and war status. * This was probably a mistake. It meant that Ed had to add the 'remap' area * to map these (which are used throughout the code as the proper team * variable) into a nice four team deep array for his color stuff. Oh well. */ #define NOBODY 0x0 #define FED 0x1 #define ROM 0x2 #define KLI 0x4 #define ORI 0x8 #define ALLTEAM (FED|ROM|KLI|ORI) #define MAXTEAM (ORI) #define NUMTEAM 4 /* * These are random configuration variables */ #define VICTORY 3 /* Number of systems needed * to conquer the galaxy */ #define WARNTIME 30 /* Number of 1/10th seconds to have * a warning on the screen */ #define TARG_PLAYER 0x1 /* Flags for gettarget */ #define TARG_PLANET 0x2 #define TARG_CLOAK 0x4 /* Include cloaked ships in * search */ #define TARG_SELF 0x8 #define TARG_ENEMY 0x10 #define TARG_FRIEND 0x20 #define DEFAULT_PORT 2592 /* Other stuff that Ed added */ #define ABS(a) /* abs(a) */ (((a) < 0) ? -(a) : (a)) #ifndef MAX #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #define myPlasmaTorp(t) (me->p_no == (t)->pt_owner) #define myTorp(t) (me->p_no == (t)->t_owner) #define friendlyPlasmaTorp(t) ((!(me->p_team & (t)->pt_war)) || (myPlasmaTorp(t))) #define friendlyTorp(t) ((!(me->p_team & (t)->t_war)) || (myTorp(t))) #define myPhaser(p) (&phasers[me->p_no] == (p)) #define friendlyPhaser(p) (me->p_team == players[(p) - phasers].p_team) #define myPlayer(p) (me == (p)) #define myPlanet(p) (me->p_team == (p)->pl_owner) #define friendlyPlayer(p) ((!(me->p_team & \ ((p)->p_swar | (p)->p_hostile))) && \ (!((p)->p_team & \ (me->p_swar | me->p_hostile)))) #define isAlive(p) (((p)->p_status == PALIVE) || ((p)->p_status == POBSERV)) #define friendlyPlanet(p) ((p)->pl_info & me->p_team && \ !((p)->pl_owner & (me->p_swar | me->p_hostile))) #define isLockPlanet(p) ((me->p_flags & PFPLLOCK) && (me->p_planet == p->pl_no)) #define isLockPlayer(p) ((me->p_flags & PFPLOCK) && (me->p_playerl == p->p_no)) #define isObsLockPlayer(p) ((me->p_flags & PFOBSERV) && (me->p_flags & PFPLOCK) && \ (me->p_playerl == (p)->p_no)) #define torpColor(t) \ ((myTorp(t) || isObsLockPlayer(&players[(t)->t_owner])) ? myColor : shipCol[remap[players[(t)->t_owner].p_team]]) #define plasmatorpColor(t) \ ((myPlasmaTorp(t) || isObsLockPlayer(&players[(t)->pt_owner])) ? myColor : shipCol[remap[players[(t)->pt_owner].p_team]]) #define phaserColor(p) \ ((myPhaser(p) || isObsLockPlayer(&players[(p) - phasers])) ? myColor : shipCol[remap[players[(p) - phasers].p_team]]) /* Cloaking phase (and not the cloaking flag) is the factor in determining * the color of the ship. Color 0 is white (same as 'myColor' used to be). */ #define playerColor(p) \ ((myPlayer(p) || isObsLockPlayer(p)) ? myColor : shipCol[remap[(p)->p_team]]) #ifdef RECORDGAME #define planetColor(p) \ ((((p)->pl_info & me->p_team) || playback) \ ? shipCol[remap[(p)->pl_owner]] : unColor) #else #define planetColor(p) \ (((p)->pl_info & me->p_team) ? shipCol[remap[(p)->pl_owner]] : unColor) #endif #define planetFont(p) \ (myPlanet(p) ? W_BoldFont : friendlyPlanet(p) ? W_HighlightFont \ : W_RegularFont) //SRS - changed this from UnderlineFont to HighlightFont #define shipFont(p) \ (myPlayer(p) ? W_BoldFont : friendlyPlayer(p) ? W_HighlightFont \ : W_RegularFont) #define bombingRating(p) \ ((float) (p)->p_stats.st_tarmsbomb * status->timeprod / \ ((float) (p)->p_stats.st_tticks * status->armsbomb)) #define planetRating(p) \ ((float) (p)->p_stats.st_tplanets * status->timeprod / \ ((float) (p)->p_stats.st_tticks * status->planets)) #define offenseRating(p) \ ((float) (p)->p_stats.st_tkills * status->timeprod / \ ((float) (p)->p_stats.st_tticks * status->kills)) #define defenseRating(p) \ ((float) (p)->p_stats.st_tticks * status->losses / \ ((p)->p_stats.st_tlosses!=0 ? \ ((float) (p)->p_stats.st_tlosses * status->timeprod) : \ (status->timeprod))) #define INVISIBLE(j) (((j)->p_flags & PFCLOAK) && \ ((j)->p_cloakphase == (CLOAK_PHASES-1))) #if !defined(_IBMR2) /* typedef enum { FALSE = 0, TRUE } * * boolean; */ #else /* Hmmm, this will only work if TRUE/FALSE were undef'ed first. Would that * break things? I don't know. Since "boolean" type is never used, we will * just leave it commented out for now. * * typedef enum {FALSE=0, TRUE} boolean; */ #endif #ifndef ROTATERACE #define sendTorpReq(dir) sendShortPacket(CP_TORP, (char) dir) #define sendPhaserReq(dir) sendShortPacket(CP_PHASER, (char) dir) #define sendDirReq(dir) sendShortPacket(CP_DIRECTION, (char) dir) #define sendPlasmaReq(dir) sendShortPacket(CP_PLASMA, (char) dir) #else #define sendTorpReq(dir) sendShortPacket(CP_TORP, (char) RotateDirSend(dir)) #define sendPhaserReq(dir) sendShortPacket(CP_PHASER, (char) RotateDirSend(dir)) #define sendDirReq(dir) sendShortPacket(CP_DIRECTION, (char) RotateDirSend(dir)) #define sendPlasmaReq(dir) sendShortPacket(CP_PLASMA, (char) RotateDirSend(dir)) #endif /* ROTATERACE */ #define sendSpeedReq(speed) sendShortPacket(CP_SPEED, (char) speed) #define sendShieldReq(state) sendShortPacket(CP_SHIELD, (char) state) #define sendOrbitReq(state) sendShortPacket(CP_ORBIT, (char) state) #define sendRepairReq(state) sendShortPacket(CP_REPAIR, (char) state) #define sendBeamReq(state) sendShortPacket(CP_BEAM, (char) state) #define sendCopilotReq(state) sendShortPacket(CP_COPILOT, (char) state) #define sendDetonateReq() sendShortPacket(CP_DET_TORPS, 0) #define sendCloakReq(state) sendShortPacket(CP_CLOAK, (char) state) #define sendBombReq(state) sendShortPacket(CP_BOMB, (char) state) #define sendPractrReq() sendShortPacket(CP_PRACTR, 0) #define sendWarReq(mask) sendShortPacket(CP_WAR, (char) mask) #define sendRefitReq(ship) {sendShortPacket(CP_REFIT, (char) ship); shipchange(ship);} #define sendPlaylockReq(pnum) sendShortPacket(CP_PLAYLOCK, (char) pnum) #define sendPlanlockReq(pnum) sendShortPacket(CP_PLANLOCK, (char) pnum) #define sendCoupReq() sendShortPacket(CP_COUP, 0) #define sendQuitReq() sendShortPacket(CP_QUIT, 0) #define sendByeReq() sendShortPacket(CP_BYE, 0) #define sendDockingReq(state) sendShortPacket(CP_DOCKPERM, (char) state) #define sendResetStatsReq(verify) sendShortPacket(CP_RESETSTATS, (char) verify) #define sendScanReq(who) sendShortPacket(CP_SCAN, (char) who) /* ATM */ #ifdef SHORT_PACKETS /* #define sendShortReq(state) sendShortPacket(CP_S_REQ, state) */ #endif /* This macro allows us to time things based upon # frames / sec. */ #define ticks(x) ((x)*200000/timerDelay) char *getdefault(char *str); /* UDP control stuff */ #ifdef GATEWAY #define UDP_NUMOPTS 11 #define UDP_GW UDP_NUMOPTS-1 #else #define UDP_NUMOPTS 10 #endif #define UDP_CURRENT 0 #define UDP_STATUS 1 #define UDP_DROPPED 2 #define UDP_SEQUENCE 3 #define UDP_SEND 4 #define UDP_RECV 5 #define UDP_DEBUG 6 #define UDP_FORCE_RESET 7 #define UDP_UPDATE_ALL 8 #define UDP_DONE 9 #define COMM_TCP 0 #define COMM_UDP 1 #define COMM_VERIFY 2 #define COMM_UPDATE 3 #define COMM_MODE 4 #define SWITCH_TCP_OK 0 #define SWITCH_UDP_OK 1 #define SWITCH_DENIED 2 #define SWITCH_VERIFY 3 #define CONNMODE_PORT 0 #define CONNMODE_PACKET 1 #define STAT_CONNECTED 0 #define STAT_SWITCH_UDP 1 #define STAT_SWITCH_TCP 2 #define STAT_VERIFY_UDP 3 #define MODE_TCP 0 #define MODE_SIMPLE 1 #define MODE_FAT 2 #define MODE_DOUBLE 3 #define UDP_RECENT_INTR 300 #define UDP_UPDATE_WAIT 5 /* client version of UDPDIAG */ #define UDPDIAG(x) { if (udpDebug == 2) { printf("UDP: "); printf x; }} #define V_UDPDIAG(x) UDPDIAG(x) #ifdef ROTATERACE #define RotateDirSend(d) (rotate?d-rotate_deg:d) #endif #ifdef nodef #define RotateDir(d) d -= 64 #define RotateDirSend(d) (rotate?(d+64):d) #define RotateCoord(x,y) _RotateCoord(x,y,(3.1415927/2.)) #define UnrotateCoord(x,y) _RotateCoord(x,y,-(3.1415927/2.)) #define _RotateCoord(x,y,rd) \ { \ extern double atan2(), hypot(), sin(), cos(); \ double __dir; \ double __r, __dx, __dy; \ \ __dx = (double)(x - GWIDTH/2); \ __dy = (double)(GWIDTH/2 - y); \ __dir = atan2(__dx, __dy) - 3.1415927/2.; \ __r = hypot(__dx, __dy); \ __dir -= rd; \ x = (int)(__r * cos(__dir) + GWIDTH/2); \ y = (int)(__r * sin(__dir) + GWIDTH/2); \ } #endif /* nodef */ #define NETSTAT_NUMFIELDS 7 /* field names */ #define NETSTAT_SWITCH 0 #define NETSTAT_RESET 1 #define NETSTAT_TOTAL 2 #define NETSTAT_LOCAL 3 #define NETSTAT_FAILURES 4 #define NETSTAT_NFTHRESH 5 #define NETSTAT_DONE 6 /* misc */ #define NETSTAT_DF_NFT 2000 #define NETSTAT_DF_NFT_S "2000" #ifdef SHORT_PACKETS #define SPK_VOFF 0 /* variable packets off */ #define SPK_VON 1 /* variable packets on */ #define SPK_MOFF 2 /* message packets off */ #define SPK_MON 3 /* message packets on */ #define SPK_M_KILLS 4 /* send kill mesgs */ #define SPK_M_NOKILLS 5 /* don't send kill mesgs */ #define SPK_THRESHOLD 6 /* threshold */ #define SPK_M_WARN 7 /* warnings */ #define SPK_M_NOWARN 8 /* no warnings */ #define SPK_SALL 9 /* only planets,kills and * weapons */ #define SPK_ALL 10 /* Full Update - SP_STATS */ #define SPK_NUMFIELDS 6 #define SPK_VFIELD 0 #define SPK_MFIELD 1 #define SPK_KFIELD 2 #define SPK_WFIELD 3 #define SPK_TFIELD 4 #define SPK_DONE 5 #endif #ifndef NBT #define NBT #endif /* NBT */ #define MAXMACLEN 85 #define NBTM 0 #define NEWM 1 #define NEWMSPEC 2 #define NEWMMOUSE 3 #define NEWMULTIM 4 #define MACRO_ME 0 #define MACRO_PLAYER 1 #define MACRO_TEAM 2 #define MACRO_FRIEND 3 #define MACRO_ENEMY 4 #ifdef TOOLS #define TOOLSWINLEN 25 #define MAX_KEY 20 #endif #ifdef HOCKEY_LINES #define NUM_HOCKEY_LINES 13 #define S_LINE_HORIZONTAL 1 #define S_LINE_VERTICAL 2 #endif #ifdef BEEPLITE #define LITE_PLAYERS_MAP 0x01 #define LITE_PLAYERS_LOCAL 0x02 #define LITE_SELF 0x04 #define LITE_PLANETS 0x08 #define LITE_SOUNDS 0x10 #define LITE_COLOR 0x20 #define LITE_TTS 0x40 #endif #ifdef WARP_DEAD #define DEADPACKETS 3 #endif #define EXIT_FORK_FAILURE -2 #define EXIT_UNKNOWN -1 #define EXIT_OK 0 #define EXIT_CONNECT_FAILURE 1 #define EXIT_LOGIN_FAILURE 2 #define EXIT_DISCONNECTED 3 #define EXIT_BADVERSION_BASE 10 #endif /* _h_defs */ netrek-client-cow-3.3.2/option.c0000664000175000017500000005652213657750470015537 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "playerlist.h" #include "map.h" #include "option.h" #include "rotate.h" #include "docwin.h" #include "udpopt.h" #include "netstatopt.h" #include "pingstats.h" #include "spopt.h" #include "defwin.h" #include "socket.h" int notdone; /* not done flag */ #ifdef ROTATERACE static int old_rotate, old_rotate_deg; #endif static char newkeys[14]; #if (defined( DEBUG) || defined (BITMAP_DEBUG)) && defined(DYNAMIC_BITMAPS) extern int OwnBitmapNum; #endif char *localmes[] = {"Show nothing on local planets", "Show owner on local planets", "Show resources on local planets", "Show MOO resources on local map", "Show rabbit ears on local map", ""}; char *galacticmes[] = {"Show nothing on galactic map", "Show owner on galactic map", "Show resources on galactic map", "Show MOO resources on galactic map", "Show rabbit ears on galactic map", ""}; #ifdef ROTATERACE char *rotatemess[] = {"Don't rotate galaxy", "Rotate galaxy 90 degrees", "Rotate galaxy 180 degrees", "Rotate galaxy 270 degrees", "" }; #endif static char *lockoptions[] = {"Don't show lock icon", "Show lock icon on galactic map only", "Show lock icon on tactical map only", "Show lock icon on both map windows", ""}; static char *plistoptions[] = {"Custom player list", "Old Player List", "COW Player List", "Kill Watch Player List", "BRMH Player List", ""}; static char *dashboardoptions[] = {"Text dashboard", "COW style dashboard", "KRP style dashboard", "LABs new dashboard", ""}; /* useful for options that are an int with a range */ struct int_range { int min_value; /* value is >= this */ int max_value; /* value is <= this */ int increment; /* a click raises/lowers * * * this amount */ }; static char *phaserdispmess[] = {"Don't log phaser hits", "Log phasers on all window", "Log phasers on team window", "Log phasers on indiv window", "Log phasers on kill window", "Log phasers on review window", ""}; #ifdef PHASER_STATS static char *phaserstatmess[] = {"Don't show phaser statistics", "Show phaser statistics", ""}; #endif /* Only one of op_option, op_targetwin, and op_string should be defined. If * op_string is defined, op_size should be too and op_text is used without a * "Don't" prefix. if op_range is defined, there should be a %d in op_text * for it, op_size will be non-useful, and the 'Don't ' prefix won't appear */ struct option { int op_num; char *op_text; /* text to display when on */ int *op_option; /* variable to test/modify * * * * (optional) */ W_Window *op_targetwin; /* target window to * * * map/unmap (optional) */ char *op_string; /* string to modify * * * (optional) */ int op_size; /* size of *op_string * * * (optional) */ char **op_array; /* array of strings to * * * switch between */ struct int_range *op_range; /* struct definint an * * * integer range option */ }; /* for the paged options menus */ struct option_menu { int page_num; /* page number of this menu */ struct option_menu *Next; struct option *menu; /* pointers to arrary of * * * options */ int numopt; /* number of options in this * * * menu page */ int updated; /* 1 if options can be * * * changed externally */ }; /* pointer to first entry in the options menu list */ struct option_menu *FirstMenu = NULL; struct option_menu *CurrentMenu = NULL; /* menu currently looked at */ int MenuPage = 0; /* current menu page */ int MaxOptions = 0; /* maximum number of options * * * * in all menu pages */ struct int_range MenuPages = {0, 1, 1}; /* updates: use of the int range thing... */ struct int_range client_ups_range = {1, 50, 1}; struct int_range redraw_updates_range = {0, 5, 1}; struct int_range phaserShrinkRng = {0, 16, 1}; /* range of menus. Will be updated when menu list is assembled */ struct int_range Menus_Range = {0, 1, 1}; #if (defined( DEBUG) || defined (BITMAP_DEBUG)) && defined(DYNAMIC_BITMAPS) struct int_range bitmap_range = {0, 50, 1}; #endif struct int_range keepInfo_range = {0, 100, 1}; struct int_range enPhasRng = {0, 10, 1}; /* menus */ struct option Ship_Menu[] = { {0, "Ship Menu", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Page %d (click to change)", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "use ROMVLVS bitmap", &ROMVLVS, 0, 0, 0, NULL, NULL}, #ifdef TNG_FED_BITMAPS {1, "use fed TNG bitmaps", &use_tng_fed_bitmaps, 0, 0, 0, NULL, NULL}, #endif #if (defined( DEBUG) || defined (BITMAP_DEBUG)) && defined(DYNAMIC_BITMAPS) {1, "Own bitmap number: %d", &OwnBitmapNum, 0, 0, 0, NULL, &bitmap_range}, #endif #ifdef VSHIELD_BITMAPS {1, "vary shields bitmap", &VShieldBitmaps, 0, 0, 0, NULL, NULL}, #endif {1, "use warning shields", &warnShields, 0, 0, 0, NULL, NULL}, #ifdef VARY_HULL {1, "warn hull", &vary_hull, 0, 0, 0, NULL, NULL}, #endif {1, "show tractor/pressor beams", &showTractorPressor, 0, 0, 0, NULL, NULL}, {1, "show tractors after lock ", &continuetractor, 0, 0, 0, NULL, NULL}, {1, "enemy phaser width: %d", &enemyPhasers, 0, 0, 0, NULL, &enPhasRng}, {1, "shrink my phaser by %d/16", &phaserShrink, 0, 0, 0, NULL, &phaserShrinkRng}, {1, "shrink their phasers by %d/16", &theirPhaserShrink, 0, 0, 0, NULL, &phaserShrinkRng}, {1, "shrink phasers on a miss", &shrinkPhaserOnMiss, 0, 0, 0, NULL, NULL}, {1, "done", ¬done, 0, 0, 0, NULL, NULL}, {-1, NULL, 0, 0, 0, 0, NULL, NULL} }; struct option Planet_Menu[] = { {0, "Planet Menu", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Page %d (click to change)", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "", &showlocal, 0, 0, 0, localmes, NULL}, {1, "Show planet names on local", &namemode, 0, 0, 0, NULL, NULL}, {1, "", &showgalactic, 0, 0, 0, galacticmes, NULL}, {1, "Show owner on galactic", &showPlanetOwner, 0, 0, 0, NULL, NULL}, {10, "show IND planets", &showIND, 0, 0, 0, NULL, NULL}, {1, "", &showLock, 0, 0, 0, lockoptions, NULL}, #ifdef ROTATERACE {1, "", &rotate, 0, 0, 0, rotatemess, NULL}, #endif {1, "done", ¬done, 0, 0, 0, NULL, NULL}, {-1, NULL, 0, 0, 0, 0, NULL, NULL} }; struct option Control_Menu[] = { {0, "Control Menu", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Page %d (click to change)", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "stay peaceful when reborn", &keeppeace, 0, 0, 0, NULL, NULL}, {1, "use new distress", &UseNewDistress, 0, 0, 0, NULL, NULL}, {1, "new keymap entries: %s", 0, 0, newkeys, 13, NULL, NULL}, {1, "ignore the capslock key", &ignoreCaps, 0, 0, 0, NULL, NULL}, {1, "%d updates per second", &client_ups, 0, 0, 0, 0, &client_ups_range}, {1, "%d 1/10 sec screen refresh delay", &redrawDelay, 0, 0, 0, 0, &redraw_updates_range}, {1, "avoid message kludge", &niftyNewMessages, 0, 0, 0, NULL, NULL}, #ifdef TOOLS {1, "show shell tools window", 0, &toolsWin, 0, 0, NULL, NULL}, #endif #ifdef SOUND {1, "show sound control window", 0, &soundWin, 0, 0, NULL, NULL}, #endif {1, "show UDP control window", 0, &udpWin, 0, 0, NULL, NULL}, {1, "show ping stats window", 0, &pStats, 0, 0, NULL}, {1, "show network statistic window", 0, &netstatWin, 0, 0, NULL, NULL}, {1, "show LagMeter ", 0, &lMeter, 0, 0, NULL, NULL}, #ifdef SHORT_PACKETS {1, "show Short Packets window", 0, &spWin, 0, 0, NULL, NULL}, #endif {1, "done", ¬done, 0, 0, 0, NULL, NULL}, {-1, NULL, 0, 0, 0, 0, NULL, NULL} }; struct option Window_Menu[] = { {0, "Info Menu", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Page %d (click to change)", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "show \"all\" message window", 0, &messwa, 0, 0, NULL, NULL}, {1, "show \"team\" message window", 0, &messwt, 0, 0, NULL, NULL}, {1, "show \"your\" message window", 0, &messwi, 0, 0, NULL, NULL}, {1, "show \"kill\" message window", 0, &messwk, 0, 0, NULL, NULL}, {1, "show \"total\" message window", 0, &reviewWin, 0, 0, NULL, NULL}, {1, "show phaser log window", &phaserWindow, &phaserwin, 0, 0, NULL}, {1, "show statistic window", 0, &statwin, 0, 0, NULL, NULL}, {1, "show help window", 0, &helpWin, 0, 0, NULL, NULL}, #ifdef XTREKRC_HELP {1, "show xtrekrc defaults window", 0, &defWin, 0, 0, NULL, NULL}, #endif #ifdef DOC_WIN {1, "show xtrekrc", 0, &xtrekrcwin, 0, 0, NULL, NULL}, {1, "show documentation window", 0, &docwin, 0, 0, NULL, NULL}, #endif {1, "done", ¬done, 0, 0, 0, NULL, NULL}, {-1, NULL, 0, 0, 0, 0, NULL, NULL} }; struct option Visual_Menu[] = { {0, "Visuals Menu", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Page %d (click to change)", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "", &plistStyle, 0, 0, 0, plistoptions, NULL}, {1, "sort the playerlist", &sortPlayers, 0, 0, 0, NULL, 0}, {1, "put my team first in the list", &sortMyTeamFirst, 0, 0, 0, NULL, 0}, {1, "partition the playerlist", &partitionPlist, 0, 0, 0, NULL, 0}, {1, "", &newDashboard, 0, 0, 0, dashboardoptions, NULL}, {1, "keep info %d upds (0=don't remove)", &keepInfo, 0, 0, 0, 0, &keepInfo_range}, #ifdef BEEPLITE {1, "use RCD highlighting", &UseLite, 0, 0, 0, NULL, NULL}, #endif #ifdef HOCKEY_LINES {1, "show hockey lines", &hockey_s_lines, 0, 0, 0, NULL, NULL}, #endif {1, "alert on extra border(s)", &extraBorder, 0, 0, 0, NULL, NULL}, {1, "", &showPhaser, 0, 0, 0, phaserdispmess, NULL}, #ifdef PHASER_STATS {1, "", &phaserShowStats, 0, 0, 0, phaserstatmess, NULL}, #endif {1, "done", ¬done, 0, 0, 0, NULL, NULL}, {-1, NULL, 0, 0, 0, 0, NULL, NULL} }; struct option Pixmap_Menu[] = { {0, "Pixmap Menu", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Page %d (click to change)", &MenuPage, 0, 0, 0, NULL, &Menus_Range}, {1, "Use IND pixmaps", &pixFlags, 0, 0, NO_IND_PIX, NULL, NULL}, {1, "Use FED pixmaps", &pixFlags, 0, 0, NO_FED_PIX, NULL, NULL}, {1, "Use ROM pixmaps", &pixFlags, 0, 0, NO_ROM_PIX, NULL, NULL}, {1, "Use KLI pixmaps", &pixFlags, 0, 0, NO_KLI_PIX, NULL, NULL}, {1, "Use ORI pixmaps", &pixFlags, 0, 0, NO_ORI_PIX, NULL, NULL}, {1, "Use weapon pixmaps", &pixFlags, 0, 0, NO_WEP_PIX, NULL, NULL}, {1, "Use explosion pixmaps", &pixFlags, 0, 0, NO_EXP_PIX, NULL, NULL}, {1, "Use cloaking pixmaps", &pixFlags, 0, 0, NO_CLK_PIX, NULL, NULL}, {1, "Use planet pixmaps on map", &pixFlags, 0, 0, NO_MAP_PIX, NULL, NULL}, {1, "Use background images", &pixFlags, 0, 0, NO_BG_PIX, NULL, NULL}, {1, "Halo by owner on galactic", &pixFlags, 0, 0, NO_HALOS, NULL, NULL}, {1, "done", ¬done, 0, 0, 0, NULL, NULL}, {-1, NULL, 0, 0, 0, 0, NULL, NULL} }; #define NUMOPTIONS(menu) ((sizeof((menu))/sizeof((menu)[0]))-1) /* option menu sizes and such */ #define OPTIONBORDER 2 #define OPTIONLEN 35 static void RefreshOptions(void); static void OptionClear(int i); static void optionrefresh(register struct option *op); static int InitOptionMenus(void); static void AddOptMenu(struct option *NewMenu, int updated); static int NumOptions(struct option *OpMenu); /* Set up the option menus and window. */ void optionwindow(void) { /* Init not done flag */ notdone = 1; *newkeys = '\0'; if (FirstMenu == NULL) { MaxOptions = InitOptionMenus(); if (MaxOptions < 0) { fprintf(stderr, "InitOptionMenus() error %d!\n", MaxOptions); notdone = 0; return; } } /* Create window big enough to hold option windows */ if (optionWin == NULL) { optionWin = W_MakeMenu("option", TWINSIDE + 10, -BORDER + 10, OPTIONLEN, MaxOptions, baseWin, OPTIONBORDER); W_SetWindowKeyDownHandler(optionWin, optionaction); W_SetWindowButtonHandler(optionWin, optionaction); W_DefineArrowCursor(optionWin); CurrentMenu = FirstMenu; RefreshOptions(); } /* Map window */ W_MapWindow(optionWin); } /* refresh all current options */ static void RefreshOptions(void) { int i; struct option_menu *option; if (notdone == 0 || (option = CurrentMenu) == NULL) return; for (i = 0; i < option->numopt; i++) { optionrefresh(&(option->menu[i])); } if (option->numopt < MaxOptions) for (i = option->numopt; i < MaxOptions; i++) { OptionClear(i); } } /* blank out option line 'i' */ static void OptionClear(int i) { char *blanktext = " "; if (optionWin && notdone) W_WriteText(optionWin, 0, i, textColor, blanktext, OPTIONLEN, 0); } /* Redraw the specified option entry */ void optionredrawtarget(W_Window win) { register struct option *op; if (notdone == 0) return; for (op = CurrentMenu->menu; op->op_text; op++) { if (op->op_targetwin && win == *op->op_targetwin) { optionrefresh(op); break; } } } /* Redraw the specified option option */ void optionredrawoption(int *ip) { register struct option *op; if (notdone == 0) return; for (op = CurrentMenu->menu; op->op_num >= 0; op++) { if (ip == op->op_option) { optionrefresh(op); break; } } } /* Refresh the option window given by the option struct */ static void optionrefresh(register struct option *op) { register int on; char buf[BUFSIZ]; if (op == NULL || notdone == 0) return; if (op->op_string) { (void) sprintf(buf, op->op_text, op->op_string); } else if (op->op_array) { /* Array of strings */ strcpy(buf, op->op_array[*op->op_option]); } else if (op->op_range) { (void) sprintf(buf, op->op_text, *(op->op_option)); } else { /* Either a boolean or a window */ if (op->op_option) if (op->op_size) /* Pixmap Bit Value */ on = !(*op->op_option & op->op_size); else on = *op->op_option; /* use int for status */ else if (op->op_targetwin) on = W_IsMapped(*op->op_targetwin); /* use window for status */ else on = 1; /* shouldn't happen */ if (!on) strcpy(buf, "Don't "); else buf[0] = '\0'; strcat(buf, op->op_text); } if (islower(buf[0])) buf[0] = toupper(buf[0]); W_WriteText(optionWin, 0, op->op_num, textColor, buf, strlen(buf), 0); } /* deal with events sent to the option window */ void optionaction(W_Event * data) { register struct option *op; int i; register char *cp; if (data->y >= CurrentMenu->numopt) { W_Beep(); return; } if (notdone == 0) return; op = &(CurrentMenu->menu[data->y]); /* Update string; don't claim keystrokes for non-string options */ /* deal with options with string input first */ if (op->op_string == 0) { if (data->type == W_EV_KEY) return; } else { if (data->type == W_EV_BUTTON) return; switch (data->key) { case '\b': /* delete character */ case '\177': cp = op->op_string; i = strlen(cp); if (i > 0) { cp += i - 1; *cp = '\0'; } break; case '\027': /* word erase */ cp = op->op_string; i = strlen(cp); /* back up over blanks */ while (--i >= 0 && isspace(cp[i])) ; i++; /* back up over non-blanks */ while (--i >= 0 && !isspace(cp[i])) ; i++; cp[i] = '\0'; break; case '\025': /* kill line */ case '\030': op->op_string[0] = '\0'; break; default: /* add character to the list * */ if (data->key < 32 || data->key > 127) break; cp = op->op_string; i = strlen(cp); if (i < (op->op_size - 1) && !iscntrl(data->key)) { cp += i; cp[1] = '\0'; cp[0] = data->key; } else W_Beep(); break; } } /* Toggle int, if it exists */ if (op->op_array) { if (data->key == W_RBUTTON) { (*op->op_option)++; if (*(op->op_array)[*op->op_option] == '\0') { *op->op_option = 0; } } else if (data->key == W_MBUTTON) { /* set option number to zero on the middle key to ease shutoff */ *op->op_option = 0; } else if (data->key == W_LBUTTON) { /* if left button, decrease option */ (*op->op_option)--; /* if decreased too far, set to top option */ if (*(op->op_option) < 0) { *op->op_option = 0; while (*(op->op_array)[*op->op_option] != '\0') { (*op->op_option)++; } (*op->op_option)--; } } /* Actions to be taken when certain options are selected. (Yes, this is * * * a hack). */ if (op->op_option == &plistStyle) { if (plistCustomLayout == 0 && plistStyle == 0) plistStyle = (data->key == W_LBUTTON) ? PLISTLASTSTYLE : 1; RedrawPlayerList(); } else if (op->op_option == &showgalactic) { redrawall = 1; } #ifdef ROTATERACE else if (rotate != old_rotate) { int i; struct planet *l; struct player *j; redrawall = 1; reinitPlanets = 1; for (i = 0, l = planets; i < MAXPLANETS; i++, l++) { if (rotate) { rotate_deg = -old_rotate_deg + rotate * 64; rotate_coord(&l->pl_x, &l->pl_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_deg = rotate * 64; } else { rotate_deg = -old_rotate_deg; rotate_coord(&l->pl_x, &l->pl_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_deg = 0; } } /* we could wait for the server to do this but looks better if we * * * * do it now. */ for (i = 0, j = players; i < MAXPLAYER; i++, j++) { if (j->p_status != PALIVE) continue; if (rotate) { rotate_deg = -old_rotate_deg + rotate * 64; rotate_coord(&j->p_x, &j->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&j->p_dir, rotate_deg); rotate_deg = rotate * 64; } else { rotate_deg = -old_rotate_deg; rotate_coord(&j->p_x, &j->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&j->p_dir, rotate_deg); rotate_deg = 0; } } /* phasers/torps/etc .. wait for server */ old_rotate = rotate; old_rotate_deg = rotate_deg; } #endif } /* Does the button have a range of values? */ else if (op->op_range) { if (data->key == W_RBUTTON) { (*op->op_option) += op->op_range->increment; } else if (data->key == W_MBUTTON) { (*op->op_option) = op->op_range->min_value; } else if (data->key == W_LBUTTON) { (*op->op_option) -= op->op_range->increment; } /* wrap value around within option range */ if (*(op->op_option) > op->op_range->max_value) *(op->op_option) = op->op_range->min_value; if (*(op->op_option) < op->op_range->min_value) *(op->op_option) = op->op_range->max_value; if (op->op_option == &client_ups) { switch (data->key) { case W_LBUTTON: switch (*op->op_option) { case 9: *op->op_option = 5; break; case 24: *op->op_option = 10; break; case 49: *op->op_option = 25; break; } break; case W_MBUTTON: *op->op_option = 5; break; case W_RBUTTON: switch (*op->op_option) { case 6: *op->op_option = 10; break; case 11: *op->op_option = 25; break; case 26: *op->op_option = 50; break; } break; } if (client_ups != server_ups) { sendUpdatePacket(1000000 / client_ups); } } } /* Is the option a toggle? */ /* Bitwise Toggle */ else if ((op->op_option) && (op->op_size)) { if (!(pixMissing & op->op_size)) { *op->op_option ^= op->op_size; if (op->op_size & (NO_MAP_PIX | NO_BG_PIX | NO_HALOS)) redrawall = 1; } } else if (op->op_option) { *op->op_option = !*op->op_option; /* Actions to be taken when certain options are selected. * (Yes, this * * is a hack). */ if (op->op_option == &showPlanetOwner) redrawall = 1; else if (op->op_option == &partitionPlist) RedrawPlayerList(); else if (op->op_option == &sortPlayers) RedrawPlayerList(); else if (op->op_option == &sortMyTeamFirst) RedrawPlayerList(); } /* Map/unmap window, if it exists */ if (op->op_targetwin) { if (W_IsMapped(*op->op_targetwin)) W_UnmapWindow(*op->op_targetwin); else { W_MapWindow(*op->op_targetwin); if (*op->op_targetwin == udpWin) udpwindow(); if (*op->op_targetwin == pStats) redrawPStats(); if (*op->op_targetwin == netstatWin) nswindow(); if (*op->op_targetwin == spWin) spwindow(); #ifdef XTREKRC_HELP if (defWin && *op->op_targetwin == defWin) showdef(); #endif #ifdef SOUND if (*op->op_targetwin == soundWin) soundwindow(); #endif #ifdef DOC_WIN if (docwin && *op->op_targetwin == docwin) showdocs(0); if (xtrekrcwin && *op->op_targetwin == xtrekrcwin) showxtrekrc(0); #endif } } /* deal with possible menu change */ if (MenuPage != CurrentMenu->page_num) { SetMenuPage(MenuPage); RefreshOptions(); } else if (notdone) optionrefresh(op); else { optionrefresh(op); optiondone(); } return; } /* find the menu in the menus linked list that matches the one in the * * argument */ void SetMenuPage(int pagenum) { int i = 1; if (FirstMenu != NULL) for (CurrentMenu = FirstMenu; CurrentMenu->Next != NULL && CurrentMenu->page_num != pagenum; i++, CurrentMenu = CurrentMenu->Next); } void optiondone(void) { char *str; /* Unmap window */ W_UnmapWindow(optionWin); /* update keymap */ for (str = newkeys; *str != '\0'; str += 2) { if ((*str >= 32 && *str < 127) || *str == 'O') { if (*(str + 1) == '\0') break; mystats->st_keymap[*str - 32] = *(str + 1); } if (*(str + 1) == '\0') break; } *newkeys = '\0'; sendOptionsPacket(); /* update server as to the client's options */ } /* set up menus linked list */ static int InitOptionMenus(void) { int i = 1; int maxopts = 0; /* AddOptMenu( &OptionsMenu, 0); */ AddOptMenu(Control_Menu, 0); AddOptMenu(Ship_Menu, 0); AddOptMenu(Planet_Menu, 0); AddOptMenu(Visual_Menu, 0); AddOptMenu(Window_Menu, 0); AddOptMenu(Pixmap_Menu, 0); for (i = 0, CurrentMenu = FirstMenu; CurrentMenu != NULL; i++, CurrentMenu = CurrentMenu->Next) { CurrentMenu->page_num = i; /* repage the menus.. */ if (CurrentMenu->numopt > maxopts) maxopts = CurrentMenu->numopt; } CurrentMenu = FirstMenu; Menus_Range.max_value = i - 1; return maxopts; } static void AddOptMenu(struct option * NewMenu, int updated) { struct option_menu *menuptr; struct option_menu *newmenu; int i = 0; menuptr = FirstMenu; newmenu = (struct option_menu *) malloc(sizeof(struct option_menu)); if (newmenu == NULL) { perror("Malloc Error adding a menu"); return; } /* add to list */ if (FirstMenu == NULL) { FirstMenu = newmenu; } else { for (i = 0, menuptr = FirstMenu; menuptr->Next != NULL; menuptr = menuptr->Next) i++; menuptr->Next = newmenu; } newmenu->page_num = i; newmenu->Next = NULL; newmenu->numopt = NumOptions(NewMenu); newmenu->menu = NewMenu; newmenu->updated = updated; } static int NumOptions(struct option *OpMenu) { int i = 0; struct option *ptr; for (ptr = OpMenu, i = 0; ptr->op_num != -1; i++, ++ptr) { ptr->op_num = i; } return i; } /* a function that could be called regularly, to deal with menus that * might * be updated by external events. I.e. the udp menu! */ void UpdateOptions(void) { if (notdone == 0) return; /* don't update if menu * * * isn't in use */ if (CurrentMenu->updated) RefreshOptions(); } netrek-client-cow-3.3.2/getname.c0000664000175000017500000003076213657750470015645 0ustar jamesjames/* getname.c * * Kevin P. Smith 09/28/88 * Rewrite by James Cameron, 2008-07-28. */ #include "config.h" #include "copyright2.h" #include #include #include #include #include #include INC_SYS_SELECT #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "myf.h" #include "socket.h" #include "getname.h" static char *n_def; static char n_buf[16]; static char p_buf_a[16]; static char p_buf_b[16]; static int state; static int automatic; static char *err = NULL; static int time_left = 199; static int time_error_ends; #define SIZEOF(a) (sizeof (a) / sizeof (*(a))) #define ST_GETNAME 0 /* asking user for name */ #define ST_TX_GUEST 1 /* asking server for access by guest */ #define ST_RX_GUEST 2 #define ST_TX_NAME 3 /* asking server for access by name */ #define ST_RX_NAME 4 #define ST_GETPASS 5 /* asking user for password after ST_PROBE_NAME */ #define ST_MAKEPASS1 6 /* asking user for a new password */ #define ST_MAKEPASS2 7 /* asking user to confirm password */ #define ST_TX_LOGIN 8 /* asking server for access by name and password */ #define ST_RX_LOGIN 9 #define ST_DONE 10 /* completed */ #define ST_DISCONNECTED 11 /* disconnected */ #define ST_ERROR_PAUSE 12 /* pause for error display */ #define ERROR_PAUSE_SECONDS 3 #define X_L 90 /* X left edge, how far in to begin text writing */ extern void terminate(int error); static char *asterisks(char *password) { static char buf[17]; int len; strcpy(buf, "****************"); len = strlen(password); if (len > strlen(buf)) len = strlen(buf); buf[len] = '\0'; return buf; } static void redraw_readme(void) { static char *README[] = { "-- --", "", "netrek-client-cow maintainer: quozl@us.netrek.org", "bug reports welcome", "", "-- --", }; int i; for (i=0; i 0) { str[strLen - 1] = '\0'; redraw(); } } else { if (strLen == 15) return; str[strLen + 1] = '\0'; str[strLen] = ch; redraw(); } } static void key(char ch) { if (ch == 10) ch = 13; #ifdef CONTROL_KEY if ((ch == 4 || ch == ((char) ('d' + 96)) || ch == ((char) ('D' + 96))) && state == ST_GETNAME && *n_buf == '\0') #else if (ch == 4 && state == ST_GETNAME && *n_buf == '\0') #endif { terminate(0); } if (ch < 32 && ch != 21 && ch != 13 && ch != 8) return; switch (state) { case ST_GETNAME: if (ch == 13) { err = NULL; if (*n_buf == '\0') STRNCPY(n_buf, n_def, sizeof(n_buf)); if (strncmp(n_buf, "Guest", 5) == 0 || strncmp(n_buf, "guest", 5) == 0) { state = ST_TX_GUEST; } else { state = ST_TX_NAME; } redraw(); } else { key_to_buffer(ch, n_buf); } break; case ST_GETPASS: if (ch == 13) { err = NULL; state = ST_TX_LOGIN; redraw(); } else { key_to_buffer(ch, p_buf_a); } break; case ST_MAKEPASS1: if (ch == 13) { err = NULL; state = ST_MAKEPASS2; redraw(); } else { key_to_buffer(ch, p_buf_a); } break; case ST_MAKEPASS2: if (ch == 13) { err = NULL; if (strcmp(p_buf_a, p_buf_b) != 0) { if (!automatic) { error_pause("Passwords do not match, starting again!"); } else { automatic_failed(); state = ST_GETNAME; } *n_buf = 0; } else { state = ST_TX_LOGIN; } redraw(); } else { key_to_buffer(ch, p_buf_b); } break; case ST_DISCONNECTED: if (ch == 13) { terminate(EXIT_LOGIN_FAILURE); } /* fall through */ default: W_Beep(); break; } return; } static void events() { int do_redraw = 0; char ch; W_Event event; while (W_EventsPending()) { W_NextEvent(&event); switch (event.type) { case W_EV_EXPOSE: if (event.Window == w) do_redraw = 1; break; case W_EV_KEY: ch = event.key; if (!automatic) key(ch); break; case W_EV_CLOSED: if (event.Window == baseWin) { fprintf(stderr, "you quit, by closing the login window\n"); terminate(0); } break; } } if (do_redraw) { redraw(); redraw_time_left(); } } static void mystats_init() { int j; MZERO(mystats, sizeof(struct stats)); mystats->st_tticks = 1; for (j = 0; j < 95; j++) { mystats->st_keymap[j] = j + 32; mystats->st_keymap[j + 96] = j + 32 + 96; #ifdef MOUSE_AS_SHIFT mystats->st_keymap[j + 192] = j + 32; mystats->st_keymap[j + 288] = j + 32; mystats->st_keymap[j + 384] = j + 32; #endif } mystats->st_keymap[95] = 0; mystats->st_flags = ST_MAPMODE + ST_NAMEMODE + ST_SHOWSHIELDS + ST_KEEPPEACE + ST_SHOWLOCAL * 2 + ST_SHOWGLOBAL * 2; } /* Let person identify themselves from w */ void getname(char *defname, char *defpasswd) { char ch; time_t lasttime; int j; struct timeval timeout; fd_set readfds; char ppwd[16]; STRNCPY(ppwd, "\0\0\0", 4); automatic = (*defpasswd && *defname) ? 1 : 0; n_def = defname; mystats_init(); lasttime = time(NULL); if (ghoststart) return; n_buf[0] = '\0'; p_buf_a[0] = '\0'; p_buf_b[0] = '\0'; state = ST_GETNAME; redraw(); while (1) { switch (state) { case ST_TX_GUEST: /* asking server for access by guest */ loginAccept = -1; sendLoginReq(n_buf, ppwd, login, 0); state = ST_RX_GUEST; redraw(); break; case ST_TX_NAME: /* asking server for access by name */ loginAccept = -1; sendLoginReq(n_buf, ppwd, login, 1); state = ST_RX_NAME; redraw(); break; case ST_TX_LOGIN: /* asking server for access by name and password */ loginAccept = -1; sendLoginReq(n_buf, p_buf_a, login, 0); state = ST_RX_LOGIN; redraw(); break; } events(); if (automatic) { timeout.tv_sec = 0; timeout.tv_usec = 1000; } else { timeout.tv_sec = 1; timeout.tv_usec = 0; } FD_ZERO(&readfds); if (!isServerDead()) { FD_SET(sock, &readfds); if (udpSock >= 0) FD_SET(udpSock, &readfds); } FD_SET(W_Socket(), &readfds); if (SELECT(32, &readfds, 0, 0, &timeout) < 0) { perror("select"); sleep(1); continue; } if (!isServerDead()) { if (FD_ISSET(sock, &readfds) || (udpSock >= 0 && FD_ISSET(udpSock, &readfds))) readFromServer(&readfds); } if (isServerDead()) { state = ST_DISCONNECTED; redraw(); } switch (state) { case ST_RX_GUEST: /* asking server for access by guest */ if (loginAccept != -1) { if (loginAccept == 0) { error_pause("Server refuses guest login, use another name."); fastGuest = 0; *n_buf = 0; } else { me->p_pos = -1; me->p_stats.st_tticks = 1; /* prevent overflow */ STRNCPY(me->p_name, n_buf, sizeof(n_buf)); state = ST_DONE; } redraw(); } break; case ST_RX_NAME: /* asking server for access by name */ if (loginAccept != -1) { *p_buf_a = *p_buf_b = 0; if (loginAccept == 0) { state = ST_MAKEPASS1; } else { state = ST_GETPASS; } redraw(); } break; case ST_RX_LOGIN: /* asking server for access by name and password */ if (loginAccept != -1) { if (loginAccept == 0) { if (!automatic) { error_pause("Bad password!"); } else { automatic_failed(); state = ST_GETNAME; } *n_buf = 0; } else { STRNCPY(me->p_name, n_buf, sizeof(n_buf)); keeppeace = (me->p_stats.st_flags / ST_KEEPPEACE) & 1; state = ST_DONE; } redraw(); } break; } if (FD_ISSET(W_Socket(), &readfds)) while (W_EventsQueuedCk()) events(); if (time(0) != lasttime) { lasttime++; time_left--; redraw_time_left(); if (time_left == 0) { me->p_status = PFREE; printf("Timed Out.\n"); terminate(0); } switch (state) { case ST_ERROR_PAUSE: if (time_left < time_error_ends) { state = ST_GETNAME; W_ClearWindow(w); err = NULL; redraw(); } } } if (state == ST_DONE) { W_ClearWindow(w); W_ClearWindow(mapw); return; } if (automatic) { switch (state) { case ST_GETNAME: n_buf[0] = '\0'; ch = 13; j = 0; key(ch); break; case ST_GETPASS: case ST_MAKEPASS1: case ST_MAKEPASS2: ch = defpasswd[j++]; if (ch == '\0') { j = 0; ch = 13; } key(ch); break; } } } } netrek-client-cow-3.3.2/string_util.h0000664000175000017500000000263513657750470016573 0ustar jamesjames/* string_util.h The client actually uses lots of string functions, mostly to format the information it displays. This module provides housing for all these string functions. */ #ifndef string_util_h #define string_util_h char *itoapad (int val, char *result, int pad, int prec); /* Convert an integer `val' to a null terminated string `result'. Only the `prec' most significant digits will be written out. If `val' can be expressed in fewer than `prec' digits then the number is padded out with zeros (if pad is true) or spaces (if pad is false). WARNING: val must be <= 100000000 (size < 9). Does not work for negative numbers. */ char *ftoa (float fval, char *result, int pad, int iprec, int dprec); /* Convert a float `fval' to a null terminated string `result'. Only the `iprec' most significant whole digits and the `dprec' most significat fractional digits are printed. The integer part will be padded with zeros (if pad is true) or spaces (if pad is false) if it is shorter than `iprec' digits. The floating point part will always be padded with zeros. WARNING: The whole part of `fval' must be <= 100000000 (size < 9). */ char *format (char *buf, char *from, int width, int right_justify); /* Right or left justify the string `from' into the next `width' characters in the buffer `buf'. */ #endif /* defined string_util_h */ netrek-client-cow-3.3.2/beeplite.h0000664000175000017500000000011713657750470016012 0ustar jamesjames/* beeplite.c */ void rcdlite(struct distress *dist); void litedefaults(void); netrek-client-cow-3.3.2/randomize.c0000664000175000017500000000052313657750470016205 0ustar jamesjames#include "config.h" /* randomize argv's - stolen from beorn * */ main (ac, av) int ac; char *av[]; { int i, j; SRANDOM ((getuid () << 7) ^ (getpid () << 4) ^ time (0)); for (i = ac - 1; i; i--) { j = (RANDOM () % i) + 1; printf ("%s ", av[j]); av[j] = av[i]; } printf ("\n"); exit (0); } netrek-client-cow-3.3.2/udpopt.h0000664000175000017500000000016013657750470015532 0ustar jamesjames/* udpopt.c */ void udpwindow(void); void udprefresh(int i); void udpaction(W_Event *data); void udpdone(void); netrek-client-cow-3.3.2/helpwin.h0000664000175000017500000000004513657750470015667 0ustar jamesjames/* helpwin.c */ void fillhelp(void); netrek-client-cow-3.3.2/defwin.c0000664000175000017500000003133513657750470015476 0ustar jamesjames#include "config.h" #ifdef XTREKRC_HELP /* taken from helpwin.c (copyright 1991 ERic mehlhaff Free to use, hack, etc. * Just keep these credits here. Use of this code may be dangerous to your * health and/or system. Its use is at your own risk. I assume no * responsibility for damages, real, potential, or imagined, resulting from * the use of it.) * */ #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "playerlist.h" #include INC_STRINGS /* this is the number of help messages there are */ #define INT_DEF 0 #define BOOL_DEF 1 #define STR_DEF 2 #define SINT_DEF 3 #define NAME_WIDTH 18 #define VAL_WIDTH 8 #define INDENT 3 #define MAX_VLINES 42 #ifdef RECORD extern char *recordFileName; #endif #define DEFMESSAGES (sizeof(def_messages)/ sizeof(struct def)) char *name = NULL, *cloak_chars = NULL, *bmap = NULL, *keymap = NULL, *plist = NULL, *ckeymap = NULL; /* sure its a mess, but it gets the job done */ static struct def { char *name; int type; char *desc; int *variable; struct { int i_value; /* if int or bool */ char *s_value; /* if str */ char *desc; } values[10]; } def_messages[] = { { "extraAlertBorder", BOOL_DEF, "Show alert on local border", &extraBorder, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "keepPeace", BOOL_DEF, "Stay peaceful when reborn", &keeppeace, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "keepInfo", SINT_DEF, "No. of updates to keep info windows", &keepInfo, { { 0, NULL, NULL } , } , } , { "netStatFreq", SINT_DEF, "Frequency of updates to calc lag", &netstatfreq, { { 0, NULL, NULL } , } , } , { "enemyPhasers", SINT_DEF, "Width of enemy phasers", &enemyPhasers, { { 0, NULL, NULL } , } , } , { "netStats", BOOL_DEF, "Lag stats and lag meter display", &netstat, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #ifdef VARY_HULL { "warnHull", BOOL_DEF, "Warn hull state based on damage", &vary_hull, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif #ifdef VSHIELD_BITMAPS { "varyShields", BOOL_DEF, "Vary shields base on damage", &VShieldBitmaps, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif { "warnShields", BOOL_DEF, "Shiild color based on alert status", &warnShields, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "newPlist", BOOL_DEF, "Show new player list", &newPlist, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "reportKills", BOOL_DEF, "Report kill messages", &reportKills, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "showGalactic", INT_DEF, "Galactic planet bitmaps", &showgalactic, { { 0, NULL, "show nothing on galactic map" } , { 1, NULL, "show owner on galactic map" } , { 2, NULL, "show standard resources on galactic map" } , { 3, NULL, "show MOO resources on galactic map" } , { 4, NULL, "show rabbit ears on galactic map" } , { 0, NULL, NULL } , } , } , { "showLocal", INT_DEF, "Local planet bitmaps", &showlocal, { { 0, NULL, "show nothing on local map" } , { 1, NULL, "show owner on local map" } , { 2, NULL, "show standard resources on local map" } , { 3, NULL, "show MOO resources on local map" } , { 4, NULL, "show rabbit ears on local map" } , { 0, NULL, NULL } , } , } , { "showLock", INT_DEF, "Lock display for planets/players", &showLock, { { 0, NULL, "don't show lock" } , { 1, NULL, "show lock on galactic only" } , { 2, NULL, "show lock on tactical only" } , { 3, NULL, "show lock on both" } , { 0, NULL, NULL } , } } , { "name", STR_DEF, "Default player name", (int *) &(name), { { 0, NULL, NULL } , } , } , { "keymap", STR_DEF, "Keyboard map", (int *) &(keymap), { { 0, NULL, NULL } , } , } , { "ckeymap", STR_DEF, "Control keyboard map", (int *) &(ckeymap), { { 0, NULL, NULL } , } , } , { "buttonmap", STR_DEF, "Mouse button map", (int *) &(bmap), { { 0, NULL, NULL } , } , } , { "cloakChars", STR_DEF, "Cloak chars for map", (int *) &(cloak_chars), { { 0, NULL, NULL } , } , } , { "playerListStyle", INT_DEF, "The style for the playerlist", &plistStyle, { { 0, NULL, "Custom player list" } , { 1, NULL, "Old Player List" } , { 2, NULL, "COW Player List" } , { 3, NULL, "Kill Watch Player List" } , { 4, NULL, "BRMH Player List" } , { 0, NULL, NULL } , } } , { "playerlist", STR_DEF, "What to show on custom player list", (int *) &(plistCustomLayout), { { 0, NULL, NULL } , } , } , { "partitionPlist", BOOL_DEF, "Use blank space in player list", &partitionPlist, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "showPlanetNames", BOOL_DEF, "Show names on map/local", &namemode, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "showTractorPressor", BOOL_DEF, "Show my tract/press", &showTractorPressor, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "continuetractor", BOOL_DEF, "Keep showing tract/press", &continuetractor, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #ifdef SHORT_PACKETS { "tryShort", BOOL_DEF, "Try SHORT-PACKETS at startup", &tryShort1, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif { "tryUdp", BOOL_DEF, "Try UDP automatically", &tryUdp1, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "udpClientReceive", INT_DEF, "UDP receive mode", &udpClientRecv, { { 0, NULL, "TCP only" } , { 1, NULL, "simple UDP" } , { 2, NULL, "fat UDP" } , { 3, NULL, "double UDP (obsolete)" } , { 0, NULL, NULL } , } , } , { "udpClientSend", INT_DEF, "UDP send mode", &udpClientSend, { { 0, NULL, "TCP only" } , { 1, NULL, "simple UDP" } , { 2, NULL, "enforced UDP (state only)" } , { 3, NULL, "enforced UDP (state & weapon)" } , { 0, NULL, NULL } , } , } , { "udpSequenceCheck", BOOL_DEF, "UDP sequence checking", &udpSequenceChk, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #ifdef RSA { "useRSA", BOOL_DEF, "Use RSA checking", &RSA_Client, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif { "newdashboard", INT_DEF, "Use new dashboard", &newDashboard, { { 0, NULL, "Text dashboard" } , { 1, NULL, "COW style dashboard" } , { 2, NULL, "KRP style dashboard" } , { 3, NULL, "LABs new dashboard" } , { 0, NULL, NULL } , } , } , #ifdef BEEPLITE { "lite", BOOL_DEF, "Use message highlighting", &UseLite, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "DefLite", BOOL_DEF, "Use default lites", &DefLite, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif { "newDistress", BOOL_DEF, "Use new distress call", &UseNewDistress, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "rejectMacro", BOOL_DEF, "Reject macros", &rejectMacro, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "showIND", BOOL_DEF, "Show independent planets w/X", &showIND, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #ifdef IGNORE_SIGNALS_SEGV_BUS { "ignoreSignals", BOOL_DEF, "Ignore SIGSEGV and SIGBUS", &ignore_signals, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif #ifdef MOTION_MOUSE { "continuousMouse", BOOL_DEF, "Continuous mouse input", &motion_mouse, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , { "motionThresh", SINT_DEF, "Threshold for above", &user_motion_thresh, { { 0, NULL, NULL } , } , } , #endif { "ignoreCaps", BOOL_DEF, "Ignore the Capslock key", &ignoreCaps, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #ifdef SHIFTED_MOUSE { "shiftedMouse", BOOL_DEF, "More mouse buttons with shift", &extended_mouse, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif #ifdef TNG_FED_BITMAPS { "useTNGBitmaps", BOOL_DEF, "Use next generation bitmaps", &use_tng_fed_bitmaps, { { 0, NULL, "" } , { 0, NULL, NULL } , } , } , #endif }; static char * itos(int v) { static char value[10]; sprintf(value, "%d", v); return value; } static char * btoa(int v) { if (v) return "on"; else return "off"; } void showdef(void) { int i, j, x = 0, y = 0, xo = 0, yo = 0, max_desc = 0, height = 1, width = 1; struct def *d; char *val; name = getdefault("name"); keymap = getdefault("keymap"); ckeymap = getdefault("ckeymap"); plist = getdefault("playerlist"); cloak_chars = cloakChars; bmap = getdefault("buttonmap"); if (!defWin) defWin = W_MakeTextWindow("xtrekrc_help", 1, 100, 174, 41, NULL, BORDER); for (i = 0, d = def_messages; i < DEFMESSAGES; i++, d++) { x = xo; y = yo; W_WriteText(defWin, x, y, W_Yellow, d->name, strlen(d->name), W_BoldFont); x += NAME_WIDTH; W_WriteText(defWin, x, y, textColor, d->desc, strlen(d->desc), W_RegularFont); if (strlen(d->desc) > max_desc) { max_desc = strlen(d->desc); width = MAX(width, x + max_desc); } y++; x = xo + INDENT; if (d->type != STR_DEF) { if (!d->values[0].desc && d->variable) { if (d->type == SINT_DEF) val = itos(*d->variable); else val = itos(d->values[0].i_value); W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_RegularFont); y++; } for (j = 0; d->values[j].desc; j++) { switch (d->type) { case INT_DEF: val = itos(d->values[j].i_value); if (d->values[j].i_value == *d->variable) { W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_BoldFont); if (W_Mono()) { W_WriteText(defWin, x + 1, y, W_Green, "*", 1, W_RegularFont); } } else W_WriteText(defWin, x, y, textColor, val, strlen(val), W_RegularFont); x = xo + NAME_WIDTH; W_WriteText(defWin, x, y, textColor, d->values[j].desc, strlen(d->values[j].desc), W_RegularFont); y++; x = xo + INDENT; break; case BOOL_DEF: val = btoa(*d->variable); W_WriteText(defWin, x, y, W_Green, val, strlen(val), W_RegularFont); y++; x = xo + INDENT; break; default: fprintf(stderr, "Unknown type.\n"); break; } } } else if (d->variable && *d->variable) { W_WriteText(defWin, x, y, W_Green, *((char **) d->variable), strlen(*((char **) d->variable)), W_RegularFont); y++; } height = MAX(height, y); if (y > MAX_VLINES) { yo = 0; xo += NAME_WIDTH + max_desc + 2; max_desc = 0; } else { yo = y + 1; } } W_ResizeTextWindow(defWin, width, height); W_MapWindow(defWin); } #endif netrek-client-cow-3.3.2/distress.h0000664000175000017500000000032113657750470016056 0ustar jamesjamesint makedistress(struct distress *dist, char *cry, char *pm); void Dist2Mesg(struct distress *dist, char *buf); void HandleGenDistr(char *message, unsigned char from, unsigned char to, struct distress *dist); netrek-client-cow-3.3.2/smessage.h0000664000175000017500000000036713657750470016037 0ustar jamesjamesvoid smessage(char ichar); char *getaddr2(int flags, int recip); void DisplayMessage(void); void message_off(void); void pmessage(char *str, int recip, int group); void message_on(void); int getgroup(char addr, int *recip); void pnbtmacro(int c); netrek-client-cow-3.3.2/localcursor.bitmap0000664000175000017500000000143613657750470017603 0ustar jamesjames#define localcursor_width 11 #define localcursor_height 11 #define localcursor_x_hot 5 #define localcursor_y_hot 5 #ifndef WIN32 static char localcursor_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; #else /* doesn't work under X */ static char localcursor_bits[] = { 0x20, 0x00, 0x20, 0x00, 0x24, 0x01, 0x20, 0x00, 0x20, 0x00, 0xdf, 0x07, 0x20, 0x00, 0x20, 0x00, 0x24, 0x01, 0x20, 0x00, 0x20, 0x00}; #endif #define localmask_width 11 #define localmask_height 11 #define localmask_x_hot 5 #define localmask_y_hot 5 static char localmask_bits[] = { 0x20, 0x00, 0x20, 0x00, 0x24, 0x01, 0x20, 0x00, 0x20, 0x00, 0xdf, 0x07, 0x20, 0x00, 0x20, 0x00, 0x24, 0x01, 0x20, 0x00, 0x20, 0x00}; netrek-client-cow-3.3.2/x11window.c0000664000175000017500000027202213657750470016063 0ustar jamesjames/* x11window.c * * Kevin P. Smith 6/11/89 Much modified by Jerry Frain and Joe Young * */ #define DEBUG 0 #include "config.h" #include #include #include #include #include #include INC_SYS_SELECT #include INC_STRINGS #include #include #include #include #include #include #include #include #include INC_SYS_TIMEB #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "teams.bitmap" #include "mapcursor.bitmap" #include "localcursor.bitmap" #include "smessage.h" #include "defaults.h" #include "x11window.h" #include "x11sprite.h" #include "camera.h" extern void terminate(int error); /* XFIX speedup */ #define MAXCACHE 128 #define MAX_TEXT_WIDTH 100 /* changes too good to risk leaving out, by Richard Caley (rjc@cstr.ed.ac.uk) */ /* Was #ifdef RJC, but now they're just part of the code */ #define FONT_SMALL "5x7" #define FONT_NORMAL "6x10" #define FONT_BOLD "-*-clean-bold-r-normal--10-100-75-75-c-60-*" #define FONT_ITALIC "-*-clean-bold-r-normal--10-100-75-75-c-60-*" #define FONT_INDEPENDENT "-*-clean-bold-r-normal--10-100-75-75-c-60-*" #define FONT_BIG "-*-lucidatypewriter-*-*-*-*-40-*-*-*-*-*-*-*" int forceMono = 0; #ifdef BEEPLITE #define TTS_FONT "10x20" extern void init_tts(void); #endif #define G_SET_WIDTH 0x1 #define G_SET_HEIGHT 0x2 #define G_SET_X 0x4 #define G_SET_Y 0x8 static char *_nfonts[] = { FONT_NORMAL, "-*-clean-medium-r-normal--10-100-75-75-c-60-*", "fixed", NULL, }; static char *_bfonts[] = { FONT_BOLD, "-*-clean-bold-r-normal--10-100-75-75-c-60-*", "fixed", NULL, }; static char *_ifonts[] = { FONT_ITALIC, "-*-clean-bold-r-normal--10-100-75-75-c-60-*", "fixed", NULL, }; static char *_bgfonts[] = { FONT_BIG, "fixed", "fixed", NULL, }; XFontStruct *find_font(char *oldf, char **fonts); #define FONTS 4 #define BITGC 4 #define WHITE 0 #define BLACK 1 #define RED 2 #define GREEN 3 #define YELLOW 4 #define CYAN 5 #define GREY 6 #ifdef RACE_COLORS #define C_ROM 7 #define C_KLI 8 #define C_FED 9 #define C_ORI 10 #define C_IND 11 #endif #ifdef RACE_COLORS #define COLORS 16 #define PLANES 4 #else #define COLORS 8 #define PLANES 3 #endif #define RaceDefaultOffset (C_ROM - RED) extern int takeNearest; static int zero = 0; static int one = 1; static int two = 2; static int three = 3; int W_FastClear = 0; Window W_Root; Colormap W_Colormap; int W_Screen; Visual *W_Visual; W_Font W_BigFont = (W_Font) & zero, W_RegularFont = (W_Font) & one; W_Font W_HighlightFont = (W_Font) & two, W_UnderlineFont = (W_Font) & three; Display *W_Display; W_Color W_White = WHITE, W_Black = BLACK, W_Red = RED, W_Green = GREEN; W_Color W_Yellow = YELLOW, W_Cyan = CYAN, W_Grey = GREY; #ifdef RACE_COLORS W_Color W_Ind = C_IND, W_Fed = C_FED, W_Rom = C_ROM, W_Kli = C_KLI, W_Ori = C_ORI; #endif int W_BigTextwidth, W_BigTextheight, W_Textwidth, W_Textheight; char *getdefault(char *str); int W_in_message = 0; /* jfy -- for Jerry's warp * * * * * message hack */ /* TTS: moved this out so we can use the 8th color */ static unsigned long planes[PLANES]; /* Scrollable message windows */ #define SCROLL_THUMB_WIDTH 5 static int scrollbar = 1; static int scroll_thumb_width = SCROLL_THUMB_WIDTH; static GC scroll_thumb_gc; static Pixmap scroll_thumb_pixmap; static int scroll_lines = 100; /* save 100 lines */ Atom wm_protocols, wm_delete_window; extern W_Window baseWin; static XClassHint class_hint = { "netrek", "Netrek", }; static XWMHints wm_hint = { InputHint | StateHint, True, NormalState, None, None, 0, 0, None, None, }; #ifdef WINDOWMAKER char **wm_argv; int wm_argc; #endif static W_Event W_myevent; static int W_isEvent = 0; /* an event is being held here for the caller */ struct fontInfo { int baseline; }; struct colors { char *name; GC contexts[FONTS + 1]; GC insens_contexts[FONTS + 1]; Pixmap pixmap; int pixelValue; }; Pixmap insens_tile; struct icon { Window window; Pixmap bitmap; int width, height; Pixmap pixmap; }; #define WIN_GRAPH 1 #define WIN_TEXT 2 #define WIN_MENU 3 #define WIN_SCROLL 4 static void changeMenuItem(struct window *win, int col, int n, char *str, W_Color color); static void scrollUp(struct window *win, int y); static void scrollDown(struct window *win, int y); static void scrollPosition(struct window *win, int y); static void scrollTo(struct window *win, struct scrollingWindow *sw, int topline); static void scrollScrolling(W_Event * wevent); static void configureScrolling(struct window *win, int x, int y, int width, int height); static void AddToScrolling(struct window *win, W_Color color, W_Font font, char *str, int len); static void drawThumb(struct window *win, struct scrollingWindow *sw); static void redrawScrolling(struct window *win); static int checkGeometry(char *name, int *x, int *y, int *width, int *height); struct stringList { char string[MAX_TEXT_WIDTH]; W_Color color; W_Font font; struct stringList *next, *prev; }; struct menuItem { int column; char *string; W_Color color; }; struct colors colortable[] = { {"white"}, {"black"}, {"red"}, {"green"}, {"yellow"}, {"cyan"}, {"dark grey"} #ifdef RACE_COLORS , {"Rom"}, {"Kli"}, {"Fed"}, {"Ori"}, {"Ind"} #endif }; struct windowlist { struct window *window; struct windowlist *next; }; #define HASHSIZE 101 #define hash(x) (((int) (x)) % HASHSIZE) struct windowlist *hashtable[HASHSIZE]; struct fontInfo fonts[FONTS]; struct window *newWindow(Window window, int type); struct window *findWindow(Window window); /* char *malloc (size_t); */ short *x11tox10bits(); struct window myroot; #define NCOLORS (sizeof(colortable)/sizeof(colortable[0])) #define W_Void2Window(win) ((win) ? ((struct window *) (win)) : (&myroot)) #define W_Window2Void(window) ((W_Window) (window)) #define W_Void2Icon(bit) ((struct icon *) (bit)) #define W_Icon2Void(bit) ((W_Icon) (bit)) #define fontNum(font) (*((int *) font)) #define TILESIDE 16 #define WIN_EDGE 5 /* border on l/r edges of * * * text windows */ #define MENU_PAD 6 /* border on t/b edges of * * * text windows */ #define MENU_BAR 1 /* width of menu bar */ static char gray[] = { 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55 }; static char striped[] = { 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0 }; static char solid[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; int full_screen_default, full_screen_enabled; #ifdef FULLSCREEN static void video_mode_off(void); static int video_mode_initialise(void); static void video_mode_on(void); static void view_port_warp(W_Window window); static void pointer_grab_on(W_Window window); static void pointer_grab_off(W_Window window); static void kde_fullscreen_on(W_Window window); static void kde_fullscreen_off(W_Window window); #endif /* X debugging */ int _myerror(Display * d, XErrorEvent * e) { fprintf(stderr, "netrek: x11window: _myerror\n"); abort(); } void pastebuffer(void) { int nbytes, x; char *buff, c; buff = XFetchBuffer(W_Display, &nbytes, 0); for (x = 0; x < nbytes; x++) { c = buff[x]; smessage(c); } } static long WMXYHintMode_default(void) { static int fetched = 0; static long WMXYHM_default; char *hm_default_string; if (!fetched) { hm_default_string = getdefault("WMXYHintMode"); if (!hm_default_string || strcmp(hm_default_string, "USPosition") == 0) WMXYHM_default = USPosition; else WMXYHM_default = PPosition; fetched = 1; } return WMXYHM_default; } void W_Initialize(char *str) { int i; #if DEBUG > 0 printf("Initializing...\n"); #endif for (i = 0; i < HASHSIZE; i++) { hashtable[i] = NULL; } if ((W_Display = XOpenDisplay(str)) == NULL) { fprintf(stderr, "I can't open your display, twink!\n"); terminate(1); } /* prevent X socket from being copied to forked exec'd process */ if (fcntl(ConnectionNumber(W_Display), F_SETFD, FD_CLOEXEC) < 0) { fprintf(stderr, "failed to set the X socket to close on exec(),\n" "fcntl F_SETFD FD_CLOEXEC failure,\n'%s'", strerror(errno)); } // uncomment this to synchronise display for testing // XSynchronize(W_Display, True); // uncomment this to enable a fatal error handler // XSetErrorHandler(_myerror); wm_protocols = XInternAtom(W_Display, "WM_PROTOCOLS", False); wm_delete_window = XInternAtom(W_Display, "WM_DELETE_WINDOW", False); W_Root = DefaultRootWindow(W_Display); W_Visual = DefaultVisual(W_Display, DefaultScreen(W_Display)); W_Screen = DefaultScreen(W_Display); W_Colormap = DefaultColormap(W_Display, W_Screen); myroot.window = W_Root; myroot.type = WIN_GRAPH; GetFonts(); GetColors(); /* display scroll thumb */ scrollbar = booleanDefault("ScrollBar", scrollbar); scroll_lines = intDefault("ScrollSaveLines", scroll_lines); scroll_thumb_width = intDefault("ScrollBarWidth", scroll_thumb_width); #ifdef BEEPLITE init_tts(); #endif } void W_GetPixmaps(W_Window t, W_Window g) { GetPixmaps(W_Display, &myroot, t, g); } /* Make sure the font will work, ie: that it fits in the 6x10 character cell * that we expect. */ void checkFont(XFontStruct * fontinfo, char *fontname) { if (small_screen) return; if (fontinfo->max_bounds.width != 6 || fontinfo->min_bounds.width != 6 || fontinfo->descent + fontinfo->ascent != 10 || fontinfo->min_bounds.lbearing < 0 || fontinfo->max_bounds.rbearing > 6 || fontinfo->max_bounds.ascent > 8 || fontinfo->max_bounds.descent > 2) { fprintf(stderr, "Warning: font '%s'\ndoes not conform to 6x10 character cell rules.\n", fontname); } } void GetFonts(void) { Font regular, italic, bold, big; int i; XGCValues values; XFontStruct *fontinfo; char *fontname; int black, white; fontname = getdefault("font"); if (fontname == NULL) fontname = small_screen ? FONT_SMALL : FONT_NORMAL; fontinfo = XLoadQueryFont(W_Display, fontname); if (fontinfo == NULL) { fontinfo = find_font(fontname, _nfonts); } if (fontinfo == NULL) { printf("netrek: Can't find any fonts!\n"); terminate(1); } checkFont(fontinfo, fontname); regular = fontinfo->fid; W_Textwidth = fontinfo->max_bounds.width; W_Textheight = fontinfo->max_bounds.descent + fontinfo->max_bounds.ascent; fonts[1].baseline = fontinfo->max_bounds.ascent; fontname = getdefault("boldfont"); if (fontname == NULL) fontname = small_screen ? FONT_SMALL : FONT_BOLD; fontinfo = XLoadQueryFont(W_Display, fontname); if (fontinfo == NULL) { fontinfo = find_font(fontname, _bfonts); } if (fontinfo == NULL) { bold = regular; fonts[2].baseline = fonts[1].baseline; } else { checkFont(fontinfo, fontname); bold = fontinfo->fid; fonts[2].baseline = fontinfo->max_bounds.ascent; if (fontinfo->max_bounds.width > W_Textwidth) W_Textwidth = fontinfo->max_bounds.width; if (fontinfo->max_bounds.descent + fontinfo->max_bounds.ascent > W_Textheight) W_Textheight = fontinfo->max_bounds.descent + fontinfo->max_bounds.ascent; } fontname = getdefault("italicfont"); if (fontname == NULL) fontname = small_screen ? FONT_SMALL : FONT_ITALIC; fontinfo = XLoadQueryFont(W_Display, fontname); if (fontinfo == NULL) { fontinfo = find_font(fontname, _ifonts); } if (fontinfo == NULL) { italic = regular; fonts[3].baseline = fonts[1].baseline; } else { checkFont(fontinfo, fontname); italic = fontinfo->fid; fonts[3].baseline = fontinfo->max_bounds.ascent; if (fontinfo->max_bounds.width > W_Textwidth) W_Textwidth = fontinfo->max_bounds.width; if (fontinfo->max_bounds.descent + fontinfo->max_bounds.ascent > W_Textheight) W_Textheight = fontinfo->max_bounds.descent + fontinfo->max_bounds.ascent; } fontname = getdefault("bigfont"); if (fontname == NULL) fontname = small_screen ? FONT_SMALL : FONT_BIG; fontinfo = XLoadQueryFont(W_Display, fontname); if (fontinfo == NULL) { fontinfo = find_font(fontname, _bgfonts); } if (fontinfo == NULL) { big = regular; fonts[0].baseline = fonts[1].baseline; W_BigTextwidth = W_Textwidth; W_BigTextheight = W_Textheight; } else { big = fontinfo->fid; fonts[0].baseline = fontinfo->max_bounds.ascent; W_BigTextwidth = fontinfo->max_bounds.width; W_BigTextheight = fontinfo->max_bounds.descent + fontinfo->max_bounds.ascent; } white = WhitePixel(W_Display, W_Screen); black = BlackPixel(W_Display, W_Screen); insens_tile = XCreatePixmapFromBitmapData(W_Display, W_Root, gray, TILESIDE, TILESIDE, black, white, DefaultDepth(W_Display, W_Screen)); for (i = 0; i < NCOLORS; i++) { values.font = big; colortable[i].contexts[0] = XCreateGC(W_Display, W_Root, GCFont, &values); XSetGraphicsExposures(W_Display, colortable[i].contexts[0], False); values.font = regular; colortable[i].contexts[1] = XCreateGC(W_Display, W_Root, GCFont, &values); XSetGraphicsExposures(W_Display, colortable[i].contexts[1], False); values.fill_style = FillTiled; values.tile = insens_tile; colortable[i].insens_contexts[1] = XCreateGC(W_Display, W_Root, GCFont | GCFillStyle | GCTile, &values); XSetGraphicsExposures(W_Display, colortable[i].insens_contexts[1], False); values.font = bold; colortable[i].contexts[2] = XCreateGC(W_Display, W_Root, GCFont, &values); XSetGraphicsExposures(W_Display, colortable[i].contexts[2], False); values.font = italic; colortable[i].contexts[3] = XCreateGC(W_Display, W_Root, GCFont, &values); XSetGraphicsExposures(W_Display, colortable[i].contexts[3], False); { char dl[] = {1, 8}; XSetLineAttributes(W_Display, colortable[i].contexts[3], 0, LineOnOffDash, CapButt, JoinMiter); XSetDashes(W_Display, colortable[i].contexts[3], 0, dl, 2); } values.function = GXor; colortable[i].contexts[BITGC] = XCreateGC(W_Display, W_Root, GCFunction, &values); XSetGraphicsExposures(W_Display, colortable[i].contexts[BITGC], False); } } XFontStruct * find_font(char *oldf, char **fonts) { XFontStruct *fi; char **f; fprintf(stderr, "netrek: Can't find font %s. Trying others...\n", oldf); for (f = fonts; *f; f++) { if (strcmp(*f, oldf) != 0) { if ((fi = XLoadQueryFont(W_Display, *f))) return fi; } } return NULL; } static unsigned short extrared[COLORS] = {0x00, 0x20, 0x40, 0x60, 0x80, 0xa0, 0xb0, 0xc0}; static unsigned short extragreen[COLORS] = {0x40, 0x60, 0x80, 0xa0, 0xb0, 0xc0, 0x00, 0x20}; static unsigned short extrablue[COLORS] = {0x80, 0xa0, 0xb0, 0xc0, 0x00, 0x20, 0x40, 0x60}; void GetColors(void) { int i, j; XGCValues values; XColor foo; int white, black; unsigned long pixel; char defaultstring[100]; char *defaults; unsigned long extracolors[COLORS]; XColor colordef; forceMono = booleanDefault("forcemono", forceMono); /* 11/14/91 TC */ if ((DisplayCells(W_Display, W_Screen) <= 2) || forceMono) { white = WhitePixel(W_Display, W_Screen); black = BlackPixel(W_Display, W_Screen); for (i = 0; i < NCOLORS; i++) { if (i != W_Black) { colortable[i].pixelValue = white; } else { colortable[i].pixelValue = black; } if (i == W_Red) { colortable[i].pixmap = XCreatePixmapFromBitmapData(W_Display, W_Root, striped, TILESIDE, TILESIDE, white, black, DefaultDepth(W_Display, W_Screen)); } else if (i == W_Yellow) { colortable[i].pixmap = XCreatePixmapFromBitmapData(W_Display, W_Root, gray, TILESIDE, TILESIDE, white, black, DefaultDepth(W_Display, W_Screen)); } else { colortable[i].pixmap = XCreatePixmapFromBitmapData(W_Display, W_Root, solid, TILESIDE, TILESIDE, colortable[i].pixelValue, colortable[i].pixelValue, DefaultDepth(W_Display, W_Screen)); } /* We assume white is 0 or 1, and black is 0 or 1. We adjust * * * graphics function based upon who is who. */ if (white == 0) { /* Black is 1 */ XSetFunction(W_Display, colortable[i].contexts[BITGC], GXand); } } } else if (W_Visual->class == PseudoColor) { if (!XAllocColorCells(W_Display, W_Colormap, False, planes, PLANES, &pixel, 1) && !takeNearest) { /* couldn't allocate 3 planes, make a new colormap */ W_Colormap = XCreateColormap(W_Display, W_Root, W_Visual, AllocNone); if (!XAllocColorCells(W_Display, W_Colormap, False, planes, PLANES, &pixel, 1)) { fprintf(stderr, "Cannot create new colormap\n"); terminate(1); } /* and fill it with at least 8 more colors so when mouse is inside * * * netrek windows, use might be able to see his other windows */ if (XAllocColorCells(W_Display, W_Colormap, False, NULL, 0, extracolors, COLORS)) { colordef.flags = DoRed | DoGreen | DoBlue; for (i = 0; i < COLORS; i++) { colordef.pixel = extracolors[i]; colordef.red = extrared[i] << 8; colordef.green = extragreen[i] << 8; colordef.blue = extrablue[i] << 8; XStoreColor(W_Display, W_Colormap, &colordef); } } } for (i = 0; i < NCOLORS; i++) { sprintf(defaultstring, "color.%s", colortable[i].name); defaults = getdefault(defaultstring); if (defaults == NULL) { #ifdef RACE_COLORS if (i > GREY) { /* The default colour from the ROMS is the colour defined * * * * to be RED and not the colour which is actually RED. */ sprintf(defaultstring, "color.%s", colortable[i - RaceDefaultOffset].name); defaults = getdefault(defaultstring); if (defaults == NULL) defaults = colortable[i - RaceDefaultOffset].name; } else #endif defaults = colortable[i].name; } XParseColor(W_Display, W_Colormap, defaults, &foo); switch (i) { #ifndef RACE_COLORS case WHITE: foo.pixel = pixel | planes[0] | planes[1] | planes[2]; break; case BLACK: foo.pixel = pixel; break; case RED: foo.pixel = pixel | planes[0]; break; case CYAN: foo.pixel = pixel | planes[1]; break; case YELLOW: foo.pixel = pixel | planes[2]; break; case GREY: foo.pixel = pixel | planes[0] | planes[1]; break; case GREEN: foo.pixel = pixel | planes[1] | planes[2]; break; #else /* * Choose colors so that when two ships overlap, things look * ok. When players overlab, the bits are ORed together. */ /* Background color */ case BLACK: foo.pixel = pixel; break; /* Alert colors (sum to grey usually) */ case RED: foo.pixel = pixel | planes[1] | planes[2]; break; case CYAN: foo.pixel = pixel | planes[1] | planes[3]; break; case YELLOW: foo.pixel = pixel | planes[2] | planes[3]; break; case GREEN: foo.pixel = pixel | planes[1]; break; case GREY: foo.pixel = pixel | planes[1] | planes[2] | planes[3]; break; /* Your color */ case WHITE: foo.pixel = pixel | planes[0]; break; /* The color of other ships should dominate over your color * * * and should sum to C_IND where possible. */ case C_FED: foo.pixel = pixel | planes[0] | planes[1] | planes[2]; break; case C_ROM: foo.pixel = pixel | planes[0] | planes[1] | planes[3]; break; case C_KLI: foo.pixel = pixel | planes[0] | planes[2] | planes[3]; break; case C_ORI: foo.pixel = pixel | planes[0] | planes[1]; break; case C_IND: foo.pixel = pixel | planes[0] | planes[1] | planes[2] | planes[3]; break; #endif } if (takeNearest) XAllocColor(W_Display, W_Colormap, &foo); else XStoreColor(W_Display, W_Colormap, &foo); colortable[i].pixelValue = foo.pixel; colortable[i].pixmap = XCreatePixmapFromBitmapData(W_Display, W_Root, solid, TILESIDE, TILESIDE, foo.pixel, foo.pixel, DefaultDepth(W_Display, W_Screen)); } } else if (W_Visual->class >= TrueColor) { /* Stuff added by sheldon@iastate.edu 5/28/93 This is supposed to * * * detect a TrueColor display, and then do a lookup of the colors in * * * default colormap, instead of creating new colormap. */ for (i = 0; i < NCOLORS; i++) { sprintf(defaultstring, "color.%s", colortable[i].name); defaults = getdefault(defaultstring); if (defaults == NULL) { #ifdef RACE_COLORS if (i > GREY) { /* The default color from the ROMS is the color defined to * * * be RED and not the color which is actually RED. */ sprintf(defaultstring, "color.%s", colortable[i - RaceDefaultOffset].name); defaults = getdefault(defaultstring); if (defaults == NULL) defaults = colortable[i - RaceDefaultOffset].name; } else #endif defaults = colortable[i].name; } XParseColor(W_Display, W_Colormap, defaults, &foo); XAllocColor(W_Display, W_Colormap, &foo); colortable[i].pixelValue = foo.pixel; colortable[i].pixmap = XCreatePixmapFromBitmapData(W_Display, W_Root, solid, TILESIDE, TILESIDE, foo.pixel, foo.pixel, DefaultDepth(W_Display, W_Screen)); } } else { fprintf(stderr, "Don't know how to deal with a Class %d Visual\n", W_Visual->class); fprintf(stderr, "Your X server is not supported at %d bpp!\n", DefaultDepth(W_Display, W_Screen)); terminate(1); } for (i = 0; i < NCOLORS; i++) { for (j = 0; j < FONTS + 1; j++) { XSetForeground(W_Display, colortable[i].contexts[j], colortable[i].pixelValue); XSetBackground(W_Display, colortable[i].contexts[j], colortable[W_Black].pixelValue); } } if (scrollbar) { scroll_thumb_pixmap = XCreatePixmapFromBitmapData(W_Display, W_Root, gray, TILESIDE, TILESIDE, colortable[W_White].pixelValue, colortable[W_Black].pixelValue, DefaultDepth(W_Display, W_Screen)); values.fill_style = FillTiled; values.tile = scroll_thumb_pixmap; scroll_thumb_gc = XCreateGC(W_Display, W_Root, GCFillStyle | GCTile, &values); } } void W_RenameWindow(W_Window window, char *str) { struct window *win = W_Void2Window(window); XStoreName(W_Display, win->window, str); } W_Window W_MakeWindow(char *name, int x, int y, int width, int height, W_Window parent, int border, W_Color color) { struct window *newwin; Window wparent; XSetWindowAttributes attrs; char *window_title = "Netrek", title_buff[257]; XSizeHints *sz_hints; int gcheck_result; #if DEBUG > 0 printf("New window...\n"); #endif gcheck_result = checkGeometry(name, &x, &y, &width, &height); checkParent(name, &parent); wparent = W_Void2Window(parent)->window; attrs.border_pixel = colortable[color].pixelValue; attrs.event_mask = KeyPressMask | ButtonPressMask | ExposureMask | LeaveWindowMask; #ifdef AUTOKEY attrs.event_mask |= KeyReleaseMask; #endif /* AUTOKEY */ #ifdef MOTION_MOUSE attrs.event_mask |= ButtonMotionMask; #endif if (strcmp(name, "netrek_icon") == 0) /* icon should not select * * for input */ attrs.event_mask = ExposureMask; attrs.background_pixel = colortable[W_Black].pixelValue; attrs.do_not_propagate_mask = KeyPressMask | ButtonPressMask | ExposureMask; newwin = newWindow( XCreateWindow(W_Display, wparent, x, y, width, height, border, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel | CWEventMask | CWBorderPixel, &attrs), WIN_GRAPH); if (!strcmp(name, "netrek")) { if (full_screen_enabled) { #ifdef FULLSCREEN kde_fullscreen_on(W_Window2Void(newwin)); #endif } } /* top window */ sz_hints = XAllocSizeHints(); if (strcmp(name, "netrek") == 0 || strcmp(name, "wait") == 0 || strcmp(name, "waitmotd") == 0) { if (!title && serverName) { if (strcmp(name, "wait") == 0) strcpy(title_buff, serverName); else if (strcmp(name, "waitmotd") == 0) strcpy(title_buff, "Motd-[f]forward, [b]back, [space]unmap"); else sprintf(title_buff, "Netrek @ %s", serverName); window_title = title_buff; } else /* but title on command line will override */ if (title) window_title = title; sz_hints->min_width = width; sz_hints->max_width = width; sz_hints->min_height = height; sz_hints->max_height = height; sz_hints->flags = PMinSize | PMaxSize; if (!small_screen) /* avoid this check for small_screen; otherwise root window may not be aligned with upper-left corner of screen */ if (gcheck_result & G_SET_X || gcheck_result & G_SET_Y) sz_hints->flags |= WMXYHintMode_default(); } else { window_title = name; if (gcheck_result & G_SET_X || gcheck_result & G_SET_Y) sz_hints->flags |= WMXYHintMode_default(); } XStoreName(W_Display, newwin->window, window_title); XSetWMNormalHints(W_Display, newwin->window, sz_hints); class_hint.res_name = name; XSetClassHint(W_Display, newwin->window, &class_hint); XSetWMHints(W_Display, newwin->window, &wm_hint); newwin->name = strdup(name); newwin->width = width; newwin->height = height; if (wparent != W_Root) if (checkMapped(name)) W_MapWindow(W_Window2Void(newwin)); #if DEBUG > 0 printf("New graphics window %d, child of %d\n", newwin, parent); #endif XSetWindowColormap(W_Display, newwin->window, W_Colormap); return W_Window2Void(newwin); } void W_ChangeBorder(W_Window window, int color) { #if DEBUG > 2 printf("Changing border of %d\n", window); #endif /* fix inexplicable color bug */ if ((DisplayCells(W_Display, W_Screen) <= 2) || forceMono) XSetWindowBorderPixmap(W_Display, W_Void2Window(window)->window, colortable[color].pixmap); else XSetWindowBorder(W_Display, W_Void2Window(window)->window, colortable[color].pixelValue); } void W_MapWindow(W_Window window) { struct window *win; #if DEBUG > 2 printf("Mapping %d\n", window); #endif win = W_Void2Window(window); if (win->mapped) return; win->mapped = 1; XMapRaised(W_Display, win->window); } void W_UnmapWindow(W_Window window) { struct window *win; #if DEBUG > 2 printf("UnMapping %d\n", window); #endif win = W_Void2Window(window); if (win->mapped == 0) return; win->mapped = 0; XUnmapWindow(W_Display, win->window); } int W_IsMapped(W_Window window) { struct window *win; win = W_Void2Window(window); if (win == NULL) return 0; return win->mapped; } void W_FillArea(W_Window window, int x, int y, int width, int height, W_Color color) { struct window *win; #if DEBUG > 2 printf("Clearing (%d %d) x (%d %d) with %d on %d\n", x, y, width, height, color, window); #endif win = W_Void2Window(window); switch (win->type) { case WIN_GRAPH: XFillRectangle(W_Display, win->window, colortable[color].contexts[0], x, y, width, height); break; case WIN_SCROLL: XFillRectangle(W_Display, win->window, colortable[color].contexts[0], WIN_EDGE + x * W_Textwidth, MENU_PAD + y * W_Textheight, width * W_Textwidth, height * W_Textheight); break; default: XFillRectangle(W_Display, win->window, colortable[color].contexts[0], WIN_EDGE + x * W_Textwidth, MENU_PAD + y * W_Textheight, width * W_Textwidth, height * W_Textheight); } } /* XFIX */ static XRectangle _rcache[MAXCACHE]; static int _rcache_index; static void FlushClearAreaCache(Window win) { XFillRectangles(W_Display, win, colortable[backColor].contexts[0], _rcache, _rcache_index); _rcache_index = 0; } /* local window only */ void W_CacheClearArea(W_Window window, int x, int y, int width, int height) { Window win = W_Void2Window(window)->window; register XRectangle *r; if (_rcache_index == MAXCACHE) FlushClearAreaCache(win); r = &_rcache[_rcache_index++]; r->x = (short) x; r->y = (short) y; r->width = (unsigned short) width; r->height = (unsigned short) height; } void W_FlushClearAreaCache(W_Window window) { Window win = W_Void2Window(window)->window; if (_rcache_index) FlushClearAreaCache(win); } /* XFIX: clears now instead of filling. */ void W_ClearArea(W_Window window, int x, int y, int width, int height) { struct window *win; win = W_Void2Window(window); switch (win->type) { case WIN_GRAPH: /* XFIX: changed */ XClearArea(W_Display, win->window, x, y, width, height, False); break; case WIN_SCROLL: XClearArea(W_Display, win->window, WIN_EDGE + x * W_Textwidth, MENU_PAD + y * W_Textheight, width * W_Textwidth, height * W_Textheight, False); break; default: /* XFIX: changed */ XClearArea(W_Display, win->window, WIN_EDGE + x * W_Textwidth, MENU_PAD + y * W_Textheight, width * W_Textwidth, height * W_Textheight, False); break; } } void W_ClearWindow(W_Window window) { #if DEBUG > 2 printf("Clearing %d\n", window); #endif XClearWindow(W_Display, W_Void2Window(window)->window); } int W_Pending(void) { return XPending(W_Display); } int W_EventsPending(void) { if (W_isEvent) return 1; while (XPending(W_Display)) { if (W_SpNextEvent(&W_myevent)) { W_isEvent = 1; return 1; } } return 0; } void W_NextEvent(W_Event * wevent) { if (W_isEvent) { *wevent = W_myevent; W_isEvent = 0; return; } while (W_SpNextEvent(wevent) == 0); } static unsigned char sym_to_key(int sym) { switch (sym) { case XK_Up: return W_Key_Up; case XK_Down: return W_Key_Down; } return 0; } int W_SpNextEvent(W_Event * wevent) { XEvent event; XKeyEvent *key; XButtonEvent *button; XExposeEvent *expose; XConfigureEvent *configure; #ifdef MOTION_MOUSE XMotionEvent *motion; static int prev_x, prev_y; int thresh; #endif #ifdef CONTROL_KEY int control_key = 0; #endif unsigned char ch; int nch; struct window *win; KeySym sym; #if DEBUG > 1 printf("event"); #endif key = (XKeyEvent *) & event; button = (XButtonEvent *) & event; expose = (XExposeEvent *) & event; configure = (XConfigureEvent *) & event; #ifdef MOTION_MOUSE motion = (XMotionEvent *) & event; #endif for (;;) { XNextEvent(W_Display, &event); #if DEBUG > 1 printf(", read type=%d\n", event.type); #endif win = findWindow(key->window); if (win == NULL) return 0; if (key->send_event == True && event.type != ClientMessage) return 0; /* event sent by another client */ if ((event.type == KeyPress || event.type == ButtonPress) && win->type == WIN_MENU) { if (key->y % (W_Textheight + MENU_PAD * 2 + MENU_BAR) >= W_Textheight + MENU_PAD * 2) return 0; key->y = key->y / (W_Textheight + MENU_PAD * 2 + MENU_BAR); } switch ((int) event.type) { case ClientMessage: if (event.xclient.message_type == wm_protocols && event.xclient.data.l[0] == wm_delete_window) { W_UnmapWindow(W_Window2Void(win)); wevent->type = W_EV_CLOSED; wevent->Window = W_Window2Void(win); wevent->key = wevent->x = wevent->y = 0; return 1; } break; case LeaveNotify: /* for message window -- jfy */ if (win == (struct window *) messagew) { W_in_message = 0; } return 0; break; case KeyPress: if ((key->state & LockMask) && !(key->state & ShiftMask) && (ignoreCaps)) { printf("Got a capslock!\n"); key->state = key->state & ~LockMask; } #ifdef CONTROL_KEY if (key->state & ControlMask && use_control_key) { control_key = 1; key->state = key->state & ~ControlMask; } else control_key = 0; #endif nch = XLookupString(key, (char *) &ch, 1, &sym, NULL); if (nch == 0) { ch = sym_to_key(sym); if (ch == 0) return 0; } #ifdef MOUSE_AS_SHIFT if (mouse_as_shift) { if (key->state & Button1Mask) { wevent->modifier = W_LBUTTON; wevent->type = W_EV_MKEY; } else if (key->state & Button2Mask) { wevent->modifier = W_MBUTTON; wevent->type = W_EV_MKEY; } else if (key->state & Button3Mask) { wevent->modifier = W_RBUTTON; wevent->type = W_EV_MKEY; } else { wevent->type = W_EV_KEY; } } else wevent->type = W_EV_KEY; #else wevent->type = W_EV_KEY; #endif wevent->Window = W_Window2Void(win); wevent->x = key->x; wevent->y = key->y; #ifdef CONTROL_KEY if (control_key) wevent->key = (unsigned char) (ch + 96); else wevent->key = ch; #else wevent->key = ch; #endif return 1; break; #ifdef AUTOKEY case KeyRelease: if (XLookupString(key, &ch, 1, NULL, NULL) > 0) { wevent->type = W_EV_KEY_OFF; wevent->Window = W_Window2Void(win); wevent->x = key->x; wevent->y = key->y; wevent->key = ch; return 1; } return 0; break; #endif /* AUTOKEY */ case ButtonPress: wevent->type = W_EV_BUTTON; wevent->Window = W_Window2Void(win); #ifdef MOTION_MOUSE prev_x = wevent->x = button->x; prev_y = wevent->y = button->y; #else wevent->x = button->x; wevent->y = button->y; #endif #ifdef MOUSE_AS_SHIFT if (mouse_as_shift && (wevent->Window == mapw || wevent->Window == w)) switch (button->button & 0xf) { case Button3: if (b3_as_shift) return 0; break; case Button1: if (b1_as_shift) return 0; break; case Button2: if (b2_as_shift) return 0; break; } #endif switch (button->button & 0xf) { case Button3: wevent->key = W_RBUTTON; break; case Button1: wevent->key = W_LBUTTON; break; case Button2: wevent->key = W_MBUTTON; break; #ifdef Button4 case Button4: wevent->key = W_WUBUTTON; break; #endif #ifdef Button5 case Button5: wevent->key = W_WDBUTTON; break; #endif #ifdef Button6 case Button6: wevent->key = W_X1BUTTON; break; #endif #ifdef Button7 case Button7: wevent->key = W_X2BUTTON; break; #endif } #ifdef SHIFTED_MOUSE if (extended_mouse) { if (button->state & (ControlMask | ShiftMask)) { if (button->state & ShiftMask) { wevent->key |= W_SHIFT_BUTTON; } if (button->state & ControlMask) { wevent->key |= W_CTRL_BUTTON; } return 1; } } #endif if (win->type == WIN_SCROLL) { scrollScrolling(wevent); return 0; } return 1; #ifdef MOTION_MOUSE case MotionNotify: if (!motion_mouse || (!motion_mouse_enablable && !motion_mouse_steering)) return 0; wevent->type = W_EV_CM_BUTTON; wevent->Window = W_Window2Void(win); thresh = abs(prev_x - motion->x) + abs(prev_y - motion->y); if (thresh < user_motion_thresh) return 0; prev_x = wevent->x = motion->x; prev_y = wevent->y = motion->y; #ifdef MOUSE_AS_SHIFT if (mouse_as_shift && (wevent->Window == mapw || wevent->Window == w)) switch (button->button & 0xf) { case Button3: if (b3_as_shift) return 0; break; case Button1: if (b1_as_shift) return 0; break; case Button2: if (b2_as_shift) return 0; break; } #endif switch (button->button & 0xf) { case Button3: wevent->key = W_RBUTTON; break; case Button1: wevent->key = W_LBUTTON; break; case Button2: wevent->key = W_MBUTTON; break; #ifdef Button4 case Button4: wevent->key = W_WUBUTTON; break; #endif #ifdef Button5 case Button5: wevent->key = W_WDBUTTON; break; #endif #ifdef Button6 case Button6: wevent->key = W_X1BUTTON; break; #endif #ifdef Button7 case Button7: wevent->key = W_X2BUTTON; break; #endif } #ifdef SHIFTED_MOUSE if (extended_mouse) { if (button->state & (ControlMask | ShiftMask)) { if (button->state & ShiftMask) { wevent->key |= W_SHIFT_BUTTON; } if (button->state & ControlMask) { wevent->key |= W_CTRL_BUTTON; } return 1; } } #endif return 1; #endif case Expose: if (expose->count != 0) return 0; if (win->type == WIN_SCROLL) { configureScrolling(win, expose->x, expose->y, expose->width, expose->height); redrawScrolling(win); return 0; } if (win->type == WIN_MENU) { redrawMenu(win); return 0; } wevent->type = W_EV_EXPOSE; wevent->Window = W_Window2Void(win); return 1; case ConfigureNotify: configureScrolling(win, configure->x, configure->y, configure->width, configure->height); break; default: return 0; break; } } } void W_MakeLine(W_Window window, int x0, int y0, int x1, int y1, W_Color color) { Window win; #if DEBUG > 3 printf("Line on %d\n", window); #endif win = W_Void2Window(window)->window; XDrawLine(W_Display, win, colortable[color].contexts[0], x0, y0, x1, y1); } /* XFIX */ static XSegment _lcache[NCOLORS][MAXCACHE]; static int _lcache_index[NCOLORS]; static void FlushLineCache(Window win, int color) { XDrawSegments(W_Display, win, colortable[color].contexts[0], _lcache[color], _lcache_index[color]); _lcache_index[color] = 0; } /* for local window only */ void W_CacheLine(W_Window window, int x0, int y0, int x1, int y1, int color) { Window win = W_Void2Window(window)->window; register XSegment *s; if (_lcache_index[color] == MAXCACHE) FlushLineCache(win, color); s = &_lcache[color][_lcache_index[color]++]; s->x1 = (short) x0; s->y1 = (short) y0; s->x2 = (short) x1; s->y2 = (short) y1; } void W_FlushLineCaches(W_Window window) { Window win = W_Void2Window(window)->window; int i; for (i = 0; i < NCOLORS; i++) { if (_lcache_index[i]) FlushLineCache(win, i); } } void W_MakeTractLine(W_Window window, int x0, int y0, int x1, int y1, W_Color color) { Window win; #if DEBUG > 3 printf("Line on %d\n", window); #endif win = W_Void2Window(window)->window; XDrawLine(W_Display, win, colortable[color].contexts[3], x0, y0, x1, y1); } void W_MakePhaserLine(W_Window window, int x0, int y0, int x1, int y1, W_Color color) { Window win; #if DEBUG > 3 printf("Line on %d\n", window); #endif win = W_Void2Window(window)->window; XDrawLine(W_Display, win, colortable[color].contexts[1], x0, y0, x1, y1); } void W_WriteCircle (W_Window window, int x, int y, int r, W_Color color) { struct window *win = W_Void2Window(window); XSetForeground(W_Display, colortable[color].contexts[0], colortable[color].pixelValue); XDrawArc(W_Display, win->window, colortable[color].contexts[0], x, y, r, r, 0, 23040); } void W_WriteTriangle(W_Window window, int x, int y, int s, int t, W_Color color) { struct window *win = W_Void2Window(window); XPoint points[4]; if (t == 0) { points[0].x = x; points[0].y = y; points[1].x = x + s; points[1].y = y - s; points[2].x = x - s; points[2].y = y - s; points[3].x = x; points[3].y = y; } else { points[0].x = x; points[0].y = y; points[1].x = x + s; points[1].y = y + s; points[2].x = x - s; points[2].y = y + s; points[3].x = x; points[3].y = y; } XDrawLines(W_Display, win->window, colortable[color].contexts[0], points, 4, CoordModeOrigin); } void W_WriteText(W_Window window, int x, int y, W_Color color, char *str, int len, W_Font font) { struct window *win; int addr; #if DEBUG > 3 printf("Text for %d @ (%d, %d) in %d: [%s]\n", window, x, y, color, str); #endif if (font == 0) font = W_RegularFont; win = W_Void2Window(window); switch (win->type) { case WIN_GRAPH: addr = fonts[fontNum(font)].baseline; if (len < 0) len = strlen(str); XDrawImageString(W_Display, win->window, #ifdef SHORT_PACKETS win->insensitive ? colortable[color].insens_contexts[1] : colortable[color].contexts[fontNum(font)], #else colortable[color].contexts[fontNum(font)], #endif x, y + addr, str, len); break; case WIN_SCROLL: XCopyArea(W_Display, win->window, win->window, colortable[W_White].contexts[0], WIN_EDGE, MENU_PAD + W_Textheight, win->width * W_Textwidth, (win->height - 1) * W_Textheight, WIN_EDGE, MENU_PAD); XClearArea(W_Display, win->window, WIN_EDGE, MENU_PAD + W_Textheight * (win->height - 1), W_Textwidth * win->width, W_Textheight, False); if (len < 0) len = strlen(str); XDrawImageString(W_Display, win->window, #ifdef SHORT_PACKETS win->insensitive ? colortable[color].insens_contexts[1] : colortable[color].contexts[fontNum(font)], #else colortable[color].contexts[fontNum(font)], #endif WIN_EDGE, MENU_PAD + W_Textheight * (win->height - 1) + fonts[fontNum(font)].baseline, str, len); AddToScrolling(win, color, font, str, len); break; case WIN_MENU: changeMenuItem(win, x, y, str, color); break; default: addr = fonts[fontNum(font)].baseline; if (len < 0) len = strlen(str); XDrawImageString(W_Display, win->window, #ifdef SHORT_PACKETS win->insensitive ? colortable[color].insens_contexts[1] : colortable[color].contexts[fontNum(font)], #else colortable[color].contexts[fontNum(font)], #endif x * W_Textwidth + WIN_EDGE, MENU_PAD + y * W_Textheight + addr, str, len); break; } } void W_MaskText(W_Window window, int x, int y, W_Color color, char *str, int len, W_Font font) { struct window *win; int addr; addr = fonts[fontNum(font)].baseline; #if DEBUG > 3 printf("TextMask for %d @ (%d, %d) in %d: [%s]\n", window, x, y, color, str); #endif win = W_Void2Window(window); XDrawString(W_Display, win->window, colortable[color].contexts[fontNum(font)], x, y + addr, str, len); } W_Icon W_StoreBitmap(int width, int height, char *data, W_Window window) { struct icon *newicon; struct window *win; #if DEBUG > 0 printf("Storing bitmap for %d (%d x %d)\n", window, width, height); fflush(stdout); #endif win = W_Void2Window(window); newicon = (struct icon *) malloc(sizeof(struct icon)); newicon->width = width; newicon->height = height; newicon->bitmap = XCreateBitmapFromData(W_Display, win->window, data, width, height); #ifdef nodef /* XFIX: changed to Pixmap */ white = WhitePixel(W_Display, W_Screen); black = BlackPixel(W_Display, W_Screen); newicon->bitmap = XCreatePixmapFromBitmapData(W_Display, W_Root, data, width, height, white, black, DefaultDepth(W_Display, W_Screen)); #endif /* nodef */ newicon->window = win->window; newicon->pixmap = 0; return W_Icon2Void(newicon); } void W_WriteBitmap(int x, int y, W_Icon bit, W_Color color) { struct icon *icon; icon = W_Void2Icon(bit); #if DEBUG > 4 printf("Writing bitmap to %d\n", icon->window); #endif XCopyPlane(W_Display, icon->bitmap, icon->window, colortable[color].contexts[BITGC], 0, 0, icon->width, icon->height, x, y, 1); #ifdef nodef /* XFIX : copyarea */ XCopyArea(W_Display, icon->bitmap, icon->window, colortable[color].contexts[BITGC], 0, 0, icon->width, icon->height, x, y); #endif } void W_TileWindow(W_Window window, W_Icon bit) { Window win; struct icon *icon; #if DEBUG > 4 printf("Tiling window %d\n", window); #endif icon = W_Void2Icon(bit); win = W_Void2Window(window)->window; if (icon->pixmap == 0) { icon->pixmap = XCreatePixmap(W_Display, W_Root, icon->width, icon->height, DefaultDepth(W_Display, W_Screen)); XCopyPlane(W_Display, icon->bitmap, icon->pixmap, colortable[W_White].contexts[0], 0, 0, icon->width, icon->height, 0, 0, 1); } XSetWindowBackgroundPixmap(W_Display, win, icon->pixmap); XClearWindow(W_Display, win); /* if (icon->pixmap==0) { icon->pixmap=XMakePixmap(icon->bitmap, * * * colortable[W_White].pixelValue, colortable[W_Black].pixelValue); } * * * XChangeBackground(win, icon->pixmap); XClear(win); */ } void W_UnTileWindow(W_Window window) { Window win; #if DEBUG > 4 printf("Untiling window %d\n", window); #endif win = W_Void2Window(window)->window; XSetWindowBackground(W_Display, win, colortable[W_Black].pixelValue); XClearWindow(W_Display, win); } W_Window W_MakeTextWindow(char *name, int x, int y, int width, int height, W_Window parent, int border) { struct window *newwin; Window wparent; XSetWindowAttributes attrs; XSizeHints *sz_hints; int gcheck_result; #if DEBUG > 0 printf("New window...\n"); #endif gcheck_result = checkGeometry(name, &x, &y, &width, &height); checkParent(name, &parent); attrs.border_pixel = colortable[W_White].pixelValue; attrs.event_mask = ExposureMask; #ifdef AUTOKEY attrs.event_mask |= KeyReleaseMask; #endif /* AUTOKEY */ #ifdef SHORT_PACKETS attrs.event_mask |= ButtonPressMask; #endif attrs.background_pixel = colortable[W_Black].pixelValue; attrs.do_not_propagate_mask = ExposureMask; wparent = W_Void2Window(parent)->window; newwin = newWindow( XCreateWindow(W_Display, wparent, x, y, width * W_Textwidth + WIN_EDGE * 2, MENU_PAD * 2 + height * W_Textheight, border, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel | CWEventMask | CWBorderPixel, &attrs), WIN_TEXT); class_hint.res_name = name; sz_hints = XAllocSizeHints(); sz_hints->min_width = WIN_EDGE * 2 + width * W_Textwidth; sz_hints->max_width = WIN_EDGE * 2 + width * W_Textwidth; sz_hints->base_width = WIN_EDGE * 2; sz_hints->width_inc = W_Textwidth; sz_hints->min_height = MENU_PAD * 2 + 3 * W_Textheight; sz_hints->max_height = MENU_PAD * 2 + height * W_Textheight; sz_hints->base_height = MENU_PAD * 2 + 2 * W_Textheight; sz_hints->height_inc = W_Textheight; sz_hints->flags = PResizeInc | PMinSize | PMaxSize | PBaseSize; if (gcheck_result & G_SET_X || gcheck_result & G_SET_Y) sz_hints->flags |= WMXYHintMode_default(); XStoreName(W_Display, newwin->window, name); XSetWMNormalHints(W_Display, newwin->window, sz_hints); XSetClassHint(W_Display, newwin->window, &class_hint); XSetWMHints(W_Display, newwin->window, &wm_hint); newwin->name = strdup(name); newwin->width = width; newwin->height = height; if (wparent != W_Root) if (checkMapped(name)) W_MapWindow(W_Window2Void(newwin)); #if DEBUG > 0 printf("New text window %d, child of %d\n", newwin, parent); #endif XSetWindowColormap(W_Display, newwin->window, W_Colormap); return W_Window2Void(newwin); } struct window * newWindow(Window window, int type) { struct window *newwin; XSetWMProtocols (W_Display, window, &wm_delete_window, 1); newwin = (struct window *) malloc(sizeof(struct window)); newwin->window = window; newwin->type = type; newwin->mapped = 0; newwin->handle_keydown = 0; newwin->handle_keyup = 0; newwin->handle_button = 0; newwin->handle_expose = 0; addToHash(newwin); #ifdef SHORT_PACKETS newwin->insensitive = 0; #endif newwin->cursor = (Cursor) 0; /* about the best I can do * * * * -jw */ return newwin; } struct window * findWindow(Window window) { struct windowlist *entry; entry = hashtable[hash(window)]; while (entry != NULL) { if (entry->window->window == window) return entry->window; entry = entry->next; } return NULL; } void addToHash(struct window * win) { struct windowlist **new; #if DEBUG > 0 printf("Adding to %d\n", hash(win->window)); #endif new = &hashtable[hash(win->window)]; while (*new != NULL) { new = &((*new)->next); } *new = (struct windowlist *) malloc(sizeof(struct windowlist)); (*new)->next = NULL; (*new)->window = win; } W_Window W_MakeScrollingWindow(name, x, y, width, height, parent, border) char *name; int x, y, width, height; W_Window parent; int border; { struct window *newwin; Window wparent; XSetWindowAttributes attrs; XSizeHints *sz_hints; int gcheck_result; struct scrollingWindow *sw; int scw = (scrollbar ? scroll_thumb_width : 0); #if DEBUG > 0 printf("New window...\n"); #endif gcheck_result = checkGeometry(name, &x, &y, &width, &height); checkParent(name, &parent); wparent = W_Void2Window(parent)->window; attrs.border_pixel = colortable[W_White].pixelValue; attrs.event_mask = StructureNotifyMask | ExposureMask | ButtonPressMask; #ifdef AUTOKEY attrs.event_mask |= KeyReleaseMask; #endif /* AUTOKEY */ attrs.background_pixel = colortable[W_Black].pixelValue; /* NOTE: CWDontPropagate seems to crash in OpenWindows */ attrs.do_not_propagate_mask = ResizeRedirectMask | ExposureMask; newwin = newWindow( XCreateWindow(W_Display, wparent, x, y, width * W_Textwidth + WIN_EDGE * 2 + scw, MENU_PAD * 2 + height * W_Textheight, border, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel | CWEventMask | CWBorderPixel /* | CWDontPropagate */ , &attrs), WIN_SCROLL); class_hint.res_name = name; sz_hints = XAllocSizeHints(); sz_hints->width_inc = W_Textwidth; sz_hints->height_inc = W_Textheight; sz_hints->min_width = WIN_EDGE * 2 + W_Textwidth + scw; sz_hints->min_height = MENU_PAD * 2 + W_Textheight; sz_hints->base_width = WIN_EDGE * 2 + scw; sz_hints->base_height = MENU_PAD * 2; sz_hints->flags = PResizeInc | PMinSize | PBaseSize; if (gcheck_result & XValue || gcheck_result & YValue) sz_hints->flags |= WMXYHintMode_default(); XStoreName(W_Display, newwin->window, name); XSetWMNormalHints(W_Display, newwin->window, sz_hints); XFree((void *) sz_hints); XSetClassHint(W_Display, newwin->window, &class_hint); XSetWMHints(W_Display, newwin->window, &wm_hint); newwin->name = strdup(name); sw = (struct scrollingWindow *) malloc(sizeof(struct scrollingWindow)); sw->lines = 0; sw->updated = 0; sw->head = sw->tail = sw->index = NULL; sw->topline = 0; newwin->data = (char *) sw; newwin->width = width; newwin->height = height; if (wparent != W_Root) if (checkMapped(name)) W_MapWindow(W_Window2Void(newwin)); #if DEBUG > 0 printf("New scroll window %d, child of %d\n", newwin, parent); #endif XSetWindowColormap(W_Display, newwin->window, W_Colormap); return W_Window2Void(newwin); } /* * Add a string to the string list of the scrolling window. */ static void AddToScrolling(win, color, font, str, len) struct window *win; W_Color color; W_Font font; char *str; int len; { struct scrollingWindow *sw; struct stringList *new; /* simple, fast */ sw = (struct scrollingWindow *) win->data; if (sw->lines > 0 && sw->lines > scroll_lines /* some large number */ ) { /* resuse tail */ new = sw->tail; sw->tail = new->prev; new->prev->next = NULL; new->prev = NULL; new->next = sw->head; sw->head->prev = new; sw->head = new; } else { new = (struct stringList *) malloc(sizeof(struct stringList)); new->next = sw->head; new->prev = NULL; if (sw->head) sw->head->prev = new; sw->head = new; if (!sw->tail) sw->tail = new; sw->lines++; /* * printf("adding one line \"%s\" C:%d F:%d.\n", str, color, * fontNum(font)); */ } sw->index = sw->head; /* input forces to end of * * list */ sw->topline = 0; sw->updated++; /* mark for * * W_FlushScrollingWindow */ STRNCPY(new->string, str, MAX_TEXT_WIDTH - 1); new->color = color; new->font = font; if (len >= MAX_TEXT_WIDTH) { new->string[MAX_TEXT_WIDTH - 1] = 0; } else { /* we pad out the string with spaces so we don't have to clear the * * window */ memset(&new->string[len], ' ', MAX_TEXT_WIDTH - len - 1); new->string[MAX_TEXT_WIDTH - 1] = 0; } } void W_FlushScrollingWindow(window) W_Window window; { struct window *win = W_Void2Window(window); struct scrollingWindow *sw; if (!win->mapped) return; if (win->type != WIN_SCROLL) { fprintf(stderr, "bad window type in W_FlushScrollingWindow.\n"); return; } sw = (struct scrollingWindow *) win->data; if (!sw->updated) return; #ifndef NO_COPYAREA else { struct stringList *item; int y; if (win->height > sw->updated) { XCopyArea(W_Display, win->window, win->window, colortable[W_White].contexts[0], WIN_EDGE, MENU_PAD + sw->updated * W_Textheight, win->width * W_Textwidth, (win->height - sw->updated) * W_Textheight, WIN_EDGE, MENU_PAD); } y = (win->height - 1) * W_Textheight + fonts[1].baseline; for (item = sw->index; item && y > 0 && sw->updated; item = item->next, y -= W_Textheight, sw->updated--) { XDrawImageString(W_Display, win->window, colortable[item->color].contexts[fontNum(item->font)], WIN_EDGE, MENU_PAD + y, item->string, win->width); } sw->updated = 0; if (scrollbar) drawThumb(win, sw); } #else redrawScrolling(win); #endif } static void drawThumb(win, sw) struct window *win; struct scrollingWindow *sw; { int x, y, h; int savedlines, maxrow, thumbTop, thumbHeight, totalHeight, winheight; /* * savedlines : Number of offscreen text lines, * sw->lines - win->height * * maxrow + 1 : Number of onscreen text lines, * * min(sw->lines + 1, win->height+1) * * sw->topline : -Number of lines above the last max_row+1 lines * * thumbTop = screen->topline + screen->savedlines; * thumbHeight = screen->max_row + 1; * totalHeight = thumbHeight + screen->savedlines; * * XawScrollbarSetThumb(scrollWidget, * ((float)thumbTop) / totalHeight, * ((float)thumbHeight) / totalHeight); */ savedlines = sw->lines - win->height; if (savedlines < 0) savedlines = 0; maxrow = sw->lines < win->height ? sw->lines : win->height; winheight = win->height * W_Textheight + MENU_PAD * 2; thumbTop = sw->topline + savedlines; thumbHeight = maxrow + 1; totalHeight = thumbHeight + savedlines; x = win->width * W_Textwidth + WIN_EDGE * 2; y = winheight * thumbTop / totalHeight; h = winheight * thumbHeight / totalHeight; XClearArea(W_Display, win->window, x, 0, scroll_thumb_width, winheight, False); XFillRectangle(W_Display, win->window, scroll_thumb_gc, x, y, scroll_thumb_width, h); XDrawLine(W_Display, win->window, colortable[W_Red].contexts[0], x, 0, x, winheight); } static void redrawScrolling(win) struct window *win; { int y; struct scrollingWindow *sw; register struct stringList *item; if (!win->mapped) return; /* simple, fast */ sw = (struct scrollingWindow *) win->data; if (!sw->lines) return; sw->updated = 0; y = (win->height - 1) * W_Textheight + fonts[1].baseline; for (item = sw->index; item && y > 0; item = item->next, y -= W_Textheight) { XDrawImageString(W_Display, win->window, colortable[item->color].contexts[fontNum(item->font)], WIN_EDGE, MENU_PAD + y, item->string, win->width); } if (scrollbar) drawThumb(win, sw); } #ifdef SHORT_PACKETS void W_SetSensitive(W_Window w, int v) { struct window *win = W_Void2Window(w); win->insensitive = !v; if (win->type == WIN_SCROLL) redrawScrolling(win); } #endif W_Window W_MakeMenu(char *name, int x, int y, int width, int height, W_Window parent, int border) { struct window *newwin; struct menuItem *items; Window wparent; int i; XSetWindowAttributes attrs; #if DEBUG > 0 printf("New window...\n"); #endif checkGeometry(name, &x, &y, &width, &height); checkParent(name, &parent); wparent = W_Void2Window(parent)->window; attrs.border_pixel = colortable[W_White].pixelValue; attrs.event_mask = KeyPressMask | ButtonPressMask | ExposureMask; #ifdef AUTOKEY attrs.event_mask |= KeyReleaseMask; #endif /* AUTOKEY */ attrs.background_pixel = colortable[W_Black].pixelValue; attrs.do_not_propagate_mask = KeyPressMask | ButtonPressMask | ExposureMask; newwin = newWindow( XCreateWindow(W_Display, wparent, x, y, width * W_Textwidth + WIN_EDGE * 2, height * (W_Textheight + MENU_PAD * 2) + (height - 1) * MENU_BAR, border, CopyFromParent, InputOutput, CopyFromParent, CWBackPixel | CWEventMask | CWBorderPixel, &attrs), WIN_MENU); class_hint.res_name = name; XSetClassHint(W_Display, newwin->window, &class_hint); XSetWMHints(W_Display, newwin->window, &wm_hint); XStoreName(W_Display, newwin->window, name); newwin->name = strdup(name); items = (struct menuItem *) malloc(height * sizeof(struct menuItem)); for (i = 0; i < height; i++) { /* new: allocate once and reuse -tsh */ items[i].column = 0; items[i].string = (char *) malloc(MAX_TEXT_WIDTH); items[i].color = W_White; } newwin->data = (char *) items; newwin->width = width; newwin->height = height; if (wparent != W_Root) if (checkMapped(name)) W_MapWindow(W_Window2Void(newwin)); #if DEBUG > 0 printf("New menu window %d, child of %d\n", newwin, parent); #endif XSetWindowColormap(W_Display, newwin->window, W_Colormap); return W_Window2Void(newwin); } void redrawMenu(struct window * win) { int count; for (count = 1; count < win->height; count++) { XFillRectangle(W_Display, win->window, colortable[W_Grey].contexts[0], 0, count * (W_Textheight + MENU_PAD * 2) + (count - 1) * MENU_BAR, win->width * W_Textwidth + WIN_EDGE * 2, MENU_BAR); } for (count = 0; count < win->height; count++) { redrawMenuItem(win, count); } } void redrawMenuItem(struct window *win, int n) { struct menuItem *items; items = (struct menuItem *) win->data; XFillRectangle(W_Display, win->window, colortable[W_Black].contexts[0], WIN_EDGE, n * (W_Textheight + MENU_PAD * 2 + MENU_BAR) + MENU_PAD, win->width * W_Textwidth, W_Textheight); if (items[n].string) { XDrawImageString(W_Display, win->window, colortable[items[n].color].contexts[1], WIN_EDGE + W_Textwidth * items[n].column, n * (W_Textheight + MENU_PAD * 2 + MENU_BAR) + MENU_PAD + fonts[1].baseline, items[n].string, strlen(items[n].string)); } } static void changeMenuItem(struct window *win, int col, int n, char *str, W_Color color) { struct menuItem *items; items = (struct menuItem *) win->data; STRNCPY(items[n].string, str, MAX_TEXT_WIDTH - 1); items[n].string[MAX_TEXT_WIDTH - 1] = 0; items[n].color = color; items[n].column = col; redrawMenuItem(win, n); } void W_DefineMapcursor(W_Window window) { Cursor new; Pixmap mapcursmaskbit; Pixmap mapcursbit; struct window *win = W_Void2Window(window); char *path; static XColor f, b; int w, h, xh, yh; xh = yh = 5; f.pixel = colortable[W_White].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); mapcursbit = XCreateBitmapFromData(W_Display, win->window, mapcursor_bits, mapcursor_width, mapcursor_height); if ((path = getdefault("mapCursorDef"))) { if (W_LoadBitmap(window, path, &mapcursmaskbit, &w, &h, &xh, &yh) != 1) { mapcursmaskbit = XCreateBitmapFromData(W_Display, win->window, mapmask_bits, mapmask_width, mapmask_height); xh = yh = 5; } else { mapcursbit = XCreatePixmap(W_Display, win->window, w, h, 1); XFillRectangle(W_Display, mapcursbit, colortable[W_White].contexts[0], 0, 0, w, h); } } else mapcursmaskbit = XCreateBitmapFromData(W_Display, win->window, mapmask_bits, mapmask_width, mapmask_height); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreatePixmapCursor(W_Display, mapcursbit, mapcursmaskbit, &b, &f, xh, yh); XRecolorCursor(W_Display, new, &b, &f); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineLocalcursor(W_Window window) { Cursor new; Pixmap localcursmaskbit; Pixmap localcursbit; struct window *win = W_Void2Window(window); char *path; static XColor f, b; int w, h, xh, yh; xh = yh = 5; f.pixel = colortable[W_White].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); localcursbit = XCreateBitmapFromData(W_Display, win->window, localcursor_bits, localcursor_width, localcursor_height); if ((path = getdefault("localCursorDef"))) { if (W_LoadBitmap(window, path, &localcursmaskbit, &w, &h, &xh, &yh) != 1) { localcursmaskbit = XCreateBitmapFromData(W_Display, win->window, localmask_bits, localmask_width, localmask_height); xh = yh = 5; } else { localcursbit = XCreatePixmap(W_Display, win->window, w, h, 1); XFillRectangle(W_Display, localcursbit, colortable[W_White].contexts[0], 0, 0, w, h); } } else localcursmaskbit = XCreateBitmapFromData(W_Display, win->window, localmask_bits, localmask_width, localmask_height); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreatePixmapCursor(W_Display, localcursbit, localcursmaskbit, &b, &f, xh, yh); XRecolorCursor(W_Display, new, &b, &f); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineFedCursor(W_Window window) { Cursor new; Pixmap fedcursmaskbit; Pixmap fedcursbit; struct window *win = W_Void2Window(window); static XColor f, b; f.pixel = colortable[W_White].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); fedcursbit = XCreateBitmapFromData(W_Display, win->window, fed_cruiser_bits, fed_cruiser_width, fed_cruiser_height); fedcursmaskbit = XCreateBitmapFromData(W_Display, win->window, fed_mask_bits, fed_mask_width, fed_mask_height); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreatePixmapCursor(W_Display, fedcursmaskbit, fedcursbit, &b, &f, 10, 10); XRecolorCursor(W_Display, new, &b, &f); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineRomCursor(W_Window window) { Cursor new; Pixmap romcursmaskbit; Pixmap romcursbit; struct window *win = W_Void2Window(window); static XColor f, b; f.pixel = colortable[W_White].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); romcursbit = XCreateBitmapFromData(W_Display, win->window, rom_cruiser_bits, rom_cruiser_width, rom_cruiser_height); romcursmaskbit = XCreateBitmapFromData(W_Display, win->window, rom_mask_bits, rom_cruiser_width, rom_cruiser_height); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreatePixmapCursor(W_Display, romcursmaskbit, romcursbit, &b, &f, 10, 10); XRecolorCursor(W_Display, new, &b, &f); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineKliCursor(W_Window window) { Cursor new; Pixmap klicursmaskbit; Pixmap klicursbit; struct window *win = W_Void2Window(window); static XColor f, b; f.pixel = colortable[W_White].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); klicursbit = XCreateBitmapFromData(W_Display, win->window, kli_cruiser_bits, kli_cruiser_width, kli_cruiser_height); klicursmaskbit = XCreateBitmapFromData(W_Display, win->window, fed_mask_bits, kli_cruiser_width, kli_cruiser_height); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreatePixmapCursor(W_Display, klicursmaskbit, klicursbit, &b, &f, 10, 10); XRecolorCursor(W_Display, new, &b, &f); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineOriCursor(W_Window window) { Cursor new; Pixmap oricursmaskbit; Pixmap oricursbit; struct window *win = W_Void2Window(window); static XColor f, b; f.pixel = colortable[W_White].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); oricursbit = XCreateBitmapFromData(W_Display, win->window, ori_cruiser_bits, ori_cruiser_width, ori_cruiser_height); oricursmaskbit = XCreateBitmapFromData(W_Display, win->window, fed_mask_bits, ori_cruiser_width, ori_cruiser_height); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreatePixmapCursor(W_Display, oricursmaskbit, oricursbit, &b, &f, 10, 10); XRecolorCursor(W_Display, new, &b, &f); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineTrekCursor(W_Window window) { Cursor new; struct window *win = W_Void2Window(window); XColor f, b; char *path; int w, h, xh, yh, mw, mh, mxh, myh; f.pixel = colortable[W_Yellow].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); if (win->cursor) XFreeCursor(W_Display, win->cursor); if ((path = getdefault("infoCursorDef"))) { Pixmap pm, mpm; if (W_LoadBitmap(window, path, &pm, &w, &h, &xh, &yh) != 1) new = XCreateFontCursor(W_Display, XC_trek); else { char mask_path[512]; strcpy(mask_path, path); strcat(mask_path, ".mask"); if (W_LoadBitmap(window, mask_path, &mpm, &mw, &mh, &mxh, &myh) != 1) { mw = w; mh = h; mpm = XCreatePixmap(W_Display, win->window, w, h, 1); XFillRectangle(W_Display, mpm, colortable[W_White].contexts[0], 0, 0, w, h); } if ((w != mw) || (h != mh)) { printf("Cursor and mask are not the same size. %s\n", path); new = XCreateFontCursor(W_Display, XC_trek); } else new = XCreatePixmapCursor(W_Display, pm, mpm, &b, &f, xh, yh); } } else new = XCreateFontCursor(W_Display, XC_trek); XRecolorCursor(W_Display, new, &f, &b); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineWarningCursor(W_Window window) { Cursor new; struct window *win = W_Void2Window(window); XColor f, b; f.pixel = colortable[W_Red].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); if (win->cursor) XFreeCursor(W_Display, win->cursor); new = XCreateFontCursor(W_Display, XC_pirate); XRecolorCursor(W_Display, new, &f, &b); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineArrowCursor(W_Window window) { Cursor new; struct window *win = W_Void2Window(window); XColor f, b; char *path; int w, h, xh, yh, mw, mh, mxh, myh; f.pixel = colortable[W_Black].pixelValue; b.pixel = colortable[W_White].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); if (win->cursor) XFreeCursor(W_Display, win->cursor); if ((path = getdefault("arrowCursorDef"))) { Pixmap pm, mpm; if (W_LoadBitmap(window, path, &pm, &w, &h, &xh, &yh) != 1) new = XCreateFontCursor(W_Display, XC_left_ptr); else { char mask_path[512]; strcpy(mask_path, path); strcat(mask_path, ".mask"); if (W_LoadBitmap(window, mask_path, &mpm, &mw, &mh, &mxh, &myh) != 1) { mw = w; mh = h; mpm = XCreatePixmap(W_Display, win->window, w, h, 1); XFillRectangle(W_Display, mpm, colortable[W_White].contexts[0], 0, 0, w, h); } if ((w != mw) || (h != mh)) { printf("Cursor and mask are not the same size. %s\n", path); new = XCreateFontCursor(W_Display, XC_left_ptr); } else new = XCreatePixmapCursor(W_Display, pm, mpm, &b, &f, xh, yh); } } else new = XCreateFontCursor(W_Display, XC_left_ptr); XRecolorCursor(W_Display, new, &f, &b); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineTextCursor(W_Window window) { Cursor new; struct window *win = W_Void2Window(window); XColor f, b; char *path; int w, h, xh, yh, mw, mh, mxh, myh; f.pixel = colortable[W_Yellow].pixelValue; b.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &f); XQueryColor(W_Display, W_Colormap, &b); if (win->cursor) XFreeCursor(W_Display, win->cursor); if ((path = getdefault("textCursorDef"))) { Pixmap pm, mpm; if (W_LoadBitmap(window, path, &pm, &w, &h, &xh, &yh) != 1) new = XCreateFontCursor(W_Display, XC_xterm); else { char mask_path[512]; strcpy(mask_path, path); strcat(mask_path, ".mask"); if (W_LoadBitmap(window, mask_path, &mpm, &mw, &mh, &mxh, &myh) != 1) { mw = w; mh = h; mpm = XCreatePixmap(W_Display, win->window, w, h, 1); XFillRectangle(W_Display, mpm, colortable[W_White].contexts[0], 0, 0, w, h); } if ((w != mw) || (h != mh)) { printf("Cursor and mask are not the same size. %s\n", path); new = XCreateFontCursor(W_Display, XC_xterm); } else new = XCreatePixmapCursor(W_Display, pm, mpm, &b, &f, xh, yh); } } else new = XCreateFontCursor(W_Display, XC_xterm); XRecolorCursor(W_Display, new, &f, &b); XDefineCursor(W_Display, win->window, new); win->cursor = new; } void W_DefineCursor(W_Window window, int width, int height, char *bits, char *mask, int xhot, int yhot) { static char *oldbits = NULL; static Cursor curs; Pixmap cursbits; Pixmap cursmask; struct window *win; XColor whiteCol, blackCol; #if DEBUG > 0 printf("Defining cursor for %d\n", window); #endif win = W_Void2Window(window); whiteCol.pixel = colortable[W_White].pixelValue; XQueryColor(W_Display, W_Colormap, &whiteCol); blackCol.pixel = colortable[W_Black].pixelValue; XQueryColor(W_Display, W_Colormap, &blackCol); if (!oldbits || oldbits != bits) { cursbits = XCreateBitmapFromData(W_Display, win->window, bits, width, height); cursmask = XCreateBitmapFromData(W_Display, win->window, mask, width, height); oldbits = bits; curs = XCreatePixmapCursor(W_Display, cursbits, cursmask, &whiteCol, &blackCol, xhot, yhot); XFreePixmap(W_Display, cursbits); XFreePixmap(W_Display, cursmask); } XDefineCursor(W_Display, win->window, curs); } int W_LoadBitmap(W_Window window, char *path, Pixmap * pixmap, int *width, int *height, int *x_hot, int *y_hot) { int status; struct window *win; win = W_Void2Window(window); status = XReadBitmapFile(W_Display, win->window, path, (unsigned int *) width, (unsigned int *) height, pixmap, x_hot, y_hot); if (status == BitmapSuccess) { if (*x_hot < 0) { *x_hot = *width / 2; *y_hot = *height / 2; } return 1; } else return 0; } void W_Beep(void) { XBell(W_Display, 0); } int W_WindowWidth(W_Window window) { return W_Void2Window(window)->width; } int W_WindowHeight(W_Window window) { return W_Void2Window(window)->height; } int W_Socket(void) { return ConnectionNumber(W_Display); } void W_DestroyWindow(W_Window window) { struct window *win; #if DEBUG > 0 printf("Destroying %d\n", window); #endif win = W_Void2Window(window); deleteWindow(win); XDestroyWindow(W_Display, win->window); free((char *) win); } void deleteWindow(struct window *window) { struct windowlist **rm; struct windowlist *temp; rm = &hashtable[hash(window->window)]; while (*rm != NULL && (*rm)->window != window) { rm = &((*rm)->next); } if (*rm == NULL) { printf("Attempt to delete non-existent window!\n"); return; } temp = *rm; *rm = temp->next; free((char *) temp); } void W_SetIconWindow(W_Window main, W_Window icon) { XWMHints hints; XSetIconName(W_Display, W_Void2Window(icon)->window, W_Void2Window(main)->name); hints.flags = IconWindowHint; hints.icon_window = W_Void2Window(icon)->window; #ifdef WINDOWMAKER hints.window_group = W_Void2Window(main)->window; hints.flags |= WindowGroupHint; XSetCommand(W_Display, W_Void2Window(main)->window, wm_argv, wm_argc); #endif XSetWMHints(W_Display, W_Void2Window(main)->window, &hints); } static void scrollUp(win, y) struct window *win; int y; { struct scrollingWindow *sw = (struct scrollingWindow *) win->data; int savedlines = sw->lines - win->height; if (savedlines < 0) savedlines = 0; if (sw->topline + savedlines > 0) { if (!sw->index) { fprintf(stderr, "scroll error, NULL index (scrollUp).\n"); return; } sw->index = sw->index->next; sw->topline--; redrawScrolling(win); } } static void scrollDown(win, y) struct window *win; int y; { struct scrollingWindow *sw = (struct scrollingWindow *) win->data; if (sw->topline < 0) { if (!sw->index) { fprintf(stderr, "scroll error, NULL index (scrollDown).\n"); return; } sw->index = sw->index->prev; sw->topline++; redrawScrolling(win); } } static void scrollPosition(win, y) struct window *win; int y; { struct scrollingWindow *sw = (struct scrollingWindow *) win->data; int savedlines, maxrow, winheight, newtop; savedlines = sw->lines - win->height; if (savedlines < 0) savedlines = 0; maxrow = sw->lines < win->height ? sw->lines : win->height; winheight = win->height * W_Textheight + MENU_PAD * 2; newtop = (y * (savedlines + maxrow + 1)) / winheight - savedlines; if (newtop < -savedlines) newtop = -savedlines; else if (newtop > 0) newtop = 0; scrollTo(win, sw, newtop); } static void scrollTo(win, sw, topline) struct window *win; struct scrollingWindow *sw; int topline; { while (topline < sw->topline) { if (!sw->index) { fprintf(stderr, "scroll error, NULL index (1).\n"); break; } sw->index = sw->index->next; sw->topline--; } while (topline > sw->topline) { if (!sw->index) { fprintf(stderr, "scroll error, NULL index (2).\n"); break; } sw->index = sw->index->prev; sw->topline++; } redrawScrolling(win); } static void scrollScrolling(wevent) W_Event *wevent; { switch (wevent->key) { case W_RBUTTON: case W_WUBUTTON: scrollUp(W_Void2Window(wevent->Window), wevent->y); break; case W_LBUTTON: case W_WDBUTTON: scrollDown(W_Void2Window(wevent->Window), wevent->y); break; case W_MBUTTON: scrollPosition(W_Void2Window(wevent->Window), wevent->y); break; default: break; } } static void configureScrolling(win, x, y, width, height) struct window *win; int x, y; /* TODO */ int width, height; { int new_text_width, new_text_height; int new_real_width, new_real_height; XWindowAttributes wa; int sw = scrollbar ? scroll_thumb_width : 0; #if 0 /* XXX: can't shrink window */ if (width <= win->width * W_Textwidth + WIN_EDGE * 2 && height <= win->height * W_Textheight + MENU_PAD * 2) return; #endif XGetWindowAttributes(W_Display, win->window, &wa); new_text_width = (wa.width - WIN_EDGE * 2 - sw) / W_Textwidth; new_text_height = (wa.height - MENU_PAD * 2) / W_Textheight; if (new_text_width <= 0) new_text_width = 1; if (new_text_height <= 0) new_text_height = 1; if (new_text_width >= MAX_TEXT_WIDTH) new_text_width = MAX_TEXT_WIDTH - 1; new_real_width = new_text_width * W_Textwidth + WIN_EDGE * 2 + sw; new_real_height = new_text_height * W_Textheight + MENU_PAD * 2; if (new_real_height != wa.height || new_real_width != wa.width) { XResizeWindow(W_Display, win->window, new_real_width, new_real_height); } win->width = new_text_width; win->height = new_text_height; /* an expose event will follow a resize request, triggering * * redrawScrolling */ } /*****************************************************************************/ /* Looks up any default geometry specified in the defaults file and */ /* returns the values found there. Geometry should be of the form */ /* [=][x][{+-}{+-}] */ /* */ /* The result returned indicates which values were set. */ /* XValue, YValue, WidthValue, HeightValue */ /* */ /*****************************************************************************/ static int checkGeometry(char *name, int *x, int *y, int *width, int *height) { char buf[80], *geom_default; sprintf(buf, "%s.geometry", name); geom_default = getdefault(buf); if (!geom_default) return 0; /* nothing set */ return XParseGeometry(geom_default, x, y, (unsigned int *) width, (unsigned int *) height); } void checkParent(char *name, W_Window * parent) { char *adefault; char buf[100]; int i; struct windowlist *windows; sprintf(buf, "%s.parent", name); adefault = getdefault(buf); if (adefault == NULL) return; /* parent must be name of other window or "root" */ if (strcmpi(adefault, "root") == 0) { *parent = W_Window2Void(&myroot); return; } for (i = 0; i < HASHSIZE; i++) { windows = hashtable[i]; while (windows != NULL) { if (strcmpi(adefault, windows->window->name) == 0) { *parent = W_Window2Void(windows->window); return; } windows = windows->next; } } } int checkMapped(char *name) { char buf[100]; sprintf(buf, "%s.mapped", name); return booleanDefault(buf, 0); } int checkMappedPref(char *name, int preferred) { char buf[100]; sprintf(buf, "%s.mapped", name); return booleanDefault(buf, preferred); } void W_WarpPointer(W_Window window, int x, int y) { static int warped_from_x = 0, warped_from_y = 0; if (window == NULL) { if (W_in_message) { XWarpPointer(W_Display, None, W_Root, 0, 0, 0, 0, warped_from_x, warped_from_y); W_in_message = 0; } } else { findMouse(&warped_from_x, &warped_from_y); XWarpPointer(W_Display, None, W_Void2Window(window)->window, 0, 0, 0, 0, 0, 0); W_in_message = 1; } } void findMouse(int *x, int *y) { Window theRoot, theChild; int wX, wY, rootX, rootY, status; unsigned int wButtons; status = XQueryPointer(W_Display, W_Root, &theRoot, &theChild, &rootX, &rootY, &wX, &wY, &wButtons); if (status == True) { *x = wX; *y = wY; } else { *x = 0; *y = 0; } } int findMouseInWin(int *x, int *y, W_Window w) { Window theRoot, theChild; int wX, wY, rootX, rootY, status; unsigned int wButtons; struct window *win = W_Void2Window(w); Window thisWin = win->window; status = XQueryPointer(W_Display, thisWin, &theRoot, &theChild, &rootX, &rootY, &wX, &wY, &wButtons); if (status == True) { /* if it's in the window we specified then the values returned should * * * * be within the with and height of the window */ if (wX <= win->width && wY <= win->height) { *x = wX; *y = wY; return 1; } } *x = 0; *y = 0; return 0; } void W_Flush(void) { XFlush(W_Display); } #define MAKE_WINDOW_GETTER(name, part) \ W_Callback name(W_Window w) \ { \ return W_Void2Window(w)->part; \ } #define MAKE_WINDOW_SETTER(name, part) \ void name(W_Window w, W_Callback c) \ { \ W_Void2Window(w)->part = c; \ } MAKE_WINDOW_GETTER(W_GetWindowKeyDownHandler, handle_keydown) MAKE_WINDOW_SETTER(W_SetWindowKeyDownHandler, handle_keydown) MAKE_WINDOW_GETTER(W_GetWindowKeyUpHandler, handle_keyup) MAKE_WINDOW_SETTER(W_SetWindowKeyUpHandler, handle_keyup) MAKE_WINDOW_GETTER(W_GetWindowButtonHandler, handle_button) MAKE_WINDOW_SETTER(W_SetWindowButtonHandler, handle_button) MAKE_WINDOW_GETTER(W_GetWindowExposeHandler, handle_expose) MAKE_WINDOW_SETTER(W_SetWindowExposeHandler, handle_expose) void W_ResizeWindow(W_Window window, int neww, int newh) /* TSH 2/93 */ { struct window *w = W_Void2Window(window); XSizeHints *sz_hints; sz_hints = XAllocSizeHints(); sz_hints->min_width = neww; sz_hints->max_width = neww; sz_hints->min_height = newh; sz_hints->max_height = newh; sz_hints->flags = PMinSize | PMaxSize; XSetWMNormalHints(W_Display, w->window, sz_hints); XResizeWindow(W_Display, w->window, neww, newh); } void W_ReinitMenu(W_Window window, int neww, int newh) { struct window *win = W_Void2Window(window); struct menuItem *items; int i; items = (struct menuItem *) win->data; for(i=0; i< win->height; i++){ free((char *) items[i].string); } free ((char *)items); items = (struct menuItem *) malloc(newh * sizeof(struct menuItem)); for(i=0; i< newh; i++){ items[i].column = 0; items[i].string = (char *) malloc(MAX_TEXT_WIDTH); items[i].color = W_White; } win->data = (char *) items; } /* this procedure should only be used if the menu is initially defined by W_MakeMenu as large as it will get. If menu may grow, call W_ReinitMenu first */ void W_ResizeMenu(W_Window window, int neww, int newh) /* TSH 2/93 */ { struct window *w = W_Void2Window(window); w->width = neww; w->height = newh; W_ResizeWindow(window, neww*W_Textwidth+WIN_EDGE*2, newh*(W_Textheight+MENU_PAD*2)+(newh-1)*MENU_BAR); } void W_ResizeTextWindow(W_Window window, int neww, int newh) /* TSH 2/93 */ { W_ResizeWindow(window, neww * W_Textwidth + WIN_EDGE * 2, newh * W_Textheight + WIN_EDGE * 2); } int W_Mono(void) { return (DisplayCells(W_Display, W_Screen) <= 2) || forceMono; } int W_EventsQueued(void) { return XEventsQueued(W_Display, QueuedAlready); } int W_EventsQueuedCk(void) { return XEventsQueued(W_Display, QueuedAfterReading); } int W_ReadEvents(void) { XEvent event; struct timeval timeout = {0, 0}; fd_set readfds; FD_ZERO(&readfds); FD_SET(ConnectionNumber(W_Display), &readfds); if (SELECT(max_fd, &readfds, 0, 0, &timeout) == 1) { XPeekEvent(W_Display, &event); return 1; } return 0; } void W_OverlayBitmap(int x, int y, W_Icon bit, W_Color color) { struct icon *icon = W_Void2Icon(bit); #if DEBUG > 4 printf("Overlaying bitmap to %d\n", icon->window); #endif XCopyPlane(W_Display, icon->bitmap, icon->window, colortable[color].contexts[0], 0, 0, icon->width, icon->height, x, y, 1); } void W_SetWindowName(W_Window w, char *name) { struct window *win = W_Void2Window(w); XStoreName(W_Display, win->window, name); return; } #ifdef BEEPLITE static GC _tts_gc; static XFontStruct *_tts_fontinfo; static int _tts_th, _tts_tw; int W_TTSTextHeight(void) { return _tts_th; } int W_TTSTextWidth(char *s, int l) { return XTextWidth(_tts_fontinfo, s, l); } void init_tts(void) { char *fontname; XGCValues values; char *color; XColor xc; fontname = getdefault("tts_font"); if (!fontname) fontname = TTS_FONT; #ifdef SHOW_DEFAULTS show_defaults("TTS", "tts_font", fontname, "TTS font."); #endif #ifdef nodef if (forceMono || DisplayCells(W_Display, W_Screen) <= 2) { /* this is not going to work at all for b/w */ tts_time = 0; F_beeplite_flags &= ~LITE_TTS; return; } #endif _tts_fontinfo = XLoadQueryFont(W_Display, fontname); if (!_tts_fontinfo) { fprintf(stderr, "netrek: Can't find font \"%s\".\n", fontname); _tts_fontinfo = XLoadQueryFont(W_Display, "fixed"); } if (!_tts_fontinfo) { fprintf(stderr, "netrek: Can't find any fonts.\n"); terminate(1); } _tts_th = _tts_fontinfo->max_bounds.descent + _tts_fontinfo->max_bounds.ascent; _tts_tw = _tts_fontinfo->max_bounds.width; values.font = _tts_fontinfo->fid; if (forceMono || DisplayCells(W_Display, W_Screen) <= 2) { values.foreground = colortable[W_White].pixelValue; values.function = GXor; } else { color = getdefault("tts_color"); if (!color) color = "grey"; #ifdef SHOW_DEFAULTS show_defaults("TTS", "tts_color", color, "TTS msg color."); #endif if (!XParseColor(W_Display, W_Colormap, color, &xc)) { fprintf(stderr, "netrek: Unknown tts_color \"%s\", using #777\n", color); (void) XParseColor(W_Display, W_Colormap, "#777", &xc); } /* using the 8th color allocated in GetColors() */ xc.pixel = colortable[W_Black].pixelValue | planes[0] | planes[2]; if ((takeNearest) || (W_Visual->class != PseudoColor)) XAllocColor(W_Display, W_Colormap, &xc); else XStoreColor(W_Display, W_Colormap, &xc); values.foreground = xc.pixel; values.function = GXor; } _tts_gc = XCreateGC(W_Display, W_Root, GCFont | GCForeground | GCFunction, &values); XSetGraphicsExposures(W_Display, _tts_gc, False); } void W_EraseTTSText(W_Window window, int max_width, int y, int width) { // struct window *win = W_Void2Window(window); int x = (max_width - width) / 2; if (x < 0) x = 4; y -= W_TTSTextHeight(); W_ClearArea(window, x, y, width, W_TTSTextHeight()); } void W_WriteTTSText(W_Window window, int max_width, int y, int width, char *str, int len) /* max_width of window */ /* y coordinate */ /* actual width */ /* string */ /* length of string */ { struct window *win = W_Void2Window(window); int x = (max_width - width) / 2; if (x < 0) x = 4; y -= _tts_fontinfo->max_bounds.descent; /* y -= W_TTSTextHeight(); y += _tts_fontinfo->max_bounds.ascent; */ XDrawString(W_Display, win->window, _tts_gc, x, y, str, len); } #endif void W_Halo(int x, int y, W_Color color) { struct window *win = W_Void2Window(mapw); if ((color != W_Ind) && (color != W_Grey)) { XSetForeground(W_Display, colortable[color].contexts[0], colortable[color].pixelValue); XDrawArc(W_Display, win->window, colortable[color].contexts[0], x - (mplanet_width / 2), y - (mplanet_width / 2), mplanet_width, mplanet_height, 0, 23040); } } void W_CameraSnap(W_Window window) { #ifdef CAMERA struct window *win = W_Void2Window(window); camera_snap(W_Display, win->window); #else fprintf(stderr, "W_CameraSnap: function not implemented in this build."); #endif } #ifdef FULLSCREEN /* XFree86 VidMode X extension handling */ #include XF86VidModeModeInfo **video_mode_list; XF86VidModeModeInfo *video_mode_current, *video_mode_original; int video_mode_dotclock, video_mode_list_size; /* restore video mode to known previous mode */ static void video_mode_off() { if (video_mode_current != video_mode_original) { XF86VidModeSwitchToMode(W_Display, W_Screen, video_mode_original); video_mode_current = video_mode_original; } } /* check if X server has support for changing modes */ static int video_mode_initialise() { int major, minor; if (!XF86VidModeQueryVersion(W_Display, &major, &minor)) { fprintf(stderr, "video_mode_initialise: XFree86-VidMode X extension absent\n"); return 0; } static int done = 0; if (done) return 1; done++; int line; XF86VidModeModeLine current; /* obtain the current mode line and list of known mode lines */ XF86VidModeGetModeLine(W_Display, W_Screen, &video_mode_dotclock, ¤t); XF86VidModeGetAllModeLines(W_Display, W_Screen, &video_mode_list_size, &video_mode_list); /* find the current mode within the list of known mode lines */ video_mode_current = NULL; for (line=0; line < video_mode_list_size; line++) { XF86VidModeModeInfo *mode = video_mode_list[line]; if (mode->hdisplay == current.hdisplay && mode->vdisplay == current.vdisplay && mode->dotclock == video_mode_dotclock && mode->htotal == current.htotal && mode->vtotal == current.vtotal && mode->flags == current.flags) { video_mode_original = video_mode_current = mode; } } /* do not change if the current mode was not found */ if (video_mode_current == NULL) { fprintf(stderr, "video_mode_begin: this mode not found, " "cannot switch back, so not switching\n"); return 0; } return 1; } static void video_mode_on() { int line; /* if there is a mode line for 1024x768 then use it */ for (line=0; line < video_mode_list_size; line++) { XF86VidModeModeInfo *mode = video_mode_list[line]; if (mode->hdisplay == (small_screen ? 800 : 1024) && mode->vdisplay == (small_screen ? 600 : 768)) { XF86VidModeSwitchToMode(W_Display, W_Screen, mode); /*! @bug: if this is done on a non-local display, the X error XF86VidModeClientNotLocal occurs. */ video_mode_current = mode; return; } } } static void view_port_warp(W_Window window) { struct window *win = W_Void2Window(window); /* force the video view port to cover the window */ int tx = 0, ty = 0; Window child; XTranslateCoordinates(W_Display, win->window, W_Root, 0, 0, &tx, &ty, &child); XF86VidModeSetViewPort(W_Display, W_Screen, tx, ty); XMapRaised(W_Display, win->window); XRaiseWindow(W_Display, win->window); } /* force the cursor to stay within the window */ static void pointer_grab_on(W_Window window) { struct window *win = W_Void2Window(window); XGrabPointer(W_Display, win->window, True, ButtonPressMask | ButtonReleaseMask | EnterWindowMask | LeaveWindowMask | PointerMotionMask | PointerMotionHintMask | Button1MotionMask | Button2MotionMask | Button3MotionMask | Button4MotionMask | Button5MotionMask | ButtonMotionMask | KeymapStateMask, GrabModeAsync, GrabModeAsync, win->window, None, CurrentTime); XGrabKeyboard(W_Display, win->window, True, GrabModeAsync, GrabModeAsync, CurrentTime); XFlush(W_Display); } static void pointer_grab_off(W_Window window) { XUngrabPointer(W_Display, CurrentTime); XUngrabKeyboard(W_Display, CurrentTime); } static void kde_fullscreen_on(W_Window window) { struct window *win = W_Void2Window(window); Atom WM_HINTS; WM_HINTS = XInternAtom(W_Display, "_NET_WM_STATE", True); if (WM_HINTS != None) { Atom p[1]; p[0] = XInternAtom(W_Display, "_NET_WM_STATE_FULLSCREEN", True); XChangeProperty(W_Display, win->window, WM_HINTS, XA_ATOM, 32, PropModeReplace, (unsigned char *)p, 1); } } static void kde_fullscreen_off(W_Window window) { struct window *win = W_Void2Window(window); Atom WM_HINTS; WM_HINTS = XInternAtom(W_Display, "_NET_WM_STATE", True); if (WM_HINTS != None) { XDeleteProperty(W_Display, win->window, WM_HINTS); } } #endif /* FULLSCREEN */ void W_FullScreenOn(W_Window window) { struct window *win = W_Void2Window(window); #ifdef FULLSCREEN #if DEBUG > 0 fprintf(stderr, "W_FullScreenOn\n"); #endif XResizeWindow(W_Display, win->window, small_screen ? 800 : 1024, small_screen ? 600 : 768); pointer_grab_on(window); video_mode_on(); view_port_warp(window); kde_fullscreen_on(window); #endif } void W_FullScreenOff(W_Window window) { #ifdef FULLSCREEN #if DEBUG > 0 fprintf(stderr, "W_FullScreenOff\n"); #endif pointer_grab_off(window); kde_fullscreen_off(window); video_mode_off(); #endif } void W_FullScreenInitialise() { #ifdef FULLSCREEN #if DEBUG > 0 fprintf(stderr, "W_FullScreenInitialise\n"); #endif full_screen_enabled = 0; full_screen_default = 0; if (booleanDefault("FullScreen", 0)) { full_screen_default++; if (video_mode_initialise()) full_screen_enabled++; } #endif } int W_FullScreenToggle(W_Window window) { #ifdef FULLSCREEN #if DEBUG > 0 fprintf(stderr, "W_FullScreenToggle\n"); #endif if (full_screen_enabled) { full_screen_enabled = 0; W_FullScreenOff(window); } else { if (!full_screen_default) { if (!video_mode_initialise()) { return FULLSCREEN_FAILED; } } full_screen_enabled++; W_FullScreenOn(window); } return FULLSCREEN_OK; #else return FULLSCREEN_NOT_COMPILED; #endif } void W_FullScreenBegin(W_Window window) { #ifdef FULLSCREEN #if DEBUG > 0 fprintf(stderr, "W_FullScreenBegin\n"); #endif if (full_screen_enabled) { W_FullScreenOn(window); } #endif } /* regularly enforce */ void W_FullScreen(W_Window window) { #ifdef FULLSCREEN if (full_screen_enabled) { view_port_warp(window); pointer_grab_on(window); } #endif } netrek-client-cow-3.3.2/dmessage.c0000664000175000017500000001465413657750470016017 0ustar jamesjames/* dmessage.c * * for the client of a socket based protocol. * */ #include "config.h" #include "copyright.h" #include #include #include #include INC_SYS_TIME #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "version.h" #include "patchlevel.h" #include "beeplite.h" #include "censor.h" #include "distress.h" #include "smessage.h" #include "dmessage.h" extern char cowid[]; static int version_sent = 0; static int instr(char *string1, char *string2); void dmessage(char *message, unsigned char flags, unsigned char from, unsigned char to) { register int len; W_Color color; char timebuf[10]; time_t curtime; struct tm *tm; int take, destroy, team, kill, killp, killa, bomb, conq; struct distress dist; take = MTEAM + MTAKE + MVALID; destroy = MTEAM + MDEST + MVALID; kill = MALL + MKILL + MVALID; killp = MALL + MKILLP + MVALID; killa = MALL + MKILLA + MVALID; bomb = MTEAM + MBOMB + MVALID; team = MTEAM + MVALID; conq = MALL + MCONQ + MVALID; time(&curtime); tm = localtime(&curtime); sprintf(timebuf, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); len = strlen(message); if (from == 255) { /* From God */ color = textColor; } else { color = playerColor(&(players[from])); } if (censorMessages) if ((flags != kill) && (flags != killp) && (flags != killa) && (flags != bomb) && (flags != take) && (flags != destroy)) censor(message); /* aha! A new type distress/macro call came in. parse it appropriately */ if (flags == (MTEAM | MDISTR | MVALID)) { HandleGenDistr(message, from, to, &dist); len = makedistress(&dist, message, distmacro[dist.distype].macro); #ifdef BEEPLITE if (UseLite) rcdlite(&dist); #endif if (len <= 0) return; flags ^= MDISTR; } if (niftyNewMessages) { if (logmess) { if (logFile != NULL) { fprintf(logFile, "%s: %s\n", timebuf, message); fflush(logFile); } else { printf("%s: %s\n", timebuf, message); } } if (!(logmess && logFile == NULL) && flags == conq) { /* output conquer stuff to stdout in addition to message window */ fprintf(stdout, "%s\n", message); if (instr(message, "kill")) { fprintf(stdout, "NOTE: The server here does not properly set message flags\n"); fprintf(stdout, "You should probably pester the server god to update....\n"); } } if (flags == (MCONFIG + MINDIV + MVALID)) { return; } if ((flags == team) || (flags == take) || (flags == destroy)) { W_WriteText(messwt, 0, 0, color, message, len, shipFont(me)); if ((flags == team) && !strncmp(message + 10, " ", 5) && (message[15] == 0)) { printf("dmessage:flags==team PIG call from=%d\n", from); if (!versionHide) pmessage(cowid, from, MINDIV); } } else if ((flags == kill) || (flags == killp) || (flags == killa) || (flags == bomb)) { W_WriteText(messwk, 0, 0, color, message, len, 0); if (!reportKills) return; /* HW */ } else if (flags & MINDIV) { W_WriteText(messwi, 0, 0, color, message, len, 0); if (!strncmp(message + 10, " ", 5) && (message[15] == 0)) { printf("dmessage:MINDIV PIG call from=%d\n", from); if (!versionHide) pmessage(cowid, from, MINDIV); } } else { /* if we don't know where * * * the message beLONGs by * * * this time, stick it * in * * the all board... */ W_WriteText(messwa, 0, 0, color, message, len, 0); if (!strncmp(message + 10, " ", 5) && (message[15] == 0)) { if (!versionHide) pmessage(cowid, from, MINDIV); } } W_WriteText(reviewWin, 0, 0, color, message, len, 0); } else { /* ok, here we have the old kludge nastiness that we can turn on if we * * * HAVE to. yuk, blech, ptooie... */ if ((strncmp(message, "GOD->ALL", 8) == 0 && (instr(message, "was kill") || instr(message, "killed by"))) || (*message != ' ' && instr(message, "We are being attacked"))) { W_WriteText(messwk, 0, 0, color, message, len, 0); if (!reportKills) return; W_WriteText(reviewWin, 0, 0, color, message, len, 0); if (logmess) { if (logFile != NULL) { fprintf(logFile, "%s ", timebuf); fprintf(logFile, "%s\n", message); fflush(logFile); } else { printf("%s ", message); printf("%s\n", timebuf); } } return; } switch (flags & (MTEAM | MINDIV | MALL)) { case MTEAM: W_WriteText(messwt, 0, 0, color, message, len, 0); if (!strncmp(message + 10, " ", 5) && (message[15] == 0)) { if (!versionHide) pmessage(cowid, from, MINDIV); } if (logmess) { if (logFile != NULL) { fprintf(logFile, "%s ", timebuf); fprintf(logFile, "%s\n", message); fflush(logFile); } else { printf("%s ", message); printf("%s\n", timebuf); } } break; case MINDIV: if (!(flags & MCONFIG)) W_WriteText(messwi, 0, 0, color, message, len, 0); if (!strncmp(message + 10, " ", 5) && (message[15] == 0)) { if (!versionHide) pmessage(cowid, from, MINDIV); } if (logmess) { if (logFile != NULL) { fprintf(logFile, "%s ", timebuf); fprintf(logFile, "%s\n", message); fflush(logFile); } else { printf("%s ", message); printf("%s\n", timebuf); } } break; default: W_WriteText(messwa, 0, 0, color, message, len, 0); if (!strncmp(message + 10, " ", 5) && (message[15] == 0)) { if (!versionHide) pmessage(cowid, from, MINDIV); } if (logmess) { if (logFile != NULL) { fprintf(logFile, "%s ", timebuf); fprintf(logFile, "%s\n", message); fflush(logFile); } else { printf("%s", message); printf("%s\n", timebuf); } } break; } W_WriteText(reviewWin, 0, 0, color, message, len, 0); } } static int instr(char *string1, char *string2) { char *s; int length; length = strlen(string2); for (s = string1; *s != 0; s++) { if (*s == *string2 && strncmp(s, string2, length) == 0) return (1); } return (0); } void sendVersion(void) { char client_ver[80]; if (!version_sent) { version_sent = 1; sprintf(client_ver, "@netrek-client-cow %s.%d", mvers, PATCHLEVEL); pmessage(client_ver, me->p_no, MINDIV | MCONFIG); } } netrek-client-cow-3.3.2/ltd_stats.h0000664000175000017500000003540413657750470016231 0ustar jamesjames/* * * Dave Ahn * * Leonard/Tom/Dave (LTD) Extended statistics. For detailed info, read * the README.LTD file. * * For inline optimization details, read the README.LTD and * ltd_stats.c files. * * struct ltd_stats is a per-ship statistics group for each player. * This means that the player DB will increase by several factors in * size at the benefit of detailed stats that can be used to analyze * individual play for clued games. * */ #ifndef __INCLUDED_ltd_stats_h__ #define __INCLUDED_ltd_stats_h__ #include "defs.h" /* We need defines from this file */ typedef enum { LTD_TZONE_0 = 0, /* Zone 0 = backfield */ LTD_TZONE_1 = 1, /* Zone 1 = core + 2 open side */ LTD_TZONE_2 = 2, /* Zone 2 = front line */ LTD_TZONE_3 = 3, /* Zone 3 = enemy front line */ LTD_TZONE_4 = 4, /* Zone 4 = enemy core + 2 open side */ LTD_TZONE_5 = 5, /* Zone 5 = enemy backfield */ LTD_TZONE_6 = 6, /* Zone 6 = 3rd space */ LTD_TZONE_7 = 7, /* Zone 7 = unknown/diag */ LTD_NUM_TZONES = 8 /* number of zones */ } LTD_TZONE_T; /* XXNOTE: find a better way to do the inlining */ #ifdef LTD_INLINE #define __LTD_INLINE inline static #else #define __LTD_INLINE #endif /* for extende stats, one struct for each ship except GA and AT, which share the same slot */ typedef enum { LTD_TOTAL = 0, LTD_SC = 1, LTD_DD = 2, LTD_CA = 3, LTD_BB = 4, LTD_AS = 5, LTD_SB = 6, LTD_GA = 7, LTD_AT = 7, LTD_NUM_SHIPS = 8 } LTD_SHIP_T; #ifdef LTD_PER_RACE typedef enum { LTD_FED = 0, LTD_ROM = 1, LTD_KLI = 2, LTD_ORI = 3, LTD_NOBODY = 4, LTD_NUM_RACES = 5 } LTD_RACE_T; #else typedef enum { LTD_FED = 0, LTD_ROM = 0, LTD_KLI = 0, LTD_ORI = 0, LTD_NOBODY = 0, LTD_NUM_RACES = 1 } LTD_RACE_T; #endif /* LTD_PER_RACE */ /* LTD stats structure */ struct ltd_stats { /* How many times have I killed in this ship */ struct _kills { unsigned int total; /* total number of kills ever */ double max; /* max kills ever achieved */ unsigned int first; /* number of first kills made */ unsigned int first_potential; /* first kills that could be converted to carries */ unsigned int first_converted; /* first kills that actually were converted to carries */ unsigned int second; /* number of second kills made */ unsigned int second_potential; /* second kills that could be converted to carries */ unsigned int second_converted; /* second kills that actually were converted to carries */ unsigned int phasered; /* number of kills made with a phaser death blow */ unsigned int torped; /* number of kills made with a torp blow */ unsigned int plasmaed; /* number of kills made with a plamsa */ #if defined(_64BIT) && defined(linux) } __attribute__((packed)) kills; #else } kills; #endif /* How many times have I died in this ship */ struct _deaths { unsigned int total; /* total number of deaths ever */ unsigned int potential; /* number of times died as a potential carrier */ unsigned int converted; /* number of times died as a a converted carrier */ unsigned int dooshed; /* number of times died while ++ */ unsigned int phasered; /* number of times died from phaser */ unsigned int torped; /* number of times died from torp */ unsigned int plasmaed; /* number of times died from plasma */ unsigned int acc; /* number of times you died, and someone picked up armies with the kill */ } deaths; /* How many planets have I destroyed or taken */ struct _planets { unsigned int taken; /* number of planets taken */ unsigned int destroyed; /* number of planets destroyed */ } planets; /* How many enemy armies have you bombed */ struct _bomb { unsigned int planets; /* number of planets bombed */ unsigned int planets_8; /* number of planets with <= 8 armies bombed */ unsigned int planets_core; /* number of core planets bombed */ unsigned int armies; /* total number of armies bombed */ unsigned int armies_8; /* armies bombed where the planet being bombed had <= 8 armies */ unsigned int armies_core; /* armies bombed in a core planet */ } bomb; /* How many enemy carriers have you killed and armies ogged */ struct _ogged { unsigned int armies; /* number of enemy armies ogged */ unsigned int dooshed; /* number of dooshed real carriers */ unsigned int converted; /* number of converted enemy carriers */ unsigned int potential; /* number of potential enemy carriers */ unsigned int bigger_ship; /* number of times a real carrier was in a bigger ship */ unsigned int same_ship; /* number of times a real carrier was in the same sized ship */ unsigned int smaller_ship; /* number of times a real carrier was in the same sized ship */ unsigned int sb_armies; /* number of armies on enemy SB ogged */ unsigned int friendly; /* number of friendly carriers you killed */ unsigned int friendly_armies; /* number of friendly armies you killed due to blatant stupidity */ } ogged; /* How many friendly armies have you carried */ struct _armies { unsigned int total; /* number of friendly armies carried */ unsigned int attack; /* armies droped on enemy planets */ unsigned int reinforce; /* armies used to reinforce friendly planet < 4 */ unsigned int ferries; /* armies ferried to friendly planet >= 4 or SB */ unsigned int killed; /* armies killed */ } armies; /* How many carries have you made */ struct _carries { unsigned int total; /* number of carries you attempted */ unsigned int partial; /* number of times you delivered at least 1 army before dying ++ */ unsigned int completed; /* number of times you completed your carry by delivering all the armies */ unsigned int attack; /* number of times you dropped on a neutral or enemy planet */ unsigned int reinforce; /* number of times you reinforced a friendly planet < 4 */ unsigned int ferries; /* number of times you ferried to a friendly planet >= 4 or SB */ } carries; /* How much time we spent in relevant roles, modes or space */ struct _ticks { unsigned int total; /* total = green + yellow + red */ /* unsigned int green; */ /* time spent in green alert */ unsigned int yellow; /* time spent in yellow alert */ unsigned int red; /* time spent in red alert */ unsigned int zone[LTD_NUM_TZONES]; /* time spent in a particular zone */ unsigned int potential; /* time spent as potential carrier */ unsigned int carrier; /* time spent as carrier */ unsigned int repair; /* time spent in repair mode */ } ticks; unsigned int damage_repaired; /* total damage repaired */ /* Weapon stats */ struct _weapons { /* phasers */ struct _phaser { unsigned int fired; /* number of times the weapon was fired */ unsigned int hit; /* number of times the weapon hit */ struct _damage { unsigned int inflicted; /* damage inflicted with this weapon */ unsigned int taken; /* damage taken from this weapon */ } damage; } phaser; /* torps */ struct _torp { unsigned int fired; /* number of torps that were fired */ unsigned int hit; /* number of torps hit */ unsigned int detted; /* number of torps that were detted by enemy */ unsigned int selfdetted; /* number of torps self detted */ unsigned int wall; /* number of torps that hit the wall */ struct _damage damage; /* damage inflicted/taken */ } torps; /* plasma */ struct _plasma { unsigned int fired; /* number of plasmas that were fired */ unsigned int hit; /* number that hit */ unsigned int phasered; /* number that were phasered */ unsigned int wall; /* number that hit the wall */ struct _damage damage; /* damage inflicted/taken */ } plasma; /* damage repaired */ } weapons; #if defined(_64BIT) && defined(linux) } __attribute__((packed)); #else }; #endif /* LTD history structure - this is needed to calculate the LTD stats every tick. */ enum { LTD_NUM_HIST = 5 /* keep track of up to 5 events */ }; struct ltd_history { /* kill history */ struct _kill { unsigned int tick; /* tick kill was acquired */ char potential; /* kill was retained long enough to become potential or converted carrier */ struct player *victim; /* the player that was killed */ float before; /* kills i had before this one, perhaps from bombing, etc */ int ship; /* ship type of the victim */ } kills[LTD_NUM_HIST]; int num_kills; /* number of last_kills */ char kill_potential; /* i am a potential carrier 0 = no 1 = potential 1st kill 2 = potential 2nd kill 3 = converted 1st kill 4 = converted 2nd kill */ /* bombing history */ unsigned int last_bombed_tick;/* tick i bombed the last planet */ short last_bombed_planet; /* last planet that i bombed */ /* army/carries history */ short last_beamup_planet; short last_beamdown_planet; /* last planet i beamed up/down armies from value is planet number -1 = SB -2 = no planet */ int enemy_team; /* the enemy team, for ltd_zone */ }; /* forward declarations of structs for function prototypes */ struct player; struct stats; struct planet; /* function prototypes for non-inlined functions */ void ltd_reset(struct player *); void ltd_reset_struct(struct ltd_stats (*) [LTD_NUM_SHIPS]); void ltd_reset_hist(struct player *); int ltd_can_rank(struct player *); void ltd_update_totals(struct player *); /* function prototypes for inlined functions */ __LTD_INLINE float ltd_total_rating(struct player *); __LTD_INLINE float ltd_bombing_rating(struct player *); __LTD_INLINE float ltd_planet_rating(struct player *); __LTD_INLINE float ltd_defense_rating(struct player *); __LTD_INLINE float ltd_offense_rating(struct player *); __LTD_INLINE int ltd_kills(struct player *, const LTD_SHIP_T); __LTD_INLINE int ltd_deaths(struct player *, const LTD_SHIP_T); __LTD_INLINE int ltd_armies_bombed(struct player *, const LTD_SHIP_T); __LTD_INLINE int ltd_planets_taken(struct player *, const LTD_SHIP_T); __LTD_INLINE int ltd_ticks(struct player *, const LTD_SHIP_T); __LTD_INLINE int ltd_kills_max(struct player *, const LTD_SHIP_T); __LTD_INLINE void ltd_update_ticks(struct player *); __LTD_INLINE void ltd_update_kills(struct player *credit_killer, struct player *actual_killer, struct player *victim); __LTD_INLINE void ltd_update_kills_max(struct player *); __LTD_INLINE void ltd_update_deaths(struct player *victim, struct player *actual_killer); __LTD_INLINE void ltd_update_bomb(struct player *bomber, struct planet *planet_bombed, int armies_bombed); __LTD_INLINE void ltd_update_planets(struct player *taker, struct planet *planet); __LTD_INLINE void ltd_update_armies(struct player *carrier, struct planet *planet); __LTD_INLINE void ltd_update_armies_carried(struct player *carrier, struct player *sb); __LTD_INLINE void ltd_update_armies_ferried(struct player *carrier, struct player *sb); __LTD_INLINE void ltd_update_repaired(struct player *, const int damage); __LTD_INLINE void ltd_update_phaser_fired(struct player *shooter); __LTD_INLINE void ltd_update_phaser_hit(struct player *shooter); __LTD_INLINE void ltd_update_phaser_damage(struct player *shooter, struct player *victim, const int damage); __LTD_INLINE void ltd_update_torp_fired(struct player *shooter); __LTD_INLINE void ltd_update_torp_hit(struct player *shooter); __LTD_INLINE void ltd_update_torp_detted(struct player *shooter); __LTD_INLINE void ltd_update_torp_selfdetted(struct player *shooter); __LTD_INLINE void ltd_update_torp_wall(struct player *shooter); __LTD_INLINE void ltd_update_torp_damage(struct player *shooter, struct player *victim, const int damage); __LTD_INLINE void ltd_update_plasma_fired(struct player *shooter); __LTD_INLINE void ltd_update_plasma_hit(struct player *shooter); __LTD_INLINE void ltd_update_plasma_phasered(struct player *shooter); __LTD_INLINE void ltd_update_plasma_wall(struct player *shooter); __LTD_INLINE void ltd_update_plasma_damage(struct player *shooter, struct player *victim, const int damage); /* find a better way to do this inline stuff */ #ifdef LTD_INLINE /* this stuff is ugly */ #define __LTD_INCLUDE_SOURCE #include "ltd_stats.c" #undef __LTD_INCLUDE_SOURCE #endif #ifdef LTD_PER_RACE static inline LTD_RACE_T ltd_race(const short team) { switch(team) { case FED: return LTD_FED; case ROM: return LTD_ROM; case KLI: return LTD_KLI; case ORI: return LTD_ORI; default: return LTD_NOBODY; } } #else #define ltd_race(XXX) 0 #endif /* LTD_PER_RACE */ #endif /* __INCLUDED_ltd_stats_h__ */ netrek-client-cow-3.3.2/check.c0000664000175000017500000000666713657750470015311 0ustar jamesjames/****************************************************************************/ /*** File: check.c ***/ /*** Function: ***/ /*** Revisions: ***/ /*** 9/20/93 VEG changed last while loop of file to improve clarity. ***/ /*** Also re-indented and spaced to make source easier to read. ***/ /*** Lastly, changed size of declared character buffer from 4096 + 1 ***/ /*** to just 4096, since read only reads up to the number of characters ***/ /*** requested. Decided to make this a local define, BUF_SIZE. ***/ /*** ***/ /****************************************************************************/ /****************************************************************************/ /*** Include Files ***/ /****************************************************************************/ #include "config.h" #include "copyright2.h" #include #include #include #include #include #include #include #include #include INC_NETINET_IN #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "check.h" /* For close() and read(), at least in MSVC -SAC */ #include INC_IO extern void terminate(int error); /******************************************************************************/ /*** Size lof character data buffer ***/ /******************************************************************************/ #define BUF_SIZE ( 4096 ) /******************************************************************************/ /*** Static Character Buffer ***/ /******************************************************************************/ static char buf[BUF_SIZE]; /******************************************************************************/ /*** check() will obtain the connection to the server and will forever ***/ /*** read server data into a 4096 byte buffer area, unless an error is ***/ /*** detected. ***/ /******************************************************************************/ void check(void) { struct sockaddr_in addr; struct hostent *hp; int cc, sock; /* get numeric form */ if ((addr.sin_addr.s_addr = inet_addr(serverName)) == -1) { if ((hp = gethostbyname(serverName)) == NULL) { fprintf(stderr, "unknown host '%s'\n", serverName); terminate(0); } else { addr.sin_addr.s_addr = *(LONG *) hp->h_addr; } } addr.sin_family = AF_INET; addr.sin_port = htons(xtrekPort); if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket"); terminate(0); } printf("checking %s on port %d\n", serverName, xtrekPort); if (connect(sock, (struct sockaddr *) &addr, sizeof(addr)) < 0) { perror("connect"); close(sock); terminate(0); } while ((cc = read(sock, buf, BUF_SIZE)) > 0) { if (fwrite(buf, cc, 1, stdout) != 1) { perror("fwrite"); close(sock); terminate(0); } } if (cc < 0) { perror("read"); } close(sock); terminate(0); } netrek-client-cow-3.3.2/README.2.000000664000175000017500000000560513657750470015315 0ustar jamesjamesThis file contains the most recent changes to the COW client, with example .xtrekrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience. ***************************************************************** 1) Change Log ***************************************************************** 2.00 pl0 - LABs newest dashboard [lab] - cleanup dashboard .xtrekrc defaults -> newDashboard is int [siegl] - COW api - shared libs, java and Netscape plugin support [siegl] - support for WIN95 and NT [jshekter,greynite] - improved sound system [jshekter,siegl] - split up cowmain.c from main.c [siegl] - highlight friendly phasers [ellisj] - censor (obscenities filter) [ellisj] - Wide enemy phaser fix [koconnor] - Kathy replaced by stars [Kellen, majority vote] - Colormap Option [Kellen] - fix array overflow in metaserver Win [siegl] ***************************************************************** 2) Cut and past changes to make COW work like it used to. ***************************************************************** 2.00 pl0 The dashboard .xtrekrc defaults handling changed. The boolean newDashboard option is now and int default and newdashboard2 default is obsolete now. So you should use now on of: # Text dashboard newDashboard: 0 # COW style dashboard newDashboard: 1 # KRP style dashboard newDashboard: 2 # LABs new dashboard newDashboard: 3 ***************************************************************** 3) Cut and past changes to turn on *all* new features. ***************************************************************** 2.00 pl0 # LABs new kewl dashboard newDashboard: 3 The .xtrekrc entry for the highlightFriendlyPhasers option is: highlightFriendlyPhasers: on What does it do? If on, friendly phasers that hit turn white, just like your own phaser did before. Jon Ellis has made some patches which he describes as "what if you wanted your little sister to play some netrek?". In short, if you turn on this option with the .xtrekrc option : censorMessages: on then a list of obscenities in messages are filtered out. No change unless you specifically turn it on. Color map option: [-n] use nearest colors in shared colormap I really hate the flicker caused by changing colormaps. Especially when the colors cow wants are already allocated (ie, Waitqueue 5 at bigbang, time to kill time elsewhere). This patch adds the '-n' option, to accept the nearest match color rather than allocate a whole new colormap. Michael **************************************************************** 4) New manual sections **************************************************************** newDashboard: (integer 0-3) new dashboard 1 and 2, has sliding bars instead of numbers at the bottom of the screen, 3 uses triangle sliders, definately worth a look. netrek-client-cow-3.3.2/NETREK.WRI0000664000175000017500000003560013657750470015430 0ustar jamesjames1¾«‘3ksstuvw WinCOW ** v1.03 BETA 2** Client-Of-Win on Windows NT and Windows 95 Made In Canada by Jonathan Shekter (jshekter@interlog.com) Note: This is BETA software! This means it is in testing! This means you are expected to report bugs. Please report any bugs to jshekter@interlog.com -- after reading the documentation to make sure it's not already covered. Contents: 0. About This Manual 1. Introduction 2. System Requirements And Installation 3. Getting the Maximum Performance 4. Features Specific To This Client 5. Troubleshooting And Hints 0. About This Manual Unlike previous Windows clients, this manual is not an introduction to the game! This means, even if you're clue, you should read it. If you are new to the game of Netrek, the more general document, The Netrek Newbie Manual, is included in the standard distribution of WinCOW as the file manual.txt. If you are a newbie, you want to read this! Also, this is the WinCOW manual; that is, it only goes into the windows-specific details. For general information on COW, please see the COW Reference Manual, also included. 1. Introduction Welcome! You are now the proud owner of the latest and greatest Netrek client for Microsoft Windows 95 and Windows NT. According to the FAQ (Frequently Asked Questions) list for the newsgroup Netrek, "Netrek is a 16-player graphical real-time battle simulation with a Star Trek theme. The game is divided into two teams of 8 (or less), who dogfight each other and attempt to conquer each other's planets. There are several different types of ships, from fast, fragile scouts up to big, slow battleships; this allows a great deal of variance in play styles." It is played over the Internet, against real human oppenonents. If you do not have a Windows computer on the internet, or connected via SLIP or PPP, you will not be able to play. I did not invent Netrek, as anyone who plays will know. I did not even (really) write this client. COW was written by a team of dedicated Netrek players/hackers (in the earlier days of Netrek there was no difference) over a number of years. It was derived from BRM which was worked on by more or less the same team, and was in turn originally derived from the Berkely and Rick's Moo clients (hence BRM). In other words, this game has a history and can actually be traced back through various ancestors to 1972. Andy McFadden has written a wonderful history of the game, see which for more. Up to 16 players, often widely seperated geographically, connect to a central "server" running at some site. There are maybe 100 public servers in the world and of these maybe 20 are well known and popular. The individual players use a "client" program to connect to the server of their choice. Once in the game, the server recieves commands from the client (and hence player) and sends the positions and status of the other ships, planets, etc, to all players, several times per second. The net effect of all this is to create a virtual galaxy where everyone can see eachother and interact, or to put it less academically, everyone plays in the same galaxy to try to take it over. 2. System Requirements And Installation Unlike previous Windows clients, this client will not run under Windows 3.1. It requires Windows 95 or Windows NT. If you still have Windows 3.1, you can run the SWINE client. You will need to setup TCP/IP for your machine; Both Win95 and NT come with TCP/IP software; see the manual or talk to your local guru for help setting this up. Please don't e-mail me asking for help setting up your network software -- there are lots of people around who know how and I would get flooded if I had to be windows techincal support as well as client tech support. If you are trying to get Win95 networking going, you can check out the Win95 home page, somewhere off http://microsoft.com. (On the other hand, if you have a problem, suggestion, or even just a comment about the client, please don't hesitate to contact me!) If you are already using other network applications such as Mosaic, Netscape, Eudora, WinVN, you already have a winsock.dll installed. WinCOW will run with a display driver of any number of colors, from a monochrome (1-bit) to 24-bit displays, and everything in between . But, you are STRONGLY advised to be running in 1024x768 or higher resolution, as otherwise you will have trouble fitting everything on the screen. The follwing files are included in this release: * netrek.exe - WinCOW executable * netrek.wri - You're reading it * newbie.txt - The Netrek Newbie Guide (read this!!) * cow.txt - COW Reference Manual * netrekrc - sample configurartion file with nice window placements * ntrk6x10.fon - 6 by 10 pixel fonts file * ntrk6x10.alt - alternate font file, for large fonts display drivers Put these into the same directory (ntrk6x10.fon in particular must be in the same directory as netrek.exe for proper operation), make sure WinSock is installed and run the executable. If you don't know what you're doing, read the Netrek Newbie Guide (newbie.txt). 3. Getting Maximum Performance Unfortunately, I'd bet that over 80% of the people using this client are doing so over a modem. This is unfortunate as a modem really gives you horrible lag, minimally 200 ms and usually more. Really, Netrek with <100ms lag as found on a machine directly connected to the 'net and Netrek with, say 300ms lag are two different games. I wish to make it clear here that you really haven't played Netrek until you've played over a good ethernet line. (I note that this may be changing with the advent of higher-speed modems; 28.8 modems aren't too bad and the next generation of modems after 28.8kbps may be acceptable. Acceptable = < 150 ms lag.) Be that as it may, some hints on getting the best possible ping times can be found in section 4.1 of the Netrek User's manual, "UDP, Short Packets and SLIP". 4. Features Specific To This Client All windows in WinCOWcan be moved by positioning the mouse cursor over the window border so that the mosue cursor changes to an arrow. Clcking the mouse button will then drag to window to a new location. The default window positions are pretty horrible due to differences in border width and such. The included netrekrc file has better ones, or at least I think so. One useful thing is to specify that your main window (which is called "netrek") is full screen at start-up. The black background reduces the visual clutter. Also, you may have noticed that the main window gets an inactive title bar when you click on any of the sub-windows. This is a minor point, but it is due to the fact that the sub-windows are popup windows by default. To change this you need to specify ".parent: netrek" in your netrekrc for each sub-window. This will also resrtict these windows to staying inside your main window, which is further reason to set your netrek window to full screen. Making a nice window layout is a pain but it's worth it. 5. Troubleshooting And Hints Q) I can't ever connect! I always get network errors! A) Several people have reported that when running under Windows 95, WinCOW will only work when using Microsoft's TCP/IP stack. That is, you do not need to use MS Dial-Up networking (but if you want to that's fine), but need to use Microsoft's TCP/IP stack. Actually, the problem is probably caused by trying to use Trumpet Winsock under Win95. Trumpet is a 16 bit application, and unlike Windows 3.1, a 16 bit winsock.dll is not thunked to 32 bits under Win95. If that made no sense to you, don't worry... just don't use Trumpet Winsock under Win95. Q) Okay, I connect now, get a whole bunch of status information on the screen... and then it just exits/crashes. A) First, if running on Win95, check your win.ini file. Does it have a line that says "load=pointer.exe"? Some people have reported problems with this. Comment it out (put a ';' in front of the line). Restart Win95. If it works, great. If not, or you are running on NT, did you just copy over your netrekrc file from your old client? If yes, re-write it, using the COW Reference Manual (cow.txt) to figure out what you want set. Marcos, keymaps, and window placements you should be okay to just cut and paste. Q) I can't type! It won't process my keystrokes! A) During operation, X-style keyboard focus is in operation. This mean that, even though you can't see the effect, your mouse cursor must be in the window which you wish the keystrokes to go to. Many people have been frusttrated by saying "it isn't responding to keypresses!" when in fact the mouse was just in the wrong window. What is the right window? For most game functions the tactical window (the left of the two large windows) is where the program expects keystrokes; your mouse should be here to steer the ship anyway. For a few other things, such as typing a message (although you can hit 'm' first to tell the program you're sending a message and avoid this) or setting up keymaps while in the game, you will need to move the cursor to whichever window the keys will actually appear in or "go to". Q: When I run the program, I get unreadable, garbled fonts. A) What seems to be happening is that some display drivers have problems displaying very small fonts in "Large Fonts" display modes. The solution: switch to a "Small Fonts" display driver, or try renaming the file NTRK6X10.ALT to NTRK6X10.FON (save the old one first!) This alternate font file is actually a 6 by 12 pixel font, but it displays allright in most cases, and only garbles when ships are displayed close to the bottom of the screen on the galactic, or in the playerlist. You probably won't notice it but use the original font file if you can. I'm still working on this bug but this is an acceptable interim fix. Q) The colors are all weird, or, where is my color? A) Some display drivers incorrectly report the number of bits per pixel or palette capabilities. If you are having display problems (e.g. mono bitmaps on a color display) you can try adding a line that says "forceDisplay: n" netrekrc file, where n is 0 for autodetect (default), 1 for monochrome or 16 color display, 2 for a display that supports palette manipulation (such as most 256 color drivers) , and 3 for a high-color (15/16 bit) or true-color (24 bit) display. Q) The display is all garbled (not fonts, other stuff) A) Netrek seems to be rather hard on video drivers; I know of several card/driver combinations that do not work properly. Fortunately, in most cases has been fixed by getting a newer version of the video driver. Q) Servers keep on kicking me out! Or, I log in, play for one second, then blow up! A) Netrek clients use an RSA encryption sheme to prevent people from writing "borgs", clients that cheat, by doing things such as automatically firing phasers, or showing cloaked ships. Part of the protocol used requires the client to send its IP address; if the server sees the client located at a different IP address than what the client repors, verification fails. For this reason, a) if you are playing behind a firewall, or b) if your local WinSock setup is incorrectly reporting your IP, verification will fail. If you are playing behind a firewall, yell at the sysadmin, otherwise, check your setup carefully, to make sure your IP really is what WinSock thinks it is. Q) I can't fire my phasers with the middle mouse button! A) Many mouse drivers under Windows do not properly support the middle button. If you can't fire your phasers, try switching mouse drivers. Getting the middle buton to work can be something of a black art, as while most mice have a middle button, the default Microsoft serial driver, which is installed on abou 90% of the Windows machines I've seen, does not support it. Contact you favorite Windows technician to help you with this. In the mean time you, the default netrekrc maps Shift+Left to phasers.with the line "buttonmap: 4p". This helps quite a bit. Or you can always use the keyboard. In fact, there are intermitent debates on rec.games.netrek on whether the mouse or the keyboard are better for weapons. Have fun! Jonathan Shekter, Toronto, Canada (jshekter@interlog.com) Thanks to: Jaime Allister and the Crew at Factory X for being my testers, and the official distribution site for WinCOW. Steve Sheldon for writing COW-lite and SWINE, on which the original Windows were based , R.I.P. Jordan Christensen for helping me debug the very first (Aug '94 BRM beta) client on Win32s. This stabilized the windowing and network code in use to this day. Nick Trown for posting my keys so quickly All the people who wrote the articles in the Netrek Archives, without whom the Netrek Newbie Guide would never have come to be. Everybody on rec.games.netrek for being so enthusiastic when I posted the question, "Should I broadly release this Windows client of mine?" or "go to". Q: When I run the program, I get unreadable, garbled fonts. A) What seems to be happening i€‹wžsÈoÊmðig c _[§W¬RïN:`^$$$0$$0H ïñwÉtËqßn­kÇhÌeàbô_\ Y' V±S$0 ±Ôxru{ro#lCi_f'c'`y(]{(Z‘3W±S$ €‚i‹fžfÊfÛfðf f f ÿÿÿÿïÿÿñÿÿüÿÿþÿÿÿÿÿÿ)ÿÿ<<ð)+ÿÿUÿÿWÿÿ|ÿÿ~ÿÿ¥ÿÿ¨ÿÿÇÿÿÉÿÿËÿÿáÿÿãÿÿ7ÿÿ@ÿÿBÿÿòÿÿôÿÿÿÿÿÿÓÿÿÓÕÿÿ?ÿÿAÿÿ÷ÿÿùÿÿ ÿÿ’ ÿÿN ÿÿP ÿÿü ÿÿþ ÿÿ ÿÿ* ÿÿ, ÿÿÞ ÿÿà ÿÿçÿÿéÿÿÿÿ ÿÿ <ÿÿ?ÿÿdÿÿ‡ÿÿ¿ÿÿãÿÿ)ÿÿUÿÿžÿÿ ÿÿ¢ÿÿ­ÿÿ¯ÿÿ±ÿÿÑÿÿÓÿÿYÿÿ[ÿÿüÿÿþÿÿþÿÿ&ÿÿ(ÿÿ÷ÿÿùÿÿ?ÿÿAÿÿCÿÿaÿÿcÿÿeÿÿœÿÿžÿÿÆÿÿÈÿÿ:ÿÿ<ÿÿ!ÿÿq!ÿÿq!s!ÿÿž$ÿÿ $ÿÿÞ$ÿÿà$ÿÿR'ÿÿT'ÿÿ‰'ÿÿ‹'ÿÿb)ÿÿd)ÿÿœ)ÿÿž)ÿÿs*ÿÿu*ÿÿÊ*ÿÿÌ*ÿÿr-ÿÿt-ÿÿ®-ÿÿ®-°-ÿÿ}0ÿÿ0ÿÿ0ÿÿ0ÿÿ0ÿÿÍ0ÿÿÏ0ÿÿÛ0ÿÿÝ0ÿÿL1ÿÿN1ÿÿ°1ÿÿ²1ÿÿR2ÿÿT2ÿÿ2ÿÿ2ÿÿ3ÿÿ3ÿÿ3‘3ÿÿ“3ÿÿ0ÿÿ0ÿÿ0ÿÿ0ÿÿÍ0ÿÿÏ0ÿÿÛ0ÿÿÝ0ÿÿL1ÿÿN1ÿÿ°1ÿÿ²1ÿÿR2ÿÿT2ÿÿ2ÿÿ2ÿÿ3ÿÿ3ÿÿfà=Ð/ÿÿ  2À!8«9Ð8È(A encryption sheme to pre3€93ÿÿÿÿÿ "borgs", clients that cheat, by doing things such as automatically firing phasers, or showing cloaked Ui( 'Ì0s the client to send its IP address; if the server sees the client located at a differen ArialTimes New Roman 0Courier Newication fails. For this reason, a) if you are playing behind a firewall, or b) ifnetrek-client-cow-3.3.2/defaults.h0000664000175000017500000000060613657750470016033 0ustar jamesjames/* defaults.c */ void initDefaults(char *deffile); char *getdefault(char *str); int strcmpi(char *str1, char *str2); int strncmpi(char *str1, char *str2, int max); int booleanDefault(char *def, int preferred); int intDefault(char *def, int preferred); int findDefaults(char *deffile, char *file); void resetdefaults(void); void shipchange(int type); int findfile(char *fname, char *found); netrek-client-cow-3.3.2/tngbitmaps.h0000664000175000017500000007401013657750470016374 0ustar jamesjames #ifndef VIEWS #define VIEWS 16 #endif static char tng_fed_scout_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7f, 0x00, 0xc0, 0x38, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0xf8, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xc0, 0x38, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x08, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xc0, 0x31, 0x00, 0xe0, 0x0f, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xf0, 0x3f, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xe0, 0x0f, 0x00, 0xc0, 0x31, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0xc0, 0x07, 0x00, 0x80, 0x07, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; static char tng_fed_cruiser_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x90, 0x9f, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xc6, 0x00, 0xf0, 0xff, 0x00, 0xd0, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x80, 0xff, 0x00, 0x80, 0xff, 0x00, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x01, 0xb0, 0xff, 0x00, 0xb0, 0xff, 0x00, 0x98, 0x3f, 0x00, 0x18, 0x0f, 0x00, 0x9c, 0x47, 0x00, 0xb4, 0x63, 0x00, 0xf0, 0x31, 0x00, 0xc0, 0x37, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x03, 0x00, 0xff, 0x03, 0x20, 0xff, 0x07, 0x30, 0xff, 0x07, 0x38, 0xff, 0x07, 0x1c, 0xff, 0x03, 0x8e, 0xff, 0x03, 0x98, 0xff, 0x00, 0xf8, 0x03, 0x00, 0xf0, 0x00, 0x00, 0xe0, 0x38, 0x00, 0xc0, 0x1d, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x03, 0xc0, 0xfc, 0x03, 0x70, 0xfe, 0x07, 0x3c, 0xfe, 0x07, 0x0e, 0xff, 0x07, 0x98, 0xff, 0x07, 0xd8, 0xff, 0x07, 0xf8, 0xff, 0x07, 0xf0, 0xfe, 0x03, 0x30, 0xe0, 0x00, 0x60, 0x0c, 0x00, 0xe0, 0x0f, 0x00, 0x80, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x71, 0x00, 0xf8, 0xfc, 0x01, 0x0c, 0xfe, 0x01, 0x0c, 0xff, 0x03, 0xcc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xcc, 0xff, 0x03, 0x0c, 0xff, 0x03, 0x0c, 0xfe, 0x01, 0xf8, 0xfc, 0x01, 0xfc, 0x71, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x0f, 0x00, 0x60, 0x0c, 0x00, 0x30, 0xe0, 0x00, 0xf0, 0xfe, 0x03, 0xf8, 0xff, 0x07, 0xd8, 0xff, 0x07, 0x98, 0xff, 0x07, 0x0e, 0xff, 0x07, 0x3c, 0xfe, 0x07, 0x70, 0xfe, 0x07, 0xc0, 0xfc, 0x03, 0x00, 0xfc, 0x03, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x1d, 0x00, 0xe0, 0x38, 0x00, 0xf0, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x98, 0xff, 0x00, 0x8e, 0xff, 0x03, 0x1c, 0xff, 0x03, 0x38, 0xff, 0x07, 0x30, 0xff, 0x07, 0x20, 0xff, 0x07, 0x00, 0xff, 0x03, 0x00, 0xff, 0x03, 0x00, 0xfe, 0x01, 0x00, 0xfe, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x37, 0x00, 0xf0, 0x31, 0x00, 0xb4, 0x63, 0x00, 0x9c, 0x47, 0x00, 0x18, 0x0f, 0x00, 0x98, 0x3f, 0x00, 0xb0, 0xff, 0x00, 0xb0, 0xff, 0x00, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x00, 0x80, 0xff, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xbf, 0x00, 0xf0, 0xff, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xc6, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xcf, 0x00, 0x90, 0x9f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x3e, 0x00, 0xc0, 0xf8, 0x00, 0x60, 0xdc, 0x02, 0x20, 0x9e, 0x03, 0x00, 0x8f, 0x01, 0xc0, 0x9f, 0x01, 0xf0, 0xdf, 0x00, 0xf0, 0xdf, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x1f, 0x00, 0x80, 0x3b, 0x00, 0xc0, 0x71, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x01, 0xf0, 0x9f, 0x01, 0xfc, 0x1f, 0x07, 0xfc, 0x8f, 0x03, 0xfe, 0xcf, 0x01, 0xfe, 0xcf, 0x00, 0xfe, 0x4f, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x63, 0x00, 0x70, 0xc0, 0x00, 0xfc, 0xf7, 0x00, 0xfe, 0xff, 0x01, 0xfe, 0xbf, 0x01, 0xfe, 0x9f, 0x01, 0xfe, 0x0f, 0x07, 0xfe, 0xc7, 0x03, 0xfe, 0xe7, 0x00, 0xfc, 0x33, 0x00, 0xfc, 0x03, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf8, 0x03, 0xf8, 0xf3, 0x01, 0xf8, 0x07, 0x03, 0xfc, 0x0f, 0x03, 0xfc, 0x3f, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0x3f, 0x03, 0xfc, 0x0f, 0x03, 0xf8, 0x07, 0x03, 0xf8, 0xf3, 0x01, 0xe0, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0xfc, 0x03, 0x00, 0xfc, 0x33, 0x00, 0xfe, 0xe7, 0x00, 0xfe, 0xc7, 0x03, 0xfe, 0x0f, 0x07, 0xfe, 0x9f, 0x01, 0xfe, 0xbf, 0x01, 0xfe, 0xff, 0x01, 0xfc, 0xf7, 0x00, 0x70, 0xc0, 0x00, 0x00, 0x63, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x07, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x0f, 0x00, 0xfe, 0x4f, 0x00, 0xfe, 0xcf, 0x00, 0xfe, 0xcf, 0x01, 0xfc, 0x8f, 0x03, 0xfc, 0x1f, 0x07, 0xf0, 0x9f, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xf0, 0x00, 0xc0, 0x71, 0x00, 0x80, 0x3b, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x1f, 0x00, 0xf0, 0xdf, 0x00, 0xf0, 0xdf, 0x00, 0xc0, 0x9f, 0x01, 0x00, 0x8f, 0x01, 0x20, 0x9e, 0x03, 0x60, 0xdc, 0x02, 0xc0, 0xf8, 0x00, 0xc0, 0x3e, 0x00, 0x80, 0x0f, 0x00, 0x80, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}}; static char tng_fed_battleship_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xd0, 0xbf, 0x00, 0xb0, 0xdf, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xcf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xd0, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x80, 0xff, 0x00, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x03, 0xc0, 0xff, 0x03, 0xd0, 0xff, 0x03, 0xb0, 0xff, 0x01, 0x98, 0xff, 0x01, 0x98, 0xff, 0x00, 0x9c, 0x1f, 0x00, 0xfe, 0xc7, 0x00, 0xf4, 0x63, 0x00, 0xf0, 0x77, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0xfe, 0x00, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x03, 0x40, 0xff, 0x03, 0x60, 0xff, 0x07, 0x70, 0xff, 0x07, 0xb8, 0xff, 0x07, 0x9c, 0xff, 0x03, 0xbc, 0xff, 0x03, 0xf0, 0xff, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x71, 0x00, 0xc0, 0x3b, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x7e, 0x00, 0x00, 0xff, 0x00, 0xe0, 0xff, 0x01, 0x78, 0xff, 0x01, 0x9e, 0xff, 0x03, 0x8e, 0xff, 0x03, 0xd8, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xf8, 0xff, 0x03, 0xf8, 0xff, 0x01, 0x70, 0xfc, 0x00, 0x70, 0x07, 0x00, 0xc0, 0x03, 0x00, 0xe0, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x79, 0x00, 0xf8, 0xfe, 0x01, 0x1c, 0xff, 0x01, 0x9c, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0x9c, 0xff, 0x03, 0x1c, 0xff, 0x01, 0xf8, 0xfe, 0x01, 0xfc, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x03, 0x00, 0xf0, 0x0f, 0x00, 0x70, 0x04, 0x00, 0x78, 0xf8, 0x00, 0xf8, 0xff, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xd8, 0xff, 0x03, 0x8e, 0xff, 0x03, 0x9e, 0xff, 0x03, 0x3c, 0xff, 0x03, 0x70, 0xff, 0x01, 0x40, 0xff, 0x01, 0x00, 0xfe, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3b, 0x00, 0xe0, 0x71, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0xff, 0x00, 0xbc, 0xff, 0x03, 0x9c, 0xff, 0x03, 0xb8, 0xff, 0x07, 0x70, 0xff, 0x07, 0x60, 0xff, 0x07, 0x40, 0xff, 0x03, 0x00, 0xff, 0x03, 0x00, 0xfe, 0x01, 0x00, 0xfe, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x1a, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0x37, 0x00, 0xe8, 0x63, 0x00, 0xfc, 0x67, 0x00, 0x98, 0x5f, 0x00, 0xb8, 0xff, 0x00, 0xb0, 0xff, 0x01, 0xe0, 0xff, 0x01, 0xc0, 0xff, 0x03, 0xc0, 0xff, 0x03, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0xbf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0x30, 0xcf, 0x00, 0x30, 0xcf, 0x00, 0xb0, 0xdf, 0x00, 0xd0, 0xbf, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x80, 0x05, 0x00, 0xc0, 0x1f, 0x00, 0xc0, 0x7e, 0x00, 0x60, 0x7c, 0x01, 0x60, 0xfe, 0x03, 0xa0, 0x9f, 0x01, 0xf0, 0xdf, 0x01, 0xf8, 0xdf, 0x00, 0xf8, 0x7f, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x1f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x07, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3d, 0x00, 0xe0, 0x78, 0x00, 0x00, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xfc, 0xdf, 0x03, 0xfc, 0x9f, 0x03, 0xfe, 0xdf, 0x01, 0xfe, 0xef, 0x00, 0xfe, 0x6f, 0x00, 0xfc, 0x2f, 0x00, 0xfc, 0x0f, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x07, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x70, 0x00, 0x00, 0x3c, 0x00, 0x00, 0xff, 0x00, 0x00, 0xe2, 0x00, 0xf0, 0xe1, 0x01, 0xf8, 0xff, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xbf, 0x01, 0xfc, 0x1f, 0x07, 0xfc, 0x9f, 0x07, 0xfc, 0xcf, 0x03, 0xf8, 0xef, 0x00, 0xf8, 0x2f, 0x00, 0xf0, 0x07, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xf9, 0x03, 0xf8, 0xf7, 0x01, 0xf8, 0x8f, 0x03, 0xfc, 0x9f, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xfc, 0x9f, 0x03, 0xf8, 0x8f, 0x03, 0xf8, 0xf7, 0x01, 0xe0, 0xf9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0xf8, 0x7f, 0x00, 0xf8, 0xef, 0x01, 0xfc, 0x9f, 0x07, 0xfc, 0x1f, 0x07, 0xfc, 0xbf, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf0, 0xe3, 0x00, 0x00, 0xee, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x78, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xf0, 0x07, 0x00, 0xf8, 0x07, 0x00, 0xfc, 0x0f, 0x00, 0xfc, 0x2f, 0x00, 0xfe, 0x6f, 0x00, 0xfe, 0xef, 0x00, 0xfe, 0xdf, 0x01, 0xfc, 0x9f, 0x03, 0xfc, 0xdf, 0x03, 0xf0, 0xff, 0x00, 0x00, 0xff, 0x00, 0xe0, 0x78, 0x00, 0xc0, 0x3d, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x07, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x0f, 0x00, 0xf0, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0xbf, 0x00, 0xf8, 0xdf, 0x00, 0xf8, 0x9f, 0x01, 0xf0, 0x9f, 0x01, 0x80, 0x9f, 0x03, 0x30, 0xfe, 0x07, 0x60, 0xfc, 0x02, 0xe0, 0xfe, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x0d, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00}}; static char tng_fed_assault_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xb0, 0xdf, 0x00, 0x30, 0xcf, 0x00, 0x20, 0x4f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xc0, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf8, 0xff, 0x01, 0x98, 0xff, 0x00, 0x90, 0xff, 0x00, 0xe0, 0x67, 0x00, 0xc0, 0x63, 0x00, 0xf0, 0x37, 0x00, 0xe0, 0x01, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0xb0, 0xff, 0x00, 0xd0, 0xff, 0x00, 0x80, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xf8, 0x75, 0x00, 0xf8, 0x39, 0x00, 0x70, 0x1c, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0x10, 0xff, 0x00, 0xa0, 0xff, 0x00, 0xf0, 0xff, 0x01, 0xfc, 0xff, 0x00, 0xf8, 0xff, 0x00, 0xf8, 0x78, 0x00, 0xf0, 0x3c, 0x00, 0x20, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x80, 0xff, 0x00, 0x00, 0xfc, 0x00, 0x50, 0xfe, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0x50, 0xfe, 0x01, 0x00, 0xfc, 0x00, 0x80, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x20, 0x1f, 0x00, 0xb0, 0x7c, 0x00, 0xf8, 0xfc, 0x00, 0xf8, 0xff, 0x00, 0xf8, 0xff, 0x01, 0xe8, 0xff, 0x01, 0xa0, 0xff, 0x01, 0x00, 0xff, 0x00, 0x20, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x70, 0x1c, 0x00, 0xf8, 0x39, 0x00, 0xf8, 0x75, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x80, 0xff, 0x00, 0xd0, 0xff, 0x00, 0xb0, 0xff, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x1b, 0x00, 0xf0, 0x37, 0x00, 0xe0, 0x73, 0x00, 0xe0, 0x77, 0x00, 0x90, 0x7f, 0x00, 0x90, 0xff, 0x00, 0xb0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0x20, 0x4f, 0x00, 0x30, 0xcf, 0x00, 0xb0, 0xdf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x38, 0x00, 0x80, 0x7d, 0x00, 0xc0, 0xfe, 0x00, 0xe0, 0x7c, 0x00, 0xe0, 0x7e, 0x00, 0xe0, 0x9f, 0x00, 0xf0, 0x9f, 0x00, 0xf0, 0xdf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x80, 0xe3, 0x00, 0xc0, 0xf9, 0x01, 0xe0, 0xfa, 0x01, 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0xbf, 0x00, 0xf0, 0xdf, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x80, 0x4f, 0x00, 0xe0, 0xd3, 0x00, 0xf0, 0xf3, 0x01, 0xf0, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0x7f, 0x01, 0xf8, 0x5f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x4f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x3f, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x03, 0x00, 0xf8, 0xa7, 0x00, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xff, 0x01, 0xf8, 0xa7, 0x00, 0xf0, 0x03, 0x00, 0xf0, 0x1f, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0xf0, 0x8f, 0x00, 0xf0, 0x5f, 0x00, 0xf8, 0xff, 0x00, 0xf0, 0xff, 0x03, 0xf0, 0xff, 0x01, 0xe0, 0xf1, 0x01, 0xc0, 0xf3, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0xff, 0x00, 0xf0, 0xdf, 0x00, 0xf0, 0xbf, 0x00, 0xf0, 0x1f, 0x00, 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0xfa, 0x01, 0xc0, 0xf9, 0x01, 0x80, 0xe3, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x80, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf8, 0xff, 0x01, 0xf0, 0x9f, 0x01, 0xf0, 0x9f, 0x00, 0x60, 0x7e, 0x00, 0x60, 0x3c, 0x00, 0xc0, 0xfe, 0x00, 0x00, 0x78, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; static char tng_fed_destroyer_bits[VIEWS][60] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x39, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0xff, 0x00, 0xc0, 0xff, 0x01, 0x80, 0xff, 0x01, 0x00, 0xff, 0x01, 0x20, 0x7f, 0x00, 0x20, 0x07, 0x00, 0xf0, 0x03, 0x00, 0x90, 0x0b, 0x00, 0x08, 0x0e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x7f, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0xfe, 0x01, 0x40, 0xfe, 0x01, 0x20, 0xfe, 0x01, 0xf0, 0xff, 0x01, 0xc8, 0xe3, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x06, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xfc, 0x00, 0x00, 0xfc, 0x01, 0x80, 0xfd, 0x01, 0x70, 0xfc, 0x03, 0x68, 0xfe, 0x03, 0xc0, 0xff, 0x03, 0x80, 0xfb, 0x03, 0x00, 0xe1, 0x03, 0x80, 0xc1, 0x01, 0x80, 0x0d, 0x00, 0x80, 0x03, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0xf0, 0xf3, 0x01, 0xc0, 0xf8, 0x03, 0xc0, 0xfd, 0x03, 0x80, 0xff, 0x03, 0x80, 0xff, 0x03, 0xc0, 0xfd, 0x03, 0xc0, 0xf8, 0x03, 0xf0, 0xf3, 0x01, 0x00, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x03, 0x00, 0x80, 0x0d, 0x00, 0x80, 0xc1, 0x01, 0x00, 0xe1, 0x03, 0x80, 0xfb, 0x03, 0xc0, 0xff, 0x03, 0x68, 0xfe, 0x03, 0x70, 0xfc, 0x03, 0x80, 0xfd, 0x01, 0x00, 0xfc, 0x01, 0x00, 0xfc, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x03, 0x00, 0xc8, 0xe3, 0x00, 0xf0, 0xff, 0x01, 0x20, 0xfe, 0x01, 0x40, 0xfe, 0x01, 0x00, 0xfe, 0x01, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x08, 0x0e, 0x00, 0x90, 0x0b, 0x00, 0xf0, 0x03, 0x00, 0x20, 0x07, 0x00, 0x20, 0x7f, 0x00, 0x00, 0xff, 0x01, 0x80, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0xc0, 0x39, 0x00, 0xc0, 0x3f, 0x00, 0x40, 0x2f, 0x00, 0x40, 0x26, 0x00, 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xff, 0x00, 0xe0, 0x7f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x07, 0x01, 0x00, 0x9d, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x4e, 0x00, 0xe0, 0x4f, 0x00, 0xf8, 0x0f, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x3f, 0x00, 0xf0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x04, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0c, 0x00, 0x70, 0x3c, 0x01, 0xf8, 0xff, 0x00, 0xf8, 0x47, 0x00, 0xf8, 0x27, 0x00, 0xf8, 0x07, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xe0, 0x0f, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x1b, 0x00, 0x38, 0x18, 0x00, 0x7c, 0x08, 0x00, 0xfc, 0x1d, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x67, 0x01, 0xfc, 0xe3, 0x00, 0xf8, 0x1b, 0x00, 0xf8, 0x03, 0x00, 0xf0, 0x03, 0x00, 0xe0, 0x03, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0xf0, 0x01, 0x00, 0xf0, 0xf9, 0x01, 0xf8, 0x63, 0x00, 0xf8, 0x77, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x77, 0x00, 0xf8, 0x63, 0x00, 0xf0, 0xf9, 0x01, 0xf0, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0xe0, 0x03, 0x00, 0xf0, 0x03, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x1b, 0x00, 0xfc, 0xe3, 0x00, 0xfc, 0x67, 0x01, 0xfc, 0x3f, 0x00, 0xfc, 0x1d, 0x00, 0x7c, 0x08, 0x00, 0x38, 0x18, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x00, 0xe0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xf0, 0x0f, 0x00, 0xf8, 0x07, 0x00, 0xf8, 0x27, 0x00, 0xf8, 0x47, 0x00, 0xf8, 0xff, 0x00, 0x70, 0x3c, 0x01, 0x00, 0x0c, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x06, 0x00, 0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0xc0, 0x3f, 0x00, 0xe0, 0x7f, 0x00, 0xf0, 0x3f, 0x00, 0xf8, 0x3f, 0x00, 0xf8, 0x1f, 0x00, 0xf8, 0x0f, 0x00, 0xe0, 0x4f, 0x00, 0x00, 0x4e, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x07, 0x01, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; netrek-client-cow-3.3.2/findslot.h0000664000175000017500000000004513657750470016043 0ustar jamesjames/* findslot.c */ int findslot(void); netrek-client-cow-3.3.2/colors.c0000664000175000017500000000135313657750470015520 0ustar jamesjames/* colors.c * * Kevin P. Smith 6/11/89 * */ #include "config.h" #include "copyright2.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #define TRUE 1 #define FALSE 0 void getColorDefs(void) { borderColor = W_Grey; backColor = W_Black; foreColor = W_White; textColor = W_White; #ifdef RACE_COLORS shipCol[0] = W_Ind; shipCol[1] = W_Fed; shipCol[2] = W_Rom; shipCol[3] = W_Kli; shipCol[4] = W_Ori; #else shipCol[0] = W_Grey; shipCol[1] = W_Yellow; shipCol[2] = W_Red; shipCol[3] = W_Green; shipCol[4] = W_Cyan; #endif warningColor = W_Red; unColor = W_Grey; rColor = W_Red; yColor = W_Yellow; gColor = W_Green; myColor = W_White; } netrek-client-cow-3.3.2/INSTALL.SGI0000664000175000017500000001170313657750470015525 0ustar jamesjamesContributed by Stefan Stapelberg on 2009-01-10 Please find attached the patches to the netrek sound extension for SGIs. I have used the AL (audio library) so that I will work on any IRIX version from 5.2 to 6.5. I have also modified some sound-unrelated files to have a defined state for the sound engine after entering the game (e.g. green alert, etc.). The commands I use to configure the Makefile for netrek on SGI systems are: export ac_cv_lib_sun=no ac_cv_lib_sun_getpwnam=no ac_cv_lib_sun_getmntent=no ac_cv_lib_sun_yp_match=noexport export ac_cv_lib_gen_getmntent=no ac_cv_lib_socket=no ac_cv_lib_socket_main=no export CC=cc export CFLAGS="-n32 -mips4 -xansi -TARG:platform=IP27:proc=r10000 -O3 -OPT:Olimit=2000:roundoff=3:fast_io=ON -IPA:aggr_cprop=ON -INLINE:dfe=ON:list=OFF" export LDFLAGS="-n32 -mips4 -IPA:aggr_cprop=ON -INLINE:dfe=ON:list=OFF -no_unresolved" ./configure -C \ --prefix=/usr/local/games/netrek \ --with-x *** netrek-client-cow-3.2.8/system.mk Mon Dec 01 01:09:56 CET 2008 --- netrek-client-cow-3.2.8-sgi/system.mk Fri Dec 19 22:35:06 CET 2008 *************** *** 4,10 **** ############################################################################ SHELL = /bin/sh ! CC = cc -n32 -mips4 -xansi LN = ln -s PROTOIZE = protoize --- 4,10 ---- ############################################################################ SHELL = /bin/sh ! CC = cc LN = ln -s PROTOIZE = protoize *************** *** 31,43 **** # Other libraries neeeded. (All systems need -lX11 -lm) ! LIBS = -lXpm -lX11 -lm INCS = # Flags for optimizing # (-O, -g, -O2) ! #OPT = # Flags for shared libraries --- 31,43 ---- # Other libraries neeeded. (All systems need -lX11 -lm) ! LIBS = -lXpm -lX11 -lm -laudio -laudiofile INCS = # Flags for optimizing # (-O, -g, -O2) ! #OPT = -g -Wall # Flags for shared libraries *************** *** 94,101 **** MAINOBJ = main.o MAINSRC = main.c ! X11OBJ = x11window.o x11sprite.o audio.o ! X11SRC = x11window.c x11sprite.c audio.c WIN32OBJ = # gnu_win32.o winsprite.o winsndlib.o WIN32SRC = # gnu_win32.c winsprite.c winsndlib.c --- 94,101 ---- MAINOBJ = main.o MAINSRC = main.c ! X11OBJ = audio.o x11window.o x11sprite.o ! X11SRC = audio.c x11window.c x11sprite.c WIN32OBJ = # gnu_win32.o winsprite.o winsndlib.o WIN32SRC = # gnu_win32.c winsprite.c winsndlib.c *************** *** 113,119 **** SHARED = $(SL_CFLAGS) INCDIRS = $(MPINC) $(INCS) CFLAGS = $(OPT) $(EXTRACFLAGS) $(RSA_FLAGS) $(INCDIRS) ! LFLAGS = -g $(EXTRALINKFLAGS) LIBRARIES = $(LMP) $(LIBS) $(EXTRALIBS) $(SDL_LIBS) $(SDL_MIXER_LIBS) $(XXF86VM_LIBS) $(IMLIB2_LIBS) netrek-client-cow: $(RSAOBJ) $(PMAKE) null $(ROBJ) $(MAINOBJ) $(INPUTOBJ) $(X11OBJ) $(WIN32OBJ) $(RANDOMOBJ) cflags.c --- 113,119 ---- SHARED = $(SL_CFLAGS) INCDIRS = $(MPINC) $(INCS) CFLAGS = $(OPT) $(EXTRACFLAGS) $(RSA_FLAGS) $(INCDIRS) ! LFLAGS = $(EXTRALINKFLAGS) LIBRARIES = $(LMP) $(LIBS) $(EXTRALIBS) $(SDL_LIBS) $(SDL_MIXER_LIBS) $(XXF86VM_LIBS) $(IMLIB2_LIBS) netrek-client-cow: $(RSAOBJ) $(PMAKE) null $(ROBJ) $(MAINOBJ) $(INPUTOBJ) $(X11OBJ) $(WIN32OBJ) $(RANDOMOBJ) cflags.c *************** *** 131,162 **** $(TOUCH) done.libcow #rsa_box.c: mkkey $(SECKEYFILE) ! $(RSASRC): mkkey $(SECKEYFILE) ! -$(RM) $(RSASRC) ! ./mkkey -c -k $(SECKEYFILE) ! $(TOUCH) $(RSASRC) ! @echo "int sock = -1;" >>rsa_box_1.c ! ! $(SECKEYFILE): ! @echo WARNING: No keyfile found, generating a new key. ! @echo " You have 5 seconds time to abort" ! sleep 5 ! $(MAKE) newkey mkkey: mkkey.c $(RANDOMOBJ) defs.h $(CC) $(CFLAGS) $(MPINC) $(MPLIB) -o mkkey mkkey.c $(RANDOMOBJ) $(LIBRARIES) randomize: randomize.c $(RANDOMOBJ) defs.h ! $(CC) $(OPT) -o randomize randomize.c $(RANDOMOBJ) $(LIBRARIES) sound.o: sound.c ! $(CC) $(SDL_CFLAGS) -c sound.c random.o: random.c ! $(CC) -c -O random.c strdup.o: strdup.c ! $(CC) -c -O strdup.c cflags.c: mkcflags ./mkcflags "$(CC) $(CFLAGS)" "$(ARCH)" > cflags.c --- 131,162 ---- $(TOUCH) done.libcow #rsa_box.c: mkkey $(SECKEYFILE) ! #$(RSASRC): mkkey $(SECKEYFILE) ! # -$(RM) $(RSASRC) ! # ./mkkey -c -k $(SECKEYFILE) ! # $(TOUCH) $(RSASRC) ! # @echo "int sock = -1;" >>rsa_box_1.c ! # ! #$(SECKEYFILE): ! # @echo WARNING: No keyfile found, generating a new key. ! # @echo " You have 5 seconds time to abort" ! # sleep 5 ! # $(MAKE) newkey mkkey: mkkey.c $(RANDOMOBJ) defs.h $(CC) $(CFLAGS) $(MPINC) $(MPLIB) -o mkkey mkkey.c $(RANDOMOBJ) $(LIBRARIES) randomize: randomize.c $(RANDOMOBJ) defs.h ! $(CC) $(CFLAGS) -o randomize randomize.c $(RANDOMOBJ) $(LIBRARIES) sound.o: sound.c ! $(CC) $(CFLAGS) -c sound.c random.o: random.c ! $(CC) $(CFLAGS) -c random.c strdup.o: strdup.c ! $(CC) $(CFLAGS) -c strdup.c cflags.c: mkcflags ./mkcflags "$(CC) $(CFLAGS)" "$(ARCH)" > cflags.c netrek-client-cow-3.3.2/data.c0000664000175000017500000004151113657750470015130 0ustar jamesjames/* * data.c */ #include "config.h" #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" struct player *players; struct player *me = NULL; struct torp *torps; struct plasmatorp *plasmatorps; struct status *status; struct ship *myship; struct stats *mystats; struct planet *planets; struct phaser *phasers; struct message *messages; struct mctl *mctl; struct context *context; struct memory universe; int ghoststart = 0; /* is this a ghostbust * * * * restart? */ int ghost_pno = 0; /* is this a ghostbust * * * * restart? */ int keepInfo = 15; /* how many updates to keep infowins 6/1/93 LAB */ int showPlanetOwner = 0; int phaserShrink = 0; int theirPhaserShrink = 0; int shrinkPhaserOnMiss = 0; int newDashboard = 3; /* use new graphic * * * * dashboard, 6/2/93 LAB */ int old_db = 3; /* should be same as * * * * newDashboard */ int detCircle = 0; /* Show det circle on tactical */ int fastQuit = 0; int gen_distress = 0; /* generic distress/macro * * * * system support */ int niftyNewMessages = 1; int oldalert = PFGREEN; int remap[16] = {0, 1, 2, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0}; int messpend = 0; #ifdef XTRA_MESSAGE_UI int messageHUD = 0; /* Show message being typed * * * on the local display * * */ int messHoldThresh = 0; /* Threshold value for * * * putting a message on * hold * (squared) */ int messMouseDelta = 0; /* To keep track of mouse * * * movement delta * * */ #endif int lastcount = 0; int mdisplayed = 0; int udcounter = 0; int showTractorPressor = 1; int showLock = 3; int showPhaser = 2; int autoKey = 0; int extraBorder = 1; /* udp options */ int tryUdp = 1; int tryUdp1 = 1; struct plupdate pl_update[MAXPLANETS]; char buttonmap[W_BUTTON_RANGE] = {'\0', '\0', '\0', '\0', '\0', '\0'}; int lastm = 0; int delay = 0; /* delay for decaring war */ int rdelay = 0; /* delay for refitting */ int namemode = 1; int quittime = 60; int showStats = 0; int warnShields = 0; int ROMVLVS = 0; int warncount = 0; int warntimer = -1; int infomapped = 0; int mustexit = 0; int messtime = 5; int keeppeace = 0; #ifdef GATEWAY unsigned LONG netaddr = 0; /* for blessing */ #endif int msgBeep = 1; /* ATM - msg beep */ int logmess = 0; int continuetractor = 1; int tcounter = 2; int showlocal = 2; int showgalactic = 2; int pixMissing = 0; int pixFlags = 0; char *title = NULL; char *shipnos = "0123456789abcdefghijklmnopqrstuvwxyz"; #ifndef RSA /* Um, not that I could find... SAC 1 Aug 1996 */ /* Search for it in the rsa_box*.c files ... 007 15 Aug 1996 */ int sock = -1; /* randomized into RSA code * * * 08/24/95 [007] */ #endif int xtrekPort = -1; int queuePos = -1; int pickOk = -1; int lastRank = -1; int promoted = 0; #ifdef ROTATERACE int rotate = 0; int rotate_deg = 0; #endif int loginAccept = -1; unsigned localflags = 0; int tournMask = 15; int nextSocket = 0; /* socket to use when we get * * * * ghostbusted... */ char *serverName = NULL; /* if there's an rc file, defaultsFile gets set by initDefaults; * if there isn't one, we want to know */ char defaultsFile[80] = ""; char *myname = NULL; int loggedIn = 0; int reinitPlanets = 0; int timerDelay = 200000; /* micro secs between * * * * updates */ int redrawDelay = 0; /* 1/10 secs beetween * * * * redraws */ int reportKills = 1; /* report kill messages (in * * * * review window)? */ int phaserWindow = 0; /* What window to show * * * phaser msgs in */ #ifdef PHASER_STATS int phaserShowStats = 0; /* How to show phaser stats */ int phaserStatTry = 0; /* Try/attemps to phaser */ int phaserStatHit = 0; /* Number of hits */ #endif int censorMessages = 0; #ifdef RECORDGAME FILE *recordFile = NULL; /* recorder: slurp packets * * * * * here */ FILE *recordIndexFile = NULL; FILE *recordContextFile = NULL; int playback = 0; #endif FILE *logFile = NULL; /* log messages to this file * * */ int scanplayer = 0; /* who to scan */ int showTractor = 1; /* show visible tractor * * * * beams */ int commMode = 0; /* UDP: 0=TCP only, 1=UDP * * * * updates */ int commModeReq = 0; /* UDP: req for comm * * * * protocol change */ int commStatus = 0; /* UDP: used when switching * * * * protocols */ int commSwitchTimeout = 0; /* UDP: don't wait forever */ int udpTotal = 1; /* UDP: total #of packets * * * * received */ int udpDropped = 0; /* UDP: count of packets * * * * dropped */ int udpRecentDropped = 0; /* UDP: #of packets dropped * * * * recently */ int udpSock = -1; /* UDP: the socket */ int udpDebug = 0; /* UDP: debugging info * * * * on/off */ int udpClientSend = 1; /* UDP: send our packets * * * * using UDP? */ int udpClientRecv = 1; /* UDP: receive with simple * * * * UDP */ int udpSequenceChk = 1; /* UDP: check sequence * * * * numbers */ int weaponUpdate = 0; /* Have any weapon packets * * * * * been received recently */ #ifdef GATEWAY int gw_serv_port, gw_port, gw_local_port; /* UDP */ char *gw_mach = NULL; /* UDP */ #endif /* for router-based firewalls, we need to tunnel through at a specific port */ int baseLocalPort = 0; /* UDP */ int debug = 0; int messageon = 0; #ifdef RSA char testdata[16]; int RSA_Client = 1; #endif int SBhours = 0; #ifdef SHORT_PACKETS int why_dead = 0; int tryShort = 1; /* for .xtrekrc option */ int tryShort1 = 1; int recv_short = 0; int recv_mesg = 1; int recv_kmesg = 1; int recv_threshold = 0; char recv_threshold_s[8] = {'0', '\0'}; int recv_warn = 1; #endif int netstat = 0; int netstatfreq = 5; W_Window netstatWin, lMeter; int client_ups = 50; /* client requested updates per second */ int server_ups = 50; /* server responded updates per second */ int server_fps = 50; /* server configured frames per second */ #ifdef META char *metaserver = "metaserver.netrek.org"; int metaport = 3521; #endif #ifdef NBT struct macro_list macro[MAX_MACRO]; /* NBT 2/26/93 */ int MacroMode = 0; int macrocnt = 0; #endif extern double Sin[], Cos[]; W_Icon stipple, clockpic, icon; W_Color borderColor, backColor, textColor, myColor, warningColor, shipCol[5], rColor, yColor, gColor, unColor, foreColor; W_Icon expview[EX_FRAMES]; W_Icon sbexpview[SBEXPVIEWS]; W_Icon cloud[NUMDETFRAMES]; W_Icon plasmacloud[NUMDETFRAMES]; W_Icon etorp, mtorp; W_Icon eplasmatorp, mplasmatorp; #ifdef VSHIELD_BITMAPS W_Icon shield[SHIELD_FRAMES], cloakicon; int VShieldBitmaps = 1; #else W_Icon shield, cloakicon; #endif W_Icon tractbits, pressbits; /* ATM - visible tractor */ W_Icon fed_bitmaps[NUM_TYPES][VIEWS], kli_bitmaps[NUM_TYPES][VIEWS], rom_bitmaps[NUM_TYPES][VIEWS], ori_bitmaps[NUM_TYPES][VIEWS], ind_bitmaps[NUM_TYPES][VIEWS], ROMVLVS_bitmap[VIEWS]; W_Icon bplanets[7]; W_Icon mbplanets[7]; W_Icon bplanets2[8]; W_Icon mbplanets2[8]; W_Icon bplanets3[NUM_PLANET_BITMAPS2]; /* isae: Added this */ W_Icon mbplanets3[NUM_PLANET_BITMAPS2]; /* isae: Added this */ W_Icon noinfoplanet; /* jn - SMARTMACRO */ #ifdef NEWMACRO int MacroNum = 0; #endif /* NEWMACRO */ char lastMessage[80]; char *classes[] = {"SC", "DD", "CA", "BB", "AS", "SB", "GA", "AT"}; char teamlet[] = {'I', 'F', 'R', 'X', 'K', 'X', 'X', 'X', 'O', 'X', 'X', 'X', 'X', 'X', 'X', 'A'}; char *teamshort[16] = {"IND", "FED", "ROM", "X", "KLI", "X", "X", "X", "ORI", "X", "X", "X", "X", "X", "X", "ALL"}; char pseudo[PSEUDOSIZE]; char defpasswd[PSEUDOSIZE]; char login[PSEUDOSIZE]; struct ship shipvals[NUM_TYPES]; /* 10 Aug 96 - Added curt (short) names -SAC */ struct rank default_ranks[DEFAULT_NUMRANKS] = { {0.0, 0.0, 0.0, "Ensign", "Esgn"}, {2.0, 1.0, 0.0, "Lieutenant", "Lt "}, {4.0, 2.0, 0.0, "Lt. Cmdr.", "LtCm"}, {8.0, 3.0, 0.0, "Commander", "Cder",}, {15.0, 4.0, 0.0, "Captain", "Capt"}, {20.0, 5.0, 0.0, "Flt. Capt.", "FltC"}, {25.0, 6.0, 0.0, "Commodore", "Cdor"}, {30.0, 7.0, 0.0, "Rear Adm.", "RAdm"}, {40.0, 8.0, 0.0, "Admiral", "Admr"}}; struct rank *ranks = NULL; int nranks = 0; W_Window messagew, w, mapw, statwin, baseWin = 0, infow, iconWin, tstatw, war, warnw, helpWin, teamWin[4], qwin, messwa, messwt, messwi, messwk, playerw, planetw, rankw, optionWin = 0, reviewWin; W_Window scanw, udpWin, phaserwin; #ifdef SHORT_PACKETS W_Window spWin = NULL; #endif #ifdef NBT W_Window macroWin = NULL; #endif int ping = 0; /* to ping or not to ping */ LONG packets_sent = 0; /* # all packets sent to * * * * server */ LONG packets_received = 0; /* # all packets received */ W_Window pStats = NULL; char deathmessage[80]; char outmessage[85]; /* 80 chars made sun4's core * * * * dump and I'm too lazy * to * * calculate the * exact * * number required * here */ char *xdisplay_name = NULL; int UseNewDistress = 0; int UseNewMacro = 1; int UseSmartMacro = 1; int rejectMacro = 0; int maskrecip = 0; unsigned char singleMacro[MAX_MACRO] = ""; int enemyPhasers = 1; char cloakChars[3] = "??"; int showIND = 0; int newPlist = 0; /* tried to automate this as much as possible... the entries are * the * character, string identifier, and the default macro for * each distress * type. */ /* the index into distmacro array should correspond with the correct * dist_type */ #define NUM_DIST 27 struct dmacro_list dist_prefered[NUM_DIST]; /* the index into distmacro array should correspond with the correct * dist_type */ /* the character specification is ignored now, kept here anyway for reference */ struct dmacro_list dist_defaults[] = { {'X', "no zero", "this should never get looked at"}, /* ^t */ {'\xd4', "taking", " %T%c->%O (%S) Carrying %a to %l%?%n>-1%{ @ %n%}\0"}, /* ^o */ {'\xcf', "ogg", " %T%c->%O Help Ogg %p at %l\0"}, /* ^b */ {'\xc2', "bomb", " %T%c->%O %?%n>4%{bomb %l @ %n%!bomb %l%}\0"}, /* ^c */ {'\xc3', "space_control", " %T%c->%O Help Control at %L\0"}, /* ^1 */ {'\x91', "save_planet", " %T%c->%O Emergency at %L!!!!\0"}, /* ^2 */ {'\x92', "base_ogg", " %T%c->%O Sync with --]> %g <[-- OGG ogg OGG base!!\0"}, /* ^3 */ {'\x93', "help1", " %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies.\0"}, /* ^4 */ {'\x94', "help2", " %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies.\0"}, /* ^e */ {'\xc5', "escorting", " %T%c->%O ESCORTING %g (%d%%D %s%%S %f%%F)\0"}, /* ^p */ {'\xd0', "ogging", " %T%c->%O Ogging %h\0"}, /* ^m */ {'\xcd', "bombing", " %T%c->%O Bombing %l @ %n\0"}, /* ^l */ {'\xcc', "controlling", " %T%c->%O Controlling at %l\0"}, /* ^5 */ {'\x95', "asw", " %T%c->%O Anti-bombing %p near %b.\0"}, /* ^6 */ {'\x96', "asbomb", " %T%c->%O DON'T BOMB %l. Let me bomb it (%S)\0"}, /* ^7 */ {'\x97', "doing1", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%% dam, %s%% shd, %f%% fuel)\0"}, /* ^8 */ {'\x98', "doing2", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%% dam, %s%% shd, %f%% fuel)\0"}, /* ^f */ {'\xc6', "free_beer", " %T%c->%O %p is free beer\0"}, /* ^n */ {'\xce', "no_gas", " %T%c->%O %p @ %l has no gas\0"}, /* ^h */ {'\xc8', "crippled", " %T%c->%O %p @ %l crippled\0"}, /* ^9 */ {'\x99', "pickup", " %T%c->%O %p++ @ %l\0"}, /* ^0 */ {'\x90', "pop", " %T%c->%O %l%?%n>-1%{ @ %n%}!\0"}, /* F */ {'F', "carrying", " %T%c->%O %?%S=SB%{Your Starbase is c%!C%}arrying %?%a>0%{%a%!NO%} arm%?%a=1%{y%!ies%}.\0"}, /* ^@ */ {'\xa0', "other1", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%%D, %s%%S, %f%%F)\0"}, /* ^# */ {'\x83', "other2", " %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%%D, %s%%S, %f%%F)\0"}, /* E */ {'E', "help", " %T%c->%O Help(%S)! %s%% shd, %d%% dmg, %f%% fuel,%?%S=SB%{ %w%% wtmp,%!%}%E%{ ETEMP!%}%W%{ WTEMP!%} %a armies!\0"}, {'\0', '\0', '\0'}, }; struct dmacro_list *distmacro = dist_defaults; int sizedist = sizeof(dist_defaults); #ifdef BEEPLITE char *distlite[NUM_DIST] = { NULL, "/c/l/0/|%T%c Taking %L|", "/|Ogg %p|", "/|Bomb %L|", "/|Control %L|", "/|Save %L|", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL }; int DefLite = 1; int UseLite = 1; int emph_planet_seq_n[MAXPLANETS] = {0,}; int emph_player_seq_n[MAXPLAYER] = {0,}; W_Icon emph_planet_seq[10]; W_Icon emph_player_seq[10]; W_Icon emph_player_seql[10]; int beep_lite_cycle_time_player = 10; int beep_lite_cycle_time_planet = 10; int liteflag = 0; char F_beeplite_flags = LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL | LITE_SELF | LITE_PLANETS | LITE_SOUNDS | LITE_TTS; int tts_len = 0; int tts_max_len = 40; int tts_width = 0; int tts_timer = 0; int tts_time = 25; int tts_pos = TWINSIDE / 2 - 16; /* as found in redraw.c * * * * originally */ char lastIn[100]; #endif /* BEEPLITE */ #ifdef RCM /* Receiver configurable * * * Server messages */ struct dmacro_list rcm_msg[] = { {'0', "none", "Unknown RCM message"}, {'1', "kill", "GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%}) was kill %?%d>0%{%k%!NO CREDIT)%} for %u (%r%p) %?%w>0%{%W%!%}"}, {'2', "planet", "GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%} killed by %l (%z) %?%w>0%{%W%!%}"}, {'3', "bomb", "%N->%Z We are being attacked by %i (%T%c) who is %d%% damaged."}, {'4', "destroy", "%N->%Z %N destroyed by %i (%T%c)"}, {'5', "take", "%N->%O %N taken by %i (%T%c)"}, {'6', "ghostbust", "GOD->ALL %i (%S) (%T%c) was kill %k for the GhostBusters"}, {'\0', '\0', '\0'}, }; #endif /* RCM */ int highlightFriendlyPhasers = 0; #ifdef IGNORE_SIGNALS_SEGV_BUS /* KRP */ /* Handle (hopefully) non-fatal segmentation and bus faults. */ int ignore_signals = 0; #endif #ifdef MOTION_MOUSE /* KRP */ int motion_mouse = 0; int user_motion_thresh = 16; int motion_mouse_enablable = 1; int motion_mouse_steering = 0; #endif #ifdef SHIFTED_MOUSE /* KRP */ int extended_mouse = 0; #endif int ignoreCaps = 1; /* Default is to ignore the * * * * Capslock key SRS */ #ifdef MOUSE_AS_SHIFT /* KRP */ int mouse_as_shift = 0; int b1_as_shift = 0; int b2_as_shift = 0; int b3_as_shift = 0; #endif #ifdef TNG_FED_BITMAPS int use_tng_fed_bitmaps = 0; W_Icon tng_fed_bitmaps[NUM_TYPES][VIEWS]; #endif #ifdef VARY_HULL W_Icon hull[8]; int vary_hull = 0; #endif #ifdef XTREKRC_HELP W_Window defWin = NULL; #endif #ifdef CONTROL_KEY int use_control_key = 1; #endif #ifdef DOC_WIN W_Window docwin = NULL, xtrekrcwin = NULL; int maxdoclines = 0, maxxtrekrclines = 0; #endif W_Icon bplanets4[8]; W_Icon mbplanets4[8]; #ifdef REFRESH_INTERVAL int refresh_interval = 0; #endif int max_fd = 3; #ifdef TOOLS W_Window toolsWin = NULL; int shelltools = 1; struct key_list macroKeys[MAX_KEY]; unsigned char keys[MAX_KEY] = ""; char *wwwlink = "netscape -remote \"openURL(%s)\""; char *upgradeURL = "http://cow.netrek.org/current/index.html#%s"; char *releaseURL = "http://cow.netrek.org/%s/README.html#pl%i"; char *bugURL = "http://sourceforge.net/bugs/?group_id=968"; /* char *bugURL = "http://bugzilla.us.netrek.org/cow?version=%s&pl=%i&arch=%s"; */ #endif #ifdef SOUND int sound_init = 1; int sound_toggle = 0; char *sounddir = NULL; W_Window soundWin = NULL; #endif #ifdef HOCKEY_LINES int hockey_s_lines = 0; struct s_line s_lines[NUM_HOCKEY_LINES + 1]; int normal_s_lines = 0; #endif #ifdef MULTILINE_MACROS int multiline_enabled = 0; #endif #ifdef FEATURE_PACKETS int F_feature_packets = 0; #endif int F_cloak_maxwarp = 0; int F_self_8flags = 1; int F_self_8flags2 = 0; int F_ship_cap = 0; int F_sp_generic_32 = 1; char A_sp_generic_32 = 0; int F_agri_pix = 1; #ifdef WARP_DEAD int F_dead_warp = 0; #endif int F_many_self = 0; #ifdef UDP_PORTSWAP int portSwap = 1; #endif int F_show_all_tractors = 1; int fastGuest = 0; int identityBlind = 0; int versionHide = 0; int F_sp_rank = 0; int F_sp_ltd = 0; int F_tips = 1; char *program = NULL; int small_screen = 0; netrek-client-cow-3.3.2/strdup.c0000664000175000017500000000036513657750470015542 0ustar jamesjames#include char * strdup (strptr) char *strptr; { char *charptr; charptr = (char *) malloc (sizeof (char) * strlen (strptr) + 1); if (charptr == NULL) return (charptr); strcpy (charptr, strptr); return (charptr); } netrek-client-cow-3.3.2/ping.h0000664000175000017500000000014613657750470015160 0ustar jamesjames/* ping.c */ void handlePing(struct ping_spacket *packet); void startPing(void); void stopPing(void); netrek-client-cow-3.3.2/stats.h0000664000175000017500000000016013657750470015355 0ustar jamesjames/* stats.c */ void initStats(void); void redrawStats(void); void updateStats(void); void calibrate_stats(void); netrek-client-cow-3.3.2/README.2.020000664000175000017500000001036213657750470015313 0ustar jamesjamesThis file contains the most recent changes to the COW client, with example .xtrekrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience. ***************************************************************** 1) Change Log ***************************************************************** 2.02 pl2 May 31, 1997 - final stable NO pixmap release - NO expiry date - NO background images, kathy, stars, ... - NO colored planets - BEEPLITE is off (exept TTS and sound) unless explicitly turned on by server 2.02 pl1 Feb. 28, 1997 - GMP and XPM autoconfig fixes [siegl] 2.02 pl0 Feb. 15, 1997 - scrolling message windows stolen from BRMH [siegl] - colored planets on galactic map [kellen] - high color fixes [kellen] - phaser stats and fixed PhaserMsg [greynite] - replace all exits with clean returns [siegl] - netscape plugin version included [siegl] - GMP 2.0 support [siegl] ***************************************************************** 2) Cut and past changes to make COW work like it used to. ***************************************************************** 2.02 pl2 Borgish features have been completley removed and are not able to turn on. 2.00 pl0 The showPhaser default has been replaced by PhaserMsg which translates in the following way: Old showPhaser: 0 = don't show 1 = show on kill window 2 = show on phaser window 3 = show on total review window only New PhaserMsg: 0 = Don't log phaser hits 1 = Log phasers on all window 2 = Log phasers on team window 3 = Log phasers on indiv window 4 = Log phasers on kill window 5 = Log phasers on review window If the phaser window is mapped it is logged there aditionally. Message windows have now Scrollbars which are on per default. You get the the old behaviour by turning it off: ScrollBar: off ***************************************************************** 3) Cut and past changes to turn on *all* new features. ***************************************************************** 2.00 pl0 All new .xtrekrc entrys with defaults are: # PhaserMsg: 2 # PhaserStats: off # colorgalactic: off # ownerhalo: off # showstars: off # macroKey: X # ScrollBar: on # ScrollBarWidth: 5 # ScrollSaveLines: 100 # message.mapped: 1 # messageHUD: 0 # messageHoldThresh: 0 Just turn them all on to get the new features **************************************************************** 4) New manual sections **************************************************************** Can use color pixmaps instead of bitmaps on galactic. resource-- colorgalactic: off Use starry background on galactic map. resource-- showstars: off Draw a circle in the owning team's color around planets (pixmaps only) resource-- ownerhalo: off o Phaser hits can now be logged in different places. resource-- PhaserMsg: 2 0 = Don't log phaser hits 1 = Log phasers on all window 2 = Log phasers on team window 3 = Log phasers on indiv window 4 = Log phasers on kill window 5 = Log phasers on review window **************************************************************** 5) Changes details **************************************************************** Detailed changes by Michael Kellen: + Pitiful but legible greyscale pixmaps. The greyscale maps should be used automatically on a Greyscale visual. I have not checked to see if this actually works automagically. It depends upon the value of W_Visual->class. [nod to James Soutter for the idea] + FEATURE PACKET support for the agri-specific bitmaps. If the server does not understand feature packets or sets AGRI_PIXMAP to false, the regular planet pixmap is used. [nod to rgn comments] + A colored circle can be drawn around the pixmap to indicate the team which owns the planet. [nod to someone ... I lost the letter] + On/Off controls for all pixmap stuff in both rcfile & options menu + Compatible with -n startup option + Compatible with private colormap + Turns off pixmaps and remembers to keep them off if they cannot be created for some reason [nod to PictureMeNaked on the crappy Xterm] - Artwork still sucks. [raspberry to me] netrek-client-cow-3.3.2/map.h0000664000175000017500000000133513657750470015001 0ustar jamesjames/* * map.h * * Functions to maintain the galactic map. This file is a merger * of code from redraw.c, which was too big before, and planets.c, * which was too small. * */ #ifndef h_map #define h_map /* * Global Variables: * * redrawall -- Erase and redraw the galactic? * redrawPlayer[] -- Flag for each player on whether their position * on the galactic is not out of date. */ extern int redrawall; extern unsigned char redrawPlayer[]; /* Global Functions */ void initPlanets(void); /* * Make a rough map of the location of all the planets to help decide * whether a ship is possibly overlapping a planet. */ void map(void); /* * Update the 'galactic' map. */ #endif /*defined h_map */ netrek-client-cow-3.3.2/war.h0000664000175000017500000000010113657750470015003 0ustar jamesjames/* war.c */ void warwindow(void); void waraction(W_Event *data); netrek-client-cow-3.3.2/distress.c0000664000175000017500000004742113657750470016065 0ustar jamesjames/* * distress.c */ #include "config.h" #include "copyright.h" #include #include INC_STDLIB #include #include #ifndef SERVER #include "Wlib.h" #endif #include "defs.h" #include "struct.h" #include "data.h" #include "warning.h" #include "string_util.h" /* #$!@$#% length of address field of messages */ #define ADDRLEN 10 /* file scope prototypes */ static void testmacro (char *bufa, char *bufb, int *inda, int *indb); static int solvetest (char *bufa, int *inda); static int condmacro (char *bufa, char *bufb, int *inda, int *indb, int flag); static int skipmacro (char *buf, int index); /* The two in-line defs that follow enable us to avoid calling strcat over * and over again. */ char *pappend; #define APPEND(ptr,str) \ pappend = str; \ while(*pappend) \ *ptr++ = *pappend++; #define APPEND_CAP(ptr,cap,str) \ pappend = str; \ while(*pappend) \ { \ *ptr++ = (cap ? toupper(*pappend) : *pappend); \ pappend++; \ } /* This is a hacked version from the K&R book. Basically it puts into * in reverse and then reverses the string... MH. 10-18-93 */ int itoa2(int n, char *s) { int i, c, j, len; if ((c = n) < 0) n = -n; i = 0; do { s[i++] = n % 10 + '0'; } while ((n /= 10) > 0); if (c < 0) s[i++] = '-'; s[i] = '\0'; len = i--; for (j = 0; i > j; j++, i--) { c = s[i]; s[i] = s[j]; s[j] = c; } return len; } /* Like APPEND, and APPEND_CAP, APPEND_INT is an in-line function that stops * us from calling sprintf over and over again. */ #define APPEND_INT(ptr, i) \ ptr += itoa2(i, ptr); #ifdef SERVER #define ADDRLEN 10 #define MAXMACLEN 85 extern char *shiptypes[]; #define warning(x) fprintf(stderr,x) #endif #ifdef RCM extern char *whydeadmess[]; #endif /* This takes an MDISTR flagged message and makes it into a dist struct */ void HandleGenDistr(char *message, unsigned char from, unsigned char to, struct distress *dist) { char *mtext; unsigned char i; mtext = &message[ADDRLEN]; #ifndef SERVER MZERO((char *) dist, sizeof(dist)); #else bzero((char *) dist, sizeof(dist)); #endif dist->sender = from; dist->distype = mtext[0] & 0x1f; dist->macroflag = ((mtext[0] & 0x20) > 0); dist->fuelp = mtext[1] & 0x7f; dist->dam = mtext[2] & 0x7f; dist->shld = mtext[3] & 0x7f; dist->etmp = mtext[4] & 0x7f; dist->wtmp = mtext[5] & 0x7f; dist->arms = mtext[6] & 0x1f; dist->sts = mtext[7] & 0x7f; dist->wtmpflag = ((dist->sts & PFWEP) > 0) ? 1 : 0; dist->etempflag = ((dist->sts & PFENG) > 0) ? 1 : 0; dist->cloakflag = ((dist->sts & PFCLOAK) > 0) ? 1 : 0; dist->close_pl = mtext[8] & 0x7f; dist->close_en = mtext[9] & 0x7f; dist->tclose_pl = mtext[10] & 0x7f; dist->tclose_en = mtext[11] & 0x7f; dist->tclose_j = mtext[12] & 0x7f; dist->close_j = mtext[13] & 0x7f; dist->tclose_fr = mtext[14] & 0x7f; dist->close_fr = mtext[15] & 0x7f; i = 0; while ((mtext[16 + i] & 0xc0) == 0xc0 && (i < 6)) { dist->cclist[i] = mtext[16 + i] & 0x1f; i++; } dist->cclist[i] = mtext[16 + i]; if (dist->cclist[i] == 0x80) dist->pre_app = 1; else dist->pre_app = 0; dist->preappend[0] = '\0'; if (mtext[16 + i + 1] != '\0') { STRNCPY(dist->preappend, mtext + 16 + i + 1, MSG_LEN - 1); dist->preappend[MSG_LEN - 1] = '\0'; } } /* this converts a dist struct to the appropriate text (excludes F1->FED text * bit).. sorry if this is not what we said earlier jeff.. but I lost the * paper towel I wrote it all down on */ void Dist2Mesg(struct distress *dist, char *buf) { int len, i; sprintf(buf, "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c", (dist->macroflag << 5) + (dist->distype), dist->fuelp | 0x80, dist->dam | 0x80, dist->shld | 0x80, dist->etmp | 0x80, dist->wtmp | 0x80, dist->arms | 0x80, dist->sts | 0x80, dist->close_pl | 0x80, dist->close_en | 0x80, dist->tclose_pl | 0x80, dist->tclose_en | 0x80, dist->tclose_j | 0x80, dist->close_j | 0x80, dist->tclose_fr | 0x80, dist->close_fr | 0x80); /* cclist better be terminated properly otherwise we hose here */ i = 0; while (((dist->cclist[i] & 0xc0) == 0xc0)) { buf[16 + i] = dist->cclist[i]; i++; } /* get the pre/append cclist terminator in there */ buf[16 + i] = dist->cclist[i]; buf[16 + i + 1] = '\0'; len = 16 + i + 1; if (dist->preappend[0] != '\0') { strncat(buf, dist->preappend, MSG_LEN - len); /* false sense of * * * security? */ buf[MSG_LEN - 1] = '\0'; } } /* small permutation on the newmacro code... this takes a pointer to a * distress structure and a pointer to a macro syntax string, and converts it * into a line of text. 9/1/93 - jn */ int makedistress(struct distress *dist, char *cry, char *pm) /* the info */ /* the call for help! (output) - should be array */ /* macro to parse, used for distress and macro */ { char buf1[10 * MAXMACLEN]; char *pbuf1; char buf2[10 * MAXMACLEN]; char buf3[10 * MAXMACLEN]; char tmp[10 * MAXMACLEN]; int index = 0; int index2 = 0; int index3 = 0; int cap = 0; struct player *sender; struct player *j; struct planet *l; char *strcap(char *s); #ifndef SERVER extern int ping_tloss_sc; /* total % loss 0--100, * * * * server to client */ extern int ping_tloss_cs; /* total % loss 0--100, * * * * client to server */ extern int ping_av; /* average rt */ extern int ping_sd; /* standard deviation */ #endif char c; sender = &players[dist->sender]; if (!(*pm)) { cry[0] = '\0'; return 0; } buf1[0] = '\0'; pbuf1 = buf1; /* first step is to substitute variables */ while (*pm) { if (*pm == '%') { pm++; if (!*pm) continue; switch (c = *(pm++)) { case ' ': *pbuf1++ = ' '; break; case 'O': /* push a 3 character team * * * * name into buf */ cap = 1; case 'o': /* push a 3 character team * * * * name into buf */ if (sender->p_team != ALLTEAM) APPEND_CAP(pbuf1, cap, teamshort[sender->p_team]); cap = 0; break; case 'a': /* push army number into buf * */ APPEND_INT(pbuf1, dist->arms); break; case 'd': /* push damage into buf */ APPEND_INT(pbuf1, dist->dam); break; case 's': /* push shields into buf */ APPEND_INT(pbuf1, dist->shld); break; case 'f': /* push fuel into buf */ APPEND_INT(pbuf1, dist->fuelp); break; case 'w': /* push wtemp into buf */ APPEND_INT(pbuf1, dist->wtmp); break; case 'e': /* push etemp into buf */ APPEND_INT(pbuf1, dist->etmp); break; case 'P': /* push player id into buf */ case 'G': /* push friendly player id * * * * into buf */ case 'H': /* push enemy target player * * * id into buf */ case 'p': /* push player id into buf */ case 'g': /* push friendly player id * * * * into buf */ case 'h': /* push enemy target player * * * id into buf */ switch (c) { case 'p': j = &players[dist->tclose_j]; break; case 'g': j = &players[dist->tclose_fr]; break; case 'h': j = &players[dist->tclose_en]; break; case 'P': j = &players[dist->close_j]; break; case 'G': j = &players[dist->close_fr]; break; default: j = &players[dist->close_en]; break; } *pbuf1++ = j->p_mapchars[1]; break; case 'n': /* push planet armies into * * * * buf */ l = &planets[dist->tclose_pl]; APPEND_INT(pbuf1, ((l->pl_info & sender->p_team) ? l->pl_armies : -1)); break; case 'B': cap = 1; case 'b': /* push planet into buf */ l = &planets[dist->close_pl]; tmp[0] = l->pl_name[0] - 'A' + 'a'; tmp[1] = l->pl_name[1]; tmp[2] = l->pl_name[2]; tmp[3] = '\0'; APPEND_CAP(pbuf1, cap, tmp); cap = 0; break; case 'L': cap = 1; case 'l': /* push planet into buf */ l = &planets[dist->tclose_pl]; tmp[0] = l->pl_name[0] - 'A' + 'a'; tmp[1] = l->pl_name[1]; tmp[2] = l->pl_name[2]; tmp[3] = '\0'; APPEND_CAP(pbuf1, cap, tmp); cap = 0; break; case 'N': /* push planet into buf */ l = &planets[dist->tclose_pl]; APPEND(pbuf1, l->pl_name); break; case 'Z': /* push a 3 character team * * * * name into buf */ cap = 1; case 'z': /* push a 3 character team * * * * name into buf */ l = &planets[dist->tclose_pl]; APPEND_CAP(pbuf1, cap, teamshort[l->pl_owner]); cap = 0; break; case 't': /* push a team character * * * into buf */ l = &planets[dist->tclose_pl]; *pbuf1++ = teamlet[l->pl_owner]; break; case 'T': /* push my team into buf */ *pbuf1++ = teamlet[sender->p_team]; break; case 'r': /* push target into buf */ j = &players[dist->tclose_j]; *pbuf1++ = teamlet[j->p_team]; break; case 'c': /* push my id char into buf */ *pbuf1++ = sender->p_mapchars[1]; break; case 'W': /* push WTEMP flag into buf */ #ifdef RCM if (dist->distype == rcm) /* whydead for RCM */ { APPEND(pbuf1, whydeadmess[dist->wtmp]); } else #endif if (dist->wtmpflag) *pbuf1++ = '1'; else *pbuf1++ = '0'; break; case 'E': /* push ETEMP flag into buf */ if (dist->etempflag) *pbuf1++ = '1'; else *pbuf1++ = '0'; break; case 'K': cap = 1; case 'k': if (cap) j = &players[dist->tclose_j]; else j = sender; #ifdef RCM if (dist->distype == rcm) { APPEND_INT(pbuf1, dist->dam); *pbuf1++ = '.'; itoapad(dist->shld, pbuf1, 1, 2); pbuf1 += 2; } else { #endif sprintf(tmp, "%5.2f", j->p_kills); APPEND(pbuf1, tmp); #ifdef RCM } #endif break; case 'U': /* push player name into buf * */ cap = 1; case 'u': /* push player name into buf * */ j = &players[dist->tclose_j]; APPEND_CAP(pbuf1, cap, j->p_name); cap = 0; break; case 'I': /* my player name into buf */ cap = 1; case 'i': /* my player name into buf */ APPEND_CAP(pbuf1, cap, sender->p_name); cap = 0; break; case 'S': /* push ship type into buf */ #ifndef SERVER APPEND(pbuf1, classes[sender->p_ship.s_type]); #else APPEND(pbuf1, shiptypes[sender->p_ship.s_type]); #endif break; #ifdef SERVER case 'v': /* push average ping round * * * * trip time into buf */ case 'V': /* push ping stdev into buf */ case 'y': /* push packet loss into buf * */ *pbuf1++ = '0'; case 'M': /* push capitalized * * * lastMessage into buf */ case 'm': /* push lastMessage into buf * */ break; #else case 'M': /* push capitalized * * * lastMessage into buf */ cap = 1; case 'm': /* push lastMessage into buf * */ APPEND_CAP(pbuf1, cap, lastMessage); cap = 0; break; case 'v': /* push average ping round * * * * trip time into buf */ APPEND_INT(pbuf1, ping_av); break; case 'V': /* push ping stdev into buf */ APPEND_INT(pbuf1, ping_sd); break; case 'y': /* push packet loss into buf * */ /* this is the weighting formula used be socket.c ntserv */ APPEND_INT(pbuf1, (2 * ping_tloss_sc + ping_tloss_cs) / 3); break; #endif case '*': /* push %} into buf */ case '}': /* push %} into buf */ case '{': /* push %{ into buf */ case '!': /* push %! into buf */ case '?': /* push %? into buf */ case '%': /* push %% into buf */ *pbuf1++ = '%'; *pbuf1++ = c; break; case '>': /* push tab stop */ c = '\0'; if (*pm >= '0' && *pm <= '9') c = (*pm++) - '0'; if (*pm >= '0' && *pm <= '9') c = c * 10 + ((*pm++) - '0'); if (c) { *pbuf1++ = '%'; *pbuf1++ = '>'; *pbuf1++ = c; } break; default: /* try to continue bad macro character is skipped entirely, the * * * message will be parsed without whatever %. has occurred. * - * * jn */ warning("Bad Macro character in distress!"); fprintf(stderr, "Unrecognizable special character in distress pass 1: %c\n", *(pm - 1)); break; } } else { *pbuf1++ = *pm++; } } *pbuf1 = '\0'; /* second step is to evaluate tests, buf1->buf2 */ testmacro(buf1, buf2, &index, &index2); buf2[index2] = '\0'; if (index2 <= 0) { cry[0] = '\0'; return 0; } index2 = 0; /* third step is to include conditional text, buf2->buf3 */ condmacro(buf2, buf3, &index2, &index3, 1); if (index3 <= 0) { cry[0] = '\0'; return 0; } buf3[index3] = '\0'; cry[0] = '\0'; strncat(cry, buf3, MSG_LEN - 1); return index3; } static void testmacro(char *bufa, char *bufb, int *inda, int *indb) { int state = 0; char c; if (*indb >= 10 * MAXMACLEN) return; /* maybe we should do something more "safe" here (and at other returns)? */ while (bufa[*inda] && (*indb < 10 * MAXMACLEN)) { if (state) { switch (c = bufa[(*inda)++]) { case '*': /* push %* into buf */ case '%': /* push %% into buf */ case '{': /* push %{ into buf */ case '}': /* push %} into buf */ case '!': /* push %! into buf */ case '>': /* push %>n into buf */ if (*indb < 10 * MAXMACLEN - 2) { bufb[*indb] = '%'; (*indb)++; bufb[*indb] = c; (*indb)++; if (c == '>') bufb[(*indb)++] = bufa[(*inda)++]; } else return; /* we are full, so we are * * * done */ state = 0; continue; break; case '?': /* the dreaded conditional, * * * evaluate it */ bufb[*indb] = '0' + solvetest(bufa, inda); (*indb)++; state = 0; continue; break; default: warning("Bad character in Macro!"); printf("Unrecognizable special character in macro pass2: %c Trying to continue.\n", bufa[(*inda) - 1]); state = 0; continue; break; } } if (bufa[*inda] == '%') { state++; (*inda)++; continue; } state = 0; if (*indb < 10 * MAXMACLEN) { bufb[*indb] = bufa[*inda]; (*inda)++; (*indb)++; } else return; } } static int solvetest(char *bufa, int *inda) { int state = 0; char bufh[10 * MAXMACLEN]; char bufc[10 * MAXMACLEN]; int indh = 0, indc = 0, i; char operation; while (bufa[*inda] && bufa[*inda] != '<' && bufa[*inda] != '>' && bufa[*inda] != '=') { bufh[indh++] = bufa[(*inda)++]; } bufh[indh] = '\0'; operation = bufa[(*inda)++]; while (bufa[*inda] && !(state && ((bufa[*inda] == '?') || (bufa[*inda] == '{')))) { if (state && (bufa[*inda] == '%' || bufa[*inda] == '!' || bufa[*inda] == '}')) { bufc[indc++] = '%'; } else if (bufa[*inda] == '%') { state = 1; (*inda)++; continue; } state = 0; bufc[indc++] = bufa[(*inda)++]; } bufc[indc] = '\0'; if (bufa[*inda]) (*inda)--; if (!operation) /* incomplete is truth, just * * * ask Godel */ return 1; switch (operation) { case '=': /* character by character * * * equality */ if (indc != indh) return 0; for (i = 0; i < indc; i++) { if (bufc[i] != bufh[i]) return 0; } return 1; break; case '<': if (atoi(bufh) < atoi(bufc)) return 1; else return 0; break; case '>': if (atoi(bufh) > atoi(bufc)) return 1; else return 0; break; default: warning("Bad operation in Macro!"); printf("Unrecognizable operation in macro pass3: %c Trying to continue.\n", operation); return 1; /* don't know what happened, * * * pretend we do */ break; } } static int condmacro(char *bufa, char *bufb, int *inda, int *indb, int flag) { int newflag, include; int state = 0; if (*indb >= MAXMACLEN) return 0; include = flag; while (bufa[*inda] && (*indb < MAXMACLEN)) { if (state) { switch (bufa[(*inda)++]) { case '}': /* done with this * * * conditional, return */ return 0; break; case '{': /* handle new conditional */ if (*indb > 0) { (*indb)--; if (bufb[*indb] == '0') newflag = 0; else newflag = 1; } else /* moron starting with cond, * * * assume true */ newflag = 1; if (include) condmacro(bufa, bufb, inda, indb, newflag); else { (*indb)++; *inda = skipmacro(bufa, *inda); } state = 0; continue; break; case '!': /* handle not indicator */ if (flag) include = 0; else include = 1; state = 0; continue; break; case '*': /* test for abort */ if (include) { /* abort this macro */ bufb[0] = '\0'; *indb = 0; return 0; } state = 0; continue; break; case '%': /* push % into buf */ if (include) { if (*indb < MAXMACLEN) { bufb[*indb] = '%'; (*indb)++; } else return 0; } state = 0; continue; case '>': /* Generate Tab stop */ if (include) { int t = (int) bufa[(*inda)++]; for (; ((*indb < t) && (*indb < MAXMACLEN)); (*indb)++) bufb[*indb] = ' '; } state = 0; continue; default: warning("Bad character in Macro!"); printf("Unrecognizable special character in macro pass4: %c Trying to continue.\n", bufa[(*inda) - 1]); } } if (bufa[*inda] == '%') { state++; (*inda)++; continue; } state = 0; if (include) { if (*indb < MAXMACLEN) { bufb[*indb] = bufa[*inda]; (*inda)++; (*indb)++; } else return 0; } else (*inda)++; } return 0; } static int skipmacro(char *buf, int index) { int state = 0; int end = 0; if (index == 0) index++; while (buf[index] && !end) { if (state) { switch (buf[index++]) { case '{': index = skipmacro(buf, index); continue; break; case '}': end = 1; continue; break; case '>': index++; case '!': case '%': case '*': state = 0; continue; break; default: warning("Bad character in Macro!"); printf("Unrecognizable special character in macro pass5: %c Trying to continue.\n", buf[index - 1]); } } if (buf[index] == '%') { state++; index++; continue; } state = 0; index++; } return index; } /* return a pointer to a capitalized copy of string s */ char * strcap(char *s) { static char buf[256]; /* returns static */ register char *t = buf; while (*s) { if (islower(*s)) *t++ = toupper(*s++); else *t++ = *s++; } *t = 0; if (buf[255]) { fprintf(stderr, "ERROR: String constant overwritten\n"); return NULL; } return buf; } netrek-client-cow-3.3.2/newbie.html0000664000175000017500000032026313657750470016216 0ustar jamesjames newbie

Netrek Newbie Manual

    T H E
     _   _   _____   _____   ____    _____   _  __  
    | \ | | | ____| |_   _| |  _ \  | ____| | |/ /  N E W B I E
    |  \| | |  _|     | |   | |_) | |  _|   | ' /   
    | |\  | | |___    | |   |  _ <  | |___  | . \   M A N U A L
    |_| \_| |_____|   |_|   |_| \_\ |_____| |_|\_\
Compiled by
Jonathan Shekter aka KillThemAll! (jshekter@interlog.com),
With material from
 Jonathan Ellis aka maniac
Herbert Enderton aka Red Shirt
...and many others.
Revision 1.3, November 1995 

Contents:

  1. Introduction (Shekter)
  2. Basic Instructions
    1. Connecting To A Server (Ellis, Shekter)
    2. Logins (Shekter)
    3. The MOTD, Teams and Ships (Mehlaff, Ellis)
    4. The Game Screen (Shekter)
    5. Essential Commands (including messaging) (Shekter, Mehlaff)
    6. How Not To Be Obviously A Twink (Shekter, Ellis)
    7. So What Do I Do Now? (Shekter)
  3. Finer Points And Strategy
    1. Dogfighting (Hammond, McCoy)
    2. Escorting (Shekter)
    3. Ogging (Ellis)
    4. Defending a planet (Shekter)
    5. Start-of-game bombing (Shekter)
    6. Scout bombing (Yasuda)
    7. Taking Planets (Markiel)
  4. Miscellaneous Stuff (Shekter)
    1. UDP, Short Packets, and SLIP
    2. Ghostbusts
  5. Resources
    1. Where To Find More (Ellis)
    2. Netrek Glossary (A whole bunch of people)

1. Introduction

According to the FAQ (Frequently Asked Questions) list for the

newsgroup rec.games.netrek,

Netrek is a 16-player graphical real-time battle simulation with a Star Trek theme. The game is divided into two teams of 8 (or less), who dogfight each other and attempt to conquer each others planets. There are several different types of ships, from fast, fragile scouts up to big, slow battleships; this allows a great deal of variance in play styles.

It is played over the Internet, against real human opponents. If you do not have a computer on the internet, or connected via SLIP or PPP, you will not be able to play.

This game has a history and can actually be traced back through various ancestors to 1972. See the history compiled by Andy McFadden for more detailed information.

Up to 16 players, often widely separated geographically, connect to a central serverrunning at some site. There are about 30 public servers in the world and of these maybe 10 are well known and popular. The individual players uses a clientprogram to connect to the server of their choice. Once in the game, the server receives commands from the client (and hence the player) and sends the positions and status of the other ships, planets, etc., to all players, several times per second. The net effect of all this is to create a virtual galaxy where everyone can see each other and interact, or to put it less academically, everyone plays in the same galaxy to try to take it over.

This manual is a guide for netrek beginners; it is independent of any particular client. Clients are highly configurable and vary from one another in terms of features. Please consult your client manual for details. There are a lot of very cool things that a client can be configured for, including macros, RCDs, etc., so its worth reading your client documentation.

2. Basic Instructions

2.1 Connecting To A Server

If you run netrek without any arguments it will just complain at you. It needs to know which server to connect to. To tell it, use the -hcommand line option:

 netrek -h thiserver.foobar.somewhere.edu

 This tells netrek to join the game in progress on that server.

(You can specify the port number, if its not the standard 2592, with the -p option, should you need to.)

The better way to go about this, however, is to use the metaserver.

The metaserver is a central computer, currently

metaserver.ecst.csuchico.edu, which keeps track of currently running

games on all servers. Type

 telnet metaserver.ecst.csuchico.edu 3523

to get details about the different ports. In addition, Most clients can be run with the -m option, which will cause the client to connect to the metaserver and display a window with the names and status of servers with active games, and allow you to select which to join. If you are playing netrek for the first time, it is strongly recommended that you start the client with netrek -m.

Netrek will then attempt to connect to the specified server. After connection, there will be a pause, especially if running over the modem, as the MOTD (message of the day) is received from the server. This can take up to 30 seconds with a long MOTD over a modem, even longer if the MOTD contains bitmaps and you load them. When the MOTD has finished loading, the main Netrek window will be displayed.

 

2.2 Logins

Everyone who plays netrek has one or more characters.People play under handles. The point of thisbesides funis to allow to server to track each persons statistics from game to game. Thus you can have ratings, be promoted in rank, etc.

When you connect to a server, therefore, you must login. If you dont wish to use a permanent handle, login as guest. It is a good idea to be a guest during at least your first few hours playing. Otherwise, think of a name and type it in. You will then be asked for a password. This prevents other people from logging in as you and messing up your stats. Think of one and remember it! You will need it to log in later.

 Important note: put the mouse in the tactical (left) window as you type your name and password or you wont be able to enter anything!

 

2.3 The MOTD, Teams, And Ships

With the mouse in the MOTD window, press fand bto move forward and backwards through it. Whenever you are at the MOTD you can also press Shift-R (capital R) should you wish to reset your stats. Do read the MOTD:

 it will tell you important server-specific information.

 The other defining thing about this screen are the team selection windows. The large numbers indicate how many people are playing on each team. Often you will not be able to pick an arbitrary team but will be restricted to some subset. This ensures that the teams are (more or less) balanced in size.

 Click on the team with the next to largest number of players you will be assigned a cruiser for that team. (The numbers will fluctuate as ships are killed and are resurrected.) Or, with the mouse in the appropriate window, press a key to select a ship type and start as that type. The keys you may press are:

 S - Scouts(SC): These are fast fragile little things. Good if you want to fly around the galaxy at high speed and get shot down by the first big ship that gets near. They are very good for harassing, and bombing if there are many undefended planets with very few armies on them. They are difficult to use to fight, especially for the inexperienced.

 Cruising speed: 8 Combat speed: 6 Max. armies: 2

 D - Destroyers(DD): These are similar to scouts but they are a little more tough and they have slightly more powerful weapons. The destroyer is sometimes erroneously referred to as halfway between the scout and the cruiser.If this were so, it would have more powerful phasers and be able to go an extra half warp faster. For the unskilled player, they live up to their nickname of Ship of Lose.The destroyer is really a specialty ship, primarily used for taking planets by those who know what theyre doing.

Cruising speed: 7 Combat speed: 5 Max. armies: 5

 C - Cruiser(CA): An all-purpose ship, and the default if you dont select another.

Cruising speed: 6 Combat Speed: 4 Max. armies: 10

 B - Battleship(BB): This ship is slow to accelerate and hard to maneuver. However, it has the most firepower of any normal ship. It is also very tough. Since it can take a fair amount of damage while still dishing out a lot, it is very effective for offensive playersbut watch your fuel, this ship uses a lot of it. The BB or the CA is recommended for inexperienced players, since its harder to die in them. Since dodging is tough for the BB, heavy use of tractoring, pressoring, and detting is important. See the dogfighting section.

 Cruising speed: 4 Combat speed: 3 Max. armies: 6

 A - Assault Ships(AS): These ships are primarily useful in bombing and capturing planets (something that beginners should do after mastering the basics). One of their unique features is that they may carry 3 armies per kill their captain has. Another is that they are guaranteed to bomb at least two armies at once. Also, they are very tough to kill because they can take so much hull damage. This is important when taking planets, because they can keep dropping while detting. Other ships dont have the hull to det without putting up their shields (and you cant drop armies with shields up). They can also cloak cheaply to sneak in and attack planets.

Cruising speed: 8 Combat speed: 4 Max. armies: 20

 O (for outpost) - Starbase(SB): These are very powerful and hard to destroy. New players cannot play these (a rank of Commander is required). Because they are so powerful, new players should probably avoid getting in fights with one; it takes several players working together to destroy one. If you see a hostile base, youre best off running away from it.

 Cruising speed: 2 Combat speed: 2 Max. armies: 25

 

2.4. The Game Screen

When you first enter the game, you will see two main windows and several smaller ones. The large window on the left is the local or tactical window, where you will do most of your playing. It shows your ship and the immediate area around it. The window on the right is the map window, which shows the entire galaxy.

Each planet has a long name which appears on the local window, and a three letter abbreviation which appears on the map. The color of the planet indicates its owner, which can be one of four team colors or gray for neutral. Some of the planets will also have symbols on them. A person symbol means there are more than 4 armies on that planet (and hence it can be bombed if its an enemy planet or beamed up from if its a friendly planet). A wrench symbol means that the planet is a repair planet; while in orbit around this planet you will repair damage much faster that usual. A gas can (looks like a sort of little box) means that the planet in question is a fuel planet, and you can refuel on that planet. This is important, because although you regenerate fuel automatically if you are not constantly using it, a fuel planet will fill you up much faster.

 Below the tactical display are two little windows. The topmost of these is the warning window. Important messages will appear here. Below this is the message-send window where you can compose one-line messages to send to your teammates.

 Below the map window are three scrolling lists. These are, by default, the All window, the Team window, and the Individual window (the yourwindow). These show, as you might have guessed, messages to everybody, messages to just your team and messages to just you in them. Read messages! This is important.

 

2.5 Essential Commands

With this in mind, the following is a rip-off with minor changes of the classic opening screendocumentation, which is part of the MOTD of many servers. It will tell you the basic commands and should be enough to get you started playing. Thanks to Eric Mehlhaff (mehlhaff@ocf.Berkeley.EDU) for writing it.

Mouse Buttons:

 Left - Fire Photon Torpedoes toward Mouse Cursor

 Shift+Left or Middle - Fire Phaser toward Mouse Cursor

 Right - Change course toward Mouse Cursor

 Other Important Commands:

 0-9 Set Warp Speed 0-9

 ) Set speed to warp 10

 ! Set speed to warp 11

 @ Set speed to warp 12

 % Set speed as fast as you can go!

 c Cloak/Uncloak Ship. While cloaked your ship will not show up on

 other playerstactical displays. It will show up as a ?? on the

 Galactic display.

 l Lock onto object. Sets your course to that object. If its a

 planet or a Base, you automatically dock there once you arrive.

 t Fire torpedo

 p Fire phasers

 T Tractor Beam. Pulls target toward you but uses a lot of fuel.

Useful to make sure ships that run away get killed.

 y Pressor Beam. Just like Tractor, but it pushes target away.

Useful in keeping those over-agressive warships away from you.

 s,u Raise/lower shields. Your shields consume fuel. Also, your ship

 will only repair internal damage while shields are down. But you are

 much more vulnerable when your shields are down.

 L Bring up the Player List Window. So you can see the names behind

 the player numbers, as well as their stats.

 i,I Get information on the player or planet nearest your mouse cursor.

 Lower and uppercase report different things, try both.

 q Quit game quickly

 Q Quit game, but read the MOTD first

 h Bring up help window

Lots of commands, huh? And those are just the more common ones!

Notice how difficult it is to reach a lot of these keys, such as orbit,

lock onto, tractor, pressor, etc. Most people use a keymap to make it

 easier to reach the important stuff; see the your client manual for details.

 

How to send Messages:

 Press mor put your mouse cursor in the outgoing message window.

It is the lower of the two thin one-line windows just below the galactic

or tactical window (depending on which client you are using). Type the

 letter for who you want to send to:

 

0-9, a-j Message is sent to player of that number/letter

 t Send to your own team

 A Send to All (Everyone!)

 F Send to Federation

K Send to Klingons

R Send to Romulans

·Send to Orions

 

Use the Esc key to cancel a message before sending it.

 Tournament Mode:

 Tournament mode starts you when have 4 vs. 4 and the teams are not diagonally opposite (e.g. Fed vs. Kli is no good). You can get DI (damage inflicted) only during tournament mode, and more DI leads to promotions. DI is a composite score based on total planets taken, armies bombed, and ships killed. During Tournament mode (Tmodelook for the little tamong the flags, which are on the upper-left of the dashboarddirectly below the tactical window) you receive no DI for attacking non-warring races, i.e. those races not represented by a team of 4 or more.

 Ratings:

 Your rating will be updated only during Tmode. Ratings are derived from your planet bombing, killing (offense) and getting killed (defense) rates, normalized with respect to the average of all players. That is, a rating of 1.00 means you have exactly the average of all the current players.

 Plasmas:

 To get plasma torpedoes, get 2 kills, and refit to [DD/CA/BB]. These home in on a target but can be shot down with phasers.

Getting Started:

 When you first enter the Game, you may need to press hit the keys Band Vtwice each. This makes the planets resources show up on the tactical and Galactic Maps. If you are experiencing a lot of blink(uneven screen updates), try setting your updates/second to a lower value. Do this in the options window (O- thats capital ohto bring it up). Click the mouse button on the updates number until you get the number you want. Lower updates tend to produce less blink, although they make netrek less playable when the network is working normally.

Declare peace with everyone (except perhaps the current enemy race).

This way you wont be attacked by neutral planets and robots! Set stay peaceful when reborn(in the options window again). This way you wont have to redo your war settings every time you get shot down.

 Hints for Beginners:

 Watch your fuel. When you run out, your weapons wont fire, you cant go very fast to run away, and youll be helpless. If you run out of fuel, go orbit a friendly or neutral fuel planet. Avoid chasing ships, unless you know they are badly damaged or out of fuel. Its very hard for you to dodge their fire, and very easy for them to dodge yours. On the other hand, if you can get someone to chase you, waste them!

 Learn who your enemies are. If you shoot at friendly ships, not only do you waste fuel, but you show everyone that you are a beginner. And many players will specifically go for beginners just for the easy kill. Change speeds a lot. It is often useful to use high speed to get into the action quickly. But at high speeds you will have a hard time dodging enemy torpedoes.

 If youre not in combat, fly around with your shields down. This enables you to repair a little damage, and you use less fuel that way. But beware, you are very vulnerable if you are surprised.

 Each additional warp halves your turning speed. Slow down to turn.

 Watch your galactic map to get the big picture.Pay attention to cloakers. Enemy ships near you will cause you to go to yellow or red alert. This can be used to tell if the cloaker by you is an enemy or not.

 Torpedoes you det wont hurt your teammates.

 Bomb enemy planets with armies on them.

 

Strategy and the grand Scheme of things:

 Theres more to Netrek than just ships flying around and blowing each other away. The actual goal of the game is to conquer the galaxy. As a shorter term goal, a team must conquer the planets of the other team. This genocides the team, and all its players are forced to quit or change to a new team. (Note that most if not all current servers restart the galaxy after one genocide.)

 How to Conquer Planets:

 You conquer planets by first bombing the armies on enemy planets down to less than four. Below 4 you cannot bomb them. (Neither can the other team pick up from them, however.) Here is one time where the AS is useful: the AS always bombs at least two, so if the planet is at 5 and you bomb it with an AS, it will always go to three or less! If the planet is at 6, however, you should first bomb it down to 5 with a normal ship and then have the AS bomb.

Then you need to get some killsyou can only carry armies if you have killed with your current shipand beam up some armies from one of their own planets with the zkey (you can only beam up armies if the planet has more than four armies, so you have to keep your enemies from bombing your planets!). Once you have armies, orbit the enemys planet and beam them down with the xkey. Each of your armies destroys one of the enemys armies, so you will need more armies to capture a planet than the planet currently has. Usually, as a rule of thumb, it takes 5 armies to capture a planet, unless of course, it has fewer armies than that on it.

 Some planets are more important to capture, too. Fuel planets are good planets to capture, because capturing them prevents the enemy from refueling on them. Similarly, repair planets (look for the little wrench symbol on the planet) repair ships orbiting them much faster than normal. Agricultural or agriplanetspress ion the planet or bring up the planet window with Pare most valuable because they generate armies quickly.

 Standard Netrek games usually follow a pattern:

 The game starts:

The teams have all their planets and usually about 30 armies per planet. So, the object in this stage is to bomb out as many of the enemiesarmies as possible, while preventing them from bombing out your own.

 The planet capturing stage:

 Most of the armies are bombed away, so the players concentrate on capturing the enemy planets. Its kind of pointless to try to capture enemy planets while they still have a lot of armies, so this is why players dont try to capture planets until this stage. If the enemy has lots of armies, it is very easy for them to simply recapture their planets.

 The Desperate wait for armies:

 The players have used up most of their armies trying to take planets, so they are waiting for more to grow on their own planets so they can take the enemies. What few they do get often end up dying, as the ship that was carrying them is hunted down by hordes of enemy ships.

 The Last Planet Defense:

 One of the teams has lost several of its planets. It only has a few of the ones near its homeworld. They dont have many armies to recapture their worlds because they dont have many worlds to grow them. But their worlds are well defended because they come back real close to them when they die.

This stage can last for hours if the winning team isnt aggressive or well-enough organized to take those last few worlds.

 

2.6 How Not To Be Obviously A Twink

A twink(see section 5.2) is someone who is a netrek loser. Netrek, because it is a multi-player game, has an etiquette. Specifically, stupidity and laziness are not tolerated. Below are some comments on how not to get labeled a as a twink, which is not only embarrassing, but dangerous as players may kill you whenever they need an easy kill (so that they can carry armies and hence take planets.)

 A twink:

 ·does not read messages. Netrek is a team game. Be part of the team.

 ·Dies with The Armies. Note that there is a difference between dying with armies (which happens to everyone) and dying with The Armies. That is, dying with armies when armies are scarce. Often in a game, armies are plentiful, or would just get bombed away if not picked up, and getting killed while carrying happens to everyone. But its a real bummer when some twink picks up the last two armies which are vitally needed to take back that critical planet and goes and dies with them. Summary: dont.

 ·does not listen to his teammates. Help your team! People more experienced then you will try to direct actions and strategy. If you have a better idea, say so, but dont just ignore the requests of your teammates. Unfortunately, many players are impatient with newbies (Im one of them ;-), and will not do more than curse at you for your mistakes. If you want to get more out of them than curses, dont argue with them. They will only get angrier because a clueless newbiepresumes to correct them! Apologize, even if it wasnt your fault, and ask what you did wrong. This makes them feel stupid and then they will often become helpful. Complimenting them doesnt hurt either. Of course, here Im assuming that the arrogant player actually knows what hes doing and isnt just a jerk. There are a few clueless jerks around, too.

 ·calls for help continuously, whenever theres someone chasing him.

 Learn how to defend yourself. If you cant, dont, for example, fly deep into enemy territory by yourself and then expect your friends to come to the rescue as soon as someone starts grinding you down. For one thing, ships do not move all that fast and so by the time they arrive you will probably be dead. For another thing, there are better things to do than waste time saving someone who will just get a new ship a few seconds later anyway, unless you are of some special value to the team, e.g. carrying armies, are the only player with kills, etc. This does not mean, dont call for help when defending a planet or taking, for example. But if you are about to get killed and youre not doing anything special, sorry.

·does things or takes resources better done or used by others.

 Examples of this are bombing a planet when there is a friendly assault ship right there that could do it, or taking armies before a more skilled or better equipped (e.g. youre in a scout and hes not) player who wants them can beam them up.

·explodes near his teammates and kills them. Explosions do considerable damage. This fact can be used to your advantage, for example when ogging (killing with a suicide attack) someone. But dont explode over or near friendly ships. For example, if your are protecting someone, as in escorting for planet takes, stay a little bit away from the planet so that if/when you get toasted, you dont kill them too.

·pesters others for help instead of reading the manual or figuring it out online. This last point is extremely important! Read this document thoroughly, and investigate the FAQ, various WWW sites, and the Netrek archives (see section 6.1) thoroughly before pestering other players for help with simple things. Note that this does not mean dont ask questions: on the contrary, many players are more than happy to explain things to beginners. But dont ask without trying hard by yourself. Things like how do you play this game?or asking how do I raise my shieldseight times in the middle of a game (when you can always press hand find out) are not appreciated by most players.

 ·plays for himself. Play for your _team_. Theres a lot of otherwise good players who only want to increase their stats by planet scumming. Space control. Escort. Scout bomb. I cant emphasise this last enough; there are few players that I am more happy to have on my team than one who will join the game, see that their team needs a bomber, and then goes bombing.

2.7 So What Do I Do Now?

Scout bomb. This is one of the best things a beginning player can do. It requires little dogfighting ability, you dont die too often, it gives you lots of practice maneuvering and dodging torps, and best of all, its very helpful to your team. I would suggest that anyone new to the game of Netrek do some scout bombing at first.

Scout bombing is of course, done with a scout; select this ship from the opening screen. The basic technique is just to go from planet to planet bombing, but there is some finesse involved. First of all, getting deep behind enemy lines is omething of a trick; flying at maxwarp through a dogfight in the hopes of getting past it is a good way to get killed, even if you are cloaked; scouts are very fragile. You must usually fly far around enemy ships, often way off into neutral space. At any rate, once you approach a planet with armies to bomb, the procedure is basically the same: lock on (press l), shields up as you approach (press sor u), wait till you enter orbit, then bomb (b). After a while, enemy ships will notice and start chasing you. This is goodyou are keeping them from helping their team. You are much more maneuverable than them (unless they are also in an SC) and also much faster, BUT you are very fragile. The solution is to run and dodge. Buttorping is good here, though frowned upon in other parts of the game. Learn to dodge. If you are really good, you can even take out a ship by suddenly charging at them at high speed and firing everything youve got. This takes some skill, but Ive defeated many a BB in a scout; the trick is to get them angry and make them waste fuel first.

 Besides bombing, the other duty of a scout bomber is to call call pick ups as you see them. You are behind the lines and in some sense have time on your hands, so a SC bomber is ideally placed for reconnaisance of this type. You can tell when someone picks up by watching the number of armies on a planet being orbited by them. While the little army symbol(the little man) on the planet will disappear if they remove all the armies, more often than not you have to watch the army count by pressing iover the planet repeatedly as they orbit it. If the armies are going down, they are picking up. Tell you teammates so they can watch out and or kill them. There is a handy macro for this in most clients: place the mouse over the enemy carrier and press Ctrl-9. This sends a message like 4++ @ Romto your team.

 Scout bombing is very helpful, and probably the easiest useful thing for a beginner to do. It is excellent practice, and actually it is also one of the most important jobs in a game.

3. Finer Points And Strategy

3.1 Dogfighting

Dogfighting is not the point of the game or even a primary objective.

It is a means to an end for two reasons: a) you must have kills to carry armies and take planets, and b) you often need to stop enemy ships from doing things, such as taking your planets or bombing your space, or killing your teams carrier (or you!) when you are trying to take a planet. Killing them is one good way, although there are others.

 The following is from the Netrek archives by John Kirk Hammond a.k.a.

 Lance.

 Here is the manual I mentioned. I posted it cause many people said I should.

 I only use a CA, so if you play another ship take any advice with a grain of salt (actually, take it all with a grain of salt.).

 There are, as I see it, 3 major things about successfully dogfighting.

 The most important, by far, is intensive use of tractors. The second is to change speed constantly. The third is to det incoming torps.

 Remapping the keyboard in the .xtrekrc file is important. For those interested, heres mine: keymap: dTeyadllrrqe D I think some of that was redundant, but it works, so I dont care! :)

I. Tractoring/pressoring

 II. Changing speeds

 III. Detting

 IV. Shields

 V. Torps

 VI. Phasers

 VII. Cloaking

 VIII. Plasma

 IX. Knowledge is half the battle :)

 I. Tractoring/pressoring

 

A. Tractors are most useful for holding an opponent in place so that your torps can catch up to him. By tractoring an opponent, one a) slows the opponents turning speed down for a short time and b) pulls him in the direction of your torps. THIS IS MOST IMPORTANT. I can not tell you how many people have come rushing onto the screen that I have tractored, using their speed, and pulled them right onto a string of torps.

 B. Tractors are also useful for pulling wounded enemies (and full-strength scouts) into your phaser range so that you can finish them off. However, see III. Detting for more on that.

 C. My favorite method of killing any enemy is to pull up next to him, speed up to warp 8 or 9, and on the pass launch a volley of torps and at the same time tractor him. Fire the torps almost perpendicular to your ship, because at warp 8, they will move outward AND forward, hence slamming into the opponents ship. I will also det his torps if they look like they might hurt me. Sometimes, if the torps might not hit him, I pressor him, and sometimes, just sometimes, his rapid turning pushes him BACK into the string of torps.

 D. In the opposing situation, if an enemy tries this on me, I turn in his direction and pressor off of him at the same time, which (most of the time) propels me out of his incoming swath of torps. Pressors are most useful for maneuvering into and out of positions for battle. I dont use them extensively in battle but perhaps to keep a phaser-thirsty ship out of range so that I can torp him, or, in cases where there is a good BB playing, pressors are a key to survival.

 

[JE: T/P can also be very useful to help you dodge torps. The

 most obvious way is to just turn away from your opponent

 and pressor off him to give you more room to dodge. If you

 have a teammate or an enemy off to one side that you can t/p

 off of to move you sideways out of the torps, that is even

better. If youre using a teammate as a t/p post, though, make

 sure youre not moving him into torps at the same time!]

 II.Changing speeds

 

A. It is important to change speeds constantly. Many opponents tend to dodge torps I send at them. However, when involved in a dogfight, and torps are flying in a perfect line at your ship, slam your hand down around the 7-8-9 area, and watch as your CA accelerates past the torps (I dogfight at 4). A while back, I fought with West 11 or 12 times on an abandoned server. Against that kind of skill, I change speeds maybe, once very 3 or 4 seconds, just to throw him off as to where I am going. That match ended in a tie or close to it. Those lil matches took over a minute usually. Learn to be patient. The next entry, B, illustrates that.

 [JE: a style enormously helpful to conserving fuel while dogfighting is to fight at a base speed of warp 2, tractoring, pressoring, and accelerating as needed when torps are fired. This is most effective in a CA/BB/AS.

 Thanks to Erik Lauer for pointing this out.]

 B. The other day, I angered an opposing BB so much that he roared onto the screen firing a plasma and a blob of torps. I calmly turned perpendicular to his plasma and accelerated. That got me out of the torpsway and out of the possible turning radius of the plasma. The BB then turned tail and slowly moved away from me, firing torps all the way. By moving back and forth and calmly accelerating out of his torps I followed him all the way up to a fuel planet, never raising my shields or firing a shot. He started orbiting the fuel planet, and I sped up to 8 or 9 and roared by him, firing a volley of torps, tractoring him off the planet, detting, and phasering. Needless to say, he died and I lost my shields. But I was patient.

 C. Also, remember to pressor oggers that appear behind you, as this will keep them from blowing up on you (I tend to tractor them, fire torps at them, and then pressor them, thus ensuring their death and preserving most of mine). However, you must be going away from the ogger at at least warp 7 for this to work, because pressors only really neutralize the oggers tractor.

 D. When you are attempting to catch up to a target, and he is fleeing at similar speed, you can do 2 things: 1) If there are enemies in the area who could help him, you must get him quickly, so det torps sent in your direction. 2) If you and he are alone, if he fires a line at you, slam the 1-5 warp area and turn a little to the side. This usually lets you dodge most of them, but he gets those few extra seconds to flee a little more. However, if he has no help in the area, you might still have a chance of catching him.

 

III. Detting.

 

Here is the Netrek concept that will get me in trouble with other good dogfighters. Most never det in battle. I, however, live on detting. I will cover detting on the accepted scalefrom A to C.

 A.Det when tractoring scouts in and phaser them to death. Scouts fire dinky 25 pt torps that do 6 pts of damage when you det them. If you can tractor them and you are moving at sufficient speed, you can crunch a scout in a CA. As long as you det. This goes for any wounded ship, too. If a CA is wounded and is sitting stopped, rush at an angle, fire torps and tractor him in. However, you MUST remember to det torps. If you dont 10 to 1 you will mutual with him.

 B.Det torps for wounded ships, planet takers, and SBs. If you want to be a good escort, stay AHEAD of the planet taker and det any torps headed for the planet. However, REMEMBER to fire at incoming oggers, and if you must, mutual with any too close to the planet.

 C.Det enemy torps to wound other enemies. This I use only in special situations. When a cloaker (planet taker) flies over enemy torps, det them. You will take damage, but so will he. Any planet taker that slows down cause of wounds is usually dead in any clueful game. Planet taking counts on the taker to make it to the planet as fast as possible before oggers overwhelm the escorts.

 D.OK, I also det a lot in combat. When I am dodging, I will often det to open a holein a stream of torps, or det the first few torps in a string so that I can zoom by. Remember, detting ideally only inflicts 25% of the damage on your ship, so detting 4 or 5 torps really is nothing in a CA. I also tend to det whenever I make a pass at an enemy. Granted, at one inch away those torps might not hit me, but I dont take the chance. 50-130 pts norm on a dogfight, I guess. At one inch, one pass is usually enough :). Some good players can use my detting against me, but not always.

 E.You know those situations where you and an opponent suddenly zoom on the screen at the same time and right at each other? Usually, you will ram each other with a blob of torps. However, the best way to survive is to slam your hand down on the speed of 1-4, turn rapidly to one side, fire torps, pressor, and DET constantly. About 50% of the time this will allow me to destroy the incoming ship, but I in turn usually take almost 80-90% damage. However, I survive.

 [JE: maxwarping at an enemy is never a good idea, and if you

do find yourself in that situation, keep in mind that it may be

better to mutual than to go to 90% damage and spend a lot of

 time repairingif you mutual, you immediately get a new ship.]

 F.If you are in a situation where both you and your opponent are both wounded and he is taking pot shots at your ship, go into repair mode. When he fires a torp, and you cant dodge it, det it. Repair mode will usually repair enough shields for a 10 pt det. This way you conserve your fuel. Once you get enough fuel, start moving and unleash a full string of torps at the enemy.

 G.If you are in a situation when you have enough fuel to kill a crippled ship but he is right on top of you and his explosion will kill you, pressor him away before phasering him and killing him (assuming he has no fuel).

 

IV. Shields

 

Never keep your shields up all the time. Your hull doesnt repair and your fuel regenerates slower. Get in the habit of putting shields up ONLY when you are doing the following:

 Approaching an enemy planet for bombing or planet taking.

 Within about ¾ the phaser distance of a CA or -->BB <--.

 If torps are going to hit you.

 If a cloaker is coming to ogg you and he is within phaser distance on the galactic.

 If friends fire a lot of torps over you and an enemy is in the vicinity to det them on you.

 Its fun to let a SC to get within phaser range: let him lock you a few times and he (sometimes) get cocky. Once he turns around to engage you, tractor him in and kill him.

 

V. Torps

 

A. Though I covered most of this in tractor, PRACTICE, PRACTICE,

 PRACTICE. Some people here at Duke who program borgs say my torps are almost perfect anyway. I have been accused many times of having a blessed borg.It is because I practiced lots last year (this year I dont play very much anymore). PRACTICE AIMING THOSE TORPS. Learn to lead your opponent.

 B. Dont det your own torps when you are first learning. This is the lazy mans way of getting another shot. When you are first learning, and you die cause your first shot missed, you will soon learn to start aiming better. If, however, you keep detting your torps, you will waste all your fuel in no time and gain little experience from the situation.

 

VI. Phasers

 

A. I use phasers when I make a pass at an enemy. Usually it is the difference that kills him. It is difficult to remember to tractor, torp 8 times, shields up, det, phaser, and move...but the extra 40 pt phaser sometimes is all you can get on the guy.

 B. I dont suggest attempting to whittle down an enemy with phasers. The only person Ive ever known to do this effectively against me was Val, and hes gone...

 [JE: youd be surprised how quickly a man who uses both

 phasers and torps well can take down someone who only

 torps. Learn where your 20 point phaser range is, and

phaser any time he is within that range. If you are doing

 less than 20 points you are probably wasting fuel.]

 VII. Cloaking

 

A. Dont cloak (remember, this is a dogfighters manual).

 B. Cloaking is only for dodging outgoing oggers(those coming to ogg you before you reach your target) or to pass over some interference dogfighters who are between you and your target.

 C. Cloaking is for mainly planet takers and oggers. That is NOT my forte.

 

VIII. Plasma

 

A. Never use plasma.

 B. However, plasma is useful when there is a solitary planet taker orbiting a planet and you are racing to it. A plasma and a blob of 8 torps will usually do the trick.

 C. S M A C K !

 

IX. Knowledge is half the battle.:)

 

A. KNOW YOUR ENEMY. Know what kinds of ships the bitmaps are.

 Learn what kind of shields and hull and torps and phasers each ship has. Learn to add up quickly in your head, Well, 3 torps and a decent phaser. 120 for the torps, 40 for the phaser. That CA is hurting and wont be able to flee from me for a bit...

 B. Keep track of your shields and your fuel. Make sure you have enough fuel to get out of there, cause you might get 2 kills, but an ogger will rip you to shreds when you have an empty tank.

 C. Learn to cripple an enemy. When you are rushing to say ogg a SB hanging around the enemy home planet or especially to take the home planet, NEVER kill oggers coming to engage the blob of escorts and planet takers you are moving with. If you do so, you a) waste your own fuel and shields and momentum, and b) enable the enemy to reappear right next to your target with full everything. Bad move. Either cloak before you get to outgoing oggers, or hit them with 4 torps to cripple them <-- This is possible.

 John Kirk Hammond

jhammond@raphael.acpub.duke.edu

 

3.2 Escorting:

Escorting a planet taker: a single carrier (of armies) can get killed quite easily, especially if the opposing team considers that he must be killed at all costs to save a planet. So unless the planet in question is totally open, takers need escort to protect them from enemy ships while they beam down armies, which is a slow process. You will therefore sometimes see requests for escort (in the team message window.) If you are in the vicinity and free, help that player make it to their chosen destination. To do this, it is best to arrive ahead of the carrier, and clear out enemy ships. The idea is to protect the taker, hence if you kill and damage the ships in the vicinity it makes it easier for the taker to take. Often, however you will not be able to kill all the ships nearby. In this case, when your carrier arrives, you must protect him from enemy fire. The taker is very vulnerable while dropping armies as his shields will be down. Position yourself between the taker and the enemy if at all possible, and distract the enemy ships by engaging them. You can also detonate enemy torps that would hit your carrier, by pressing the dkey. (The torpedoes in question must be quite close to your for this to work. Experiment to get a feel for the maximum rangethe farther away they are, the less damage they do.) The point of the exercise: keep the carrier alive long enough to take the planet, at all costs. (Obviously dont escort if you are carrying yourself, if at all possible. Usually it isnt. Sometimes you may have time to beam down your armies to a safe location first.) Do NOT fire torpedoes over the planet where enemies can det themyour teammate will also take damage!

3.3 Ogging:

This is the art of killing a carrier, or potential carrier, by a suicide run. The basic idea is to cloak before you get on his tactical, run up to him until youre about half an inch away, then tractor-phaser-torp-torp-torp until he dies. Ogging is a simple tactic and any dummy can do it. On the other hand, ogging well is an art, involving exactly when to uncloak, how fast to go, etc. Two good oggers working together should be able to kill the target every time. (Obviously this does not apply if the target is an SB.) When ogging with someone else, it is important that you do not both come from the same direction. If you do, your target can turn and shoot at both of you at once. When I do it, I watch what direction my teammate is coming in and decide which direction the target must run in to reach his teammates, and attack him from that direction.

Ogging a starbase: Enemy starbases can be very inconvenient. Killing one requires a coordinated effort. Typically wave after wave of ships gang up on the starbase and do suicide runs into it, firing everything they have and then hopefully exploding right over it. However, its harder than it sounds. Keys to a good ogg are:

 ·all oggers uncloak at once. If you do not, the base can pick you off easily one at a time. Thus, if you know youre going to have a head start on the other oggers using a heavy ship (BB/AS) is a good idea. Conversely, dont take one if it will make your team wait for you.

 ·oggers come from different directions, for much the same reason that ogging a normal ship from the same direction is inefficient.

 ·the ogg does not take place with a lot of the bases teammates defending. One defender ~ two oggers, so minimize the defenders. Its not enough to call an ogg when the base is alone, you also have to watch the galactic to make sure that the enemy is not heading towards the base, otherwise by the time your ogg gets there he could have several defenders.

 ·dont maxwarp directly at the base once you are on his tactical! It is trivial for a good base to tell you are heading in a straight line and pick you off with torps or phasers! If you head in at about warp 7 (in a CA) you will be able to dodge torps much more easily. It can also be a good idea to fly at a point an inch or so to the side of the base until you get close to him, to throw him off more.

 ·having an uncloaked CA/BB/AS lobbing torps (plinking) at the base while the others are ogging can help a lot against a relatively undefended base. With more defenders, it becomes much less effective. CRITICAL to this is that you should NOT plink from the side of the base that the oggers are coming in from. If you do, he can pressor off you to move away from the oggers (and towards his team) much faster! Get behind the base, and force him into your oggers! If, when you do this, the base tractors you, you have two options. You can reverse direction, tractor him, fire, and try to do as much damage as you can, finishing by exploding on him. Or, you can slam on the maxwarp while firing torps at him. The latter is more effective before an ogg, because the base will be forced to use more wtemp phasering you and likely wtemp completely during the ogg. The former option is only recommended if you are low on fuel or if youre youre really close to the base when he starts firing.

 ·if the base has ships docked on it and does not pressor them off, fire at them. Each docked ship that you blow up does an additional 100 points of damage to the base as well as preventing them from firing at the other oggers.

 

3.4 Defending a planet

Sometimes you will notice several ships, some of them cloaked, heading towards a planet of yours. If you have time, check the player list. If players with kills are coming in, they can be carrying armies and so may be trying to take a planet. Be especially wary of cloakers, the classic planet taking tactic. At this point you need to destroy the enemy ship(s) at all costs. Go especially for cloakers and anyone trying to orbit the planet. Call for help! Kill the carrier! Exploding on him works, but remember that a ship dropping armies is very vulnerable. His shields are down and he is following a precise little circle. A cloaked orbiting ship is easy to hit, so kill it! Also, if he is foolish enough not to cloakor out of fuel! -- tractor him out of orbit so he cannot drop.

 Sometimes it is useful to just orbit a planet to protect it. This not only acts as a deterrent, but while you are orbiting you will have so little else to do that you can watch for incoming takers and warn your time in time. When takers approach (watch the galactic!) stop orbiting the planet, and start flying. You cannot dodge while orbiting and so you will be easy to kill if you do not start moving. Plus you have some acceleration time, and you need to be fully up to speed by the time you engage.

If you are the only one in the area in and you must defend a planet, your job it to delay the enemy long enough until help arrives (you did call for help when you saw that enemy formation approaching on the galactic map, didnt you?) Critical to this is GETTING BETWEEN THE ENEMY AND THE PLANET. Then they have to go through you, not you through them, and you have room to retreat/buttorp. If you can do this, you have a very good chance of at least delaying the take until help arrives. Failing that, you basically have to ogg the carrier, if you can figure out which ship it is. It will obviously be someone with kills. Also, some people will be known carriers. You can tell when someone beams up armies, if the armies icon suddenly disappears from the planet they are orbiting (from one of their planets, obviously; if it disappears from one of your planets you just got bombed!) Often you will see messages of the form 6++ @ CAPor just 6++. This means that player number six just picked up armies at Cappella. If you see someone pickup, dont hesitate to tell your team with a similar message. (Hint: use macros for this! See section 5.2.) Lock onto the enemy carrier, maxwarp, cloak, get inside the enemy formation, uncloak just before reaching him, tractor him (this helps hold him and pull him into your torpedoes) and fire everything you have, exploding in a burst of glory right over him, and killing him. If there is just a single unescorted taker going for a planet you can ogg him as described above, but you might try coming in uncloaked. Sometimes this will scare him enough to make him turn around, as he doesnt want to get killed while carrying. This doesnt work on anyone who can kill you easily, obviously.

 

3.5 Start-of-game bombing

When you first enter T-mode (tournament mode) there will be many armies on all planets. At this point you must bomb them away. The best ship for this is an assault as it bombs the fastest. It can also cloak cheaply and regenerates fuel quickly. Fly to an enemy planet, putting up your shields just before arriving, cloak if theres anyone near, and hit bto start bombing. Watch your warning window. When it says bombing is ineffectiveand the armies symbol disappears from the planet, turn your shields on, lock onto the next planet with armies, and maxwarp to it. You can stay cloaked almost indefinitely while bombing; ASs even regenerate fuel at warp 0. However, detting incoming torps uses 100 fuel per det, so watch that or you will uncloak from detting. At the same time, when you are in your home space, kill enemy bombers to protect your own armies.

 

3.6 Scout bombing

This is part of a guide for scout bombers written by Dean Yasuda.

(We are ROM, they are FED).

 

Q1: What is passive bombing?

A1: Passive bombing (also called positional-bombing) is a bombing strategy in which the bomber focuses on being in a position to bomb enemy armies that will pop in the future. The bomber dynamically maintains a position deep in enemy territory that gives him bombing ownership of as many planets as possible.

 

Q2: When should I p-bomb?

A2: Whenever the enemy has more than five planets if nobody else is bombing. In general, one bomber is all you want in a pickup game because there are so few clueson the team that the others really need to be escorting, taking, ogging, etc.

 

Q3: Where is the best spot for a p-bomber?

A3: A lone p-bomber should try to live just below and right of ALP (center) in order to control the six right and central planets. A secondary bomber should lurk below and right of (VEG), pressuring the core while keeping an escape route into third space.

 When the bomber has at least ¾ fuel, he should lurk at a minimum of warp 5, in order to win races to planets.

 

Q4: What is the best path to enemy territory?

A4: Arcing through shallow third and fourth space is the best path to Fed space. A bomber should avoid the front line if the enemy presence there is strong. The wall-route is sometimes safe, but an attentive enemy CA can sometimes expel or kill the scout.

 Maxwarp out of your core, slow to warp 9 while passing the front, and arc narrowly around the enemy position. It is reasonable to let an enemy CA chase you into toward third space; he is losing his position faster than you are losing yours.

 Once you enter enemy territory, find a safe, effective place to regenerate E-temp and fuel, and then optimize your position. If another bomber is in the primary position, he will either shift to the secondary position or play an aggressive or ogging role.

 

Q5: What if they chase me?

A5: Run towards third space. Remember, as long as theyre chasing you they cant do anything else for their team. If theyre really inept (say they chase you mindlessly in a CA) you can still get some bombing done while avoiding him. Dont let him kill you unless in dying you bomb his last armies. The main reason he is chasing is probably that he wants a kill.

 

Q6: When and how should a scout ogg?

A6: Ogg when bombing duties are covered and it is apparent that your ogging help is needed. Never assume you can kill a good carrier; assume that you can help a cruiser finish the job. Prep an oggee by light pelting, follow just out of range until help arrives, or fake a bomb. A scout can aid cruiser oggs by synchronization, following-up, netting, pre-pelting, or tailing the enemy to prevent him from reaching safety in time.

 

Q7: Tandem scout oggs are fun. Are there drawbacks to this?

A7: Yes, if it leaves the team without a bomber. It takes almost a minute for a scout to establish bombing position. During this time, about three armies will pop, and an enemy take can occur. If bombers ogg foolishly, they may wind up playing catchup (ogging or arriving too late to bomb safely) rather than destroying armies as they appear. Poor scout discipline is almost a given in any game, and the results can be disastrous. Cruiser-scout oggs drive the taker away from the front, even if they fail. The price for a failed, double-scout ogg is often greater, and even a successful ogg may be a losing proposition.

 

3.7 Taking Planets

GREY ELFS GUIDE TO PLANET TAKING

First of all, before anything, know whats going on. How youre going to take planets depends on which planets youre trying to take. Are you taking back your own space? Youll have to be careful with your armies as you dont have many. Are you taking planets in the third space? You probably need a fast ship. Taking core planets? You either need something really heavy, (an AS), or something really fast. Know how many kills you need, there might be a planet with only 1 army on it, that you can pick off with a 1 kill ship. If youre trying to take an agri, youre going to need two kills and at least 4 armies, and your effort will be wasted if you dont get them all down.

 Next, the key to winning the game is to take planets faster than the enemy is taking them back. There are a lot of skills to help you do this, but if youre serious about taking planets you dont have time to wander around trying to get your second kill. The key is speed...you have no time to waste.

To take planets, first you need kills. Getting kills falls under another chapter (Grey Elfs Guide to Making Yourself Useful) but Ill mention a few ways of getting quick kills. The classic method is twink bashing. Its cold, its cheap, it works. You find someone with the nice 0.3 kill ratio and get him to come after you. My favorite method is to let the guy get a decent phaser on me. Then I start to run and he says Ive got him now!and charges forward right into my beautiful line of torps. Its scary how quick you can rack up kills if the enemies line up right.

Another method is to get in front of your Starbase. If hes anywhere near the enemy he is probably attracting oggers...try to pick them off before your starbase gets at them. If he blows up someone youve just crippled, call him a kill thief and tell him youd like some reward for destroying oggers for him. Hell probably understand that you really want some kills to take planet. Note that Im NOT advising you to sit behind your SB and scum a kill after he damages it...first of all it usually takes too long, and makes enemies to boot. You certainly dont want your team against you when you really need some help.

 A third way is to try to force enemies into an outnumbered situation.

This requires some skill in not getting killed, and is difficult if there are several people ogging indiscriminately, or ogging you in particular. Basically you try to get behind a person so he cant get away. Then you sandwich him between your torps/phasers and those of your teammates, and out of the random spread you have an even chance of getting a kill, better if your teammates arent as good.

 Once you have kills, be careful. Good oggers will pinpoint anyone with more than 1 kill, and especially focus on known planet takers. Always watch the long range scanner for cloakers, and know if good players are headed in your direction. If you spend 5 minutes getting 2 kills, you certainly dont want a battleship running you over when you least expect it. This holds true everywhere, at all times. Little sucks more than getting blown up at your home planet as you refit to an assault ship...especially if the guy them bombs the armies you were planning to pick up. (A little secret: when I head back to my home planet to refit to an assault ship, I pick up some armies from the front line and carrying them back with me...because theres no guarantee they will still be there when I get back).

 There are a couple of ways to deal with oggers. First, you have to know they are there. Watch the long range scanner at all times, even when dogfighting. Remember that your ship still has weapons, and use them. If you are planning to take planets, dont get in close with enemies...they may just be trying to suicide into you. Im not encouraging people to runner-scum, but dont close with the enemy either. If an enemy is coming in cloaked, there are two things to do. If hes coming in very fast, either blast some torps into his path, since he cant dodge, or cloak just before he gets within phaser range. Slow, spin to the side, and speed up again...he will uncloak, go flying past you, miss with his torp spread (which you just dodged), and try to come back after you, now rather low on fuel. If hes coming in slow, fly away around warp 6, burning no fuel, and wait for the ogger to run out of fuel. Then go do what you were before he got there. Remember that most oggs are ineffective unless you dont see it coming, are already hurt, or the ogger is really good. Also, let your teammates help you, but dont hide behind their coattails: if youre going to be effective you have to take some risks, and sometimes you get burned. Take your loss and come back fighting.

 What ship you choose to take planets in is a difficult choice.

Everyone has their favorite fighting ship: I prefer cruisers. In some cases another ship might be more effective: you lose time in changing ships (less if your starbase is nearby), but a different ship might be able to do more. Each ship has a different style to it. Scouts are useful for taking planets that are left undefended and weak. You can slip in very quickly and beam down two armies, which can either take a planet or weaken it for the next person to show up. (This tactic can be very useful when the enemy is low on planets...letting other people take the planet with one kill ships). Destroyers are exceptionally good for taking lightly defended planets since they can carry 5 armies and are both fast and maneuverable. Heavier ships are more useful for taking well defended planets, since they can take the punishment of random torps. Remember that Assault ships can carry an army for every 0.33 kills...so an assault ship is much better for taking planets. However, enemies know what assault ships can do, and will often ogg one without even checking how many kills it has.

Another choice is how many armies to carry. This depends on what you are trying to do, and how many armies your team has to use or lose. If you expect that your team can defend the planet youre taking, only carry enough armies to leave one of yours on the planet, and let it grow. Carrying more is an invitation to be ogged, and is probably a waste unless youre sure that you can grab more than one planet in a single run. If you think your team cant defend the planet, and youre just taking it to deny its growth to the enemy, try to carry enough to bring it to 3 or 4, so that the enemy will have to waste many armies to get it back. Again, carrying more is just an invitation to be ogged, and it actually reduces your effectiveness, because youll be so timid defending your piles of armies that you wont be able to get anything done. Sometimes you gotta die to take a planet...If you are taking a planet that is heavily defended (like a last planet stand) then carrying more than 4 is probably useless, because youll probably just die with them all, and theres no point in losing lots of armies at a time. Of course, it all depends on how many armies you have: if you have 15 planets with 20 armies each, it doesnt really matter how many you die with, while if you have few armies you have to conserve every one you can get.

There are several different situations in which one takes planets.

 These are: your team is down, its an even battle, youre driving the enemy back, youre trying to break core planets, or a last planet stand.

 If you are short on planets, you are probably also short on armies, so defending them is a must. Hordes of oggers will come for you as soon as you pick armies up, if not sooner, so be ready. Dont just take a planet and fly away, because a planet with 1 army is easy pickings for anyone with a kill. Stay and defend it, or make sure someone else is. Otherwise, you might as well have died with the armies for all the good they did your team. If you have lots of armies (sometimes all your planets grow at once) it can be useful to save some on your starbase, rather than taking lots of planets that are easily taken back. Planets with 4 armies cant be taken by a 1 kill ship, while a planet with 1 army can. Always take an agri first if your team has the ability to defend it, because it will grow armies much faster than a regular planet. Who needs a home planet when you have an agri...

If the game is fairly even, then you want to take planets fast and stop the enemy from retaking them. Again, you are probably low on armies, and should be making sure the enemy is too. Only carry 5 at a time...go back for more after you take a planet. Carrying more is just too risky at this point in the game. Take agris first, then fuel, then repair. Your team will love you for it :-)

 Try to con your team into clearing the planet so you can take it. If they arent, you can try to clear it yourself, depending on how good you and the target are. If you think you need help, but arent getting it, try this trick: wait for a teammate to get near, then fire some torps and try to get the enemy to shoot back. Toggle your shields a couple of times too. Look like your having a really tough battle. Hopefully your teammate will get the idea and come chase the enemy off. Theres a lesson here that Ill mention again and again: people notice what happens on their short range scanner more than they notice the long range scanner. This is more true with less skilled players. If you want someone to notice you, do something on their short range view: if you dont want people to notice you, stay off their short range view. We all have tunnel vision, and often see only what we want to see. Use this to your advantage.

 As you advance into the enemy space, the game changes a bit. You start to have more armies than the enemy...you can afford to be more aggressive in taking planets. Every army you kill is another blow, every planet is production lost by the enemy. A really strong push at this point can force the enemy into a last planet stand. The enemy will be fighting back hard, but they dont have enough people to defend all of their planets heavily. Use this to your advantage.

 Oggers have an easy time at you when you are in their space, so watch for them all of the time. Dont be conspicuous; just kind of fly around until you see an opening. The key is that, as time goes on, different enemy planets will become weakly defended. People fly around, and others get killed. What you have to do is be ready for an opening to occur, and JUMP on it before the opportunity closes again. What I like to do is pick a promising side of the enemy space and float...careful not to get on the short range scanner of any enemies. A lot of times, someone might be floating perfectly aimlessly, headed somewhere else, but will zero in on you if they see you at short range. Even if you kill them, youve lost valuable time and opportunity, plus the person might very well look at the kill list and send out an ogg call on you. I wait for something: sometimes a planet just gets left open. Other times a teammate causes a distraction which keeps the enemy from looking at the long range scanner. (Remember, its hard to look for cloakers when someone is shooting at you). Sometimes my team just blasts the enemy off. When a chance occurs, you have to MOVE, and fast. You may only have seconds to get the planet and get out before you are noticed. Cloak, and scream in at max warp. As you get close, slow down so you can dodge a bit. Slow down more as you get close to the planet, because you have to be going slow to orbit the planet. Keep your shields down as you go in (to conserve fuel), but keep your finger on the shields key so you can toggle them instantly. I usually raise them once Im close enough to take damage from the planet. At this point there are four keys you need: bomb, beam down, det others torps, and shields (these are by default b, x, d, and uor s). I find it useful to remap the bomb key to something near xand d; I use s. This way you can hit all three keys without looking down. Its also useful to have the resource display on the short range view: this way you can see if you should bomb before beaming down armies. As soon as you start orbiting the planet, start bombing or beaming down. Be prepared to det incoming torps, and to raise shields if it seems necessary. If someone fires a plasma at you, its almost always better to raise the shields to take the plasma, then continue. Remember that raising shields stops you from attacking the planet, so you have to hit the bomb key again. Look for the army picture to disappear, then start beaming down. As you beam down, look back and forth between incoming torps and the little window above the message window which counts down the armies: 4..3..2..1..0..1.. As soon as youve beamed down all your armies, raise your shields and hit warp 6. Try to dodge torps on your way out, and punch it as soon as you are in the clear. Spin parry dodge. Lower your shields if no torps are hitting you, to save your fuel. Also, uncloak as soon as is feasible to avoid getting caught without any fuel. Head for the nearest friend and have him get in the way of the oncoming enemy hordes.

For a beginner, it can be a real problem to remember which keys to hit, and to hit them in the right order. Practice on planets that arent so defended: pretend there are enemies about, cloak, and take the planet as if someone were about to kill you. You never know, someone might be.....At all times, dont panic, and never give up: that battleship MIGHT just miss :-)

Taking last planets is even tougher, because there are less openings.

Usually youll have to beat one, two, or even more enemies to take the planet. An assault ship is usually necessary for this, unless the defenders are really clueless. You have to pick your attack carefully; you cant just charge in and take the planet. Wait for things to look good. Bide your time: if the enemy only has one planet, they probably arent coming back anytime soon. Wait for their admiral to fly away, THEN crash the planet. Always be ready; sometimes the enemy home planet will be totally undefended for just long enough to get in and take it. One of the best times to take a last planet is when the enemy has burned most of their fuel dealing with others: they might not have enough fuel to finish you off, especially if you det their torps for less damage. Sometimes youll wait for 15 minutes for those 3 seconds that the starbase drifts away from the planet. Only three seconds, but youre in and beaming down before he can find his plasma. Try to get the enemy to forget about you; let them deal with other people, and then suddenly pop out of nowhere to take the planet.

 As you fly in, youre expecting to get fired upon, so be ready for it.

Have one finger on the shields, and use your other fingers to change speeds. I usually try to slide in at about warp 5, dodging the enemy torps as I go in. I accelerate as I see a clear path to the planet, and hope I can orbit quickly. Always remember that youll probably have to lock on the planet again, as youve been spinning around in circles all this time. Once you lock on, keep the shields up and move your hand over the beam down key. As soon as you orbit, start beaming down, and have another finger ready to det the incoming torps. This is probably a suicide mission, so dont worry about what to do after you take the planet. Only stop beaming down if a plasma is incoming: then it might be worthwhile to take the plasma to the shields, then continue beaming down. Usually its all over before you can think about making it out alive. If you somehow manage to get all your armies down, try to fly away and get to your friends...but even if you die, youve really done a lot for your team.

 If theres more than one defender, or the one is fairly good, youll probably need help to take it. What you want is to have your enemies too busy to look at the long range scanner to see if cloakers are incoming. This usually means you want the distraction uncloaked, so that the enemies will focus on the distraction. Try to come in from a different angle; few people expect a planet taker to come from behind them. Make sure the good defenders are occupied, or have your teammates assigned to take them out. There are two plans: either have your teammates kill most of the defenders, or just keep them so busy that they wont see you. Killing works better at planets farther from the home planet, since the returning ships cant get back in time. Killing also is needed against good players, because they are probably going to see the cloaker anyway.

 If you are helping someone take a last planet, your job is to keep the enemy busy...too busy. If there are only a few (3 or less), and no SB, then pick out the best of the defenders and suicide into him. They will all burn fuel shooting at you, and youll take out the person most likely to kill your planet taker. The planet taker can then come in and take the planet in those few seconds before the enemy looks back at their long range scanner. If there are too many defenders for this to work, you have to be more sneaky. You somehow have to get the defenders to focus on you instead of the planet taker coming in from a different angle. One of my favorite tricks is to fly in cloaked, and then fly cloaked or uncloaked in the opposite direction from the real planet taker. If all goes well, the enemy will come chasing off after me while the real planet taker slips in behind before the defenders notice the deception. A lot depends on how good the defenders are: a few really clueful battleships can defend a planet against all comers.

This is all well and good, but usually you just get blown to bits without getting a single army down. If this happens, hurry back out and get some more kills. Pick up more armies, and start floating around again. You know youre doing well if the enemy says You have kills AGAIN???Hang around, look, wait, and then sneak in from behind, and get blown to smithereens. Come back again...and often that third time, theyll have just a little too fuel, and be a little too far away...and its all over.

 So thats the advice I have to give on planet taking. Ill just summarize:

 move: dont waste time

 get kills quickly

 watch for oggers always

 know what planets need to be taken, and who the defenders are

 choose the right ship and the right number of armies

 try not to attract attention

 try to get undefended planets

 wait for an opening, then jump on it

 attack when the enemy is too busy too deal with you

 come back again...and again...and again...eventually the enemy....will collapse

 And remember, theres little more satisfying than breaking a long last planet stand, or knowing that every player gets to see your name in the final message: : Galaxy has been conquered by Ff (Grey Elf) and the Federation. But the best compliment I ever got was when I took Romulus as a Fed three times in a row, and one of the Romulans sent to the all board:

 damn elf. Makes my day everytime I see that line.

 

Good luck, and good netrekking!

Andrew Markiel Rear Adm. Grey Elf (ex-

 jm79@andrew.cmu.edu Admiral Neutrino)

 

4. Miscellaneous Stuff

4.1 UDP, Short Packets, And SLIP

Netrek is played over the Internet (or other TCP/IP network), which was never really designed for this kind of highly interactive, widespread gaming. Originally all Netrek games were local (on the same piece of ethernet), or at worst on the same campus (The game originated at Berkeley.) When Netrek games started being played over wider geographic regions, the lag became unbearable for players far from the server. The packets simply could not be routed fast enough for smooth play.

At that time, Netrek was updated to support UDP (Universal Datagram Protocol) instead of TCP. This is a network protocol that runs much faster than TCP and greatly improved playability. The world was a happy place once again. The only catch is, unlike TCP, UDP packets are not guaranteed to arrive at their destination uncorrupted, or even at all! This is what makes UDP fast, but it is also a problem. In practice, it means that packets will occasionally get lostduring play. If a server packet is lost you will have a jerky update, or a ship will appear to be in the wrong position, or a random unmoving torpedo may float on your screen, seemingly ownerless. If a client packet is lost, your phasers may not fire when you press your middle mouse button, or your shields may stay down when you order them raised.

 In 1991, the first game of Netrek was successfully played over the modem via SLIP. This was made possible via yet another modification to Netrek, Short Packets. This was an internal rewrite of the communications protocol in Netrek to use much less bandwidth. In particular, rather than sending the full positions and status of all ships and torpedoes on every update, the server sends only those things that have changed and only for those objects which are in range (i.e. on your tactical map.) It also employs clever packing of information in bit fields and variable length packets to squeeze the maximum information out of every bit. This reduced the bandwidth for Netrek to modem usable levels. However, this too had its problems: with short packets it is possible for the client and server to get out of sync with each other, as the full game status is not resent very update. This has results similar to lost UDP packets.

 However, all is not lost. If you find that your ship doesnt always respond to your commands, bring up the ping stats with the ,(comma) key. (Incidentally, this is also where your lag is displayed: look at the avg. rt [round trip] timeline.) Read the line labeled tot out pkt loss. If this is greater than a few percent, UDP is losing a significant number of packets. To fix this, bring up the UDP options window with +(plus). Click on the line which says sending with simple UDPand cycle through the various options. Try each one (enforced state, enforced weapons & state, and the last resort, TCP only) until your packet loss drops to a satisfactory level. What is actually happening here is that the client is manually tracking what you ordered, and if the server doesnt do it, resending the request.

If you have strange garbage (random torps or phasers) on your screen or you seem to be firing at phantom ships, or your damage wont repair, or any of many strange effects, try requesting an update manually. Try the -(dash) key first, this requests a small update.If this doesnt fix the problem, try the =key. This will cause the client to pause noticeably over a modem as the server sends more than 2000 bytes of data, including all ship positions and status, planet positions, and each players stats, but it should completely resync the client and server. One option that I find useful in the options menu (press uppercase O) is the request update on enteroption. When this is on, every time you enter the galaxy in a new ship, everything is updated. This causes a short pause, but it gets rid of phantom data from your previous life which sometimes happens. If you find this useful, put the line askforUpdate: onin your netrekrc file.

 Incidentally, sometimes the client will fail to connect to the server with UDP and/or short packets. If this happens, to turn on UDP, press +and click on UDP channel is closed(it takes a few seconds, watch your warning window, try again if it doesnt work.) How do you know if UDP is off? You will be responding much slower than usual, and if you have a modem, you will see the client sending data even when youre flying straight and not firing, etc. These are TCP packet acknowledgments. To turn on short packets, press ,to bring up the short packet window, and click on Dont receive variable and short packets. Give it few seconds, watch your warning window, and try again if it fails.

 I personally often play over SLIP and a 14.4kbps modem gets you a reasonable lag and update rate. Playable, if youve never experience a direct connection.

Note that you only need 9600bps of bandwidth to play, but the slower the modem, the greater the lag. A 14.4kbps modem has a minimum propagation time of about 105 ms each way, so this means a minimum of 210 ms lag will be added to whatever the lag is over the internet from your local SLIP server. Good lag times over a 14.4kps modem are in the 260 ms range, which is awkward but playable (hint: dodge before youre fired upon, and lead with your phasers, not just torpedos.) On a direct ethernet conneciton, good lag is around 70 ms, but on a good day it is possible to get 40 or even 20ms lag across a continent. If you have a direct connection and youre consistently seeing high lag, you may have a slow video system or computer, which means that the network is fast enough but the computer is not. Try reducing the number of updates per second (again, in the options window.) If this works you can add updatesPerSecond: <n>to your xtrekrc, where <n> is whatever number worked for you. The default is 5; with a fast computer and net connection you can get up to 10 or so before it chokes or reaches a point of diminishing return.

 Something that is also very useful when playing over SLIP is to reduce the MTU (maximum transmission unit) setting of your SLIP software. The default is usually 1500. Reducing this to 1000 or even 500 will hurt throughput (so its bad for those 4 meg ftp transfers) but give you better lag. I have found that changing the MTU from 1500 to 1006 gives me 40ms better lag, on average.

 A very common question is whether to have compression turned on or off for SLIP play. At first I thought that compression should always be off to reduce lag, as when the modem compresses it tends to wait for a good chunk of data to arrive before transmitting so it can get a better compression ratio, and this increases lag. However, during testing I found that compression can sometimes get you an extra 20-30 ms off of your lag. Actually, lag seems to fluctuate randomly depending on the compressibility of the packets being transmitted/recieved. The moral of the story: experiment! On nice thing about compression on, though, it that your MOTD and Metaserver listings arrive much faster.

 

4.2 Ghostbusts

Ahh, the infallible Internetnot! You will at some point lose your connection to the server while playing. This is called a ghostbust. However, the designers of Netrek (those clever people!) designed a mechanism whereby the server will try to call you client back and reconnect should this happen. And it even works sometimes!

 If, while you are playing, you suddenly get a freeze, try switching to the netrek console window. If you see a ghostbust message there, just wait, and hopefully the server will call you back, and you will re-enter the game. This can take several minutes, but its better than sitting in a wait-queue. If you were very lucky, its possible that no one will have killed you while you were disconnected.

5. Resources

5.1 Where To Find More

Netrek is a very large and evolving game. There is much more to it than We could possibly put all in one document. We got most of the material in this document from the netrek archives.

For more, the best place to go is the newsgroup rec.games.netrek.

 Reading the FAQ and FOCS (frequently offered clever suggestions) for this group is a good idea.

 The Netrek Home Page on the Web is http://www.netrek.org/
It has links to just about everything that exists in netrek. Highly recommended.

 A very good page is the JCH information archive (also accessable from the Netrek Home Page),

http://www.cs.cmu.edu:8001/afs/cs/user/jch/netrek/README.html

 Those without www access can get the JCH archive by anon. ftp at

cs.cmu.edu /afs/cs.cmu.edu/user/jch/netrek or at

esoteric.agron.iastate.edu /pub/netrek/INFO

 

Have fun!

 

5.2Netrek Glossary

Compiled from posts by past players of the game, including:

 Kevin Bernatz (Sun Tzu)

 Terrence Chang (Exxon Valdez, retired)

 Hunter Chen

 Andrew Markiel (Grey Elf)

 Hugh More (ZZnew guy, retired)

Walter Pullen

 Thomas Smith

Timothy Worsley

Shekter: Credit is given for each entry. Those with no credit, I wrote. I have included many terms which are old or almost never heard anymore, for interest and amusement. There are, for example, about 10 different types of scum that I had never heard of before (pizza scum and terminal scum are my favorite.)

Ellis: Removed a lot of those really old ones because this manual is too long already. ;-)

 ASW:

 Anti-Scout Warfare.

Barren:

 No armies (duh, ;)) [ Hunter Chen ]

 [ro]Bot:

 Practice robot, or third space robot, or terminator

 [cy]Borg:

 A netrek client that has some sort of automatic cheatfeature, e.g. auto-dodge or phaser, cloaker display, etc. This is cheating except on designated borg servers such as mean.mu.caltech.edu.

 Borg scum / Client Scum:

 People who play borgs during non-borg hours or on non-borg servers.

[ Walter D. Pullen ]

 Someone who uses borg clients on non-client nights. At least most of

 these are from Berkley. Most popular are plasma clients and phaser

clients. I think its pretty clear that these people are cheating. [ Hugh More ]

[Shekter: this is now very uncommon due to the RSA verification

scheme, which was designed specifically to prevent this.]

Bronco server:

Bronco-type servers, such as CMU, Berekeley, USC, and UofW. Differs

 from Chaos servers in refuel and plasmas. No Galaxiy class ships. [ Hunter

 Chen ] [Shekter: this is what is now the standard Netrek server, so named

 becuase it first appeared on a machine called bronco.]

Buttorp:

 To fire torpedoes behind you while running. While this is a fun and

 easy way to waste someone who insists on chasing you, doing this habitually

 makes you a Runner Scum (see which). [ Shekter ]

 Clue:

 Netrek playing ability, experience, etc. Also someone who has these,

 e.g. Tywong is clue. [ Shekter ]

 Clueless:

 A generally derogatory term referring to a players inability to

match to expected levels of play either due to lack of experience or poor

ability. [ Hunter Chen ]

 Chaos server:

 Utexas or KSU server with high refuel rates, free plasmas, and Galaxy

 classes. Also known as Galaxy server. [ Hunter Chen ] [Shekter: these are

pretty rare these days. ]

 Deep Bombing:

 Bombing deep in enemy teritory. This often involves cloaking, and is

 very important at the begining of the game. [ Hugh More ]

 Det:

 to detonate torpedos. [ Timothy Worsley ]

DI:

According to the authors, DI is Destruction Inflicted.It is simply your (planets+bombing+offense) ratings x (Tmode hours).

When you a receive a promotion on DI, it means that you could sit around and do nothing while waiting for the required number of hours and still get the promotion. E.g., Admiral Flatliner has only 27.19 hours while 40 hours and a ratings total of 8 are required for the rank. 8 x 40 = 320 DI. Flatliners ratings add up to 11.69, so 27.19 x 11.69 ~= 320.

 Note that it is possible to lose DI because your ratings are always

 relative to the global average The double DI and quad DI promotions are

 fairly meaninglessbasically you can get a promotion with insufficient

 ratings but lots of hours. [ Terence Chang ]

 

DI scum:

Similar to ratings scum, these people either only play during the initial bombing runs, or else quit out near the end of the game when there are no more chances for lots of bombing and planet taking.

[ Walter Pullen ]

 DL:

Draft League. A semi-professional Netrek league with regular games.

 This requires less clue to play in than the INL (which see). [ Shekter ]

 Doosh:

 To kill an important carrier who is carrying a reasonable number of

 armies. Any kill of a base that has been effective in gameplay is a doosh,

 whether the base was carrying armies or not. There are some other odd

spots where dooshapplies. Any particularly large display of carnage

(such as two fleets meeting at a planet and going up in an 8-ship chain

explosion) certainly qualify. Also, even if a starbase were very weak and

innefective, any base ogg where 6-7 ships uncloaked simultaneously from

well-spread angles such that it is very clear that the base hasnt got a

snowballs chance in hell, is quite clearly a Doosh![ Jon Blow ]

 Ensign Clueless:

 A special term to denote those players who dont really know how to

 play very well, but help their teams greatly by being at the right place at

 the right time. These guys can really help Oggers and planet taker by

 distracting opponents and often serve to scare off runner scum who would

be taking planets. [ Hugh More (ZZnew guy) ]

 Ensign scum:

Good players who log in as guest or a new Ensign character so people

 will think they are clueless, until they promptly get wasted. Especially

fun to do against the Newbie scum, below. [ Walter Pullen ]

 Faker scum:

 People who do things like fly their SB at warp 1 when its not

damaged, or pretend to be damaged so youll chase them and they can waste

you. [ Walter Pullen ]

 Grey Elf effect:

 To suddenly dodge into a stream of torps. He named it himself.

[ Timothy Worsley ] Also called the Pac Man Effect or Wocka Wocka Wocka Effect.

 Hitler:

 Scum who log in specifically to hurt a team, and so help the opposing

 side. This can involve giving away kills, going in as their SB and letting

 the enemy kill it (along with 25 armies), telling the other side whos

 carrying, along with other nasty things. [ Walter D. Pullen ]

 A player who comes in on the other side in order to hurt them and then

 quits out again and rejoins his old team. [ Hugh More (ZZnew guy) ]

Hoser:

 Practice bot. Also a derogatory term. [ Hunter Chen ]

Human Target:

 A battleship Ogg done without cloaking at warp 8 in order to clear

 space. Named after Hugh Moores ship of the same name. [ Timothy Worsley ]

 

Iggy:

 Practice robot. So named because it is often the player designated by Ig (Player in slot g, on the Independent team.)

INL:

International Netrek League. A professional Netrek league. INL players and INL games are generally considered to be the ultimate in Netrek clue.

 [ Shekter ]

 Kids:

Armies. (I know theres an origin, but Im not sure what it is.)

[ Timothy Worsley ]

Kill scum:

 People who only play to rack up kills and dont do anything with them

 to help their team. They are often found hanging around the SB or around a

 last planet where they can easily rack up kills. [ Walter D. Pullen ]

 LPS [Last Planet Stand]:

If the enemy is down to a few planets, its useful to try to get the

 hardest ones first (like the home planet) while they are still uncertain

 which planet youre planning to take: i.e. you can fake an attack on a

different planet in hopes of drawing away some defenders. If it gets down

to an LPS on the hardest planet, its much harder to take since the enemy

knows exactly where youre going. [ Andrew Markiel ]

 Lawyers:

 Armies.

Message scum:

People who send nasty or insulting messages to individuals or teams to intimidate or scroll their screen so they cant read useful stuff.

 Especially applies to those robots. [ Walter Pullen ]

 Name scum:

Similar to Ensign scum, people who play under a different name then

 they are accustomed to. Often involves switching terminals with a teammate

 to confuse the enemy or give an advantage. E.g. a good dogfighter gets a

 kill and switches terminals with the team planet

 taker. [ Walter Pullen ]

 

Newbie:

 One who has just started playing netrek. [ Hunter Chen ]

 Newbie scum:

 Merciless players who target Ensigns and other newbies and waste them

 several times to rack up kills so they can do whatever. [ Walter Pullen ]

 Offensive Tackle:

See Human Target. Named for Jon Kims ship of the same name.

[ Timothy Worsley ]

Ogg:

Og....The act of Ogging. The process of cloaking and appearing adjacent to enemy while firing torps and tractoring on to him. Purpose: To kill. Without caring about dying in the process, also called suiciding. Ogging is an art, it consists of knowing when to cloak and when to uncloak.

Planets are not subject to Ogging, since no one can here their screams.

 Back in, I believe, November/December of 1990 I use to play netrek much more than now. At the time, I was probably only Flt Captain Sun Tzu, maybe even just a Captain. A group of us, which included Jay Hui (TheSlug), Byron Sinor (Krang), and Steve Russel (Khelik) were playing netrek with Terence. The three of us were Feds, Terence was Orion. It was a full game, and Terence had come in as Og <== (beginning to get how it happened :> ). At this time, suiciding people with kills *NEVER* happened. Dogfighting rained supreme, and cloaking was used only for planet taking, that is until Terence decided to teach us CMU boys alesson. Steve had accumulated a 3, 4 kill ship and had taken Spica (or El Nath, I dont remember) and Terence chased him and tried to mutual with him. Steve killed him, but was left at ~90% internal. As he wiggled towards Fed. space he watched the galactic map as Og reappeared and began to move rapidly in his direction. I will never forget how his voice shattered the calm of the cluster with yells of Its OGGGGGGGG. HELP! HELP!!!!!!!!!

 Its OOOOOOGGGGGGGGGGGGGGGG!!!. His final words were something to the

effect of AAAAAAAAAArrrrrrrgggggghhhhhh, Ive been Ogged!!. Jay and

I immediately picked up on the effectiveness of suiciding people, and had

Terence show us how to do it better. That is how Ogging started getting

popular, and how the name spread through Netrek History. [ Kevin Bernatz ]

Ogger Scum:

Those who Ogg for no understandable reason. This does not include

 those who occationally Ogg planet takers with kills, bombers, and star

 bases. However, there are people who Ogg people with no kills, and people

 who never take planets simply because its the only way they can see anyone

 blow up other than themselves. [ Hugh More (ZZnew guy) ]

 Pac Man Fever:

 The Grey Elf effect: To suddenly dodge into a stream of torps. This is much better known as Pac Man Fever!You know, eating the dots.

[ Scott Drellishak ]

 Peace scum:

 Players who declare peace against the opposing team so they can get

 confuse some of the enemy to waste fuel, and can fuel off of the enemy

 planets as well. Generally not applied to scouts mapping the galaxy at the

 beginning of a game if they declare peace. [ Walter Pullen ]

 Phaser Scum:

 people who, at every opportunity, will try to prove that Phasers are

 superior to torps and plasma, and who will was an entire ships worth of

fuel chasing a phasering a scout . [ Thomas Smith ]

Pig:

 A Borg client written my Tod Mummert. Also, any player who uses this

 client. Named after MUCUS PIG. [ Timothy Worsley ]

Pizza scum:

 A player who takes up a slot, normally cloaked, while eating, going to

 the bathroom etc. [ Timothy Worsley ]

Pop:

 When a planet grows armies. [ Timothy Worsley ]

Plasma Scum:

 Some one who devotes their game play to getting plasma and keeping it

(i.e. never dying). They stay near a fuel planet and just plasma anyone who

comes near. Really obnoxious dorks to have on your team. [ Ellis ? ]

 Planet Scum:

 A sub-group of Ratings Scum. Those who waste armies by dumping them on planets that cant be defended in order to improve their planet ratings. This can acutally help the team if they have a lot of armies or are against a clueless opponent. Often, however, it hurts the team because the planets are quickly recaptured and the armies are lost for good.

[ Hugh More ]

 ++:

 Carrying. More or less plusses represent an exact knowledge of number

 of armies. [ Timothy Worsley ]

Pregnant:

 Carrying armies. [ Timothy Worsley ]

Ratings scum:

 General scummy players who only play to make the next rank and dont

 bother helping their team any. [ Walter Pullen ]

 Ratio Scum:

 Another sub-group of Ratings Scum. Those who are so cautious about dogfighting that they rarely get a chance to do it, but prefer to pick up injured ships. These hurt a team by stealing kills from those who would use them (to take planets) and by filling up a team slot with a more-or-less useless player. Frequenly, star bases are Ratio Scum.

[ Hugh More ]

 RCD:

 Receiver Configurable Distress. There is a whole section on these in your client manual.

 Res[urrection] scum:

 People who kill you right when you enter the game. The worst scum of

 this type can kill you in this manner several times (especially in a borg

 on needmore) each time you get pissed off and come in to kill the person

 only to be smashed by a plasma and 8 torps before you can move or fire

 anywhere. [ Walter Pullen ]

 Type II Res scum:

Basically the opposite of the above. These people use a shiny new ship or two to take out most anyone near their home planet, i.e. you are beautifully dogfighting, and manage to take out that BB in your DD. Unfortunately you are now going warp 2 and he comes right back in and flies at you in a new CA at warp 9 and your kill quickly becomes his kill.

[ Walter Pullen ]

 Redlining:

 Flying for a long period of time with an e-temp above 95.

[ Timothy Worsley ]

The ROBO effect:

 Shooting a plasma as soon as it is fired. Some only count this as the ROBO effect if the phasorer is then accused of playing a borg client.

[ Timothy Worsley ]

Robot scum:

 Players who bring in a 3rd space robot to give them an initial

 advantage if they get genocided, or else attract the Terminators or

 Hunterkillers over into enemy space to wreak havoc. [ Walter Pullen ]

 [Ellis: since most servers no longer allow bombing out of T, and

 terminatorsweapons will only hurt the team who fired out of T, and not

 many servers even have iggy, you wont see this one a lot either.]

 Runner Scum:

 Berkley term. 1) This refers to those who run from and even fight in hopes of gaining the advantage of shooting backwards. It is important that this does not include running when outnumbered, injured, or out of fuel.

It also does not include merely attemping to stay at rangewhere a smaller

 ship is more effective. Runner scum are looked down upon because this

 tactic cant be used by everyone. If it were, there would be no kills. So

 those who try to make the game more interesting get reamed. 2) also often

 used to descibe those who hide in the backfield and only fight the

 occational straggler. [ Hugh More (ZZnew guy) ]

 RSA:

 The encryption alogrithm used in Netrek to prevent people from using borgs. It works like this: each client has its own key, which is in two parts, a public and a private key. The public key is given to all the servers. The private key is hidden in the client binarythis is why clients are distributed only in binary form. When the client connects to the server, the server generates a packet of random data and sends it to the client. The client encrypts this with its private key and sends it back to the server. The server decrypts this with the public key for that client. If the client is what it claims to be, i.e. it has the correct private key, the public key will decrypt the packet back to the original sequence. Its actually somehwat more complex than this, but the net result is that its very difficult to use a borg when you are not supposed to.

Even if you do manage to create a blessed borg, the server gods can

simply disable the particular key you are using, without causing too much

disruption. [ Shekter ]

 Scum:

 Of course I like that one definition I read on this group a while

back, that a ___ scum is someone who does ___ more than I do. [ Walter

Pullen ]

I should point out that at times, calling someone a <whatever> scum

is a compliment. Particularly, Planet Scum and Ogger Scum can often help

their teams, and are cheered by thier fellows. [ Hugh More ]

 Shark Ogg:

 To Ogg, without cloaking, by following a player just outside of effective weapon range, until s/he reaches an obstacle, and then attacking.

 [ Timothy Worsley ]

SMACK!:

 A hit with a plasma torpedo, especially if the ship dies, when it is

also a FATALITY, and especially when the ship in question was carrying, in

which case it is also a DOOSH! [ Ellis ]

 Surface Bombing:

 Bombing outside planets, genocided race planets, and other undefended

 planets. [ Hugh More ]

 Starbase scum:

 People who play a SB and try to individually waste anyone that comes

 near. This involves cloaking and when an enemy comes within range, quickly

 uncloaking and tractoring it in to its death. Common tactic found most

 anywhere. I do it all the time. :) [ Walter Pullen ]

 [Ellis: of course, the base isnt helping its team at all. Dont do it.]

 Stealer scum:

 Very annoying teammates who steal your kills or planets, e.g. you

 skillfully wound Flt. Capt. Dodgeswell after a hard dogfight and are about

 to take him out when some Lieutenant flies in and takes the kill with one

 phaser, or you use 4 of your armies to neutralize a planet, only to have

 someone else take it when you are away getting more armies. Generally

 doesnt apply if they take kills from the SB or take heavily contested

 planets. [ Walter D. Pullen ]

 Switcher scum:

 People who switch sides in the middle of a game, often to the more

 clueful team so they can benefit by a quick genocide. Especially scummy is

 to log in on one side, and bomb the enemy flat, then quickly switch and

bomb the first team flat, to rack up DI. [ Walter Pullen ]

 T:

 See T-mode.

 Terminal scum:

People who kick you off that nice color xterm because youre playing

 games and they want to use it to get some work done. [ Walter Pullen ]

 Third Space:

 The section of the galaxy owned by teams with no players on them, e.g.

 Orion and Klingon space in a Fed vs. Rom game.

 Third space scum:

 Someone who takes over neutral space rather than working for a

 genocide. [ Timothy Worsley ]

 T-Mode:

 Stands for Tournament Mode. Stats are only recorded on the server when there is a minmum number of players, usually 4 per team, to have a reasonable game, and the opposing teams are not diagonally across from each other, i.e. Rom Vs. Ori.. T-mode shows up as a little T in the flags display. You can only bomb and take planets in T-Mode, so basically if you dont have T-mode you dont have a game (which means you will have a minimum of eight players for a Netrek game.)

 T-Mode Scum:

 The worst slime in the galaxy. These are the people who at 3am log in

 4 times on each side as guest, and then come in as their main character and

 bomb everything and take over the galaxy a few times while they are the

only one playing = lots of DI. [ Walter Pullen ] [Shekter: this is not

possible on many servers now, as they check the actual login and IP

address of the player to prevent this sort of thing ]

 Wocka Wocka Wocka:

 Pac Man effect of eating enemys torps without detting. Also

labelled as the Grey Elf Effect. [ Hunter Chen ]

  netrek-client-cow-3.3.2/cow.css0000664000175000017500000000067313657750470015361 0ustar jamesjames BODY { background: url(stars.gif) black; color: #CCDDFF; } A:link { color: #CCFF80 } /* unvisited link */ A:visited { color: #FF80FF } /* visited links */ A:active { color: #FF0000 } /* active links */ H1 { align: center; color: #00CC00 } H2, H3, H4 { color: #00CC00 } OL { list-style: decimal inside} OL OL { list-style: lower-roman outside } DT { color: #FF0000 } PRE { color: #FFFFFF } .title { color: #00CC00 } netrek-client-cow-3.3.2/enter.h0000664000175000017500000000010413657750470015332 0ustar jamesjamesvoid enter(void); void openmem(void); void init_hockey_lines(void); netrek-client-cow-3.3.2/README.3.010000664000175000017500000000273013657750470015313 0ustar jamesjamesThis file contains the most recent changes to the COW client, with example .xtrekrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience. ***************************************************************** 1) Change Log ***************************************************************** 3.01 pl0 Jun. 22, 2002 - COW_SDL_MIXER_BRANCH Jun. 11, 2002 + add spike solution [tanner] + converted local.c to SDL_mixer + added cvs commit to mailing list - minor source packaging changes [cameron] - mouse wheel support [siegl] ***************************************************************** 2) Cut and past changes to make COW work like it used to. ***************************************************************** none ***************************************************************** 3) Cut and past changes to turn on *all* new features. ***************************************************************** 3.01 pl0 COW suports now up to 7 Mouse Buttons depending on the OS where the mouse wheel up is button 4 mouse wheel down is button 5 The extra buttons can be configured in the buttonmap with digits d e f g for normal operations and h-s for shift/control combinations. **************************************************************** 4) New manual sections **************************************************************** none netrek-client-cow-3.3.2/ntrk6x10.alt0000664000175000017500000003110013657750470016143 0ustar jamesjamesMZÿÿÿ¸@€º´ Í!¸LÍ!This program cannot be run in DOS mode. $NE˜ e,ƒ1@@Œ˜˜ €P D€.ü0€*ý0€'ý0€FONTDIRFIXFONTS-FONTRES 100,96,96 : Fixedsys for the IBM 8514!ËThis font is in the Public Domain`` 0 õ%ËNetrek6x10%ËThis font is in the Public Domain``¼ 0 õ%ËNetrek6x10Bold*ËThis font is in the Public Domain`` 0 õ%ËNetrek6x10Underline½This font is in the Public Domain`` 0 ²šš²Êâú*BZrŠ¢ºÒê2Jbz’ªÂÚò ":Rj‚š²Êâú*BZrŠ¢ºÒê2Jbz’ªÂÚò " : R j ‚ š ² Ê â ú  * B Z r Š ¢ º Ò ê   2 J b z ’ ª  Ú ò  " : R j ‚ š ² Ê â ú  * B Z r Š ¢ º Ò ê 2Jbz’ªÂÚò ":Rj‚š88|88T(T(T(THHxHH<p@`@\8@@88$8$$@@@x< 8 8((8||HhhXH <HH0 <pp||||||p|| @ |@  @||((((|| @$ x 8l (((((|(|((8P88$T((TH PP TH4    D(|(D| |8 @@(DDD(0P|8D @||D8(H||@XdD8 @XdD8| 8DD8DD88DL40888  ||@  @8D8DLTX@8(DD|DDx$$8$$x8D@@@D8x$$$$$x|@@x@@||@@x@@@8D@@LD8DDD|DDD88D8DHP`PHD@@@@@@|DDlTDDDDDdTLDD8DDDDD8xDDx@@@8DDDDT8xDDxPHD8D@8D8|DDDDDD8DDD(((DDDTTlDDD((DDDD(| @|8 8@@ 88(D|08 #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "distress.h" #include "smessage.h" #include "senddist.h" /* this loads all sorts of useful data into a distress struct. */ static struct distress * loaddistress(enum dist_type i, W_Event * data) { struct distress *dist; struct obtype *gettarget(W_Window ww, int x, int y, int targtype), *gettarget2(int x, int y, int targtype), *target; dist = (struct distress *) malloc(sizeof(struct distress)); dist->sender = me->p_no; dist->dam = (100 * me->p_damage) / me->p_ship.s_maxdamage; dist->shld = (100 * me->p_shield) / me->p_ship.s_maxshield; dist->arms = me->p_armies; dist->fuelp = (100 * me->p_fuel) / me->p_ship.s_maxfuel; dist->wtmp = (100 * me->p_wtemp) / me->p_ship.s_maxwpntemp; /* wtmp can be more than 100% - dont let it wrap */ if (dist->wtmp > 0x7f) { dist->wtmp = 0x7f; } dist->etmp = (100 * me->p_etemp) / me->p_ship.s_maxegntemp; /* so.. call me paranoid -jmn */ dist->sts = (me->p_flags & 0xff) | 0x80; dist->wtmpflag = ((me->p_flags & PFWEP) > 0) ? 1 : 0; dist->etempflag = ((me->p_flags & PFENG) > 0) ? 1 : 0; dist->cloakflag = ((me->p_flags & PFCLOAK) > 0) ? 1 : 0; dist->distype = i; if (dist->distype > generic || dist->distype < take) dist->distype = generic; target = gettarget2(me->p_x, me->p_y, TARG_PLANET); dist->close_pl = target->o_num; target = gettarget(data->Window, data->x, data->y, TARG_PLANET); dist->tclose_pl = target->o_num; target = gettarget2(me->p_x, me->p_y, TARG_ENEMY); dist->close_en = target->o_num; target = gettarget(data->Window, data->x, data->y, TARG_ENEMY); dist->tclose_en = target->o_num; target = gettarget2(me->p_x, me->p_y, TARG_FRIEND); dist->close_fr = target->o_num; target = gettarget(data->Window, data->x, data->y, TARG_FRIEND); dist->tclose_fr = target->o_num; target = gettarget2(me->p_x, me->p_y, TARG_PLAYER); dist->close_j = target->o_num; target = gettarget(data->Window, data->x, data->y, TARG_PLAYER); dist->tclose_j = target->o_num; /* lets make sure these aren't something stupid */ dist->cclist[0] = 0x80; dist->preappend[0] = '\0'; dist->macroflag = 0; return (dist); } /* Coordinating function for _SENDING_ a RCD */ /* Send an emergency signal out to everyone. */ void emergency(enum dist_type i, W_Event * data) { char ebuf[200]; struct distress *dist; char cry[MSG_LEN]; char *info; int len; int recip; int group; group = MTEAM; recip = me->p_team; dist = loaddistress(i, data); if (gen_distress) { /* send a generic distress message */ Dist2Mesg(dist, ebuf); pmessage(ebuf, recip, group | MDISTR); } else { len = makedistress(dist, cry, distmacro[dist->distype].macro); if (len > 0) { /* klude alert */ info = cry; if (strncmp((char *) getaddr2(MTEAM, recip), cry, 8) == 0) { /* this means we should _strip_ the leading bit because it's * * * redundant */ info = cry + 9; } pmessage(info, recip, group); } } free(dist); } /* the primary subroutine for newmacro, converts the strange and wonderful * * newmacro syntax into an actual message. * This is about as inefficient as * they come, but how often is the player * going to send a macro?? * 6/3/93 * - jn */ int pmacro(int mnum, char who, W_Event * data) { char addr; int group, len, recip; char cry[MSG_LEN]; char *pm; struct distress *dist; if (!UseNewMacro) return 0; /* get recipient and group */ #ifdef TOOLS if (keys[0] != '\0') { if ((pm = INDEX((char *) keys, who))) who = macroKeys[pm - (char *) keys].dest; } #endif if ((who == 't') || (who == 'T')) addr = teamlet[me->p_team]; else addr = who; group = getgroup(addr, &recip); if (!group) { printf("Bad group! %c %d %d\n", addr, recip, group); return (0); } pm = macro[mnum].string; dist = loaddistress(0, data); len = makedistress(dist, cry, pm); if (len > 0) { #ifdef MULTILINE_MACROS if (multiline_enabled && (macro[mnum].type == NEWMULTIM)) pmessage(cry, recip, group | MMACRO); else #endif /* MULTILINE_MACROS */ pmessage(cry, recip, group); } free(dist); return 1; } netrek-client-cow-3.3.2/newwin.h0000664000175000017500000000044113657750470015530 0ustar jamesjames/* newwin.c */ pid_t newwin_fork(); void newwinmeta(char *hostmon, char *progname); void newwin(char *hostmon, char *progname); void showMotd(W_Window motdwin, int atline); void mapAll(void); void entrywindow(int *team, int *s_type); void newMotdLine(char *line); void motd_refresh(void); netrek-client-cow-3.3.2/parsemeta.c0000664000175000017500000010424013657750470016177 0ustar jamesjames#undef DEBUG #include "config.h" #include "copyright.h" #ifdef META #include INC_LIMITS #include INC_FCNTL #include #include #include #include #include #include #include #include INC_SYS_SELECT #include INC_STRINGS #include #include INC_NETINET_IN #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "version.h" #include "patchlevel.h" #include "badversion.h" #include "defaults.h" #include "newwin.h" #include "parsemeta.h" #ifdef WIN32 /* socket garbage in case the client is not running on NT */ #define read(f,b,l) recv(f,b,l,0) #define write(f,b,l) send(f,b,l,0) #define close(s) closesocket(s) #endif /* Constants */ #define BUF 6144 #define LINE 100 /* Width of a meta-server line */ #define MAXMETABYTES 2048 /* maximum metaserver UDP packet size */ static int msock = -1; /* the socket to talk to the metaservers */ static int sent = 0; /* number of solicitations sent */ static int seen = 0; /* number of replies seen */ static int verbose = 0; /* whether to talk a lot about it all */ static time_t last; /* time of last refresh */ /* Local Types */ struct servers { char address[LINE]; /* host name or ip address of server */ int port; int age; /* age in seconds as received */ time_t when; /* date time this record received */ int refresh; /* data needs redisplaying */ int lifetime; /* remaining cache life of entry */ int players; int status; char typeflag; char comment[LINE]; pid_t pid; /* our last known child playing here */ int exitstatus; /* exit status of last known child here */ int observer; /* set if child is an observer */ }; struct servers *serverlist = NULL; /* The record for each server. */ static int num_servers = 0; /* The number of servers. */ static int chosen = -1; /* Arrow key chosen server. */ static int metaHeight = 0; /* The number of list lines. */ static char *metaWindowName; /* The window's name. */ static int statusLevel; static W_Window metaWin, metaList, metaHelpWin = NULL; void *logo; /* button offsets from end of list */ #define B_ADD 4 #define B_REFRESH 3 #define B_HELP 2 #define B_QUIT 1 #define N_TITLES 1 #define N_BUTTONS 4 #define N_GAP 1 #define N_OVERHEAD N_TITLES+N_BUTTONS+N_GAP /* The status strings: The order of the strings up until statusNull is * important because the meta-client will display all the strings up to a * particular point. * * The strings after statusNull are internal status types and are formatted * separatly from the other strings. * * The string corresponding to "statusNull" is assigned to thoes servers which * have "statusNobody" or earlier strings in old, cached, meta-server data. */ char *statusStrings[] = {"", "Wait queue:", "-", "Timed out", "No connection", "Active", "CANNOT CONNECT", "DEFAULT SERVER"}; enum statusTypes { statusOpen = 0, statusWait, statusNobody, statusTout, statusNoConnect, statusNull, statusCantConnect, statusDefault }; static const int defaultStatLevel = statusTout; /* Functions */ extern void terminate(int error); char *metahelp_message[] = { "Netrek Server List - Help", "", "This is a list of Netrek servers, from the Metaserver, or on your", "local network. You can do this:", "", " - click on a server to join the game there,", "", " - middle-click on a server to immediately join as guest,", "", " - right-click on a server to observe the game there,", "", " - click refresh to reload the list of servers,", "", "-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --", "", "Tips for new Netrek players:", "", " 1. when you enter the game, press the number 4 to start moving,", " other numbers are slower or faster,", "", " 2. you are the white ship in the centre of the left-hand screen,", "", " 3. use right-click on the mouse to steer toward a point in space,", " you will find it easier to turn at lower speeds,", "", " 4. use left-click on the mouse to fire a torpedo, they travel over", " time so you have to point ahead of your target, they hurt enemy", " ships but usually pass right through your team,", "", " 5. use middle-click on your mouse to fire a phaser, they are", " instant so point at your target, but only work well close up,", "", " 6. the aim of the game is to capture planets, killing enemies is", " only a means to an end, and dying is a good thing, because you get a", " new ship,", "", " 7. but if someone kills you, they can begin to capture planets, so", " it is best to not die in vain,", "", " 8. people in your team will try to communicate so that you can all", " do things together, because when you cooperate better than the other", " team, you win.", "", " 9. use the 'h' key to see a list of commands for your ship.", "", "Observing is a good way to learn. When you join as an observer, you", "won't see much until you use 'l' (lower-case L) to lock on to a", "player. Choose a good player and watch what they do.", "", "For more information on Netrek, visit http://netrek.org/beginner", NULL }; static void make_help() { int i, l, h, w; /* calculate width and height required */ h = (sizeof(metahelp_message)/sizeof(char *)); w = 0; for (i=0; i w) w = l; } metaHelpWin = W_MakeWindow("Netrek Server List - Help", 500, 500, w * W_Textwidth + 40, h * W_Textheight + 40, 0, 2, foreColor); } static void expo_help() { int i, h; h = (sizeof(metahelp_message)/sizeof(char *)); for (i=0; ih_addr_list[i] == NULL) break; address.sin_addr.s_addr = *(long *) hp->h_addr_list[i]; if (verbose) fprintf(stderr, "requesting player list from metaserver %s at %s\n", token, inet_ntoa(address.sin_addr)); if (sendto(msock, req, reqlen, 0, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("ReadMetasSend: sendto"); } else { sent++; } } } } else { /* call to inet_addr() worked, host name is in IP address form */ if (verbose) fprintf(stderr, "requesting player list from metaserver %s\n", inet_ntoa(address.sin_addr)); if (sendto(msock, req, reqlen, 0, (struct sockaddr *)&address, sizeof(address)) < 0) { perror("ReadMetasSend: sendto"); } else { sent++; } } /* look for next host name in list */ token = strtok(NULL,","); } /* while (token != NULL) */ metaWindowName = "Netrek Server List"; return sent; } /* allocate or extend the server list */ static void grow(int servers) { int size; if (serverlist == NULL) { size = sizeof(struct servers) * servers; serverlist = (struct servers *) malloc(size); } else { size = sizeof(struct servers) * (servers + num_servers); serverlist = (struct servers *) realloc(serverlist, size); } } static struct servers *server_find(char *address, int port) { int j; for(j=0;jaddress, address)) && (sp->port == port)) { return sp; } } return NULL; } static void version_r(struct sockaddr_in *address) { char *p; int servers, i; time_t now = time(NULL); /* number of servers */ p = strtok(NULL,"\n"); if (p == NULL) return; servers = atoi(p); /* sanity check on number of servers */ if (servers > 2048) return; if (servers < 0) return; if (verbose) fprintf(stderr, "metaserver at %s responded with %d server%s\n", inet_ntoa(address->sin_addr), servers, servers == 1 ? "" : "s" ); if (servers == 0) return; /* for each server listed by this metaserver packet */ for(i=0;i statusLevel) throwaway++; /* the sp->why_dead workaround */ if (status == 6) if ((status - 3) <= statusLevel) throwaway--; p = strtok(NULL,","); /* age (of data in seconds) */ if (p == NULL) continue; age = atoi(p); p = strtok(NULL,","); /* players */ if (p == NULL) continue; players = atoi(p); p = strtok(NULL,","); /* queue size */ if (p == NULL) continue; queue = atoi(p); p = strtok(NULL,"\n"); /* server type */ if (p == NULL) continue; type = p[0]; /* ignore paradise servers */ if (type == 'P') throwaway++; /* if it's to be thrown away, do not add this server, skip to next */ if (throwaway) continue; /* find in current server list? */ sp = server_find(host, port); /* if it was found, check age */ if (sp != NULL) { if ((now-age) < (sp->when-sp->age)) { sp->age = now - (sp->when-sp->age); sp->when = now; sp->refresh = 1; sp->lifetime = 20; continue; } else { sp->age = age; sp->when = now; sp->lifetime = 20; } } else { /* not found, store it at the end of the list */ grow(1); sp = serverlist + num_servers; num_servers++; strncpy(sp->address,host,LINE); sp->port = port; sp->age = age; sp->when = now; sp->lifetime = 4; } sp->refresh = 1; /* from meta.h of metaserver code */ #define SS_WORKING 0 #define SS_QUEUE 1 #define SS_OPEN 2 #define SS_EMPTY 3 #define SS_NOCONN 4 #define SS_INIT 5 /* not a real metaserver number, but overcomes a limitation of dropping text */ /* description of sp->why_dead */ #define SS_TOUT 6 switch (status) { case SS_QUEUE: sp->status = statusWait; sp->players = queue; break; case SS_OPEN: sp->status = statusOpen; sp->players = players; break; case SS_EMPTY: sp->status = statusNobody; sp->players = 0; break; case SS_TOUT: sp->status = statusTout; sp->players = 0; break; case SS_NOCONN: /* no connection */ case SS_WORKING: /* metaserver should not return this */ case SS_INIT: /* nor this */ default: sp->status = statusNoConnect; sp->players = 0; break; } sp->typeflag = type; strcpy(sp->comment, ""); sp->pid = -1; sp->exitstatus = 0; sp->observer = 0; } } static void version_s(struct sockaddr_in *address) { char *p; time_t now = time(NULL); /* use return address on packet as host address for this server, since it isn't practical for the server to know it's own address; as is the case with multihomed machines */ char *host = inet_ntoa(address->sin_addr); if (verbose) fprintf(stderr, "server at %s responded\n", host); p = strtok(NULL,","); /* server type */ if (p == NULL) return; char type = p[0]; /* ignore paradise servers */ if (type == 'P') return; p = strtok(NULL,","); /* comment */ if (p == NULL) return; char *comment = strdup(p); if (strlen(comment) > LINE) comment[LINE] = '\0'; p = strtok(NULL,","); /* number of ports */ if (p == NULL) return; // int ports = atoi(p); /* not currently used */ // TODO: accept more than one port reply p = strtok(NULL,","); /* port */ if (p == NULL) return; int port = atoi(p); p = strtok(NULL,","); /* players */ if (p == NULL) return; int players = atoi(p); p = strtok(NULL,","); /* queue size */ if (p == NULL) return; // int queue = atoi(p); /* not currently used */ /* find in current server list? */ struct servers *sp = server_find(host, port); /* if it was not found, add it to the end of the list */ if (sp == NULL) { grow(1); sp = serverlist + num_servers; num_servers++; } /* add or update the entry */ strncpy(sp->address, host, LINE); sp->port = port; sp->age = 0; sp->when = now; sp->refresh = 1; sp->lifetime = 20; sp->players = players; if (type == 'u' && players == 0) { sp->status = statusNobody; } else { sp->status = statusOpen; } sp->typeflag = type; strncpy(sp->comment, comment, LINE); sp->pid = -1; sp->exitstatus = 0; sp->observer = 0; free(comment); } static int ReadMetasRecv(int x) { struct sockaddr_in address; /* the address of the metaservers */ socklen_t length; /* length of the address */ int bytes; /* number of bytes received from meta' */ fd_set readfds; /* the file descriptor set for select() */ struct timeval timeout; /* timeout for select() call */ char packet[MAXMETABYTES]; /* buffer for packet returned by meta' */ char *p; /* now await and process replies */ FD_ZERO(&readfds); if (msock >= 0) FD_SET(msock, &readfds); timeout.tv_sec = 10; timeout.tv_usec = 0; if (x != -1) FD_SET(x, &readfds); if (select(FD_SETSIZE, &readfds, NULL, NULL, &timeout) < 0) { if (errno == EINTR) return 0; perror("ReadMetasRecv: select"); return 0; } /* if x activity, return immediately */ if (x != -1 && FD_ISSET(x, &readfds)) return 0; if (msock < 0) return 0; /* if the wait timed out, then we give up */ if (!FD_ISSET(msock, &readfds)) return 0; /* so we have data back from a metaserver or server */ length = sizeof(address); bytes = recvfrom(msock, packet, MAXMETABYTES, 0, (struct sockaddr *)&address, &length ); if (bytes < 0) { perror("ReadMetasRecv: recvfrom"); return 0; } /* terminate the packet received */ packet[bytes] = 0; #ifdef DEBUG fprintf(stderr, "%s", packet); #endif /* DEBUG */ /* process the packet, updating our server list */ /* version identifier */ p = strtok(packet,","); if (p == NULL) return 0; switch (p[0]) { case 'r': version_r(&address); seen++; break; case 's': version_s(&address); seen++; break; } return 1; } static void SaveMetasCache() { FILE *cache; char cacheFileName[PATH_MAX]; char tmpFileName[PATH_MAX]; char *cacheName; int len; cacheName = getdefault("metaUDPCache"); /* overwrite existing file if possible */ if (cacheName && !findfile(cacheName, cacheFileName)) strcpy(cacheFileName, cacheName); if (cacheName) { len = strlen(cacheFileName); strcpy(tmpFileName, cacheFileName); /* create a temporary file with roughly the same name */ if ((cacheFileName[len - 1] == 'T') || (cacheFileName[len - 1] == 't')) tmpFileName[len-1] = 'R'; else tmpFileName[len-1] = 'T'; cache = fopen(tmpFileName, "w"); if (cache == NULL) { fprintf(stderr, "Cannot create a metaUDPCache temporary file `%s'\n", tmpFileName); fprintf(stderr, "Meta-server read will not be cached.\n"); } } else { cache = NULL; } if (cache != NULL) { if (fwrite(&statusLevel, sizeof(statusLevel), 1, cache) != 1 || fwrite(&num_servers, sizeof(num_servers), 1, cache) != 1 || fwrite(serverlist, sizeof(struct servers), num_servers, cache) != num_servers) { int xerrno = errno; fclose(cache); #ifdef _MSC_VER _unlink(tmpFileName); #else unlink(tmpFileName); #endif errno = xerrno; perror("Could not write to the new cache file"); } fclose(cache); #ifdef WIN32 /* Can't rename file to existing name under NT */ #ifdef _MSC_VER _unlink(cacheName); #else unlink(cacheName); #endif #endif if (rename(tmpFileName, cacheName) == -1) perror("Could not rename new cache file"); } } static void LoadMetasCache() { FILE *cache; char *cacheName; char cacheFileName[PATH_MAX]; int i; cacheName = getdefault("metaUDPCache"); if(!cacheName) { num_servers = 0; return; } findfile(cacheName, cacheFileName); cache = fopen(cacheFileName, "r"); if (cache == NULL) { num_servers = 0; return; } /* ignore the cache if user changed statusLevel */ if (fread(&i, sizeof(i), 1, cache) != 1 || i != statusLevel) { num_servers = 0; fclose(cache); return; } /* read the server list into memory from the file */ if (fread(&num_servers, sizeof(num_servers), 1, cache) != 1) { num_servers = 0; fclose(cache); return; } serverlist = (struct servers *) malloc(sizeof(struct servers)*num_servers); if (fread(serverlist, sizeof(struct servers), num_servers, cache) != num_servers) { free(serverlist); serverlist = NULL; num_servers = 0; fclose(cache); return; } fclose(cache); /* hunt and kill old server lines from cache */ for(i=0;i 0) continue; /* delete this entry by moving the ones above down */ for(j=i;j= statusNull) statusLevel = statusNull - 1; ReadMetasSend(); LoadMetasCache(); metaHeight = 2 + N_OVERHEAD; } static void redraw(int i) /* Redraw line i in the list */ { char buf[LINE + 1]; struct servers *sp; /* can't say a thing if line is beyond server list */ if (i >= num_servers) { /* but we can at least blank the line shown */ if (i < metaHeight-3) W_WriteText(metaList, 0, i+1, W_White, "", 0, 0); return; } sp = serverlist + i; snprintf(buf, LINE, "%-40s ", strlen(sp->comment) > 0 ? sp->comment : sp->address); buf[80] = '\0'; switch(sp->status) { case statusOpen: snprintf(buf + strlen(buf), sp->players, "################"); snprintf(buf + strlen(buf), 17 - sp->players, " "); strcat(buf, " "); break; case statusWait: snprintf(buf + strlen(buf), 16, "################ Q%2d", sp->players); break; default: snprintf(buf + strlen(buf), 16, "%-16s", statusStrings[sp->status]); strcat(buf, " "); break; } switch (sp->typeflag) { case 'P': strcat(buf, "Paradise"); break; case 'B': strcat(buf, "Bronco "); break; case 'C': strcat(buf, "Chaos "); break; case 'I': strcat(buf, "INL "); break; case 'S': strcat(buf, "Sturgeon"); break; case 'H': strcat(buf, "Hockey "); break; case 'F': strcat(buf, "Dogfight"); break; default: strcat(buf, "Unknown "); break; } { int age = sp->age; char *units; if (age > 86400) { age = age / 86400; units = "d"; } else if (age > 3600) { age = age / 3600; units = "h"; } else if (age > 90) { age = age / 60; units = "m"; } else { units = "s"; } sprintf(buf + strlen(buf), " %4d%s", age, units); } strcat(buf, " "); if (sp->pid != -1) { strcat(buf, sp->observer ? "Observing" : "Playing" ); } else { switch (sp->exitstatus) { case EXIT_FORK_FAILURE: strcat(buf, "Cannot Start"); break; case EXIT_UNKNOWN: case EXIT_OK: break; case EXIT_CONNECT_FAILURE: strcat(buf, "Connect Fail"); break; case EXIT_LOGIN_FAILURE: strcat(buf, "Login Fail"); break; default: { int badversion = (sp->exitstatus - EXIT_BADVERSION_BASE); if (badversion >= 0 && badversion <= MAXBADVERSION) { strcat(buf, badversion_short_strings[badversion]); } else { strcat(buf, "Unknown Response"); } } break; } } W_Color color = W_White; if (i == chosen) color = W_Green; if (sp->status == statusCantConnect) color = W_Red; if (sp->pid != -1) color = W_Cyan; W_WriteText(metaList, 0, i+1, color, buf, -1, 0); sp->refresh = 0; } static char add_buffer[LINE]; static int add_offset; static void add_init() { add_buffer[0] = '\0'; add_offset = 0; } static void add_redraw() { char buf[LINE + 1]; snprintf(buf, LINE, "Add a server: %s_", add_buffer); W_WriteText(metaList, 0, metaHeight-B_ADD, W_Yellow, buf, -1, 0); } static void add_commit() { struct servers *sp; grow(1); sp = serverlist + num_servers; num_servers++; strncpy(sp->address, add_buffer, LINE); sp->port = 2592; sp->age = 0; sp->when = time(NULL); sp->refresh = 1; sp->lifetime = 20; sp->players = 0; sp->status = statusNobody; sp->typeflag = 'U'; strncpy(sp->comment, add_buffer, LINE); sp->pid = -1; sp->exitstatus = 0; sp->observer = 0; metawindow(); } static int add_key(W_Event *data) { if (data->key == '\r') { add_commit(); add_init(); add_redraw(); } else if (data->key == 21) { add_init(); add_redraw(); } else if (data->key == 8 || data->key == '\177') { if (add_offset > 0) { add_buffer[add_offset-1] = '\0'; add_offset--; add_redraw(); } } else if (add_offset < (LINE-1)) { add_buffer[add_offset+1] = '\0'; add_buffer[add_offset] = data->key; add_offset++; add_redraw(); } return 0; } void metawindow() /* Show the meta server menu window */ { int i, height; char *header; static int lastHeight = 0; if (!metaWin) { height = 350 + metaHeight * (W_Textheight + 8) + 4 * (metaHeight - 1); metaWin = W_MakeWindow("Netrek Server List", 0, 0, 716, height, NULL, 2, foreColor); W_SetBackgroundImage(metaWin, "Misc/map_back.png"); logo = W_ReadImage(metaWin, "netrek-green-white-300px.png"); metaList = W_MakeMenu("metalist", 50, 200, LINE, metaHeight, metaWin, 1); lastHeight = metaHeight; make_help(); } else { if (metaHeight > lastHeight) { W_ReinitMenu(metaList, LINE, metaHeight); W_ResizeMenu(metaList, LINE, metaHeight); lastHeight = metaHeight; } // FIXME: handle metaList growing beyond metaWin } header = "Server Players Type Age"; W_WriteText(metaList, 0, 0, W_Cyan, header, -1, 0); for (i = 0; i < metaHeight; i++) redraw(i); /* Give the window the right name */ W_RenameWindow(metaWin, metaWindowName); /* Add additional options */ W_WriteText(metaList, 0, metaHeight-B_REFRESH, W_Yellow, "Refresh (r)", -1, 0); add_redraw(); W_WriteText(metaList, 0, metaHeight-B_HELP, W_Yellow, "Help & Tips (h)", -1, 0); W_WriteText(metaList, 0, metaHeight-B_QUIT, W_Yellow, "Quit (q)", -1, 0); /* Map window */ W_MapWindow(metaList); W_MapWindow(metaWin); } static void metadone(void) { W_UnmapWindow(metaList); W_DropImage(logo); W_UnmapWindow(metaWin); SaveMetasCache(); free(serverlist); } static void refresh() { W_WriteText(metaList, 0, metaHeight-B_REFRESH, W_Red, "Refresh (in progress)", -1, 0); W_NextScreenShot(metaWin, 0, 0); W_Flush(); ReadMetasSend(); } static void refresh_cyclic() { struct servers *sp; int i, interval = 30; /* while we have a local player, chances are they want their network link for play, and their eyes are on the tactical, they don't need to know about other servers */ for (i=0;ipid != -1) { if (!sp->observer) return; interval = 90; } } /* don't do until sufficient time has elapsed */ if ((time(NULL) - last) > interval) { W_NextScreenShot(metaWin, 0, 0); ReadMetasSend(); } } static void choose(int way) { int was; int lo = 0; int hi = num_servers - 1; if (hi < 0) { return; } was = chosen; if (chosen == -1) { chosen = lo; if (way > 0) chosen = lo; if (way < 0) chosen = hi; } else { if (way > 0) { chosen++; if (chosen > hi) chosen = hi; } if (way < 0) { chosen--; if (chosen < lo) chosen = lo; } } if (was != chosen) { if (was != -1) redraw(was); redraw(chosen); } } static int chose(int which, unsigned char key) { struct servers *sp; pid_t pid; if (which != chosen) { int was; was = chosen; chosen = which; if (was != -1) redraw(was); redraw(chosen); } sp = serverlist + which; xtrekPort = sp->port; if (key == W_RBUTTON) { /* Guess at an observer port */ xtrekPort++; fprintf(stderr, "you chose to observe on %s, guessing port %d\n", sp->address, xtrekPort); } serverName = strdup(sp->address); sp->pid = -1; sp->exitstatus = EXIT_UNKNOWN; fprintf(stderr, "you chose server %s port %d\n", serverName, xtrekPort); if ((pid = fork()) == 0) { char *args[16]; int argc = 0; setpgid(0, 0); args[argc++] = program; args[argc++] = "--server"; args[argc++] = serverName; if (xtrekPort != DEFAULT_PORT) { char port[32]; sprintf(port, "%d", xtrekPort); args[argc++] = "--port"; args[argc++] = strdup(port); } if (key == W_MBUTTON) args[argc++] = "--fast-guest"; args[argc++] = NULL; execvp(program, args); perror("execvp"); _exit(1); } /* we are the parent, did the fork fail? */ if (pid < 0) { perror("fork"); sp->exitstatus = EXIT_FORK_FAILURE; } else { sp->pid = pid; sp->observer = (key == W_RBUTTON); } redraw(which); W_Flush(); return 0; } static int button(W_Event *data) { if ((data->y > 0) && (data->y <= num_servers)) { /* click on server */ return chose(data->y - 1, data->key); } if (data->y == (metaHeight-B_REFRESH)) { /* refresh */ refresh(); } else if (data->y == metaHeight-B_HELP) { /* help */ toggle_help(); } else if (data->y == metaHeight-B_QUIT) { /* quit */ metadone(); terminate(0); } return 0; } static int key(W_Event *data) { if (data->y == (metaHeight-B_ADD)) return add_key(data); if (data->key == 113 || data->key == 196) { /* q or ^d */ metadone(); terminate(0); } else if (data->key == 114 || data->key == 210) { /* r or ^r */ refresh(); } else if (data->key == W_Key_Up) { choose(-1); } else if (data->key == W_Key_Down) { choose(1); } else if (data->key == '\r' || data->key == ' ') { /* enter or space */ if (chosen != -1) return chose(chosen, W_LBUTTON); } else if (data->key == 'g') { /* g, for guest */ if (chosen != -1) return chose(chosen, W_MBUTTON); } else if (data->key == 'o') { /* o, for observe */ if (chosen != -1) return chose(chosen, W_RBUTTON); } else if (data->key == 'h') { toggle_help(); } else { return button(data); } return 0; } static int metareap_needed = 0; /*! @brief Check if a child process, a playing client, has terminated. @details Attempts a no hang wait on each active client process in the server list and clears the pid entry if a child has terminated. @return activity count, number of processes seen to have terminated. */ static int metareap(void) { struct servers *sp; int i, status, activity; pid_t pid; metareap_needed = 0; activity = 0; for (i=0;ipid != -1) { pid = waitpid(sp->pid, &status, WNOHANG); if (pid == sp->pid) { sp->pid = -1; if (WIFEXITED(status)) { activity++; sp->exitstatus = WEXITSTATUS(status); } redraw(i); W_Flush(); } } } return activity; } /*! @brief child death signal handler @details does nothing much, but needs to exist to ensure that select(2) is given EINTR when a child terminates, otherwise we will not note a termination until after the select times out. */ void sigchld(int ignored) { metareap_needed++; } void metainput(void) /* Wait for actions in the meta-server window. * * This is really the meta-server window's own little input() function. It is * needed so we don't have to use all the bull in the main input(). Plus to * use it I'd have to call mapAll() first and the client would read in the * default server and then call it up before I can select a server. */ { W_Event data; (void) SIGNAL(SIGCHLD, sigchld); while (W_IsMapped(metaWin)) { while (1) { W_Flush(); if (W_EventsPending()) break; if (ReadMetasRecv(W_Socket()) || metareap_needed) { metareap(); metaHeight = num_servers + N_OVERHEAD; metawindow(); W_Flush(); } refresh_cyclic(); } W_NextEvent(&data); switch ((int) data.type) { case W_EV_KEY: if (data.Window == metaList || data.Window == metaWin) if (key(&data)) return; if (data.Window == metaHelpWin) hide_help(); break; case W_EV_BUTTON: if (data.Window == metaList) if (button(&data)) return; if (data.Window == metaHelpWin) hide_help(); if (data.Window == metaWin && data.y < 200) W_NextScreenShot(metaWin, 0, 0); break; case W_EV_EXPOSE: if (data.Window == metaHelpWin) expo_help(); if (data.Window == metaWin) { W_DrawScreenShot(metaWin, 0, 0); W_DrawImage(200, 9, logo); } break; case W_EV_CLOSED: if (data.Window == metaWin) { fprintf(stderr, "you quit, by closing the server list window\n"); terminate(0); } break; default: break; } } } #endif netrek-client-cow-3.3.2/macrowin.h0000664000175000017500000000010013657750470016030 0ustar jamesjames/* macrowin.c */ void fillmacro(void); void showMacroWin(void); netrek-client-cow-3.3.2/interface.h0000664000175000017500000000066313657750470016167 0ustar jamesjames/* interface.c */ void set_speed(int speed); void set_course(unsigned char dir); void shield_up(void); void shield_down(void); void shield_tog(void); void bomb_planet(void); void beam_up(void); void beam_down(void); void repair(void); void repair_off(void); void repeat_message(void); void cloak(void); void cloak_on(void); void cloak_off(void); unsigned long mstime(void); unsigned long msetime(void); void run_clock(time_t curtime); netrek-client-cow-3.3.2/cow.spec0000664000175000017500000002000713657750470015514 0ustar jamesjames# # $Id: cow.spec,v 1.9 2002/07/07 22:22:11 tanner Exp $ # # HOW TO COMPILE # # on redhat: --define "keydef path/to/key.def" # # rpm -ba --define "keydef /home/basic/.key.def" cow.spec # rpm --rebuild --define "keydef /home/basic/.key.def" cow-3.00_XXXX.src.rpm # # If you do not define a key.def file, I'll default to the sample_key.def # found in the cow source distribution. Please read the FAQ about blessed # clients if this does not make sense to you # # Summary: Netrek Client Name: cow Version: 3.3.2 Release: realtime.1 Copyright: BSD URL: http://cow.netrek.org/ Vendor: Real Time Enterprises, Inc. Packager: Bob Tanner Distribution: Red Hat Linux 7.3 / i386 Group: Amusements/Games Source0: %{name}-%{version}.tar.bz2 Source3: pixmaps.tgz Source4: COW.3.00pl2.doc.tar.gz %define png $RPM_BUILD_DIR/%{name}-%{version}/cow.png %define desktop $RPM_BUILD_DIR/%{name}-%{version}/cow.desktop # # Sorry, I don't distribute my key with the source code, see the COW.DOC file # on generating your own key # #Source10: key.def # # You can get the tclug-menu at Twin Cities Linux Users Group official ftp # server # The tclug-menu package just setups up the appropriate menu entries for cow. # Requires: gmp, tclug-menu, SDL >= 1.2.4, SDL_mixer >= 1.2.4 BuildRequires: gmp-devel, SDL-devel >= 1.2.4, SDL_mixer-devel >= 1.2.4 BuildRoot: %{_tmppath}/%{name}-%{version}-root %description This is a client for the multi-player game of Netrek. Netrek is the probably the first video game which can accurately be described as a "sport." It has more in common with basketball than with arcade games or Quake. Its vast and expanding array of tactics and strategies allows for many different play styles; the best players are the ones who think fastest, not necessarily the ones who twitch most effectively. It can be enjoyed as a twitch game, since the dogfighting system is extremely robust, but the things that really set Netrek apart from other video games are the team and strategic aspects. Team play is dynamic and varied, with roles constantly changing as the game state changes. Strategic play is explored in organized league games; after 6+ years of league play, strategies are still being invented and refined. The game itself has existed for over 10 years, and has a solid playerbase, including some people who have been playing for nearly as long as the game has existed. All Netrek clients and servers are completely free of charge, although there are several people working on commercial netrek variants or derivatives. Netrek web site: Development web site: To start the client program, run /usr/bin/netrek, and a list of servers should be displayed. %prep %setup -q -a 3 -a 4 %build #%{__autoconf} %configure --enable-unstable # # If we find a keydef then use it, otherwise use the sample_key.def # %{__make} OPT="$RPM_OPT_FLAGS" %{?keydef:KEYDEF="%{keydef}"} %{?_smp_mflags} %install rm -rf %{buildroot} # # Redhat GNOME and Ximian GNOME desktop directories # %{__install} -m 755 -d %{buildroot}%{_sysconfdir}/X11/applnk/Games/Tclug %{__install} -m 755 -d %{buildroot}%{_datadir}/gnome/ximian/Programs/Games/Tclug %{__install} -m 755 -d %{buildroot}%{_datadir}/gnome/apps/Games/Tclug # # KDE desktop directory # %{__install} -m 755 -d %{buildroot}%{_datadir}/applnk/Games/Arcade %{__install} -m 755 -d %{buildroot}%{_datadir}/icons/hicolor/16x16/apps %{__install} -m 755 -d %{buildroot}%{_datadir}/icons/hicolor/32x32/apps %{__install} -m 755 -d %{buildroot}%{_datadir}/icons/hicolor/48x48/apps %{__install} -m 755 -d %{buildroot}%{_datadir}/icons/locolor/16x16/apps %{__install} -m 755 -d %{buildroot}%{_datadir}/icons/locolor/32x32/apps %{__install} -m 755 -d %{buildroot}%{_datadir}/icons/locolor/48x48/apps # # Common directories # %{__install} -m 755 -d %{buildroot}%{_datadir}/pixmaps %{__install} -m 755 -d %{buildroot}%{_bindir} %{__install} -m 755 -d %{buildroot}%{_datadir}/sounds/%{name} %{__install} -m 755 -d %{buildroot}%{_datadir}/pixmaps/%{name} # # Install desktop entries in GNOME areas # %{__install} %{desktop} %{buildroot}%{_sysconfdir}/X11/applnk/Games/Tclug %{__install} %{desktop} %{buildroot}%{_datadir}/gnome/ximian/Programs/Games/Tclug %{__install} %{desktop} %{buildroot}%{_datadir}/gnome/apps/Games/Tclug # # Install desktop entry into KDE areas # %{__install} %{desktop} %{buildroot}%{_datadir}/applnk/Games/Arcade %{__install} %{png} %{buildroot}%{_datadir}/icons/hicolor/16x16/apps %{__install} %{png} %{buildroot}%{_datadir}/icons/hicolor/32x32/apps %{__install} %{png} %{buildroot}%{_datadir}/icons/hicolor/48x48/apps %{__install} %{png} %{buildroot}%{_datadir}/icons/locolor/16x16/apps %{__install} %{png} %{buildroot}%{_datadir}/icons/locolor/32x32/apps %{__install} %{png} %{buildroot}%{_datadir}/icons/locolor/48x48/apps # # Common files # %{__install} %{png} %{buildroot}%{_datadir}/pixmaps %{__install} -m 755 -s netrek %{buildroot}%{_bindir}/cow # Using tar to keep symlinks (cd spike/cow-test/sounds/; tar -cf - .)|(cd %{buildroot}%{_datadir}/sounds/%{name}; tar -xf -) (cd pixmaps; tar -cp \ --exclude readme.txt \ --exclude rotate.bas \ --exclude setarace.bat \ --exclude setrace.bat \ -f - .) | (cd %{buildroot}%{_datadir}/pixmaps/%{name}; tar -xpf -) %files %defattr(-,root,root) %doc %{name}-docs-3.00pl12/* %doc pixmaps/readme.txt %{_bindir}/%{name} %attr(0755,root,root) %dir %{_datadir}/sounds/%{name} %attr(-,root,root) %{_datadir}/sounds/%{name}/* %attr(0755,root,root) %dir %{_datadir}/pixmaps/%{name} %attr(-,root,root) %{_datadir}/pixmaps/%{name}/* %attr(0644,root,root)%{_sysconfdir}/X11/applnk/Games/Tclug/%{name}.desktop %attr(0644,root,root)%{_datadir}/gnome/apps/Games/Tclug/%{name}.desktop %attr(0644,root,root)%{_datadir}/gnome/ximian/Programs/Games/Tclug/%{name}.desktop %attr(0644,root,root)%{_datadir}/applnk/Games/Arcade/%{name}.desktop %attr(0644,root,root)%{_datadir}/icons/hicolor/16x16/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/hicolor/32x32/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/hicolor/16x16/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/hicolor/32x32/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/hicolor/48x48/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/locolor/16x16/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/locolor/32x32/apps/%{name}.png %attr(0644,root,root)%{_datadir}/icons/locolor/48x48/apps/%{name}.png %attr(0644,root,root)%{_datadir}/pixmaps/%{name}.png %clean rm -rf %{buildroot} %changelog * Sun Jul 07 2002 Bob Tanner + cow-3.01p-realtime.1 - rolled new RPM from HEAD of cow tree * Fri Jun 21 2002 Bob Tanner + cow-3.00p3-SDL-realtime.8 - rolled new RPM from HEAD of cow tree * Sat Jun 16 2002 Bob Tanner + cow-3.00_20020616-realtime.7 - first release of cow with SDL_mixer sound support * Sat May 06 2002 Bob Tanner + cow-3.00_20020504-realtime.6 - small patch to fix compilation under redhat 7.3 an kde3 * Sat May 06 2002 Bob Tanner + cow-3.00_20020504-realtime.5 - patch [Bug #553113] to fix sound problems under 2.4.x kernels/redhat 7.2 * Sat May 06 2002 Bob Tanner + cow-3.00_20020504-realtime.4 - submitted keys to metaserver, recompiled binaries for those keys - added ability to pass into the rpm build process the location of keydef file - fixed permission on pixmap directory - patch [Bug #552772] to fix configure not detecting xpm under redhat 7.2 * Sat May 04 2002 Bob Tanner + cow-3.00_20020504-realtime.2 - first attempt at building cow for source. previous rpm was binary only - changed hard coded commands to rpm macros - setup compile of bgsndplay * Tue Jul 24 2001 James Cameron + cow-3.00pl12-1 - intitial spec file - this date is just a guess using rcs2log and looking for the first entry netrek-client-cow-3.3.2/inform.c0000664000175000017500000002117513657750470015515 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "string_util.h" #include "inform.h" /* Display information about the nearest object to mouse. When the player asks for info, this routine finds the object nearest the mouse, either player or planet, and pop up a window with the desired information in it. We intentionally provide less information than is actually available. Keeps the fog of war up. There is a different sized window for each type player/planet and we take care to keep it from extending beyond the main window boundaries. */ static char *my_classes[NUM_TYPES] = { "SC", "DD", "CA", "BB", "AS", "SB", "GA", "??" }; void inform(W_Window ww, int x, int y, char key) { char buf[BUFSIZ]; char ftoabuf[8]; int line = 0; register struct player *j; register struct planet *k; int mx, my; struct obtype *gettarget(W_Window ww, int x, int y, int targtype), *target; int windowWidth, windowHeight; float KillsPerHour, LossesPerHour; /* SB info window changed to * * * * use these instead of * * * Offense and Defense. * * * 12/27/93 ATH */ mx = x; my = y; infomapped = 1; if (key == 'i') { target = gettarget(ww, x, y, TARG_PLAYER | TARG_PLANET); } else { target = gettarget(ww, x, y, TARG_PLAYER | TARG_SELF); } /* This is pretty lame. We make a graphics window for the info window so we can accurately space the thing to barely fit into the galactic map or whatever. */ windowWidth = W_WindowWidth(ww); windowHeight = W_WindowHeight(ww); if (target->o_type == PLAYERTYPE) { if (key == 'i') { /* Too close to the edge? */ if (mx + 23 * W_Textwidth + 2 > windowWidth) mx = windowWidth - 23 * W_Textwidth - 2; if (my + 5 * W_Textheight + 2 > windowHeight) my = windowHeight - 5 * W_Textheight - 2; infow = W_MakeWindow("info", mx, my, 23 * W_Textwidth, 6 * W_Textheight, ww, 2, foreColor); W_MapWindow(infow); j = &players[target->o_num]; (void) sprintf(buf, "%s (%c%c)", j->p_name, teamlet[j->p_team], shipnos[j->p_no]); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), shipFont(j)); (void) sprintf(buf, "Speed: %-d", j->p_speed); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); (void) sprintf(buf, "kills: %-4.2f", j->p_kills); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); (void) sprintf(buf, "Ship Type: %-s", my_classes[j->p_ship.s_type]); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); if (j->p_swar & me->p_team) W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), "WAR", 3, W_RegularFont); else if (j->p_hostile & me->p_team) W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), "HOSTILE", 7, W_RegularFont); else W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), "PEACEFUL", 8, W_RegularFont); (void) sprintf(buf, "%s@%s", j->p_login, j->p_monitor); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); } else { /* New information window! */ if (mx + 24 * W_Textwidth + 2 > windowWidth) mx = windowWidth - 24 * W_Textwidth - 2; if (my + 10 * W_Textheight + 2 > windowHeight) my = windowHeight - 10 * W_Textheight - 2; infow = W_MakeWindow("info", mx, my, 24 * W_Textwidth, 10 * W_Textheight, ww, 2, foreColor); W_MapWindow(infow); j = &players[target->o_num]; (void) sprintf(buf, "%s (%c%c):", j->p_name, teamlet[j->p_team], shipnos[j->p_no]); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), shipFont(j)); (void) sprintf(buf, "Login %-s", j->p_login); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); (void) sprintf(buf, "Display %-s", j->p_monitor); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); STRNCPY(buf, " Rating Total", 25); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); ftoa(bombingRating(j), ftoabuf, 0, 2, 2); sprintf(buf, "Bombing: %s %5d", ftoabuf, j->p_stats.st_armsbomb + j->p_stats.st_tarmsbomb); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); ftoa(planetRating(j), ftoabuf, 0, 2, 2); sprintf(buf, "Planets: %s %5d", ftoabuf, j->p_stats.st_planets + j->p_stats.st_tplanets); W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); if ((j->p_ship.s_type == STARBASE) && (SBhours)) { KillsPerHour = (float) (j->p_stats.st_sbticks == 0) ? 0.0 : (float) j->p_stats.st_sbkills * 36000.0 / (float) j->p_stats.st_sbticks; sprintf(buf, "KPH: %5.2f %5d", KillsPerHour, j->p_stats.st_sbkills); } else { ftoa(offenseRating(j), ftoabuf, 0, 2, 2); sprintf(buf, "Offense: %s %5d", ftoabuf, j->p_stats.st_kills + j->p_stats.st_tkills); } W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); if ((j->p_ship.s_type == STARBASE) && (SBhours)) { LossesPerHour = (float) (j->p_stats.st_sbticks == 0) ? 0.0 : (float) j->p_stats.st_sblosses * 36000.0 / (float) j->p_stats.st_sbticks; sprintf(buf, "DPH: %5.2f %5d", LossesPerHour, j->p_stats.st_sblosses); } else { ftoa(defenseRating(j), ftoabuf, 0, 2, 2); sprintf(buf, "Defense: %s %5d", ftoabuf, j->p_stats.st_losses + j->p_stats.st_tlosses); } W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); if (j->p_ship.s_type == STARBASE) { sprintf(buf, " Maxkills: %6.2f", j->p_stats.st_sbmaxkills); } else { sprintf(buf, " Maxkills: %6.2f", j->p_stats.st_maxkills); } W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); if ((j->p_ship.s_type == STARBASE) && (SBhours)) { sprintf(buf, " Hours: %6.2f", (float) j->p_stats.st_sbticks / 36000.0); } else { sprintf(buf, " Hours: %6.2f", (float) j->p_stats.st_tticks / 36000.0); } W_WriteText(infow, W_Textwidth, W_Textheight * line++, playerColor(j), buf, strlen(buf), W_RegularFont); } } else { /* Planet */ /* Too close to the edge? */ if (mx + 23 * W_Textwidth + 2 > windowWidth) mx = windowWidth - 28 * W_Textwidth - 2; if (my + 3 * W_Textheight + 2 > windowHeight) my = windowHeight - 3 * W_Textheight - 2; infow = W_MakeWindow("info", mx, my, W_Textwidth * 28, W_Textheight * 3, ww, 2, foreColor); W_MapWindow(infow); k = &planets[target->o_num]; if ((k->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) { (void) sprintf(buf, "%s (%c)", k->pl_name, teamlet[k->pl_owner]); W_WriteText(infow, W_Textwidth, W_Textheight * line++, planetColor(k), buf, strlen(buf), planetFont(k)); (void) sprintf(buf, "Armies %d", k->pl_armies); W_WriteText(infow, W_Textwidth, W_Textheight * line++, planetColor(k), buf, strlen(buf), W_RegularFont); (void) sprintf(buf, "%s %s %s %s %c%c%c%c", (k->pl_flags & PLREPAIR ? "REPAIR" : " "), (k->pl_flags & PLFUEL ? "FUEL" : " "), (k->pl_flags & PLAGRI ? "AGRI" : " "), (k->pl_flags & PLCORE ? "CORE" : " "), (k->pl_info & FED ? 'F' : ' '), (k->pl_info & ROM ? 'R' : ' '), (k->pl_info & KLI ? 'K' : ' '), (k->pl_info & ORI ? 'O' : ' ')); W_WriteText(infow, W_Textwidth, W_Textheight * line++, planetColor(k), buf, strlen(buf), W_RegularFont); } else { (void) sprintf(buf, "%s", k->pl_name); W_WriteText(infow, W_Textwidth, W_Textheight * line++, planetColor(k), buf, strlen(buf), W_RegularFont); (void) sprintf(buf, "No other info"); W_WriteText(infow, W_Textwidth, W_Textheight * line++, planetColor(k), buf, strlen(buf), W_RegularFont); } } } void destroyInfo(void) { W_DestroyWindow(infow); infow = 0; infomapped = 0; } netrek-client-cow-3.3.2/reserved.h0000664000175000017500000000030213657750470016034 0ustar jamesjames/* reserved.c */ void makeReservedPacket(struct reserved_spacket *packet); void encryptReservedPacket(struct reserved_spacket *spacket, struct reserved_cpacket *cpacket, char *server, int pno); netrek-client-cow-3.3.2/data.h0000664000175000017500000003022713657750470015137 0ustar jamesjames/* * data.h */ #include "copyright.h" #ifndef _h_data #define _h_data #define MAP_PIX 0 #define LOCAL_PIX 1 #define GHOST_PIX 2 #define GENO_PIX 3 #define GREET_PIX 4 #ifdef HOCKEY_LINES #define HOCKEY_PIX 5 #endif #define EX_FRAMES 5 #define SBEXPVIEWS 7 #define NUMDETFRAMES 5 /* number of frames in torp or plasma explosion, must match cloud_frames and plasmacloud_frames */ #define ex_width 64 #define ex_height 64 #define sbexp_width 80 #define sbexp_height 80 #define cloud_width 8 #define cloud_height 8 #define plasmacloud_width 13 #define plasmacloud_height 13 #define etorp_width 3 #define etorp_height 3 #define eplasmatorp_width 7 #define eplasmatorp_height 7 #define mplasmatorp_width 5 #define mplasmatorp_height 5 #define mtorp_width 3 #define mtorp_height 3 #define crossmask_width 16 #define crossmask_height 16 #define planet_width 30 #define planet_height 30 #define mplanet_width 16 #define mplanet_height 16 #define shield_width 20 #define shield_height 20 #define cloak_width 20 #define cloak_height 20 #define icon_width 112 #define icon_height 80 extern struct player *players; extern struct player *me; extern struct torp *torps; extern struct plasmatorp *plasmatorps; extern struct status *status; extern struct ship *myship; extern struct stats *mystats; extern struct planet *planets; extern struct phaser *phasers; extern struct message *messages; extern struct mctl *mctl; extern struct context *context; extern struct team *teams; extern struct ship shipvals[]; extern struct memory universe; extern struct planet pdata[]; extern int oldalert; extern unsigned int sound_flags; extern int remap[]; extern int udcounter; extern char *title; extern struct plupdate pl_update[]; extern char buttonmap[]; extern int messpend; #ifdef XTRA_MESSAGE_UI extern int messageHUD; /* Show message being typed * * * on the local display */ extern int messHoldThresh; /* Threshold value for * * * putting a message on * hold */ extern int messMouseDelta; /* To keep track of mouse * * * movement delta */ #endif extern int lastcount; extern int mdisplayed; extern int lastm; extern int delay; extern int rdelay; extern int namemode; extern int warnShields; extern int ROMVLVS; extern int showStats; extern int myPlanetBitmap; #ifdef RECORDGAME extern FILE *recordFile; /* recorder */ extern FILE *recordIndexFile; /* To jump around recordings. */ extern FILE *recordContextFile; /* To jump around recordings. */ extern int playback; /* State playback is in (pause, forward, reverse) */ #define PL_OFF 0 /* not playing back, but in a real game */ #define PL_PAUSE 1 /* playing back, paused */ #define PL_FORWARD 2 /* playing back, in forward direction */ #define PL_REVERSE 3 /* playing back, in reverse direction */ #endif extern FILE *logFile; /* message log */ extern int msgBeep; /* ATM - msg beep */ extern int warncount; extern int warntimer; extern int infomapped; extern int mustexit; extern int messtime; extern int keeppeace; extern int gen_distress; #ifdef GATEWAY extern unsigned LONG netaddr; /* for blessing */ #endif extern int messageon; #ifdef META extern char *metaserver; extern int metaport; #endif #ifdef NBT extern int MacroMode; extern int macrocnt; extern struct macro_list macro[]; /* NBT 2/26/93 */ #endif #ifdef ROTATERACE extern int rotate; extern int rotate_deg; #endif extern int netstat; extern int netstatfreq; extern W_Window netstatWin, lMeter; extern int client_ups; /* client requested updates per second */ extern int server_ups; /* server responded updates per second */ extern int server_fps; /* server configured frames per second */ extern int SBhours; #ifdef SHORT_PACKETS extern int why_dead; extern int tryShort, tryShort1; extern int recv_short; extern int recv_mesg; extern int recv_kmesg; extern int recv_threshold; extern char recv_threshold_s[]; extern int recv_warn; /* S_P2 */ extern int shortversion; /* Which version do we use? */ #endif extern int ghoststart; extern int ghost_pno; extern int keepInfo; extern int showPlanetOwner; extern int phaserShrink; extern int theirPhaserShrink; extern int shrinkPhaserOnMiss; extern int newDashboard, old_db; extern int niftyNewMessages; extern int detCircle; extern int fastQuit; extern int babes; extern int showlocal, showgalactic; #define NO_IND_PIX 0x0001 #define NO_FED_PIX 0x0002 #define NO_ROM_PIX 0x0004 #define NO_KLI_PIX 0x0008 #define NO_ORI_PIX 0x0010 #define NO_WEP_PIX 0x0020 #define NO_EXP_PIX 0x0040 #define NO_CLK_PIX 0x0080 #define NO_MAP_PIX 0x0100 #define NO_BG_PIX 0x0400 #define NO_HALOS 0x1000 #define NO_PIXMAPS 0x8000 extern int pixMissing; extern int pixFlags; extern char *shipnos; extern int sock; extern int xtrekPort; extern int queuePos; extern int pickOk; extern int lastRank; extern int promoted; extern int loginAccept; extern unsigned localflags; extern int tournMask; extern int nextSocket; extern char *serverName; extern char defaultsFile[80]; extern int loggedIn; extern int reinitPlanets; extern int lastUpdate[]; extern int timerDelay; extern int redrawDelay; extern int reportKills; extern int phaserWindow; #ifdef PHASER_STATS extern int phaserShowStats; extern int phaserStatTry; extern int phaserStatHit; #endif extern int censorMessages; extern int showTractor; extern int commMode; /* UDP */ extern int commModeReq; /* UDP */ extern int commStatus; /* UDP */ extern int commSwitchTimeout; /* UDP */ extern int udpTotal; /* UDP */ extern int udpDropped; /* UDP */ extern int udpRecentDropped; /* UDP */ extern int udpSock; /* UDP */ extern int udpDebug; /* UDP */ extern int udpClientSend; /* UDP */ extern int udpClientRecv; /* UDP */ extern int udpSequenceChk; /* UDP */ extern int weaponUpdate; #ifdef GATEWAY extern int gw_serv_port, gw_port, gw_local_port; /* UDP */ extern char *gw_mach; /* UDP */ #endif extern int baseLocalPort; /* UDP and TCP */ extern int showTractorPressor; extern int showLock; extern int showPhaser; extern int logmess; extern int continuetractor; extern int tcounter; extern int autoKey; extern int extraBorder; /* udp options */ extern int tryUdp, tryUdp1; extern int debug; extern double Sin[], Cos[]; extern W_Icon stipple, clockpic, icon; #define VIEWS 16 #define NUM_TYPES 8 extern W_Icon expview[EX_FRAMES]; extern W_Icon sbexpview[SBEXPVIEWS]; extern W_Icon cloud[NUMDETFRAMES]; extern W_Icon plasmacloud[NUMDETFRAMES]; extern W_Icon etorp, mtorp; extern W_Icon eplasmatorp, mplasmatorp; #ifdef VSHIELD_BITMAPS #define SHIELD_FRAMES 5 extern W_Icon shield[SHIELD_FRAMES], cloakicon; extern int VShieldBitmaps; #else extern W_Icon shield, cloakicon; #endif extern W_Icon tractbits, pressbits; extern W_Icon fed_bitmaps[NUM_TYPES][VIEWS], kli_bitmaps[NUM_TYPES][VIEWS], rom_bitmaps[NUM_TYPES][VIEWS], ori_bitmaps[NUM_TYPES][VIEWS], ind_bitmaps[NUM_TYPES][VIEWS], ROMVLVS_bitmap[VIEWS]; extern W_Icon bplanets[7]; extern W_Icon mbplanets[7]; extern W_Icon bplanets2[8]; extern W_Icon mbplanets2[8]; extern W_Icon bplanets3[NUM_PLANET_BITMAPS2]; /* isae: added this */ extern W_Icon mbplanets3[NUM_PLANET_BITMAPS2]; /* isae: added this */ extern W_Icon noinfoplanet; extern W_Color borderColor, backColor, textColor, myColor, warningColor, shipCol[5], rColor, yColor, gColor, unColor, foreColor; /* jn - SMARTMACRO */ extern char lastMessage[]; extern int MacroNum; extern char *classes[]; extern char teamlet[]; extern char *teamshort[]; extern char pseudo[PSEUDOSIZE]; extern char defpasswd[PSEUDOSIZE]; extern char login[PSEUDOSIZE]; extern struct rank default_ranks[DEFAULT_NUMRANKS]; extern struct rank *ranks; extern int nranks; extern W_Window messagew, w, mapw, statwin, baseWin, infow, iconWin, tstatw, war, warnw, helpWin, teamWin[4], qwin, messwa, messwt, messwi, messwk, planetw, rankw, playerw, optionWin, reviewWin; extern W_Window scanw, udpWin, phaserwin; #ifdef SHORT_PACKETS extern W_Window spWin; #endif #ifdef NBT extern W_Window macroWin; #endif extern int ping; /* to ping or not to ping */ extern LONG packets_sent; /* # all packets sent to * * * * server */ extern LONG packets_received; /* # all packets received */ extern W_Window pStats; extern char deathmessage[80]; extern char outmessage[]; extern char *xdisplay_name; extern int UseNewDistress; extern int UseNewMacro; extern int UseSmartMacro; extern int rejectMacro; extern int maskrecip; extern unsigned char singleMacro[MAX_MACRO]; extern int enemyPhasers; extern char cloakChars[3]; extern int showIND; extern int newPlist; extern struct dmacro_list *distmacro; extern struct dmacro_list dist_defaults[]; extern struct dmacro_list dist_prefered[]; extern int sizedist; #ifdef BEEPLITE extern char *distlite[]; extern int UseLite; extern int DefLite; extern int emph_planet_seq_n[]; extern int emph_player_seq_n[]; extern W_Icon emph_planet_seq[]; extern W_Icon emph_player_seq[]; extern W_Icon emph_player_seql[]; #define emph_planet_seq_frames 5 #define emph_planet_seq_width 24 #define emph_planet_seq_height 24 #define emph_player_seq_frames 3 #define emph_player_seq_width 24 #define emph_player_seq_height 24 #define emph_player_seql_frames 3 #define emph_player_seql_width 30 #define emph_player_seql_height 30 extern int beep_lite_cycle_time_player; extern int beep_lite_cycle_time_planet; extern int liteflag; extern char F_beeplite_flags; extern int tts_len; extern int tts_max_len; extern int tts_width; extern int tts_timer; extern int tts_time; extern int tts_pos; extern char lastIn[100]; #endif /* BEEPLITE */ #ifdef RCM extern struct dmacro_list rcm_msg[]; #endif extern int highlightFriendlyPhasers; #ifdef IGNORE_SIGNALS_SEGV_BUS /* Handle (hopefully) non-fatal segmentation and bus faults. */ extern int ignore_signals; #endif #ifdef MOTION_MOUSE extern int motion_mouse; extern int user_motion_thresh; extern int motion_mouse_enablable; extern int motion_mouse_steering; #endif #ifdef SHIFTED_MOUSE extern int extended_mouse; #endif extern int ignoreCaps; #ifdef MOUSE_AS_SHIFT extern int mouse_as_shift; extern int b1_as_shift; extern int b2_as_shift; extern int b3_as_shift; #endif #ifdef TNG_FED_BITMAPS extern int use_tng_fed_bitmaps; extern W_Icon tng_fed_bitmaps[NUM_TYPES][VIEWS]; #endif #ifdef VARY_HULL extern W_Icon hull[]; extern int vary_hull; #endif #ifdef XTREKRC_HELP extern W_Window defWin; #endif #ifdef CONTROL_KEY extern int use_control_key; #endif #ifdef DOC_WIN extern W_Window docwin, xtrekrcwin; extern int maxdoclines, maxxtrekrclines; #endif extern W_Icon bplanets4[8]; extern W_Icon mbplanets4[8]; #ifdef REFRESH_INTERVAL extern int refresh_interval; #endif extern int max_fd; #ifdef TOOLS extern W_Window toolsWin; extern int shelltools; extern struct key_list macroKeys[MAX_KEY]; extern unsigned char keys[MAX_KEY]; extern char *wwwlink; extern char *upgradeURL; extern char *releaseURL; extern char *bugURL; #endif #ifdef SOUND #include "sound.h" extern int sound_init; extern int sound_toggle; extern char *sounddir; extern W_Window soundWin; #endif #ifdef HOCKEY_LINES extern struct s_line s_lines[NUM_HOCKEY_LINES + 1]; extern int normal_s_lines; extern int hockey_s_lines; #endif #ifdef MULTILINE_MACROS extern int multiline_enabled; #endif #ifdef FEATURE_PACKETS extern int F_feature_packets; #endif extern int F_cloak_maxwarp; extern int F_self_8flags; extern int F_self_8flags2; extern int F_ship_cap; extern int F_sp_generic_32; extern char A_sp_generic_32; extern int F_agri_pix; #ifdef WARP_DEAD extern int F_dead_warp; #endif extern int F_many_self; extern int F_many_self; #ifdef UDP_PORTSWAP extern int portSwap; #endif extern int F_show_all_tractors; extern int fastGuest; extern int identityBlind; extern int versionHide; extern int F_sp_rank; extern int F_sp_ltd; extern int F_tips; extern char *program; extern int small_screen; #endif /* _h_data */ netrek-client-cow-3.3.2/config.guess0000755000175000017500000012637313657750471016404 0ustar jamesjames#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ "$HP_ARCH" = hppa2.0w ] then eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: netrek-client-cow-3.3.2/cow.html0000664000175000017500000027703513657750470015545 0ustar jamesjames COW Reference Manual

COW Reference Manual

                           T H E
                _____      _____     _   _   _
               / ____\    / ___ \    ||  ||  ||
               | |        | | | |    \\  /\  //
               | |___     | |_| |     \\//\\//  
               \_____/ o  \_____/ o    \/  \/ o
       
                R E F E R E N C E  M A N U A L  
             
COW Written by: Chris Guthrie, Ed James, Scott Silvey, and Kevin Smith,        
                Tedd Hadley, Andy McFadden, Eric Mehlhaff, J. Mark Noworolski, 
                Nick Trown, Lars Bernhardsson, Sam Shen, Rick Weinstein,     
                Jeff Nelson, Jeff Waller, Robert Kenney, Steve Sheldon,    
                Jonathan Shekter, Dave Gosselin, Heiko Wengler, Neil Cook, Kurt Siegl 
                and many others.
Manual compiled by:
Jonathan Shekter (jshekter@interlog.com)
With Material From:
Jeff Nelson, Dave Gosselin, Kevin Powell,
and the Anonymous but Fabulous COW Documentation Team
BETA revision, September 1995

Contents:

  1. Introduction
    1. Acknowlegments
  2. Command Line Options
  3. Complete Command Reference
  4. Features
    1. Connection and Utility Features
    2. Display Features
    3. Interesting Features
  5. Xtrekrc Options
    1. Keymaps
    2. CKeymaps
    3. Colors
  6. Messages And Macros
    1. Your Basic Macro
    2. Newmacro
    3. RCD
    4. RCM
    5. Default Macros And Distresses
  7. Xtrekrc Reference
  8. Example .xtrekrc

1. Introduction

Welcome to COW, the Client Of Win, the best Netrek client you ever had. This document is the COW reference manual. It does NOT teach one how to play Netrek; for that, please see the Netrek Newbie Guide.

COW is a rather feature-laden (some would say "bloated") client. There are also a lot of things that can be configured. This manual includes a complete xtrekrc reference and a list of every keyboard command. If you want to know something about COW in particular, you'll find it here. (Incidentally, more than 90% of the information here is also applicable to other clients, so this file makes a good general-purpose client manual.)

Sit back, take your socks off, and enjoy!

1.1 Acknowledgements

Many people have contributed to COW and many many others contributed to its ancestor clients. Here is an undoubtedly incomplete list of credits presented in no particular order. Where possible their typical netrek name is provided in the hope that you will ogg them:
              Scott Silvey
              Kevin Smith
              Rick Weinstein
              J. Mark Noworolski                Passing Wind
              Tedd Hadley                       pteroducktyl
              Heiko Wengler                     Musashi
              Andy McFadden                     ShadowSpawn
              Chris Guthrie
              Ed James
              Eric Mehlhaff
              Nick Trown                        Netherworld
              Lars Bernhardsson                 lab
              Sam Shen
              Rick                              Videodrome
              Jeff Nelson                       Miles Teg
              Jeff Waller
              Robert Kenney                     Zhi'Gau
              Steve Sheldon                     Ceasar
              Dave Gosselin                     Tom Servo
              Kurt Siegl                        007
              Kevin Powell                      seurat
              Alec Habig                        Entropy
              Jonathan Shekter                  KillThemAll!

2. Command Line Options

Summary of command line options available for COW:
u       (existance) prints usage information for the client

C       (string of chars) name to auto-login with

A       (string of chars) password to auto-login with

c       (existance) checking - this will check server_port-1 and spew out
        a list of all players currently playing on that server - not all
        servers are intelligent enough to do this

s       (integer) passive port to use, useful to attempt a manual reconnect 
        after a ghostbust. Used in conjuction with -G, see section 4.5

G       (integer) passive player slot to use, useful to attempt a manual reconnect 
        after a ghostbust. Used in conjuction with -s, see section 4.5

f       (filename) file to record packets in

l       (filename) file to log messages

p       (integer) port to connect to server 

d       (string of chars) display name

m       (existance) use meta window instead of selecting a server with
        command line options - See section 4

k       (existance) use known server window instead of selecting a server
        with command line options.
        
o       (existance) use reserved.c blessing for client authentification

R       (existance) use RSA blessing for client authentification (default)

h       (string of chars) server name

H       (string of chars) Gateway name

P       (existance) log packets, generally don't want to use this

t       (string of chars) title- the name of the window the client makes

r       (filename) netrek default file, instead of .xtrekrc

D       (existance) debug mode

v       (existance) display version/expiration info then exit

3. Complete Command Reference

The following is the complete list of commands you can use while in play. Note that all commands are case sensitive, and a ^ denotes a control key, e.g. ^a means control+a, which is different from ^A, which is control+A (control+shift+a, in other words.)

Combat Functions:

c      Toggle cloak.
{      Turn cloak on.
}      Turn cloak off.

d      Detonate enemy torps. All enemy torps within a certain range will explode. They do as little as a quarter of their normal damage at maximum det range. Detting is useful for protecting another ship, causing damage to other ships (if you can manage to det enemy torpedos fired by one enemy over another) or preventing torps from hitting you. Use it carefully, though: if there are many torps nearby and only one or two will actually hit you, it is better to let them hit than det, as one direct hit will do less damge than say, 5 detted torps, each at minimally 1/4 normal damage, probably more.

D      Detonate your torps. It does not do damage to anyone. But it will enable you to fire again if you have 8 torps active (the maximum.) This is not a very good idea however as you will be wastring gobs of fuel firing and then detting useless torps.

f      Fire plasma torpedo. You need at least 2 kills, and must be flying a BB/DD/CA to do this. Plasma torpedos are tracking, but they can be shot down fairly easily by phaser. They do a lot of damage but use a lot of fuel. Note also that when they are shot down they explode and ships that are too close can take damage.

p      Fire phaser. The mouse cursor specifies direction.

s      Toggle shields
[      Shields down
]      Shields up

t      Fire photon torpedo. The mouse cursor specifies direction.

u      Toggle shields

T      Toggle tractor beam. The mouse indicates the target. This pulls the target towards you but uses a lot of fuel and raises your engine temp. Since tractors are very useful and hitting shift-T is inconvenient, many players map lowercase t to this function (see the section on keymaps.)

y      Toggle pressor beam. Same as tractor (see 'T') but pushes.

_      (underscore) Turn tractor beam on. Mouse indicates target. ^      Turn pressor beam on. Mouse indicates target.

$      Turn tractor or pressor beam off.

Movement And Navigation Functions:

0-9    Set speed to 0..9
( or )    Set speed to 10
!      Set speed to 11
@      Set speed to 12
#      Set speed to half of your maxwarp
%      Set speed to max
>      Increase speed by one
<      Decrease speed by one

k      Set course. The mouse cursor specifies direction.

l      Lock onto object. The mouse cursor specifies what; it can be either a ship or a planet. A small triangle indicates the lock, and you will fly towards that object. If it is a planet or SB you will orbit / dock when you arrive.

;      Like l but only locks onto planets and starbases (things you can orbit or dock at)

*      Send in practice robot, if there's no one else playing. On many servers, this is also the key for starbase transwarp. This is Really Cool. Lock onto your SB, go no faster than warp 2, hit transwarp, and you will go warp 99 until you reach the SB (at which point you will dock), run out of fuel, or die. This is handy for reaching the front lines fast. Not all servers support this.

Planet Functions:

b      Bomb planet. You must be orbiting an enemy planet and in T-mode to do this. You only need to press it once and you will continue bombing untill the planet reaches 4 or less armies.

C      Try to coup your home planet. This is a way to get back your home planet if you have no other planets. Only possible after a genocide without a server reset, then everyone leaves, losing T, and people join the team that lost again. You must have kills and be orbiting it.

o      Enter orbit or dock. You must be going no faster than warp 2 and be on top of a planet or starbase.

x      Beam armies down to planet (yours or enemy) or a starbase. You must be orbiting or docked to the planet or stabase in question.

z      Beam armies up from friendly planet or starbase. Again, you must orbit or dock.

Message Functions

E      Send generic distress call.

F Send armies carried report

m      Start sending message. After hitting this key type the destination (0..9 and a..j = specific player, F/R/K/O = specific team, T = your team, A = all) and then the body of the message. Hit enter to send or escape to abort.

X      Enter macro mode. After pressing the macro key, you can send the macros you have assigned to those keys. See the section on macros. You also have available all the standard distress calls. Both the distress format and key can be changed (see: RCD). See the sections on Macros and RCD for specifics, including what the default macros are.

^0..^9
^@
^#
etc...

The distress calls are all mapped to similar control keys. For example, instead of pressing <macro>0 to send an armies carried report, you can use ^0. See the section on RCDs for available distress calls / reports.

Misc. Functions

e      Toggle docking permission (when playing a starbase). This allows or disallows other players to dock on you and repair, refuel, beam up/down armies, etc. If you turn off docking while players are docked, they will be ejected, hence the assigned key.

i or I    Get information on object near mouse. Uppercase shows different info than lowercase. You can use this to, for example, find out how many armies are on a planet, where a player is logged in from, how many kills they have, or whether a planet is agricultural.

K      Show Kathy Ireland

N      Toggle short/long planet Names display on tactical window.

r      Refit. Use this to change your ship type. You must be orbiting your home planet (Earth for Fed, Romulus for Rom, Klingus for Kli, Orion for Ori) or your team's SB. After pressing r, press the key corresponding to the ship type you want (s=scout, d=destroyer, c=cruiser, b=battleship, a=assault, o=starbase/outpost)

R      Enter repair mode. This sets you at warp 0, and turns off shields and cloaking. Damage is repaired faster than normal in this state, but you cannot fire. To exit repair mode, raise shields or start moving. The fastest way to repair yourself is to do this while orbiting a repair planet or docked on an SB. When you are in repair mode a little R will appear in your flags and you will not be able to fire or cloak.

w      Change war declarations. This is important. Your weapons will not lock or explode on ships belonging to races which you are not at war with, and you will take damage if you orbit planets of hostile races. So, declare war with your enemy and peace with everyone else (so you can use their fuel and repair planets.) Note that if you change your war settings while an enemy is on the screen you will be unable to do anything for about ten seconds while "the computers get reprogrammed." The moral of this is: declare war before you go into battle. Note that you start out hostile to everyone, so if you forget before your first engagement it's not too critical.

q      Quit, don't re-read MOTD ("fastquit").
Q      Quit, exiting to MOTD screen. If you hit either of these in red alert, a self destruct timer will start. This is so you can blow up over your enemy. While the countdown is in progress, any input cancels it.

:      Toggle message logging. Saves all messages to a file so you can laugh at them later.

-      Request partial update (see the section on UDP and Short Packets)

= or | Request full update (see the section on UDP and Short Packets)

&      Re-read xtrekrc file

Window And Display Functions:

B      Cycle through galactic map planet display options. Possible options are show nothing, show owner, or show resources (the most useful, as on a color display you can tell owner by color.)

h      Toggle help window. Display a brief summary of these commands, as well as what key each command is currenly assigned to.

L      Toggle player window. This lets you see the names of the players, their stats, and, most importantly for defending planets, their kills.

/      Toggle between new and old playerlist format

M      Toggle tools window

O      Toggle options window. There are many neat things here, most of which are configurable via the xtrekrc file. Experiment! This is a really useful command.

P      Bring up the Planet window. Lists all planets, owner, who has info on them, number of armies, and facilities at each.

S      Toggle stats window. This is a larger version of your dashboard, sort of. Kind of big and annoying and I don't like it but you might.

U      Toggle rank window. Shows you what ratings you need for promotion.

V      Cycle through tactical planet display options. Possible options are show nothing, show owner, or show resources (the most useful, as on a color display you can tell owner by color.)

~      Toggle sound control window

.      Toggle network stats window

\      Toggle lagmeter

,      Toggle ping stats window

`      Toggle short packets control window

+      Toggle UDP control window.

?      Cycle through show nothing / show one big message window / show three message windows.

<space> Turn off all special windows (planet, rank, help, udp, etc.)

4. Features

This section describes in detail some of the newer, more interesting features of COW. There are many! Here is a mini index of this section:
     4.1. Connection and Utility Features
        4.1.1. The Metaserver
        4.1.2. GhostBusts and Restarts
     4.2. Display Features
        4.2.1. PlayerList Configuration
        4.2.2. BeepLite
        4.2.3. Warning Shields
        4.2.4. Hockey Lines
     4.3. Interesting Features
        4.3.1. Shell Tools
        4.3.2. Customizable Cursors

4.1 Connection and Utility Features

In this section we have:

The Metaserver
Ghostbusts and Restarts

4.1.1. The Metaserver

The MetaServer and the MetaServerCache are provided to help you find a netrek game to join. Both services provide a list of the popular netrek servers. The MetaServer is neat because provides information on the number of players at each site. The MetaServerCache is neat because it is much faster if you can guess where a game will be.

To access the MetaServer, use the command line switch "-m". For example "cow -m". To access the MetaServerCache, use the "-k" switch instead.

1) Where to find the MetaServer:

You can use the options "metaport" and "metaserver" to point COW to a new MetaServer. The defaults for these options are:

         metaport: 3521
         metaserver: metaserver.ecst.csuchico.edu
2) How to create a list of known servers for the MetaServerCache:

Before you can use the MetaServerCache, you must give COW a file in which to cache the information from the MetaServer. Use the .xtrekrc option "metaCache" to specify this file. The files path will be relative to your home directory unless you start the file name with a slash (/).

For example, to set the cache file to "~/.metaCache" use:

        metaCache: .metaCache
Unlike the MetaServer, the MetaServerCache will not show the number of people playing at a server. If a server is contactable, it will be shown as "Active".

Warning: If "metaCache" is set, COW will also use a second, temporary file. This file with have the name of the metaCache file with the last character changed to either a 'T' or an 'R'. Eg, ".metaCache" becomes ".metaCachT" and "BEAST" becomes "BEASR". Ensure that this temporary file does not overwrite something important.

3) How much information will be shown:

You can now control the amount of information that the MetaServer displays for you by setting the "metaStatusLevel" flag. The default is:

     
        metaStatusLevel: 3
The status levels are coded as follows:
0       Servers which have players but not a wait queue.
1       + Servers with a wait queue.
2       + Servers with nobody playing. (see NOTE1).
3       + Servers which have Timed Out for the MetaServer (see NOTE2).
4       + Servers which the MetaServer has not been able to connect to.
NOTE1: When using the MetaServerCache, "metaStatusLevel" values of less than 3 are treated as the value 3. This minimum is enforced because the cache does not attempt to show the number of people playing at a site.

NOTE2: If you are a long way from the MetaServer, you are advised to ignore TimeOut errors. For example, the MetaServer in America may have difficulty contacting to a server in Holland while the link from England to Holland is very good.

3) The Fallback

If you attempt to contact the MetaServer, and the connection times out, COW will try to show the MetaServerCache instead.

Similarly, if you attempt to use the MetaServerCache, and your "metaCache" file does not exist, COW will attempt to call theMetaServer.

4.1.2. GhostBusts and Restarts

After a client dies, or even if you kill the client on purpose, you can recover the game and continue playing. In fact the server won't have any idea that anything but bad lag (called a ghostbust) has occurred.

The benefits of this feature include the ability to change displays, recompile code (if you happen to be a code hack), or simply recover from a core dump.

In order to use it, you have to pay attention to two numbers which are displayed when you connect to the server. A line like this appears:
*** socket 11323, player 0 ***

This indicates which player slot you have been assigned, and which socket number has been chosen as your ghostbust socket.

Now in order to restart, just do:
netrek -G 0 -s 11323

The important options are -G followed by the player slot you occupy, and -s followed by the ghostbust socket. Notice that you don't even specify a server!

This feature may NOT work on all servers. Many server gods use server code which is too old to support this feature. Also, keep an eye out for small details that are off. It is NOT logically possible to account for everything with this feature. Such things as the motd are not resent by the server when you connect, so you won't have that around anymore. Further, the client won't know who it is even connected to (see above), thus don't be shocked if the client claims you are connected to a bogus server.

WARNING: Some servers have *very* short ghostbust timeout periods. You must reconnect before this timeout expires or your slot will be given to someone else, you won't be able to reconnect. On most servers it is around 6 minutes long.

Note to experts: The server will reverify clients using whatever available means it has, including RSA or reserved.c when a ghostbust occurs and therefore whenever this feature is used.

4.2. Display-ish Features

In this section we have features which all control some visual aspect, i.e. something you see or the way information is presented.

4.2.1. Playerlist Configuration

[ Originally by: dave, gosselin@ll.mit.edu ]

There is an .xtrekrc option called "playerlist". What it allows you to do is specify which columns of the player list you want to show and in what order. The following is a table of the available columns.

 
Spc  Let   Name                 Header
---  ---   -------------------- -------------------
  3  'n'   Ship Number          " No"
  3  'T'   Ship Type            " Ty"
 11  'R'   Rank                 " Rank      "
 17  'N'   Name                 " Name            "
  6  'K'   Kills                " Kills"
 17  'l'   Login Name           " Login           "
  6  'O'   Offense              " Offse"
  6  'W'   Wins                 "  Wins"
  6  'D'   Defense              " Defse"
  6  'L'   Losses               "  Loss"
  6  'S'   Total Rating (stats) " Stats"
  6  'r'   Ratio                " Ratio"
  8  'd'   Damage Inflicted(DI) "      DI"
  1  ' '   White Space          " "
  6  'B'   Bombing              " Bmbng"
  6  'b'   Armies Bombed        " Bmbed"
  6  'P'   Planets              " Plnts"
  6  'p'   Planets Taken        " Plnts"
 17  'M'   Display/Host Machine " Host Machine    "
  7  'H'   Hours Played         " Hours "
  6  'k'   Max Kills            " Max K"
  6  'V'   Kills per Hour       "   KPH"
  6  'v'   Deaths per Hour      "   DPH"
So for example if you just wanted to see names and rank you'd add this line to your .xtrekrc:

playerlist: NR

NOTE ON SB STATS :
On servers which support the SBHOURS .feature, you will see slightly different things when you info a SB, or show the SB player on the playerlist. The usual offense and defense lines are replaced with SB kills/hour and deaths/hour. The kills, deaths, hours and ratio entries are all the player's SB stats as long as he is in the SB, and his normal stats otherwise.

1) Predefined "playerlist" styles:

For your viewing pleasure we have predefined some playerlist layouts that you might like to try. These predefined styles can be selected using the "playerListStyle" option in your .xtrekrc or by using the options menu (shift-O).

The "playerListStyle" options are:

        0: Custom style         = playerlist
        1: Old style            = "nTRNKWLr O D d "
        2: COW style            = "nTR N  K lrSd"
        3: Kill watch style     = "nTK  RNlr Sd"
        4):BRMH style           = "nTR N  K l M"
For backward compatability, the option "newPlist" will still select between the old style playerlist (off) and the COW style playerlist (on) if the "playerListStyle" option does not appear in your .xtrekrc.

2) The "partitionPlist" option:

Lets face it, the main role of the player list is so that you can keep track of who has kills.

To make life easier, the player list is sorted so that enemy and friendly teams are always in the same place in the list. However, in mono it is not immediatly obvious where one team starts and another team ends. If the "partitionPlist" option is "on", white space will be added to the player list to separate your teams from the other teams and the players entering the game. In color, this option is not usually required because the teams are distinct anyway.

4.2.2. BeepLite

Local weenies cheat. They talk to each other. Those of us who have never met another netrek player are forced to rely heavily on the message window.

In order to even the playing field, the current feature was proposed. This feature causes certain types of RCD messages to beep or even highlite specific objects on the screen. This is done via a macro-like interface which is highly configurable. Further, bitmaps used to highlite can be substituted with your preferences.

1) Turning Beeping and Highliting on

In order to turn message beeping and highliting on, you must include the following in your .xtrekrc.

UseLite: on
The above leaves you with the feature on, but nothing is automatically setup. If you want to configure it yourself, go to the "CONFIGURING VIA XTREKRC" section. You can include a set of reasonable defaults, instead of bothering to learn to configure it yourself by including the lines.
DefLite: on
At any time, you can extend these simply by including some of the configuration syntax in your .xtrekrc as described in the "CONFIGURING VIA XTREKRC" section.

WARNING: Use beep _sparingly_, people (including you) will get sick very quickly of hearing your workstation beep every 5 seconds.

2) Configuring via xtrekrc

Message beeps are configured as on and off. They are turned on if the proper line is in your .xtrekrc. Otherwise they are left off.

Message lites are configured in a way very similar to macros. However, in addition to the original set of macro arguments, a new class of arguments is introduced to handle the highliting.

To configure message highliting, include something like the line below. Here "name of distress" is the RCD message type. "macro" is the macro style syntax specifying what is to be highlited.

lite.[name of distress]:  [macro]
Below are the configurations which are equivalent to the defaults which are setup for you if using DefLite. These provide good examples for how the system works.
lite.taking:   /c/l
lite.base_ogg: /g/m
lite.pickup:   /h
lite.help:  %?%S=SB%{/c%}
The above does the following:

"taking" message highlites the planet and taker "base_ogg" message highlites the person to sync and your ship (to REALLY get your attention) "pickup" message highlites the enemy who picked up "help" tests to see if the player sending the distress is a base, if so he is highlited

You might like to change the last one to:

  
lite.help:  %?%S=SB%{/c%}%?%a>0%{/c%}
This will highlite bases who distress AND carriers who distress.

Using TTS you may change the pickup macro to:

  
lite.pickup:   /h/|%p++ @ %l|
This sends a big ++ message on the tactical map in addition to the light.

Note that all the MACRO parsing routines are run on these, and plain text left over is ignored. Only the highlite argument matter.

The following are the arguments for highliting:

/c /i /I   sender
/m /M      _your_ ship

/p      target player
/g      target friendly player
/h      target enemy player
/P      player nearest sender
/G      friendly player nearest sender
/H      enemy player nearest sender
/b      planet nearest sender
/l      target planet
The following are the arguments for sounds:
/0      Standard window beep (incoming message sound if sound is on) 
/1 - /9 Play nt_message1 - nt_message9 sound.
Tactical Text Solution for the Tactical Tunnel Syndrome (TTS):
/| .. | displays Text in between via TTS. 
Additional defaults:
planetCycleTime:        highlighting time for planets
playerCycleTime:        highlighting time for players

[ Note: while TTS works, thefollowing are Not Yet Implemented in WinCOW ]
tts_color:              color of TTS message (should be dark)
tts_font:               Font (large prefered)
tts_max_len:            Max length of a message
tts_time:               Time a TTS message is displayed
tts_pos:                y location of the TTS message

4.2.3. WarnHull

The warnHull extension is a direct analogue of the varyShields extension to the BRM client. Like varyShields, warnHull tries to keep the player informed of the state of your hull by using a bitmap. The bitmap consists of eight pixels arranged around your ship in a circle just outside you shields (see diagrams below). When warnHull is on your ship looks like it has small spikes sticking out of the shields.

The xtrekrc value warnHull enables this extension, the defaults value is off.

Example xtrekrc value:

warnHull:               on
It works by using 8 pixels arrayed at the 4 cardinal point of the compass and 4 more at equal intervals between them.
        o
   o         o


o               o       ; 100% -- neato diagram 1 :)


   o         o
        o
So as the hull is damaged, the pixels disappear for every 12% of damage accumulated (clockwise from the top).
         
   o          


o                       ; <76% -- neato diagram 2 :)


   o         o
        o

4.2.4. Hockey Lines

Due to popular demand, hockey lines have been added. These are used when playing Netrek Hockey. For those of you who want to see a hockey rink on the tactical, just use the features menu (shift-O) and toggle them on.

You get:

  • Blue lines (blue)
  • Center line (red)
  • Side lines, i.e. the rink edges (grey)
  • Goal lines (red)
  • Goal boxes (the color of the team)
They are a little awkward at first, but once you get used to them, you'll wonder how you lived without them.

Since this is a first pass, I'm looking for more input on what would make them better. Here are some of my comments:

1) Lines are hard coded into the software. They should be based upon planet location, so the hockey gods can move the planets around.

2) You either have them all or none. Perhaps the set of desired lines should be configurable from the xtrekrc. Also, you cannot change the colors.

3) Lines on the galactic would look pretty

If you have any comments, mail them to kantner@hot.caltech.edu

4.3. Interesting Features

These are some of the more esoteric and questionable features. Still, they're there!

4.3.1. ShellTools

[Note: This is not yet implemented in WinCOW ]

You may execute any Unix shell command within the client. Read your mail now within the client. To do so, just send a message to the destination "!" and you get a shell prompt. Enter the command and it's output will be displayed in the tools window. Works also with macros to "!". You may disable it in the .xtrekrc for security reasons with shellTools: off CAUTION: The client will be blocked for the time the command is executed. Also some programs suspend the client if it is started in the background.

4.3.2. Personalized Cursors

[ Not implemented in WinCOW ]

The personalized cursor extensions allows the user to specify their own cursors for the map, local, text, menus and info list windows.

This may now work on all machines. I know of at least one X terminal which this doesn't work properly for. It works fine on my sun:)

For infoCursorDef, textCursorDef, arrowCursorDef an optional mask may be specified. To specify a mask, first create your new cursor, say called mycursor, then create the mask and call it mycursor.mask. They both need to be on the same path. Cursor and mask *must* be the same size, if not the cursor cannot be used (why anybody would want to do this makes no sense, but... :)

These are the xtrekrc values:

localCursorDef:         /usr/me/.local.xbm
mapCursorDef:           /usr/me/.map.xbm
infoCursorDef:          /usr/me/.info.xbm-
textCursorDef:          /usr/me/.text.xbm  # the mask would be called /usr/me/.text.xbm.mask
arrowCursorDef:         /usr/me/.arrow.xbm

5. Xtrekrc Options

5.1. Keymaps

The original key assignments were created more out of ease of memorization than speed of access in combat. For example, enabling the tractor beam is awkward, requiring the use of the shift key. Also, people will always have their particular preferences. For this reason, almost all netrek players use a keymap to change the key assignments. Its use it quite simple. Simply add a line of the form "keymap: <key><function><key><function><key><function>...." to your xtrekrc file.

Each pair of characters assigns the key specified by <key> to perform the function originally assigned to the key specified by <function>. For example, to map toggle tractor (T) to 't', and set max warp (%) to 's', you would use

     keymap: tTs%
The space bar can be remapped, but it cannot be the first key to be remapped in a sequence (obviously). It is often mapped to det:
     keymap: tTs% d

5.2. CKeymaps

Control keymaps (ckeymap) handles the remapping of keys in an analoguous manner to the normal keymap (keymap). The control keymap also allows the user to map both *upper* and *lower* case letters keys when pressed with the control key. This means that ^u and ^U are *different* keys when it come to mapping them.

Any combination of normal keys and control keys can be mapped to one another. In other words, you can map from control key to control key, control key to normal key, normal key to normal key, and normal key to control key.

New format for ckeymap is:
c = any printable ascii character.
^ = introduce control mapping (the key '^' not control + key.)

Each entry is a pair, like:

cc              # regular format
c^c             # regular->control
^cc             # control->regular
^c^c            # control->control
 
Example ckeymap:
ckeymap:                 ^a%r^b^m^ca%d5 tfDFf^^E
Special case:
The '^' must be mapped with a double ^ ("^^") in either the bound or binding key position.

Notes:
If you experience difficulties (you shouldn't) you might wish to use a normal keymap and a new ckeymap in combination. Both are read in, the keymap first then the ckeymap. This means that if a key which is defined in both the keymap and ckeymap, the ckeymap's definition will be the one used.

Analogously, control keys may be used for buttonmap, singleMacro and all macro and RCD definitions.

5.3. Color

It is possible to set the color of various elements in COW. In particular, any of the six standard colors, as well as the races, can be remapped. The settable colors are:
#resource               example value
#--------               --------------
color.white:            seashell
color.black:            black
color.red:              red
color.green:            chartreuse
color.yellow:           #fff850
color.cyan:             light blue
color.light grey:       light grey
Colors can be specified as text strings, i.e. tan, chocolate, green, MediumSpringGreen (all the standard X-windows colors, in other words) or as the pound symbol '#' followed by six hexidecimal digits representing the red, green, and blue components of the color.

[WinCOW only: color names should be specified without spaces]

Race Colors: For those of you who like different colors than the defaults but are tired of going on "Purple Alert", it is possible to define race colors separately from the alert colors:

#resource               example value
#--------               --------------
color.Ind:              light grey
color.Fed:              yellow
color.Rom:              tomato
color.Kli:              green2
color.Ori:              light steel blue
If a race color is not set, it defaults to the usual. (ie, if you omit color.Ori above, the orions will be color.cyan, which defaults to cyan)

6. Macros

6.1. Your Basic Macro

Typing takes time. Time is critical in dogfighting or teamwork. Most of the messages sent in Netrek are standard warnings, distress calls, requests, notifications, etc. Also retyping that insulting message everytime you doosh someone is a drag. Hence, you can put macros in your xtrekrc, and allow a single keystroke to send a message. The format is:
     mac.<key>.<dest>: <text>
<key> is the character you wish to assign to that macro, <dest> is a standard message destination (0-9a-j for player, F/R/K/O for teams, T for your team, A for all), and <text> is what you want to send. So, for example, if you put:
     mac.b.T: Bomb enemy core, please!
in your xtrekrc file, you could then press X (or whatever key you assigned to macro mode with the macroKey option -- I like TAB) and then b, and the above message would be sent to your team.

You can also send multiline macros, for example:

     mac.i.A: \\\\    You have just been DOOSHED!
     mac.i.A: (o o)   Didn't that feel good?
     mac.i.A: ( . )
     mac.i.A:  \V/
In this case the macro invoked by X,i will send the above to all. WARNING: multiline macros can be a waste of bandwidth and very annoying! Use them rarely, if at all. Some servers do not support them at all, e.g. you can send them but the server will not repeat it to the players.

If there is some macro you want to activate without hitting the macro mode key first, you can add it to the singleMacro option. For example, to make the above two macros single key macros (which might be a bad idea as you would then have now way to use the info window normally activated by 'i'):

     singleMacro: bi
But, there's more!

6.2. Newmacro

(Documentation by Jeff Nelson 6/4/1993)

Here is the idea: A player should be able to include in his/her macros whatever reasonable information is available. And configuring its display in whatever way is desired. In order to do this, the following syntax is used (while remaining completely compatible with old NBT macros).

A key is assigned in the defaults file (ie .xtrekrc, etc) by a line like:

     mac.F.T         Help!  Carrying %a!!
This defines a macro which will send a distress containing the number of armies a player is carrying to his team.

Note, this is NOT printf syntax! Any attempt to use formatting will fail miserably. Maybe in the future someone will want to develop a means of formatting the variables used in macros, but the only means I can think of are both bulky and ugly.

Here is another example:

     mac.f           Help!  Carrying %a!!
Unlike the first, this macro will not send directly to the team, instead it requires that you give a third keystroke specifying the recipient. For example, it could be invoked by:
     XfT             <- to your team
     Xf1             <- to player 1
     XfG             <- if you are desperate, send to God
     XfA             <- if you are stupid, send to ALL
Old macros will still work in addition to these, thus be sure there are no conflicts. These generally cause suprising results. For example, if this is in your macro file:
     mac.E.T         Help!  I'm carrying!!
     macro.E.A       You all suck!
     mac.E           Help!  I'm a twink!!
     mac.E.T         Help!  I'm carrying again!!
     macro.E.A       You all suck even worse NOW!
The suprising results would be that pressing XE would broadcast the first two messages, and then wait for the destination of the third. It would be impossible to ever use the last two. Unfortunately, multiline macros also do not work if they require a destination. There is no good reason for this, but since multiline macros annoy the hell out of me, I ain't fixing it. You can still do something like:
     mac.D.A:        D
     mac.D.A:        O
     mac.D.A:        O
     mac.D.A:        S
     mac.D.A:        H
This would properly broadcase 5 messages containing 1 character to all. If you tried to specify the destination for these by using "mac.D:", only 'D' would be sent.

Also '?' can still not be used as a macro key. The following definitions will work in a macro (where 'target x' = whatever x the mouse cursor is closest to when the macro is sent):

     Standard:

     %a   armies carried by sender
     %d   sender damage percentage
     %s   sender shield percentage
     %f   sender fuel percentage
     %w   sender wtemp percentage
     %e   sender etemp percentage
     %t   team id character of target planet
     %T   team id character of sender team
     %c   sender id character
     %n   armies on target planet
     %E   1 if etemped, 0 if not
     %W   1 if wtemped, 0 if not
     %S   sender two character ship type
     %p   id character of target player
     %g   id char of target friendly player
     %h   id char of target enemy player
     %P   id character of player nearest sender
     %G   id char of friendly player nearest sender
     %H   id char of enemy player nearest sender
     %l   three character name of target planet
     %i   sender full player name (16 character max)
     %u   full name of target player (16 character max)
     %z   3 letter team id of target planet
     %b   planet nearest sender
     %o   three letter team name of sender
     %k   number of kills sender has
     %K   number of kills target player has
     %*   if this is encountered, the macro IS NOT PRINTED
     %(SPACE)  this is replaced by a space, mainly useful for starting a
message


     FULLY CAPITALIZED:

     %L   three character name of target planet
     %I   sender full player name (16 character max)
     %U   full name of target player (16 character max)
     %Z   3 letter team id of target planet
     %B   sender nearest planet
     %O   three letter team name of sender

     Ping stats: (may differ slightly from server '!' ping stats)

     %v   average ping stat round trip time 
     %V   ping stat round trip standard deviation
     %y   percent total packet loss as calculated by server formula

     Miscellanous:

     %m   the last message you sent
     %M   the last message you sent in all caps
As a further extension to NEWMACRO, a macro may now be sent to any of the following destinations:
     %i %I %c  send message to self
     %u %U %p  send message to player nearest mouse
     %t %z %Z  send message to team of player nearest mouse
     %g        send message to nearest friendly player to my ship
     %h        send message to nearest enemy player to my ship

     with a syntax like  

     #useful for INL...
     mac.C.%i: CAPTAIN
     mac.N.%i: NEWGALAXY
     mac.S.%i: START
     mac.T.%i: %Z

     mac.W.%t: SHUT UP, TWINKS!!
     mac.I.%u: %u: det when you escort!
     mac.O.%u: (%i) ogging
What this does is allows you to send a macro to a player or team specified by your mouse location instead of requiring a 3rd character to be input. Also, it allows you to send message to yourself without having to actual sit there and figure out who you are (they tried and failed back in the '60s).

Further, tests may be done within the macro system, the syntax for these test is as follows.

     %?   introduces a test
     =    equivalence
     >    greater
     <    less
Expressions are evaluated on a character by character basis until the test is resolved. The text of the test is then replaced in the macro by 1 or 0.

Test are then fed to a syntax I call conditional text. The best way to demonstrate how this works is example.

     "1%{included if true%!included if false%}"

     This would print:

     "included if true"

     whereas

     "0%{included if true%!included if false%}"

     would print:

     "included if false"
Combining the whole package, a very robust macroing system is quickly generated. One can easily design or mimic Distress calls, including the variable NBT distress of the BRM client and all the hardcoded message macroing built into my own client but never released.

Here are a few more samples to work from:

     mac.F.T:   Help!  Carrying %a!!
     mac.f:     Help!  Carrying %a!!
     mac.c.T:   %p++ near %l
     mac.b.T:   %?%n>4%{bomb %l at %n%!bomb%}
     mac.d.T:   %E%{%!%W%{%!I'm fine.  How are you? %}%}%E%{ETEMPED!!!  %}
                %W%{WTEMPED!!!  %}Carrying %?%a>0%{%a armies!%!NO armies.%}
     mac.a.T:   %E%{ETEMPED!!!  %}%W%{WTEMPED!!!  %}Carrying %?%a>0%{%a 
                armies! %!NO armies.%}
     mac.R.A:   I'm a %?%S=SB%{star base!%!twink!%}
     mac.K.A:   KissMy%S
     mac.t:     thanks
     mac.y:     yes
     mac.n:     no
     mac.B:     bye, getting hungry/sleep/horny
     mac.e.T:   need escort going to %l%?%a>0%{, carrying %a armies!%}
     mac.v.%t   %T%c PING stats: Average: %v ms, Stdv: %V ms, Loss: %y%%

     My Favorite:

     mac.m:         %m

6.3 RCD

There is an even more interestring thing that you can do with macros. It's called Receiver Configurable Distress (RCD). The basic idea is that everyone likes certain standard types of messages, such as distress, pickup, carrying, etc, to appear in a certain way. Unfortunately this is usually not the way everyone else sends them. To make matters worse, everyone sends their messages in a different way and this hopelessly clutters the message window. Fortunately, there is help! You can configure the way certain standard messages and distress calls appear to you. This is an important point: you do not configure the way the messages are sent with RCD. Instead, you are configuring how they appear to _you_.
9/2/93 - jmn, jn (no relation 8^)

Receiver configurable distress calls have been added to the client and use a MACRO-like syntax.

In order to change which key you would like a message to map to, all you have to do is use either keymap like you have always done, or ckeymap, a new feature introduced to accomodate the massive number of new functions (ie message sending) that have been added in this client. Please see the ckeymap section of this document for more information on that.

In order to change *how a message appears to you* a line such as the following should be in your defaults file:

     dist.taking:   (%i) Carrying %a to %l%?%n>-1%{ @ %n%}
     dist.help:     Help!  I've fallen!  I can't get up!  %a


     This has the format

     dist.[name of distress]:          [macro]
Arguments for the macro and SMARTMACRO syntax are exactly the same as before. Any argument can be used, but usually only those in the groups "Standard" and "FULLY CAPITALIZED" apply.

You MAY NOT affect how a message appears to anyone else, this is against the basic concepts of RCD.

6.4 RCM (Receiver Configurable Server Messages)

Short packet kill messages may be freely configured using the macro syntax interpreter where:
  • the killed person corresponds to the sender,
  • the killer corresponds to the target player,
  • involved planet (killed by, destroyed, taken) to the target planet,
  • damage is int part of kills and shield fraction part.
  • whydead goes with wtmp.
All others are undefined.

The format of the messages is:

msg.[name of message]: [RCM macro]

Available messages and their defaults are:

msg.kill:  ........
msg.kill:GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%}) was kill 
           %?%d>0%{%k%!NO CREDIT)%} for %u (%r%p) %?%w>0%{%W%!%}
msg.planet:GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%} killed by %l (%z) 
            %?%w>0%{%W%!%}
msg.bomb:%N->%Z We are being attacked by %i (%T%c) who is %d%% damaged.
msg.destroy:%N->%Z %N destroyed by %i (%T%c)
msg.take:%N->%O %N taken by %i (%T%c)
msg.ghostbust:GOD->ALL %i (%S) (%T%c) was kill %k for the GhostBusters
BRMH formated kill windows may be optain by something like:
msg.kill:  %i (%S) (%T%c%?%a>0%{+%a armies%!%}) %>30 kill 
             %?%d>0%{%k%!NO CREDIT)%} for %u (%r%p) %?%w>0%{%>65%W%!%}

6.5 Default Macros And Distresses

Below is a table giving the name of each distress, the key it is assigned to, and the default macro (at the time of this writing). In the table below, the first character indicates which control character each of these messages is assigned to. There are two exceptions, the generic distress call and army report are still mapped to E and F; they do not use control keys. You can also of course always hit the macro key and then the non-control version of the key indicated.

All these examples assume: you are player F0 (%T%c), alias "Twinky" (%i), flying a CA (%S), carrying 3 (%a) armies, with the mouse closest to Cassiopia (%l or %L), which has 5 (%n) armies. The nearest friendly player to the mouse is player Fc (%T%g) and the nearest player of any team to the mouse cursor is player 06 (%p). You yourself are near Beta Crucis.

Key Distress Name       


t   taking       
       %T%c->%O (%S) Carrying %a to %l%?%n>-1%{ @ %n%}
       Taking a planet. Example:
          "F0->FED (CA)  Carrying 3 to Cas @ 5"


o   ogg
       %T%c->%O Help Ogg %p at %l
       Tell your team to ogg a carrier. Example:
          "FO->FED Help Ogg 6 at Cas"

b   bomb                
       %T%c->%O %?%n>4%{bomb %l @ %n%!bomb%}
       Tell your team to bomb a planet. Example:
          "F0->FED bomb Cas @ 5"

c   space_control
       %T%c->%O Help Control at %L
       Request space control at specified location. Example:
          "F0->FED Help Control at CAS"

1   save_planet
       %T%c->%O Help at %l! %?%a>0%{ (have %a arm%?%a=1 %{y%!ies%}) %} 
           %s%% shld, %d%% dam, %f%% fuel
       Need help NOW to take or protect a planet. Example:
          "F0->FED Help at Cas! (have 3 armies) 60% shld, 13% dam, 63% fuel"

2   base_ogg,   
       %T%c->%O Sync with --]> %g <[-- OGG ogg OGG base!!
       That greatest of manuevres, the Ogg, as applied to an enemy SB. 
       Example:
          "F0->FED Sync with --] c [--- OGG ogg OGG base!!"

3   help1       
       %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a  armies.
       General distress. Same for help2. Example:
          "F0->FED Help me! 13% dam, 60%shd, 63% fuel 3 armies"

4   help2
       %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies.
          Defaults to same as above.

e   escorting
       %T%c->%O ESCORTING %g (%d%%D %s%%S %f%%F)
       Tells your team who you are escorting. Example:
          "F0->FED ESCORTING c (13%D 60%S 62%F)"
                
p   ogging
       %T%c->%O Ogging %h
       Tells your team who you are ogging. Example:
          "F0->FED Ogging 6"

m   bombing
       %T%c->%O Bombing %l @ %n
       Tells your team that you are bombing. Many players turn this message 
       off (by inserting a %* anywhere in the message string) as they can 
       figure out for themselves where someone is going to bomb by their 
       course. Example:
          "F0->FED Bombing Cas @ 5"

l   controlling
       %T%c->%O Controlling at %l
       Tells your team that you are space controlling somewhere. This is 
       the art of dominating a region of space. Example:
          "F0->FED Controlling at Cas"

5   asw
       %T%c->%O Anti-bombing %p near %b.
       Tells your team that you are doing Anti Scout (bomber) Warfare. 
       Example:
          "F0->FED Anti-bombing 6 near Bet"

6   asbomb
       %T%c->%O DON'T BOMB %l. Let me bomb it (%S)
       Respectfully requests that you be allowed to bomb something. This is 
       typically used if you are flying an AS as they have a much better 
       chance of bombing a planet to a lower number, making it easier to 
       take. Example:
          "F0->FED DON'T BOMB Cas. Let me bomb it (CA)"

7   doing1
       %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at lal.  
          %d%% dam, %s%% shd, %f%% fuel
       General information message. Example:
          "F0->FED (Twinky) has 3 armies at lal. 13% dam, 60% shd, 62% 
           fuel"


8   doing2
       %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at lal.  
          %d%% dam, %s%% shd, %f%% fuel
       Same as doing1, by default

f   free_beer   
       %T%c->%O %p is free beer
       Tells your team about a clueless player who is an easy kill. 
       Example:
          "F0->FED 6 is free beer"

n   no_gas
       %T%c->%O %p @ %l has no gas
       Tells your team about someone who is out of fuel, good or bad. 
       Example:
          "F0->FED 6 @ Cas has no gas"

h   crippled
       %T%c->%O %p @ %l crippled
       Tells your team that someone is crippled, i.e. badly damaged. 
       Example:
          "F0->FED 6 @ Cas crippled"

9   pickup      
       %T%c->%O %p++ @ %l
       One of the most useful macros. Use this if you see an enemy pick up 
       armies . Example:
          "F0->FED 6++ @ Cas"

0   pop 
        %T%c->%O %l%?%n>-1%{ @ %n%}!
        Tells your team the number of armies on a planet or that it has 
        popped or been bombed or dropped on recently. Example:
            "FO->FED Cas @ 5!"

F   carrying
        %T%c->%O %?%S=SB%{Your Starbase is c%!C%}arrying 
           %? %a>0%{%a%!NO%} arm%?%a=1%{y%!ies%}.
        Tells your team the number of armies you are carrying. Example:
           "F0->FED Carrying 3 armies."

@   other1
       %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at  lal. 
          (%d%%D, %s%%S, %f%%F)
       Another general call. 

#   other2
        %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at  lal. 
           (%d%%D, %s%%S, %f%%F)
        Same as above

E   help
       %T%c->%O Help(%S)! %s%% shd, %d%% dmg, %f%% fuel,
          %?%S=SB%{ %w%% wtmp,%!%}%E%{ ETEMP!%}%W%{ WTEMP!%} %a armies!
       General distress call. This one also reports if you are wtemped
       or etemped, if you are an SB. Example:
          "F0->FED Help(CA)! 60%shd, 13% dam, 63% fuel, 3 armies!
Let's walk through two simple examples.
  • Map generic distress call (help) to 'h', make it appear as: "I'm about to die with %a of your team's armies!"
  • Map AS bombing (asbomb) to '^A', don't change the message.
First try to seperate in your mind the two types of configurability that are going on here.
  1. you are changing the key that sends the message
  2. you are changing how the message appears to you
In order to do (1), just use a keymap. Nearly everyone who has tried to configure their netrek client has generated some form of keymap.
keymap: hE
This performs the key configuration we wanted for the first example.

In order to change the message,

dist.help:     %T%c->%O I'm about to die with %a of your team's armies!
If you configure an RCD, you also must configure the header of that message. This isn't is difficult as it sounds, just add the header to the beginning of the RCD. For example, instead of
dist.T.taking:      Carrying %a to %l%?%n>-1%{ @ %n%}

     use

dist.T.taking:      % %T%c@%b Carrying %a to %l%?%n>-1%{ @ %n%}

     Two headers that I recommend (the last is the default):

% %T%c@%b 
% %T%c->%O
If you want to map the asbomb distress onto control-shift-a that is slightly more difficult. The asbomb distress normally is associated with control-6. Since control keys are involved, we MUST use the control key map feature called ckeymap. The following line would perform the operation we would like.
ckeymap: ^A^6

     If you *also* want control-a to be asbomb, then use

ckeymap: ^A^6^a^6
If you have read all the documentation, are sure you are using the right syntax, and RCD (or MACRO) still is not working, then check out the following.

1. Did you receive RC_DISTRESS when you logged in?

The server must send this to the client to tell the client that it understands RCD messages. Otherwise the client will just send the standard formatted RCDs.

Some clients have a mod which shows you whether RC_DISTRESS is on by looking at the first line of the macro window. If it says, "Packages active: NBT, NEWMACRO, SMARTMACRO", you have no guarantee that RCD was turned on by the server. If it says, "Packages active: NBT, NEWMACRO, SMARTMACRO, RC_DISTRESS" then RCD is definitely on. Don't worry about #1, go to #2.

2. Are any MACROs assigned to the same key as the RCD you are configuring?

If this occurs, you will see the macro and NOT the RCD.

3. Are any other RCDs assigned to the same key as the RCD you are configuring (this includes the DEFAULT RCDS!!) ?

If this occurs, you will see whichever RCD happens to be listed first when the client examines the RCD list.

7. Xtrekrc Reference

Upon startup, Netrek looks for a configuration file called ".xtrekrc" (or, equivalently, ".netrekrc", in first the current directory, then the user's home directory, and then in the same directory as netrek.exe. (WinCOW note: to keep with convention, the files checked for are named xtrekrc and netrekrc -- no preceding dot -- and WinCOW also checks the HOMEDRIVE and HOMEPATH environment variables) You can also set the filename with the XTREKRC envirinment variable. Many, many things can be set in the xtrekrc file, and its proper use is essential to good Netrek play.

The following is an alphabetical list of every option that can be set in the netrekrc file. The values immediately following the option names are the default value of the option if not set.

askForUpdate: off
Get full update from server when you enter the game. This is a good idea when using short packets and UDP.

babes: on
Shows a pic of Kathy Ireland when you ghostbust or take over the galaxy.

buttonmap: 1t2p3k [whatever]
Maps mouse buttons to key functions. Format: <button><key>... like keymap.
     Available buttons:
     1 = left            2 = middle           3 = right
     4 = Shift+Left      5 = Shift+Middle     6 = Shift+Right
     7 = Control+Left    8 = Control+Middle   9 = Control+Right
     a = Shft+Ctrl+Left  b = Shft+Ctrl+Middle c = Shft+Ctrl+Right
     [ Windows client included netrekrc adds 4p = shift+Left for phaser. ]
cloakChars: ??
The characters to use to show cloaked ships on the galactic map. Other popular choices are "()" and "><". They make nice crosshairs ;-)

clock: 2
Stat clock: 0 -- no clock, 1 -- h:m, 2 -- h:m:s.

continueTractor: on
If off, only shows tractors for a short time.

continuousMouse: off
If on, if you drag the mouse while holding a button down, it will have the same effect as clicking rapidly while you move the mouse. On is considered borgish and most servers will not allow it.

dashboard: off
Use a dashboard (LAB) style for the stats line. Try this.

documentation: cow.txt
File to display in documentation window

enemyPhaser: 1
Width of enemy phaser lines. Makes it MUCH easier to tell when enemies are phasering you. I use a width of 5.

extraAlertBorder: on
Also uses inside border to show alert status.

fillTriangle: off
If locks are shown, whether or not to fill the triangle.

galacticFrequent: on
Update galactic map frequently. This is good for plocking cloakers.

ignoreCaps: on
Ignore the Capslock key.

keymap: aabbcc
Maps new keys to old keys. Format: <new key><old key><new key><old key>... see section 5.1.

keepInfo: 15
How many updates (frames) to keep the info windows (activated by i and I ) on the screen.

keepPeace: on
Keep peace with races after death. Useful so you don't have to reset your war declarations window every time you start a new ship.

logging: off
displays messages to stdout (i.e. writes them on the console) if set.

logfile: (filename)
... or, alternatively saves messages to a text file (see above option).

macroKey: X
Name of key to use for macro escape (TAB,ESC, or <key>). I like using TAB becuase it's easy to hit, better than the default 'X' which requires two keystrokes.

metaCache: [none]
Filename of metaserver cache file; this file will be sued to display a serverlist if the metaserver is unreachable or -k is specified on the command line.

metaserver: metaserver.ecst.csuchico.edu
Computer to use as the metaserver

metaport: 3521
Port to connect to metaserver on

motionThresh: 16
How many pixels to move (x+y) before each simulated button-press when using continuousMouse mode.

newdashboard: off
Use the "new" dashboard. Has graphs instead of text, now the standard.
Needs dashboard on.

newdashboard2: off Use new the other "new " dashboard (Cup half full vs. Cup half empty).

newDistress: on
Distress calls are right justified if this is on.

newPlanetBitmaps: off
Use MOO style planet bitmaps.

newPlist: off
New playerlist, instead of total kills, deaths offense and defense it shows login and stats (off+bomb+planet).

phaserShrink: 0
(integer 0-16) Don't draw the first "phaserShrink"/16 th of your phaser.
This makes it easier to see incomming torps.

phaserWindow: off
Show phaser-hit messages in seperate window. Equivalent to "review_phaser.mapped: on". (See section on window placements)

playerList:
Playerlist format. See section 4.2.

playerListStyle:
The style for the player list. See section 4.2. The options are:

(0) Custom player list as defined by the playerlist variable above,
(1) Old player list,
(2) Traditional COW player list,
(3) Kill watch player list,
(4) BRMH Player list.

If "playerListStyle" is set, newPlist is ignored.
Use the options menu (shift-O) to try the different styles.

rejectMacro: off
If on, COW automatically stops NEWMACROs from being sent when the server has turned NEWMACROs off. That is any macro in your defaults file defined by a mac.*.*: (TEXT) line.

reportKills: on
Show kill messages.

ROMVLVS: off
Use "ROMVLVS" bitmaps for Rom team. Kinda cool. Default rom CA bitmaps are SO dorky-looking.

singleMacro: FE
List of macros that can be invoked with a single keypress (i.e. don't have to press the macro key first to enter macro mode.) The defualt setting puts the "carrying" and "distress" macros on single keys.

shellTools: on
If off, this disables shelling out to commands from COW.

shiftedMouse: on
Use shift and control for extra mouse buttons (e.g. buttons 4-c)

shortKillMesg: off
Shrink and line up all kill messages.

showFuelOnLocal:
Make border color indicate fuel status.

showGalactic: 1
Map window planet bitmaps display: 0 -- show owner, 1 -- show resoures, 2 -- show nothing.

showIND: off
Mark independent planets with X's drawn over them.

showLocal: 1
Local window planet bitmaps display: 0 -- show owner, 1 -- show resoures, 2 -- show nothing.

showLock: 3
Options for lock triangle display. 0 -- dont show lock, 1 -- show on galactic, 2 -- show on local, 3 -- show on both.

showMapPlanetNames: on
Show planet names on map (galactic) window

showmotd: on
Display motd if in wait queue

showMySpeed: off
Display your current speed next to player number on tactical display.

showPlanetNames: on
Show planet names on local (tactical) window

showPlanetOwner: on
Show planet owner on local (tactical) window

showPlayerStatus: off
Player list: also show players who are not alive.

showShields: on
Show ship shields. Why would anyone want to turn this off?

showStats: on
Show stats window . You can accomplish the same thing with "stats.mapped: <on/off>" but it's here anyway. This option is made superflous with the newdashboard options.

showTractorPressor: on
Show your own tractor/pressor on the screen.

shrinkPhaserOnMiss: off
Use "phaserShrink" and "theirPhaserShrink" even if a phaser misses.

sortPlayers: off
Use sorted player list.

sortMyTeamFirst: off
Modifies "sortPlayers" so that your team is sorted immediately before the enemy teams.

sound: on
Enable sound effects

sounddir: ./sounds
Directory to look in for sound files

theirPhaserShrink: 0
"phaserShrink" for other player's ships.

useLite:
Use BeepLite, which highlights the planets and players that are the subject of people's messages when they use RCD.

useTNGBitmaps:
Use The Next Generation bitmaps for the Federation ships.

updatespersec: 5
How many frames/sec the server should send. Max is 10. Note most servers do not support update rates higher than 5/sec.

varyShields: on
Change shields bitmap to reflect your damage level.

warnShields: on
Show current alert level (green, yellow, red) as shield color

warnHull:
Warn hull state based on damage .

warp: off
Warp the mouse to the message window during message send. I personally prefer this because you can move your mouse out of the window in case something happens that you need to react to without aborting the message.

waitMotd: on
Show the motd while on the wait queue.

whichNewPlanetBitmaps: 0
The actually sets the same option internally as newPlanetBitmaps. 1 and 2 are, presumably, the Rabbit Ear bitmaps and the ZZ Minimal bitmaps.

zeroArgUsage: on
If no arguments, print usage instead of connecting to default server.

Login Options:

defaultShip: CA
Default ship to use on button-click entry (SC,DD,CA,BB,AS,SB).

name: <your_name_here>
Your default character name.

password: <whatever>
Your default password. If both name and password are supplied, many clients will attempt to log you in automatically.

Server Options:

These can be used to set up server aliases and server-specific options
port: 2592
Default port to use.

port.<x.y.z>: 2592
Default port to use with server x.y.z. NOTE: if x.y.z is aliased (server.alias: x.y.z), use the alias instead.

newMesgFlags: on
Server-dependent. Should be on for all new servers.

server: calvin.usc.edu
Name of the default server to use if the -h flag isn't given.

server.alias: < x.y.z>
Aliases. Replace x.y.z with full server name, and specify <alias>. From then on you can specify that server by doing 'netrek -h <alias>' instead of the full name

useRSA.x.y.z: on
Use RSA on server x.y.z? NOTE: if x.y.z is aliased (server.alias: x.y.z), use the alias instead.

Window placments:

These are of the form
     <window>.geometry: <width>x<height>+<xpos+<ypos>
Or you can specifiy just the position:
     <window>.geometrey: +<xpos>+<ypos>
or just the size:
     <window>.geometry: <width>x<height>
Possible windows are:
     netrek         - main window
     local          - Main fighting window
     map            - Galactic map
     warn           - warning window
     message        - message window
     review         - all messages window 
     review_all     - messages to all window
     review_team    - messages to team window
     review_your    - messages to individual window
     review_kill    - kills messages window
     review_phaser  - phaser hits window
     planet         - planet list window
     player         - playerlist window
     war            - war declarations window
     fed            - Fed selection window
     ori            - Orion selection window
     rom            - Romulan selection window
     kli            - Klingon selection window
     quit           - The quit countdown clock
     option         - options menu window
     rank           - rank window
     sound          - sound options window
     stats          - statistics window
     tstat          - dasboard window
     help           - help window
     UDP            - UDP options window
     lagMeter       - lag meter window
     pingStats      - ping statistics window
     buttonkeymap   - the key map window
     xtrekrc_help   - the xtrekrc help window (duh)
     MetaServer List- (including the space) Metaserver window
     tools          - the shell tools window
     DocWin         - Documentation window
     xtrekrcWin     - xtrekrc display window
You can specify whether windows are initially mapped (displayed), like this:
     <window>.mapped: <on/off>.
You can also specify parenting of windows. If one window is a child of another, when that window's parent is hidden or displayed, the child window will also be hidden or displayed. Also, a window that is not parented may have a caption on it, depending on your window manager or OS.

For examples of all of these, see the example netrekrc.

Technical Options:

dontPing: off
Don't attempt to start ping packets from the server.

forceDisplay:
[ WinCOW only ] Force display type. This overrides the display auto-detection.
0 = monochrome or 16, color, 1 = 256 color, 2 = 16/24 bit color.

forceMono:
Force monochrome display. (Actually, color is still used, but the colors are chosen so that they map correctly to black/white.)

netStatFreq: 5
Lag stats update: 1 -- least often, 10 -- most often.

netstats: off
Keep lag statistics. Bringing up the lagmeter ('l') will toggle this anyway, but it's there.

redrawDelay: 0
if >0, does a screen refresh only every n/10 sec
(useful for slow displays and high lag).

tryUdp: on
Try to use UDP upon entering the game.

tryShort: off
Try using short packets upon entering the game. [Windows client: the default netrekrc file included turns this on as it really helps over SLIP. ]

udpClientRecv: 1
How UDP packets should be received. Possibilites are: 0 -- use TCP (no UDP), 1 -- use simple UDP, 2 -- use fat UDP. Try setting this to 2 if you are getting a lot of server to client packet loss.

udpClientSend: 1
How UDP packets should be sent. Possibilites are: 0 -- use TCP (no UDP), 1 -- use simple UDP, 2 -- use enforced UDP (state only), 3 -- use enforced UDP (state & weapon). The "enforced" modes will repeat the UDP packets if the client doesn't get a response from the server, on the assumption that the packet got lost. Try using 2 or 3 if you are getting a lot of client to server packet loss.

udpDebug: 0
Level of UDP code debugging. You may enjoy seeing debug trace messages.

udpSequenceChk: on
Throw out udp packets that arrive out of order. This is a good idea.

updatesPerSecond: 5
Number of updates (frames) per second (most servers limit to 5).

useRSA: on
Use RSA binary verification. If you turn this off you will not be able to play on many servers.

8. Example .xtrekrc

Thanks to Jaime Allistair for this.

This is an insanely long netrekrc (or xtrekrc, same thing). It has almost all the options available in COW in it. It is not really meant to be used as is! It is meant to be an example and to be edited down to what you need. Why shouldn't you use it? Well, you can, but there are a lot of lines that just set things to their defaults and this serves no purpose, just makes the client load slower and take up more memory.

        
# xtrekrc file for Netrek
# version: .01
#    date: 3-1-95

# The purpose of of this xtrekrc file is to have all the options available
# to anyone who wants to make a change to the xtrekrc.  This file will
# bring up all the message windows.  This will help in the area of newbies
# not reading messages because they do not know how to get a message window
# up.

# If you have any changes, typos, fixes, additions, or any things
# that were left out, please email me.  I will try to make these files
# grow with the clients, as the client grows.

# EMAIL:  jaime@diamondmm.com
#  NAME:  Jaime Pirnie

#                                       Enjoy!


# /-----------------------\
# | ### Login Options ### |
# \-----------------------/

#--------------------
# Name
# Your automatic character login name

name: allister


#--------------------
# Password
# Your default character login password

password: secret


#--------------------
# Default Ship type
#
# Your default ship type
#
#   AS = Assault Ship
#   BB = Battleship
#   DD = Destroyer
#   CA = Cruiser
#   SC = Scout

defaultShip: CA


# /------------------------\
# | ### Server Options ### |
# \------------------------/

#--------------------
# Default Server port
# Default server port to use

port: 2592


#--------------------
# New Message Flags
# Server-dependent.  Should be on for all new servers

newMesgFlags: on


#--------------------
# Default Server
# Name of the default server if the -h flag is not used

server: factoryx.factoryx.com


#--------------------
# Server Aliases
#
# Server aliases. Syntax: [server.alias: <x.y.z>] Replace x.y.z with full
# server name, and specify <alias>.  From then on you can specify that
# server by doing 'netrek -h <alias>' instead of the full server name.
# Below is an alias for wormhole.

server.wormhole: wormhole.ecst.csuchico.edu


#--------------------
# Use RSA on a specific server
# Use RSA on server x.y.z? NOTE: if x.y.z is aliased (server.alias: x.y.z),
# use the alias instead.
# Below it tells it to use RSA on wormhole.

useRSA.wormhole: on


# /---------------------------\
# | ### Technical Options ### |
# \---------------------------/

#--------------------
# Don't Ping
# Don't attempt to start ping packets from the server

dontPing: off


#--------------------
# Force Display type
#
# Force the display type for the client
# NOTE: Windows client ONLY
#
#   0 = monochrome or 16 colors
#   1 = 256 colors
#   2 = 16/24 bit color

forceDisplay: 1


#--------------------
# Force monochrome display
#   (actually, color is still used internally, but
#    the colors are chosen so that they map correctly to black & white.)

forceMono:


#--------------------
# Network statistics frequency
#
# Lag stats update
#
#   1 = least often
#   2 = a bit more often
#   |
#   |
#  \|/
#  10 = most often
#

netStatFreq: 3


#--------------------
# Network Statistics
#
# Keep lag statistics
#   (Bringing up the lagmeter ('l') will toggle this anyway, but its there)

netstats: off


#--------------------
# Try UPD packets
# Try to use UDP upon entering the game

tryUDP: on


#--------------------
# Try short packets
# Try using short packets upon entering the game
#   (Windows client: This really help for SLIP connections)

tryShort: on


#--------------------
# UDP Client Receive
#
# How UDP packets should be received
#
#   0 = TCP
#   1 = simple UDP
#   2 = fat UDP

udpClientReceive: 2


#--------------------
# UDP Client Send
#
# How UDP packets should be sent
#
#   0 = TCP
#   1 = simple UDP
#   2 = enforced UDP (state only)
#   3 = enforced UDP (state & weapon)

udpClientSend: 3


#--------------------
# UDP Debugging Level
# Level of UDP code debugging.  You may enjoy seeing debug trace messages.

udpDebug: 0


#--------------------
# UDP Sequence Checking
# Throw out UDP packets that arrive out of order.  This is a good idea.

udpSequenceChk: on


#--------------------
# Updates Per Second
# Number of updates (frames) per second (most servers limit to 5)

updatesPerSecond: 5


#---------------------
# Use RSA binary varification.
# If you turn this off you will not be able
# to play on many servers.

useRSA: on


#---------------------
# I have no idea ????? Anybody know??!

useTRports:


# /---------------------------\
# | ### Features, options ### |
# \---------------------------/

#--------------------
# Ask For Update
# Get full update from server when you enter the game.  This is a good
# idea when using UDP and/or short packets.

askForUpdate: on

#--------------------
# Mouse Button Map
#
# Maps mouse buttons to key functions
#   Format: <button><key>... just like the keymap
#   Available buttons:
#
#   1 = left
#   2 = middle
#   3 = right
#   4 = Shift+Left
#   5 = Shift+Middle
#   6 = Shift+Right
#   7 = Control+Left
#   8 = Control+Middle
#   9 = Control+Right
#   a = Shft+Ctrl+Left
#   b = Shft+Ctrl+Middle
#   c = Shft+Ctrl+Right

buttonmap: 1a2p3k


#---------------------
# Cloak Characters
# The characters to use to show cloaked ships on the galactic map.
#   Popular choices are:
#
#     ()
#     <>
#     ><
#     ??

cloakChars: ??

#---------------------
# Clock Type
#
# Which type of clock to show
#
#   0 = No clock
#   1 = hh:mm
#   2 = hh:mm:ss

clock: 2


#--------------------
# Continue Tractor Beam
# Show tractor beam at all times when locked
# If off, it will only show tractor beam for a short time.

continueTractor: on


#--------------------
# Continuous Mouse
# Allows you to hold down a mouse button, it will have the same effect if
# you hit the button rapidly.

continuousMouse: on


#--------------------
# Dashboard
# Use a dashboard (LAB) style for the stats line.

dashboard: on


#--------------------
# Use alternate dashboard
# (Cup half full vs. Cup half empty) dashboard.
# NOTE: Requires dashboard on.

newdashboard: on


#--------------------
# Use the new new dashboard

newnewdashboard: on


#--------------------
# Use the new dashboard2

newdashboard2: on


#--------------------
# Use default BeepLite RCD highlighting (?)

defLite: on


#--------------------
# Enemy Phasers
# Width of enemy phaser lines. Mostly useful on mono displays so you can
# distinguish your phasers from enemy phasers.

ememyPhasers: 1


#--------------------
# Extra Alert Border
# Use inside border for alert status

extraAlertBorder: on


#--------------------
# Fill Lock Triangle
# If locks are shown, whether or not to fill the lock triangle.

fillTriangle: off


#--------------------
# Galactic Map Updates
# Update Galactic map frequently.  This is good for phaser locking cloakers.

galacticFrequent: on


#--------------------
# Keyboard Keymap
# Maps new keys to old keys. Format: <new key><old key><new key><old key> 
...

keymap: attT p


#--------------------
# Keep Info on screen
# How many updates (frames) to keep the info windows (activated by i and I)
# on the screen.

keepInfo: 15


#--------------------
# Keep Peace after Death
# Keep peace with races after death.  Useful so you dont have to reset your
# war declarations window every time you start a new ship.

keepPeace: on


#--------------------
# Message Log
# Log all messages to a file.

logMessage: off


#--------------------
# Macro Escape Key
# Name of the key used for macro escape (TAB,ESC, or <key>).  I like using
# ESC because it is easy to hit, butter than the default 'X' which requires
# two keystrokes.

macroKey: ESC


#--------------------
# Meta Server List level
#
# Tells the client what to list when using the MetaServer.
#
#       0   Servers which have players but not a wait queue.
#       1   + Servers with a wait queue.
#       2   + Servers with nobody playing. (see NOTE1).
#       3   + Servers which have Timed Out for the MetaServer (see NOTE2).
#       4   + Servers which the MetaServer has not been able to connect to.

metaStatusLevel: 4


#---------------------
# Motion Threshhold
# How many pixels (x+y) before each simulated button-press when using
# continuous mause mode.

motionThresh: 16


#---------------------
# New Planet Bitmaps
# Use MOO style planet bitmaps

newPlanetBitmaps: on


#---------------------
# Player List Style
#
#       0 Custom player list
#       1 Old player list
#       2 Traditional COW player list
#       3 Kill watch player list
#       4 BRMH Player list

playerListStyle: 1


#---------------------
# New Player List
# Reduced stats format for the player list.
# Can also be toggled with the '\' key.

newPlayerList: off
newPlist: off


#---------------------
# User Configurable Player List
# Use ('\') to toggle between your player list, and the stock one (or
# visa/versa depending on the status of newplist or newplayerlist).
# With newPlayerList or newPlist set to on (depending on your client),
# it will use the user configurable player list as the default.  If set
# to off, it will use the stock player list as the default.  Again,
# the ('\') key toggles between the two.
#
# Here are the possible columns:
#
#       Spc  Let   Name                 Header
#       ---  ---   -------------------- -------------------
#         3  'n'   Ship Number          " No"
#         3  'T'   Ship Type            " Ty"
#        11  'R'   Rank                 " Rank      "
#        17  'N'   Name                 " Name            "
#         6  'K'   Kills                " Kills"
#        17  'l'   Login Name           " Login           "
#         6  'O'   Offense              " Offse"
#         6  'W'   Wins                 "  Wins"
#         6  'D'   Defense              " Defse"
#         6  'L'   Losses               "  Loss"
#         6  'S'   Total Rating (stats) " Stats"
#         6  'r'   Ratio                " Ratio"
#         8  'd'   Damage Inflicted(DI) "      DI"
#         1  ' '   White Space          " "
#         6  'B'   Bombing              " Bmbng"
#         6  'b'   Armies Bombed        " Bmbed"
#         6  'P'   Planets              " Plnts"
#         6  'p'   Planets Taken        " Plnts"
#        17  'M'   Display/Host Machine " Host Machine    "
#         7  'H'   Hours Played         " Hours "
#         6  'k'   Max Kills            " Max K"
#         6  'V'   Kills per Hour       "   KPH"
#         6  'v'   Deaths per Hour      "   DPH"
#

playerlist: nTMSBbPpHkVv


#---------------------
# Phaser Messages (client dependent)
#
#   0 = none
#   1 = all
#   2 = team
#   3 = indiv
#   4 = kill
#   5 = total

PhaserMsg: 5


#---------------------
# Phaser Messages in Individual Window (See also phaserwindow)
# Displays the phaser hit points in the individual window.

phaserMsgI: on


#---------------------
# Phaser Window
# Show Phaser hit messages in separate window. (See also
# reveiw_phaser for default mapping and geometry)

phaserWindow: on


#---------------------
# Unknown..  Anybody know?!

planetCycleTime: 8

#---------------------
# Unknown..  Anybody know?!

refreshInterval:


#---------------------
# Report Kill Messages
# Shows kill messages

reportKills: on


#---------------------
# ROMVLVS bitmaps for Rom Team

ROMVLVS: on


#---------------------
# Single Macro Keys
# List of macros that can be invoked with a single keypress
# (i.e. dont have to press the macro key first to enter macro mode)

singleMacro: FE


#---------------------
# Shifted Mouse buttons
# Allows you to use shift and control keys for extra mouse buttons
# (this would be for mouse buttons 4-c)

shiftedMouse: off



#---------------------
# Short Kill Messages
# This option shirinks and lines up all the kill messages.
# It makes it easyer to see if somebody was killed while carrying
# armies or not.

shortKillMesg: on


#---------------------
# Show Fuel on Local
# This makes the border color indicate fuel status

showFuelOnLocal: off


#---------------------
# Show Galactic
# This option sets what is shown on the planet bitmaps
#
#   0 = show owner
#   1 = show recources
#   2 = show nothing

showGalactic: 1


#---------------------
# Show Local
# This option sets what is shown on the local planet bitmaps
#
#   0 = show owner
#   1 = show recources
#   2 = show nothing

showLocal: 1


#---------------------
# Show Lock Triangle
#
#       0=don't show
#       1=galactic only
#       2=tactical only
#       3=both

showLock: 3


#---------------------
# Show Map Planet Names
# This option shows on the map (galactic) window.

showMapPlanetNames: on


#---------------------
# Show my Speed
# This option prints your current speed next to your player number in your
# tactical display.

showMySpeed: off


#---------------------
# Show Planet Names
# This option shows the planet names on the local (tactical) window.

showPlanetNames: on


#---------------------
# Show Player Status
# This option, when on, shows players in the player list who are not alive.

showPlayerStatus: on


#---------------------
# Show Shields
# This option lets you see your ships shields.

showShields: on


#---------------------
# Show Stats
# Shows the stats window.  You can accomplish this same thing
# with "stats.mapped: <on/off>" but its here as well.

showStats: off


#---------------------
# Show Tractor / Pressor Beams
# This option lets you see your own tractor/pressor beams.

showTractorPressor: on


#---------------------
# Sort Player List
# This option sorts the players in the player list according to team.

sortPlayers: on


#---------------------
# BeepLite
# This option turns on BeepLite.  This highlights the planets and players
# that are the subject of people's messages when they use RCD.

useLite: on


#---------------------
# Display last message
# This option displays the last message in the warning message window.

useMsgw: off


#---------------------
# Use [T]he [N]ext [G]eneration style bitmaps
# Need I say more?

useTNGBitmaps: on


#---------------------
# Updates Per Second
# How many frames/sec the server should send.  Max is 10.

updatesPerSecond: 10


#---------------------
# Vary Shields
# This option changes the shield bitmap to reflect your shield damage.

varyShields: on


#---------------------
# Warn Hull state
# Warns you on hull state based off of damage.

warnHull: on


#---------------------
# Mouse Cursor Warp
# Warp the mouse to the message window during message send.  This
# used to be useful when you have to have the mouse cursor in the message
# window to type a message.

warp: off


#---------------------
# Show MOTD
# This option shows the [M]essage [O]f [T]he [D]ay while in the wait queue.

waitMotd: on


#---------------------
# Which New Planet Bitmaps
# This option actually sets the same option internally as newPlanetBitmaps.
# 1 and 2 are, presumably, the Rabbit Ear bitmaps and the ZZ Minimal 
bitmaps.

whichNewPlanetBitmaps: 2


#---------------------
# Zero Argument Usage
# This option when on: If no arguments, print usage instead of connecting
# to the default server.

zeroArgUsage: on


# /-------------------------\
# | ### Window Placment ### |
# \-------------------------/

#---------------------
# Window Placment syntax (geometry)
#
# This displays the size, and position of the window.
# <window>.geometry:<width>x<height>+<xpos>+<ypos>
#
# This displays just the position of the window.
# <window>.geometry:+<xpos>+<ypos>
#
# ...or just the size
# <window>.geometry:<width>x<height>
#
#---------------------
# This option sets whether windows are initially mapped (displayed).
#
# <window>.mapped:<on/off>
#---------------------
# This option sets the parenting of windows.  If one window is a child of
# another, when that window's parent is hidden or displayed, the child
# window will also be hidden or displayed.  Also, a window that is not
# parented will have a title bar at the top of the window.
#
# <window>.parent:<parent window name>
#
#---------------------
# List of possible window names
#
#       netrek          Main Window
#       local           Main Fighting Window
#       map             Galactic Map
#       warn            Warning Window
#       message         Message Window
#       review          All Messages Window
#       review_all      Messages to All Window
#       review_team     Messages to Team Window
#       review_your     Messages to Individual Window
#       review_kill     Kill Messages Window
#       review_phaser   Phaser hits Window
#       planet          Planet List Window
#       player          Player List Window
#       war             War Declarations Window
#       fed             Federation Selection Window
#       ori             Orion Selection Window
#       rom             Romulan Selection Window
#       kli             Klingon Selection Window
#       quit            The Quit Countdown Clock
#       option          Option Menu Window
#       rank            Rank Window
#       stats           Statistics Window
#       sstat           Dashboard Window
#       help            Help Window
#       UDP             UDP Options Window
#       lagMeter        Lag Meter Window
#       pingStats       Ping Statistics Window
#       buttonkeymap    Keymap Window
#       xtrekrc_help    The xtrekrc help Window
#       macro           Active Macros Window

#-------------------
# Actual Window placments

netrek_icon.geometry:   +1031+0

#netrek.geometry:        1018x740+0+0
netrek.geometry:        +0-20
#local.parent:           netrek
#map.parent:             netrek

#warn.parent:            netrek
#warn.geometry:          +0+549

#message.parent:         netrek
#message.geometry:       +0+575

#review.parent:          netrek
#review.geometry:        +510+500
review.geometry:        +512+556
#review.mapped:          off

#review_all.parent:      netrek
#review_all.geometry:    +510+500
review_all.geometry:    +504+556
#review_all.mapped:      on

#review_team.parent:     netrek
#review_team.geometry:   +510+608
#review_team.mapped:     on

#review_your.parent:     netrek
#review_your.geometry:   +510+666
#review_your.mapped:     on

#review_kill.parent:     netrek
#review_kill.geometry:   +0+600
#review_kill.mapped:     on

#review_phaser.parent:   netrek
#review_phaser.geometry: +0+672
review_phaser.geometry: 81x5+0+800
review_phaser.mapped:   off

#planet.parent:          netrek

#player.parent:          netrek
#player.geometry:        +510+500
player.geometry:        81x23+0+556
player.mapped:          on

#war.parent:             netrek
war.geometry:           +800
#fed.parent:             netrek
#ori.parent:             netrek
#rom.parent:             netrek
#kli.parent:             netrek
#quit.parent:            netrek
#option.parent:          netrek
#rank.parent:            netrek
#stats.parent:           netrek
#tstat.parent:           netrek
#help.parent:            netrek
#UDP.parent:             netrek
#lagMeter.parent:        netrek
#pingStats.parent:       netrek
#buttonkeymap.parent:    netrek
#xtrekrc_help.parent:    netrek
#macro.parent:           netrek

# /----------------\
# | ### Macros ### |
# \----------------/

#----------------------
# Macro syntax:
#
# mac.<key>.<dest>:<text>
#
# <key> is the character you wish to assign to the macro.
# <dest> is a standard message destination
#        (0-9a-j for player, F/R/K/O for teams, T for your team, A for ALL)
# <text> is the text you want to be printed when the macro is used.

# Here is two examples :

mac.b.T: Bomb enemy core, please!

mac.i.A:  \\\\    You have just been DOOSHED !!
mac.i.A:  (o o)   Didn't that feel good?!
mac.i.A:  ( . )
mac.i.A:   \V/


For further information check:
http://cow.netrek.org/
Comments, suggestions and bug reports to cow@netrek.org
netrek-client-cow-3.3.2/defwin.h0000664000175000017500000000004313657750470015473 0ustar jamesjames/* defwin.c */ void showdef(void); netrek-client-cow-3.3.2/name.c0000664000175000017500000000066713657750470015146 0ustar jamesjames#include #include #include "version.h" #include "patchlevel.h" main (int argc, char **argv) { if (argc > 1) { switch (argv[1][0]) { case '1': printf("%d",LIBMAJOR); break; case '2': printf("%d",LIBMINOR); break; case 'p': printf("%d",PATCHLEVEL); break; default: ; } exit(0); } printf ("%s.%d", mvers, PATCHLEVEL); printf ("\n"); exit(0); } netrek-client-cow-3.3.2/Makefile0000664000175000017500000000532213657750470015513 0ustar jamesjames######################################################################## # No editables below this point. # ######################################################################## PACKAGE=netrek-client-cow VERSION=$(shell ./name) DVERSION=$(shell head -1 debian/changelog|cut -f2 -d\(|cut -f1 -d\)) all: netrek-client-cow netrek-client-cow: system.mk netrekI netrekI:: $(MAKE) -f system.mk netrek-client-cow netrek.shared: name system.mk $(MAKE) -f system.mk S=SHARED netrek.shared profile: $(MAKE) -f system.mk OPT="-ggdb3 -pg -a" EXTRALINKFLAGS="-ggdb3 -pg -a" netrek-client-cow clean: rm -f *.o $(OBJ) $(SHAREDTARGET) reallyclean: clean rm -f netrek-client-cow name mkcflags \ config.h system.mk config.status config.log config.cache \ null netrek.shared lib* cflags.c \ po/Makefile po/Makefile.in distclean: clean reallyclean tags: system.mk $(MAKE) -f system.mk tags names: name @echo "PACKAGE=$(PACKAGE)" @echo "VERSION=$(VERSION)" @echo "PACKAGE_VERSION=$(PACKAGE)-$(VERSION)" @echo "DEBIAN_PACKAGE_VERSION=$(PACKAGE)-$(DVERSION)" dist: name mkdir $(PACKAGE)-$(VERSION) tar cf - `cat manifest` | (cd $(PACKAGE)-$(VERSION);tar xf -) tar cvf - $(PACKAGE)-$(VERSION) | gzip -9 > $(PACKAGE)-$(VERSION).tar.gz rm -rf $(PACKAGE)-$(VERSION) distdoc: name XTREKRC mkdir $(PACKAGE)-$(VERSION).doc tar cf - README.* COW.DOC CHANGES XTREKRC netrekrc.example \ *.html *.css stars.gif | (cd $(PACKAGE)-$(VERSION).doc; tar xf -) tar cvf - $(PACKAGE)-$(VERSION).doc | gzip -9 > $(PACKAGE)-$(VERSION).doc.tar.gz rm -rf $(PACKAGE)-$(VERSION).doc distbin: name netrek-client-cow -strip netrek-client-cow -rm -f $(PACKAGE)-$(VERSION).$(ARCH) cp netrek-client-cow $(PACKAGE)-$(VERSION).$(ARCH) -rm -f $(PACKAGE)-$(VERSION).$(ARCH).gz gzip -9 $(PACKAGE)-$(VERSION).$(ARCH) name: name.c version.h patchlevel.h $(CC) $(CFLAGS) -o name name.c depend: system.mk $(MAKE) -f system.mk depend system.mk: Makefile system.mk.in config.h.in configure install.sh ./configure $(CONFFLAGS) $(MAKE) -f system.mk depend install.sh: touch install.sh XTREKRC: system.mk $(MAKE) -f system.mk xtrekrc mv xtrekrc XTREKRC configure: configure.ac $(AUTOCONF) unproto: system.mk $(MAKE) -f system.mk unproto proto: system.mk $(MAKE) -f system.mk proto indent: system.mk $(MAKE) -f system.mk indent to_unix: system.mk $(MAKE) -f system.mk to_unix to_dos: system.mk $(MAKE) -f system.mk to_dos install: system.mk $(MAKE) -f system.mk install package: fakeroot dpkg-buildpackage -Igtk -Ipygtk -Ipyqt # targets specific to quozl WWW=~/public_html/external/mine/netrek upload: mv ../$(PACKAGE)_$(VERSION)*{.dsc,.changes,.tar.gz,.deb} $(WWW) update: (cd $(WWW);make) release: package upload update netrek-client-cow-3.3.2/copyright2.h0000664000175000017500000000043113657750470016312 0ustar jamesjames/* Copyright 1989 Kevin P. Smith Scott Silvey Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies. */ netrek-client-cow-3.3.2/config.sub0000755000175000017500000010645013657750471016041 0ustar jamesjames#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo "$1" | sed 's/-[^-]*$//'` if [ "$basic_machine" != "$1" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4*) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac echo "$basic_machine$os" exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: netrek-client-cow-3.3.2/defaults.c0000664000175000017500000005105513657750470016032 0ustar jamesjames/****************************************************************************/ /*** File: defaults.c ***/ /*** Function: This file reads the default parameters from .xtrekrc and ***/ /*** sets appropriate flags. ***/ /*** ***/ /*** Author: Kevin P. Smith 6/11/89 ***/ /****************************************************************************/ #include "config.h" #include "copyright2.h" #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "beeplite.h" #include "getship.h" #include "input.h" #include "playerlist.h" #include "defaults.h" #include INC_IO #include INC_STRINGS #include INC_LIMITS #include INC_UNISTD #include INC_CTYPE struct stringlist { char *string; char *value; struct stringlist *next; }; struct stringlist *defaults = NULL; #define DEFAULTSHIP NUM_TYPES struct shipdef shipdefaults[NUM_TYPES + 1] = { {"sc", NULL, NULL, NULL, NULL}, {"dd", NULL, NULL, NULL, NULL}, {"ca", NULL, NULL, NULL, NULL}, {"bb", NULL, NULL, NULL, NULL}, {"as", NULL, NULL, NULL, NULL}, {"sb", NULL, NULL, NULL, NULL}, {"ga", NULL, NULL, NULL, NULL}, {"att", NULL, NULL, NULL, NULL}, {"default", NULL, NULL, NULL, NULL} }; int myshiptype = DEFAULTSHIP; struct shipdef *myshipdef = &shipdefaults[DEFAULTSHIP]; char *getenv(const char *); int playerlistnum(void); extern unsigned char getctrlkey(unsigned char **s); #ifdef HAVE_WIN32 int DefaultsLoaded; char *GetExeDir(); #define XTREKRC "xtrekrc" #define NETREKRC "netrekrc" #else #define XTREKRC ".xtrekrc" #define NETREKRC ".netrekrc" #endif /* Win32 */ void initDefaults(char *deffile) { FILE *fp; char file[256]; char *v; struct stringlist *new; struct dmacro_list *dm; struct dmacro_list *dm_def; int notdone; unsigned char c; char *str; #ifdef MULTILINE_MACROS unsigned char keysused[256]; MZERO(keysused, sizeof(keysused)); #endif #ifdef HAVE_WIN32 DefaultsLoaded = 1; #endif #ifdef DEBUG printf("Initdefaults\n"); #endif /* sizeof doesn't work if it isn't in the same source file, shoot me */ MCOPY(dist_defaults, dist_prefered, sizedist); getshipdefaults(); if (!deffile) { if (findDefaults(deffile, file)) { deffile = file; } else { return; /* No defaults file! */ } } fp = fopen(deffile, "r"); if (!fp) return; printf("reading defaults file %s\n", deffile); #ifdef NBT macrocnt = 0; /* reset macros */ #endif STRNCPY(defaultsFile, deffile, sizeof(defaultsFile)); while (fgets(file, 250, fp)) { if (*file == '#') continue; if (*file != 0) file[strlen(file) - 1] = 0; v = file; while (*v != ':' && *v != 0) { v++; } if (*v == 0) continue; *v = 0; v++; while (*v == ' ' || *v == '\t') { v++; } #ifdef NBT /* not very robust but if it breaks nothing will die horribly I think - * * * jmn */ if (strncmpi(file, "macro.", 6) == 0) { if (macrocnt == MAX_MACRO) { fprintf(stderr, "Maximum number of macros is %d\n", MAX_MACRO); } else { str = file + 6; c = getctrlkey((unsigned char **) &str); if (c == '?') fprintf(stderr, "Cannot use '?' for a macro\n"); else { macro[macrocnt].type = NBTM; macro[macrocnt].key = c; macro[macrocnt].who = str[1]; macro[macrocnt].string = strdup(v); #ifdef MULTILINE_MACROS if (keysused[macro[macrocnt].key]) { macro[keysused[macro[macrocnt].key] - 1].type = NEWMULTIM; macro[macrocnt].type = NEWMULTIM; } else { keysused[macro[macrocnt].key] = macrocnt + 1; } #endif /* MULTILINE_MACROS */ macrocnt++; } } } else #endif if (strncmpi(file, "mac.", 4) == 0) { if (macrocnt == MAX_MACRO) { fprintf(stderr, "Maximum number of macros is %d\n", MAX_MACRO); } else { str = file + 4; c = getctrlkey((unsigned char **) &str); if (c == '?') fprintf(stderr, "Cannot use '?' for a macro\n"); else { macro[macrocnt].key = c; if (str[0] == '.') { if (str[1] == '%') { switch (str[2]) { case 'u': case 'U': case 'p': macro[macrocnt].who = MACRO_PLAYER; break; case 't': case 'z': case 'Z': macro[macrocnt].who = MACRO_TEAM; break; case 'g': macro[macrocnt].who = MACRO_FRIEND; break; case 'h': macro[macrocnt].who = MACRO_ENEMY; break; default: macro[macrocnt].who = MACRO_ME; break; } macro[macrocnt].type = NEWMMOUSE; } else { macro[macrocnt].who = str[1]; macro[macrocnt].type = NEWMSPEC; } } else { macro[macrocnt].who = '\0'; macro[macrocnt].type = NEWM; #ifdef MULTILINE_MACROS if (keysused[macro[macrocnt].key]) { printf("Multiline macros of nonstandard types are not recommended.\n"); printf("You might experience strange behaviour of macros.\n"); printf("Type: unspecified macro, key: %c.\n", macro[macrocnt].key); } #endif /* MULTILINE_MACROS */ } #ifdef MULTILINE_MACROS if (keysused[macro[macrocnt].key]) { macro[keysused[macro[macrocnt].key] - 1].type = NEWMULTIM; macro[macrocnt].type = NEWMULTIM; } else { keysused[macro[macrocnt].key] = macrocnt + 1; } #endif /* MULTILINE_MACROS */ macro[macrocnt].string = strdup(v); macrocnt++; } } } else if (strncmpi(file, "dist.", 5) == 0) { str = file + 5; c = getctrlkey((unsigned char **) &str); if (*str != '.') { str = file + 4; c = '\0'; } str++; notdone = 1; for (dm = &dist_prefered[take], dm_def = &dist_defaults[take]; dm->name && notdone; dm++, dm_def++) { if (strcmpi(str, dm->name) == 0) { dm->macro = strdup(v); #ifdef DIST_KEY_NAME if (c) { dm->c = c; dm_def->c = c; } #endif /* DIST_KEY_NAME */ notdone = 0; } } } #ifdef BEEPLITE else if (strncasecmp(file, "lite.", 5) == 0) { int offset = 5; char **lt; if (file[6] == '.') offset = 7; notdone = 1; for (lt = &distlite[take], dm = &dist_prefered[take], dm_def = &dist_defaults[take]; dm->name && notdone; dm++, dm_def++, lt++) { if (strcmpi(file + offset, dm->name) == 0) { *lt = strdup(v); notdone = 0; } } } #endif /* BEEPLITE */ #ifdef RCM else if (strncmpi(file, "msg.", 4) == 0) { str = file + 4; notdone = 1; for (dm = &rcm_msg[0]; dm->name && notdone; dm++) { if (strcmpi(str, dm->name) == 0) { dm->macro = strdup(v); notdone = 0; } } } #endif /* RCM */ #ifdef TOOLS /* Free configurable macro * * keys */ else if (strncmpi(file, "key.", 4) == 0) { int keycnt; if ((keycnt = strlen((char *) keys)) == MAX_KEY - 1) { fprintf(stderr, "Maximum number of keys is %d\n", MAX_KEY - 1); } else { str = file + 4; c = getctrlkey((unsigned char **) &str); keys[keycnt] = c; keys[keycnt + 1] = '\0'; if (*str != '.') { c = 't'; } else { str++; c = getctrlkey((unsigned char **) &str); } macroKeys[keycnt].dest = c; macroKeys[keycnt].name = strdup(v); } } #endif /* Macro Keys */ else if (strncmpi(file, "singleMacro", 11) == 0) { int i; str = v; for (i = 0; *str; i++) singleMacro[i] = getctrlkey((unsigned char **) &str); singleMacro[i] = '\0'; } if (*v != 0) { new = (struct stringlist *) malloc(sizeof(struct stringlist)); new->next = defaults; new->string = strdup(file); new->value = strdup(v); defaults = new; } } fclose(fp); } /*! @brief obtain a string default value from the defaults file cache. @return pointer to the value, or NULL if there is no such value named. */ char *getdefault(char *str) { struct stringlist *sl; sl = defaults; while (sl != NULL) { if (strcmpi(sl->string, str) == 0) { return (sl->value); } sl = sl->next; } return (NULL); } #ifndef HAVE_STRCMPI /* strcmpi tweaked 9/17/92 E-Mehlhaff to not tweak the strings its' called * with... And tweaked again by NBT. Some systems have a demented strdup that * doesn't put an end of string at the end and this causes no end of * trouble... */ int strcmpi(char *str1, char *str2) { char chr1, chr2; register int duh, stop; stop = strlen(str1); if (stop > strlen(str2)) return 1; else if (stop < strlen(str2)) return (-1); for (duh = 0; duh < stop; duh++) { chr1 = isupper(str1[duh]) ? str1[duh] : toupper(str1[duh]); chr2 = isupper(str2[duh]) ? str2[duh] : toupper(str2[duh]); if (chr1 == 0 || chr2 == 0) { return (0); } if (chr1 != chr2) { return (chr2 - chr1); } } return (0); } #endif /* Win32 */ #ifndef HAVE_STRNCMPI /* grr... are you telling me this sort of function isn't in the std libraries * somewhere?! sons of satan... - jn */ int strncmpi(char *str1, char *str2, int max) { char chr1, chr2; register int duh, stop; stop = strlen(str1); if (stop < max) return -1; if (stop > max) stop = max; if (stop > strlen(str2)) return 1; for (duh = 0; duh < stop; duh++) { chr1 = isupper(str1[duh]) ? str1[duh] : toupper(str1[duh]); chr2 = isupper(str2[duh]) ? str2[duh] : toupper(str2[duh]); if (chr1 == 0 || chr2 == 0) { return (0); } if (chr1 != chr2) { return (chr2 - chr1); } } return (0); } #endif int booleanDefault(char *def, int preferred) { char *str; str = getdefault(def); if (str == NULL) return (preferred); if ((strncmpi(str, "on", 2) == 0) || (strncmpi(str, "true", 4) == 0)) { return (1); } else { return (0); } } int intDefault(char *def, int preferred) { char *str; str = getdefault(def); if (!str) return preferred; return atoi(str); } /* since this is Find Defaults, I moved all the defaults file checking to * * it, and put in support for a system defaults file. * and it uses the * access() system call to determine if a defaults * file exists. * note, * access() returns 0 if user can read file, -1 on error or if * they can't. * * -EM * * * Is anyone else bothered by the fact that this writes to deffile * without * really knowing how much of deffile is allocated? * * */ int findDefaults(char *deffile, char *file) { /* Check base names */ if (findfile(NETREKRC, file)) return 1; if (findfile(XTREKRC, file)) return 1; #ifdef SYSTEM_DEFAULTFILE /* now try for a system default defaults file */ if (findfile(SYSTEM_DEFAULTFILE, file)) return 1; #endif return 0; } void resetdefaults(void) { char *pek; char tmp[100]; int i; keepInfo = intDefault("keepInfo", keepInfo); showPlanetOwner = booleanDefault("showPlanetOwner", showPlanetOwner); newDashboard = intDefault("newDashboard", newDashboard); ROMVLVS = booleanDefault("ROMVLVS", ROMVLVS); client_ups = intDefault("updatespersec", client_ups); redrawDelay = intDefault("redrawDelay", redrawDelay); logmess = booleanDefault("logging", logmess); phaserShrink = intDefault("phaserShrink", phaserShrink); if (phaserShrink > 16) phaserShrink = 16; theirPhaserShrink = intDefault("theirPhaserShrink", theirPhaserShrink); if (phaserShrink > 16) phaserShrink = 16; shrinkPhaserOnMiss = booleanDefault("shrinkPhaserOnMiss", shrinkPhaserOnMiss); #ifdef VSHIELD_BITMAPS VShieldBitmaps = booleanDefault("varyShields", VShieldBitmaps); #endif warnShields = booleanDefault("warnShields", warnShields); netstat = booleanDefault("netstats", netstat); netstatfreq = intDefault("netstatfreq", netstatfreq); if (netstatfreq <= 0) netstatfreq = 1; #ifdef RSA if (RSA_Client >= 0) { RSA_Client = booleanDefault("useRsa", RSA_Client); sprintf(tmp, "useRSA.%s", serverName); RSA_Client = booleanDefault(tmp, RSA_Client); } else { /* RSA mode was specified in the command line args */ RSA_Client = (RSA_Client == -2) ? 1 : 0; } #endif showlocal = intDefault("showlocal", showlocal); if (showlocal > 4) showlocal = 2; showgalactic = intDefault("showgalactic", showgalactic); if (showgalactic > 4) showgalactic = 2; /* Old values for back-compatability */ if (!booleanDefault("colorgalactic", 1)) pixFlags |= NO_MAP_PIX; if (!booleanDefault("showstars", 1)) pixFlags |= NO_BG_PIX; if (!booleanDefault("ownerhalo", 0)) pixFlags |= NO_HALOS; /* Sprite-Based Defaults */ if (!booleanDefault("indPix", 1)) pixFlags |= NO_IND_PIX; if (!booleanDefault("fedPix", 1)) pixFlags |= NO_FED_PIX; if (!booleanDefault("romPix", 1)) pixFlags |= NO_ROM_PIX; if (!booleanDefault("kliPix", 1)) pixFlags |= NO_KLI_PIX; if (!booleanDefault("oriPix", 1)) pixFlags |= NO_ORI_PIX; if (!booleanDefault("shipPix", 1)) pixFlags |= NO_IND_PIX | NO_FED_PIX | NO_ROM_PIX | NO_KLI_PIX | NO_ORI_PIX; if (!booleanDefault("weaponPix", 1)) pixFlags |= NO_WEP_PIX; if (!booleanDefault("explosionPix", 1)) pixFlags |= NO_EXP_PIX; if (!booleanDefault("cloakPix", 1)) pixFlags |= NO_CLK_PIX; if (!booleanDefault("mapPix", 1)) pixFlags |= NO_MAP_PIX; if (!booleanDefault("backgroundPix", 1)) pixFlags |= NO_BG_PIX; /* Power-User Option -- OVERRIDES PREVIOUS VALUES */ pixFlags = intDefault("pixFlags", pixFlags); /* Now Sanity Check by turning off unavailable pixmaps */ pixFlags |= pixMissing; showLock = intDefault("showLock", showLock); if (showLock > 3) showLock = 3; showPhaser = intDefault("PhaserMsg", showPhaser); #ifdef XTRA_MESSAGE_UI messageHUD = intDefault("messageHUD", messageHUD); messHoldThresh = intDefault("messageHoldThresh", messHoldThresh); #endif showPhaser = intDefault("PhaserMsg", showPhaser); #ifdef PHASER_STATS phaserShowStats = booleanDefault("PhaserStats", phaserShowStats); #endif showStats = booleanDefault("showstats", showStats); keeppeace = booleanDefault("keeppeace", keeppeace); continuetractor = booleanDefault("continuetractor", continuetractor); showTractorPressor = booleanDefault("showTractorPressor", showTractorPressor); extraBorder = booleanDefault("extraAlertBorder", extraBorder); namemode = booleanDefault("showplanetnames", 1); reportKills = booleanDefault("reportKills", reportKills); udpDebug = intDefault("udpDebug", udpDebug); udpClientSend = intDefault("udpClientSend", udpClientSend); /* note: requires send */ udpClientRecv = intDefault("udpClientReceive", udpClientRecv); tryUdp = booleanDefault("tryUdp", tryUdp); tryUdp1 = tryUdp; udpSequenceChk = booleanDefault("udpSequenceCheck", udpSequenceChk); baseLocalPort = intDefault("baseLocalPort", baseLocalPort); #ifdef SHORT_PACKETS tryShort = booleanDefault("tryShort", tryShort); tryShort1 = tryShort; #endif UseNewDistress = booleanDefault("newDistress", UseNewDistress); rejectMacro = booleanDefault("rejectMacro", rejectMacro); enemyPhasers = intDefault("enemyPhasers", enemyPhasers); pek = getdefault("cloakChars"); if (pek != (char *) NULL) STRNCPY(cloakChars, pek, 3); showIND = booleanDefault("showIND", showIND); InitPlayerList(); #ifdef IGNORE_SIGNALS_SEGV_BUS if (ignore_signals >= 0) { ignore_signals = booleanDefault("ignoreSignals", ignore_signals); if (ignore_signals) printf("Ignoring signals SIGSEGV and SIGBUS\n"); } else { /* ignoresignals mode was specified in the command line args */ ignore_signals = (ignore_signals == -1) ? 1 : 0; } #endif highlightFriendlyPhasers = booleanDefault("highlightFriendlyPhasers", highlightFriendlyPhasers); #ifdef MOUSE_AS_SHIFT mouse_as_shift = booleanDefault("mouseAsShift", mouse_as_shift); #endif #ifdef MOTION_MOUSE motion_mouse = booleanDefault("continuousMouse", motion_mouse); user_motion_thresh = intDefault("motionThresh", user_motion_thresh); #endif #ifdef SHIFTED_MOUSE extended_mouse = booleanDefault("shiftedMouse", extended_mouse); #endif /* SRS 12/94, ignore the Capslock key */ ignoreCaps = booleanDefault("ignoreCaps", ignoreCaps); #ifdef TNG_FED_BITMAPS use_tng_fed_bitmaps = booleanDefault("useTNGBitmaps", use_tng_fed_bitmaps); #endif #ifdef VARY_HULL vary_hull = booleanDefault("warnHull", vary_hull); #endif #ifdef SOUND sound_init = booleanDefault("sound", sound_init); #endif #ifdef TOOLS shelltools = booleanDefault("shellTools", shelltools); #endif #ifdef UDP_PORTSWAP portSwap = booleanDefault("portSwap", portSwap); #endif #ifdef BEEPLITE DefLite = booleanDefault("DefLite", DefLite); UseLite = booleanDefault("UseLite", UseLite); if (DefLite) litedefaults(); beep_lite_cycle_time_planet = intDefault("planetCycleTime", beep_lite_cycle_time_planet); beep_lite_cycle_time_player = intDefault("playerCycleTime", beep_lite_cycle_time_player); tts_time = intDefault("tts_time", tts_time); tts_max_len = intDefault("tts_max_len", tts_max_len); tts_pos = intDefault("tts_pos", tts_pos); #endif /* BEEPLITE */ censorMessages = booleanDefault("censorMessages", censorMessages); shipdefaults[DEFAULTSHIP].keymap = (unsigned char *) getdefault("keymap"); shipdefaults[DEFAULTSHIP].buttonmap = (unsigned char *) getdefault("buttonmap"); shipdefaults[DEFAULTSHIP].ckeymap = (unsigned char *) getdefault("ckeymap"); for (i = DEFAULTSHIP; i >= 0; i--) { STRNCPY(tmp, "rcfile-", 8); strcat(tmp, shipdefaults[i].name); if ((pek = getdefault(tmp))) shipdefaults[i].rcfile = pek; else shipdefaults[i].rcfile = shipdefaults[DEFAULTSHIP].rcfile; STRNCPY(tmp, "keymap-", 8); strcat(tmp, shipdefaults[i].name); if ((pek = getdefault(tmp))) shipdefaults[i].keymap = (unsigned char *) pek; else shipdefaults[i].keymap = shipdefaults[DEFAULTSHIP].keymap; STRNCPY(tmp, "ckeymap-", 9); strcat(tmp, shipdefaults[i].name); if ((pek = getdefault(tmp))) shipdefaults[i].ckeymap = (unsigned char *) pek; else shipdefaults[i].ckeymap = shipdefaults[DEFAULTSHIP].ckeymap; STRNCPY(tmp, "buttonmap-", 11); strcat(tmp, shipdefaults[i].name); if ((pek = getdefault(tmp))) shipdefaults[i].buttonmap = (unsigned char *) pek; else shipdefaults[i].buttonmap = shipdefaults[DEFAULTSHIP].buttonmap; } myshipdef = &shipdefaults[myshiptype]; } void shipchange(int type) { if (type == myshiptype) return; myshiptype = type; myshipdef = &shipdefaults[type]; if (shipdefaults[type].rcfile) { initDefaults(shipdefaults[type].rcfile); resetdefaults(); } initkeymap(); } /* Generally useful function that searches for a file * in the current and home directories, also * the executable directory on Win32 * * Added a check for 0 length strings. For some reason if you give * an empty string to the GnuWin32 stuff it says the file exists. -- DRG */ #ifdef DEBUG #define CHECK_FILE \ printf("Checking for file %s...\n", found); \ accessible = access(found, R_OK); \ if ( (strlen (found) > 0) && (accessible == 0) )\ {\ printf ("Success: '%s'\n",found);\ return 1;\ } #else #define CHECK_FILE \ accessible = access(found, R_OK); \ if ( (strlen (found) > 0) && (accessible == 0) )\ return 1; #endif int findfile(char *fname, char *found) { int accessible; char *home; /* check current directory first */ #ifdef DEBUG printf("Checking for file %s\n", fname); #endif accessible = access(fname, R_OK); if ((strlen(fname) > 0) && (accessible == 0)) { strcpy(found, fname); return 1; } /* Check home directory next */ home = getenv("HOME"); if (home) { int len = strlen(home); if (home[len - 1] == '/' #ifdef HAVE_WIN32 || home[len - 1] == '\\' #endif ) sprintf(found, "%s%s", home, fname); else sprintf(found, "%s/%s", home, fname); } CHECK_FILE; #ifdef HAVE_WIN32 /* On Windows also check executable directory */ home = GetExeDir(); if (home) { int len = strlen(home); if (home[len - 1] == '/' || home[len - 1] == '\\') sprintf(found, "%s%s", home, fname); else sprintf(found, "%s/%s", home, fname); } CHECK_FILE; #endif /* Win32 */ return 0; } netrek-client-cow-3.3.2/redraw.h0000664000175000017500000000014313657750470015504 0ustar jamesjamesvoid redraw(void); void redrawTstats(void); #include void intrupt(fd_set *readfds); netrek-client-cow-3.3.2/oldbitmaps.h0000664000175000017500000013027713657750470016372 0ustar jamesjames #define clock_width 48 #define clock_height 48 static char clock_bits[] = { 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x87, 0xf0, 0x00, 0x00, 0x00, 0x60, 0x80, 0x00, 0x03, 0x00, 0x00, 0x18, 0x80, 0x00, 0x0c, 0x00, 0x00, 0x14, 0x00, 0x00, 0x10, 0x00, 0x00, 0x23, 0x00, 0x00, 0x68, 0x00, 0x80, 0x00, 0x00, 0x00, 0x84, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x00, 0x00, 0x08, 0x28, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x12, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x0f, 0x00, 0x80, 0x00, 0x00, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x40, 0xdd, 0x5d, 0x01, 0x20, 0x02, 0x40, 0x49, 0x45, 0x01, 0x20, 0x02, 0x80, 0xc8, 0xcc, 0x00, 0x20, 0x04, 0x40, 0x49, 0x45, 0x01, 0x10, 0x04, 0x40, 0x49, 0x5d, 0x01, 0x10, 0x28, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x10, 0x00, 0x70, 0x07, 0x00, 0x04, 0x20, 0x00, 0x20, 0x02, 0x00, 0x02, 0x20, 0x00, 0x20, 0x02, 0x00, 0x02, 0x40, 0x00, 0x20, 0x02, 0x00, 0x01, 0x80, 0x00, 0x70, 0x07, 0x80, 0x00, 0x00, 0x23, 0x00, 0x00, 0x62, 0x00, 0x00, 0x14, 0x00, 0x00, 0x14, 0x00, 0x00, 0x18, 0x80, 0x00, 0x0c, 0x00, 0x00, 0x60, 0x80, 0x00, 0x03, 0x00, 0x00, 0x80, 0x87, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; static char ex_bits[5][512] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x08, 0x38, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x0a, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x10, 0x8c, 0x06, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x1c, 0x08, 0x02, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0b, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x08, 0x18, 0x00, 0x00, 0x00, 0x00, 0xc4, 0xe0, 0x0f, 0x06, 0x00, 0x00, 0x00, 0x00, 0x70, 0x94, 0x15, 0x20, 0x00, 0x00, 0x00, 0x00, 0x30, 0xd5, 0x75, 0x20, 0x00, 0x00, 0x00, 0x00, 0x04, 0x95, 0x22, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 0x60, 0x1b, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf4, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x26, 0x06, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x28, 0x08, 0x00, 0x00, 0x00, 0x00, 0x40, 0x80, 0x26, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x0c, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x13, 0x03, 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x04, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x00, 0x00, 0x08, 0x08, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x12, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x12, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x22, 0x92, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x12, 0x42, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x47, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x18, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc0, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x80, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x44, 0x80, 0x10, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x88, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x00, 0x20, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x12, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x90, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x02, 0x10, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x82, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x08, 0x02, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x04, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x08, 0x10, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x40, 0x08, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x20, 0x00, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x80, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x00, 0x01, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define plasmacloud_frames 5 static char plasmacloud_bits[5][26] = { { 0x40, 0x00, 0xf2, 0x09, 0xfc, 0x07, 0xfc, 0x07, 0xfe, 0x0f, 0xfe, 0x0f, 0xff, 0x1f, 0xfe, 0x0f, 0xfe, 0x0f, 0xfc, 0x07, 0xfc, 0x07, 0xf2, 0x09, 0x40, 0x00}, { 0x40, 0x00, 0x42, 0x08, 0x44, 0x04, 0xe8, 0x02, 0xf0, 0x01, 0xf8, 0x03, 0xff, 0x1f, 0xf8, 0x03, 0xf0, 0x01, 0xe8, 0x02, 0x44, 0x04, 0x42, 0x08, 0x40, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x48, 0x02, 0x50, 0x01, 0xe0, 0x00, 0xbc, 0x07, 0xe0, 0x00, 0x50, 0x01, 0x48, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xb8, 0x03, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0xb8, 0x03, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define cloud_width 8 #define cloud_height 8 #define cloud_frames 5 static char cloud_bits[cloud_frames][8] = { { 0x00, 0x00, 0x10, 0x28, 0x54, 0x28, 0x10, 0x00}, { 0x00, 0x10, 0x28, 0x54, 0xaa, 0x54, 0x28, 0x10}, { 0x00, 0x28, 0x54, 0x82, 0x44, 0x82, 0x54, 0x28}, { 0x00, 0x54, 0x82, 0x00, 0x82, 0x00, 0x82, 0x54}, { 0x00, 0x28, 0x00, 0x82, 0x00, 0x82, 0x00, 0x28}}; static char etorp_bits[] = { 0x05, 0x02, 0x05}; static char eplasmatorp_bits[] = { 0x08, 0x2a, 0x1c, 0x7f, 0x1c, 0x2a, 0x08}; static char mtorp_bits[] = { 0x02, 0x07, 0x02}; static char mplasmatorp_bits[] = { 0x04, 0x0e, 0x1f, 0x0e, 0x04}; #if 0 #define cross_width 16 #define cross_height 16 #define cross_x_hot 7 #define cross_y_hot 7 static char cross_bits[] = { 0x00, 0x00, 0xc0, 0x03, 0xa0, 0x05, 0x00, 0x00, 0x80, 0x01, 0x04, 0x20, 0x82, 0x41, 0x56, 0x6a, 0x56, 0x6a, 0x82, 0x41, 0x04, 0x20, 0x80, 0x01, 0x00, 0x00, 0xa0, 0x05, 0xc0, 0x03, 0x00, 0x00}; static char crossmask_bits[] = { 0xe0, 0x07, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xce, 0x73, 0xcf, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xf3, 0xce, 0x73, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xe0, 0x07}; #endif #define indplanet_width 30 #define indplanet_height 30 static char indplanet_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define indmplanet_width 16 #define indmplanet_height 16 static char indmplanet_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x02, 0x20, 0x02, 0x20, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x02, 0x20, 0x02, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; static char planet_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0xf0, 0x03, 0x04, 0x02, 0xf8, 0x07, 0x08, 0x02, 0x1c, 0x0e, 0x08, 0x02, 0x0c, 0x0c, 0x08, 0x01, 0x00, 0x0c, 0x10, 0x01, 0x00, 0x0e, 0x10, 0x01, 0x00, 0x07, 0x10, 0x01, 0x80, 0x03, 0x10, 0x01, 0xc0, 0x01, 0x10, 0x01, 0xc0, 0x00, 0x10, 0x01, 0xc0, 0x00, 0x10, 0x02, 0xc0, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0xc0, 0x00, 0x04, 0x04, 0xc0, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define fedplanet_width 30 #define fedplanet_height 30 static char fedplanet_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x40, 0x00, 0x04, 0x04, 0xe0, 0x00, 0x04, 0x02, 0xe0, 0x00, 0x08, 0x02, 0xf0, 0x01, 0x08, 0x02, 0xf0, 0x01, 0x08, 0x01, 0xf8, 0x03, 0x10, 0x01, 0xf8, 0x03, 0x10, 0x01, 0xfc, 0x07, 0x10, 0x01, 0xfc, 0x07, 0x10, 0x01, 0xfe, 0x0f, 0x10, 0x01, 0xbe, 0x0f, 0x10, 0x01, 0x1f, 0x1f, 0x10, 0x02, 0x0f, 0x1e, 0x08, 0x82, 0x07, 0x3c, 0x08, 0x82, 0x03, 0x38, 0x08, 0x84, 0x01, 0x30, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define oriplanet_width 30 #define oriplanet_height 30 static char oriplanet_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x40, 0x00, 0x01, 0x08, 0x40, 0x00, 0x02, 0x04, 0x48, 0x02, 0x04, 0x04, 0x49, 0x12, 0x04, 0x82, 0xff, 0x3f, 0x08, 0x02, 0x01, 0x10, 0x08, 0x02, 0x01, 0x10, 0x08, 0xc1, 0xe1, 0x70, 0x10, 0x01, 0xf1, 0x11, 0x10, 0x01, 0xf9, 0x13, 0x10, 0xf1, 0xf9, 0xf3, 0x11, 0x01, 0xf9, 0x13, 0x10, 0x01, 0xf1, 0x11, 0x10, 0xc1, 0xe1, 0x70, 0x10, 0x02, 0x01, 0x10, 0x08, 0x02, 0x01, 0x10, 0x08, 0x82, 0xff, 0x3f, 0x08, 0x04, 0x49, 0x12, 0x04, 0x04, 0x48, 0x02, 0x04, 0x08, 0x40, 0x00, 0x02, 0x10, 0x40, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define kliplanet_width 30 #define kliplanet_height 30 static char kliplanet_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x40, 0x60, 0x00, 0x20, 0x40, 0x80, 0x00, 0x10, 0x40, 0x00, 0x01, 0x08, 0x40, 0x00, 0x02, 0x04, 0x40, 0x00, 0x04, 0x04, 0x40, 0x00, 0x04, 0x02, 0xe0, 0x00, 0x08, 0x02, 0xe0, 0x00, 0x08, 0x02, 0xe0, 0x00, 0x08, 0x01, 0xf0, 0x01, 0x10, 0x01, 0xf0, 0x01, 0x10, 0x01, 0xf0, 0x01, 0x10, 0x01, 0xf8, 0x03, 0x10, 0x01, 0xf0, 0x01, 0x10, 0x01, 0xe6, 0x0c, 0x10, 0x01, 0x4f, 0x1e, 0x10, 0x02, 0x1f, 0x3f, 0x08, 0x82, 0x1f, 0x7f, 0x08, 0x82, 0x0f, 0xfe, 0x08, 0xc4, 0x07, 0xf8, 0x05, 0xc4, 0x01, 0x00, 0x04, 0xc8, 0x00, 0x00, 0x02, 0x50, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define romplanet_width 30 #define romplanet_height 30 static char romplanet_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x40, 0x80, 0x00, 0x10, 0xe0, 0x00, 0x01, 0x08, 0xf8, 0x03, 0x02, 0x04, 0xa0, 0x00, 0x04, 0x04, 0xa0, 0x00, 0x04, 0x02, 0xb0, 0x01, 0x08, 0x02, 0xac, 0x06, 0x08, 0x02, 0xaa, 0x09, 0x08, 0x01, 0x4a, 0x09, 0x10, 0x01, 0x11, 0x11, 0x10, 0x01, 0x21, 0x11, 0x10, 0x01, 0x21, 0x11, 0x10, 0x01, 0xc1, 0x10, 0x10, 0x01, 0x01, 0x16, 0x10, 0x01, 0x02, 0x09, 0x10, 0x02, 0x02, 0x09, 0x08, 0x02, 0x0c, 0x06, 0x08, 0x02, 0xf0, 0x01, 0x08, 0x04, 0xa0, 0x00, 0x04, 0x04, 0xa0, 0x00, 0x04, 0x08, 0xa0, 0x00, 0x02, 0x10, 0x40, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; static char mplanet_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x02, 0x20, 0xc2, 0x21, 0x21, 0x42, 0x01, 0x42, 0x01, 0x41, 0x81, 0x40, 0x81, 0x40, 0x02, 0x20, 0x82, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define klimplanet_width 16 #define klimplanet_height 16 static char klimplanet_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x84, 0x10, 0x82, 0x20, 0x82, 0x20, 0xc1, 0x41, 0xc1, 0x41, 0xc1, 0x41, 0xb1, 0x42, 0x71, 0x47, 0x3a, 0x27, 0x0a, 0x2c, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define rommplanet_width 16 #define rommplanet_height 16 static char rommplanet_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x84, 0x10, 0x82, 0x20, 0xc2, 0x21, 0xa1, 0x42, 0x31, 0x45, 0xd1, 0x44, 0x11, 0x47, 0xa1, 0x42, 0xc2, 0x21, 0x82, 0x20, 0x84, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define orimplanet_width 16 #define orimplanet_height 16 static char orimplanet_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x82, 0x20, 0xa2, 0x22, 0xf1, 0x47, 0x21, 0x42, 0xb9, 0x4e, 0x21, 0x42, 0xf1, 0x47, 0xa2, 0x22, 0x82, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define fedmplanet_width 16 #define fedmplanet_height 16 static char fedmplanet_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x02, 0x20, 0x82, 0x20, 0xc1, 0x41, 0xc1, 0x41, 0xe1, 0x43, 0xe1, 0x43, 0x71, 0x47, 0x32, 0x26, 0x02, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet111_width 16 #define mplanet111_height 16 static char mplanet111_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x44, 0x11, 0x5a, 0x21, 0xda, 0x21, 0x81, 0x4c, 0x99, 0x54, 0xa5, 0x54, 0xbd, 0x54, 0xa5, 0x5c, 0xda, 0x21, 0x5a, 0x21, 0x44, 0x11, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet110_width 16 #define mplanet110_height 16 static char mplanet110_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x44, 0x11, 0x5a, 0x21, 0xda, 0x21, 0x81, 0x40, 0x99, 0x40, 0xa5, 0x40, 0xbd, 0x40, 0xa5, 0x40, 0xda, 0x21, 0x5a, 0x21, 0x44, 0x11, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet101_width 16 #define mplanet101_height 16 static char mplanet101_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x1a, 0x20, 0x1a, 0x20, 0x01, 0x4c, 0x19, 0x54, 0x25, 0x54, 0x3d, 0x54, 0x25, 0x5c, 0x1a, 0x20, 0x1a, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet100_width 16 #define mplanet100_height 16 static char mplanet100_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x1a, 0x20, 0x1a, 0x20, 0x01, 0x40, 0x19, 0x40, 0x25, 0x40, 0x3d, 0x40, 0x25, 0x40, 0x1a, 0x20, 0x1a, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet011_width 16 #define mplanet011_height 16 static char mplanet011_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x44, 0x11, 0x42, 0x21, 0xc2, 0x21, 0x81, 0x4c, 0x81, 0x54, 0x81, 0x54, 0x81, 0x54, 0x81, 0x5c, 0xc2, 0x21, 0x42, 0x21, 0x44, 0x11, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet010_width 16 #define mplanet010_height 16 static char mplanet010_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x44, 0x11, 0x42, 0x21, 0xc2, 0x21, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0x81, 0x40, 0xc2, 0x21, 0x42, 0x21, 0x44, 0x11, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define mplanet001_width 16 #define mplanet001_height 16 static char mplanet001_bits[] = { 0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x02, 0x20, 0x02, 0x20, 0x01, 0x4c, 0x01, 0x54, 0x01, 0x54, 0x01, 0x54, 0x01, 0x5c, 0x02, 0x20, 0x02, 0x20, 0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03, 0x00, 0x00}; #define planet111_width 30 #define planet111_height 30 static char planet111_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x20, 0x18, 0x83, 0x00, 0x10, 0x18, 0x03, 0x01, 0x08, 0x18, 0x03, 0x02, 0x04, 0xf8, 0x03, 0x04, 0xc4, 0xf9, 0x03, 0x04, 0xc2, 0xe1, 0x00, 0x08, 0xc2, 0xe1, 0xf8, 0x08, 0x82, 0x40, 0x08, 0x09, 0xf1, 0xe7, 0x08, 0x12, 0xe9, 0x4b, 0xa8, 0x12, 0xa9, 0xea, 0x48, 0x12, 0xe9, 0x4b, 0xa8, 0x12, 0xa9, 0xea, 0x08, 0x12, 0xe9, 0x4b, 0x08, 0x12, 0x61, 0xe3, 0x08, 0x12, 0x62, 0x43, 0x08, 0x0a, 0x62, 0xe3, 0xf8, 0x0b, 0x62, 0xe3, 0x00, 0x08, 0x64, 0xfb, 0x03, 0x04, 0x04, 0xf8, 0x03, 0x04, 0x08, 0x18, 0x03, 0x02, 0x10, 0x18, 0x03, 0x01, 0x20, 0x18, 0x83, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define planet110_width 30 #define planet110_height 30 static char planet110_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x20, 0x18, 0x83, 0x00, 0x10, 0x18, 0x03, 0x01, 0x08, 0x18, 0x03, 0x02, 0x04, 0xf8, 0x03, 0x04, 0xc4, 0xf9, 0x03, 0x04, 0xc2, 0xe1, 0x00, 0x08, 0xc2, 0xe1, 0x00, 0x08, 0x82, 0x40, 0x00, 0x08, 0xf1, 0xe7, 0x00, 0x10, 0xe9, 0x4b, 0x00, 0x10, 0xa9, 0xea, 0x00, 0x10, 0xe9, 0x4b, 0x00, 0x10, 0xa9, 0xea, 0x00, 0x10, 0xe9, 0x4b, 0x00, 0x10, 0x61, 0xe3, 0x00, 0x10, 0x62, 0x43, 0x00, 0x08, 0x62, 0xe3, 0x00, 0x08, 0x62, 0xe3, 0x00, 0x08, 0x64, 0xfb, 0x03, 0x04, 0x04, 0xf8, 0x03, 0x04, 0x08, 0x18, 0x03, 0x02, 0x10, 0x18, 0x03, 0x01, 0x20, 0x18, 0x83, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define planet101_width 30 #define planet101_height 30 static char planet101_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x08, 0xc2, 0x01, 0xf8, 0x08, 0x82, 0x00, 0x08, 0x09, 0xf1, 0x07, 0x08, 0x12, 0xe9, 0x0b, 0xa8, 0x12, 0xa9, 0x0a, 0x48, 0x12, 0xe9, 0x0b, 0xa8, 0x12, 0xa9, 0x0a, 0x08, 0x12, 0xe9, 0x0b, 0x08, 0x12, 0x61, 0x03, 0x08, 0x12, 0x62, 0x03, 0x08, 0x0a, 0x62, 0x03, 0xf8, 0x0b, 0x62, 0x03, 0x00, 0x08, 0x64, 0x03, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define planet100_width 30 #define planet100_height 30 static char planet100_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x08, 0xc2, 0x01, 0x00, 0x08, 0x82, 0x00, 0x00, 0x08, 0xf1, 0x07, 0x00, 0x10, 0xe9, 0x0b, 0x00, 0x10, 0xa9, 0x0a, 0x00, 0x10, 0xe9, 0x0b, 0x00, 0x10, 0xa9, 0x0a, 0x00, 0x10, 0xe9, 0x0b, 0x00, 0x10, 0x61, 0x03, 0x00, 0x10, 0x62, 0x03, 0x00, 0x08, 0x62, 0x03, 0x00, 0x08, 0x62, 0x03, 0x00, 0x08, 0x64, 0x03, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define planet011_width 30 #define planet011_height 30 static char planet011_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x20, 0x18, 0x83, 0x00, 0x10, 0x18, 0x03, 0x01, 0x08, 0x18, 0x03, 0x02, 0x04, 0xf8, 0x03, 0x04, 0x04, 0xf8, 0x03, 0x04, 0x02, 0xe0, 0x00, 0x08, 0x02, 0xe0, 0xf8, 0x08, 0x02, 0x40, 0x08, 0x09, 0x01, 0xe0, 0x08, 0x12, 0x01, 0x40, 0xa8, 0x12, 0x01, 0xe0, 0x48, 0x12, 0x01, 0x40, 0xa8, 0x12, 0x01, 0xe0, 0x08, 0x12, 0x01, 0x40, 0x08, 0x12, 0x01, 0xe0, 0x08, 0x12, 0x02, 0x40, 0x08, 0x0a, 0x02, 0xe0, 0xf8, 0x0b, 0x02, 0xe0, 0x00, 0x08, 0x04, 0xf8, 0x03, 0x04, 0x04, 0xf8, 0x03, 0x04, 0x08, 0x18, 0x03, 0x02, 0x10, 0x18, 0x03, 0x01, 0x20, 0x18, 0x83, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define planet010_width 30 #define planet010_height 30 static char planet010_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x20, 0x18, 0x83, 0x00, 0x10, 0x18, 0x03, 0x01, 0x08, 0x18, 0x03, 0x02, 0x04, 0xf8, 0x03, 0x04, 0x04, 0xf8, 0x03, 0x04, 0x02, 0xe0, 0x00, 0x08, 0x02, 0xe0, 0x00, 0x08, 0x02, 0x40, 0x00, 0x08, 0x01, 0xe0, 0x00, 0x10, 0x01, 0x40, 0x00, 0x10, 0x01, 0xe0, 0x00, 0x10, 0x01, 0x40, 0x00, 0x10, 0x01, 0xe0, 0x00, 0x10, 0x01, 0x40, 0x00, 0x10, 0x01, 0xe0, 0x00, 0x10, 0x02, 0x40, 0x00, 0x08, 0x02, 0xe0, 0x00, 0x08, 0x02, 0xe0, 0x00, 0x08, 0x04, 0xf8, 0x03, 0x04, 0x04, 0xf8, 0x03, 0x04, 0x08, 0x18, 0x03, 0x02, 0x10, 0x18, 0x03, 0x01, 0x20, 0x18, 0x83, 0x00, 0xc0, 0x10, 0x61, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define planet001_width 30 #define planet001_height 30 static char planet001_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0xf8, 0x08, 0x02, 0x00, 0x08, 0x09, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0xa8, 0x12, 0x01, 0x00, 0x48, 0x12, 0x01, 0x00, 0xa8, 0x12, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x08, 0x12, 0x01, 0x00, 0x08, 0x12, 0x02, 0x00, 0x08, 0x0a, 0x02, 0x00, 0xf8, 0x0b, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #ifdef VSHIELD_BITMAPS #define shield_width 20 #define shield_height 20 #define SHIELD_FRAMES 5 #define SHIELD_BYTE_SIZE 60 static char shield_bits[SHIELD_FRAMES][SHIELD_BYTE_SIZE] = { { 0x40, 0x29, 0x00, 0x10, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, 0x80, 0x00, 0x40, 0x29, 0x00}, { 0xc0, 0x36, 0x00, 0x20, 0x40, 0x00, 0x08, 0x00, 0x01, 0x04, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x02, 0x08, 0x00, 0x01, 0x20, 0x40, 0x00, 0xc0, 0x36, 0x00}, { 0xc0, 0x3f, 0x00, 0x30, 0xc0, 0x00, 0x08, 0x00, 0x01, 0x04, 0x00, 0x02, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x04, 0x00, 0x02, 0x08, 0x00, 0x01, 0x30, 0xc0, 0x00, 0xc0, 0x3f, 0x00}, { 0xc0, 0x3f, 0x00, 0x70, 0xe0, 0x00, 0x18, 0x80, 0x01, 0x0c, 0x00, 0x03, 0x06, 0x00, 0x06, 0x02, 0x00, 0x04, 0x03, 0x00, 0x0c, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x03, 0x00, 0x0c, 0x02, 0x00, 0x04, 0x06, 0x00, 0x06, 0x0c, 0x00, 0x03, 0x18, 0x80, 0x01, 0x70, 0xe0, 0x00, 0xc0, 0x3f, 0x00}, { 0xc0, 0x3f, 0x00, 0x70, 0xe0, 0x00, 0x18, 0x80, 0x01, 0x0c, 0x00, 0x03, 0x06, 0x00, 0x06, 0x02, 0x00, 0x04, 0x03, 0x00, 0x0c, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x03, 0x00, 0x0c, 0x02, 0x00, 0x04, 0x06, 0x00, 0x06, 0x0c, 0x00, 0x03, 0x18, 0x80, 0x01, 0x70, 0xe0, 0x00, 0xc0, 0x3f, 0x00}, }; #else static char shield_bits[] = { 0xc0, 0x3f, 0x00, 0x30, 0xc0, 0x00, 0x08, 0x00, 0x01, 0x04, 0x00, 0x02, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x01, 0x00, 0x08, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x04, 0x00, 0x02, 0x08, 0x00, 0x01, 0x30, 0xc0, 0x00, 0xc0, 0x3f, 0x00}; #endif static char cloak_bits[] = { 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x08, 0x82, 0x00, 0x04, 0x00, 0x01, 0x20, 0x20, 0x00, 0x00, 0x02, 0x00, 0x80, 0x08, 0x00, 0x01, 0x00, 0x04, 0x49, 0x90, 0x04, 0x01, 0x00, 0x04, 0x80, 0x08, 0x00, 0x00, 0x02, 0x00, 0x20, 0x20, 0x00, 0x04, 0x00, 0x01, 0x08, 0x82, 0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00}; static char icon_bits[] = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x73, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xf8, 0x01, 0x26, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0x1f, 0x7c, 0x20, 0x71, 0xaa, 0xab, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x81, 0x0f, 0x38, 0x20, 0x17, 0xb2, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x0f, 0x18, 0x20, 0x75, 0xa2, 0x2b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0x81, 0x01, 0x1e, 0x0c, 0x00, 0xe0, 0x01, 0x00, 0x88, 0x04, 0x80, 0xff, 0xff, 0xff, 0x81, 0x01, 0x3c, 0x06, 0x00, 0x20, 0xdc, 0xdc, 0xd5, 0x71, 0x83, 0xe0, 0xc3, 0x07, 0x81, 0x01, 0x3c, 0x03, 0x00, 0x20, 0x45, 0x45, 0x9c, 0x54, 0x05, 0xc0, 0x81, 0x03, 0x80, 0x01, 0x78, 0x03, 0x00, 0xe0, 0x5d, 0x5d, 0x94, 0x75, 0x05, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xf0, 0x00, 0xfc, 0x8f, 0x7f, 0x80, 0x8f, 0xe1, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xe0, 0x01, 0xfe, 0x87, 0xff, 0xe0, 0x87, 0x71, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xe0, 0x01, 0x60, 0x80, 0xe1, 0x70, 0x80, 0x39, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xf0, 0x03, 0x60, 0x80, 0x71, 0x38, 0x80, 0x1d, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0xd8, 0x03, 0x60, 0x80, 0x39, 0x18, 0x80, 0x0f, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0x98, 0x07, 0x60, 0x80, 0x1d, 0xf8, 0x87, 0x3f, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0x8c, 0x07, 0x60, 0x80, 0x7f, 0xf8, 0x83, 0x7f, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0x06, 0x0f, 0x60, 0x80, 0xe1, 0x18, 0x80, 0xe1, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0x06, 0x0f, 0x60, 0x80, 0xc1, 0x38, 0x80, 0xc1, 0x00, 0xc0, 0x81, 0x03, 0x80, 0x01, 0x03, 0x1f, 0x60, 0x80, 0xc1, 0x70, 0x88, 0xc1, 0x80, 0xe0, 0xc3, 0x07, 0x81, 0x81, 0x03, 0x3e, 0x60, 0x80, 0xc1, 0xe0, 0x8f, 0xc1, 0x87, 0xff, 0xff, 0xff, 0x81, 0xe1, 0x07, 0xff, 0xf0, 0xc0, 0xe3, 0x80, 0xc7, 0xe3, 0x83, 0xff, 0xff, 0xff, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xfc, 0xff, 0xff, 0x07, 0x00, 0xc0, 0xff, 0x03, 0xfe, 0xff, 0xff, 0x07, 0x80, 0x01, 0xfe, 0xff, 0xff, 0x0f, 0x00, 0xfe, 0xff, 0x7f, 0xfe, 0xff, 0xff, 0x01, 0x80, 0x01, 0x40, 0x00, 0xc0, 0x80, 0x00, 0xff, 0xff, 0xff, 0x00, 0x06, 0x00, 0x00, 0x80, 0x81, 0x80, 0xff, 0xbf, 0xff, 0x00, 0x00, 0xff, 0xf8, 0xff, 0xff, 0x03, 0x00, 0x80, 0x81, 0x7f, 0xff, 0x1f, 0x80, 0x00, 0x00, 0x18, 0xf0, 0xff, 0xff, 0x03, 0x00, 0x80, 0x81, 0x04, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x0f, 0x00, 0x00, 0x80, 0x01, 0x04, 0xfd, 0x17, 0xee, 0x01, 0x00, 0x00, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0xf9, 0x13, 0x78, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf1, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xfd, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf9, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf9, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x80, 0x01, 0x00, 0xf8, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x2e, 0x00, 0x80, 0x01, 0x00, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f, 0x00, 0x80, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0x07, 0x80, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe7, 0xee, 0x3c, 0x80, 0x01, 0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x80, 0x31, 0xc0, 0x80, 0x01, 0x00, 0x47, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x60, 0xce, 0x00, 0x81, 0x01, 0x00, 0xf9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x81, 0x01, 0x00, 0xe4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x00, 0x00, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xf0, 0x01, 0x00, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x7c, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x40, 0x00, 0x00, 0xfa, 0xff, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0xe0, 0x00, 0x00, 0x84, 0x0f, 0x7d, 0xff, 0xff, 0x07, 0x00, 0x00, 0x80, 0x01, 0x00, 0x40, 0x00, 0xf0, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x03, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x3f, 0xfc, 0x3f, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f}; netrek-client-cow-3.3.2/sound.c0000664000175000017500000010304413657750470015347 0ustar jamesjames#include "config.h" #ifdef SOUND #if defined(HAVE_SDL) #include "SDL.h" #include "SDL_mixer.h" #endif #include "copyright.h" #include #include #include #include #include #include #include #include #include INC_LIMITS #include INC_SYS_TIME #if defined(sgi) #include #include #include #include #include #include #include #include #include #include #include #include #include #include "sgi-sound.h" #endif #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "audio.h" #if defined(HAVE_SDL) || defined(sgi) enum { INTRO_WAV, /* 0 */ FIRE_TORP_WAV, /* 1 */ PHASER_WAV, /* 2 */ FIRE_PLASMA_WAV, /* 3 */ EXPLOSION_WAV, /* 4 */ SBEXPLOSION_WAV, /* 5 */ CLOAK_WAV, /* 6 */ UNCLOAK_WAV, /* 7 */ SHIELD_DOWN_WAV, /* 8 */ SHIELD_UP_WAV, /* 9 */ TORP_HIT_WAV, /* 10 */ REDALERT_WAV, /* 11 */ BUZZER_WAV, /* 12 */ ENTER_SHIP_WAV, /* 13 */ SELF_DESTRUCT_WAV, /* 14 */ PLASMA_HIT_WAV, /* 15 */ MESSAGE_WAV, /* 16 */ ENGINE_WAV, /* 17 */ THERMAL_WAV, /* 18 */ FIRE_TORP_OTHER_WAV, /* 19 */ PHASER_OTHER_WAV, /* 20 */ FIRE_PLASMA_OTHER_WAV, /* 21 */ EXPLOSION_OTHER_WAV, /* 22 */ SBEXPLOSION_OTHER_WAV, /* 23 */ NUM_WAVES /* 24 */ }; #endif #if defined(HAVE_SDL) /* This is probably unix specific paths */ static Mix_Chunk *sounds[NUM_WAVES]; #endif #if defined(sgi) static ALport sfxInitAudioPort(int init); static short *sfxLoadAudioFile(char *dirName, char *fileName, AFframecount *size); static int sfxCheckForAudio(void); static int sfxOpenAudioPorts(ALport ports[], int maxAudioPorts); static void sfxCheckVolume(void); static void sfxResetAudioHw(void); static void sfxSetGain(float l, float r); static void sfxSetGainIndex(unsigned long gain); static void sfxSignalSound(Sfx sp); static void sfxDieGracefully(int sig); static void sfxSoundDied(int sig); static void sfxSoundErrFunc(long err, const char *msg, ...); static void sfxSoundHandler(void *arg); static Sfx sounds[NUM_WAVES]; /* waveform storage */ static ALport audioPort[MAX_AUDIO_PORTS]; /* audio port structure */ static int nAudioPorts; /* number of audio ports */ static int soundOther = 1; /* sound toggle for other ships */ static int soundChild; /* set if child process is running */ static int gainIndex; /* current gain index */ static int endingOnPurpose = 0; /* set if sound should end on purpose */ static int spigot[2]; /* pipe to the child process */ static int soundId = 0; /* ID of current sound */ static char *sfxAudioDir; /* directory with sound files */ static unsigned long origLeftGain; /* initial gain setting for left channel */ static unsigned long origRightGain; /* initial gain setting for right channel */ static unsigned long origOutputRate; /* initial output sample rate */ static unsigned long currLeftGain; /* current gain setting for left channel */ static unsigned long currRightGain; /* current gain setting for right channel */ static unsigned long gainSettings[] = { 0, 2, 3, 5, 9, 16, 29, 50, 91, 156, 255 }; #endif #if !defined(HAVE_SDL) && !defined(sgi) /* Each sound has a priority which controls what can override what * Currently these are set as follows: * * 10: explosion * 9: phaser,plasma * 8: torp/plasma hit * 7: torp fire, cloak * 6: alert * 4: "informational" sounds (self destruct, enter ship, message, etc.) * 3: shield up/down, other people's sounds (phaser, torp, plasma, explode) * 0: background or ambient (engine?) */ static struct Sound sounds[NUM_SOUNDS+1] = { {"", 0, 0}, {"nt_fire_torp", 7, 1}, {"nt_phaser", 9, 1}, {"nt_fire_plasma", 9, 1}, {"nt_explosion", 10, 1}, {"nt_cloaked", 7, 1}, {"nt_uncloak", 7, 1}, {"nt_shield_down", 3, 1}, {"nt_shield_up", 3, 1}, {"nt_torp_hit", 8, 1}, {"nt_warning", 5, 1}, {"nt_engine", 0, 0}, {"nt_enter_ship", 4, 1}, {"nt_self_destruct", 6, 1}, {"nt_plasma_hit", 8, 1}, {"nt_message", 4, 1}, {"nt_message1", 4, 1}, {"nt_message2", 4, 1}, {"nt_message3", 4, 1}, {"nt_message4", 4, 1}, {"nt_message5", 4, 1}, {"nt_message6", 4, 1}, {"nt_message7", 4, 1}, {"nt_message8", 4, 1}, {"nt_message9", 4, 1}, {"nt_fire_torp_other", 3, 1}, {"nt_phaser_other", 3, 1}, {"nt_fire_plasma_other", 3, 1}, {"nt_explosion_other", 10, 1} }; static char sound_prefix[PATH_MAX]; static int current_sound = NO_SOUND; static int soundOther = 1; /* play other ship's sounds? */ #endif /* HAVE_SDL */ static int isDirectory(char* dir) { /* check wheter `dir' is a directory */ struct stat buf; if (stat(dir, &buf) < 0) { return 0; } return S_ISDIR(buf.st_mode); } #if defined(sgi) /* * Initialize the audio hardware. */ int sfxInit(char *audioDir, int numPorts) { int idx; char *str; if (audioDir != NULL) { str = strdup(audioDir); if (str) sfxAudioDir = str; } if (numPorts < 1) return SFX_ERR_NO_PORTS_AVAIL; if (numPorts > MAX_AUDIO_PORTS) numPorts = MAX_AUDIO_PORTS; (void) ALseterrorhandler(sfxSoundErrFunc); nAudioPorts = sfxOpenAudioPorts(audioPort, numPorts); if (nAudioPorts == 0) return SFX_ERR_NO_PORTS_AVAIL; if (nAudioPorts < 0) return SFX_ERR_NO_AUDIO_HW; (void) signal(SIGCHLD, sfxSoundDied); if (pipe(spigot) < 0 || (soundChild = sproc(sfxSoundHandler, PR_SADDR, audioPort)) < 0) { for (idx=0; idx < nAudioPorts; idx++) ALcloseport(audioPort[idx]); return SFX_ERR_NO_SPROC; } return nAudioPorts; } /* * Load an audio file. */ Sfx sfxLoad(char *filename) { Sfx sp; if ((sp=(Sfx)malloc(sizeof(struct _sfx))) == NULL) return NULL; sp->soundData = NULL; sp->soundSize = NULL; sp->loop = 0; sp->repeat = 0; sp->count = 1; sp->pitch = 0; sp->enabled = 1; if ((sp->soundData=(short **)malloc(sizeof(short *))) == NULL) { sfxFree(sp); return NULL; } if ((sp->soundSize=(AFframecount *)malloc(sizeof(AFframecount))) == NULL) { sfxFree(sp); return NULL; } if ((sp->soundData[0] = sfxLoadAudioFile(sfxAudioDir, filename, &(sp->soundSize[0]))) == NULL) { sfxFree(sp); return NULL; } sp->id = soundId++; return sp; } /* * Indicate that a sound is to loop. */ void sfxLoop(Sfx sp) { if (sp != NULL) sp->loop = 1; return; } /* * Play a sound effect. */ void sfxPlay(Sfx sp) { if (sound_init && sp != NULL && sp->soundData[0] && sp->enabled) { if (sp->loop) sp->repeat = 1; sfxCheckVolume(); sfxSignalSound(sp); } return; } /* * Play a pitch-bent audio clip. */ void sfxPlayPitch(Sfx sp, float val) { int i; if (sound_init && sp != NULL && sp->soundData[0] && sp->enabled) { if (val <= sp->loVal) i = 0; else if (val >= sp->hiVal) i = sp->count-1; else i = (long)(0.4f + (sp->count - 1) * (val - sp->loVal)/(sp->hiVal - sp->loVal)); if (sp->loop && sp->repeat && sp->pitch == i) return; sp->pitch = i; sfxPlay(sp); } return; } /* * Create a pitch bend audio clip. */ void sfxPitchBend(Sfx sp, float startVal, float endVal, float startPitch, float endPitch, float basePitch, int steps) { int i, k; int size; short **ptr; short *data; short *origData; double pitch; double a, b; long frameIndex; AFframecount *lptr; if (sp == NULL || steps < 2 || sp->count != 1) return; if ((lptr=(AFframecount *)malloc(steps * sizeof(AFframecount))) == NULL) return; size = 0; a = (endPitch - startPitch) / (double)(steps - 1); b = 1.0 / (double)basePitch; for (i=0; i < steps; i++) { pitch = (startPitch + (double)i * a) * b; k = (long)((double)sp->soundSize[0] / pitch); lptr[i] = k; size += k; } if ((ptr=(short **)malloc(steps * sizeof(short *))) == NULL) { free(lptr); return; } /* * Allocate new space for pitch-bent sound data. */ if ((data=(short *)malloc(size * 2 * sizeof(short))) == NULL) { free(lptr); free(ptr); return; } size = (int)sp->soundSize[0]; free(sp->soundSize); sp->soundSize = lptr; origData = sp->soundData[0]; free(sp->soundData); sp->soundData = ptr; sp->count = steps; sp->loVal = startVal; sp->hiVal = endVal; for (i=0; i < steps; i++) { pitch = (startPitch + (double)i * a) * b; if (i == 0) sp->soundData[i] = data; else sp->soundData[i] = sp->soundData[i-1] + 2 * sp->soundSize[i-1]; for (k=0; k < sp->soundSize[i]; k++) { frameIndex = (long)(k * pitch + 0.5); if (frameIndex >= size) frameIndex = size - 1; sp->soundData[i][2*k ] = origData[2*frameIndex ]; sp->soundData[i][2*k+1] = origData[2*frameIndex+1]; } } free(origData); return; } /* * Silence an audio loop. */ void sfxSilenceLoop(Sfx sp) { if (sp != NULL && sp->repeat) { sp->repeat = 0; sfxSignalSound(sp); } return; } /* * Disable a sound clip. */ void sfxDisable(Sfx sp) { if (sp != NULL) { sp->enabled = 0; if (sp->loop) sfxSilenceLoop(sp); } return; } /* * Enable a sound clip. */ void sfxEnable(Sfx sp) { if (sp != NULL) sp->enabled = 1; return; } /* * Check whether a sound clip is enabled. */ int sfxIsEnabled(Sfx sp) { return (sp != NULL) && sp->enabled; } /* * Set the volume to a specified level. */ void sfxSetVolume(int level) { if (level >= 0 && level < sizeof( gainSettings ) / sizeof( gainSettings[0])) { gainIndex = level; currLeftGain = currRightGain = gainSettings[gainIndex]; } return; } /* * Clean up sound routines. */ void sfxEnd(int waitForSounds) { int idx; endingOnPurpose = 1; if (waitForSounds) { /* wait for sounds to complete */ for (idx=0; idx < nAudioPorts; idx++) { while (ALgetfilled(audioPort[idx]) > 0) sginap(1); ALcloseport(audioPort[idx]); } } else if (soundChild > 0) /* kill childs playing sounds */ kill(soundChild, SIGKILL); if (nAudioPorts > 0) /* reset audio subsystem */ sfxResetAudioHw(); } /* * Open up the audio ports. */ static int sfxOpenAudioPorts(ALport ports[], int maxAudioPorts) { int n; if (sfxCheckForAudio() == 0) return -1; for (n=0; n < maxAudioPorts; n++) if ((audioPort[n] = sfxInitAudioPort(n == 0)) == NULL) break; return n; } /* * Check for audio hardware. */ static int sfxCheckForAudio(void) { int st = 0; inventory_t *base; inventory_t *inv; inv = base = getinvent(); while (inv != NULL) { /* * Ok if any type of audio hardware available. */ if (inv->inv_class == INV_AUDIO) st = 1; inv = getinvent(); } if( base ) endinvent(); return st; } /* * Open and initialize an audio port. */ static ALport sfxInitAudioPort(int init) { ALport ap; ALconfig audioPortConfig; long pvbuf[6]; if (init) { pvbuf[0] = AL_LEFT_SPEAKER_GAIN; pvbuf[2] = AL_RIGHT_SPEAKER_GAIN; pvbuf[4] = AL_OUTPUT_RATE; ALgetparams(AL_DEFAULT_DEVICE, pvbuf, 6L); currLeftGain = origLeftGain = pvbuf[1]; currRightGain = origRightGain = pvbuf[3]; origOutputRate = pvbuf[5]; sfxSetGainIndex((origLeftGain+origRightGain)/2); } /* * Configure and open audio port. */ audioPortConfig = ALnewconfig(); ALsetwidth(audioPortConfig, AL_SAMPLE_16); ALsetchannels(audioPortConfig, AL_STEREO); ALsetqueuesize(audioPortConfig, 16000); ap = ALopenport("spacetrek", "w", audioPortConfig); ALfreeconfig(audioPortConfig); return ap; } /* * Reset the audio hardware to where we found it when we started. */ static void sfxResetAudioHw(void) { long pvbuf[6]; pvbuf[0] = AL_LEFT_SPEAKER_GAIN; pvbuf[1] = origLeftGain; pvbuf[2] = AL_RIGHT_SPEAKER_GAIN; pvbuf[3] = origRightGain; pvbuf[4] = AL_OUTPUT_RATE; pvbuf[5] = origOutputRate; ALsetparams(AL_DEFAULT_DEVICE, pvbuf, 6L); return; } /* * Free the Sfx structure. */ void sfxFree(Sfx sp) { if (sp) { if (sp->soundData) { free(sp->soundData); sp->soundData = NULL; } if (sp->soundSize) { free(sp->soundSize); sp->soundSize = NULL; } free(sp); } return; } /* * Set the gain index. */ static void sfxSetGainIndex(unsigned long gain) { int idx; long min = 256; long diff; for (idx=0; idx < sizeof(gainSettings) / sizeof(gainSettings[0]); idx++) { diff = gain - gainSettings[idx]; if (diff < 0) diff = -diff; if (diff < min) { min = diff; gainIndex = idx; } } return; } /* * Set the volume level. */ static void sfxSetGain(float l, float r) { long pvbuf[4]; pvbuf[0] = AL_LEFT_SPEAKER_GAIN; pvbuf[1] = l * currLeftGain; pvbuf[2] = AL_RIGHT_SPEAKER_GAIN; pvbuf[3] = r * currRightGain; ALsetparams(AL_DEFAULT_DEVICE, pvbuf, 4L); } /* * Check for external volume changes. */ static void sfxCheckVolume(void) { long pvbuf[6]; /* * Check to see if the volume was changed externally. */ pvbuf[0] = AL_LEFT_SPEAKER_GAIN; pvbuf[2] = AL_RIGHT_SPEAKER_GAIN; ALgetparams(AL_DEFAULT_DEVICE, pvbuf, 4L); if (pvbuf[1] != currLeftGain || pvbuf[3] != currRightGain) { origLeftGain = currLeftGain = pvbuf[1]; origRightGain = currRightGain = pvbuf[3]; sfxSetGainIndex((pvbuf[1] + pvbuf[3]) / 2); } return; } /* * Adjust the volume. */ int sfxVolumeChange(int direction) { if (sound_init) { sfxCheckVolume(); if (direction == 1) { if (gainIndex < sizeof(gainSettings)/sizeof(gainSettings[0])-1) gainIndex++; } else if (gainIndex > 0) gainIndex--; currLeftGain = currRightGain = gainSettings[gainIndex]; sfxSetGain(1., 1.); return gainIndex; } return 0; } /* * Wake up the sound handler. */ static void sfxSignalSound(Sfx sp) { if (soundChild && write(spigot[1], sp, sizeof(*sp)) != sizeof(*sp)) (void) fprintf(stderr, "sfxSignalSound failed: %s\n", strerror(errno)); return; } /* * Audio library error handler. */ static void sfxSoundErrFunc(long err, const char *msg, ...) { } /* * Handler for sound child dying. */ static void sfxSoundDied(int sig) { if (!endingOnPurpose) { nAudioPorts = 0; sound_init = 0; (void) fprintf(stderr, "Sound handling child process was killed by signal %d\n", sig); } return; } /* * Exit sound handler on SIGHUP. */ static void sfxDieGracefully(int sig) { exit(0); } /* * Sound handler. */ static void sfxSoundHandler(void *arg) { ALport *ap = (ALport *)arg; Sample samp[MAX_AUDIO_PORTS]; int idx, nap; int treated; int nSounds = 1; int nextPort = 0; long maxSampsPerPass; long sampCount; long pvbuf[2]; struct _sfx ss; struct pollfd pf; prctl(PR_TERMCHILD, 0); (void) signal(SIGHUP, sfxDieGracefully); maxSampsPerPass = 1600; for (idx=0; idx < nAudioPorts; idx++) { samp[idx].id = -1; samp[idx].sample = NULL; samp[idx].sampsToPlay = 0; samp[idx].repeat = 0; } /* * Set sample rate for output device. */ pvbuf[0] = AL_OUTPUT_RATE; pvbuf[1] = AL_RATE_16000; (void) ALsetparams(AL_DEFAULT_DEVICE, pvbuf, 2L); /* * Prepare to read from pipe. */ pf.fd = spigot[0]; pf.events = POLLIN | POLLRDNORM | POLLRDBAND; #define EVER ;; for (EVER) { if (nSounds == 0 || (idx=poll(&pf, 1, 0)) > 0) { (void) read(spigot[0], &ss, sizeof(ss)); treated = 0; if (ss.loop == 1 && ss.repeat == 0) { treated = 1; for (idx=0; idx < nAudioPorts; idx++) { if (samp[idx].id == ss.id) { samp[idx].id = -1; samp[idx].repeat = 0; samp[idx].sampsToPlay = 0; samp[idx].sample = NULL; } } } else if (ss.loop == 1 && ss.count > 1) { for (idx=0; idx < nAudioPorts; idx++) { if (samp[idx].id == ss.id) { treated = 1; samp[idx].repeat = ss.repeat; samp[idx].sampsToPlay = (long)ss.soundSize[ss.pitch]; samp[idx].sampsPlayed = 0; samp[idx].sample = ss.soundData[ss.pitch]; } } } if (!treated) { for (idx=0; idx < nAudioPorts; idx++) { nextPort = (nextPort+1) % nAudioPorts; if (samp[nextPort].repeat == 0) break; } samp[nextPort].sample = ss.soundData[ss.pitch]; samp[nextPort].sampsToPlay = (long)ss.soundSize[ss.pitch]; samp[nextPort].sampsPlayed = 0; samp[nextPort].repeat = ss.repeat; samp[nextPort].id = ss.id; } } else if (idx < 0) (void) fprintf(stderr, "panic: input poll failed: %s\n", strerror(errno)); nSounds = 0; nap = 0; for (idx=0; idx < nAudioPorts; idx++) { if (samp[idx].sampsToPlay > 0) { nSounds++; if (ALgetfilled(ap[idx]) > 4000) { nap++; continue; } } if (samp[idx].sampsToPlay >= maxSampsPerPass) { (void) ALwritesamps(ap[idx], samp[idx].sample + samp[idx].sampsPlayed, maxSampsPerPass); samp[idx].sampsPlayed += maxSampsPerPass; samp[idx].sampsToPlay -= maxSampsPerPass; } else if (samp[idx].sampsToPlay > 0) { if ((samp[idx].sampsToPlay%2) == 1) { samp[idx].sampsToPlay -= 1; samp[idx].sampsPlayed += 1; } if (samp[idx].sampsToPlay > 0) (void) ALwritesamps(ap[idx], samp[idx].sample+samp[idx].sampsPlayed, samp[idx].sampsToPlay); if (samp[idx].repeat) { sampCount = maxSampsPerPass - samp[idx].sampsToPlay; samp[idx].sampsToPlay += samp[idx].sampsPlayed - sampCount; samp[idx].sampsPlayed = sampCount; (void) ALwritesamps(ap[idx], samp[idx].sample, sampCount); } else samp[idx].sampsToPlay = 0; } } if (nap == nSounds) sginap(1); } return; } /* * Open an audio file, check for recognized type, and read. */ static short *sfxLoadAudioFile(char *dirName, char *fileName, AFframecount *size) { int fd; int sampleWidth; int sampleFmt; char *name; short *data; AFfilehandle file; if (!(name = malloc(strlen(dirName)+strlen(fileName)+2))) return NULL; (void) sprintf(name, "%s/%s", dirName, fileName); if ((fd=open(name, O_RDONLY)) < 0) { (void) fprintf(stderr, "Could not open audio file `%s': %s\n", name, strerror(errno)); free(name); return NULL; } switch(AFidentifyfd(fd)) { case AF_FILE_AIFF: case AF_FILE_AIFFC: break; default: (void) fprintf(stderr, "%s: unrecognized file type -- convert to AIFF or AIFC\n", name); free(name); return NULL; } file = AFopenfd(fd, "r", AF_NULL_FILESETUP); if (file == AF_NULL_FILEHANDLE) { fprintf(stderr, "%s: failed to attach an audio file struct\n", name); free(name); return NULL; } if ((int)AFgetchannels(file, AF_DEFAULT_TRACK) != 2) { fprintf(stderr, "%s: does not have 2 channels\n", name); free(name); AFclosefile(file); return NULL; } if (AFgetrate(file, AF_DEFAULT_TRACK) != 16000) { fprintf(stderr, "%s: is not recorded at 16 KHz\n", name); free(name); AFclosefile(file); return NULL; } AFgetsampfmt(file, AF_DEFAULT_TRACK, &sampleFmt, &sampleWidth); if (sampleWidth != 16) { fprintf(stderr, "%s: is not recorded with 16 bit samples\n", name); free(name); AFclosefile(file); return NULL; } free(name); *size = AFgetframecnt(file, AF_DEFAULT_TRACK); if ((data=(short *)malloc((size_t)(*size * 2 * sizeof(short)))) == NULL) { (void) fprintf(stderr, "%s: out of memory for %lld samples\n", name, *size); *size = 0; AFclosefile(file); return NULL; } if (AFreadframes(file, AF_DEFAULT_TRACK, data, (int)*size) != (int)*size) { (void) fprintf(stderr, "%s: error reading\n", name); free(data); data = NULL; *size = 0L; } *size *= 2L; AFclosefile(file); return data; } #elif defined(HAVE_SDL) /* * Build the path to the sound files */ static char *DATAFILE(const char* wav) { static char buf[PATH_MAX]; (void) snprintf(buf, sizeof buf, "%s/%s", sounddir, wav); return (char *)buf; } /* * Load the .wave files into the sounds array */ static int loadSounds(void) { #ifdef SOUND_WARN_MISSING int i; #endif sounds[CLOAK_WAV] = Mix_LoadWAV(DATAFILE("nt_cloaked.wav")); sounds[ENTER_SHIP_WAV] = Mix_LoadWAV(DATAFILE("nt_enter_ship.wav")); sounds[EXPLOSION_WAV] = Mix_LoadWAV(DATAFILE("nt_explosion.wav")); sounds[SBEXPLOSION_WAV] = Mix_LoadWAV(DATAFILE("nt_sbexplosion.wav")); sounds[EXPLOSION_OTHER_WAV] = Mix_LoadWAV(DATAFILE("nt_explosion_other.wav")); sounds[FIRE_PLASMA_WAV] = Mix_LoadWAV(DATAFILE("nt_fire_plasma.wav")); sounds[FIRE_TORP_WAV] = Mix_LoadWAV(DATAFILE("nt_fire_torp.wav")); sounds[FIRE_TORP_OTHER_WAV] = Mix_LoadWAV(DATAFILE("nt_fire_torp_other.wav")); sounds[INTRO_WAV] = Mix_LoadWAV(DATAFILE("nt_intro.wav")); sounds[MESSAGE_WAV] = Mix_LoadWAV(DATAFILE("nt_message.wav")); sounds[PHASER_WAV] = Mix_LoadWAV(DATAFILE("nt_phaser.wav")); sounds[PHASER_OTHER_WAV] = Mix_LoadWAV(DATAFILE("nt_phaser_other.wav")); sounds[PLASMA_HIT_WAV] = Mix_LoadWAV(DATAFILE("nt_plasma_hit.wav")); sounds[SELF_DESTRUCT_WAV] = Mix_LoadWAV(DATAFILE("nt_self_destruct.wav")); sounds[SHIELD_DOWN_WAV] = Mix_LoadWAV(DATAFILE("nt_shield_down.wav")); sounds[SHIELD_UP_WAV] = Mix_LoadWAV(DATAFILE("nt_shield_up.wav")); sounds[TORP_HIT_WAV] = Mix_LoadWAV(DATAFILE("nt_torp_hit.wav")); sounds[UNCLOAK_WAV] = Mix_LoadWAV(DATAFILE("nt_uncloak.wav")); sounds[REDALERT_WAV] = Mix_LoadWAV(DATAFILE("nt_warning.wav")); #ifdef SOUND_WARN_MISSING for (i=0; i < NUM_WAVES; i++) { if (!sounds[i]) { (void) fprintf(stderr, "Mix_LoadWAV sound[%d] could not be loaded.\n" "Check soundDir in your .netrekrc: %s\n", i, Mix_GetError()); } } #endif return 1; } void sound_cleanup (void) { int i; /* Free the sound effects */ for (i = 0; i < NUM_WAVES; i++) Mix_FreeChunk(sounds[i]); /* Quit SDL_mixer */ Mix_CloseAudio(); /* Quit SDL */ /* Oh boy, what a meaningful comment! */ SDL_Quit(); } #endif /* HAVE_SDL */ void Exit_Sound(void) { #if defined(sgi) if (sound_init) sfxEnd(1); #elif !defined(HAVE_SDL) if (sound_init) ExitSound(); #endif sound_init = 0; sound_toggle = 0; } void Init_Sound(void) { char *sd; #if defined(sgi) int err; #elif defined(HAVE_SDL) #else char buf[PATH_MAX]; #endif #ifdef DEBUG printf("Init_Sound\n"); #endif /* * If sound_init is on in the .xtrekrc file (set in defaults.c) * look for sounds in .xtrekrc sounddir parameter. If that fails * look for an environment variable called SOUNDDIR and if that * fails, try to open the hardcoded sound directory. */ if (sound_init) { if ((sounddir = getdefault("sounddir")) == NULL) { if ((sd=getenv("SOUNDDIR")) != NULL) sounddir = strdup(sd); else #if defined(sgi) sounddir = "/usr/local/games/netrek-sgi/sounds"; #else sounddir = "/usr/share/sounds/netrek-client-cow"; #endif } if (!isDirectory(sounddir)) { sounddir = "sounds"; if (!isDirectory(sounddir)) { (void) fprintf(stderr, "sound directory %s missing\n", sounddir); return; } } } #if defined(sgi) err = sfxInit(sounddir, 3); /* initialize up to three audio ports */ if (err == SFX_ERR_NO_PORTS_AVAIL) { (void) fprintf(stderr, "No audio ports available.\n"); sound_init = 0; sound_toggle = 0; return; } if (err == SFX_ERR_NO_SPROC) { (void) fprintf(stderr, "Unable to execute sound process.\n"); sound_init = 0; sound_toggle = 0; return; } if (err == SFX_ERR_NO_MEM) { (void) fprintf(stderr, "No memory available for sound data.\n"); sound_init = 0; sound_toggle = 0; return; } if (err > 0) { /* load mandatory sounds f we got at least one audio port */ sounds[FIRE_TORP_WAV] = sfxLoad("fire_torp.aiff"); sounds[PHASER_WAV] = sfxLoad("phaser.aiff"); sounds[FIRE_PLASMA_WAV] = sfxLoad("fire_plasma.aiff"); sounds[EXPLOSION_WAV] = sfxLoad("explosion.aiff"); sounds[FIRE_TORP_OTHER_WAV] = sfxLoad("fire_torp_other.aiff"); sounds[PHASER_OTHER_WAV] = sfxLoad("phaser_other.aiff"); sounds[FIRE_PLASMA_OTHER_WAV] = sfxLoad("fire_plasma_other.aiff"); sounds[EXPLOSION_OTHER_WAV] = sfxLoad("explosion_other.aiff"); sounds[PLASMA_HIT_WAV] = sfxLoad("plasma_hit.aiff"); sounds[TORP_HIT_WAV] = sfxLoad("torp_hit.aiff"); if (err > 1) { /* load optional sounds only if we got two audio ports */ sounds[CLOAK_WAV] = sfxLoad("cloak.aiff"); sounds[UNCLOAK_WAV] = sfxLoad("cloak.aiff"); sounds[SHIELD_DOWN_WAV] = sfxLoad("shield_down.aiff"); sounds[SHIELD_UP_WAV] = sfxLoad("shield_up.aiff"); sounds[REDALERT_WAV] = sfxLoad("klaxon.aiff"); sounds[INTRO_WAV] = sfxLoad("paradise.aiff"); sounds[MESSAGE_WAV] = sfxLoad("message.aiff"); /* load sound loops only if we got three audio ports */ if (err > 2) { sounds[THERMAL_WAV] = sfxLoad("thermal_warn.aiff"); sounds[ENTER_SHIP_WAV] = sfxLoad("enter_ship.aiff"); sounds[SELF_DESTRUCT_WAV] = sfxLoad("self_destruct.aiff"); if ((sounds[ENGINE_WAV] = sfxLoad("bridge.aiff")) != NULL) { sfxLoop(sounds[ENGINE_WAV]); sfxPitchBend(sounds[ENGINE_WAV], 0.0f, 1.0f, 1.0f, 2.0f, 1.1f, 20); } } } sfxPlay(sounds[INTRO_WAV]); } #elif defined(HAVE_SDL) #ifdef DEBUG printf("Init_Sound using SDL\n"); #endif /* Initialize the SDL library */ if (SDL_Init(SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); } atexit(SDL_Quit); /* Open the audio device at 8000 Hz 8 bit Microsoft PCM */ if (Mix_OpenAudio(8000, AUDIO_U8, 1, 512) < 0) { fprintf(stderr,"Mix_OpenAudio: %s\n", Mix_GetError()); sound_init = 0; } Mix_AllocateChannels(16); if (getdefault("soundvol") != NULL) { int vol = atoi(getdefault("soundvol")); Mix_Volume(-1, vol); } /* If we successfully loaded the wav files, so shut-off sound_init and play the introduction */ if (loadSounds()) { if (sounds[INTRO_WAV]) if (Mix_PlayChannel(-1, sounds[INTRO_WAV], 0) < 0) { fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); } } #else if (InitSound() == -1) { sound_toggle = 0; sound_init = 0; } else { sound_init = 1; sound_toggle = 1; } strcpy(sound_prefix, sounddir); strcat(sound_prefix, "/"); if (sound_toggle) { strcpy(buf, sounddir); strcat(buf, "/nt_intro"); StartSound(buf); } #endif } #if defined(HAVE_SDL) || defined(sgi) static int sound2wave[NUM_SOUNDS+1] = { /* NO_SOUND */ -1, /* FIRE_TORP_SOUND */ FIRE_TORP_WAV, /* PHASER_SOUND */ PHASER_WAV, /* FIRE_PLASMA_SOUND */ FIRE_PLASMA_WAV, /* EXPLOSION_SOUND */ EXPLOSION_WAV, /* SBEXPLOSION_SOUND */ SBEXPLOSION_WAV, /* CLOAK_SOUND */ CLOAK_WAV, /* UNCLOAK_SOUND */ UNCLOAK_WAV, /* SHIELD_DOWN_SOUND */ SHIELD_DOWN_WAV, /* SHIELD_UP_SOUND */ SHIELD_UP_WAV, /* TORP_HIT_SOUND */ TORP_HIT_WAV, /* REDALERT_SOUND */ REDALERT_WAV, /* BUZZER_SOUND */ BUZZER_WAV, #if defined(sgi) /* ENGINE_SOUND */ ENGINE_WAV, #else /* text in soundrefresh() says engine sound is not supported * so we'll disable it although there is an ENGINE_WAV */ /* ENGINE_SOUND */ -1, #endif /* THERMAL_SOUND */ THERMAL_WAV, /* ENTER_SHIP_SOUND */ ENTER_SHIP_WAV, /* SELF_DESTRUCT_SOUND */ SELF_DESTRUCT_WAV, /* PLASMA_HIT_SOUND */ PLASMA_HIT_WAV, /* MESSAGE_SOUND */ MESSAGE_WAV, /* MESSAGE1_SOUND */ MESSAGE_WAV, /* MESSAGE2_SOUND */ MESSAGE_WAV, /* MESSAGE3_SOUND */ MESSAGE_WAV, /* MESSAGE4_SOUND */ MESSAGE_WAV, /* MESSAGE5_SOUND */ MESSAGE_WAV, /* MESSAGE6_SOUND */ MESSAGE_WAV, /* MESSAGE7_SOUND */ MESSAGE_WAV, /* MESSAGE8_SOUND */ MESSAGE_WAV, /* MESSAGE9_SOUND */ MESSAGE_WAV, /* OTHER_FIRE_TORP_SOUND */ FIRE_TORP_OTHER_WAV, /* OTHER_PHASER_SOUND */ PHASER_OTHER_WAV, /* OTHER_FIRE_PLASMA_SOUND */ FIRE_PLASMA_OTHER_WAV, /* OTHER_EXPLOSION_SOUND */ EXPLOSION_OTHER_WAV, /* OTHER_SBEXPLOSION_SOUND */ SBEXPLOSION_OTHER_WAV }; #endif #if defined(HAVE_SDL) || defined(sgi) static int get_waveform(int type) { int waveform; if (type <= 0 || type > NUM_SOUNDS) { /* check sound index */ #ifdef DEBUG (void) fprintf(stderr, "panic: non-existent sound number: %i\n", type); #endif return -1; } if ((waveform = sound2wave[type]) >= NUM_WAVES) { /* check waveform index */ #ifdef DEBUG (void) fprintf(stderr, "panic: non-existent waveform number: %i\n", waveform); #endif return -1; } return waveform; } #endif void Play_Sound(int type) { #if defined(HAVE_SDL) || defined(sgi) int waveform; if (!sound_init || (waveform=get_waveform(type)) < 0) return; #if defined(sgi) if (type > OTHER_SOUND_OFFSET && !soundOther) return; sfxPlay(sounds[waveform]); #else if (sounds[waveform]) if (Mix_PlayChannel(-1, sounds[waveform], 0) < 0) { (void) fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); } #endif #else char buf[PATH_MAX]; /* Don't play other ship's sounds if turned off */ if (type > OTHER_SOUND_OFFSET && !soundOther) return; if (sound_toggle && sounds[type].flag && ((sounds[type].priority >= sounds[current_sound].priority) || !SoundPlaying())) { STRNCPY(buf, sound_prefix, PATH_MAX); strcat(buf, sounds[type].name); StartSound(buf); current_sound = type; } if (!(sound_toggle)) current_sound = NO_SOUND; #endif } #if !defined(sgi) /* avoid calling null functions at all */ void Abort_Sound(int type) { #if !defined(HAVE_SDL) if ((current_sound != NO_SOUND) && (type == current_sound)) StopSound(); #endif } #endif #if defined(sgi) /* * Play a pitch-bended engine sound loop while player is alive. */ void Engine_Sound(int speed, int maxspeed) { static int engine_on = 0; static float opitch = 0.0f; float pitch; if (!sound_init) return; if ((speed < 0) && (maxspeed < 0)) { /* stop sound */ sfxDisable(sounds[ENGINE_WAV]); engine_on = 0; opitch = 0.0f; return; } if (speed == 0) pitch = 0.0f; else pitch = 0.25f * (float)speed * (1.0f / (float)maxspeed); if (!engine_on || opitch != pitch) { sfxEnable(sounds[ENGINE_WAV]); sfxPlayPitch(sounds[ENGINE_WAV], pitch); engine_on = 1; opitch = pitch; } return; } #endif /* Sound options window stuff */ #define SOUND_TOGGLE 0 #define SOUND_OTHER MESSAGE_SOUND + 1 #define SOUND_INIT MESSAGE_SOUND + 2 #define SOUND_DONE MESSAGE_SOUND + 3 #if !defined(HAVE_SDL) static void soundrefresh(int i); #endif int sound_window_height(void) { #if defined(HAVE_SDL) return 1; #else return MESSAGE_SOUND + 4; #endif } void soundwindow(void) { #if defined(HAVE_SDL) char *buf="All or nothing with SDL sound. Sorry"; W_WriteText(soundWin, 0, 0, textColor, buf, strlen(buf), 0); #else int i; for (i=0; i <= SOUND_DONE; i++) soundrefresh(i); #endif /* Map window */ W_MapWindow(soundWin); } #if !defined(HAVE_SDL) static void soundrefresh(int i) { char buf[200], *flag; if (i == SOUND_TOGGLE) { (void) snprintf(buf, sizeof buf, "Sound is turned %s", (sound_toggle == 1) ? "ON" : "OFF"); } else if (i < SOUND_OTHER) { #if defined(sgi) flag = (sfxIsEnabled(sounds[i]) ? "ON" : "OFF"); #else flag = ((sounds[i].flag == 1) ? "ON" : "OFF"); #endif switch (i) { case FIRE_TORP_SOUND: (void) snprintf(buf, sizeof buf, "Fire torp sound is %s", flag); break; case PHASER_SOUND: (void) snprintf(buf, sizeof buf, "Phaser sound is %s", flag); break; case FIRE_PLASMA_SOUND: (void) snprintf(buf, sizeof buf, "Fire plasma sound is %s", flag); break; case EXPLOSION_SOUND: (void) snprintf(buf, sizeof buf, "Explosion sound is %s", flag); break; case CLOAK_SOUND: (void) snprintf(buf, sizeof buf, "Cloak sound is %s", flag); break; case UNCLOAK_SOUND: (void) snprintf(buf, sizeof buf, "Uncloak sound is %s", flag); break; case SHIELD_DOWN_SOUND: (void) snprintf(buf, sizeof buf, "Shield down sound is %s", flag); break; case SHIELD_UP_SOUND: (void) snprintf(buf, sizeof buf, "Shield up sound is %s", flag); break; case TORP_HIT_SOUND: (void) snprintf(buf, sizeof buf, "Torp hit sound is %s", flag); break; case REDALERT_SOUND: (void) snprintf(buf, sizeof buf, "Red alert sound is %s", flag); break; case ENGINE_SOUND: #if defined(sgi) (void) snprintf(buf, sizeof buf, "Engine sound is %s", flag); #else (void) snprintf(buf, sizeof buf, "Engine sound is not supported"); #endif break; case ENTER_SHIP_SOUND: (void) snprintf(buf, sizeof buf, "Enter ship sound is %s", flag); break; case SELF_DESTRUCT_SOUND: (void) snprintf(buf, sizeof buf, "Self destruct sound is %s", flag); break; case PLASMA_HIT_SOUND: (void) snprintf(buf, sizeof buf, "Plasma hit sound is %s", flag); break; case MESSAGE_SOUND: (void) snprintf(buf, sizeof buf, "Message sound is %s", flag); break; } } else if (i == SOUND_OTHER) (void) snprintf(buf, sizeof buf, "Other ship's sound is %s", soundOther == 1 ? "ON" : "OFF"); #if defined(sgi) else if (i == SOUND_INIT) (void) snprintf(buf, sizeof buf, sound_init ? "Reset audio hardware" : "Initialize audio hardware"); #else else if (i == SOUND_INIT) (void) snprintf(buf, sizeof buf, sound_init ? "Restart external sound player" : "Initialize external sound player"); #endif else if (i == SOUND_DONE) (void) snprintf(buf, sizeof buf, "Done"); else (void) fprintf(stderr, "Uh oh, bogus refresh number in soundrefresh\n"); W_WriteText(soundWin, 0, i, textColor, buf, strlen(buf), 0); } #endif /* HAVE_SDL */ void soundaction(W_Event * data) { #if defined(sgi) printf("sorry, not yet implemented\n"); #elif !defined(HAVE_SDL) int i, j; i = data->y; if (i == SOUND_TOGGLE) { if (sound_init) sound_toggle = (sound_toggle == 1) ? 0 : 1; soundrefresh(SOUND_TOGGLE); /* text in soundrefresh() says engine sound is not supported if (!sound_toggle) { Abort_Sound(ENGINE_SOUND); } else { Play_Sound(ENGINE_SOUND); } */ } else if (i < SOUND_OTHER) { sounds[i].flag = (sounds[i].flag == 1) ? 0 : 1; if (i + OTHER_SOUND_OFFSET <= NUM_SOUNDS) sounds[i + OTHER_SOUND_OFFSET].flag = sounds[i].flag; soundrefresh(i); Play_Sound(i); if (i == MESSAGE_SOUND) { for (j = MESSAGE1_SOUND; j <= MESSAGE9_SOUND; j++) sounds[j].flag = sounds[MESSAGE_SOUND].flag; } /* case ENGINE: st_engine = (st_engine == 1) ? 0 : 0; soundrefresh * * * (ENGINE); if (st_engine && sound_toggle) { Play_Sound * * * (ENGINE_SOUND); } else { Abort_Sound (ENGINE_SOUND); } break; */ } else if (i == SOUND_OTHER) { soundOther = !soundOther; soundrefresh(SOUND_OTHER); } else if (i == SOUND_INIT) { Exit_Sound(); sound_init = 1; Init_Sound(); soundrefresh(SOUND_INIT); soundrefresh(SOUND_TOGGLE); } else { sounddone(); } #endif /* HAVE_SDL */ } void sounddone(void) { W_UnmapWindow(soundWin); return; } #endif /* SOUND */ netrek-client-cow-3.3.2/getship.c0000664000175000017500000001325713657750470015670 0ustar jamesjames/* getship.c for client of socket protocol. * * This file has been mangled so it only sets the ship characteristics needed. */ #include "config.h" #include "copyright.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "getship.h" /* fill in ship characteristics */ void getshipdefaults() { shipvals[SCOUT].s_phaserdamage = 75; /* scout: was 75 */ shipvals[SCOUT].s_torpspeed = 16; /* scout: was 16 */ shipvals[SCOUT].s_maxspeed = 12; /* scout: */ shipvals[SCOUT].s_maxfuel = 5000; /* scout: */ shipvals[SCOUT].s_maxarmies = 2; /* scout: */ shipvals[SCOUT].s_maxshield = 75; /* scout: was 75 */ shipvals[SCOUT].s_maxdamage = 75; /* scout: */ shipvals[SCOUT].s_maxwpntemp = 1000; /* scout: */ shipvals[SCOUT].s_maxegntemp = 1000; /* scout: */ shipvals[SCOUT].s_type = SCOUT; /* scout: */ shipvals[SCOUT].s_width = 20; /* scout: */ shipvals[SCOUT].s_height = 20; /* scout: */ shipvals[DESTROYER].s_phaserdamage = 85; /* destroyer: */ shipvals[DESTROYER].s_torpspeed = 14; /* destroyer: */ shipvals[DESTROYER].s_maxspeed = 10; /* destroyer: */ shipvals[DESTROYER].s_maxfuel = 7000; /* destroyer: */ shipvals[DESTROYER].s_maxarmies = 5; /* destroyer: */ shipvals[DESTROYER].s_maxshield = 85; /* destroyer: */ shipvals[DESTROYER].s_maxdamage = 85; /* destroyer: */ shipvals[DESTROYER].s_maxwpntemp = 1000; /* destroyer: */ shipvals[DESTROYER].s_maxegntemp = 1000; /* destroyer: */ shipvals[DESTROYER].s_width = 20; /* destroyer: */ shipvals[DESTROYER].s_height = 20; /* destroyer: */ shipvals[DESTROYER].s_type = DESTROYER; /* destroyer: */ shipvals[BATTLESHIP].s_phaserdamage = 105; /* battleship: */ shipvals[BATTLESHIP].s_torpspeed = 12; /* battleship: */ shipvals[BATTLESHIP].s_maxspeed = 8; /* battleship: */ shipvals[BATTLESHIP].s_maxfuel = 14000; /* battleship: */ shipvals[BATTLESHIP].s_maxarmies = 6; /* battleship: */ shipvals[BATTLESHIP].s_maxshield = 130; /* battleship: */ shipvals[BATTLESHIP].s_maxdamage = 130; /* battleship: */ shipvals[BATTLESHIP].s_maxwpntemp = 1000; /* battleship: */ shipvals[BATTLESHIP].s_maxegntemp = 1000; /* battleship: */ shipvals[BATTLESHIP].s_width = 20; /* battleship: */ shipvals[BATTLESHIP].s_height = 20; /* battleship: */ shipvals[BATTLESHIP].s_type = BATTLESHIP; /* battleship: */ shipvals[ASSAULT].s_phaserdamage = 80; /* assault */ shipvals[ASSAULT].s_torpspeed = 16; /* assault */ shipvals[ASSAULT].s_maxspeed = 8; /* assault */ shipvals[ASSAULT].s_maxfuel = 6000; /* assault */ shipvals[ASSAULT].s_maxarmies = 20; /* assault */ shipvals[ASSAULT].s_maxshield = 80; /* assault */ shipvals[ASSAULT].s_maxdamage = 200; /* assault */ shipvals[ASSAULT].s_maxwpntemp = 1000; /* assault */ shipvals[ASSAULT].s_maxegntemp = 1200; /* assault */ shipvals[ASSAULT].s_width = 20; /* assault */ shipvals[ASSAULT].s_height = 20; /* assault */ shipvals[ASSAULT].s_type = ASSAULT; /* assault */ shipvals[STARBASE].s_phaserdamage = 120; /* starbase */ shipvals[STARBASE].s_torpspeed = 14; /* starbase */ shipvals[STARBASE].s_maxfuel = 60000; /* starbase */ shipvals[STARBASE].s_maxarmies = 25; /* starbase */ shipvals[STARBASE].s_maxshield = 500; /* starbase */ shipvals[STARBASE].s_maxdamage = 600; /* starbase */ shipvals[STARBASE].s_maxspeed = 2; /* starbase */ shipvals[STARBASE].s_maxwpntemp = 1300; /* starbase */ shipvals[STARBASE].s_maxegntemp = 1000; /* starbase */ shipvals[STARBASE].s_width = 20; /* starbase */ shipvals[STARBASE].s_height = 20; /* starbase */ shipvals[STARBASE].s_type = STARBASE; /* starbase */ shipvals[ATT].s_phaserdamage = 10000; /* att: */ shipvals[ATT].s_torpspeed = 30; /* att: */ shipvals[ATT].s_maxspeed = 60; /* att: */ shipvals[ATT].s_maxfuel = 12000; /* att: */ shipvals[ATT].s_maxarmies = 1000; /* att: */ shipvals[ATT].s_maxshield = 30000; /* att: */ shipvals[ATT].s_maxdamage = 30000; /* att: */ shipvals[ATT].s_maxwpntemp = 10000; /* att: */ shipvals[ATT].s_maxegntemp = 10000; /* att: */ shipvals[ATT].s_width = 28; /* att: */ shipvals[ATT].s_height = 28; /* att: */ shipvals[ATT].s_type = ATT; /* att: */ shipvals[SGALAXY].s_phaserdamage = 10000; /* galaxy: */ shipvals[SGALAXY].s_torpspeed = 30; /* galaxy: */ shipvals[SGALAXY].s_maxspeed = 60; /* galaxy: */ shipvals[SGALAXY].s_maxfuel = 12000; /* galaxy: */ shipvals[SGALAXY].s_maxarmies = 1000; /* galaxy: */ shipvals[SGALAXY].s_maxshield = 30000; /* galaxy: */ shipvals[SGALAXY].s_maxdamage = 30000; /* galaxy: */ shipvals[SGALAXY].s_maxwpntemp = 10000; /* galaxy: */ shipvals[SGALAXY].s_maxegntemp = 10000; /* galaxy: */ shipvals[SGALAXY].s_width = 20; /* galaxy: */ shipvals[SGALAXY].s_height = 20; /* galaxy: */ shipvals[SGALAXY].s_type = SGALAXY; /* galaxy: */ shipvals[CRUISER].s_phaserdamage = 100; /* cruiser: */ shipvals[CRUISER].s_torpspeed = 12; /* cruiser: */ shipvals[CRUISER].s_maxspeed = 9; /* cruiser: */ shipvals[CRUISER].s_maxfuel = 10000; /* cruiser: */ shipvals[CRUISER].s_maxarmies = 10; /* cruiser: */ shipvals[CRUISER].s_maxshield = 100; /* cruiser: */ shipvals[CRUISER].s_maxdamage = 100; /* cruiser: */ shipvals[CRUISER].s_maxwpntemp = 1000; /* cruiser: */ shipvals[CRUISER].s_maxegntemp = 1000; /* cruiser: */ shipvals[CRUISER].s_width = 20; /* cruiser: */ shipvals[CRUISER].s_height = 20; /* cruiser: */ shipvals[CRUISER].s_type = CRUISER; /* cruiser: */ } void getship(struct ship *shipp, int s_type) { memcpy((char *) shipp, (char *) &(shipvals[s_type]), sizeof(struct ship)); } netrek-client-cow-3.3.2/cow.png0000664000175000017500000000253013657750470015347 0ustar jamesjames‰PNG  IHDR00Wù‡gAMA± üa pHYs  ÒÝ~üúIDATxí™GoIÇMÎaÉLN" p–hA¼GNH{õ¾Ã~Ë ‰Ëú€8ÀÅF ‘£ÈÈ"šœ¡öý«Ý»3#33ÕÝ–×Z?©ÔÓݯ«Þ«—þ¯z¨kw Êcùyóü,nþ|=ºüŒ×¯Ãµk4>Îoå9«{Û§:¶ò\\´u+´+óÓöï‡gϨ7º–zõ‚aÃ`Ü8?ÜŽ¸ pΕ{÷âêêpf©¿òÐ µ†…½níZX°&L¨,Òòå0`ܾMýÁƒ¸'ÈÅ+¯\Â!am¸]»p_¾à¾}ÃýøQ~÷eïßq_¿âîßÇmߎ ^¸äƒ` Ìšﺮ3gÂܹзoõbÈõ÷[³>~Äݺå-òûË—üYýL1g°ù¶l‰ؼ/†©Sã8]جÆÃ‡ðä 87ÂÝ)Ø ZÑ’%°bE¨Øÿò÷ë[PV¼|† I7—´{S]m¿noà ¶îéý{x÷ú÷K£‰Å¬&ðù3(}úVRQ°çÎÅëXábÎ0XÀêÕák¿} MMpú4¡µ5|ŽT_(ý F´Ùp{öT®¾á#Ø54àFŒ ¦wïT¢ø‚?•©evƒ r£Ö±cù5²r(wÆ‘K•#¯«Wáüy8rÄ×€¹SZ ®ÄÉB´¦Æß¹É“c`·iÌž]^”C‡À@œ/^wîÀ£GáÕ·p…à,ÔÇ¢F;-<# cÍI4e Ñ¥Kðô©Ç6(> I;,«}ø }ò$œ:EdØ'’Kj®´lU«üRNWõ‡{5[¶,¶ÀúõÐÎç™°â;s&v¹9ÿøô\ãñãpkg¡ÂîK¸È¥±$ºwZs§¦I“ŠÐÎ?ÖÌ´´µ±rÔ(0+¸;aÛ¶8nîÞçòP°rÑÈ‘ ALpŸÇ5&N¤ùÅ‹Ø ePàË ÖJ®Ôó$ë(›g5¹fÊà}i–Ëÿ›”z ¢ÕP@ŠJóºÒ¬vX#mÅý™ê¹(°t©ŸÞ©?Pun¿ÿgMaý Àj†;{ZZ@JåA¹(¥èXEÂË· iÐ X·ÔÐ+f<€¼ŽU2Å€\fÆ ßϺE‹`út?.V@.ee'YHéVÃ,’™2Y q Y ¾’D²”QÖªtVi.½Ï¤€RªÒ6ÒPNN Pðª"[ÕfÚ´ÿX HPAbUXõòw¹HBzvìXü>q¹Z”) С­Î=÷íý.$Ub)°{w|µ‚–er!ug:×Qõ5PçÑå«WqÕ-”Pn%K³ÑÍ›8!Q¹™¬ jž…2) ×÷¹*«‰Öf^I1`p9'ðP¬x® HPueF¿´_‹Wë„»ÜÒh'ÈVÕ”= TµMÈÔcNÜܪ¦îöÈ5VµeÆ”å(±t`t®)ÒYÐðápåJ锕ïUðì?æèèQÿ÷¬?3Ê¡–•@èÑÆÖº… qú]öƒ^êoY566œ5CNרþþ›€ôº$/íIEND®B`‚netrek-client-cow-3.3.2/README.1.020000664000175000017500000003134513657750470015316 0ustar jamesjamesThis file contains the most recent changes to the COW client, with example .xtrkrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience. ***************************************************************** 1) Change Log ***************************************************************** 1.02 pl2 Feb. 20, 1995 - One year expire time [siegl] - put back sortPlayers option for unsorted playerlist [Soutter] - send full update request when joining [siegl] - Fixed some bugs with galactic map updates [Soutter] - Fixed some bugs with color map allocations [siegl] - Added sample xtrekrc file to the docs [siegl] - audio.c: replaced SIGCLD with SIGCHLD [ahabig] - config.h.in: include stdio.h for suns [gosselin] 1.02 pl1 Feb. 9, 1995 - phaserShrink option to remove the bottom of your phaser [Soutter] - change TTS Y-location [Joseph] - Ignore Caps_Lock on key events [sheldon (taken from SWINE)] - Race Colors [Kellen] - removed message handler for Dashboard [Siegl] - fixed multi-line macro bug [Soutter] - metserver window rewritten [Soutter,Kellen] - playerlist window rewritten [Soutter] - The player list is now always sorted and so the "sortPlist" option has been removed [Soutter] - The key "/" now changes the playerlist style rather than selecting between sorted and unsorted player lists [Soutter] - Reimplemented the option "showPlanetOwner". [Soutter] - New layout for the option menus [Soutter]. - Removed the options "mapmode" and "showShields". Effectively, these options are now treated as always being true [Soutter] - Added range checking on the options "showlocal", "showgalactic", and "showLock" [Soutter] - Redraw the galactic map when you change teams [Soutter]. - All handlers (both for X events and for packets) now return a void rather than an integers. This fixes some compiler errors [Soutter]. ***************************************************************** 2) Cut and past changes to make COW work like it used to. ***************************************************************** sortPlayers: on # # The default for "sortPlayers" is a bit strange and so we recommend # that you set the "sortPlayers" option in your .xtrekrc. The following # will impose the old default. # ignoreCaps: off # # By default, the caps lock key is now ignored. If you would like # the old behaviour then set "ignoreCaps" to "off". # ***************************************************************** 3) Cut and past changes to turn on *all* new features. ***************************************************************** phaserShrink: 10 # # possible values: 0-16 # # Don't draw the first /16 th of your phaser. This makes # it easier to see incoming torps. # # Most people who tested this feature really like it (even thought it # sounds weird). # playerListStyle: 3 # # possible values: 0-4 # # This is a new way of choosing which playerlist you want, although # newPlist still works. Options are: # # (0) Custom player list as defined by the # playerlist variable above, # (1) Old player list, # (2) Traditional COW player list, # (3) Kill watch player list, # (4) BRMH Player list. # # If "playerListStyle" is set, newPlist is ignored. # Use the options menu (shift-O) to try the different styles. # # The "Kill watch player list" is a new built in style. It makes scanning # kills easier and it shows the kind of thing klew players were already # doing with the "playerlist" option. # partitionPlist: on # # Add blank lines to a sorted player list to separate the # different teams. # metaCache: .metaCache # # Enable caching of meta-server information into the file # "$HOME/.metaCache". # # Use "cow -k" to use the cached information rather than waiting # to contact the metaServer. # # For more details, see the "MetaServer Options" manual in # section (4). # metaStatusLevel: 4 # # Select the level of detail to be displayed on the meta-server window. # # The status levels are coded as follows. # # 0 Servers which have players but not a wait queue. # 1 + Servers with a wait queue. # 2 + Servers with nobody playing. (see NOTE1). # 3 + Servers which have Timed Out for the MetaServer (see NOTE2). # 4 + Servers which the MetaServer has not been able to connect to. # ignoreCaps: on # # By default, the caps lock key is now ignored and so this is not # strictly necessary. # showPlanetOwner: on # # showPlanetOwner is an old feature that has been reimplemented. # When on, the appropriate race letter is drawn next to each # planet on the galactic. # tts_time: 25 #tts_max_len: #tts_font: #tts_color: ivory tts_pos: 20 # # Some of these are new TTS options. This set of parameters moves any TTS # messages to near the top of the screen. tts_pos is # of pixels down from the # top to print the message, the other parameters allow control of how the text # looks. color.Rom: tomato color.Kli: green2 color.Ori: light steel blue color.Fed: goldenrod color.Ind: aliceblue # # You can use these resources to change the colors of the race's bitmaps, # without messing up the border colors and things from the old style # "color.red" resources. **************************************************************** 4) New manual sections **************************************************************** MetaServer Options ================== The MetaServer and the MetaServerCache are provided to help you find a netrek game to join. Both services provide a list of the popular netrek servers. The MetaServer is neat because provides information on the number of players at each site. The MetaServerCache is neat because it is much faster if you can guess where a game will be. To access the MetaServer, use the command line switch "-m". For example "cow -m". To access the MetaServerCache, use the "-k" switch instead. 1) Where to find the MetaServer: You can use the options "metaport" and "metaserver" to point COW to a new MetaServer. The defaults for these options are: metaport: 3521 metaserver: metaserver.ecst.csuchico.edu 2) How to create a list of known servers for the MetaServerCache: Before you can use the MetaServerCache, you must give COW a file in which to cache the information from the MetaServer. Use the .xtrekrc option "metaCache" to specify this file. The files path will be relative to your home directory unless you start the file name with a slash (/). For example, to set the cache file to "~/.metaCache" use: metaCache: .metaCache Unlike the MetaServer, the MetaServerCache will not show the number of people playing at a server. If a server is contactable, it will be shown as "Active". 3) How much information will be shown: You can now control the amount of information that the MetaServer displays for you by setting the "metaStatusLevel" flag. The default is: metaStatusLevel: 3 The status levels are coded as follows. 0 Servers which have players but not a wait queue. 1 + Servers with a wait queue. 2 + Servers with nobody playing. (see NOTE1). 3 + Servers which have Timed Out for the MetaServer (see NOTE2). 4 + Servers which the MetaServer has not been able to connect to. NOTE1: When using the MetaServerCache, "metaStatusLevel" values of less than 3 are treated as the value 3. This minimum is enforced because the cache does not attempt to show the number of people playing at a site. NOTE2: If you are a long way from the MetaServer, you are advised to ignore TimeOut errors. For example, the MetaServer in America may have difficulty contacting to a server in Holland while the link from England to Holland is very good. 4) The Fallback If you attempt to contact the MetaServer, and the connection times out, COW will try to show the MetaServerCache instead. Similarly, if you attempt to use the MetaServerCache, and your "metaCache" file does not exist, COW will attempt to call theMetaServer. Player List Options =================== 1) Configurable Player List: I've added a new .xtrekrc option called "playerlist" what it allows you to do is specify which columns of the player list you want to show and in what order. The following is a table of the available columns. Spc Let Name Header --- --- -------------------- ------------------- 3 'n' Ship Number " No" 3 'T' Ship Type " Ty" 11 'R' Rank " Rank " 17 'N' Name " Name " 6 'K' Kills " Kills" 17 'l' Login Name " Login " 6 'O' Offense " Offse" 6 'W' Wins " Wins" 6 'D' Defense " Defse" 6 'L' Losses " Loss" 6 'S' Total Rating (stats) " Stats" 6 'r' Ratio " Ratio" 8 'd' Damage Inflicted(DI) " DI" 1 ' ' White Space " " PLIST1 6 'B' Bombing " Bmbng" 6 'b' Armies Bombed " Bmbed" 6 'P' Planets " Plnts" 6 'p' Planets Taken " Plnts" 17 'M' Display/Host Machine " Host Machine " 7 'H' Hours Played " Hours " 6 'k' Max Kills " Max K" 6 'V' Kills per Hour " KPH" 6 'v' Deaths per Hour " DPH" PLIST2 9 'w' War staus " War Stat" 3 's' Speed " Sp" So for example if you just wanted to see names and rank you'd add this line to your .xtrekrc: playerlist: NR In order for this mod to be in effect you must compile with PLIST defined, otherwise you will get either of the two currently available defaults. The things shown after PLIST1 are only available if you have PLIST1 defined, the same goes for the things after PLIST2, but you must have PLIST defined or neither of these will do anything. dave gosselin@ll.mit.edu NOTE FROM SOURCE KEEPER: PLIST2 is not active in BRM currently. Some players feel that placing speed on the playerlist gives a strategic advantage. NOTE ON SB STATS : On servers which support the SBHOURS .feature, you will see slightly different things when you info a SB, or show the SB player on the playerlist. The usual offense and defense lines are replaced with SB kills/hour and deaths/hour. The kills, deaths, hours and ratio entries are all the player's SB stats as long as he is in the SB, and his normal stats otherwise. 2) Predefined "playerlist" styles: For your viewing pleasure we have predefined some playerlist layouts that you might like to try. These predefined styles can be selected using the "playerListStyle" option in your .xtrekrc or by using the options menu (shift-O). The "playerListStyle" options are: 0: Custom style = playerlist 1: Old style = "nTRNKWLr O D d " 2: COW style = "nTR N K lrSd" 3: Kill watch style = "nTK RNlr Sd" 4):BRMH style = "nTR N K l M" For backward compatability, the option "newPlist" will still select between the old style playerlist (off) and the COW style playerlist (on) if the "playerListStyle" option does not appear in your .xtrekrc. 3) The "partitionPlist" option: Lets face it, the main role of the player list is so that you can keep track of who has kills. To make life easier, the player list is sorted so that enemy and friendly teams are always in the same place in the list. However, in mono it is not immediatly obvious where one team starts and another team ends. If the "partitionPlist" option is "on", white space will be added to the player list to separate your teams from the other teams and the players entering the game. In color, this option is not usually required because the teams are distinct anyway. Race Colors README ------------------ You can now change the color in which a given race is drawn *without* having to also change other objects currently drawn in the same color. The race color defaults to the color in which the race is normally drawn (ie, Roms are drawn in color.red, which itself defaults to red). This option defaults transparently to off and uses up NO CPU time in normal play. (so there :-b) resource default resource default color ---------- ------------------ ------------- color.Ind: color.light grey light grey color.Fed: color.yellow yellow color.Rom: color.red red color.Kli: color.green green color.Ori: color.cyan cyan ############################################################### # Example .xtrekrc lines color.Rom: tomato color.Kli: green2 color.Ori: light steel blue netrek-client-cow-3.3.2/feature.h0000664000175000017500000000034413657750470015656 0ustar jamesjames/* feature.c */ void checkFeature(struct feature_cpacket *packet); void sendFeature(char *name, char feature_type, int value, char arg1, char arg2); void reportFeatures(void); void handleFeature(struct feature_cpacket *packet); netrek-client-cow-3.3.2/wtext.h0000664000175000017500000000230013657750470015370 0ustar jamesjames /* Here are all warnings that are send with SP_S_WARNING */ /* HW 93 */ /* ab handleTractorReq socket.c */ #define TEXTE 0 #define PHASER_HIT_TEXT 1 #define BOMB_INEFFECTIVE 2 #define BOMB_TEXT 3 #define BEAMUP_TEXT 4 #define BEAMUP2_TEXT 5 #define BEAMUPSTARBASE_TEXT 6 #define BEAMDOWNSTARBASE_TEXT 7 #define BEAMDOWNPLANET_TEXT 8 #define SBREPORT 9 #define ONEARG_TEXT 10 #define BEAM_D_PLANET_TEXT 11 #define ARGUMENTS 12 #define BEAM_U_TEXT 13 #define LOCKPLANET_TEXT 14 #define LOCKPLAYER_TEXT 15 #define SBRANK_TEXT 16 #define SBDOCKREFUSE_TEXT 17 #define SBDOCKDENIED_TEXT 18 #define SBLOCKSTRANGER 19 #define SBLOCKMYTEAM 20 /* Daemon messages */ #define DMKILL 21 #define KILLARGS 22 #define DMKILLP 23 #define DMBOMB 24 #define DMDEST 25 #define DMTAKE 26 #define DGHOSTKILL 27 /* INL messages */ #define INLDMKILLP 28 #define INLDMKILL 29 /* Because of shiptypes */ #define INLDRESUME 30 #define INLDTEXTE 31 /* Variable warning stuff */ #define STEXTE 32 /* static text that the server needs to send to the client first */ #define SHORT_WARNING 33 /* like CP_S_MESSAGE */ #define STEXTE_STRING 34 #define KILLARGS2 35 #define DINVALID 255 netrek-client-cow-3.3.2/README0000664000175000017500000000075713657750470014742 0ustar jamesjamesClient Of Win Source Package INSTALL Installation guide, standard GNU project (See also section 8.0 of COW.DOC) COW.DOC Documentation, text format CHANGES Change log, latest first, abbreviated format ChangeLog Change log, latest first, detailed format README.* Version specific changes and discussion README.CVS Source repository access information README.html Latest version specific detailed change log TODO List of things to be done by developers Feedback to cow@netrek.org netrek-client-cow-3.3.2/x11window.h0000664000175000017500000001212113657750470016060 0ustar jamesjamesstruct window { Window window; int type; char *data; int mapped; int width, height; char *name; W_Callback handle_keydown; W_Callback handle_keyup; W_Callback handle_button; W_Callback handle_expose; #ifdef SHORT_PACKETS int insensitive; #endif Cursor cursor; }; struct scrollingWindow { int lines; int updated; int topline; struct stringList *head; struct stringList *tail; struct stringList *index; }; /* x11window.c */ int _myerror(Display *d, XErrorEvent *e); void pastebuffer(void); void checkFont(XFontStruct *fontinfo, char *fontname); void GetFonts(void); XFontStruct *find_font(char *oldf, char **fonts); void GetColors(void); void W_RenameWindow(W_Window window, char *str); W_Window W_MakeWindow(char *name, int x, int y, int width, int height, W_Window parent, int border, W_Color color); void W_ChangeBorder(W_Window window, int color); void W_MapWindow(W_Window window); void W_UnmapWindow(W_Window window); int W_IsMapped(W_Window window); void W_FillArea(W_Window window, int x, int y, int width, int height, W_Color color); void W_CacheClearArea(W_Window window, int x, int y, int width, int height); void W_FlushClearAreaCache(W_Window window); void W_ClearArea(W_Window window, int x, int y, int width, int height); void W_ClearWindow(W_Window window); int W_EventsPending(void); void W_NextEvent(W_Event *wevent); int W_SpNextEvent(W_Event *wevent); void W_MakeLine(W_Window window, int x0, int y0, int x1, int y1, W_Color color); void W_CacheLine(W_Window window, int x0, int y0, int x1, int y1, int color); void W_FlushLineCaches(W_Window window); void W_MakeTractLine(W_Window window, int x0, int y0, int x1, int y1, W_Color color); void W_MakePhaserLine(W_Window window, int x0, int y0, int x1, int y1, W_Color color); void W_WriteTriangle(W_Window window, int x, int y, int s, int t, W_Color color); void W_WriteText(W_Window window, int x, int y, W_Color color, char *str, int len, W_Font font); void W_MaskText(W_Window window, int x, int y, W_Color color, char *str, int len, W_Font font); W_Icon W_StoreBitmap(int width, int height, char *data, W_Window window); void W_WriteBitmap(int x, int y, W_Icon bit, W_Color color); void W_TileWindow(W_Window window, W_Icon bit); void W_UnTileWindow(W_Window window); W_Window W_MakeTextWindow(char *name, int x, int y, int width, int height, W_Window parent, int border); struct window *newWindow(Window window, int type); struct window *findWindow(Window window); void addToHash(struct window *win); W_Window W_MakeScrollingWindow(char *name, int x, int y, int width, int height, W_Window parent, int border); void W_FlushScrollingWindow(W_Window window); void W_SetSensitive(W_Window w, int v); W_Window W_MakeMenu(char *name, int x, int y, int width, int height, W_Window parent, int border); void redrawMenu(struct window *win); void redrawMenuItem(struct window *win, int n); void W_DefineMapcursor(W_Window window); void W_DefineLocalcursor(W_Window window); void W_DefineFedCursor(W_Window window); void W_DefineRomCursor(W_Window window); void W_DefineKliCursor(W_Window window); void W_DefineOriCursor(W_Window window); void W_DefineTrekCursor(W_Window window); void W_DefineWarningCursor(W_Window window); void W_DefineArrowCursor(W_Window window); void W_DefineTextCursor(W_Window window); void W_DefineCursor(W_Window window, int width, int height, char *bits, char *mask, int xhot, int yhot); int W_LoadBitmap(W_Window window, char *path, Pixmap *pixmap, int *width, int *height, int *x_hot, int *y_hot); void W_Beep(void); int W_WindowWidth(W_Window window); int W_WindowHeight(W_Window window); int W_Socket(void); void W_DestroyWindow(W_Window window); void deleteWindow(struct window *window); void W_SetIconWindow(W_Window main, W_Window icon); void checkParent(char *name, W_Window *parent); int checkMapped(char *name); int checkMappedPref(char *name, int preferred); void W_WarpPointer(W_Window window, int x, int y); void findMouse(int *x, int *y); int findMouseInWin(int *x, int *y, W_Window w); void W_Flush(void); W_Callback W_GetWindowKeyDownHandler(W_Window w); void W_SetWindowKeyDownHandler(W_Window w, W_Callback c); W_Callback W_GetWindowKeyUpHandler(W_Window w); void W_SetWindowKeyUpHandler(W_Window w, W_Callback c); W_Callback W_GetWindowButtonHandler(W_Window w); void W_SetWindowButtonHandler(W_Window w, W_Callback c); W_Callback W_GetWindowExposeHandler(W_Window w); void W_SetWindowExposeHandler(W_Window w, W_Callback c); void W_ResizeWindow(W_Window window, int neww, int newh); void W_ResizeTextWindow(W_Window window, int neww, int newh); int W_Mono(void); int W_EventsQueued(void); int W_EventsQueuedCk(void); int W_ReadEvents(void); void W_OverlayBitmap(int x, int y, W_Icon bit, W_Color color); void W_SetWindowName(W_Window w, char *name); int W_TTSTextHeight(void); int W_TTSTextWidth(char *s, int l); void init_tts(void); void W_EraseTTSText(W_Window window, int max_width, int y, int width); void W_WriteTTSText(W_Window window, int max_width, int y, int width, char *str, int len); void W_Halo(int x, int y, W_Color color); void W_CameraSnap(W_Window window); netrek-client-cow-3.3.2/cow.opt0000664000175000017500000000072313657750470015367 0ustar jamesjames! ! cow.opt - OpenVMS Linker Options File ! cameron@stl.dec.com 16-Jan-1998 ! ! Force the modules containing symbols that duplicate DEC C run time library ! entry points to be resolved first, avoiding use of the RTL. ! cluster=main,,,main,newwin,stats,pingstats,getname,cflags,data,sintab ! ! Find all other modules here ! cow/library ! ! Use the Xlib dynamic library ! sys$library:decw$xlibshr/share ! ! Internet services ! sys$library:ucx$ipc.olb/library netrek-client-cow-3.3.2/stats.c0000664000175000017500000001213713657750470015357 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "stats.h" #include "util.h" #define BX_OFF() ((textWidth + 1) * W_Textwidth + S_IBORDER) #define BY_OFF(line) ((line) * (W_Textheight + S_IBORDER) + S_IBORDER) #define TX_OFF(len) ((textWidth - len) * W_Textwidth + S_IBORDER) #define TY_OFF(line) BY_OFF(line) #define STAT_WIDTH 160 #define STAT_HEIGHT BY_OFF(NUM_SLIDERS) #define STAT_BORDER 2 #define S_IBORDER 5 #define STAT_X 422 #define STAT_Y 13 #define SL_WID \ (STAT_WIDTH - 2 * S_IBORDER - (textWidth + 1) * W_Textwidth) #define SL_HEI (W_Textheight) #define NUM_ELS(a) (sizeof (a) / sizeof (*(a))) #define NUM_SLIDERS NUM_ELS(sliders) typedef struct slider { char *label; int min, max; int low_red, high_red; int label_length; int diff; int *var; int lastVal; } SLIDER; typedef struct record { int *data; int last_value; } RECORD; static SLIDER sliders[] = { {"Shields", 0, 100, 20, 100}, {"Damage", 0, 100, 0, 0}, {"Fuel", 0, 10000, 2000, 10000}, {"Warp", 0, 9, 0, 9}, {"Weapon Temp", 0, 1200, 0, 800}, {"Engine Temp", 0, 1200, 0, 800}, #ifdef ARMY_SLIDER {"Armies", 0, 10, 0, 10}, #endif /* ARMY_SLIDER */ }; static int textWidth = 0; static int initialized = 0; static void box(int filled, int x, int y, int wid, int hei, W_Color color); void initStats(void) { int i; if (initialized) return; initialized = 1; sliders[0].var = &(me->p_shield); sliders[1].var = &(me->p_damage); sliders[2].var = &(me->p_fuel); sliders[3].var = &(me->p_speed); sliders[4].var = &(me->p_wtemp); sliders[5].var = &(me->p_etemp); #ifdef ARMY_SLIDER sliders[6].var = &(me->p_armies); /* note -- changed p_armies * * * to int */ #endif /* ARMY_SLIDER */ for (i = 0; i < NUM_SLIDERS; i++) { sliders[i].label_length = strlen(sliders[i].label); textWidth = MAX(textWidth, sliders[i].label_length); sliders[i].diff = sliders[i].max - sliders[i].min; sliders[i].lastVal = 0; } } void redrawStats(void) { int i; W_ClearWindow(statwin); initStats(); for (i = 0; i < NUM_SLIDERS; i++) { sliders[i].lastVal = 0; } for (i = 0; i < NUM_SLIDERS; i++) { W_WriteText(statwin, TX_OFF(sliders[i].label_length), TY_OFF(i), textColor, sliders[i].label, sliders[i].label_length, W_RegularFont); box(0, BX_OFF() - 1, BY_OFF(i) - 1, SL_WID + 2, SL_HEI + 2, borderColor); sliders[i].lastVal = 0; } } void updateStats(void) { int i, value, diff, old_x, new_x; W_Color color; SLIDER *s; initStats(); for (i = 0; i < NUM_SLIDERS; i++) { s = &sliders[i]; value = *(s->var); if (value < s->min) value = s->min; else if (value > s->max) value = s->max; if (value == s->lastVal) continue; diff = value - s->lastVal; if (diff < 0) { old_x = s->lastVal * SL_WID / s->diff; new_x = value * SL_WID / s->diff; box(1, BX_OFF() + new_x, BY_OFF(i), old_x - new_x, SL_HEI, backColor); if (s->lastVal >= s->low_red && value < s->low_red) box(1, BX_OFF(), BY_OFF(i), new_x, SL_HEI, warningColor); else if (s->lastVal > s->high_red && value <= s->high_red) box(1, BX_OFF(), BY_OFF(i), new_x, SL_HEI, myColor); } else { if (value < s->low_red) color = warningColor; else if (value > s->high_red) { color = warningColor; if (s->lastVal <= s->high_red) s->lastVal = 0; } else { color = myColor; if (s->lastVal < s->low_red) s->lastVal = 0; } old_x = s->lastVal * SL_WID / s->diff; new_x = value * SL_WID / s->diff; box(1, BX_OFF() + old_x, BY_OFF(i), new_x - old_x, SL_HEI, color); } s->lastVal = value; } } static void box(int filled, int x, int y, int wid, int hei, W_Color color) { if (wid == 0) return; if (filled) { /* XFIX */ W_FillArea(statwin, x, y, wid + 1, hei + 1, color); return; } W_MakeLine(statwin, x, y, x + wid, y, color); W_MakeLine(statwin, x + wid, y, x + wid, y + hei, color); W_MakeLine(statwin, x + wid, y + hei, x, y + hei, color); W_MakeLine(statwin, x, y + hei, x, y, color); } void calibrate_stats(void) { register int i; sliders[0].max = me->p_ship.s_maxshield; sliders[0].low_red = .20 * ((double) sliders[0].max); sliders[0].high_red = sliders[0].max; sliders[1].max = me->p_ship.s_maxdamage; sliders[2].max = me->p_ship.s_maxfuel; sliders[2].low_red = .20 * ((double) sliders[2].max); sliders[2].high_red = sliders[2].max; sliders[3].max = me->p_ship.s_maxspeed; sliders[3].high_red = sliders[3].max; sliders[4].max = 1.2 * ((double) me->p_ship.s_maxwpntemp); sliders[4].high_red = .667 * ((double) sliders[4].max); sliders[5].max = 1.2 * ((double) me->p_ship.s_maxegntemp); sliders[5].high_red = .667 * ((double) sliders[5].max); #ifdef ARMY_SLIDER sliders[6].max = troop_capacity(); #endif /* ARMY_SLIDER */ for (i = 0; i < NUM_SLIDERS; i++) sliders[i].diff = sliders[i].max - sliders[i].min; } netrek-client-cow-3.3.2/local.h0000664000175000017500000000111313657750470015310 0ustar jamesjames/* * Local.h * * Functions to maintain the local map. * */ #ifndef h_local #define h_local /* Global Defines */ #define TORP_UPDATE_FUSE 6 /* Ignore torp if no update in this time */ #define PHASER_UPDATE_FUSE 11 /* Ignore phaser if no update in this time */ #define PLASMA_UPDATE_FUSE 6 /* Ignore plasma if no update in this time */ /* Global Functions */ extern void clearLocal(void); /* Clear the local map (intelligently rather than just simply wiping the map). */ extern void local(void); /* Draw out the 'tactical' map. */ #endif /* Not defined h_local */ netrek-client-cow-3.3.2/netstatopt.c0000664000175000017500000000576013657750470016432 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "netstat.h" #include "netstatopt.h" void nswindow(void) { register int i; for (i = 0; i < NETSTAT_NUMFIELDS; i++) nsrefresh(i); /* Map window */ W_MapWindow(netstatWin); } /* Refresh item i */ void nsrefresh(int i) { double ns_get_tstat(void), ns_get_lstat(void); char buf[BUFSIZ], *ns_get_nfthresh_s(void); W_Color color; switch (i) { case NETSTAT_SWITCH: sprintf(buf, "%sollect network stats", netstat ? "C" : "Don't c"); color = textColor; break; case NETSTAT_RESET: sprintf(buf, "Reset network stats"); color = textColor; break; case NETSTAT_TOTAL: sprintf(buf, "Total : %4.2f", ns_get_tstat()); color = yColor; break; case NETSTAT_LOCAL: sprintf(buf, "This ship : %4.2f", ns_get_lstat()); color = yColor; break; case NETSTAT_FAILURES: sprintf(buf, "Network failures : %d", ns_get_nfailures()); color = yColor; break; case NETSTAT_NFTHRESH: sprintf(buf, "Network failure threshold: %s_", ns_get_nfthresh_s()); color = textColor; break; case NETSTAT_DONE: sprintf(buf, "Done"); color = textColor; break; } W_WriteText(netstatWin, 0, i, color, buf, strlen(buf), 0); } void nsaction(W_Event * data) { char *ns_get_nfthresh_s(void); int v; register int i; register char *cp; switch (data->y) { case NETSTAT_SWITCH: if (data->type == W_EV_BUTTON) { if (netstat) { netstat = 0; W_UnmapWindow(lMeter); } else { netstat = 1; ns_init(5); } } nsrefresh(NETSTAT_SWITCH); break; case NETSTAT_RESET: if (data->type == W_EV_BUTTON) { ns_init(0); nsrefresh(NETSTAT_TOTAL); nsrefresh(NETSTAT_LOCAL); nsrefresh(NETSTAT_FAILURES); } break; case NETSTAT_NFTHRESH: if (data->type == W_EV_KEY) { switch (data->key) { case '\b': case '\177': cp = ns_get_nfthresh_s(); i = strlen(cp); if (i > 0) { cp += i - 1; *cp = '\0'; } break; case '\025': case '\030': ns_set_nfthresh_s(""); break; default: if (data->key >= '0' && data->key <= '9') { cp = ns_get_nfthresh_s(); i = strlen(cp); if (i < 4) { cp += i; cp[1] = '\0'; cp[0] = data->key; } } break; } nsrefresh(NETSTAT_NFTHRESH); } break; case NETSTAT_DONE: if (data->type == W_EV_BUTTON) { if (sscanf(ns_get_nfthresh_s(), "%d", &v) != 1) { ns_set_nfthresh_s(NETSTAT_DF_NFT_S); ns_set_nfthresh(NETSTAT_DF_NFT); } else ns_set_nfthresh(v); nsdone(); } break; } } void nsdone(void) { /* Unmap window */ W_UnmapWindow(netstatWin); } netrek-client-cow-3.3.2/warning.h0000664000175000017500000000005213657750470015664 0ustar jamesjames/* warning.c */ void warning(char *text); netrek-client-cow-3.3.2/badversion.h0000664000175000017500000000223713657750470016362 0ustar jamesjames#define BADVERSION_SOCKET 0 /* CP_SOCKET version does not match, exiting */ #define BADVERSION_DENIED 1 /* access denied by netrekd */ #define BADVERSION_NOSLOT 2 /* no slot on queue */ #define BADVERSION_BANNED 3 /* banned */ #define BADVERSION_DOWN 4 /* game shutdown by server */ #define BADVERSION_SILENCE 5 /* daemon stalled */ #define BADVERSION_SELECT 6 /* internal error */ #define MAXBADVERSION 6 #ifdef __GNUC__ #define UNUSED __attribute__ ((unused)) #else #define UNUSED #endif UNUSED static char *badversion_long_strings[] = { /* 0 */ "CP_SOCKET version does not match.\n" "You need a new version of the client code.", /* 1 */ "Access denied by server.", /* 2 */ "No free slots on server queue.", /* 3 */ "Banned from server.", /* 4 */ "Game shutdown by server.", /* 5 */ "Server daemon stalled, internal error.", /* 6 */ "Server reports internal error." }; UNUSED static char *badversion_short_strings[] = { /* 0 */ "Bad Version", /* 1 */ "Access Denied", /* 2 */ "No Free Slots", /* 3 */ "Banned", /* 4 */ "Game Shut", /* 5 */ "Internal Error", /* 6 */ "Internal Error" }; netrek-client-cow-3.3.2/XTREKRC.example0000664000175000017500000006251413657750470016560 0ustar jamesjames#------------# # .xtrekrc # #------------# # # This is the defaults file for netrek. Layout was taken from # jch's file, lots of other stuff from various places. # # Dave Gosselin # Apr 92 # Changes regularly # ############################################################################### # # How I found this stuff: # doc/patch files that come with the clients # greped code (booleanDefault, intDefault, getdefault, mostly) # scaned the code (defaults.c, etc) # # Most of these settings apply to Berkricksmoo2.00pl19 # ############################################################################### # # Modified this slightly to make defaults that newbies might like # better/find more instructive. Be sure to place this file in your # home directory and rename it to ".xtrekrc" - Jeff Nelson 8/11/93 # ############################################################################### # # Feb 95 Added new features - Kurt Siegl [007] ############ WARNING ############ WARNING ############## WARNING ######## # There seems to be a bug which makes defaults, containing # # comments or other garbage (blanks) at the right end INVALID. # ############ WARNING ############ WARNING ############## WARNING ######## name: guest # set password to your player name password for autologin #password: oggtpau password: ############################################################################### # this sets the default server and port (and verification scheme) server: bigbang.astro.indiana.edu port: 2592 useRSA: on # you can also make nicknames like: server.bronco: bronco.ece.cmu.edu port.bronco: 2592 useRSA.bronco.ece.cmu.edu: on server.hockey: hockey.ksu.edu port.hockey: 2592 server.doorstop: doorstop.design.iastate.edu port.doorstop: 2592 server.legend: legend.cma.fr port.legend: 2592 server.guzzler: guzzler.ecst.csuchico.edu port.guzzler: 5858 server.lowell: netrek.uml.edu port.lowell: 2592 server.uml: netrek.uml.edu port.uml: 2592 server.explorer: 128.46.158.74 port.explorer: 2592 useRSA.128.46.158.74: on server.garnet: garnet.cdf.toronto.edu port.garnet: 5555 server.fisher: fisher.psy.vu.nl port.fisher: 2592 server.ucar: netrek.atd.ucar.edu port.ucar: 2592 server.calvin: calvin.usc.edu port.calvin: 2592 server.bookend: bookend.design.iastate.edu port.bookend: 2592 server.clue1: riovista.berkeley.edu port.clue1: 4566 server.clue1o: riovista.berkeley.edu port.clue1o: 4000 server.clue2: riovista.berkeley.edu port.clue2: 4577 server.clue2: riovista.berkeley.edu port.clue2o: 5000 ############################################################################### # a bunch of boolean sets/toggles some may not do anything # gotta see when they are up showshields: on # show shields in warning status warnshields: on # stay peaceful after death keeppeace: on # This may or may not work galacticfrequent: on # really handy \ not really sure showtractor: on # really handy / which really does this showTractorPressor: on # no means visible shuts off in 2 updates continuetractors: on # only works sans window manager extraAlertBorder: on # I like color forcemono: off # kinda borgish showmyspeed: off # really silly rom bitmaps ROMVLVS: off # the babes when you bust (kinda sexist but oh well) babes: on # I like these bitmaps, even tho there seem to be some bugs still... newPlanetBitmaps: on # I like to see planet names showplanetnames: on # Show the planet owner on galactic as a team letter (a most annoying feature) showPlanetOwner: off # Yea!!! Maybe it even works sortPlayers: on # New mucho-mondo dashboard newDashboard: 3 # I don't want to use the borg ForMorons: off # not sure.... maybe fill lock triangle? filltriangle: on # not sure.... maybe message warp? warp: on # not quite sure which motd.... showmotd: off # I don't like the right justified distress calls newDistress: off # message logging logging: off logfile: /tmp/Log_me # galactic map stuff: 0 = ownership 1 = resources 2 = nothing showgalactic: 1 # local map stuff: 0 = ownership 1 = resources 2 = nothing showlocal: 2 # It seems this might actually work now... updatespersec: 5 # how many updates to keep infowins keepInfo: 15 # Time to auto-quit (I think) autoquit: 199 # lock: 0 = don't show, 1 = galactic only , 2 = tactical only, 3 = both showLock: 3 # lagmeter stuff (which I don't use) netstats: off #netstatfreq: 5 # tryUdp: on/off tryUdp: on # udpClientSend: 0 = TCP only 1 = simple UDP 2 = enforced UDP (state only) # 3 = enforced UDP (state & weap) udpClientSend: 3 # udpClientReceive: 0 = TCP only 1 = simple UDP 2 = fat UDP 3 = double UDP udpClientReceive: 1 # udpSequenceCheck: on/off udpSequenceCheck: on # udpDebug: 0 = OFF 1 = ON (conect msgs only) 2 = ON (verbose output) udpDebug: 0 # short packets tryShort: on # PPosition or USPosition (PPosition if you use vtwm) WMXYHintMode: USPosition # Sound is really cool, but anoing for others. sounddir: /usr/local/netrek/sound/sounds sound: off ############################################################################### # my keymap # # q = warp 1, w = beam up, e = det own, r = pressor, t = tractor # a = maxwarp, s = shield tog, d = torps, f = tractor, g = plasma # z = 1/2 speed x = beam down, c = cloak v = lock # SPACE == det enemy torps # # Q = repair E = distress R = repair # A = info D = lock F = army call # # n = refit (new ship) # | = quit ( now fastquit - jn ) # / = docking # W = war window # # everything else is the default (I think) # turned off keymap, almost certainly this is individual taste # also | -> fast quit, not normal quit - jn #keymap: wweerrTTyyddDDffzzxxccbbOOq2wzeDrytTa%ssdtfTgf dAiDlWw/enrRRz#xxvl|qQROO #buttonmap: 1t2p3k # 007's extended mouse button map alows you to play with the mouse only. # Mouse Buttons: # Normal: torp phaser set course # Shift: shield traktor half warp # CNTRL: cloak pressor max warp # CTL-Shift: macro info lock continuousMouse: off shiftedMouse: on # Using virtual keys for ship independend macro overlays. buttonmap: 1^A2^B3^C4^D5^E6^F7^G8^H9^Ia^Jb^Kc^L ckeymap: ^At^Bp^Ck^Du^ET^F#^Gc^Hy^I%^JX^Ki^Ll keymap: afsDddzzxxccv%nrmm dXX0%-R++\-??wwiiIIKKOOSSVVBBUUDDee # Add one off: [sc, dd, ca, bb, as, sb, ga, att, default] for ship dependend keys # SB doesn't need half warp replace it with repair ckeymap-sb: ^At^Bp^Ck^Du^ET^FR^Gc^Hy^I%^JX^Ki^Ll ############################################################################### # This only works for mono displays as far as I know GAlertPattern: 0xf YAlertPattern: 0xa 0x5 RAlertPattern: 0x0f 0x0f 0x0f 0x0f 0xf0 0xf0 0xf0 0xf0 # Well I was playing around with them at one time.... color.white: white color.black: black color.red: red color.green: green color.yellow: yellow color.cyan: cyan color.light grey: lightgrey # Use different colors for the Races color.Ind: light grey color.Fed: yellow color.Rom: magenta color.Kli: green2 color.Ori: light steel blue # From Helix's .xtrekrc # Standard, except red is hard to see on some monitors #color.white: white #color.white: grey90 #color.black: black #color.black: grey35 #color.red: #FFB4FF #color.green: green #color.yellow: yellow #color.cyan: cyan #color.light grey: light grey ############################################################################### # Fonts # # I've gone through many iterations of this as you can see... # # Currently I'm only setting bigfont since the berkmoo defaults seem ok bigfont: lucidasanstypewriter-bold-24 # Using real italic fonts (bigger...) #font: -schumacher-clean-medium-r-normal--10-100-75-75-c-60-* #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-* #italicfont: -schumacher-clean-medium-i-normal--12-120-75-75-c-60-* # #font: 6x10 #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -schumacher-clean-medium-i-normal--12-120-75-75-c-60-iso8859-1 # My old defaults #font: 6x10 #font: -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -*-clean-medium-r-normal--6-60-75-75-c-60-* #italicfont: 6x10i #boldfont: -*-clean-bold-r-normal--10-100-75-75-c-60-* # A new idea #font: -*-clean-bold-r-normal--10-100-75-75-c-60-* #italicfont: 6x10 #boldfont: 6x10 # fonts from Helix's .xtrekrc # Give same size fonts with boldface, italics for small font using client # I have checked out all the fonts that are reasonable--pick the one you like #font: -schumacher-clean-medium-r-normal--10-100-75-75-c-60-iso8859-1 #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -schumacher-clean-medium-i-normal--12-120-75-75-c-60-iso8859-1 #font: 6x10 #font: -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 #boldfont: -adobe-courier-bold-r-normal--10-100-75-75-m-60-iso8859-1 #italicfont: -schumacher-clean-medium-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: -adobe-courier-medium-o-normal--10-100-75-75-m-60-iso8859-1 #italicfont: -adobe-courier-bold-o-normal--10-100-75-75-m-60-iso8859-1 #bigfont: lucidasanstypewriter-bold-24 # #smallfont: 5x8 #smallboldfont: lucidasanstypewriter-bold-8 #smitalicfont: lucidasanstypewriter-8 # 007's fonts using an underline font for oponents (kewl for B&W) #font: 6x10 #boldfont: -schumacher-clean-bold-r-normal--10-100-75-75-c-60-iso8859-1 #italicfont: 6x10i #bigfont: lucidasanstypewriter-bold-24 tts_font: -*-lucida-bold-r-*-*-34-*-*-*-*-*-*-* ############################################################################### # Window placement # # Since changing fonts causes changes to the window sizes # this section has gone through many revisions as well # # The next iteration of all this using the new dashboard.... # I don't usually want to see the MOTD until I'm in #WaitMotd.mapped: off # To encourage motd reading I'll activate this - jn WaitMotd.mapped: on # start of gosellin's geometry, cool in some ways but mapping # various windows onto root has it's uses. I've commented # this out and replaced it with more standard mappings. - jn ## The main window -- only map it when there's no wait queue # ##netrek.geometry: 1150x875+0 # the maximal window for my sparc 2 ##netrek.geometry: 1002x795+145+79 # using old fonts #netrek.geometry: 1002x836+147+40 netrek.geometry: 1002x760 netrek.mapped: off # war.geometry: +800 # help.parent: netrek help.geometry: +0+547 ## planet.parent: netrek planet.geometry: +20 ## Ok, on the left side we have a column of six windows; message, ## warning, new dash (ie tstats), my messages, team messages, all ## messages. I have the total messages maped to cover this whole area ## so by using ? you can toggle between seeing the broken up messages ## or the total window. The stats window has been removed in favor of ## the new dashboard. # message.parent: netrek message.geometry: 496x20+502+500 message.mapped: on # warn.parent: netrek warn.geometry: 496x23+502+523 warn.mapped: on # #tstat.parent: netrek #tstat.geometry: 500x43+0+547 ##tstat.geometry: 500x43+501+500 # pre new dash method #tstat.mapped: on # review_your.parent: netrek #review_your.geometry: 81x5+0+591 # message below new dashboard... review_your.geometry: 81x4+0+547 review_your.mapped: on # review_team.parent: netrek #review_team.geometry: 81x9+0+652 review_team.geometry: 81x5+0+599 ##review_team.geometry: 81x5+0+609 # smaller team window ##review_team.geometry: 81x5+0+617 # big fonts review_team.mapped: on # review_all.parent: netrek review_all.geometry: 81x4+0+662 #review_all.geometry: 81x7+0+754 ##review_all.geometry: 81x5+0+690 # big fonts review_all.mapped: on # ## With this setup, you can use "?" to cycle between the big review window, the ## four small message windows, and no windows at all. # review.parent: netrek review.geometry: 81x20+0+547 review.mapped: off # ## On the right side we have the phaser window, player list, kill messages # ## phaser window ## dunno if the following line is really needed or not.... #phaserWindow: on ## 0 = don't show 1 = show on kill window 2 = show on phaser window ## 3 = show on total review window only #showPhaser: 2 #review_phaser.mapped: on #review_phaser.parent: netrek #review_phaser.geometry: 81x3+501+500 ## review_phaser.geometry: 81x4+501+543 # pre-newdash # player.parent: netrek #player.geometry: +502+530 player.geometry: +502+550 ##player.geometry: +502+595 player.mapped: on # reportkills: on review_kill.parent: netrek #review_kill.geometry: 81x6+501+768 review_kill.geometry: 81x4+0+714 review_kill.mapped: on # # start of new window mappings - jn #netrek.geometry: +0+0 #war.geometry: +800 #rank.parent: root #rank.geometry: 89x30 #review_all.mapped: on #review_all.geometry: 80x26+554+624 #review_your.parent: review_all #review_your.geometry: 80x6+0+0 #review_your.mapped: on #review_team.parent: review_all #review_team.geometry: 80x5+0+78 #review_team.mapped: on #review_kill.parent: review_all #review_kill.geometry: 80x4+0+143 #review_kill.mapped: on #help.geometry: 150x21 #player.geometry: 95x24+2+624 #player.mapped: on ## a couple of other window mappings # # Some UDP stuff udp.geometry: +0+0 udp.mapped: off # I'm planning on using the new dash instead showstats: off stats.parent: netrek #stats.geometry: 160x108+332+500 # old font stuff #stats.geometry: 160x108+332+550 # puts the stats window further down #stats.geometry: 160x108+332+547 stats.geometry: 160x94+842+500 ############################################################################### # from: jjudy@argon.berkeley.edu (Jack W. Judy) # Heh! This makes it almost impossible to screw-up and *accidently* choose # the *wrong* team! Got this idea from an old post. #fed - Fed selection window fed.parent: local fed.geometry: 75x75+0+424 #rom - Romulan selection window rom.parent: local rom.geometry: 75x75+0+0 #kli - Klingon selection window kli.parent: local kli.geometry: 75x75+425+0 #ori - Orion selection window ori.parent: local ori.geometry: 75x75+424+424 #quit quit.parent: local quit.geometry: 100x100+200+0 # from Helix's .xtrekrc # The team selection windows, put in their logical places # on the GALACTIC map! #fed.geometry: +0+400 #rom.geometry: +0+0 #kli.geometry: +400+0 #ori.geometry: +400+400 #quit.geometry: +200+400 #rom.parent: map #kli.parent: map #fed.parent: map #ori.parent: map #quit.parent: map ############################################################################### # # custom distress calls. d. is for ships. d.sb. is for SBs. # the different levels for changes in the distress calls. # first number is low value. Second is high value. In between is mid. # set up strings for each part of the distress call. # a '_' is a "no show" # # These may or may not be included in the client (usually not I think, # but maybe someday...) # Actually it has been replaced by RCD #d.shld.lvl: 10 90 #d.shld.low: SHLDS OUT! #d.shld.high: _ #d.shld.mid: %d%% shlds #d.dam.lvl: 10 90 #d.dam.low: _ #d.dam.high: %d%% DAM! #d.dam.mid: %d%% dmg #d.arms.lvl: 0 50 #d.arms.low: _ #d.arms.high: _ #d.arms.mid: %d armies! #d.fuel.lvl: 10 90 #d.fuel.low: FUEL OUT! #d.fuel.high: _ #d.fuel.mid: %d%%fuel # starbase stuff.... Much more interesting than ship distress I reckon #d.sb.dam.lvl: 10 66 #d.sb.dam.low: _ #d.sb.dam.mid: %d%% dam #d.sb.dam.high: WRP1 %d%%dam # Place all important macros and distess calls onto the mouse. # Requires 007's extended mouse button map. # Mouse Buttons: # Normal: pop control pickup # Shift: bombing escorting ogging # CNTRL: ack team ack player ogg # CTL-Shift: distress takeing carrying dist.^A.pop: %T%c->%O %l%?%n>-1%{ @ %n%}! dist.bomb: %T%c: %?%n>4%{bomb %l @ %n%!BOMB%} dist.^B.save_planet: %T%c->%O Emergency at %L!!!! dist.space_control: %T%c: Danger Help Control at %l dist.^C.pickup: WATCH %u: %t%p++ @ %l dist.^D.bombing: %T%c: Bombing %l @ %n dist.^E.escorting: %T%c: Escorting %p dist.^F.ogging: %T%c: Ogging %p mac.^G.t: ok mac.^H.%u: ACK dist.^I.ogg: OGG %u (%t%p) near >%l< dist.^J.help: %i (%S %T%c@%b): %?%S=SB%{SB%!%} Help! %d%% dam, %s%% shd, %f%% fuel %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}%?%a>0%{%a armies!!%!%} dist.^K.taking: %i (%S %T%c@%b): need ESCORT going to >%l%?%n>0%{@%n%}<%?%a>0%{, carrying %a armies!%} dist.^L.carrying: %i (%S %T%c@%b) has %a armies on board! ############################################################################### # # Configurable message macros to the all board. control-jkliop # Seems not to work anymore. message1: KA-BOOOOOOOOOOOOOOOOOOOM message2: I suck today! message3: SNL! message4: Live From New York, it's Saturday Night! message5: I am Hanz, and I am here to blow (ka-boom) you up! message6: I hate OT. ############################################################################### # Macro stuff # # Mostly so I will know how to play around with them if I ever # decide to... # ############################################################################### # #macro.x.X: #x is any ascii character; it is the "name" of the macro (the key you press #in macro mode to send the associated macro) #X can be A,T,F,R,K,O where A=all, T=team, F=fed, R=rom, K=kli, O=ori #(determines the message board to which the text body of the macro is sent) # # These are the "standard" macro things (ie mostly compiled in) macro.b.T: BOMB!!!! Using an AS! macro.s.T: We need a sc bomber. macro.g.T: Going sc bombing. ############################################################################### # # These are the "NEWMACRO" type macros # # Definitions: # %a armies I am carrying # %d my damage percentage # %s my shield percentage # %f my fuel percentage # %w my wtemp percentage # %e my etemp percentage # %p id character of player nearest mouse # %l three character name of planet nearest mouse # %t team id character of planet/player nearest mouse # %T team id character of my team # %c my id character # %n armies on planet nearest mouse # %E 1 if etemped, 0 if not # %W 1 if wtemped, 0 if not # %S my two character ship type # normalish macro mac.F.T: Help! Carrying %a!! # extra keystroke macro # need to do something like: XfT (send to team) mac.f: Help! Carrying %a!! # multiline (won't work without destination) mac.C.A: +-- +-+ + + Client simply mac.C.A: | | | | | Of the mac.C.A: +-- +-+ \^/ Win best. mac.D.A: D mac.D.A: O mac.D.A: O mac.D.A: S mac.D.A: H ############################################################################### # # These are the "SMARTMACRO" type macros # # Test Definitions: # %? introduces a test # = equivalence # > greater # < less # # "Syntax" # # (1/0)%{ true %! false %} # ^^^^^ Test part (if whatever is here evaluates to 1 you get true # 0 you get false) # simple examples mac.R.A: I'm a %?%S=SB%{star base!%!twink!%} #mac.b.T: %?%n>4%{bomb %Gl at %n%!bomb%} mac.e.T: need escort going to %l%?%a>0%{, carrying %a armies!%} # complex examples mac.d.T: %E%{%!%W%{%!I'm fine. How are you? %}%}%E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} mac.a.T: %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} ############################################################################### # New new macros? # # %m the last message you sent # %i my full player name (16 character max) # %u full name of player nearest mouse (16 character max) # %z 3 letter team id of player/planet nearest mouse # # FULLY CAPITALIZED: # %L three character name of planet nearest mouse # %M the last message you sent # %I my full player name (16 character max) # %U full name of player nearest mouse (16 character max) # %Z 3 letter team id of player/planet nearest mouse #useful for INL... mac.C.%i: CAPTAIN mac.N.%i: NEWGALAXY mac.S.%i: START mac.T.%i: %Z mac.W.%t: SHUT UP, TWINKS!! mac.I.%u: %u: det when you escort! mac.O.%u: (%i) ogging key.C: captain key.B.0: base mac.A.C: Ack, Captain # What this does is allows you to send a macro to a player or # team specified by your mouse location instead of requiring # a 3rd character to be input. Also, it allows you to send # message to yourself without having to actual sit there and # figure out who you are (they tried and failed back in the '60s). # Macros without pressing a macro key. singleMacro: ^p^h^l # Various Macros mac.^p: %v ms ping with %V ms stdv(lag) and %y %% loss really sucks :< mac.^h: Hi, nice to doosh you. # Check the load of the machine mac.^l.!: who;uptime # Set symbolic names for macro # key.[key].[dest]: [name of key] # If the destination isn't specified the key default to team. # Set the actual destination by sending a message: # set [name of key] [destination id] # to the shell ("!") # key.C: captain # Set Captian to target player mac.^c.!: set captain %g # Macros to the captain. mac.o.C: Hi Captain let me suggest a base ogg? # key.B: base # Set Base to target player mac.^b.!: set base %g # Macros to the Base mac.a.B: BASE: Free armies for me? # key.m.A: me # set the me (m) key to myself mac.^m.!: set me %c # some Macro sent to myself mac.t.m: TIME # Beep Lite and TTS UseLite: on # Some consider blinking ships borgish so turn off all the defaults DefLite: off #lite.taking: /c/l #lite.base_ogg: /g/m #lite.pickup: /h #lite.help: %?%S=SB%{/c%} # I like a big TTS ++ pickup message on my screen and TTS is not borgish lite.pickup: /|%p++ @ %l| # On a base ogg highlite own ship and beep (not borgish at all :) lite.base_ogg: /m/0 # Let's have some neat formated kill messages msg.kill: %i (%S) (%T%c%?%a>0%{+%a babes) %>30 doosh%!) %>30 kill %} %?%d>0%{%k%!%} for %u (%r%p) %?%w>0%{%>70%W%!%} msg.planet: %i (%S) (%T%c%?%a>0%{+%a armies%!%} %>30 killed by %l (%z) msg.bomb: %N %>30 bombed by %i (%S) (%T%c) with %d%% dam msg.destroy: %N %>30 destroyed by %i (%T%c) msg.take: %N %>30 taken by %i (%T%c) msg.ghostbust: %i (%S) (%T%c) %>30 kill %k for the GhostBusters ############################################################################### # # This is the list of windows I've been able to find. Most you will # probably not want to screw around with, but these can be controlled # (at least it appears that way in the code...). # # I found these by greping for: # checkMapped # W_MakeWindow # W_MakeTextWindow # W_MakeScrollingWindow # W_MakeMenu # #Window list: # #planet - Planet listing (P) #rank - The rank window (U) #help - Help window (h) #macro - Macro Listing (X-?) #MetaServer List - Metaserver stuff (not quite sure how to use it) #review - The munged list of messages from all sources #review_all - Messages to all #review_team - Messages to your team #review_your - Messages to you #review_kill - Kill messages #review_phaser - The phaser damage window #netstat - Network statistics #lagMeter - The Lag-o-Meter #pingStats - Ping statistics window #player - Player list #tstat - Dashboard #UDP - UDP controls #network - #local - Main fighting window #map - Galactic map #option - The options window #wait - #count - #waitquit - #waitmotd - #info - #netrek - The "main" window (parent) #netrek_icon - #warn - Warnings ("forgot your toothbrush",et al) #message - Message sending window #FED - Team windows on entry #ROM - Team windows on entry #KLI - Team windows on entry #ORI - Team windows on entry #quit - Quit box on entry #stats - #scanner - #war - War delcarations # # This gives you: # name.mapped (on/off for initial mapping) # name.parent (which window you want this one to be in) # name.geometry (size and location) # ############################################################################### # # THE END # ############################################################################### netrek-client-cow-3.3.2/teams.bitmap0000664000175000017500000000522613657750470016365 0ustar jamesjames#define fed_cruiser_width 17 #define fed_cruiser_height 18 #define fed_cruiser_x_hot 10 #define fed_cruiser_y_hot 10 static char fed_cruiser_bits[] = { 0x00, 0x0f, 0x00, 0x80, 0x1f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x3f, 0x00, 0x80, 0x1f, 0x00, 0x00, 0x0f, 0x00, 0x40, 0x26, 0x00, 0x40, 0x26, 0x00, 0x40, 0x2f, 0x00, 0xc0, 0x3f, 0x00, 0xc0, 0x36, 0x00, 0x40, 0x26, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x40, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; #define fed_mask_width 17 #define fed_mask_height 18 static char fed_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,}; #define rom_cruiser_width 17 #define rom_cruiser_height 13 #define rom_cruiser_x_hot 10 #define rom_cruiser_y_hot 10 static char rom_cruiser_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x80, 0x00, 0x04, 0x80, 0x00, 0x1c, 0xe0, 0x00, 0xfc, 0xff, 0x00, 0xfc, 0xff, 0x00, 0xf4, 0xbf, 0x00, 0xf4, 0xbf, 0x00, 0xe4, 0x9f, 0x00, 0xc4, 0x8f, 0x00, 0x84, 0x87, 0x00, 0x00, 0x00, 0x00}; #define rom_mask_width 17 #define rom_mask_height 13 static char rom_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; #define ori_cruiser_width 17 #define ori_cruiser_height 18 #define ori_cruiser_x_hot 10 #define ori_cruiser_y_hot 10 static char ori_cruiser_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x06, 0x00, 0x00, 0x06, 0x00, 0x20, 0x4f, 0x00, 0x20, 0x4f, 0x00, 0x30, 0xcf, 0x00, 0xb0, 0xdf, 0x00, 0xf0, 0xff, 0x00, 0xf0, 0xf6, 0x00, 0xb0, 0xd0, 0x00, 0x30, 0xcf, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00}; #define kli_cruiser_width 17 #define kli_cruiser_height 18 #define kli_cruiser_x_hot 10 #define kli_cruiser_y_hot 10 static char kli_cruiser_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x80, 0x00, 0x20, 0x8a, 0x00, 0xa0, 0xbf, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0xe0, 0xff, 0x00, 0x20, 0x8e, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x0e, 0x00}; netrek-client-cow-3.3.2/helpwin.c0000664000175000017500000001372213657750470015670 0ustar jamesjames/* helpwin.c copyright 1991 ERic mehlhaff Free to use, hack, etc. Just keep * these credits here. Use of this code may be dangerous to your health * and/or system. Its use is at your own risk. I assume no responsibility for * damages, real, potential, or imagined, resulting from the use of it. * */ #include "config.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "helpwin.h" /* this is a set of routines that makes up a multi column help window, * and * shows just what the keymaps current keymap representation of the * keys * are. * * * fillhelp() handles the filling in if the strings for the help window * * update_Help_to_Keymap() checks the keymap and sets it up in hte * help * window. * * * * * Format for each entry is follows: * first character is the hard-coded * character representation for the key * in the keymap. Useful for when you * re-key things. This could confuse * people who do'nt know the keymap * format. * * * the next few spaces are either spaces or keys that also do that * function. * Note that if you have more than 3 keys set to do the same * thing, they * will not be displayed. * So, you could, I suppose map everything to 'Q' * and it would not * show, but that's a pretty bizarre situation. * * * * * Bugs & Comments: * You have to be sure that helpWin is defined to be big * enough to handle * all the messages. That's pretty much a trial&error * by-hand thing * at this point * * */ /* fills in the help window to note all keys also mapped to the listed * functions */ static void update_Help_to_Keymap(char *helpmessage); #define HELPMESSAGES (sizeof(help_message)/ sizeof(char *)) /* this is the number of help messages there are */ char *help_message[] = { "0 Set speed", "1 Set speed", "2 Set speed", "3 Set speed", "4 Set speed", "5 Set speed", "6 Set speed", "7 Set speed", "8 Set speed", "9 Set speed", ") Speed = 10", "! Speed = 11", "@ Speed = 12", "% Speed = maximum", "# Speed = 1/2 maximum", "< Speed down 1", "> Speed up 1", "k Course set", "p Fire phaser beam", "t Fire photon torpedo", "f Fire plasma torpedo", "d Detonate enemy torpedos", "D Detonate own torpedos", "L Players list on/off", "P Planets list on/off", "S Status graph on/off", "] Shields on", "[ Shields off", "u Shields on/off", "s Shields on/off", "i Info on player/planet", "I Extended info on player", "b Bomb planet", "z Beam up armies", "x Beam down armies", "c Cloak on/off", "{ Cloak on", "} Cloak off", "T Tractor beam on/off", "y Pressor beam on/off", "_ Tractor beam on", "^ Pressor beam on", "$ Tractor/pressor beam off", "R Repair mode on", "o Orbit planet or dock to base", "e Docking permission on/off", "r Refit (change ship type)", "Q Quit", "q Fast quit", "? Message window on/off", "l Lock on to player/planet", "; Lock on to planet", "h Help window on/off", "w War declarations window on/off", "N Planet names on/off", "V Change local planet display", "B Change galactic planet display", "* Practice robot or transwarp", "E Send distress signal", "F Send armies carried report", "U Rankings window on/off", "mA Send message to ALL", "mT Send message to team", "/ Sort player list on/off", ": Message logging on/off", "+ UDP window on/off", "= Update all", ", Ping stats window on/off", ". Netstat window on/off", "\\ LagMeter window on/off", #ifdef SHORT_PACKETS "` Packet window on/off", "- Update small", "| Update medium", #endif /* SHORT_PACKETS */ " (space) special windows off", #ifdef NBT "X Enter macro mode", "X? Show current macros", #endif #ifdef TOOLS "M Shell tools window on/off", #endif #ifdef SOUND "~ Sound control window on/off", #endif "& Reread .xtrekrc", 0 }; #define MAXHELP 40 /* maximum length in characters of key explanation */ void fillhelp(void) { register int i = 0, row, column; char helpmessage[MAXHELP]; /* 4 column help window. This may be changed depending on font size */ for (column = 0; column < 4; column++) { for (row = 1; row < HELPMESSAGES / 4 + 1; row++) { if (help_message[i] == 0) break; else { STRNCPY(helpmessage, help_message[i], sizeof(helpmessage)); update_Help_to_Keymap(helpmessage); W_WriteText(helpWin, MAXHELP * column, row - 1, textColor, helpmessage, strlen(helpmessage), W_RegularFont); i++; } } if (help_message[i] == 0) break; } } /* this takes the help messages and puts in the keymap, so the player can see * just what does what! * * ordinary format: "U Show rankings window", translatedd here to "[ * sE Computer options window", */ static void update_Help_to_Keymap(char *helpmessage) { int i, num_mapped = 0; char key; key = helpmessage[0]; if (key < 32 || key > 126) { return; } if (strlen(helpmessage) < 6) { return; } for (i = 0; i < 96; i++) { if (mystats->st_keymap[i] != key) continue; if (i + 32 == key) continue; /* it's already there! don't * * * add it! */ /* we've found a key mapped to key! */ /* the key is i+32 */ num_mapped++; if (num_mapped > 3) continue; /* we've found too many! */ /* put the key in the string */ helpmessage[1 + num_mapped] = i + 32; } /* clear spaces if any area available */ switch (num_mapped) { case 0: helpmessage[2] = ' '; case 1: helpmessage[3] = ' '; case 2: helpmessage[4] = ' '; case 3: default: helpmessage[5] = ' '; } return; } netrek-client-cow-3.3.2/COPYING0000664000175000017500000000131213657750470015101 0ustar jamesjamesCopyright review of netrek-client-cow-3.2.9 by James Cameron on 2009-01-05. 1. copyright.h, 1986 Chris Guthrie, 1989 Kevin P. Smith, Scott Silvey, 1993 Kevin Powell, Nick Trown, Jeff Nelson, Kurt Siegl, 1994 Nathan Doss, Michael Kantner, 2. copyright2.h, 1989 Kevin P. Smith, Scott Silvey, 3. cowapi.h, 1996 Kurt Siegl, 4. dashboard.c, dashboard3.c, 1993 1996 Lars Bernhardsson, 5. helpwin.c, defwin.c (derived), 1991 Eric Mehlhaff, 6. macrowin.c (derived from #5), 1993 Nick Trown, 7. random.c, setstat.c, 1983 1993, The Regents of the University of California, 8. tools.c, 1993 Kurt Siegl. Please refer to copyright.h and copyright2.h for the package copyright and software license. netrek-client-cow-3.3.2/x11sprite.c0000664000175000017500000004706513657750470016071 0ustar jamesjames#include "config.h" #include #include #include #include #include #include #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "defaults.h" #include "x11window.h" #include "x11sprite.h" #define W_Void2Window(win) (((struct window *) (win))) #define NoPixmapError 0 struct S_Object { Drawable drawable; GC gc; int view, nviews, width, height, cloak; Pixmap image; Pixmap shape; }; #define NUM_BG_IMGS 6 #define NUM_PL_IMGS 11 #define PL_PIX_UKN 0 #define PL_PIX_ROCK 1 #define PL_PIX_AGRI 2 #define PL_PIX_ARMY 3 #define PL_PIX_REPAIR 4 #define PL_PIX_FUEL 5 #define PL_PIX_IND 6 #define PL_PIX_FED 7 #define PL_PIX_ROM 8 #define PL_PIX_KLI 9 #define PL_PIX_ORI 10 const int reremap[5] = {NO_IND_PIX, NO_FED_PIX, NO_ROM_PIX, NO_KLI_PIX, NO_ORI_PIX}; static struct S_Object mplanetImg[NUM_PL_IMGS]; static struct S_Object shipImg[NUMTEAM + 1][NUM_TYPES]; static struct S_Object torpImg[NUMTEAM + 1][2]; static struct S_Object plasmaImg[NUMTEAM + 1][2]; static struct S_Object cloakImg; static struct S_Object explosionImg[2]; /* * static struct S_Object planetImg[NUM_PL_IMGS]; * static struct S_Object shieldImg[NUM_SH_IMGS]; * static struct S_Object hullImg[NUM_HL_IMGS]; */ static Pixmap backPix[NUM_BG_IMGS]; extern Window W_Root; extern Colormap W_Colormap; extern Visual *W_Visual; extern int takeNearest; extern Display *W_Display; const char teamnames[NUMTEAM + 1][4] = {"Ind", "Fed", "Rom", "Kli", "Ori"}; const char mplanetfiles[NUM_PL_IMGS][12] = {"UNKN.png", "ROCK.png", "AGRI.png", "army.png", "repair.png", "fuel.png", "Ind.png", "Fed.png", "Rom.png", "Kli.png", "Ori.png" }; const char shipfiles[NUM_TYPES][8] = {"SC.png", "DD.png", "CA.png", "BB.png", "AS.png", "SB.png", "GA.png", "AT.png" }; const char torpfiles[2][14] = {"torp.png", "torp_det.png"}; const char plasmafiles[2][16] = {"plasma.png", "plasma_det.png"}; const char cloakfile[10] = "cloak.png"; const char explosionfiles[2][18] = {"explosion.png", "sbexplosion.png"}; const char bgfiles[NUM_BG_IMGS][16] = {"map_back.png", "local_back.png", "ghostbust.png", "genocide.png", "greet.png", "hockey.png" }; static int ReadFileToSprite(char *filename, struct S_Object *sprite, Drawable drawable) { Imlib_Image im; int width, height, nviews; if (access(filename, R_OK) != 0) { fprintf(stderr, "image %s is not readable\n", filename); goto fail; } im = imlib_load_image(filename); if (!im) { fprintf(stderr, "image %s failed to load\n", filename); goto fail; } imlib_context_set_display(W_Display); imlib_context_set_visual(W_Visual); imlib_context_set_colormap(W_Colormap); imlib_context_set_image(im); imlib_context_set_drawable(drawable); imlib_render_pixmaps_for_whole_image(&sprite->image, &sprite->shape); width = imlib_image_get_width(); height = imlib_image_get_height(); nviews = height / width; if (nviews * width != height) { nviews = 1; } sprite->drawable = drawable; sprite->gc = XCreateGC(W_Display, sprite->image, 0, NULL); sprite->view = 0; sprite->nviews = nviews; sprite->width = width; sprite->height = height / nviews; sprite->cloak = 0; #ifdef DEBUG fprintf(stderr, "image %s loaded, nv=%d w=%d h=%d (%d)\n", filename, nviews, width, height, sprite->height); #endif imlib_free_image_and_decache(); return 0; fail: sprite->image = NoPixmapError; sprite->nviews = 1; return 1; } int ReadFileToTile(char *filename, Pixmap *pix, Drawable drawable) { Imlib_Image im; if (access(filename, R_OK) != 0) { fprintf(stderr, "image %s is not readable\n", filename); goto fail; } im = imlib_load_image(filename); if (!im) { fprintf(stderr, "image %s failed to load\n", filename); goto fail; } imlib_context_set_display(W_Display); imlib_context_set_visual(W_Visual); imlib_context_set_colormap(W_Colormap); imlib_context_set_image(im); imlib_context_set_drawable(drawable); imlib_render_pixmaps_for_whole_image(pix, NULL); #ifdef DEBUG fprintf(stderr, "tile %s loaded, w=%d h=%d\n", filename, imlib_image_get_width(), imlib_image_get_height()); #endif imlib_free_image_and_decache(); return 0; fail: *pix = NoPixmapError; return 1; } static char pixmapDir[1024] = { '\0' }; static void GetPixmapDir() { char *pd; if (pixmapDir[0] != '\0') return; pd = getdefault("pixmapDir"); if (pd != (char *) NULL) strncpy(pixmapDir, pd, 1024); else strcpy(pixmapDir, "/usr/share/pixmaps/netrek-client-cow"); if ((strcmpi(pixmapDir, "None") == 0) || (pixMissing & NO_PIXMAPS)) { pixMissing = NO_IND_PIX | NO_FED_PIX | NO_ROM_PIX | NO_KLI_PIX | NO_ORI_PIX | NO_WEP_PIX | NO_EXP_PIX | NO_CLK_PIX | NO_MAP_PIX | NO_BG_PIX | NO_PIXMAPS; fprintf(stderr, "pixmaps turned off\n"); } else { struct stat buf; if ((stat(pixmapDir, &buf)) || (!(S_ISDIR(buf.st_mode)))) { /* if .xtrekrc is wrong, and package default wrong, try default dir */ if ((stat("pixmaps", &buf)) || (!(S_ISDIR(buf.st_mode)))) { pixMissing = NO_IND_PIX | NO_FED_PIX | NO_ROM_PIX | NO_KLI_PIX | NO_ORI_PIX | NO_WEP_PIX | NO_EXP_PIX | NO_CLK_PIX | NO_MAP_PIX | NO_BG_PIX | NO_PIXMAPS; fprintf(stderr, "pixmaps not here\n"); } else { strcpy(pixmapDir, "pixmaps"); } } } } void GetPixmaps(Display * d, struct window *win, W_Window t, W_Window g) { register int i, j; char buf[1024]; int missing; Drawable tactical = W_Void2Window(t)->window; Drawable galactic = W_Void2Window(g)->window; W_Display = d; GetPixmapDir(); for (i = 0; i < NUMTEAM + 1; i++) { missing = 0; for (j = 0; j < NUM_TYPES; j++) { sprintf(buf, "%s/%s/%s", pixmapDir, teamnames[i], shipfiles[j]); missing += ReadFileToSprite(buf, &shipImg[i][j], tactical); } if (missing == NUM_TYPES) { pixMissing |= reremap[i]; if (!(pixMissing & NO_PIXMAPS)) fprintf(stderr, "type %s ship pixmaps not available\n", teamnames[i]); } } missing = 0; for (i = 0; i < NUMTEAM + 1; i++) { for (j = 0; j < 2; j++) { sprintf(buf, "%s/%s/%s", pixmapDir, teamnames[i], torpfiles[j]); missing += ReadFileToSprite(buf, &torpImg[i][j], tactical); sprintf(buf, "%s/%s/%s", pixmapDir, teamnames[i], plasmafiles[j]); missing += ReadFileToSprite(buf, &plasmaImg[i][j], tactical); } } if (missing == (NUMTEAM + 1) * 4) { pixMissing |= NO_WEP_PIX; if (!(pixMissing & NO_PIXMAPS)) fprintf(stderr, "type weapon pixmaps not available\n"); } missing = 0; for (i = 0; i < 2; i++) { sprintf(buf, "%s/Misc/%s", pixmapDir, explosionfiles[i]); missing += ReadFileToSprite(buf, &explosionImg[i], tactical); } if (missing == 2) { pixMissing |= NO_EXP_PIX; if (!(pixMissing & NO_PIXMAPS)) fprintf(stderr, "type explosion pixmaps not available\n"); } missing = 0; for (i = 0; i < NUM_PL_IMGS && !missing; i++) { sprintf(buf, "%s/Planets/Map/%s", pixmapDir, mplanetfiles[i]); if (i == PL_PIX_AGRI && missing == 0) { /* If the AGRI pixmap is missing, use the ROCK pixmap */ if (ReadFileToSprite(buf, &mplanetImg[i], galactic) != 0) { sprintf(buf, "%s/Planets/%s", pixmapDir, mplanetfiles[i - 1]); ReadFileToSprite(buf, &mplanetImg[i], galactic); } } else missing += ReadFileToSprite(buf, &mplanetImg[i], galactic); } if (missing) { pixMissing |= NO_MAP_PIX; if (!(pixMissing & NO_PIXMAPS)) fprintf(stderr, "type map pixmaps not available\n"); } sprintf(buf, "%s/Misc/%s", pixmapDir, cloakfile); if (ReadFileToSprite(buf, &cloakImg, tactical)) { pixMissing |= NO_CLK_PIX; if (!(pixMissing & NO_PIXMAPS)) fprintf(stderr, "type cloak pixmaps not available\n"); } missing = 0; for (i = 0; i < NUM_BG_IMGS; i++) { sprintf(buf, "%s/Misc/%s", pixmapDir, bgfiles[i]); missing += ReadFileToTile(buf, &backPix[i], galactic); } if (missing == NUM_BG_IMGS) { pixMissing |= NO_BG_PIX; if (!(pixMissing & NO_PIXMAPS)) fprintf(stderr, "type background pixmaps not available\n"); } pixMissing &= ~NO_HALOS; } /************************************************************************* * Now for the drawing routines * *************************************************************************/ int W_DrawSprite(void *in, int x, int y, int winside) { const int view = SCALE * winside / 2; struct S_Object *sprite = (struct S_Object *) in; int dx, dy; if ((sprite == NULL) || (sprite->view < 0) || (sprite->view >= sprite->nviews)) return 0; if (x > view || x < -view || y > view || y < -view) return 0; dx = x - (sprite->width) / 2; dy = y - (sprite->height) / 2; if ((sprite->cloak > 0) && !(pixFlags & NO_CLK_PIX)) { XSetClipMask(W_Display, sprite->gc, cloakImg.shape); XSetClipOrigin(W_Display, sprite->gc, dx, dy - cloakImg.view * (cloakImg.height)); } else { XSetClipMask(W_Display, sprite->gc, sprite->shape); XSetClipOrigin(W_Display, sprite->gc, dx, dy - sprite->view * (sprite->height)); } XCopyArea(W_Display, sprite->image, sprite->drawable, sprite->gc, 0, (sprite->view) * (sprite->height), sprite->width, sprite->height, dx, dy); return (sprite->width); } void W_DrawSpriteAbsolute(void *in, int x, int y) { struct S_Object *sprite = (struct S_Object *) in; if (sprite == NULL) return; XSetClipMask(W_Display, sprite->gc, sprite->shape); XSetClipOrigin(W_Display, sprite->gc, x, y); XCopyArea(W_Display, sprite->image, sprite->drawable, sprite->gc, 0, 0, sprite->width, sprite->height, x, y); } void W_ClearSpriteAbsolute(void *in, int x, int y) { struct S_Object *sprite = (struct S_Object *) in; if (sprite == NULL) return; XSetClipMask(W_Display, sprite->gc, sprite->shape); XSetClipOrigin(W_Display, sprite->gc, x, y); XClearArea(W_Display, sprite->drawable, x, y, sprite->width, sprite->height, False); } void *S_Ship(int playerno) { struct S_Object *sprite; struct player *this; if ((playerno > MAXPLAYER) || (playerno < 0)) return ((void *) NULL); this = &players[playerno]; sprite = &(shipImg[remap[this->p_team]][this->p_ship.s_type]); sprite->cloak = 0; /* The following generalizes "rosette(x)" for an arbitrary number of views in the image */ sprite->view = ((((this->p_dir) + 128 / (sprite->nviews)) / (256 / (sprite->nviews))) % (sprite->nviews)); if ((this->p_status != PALIVE) && (this->p_status != PEXPLODE)) { return ((void *) NULL); } else if ((this->p_flags & PFOBSERV) && !(this->p_flags & PFPLOCK)) { return ((void *) NULL); } else if ((this->p_flags & PFOBSERV) && !(this->p_flags & PFCLOAK)) { return ((void *) NULL); } else if (this->p_status == PEXPLODE) { int i; if (pixFlags & NO_EXP_PIX) return ((void *) NULL); if (this->p_ship.s_type == STARBASE) { i = this->p_explode * 5 / server_ups; sprite = &explosionImg[1]; } else { i = this->p_explode * 10 / server_ups; sprite = &explosionImg[0]; } if (i >= sprite->nviews) return ((void *) NULL); sprite->view = i; this->p_explode++; } else if ((this->p_flags & PFCLOAK) || (this->p_cloakphase > 0)) { if (this->p_cloakphase == (CLOAK_PHASES - 1)) { if ((this == me) && !(pixFlags & NO_CLK_PIX)) { sprite = &cloakImg; sprite->view = cloakImg.nviews - 1; } else { return ((void *) NULL); } } else { if ((CLOAK_PHASES - 2) == 0) return ((void *) NULL); sprite->cloak = this->p_cloakphase; cloakImg.view = MAX(0, cloakImg.nviews - (this->p_cloakphase * (cloakImg.nviews - 1) / (CLOAK_PHASES - 2)) - 2); } } if ((sprite->image == NoPixmapError) || (pixFlags & reremap[remap[this->p_team]])) return ((void *) NULL); else return ((void *) sprite); } void *S_mPlanet(int planetno) { struct S_Object *sprite; struct planet *this = &planets[planetno]; if (pixFlags & NO_MAP_PIX) return ((void *) NULL); if ((this->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) { if ((this->pl_flags & PLAGRI) && (F_agri_pix)) sprite = &mplanetImg[PL_PIX_AGRI]; else sprite = &mplanetImg[PL_PIX_ROCK]; } else { sprite = &mplanetImg[PL_PIX_UKN]; } sprite->view = 0; return ((void *) sprite); } void *S_mArmy(int planetno) { struct S_Object *sprite = NULL; struct planet *this = &planets[planetno]; if ((pixFlags & NO_MAP_PIX) || (showgalactic != 1)) return ((void *) NULL); if (((this->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) && (this->pl_armies > 4)) { sprite = &mplanetImg[PL_PIX_ARMY]; sprite->view = 0; } return ((void *) sprite); } void *S_mRepair(int planetno) { struct S_Object *sprite = NULL; struct planet *this = &planets[planetno]; if ((pixFlags & NO_MAP_PIX) || (showgalactic != 1)) return ((void *) NULL); if (((this->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) && (this->pl_flags & PLREPAIR)) { sprite = &mplanetImg[PL_PIX_REPAIR]; sprite->view = 0; } return ((void *) sprite); } void *S_mFuel(int planetno) { struct S_Object *sprite = NULL; struct planet *this = &planets[planetno]; if ((pixFlags & NO_MAP_PIX) || (showgalactic != 1)) return ((void *) NULL); if (((this->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) && (this->pl_flags & PLFUEL)) { sprite = &mplanetImg[PL_PIX_FUEL]; sprite->view = 0; } return ((void *) sprite); } void *S_mOwner(int planetno) { struct S_Object *sprite = NULL; struct planet *this = &planets[planetno]; if ((pixFlags & NO_MAP_PIX) || (showgalactic != 0)) return ((void *) NULL); if ((this->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) { sprite = &mplanetImg[PL_PIX_IND + remap[this->pl_owner]]; sprite->view = 0; } return ((void *) sprite); } void *S_Torp(int torpno) { struct S_Object *sprite; struct torp *this = &torps[torpno]; int numdetframes, frame; if (this->t_status == TEXPLODE) { sprite = &torpImg[remap[players[this->t_owner].p_team]][1]; this->t_fuse--; numdetframes = NUMDETFRAMES * server_ups / 5; frame = this->t_fuse * 5 / server_ups; if (this->t_fuse <= 0) { this->t_status = PTFREE; players[this->t_owner].p_ntorp--; } else if (this->t_fuse >= numdetframes) { this->t_fuse = numdetframes - 1; } else { sprite->view = frame; } } else { sprite = &torpImg[remap[players[this->t_owner].p_team]][0]; sprite->view = (sprite->view + 1) % sprite->nviews; // FIXME: torps rotate faster with higher client update rates } if ((sprite->image == NoPixmapError) || (pixFlags & NO_WEP_PIX)) return (NULL); else return ((void *) sprite); } void *S_Plasma(int plasmatorpno) { struct S_Object *sprite; struct plasmatorp *this = &plasmatorps[plasmatorpno]; int numdetframes, frame; if (this->pt_status == PTEXPLODE) { sprite = &plasmaImg[remap[players[this->pt_owner].p_team]][1]; this->pt_fuse--; numdetframes = NUMDETFRAMES * server_ups / 5; frame = this->pt_fuse * 5 / server_ups; if (this->pt_fuse <= 0) { this->pt_status = PTFREE; players[this->pt_owner].p_nplasmatorp--; } else if (this->pt_fuse >= numdetframes) { this->pt_fuse = numdetframes - 1; } else { sprite->view = frame; } } else { sprite = &plasmaImg[remap[players[this->pt_owner].p_team]][0]; sprite->view = (sprite->view + 1) % sprite->nviews; } if ((sprite->image == NoPixmapError) || (pixFlags & NO_WEP_PIX)) return (NULL); else return ((void *) sprite); } void W_GalacticBgd(int which) { struct window *win = W_Void2Window(mapw); if ((backPix[which] == NoPixmapError) || (pixFlags & NO_BG_PIX)) W_UnTileWindow(mapw); else XSetWindowBackgroundPixmap(W_Display, win->window, backPix[which]); W_ClearWindow(mapw); } void W_LocalBgd(int which) { struct window *win = W_Void2Window(w); if ((backPix[which] == NoPixmapError) || (pixFlags & NO_BG_PIX)) W_UnTileWindow(w); else XSetWindowBackgroundPixmap(W_Display, win->window, backPix[which]); W_ClearWindow(w); } void W_SetBackground(W_Window w, int which) { struct window *win = W_Void2Window(w); if ((backPix[which] == NoPixmapError) || (pixFlags & NO_BG_PIX)) W_UnTileWindow(w); else XSetWindowBackgroundPixmap(W_Display, win->window, backPix[which]); W_ClearWindow(w); } void *W_SetBackgroundImage(W_Window w, char *name) { Drawable drawable = W_Void2Window(w)->window; struct S_Object *sprite = calloc(1, sizeof(struct S_Object)); char *path; if (sprite == NULL) return NULL; GetPixmapDir(); path = malloc(strlen(pixmapDir) + strlen(name) + 2); if (path == NULL) return NULL; sprintf(path, "%s/%s", pixmapDir, name); if (ReadFileToSprite(path, sprite, drawable)) { free(path); return NULL; } free(path); XSetWindowBackgroundPixmap(W_Display, drawable, sprite->image); W_ClearWindow(w); return (void *) sprite; } static struct S_Object *ss = NULL; static int ss_size = 0; static int ss_next = 0; static int ss_show = 0; static void ss_init(W_Window w) { char *path, *argv[2]; FTS *fts; FTSENT *ent; Drawable drawable = W_Void2Window(w)->window; if (ss != NULL) return; GetPixmapDir(); path = malloc(strlen(pixmapDir) + 4); sprintf(path, "%s/ss", pixmapDir); argv[0] = path; argv[1] = NULL; ss_size = 50; ss = (struct S_Object *) malloc(ss_size * sizeof(struct S_Object)); ss_next = 0; fts = fts_open(argv, FTS_LOGICAL, NULL); while ((ent = fts_read(fts))) { if (ent->fts_info != FTS_F) continue; memset(&ss[ss_next], 0, sizeof(struct S_Object)); if (ReadFileToSprite(ent->fts_path, &ss[ss_next], drawable)) continue; ss_next++; if (ss_next >= ss_size) { ss_size += 10; ss = realloc(ss, ss_size * sizeof(struct S_Object)); } } fts_close(fts); free(path); } void W_NextScreenShot(W_Window w, int x, int y) { ss_init(w); if (ss_next == 0) return; W_ClearSpriteAbsolute(&ss[ss_show], x, y); ss_show++; if (ss_show >= ss_next) ss_show=0; W_DrawSpriteAbsolute(&ss[ss_show], x, y); } void W_DrawScreenShot(W_Window w, int x, int y) { ss_init(w); if (ss_next == 0) return; W_DrawSpriteAbsolute(&ss[ss_show], x, y); } void *W_ReadImage(W_Window w, char *name) { Drawable drawable = W_Void2Window(w)->window; struct S_Object *sprite = calloc(1, sizeof(struct S_Object)); char *path; if (sprite == NULL) return NULL; GetPixmapDir(); path = malloc(strlen(pixmapDir) + strlen(name) + 2); if (path == NULL) return NULL; sprintf(path, "%s/%s", pixmapDir, name); if (ReadFileToSprite(path, sprite, drawable)) { free(path); return NULL; } free(path); return (void *) sprite; } void W_DrawImage(int x, int y, void *sprite_v) { struct S_Object *sprite = (struct S_Object *) sprite_v; if (sprite == NULL) return; W_DrawSpriteAbsolute(sprite, x, y); } void W_DropImage(void *sprite_v) { struct S_Object *sprite = (struct S_Object *) sprite_v; if (sprite == NULL) return; XFreeGC(W_Display, sprite->gc); XFreePixmap(W_Display, sprite->image); XFreePixmap(W_Display, sprite->shape); free(sprite); } netrek-client-cow-3.3.2/socket.h0000664000175000017500000000557613657750470015527 0ustar jamesjames#include /* socket.c */ // void dummy(void); // void print_sp_s_torp(char *sbuf, int type); // int resetForce(void); // int checkForce(void); void connectToServer(int port); // int set_tcp_opts(int s); // int set_udp_opts(int s); void callServer(int port, char *server); int isServerDead(void); void socketPauseNoUser(void); void socketPause(void); int readFromServer(fd_set *readfds); // int dotimers(void); int getvpsize(char *bufptr); // int doRead(int asock); // void handleTorp(struct torp_spacket *packet); // void handleTorpInfo(struct torp_info_spacket *packet); // void handleStatus(struct status_spacket *packet); // void handleSelf(struct you_spacket *packet); // void handlePlayer(struct player_spacket *packet); // void handleWarning(struct warning_spacket *packet); void sendShortPacket(char type, char state); void sendServerPacket(void *packet); // void handlePlanet(struct planet_spacket *packet); // void handlePhaser(struct phaser_spacket *packet); void handleMessage(struct mesg_spacket *packet); // void handleQueue(struct queue_spacket *packet); void sendTeamReq(int team, int ship); // void handlePickok(struct pickok_spacket *packet); void sendLoginReq(char *name, char *pass, char *login, char query); // void handleLogin(struct login_spacket *packet); void sendTractorReq(char state, char pnum); void sendRepressReq(char state, char pnum); void sendDetMineReq(short int torp); // void handlePlasmaInfo(struct plasma_info_spacket *packet); // void handlePlasma(struct plasma_spacket *packet); // void handleFlags(struct flags_spacket *packet); // void handleKills(struct kills_spacket *packet); // void handlePStatus(struct pstatus_spacket *packet); // void handleMotd(struct motd_spacket *packet); void sendMessage(char *mes, int group, int indiv); // void handleMask(struct mask_spacket *packet); void sendOptionsPacket(void); // void handleBadVersion(struct badversion_spacket *packet); int gwrite(int fd, char *buf, int bytes); // void handleHostile(struct hostile_spacket *packet); // void handlePlyrLogin(struct plyr_login_spacket *packet, int sock); // void handleStats(struct stats_spacket *packet); // void handlePlyrInfo(struct plyr_info_spacket *packet); void sendUpdatePacket(LONG speed); // void handlePlanetLoc(struct planet_loc_spacket *packet); // void handleReserved(struct reserved_spacket *packet, int sock); // void handleShipCap(struct ship_cap_spacket *packet); void sendUdpReq(int req); // void handleUdpReply(struct udp_reply_spacket *packet); int closeUdpConn(void); void printUdpInfo(void); // void handleSequence(struct sequence_spacket *packet); // void Log_Packet(char type, int act_size); // void Log_OPacket(int type, int size); void Dump_Packet_Log_Info(void); // void print_packet(char *packet, int size); // void print_opacket(char *packet, int size); // char *strcpyp_return(register char *s1, register char *s2, register int length); void become(struct player *pl); netrek-client-cow-3.3.2/copyright.h0000664000175000017500000000200313657750470016225 0ustar jamesjames /* Copyright (c) 1986 Chris Guthrie * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. No representations are made about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * ----------------------------------------------------------- Copyright 1989 * Kevin P. Smith Scott Silvey * * ditto. * * ----------------------------------------------------------- Copyright 1993 * * As above. Use at your own risk. * * COW (BRM) authors (including but not limitted to: Kevin Powell Nick Trown * Jeff Nelson Kurt Siegl) * ----------------------------------------------------------- Copyright 1994 * * As above. * * Hockey Lines added to COW by Nathan Doss Michael Kantner */ netrek-client-cow-3.3.2/senddist.h0000664000175000017500000000016113657750470016035 0ustar jamesjames/* senddist.c */ void emergency(enum dist_type i, W_Event *data); int pmacro(int mnum, char who, W_Event *data); netrek-client-cow-3.3.2/redraw.c0000664000175000017500000002415313657750470015506 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include #include #include INC_SYS_TIME #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "playback.h" #include "playerlist.h" #include "local.h" #include "map.h" #include "socket.h" #include "interface.h" #include "redraw.h" #include "death.h" #include "dashboard.h" #include "stats.h" static void stline(int flag); static void updateMaxStats(int redraw); static time_t lastread; static int needredraw = 0; static unsigned long lastredraw = 0; void intrupt(fd_set *readfds) { time_t time(time_t *); unsigned long t; udcounter++; #ifdef RECORDGAME if (playback) needredraw |= readFromFile(); else #endif needredraw |= readFromServer(readfds); t = msetime(); if (needredraw && (t >= lastredraw + redrawDelay * 100)) { lastredraw = t; needredraw = 0; lastread = time(NULL); redraw(); updateMaxStats(0); /* update the max stats */ #ifdef WIN32 W_FlushScrollingWindow(messwa); W_FlushScrollingWindow(messwt); W_FlushScrollingWindow(messwi); W_FlushScrollingWindow(messwk); W_FlushScrollingWindow(reviewWin); W_FlushScrollingWindow(phaserwin); #endif UpdatePlayerList(); } if (reinitPlanets) { initPlanets(); reinitPlanets = 0; } if (me->p_status == POUTFIT) { death(); } #if defined(SOUND) && defined(sgi) else Engine_Sound(me->p_speed, me->p_ship.s_maxspeed); #endif return; } void redraw(void) { /* erase warning line if necessary */ if ((warntimer <= udcounter) && (warncount > 0)) { /* XFIX */ W_ClearArea(warnw, 5, 5, W_Textwidth * warncount, W_Textheight); warncount = 0; } run_clock(lastread); /* for hosers who don't know what a Xclock is */ clearLocal(); #ifdef BEEPLITE if (tts_timer) { static int last_width; tts_timer--; if (!tts_timer) { /* timed out */ W_EraseTTSText(w, TWINSIDE, tts_pos, last_width); last_width = 0; } else if (tts_timer == tts_time - 1 && last_width) { /* first draw -- erase previous */ W_EraseTTSText(w, TWINSIDE, tts_pos, last_width); /* draw new */ W_WriteTTSText(w, TWINSIDE, tts_pos, tts_width, lastIn, tts_len); last_width = tts_width; } else { /* regular draw */ W_WriteTTSText(w, TWINSIDE, tts_pos, tts_width, lastIn, tts_len); last_width = tts_width; } } #endif local(); /* redraw local window */ W_FlushLineCaches(w); /* XFIX */ if (newDashboard) /* 6/2/93 LAB */ if (newDashboard == old_db) db_redraw(0); else redrawTstats(); else if (newDashboard == old_db) stline(0); else redrawTstats(); old_db = newDashboard; if (W_IsMapped(statwin)) updateStats(); /* XFIX: last since its least accurate information */ map(); return; } static void stline(int flag) { static char buf1[80]; static char buf2[80]; static char whichbuf = 0; register char *buf, *oldbuf; register char *s; register int i, j; int k; struct player *plr; if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV)) plr = players + me->p_playerl; else plr = me; /* Instead of one sprintf, we do all this by hand for optimization */ if (flag) whichbuf = 0; /* We must completely * * * refresh */ if (whichbuf != 2) { buf = buf1; oldbuf = buf2; } else { buf = buf2; oldbuf = buf1; } buf[0] = (me->p_flags & PFSHIELD ? 'S' : ' '); if (me->p_flags & PFGREEN) buf[1] = 'G'; else if (me->p_flags & PFYELLOW) buf[1] = 'Y'; else if (me->p_flags & PFRED) buf[1] = 'R'; buf[2] = (me->p_flags & (PFPLLOCK | PFPLOCK) ? 'L' : ' '); buf[3] = (me->p_flags & PFREPAIR ? 'R' : ' '); buf[4] = (me->p_flags & PFBOMB ? 'B' : ' '); buf[5] = (me->p_flags & PFORBIT ? 'O' : ' '); if (me->p_ship.s_type == STARBASE) buf[6] = (me->p_flags & PFDOCKOK ? 'D' : ' '); else buf[6] = (me->p_flags & PFDOCK ? 'D' : ' '); buf[7] = (me->p_flags & PFCLOAK ? 'C' : ' '); buf[8] = (me->p_flags & PFWEP ? 'W' : ' '); buf[9] = (me->p_flags & PFENG ? 'E' : ' '); if (me->p_flags & PFPRESS) buf[10] = 'P'; else if (me->p_flags & PFTRACT) buf[10] = 'T'; else buf[10] = ' '; if (me->p_flags & PFBEAMUP) buf[11] = 'u'; else if (me->p_flags & PFBEAMDOWN) buf[11] = 'd'; else buf[11] = ' '; buf[12] = (status->tourn) ? 't' : ' '; buf[13] = ' '; buf[14] = '0' + ((me->p_speed % 100) / 10); if (buf[14] == '0') buf[14] = ' '; buf[15] = '0' + (me->p_speed % 10); /* speed */ buf[16] = ' '; buf[17] = ' '; buf[18] = '0' + (me->p_damage / 100); if (buf[18] == '0') buf[18] = ' '; buf[19] = '0' + ((me->p_damage % 100) / 10); if ((buf[19] == '0') && (me->p_damage < 100)) buf[19] = ' '; buf[20] = '0' + (me->p_damage % 10); buf[21] = ' '; buf[22] = '0' + (me->p_shield / 100); if (buf[22] == '0') buf[22] = ' '; buf[23] = '0' + ((me->p_shield % 100) / 10); if ((buf[23] == '0') && (me->p_shield < 100)) buf[23] = ' '; buf[24] = '0' + (me->p_shield % 10); buf[25] = ' '; buf[26] = ' '; buf[27] = '0' + ((plr->p_ntorp % 100) / 10); if (buf[27] == '0') buf[27] = ' '; buf[28] = '0' + (plr->p_ntorp % 10); buf[29] = ' '; buf[30] = ' '; buf[31] = ' '; buf[32] = '0' + ((int) (plr->p_kills / 100)); if (buf[32] == '0') buf[32] = ' '; buf[33] = '0' + ((int) (plr->p_kills / 10)) % 10; if (buf[32] == ' ' && buf[33] == '0') buf[33] = ' '; buf[34] = '0' + (((int) plr->p_kills) % 10); buf[35] = '.'; buf[36] = '0' + (((int) (plr->p_kills * 10)) % 10); buf[37] = '0' + (((int) (plr->p_kills * 100)) % 10); buf[38] = ' '; buf[39] = ' '; buf[40] = ' '; buf[41] = ' '; buf[42] = '0' + ((me->p_armies % 100) / 10); if (buf[42] == '0') buf[42] = ' '; buf[43] = '0' + (me->p_armies % 10); buf[44] = ' '; buf[45] = ' '; buf[46] = '0' + (me->p_fuel / 100000); if (buf[46] == '0') buf[46] = ' '; buf[47] = '0' + ((me->p_fuel % 100000) / 10000); if ((buf[47] == '0') && (me->p_fuel < 100000)) buf[47] = ' '; buf[48] = '0' + ((me->p_fuel % 10000) / 1000); if ((buf[48] == '0') && (me->p_fuel < 10000)) buf[48] = ' '; buf[49] = '0' + ((me->p_fuel % 1000) / 100); if ((buf[49] == '0') && (me->p_fuel < 1000)) buf[49] = ' '; buf[50] = '0' + ((me->p_fuel % 100) / 10); if ((buf[50] == '0') && (me->p_fuel < 100)) buf[50] = ' '; buf[51] = '0' + (me->p_fuel % 10); buf[52] = ' '; buf[53] = ' '; buf[54] = ' '; buf[55] = '0' + ((me->p_wtemp / 10) / 100); if (buf[55] == '0') buf[55] = ' '; buf[56] = '0' + (((me->p_wtemp / 10) % 100) / 10); if ((buf[56] == '0') && (me->p_wtemp < 1000)) buf[56] = ' '; buf[57] = '0' + ((me->p_wtemp / 10) % 10); buf[58] = ' '; buf[59] = ' '; buf[60] = ' '; buf[61] = '0' + ((me->p_etemp / 10) / 100); if (buf[61] == '0') buf[61] = ' '; buf[62] = '0' + (((me->p_etemp / 10) % 100) / 10); if ((buf[62] == '0') && (me->p_etemp < 1000)) buf[62] = ' '; buf[63] = '0' + ((me->p_etemp / 10) % 10); if (whichbuf == 0) { /* Draw status line */ W_WriteText(tstatw, 50, 16, textColor, buf, 64, W_RegularFont); whichbuf = 1; } else { /* Hacks to make it print * * * only what is necessary */ whichbuf = 3 - whichbuf; j = -1; for (i = 0; i < 64; i++) { if (*(buf++) != *(oldbuf++)) { /* Different string */ if (j == -1) { k = i; s = buf - 1; } j = 0; } else { /* Same string */ if (j == -1) continue; j++; if (j == 20) { /* Random number */ W_WriteText(tstatw, 50 + W_Textwidth * k, 16, textColor, s, i - k - 19, W_RegularFont); j = -1; } } } if (j != -1) { W_WriteText(tstatw, 50 + W_Textwidth * k, 16, textColor, s, i - k - j, W_RegularFont); } } } /* that's not used anymore 13/04/94 [007] newcourse(int x, int y) { * return ((unsigned char) nint(atan2((double) (x - me->p_x), (double) * (me->p_y - y)) / 3.14159 * 128.)); } */ void redrawTstats(void) { if (newDashboard) /* 6/2/93 LAB */ db_redraw(1); else { W_ClearWindow(tstatw); stline(1); /* This is for refresh. We redraw player stats too */ updateMaxStats(1); /* Seperated it */ } return; } /* update stat window record for max speed, army capacity */ static void updateMaxStats(int redraw) { char buf[BUFSIZ]; static int lastdamage = -1; static int lastkills = -1; static int lastship = -1; int maxspeed; int troop_capacity; float kills; int mykills; if (newDashboard) return; if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV)) kills = players[me->p_playerl].p_kills; else kills = me->p_kills; mykills = (int) (10. * kills); /* don't really need a update if nothing's changed! */ if (!redraw && lastkills == mykills && lastship == me->p_ship.s_type && lastdamage == me->p_damage) return; lastkills = mykills; lastdamage = me->p_damage; lastship = me->p_ship.s_type; if (me->p_ship.s_type == ASSAULT) troop_capacity = (((kills * 3) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (kills * 3)); else if (me->p_ship.s_type != STARBASE) troop_capacity = (((kills * 2) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (kills * 2)); else troop_capacity = me->p_ship.s_maxarmies; maxspeed = (me->p_ship.s_maxspeed + 2) - (me->p_ship.s_maxspeed + 1) * ((float) me->p_damage / (float) (me->p_ship.s_maxdamage)); if (maxspeed > me->p_ship.s_maxspeed) maxspeed = me->p_ship.s_maxspeed; if (maxspeed < 0) maxspeed = 0; sprintf(buf, "Flags Warp Dam Shd Torps Kills Armies Fuel Wtemp Etemp Time"); W_WriteText(tstatw, 50, 5, textColor, buf, strlen(buf), W_RegularFont); sprintf(buf, "Maximum: %2d/%2d %3d %3d %2d/%2d %6d %3d %3d", maxspeed, me->p_ship.s_maxspeed, me->p_ship.s_maxdamage, me->p_ship.s_maxshield, troop_capacity, me->p_ship.s_maxarmies, me->p_ship.s_maxfuel, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxegntemp / 10); W_WriteText(tstatw, 50, 27, textColor, buf, strlen(buf), W_RegularFont); } netrek-client-cow-3.3.2/tools.h0000664000175000017500000000010213657750470015353 0ustar jamesjames/* tools.c */ void sendTools(char *str); void showToolsWin(void); netrek-client-cow-3.3.2/version.h0000664000175000017500000000021413657750470015704 0ustar jamesjames#include "config.h" /* store the version info here */ #define mvers "3.3" #define version "COW 3.3" #define LIBMAJOR 3 #define LIBMINOR 3 netrek-client-cow-3.3.2/smessage.c0000664000175000017500000002777413657750470016045 0ustar jamesjames/* * smessage.c */ #include "config.h" #include "copyright.h" #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "dmessage.h" #include "socket.h" #include "tools.h" #include "warning.h" #include "smessage.h" static int lcount; static int HUDoffset; static int talkative = 0; static char buf[80]; static char cursor = '_'; static char mbuf[80]; char *getaddr(char who), *getaddr2(int flags, int recip); /* XFIX */ #define BLANKCHAR(col, n) W_ClearArea(messagew, 5+W_Textwidth*(col), 5, \ W_Textwidth * (n), W_Textheight); #define DRAWCURSOR(col) W_WriteText(messagew, 5+W_Textwidth*(col), 5, \ textColor, &cursor, 1, W_RegularFont); #define TESTCAP(c,s) (c ? strcap(s) : s) /* Routines to handle multi-window messaging */ void DisplayMessage() { int len = strlen(outmessage); #ifdef XTRA_MESSAGE_UI if (HUDoffset) W_WriteText(w, 5, HUDoffset, textColor, outmessage, len, W_RegularFont); #endif W_ClearWindow(messagew); if (len == 0 && talkative < 5 && !isServerDead()) { W_WriteText(messagew, 5, 5, W_Red, "Talk to everyone, click here, type, press enter. " "Read and learn.", -1, W_RegularFont); } else { W_WriteText(messagew, 5, 5, textColor, outmessage, len, W_RegularFont); } } void AddChar(char *twochar) { #ifdef XTRA_MESSAGE_UI if (HUDoffset) W_WriteText(w, 5 + W_Textwidth * lcount, HUDoffset, textColor, twochar, 2, W_RegularFont); #endif W_WriteText(messagew, 5 + W_Textwidth * lcount, 5, textColor, twochar, 2, W_RegularFont); } void BlankChar(int HUDoffsetcol, int len) { #ifdef XTRA_MESSAGE_UI if (HUDoffset) W_ClearArea(w, 5 + W_Textwidth * (HUDoffsetcol), HUDoffset, W_Textwidth * (len), W_Textheight); #endif W_ClearArea(messagew, 5 + W_Textwidth * (HUDoffsetcol), 5, W_Textwidth * (len), W_Textheight); } void DrawCursor(int col) { #ifdef XTRA_MESSAGE_UI if (HUDoffset) W_WriteText(w, 5 + W_Textwidth * (col), HUDoffset, textColor, &cursor, 1, W_RegularFont); #endif W_WriteText(messagew, 5 + W_Textwidth * (col), 5, textColor, &cursor, 1, W_RegularFont); } void smessage(char ichar) { int i; char *getaddr(char who); char twochar[2]; static char addr, *addr_str, *pm; if (messpend == 0) { messpend = 1; #ifdef XTRA_MESSAGE_UI /* Figure out where to put the message on the local */ switch (messageHUD) { case 1: HUDoffset = 5; break; case 2: HUDoffset = W_WindowHeight(w) - W_Textheight - 5; break; default: HUDoffset = 0; } #endif /* Put the proper recipient in the window */ #ifdef TOOLS if (keys[0] != '\0') { if ((pm = INDEX((char *) keys, ichar))) ichar = macroKeys[pm - (char *) keys].dest; } #endif if ((ichar == 't') || (ichar == 'T')) addr = teamlet[me->p_team]; else addr = ichar; addr_str = getaddr(addr); if (addr_str == 0) { /* print error message */ messpend = 0; message_off(); return; } strcat(outmessage, addr_str); lcount = ADDRLEN; DrawCursor(ADDRLEN); while (strlen(outmessage) < ADDRLEN) { strcat(outmessage, " "); } strcat(outmessage, "_"); /* Display the header */ DisplayMessage(); return; } if (ichar == ((char) ('h' + 96)) || ichar == ((char) ('H' + 96))) ichar = '\b'; else if (ichar == ((char) ('[' + 96))) ichar = '\033'; else if (ichar == ((char) ('m' + 96)) || ichar == ((char) ('M' + 96))) ichar = '\r'; else if (ichar == ((char) ('j' + 96)) || ichar == ((char) ('J' + 96))) ichar = '\r'; else if (ichar == ((char) ('u' + 96)) || ichar == ((char) ('U' + 96))) ichar = 23; switch ((unsigned char) ichar & ~(0x80)) { case '\b': /* character erase */ case '\177': if (--lcount < ADDRLEN) { lcount = ADDRLEN; break; } BlankChar(lcount + 1, 1); DrawCursor(lcount); outmessage[lcount + 1] = '\0'; outmessage[lcount] = cursor; break; case '\033': /* abort message */ BlankChar(0, lcount + 1); mdisplayed = 0; messpend = 0; message_off(); for (i = 0; i < 80; i++) { outmessage[i] = '\0'; } DisplayMessage(); break; case 23: /* erase to start, but continue in message mode */ while (--lcount >= ADDRLEN) { BlankChar(lcount + 1, 1); DrawCursor(lcount); outmessage[lcount + 1] = '\0'; outmessage[lcount] = cursor; } lcount = ADDRLEN; break; case '\r': /* send message */ talkative++; buf[lcount - ADDRLEN] = '\0'; messpend = 0; for (i = 0; i < 80; i++) { outmessage[i] = '\0'; } switch (addr) { case 'A': pmessage(buf, 0, MALL); break; case 'F': pmessage(buf, FED, MTEAM); break; case 'R': pmessage(buf, ROM, MTEAM); break; case 'K': pmessage(buf, KLI, MTEAM); break; case 'O': pmessage(buf, ORI, MTEAM); break; case 'G': pmessage(buf, 0, MGOD); break; #ifdef TOOLS case '!': pmessage(buf, 0, MTOOLS); break; #endif case 'M': pmessage(buf, 0, MMOO); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (players[addr - '0'].p_status == PFREE) { warning("That player left the game. message not sent."); return; } pmessage(buf, addr - '0', MINDIV); break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': if (players[addr - 'a' + 10].p_status == PFREE) { warning("That player left the game. message not sent."); return; } pmessage(buf, addr - 'a' + 10, MINDIV); break; default: warning("Not legal recipient"); } BlankChar(0, lcount + 1); DisplayMessage(); mdisplayed = 0; lcount = 0; break; default: /* add character */ if (lcount >= 79) { W_Beep(); break; } if (iscntrl((unsigned char) ichar & ~(0x80))) break; twochar[0] = ichar; twochar[1] = cursor; AddChar(twochar); outmessage[lcount] = ichar; outmessage[lcount + 1] = cursor; buf[(lcount++) - ADDRLEN] = ichar; break; } } void pmessage(char *str, int recip, int group) { char newbuf[100]; /* message length failsafe and last message saving - jn 6/17/93 */ lastMessage[0] = '\0'; strncat(lastMessage, str, 79); str = lastMessage; switch (group) { #ifdef TOOLS case MTOOLS: sendTools(str); break; #endif case MMOO: strcpy(defaultsFile, str); sprintf(mbuf, "changing defaultsFile to %s", str); warning(mbuf); break; default: sendMessage(str, group, recip); } if ((group == MTEAM && recip != me->p_team) || (group == MINDIV && recip != me->p_no)) { sprintf(newbuf, "%s %s", getaddr2(group, recip), str); newbuf[79] = 0; dmessage(newbuf, group, me->p_no, recip); } message_off(); } char * getaddr(char who) { switch (who) { case 'A': return (getaddr2(MALL, 0)); case 'F': return (getaddr2(MTEAM, FED)); case 'R': return (getaddr2(MTEAM, ROM)); case 'K': return (getaddr2(MTEAM, KLI)); case 'O': return (getaddr2(MTEAM, ORI)); case 'G': return (getaddr2(MGOD, 0)); case 'M': return (getaddr2(MMOO, 0)); #ifdef TOOLS case '!': return (getaddr2(MTOOLS, 0)); #endif case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (players[who - '0'].p_status == PFREE) { warning("Slot is not alive."); return 0; } return (getaddr2(MINDIV, who - '0')); break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': if (who - 'a' + 10 > MAXPLAYER) { warning("Player is not in game"); return (0); } if (players[who - 'a' + 10].p_status == PFREE) { warning("Slot is not alive."); return 0; } return (getaddr2(MINDIV, who - 'a' + 10)); break; default: warning("Not legal recipient"); return (0); } } char *getaddr2(int flags, int recip) { static char addrmesg[ADDRLEN]; (void) sprintf(addrmesg, " %c%c->", teamlet[me->p_team], shipnos[me->p_no]); switch (flags) { case MALL: (void) sprintf(&addrmesg[5], "ALL"); break; case MTEAM: (void) sprintf(&addrmesg[5], "%s", teamshort[recip]); break; case MINDIV: if (maskrecip) { (void) sprintf(&addrmesg[5], "?? "); maskrecip = 0; } else { /* printf("smessage:getaddr2 recip=%d\n",recip); */ (void) sprintf(&addrmesg[5], "%c%c ", teamlet[players[recip].p_team], shipnos[recip]); } break; case MGOD: (void) sprintf(&addrmesg[5], "GOD"); break; #ifdef TOOLS case MTOOLS: (void) sprintf(addrmesg, "COW: sh>"); break; #endif case MMOO: (void) sprintf(&addrmesg[5], "MOO"); break; } return (addrmesg); } void message_on(void) { messageon = 1; W_DefineTextCursor(w); W_DefineTextCursor(mapw); #ifdef XTRA_MESSAGE_UI messMouseDelta = 0; if (lcount) DisplayMessage(); #endif } void message_off(void) { messageon = 0; W_DefineLocalcursor(w); W_DefineMapcursor(mapw); } #ifdef XTRA_MESSAGE_UI void message_hold(void) { char twochar[2] = {'#', ' '}; AddChar(twochar); message_off(); } #endif /* Used in NEWMACRO, useful elsewhere also */ int getgroup(char addr, int *recip) { *recip = 0; switch (addr) { case 'A': *recip = 0; return (MALL); break; case 'F': *recip = FED; return (MTEAM); break; case 'R': *recip = ROM; return (MTEAM); break; case 'K': *recip = KLI; return (MTEAM); break; case 'O': *recip = ORI; return (MTEAM); break; case 'G': *recip = 0; return (MGOD); break; #ifdef TOOLS case '!': *recip = 0; return (MTOOLS); break; #endif case 'M': *recip = 0; return (MMOO); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (players[addr - '0'].p_status == PFREE) { warning("That player left the game. message not sent."); return 0; } *recip = addr - '0'; return (MINDIV); break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': if (players[addr - 'a' + 10].p_status == PFREE) { warning("That player left the game. message not sent."); return 0; } *recip = addr - 'a' + 10; return (MINDIV); break; default: warning("Not legal recipient"); } return 0; } void pnbtmacro(int c) { switch (macro[c].who) { case 'A': pmessage(macro[c].string, 0, MALL); break; case 'F': pmessage(macro[c].string, FED, MTEAM); break; case 'R': pmessage(macro[c].string, ROM, MTEAM); break; case 'K': pmessage(macro[c].string, KLI, MTEAM); break; case 'O': pmessage(macro[c].string, ORI, MTEAM); break; case 'T': pmessage(macro[c].string, me->p_team, MTEAM); break; } } netrek-client-cow-3.3.2/packets.h0000664000175000017500000010277013657750470015663 0ustar jamesjames/* * Include file for socket I/O xtrek. * * Kevin P. Smith 1/29/89 */ #include "copyright2.h" #define STATUS_TOKEN "\t@@@" /* ATM */ /* * TCP and UDP use identical packet formats; the only difference is that, * when in UDP mode, all packets sent from server to client have a sequence * number appended to them. * * (note: ALL packets, whether sent on the TCP or UDP channel, will have * the sequence number. Thus it's important that client & server agree on * when to switch. This was done to keep critical and non-critical data * in sync.) */ /* general protocol state outline starting state CP_SOCKET CP_FEATURE, optional, to indicate feature packets are known SP_MOTD SP_FEATURE, only if CP_FEATURE was seen SP_QUEUE, optional, repeats until slot is available SP_YOU, indicates slot number assigned login state, player slot status is POUTFIT client shows name and password prompt and accepts input CP_LOGIN CP_FEATURE SP_LOGIN SP_YOU SP_PLAYER_INFO various other server packets outfit state, player slot status is POUTFIT client shows team selection window SP_MASK, sent regularly during outfit client accepts team selection input CP_OUTFIT SP_PICKOK, signals server acceptance of alive state alive state, server places ship in game and play begins SP_PSTATUS, indicates PDEAD state client animates explosion SP_PSTATUS, indicates POUTFIT state clients returns to team selection window CP_QUIT CP_BYE */ /* When making an index of a recording, if we need to save this packet. */ #define PB_CONTEXT(p) (\ p == 60 || /* handleFeature */ \ p == 14 || /* handleStatus */ \ p == 24 || /* handlePlyrLogin */ \ p == 2 || /* handlePlyrInfo */ \ p == 20 || /* handlePStatus */ \ p == 58 || /* handleVKills */ \ p == 15 || /* handlePlanet */ \ p == 26 || /* handlePlanetLoc */ \ p == 59 || /* handle_s_Stats */ \ p == 50 || /* handleVPlanet */ \ p == 3) /* handleKills */ #define RECORDPACKET(p) (\ p==SP_MESSAGE ||\ p==SP_PLAYER_INFO ||\ p==SP_KILLS ||\ p==SP_PLAYER ||\ p==SP_YOU ||\ p==SP_STATUS ||\ p==SP_PLANET ||\ p==SP_LOGIN ||\ p==SP_FLAGS ||\ p==SP_MASK ||\ p==SP_PSTATUS ||\ p==SP_BADVERSION ||\ p==SP_HOSTILE ||\ p==SP_STATS ||\ p==SP_PL_LOGIN ||\ p==SP_RESERVED ||\ p==SP_PLANET_LOC) /* packets sent from xtrek server to remote client */ #define SP_MESSAGE 1 #define SP_PLAYER_INFO 2 /* general player info not * * * * elsewhere */ #define SP_KILLS 3 /* # kills a player has */ #define SP_PLAYER 4 /* x,y for player */ #define SP_TORP_INFO 5 /* torp status */ #define SP_TORP 6 /* torp location */ #define SP_PHASER 7 /* phaser status and * * * direction */ #define SP_PLASMA_INFO 8 /* player login information */ #define SP_PLASMA 9 /* like SP_TORP */ #define SP_WARNING 10 /* like SP_MESG */ #define SP_MOTD 11 /* line from .motd screen */ #define SP_YOU 12 /* info on you? */ #define SP_QUEUE 13 /* estimated loc in queue? */ #define SP_STATUS 14 /* galaxy status numbers */ #define SP_PLANET 15 /* planet armies & * * * facilities */ #define SP_PICKOK 16 /* your team & ship was * * * accepted */ #define SP_LOGIN 17 /* login response */ #define SP_FLAGS 18 /* give flags for a player */ #define SP_MASK 19 /* tournament mode mask */ #define SP_PSTATUS 20 /* give status for a player */ #define SP_BADVERSION 21 /* invalid version number */ #define SP_HOSTILE 22 /* hostility settings for a * * * player */ #define SP_STATS 23 /* a player's statistics */ #define SP_PL_LOGIN 24 /* new player logs in */ #define SP_RESERVED 25 /* for future use */ #define SP_PLANET_LOC 26 /* planet name, x, y */ /* NOTE: not implemented */ #define SP_SCAN 27 /* ATM: results of player * * * scan */ #define SP_UDP_REPLY 28 /* notify client of UDP * * * status */ #define SP_SEQUENCE 29 /* sequence # packet */ #define SP_SC_SEQUENCE 30 /* this trans is * * * semi-critical info */ #ifdef RSA #define SP_RSA_KEY 31 /* handles binary */ #endif #define SP_GENERIC_32 32 #define SP_SHIP_CAP 39 /* Handles server ship mods */ #ifdef SHORT_PACKETS #define SP_S_REPLY 40 /* reply to send-short * * * request */ #define SP_S_MESSAGE 41 /* var. Message Packet */ #define SP_S_WARNING 42 /* Warnings with 4 Bytes */ #define SP_S_YOU 43 /* hostile,armies,whydead,etc * * * .. */ #define SP_S_YOU_SS 44 /* your ship status */ #define SP_S_PLAYER 45 /* variable length player * * * packet */ #endif #ifdef PING #define SP_PING 46 /* ping packet */ #endif #ifdef SHORT_PACKETS #define SP_S_TORP 47 /* variable length torp * * * packet */ #define SP_S_TORP_INFO 48 /* SP_S_TORP with TorpInfo */ #define SP_S_8_TORP 49 /* optimized SP_S_TORP */ #define SP_S_PLANET 50 /* see SP_PLANET */ /* S_P2 */ #define SP_S_SEQUENCE 56 /* SP_SEQUENCE for * * * compressed packets */ #define SP_S_PHASER 57 /* see struct */ #define SP_S_KILLS 58 /* # of kills player have */ #define SP_S_STATS 59 /* see SP_STATS */ #ifdef FEATURE_PACKETS #define CP_FEATURE 60 #define SP_FEATURE 60 #endif #define SP_RANK 61 #define SP_LTD 62 /* LTD stats for character */ /* variable length packets */ #define VPLAYER_SIZE 4 #define SHORTVERSION 11 /* other number blocks, like * * * UDP Version */ #define OLDSHORTVERSION 10 /* S_P2 */ #endif /* packets sent from remote client to xtrek server */ #define CP_MESSAGE 1 /* send a message */ #define CP_SPEED 2 /* set speed */ #define CP_DIRECTION 3 /* change direction */ #define CP_PHASER 4 /* phaser in a direction */ #define CP_PLASMA 5 /* plasma (in a direction) */ #define CP_TORP 6 /* fire torp in a direction */ #define CP_QUIT 7 /* self destruct */ #define CP_LOGIN 8 /* log in (name, password) */ #define CP_OUTFIT 9 /* outfit to new ship */ #define CP_WAR 10 /* change war status */ #define CP_PRACTR 11 /* create practice robot? */ #define CP_SHIELD 12 /* raise/lower sheilds */ #define CP_REPAIR 13 /* enter repair mode */ #define CP_ORBIT 14 /* orbit planet/starbase */ #define CP_PLANLOCK 15 /* lock on planet */ #define CP_PLAYLOCK 16 /* lock on player */ #define CP_BOMB 17 /* bomb a planet */ #define CP_BEAM 18 /* beam armies up/down */ #define CP_CLOAK 19 /* cloak on/off */ #define CP_DET_TORPS 20 /* detonate enemy torps */ #define CP_DET_MYTORP 21 /* detonate one of my torps */ #define CP_COPILOT 22 /* toggle copilot mode */ #define CP_REFIT 23 /* refit to different ship * * * * type */ #define CP_TRACTOR 24 /* tractor on/off */ #define CP_REPRESS 25 /* pressor on/off */ #define CP_COUP 26 /* coup home planet */ #define CP_SOCKET 27 /* new socket for * * * reconnection */ #define CP_OPTIONS 28 /* send my options to be * * * saved */ #define CP_BYE 29 /* I'm done! */ #define CP_DOCKPERM 30 /* set docking permissions */ #define CP_UPDATES 31 /* set number of usecs per * * * * update */ #define CP_RESETSTATS 32 /* reset my stats packet */ #define CP_RESERVED 33 /* for future use */ /* NOTE: not implemented. */ #define CP_SCAN 34 /* ATM: request for player * * * * scan */ #define CP_UDP_REQ 35 /* request UDP on/off */ #define CP_SEQUENCE 36 /* sequence # packet */ #ifdef RSA #define CP_RSA_KEY 37 /* handles binary * * * verification */ #endif #define CP_PING_RESPONSE 42 /* client response */ #ifdef SHORT_PACKETS #define CP_S_REQ 43 #define CP_S_THRS 44 #define CP_S_MESSAGE 45 /* vari. Message Packet */ #define CP_S_RESERVED 46 #define CP_S_DUMMY 47 #endif #define SOCKVERSION 4 #define UDPVERSION 10 struct packet_handler { int size; void (*handler) (); }; struct mesg_spacket { char type; /* SP_MESSAGE */ unsigned char m_flags; unsigned char m_recpt; unsigned char m_from; char mesg[80]; }; struct plyr_info_spacket { char type; /* SP_PLAYER_INFO */ char pnum; char shiptype; char team; }; struct plyr_login_spacket { char type; /* SP_PL_LOGIN */ char pnum; char rank; char pad1; char name[16]; char monitor[16]; char login[16]; }; struct hostile_spacket { char type; /* SP_HOSTILE */ char pnum; char war; char hostile; }; struct stats_spacket { char type; /* SP_STATS */ char pnum; char pad1; char pad2; LONG tkills; /* Tournament kills */ LONG tlosses; /* Tournament losses */ LONG kills; /* overall */ LONG losses; /* overall */ LONG tticks; /* ticks of tournament play * * * time */ LONG tplanets; /* Tournament planets */ LONG tarmies; /* Tournament armies */ LONG sbkills; /* Starbase kills */ LONG sblosses; /* Starbase losses */ LONG armies; /* non-tourn armies */ LONG planets; /* non-tourn planets */ LONG maxkills; /* max kills as player * 100 * */ LONG sbmaxkills; /* max kills as sb * 100 */ }; struct flags_spacket { char type; /* SP_FLAGS */ char pnum; /* whose flags are they? */ char tractor; char pad2; unsigned flags; }; struct kills_spacket { char type; /* SP_KILLS */ char pnum; char pad1; char pad2; unsigned kills; /* where 1234=12.34 kills * * * and 0=0.00 kills */ }; struct player_spacket { char type; /* SP_PLAYER */ char pnum; unsigned char dir; char speed; LONG x, y; }; struct torp_info_spacket { char type; /* SP_TORP_INFO */ char war; char status; /* TFREE, TDET, etc... */ char pad1; /* pad needed for cross cpu * * * compatibility */ unsigned short tnum; unsigned short pad2; }; struct torp_spacket { char type; /* SP_TORP */ unsigned char dir; unsigned short tnum; LONG x, y; }; struct phaser_spacket { char type; /* SP_PHASER */ char pnum; char status; /* PH_HIT, etc... */ unsigned char dir; LONG x, y; LONG target; }; struct you_spacket { char type; /* SP_YOU */ char pnum; /* Guy needs to know this... * */ char hostile; char swar; char armies; char tractor; char pad2; char pad3; unsigned flags; LONG damage; LONG shield; LONG fuel; unsigned short etemp; unsigned short wtemp; unsigned short whydead; unsigned short whodead; }; struct status_spacket { char type; /* SP_STATUS */ char tourn; char pad1; char pad2; unsigned armsbomb; unsigned planets; unsigned kills; unsigned losses; unsigned time; unsigned LONG timeprod; }; struct warning_spacket { char type; /* SP_WARNING */ char pad1; char pad2; char pad3; char mesg[80]; }; struct planet_spacket { char type; /* SP_PLANET */ char pnum; char owner; char info; unsigned short flags; unsigned short pad2; LONG armies; }; struct torp_cpacket { char type; /* CP_TORP */ unsigned char dir; /* direction to fire torp */ char pad1; char pad2; }; struct phaser_cpacket { char type; /* CP_PHASER */ unsigned char dir; char pad1; char pad2; }; struct speed_cpacket { char type; /* CP_SPEED */ char speed; char pad1; char pad2; }; struct dir_cpacket { char type; /* CP_DIRECTION */ unsigned char dir; char pad1; char pad2; }; struct shield_cpacket { char type; /* CP_SHIELD */ char state; /* up/down */ char pad1; char pad2; }; struct repair_cpacket { char type; /* CP_REPAIR */ char state; /* on/off */ char pad1; char pad2; }; struct orbit_cpacket { char type; /* CP_ORBIT */ char state; /* on/off */ char pad1; char pad2; }; struct practr_cpacket { char type; /* CP_PRACTR */ char pad1; char pad2; char pad3; }; struct bomb_cpacket { char type; /* CP_BOMB */ char state; char pad1; char pad2; }; struct beam_cpacket { char type; /* CP_BEAM */ char state; char pad1; char pad2; }; struct cloak_cpacket { char type; /* CP_CLOAK */ char state; char pad1; char pad2; }; struct det_torps_cpacket { char type; /* CP_DET_TORPS */ char pad1; char pad2; char pad3; }; struct copilot_cpacket { char type; /* CP_COPLIOT */ char state; char pad1; char pad2; }; struct queue_spacket { char type; /* SP_QUEUE */ char pad1; unsigned short pos; }; struct outfit_cpacket { char type; /* CP_OUTFIT */ char team; char ship; char pad1; }; struct pickok_spacket { char type; /* SP_PICKOK */ char state; char pad2; char pad3; }; struct login_cpacket { char type; /* CP_LOGIN */ char query; char pad2; char pad3; char name[16]; char password[16]; char login[16]; }; struct login_spacket { char type; /* SP_LOGIN */ char accept; /* 1/0 */ char pad2; char pad3; LONG flags; char keymap[96]; }; struct tractor_cpacket { char type; /* CP_TRACTOR */ char state; char pnum; char pad2; }; struct repress_cpacket { char type; /* CP_REPRESS */ char state; char pnum; char pad2; }; struct det_mytorp_cpacket { char type; /* CP_DET_MYTORP */ char pad1; unsigned short tnum; }; struct war_cpacket { char type; /* CP_WAR */ char newmask; char pad1; char pad2; }; struct refit_cpacket { char type; /* CP_REFIT */ char ship; char pad1; char pad2; }; struct plasma_cpacket { char type; /* CP_PLASMA */ unsigned char dir; char pad1; char pad2; }; struct plasma_info_spacket { char type; /* SP_PLASMA_INFO */ char war; char status; /* TFREE, TDET, etc... */ char pad1; /* pad needed for cross cpu * * * compatibility */ unsigned short pnum; unsigned short pad2; }; struct plasma_spacket { char type; /* SP_PLASMA */ char pad1; unsigned short pnum; LONG x, y; }; struct playlock_cpacket { char type; /* CP_PLAYLOCK */ char pnum; char pad1; char pad2; }; struct planlock_cpacket { char type; /* CP_PLANLOCK */ char pnum; char pad1; char pad2; }; struct coup_cpacket { char type; /* CP_COUP */ char pad1; char pad2; char pad3; }; struct pstatus_spacket { char type; /* SP_PSTATUS */ char pnum; char status; char pad1; }; struct motd_spacket { char type; /* SP_MOTD */ char pad1; char pad2; char pad3; char line[80]; }; struct quit_cpacket { char type; /* CP_QUIT */ char pad1; char pad2; char pad3; }; struct mesg_cpacket { char type; /* CP_MESSAGE */ char group; char indiv; char pad1; char mesg[80]; }; struct mask_spacket { char type; /* SP_MASK */ char mask; char pad1; char pad2; }; struct socket_cpacket { char type; /* CP_SOCKET */ char version; char udp_version; /* was pad2 */ char pad3; unsigned socket; }; struct options_cpacket { char type; /* CP_OPTIONS */ char pad1; char pad2; char pad3; unsigned flags; char keymap[96]; }; struct bye_cpacket { char type; /* CP_BYE */ char pad1; char pad2; char pad3; }; struct badversion_spacket { char type; /* SP_BADVERSION */ char why; char pad2; char pad3; }; struct dockperm_cpacket { char type; /* CP_DOCKPERM */ char state; char pad2; char pad3; }; struct updates_cpacket { char type; /* CP_UPDATES */ char pad1; char pad2; char pad3; unsigned usecs; }; struct resetstats_cpacket { char type; /* CP_RESETSTATS */ char verify; /* 'Y' - just to make sure * * * * he meant it */ char pad2; char pad3; }; struct reserved_spacket { char type; /* SP_RESERVED */ char pad1; char pad2; char pad3; char data[16]; }; struct reserved_cpacket { char type; /* CP_RESERVED */ char pad1; char pad2; char pad3; char data[16]; char resp[16]; }; struct udp_req_cpacket { /* UDP */ char type; /* CP_UDP_REQ */ char request; char connmode; /* respond with port # or * * * just send UDP packet? */ char pad2; int port; /* compensate for hosed * * * recvfrom() */ }; struct ping_cpacket { char type; /* CP_PING_RESPONSE */ unsigned char number; /* id */ char pingme; /* if client wants server to * * * ping */ char pad1; LONG cp_sent; /* # packets sent to server */ LONG cp_recv; /* # packets recv from * * * server */ }; struct ping_spacket { char type; /* SP_PING */ unsigned char number; /* id (ok to wrap) */ unsigned short lag; /* delay of last ping in ms */ unsigned char tloss_sc; /* total loss server-client * * * 0-100% */ unsigned char tloss_cs; /* total loss client-server * * * 0-100% */ unsigned char iloss_sc; /* inc. loss server-client * * * * 0-100% */ unsigned char iloss_cs; /* inc. loss client-server * * * * 0-100% */ }; struct sequence_cpacket { /* UDP */ char type; /* CP_SEQUENCE */ char pad1; unsigned short sequence; }; struct sc_sequence_spacket { /* UDP */ char type; /* SP_CP_SEQUENCE */ char pad1; unsigned short sequence; }; struct udp_reply_spacket { /* UDP */ char type; /* SP_UDP_REPLY */ char reply; char pad1; char pad2; int port; }; struct sequence_spacket { /* UDP */ char type; /* SP_SEQUENCE */ unsigned char flag16; unsigned short sequence; }; struct planet_loc_spacket { char type; /* SP_PLANET_LOC */ char pnum; char pad2; char pad3; LONG x; LONG y; char name[16]; }; #ifdef FEATURE_PACKETS struct feature_cpacket { char type; char feature_type; char arg1, arg2; int value; char name[80]; }; #endif struct rank_spacket { /* SP_RANK py-struct pending #61 */ char type; char rnum; /* rank number */ char rmax; /* rank number maximum */ char pad; char name[NAME_LEN]; /* full rank name */ int hours; /* hundredths of hours required */ int ratings; /* hundredths of ratings required */ int offense; /* hundredths of offense required */ char cname[8]; /* short 'curt' rank name */ }; #define LTD_VERSION 'a' /* version for SP_LTD packet */ struct ltd_spacket { /* SP_LTD py-struct pending #62 */ char type; char version; char pad[2]; unsigned int kt; /* kills total, kills.total */ unsigned int kmax; /* kills max, kills.max */ unsigned int k1; /* kills first, kills.first */ unsigned int k1p; /* kills first potential, kills.first_potential */ unsigned int k1c; /* kills first converted, kills.first_converted */ unsigned int k2; /* kills second, kills.second */ unsigned int k2p; /* kills second potential, kills.second_potential */ unsigned int k2c; /* kills second converted, kills.second_converted */ unsigned int kbp; /* kills by phaser, kills.phasered */ unsigned int kbt; /* kills by torp, kills.torped */ unsigned int kbs; /* kills by smack, kills.plasmaed */ unsigned int dt; /* deaths total, deaths.total */ unsigned int dpc; /* deaths as potential carrier, deaths.potential */ unsigned int dcc; /* deaths as converted carrier, deaths.converted */ unsigned int ddc; /* deaths as dooshed carrier, deaths.dooshed */ unsigned int dbp; /* deaths by phaser, deaths.phasered */ unsigned int dbt; /* deaths by torp, deaths.torped */ unsigned int dbs; /* deaths by smack, deaths.plasmaed */ unsigned int acc; /* actual carriers created, deaths.acc */ unsigned int ptt; /* planets taken total, planets.taken */ unsigned int pdt; /* planets destroyed total, planets.destroyed */ unsigned int bpt; /* bombed planets total, bomb.planets */ unsigned int bp8; /* bombed planets <=8, bomb.planets_8 */ unsigned int bpc; /* bombed planets core, bomb.planets_core */ unsigned int bat; /* bombed armies total, bomb.armies */ unsigned int ba8; /* bombed_armies <= 8, bomb.armies_8 */ unsigned int bac; /* bombed armies core, bomb.armies_core */ unsigned int oat; /* ogged armies total, ogged.armies */ unsigned int odc; /* ogged dooshed carrier, ogged.dooshed */ unsigned int occ; /* ogged converted carrier, ogged.converted */ unsigned int opc; /* ogged potential carrier, ogged.potential */ unsigned int ogc; /* ogged bigger carrier, ogged.bigger_ship */ unsigned int oec; /* ogged same carrier, ogged.same_ship */ unsigned int olc; /* ogger smaller carrier, ogged.smaller_ship */ unsigned int osba; /* ogged sb armies, ogged.sb_armies */ unsigned int ofc; /* ogged friendly carrier, ogged.friendly */ unsigned int ofa; /* ogged friendly armies, ogged.friendly_armies */ unsigned int at; /* armies carried total, armies.total */ unsigned int aa; /* armies used to attack, armies.attack */ unsigned int ar; /* armies used to reinforce, armies.reinforce */ unsigned int af; /* armies ferried, armies.ferries */ unsigned int ak; /* armies killed, armies.killed */ unsigned int ct; /* carries total, carries.total */ unsigned int cp; /* carries partial, carries.partial */ unsigned int cc; /* carries completed, carries.completed */ unsigned int ca; /* carries to attack, carries.attack */ unsigned int cr; /* carries to reinforce, carries.reinforce */ unsigned int cf; /* carries to ferry, carries.ferries */ unsigned int tt; /* ticks total, ticks.total */ unsigned int tyel; /* ticks in yellow, ticks.yellow */ unsigned int tred; /* ticks in red, ticks.red */ unsigned int tz0; /* ticks in zone 0, ticks.zone[0] */ unsigned int tz1; /* ticks in zone 1, ticks.zone[1] */ unsigned int tz2; /* ticks in zone 2, ticks.zone[2] */ unsigned int tz3; /* ticks in zone 3, ticks.zone[3] */ unsigned int tz4; /* ticks in zone 4, ticks.zone[4] */ unsigned int tz5; /* ticks in zone 5, ticks.zone[5] */ unsigned int tz6; /* ticks in zone 6, ticks.zone[6] */ unsigned int tz7; /* ticks in zone 7, ticks.zone[7] */ unsigned int tpc; /* ticks as potential carrier, ticks.potential */ unsigned int tcc; /* ticks as carrier++, ticks.carrier */ unsigned int tr; /* ticks in repair, ticks.repair */ unsigned int dr; /* damage repaired, damage_repaired */ unsigned int wpf; /* weap phaser fired, weapons.phaser.fired */ unsigned int wph; /* weap phaser hit, weapons.phaser.hit */ unsigned int wpdi; /* weap phaser damage inflicted, weapons.phaser.damage.inflicted */ unsigned int wpdt; /* weap phaser damage taken, weapons.phaser.damage.taken */ unsigned int wtf; /* weap torp fired, weapons.torps.fired */ unsigned int wth; /* weap torp hit, weapons.torps.hit */ unsigned int wtd; /* weap torp detted, weapons.torps.detted */ unsigned int wts; /* weap torp self detted, weapons.torps.selfdetted */ unsigned int wtw; /* weap torp hit wall, weapons.torps.wall */ unsigned int wtdi; /* weap torp damage inflicted, weapons.torps.damage.inflicted */ unsigned int wtdt; /* weap torp damage taken, weapons.torps.damage.taken */ unsigned int wsf; /* weap smack fired, weapons.plasma.fired */ unsigned int wsh; /* weap smack hit, weapons.plasma.hit */ unsigned int wsp; /* weap smack phasered, weapons.plasma.phasered */ unsigned int wsw; /* weap smack hit wall, weapons.plasma.wall */ unsigned int wsdi; /* weap smack damage inflicted, weapons.plasma.damage.inflicted */ unsigned int wsdt; /* weap smack damage taken, weapons.plasma.damage.taken */ } __attribute__ ((packed)); #ifdef RSA struct rsa_key_spacket { char type; /* SP_RSA_KEY */ char pad1; char pad2; char pad3; unsigned char data[KEY_SIZE]; }; struct rsa_key_cpacket { char type; /* CP_RSA_KEY */ char pad1; char pad2; char pad3; unsigned char global[KEY_SIZE]; unsigned char public[KEY_SIZE]; unsigned char resp[KEY_SIZE]; }; #endif struct ship_cap_spacket { /* Server configuration of * * * * client */ char type; /* screw motd method */ char operation; /* 0 = add/change a ship, 1 * * * = remove a ship */ unsigned short s_type; /* SP_SHIP_CAP */ unsigned short s_torpspeed; unsigned short s_phaserrange; int s_maxspeed; int s_maxfuel; int s_maxshield; int s_maxdamage; int s_maxwpntemp; int s_maxegntemp; unsigned short s_width; unsigned short s_height; unsigned short s_maxarmies; char s_letter; char pad2; char s_name[16]; char s_desig1; char s_desig2; unsigned short s_bitmap; }; #ifdef SHORT_PACKETS struct shortreq_cpacket { /* CP_S_REQ */ char type; char req; char version; char pad2; }; struct threshold_cpacket { /* CP_S_THRS */ char type; char pad1; unsigned short thresh; }; struct shortreply_spacket { /* SP_S_REPLY */ char type; char repl; unsigned short winside; LONG gwidth; }; struct youshort_spacket { /* SP_S_YOU */ char type; char pnum; char hostile; char swar; char armies; char whydead; char whodead; char pad1; unsigned flags; }; struct youss_spacket { /* SP_S_YOU_SS */ char type; char pad1; unsigned short damage; unsigned short shield; unsigned short fuel; unsigned short etemp; unsigned short wtemp; }; #define VPLANET_SIZE 6 struct planet_s_spacket { /* body of SP_S_PLANET */ char pnum; char owner; char info; unsigned char armies; /* more than 255 Armies ? * * * ... */ unsigned short flags; }; struct warning_s_spacket { /* SP_S_WARNING */ char type; unsigned char whichmessage; char argument, argument2; /* for phaser etc ... */ }; struct player_s_spacket { char type; /* SP_S_PLAYER Header */ char packets; /* How many player-packets * * * * are in this packet ( * only * * the first 6 bits * are * * relevant ) */ unsigned char dir; char speed; LONG x, y; /* To get the absolute * * * Position */ }; /* S_P2 */ struct player_s2_spacket { char type; /* SP_S_PLAYER Header */ char packets; /* How many player-packets * * * * are in this packet ( * * * only the firs t 6 bits * * * are relevant ) */ unsigned char dir; char speed; short x, y; /* absolute position / 40 */ unsigned int flags; /* 16 playerflags */ }; /* The format of the body: struct player_s_body_spacket { Body of new * Player Packet unsigned char pnum; 0-4 = pnum, 5 local or galactic, 6 = * 9. x-bit, 7 9. y-bit unsigned char speeddir; 0-3 = speed , 4-7 * direction of ship unsigned char x; low 8 bits from X-Pixelcoordinate * unsigned char y; low 8 bits from Y-Pixelcoordinate }; */ struct torp_s_spacket { char type; /* SP_S_TORP */ unsigned char bitset; /* bit=1 that torp is in * * * packet */ unsigned char whichtorps; /* Torpnumber of first torp * * * / 8 */ unsigned char data[21]; /* For every torp 2*9 bit * * * coordinates */ }; struct mesg_s_spacket { char type; /* SP_S_MESSAGE */ unsigned char m_flags; unsigned char m_recpt; unsigned char m_from; unsigned char length; /* Length of whole packet */ char mesg; char pad2; char pad3; char pad[76]; }; struct mesg_s_cpacket { char type; /* CP_S__MESSAGE */ char group; char indiv; char length; /* Size of whole packet */ char mesg[80]; }; /* S_P2 */ struct kills_s_spacket { char type; /* SP_S_KILLS */ char pnum; /* How many kills in packet */ unsigned short kills; /* 6 bit player numer */ /* 10 bit kills*100 */ unsigned short mkills[MAXPLAYER]; }; struct phaser_s_spacket { char type; /* SP_S_PHASER */ char status; /* PH_HIT, etc... */ unsigned char pnum; /* both bytes are used for * * * * more */ unsigned char target; /* look into the code */ short x; /* x coord /40 */ short y; /* y coord /40 */ unsigned char dir; char pad1; char pad2; char pad3; }; struct stats_s_spacket { char type; /* SP_S_STATS */ char pnum; unsigned short tplanets; /* Tournament planets */ unsigned short tkills; /* Tournament kills */ unsigned short tlosses; /* Tournament losses */ unsigned short kills; /* overall */ unsigned short losses; /* overall */ unsigned int tticks; /* ticks of tournament play * * * time */ unsigned int tarmies; /* Tournament armies */ unsigned int maxkills; unsigned short sbkills; /* Starbase kills */ unsigned short sblosses; /* Starbase losses */ unsigned short armies; /* non-tourn armies */ unsigned short planets; /* non-tourn planets */ unsigned int sbmaxkills; /* max kills as sb * 100 */ }; #endif struct generic_32_spacket { char type; char version; /* alphabetic, 0x60 + version */ char pad[30]; }; #define GENERIC_32_LENGTH 32 #define COST_GENERIC_32 (F_sp_generic_32 ? GENERIC_32_LENGTH : 0) struct generic_32_spacket_a { /* SP_GENERIC_32 py-struct "b1sHH26x" #32 */ char type; char version; /* alphabetic, 0x60 + version */ unsigned short repair_time; /* server estimate of repair time in seconds */ unsigned short pl_orbit; /* what planet player orbiting, -1 if none */ char pad1[26]; /* NOTE: this version didn't use network byte order for the shorts */ }; #define GENERIC_32_VERSION_A 1 struct generic_32_spacket_b { /* SP_GENERIC_32 py-struct "!b1sHbHBBsBsBB18x" #32 */ char type; char version; /* alphabetic, 0x60 + version */ unsigned short repair_time; /* server estimate of repair time, seconds */ char pl_orbit; /* what planet player orbiting, -1 if none */ unsigned short gameup; /* server status flags */ unsigned char tournament_teams; /* what teams are involved */ unsigned char tournament_age; /* duration of t-mode so far */ char tournament_age_units; /* units for above, see s2du */ unsigned char tournament_remain; /* remaining INL game time */ char tournament_remain_units; /* units for above, see s2du */ unsigned char starbase_remain; /* starbase reconstruction, mins */ unsigned char team_remain; /* team surrender time, seconds */ char pad1[18]; } __attribute__ ((packed)); #define GENERIC_32_VERSION_B 2 #define GENERIC_32_VERSION GENERIC_32_VERSION_B /* default */ /* SP_GENERIC_32 versioning instructions: we start with version 'a', and each time a structure is changed increment the version and reduce the pad size, keeping the packet the same size ... client is entitled to trust fields in struct that were defined at a particular version ... client is to send CP_FEATURE with SP_GENERIC_32 value 1 for version 'a', value 2 for version 'b', etc ... server is to reply with SP_FEATURE with SP_GENERIC_32 value set to the maximum version it supports (not the version requested by the client), ... server is to send SP_GENERIC_32 packets of the highest version it knows about, but no higher than the version the client asks for. */ netrek-client-cow-3.3.2/config.h.in0000664000175000017500000002775713657750470016116 0ustar jamesjames/* Netrek Configuration file - by Kurt Siegl * */ #ifndef __CONFIG_H #define __CONFIG_H /* ################################################################################ All The fun defines ################################################################################ */ /* Defines Some possible values: NOTE: Only NON-system specific defines belong here */ /* ------------------------------------------------------------ Common defines ------------------------------------------------------------ */ #define RCD /* RCD - Support Reciever variable distresses */ /* PING - Ping statistics */ #define PING /* SHORT_PACKETS - Reduce Network load */ #define SHORT_PACKETS /* SPEEDUP - Misc improvements to make the code faster */ #define SPEEDUP /* FEATURE_PACKETS - feature packets */ #define FEATURE_PACKETS /* UDP_PORTSWAP - Allow the client to initiate the UDP connection first if it so chooses. This allows UDP connections through some packet filtering firewalls. */ #define UDP_PORTSWAP /* DEBUG - Various useful debugging stuff. No signal trap */ #undef DEBUG /* ------------------------------------------------------------ COW only defines ------------------------------------------------------------ */ /* NBT - Nick trown's macro code */ #define NBT /* MAXPLAYER - Maximal number of players + observers */ #define MAXPLAYER 36 /* CORRUPTED_PACKETS - prevents some seg faults but verbose output */ #define CORRUPTED_PACKETS /* EXPIRE=# - number of days this version will work for */ #if 0 /* ndef STABLE expire function removed */ #define EXPIRE 365 #endif /* ARMY_SLIDER - some sort of funky status window thing */ #define ARMY_SLIDER /* META - show active servers via metaserver - NBT */ #define META /* PACKET_LOG - log packets to stdout (for bandwith measurement) */ #define PACKET_LOG /* NEWMACRO - newmacro language */ #define NEWMACRO /* SMARTMACRO - macro extension (needs NEWMACRO) */ #define SMARTMACRO /* MULTILINE_MACROS - enables multiline macros */ #define MULTILINE_MACROS /* XTREKRC_HELP - Hadley's xtrekrc window (stolden by KP) */ #define XTREKRC_HELP /* TOOLS - Various tools, like shell escape, ... */ #define TOOLS /* SOUND - support of external sound players */ /* Autodetect may discover sound releated problems like cygwin has no shm */ #undef SKIP_SOUND #ifndef SKIP_SOUND #define SOUND #endif /* HOCKEY_LINES - allow showing of hockey lines */ #define HOCKEY_LINES /* BEEPLITE - player and planets highlighting */ #define BEEPLITE /* VSHIELD_BITMAPS - damage dependent shields (hull) */ #define VSHIELD_BITMAPS #define VARY_HULL /* WARP_DEAD - Use death detection */ #undef WARP_DEAD /* RCM - Receiver configurable Server messages */ #define RCM /* RACE_COLORS - additional bitplane for race colors */ #define RACE_COLORS /* XTRA_MESSAGE_UI - Show message being typed on the local display */ #define XTRA_MESSAGE_UI /* SYSTEM_DEFAULTFILE - Points to a system wide .xtrekrc file */ #define SYSTEM_DEFAULTFILE "/etc/netrek-client-cow/netrekrc" /* WINDOWMAKER - WindowMaker Docking support */ #ifdef linux #define WINDOWMAKER #endif #define PLIST1 #define PLIST #define CONTROL_KEY #define DOC_WIN #define ROTATERACE #define FUNCTION_KEYS /* client options */ #define IGNORE_SIGNALS_SEGV_BUS #define MOUSE_AS_SHIFT #define SHIFTED_MOUSE #define TNG_FED_BITMAPS #define MOTION_MOUSE #define DIST_KEY_NAME #define PHASER_STATS #define RECORDGAME #define CAMERA #define FULLSCREEN /* ############################################################################## All system dependencies should be defined here ############################################################################## */ #define NEED_EXIT /* Automatic generated system dependend defines */ #undef HAVE_MATH_H #undef HAVE_STDLIB_H #undef _ALL_SOURCES #undef HAVE_SYS_SIGNAL_H #undef BSD_SIGNALS #undef SYSV_SIGNALS #undef POSIX_SIGNALS #undef RESTARTABLE_SYSCALLS #undef NEED_MEMORY_H #define STDC_HEADERS 1 /* 13/01/94 omit hosed index [007] */ #undef HAVE_WAIT3 #undef NEED_SYS_SELECT_H #undef NO_FD_SET /* Guess we suck badly if that happens :( */ #undef HAVE_UNISTD_H #undef HAVE_SYS_TIMEB_H #undef TM_IN_SYS_TIME #undef TIME_WITH_SYS_TIME #undef NEED_SYS_TIME_H #undef HAVE_SYS_PTYIO_H #undef HAVE_SYS_FCNTL_H #undef HAVE_FCNTL_H #undef HAVE_CTYPE_H #undef HAVE_MACHINE_ENDIAN_H #undef HAVE_SYS_RESOURCE_H #undef HAVE_SYS_WAIT_H #undef HAVE_NETINET_IN_H #undef HAVE_NETINET_TCP_H #undef HAVE_SYS_FILIO_H /* Needed for Solaris 2.5.1 */ #undef HAVE_GMP2_H #undef NO_U_INT #undef SIZEOF_LONG #undef HAVE_USLEEP #undef HAVE_SETSTATE #undef HAVE_RANDOM #undef HAVE_STRFTIME #undef HAVE_FTIME #undef HAVE_STRCMPI #undef HAVE_STRNCMPI #undef HAVE_NINT #undef NEED_RINT_DEC #undef RETSIGTYPE #undef pid_t #undef uid_t #undef gid_t #undef size_t #undef vfork #if (defined(sparc) && defined(sun)) #define vfork fork #endif #undef NO_PATH_MAX #undef inline #undef HAVE_X11 #undef HAVE_WIN32 #undef HAVE_XPM #undef HAVE_X11_XPM_H /* System dependend macros */ /* SYSV signal handling */ #ifdef SYSV_SIGNALS #include #define SIGNAL(x,y) sigset(x,y) #define PAUSE(x) sigpause(x) #define SIGSETMASK(x) { } #else #define SIGNAL(x,y) signal(x,y) #define PAUSE(x) pause() #define SIGSETMASK(x) sigsetmask(x) #endif #ifdef POSIX_SIGNALS #define HANDLE_SIG(s,h) signal(s,h) #define setjmp(x) sigsetjmp(x,1) #define longjmp(x,y) siglongjmp(x,y) #else #define HANDLE_SIG(s,h) {} #endif #ifdef STDC_HEADERS #define INC_STRINGS #else #define INC_STRINGS #endif #ifdef STDC_HEADERS #define MCMP(x,y,z) memcmp(x,y,z) #define MCOPY(b1,b2,l) memcpy(b2,b1,l) #define MZERO(b1,l) memset(b1,0,l) #define INDEX(s,c) strchr(s,c) #define RINDEX(s,c) strrchr(s,c) #else #define INDEX(s,c) index(s,c) #define RINDEX(s,c) rindex(s,c) #define MCMP(x,y,z) bcmp(x,y,z) #define MCOPY(b1,b2,l) bcopy(b1,b2,l) #define MZERO(b1,l) bzero(b1,l) #endif #ifdef SPEEDUP /* strncpy is terrible slow */ #ifdef NEED_MEMORY_H #include #else #include #endif /* #define STRNCPY(x,y,z) memcpy(x,y,z) */ #define STRNCPY(x,y,z) memccpy(x,y,'\0',z) #else #define STRNCPY(x,y,z) strncpy(x,y,z) #endif #ifndef HAVE_WAIT3 #define WAIT3(x,y,z) waitpid(-1, x, y ) #else #define WAIT3(x,y,z) wait3(x, y, z) #endif #if (defined(HAVE_RANDOM) && defined(HAVE_SETSTATE)) || !defined(HAVE_RANDOM) #define RANDOM() random() #define SRANDOM(x) srandom(x) #else #define RANDOM() rrandom() #define SRANDOM(x) ssrandom(x) extern void ssrandom (); extern long rrandom (); #endif #if !defined(HAVE_RANDOM) extern void srandom (); extern long random (); #endif #if (SIZEOF_LONG == 8) #define _64BIT #define LONG int #define U_LONG u_int #else #define LONG long #define U_LONG u_long #endif /* System dependend Include files */ #define NULLFILE "null" #ifdef NEED_SYS_SELECT_H #define INC_SYS_SELECT #else #define INC_SYS_SELECT NULLFILE #endif #define SELECT select #ifdef HAVE_UNISTD_H #define INC_UNISTD #else #define INC_UNISTD NULLFILE #endif #ifdef HAVE_SYS_SIGNAL_H #define INC_SYS_SIGNAL #else #define INC_SYS_SIGNAL NULLFILE #endif #ifdef HAVE_SYS_FCNTL_H #define INC_SYS_FCNTL #else #define INC_SYS_FCNTL NULLFILE #endif #ifdef HAVE_FCNTL_H #define INC_FCNTL #else #define INC_FCNTL NULLFILE #endif /* Some systems don't include in */ #if defined(TM_IN_SYS_TIME) || defined(NEED_SYS_TIME_H) #define INC_SYS_TIME #else #define INC_SYS_TIME NULLFILE #endif #ifdef HAVE_SYS_PTYIO_H #define INC_SYS_PTYIO #else #define INC_SYS_PTYIO NULLFILE #endif #ifdef HAVE_CTYPE_H #define INC_CTYPE #else #define INC_CTYPE NULLFILE #endif #ifdef HAVE_MACHINE_ENDIAN_H #define INC_MACHINE_ENDIAN #else #define INC_MACHINE_ENDIAN NULLFILE #endif #ifdef HAVE_SYS_RESOURCE_H #define INC_SYS_RESOURCE #else #define INC_SYS_RESOURCE NULLFILE #endif #ifdef HAVE_SYS_WAIT_H #define INC_SYS_WAIT #else #define INC_SYS_WAIT NULLFILE #endif #ifdef HAVE_NETINET_IN_H #define INC_NETINET_IN #else #define INC_NETINET_IN NULLFILE #endif #ifdef HAVE_NETINET_TCP_H #define INC_NETINET_TCP #else #define INC_NETINET_TCP NULLFILE #endif /* Replace outdated ftime with gettimeofday */ #if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME) #define INC_SYS_TIMEB #else #define NOTIMEB #define INC_SYS_TIMEB #endif #ifdef HAVE_GMP2_H #define INC_MP #define MPTYPEDEF typedef mpz_t MPTYPE; #define assignItom(x,i) {mpz_init(x); mpz_set_ui(x,i);} #define madd(x, y, z) mpz_add(z, x, y) #define msub(x, y, z) mpz_sub(z, x, y) #define mult(x, y, z) mpz_mul(z, x, y) #define mdiv(n, d, q, r) mpz_fdiv_qr(q, r, n, d) #define sdiv(n, d, q, r) *r = mpz_fdiv_q_ui(q, n, d) #define msqrt(x, y, z) mpz_sqrt(z, x, y) #define mp_pow(x, y, z, a) mpz_powm(a, x, y, z) #define gcd(x, y, z) mpz_gcd(z, x, y) #define mcmp(x, y) mpz_cmp(x, y) #define min(x) mpz_min(x) #define mout(x) mpz_mout(x) #define mfree(x) mpz_clear(x) #else #define MPTYPEDEF typedef MINT *MPTYPE; #define assignItom(x,i) x= itom(i) #define mp_pow(x, y, z, a) pow(x, y, z, a) #define INC_MP #endif #ifdef NO_PATH_MAX #define PATH_MAX 255 #define INC_LIMITS NULLFILE #else #define INC_LIMITS #endif #ifdef HAVE_XPM #ifdef HAVE_X11_XPM_H #define INC_XPM #else #define INC_XPM #endif #else #define INC_XPM NULLFILE #endif /* Unchecked machine dependencies */ #ifdef linux #define SHMFLAG sizeof(struct memory) #else #define SHMFLAG 0 #endif #if defined(sun3) #define INC_STDLIB NULLFILE #else #define INC_STDLIB #endif #ifndef sun4 #if defined(HAVE_NINT) && defined(HAVE_MATH_H) #define INC_MATH #else #if defined(NEED_RINT_DEC) extern double rint(double); #define INC_MATH NULLFILE #else #define INC_MATH #endif #define nint(x) ((int) rint(x)) #endif #endif /* Some systems, most notably SunOS 4.1.3, don't include function definitions in the libraries. This results in some warning we don't want. This header defines the type for all these functions. */ #ifdef sun4 #include #include #include int close(int); int connect(int, struct sockaddr *, int); int fprintf(FILE *, const char *, ...); int fputs(char *, FILE *); char *memccpy(char *, char *, int, int); int perror(char *); int socket(int, int, int); int sscanf(char *, char *, ...); char *strdup(char *arg); char _filbuf(FILE *); int _flsbuf(unsigned char, FILE *); #endif /* defined sun4 */ #ifdef WIN32 typedef unsigned short int ushort; #define strncasecmp strncmp #ifdef THREADED #define THREAD(fn) { DWORD junk; CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)f #define ENDTHREAD ExitThread(0); typedef unsigned long int SEMAPHORE; #define CREATE_SEMAPHORE(initstate) CreateEvent(NULL, 1, initstate, NULL) #define SET_SEMAPHORE(sem) SetEvent((HANDLE)sem) #define RESET_SEMAPHORE(sem) ResetEvent((HANDLE)sem) #endif #endif #ifdef _MSC_VER #define INC_STRINGS #define INC_IO #else #define INC_IO NULLFILE #endif /* Solaris specific stuff */ #if defined(HAVE_SYS_FILIO_H) #define INC_SYS_FILIO #else #define INC_SYS_FILIO NULLFILE #endif /* define this if you have the SDL library (checked by configure.in) */ #undef HAVE_SDL #endif /* __CONFIG_H */ netrek-client-cow-3.3.2/COW.DOC0000664000175000017500000020775413657750470015047 0ustar jamesjames0.0 Table of Contents ******************************************************************************* * * * General Documentation for the Client Of Win (COW) * * * * Comments, suggestions and bug reports to cow@netrek.org * * * * * ******************************************************************************* Table of Contents 1.0 Overview 2.0 Acknowledgements 3.0 Features 3.1 Command Line Options 3.2 Pixmaps (Full Color COW) 3.3 Other features 4.0 Xtrekrc 4.1 Windows, fonts, cursors, and colors 4.2 Startup options 4.3 Combat options 4.4 Messaging options 4.5 Net options 4.6 Galactic/tactical map options 4.7 Keymap (and buttonmap) options 4.8 Playerlist options 5.0 Connection Types: UDP, TCP. Short packets. 6.0 Macros, RCD, RCM: 7.0 MetaServer Options 8.0 Compiling 9.0 Beeplite 1.0 Overview This document describes the COW client, its capabilities, and the client's features. COW started as the successor of the BRM client after release 3. BRM started as a merger of the Berkeley client with Rick's Moo client. Since then, all three clients have developed fairly independent of one other. Familiarity with netrek is presumed throughout this document. Please consult the newbie manual for information on the game itself. COW has an expire function which insures that players obtain new copies regularly. This alleviates the client's caretakers from having to support ancient clients. Generally, a client will expire one year after its compile date. 2.0 Acknowledgements Many people have contributed to COW and many many others contributed to its ancestor clients. Here is an undoubtedly incomplete list of credits presented in no particular order. Where possible their typical netrek name is provided in the hope that you will ogg them: Scott Silvey Kevin Smith Rick Weinstein Videodrome J. Mark Noworolski Passing Wind Tedd Hadley pteroducktyl Heiko Wengler Musashi Andy McFadden ShadowSpawn Chris Guthrie Ed James Eric Mehlhaff Nick Trown Netherworld Lars Bernhardsson lab Sam Shen Buster Jeff Nelson Miles Teg Jeff Waller Robert Kenney Zhi'Gau Steve Sheldon Ceasar Dave Gosselin Tom Servo Kurt Siegl 007 Kevin Powell seurat Alec Habig Entropy Jonathan Shekter KillThemAll! James Cameron Michael Kellen 3.0 Features The COW client has many features that make it stand out from earlier clients. This section will attempt to describe all of its features, including those that are common to all clients. 3.1 Command Line Options This section will describe COW features that are selected from the command line when the client is invoked. Selecting "-u" for usage or any invalid option will provide a brief summary of this section (-help will work too). 3.1.1 SERVER SELECTION The "-h server_address" option will allow the user to select a specific server. The client will look to the .xtrekrc file for a default server should this option be absent. Examples of server addresses would be 136.165.1.12 or starbase.louisville.edu. 3.1.2 PORT SPECIFICATION The "-p port_number" option will allow the user to select a specific port address. An example of a port_number would be 1111, 2222, or 2592. 3.1.3 DEFAULTS FILE SPECIFICATION The "-r defaultsfile" option will allow the user to select a defaults file other than .xtrekrc. The defaults file contains all of the user selectable defaults (please see Section 4.0 for more information on .xtrekrc). Using this option, two users can run netrek from the same userid / account and still have unique defaults files. 3.1.4 VERIFICATION OPTIONS [deleted] 3.1.5 RECORD GAME OPTION The "-f record_file" will record the game into record_file. The "-F record_file" will play the recorded game from record_file. 3.1.6 METASERVER OPTION The "-m" option will instruct the client to search the Meta Server at metaserver.ecst.csuchico.edu, port 3521 and present the user with a list of available servers. The user may then select the most desirable server directly from the client. Alternatively, the "-k" option may be used to show the "known servers", using the same format as the Meta Server list. The client generates a list of "known servers" after each call to the meta server but only if the "metaCache" option is set in your .xtrekrc. To find out about customising the meta-server, set the Chapter "MetaServer Options", later in this document. t 3.1.7 AUTOLOGIN OPTION The "-A password" allows the client to automatically enter the specified character password without having to prompt the user. This option is normally used with the "-C character_name" option, which automatically enters the character name. The "-C" option must be followed by a character name string. 3.1.8 NEAREST COLOR OPTION The "-n" option allows the client to accept the "closest match" to the colors requested for drawing. How good the match is is up to your windowing software. 3.1.9 NO PIXMAPS OPTION The "-b" option disables the use of color pixmaps by the client. 3.1.10 GHOST START After a client dies, or even if you kill the client on purpose, you can recover the game and continue playing. In fact the server won't have any idea that anything but bad lag (called a ghostbust) has occurred. The benefits of this feature include the ability to change displays, recompile code (if you happen to be a code hack), or simply recover from a core dump. In order to use it, you have to pay attention to two numbers which are displayed when you connect to the server. A line like this appears: *** socket 11323, player 0 *** This indicates which player slot you have been assigned, and which socket number has been chosen as your ghostbust socket. Now in order to restart, just do: cow -G 0 -s 11323 The important options are -G followed by the player slot you occupy, and -s followed by the ghostbust socket. Notice that you don't even specify a server! This feature may NOT work on all servers. Many server gods use server code which is too old to support this feature. Also, keep an eye out for small details that are off. It is NOT logically possible to account for everything with this feature. Such things as the motd are not resent by the server when you connect, so you won't have that around anymore. Further, the client won't know who it is even connected to (see above), thus don't be shocked if the client claims you are connected to a bogus server. WARNING: Some servers have *very* short ghostbust timeout periods. You must reconnect before this timeout expires or your slot will be given to someone else, you won't be able to reconnect. On most servers it is around 6 minutes long. 3.1.11 ESOTERIC OPTIONS -c this will check server_port-1 and spew out a list of all players currently playing on that server - not all servers are intelligent enough to do this -s (integer) passive port to use, generally only server gods would ever use this option and even they can get by without it -l (filename) file to log messages -d (string of chars) display name -H (string of chars) Gateway name -P log packets: generally don't want to use this -t (string of chars) title - the name of the window the client makes -D debug mode -v display version/expiration info and exit -i ignore signals (SIGSEGV and SIGBUS) 3.2 Pixmaps (Full Color COW) With the release of COW 3.00, dynamic color images are available. No color images have been compiled into the client, so without the additional files (described below) the client will behave as before. 3.2.1 Setup The xpm files should be available at the same site from which you got the client, in a file named pixmaps.tgz (PIXMAPS.ZIP for windows users). >>> YOU MUST DOWNLOAD AND UNPACK THIS FILE TO USE THE COLOR FEATURES. <<< It should create a subdirectory named "pixmaps" which should have several (obviously named) subdirectories. There should be several XPM files in each (except for Planets, which has a further subdirectory). UNIX users will see that they are gzipped to save space. You do NOT need to ungzip them unless you do not have gzip on your machine. >>> DO NOT REARRANGE OR RENAME THESE FILES IF YOU WANT TO USE THEM. <<< You need to add a line to your .xtrekrc telling the client where to look for the pixmaps. If you do not, it will assume that they are in a subdirectory of the directory you are in when you start the client. The option is called "pixmapDir". Tilde and environment variables WILL NOT WORK. Relative paths will only work if you always start netrek from the same directory. You should be ready to rock and roll. Fire it up. You may see some warnings about not being able to read some pixmaps. Some of the pixmaps that the client looks for haven't been drawn yet. Feel free to make your own set. OTOH, if you see any lines which read "TYPE PIXMAPS NOT AVAILABLE" it means that none of a certain type of pixmap were found. Check to make sure that the pixmaps are where you told it to look. If they are, and you are on a UNIX system, you may not have gzip installed. Go get it from any GNU mirror and either install it or use it to ungzip the XPM files. 3.2.2 Configuration In addition to simply creating your own XPMs with a paint program, you may want greater control over the pictures used. For example, you may find the explosions are too pretty, and you are dying because you forgot to dodge. The crude approach is to just remove that pixmap. The client will default back to the standard bitmaps in this case. The more elegant approach is to turn off just those pixmaps you don't like and keep the rest. This also allows you to switch back and forth WITHOUT having to exit and restart. So if the machine you are playing on is busy today, you can turn off the pixmaps until things improve, then switch back to full color without losing your 5 kills. Pixmaps can be turned on or off in groups on the new "Pixmap Menu" in the options window (shift-O). Each line in the window also corresponds to an .xtrekrc resource which you can use to set the initial values. If one type of pixmaps is not available, you will be unable to turn on that option. resource name default description indPix on \ fedPix on | Control whether or not the XPMs romPix on | for the ships of a given team kliPix on | should be used oriPix on / weaponPix on Torps and plasmatorps & their clouds explosionPix on ship and starbase explosions cloakPix on fade-in/-out and cloak icon mapPix on Color Planet icons on galactic (replaces the "colorgalactic" option) backgroundPix on Background stars & genocide/gb images (replaces the "babes" option) ownerhalo off Draws a colored ring around each planet on the galactic as a convenience, the option "shipPix" may be used to control all of the ship XPMs in one line. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + POWER USERS + + + + The MegaResource "pixFlags" can be used in your .xtrekrc + + to save a bit of typing. Simply bitwise OR together the + + things you want turned off: + + + + 0x0001 IND pixmaps + + 0x0002 FED pixmaps + + 0x0004 ROM pixmaps + + 0x0008 KLI pixmaps + + 0x0010 ORI pixmaps + + + + 0x0020 Weapons + + 0x0040 Explosions + + 0x0080 Cloaking + + 0x0100 Galactic Map Planet Icons + + + + 0x0400 Backgrounds + + + + 0x1000 Halos + + + + so, for exaple, no halos and no explosions would be + + specified as: (0x1040=4160) + + + + pixFlags: 4160 + + + + + + (Note that this OVERRIDES all the other resources) + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ If you hate them all, you can either set the "pixmapDir" to "None" or start the client with the -b (bitmap only) command line option. Then go ahead and delete all of the XPMS. Go ahead. We don't mind at all. It's not like we put any WORK into this ... :,-( 3.2.3 Babes/M31 and Generalized Backgrounds Gone. You can put up any picture you like when you GENO, GB, or just enter or hit shift-K. Just specify the genocide.xpm, ghostbust.xpm and/or hello.xpm. It's really none of my business what you look at in your off time. Absolutely no picture will be shown if you do not have an XPM in the specified place. It didn't belong in the client in the first place. DEAL WITH IT. And BTW, the ' key (quote) has the default action of retiling your local and galactic windows with the normal background (either black or your specified pixmap) to repair the damage done by the other possible pix. 3.2.4 AGRI pixmaps and FEATURE_PACKETS The client shows a different pixmap for AGRI planets than all others. This was announced, voted on and overwhelmingly adopted (80%+ in favor). But JUST IN CASE, this option can be disabled at the server by use of the feature packet "AGRI_PIXMAP". Users can choose to remove the AGRI.xpm file. The client will default to using the regular planet pixmap if it is missing. 3.3 Other features *** Hockey Lines Due to popular demand, hockey lines have been added. For those of you who want to see a hockey rink on the tactical, just use the features menu (shift-O) and toggle them on. You get: Blue lines (blue) Center line (red) Side lines, i.e. the rink edges (grey) Goal lines (red) Goal boxes (the color of the team) They are a little awkward at first, but once you get used to them, you'll wonder how you lived without them. Since this is a first pass, I'm looking for more input on what would make them better. Here are some of my comments: 1) Lines are hardcoded into the software. They should be based upon planet location, so the hockey gods can move the planets around. 2) You either have them all or none. Perhaps the set of desired lines should be configurable from the xtrekrc. Also, you cannot change the colors. 3) Lines on the galactic would look pretty If you have any comments, mail them to kantner@hot.caltech.edu *** Shell escape tool You may execute any Unix shell command within the client. Read your mail now within the client. To do so, just send a message to the destination "!" and you get a shell prompt. Enter the command and its output will be displayed in the tools window. Works also with macros to "!". You may disable it in the .xtrekrc for security reasons with shellTools: off CAUTION: The client will be blocked for the time the command is executed. Also some programs suspend the client if it is started in the background. *** Fast quit Hitting 'q' will quit the client without ever going back to the team selection window, the normal 'Q' still goes back to the team selection window. *** Reread defaults file You can reread your netrek default file by hitting '&', it is also possible to enter a new default file name at any time by sending a message to 'M' which contains the file name. *** Galactic rotation For those who like to fight with some specific orientation, the galaxy is now rotate-able. This can be done in the options window. This works now also with short packages. *** Gateway Lots of cool gateway code in this client, unfortunately I don't use nor do I know what it does other than get past firewalls. *** Observer support Many servers allow you to *observe* a game instead of playing, sort of like watching football. COW supports this feature. Currently in order to be an observer, all you have to do is connect to the observer port for a server. A good guess at the observer ports for a pickup server is 2593; for INL, 4000 and 5000. *** Lagmeter This is pretty pointless: a continuously updated bar graph of how bad your lag is. Perfect for the whiny player who needs an excuse. ;) This can be turned on with the '\' key, from the options menu, or from the .xtrekrc. (lagmeter.parent, lagmeter.mapped, lagmeter.geometry) Requres netstats to be on. *** Pingstats In a similar vein, the pingstats window can be turned on from the .xtrekrc, the options menu, or the key ','. *** The Pig call COW supports sending five spaces to a player as the de facto method of requesting info on the client. (So called because it was used by the Pig borg, AFAIK.) For instance: COW 3.00pl0, linux, 03/03/98, RMCSE365AmTsr The letters in the fourth field indicate which #ifdefs were specified at compile time. Possibilities are: M: Macros D: Debugging information C: Corrupted packet handling S: Short packets E%d: Expiration date, in days after compilation A: Stat window contains a slider showing armies carried (does not affect the newdashboard code) m: Metaserver support T: "Various tools, like shell escape, ..." s: Sound r: RCD support *** Improved help window: Basically, this was done to show what keys were actually mapped to what functions. Every key function has a line in the help window. Here's a sample line: s gb Toggle shields ||\\_ The 'b' key has been mapped to toggle shields || \_ The 'g' key has also been mapped to toggle shields |\____This space is always there, as a separator. \_____This is the default key for this function, and the hook that you use when defining things to this function. I.e. to set the 'g' and 'b' mappings mentioned here, you'd have to put 'gsbs' in your .xtrekrc or your keymap options. NOTE: This character will appear here, even if it is mapped to something else. *** Message-Warp: The non-warp version. Hit the 'm' key and start typing. Your cursor changes to the 'text' cursor, and all keystrokes go to the message window. Sending the mesage or the ESC key ends this. Again, the mouse pointer is not moved. *** Documentation Window The documentation window is used to view documentation while actually playing. In order to do this you must either have the COW.DOC file in the directory you are running the client from or you must set the documentation resource value to the full path to the file with the documentation. Control-y brings this window up. Also available via shift-O option menu under "info." The 'f', 'b' keys scroll forward and back by 28 lines, like the motd window. While 'F' and 'B' keys scroll by 4 lines. In .xtrekrc: documentation: /home/kensho/powell/misc/netrek/brm3002/myCOW.DOC *** Xtrekrc File Window The xtrekrc file window is used to view your current xtrekrc file online. It is currently very stupid in that if you used the command line option '-r' to specify your xtrekrc file, this viewer will not find it (it's currently hardwired for $HOME/.xtrekrc:( Control-X (that is control-shift-x) will bring up this window, or shift-O under "info." The 'f', 'b' keys scroll forward and back by 28 lines, like the motd window. While 'F' and 'B' keys scroll by 4 lines. *** Auto torp aiming and dodge Get outa here... *************************************************************** 4.0 Xtrekrc: *************************************************************** COW looks for a .xtrekrc file in your home directory. Alternatively this file may be called home, and it may be in whatever directory the client is executed from. A file called "SAMPLE.xtrekrc" should have been included with this client. Below is an attempt to explain the many, many options you can include in a .xtrekrc file. Some of this was borrowed from various other documentation such as MOO documentation. For other options, see MACROs and Receiver Configurable Distress Calls. 4.1 Windows, fonts, and colors rank.mapped: (on/off) rank.parent: (window name) ie root, review_all, netrek, etc rank.geometry: (geometry specification) ie 80x26+554+624 Every window may have these three defaults set for it. Some windows are resizeable, others are not. font: fixed bigfont: lucidasans-24 italicfont: -schumacher-clean-medium-i-normal--10-*-*-*-c-80-iso8859-1 boldfont: -schumacher-clean-bold-r-normal--10-100-*-*-c-60-iso8859-1 Specifies which fonts you want to use, not sure that all of these are still used in COW The personalized cursor extensions allows the user to specify their own cursors for the map, local, text, menus and info list windows. localCursorDef: /usr/me/.local.xbm mapCursorDef: /usr/me/.map.xbm infoCursorDef: /usr/me/.info.xbm textCursorDef: /usr/me/.text.xbm # the mask would be called /usr/me/.text.xbm.mask arrowCursorDef: /usr/me/.arrow.xbm For infoCursorDef, textCursorDef, arrowCursorDef an optional mask may be specified. To specify a mask, first create your new cursor, say called mycursor, then create the mask and call it mycursor.mask. They both need to be on the same path. Cursor and mask *must* be the same size, if not the cursor cannot be used (why anybody would want to do this makes no sense, but...:) color.white: white color.black: black color.red: #ffa0ff color.green: green color.yellow: yellow color.cyan: cyan color.light grey: light grey Specify what colors should be used by the client. This is generic X color specification (right?). All the possible left hand sides are listed I think. color.Ind: light grey color.Fed: yellow color.Rom: tomato color.Kli: green2 color.Ori: light steel blue Race Colors may be set separately. 4.2 Startup options name: (string of chars) default name password: (string of chars) default password; if both name and password are included in your .xtrekrc, COW will attempt to do an autologin for you. server: bronco.ece.cmu.edu default server that is called when no -h argument is specified. Leave this blank to have cow call the metaserver by default. port: 2596 default port that gets called. The compiled default is 2592. server.rio: riovista.berkeley.edu Allows you to specify a server abbreviation. Thus instead of using "-h riovista.berkeley.edu" you now use only "-h rio" port.rio: 4566 default port that gets called for the server abbreviation. showmotd: (on/off) display motd if in wait queue autoquit: (integer) length of time to wait on team selection screen before Auto-quit exits for you. ignoreSignals: (on/off) ignore SIGSEGV and SIGBUS. COW will try to reset the game so you can continue. 4.3 Combat options warnShields: (on/off) In color, you can have your shield be color of your alert status (red, yellow, green) varyShields: (on/off) Shield color and bitmap depends on shield strength. varyHull: (on/off) graphical indication of your hull condition. Kinda like varyShields. When varyHull is on your ship looks like it has small spikes sticking out of the shields, each spike representing 12.5% of your hull strength. cloakChars: (string of one or two chars) what to use for cloakers on galactic instead of '??'. enemyPhasers: (integer 0-10) enemy phasers thickness at starting point. phaserShrink: (integer 0-16) Don't draw the first "phaserShrink"/16th of your phaser. This makes it easier to see incomming torps. theirPhaserShrink: (integer 0-16) "phaserShrink" for other players' ships. shrinkPhaserOnMiss: (on/off) Use "phaserShrink" and "theirPhaserShrink" even if a phaser misses. highlightFriendlyPhasers: (on/off) phaser hits by your team are solid white (instead of the default "rainbow" a la COW-lite. showtractorpressor: (on/off) toggle showing tractor/pressor beams continueTractors: (on/off) off = turns off the visible t/p after 2 updates. showstats: (on/off) show stats window 4.4 Messaging options newDistress: (on/off) right-justified distress call or not, default value is to right-justify (on) reportkills: (on/off) display kill messages or ignore these censorMessages: (on/off) attempts to remove profanity from messages sent. They'll look like this: "F0->FED @$%# you twink" logging: (on/off) displays messages to stdout if set. logfile: (filename) alternatively saves messages to a text file PhaserMsg: [0, 1, 2, 3, 4, 5] 0 = Don't log phaser hits 1 = Log phasers on all window 2 = Log phasers on team window 3 = Log phasers on indiv window 4 = Log phasers on kill window 5 = Log phasers on review window the additional phaser window is controlled just like the other review windows. e.g.: review_phaser.mapped: on review_phaser.parent: netrek review_phaser.geometry: 81x2+0+555 4.5 Net options netstats: (on/off) collect network statistics for measuring lag netstatfreq: (integer) how often to update the network statistics tryShort: (on/off) default setting for whether to use short packets. tryUdp: (on/off) try to automatically connect with UDP udpDebug: 0 = OFF 1 = ON (conect msgs only) 2 = ON (verbose output) udpClientSend: 0 = TCP only, 1 = simple UDP 2 = enforced UDP--"state", including the following flags: SPEED DIRECTION SHIELD (up or down) ORBIT REPAIR CLOAK BOMB DOCKingPERMission PLAYerLOCK and PLANetLOCK BEAMing of armies 3 = enforced UDP--"state & weapons" all of the above plus PHASER commands PLASMA commands Note that TORP commands are not included. udpClientRecv: 0 = TCP, 1 = simple, 2 = fat, 3 = double (not currently supported) udpSequenceChk: ? 4.6 Galactic/tactical map options useTNGBitmaps: (on/off) Different bitmaps for fed. Not the new pixmaps. ROMVLVS: (on/off) Replacement for dorky Rom CA bitmap. Not a pixmap. showIND: (on/off) mark independent planets with a X drawn over it. newPlanetBitmaps: removed. Use showlocal/showgalactic instead. whichNewPlanetBitmaps: ditto. newDashboard: (integer 0-3) Uses sliding bars instead of numbers to display speed, shield/hull status, etc, on the dashboard. 1 is 'vanilla'; just like the old stat graph. When set at 2, besides defaulting to green, displays how much hull/shield you have LEFT, not how much you have lost (i.e. this is an optimistic dashboard, it sees the cup as half full ;). At 3, uses triangle sliders AND numbers. keepInfo: (integer) number of updates to keep info windows on the screen before automatically removing them extraAlertBorder: Draws border in internal netrek windows, as well as external ones (which get ignored in X11 with window-managers) forcemono: if on, the client windows are set to be monochrome redrawDelay: if >0 synchron screen refresh every n/10 sec (useful for slow X-terms and high lag). showgalactic: 0 = nothing, 1 = ownership, 2 = standard resources, 3 = MOO/ZZ resources, 4 = rabbit ear resources Determines what kind of information will be shown on planets displayed on the galactic. With option 2, the planet bitmap has symbolic icons for armies > 4, repair, and fuel resources. With option 3, the planet has a dot in its center to represent fuel and four tickmarks in the corners to represent repair. With option 4, an ear on the left indicates repair and an ear on the right fuel. showlocal: 0 = nothing, 1 = ownership, 2 = standard resources, 3 = MOO/ZZ resources, 4 = rabbit ear resources Determines what kind of information will be shown on planets displayed on the local map. showLock: 0 = none, 1 = galactic, 2 = local, 3 = both Where to display the locked-on triangle. showplanetnames: (on/off) turn on planet names by default. colorgalactic: Use color pixmaps instead of bitmaps on galactic. (Obsolete -- see section 3.2.2) showstars: Use starry background on galactic map. (Obsolete -- see section 3.2.2) Color pixmap controls. (See section 3.2.2) resource-- indPix: (on/off) default on resource-- fedPix: (on/off) default on resource-- romPix: (on/off) default on resource-- kliPix: (on/off) default on resource-- oriPix: (on/off) default on resource-- weaponPix: (on/off) default on resource-- ex:plosionPix (on/off) default on resource-- cloakPix: (on/off) default on resource-- mapPix: (on/off) default on resource-- backgroundPix: (on/off) default on resource-- pixFlags: (int) default 0 (== all on) ownerhalo: (on/off) default off Draw a circle around the planet pixmap in the color of the owning team. (pixmaps only) 4.7 Keymap (and mouse) options keymap: (string of chars) remaps the keyboard, syntax is simply the key to map onto, followed by the key to map, repeated. Thus to map the "fire torps" key 't' onto 'f', use keymap: ft (See also the sections on control keymaps and ship dependent keymaps below.) ignoreCaps: (on/off) ignore the Capslock key. buttonmap: map the mouse buttons to something else. i.e. the default mapping is: 1t2p3k shiftedMouse: (on/off) The shift and control keys can be used to modify the default function assigned to a button. The shift key acts as a switch which brings an alternate mapping to the mouse buttons. In a similar way control and shift + control act to switch mappings again. Breakdown of values: Normal buttons 1, 2, 3, maps to 4, 5, 6, maps to 7, 8, 9, maps to a, b, and c. This remaps all the possible mouse buttons: buttonmap: 1t2p3k4c5s6y7E8z9xaFbdcD mouseAsShift: (on/off) Not to be confused with "shiftedMouse." ;) Makes the mouse buttons 1-3 act like shift keys. Each button "shifts" or causes a new set of key mappings to come into effect: Instead of the keyboard remapping the mouse, the mouse now remaps the keyboard. Each key on the keyboard now has several possible mappings. Use the b[123]keymap option to specify commands. For example, to have the 'a' key fire a torpedo while button1 is pressed, and a phaser while button2 is pressed, add the lines: b1keymap: at b2keymap: ap continuousMouse: (on/off) allows you to cause multiple commands to be issued to the server when dragging the mouse with a button down. For instance you can drag the mouse while pressing button 3 (which defaults to set_course). Saves on button wear and tear. ;) 4.7.1 Ship dependent keymaps, buttonmaps and .xtrekrc files You can add one of: sc, dd, ca, bb, as, sb, ga, att, default to the following default options to override them based on ship type: rcfile-??: ship specific .xtrekrc file, keymap-??: ship dependent keymap, ckeymap-??: ship dependent CTRL keymap, buttonmap-??: ship dependent buttonmap. It will automatically reload the specified defaults if you change the shiptype. If a ship-specific option is not specified, the default option is used for that ship. For e.g., keymap-sc: will be used instead of keymap: whenever you switch to an SC. Used well, this is a very powerful feature. For instance, you might bind a key to your prefered cruising speed, with a different speed for each ship type. Here's part of my keymap as an example. # default: q = warp 2, w = 1/2 maxwarp, e = maxwarp ckeymap: q2w#e% # override some of the above, based on ship type ckeymap-ca: w4 ckeymap-bb: w3 ckeymap-sb: q1w2 4.7.2 Control keymaps Control keymaps (ckeymap) handle the remapping of keys in an analoguous manner to the normal keymap (keymap). The control keymap also allows the user to map both *upper* and *lower* case letters keys when pressed with the control key. This means that ^u and ^U are *different* keys when it come to mapping them. Any combination of normal keys and control keys can be mapped to one another. In other words, you can map from control key to control key, control key to normal key, normal key to normal key, and normal key to control key. New format for ckeymap is: c = any printable ascii character. ^ = introduce control mapping (the key '^' not control + key.) Each entry is a pair, like: cc # regular format c^c # regular->control ^cc # control->regular ^c^c # control->control Example ckeymap: ckeymap: ^a%r^b^m^ca%d5 tfDFf^^E Special case: The '^' must be mapped with a double ^ ("^^") in either the bound or binding key position. Notes: * If you experience difficulties (you shouldn't) you might wish to use a normal keymap and a new ckeymap in combination. Both are read in, the keymap first then the ckeymap. This means that if a key is defined in both the keymap and ckeymap, the ckeymap's definition will be the one used. * If you wish to use ckeymaps in conjunction with keymaps based on ship type (keymap-??, etc.), note that ckeymap still overrides keymap-??. For e.g., if you define a key in ckeymap and in keymap-bb, the ckeymap binding hides the other binding. You should use ckeymap-bb instead. * Since ckeymaps are a superset of keymaps, you might consider using ckeymaps in all situations where you would use keymaps. This will make things a lot simpler for you. (But keep in mind that `^' has a special meaning in ckeymaps!) Analogously, control keys may be used for buttonmap, singleMacro and all macro and RCD definitions. 4.8 Playerlist options newPlist: (on/off) new playerlist, instead of total kills, deaths offense and defense it shows login and stats (off+bomb+planet). Provided for backwards compatibility; use playerListStyle instead. sortPlayers: (on/off) Sort the playerlist with the enemy team players first, then your team and then the neutral players. sortMyTeamFirst: (on/off) Modifies "sortPlayers" so that your team is sorted immediately before the enemy teams. partitionPlist: Add blank lines to a sorted player list to separate the different teams. This is useful in mono where the teams can not be distinguished by their color. playerListStyle: (0-4) The style for the player list. The options are: (0) Custom player list as defined by the playerlist variable above, (1) Old player list, (2) Traditional COW player list, (3) Kill watch player list, (4) BRMH Player list. If "playerListStyle" is set, newPlist is ignored. Use the options menu (shift-O) to try the different styles. If no options are specified, defaults to (1). playerlist: (string) The layout for the player list. What it allows you to do is specify which columns of the player list you want to show and in what order. The following is a table of the available columns. Spc Let Name Header --- --- -------------------- ------------------- 3 'n' Ship Number " No" 3 'T' Ship Type " Ty" 11 'R' Rank " Rank " 17 'N' Name " Name " 6 'K' Kills " Kills" 17 'l' Login Name " Login " 6 'O' Offense " Offse" 6 'W' Wins " Wins" 6 'D' Defense " Defse" 6 'L' Losses " Loss" 6 'S' Total Rating (stats) " Stats" 6 'r' Ratio " Ratio" 8 'd' Damage Inflicted(DI) " DI" 1 ' ' White Space " " options available when compiled with PLIST1 6 'B' Bombing " Bmbng" 6 'b' Armies Bombed " Bmbed" 6 'P' Planets " Plnts" 6 'p' Planets Taken " Plnts" 17 'M' Display/Host Machine " Host Machine " 7 'H' Hours Played " Hours " 6 'k' Max Kills " Max K" 6 'V' Kills per Hour " KPH" 6 'v' Deaths per Hour " DPH" options available when compiled with PLIST2 9 'w' War staus " War Stat" 3 's' Speed " Sp" So for example if you just wanted to see names and rank you'd add this line to your .xtrekrc: playerlist: NR The styles defined by "playerListStyle" are 1: Old style = "nTRNKWLr O D d " 2: COW style = "nTR N K lrSd" 3: Kill watch style = "nTK RNlr Sd" 4: BRMH style = "nTR N K l M" In order for this mod to be in effect you must compile with PLIST defined. The things shown after PLIST1 are only available if you have PLIST1 defined, the same goes for the things after PLIST2, but you must have PLIST defined or neither of these will do anything. NOTE FROM SOURCE KEEPER: PLIST2 is not active in COW currently. Some players feel that placing speed on the playerlist gives a strategic advantage. NOTE ON SB STATS : On servers which support the SBHOURS .feature, you will see slightly different things when you info a SB, or show the SB player on the playerlist. The usual offense and defense lines are replaced with SB kills/hour and deaths/hour. The kills, deaths, hours and ratio entries are all the player's SB stats as long as he is in the SB, and his normal stats otherwise. *************************************************************** 5.0 Connection Types: UDP, TCP. Short packets. *************************************************************** UDP provides an unreliable, packet-based protocol for sending data across an IP network. There are a variety of ways that a UDP packet can be lost or discarded, including a failure of the underlying communication mechanism. UDP implements a checksum over the data portion of the packet. If the checksum of a received packet is in error, the packet will be dropped with no indication given to the user. A queue of received packets is provided for each UDP socket. This queue has a limited capacity. Arriving datagrams which will not fit within its high-water capacity are silently discarded. Guest Rd 71 27 2% / 13% The stats above show a typically UDP connection. It has loss of packets but its round-trip times are fairly low. TCP provides a reliable, flow-controlled, in order transfer of data across an IP network. There is nothing fundamentally different about the way UDP and TCP packets travel over the wire. The only real difference is that TCP will keep sending the same packet over and over again until it gets an acknowledgement back. As a result, TCP connects are typically slower than UDP connections and usually require more bandwidth. TCP is slower because it guarantees that packets will arrive in order and so a lost packet can hold up later packets. Example: Guest Ff 405 669 0% / 0% ^^^ ^^^ ^^^^^^^^^ The above shows possibly the same connection with UDP turned off. There is no loss but the round trip times are much higher. NOTES: * COW always uses TCP for some things. For example, the text messages that you can send to other players are implement in TCP to guarentee that they always arrive. However, if a UDP connection is also available, it is used for the vast majority of communication. * COW will fall back to using a TCP only if it fails to open a UDP link. If you find that you have high lag and no loss, you probably should display the UDP control window (the default key is `+') and turn UDP back on by pressing the top button. * It is recommended to use a TCP connection if you are at the same site (within a few milliseconds lag) of the server you are playing on. The main reason for using UDP is to reduce your round trip times. * The option "tryUdp" can be used to set a preference for using UDP (tryUdp: on) or TCP only (tryUdp: off). *************************************************************** Short Packets: *************************************************************** For a more technical description of short packets, see README.SHORT_PCK. Short packets are supported by COW. These have been shown to substantially reduce the volume of traffic between the client and server, and will improve lag in many situations. Not all servers support short packets yet, but that is changing rapidly. COW has a short packet window which is brought up with the ` key. In this window you can turn short packets on and off as well as configure it in various ways. Also in your netrek defaults file you can add the line tryShort: on in order to have short packets automatically turned on whenever you connect to a server which allows it. Don't forget about the - and | keys for requesting updates. *************************************************************** 6.0 MACROs, RCD, RCM: *************************************************************** Three types of macros exist in the COW client: NBT, NEWMACRO, and SMARTMACRO. NBT is always on, however NEWMACRO and SMARTMACRO can be turned off by a server which does not allow them. You may see a list of what macros are in your client by hitting 'X' followed by '?'. At the top of this list it shows which macros are enabled in the client right now. NBT macros allow you enter a message in your .xtrekrc which you send regularly. macro.x.X: #x is any ascii character; it is the "name" of the macro (the key you press #in macro mode to send the associated macro) #X can be A,T,F,R,K,O where A=all, T=team, F=fed, R=rom, K=kli, O=ori #(determines the message board to which the text body of the macro is sent) Example: macro.b.T: BOMB!!!! For more information on NEWMACRO and SMARTMACRO see the NEWMACRO section below. *************************************************************** Receiver Configurable Distress Calls (RCD): *************************************************************** 9/2/93 - jmn, jn (no relation 8^) 6/7/95 - updated by ATH Receiver configurable distress calls have been added to the client and use a MACRO-like syntax. In order to change the distress type a line such as the following should be in your defaults file. dist.T.taking: (%i) Carrying %a to %l%?%n>-1%{ @ %n%} or simply dist.taking: (%i) Carrying %a to %l%?%n>-1%{ @ %n%} This has the format dist.[key].[name of distress]: [macro] Arguments for the macro and SMARTMACRO syntax are exactly the same as before. Any argument can be used, but usually only those in the groups "Standard" and "FULLY CAPITALIZED" apply. Note that if you don't want to ever see a certain distress, use the macro characters : %*. For example, dist.free_beer: %* will allow your client to simply ignore any "free beer" RCD's that get sent. Below is a table giving the name of each distress, the key it is assigned to, and the default macro (at the time of this writing). Note that except for E and F, these are all control keys. Key Name Default Distress Macro t taking %T%c->%O (%S) Carrying %a to %l%?%n>-1%{ @ %n%} o ogg %T%c->%O Help Ogg %p at %l b bomb %T%c->%O %?%n>4%{bomb %l @ %n%!bomb%} c space_control %T%c->%O Help Control at %L 1 save_planet %T%c->%O Emergency at %L!!!! 2 base_ogg %T%c->%O Sync with --]> %g <[-- OGG ogg OGG base!! 3 help1 %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies. 4 help2 %T%c->%O Help me! %d%% dam, %s%% shd, %f%% fuel %a armies. e escorting %T%c->%O ESCORTING %g (%d%%D %s%%S %f%%F) O ogging %T%c->%O Ogging %h B bombing %T%c->%O Bombing %l @ %n C controlling %T%c->%O Controlling at %l 5 asw %T%c->%O Anti-bombing %p near %b. 6 asbomb %T%c->%O DON'T BOMB %l. Let me bomb it (%S) 7 doing1 %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. %d%% dam, %s%% shd, %f%% fuel 8 doing2 %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. %d%% dam, %s%% shd, %f%% fuel f free_beer %T%c->%O %p is free beer n no_gas %T%c->%O %p @ %l has no gas h crippled %T%c->%O %p @ %l crippled 9 pickup %T%c->%O %p++ @ %l 0 pop %T%c->%O %l%?%n>-1%{ @ %n%}! F carrying %T%c->%O %?%S=SB%{Your Starbase is c%!C%}arrying %?%a>0%{%a%!NO%} arm%?%a=1%{y%!ies%}. @ other2 %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%%D, %s%%S, %f%%F) # other3 %T%c->%O (%i)%?%a>0%{ has %a arm%?%a=1%{y%!ies%}%} at %l. (%d%%D, %s%%S, %f%%F) E help %T%c->%O Help(%S)! %s%% shd, %d%% dmg, %f%% fuel,%?%S=SB%{ %w%% wtmp,%!%}%E%{ ETEMP!%}%W%{ WTEMP!%} %a armies! Here is some documentation written by jmn about how receiver configurable distress calls work: =========================== Well... here's how it works.... Each RC_DISTRESS compatible client can make the distress call appear as whatever you like through their .xtrekrc... If you DONT have a new enough client the server will do a default parsing of the distress call and you will see it like that. Also if the server is old then the distress call sent out by each client will appear the way _the sender_ likes to have them displayed. Let me summarize with an example: F0 likes 'F' to say 'Carrying 4 maggots.' F1 likes 'F' to say 'Carrying 4 armies.' F2 likes 'F' to say 'Carrying 4 lawyers. 20% fuel' The server default is 'Carrying 4.' Note: Advanced RC_DISTRESS users should note that 'F' can be remapped easily in at least 2 different ways. For example throught .xtrekrc dist.(.carrying: %T%c: Carrying %a maggots. singleMacro: ( (this will make 'X(' or '(' be the same as 'F' used to be) There will be more documentation on this coming later but basically the syntax is the same as SMARTMACRO and NEWMACRO. ----------- On a NEW server: Case 1: All of them are using a new client. F1 will ALWAYS see 'Carrying x armies.' No matter who sent it. Case 2: Only F1 is using an old client. F1 will see the _server_ set defaults for the carrying call from everybody. Note that the calls from F0 and F2 will appear in the same format to him on this server (but may appear in a different format on different servers). F2 and F0 will see F1's client-defined distress calls. --------------- On an old server: F1 will see whatever the sender likes to see (in this case the sender sends the pre-formatted text instead of the RC_DISTRESS short-hand). So a 'F' from F2 will appear to everybody as: 'Carrying 4 lawyers. 20% fuel' a 'F' from F0 will appear to everybody as: 'Carrying 4 maggots.' =========================== ------------------------------------------------------------------------- 8/16/93 - jn New feature for default file... rejectMacro: on (on/off) default to off, if on, COW automatically stops NEWMACROs from being sent when the server has turned NEWMACROs off. That is any macro in your defaults file defined by a mac.*.*: (TEXT) line. *************************************************************** NEWMACRO and SMARTMACRO documentation - Jeff Nelson 6/4/1993 *************************************************************** *WARNING* *WARNING* *WARNING* *WARNING* *WARNING* These features default ON in the COW client! A server may turn them off *for you* if they are not allowed at that server. The BRM client will inform you by sending you a message line like: BRM: Features enabled: NO_NEWMACRO, NO_SMARTMACRO If you are not at a server that allows NEWMACRO, then all targetted macros will be treated as normal NBT macros (no argument substitution, %a will broadcast as %a). If you are not on a server that allows SMARTMACRO, then any conditional text or tests will *not* be evaluated, instead they will be sent as the macro appears in your defaults file! If you don't like this, complain to the server god!! Make a difference!! Compilers: In order to use the below features, NBT and NEWMACRO must be defined. In addition, SMARTMACRO must be defined to use the most advanced features. Here is the idea: A player should be able to include in his/her macros whatever reasonable information is available. And configuring its display in whatever way is desired. In order to do this, the following syntax is used (while remaining completely compatible with old NBT macros). A key is assigned in the defaults file (ie .xtrekrc, etc) by a line like: mac.F.T Help! Carrying %a!! This defines a macro which will send a distress containing the number of armies a player is carrying to his team. Note, this is NOT printf syntax! Any attempt to use formatting will fail miserably. Maybe in the future someone will want to develop a means of formatting the variables used in macros, but the only means I can think of are both bulky and ugly. Here is another example: mac.f Help! Carrying %a!! Unlike the first, this macro will not send directly to the team, instead it requires that you give a third keystroke specifying the recipient. For example, it could be invoked by: XfT <- to your team Xf1 <- to player 1 XfG <- if you are desperate, send to God XfA <- if you are stupid, send to ALL Old macros will still work in addition to these, thus be sure there are no conflicts. These generally cause suprising results. For example, if this is in your macro file: mac.E.T Help! I'm carrying!! macro.E.A You all suck! mac.E Help! I'm a twink!! mac.E.T Help! I'm carrying again!! macro.E.A You all suck even worse NOW! The suprising results would be that pressing XE would broadcast the first two messages, and then wait for the destination of the third. It would be impossible to ever use the last two. Unfortunately, multiline macros also do not work if they require a destination. There is no good reason for this, but since multiline macros annoy the hell out of me, I ain't fixing it. You can still do something like: mac.D.A: D mac.D.A: O mac.D.A: O mac.D.A: S mac.D.A: H This would properly broadcase 5 messages containing 1 character to all. If you tried to specify the destination for these by using "mac.D:", only 'D' would be sent. Also '?' can still not be used as a macro key. The following definitions will work in a macro: Standard: %o 3 charcter team name of sender %a armies carried by sender %d sender damage percentage %s sender shield percentage %f sender fuel percentage %w sender wtemp percentage %e sender etemp percentage %t team id character of target planet %T team id character of sender team %r team id character of target team %c sender id character %n armies on target planet %E 1 if etemped, 0 if not %W 1 if wtemped, 0 if not %S sender two character ship type %p id character of target player %g id char of target friendly player %h id char of target enemy player %P id character of player nearest sender %G id char of friendly player nearest sender %H id char of enemy player nearest sender %l three character name of target planet %N full name of target planet %i sender full player name (16 character max) %u full name of target player (16 character max) %z 3 letter team id of target planet %b 3 char name of sender nearest planet %k kills of sender %K kills of target player FULLY CAPITALIZED: %O three character team name of sender %L three character name of target planet %I sender full player name (16 character max) %U full name of target player (16 character max) %Z 3 letter team id of target planet %B 3 char id of sender nearest planet Ping stats: (may differ slightly from server '!' ping stats) %v average ping stat round trip time %V ping stat round trip standard deviation %y percent total packet loss as calculated by server formula Miscellanous: %m the last message you sent %M the last message you sent in all caps %w whydead number for RCM %W whydead text for RCM only %>nn Tab stop at position nn As a further extension to NEWMACRO, a macro may now be sent to any of the following destinations: %i %I %c send message to self %u %U %p send message to player nearest mouse %t %z %Z send message to team of player nearest mouse %g send message to nearest friendly player to my ship %h send message to nearest enemy player to my ship with a syntax like #useful for INL... mac.C.%i: CAPTAIN mac.N.%i: NEWGALAXY mac.S.%i: START mac.T.%i: %Z mac.W.%t: SHUT UP, TWINKS!! mac.I.%u: %u: det when you escort! mac.O.%u: (%i) ogging What this does is allows you to send a macro to a player or team specified by your mouse location instead of requiring a 3rd character to be input. Also, it allows you to send message to yourself without having to actual sit there and figure out who you are (they tried and failed back in the '60s). >>>>The above is available when NEWMACRO is defined; from here on, >>>>SMARTMACRO must be defined *in addition*. Further, tests may be done within the macro system, the syntax for these test is as follows. %? introduces a test = equivalence > greater < less Expressions are evaluated on a character by character basis until the test is resolved. The text of the test is then replaced in the macro by 1 or 0. Test are then fed to a syntax I call conditional text. The best way to demonstrate how this works is example. 1%{included if true%!included if false%} This would print: included if true 0%{included if true%!included if false%} included if false Combining the whole package, a very robust macroing system is quickly generated. One can easily design or mimic Distress calls, including the variable NBT distress of the COW client and all the hardcoded message macroing built into my own client but never released. Here are a few more samples to work from: mac.F.T: Help! Carrying %a!! mac.f: Help! Carrying %a!! mac.c.T: %p++ near %l mac.b.T: %?%n>4%{bomb %l at %n%!bomb%} mac.d.T: %E%{%!%W%{%!I'm fine. How are you? %}%}%E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} mac.a.T: %E%{ETEMPED!!! %}%W%{WTEMPED!!! %}Carrying %?%a>0%{%a armies!%!NO armies.%} mac.R.A: I'm a %?%S=SB%{star base!%!twink!%} mac.K.A: KissMy%S mac.t: thanks mac.y: yes mac.n: no mac.B: bye, getting hungry/sleep/horny mac.e.T: need escort going to %l%?%a>0%{, carrying %a armies!%} mac.v.%t: %T%c PING stats: Average: %v ms, Stdv: %V ms, Loss: %y%% #My Favorite: mac.m: %m *************************************************************** * Symbolic names for macro destinations - Kurt Siegl 27/4/95 *************************************************************** You always wanted to send a macro directly to the captain, base, or the second SC bomber? Symbolic macro keys will solve your problems. Here how it goes: In the .xtrekrc file you assign a key to a symbolic name: key.[key].[dest]: [name of key] If the destination isn't specified the key defaults to team. Examples: key.C: captain key.B.t: base key.m.A: me Then you can use that new key in your macros. Examples: mac.o.C: Hi Captain let me suggest a base ogg? mac.a.B: BASE: Free armies for me? mac.t.m: TIME Finally during runtime you may change the actual destination by sending a message: set [name of key] [destination id] to the shell ("!") tools. Of corse this may be done with macros as well. Examples: mac.^C.!: set captain %g mac.^m.!: set me %c You can check the settings on the shell tools window "M". *************************************************************** Receiver Configurable Server Messages (RCM) *************************************************************** Short package kill messages may be freely configured using the macro syntax interpreter where * the killed person corresponds to the sender, * the killer corresponds to the target player, * involved planet (killed by, destroyed, taken) to the target planet, * damage is int part of kills and shield fraction part. * whydead goes with wtmp. All others are undefined. The format of the messages is: msg.[name of message]: [RCM macro] Available messages and their defaults are: msg.kill: ........ msg.kill:GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%}) was kill %?%d>0%{%k%!NO CREDIT)%} for %u (%r%p) %?%w>0%{%W%!%} msg.planet:GOD->ALL %i (%S) (%T%c%?%a>0%{+%a armies%!%} killed by %l (%z) %?%w>0%{%W%!%} msg.bomb:%N->%Z We are being attacked by %i (%T%c) who is %d%% damaged. msg.destroy:%N->%Z %N destroyed by %i (%T%c) msg.take:%N->%O %N taken by %i (%T%c) msg.ghostbust:GOD->ALL %i (%S) (%T%c) was kill %k for the GhostBusters BRMH formated kill windows may be optain by something like: msg.kill: %i (%S) (%T%c%?%a>0%{+%a armies%!%}) %>30 kill %?%d>0%{%k%!NO CREDIT)%} for %u (%r%p) %?%w>0%{%>65%W%!%} *************************************************************** 7.0 MetaServer Options *************************************************************** The MetaServer and the MetaServerCache are provided to help you find a netrek game to join. Both services provide a list of the popular netrek servers. The MetaServer is neat because provides information on the number of players at each site. The MetaServerCache is neat because it is much faster if you can guess where a game will be. To access the MetaServer, use the command line switch "-m" or "-M". For example "cow -m". To access the MetaServerCache, use the "-k" switch instead. The command line options are as follows: -m Default to UDP connection mode to metaserver if metaType not set -M Default to TCP connection mode to metaserver if metaType not set -k use TCP metaserver cache to display known servers If metaType (defined later) is set, -m or -M will connect to metaserver based on what metaType is set to. 1) Where to find the MetaServer: You can use the options "metaport" and "metaserver" to point COW to a new MetaServer. The defaults for these options are: metaport: 3521 metaserver: none The metaserver usually resides at metaserver.netrek.org port 3521 In UDP mode multiple metaservers can be listed on the "metaserver" option, comma separated. Example: metaserver: metaserver.netrek.org, metaserver.eu.netrek.org Also in UDP mode, if a hostname listed has more than 1 IP address, the client will attempt to connect to all IPs listed in that hostname. It will then merge all responses into 1 list and display that list. In TCP mode, only 1 hostname may be listed. 2) How to create a list of known servers for the MetaServerCache: Before you can use the MetaServerCache, you must give COW a file in which to cache the information from the MetaServer. Use the .xtrekrc options "metaCache" and "metaUDPcache" to specify these files. The files path will be relative to your home directory unless you start the file name with a slash (/). "metaCache" defines the TCP cache, and "metaUDPcache" defines the UDP cache. The TCP and UDP cache can NOT be the same. They are incompatible formats. For example, to set the cache files to "~/.metaCache" and "~/.metaUDPcache" use: metaCache: .metaCache metaUDPcache: .metaUDPcache Unlike the MetaServer, the MetaServerCache will not show the number of people playing at a server. If a server is contactable, it will be shown as "Active". Warning: If "metaCache" or "metaUDPcache" are set, COW will also use a second, temporary file. This file with have the name of the metaCache file with the last character changed to either a 'T' or an 'R'. Eg, ".metaCache" becomes ".metaCachT" and "BEAST" becomes "BEASR". Ensure that this temporary file does not overwrite something important. 3) How to set the connection type to the metaserver: The xtrekrc option "metaType" will determine how COW connects to the metaserver. The default for this option is: metaType: (default: whaterver the command line has, -m=1 -k=2 -M=3 out of range values default to 3) where the values 1, 2, 3 are defined as: How to connect to the Metaserver. Connect with UDP, cache, or TCP. 1 == cache, then UDP 2 == cache, then TCP 3 == TCP, then cache UDP mode offers more options and more recent information as well as a quicker startup and a refresh button, explained later. TCP mode is the normal method and should be used when connections are unreliable or if you're behind a firewall. 4) How much information will be shown: You can now control the amount of information that the MetaServer displays for you by setting the "metaStatusLevel" flag. The default is: metaStatusLevel: 3 The status levels are coded as follows. 0 Servers which have players but not a wait queue. 1 + Servers with a wait queue. 2 + Servers with nobody playing. (see NOTE1). 3 + Servers which have Timed Out for the MetaServer (see NOTE2). 4 + Servers which the MetaServer has not been able to connect to. NOTE1: When using the MetaServerCache, "metaStatusLevel" values of less than 3 are treated as the value 3. This minimum is enforced because the cache does not attempt to show the number of people playing at a site. NOTE2: If you are a long way from the MetaServer, you are advised to ignore TimeOut errors. For example, the MetaServer in America may have difficulty contacting to a server in Holland while the link from England to Holland is very good. 5) The Fallback If you attempt to contact the MetaServer, and the connection times out, COW will try to show the MetaServerCache instead. Similarly, if you attempt to use the MetaServerCache, and your "metaCache" file does not exist, COW will attempt to call theMetaServer. In UDP mode, COW will show the UDP cache right away, and then update the screen as responses come in. 6) The display COW will pop up a window with a list of game servers. The format of the window is 1 server per line, starting with the server name, followed by the server status, and the server type. In UDP mode it will also show the age of the data on that server. In UDP mode, a refresh button is also available. Hitting that line will re-query the metaservers for more up to date data. Please don't abuse this and rapidly click this button over and over as this may make the metaserver admins ban you from connecting. To choose a server to play on, LEFT click on the server. To join as an observer RIGHT click on the server. COW will then connect to the game server. 7) Miscellaneous The option "metaverbose" will make UDP metaserver queries slightly more verbose. When on, COW will display who its connecting to and who responds. The default for this option is: metaverbose: off *************************************************************** 8.0 Compiling: *************************************************************** COW has the best and easiest to use installation procedure a client ever had. make In case you will need some additional flags for your compiler or linker, edit the "sample_key.def" file and change the corresponding parameters at the bottom. You are done! watch that GPA hit the floor!! cow@netrek.org always likes to receive bug reports for the client and if you have any suggestion for how to improve the Makefiles or this description, please email us. Remember that fixes are the best way to complain. Working patches should be sent to: cow@netrek.org *************************************************************** 9.0 BEEPLITE.DOC *************************************************************** Local weenies cheat. They talk to each other. Those of us who have never met another netrek player are forced to relie heavily on the message window. In order to even the playing field, the current feature was proposed. This feature causes certain types of RCD messages to beep or even highlite specific objects on the screen. This is done via a macro-like interface which is highly configurable. Further, bitmaps used to highlite can be substituted with your preferences. *** TURNING BEEPING AND HIGHLITING ON In order to turn message beeping and highliting on, you must include the following in your .xtrekrc. UseLite: on The above leaves you with the feature on, but nothing is automatically setup. If you want to configure it yourself, go to the "CONFIGURING VIA XTREKRC" section. You can include a set of reasonable defaults, instead of bothering to learn to configure it yourself by including the lines. DefLite: on At any time, you can extend these simply by including some of the configuration syntax in your .xtrekrc as described in the "CONFIGURING VIA XTREKRC" section. WARNING: Use beep _sparingly_, people (including you) will get sick very quickly of hearing your workstation beep every 5 seconds. *** CONFIGURING VIA XTREKRC Message beeps are configured as on and off. They are turned on if the proper line is in your .xtrekrc. Otherwise they are left off. Message lites are configured in a way very similar to macros. However, in addition to the original set of macro arguments, a new class of arguments is introduced to handle the highliting. To configure message highliting, include something like the line below. Here "name of distress" is the RCD message type. "macro" is the macro style syntax specifying what is to be highlited. lite.[name of distress]: [macro] Below are the configurations which are equivalent to the defaults which are setup for you if using DefLite. These provide good examples for how the system works. lite.taking: /c/l lite.base_ogg: /g/m lite.pickup: /h lite.help: %?%S=SB%{/c%} The above does the following, "taking" message highlites the planet and taker "base_ogg" message highlites the person to sync and your ship (to REALLY get your attention) "pickup" message highlites the enemy who picked up "help" tests to see if the player sending the distress is a base, if so he is highlited You might like to change the last one to: lite.help: %?%S=SB%{/c%}%?%a>0%{/c%} This will highlite bases who distress AND carriers who distress. Using TTS you may change the pickup macro to: lite.pickup: /h/|%p++ @ %l| This sends a big ++ message on the tactical map in addition to the light. Note that all the MACRO parsing routines are run on these, and plain text left over is ignored. Only the highlite argument matter. The following are the arguments for highliting. /c /i /I sender /m /M _your_ ship /p target player /g target friendly player /h target enemy player /P player nearest sender /G friendly player nearest sender /H enemy player nearest sender /b planet nearest sender /l target planet The following are the arguments for sounds. /0 Standard window beep (incoming message sound if sound is on) /1 - /9 Play nt_message1 - nt_message9 sound. Tactical Text Solution for the Tactical Tunnel Syndrome (TTS): /| .. | displays Text in between via TTS. Additional defaults: planetCycleTime: highlighting time for planets playerCycleTime: highlighting time for players tts_color: color of TTS message (should be dark) tts_font: Font (large prefered) tts_max_len: Max length of a message tts_time: Time a TTS message is displayed tts_pos: y location of the TTS message ******************************************************************************* End of COW.DOC netrek-client-cow-3.3.2/netrek-client-cow.desktop0000664000175000017500000000030313657750470020772 0ustar jamesjames[Desktop Entry] Name=Netrek Exec=/usr/games/netrek-client-cow Icon=/usr/share/pixmaps/netrek-client-cow/icon.png StartupNotify=false Terminal=false Type=Application Categories=Game;StrategyGame; netrek-client-cow-3.3.2/audio.h0000664000175000017500000000244013657750470015323 0ustar jamesjames /* Portable Sound Library * * Copyright 1993 by Kurt Siegl <007@netrek.org> Permission to use, * modify, copy and distribute this software without fee is hereby granted as * long as this notice is left here. * */ #ifndef __SNDLIB_H #define __SNDLIB_H /* Background Sound player */ /* Starts the Background Sound player Returns: 0 on succes -1 in case of an * error */ extern int InitSound(void); /* Terminate Sound player */ extern void ExitSound(void); /* Is a sound currently playing? */ extern int SoundPlaying(); /* In WINBASE.H (at least in MS VC++) StartSound and StopSound are * defined, even though they are supposed to be deleted functions. * Being the lazy sort, I just edited WINBASE.H to remove the redef * and incorrect def errors. -SAC 96-Jul-06 */ #ifdef HAVE_WIN32 /* Play a Soundfile */ extern int myStartSound(char *name); /* Stop the currently played sound */ extern void myStopSound(void); #define StartSound myStartSound #define StopSound myStopSound #else /* Play a Soundfile */ extern int StartSound(char *name); /* Stop the currently played sound */ extern void StopSound(void); /* Internal audio configurations */ #define SOUNDPLAYER "bgsndplay" struct shm_sound { char name[PATH_MAX]; int play_sound; }; #endif /* __SNDLIB_H */ #endif netrek-client-cow-3.3.2/INSTALL0000664000175000017500000001747113657750470015114 0ustar jamesjames(These instructions are only relevant for a .tar.gz distribution. If you have instead obtained the sources from the repository, you must first run autogen.sh.) Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. netrek-client-cow-3.3.2/camera.h0000664000175000017500000000012713657750470015452 0ustar jamesjames/* camera.c */ #ifdef CAMERA void camera_snap(Display *display, Window window); #endif netrek-client-cow-3.3.2/cow.desktop0000664000175000017500000000025113657750470016232 0ustar jamesjames[Desktop Entry] Name=Netrek Client (COW) Comment=Conquer space with Netrek Exec=netrek-client-cow Terminal=false Type=Application Icon=cow Categories=Game;StrategyGame; netrek-client-cow-3.3.2/dashboard3.c0000664000175000017500000002735513657750470016243 0ustar jamesjames /* * dashboard.c - graphic tstatw - 6/2/93 * lab2-dashboard.c - 2nd graphic tstatw - 7/29/96 * * Copyright (C) 1993 1996, Lars Bernhardsson (lab@mtek.chalmers.se) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "config.h" #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" static int db_itoa(char *s, int v) { char *buf = s; *buf = '0' + (v / 100000); if (*buf != '0') { buf++; } *buf = '0' + ((v % 100000) / 10000); if ((*buf != '0') || (v >= 100000)) { buf++; } *buf = '0' + ((v % 10000) / 1000); if ((*buf != '0') || (v >= 10000)) { buf++; } *buf = '0' + ((v % 1000) / 100); if ((*buf != '0') || (v >= 1000)) { buf++; } *buf = '0' + ((v % 100) / 10); if ((*buf != '0') || (v >= 100)) { buf++; } *buf++ = '0' + (v % 10); return buf - s; } static int db_ftoa(char *s, float v) { char *buf = s; if (v >= 100.0) { *buf++ = '0' + ((int) (v / 100)); *buf++ = '0' + ((int) (((int) v % 100) / 10)); } else if (v >= 10.0) { *buf++ = '0' + ((int) (v / 10)); } *buf++ = '0' + (((int) v) % 10); *buf++ = '.'; *buf++ = '0' + (((int) (v * 10)) % 10); *buf++ = '0' + (((int) (v * 100)) % 10); return buf - s; } static void db_bar(char *l, int x, int y, int w, int h, int m, int t, int v, int b) { int i, hgt, val_pix, tmax_pix, yellow_pix, red_pix; int label_len; char label[32]; W_ClearArea(tstatw, x, y, w, h); if (b) { val_pix = (w * v) / m; } else { val_pix = (w * (m - v)) / m; } tmax_pix = (w * t) / m; yellow_pix = w / 3; red_pix = (2 * w) / 3; if ((t < 0) || (t > m) || (v < 0) || (v > m)) { W_FillArea(tstatw, x, y, w, h, W_Red); W_MaskText(tstatw, x + w - (3 * W_Textwidth) - 2, y + h - W_Textheight - 2, W_White, l, 3, W_BoldFont); label_len = db_itoa(label, v); W_MaskText(tstatw, x, y, W_White, label, label_len, W_BoldFont); label_len = db_itoa(label, t); if (t == m) { W_MaskText(tstatw, x, y + W_Textheight + 2, W_Grey, label, label_len, W_RegularFont); } else { W_MaskText(tstatw, x, y + W_Textheight + 2, W_White, label, label_len, W_RegularFont); } } else { for (i = 0; i < w; i++) { hgt = h - ((h * i) / w); if ((i >= tmax_pix) && (i % 2)) { W_MakeLine(tstatw, x + i, y + hgt, x + i, y + h, W_Grey); } else if (i <= val_pix) { if (i < yellow_pix) { W_MakeLine(tstatw, x + i, y + hgt, x + i, y + h, W_Green); } else if (i < red_pix) { W_MakeLine(tstatw, x + i, y + hgt, x + i, y + h, W_Yellow); } else { W_MakeLine(tstatw, x + i, y + hgt, x + i, y + h, W_Red); } } } if (b ? (v > (m / 2)) : (v < (m / 2))) { W_MaskText(tstatw, x + w - (3 * W_Textwidth) - 2, y + h - W_Textheight - 2, W_White, l, 3, W_RegularFont); } else { W_MaskText(tstatw, x + w - (3 * W_Textwidth) - 2, y + h - W_Textheight - 2, W_Grey, l, 3, W_RegularFont); } label_len = db_itoa(label, v); if (b ? (v > (m / 2)) : (v < (m / 2))) { W_MaskText(tstatw, x, y, W_White, label, label_len, W_BoldFont); } else { W_MaskText(tstatw, x, y, W_Grey, label, label_len, W_BoldFont); } label_len = db_itoa(label, t); if (t == m) { W_MaskText(tstatw, x, y + W_Textheight + 2, W_Grey, label, label_len, W_RegularFont); } else { W_MaskText(tstatw, x, y + W_Textheight + 2, W_White, label, label_len, W_RegularFont); } } W_MakeLine(tstatw, x, y + h, x + w, y + h, W_Grey); W_MakeLine(tstatw, x + w, y, x + w, y + h, W_Grey); } static void db_flags(int fr) { static unsigned int old_flags = -1; static unsigned char old_tourn = -1; char buf[13]; if (fr || (old_flags != me->p_flags) || (old_tourn != status->tourn)) { buf[0] = (me->p_flags & PFSHIELD ? 'S' : ' '); if (me->p_flags & PFGREEN) { buf[1] = 'G'; } else if (me->p_flags & PFYELLOW) { buf[1] = 'Y'; } else { buf[1] = 'R'; } buf[2] = (me->p_flags & (PFPLLOCK | PFPLOCK) ? 'L' : ' '); buf[3] = (me->p_flags & PFREPAIR ? 'R' : ' '); buf[4] = (me->p_flags & PFBOMB ? 'B' : ' '); buf[5] = (me->p_flags & PFORBIT ? 'O' : ' '); if (me->p_ship.s_type == STARBASE) { buf[6] = (me->p_flags & PFDOCKOK ? 'D' : ' '); } else { buf[6] = (me->p_flags & PFDOCK ? 'D' : ' '); } buf[7] = (me->p_flags & PFCLOAK ? 'C' : ' '); buf[8] = (me->p_flags & PFWEP ? 'W' : ' '); buf[9] = (me->p_flags & PFENG ? 'E' : ' '); if (me->p_flags & PFPRESS) { buf[10] = 'P'; } else if (me->p_flags & PFTRACT) { buf[10] = 'T'; } else { buf[10] = ' '; } if (me->p_flags & PFBEAMUP) { buf[11] = 'u'; } else if (me->p_flags & PFBEAMDOWN) { buf[11] = 'd'; } else { buf[11] = ' '; } if (status->tourn) { buf[12] = 't'; } else { buf[12] = ' '; } W_WriteText(tstatw, 2, 32, W_White, buf, 13, W_RegularFont); old_flags = me->p_flags; old_tourn = status->tourn; } } void db_redraw_lab2(int fr) { static int old_spd = -1, old_cur_max = -1; static int old_shl = -1, old_dam = -1; static int old_arm = -1, old_cur_arm = -1; static int old_wpn = -1, old_egn = -1; static int old_ful = -1; static float old_kills = -1; int cur_max, cur_arm, label_len; char label[32]; if (me->p_ship.s_type == ASSAULT) { cur_arm = (3 * me->p_kills); } else { cur_arm = (2 * me->p_kills); } if (cur_arm < 0) { cur_arm = 0; } else if ((cur_arm > me->p_ship.s_maxarmies) || (me->p_ship.s_type == STARBASE)) { cur_arm = me->p_ship.s_maxarmies; } cur_max = ((me->p_ship.s_maxspeed + 2) - ((me->p_ship.s_maxspeed + 1) * ((float) me->p_damage / (float) me->p_ship.s_maxdamage))); if (cur_max < 0) { cur_max = 0; } else if (cur_max > me->p_ship.s_maxspeed) { cur_max = me->p_ship.s_maxspeed; } if (fr) { W_ClearWindow(tstatw); } db_flags(fr); if (fr || (me->p_speed != old_spd) || (old_cur_max != cur_max)) { db_bar("Spd", 2, 2, 75, 25, me->p_ship.s_maxspeed, cur_max, me->p_speed, 1); } if (fr || (old_ful != me->p_fuel)) { db_bar("Ful", 82, 2, 75, 25, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, me->p_fuel, 0); } if (fr || (old_shl != me->p_shield)) { db_bar("Shl", 162, 2, 75, 25, me->p_ship.s_maxshield, me->p_ship.s_maxshield, me->p_shield, 0); } if (fr || (old_dam != me->p_damage)) { db_bar("Dam", 242, 2, 75, 25, me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, me->p_damage, 1); } if (me->p_ship.s_type == STARBASE) { if (fr || (old_wpn != me->p_wtemp)) { db_bar("Wpn", 322, 2, 75, 25, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_wtemp / 10, 1); } if (fr || (old_egn != me->p_etemp)) { W_ClearArea(tstatw, 324, 32, 78, W_Textheight); label[0] = 'E'; label[1] = 'g'; label[2] = 'n'; label[3] = ':'; label[4] = ' '; label_len = 5 + db_itoa(&label[5], me->p_etemp / 10); label[label_len++] = '/'; label_len += db_itoa(&label[label_len], me->p_ship.s_maxegntemp / 10); if (me->p_etemp > (me->p_ship.s_maxegntemp / 2)) { W_WriteText(tstatw, 324, 32, W_White, label, label_len, W_BoldFont); } else { W_WriteText(tstatw, 324, 32, W_Grey, label, label_len, W_RegularFont); } } } else { if (fr || (old_egn != me->p_etemp)) { db_bar("Egn", 322, 2, 75, 25, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, me->p_etemp / 10, 1); } if (fr || (old_wpn != me->p_wtemp)) { W_ClearArea(tstatw, 324, 32, 78, W_Textheight); label[0] = 'W'; label[1] = 'p'; label[2] = 'n'; label[3] = ':'; label[4] = ' '; label_len = 5 + db_itoa(&label[5], me->p_wtemp / 10); label[label_len++] = '/'; label_len += db_itoa(&label[label_len], me->p_ship.s_maxwpntemp / 10); if (me->p_wtemp > (me->p_ship.s_maxwpntemp / 2)) { W_WriteText(tstatw, 324, 32, W_White, label, label_len, W_BoldFont); } else { W_WriteText(tstatw, 324, 32, W_Grey, label, label_len, W_RegularFont); } } } if (fr || (old_arm != me->p_armies) || (old_cur_arm != cur_arm)) { W_ClearArea(tstatw, 402, 2, 98, W_Textheight); if (cur_arm > 0) { label[0] = 'A'; label[1] = 'r'; label[2] = 'm'; label[3] = 'i'; label[4] = 'e'; label[5] = 's'; label[6] = ':'; label[7] = ' '; label_len = 8 + db_itoa(&label[8], me->p_armies); label[label_len++] = '/'; label_len += db_itoa(&label[label_len], cur_arm); if (me->p_armies >= cur_arm) { W_WriteText(tstatw, 402, 2, W_Red, label, label_len, W_BoldFont); } else if (me->p_armies > 0) { W_WriteText(tstatw, 402, 2, W_Yellow, label, label_len, W_BoldFont); } else { W_WriteText(tstatw, 402, 2, W_Green, label, label_len, W_BoldFont); } } } if (fr || (old_kills != me->p_kills)) { W_ClearArea(tstatw, 402, 4 + W_Textheight, 98, W_Textheight); if (me->p_kills > 0.0) { label[0] = ' '; label[1] = 'K'; label[2] = 'i'; label[3] = 'l'; label[4] = 'l'; label[5] = 's'; label[6] = ':'; label[7] = ' '; label_len = 8 + db_ftoa(&label[8], me->p_kills); if (cur_arm > 4) { W_WriteText(tstatw, 402, 4 + W_Textheight, W_White, label, label_len, W_BoldFont); } else if (cur_arm > 1) { W_WriteText(tstatw, 402, 4 + W_Textheight, W_White, label, label_len, W_RegularFont); } else { W_WriteText(tstatw, 402, 4 + W_Textheight, W_Grey, label, label_len, W_RegularFont); } } old_kills = me->p_kills; } old_spd = me->p_speed; old_cur_max = cur_max; old_shl = me->p_shield; old_dam = me->p_damage; old_arm = me->p_armies; old_cur_arm = cur_arm; old_wpn = me->p_wtemp; old_egn = me->p_etemp; old_ful = me->p_fuel; } netrek-client-cow-3.3.2/ntrk6x10.fon0000664000175000017500000006116013657750470016156 0ustar jamesjamesMZÿÿÿ¸@€º´ Í!¸LÍ!This program cannot be run in DOS mode. $NE e,ƒ1@@ø† €^P °€ zi0Ø“ãi0Ù“Lj0Ú“¶q0Ê—'q0Ë—˜q0Ì— y0Ô—‚y0Õ—ûy0Ö—t‘0Ÿ‘0ß–‘0ÄŸFONTDIRFIXFONTS-FONTRES 100,96,96 : Fixedsys for the IBM 8514 ؉This font is in the Public Domaindd ‚NetrekÙ‰This font is in the Public Domaindd¼ ‚NetrekÚ•This font is in the Public Domaindd ‚Netrek5x8UnderlineÊ This font is in the Public Domaindd  NetrekË This font is in the Public Domaindd¼  NetrekÌ This font is in the Public Domaindd  NetrekÔ‹This font is in the Public Domaindd  „NetrekÕ‹This font is in the Public Domaindd¼  „NetrekÖ‹This font is in the Public Domaindd  „Netrek This font is in the Public Domaindd   Netrekà This font is in the Public Domaindd¼   NetrekÄ This font is in the Public Domaindd   Netrek‰This font is in the Public Domaindd ‚zz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz00xx00P(P(P(`@xP`@`0(0(p@p0(0(@@p8 0 pPp88HhXH 0PP 8 àà 8 8 ø øøøøø 8 à øø  @ x  xx000xx@( p x PP0x0x0 p@pp (X00hP PP Xh0  @ @H0x0H x  x00 @@0HXhH000H0@xx0H00Pxx@pH00@pHH0x @@0H0HH00HH80000000  @ xx@  @0H 0HXX@80HHxHHpHpHHp0H@@H0pHHHHpx@p@@xx@p@@@0H@XH0PPpPPPp pxP HP``PH@@@@@xHxxHHHHHhXHH0HHHH0pHHp@@0HHHH0pHHpPH0@0H0x HHHHH0HHH000HHHxxHHH00HHHH0 x @x0 0@@ ` `0Hx 0XX(@@PhHp0@@0(XH80p@0( p (XX8H0@@PhHH P @@P`PP xxHHPhHH0HH00HHp@@(XX(Ph@@8p8p p HHHpHH00HHxxH00HHHH8px x0 @ 0 @(PNetrek‰This font is in the Public Domaindd¼ ‚zz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz00xx00P(P(P(`@xP`@`0(0(p@p0(0(@@p8 0 pPp88HhXH 0PP 8 àà 8 8 ø øøøøø 8 à øø  @ x  xx000xx@( p x PP0x0x0 p@pp (X00hP PP Xh0  @ @H0x0H x  x00 @@0HXhH000H0@xx0H00Pxx@pH00@pHH0x @@0H0HH00HH80000000  @ xx@  @0H 0HXX@80HHxHHpHpHHp0H@@H0pHHHHpx@p@@xx@p@@@0H@XH0PPpPPPp pxP HP``PH@@@@@xHxxHHHHHhXHH0HHHH0pHHp@@0HHHH0pHHpPH0@0H0x HHHHH0HHH000HHHxxHHH00HHHH0 x @x0 0@@ ` `0Hx 0XX(@@PhHp0@@0(XH80p@0( p (XX0H0@@PhHH P @@P`PP xxHHPhHH0HH00HHp@@(XX(Ph@@8p8p p HHHpHH00HHxxH00HHHH8px x0 @ 0 @(PNetrek•This font is in the Public Domaindd ‚zz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrz‚Š’š¢ª²ºÂÊÒÚâêòú "*2:BJRZbjrzø00xx00øP(P(P(ø`@xPø`@`0(0(øp@p0(0(ø@@p8 0 øpPpø p pøHhXH 8øPP 8ø àøà ø8 ø 8ø ø øøøøøøøøøøø 8 ø à ø øøø ø ø @ xø  xøx000øxx@ø( p xø øø øPPø0x0x0ø p@pp ø(X00hPø PP Xxø0 ø ø@ @øH0x0Hø x ø øxø00ø @@ø0HXhH0ø0ø0H0@xøx0H0ø0Pxøx@pH0ø0@pHH0øx @@ø0H0HH0ø0HH80ø0000ø00 ø @ øxxø@  @ø0H ø0HXX@8ø0HHxHHøpHpHHpø0H@@H0øpHHHHpøx@p@@xøx@p@@@ø0H@XH0øPPpPPPøp pøxP øHP``PHø@@@@@xøHxxHHHøHHhXHHø0HHHH0øpHHp@@ø0HHHH0øpHHpPHø0@0H0øx øHHHHH0øHHH000øHHHxxHøHH00HHøHH0 øx @xø0 0ø@@ ø` `ø0Høxø ø0XX(ø@@PhHpø0@@0ø(XH8ø0p@0ø0@`@@ø(XX0Hø@@pPPø øPø@@P`PPø øxxHHøPhHHø0HH0ø0HHp@ø(XX(øPh@@ø8p8pø p øHHHpøHH00øHHxxøH00HøHHH8øx xø0ø ø@ 0 @ø(PøøNetrek5x8Underline This font is in the Public Domaindd  zzƒŒ•ž§°¹ÂËÔÝæïø %.7@IR[dmvˆ‘𣬵¾ÇÐÙâëôý!*3<ENW`ir{„–Ÿ¨±ºÃÌÕÞçðù &/8AJS\enw€‰’›¤­¶¿ÈÑÚãìõþ"+4=FOXajs|…Ž— ©²»ÄÍÖßèñú88|88T(T(T(THHxHH<p@`@\8@@88$8$@@@x< 8 8((8||HhXHH HH0 <ððüüüüüüðüü @ | ||((((|| $x 8l (((|(|(8P88$T((TH P TH4    T88T| |8 @8LTTd80P|8D ||D8(H||@xD88@XdD8| 8D8DD88D<0888  ||  8D8D\X@8(D|DDx$8$$x8D@@D8x$$$$x|@x@@||@x@@@<@\DL4DD|DDD88D8DHpPHD@@@@@|DDlTDDDdTLDD8DDDD8xDx@@@8DDDT8xDxPHD8@8D8|DDDDD8DDD((DDTTlDD((DDDD(| @|8 8@@ 88(D|08HR\fpz88|88T(T(T(THHxHH<p@`@\8@@88$8$@@@x< 8 8((8||HhXHH HH0 <ððüüüüüüðüü @ |  ||((((|| @$ x 8l (((((|(|((8P88$T((TH PP TH4    D(|(D| |8 @@(DTD(0P|8D @||D8(H||@XdD8 @XdD8| 8DD8DD88DL40888  ||@  @8D8DLTX@8(DD|DDx$$8$$x8D@@@D8x$$$$$x|@@x@@||@@x@@@8D@\DL4DDD|DDD88D8DHP`PHD@@@@@@|DDlTDDDDDdTLDD8DDDDD8xDDx@@@8DDDDT8xDDxPHD8D@8D8|DDDDDD8DDD(((DDDTTlDDD((DDDD(| @|8 8@@ 88(D|08HR\fpz0xxüxx0üxüxüxüØØøØØ|ðÀàÀü0800xÀÀxxlxllÀÀÀø|`x``xxxx00ü00üØøøøØ```|ØØp`|0000ðð00000<000000000<0000ü00000üüüüü0000<000000000ð000000000üü000000000000000 `À` üÀ` `Àüüxxxx ü0ü`À8l`ø`xü`0000000xxxxxüxüxx0xðxHR\fpzü88|88üT(T(T(TüHHxHH<üp@`@\ü8@@88$8$ü@@@x< 8 ü8((8ü||üHhhXH üHH0 <üpüpüüü|ü|ü|ü|ü|ü|üüpü|ü|üü @ |ü@  @|ü|((((ü|| @ü$ x 8l üüüü(((ü((|(|((ü8P88ü$T((THü PP TH4ü ü ü  üD(|(Dü|ü ü|ü8ü @@ü(DDD(ü0P|ü8D @|ü|D8ü(H|ü|@XdD8ü @XdD8ü| ü8DD8DD8ü8DL40ü88ü8 ü ü||ü@  @ü8Dü8DLTX@8ü(DD|DDüx$$8$$xü8D@@@D8üx$$$$$xü|@@x@@|ü|@@x@@@ü8D@@LD8üDDD|DDDü88üD8üDHP`PHDü@@@@@@|üDDlTDDDüDDdTLDDü8DDDDD8üxDDx@@@ü8DDDDT8üxDDxPHDü8D@8D8ü|üDDDDDD8üDDD(((üDDDTTlDüDD((DDüDD(ü| @|ü8 8ü@@ ü88ü(Düü0ü8>>>U*U*U*U*UDDD|DDDx@p@@O8D@D8 <<$$$<BbRJFBR""øøÿÿÿÿÿÿøÿÿ    ?R  ~  @^aAaAAA?8@  @>AA!AGIIN@> !!?!!!>> >>? > ?? >  '!! !!!!?!!!!>>""!"$(0($"! ?AAcUIIAAA!!1)%#!!! !!!!! >!!!> !!!!)>!!!>($"!!! !!!!!!!!!3!!! AAAAIIUcA!! !!AA""? ?@@ <<"A!! .1!!1.! !#!!#!!>  >"" !! &)1!!! $$ &(00(&vIIIIA&)1!!!!!!!.111. ###&)0  > !!!!#!! AAIII6! !!!!#!"??p00p1IFNetrek This font is in the Public Domaindd¼   zz‡”¡®»ÈÕâïü #0=JWdq~‹˜¥²¿ÌÙæó '4AN[hu‚œ©¶ÃÐÝê÷+8ER_ly†“ ­ºÇÔáîû"/<IVcp}Š—¤±¾ËØåòÿ &3@MZgtŽ›¨µÂÏÜéö*7DQ^kx…’Ÿ¬¹ÆÓàíú<~~ÿ~~~<[6m[ff~~~ff?? øøÀðÀßß<~``~<~f~|ngÀÀÀüü??0>>00~~~~~ÿÿÿÿÌìüüÜÌÌ```xxÆÆî|88?? øøøøÿÿÿÿÿÿÿÿÿÿÿÿøøÿÿÿÿ 0`0 0  0 ?v666 0 33~0|ÞÛq <<<<666666666 >ml>O> 1y{6 ?oF0xx1n90`p88p`k>>m  0< 0`@>go{sc> < ?s8 Cc? >p`~s>800<~f~<~f~<>c?>8<<<0 0 `0  0`>g?ccooo`~>>wcccc~7?>77~>c```c>~73337~`~~````~~```>c`ooc>ccccccc~~~~f~<acflxxlfc```````ccwkccccccs{ogccc<~fffff~<~cc~```>cccco>~c~xlfc>cp>c>~~ccccccw>ccc666cccckwcAAc66cAfff<< 0>>000000>>@`0 || ||>wcÿÿ88 <>?w?000>?33??00??33?3??0>>?3?>0>3?0006?;333 < ?33?0007><<>7 ??vkc.?;333?33?>?3?>0000?3?6?;0001>#>>3333?cc66cck>ww333?3?????xðøppøð1fNetrek This font is in the Public Domaindd   zz‡”¡®»ÈÕâïü #0=JWdq~‹˜¥²¿ÌÙæó '4AN[hu‚œ©¶ÃÐÝê÷+8ER_ly†“ ­ºÇÔáîû"/<IVcp}Š—¤±¾ËØåòÿ &3@MZgtŽ›¨µÂÏÜéö*7DQ^kx…’Ÿ¬¹ÆÓàíúÿ>>>>ÿU*U*U*U*UÿDDD|DDDÿx@p@@Oÿ8D@D8ÿ <ÿ<$$$<ÿÿBbRJFBRÿ""ÿøÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿ ÿ  ÿ ?Rÿ ÿ ~ÿ  @^aAaÿÿAAA?8ÿÿÿÿÿ@  @ÿ>AAÿ!AGIIN@>ÿ !!?!!!ÿ>>ÿ ÿ>>ÿ? > ?ÿ? > ÿ '!! ÿ!!!!?!!!!ÿ>>ÿ""ÿ!"$(0($"!ÿ ?ÿAAcUIIAAAÿ!!1)%#!!!ÿ !!!!! ÿ>!!!> ÿ !!!!)ÿ>!!!>($"!ÿ!! !!ÿÿ!!!!!!!3ÿ!!!! ÿAAAAIIUcAÿ!! !!ÿAA""ÿ @ÿÿ@@ ÿ<<ÿ"Aÿÿÿ!!ÿ .1!!1.ÿ! !ÿ#!!#ÿ!!> ÿ >ÿ"" !!ÿ &)1!!!ÿ ÿ$$ÿ &(00(&ÿ ÿvIIIIAÿ&)1!!!ÿ!!!!ÿ.111. ÿ###ÿ&)0 ÿ ÿ> ÿ!!!!#ÿ!! ÿAAIII6ÿ! !ÿ!!!#!"ÿ??ÿÿÿp00pÿ1IFÿÿNetreknetrek-client-cow-3.3.2/playback.c0000664000175000017500000010601313657750470016004 0ustar jamesjames/* PlayBack.c * * Kevin O'Connor 9/22/97 * * Routines neccessary to playback a game recording. */ #include "config.h" #include INC_MACHINE_ENDIAN #include #include #include #include #include #include #include INC_SYS_TIME #include INC_SYS_WAIT #include INC_SYS_RESOURCE #include INC_SYS_SELECT #include #include #include #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "version.h" #include "patchlevel.h" #include "censor.h" #include "cowapi.h" #include "defaults.h" #include "enter.h" #include "getship.h" #include "inform.h" #include "input.h" #include "lagmeter.h" #include "map.h" #include "newwin.h" #include "pingstats.h" #include "redraw.h" #include "socket.h" #include "spopt.h" #include "stats.h" #include "defs.h" #include "playerlist.h" #include "playback.h" #ifdef RECORDGAME extern int opened_info; /* counter for infowin * * * * popup, 6/1/93 LAB */ #define RETURNBASE 10 extern jmp_buf env; int pbdelay = 200000; int *pb_index; int pb_num_index = 0; int pb_goto = 0; int pb_create_index; int pb_index_exists; int pb_num_context = 0; int pb_num_fast_forward = 0; int pb_sequence_count = 0; int pb_stepping = 0; /* non-zero if doing a step */ int pb_snapping = 0; /* non-zero if taking camera snapshots */ const char *INDEX_FORMAT = "%d,%d,%d"; const int INDEX_GRANULARITY = 100; static int packet_size = 0; struct player dummyme; struct player *packetsme; struct player *displayme; /* We want reverse-playback!!! */ #define REVERSE_PLAYBACK void pb_read_index(); int pb_get_index(int sequence_num, int *jump_actual, int *offset, int *num_context); int pb_index_compare(const void *a, const void *b); /* Forward declarations for reverse playback */ void rpb_init(void); void rpb_analyze(int diskpos, void *packet); void rpb_dorev(char *buf); static int readFromFile0(); struct player *packetsme; struct player *displayme; int pbmain(char *name) { int i; #if 0 /* unused? */ int s_type; #endif char index_filename[FILENAME_MAX+1]; char context_filename[FILENAME_MAX+1]; strncpy(index_filename, recordFileName, FILENAME_MAX-4); strncpy(context_filename, recordFileName, FILENAME_MAX-4); index_filename[FILENAME_MAX-4] = '\0'; context_filename[FILENAME_MAX-4] = '\0'; strcat(index_filename, ".idx"); strcat(context_filename, ".cxt"); #ifdef REVERSE_PLAYBACK rpb_init(); #endif playback = PL_FORWARD; pseudo[0] = defpasswd[0] = '\0'; i = setjmp(env); /* Error while initializing */ if (i >= RETURNBASE) return (i - RETURNBASE); /* Terminate with retcode */ if (logFileName != NULL) { logFile = fopen(logFileName, "a"); if (logFile == NULL) { perror(logFileName); return (1); } } for (i = 0; i < 80; i++) { outmessage[i] = '\0'; } SRANDOM(time(NULL)); initDefaults(deffile); SRANDOM(getpid() * time(NULL)); newwin(display_host, name); resetdefaults(); if (censorMessages) initCensoring(); /* open memory...? */ openmem(); /* Open record file. */ recordFile = fopen(recordFileName, "rb"); if (recordFile == NULL) { perror(recordFileName); return (1); } /* Open index files of recording. */ pb_index_exists = 1; if (!pb_create_index) { recordIndexFile = fopen(index_filename, "r"); if (recordIndexFile == NULL) { perror(index_filename); pb_index_exists = 0; } recordContextFile = fopen(context_filename, "rb"); if (recordContextFile == NULL) { perror(context_filename); pb_index_exists = 0; } } else pb_index_exists = 0; /* Create index files if we were told to index the recording. */ if (pb_create_index && (recordIndexFile = fopen(index_filename, "wb"))==NULL) { perror("Could not create index file."); exit(1); } if (pb_create_index && (recordContextFile = fopen(context_filename, "wb"))==NULL) { perror("Could not create context file."); exit(1); } if (pb_create_index) { pbdelay = 0; playback = PL_FORWARD; printf("Creating index.\n"); } me = &dummyme; myship = &(me->p_ship); mystats = &(me->p_stats); me->p_x = me->p_y = 50000; getship(myship, CRUISER); shipchange(CRUISER); displayme = me; packetsme = me; /* Read the index file. We do this only once. */ pb_read_index(); /* Get first packet from file */ readFromFile(); displayme = packetsme; lastm = mctl->mc_current; mapAll(); /* Instructions from getname() */ MZERO(mystats, sizeof(struct stats)); mystats->st_tticks = 1; for (i = 0; i < 95; i++) { mystats->st_keymap[i] = i + 32; mystats->st_keymap[i + 96] = i + 32 + 96; #ifdef MOUSE_AS_SHIFT mystats->st_keymap[i + 192] = i + 32; mystats->st_keymap[i + 288] = i + 32; mystats->st_keymap[i + 384] = i + 32; #endif } mystats->st_keymap[95] = 0; mystats->st_flags = ST_MAPMODE + ST_NAMEMODE + ST_SHOWSHIELDS + ST_KEEPPEACE + ST_SHOWLOCAL * 2 + ST_SHOWGLOBAL * 2; /* End getname() */ phaserWindow = booleanDefault("phaserWindow", phaserWindow); #ifdef AUTOKEY /* autokey.c */ autoKeyDefaults(); #endif /* AUTOKEY */ initkeymap(); /* Set p_hostile to hostile, so if keeppeace is on, the guy starts off * * * hating everyone (like a good fighter should) */ me->p_hostile = (FED | ROM | KLI | ORI); if (!newDashboard) { char buf[128]; sprintf(buf, "Maximum: %2d %3d %3d %3d %6d %3d %3d", 0, 0, 0, 0, 0, 0, 0); W_WriteText(tstatw, 50, 27, textColor, buf, strlen(buf), W_RegularFont); } #ifdef AUTOKEY if (autoKey) { /* XX: changes entire state of display */ W_AutoRepeatOff(); } #endif #ifdef SOUND Init_Sound(); #endif i = setjmp(env); /* Reentry point of game */ if (i >= RETURNBASE) return (i - RETURNBASE); /* Terminate with retcode */ #if defined(SOUND) #if defined(sgi) Engine_Sound(ENG_OFF); /* Stop engine sound */ #else /* text in sound.c:soundrefresh() says engine sound is not supported Abort_Sound(ENGINE_SOUND); */ #endif #endif #ifdef nodef /* Code from entrywindow() */ { run_clock(time(0)); if (remap[me->p_team] == NOBODY) RedrawPlayerList(); /* When you first login */ else UpdatePlayerList(); /* Otherwise */ } /* End entrywindow() */ #endif redrawall = 2; getship(myship, myship->s_type); shipchange(myship->s_type); enter(); calibrate_stats(); W_ClearWindow(w); me->p_status = PALIVE; /* Put player in game */ PlistNoteUpdate(me->p_no); if (showStats) /* Default showstats are on. * */ W_MapWindow(statwin); if (W_IsMapped(lMeter)) redrawLMeter(); if (W_IsMapped(pStats)) /* support ping stuff */ redrawPStats(); #ifdef SOUND #if defined(sgi) Engine_Sound(ENG_ON); #else /* text in sound.c:soundrefresh() says engine sound is not supported Play_Sound(ENGINE_SOUND); */ #endif Play_Sound(ENTER_SHIP_SOUND); #endif #ifdef HOCKEY_LINES init_hockey_lines(); #endif while (1) { #ifdef nodef fd_set readfds; struct timeval timeout; int xsock = W_Socket(); timeout.tv_sec = 0; timeout.tv_usec = 0; #endif if (keepInfo > 0 && opened_info != -2 && /* 6/1/93 LAB */ opened_info < 0 && infomapped) destroyInfo(); if (keepInfo > 0 && opened_info != -2) opened_info--; while (W_EventsQueuedCk()) { process_event(); /* W_Flush(); */ } intrupt(NULL); W_Flush(); if (!pb_stepping) usleep(pbdelay); if (pb_snapping) W_CameraSnap(w); } } void pbsetspeed(char key) { #define JUMP_MAX 7 static char jump_str[JUMP_MAX] = ""; static int jump_idx = 0; static int jump_on = 0; static int tmp_playback; static int tmp_pbdelay = -1; int old_playback; /* Used at end of function. */ old_playback = playback; /* Read in sequence number to jump to. */ if (jump_on) { switch (key) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': /* Ignore further input if we run out of room. */ if (jump_idx > JUMP_MAX - 2) break; /* Get the next number. */ jump_str[jump_idx] = key; jump_idx++; jump_str[jump_idx] = '\0'; printf("Jump input: %s\n", jump_str); break; case 'J': /* abort jump */ jump_on = 0; playback = tmp_playback; printf("Aborting jump.\n"); jump_str[0] = '\0'; break; default: /* Done entering jump data when non-digit key hit. */ jump_str[jump_idx] = '\0'; /* Convert string to number. */ pb_goto = strtol(jump_str, NULL, 10); if (pb_goto < 1) pb_goto = 1; jump_on = 0; jump_str[0] = '\0'; break; } goto end; } if (playback == PL_PAUSE) playback = PL_FORWARD; switch (key) { case 0x8: /* step backward one frame */ pb_stepping++; playback = PL_REVERSE; break; case 0xd: /* step forward one frame */ pb_stepping++; break; case ' ': /* turn on or off single step */ if (old_playback == PL_PAUSE) playback = PL_FORWARD; else pb_stepping++; break; case '0': playback = PL_PAUSE; break; case '1': tmp_pbdelay = pbdelay = 800000; break; case '2': tmp_pbdelay = pbdelay = 400000; break; case '3': tmp_pbdelay = pbdelay = 200000; break; case '4': tmp_pbdelay = pbdelay = 100000; break; case '5': tmp_pbdelay = pbdelay = 50000; break; case '6': tmp_pbdelay = pbdelay = 25000; break; case '7': tmp_pbdelay = pbdelay = 12500; break; case '8': tmp_pbdelay = pbdelay = 6250; break; case '9': case '#': case '!': case '@': case '%': tmp_pbdelay = pbdelay = 0; break; case '<': if (tmp_pbdelay == -1) tmp_pbdelay = pbdelay /= 2; else pbdelay = tmp_pbdelay /= 2; break; case '>': if (tmp_pbdelay == -1) tmp_pbdelay = pbdelay *= 2; else pbdelay = tmp_pbdelay *= 2; break; case 'R': { #ifdef REVERSE_PLAYBACK rpb_init(); #endif fseek (recordFile, 0, SEEK_SET); playback = PL_FORWARD; pb_sequence_count = 0; break; } case '(': playback = PL_REVERSE; break; case ')': playback = PL_FORWARD; break; case 'j': printf("Jumping..\n"); tmp_playback = playback; playback = PL_PAUSE; jump_on = 1; jump_idx = 0; jump_str[0] = '\0'; break; case 's': fprintf(stderr, "toggle-snap\n"); pb_snapping = ~pb_snapping; break; } end: /* If we are paused, set the delay to something reasonable. */ if (playback == PL_PAUSE && old_playback != PL_PAUSE) { tmp_pbdelay = pbdelay; pbdelay = 100000; } /* If we were paused, but now are not, reset the original delay. */ if (old_playback == PL_PAUSE && playback != PL_PAUSE && tmp_pbdelay != -1) { pbdelay = tmp_pbdelay; tmp_pbdelay = -1; } } void pblockplayer(int who) { me = displayme = &players[who]; } void pblockplanet(int pl) { me = &dummyme; displayme->p_x = planets[pl].pl_x; displayme->p_y = planets[pl].pl_y; displayme = me; } int ckRecordPacket(char packet) { return 1; #if 0 switch (packet) { case SP_MESSAGE: case SP_S_MESSAGE: case SP_S_WARNING: case SP_WARNING: /* SP_MOTD */ case SP_PLAYER_INFO: case SP_PLAYER: case SP_S_PLAYER: case SP_KILLS: case SP_S_KILLS: case SP_TORP_INFO: case SP_TORP: case SP_S_TORP: case SP_S_TORP_INFO: case SP_S_8_TORP: case SP_PLASMA_INFO: case SP_PLASMA: case SP_PHASER: case SP_S_PHASER: case SP_YOU: case SP_S_YOU: case SP_S_YOU_SS: case SP_STATUS: case SP_PLANET: case SP_S_PLANET: case SP_PLANET_LOC: case SP_FLAGS: /* case SP_MASK: */ case SP_PSTATUS: case SP_HOSTILE: case SP_STATS: case SP_S_STATS: case SP_PL_LOGIN: case SP_SHIP_CAP: case SP_SEQUENCE: case SP_SC_SEQUENCE: case SP_S_SEQUENCE: return 1; } return 0; #endif } extern struct packet_handler handlers[]; /** * Read the next packet from the record file and call the appropiate handler. * * @param buf Stores the next packet. * * @return 1 if EOF or error, or 0 for success. */ int pb_dopacket(char *buf) { int size, count; count = fread(buf, 1, 4, recordFile); if (count < 4) { return 1; } /* Determine how many more bytes we need to read. */ size = handlers[(unsigned char) buf[0]].size; if (size == -1) { if (buf[0] == SP_S_MESSAGE) { /* UGH. SP_S_MESSAGE needs next word to calculate size */ count += fread(buf+count, 1, 4, recordFile); if (count < 8) { return 1; } } size = getvpsize(buf); } packet_size = size; /* Read the rest of the packet. */ if (size > count) count += fread(buf+count, 1, size-count, recordFile); if (debug) printf("Reading packet %d\n", buf[0]); /* If we couldn't read enough */ if (count < size) { return 1; } /* Call the packet handler and return success (zero). */ (*(handlers[(unsigned char) buf[0]].handler)) (buf #ifdef CORRUPTED_PACKETS ,recordFile #endif ); return 0; } int readFromFile() { int offset = ftell(recordFile); int jump_actual; /* The sequence number we actually jump to. */ FILE *tmp_file; int result; int num_fast_forward; /* If jumping to a spot in the recording, read the required number of context packets first. */ if (pb_goto) { playback = PL_FORWARD; num_fast_forward = pb_get_index(pb_goto, &jump_actual, &offset, &pb_num_context); if (pb_num_context > 0) { printf("Reading in %d context packets..\n", pb_num_context); rewind(recordContextFile); tmp_file = recordFile; recordFile = recordContextFile; pb_sequence_count = 0; readFromFile0(); recordFile = tmp_file; } pb_sequence_count = jump_actual - 1; pb_num_fast_forward = num_fast_forward; #ifdef REVERSE_PLAYBACK rpb_init(); #endif } /* Get up to the next sequence packet. */ fseek(recordFile, offset, SEEK_SET); result = readFromFile0(); /* If we jumped pause playback and reset state back to normal. */ if (pb_goto) { playback = PL_PAUSE; pb_goto = 0; printf("Done jumping.\n"); } return result; } static int readFromFile0() { #define MAXPACKETSIZE 128 static uint aligned_buf[MAXPACKETSIZE/sizeof(uint)]; static int num_context_written = 0; char *buf = (char *) &aligned_buf; int diskpos; int sequence_start_pos = -1; int sequence_num_context = 0; #if 0 /* unused? */ int read_context = 0; #endif if (playback == PL_PAUSE) return 1; #ifdef REVERSE_PLAYBACK else if (playback == PL_REVERSE) { diskpos = ftell(recordFile); me = packetsme; rpb_dorev(buf); packetsme = me; me = displayme; if (pb_stepping) { playback = PL_PAUSE; pb_stepping = 0; } return 1; } #endif if (pb_stepping) { playback = PL_PAUSE; pb_stepping = 0; } /* Read packets. */ while (1) { diskpos = ftell(recordFile); me = packetsme; if (sequence_start_pos == -1) sequence_start_pos = diskpos; /* Read a packet and call it's handler. */ if (pb_dopacket(buf)) { /* End of file reached! */ playback = PL_PAUSE; pb_num_fast_forward = 0; packetsme = me; me = displayme; printf("End of file.\n"); if (pb_create_index) exit(0); return 1; } #ifdef REVERSE_PLAYBACK if (!pb_create_index && !pb_num_context) rpb_analyze(diskpos, buf); #endif /* If we are reading in context packts.. */ if (pb_num_context) { pb_num_context--; if (pb_num_context < 1) { printf("Done reading context packets.\n"); return 1; } } /* If we are creating an index of the recording, write packet if necessary */ if (pb_create_index && PB_CONTEXT(buf[0]) ) { if (!fwrite(buf, 1, packet_size, recordContextFile)) { perror("Bad write on context file."); exit(1); } num_context_written++; sequence_num_context++; } packetsme = me; me = displayme; if (buf[0] == SP_SEQUENCE || buf[0] == SP_SC_SEQUENCE || buf[0] == SP_S_SEQUENCE) { pb_sequence_count++; if (pb_num_fast_forward > 0) pb_num_fast_forward--; /* If we are creating an index of the recording, write out what sequence number we are on, where we are in the file, and how many context packets we have to read back in to get back here. */ if ( pb_create_index && !(pb_sequence_count % INDEX_GRANULARITY) ) { fprintf(recordIndexFile, INDEX_FORMAT, pb_sequence_count, sequence_start_pos, num_context_written - sequence_num_context); fprintf(recordIndexFile, "\n"); } if ( pb_create_index && !(pb_sequence_count % 1000) ) printf("Indexed %d sequences.\n", pb_sequence_count); /* For testing, cut this short. A recording should be under 100k sequences */ if (pb_sequence_count > 1000000) { printf("I've seen enough, exiting!\n"); exit(0); } sequence_start_pos = -1; sequence_num_context = 0; /* Return 1 if redraw needed. */ if (pb_create_index || pb_num_fast_forward) ; else return 1; } /* if sequence packet */ } /* while(1) */ } void pb_read_index() { const int MAXLINE = 100; char line[MAXLINE+1]; int num_lines = 0; if (!pb_index_exists) { pb_index = NULL; pb_num_index = 0; return; } rewind(recordIndexFile); /* Count how many lines we have. */ while (fgets(line, MAXLINE, recordIndexFile)) num_lines++; pb_index = calloc(3*num_lines, sizeof(int)); pb_num_index = num_lines; rewind(recordIndexFile); { int i = 0; while (fscanf(recordIndexFile, INDEX_FORMAT, &pb_index[i*3], /* Sequence num */ &pb_index[i*3 + 1], /* offset into file */ &pb_index[i*3 + 2]) /* number of context packets */ > 0) { i++; } } } int pb_get_index(int sequence_num, int *p_jump_actual, int *offset, int *num_context) { int *found; int jump_actual; int num_left; int first_index_num; int last_index_num; /* If the index doesn't exist go to the beginning and fast forward */ if (!pb_index_exists){ jump_actual = 1; *offset = 0; *num_context = 0; num_left = sequence_num - 1; goto end; } first_index_num = pb_index[0]; last_index_num = pb_index[(pb_num_index-1) * 3]; /* Convert the sequence number they want to goto to the closest sequence we have indexed that is earlier. For example, if they want to go to #801 and we index every 100 sequences, look for #700. We go back an extra 100 so we can read in recent packets that contain info like what ships are cloaked, armies carried, etc. */ jump_actual = (sequence_num / INDEX_GRANULARITY) * INDEX_GRANULARITY - INDEX_GRANULARITY; /* If they go before the first index, take them to the beginning and fast forward. */ if (jump_actual < first_index_num) { jump_actual = 1; *offset = 0; *num_context = 0; num_left = sequence_num - 1; goto end; } /* If they go too far ahead, take them to the last sequence indexed. */ if (jump_actual > last_index_num) { printf("Jumping ahead to last sequence.\n"); jump_actual = last_index_num; } /* Calculate how many sequences we have to fast forward after jumping ahead. */ num_left = sequence_num - jump_actual; found = bsearch(&jump_actual, pb_index, pb_num_index, sizeof(int)*3, pb_index_compare); if (found == NULL) { /* Shouldn't happen. */ jump_actual = 1; *offset = 0; *num_context = 0; num_left = sequence_num - 1; } else { int *f = (int *)found; *offset = *(f+1); *num_context = *(f+2); } end: *p_jump_actual = jump_actual; num_left++; return num_left; } int pb_index_compare(const void *a, const void *b) { int x = *(int *)a; int y = *(int *)b; if (x > y) return 1; else if (x < y) return -1; else return 0; } #ifdef REVERSE_PLAYBACK /**************************** Reverse playback ***************************/ /**************************** Reverse playback ***************************/ /**************************** Reverse playback ***************************/ /* Reverse-Playback - * Reverse playback does just what it implies. It allows the client to * play a game recording in reverse. It is a nifty feature useful * for analyzing a game. With forward only playback, if a desired point * is played over, the only way to see that point again would be to reset * the playback to the very beginning and forward-play the recording until * the point is re-located. With a long recording this quickly becomes * infeasible. With reverse recording one can simply forward and reverse * over interesting points. * * That said, no sane person would have implemented this without * getting paid for it... * * Attempting to reset the netrek state to a position in the past is * a considerable challenge when the input is a dynamic stream. * I only implemented it because I thought it was an interesting challenge.. * Ok, so I dont document my code very well - I'm not getting paid - so * here is a brief run-down of how I accomplished this task. * * First step is to analyze all incoming packets. Each packet is then * flagged with a unique handler for each piece of unique data the server * sent. (IE. the SP_HOSTILE packet contains RPB_PLAYER_HOSTILE data, while * SP_YOU contains RPB_PLAYER_HOSTILE, RPB_PLAYER_FUEL, RPB_PLAYER_ARMIES, * and RPB_PLAYER_FLAGS. SP_TORP contains 1 RPB_TORP_POSITION data, while * SP_S_TORP contains 8 RPB_TORP_POSITIONs) * * The next step is to build a table from all these RPB_ server information * handles. The key to this table is the ability to find the previous * packet that contained any given RPB_ server information, and be able * to backtrack through all the packets that the server ever sent that also * updated that RPB_ data. In addition to being able to access the table * via RPB_ keys, it must also be accessed via relative disk * positions. The table is in essence a series of multiply linked * linked-lists. * (I implemented the table using a series of singly linked lists that * are contained within a dynamicly resizing array of linked-list nodes.) * * The bad news is, the table uses alot of memory. There is no way * around this. * The good news is, any virtual OS should be able to handle this with * no problems. (Only recently used items are referenced within the * array, thus the OS can swap out earlier pages of the array.) * * Once it comes time to reverse playback, a frame is chosen to be replayed. * The program then finds all the packets that contributed to that * frame's information, and one by one re-reads them. As long as * there are RPB_ handles for each piece of data the server can send, * reconstructing the frame is trivial. * * Notes: This doesn't work for messages.. There is lots of room * for improvement.. Reverse playback is pretty slow.. (but there * is no need to reverse only 1 update at a time..) I'm pretty * sure this will start to exhibit 'weird' effects in high packet loss.. * -Kevin O'Connor 03/17/98 */ /* List of integer handles. * These handles represent each piece of information the server * can send within a packet */ #define RPB_NORMAL_SEQUENCE 0 #define RPB_NORMAL_STATUS 1 #define RPB_NORMAL_MAX 2 #define RPB_PLAYER_OFFSET (RPB_NORMAL_MAX) #define RPB_PLAYER_INFO 0 #define RPB_PLAYER_LOGIN 1 #define RPB_PLAYER_HOSTILE 2 #define RPB_PLAYER_STATS 3 #define RPB_PLAYER_FLAGS 4 #define RPB_PLAYER_KILLS 5 #define RPB_PLAYER_POSITION 6 #define RPB_PLAYER_FUEL 7 #define RPB_PLAYER_ARMIES 8 #define RPB_PLAYER_STATUS 9 #define RPB_PLAYER_PHASER 10 #define RPB_PLAYER_MAX 11 #define RPB_PLASMA_OFFSET (RPB_PLAYER_OFFSET + RPB_PLAYER_MAX*MAXPLAYER) #define RPB_PLASMA_POSITION 0 #define RPB_PLASMA_INFO 1 #define RPB_PLASMA_MAX 2 #define RPB_TORP_OFFSET (RPB_PLASMA_OFFSET + RPB_PLASMA_MAX*MAXPLASMA*MAXPLAYER) #define RPB_TORP_POSITION 0 #define RPB_TORP_INFO 1 #define RPB_TORP_MAX 2 #define RPB_PLANET_OFFSET (RPB_TORP_OFFSET + RPB_TORP_MAX*MAXTORP*MAXPLAYER) #define RPB_PLANET_INFO 0 #define RPB_PLANET_POSITION 1 #define RPB_PLANET_MAX 2 #define RPB_TOTAL (RPB_PLANET_OFFSET + RPB_PLANET_MAX*MAXPLANETS) struct LocPacketInfo { int prev; uint diskpos; }; struct LocPacketInfo *header = NULL; int lastPos[RPB_TOTAL]; int max_alloc = 0; int current; /* Number of LocPacketInfo to re-allocate each time an expansion * is required. This should be on the edge of a page boundry to reduce * system overhead. */ #define EXPANDCOUNT 512 /* Initialize the data structures used in reverse playback */ void rpb_init(void) { int i; for (i=0; i= max_alloc) { /* Expand table size */ max_alloc += EXPANDCOUNT; header = realloc(header, max_alloc * sizeof(struct LocPacketInfo)); } header[current].prev = lastPos[hdl]; header[current].diskpos = diskpos; lastPos[hdl] = current; current++; } /* Given a packet, generate a set of integer handles for the data * contained within the packet, and then add them to the current table */ void rpb_analyze(int diskpos, void *packet) { int id; switch (*(char *) packet) { case SP_STATUS: rpb_insert(diskpos, RPB_NORMAL_STATUS); break; case SP_SEQUENCE: case SP_S_SEQUENCE: case SP_SC_SEQUENCE: rpb_insert(diskpos, RPB_NORMAL_SEQUENCE); break; case SP_PLAYER_INFO: id = ((struct plyr_info_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_INFO); break; case SP_PL_LOGIN: id = ((struct plyr_login_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_LOGIN); break; case SP_HOSTILE: id = ((struct hostile_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_HOSTILE); break; case SP_STATS: id = ((struct stats_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_STATS); break; case SP_FLAGS: id = ((struct flags_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_FLAGS); break; case SP_KILLS: id = ((struct kills_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_KILLS); break; case SP_PLAYER: id = ((struct player_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_POSITION); break; case SP_YOU: id = ((struct you_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_HOSTILE); rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_FLAGS); rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_FUEL); rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_ARMIES); break; case SP_PSTATUS: id = ((struct pstatus_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_STATUS); break; case SP_S_YOU: id = ((struct youshort_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_HOSTILE); rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_FLAGS); rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_ARMIES); break; case SP_S_YOU_SS: if (F_many_self) id = ((struct youss_spacket *)packet)->pad1; else id = me->p_no; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_FUEL); break; case SP_S_KILLS: { int i, numofkills; numofkills = ((unsigned char *) packet)[1]; for (i = 0; i < numofkills; i++) { id = ((unsigned char *) packet)[i*2+3] >> 2; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_KILLS); } } break; case SP_S_PLAYER: { int i, numofplayers, offset; unsigned char *sbuf = (unsigned char *) packet; numofplayers = sbuf[1] & 0x3f; if (sbuf[1] & 128) { offset = 32; sbuf += 4; } else if (sbuf[1] & 64) { offset = 0; if (shortversion == SHORTVERSION) { if (sbuf[2] == 2) { sbuf += 8; } else if (sbuf[2] == 1) { sbuf += 4; } } } else { offset = 0; sbuf += 12; id = me->p_no; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_POSITION); } for (i = 0; i < numofplayers; i++) { id = (sbuf[i*4] & 0x1f) + offset; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_POSITION); } } break; case SP_S_STATS: id = ((struct stats_s_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_STATS); break; case SP_PHASER: id = ((struct phaser_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_PHASER); break; case SP_S_PHASER: id = ((struct phaser_s_spacket *)packet)->pnum & 0x3f; rpb_insert(diskpos, RPB_PLAYER_OFFSET + id * RPB_PLAYER_MAX + RPB_PLAYER_PHASER); break; case SP_PLASMA_INFO: id = ntohs(((struct plasma_info_spacket *)packet)->pnum); rpb_insert(diskpos, RPB_PLASMA_OFFSET + id * RPB_PLASMA_MAX + RPB_PLASMA_INFO); break; case SP_PLASMA: id = ntohs(((struct plasma_spacket *)packet)->pnum); rpb_insert(diskpos, RPB_PLASMA_OFFSET + id * RPB_PLASMA_MAX + RPB_PLASMA_POSITION); break; case SP_TORP_INFO: id = ntohs(((struct torp_info_spacket *)packet)->tnum); rpb_insert(diskpos, RPB_TORP_OFFSET + id * RPB_TORP_MAX + RPB_TORP_INFO); break; case SP_TORP: id = ntohs(((struct torp_spacket *)packet)->tnum); rpb_insert(diskpos, RPB_TORP_OFFSET + id * RPB_TORP_MAX + RPB_TORP_POSITION); break; case SP_S_8_TORP: case SP_S_TORP: case SP_S_TORP_INFO: { int i; if (*(unsigned char *)packet == SP_S_8_TORP) id = ((unsigned char *)packet)[1] * 8; else id = ((unsigned char *)packet)[2] * 8; for (i=0; i<8; i++) { rpb_insert(diskpos, RPB_TORP_OFFSET + (id+i) * RPB_TORP_MAX + RPB_TORP_INFO); rpb_insert(diskpos, RPB_TORP_OFFSET + (id+i) * RPB_TORP_MAX + RPB_TORP_POSITION); } } break; case SP_PLANET: id = ((struct planet_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLANET_OFFSET + id * RPB_PLANET_MAX + RPB_PLANET_INFO); break; case SP_PLANET_LOC: id = ((struct planet_loc_spacket *)packet)->pnum; rpb_insert(diskpos, RPB_PLANET_OFFSET + id * RPB_PLANET_MAX + RPB_PLANET_POSITION); break; case SP_S_PLANET: { int i, numofplanets; struct planet_s_spacket *ppacket; numofplanets = ((unsigned char *)packet)[1]; ppacket = (struct planet_s_spacket *) &(((char *)packet)[2]); for (i=0; ipnum; rpb_insert(diskpos, RPB_PLANET_OFFSET + id * RPB_PLANET_MAX + RPB_PLANET_INFO); } } break; #ifdef nodef default: printf("packet type %d", *(unsigned char *)packet); #endif } } /* silly compare function used by the build in qsort() function */ int intcomp(const void *a, const void *b) { if (*(int *)a < *(int *)b) return -1; else if (*(int *)a > *(int *)b) return 1; else return 0; } /* Called from the main playback loop. This routine un-does * a server update. */ void rpb_dorev(char *buf) { int startpos; int i; int temp[RPB_TOTAL]; int last = -1; /* int min; int extra = RPB_TOTAL; */ if (lastPos[RPB_NORMAL_SEQUENCE] == -1 || header[lastPos[RPB_NORMAL_SEQUENCE]].prev == -1) { playback = PL_PAUSE; return; } startpos = header[lastPos[RPB_NORMAL_SEQUENCE]].prev; /* min = startpos; */ for (i=0; i startpos) { /* if (lastPos[i] < min) min = lastPos[i]; */ lastPos[i] = header[lastPos[i]].prev; } /* Well, this hack doesn't seem neccessary afterall - * I'm leaving it as a comment just in case it evenutally is * required */ #ifdef nodef /* HACK++ - add in extra me position/sequence packets inline with other * packets. * The me position packets are inserted because sp2 torp/player * packets are based upon the current position of me. * The sequence packets are inserted just for reference. * Although these packets are gouped together here, the qsort * procedure will arrange them inline with the other packets. */ i=lastPos[RPB_PLAYER_OFFSET + RPB_PLAYER_POSITION + RPB_PLAYER_MAX * me->p_no]; if (i != -1) do { i = header[i].prev; temp[extra++] = i; } while (i > min); i=startpos; do { i = header[i].prev; temp[extra++] = i; } while (i > min); #endif memcpy(temp, lastPos, sizeof(lastPos)); qsort(temp, RPB_TOTAL, sizeof(int), intcomp); for (i=0; i COW Release Notes

COW 3.01 Release notes

This file contains the most recent changes to the COW client, with example .xtrekrc options to deal with them, and the clips from the documentation that explain them. If you're upgrading from an old version of COW, this file should make it a painless experience.

Change Log

3.01 pl0 Jun. 22, 2002
- COW_SDL_MIXER_BRANCH Jun. 11, 2002
  + add spike solution [tanner]
  + converted local.c to SDL_mixer
  + added cvs commit to mailing list
- minor source packaging changes [cameron]
- mouse wheel support [siegl]

Cut and past changes to make COW work like it used to.

3.01 pl0

none

Cut and past changes to turn on *all* new features.

3.01 pl0

COW suports now up to 7 Mouse Buttons depending on the OS where the 

	mouse wheel up is button 4
	mouse wheel down is button 5

The extra buttons can be configured in the buttonmap with digits

	d e f g   for normal operations
and
	h-s	for shift/control combinations.

New manual sections

3.01 pl0

none

Changes details

For further information check:
http://cow.netrek.org/
Comments, suggestions and bug reports to cow@netrek.org
netrek-client-cow-3.3.2/option.h0000664000175000017500000000034313657750470015532 0ustar jamesjames/* option.c */ void optionwindow(void); void optionredrawtarget(W_Window win); void optionredrawoption(int *ip); void optionaction(W_Event *data); void SetMenuPage(int pagenum); void optiondone(void); void UpdateOptions(void); netrek-client-cow-3.3.2/pixmaps/0000775000175000017500000000000013657750470015532 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Ind/0000775000175000017500000000000013657750470016244 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Ind/plasma.png0000664000175000017500000000047213657750470020232 0ustar jamesjames‰PNG  IHDR8aî>è vpAg8H1JbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÅIDATHÇåVA À ÛS÷¤=eOÙzɉRPY/e0­IjêqTÅÑÚÑZ~Û îc\ðD|7¨«8Œq^à1Sl™‘]ʪ’îh/drÐ#®+‡Ä†rdΠ•’MÌ”¤Ü‘ /ÙíÆ8_ëÑü–f…2Ø·cجÛÂr`ÇØr0ï¡X™~òvüiv0ï±[ ÙµÍ ]®~ZmhVÃ/+dSÞÆ¢”ƒÍ{”㽬º[É"uD³’.Ç*v¹üeõðÁ“Ä5ÚèIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/AT.png0000664000175000017500000000034313657750470017256 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>nIDATHÇc`£;¨®ž2¥ºúÿbiš;ÈÙ9(ÈÙa!ŒO,®oÐ8Œæ¥–Ãp9”êCO[Ä:„yƒ&ä̤†,ÝH¨x4!8h¢˜Zå Ýs3©QMµfÐÔƒ¾ª2…Q0T8Õ¦¯b[ÁIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/plasma_det.png0000664000175000017500000000103613657750470021063 0ustar jamesjames‰PNG  IHDRKÿs vpAgK÷ ™bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>©IDAThÞíY[ Ã0 ëQw¤e7Ì B²ã„1쟑¶«?$ǽ®–"[Æ8¦èy˯[>ëmЧ&ó~™'æ‹æ™Ìûå!pw¼ÝåÇbŒ®?–Õ--ÿK ÇÉÁ]/³î!®ÓžÁ? $Äêe–b¬´¥ÐÅs‚קⲎƒ¹"[•UÀ’k{=»åÕÒÒG— ëÓ%›,9¨º-‡L¶S\3(µ!Ãj|ŽÑ¥­˜Ñ!s-3T&¥Š!SÌvf's ž;©¬g9îݘ~]g.b TCv9s1¾P%_éXŒÝúÞ~èN£œ•~Ž_Ë CCÍE ¦Ï³²Q<ËèÒöˆªWV¿ø?©i aPŠët¨+…ÑÉÁí¥ÊF,ƪÙc±Mg5&6nh–ɂѠ{Ÿõbi(CÓ¹JaWW Î~Ÿ·[¨ òø4Gu :ÓIåα”áD‹•‡–cu¥M“.ñG Õipy´¨²4Z vÌ+Ô'ƒô¹ØmÃã&•TªÓX†`e@6™Ê?åG¿í—θ™çIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/AS.png0000664000175000017500000000037713657750470017264 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ŠIDATHÇíTÁ !s76pÖp_ïiBB ï£|H!‘¦[{qkˆô.2§Íªc¨®ŒöËÚA»„l¿\A;Åž‚´¢‘‚,¦‰¢–z8«h™Å(Q[÷æÛÁèÚ=‚´’YËÐ]-ÛÁ¬ehý·zwG {µåßLô@¤D¶_n9‹Ëd•Añ‹ëânC‡s®„IDATHÇíTÁ 1ënnÐu\£ßã>‚(‰ ýÔG m×zu¯Dö±§ê9ªÿ‰ðEaÛ³|˱m`ï˜v9f1-Äëqî¾5"oßm`ÆÑÎ{aÚw#²Åç1"Ìð‚Ï~`¹ØMn=§èBä#ç[±³¸å˜õ„àWWêNúT˜>0 IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/SCpara.png0000664000175000017500000000202113657750470020116 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>®IDATxÚíÑQÃ@ DÓ-¤: …”’2hƒJ̇ÇÃ!!i÷v?2™ ùιóóZ—‹4·>>n·íªeyß^Aºß__¯Ÿ€&y špBàuJ½ÀN <.!¸eÂßÞ®×——Làõ/[&9\6áëí \~ûŠeÉžãe)· ßÒß@¶P”K…$=·Ö\¼WçÑ´¦íº¿Æ å¸o7N5C28P5nYÇ?áÎ×g ½tk*IüÚ5^:A4âaP±ã—‚ÖÃd ‰2òÊHùyýÙxðBH=­´õý¾(YŒ#ox€×¸]ŒáÛ/Ã^„{bI’¤µn„#‡ì}ð C÷ZÂ_Ñ£/Lɳ·,ú”‘WLËí®e/X1‡xÔÑèmYسçìñPqGF“$Iç°Ê »•ÝŸa»ôïèS<™kpæ€ÊØãØë䣦M5íÇE_N¤ D’¤gg´oœ„ûcš#@ð@È®Áç";{4/“æÞJ’$Ieˆá/B:-…’rCK2"¥UÑÉh©sñ¡4& î=ˆÆôÈÌA€Êd§¸‡–$é +•P„C(;"ZÁKËÈÅt„òAZ0‡o§-{î Í9ìèAeÀñè¡[)¡ÔÛŽ^Î¥$XµƒÑØl†Ö^‡ÖPÈ^ `}²Оk m“Ef2ôü§®sã„ümwTð–†viI’t·k4$Fгà×8v»Š·”7¤9Y{µ$Ig—Ç_ ²ô„5Žs‡Ï§Ü´°f>Ū`ä1sùtýçÀq2Q ez´Û§¬i=X®(ED–„‚II’¤çÙd,øA½>{ñý¿¾­™/=o¤ pÆÙ›¨W×Á1ï-Œ,œá¬L÷ˆƒ¥’–­ö¾W‘$IÒÌàGh€ß~ù΂Ÿ|ë‚ß"ÍU ²vŒš˜6ÕSü¸&ZNm ’$IÿX´sšA3_ÈvÙ`#[Š™ÑƒÛlc/< ð$I’ø›9ƒ€’篖ƒ %eÈ‹–¼ß{sµ§ÎŸӞ,³f#_Z' šJK•$©|E+Å¡‘Ë­hfÓ•ÔA»tÊ&É…¢ÐÒXZ10¡ü™Vð-ƒí¤ú½ó‹C´z—IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/SC.png0000664000175000017500000000057713657750470017270 0ustar jamesjames‰PNG  IHDRx¢/o vpAgxjszbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíÚ[ƒ „a÷ÆÜÛp¿ö©iÒôb,¾ÿÅHbœ€à™ÌYà59o[Îû~ôÚ\PJëšÒã…÷û£×ççš {'ðèxu¡ggìèŒVV{ü´ÐV3Wm&¿};µî‹^%tü%în“tÌ„9¨»ÿÕ…)ð$<Éç_Ö¯ÅÁ<žäª²kÜ‚5LÉß­i ·ÄÝl’°ž¤»ƒš'ž¤­°Òñyr’V3('‘“ »Äß$á=I75O}IDATHÇíTA !ìoþ ïøþÛžbAGRéà\±ÈfÔ1ÇÁ¼óÞ‡‰æ$úÙ›O+P>ˆÆ’˼à D-ÕâtE½½g/ïAµ{Ò™0‹-żЦ)ˆZYf1jw?†ÉíÔ¦­­©-%Ð|ºåÖЂWñ4²ÿ(@ù€ÝIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/GA.png0000664000175000017500000000042113657750470017236 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>œIDATHÇíVAÀ óoüÀïð ÿËN^L´°]&S\bm‹Ù·þZ"sŠ˜©®¥jæáìwïµLÐ#âˆîïµMÁ*!OAšhÖ24 '!ZѬ‚UL+ÉZ G[£)E‰ž}ï¼×2M»GV2R&êg/D+ˆZŒö?{¨ÙŒ–‡µ}°ËgCܵßöóÝ<‹Û¬*Ëâ[]õ:gž!d©IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/SB.png0000664000175000017500000000034313657750470017256 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>nIDATHÇc`£;¨®ž2¥ºúÿbiš;ÈÙ9(ÈÙa!ŒO,®oÐ8Œæ¥–Ãp9”êCO[Ä:„yƒ&ä̤†,ÝH¨x4!8h¢˜Zå Ýs3©QMµfÐÔƒ¾ª2…Q0T8Õ¦¯b[ÁIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/DD.png0000664000175000017500000000034713657750470017245 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>rIDATHÇí”Ñ !CÝ \‡5Ü—û'1T½/Gš˜—l­TúˆDz1SCÕ í}¥®‚E=ÝA(ÍQÿ0 êÏÓgpVgàþ½×g0Šu”æ å5G@iKrºµôo&Š|÷ž¸Ú§9X*ýEŒÛ¡2(§RNIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/CA0.png0000664000175000017500000000032713657750470017317 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>tIDATHÇíS± ó7>ðÞð`BƒZ'ìÐB”hí£,TÇP],Ò»ÈâLžð±}Ç–ÉŠwãñ½>¦©ÏL7ªy2cϾÒzvhu¤2£ž K¶›™¹ì«åÚÝdÂ9ù‰tà<Íö¨!ÜÄGEL¡WYýRIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/SC0.png0000664000175000017500000000051013657750470017333 0ustar jamesjames‰PNG  IHDRx-M™8 vpAgxjsz pHYsHHFÉk>åIDAThÞí™K À ½›7ð:^ÃwᦴTªóaÞBDJC¬C^JÈžjm­Öñ¸-XÎ¥äÜ_Úçãñþä†ïÀãQøÿY޳…”¬L„—纘÷××Z›OÞÞÏV=\j¿“rQ+™Ê—B0WæZ»¼1×ÞËÑ(£ì™ØêC‡Ës- 0B0WæZ[ñÖç’gLŸ‹>—…Ãe޹˜ !˜Ë7sá-Æôésá-â-Â\Á\û\x‹Ñ¼Eú\x‹x‹0B0—EæÂ[Œæ-ÒçÂ[Ä[„¹ÐS’r|¹¬ô˜4IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/GA0.png0000664000175000017500000000036413657750470017324 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>‘IDATHÇíUÁ ! s·nà:]ÃïáG( Iîqׇ”ƤAÇøë½Š˜3"s­ÌÚóÝÝïÕ&®4õPßkS±KVôÜFe'™¡ž+v{C·n/ŠUsÒ(½ ý‰Ô3/Ìe¾º‘&„ðËŠ«äò¢ÏÞ—b²òŒØVóPôðæ‡îÎû¦b×½ÿj=_Εì.F(IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/AT0.png0000664000175000017500000000031113657750470017331 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>fIDATHÇc`ƒTWO™R]Ÿ¤šeÎÎAAÎÎC!lü$²J:YI5ëɳÓzЬDŽEüÖàÒK'¿ÒÐbb€ÊãÊHtò1‚š¼|L“´ML€“Y– X2`EæW£€z@¬_èSKIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/torp_det.png0000664000175000017500000000051713657750470020575 0ustar jamesjames‰PNG  IHDR -,ÚIDATHÇå•Q Ã0 C{ÔeGì<x*Ùî”ù'¤‰EVÜãxL¼VD¼WDä¼ p®ˆoä¼ ˜  #×÷1ú™FªŽíª% ­šžDe×Ñ*5¨µƒ2r̬VŽÙØÙT­ýNŸ¨WPMÚå'ß”hc2£ñ¨~Ñ„23]p€·ßœ5&i@ÌÚþi÷¡íQ¯ZÖˆºÂˆ HŒP3Mt@ȈÝw«%Ò>Ûb]Ê@äìÛrÜôÛëd¼ªvåv2þ í˜p»ÿŒ«ZàS©>Z:èåó5q˜#fIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/torp.png0000664000175000017500000000046413657750470017742 0ustar jamesjames‰PNG  IHDR(fÍìN vpAg(B‚bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¿IDAT8Ë”Ñ 1 C3o÷裣t$ rá¡»ê'—\lK‘“s€G£ê8<UïF•æøjü6šëÿ”r-…È1°”ÆáÆÈOc‹Y™µ‘™p]ÄŠp¢ôAQK -ÄYãX¨‘WiÇq((µåD¸s´V ÖÂèH2b•ÖB;œÆ6»}g–uhIDATHÇíSA óoþ ïøÜU‡Òê’;ÈjmšHãs¨Ž¡j6§æ¾„3’§9Æbd÷þ ,ï;Wf¼×ý)þìÑŒ£`±{‚c죨#1òrU7™ö¢Øó}šp†“75,À*Ûéø¡–2IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ind/BB.png0000664000175000017500000000037713657750470017244 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ŠIDATHÇíTÁ !s76pÖp_ïiBB ï£|H!‘¦[{qkˆô.2§Íªc¨®ŒöËÚA»„l¿\A;Åž‚´¢‘‚,¦‰¢–z8«h™Å(Q[÷æÛÁèÚ=‚´’YËÐ]-ÛÁ¬ehý·zwG {µåßLô@¤D¶_n9‹Ëd•Añ‹ëânC‡s®ûìãà`E|s]6ä»6¸Å:ôY–íÀpAcé}LÙ„éñå“Xt™; -Áz¢$TLÁÅd«µÞðËøAxÉèÐØò‰¼¥BІë/&¶l"ZspÏh¹¤ª©—”·¼p({-Vˆ‹pˆ¯˜œ­sW´Ô„‡^9Nwè}páp†í®?ÖÖR^žRþ>°`ÈDz@zÂSšC¯Þ9ÎLñÝ«ãB²TŸoÈ4"^KùE%~1‡yç`f.xŽx½üÈ/,µÀƒ*Xhѹu\Åë‡âõÍG~QÛuAlcù–\5%T<ÑsX~_U4ÛQÀ6_XÄÖ×Ïg©Õ3>yìu¨&îÇ'êSØÑ¦x¶çJ˼äÃ66,|ü­v¢>™=ß´ž»¼‰¸Ë\eÛ/z=’ c³?žºÆÎ7oa_¾¶‹}°Š½Ųšýè–æwðd_éô…¨Ž¹ûtC*;wi{õJ&;}/‘¾Îvàv®«ŸÇLÐF)°Bõ]½âDžÀ{ôªø< x[|ž |aêÂðv‰þ {*#ØÑºöÌ…ÕìÙÆõìàõl÷•@–Þ¸„­ª™eta2ÇÁ^ÓXàjô>x‡^åCöŠ‹óZÅÅ1å…µk¹Ì²ål_U¤þKè–Ó–ÆÅlMÝ\¶RED%ôººvŽsXÉ(wtøQþ\8ìˆúVªZ¤Ý{qágèbõZ“¿èâ¦bﻦn1.ª!¢d S¶ÎÖ¦eú÷‰•ONƒu»ër{þA*×IØkoZ»0¥¨¾`育çX|ò`æ+-‰ õ ¦PùĩѺñÌšò›k1S-g· ¿Cw%¿÷Éu™Š _>¹ÂÒ“fáý Õ…Ý–ô%Û#¤#ŽŠâýTù;‘Lù›úV©/ÚÜïV[Í3ÛÑÁ/oPiPÁßôƒðƒß£÷QºñNpÛ ãàD–Že¸À゜Ìý–R5=ˆOæ½ÇâàÂó‰Å¼D.[ZHùûŠâQ ·Öé±ßRxß ¾e¤tKÇÝ5gÑvÛíóÍsq.9¯¬˜Lk›ü[Há0% x¼¦þà6é¶|€‹v¦÷Dõ¢”^6.ê5_=ª[ø£PSÞÀ©–Hô‘é‹Êi½&^ÿ"^‡=Ò Z_°Œ»daxì{Œç“©[Îݱ¤Ê©ŒL”Ç~A{*#Âdfdð‘·Ãîñ_ÔÑÚDötÃ*¶÷êrqþlkÓR¶¶ÎcÈc» ³UÛ\Èn?wi3;y'޹Év] `›.<Õí­ke40¸ÝÇê’Øsð ÉËy±u{ænÛ-„·V—ûz¶^ÔѺDv¦q-{éòVöìýv+ÝÆ-ðrLpT˜ÒÕß½|MeÈÉ®×|ñZ©ø] Q_”¼ÃÁ²ø1kbÙI¸ög×±C7Âx+‘{O±‡„Ê)w•¤ ›êvPÛBX LîrÀú¯Ã³9-'.Jv»¾ŸG*~sTXžü¢'àW’·RêÏvU„±}5ßVx074,`)Õ3x´Yþ>¢tŒþ=…Äé5·üƒ&LÜ/T·+FÕ¢òEîʆÂe̼ÉbþN©ž®/?К'oDZã·bèiµxQx¿ƒµº¨ëvy5J3E鬮<¶ÆŸY¸¨ ÀÕ„¢_þj“ÿ§Ð¥&z…#¡ß^Žšê’¬Ü>fî鳫µpQÿÏ„‹Åž™Èäf½&¾@ÜšruGåbuì¢T˜OOŒ?Øòn|p*¬dïÈygŽ÷ôìü9ôGA]´u[<¤dhÀ«gä•Á’&z{ØíE`¾+ . &Á#õàôhÒpõö°Ð8™D–Ž£mü¥œ¾Þ@?³¶ e>:KFÞ+is›òwôIé¯BçI¡šÖþ U£¡U5C¸–ƒ6µ³RÑhS´†¶£Ð’,pýi@”4ÇÊèwejõ 'r‚änQ)4ð¯A qâ-5sè¯2wUï£G -:¯ú³ ±ÞVkŒh˜ÃgGÏ>¯U«>}jªøãfÿ¨gŽãvüî«h(G37¡Ï6ÔšÜÅç’sçr”z3"î€|WwÀÕç;ªÏm}Z£Ò‹ü§û²µ% y4‹\Q2ÈØDçè ‰$ûuñ“w•¯`»ËÃYz•7Z]S;—­®ÍVÕÌdò°ª&±©Že‡kV2Šî»Î2/y³í@ÆEO}˜RŽ/ôk¡l‚“ ©"£`{¦yOuC\”]ÙìÃÒ—² jûÂÙ ×MÍ7Tâ}Š'ŸiZËC¸/]ÎàQÓçî§²3÷’xÔêð¨¤<JÉX_?ÿQþ©{’_ì8îh¡±­±Õĺ«Kd”ÙC¡eÊîyåÊvžáóbËZžåóÌÝ•<Ó‡4Œ2+Ò›–¢±æ±GØX¬G4Ö¾ª(v¸6žQ~=‚Ô`”utþR:$8~;†¹† å©(Û.zñ I¦TO_mƧ|J¶ÑTøÄĶí¶3ÑPíÒZÄorÔÚCñó}Åï5&vÿž¥ÆÂû{&ÛuA­;+V°½U‘ŒÈˆý8¸‹ó\Yιjçe?NöÄWDòÔPÔ3Æ›(£üketœæÇ9ŠNøçææ‡þ g âûוÛÁDù&´}ó\ZÓ,EcåšÑFfæûzSen‡ …žã7û°ŒÒ–Y¶ÜjÓjI›˜š¡(ipѰ}í¢OP'Ðî¤dŠÀv›*", &ɶ‹ž!x¼CЙ„€C¶6- YU=“2*>´µ±L|¿Xìb×Uad&O˜ %§æÎgkòuˆwÐHÙt÷)ƒÌT¢5¨©a4ÒJÊ.£÷dðšjP{8ËBc·%†®h,’)âõ–ÑFIÙsÿ3%{ÞS]ïº+xÆÛ¸1ǰ¤ª©í.–"¨xycᵘ4ÔŽÆú“­¥Øç_í%xñ¹ »„¦œgSY,¢aõy¤•æ +U B<3ÉõÎqN4Cò~À@` µ]±ß1\Y§ê L5–cwõ¾F¦x¿˜`bú~ ‰ï)ÔSüÀ‚Lö/ÀXñ¥Ò.¶¢=Ó€bF¨~süæ¨ú~¨µãZÜñ¥¾y¿‹­:0ßõ"´à0Vs w}!=>èÊy¨½ Ç ô™ çÜ_IpŒcƒ_Þ@4„‹Ár…Þìt|ùä6êÕbaFDéÆóÁV"ëo 5Í瘨oQZM$cT2+מK sáieñS/~ÜŸ4lL€”B]zHáp>Fš\8ôœ™ûc,xe4í¡¯7Ù;wÑëmûF–ŽM‚‹ó)%w+9jy¡Û¯MŸ¥4|OÚõØS™»¹‘FÃmxäªÉ‘¦‘h4J» òÉQFçÀLÙVýNRªg ¢yâ(2+”¿AûœHó(Æjî¢ã×üÁWô8Á$¸×•¦¶£^¸Ì'×å²Êáæ¼Õ§Yñç~ë™í´ Úâ SÀÔhÐßyOG™1…nÆ5yP8¾÷—´Hï:ÀçÙ§ l®j žB#üAù}”nÜý <ŠØÿSu °_'…$TNù¹8è-G+¿'óBÝ0‚àû÷ði—Ú,šeôOO7#,t¦z䮩Fdk³jÍBoø'3Y4}?ךFÈ“*Ÿ+°O«‰ÆÛçJàŠ­)¶Ÿ®ø¼¬Ï?‚É_xì¥GLžrŒ2ÓX§­5^ŸüÒròD6C2›«©Á‡ÏUŸ_Q¤xï<ѧjC¾×7ä9£òT²©àθ+ÂÉD㹨>OèóZµ¥Ø—m)òY“xô“æˆQÈÅAƒd–'o/ bÛuÁ<—Oþ­šJ£ÈŒfñÅ•OÔÒ$eÙYÊv•‡ñ4Iž"Y7—OHN«™E5¢¨ÑZ´V‚¼R|Ày_e$Û_ÍTÅðBZJ/¢œJLSÕê·‚ª?TÏŽÔ&°cµ‰ú|RÊÇ¢$¹ ÙêÚÙ)ý¾±×®dÇë“ØÉúTvª!§Dî¹Äó³(Ûo›HÂ¥ë× u°.6áx]O`£ ï”ýGÉ·*íE ·ó²?o°GQ&àQ‰ÈÕ²¯„'å”Ê ¸g/ndç/máI·„c·¢Ù!45XV³/$Áa™}¤±˜Ýs¡O4$³gW³ç/n`ç›ÓÙ+—·±çî§ðr §î®ä v&å”z>Ò"…ô_€»=¢±ŽÖ$|édC ;Ý´†kÕË—3ØëW³x¦òù–5h°d^0‘òá÷€¿¨hâæGø(ªsªkcñLeEc½$ë<ë…vÄ‹g+×Í]ØïëPmœ”Ö­ ·ðÇðÜm©¡ ¡”Ú!C˜mVB<Ã÷€µÓ­ÚÎê)S9`œêÏPÊ&¹2ŠÀ4ÕïOŠ÷?§ôFÊòSã"Å{³-%Ÿ§Ý…î­Œz—ª«• =áóЮ@ðÏ_YÇË¿»ŵj/̈4…O˜Ï'>Ù 3›ß.¶{ÛÄvÞb"ý]ÕŸý¦©yecXû]ñÙY|u»ÝŸÚU±‚ñI0FÉt8…;ÝjZÇÍj$Ò(©'ôÓ›káQF2üES 5þ4!¸ñÄÜ B·«” ‡ï)¶@#?ËyùƒáƒA¢Øøm†¸xJƒl”ËÛLPýÙE‰›¿›h¨µâóGâó= eþ±ÜQÌöT†3*NEÜEÕŽ¨†iÙ©ú4ÎQôèí€É@ EV<Õw%­¹ð;ÔÇôÎqö ,›HݸñÊï)jT0Dÿè iTU$¡AÜQ–ÎgY˜°PY?Hñ}¹ÆÁ‹¯ø˜ÖîDé%¾ÿ²­4í,å F>!£]Tt„=Ò(j¨´ÚY<!Nm7Ù åaªDYjõLžy£o<Ý8ÒÎ_©·Ã±ï)ggØÐXmö·øi˜‰Æ2¯U‹¼Xz -]˨ð ¶ÖàÑû.祆¢2*4Cb…‰5 ¢uã=L9ܤ•T‚EþLš‰Žb47{ÈÁëa!xÔCÖ×ÏûߎÆú‰¹Æ23Âd¥j»OäºK¦ÿ|Á¶±Ð“¥•ÎdkÏ™Xù¤3iÔP<7«ÝŸˆ/ŸäaÊ$Ç\Y ™B>MËØ¡ëa¼×=}/‰¸ʧç)gÌÚÐXß´ÐXædž™íÚ‡ Vå,ŒNË[È6xM·×6¡yÒ¤QDÌ”è•ãd”àÇ«ýôºí& ®“sgì,ke«%äÇ&÷IÌžÓ–3ûƒŽsèåxƒ(lÄ[à%SfqE\ZJaDi,GÅçFucu‰ElÊ~ .æ+ŠÇ)…L z|ÜF½êÍžÐXŠÏµFûmÍr Ë?´‹k«º± mÁ&–U‘LÃÚò7fªÄwxÉh7Õú¸µNüvÐÎÆ’çíH½tRöܦ®ô¯è1Tæ â½‡)k]Mã™í8‘r·(c8W˜¿ôWÔÌ`¼’|ñºËZc©±ïˆÏ¡âóP+îë._Tn ¯[k,S,>gË3Èärè¦öµ0í×Rc9šé [i,Wñõªîj,e=šAf„™ú~$|L¶ðÈüU8ÊJÍZl´&éXØoDqÄçMü¾ØÔì/sßw«Pm*­¹J!ås‘ÏHé” {9ÈEÒ£p¸ü}¶‰Ö†“ú¹@‰&å2õxç:ó9Ô B‘Zƒ‹†Ý -q/¬dÔCJ'?š¬ r£9ÜÆóïéwêDóô h¿Ä±k­Ý÷•‰èù6­ ìW&Ù+p­É®_|Dn6M?'—Z.JEÊFSÕIÉhŠ(L¥ Ý…¾¥P€n_q>ÒäªiŸ“#IŠFJFŒFLÆ ]f`Áèb‡jw¥\gt…s|ó\bо†ÿØåíÀü!¯€ib ‚!Îv*™KRÕÔ *ÝBŽ:u¡”™Hå‹Éfƒ›t¶œ–?Ö‡Øk ð;1ñUoW-/àƒ6œYÂxzê>-‘V8Š(ËßËKˆºÖÙPw¶ÿäKÃ&£ã„ å¢X$:Y»+½W™h ¹(üìYú öÓˆ„Š)Çðz]¶£(Å—ˆ+‰T‚ÿ!º¸%VŽCžoGë™k8ŸKK£Ž¸ž¯hw©w)”SwLÂA7žT9µ…&[“¡Na(_ªÀB»-í ¥|™Foåÿ¼Áœ9q{´;¦‰^ `ÿ×ÁjF åñ/ïÜ#ÍíU:.º[2æåJqÚüÆÞÍ`T]ó…Îɶ¢œ²wÈn"ϘGŠGÕW .ö 0‘Õµëâ+&W(•KŒåš ‰ãœoÑêJÅ~­Ý¥Þ¥PïSf•]Œúŧx–º.²¥ ˆ´ÒÍ¥HÝ⾈ ]iª§¹íÁXm*ÅÒX«¿Hjõ GtwïÆQE2ëÁR­×ÍmûÉg…°·|¤t@³I¬Ø&ƒFg…¥)V”ÄÊ'iÕÁBê"EMR³TÁX/)‹jj»ÀWájŠÕßÝâ[4D#’˜˜Û.0ó6tqï™ÛÎKÁVÑZ¸ «V(Ö}sÛÀxÏW0ÑyÓJå䬚v0RkÝÞoпÕÑ} †¬–í"sÛà÷*ÆÜ5Qlóí®ôn…úŠŠ%ì Â‹óûþÎÂyÚlØF¾†íÎôbYùÙ¬{òRÍJƒxÑNåüÐbá÷8qÜ lU%¶ùŽvgz©lù"Ð9%gþƒ¤ì¹¼¦­ ŽA<˜é—7ðs•j­„H§f~—í¦-ã¿Å6ZúLo•½ù±kó·®É[ÌRó=xfrŠ1 ¯,/ú©¥Zn)à‰ß†÷€!¶Ñóµ;ÓËec¡Ûl,ôf«‹çëÓ‹¥×q¼™œV,*¹}ÚAÛ-ÎRF*~o®[Ô¤Éႇ­%­%LÆzÝb>\ ‘R\1™/H'!ˆ.sÿ¡Ö‚š˜”e!wwè‚YVYʱ¹rŸ¸kÀLFsêi/M½¤™Í”VLJe;¦µ¢&F²¯<ú'»+"؞ʶ·"’í«ŒâØVãËÿ)AÓì©Ø¤å4ÓÄ‚ÓBÑfk­© —#I©T9du _£õPM¯Ss¨f%Û]¶6-ãµ¶r,eéMKx@eÕIR4ZÕ¨L…ŠôM±ôvUüMn ËlÕd`+ªK–_½šÉ ùÚnöbë:öJÛF^q™”ŒJT?æ¢BÂGoFñºÞ2k‘q¿]Qrƒ‰¢v}@±ê4ÅRÉê˜÷¤ ®ÄXÉíë’ÄX/_Ù¦g¬î­åluöÁ*^ûœëi0Öq=c­hÏXKDqÓùëz[S¬>¬X‡*ã‡í¯Žæqª#ä Ã{B¹¨r÷9ac½xy+·³ÎÞXËí+ÂÓ¼ ŒåÆ<ñÔ [É<•ØÜ*l,åª*©Õ3ì^Þªx+Ë&Y@©­Up°Ý6EÞ—)üÜÔŠUâæ´0Ûä]û~¡øý›â»4ªàkbÿÁ&öw…ÓÌ çHg ßÇ«¶ÛjµQwW†?Ø[ÉëNKÊ•ÀD9!{…Öp#þÙFIÁ$Ïp;{iïòÄPÒ: ¤P’W¸ëJï wràkÑðORÕÔ;ª]•tš×(wsáÞhÒe¤ªrÄÆX8fºá8.<íÇß( h ?¾gŽþxêNÅk˜’&öý_fŸ¬ìˆbữª¶™aõfe•…¾Eõ¹wW†1I¹¢y”âXT:ÿxP0Çz¦aµË Vâ1,ty|EQü\R()Ž%Jy$Lµºv¶¬T¢DѤ16*–‡W¶¿ùA…n4ç°1´xd»h~Xñ¨@›<;ŠvÑÔñ HÿI¿Óv496¼dL©íÂJF{*§ñ{å8çtUW¨R,Y’mØï¦bû»À 3Û½ :ö{ Ÿÿ©¬0MËXýSÛJ'oÓ°LŒëòFË Ð˜ -1@C9\ÁDäýHÝÊëÇë’ÿíD]òö# q>'ëR¡p»›—]]-¼#EÞ½¹‘Nq+²§ ‘÷y|56êþhìP®{EEA¢uã³m¹ ù®RõýÒ±ÌTay¥$WMó ãG—¹³%\)F(*p #e¡´ÊȰv)Δ±AçæEHò‡Lí&ÅšdÃ>Rl_aÃö‹,¬?aV±TL\k³­²¹È›ÉÏ(õç…òi)b¯]algeȧ۪ývÄfƒ2ÅC™òAiy@Z,íG,Å3 Rq)GŽ)$Ø.«ë›6lÿB(–‹ÅRÚmJÙeõÏ$eÏý,9g.KÍOXó(ã&0¸i’ê'd|+J.øþS[‹lµÍ¶0›°ÕÊMÊTÝ€¥Ý¤XŽ&¢ë¶Ï¢¥P:yßcr»?üØêhO·ÂÍ÷ÊåkN±,­Ijb{%N5³ÍHYÉΣÀ+Ù}¤´A½Êv w޾ÚÍm+7ý¶ÃùGU,ž ví_íÌX!~{G±ÝNrX™=sQoÌ¥‰¨J±Û¾aeÜ‘Vàð±ñ†µps/w•b‰ý©ÒuL -7¾+¡UÁÙ+MIÐ Dù湜Á“ÿ!º¦JØJµù®`„BtEoé´è/XB[@‹O$º—ßS!4y`×Пñ‘íVþSóaœ?€môU×ô–ÔDV¨×¨rŒœq ­T1X¯L¤õÍuÙ†®ï‰ÀW7°M;› äSæ>!¶|bD\ù¤ßÄ—O¾B‹Hõ&ñE˜h,‘MþÃ9Ã?µ°Ã´.²+ÕÓB¡þ·³Õ_*§8&V>y¸%áJ&¥ÔðTê:ÅZ;Ä„ñÚè›JEÊô–¹TÝÎHrմपi͆u 'ñè¸>½F¯\®§µ;Ñ÷ ôAÝ}ž”ªéqP°6eî–´Òª´Ú—XÄéíŽô ¥r~”çK©ž> ö ±Ùarb`˜^¹†ÐÍ÷´;ÓüxŸÜ^¾y÷ি?ø[ù®ß†]”)AÝ&v {ÜlP.wnsÉË÷R| çÒêAôQ&[ üÙ;ǹ•fÊøóØÕn ÉPURšèßìP®ÙP®¶8¾ºêxî-*WW…2OÕîDßQ¨µfq)vÄcWؼÄÙD|ÙÞ’±bé^i_š£È"µÉOªš:‰¼ÆXÑ%R°N¡ËeíŽô~…¢2Ú(Ü@óí|s]òÐå½öHƒ¢„@a#JÇDE•ŽÛ­sÿalù„{Ÿ’aˆS­exJéoíÜ`­Eñ2kÉ ŽáQ~tÃOkw§÷*ÕNJ^²g% xwÏÄÊ)Ÿàµ•’ðh–L´°™ˆÁ„·÷s0ÅÁè•OˆËüêçûåó%åÚº#¢I÷+Õ;4ÀÜÙRذ—_¦üuyna”báp0ÐEØi®–Ž[+'J¬Âª\¶Ýò×´;Õ»”jiW×VO©šî û'y|R^ºrUz×åƒ-(–31­bŸ'­W¨Ý-Md[GÊEöAøQÎo†Qn¶[„beEè½Ã!¼vƒ§”†¡µª&²r-…Ç×F†=y¤,‚…þËÒ~Øö´Æ´7à=³¹bý]kÑÞÝ=’¼rœÿ¸%ç^ñøUÑ0²}šÀŠ}A±þdn;x‘U<–•mY±`_ýXá´ùˆýS±Ü]Éë£8•¥ñ=x…/ ¯PV“٠謪µ5Kkå~*ð? Ì"wsÓM宾"Ž%ä ü•­Ü4éギЛ+–ÔÍ›´òÏTåæŽ¶*Q(Õ}­uû¹‹”Ádí.tƒîJÛÉÜqð[³B±öj-ÛË7q0º£û“W(”!ÕŒí4E¡05f®Æ.*¶sÑîLïVªÙâFÞëh 祱=íó ³ßÌuŒWló©vgz·R V±D‡VMU ÁŒ1sžÅ9ÜÌlsB±Íxíîôb úbøßL”SL耂Z³þGlSga›*±Ío´;Ó‹%ñ³¹¾P,ntK†·>~D 6Ð¥`mÀ¿ÝÛ,°Àœô{‹bèíŠõÅœ‡Ës†ñY1o9΄ÿ±C±â,Ŧðý(ñ{¡…cüDl¦Ý™^,i9‹N¤äÌgÁyÃùpL€~ÑÈÁ¼¦:EÉgë °ÛÂï?J3ÈÌï.â÷kw¦Ëú\O§´Ü§XZÎBZ å™Ë D;¹6z`¾ëlPª™´®…ßD÷¶ÆÂ6ÿdkw¦—ËÚü%o¯É[ÌaE£õ…>Å>¤ÊÇR1‘‚âNÿnEñÞ¾já÷ à#Í®êå²-?xàú‚el}ÁRF¯Täèڱ¢â±¨zü™¥Xd)îEÅþEÁ\s¿ÞÔîJÍ…>/m*ôb ½Ù&ÀPåXªtU:ŽO˜gæ…›dïy„§d¥‹\¢Ý‘> YEN[Š}ïo)öcéE^ãD•c ¢’LÙQIÆ+”,Gk=MÌwƒ%›3JüYFIÇ6€&Fè!*¤*2RÅcš•%sÓZPÓŠUt `ÛLÝr–Yºœ/_«-N5HÙ¸’Il¦åžkÒ^”®œ’© fYº–UʱXU3K™´¨7­hªT2(Ø@«Y¥‰±ì*ûû®ò ¯lwE^ÃÙn€Öe6Bí¾Â;-©«T2¡`ÁZKj¢—þóŸŽ»¹B…³½•@Û'@«¿¡~>[_?­«óàŠÆ• lF +ÖZS½,voe$ÛWÅöWE³U1ì@u ;XË6_XÄW’ßܸHzlºðÛ%£•ãiuxIÁô ¦25‘ ÕBŠD u¨:Žª‰c‡«ãÙášx¶µiËØÚ´”#½q ÛBÊ%ÛØ°+ØZ0±l±/i-ª‰ÃáÊÿƒÕ±ì )éHíJv´6Hdǀ헼Y¦½ß~Ñ‹m»èÉ-JF F ¶¡~Ô=ÖÎy µª&Pª:b¨#5’B«KbÇë’Ù‰úv¢.…ílöc;/ûsdá=aG³/W4R0b4b0b/²ÁÖÕñ®q²Ö²ýXö×F¹â,E •ÈŽ×K õtÃ*vŠ#í¹Äö^]ÎAïw_ d».p…##˸()g.®\?ÒZ·?³Um̹#uK€R¬Oe§.¤±g.¬f§/¬agײ×BõØ-„í»Ì•ŒLb±öÊE6—ÖºýÕ¶ª]馺!+ÕÓR%…j\Þm\ÇžmZÇžkZÏ߈Â9¯‡±×C¹‚ƒ{é• Ý"Ù\ ÷ÑZ¹çcìçÀutÛ‰`œO>*º?êúôJ…zþâ`#;wq;~3–»ÍqôV;r3’+ÙÁë+8ƒÉÊEÝâ6öä5 {ëcívö(Åú-3ÈvÛ‰ÀTÿu¼>‰lº¿3 ¥:wi{áÒv¾y ;u+¼ÇNÞŽc'nDzã·c dQœÉH¹8s] âÝb¦èeÖÒng?T,°Õƒ [n\ÍÎ4­eÏ7IJE õbóVöòå væv ;}/‘ã™» ìé;ñ\ÁŽÝŒâÌEÝ"Ù\»®XKaÈ{ôñ›5RS,…œ©Þ8íg«ÎVÔ’=uÝß Í›%¥º²½re;;{g5{î~ dz÷“Ù黉B¹bØQt‹‡n„µÐ%rcÞÛZ‚àÝaý‚÷û¨B¹¿¦;¤)–²¬Müƒ¡\ͽ?¹ <ߜΙêU(ÕëW³Øù»øþájŽç¬âÊEÌEÝ#Ù]œµà1’­%u‡>¼;vÖ­uõóúšRRÜ M±Œ»Án´sÅB7H¶g«K`«Ë霭^½’ɾtm'{õN:{±u)×s÷Sy·H¬uüV ;[Kß’Å¢À©dg- ±Äq}L±ÆjŠe2ÌŸ¨T¬gH±¡X—dÅÚªP¬]ìõÛ™ìå¶ ì¥Öõì…–5`-R¬$I±n›P¬f•bÕyœÑ«(Ö¡Ú8 Ý1ï 7¢+ŒuÙÀX_º‘Å^lYËÎç¦q[ËÀXÑÜ;4(–¿`¬ezÅZ[çQ®)VW¬uËh\PR,s6Ö½õl¬×®í`g¡Pb+½uÛ`cí'ëŠÂÆjÒÛX<ëAS¬>®Xû«£6óçÚ•ìX}¢‘W(ŰDw¨ð _½ºÊ$y„gÐÊ!Þ Â+¤H<Jiˆ‡¨%¯P ’ÒÐåj­ª™µ¨£×,&½ÒlꃴŒP 4À¿ÑÜC;ǧ•Ç*þ&&Æ:[¸1CO œ‹§&öhêwÒK`3ð9P |ì°p NÀ: ¨Š_³¬é¸­Š…߯¨þõöÝWuý`M ƒÅ(ê~BŽº7 ÖjÚ#~“9¤³—š38{‘2NÝ] ¥Š“B ·¢ô¡Á¾òåö•aÌpOe^U3óP(ÂQª3j¢Œ’m¶ ÁvCE sǺo®08˜Ù(&ö¦þ/€&vßÌù,œ¶Æ’Ø¡XWÛݱJÊÇÊSQ–èþê;ËÐR6±ÖÁZMrä}3;OÑ÷Kéèöâ ‘÷[¿’ƒ£+ؾ«Áb@ÚOмS7h0ÜyfijõŒÖ(V®…RÃÅÊñÜTä,aÅ#P¬b3»3±˜§nÜ:ªXøþ êx ­³UETʞʶ¿*Ь‰åI}†±ÂTC—Ø( >“ÍE!ˆ³b¼”‰¢GnFðÁèŠán´Ël…np“è×JÝ K©šN-\ìPªÝÊMµß½siÙ¾@•í¦²Jª…~gå˜W©Æ‡ŽA‹ÈÕs¨>ª/Ž­:žsw)–èbL*†‰}'2ûänG ß9«Ž“kÓÍÚU¾¢|we#Ö¢4d½­%§Ìr5sQ·¸N¯`Ï5®gÇ®Æðû!ØS4>HÝ1•¤T"»A @Ëã„” /ØŠÏàYYñD†Š•C7—n4•K ,p¥*7?x™£å…C,/p{ªÞPI%R+%¼_ º^¤DØ… »Ðo!E ‡y—éxÒZˆüx_¨Þ˜øªnÀ5lP¬ñZ ŒW°ÒßTû9ˆm”ò)ð„øÝX ´¨¶9ÙÅúê#¬Þ¨Ý¥‘³ÊBÚvU¬`ÄZûk”+ÑE ~¢k”qüÒJn ó|¬«Áú„¿‚©H©ä”9kÌVÕÄVSX|Ťÿ³C±tÄH´šU¶YQ<2ÉÔva%£ÊëD A«·Áq\è· B7FÛ†—ŒÉ(1Y•:ø‚¯ö £óƒ)ݺÂ+4¡X$6ì·BµÏ×ÌlGJ×qZR,|ž©Ú×¶y ™ºà¨Ì²ålgy(“X ]bu´`.9Ï]‘A {º^Ê %E;q!‰³)Óî+¼ë#0“Ǭ¼øØàyàYL¬H«1b+^óÁVÅB·¤#e¡j6‘¥ã~kiÛh{›¼Þ!éyõïøî<ýFUr¢uãÄ”¹;š?ÖxǨÒq-†_~£k’ û•)¶¯°²­º{]b‹b VlTüFìgÛL«ŒRÿœíº ¶£,ʵ \UÑì è׬ä)ÊGëþ|¢.ù쉺”ð# q¾§jW‡mXyÆùÇRλ/W¨í—¼DλrB…<[JU3“Ï”¦zTãê;D–ŽhËõâ¦êhrÚJù‚¥ma»•Æñµ¥ùŠ®íì¬à¡\ñ¨IBÅO[;w|Åäÿ b'Tª ×q½›«ÖÆý”2цíÛÛÅFÅZ¥:ŸÍVz‰Ë( `¤\èÙNt‰òäTê÷UG]Ù[n“ËŽnozÆEÏ%…Zbb ˜4¿0Y2Ø™¼V4U¥A7´ß–s€1tts©6ŽeQ±V×Ìþ˜˜Š“@ÊŒ•j˜1UÆ¡kƒZÉ$WO›E ÅñɺI±¶Ø°Oªbû6žç{Š}ªlT,e#Ïf¥ÚP´Ì{K±ÛZâ϶•òbYå¤\¡4•¾uGUP‡–eÛܸx8Xê¯ÄÄÕµŠI«’]Eõ&óN5¶ˆQVºh˱Ál:º¹t,8kCý‚Òyé|1:÷f•‚F‚k®ªžyÛ–s¯®3‚®ŸˆˆÒ±Ý¥X3mØçÅö¿µñÕ5ýξ_°¤ ÊÅ ÊåÇ6ë¼ÞL®œÖeCEP*§”êr›Š{€“M(Õ¾R=\z«s¡ :b+êbÑíZT¬ÌKÞ;©;¦YØPècæ÷g‰ùfñc‘MH…LhœSúR|Ž<^òr©‹'&Ö"Û¬åÜ Še¯}Õ¹iE±*Mìc›Ñ¾>ÏsþšüÅl]áR&)—7[_²¤Û–º…Rí—l*¥RIÅqÉ3#7^ÚFkÇ2è¨{#…âXT¬Í~Y¤ ÄnPì‡*/¯šØ“”ŽŽE™Ô¥`/ Q=?•gkÐØ'eiP…B'¤„¤Ø¤”ÝÑvÀpïˆ4YP¬‹föyÉ6&É}ê½ÕyO1R®õ¤\…ž/w÷(:º± Q>ÒH©‚$¥¢¨ù§6(¨Ž”a‹¤ –ë²…;( Û^±Ü&VMå15ò\É«¥à.  Ó :%/RŽ¥ÑØ'ÅèhXŠ<Ü´ÚYÜ6ëÅŠUiA±”R`w¶FJî¼¶U¹ )×Úü%{T)0ÔŸ’»¿`©ûJ5V´¸icm·ÂXP–¬tÁXIUÓZTŒu‹l¦Í‹ªWÚL(Ö¶.N›‘å0DõÝ‹Z•½`BRÎ\åb©¹ó›Óò8;* ê*¯õ2źߕ‰y&+JñÛd›ƒ¤Pª6R¬„ìÙuy[ŸÜ+UJeuMxb:rHYÖÖ{XT,(U…:ÈE×÷P5–˜'‚ºCbZW7o@/R¬¿Ø©·C±>1ñû%å ¹é _öâ!‚­jz€@‘^T)V­•nTGÀÊÊ'ˆm,*¼·,)æ4bNFŒR4|vxÉ&Ų¦QIËy½H±žïÊh²¼U¬åÞî ©Ù V’b%g{Œtè!eúL©\–»Ð!:N¡ˆ=˜Ë¢bÁ†ÊJEq²vöe+‡J1)(àG]pƒt &ÕÅ«:ÏúîT,Ã;4e_åÅeOû¾C‘»~M¡\NºOýäUÂô¨X0гhÀ˜V&ƒ×ùЄ÷;R.ž¡øu´ÖQm·bXÇt‡b‰ýn©²¬]×ÀN*ÖzÕ3œoËçŽ`«»]¼›•kˆÈQ'ÅZka;y´F"XÈ¢b Ë’ò§\hØ–öJê2Ã?o0e>ð¸ñ`vH%´xÄïpÎ]v(VY7*ÖËês™‹ŽSJ2p›fjwT±ÄvÛý«"̰ðÉäìy»z¨@i Åú¥%Åâ)ÉÙŽ”pgQ±|s]²ÎIW¿$e¢¡ìQyå²ý+ŠG¹eVÛ\8ìa@¾+)é5+7ü#Õ ÿÀ`‘Û4ÛDfAGËILh0J="Û Î)~ÿïN*Ö“× »êM(V^!BLߺaM±^°r¬,ŶÍlCh¥”c ÒR\²S zògUXd’…ÆŸaOÞ{GKìÒ¨»cGË#‘ŒÙìYÛz¸à¦±²¢}G«ÅÂvsõ“3À„^ÙN\‰žÙNÊ…Ô w-Í1¯³rs]ºB±ÄþgíPª¼Î0–ØöŠm[ù%Gd»;;ôÁ;LxŒ¥Øv:pÛÊÔ¯ŸÓZŠ6Ülš„zÅ öé*ÅÇH7ÙœG·³3Æ»bÛѪc¯tèM‚¸ÙÌ÷Àb VŽ1Z±í"Îé*"àäL˜[ìÜ  )S/¥”“.f4¿Ì£°„J ËèDÈ€Ž³KÌÔ¡™Ó¹b&ô2k)/¢û–¯aª çZ¨Ø¾oÕ¢2£ÎÀtgÓØMß…ùùU0ä¯ÀHHS¸üżA2ÆiúÙRAòÂéCM¡¸ÔŸïbÛÝx]ŒÃ{ìï ‰&šhbŠœˆz ;€)¾ ’âÎ…¹ä‰ÑAÉä$“LJ” FŠ‘(æJÓ åµÒ-¶ãÛbÿ6ï:P‚c¿ n‰i¢Iÿ$(ôñ¾GQ'£à@Ž£Iò4?™Bu¢¸¼ dr®'"ì¡”CI¤áèBé>ÀiÒ>Òþ£ùñVpŒÔÎÛ",²µ Ê‘ÚÔD“¾KRƒ€@vû€’DTDRT –ÔeXRŸæ»~¢zCX9§@ûtÈfÊö°’Ñ{AN‡A8Oƒx^*÷ƒ(Ýø£uãË¢uîw)BF¬ ÄÁÏ ¡4 ÊãÁ±™á¦'±‘ /™À†ÞÄu½Ëkžv‡5Ѥ÷“(C€ÏU$EñŸ`U‚¬ºµŒ÷ÊŠ'\€é@ð\Bå”O) •@Ó¾$Læs$)½™ò¹h®d¬žÈˆÄ”6š[sy çÙ ®› ®ï€`Çiw^MzIÆ7‹À·©"#0ŠÜÁžr­IUSñ@"ð3àjbå“­”6/“‘˜’ÀÈ Ó“—p!¥8˜;“&€»Õ¸vä»Ô4BMzn\Šò þøŽH\ÔÛþGJõôAÉUÓ—?J®šv™&¦) ,Ž[`¹ÉÉ ®£luÉ|Éâr£˜Û=Ö»poÇÂÍÕ”DMzY¹þâµÏHjõ ‚+Hl7È«–æÉ5›h"¤TºPA\J‹K_ÄÂRVÛ@Z?iÕ´EM4yTÖ××s°ºîr««bŠŠ¸¤ª;ò(#Y[²›H9b¢Æü³¾y.ƒµÖÔD“ÞióÌvLõÊqzÃ;×ùcŸÜ%x ¯ûå l£¤PJiP&„’«Uh”ÚÜ*€?߯oÛ`Ù̺eòˆË Ä âªPºŠ¼þ‹ÖIn¢20/‘ÖAZ«}r]|´»¯‰&=“”(¾5œÖìÞ‘ˆsl‘s®¨’–Ÿ˜ýPàªO¥nr2¨2Tιje'‰Q¼¸g¿il¤LvY—Íkq̓«ø{¹«ߊu£Ã„‹¨&-_2ÈùËÞ9ÎZ`^MzI s®þ›¦@+“Cåìu?))”JÞ‰\A5áÁ®9]ÀC~ûe¸W7ðà·HIžãø‘A´DéSŒGòÂŒ“@â\¹ 8ïXœ¿Ó#—p烴þ¸²Âà"J¤5VEZnJÒB[ ÈqÒ4FM%M˳‰ 3„K49Dõ/^9ÎQ°*Fúæº8ûç rY9š²zÜh;Ufvœàv9Ç—O k&x ñ+¸d€6žKU>YW"çRÉ ¡|DÏdŒéˆë5I§ˆ„Eµ»Bp ’¥%¥@Èî¡<‚Hxš^$¯™¯ô4±Š™&šhÒ=D5x ¸ü XCe±õuÀ=£¼ªpѾ \’ã†Q=ãt9@®tÙ@&å ®hi‡ÝFœoÎ÷z¬‚´x¶Ž»¬3מP9Å ¤µ¤õ€g¬ƒ´Â9Èå#Ê5³÷ø¿‘ ¬f9'ËaåQVM£4ѤëIŠJÇÿþXÌéÈ­²zœÉ ’¼¾4à}«<F=Oä9]q}-°Àu4åyuä¼ñ哞ˆ-›-âE HžíH+Y ³“°ha¨±âʱ¬xM»4Ѥ ãQ¢ŒLŒHqèV¡ê Rù—iK€7“ª¦Þ& +cO£¹ëHs ó‡|âŸ7¸CÕ@AXn°²¾©S¡°²d‚£z_±·ÆÈo"ŽU¦ º{óãµ[>û„¦ešhÒG$…Rª¦?òú–WK¼ˆ?‘Å%YEdÅ iƒ÷C‚Ý¥]@‚,ÿFxɘVw’ŽÇãoŠÕ ¯QödåB}1®§5¸(Ó”xG»ËšhÒ¤5"©rê›ä.Ò”Ê{Ò»r’Ut VQ8HÆ®ãF–ŽQ2æ}eš‘Œj9ÖOì½^'îà?ÅÒ®žíOü–vg5Ѥ ,­ñ“ÿÌIKXZ’+ÇcO-^9Îéö3¬dÔÖÿY ,Ât{Ž ëjŽSmÁ$|I»£šhÒÇV–S\ù¤Ñeîw(hNñ§å<-a¹^<³÷Ø{L#.á ‰°™"¬ýöÖÕLG‰ÍÚÝÔD“~"1:÷ð¨Òq)»œ¬,‘#‚a=°×" -á°¼pèÿݳbNß²wÐÁ7×å=1ÚhЬ¥Ú]ÔD“~$QºqsÃJF·;˜?„§$xIS`~M«øØs¬ ‚!«hšŽ"­AI0ïÚ;Zèëü31Ç~©Í)ÔD“~(+ŠGaµ¨«°«Èj¡Þ j9S<3ÝÞëɧæ+F»sšhÒ/ k¤+\ÂyÒ§äʤ°ÞžãÀœ Âû;,#SnÜv{Ž…ýݱO½²ú‹v×4Ñä1‹˜[øXè *t;%î PÃN{޲›ä“3à¯&ò¥Ú쬌픥£¨ÒbWšhòx‰Š2â=E ™ÞßÜå5äö¤…®\ jÏ1¼sœ§ÁÌ6A2?²³=†Ð>&ŽóX­iŒ&š<>²š|(O„V‚¥<ªëðÉu™Kr•%³ÀN7ÎO”V§ðµ³MüM´Ç=²øì Ük¢‰&]$~_ ŠÃxÇB`™ð­ÝÝײJRÅÎÚ›†€íOš¸þ]vÃø_Õ1t$KM4é"IølÎkË¿ñÐ YÉø»½)°ôN«¬»vî?¨QƒŠìý 0ÐÎã<#ÜQåqB5ÑD“ÇATŸÏü`AÙÃy¾’^NFðÌql<íëg#ILòAèìMgõëŸä"Ùí*°GÖ•‹Q5-‡6WÓM4y ²!Û{RJö¼‚äl–˜=—-ÏÎK§¨ákžj@ðÉu¹å“;`K7Ö·ÉOv`ÿpá¶ÉQ&xÚyŒPà¢8Æ]á^ºhZ£‰&AÖä,™¹*gaUjÎFHΙËBòGðIÇíïʧÉc0ŸT ´áýFÿß3adóU{Ý@q ݬD“ <ÕkØ¢Ö -奉&QÖå-Yº&oQÕê¼§Øê\ )ysÙŠBiŸ9P-w%hb±„!ðšÑI²r1&rÝ;x à¶°ˆŽw ^%»’DT³wTRM4éj70ßk溂%·×å/e–ð×Ô^Ù€ŠÉÆŸ9&ñÕo$Lä¥ 2±E—¹ËDÖ†×X­å5ÑD»$³$d̶’ÀO2JضÒ@ %ú÷ÛKƒ86”-a´ ¼5$TN‘P1…Q=v‚Ln2™ »økw@M4±Yv”†üûvÝr–)°C,¡,D‚.„e›*–²Ôê ÌT}–R=#¹Š0#©jªÐôDÆ­´*XeÚîšh¢‰eyµè ãn]Ä1"¥,`gY(°‚í,—°‹À?‡á}ÛRåÉV×Î1ƒÙz¤Õf±U µš™‚Èf"kG`£´;¢‰&š˜•ýº¸Ñ]‚vWÂÙŽ=örD²­5Þl]ý<˨ó`kÖÔÍekjçê ˆLOb‚Àd+,©rêÛ 1gí®h¢‰&Fòá‡:/[µ dt‘“R% ØW‰×(¼JØ_m„íµ~lcÃB«ØÐ°@Bý|¶žƒˆlž 2"1É*“L²À@^`}íÓîŽ&šhb$ÇËÓÆï¯ˆÉ#‚ÚW%S ; p°:Ö‡ªã8vÖ-g[—p¤+ }·XÍqlâxʈȌ l.·Â$ëK²¼€ÅÚÒDM¸¼ Ëx°*ö¿ˆ¤Tƒ ¤t¸&^#µ+Ù‘š µ ì(°§aÛvÑ‹mWa‡§MËØVŽ¥,½I&µÅ‚Ħ'/Ù}äV×gÀTíNi¢‰&‡ªâΠZÖÀjª‘HêHÍJ‰ ˆ˜êAN‰ìXm;V—ÄŽs$s¸Év4û²,vèáÃv\òa™—¼9¶+ˆ,C&0ä%[^du âú> Ý,M4é¯òÊåLXQɇ8QÁŠ’ J'§z‰œNÔ§°“©z<]¿ŠnŒe»®°ÝWU`».KØyÙŸ#«ÙOOf™‚ÄdS“W{âò¸w1вË5Ѥ?ÊÚh_U'ªºXPDR‰œ¤ˆ N‚zºaÇ© iìTC{¦a5{æ‚„ãؾ«Á&±÷êr=ö\ Ò“™LbD`Ü ymy‘™ò2I\’«xi]ý¼™ÚÓD“~&{kÆ®/&·“·¦„%Õ@$%Õ3 )™œN_XÃÎ\XËÎ4®eÏ6®ãxúR2;t=Œ¼¾¢p„²×BÙþk!2‘Éf /É}4×2–â¢à½ì* kë7 -Wíj¢I{aŒ¹þ@¢ xN½îO®«êÍ£u mYQ% ¢‚5ua•¤×ªi={xþâö|a#;Ó¼š½ÅŽÞŒ4ÂÃ7"8݉IÄ&˜l})‰Kv·«¬­ÍÂÚiµ€´jª©‰&& k4ð[fZþÜëþÔ±ÚäÔ£u‰mǸ맰ª.HnŸž¨š@TMë8I=‚:{q#°‰^¸´™ãùËëÙÉ[qìÄíXbØñ[1ìØ­hŽ£z äeL\{®ñ¸—ÞUÔ»‰ž|tQEZ÷@Zã4õÔD“>NX'kÒ«K*W’¹œ¨Ó$·¯Q&*É’"¢:w D‚:i ÎÎ7§³›·²ó—7³Ó·“Ø©;+Ù©» àóÓwâ8vRØq"¯›’5&Y]’ÅÅ]ÅkÁ kKŽo)IKXZä6pÒúÖME5ѤÖ_ ×&ÿY¬Ÿl0Õ)"«FYq·ïânQqkªy *½’zér{ùò6 W¶±ç3÷’’õïOßKdÏÜM%pò:y;NO\GoEq‹Kim)IK¶´¸{xIŠimå1-} ¾¤µASÑ^ùP2€<à­E4Âj'ï~d•rꨂ¬$Ân`ãjƒeuÑàþYçd%U{åÊvöê•L`{ýêöÂݵìù©À*RÙs÷Sس÷%;}7‘[^D\iÅÒ¢—ÂÒº¬ÈbZÞúÔ‡tã |-¬,wMM{üCäÄÿmâ!úŠÖBaµ“ã5ÉGk®êÓ¤¸·®ŒbVë…eµQrAVç/§·#«×®f±/]ÛÉñò][Ëvžc-ÿÂÃÕììÃ4=qÉ—DZ KKv¯‡Ç´ô®¡qžF±¬6Ö›ëêç ÔTµG?Dc:3‘FXa©âVÕinGjWæ¥\+9}AAXܺj’F)À.YW ÖÕå­œ¬Èý{õj&'¬×a}ùÚnöÚmìÅÖuìå¶ /µ®×‘Ös -²´Nƒ´žQ[Y7£ôñ,J0V9ÔDz£†rVüFi2õƒõõó<5UÕK“>@X‡«W寢K¨¸Ë.!ÛiD°½K(‘Öëä^ÏbçWP¸ƒçˆ¬D,KŽcIxÙ%ŒÑ§;(]Âö£…’K¸Mé^л„l]ý|*Qs„µYSW°´¶îÅ„µ·:|þêŸÐ\+U[às9a%›ºS‹‚îÇÚh4BÈI«9Coi)‰ëµk™ì¼+î(àžÂG O·#+9~%Ý%ëÊ8è.%’úY ºók¥r4ui5³zT±?Z> ˜,üÀ˜Œz\kÒÊØÀ$`à Ìk<评…ëp† eÀDÀ¹ OÌ|%À“ÀP:·FX}UQ¨Žfkb¬,‰°ÄÄfc+K"­ÓF#…ëU–Öf}î•ÞE© D^go­áÄtZ×å”QÉi ²e%“U¸ñáÕ EZƒ2ྌmUÍ/ÔWs¨+þ;ñþ±À.àç@3Ð&V€¶·Å²ös»‹ÀY¾\±ñšîv„ÄðP-¬kå]Î; øÂÌþß4±ýràgÀC+ç.fÛÙ#Ã"uÃÖ¶ Rÿ>‘fO!,lï ¼eášKˆx;¥ Ÿ~ú©Ã¾Ê¨ä½•‘lU¯qu¤edeqÒ2d¹K®!%ŽJ––œá®Nåq-}⨠0àùëkÉ¢Nò¤QaQÉD¥Oe0Ž[™%«KÊØÕ»Z¨²®æð2Ë©Õ3ÊRª§Ïëf‚"<ü¯x°Yâs`a]#­Hýu±ªug¯«ˆ±uÆžLXÂÒ *ì8÷v;¬´@>ÐÖÉÿûxó¸ Ûþháiïõ™¶¬*bfí©Œ(ÜË«‡‚´ª£i\C^AEZí¦æ4OÍy^ã•Ós8‰]ÜÌÎ6¯g'nÅñ@º„hÅ´œ(15'BLÍ k—,*å^X%+Ã$h©¼òEYe±˜Å[ÝHV´ZôŸ€V[tÏlG“°²{M'yœÅ+ljÃ;Ç™yç`>ôž¾óâpbž9t&¯ó À«·–°¾ ´ÚqÞOˆäl *:wq•Zî/е?JÂÂvÓ…õdJèÞ~½K\Ù‚‚‡ÝåáïïªXÁöT†3%i”I«FEZuÒ4^ïJL~æedh´pψê 2yÉÓvh´„ ìØõ1é9BoEÉs©&>WmPŒÊ1«öi &ɪֈ¬hÅK •SwYþ§ýCì(H`óÍua~yƒ˜þ`?¸ø>°Öä»þPŠ÷mþØÎ/o ÃE…“’Ì.S¬«×Hq¨z‰œœ9ùâÒõ¸²À‚!,¨À­h~·¼Ðí½å…C¿J¯ô¨Á6-´-íCÿÅW\Ÿ'®OA¨Û' Êî%¬Œ"R n×eÅv–ðJ' ëà=3„ðñÛw€? â· @ duÖ‚¾|.’gßn½ÿ ¸aqý ˜ü( ÛD‰ÿnJ¬>øà‡]eak²ÊCoïaH+ÂÈÒâ1-nm­.¢D\ÇŒˆKªÜ@Ä¥·ºåeä J2;~9®}yNP¡Fó‰¤öˆ »u±äx•r³º&Ö:ËdÅk]Y1ùíøòI»˜°<l­x+È€ˆ> .ÖR4|KhÑ«ÁZl“€m/bìë†c€$òã˜.2yýÝžøöYbilwMEÃXhñ¶¢xdV<Êby‘Å£±Ý2\ß_q}ü 2NxÁ‰õ\O º[!,µ”SàÛ±(@¾Ü†øÎ»¬*"±óÀ(®‚ïÏ·,\ó5`Dw– ßMÎßD%jºì¡Ú¡ Ÿ© .ÞQ̲ÊC˜š´öVÉ1-…‹È+ŠØ–(à'—É"~ Š"~'3ñþxS¢QÑ>¹ ƒºxß.^TY}´}åQ¥ ¸Q®:Z?O,P1G¿@…´,˜YÑ*ÒwcË'vi, ©‡W¶“Ž,"– 'ƒ¢,¬dtKxÉè3ö3ªtÜÀÈÒqU¥cˆ„‹"È!Ð]Ÿ<— [Ž’óÅv™ö£ýCA4t<:.ÎqŠÖ·«GŒÒsˆ,Q:öþ2'/"Dœóºw®st/%¬sÀ€NžËø‘…süйXˆ}`á¸ÿ¸ua½d|³ÉMì²*«d…Ã6]Ð7¶ë­Ø¬'­òPNZ»+ÃÄÒ]Æq-ÙMë —^ÞPäÉ6‚´$âòqùš ®@¶µÌïg›Ê—Ívèa‚‡ÌÖÔf<—ùRõ‚¤”®YTí‰Ê?8Qq«Š»+ä&…ÑÜÐwá:uÚ¤…Uá‡T'Y03ø(%Yƒd!nmZÚ)‚‹|”\c"-"@=1TLy"2»€,,«ÿá–Ú„“Uûëâ[i€ƒSÍ}yò9Å iÒ9ÅÉ]×*®î Ý ºhû¿ÀšÜ ëý.Š]‰8Õã”ÛÀÚ–›°ÜîY8>Y£]þ¿œ}Èq]þ’?¬-XÂ@ZlCá2f .ÉÚ"âÚRâÛ²¹ÔëÜúÒÅCzà˜–T5íG ‡’5õ„ÂõkOTäþ…s¢%ˆj8 .*Ò†4ä».íì5áܸ=¬ôЮ«÷஬ …NÖŽfß,ŠïQ,O"†¹Ü² =DLµ0’—+ÜS"8rŸ)î'_W&'+¶D3 (/ŽyiöM—âS§Ä*^AƒWψäÄEäFëMÒ ‰LZä²+®ßÜ‹Ÿô ë›]tŽ4öøåй” +„õSà[vLšÝñ8ÉÌ v\“·8suÞS÷Öä/bkò³uJâ*$âò¼»®xÑ«©%³Ýz¡€ â¡+ŸX §F¾Èõ‹*5XTí‰j˜È ßèìµà:<@ :‰ V ÍqÜqɧS„RÉ¢‘S""ÙÊ9¶Àº4KXh‹+’‹*¬+ ‘ ‘ lPÚYV”GV‘UΠIê/´¬6Ô,»ŸÂ‰‹¦Qᤵ‚[ZDxd¥¥7âÚȬÓ_›ˆgM|®ŸÖÑ@Xõ€{Ë^)¶%YÕ&IË]495wAõªÜ,-w!q1q=ÜP°ìÇ› }úD(•c”nübÔ§pƒZyŒ $epýQ¸©‰Šgjûä¸àãÜ©Xá†zÀ Ò,aev ay+ËÃ*aÁªt„•Ùbˆ©Í䄵Q"¬&VFV³_+ãÀµÐ ¸|ÇoÅdÀ²Ê8s?9ãÜôŒ[×e¼Ôº>¤•ñüýÔŒgî%dÀúÊ8z+2VVƾ«Á¸¶ \[ÆÖÆ¥¸¶ VFZí¬ \[+Éô~FXç-<ào‹ZõÝ”Žš’ï 7×\ðýïæÈÑf9þézÇäï$çÌe)¹ó€ùŒW×Âò5y‹:ôQIM~M$%bT4´Þž¨ò8QÉóãZ=³ÏYšNb›K8™»„4@ñrßȃ;×i—p›Âí¢|3" ÑCXu–,¬ª8ýÈà ½åb©Åu ï)÷¬V¦…‡ÿphk[ ‹ÜÊ4Å~‘Hë¯-LÎöˆLÌžs`I -"®ä\I¹sÏÄMv袚Tàö·@NTƒÍ•rÞ_9ÐážÖŒ¬ /JSÄ‹@",XiY[ôñ+¥Ëõ„4ÕÂÈåŸåB‰HgòýAz¸®Ùau aEY ¯ôÂúÌ”«‡ï6ZPø7['`ÉÚì¥IÙs?#²2`öØì©óú™€¤œüó­ðÍØÈ'ér¢’« ˜¬„°»£çŠài ãuq"Y”»†5³©<3ÛP¿ S„rÉâ–hË£p<ß©Di–°à¿Añ<ˆ Q;y@`mÝÜû°´v½°þ¥—ÖbC2%”€9±åt½nn´T¬ntÌÑ}Ù® üáÏWYíS’URöœŸà»‘ýX¼sœ‚¨¶Àí»c¥t˧Tp¯ƒ®¨GXÉ(L†¼§dmuа@0Y<ÿ n¥pˆÑ7Xh /c–°B‹G„ãšš#ù5ɹXÓ¸;¹ºvö¯áZï„õó^FXƒÿ°0õ'¾–­Õ¾jfšŽ}S›R²ç{€œt‚¬î¦dÏÛ»!ÛÛÙA. £áÀ;ª~R¨µ96ÜO¸¡: ôÓÔ9ãH"±òÉN,£,ŠCQÉYäáRùâáS-¸Å®!EÃ>^¡Ÿ×èÎâ Ó…ˆOöÂÔšyˆ za‰ó¬´`…Tã{9a •OMI«­ )võ6‘UBöìkqÙÓ¢5Š2K\Ë€J3¤õ›ŽÓ7ÏÅÃ/oŽbf4"IÄÅ'ƒ\¢ËÜ;EX°Ø²ˆlä,ýPQÖ% ßµnïTKûæY2½-OÈŽÔ'Ó» ¯}=„´ ,”`Õ›KœËR¥†O;=²ö Kg¨(mJnZš€Í%5{~ÚAV7óÇÏÒhÉ*iÑçÌÖôÏ.§ŽúTØ.@”r!¢XQ4²S„¢ÉâÓˆDù–^¾e <ôÊvšj™H:úå:€ë¹/W’ ‹‹rÔ(±–æWÂjû:HqXG¯$ú$\Ïw@Ò“:ñ Yª þFWL°}Ä„EStr-ü§*kõ´l8Ç~`÷ã ,q¬a¢è 9Kk‰ÉWe/š”íñS¸ƒp5²²h" *ÂzÕÞ”üÜ7×àNV`k–<Êém(GxLµ¶?®ÅûõÉuióϤ/ÞGä KæUF”Œ¹Wö+pG€¬Åë. Ñ8#e«(â÷\ãð>|AŠÓµ‰úQ-äÉЈž@Xâ|³„ hIþO¤ 8ÚPjÙA¬ÖómEеÙj[ƒÝݰÅ, U#j€§LÅ®’“²çä'gÏ›¬QP‡Hk¬X4BŽmå3:CX*tа´•°Çš,–3Z|Â[Ôx§òD@ärú)àk˜rjWc^ ‰ ïàÃMøZ'¨økO",Ezµˆít—üÔR¥Ñî$,qÜP ÑÌq?×4À²Š‰Ïžþ¤F9]F\OÀ?ìY™¦·–â˜ó€l]áÇ È2­öwÅb«Pîh‘iݹ`n¼ÇEXŠó»ÇÅÂ]!÷ÄRZs츆n[HU¸¶æK?âîzÔ“h4Óå¤E«.ÿ;Öà «¥£„¥rÓ?ì )šð p톇[^ð ÒΘæ¶yöDÂR]Ël‘ÏtÁÎ%½~fvð¼ÝIXtϲ,”¦ù¹Æ.ÝGZ4Џpîgÿ›lˆ°4Ó:ƒÀ,ç{,£xèA›Ç¤eÜ‹uñÆ‹•i{{»‹’Ç”@;ð¡`µitë ÿO–ÿ¹óçÒn± IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/0000775000175000017500000000000013657750470016230 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Fed/DDBC16.png0000664000175000017500000000210213657750470017574 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÍIDATxÚíQn$! DçØ{œ'·ÊN¤Œ´BëCc—{^ýôׄ 4t•ûñÅøxâñøú²žåÄ>Ÿøí™Ntì¡‘oüû ¦mKÐb™¡.'&?‹ÿ<ñ¿†=bÖïÊ——ôåflèÕ3ÖÓú]ÁÓ¿ƒ Û\]ÏÒÖAºz9¹%/\GéßÎDÉØÏr5K4جä/ó*³³´|2Œ=:N ž[Ÿé¦IVî6ð¾=·ûR—‹„¶å{sÀ¦¸7QånoÖDÉnðŒDÓ¿–âNëA‹ÀªyºŒ õ‡f ¤³<‰7ôeªdô"òjäÕ£²êÁ 1¤=àMM”¬«+ª[ÇPföqsäYË4- Ë“xæ)¼E¶ªˆ-É/sBÓ#èEÒz# sŒïxÄàªÙ]®eÏMË}²öÖ¾QÓã‰Y™UîêFEuuÇ¥Ô“¤Ÿ+lCÐÚ–qwi“ä¶Ë BMƒG³„Ûœú• `FeWù$²¼É¬.L3MǶ!ÚmäÌþ§Q/rÜ4Él&F ËlÇî¾"² <.pw+Qˆª½üi2jUY§™§èu OÀ¦] ¶úY©_–MÀÛnËX!wmm•¨\z¹«“QÌ]¬‚õª¡"!âU Ñ“^CVR¦ôP¯|Z+K1·Í¦,G\&9]”XÛ$îr&I† |woÝSTm¦È‰A’-^a•ù(?#_@%êEdäT›êBåD©t•e7ËßÉÏb€Péýª–U<(ïy \-ù=O’FÐjx ÞÙþr±P¾ÓU1iˉÜõ‹h_¦S‰/{hL® R4Ôèn¦0QËþ6ËN&Ë›”Àlè±Ù³Ïã_fͧ ÓcGìÿ’ÌÞ ‘Ûn¯\%+ñ‘üÌTóP‰ÜÆJê)÷N¥ßvÉ­ý’t‚³ùµÒFv…«é¨Æ¡¦XÛî¹è톲¢^ÃiÕ'ÛåÍ’gMЩ‚Ûb!Ý›ì?žMyWQ÷$íF‡8ÝÕÉM’6Ë póàÑm3ð`ʇ€¯ ¢G3ߦ)ëãÛÞ*·‘•úi[aQÈÖoo³{ù,­&.O› p¤¾|^™ò/F›cÊíz—•—¿l°ê£Ó" e^f'Ñ®›;nðeõ!iî!Š9€PÆž>”³òÉHÚ¥””ÏÜs›ŠÎ²™lerË$³ÞA™Ôj» QéízR6Å$& sôƒ¿‚] ¬Ë IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/plasma.png0000664000175000017500000000051013657750470020207 0ustar jamesjames‰PNG  IHDR8aî>è vpAg8H1JbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÓIDATHÇå–Ý € „Ù \QXQœãCc¨={!òÒ˜ÈOï+WB5RÚ¶J9ޝ(ßô„Rr¦Ð®a-0nÇî¿úˆ:ÂÜ$ju¡ªކɉ<â¼8ÜÜž8n•÷ý‡¨YG(’¬ˆÀ»ê6çø=:7T£òM˜•ÆAÞŽn³Ò¹MŒCW yÌñsoÇŸzòºÔ,uI³ª]n|·ZЬº_VVÏpn‡­¢‹õº•ëzY5—ÂBp¬ÍÊu9´c󑇿¬NQsL¸ó6ÔÝIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/AT.png0000664000175000017500000000173613657750470017251 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>iIDATxÚíanë0 ƒ{ï\£÷Ý€À]âX´H÷ãŸaïa§²$šòãÀ;|ýàúW1Žãù<Ž¿?øûýÕ¯¯?gClÑb{}·®9û}&O®àè“]Fð,¼Øê”? ~Àg?‰:/´õ“ÌöªÛZÀ‚±Ú¥µOùmî'i+šTúI{&më'±»Ÿ¤}X1~€M)€NRÛŽÃObh>Õ4,ÛS~¹s÷ÔÛýr³ÈO¢ò•à'ÁO²ºÓ€Ÿ$V'¡8 øI4í·˜ûIÚý$uMÅ–?IUOÚVÈ9ÿÿÅ)ÿ2!Gwâh‘]#ÆOÂý$÷S{ü$€Ïh}à'©Þ‹mï'ÑÕ&Í SLÊÁ˜%6øØ‡™˜@m¾Õm£“R€ŸdÃö›mÓ¾ÒD·•!b…;)ÌVL´—cモÜORE? ù¥:‰¦±ÙNÌÖOÒpЛ³üµ~»†½áe¶ª‹›ýfë³½¯ ?ɶ: ÅyÀO¢m ÛûIäqìG Å eŠke3,f´šñpº±KÃx?íR/Ûòð“€Ýñ ä;Zyøå IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/plasma_det.png0000664000175000017500000000105213657750470021045 0ustar jamesjames‰PNG  IHDRKÿs vpAgK÷ ™bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>µIDAThÞíY[ƒ0 ëQw¤…nì£ò°ì¤¡BSóƒJ¤yØiimÉ"]Z{½¦)zîò¹n»Ç—)î >rvíóežèê+<*ܶï¸Ï—‡À]ñå.Ÿctý´¬^²äIa:9¸ãaöÂ2ÄÂqÚ3ø*@R@¬f)ÆJg,u6?¬W€Šð~W\Öq0—£Bd«²*@Xr]^Ïny-Y²¶. ëÓ%›,9¨º-‡L¶R3(µ!Ãj|ŽÑ¥­˜Ñ!s-3T&¥Š!SÌVf's î;©¬g9®¯nLî31ª!»œ¹?¨’/Œt,Æn}_¾XF9+ÝŽ_Ë CCÍE ¦Ï³²Q<ËèÒöˆªWV¿øƒÔ40(Åq:TŒ•ÂèÉA‹öReG,ƪÙc±Mg5&6nh†É‚Ñ ;Ïz±´”¡i„¥¿°««ÎîÏÛÓ-T9ý4Gu :ÓIåžc)Â;ˆ(+ Ç:ëJ›&]â>*T»Áá£E•¥Ñj°c®xX ~¤÷Ån>nRI¥:aVd“©üW~Tñ‹)5™KVd"IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DD16.png0000664000175000017500000000173513657750470017402 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>zIDATxÚíœanÃ0…{ÿûì*»ÂŽ‘iª¦¹£PóxqòÞ¯iŠB;á3n7é¨útÔdòcм5ù5hÞ3é™_Ä´9¦­êm‹ÌÇWŒrüÏ8Çñ•ÓcÞ¶ñ¦vÄ¿ÿ\ 1 bØÎå3¥†ó3ù€ KÒuÈ+vp·Øä•-4‘×]­ä•?¸aûÀ!:F JÙÃ3 ½GÃm•Ã^=Oì¡+œ¶¼Œ7Þ~$8Œóš”$Û â…càc…upòò¼¯g¸d¾_£ÝÉÿg}r˜¢kTƒ£oÜœyÁ%ÂGãÙt §Ý¤pG’$(ìA>2^ û‰8¤ì´ñÑódÑg ùbyÃÅ”9BÃ- ¨ZêðÎ!k{4OðÖv4m ò·ÎáèCàHI’¤UÎ~Ÿ=÷½øvÀ#ݼI8ÃÞ Óuëâ:Ðë$I’´.ÐÔ¸M%oÌ ¡rðn"Ø!ÅøE‚Q3ËÍ3ßšJ>æ”$i5¢cmÜ`ó´”LÊMÁÈéIFíiUyö%’½~øÐÔ¹è§Ë4h…)­ ¡1ìÉ£IÒjD4ßRe /;¢Zy/-ó„PLû% Þæâú%¢dÚ:PpSá³·¬ XìO‘Ç–¤2ª:OÏR{rC!B %ZÓ(Z›,røAíîÔîNA5IZ%Ät–¨Ö x?£ðÙDäåÁdváÈçÝÄ’ðx7ß›6ì!-ö®ÕÊÓ¼·žjµ¶–±³ÛJ[t‡!I¿•ùëùya·è‡Ü`D¨³÷R¬ –^&Œhaoм2Ù<ØÛ—¿T–_èU2B@ Ã\;‘(=¯`ïÍÝÆ¾*Ìâ`b&Mòöª2Q’$i-jŒ³ê½ÖCSýŒ2§LÅšÞÍ'.0œ'bØ£&S9ëº#—Õ7I ŒÔÅÿ ôIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SCbc0.png0000664000175000017500000000031513657750470017627 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>XIDATHÇíÔ1 …aÝq:N·2\¤p˽š>a MKD5ÏvزRͶeˆwz¾Ñ Xž0@¸ VÐvØíX†ÕzU„ý $@ÙgmIŽØsd×e¢IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ASbc0.png0000664000175000017500000000035113657750470017625 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>tIDATHÇí”Q !D=vÇÙãì­Z÷Cˆ³Lˆ™Ÿ|8–U¬G%Ò»çå`¯jæÇA=°_£—ðÚlª±¾V ñží³ævŽGõé€8ôêÒ£ˆ"<¸:A2âë£èV#Nû¨)G®qâ|†˜ IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ASpara.png0000664000175000017500000000307213657750470020107 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÅIDATxÚí]ÛmA tÿÕ¤…tÒ‰ƒ(3‘\¾ædòG°K£½»Ý>?>ÞÝ~Üìóóçͯ÷ß’À~Ýìñ*–F+uôûfW p9@LšðZ¶’÷7Œ¤½ÄmO·w%ËWÙ}E4€÷ÿWèßG<>H^rL®œ|Ÿ² Z®$Ú÷´¿O]ÿ†>@D_ðþ>å% íµ ºGÑ=6Ðz—ŒÞäí¬¦ëïÖÖNíuL› £oŒvY5 "e@O%€F*è–­$" 4EÒ,+ r­"ÙŠ•ú·ÉNĨ .ésº…T^£é9“Ö(¿FlËWm|P2`+Õo×"ÑoL °A$åÞ"ô¼póÚÜCB¢‹¥@?=<ÖÀŽü÷r¬\šøI–F)gԈݜj“ÐׄÕʬ5)p Ý+YVð5°SM¢=Ýn½‹˜´vïiÛÊñ¾h}ª¬Î!ô>eÛ ¢ötg­Ün$P¹‚e!°¨Ï††Q/°è¼Úcmí]Ä“ö”#15¾?"zU†ð¦«h€ÃÌÚ›ýqšBåp›}¤ñ;/åwG4¦+i•¼4m5&-ŽKðˆQk@µTÒ´mGD—ZóÑ”‡Æ¼Zd,U ï1 ‚¿y,u* Üià ËÓÖÖÖÖ†÷Qýäøz´iéÉZh,|ÖzYˆ+c3Z*<Ô–*•­IÒ€žRý¶ˆ=@úK\õ¸åf×6^9Úz%ÃÚÚÚÚÅö±Ë:hÜo—s`j´K[ùòPr¢{«ÃÊ ^²Âî!S7@k(,šž…‘_Ý}áØtçRv@»½8ÕÚ=`ì²f¦Ó°ŸUukßÎèéSDh”¸j4¬]£Œ§ÊÓЗkH‚JWðâ:X2ô(aÑÕëíE»WÐöôþi:š¶tÒúj+>EéÊwW,­ñ;ÙI–3júf$´í\.Ó‡¶¥hmÊ„ÎØBu÷|%Ísé7{~‰hZ«iú˜¦9ÒÏtíýNÕ\[ßþÓ&=¦AÀ6¶cÁ06ŠÁÊÑYæ¼6ǰ›ÉB×ßÓ-"r±¶÷—0>z~xýø䓦 rÊÇ}Ð4b‰v ÒeIÑ^âha_;«¡g]Ùm¶6­ƒ‰ ’V?\`°6u'7h«xj›®¡i”t–®M´ÑDS£º{­I´ ¥rUg¥Ymªî”°J€ijNä%ª4êm|˜m4ÜP¾‚´­¥± odL‹Ð Ì[[3>TtL{l$õËfÖÖò^šš6)î}ꆳ&¹ÇhP·( ©;÷=l­ò?eæä[#LiÕbQo¾ðXtµ‡¢LÕÑPü¨i¯YGÛÊødgï¾H3©,«AÖÖŠiÛ¸$ðö­iX¡ç@ÆVi”2k¶s(¨Fñ½#dÒD“Õ›oí¯•®ê¢._ÍËoUwé^}­™¦êÌ÷v@«Ž¶¶É:¦úVŽ+2h´ŸiÍåP"cy\Xò4EôU Kõ×ÖÖ¾›è9mWÿÿgk›&®^oVÖ‚câêÖ&YçVÂÚîkÚ¦œc qèZ Y·7eʺäíÍŠ­_ë¦\Ö ]"´q# P>uˆ¶9$¦Ñö~… é$æ¥8æ^æÌf^²xv²IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SCBC32.png0000664000175000017500000000243413657750470017620 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>§IDATxÚíÝK’Ú@DQ–íåx9½«6=`¢èr•@èåçNˆpx.ÉKýn7„ð÷Îíöý½}-öuç'ÈìµlĶA~øíÏOÑmÀG°íkLÀ¸œ-6zXþÜ)}8f<Æþ( € €›<å&å#¶Ú¬Ër“£$ÆQ8‰€9¹pmG‰ 2ê±?¦Ç»IyÀ‘“ÄËSܼÉÈMb~i Mú €FŽƒ¸quku¡OY£ŽŸØ™¹I›€åó%±òô(#iÒrÚ3rÞR@#ˆ™Ð‰•§m³žÍ—”kç,àéAW¤LfNlôÖ뇂©ú€ÞŽ/M±«áâ÷¾ÇÈÓÈ=âfœ¶NR.M£¾X.MqEVå§8J\°¸H«ÒTt¯›”MKÄHÓhçô]bÛ « {tHÉËoí³®)Kí¤)nIÌŒSù±£¦=s“ÃFp5À^íŒ;Ÿ°ÝS @žJ¤©\–Ê*ÿª“Ä÷ö¼üg,”Ö¬·-èY]ØSþ+ù<ÉÑN'M³ ±“‰d œC›%ñíÖðïu”Ùáte[Éc—D® i{pvÌ­C±3L±ûêF}ÃTÿ«ü— wqJÜ¡tm¤iÕENº÷Ô¼Ø œøÓå9 ¨þš´ ‚¾ôjUyÍŠ—¦Õ.1wǺšõU«‹û Ž‚Æ<ÅÀMÔ‹Œ¤·ü,'‰ Z¾ÚmÕEÚÞ*·E¨\–F.#K³ väPýä&äÉHRXGN°ÝmB18mvÞÌvàÄ8Hüb2’¨þ Hžìpä"qÛ,&‹ßd3qs‰?B“ÜD@“¼¥Æívà"—ÁUvœ3­FÀ‹4r~¼“ìýMZ“nç"£ªç"«NÂE(°ê—‘°gåi/qó#±kö÷V}çi=[ñãolÙþ½'ÑׄÔ0=ñrÁŒ\Û`£Ê_0~IüeŽÎ ³ó¦Í匣 Ú'Áûµ4Ä]_>?²×EN¯_ñ÷°oƒÎæGbt›»­8€ô4«ü1ÁF¯eo]üuçñ»âoËX½æ<ö„Z_=ô–¦—‹î«GFhÖ¨W«ÿi °ZùË'nâ\dfsín«ú*?øoå xÔ‚ž‘›<­{Ï6:<À«•¿|“ûç>ö©J®Êßæj…òF=«ü«NR&M1Ÿc+¿ª®]ýã+yÀö¿òŸ>O²úÙÛ;‚oû¸Ù 2IDATxÚíIr9 E}ÿÓø4}…>†º^¨¤,²0üY–ްÌb’ýº‹ý³0‘³ßFyˆ•³lõÇ+—{÷ıRÆ}u™µ{:^½ð½3ðÛ»‡9ûøÈ½ü«Ëë_H2ë¸9úÿ­ãøï_h9~üÓ{Ç_bŸ>¹§Én'^=⯱70:y­¦l+ÌîÍW¡oˆ{‚}Çû±‘¯ƒ>i÷5ôO·šû¢Ëú¾ìÚîùŽëèS†½÷ã {ÜójÓ ‚yÏ¡Gä8¾9‚1¯ó†ÆH/Vô»îùK¤v]™Œ|qò‰ND䋳ùjàWñãZÛA¾eÆG¼•‹Ð#ƒ½.úÙ£ƒ>EÌ[-Ìë²G‘@VÏn€žHä…H[{Ńè2»ÔŒ½ØÆUŠ3êêýz1Ù£‘=ˆÈ×q_DŸ+E¯5âý”Ä\Ÿ e®2k~',æ•aï9ôÔ0/ärú-Ù×{ý¿€n|ʈ¢äkè¡1Œ,û§))m‰’ŒÆì€÷3’ʤ/)údÃ^@™­"Á4e¶ú~i–Ë¥ãˆþL‰"w\F¾l˜ì²_.ZOQfûг"¿:}bÑ2m=›8ÚÎúéÒš(YP*°eÉ ðqíçÊàèS-§-ŠošiÇKàê·éDV—¿7}‚#þc —!ª‰†­#L'4 Èè§È#¥´U;ƒIäôÑÇàÒØØ;€¼àylŸhºb‡>qòJÀwgYJ#_\ˆ¼Þ¢¾×¯Hã-гŠj×o‚…Fܧ-0síçùõÿ¶d¶ÕhV;4¸~oÿz)$²†¡¶eÈØ;†¿(zŸw]„½õBÑM|ná*%lr]™W[B„OŠÈw é¢äÇ`ô10Wm€?ª¸<•^ѲÈ×röjÄ»ó#}$œ566F:¼ìhE^”5k¿XWéšfRÔ{"&Õ@À:×[1×°WäjâäºÁçDY@ KæØØ˜€$R™áÐvà1•p0·I7x*7™K*)-¢Rdc³Pn  £Ïõû6D å¡zQr‚-ÀbK¹13—!­j5¹ˆ°gK³% ~5azäþ!d ¡•E†ØÊ±¦Î>?–D; ‘îÞP„c+;2ZÙJË Åt¶òA{Á¤¼D4Ž>‚ž{†2àë#D?9Há3ò|õ.´e(ç“T™]d”Òn/¢f3†ö:††BýJEØ372´Éºnþ¢Æ`÷Eô‰_g›,íîrÐcëéLliX;7K¥µa—ᯖÚEŽ9Z š*ÚHg›[…š£¯d—ìk‡Ýý#k€ÿz¹ ¶üÿœ™†KŽ@ÛE¶«;"´Eļƒ¶‘ÓŒü%<‘è´—žZWµfà8 @0âì£Oy¢™®ÄÛ“—ùâ›#lÅ®1WöžCÏ¡×:€ÞNµ5â,mQ¤µH•¶ñ8ª”¶¤¹k"“AnßÁ}öD”Ý—€äU!›ccwѧ9År¢ ùjS ð5ÇC]`Ø«qŒ=Pa\Qt {YÚ‚Ikµ|5"Q]F8‹.ª™Ã^c„‹ §°/8»-Âöãл8®ýÆRºL®ú@ô½úP8«S³*…mÁ(³F[àp&óâã¦×eÚ’Çö»ò°Ë=”¬ø%ø¥ûBŒÉñ‘O¤òõ^EÇôUN€§U¶YXÙi\ ò2¸ìM01±Æ{Í÷TØëÿÒ”-ï TªÁ ŸÈ_RÍkß|Zêìþ @¢ï;K^€4”yµ‰¬èTt[Â’½çÿþË‹ÙÎpùbžgSkòÝoŸwÜ€ .ÅË.P¹L011N[­¬ÄZm„z¤­Ft3Øó˜#¼èÈ·"¯Ä&Ø ë=2€ ‚u´ìù8`¥Ðqt…­ç}I;FÑV ö²èÓŠÎt˜+q}{µÌñý‰Ð¦n“‰ØèÓžœâXÕkÐÀ<ô”)óù,u‡›c8tƒu[3üÛ”–ã¡‚<ñMIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ASBC16.png0000664000175000017500000000237013657750470017617 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ƒIDATxÚí][Ž1 ˱{œ§·Ú¦T=¬5Kþ ì&9ã’-¿^Ä0~¿ñz}}I×qbÞøßµ¨Dì¾_Lj’àc¿ƒ¿ÞøþAçÓ*; žï“±Ï|®Ÿ×Ï!Öþ¾œà‘“ ôw嵯€6„í­$Añã jCgⲉš ¶{oâ•_ã {­‰jWÖ±öHžolõ&mÄ$ ¯-H¼’¿í©µ~€Õ4¥‹MfIÜfš`u UâÃ<‰Y=HA«"—øV‚c.î6Òã2ëö‚¦I˜ á OFîhf©¬+€wùÝøÉV”;ADho“oý±o/F×ÇŒóõ‚Q¦¨o 1]Gnˆá’5ÓÌš‰š ‚XØ^pé7Ø&| >‰näXâƒ5…ØR˜WQk ½˜h•øðåXÑ5E|M^‘ò‹ ¦¤>ìÒ'¸¾2ðË”ázÃ.•‡ßl …Ù®á•Sc^¬jd|ËКMW°ÛÖn¿;mÿ²#Jϱ–èš÷ˆõ`]ÖŸÍH4é¿¶¥äxCØ–BQÜÞ”I#<ÞÖ ¾1|k5í×Ù»|¨a$VE²ì×Û¶g^Ûóƒå™€íø úyë «„IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BB16.png0000664000175000017500000000243013657750470017367 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>µIDATxÚíËqä0 D>›ŠSØ0äƒË5*Q€šø5%‡9Øåê¡ÄÏc ¿¾Öo Åþ ü%F±ÿBŒ_" ­ºä(ïj÷¬¤$ŸÓÞ1¹WÆñ¶}>÷1¶ï÷'ÈßÂÒÛ6¶þû«m3‰„õ7*ý6@Ø)-Ö#LØÖÿžA’2š;žEÌ¥¯Ðã(þŒ+tʪìá¥P°ðØîDð)B_ƒ¥ÎehñH?q­ÄºðØ2ó{=²=n¶Ü¶±ÅRûÂør|h¸‡Aþ†ô/á¤-4Ï;½” ÓÚ껋â{©Ù&AÁ8šÃ`€\ò‡àüexëŸÅQ pò:‚€‡´Aa=tæÒ÷¢¤´¼ëèƒ@Ô¹$öÐeR&óÒW*éîå×býý/]¾”@Þ!Ù„ÕÈw|ëéý` ¯/ÐåûlÕgÈÀ\G_@š‡@@:y‘N–läÀ(,-Ža.ŸîñàŒmìh8gûš¸Ó#=|×Ð’Þ7âÜ Žyaó—N[é( i)Âg ³ÿ|¶“ÕÑq^Gí9]M2¡v¡äéNAðò /ˆFƒmvAL!Ý2-"ú” Ó5¹s%'ÚB›2;:ÞÇ$…’´- aÓFÞ¦’7æ¥VÍ|! O©ÁF°É&*Á6^Ä(_âh`ÉÃòñOGñ¥Àгå É „t <%L¸(寖däš±ÉiU„D2]~ÖbrÚM„dÁ½8êj¦G^ƒNbB¨._$)=ꢤ_Üv,^";žKaô ¹„ eGÄB+RiÂ!IÅtGáâòÁ£<â…Lž¿­²Q $ÞÿB¨?&>/Qê^ÜŽ8ñénð:žC”«WH—Í,q½ÎB ]¡„HØ;&^“EÝŒ÷}Á__ðwç þ:¨çÁv&¹“¤E’ú˜ïçmE&êâ"›/A9~ò°æè^!þž‹5+˜2‘T8ݘ¦LÛâŸx8u,a.…ñá:?‰¶ÂÊ^g{xXÙk;\Ma×€ðÉtþú]g¿:Ex¿Ì!^‰ý6øÐ™¡ØYsw¢2¹ TöÙµhÌöš`ÍØ,­ ¼¢­ýÀ› LüØRç,ãe¬¶"„R1ÑãÑ‹b;o«ãéQjI+;àßtxnC¥¶ñzz ž4 €|WèÖ3=pWkZÞö:D[Iƒ±ÅxUãÞFy[2Òªóš§qÜ_Mø¶žjÄýŒðÏwÞTØuˆ‰ãXç/éÓx±ŽîcŒó³qÂñ\ d ÿeH.áYôÑëîÀ\·{Ô„ÎENä „6evt¼@@ÿ´ÛåÛ¦6æ4+‚l¾ÜÀnJ7ØÒ-Eš‰J¶ÉFù¢G´ÃEŽ:Ò @éÿW±è¨žœ@KÇ $ ÐRnhIF:%¦U!C(1‘ ß5§Î!{F߃9„)í‹Ji‹«Ë¯ÎTùF»'ø@„Ò’rÎUÖE…VK”–•Óé”^>(ÍÆE“:ˆ‹bIeÀÄÂg­ÝÏ·’Hò!¬£n k—IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DDBC32.png0000664000175000017500000000361413657750470017603 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚíYŽA DçØ‡ãp«aø ¥Hlçb‡«^ü´4åέâåâüø@Åúù¥ÏÏÙgy`¿¾ô¿Ïô@ÇúäþþL ´m€VËTuy`ò½øÇ—þõ`+°Ù÷ʇ—ôáf|ÐwÉÌ>gßK ðö÷Û¸:ž¥ƒÁ&—Œ«L€–õžvý¡\€éffDåzo”IdÛÜ÷ŸÓ¡ÉË$iÃÌîdÄI?Þê—;íDH…Qä`I~2}´üíØDƶ§2&ñ²IZ€Þ^ZÞÆµ¦:®3‰µ‚4~¦/äÈV`)ÛâcõÏ ,Ø ´è°eväu;6) p¶Q¾ 3bý}:›D™$–fV¿lùÕûËg,rÝDD«&mS™,‹œª 5ƒ ÔŒMdz»µ°<íBÓhú›Ã‚§ë%8 À O×P`ö­²ÉõÀÆw±Å»×ª2jä'ÏǪ—u;8kÃê#„^M²YÊwÃY§#ÊÖK¼§"ÒàiV%Q&9¾ŸÐÚqdµ­ãÐý¢Å$Çzñ®;Ic’ÝÇ*•³e2±¼³¦¤`„ÐC¥4¥í§ñ²Éõ:³ÏþMËz«bÆ$Çwí:â™å—É®gèÝ w=@«d¦@Ê’D;U¹”Ÿ­Âê#„zø+ÑkŽÛ¬(…Y‡ Êõ設ÀÒWœ¢L"`YGpÒ{µ—Eʦ>Ò™d¬:9A!„*ï;8jd§~Ëý Å$rÐÔžIÊ´˜¤|Å)­“h´þÖU…i&À Ké㣌¥?ò‡ ¢ 82µYÀ‘g™ew»yÇM„P•ÝZu#V|=<͘Ä:Æ‘nù­Éót&‘5ÖéY[U¾™l5Àv,,YÎ>å&A¯ÕêK¿Ü,ଠ™¤,À(“”OXæ l¡[ÖÅÈÎI¯¦NƒEÚ¸Š›°Bjzìùà‰«;GZ€ãò‚ “ÌhÚ™™qÓëfÒŽ ɦЕ»Eò1V_.ÀoÉž]‚Eª8G³W!„^.ëyÝ7Θ¤Ì,Ȱɪ›¹^u«³ûiL²kùeÛ`y[,b-äëõ«ÙÊ÷raýB¡Z色ÉqxZµG×™d÷J…t&yŒå/ 0ZÅé+Mr¤Í0ƒBaý¶¼´öú¦üðî$:L"¿m3rLb}OæÎl/‹´à%„z»õ—Eɤq‘Ûè-¿UþÔaëÜɱý2rÇ5¬_*wà%ºüvd(*9I›êxÍ$S4pù€¡9„P7‘µü²é\äâ´K)$—”i7­•Åi¹€g%~=1Øj›MO­fýGòÉéÚZ{äµ% ,!¤2LȦ©’IÚÞ&í}û‹¬õ’ë;vïÎ.¿ño5Xº+‰:ë´¶ºkùÓ¸YֆᘠAµþ2Éݾ+=°üËòWTË^ò½Ë(eUïµþéÍ\e’tº“¥Ó*ãd9c ‹K]6 ²L"·,1;„›ìR]6‘áãÕìr§—ì¬$,럞§Ú‚¤ë»ÞnÙ*Xäu% ,µ Aj&¡<ÀÕ™XÿvÊ2‰,›¬öæò7Mùž­±$¼m°l¥Éb‘ô¬>>%À´ñ+hºè7©-Ç¿‡ïUIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/AS16.png0000664000175000017500000000237313657750470017415 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>˜IDATxÚíœK’Û0 D}ÿÓÌiæ 9†“ªYŒb‰tã×MÊÀ"‹T[Ô‡|lxþô\øÿ‹háÕ_®ãk2[‰G—øèØ:’_¥ì%/øêtä*òQhÎ_ ”§Âœ#>NïVò غHŒV0“ð+{à«S2m+qÊKô³t{ Ä—£)k·‹?׫Ç=£k':sJšð|ALÁ÷œ jDºì}†ÙF²`"üÆDäóà@ù~%­Ë†ûIWI…‘½PÄX„„­’È—†óéÂü&û$K&EDòø? (€<õàù–„BIÌñ piÝíè°ù¹É’ØÎ1°U?O‡¾#0³/0 ëñîdnzÃ%q¯Ï¹"!·×Éš¾ãLD8JÈë«  ûΉç¸ÐiþžŸÿ6„|£ÑŒ¶’ÏØæ··„A®@çø/…³NVGÇ=îê«aPó¾á@ÀÏyçE·~;Ù êzœÌ\ÂyÝJØéï‘^® >§’ D0evt|‡ˆ€^¼…!mÚdÛTÁÆ\fEˆÍÝ$0Ød–¢ÌD•ÙÆ‹åK ,vÒñ)çjþ"•˲HÉ ‚t AJ<åÆÉšâ$#AZÕyõ%%’qäÍì §¡$=Ò¶ÏHNopJjŸHI¿8æ5»Ü™Å¨°G ’’qެìHRh%*-;¯Ä´bºkÀŸw¼-)˜|}NÔÑ8ìY,+|Æ}¼’?²âvüÄ‚´6“@ Câp6"Y¢¯O·×¡ ûžñn}}dm²¬«SI2j+´Ïî:Gmð7wyKC|Üåg§2Sm¾*7»ìägù<û¢ º†‚„R£  rç뉌Õ’9! Ͳ|^_BŽŸo¬!{GŸ«í,¾„Æíóxè?WD†`« }ÛÈGrœÑLâ¹+/HVoèéèØÙ4|7[]ã_ÚvÍ:Õ$40˜ÿÒ†(„>¾fK% b.«ý°¿°àVË^.ñç$›@ÄSfGGÇ]¶0ÔM›l›*ؘˬ™ù²Ý$3ب­Ðd&ªØ6–åK ,t²ÈñOÇg`P¹XùQýEì¤t YŠ8åF–d$K«$’nxyêÎ%É‚¹»¬„YaB(=Ö*OÍ9¦rVŸ¯nlù•hPKRj-C-;Z¢ÐjÑMÉÅt‚òÁù~©°`2òÒÚ‘ÈŠbeeÀ²Âç³<­Ô{&L(nŸ9YÔs™yæ/´8œÁ}|åIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ATBC16.png0000664000175000017500000000276113657750470017624 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>|IDATxÚí]I’1 ó³óœ<'¿šx¾¨Š&¸C6yéJÊö º["ÀMÇÚýyÚãñóó÷iﮯϵ:ý{Ú»ë ´ °ì×Þ]% ãÀÚ€^ ÐúˆËu6À¶E"m»sV íÀ¤~ý¿Pû~À×”ÞMi#??¯O(¹< @;@ÉJŸû>€š'@¯’'J¨-  ô»kk¯M¤EQÆ^¼ÚD"m€­ »ÝHÎ*NOBìÏkùô¼N›„ž?]$iQ¢ªQþ²m¥úí±™ó‡´;(mÜe*î|w¬û¢, \Ú¢?ê[™s›±² h@ë"†¾׈£Uo¯MÒÃmYL[ò0m" •câÉ«MÚ€j|°M¹Üõ¡û¢ÆÃŒÚZTa%°*Àó‹¿«NK¨we!QÑd¾“è;­†KMÒÎ̺ƒn€ZšÕ"i'o¹ ºÝ¤U {7T«ˆj8&žÎÕm­,÷­ yœåokkkIÛ‰W•í—(ѵ’ŠK«YºÙÐ8@ºAt£4h‡‘Ðs¡ˆC?RH"¬^Ê_¸¤k%½34ƒÁ¬jŽf.õǧ+ïwÍ€DÚ“ÒM7¤ÓêQÆDÒÚÚ”*£˜M?r|§ÊwWÚƒhŽ^ðRþòÃ+P63vü lœfÑACˆÏžÓ4¥EÚ€¡Zdü03ÔÅ·öñùT Ð<ÙŒ&Æ€eåSÚZ–tÕ(é*ÍX7êtªóæðÒz)~{™Wƒ´k‘è")îZd\‹H€·±e5ËsÚq¯1í±Õ•m@­Ý´tÓÊûR¬ý!Ö£ÜòS«òÐj¼u†êv…³ÖliÀ`ù©1io3ÌÜðRŤӤ@–ÑJLÛ¨¾¦‹¿¯_¥úí"IJŸ~B«EÖÖ‚‹êÜ/Ç¡í½ãâIjZ-‹rUÝé´¨~ÖéiéZ§…æMÜÈšAÓ(`óËeÔšj ßÁ,ʯ€ùcVUsÀ“-ª7Ú» {œªn‡4­bm Gsså'\iTŸŽ,Õ_[[û6uÖ~^ÝjÏêAÐP/:ü3Y{µ‰ÙU¢å(Y@Í®2+6nˆj’0ÙøX€m˜~‘Ðo3×lÔô®nmmmmCäÁ#úðm“>LD§OC\—È¡K…I@i’‰è=žŽ•~°ÊCµ¹Ä±’€(©/ªÐ¯z[û:êï ‰”3lºQÚ"[Ú2åë ½iKåi› ®k× kx±moÒ€Ò4]uEÃÊ]$mãß5­“´Í§(Pºù[{àÚTæ;ºQ´ÃHèǹ\3çš‘B× ˆkeÝfÚƒ¡QšÑj^ÍÒ>œÎªÛÆûÑH”€FU]ÙöC;¤SJ7‹~Pl—æø&Û)¹ÇæìIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BBpara.png0000664000175000017500000000336213657750470020071 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>}IDATxÚí]ÛmA LÿÕ¤…tÒ‰ÛX¢4âûqùsHdKãÓír†¯ýõk­Ø~Ùǽþù²ûÿ?×2@½þý2üz` ì¡×_†_§@ËÑk:P Æ}€^ éÀ¸UŒž1XÙ¶ÃM»cÔ¾ßúóƒþõiÈy^Ïë??ûz(ÄO£Èyús?¿ÿý~é0´ çs¹EUP»˜ÊJ; Ýx­ïC7ö%®kYÔ¿œò[%@åGûÚ8V%Ðm#®R›&¤Ô ÿÊ­@Óˆ-"˜ç èäC3jí5a5?gÔˆêÄj£t‹~ðZÀZó@ë M6`eZä|5˜×&Pý˜ý±X¹yy€ôY^jÿvZeÜ6S®M¬R‘m(Å ÐÊ ËÕž–a‡‹'ÊF¢$@Ð[–sè“WL¡¯ÜŒÇoï€7U¦øýŠ)å÷j50)a=@¹´­Ú.´Lš¾O[ôKž OÜø€¢ØtB†)&,×NXÇ» ů=Ú‰èÚÚÕžQiÑÙ8Âe ÚσêVuçhÒ+¥üˆ®%$r ÇÌ:J“°ú˜Ó·œ«‹’bf- Y -R&;¥Ä[^Wȉ¥5ç£øh¿PêQÒÂqèƒèD*.]vr_ÙÙ/ÛÔÛ}iÝÐÇЦ¡Úcmm­H£¸7f¼Ï=¾¢¨š‹Óǘei‰ðúË¥¾º¬ÀGZÕ!MC´U+å P­ê.{Ç>ƒÙ«Ø °j4ß¹ñžd¼/^[[{U»ß‡N»Ë #Æy˜6 Öð[ºë²²œ²Ö!®Ê£­QÚí*­ÒR3@iÜùykžD­M¤_ú½¨\¸úMšL¤B£>~œŽåjÓ²aÛ´–uÌ€)Ðô’í¶Ô6É'Êó¬­E=ccŽ/pÄÔ¨˜”ócZ&Qh¸­Ð»¼TžÒ%kÛnA³¯¿µ’s…a@Ñ/lxy”Û [†žnº #°ƒÛÖd«¿½ñO p|ë¤T,¥7ŸJŽM›úZ­2ØNªˆÚfÂ>ˆ¸jë¦eé÷I»´qµ‰m8'ÖÏá¢é9QEŒš2ëò(•“RrÚõŽùK'¨ãÇ?¿Ü„ﱓ½Çä4‰¶Ü/,ÿÁ%lÊ)?7Ö‰¢-Ã[{y»ÀàìØÑãeÇo;þžÛÿÚ°çM’^à _à²í8¤ËŒ¿,“ÞÓ†Æ(eÚ¶H¬‡šµŸÂv™b²µ—•¡ù$À´j”6`Z€Èµk†sJDù­Ñ¯²\Þùj΀\j1 ÏáqÔŸŠ¦4UçÕ xúòÐ{$+ZÕfÙéeÐé•EÒq}mÅc—Í‹H«Ûêk# å¡m›[{^dEÒÛØà¯XV-²E*.¯M`=ŽÞ£ý±íþi‡q¶y m߈´œYM³¸€%MR`¬ˆÒ('ØÅÚDZ“/å¨Zάê²úBÎbrËMîYñj°äḃ¡¬¿MƒÐXŠö`årW'R¯ÑZ ²6ß¾=È gõ¶M#ª8ÍÍ´Ñ|šp1¥ÝNîIÁ톟6Ö;òìœvió—à)È1ê´£¼ŒZªQÚbÒÚù¬b5EX¥GרydV¯:7¯P­î¬Œú^ØÓÔWP#`ôÁPá—Þ¨v&=n*ò…bÐkkk×´q‘/õ§"Š»ªk·¼ÍTDiëkÂ)¿Ô»{<µÌšëé †£f¥‰'/£nSwãŽ{³Î‚ ëÔæŠÌÚöÁjOB™×ñÅkkkA«y,Õo}hgz´ç‡­¾8=ìæ-ÀÌ&¨/è®›AÎ_z\fÚäÒ\Ýuz"GšÀ OäHIšñFÊ+2½©«òèTB»ÜW#í!•£¦;cg àÁýÈk¦ë]j/p[":¾Èvl™²µU²¬Ðû2¥òYÍT<…5D·k¸§T5¼„ÍnBãPÝ«¾½éŠcÐh1 Ï=§öãê¥ÓÊ‘³ŽÕƒÞ.–¥ø/«QÚq’ ½Å\¤ãýÂŽJùàŽs0kjèûRa=汚ðaÅZÊŽVq«:+`4±Œ?3' ¨u8]úèqÔØ§Uxº|ð9NV±„€®òÇé…ñbi¼H>ÝÛ2öÿf+Šõ«¤FzIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/AS.png0000664000175000017500000000510313657750470017240 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÎIDATxÚíQn#9 DsÿÓìiö {Œ,`0ˆã¶(²Š,µ‹ì|8ŒÜ-Õ#)òããîöï—}~^ý”qèŸ/ûû³Ýá•Cÿ}Ùߟ+‡i®‹::¶rí+yåXõçû9¸úª£µ½,QGé}äïÞu0ú¹å«:HXÑÏ/C;øçsá>þ⨃¿¶ƒ"ð’<>Ü1¸úÃ>l¶f$$º¼ªêÃ+E=.³¢ÒŸ¾FWn žÐ’¿ì(Jò·½<(GaŽ¡$?mD©â>ˆ•ü@hª Õ=ˆQÒï K¨—ƒK¯¥¾ŒƒYÙÕKèoÀv<‹È=sQF‘É—\)í6xʲ‰L:b ž²JºžP[ÁGa‰†'8ÕeWp•¶…I}!hâH~˜’FK~,­Ž*Xâ(i˜¢^ýå²R·ÊcŒE¢±è1Ǫ¼í¶Œ"›ÀKìTc×ãe)QÉ?¦¤Çà í(Lò_Iÿ]x‚¯`4œ6À$?k•I€t÷\QWa M¯¥> –¶‹F§d6âêWzõy´²¼ìÃ.Sq¹–úCLB§8VÌFŽEd.ØÞ’|¦+ˆ~ ›Œø4$t0ÁtBB'&ùžÅÇ–îæ{ÛëÑŽíîôàytC†ƒz{ö’%õW+ƒ¥ê³9&ù÷«:†Yäú¡a3ˆí”ŽÌ¥+¹DN•Mhg£ýWJº­~uSgÛ1”Â.;øxT­žt5Üò™œ’ü‰ü¶nǶ¥?*Å}  iUÁ¬+A´ëjr,‚ŠÿÑÜ—úÃ’_Ö±ÕŠÚl¶»²IãÍœŸB¶Z‰p8&ù³lR¬ÏªJÿ2žÐY­ÈJ'¶u‹Š~¥m,—úbyÙ{"6›¾=5ÿâèýc4­7bε^86¢tä¶|¦½$(ÉOÌ8Õ$;ƒ {ÃÉI}y¡SŠEÚŠÊÆa)»’ãÊä/¸Du¡•´ó]Ò_àYdÕÅ|_x’É<± {`¢%¿Lÿ…¶—£:¤-Ó$ÍïJ;ÀÇ É±Zê·çGd`i×Ññ4Änÿ¹K÷–ò·cá¯6ÖEeàÈ]ïmt#ý õü:¯ ݱ¥ÿXÇžñ6ãÐÄ’üe££Æ ‰}ɾ MrEdY©/wÁ%Ë"2 ™)»+Öž‘cݳْþ¶l"øÇØdܱý~\dDzlÒDªÆ®éýø« ›¾¢¡©Ü#¸*ýal²Û‘¢žÐ :Ⱦ"k ÁÊÀíNÉX­àU/˜@“øh©?FwÙÄÜFì)»Ž[º›QÔØDˆ—cl2^l–Ÿ_wëû¿U6ßÈåú°¢Û’;’eØ4òªÂN¿å]óGÒl"ë:ý@O¡”t4kzhb=‹íòéØëF›*£ÈåM¢c†åksôJúËì“U6¡|£Ù ®¦#`Žf‹Æè—ºç¶ÿù÷ð[ÞíXøí®–Â×çw¾îÞLš_ÃRšÐ·è)°,‹À? ú*ÈI}¹VºNGØlàl€LÞDžVl’–UhéÿøïôûvëJ¡×+Aoœ˜ÅHúÙÍRÔeÙ,‡¦ªä‡W… ™d·Z. M¨ØÑ·» M¨¦KphBm'MÛ^ÚPžÛ±ˆÍf³½f”¶PÈÕ‰Aß?w?8zTÂÊ Mø ¢Ê’i£ e™¤Kò—¡©Z's¬ƒå—¥Z³ýÅ«m‡ÆÇYX‚ÝÃU»¾ì$¿ßGߣX Ùl¶w±èuÍj>A¢G<øÄºLƒ'ôìØ ²‚è–ürÊ~Åò/É1ÛŒüF}ÌQg³Ùl"Ò_–EƃG²á7Ù¦|ø¸ ºœä—Oä› “M&ʦcåÚ»Ž¯X䀒*Ã’Íf+mÔr­3Æ‹låË”e ½åKåå/tIþ¶à¹Ì…9&‰®èØ¥«è½ŠЯ­í†ÝÚ/þÅýÏ“bìê$ŠAŽÍ`½h»ôþ¿ÙD¶‰|;—ãâÈ´:¶)Óí{Ãí®äØœwùætQ©ÏÊ3Ó¤~– ÛYD°¯X“Ϊ£²:Òfë’þãïsòMÛ›&38=za=éoøÙ£ ¯ÿ!;@eõU ÉF÷Û‡øt›h3d$%:Š«ê¨ÜÔ59éïŽf·OO8 Q•_ãl2>Üö˜ñÀÇX–Q}Ìoù1éãƒæ³t•Eà d«9|c|뮾²úWÞ†ª ÂQø<ŠÍÝ5ŠŠ‹ ÂÒsGa²ÄVÜnƯM ر %ýÛÌÞ’ ÕMWÓct'_¦W]94¡tí«æ5ˆ•ú0¯ž™lŒê¢g/ šÚt;,]9šuèèkǪݲ,"£-áoÏ$rù’jk¡6hªúÈH:›D¡©m%Ùõ32’ŸžÃ»L0-ùá#««±hÚŽ’ú4XbK} Õ½Örf¥¾¼ƒDÁËq°-&-?xþmíL«SŽÅ"uÀIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BB0.png0000664000175000017500000000033013657750470017275 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>uIDATHÇc`üà€†–mŨìL˞㘎 ‚_ñ[‰i=Eþ&ÕJ\ÖXpª€|üÿ?‚D˜þƒˆ£—h«ÿÿÇô1ÃtL Èbü1ŠK– “hâcü€j“—þÉ´˜’LB“Ü< Èì3¼?iÑŒ1IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SCpara.png0000664000175000017500000000172113657750470020110 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>\IDATxÚíQŽÛ0 D÷þ§Ù+ô=Bo⢠#ŠJi¬zßû È"I†9¢H}}\ŒïÛf'è×mû}cÿ[&8öç†P{öS|ÿÉý‡›&°Ö‰Äd³ï/ØÖ \`[c£Bâï Vç⩼˜Àx €Eè}Úx’òÞD.0¶|$³_&, õ ’cmäÆ=ʲ? T嬭0s“­9€jžl„õÞ$ÚT_ËÓ´`-¶© å—=$³u„&é3#» ÌLZ€G™(;w'<Ã5&ìtO²GÔ}`zìIzA²Œ“Í–]ƒåŸb€ËEÖöˆ72gvœ—™ÛL——o´6HGŒ˜¬­AÁ”ØqRѶŒÍÞ¸GBy¥|:¢¶7Q¶Gåç„Øœ£±)×(TðbZ2”M­QÑÕ˜›“ 3ÜI€j„X¶)§M[S3¡³ bíZìÚ„[£ËäBG{¿É„FùÛîyvý"¡x¸œG¡ÿÿzwg~i…ýµ.NyIs»PyöSœ 楟EÞÖ™¥¢wB,3QQ(¯¹Å#%läæ)+Ç™¦LX ùåuy/b—¸á0üÞ?:% ýÅÂò@T$,‹bìÒ£E§»¹÷ëE›¥¨3Y/P>Õ¶g´²‡…7`Ô˜^$0^vœïýK)NÙÑ>Zm$Ÿ[ô.Z죵<’žßÝ¿äiOõèI£gO"J•)ËÀ‹hÞ½ññ“ÇÈy™i²ï j[ž;º»ß÷½6äú#Xf Ú?ÅàúÛ *sƒ_¶Ë/;/SfóÜöŠÁlj÷‚“—ü?ÅÉÅÙ$¢°ŒÍ4 ›ùh^iPÜ“ØY°=èmT¾L±m¹FöpÈ« æCý"wäèªg7¢—ô$öi o2Ú±gùf4¥v=2¡v­víúne#cßöÙðfTÛîyÙˆ1I…®ì8ä/žÚË©l©mwIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ATBC32.png0000664000175000017500000000544613657750470017625 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ±IDATxÚí]A’I›gïsö9û+¯}˜KE`PõÀ¥c7Æc¹º’”P&|}],Å?¿ãëëׯÇß>¿n ÐØ¿ãoŸO m€-`âoŸÐu`c@_ 0ú·Õl€c‹Ä:öä¢@ÇY¿øûÿ{½?OøýZ秊ȟ?ï§´¶< À8@k+´~îçôvôÓÚ‰h½E´~ïÅÅÇikXŸëb)»'¯Ñ­çg»xªRÿOÙ¯V^Ý­1ì¨&iMÖ¿4ªIÚÇ“¢šdJ»<`eÀ§Eº©¾ À*Õo˜¥]cb‰'’.¶5Ê ç*µHÄà(/'–š‹2ê6ñÄ¢þc4LNÝÉ:{É.@”°z”¿-Í ”Ü/~þ"ï FµIGó¢¬ ÜJU-BgÔQŠ?¦Eª `t‘¬C_×h‘K¯MÖ‰µµYŒ{\“di×Ð×ù%Uñ´&;Û­1”òW¿jšz˾ƒ4¦2jT‹Ð}´xþü , ´ôb}QBÛVÚ°Šæh¢ÛÒXTŒQ³´Èº&iWqlÒ £E, r†Í…Š&¡ØÕ‹Œ;¨-±fèdý’1 ^zÌЉžå—£ülñT–}‚Öâfµ¦Mž{gô OÕÐ /ôÌ••€={‚feð´ù#ìzŸ÷ªŒ‘€1㦠TN‹XiFΑ§ú§A~¬6Y×"Ѫ׺±ã8ãš$K\é@½¯¦z©Lù£gù³÷K`F¥üíšÄó3PÖ2&š¼w£úžHJëbÔùñì‡öÃfÑ#ð^žóŠImÚd½'¯EÐD-CùQª¿NžOl˜—Ø_\4UÇÖ¶ïÁÑm1D×$ÑéQmk’çôø[4…ÅÊFآɈ¾¬Ãee#¥üc²ÍcÀ¬6¡ô{é†Ö5 ›P£ÆÎ8À5CÇbÔëZÕ ë$ÀÚqŽ¿]\ü42þ£ ž¶Å=óšÑŽfi’€žw±ìˆhÙò±”è=fè ï*3Ç¢6ÄÀ(å—ØÞŠ<šN¢Ý•ii‡¥I<ƒ'¸Q!ÖlÚ8ÚÛr|¯µ(¾œípqqq±”ÿÐ|¸¶ƒD{cŽïÁÑâú‹‰:Mã|p]“|å(ÿË-ù4#Ÿ¨_³Õ]\\\\éC¼x$_~“-`Ê—€_WD-å—ø\åãšDÖL|+khgyôÛËO,]\¨K€u`òGDeÙÊS–=è-Tþu— ¬U=~]ã5^ä® ½îÒ•'/Y_9}ާÜÅ?VULN“È_>½¸˜¦þ2ÀäAȶÒmFòÚÖ’ë qd[ ½¦)“\[«×4“m­–¥ük]²:y¼½_–âËM¼ò€®·˜´^¹&Öv"éc$ÀeS™’ÆåÏRÿ1 ²mï»Ð÷TÖè…òt¶®áÞ©4Ðêøö)Ù*(A¥ð‰N×$]ZŸÛ™ÕÅãcXZdm”ì(.èú0³±rÛÅQÿ`=QÆG‘,*;šUn¸­ìx`ùËò#ª-¢ŠlòÏ=¢}â_–ò šG+¦ò”ŸmàÐŽ²ž`[zÊ>Áö{%I1pÐӾ뫞xq¥[£È,Š5m’eØm@YÔŸekÆÎ`´ª…^©lgÔèuŽöE=Ã߯œ£«ÓÇéO2˨ۚ2¡D•%šÚÞM9F-ã0em‡u§ºHÚó¤Ç^PŸX†v­‰¤‹‹mñ=RÿLGôqTXþI;õ·ØÍ¸6A‹é²£šd ÷N¢gÀÚ€¢”ŒTEÓšÚóš/•obwÛòbiL“° Y€cr3ûUÝqG;”Éüö—#¾ø1b'KýÛ /Ñ®‹§×SÿÓ&]ÚÄÚAÚfmˆvÑe5ëmM£ aÇ€®µ¯ê&ªíOòãµÈº&Y†ú#ã~qV<×b.ÎïP–¥þc«Ö*¯‹§*õ?ñ$«M¢wÝ×´I–ò·›ŠÕÂ¥wþ°ò£šdMÅ} “nk­û±TýþˆŒG—­É¬Sÿh‡ÆÓ&Gý§ì €ÏÕ,³8²güÇg©”ÐÒtV›ÐÅSuô–'žÚ²B¶¥$ýÀwµ>Ø.š¢ZÄ@k›=ˆžÜ”³ä˜ô˜–KÖª­j¹3[ãZ&¹îX€OƒœFÙ&«QPm²,ꟴci“5Ñ´&žªÀJøôl€öÛòžŒµ·Óöb¯³7 0ÝÉ6«E<ýœVu¨z˶­¢1mÕ§‹¦lÑ|­ºßõåü‘qªýj×4‰×óWvxãQøÓ( ”2«9ªMÖ¡i©(K›ÐŸK,Ñú°¢ƒã£[^ZÕU)¶Gœ›®²À²µé°ªóx`´…g䄵 ›êË‹&ú¦¬ý0~ñY~þj?Œ7Pùk^CœÓ$oñQÖµ‰Ul—éè-#žØG¦dµÉzbnÓ"èÖ†–åh@«öjè„-1¢ÿõAàôÃ>Ðï&ö)ûÁzÒ°ªcÝñî4‰¦è]¦rþ»ùìS¶ƒÌ)t <|q‘\L²Ã=²®M,U·f?dŸ4òWuº?âQtŽ{Y“Dï‹ Ú~ÙY„•Æ». ¢ÉM?ì+ãÑ ©aªÏ¦üÞ» ï8]Ó3è¢ Îê>ß^£‘#g?\\\ˆˆ¦ç皈òÄZy¥¢ì$½¡[[ÕâJï@UÊŸ=»UÖ$Õc)4MÒŨåÒ¾bÖ‘(´ÓÕë¨|À±ÚÖÍáÅK;èóGzËC‹HSU±þªÔÅÅÅ҉Ÿj-'-ž¢U-ôtM¥IDATxÚíKnÃ0 }ì§Çé­Òd‘‚²“ˆC{fc «ÕŠßÓ‡Ü6ð{gÛn·ñY.ìïÎCHö,±QȃW_>¢£À§°ñ‰ˆÁLh¹°h²üÜ)OØßC*P fVÁ ‰|!Ö¸âBT”MÊFÙ¢p%Ê&˜C“>PŽœÙCDd©,&<Í®þ— Í&¸tWžòfsqYˆzšˆ(4a„aÖh2aå~Paí…‰ˆˆ0CNn["Ê&¡‘ÌÎÓ˜IÊS]––ï~ŽBf lt÷ííQA""""Ršêpqç ³Ðôvª‹œôÞ'ö<á×Gðôï`›Y,"""'¥ÍRo»µé½‹êÙÇe¾ðè>IYšÃí4e¡)ˆ©‚KsmJm˜âDDtØM®H*T¡]&Qä÷pU°·Á² œ² Ò¾æG›z„å“ejx#€ObTèHV‘•TÃlwû WÖ¿£”í,áBn²D9Y{%¢›Q ¨@¦@lë™6(l uºœÍÁÞU‘«›í—#§À®–ãZpY»¯Ð9hÜ™,l ñl’`Ïf™=DD4² c}ƒË„E—èGË¿\àÞV«å½np«ù£Pl;#üõ lK-9>fpßm6ñõž{ôrë?»&]žE²ÕüåŽ:sÐínZc~&´ø"""Œo°×qÚ,¬aÍÖ¦?Õ&ä<#ˆÛÌb‘‹;lŒüQl5н­Ê kfù±ÎºlŸ$rÒ³ï^Ûîåmû…˜ÕǬâ;V®Î>¶kþD:îIÔÀ:Õ U¨)NDä¥ËÁ ÞihSZWÖß `ï;ˆ›,¸B±mí”Û —èH’äêüÜå—òQó IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CApara.png0000664000175000017500000000276713657750470020101 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>‚IDATxÚí]mn+1ìýOó®ðnÐ#¼›ôI[YQذ€ f6™ù³RÛl¨?ð Øøë‹hŸ??ÞçvÃþð?Ë •†}x<ÿx<åïË Õ ”†i†ÒÀ¨¡Û »ÚdÑ&G¹A¿_qþ¢aÈøýxŽŸ{ß³ŒÑuQ‡í}OJŽöñ¬,³ïy_­®ñ¨Í´”³Ò;Ÿ+nAé×¼Ïñ¹²I’õâÂYL/Ýœ6Ѩ>ŒFÑØŒfp;/”ÏmbJ¶¼Fñ¶äv¦¥þåJFlédÍ tô5TR~K›vékš$[ÄÒ$Û™´Å ËES“>×d­½¸M‹Œ1”,SsscNºXV³½å¢+ 5AÃqmbJs3ÛèÖªxj74*¢Ê Õ˜5€6y½tÍ&x$)Y6L{Q4w—Ö‚ã ´hTߊ0$ŒÁëój’ôXì’Y‡¼6­¶@Y†)ªÚÎñÁ&ªo‰¨v&­åKàôc2jj‚øtÕnXÛ¦³áÿ$ Ðò'ÄÓX)®W ­¥¼â)°2ü])´K3Pkk¬y JSwÞ?´4‰4Ä20=Æbi-–¦ê¼~LvµåVÒfq–(wÔÑ–‹¤¨™uKeòSúK jª=‚ >’¯—°gê¯i“r²àeÔ^ƒÒUÝì5CÒÓÑP¯ul#=Ó´Jõ½¢és „íbØIëf4G}Žæ7;j‚ âðiWý|ˆÁðá7Ø&|6ˆŸ†€MäÀ§Ât&sèeÉÄ+Ç‘ŽŠ* „öÚÊÓV‡¦ÍA‘ø ްZv“-ì6eØÞp[åotØô¸†Ö¢€^b-ÚvdH§þ¯'Sã¡«ëY _RîàŸ×@¸£“°•{¢1UâãW®”†·Iy½ÁhAÄ(ÉXf-°q¼Â<ºBt9xQ&ËP€²V×]TìšI·—V³V ˜âtƒ†Ó"·+8[br{8Î+’(–¼†“»h×î÷¤1ìm%Çá‹¶GƒêÛ»˜7TÍ>˜Ë+à¯ÿ°˜tû*QÈ;r²4ïiòRûö«¸,¹ ·‰ ö:8‚@Ó(Û×ÚY 7k5¶àfbÌÚzIJרÿyeI’ÞÉЦî4ª>?æ6%¥&± -2Ì»íÄMé]kÕ:·ø_™š³Š¯§—J«¦øÖ~A8 ²m%ñž¬i—›Vê«ý®X+r Ëj(ŠtÍ«U`îg’-¦çGš[ÌOñA kSy^^ç]y`Âq–dÏzo Ä5‰\"ƒÅ[LÉÒ$Öù“i?éGVL:­Å²™´Uj#}°Ïj‘r5§¥òáR^³çDÚüÜ%eѸ‰&A¼/š«JYµճ̼>œºÝ_FÉ@ÙUõ·ÒÖ^/ÃÖêq¥ý£ÞÛÕ/ÛÓàâkTßÒ$Ócr–êÏ Ö÷R õ M_$dž÷TƒÝ¾º]éT_ìc,–-m·©›Õ¥"‚ jôy‰{^ƒe¥³s™ý¤¥nuE™VyÑx`Ö Ëzù —°.×öîòÏj“÷5¾‹á& ¼›©vÔššãeáAïú€ e‡ßÒ7^>ØÀ¬kên™¨¶ÑaÓ^FÝžÈO…U;è펾=ëlBÛrÌrû2pút8A|<å‡ÝyÙ~ v“-ü6å¬C§³dÂm`ôþ¹í[åáÀ׈º—í^ª¹¥Ó‚è7:tzl-j(Œ>:ySíÁÔ±›qÃj8ê-1^n l1ør.·-ˆSRȫۊ2ÍŠ©íe­,Àƒ/­æíšÛ—?‹¦¢û›VãˆÛoÂRqÏ- [ÎêeN‰ÿƒÀIC†çIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/GA16.png0000664000175000017500000000257313657750470017403 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>IDATxÚíQrÛ0 Dsÿûô*½ŽûáéDc ЂX`)‹üÈG&õвD<.öçgåñ78Èb€A¸ˆQìŒñ"&çŠKŽòáyg$-ùûg¾ãIaÿ©ö(Ú æ_Mæõúý‰ßèçÒ¯—õqã,ß¿±.ñýiaad…òÿfR8?È3Æ×íIá|˜ ³-PîÑ @þodäU(‰3AÊ´‹“WF˜À!ùyC Àºí¡þþ'œÙ‡nµà?Ášç‘ØGÊÂrÎ>ôø˜+°>æøÒº-ÈFtüR& çz Q"ŒÜBIàÝRòyLÙ:ËVòòƒ¾ˆ–`PÊçª@¾I[¢Yþ“CŽòEȇ.ùÌ_HfÞ§òŸ’~¬¥!ßñW>¼YÑ÷x–û=bú æãäKåÏÕºg´UÌ¿ùåÁ‘/„€«ÀPL bÀ{Úí±ò•WƒÙö~nÏ]+,¦ gܪã€x|/ñÔÂ!ðˆ~,1,ár·ËOle„'å‘ü*!—Œ˜,øžj’¼üÍ’O¥zadKÃC[±-β æÂXd­äEVÒ¯Ø&¬=îÆ‹Ç§÷ó§Ÿš|›vôm(B)Nt™¤Ùl™¸”Ê©²È+¾ÒD ¥©Íe„e·Züp-ñ:‘Ù’) {l&i½l #۴ɶ©ây«!3_v“Ì`k²e&ªÌ6–勤–H†,“þY"áµ)ì›å©zAq^ŽA“ à%7>k$­Eq²Èh®¬Ê¢‘PYU¬l®u4U:‡³Çì fºDÂÍå‘×/IS=ª@2ÊÒ%˜‡lDK$qÌkÆgR˜`öÏÀ¿Ö&rÛ‘°ÑJÔZfÉ74Ó¡RÔ>èˆ$’ “çìÑ”Î6ÅfgI>€¥©ñ9s{SyTæÑÎ|˜j2;MvdÃËò"9:•‚ßÇë,w PùJxŽð ÉB¡€|0˜ì(4ñáoÏ;gï6´EvóÇVFikW­ÝÛÃb1Éê’×PÐ$‰M%7w»ü¤QŠCðª§ø!¾Rûf͹s|¿š+î^ùQ(<×LyØñ"þËsÍ;Y¸kVèñÜíP¿&1—‰Ì]6öLÏë0„°TŽA…ò#‡Ì•X¥^?Ôäñô@©=±µâ‡FMFâ±J 'K;½›†žñëÔ0VK(³¢¼àyìK”O--_^½En)ÊÓV«´°v$:ïš)¡K¬0K~”·^3ò~ I~¥ÐY"¬ ž7Ráâ‡¿Ô ö"V#9å“©l#ØøQå×ä÷Í*CÚ,SòþY¾-AxœñqE›ìFG ÇNµ¾?µˆjCÏÅ’ÿ<Ÿ½»Ÿ?Se¯Œ«Õ䋇T¸àüEK ”P¾Y½UØ7šÈ¸çõ-²[]òp ^'Ù"^2eAbÍ$û¿u$_„`Ó&Û¦ 6æ2+B`¾ÜÆn¢l2KQl¢ lã%Œrqj`‰dÈ韥^ß@8Ü—H¶&®©úgœf#+@”Ü,QdÔZVå —’!RR:ç¯VÖ_ÒŠñ`P^)(µ‚|›¤'ß ¹â<͵k-ÞÿÎÿäÐ+?ZFЄ#n;jm´ºYk¡™!ÂöA|¡ 7L"‹_a‹¨Å>mšb­À×Ô,l|öp§•³ž:_uÄ?ãæs4v`¿IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SC.png0000664000175000017500000000335213657750470017246 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>uIDATxÚímnA}ÿÓä ¹AŽ›²B ôv/0ýÞ઱,Ñž]È«íùøúø0~9ì ú}ætúsæúZVpTØß3…Úh‰/oy}ã­­À±°ñ÷[Jü&+<ûýö·{P^àvU ‰_pw6_Ê+0¾7y%¸Ú6FÙˆF…ÉÝdKÎU'iÁ£Nb“û"'±‘&'9ž¨å"K¸88É`å¹p™vDµ@yä Žàm¼$*HV`d{íNÝKy4üö²dà$¸ü('©¾¶q“ñ§¼À± íÿjYä“òVH$MñkßI¢Â¦`6‘“ØçBA#g¼ÔôGÞ{Ií ˜ã&òÂF7E>ɨ_ò8ŽNÍ‚›6’×xœ#Ýl“¦è ¶K”°WwIÃ|˜¹ˆL–j…ÉdÉÞE4nbWX”¡kK.—ŸFË7ö$Z#‹üã%ΖÉôs,d”%Á½¸ï$Ñ‡Æ ò7;Éu„ª.b6e XÃM¥ìO‘jªY¢: N¾Q˜LšªN"\™s›˜«.2½°zä·}r;²ÂÙn8 ÀŠn"O/U7±› %jya[­ÝFþÑIÚ¦çÝGýý§ø¶Û?Û>a¸yS'x*Å4rjÑß~«5Yä¯:‰ÍþÔí#¸ì=¸ü§à?ÓŒýVᄞý‰=FOùMú$¯^ÚviªŽ€A¯®æ"¶¦±P¾Žæ°ÐüiѬWçð RÍþjˆl‹5ùÁóÙz»þˆpƒýÉeFk™ÌV…U/µíF‰¸ÉœÈ_ßgU¾cíþ« œ$Š_¶NÒõ£7Êv,Dþýc?¢Be—6s¹vFú‰‹¼7úg)Æè@åìø7›càö •»É85*‹a2ïÍölµ»ï$òu$ÑT¨lÖ›,aGb;-ÏÞM%È¢¿-ûIÚh.—éikõBš$ºt™“Ô«9‰ sÌId…F‡ö,³+À8ÛMöõ³¼‹à&€›h#ÿ—º©Ðl‘ÁrN"ŸD–%j›•8¶ý‘ê¾Ó6#5rpø˜èOsä©ýÈÚ#|ÌIäމzŒYíÒ­~°;‡¤ºÀe'‘à²GÎpܤ7ò5t‚“<ùíœ$KÔvOõé|Ü%ÆEp¢¿ËÒq[«3w’ãs´Ä#kç$Gž·X݌ئý`ë"ã÷ .¸ N²š›ìÝ{mù0jCÈ$š ŸoÛ\`¶+”\šì§BÙ÷G¢‚9P>ÔM²p`\ }¿DT`@í|¸ú4zÍÖË$*,: ñ:¢"i28 å1ÙnÉ6.R} ð!»IuË]“H6n’_ÊæÂ²G¾[.ŒF¶ýHÂz’¾Œä´£‘ÊÛÍ÷`4rQ²YoÑ™ˆvm\pª±êñ¡àB'iÎ…ÕãÎeN’åÀÌIÚF.ŠüYl“¦úò ѽW]à"Û rÛÈ‹N¢6’í_“¶Ãóá`²4y~ï&“F¶º Bæ$ÕÈos¼ÇñG“9UýŒ?Õ¢ey¼ä$íòdŸbžß5tt’Iò”­+¤­¡³ì&L6Ë3¢{0wñ“\JÑ߯M¢¸e“jŽnÆÔ~I³as'i–&ûM˜ì7†µû€gô·-,ßÖÔdùnu$§/€Ž"¿íS~›>Itïw’ÉÒTýØq¿~ÄtиˆÝL$Û™èÙœ~ù\þêh»U6ëI²6Ä8rm+rÞÿDA¶!Äb.B 7~ÙLKƒjî&Í?®9¨Ž‘¿ºR;éi9ÏÖI"ÉDÄûR+`ôj\à=)ÇÞEì—ñ¶%æêÈU#¿ü í£ ¶ÈŸí ,ˋهà~r™ÜELÏï¬bRhþ5ÓÜaxoªÁMž ö3²åmN’!w’¬ÐÜILŽÅÌœ¤Í›ëN"§zò©˜¼Ûi>é Y€EÝ$jCÈ#ÖŽúl¿DV`uŶ͔©eœ$*°±—·?"FÕ\špø¡nbSPXåý’eœÄÎMª—Zæ$ãŽNr?rí¹ðñfN"/PÞÀ©»ˆýZw D–¾ù 1tÚÜéèÿIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CA.png0000664000175000017500000000451213657750470017223 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÕIDATxÚí]ŽÜF „}ÿûä*¹BŽáÁhGÛü-GÅ—…¼¦[Rw}$›üõK6dÙïßÖŸcŽýõe÷?aŽÞ9öÏ—Ýÿ„9êuìäèóV0º’í+]IøÊy¿f¸cÿýßÿ!ïþw÷{ÊV,ë`ãŠþþ2ë#þžÏwðê€õÿÿgƒÑŸmV½ÜíG­ƒ2™˜$阕M`^8 ×1xŠ2 ôƒ§µ+wè*Õ½L[±¬äoŦw:Žš|Rÿ´r +û^êÓ²HüìKýaÍq1Ís“=ŽQƺª˜ñˆ«UQ¯OìÐ1 Œò¼lÒÎÉVÉ?M'UcÍv¶ ÖlŒÎ"Dtäoƒ¥hÚ¡]vy;³H‘¢öþO758-‹ÐK}±ˆìñLbuŒ¦Òö®l´æ µÆ~u(*íi<}å†.i«À¬B 4Ùb6íGƒÈd2™l 䜤¿—Mh—´*ÆT‡éA:&Y/ùǤ}Äk?ø6³n£–Éd2ÙzéOëðpø-«jîþ^{©|•À¿l0D_#ùéŒ*ç2×$iÓ±ÑGOhwŸ@‚%™LV¤]3Έ¶ÈöçG?Æ&k ½éJåé/Ð^× »ð²îÊÝ¥+«ÃD×Öj>ª1hªúú¥Šd2Ù6]x’® ]3Úv.뺇Ҵ¢iÊ´¨­ic°ì>l­æÛ>Æ3MßÝüãì+“´÷ó}õc ½Ò&rÖÀ’Löxé¿hÂ)m/t2GiÛÞg¤;ô£ª‡W4nG¹ñÞj7ØkмaêmêäÀš÷Žññ)èõ3dé¦ðÒâ¢OàÐŽƒ“=†Q¸*6ÉIÿqÊL?`™~Dµ <´cÒ}’pм›­¥Pc’ Óã í –¼ÛÍšj7)f™e‹ƒ÷%SCÿó16©“þm”“ü勞Àçþ·”3‰  ޏœƒpÕbe’†ÄÍi_ß!oIÔ˜P¼?ÒÃ"0hk¥ÖÅ"ãïà©4TL"“me“vG³¿.ý£!àÆ¼É«¢Î³ ©äowÐ{‚ŒÁSöˆkƒ§èÇÛǬ’Î"Q=H“ަž›¡_ÁhµÛ‹x¯§Ñ0ˆ˜D&øù46éÁü=b°ô÷ßà&‘þôlw°JòâütÐtrŒ¶$ž–Ih£ú´¥PÙÄ –è‹É[eˆIdB€g:vRÖëÙî`~_$•þce{ã7uª$?ü®ÑÇá‹°Þ9ÚMQ&¡“úð(úû"knÞЖãÝ=òñÊK1‰Llò¹¾—þôð”1V(ùslÒöŠTw“‚Iÿqhª’ü06ÉŸÁMØi°Â ©úÞH94Ñòd;’éûé¤ë–l$èþˆL¶ˆšªfØ#ÛÿÈ¥ª²åW4q‚¦vº‹_|Iÿ±„ŽUnÙC¾E!NP•úå½×ôøý˜üÔ§Übm!®)2™ó¥WØb“¨cã±™º[MlÝÐé¾bXeRu‹Ýô E«Hð.ÃÀ­y|l:É&}óFš )[idH´Ký;EÝ–aZ+õOäi7^Í‘ÉOC(@Ë&4yc+›Ð¿ƒt'MÛ‘H3¿=*ù­ÅÞNfGÇ«{ÙËô‚ÐÔ71¸OV¥Ú+.³j¯,2Æ$tRÿôõÒƒ¤Ûd²§² £8vÃŽ“4‰8WK÷6½ÒÆ$wTïä‚vhêî³êv´Kò—É·þû#ï÷Ér&±–ã}ß'›ëÇ[§E÷C©™L&[k?3Êà5Ž×3&ù³'J[Õ ›XUŒ5ºc’l‚ÞÁòGœ½ðÜ6+Çë`¶·Gxw¨—üw°” .¶hP Æ&:Êe2™LV{‚ܳI1F›L´nÌc騍ÁÚ•® –d2Ù'Jz¡«þ¥+S¦-ô¦/•_sÙ`Ýu š /wŽÒ\òîc—®º÷ÕAùù#ÐÕɬãk I4'“±IÇhš‘зs¡mˆCßRhMS¦5m­èƒE%?œIªdýÅišaß $’¶˜,ßçÃÃ2pÓ·÷?)èš¶Ó¶½ï0MðÑ W£LÒ6ñ/;þÃþˆ‹­®D CSTÀGР6öòÉÊ_!ÚAR'!‚%›£t°DÏ ‚%ÙôI1îÍhÖ•þ°¼nD5Ýï(¸ÃƤW…@ÚÍ[ƒHyh*S量w%¯–½›ÖAÜárMKVM$X—±ÈÚ¶LöX&±WŒ9¶NúÃV0[4.ý»î¾Ã¹¸}Tõi[9•L…ù´,H\Ð9xz‡üey`9…¦6MK=,ÒFukî*‰Ad²dœ|LÒT"Eó%0e½._B·‚Q‡iî:" 0hª’üm+M?ÀX¤¾H¬êr¥PíДe˜ƒY±‡%%®KôÛì_ýîŠÜ’÷ÉIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ATbc0.png0000664000175000017500000000040013657750470017621 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>‹IDATHÇíÕA €0 À<ÛçøUÓC/MZH¶ˆÝK@b¬5"'›riDZ»5^}4…=¯ZhÁz¼Š Ûa4èg«[\¾ÕÙ@Ú!APÚ›[…Òaháq=F÷§ÇÑ·‰~ä¶?‚§ÑÈC:BÔ÷?`4 f+šDiÀèPÌѺ'UyâH¿?nZÓIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SC32.png0000664000175000017500000000315713657750470017416 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> IDATxÚíQR#1 ÷þ§Ù+ì ö{¶`ŠÂ‰,Íüžèþ⃊°'AY¶ý(øý†5ØŸ7þ¾qü,ü#bÈoÈ÷n›ê——ûðGà1äø;KCß¾ð,ÌýïHÏXøx–u˜ÙïX&ßFSàÙ3x6ó²†H8úRn^GªK2â+Îeʾ1›dÏä\× Dø§i¶Ï*x£ȳrsÑ©,WŸ1¼tÄ©pt®L8z§Ä¹â“Ëó±]}Ú4Ïà\ØÀ'¨þÙd^#òÀc°ã¸P}ÆÌt„‰²·‚ûLÅv±ìÅ:þ€8>i-óuÜæÜœÙ–PóªBÍk³-€ïl^Ö1‹òÔ}ÙÅÐb5w®ØT&TŸqª³:¡äŽaþLÎßhõ8×ûÈjÛ2.úa[Ï({Âä?f¤Xí’(@Vnª×Tå›'…²W;—´íÃ4jÛZòL}¾Î|ÌµÉ çx^ó’g¤Ú¼¬+«Ñ@ä! ÛE?Ôgt®Å˸·Ò3¯î4ÑÑð}âVîíÎð@^2Ø*jÛ.*TŸÚ¹LgƒHF¼Ñ3Þî] pS‚³S[E@ºÔ5¯tت>–:×£“,‘½z†Zfe[ 5½1<ÿlv ½D¶ óh—(GÍ»›²¢òÃð³~®† DÛ拚¶n=c—b=á ÛŸ ×¼ÆüzÅLäj—ÙˆÜ,£sÅÙà\‹¥'¾\¶GS¤>ó²bxá$g¶eº} ¹´ƒeyÉvXvvT¥éÀÊyx¹yK|Y¢úsvJ„èȆ¹sÉ;¹²k–nWhè]‹¶Õ¶Q¶°§50wöKáZïß3ÝÓváat.Qiíܹ„áãoÍ;ÆTál;Û¼óÚÛ¼,Îeºþ/k/Ú¹äK˜™˜z×*\Í—fwH`[€õÕx¶ l1¯k/KfâܹäGÞn_´á4®ºy¬Ù¹„#Þèø3Ò`^;žeS™í>Ìww®¬¯Iî\™X+=?µÂ…mæõ¼dYS—ɹ®­$ŠçÀê\WÊ.‹ׇQ˜ M ¶5~ޱ-À¼v6¯çj3¯y€øtçæXn’;Wl­É*¾r•£äY·-ëµU¸âÁq÷€y}R€Ú·U»d³—µu]ãY¦Y7µÜ¹bÈxêé{8™ì»';Ãd[õϰ“yÕ7XÖÛLæ•O¬ dV~8²r '9šôÌ=^ǽ p_^h<ã8ÖX¸ŽÏ>µ–›°-yI«2¯ÅÊw–þ–fåúw¡se™8s®Åcê“åãŲwÖJ%{ºuó˜Pã£gq¯"ÎU¥ÄôHbX${Wº]®\Jýɱì"t®Z}LÇa][c[T`«%wö«.ê8—DùÚòÒ#;éGçú²òeÕ£s-.³m´ÎÔJŸqn[âoØœɼ²kþäc½²N2½Ù¡¹s d¯m]Û¡Öw5<£5„Ì·ð[Úœëq/kìŽêÓPõ1Õ¹âÓ½æ\‹d¯~sY¹íá²oÍ€m˺êÖÐù’uüÈ{}êÆnk“©Ÿ++7c]ÜÁöµïÂmØ¥5€ÝÌ«á6º3ópíÀJŒêS÷•ÇùXqœ+zVî\2O90z8¶Ð%@m¶ÕÖì¼Ø4ê±Öê#?£üJ™m±úd'Fótö&º]Ô”Û–ýôÛ³0–ðùÇIPÓxnÛúîæ5¦„¶õ¶¬ÅJr_v|ƒÐ¹²ð¹s¯{´Ýy´ÍýšÖðyõ¶i™ÍÌk –›äêÓpMÜõj—0pÝ]nZôkv®xyóê—6ç¶v7/S°LäÕ®f粚W=áBçŠ7]Ë/?Ì^T~Åvö¢òÒÚ™mµuÒÿ´ÀhÌùˆÎåjIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/GA.png0000664000175000017500000000547213657750470017235 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÅIDATxÚíin9 „sÿûÌUæ:$Œm=nUd©õ'˜1­î–êãúãÇÓÖ¿¿×ÏŸÙ?Û úç÷òÿI3ødPt †í\Ö°“¡åDfú|Ñï Ì@ïWìý(èÇ×`º!þª_{ñ÷Ÿ2;]ýû_šøkY?è´cÿÞúÅ>~NÙÀèMáýÿa²þlÛÁìÝ 3%BÒ²e]†íÚu“´V=÷hLR°4CYL‡'´ô§ÁSUúÃØÄ+ùÇá)ûÑÄU Xòg™øûä–÷ìׂµÊ$hòI}ëQ¡É'õ½ïÖ˜Ô¯ßÁ"RŸ°ƒ=ªHÞÀ…¥k¤¿÷ß˳ɘaÙó° šªRŸБ—ü2ð$+ù½Î󪡅GýñWüßPôŽqLò{<ù¤¾%ù‰ùkÉï ?xpzç²8Iƒ%kË£’þôj´ Ö¨Á㊚¸ySYHz<£,“ Ø¤Íà“¼²ä<üÀ’þ´&ö´yù-'ºŒä?IÿÁ¼Âœ—?»;“üÖNzÿÙ±ƒ1©Ÿe‘4½Þ¹h"zã”ïÒ¨r»Ã£IeQE“ÈI~z‡eð²HADai…Å(c†y—cÉfí)QݲahE 4ô{oÿgC:9/¿œäGïä C¿7Ìës¦t>ÿ‡¨Î³~1ËE’þXª„&ŒÔ·ž ýfñ>úq15´–¼†Ê×k7kØ.u67Ì:nÚã%^k“ +ÐÐcãu¢O”M;ê“âU/ØGm¥§xßEš¢ŽJ~“¸õYVò·Åì²™G^ƒaÑOtà¦ÀÅ1C½ïf4bESÐÙ+‘îÅ÷²H»x°Ä áÖÀ¯ÊzXaˆävj×t‚vÉ/P“þmᇓÂΘ֟ϵlµkTY‡ <9Ó½l2¦¨OÊH~oº“\òWƒ‹é¯:ZL'Ó˜$ ôpïWÔ@ˇg“,4Y¯Â‹ŒÁ’<ö:R?À ²,²k׆í+ï…7;ß#@Tú—ᩊ‹Qxjí2«* Æ+:AWÔƒÅø—(ûˆ³q‘k¡©ÝÀ(,Á¡éô‘x[oÐJ&£ Ò–Ýq»víR½–þÑÖCmç_4,AﮌVÖcwpTvÁÓ2É2ÉÛ?âk>’뎙¶ƒZþª“ »víz ¸Ë»>äG×»ßd˜ò.àëœèË$aù`¢\8V> -Ÿà_CI]jh…ì.ˆ(_Ó$›"j]ãI¶òiÊ×$zË¥ÊËÈ–kȼȔ É]É—­³Lá_Ô`ÒÉœh™¾†ŠP Ü] O\Ã("K¾•†l3Ùv.ò qd[ É6e’ik%ßL¾µš|sº“ÁBíý0R_¾ þ,åXD¦I§u…Ép6Ûmã'khPõÈöB74ÛöžO²ƒ²£èД^‘…&÷–gÇX¶0þ£6@5“6u²aÍkCY,hV,;)v\ÈL¼’5¬ K2ƒdÆÁe8‚Âu×ÃÂ×@Ô5l2þÈåÆ X¾`Dµøï Ƥ×$àù˜äG3Iú‘Ÿ\hšKË1‹Eª°‹v¢iáö#¥A“åÒ¸&©L¦›ò&‘-£,›Ün¨-§D˜Ä¸aC­—9*X-Ÿvb'_§£D½ú–:*DœbÒß~”ð>&ùQÓÉË;™u`Z@_.6ð¶Æh/¾·^bÉÞ1¸äG3Ma³wnšÚàšy&±Â´Ë Q…(ôoH`ŸÌÊžp«ÎsúFKÆ£Õ´´´$;¸¡hÉ3Ô[q}ÙqêçÖkMáï;zDÖèÇÔM´H:ü`³H1oåÕ‡Y];‡$:dl ¡]_/‹,ƒ<žMQ@.°“'Ü&ù?þ´ŽŸöc%Ë&ms4—úÕyë´´ô :,A÷¨FçÓ¡)Ë$ÑGNƒ&KI{¡iŒê,°ÿ|ðÓutî{9=5Ñï+,«Ádç³G}5í½~½_n&¢—IV°oüDšÚ <¼c%ýÛÙ$;”‚†ˆ:…¼ª%m`´D2+«àñ‘ª‚†1 J½ &À¸?†ª¢öæŽCìdB± tìYC½?À‚&š‹¤)Om°u&í˜ ?ìz·ÀNDyÏ;ÚW=VN7œMP3¯éŠúZÉŸ›ŒKþhI›ÑæKk +€3î43tìkŽ;Õa?érµèÁ}ºúN¢!-ª]òÊix(ñ°rr×.õ••þÖ¹G?ÿ¢Þ,ZÌè "{_#ù¯c’q—IÞžIÞ瘑?¨¯¹êäÅ®]»žî²®yçÑ5î79¦¼ x™d ¼%&L” ÇÊ´QRŸžý,¹ •jaiWÏG"†oˆ-—"*›d+Ÿ¦,›è-Ÿ*/[lðør zÁ Øá%C×]YôXÙZôã/üó|º)ÆÚº|ò1RŠ"å»Qƒ’®GÈõz“i!ÛJC¶‰|;Ù†8ò-…Þ¶)S¹­ÕuÁäZ«e½ûíÍé¬wr¼½_Vê·ïœWê˲ˆWÚ 9û^ÚË3ȲÈuáˆhXbÌ0¹†Ù²-Çe›¶?Ö0úàÖè{¦lp&jçhÿXSÕÒã?¼ZT¢)¥á*Q/¿w,fÛ¬œ¬ä—™€:>¯éë´HÃ,å,7ŠË2TžE„µõ2ÈÃE.eJv°¨ÜhVùá¶²ãå,_7¢úº!ßãcÒ³’¿mÐ|Õ‹å |[06Ðû‘y“Ê,½˜>†NÇ‚7O°AȾVÐr,2¸S¹\‰ÿàÀÍå,"?S–Ièl‚’þ4ÉRÖpxB‡#à;ÉÞ¹rDz.h‚ÁkÇÊ'ëØð/0hªÄÞ¬²Ô^QYö(Oþ³¼ûQ&ñ73 ú½îóîÌéµ^)XØAHú¿†&9ÙpJí,K<’ÆÙ$zWEÌ0V>Œô— GÐ dÁÒuÐ3Ôú“þQTϹ¨ËÃ+„Ë^¬ì£—úŸõ! –¢²Ê«°íš ÙÇ ÈÀìL{Ù)P€ch%þ.êú‹“B»WúŒÒIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CA16.png0000664000175000017500000000225313657750470017372 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>HIDATxÚíQnã0 D{ÿûìUz…=Fö#XÔHLš‡3rJ~Eƒ‰dYz‘ê×ׄßh”ücXþ]ò¯`ùˆ¤%ÏÇÛ kk¼Ý-mŒíÉÇ#ú6ûŸZleVÒúÇãìû_uïù§î#|ð»úÿÏPáx„׆ lÊO 53—µ:‘V*¶?LœÏðÛ hñqªt5ì[táï$ŠÝ{MïqN8a¼²GzŠËw`+qDòLàùh– 'ò}[oeJ¡ ‹ kÐîóÉ‹ú¼f›E#íÈ?€ü;‡Û×â|=?`P“Ëç­6á#kÂ$}³ma ýHúKýûFÆúÍ…dœ.ÀopÜH#­EqɈØiíÓägQ G ¹ SNL|2ÜËÏ¿¢üÏÇéðšCJžWÖlˆ»|‰vû”N?éâøOwñI/Å»½8ª#Õ²“-…g¸ãmp¸ÓL 2Йõvb➌hÏSe÷Ó€åÁ_æD„F¬é'5éÆyìïm!,èêWËë´Å211ñ)@/;†—oÚèÛTñÆœjEÈÌÝD5ض°©&ê&¶ñFyuüI5q‡ä÷À0;€(/HÇÈ& ¤[.K¹©$A^¶\ZUÄý'’ù‹1cñ\>ž³·:çmRÉ‚ÞWiOŒÈ“$-aj ¬ óiο˘’;$áÊŽ,x#ZùìØZZvìºu›†$ܲüù /˜|}fÔQ²·µ‚;¤2à Ÿ©¥Þ¤âvò421 ×DaÂPD—͈¯×Y³Üî),»4JvM–¿: î"“Y-$ê˜ þÈ>õÇLµ‰qµZâƒÂ1ôÓõ‰Ì…AŸk;øER|Ͼ(ôx73Y‚„ó³tÙÏõW'0eV\­RÇò¨·Ë‰oÕ£âŽìVc+ór¼­‰æg/c’$Yø\’pËÍšT@±Ûâ¶#˜ ågoe³ÀÒ¸“e®DB¡ÏVùµäQv6W vz^©x •Qz¦51¿t½ÈÍ,¦ÉÛšøÝV‰ÂÎë±›¤®ßìMË [¦I€°¿_ÚiåG2\ÂÙlñHçà'"œèœ·µT©¹ÓÖ:3.ù¶S8 311Qž¹®øË»Ž'}»ÏZît êµL%ô‰ @6ÁL `ØÛH¸±«ƒKö:‰'‰‰‰±Êî·i“mSs™!6_¶°›H›ÌR›¨2ÛøF9ñh òU6¹yrb"5L>ñÿ* ’é[$ PSnŽÂÔ$£-Òª¨‰dq®hIëÛe¥…Åé‘‚„Pk¬J2!Ä€'E»q+?¼dP{IЬGVW¾E¡©´l raÅt>5–"üÜû–ˆÊŠbeeÀ²Âg‹7¥Þ¯Ââv9¶Y&þÃ(5)IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CABC32.png0000664000175000017500000000417113657750470017576 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚíQŽ+ DgÙo9YÎÛU2ù¸ÒŲ¡]Ч~FŠrçÖÝ]§óõu»~}ëëë÷ïÿ¿õóççß匵µŒýÕÏŸmF1xýõ1òß·~þüü{¹¡«E­³>—®Ï›5h}n»ÁOËŒÇ+78Ž9Ëàçg›A¯‹Û Zu1´Üõ9 –\½á–ݨÑëeŰ6#×° ðä%êãÙ¤ÌàøD°˜dd“²–[üeZ5ØMÇ3I™Áh×¶1 ,BÔï6XÝòeÇ0C^>” ¬V²†M<£òðäu± ›Œ†¶ó]ÖÕÜölµu9“ŒƒÞ‹üå¡!:ý`%l&‘aId ¶Õ§WQÿÚ–c©±I{º™e”ãØxòؤÍ`ôk9ÀG™Äƒ¦2ƒVä/[Q)‡¦YÌ,Ûï] m‹Ê¢¿¸œE²Æ ‰H‚Aú÷#QÎзdVÅE¡ x²îƒ–1kÙ^úµžã|‰7¡“Þ‚³LROVä÷¢ÿØBé]jA’÷.¦=XƬ‹&-TDÑØµÖçebXÛ"?Q!ô2h’§Ù;ï…'o¹Ê,›”=â<ªK7h­ãäUI¶-×ó"šÒgœ¢L2 Mi-7ôºØƒ¥íoVóbù§§W{: Ql !„Ú£è3x5$”¥˜ÕwÒmyÐ ¬eÕ–ŸFþíÐ$oP¾‹Û/’kn3!„ÐK¢¿üÒös¶¥g?·-ÕÈ¿D—Ÿ†ðº¨}"g6ú§CÓ5“‰mÓ±»,!„XÞkOÎÇFýãàJ~¬–aùÍmÛ5ŽÛð"·e(û~¸}ÓÕªáömk«,"w¾1Єº=úÃ(¯kY¹‚8å%…Ž)Ê$[Ö*:øÛ ƒ­&g‹EÊ«Dyq:Ϩ\y¿,i¯./[b²ì] BFÁè%FË8æèÙÃ+¢‘ß3Ú6øåPYízÙó;Ûñ‰þöcfYDþ^ù&™ÃÌ<ÃUDôÇ ºÑcŽ–=`9j´ýˆêU6i;#Bö˜ô(DÉÁS”I¬ä\V=Ï{à ·Òh6ê˳°ôšÚ F_… ô:F!úguU{¢>Æ µd^†M¬|×fЛ†°Z´ŒI¢l"3&£Û É“méel‘q~ă¦vñ&pÚ×jKY "Km•Ÿ¶,Q]Ï(«{¢ÿñ½m¼rL"Ç&Þ„Žlä—1èá§ “È,…²ˆÅ$í±Jn«87UÛ0ó˜2^Ë’ŒQwô—y?Hô‡Mª#¿—噤}Æé&iG#MV¢¶XD.VÉ͇À"×”ƒQ£lpAªÁUÞ ð›T1I[pü0IVäo¿oÊÓ‹7?Rvƒ–Ÿ9vïº|Ô?žEd4 ׋}$ÀS×Ðe+úGOÙa&ñvE´oÊBSÛn1hÃB4µl7h-C‘e‘¶B_O£>7Ñíu±‹È#†E`UF¡þƪǬÇ&m-¿ºm£Ì˜ÕEí6ùÛ't¢Æ¶·˜WyǪK]Ö¥^Ìj›ÝdÚawÔ—5(»Ê«‚GôGx˜¸±ÙSÈË[Ìš/™=ïdÛU¹ZѶ|Á7‘“nÌ;@> KéÐ4õË»2ZÃÈÛ?’nÌ¢7òGÜ5Q_®|³uîˆÌ£ ö@F3$kL¶¥d™Äºd gï>ý­žÏ> Má±-tm±ôêÊÑ•æQ&I_ý6õ½é‡mL²zþúö9¹c£¾üJ#¦BÀÓ%Œb=»å µwaùqèOŸ½«‹ÌÒµW:Òc’íW™dv,›Ÿ›]ÈeogNø*÷Œ=e’´ÛÍjÔ/Û»tláW"?B!-$ØŽ^|*_»/ýÑ-’Þr”1ЦŽæA/ò§3ÉìËóYƒé-5èuqÚØ›}»Ýž½Úӧ¢LR^€ÈBÕ(ú žM+á)ëôÜô\8[Æ4Ê$ÛkvälXÞ |Ë_$ÇÜfB!¢ÿ/©#d^`Ê¿–‰.? 1ÛÕåL2ùÛ¦Âä'g ”OÇf XB!"¿hä?vËdÛBoù¥òò› fÇ`ùv Ϡ̆ë £ {û–¡§Ì!¿¡O>Ê_Oò†¡9„ÐÃgs{²n3,_ÎE¾ Îq%…d‹2É–µZ½½”{ŸÊK«Í~¹âtÇM+À ¯oY` ½&úË’-9.ýeËÞ{p€ÌÑ Q6i?¼Â‹üíÇ<ýCÊP‰~¹#hdñ±ŒÊƒt<‹`Ah1~É,z\ñv¹èÁ¶ *wDµ—”eù^ýÊ"~ôá/sм7ý s¦õ£8e]nÍDs`[—Ë[XXB§#@»¡è–J¹èßÎ(×Eÿöµ\Ñ.nOΓŒÛnسW¯\äocë‹¢,RP½È?þ¿ö¨ïIñ®Þö1)lŸ~°tŒQäZ&9ŽMÚÅ[ð›d”{íÇ$rl"—£L"¯¢o÷e ʲˆ\WG™¹Þ`Ù ûXz½þÜèŸ6÷IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SB.png0000664000175000017500000000054313657750470017244 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>îIDATHÇÝVÁ Ã0ôæY©+tƒŽÐ²•@|ι8­Ô”’1ç3Ìÿ*³§ ×¹áÜ\¸]:ä¨Ñïîb–šÙŸ­Ka©ýÜÏ\ð¢è'‰b„ˆT#˜x±C?IS'ÑÔ* ñÚÓq• úÏ‘ŽÔË'U­6$4ƶíûQÅz·²úëB‰ñöûfÿE‚˜¦»}°Š{}‚?›âj?:[$Š äÁÊSÛm3Ì¿ Ú÷ð-±ˆª>Èp–ü’ÔWÆìì"e‚ `~[‘úþ°ð™¡ä Þ¯W ª±íô\ø­õòò’]ht¦yŠIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DD.png0000664000175000017500000000376113657750470017234 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>|IDATxÚíQŽ9 DsÿûìUö {Œ;A0HÛ2IYb•ܯ~Œ˜–»ÛõDŠüñ¡×ú÷K?Ž^mûçK߯²@Gý÷¥ïWY Q`Q ¬ ý5hÿ~ËÇ7Žýݶ»þÿõÌþÝ–5ü_×7­à÷¿ÿ]{€Ù×öGרøZk pöZjPÛˆ‚MÄ|¡ 4É-ÿ,›ØÂ“ü+Ï2I[`W;e{÷V™¤›žψI )Ç"Ñ ·­œ‹D¼{,‹4Ò\÷#@„ÐË»Õ~ Øf¯zdXmò%^íò%³lb—/iÿгiˆxS½ÉQWu»åXDÆ$6,Y}9“D+0y{«‹À !³»:Ë&r&ÉWÙÊÙæK¢ÛV0²ü#ìlûª³–_Ðymù…LòÜê_W.b’ömvŶÁR6í`P«5ûÁl-¿ýÊáZB@’õ˜ˆMlŠÍ쬿M¾$ò‡Q€¯ÉZbtímXÁ×–?b’mwsÕê˘dtsU»Í1‰]à°V!„ö>í:òCÙ£b³6&ÉZÿ”÷Ç <7Bhzmù#&YMÕ@ªLÒ†Y&i¿‹¯VßÐ7?ßQ¸¾¶µ-8–E !„ÐѰd³o˜µþ§"r»ýÛûq=š¹4Är6™="nÓw¡Ê$m‡°F»úUÙ~“Ì2‰¼4ÔŽEwÄÖß6ƒ„BèfŒÒþÆY&Y踢¼f Ú kÖ×ɫಖ¿=¡Y~yèlI”¼ ô,‹´o\ïr“Ä„Bi~ƒs&AæbªÖ߯Úîò “´QÝWlw“û˜A!„ngýÍ—o`Vý`ÖÍ,w5ö›èöiˆÑ Ï$ÛÊóŽM&^hOǪ¶JBÝÏúÛˬL9kååLb[*Ìaùqc¼ØÊ>^䇮ª7O¨Ý`©c†!„ЧZÿƒ=,a€J›;6±o)$oÊt`[+³Æ`ù„šÕ§9]õ–·÷ËhË$¶-&B讌›T]Œíà€êè…öqp†Ã+LÇDf™¤a€Jí«Ž ©9i94eyÙ.@ÛARÑc&A}ºõ‡MŽc“c,ÛŽ¨ÎZ~£z¶cÒç¾rÙu5ýp5¬íÆõ«(£º,‹Ø ·mõ™„ÐYwíŠõÈÝØXþ|ž¤òž[ÿlÁÜòGLÒO³”װޝ-¨ÜQGF•üÈ,‹SLf3éÅ®;Àèn…I‚Q>%Àù72±þcCÚlù³þOÎ$U'ÝÎ&×ÿؤí„Îìs“Ø—¡dObÛ³ˆŒI¢åùù ÑY±ËPT†[{6‘V;6©.0c“ǯVŒŸ“´]ƒÙ4„ šŽq1òÙˆ«´-‹È8v+h Â"ÝÝúà»ÞžMd•Hù_ÑA˜|AÏæG_]\Ã%>ëd”išs3í™&»½é¨ÂˆZ­UÐd×”Ø.G‹ £˜™Ï«Zÿ¬½jXù“Èà©Ê&r&‰ØDÖz­^ý¶)ÀlYž,‘ù‘®mkµlϲÛ6%¶9õ…ºhË&¯ÏÛ8b’v6©„¶¹V¯vküÛÝ\l5/nc’ÙcºÛ{ÿŽ$kõÛ É®±}_­ìWmÓÆêØ)!Äc6Yë³Lb¸M€ÕÖ»Ë.‰ê¡“,g“ê̇öDΪVºmÐT ð¾°”e»–º”D!„ÐÇ0ŠmzÂ,°xNI“«y÷Úk/ì‰Îº·™‰ìŽjv¾{ôÁ—[þ*“l‡¦ù’¨×sà—9èj`2&9fÔ mûªöB½óK$g’åMìøv;“ÌŽ=YþefKãße’í–žIÞÜ™e‘|"ç͈UjÛËò²,Ò¾Õ1{7#„B¯çî¥ý§ñÊ$m Uæ`»£~·â¨I"GÝM³–;4­®8Ú`;g·D–­p5ýðøØ¹ß.B!t+U{¶|Û]LÖÊý Ì°®¶üöL"Ï4Ùp±ü&9æ1ƒBÝÜúÛ&ßÀ´ß>fÝ> a›È‰•§Â"«o“LÌJ–Ž]:°„Bè@±heSèm_*oØ ¨ü¸Æ1^ìŽ ­b ›æt6ÇÖf·8ØC!ôü·Ø®KŠ];Û†8Ç·’7e]{öm­ìƒEwq–Eì‡ßʘäÀö~‡%pŽa` !ôiLb;ÌÖ®í½ýà€cFS3¼ÂnüGöî• P©J6‚¦ ä6C|ƒt\1 ‚º‡õ· Ìn¸­íxàc,Û¨>fȷݘôÙÀÛÍÏ2‰ šF×”–"«_e’†@a‘›±°„ÐiLbW*•µ[òÍtûR);69._á§|²K5©h·‰>þ€"«e94e«Ù„¦×,%pdД½ÚÄâÃ"ÝIìꥳå)vÖ_f\«ùYB':_bÇ&Õî¶w³¼nÆfW´#i÷U‘AS–I?Ps€£KÀ–l7ù´H¿D¥›­Žór—IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/GA32.png0000664000175000017500000000513013657750470017371 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> õIDATxÚíQ’ä8Dûþ÷Ù«Ìuj?:&¦ºep i»¤‰‰ÙÂ’-ñ”ôõuåö'ØÈÆþá!Vc/ ­‘ì+nr5îwŤeþ>†+ï8iØÿªýŠ6Áü‡ ™y½þý‰Gôw Ó¯—õsk/¿ÿÆzÄï_ FV(ÿß$ ×¹Çøº4\w3Ã,Gs”»=¹ Ñâ"Û™+ óuæ*!_€È $yùèÓŽ|ø‡†ù¨úàÌ•þª=·èÿtq9(s…`σk`)°çAÿ¡'¾J@O±ÇLŸ&3¼1¯ü漿‘‘W£I|6“a/ =™M†>CÈ'@_v‰š ø÷ÿÂé}h¨ÏÑÇŸN äó ÇBÊÂrŒ>¾Ðäÿt ¯8À0ÏqÖ—ÒÈC´ET»-mmÀã¯g1N^ä‡X]¡åKBS€c€x‘UK|BŸ€ZO”QÕï÷iÏÑÇê·ÿßNÏ¡§­ì÷‘›u-¼ö"¼Ñ¸ª#Ç™È^„Ì\£èC“Öêñ´%ÞÍ_cäåoÉ8[÷:d¶ÄyŒÀüoíçÝ|“̆ª>£èSé÷¡ùß&}}ƒ&³½ÿâq­G´68O, xiØË@5f´UÌüvç˜oôÈgޡĢÚ'ÉiŸÚF™ËZ›ÈÀ¸DXŸëÈW /úž*LJ_y%zïÁJTõ4ëÈÓAЧÎ\'¾G²¢‰Ÿ´ù‘Tr+¢Zˆ«ÏÍûoÑ Ô/¨4uǧ­‡a9†D:FÞðOi¦Ä4Ú¿Ýn!³µ Ï@PÙ9‘…¦•FpÃOü>GñHb„C ëã“W#¬†‡ÐÇ;ªdŒ”Ð'*¨¾p$˜×± Ì…#~i‰Fh‚y-°g­hîa¥‘ ÝVµvó¿yZóŸKi“Gæ7!F¾(¨"È×âZbÔ%4‚@Et¢HkÿÅ †×¶.{-†Ì+ÁÞúqùi+„àW„³Èg.Gc·Ýî«Ñ’xFžÁˆôD«”QáÆUqŽÈ·™ë9†eC-þ¸.1È ˆlÉ”9‰Ýv“èÀ²} #Û´]n›:´1—I—_6s5 µLD•eB¹ìh@vrÙãŸÝ†1Htn(TGõÖ"Úœ Ç Œ†ÜÈ‚ŒaU²@²¡Ð9Y° ,†>ÄøçèSa®«_rp<%®u@•žÆëKeWwXƒ|¹ãÌ¡êûóüµ%·F ¨]¥ëÒ„ĉ®ÄÈ~ Š>M×¢èC¿èñXï Û^æYíe }*œE V_ÛaŒAâà1ñ%€›¼6ø¥È«ò¤Eòò">ƒK†£² ­ÇHø:‘Lè·…>-ȇ/œ„µÌzÒ(ü¶x'Ë–oêy™dô~¥ZIZ“a^=„vŽ_±›ikcÐnƒ¨FVZÅ6€¢sš@qÙ…Úc\­'Cn ìù†/–„ø=\ë£rà…€_;ô`¯=2Ú*¾ÂEŽZÃ.1smòÚZÕ • #ñã-È‡ÏæFäˆÏôñU°€aY|æ"Ÿ%#cd W.WóaØC¾^š÷í8Þ Ÿ'Ö•ôb¸h†Y:×s5†íoæÚôTòÊñWÒ$PÕ2ÈxT—ŸF \Aâ³ZVaØ‹nJ­˜¯ò!IT¸K÷•uØó×Ð×zÄ–õ‘ `ozÄ WÉ Š“$w°Ï‰í §0?‚¼Z¡'&:Â^»ùÕ·DsKs4ªv©|©ÊßÄ&cÚ:rO›î+71É—Þø¹‡½¤˜Xá,B(ÕèáþÖ×ïüþ¹Š—c®'sÖg PœC?‚ôÔnþ}Õm'/ÿ-¶˜·Rýbž%óôIš÷£ÅW7€‹?J¥ Mþ»?À zñ+äÓ#ÃAÙ«M6mOŽëJOò„üBÕ¸ÈwEäV±¡¢«øþqsÖ“ ÃШ؆–š&£Ï÷ŸÖk™B8y‘ Dt*AO´Š<¡ß–?®HO4©VMƒ=œ¹a'ÀžÅ>ì5R¦ú'—]DÍ#µêÃǸ¹J ?1/Ÿ(¨4죚®rôpg´ö©Ï\_»}€òu CMÚϱ±ÆÈÄwó-ä…—…¢ÉMȶ ¹A¦´Båœ`IáŠRG’¹r)W©ŒpÔ…ß Ô{É÷Í*÷…\Y2ïÿ{Ãm•®Q‹î*˜‡ë=½éšv['üüYKøò‘)´®S%òÊÕ§È…Ð×¼Úщä"FRçže8'­µ .æ¿mdjEKÃ#‘Åd]>WWpÑÜÛð¡mÎal÷¿Û}@ÖÜ¥Í`d‡HÈ1ݧ7·J‹ÑçÌÕnx3—œ¹î6d ˆxÉ”9‰Ýv“Ш±ö-ŒlÓ&Þ¦ŽnÌeRÄf®1W‹á!uT6– åâ£ñaÈåŽvÆ ±ÜÔ^pdô¨^œ Ç ÈBnAF· «¢’UP¾:'´–ŽÆðHäskõb]¡“~¢Í9gùè‘0gä!6à5aШèÔž !HI$áÈÒŽ‰V²Ô²'Ó…Ó/‘09š"Šë=-I±ÖûnOÆ¡§¥¯>ôh˱²Ž¿AGÆYO§-A¢‚€¼F ‘J¯ŠÍÜÀ$­ P½„’]í¨Ú”ë+¡Bh½Vd L–oØ* †çC…ÁÕ¹óˆV‰ GŸ¡z¿íÕöÖËFK+ËJZæe´%!‘ÏTµžxè'(¸;ZbXVTYPFZV8û¥Â/Q½½<Ž>äøÑ½!¹ä?¾·\ràO‰Ækꥭá«;Žûý)¸#Õ.F[O)ù?b%¸JKvy˜øº´Ñ ânv%á@}¯=Ä òEÈâ‡V¸N¨¥÷ Ìu–´“º¿}èúRá…­ìÒÖ'‰K»H…ðÚÉ Y"Ȩ#A±-WƳhHt"®cÞ%`/iÞj´*:_‘Í‹á½!>˜íÐó˜‡8AŸFìñH™ÇåE{R¥ ã+6áM³ôÓlãÎCÚÿ¥Ó¿ÜçIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/ASBC32.png0000664000175000017500000000452013657750470017614 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÛIDATxÚí][Ž9 ›cç8{œ½Uvöc€ E”­UMþ L¦Ùv•MZ–ôõ% ãŸo|}ýþmý'öï7þö³¨EìüùsŒ¨¾öüõ??èù¶ZÄžŸ'}Ä~>àççÏ¿?§Øûýr‚Ïy´~¯œ ÷xSØNAÔ¿ž 7uè—-Ô‚ orIÈÓ…4¦ÉRÖ2OhZ’ß{öÚzõ$åÏÜ©'i3M§j†Þ“”ŒŽ\»”ùX©OCÚ±)®6[‚Ðe Ɖ½YB…jAô”ž^êGGNÊÓzyAš¥qOõ&cD-¡Úر„ë©7)'èIþ6ÓäIþ1óä=Ô–ºi7KQùeø1Ï›¤™&tJ¬·Ôú"åŠÚ TQ—/ÌÖ³–å«Ë® ;М¬®ó"ò ‚´eÒ'´o}QoRNÔ›º¨7)#†^‘*è SÑ~Ù %æy+ ÚF ä\O%*Í=]X¸AÿPT¸>¿xºêñÜ[{"Û‹´í4#V½^Š˜5õ˜‚ðvÓ4'‰z“vO‚¦q”t2fž,—ç]j—ü^ §MFYáš³iëÌ™¦X–iŸúh„‰Î‹Ð˜¥u82IÂÇz“Óû3m# Áš-ýǦx½ä÷Ò7ÖLuy6ÙíT·´$?Èi3M^|dìªè©¬ã—ɲ½-Á1/‚>‹tDžDù9®å{±¼‰¼‰¦xû£aˆuž¤œ`VÑ¥¶Ó.š²U¯—ú"¸î”¶X€ñ—U5í_$KÊ<É›T#ˆfì¬ó$å=4îI<cɬ6‚Yq‘òzí(Z©OGðë*“É‹ò&—––X´À,²NéÓRC´Ò¿]aÓ›&4o-‘¾Þ¡aˆÛU ýe¡ äDóFh=I[­£¬Ž-å;ÉÚ°AÏ¨ÓÆG¤Œy”éÍ¿êm~M`glJÛ Fk µ·0ôÂh=®ô)Ú€~ÌÕY~Ünzª&j7ÓkÁE¥~{ƒ¨PµêsµK}Ô‹´™&´θԧ‹‹¨ž– íÕt…ö­^O¬ÝÅô/ÉšefÍB-‚ ={òØñÝ&ýðºCtú0] 'J´=†.+ãÁÄè[·Ö‹¬Ýd–AŠ^º€îš2íEoú«òôÉèHŽ¥kü`M mÊЭÑ.OºB¥>}ÚÚk<È:âô„åæAp¤?]oXºr.ôqÖ•¢+ÊD_ÖÊ"JS,jÇJ«y’Ýû½öâtôåýNò¶‰¯5OôDåAåm¤[Fh‹¶¯){Oß8€¶õÂm󊱎4í?Ð?<Þ@57ã-hÖ4ñ¡mƒtûìŒwá¥kŵރÐ¥½ø(Ý ›6AÓÜ–¾=ðºËt-ªé›|G_šö6é¨Âo4ïé¹Så\æê¬ö8m>ÙËu·ì§g¶ÊŽã輈Gt,²t:åã [—ÆÝ £Ù4ҟΛœžö\Ô›´ECccR5MíÐ0D›iò®Ý¡ º]꟦†—ûä[JO°|ªÑ°ÃkF²ÝÕµ‡¾n‰ÊƒïIèØIDATHÇÝ–]!„9vÓãì­ZÛ,/“|ênRË ‰Â8"?Fü«M"^_éé´#œG“Þ¾uÈT«ß³Ég=5í+>­[¡ƒœ=ù%½¨úY¢!"€jO çë©]$Gñ† ÒÓT ª?ÙÙ”ªVZέS²úë† µÊ]GÔÔ›“íƒUÜý þìWûÑj‘8‚–•?5Új›!ÿÑaßÓȸˆR$œé‰Bvv“%XÍ­ÙY|Õ§$hô¸‘äºoÛò¿ð®ëöòšeæ²”Dw[IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CABC16.png0000664000175000017500000000227213657750470017600 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>EIDATxÚí][ŽÜ0 ›c÷8=Noµ~%('–D{ÈŸƒÍ†ð+¤ɯ×éøýÆëõóóçÏëõ»±v¢ˆØ?|^ÛˆšàñcpÄEäן×ë÷rBÔ¢¨ÅÐ}Ëq±Y‚è¾t‚WËŒÇ+'8Ž9Dðº¶d]ÜFM4Ú fÝg‚åï.¸e µa9&CˆéD9኶M#*Gp¶‹Ó ŽoæM˜â.{£Ù\Ö•QÉ_þ.=“üåj&*õ‘².#µ›e^„=µ˜ Á6ýtÖ•IüãÊ·œÍ‘¡n¢d]²íÄ¢WyU¾î!b#Á4+€Þ£7aæiy F= 2OiîI}$ù‘iZÞ¥È$¡–­w³öp–‹ˆè?»Ý/#¿Ú"KVÒ_KÌÒÞ0 QWW®zV™¨4Âhïú®Ë[Nýsu]úGHò3oò8DvWÇ1OÂLÓò1ÈBDÊ ².gËN›üj—eãØÎò2%-KÈÒÞ0 ÃØìå½F³&ÒäÖ]ýWîêÑÙ˜Ýc¢QÉ5MËcwò廸}’³Ì†aÞú8dó(JX>°-OXf X~½- ±] G.¶z=L&Þ%ÜŽÅ65Aìæ Ã8Ý ˜èñDË>ôÞæSyÙdFT&]•Kx¹Ûõå)CQ¢íIWÑÁßž¶6ëAÚÿîš$97'“|Ê[¨_o¬¬Wu• "FÔ^‡•+o*_”I¶¬3QòÕ”Q—ËÔ¥–)N‡ WÞ)hW™_e’Ú]›½r!/Ô²–òF·Ò–yÛKPîàù£ä¯`’¿ýø¨ý,'( ’ú2‡øD…ªâ2Á¯ƒQ¢ÜØ TÃåýº–É ×òHúG³"dΊh#†ZLö¬ˆ¨ij‹‚ʘ¦QêGà éÑ/ó"éë¨Ûa·Ib“"ÚÅrD.ÓÆÞ𙲉2±ÿK™1Í’˜ÍOI›•,+¢}h0bi€%׳̜´ˆS/Èn–ueô;YN ™#–RþŠÛNâËîæ³R²§¨YH†Í”˜™r9üYB2'´­Ùí´è·\iJš%FKî¦KýQI¯"DÇîì^4ó"Ì4MÏò¬:YË—›» º,&·Í;ÑÃ0 ÃØÑW\öAÓbá®(S1L¦Eœ¢‚5*ù—{y‚ò],?I¶Yf Ã0 ãðÍ#ùí7Ù Lù-`ùMôÙ1X†`e9è³?`”Pô÷6lç1¶9`*m=ìÆaT ZB²ŸˆÊd+_ e»½e>•Jÿöd¦¬ÛÓ5Vï@”å¼o“2$›tÅü¬S%MÔæÈøÈ×—–+![J㸂ˆrå\äŽÖ’+)]fdrÙåËZÉ“/­†¤>³©m]-[Þïéƒä –­“6I6GñBçPë¾ËàIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DD32.png0000664000175000017500000000347613657750470017404 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk>ÛIDATxÚíaŽÜ: ƒ÷þ÷éUz…cŠbQÀ³Ž%I'Cþz¯XŒâÄ3þBËÒ×—µª~"…ü5~ùg0|2 ÿËž±lV¿^Yøü/F9þËøŒó¿¼<æ×küÐyÄÿÿûß_B炞ŸåVˆÖÀõ'ù¶,“<ؼ*“`Ž>uò ü¶çÌÕr\èó¹Â\Ü{_Þ#æj„€Œ¶¢;Ñ ›m} ÌõzƱFÌwó û¨¹ÅDØO¬_¢}dcµ«eYÏs5Ìí ô™+7šhœQñ¹L[†˲}³©6<Õ(mp’L§ÆÜ®ïÅàç’…½mô‰˜ëìUÂT˜«osæ‚ÌêzÈ´‘ŒD"Ú†´,Ë‚lœ€Úsœ2ï§í$ãûbPµ›.‘W=etf¢Â\͉ƒ³ÓS¡­¶ÉUg.ø&=•¶Þß*À$ðî,˲$üù蜹N†ßÊgÙ_ ¯²ð=Õ} 6[„>ðBùæ¼PG¶ /2ãl2WüÕ²,˲VöŸ”“d]ªi=¸>‹2W3eRo5ur-ôu²,˲îòšJz1[2óEf7É ¶:s5lã.d¢Ž ¶1î5Dz,K@2Ó1r¸‡¤Üˆ“ŒàiUâD2Aê\þE‚' V¦[žZìO|„Ò²¬;<ü¦òDä%;Z?L·ÈñAâɽ·‡}èy¡Øý9?œ0—਷eYw毧“—¬ P¥„¤l%¹h½LVÝïÛ¿ùÐRhûì!ku kî@-ð—l^Ñ,ëdòu ¡Î” ÏчV¨SP¾zÛˆ¬äÿBÐ#kë hd}§I˜·à²aYO˜ÉÂð”±ðvi²qgèCmX'ÎÆàÇLˆû·¶;\ µ/%5l­ÐÉZ›/Å+¶eþZ/ð‘£ÐVúäk0œ¹*ì!¯ñÿ#òjv6ë)î@æ’mùäùã2Ú2W˜Ô¸Xd·N[T‡ËÛ™– yÁA€J^µÄ""yQ]¾ˆ¹šŸqn7aO¼.Á+ ^amÁ­5êˆeÏØ´e€ž¸¾ÈËÈ ¸ë¶÷ûK-ÛÛêj <H¼Ã(êž"¨=ûí«}Ò~"•¶¢ÛNÍU4mYæ¯O"/HàÊRØxo2æ"_…¼àÌ‘ðèhm7õrà|h°}RöVÝá¢î' 2æ%)HÙˆ–eçëÉäµqM <3„¼ŽvFÞ•qYÜú=lpF+š™«žÔÜVbæ¬zšaZŒBv>1¿á¤#ƒ ³,Ëäu'òÊ}.êø©%ñgæjf’JºÜÌ\—È«R b°+ÍÐ {•ÀwƼœ¹¨¼¹gYæ¯'PÄq•.:sO²áeÒCúýD.@^™>ºôKèSa®6Ø;²¹w¡ßUžÃ%°ÖÄÅG‡m:Y–E3b±cN^TZnc®z©÷}N†¯wQ¬0Wúa®ƒ¯6uÚÚ3ؾgœ«ÙÀÍi òíuGE˲,0Vß!¶Úlç†æöÒõ=6sEÒ {uôiƒ½+{l s¼­¿Ô4tÙÌ™ ^¬Á?”–eY«©r‚m¶ ëR¾Ã×c \AsÁ=WÃ'—øëdY–eÝå5•úb.³"Äæ‹Ìnl2K1‚’‰š hŸ¹cžeY¦-n:† E–r#K2ÊÃÃӪĉdÔÔ¹s$E:KJ¬¿°|Ò{¥eYw Òp´FQKêZ-w´ ~˜n~º²ãƒÔ“ѬÎiKVlÈ ‹^ÀZs–1ϲîf:ÁCRËëÈ ‰‹„‹‹FQËdUL'Ha°Š€¥Ð*ÈN*þ&/w·ÄF¦9˲îh:QC †QËH/T8›Z*\\Z¾~)¤nGsaOÞä€ÞÖÁ´õ™ý-«}y ÍjAó0Y»4qƒ8±Û%h˜»Ø«0Ä`ËÇAjm)hæ™Ó¼}iÄ\„†­RÚòæ¥eA–jŠU´Sˆ· h³E¹]Tòªœ#ÌmøºErzæqÌ´Y­+´„½œ¹Þ/x~$Ìð‰]­›ê/.œ¯¦+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/AT16.png0000664000175000017500000000162513657750470017415 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>2IDATxÚíQn1 D¹7×à¾m%~è.IlÏó†™T¡³ q&ã±{»ñó‡OI¸ßûýù¢ÏŸÏ_S21üJÈ÷𡯟â§0G+¹ÖÂÀ#÷ 9ðÑB]±èV¯­ã’ïöÈ _Ìe`R&¼IÆ®8^©åËiŽßDœú$ßü—Óç\€äÀñ`åÔg,|`ñÀdoäúŸ'Šyš<ò§q®÷Ï»ð&д‹‹Ç0Z“¡t®Ùm#1ü莛œ,#âK‚ÐHnJ|DÆ9×ù3¡Àcâÿ¯&7‰È^D*_Áå«y„Ð_5e6Ó¹LíŒ] =Â@‡6é15^yI ÛS妒ýxâˆ*móºfRàN¹xÅkÆe~¹rÝéU·èwûz¥ÅÃøÎe?W‘Ÿk6{§y^”oNDjJ}ö ÜÂÏ•¨Ë N PÊlªsÆÕa?Wñ18˜cR*¾rS#M*)"*&cBy‹ÒX 1 ” í¤sl€Ÿ«ÈŽP0ËÜd„Ùª0#Ùìâ¹¾go–kîÌÒpÊl¦s™Ú»À~.©Ÿ«°Ñ k-ƒ›éÚµ6LÂ-¢HSì­TݰÆg¬4Тbß¹ìç*õs•ÂF(µ_à1Y-fE”k™‚áoYÔÇ~®+ë\†quØÏú¹f•B)"8º ç&cÔG4Ÿ«ìÅ•¯rîø¹¤ó¹Ê‡TØÏe22´“Î5{dÝÑÏ%íí’…v°¥ù¹få˜?WÜÕe?W¢¢‰MÛ³Ÿk§mÑ0dœË~.ñ|®r?×j`ɃÐuÇu@`;~¾€ú$ l5¶T[ìçò|.× £ïÆ~.ñ|® æU¬éÁÔgÇÀÒ[-øraË N PÊlªsÆÕa?—ØÏ%HŸ˜Š/€ÜÔH`“JŠ€ˆŠÉƘPÞ¢4C %C;é\kGõò€ŸËÿo1}>—ÈV…ÉfYf‹ÞTÀ«LÛ³ŸË~.Ãèy„iéçJÎbX£ÖZ7Óµh5LÂ-¢HSìç¯XQ0,”c¥Å#Ž_ Ý¡ŸY¦¼IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BBBC32.png0000664000175000017500000000425313657750470017577 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>6IDATxÚí[n\1 C³ì.§Ëé®Òôc€Àˆ*ɉ¾sø3@‹d?I[–>>žŽß_øøøü´>Û‰ýùÂÿ>ˉZÄþáûgQ>~ Žxùõ…/'ô"à-7џێ׿xìÚ‘Ðøs”'hM kÒ@ðÚ18µ–“v‚§~îygw„²ty”v"×{Ì“§¨¯÷&eÇ×R/£ˆ(k9kË’9ò˜•[˜&y‚Q©ßN0Úrx¼H·Ä/oA<PQÒFج–²Æ›xDåÍ“×Å2Þ¤|’XªÆ›Írž¤|ëýµ’ßÒ‡rå¼H›'ñ¤¾±èìDê?Ž& ¨š%‚ÎN{Ì“çMÚFÏ ËÇ GìõÅži*#hµTùØZ=å?¶ZÄ¢’ÿ¸ˆ˜•üåļ#Ž2Éïýb««Çÿ?F0:˜ÛïEú´? Z9B£ºi„ ‰$ož¬-Ï"f…ímoIO팲Ìj¹í-˜õ$eæiTÖQO2¶Ðö.ÍJ~Oú—ue–Ø6»‰mS;Þ_½Y*ÙòÑÁß^)ëEä«ðÊß0É3󣨊úí Ê·•/U+m–=¢2%ªg%ûØ”+“>Ûåmâ ëI,å\–=Ï[†ä„jVêË{ÌÒ¬ij7KÞ'Jú:p=ñXéßF4úí5¢‡é×Iþ6¢YÉ/K°Í7Þ¤ˆv±\¬ïEóÔDl5×véo YÀñŒ·QoRNÌSÖå6›#¸<Ûrô¢= Γce]jTŽDÆ|[e“Á;òm»æÚá´Ô'j×lFúƒ[ÀĪˆE+D·›Ít»}2ÉÖ1ñêÈX™õ$Û½‰%¼ÂñÇig¥~¹'‰æ0òÞl'f¹7¯ÎHùÞû©O‘YÂ(\Š…-VÀ"$KL¦ Ç–ò¼I{BˆÕºïmÒ?Ú‚é1}y=K,=™¢‰nF©5KËÞ$ªg=Éò²“•úÞõÃ1O2[ýøÜµRŸH#x3å-CD–P6¸ì˜Ä÷þÿ˜iŠî½ÙòéËD½8iK¨FåÙrÀcVòÏz’ô,ÏòŒ­.·”ö´›ó¤þ¬')»aŠz‘vOBâWZhò>ýÅÞoo™Ý{ïvó=¸´ÞÏf #ë-²GÆÓ³‡çY‚Ë]T^þ±A¶‹ËŸkxe¼XËKVÒ3M»f{¦ OÒ·?[Ë–ß2¯%ŒY$÷feÝFøº:Åò qäS É&e’Mk•]^ʃ­Z€òÔjÙ_$—œN6½ßõJùZ‚Y@EiË’K9./ýeÓÞ_[8@¦ôBt ¶¯ð${ù]R¿½êd–hY×ËññôL¤¨•½ÈÁƒ¼QLØ-d"’ä#‘ä¥ÿãÊÁ¶ÕÞì•)ò=ÛÂeeÒ½=U®Ð|Vê—›&‹hÖ‹”u¹åI¢¯ÈÊZ2úJ¬MØzcSFÐÊK|Ìè²r„äÊ"ygÕHÿ]e‚ͼ.–™$–Ši?4òf¯Œä·fy»@JýñçÚ¤~ԓȶdÁÙ¬2DÛOV½H›YZ]¶0K²àÂfõ`S†XôZBî1Þd7A¹±'¶çE{Ȭެ•»†¸Ö“@pö~DÖ“ÐÕ³^DÖ,É(ïkÌÒÛKü¿Ì¢&ízÁIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/sc0.png0000664000175000017500000000030013657750470017414 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>]IDATHÇc`£Øtµì \›†ŽÀ´òÐÜú³xÀ‚úÿtë!#[‰¬†ªV£ŒÍt54±Ç4·—ø­Á¦†.O70@c‹ãQ0 `bí³›qľ)IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CA0.png0000664000175000017500000000031613657750470017301 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>kIDATHÇí”A ýÿ?¾â žQ'‰„²šm„˜“‹Œ‘ÂG%8*£Yß+³Y(5ýÅx7­ïviEfÛE)‚¾æù.c官R/2:ÿêzǻùU×5UŒCÛÆ„öe?H­Ô {!ºvIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CAbc0.png0000664000175000017500000000036213657750470017607 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>}IDATHÇíÔÑ À0PÇî8§[¥öã@„£´4^ ÞÆÄlõì³1O¬8ÿLe°+±Ê  \~sÙ<±â¼›(›ëû<ر§@Ö7ˆÉd`žX90ï¢Ê€wW,²GÀƒ8«¯åÀ·nÙGÝI9, ŸP8IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DDpara.png0000664000175000017500000000220113657750470020064 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíQrê0 E»ÿÕt o]Bw›¡Ã0„d'‘®Â¹?|áØáÙ–¿¾z¯ï«.ëµ<°Ÿ«ì×ô@­À~¯º¿–J€§ïƒÑ@Ëû»äó…Ç£Ÿ;¬Åþ]u¿ àí}‰-z¹êva¯Þ¿ÈßçÒ´n¡}+‹<îs‹}0ësç !T<ÚÓØdt5eG}aFIoQ«¥Ú0JÙ­m• £Duá(~tÔQ&I7ªžåß—M1«?²H4·TÆêoÿæi°tšÀ¶v „Zb¹ÀärÖ^`›ÈÁÓh™å÷;°%_;jËY'ÂÓc`Q&I ,ÊÃcß:lšÖûG£Å/„¥Ø`±X$m†iÞ¨bõOó!4O2ÏMo=MZ2}5Û q}ï¬Wgž6üƾ6³L’O³ ’ò–å/,`t4§?nÆÁ"Ë"·ÁTþ ~†"«µG!tr{þí}4–{)£:‹I¢ðtx –Q-_OèYýYhú¼åo±Ì iÿ˜A!„N–4’M»E¢DâÒ³[2©_ùä¹üôCùŽ·rHp Ll1úàš†]û›¯æ¨šC"Κ@÷‡«òöztØiŒÒh³èv +PÁ /ï²IÙâ2ËInºš³úeÛÖ¢Êlü‹* MØ*„Ð籊xÅÆô@e âx’))Ô (Ó{G-³S»Aa°˜åoSÞ¯<ÐöåýÊ $¶›a’+ÒÙØÍ khŽê5ÑÅËÞ·98@öèùÃ+äÿˆÚ-ŽAÚËAsÊP»åû Ç"Ì „Rƒã'­Ü˜žý—é£õ¥¢nŽfûŸ[¬¨Ïzð”NwžíJ§»Ux8ÕÍ®,jcõÓæî¬>×–E˜NP"„>}TSU~-09ì-¿Å$rí9š/ÐÝOÛ°Ì@tÉî}vÖ^Y,²;4­Z|Ðwå«Û/ÒaIv‹Õ’2«Úfû¤üÊØ#„j U¯ ê´ŒDYŒ’Öb^>гk‡oÆfR­¿—8Ë*e–ßg“×£|óY9«Y}›êаӂ¦´)0Ùõ‚Ñ B!Ԝ¼Ÿ¸gsðþÀÝN8˜Í Î${-ž8lYÊj‘¥4&i Ü-–$m3!„ÐÉ“F²i7ùÄ¥lê7;y¾ìe§f,›ÀñFqùXT哈³-ݰx»èW¿¥Bè\ üê_¹eʧ;© m©¼üfƒ­lâÓ]rf¡lÃËê Jß2eÁMWm,=']G}¶õ—e™²EHä˸´)„#[Jh¶¦ï/ŽöI™bÅQ«ŸFužÕ÷ )½¤š|Qº­JdùˆMö@õmÊw䩸IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DDbc0.png0000664000175000017500000000033713657750470017615 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>jIDATHÇí”A }vÏé9ýªì „dAÐZà\ö$FK8“¢Z­t+Ì*á¢úB"ÒS ÂD¿Ü=ñ3Oí.öü/NÌlñNÌšs¯xÝèEr+­9˜àí¹ ÁïOû Öƒ¢•YLá>|IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SC16.png0000664000175000017500000000165413657750470017420 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>IIDATxÚíÑQ1 é¿Z JH'a’›L”“åq@Oº„Ý/>2èlß E¶•€ ŸWJƒ}]ù¾²ý,|òtE¾-pÛTŸÏûð[`Ò~&5ôã/…ÙFx[cyàm-çaFŸ)™ü2šÖàØšg¥@.~Í4,W^:â{´Îåƒ Û9Êž_¹8ËÕÀ(²‘Íó~­A¢¼*{ÖF$aD™ymyéž¶'ƒq¸o#Ø'Äo‡v‰úlàÇ'õê˸‹³ò~£—®(¤P†¢‰-«ã@¢I•ï|~ÌF_ŽôâË>ýEÕ.¡kÚÀÖ27„éÒ:—´¾w7/Ù»…Y•›‚dîsPZ|¶`"@û¼T {ãle¯aK7¡²÷è{õ±Îåe¯È2“G| 5>Ü[ G 6dg«¢ȸêmæÊòGu®†ËÉ•½y-³¬ŠYX½OxÃXð²”|™Ÿˆ) /ß²å&¡ìE«hMÃk^bV^•ž¢{m7Cjz~Ó¶¨n+ý· ]ƒHãMú’Ó/E×袲‹QÔ%"ùvÀºôø¶Eý@þkû ž…sÀkiлnlžÔÔ.ª­AVcK°™mÑoî¦zî\ø×¯¨ld 𯫛¬|^}äÎåKqßAà•+‘’µ.mõvÛòÁQ}€?i\üÊÛ µ„,7ê(F#L>K¾Öÿâ2á íøæ§äo£lãÎmKòbùþ¶ êö€À¼Dúc“ XzžI IÝ4Wª£ ©ÕYP8Íó>¯ÂuNÉ'É^äšrÍ‹Œé€0ID敜Z`ùH雨–u®yC­×qó·½ÕðZê% ¹‡”Vži’”š£ªO©y•Ö¹VºA$Wö¢·z Á÷•VoW^@þÚ$$Œ¤äXÚL'ª„´6.=_½¢|Ée/@ÑEþ´%ˆ^¢Ç›ŒXßЉ­èzJtI…o…p™ªÔ¿ºîV}C÷¢¢+uÞÂFÎ%îO²ë¶zQTê\âé]sæÖb‚‡áÆçsÖñÉhIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/CA32.png0000664000175000017500000000420613657750470017370 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk>#IDATxÚíKrÜ: E³ÿý¼­d oÎ •êvK¤â~(¤2° Qòð~ýjÚï€]þ70°û£Ëÿvq9rÏÇÇ k|Ü”±FÞmŠË¯¯è×<ÿ­ÅQfCFÿõuvýW·÷ü·îãøÝÁüVÿû?ÔqÜŽ×^Ø”ipÜÖÌ%d®y¿;áùâÌ% "òm4bг÷5&Â\àQfÑ„{ßWVì]CÏh¬Å{ð =ÚÊÌÏèÙ”¶€|©c´»¹l³ðÝÙûºDWæ²Ø&e.0qFÈ ÆØsô!ÂÞhš«·Èî (´%›:VЀyq‰ ¶8F\Žik‰@"×KÕV¦mÙ §i«™‹ìR¢¯Çkôµ+ë¸4âùz<‡½åŸ/s#AôQ¡ ŒysƯʥu&Š>0imz^?FØS¤ÈF´U"KÆn£9«ð¤mä%ÛHËâÈwÔ~"‘Õ’ûãš³g Ï»û¸¾s9p.¼h/—ô9þé´Øg ðœ o¶£‘OŽ=q/ ô±Ñ–]Çkk{²Øv pÂ\Yò*ê\3Y.³]ÏÃYæ*¡ÏH±-9ŽGs©vTå7Ô`Ó‚aW¸‰â!¡­³€žˆCLœÕÐÓÖ’› ö¤9m@æzÍÆ£óm#òZ`®÷©ñZû)åveÃ<Ø›ÿ˜¹ÖÐgþtŸô[¶3”‘"šoA[#Ä'òÈg‘ȶlkkÛ@fÿéÑDRØÆSc.ø•p?R²â·aÌj?`ÇóìJ]t ŽG¯Ui?Q§-@Ä| ’à°7ÛM5!gµµµµæ¬ëÉRº%7¬Ks!¼K™k;ô¡;6Üê^.Êç´ÅÒÖÖÖv×M›t›jÞ˜Û¤ˆ-Ä3úHÓ%E³ˆjÍB9jŽkÌkk[\‰©îÍEì É ç7ŸH^æiÊ-ÉÈV%M$Û"uNš,8¿YzäÊ H„½µ÷ÿg¬immû¯ÊgS©|ÄÒC8†cG[œ§-¦³”˜Ì~¯ð#¢× ]Ùûîüõo„¶DÌeëqe8êÝ ´µí @öº¾†j/B÷†ò:Ù‚Bé‘ÛJ(UŠFA>¶\™¬H\l.¸+ÐͪÀ’J¡Í„aAñ·kêØ®Â±´¦³´¤¡MZ3”­l“sˆÍžM^†¢Êô2Ò¶ÂÙ¶Rá\Hn†rð×èC-€ÍÛ¤’ÿ+ìAi[‡'bž¡YI‹jÍ_Ïv k¥enfh—6"Qƒ¸9Q[âÍpUÔ0»%§o½©?Ÿ™´µeVZ3c±}éF [¥-jEMy›¹š¼¶H}þ Å¥ˆæõ"GÌKnæFŸV|wù»­­­M0g‘WùêMýÀè“ݘ@à'1Ñ1ñV^.Ûçdž@ÚÚÚÚîºi3lS s›±µøb“›ˆÌe“ "ªM66 åëÓ˜×Ö¶;ÙhKš!MÇ0$ ØRnÌIF[¤U‰ÉŽîE©s‘/˜˜,ˆš¨´uþ=+6r)÷o×Ö& ƒÜ$=k-=ä-=he;Zf>Lg>>(=0G s­-|¶pQ‰tãÁgùQïÒ÷z3¢nûYr“í°´)½ØŒ¡¼N½ ö(%”ÞÇ™ P!4[&ëêVÜW¢n Ø‹¯<”Rh.4i«ªPf.¬ƒ½,mg æ‰X¥“ñö)D§ ÞäôIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/GA0.png0000664000175000017500000000034113657750470017303 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>~IDATHÇí•1À0óÿÿô+ý2t@ {H¥zÈEN¬u²nRfØÈD† œÄÐ+ŽÌxÚ·‚¬ðß+o<÷UÝ”íƒõIØ0ïŠß§@GTá²Ë½S¥¸£Ñ`¤Cõg†`]fÇxß‚õ1C€]Î6(iz{G_ÂþùoyIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BB32.png0000664000175000017500000000463013657750470017371 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> 5IDATxÚímÒÔ8 „¹ÿ}¸ Wà/EQakôÑ­N2ÒýÁ.«qâØ[²ôíÛõí‡ÃˆÎ¾o ü#Vg?7¶þÀXm—«ûÒ¸£.wîï3bÙ;ÏjÁwüõõïŸG[Ç÷çO<×íúëk‡Çñß¿õûÿPrl¿ÑÝ¿8ÎeĶÁçæÒqå#¡|ÍcO¶ãd¡3׺9ú÷(ØŽäÙ•aÏ G wF¾ øÁ﵎x~ë¼Ý_âûq;ú”qïh€½sèÙñ3öΡÇ~£Dèñp–z #®o"ǃyO ¯&æÚA½ÈP\÷]ºRA™ôDÀŽ×qÉËFŸuwÚM®Äˆcè³ß›Ëгs¼Ž,ý^_ÑÇ#4o±;Ì[šG,… Möòà@€¢Ú­hK6Öâ·;–ã¯&gžu›.³Q˜+ —C¾k“×nƒó;=âsô‰¢nhįâa®b˜óœ@üLú›¶ ÇV¸’°·ûèY§$‘4v´U àÆ~D+úìi«…CZÉrä´O'/±ÌFpƒ@9ò"&ù é~§ýøÉ«„>;Ñ ÎšúÏÒ{læ²õÜ­K;€ {…?-?ôxm¥ÅĆº:°{€G÷ÄÙ~ë‡GwßÊ!ŸárT­Ø.à¤#ß(2›ö‚3׿c§M^`Õg@¹Èêö­—@OH Æ\~ô±™ ð¦£ÚÖŽ´“ŸV”¹Àç(zZÜ2äf³½_tJ0×9úäÂ}.ñÅNpŽ ‹ ÷ç{‘½7ÃXÓCÑG˜h~m Eög4ÙYä³'øç§­&Øk¢­]ÂÅñž³´56ö¹bðn-vx$q:zÅ æF¾(¨Úû1<Âì0uÈÐGà8ú¨“:—Ÿ¶()¢ÑN½Ýiʾú8õîÎTqiÐglìnÝ9yÈ ¼fÙ‹¥'#†²=´îK€!ß0WƒcÙ£O.âç$[@dKæØØØSŽ0²C›ì˜*>˜Ë¤ˆKˆ/Ã\$æjQe²±L(—…. #cP£K±„ÜšœpÜ0éâ”Ö”Y’‘}ZÉ©sâdÁ#i4¥Gz~DCBhf%ÑÎ)m[§õ'cw KPbþj1Á%Áµ#ÙE+ÁÕ2Áeº¦ëƒ² “²+¢ô±•`Á5àõ'¼×¶š˜«éª·óš.·_óÆžÆ_—(DÒê^PlFP^Ç_P温„R®hTiù—ɳÝÛ"¼ú­ øÛ9ôø…&@YŽúCní*AÄÌ5Ö‚m€BðÇ`ò€"û1aÄž›NÈ%ÂÞØ`/v2&Æ\H!̪ÐDD€‹BÏý1OöŽÅ³Zö=_·ªÌqTr€!Ÿ‡¿ˆÈMìNÆ=èó®¢OÐq}èitTe/¯m`/ªÀV«ÜÍÄVè¹3æE¡‡8îhª>e¢](aUÁÆ€’âó1è2äÕP9Á ½ p–1ÈƒĶ—L;ç+™¿½;P‚=ÛÝVXº¦Aªd.°´&Õdic؃µëŒÎð)I1Ôóȫͱuå¬öèî\svyŒ¹lØ ÌŒÝy0žWî ‘\Ðö]LÕtœ }ØõCc­_ Ãê2dö.‘Ët!è!â­í¾Ihò—ökB€á¬OP¾D$vI'¯#ú´’× @žŠ]Äy F>?èø¥FW•.Fe.WeÔèù¦ô=lˆì¡®ã‡—„½m%¸•Bþ­ÌE¿ŽAYç“'Ë.cBþzUƒ.‰Žÿ.„çäEã{òjzÃ`æò¯P°Âø~ô‰¯HîÇ•šô°­Ð]Á{(æ²aïãJt-Ùì¢2âÿi+%¯¼éÀ šˆ´µ›nÖû<‘¿väEëî Ï޼š–É’c»r?{+ì¾c8ÎõO̵HŽØßñÍY•Ãe_Ó(¹·™Ø‹vQLbž=Ñ>£‹âôOÛñ‘¼ìt÷ÒÒ±~ÇëÊLAèTBýK yù·Å{\‚¹nãØ–ÖÀŽ)3ܹþ8j²½”¿ûY5µ|¾»Ûb/Ÿ4òšÍplì>æù‚ÏNˆ„5Ë^,K‡¼J_Œ¦} Æ\7a.È£L.Ùç$^@dKæØØ˜€ˆÎè‡6Ù1Up0—IÃ\mŽ/!)ÊDÔVÙX,”‹C—†Œ•9Äþ“&jÍhmÜ HÇ$ ÈRnÄIF7H«¢'’ÑSçlô!*\ž5k÷ß7݈!&„úiKlLúµÄÞØ½ˆ~%Ep GvíHpÑJvµL|™Np}Ð~àÄ “ë¸[¯ˆFÑv)6j­5÷ŸeW½w´%†=m 摘DÌ\ÄkÀ­¥WÅfdåuê…ÂÈ'+¡Ta®Î ¨J,“Epa0ÿA \ -ºçÐëý®U·èåîü´E ö’†¶ûæÝYê~8« ƒÌ%(%†E•ee¤oS8[P*œX½µ¼ÿ¼.€ooô’ÿ{ÙÅ¢-p“q[A#‹ºó©´õ\ f˜«Mtjm,ÕÚJKÜuIDATHÇc`î`00üÿ‹p‡|4ÝŠËa €L˜CG8ìÓ :€9¤i˜8Ýs¡â†X}T°4†n1zÔ¢;]ߨ½qe \™fÔC6 ¢;Wq2क¾áç@rkºÕ$ô™â,ü‘œãIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/AT0.png0000664000175000017500000000030513657750470017320 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>bIDATHÇc`ƒüB$•@uõ”)ÕÕC!lü$²J:YIEëɱÓzЬDŽEBÖàÒK¿ÒÐbb€ÊãÊHtò1‚š¼|L“´ML€“Y– `2@EæW£€z؃)ßÉbZ+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/SBpara.png0000664000175000017500000000054313657750470020110 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>îIDATHÇÝVÁ Ã0ôæY©+tƒŽÐ²•@|ι8­Ô”’1ç3Ìÿ*³§ ×¹áÜ\¸]:ä¨Ñïîb–šÙŸ­Ka©ýÜÏ\ð¢è'‰b„ˆT#˜x±C?IS'ÑÔ* ñÚÓq• úÏ‘ŽÔË'U­6$4ƶíûQÅz·²úëB‰ñöûfÿE‚˜¦»}°Š{}‚?›âj?:[$Š äÁÊSÛm3Ì¿ Ú÷ð-±ˆª>Èp–ü’ÔWÆìì"e‚ `~[‘úþ°ð™¡ä Þ¯W ª±íô\ø­õòò’]ht¦yŠIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/torp_det.png0000664000175000017500000000053513657750470020561 0ustar jamesjames‰PNG  IHDR -,èIDATHÇåUÑ … c3Wp7`%Çp«{ñãbRR{w¾ù!”Ò+µµ×´Þ×uYÌö}ÛZ3óqÀì8N€³õ~ÀÎ|ìóóýM£4ÔûtÕ.;ˆªáI¬ìØK@d€•vÝ3“Z)feg³jÍwzùD¼j’.?óMˆ-tf¬Ñ/¸!Ì 'àã7'É4`ÌÒþIçÐôdÄ«†5b©012FT3ܨ€(#¶Q}—±lŒXU„0söã¤,‡~zž/ª]8NÊ¿¡²³œÎŸ2pT úT¢–ôx+¼\êh”ÄIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/torp.png0000664000175000017500000000044513657750470017725 0ustar jamesjames‰PNG  IHDR(fÍìN vpAg(B‚bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>°IDAT8Ë­”Ý € „»™+8а’c¸Ê$^óåØ‚ÒŸ»ö!Vʾo[­AvžÇQ»®vöûpÔÍJÉ#EÄlÖASé™< Ìtäþ}Dò PZ#‚É-|ƒ‰–Ôkb”€|9ô˜Zv0ØBÛWJJ­‘?kf}Ì>kù£±ÂæÑvÆ©0­«ú ¦Á¨fp•":)à˜é}}÷Ðøo‹)á7 S×í›IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BBBC16.png0000664000175000017500000000235513657750470017602 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>xIDATxÚí][n1 Ûcç8=No•n? (”fl‘ö’?‹Y„õ“”-ùõ:Þx½¾¿£O:±¿oüöÙN4"ö??iDMðø18â"òõÆÏÏëßÛ ]Ðr“ýÞt\clüÃc׎„Æï™ <ÁhRD“Æ·ƒ#Ñh9¡\õ½óÞÝÚvƒåUäEºPN¸F Û& •#XíâåÇ…y“¶I©4›Ûº2+·Ú·ºqÐËéÁ»JZ–`;1Ô¥4/‚$¾±ìì\Nðé²Ð&ñ!&OЦÈ&JÅB-é>äIЅIJ{kö& ™©Çc0K,jÙì²3MÅ ºúA$;ËÛ«,!å,¬`†aˆÅ\4Ï~f³&¦›¥¬Ìªº»ÇD‘äˆgøm¢U©<É4W· Aù.–™$Ç,3†a†¨€•',<ª–‹zÉ0eCÀô ú6Dz9ÕYJ; ›½.?L¼K˜~[Å65Aìæ CMio#XMô8¢´kÊÛ\ô–½*¿šè²åI6]E-Ú–ðRízZÊP–(=é*;øéikUBKü»k’äÜœLò)"lEm+ðñ [¾]Qùb$Uá*_ór»ê¡´®–/ÊtL©]ÚN#_Z-"&Sœ.‚\y?¤ ]e~–I¢»84{e& "lÏq¼9¢mur^e[‚²EÛý²Á±·—ü&XÝdž ‰¤¾Ì#>Y¡ê§¸LðcÇ Z^ìEX–@Vi›àSbôbžô–G ›f¢²Ò_þÅúƒræé©ä§½x ãIFB‘8h'…x‘Y¾#Ú~Yì©‚¶IB“"ÛÅ´–ô9ˆa3e¯bb9  Z:±êÕ©e“i»'äbªÄ–™§hÏEIõË“²Pul‘1dyWfïÁ s‘éÄ"݇òBÚ÷Þc¢øÎ ¹KØ ×0>¨Ò#Ëág U«HµG ª'OË¢WÕÔòÇDQü/[_ë)±ð÷²2k”úY³„,A8©ª±è‘ Š$<.b—•øÕ»ùÓ—›»÷a¢¢I}Ù`¹µa†q²[\׃i±PÝ‹§™¦jÀ2ºS}Üâ6A$T‘äŸnš¶#(×Åò“d›eÆ0 Ã0[GyS>,D¯vqû1"(s-/YI¿ü(¬ê5²Äée åŽc«„å·Ìm ÛfK/Ê’»"*ÉV¾Êv½e®ÊgÇ =Ù)kzºFUYÓ^²ƒÿø7t–•K[Ë*dYÓ´ç0Ñ®H„!+ýe¯ŠÊ‚-¥q\AD¹r.ô‚8h’ÐK ¡I#S” µÈ1µ€]ZínKÊVö–¯‘.ÿ]qËéÜÆ{|¬9ú<)”«ª5IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/DD0.png0000664000175000017500000000031113657750470017300 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>fIDATHÇc`ƒ\ÃèdåV$@Cë1­|Žhh=.+qY?ô}<`q<`©úÿ|ÖãWI_"‹ Ç1~•ûùÿdC1} cƒTÒÄbü€&cÆ%6+¨j1ñ1G“d,Ô¡µ]0ëUì IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/BB.png0000664000175000017500000000517113657750470017225 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíknA „¹ÿ}¸ WàAE(£íñÛ.Ï–ÿ¬ 2½3ÝõÙnûǧگOûøÐ~Ž9ôóÓΟmŸúýiçÏ“Ãe+§uìähúJF“}þ Â?ƒkÞbØ}ð߯þøøú¼þùi¥¾~ný}.ÿÚi%¬þÿ=ÿ~oºƒÚgMú{ef}¶¯ ö³ÜÁ¬·?ÍÁìí¢}?¤Ñ¦™D{6·;vÝ׬ª¦\½XuaùÊf)ê÷…§lˆ*‡§¯O¸” êô¬•={'‰׃‰.fJþlz%X é^êKÜÛM÷R_û¬I}+ƒÀJý¬’gà–hSqÂqÇ$FisXRÖ'!۫Ζüði‰ñtD›ƒ§•c­ä?©é%IXÁ˜ä—õa‘Ô—<­Pâ3÷Zò[ÓetZA­Ä/ƒ¥ÓWcM–§´ÏЦÆuCâæMX~å ö=6£À8d=›Ë“`©I¢‚u=<=M$™ä]Éļ—üQ ¬àkEme’‚¢³{Eí ¦'î‹:©¯Í¤A“ô?³JýÓË6¦˜%)(Ë‹9 'ùeQÖp·ŽE˜°y[6…%¸b³±ò”,6»|àªiŽJÑ~/›¤K~)ÑHw:É?Oºè¾–I´YPÑ1maN´À'¼íx¥¾5x”¾qk¥þxÄUúª®Ž¶3ˆ•ENÛÓ¸£pÊšŽ1B{*,­+6‡§«pmOèh |™ä{øLË&mQ~IúgUÃ‰Ïæõ¨²ì”3‰Wòk™¤ìYŒæE$^NÛv¢LÒ«ÑJ}ë Ó&õaÎ\x‘žÍëÆ$õÁXÎ12m+£À=Ãëà©á†ÎkéïMG$0ɽäÏ*•2ѵ×vµØ™O§ ºö´7ã–üÞ[mUpÞ¼H[¡÷öƒ¶¶µ ž´/M[0ÉË"0ÐÃ"Ò…–veeöÐ4À"º Y[l‘syÖ¼Iž¢¸¨ÕƒeBÕê¬ÚBFE /ùaŒ~Åiy/‹´_Œ¾ÕíÐ$Ål´Í<Ëâ|RÔk0Ý@ÉO£ÑÞv$éoe“¶D{ÄY+ÕÛEœŠ± ×rx"“<ÖAø¯xÍK2¶ÍÀoÔðGF£1ô±$x~[À„¯ ¢“IÃ$pÉDøt,|B[oC%]g9e†ƒ`Ž­IÏÂÙ^Ål™òšBo¸RyøË°’î 액5—®®ŠæÚšÕa€‹9GàØÀåèÉ×þTûs-úl-HO¬aƒmFÛξ!lK!ئL0m­àƒÁ·V³J~mT¿¡³7l{¿“»¶¼ “À´˜´ÂL“Îu°D#£ÌK:š#ÇÆ…m{ïPî Ìè…¬áéGßšñ°T´ŽjeVãüNØ!>÷Rß›~(k÷\õÕ¶O¼‚…%ØafÖ v~%ýãØžQÈ&Y‚v<Á7xlÀò¢Õ C¾¥à9Иt›ä4ïh5“¸¥~V)TY“âl)Ë“DW®}½WƒÚ`I[à›Àá ó'[ÙÖQ™MšŸ«> ;ª•üÞÛ +y¯¨­iˆÂ„Ž.Úo-J´×+¨•üR!P™£V&‘~žàÞëgG IŸÁò#kY$›Iàa)ý+öf5Ǫݬyåq!“ÐðÓOg“¬ÿq!›èd–5Ô[æ`´ §ÜAkKªù/_I­¢n‡'«ä/ß´’®¨®å´°Ñ}¯¢.“üU,RFs^ÇÚiNëpÛÛl½Î6Æ$Úæ›dagžîåÖ8Î&ãŒ"±ÉøÊJ¥`%¿Ä&0G[ºƒÚ~ûÞ{#aG³+ŽÊ´:ê]Ñ04E£ûRs*¬úþˆ¶!Dº£Úb²2h’Õ&pÒ¯§YAœRßc&ƒÐhïMã žÓ‰Q¶Z[dœÎÜvÉoMG¤K~ï¼¹v6ñÊ­t%½ŽIï 6Óæ`û[mÅOoÕ›{ã¶¶/°W»%}ú^Ú£oˆM(†h4ÚÓͺÿ£YÍ'ˆöˆK>y¥?¼Š)g’Ç V2ɺ¯ö%ßfÖlÔðGF£-‘þcàÃo°Lø0™äñ®K…Á'áÒ±Ö£m,¡íµö’€L× K4‚Ô×þFúÃÕ®ÂÙ—)Ãz×ʯ¹lðØëã^Ư i%ÿX~Äz‚Hÿ¦çÇØÅ?/‹,(¡»|ªu˜D{Û4¬ôo¥ÛŒ¾ lCø–Bkš2Á¶µÒ~ÕcÁN+ ×Z-*ùË›ÓE nnlƒDø“‹¬&x!,=Ö0ÉX{?¸–ã°MÛáÛÞW Ãüè…l&‘²¤eÿÆÆD%Ûo°¨mMT•ŒO@=̓äe‘Aé:ŠKë( B\â(äñi X&OG´f…n ?øñ–aGT ù†“îÅ´ š×Š-“hžv½íôpk‹ÊN°Þ7¯oŸ5Õ¨°¿ SX99J‰:Ê`: --1æ5î7žŽ°ÞàNÿê+ýËá ŽMªó%moíi¥´ezeåzVÅœMVÉo-*“úRÚÁ{Ï$E¼L"ÃRØÑ{mÅ馻n•þÛÐ2V„KX„Òým™¤ýQð4ÛÒÖ‚Ÿ¶«æÑ|I›TASºƒ^ÇÚ¨.›MÚrw0…ŽYi‰2hÒJþ1hòJ}©A",ÝË*­ä—@”§¼ezejßâF€½‚@Áw¦h%ö÷Z|­ÜPIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Fed/AS0.png0000664000175000017500000000032413657750470017320 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>qIDATHÇíÕÑ À0P÷Ÿ¦Ót…Œa ý1ȈZÈ à;ƒ‘]rƒü„]&-%6LP‰‘œoܵeoOF³'ŒœcÅ'Æù2L5öøžôÂ[Fáäöú&R°Íá¹ÄW?.{&ì'FådÊù‚³Ì‘IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/0000775000175000017500000000000013657750470016425 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Misc/local_back.png0000664000175000017500000000353213657750470021210 0ustar jamesjames‰PNG  IHDRÈÈýÈrÝ vpAgÈÈëJ|–bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>åIDATxÚíÝ-rIàƒ… ˜ø:†®± ‡ÐEöPZY»/ŽÇVVÒôÌôÏ÷W*U)§g¦_¿÷å =œZ€«|=3tPÅ[.¿Lß^ûýá°Ûëõv»Ùx^À„þ8ÓñTãñ±ëuìXp¹öÈÚá,(ÎËË÷@qìùÕtd1#ýûLÇ6•§§år±ÐÞ´ÅÖ]YÏiµz>ñ¼ŠeI³úó,d3eŠÌ ‘ÄQ‹@‹"Êìý ·tãÿ?¤¿¾î½Š™¦èEhp©™ÛïumXo]âx¢ƒŸ?~üu¢Ý€ E'q ñEKä(ýsit=Õ fs§²‰3®Pâ÷‰³œ×ûÇ]çû«ElyË|ðF¸0-rÉM÷AI÷MN¾žy€9D¸£Š‚\%î§9€9µôÐÏ”aK{&S^‰Ô ±ô,5GŒè$˜ÎÃÙõß›$¨3$C“½µ²7iÆ@Ûbe[9.àåÅIúÿd@àÁ7TÁ–óÍ´ñ@nì¯ÌÀJµ²K½€ wy¾hàF‘é ~ösåÆÞ=T©Ô [–@óܪ§4©ç ÿË=&˜ÀÓÓr¹XøÐR̀̈́ËäLÈFî÷N€Wü|`¢P¹±¢Í”=˜Èz½Ýn6å&ù³Ç \ýšÉÄŠ–€Xr3¥H†ùpæ½ ²ß»Ž+ïÓõI¸0ŽØ*µe ¿’Ôòãì€$„óÄMàø÷´ @m¢¦±–&›ú>ýŸ×†£E”Á­IÁâÆ¯GTMÖLêÔÏ4ÐÏŠüºqÜuo•îäîjƒ›îÀtœÁÔ%V‘UyhÝ•X‘hÙ´¬ì0ÐÜû¡ŽFZ¥–ÖnnF¦%>7¥ã$mÀGJ¤s³")ÄY¡ ž™’€A"^Z¶]€ÊDÖÛXÊ•º¤‹ß;§o=¤n-€øun`û‡{#ð¹½ §R PšØÂ•3n$ ýìÙ¹åÄ‹:4ñûÙ™¢RJd4÷ï¡ @«b/.f„f†@­¢³¥ @Úu.g=”ÁФ«ÕóÉ[ÒAuM€\DX­lÚÀV&ä8`i (€™%H‚Ù¿ «eníÖZ23ÓqÛQ] 1Ññ0«XÑE‹`Ò‘–à®ÄÙL£"|Q @fz@±åÕzXvö"ºb½Þn7 [¯V]WÏ„-V 1!•újgRà@ƒb°ß»3i  2 @K¢ò§º&úzV߃Û΋{P¡ZgQ7!÷äqcäêF42C‹OZ„_94 2¬xCœ%j‰ÆÔe@b γåòÛ‰÷Fd (ÏËË÷39RD7¨e‹æRòCQ;@ßÐÜ}‘2(î·4_+½¶£—’ÿI „H’š{²T€lÅŒZи2JM†z2TꙌ­?îgdµd˜‰3ˆð]€BÙs§&‚`QŠWI^`v*¢0ˆÃRJò~KÏ{;¶Ú‚CY퇦¯ë®®óAŒìx]Õg, Ñ2—V¤SŸ¡Ùj̼¨S$Ï‹ÅÞ´\\ªi­]„šf%(x#úQ->0 :ÍWH£ ÊTfhTŠ›áÓ«ä¦3 ØÆá´fÀ¼?ËeÂcÅ DØjtÎà#+.€fÔv?ÄÞçïÉ]ÐØÀ˜ZÜ,N]šÕŽ @ÍjËMQg…fÆ CôwR§ËzZ.‹·{dZ [q\`K`:V€b;páÏ@5Ll€üÄa¥–€áV«çßÓÔ"»°`‹™¤NÍAÝâC ˆ÷ç÷›–€¨×@’¤¶#@þ"Iª–h„½ÎiØš"ÇŽ>¢ËRï`Ä¿ë&:$)#]4Òá«3±@"Qÿ!þÜêéÿ=ŸëGë]lѯ¤éÌÆô:ÿî:3î¹%»Àì‚Zž<¸,uiW> mµ0ˆL 4¹’sO!¯miÏCFh†qÄÙ-æ;Ù £Ä>Õ{õ.|`k`è¿£>ð“ÊtÿŒ@ÕT:`ÑbLÈ‹!¹“=^ XÂz(Ú¥‹b§`ü° šàE˜yÆa`VKjJ“ ÷÷JñÔê/PЊ9%ÅfIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/map_back.png0000664000175000017500000000353213657750470020673 0ustar jamesjames‰PNG  IHDRÈÈýÈrÝ vpAgÈÈëJ|–bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>åIDATxÚíÝ-rIàƒ… ˜ø:†®± ‡ÐEöPZY»/ŽÇVVÒôÌôÏ÷W*U)§g¦_¿÷å =œZ€«|=3tPÅ[.¿Lß^ûýá°Ûëõv»Ùx^À„þ8ÓñTãñ±ëuìXp¹öÈÚá,(ÎËË÷@qìùÕtd1#ýûLÇ6•§§år±ÐÞ´ÅÖ]YÏiµz>ñ¼ŠeI³úó,d3eŠÌ ‘ÄQ‹@‹"Êìý ·tãÿ?¤¿¾î½Š™¦èEhp©™ÛïumXo]âx¢ƒŸ?~üu¢Ý€ E'q ñEKä(ýsit=Õ fs§²‰3®Pâ÷‰³œ×ûÇ]çû«ElyË|ðF¸0-rÉM÷AI÷MN¾žy€9D¸£Š‚\%î§9€9µôÐÏ”aK{&S^‰Ô ±ô,5GŒè$˜ÎÃÙõß›$¨3$C“½µ²7iÆ@Ûbe[9.àåÅIúÿd@àÁ7TÁ–óÍ´ñ@nì¯ÌÀJµ²K½€ wy¾hàF‘é ~ösåÆÞ=T©Ô [–@óܪ§4©ç ÿË=&˜ÀÓÓr¹XøÐR̀̈́ËäLÈFî÷N€Wü|`¢P¹±¢Í”=˜Èz½Ýn6å&ù³Ç \ýšÉÄŠ–€Xr3¥H†ùpæ½ ²ß»Ž+ïÓõI¸0ŽØ*µe ¿’Ôòãì€$„óÄMàø÷´ @m¢¦±–&›ú>ýŸ×†£E”Á­IÁâÆ¯GTMÖLêÔÏ4ÐÏŠüºqÜuo•îäîjƒ›îÀtœÁÔ%V‘UyhÝ•X‘hÙ´¬ì0ÐÜû¡ŽFZ¥–ÖnnF¦%>7¥ã$mÀGJ¤s³")ÄY¡ ž™’€A"^Z¶]€ÊDÖÛXÊ•º¤‹ß;§o=¤n-€øun`û‡{#ð¹½ §R PšØÂ•3n$ ýìÙ¹åÄ‹:4ñûÙ™¢RJd4÷ï¡ @«b/.f„f†@­¢³¥ @Úu.g=”ÁФ«ÕóÉ[ÒAuM€\DX­lÚÀV&ä8`i (€™%H‚Ù¿ «eníÖZ23ÓqÛQ] 1Ññ0«XÑE‹`Ò‘–à®ÄÙL£"|Q @fz@±åÕzXvö"ºb½Þn7 [¯V]WÏ„-V 1!•újgRà@ƒb°ß»3i  2 @K¢ò§º&úzV߃Û΋{P¡ZgQ7!÷äqcäêF42C‹OZ„_94 2¬xCœ%j‰ÆÔe@b γåòÛ‰÷Fd (ÏËË÷39RD7¨e‹æRòCQ;@ßÐÜ}‘2(î·4_+½¶£—’ÿI „H’š{²T€lÅŒZи2JM†z2TꙌ­?îgdµd˜‰3ˆð]€BÙs§&‚`QŠWI^`v*¢0ˆÃRJò~KÏ{;¶Ú‚CY퇦¯ë®®óAŒìx]Õg, Ñ2—V¤SŸ¡Ùj̼¨S$Ï‹ÅÞ´\\ªi­]„šf%(x#úQ->0 :ÍWH£ ÊTfhTŠ›áÓ«ä¦3 ØÆá´fÀ¼?ËeÂcÅ DØjtÎà#+.€fÔv?ÄÞçïÉ]ÐØÀ˜ZÜ,N]šÕŽ @ÍjËMQg…fÆ CôwR§ËzZ.‹·{dZ [q\`K`:V€b;páÏ@5Ll€üÄa¥–€áV«çßÓÔ"»°`‹™¤NÍAÝâC ˆ÷ç÷›–€¨×@’¤¶#@þ"Iª–h„½ÎiØš"ÇŽ>¢ËRï`Ä¿ë&:$)#]4Òá«3±@"Qÿ!þÜêéÿ=ŸëGë]lѯ¤éÌÆô:ÿî:3î¹%»Àì‚Zž<¸,uiW> mµ0ˆL 4¹’sO!¯miÏCFh†qÄÙ-æ;Ù £Ä>Õ{õ.|`k`è¿£>ð“ÊtÿŒ@ÕT:`ÑbLÈ‹!¹“=^ XÂz(Ú¥‹b§`ü° šàE˜yÆa`VKjJ“ ÷÷JñÔê/PЊ9%ÅfIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/CLOAK2.png0000664000175000017500000000027713657750470020054 0ustar jamesjames‰PNG  IHDR $©qà vpAg #’AmbKGDª#2 pHYsHHFÉk>NIDAT(Ïcpd`€…8›\qO• p1j°]\À´  Uø¡¡T¥W­ZfS‹¦¦Y šÚîc@D$ $¢òX˜ 4>uPs]½szVÜ`IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/hockey.png0000664000175000017500000002636413657750470020430 0ustar jamesjames‰PNG  IHDRôô›FÉ vpAgôôL´£<bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>,IDATxÚíÝIrã8ДÃÊ>Tç¢Ô ç¡*oä^È(—`Áœ@ üß‹¨VÊES1ÝÞ?üúР.q) ?t@@Ð@@tÐt@@Ð@@tЀ%¯.=¼¿þ/Œîvûü_8‹tÐt ±HOÝnr„½Þß-$ÀvzÐ@@~ü0Ä€Ín·?n·Ÿ?þüùóë0ø?þüùóçÈ÷ÿþûÏŸÏç?þç??Ö<þ¶ïççsþßïúÌt}¾þýpÀûW‚¶å.•¾c®$œýIýú_\<÷<òóÒçDýÚ°+— è¨(-]0óÜó?ÐA»tT”*Jèз—Ñ‚”óq>5ÏG@íNÐQQª(¡[@_lò@³7Õúý½#Î:ÿµçÓêú•Χ×û7OùÐA»tT”*JèзÎÉmްóq>5ÏG@íNÐQQª(¡[@ÿdöý×~N°óq>ç€Ú  £¢šôýÁ¦v:´œó9~>:hwBÍ€~ûç\ZV”Gs/±Ê-œП}ò¾î½´tÚºÕ>ÝKA)ß»öë»>1®Où¼ïŸõhw–€®®¥;™0C@ßÛƒþü8ýz@ó©>zÐA»tT”*JèÐÏFž{nt@»T”Àb@Ì<÷ÜtÐè[ƒŒ}Ìíc>ö>æG__@íNÐQQª(¡S@·/¶óq>zÐA»tT”*J  ·Z£Íw>ÎG:hw‚€ŽŠRE ô~szóï|tÐÝ>èt­(Ç~”Ð" ?ûäõ܇ºÍë¯Ý§;ß/¼ÿ>Ý®OËëctÐ]:]+Jw2a†€>Ê>Ô½ç4;磴;A@GE©¢„zû`Õ:Ø9çc:hwjwŽîííííJ9V@GE ì èöÁöÜs=è Ý'—£Ÿ€ŽŠRE Cô­Af”}°ý¾ß?ç÷tÐî¼v@ϯCë`œ¿^é|tPQBÈ€¾uèï8=žÎÇùÔ?´;£óÒãRÏöÑÇ­ç! ƒŠBôµÁfœ9ÉÎÇùœy>:hwÆè£< è ¢„ Ýþóßò€v§€. oè/>²Ìì¿ÿýõëv›uwðêðÜívÿ€ô Àô °Ëïßoo[f|§¹â½ÏcT·´ZÜíƒ"F µVü—XåíÎòEÖR ^ À¿~ýúõ]ž,·vÀ^:qË©mÖ ¢´ÝÚãöZ«£/mã6û*ìGº9è< Ò­_÷*Û¥íeˆ;]j€vçøÁ|í÷­|Iþz³]__N qg€ŠÒP#´;Ç èµ®ÛÑÇ(=醸À@Âl³vôÎËÕ‡T  7µß½ï¾€€¾A¾ØÀÚÀ¾üsϼà°/·EËSazù}¾JáVåß{<¾À@耾>¸× ìåߨþ-Ú¶jºÀP5HŸ—²ú6gï ˜ŽõýþìG €vç¸y'Ï=QrJï\~ûç\šm7=?Ú³^rÕÅjUt÷+¢Ü ÝyfÞIÎÊ%ùëEëQÐ+„³ûÕ‚ºŠíN–zä£õ”ËÍAÿ¨ë ÙØ»ÛÚó3G¸^{ÌS)ÀGÉ?úBÁýF‚ œ­õÜó”{ÎZ”nXщ;{Ñ·³g]¤ÁbhwÊKWÏ=›s¹UÜû¼Ò*‰W/°*J´;å#ý1 âÞX>D£´ïúèCí€ësy¤sRw% dï;?{{Ög¹³äN&Úñòžô…\. ·)G RØ—Îsô‚«¢@»S@Ôº!î™Ï!çuß𣫭—߀+ÐO ÔíÏóÚ‹&èLÁ~è@+µ÷'ÏG‡Ûÿ\@ÿ^>§¡V.Í•°€ÙÍ1KsÉ£å$½P0¾Î龿V9ûøÌåÅ%X Î_ÏWQ¯ýºWÝ6_ê0Œ:Ä\@Ÿ4ÀŸ¨u@P&ú>è¥}þÖî7¾w¾Ù÷1?^žö£@»s¼ÜT{Dqé¸Ñ:,탾Qºs´4Þ\ràjÎÎ7Vq¿3Ä}eɇx” Ìڡ|/ZOú«7zmPþó¥žõÒï¥`nŽ9 (ŸÃÂuhFƒ¾vnùÚ¹çk生5§}¾rw캛 €vçùy©Vnª•».ŸËô¾-ZÁSQ Ý)/ÉIÏzø9èæ€<óÒâØ4Jê ¢¡mË]ëå €vçõrQ´¼~ˆûh2Þ>*J´;å!ùéßÝ>è™Ïýýßð³†x¤!ööMˆM@_ êÉ÷whÖø|λ`Ìêèš^æº è•{nÝ ¸Z0ßšsÒõtœ<¨/ÿ«æªËô¥9g¿{ ¤ÀÌjožI¿×;Ç è|*ñøÆ÷z£¿n[ ¨£nÛ­uqÕUÜ—VLßoµúßÚó‰Sîž_«i Ý9~®ª•_Î>þl¹ü²=èKw~J=ìz²] ®÷ñ§KêWÿ;×îçWûNÐÖ}£Ü)r'íÎ~¹h”óˆÖS¾˜ËG èg¿AkƒóÑóØÌtíÎV9¨Wî0¤ýû€þ:zZú¹­CÒKû›—‡À??Òë~] o®*ç“6S}—òE´ï† èëî±ÕÙó¹êùë¯-È‚90›¥ŽÉ~9/¨Q‡¸ïzRkèÆÖ9뵆Îâ¾íÑ'íÎóòU¯Ç¨«¸ÐÏ ¾[ßèVÚ6k:Úzì€>Ü÷µsÄ·*m«¶tKÛµ@ ¯Qÿðå ý|Nzmi¿?û¯7ú>èg y7d£w¹«s}‚Ðî\ÎSrÓ¹|øôÒ÷¥ß3€™L7Ä}ýPð6CÔ·JCÚFQÊ)¥u4לu\}š ÿ}Ï{«¿´X¹è@¯`žòHihyéç×¾^:n:N)‡…ÍE£ÏAo¥´zë9G÷oŸ§ÜÕ¹^ªT´;×眥ܱ”jå”ÒëDÉCÅ\. +@CPQ Ý9[P/åµ¹go^9ûø³ôWÙs-Í¡( éøüú½`úìuVžØ¤×N-Žš‡ôÍz[\.H±·[æc×,}° >æñ˜Ó‹KýéAÿ°vîÄÞmöþ>@kKÛ µzýhùI@Ï,ÀçA~mÁI]PF³´º`~²èÛ¬mÝ>mi¿ôµÇ¶mÀ×r·îzÛf íÎþyéìm§å#û  èµ^'jATQ Ý9oP¯Ø£ó< ¿F/`[çTØŸˆ¦œ{ŽlyªÔ£ô£wzÖÞñYz½hwŽÜÉ@»²\- Ÿ5‡b)`¯}½(A]E €v'<ôpCÜÏZ•pièûçó}CëZ[ÊMG·¡>z¼Ë&õè®Õ*„†º§rWç:«2Ðîì—“ÖNý];’yëTâËåòè½UPßZ U”*J´;gÉE{;(u½KPWU”hw^=åy¦öñ®Ð_}dåsÅÓ×[Í·Í@Lúê \7°ÿþýööïû@‚9€€N…À¾ÜràªRÞ©•sòüÅ-u¿}P´Ž)Í‘ÈÕšËs¿¢®+Úg䚥‘Ãk;"óœ¤c3/§¹\@_W0l%ÚQóPéûöAл@HE €vçUs|Ó7 ›ƒžÐí‹¿=l˜Å×ü£‡»§ð}0_W ``ÞÀþ5A ðúÄÚv@€à—…ƒ~´ç|+Û¬=2íÎþyh{¯›‹ä£TNÍAoJÏ:0Šrù¾üh€/ÿ¾ž÷?ö ×î9Ïï­=nôuw2Ðîœ7OÕî[óÓÕ¼ôÊä³@¬» G˜Íx=ïÏ_Ú\•’z”•îø¤;i[Óï/í—¾÷u¶îÃ>«½×?TE Ý9O+=ÖzŸfÍSá{ÐSøÞ;9zº€Ùs«œ³|Ü>CçG. §‚1ú•t~ng)M½Ý´køs‡Î èƒõµsÆKºvAI¿·´Àù}[`®à÷ö¼ èA‚z´!󸹄Ûf­\Œ R©'»ÕöWÚn» ´;ÇÉ?­óÎÕƒöörú‘Ëôu¶ÕÜõ(SE €vç<Áýìõ}ÎtT”hwjw6 ð½zÞ¯à‡ è[{¦­n®¢TQ Ý9vpïàgË‹Ãþë³ü?[ó×¹þ*»aM»ŠûÑÕ0Î ðÑvѺì6kÇßÈçDphàûЇø†Ö±ÝÝjmn::t~:i2úhotZÌa¶Çtþù£p^îê\oWíÎùòš¼ô<—·ÍZþ]eÈÂÚŠ샾Õ4Ðîœ?Ÿ¥¼uDò?ç£õ — Äì=ëkï E«(ÝÉ@»sü€. è!{”©¢@»S0Ð'èWìQæb¨(ÐîÌõÇ€>ý*î_ç(Ì=‡=ošƒ‘L«Ä\Óå¶Y»Z`Ì€Ù,-’½”Ë>¿ÏsQòÐå÷A_ ìg÷µ«· æÀUy)ǤÂé篲k—€^=ðÞ ÊÞR âö9n·ßf1€R»1µµÊûæ­ÇïÛÿ\@¢@\ÅÖýËs}¨ E)Ú. s!iˆÒýCí£ @©Ýøù¿ô æ¹€>DALô°£ûÌ-ÇÖè:Ì£ŽT6 ï›0ÊXÚÏ\P®"êvháú×7|}´o±è@éŽÎò§ÇóS€€ÑíIßûûÑ×øz½Zh=·a©§?ßßO`¢õR.â¹Ûû‡Û‡ÑN0à«¿‘ÑîÕZ¬Ã"qhw¶ÏgË~Ûï-ýþõËéG.= _=¨§`­@ª(Ðî¼~`¼·ôéVq¿êИ-¯Ïev»Ú”Ôg-ùcºC6úc~ÞñÊ]ëè €vg»üuV.RN'â¾µà”¾ßºç=žD¿Sd¨Úó䫳sTôÕÛ/ÐÏ ð¥ ½Ä %Ú‚¹ ¾& ¿Fû€®]UPÏ7]’zôë}Nxûr—Jß±GWíÎú¹h”5»¢åòWÙ;=ãô$ pÈÞ5»®¶}öa†¸Ó§Ü¥ÒwìÑ•@»³žµCÜKÛ^o}¥×‹2ÔÝw6©½ÊºôG:§Ê{Âs€÷\@ "Aûd‰£O¹K¥ïØ£+ €vg}½÷Cºú‹, ”Ô] Ú–»TúŽ=º’hwž§uOz´žó/¹\@GE €v§vgÏ 5˜çÝwVIû ×>^­}ÕgwKIýöA‘£…Zw"ï%V¹@»³¥½ûšç_0Oåô#— è¨(ÐîÔî¬ØKò }©@ŒVÒùF- *J´;)å¸h9鲋ĕ/H_ï½ø@~~qW)||,Ö€vgÜ€nô‹¯â¾´Ê`ëÀ¾ö|T”*J´;£sýâÛ¬­Ýà¬ÐûõU”èÚ½óXþhûµ }oP>Zö(Ð¿ä£Ç€þ:Ꙟ×Zàó8ßoðu{€Ø‹¹lÍqk·]ãÑë¨'öù†Ö]ýëÏß_*@¥ó(½n*˜ $ s‰€¾þ>Öã~´g}ûùä<1Úô£sJ‹´>s+–Ê]ëæ €vç¸ùLNÚ˜ËG è{Wù«½ø[«) «(Ðî- æmúpCÜó!êµÞ˜µCÔóóȇÀ×Êñû÷ÛÛû{½Åðê秺Rjýº£{UàJÎc!˜Q”yÊC©c6zNº¥®ôÛ‡ÑNpmúlwZ¢¼ZC…îWÎ ´;ÏÌa{óVÌ·Ž˜Ž’—†â¾ÿ ±ª À99l_ÞJ?—‚z)çÇ+õ¸_Ýð=è{-݉éà—î EáN&Úó笭¹*ÏC¥ß6âxØUÜ[¬QV'´Šû¾Gÿ—€vçusU´mÖÂ.·4d£¤vÏûÒêò‘"júV­{Ú¯~§ÈL´;çÏGgç$=è<•ï‡ÞºàëIzòôÜ¢Ü''uW‚¶å.•¾c®$ÚçóÞkvEÉå/>²< æzÊ;%uW‚¶å.•¾c®$Úõƒy«]¬J¯o—+sп-ù×kÍ?ûøG¥}Èkõ çûŸïÝU+LRÌÛÜÁq‡(•»Ç¿ßL´;ÇÍIµz̕ȅ\. o+xG ØÒëÄYAE €vçlyiïöjK9ªt|=xAkuG(zPWQ Ý7O-~sЃËçVäs$J?÷uN†}Ë€–æ’—æ°[þ9Û¬­ ìKÁ}oA®u<€QûѼ“òX´žt½r°ŽZ¶æ'…â¾6@—†°§g¥í>Ÿ ꀠ~ ÿ<òþ!ê"qG· (-rPûx×-wu®“O0Ú×Íeqv¹ ¾Š{í@-˜«(Ðî¤N>‹ºŠ{Ø9èæBŒ%z>»¥¤~ûõBäwhZÏH1ÊölµîDÞ¯”Ù*hw¶ÈI%¶™>ZNƒq_*€­‡ÀÇÂQçº)±hwž—‹ä=T`ZU”hwÎÌôºýÕ¥øÞסß¼¥¡ñùœ CA€ÙåÛLË9ûè‡{îû¯   à®ÅîXú©ŽÎ¡Ô€hä ƒ,÷<˜[üíìrwìúZ$íÎþ¹(_T[‰;–Ë탞ÀÚûŸGÛß|kEyô8öA@»óüœTú¾œS7 ëAÏ ÞYÛ¨• ¶mÖŽ=ú( Ý‰€.˜ÿ82ä=ÝhA]E €vçø9é¬!ì¥ãÇíÀ´zSù¾€®0j0ÏsLšº[;@çSŒÃ¯µ½öbpµ~>Ê#w2Ðî¼nN²Øö¾\þâ#»O¾ø[z¾tǧö"tW‘òRÔ . W’‚zØ÷²M@0†¸§«°îqkpnõ:ó•»m×Ãw´;ÇÍI†¼×ÉåázÐÏÚï¼dkzøE‚²ŠûJùœó½A½´Š{~Ã`ïë  O¸KA9ÿ~­À\>Î=¸ æz¥œ†¾í)¯ÜƲwjniª±©¾w·4ýöájàÖEå6j-¶q§¼_hwöÈQkóS~¼<¨Ÿ5‚yžrú±4ß諸§7rïêékW!Üû:«(­¦ €vçüA}ëñä²ç}šUÜó ë×¾qkWkÏ®Vü€ÙƒùÑ<³ö÷[í¶5ªéæ —ß°:¸´H\­¸T0 ±ßFO:Ôægå®í¨±Ó> çÛ“•Þгºµ@¤Ÿ_škQ*ð‚:0šè=Üg{™í„[­îWkÈ{ ÚéqíùË4CÜK=Ò­ƒziHÇÖïÔÝ:Æ*î|Ç”HôA}iÈ{»Àþ}p?þwÄ’:4Ãå¢Ñ·Y[²vµÑãm#P纩ºÐî¼^¾ŠºÍÚëìHÞ£ž¾nè8À\Z­96ª—«ü!ùЇôÆŽþ‡ºPæQóÑëÕþ üuh„`̤ÏÊqQ½*b} ²Œ¦4…X Ї Ôõ <ÀØA=H–cÚ¸¥Õân®ú‡¦‚µvñ8CÐÏUk5Lû  ÝÙ/_½àJ¦rz‘UÜÏòäÝ1òº»f=OÞº ׃¾õ÷”s¸“ €vç<9êìm¬£`N¹üóС¢<úèJ Ýy~@¯u—GÝ…«U@7ĽPó¯×º“söñjå–³{Î)$uð^KwˆjÝÉ9ûøó”»Ç¿ßL´;ÇÉE­zÌõ¤?æòÙG¥;Déëy¯ýºQ‡tD~ˆûÖ@ü5Ào[}ðóûχŒX=˜EZÜm)7•~®ôóQs‘9è P¹à<vÁˆÌSþYêÍs’Ä q_Ø—‚ûV©`Ö:@kG;&å"ýÔ`m.9pUµƒ´Üô(ì÷µaiÎy* Ks&5à*¶öœ/å#Û¹}ˆºÍZííÎ:ÞuË]ëä €vg»œ´´«U­\d›5©uÇ'õÈ[dèeí¢ÙÔ6 [ŒàyNr%:‰:Ä=—Õ¨5ÆŽR¹«sÝ|‚Ðîì—òs4OE]4Î÷L~§HÏ: =ÏGµòR:Ž©¾w·”ÔoÅGùœÚs.¢ÄZw"ïWL¹@»³e.*ù­=à†Ô§rú‘Ëô:sm€Ïï4E-*J´;Yü£ô×YÞ QÞ¨å×ûüFóµ£óž«¢å§×yÞ u¸w0À€«kµ˜[z(9kØ!îµç~o]Ä@Ð>—¡FhwÎÄ[í‡eÍ®iæ ÷*k½ ¯¢@»óªÁ¼UÔ‡ƒ¾>oR±µ`­ÿysΨ˜Ô¯þw¦;@ùcº£vÖcþzJ\*wu®¯+ €vgýÜtvN:š¯®šË_£´­=ñµ†r”V#\>/B‰Òƒ¾U«žö¨=ìîd Ý9nµýª=éázзúÚ³}NO»ýþøñcà}ÐÇìσ{½À.¨cÛºu9ÿÔ=®€LiHE*H£lGpV0?Þ¡øývnÑ:,ô<ÀÐ/Àë݉Øæ3‡|ß³€~(pÀs@Pç’=óÙ L¾è`Ì’_f;¾€^9€çAv¶`.³(P®•cÎ>þ´Ò†è£ˆÒ†ôgo|¿÷1_þè#ž—»:×Û•@»³}«}üèù)åò醸:w<Ñ3\Õg«¤Óq£u·ÍÚÎ .W³v*ñÙ§é<ìƒ>I8+p—âçŠÞ“þý·]#0Ä= ìeV@@8À¯[AØš¿bÍEÐO î낼àÀý3°¶Y,®Ü˜ }íê}³ù¥à.¨³å³­9ȶփôíoÄóžèÙ‚{Ôí€y¬ÍkimWlò€^¯€|_ F ðy0×sôËUSŽv$.宵=êWw{ÿpûíì½£S+ا‚-߯øñÜýй‘€vg‹¼´µçühnŠ’—R.¿Šûþ7ÚP @^¢Û¬)¨ àÅ%`$Q§ èT•‚µ]ª¶ ¿H}X¬íÎ8¶.Îom‹ÄÐ pGàk èl äÇ·Þ·}Û奮tE޶å.•¾c®$ÚçóZ×±ôx´Gþ*¹Ü"qt•zä£u€)(ÊÎ&†¸Ó§Ü¥ÒwìÑ•@»³~0?{H»!ïÏs¹t€UÜØå÷ï··gýÜùÐøÒÏ•~þóù½'=Ê*ïzÐ8Ì×èôs¶UШèhÐN¿¿ÔÃ. "-Pk‘€ÚLj¢v¶Zü£a砗ߨ:Á:ŸÓ¾n¨À÷¶æ¦Rþ"3Ú6k½—õ×ÃÞªÜÕy¿\I´;Ûå±¥¼T+ÏÙfm‚Ðû<Òô(°Ѭ]º† èù‰Q (vE¸S~;mˆ{.ïÁî5ôÝPøÚå®ÎûàJ ÝÙ/‡åyèhn‹š¯R.ýD¿ÞÁyþ†µj±´x;OÀ¬RžI9pN9¨Öˆç½û©_Õ-%õÛ‡YÿüNK﹩  êÏÕºy¿²®/Ú-óV)Poíßš—òã_%oý“˯ÐG ìî©(Ðî¼j ï}>WÉYÓ qßkih|«Àn(ü9n·_EsÑø.Xÿøqï’t=¶á|H{ú~¯“ç«Q¯V^¯Úƒ¾·àµu(üÑ;™–ÚŸÇZÛQzÐSN*å£Þxé¼fÍU—ïA_Rêaï·Ø\ß;Q{2u¼ºy`ï=^P_#Ý5€ïÛŸÿ ر÷Aï­×þëWßÿÏ~”hwÊ?µóÓ¬9*åòÙç2c¯¶øÀU\eèýe‡¸ï½sbÿtôŠ|ô;(¥yÁ@@¿„ÖÁ|ïÐwA o.ÐORZ…ý쟎—ˆ„׿­³õô9,Ú*î­V%¼ú*ìÇË]ëìJ Ýy^nZZ=ÿ¾¼t,—ßþùLJh®ôýZ=í}û¾¢jÌ ä@”\T+ÿ¤ã¤ÔÑ{⇠èKsöéã瀼Uß-mˆ~û0ꉮ]Î;‡û;yüVÊýö~ ÝÙ"wÉ[g•Ó\>K@GE)  Ý)°_9 þ:T”G]I´;Ï æK×%ýÜÖm° Ðó‚¢À¨(ÐîÔî¬ÌKA]‰;Ð_g/8¥ï—•ÛWp ÝX—Ó䧃I}¶7¼Ö°­w„ܪUîê¼/®$Úãä-yéX.­ ôÚ¸þëë>/xîp(©Ì[÷˜»ctv¹«s½]I´;ûç/9¨N.q)êJ=í (0›4"ø÷ï·7i¦½a÷A?{HûÚwôõó×1þÎ~”hwŽkk‡£œs´œ¾ÍÚÙCÛ׸|q8CàëV”† Ý‰r:ù6k{¥íµwx¾þܱžýÏß³ý07=í'%õQßèÑoÓ£^«ÜÕy_}‚ÐîlŸÓŽ.&gdq!— è׿~ÏSQòÑkô‚´œÏ ðW âûsQß!õúÆ7¾÷u4Àö÷u´£²÷\w}÷=öWë¼ m®¦´Ø›`>I@F0®¼qýiàU ê’¯NöþaÔóKwfÒãýLËùœ­¿ßê1ú>çµ®£O0Úçå0y©m.¾½4'=ÿ¹Òœ¥ßo}Èvž¹¥¤~û0ë’ßaY€—îÌ ðù{Áü®ÖÈû•t=Ðî<3gµê،ڡùO.¿J@oü·ÈU”hw ê‚ùš€>üt®]Qš €vç|A½Öõèkså]:]+Ê£Çу€vgÿÀžžç=ìù”ßœǃô¥;(½ÞÀ½sÜQQ Ý5°ËM“ô½w^Z½áùœ ‹¿©(Ðkç°ÒñÍAdúÞ9 ùˆ^çgÒ\ ´;Ç ègå¯üø­rÝèýuö?¤Ô£Ýë<Ò>ëzÔ€Yƒyiµö<í ÔùñGÉu½½*‚ë|î¶ûŒæ¬<½ãóåj¤÷ˆQ΀¹èA?™Å˜* _mùòù›«À§—«ýA³ 17@^: §åè«÷ËËUÿ0=ÔsŠÚak‘8šç|Í®Òq£­Ù5l@¯µh\ô}ôÎËkß[;¢9å¶èSõ wæ0^ð>6U8æk;\󠞎%'… è‚0ÀÖ ^+‡íû½h=ê/³ «º  _ˆÕÝÆµƒvš€®' VÐŽ65ù%ê¯'ày°^›×¬â>íý|ûµô†î]Œ ŠR‡e°×þÜò÷¿ï ¾˜÷åVqߺºÕÝ€¨¼Ôá¹~›´ÇŸKyjëHe9ìÃû‡Ù X^ÒóûWÖ?–Žwô¸k_7N¹«sÝT±hw®ÏM[óÉÞµ÷÷£çòÙGéÎ9ê@ô\Ôê÷å¯,©ÏþwœÝã}VϹôcªN´;×祳òŒ|T)—_% ÏZ £Þ!RQ ÝÙ?š.'Õ èa†¸ÛG Ž”«ä«“’z´¿»õ¡Ò©¸å®Îuõ @»s{î9ºÈöÞž÷½?%—¿Fý æÛ±¥¯ï] aéΑm€«*m×¶œ‹ê䱫x^ò}úöÑÀ¶å¤½û¦ èÁ è 'Ÿ:œ†¨U_×3}h»€ÔÖ}üu¶IS£tÐÂuFð ÀIÒñ½»Uö::‚º . 0†µÁûhPOsã£ín‘8€ JÛ¢í?ζ×[ ä%)¨_}Uw ¨­=Ü{òòïÅê)Ðx÷\÷š;žø(=æ:«ûWß÷t× ÔÑ‚¹€À”þªnïn\Z¸dž¹—XåíÎ-–VGß»xÜ’ÒúèÁýŸ\. £¢@»S»³g€_šû~õ/ £¢@»S»S€ÐQQª(ÐîàÏ ð³v%ÚÚ— ð)¨ÏЭâ@S˺Ï"v½ è\*ÀÏÊwº0ÔíNHåôîÅ¥€þtÐt@@Ð@@tЫKÀooooïïïï®l÷ëׯ_·ÛíæJð=è  ?~üøñãýƒ+AÛr—Jß±GWÚICÜóÇŸ?þüùóóóXûyë×s>Χæë™Ú°%—ßþùÇ—†–åÑãÜK¬r -zþõÿýïÿûÏ>ŸÿùóçÏŸ?·[\|ß÷#|ÿ¯¿þúëï¿¿~~ÌAíNXÐõ Óµ¢t'æ è£õzîùHÏõ ƒv'è¨(n}kp-H9çSó|tÐî%Ð- ¯ 6£õ¸;çsÆùè Ý :*J [@_döö€æGëùÔ~ý­×çì×_:ŸÖ¯?{ùÐA»Žt‹Äѵ¢zÐA»Žô—€#J=K¿W«‡sísçã|Zœ€#tN êù÷óýÒK=ð¥`tôûkÏç¬×w}b\5‡âNŸr—Jß±GWÚ±ºçžÛ´;áä\. £¢ŽtÁÌsÏ­âÚ  £¢Tna€€n_lçã|ô ƒv'è¨(•[  /û˜ÛÇ|¦}Ìk_´;A@GE 4 è½çøŽ6çØùÄ>´;áH@¿ýó. -+ʣǹ—XåZôüë¿~ýúu»·½Õ_ýõ×߯?Oçã|zžOéõÒqÕ$ Ý ßt=èt­(ÝÉ„ùz¯ÑQçÀ;磴;¡V@·:U´Þ‡ºõë/íÓ´z}×gÌë£& JRw%h[îRé;öèJB;½zDÍ©v>3tÐî„C¹\@GE  轂—çžÛÐîD@%èïãíkí¹ç#<ÐA»tÂV”=zl÷xtôQöÁ΃T¯×_{>½ö1eõÙÊOés¢ñèqþG-xZtÛ¬Ñ5 »0ß¿ßÞ|jaŸÿþ÷×/­,˜›mÖhЭâÐ`†¸Ó…!îLœ qçÔ|dˆ; C@Ð`¯.=Xdà‘tÐt@@Ð@@tÐt@@Ð@@tЀ5nï\ èçÿ„ò…­Ú›IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/sbexplosion.png0000664000175000017500000002416313657750470021506 0ustar jamesjames‰PNG  IHDRP0Aê0 vpAgP0ÅžWcbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>'þIDATxÚí]Ûu$ˤg×™"Æ…ua=öOŸëVÈîáð”ÈN6xdfU>nÎ%ûQxoo‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$’›Ë_}ü÷ý]wB²xŸÐ{%%ò_äýý¸zð$jô€rîÿÈûûÿ‘¯ëÿüüõ$’·/ˆà@9øûüâTPRÊ€ÖÜÃ;8^ßÓ–$‡{¼~k¼€ü_¿ÿÿ÷¿Úš:‘‹;£êóþDžñÙuüýg€Ðn&àÞÞ~ýú÷¿Úr Y€ó®@üàãçÑI]œù•ùýgé>äûï¿Ø¾ú½Ñ©/¼ïÎÂh³½ž%ÿ÷G¾®æü¸ŽÞ´Nì¢üôt}àÌø`ˆ<ûýW<âˆàÅg¶À¨ Ìh´%'—¯ý4òŸËs*A€ë½ß‡ikJ6õ~»hQÉÏÂ6ÐÆ«Š6ëfyÄWÀ‹Æk¥M8J$€-ÙT^0 @ˆ•,Þ€#Çîxµ¼ß =•ÿ=õ§“»(#Œ¨ªe__Ìw3 2@ñâ‘€´TïÍ8¦ÎP/ÕdxßÒ*R¸mÛ-’ZcUùa‹ €7àw€@èÞ§<ŠŽ”¡Nê¤òû÷óx ÄÇaF6 ó½*gÌØè$å%‡3#@¿¿Úe' Cª×z=ÝaIˆ™«î¨D"¹®¨EÒ*èHÝ)É"›ñó¿¢D*X"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H.*ǰòÙkT5cFò]û}µýRï˜fßÅŒžä)¥‚%[H@<‰"‘HÄ,bÂ;OaÉ@¯º3’%ªI””ÊG3 €’V7 ¡Ý(¿2×v:ô€r,Šv± ѵA§É³a«"§í?€züâãÏ# wwz<àþþý÷¿ü{ôê4úÀÈ©þÝ,oe8@ïïÿøGæê½>ʤR½ƒJ=T­Å€Ç ³þÿªŠÚÇgÏ\9`ŽNê¼ÝΫµT-ªÚªT‹§RGàá@Ë1Ÿà×Àmgo]¬¼ZP]F¹wµ÷ÿú×wWñë}ýòßßRÕ·cÂQ%™¬íÕe[Z€û <ëÀ?¶w¼ÎñÿÑk =›ñvÌ÷Ä' ª¢y¦{¸O òW˜ãçøóAù>’Jn^±ÆVu8àŽƒö®@z@œÍ„^t Ãx6ŸŽ-‰ï8ا ¹¢€D/žøìû 6¡˜0hFU¯­ºl•k.+ 1Ë„RÅÉÜ®ç³Áw2ú7ŠÅ¯€h…m0 °ÒÈ@³§z}æ³Unð< ¾àø}ÆûðÊ&Vxf¡íÇ0ß,àyLøŒ¹,úkpj¦c 0Ûa‹õ´€X@9#ÅÀcã~g`Àˆ*¶ˆñéÙ=Qï7À«U1@› ¿¾â ŸFÆö¿îÒúzâÞï, F¼áx·qBV` €ÖD¼àÙ@Dœ®x lÀ&¬`B4óQ˜~ö½xàåÒ$†yí ÛLø¼Éõz@ô€É ›Šc3"—ËõFˆ2áx vՋψQ@¢9âH.¸Šù<ÀýÞbÂ"Uì2^ cyµLZ óŠù2¶ßجx×yí”Xjˆ;Ôz¹o¶iIH ÆýÀôq¯»ñŠèle4WªÜgÀ»TÜo–ï=™ã®¶hI¾×õv–ž1ßbÀ¶ Ë„^#ÊŒl_o´+q6ï[b >N‰bhµeZÞ7Ê^_0>)<Åõ&1áר2´Å+F´êëØÁ’õèð¤r7÷’Q FLF[~·éà‰ù6óšù1l Q¯4?Æ X{¶ÞªEÛ \‡˜cH|ê• ¸Šñl_€{=>O2ˆ«Í }nΫó-ÏŒ~àmLÇ€†Å-½ï'Yî|©µ×Ä3ãÚ!å:Ù“3úûñ©ùsÖ4è„oêM[ažèÕ{< ÈY¦–HJ*ÀI¶Tõ‰D"‘H$’ëÚVJ‰I$‰DªößOášMl¦»ÚNàb—"~Æ÷Ÿ@ÉF¼Ë°©bÉd+ %’,J$‰D"‘H$‰D"‘H$‰ä–¢ùÍåI² xJJ–2Ÿ€·3ÜEUþûèÉãI$¦k0ôšŸho‚µ?d¼zS±¬¿ÛåœÆëe€x ±€ò§âÿóŸw\Y`ΨD0i«d5N¿ÿ9 ÿ`ø¿s+³ÀÌÚl§àj¯“œ=Éô‘¹^êE—V®ü²€)êY$¨Mf]Nèóso°dî}G€¢L)dLb 0¢E ã÷´‘UÙÝ@<}@$?Ï¹Ž¿UµÞe«b¼+Ë”]Ìn‡ÐÏát´ž<4^ņQÐÁ‹7ÚåWÜ~à, «ö ãцçŧcBï QàyÌ—^вÀDXí¬ ¹ôÓå˜}ª ”zŒe–ñòu‚{‘Oñ=ªäíè=i¬±ËŽªõªgâ€;RãÕª¶‰¶ˆ]L¸kË›«ŒÚ|ùœ²WÁüuýõ‹»Ž©Gô€8€'ñŽÑ8_ðø²­>àU G5ÄÇúCËV߀QÕËÞ`¶J¤x¯¯Kõ½Àp•Mˆx\΄8^ÛQ/g¾ƒ‘âÀû¬2É2¢eK¾À³Lè T[¦Á¶d½©l˜~ãŒñ9àÏÏí1M€ãyxNÛ¶¶ „×q¥*Û¯’ùF Yרj~΄=ªØJEV93às&dëöÐpO»€ç1a¦Z%딜Þf½ß,vвõ²À³øªÿ8 @¶àmúÚ®|kà÷®®Wn|¶d=@– »œ’çá €ž*Fè爯§`4åVÀª0Lð<~O´àíöc‹¶ Wõ’­v‰Ðg®x Æ|¯ÍŒ eZÑ*™mȺïÕ ˜aÂj ¾v:zT/Zˆë%°ÑŒË°/=ˆàuy¿lŸq´+1  ì<8Ë ö 3³½h½Džje€çÙ~lå4[ŽåÕI¶5ºWMÈôm²ÏèÎ㙞ÙësàqÌ— {¿¬s›¬àã ÐsJŽ×âÎÊk q9ß*æ‹–c¡÷iz š"ë•f RÙò"Oµ<âsl  ÌÕZ]uÙTe´ ff­ ¬RżŠA¯^¥sl¦ÅxU¹ò¬Óæòض0ÕóŠ«Ë³¢CÊg5'y}Äž·ËÍ:§)ÍGˆ>ñÙƒ`Uuõí6ë²ùüɲX5ÎiÚ4½/ÌæŠ£U h@¶pYàEKî_y¹Gjñ{Å6? Y&ì¢ÈìÂëj½êíG§dáCÜ9àfb_¹ŒÕΚ:å1gt˜9ú`±Ðqõ÷’<žh¾Ì¨ŽïÝW*`¼AìX¶îéSžª¬ššX‰‡b£ŽßÎ*¼J~ D»9 øÑf"OÅzÌwÙuÑa9]ËÐ*’ê(Atªë4½ ˜×8Qàvp40Šªˆ*ÛŠT•jf'Ÿ²©F´ªå²#{£q*6žV5yÁóN«T*Ëxø†¥Øf¨·»ž£ŒÅ©¼…0,à,à¡ë²r{¤1¶°FÀK±fÜY”1Ñ Kìz6Eè;¯÷_ÎË D+¢ïÒ›ñbв[£#‚o^íly·mqFv(?k%梪põú†U€´öüF™q[æ› ¼ìš†l¦®Ÿµ‘½¦ÄzÑËÐú9; ¹Ú)¨Z‰µKÔ zŸ³÷›"‰ÙÀ«Zúw·(BWêqúýFŒèžÝj†C?÷UsêY@¢o6À=í D×'Dw6†ë®ŸÌFÐs›> 3jóýŒS=Ÿ}\´š¦ÛFÙåAˆEˆ¦ïWt£¸ÇxÞèÚzÙ}À³?'ëTEmÄqØ:º.7ý€F¿€÷İq§Y9ûºêÁ‰æÜ½0YyØ&›:ÛÆ›J®ºä~50Ù TÞ~vµ™K,¨ ‘õngy©UÞ®b†YÌ&P•ŒÚöðùF½\/s±ŠñªÂÙ‚Ôhæf¶íÈfX¢š.hfã{«Â)Q#<º²j÷Üìøݰp`å˜ÃDU¯WÂn(¯î÷egéXͽbÀœ½ˆÆ;‡*§Ó% žêõ€×mëE33õ@Ë“5aV9)Þ} «bÖö‹2_× ã—c0üʽÏ, fS­ULh°r'yqqàe—$Äî¡IQ& ×V1_·]¼œ3‘w^öbµm= €«¼\4˜uºú„£@DmîYšeÂ0­JZ6°:‹ùº€×µg8 ÄÙ÷µ¹igÄ÷z×Üö±²&N‡69å㌘×eB¶\Ìò²¶  @ë±ìŠïáÌÇÅá²)8ôõ²@œEl†ŒUÅ&²ÑNüý°&Þ†N&ð~ÎqOU\e º ¸Úùèf>4ÕMÁyÌØÍ„³Sve ˜6*‹lnæ³¾g•†Ú”]L¸=Q'¤€³m?vðdï Q£zV…tvPæÕºâºU.z­h Ül}@ÏØ_]¦u×¾à®ûˆpZ¹Ú#Â2á.Ò³LF˜<6ÓÑþù-[à*F<ûl˜YMFQày2àn¸lØ£jI^÷Þ}:ê•ξ/ÞºÙ²É딯⪮ù€œíì-Md'¥†U±?ÒKÝ­ÚÀ³ë„ÔUß;ºÑ 4—}O´-/ ÀÕSçg͆> 𼞙€ÓØDËqvcÄêŒÁnŸ'Ú׋îgž¾»jl×Ù˜ñl@ðØaTÖ ðòhí¾7dW f¬Ý·ÀÌèÚÐ(#^uIaw\¯xÛÜß[~ÌT¯e½Ë¶Ìª%…U³¾·U^Ø&W[½¹¨jA5ú9³‹¬g-¬ž®’£ñÃêÖl8dV`}pÙ8äªÕÛ2`”³;çºVh±@E x³[/³²÷=N«Ú°íZëfW†¥{úi¯JŰN‹U…ãÝ`žñÍT6•W¸l`Õ>æiz–£›Ù«Š ºm¶nÀ)à_ ÄèO–A«ú‚½(€×—]ýàœ=ÙÐ(“t5 G_ÇÛ»[´ËÚv«®lüËæó&š|ßï# ¬m’]õ…Õ€0A祻°tö5ë½gî¶ÀCãiUÜÙ@í*p€3bweó¬+GŒ¦ÔIðî³×?›e°]Ã$즥Û1šB›Uš2»Nø&^wøgk-læäD2k*Ìv&¤BOêätFŒy3æ‹2àjSA=2'·õf‡)º˜QqÀÍm¹l¸#ÚpýÿÝ6­¤9ÜR­Ê¼¸_öõWÏŒ‘LòR½ƒ_•1ñ>WÕ)àÛ6]•È« D-²ýѬ³¥0GÐVª³ÆÖõ±Í?Ñ¢ˆ`é<@®®fɺªU Ú"pšî¶Ù6gût1Û5VUV•T€NXµ†Í ¨o«j-àUÍ2džyªÒc”ã÷Vµa²m§èb˜Ë1:’"Û€íÝp´Û¦4«*¦ ¸Þ~âËM‹NoŠª(öÿ[ªél©-tüË hAë¶áœle²7ªeºUÛ;Gé®.AGœ°šÁzíÌîÞ ô‰]µ¥swÓ§*îxüÝ6©?6ð‹fªŒê»Ç·¼ûQ¯2ÉÚ™¯Ëh¶TƒrI¯È:mQoz9³Þl7àXo½zzÖìý¾¨íÈúѰÎ4õfY'¢û{uÅóº'·f£ÑðÖ´} ¬“a„Ygbв—hõËê‘ÂY –¥ø² ßìuߨè8µ®"ƒìØ´®É¨WíÅYÓÎIÔæ‹ˆg­k.Ø©¾vϼÎÇ3c)@Ö¥™Ï2Vwc¼(3w/ ÐU)´¬ÍKÇ £ë—sá½N— Ì:'¬- À´rU©6ÖÛE˜õÚ³Ø-œ³ãžUd'8˜´n€÷Ǹ‹êE¯ŠáØ@öø¾£ ˜eBTCDÃ2å´¨•'U°€U›É=TyÝ]ª%¶N°Œ»êûXÛõú²Øãß{a ¨óÃÞ×* á•O-`Ö ©ÊxÌ ejðqÇ×õ€Qo¼J{š" @¯3ÜK² FolÔéˆWFsÀ‹zçYZŸ£Ê”º!c è9!qÌ©â*²u…(­¡KÓè…ì.+¬Ô5»›”Øiw8&ëW•imÏ€ÙH4ÁÖïeh<2𢫮މfÐà@ô~äêûª$'¬àì0L­¾_ïX¯iF½âl?q–éPÛÔ«D3EU\– éD)À*UœbU]au›éì\0ûÀÀe{¨’mvÉgDb7šÍ”°@Ϊþªæ«hø-›³ ;zc?r©¹ª"…hý_Õ‘lA.[HìÈŸ­¾ašq£¬nBŠvEs±UsýPày©~¯H,“m@‰#\9Õ\½7$«zX•0ûšmRbØÝpH1aÀ…¨^|Ç{ál<©:;ˆÝ»æ¼.¹(ð²­–ê…M6Ôø´tzÕ äYLX½Vý;vñNW÷_ô|Pgu¾à7öl–lãs´û* ÄlX%;A!ZöUÕ“-Å/ëfmÁ®!Öì“VÕ5" Ô.àe'xÿΚmdãcYVý÷(£3fª½Ûê9Þý÷fÑïkÅÙb…jç}£ªyCV[ ¼²I©YUÜ5”œ?ex?õç ¤ŒÀìés®ŠJXŒJ Ê„³Æ¶eºÙo°«dvbðôuï³ÃwºË¹¢ª™( °®!JÕ+ͼû‰ªÜ²r,£U!ì,™ª.­( ³#{»ö†D5[´Ï7›Ê|Ë ÛÇšž!ì<».¦É6¶³³x²ƒ¢ÛLËŒ¬Í]^X¥JÐ1j]‹kªVwU1IÔt‰2Ý[—DmÄì~‘*§³V½. ´ªû€›xçʧš¾O8›ÍvmE ε§]9Û*Û. ü6Ulýþ* f™½«üj5àØÏëMûõh¡¢WUS5ìz–©Q}­r£¶ Hö¼ÛmÀª8b´nnÖfuÔ䘽`:ZU¼·Ý%k²L¹ëªJ‰¡NÚR%žíˆ2FT5G{VÐvÝWïsxÌ…ÂVÅïNÀÝñ©êé÷³®GœÐâ8 9«)ºâvÓ€hMGªžEùU½Þv,j“uÇ£”Ó2\4µ—-Ѝêùˆ¶yv¬p—U¹(«2/³¼k–L4¾˜Üí€gËKéÌîÓ ¬ªT˜®©Ø!ZÑ}~Ï)ólgvs•˜ü}˜³€“MÅEmb1\qœ0úûÑ@i4³Á΄‰ÚºܦŒ™ÌW—;Í2æWLO¡«N­Ê)È¥Ž&¹}8¤Kº2+«U–1Y[THšd+dëì² T¥zÑvEÖvÒ6pw/ kkŽeRÑr³hÕÏië÷΢ڲZÙ×AË«,Àu_/ÀY%ïY•›e¨l¸UáÙ9Zì0»—¦]e9UC½Ç¬jtó;:)¶«§¤:³  U e hª,;"ØZ¦8û`ª€ O¡wˆç2¶#ºíñ¨ž)Såå®:0tst×6 eLOu¬öòvyò«Û5guï-«¤ÎîŸL¯žªÞfㆳÃ"Þû£…«—‰ß¡6I¶¿ËÙª ×t3P×÷¥×)ì¢*¼/ì Á©¦ð(Cu{¯»-[|Û7;—/:j£«€õ&³ÿÞÔ*Ídi¤(§3º`†m¦éz@ØqmÙ+»âl–óåMV`¹œ Yàu¸£í—èËñ`¬¾àª)÷Õe8¼¨Å2@z¹PëÏvz¢€c›†²ãÝØó®8$ ÄåÌX¼lÉ}÷ FO5wÍÌ2Ê„Q@¢KÓ€_^u} jseg£*1;˜2û±¦ z¾ÞçbqÐÎx]ïÀ¬aáQ¦ë¾fÛCÑÔUÕ<ž­h%ÊÉ«{«Þÿ/;Õ­é.‹ªrëËæ²ÙÌŠÇŒ&¢`냢O`µÊÍÚtèèY6.W]›buü-È¿;X±zvs7ãÍžå\(gÈV¿D3]Ùê&hAd6•öÞQèJ]VÇ7Ñ5ªÕ@ôz]Ü×Ú(ÝËòº¶³€VcG‰.ìþ<®-ÈÎ.°{ýj÷¾î}Õpòj V·¥¢ŸÇ\Xm<:Å©ÛÖÛ¥|iö¾¬÷l¥«>gt({«Sg]ÀËh»7%Eè.¼Y»ùÜ×GX5> (Ïn+¬ò¾«&v1bW.— ì§0û­â€.àe‹fM±ï¶ÁØê–ìým`óyr]³ÛÚÖ¬jîfBë}]`{)6UÕÅ|Uõ‚U€‹.¦®^êõ5³6wQ Xe[±*7«’²ÀËnLG›µÑ)],ÙóEÃ{æÌ’Uì2Σ€‹0 ÔªgtY¤eyÌ.~Ø…³#6<•ƒ:(ðŽ`ÞÕàñ{hƒ~G[¼Ú 6Ãw,v…]ªŠ¢Ì‡%zÍ2aWW\¶˜!gýÏÏÑ@eö‹wÅû¢Æó±€Bÿγ«lÁÙ¤Ã/Ý È2_=Õë" ¼(€ÑÁ“] h™FÙó6èõx +¢V0ÚŸÌÚx,`ª^¯Ë4AÃbU£=ÌóeûyÙ‘­réJ¥eˆÎz®t·m\ÀñsºšUYÕ*˜ÇÖí|°€aã†Ù×Û€hi¾ @¯¢u¯£NÁj®VÁ]ñÀ(£ÄCk84þ—ýÚ]½ÁYFÃ7ÙQÕ¶š’ólpZ“¢Éùª”X—-˜ @W6®VÛÜÕ™¡(ÂÑ–»8+ðÍù²³þ=[%³K*.£mÀ(£€¨®Ð2auŽ—õ¢g1_UÚ»ïn`·ñUÅÙ2$UåZÕ•ÒY¯·*êö‚W•e™ Ì.<õ×óe »p²¶Ù*/°º°tVžá‚vÉE ásìj8–ÈϪ¬êvËV<ÏêFóL„®²;øüªêò¢7Ì›\ÚUªßÌY6žG ž-ÛÕŒ´ÙîuôÏê®Úq×Ýøm_tUµÓC @G?°åEyª¢{$G÷¾.À­žWœà–cyqœYë1á.kºMÖ‰cÇèeï«)Ä7шùìY,^u÷“}4ÝÌúÞ]í”UÎw>Ùî¹·*v{§ì,èݧgEÃE^C?Ë|ì¹¢3Ü0Ë€]{d£óæº'¦Î¶%£{NÐIÕ çl|ð}¡îpLUÜpöèÞYÓòÑTŸç” NÃ,›–ª”XWàšÍ`ìHx–é‘]¿PmB•3[8ÛhϦֺÍÑŒŠWeS5³§ú–ӳ߷zGÛlÀFß¿ŠñªsÍm€BŸ¬Ùñ·n@¢ñH ³L…nÛ»k1Qy+ÚG¼ Ù‰ÕãÙº™.;l¼Ú¶L«Ül!kô‹ÌÞåæUFG³W³Ñ†6Û³ºîoµ±Z Äl•L׎¹.ÛnÕ¶‚2÷|×…2Õ€œU„Э)ÐÍð«2I´Ó’ݧ»Ë÷›u]ý½PàM³ùªsšUCº—?'4“´ ãUýUÛ.³ß®¿+pª3ZÑQ Û¨b4^X½vu׃Þ¸UÀ;íýªªjÙm fwê+š`M¡m­ pÞžá]3gSÉÙaPè럘«Ë¨²¢¶OWªj«·Lªvtëæøó¸qÛû÷l ·{u•Jö€dMÓªâh±*sySØ*‚ ”ŸÆ‹]å=fm¹h‘AUš)‰NÁªÞÝ¢ea„ª:»¬M‰Q•)éÞåÃWhæ„UYÑRwP]CŒ¬@1UèÎ_–Ñf\YÕÌ2oxhEñnm¥·Z•‘φkª†Ý&Þ&€ç€i©FÖ»Îz·æÅY™ÅÜ·ñ2e™B’ = Ýí’‰D"‘H$’ùF¼Â&’”S±Ë(ßê~‰¤äa×äJ6S‘g¿‘!gÍÚ9­|~Õþ¦œ»öûwãv_Üz¢°=÷º½°%ú’œ-©;âOwF"•¡û.• Y«‘ôÄMzßê†ì³”*θ9ÐÏ6P€ÜpÙ®»ÝSvz¢ªj—<{£Q×L›Ý˜p{F<ûHÝlÃû‘9°f´dãå5oæÝÎX´á½{Šþm¸+à¢3bÐÆñê­—Õ{}Wû²]qgW¹«·b®I|:&\eŒv7¢WGËs—>åí€8 xÙ€înѦÙ~ÂéY¼æêLDõçÈÎt©ž R1{]Ÿ×*Ôœ5Ä{àvM}žxìØ2–f­Qèbn6“sz&ô>x´t;:mÊ Ÿ\ÅHGm_oÜÛn]Û3»±|–ªtáw4¬t:UÜåõFÃÙù{»1${Qf”B>¹lÆâêÑô÷ÎȦŸ¸.fSfw OUðöL˜e¾³ÝÀYu~ì&÷Yßo›ýž—Æ.”y“<µÑ»läË©xGXgnÙ-|0ëàÏVÔ0ý†±Þï6+ãOrŸ/ÀÙ6 ~¹«æ8igq—¸ŸUÀ)bQ‹Y<ݼè|W¬b¾UL`5r«7¤ïfü¯Vi»>ÀÛµuFÑW1¢»œ€Û3àjgÄZì¬}·ÏØ WÎ ™…\€w #DMŒh›§ÐÙJ©8<¶ÉiöçÛîIöˆÞÀ³Wþ²Ÿ;kóÝžùP fŸà«5tŸm²ÂéÈ.ˆF4Û#±ºKï¬#=No*eo {U7,k  ¶Ý®S¶.c£W·+f½g}?¶ k·éZmï³Ë¢j ¯ž¨ÊæÀwU¹—I•V3“u€UW= æ¬./×"Qe«­¹‹ؽy‚«‡ö{oË|Ým’Þd„ñuØÁ‘Ýó³6ÝmVΞ’•ýÕS£á‘³ÏŽÞŽéVëþhŰwÀÞlgk"ÃU‡”_.Ì2ÛY‰2`¶l ½ŽÃÍuà'{BÎæœœ­¸BBðFU®ï¸Óʬ:Âjoº ˆÒh7sJt@ú^—â]Uåå¾·žõ9¢\ï¸Ýwÿ•R}¾{2;wqúùU1‰€¸ð´)T hŠ==àºÐe3ÞÀVæFb‘­€®¼uÀÆ^«d³:ëA)…wÛh¶ΖæßÆ[•ÍYS–{emaÉMy5@ŒÒm3F²qt.‰DrOùj¬ ôqÎ*IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/genocide.png0000664000175000017500000065642613657750470020733 0ustar jamesjames‰PNG  IHDRôô$”ž vpAgôôL´£< pHYsHHFÉk>\³IDATxÚì½-¸G¶¬-8ÐPÔPPÐÔÐÐÐÔÐPÐÔPÐÐÔÐÐPÔPÐp¨àÎ7yß'befUeUuoiÎwõʹ7ö>+÷‰öp{…µqNúýüÓ+ß}÷ý÷?ýÔþŸöÆlzýù û£¤ÏÊwö?çšsÿ³|ó¦mËýëÓ¿ÿýë_ÿõïüüáï¿þñ¿Õõå}U?qo©ý©«s{ g¯/ö[[ælWyÔ´·Ú7ÿþÝ»ß~kÿ¿í…þ[ÿÇglž!ãÞàÎðõÿý7^YyV´w½}»¿ßúûÏök¯~ýõ§OÿýϲdŒ÷Ãz7nïÚº–¿þºíÏ<Æë±¿jŽîŸÛÏM–ý·žßcï<•¶ž›³½}¼†sßô™ØéÞ“½íý¯¿ÖYÁ“„sø*&Üþ+®ÍvþüóüyÝ®£öé,¾|¼ŽŽÚÕóa{©ã´XVöÀY$6ÂÆ~¸rtÑþøã·ß~÷ÝñÏmg{à}óÍwß]9•LJÇç+KfpçñŸõìOXüùç/¿üü3Ë|x\¹å鯸ÈÛYøÃÏÞ?Àèþa¶~Yîû-x1:?Ûãõõëo¿¨[ ûFóuñ9^qóGõlms >Û#(×SA¶!øtö €9Û*¥òüÜÞÃù-Têô…Ö6 òÞ‚qÀq® ÿø÷¿Ùÿþ÷¿þúë—_Z‰ÁoûRd êõ% £ÐÏ ‰Ù1š»màÞï1þ}ûïß?ûDß—ëžyóæí[Ý«½··Îüý²sïŒýœïÿé§Ÿþõ×üî»Vf÷äE-¥öËžÙµ°}V«ŒÿöÛl°çûï· ïxŒ¶öçØ·ß¾}˽ev'Ì3mõ:šßñöžé{ôÁ:è¹7žG{u´Ÿ—Öüþûüé§÷ïÛ™¼uÔî|k¾ºÇoÁYgàž”¨èª•‹ïB9}ûÛ'¿yscœ¡t÷iÁ\^8 ¨Õ¾ûp|³_¯Má*VêT]r ¼Ÿý,`%ÉKtöN¸14ãůÀôv|{É¥ø_ÿõ÷ß?þý÷_ÿþ×àˆ˜§;ßîûïÛEÚþýüó¹Êx¥ ÊÊílšŸ»\·þÖ7µm˜¾Ý˜s`õs¼Í[@aÎPn­ypoÁÐÊ‘÷ß]{èÜ­pÿ Úæç*䪀Ô,ø |ì¡[²PÀô?ÿ|ÿþ×_ù™¥aíÜ‚×sXYa}¿Ï÷:0*,g¼ïü›òH¦ÝÛKuÏ·;ã·ßŽƒýŽÓþÙÅs vðøLð_µmiß'N_Îe±çW€ûö6‹ÉlÛl®t¼^jϪ/Aó<û(÷¯ÖÕçÂUøÛŽÄÛ·?ýÔ8Ú+\æö'¶£Ü¾øþÏ·ä܇~ RºŠÄ8‡)†ï¨0žQ,5$÷ö­)¿q¯´â£Ÿ¸_\ñÜo{fVÊ~Fà~å ñ A ÿ5pt³¸S+.?~ll—ƽæÚUÆþe–ÜÆç¸¡¸y}Ÿ§üøøñÏ??|øãß~ûãþÑxçSV˜ìǰUufkÎm½‡2¸?ÏgMd³ÎGg×–ð`ÆRk ÷¯ë=Ø·ÆVÎoÍ=ƒ¾%·X-¶…gåd{Ÿ^™Åæ~ÿfœñ^O 2 HbUÜ‘ø@ÏÕê{ÅQA2Û·«Âªµ²ª¿[Π¤íë×Üs[ùÝë9'=¾"*'¯ˆÕÒhëÚ÷‘šq{÷Ùèï×ÙúoœŸÇþÞ–üÉÕÀ¥àHÙfí™PìI±woÑw™ðϲÖuRõÀýÎç²7¾þú·ß~ÿý?—ï-Uz'Ÿ±%3#8~õj›¾ËÂwãs{8¾ÿM?¬P"ÀÐs«À=UìÙB½¦U]çÞ¶Áý¼ØÛVóÝ?|hEiûí ¯¿EÔdíõvQ1n[»þà{Úÿ´ç¿þÚç®û‹sAÎvù±Ϫçgã¬HƒißåÛoŒúð᫯޾ýñÇ} Vý”½^ÙªXë,k[‹[oIUIJDBÓÈ þs,jφ¹^û[TÔ¼¿‘gCNMp~¶½ÝÎÅ&m=ê¡%„Úº^V¦_ÎAêׯ³ë5Œ‚½3ÝËñS¾ùF³kÔ—Í+ÔÏþÖÞ{N!-nÞo¿¦¾$4¢¢bõxÍŠÏ-›hö²}†¤jÿqz¥ë_o¿J[YÏÑ{¸ÙqÂ=b÷Õ¡™ÿ?,¯Î'ìóÇõ=¹W%ÉÐßX‘Њ\GðâÛýŠyaÆ},g‡FIR»´¾ñl²h”·=¬ìu¶tÕ=üÚW`ï{]…—1Æør a]r?§È„îù’€»ï{× ¡õ=e?ÏÆ¬Ÿo½~ú´;òƒ›W7Kˆ{Ž.×4I/3ôyõÓ)i®«äïm ЄljÆM¶n©vy–fîQú³»á£?kˆÏöê‘HãXãn‰•Ü£Pá¸øÙ’p¼zu¶´0gÙ@óȆ®î±ôÌÜÙPlu—‚{÷î‡~þ¹1ñ?Êódߣf~›ÝoÆ!Ô¾^•µ÷·¾Ië0¶~×ÈÙ÷ÆQ ´Â¸k´‘½a®˜ÌYᘙ{ •uñá>]ëöTÀ¡ßÂnÞ¸|š½Ð®~k{÷Žò@“]U[¿çåu¾gµ·g®º™q>Èuä®$æ,Æ@±W¼ŒXèª ÕOØ3EÎöóâʳ8åXÿÿÑ&@yhÚs”{éž¿`{Èpê5±Ä*p¿ò%¯B¢«ß}ï1¿­Ü}<¬ÿïCøjKö“ýÜb[%ŸÃsk·Œû*=›šåñ—Ñ ÝÛg/oƒj¯Ï-†Ô{FxçΰS“~¦K®™»‰" ΰ¿×âìS¼Ÿè­ßÑÎýï¿÷.G¾Võúõ¬Õÿû<÷þ='—Œwÿùg“«ôêím¶~¿0˜om/Ã3XŸ kÒ©ùy"î¾’Ç♕}[*óçÚVùªßb6ú϶>œ®ß=ÀÔOôŸBôV×Åìþñ¼?yöújǪ š({œ}³­Ï]é-?F}pùàCt,,ÝÅ}p¯û„ þ>¿«ðeI—çøÖ€þ.ÆËqöÿ¶ƒ|Ì.èu®ÕQÄìBa¬¦ŸkÆyE!}÷ª{ Uý?üð(íc=<’ïîçó2’ Fʪ;.ø•Uâád÷w¿7F|·ß²ïo<ñú÷=¶Aí#®pŸñi9¹[åÔÛµ±2̽úe©YlwÜfzd_d³Ë3Æ}\^;•ô­ìâÓëh{F¿•w¤V}zÍDõèåþ?W®è¹«ø r„9„#íx/ AâR{Vgß½… ¶XÛª*}¾?Û5®}97•Ï)ƒYëÇbÔv]nÙ×¾ì7ZÓ”?Rgq¦ºÃyoíö0÷#ÈÙùSû!Ðsëâ¡ Ë(’Yçrž#9xÙ‘Ðõbàø=ç”aÈZú©ÙC—w¶cá$ÿø !ÊøêÅaº­?¾ä{´BñÜ#'¿ÑÐßà[aÀú‘ucûܦ}ÿñG¸´kgõÈÝÂè3G $=7ËîÈ‘©ýKÇ÷ï›xfÌlÅýì±ì[lîŠcU¿þ™ÎÜi~XG0¯ #ð}Nñ™3 Mtqfêé¨ Ìà$=ך¯3ÅfÇ]‘ž¤ð´Ïq¤ÑñÙ>/Åe-Çêó{wѳݼ/GSþxAï3Þé^®î-óãŘòõí?Þ¶—Þël¼¼–äñÁ Sà~ 4o¿?Ã5®€ãgœôÿ¹ËsGçœöh¿¸âÛÔXD< VØßç{Þ3Xƒq^Æýï9úg ~ªÐÏ”ýÇùiv¶uŒÆ6ˆCwMý¼ýž#ÃʳÁX÷{)ÛÅðÿù?Ÿ>ýóŸ,[Cû÷ßqjÚJî܃òwp÷TémŸâÝÜuYfº§t?wöQÖTù­ÄºÛ¤AÃ`?ý»¿0œºÏ[¯ƒû•]¶ur¯lÃõ€!Ÿâéj¼ª¼SùÍ-Ÿ9†{f±7ǰ:ÞúØcôéSƒ†ÜVŽoâÕêZq}ð÷Þq9ŽÅÙæ$Îù`È'¤ñ]+½âP–x»W¯°ØC’pGO¬ÑE+ÇvôíöxÖ³%´Aç9Îéyô:£ŠœÉ¸è·D[ª÷-µ÷¿§ßSÌ%–¥ +¥]~n¯ØÞÞòãþÉzçm¶\ [Þw9þ6݇=âÔ9£ænýûåÊ™ï]bV¯Îªñ||ÖSi'+ .ÏÐswå:ú.gÜê9"1Ì?Ðe])r”hÞÞÏç~ÎLN’ órñÞsÿ1]úíÏZ]¿ïRõiû¥¨óÙ*b+M¬¼zü†>¯vyˆ/€vszN¼mÆaìsØÜ G›§—YÖ(ûu/Ø=ìñ·þv³3ÆýVÙ°=–§­}\èñÙývÆ=w˳¨Ý(•{J¬ÏqQÇ|{LÇìË8¾–Ÿ%N]¼,ŽÇm,F!FGQ83þ•ÄppLkýS¾ÏvW—ýyfŠúÿl‰²U,]K$=«ã_Ó¬+ܾYæÝí±¬<Ôç îö5¸žò[Ÿã–¬Bê£-Ùrî—ι\ç똡ï"¶Éž…]/æ?ïÖ ßÞf*¸×®ŸùøÈAª¬}Ó^ÆÌ“‹õ\ÑbÔ1tîE{jõ—5ýüÜüz9WÅ£Sû3ôîÚéU5=o>úh;ÛÎ? Eâ05¥`/SyÉ‚êÜx랢q¶¤´ížÛ ù×׿þ.íK»˜ç€ó[(Þ:[¬ó¸áä¸qËËzunaëu¸ –Æêÿˆ5¯ð×ê+B#Æ=G­|g„£zû¶Ø-й”ªú³\¯ºÅ_j¨ÈŒÎYOôè@9£@Žy÷³Ë#!Ê^᪠è^¯`­0@›¾êfö(èGäÍ ï¹=°žó°Õiy4º¾þÿôAÿ;Hã*¥ÈSîly¤¬•…#p—0cuÌÀ(w<ùÔÍ»Ü{*öõ½º‘÷Uò÷°ÓcüdÖÏ“.þo…q?n"‰^xWƒZ?ýDK} ªØZ“ësø¸?¸o]`£òxëôz¬ϕ߮îGgÌà x¶LÊUìq¦Ápðß»Ay´Ø0nÜWŠ‹÷ëÜ.áwWŽÚ>SÎma Ž(£ú ¹þžíßÒ hùå—wïšÈ\º°Ò:²÷^Xký„ d)oZѱâÆã=ßü Zùû•Çz+Òh¿»uŽ Ùʾ=ËÐ@aÍ#ÝIæØ‰èì”Eÿ¹WS´÷83ïBÞ«×Åçy&>§ëÎ=;ñyÓ]öAçÝ=°}ÞnÓ"{DÛþü†þ6=¦îðÊ<ƒ»Žñ‹Ÿ3™gkŸÌzÎ[óuH”%ç´ø+Ö#+ùåÿ͸o­H¦f´ì÷7+jõu'x[ªi=›­~ý¥oÛÕõìðñrM¦`ÛºÝùÓo§É®êt_‚Ý9þ¬ •âVˆcô¶ç¨Cr¾eŸüú±°a…©Ýcp%ËÙ/™¶]ÄYµGÎ,|ç¼×ÇÖë[¿5³/t9cn¨ø¦m‰Â¶¿¾5êU1Î$që±q†­Oß'x{k»&^ºzmš¬A'ô»H Á#èñw;ìK7Ïß¼£¦ˆîùÛÅ-g²ei+|ð‘¼äó.3nïÜÛúŽs²¶Çì+÷®až;J«©DGäÝìº^ûÄU¸ŸÔípŸ]fO}_¯sæK®Uùg› [Ûù¨¦Ø5Î{e«|(·‡öVŽÂ3àûþç®]x0‹ø–Ü}°ÛsìñŸœG]º’©´[Þo¿!+@¼ìC݉Œ«üÓ£KçÏg"»ïúÙ­ð§^G_§WîíÕ~`ßl‘Ù†1¥uÕboß)üŽW’€;AT«{c&;¶8ÜÞ’¼sB½{×¶Ç"7ýCÌ_~yÿ¾ú‹u¾9Qu,ÕþwˆUî8>~:Ú*¤h¨޽Æ?×vž?ë8Û×Ç"5”R"jüÓ™}5ï¿íã¥3hjûýÛx /C·¶v«›º`ñ³í¾õÁg÷9ð½^Ó\ßM*?îkªYõÉŽ[N ϬgÎ kRg,½•ÞKÞܯú4_i²¿~͈Ò÷ß,θ|Ü7=<Ã}îûWô‘Igq޹ê9è|fas<–º ÔûÐÏy”uÇní:2iTœçÏ\õ[GDÁQzÄž-ÍîÐöÖÎ˪u‰Œ ò¡³©ÃGÊÑQ–[ÛŸQ«w¡3Ñ]-wÇ|€—¡$^šQ~Æóú®mS+ÏÁÏè÷ºíÚ—Kع€½ü™­WWp—~ÆaNŸ=š×PßUÉÕsl­ÿy0~$ÅÒüqøeVÆ’Í<ã–wö3rÆgí;·#EyŒÎ¶ÏtZ棨wŽsðno2a/’¦Ž_À·[)Âv¤žé¯†mRåÉ“%â˜u®ø¹7HW­ Wò,·¶-¥) ·ÇÏUö}Ë•ü«¯àÉæ#¹uûÉ1XU¯ÇZi,IÏ|q¸¯Ÿ ˆ'±ë=¶\]¿¬«‘·Ï–Þãh%@þ~iqÎ÷Æ÷™~˜ûÿåŒ>#©ô,ÆØ2>;_vï>£kàìÿߣºÙǃ¹íÎse`ôNáwVurôO€û^-egè=Ø4ûóÛ÷ña~œdåìsï¿K’ û²bŠŸ;Õ ~.>㌄à!–Žëà9ç÷LgÜÞºë‘1WZüGF}Qq^gÌzj¢ ·Æ›ŸŽ)¤ÇËs%„ŒfzG–øëÏm[÷ÇCÏ–LÛ qugß*VV±gÙy|†¬¹mKhlÞŠT 7¨åwoÞ`±jßÏa5û¨ÑÙ²\wµãûÌ3ž¡ÿ)Ëkèâ¾êîßæxëcp×–°pžá¤ûyƒõ®uÆ}]åv6`=:ï~ s$YY¯<î|½õ&ÔÊ¥ò¥)Òú¿´Ȩ»O=N¦_¹~ìãv¸¿yƒ®·yÕ$Óy®'p•«Ø÷;_w}^×?gß>J÷†ŸÞ‡ï½ú6óa¬Uû3~çGC¨Õ»fß#èJã8-uï1³Å»ï­³W±ï;šß+ð÷xG´ãØJ5%xŒ`WçÃ|zaý :.‰ÛÑÜw?ºâöòhqµ_¿=#’&»_Š\d…_'øÖqNëIÊÀqÅì¬cÉØ±T–ícC9ÏÂ÷g¤·¼­>o9Ú‡!žîgê$7«'ÌYÈ>æË`ÞG‚àÙwÉÌÈù%´6º® N®îÃÕGïÖ¿óVhãç^÷_žëËõ˜$ü>¶?Ò<ñ9—Çݶ¯©½Ì<®Jù”o'GžiM`Ê®®}s~«¹§½pe»h9/†Ù~϶ûʚ˖ÜeoŒ¬Œæ%—ôC«Gž-ù¨ Ý[¤YdÒ˜irñ„™#ÉÒ#ØòjÛÎðœ][ ÜB²¼«Æy–ƽ~ OŸž'ó«ìl¿÷^2ÃcîEcè%Õówfœö±ÍÖ°HN’’×Àè5¹ÅöÜÎTŸåÎïCóujòüŒcw'†lâ*³ÞöºÃæ®Nnˆ£÷g:ƒ3póÆÍ9Ø—á)Ép³6s\|Žð©ýÛÇú¬Âz ·º‡·»7Û7S$ ÈN³;ãðšËæÞõ–ðúòÀ}ÏšðÙîÅúD4Ó¸§·’ìÝ»³9G]‹€þÏÿùôéŸÿÄQ¾œÏ½"aËYqÈ1®!ÔQÒ³"¡Ùþtr0úŽÁÑ„’Þ)±Öß&‘dÛ϶g}õjEh´Üg„È xÍŠt¦ë…woðZßqëÜH†˜ç–ӳï‡[*óçt>I6æ I3»±¹7hâE|®Î3®¿>öù^}Ét¶‡ÿå÷Ï×Éæk{^ïωèºÄŵ¯ –³³1wΟk¾K÷•ÛÊJ 鬸d¶+a×uÊ5P/¢AÌÄÆë·ÅíÊÅÀ–ØuX7kЇüþû³¾¤+ÕéË;\œÌÞ³ÿ»Üëínì|ƒimßžßówGLÏòSW[œç?=ã–zÅðÑ'î©×Ë€¿ÿþãÇfßÙŽÍ~Pö¹à}ú›7wLBÿüó?>|ÀóÈž)¤Çïµçd¼¿WÜoÎÉcpS¡@Ò}JÎ÷³c”ÇsCO •âãÔóúoßrnãe~¦Û–i¯3Eõ¶HæÙ¶gðô|fÕdöx]ë4ÂñÓ妻r,-»>wAqЏh–.üL?™6Ññîçå•Nò3 ø:Ç|† ë¦ëôß·&[ïÛ$Ì þŠf (ï­y…_¥â´ã.Ö mo½,à9_\ôcºâ›LëM•WÎÔ¾ßWË•7o€†[ À#†ó^4kêùZâr‹óÖÍúÈsFÌ@6cÐ%A…Îíu½òÙ ¢ÕäQkÔ±­5n›Þ¯}X‡µ… ¶2QÛ޾ýñGîuí>øÏ¶××ç"úýD’Ax¬¤¿ê¶±&—~çìµ>î³!Úó÷%€ø^ˆ½ÄloÞðž3Ó ç÷ªíDïÏœœXçzÌ\OÜ÷ïŠNÇtÌûí_¾ÓÓVoa?ñ9Vÿäí×ßH/fø¾«¶¤×$"÷ô5eÈyLÒmÈ#ØwžþIûÞýîK®2+üúÙéଓf¼Z2îŽ2™q¼‡‡Šù§û*¢Ú´UÎ_+|I¶F䯿þñ0âºl~›Öø¨®ÕqN*ó²6ŽCoÞ|÷Ý „Ådm;1÷÷ýÖÕÖ1ÒÃ-RrD]d‹úýø¯è]X>K¸òˆ}r¶?ÓúQHÓ=k¼šÞºöY {”‡ïW>ëýú ß'qÕ6V;Vù Žº¼šÓ~RZÓ¢¿þøãíÛ~xÿ~=‘`‹;×Ì­ôíêïãZÖ,G-ŸÐÙñÌÒ}~Ä]H¯u´Î=°×¯Êç tr-Tnuoöw<æ(ˆê»N–Upü¨û'ò!úT[€{X¡`swq/ oïˆÿðûw¿þúéSÃK šqÛž%è]ñgõëWÓŠXåÑÝõ‡é}7ÏX™¤:eòxî"™«Ö*O<ãÔR©hnïê#ü‘Z«-×á£KåÙpÿx|iÞùö¨àÝp?–Ìt±ó†Ôì<”ü©_«·ì9ˆoÛ)ïêVÄÍÎzž\Ó\…¶Þos¿ù¯5qba|dÔÚ±?Õ#Æ1Ÿ¯3¯6Ń,g‹AGÊ™tÉ£ßï®'ñÒ™ø³g •®óîgûÀ÷‹·-žþ ý¬¨Ä ÆýŽSûº`fo+ä™1ÇgÔ»Ï\7‚G÷õ#r|m·¨ÆH5°²&ÒX[?#Goß6^`]þ¡–þêfÍõÊW'íA<Èx_ëyä:"PÚ¶'í瞤j¹õÎ6ç\ÒÄ×®Á>óµ²³üѦ\æy¥gœ[®œkgíÚ6«óéž<[GŠ.è_5qeù8¾ PÄ0up¾ºÚ·™éòÅ¥­1îW„L+w¯æÃãWÖŒ$i ©qRæ#FɯsðGïáXϵã÷ŸÂÇý“ú¹Ï&ΕV¾¯e¸Æ©ïã½ç…p½zuLhÎ ¾5}­œ¸w&|ÿĸ¯W$×"è¿`ý(C¢kÛ?JêÀÙõRê%êø+ ãý&{û=>ÐÏé¾Ç:ôçü¬;T¶÷ ×-ºfÛFˆÌÞäÃyùÍžãAÜ׆;ç‚ÛJô5?õö›”„õK«í÷Tïg<Ú¯‘¿×#¡ ?~ýøN™±ª q´¶rv‚eœ]­×:$gΫÞƒ»Ñc%õu÷qŽT©0¨7˜ŠÿýgîìŠÀƒÅN,÷Åù5ÜÉ[m÷¶6ùpO¾öŒó@sÿÔxyyÐÿX}v+,'¹óÛç…rºäèï*(à™:¸BómÀÞ©~Ž~Τsx¯¨*LµÇç“Ô³ÚñJçÕ ƒ=À0Ó*£óXõØõ ò|{|I¤²öÙÊÈ-!ÖàfdvŒÂ¡˜#iðý¼­¡D%ŽW/é«ûpÅ>òŽ álðБx oñ;ô­%‰XªªûŒ¬+¿¯ "Ç5Ôsiˆ×÷pÜÏ }j3ÿŠ{H³ÊÕ˜¾=Pµ2f%|VÖÎ%CÇQV+ÞÒ{ûmïüLÁä#K‚õÎÀµ.“9ã3NóóRmë.­dö!ú G‘æBµÚ÷Ðdõ›>3;yµK¶æìsÃWðÆsHÆu†{hî£õgôÊ¿õíìLÂ~0ÖÌò\÷fkÍ«V­ó«G +Î3¸Ÿ­W^ªÚsÜ<útÞ8¯Ï#“zÇ›ªn\9¹ÏOd‰Ñ†ZögÆÏùÌe6ª¤ïw<ön u¢à±|ÃÑCeÞ®:Í#`ç ÐÇhoü[.fÎL´Å×9Ë™3÷cø³•´Ñkmèã¿ÙÏÈ“ú"íO¼¥ag³«ü}v~¶Ç%gçêhA8ûîșڵŸ‘UkÀ]4„A•üÝ•rà5ÀK§'ÏþqÿÇ?öº@=p¿#û‚ù1AB祌AWzƒ”–ç;„«wÔÖÏ‘}FÖ·z)«×ÈŠzþÞÌÌ^ }´®‹Qt¥+¾ì^²S·g쮚ÜçÔ…÷Ö×¼VT$Q»R€a±*3ñm¼t´ œoóùºñßìêBàÚ¼pŒ®eGmÃdzÕdû‹l®ë¨V8øuiÄYî|öóÜôpoÍçÝiž×t;Û*zœÞkŸ)ávì¦ÒÞ4÷K“qܸ Ø¡ŒFUÌPàï¿ÿùg³œ êÛã_çççkÐ[þ1qÊRð¹,Ú:P™ÈÞœ®ZFrkË'¾Õ›7wâ ½Mu¾¨›_û}Ç`¯èÚŽyBè‚§{³={ÝæÈk.ã#F„׎rÿYû³-ÞúLíƒ~•Mßë­=R´P·¶1?ü€À’‚Ö]Ü;åôÙy€ûÉ©÷&Âûl“glÕ&ÁijtÌ»*áéà¼ð±ïÔž‰M÷ý÷í8'P9ËÁŸíK<¶Sq_TS)ÂyríêÛ£ÇBZOyøõG̃ý‘}Vôr­´ÿ·g3·Îý0ºß„:úFöwÛ7G§…+ÑYǨ#å4bÂuAQT·¿Ïh›ÁÝu=y`_n÷ïcÝÏ•¯³Ýg5Owþöþ¿;7Žíí¿>5Û?º7¥o…ëš«ÛÛãóë¯ûñóÏÍ&²-ò±ŒþÐU­û2`½î bkhùíÏWZV¶DðcuØq{TŸ}YU™ìÚ3i]†vŒÔm»ÏH>® ›Éxæ ¶ÿ¬Ê9ŽMlÓ†W[ÜÒ€>+wÙ¶ª¼r&¯CùuÆýêàìèßËíV$dG°Rt33m 4tpU]óp?ÛÝ?ßê(çj&ÆþìÖ59ÇþüÒŠRàlgû±OÒõžüü=WM±Ïî™Ù_ÍËøÔ:\câè÷ˆ† ?:‚–¿îcæ-¦ÿ^0h·<Ë|®J;ªÂ×ÃÙòà~m}f@áY-ÑÕŠüè¦y–zÔ¶ÍE@¥šÛ› 6(9»ä”Y‡÷àæÖw¹:ÐÆEÛÈ'W4˜–zÀnÙ ¾|”I]3Úèceü5·¶=G˜ïèl÷–/ûè…?›1Ðö‡2ç­qFÉ=—f­Àú+i”<ŠêèäØS:[Ô­;眗Öä’³w5êQ=º}Ÿ¨Gä$Ôâªu„¸Fð£e™M¬Ñrª›lfÕ£}m 1dìE8J3èì®Í}Ý:ß_ÿ5̰…OÐÌ'mÎI\îÈWÖé¼såÊKy Þ!vï—[{àh¥ç®ÒŽö›k¡¸Ïþw¾=tއ¾^gŸià>b ñîé¸Ö¯Ðƒíˆ;¨½Ã¸ëXàÝñ÷ßꌌoãÆh_ÞÞZdW£ŒAI•«–­ õcˆsäÆànÆ5¶µn!ÌÄú>Ǹ°5¯x¨hUÞÓ‹+ª…b¯‰¿²Î:ˆ?êš½‚Öw~¶Ïm~ ÷ß3³³<Û5B?ê”Ä—Ixɉš¯¾úå—f ‰ï—_Þ½kݼ±PÉqäGn ÌzU·kBâ×_«Ùè.ôÙ'ÎzŸüþö¬<ý¯&R|ÎSÀ¡˜?¸ï“ªÏ+Ò^Â.³¦2¯#Õ—0/¶íÎíúW¯¨Îçºä;uðÙËuöo>Äsî×n ½ŒÁ4gÕÏ+g÷ö /Ám8>ú88ºg›HFñRç‡2eÐF>Ÿ|¬ wÌj?§ò3Í|° qŽÜÛ>P>êµï†iÝž{ú½äÔ+·w•¡h¨³(+Zð5ú¹ˆh>Ö\ýã¯ùâ¯lí}‚ÁF©RºÎý5ÃÁW:)“xùñî5ÙÉ~é²zçi¤€ÆÙŸÑ[¸²÷Ö¦tÎKö}f¶Ÿ‰óíQp^2qþzLÍpWé¯èÙ·kπᆪX½Ûyx,[AMûhó±èkƒÝ1š¼&ºSÞ—ï¸Âéž­«dÜV£€×'w¤2k$Š>ôþQûe˜†ó†•ŸËyfÛ>onº÷¹Æg÷€œ2˜Õ!¹= »~ÜëzÌ+óÒQíÇñëûç„Þ?¡·<£Úç[|óM+~ÿýbî°^Õ‘ïÉ<ÖÙ}óÐkƒ¶ã€ãö_2²T› œrdðh¬ñ³VTä±Ç%gûd…ËŸAÛy‡d.½™KмgwÔGÚ»j¶ÏÃv„¾ÿžnÀ¾&øhÉ>PΔ—•ÙW–Ï¢ÜÎÑ[­ÃЦnÆŒ‹>«øNöËsòů–FU­¾½ `üúïÜ-¯)Ú¯uβìý`åL"»rn¬»³ûÿš ã¾øçÃÜ÷5îó]|dÅ8Öa+Ã+×7ý;Y®5§ÖoGkæ¦Ügæ}®dÙóŽò+¯óÑXŸû¦Ÿįx†Tà¾?Bwî1™°Ln*9öz'hýNˆÕºUÜÆÕÖÿ5ÓºóI«kGpõ·$•{õôÀ}¯ÛÀ£÷w¼êûHÙ–¬nÿ™¨,z#µo@Ù[ ŒAB£|î¬wÍlûß¿oZpÜr‹ý÷Ú‹Ouf…V]ÏŠãÖÞ‘½ßÕlÏJ\×sôèíÛ·~D8+v…ºöL|ºÈaŠŽÈŽ~«Ž¸ùW¯V¯£;çÕ†Üçºc\Ãz‰%Qêêvž-žwÎL×<çKîk¾Ï4\,òãׄ+×@üµ¶Ëºsm;ñÑ?üðË/×oIëÇå<÷k~ÿ´NC¥çÙæ#yT~Ÿ•^dÊÉÇý –gpëûdÕã| ÖU}ÿªkøÕ"¡‡Vg?eö-2Ò«—L<ª8Y}u×Çâñ!qßæY–£gÄ3[{˜¼dóœ!f•ñÇå|©RŸõûÿ§µñù×BÖš…+CýÏÙ÷G‡ëÚÎgÏåÁÐkÙöϰ9«ŒXAV[ ~|gs kãÚÿÝ<ï3QøÜ–œŸ(ØóÕYÇf;Àý:¼r:®U*피ÈÊç>dï×…×´éWµPcçýYn=[V†×oa’5?ƒ´q|tú)!#/óxã[XÉ}4Z·%ê•Û‘ÿÉzÄÌ8ø|£xg9©of/­§ž•»CÎJè’î]äq÷³HæüHîªÃÒúþY9vgqã5-þÚh©ï™oÞ4›[ v÷Ùº+/ºâ’t§Er^缟ǵ¯ƒï³ ½¨Xo‡½LÎ#Œ)ûÉçÁÄgîÚë>üùç‡רhnbÑÖ(­³°gå;{fýÝË•££É~¸«;qæ(ŸçŒç,ÈÙµÝÿgåû›ºsóÁ³EÂ5Ù̘«°oa©rÔ2Œ;}€õ\Ïûî[–ñÜëke²æZ$ÖÖ{½sü:è\;Cìyµud¯•«pgË¡\ÛµV¿r‡gVgœs;sL%Ú¾#Ô¹£nغÖE,w4×Óûˆ«•O­3¦#ÛŽH#ü~ùåÇêwMÔ´>ªù½ë4î û5bÿ,£| F¯×Ð’ÊÜú×b‡Ÿm4vØãDϲ/g8B « îýÔ_=ª·öä›7X¤Qåkx´Å3Ý-Q&µÑÎ pÙ#[c÷ß³¯«¾ ǯéãÏ5YgÎGH÷­?¿ûÊ>Ù ´Úúôõå¬Sûþw<>c×\ŒÎ&¿n‰»ÖïÕý?¾‹âÂN”=ªúù±ÞÖ1?æ~x%”êœmôàrt|ñ§ZE#Û}uŽT“HÑã}™ŽÇ.Á:Ú™á=JJ:Ì«ÅÌ}@ÿ,‚xì\mÏ[®SÌ3DÇÐy¿Çt-¬ªžܯÎGÚûò³~5QõúVxÜG+óöß#LMýœ5 ó”ÕàÚUÙL6”{qEû›ÑþÁvﺧD_Ó[›•k|N{7ÆþãǦmC„­mwŽ?ŠA<ú.ÜÄÍœ×y#jš‡u;iræ?ÏÚÜvGYÙ9@ÙKA¶ÖÆ'Ö3p„’«¶×¶ühÞâ¾²ìULäÙ˜¿±Ï;¾ïAçóëÏ’cÏõÅNWXa(µæ­’à¼jínߦš~ÿýÓ§6šéRÿZ¨ÓÕV¾išµn90·2W‡ ·~¦;·-U’Ô¨ÞµÎ`û›ñ?¦ÌÖÅ™g‘ÆÌE¦uòžAÊ'iå¢G¨Ï EÎÂñ;úû½ý_‹ì;ÅÒÑ6û|{™‚­ì™k Ä:G~¿Ê¹vø×DîÏY_ƒøgÏÀ}üx¾Ýsÿ¶~F´Àv~úÔ\/€¯ëŸ‚Cí1ã%5aËìûðW•û Á#Ô[…ò} ÑK-ËPzÍÕ+{±ögnÄó-_;‚üÞÓ±kÝ‚Zz¿ùþ»cÖŽøÜñÞøiî>‹÷ÚÈæ£F?¯©ó·XÕ£hú,“T^êçÖùöÛwï¸ZtõgÝÊ>?3û1‚­õgP{wã›WÌ9~Wcj[Û“ûGd;g(bÓ©ÛåkÐé‡Z©_KßcÎ{{Þ]==9.üÑ´Ä{PæÎ¿×¯›Ü¡w; GkÚÇ=ûÎÏ„ܳ²XÅ$ynÏ·ó_œô¾oÒêóQØoeŸÜqÔYqìY?š(é‡O¼©ÏìŽv)ÓbßïT9Rs¯9x´š2„]ßîG›¶tn>®±Âïß7«8ìêzqÈþ0è×_ó·Ç Ùׯû­ÅOüùg:±ùV³ø¼ðƒŽAßgX7@T€<å€õš[ß³ˆq?ç˜øtûž"y¡4ØÝ\ê·Ç›fy±séÅ1ëgaq¸ïÁ’ße~d·r;ò¹wwGÛ}Ö—OÚ{ÇåÖúpólhÚ~ýßÿã mÀ˜2ÛÎîë>ôgC VŽÝ«úæÜ¹ï³}HØG–€ø—îOºoœé¯’@Ü|oîê¿Ï÷*ePÅGÅóùuu,ûL‰í£³ÎFÏ_÷TÉ#%@ׄ%g±Í|5›+X‡ãw`î}Vþ,v=‹fÏöj'ÿŠV"GŸ/Jeî©‚è|÷n/óìQìÚ©|tøG>fo=«•É) 8ëç9‡è&yµ}ßÀ@û_‹ø[ù¦ü­JŽ«U‚iK'·×ð=£8dÿý7ßüðÃpoù©7°(ðšË5nRà~Ú²¢œÖH™ Úê£4¸³¡ÃÙ²ÝV¾ýð£¥s¾¶.éÌàw>ÂÖ6 •—3ú17j\#…hU›Õl{¥õ@¼†­¢èŠæ*¸ï-#c´.JÙŠ šÉWôNö‰¼”9ß~ÛØ^ù)Ý/fŽþJ™£l„:*zNå®[ÕÎÄ*ÿüg£ Z Më|v|Ü®AóÜУíŸd×"¥ÎöcG ñ`”׿ø¨áD+ë_Ïcêg·ðNnÌÙÉÃõ0¬³¿]A_/“³þìc½v¥CX#!ÃRvýšjVà?ÿŒ²`ßo‚gOÖ;­ŸG½ÿ ÛÍcf¾ç\£ä<÷Ðg;¼ØJDÂñM|¯¾L? €T5ýᇹ“÷–5^»Åûñ††µA¶÷ŽôÙÇLá1àP(§}ç¾Òw}°¯ÂÐuHDÛšÑØ¶†VH3›ç9ÛÕ4÷v/Ãx‹Û{ÖÓaå™~Í™älÿyÉ> Ôñ¯±¹g;ùw öY0}–Ñ¿CûÞIx={ž<§U×¼-¸ÚûtÍÌmvÏV„"gñkÕðµSáQD{¿­A'g“ÉVÓRÅ’Ž#8Ï;½¾Œe6ô÷¥#;w8oÜ–ºö}N—w¼y\¥/=÷?_Û}ÓÆ™´)lcMþøNÁ9Žñ¡Dßgd{&¸ßæÊ>Zù­ócjž5ED#|wAůqÈ­,ì{oß6iÁû÷ý1ÚŠ;Ëì®x}<΃e›ÏÖ5å¡á= <e^q˜Yé-¨#DjòQ±·×“Ù“„óô¼>ƒzU·mµ}“ö­ŽÛVN?xßIì øH>råsïóâW‰°ýµKyìSx}ŸÌû÷Øýû…ÐYiÊ£|âŸ1ú\|u'e¥>[Ëþ¿f°GŸ­žeõØ@¥±9xîV²q¯À ¥Âòz[öQvwnÄWnUíÆ„2þ8æúH+•eŸ?ò>3A˶úÿš£ÈY&5¿u}à˜Eòü&êHïÜ‹Ž:†ƒ«à»˜;~:ÏÌ>W6mê$ì‹gü­{F'ç†^鬨í)NÆb)¡ö³«í÷¦ÿmÊu`âñÌÞkû=Ÿœ3ûáJçáüàò(¯ª Éî"sØ´unw²G%úÜéè%³%}y ÄóŒ/ç³ÈÃ’øÌ§¼äˆóyöúlᴆᱻdñ³­·W’P×}‡ ®Çz.Áã¤kõœ^ÙËûÇ?|\‹“ØßNýÌÈËó5ßšµÐ 7°½'ÿë¿p…yd3î¬û:ƒòØOo’¤6rjeùúÖ·äZÆçü·ÛV†×â®EüÌAOšSÊ¿£yˆXµ?þժ͖,aåo+“{ã3—ɳíAmL×~Ö(êìÔ÷¯‰FæGp­ëò™qÈÒRŸóV¡[Ç”½r š¯zIÍJ¯3ƒÑËÄ9û¥{º$¯ìµ÷ùw¤kÚøÎpÜëÐÇgñsº×™ògúýuî‡÷ÕžÉYÑË5ý¬šà,œ]/)W”û2Ô•ø°³JŠç±õGKæ…°®~( ºÜÏV×äsF@ÆOY©{òïfq´ÍàsC gOÐ-‡Šgó7{–píº "Išó[×3©(=æBÎ9m¯×ÙƒÙpjÔâß[¿†„ª Îùï-–×çÿÖ9ó¸‘M ïA4lòZ<Íß㈂k>£<öZ|é~“ã¼ÇÐóC|‡WÎý¿š÷ÏQ*Cás (gùÑï±õÒîl—i¯Ï ~kkÍ Cg–‚g…7œQß|CzÃ÷ß·¾Ð,atž ë¯TÔg…(ÉuêžþÿŽŒáQïѱƟç8ûù%{kÊ‚ëèHÁUóÓm|˜ôÑþ'²ŸW½ÿ¼è³w…‰¿»× â£53}G¾¡œf91ëÕœîH¬Ÿ"ëTÿúÉ´¾;®µ?V*ûí‹&o•3èÿVqîÙ¦ßûŽ0÷‚µ¯¹óàxóÆÆçE2R${¹d9D¡"úµÎµï;”¯CÿGÀÓÞeeX_MÂ(Ìøëyß#Ð6~ú¨]ÎüÎL¢½L®­l/þÛÙ~ÃW»Ý Q[“]c~ú¹IƒVF¶Û+¾7סö Ñ»ÐVNDgú!+ÎëGö¬|îñ˜éžøªžåÚ¶Ä]{}‰sìõœÿ>GFxË9?kàÚöäÏff>}€r;½rËõyLùc#ÿž¡‡~ܒظv6·kÿqÀýþw\£ë˜j¶®Á¼¦öh¯mô0í9æÙ<HóÎÕìÌç>sÜÿ¿/’Y/)×9Þ[Ž&·jÞ8;:!à'úÁ޳ê¥#@ß×»gûZ÷`ÎÍ|hLFŠF¬|nÖáàW™§mÔx¯~Àè¨t±{ýXV!£]P¶!\çVèýœÚz¸j=Òߪ”Ú²ÛÓ_5™Ö?ÿ‰ Mû[¹åÌÂö`è\p²IkÁƒÑä(ìIOÜ´¾o{ÎìKbTÆàP„¥©{2ò,ºÂs+KxÍ©ýL÷f¥;[Žgòžèè›o°Eì'©ÏÞ¬ÂÈÖ+êˆqÕì{¬{áû::vMž‰”®ÀÖÚ¥Ù¿§èg÷ö%í~÷ãâéǧR{O»—ýü3Ìݬ\6|Àû\FŸÿûf¦.ÆT$dp}íAõ%Ç [ÿ99ÙªoÏViÝ^—·Ìš5äŒqw€ºÏº­µu#+˜>—È1³¹\c÷éK?‚Ÿ> €ÎûÐC'Í£ÿ*±ÈËÈ®³ég-,×x÷ÜKà‡¹MóUAÎ^ïîy$mstΩ¨ÃgÉÀžñ].ÌÕò˜W:æù‘š­ƒº% ]i­í*¿¦*o–pÛ¼ûó.àGƒõ\â˜ÁQ"9’h¤gªg¹k×@ùÙbæx ±‚°3’˜U™ÍLIìåÿ™³w\"=â:eù×_¤Ì·ù¥AüÆ›þù§4dÅÈÚ˜ê…7 6*p7\«’•-!g¬¢ÍË›Æi›W÷Òö{”°"°YSŸkmk#§ÖÖg‘¶×Òµ²pû,[Fþ½½O_àŽƒÊ~2.}!Ã÷Ök© s/¼©-› Õ¯¿¢½BIl?6{Õyš,Cî«×œã{P¾ÜWùò^ä¹u®Á´ª¥;_>¬9ZRæAm<«Ì¸Vàøz·ÿÊvÚ—ìœùÖ:ÏÌf÷ær8*$Ú=¢9’Õ´ …Ͼß/i6öðžßËÖªà ǵÞ3õßõ‹!!ÂL¿þë¯?ÿ¬ÜÇçòw²W:íQÊÇ‹á¾sÞ3ŠŠ³ý‡£w®Û0ûR„#¾¶—Z©SØ…ín`´…´ÏKg¼5ö|`úˆûvô4Ÿ>5±Ð¨ü–‚‘8­[p¬†à׊~ýÚ~Ëõ¨ÈM6·úû‘=ï>W~ŸÑ‚÷µDΦfF¢“ xfR¢UaU-_³½Ï (Ýïöx·³%»I~ÌsõoO¶Ä7%°ž]}ÉtäÔ®Ù˜k´£Â àÞKz§ãÂþؽJcÆÂKÜŸ{’Ž¢¤•Óýþ¿ò¹GHãÌS`ž1¼ö\æü¤³³þÌ’‰çyùÊc“g˸+³giµÏ›”ÐúÝs;ÏÅÏÙK™Ñ‹WègÏcìüí^ó}?ZyE<6™ìþ°þ]Ôæ»¢];WBlʪkÁúÅÐ8ü:j t•s¬h=#\éã]V?ñOgküåxìšÔãûïi £Im%nëꜷP\çþûe»õià÷•·og|¤Î@YŸé(°¢ßU`ºÈæeFè8ËmØ’mh=Y`Ì@3’ÇmÏÍ{DX~;±)L‰Ñø‰¨“Í'åouoYõ\_µWôv“¯4ÙØÞÄËÕ$×kTšÓëI±sAÚU"`tÖOY¹{Ÿ½#ÝZÎ…{#ôTÌWý÷Û·ížFÚÆÚ·èÏù•`²5{ƒ³K‹·Ît½¸‚®>‹Ï(2µÂÍ_[ÿ5Ž_÷ $‘ôíñgÎ×yÌ©ßA;wJš‹ß7/ÚU‡oy@¤_ÊËÌ•_ÕÀñ@%¥¹üè¹ùóú¹ýs Xïg&ǬÈn7¼jàˆ\DfLÒý¦í‘)=È·[·g˘k›³¾+À=cÜÙó­,$ËóH&qm`qK/nÀÝX3–Gë™åeê!Ç·áѾ?°ØÃh o4DXÝ6vs”‘¹U0$pwIÀ¾ÏÓYg í“¶=뛫’•v´ÎËxèv¶û«òž÷9g©æ…tTV˜ì• ­ÙµCŸGžöWôÜQ©aac©¶â· Â3Æ‘£àgß6ôÚÝûñsDÏeóYÀµÃØq–+Íså§ŸT˜­|/,2k_¥jñ¯tb×ÓH¶D¹ëÏ™‰*¿¥¯4WÌŸ‘¬Àè÷ž}õÿÑ¥™™*ÎÕ~PŸ|ÖYå!VAh½jù’0ús­œ“ÿ³N»Ø~ý5»’›,¯Kщ>6 èÙšry„ÓòÃèíåÞܽd»Ù}Ÿ9ú´¹Q<úÔŽ8ÙŠWöÃQÆäì¡kÍè¹$¹•a²³©ŠgÒ(÷ÙîÕ袳&€g‡VgŽ.Çy}§ Ô¨K6ÄÉîÁÖ:·¼hfïìá†ôë^ÚW`W>~unÉ{¶¾ãþš·ØtÏ£¡ä*ßúÖûçêžÚ~O`s̯“êÍ@ëH*³/t¹’¼òÊO?Ñõj(­NÏöÎÛwž&ëâUvyí»§¹ßòç9Ûo¿gs¼•‹$Ï ¶·–¯_ËàòÌ™|¼þK=‡ä1ç­Ê+¸Çüúk\›?;Šqµù²uHÈb”Gxõ<™«ßôoe¾xÿ&»kÖùÝÇwýÈwù‡Ú@b{°Í××¸ó«’ží ¥Gµ–®`WÙMÇšè{ÝqCßÊÜ×Oo{]ó¹MVãÁÑ[}?uuEç½ï³ÍýYvjXPŽsøîÑۭȧ vçFãUV=éçºr”ïäìË ®…mËæª}½¶» Cÿ­ty÷nßuõÛm­÷´'Úû÷ ­òÐ=÷Üî“,û>Q[Àý,þž«‰€{ÿÄ\cdW éÕ;ÿYÁ òŒ>^í]œÜA5gÖIäý¿ÿ5¹ë£œÌ.Bêíå \6_)äæ®ç¹Ðô=@E­˜Ùò§¿*>ν™,«Ïwrnm•?ýôË/¿ýÖ„l裦n·REWTzëtÝ•Êyî£ìÒåÔØº©í+JëV]ivß±eœ­ØLa™0× äˆ#\éû[;ÓYëž<Íiõëœà³ƒÆqçÞ–±Ša%•óh"9n›±‰Îޙ÷m·GW—Û{iî*ãäà^?½ÊW8éqœ7Ð#α+ÛTì¥C÷ŒTˆGgÓ¾TÆÀ}›™Ö(Û¶­¤&ñ R÷Î ufMó»k¸Ç:#j¥›ñ˜2ãl2ú½e†À_‡;ëx£~¯6TûÛoœ«{ÑÏ­ƒûcTSŽê^믈7ôJÿìÖÔ4îý7B=ÏU°ÊpŸaÄ÷ÃŒü¹ó¾ÍùB¥iCÚ–#¸*æ¹{öj¤¶økZìqY¹ó‰‚­s`Zß#•iƒ$u^sæ^áöo+Gú­½“f%Él«†«àã<–w=xÎX]SZwTw4kðÊàuà”uêgÂ\æ~2[Œ— ×]…èYµèQ9qG;»Òª^ñQhy=”ùcæ8î1Ä«¢—í>Œ?EB—cáÊ6p·5¤Ž5¹Ý ú ÑÈs7cß+Ôîåd|ÔŸ¥36´÷o1ɰÍv¯³Úµt\)(iÚŒÐ}qÈ6C??oÏMJìÍœíÞ¨¨kî8dsìëXüú´ÆÜ†$ Y®.ó#rEÁNGÃc‹Ø7oöÂyÿŸ³K:áìU6ýKóS¬wÊàNGzÎdÜ–‰ð×_ÃoŸ2 *Ï™kíl®|ÿ½¸ço‡vm¹!­H›^m"FŠd˜ïíŒó{©ùÔbë©ú&Šù±V˜Û¢óÓ=Ý9Û†ÕiŠÿùÛ±UÇáßWJ‘7þ–ƒÇd¹gotOûÅšá<™~^eÈ¥«ª#¶jütÖJläò„1ã+­i’‹‡´Ã+{ÇdULÐFIÀñëñ`߸X‡¬€Ïéûs~,®•3p¿c²Ôºg–àçÊ¿/T¨ ˜ï…®w[Z07+ÄEâ×_ûíÃB×{ßâäÑå£Ïõ:9vÎ’T 1ãÅ•îm¤œH¦ß~kWÏ Äp½£Ž?׬kü.Œîô¾ˆÓ?KýœÃîýc½ýþ¾Z»N·ö@^€]ró==|éeoµXª×þþvBqÅá8Aª'{Yßô°Lo%’k=:»gCY».¤ÃòDU43ö]·Ö½ ¦«õË€à—<KÀ¨;´Õáø¶»`Ë>hjoDõ·eÛzîh•kÀýyÇâx?“0Êì½¹Ámb·/$;¸"V!]uͱ5}™ii©_~™»©ôðÝKÿÝ´€NêÝÖâï†2BýáC+'z´$=òŸ©¼~Ýo=Ÿ1=î«ì÷m®BáÍ™°RœÌöíY-»g*Tœì•([׋]€X]ÿ)ç–s«B¯­;ƒ¯å}¶WxŽˆ¨ õÜ,Mÿèµ Áv7 KÍvþþ;gµÅ?™A{4H—[ˆeËk¤ÕuIÆ™÷σlî[&è꘯ÿNíûh¸&±àhqŸA ÁùЯ! ÷…"³ï¥2õŽæ{eÿ¤÷üóâW8õ~ËÛvõÒ¯¾(ƒÇ²g{e¢`[jÂq¤xÛº‡@@ íï±µHµ{9©‡>îã案&lVsè‘V#u¿jôßžóÔ[*sá•&8‹Zát»ëÞo߶ɨ­³ÇEȱaß¼ÌhÇœ}BÓ¿W!§tuÑf$uì§±â}ñ2CxÕ5%¡ÏŒïÜöÙ.çŽÝ`ª¤¤gŽ«ª;…(\‰DÎç±àµ5‘{å§f6úÉpˆe÷Ò ‰ªÆ›j÷mFâ¶äFÓö>¸‰âÍUf×ÁÙ¹‘" n¾‡=Så@#ä=»sýØm‡R­÷Qª—ëw*BÿÎuöÑFsüÛYŸjŸ¼Ø6»\+Î÷Êà½ëîèçm)š?K³ \;íŒFIÌ£NÊlK1+-òþýï¿¿{מ8«â–ýð¾—dÁ_P~û¬*KHúr7€Ë¯9Gç4Ü7Éó‘BNNögL}¯9²}<;œZU)&<>.[çí3¼ÇaYÝØŸÈM· òÜõÌ+\ňúR„\¯¬í1ß;á¡×€û&å½_Ì.?NVÃÍÏ¡“;V'ÏeÖ¬s›ÜtÚáØÒÎõY«ÐPR"38æSÇÖêŠOóJ@ºÀSBQß¼YïÑä^-ݧTŠCj¯c ¥²a¾žss¬é—I_Ϧ{.¿>Úýʨ/Üç[;¶¦‡G€ÛÔ£o žZˆ2`$pGLRóDg>è#ŒöÑ4TÊбPq1¸1ûÎëxf÷¥‚2VŒƒm]kê¤Ùt䨳ÑgØ>xÜ­{låqí+qeéùÝùíÛðôÇvzÏõÍ{êí>Nü¸)|&Ð~E¯¼¥¢>µ=h¨œ”~í7äYâ+dh¯·Ó_‘=•Q=¹Øµ-ÿ“Ç@¦ä²÷®/ŠæîáѬ=Ò·ÅïÎ_­Ó5#Ç?!Ý:¾†hÊäù(¡ÈŒkï÷}ý•Æ¥k7ßöXë± ¬ªp¼nKÐdÔÔ q~z•âXþ±¦Z™3iÍ‘]ã¼ó“¬|¿Ïµ7}ñÐhf‚y7à*ØîÌÔ£œeÀE{=:€!_ÊËÈûÞËŠÍëÑ êJ‘œØìý>v{ó?kÛÉzï¶m y%uö[4ýÒ+vq^ó›ÚN=Rú’ýÛì0ïÇ»\K{‰šªMa>AîqÒ”ë0k^讑²À—£‹}-x]M¢4ÊQö9þõrhöþ;aI”ʸßçÀý ù»}?÷’ï˜åÊI©L2û ÷Šîí±'÷ÃÁù+nŒÎ=˜Gíž=_¦ î¹F¬´à{éK{ 6Q œnuãî-·ð²²}³W*Xá†Õà ¤ËçßåP&‡šŸ’r‹~Ûf0k¶U[Mÿ-õ𿘑7öEùæh³s Jfz<^UÁÜå}®º7LÜßæ-;Å:´Zuçþ+Bˆ$¤™É0ÌS&Ã]ᦗí|“Š]ƒŒuÖ#ÜÔäƒÛý}I[®BQ°©cã`nÝ3X<IÉßç·F áëèÍšã?þøý÷´ûàìÖy²Þ/ÚîôÅ@í±T)"ZlÌîQ}fo¶g#«k‚ß~:2Á¤ðèÙè3"´ö÷xeÇlÿ)Gœb¬÷™ÿR§ôª<ëŠà¤öªŒG×Ř­û<ËÅ•ÌÔ£5‹u†êúá‡÷ïQ'çп<‚ØÏ3ÐöêÕX´Ða;²hôvŽ¥Ô*N¸¦6^±w<»Î³š~ƒõkPx»Û³µ%rÝ&^?'±-9Öö^éaûàû•Ïk„:Ï:hWßw2õ¤™ôë_i®Ÿ;Rø­@öúÛRcï5åG¦sæ¢XkêÆ0kO¸vn÷4%q9hC>rvŸ™ô%0ÒçàÄ,ŽúàÜûýxÛ·Ù–UK­n€ ‰?·d†±4c õo~/m÷¶´ËÎîéû†¸=iÚ*±ÏÅ´²¿çbGp¹?QÐ;X÷`kIS¶Q5úlUòÓW½ãxEH¦’jòZ¦Vã? "Ãê øæ¹”ò˜äGóõ¾„3¼–dKLÞ¶WR_NÏáã–× å¿þûߟZöƒR¿IbäsâÏòÏ[ýkð}Í¡ÜÇ´ŽÏΖÕì*jªgòQÇ/{÷™ï„=oÇ™B¾½nê^r…ÒÁ×Õ§œnÆöƒ¿c#{¥³ú¼çi&í™ož3>ÎO£~øoÌòqïvy?Ü‹¦¯¥T¥á¼µ/)å½¶¶Õ¿jçjC[þå-y–¶{)n-tkTï&Rå ¶/O’ ô?Åuežú§ûµÁ…µ vÍãú~)ç¶Ã/Î4Ce˜Í­E«ôíò½v¼8\ ©Q(”ТO”œI†2•O( ü·¸ðlè H‰—?:ïä&ë-±§Dyãëfܵ´P¤ÂS ò ¥Ëï¿ÿùgSÀ7†F°c>"™b }‹-e³¡†¢ÀíoÍÚzV½ÚYšö¨¥÷<#Iü–ÂIöUûPr»W =¼Õ©õÙ•ŸÎ= ¢3Á‚Ÿ™Ã‰ËŽ£R÷ĬÀŸ‰‡öñ5¬×È^[ó_µ8 lÚ{€{ò+[Ò‚<°ù¾îÃl•@zOí~ô}ƒ¾XÚÊsÍw|ãÏuÊp¹!©[ÿs½þ¬ÓÒ+°÷º.cÆBrá[ÿë×ÌiùTañÖÄ~äGª©=³CØ—y{`ôȉKúï-0]÷Ø^²¯Ï›mñI?ЃÎŽÔy\‡óššoÏ6¬©½ Ýu¯ðmEŭ䇌C±oÞÈŒA°h,öÎ •¸GV˜3³Å{ˆÂÇ{œ²`4vÎì>Š­­ßÆ +Lö8!pf&ϬgŠ" ¡¶åú )ö‘[Ý›ëgÑêÌÀãF_h8õñáód)Ú^[·EY5vyõö·Â»Œþ³%¢”£ÖsF3´¡½ý«e°¢Í²5^· ¼¢*vâfSgØøïVÀ(Œ àŽEå8ã$6ì–N½wA%ÞYyÓ””È™G{o.³aA“W°µ ÅF ¯Jï‹Ü‹C*³.˜èaP…»ÈwÙŸ¢Ò¢vKÔÚ07ŽT²å@½tNØÊ:Ÿ3iJ–EÅXÆôŠ3F_¤&í €©/ |¶]ˆ”`ñ8Éᄂx`7ÆúçŸÛÈo;7³Ô¡ÇÒ®n¬ßtæ3Ä\ÛæªñºÿkÑR½íÇ@¨ øzŽY×`=£?ÆùRakΨ®öU7o 86­±ì½wÊxg•0»ƒeÜÒìtkkj}ŠZT±ãûãÔ}ïhÅt ஌¤«à?z§»õ.d¿g¦,ˆ$Û20íe0žppÇ€{K×C®ºg®?g‰’‡ßzOƒ›¼‹Õ Ïöäãx_Žà<ãeìlë-Hý蟡`Ïy<8} s;t®¶`Þ©Ñ”ó«`E…ïØyjh_.õ’‰Å¯^F¡µ~ÏçÇÝ„›ó kºöª·V:Jêr_áÚKeZ Ý 5ýï¿ïn–=e'ân1 Ôƒ³JY8zÐVpÐ`‡†:ŒÐ7'מÀ­RÏMͺ¿;ÛКsïßS–4´O‡‡Nh•œwÊ*Òu;™ïY‡Aëô~ëG9·áºe[||`÷c‘€.àxêÝÇ¥¥5:F[gÅLT³wFÙɌ˯ 3³Î{ÏÊò*jR·DÛf¨ÇµÖ¸ª÷ï+|ß3£äœÓšÍ¬«’[Å¡ž0}\n“ÎFck Q ÏÒ±];’HõišYò59Íï¿«T›M8ô‰›ã,DŠvf=êf³}ž‚ÅŸ 2³Ç»~Û]ÊDÀ¸|¤k¯p¶žràq³•Sx¾Ï÷“=;Óĸc©ã+˜5´ÝÛZ:téˆeÏcJÏžó½aV ¸ÿ?J"»2ƺ>꺢wÖ s´ÍÏ7îfÜ §_^­3s½³¡®È—¨üV¦’‰{.ä³ÍÐïÕ®Ã÷ÇP;w?®îòu×CÒ——ä¯ÖÙ3Ï–­A´m.Ö„ê3™³Q‘<ÂÖ­6t/oÐ3K©Ã §Î:øÁ .S)}·À(›æýpêV–·‡1BxÐÖm,,0ÝKtêí‘ùûïfå¹tR*hn¯0Œèöq¬ä9qɈ…Í>@²ãbøø¾u/Lçpc%ˆÌ€ó* q[6ýpFƒò6£¡íí*ÛÈýý‡¹ª~Ö1¢ß†z,4™0î9¨\S¶©S!8êu öY¸RÙâ*‡‰«™cî/±##7”×Võ{¯ÎlNymΡúò»“ŒëGÉÕÿá{ÑãÒhã&•:ø xJö×Ç}Æ8ò)ïÞÑÏùî»Ö­Ø™lCØQ,4NP@7>î÷߉•ñµ?—©Ì½¶¶,/}¯ÛÐGiWÌÞ÷š÷+¶Å<ç—p“.ÌÖÓgWz¿GϾ±Ûðõ× õ«gËJjæšÃÝg:ÓV«³g³õ ÝY º?ÿ-¶‰Ež€È·}óá7r·Or×<Ò^Vè—0”éÙ•Ç}i3 :š~2ny.¹_·³ ‚=÷Ó[÷W7€GŒœ^o­˜ÍÕí6«ª¶tsɇYÉuÌ\YÌ©ÐNm!d*VýVp`.Æ]žß*¾KËÎ{¤5—[pÜïÀµ*U @ 1Öt†‘|Å¢š„2Œïµw¶›tcaÚŽwA²ŸÑXPí³>~lÍ/AõªAÐ@6M3ͱ/±t†Ð¦š7sÖŽŽ †4ãË#“ÎàR±MÚóÀåö*mý©Ÿé­«HCc¦½öšaœZêÔq^ÉTªxC#¢ÕÝ[U{)½ÐÈZGªÊ®€”’qVhZÓ;ÒäYÁãYQö­{Ö"®›õª mÍ79ïÑtRÛÖ÷(ªÔ$‹“ѧeƚ̽ö­ŽbÂSù)yïÆ—«©«Ì4¶ïî8Ó¶4åÛñU–áqoɸ«~ܳAõLzI’‹Þê²2—n9ÿl»oÁ¥yÍ[0ýš0r>Ô¨±Ôúà´ö½·µ½Ã&Å+~ (o×\8V8òZ¤=‚ ßODiÉf-¸—z´~†,ŸÜ·þ–ñΟ~‚ÞêSlÅΞU–?–î×¹¶%ç ©0Ï}·™±LÒ–øÜØr@¹öU-ûÕЫµs"4²¿ÎCo¥ãQúçÕ[ëÎýôú,†c~y0é$®-u—1û® é‰1ú¬Ø +ó$ŽÎû§ŸÚ|¾/"Å@cǵy>W,»^ççx?ŒZeÜyôñWNð,3ÿÍ;©9V;ú鵬 Z xhû²†kÉßM@¬o$@Ö+¿+›µåë¸\cWGÓ»wš[¨l"ŸH©×·îûÚæöNœI¶`kÏû¾×ßjìXÏ@õ(| „iÏ›½vOÃð:ÙñìHŒ£–ÞçÉÇçPiŽ«"“ÒÜB? PE5@vnÄœ]tÀÄýWÙLš3VP.‰5æžç¬KÕrµþ¬ã‰g½ÕÇo炤{ɪ,#¨f&§£–½~å.3!êùì›QŽÎE#ã>Óë*vÇ/EGÊÞ[¸å3Ô×ûžØÚ„Òïö5¿—+ðûÐöÈ)èˆÒ:Rü÷jævÎDqW»úLŸ›c®óÄÍQüÃf™žÅ•Î×ÀSJ¶¶ûÖ„W¸ÕvWäw>a„ËsíþËóå¶1xÖ™v|.Ý9CÇW'L¾û9"Ö–óyž‡hÜÑè¨âÿ|í•‘Å[y|KÝ6Köˆ=âaféHU ìª$èmq©¢ØðIÃÈáŽ2[= —ñGƒ†kÀtÞý°üòeå 6œ]e£Ï|ß«QDíîtÄžžÙ~÷?Ÿa}øX¹Î3d9[lú>³þˆséŽl Š*û5*ܵÁ@fœåñÁ¸^µŸ²j…óo,Jmì­ ÜûG~eÄš‹ŸVúf40j½AßOŸšLP^á¾ùx¹ËÍC,©÷ï›_‡c ]Jê· t6)Âû÷€›Q×>2Çk o´U¦ÞN1èi Éû¥O ï5³ÇhܳÔ-Û¼µ>WÂÆñÛ=£‡éséQ­øWâÌöÑœ.?»¿ñÃmOÒAÆÀ²–uÒ W‡g— æÚr1}`*KJÙ,?й¥àh%é=f!‡„RU&”²¨äÝe¦ÉY!è?×”R™Ñ;ÈŲ$Û:nƒJ_4å½— Ç•m‚ûìE¸2û¾édRÅEóÃ˺µ¿ÿÞ®²æ!õϺƒ”¢¾lpIæßö@¶fOÖ~ÝLŽÒ«ØÇû§ˆfÖ‡éÓ¯â¶ßÓj.ø9ÜÛó|›çŸUÕŸý¨ë¬wQÍdã¥zž{Æ ïCv›‡®ÎvÖ…"£á#þ][ÑTgž¿ž:û·«ÑT5葲õeývšû¾ãG£“×0Õc žGåø>Ûvsÿ[ßùíc–íLÃÞàœzizð€q—¡’c´ísü¨p¥ýWfÀ½2X~øår®{ž¹7¤„f‹“\Ä wŽœæø¦‡3=Ó߃Ý10ËyžÌ†nóþ?+ofçScÇß6ºäÝ;÷¨ç Û==ŸQÛÞ)gFQsöâžÆý¦ëÅÃUÚû[{xÝßëºíÇú‹ ýÙÇ}ÿ*XwŒÑ’¹d/Ý+èÉ›qÆfÙ*Éÿ~ל=-Ά)œú¯mÐô+àݸ7"œÄy÷nå¦ ¢µG7PäŒÎ‰‰ˆÇ¥{ Lk5•=G@lÎÛ¬g”Á¦`}o)Á >3b^­t×@¤]oa/ÅQ‘_ÉÏò:ajÛg ~’<&·!ûÀDÞ#gq»Ñ/†V7ž Ër’c%iŠ¿ Œ„·ýë¿þý%­.^Ï=\Ë»ñxÍ9ÕÐ}jîBK Qêøi•¸ôpß^=Ü÷zÁUpö¢”ÔÄ÷‚–´Ë´’Ûý™î.°Ô¬T7IüýL`“…ATáoÛÛt–œ|ég jW;kã^Ñ´À­—Ès¯C£œ­çíÒEEVwáÆ²mþvû’S"c¨“{ðÔƒÎÑúsÛ²ÊÃÛ–3¨7NkÐ?=ìpæ¹—ºUr‹ß ­Kž{Åy}>{05íw¶Ì:“ÙŸý¹˜Êe†i¯ì ôótíšÌ«+r¸ªëä¯s¤vU» ¤®3åœÁíNß®‚»@çèo¹Nn½4ÄLôŒŒÛkb‰GAvù¼?ÒK¾Þ9^º`8âà‘Ëöæ˜/_µÑóv>SHè(œšKyÔËú ~?RÎÌËÕÁ 8©ô–p¸›ƒáAh¨š 9=“eo0)åD Žë‚§†ìŠTfº8Z¦båw»•£—Í2ÀýFk>A$D6¼3ߣ¡ÌÌçä2&Áô8ÌZ;°þl[»$¸m²È‘ߎx3öQ±À¦w’1Ô³ü&s^%¹QáQË!³ÈÉÍë[Ѽ—çÅ=;ËtüHàž¥àÈã&Ìõ6ÌìÙ{w8]Á#}¯TÌsÎIÇŸªn‹…\ðà•Ãà£ö€Á}Æu‚{¼Õ3É£ôûé oÜc;[TN¨E5Ydêê8@\a=Ž(éëRï½#¾Ehä¹ê\•ˆ'û¿ÿ¦ä¨0Ú¦¤””ÌKè ìÇ‚3̨zÛ‹Ûv~óœ#¯}˜Œ‚jÛ,^/ǵ·L{P›œfxYûx@9ßZÇPå¼Þ|ƒãû1Lû®ðÛÏ‚­|ƒs‰Ú:{G8>ëì?ïzŸ>¨…+Â20º&#ï~.°iM%_‹„t“ÆýÐßO?]ÙŸ”ߣþÊxßž0i ád ÷(æµ]»­lŸwu¾LýÈÂ쟽Ïjûî½Aµï³ÖûW$Íz9–}_¦µ2_1ìŸs ˆ£]sm˜Õlk^–ë¼BÍ5¬>èîɵW¶A|Ùìå%ü¬X% ¨!ÿ0¤Î ‚§^ÿ-0,»`¨FWÚ,I¥;C— Üs‰ìDŽ4¹|Jòⵘ™Ãw­A.ïß}(¤}L¨Á£VBè»´þƒö‰dBU “eŒ ¾ŠŸdñ%½èÅ<ør¤z>ÁhÚ—L,[-üáÁ4+À=Í:òŽ—’åôÁCöE¦a;PlË2w¶ÊlÚ^Wñcø®óJý ˜úl¤' Yœœv²¼L@Ÿ…“>K"(öj¾ÇÁLÞu ßùÙRŸä­S“ã¡Ù…pI€ J ozñÅu]Ê„à5#ehèGm}ÎE$ðêkî‹q·|h´wìƒá¤”3ÝØZH„¹÷ül"Yç,0ìó£àI7€£€<Œ³±–ío³'3ûÜ™¨¦úëÏ}Tö}UÐÎä%û¾.ã EÿaÔÙo‰mV`(û¡BóHeek$wöÛ;2Ô#öw,<ÎHAæsÛ[U‹çk{ƒ{îË&á±Ã ÿvo|†°äññ~6ƒ»VŸ-ŠÑ!×ü¼µ†öÍ.iOº»Üü |ÿ¼²Ÿ;bª-¼ý0ÝØ«W¤ßµöYã g_~%t?^{+?’‡ºçû“,¡†º÷ÚtƒÔñ<%ާA4š›ÿÝþWèô]I>xjž•W°³ð@bõR¾Ò—#p!;œq¾2³&ûÎÏTÌéFŸ¡NùÒ]ÞÐߥE[j 3í³H žÉk†õL{@¯´Â€’€G dH†˜lÁIÀƒK3Üb1­Ôç³¼'Ù{Mßý×_[R™Ü«îíÛ¶[’”Ü~Tn Ün*%:ûPù»*êúÐYÈ‘Ê$œòS DS{ t_#*½Xjà¸îC¾5ÊzKò²˜‡‚Š5TaL {Fö­÷$”¯–—ñW–ðÄbK¼ý±i˜H—5>Ã1R5q³ÙuÑߎҠQèR]bè(R$´Ÿ•<Ûz•Õî92;¶Zm¶µpmR2 y†º NlËM%–]ˆÜ‡©2×}x6T½Â²×y€= }^wó°¼í¿må:gϯy*s¿æm^|&³Ù‡;Íá&×M¾£ÑÛûü÷ÙñÙùÏ÷,ðžáIrô]Lâ|üÈ=ísnÿyàÎ}Ã[þœ²§!b?~ü׿ÚDrwñYP¾®zÿ’'¿]ߤXù·÷µ«IÙ¨;ë°;Þ«¯BA± £-kœJZ1V©LÚ>ZšRØ àÂ<1ªˆQcFeaÓ%]¼Ž ˜Â}[s Õúx険}¦wV¢Ú_yg³£$¿P²ËH´U*!’kw (‚ýp$e{&¹Ûþ=ú¦5|ªí=Q,Å.«0 (´äÃŽ=•‹ŸÖ™Ú'Àw`:,;Pž[ùȸsd¹Å7Àݬô|S½MRãž¶UrÑÆ›œahåñMÅv÷y®îí¸Gô矈»¼ÏÝm¨ ¦y˜…Õ2ûìs GZã;•‘UÙñ`ýiùùg)ªó¸Tµ½Ë›:>+³Ôšk;Ê“Ldy€¯¿; É…+¸ÈND€×´{mªíT¹Xz¥ˆ?wì-äž©æ9ml}-Ãz‰Qv6ÿm繺ˆŒÈ}X]ðår³EÔ‘ÙÚ7˜¥~îy´Ïêz…¢½úåWP[ 43Ë%Ä–€A[ëlú9°»ý­›° uM•ð°2¨ù®…ó:õ‡Æ°®GéÎ*A“ú\~ú«¯ZW«u^Û5ÂýðËõu™•%ærÕœ³P‡“æ(È)¿}b;÷E’— ½ò}-^¯¾ß_u lš&•9œš>*ùsïПGg·¡ÎŸôÝ’±0¨²¥^ÉÝ‹šÚùÕd8¿ý†÷|5MþÛ· ‘gÐÃe\ ¢JëÏÑ;¨*à96Ä´qÍ~û-#€\=/^{DÛÚúY¸Õ¨>Ÿ Qà¼ñ<Þrੲ"Y΂¢ú1¾$q\tm¹ÎÛ˼òýÕ“j?jj.3èE>µ“³‹s{¶TÂÚZ%° ºÝóQ™»ßóúþ½íêFz )kwË–¾ðჲ;Ž·gÕ6c}ï³áÓ½èǨù9 zWŒ1[÷(H¨3Ry{œ;þY¾ü¼Zä?Œqïgáëà±á–ÇYÏ™ûŒÅÖ:kŸy”>ê¼Z­ÙñƳ¡ŒÂ_r´´¥l;Á—ŽÏÜ`,>©‚ɳZ¾"æÛPxdÜ+Oì¸%¼qx—ï×p^ˆ1F?øqŒU®ê¹ ªµ-qiÛÉÈ]õááoÝ=H‘Lv$TP6 ±¾–O5S–=¦9ì]Œ –‘É]ué W6^?ˆì>ÉÌøi 9TRöŠüdWíãwJÖö ‡$BÏE0è,ý= [L¹{D9*­ò#ÏØ^Åð"zEuf\>µŸèN oõê¤Y‘vä¿ùæ‡FgI½Õ}Å€¾}š8K»÷$[ŸGaTŸç8oîgÙqÖQé:Ì®|Wø®9ýbãK$V½~u˱٥’úäà|g5%¸¤ä¨#ªÕ’Â@ŸÕb­¨Bß?+H’õ¯Êþ*Ô©îø½ëKÌX†”cˆîôÎî pÛwDëOn×G„L ùbúN ¬í»ïxö ò¶ãÖJ¿ÿžCºsп-Èé +GÝücž˜LȤI¤;qQ6“Ð9Y?;!Ó_Ûö£œùôs<}¦ ?û˜òêÇ=ï6Ÿo£ãûõæIÚÝꑾ1–î€D1œ]ÿ#¦VÀú³Õí_,¸Ÿç«iIK‹VËõ/¶¯Yßæcöô޽ ZuŒíÏÒÕÛù¦(¬!D{é[I¥•sÍ@¢ 4Å5:¢È@ÁY§èìÁô¸=ã’‡nc>~ûm ¾'ôLWò\?eÀ¿žP>÷¯üòK{¼%p/V{†ŸåÇb»@±ã޵7k;ûîÖÁš×Ï‘Üü^ÉþfËúà©WÇ)2|Ô°£p®Sõp_Æ‘ì%O º!Ai’.$(ÚâVŲ[8$FÜâ™*g’” ž}½dm€',äl­ØŽ&°}•e°•÷M’ô×_HYRº“éÅ£MöRYî±?{‹ úд̾Å^V£™vÁ· Èû\½tó*´$6ój¶­Ý:ÈÛ`Zý?S„g®Bö R-¶e¬p\ «¶nœÊ¼ÞnrôtO¶8a½ Nû¦Þž>†¬7LÌum• }Öl£–«+}gï!êáµÄ*í¬–}j;³9ŽÜ£ϵ3£ GŽ?‹1¼©ô}1Ì^Úè |§\D>* ޵õs.Ü{«Yî?[:~‹íZå 6=sÊûpgØñ*³n3çL°þrŒ Ÿå 3ßzwš£xy8»2pvbáþ_}9@!_mvÙïëŠö¹‡-ûÈ­›H¾³çHfz÷yI0±¤ˆ`*óº ÓG“D+€Í>ö ÊKÛJåÆò4 =íòˆÜžÒÞq„˜ UʯÝbTì)žaèl¸Ö}d»Ç÷Hã€l+­°OèœÜ*œ™ÖÓ–¼Ž1_ñqäš³ÀÈß²÷è0ì»ãoõ4j~-<– NÊ6¬#oß‚¦°Ä!)}±ˆñßæXlh2ë†hne¦_r””¥â_ðQ¯»ûa¯}@¹YyNY¤ájBqÈë0å0ý:FmsUz ¾ëÈJeΧ´÷Cèø:ÇW?¸'³n¸<òè•)×P¸F{þÞN5*{l$ZÚü¹†ïu{²èbd¿1¸¿þúþ}z¥K‚2ãeÝ詊4åL#Ñìçô¶¡>ù[Xø¡> œ¨lDÕ5ªCºîyúo3ÍIÀsÓÏ­AÕU€žLUÞ»òþÏÁÙÙh/¶ñ䀤tâVÉ›3Îкœsu´ÿÛÍcD×ZkõŸY³½Û6ŽJeÉç¡Ïj]šÜ¯,%ˆq QóJU¸²%²’WaÎ%á¶¶8ôëô¤õç¯ÔUÐ{ÙÛÚмR–ï,Uª…R]%¼„êû5~KW® fúÖgŸMËV©È©ûßnë’0Éíg„ì3-{‚T rØŸ8·4¿…OŸÞÒÉܵ5Źwª±%. Ü7z¶ÞÃ¦Þæäíù£½Ñä ¿þÊëy}­™™Š””¨W&£Ì*_A¼¾u;€¶Û#ªóVÎæªˆÓc~îôR-{{ÊúJu_>†Ñ (çŒ{òôœƒÚvtœ-°Âè?XÔïȵÌ} '¤[ѹOoMÆ\‘þ•Ð×!¬“ž¿L žˆz6w>«<ÿèóÔ:!Iš}l±é׾̖ pMÕw4måzÿºGÊšö×I€—˜×Œ7Ê0 `_/w©Jß”^¤V˜e~J¯q·§‡?Q­MoXÌyª^Ú2ÌÇ–4F¯ò¦UÍT‰pÚ:õ27l`Z\5pYK*×½—ö}hí •!Ôƒ°?þH'á—_°‰t9‘{hè^໺ íàÂÈ‚§.Ÿbü¤ÅgÕñ3E@Ý@üœ:`x U®Ý֓ɾ[ö ¿ÿš+Þ qõÃÃgÕ¸J¾šJ+½rMäMG‹R,æqùD)%Œa}ž¼‡£,Ï~Ÿ âÝ›h†“ÁÖEhG';Q˜”‰Å—æÞs‚¼µ·`ëÉ­¬ÖÞW¾kÛ†J¡ϭÁIÖ^÷~2î^¬–”ëé±óí·¸R$pW¹^fzÆ}~5ˆÏímhƒâ/û *‹ˆäDÒúÎL­ûª%€WBykî½…ŠZ³ cµéLÿø³Us…nn=Ç4Çœ;ÃTØ·j‹Õv>âïÔ¯sëY“C·–ˆg¶GHgÚ+2Ñ í­g5Û¤m-&¡ç€ûãåÚÁè¿Ýì¯î)ÈïÂwÈE_*Ô^w&¹d¿äRäÕ+¨îT«®2É<‰ÏÞw<‘œz¯æà¦ \NS6G»k$+/?½¿ò3Õ» ‘9uñë È+F™¬C™siðèÝ>òè 4VEx2ÇÕeÅ‚&¹%¤ç‰– ˆ4v†ìFGØqïpR™õdèS$CItnðª9Wðžý«X%½Yx¬b!×nsz§¹aöÛç—±Plzzmï™#Ñ…d3Ú‰+ Äs í,SÖ’ìø–è¥w ªCÀ¼Žô¨Bmèjž)›NDæà{ï þˆWi“tÕÕ13]s^U$X¢#ûH{iB@œ¶›Ú6“ÚI¦ýœ"-Ûžÿùç&!T‹á¼¥¢‘±Aö¶l¯Â8RhOYÏ(¤QÑUÍOí³”}ŒvÛ•?í/3s·6ŸQ5Ö¶T‘þ6³„ZVö€€oeÇõé\eÊ|pY(  ¢Ž)…¦§ eŸŸª#ÕÎØÔ»‹?Ë T[af7€Þ³þÖ©Òž¹ÄT—ôt…ÏR*‹îc†¬ze3[ÌzÕÄ÷O‡¹rï™Rü#a$¿';Šôƒ¶¹ÎY^침œÊ8óW{þñÇZùk¾ìgý௽gÝÔòlA2ºíí:®­ùs@Ãc5Ä,ížçò35÷í3¶½†Öz[‘^="w¥b÷öÒV&q síã~­œ³ ~×ÇXåßìlEÛ{é1,­°Àºöâ ßÓÏ[œweßb ;æëóñÐä, DRì±Kk@Å)ööÖp$êg†±F:E…xîöÎÑs†)89Á}q1¬µ{`ÝÛKè`%{h"A¼<Ùë·Þi¨ÿ¦¹G¹Ž`Ÿñj×hÖ<Å3zÝ^@#”OùMY>—ð#zÕ½>ß/ÐÜ` JjõÆ…Ú‡æ\ Fs=Œ\5(ÜCüœÇHçÃñ*ÊRÑ(ÃÐÌ p‘æ2LŠs !|9çpc„¢]â«ß²ÀtØwý\£ÛûÈÙmëóõ"­¿<ˆÚž”¬HVžÚcvã1pL ¡pz̧„&ý|Ò½'½ÕçÌ÷×_ãžáТºH—ÿmhÎ Ë™œ#+"£×ÜøZÅ.~Z¼¸G™«f}®OIŒ½kj_"·¡w‚wIœzZvæg±å•ý5|OSÅîÌ™1Sv5ïýÄ’e¯¥gǘ‰[ É¥¶9ïsðzn=yìE3WºÏÄ6«¯ëðôì¶Jˆû¬ùâ诎 ©ÿsmW&Ÿ÷}Ûù‰ðs²EåØ{ÕÏ·\ºþGåà^³í_¯ßqö·ô·qÊõ(㤽wfȶÝÖn4ó„Ô-×ÞlÑö> æ’ò†d@«~îãžR™^ b’¢ç¶-`BÀ¼8΄È)ðD-¸3=“gI ž¨ Ê@äÜæì¬gÚ¥øÎs¶ó“TC@ ‘LûYkÆ*±mI f²àoä‘Y €ÏŽíO˜Î-˜±¬ëoýýVˆï©%™;„ôáS*í ¦Íš;xËB#›i ÊלÝäæµç5 é’À”ô¶Ô¤ ’gލÇUd7C= Ûqf¥eƒéì`½Ê0ÍNh8wà>R1‚–òP¹ØŽu^5yôÙ«J–MkEM .§§{n•ã«R`Ó{Ô˜ªÀN–ÚÚw%°ræ'Z𜩰o}Žlºo`ÈX­*+5¸(kØ´F,Uf:‡8Ý£ÈËÌÝÖë'L¯R™Õäèö_®&$7=×^3b{mš£_äDÓþ“%÷seÇû‘ÙÚ+ÐÄBzÃo–®ËfjѲmä òÑç¤&ª^îõ¯8oAm½Ób­õ×óÞ5Wøûµ×ùw|¤îŠsÎpákÎBG9=_û2…ÁçK–]ßÃI <Ë“‡Ãqr¹b@%”ô›MÛõP{LS+à²ÚöRÜÌý·›0Õðm±•7ˆ¯PÞ,o)¦×{:Ñ<>ÖÔÌìôy¢s ý(,Ñh å1Ò¬7QGDÞ#žÕ¢@¹ÕÀRpŽž©¶Ê©™Î4E²Â~Àó8-)G@ŒøGàOü®Õó­haÍ*'z¾<O{ûÙˆª†)ýÎÑ|3á{ÚÖõdqÕ‹¬X§í Û–+˜Iãžæ×m)‡{©ÏÓ^³–ÐØl1ýé“eoŸ¥‰4ë†ïrwÉ2·?‡M‘¾°x¨#AÑÎX!"^¾#ŽÂSG‡cžB)&ñ^’¤D©™x!Ü5vٻʹ+sI¦>ÒíGN5u­ÐÙöšf¸ ÍXÇ '©íÕà¯ä’®ò)úìhÿgßÀÞ/õþV?k0ÍüTYVh®õä÷äµQ…4Y<¨àmpš© §g™¯}êm2~ó A?Õþr •“N½ä¦/ÎòÆÅ‰Ï‡ìŒ–—û`zm¸VÇqE3ï9¬|î>®?·+–Ñä-ý·ž =üT;þrôÚ’Lô}Œ =ïhÙëq¯áYÛ|óÙ„™#£ÉÏoy¼Ï±g×0º>{Š`&Dyì§cÑ»?f´÷ÿÛ*7©Æ÷…4kDý¯BS|þõ×ê­MõŠ[:°½Ybm¥l½Md*VeH—ƒ¡¶8Ô£]ËÆd²i††e+ÍUç(j÷ª¶÷ÐêÈëWŠÿ…”YÒš—/{ožˆ0©×kïéñŸÎ÷=Ç{¤t7k ”JiGÕgF’øZüm2ÉȘ=š·di îõ.2áÕü= ±ÄÚ3N­¬–Üärt²¯–—|b{D¡OX,p¬ (´ì>ÓÌÓg·AŸÂä@“Bñz:Y¿®b,óbå¶îá¿4aôo=ŠÊw±$Fûв 9ÐJhGþRë3©$ãgßÛß&O¯5sÜÙÏÀwÉÌÒ×?EòwÏaß,;)0$Èñxîìý–ÁÔNH:Ç'ÔvâlêïÓµÝ|¶½óíÇŸÜ9ß”‘ë¼_å'öºçž°¨Ðs–íj9På­Ó6tÔµ³äÜ–WUïcN:»½b¾š…CUÛÍ Á9+0lçHs¯÷¹4¥ÿ¬<.¶¼ì‰!„½r½ýEŸnÛúã0&¾ Oɹãû,Fj_ïM!·S]÷«Ò”¡Ïj« ÝÙz䲕ŸÛî==À½ðïzã´ínŸ¾ª·> ù2 û9П{©ÎäÇ%ž~™ÁF>·ŸÿñžlWÄl·ì óõkɾ]» ã§í|»#Owç/¢•Ï·Ü å¥:Õ@ ×sÉKú@¢d¬d£0 ”¬$ïÎhš-Ê82™o?$Ä~¬èQ¡€´È3ˆ'´›v³Q<ÇQù±Ýkyó¦ÏÿƒéädÛFø.@‰i e‚׌ÂÁÇó: 1ƒ]b2¦èH°¸H xu¸÷2Ça= +~=ßCñkÈwæªéŸ[Òö|Ó:ÿóŸÙ=È® Â&ÖSaqºÙØÑ¨ÚqæØ4ðÝ.é´ÌäëÒ«Õù.dRÈU¯}»÷¤šŸs•ó m=Fœ |·ïexÍþ×ÞÞ‰†¡ä\¾{×ÖÀÒW„A<*ysóò#Ò¨4€Û¡Z¾UÜö‘g°ìl§§”…ùÝwô d™ÎåÌrª"3ñ£|*æÓ°r*UÀs8ck¯8OÏœ>øI…ÁîÙÓÎ’÷·#ï¡Øœ¨ÊøZ®àÓÎ,»YV”ÒÑë}乓­ïû¨Õœ1ùWsù:R©’¯÷·™_» †Î[À„ûÿøÜ‘™¤3qkacg÷Tù÷½‘^Òi(ßÌ;ÿøƒy àûh…ÙO;l?=k9ô8yɾôh¾Í'h›ß¿oßÒmuý[Rä;ëþ½’¸N,ŒßúõkîfÜ+ú’i–PËì‘àoEòaúàîh&% Ï]__šme=ާÌw• tpŸ]]ÿ€»X*aàUÕê­ÉžwZÍ[pFr˜ I¥ÑÚpë~ˆÁs‹gíòa>0ܰ˜ÿÝF6GFea‘1 juk{ ¸DCò<éSZsk¸§3Cwû‡¼}ÛFãþú w Gç8ÿµùYuf oú_â%·0NØÄÔC'û›±SÇbÐÙ€ïÔ¸Žs×ò ÁÍä×åïWÄßÛþ2Æé±“Ç(e<ãx+@™BbKxÃ#¿AÖ4¾ìÏc޶•ÕÙqHö2âÊŠ.Ò,’áu¾AÛžÖßúô‰30Ç|%˜±Zr‹mæý!¬€Î~ ÄbÿÄùŽp±ðëÀtJJö¿e/a£Éx@¸g†O¡?‘r 'Ýæð´D/êi´ítU;[ípÅb$$LÕ|³ŽHÚäqäÝsfèf£I{Âä5+Ÿnô Í)Ô3ãîŸBÙ뜥êæp­·¶CÒD„·TÀT-{öR¯è/"[«{¯M6´õ‚ÆZZT|î6Ãq®¹×áõW^ßÅÀèÖÂ÷hç9³@i‰Û³:¼I¾ùŠc¡8Nu¿­ ­R<#*3 ØkÙ÷¤r©ûó9éÎ^´Ó6£Ï½ˆ²w[Øã#‹ÀI´3]þú`è9oû#=ô¬Ï{çå÷†t)’¯«¨g®&œÉî9óyøû£"8¼½‘ÖgË“öýí[zDXFn0î£ùü¾?èöT î…+m-óoýh7>4¬ð7–¾¼íñ°téÞëËsd0ýIR&C/ˆã%¯'ã®m—씽/<äað±>z "WA€w—(=7;•à>3~ªÈá³(0ë,9õ5œš‰›é ƒ#{ƒU9lšô¥µ¸¥ºÊèË)^Ĭ9 Ò—í·øÜb&³d”<ÃÛ©-±‰#žã­0Í0îXþÕ-éç¶FfÕ{IJ{ÌW¿|¸y´ò.$­¡ŒöÁ›cŽM3Öœ…A›ªÀH×| ¡¶}doì»~6›(¦ó),¹*¹B1”„qôëzikãHým1ÙæÜOð ªDeÚ*[aÌ8]:¾gn«xh)ÎÓ¼5l*Ø´Z/O_‰iÖ™\…ƒ]ÕÓãFŸòLkÓÖ¦Éã,±uT«+²J¥‚û µP»£þÞºyç‚?~l¢)Î+˜ãçÍ’Cw+ÔGUý÷97ðÂR'ÊÎ03/Õ×SHm;ù¥‘5xF¡ç–ÏÏè-³ Ó §]a’Àíæ ëUlI_ö³MÄÀÖâgMïÜ£©öå=Îp@ê9Bö ß]hU»Ì¾H8pBpGŸÝ©¶m âÀv¯»†m¹…Xe¸_áV³ Ë—ÍUhÝzI>Àj¯šŒß÷YßÓµoeý~nÔQ(}ü|Ü·;7àÂþM XÛ»¹ÏÜÙ«÷KïÎ[­$Ó/¹=ãà}{0uЌ˜4Ƈ;Цéû±T û<ŽPsà@uÝ8Çä‰>ŽÐõÞc ~þºnÓ†é†ýûS9ªÏê‡äRœc¦?ãlzò•‹4d41Ó)Í´%QÅK͹”23ñ‚΂ûm=úÛöÀ•üÆGAÀ½½.¶¸½ž¼»@{`KâSkzqÝdèqÎi}÷ªïßo‡kâ'×.nØHùžTÃS¥Á"e­³lÝèýÔkˆ’Å0iûd—н-étµ‘³ß~²ÓfŸ°|o?£þ‡ƒôÖï@yeû i4¶ŽÞªD¬~ù™M+ Mòåí2Õß:”JŽI½ÞLv¦±Šg•Úž£Æ÷Ê1ÙQ-]`êPiæÅz 7½êÛwTÔN^ËÙ@·¬Hr ÛŒp_åDvRþ¡uˆ7±íu·Ú¥ƒ‡ÑÏÅøÌè¸ä~˜ÉöØê–è9aPÎUÌÞHo™ú³÷ú›¶”å®à° sfx ÂØò¤*­úïùhi {F{ÍkÞí£Î,orθo3£{ ?¥Nçb=²¿â@²5ƒ÷ú5y½™Æð=:û ù“uaÑñ )…î3ÃÄY:ÁÝò£ÂbŸ9=øæÞ@Bùçð·Y÷¼ÞÑÜŸâx@4Õ~Äë6×n>{{Ó øpjéèh;KÌÛ¥o‹va¯*Fy¼(Ÿ2`úi=–d‰æAH‚ì¾Å ªŽ l|Tˆ‘O9"ŠßoÖp¥ÉäõêóÊxeq"þ; ›dÍÕRÉïbáMÆÂëo ¯õðNéKº_WànËÈdÜ{‡™ús*¼-­Qù”‰­ pÛ_È <ù×äÂ]ðŠæ̯kü±²òÒ¸çHkŽK¦ŠÖÜ»ÑWgz†/ý‰l•$R=”Wê*⮞›ç‘V½çSã=–cÊâÎÙòÔÁ÷ƒ³•Åwl–Š$Lp9ø½0oàT¾)K K@9 ¨äéB è¾ó[x,@?<=‘ã5ŒÀôŒ‘J1X¦Û1Æ@V`W÷ÃSŠ,à+ÐO޼jèkwË  …Ûß"Â1.°8*Ô{éK…ìÊìtÄ’ïZt<ê:+o׬;*Õ[£ßæÞ[–TkS\Tîô<-7Rß ¹‘¾uÞ™¹sýô"ª~hö”ÐØ×¥úÙ[݈¯ýC÷Á*h®%Aí$h4{µ|vT5y‚`1ÍŽ9«±\ímæ|¶lmû^Á±œc‹›[[§£Ì9ÚcQJåÚóy½Íú÷"Š«&‰r¯Ÿ’–Óç½·uLûy¼+–Ï_uèPžZØ ;|œa¿äþ<7Íà¤gô(î¨ç!ž%92ļâÿG‰t¶Ò:sÏB÷êòŒO~½ÂYûûfjÕzz,rF2.Ùpï3’Xqžvbj˜—Õz^T{ÏÁ,{ruùk[‹W¼¦$6¸Ìb&mí“ýæ Óm­Ì0û® —(°f>=—Ò£ÛàOàÒ01XS:"e³ ¶øx`¢UìNÅIÆ:òäÝÓÇ&Å3©Y—`¦ÖÖpÀÀÍTêS’%¸ÌW¾{ílJS*O߀­Ö#žª°ç8J}î²Gý²H“³÷þO€Î‡Ç¯«4ˆm«@Ù= –@vÎ1ÖÆ¨ƒ¤œuüÈŽÔ¸dÏ0O‚xFÊøÆÓJ<øªÝl2KÆ©öÏ(Jûn'û:>î(1~K™+Žæú!×êdw»¼§2^We^SuMCÏdÍ%×±Ý$ðT^C Ì¢‹Ò›QJ“êÏ­Ûì»böS®C)N)c[Òѽ^e€Ï͸ ™Iw¬w÷€iût;ý3n%Ê:†kM¹eE*Ÿò b§üÞíÞ4PºË§_Ê(=êc¤\Pùž,ǤÆõÏ)§¹ÇK?`j¿í‘/·¸qûé¹¥ï ²¾$p¸&ÎÙ’ m±þ½üéqÖŠ=º8»æ=O¼vݵûBmŸKP¾<æ8¯²™wÊJÇàå„\æ}fý¯  xK‰®fûò Ú4|Üú·_]OL¶«||/I•7o€r\i°€Gr+”3q¶ÈFe–§ðù£b.óõ~ÜÖm+L +ðÚ“ýÐ[5d¬C«¶$ó+¯”VXR [Ô™/—ñ™ùx‡%©-™ üHFGÀ¡ƒ~ãÖªDÏX¥”aX|" Æ²=ábæðOÝy*ã{§µï IU¤¢šò -3ç50Œ(%_Îßú›w·©åèè+ÌMÉŠ>ÑÛœžô£LeÐÍ…kT·Ï—em¨xÍøchèÖÜ|ªØ³@Jàdgœ”³ŽÂÈ4§\ù׿þëßÿfËæáᘰö¯x޵´ò…•¹$ßÑßÔƒªíŠÆ`Î|¼ –¶8´o‘)ojä™ö¿=ò-qyà!Ty³0(æ %…aUOqxÎ%òfIow9çàè"¸ß÷]Þ³=ñì³ÕAÕ¶~Y¿UÆ]ž]rÈ©2ž¶Øff~m©¢b_ wž²¦zé$/j¦W®WjCB j_;jßgÁRU¦8úÊgé’k°BKÇv–•Ë-ÀêLïó™Ü%:Eìùˆê‚E#óë:ŸÀ±Å®Ê[pWÏ_Š¿»‚–´ó{”ed®9óDWØÜWKy8s¿ÿ#7òÙ"MF–ýÊ€æmÁÆ.Gþ µúÝÁ_gN™Éò>? Ü·àû˜ý¶6®±¹ö^*SÙ£Lc` ÅËp¤°£Ë˜ÒW¡sûÁÆ8 # ™×Ç °ÌÍ×Jû®äHheÇÓ‡m0ƒnÇwÊ ‡¨3 %Y‹xDçšÃ3pO×óôMOkÂt—¢!¾@ÞèÓ6…‚€m´6Wå¸UŽ OÌ+ôãõK.’\8ë+ψp“0¡‚Õ–4°]³<1¬¶âDŽÐËÚɬ6”*üÎê`ò×Ê{˜Ö¿*ݳ‡ÓûðT›Ë¸yNJ¸…KîmµzŒ\iÁqK°ã€NÊ›ì0ÌÀzû¯–~=9x8ûtžI}¼4îØŒÚQljêzÑ1|—# ¾KVf-ÌàV÷Ü÷¹W¹º•]¡ÃŽÒLÏjëk¯À{ƒ{Ô§Oíºþô©•æ¶±Û·=RöxÊí^Ác@جà¹%Ûghœqóy¦ØãùÀz¶8ß÷f-îÙ~ÏWOëÚiˆÖT¢ºïÙ¿Ù;Z×mÿVmúþršëØfîì5ö¢7s”¶²±/wÂ-[Ùj¦7HÖáJîÄTKÄdFÜøv“k€¼hŽ ºïƒë“%¤Ól“`ñÌþO`Újc;«ÌSM>SŸkèÓKZZÍaFÎÊß=å:ŽҙЎWvi2%—oW¾¾©Ö£=жøÎoëÖÓù­Ë*Ö–" &pSòÏíHmƒõqÙÞÐçoáÝY'""~ËrìÕdBŽO ÁÓÇP®ªä1zéu÷Ù¤’L¯œ}–¾žÑ`¢]kªDDžQµß•ìò•—Åç¨2·Œä4tKtçpçÎЭ‰¼úÖ–ëÔò#Å'†øææN”¥…>¥mÿ8̪’@ûst¦¯AQ†¿î‹Ú§¥v#=äšÀ=•Ó3mzŠm4¿á4뚘[E,£3zJ.SÝÎYÇsp&€9öi“h«B¯ŒzôŒÓÒÓ bkȵx•ßøXŒ|‹’â¼9¼µ{]í­µûE&‡Ìð€Ï‡sÄ_õ_Ï<Ý»Àú:(\‹×¹FÕÏYù«=iÐçÌ<£ðßžì)!§qP×söØÖl…™V7{)[-¡¦oí¼é¬\f9xšžî=¼VK1—É»dq¸”3 i\8¼lÊcä÷’·ýW\»€»eÅñÈgF1Ya ¿$+ÞÎt%OÍ:çLcMP»Å^§2¾ºÐô&Âs÷þ0ùiômI)à^=gÿT­mšÙ§ö><’ëd©Ãµìã[$ˆ—Æýy"ilTKu-R×Þ€;ÜùànøÎßâBÃè*SbqùزSzwGY±lv;|SýÖ:u)¹«>]áÅ=›WÖok§K`W‚‰vÒ…&{ƒ)ÆËûë‘dä—_ì–“pÙP¸½s6ŒKø r”Ò´5¨[Õ®,³ì9›qNñ᨜ã*ËjŽ)u~Â÷¾`[É:ä*í{2Í’XôÊþOß'•¦¼µ~͈­O¢>Î)2ôÌX.%lŒQç†ÝcÀSïw^{š™_Í\G®³úÈ$ñX¹>vÑÛؼ¡2²JáfØY;}oŒ®ŒºžõèàoÛ=€sõŒùã¸ðÑqÎ$î:W`ÜßgµàÇÖZB@¬Ïr=ßvÖ?CÆ}¹7²|F©3ÛžŒ{[Ö¸o3ëöÚ~ÿöe6RäÏ©2ì- k€H¸›²°=Îi¹æª[‚ÚÓæÌÌâûçTRÚ[F#˜Vr§Â¸gÜħp"ÁŸBémöWE)æçÇ-ãIWóî´³ÛÐ Úl¨G‹vdš‰§Š!•;‡©í A=û´êaˆ …±-9:' ô_¡YOž>Ùz ~¥Ñ§!l{uí9ÂX½á¹üÌ.+ÏÅ@.†â×ÝÈ|P Nò˜šÿVÁcê6Ü­§—Ú™²c!!ý:¾ém4vœIvÒö1½YT–Ø+]¢ AvÍ!ôŠv>/¤2 œj&§÷{>ài¯ã·“³´­ u~rÔø¦ÙqÒRŠuHÔ’ËÉÒý]\µ˜xÁúÔŽ›c6|Ϩ#÷ßR!Ù‰@¹¥;âÅMCòâX_¥2rѱ׻ Ê %[8”Îî¹6/ YáËîíwéb‰N x’Þvuû.:Õ³×—KîR÷{ÅyåÈë¨nèF›Õà®ùÜ"¾×€*® $šíƒï™Š}âÉy›‡Vá±jyfðtõÕÈ2Ç5õÄ|WÞíÞÑ&¾V]êÏŠ|fqNÛÊþáØË~ÖÌ·ÝTŽÀYCÈí³òW÷¸|ýšŒ^‡+=’}ï·PãòÕwü¥û™d€ÿ¬ñÜ!†ÞðŸSt_Î?róÙXì•‚56BŒT‚õŒL²¤ÓQ‡·Çè vçËQGh•yƒ¼¶™Keyú¸V€p¨ÒgôOû-§úv›IÉ|°Ýö(Ez¿g÷ún@zxégt@'ÇLÓ}™Ô,RÞiN×_‚ AR6*¾>ÕÒ ô=ršì¯r:ÈYHÀÙ§³»‚“*ˆ§€ÉŽAÊfútU;ħ:?~û™Q°[ŸB Nò·ô¬‰­wí+¯¿)º5â).¿íÀ1úïªhÇ}¥myÆYì¤ÑÛtÅIIR/ÎUÞŸcÁ–Ä@júµcøXÕí+½×»ó€G0#g÷…8[R,$’Ç Õo©n92uªª”­¼µœ‘’ɶ\ F_ÀºïnY~S=@ÛÙÆW´m%Ó˜Unå• Ÿ)æÓw ]’a"¬ZóvࢣN”@|3–ý°6¡'ßkÖըɬçd§ÂåÍÌ5+Áº‹óÖº{÷&Œ)¡±À$o5‚´icÕôg´_ŸçZU ¦ß¾%Ÿ˜«Àù!}u…h<­“]µl¨I½ýÐê ï>>‹·R]·Œ ÷Ücæ&0†íÊ•“w²Ëµ¿±R6Œršuuû¿Î1OHÝ÷ÿ~¬ÎK>ó>_ÑÎ3ÉÇË žÞ÷i¹ïÑþ2%AN_´¾É>¦±¢ 1^´É…×é~[&Û1cV܈K ª¾¡|F·ˆ%’ØÆ.v¥°¢==¼SK-6´A’Œ ^Sž #ùº°Dw|d©>0{¬olß8lJœ Ep°Š1¼„5Ð7`¥ä@>Á·³`FQö¬ͺø¿&…P^¦˜]1÷¹½ÎšaßÛÖfiÄVI6“œ½Ö߆‰­ü†;LÐ/ʆeÙfYÊ*Ê{ȰýbèûòFðÝlwÚVº˜Ñ6ç+e …¦<Ï"ñ¶— sSÒC€¥>‹ióý™ø«p%§¢ò8oÖOp’RQȾʵ÷ðôY3HqàÝù\•íŒÍ~—ú9ŒžTXÇýŠà©ÆU5@©!ÎLo]µòº Y~#0ê{ˆ=X:8©ú²Wî_’'Y®“n3=Ôv !e¹GN%lï¬äêàqµÒW±gNÓ17–®s¸ºÌ[MiŒ2%°!*k „rSJt*2F2UÝù éf“ÁÕs&-&-@ʈ¢q¶ÿ\~¦„«Y³ÐF­¸åŒå;Jþ䲡—’ö¬òë½›CŠU=ï§Frµ+ùè¶žòùµë³ò½Â¾zÚä¸jeпþù&©0:¸JÝä1ûílqƒÑìQkÍcL]„V8ɘ²í¬/·Œ%Ž4ÄÞ‡ÜK=Éðæ ÷žçž%º¤ôE{aö¹+Þ#[ ¬÷ùoÊ·†®uÖ$7ú¹õ>[ÈcU`¯}.t$´Î±Â~ÝðqÅóÿ-¯!S£5û•“r¬áŽM¦F úèp\ƒ™ª2Õ1F’‘0F#тƿܯÀÝ#žf©GÃÇäP倞 ë­Ø°J¿k ™¶D=iøhyŒÔ½ÀÌ¢jzÖ<äi–S‡@'¹ú©#æA´C.Tr´}» þX¦d(÷ ªµÁû¶¿r¦fõ6É"!·!Õóæ³˜…:yk5DËšÑh¢ºÖ¬—¼Çe°˜häýYP)ªÉî4i ™}éàíøÎÈ&ƒ_3‹Iüj$°ÑôÂÈâsÒ÷ÈþOêÚµŸÍ#*5{[μۯ0ŒU˜6 €» 3l!p“âJñg–_ò*†{Ö5Ò~‡*ØÊÖóþšÌÝ Án8Eóôé"%hž ßL¶¤)æà²ëyù{Ü6ðë©t×.Î^ÿªÅdŸçðú5}©`%’a(Ö|yv¼-]®8‚ÊL|_*äÚøÖÚ· ñåÞ“b˜taxEÕ³éUj’zúÞùÞ’:û$ >f‘*m>˜OÏŽ„á~-WjlÎŒõÀ}ëù””èkÔåýu;š Ø9_v䤫ýšälbmþW> íúâ¾d“ Eºvç ƒ«™”ë..Wøïs*ùs¼{}Oßó#³í.×dªpð,Û½âm‡kßÿÛg /©’ß)n÷tef`¯9¢wÎYó(Ajom5r¢"ª˜$­N,xª´9P·éǽ‚š¶éQå1~Ë«޶—.$|O¼à)ì¦Ç3¦Ç–šõÛ9‰QT’4ß“}¯ ¾w&ášÎ!xÀý#žÉ‘MœÎ ˜$Ï0ŒÎ€¤ä¹aâ%§1+œ¬|ÿŠTÔú«dPžwCõY|®ßCÀè˜öÖm§w ç ðQ~í“ 0­ ]ö-Ý)§|.À] 7=»âTÿxk˨ª6=!xž?t`ÄudsàØ¯ð3Ì=eIΰßòÊI¦ñ¾ìCD;ìmº0gU0s¸·DUwItÚ#F¢&ϨÃàr˜Î9,›Ed!2.”ﯳTNm&Îö2ø{Ž/LÇ×R™o¾©wIqdM è—¦¼}²¾`k äÄC£ –5­×« ÇÝFv†Ôò˜OsLA|q´m/U7r!lïh‹F_sç™– 4!â\تџ;Ö÷Nö=;.IÆÛ·ùˆóDÌ)»¾ð¹É¸+GV¬ÿ\HS·$ÇpÀ*žX–¾uÄPNhíÜ<Íb§²Hèpù­òÚY—~5*’¥9±~ØQEÝè?ÆMUú¹PESq™Ûê”è*PEîM¥W#™Ž8øknÙWÓLŸ©Ìv8”®ÍuG‡Ý±q\ãÏ ~ºÆ[_ÛžÇòž[òt¸÷^I;‡œ“.öz5yt‘ä-£æƒöÀ½*,k¸·cæÅÓ0Íઃ„t¨âõ%iP&½Ø=®šŸÒtöÀ=¥ •¥6O, hð–ð‰He*@oÐ\`þ–Wqçé c¡ŽôÜ 6yB‹%jJÊöÀ%5ëð¯s…º¾—4Úè¶NÀ––í·ÀnÀ™ä4vÐ'D3¯¯¿Íu¦œ6…:ânýJrÒê¸+à ™L<À<]nÄ»Ô!uÛlÚk9Ëqë;z¸YÊûô/7LGHƒß9[*PËv¶÷HyoàÎö£7ͽê}R;ÞÃòngÉ>ás9Îù¸ÿŸÿ³%•!K.Ÿ£©kG~ùšR°èH ²€!ïj’A®JÝδã4—d)ÒbwÛø¦rø±(E…wŸ\› ¬¬¶L)›†×Ö»û>“™©©Œ‡)oßÈjuàµ|Ü £%,Lð*šC<±ÇF)lsÉÒf²©Vï +S6Ó^ረ“Pd¬no?s™ H+LŽrzø˜Ï®y´iY¥22ålÓA°¶+2ñî‡_õ³;{ 9Ž]Z»ßw’³ÐŽþ˜ÏZE¤l¿saùî Tr=ZØÃgh~COÓÞ…FeÏ óÈm{¸ö ¾mòX˜´MuýÜÿÍ%ïG>e¯··sO‰¾.¹f>x¯x`,ÿ‘:~Ö ·}–Aÿ\ž-ŽL4;ìó”"Õ³I*3;Tò²Uáý;· ÷ ~ºðVñL•V&^ìu6¬õøû Öàf.ÍUKñÙ@‰SWÇÈq©QSN#™ ,;`½­ ’€)5â…½#ø¤¾•¯A[¨<\3)=F$‰©2˜Æ§'Œa )Ma¬yì%dGƒ›üº9lý6¡|eâÑÇ{,ø˜<Ùz%wöÌ:² ~ øÔòsîùqI'D#žVçW ËœL°# 6%)iÒfŒ=RIÙÖùûïþù×_lI:ó$ç­ÑÌLoEã Š_å¨+{†íO™“ »ç²°„_×^²ˆ‚#¢áT÷«Þ2¶ƒäM¹%÷qwTÔÁ ïa¿ÎvbÊ„4!@G+ç œã«A7@6ü·iÚMëɶ—th{U’æfPÏЧâ×%°Q@>ë€l3ýÞ~9Ãxt/9{K\l‹>ˆã{†PÓþè¬< õ“­gkë=êJ#W³ZíŠãûjJ}ÒÁ]Œ»dŠ.WTÈÕÞ¹°æõÆ­öXjÊo$zÑoÛVåhxFzñí8:ÞÎ~ 5GTg#­‚¶‚Âö)÷ßö7ñè9Ó‡UñLþ¦Zæw7ß¿=–j¡Ž†•gV•õs«Î^[š‡nƒà|¾¿yÃý–Ü•ßÏO}ne oVùõ;@ù¬Éãq©€ ­=ݶM$…–-ϸ&r¾Ë¯?âï;ù8`~2—ÿ¨á}ÙgÎ0<6€&û§>s1{?7z¹¤»2Ï zú&”—íšô£©üæ¡•Þ2ŽG gkSD!8Þಣš”V˜c¬½á xô|lÐROX/¿Û檑Ð_|¹GKëP©AR´»Þä/m"ù\6}ÎdïçK'mW– 'VM?_΋ý®2[,{ýn÷Œ{ò(ÚbÙ¯{júv¶7ÀšC¨ÀtÅÛð‘W”fš®Nµ#„®ãÁýŒsª>ÍÙ³x&(ò„ƒî?¦Ï ?×à¤QSm¥·N‘€R-íH», ‡$æ;áxþVÀÑï±6Ú²ÞcY Ë;ÍÿñJBüÓÀ5öL¾ò+UCŸ \!>~]¬¼ð©××+ sÓ}ÅðÕQž½ Ôvþ¨æànÙĮ̈Pèäaæ‘Y}¢9ãÔy³ý©ðΘ§q,•É ­FßÀWŸÛÞS'¼÷8 Ü‘ÜÜ9F3‡™½%ïÌäT– x²òžmÀß=jÕ‹°i –l-Wߣ«º‚ÒÿG£«íŠ“^ܼ4èD&«µô”K©'ÖÖƒ ™wÒ+Ð:ÅÙÛÁÆ>ñé3#°n/yAs<%ÂÖ1\iè«HF Û_râXÐñpÒC´ö¢1—ï5ØÆJ}ºšÕÒ" Ïet”6œW¬MŽ=Éú÷\»a½Ýo[è[ËäUÎâö¹·ǃ°ÕbxŠuò«f®F`m¾ ²_1p¯r‘žw¯c¸3óJ)õûü× ÜG@¿/zYZyÆïE,i/±çáÎ×Ì.¯ÉQîŠ%Øs‚•ëð}Olmú³, _D޼u5 =ó4ýðßú·o!#°Ø€žø_jy¤v²F FaûPí5h®úæ-èÉÃXž´¤¨d_x‹¯jÇíØ`g³q²¡ÌüÂÔÄKªð&=Ú{É!Rï>ºw:8¶½=ô3`Èp\>îv˜©V‰©ÃNξOBUÐRJeÈ@µ"ßP¯Z.¦gK2ñ‚òæ¡Ó PE ¢ÎRƒ.¼óÒ¬Û͆¥3âÚ›’»A|>%»´Úí·9¨šRfZSÁb²ãZÕȲª\5hH¿¢úØ¸Û YˆrRma™{¾½n;½óS`“ìr¤o{B’¤ôêá¨1Áà½-É“ED–!i85w„IHJf>3sÈÐg‰dˆ²V¥Wûôœ¦È¾MŽÛfiT=,’€ªý=i¡‹®)`tõbÜãEÓŽ¼´òVÀÃÍsVc‘™îO‚ûJióŒÞƒ,ÇÂÃ*{¸…Ê.‹S—%ܹügÚ±Q÷ƒW8ÅÊ'Ÿì¾µûìí¼³ÙG~5°õz½÷qgióJ Z[ÓÀW{#‡VÛ½” (ìê \Ú~vPQº¼§cŒ?Å:xÛ&ªSá"D|¿Ë žh9þ[ó‚¿m{¸¢ ßëiÕ»{k5'`@?ŠpjYR}ÙÍÓ[ 2iíM-ÓéÅ냙Ô1èó5SW³{¤ƒOûÅ£¸¨µÒbÕúâÌ«ÎävÅŸ+ªWz¯Ë¶b{}0÷Ú'6O›ÖϬ²Jë/ ÚR–#÷U§¬ɵEìçÔ¯?ÐÇ}¶Ô°”nLW­òÒÇ_öá¾’VÛ‰›•RŠ +©)ªrŒÑ¸§<™HjO‰äËJ±˜á–=5£öŒ¯jukpSë,øhn ;zà¸Ñú-L ³%Xoð…L¸/P¼†oÐð÷ „J žp®]ë=ÏÊëõ¶Öt,‘(¢ ¨™M·« ˜,F†p™€2á{*æ+|oï+of7e3úŽºMu8{&uð=üÍFÑHŠ 2ŒÎ};fÊf¯#íGôµmÕÏÁI¦ÛVɓ픊ê’)÷³Ê!Ker?KïÞ`7Q'Ã÷ñ‚ìt™4¥ng,U[â2lÛňr…„Zû5É8’ÑU°RtIõî+E{ªÏÐ) äµï.– {ÀeޤgfW+çצA¼E&Eâýê~´ïeżgúÛ+Rç·}¦Òäï¿-ʼnÀ·°¨F 1Iö<–Úî–ˆUè7ö>3²}´£—‡_­Ò–ÆõŒ"†J·­ÏU’qûoÞcû *)Ô{¯0 iªácu³IéŽù.d[™`ZÁdíê°VExo‰È3ˆ‚ߤäõ³¬ª&’cš¬e9ÕÉÞ>6©Ëï{ŸWºš‡º Ößm@‚¤ååÚÐꊗü\NSÿ+|ü¶Ÿýœ dBe;˜iùúµî·íÎ}—/í;ïèòïÚ_Ö¬U.ŒñzKÇ=rù? ¦¿ºÜ´:<1º½¦B} ¦÷2›ÙÉLJAzôÞgÆl„Ä-\q9ðî)wá±jlº)ÖUÝ»ÓH Œ\Á¾é@¥ôíNIL6èÅÙ[ö“\{.“w—Ò½ 2ÚÛ$N¨GÜ%óÖy'MeyÂYƒx³Ëíû¦cêÑňêšÛ z&w„.÷ÏЀ‰ÏW(¼¹ŠY€{û´t RÆö uzZ@\;KG\eN°:öÝ@gé9Œmâ }ÊæQW¼B1¨WÃ̼k$ÌËd·&m[I äáÄÒºyŠ:)ò-Úˆ˜¹Ïž$Ž7¶´†Ÿ-ƒ±o}êòõNEVõ‚–™¹¤í)%k‘A¡Æaeã´€4ȤæX›Õöxk:½Tè?“ÜTø›Å€=[tØ=¦µ¬<=Åejõ®±F:xõØîu8Õ$™ûô¢1¤¯C¨5쩦ºîÃzÎy¼’Ô;Úîç¬$E¶«¬Žù²)Æ5µ·6®)&ŽÖ0ÏZpUU"xï}ó,.Úð\"él‰äãÞ&ëˆî^çÚ´À—xôÅzú³raâÛfï: œ„8.¯:»o³æ®…ªkûȾÏGTåžë œÊR‡$•–Ý\;ÿ(Œ·C|Õ¾§v¼Fåßæ¨(œbZù˜Ç™Óo=ø(_p± ʧlfÌðsŽK²%ûk‹=˜`i¯¸ÛƒFº* p È•,¯¬LþXð·- ú«í tɹ§V«Ë«>ÿJ®26ÄtS‹‘VíÛ›rAbCÌý” Ü2‡Õã§#dŸ)ã=Vð£ED?€{¤P_-b®šÑÓ]CÞíuÂÚ®xÉÏ%¾GÝ€-=}]ºS$i‹‹ê»–”œJ2¾â1ÿy %¯½~pœò*u@âU2瓘™´ˆçoù×ؼ©‘\Î9ûž~<¿°óuùøv3çãñ»_nzº$öݡߙ¤n5_If=‡MS) äJûÈ ?’–=O͵‹Å‚M‡t#>ý"ÒÀ.×Y‡ê\0¤ˆ—:€àLe)I>¹Ìô'$E[o}»ÁV5¼Á+ UV€˜6vÜÛcî\ ­JûœHGÞà©×_$#מïP@'ìoj»Óª2?Q xöŒ‡MYÿ,@JR±Å©OÑ p—2¦ŠŽÜ9ÉÔ[)à5ûÓO}l;^m) .FvqI…=Y Ôÿ¹ÏsO¶µµ1Ì*›¸ó:{•tÕüY°ž¿Í5Ó-£ÊeNÖøoö(ì ¤²³ú%”göîð\ƒ,¹¦lç*à®îœ¾Š|ÿ-@Ôc¬í}í/8FòkjŸ˜Jz9Á3êÚz\qÀ—ì¹eF/Ò‹jGë¨)~k?x ÂÚÒÜ¿Ó!œ ›¥÷+?!`@`£‚­ÌÓËÇ&ÝßyÅòÔ닊4ÄÌqR¯¹D²=€¹LŠåýt’)´üé³eïo@_£z>Þò‹>« ¾s[SH#*jÌdõ8²æÁª~õ<®*éHï¼>&”×WÓSU?ßÛB Â^׸ E0RÎÝo‹G§Ÿ.6}æá½Àt Ük0ÖM™Ø ñ!gÝ9÷÷}P{ÇJòª9æç‘ |õTÔ}¡Ñ£|{¶Î®ãh°‡+Ýû2ƒòf»·2œŽ'¬ûÛDòè£$f.§©1³eúûj| u»Ü ìx Çi€Dz°8l\^é9Ã2åÑnÑKeË%¿ÕŒÌþÃÔØÄl;ŒIé Á+ïö=pA,cæwÊ•’/|'›^ÕðD2™ÏdPÇ6iÈ5-#ìŽÀ=uç µvbÓ »Å²[À“ý„C‘[TÝ2˜*†é9pÕ߄ڒ»Øò2å4òPo?§Ì#}`_åqXo‰÷°cO3JÀÝû!¥#@Ûœ.H㿪ÏQ]Hò¿G/ÙŒ%1c¢Û–Æ}î•«ðou‹—¢Ý.ïò“ÉôÁô2YƒëÍñÐÊ»'àîAyrØrtipJH;?Häè—¸¥½j«äÅKÙ7F[+„›ûj¼RÅ3Òé v§Ç,²âÚ¥$i`E ³ý·„|E¬'ëÇNZʤD$¹UùÌšœK]ûÖ8©>Ë£î½üCútPa=ö·áSZ“Œo­¦ºÄ<?Jˆï¿|¤Â‹#˜9{PµïvªB¦^%ŸåSfÊ ¦{_i±%¼.•¹$L)•ê©S¯KŒ#“ƒç[7Žž½-»IÊæT0Ø›ßçjf¤øÇçžÅH*Én)EUŽ1ž?‘¢×0úñ Fô›¹7OïÐ%BÖ¸KUoïþÖëd™–”§G¯ï)ç¿ ”§¨OPgz½G]î4ɯW‡ßÁЋ·»}®ŽfâËFÓ¡Q~ˆéç¸K2¤áT}‹IÀ•ŒG÷pub{'™Ñ†2ƒ¢Ô1¶Â^î1^CÍsí“SÓ-'‡b¥žO¾•øÖ܇٫ÎÞ®î(}!ÑûƸì»lõÎ ÐÇwÖ§pjÁç9#¨íÉ®/·Œ-Úarl¹¸pÇ€á¦÷³"ÔésÛµD ­’àí[îiœ±9R|äKãóíºüçå¼·¤2×⨮y鬯áqY­+®¢sºñg O¾é³jµ @N¿ñÙLXv‹ŸöéaPõñ£+íë× QoP “VmæèüÔö3r`ÜȵgjÆ3¥Æ¹˜Ò©ópúhÑ£ÜaÖÆ£Ô ~N‘Ü•<¡íPÑ;¸KZ#Ð#3A¼t¹‘TÃ儨G?~$60iV^éž|ä³ÒEdë ”ë+©€ÇaÆLü–í£8cs´|.çF²ï’ë´Q§šÜ‰¿·*õúŽÖÜ'Ä×no{F©ä¥ãÐü¾™uš@nÃù”©¨½–=e$uðwË]'ýjØô”j~jÛc™«ŠF×]þÜóîÕÆ™©*òögHöøÝÓîix2!G‡³?Ã;Üñbâå ÏRWA;ó=ÌÚÖn¯!®2>QÃ…£ƒ ‰úÌÄYò¹æò5ÔΚóu|ÖLæ EF¨hù ¬¼Á±FÛñV¡EYn~MKÕzÚ»œ|ºô¹•k×^\ì¸e}öÞ2éS‰Oà.ï÷ë¬ký¾JªdèXä<4hS@¼»õë¬A£ÉÖ sÏO#Tw µ•4ÒkåÓG¥‚?½‡ï21Ô™ó¸¨ä¿þšëHÇÎ’žú„Cö–ÉJî[FjmìÛÖ·»~›.ið´Ñ[8£8„BÚ*0FðÍq—<ƒãÒ®ŽKÎóÓLŽ…à{U?ˆk-WþŠÄåè—ôësÂå/Ý饷=*6…·wN”伯³ì[­Ÿ‘}«ÁMª½NÛ 3¬¼g€³}mëÔ|óRmdéS}+tI`!JûD[UâilÄ–±J,yHçðßîS`“`u±SU¡Þàݯ¿æc€mfkSö“îò°òuŒÁŒ}ß3¹35ëÉ÷gi‘€&G`y,&¥§o@=oYø‘² `Ae»Sen™ÊÁÓFܰ½S’;—ÒºÁådú3ª–ÕTß÷Þ—fŒgÒXdFP ÜkƒxüÈ„±1Á@LÚ&9f,ƾÉ4§Å ·ºyÀ/––óU }?& Зþ¾½.y†çmÔIkWhn¹‰Û‡ï XáJq7R’©ä™¢7Ðö@zÀKº@hQÛCfÖŠDKÐl™Tìf¸ %Á)|ÊfÔ}ÍW’×§T½»aÙ3$Ë’Á\~‚õ4ÄäÜô¡c;֙㧙#Ûw=Ý€¹,NËã:›úx?%Ùw©¡¯.ï½AsîÛ>*Ÿà*`!ÌóÎg0}ßë]l·ÜW,¯ .5ÚØ€lܺt™¤ãb9G0 XÏ@«\kÒ/_me ¹Ýô%€á–É»Ûhž½Ø©u‹¦Tð´OÑ·ÈñeJš¶çÙŸ¤rr>dá—ɸ픀›cšÌw†:ÕÒ×QkúmƒËyÈ!òdÍ“ËWñ`–½Êx$„pg_43¤ (“]5½Ž¨Æ¬³à{[W(礸|9tiÔ53ž]¨T¦}_Î7ÍT‡EA ·Ï§ÐµŽ{/D1‘!h.ÿM© HŽÜ¯Óáà5à«r‚ŽOÃúñ9ë.üæYƒ"±Ú~°È˜ÞÙ&­$ùD®kîÒ½?}…æbŽ•íj@ŸJÜ>˜©v¼{ñÌš¸eÏFbÎv¯)éëfŸ>K–¥ŸÓ¿ÿõk„—PZ³µU+϶wÀæ%‡° ëÜ3Ë^7Ñ>T”É»2Q¸hŒ¿\5”œÙtfq² ¥÷ðœ>úÜvEàv}*àº.¿¦ïQTÝê¼Äƒã–^mhÜ×?x¿êÚ7„:]6e¤…!ûø³8•ý•¯…AÂwªôlë&›Þí Ùs$´Ý”%ƒa`-»£yä'mǘT½‹}·“Œ²4€f~–¿» ¼^É[ù˜ð*櫇é)‰‘³{ö4‡æf•$Fe‰½Û‘´4`n‘`1Ù딾¤4¥2îÖ§L²Ë*4BpA=8WƒHÞ##QCØ, z“J+ÝÑñÃõ2"ÙVÚ,öƒ¿Ö¬çö'0­$½Í|»1o•5ÃjÃâ×,ØÊÍ ¬çv&¯yXyB€áTGhi?Ãy£Soæ,·:'iÖ ˜ÎW¤wwI`ö½í“qˆ¶ýÀº–ˆ}êjÎHd•à>ðÝ2¤è9eÁÑäŠMröä)ŒüºzÞÏ÷’1¥Beì.e]}Kn€øc`kã=Hi$ãðà©€8†’€x áé¬Y‚»ÎsLå«“‚Ër€¿”ÖÜ €°¬Ó^+Îpû®„ Ž©öm©SéÝÓ£ÝC®N8ɵ2ñ©}OyóT€žüºýàuwµ¬Åëôwlwêì Ôà'I_¾§½ ïç¹P1_>s›q\T¯¼Om}Êu¬êÞ lê—fÓëh¬)¶ílÑ}~ÍJrËßfñUTØ@3Ùè퀪ñûÛõ;WÀ¯©Ã%v²wø9MyÏ÷ŸÍ ÍsÅÝ’³™¬ã;ÑcÕŽ¿׎ÆÁùE³=óÒò[3¥›;±ªÒ¯÷^Ëžš­õo±ï µ+Xïõñù[1ë2Ûê×Ka€ 8–ìD>L{)©*ña  ¾§x†G²Ôðvm—Æ¡1Avm›R͸Ã0Äkéª8ª|gÕ£3Ú·¬…­’uJÂww%y¥­- €cà3#ïv‹7Rv’‚™-çu`h•¬ø¯Ùé8Î_¥GÖ¦Wµn;K‹ô3I]û¸žšŸš~êŒö2"œ²Cg>%]Þ+pŸÐ,Zäö#wía hR\åwÉ„TËNž&o "m^\ÇBL¼%4‚ïfÜ-ƒY§0ОÜ[„“‚™¶d»º<ë ¿Üþ´¹ÌÁVW½“}îáLcMÍçò-€ÑÓlåºN!P*<ŠŠdH@Óë‘Ì<œÏâŠÕ䉯ÓaóÜ£R7Ÿ\>啕°¢-N×¾À½Ué1J#°^31¤é‡o†±¶xFî.“äá{©äUwg¸Ú>Rb’”ˆ)wR¬–æ¤3¶Ïªôê3Sýa¬³¯µ ýë2Çd¹{×hª^ߟ>95µzºÏ\Õ{ïyöåVÊo2ãÓ%–¼á×A°¿ã–üußYn(oùÄaL×dåW3&†ž÷›ïáîèÔ߼ᾠÕuÝ=ýª %EzçÈÜ//õœ«º­'÷¥2Gò§ÛÉgׯb“'Æï¯VO—ý¯×«©Ò%FÖK ÖY¢wïUuɨÖï9u¯!ÖÚRjÂ'#¡ ?Ê!Ô¯Õs†‡¨YvÀò5mÝXÞƥÛR ð’Æ}¶åz ä+é dÙÞ^‚ºíÔ–#{²ï èèÕýÝáAéã^;±öë)‡HØÍÏ9Ê™`]…à²-ó©‡_’òº½Å52›<½œm Ž3nɹ%1î!dLk°QµË¬ò3åÉ»§WO:äȧ¼A:Ä*¨<ÓéœuÂܧ«LºÜôRrôÏb‰p/=lTnIqŽüI@¼–a¼_…SMïL nUMÃõñb?£L…§¯‰¾®ÙüÖî¢eGÍœ0A[Jk¬Ò©·#˜*ðŒ JûE‰UP“ÛÓ=¥Az¿×™ºÿt‰aY]P¬ÏNvÍXMù{lIîI}zפ„F¡'^OÚtJ[o'~;›F€÷ç&›ž=e3 ¾skõ~Нßk¨ß¢öÐLj3?+E8>Åû+ûîGi2èiÿÊëÊFpÉÇX'K­-…Û2sŽÓWž£¬«…=ïa •üæVhÉ÷ݯ{tµf¾Â¬kŒ5ýæU¨{@ç§zºÃÊ[H£) özf¸f0“×_]çØD1 ޼m›á»€5\BE2Uw3èüÖkp€ì»ÇFõ~åªZ1oF?…:9º* ÈFÈI½}w¸Ro³$+òBqß ¹|‡7¹#!xJÛž÷”IóÙ-wôK[Isê·Øý†sX݆‘ó®€>]ä÷xúñiÞsÿs}9e̺$f6>{ìIo±Ñ É8ÿìËEÖ³Q·<ÂÿSœU¾¬e†s­þ•©„-zd¹gc?ª~Ýùc}´p÷Ø´ƒ<®JËLë«U-ÎÕì®è =Í Ï*éʬWÞûnóÖâÝnš5£}Ü^á¡¥CåÞß=]\èíÜÂoi¯ ÜË R)w±eÚeò½44fQöÛˆ—^¤-aÙáÚØ’äÎÓmf4ŽT®gûËôOcA!ÚÂ/·s4¶” åÁbˆ,σHHÜuØ¿\lkµ›´¤$tqÖ“*s¾KuÄgéïÈö@S 8é3M3¹5¤½cï"Ï_µµ;Q5G$óo{qQõ×WÅG™=“e’@ :«_~vNpøqÏDÃÇŒ¢fyÆqDN“GÖìk Ö[1òëã–¨xpDå\ŽÉê tq˜…Sö@¶•b/É…e“üë_ÿõï,Ù*9ÏX<Ã+™†«AX åv”Ù*óôŽ‘jK®@¼$1m Æ(V©×Ä{ä.Á}o.i¡ w<ñë bzp8®äi,ð ô³`0@7oæ^Œ¸†_͈s×sz·¥2RŸK—ï ¶YW1ñ=í³`šÕMmÛÃèW ­ªÀ  ÁkEŽ+v¿ ·oÇ}F"±é©V¯ì¾´ûm«8¯èbi°Õƒ§u<7‡_íHã@+ÍJXÆÓ3ô¨Íom7›ª ¯’Ô~mˆÏâœ* ç*óÔÍÛehÔ”ç@m]sÛvL_ÓÇ÷ü½ ›íÀk™¬ë`îìHëýóy!8güY›ÏUBì£Ó£­úô© ‹CÊ€—»…P16àí³ñ­g¢š²Ïh•ªb¾÷­ì{úq¤Õ7¾Êâ'ˆ—õdrÞ<¼+nÅy2*¥=,“eip äG>ëç¬÷XÐ’NóôO÷ 6?'nïäý­¡Uf¶Ç*ItÚßJâb/šú€ûôk¯"äÎL~¥÷kfhrUu»­€aìÙw9²{3w6&èçjh^¹y/%ûiX9Ä[a_ÝÓÛ>I›Âܶ\[µÎ4ç-p$I%úy,€é™ª+ÓÃ,­ÚÏ}›f‹9†›.4)5;ÞÛGÖùKž²'pÏŸ“_gUŸþ>·}wª}$eIþ–ïHñÓ¾ ã¼Ü‚ÿ뿚ƒJ–Rc_ÂÂ'{ç;‡˜÷·oóáCw¾©8uw~¶¤ªÝ%ìlƒe*Û¦«!>KÍØˆ¿×«d3œ’jßBh[^¦¥,Àe)ýºõ÷éF¯Vø{Ap%¿f^,`W>6ö¥qPQeÙséX( QøY̺ ~ü¿&å¼ZU¯~bS'h$Ôïiï·Ú>Å<~Ïù¾·y'„~„ }¤þ);ÈëÒþX/.Üm…uÓÉí ‡™WLÞzª·ŒB¤ýNbýUuI÷hú¦ §·zwN)€Iö}ÔFóN|~s<޵åú¹á&lÍ„T 6P/<é¿^{ûvü•Ü-Úã¼·’(ïíòQÀc©íÛ¥ˆ(5ß ¶äð݃lù»ã[Ò§–&Ä”ÆÝ:á`.g£®vaÍ#0ˆì•z/i¯Yÿ˜r*Ÿ²Ã}ëží,¨Y¶Zêìê=õu,äc¥õ,SÖ1OìÏd÷Õý° HÀÝ|¶gÓ…½WŸ2˜t’pçhJ¤2@#ÂîYLæy•À=û9âé Ëûñõ^‘Ùç)[JßMýœ{X.=íìÍØ¾…Œ&‘Ù˜qW¯†¢YN[bʶ ¸§ã NV•§§Ìóµ‰G­$ÜaÖerS®1Öýšï…7 ™6­û•ÚlÙ>¥­-‡eùD}®©Ö)»Â 4g4•Â’€ìBåÎÌ_±·e0`‘Œºz©§§ I9ž[Èž1ˆÄÇ@S‚Ù\:FFR¡½Ô~‚{­ÕyöxdoƒK©áÙ'©•—î Oa%Ï”¾Ê×aS‹§×Hñ¾ãÜöQ=+J©m{ÇY„Ó(¡9§JŸùÃPdîå¡zªû:û~ Ü× ûŠç?[èòÌyÁ®Í*p×”ÐÑ„çc½e¤/gdŽ­!Õø[õ%]s|á{Â}ÙA¦ò;‡5í<ã¿•Þ]úHzݸS#žÀºF)õ¾ïܲ{©ŒÓLåEÓ¸ŸÞ÷=ºY%ñë½Ûº–.3R„“šøÞêQÙ«æÝ~S"¬½h2’©}:îõf‚¯1ÖT–'¤KàeÐVÁ_B´„>1¾QÈäÑåA/1€¶½ò÷†ì©JõîYJ¥ƒ»Úô}š)Ì\¯•ÏþLóþ—–ZÖ¹m*¥¡•=î™<šÝ†ÜK)¡/:§”(ÕçÚóî¢äÔ\}ìÖŸ’¡ê$Ã_ùy;³®Ô¶,Žà—]$œM™=7d|Ípóåʺä>ÈöøËv»jK7ÖW3 î[FöFf’S×Íáõk"þþ»±¹be¸iöFŠ£ö½š-ú6*7ƒTŠóH3lì:Q’1-5ߟ@ßN°;:k%ÄO&,·*·eUºë ­Já‰/u[sz°ÀßËîм{– @Ì”|¤@¥‡¡5–ÄÀ«L$ýÀÚâ”æ*M³f ` MÀû.ºÁ€Û¬³ÊNî0m‚r }÷T®ÏâŸÄ%ø[œcð]ýàm@™zª)Uc˜,űDG‘ÕÁÆ0=  9{Ø¥‚Ü` ëõ¹³Ø©”¸$4ï-,ó¯äŸãªúÛj²)Â+¬¬«®}¯^]qúQW[[V·òZ0ô<}-œ;»5œº¥³ŸÛ±J[ O{ Û\ÝçRqî>ùú#7º’z´%XÁŽÇˆ«Œ œsßbü¥°{äu‡ç?½G1?Ý$ç_­Õ"kÒ{UÛcÜ7úÞž²2ë3àn?îÿúWkY³T\‘ôîÄî}izÙŒfÿyEnǖФT&“JS²‚<@`ÝÝÊ{}|Ú½%àÎPúü¬ÌÝÌSÁ»öˆO˜^júWÒ’Ÿ‚à0bËë=¥aº¹yÖ ÄgÉj{øx½%ƒIˆœéª©N–§‡°Gî Ðh˜Òþ9Ùap‰"MÖIŸ‘ì¤o½ö‰}{Xz_Õð&í1oÿèST%X^[•‰°É£Kãn%Ò‘d¾+7çz/‰©Ê~ÇK®A5WÕÀ‰TŽóYYŒ 9Ž, ªÞñFÓ£Ýd+ðªo=2˜Þß½–=úbÙ=51ή²§<)ËÈ> ?KZ¶XÍíI(ã®x)ÛVÊusn+ÔIaO·D&.RŽ‘\°çÁ+òÊM«õ%àtÍÑCÛ=†;¡ã¢~ü)gEƒZC¯#­4V±ìé!#~o' ¼>ÀÝæý(*Šù‡­Â•4µäsÓ-ûIo ž/E‡È“rˆ6Ë«ÕLÝ®zô”ÊTÉfÒ!^ökµ’”ü¦¦™æ³ÐOái¾Y€ÕáÉÊÛKÞSgéfS…={ÀZâÚÔ£»ðÐ5¾²rgšïÊëWÉͺÄeò?Ùûü%ä+íˆp…ríðüz®š¼'OŸÉ4ù,þÊXð‹÷M!ü«ÇÏç~õßÿÆÚ}lÁÔK×¹syŒnÉ—úÔFY&p·ÆtCö:´jGy¼äÀ¨Ü]ªø¤2=¢Äç1 W\!&pä)§Q®ªãíW“Ž+b 3FÞNéUÂE^L3!ÕYª€KÞ/i º.¡&_žNð‚¶ödà.ËÈtMÉð&ñÜÓÕÅŒ:Êé@"I$héÖ2Å6ÃþªœhŸC)ànÈ®ß*dJåÇ¢=ž¥f3_Ó{¾î+¹o¾'k‹§m‘K¬ÁýoC“›44:Éd*­Šl:åÅ®Ç@uwA¾ÒÖ «$ëFÅ- ’Vçr›cÚù^Å ç'åK˜ïOŸÐçoÎØ¿z™A·¢]ªñ:&›æ’VÒ׸.3åµ÷’â™tÙ·ðF¯dT–ùþ]Eã›`=ór2!¹üÔÓk{H0åõvø-yé=ÔF«ÍqLOqötÌü)œÌo襌÷Rz÷¶ý|2Ÿ <Í (ÙAÊQ¤àö·œE|‹Ê;ÕU?7šÀ½k«j€ÈÎÞÔN+Ix_€»e9•F p÷$’‘Wpx¨{$÷Ý;z š _Þî@mß2ÝÄõ˜ltÊc235LgÖóTÇag)bèÇŸ½LÏe»Öȧ,$¬ªGN ë÷ÆX+‘7òèbfë|«í2`͵µ3Ãʱ¨ØË¥q_âŠZý,Ðç³ÚµÔ®8à;$Ü#€ï¶XèKƒÔ÷Ñ?ÿ)Û¿å~µê6sqštEµ»ú߯ìæ­¢4ŸûÆŒ@¶¥fí¹‘ƒÏaVßXœÚR}8‘†‡¬zÏqÕ*žñ…ÍXjýmrÕÉ-‰›‡µ²Ü"GHkÜIQXVa¾­†X‘R`xÏGCß’¥ØÞ+Ý9íøt·¿þ:}&¡Ö ­íM Ÿp °ˆ÷1²üÐï5$ƒ.¦Ù¢”ªÏ]…:#CgÑCÝÛÏ$p”oðØ×ÀŸ>å¨k•L䜀Îkÿû›&`íÒ%&Ýo^d^l-fzwù,tΤ0Æìx‚u}ŠsI3ÐJ°²—'¥‰Â·|Õ8ÅV•ä¹åoÿûìd¶«‚Ør$Úôi.™¥9¼®ÑÕêŠSûéô_»m‹€é4ÖñôpŒ”œà=úÜ~æ<Á¿ý¬,XFNÓÁ&î3ÕU®ºw%CŸJw ˆÜfð†oK1ÓR¢k(–+‘V~ (KšÒ–í®Ë®¸É¸Ãþ6(4J\Öml3Jý–½—ö”6 æý­\ÁùGl½¤)¼NÁ#g}éìEÙ`¹ŽIõY©ƒ§c¬bF Br&ÛDº·œ)­UGn€Ë“59õ¾„¨F“©ŒÏ5Ÿ 9:Ò¯§ÃÌìÛ@Y:ûü+M´~Ôv¸ýªf]åÍ5ðw  9Û9#ÉÐ]@Ü£—…ã=º› ](>-§¹âµ?‹jYœ}¡§ì±~7½ZP½o½gT«Ÿ±UÚý#dŸéÝ·@¼e‹¦&–Ýà ¥£Â5FËHÛJV&^¼~k‰Òö­>3†ã)JÉ!ÎŒXb nÖ™045ÐÈP£&´”™ŸÅ:·À:p6×nòp5;î Q‰.\´GÐ>ˆŸ£«É§† sä–ÜTÐée <2|× žÜ6ÒsCc¸©æ÷Ïâöê6×P)SsŸlk`ôþ0íèdYe_ü^“惩þ·T¦5¤dyIÆEÕˆ%Ѧífº¾ÈuÞqi÷:^œŠÿ¶NfK²/”V‰<)ÑI1IJbaé-È¡ÿÏ?™g•ôi.©ÑØ>Š¿MàžÌ}Ê„²¤Ö«,ìÙñêYäm¨†›í{$s_Ë3÷ʲM'"&4˜€±^W+ç¼ÏY‘Ò¡Ÿd÷0«5îíõ>| ˆ@Ï-m¸B³3#[C{Æ ”3² XOàŽC‹¼Nô~ •j$´²àé/”ç{È—%‘d‚oùµg†kºÍè[…7ýb¦)$€ûpÿˆLäZãϵ½:´†ã9&›R=•ìÝné‹5î¥RB;Ó=ÞšñLÕµÆãª9š~ðæ×•ÿÚ÷™ ûLƒ^…¯3[Æðl¯ó܈ê´2ÑOÀqÐsþ)Û xÏ©æ1Lví]ü'ÊTTD­Ø–pt°b|¼Éãýµ½LŠêd8õ¬ŸÌ6¬Ÿy®oŸ^Ü(ú¦Øœƒ?NZÕ{¸Áñ0ó°izÈô<ºMÝRTƒÒ<½D2¾ê¦ kÈÒï1nP˜lww9․“E{§Šš‡1 fà»ü1Ú+—tUO_0bÄšaeªÉ k0›.eöˆõN–?¶-’½8œ}nJSÅ6Jo•¾ŠaÒâ0í ¤&ío›^!»ÌÑ<è¦A´>_ÖþôµP<Ó4ï4‚TßÃÁLÀ}KVÄwŽóé3#‰‘µÎéo“’˜,ír_¥sòÇäo®Œ³éECAhñIutá(pÜY[Ðê;¡Hµw„S¾9lI\2!5‹Ûqf6ª¸yäUt‡=ež+à†ë(÷dõ„qdU/‚r‰Hrr÷ÁÙÚ~DUçv:Ö[X•)JNí{µeÿÈaÆL¼€{ž'–ÊpO€¶^2¥·¶÷ šëJnß·í[ Ëz&G^4©í¶‰¤~kj#9õô‰ços‚ÈÐ\>ô‚ûɾÛ^@_|¹l(­_×Ì|¿#å÷ÂÝÒŃªxà¤^ ^.4íoT øg»ÍH`c™Íl=éÁS9Õx‚é¶ž”&^>ñVóKèâ!Ú ¸ûü»ÄÐsîÉ…½Æ0µ¢©;UGî'ûèŸ`]ÏâY¾ºÁT7÷Ñg.ƒ9Šgâ¯4F<Ú>ÊME6š{%Áqœå£Å{Ñ‹Óy×3s¤|¨ß…o­H ÇÐv&·çIsm:.?42Û–ÿ›UõK¨{_ã¾õïÑ_xVO¯JøòN:ЙaŽ‘‰ïí k2«ý ¤}ïs[ŵ'ãn5dZOýÛ’õ´Gl+æêSÍ5r  ÊÃw±‚(UqÆs 2ŽC¥cZ'¯Z1Lê¿’e¤Ayu8Ÿôî;˜©= Ú_eIc?r¤)•YWfj/’–åàiµJôwä³ÒQ'ºº%ëN“U–¤d?Èhä]­Ç0<_*õ%¿¬ÛÁ=‹¥ìð·úŽÚ·½O/’T&õЩ ïaeJeò·ÉO'³žœúè×CŸ·êæ`JPÑŽå¶bsF®”™¿û#Ô–.?Ç^)$ÚRE…ßÃ2IÓ¦úßg\—9r˜x~Ëšå'“qWì™öº&v aW çVñM‰ Ó(j/bÍ™¡aVH´¦7ÑØ¡4· )#Ÿr)ݼuí‚øxd¡¶‡ÑÇš–»†ï$"8dX©û¡….J­¶A¤X|Ä-oñ×_aæËøîZ(–]¶’ ÈÚë=ãŸú ×öŒ€wwÀ°Û㪬M¶Àº, uO€q·›øþ18IåŠçÞmF¡Tâç­M´mkf_å´@Êfì“ì{¶sï•QìgŠ7=MŽ2èe6ö‰¯Œþ–®ÝOpRWGþ›=ɽ…ûä^<Óû>çï•:¬§ñ=þS¶-,Ïxþè*smDõÚˆÀ^ãiÛâ~äà3¼I!7‡y‘–=A¼8ØTGQUôŒ»_1”wl“Á=€ q ÐGêÒX4Ó,n»Z%Μ¶¹a1…ü@á/io×kê±j9Mª“‘ ÊóqkÞ]Šm±ÝèÌ¿ŠIlàß&¿ž~2éyŸ¬v²³â-ü¨n6²ù¨N©ŒŒê ÜÓ¾*±‡·6f2n&ókGþ*êù²Dä幡óý¦ÊQúâIÉl$°Õ€iï|‚¯KšlŠkOí¸Ábý­G¥S­ÎçlO© ð]*¯'å=é_[ýÛÆdÆ €›%ƒ\°;|C‰jÚ+Àk1îÛÔï¶ß´6kkë1!µÙ¥¿WŠiÍuïyÒÀÚ} b}¤q§‹Ò®ùØx?Hxcw~«ÂÀ ?'(T@ú^”ðÝpS±7¨”O°^ýã-ÑÑ«=dÒÍFà¾G ¹æ2å4ŠŽjg8ýÖà@( ‰ºoƶ%{ƒsO¹î² °ë‹Å3tDëržI(o¾ßÚô¶¤#6Z<·jUæµóp̈MIŒ•ôî ô%ÈQX°>f,Âq£®59U*^{Ý|ó £´æ¼õYÿ$ÁŒD8ɲWÞ=Ýlz1LÍ7=»xè´+‹¯ÿÄkªz! ÀÍ££Ú§Óóæêæù‹´£Ï×TœSïHóX5ü£ØßÿÜP§—Ùò—Él÷k4þJvÔö×› cFçÔÙiduû¬Ñ–â¿_‚ìô©åñà&Y@&OÏÏéïÞËl”«j[I¸øï¿nΛGHªÛØUCºÄKÀÐ ;K<òSõž’ $é ,ßw5»¥dÍáÑôTÉ1V)T¥µÅÔ2}Ðeý¬©À·W½1Ué©’Nðì1±žrΑ|%AmÊ*χSqµáËY?“Õ“§wãé¥Pý{,Uoû+áQr¥ÿŒ‚èy¿‡bJ¹Ÿ={PÝÙeR p‡É¶Šš2ÑœÈÑÏ«äh <Ħ7¸É;Ûz*”×¹š†ƒ} Â,ÁzoO™ËôÌÉþ@‚oÀº÷t‘Ü·k‡åÌ]ÞŠí™üÙ{‰WÒŸgœà»gOLü=*üùäÐpû­®/ÏNÔ©€´Fͤa¦Úš‘ré*«™Õ\’û¯äTƒ|Üíþ®¾^ò>Ÿ¥ƒo¯Ø—Fö‘\5©VOe|‚õ´ªd”™o'C@Ä3Ü«[‘À lAràÓùÖܹSËÎûÝ‘sŸýmzCI…@U7wEõ¬¶F]m(©AC}këûðÈI=å4é/pßÖïð&«ö­D——ZúÒ˜³7pwùÁë<ÛöµsI㿆õ–ñ¼y#h‹(È%¤; £­§O°n–}„û{€[B }îŠTfOÖRqw7Ì1G;Kö†®‡ màá¤ö^Övö½B·Úú7|P6NÖ<÷a?5ÔãÞöeBáªÂo{’ãh³N:Ú3ÒÖgn¥çsŠÀ¶˜’Lj§ô~ÿ·L$ß½c¸hª×ÓÆ" ŽšŠ7Áë&/hçÏÌqŃž[-5h)ÍG­<¥£…. :«Õcº­cÔóß5üÈú(øÅ^»¹ òs)c<䪫)™3 žTÕse¡Ñ×T€%@î Ê Ü³´È¾A~ßLxÍЫšK±äÄY]AHk8â˜u¬±ˆE‰nð-aŒsv«´ÆÎî6iL™>RW7/s[4He$ÃÆY­ØH:åu˜û”Ê“òÛúx »—Ê~*±TI Ïx•îJEµ¥=môº%1¨Õ•ój(Iã÷ §F‚‰yÚgq—+y {Ê”ÖÆñóä|G:âe‚rf>«º¼ë=l›­’kÏÑX}ÇÞ’‘ ×Ü<ï̘°ØT›*Žƒ­œíAü9šYoå­JbÔ&Î[I~nNz.:úÜKˆ9Ï!h¤˜ϰŒD˜ÇòøS¥zßîë3³wŽ<÷Þ_Ù‰ûU2à–ÿ̶=¥á¸nJ5øZ|¹êysÌAU ÚˆŒë¥>GTshÕò B‘€ôò?Öhi/Š%„•š¶…äóAžïÑð+o ?8ùfžå9è™ Ž<ò ¬¡ mæ»z™cšIÁ,çËBjDQûÖJKuQµ°´p" *)k {Nõ½àwÁÚRÞPM žZ³[…:m ÚÞ2ŽD±~ÃøùÛÜ’„ø°×÷ÉÉD~äuÀ7÷|Âî ß{SEβQïžàR,¸yk`}8fyªôP5«àu†7!VÉoç"6¯˜iƒcбÕ«fw"K…t²‡µMCÉœPX•xwí)×]N'kž‚–ì’åþ—<Ærú :¸3›Žò¼N¬W®b›œàûƒìÄgIa£à­öÛ`­*v+àe´çw²~‰dį+1:‡Y¥•7ïžKÁz®_Iq~ø¡n畦×FZ ܹÅ(§–=ùuu(¹ÂWSÈ*¿ÑÈ,C±‚¶¬.?‹„öm Ü%•ѼV2îW•«ŒØ÷ÌIÕÔ9éô®ÉVþÊOF›7T¿v­ŠÑO#Î^õN‘V ›EööŽÕëÆÑQÊ+Ni¦ÄŸÿöªó̶õäœ"LÍu«Ê+ª÷ÇÀ÷wšZê|y1FcÀä<_¶ß†³°»í1€»QßÀ´ë÷…7œj½m÷ñunj´œ¶Ä0ò÷µ‡îÓÇeÕ¾3CÝnå4dyèêVhyŒš‰m)ÀÍ€£¬Ç4Ø*ÈîñÇ>©TÀ=㻳Ŝ¼{ßþ®Ša–ð~@ iì<´ZctÄ“<™òPÍ=K”' ØuÖ)Q æã âõ)@¥šŸJ{ÝeL9ß`—BÒeÌ“»€oæÂa”ÙiÜíÔž°;ÖDZÈ*qq2²àé°žž<ã–kwb•¼>K޳Žë³%ç 2fÉ‘ié?“þulÔf‘RxûoÙKl”šõ £{¹Ëè1ÏMP¨lyŸ{šŒ>íf†€¤éòž œý&Ðlà.çŒaºüãA•{€¦¦±öc²)õ¯ÜL´Õ™fÞo4v9²P§¬¼O›Tá§¥tùy&äÐ-.õí¸óMÙo å5jÁLJ°Ô[£¨*ùv>ûõô´‘$Œîž$J`%¢Î}HÁ}‹d`Ý4îï¡U¾©«ª>àe–]cëoµ£<ÛúÓObÓm0Ì“Ë Wéæ ô%Œ©Ž1†ì9Œ+ÞZr¹Â'°îm"û¥…(™¢êµy=‘zÕ±ƒœÍS `’AÇç¤jèëXjªºÀS¾‹„~|v;¤)õñâ×gDžß9÷¾Û†õ3¥û‘p݆U@üùnOãüüóýR¢s5¨h{ÉÕÊÓÿshß3ôEŽÅÜÇ}ßrE6³ål*ŸòÖÚÅMekNy柪ÛÓÜ&þÒþ$r’ÉAÕÞëÝÙ«rà}ýš9Ü EZô™s½Ò½Úq«M­¤»wR ’v„²nl ,yÊ Üg#ÞÝÀ=‡Ss ?'e­ášD2–v¤Ú›ÈnAjéY«û¸Ôù}ªhz§¤ÛLóÙaF<±|Ê ¾k4“wjûÛÖâ3/bž¤¿W‹^A¾¢q[híö)æ“QîÅ Én ¦+²ÞÛ™Úßìr¤„‰²AÂmƒR- Ü3(¾îs;ØÈ ÛŽF–Éʧ´fü¾£$fŒy¼†Ùua“UùþÑ GF“VØ'÷±è¥5ɦ[$Õ‘f—©\Ï>Fº×ëVðïOØ­«Ðn6£?}ùÜVŽ,ó¶ŒÔß6È^…FüìH¬‘¿g YäË‘†)§gþk¦Xyß®gå*»×Ë俥¡ÇK7z^yû­ ? }ØŒlºŠQKh,¤ÉŸ“¿oËÌæÜâçPl¦º¶óšþÛ X/ÛJF]q¸@ÛK^9ŸÀü@»«À¬ÛÍ]\»L!úÛÓYXÚìÒ {ƒ{§À:t©‡ï2‚´<&….VÀWÈ>¾SÝéZ$ئws¯€ž%g÷ê„Ý=x5ûÞGDJ÷|¦çV­ÙAæ6¬qð¸ãKgçëÙbñ¿ù†»4çË™K^‘ÇlƒÔs[Õö9÷Îê»Ð9Kµÿõ®2>!ö³Q·¼e¶þvÞÂh狀"-q¿Òšé׳YÖAr;`ˆ®.×0Æ3åÅ —P{,¹éÜ"…m_•U> ‹¨Ų;:;ã?¼SƒQ>îbñÅ˶Û= Î[îÝsC0ÁºÃ²âYŠqO_íôÉ $lÛwL ,À—æŠd’Ž`7Â4:4XdßàçÒOÆM|½Ôí™(™@0UãÙÁHž›caá -ÆÆ.rlI)9J2¦){¨|vš9*(Gº^™Zzÿè¨õ ²bÙí`ŽCéè_»m4ùÜŒþI˜(3f£é+ŸNù½öºž3Ž‹Ï‚Ð@\{†cÒšúsÛl3?§Tf;Õ ô»¥\ïE/ù:×ëÑëíüLYB@9^C’xµcÊ;5o ÁŒºU9'Àõ˜Òöa g¨–J¯Íé?°µ96šŸ’\»ÖïØ¬,8S7??ÏÍÓSf¸dMM|ríºð["«<…’‘OëæàEÐ[Ó`« %=´*9™F½Mäú)6\ýþ»3fñåKÓîÈìÛv\Þ½Ó{àï Ü3 e¼%.°Ñí¸3´ë €.ùÁ•HžñØ”QPö}O‡™ú·v•‘˜3….’µHöY9õY¼ D53@ŸrÐ*­¥/ô6WmÏhGÉc¾‡Ô)~ŸÂR½KsÏ4sˆŸAüË?þ‘ÎîœoÜ7z‘ð|Íì½v~⻥h¡5ÿ0]1¹3®z¦Û cÍ3\õÞ;WŠ÷òÀe2géNÊZ°( w;fºZÊ’a@u<4]_ my]®2i(é„Î>!UJôÑÔ’#Ȳ<ù=JдØ&?%ÝÙû$THÀbÙuy¬D\5³Õˆ³,ŽÎ)ãÑ;[á‘D¥HBù>jÊ€Û‘X©žïÇas˳h©Í.$R$“Þ5RºÚzñଘö&Œ•£%ÔÊl9ä¸ó ÞÝAbÜ­q—J~Ô£'›nت\»ÿå7§„àºR|ípN寛¥1(KÒ¹gäãò@àÛ1R²Âô«úž¦H· '¿R Œ¾õ}ñ#ˆŸZqí.Šð¡J§ äø¸§hJÓ.ð\TkG,;½&翦£¼9­sÂo«=%:x›Nj¬Ö >^åZ·*ƒ»ºüËÅÇKõž²ÏH6£w >Pç…D;²’l\8^ãæãŲ§£¼ørAð”Á ­‘—¼Þ#ŠLähý‚û} ³üdí»í©qÄŸ¥æ2ùû*ž©ð:˃ºÌ!]z5¥µ.³TÈÀ¦Jƹ'PuØ5ó5zëµä˜ lfË´Ît†ÀßïIh²´`|WJÊXË[½çìÎÞØS=¬¸µè[Ð#Ò>_xÜî|.Š…ëðúìÖž‡ïyý"k÷Ödv¸ïÿñ>³.¶˜Øö\6 7¦µ9ßíšµž@¾-*7.“I}k-C¨d Ìy˜·Ð@jfI}(ÁL{eô—–ÚƒrvẆ5”ÖÁWɇði¢§¢N‚ŸŒªq)hè¯÷·%ß"“5sO¦ ~w ÁúÑ5?¥kwH™£>ÖZ§Ã‰8²ùYÉ7'g<PjŠÃŽìɧÜ­W,˜á•T´çßjý¸*理ÄI&¯&æI,®k.iì÷’ uAáLHuù—@YW«‡eSãι—b¤,º$"Rºmo—™[Õd!£þžò ¥J ~Öã?c¾_ãªnÅ?iø5£¦â»ÐµÎ”Y§w® öNϵ}®ë¨`¥hÉñVà>×à[–”ÕåFƒ³)¤ì¶zžs =jàRÔNQMðʘw+áFWÝZ³„1Œó~žÁ~~Ù‡Þ.ghÍëÓ-¥,6f胟ú˜§”ÁˆÑ¯Ò—äõ“³÷Ï>—mX™°~¦q÷§Wÿ™µ•3+ÚÖ)òioÔµ}ÙeÎõô½« =÷vÖ¶kSâ+e”Þ•£ìýS$àžËd5SÞŽ/ç?T,ª‡R¬ ³j ú Äç¦~E9}†XEøîýŠ=çÃàžËkŒ{Û}í°y÷éu@mÕ¦×iëcûÔÎËO:£Á“X<£Ìưµz¾Å( »6 â÷L¹ÇLíT Û±SúR$£ö«×–žâ ΒˬJwó^ÕÑÂup‡,=,ÜT%¿ÈcrLH•ÛIÂ}ñS Âá©Oº¿×ŒÕöé9P›À.À‚¤ù°·ãM/˜q€­Å÷ÆßQ€¸m1ïIà.µ}Âu\¯×%‰˜õ «•/8›v–)(ÊoÔ'³æ\„Ê’ôcö-@0Õä µ3 Ž|="šÙÝ’´ÉÆ”ÀµÜW¹UéY¤OaÔ5‡Y Ç“_Ï>RúÆT@Ÿ ŸW˜²p¬R¾ŸNZw>EY\M6ÐçµV t^qîTÔR\€^! yn¶{µwËiRgŸeƒÖÙÖ/8ž~>ô<9 hîÌ×ZxàãdÁLzÃç÷MX/u¯µõâì-Ê=Où´4ðº|Ù­ ‚•w\”ŠaÞ™QMwóî9m’Ù«’¬@aRI¦,p¹½+ÁºÈ»¹[f“ºvÆbµë~Ÿ•V’ÒÇ3üj>ž¥ü|Z±!ÆÝ¿µ&¾ªÞñÉáêã©Ô»ÂWØÃ¦éÏ6eg¾*šÊ™¯Õ&+r= «’¾w“e±ÊoÞpo?eôIÁ>uO¹ž>îê;Ìs[½f‡dµ¿“eçvyð8'õ<ë®—íÉã™@ìCP=0ÇÈȳu›Í—ŸÏålïGf××s†ïçHñíÜWùÌÉ©ûYYçR¯0÷ë±û‘ ã¤ùW_Á¹˜ý•nʩޫrš `Ê¥óð0|l7)€¬A˜T’XL:˳õÄ›Åè—Sxuti·öhLƒ¹Ô»'×Xíí’ëuÏ©oîÝÍå,®áNtðf—DUhnÈ®ßÚ\ÛïÜJI/Ìææègrù£'ÇaûÈ*ñë–£H/xšÜ¹?Ëñ9ÄÙ`«ÕíêØ‹C`] ¾}og[fᑟYŒA6yžXNÓ¦;œ)½oû+86)ùAñö-¤#ogEZ Ö‚ ïù„ƒÉ¡ªÔ”ë¼Ó\Ò$|¸OXßÎi1ú.0€¿æTÛ§lFAKö™Y:ħÛú8´š"4ù»;Up?ó{9K!¯¾êd ^§# Ç-zQQ”þô*àÂ)3,%49lšî7 ֥Ɇk·˜uËoê^ÊÞÂ,ϵÆu©äíÑ™ã#HáÁ+¼_¯f·¨†WTrû=H_$ÔiŸY=ã-Èe9òºAôÈ4Dƒ;o—5K /‹¹QH³Ž1¥,Û_âIßÖ*¾˜ÞsíIr›(¶3Äkfÿ—_\fèÙ”¹­}œþ²9å#.jß”m CÌÒrÉftE4@#u~ÊiÄâòkyä{“BeÁúo5´ZÙ÷:;ÓÜWý½ŠŸÑ˜²WÛ÷ÿ›o )­2¸â(föž{º ˆGˆ|½àøJ­n©ŒäÑ";¿Ü<ÔkßúóŽ´žhLä¿<áÎBù•÷o¾³Ø…„éþmsáæ‘c£Æ™ï»™ñëfÙÕ&’Þ½ÎÑK)˜‘ÜÄ[i%–¯£l´/Ä è±v¹fpš¡ÜЦO>5¡ŒÄ3ý°]…ïrÅ®ò‰jVh K1Ríçž»E‘_Í­§oj\ ¯t~He,ðÈÀªêä sC%ݱš\MyG/¥–==@<<×óǽ¤ú^ç˜fo€(± àuæg/—ëjÔØöLõ˜'’ÆG?}ÜÚy\/#Š.*<±®)0—ì“¡å#[…Cy|mÇ™¶¡ÕÛ>Ë9Ž—pôJ[wžÛœ!€E·Uà^Õí–ÁÊgùŠRÜ?˸vy4¸#¤×nP.«DÒôžÊîs†Q$äMï±·Šÿ|géª Áõ~Ýi©™®šfÜ 5äÊ:­§OyL$ѵ² ú·o™AZîøy¶w°ÑnÃÐŒ‹â¯ëÉ»sðz‚l{×Ôs ®]°»ñâ‚þö’— Fü´”ëã語Äâë¯Ä·õsôáìécm÷Ä66-à–|w٠&‘JÞ øö™mÏP´+pª­Oßξòi“`cÊäéÕéu@• ;…„†ûk†«ä.‘*šå$4*dõ˜E,YœcÁƒ yk !~eß{O›ÑU=¥>”g’m9µ'Gî@+Té½̺ûèh¾pë;·¢'÷Ûr®“xq­b³m]þ¾¶âþXÓÌ—‡àrAœ—a‡Û³ÔóÖg³Tñõü™ûuêQȂ̡|¹r× h6|Oƽ²ï¾ÑÌœÝÓW£¨ºQÚ[Æ¡ßR½îshÏ”Ž4‚ï<†pd‚YÒ»·ÇI… ö¾H[:éGÓkÜËr4v´“L<”*v 3ä#X–²‰ìPžá>ýDIþ;›õŠøQ!uç»iH—P¬ÚV²ýnÖÛ‰¼ï`™gwó^³Û¶>9f›EŽÀ}L¯¬¾= °¦ã;FôšaýM³˜ܧ[¼Hâ/P @½ýY2ÙÎR–”yñzúY’$PÕ:R¹ßÒ|3uÛÉÄWM|m+CoÉM‚ãý¸=d¡«!W€¸n¹ÐôüzJ×ÈÍÏ­}€~ô;–"éOD–“½Kñœà=úÄæ /¶¾µ¶k!‘.=ÞK£í¡øÙwöOýêZã׳’W1,2üz¾.˜îk\Þðñ|–œmp¹i¿‘õd:ÕX0£)«j6©ý……7ÒÈ…ÆNó™óÊõ%Ÿ™öN uBy )ÛO}ä“dØ”y® ¢TÆŒÁ#­Ò¯·rCBG÷ rà5ƒ¥xRp‡ñëRÆSŠ@C@{iËsØ4‡=›I®æø=Ò*Ø­‚œmêPl[ƒ§$¹öT·i¬¨˜vXUŽ·ÖÕ¹O<ßWJýóœú\®³¾Û§A+$ǯ3g=é=6‚õuÂô±Üö}]ø#Uæ÷¾ïÕ…Ä6Ûsž;kÞàÖÓGì+à·,#×¹öµÝš%cÓ¾&>3Só·ÃT[+›^©B2|—%–GßåQSE5’ß$·M5‹L/”ôzÏ÷ä`bæe&'š¼cªS׫ÜJ+¼³HH®”ǘÔÛhÜÿJí;+¼n®^Úæ­3ÜGâØú1‰ÓýH²årw©àOOçĪSOÓF€ ¥BÛWì}–á™Ù)(Ÿ©®þmJ€ÄÊKâe*Ôí|/ø‹A¤Càsô™£S#™,Ê2Oübò÷íüI.¿–OøØÕ>û3<ÕÄÖKjãã^~“zúô†—è!5îXGXvXãåòÝwÌÑ©о‹L$-}IÅ|Âñq,µ:ØXm_Ázï4L¯/µ– ç-søõí[º+쿾í¦ânR;ëÚžS^Œtî³<ÑÕl×—e©s¨WÒ©#ß›ãïUƒºå~³Ûô¦q\ ]’<ë0Ôô²µ5†(â™äÔ4gÝìÔħq$\â­_ë”ÀÆaLú¬ÑéÖï×Ъ€»E2éìîŒÕÙR¶€Ø±Uç–ê’!M£Þ½ÂDKJø¹‡¼f^­ÏÜS°LNEúÒàx‚éªê–e^ï7Ò÷Ë.sÚÂöhFµÜê9:étXû·83Õ£«Km¼²¸dëÂÓ)% :ìk ߎ­ø`ü´wz™Jz+Ý3eV¶whmm™î4z¿Ò%QJË?^ÑN¶¡Ì3J“AW'µòÿ¨äÈqÌäÚsk³;D™‘㘙í*æ8M9í“Çhæ_dñRž9ul4ùû‘5‡­÷2 ` ;À·ÚAšó¸¥±žà~v=60…ABj—?Ò H÷ziúµ­ nP%Å€¸ùLŠe Ý%JÊxfÛiMö1€éRÛ3þŽ`'û¶.Àzw†z/•¾70ôò›—Ç¿s —þÞîò¼®kM \g¯½kª®Ýð=z½žŒ;I®ö}²b^¾ïêJµm6I/LkÿŒc9åZmR¬ ÜÓl óYY'À- +¯’@c¬¹m0ß0l‡b Äë+*g˜~©ý¹Uà®áÔ¶N€» ö7ß`[̹m:Ì2Ô¶~J2öteÄg=õî ÍStd&~Ʋó[ŽWVÕµ¯˜?ž_Î'\#êKè\#1tþ·.8o¹"Ò¾sªæÂã¹ùÕ’À©Àã ¶ÌÇ¿DàsHqN»lîÿÛŠRÚ²ýßÎ$›Ç0ÍAÿœk_ßçæ{>žìUéÝÆŒ@<‹‡²·vž<àÅIðŠXv)Ý=Úƒõ>ÑÓ¯óðâÀñ87¨êó,­Cå!=ºÊ$ÿš@Vþë¶JYy;ñµ#„ÊÈú:Öi¯ú”š¤~=Õä ѼmŒÕÎü^Ò°Ò-JÛu殾Q²Îʬòö3ö§A¤³?-)q¬}ÍÍ:óNÖ– ~ËfÄLצì´èJТ9¬|òßÈ¢!m€'³]s7#–Üô…ד+Eò”ABë,*r7ϺÃT’‡8ÅŽ£~6¸Ï@ûq :=XòZS;ykœÔ¶Œé3“@?Oå± ÍÇéþŽD  ,e|ð$e|û¤:bKÙ€Ÿ k4C#›÷Ó5B+¥2öIŸøtŽ×\H cE~ö4R–“šx©Þ­°WÀÜ‚;ÚeÇÓ‹‰ßÐÓ'ø®Ò¥—ôs¼U¿^3pïìÕ^$£Wr†Äâ4ñôùþô€‚g™SL²}´ž^Ì:¯´í•›Mû-O;#>~Ä>R`Ô¬¹†/äÄäIo­¿ÌFmmÎoO2{ÃkD5—VÃ;0«uª¡¤¸êtgG/ÎE—BšÊ  jÃ|[C?:̤e$Æ”R‡‹oæ»Ë±ÇŸÕc ½Â™&ãQà²B£F‡ø57<–Jê­î+s™z™uN|¯è‘Uš]V¾æO‡˜Ë½1Ùkºöž5?ëgßÞ/O›vº¢’¿£ªæ²ÕÜ´€¼¢wßzÏšŸåw<†§®Û7°¸:¼ Ž×ÕqÙsçHí0Ö[ˆË{»ýÑ^ôÒI«øØTWxyÈ4 R9ËäYå0Ó€;7>¥*Ù‘˜‹@¶r1 ¤ÄÝ: UNíi¶˜P^áPí•”¦äëé“âÁk-jHÑÊi%€òWÉRçÚú±Kõ"ÓVV£¼÷w×X$å Ôb  m&¼]Ï3ŒÉ±G ¯µU©>ÏÖdµù¦YVeN¤¦¤ÖÑÕQtaMÅ|_q·Y$+ß ngƒ¤i.¹íénåýÜhò‘’Ãw9²W“Í-<¦aèvÿÚó›ÝWdØmÕÃ:\>÷¬ÆÏ(Ñ?/XßûîÛ¿¸1r $–'ë#7z抺§tçÖ€ÙS*Ôg›ôé!¾~+ø‚R0¡<·»Í$4OÕ{ÚG²— å ÷ â“elàž†€)>Éû3ä±ÑÔ”WaIz¿¤»yš÷™ƒ·HF¯¤´&E, @¤àD{cGm³ñ™qË+ʳlçþ0zÅÀ:ÇLV’û·Ò=š Bbü]$©ñ>ϱ?±˜fÓ‚“¿e;Ñm÷vŸÕÃ'§2Õ5ÝÐÇ}•¾@9‡þ-bßÇìaKS”lÐÀqz4ñÛQãÎoS<#UºÁzšKÂf¥l&e* ZZè’#³pðŸÖk€5[³œNõ>‹Š*6s_EËVò)ÔÉœ}^¹êžù…4îäàSN(×Ufˆ/Þ½Éò) ý”k^ÅI‚ò€r[Lb=©~æyÚ]í2ð(uí€`â8JÅ€¢šÚÿj %g8×2€ž‚G†‡M »QÀ+AVÏ_•üôÏ×Ufؤ’¾¥4úÐu¶—ÁdfêèW!MõY¯2õdý<–}€B££$Ñm1p¯ÃÞ{ÏYʯ¾J7›5ÑåGÏI¦¾_*_NdÐê°é¢å>›þˆ¸¥=Yø"ž7;VÆO¸s¬øçÕÕY€¾ÏÄ×ÑR[7V;ÈquvW–}¼0<æR=g¤€·ï»^gKlY—™ñipÏMAÙ«rHunîíFŸªâ*5i¯T~ÚÂ)±ÅLdBŸ^ô’kƒ+•D¤Žz\µOé}žËÔR×R—c«Õ3‘±Ê`±$ ô”â¼½»ý?Éú¯Ô0ë/è ·ÝÞ)Ö¿ê­-†é÷gŽÕŠ´øÇa1ô4ÄU›#ךÓ¦òôɸ·­7¯_‹ŠŠdcÇÑò2ç5  Ð@6 °ºÅ{ï%¯3¶'l ê9"ÚWJÏî–Z»y÷š±ÚóëßÒÈ2ÕíëKj7YYni6_C«9ºšþÕï%@SQ“/-#iÇ'uáédR ææÓ]„wòØNàžâ– é·$wê\§áûl ÔŃEbÔüäÑRg©&p·z^stf¬ §šÚêxd„M~Ó,’ î.ÍÜ¥l(·,Ä…Shf)%ÿ–äËÛÏ‚>†àR-Wø.ƒÚº fø¾’*Uï‘óÕ8{Õ®ØwAöNµ!‹ÏzVd¶¨GT³’gBž! Üá ÓQB޼:\$¤g‘€¦ä è“#7Œn¼5°8—™ÌÚÛGæÀg.Çb€÷ÓåÅÒ~ö+Ÿ>‘ášEµà¸·3KÞÏ’çu–µð€‰÷¶é€å¥=òy%½e(™(xp–=¸v]5í÷ca )˜xØz~Vd•³`ÐYôÏdCö: 3UVþ—_ª¥çC2ÛUUÛ“nŸžñ\/bÜÛ• ¯§ÞðV·3˱}zÃ[„Ã`ÊyâdÐÛ ‘\Š„öšüòaÙmU‰m!£SQÜm4)KG3ßÎ8çg• z§¥E;'5à¿RÚ(V•ÕVRzz>Ò~PUÎñ=pÔv'A°$ÀYüŒOèm(·%1c, ]ã¿3ÉÍòƒ&×ùøìZð½@"æâ¤nWeÌÖ´¡³W××{Í}Î\Q_‘ÙœgîÏaÚûz“ à¾mc´ÿ•¶Ø÷k»øŒ³&Ü67]ÞÓÞgfþXÁ:€{¦n_Ï2 jàœ¢šüzå=œÚ^¸Û²²ïºá(˜I™©ŠpRëiôé' |q&±À …%©\dó®C¥64¬žÓæðÔˆ·Â{´ä‰[ Î꠪˵ô©2›dÓ«´C°»-³™žjòÑÑɯmÌÔ[…´W­mÐã?e l³`úèÏ#6]ò˜ŒŽ¯îïvÐO¶/ÓO«ˆÈãzü”¾Ýì ®Pª/Ñ>°l¹KùFOwåÑ*šªŠ©ê„C:Ç×®…awF_1¬œbñoÍ%S7Ï_¥¦<ý[¤Ø¶EãìÎtUqú„æ#Ë>®G…A4rªÉiÀ»_OÇÉ`ø\Ê ¦ §®ÒÂZÀ½ýW þ~|¶à6~>A6¿eÀãª Š’A¤ËBÀwÙUÐwd€ÛÀ={ô0ñVÆ Ê÷v“™çšŽ4 P³s|ºÈç:e1éewú°ã¼Âo %ÛÜÆz*ªI°XÎëR´Ã£+Î)yz`}.åû.Yêy‰sÚÊ̶!W³íAþÁ=VÃ+ÏU¦=w.ÈnCIG ^Ë Ò¹­Vä#à©aO3Öï¹ÿt©¯GÊ%eJ¼äànAΫLH•¼Î®LÍ×-·HèŸr`q‚Ú‘“Ôj •ÿo©Œ¸üÆ-sÕ¬yH¤Ö\ªzkÙ“Ý·é¤8xÀÐÜ£Àø²÷€Þ½‚Z„ð[_ãøVÁè'˜æõ¹”H] õz}9Õ¾K€Ô¶I*ü¶ªŽËJ)à{fµÚ}HG\¢(æaÜÍÖKÒ–ƒÑl•Z®£Zu8;ž8‡Û_¥Ì&{rö`ïn ½µõpó ªirÅIObþx² Zk×/E Ì=Û@€¶q‚Lc)À$óJ0F3:J€[¼x‚l±òR¨kðÔš ¬õWZÇ^•r¾·?}šæH«&ð µµž±$p&:ï§ä|ã(ävªHð4–ÕÇ¢Ä!uijJw®M›<ÖO¡Ä³èèYV‰/ﯜàxÕ´÷AÎâx0Мº³C¹)lm —“štn^lw rw{ôS•heÖÍ|Ë. ÝšuÛ8Vˆß;¾ëun¬<øª«Œå1º$•¡‡Væp]9´”îïf‹Å¡Í"uzþ{ô„±LEünGf}²ïÕSÅaæéé‘§S;>ŽÃZÙ\A°…+úž‚n5yÔܶefÖüQÞö¸Ð¤W:iˆr@O¸ßžšœÚ«ö¥šUK×`Ç€7³\±‘eßöc¦úD€EºâXxÓKAÛözV!‘v©þ£i£ÉƤŸ ×4­1XNÿe0uÃ|뜗¨>Bmÿ¤>çÛ&a ç¨ ÅÚóqðSž·¶57–¿ ^7ÐO¯v$Èz/š:ÌZ!rZL¦>ߓƚ ¾«ÂÞ¿…ÃæÓ%¹‚ökýYx—bƒ÷Àñó½ôü)~Õú-Ô1ŒNø®LÖöŠœ4âL 7Ï2AZdV×ysü2”Le¼Ùw-Û]nô†‡›O‹RAü:q!~]п½7C ßö”6Õ͆Žg»“$OÏÕa­y»‚t½üü3ûW WqG¢nçÙa%k¦+¼$7íoÙG8ÁµkUzåê-“0]ð‚×rdoïT¬’ÞOʬ¨bƒ $2ܯl½L'«ª>CÌ| @óTî!~u‘›ð7?ËT ~îÅ3Éàº<¨Væã™ Ù2ÒQÐ~b¨Šš9:+$(†2eE{õ~9J½ë÷½Ìòå63/`R,¤ÎŽG«Þ7:'< ó„;7¨º/‰Ù:þñdÈöá¸Í¯ByÏP³Û©_W*jÚAö¦úmÀ4ŠjT–pÉ¥ÛLZCrBÊû6'•aúõ2¢jŸ Ueâí$ ÷ö€MGöêvÒÛD&ŒNn>Ç[s´«2÷†;ÒC÷¢‘d"S<“¬|zãTÔ •ãÈo3KEKN#ð)¹·íë!TÏHHål°¥ÂrÞóIyL÷Œ Ë1Vi–ÖVb•èTÑâÀh8xÉH’Û—`DN2Uïž¼8ïOKw²šwßÒÊÏ ¿á{J€øÛÔ+:Êï§hÉuV¿Òm¯²Ù?ÕAßÝÖŸÀ]I®}-{dô·©±P–ÖÈ€²]ùueYÁ}jå%°Ö'L—Õì{[GjÜ3]Uó*–ÙdðÓ(°ñoÕ³Ò–´³±Ó‘ƒ)7;žÃ¯R´ÛDÒÞêíªkë«Zyñ†#”‡j©Œ­'%_ÑÏÎm7ïð&sóz¢éülç °žýŸ¥53–j½·¡rðÿd¸ŸÎ0ÕýÝ}xýmUÃ÷~2 Ü Í ÷ý…0ÔëhÇ®²ø)q•ô{ƒ­î³òt]jèOŸ¢ÓÖ'“ÐGèý´Ÿû¥‚Òîe“ºõYÛ¢#4?þÈ3ݬüüýíJá=srùÔ¾ÒlõyÂÝgf6é Ó÷yÅ&r]f3‚ï‘¡×Ù;̤ ¦gâ{>>_¥8™¨Ú{ºëÒ5{!uõŸñ2»dÛû¸Ñ™7µìÐé|Ðô©.RÃW67Á`nïÝ.ˆœÐŸ‡ÜȾ§“L: ›ÓjRJUoànˆ¯OÌÁÖŒ|‚3¶ö©¥Rù£ºÆŠ±•<öÀäìÏle(“j9æ(6º-á ]©D±Ð%æÅŽ£Ç{g8;BpqÌæòm¡(¸  Ñ¸*B7Ó}v v ”gz@¿LL†ÎðŠü.\|ªœ°q$c‰…ìNcù“|ë3¢ËV•m¿#–ð¹”Ìw–ˆì¥tÈI¡WšBŽ x©Þ°SY‹?ú×9æ:œª¥9õ”ʤ; KAù>PÉlºb­lûXa=ÿ߯TˆŸë±b¾u üI9 ÀJ5·˜~K—ýJðªâÐåi£ ';Ø@‰_okàM¯ñ¬1k°N!<ËÅ‘‹YÏ1VçkŠ5—0¦mIªÌ%ªi¥‚=à¥SÏWFçxKh Ìx%× >žçt†=Ù¾ºÅ'”Æù¯˜hB ™'m"+|ïÙñ^è; Wö€;â( £œv¶Í?ŽÐ߈³÷X0s†f]©z9›½ÏmÇwe XÈÒÝÁSßeòî·*VtíÏ X;9ö"–d‡ß/u ˆ»Y–©mˆDTìu€59uµ•,‰Q5?:ÍgHS[3Eüb4Xí"¤bÓUÓHàžmÈÄK­Ú28iˆí„]ó}ºê¨€g©I+JSæÁ{C •ÄÜ÷’†Üf”bµ]BŒ¥‚<é%§ph&ÄÏÁÖ¾›Á~1+æ!ÑZ•¹$0£| ñÊíSÔoP>Ýf²Øf] =‚œÊÇ;íµºÙôáVÄòb×gå;Ùžt}ág¤¹mé—/XŸÐ_¡Ä0t• 9T=í¹ ñ˜`_z¬0g't™wO` ðp·z&•¦Ö\Î1èýÒ`÷ÁI†éÉÁçÏrjJ‘L¯>7ÌÏQGîx&¬ŠYÌ6§ž¢½Ó¿­K¹ÖHôÂg²•¬yJ†Ò÷&?=õô|€¸ö€áxÆ5ÐOX@Oî?M'GJ±þ>f£ÑdåæõöºIˆŸEr]õër­i?SL”s–¦[<%žÜ†¶Íl[Êi ÕÞŸÌ}.å‹ÒH„ÌpLÛëL YO.f_œÕ@$SºH¹ P&k<É>}åÍ£+ÔQPÉâ‹¡oïeŸPþ) ª‚ødÜ{È®üÖÞc¾ë:„ZË=I«×»uðñu8· ªšûÊß§g]òå#7”Ÿ:ï [z\ÓA<*ÙôÜ*wþ8£Æ^a¯3äó Ñþkþº™ü<ÙëK˜>k³?¯nçA 3{Ž«æåÙ{Ëx€uLZEmï°ÕÕ6¨²ž[*c:öý K6“î(iÛGx‘ò›”CÈe³=$¾×ñÐôU°b¸†.á¥cy‰€xÏ»'‹™®2öPw`SZC¦‘_—<µ/AdÛ¶ ïh\™!K“AqÉ}Z-û0Uïî@^iÁÛßÊÓ¼šrV#Åêc#n^Ü3¿…½3pÛmP^9<›~V˜nÐ^öSêª3åR9›Àþ¦–mVöçøii–çbCö”鳑\„ìiôÙ®Ö¾·×«¸ÅÎE£Ë~{Ùü1å èkd’9ìô~¬7ð7BvéÔçL©hO‘ŒÄ-=¬ì6+ïߊá¦Ã“œ·È`Òs¦½F\N2i7é2 uð ÄU"dÉá¢Bɬ}!¡^ïl+£I¿’<ºú˜cºWÀ§ÀWiWväµßþ¿’_q³!×£I³ïÜÓøY†’½7<àñ @“Agý•õñ€ìôÕ}wªƒîo Ü9o8:œ±Øé]“Kéãi%¤I5vŽ÷ϖʨ[+³H³àz…Ÿß’Ó¸TmŸ“îòc­#³è’~ÒÑ&;»e±è³øîÜO¬’¯Þ2z½ByA&@w< É2Ÿ9Ç÷Oy#yéŒl½·*qH&ª&öèQJu—ï“PGÎ~o€õœsüy7›30}Ï?çf\Ñ««¥Èçº[©«oÞp:îyàÒ'uí­®¸¹o9ïÜúÜõ¤®j ©ç½z cbKÌ£+n©çÎ Ä{¸o?™4¡bY‡_-­‘Ó-7±dÓ=J(]{ŠaÄ ÌíÒw½’ ïäÚS¾"i pÜ.©òfIè<údÏF=ê:ÏXÌ“ð=yô,-jÖfŠ‚2‹Ô#†U$¾ªºó»d—HšI´é]ÓÖ¦²AÐÜRtMÁ_B3²è’±crÏbò`¬3Ú©ï~‚[k›…JJn¬+˜öðk÷ümByÿ­S$ÕÈ^‡·VßÐ\áYâÍÖ Ë,Q8šýù¸ËA_Œ;@Yn3îÛŒ>3 ÁG&~ä¼Y3Ü<[aºùu©ØÉbì-G+ÆQصj¼ô|%Å3Àb½"€.gƒrk³ì=ãn™MÑŽQPþ”Ü’êŸc5| Þ­'K—,iRgŸ‚«öÒ#À¾úyEÎ6©ƒ÷Ъd6v­'æ)=j åíä!W&…lFÉ0ÊRªï~ÔÆž²­í§ôbo¨+%sI&FÔO«®ðÀt§®ŠlÀµiJ{*ÐߧȰ$ ˆç™Ôº*P X/óÆ‘7ÖŸî±ä7ퟦ¶¾ißÔŽòm=$<´}…àG¢…ÉÈÁFϾ|=³ZFÒ”ÛùmË‹&Cªe¤zy´;ø)=jRšÛKMfú™§¸ÇW¥NŽÃn´ŽrbeΞ¯{¢ëG‘³w øSK?K¼”:Dÿ-¸:ãª^]H÷U%˜Yÿý5¯U„Ém¯TŸs¼a}½$ˆÏŸ¹ØÍ]«•—H¦ÂzÞ)àÞKbñ{.UqBLËcªò˜ÈÒÈR-'$5×x«œ‡_ÅÄ;I¡ÚfÓS¢0*àÓý&Áz}§ÿV-]Â2 FJðÐá•7kž’¡räž©†@í4pLÕ»qeJµTµÖý¸}G«ëÑR©TU*)22>®ºQ»!Õ-¯sâ;g¦­¥îSÄÒÁ”épíý˜#¤8gMr—a0¦Ù“¡×Ì œ¯ûuyÓ³œøk­ü»ºöçðý§€øs½Æ¯‚é=ÀZ ±)aªvÛ³ïsE-ÈàXvß±±þºØó ó„àDïô˜ó½ï=S`»&þ”Á4LOëÛñ¶¥žÙðFUÎ(I÷Ƙ~í!…M\ÐÔü%y&õ]5/³+ðênÔN…gûÀDy<Ï-•IN°p¶ÓÐYšl“pÆÉwªh‘L÷XO~vXüS—?Óf¸ArkW™š¤yÞW×¾ôìÁÀøÂ…φÚñ׋G㯂H="h»; 1¦Oa½vÏÓ¦ ´ ³g®¤«‡æØlºršNw ï®W!²¨„rF¤ÁÌäì£Ëï˜K$ÝH;:º4s~;é‘íA…¯Ø¾SçÃqN›)!ª]¨”6SûÐ;üñä×…ìÓìY­ü,Zš¹+ôõJ,g¾ûzÌpTü Ü'|oö}-ùœ›}﬘ýþ89õV«7ÜÏ«´ò¾?™tIS·¨:Èk§Yöìˆí9[{Ëžƒðdoí;{³¡–̨¤u«këàáÔZ0Dì„øµt6`]ÆMQ(ßÖji­78rK€~æë¿Ìzïj§ÝêÚÅg]ð”ÇIˆBx ø¾·¥5dÆV!þÓKä™úªüGÖC!)ŒIýT½Ëâ'ý¦*3®]vß(ØõÙîJwÈ(„7 ZB“{÷®AŸ&Ty÷ɵ Å¢³oà>ƒ##qi¡ËžZ1.œýu•’È#ë|ÒÀúyýåë.Ò§@ÿ§Xg˜æ{zú_ Ü;Štý -‚jxuæ»åÿ¸ßí”K\_¶ø¾>Fz°q³à÷œøïX yt”ìâ*ÇýjJ" ŸH_&Lß¡özõ˜Kú¯ÂwsÜPµ/ç_»´¹·aoûÞO¦ní¡œðNŽ3ðq*ž;°Õªz kédÙMžqÐ-ª3å=lzë৺=ÒšŽ³l,àF;3s’CÏsáÑ”U„ÕŽ]¶x†!fhÄ@vXpÞïÎÏ,yâHhºµ´Ë‰”ßDµ4IšÚnX:!lßY3C3×w픬v·žEÑZš£mAkÖç«$acE9§3“|œ9YßÝ™ÿ“9„pói¢m5[™DÜih£²‡(žÑ ”q÷YSÑÞjõΊ¹V«O]û®qW½½Cù¨º‚{}Öf‹êîs*Ë[NÓÇÙ?Có÷§½µå7W†(ïŸ;‡"‘èL1оÜ3sfÐäžR?å7ž|# ÏÖ9ë±R {ŸK-¬šeO tÓÞª¥5a»>^m<[TÃLcgÝè{é$«„¥úkê”›t#4 W¿H D)iiuþ”á àÞÎìu,@ùfÄ%“ˆ…]kxï)²¹ößäM±[£€_m{uË0èZÙWo„=f™ÛíÚ\;@ü¯ÿš+'HÊ’ãô.¼öd3¹SËÄÏê¥9ØÓâ%gX¤Ë+ðÍ»ƒ8è=wÆüWÌúžÿ5ÿíâ¿G_xóÛçÕˆ&¿¨aºÓBgN¦áþ]ÿKìñ„wïºFØOÃöïTòWo2ã¶ÝTÚE 3¯ýT±ß÷ÅV’±ïŒ†ìžTÇC;àÖ ß‚™@skŸ…ã¨wn¾=ÜÃþ¸+àI'ŸÑ‡méëøÂ€o!`³òݯiîŠ ÒøB€& ‰›iƒãXEm6mž©Aü)‰9kžJÎd›= ²5úÓA·r=Ã0#ÓA«Œ$°Þò©lÙLp <¸ŸÆÓ½)96{ÖÊÔ¼ÎʧÉÁwßꌹLÚŒŒÀ_‡+)¢jáÓL¾Ï~z0¾0"–õ ÀxµõÙ¿’ÏP~¾/Ö´böËF,¤ƒ`ÄùçÃ<ëbHíºµìáG]&%iAÞIevIL[E›_?›SÃIïjòkÌÙª2¾­úLï&Q™øµìtð6­vø`Ôï>nñLkÙmlÝ+œ¦Jþüë~üÍ÷s›rj%ýü¤ö’)Áz‚#“¯¢ÝmMEÓ™ñíd@Tcÿîz–Æhö¿Ž½g„壌ON|×E5‹¯&BÄb)!~p忥”ÊÈÍ;Ãf³9ñ©|ÄÇðsð²Õ†­o#¬p<ÆV¸v  %ß=vX×Ä뜳.¯ÀqÙî„Q&]Þ>Â(×½ÕJîõÂtµòßÌýÙJwE5rájÜÛrzXçܦͬWq)KJ„ådµï »{Ë{yÎd¿kZý-A¼)~¾!’ß\¾6§òƒÄçÎtÒÕhàÈîúß×aC¯ùøW™6Wüµr}—ǼV>í?•™K3c"ûñô›¯ÓÈq?¹ïÂtëd¾ò8µJŠdÛDf³3ôg‚{?&†Ï‹{€»ÍÀtíܘ¨ óÊ~ÚÒºsÏÉB‰¥µÍ¬BÆä wºvú>§HÄs›•o“åiZíÊ'§ž#iµ÷´±®›£°ëçÎvwîJ§èD²Êl`»× ro÷Ô¶b»ç4Nà®á8A“±ÞµÝ»×Ïí”ý4ÿmýVd*=÷Òß]çúóXñÙ5á×Y2EÞCnÏÝnkÀåi{ÝÛgYã+L?ÃÎÏiyUO=ßà;Ü»ý”Ǧ¸ÀЇqç¯SB@Ü” ‚à™…DÑÁÒ°SÈÞµJ'(Ý ˜Üóu3kÃýñæfÜ9rx÷îaâ›;ˆep<½ÿçð¸ÓlÚðÚÉ6W,;ûIÎŒñšÙË.¥Šuf°+;N€G2»Z¹Wâ=ÊýÏÈH×'‘Æ 0¶ìÞÖµeàûñ\`åÕÓ't’ccË ÜÉwÛ„¥¿Y®e²øÒ¬=ð+æ¯|b'`]9MÀ:€x6+wâÍâÝY÷W•Ð…0ëѵ¯€ZùÄM²tM p‹jdñ“?ÓJ÷¨äÞ8cß0ýdÍY˜ÁÆt‡ ,s¿îìSÓПÏl}ÚB gWëßù3QÀgÐÒÙðWgïX½æã竼#¤yW­þ½š¯ŽäY>ýý«›Ç?“òÿóÀúM}éŒçú Š¿cܯ@Lw-ªáh;Á½AƒW@<°ÒàÂl„¿;ø6©}çÔïp4à~-QO®a‚Ï’“¾“ÓdM+à9†ï½lÛ«G€ÞöÓèï.åȵ´NpߥNóóŠÞ½…DZT×_[Uß¶ãæàÝ3ôQ´«WÂ$pOK«ÆV)’˜\™åf{D©0½³¼:?¾ri3pØ%½P¾«¸"% ˜î–YC$øÐ9‡Ù'Ïí¸I5ñØOiPŽlß)79×:£*ÓäªIŒ|¹jxc+3TH¹•O ‹ì®Ö¬±ƒÜ!Á Žœ5L€û6¶&€2æÑæÝ}|F@Ô×'Ày¸ëæ;f6µt§Y±Ëu”äP~…¦~<‹•|×*D~*¨þNîû{êö÷‹¥Nû]"â;K× |!•ùî„Âܽ]ëfüjû'`ýÙiq}bí¶Ô«’¦+8~­nÏO1Pž‹`›z’Kî<Ó\ü# 'ì{Mžrš.uºbÜ#ÎÁò@Ø ìÜënÙìš›Î/oîù4¿ž¸ëà›ƒoAK+¹Ÿ). .3DØÀ²ášÐPó"‚‹Øaá_×6mïÛ3[fÙP ãßÿ}C[^`§&žÙ>ضÂLv³J>Ö [£šrŸÉ'“1pÁo°sô3øé!™B£ž÷8n‹gkÇûÓÐЌѬ=Î?Ìâ§«A‚ET> ®îJºÓgK‡“šb$Ó› dÛ ±·öί´ðör—'39uðÑÄ·ÄpÜÊõÎHiˆf´7ìžÀúîñ•äzÍÉ…ïC…þë΂ÿïÿ­)ödͳ¦·ȶ•öÚ+ŸÛ좚©Pß¹öΤŸ]ïÊ,ž°ì~.)~j;l‹aâX˜Qòôîm{mX¯•™Ú:£x–©ðÈi`è[/³®œF l^±Ùw€»šx~SY«\S––!ç *y³hbŠåÚÌ 4Ÿþf“NÃõ­sâYšOO•°~Q6iNÕÒaLÊ›å¬=ÀšÃUóê Å#¹‘Y÷}¡æ‡ÅŸ]­³°Iæ> xÞûiiQ’ûz!]`:à¸YyQDç¾ï¡“îùk¾¼9þ×/Wÿ•´&yÿ‹²|*›á]jÑ\ÿöz£ïFß•úü¬ÞÝ÷õÝ:ª *Uæ·Ž‘ÿÙW|ÒãÑΫô˜»qç½ìÛ7pwi’̹ëïUº£½SBc†ŒŠv/4Ù·i5!’ â{½°>)¼ÀwoÞIÿmùG‹7ZG>µòrçŠU€§­°)vš÷T––^„3fÿrÌ ÈäÉ(zY7!¡á„¡Â5Ò‚ÑswÍ lk ikÖ;•¼e9™0ù‡Ëz“0ƒE‹š¥“ZÓÀÈ;%C`L ËÚ4kÆÌ`¦¡6°µ›\9‡"Ñô÷yÒ ^Nþ{L£jtù=œð¨Ò‡z~ã/ÔY7¼V¯o[ó)¤qÈ g=«çv®æy¢qoÓj;-`J S³ìsÅ©Gè"÷õLùìæø÷Ô—;-û¸Ï_›_R_³é­‰ŸY4mf½N°éåp™õN*33dö¿20¸ôkŸÍ¾ÏFÕŽû\ß`§âÌ׿éaîc`mèÏ6ö²+ŸâÍÍãÇȬQÃt¡üYÿdf¼ÛóŠ=G'XG¨–ÙEà;3 ܵ’g K¹s@|H©"ã\?”[ÿ”%%¯Z¶~][भ|‚e—A7²«â3 PˆÂÝYBëoÿÖÐÏõI³ñÎ ¤‡5i6²òHñiLhü\FÅà>c'®9»Q`ÍÆìöF/yiŸ†T÷³ÃÖÆ3_‡?ö s OAp’ûã$Ýÿ'Ì©ßÜ¿Ö8ûmûO¼Ì§©í99>{Ýó¹Žov`ýÁ¥?!;¯U'+0]W5ÍT™V¨O¾AvC/cdéw€~çÆô b6edÜ||öðÇ?6GÕB¤> ¾£ÃV ¶’[Ö~^;ëÌ­ Þ±·iFvÂôuTŒÑ¹%þ8“ëmãiWGµæ¾ ²m£< ¾d8­É Ïch«k\öç|&²÷`¦µï|É䙶љѾÃJ>nÁímÐ笋qmpkMƒ•i“%ܳuüIƒî´¢ùähy-³\ZΔϰx*…qÔ9°Ï ùù/À„‚hÔÁ£9rä M=:W n-&}IO:-ª-nih~•×ü•Ö|×7ø'½¡ó|V–Í…G¡~»;ffÀóÜ+yLt@ÿÕž£Dw›]x#|÷UÖw Íni™3I’iøÎÞš¹?í­@ðæ³›§oQMËcš×²³¾çxVR„L©—­gŸ½ÌìMËrØ>&×ë÷…ìZW×ïÊÈuvÃëäÊSüÄ/™ÉT`ƒ>~æÁïkÜI¤qFÑ yúÈlÈq7VRˆ MÃúN¿‘Ÿ‡7Ge¼à[ùÍ:6 ÓMŸ¶T†|þü¢[%ß]­±Æ:Hˆ¥5wí]…¯€g®_ÿ‰Ñäã“+¿çÇ_§Âg½"œÝ´zWðôIÖûלw$=gù»Áßz¾Ræ°¿:’¶3xãjÖúµðýQ§ékËë÷{¸)óó:§«Ók/Îu{.¨Á^©'(efá8F™ðî3uµÅ6ŽãÓœªR •<Óy*×wûéº )¿Aç6Ù÷N¡a4ÛÉ0\€¸Í4(O.ú{xVuí‹‘Pܲd3Ñ1Ê‘i˜Hí—sd9N‰*½XÀ%³¥û\ž¥B“ëíb&8ÑŽTbaʼnÓʪ´ÕŒæñÚ²ójb¨õxسÚå”:ñº]’å» WÝ 6ÒÓi6†¦5« ð u™iàÂl„²ßVHa¨ï=USVzäͯG†ä€-³+3ûŸ×ÍШá{ƒ{{¢_ïO :]Ï´nüe…o„³š³ƺ%1ÎðdHÀ_»nÉÔú€u ¼`}î;ròî‘Ç´aôN*3`vu»À½³YöåY±Ô!MƒõVÀ·Ð…õö¡Â.†9¡€{àøYêt'’i ,¿#³kfÚL/åæ[HÓ˳ÿµ ›f=S õ¬pêÜwô0ïì¡SÞ²O>AN þ9Tp‰(ífYû\9_É«_ok‚&OΞm€msgxßë#¤‘2°ô'ÕNšM^É5¹¹y…4ªÛ“Ÿü# ™¸×?¶þ‹ß¾"^&sV¾ã#ÇI˜Qf];àÞ¼À·‰ïkÉûZW’àÉ«Ùa7,rëà›V;å7ST£ ‡-ãXf iö øn]í×Ñ3ï™*ý½ô§FÕ¯òÝ_y¯oy— }fo}úºjˆm_¿‹oêJÚœÊIü*¨ñµý9 ?èÉ«\ïó:…÷s£ê©e9Oô†ì;çm7ê¾ýV…:—¤T?¬‹‹Œ»¢šfß›q ÷b±UeÓîÜ bim®ÝÒé~˜ O@øã—Üb•$¹Õó{ ¸¢”„<šîÝ‘‹ÀĆã ?…±f²&¦±Å¥%>&0!,73lzXûq3ñm å&‡”ÇÔX#›î”1ŸžÒ†D{fù´wåÐzÂÇ@äNÑæv,&©íØ|U[ù8.3Í-3çCÌÇ‘¾tŸnëé{9Cî:z¦Ðø­y›'9>zúNàáqÏH´{AÆ=s5ά3±goà×;1¦ ¦ì§!{øøHöe·Ÿ¶r½“a®€ûûØ,;°û„Ë÷™-æüõ´“ö–<¸¿Ò²O³)Cˆ†õ½Üí­W]<3ç Ù„wÏãÉ»OQMØzpæÊ'Ù}à–u?«‰@úWÓìx'Ø8XëÙ[ë㸷ªþäã…õ»ùUî|Av–mTm‘Œ5O! øÅÍ®ÖNªÉ_ýâ H-Ë6¶ ß“(/d_± w½†pó ?˜­ÕÜo34ŸCkâÍZYy›]j²hßɘ8šÛ®ÚòÔðôÙ’2î{|ä½µ« ”¿¶¦Í©Êf²¥5šP³eĺ{®|—4݃xŽ™ïîµ´ø pÒ™óÉ_ß]ÿ¸?Ïwÿlˆòƒ”{ªÌ“lõïÉcž ožUý+?¶™‡óõ‡ÕpÿuˆäõU+à›Ë¢£ù)žá‡teuÍ ©Œì3c ¯ØRYšŸV5î­­_Ü9—È÷-§éÁ€ê?œeO€¹¶® š\Ð[^Ò†å²ï†<8FB°KÒˆÜó™×Þ‰3÷=|s×05¨mËw*C†>ìµ¼þ‚ȧl&€[ØÝm…¾kM´jÙ!dž(þF½Ý¦Ûî\ÌögÞŽÉ*”díÂöÜ6_çC:Ã>FÕ}Èä²f€ã~þÉÇ8Áýäéçyâ@b¦È¯Çá ‚ŒXhž3Böø‡.Þb‰}ðî@ð¦Af•ҹ윙»Æ»eØî†Ý'×<ùæ U[”Ò€¾ÓÙÙ¾Ÿ{.ï^«Át3úúÄŸë[N#Þý.JòÌ™i¾ŸáÐLç™Zùi&nn¾µò­Œ?-³ »aÇ[C/Ä×ë`®áû©¼çغ ¬õñXZ;¯†_™Ôî†o†ž­÷]ÅöYïÕÒŠ¨3©,°Þ„øµï¹N²áµ·¶VÞ<øe,5q¥ój˜‹^w þÊõÖmÖ^½Oµf=ÅLÉ–‘k·A…;xÏœ Ö“³Ž‚«÷ÄRÉãñìG ûIœånimØÝ ©v‘Ìܪ>˜ÏÝ›_››ï”›‰ˆNzô«\šg—W6Ögò˜OýgGþSàûGúYwà~Ð_ƒéç{Í݇õYÓóÚýݸ@èÝWþÚ´Ú'½†êÓÆÚ½ª¯òj"kÉOꥬ·lÑ|y›]²ÏÙØÚ|ùÎÇOž^‘Œ[ö6>VD‘¶Q¶g 7  Uóµ-¹‡(×éÀ¯X Õvwæwó©3á;qi'7¬ý1ÆÍi´3ú8²™~n?´™:GÁ{ù»¿S€ÁÞx§ë=>ÚxÚR9éÜbgšJ „:Ã>¶7òu ¶ªŒ¿î'ä:O¡N¿Šâ–ä´ôà*ŸäþÉïÊøˆa”QÍPQ›”î°„ÏösÞÃ%Yδõâ×°»%1½4´ñãÞÒŒ)€9Óc®ì§SeÞ`úä×§æ«5²³¼~€{³ï½·óHúxNF¿‡ç¼ÁÕ³"·ëú§³žiÎ<œ¥N]ÆÄç¹'ÕØ´õ¹åY±ºÞ‰mßh S€•÷ »g:MTò3b2;\#¤q›äÄ3ì¾3s$Ïìb 8Þ]X/Ï ä:f;×@}>éjí6‰5tî·¼{cfoënoe? åÐw ¢ši]ui{+²À”d3X;Æ1¥‡‚ã6Éʇÿ^ë¹²ÜÏPHçÞÉKi€àžÁÄïSé.X¶ë“hr°õî ܯHÉN‘?çÿîrù3ë}ßç®).> ™ÁÿU(ù§€þšlå»x6ðø­;S‡i~y_só_½m Þ“֯װ‡×ó¯ì²àÏ…=¦§-³jŸZù;%}òYÙÜ€¼IyŸ \ÁŒ4Õêîx¦öºŠ«ÖU×4¸ï¼ùd×j‰ðCö}ñǪêÉå5÷Ý,ù–‹ìÙˆ12bOlØÝ n×9qÓ² %²˜iÖX'Ø]S°éÈdŸm¬^3dßuÿ‰A¼JÔ±–¨#,Ï6Ó90ˆa"Ûv9{3 øn*yë¶ÛÈÛŒþ\Ÿ×êÁƒÜÿ‚gêKïÿj®c‡ïÏç#¯™Äë3Ò±°m¦'XïpÆŽ_ÙFŸ€ìçÑ×\ûv|f¼\Ãèˆ7¾Þ¦×Ï¿¶¾ü|V³òw{;ý]àcK’O/잉7³V6g¯©4 ·ÒN¡i{‹^ºu5<}>Æbì–¢J?….ÝØÚ‘”í…˜á¡ë:užÿbƒÆÝ~ÖüêY߬ÿL‘ïʧÈoZB³ i¦„Æd¶œ…h)R`³~Ãò¦%CŸ¼"ךÖÓ·^:Ih¾xt ›T½+­‰&ÞB¨õ 9o8òµ´UV^xíã.Eâž*PW•Þ"œ–ÇD¿Ãt_e÷™hþ^YN'Äÿþ÷Kºî¹HÚ;G8tàxØý=yfÎvÏ¿Œ¸¾Î4~¡Mž’Ù/âSî<³. ¹îÌ·¼ÓûçÒ±:¿/-¤ï1îÏÅ0wý pïçÙŸ$e~f¢ýt´w—N³W;µ±u®çGËe];™3ùYv¶Œ"Sh"q0@ˆ—¥Ëïa@›S[ƒ¾Æü‹Õèg9›>»<M<bþºö`f¹©ðn¯¤$Ið NÌ<à°ÿE·-PØ]•Üðºô~ÆüujM›PGÈ­ˆ[à ìlõlß’¶äZ«”Œ…iWUÓ¯ˆõ=cÀûÝ­“Q¨7^¿Sð'÷¿Þ C{x¢Òšp+¿‰.¼S\t 4¤vû$´Dð3Ù¦YÿS Ó`]é QŽ™o¾‡/oµz§¾ð.XÓ½å(“#¿è÷šït^ËZîÖœÀýZÄ2Uìûú{}ë?îçC'ûi±MÏTì;§Õµá{ëÚ;7&=¬3 þº´TfZ}¾xq ûéü~•ômi pŸR™NÙßóþð$9¾­±°ï€ò¾.qlÎãQE¸äZr53߉ßF®c‘Óx…ŒT¦—fmµÅ_Æ=BšN§”ÃXÛ»¼þŠ0¦;K€~`lfU=e<̺Õ(Ú…æ$Ò䯸û·ü~ü›Jty÷èà›M×]&[oN|çÆR§0†gdàòîž}w`p«Š_3™OÈk52YG¨á53ü-søþ®EU~½eE|kœ]êõg«ë×îÄÞf}œ9|÷¸î‘ÏÏŠdÞí—}ù¬¯¤2ŸÉWž›MV'ôl™Üô«Ók©Ì“×=UõW&×=Óý.9^NЇ¤¼ÏQxò^¼p¨q§©5Y4ÑÙ¯ †¡)ÅQÛ·gËhc5Ó`ý(¿‹vfˆd2F„V–.­õÓj ƒ‘mºÂƒøÉVÆ'÷@õùzÜé(­ìä&Ç­TÛYªé•ĦwJºVÔXW[Snb8ãN/ʯcƒOâøÛÚÛ`}Ok™©öÝkkÓçºY&ÄpMàsϬWg ·g¶8žÀÕ{Ëx&Äç1 ýžknÃ(ÏÁwß~æåGÞ£ÑVè¿ZâÒG5~ mÛåYÚØ¯ÕO«èÔŽßiЯú“åÉIßñ軸å^qþ.(µþe Zv ?ßÅ ÖÏn×)¿9³tvø~¥›¿Ë‰G%½{D5¾J³é-˜iË)Ü9Û4pOöKXsD2è׎”›CÕ <]•á _–}]ãz0ÀzA¼ƒ‡ý×–Ê8€ç7’õ]ùăA¹Â›hßä¾µ˜î‘ÜìÙ22îýÂúõkm°¿Ž¤X´U+O¸d8øÕy.P>ÊøÈcäËÉšã®'yL€¯PÞD¶ôh%É<;P55-’é HïòIïYåS/˜Y4ªØÃîsx[³‹\-쉴Fèϧ—ª§BuýÓû]Þ¹7ÌÌÓA_ëSz/ƒåì¾Òß?â¿MÊûÕ~×þîGs~ÜO"#ÝžK$ ñîa¦¯¡üÝþýñõ)€>Ǭəi'øµ`Æ:§Ît÷1ÏmÆ]î<à;Sfi`Másb"î¤Öœù3Ø+¹y |Öd`ÐvUã…§m?M…\»*gEEÝ ¶óC¬õö5p(l.Û$”÷6Ùò XŸV©Î ™€×™~ml ;‰Ì2†ÔÎ/÷îBšæÎg†= úÚ?7W{rÄåÚ÷ãi¡È¬Š®=€8Rœ@ü.s«èŒ™ïˆpZ03+ŸæÞ&°î5“_ðfBzHc;kîÒ`vaÌ.k‘ ¿ŽJ¼Sœ_…0¾’»ì|öÕ_;Þñ]XÇ£_ÃÓ“<Ããû·Ú]â³ÍëD¿‹“Ÿ’¡)4(³ýL—UðÄ+Í0Éì¹•î ¾w àî8È)° ôï¤yÛv×/…ç¶Å™wÄ»àýöëv•Usíæ»‡ÑW– ' žÇ»¥ÕVW~këYjÜ#ªÑe3mܸ¯|%ÛìêóNF?c&»ÙWš(Æ>rx&–§‘TIÌ]ö ºö3„qòîJ,^‹a¾寷¹Êu9—ÂeÅ3OÀú\ÿ ¸7@JöPá~¹óî_æv–üUV}«ÞwÆýªoõ®“u··š6ÃÀ~åZNw&¾ ˜zÍiim¶ÞÁäθC‹0' pÏ«÷ç?c"ïQ´7ï.GØÍ5­É…6¶xsªÒš€r£'ciE°ÑæW”î\»¥°ŽlÆDšõ þÞ×ëÖ›‰—e§É¡aýÚ÷wî\°ì܉:ëà®`»jšV“oê ë…à(°eÓÍ÷Â&Ùe(ÂVÉ ¸ÿð‡ðâZ`mÚ†}Ÿ,»ÆÙ–ÊpÿæªÞçWÈ~Å”ï îríWd"°û´½FkðT6óйo*ùš6=Õíó7ÜA8öï†Nþ¶†T~WXôÅ –qÕs¥û¯Ž‰üL]ôÓ>‘²\}>œXÀå» ø+n>Ã3Ç}·º ë3V†ï’d§ù¸w@äYÆ„qçÔ¸¸w$kåÂVÂc.v@¹ËfTÉ›9#ƒ>ÓÙí7MŒ é4iÚk.*à“í=NH…_?é´«ºtÀйæ¹aöbÉ­t2÷­Š7’/·”›.=‘wOJІ›g±QW&9å=™ò©×ç">å.k›žšââ× ¾9éæÎû¯rö<«Á½°>Zöñ=ØàéD ¨Ï[îâsá ×<ƒ‡ ö!Gü kŽèdÓÓQê¼Êú:aý´‡6d7ke‡ì¯£ïtá↹'dçŸÀëÉ|¯=Ÿý\ÞÁ÷»íûxîþÚ˸¿‚ò¬_Gî]°§Ò½L÷¿î­«g‘SfáÎåö°†SOÖ»ü:ð×sµU“iÓ–ÓÙ¡›=;´È‘Ì$œu´/ïÎ¹ŽÆ=ª÷iE¥vmòæìÚ\á[#¿þÞƒ“<Ó5  ä ipä¾d= œø`> Ž6²•î]HL7µ&ý©½ Êruäø(dÇ„ k.ó}V;µEUN=Ìz+’I{«Ï2Æ1‰ìKµœ†=§É5ì»ð:I5êÝÿ{ ¾çÛº¦EÀ㳚 ŸH£¹ü$Ïœ<:GÅQß3ëÏ”ÜwBåw¢!Âñ‹ÞyëÏB$EqÒÕ>9£öTC>w#¶¿`Ü'T]OƒíûܨúÓ)ï\¼¸=ÿ|dÏ×lú4¿Þ¦ùã:¯t¯[ÊOeÚX÷ xE2D=’ÿ‡?¹è›«{}Bù,eß»EµYíˆj¸ÌQfaÆ|”ô¿ÿ=·"Ζ®‚b(Ø ÝYà¼bÃ÷$ÉÊû,ûYmÀeÐb­ÒºYFn¾8L0´kVšón6—[NOd 믲Ôm÷t™9„Î{ÑÜÝvçÃÈÿ´n0-30¢.ÐÞ’1™­Ç‚æá:/¥zCüó¯ Êۺʲ·?ù~ö܃„nz'½œ-¤òîSgž>kžðèm?½Š_<å.; ~ÍO¦ü 7œ•½¸¿f¯?YÞñ;ˆ}<óØžqí×[Þý¯ùøØLïT쓉µž;O?÷xôçÓÐVãé>{Ð ñæ¾·¤¤µò{r|¤¹Šg’¿æ~—Á´™õ²êõ Þlœ}7‘ý^Ýþ®õó§tðßµ«~¥û߈QôO÷×6Öw„.×*¥¿üKoëþu›×»½VOFfé»>·P8²<{3m]ê´®UŠ÷Ü Zð‰}DßkºÂ)P[hÞë£z&ܼÁJ^¼ÂÌ#Ÿ}«–Ø'9>0]VL‡ZfºK’u<™ÄÔ> @ò†þv4@ Ü®Xj ÎMë4h Áw‰ˆË]™-ó½ÖóZÜt[‘?#,É“1Jr}òdŠx›ßÃ4Ï ¹fÙwµw”µ›Ï¾“â´Xů›=ôEóâû²?É–Êd¸Òúþ™üsÜ;—C³é5d?£_‹X®!ûÔj¿»w`ý)ˆv|>¾ß§Ëóßy­§ ~çà§Ìæ9doYË^u•þ>¿Í6›^³òÓÚ²¨ b6½ÒÊ· ¦õý Z•ÞS$YªPG²’H;:çý¯¤ßþ->ÇãÞ20à·áì\h€8ƒŠ©›Ï`€½5‡›·|Š(ɰòÂ."ƒmØ|síTˆG`©Ñ€>ù33¡KàŽÆ=ÙðšVSÛÄp‚ï ßâ™0Ê6³&\²k› Ö+°AVJN˺·á|³“>FU[Ö™¯_û4;n½—¦œ½­ioÍÀ ë£õ×HÛ0½ew©Ní{â&Ïä–Ö©¯×?áfSwL¼¯{b§«2Ð÷õîOYÿ_é Æ=øþö0à?ï“r¥'Œû;í+xºìóüП½úÂ|¯@ÿ½Në~?.l Èu^ÍiZË^¿Cö÷ó‡7K—ÎØÇDÆÞêEÇøÈÎtÿãV±ºö¢‡ þuBK0´¡˜ú ÓwjgºsÑÔðº,­v².I…“y,{3k oÇ´qc3ºYK;Qa#Y‘g ¿ÞQŒJÿš(Æî Ù»õsÏ¡7²µï-5™¡‡{,c+hYÏ0¸Å!<¦ôP¤ÛC{00ïI5'߬üß#tÁBè¿ÇANi)1ëYwM¥=H›`ýN³Ç/~­ŸR“½ì ù^þt^û¾_özýW þóaÃWƒ„×ë¯Xü;qΈUÒt÷nc=scZßsqÍ©«Œþõî3ÞÀG!µçd[ž÷`ÊN¤Êwd$ïb:£Èïœ@3³@m–@ðN ³&«D€8{Sƒ½5{îŒÿ.Šjæžw$¿®Šjå)hƒ› oÞ½[¨­| ˆ7 þŒ$U<Ëõ—ÖÓ ñ©´cÕ9^¸y˜ûŽœ ©Ü•âÕw'°A)¶cI®µ§ÄD.Â+…P¦J\H‡š²weÝÃ÷꓾Ӻú«}˜¿û÷_ì!âéË»ªß0âþeû*ü8™¸ýUþÞ› ™‰ìg–Ëë^U.¯´ïó}EŽ’ý'å€Û#ÚÉ»wàãÕ´{aòë j' ^¾W,µ`f÷uéAw5lön×3 øn:{øtPZ·Ä«´l&y24å™ûÎgÂå¬ ›ì^ì*ÅYÕÅ*Y2²·ê=ºs™J8KŽßeè“‹ äá’ñkæ´Õvë…MT9%ow´nT-:êŒn§X¥—ÍÖÛ-šP»V· DZ´žŒûÜÛ{2ýÍÙ·þÊfÊšðîãÞv[é:•›\ËV·æªêè•HæuTâ•Âû oàβøÝšçËï@ðïïák Íg þ“‰¿î× ¾;7ܼžEþ'ïÞ¶÷Ð õÞ²÷ÖåM²ôi“²§™"ßa‘ú3ïÛUgâ{¤/\Õ¤ŒI¥{ {/5Ѹû™Â²3øÏ{‰öÝ ',­JrÆÐŸ6ÖÀ÷ú§Ö¯ëƒJ6|ÃqògxGè”ÐDZÓù3<6¾b`Ð… &>ápíì­;àηj‚»`š†uÇmY×7¹çzœ è&ÇDÿª.Æ\^W>%s¦¡üD/MG^÷k=ÂkŸá»—Ïx÷çi3ÿY*¿ûÝ+£íÍ©¯§¿.&r®”0 ¾óå]áëÄÓÓñÓý×ü«Ð¢0âso=ÌxÙ¯ÆÓþ˜gÓÙ½~ýdÜ1¿¶ØF•ü®žŸ¦U­«¦Â³¦ð ß›†ìýØ\&ò”Á¬ÉÄm§ÐÌWYÛ7ˆ×´í{«ÞYc%ÓÎÓp@UÙ•RrÞ±«Ê7'¼…4êà×§£Mž‰påܧ–ÖµF³Z‹:ÂijMƒ93kÙfV–3&²a÷Þ¼¨Ž¶§à×Ö ÐwF|ísèÍp·]µ³2zË“Ÿ0ý¸O ¿sí3Ò±?뽕`:[Óí¯2ÅïâŸ[3ßîß_ÞññÏ8[®gÿ6ÐÿŽe7 ñŽ}߇X­ƒŸ½ª» ª÷Ùƒ·nQ¾·J~½®Ò—Î’ŸCˆõ¨%4Ùæ2 ÝèOÝ|„4 oz}3ñ-’é|zxôô¬aûØ„qw{ißgeòéûYü2{pƒl·±®ßöžþεšõR ëÝ4Ën:r®ð9³ ³ßõú¬î6¸Ã[4_3Ã|³Ì(¡ÉR>ºyå4üµõôðôvµZáÔ :¯Û໋ŸÔÙGl“õ -ÛSŸ™ñÏ®##åšØÛU³¼gܽØBs‡Ê"9~¥•øiÈ~'ÆþYEûuÌú³5œ_ha>ÉqnB}]íô¸ç&Í-°²Ãåï7¡žQDrêüì“éþÔ$q=op­tïã?»T'+JhL °Žp¥ógÒ™:ªÍÐ7O/ .ÐÏp‚e·®¶¾Í¯'ãÞRœy¬ï˘V …L£*pN"« į‹,À–¥E8U£Oº¼‰4ÀzuçÝŠÔ&0ZÆ×‚–™ß5F,eè[õžCË9s'ÌÑÔÓ“¥:’’Îi99ò†òªlEäZLþìMuQsöÙgïíÔ ÷šYº”8ÈSÓÆÖ– MQÐ^¢djC·k+êk1Ìû°õ;|yç ÿ9,ž}âO]þ%y¶®NE{L«Sõ>SbüutìcA†ƒoíûlc=Ùôi{m†>ù0lÙÏëÒ¥6¼6¬·(*p¿õñ²ïI…2©YªlÙ±¥ÃRмžË`øÞ¼>`½Á}/[ÔQ’ðÙgåS9ÉГO{vf&ccUBÓkTµç˜»˜ †¾-ªfÔ,pϵ¨sâúVAÙuªyt‘äqz8oXð„Hβ'Yp!þì^ÅÌ ÄoñÒ.ŒôG ?óà#¿ùã¹Bvœ®ï«èβ%VQÄl¹Ò®kÿ M…ɧ}¬»ƒÖ¾ÕYcD›ªm6çŒA’ëï‘á{ƒŠûÙŽä©óAŽû=® ¿[ôN‹ªÖå£nîùWùyç’LÀÜ«W?Óc&5öºâà¯fö¿ö¨ÊÅNº™õHY´™6ànù:NÀ:Û¨n?ËvP>uó< †¸ÓâÏ–V.mBmIŒr`wä1­bŽs‘ û¾ö¼§¿³g£SxÔQ’Ö?ÁÃŽÖË‚w^»=¦I}Ñêš“ÙÀÚé4I:÷˜5ì'‘‘Èx ÍäòªåwýïÌÆiÕ;àxV½¦´¼¤™xƒê¯Sx4*]Ó;xQoæÄ{ódŸÃæÂÇ÷°J°ýº`ýΊúU€ãµ æžl÷k8þç°ü>—ÿ[@ö“wï¿¶`¦0½œ¶Ô.ÒÚáû^Ÿ4³Û[ 2¥2=ˆµŸ¦|fºßY]Y*ž‰Ž|¢×ï-9Ë[xÓ,»93É’÷7›=ð˜ß'…éaè›GgÙ¬¼vö¬IÀîrѬg;§¹Ž¨ ¡L‚O6¼öÖÄ\B£°âw |¼mÜÉ}¦·¥Pï®ü&€žO€]űñî¸5ûSÎ]Š‹ûNsí3ïEN}FFîM«&Ììùñ뾆½>‰4¤õµ³bz¶¶‰¦¿{g7[5üµâ g®L«s >aqÇV¾B§¾«×a”ÎuðùœM;ìOÅ‘s¦%•±óæOUÈÇØõZ*óIÌsfýûÁ‘ŸåÇ?ãÎÜ$Öš«/~-9M¯F“ü„Ðá½>žk°~rOø¾\"ÍJ_—!N•˜PÍ ³¾.¹€ž Ê«Ä/ß…Œµ²‡Õ¥êóu9‹œÆÊk¡Ë„øëBÐuKÍ”·uÀ«‚™ :ÙF]8KžÛÜ6}÷½ÞeO'Pnp×uÖ£œ¹+-­qÿ©%¸«zÏìâ™fî×M§›eï$. Í›/Ÿ€»¡ùnm£ê åå¼³ÏîÂk`¬Oç²_5›6ûÞöYg2 ˜ðý*—ý+ýú„˜{è3NýϬŸÀý9 nýÜØú:ñð:"_µ±Î¬i ½î‚ìœ?³Þà^Hm}×-µáõ dÏ`R±Í¾‡ vQMƒþŽ•ì5‚uK£ôáÔ›eß*ü]¶~ß›I5Yß>¢–åLM‹v%I‡«IðÝØŠ ÏU<€iΠ*’4!Èg|j›H…×…e}rÜI¼1ôsKÞ¡Ìr!-ž$3CåÝciÝ[ÏL^sêý*ìá×µ¥")]TVRe®’dØ3Ï[ûçþè w½£î­q4W°Û8„ÏŸWj?…ýø¾—¿þ³ršw²ØYúióipo2ϯ+oú‹w÷çðýnHpÜ›þ ¸·H†5ÞîW‚™fܯ”è­åú÷Í»§¼)ó€B.æmÝ ›¦kkôÿî\zL›QÐb²lwÎuÂŒÛû8ºù†ìaÙ»oµ{R…ïrÿHb¸/À”áJó÷^Rf8{æ~á÷ k˜Þ™ëwËVÀ““ÐÖÉŽ]æ âcÙäö Øiå½LåÇ߬ ûB±·pl3„1Šö6’*tÙá;[6nõùäì#¡é ÷–ÍœÀh!&@ŸÊø–ÙxTW¹1'pßå1•x¥\oå÷Àý5 ;¯øçÃП½³ý×™6Ï##-½ºæÚO˜~æ¾ûŸ¶Ô,;–Ñy›x$z x°»öçy>¥,J]v5üUokËlv~ÎìÀ}ªç;s&juCsTÝíê{É€Dók¸ye-ѸËèg-Þhö½õôÍij¦9øYä´æåà;>.#¶Q<ƒpqmÅß“ûîÁ wÐs‰xÆ„`¥‰=ë“a˜oÄ0Ü+}Vwï•‘²(b ãÞ²î—(æíIÕ~š×2=Šç„ÝÝØÚ©2 uø«¿âÓ—©L3è¯û½™õØ­NàךPß…ï_áR>«¯ÕóŸÙp߈ƒ|ž×þ¬‘?yîë!Çw÷ó–©…1}À÷U2Ì¿ ê~ýÔQ]G^-gY±vÓvÓgÛRçcÒm°q•t÷®YW¡~Ê`N‹jó÷N;. ›ôïV×t¬FG ìB«ÞMF_r—Μéz©^¾¯ÿ­ýȑò£¤oæ;e¾9{U‘g£j‚#yÜ,ܰ¹ýkrͰaÚ[óº³Ú÷ôª:'Ð,kË=ºQ¿90™gÙ‹g5ݼø]’ú ÓµŠFºpÜè·Z½«”¦)píׄïE$7æ,Z:ùÚûj¤'"“×|öEàþDBó¾&^ÿ¤˜éUÇê•3áÞ¨zæ¾O¡K¬Ì9szXØKÏÃ~¼[À'_~ǵgÙN¦µìiñ§íuæÌ,@Ù໕ë”§ÕÀÝâ™)} ãÞÙ\m9m ôi`µì)uN§ÕÕ-4Oü‚’™ýæÊfîû"nNK+ˆÔÒ†Kª€_×÷µ>ÅOÌg. =ቒ„E62yðD7ÜÍnç~Iî;3ËäÀ˜ o.»°»“Ú­yê~VîÅÊi Éø~™eœ} ˜’„FA¬@<‡7>R‰N8{ÒíÜ; ò>OfÇWQ“£}  _É`^ ~øþý°ÈßýŽ¢^Æ7¤2_ö3=°¨¾†Úß šüLó`Ê>i€àpÛ“ÿªª)Œøõžé=½ßçyr'Ýû î£SG<£s|6ÆÐ‰Œ¸»ÏˆÌ0`‚ï³WÓâ–†æépm!ûLÖ»,¸¦ì³ ¬gÃksç@Û— µtÿaß§ùµSá»ÁÂä™pð©deýÖ‡å µ}ºÏ€{„-§ÍÁG°îÌ@kë=ªõýNM²áϸɖдùµ«”àŠ–ÖÙ´QM¦Ø â¹ÌÀ ý³·Î›?~ó—Jq:·#Ðmf´gyZQïSbžIÿ<å1ßÕܽßwòã¯x÷ó“yòèw,{·¥öùÐÀý Ä·*ýZ$3…%1y{¶‡NqÒLiaÌ ß#¡¹×Á·±õŒ•”qÏ1ô~N½>ŸíéxiÍz]º«µë¢:©¦6Je"¤é´¡üZHÆPÝ0ÜœUçÁ£t¬sM¦¯k¹ÉîïDC&‘fòñ3^€žîÕXT;&åMæ²³}€8Ì:|<°[1Lxñì!ÅOjÜs׌TFž>ñÍæÃ$ë%œ}ëæÝ¦ÕðIvŸM«:ýÂÙŸý¸½Þï=?É͉͠üÞËtš6óy²Í«¶×¯ÑæzöÛпÃÞ9ô.±¯€é9”ô¯'&Ö íHåMÒsžÏDcÜš„zòõ§¤é/þb?!iÔ^ lׯ×c€Ú9 µsð3òª¾x/jÙL:Mµ·îÉ3K3Á:b˜ô.×Å¢wxzsaŠÕ2–Ó˜M¯â&¹0ºýâ^þþï—Ò1FÕîdMW«RQÛ›LþÌ‚ãÀwm¦Üˆ€ŒÝÄ•]<Ó¼¸eL܈gÒy ¬.ÓT:Yö¹4ãüè˜Y[ñ™ÈH9ø½ÌÈ5-qi°¢=Á‘ ¸ï„.Å8¹óÀzÿèÓ‚0×Ò—3L]{ë˜w‘Ì3+ê]ÒOô;ýÏEó}þ Äß<]óëW=µ=›ðýzé°­*;|o›òUÚÌ4­*¡ä8§ñ´SkÅ×a¬ËþšŸ™ñÀúþÌO­|‹gzÿÍÜw TÏY¹ŸÔQåšà¾š77/ûN‚;×16(××5¡¥;­†ïY?óæ×5¿š%Ï–€ûìS MºW”C©°žýðxŠgîAÖ¢ƒ÷~“6’µ\›9á5“œym£Àý$´È©Ê‚£hOB|çºÄ]&7¯4Jýpö-I·]ñ÷³é¥³h"zYl½Ió ëOÕ{÷ÊïâÞ')4×Zƒ+lëjp /Oã:¯L¥ï«6>À<ª^:wÞ?Gïdº¿–¬¼›-ó|Ÿ¿r"#þeOß'¶‰½iu&Äg: 9MW)ÁÓ7[šÌ2¦ˆì&½Þ³õLy'7¦•îô”3³£m@ÿìg5‘&’›4ªªnwfÀDØ6¿òÞ»™Õ€²œd·g`Ð x.aÍ»/æ<`](ÉØX…éN;*ÚéÌœ.lêŽÒLݦcµ•ë)WšÙí±¨òW,»W5i-2ô¬oka#ÈQ¬ìæH4ã’U¬1÷*ž5ÍÄ·ÝóL˜éšëZTcNUÝk°P{2îaÇId±ŸÜùuãéÜg÷ŽzŒõ¸•Âþsý9¬ÿ¯âO@ÿ^òÌ+aL¬¥{—ídÖ÷¼ö»dw™õ°ïçÞNn¾sÓ]?;V]ߦÏN}‰Ø&–Ð]eÞY1-ƒv·öÝŸkš½ž‘‘¾7¼í•w}±³Ã5 E}gÃkriZPî%À}ªÞw¥;<}[][ûnÚ k™¢`&Ý«&Áß×V,{=—(Ý‘Ö4p_`;é¡dÀßYd7-ÖUï‰ išMïä™™ÑnФsų?ÕI­iÐoèäÚË4ª¶]5ѳ?5úxgçÝ’¿oìêöÏD,'Ç»?—Ó<_š<óõlÀ× þ×R_šSgÃèsýúë­­›WfóDõþ.+ÿßñ„Ô9ùhZ]?-ì•k™Ï„é·éB¨ëeWAµf=à¾ywùòìµM†BÎL÷½ªÉ¿Zð”ª^ÉuIÖl‡K2<8uð ÍYCÛË6gâ;ÛD¿.¯†‚ÙR_ŽÝ|2wI­QƒŽq1Õ š … ÿÝnEmßl Õ{¸üñV½w‘‘ Èw<…û lj2uèâ²u˜s`ËNggŸÍÂg·ñôdÍ;ée÷À©Ö¸7SÞ¥HÍâ_Å8žñ޽¦ƒ ¿bÙçò>ðñ×dÅ44½ü¯î_çÏ\³ïw½³w\ûûÞü™é~róœQW`}ïR,öÇ›qw@»§Å·íuFLvèdÿu7¡ÞÙXà§iµþ\èßp¿•î ý{=`0W¾$ÙÏÙÛªHfу:²¾óW3jâõ­•Ÿ6ÖŵO; xëè÷Í» Öó¸å1FC.ŸÛºVÊjs?`é6Ô<5ˆŸÆÖu¿CN#XOâ»ÖÕŲ¸wÑ’<=â ¼¶TÍ©mQ¸GIïÀ ûV;t2<ú Ü£qw›¼ºÏ Ý&áØ|üU=Ó$%ÝÆ¡À3 Í“ÖÕûõ×¹ò?Û¥úY äõÒ^ÛÿØÃ{÷çíªŸíí[ãÚ'§Z?®@ö«ñÜä¶£z¿6§î`ý<-8Aœ…Û†qwŸü•c>%1 Á¯ì°ôÚM|S]yntí¶¥ò׬Ÿ³â÷àa—ôÈÊ'[f¦Ó'“¦]õ>·\6¸ç’ŒîÄ›©zO:;‰¤Í´VÞ¨¯pÒ`Ã>[Þ#ÙŒ6Ö°éBêuÓéÛêäËìcº2xI°º0¥µã йÍs;œåJ°Y–’ÙÍpð°nZ=á¾ ³ndÁ§ ›i0ï>m©»Õo>^{éJ»¨¾ëüŒ¤D‹Ü ÿ5pof÷¸ʵ»_Ã÷óñŸ|¿³«^Áwû]’Ïë2¬3öñ.»=°öU£êdŸ`º÷0ƒ#ÛØzÊföâ§pÓ2ÙS1OéÒk>ÓâO°~w–±Éš÷{(ÂuL)N¸ö^¶ŽŸá-ª‰qU“+•24ñè࣒çªÈhJb²´ã"Á‘rðüX&ž¤/½1‘ëטּ Ó“õÞ€h®<¦Á=¹4J®k,¬<˵Môî3aÆRB;Å× îÄ©a2JÒ¿Çÿꯦ˜&æ×Ž˜LìÌ¢Ð7žÜ`tê“&³¾wºÏÉŸ¹÷¾#niˆÿSŠöïZTŸññ‘¾|ߢ1EËqÐòYês˜þ._þ¤jO ).J>®­¥ž|<ær¬é,—ë8H4X=lØ5îpêBöi~Ý0´® ĺ\äu¬'³ÞÃ÷¬ýÔw­,DÍœ§„{kI ¶÷ß0=|yÔoÛˆ™|„EÈK±PàÃ…¯J©u1UF™MÃý©ž‡Ñï?Sq„õ²òërÚ©ðv¬¦jÊãìõ ¨p²-Õ,nB‚øu«ò&t*ׯòg–Üe^l|ô.9jXpç}eF™“.¢:óì¯d3ë–Ö:ÝÙEºÇä5Û=3Ú[§~Ê]äõL¾÷g×éɾïLüµ õ¾né*Iæ†þz–ý5¬=øÏ„ò¯UïOÜß5§v’Ì9Ì;Yö^&+}—Çôyx6­îËÖ; ÍÌRG4ö²•îü¢gžz̯®o1̾OA¿GâÀÀWÏ{¼Ûóœ„eW*³³ï|î͸s%äºÔò¨ å…áã[ïÞa‘g¦Móñ½çVÏGöq¯š¼þgRí/â ï yCê —ã,æ¼kQý©|˜'Bšwk˜®FT@ '+?N~ _OÇLîü ¸'3¾GŸ­nwÆ`ýhÉ!©ýî]®ÔûÜ­¨ÈiÖÖzÐÀî´£!˜ /·€àüéNñ ß~ޤt.$ÄGHã[&û"•‘•çŸËšÐ¹ÁzçÆÜå¸s¹ä]0âÛ$]ÕûúLúY­zo±Àe >ЬËʧP) îsÍ)‰”s¹Ï6®ªÛYp‚·©·3|øÌ{`Ð×ÒÚÀ}Ù^ Žl+j ]vMù•ÍôÆ4Œx†žêäÝ÷5­{Þ÷)xoHý ÈþXθÿ¹[ZßQ½ßGC¾|<å1óŒÚ“…Ú<ºkÙ»ýôþlœ{˜p|f¹4ÈÞójvίiîÓ Û96̃íÆÙ=¶rU›ƒoà~ªá»¶éœhæÞÊ :OÆöh®é[îùCÓß#ƒ X—q?ÞðÎØç”Ð,˜NÎ @\àNö×߉T¿®â¬oàÞéï“•Ïz ŠŽÖ»dH`dä™ìn Íºã¤øI8>KH¡1ðÐ!µ§Ü[»ŸU¾6Khµì!í­ìü3LCͽ¹4³Wµí§ÓWPþ™õ)ÿ ûnEÔÓç†ç–õçîm$ý M\Az‡.¦?¾HAžhПåwC?kB}5Åpõ¶ïc"\&¸|Áã¾÷õüîw@:ëëÞÓ9Ù;ŽúY=÷’Ó¬íÖ$לœjúþÐ|!Ð3åT›%[)ÑLž‰J~ýNˆ_>> ¬IÙµò½OóbuÁÃ÷ïêöÙØ ”Ü‹™äéSÞÄGéQsù­•ÇH;Þ|9 >ü­dÔ¬€Èîg½âï9/"J‘ƒ_· >ÿæãۜڠ\6}Ýl® |ÖpcËÖ c)Ž4ßßfY͵yÌ1sá>íª‚xÒñ£°ï£:—Ý.ygÆÓwŸÃ6­Þ¥Ê\×*½ÊùîŒö¯rN~R×þ}–ýûšø?—Ì™«”÷ÙË»osæ²?Mp?ÓÙ¯¶ÙŸ{'˜™¦Õl+畨ÆßÅ9¸–ë´êýÜgïçÌkwÿ{Öû9ÛUýey4fÉw:ý´U½cm}ËiÏ7Ú²åz"`çQ5¸>~÷¹ïIþªº½9øDL^øNÄ/8®i5¶TK-ï¤3àY öVÕð¡“úžÒ1ç¢Ñ̯…¾/*™è âw6|gº§o51ÍÑÁ›6Ó‰ò‹¨s†\µýÚÛ:¾©6¡úxmë±ñ.x®y5ø¡|­‚º6³:›A¹ÕwRÛ¿#­YÇÏùÃ;zZ)õ¿¾¯¹±_HeúÏ ˜>ƒõŸ oÞ»(ŠX?•§ÏZ'yW/­Òk3Ä.ÂYœö‚rgÖéµ>^8ï äU ¯iu&À$cþ¯ÿºy©u¬˜ÿÇÿ8‡ îÕ{ÀzÒ`¢’Ÿ¶Tyz´}-†9ûY§ÔGÕ»%J–7íÏjÆ]èî\®=»°ïî¿Å3=0h¡‘•×ëò:{b%Y&…F¡N²äÄôÉ%z] ‹Çôi7À·[Z¹½5ðm}g¯ôwd$êóÜ’¹­šò¾n?ÍÓ÷’Á¡GËco`Ö¯O~æÄG£ß¦Xuí¹aŸ°»oíWàûŽM¿Ë–Ù¹öiR¼¶0îºö능Ÿƒì¯õèßaÜ¿å ˆÿ~Läü.vÁÌÜ÷¨Ç“k¿‚ïûuš¤gªI,ú)-j`=aô‘g¬j¸psO†éa@›Dí+¸Û?sbSºã»ínÔê„Õÿ×j ¾×šqϼ›àž5¾k’ݸ§›¢0Üg3îW}´±®2‰Õ•½%ÑKÁL$4€xöÙM«ÓºŠ]<Ú÷µ­ý©fÀkNefµå1gXyôîè×§$F®=FXè-³eºhÉ=(lMä¥~8"%`ë“NÓvU0g&ß—í­ÓüÚ’\†/«ðñ:ÌÑü{Øñ¯€û=g>÷}žÅWi3Oàûû€þU@äËLsÀs)Ëg©O’j¾–ÁÈX÷LÂ×£`ñu0>?Q„ïIqî¾€ÀwúVÉOÕbÛú´zØ–ÊÔ¡?³ μönTíi¯@yÊ’ûݘªîÇÚÒƒ®mÒÛ>£!s$LkëÚá@p8€fÓãzDAÙ›<:—×0±Þb¦¬iCíncõ2kÚ€G¥¹–½i¥à©­ÄGÒ“šÔš–Á(YY·¡ÖÍO ýìC]ÛFfÃ-–[s3±„ËÙ3ïð 's¥¼gÿfѬË4àv1Þl £‹o®Ì…ͧ^g±ßiÙO¿kÜ_AöSÝþsaŽ¿²ÿ×è[ý*gæJ0sÜÃÇߟ9Wœ9ÎE¾"(?aú._™p¹“azM@íÙŠ°ëÑÝ[fâúè#dØÑƒH¦u5¬ôNjï’¦™fÓL<ï?Í©rÓ0½•ýÞO(?“db|ï´x†a¼zq¶ïÈÈ.‡êV¶gK@¹²™µdŸ­kW ”ǤÏ<íú kf6üÚGÄ“\%áÚ5§vÚ ƒ¾ÁΜññúÿ^Ï0ͧ¡Tc­×r*Ë>K[˜*¬'-^Î^o&L8{géí^MÇjgMžYwÑE Iz’dئóÝÜ=~í°×5”Êož›YŸ oÚº*„B¨‚Ã-™ñ_éÚ¿ßú/×wgwÐÑ«z¬ò:Òñ³¸Æó ßM…ÿÊœÊݬáÓaù·ùÅð3àqS¾†éO¾Ú+{k3Öm‡=õñÀY¸Té»n¾óÝ£tßm¦ÙrÏqÏ–ˆsäæ—>º5îþYfµéÑÇÏ¶×ØRcÃUÍß >k¨u2VR9P’àgÊû®SŸ‘¯ú Ö÷Ç鼜™ß'»çÆ\3î§!õ}øþS†Ô×öÓÿÀýdÜïsf¸ŸI2¸Ï¤öÙ›^v]×n›n&þ5³~þõÔ»Ÿa‘ñrÿ×|wAÒ•n>@¼-¤gàc0¯€{ޤk•€× *î{ ,g¦ º•OüSÞä•‚×å:ÖÂe3 ަ å“ïë;B@¸Öóøžk/×>"—0К Ü#¤1a&%MBùlôŠjÖsy–­«¹ËD%/Ø ^6¹È‚é Vù+3Ì^‹©ùM· ƒçYÞ»#}A•ÐÀ]È®iÕÎm‘Ö0Â.ÀýL…ÏáþÌ¿SO¨ý]ÍzæÆ\'Çk×^ׇ;ðÍ`©­«ïé,^Cÿ/õî_ÇA>Ï{ù¾æÝ¦{Xüj@r¿‚|ÞÉú.ï~uü¯Í¬@+àP85V8åñÙáÚÆÖ]èÒ ¬»E•áù6Í µ»Kµ5ôêàÍh‡·€ ŽHÆíyGæÏÌ^Õ\PbõâÄOöKKY”Ðt!0Ê©%ŠÆð¯œáZ¯´¨3gœ*Ç&> H‡€Ý÷–¾LÕ{0Ü„P‹vÎ [9:a}Kh¿Ö©ç â…éaß•Lâo:½ÂijT<³^ñ+[j dŸaw1ޝŸœÍ×þ$dÿŽ*ýWÀý?w©ÌõŒÇ«ÈûAÚ ÝyOEûɸ·a´¹ö½i¦­[L†€¤½d¹d˜:÷SCv»†ƒoüÓ2ô³h)†Ú]6“2©¼£[ï¹~'äœ6V¤)@Ïã¨ÕçP¡¥Pý ¹g8ø ƒ:°²Y|!~æÕ¾¯«¨‚™äÕÀ¦ó×.ÂK=ÓzÖZÊ»/¬o3+âuðë1¢šÿ1‹»®ò×êvîÍÍ“‡Õœ™4Æ`"»bÑn21>2À@Ï0£uó çŸÏ(•é~Öpðþ5ÅLëÙмc%;y&Œ²[6æé„ïúëʤf÷¯‚#•û*FºêÂÀæ?'-þZ‹ÿˆq Ž ÙÚ g{{ž-ónüùVß±ºfä÷ÚJûÄü¤øéÖ_üá€0nZhÝ’ ß1”sz¥“Ý牀~•'£è…ë_ÿu[$…¿†E®ñ«y5–Uíwe0€ìZ”ßÀ£7CßÀ½ žå­•`Gž«V.$`Ç(æ›#GÓLŒ=©\¦"ÙY4V÷üVË(‡¾kZmö½£yLÂÉÍ3§Ä–]ÔÊÂw F,ªüH ì`?jñÓ«ÚÀÝÙ|³þÚXI8x€;ûwØ© €æLÚ>Uì_÷ž~•öÝp0œîµTæ'RšÕÇÿd^Ïô.pÿ.Äó¬EuªÛŸ0î§®}Â÷fß÷R¤;@?¹ó@ÇÐ7ÜÉ*­t¥}ß3'Xï<3ׯÙ}ÖŸ@ÿ<æH†fR{ó÷<Þ{B;†2ü7ÛwéÒ ²ì¤Ç”åuÛÚ€=gÆ-•ÿ%UƾUSe\Ó®ÉàZp¼-ª$ÒDéÞ}«pçÈ¡r ¡¹®}‰•”‰_ y&¾G`£lr=/##­ÿk½{–l‰P6DU·±ªÒîÞVޤöé~ÒÕÚ}«%yϯ«eÊ;tá¹Svˆ¿ƒÔ9xµ¯ãYŸçŸþtC9›\ßaîŸW/½ÓÞzÙIÙ¿×ªÜæ¸¿ÜO`íÎ÷å7Ÿ¥¿yÎÿ•±`žŽW™3X ×_gÇ>Î(I´Ú\î¹™"wõصÉãzyUä´ÃúüU{(U7¯^?Ø3ß×m¦/fæÌš'óhѹ§†)‰ï2ßräá<:ÉÅa1â˜(»^Ÿ6k¸pgb4æÑµTÊ%8EQ­Åçב£ú›¿iˆÜñ— xÕ,àÎáÏ:óষ} þ»•î ܹ¤j0]{îǰþ@ŸL-¯¨‰5B}rÖ18q- ÿçN…»S3ß±ì¯aß;é1EKŸqí¿¶’éyºÎלú ÙŸÁôkßÂ]öÿ•õ¹å1)ãáššË"·˜„*z‹íµTèäã›kžvÒÝé!¿ÞÌtb.OÑÎÉÇû{Ÿi6>÷dîï´û¼~ ‰æâ”Öì¬|³émH=wTe¿G™õ}À}Ζ2áíaḚ́ºöÄV¸åû­¹ïîUí=j¬dògÚØÊ>xôl­ ä\|¾ë¢÷¬…û÷¯µïƒHíÙ^{7³ìºB—$¼umÓñÎ0K <2I2<6O&ôÙ©eoÖ\~‚[¸ð=qW7Ú +•y_êt-§ìÐ?mx}.±~þÜõ%Žó¥Æý9 ÷'(?ä ÞOžð£ÖüŒ;§Æþü“yGÏ$ÇûÔR"#µHžZö+6‹Ð?£äÝ®*ó ¬«!A’Ý#k¸G0³síÔàîJ&öÍÝÞÕ9eÿìIe^߈aŽ:Ã_ÇY’™Â_ª]Ϥ÷ “º'•¥æÑuáî› ¯ÛreEÕºàeü¾ÔÒÊ¡ƒÀxÝɦ·ñ nŒmŒr‹|¥ÕóÜœ|Þ¨Í-¬¦Í4pïõ²øi`e0À1Ëÿqs=#ï ÚÞ~zxf´¿î?—$ó\‚ò¿þç¾<å1×Ìúuàã}îþÝ™0EV×Þ‰«Îݽ[ ¸Þœ»èEV»sfR Ö¡«ÍF_ÅDîkš?Uégék8Ï[¢3ÕíšËˆŸb›Îu™GØ,û®¶ïþW†\at³ìRœ³uÕ†ÑæþO+mL·½¾÷{_ 3Übow<¿ÏN‚OI“93ÙÆG¾«›_ƒ7Ö¸^øƽSh0­&[¦á8WÑ®mêç¶Tfróý–ÖPÌ4»Táà½ÿ*b¡5V×9¿še2àÕ½Opûg³´`€ø4§vr‹œzXù;ïß“º%^±SÑ~>Vò]ÿœäÝ—5,¹Ö¸Gæñ5•¦2™à÷-­0ÄšW¬úÙ\š{¨í»¦zièÏ?âWÙ2_±þQpŽ¿ææn°˜;XO_lçÆÈ[ÿîwhÿüÏ{1ÖèæÝϙ߀–¬tcg°dŒ®ñ´'×:]~O€iiMgÛ Ó“V» $pP¼Àwx}at—:E½ýÇ?r˜–7Óœj›`ëI|ç’º†›¸@˜7 .(G¢Ã:í@ÉÁ¼¬?ÇÆP`Ä »-­­e?-ªNý“ɬGȲàµÀtyÔêI‰a›Ïô fŠŽ¢ÑìtÙ±t¦¼mE‰ì ¯YÞ¯ÁúFCê÷Uÿ|Ü_Éf^3ëtÜ îI2 ÙÏ|÷ÄÚ¾û@ÚT=3d8Kš›•?¡ywš (ãñh†»_e>Þ3jº(ª?SrsæÕ\0uk)Ø–õpaŸ7hþ{ol|ÏÆÖŽÏÉ™.¿Cy¿Å–ØÌº>ßuü°ÚˆaÖmcmV~êã“ßfÖômf5yàNÙÓúk_±%z‡=—áà{‰uµË›:…¡ËÌ}ïÇØ.áÝ“H£lF nlC¼aÉy‹,§ÝM²ìi]µÑ% >Êö¾§Ï,öS`ÓÛÜø;–Ý5¯xt²_œ‰Z÷²Ó=ø]qËsröë¶ÔÇHõ3©L—¥¢Vß²IîüLÿ:ìòÝ*Ú÷Yü'²™“×ÔO›#ï´xó×Ì5Å%p|žÖ-˜ (çi[[‹gZï¡KKeŒ£Ü ¸aëÛÖ™-O®½¾ÁŽòúˆRR«ÄþÑ‹£yÜêsŽÄŽÕpóÜ*4wî€!ÉîlAËÛ$h’5Jh¸°†ƒïšÎ¢±)v}[cÑÄ£¶oKk?îz!ÈÙcN( a‘s0AŽÛ¯¡#Ãl…=ñ´ Éóy}ÊÝ·Ú‰V!·ÈáuªÌ+û5p¿ëÿ¤2ï2úÿ9¼þ}†ÌüŽî”ëgôç æ ¬_¯ç·Üäì¿yeÙ÷‹\Ëfµ»¨·oi ü+¼2ïk²Ú{BË90ØAð¹ÃôëͲ'œñ ПÄW©óê_1âáׯ³äç‘·˜§÷3ÓfÒüÊðÙC&¶A hÍÓn–•kÉ+Wò»ÄÙèBàxKh`Ó1­®5]áÄ’Ú@ötw(¿!>= 3mfÜC—tþŒÛ‡k‡àvw‘SZPZõ.ðMyS@|à>uNÛ²§)Œ™|¼}«Ó5× ¼ß·ÈÁß7›¶ºý.=fnOäåÐ9Ô5¼Ëèÿ‹êØ’¢S?Ÿ<ÍqgÚC¯UŸ·«þVöÓOôñߑǻ¯Â ÁXFUøpÿ<—eW ÁúìY\ßò ¸}ºÌ­­õd{?‘½áµ…1]Õ„!˜ÇQÒû×ñ-ExÊÁßqí¯tíw`ý+à~¦5×þ+´ò¿Š­¿ÏiÁŒLmsêWüL€ ¤nƒiCö-êè rSVz›sÏYvÐ! ²á~ EîÚUâO.<‡ ²íOå“á1Ǽ§ÅßåÉ\Yow}æÞt~ËŒ€ àž Q{ë+³Ûp>Ó;3žýwÍÜ2Z|à»z÷uý’Y¿ÊŸq á³زA<Ðžíµ®.i«L|@|K+±K¹óî-¡Q Ï_;–`í¹{X­]kfy¢šuÿ²° gUD/Üé¤ÓˆYâ9¹ù€~úa‘€Î=ÚÐ s­»ê=^A“åçs×V8s•<ÑK'Æôã+‘ð5(Gm¬eq'Çð“6Óç0ý-ÏÍ›î{ч.9>Kpÿšõÿ¬™ÕÅŸáÎßYîÆÜÏ ü3ÅÕש2sbÈ“~ÁM&õ°{îÜw¸ª„`M›ij›ÂÜÓWª)“õÀPnB@á(Ý}TÏ %†Ô4ÀZù³Ûµ…=ÓVÛ–V¶1Îë‚æ.WB<ƒÄe‚xŽCÑ‚§fÅxñdâÕA.Ö†½)ªñ)÷ŸNV!»À=¯f½9&©“oîL|bg"Mtç'|i~ˆ3³5v½¬Ì>$F“#á“켚^¶\§a×¾Ÿyí§®ýkàþë“d¾럧Êü¹(ã_G@^ëÝO‘Ì —{}÷ìqÞ΄™Ì,ͼö¸[!Ý&Ñ®aš3K@Ö¤¦ðN9ëøë C wÞìr3ô­\ŸyPø»H&ó=0hp¼kúgÀån?=ƒ)O¦ Ì~,7Úç,WêaFãÛŠzBùNç“ç³î¾ç>@üU"M–~s¦f­™Áˆd8*™øô]fsËý½Ù[ÝÞ¢\jðä-Aì$x!; }”ë|Z\ýº½ëœ¢ƒ_÷#ôîÌâ¦uU5|i„ã;ol–Ç0îrðÜ…“-£œÂŒ;o¬°&î¯Ï¯Ã"wéKøòÀ÷†í¯N‡9N!ÍŒ€¼oʳ´vjMïó=¦üµ_ô3ÐøóÕ¯Ñã«–Ó¯—_¥¯¼[ÃôYŽûü°4OÆ:Oè¿#¤¹: :~1 ûûc¾«×šàÜùµê«ó×¹Äp9 üåÄÆäJ‰’‰1˜Q&¾ )—¶n3írf4|JhÖpÁ‘}x÷Tÿ¸ÞÑ^&奠 µ{Ÿ+ýpúëî\ìüñÖ4µ»ÎÉÒu9e©(×ï¾.õÈ]Â…¨¿çÓh‹m‹Lö‚'¶ä¿¬v(›È¾^‘ãÇnÅ­¨SeäÑ›Œ®·E2guCÿΆ¸Ë¾¯wÍ Œ‰,[1ߦ؆ï;d¿îÏ û¯wÿ~gêo§ƒÿ ¸%’iY×¹tî¥ÓŠÒÐs5í—¸‚ Í“_Þ÷óÌoàÎ_ÜÍ6Ù3§ý”_¬|€ò Ü¡–:íºù“GoÍ÷Ï´$f¯šša”¸Oýº³€ÝžØùr{7¹î¡Ã~ÚœÊú)qY»uU)]Â%ëQ±»äJ¦øÎ·Ö6ßÞž-•ß$ý½9xøu†ðî< °@÷lF>êù¾”80h¡N›t€å¥Šw:õîa¸Ãs«DgPÁe­ÄQ{+4ÙI…G<ÃEÜÄ÷ÄD¶5Ö!Íú4˜$M®‹ªñ–М°˜#i…e µ—nQ\Z L›ÕšAT6“úqG÷†ã½äØÜ‘ú„ƒçóìzûöS ãà~'˜ùó°Ÿ~Ç¢únîûo©nÇœz%S‰dëÉô6gvû9w$Äo€ˆ|¥¡þÊ8ËøÞ©·ýí„?nYZ¿J¯ïæã™³›J»ë`šPwãæi'Ýùòi|‡#ïÌõYS£­C‘„Wöòg&}à{ŽÐù„.W:¡ÿÌ Zœ}Ë`:[¦w"éR]°Èøn‘Œ²™°òÚOÓ{0Ð2în©hgå»G×nÖ{ä1–4!¶Šö½ÙwÕðëy°ï*à÷ôw€¾²¹ö9q·U¹–$øVº¸ìÚ\;æœ×@#•ˆ±«&£¹öÓ23 ÐßE2{ï©ì8T3þ èŸÊøWÛ¼^rÿD÷ ×»~.ùÀœúÓ2’È_PÌ­ÿ>äí)ѯôóI‡_‘Eódçdâ§µL¿<|eȸ/^}J{¦{Ì©LŽ­14?’S%¿‰y/É\?çõn|dŒ­¤ L3ÐÛÙåà;’Fð­ðF¦`U­K´ ©¼W<3/[)êd˜ÎNéí³ ªfÑ´EÈnFþ*›²>íø‡Å½4—Ïë2Øp2”5©ÅfhÔìu÷@3œàÃ͉eߌ'_ØàþZlÓÆV÷iÜäz”4÷$Ç3°– ²€ïü:Л€[GÒLüu‚û5¬?cÿü ©¿ èÿ-€{Úѵ÷ò.1æƸÌYtúÉ”gûöoø[PÑlHÇ m÷Œ—¶ú×°¶½7׬ßB[?ج5òØì1ºêзl&¡Š3Çývœ ©­õÏ/}}þ°Ñ;àžƒ=9¾¡v'ÕÄ;³çgJ̾7‡Iû>ûݱ쳨A?g@‡rvZ|ƒ{“g–/H°Þñ‘ÑÊwNü©’oVžÐIå4i"’á:@W@¸ˆ•†ãjßÊ{½ ^Õ»ñ‘v˜$n¸å1º¹H|ß«"•I©STïÎHkx…äšð=q“»95‰ï¶¾tRÌý5¸+Ïþ¹Ç9ÓÞ-­-ñmYΧÙí¯Ì²ïwQœ'¼»§a‘_w>Ö¯cÞÍyýrÅÁ3aøxO<ó} þ}à~¯sâÇÀÞSÕë!Š'=0ŽùŽ'“2»Pç\2uåOÑd˜®Hhy@v •Z}nL4ÜêËa—”]Ã4ÛR‰tʯûSåãg<¬üÓ\^£¿ŸÛØ»ªz×eKõ÷‚øîrvÔµÞ:§d±娭®Ýá:;_™U%=±’®_{‰x†Ù†´œR8¥ôîzÒp̬‰,½…¯¿‘[éîä~Jm¼q<ËöDšYöÔ¦ÕæÝ{ýL…ß³hžU/=1ªþçøwóažô³þZ°þšqp¿ŽõœŒ{ª¸€µaz>ˆïeŸó¯lŸ4$öã›ì”>£ÎßB6É~¯G=×Ä/b&>e¨Ü¿-¡ úyn"OóëY½Ôâ™+hÖ´ ¦õù¬–âaåÙ[àÚ[³PvnÞ=d€ÑÿuNЙß*|…7³– ~:R~l®ÈiÌeÛwÚ ëyÜü=ÅL&Á#›!†¾í=ÆL÷G*Œ¬Ó½X¿öwFIÄ;g†Çq÷ußL ¤÷;8ø¶¥.¯ØB+Yïn)p'&2ëF›ò˜6¤ÂÊ%Ù™îÓ±¦J`9÷ ³ç…\3ô?+haÀ`‰kŸÐûÐÿ*ð9ýïýHW3TŸ f^ßg€žé¤4‰þ” åu¾Í»@ü;âÞæ>Øñ.ÿ«ýÌb‚¯O„HªGãkEã.€îðÇÓ$Ú?éY®ÔuNý"«ÝŒ8p¿5sÙ[ÃwÇíîfúg1®ùXl9’6àv–{°÷ê ÉY8Þ~‰ ý{è¨1Z!ÙÌu‰°¤ùà™ c× KÎ>Üé½Ì|T^{¶Šcãwpg ÜpW­¿Áî|½’Ê\ƒø)A¹Ê{ ˆìnQ ù–ûóìfÖNsÕ]¸ßÌú åOËNÂé >7®iF»ù.øvj ÜIYK@y3ë-ªi¿uðf¦¥uíß 'Jý@78rm£>˜Ø[—Ì?UG&s¦ ›ì^É3 /9ÿCô(¿îÇÚÕѱžÛâz©êÍ—Ï&Ô˜Y[éîšäÉd0ÐeaÍÛ®ÚRœ T¢[‡tZdºÉÕ#×öà|€»‘-°Yª½YóîœeÌ©BùuáÔÆ ïâ>[­ 7·ÀÞ§û |‡qáYmWõßy퀛¾É;„ÚÍ;¶/™Öò‚é,gg<T4pŸ0ë®0½V·uõŽß½ªdúTBó™Qõ5Sþ®Áô9dÿ.¬?%1¯’dN®½…1æµgM—û<9z~æè}nœBš3e} ®:ñ}f×ÄØ:óÎ׫4ï5ü¦Îy*4Ž6*L¶^þ¾=*¾VW›@ï33êñTº³ôvêÎsߥãw¡R[`üDÒvμ®^êò¦ÉÊçõ †TB’Ù<öjÅ÷ÂЋaR·@œÜ˜€õ»Ç ý,@<Ð?ü‚à Idd ›Œ‰\`>½Ý}áÖžÖ;à¯UÑ)tpd÷ª¦½{É6×¹Ä=ByŒÂËdÎ@Á¾¯{Y<ÿû‘¡šøÕ@H™õÞ÷夼G¿[N;!^xïö*x|mcíÌøÏí×Ò徯 R}®÷ÏÜ_ѵ Õ ¬~JeöpûO5îO*œÎõœFÀŽw€ïWÃ~wm–ý^ÇêW²Ï þÏÆ uqRO%ÝÄV2½ê'ëUA|§µtI °UÈ;·Ë>e6SßÀší©@s£*Ï´xøõ¹Ÿ9„ˆÙwBÍǘ DÓQémø§ðm< ;Ë*­Ë· Å¿ÿû¾áÉÓ¯¿jè4nÒý •?“dÌuYÐÜlõ.áÕ—˜F0νk˜ÚÌš©•Áagck˜Nn¬Í›^ñîO è÷\ù¹=ˆ}]ÖÓ||ó¾¯X¯%4ÿy²™'û|w›Ÿ„ï“_ŸÂ$>ÛSÑÞŸ|ƒàæUÏDÿ¤z÷ž‡¹.³å@®:Ûtš Hëwå´é"m*í4ñî&Ÿ`<Ý!;Ì´cޤ¥2á€Uý~3´\:hoI*‡øÿÎbï×:5ëSkŽ hÒt:Í©˜ç=ÞÃñ€r¥5»J~7ʇMÏ'ÌkE…oaÓÉܳäóiRY$4|†ëªùÏÿ̧°†ÿ‚s}TÓÖ=y†càY|Sðî–ñ­¿ØºjHîbܹzÐ×3HFçìåšÌz >¬¼¾ uŽif…­O1“)4t†,Ü¥%”ÙaÄ3tš$©lêãד2üàHrÀ×EZîÀïc¦¾Áz—45›ÞPþ*òJˆr]ÞÖÿ'Ä3ßä<}î·Ì©?eÖìäö©¸'èS>Ûgc!Íô¢vRÙ÷æ¸ yƒø@s”—´±v ¥ÚǾ@·JrqfEèNÓ§œfSŒ¼ϬÇÈfn Ž ïÇ GÎpÉpÿüÏIðX7×ÝÆz2”gåSó¦çšŽŒœqQB2®ã#'?è÷"#èåûíª?©nÚŠzBös¸¥²Í¾ýêì»@é1t‹jÂ\áÎ}•4Oó7ãn{ëÚÊàH ›äÚ$ÈÇC¨pæQÛǰÁ¦U·çh ’›Ö» ÓÓ´ÚŒ{sð ïPìü§–1o¬uÁ}Shñ°Ôͦ õäÝâÍv릞Ï?•ë³ßý¬_ý¹l4ñWLüÕ~îòa>³¨žtóÁâ_³Â¿ÂÊyµ=Ç4W=ëÏa÷÷¡ùÿw‚&Ÿ´¢r²Ûûu?mÝ1vWOð\¿O*]=+¼ø ‹L ò4 4L?¹ÿÈ`„Ý€~.š€Që³i5ðv¬ ©U½gr06S :Ö0µ]5М璒+ï,v†ZX‘²8Yiö‹úż…Ýni7ªŠy¹¶1=€K3úÈæïåݽý;UmD6ЉoÙLksôô4ý„ì{¦»¬[W8qOˆä\žæ¿W9!;Œ³çµ!QXÕæÔ•mœ@ó+àþ[U2}_ló[@ö+Eû„ì-dº3¡ÎäõÖ<çL`ËN¡9¥2 ÓÛ´Úu`F‘®_g¾ßõ[ínS?«‹vÕ{2Êý­µÍ”½5@ç¨`ÇI2]ÛÕ{—©q €Q,)\Séî™Æ ¾+àï*™öÊ+õ|‡?Öw¦ûUü]ëjg½›¼ÞUM¤îìúøY»µçØt®À}]/ºÎ ÀÝÖÕžÓpMŽ¡Ùwa}rlZ1¯öÝúu^®5¦Íë×’5ŠjÊ`Q û®Ò 1‘æ›™?Ó¢ÍE3fÝ`ǵ4-­e3k+Ÿ•43ï•(ãcfíTóÜ+áøùÅÅiÖÅL!÷»¤¶w>Lg®úò)/þêYð÷;-û^ufðÏSå(é¯ùà×öÍÏà/èr"ïë»ÔýgRä?ƒÑ¯{XŸ™n_[{?“å<7³þtyÓÝõ•zlo-Ýå1{–|~ºûþ;£¦M«ô¿’›|ͦ€òù,t€ëfÉå U:b¡Vº7/®§>â™d?÷Òta“ûª]ÕhH"QÀ‡g:•%Û¬×ûÓŸP4:ͺ0ðñ€~½Ó÷‹SÙIƲ™µOnÂt´Àµ<›M»R•mbõg]‚ÓÁySíc¢`®3=x•è•_—Ògû0ôëØ:,Ò*Ÿ@ÉÄJž¼{@üO÷ªþ,4’9ó“Pþ®n)"™³PéŒ}l»33;ËÞ]­çîЙ•´óë{òÌ‚ËÙò QõlÏ~<÷º4°µ ¬³‘”ßC`· æ¸ø}uâ :ìZ¬ômNm±M«õlr­®ë¯f™‡‰Ÿa‹³g%“æÔ ŸfåS`z—L…S £Õ§Péñ-õAŠ39û‘Ÿ¹õwŠùVÆK7$%Fckd0í40å§¹üô˶¯ÛÇÉpecÍY!מŽUm¬ú9„òoœ†ÖaVf=¼» øäÌĮꚎ˜L†Ìªj 4g}"´®òºvœïÂ'º#Öì yèEþ¥œqZT•;· ´™ïOzb£¿Ê‡Qúó.ßÿ¾æu@ä`Üß·iþÃÍWî¯H°ù~±Ô\³³Â­kgøq%úÄ´úY‘ÓÏv¯ºäÇùš›¿ªvBš5ü ͧîü:3>R¥2¸%:Ò±“gbrU cnŒ°¾Í¦\^Á×ň!A×BM &T-­uÌ“i‡ÛH˜c_4‘µ$Í}üÇ?Nîœ[/½6IªÖ#ïAlíQ}gúåÔÃD˨%.2ógd ¬Ÿ™îB™]¯ÜÜßì÷Ô‘ ²Õʧ;ó.IæLþVxÃMíZ?å4DUfq/žù|ÿ~sêgÛÿá×é1ç·³—çìŒûõLKK°æ,PfŠ8«ÏÀÓöB°ŸíøÔ3~´AÿUñSÒo Hm&>’Înoþ™$ÃoŠÇ ?诚xmi Z 3Í&Ò>±f [ùݱ’{•’¡9PÙYù¸÷|ÅÔÓ÷àgï[X÷æLj¿›CØM·³u5DFƒouí{L¤ „’õîlÀÚ'çk[x•T­×W ë´±ÆÀ*û¾Ö·êÇm]5'>Œ{RÞñÞÒÀ ‰åŒ0ËuOi(ŸàHß›}7¿%Ðf½³cÛ°þ…3ð}ñ+n«ùîV3'+ꮉ„¦å4¯ÀôùƒìWø‡Œ|‰fë¥>îׯ¸§;Þ`¼ëJØ'²~áÏ@³ÿ"¹²xþGnå· ð¦œÊ¿*2ò§ß5ï^§„Þ«¦r>ƒò-Yyµ¥µJŒìß95÷fÖÎtïNÓ¹M?ž|ÇG*bq``1“uÍ Ù[õކזÓ8E¸ ¯°~-Uø%+&I2‘Ö°†ìš6e(Ÿ‹£ü‚ïÜ€àTئ5ñV)1UJb~ª+,³jWxwnNþF㎂“}¢—•qÕµ³hœˆ_ @Þž?ÕÉ{îõÙÀå˜q'p‡—mVïš/ïÔí=aF†õ*µfWHŸË{ Í÷’gžËZ¾_«ô3ðý„ì'p_ï¤2_Á÷œ3§)yBö]¾„êûém¦û"fèéZÁò‡„F÷:gЈïúï°ªëÙå%BÕœù2èÑÁ·÷£ â,µ9®-;U8Þ||3ñg| ú¹3'¾'­qOì㌘Œa·!>Ûó]ð;nW@§Ù´(ª]™ÔGÕC‹ü÷1wæL fZBÃc…IvWúBÄml©Ša’Á¯T&ò˜†þ½äMŽ'V²ý QÀóØÌxå4k¹Šùxwaà»ç-Bš¸ó¸ÏÙÞNͬwÓ\ i²{#%¦1¶j9U0#wkè0‚#ñÝAºaŠxÆöeO‚û|¿8ékpsp 6âU¾†ì-êõ_%Á·U÷Ë=cÜŸ=_‡<~Æ‘?×µõ*œ.0Ÿ¿JÇÿ›ÎO%¹¡s.@)ŸšÓCa ûT°Ò(@ü«øH€ìµA¹G±óU^ ux/Ž’aè¾ç ª>P>[žqNÉ®‰ä¦«—äÔÇ̓ǖö]Þ ¿~‚ü<Ñ—wáðež—H_Âî›$Ãw ´…ÿž9ëm3]kÌß]À ·Uuêînþ]g@F7°r BÙÞºT½ÚR“àn0™¯hLØ9«dÂö¤ZÆÐÀ½s¦»ÎfB·üUñÌ.¡q¹¯W–Ó‘‚-³‰R¹ÙÓŽù{ ÜO•öUµÓÏ i¾¿ýoÑú4©}¦ÁÄ^|v£žVÔæ§g ïÜ7îÞ=‰üj®d*9Ãù®3såo! ÄúSÿ–ŠuòIóÊV  Ð3 t_ÞŸ@Ë3Ú Þà=ö»óã3mm}ØýfŽ;×å” tjûÌŸ ž³gÚL蓟VÔŽt È>õîîñOÐð]€ÞŸë÷ù.øü×Í»³ä˜[<3 yfž¤SÞÏxÁ Ÿ£BTc"™IðšV¹_ÀÊs†;mkä4ÆG"ãL÷ª¦U@|¬¨jÖÁ£‰_ë-l¢w|ᮬ¡Âˆ#i1Ì®eoñÌBZ]Í«I¾»0º§wP8õWÀýýô÷¯»gàºvMô½/q˜ÀU(ôõ£T™'6Ð×Pþ‰bþ]¹ËóÁë¿>©mú ²¯Ó÷¿ý7~~Oà{gÏý ·~ »Ã…eƒøéþ°; )?.$%Eß™6ÒĹ‹jÎ%ùÞµ¶~¶¯%C&€>À M0ö¤ úìÐ[r¤eñÚtÔ¸›0†~öªªn÷É_O;pQüâ*à×s5¶Ââ/°îÅ7«­ß†~*ìaqÈ4à|îâÉ7Ês“èS37ˆ‰DG›SnX­q|OÞs8W]CùˆdÖ¯"Y6 oiMCùsM/ï@<€©³kfüOÀ÷ïdÆÿ¯{¥k×z¦Ä´àäµ?á\¶¤ÄT–©Ÿêv­ØPÖãÖ¯s$Í>¶¦á{¤2žÛ=ä˜sGŠp†[N”¬ë]ÿ=} ;w¼yôV±Ÿ=¬ý¸E5v¸yBO~‰FUbôŒ¥;Vù}u€ã^ä”áJ’ÚÙÃ,{êwmgª »e9Í—³Ÿ†æso Ü“0sn3ƒ#÷„øŽ³Ü:×y°`:C 8‚4ª² þûë¬pZÏ5'žÁÌúÚ¿ËõºKø8…4æ‰Ù½jÎk| 7¿†]ÌXïÀGÖ å‘t®íåÝ×Rs*R¡¹ >º)$+™RÌ$•¶ž—ÀÈô½LÈÆDÑàÞû{ C¯áøµ®ä×´«f°÷¤^qç_À$ë3ßÞ¾»¾Q}. ¹‚ÔŒ™XùUýO„<¦#ö9_~î™ø.!þ§ÚU÷¿.°xg =ן”.}½F¾?b•pí{œS_M 5¯ï e‰Œ9U@e~Ýã ¯ ¼`=¶›Èi`ÙÍ„I¼Šöõ?qšPe&ɨ’Ês¶XÙœ= ¼Ã"“þn•îûDI »[Ýža@&+Ê”Ý'©&y½O“à¹ÄGxÃs½ì9ñ€ûŽÏR°äÖ…–Thø®(¢§Ú›/OÍMƒò“Mß•è /&po@ÙUPÍŸÜp×<µ2þ.)E&þ,rz-;¹ã³«À×ýU+j³ì-‰Ù?I8ï$ÿäóœ€øüî˜*ðæàÛ•çÜKD£. ^m¸w>zKªz~¦á{ÇG6ƒ.@l=!û\¶~O1o]{8²>P2eLiý„M·ÿ8jì6ŽOf½»Ws$<ÓKûúyü‡#o[ªï|ßò¾òißCáëçš^N.üTí3“áÁLª±|nÉ]¬pZðšØM`zæ.\F_î?¾‚æõUÒ/ξÓß’5ï®~)ÚM›AïÞÑÀ1­r­áƽ—῱®ò_À÷Ny‡!ŽÒ=YìêÚåÉÌùÇL¤sà­ŒßóÝ;ñ}–14ɯU™ÍlKÒš›­7ö~ŽÊ<å1Ÿìí¤b/)æ“q×Ú²> Ïò5N¿©‡õSÿÞîS1ÏšÓ÷çõë÷™ÅÑüÂGüæ×Ö£?ßL&1z¾Î~y½Ÿ)Ñ9{UÈ;pŸõI]Þtî³Uì=çІÔL»ª‰õJqzý„ò¶ðÒºªl¦Yv€,‚™ìÙfVçVþL{í•'-.àÎ̉—0ØÍ¦Ž€ÿøGnx­È?!þU“«@_ðÚ&“à=OÄä’Äð€yæï•ʤ¶©•s <èÂë½`B]Ó‚ˆ[fÏ" ?ðÝa€pY+OkÐÛÀª'Yï.+YÿMõFúóÏD=ÏТaw¸ö5\YGÈ «õ÷=0{вÛ•"*<Ôh ªÖ ¦k˜˜†\ïéÝ{Òˆië ¸Ïä™úÀ´jŽlQÍ™3aå.¹ƒïݽº¯•>>'',þÕÀýŽ¿æÚ¿ÎyU†å’ó¡ÅTÓ¦™-ÙœK{ø#ƒÆÖ²ÓŒê(Ö0MÿFLŸýw.¯õyw€Y3î ÊgrΙ€¾ç«y“B3óà¦É¸SÛ>Îí ;µ¦uí3Ïgׯ7×îÑšv'kKV¸whcoy‚øÒttã)•9ÓÙŽw6˘wøMµÄÈO&rš)¤‰¿3µ *æŒGàxkß9óù+p¼·ì¥FUº]“-[¿¾wøxSe2ˆµ5U}–÷‘ò¾Ò]”Ð(£´¶iÚ[×r–¶u•;æÂ0z`ÁçÙ5ï^ï@êg‰1ß ‚|r$“Go$÷d¿{–°¨—ž³t ®)—{ à »Ïê¥~uÁDüó¯É¢¡8i±Ë ôáÝ;ð±sÜ߇q—M·°Éíq ƒGï+Ê(PKa[jÔó™(ìr e3N/Ž1€"¶AeÈc€²Â˜Åj31 Ëî%5½Yêpö‹}ÑØš¡Bý)ÝÙC0ûø¹4³l; ²p<ë˜Uå,`dÅIøª+üˆCÉAÄ6;|¿2ªÞAüÓ`ú¾ï5õ¸ß¥}ßçÁ§¨è>hòµˆå5wþš5¿{üÊ¿Ê9}ò¸~Z6ÓK²¹(݈åtñŽœ'F”z¦ù¸—ž‡ëŒlÍ„ì»PêTØŸ‰7ÂMÖœÎë„™6qž¼{÷)··=³Þ .ŒP÷_+ ×¢º@ü©¤o J¸ó“_?×Ož{—¦œ‘ˆ ÙÛ–n}ýÖùvýŠS/ìN½ì~d3=ä8w1ŽS7?‡b­È'›J;rsÿ=§aþyGé²õ;êL5ôídð\D Ï·¬x&sÉÖÿ·±ß,;à^«ëÚ§3ºM¥"°{ç»3¯‹0áM§¼[½„Ð&€~jÙ»hi‡ïŠg¦Ü%\{óñ¯Øñwa÷ŒÜˆ,§_ýsô uû%ÚLæ÷wšJ¿“3óÜèùn†Ìûr%hñßϤ?cóß±œîÝ]O£¼Ö…¿ñðÐH&œ¢Z÷ª]l¼˜J:/¾YÑË)ªIêK/wF?:u-Ó~ê{f×ȈçÕ#¼éXI$Ì´†ç ß[ïÎE*:u}Š™¨Œç“éˆIe6t²R„ñ§?÷-¿‚¯×(é¸.¾ÚCú tž€é¿ë²®œ†%€~ý—x\”•ëæ×+­áDæœhAN\j“%æÒÇëX- 13¾ë`ºÙøÞõïgÚ÷× ø+aLsÓ•?µï{Zü™9s&ÁŸ•=ý××™*×G» lNÝ’›+.¿}—÷‰²¿Ú[gr¿öœs»ÅȽ©.|pÌÙ®€d%ϱÿþßyÕ=sÆ,öfâÙ§`(‹ByxëfKQ·g¨ÙA– ?ZNÓÉâ ß;ßýšqoÖ¶+“š;o³i <:&2¼ûzáÔe—›³ß… Ê{~¬•ë'¸oÅ|k»[Z#¯ßŠù ~ÚfÚŠö®I:“÷Ê2m¬g<€¸;Sí¦È0£Ùú†òý;©½%7Bó|-¡é<™T>¹Þ®Ö$Ûtaç-i3÷µÎUµíÿüÏ@ê^à ¶C$yE[u×1&sÌ"§N¡1‹&ì;†Q£¬d MÆyÑ?éH![F>ž}²=w=}˜õ™*“9ö'*ö×Å‘ïAðïoÿÍÚÍbž*çwUãÏô»C…ç¹òŸ¥Ñÿå_rbó#ý:(óµñô.©æþËã¦òÈšðÀæ“9—fFÞjÜM™ ë»6}½wAð®}O [š¶~%¡qÿfž®‹HÃô$Ûâñ $ü1ßjeÌ©- < õ™ ù9-¡AZÓ]}¼*=††a%VÒ‹šUÒ ¾wL¤ùë êBÓŒ;b3}×å˜õ|w\”Ù…=_dñ ƒÂ€îpÜÇ (g"Uèƒíoí3æ×Xl£Îç°nÜTL‘çö 4Á°FU|jˆ¯õî÷˜çrš³ÎInxîW *×öÖfåÏpÉS~%¤9å4ó¯ Я û;À½Yö¸ŸŸùÝgxŠ‘Z¿~'IŠú|qŠ‘ÄD­®ƒBQVŠ“Ð¸ó‹šIè7+ßõòáõUÕ÷<@[fÍi€Þ©óYߪñ®:;DOÑÈUªzÖôŒD ü”ÄìÀ}-»%tš\3ƒC9Àõ´Ÿžƒ®@4ïM®9"2ïùU'¹¥A-¶Ñ±DZծÇyÖ©ewû¸Ü丛p5AùÉß·ö½;\;+¦KºW•×m¾¿Kx–ºöhÜOˆßëÙRÁŒ²™ØU#Ywùx£„‘ÇDrcÐ$N*ÒfâÄ¥ðëëJ&¢1›z/^øNsÇZjªL¶¬gx%—S~”l™¸_-ŸA~ÖuúI7ꉿN | ž¸nfú "ÙMú¼¦Ï ž>3ƒ^Ûc÷í[}øô3ù¾T¦O&˜þÏFfïNÊÜ/ùs¹TÓqwj°Y“´[QgbŒ/–¥Œi—ÐÐSÆå««p|‹\Àzñ*×+ØÙôü5 wg ,l’õRßÁZª€wù¸é›ƒç¹<Ë G.—zód`;à­WÈ—ZÓ’63™î\м£Á²p¿BÄš)æž›7ÂÄɬ7d@ôE\5|ŒM:ïXy Kló­uÉÇà¯NLGrÐVÑS³Ç5>ƒï²ì䵿bÜO`:õÜ_w²^í9åP×àûJ?x`ýÉâ÷'s½Ï+–ýNóÚ?Ðó$'pï¾RÎ=y÷佨Pç Yûaÿ ð2ï”–Sš hXë'ãp ¬¿!-eï´ºXwhÛ)7×’*ü…•„fšS÷¬•†˜Íâ·å´ ¦m²<¥G=»Õ=¬Î#¬õÝ窞>Ù2çQ]üÓÕÓsŽ›óî¦X«ßÖ1tÙÓd¬#éq`³ƒ{>ÏSôÂñ(i¥{E¦ÚÓðók[TOæ¾9ø>Îñ¼ûì!Š“ëéhÈÓ¢Š9µ-ÈάºÔ–§‡g»„NU“òIJ¯õdÐilÍõÜRØU;,Rº‡;]¢$åÜÑé}Ù<™)¡¹ŽtìvÒdÙMÈÞk>cÐïã&B¿þN}ç_è ^_å+HýÈÎ?“8¯SbžÛ[ŸØdŸ3÷sŸpŸð¯ ²?¡h¿ë+ýDaÿ|²æµ¾Õä‚W¸vuí[r3óg€za»ÏÌu_ ‰‘€ìÖ² ©“tØÝôü\çsM¡a”¯Í4ÝØ)»TÑwèdJzA |SÖa¯m’‰÷Èåéc`mK(`Åt—õIZf¼4Wq˜4A<½Õðt@2=º ;·ó.Rl°@Oê<àiç´Ì¦ËáF+ɻЙ:Ï’ý­Û“à~=ËJvšel¦³7wÓªñ Ü÷åܼ2ª|߉=Î5OþzǸ¿Nˆoð}Š^‡]6tîw÷j`Ð ýWý,ÆšÀ=¡~õî ö¸÷ùø0™G´öÙ}m˜n  _n>À].8ÄÑ”wuðÉ9Ùëÿ÷ÿ©2÷ƒŸŒû^øsÙ[ÐÒÑ„ý¸£!YÏ/Âãܽ õΘH>Ö·á•Ïœïô„ȧº½Óc:ZñLké•f»û¦:ÊEßoCö6ƒîûŸ}´aë;1ç<6»Š}Šöî‚/÷mê$Ïþ,išÌz¬¨ÊfÖm©iie؉ÒÁ'ï7`óY8Î,­ fH¤Éžyî™0£z¶?>+Ázƒxã’Ó®*I×wÌÌlçî ºd¸ÍÛÆj6;ÿ1ö•êý»ÁŽOJ”¾zÅë6¡¯Žv{–ceÂtœhxn}ÜŸƒÚw»Z_7¡¾«Ñoû~ý­ñÓ—ÛD;þ,Hè3eÕWuÁpÏ\m oÈîO.Œ;•¿ X[®± l7åT½; Ø!{3ýŒÅᬗÌ&I/²ã(Ý‘¬XªX }ö¸ÇðÝžVW­±Ñ¾ó˜ËÒ…(d¹$Ý…õÉM—wO¶ ºÃ•:?-Dfδ¾œÛ3_ì}3Á= |æ¯ÛIw©òZrùæÕØÛ*ˆnx= øÕvXÁzºWís}ÐIû=Ï›Û\ƒÑ®jb‚{¯mú ²7Ìí”~•†Å-›¹ƒømm|ôÚÎr¨¬¿Ò”_u¸ÒSÓäµÎþÎ2{§_Ÿ¯›¿î!ž»±ø:²¿ýÌ@Ï4+½ÆwÙÜ\<{¯Œªëüì¶xÆ„–f¯3Ô–ÊÎxiÞŸÏ„¶{êùÔµ‡·V²Ël¸ OànL$%M1àºMUÛÒÊsýÅ%¸ðN0sgZië{ÖŠCñd õÀ`Ve8ÄþÓª±;£÷ÌYkÕVÔVNèßuK ÄçY¾‡N¦p*fÖD^vleëõÛœªÙ4C,á{Ö+ƒáqØtB!y_èO؛à ÁÓ]ëç˜ÞjøçöÐ'ë¯@ó^WôYšÍówºX¯tKŸñâŽ¯ŠžB|„\‚Ÿ@üÏÆ WJôs $5°2Gåä?ųziÖ6õ$߸N»ðfšY8sºí¯ÿFuµì{óñ0ñFCîBšÝ;m²áÔcfµÔÉ4›UÉdæL¶?sÜ'pG5Ž¥yw`z¸v¶T¹ž)Ñ4¼.ðpᢿ´æmìCBÃ6ê&×ô«1aI°;âAü‚]½ôx„u¸d§ÙdK5÷Ê$àŸ¦mQíhWÍŸ)4ÍßE¾VcOõù.›¹‹’ìW<Á÷=pÏîúnôlaFW¯ÂzûD£ÝïÙç2˜éXÏ•ÛÎÜËù)íeFK†DÇÚƒ33̰”ÿ&än‡Â}å1,=»úäã×y¨ô+=CÙ)ÈIó€%bÎÅHͲ;J»—tòî‰)œ 6*ùfñÏe3Á=Ò½¡üî&{ü®ģÁh/uêTø—Æ;&2RþÈoeRØq·iáM 3{fFÅŒóS…AËL OPfµGÑ8?Û€õ3²í­]Õ}«|×-Ëé(ɼëõ«að¹Ûg[¯Ÿ ™u† —wˆ…¨†í¯ôîCùòµ½€Ø51Ñr¡‰n>‚—ty}Œ¬&±Dû.ãnÂzßå*€ò{|d f’ ÓëüÅ0ÊczâÀ’Ô Ï̆ö1œº-’}œ†K®W ϳ֒™¤5‘4°FEòzl¨)ûY7-³aIÙ$2ë#u*BÒ¸ŸBŽ3yžþL?S_N~½·d}Û:_s𯗸rIùD£Ô$zëóÈÏOì‰g}ËK:£¦¹ù3ÞñLªiλͣgN÷ŶQõ„콜ªzuük>$"œVÃ÷ C†jßïï}fºÇ®Ê{ïHÊVÆs»f=‹Dš"y9i tlK'­5Þ¡â[à od$fÖÔF2J¹áÚb½zJ²äY€`a}’dôüg¡š¿†õ“®}רjQÔé`|1ÀýÝ”˜¨sˆZ£¨ÏSޟ絟åPŸfÈ|÷¿‚õO |š8ÿ{ÃËÖÏóéy»¿ $>.ýOö³ƒòïÔ65ìæŸ*yŒ˜€/n2Ð1îÉ3ü<—¸EK¨•)ŒIjM‡K"Ù s?³eHè›û®Ð…KDb"à#°1Á}†TÊ´ °+Û·n„ì(®xfg sQc½yíBg´ï,ùkzÀ1ÀËnàu\x³Ý ÄÛêPîÜͦÖv,s*Ž…µ‡ž[èhK ^Ö#Ê¥œIU•Ž<Ò-(Ö¡NëSŽÃ$~Ã÷=æ50} X[‚ò:¹Ü×Ú3gÎ%Ã!ÞѨ¦!xƒà]³.,fËVŸIóq ˜ˆßPþ”]'â;à¹D^žÛú)(_s>XœÚaÓ®4/ÎùÉ`Fð½ÎÌÚÁ6¯BhžÄùx€;¬dþšèÉiîä›e`vrím½í¦S½-œ¸%¼¾:ã>ÃÖ·ÐE@¹CùHbþå_¶¶Œ„ùàx š·>m£û®¬%kZOÞŸU,¶„¦5âýW£ã+8û_S\Ã÷މ|²ìäõ©‰oߊù¬é£=Õí-­9¹|A;¿¬9‹Ÿôù¾äË×™,ÏšwžÛC&¾ýذ¥ûLþŒÕ² Ö¹ê6dïþlcX®{S3ëÞÿèWÌ©w hŽH•íiW…Ûî¾Õ€òå[¯ÅñOo[sí3óš|üÚlúIêSéËŽ}yŸfñüN¯êÕ³Ð;}=Fy&}Ù¿ÂwBOŸ{¿dºG½ìºÉ©ž½­¿û÷Oöɉj*Ⱥ”‹ß;žHhò,THy¿çé{„ú×mlýjë† Ì2µ¦c%M…g ÚµnWµo•Ï 1Ì,FnÙLëæ;¶RŸé¶6žvÍS‚#ý3ý¨¾>ówºÙí21îÈ7§8:¼Ù¶÷ò×ÛÀ<4pGA¾˜¹s PTéZNY¸ t˜Í@ÂL›ÄGj6Å¢ pÏ€!àÞÚ©”`û.ö²§äí¬÷ X7 {à]›b9ràŽ«9Á³–ýš‰o8þZ:òÚðÚë}õäÁŸÀý ‚¯k‚¾£»š§k~áM†—«WxÏJoñLÇ>¶Êÿ´ºžóý~ÛÐ0ýÔ¯ï îÜÍXE›> ’f"»lzgh4Þ™úÝF¶~çž½(„g$ªâSùÝ@M#u f®e3ÂÓN€‰ú¹Ïn‡mS©Ÿ[³ò;/î\AÃ÷¾7`!)õ.ó¬®yrHa€ëh¶ ¥Õêë=Ú˜íyܦϓoéHÛL•Ê0„pOûé„õ= ècæu»æ)óšÝ§Î¾³}ߣko»Ëýžý\>Ÿ¼Š&Ýðå=sâ+|wYù¼;>aõñl³kå;b’÷(¯iýšds§8yw”îDF:së}Í;׺±O]Ok{m¬±ŸzÍ·¶iBvÝné¹¶ÓfÒ'“¸‹§Ñ?¡5xN€ò?ñCþßå×L?Äßo<F\úkkÿW”FÏ2s®´û\XwmýûÖUM×Íœ_9§iºc¿úRù”¸…Dø‹üdZçyúK9\¸¾>¹Õ…Çcí6—n¥éÑ»ÏJ¦€ìþëÚ3°Ò*¨†øNo5y%¼ÞöÉзÕUSi ¬Ñ¸GéNf-ò‡L€8ÛM¥­wë`Ê; ¿uí2ßXZáãeÁ ˜åbÊ5…IáB¼d-h|¹X«¶|oÐÌaô=þõ¸¡ù̽qVAXLÌ…wר„F™Û¢ÇŸ#é!Gç„t_')ßu²žå8'ëܰµÕáÍîOKh%ïôîòÜÙÛix=E/w’®ýyžËVÉwm»÷mü}õYõàÄ!S’£§å´%@Ý` îˆ îg2LTk/œÉ#þÊy¢nžsR{œõaþ.Ö²Õí0š­$nà>[Hhœ`=ÕÊÇZÚÛt^JKkfŒcøæÎ·‘/ß–Ófg9ÂëÌ-Ý|¿¼Óž[È{l®ÝÐÌÊìB¨¼÷Ùg:ûpoÍ÷Y·tÊHdåwu{G(¶-u uÖyܯÞ2˜ó¨ú»; •Nö]ÍÉßïÀ½ÿÚŒ~w¯6XçÕù½ù-çûjøÎ’»­I2ÉÉ|Ëžþ¾Ö™JöWgÀsg ø¸svuî;òÇuG4d3öÀc€;œë¾Jw’gÙ¬Ç#Ë®]õ¬^šù3ý×`Ý`­t½+Źr¾ ÙŸ0îÏ#¼Cæú©ü_¤ô´îçŽe¿SÆ?ëÏ÷ÿ<÷ýÝÎÑWÙó䚯“8ª©Ouí€ÂkyLö“ϧwZf+*\SÒ¿?­“%x…(ÎÏÚ©¤Ç¤KjOÛúPW›¼æ»÷Ü*vôŒ‰ô½'µ=ÐÜtšd±w d§Ù´)Ö©ºÀz$1¹ˆ(¶aŬ˜$ƤÎÀGk_2õÏz …Yïá*€û îÑ †­§DÚe’Ý;ß]ÆÑLtäÄ;ôómrÎtì£ztꬵº ÄáQœTF¹™þ>þ¶´öð£Ùâþ~QÌs›‰>^þ¸‡%™ØU©¬,$Y4!§¨¦ó:X†#Ÿ°~gâgäb'Ïì%M'è¿‹h<+œÚxú:þÔˆ·èèψw6ÿ]Z9ËúJe<~ Ú÷NYÅ0gzLƒx Êq8p<ŽV±·µ”óVÿF*™8C2ŒôsȼMxw>aâöÖ畱µ[K­¢`•5ß“àÝ&€Ò-›#D§yîi9Í«Ÿ¥KmCœÒÊí©²ZïQ‹*VS÷6Ë}úø;K¾mO {¶b)²þ”ïöÍ=[¦'»¶>VÝu¶í0ݼ)~•ÝlšmÎvÕÖ˯ïüN„Óúõ»´øi2Ký}¶éhH;’ªØXO=! ÒÖŒÄwXö¼kæ-Ѹ› ¯8ÇÌ~wÝ¢ qÃ1÷ €ýâÉœ1gÈ®ê]9 ’˜U {˜%†ì.¹“Xç¤Í´1TxÞY4»`˜õвßîŸAügÊ>UBñ*?ò.ó!ráf‚ã“,vå#| ŸsüçÛîþÝÖÕï—+½;uòSEN÷Ç`~ö•öýŒ¿|räw8wÙðûRl¥Qÿu‡ì=’ž¼ø ŽœZ7™rÁtòaÒŠ*SžíÙ†Á)‰(˜P|ó÷ $¸ Ù·>}.•ëµ)s^Ëάm§< <ši M|äÎ&bZG€2?u¶OI—éæÅñÖ\O|(eM:ßá™ÙƒÜ8Ù?{KßÒGæ˜cZš™÷§g`¾÷ÌQËÖí„ë®3Of²u–É­‰3B—)zéøÅ‚ »jÊÙ÷ÓÛÀ÷ £l Üù ïÿº{L€1U]`Ý€{׬{󾋳l~ËE„hÙô“f¶G…zÌ£ÄNaoS©L|fR#G`åóI5XÔð‹H¬À+>²dx&Ïü™©t§}3ƒ: x+Ñ[ÞÞ×Ô÷G˜æHZ£lzwäÚ4#\iÉD³ã¼‹N;aHf"MsóÙóá´v·ò8’D7î3gyÓ”â4ó ›©²³ém“ÅL,õ³x×ügLäY±„ ¸g]2pjSl§Ö\ûsÏ× ¿ôæÔ§9U½ûT± Ðÿá˜f8±ÍÙžkˆ$ûYßµ ëDp¤ì»Ä‰TŽ=Ù0Ê` ÜÔÀÊ=‹» 4rJàûúKÊ“<ÓeL-óûí_”‰5Wª_«Ø_+ ®ÿª×r ¡Ÿd·oûjN½ÎY'JòKëW¶Ô³Ü‡õܼ?/Wzù|ýwàõ÷!ûs+9æªÐ¾›-úndd/ÜaŽm1é Èþ@Ÿm:á¾µõN¥ áûÖÑ©ûXÕ»*vræ 2¹œÅ\k-”5ÎÚe4žÊÖ˾¯ËYL™áº‡•5ê¿›‡æ½˜9ƒV^«+œ=—>`º£s.¾@%':Só”n¼ô›bQMs^çÆè×_½0‰¼n-™àï‘„w93=À8ß/k¨hðM”˜Y=áòM»Š¾™aIˇþá䘠àSÐâ¿^ƒ3Ö4°>COëçpGã΀¡YíW¦Õ'¬ç60Ü-"º²ŠfðÓË3nòªI4 ¬õÜÍ—‡cÄG•N£Y.SË.¸¿ZÊgr-Ù@?Zy,oa”¾±o.p Ñœsq…È$7T¼Zšƒˆkì®éÊwã&¯ØvR·gè…I1G.¤Æà¸Ö+i‚wOÆïbV2EZÃöÊ'¢þoÕ>ÛgháÞšwïhÅðÄÓ¼+÷ëí ÍLÍ ?;_÷¨Ç:Ëa/öºªSæÕ{Æ@ûl›M#¤±–«Å6{2ýTð·tçšË¾ŸÝ«³]5gi—7ñMù­-.Üoà‰Qz¾¥Ò=7eegÚUí±'ûïþ®«¹æ»\œ»3Æ}]U-IãŠENÆ+ ßCœIË5@¿zŠm&Æœ°û©ºý“0GŽu;C‰ÝÉé;z ß¿–Ê|¦kÿô¹ÜÄ?)`zn–}—Ëÿ Þ÷SMž¢Ö|¿èq.x´GÌzŸ"Om¬°×³öªšÂ7xŽ5wKR¯~­k÷ñµ¾-)‹G¡žÎÔ^¦Q.?Ù5)_ˆ,'YïrÿÒt~N¬«ºãVÊ4sá[2.R]ÕäÌŒ¸OLdsð=<`HÐÊr*)¯¬'V²/Á¹L«)§T+2ñ€ÙµlàÛCUé¹|·&¾¹s/â1øjBÖÏù™Kcè–°ÞŒš8° ÷3'‹štKwYðÀë^Þ1ÖÓ{JqvñÌ™€~ÕáÚ•ë˜È~|Ù2dÅåO¿å7*ÔÍÔWÆÓUåSõnèmÔäÉ[´ 5gˆîˆ%âvL>~ÇlN•¡dÌÆÒ%ÿÚUð‰¡“‚]@m”ß|Gm1tÏÎ,éhK+Ô¸ ¬cåÓh›5Ÿ0ЪC[Îçßb›Y ©ŒvÛ¶¥ÎA‚òë÷Û¬6Ÿ r8õñÉoƒlÃ^+ÿhµ:"Î×µ¥;€û=gf¦ÍÄ:óàw˜>ÛIùm‚· ·…1“oÃhË{º{µÓâ›#ïÂ&{bMn¥ûL9mµû{ô󇉄†¥Wæ–Ê$‘F™Ù^ðt•Ÿ ³iN ãzÈ@ŘP y\Û(¡ |ç¾Ãu¦ÓÌ„ï!er•b›üÌ$Uf>~Ê'Dî ²zéq—ÝÎX÷ õyBåpt¬‡ŠËñCàþL þ^ˆäg@ÿ®]õ¹êýݦw+œÞYbøhË £¹ÀOrl8Ùë¶.)<~5.læû™ìàkµPW 1TpÈq5I”í¿Z^qím0}µÿ„B¶Å"¤$Ã0é¶€;à~†490>`ÝaÕÉÐGfÃ+µÏXN|\—-³t‰•JxÖ#×áâ¥b¾uó=Ÿ`•±î øñ$¸› °.»Ä5¢ŽF+v"̶IjçvŽÈÁ”õL ·l&çRÒ/p׉jî×9ßZäÄe:ó C•?ŸAÀ}Øúl¿a èä²xÜROàÞ [•|êfÎpƆÑmU*³kèmˆÜ¹ö¸ŸEQg:ûuŽÍ®\Oú0ôÔÇ·´f2î×À½‡ *Íc#8vqR¿®Ã¹¶S“ÙžI|æÂÄ›'Ãö|ÎSü‚~ÞÉzV0¡ñå1ðçÀ& 9sJòâŠ4"eéL›Y;Æt‡Ññ9ðéÅrÚ¶Ô Éß/Ø}n¤ƒ•ÄçuÛìÛæHÞ4ÑÆÌÚ‚ Áeð§âŸÇßv ŽÎ{¶±¦˜i&¬G)niÑÙa¾Ò9ÛRù½)Ù“à§à'b¸;ÑK/§Y¶UìÝ;{øÞ¯Øm¼ÕN™Ïé\–T ÁùöC¬4pÐ ™3d=Ë0Êu6ÚŠÀ½`…L(žYg ^¹×º¶Êµ'=Æ’¦ Ü×]/kB-{+./ðïS$ƒ¥u×¾7…wrêÓ5w-’ÙusûwÒffÀÆDV|>|×÷u/ã›öä•=eÜËŸ ]ÞU¾ŸÍð©^Ë~vSi²ð9í¸°ÂŒ~=\¹*câòÁ¥›Ðuãé_þ%ÀÅ`ÊŸïOíŸ`w÷«=gû«˜@êÎwÏà¡Cû‘]‹ªÚ÷Htfˆd«ç'—o“k³ã îcWuÊo²ûI”ïˆÉî^‰7h¾¦ˆdµöÕq±\—¼«ÔšL;Â4›×nªL,G+_; Ð ¾[%¯Jx]öѸ«?î뽸G,‡ {ÚQ’üÊî ¿ìþÚ'®j2“/Þé+‘ðd.•Êt¥Q A¯i&®]ÈËx ܯ˜u¬®ä´´¦³\æƒ}j«µ ç4›¶úÿÀœk:®±SPz K™õðëQ· ¸9—¦ã‚Af*Éþþïá×{Êžwª‘Ú)û3IÕh uXyí¼@yÖ“‘°¤sŠP·­õy8fµï±–òx†<î¦Õ–:trKwšúK\çâLàFû\_ÏW7PRp¯Í7Ay3©_Ál¨%Ñçÿù˜aàW %tÿt¢Žìr ³`”–ÙpÛ´ÎPÈ–—4ÈÞùiá~Žª‡UüµgHLøI5U[]§hgß+ø;Àñ4Ôž!’-i;ogý“ÆÖ–B%}(üº:õöEpeîókKžÛêÿÞô|<: ÓY\˜øµE˜ÉkWɳ"›1Uf]»¹£âYr¿ö.|—ºr[y*ÄVÉ&×ÞY4ÜÝgÆàÝlÿ»Í6ïj÷_g¡çYuù¬÷â ”_ ÏWt=•ð|0ðnjûW{îí¹y„Y¤/ó”©Ü ?ZòîÐbÝæ¸è¯Ÿú°üýßß@\V¸©¡©ú–ê}}¦\b¢#”Õ|–àõŽ¡ïŸ%·öpóšVg²9ë|³*ݹ¸8¾?ÓÜ£qŸN|Ð{00½¯›^ÕíÄ;¿Ö,(ÀÝÁ 4ï%)é^°äÔ#ñàÎΊ·™±’Éœ@õZ1,+Ÿt^Pk)°ƒÁMu<7 CGRv®| ¸³Δëgy“žÛûÖcç4²;?A ØÚÖÇäÁË[DÅ-ŠªvØ>Ay3®ÙƒѲ7×Þ£3†²Snz0°3åQŠË.·ˆegÝç¿þ+©ÕüÒ§|Å™lzsê÷ >‘‹fýz2Ñ÷{þ乑Kýíßc”B9¯?AàŽ²–š02§ýNVÞóMsªú­†Ÿ³f@EHsÍ…·@%0ýŠ;6™ëÒzú^“l™Î&o.(ÖÙ/-†áhgk3æ2ï¢Í‹ò¬þZ1û žý¦rÌ}Ô»FRîNm¾l9Ê• 7þŽ_læÒ*(>©™ÊÂ…’TÝèÈòwy5ÓšÍn†×ü§âY©|¢çrŠLóX·‡½ˆÞý÷vÖk[2Ã.y§I6è8Ë@4%ͬŸêjöÀ ’3§­·²-YÉt÷@ŸYé è;£ø¾'©³¾9òl°lµŸ.¶Ÿ}¨§¤bçÝÏò£=…ý.µ¦­f@ð'©G7"ª6wö¿Û“àl…_™vŸ= ±,š?n#]W‰Åäªx¦­™1 š:ß 9aëmcíLuZ¼Iqéõ ›á¹Dò«1¼"¿Ž!îfÖSÿ”¡)1Q¬·þ>I>Ó"<‡á›­©Š¬¥ÛROö½Ëª:â°Å'-kᯠ‹§4¥E2égÙ“3 Çã+èR·~ÍI_Ùa;E~W®ßéø¯l©Ý{½dK-Î|w†BNƒò´®æ ášÐß~ žÖ9¶–­Ú´ÆHƒNgo€n‚ûN€¢}Jh’?ÓN-@<ûäŒâ¹Q(¬{%WfÔ¡\Ö•öf)‘ÇLµ9ñOÈÇH_Ökq=ü÷Tõo¼/‡þÍûOíÿ³Y‚Ï ð»ÜŸ°®¾úR_ÏÜ2º†¹“M§±õqéî 4ïô˜>éÑòmë<õè_‰pµǶ›aÀÊÚ‡#]£TP±\—™‡ QzÐÉî³E5KëŠä°Ûh Ä7\~½m¬æ/ɸ˾”aXZ(où 3AÉ¢ ×¾Ö§o5­1Û d)Û/€ÿTêù‡)¶IZ<[:p iäÅc{å–Ü UÂpó€Àz7ö%ÍÈ]~rräk£ªT©1OfÔ@ û h¶†TÓ* B , ¶µËf'ˆ¿8zä+ÍÍGB#Üâ7poÖ? ûÔ¾÷ ¥;ôrJex­NaŸ‚Aª©,]Õ‰=f¨ÇÜÜÏê¿zãìçv~¦õ°3!r1°ÆšÜÏÊLf]†žs˜Þ)C ôž*ëd•æ³…¶ˆ‹r&ÌFÒîá¹e7‘¬$C&)Úîß™”÷‘Çœ¬*{ðq¸sÕí±*"ù·[¼930νœ¦U--.òwä Çϧí³Éái`ÝL³m£»ÝlleRt& mã/RÖ»wÊ;[îb•é¸g¶ðiÕ~ {ÿÄ2ÁÌdýZ$J²%OwyðWI8צUm¾Q··,ª!x{b?õ ao~×þBüœ œ±Ðš¬—_÷ ,ãžl™õ»[àŸïúî<ÓĽª‰• C¿–èã™Õ •5漇ƒØ5móÑÁ7pã~ªÛÙŸR+®Î+ùyÓ¶äÅ|QßÀŸÃ¿w%4¯SÛ?ËÀùN›ì»±•¿ÒßÿžŸw žÎüû'w¸vÓfÖO ñ€­±Œª'pw`šKºu ò\d$ ˜ªÛ«šö¡‚bC¦4˜NÈ.Ÿlõü\[ÓéòæÀ´´f*ìßd¹ôïnnLŠØ8c€Þ0 “1ÕíQxs¡[œºy,u¸k]MÎnøKaïºõˆý\÷‹ßYÚˆm<×ð½B䊖¾Þœø°æÜ*HtÌßÄ›RúU´Œ¯}«Š…š•ïB¨ä–òh ü§jÛå¬LJå“lwT¿¾ïŒ;À]øcÙÛì…G‚õ}›sÏwÀ}vv¶¹ðÊ4ÙFRÙë9à>M¢­&H©]{¿iƒoz™o ž!«Û÷:wÈ×MÔ)0W΂Ó9gÒ?Ó||?V›¾«Ûï"/›¡¥ÏãÁê÷È:çDŸBˆ=Gv\ÖÌý‚bˆ¦zÙù3æÓ3»²›Ë‹è!Cñ.{êåšuw00Íp´ùi%@Í(g m;l€ÛŠ­q—ß-­3Â2RŸŽ†ìðÄÓÛ)7­õoà>….9’;àÎ>›wïFØþdzÙ2'?]ÞÔ¹1 çòW¯®Ø²“ ï¹—Y Ôêí3Q*³3î˜×>q7Ù·š_"5L â¹£…ÌBû¾@<ׂ6Å ï.pGû®0ft{Jšf@äUÓ|Ö°=wÛÎ~I“ë¯ëê¹dÜ ë1.þ3^ü³gõÛ{’<óÎþ³l™w3g¾c™ýÌVûGž’¬û17~*O“ÝaÑ—ßë½`dù~À\à€æ«4|ïüK‘:¯ýdèïRkŠ Ð÷†T¡¶­¨aÐ[³>óà×û,I¹Í}f”ï„bYyf<¦9uÍ ¸´Cn]Ⱥ@ )ËZƒ ®º³VdÁ;9^uûúœ×>y»W‘|×Å´ŸÅ÷Ë¥Ög…¡ÙƪŒN…¡‚<7j.ýZ¦¢ƒWã®'["Ȥpï§5Ð-§é£Jtຑ¬sOØHÊk=wÔ½|JÉœ‘Ÿ–-ìDà³µnÖ'Ÿ½­]üÔ2›ÈfZsôSTÓ@ßY‚”"M lƒø=bR³æ.’Ѱ8-§fÀ·ý·!;ÐÉ0¾¹ós)Ÿ¨P¿enöS Æ”¿¯ÏÈÁ§Q¸‡… ºÂÁw¶º0zýŸuÍŽw‚{+Ë=s ””ôŽÛë½Ét Ó#°‘O•kZlfØŸç%-§ëû·[pÝåî=lë øÎêQÍOëó. â©à'V2 - ^=G#›ÆÏÏ-5U,M©'©}×µ›c³³Ô £ÄOE~ØÜ›zNÌÇ$9o°Knš•oaIË]æ â”РÚn^n~¸l’ØjyïJòwÎLkåUɯ3³ÅÙ§]õÎâJrÙ1‘ýá1sd&Ì@îà§J¯jsíÀtg‰×½Œ³NÆÝ,¦Èf2×Ój{Ò(FLî{³ïìWàûL|ç¹ ÞaÙ?ô7FÕW©2ßÍW¬íž\þïºGØ=è×|Róéq¦r=š¶«PÕ%Pëg¯Þ= ¦œK·1˜r¬¢À Òià!š•g?\¬m'åB©xÆE¸íöï+³YÏ ‹€[~bø¬¶>­Ÿš=mE][&t2 iÝöLk .ë#¬©µ4£ ¦ÕN´ˆìª+B~pLIªiµº]÷Óæ×)ÿh•ünÄl“(à̤öµÄúÉk©J¯b>Jtõ®ô<ÖÌXÉÎïB¨S+{k«œg.õ.¡™Ñ– N¿žÉ*7×{ä†Ý©ð³+i0 if0,z’¡§ü&Q¹2t±2ŸºùSfÓMÃw@F—Ë0̋˿ò[XgH iLÈN^‡£3+= ò´œ¸¨×M«ˆd¦de=»ç ”Ó$3‡wÑÓC¿dgº¿äaïï‹ÁYº3E±ñ` ØH¶iÙ {;á2î‹Ä6ÏÝÏfî»w¶Sä;w¿ Íô·ÚÞ½4OzçÀpûºüLýn„í< ¸ù„Ï*¨×úõs@2×÷«£¼G¡ž¾[%Xòí”°'*Dàî9Ówj® lÃÒk/¿ðµ†ûWÇ Ïl™´¥:Ç«cŠ{VªšÒøÁž%ž"ÙY|>¦Ø¨³Þ'ãÎìz'¾ޝgIQ}ù9@×Àz¹å×Àý§TéßÌ¿ræ#þ!Œ­Z[?¶u™è È9,YéIºÒ¨k¹˜Y4òîÝ¢Ú/™ØSÞæès×;å2 „F£g3î-;Qû¾Ö[V².»){²ø©Uï uÖz 370 ¼IóªÓKgf“š`å1X]§9u]‚û3$EØ£ýhê ×¹~íÐ)ãëj’@¦Z½í­­G;káN¬¨*›IÖÚÃëú«àrísÊ8†uäµÒzkµï€QxÇ0—-“èJš6¶ <ötšæ&ÛlÚRÀºà¾—¬m˜žõ€uYÉDËuÁiÜ@¥?’Â1Vws²½§õéEÞ…Jòù<çœ Ù‘¦ÄʬÔʸRfN¢›Ÿß2À}oíís …d{¢ï¢Å6†‰FÐ-8 ï3aÆ#  “}çül¨-Ãõ@yƒ ÇIôú§]õÄ3Í&Z|6s)΢DVÑúx÷¼ÎîéÔfšÈ¶Hb¸ LA‘ž‡2ljÔly‰¥v—£«:¹–ÍdÉ]Ò(íà‡vôýBÙÌ×@óû‚™ï×3íÏMáíw÷ù™ìç5È~mlý•¬<—0.[Š1>0º+9úDéÞæ×WÕK{êûž”V&Èp¾ï~0©Ibzkf½wµS,ª-Ò«š<õ$ˆ7@O†Œz»@y÷¦N=b˜W’‰‡½`ª¾µ Æ2n‡31ÅL&ÃÌæÑõZÄ’Æ8›lxÛISª•Lös˜Î’ó ˆÙÖ.™j¬IÃ}€ïkÝŽrí²hÍÃy›"¬Gƒës݃Qƒrü<Ë[ á ìloÍ[ÈÇX ŸðA¶oÝsBÖÎ*û©„Üi±JA6<<ëI‰ihÂqÆ<¬ï5rêë1–ÄtíÌlõmíöPK"½Ù Ø'£¼ ƒUãHPt5´mT¨Ú6Ðæ­y®i?¤MGO/˜èdw$^éžíèkc¿¾òQ¬÷BYU7”9o"!hepæ÷4’Ú+4o6½Ó·¦é§Ô Ç3Cˆ uÚTmŽ vUlâɃPöìˆL€ÔõÉwŠüRÙÚôñ ò;m3®ß~ ¸ÀV¤,=Ìh&¾…"ͦŸ5L§=žx0»óWMœ3==ƒýSUA¾^«ÁtIÏt1SCÿ“³o¹Ñ9`8å1M%t@òaŒ:µyÃ<øNÒqÑyí]ÀXo;Û¸f-!}:Dr¦ÂSÞ·Þ¯æTüTë¾Á}Ð{œ[é®Þ]Ç ²Ã1Ùƒ®fÌw9LÊ`©¿©™#—Ï Rxß3çXìÀK»J°³7pǪ›aà CûÌôÕ“(ïàpg£ 3ËÇ vfÀ·Utí@f5R~ †*†wwÖiJŽÙÊ̇ŸÛžਸâñê-všæ×ÌrÌVÝ\å;íâ­–ÖpBöwÁSß#ži@oj [*±pR~Jb`2gä%¶œô ‰ƒê„!æÕc±Î O3c€l&¢f);9‡ '8î£Úãci l‘À àŽ`¦ Á=¼Ùådî¹gx,;±Jƒ³sN£c÷ðJBî)KÔÞÿÝC—Þƒ¿D]{TN'ÏäÜ«ó[ïÞ%SüÕan´ã@«nu5B±‹Š"Méýó×þE(}™Ç&ßäö„ð-ðk:çi ¶üžÂ˜S‚5Õù9’–ñ8€¾'žßHÃñž³jÙ KÀzÏ>5מÚ&Xvãè;ãž»@BÒ–íìw,ªÞéÇ z¬Ÿíªtýu¶ÌLs¿¯gŠgoRŠ¿¢9õ sêg’˜Ï$+ßœ9îÑ|¯“‡KÞÕæ{ÿ,Íæ]ûø~BÛ×’¡wÕçÏûW•¿ÜV\_ïùIÌ5¿~\R¹øÂ˾zÖœFŸ°>30­Yß ˜&ˆ—Aç2ǧ ¬W’›píòåpíº4ÔæâÅ…5:?²_–HƬ5=7ÌìŠAäÝI³ží’3£Û  mÊf|uah[K½¤®ÿˆó.:U†7Î^¥%4²ì Ù=6X~a±ƒ¥HqºnI&aF†"§èôL’±©Þ¦šÄ†H2ø,ÖX“|˜UXï—[~§—$³<Éßë»ã– óÇc€ìl3MÑ=`ZÅm«á®Ú}ÅG ÓFÕÎÃn©ÌUîM8HöÆ_eû’\Þ£;³¾f-'@ù­²6êÿ€{~ñôì*›47Ît¿ÙÕë¹ÎWØ9#›ßMÊû”6õúuÈ©›-ÛÊ0 ".#JûŒÊ€$À=ŒxXíØX›]{xЩ óÝu—jWê¬Wì(Ì–Ù´ÆÝ_‡C ¯Íw®Î>ÌXÇkÏÇ&(\¿YßW‰'gE[H§’{)š¿#Di{h?™aIgÚ8 oÈkoò:£ú|>s–¬åê‚$âbwL3ßü*ï¥ù>¢ YM•w>ÿ9ÀèwÐßÀÝŠ(ri2˜lßß rMyô˜³5R¯Wc½¹dë±Ùçë|ËnÂŒz÷¤Ð˜Eõ4í f£yÇ„¨²ŒICêÔ»Û®zV2±dß N]û×À=:‚¯Æï²ïo¤Êüê÷_¿½ Ýgàø5ÃýLËîÍýWòÚÆú£êW)ò_gÈœ}òºŸ‚÷ɯƒ–hBEªti£*—¦þMqéÈ™N³Î«‘ØXëŸò³ä'ªÅ-#°Q63‹ŸR¨¤ˆ% 5tk.¤v‰²ØÊ6¤Ódii…­r^Îx.€X–"eRòñ옮œÆW‡|¯›.ÀšË·å©yêWLI“2'™r9û¤q/ø›4îë.L,†‘Ót,]+}§Éu­‡Õâv‚ž¦[0^‚ä‡p«¶|$L¿µSÎ`0ã¼CÞ5Ûh%Ìì,¾ÇŸŒ!H2—¯’aš‡w2åÊ!v¦Üº¥¹&ö¾@ó@" §ZÛ±õúEÓuB-ᲯO`¿È»°õ“ôñÅ>2L5`G3áDå¼ÃÓ³½½’óúägÅR³õÀb²Ã)ë‰"Üc[ŸCsäÀ—“Ø ±ò_þˆo ^ް9lcOØ ¡iéK¶ Ôžb#9£kŸÂ‰iÕbÛœ} ßΖ4TmiŠ¿‘½ÉUõs'äpþk‘\ 0Xš yœ´“ÄÓæ‰ÈYùÔÖÏÉ7ï,š„B6Øåý¦ªiÁúÙäêëö¯Ïãï-âûÈO‡€©öô@ùþut§¬P; <œ9=üGÏìAÛgOUýùIžÕœ'ëz¾Ke„øˆaZHT±uK™ †wï-í Yk¬4ÞÀˆØnTõN:e0áÚ•›Ù™îBó€ø3r¦Ç|ÎñÝJÍÿXóJ*óý„™'\õ“ˆÆçkÞ-TúN”䯄×ÿšÅW¢Ð¶Qå-Ø+¯¾¶gÁW˽môyÔãû–Ö÷ÀúÜÏpïÚá×6ÖîXåV ÄfE¿Ãw÷y—æÞð½ŸËàП˜ÈñY/p7¨Q¨ÈŽI”q¿¦UØeË:3TXà[°Žáuý5<„É0ðhòî¦Ä(ea͇óNDâfÍÓ0`ÍqP”eý­m Y I\ÐÄ¢lO ¦BÖµóZŠUüâÓªeößí§J¶‰ÕŒöN Ï dmQƇøKÛ:cÆøÇv‚Ì$ô«tk,àÉ”^+rŽ6NF< ¾“^:4çݵ±4|ï2yí}-€ ßé4:ñ|©€3zÀz">‘ñ]t !ó$pÆ |MºÕ’õ&I¯¡ã4ÒÅdi]Ù‘Į́Áï„é-äD6Ë<Ì}'ÛÈV¶áoBáHkÖïC¥²¯húPì}Ân^kÆùÅÒÚr Þ{çjwÚzÏEx„ýÞ›çY¦¿+.j‘Lç•ù™@ó¾˜}eÈw–IyÊ—ÌK0s.ªç×s…ÎÑÓOýzÛ²§3µ5ègÔ£&×°õ6Ä´E»À½Ói83{6l6•dû+ë¡r”ú ×¾øu÷ÑrÅ“cøfÌ©{zÌÌÿ™„«œø.„Š!ØDRá3ìä]tÿFÃ÷6³ú×Ôá5p·u„Ç$’¸7+Ï]@7Ë:›€ìÒUëÙ²ìíX‹HÆÈ®Òs'óuê¯-]z°¼îÂÁ¶^}"ŒQ¬Ò[ʧÓÞ/Nú©¤ùŸªš¸3^¼–¸Ì=›ÖLÚz§°¯Ÿ§uƒ…êkyý¹ý/þn¦ûs•ü“tšÏ~ ¦9›M"OÉQrÓ#_±kMËirff M²h:½ÛX…æ»W=yð–At[ªÁ‘™ì£«ÕD—€o6aèŒá×Ù­ o¾\>#¯û)¬ü‚ïi¦ìXIþÚ]ªlÉkY2’öV®@ísÒ³í­mM“ïôGlƒX…÷› _¥+œ¸µÀý´ù‰eŠ{Ô1ïK°™‹ó^7ÑNªiùM¤AÉÏa&$Ã`=¡ìÓo-5k:üàÓ³‚~ÝšÛ†˜¾#¶Tö–÷Òb³~§=óp—®#`_ó6êy‡Ê‰›õi÷õ¶ã ùf[63£ ˜· ãÎý¥E8²òH@Ó"Ò\;À½e¥áàÛ´JNšPÞ º3[&wðމlü5]øp¿jEåÕ¿DbäTÞbcwÖGñ™B)ï qׄô5€ûÙT™ï×*=³Š¾»l–å ÈîR÷wóAºïC}ߟéWéïß_^iâ;8xÊ<ƒ—]µ6Á7àŒsíøÐ­a¢:rÛtj,ªzÞù³Í¾œ|ç² (w6@C€È,ô‰„ÃáDÖÀ¯–Ç_d=§‘»qr$*Óò™fÄZïÝXÙ@<óSÃ<˜€{¸§T†9 –ÂJBTw¥rǘ¶€GˆPh´k¾ W1ˆ' SÁ Ÿgˆ£dÀ»‡ðå‚Î0ý<·Á=çiè÷ÒÙí‘5ŸÐ9çpóå]œÔ{îÙ!‡™×êÙ›ž;šRŸHÝZÀ㕬ý 6ìnê§Þûì›»ÊN¾gÝm¬`i‹XT9—”ͬmκ¥äÉ4ïÌ2ÁÍs™˜ÈIä¦7i|Åžû¾[¿.r:û²õÿ®ßû.éß=ùãïäµÿTKëOÉ{¾³ågžÊg{hÀúÎ  ¸Ÿ:ßåד€N)€&ËOm²¯ík(ÝPøºæ)p¿Ö×ö0‘ˆ4tòSJfÏó¹±­ÜÄéUe\Öë¿Ö¹Xù@yB»i&²Gi-7‹ªšDLNÝyóî1ÎmµÏ’f³êݬUx+›Y u¦J‘¸0·€'ÚÄ®³6ë¦-­äÌDö£•6m²‚ ôëh‹•Ù;(YŸ{‡Kš+Œ®=ZyyúÕ)›‰¶o†áf½n çÊÀA€†ÞÙ†”7îÍŽÀ-¡H/yEà7k4ß­Yïüõ¶Ü創?nÛÝ _«+7öá#ì ˆßöÓðÜΠ̲÷ð÷á¼cǤ¶)ÖIÍ‘r TZÙß2öÓÚ_ŽÀ¤*=€)•Ivxõ€QbßEXj* n¾:w”¸èìª÷äí$ßc·´fx“(ÉÖ¾7Îë ÷0¦srüe©8÷;™ô§FÊÒÀ}ŸÓˆ@"Ýœ¨|kfº¯óJ>;ž„fý.â=pØé_å´MÅ,{ÆGrþŸJ\c4åÎÏ4ƒž5ÊN"øiÏC?:aFî(î¼­®37&CˆÖÓ7Ü7n3s=89õëýî:³{úhy|GSf–_—œK‰’Ä'£¦{UOPžÙZç< EXKy÷píREòòñ:¾T½›!ã}VàÞ.µ)Íe{äÐxihK={R-ŸÄå×’›wÿ¾H•yFíû»93φ h …k?!³¹:6N£ÏtN–ô~•ÿó›c(PIÈ»þ;…Ãý,.»€  r”WvØ' 3çc·äÌE­‹Î‘ë5ßßðúª˜ICjg±ïV |Š‘ñQ·÷È;y2k›Î8osêd艉ôRÂÅànò 0Üz.3hÎ 5éï1¼&ØQ†#šø´¨2$ËàaíÇZ ‡ æàZêv?£?ýI¥#‚œÀýŽTL’m”Ó¤¸žKsë|"óÎþÛ“ó#y† |tçÝá èWï±á/Óß|ÿzVG=š+Ï-Ì„ˆœPÀ³þGž½G¸ni1"+=â÷ˆ†¾ã£ï–S‹«œ@g¢~chì°ZèÖ– w(Q…ß=¦‚Å™åÒ€¦Í| †$‘ÖÇÄÒ±^ ôåìÓ9е”ƒ _®Ò½ùõXZMh ëoµVà…À—L•¤È ǧíU™Ê„Ëáž‘Nq“Õd7fí`ä ò dTÜÒƒ™ß’H}šûTñ]èFˆ!PÛó½ÞݼoW´$F±fØmu¦+ÃoHµ‘”DXÒ|³÷È¢øýÈ<€@9ÿŒk졨tõÒé4ðxÚ`ºþ¿ã#í‰ú¼tÖ¸MD>=„6ÿH‹ œw:Ͳ©^RÞÍýµð¦5ñWݮⲟ¯èÀ;g>ÏUÙœ3ÍÀ€õ}Ni ´È”VæÑI2¬¿rÕµWµå1ëJIL·«®kºñ‘sñ{%Ó^Ì4##_¡W1¿Dãþýôôß¾¤é;” †®S'°ø¹Îþ¹áµ‹ŠÞχiØ÷^jÍë´™¯×Ëv™ ŽŸ.É*²ïOÓßß üÁ y¯TewüzkÖ™ašÏ²9ÖÒMÏ@ø>•ñ-­Iâ» ž[ 7-=ï&Òì‘‘têÊv[$Á°  “mÑR€]kâàÖU»cÜárÌÐKÖí}] ÕFÏ'¥äƶWe3\@åÚ¹ìÂ8´#1Æaà |L¶@'ÌÀ‘'éÅl«—ÂÁ·d¨Óå÷VÎR…é& wÎŒju3d2Ñ¿–‘¯,ðHÊ)Âa»•³„ÌgÅØÊçÓÆ\«Áêß;X0ÇX”Ë…7ÈHž7]‹[ØzÙô¤Ç*רaŽ e:è°YÏØÙֺλOÙÊf`Dg]+h |ï€ÅÒñŠ-Ã{1%ºç/.Tí4ôA†/÷fFƒcnöéËÉdža‚õ–Á$£}aŠ¢f FXE5ÂeA3 }›¶Ã‹w"PçÙ·áuÎ}Eü|o(¯¦ŸðGK—ÌYÚ…FqÄbÛiè=;¿åÙ§=T¾ù^'P²= sn'ƒO÷ß!¤Ùý*mHíÁm+ì­TK’Œsyï[GpžöÜ*œÀý„é(ß¿D xÂ{N©lyž]Î2qޱegÎìÑ `rý䯬ç“çŠÔiñÀzå1¼¡·,(LªŒ¢—DD¬{cJš@ -…Ý¥¶gßê5íø¾æ>âUä¯(cz^–.ÿ*&r–1}gÏÏro€&Œóï½»¿üK~*I¡ùlÜvg¤øs75¦t¢ê™iãnÿýM‘Òºì¿ÀÙ|‡›´téë‚§h×v°>á~·®¸ ô{yÌO[X/üÕœšŽU¾%W)4ªäÝîðÜ ê®K›ƒ(Ã%ÿð4âm{ ¬7ß½ ,gÙY7Àý9$èm”î(wqh1•ë p;ѹf„¶aë²ô€xà5o.Uõ+á ·(`èL9ˆÞ¢¥.O© 0%¯®Ée|‚#[£†>N¹F[š©ï¼Äâ#×sφZÃ1Õú”«« ûÖôÑ,îp„ÙR\ð 4¸4po–]c+`+ÀEII§ªÚ¶ì}’ÂaõÕÝÄ©> \ÐÀ‘›c ó× ·©2s ju ‹¼ó×YØšì¶„òŠ3Z±fægÚL׳º§S¾¦Ê´T&úõ]¹žáÁTÏw!Nm…æÝäšWì–18“ŸABÛaÙÀͽù!™+³iÁ*¤ÀûšnÞC£™áP>óNL'åÈÛÁ‹ gÏæÑÖ…ó}5¿®Ü«¹yÀt’gºOÀ¡Â19C'±A‡Ý× ’ÞÙNÈi-þôxDa•éNsígøã¦é¯,¿ ¿ò-˜Ó¿ÏçäÌ_{£¯:gZóܽìúu›J™¿ZgwïMë~²žï¾îk„ƒÖçÞ×÷0ëfÑDNÓÆÖèàOKë{•”oeý}ÝœúS5IïƒìDÂÅDø~ö¹¹©3FÿImýýs¹Å¶ïþkaÒÝçùYÎúû93û>ÕÁ+°éñè}κ?˜½Xøs¥»RŸóuß¾Ö4³vzLÇAîa‘ÕˆÛ-šb¦ *„ãmuíáAûfòLÒÜ׺õ,øyú9Íè+¶·Žyªó“àî¬E:\ÛÛ ¬¦Ù0?°NÙžw¤ì‡£ÍsŸAÜ$¹4 ÜÔÖ8k*N^±Õ`Z£dÅwgþzW29;¡†ž½ m5ª.бn=‚ì#€ø]8oÝ%{h°Îm¬Á·’˜V÷¶bž«Q$:˜o£h÷ÈúDOò¿Ì6´Ôýw!y,­BRÞu’¹*SIôdëÑ÷Lw™¿¢´y4ÐyÁ> ¬Íþ&¡EŰъ‚³núœñ‹H‚Ö‘t’ú|…Ô-äàµ0ô_­sŠ ®ºz统•òÎ0,àÎ~¦¹6¯ÞÓ×Gî÷åþ“Ém0_<m™í´öÐÙÛ뽈k.ïšú–î°Uø1ÅFöóOÿ¤£#¹Ýþfײ‡ÇªçáË“²ß‰@3Ö0Ÿç4kö{gH™³¨Ú6Ð^ß@6@\Í„¶ÊXÌiˆßŠV¢·I·•î Nþÿ?rý£2ïÄ!/Šy […/|Ÿî‘™LßÙóJtò‹kýzWZ$ÓšþNëwfûqZN;ö Þ0ÝB¤Åï\~úõ;ÔýòÛÌt‹L’ª®€f:­x²>îÜVè ÖÛ0šAl:·[Õíüˆ 7O{sÒW¦ÌãiX|碌ç3ì[2G!Ïsy_1Š9“ Jïnò×…DQ‡›¤Þa”±À¦|ç_þej¬M×Ú¼3Ý Ð<ý4Y&qŠšÛ†;_ßW«líÍ<Àèk €˜Fk= ׳.Íg7¸—‰ßËá9þ©>ȇ÷¨¢½5ñ04œmèß&-Lj«q‹sØ[›S§ÁÔ™)†Ñ\º”Ê­œk0]«Äž=ëÖ+8¼ ‡šóa–^µÅ³çy2›â“Ö¯÷ãîhGG·„Ê£O™eŠ—ã<ßG¬2Ã1 hiAÚU\)çÞ‚ìYó fokLäͯ§ÿuæÏì)7p9ã;3e"q¥{´eg§†¾Sn˜/Êà­çpúÜãsÓ|¿°tIæw_Ä™éîõ°»ù< z¿à¼eF—¤öžOÎìñ^Ò$9b‹Ž6Öbwí{l©gªÌg©zo!´“~e£|‡uæ6|èN"š”õ?&¦W8š?  Àg°õú¹ßWð?­2ä=ÈnZËh>_ë;‰1§º^\KâϘ*Ö·»öãÅeý54ßÅ-°ÝZI^ÃôiWm^ü”ÏÈNˆGÞâ™æÚwFœF6«ÔŽ'&’-5w&ÙÆ¹ˆå¹>̺y2L,æÒç‚Ûé1Ì9ñ Ó“ËÞM«ayÕ¸·*½SÞÛÔËú‹dÏÜŠ¬‹2å¦Í©É!ö1ð] ,ï.­¼™ýÊfRíÄ-Ÿ[2ÙîYÉÞ’€ãÀkD‰®‹—5Žõ½X;E@¡œ¢ŠðæÅ{Æ …Ú½l.|²Ýmã;•Ùa—wÑÈn]m)ˆŸ@‹y°·òNÛ°»ö&à6|tVçðÞÏZí»qˆ ÷©¢=û9‡]QÔq¥3•%<úÔÁïŠsÎOî/ž¥;„òÂ+Á DnÙÌìF ¬OÞ‹3! —{Þ ‡X=xàÌŸ®6€¶A¶·É À™þ~ùLøA¾•NÖó´t§Eh¼Jƒû¼)b>%¿)0CÌqÚž?³HœNGîú†%Çß©2|=€dNRøUšû]ÒÕ¸¯-Ú M¼Ü< >Ðü:ò¾&òiaÓ{A#—úxø¡Ï%(žR÷°Øxü=¥ÄjAÉï¼Èw¸§ˆSü?}ýõh=|¢‰ÿN¶Ì|×£ýŽë=q‹åGÏ’„ÑŒàj{!Â}^ð÷úùj”¬0f¯Kðç}6ª ÖgHe† øQÕGYÎz9x•ý0Á p\€ }ꂘQé( ¸wŸ®7,’Y~q\p›íÎ¥MpPnƒ¬2ž_ßÝÿìŽÅ  >;,»³Â÷~½;Šð”khÆ5à=}ê²ÍkǾ¹@¹ ܹåh¿[¬³a‘ŠO£Ï³¢ X'}¼­¥VêYÈ«I6РâÔpîˆ|ÿÈ¥O^ªE;!k€€‘ÐXé ÁL4ñ|2U‘Öøî€e‘¬(ÙÓÓ(Ó Œcº<Œ~`½¦IŽ d1–Ð>ÔN/Iþºšõ†qg–K u:´Ž÷ؼ2Ÿ­ õ[›¥ž©,Qô6pwËÖds´‘Üèh­Ì&ïëlßl r+ÑOèßu9SÔ•¼çöú€PÌŒ©<^ŸOÃÓY”¡ 3*êã9sÖö^©’$Ó©ùZL&[zBö|bmhîO©3‹úývÎÌiÊœA1OŸ|[—4%œw:‡þõÜ‘3-k=w·†õ2÷î'zú¬±Ñ6¼¸Yøì.Ï­ïOøÊÎþ…øüìK¾ßþ=Z«—®ŠÓ‰Á,ÛpÎ@èh¾_gŸ.‘µô“Ä’Â~ËÜTº“?_×HKšdß;m&…ŒÝ®î|öª&)î¬ß­qú”¿Û1ÿ³«ÏµìßyÖÕ–üÅ.½ueŠüdå?‡àßÙŸqð¯×Üɇži÷ßcÙ?Ó¾_5~%8ò­üÑ':µsçïïÔíúa¿æÝ£­·š~ëÉäǹgÑôÏõúUZƒýE>` X_¨YZûNâ»K‡pífÀì˜|÷0ÜšD“O.ZsX ”ÊÝØÚ"å1(Ú£>çÈ…ÎÙ¿&ËfâÝF1±\Z„òZf×k™šâLE†òñ‚õ4³ &s¯¤<öÐVÆw¢°€à X ç­®wÏÇhEf@¼m¬Óh•¬÷žP¶|'¯+ûˆ gxnKܘi»”'n&¸Ei¢å±"½µ¦or¡36vv7íäª×ãäµÏGÖø¾ÖrÚàÖÝ&à^…4œ=3¾ûYu `ô檛À•î|t‡m{=;ŸgÛU[ßÀñLgï¡E7eÎáDÎ!Aç¾î·Ò]°Þ}¢‘5xÍFÝyC+éUóÇfªf¡àZ&ùç*‡„õýûâ{q>¡ùTEhÿðós “ÝFÏŽ><3gøã„æ1’Î §³t)/rÿ§h$õaÍÐO3wóÓÌEYîîs -Ë?ù,Ùæµÿ]@ÿÌrÊ)ù“4ýw¦W¾æËï#Š¢ð>ãøï¼æÌÉ+ð=çdžŒ2ÏÁäõ”S|â÷Ûäq2–xãÚ>{­k¿Ò\ý€;‹FSu–pá¸æSÒÔªwMŸ^Jà·ßì¡ã#yÜ2Šp´Hþˆ,AN¿Gøõ–ÐØšœL–_dKM¥±Šê»ÏR ̇GΡ•àÛâ"õîó„ËOH"ºvã#B(¶‰ì¸ÐeOÂDÌ %m²Ô¨ìè¶¿N³Ž€Ç¬5Üá³mWM6v3¾ðŽä½@R4Ïþ±¾Qšƒ¡¡Wç˜ÍþcÞ,v¥Lêù*=1Í`£-›m-Ÿ™p䉛”+¥}žuí¹¡|§¸t8cç–Ìxǘ/çw ýÈ!Z(ÒÀ¢ÓWêD3'ú;jDö¨êOI Ÿ[ Š7»WÛ–Ú¬ä´`î¼l˜æ0èÉÌAomdççÄTÚÇCùQFäõ¿?̺ûT5ï`,’'ƒÿ24Jµ“‡ £ÃL74£<›JÛcÐ\û”…LÏTøf÷„x £ÍÜg¡­œ)Z òÅFK/ÐRt´ûìYów5f‰2 Pëû[ÜçÌŸz÷ ¶ÏyÝ =ÏÀç–¼ÑÚf݇ú«D “þ]‡‚´]$ͽ[Zãnü@è’$̘à.üMÅKît;p÷þ•eh¯¿ú+‡누õë뮣KWIÒfNù+úxîqV2‘(Šüž¬ÜœWÈíßUø¯â ïa.Ü §Ë«´“ï[<Ÿèì¿FùýäœçÐß÷å©'ߪÝ÷ò×ß*Ëý"CÓaXÒg{S«}u:6ø]ÆýœŠz½4Ùú†žóÇv ÷{Éhyî9'aÜ÷”÷nxíè¨ðКe…°NÛ¥J–=*=ïðª½;©&Ò“aÐÌ%Oö½m¯ÉOK.Y12îø3-Þ#DÅÎP?ïŽ3míG–}š\„¤à ˆ)_Ì÷´¨j„MF¦ÕÜT‹I½ ZQ0çHÀe¸|cï¢W~³ ©-¤ÑBj^ ¯k†FÀhèyw1çýÏÿ‰t°Uû¾ Ç_ÆY}¥Âéi»ŠR üF€ø³¡¶‹–RÀÞêú(ÈÛ%H®9u‡1q ˜{)EÀ´ qóô£¢‰PMmçÀtÒ‹y)ɎΛo0@¹SÛ­+êdôÎ¥‰K°’Ôc(q;Äè9õ葎œý©-³9Sk´ë­á^Ãý>Z]á­'pOe3î=Э´ýذ¿x ”x…q¸¯cëfÐîmxÍzÀ(rÁæ³uœC¼»ò½¸\x†éýM´âžlÓÝR$j®{RÍeÊ ¢…4mÀm•9Öp_% œoÖ–â°øV¤aÅx€î‘dîBàÑ‘’Ž•”韃+ް½þZ÷D£nEЊ±ŸçX\I±ÎÛƒa¼o”î©gòîã"éì‚uÖ ˜a=eåñsLÜÀ½]Òg°ï»&¡{‹ªkÖ]oíd÷ápMnèmÊû{²“Ɉ¾ü,D~WŠóSÅL?‘$óTºc„bfîKš`çcË{nW}לú&ž2:<å4=<èV¦5°&ä±M9*ÝÓ´ F$cR‚–@ón9mw¿1‘^"Ìh$Ò2ë_»d*s €û¿ùRàªÃ$ßã ·Zí¹¶¥&ÒXFŽTˆÏ™cúõdN«ùVpâc¶gx 4¸gŸ@1nHtd² ȃéo±M^“{ÓJ÷.«b?ÜPC â͇If‹ ÙÏάóŽL¾÷Öæ;n>…Dòs'ÌhÈ@“ÓÞ×·ö©†×âæŒß ÃHS3$+ïÀ€áD¤ ’£„$föC`‘>Ú†trä{ÝŒ <}¥W‘±QÆ¢×3ÎL?¼xË`Z&»»ÿ=Óçæu)OÃͳ5®Ø×Lƒ<ö ¼ŽiU°Û¥KžŸæ¶/9—¡„SÓŸ<[3×ÑÐël{?ítöçã{Ù5ß]6ÕüHôÞú¹=y×$ÉtžŒ°>³V»Ó4˜†ø-=êa’–Ùõ]“º3ÝùE÷|EÏD9‹å\Sšßʾ7ñÑ¢žÏ éQŸ•vvb4 gvw–.Eû¾Ëf$Œ$ÎpdÉáùÃ5dJ[gË4LOyÓÐf›×Ôä•þâ]7†~_×~Â|'Æ_LŸ@ÏÏ€øóÔוOƒmäÚ×s©ÇŒ{‘™¬äÇØú™¹Í¯@%K‹W²“OZW'G¾^eRÛrzŸô’“þÝRƒX`ˆçÏlƒ?¼â{Ì‚4ëö<ç"¦H&gÙsçÏÌùpÏ©^2`12˜@üˆO´‡ |£믨&ÆÞ­‹~ËQº ˜Ôv˜þ]qÞ93or$ Lsò¹Â÷6§2©™½;™'Úd½@˦ïëÃýãe¸Ò¨–¥=€€lo i05Àv':ï^±–p8À0žíx*{zº¹c+…ÅI^g‡£jËi߯„ûÙ0 Ü¤gFX®ÿâzÒÙ~nK¯dêÙjzôô–^™´³C¦õ,&úå÷¾Ï¾å_¶¸YjÍg†Ejü%^~:³ë˜ñUÛš|tM¨Àå8"œu±m4ó ©Or®žf=NÀ}.{h[áL‚OõÒi{m%}/9£ö9„½þ©ë´¶œfŠF¦Q2À= 5Ü)·Ÿï%’]½d#l†‚ÉçðµŽ* ºP;Šüz.ø;aú,k~JD®{U‚rm„lj}|?k`ÌvRç8殎Ââ-þ„ÂíÙ‡-I2Ù=ƒáV¢O3wæOz¦¢Uõj§ÀcèY|J-ÂÙ}æÆpS0ƽ[x¯BHíRÕ›tÆD’”çwa¿ì:êöà.Ã`økfw¾'v¢gÅçÐì{±ï†?~U ù¸§„è 8~?Ñå•ýñgí¡ßaå¿‚³|Â0í[¶¡ª÷c>3S'ë´ãGxõ™<ô²\a¯vX=º?ì'̯Ÿ´ˆ­oŸ =?°§¹§½Í¿~¥Sߢ2Œ1UF Ë•:M-ûdÍ»µk:ÙÝv7•îI›qlpð•7ƒÅr¥<·ÛàÀô–äÃ`05$ËnN.²ixMÖ ‘Ž 0ý BîÂE0lG’tµî*|Rer´¼J¶çqëÚÕß›?ãðøÿë¿’‘Œ"|2î­çfà2>ºð˜Y¤›m¦é‚5'^`E=y/¼.ßWÒ¥*$„ã\7E9éí¼…Î˜oûl§ËgºY›,|dëkù}q TH³=/”a8´ W$"ë3?3¿eˆ»É gyÊov ¾³ãî¡Å6mvä%‹fêã˜àÕˆ/@—윃v8ˆY‰­dû¶ÌÂ1“\ w’­÷¤ó ²“!ëì³nÙƒ„)0ñÝWtûVêvòL³òÍ(gÈ$?ÚßiCðéLXk8 Ù­%â·6z&“Ät;-ö04žîCÄ} ¢Èìp6á¿›ŒqS6:iB Äȶ›âœ%`vH iç´\'º´dÅ„û]ßfY3drl0ò}æè3‰'ÁøÈ÷ûLkß{¶àkíw&üDUÏ9çÇög@dÛOÛÀÚ¡÷-2œöSòd¼&Ÿùî˵µ>¾kÞé¬^2<šxâuWJÂL÷æà“!Ó*ö â!œ:—æu6Ý¡ùº…æ…Èù½¦'ñ;õLwêðï°éß—ÜÜ¿.ЄŸ\4Êן•|ó5ÐÜm¸ÞJ¹å¯Ó— 'îµÑó=­…"S3ëTÔ£³à+ø~7^¼Nƒy§°É#d:•›ëSÏ÷G· ~ZGÑ}¯.¯´ïw ¬9’aù®½dȸ‡G0‘ŒÓyˆì m­ü̘OæºÏ%…¿ÀqÒÙU½»ýڲ˯'Cø¾´Ñ 9µêDºãEÏhH@<“˜hôåìÉJ'.ô«‰_ûäÒÏ EÉ’¬aÛ|Ùö&ÓâÃÄ«˜çý®›‡ó ¼kd$°Ñš_­vo`mÊMøõÖfãt½"ùãLq·¶ÚL¼‰¡•ý-Ї €—Ìœ¹ò1Ýîšo‡kPdœeKŒÔô;ýÝ‘Îÿn^9ò! ¤ô #¸¸ùµ„9s:\ì§ žš!–³NÑ’--øachØAÓf¢;絬ò;ÒÃÀ²¦Û"Ü@­S½˜±×¯8ó칄¿ÏD®à§á`æ|n@|›Yýäó¬ÖëÏÀÐd—Ø\Nà`sÿ ÷õû±uFP8à«TøD@ò©vKnsám3Ý_e¾úÕÅ®e¸#+êÜw oÓ'÷ߟLcÅ䫨¯Õ²™6ìîú䯴ÊÏ›ïãÁ ßR™Vº÷{o‘U·w™gx¿®÷ˆåzÞiæú©j ÑÂ?~¡\Ù¬v¢–.y2¨ÛíûàŽ5¼Bš$ÉØ–7]“hê&’wsû¼ýÌóŠÖ m·¥Ê|eN½_OøÎ{‘…ï&Ìü”ýô³tö¯u䉸Ùïrá÷y­½6÷C“_&h>‘ÊÜPO\N@ÆÝ‰ÕjïÏ‹Ÿîž»Î¯Å“ùÞ_¿Š qŸâßëÌ™]Ѿ>W@ÀeMöœÉ+ƒì>òžªôùZü#—Ed]Æ4 ›’ïÞ¦9U¿‹šÅï É„^9Q¨Ò=y5°€f. f¼(¡YlqŒžò àZá´ cÜ;²›íÌ“ §ž¨Ì°OùoD_hôð¾#ð ~ÁŒÀ=ê|Àh² lx]ÀkÝHdýŸzúÄ)¶^\€Ž'vXå=€~¹|'¶ý‘Ë ¤Â)Ö. ¨êÑÅ®ë€CˆN‚ϰŸ"'‚àèŒtBO%:–ö¶ží;zÒÙ‰äÍ·Þ½…mô”ïG窞•÷» 3ð7ð=Óë: xï±´ªÅ×i~5SKŽJb.ÊÉÙÎLBÏft2F3Ê]"Ã'©7ÉñZi©…OD#LjL¥ë;ÚÁh«ùÍÎÇDÙ­EÀÍqŸ*ùÙ©Åïd-ÀNƒ1® n±9å8)®¬œ3 {åÖ9SÑÆÊB4ßÜ©/“O«®C…nØíO2 Vˆ¿'Þt¾ûd¾Lyšz#;ipŸ:-Ø÷dØÏFÕ$]7¤ÎGIK‰z@5sâ×_aÓöœ¥`-F²‡!3] ‡µ]XHf¥ZvÅ~TÉï!’íêÄ0füøí¬ùÕU¹µ^Aû©=³Ê@ø½n©— bç«#ÖÛ´TF¼Ô‘O试ˆN×5ø¸?“çÃûœYÿŽ4å]-þÏîíùú'k\fÈæÕÈ xÁßhøý¼ö ÷wÜ2ßaÊïëÞíp}ËþŒeçÆùdZÊ6ŸðºØñ øv£›À;~½g ¦ÓuÞÙðë¹H¼è„5ßÅ6±·fÐBšLüumÀzM™Äô–⤠ЬH†›+Ã$"iš \þlZ¹4Ñ»;DQ£Ÿ!DšYM¼é©OöƒH†íyM–ÍLˆH¤«u¶´æ‚.LOa“¬yÀ¥L6Ë ß[„c¼Ã¶äxÒ]Ú©Ê?Ò‰Ûö,öfŸenozsì;ìîN8ì–µ¨ûw¶Á¦X0M´gMú™qáÔ9Px½/=û»“½ÎúÀÐS»‡Hªbop)c퀡U¶6†šˆÂ·Ð$uÛ»¡y/®RCORÉ<‰þlklkÊ•¬$\àÙO¤ *ü%v¸¤Âžõª­_[^É$iùŠ:ü®,oªšw?%LÍ› Ç3K¹QD&‰¼ìFÞ¶¢žª}^%ÏR/>×äSm.ÙÕõ¾œÁh¦&ùô¼„Úýæïg#i< Z³;¢AoHÒ–zÙ ²ç®SW¾'Ü›Ÿ0Ç6ÂúýföFƒl\£?^×cøx?ɽ‹ gl"¦Zã°û¦¶'zÕú³Žgíy¿Õð{o¿žË±1K y4é1¡„rg ¬‡z†”IS„1v¹ì‰1×åJ î S>sfÞÉÐ{™ãþ~ä»b˜ŸŠkü©Ô—׬ÿs(ÿnÎegmŸTò½Y¶fÖ­ ÕŽïF߬Ø}0.pzÏlñ\úòî6¯Ê’ö£âFË÷À •¼~ö5jŸÊx ’°Þj´í)³ÖÙï#o%1p¢Üþãë C¦{`®½ª.=’ÙØjr|OêET#7˜ÈŒìcWm¥{Û€¸°·rωOCþ~†HN€Þà[ý7).]ùÄ‘$…F1ÏnÉ ‡ W¸ÒVùJ¶l z‡!&þoÿ–„rÉÂZ²wÄK“óF)Hgjø,or°Øô÷îáÝš š{l¬á×eè[›;ú×öÇÉ·ìžIÙghÑYï­î,ù] ×@‰0f± ¶Œ;\Ÿ<=x?vÁÉÌz¿ÏdÈÑ…V=(j?\x þ mñ@à5Ïyϼ|9éØ={Ë£¼w¶9¹üÎué3G{qfZT#SÞ;.îþŠé¸èÙyúN›IÖ{fT¦iõìsíL›®”jønÔuîS|›wOYòjÚ‘˜¿² G{ã”ÉÍYŽd% ß3£Å1@èúK˵×aXɱuÛXaõè„BF£®f=o—›¶l5°ÛŽ›(Ú[NÜHã+Ôñd›/€ûóæÔ_§#ÿ>_WÔ‘‹ŸS>×O̸(‡MtátaZO°á¤È¬Qò¹4å+PÕ—–ˆ/öœZ?¤w·™3W©;ï B¾bèwaÌTÞkIA±=³b€ŒW…M3ÒóÝ–üäÉ„YL¶)4&Ò8ÓúÔÊOþÊ\à>¹ù¹”Kà8ÿðn–LÎlõ´·ê‹Xœ´‚Ë’L(bÓ@¼}a½ðê°¿\jµ±†}TFv¤ ­Ñ°FÖb„e«Û3'ÐZó†ï‚xóUTÀ —×­…5ȨîbpS©¹Þs o‚¨Õ;ž²’ %;!ªnsÍ剹¥eøÄcg!Ö¾;¯Æ¶Â u„øQÿ—Ù@9|¼TKžtšÞ”L,^0ÔŒ¯%YQçÇ0ç:<òˆ‚ø¬Ze«&{´L ÷Ú²¡IC·~»Ù.ï.@dÖͬoÁ${rÍåÕå‡;L!Q›AgEW'´¨˜ŸvÞ)òéìy÷x®3 š'ZQ¸yòô Êñ;8cðÐâÙ}{²¶1˜ö²Cë a¸÷s;º‘ïb·3Ô9Ùw³Ò#ä˜i0-ƒÙú¦9ZúÒM«û`Fƽ‹ŸG­WTèK±}«Q®7+¯>UJ-Ò`ºxt?±ìa¿­gêÙ† uæ÷YÚz–ÀiË^ÎÎãÌÏ0ÌîˆUž ña„Cúž¹¾i÷Ï ª`}ÎBËÁK~IåΘpŽ–Íô_'ãnú¾$æ³¼¾ Æý§xëïKe¾£bïég•ôŸ%¦_oßÚk ^Âû½ð£={d¿Ö¸¿fÙe£/ToiÖ¿Ãè_Ðü8gið×?€§J²WKà2¾9ª~-¶9uí÷i6ÂîõéžÎœøX^,fÊȈßa‘ü’UÀÇ«0Ùw¡3 \ù ÛûÈÐe×ÙËp·*]AK²ÀÙ³3B3?“P§$ýã?¶ÀÆ<™(ï£__ë;±ÉL9ví@mUõ¾îLª‘MOÄ$ŒK³™U¹KÀ"Ð?ƒêŒV’ŒM ê)sœFIª•ÿ­Ø†m€ø2²vOϬqÁeäŠFÖ6še™[ÏøÛ\þ©ÔWÞ£úœú9cÀÕɹ’["™èø9þêÍ™ >µ¼SnÕäÙÃ0Øë¨ÆDö‹uže Çl†túMÍ $¦{Fc§A³Á«Óý-+Z{èÍi6]yÍî'Gaï‚os&𤺫‡s ÙjŸhÆwî q!Zaß/Éœ äŠÉxg¬gmÓž«#oÍg5K ‚Ÿ”IJq6A°¯Ë»¶s4.{æ!þ‡ù©¶Î>üôpw.%é+€Ø>9˜éÀÓÔ{õ`£*mê5)â–ÙA›´) ê#ïXÌ~ýýú\­ÑŸ~ŒN+êÐ]ûÎ5ý0p%Ac©UbÊ“ºÎ©ƒ#3¼ï˜H¸v{0åš?³Øì4ä¾g^Z¾ß[. qÃþ5n ­öŽÜ÷¸ßƒ¿çÜögö]æþ ¯ÿY™ÔW—³ŸïE5øWÕHOæ+®àµ^‚ ±xÍsü;rü:õå;Ÿ©Ø{ËßÿžKpøæï ž‡Q„ÿíß6[Ò×Ó^¯~ra¸§`dnzæ=ÚìÖܨÇÈl\56¼:èú'íª ·Ší5Ç€´Si&å×ÛÞªy”-÷,ùÈ]š©/Ù§ºÃìÇa@ØñbNí»"Ÿ˜²Oso„w¯ÕŠð§R› c·@Öm¸ydËÄtšû«ù5ý¯ Õä’(ï´o6û¹ˆÒ‘†¡&®¤$¡“2U±ÆÊ[¯=«ÚgÒÌ·nNÑYÏ g,À¢¥BÐàôw'´„…ͼA 82žt»Ê²›´¾G3øMìÑ$9G›H³@]jPm®½SVÂ1 èáÈ3 ê øž—qÄLœÁ|íGàžWéÎÝVáŸèû;a= 2í˜|1­ýܯ‚?ó­&¤‹`¦#&{žÎ ™Ò‘NàÚ Úº“s¦¨cg¬wyO-™x“¿¶<£³q”â$jSºEDx4ž†`Z<Ó¦(…aC6Ì´;”…•Ü¥ ¯ Ä;džèÛñ#4C3¯‹®zˆ¢è%ðýLÔé5ýIv3qžMsŸöôõ½¬£í<+Î ;â.dŠœW ®MÖ;”„×m‰˜˜SåÚ¹bð™U,pï•Àtÿån ¥Ål/wÞõ_ìS—”ºöë0Œ«8éçÂàÜï@ÛgR™uÓ‡Aœ/ÿë”ë×Pû ¤vÎÉmîD#Wï—Û3< ¾æûxͯb7߃ż6šìw ò³éNë§C©ç½§Ïçî û»ÆŽç{ -íOÂÚ ¶ûI¨e'µÏ%yçœÀUÑCJ©º±µ»Q÷´™~u¸óuÙŠ0f l„ÔŽþÛŽ3#®:&—³†Ô2îÑš›I/¬ÿ›¿û‚À@ËïÚ~‡Ú} T ¾[Ì$_ï 6n£Å<™Ì=‰.²Å öF¿Þ…Ídû›Zë°«å1‰]Å‹°FÛžÁh|i:¡Å6JU{N#Ï2‹}‡Íg»fEj6çÝièS~Ãk[‘»åÓ1M<Ÿ³Ÿvóߺƒ^¼£ô ôì9™ÖŽ/p}¹¢—¤â˜Óq-hËiÃb*»mÑ× Èv6`zt '߈"“~­äßO˜¸³ÑÝì;ã;ÅÎ{Ew°d§ðií§«Á‚ …¾fã» ïçòÍjíÎ'lEfcR{WqeoFûs“㇃ï&×=È2†`§m²¾¯ä ô#›éÔ içm!YfҸ˩ã¸Î¨.`BÀ#ã¾^í,iêÎTͦɘÒמå,]ê HÝb»Æ½çº¹WêEL¦ûì½Ùïò­ÿ„ø{̸?Ϭò fšŸd±?aÇßÞÌýp½*÷¹®–½î7½[rcàþÝj¤ÏD)_‰OÞ7›:€yò.žH®OÇÌXüÌà ”ßTQÛ@‰òþûò›TAu4dÛSvµú ÇM^篺LáÍý ñÛêÊ«Ïìšpù÷ô¿v««†žXE:T¾iJD5ÜT¸¨§ Üs?Šg¸wR ²ZZ÷¦‚…›q~c˜ƒ2Ú}Eyq^]îY=åÌQõ>»ü:3è=G‰,¸ƒuT|Vê8±FJÑ` æôZo¿éZÓJP©2ahÊP@ìe×ÇüÚl±¼{˜Ú(;B1üw·l6`qœ 0¢j x•÷[Œ¤'I;FÜÀM>çîtœ-¶»â–Ï\ånÀ}gWû¬Î§›ØàÃaRóî 9Ž…ï̱¤M¢yúÖ–E.¥=—ï‘™‡dÌ·èmTâ³¢+·-›6¼ò]ïŒ{gÎôœFb(¢„ioZ0:p|Æ5žyðÉQéô÷]Òý(³“K“ƒïÅ}æsè´u÷¹ÎŸ½¨kÇâu¸ŸðÊ~ŽO„+f7ÅÃÐR†¦ë›Y—è']í~’mx.G.ß•RI‹r8”nã}F«µìþ‚:e?yJھ͙YÛ6Xwn0$‹‚άF0¼nàî,h‡)û×.WŽïÞ°³ï<[žáÞ½–®_ð×à‡ þ¸¿So´+{>Mœ Üß1ž«8wÑQ”⾓Óáwê °~ ?Üç÷~º¾²¨>ôÀ5X¨Ï‡Ïós®rR_û¾Í)ßnØ\¦a™ð+X—ƒëb¦Ih»©·åtVön‡)cê/>=[`iÛp0éùæ) W}5ðZJ_u×ÿ¨ ßI]fbÿöoùLÄ«?ÂtÓfÒ¿H‘íL˜i@oq¶TUßwönfnþ[ÀýkeöW°uÏ$y®ŒÿLw~'äØÊŽ«w†\€€?Ë¿ë ¸â*­NëÃÓ=|O¾òSów3-ß±´~§øiîhÕY.WÒÄüHaè{›ù‹t¾ÛçëžW9¶ûB‡©Üã ¯c"÷AÖ;˜‰Þ‹X‹m|ÌØÄ´{B$[HûµÆ_ƒ&%èOE}(ÈÖTÔAg ,ìx¢9Í¥(›‡Ãe}]âý¥Öýk’d"záFE9Ž6\ãÆf©€Þòðu{ íìDUx} T[c‡D6ÃceØôÎwOH%ð·Uø,Ü`8†.‡êw™­$¦ òv3k›)O.œíÛ?Ðni“M )Sý4lñ©Z;åë*(2#?¬¶É9@jÌÄëxŒ’l3îžÖßt-8´!c`ÙAúö☖ ×2—"o3g3*ÂÍõÞ_´yØØš"ª™Zcx¥U-ÁŠ£ ¹4{¡GèŒG ´Ö»ÓWt6@ ¹¦ÌÈΆàq&˜îÒü} ™äàÝ{Go/›Ë?ל¢ V´ŸÂ’î¸J”ßî)ÔÙ9™¯P´–º®žÇ¸‚ï|VèÝ;oþ„ãíOª&W9u%7áò[ëߟ Ãjf¸5íÔûü‰C5Dh»$†ëa;‚œ;]v¯0\“³œxªÖ/7©íˆ,wÞý©§Qµ•cãcBO?gï_‡?î˜$jûG þ•ÆýyËg¡ŸBù°³÷àR¶ã^ÌsõܽB|G³þŽÔ„  N‘Ÿyõç¹O:q¿#¡y·ÛõuWë'}±€í½ò}Ÿ¯~ýZîr=‰v »³TúÂ8žçVÏO3k‡Q Ó_…Eîb˜ifmÍýT·gûÀw¸‡uy~54´¦ÕùÈc1 ç=jf5DR9 Ù‹ eËØgS#åÔ'ÀÎ!‘çš7ÛݯØU·Í]¯ž¸1Å'Êiö2¦® ’ÇzÞyƒõ¾¸ªÎLBŽvLn`{˜£p0PŒ=+’ÉÃdw,žQÞs“O¥Qí¾—9lˆ Tî<À]ùG´ï-ÔqKrW:¯}q\L /±<ë“1}í™ä `=leóè=Ÿ`šÍÚ€ où‡"³é¾X ¬k"¶QÔR<ÀÄ_Ïú˜þ¦†ÎXÏÎŒ_K¶ïá¢Útä.ë¾ c¨3ïýÄ’¿1e6Wž‡[Ø$)?%óBɈκ®VçïüºÇÐÛ+X¯ÛQ€ÝÏ*ÄŸ™èn¤3#<{˜Ð|bN¯ÂÌØÉz>ånv®c ™¸#ÿë¿¢)—užuNJFŸ¨ÇH€fœb‡lNp?¹ö0÷¼/æ8gZ•ÞWðî<‹c–§ç—¥ö_þÑÔÿú_‘ÄÄöê‘ï›ÌcìÛ¹M$L ýn1PÄDz~Cíí‘kçZ-²hÞYcü.£~ì,n¤237&i3Ó¨RLÒªÿÙ‰9Í5|ÕXÏ{¼Ë»sþ‘ʼ›ÇòŠ‹½â¹Ÿéæ?I¡¹Óëö—¯è?›Oø.ƒþYÍЄŒœ¸üð8ÕžjÙçþ¯åL>˯¥>À*¨î…IÏ“Ý?½ÊwüUÍYÆtÿ¸!x ykÙ{›]3÷ÖA“ª÷’ŸÐI÷?¥2³±u‡}A Oq’é4{ç«€[éˆzÁ®,žžKí¦ÜÈŸPf3“m2Hè(åòÏ w §¦•¸)ËàÊË)ÿØä±rÊj+¸J0e)ÔI^¾à,šÎÈ]^3N²2~ƒgVý”Ö,ÉSË`¦Ø†_Ă Ü;Cé(ßs/sŸ³êÅe͸w™Ä†gùäMF_ÇÞ&×èýŠ-˜éy®¢¼/KšÈÚOâ>gCSòj|¿HéëÍlÃλg¦Âá‡ñµ\ ú8µk¯s¾Ïƹu.“×Àæ×IÌþeÜóW=Q™ËM¤oCsï§3¶ax˜¥K‰~Î6¸ÞÍ£»šÛ¿ØÏ5ãþ„#ý¬«5;p¼Þ¿Qöïòñ ܾŸÓOÊ•¾Ÿøþ„•¿Ëž¿†’ï”.ÝÄßRó<ø+ÎÑa‘‘N}Êï^ý<ÿʀÜpözðК¹)Y™Sr÷?ï;Ê÷~ö¶î†¡¼ ^N}îaòôòaÓá˨h0Môä4ÈúºŠpX -¬ŽÞÝ„œ›I°›©rË=+ÀÂ,.Óš_•ߘ?cæŒÙ/òý2ëQº+ö`>¸íªD@ØÀÓ¤ÄÀ¦ó*>7û”—7Zÿ?üx€;ûI¥ÔÌ¥1ÔR.YYCóÜÑâÿÃ?»öoÿ¶dód¼i®g)ï pg$ݱÓðç€'ÒÚËÂmke¹‹vL>YY4&ÀÀ “üÞdiÊÊR¢,à>…›|/=jÈÞñN§éàËØyUwWnƒ×f¬…ïIà™@<ÇÀc¬ŠŸ×p§ÏžoÊw[p/s†8HnÏ9' ˜$ßE@ÿ<ò¶/·¤*á•êË» 93Ìi´ ¿[fOLm;(³í¤=ô‚îHÄŽ=ƒ,'PnÍ=M«I©o›f³ï3Å%†Î3sÆÔš$±gT6¡Fé.LWI —5£•fÖù—)€Ym9 à^†>‘”-¶QL…$¦ýNõ'ˆ·#¢«”'ê~Ïÿ$‹ÌùIÎü–ä¡Qð:otAwƒØŒngjD2>ö¾íû~GžÜü•¼ö¹= ‚œø{ô¸û'ñ+¸ÌåûóÌõgNÄëPÅ×Lÿ»¯û}€þdâ'šM¿›âò}ýݪ©§ËWIó+·ž¨²µl†˜‹xJ»Üøsƒïóogý°£o¶+ôU2G Ë&\Žåôë¡WúYõc03…1çx½û„òB|ö#Ôîa€nØ÷ÙÕQ²ìf&”Ÿ¦U_—›+6*-ÙƒYï `ñ9ËŽ'+]Ö\±]Û+yêrüp¸r3ɱYÇ–D-ªÞœítª¼„•ÊX+_ À€M<¼·\øº=­Û^Ï´;‰ìëÈÛª¡RÜp;*Ÿ˜b–‘•Ïæ8¸÷P Û0ïZˆ½™pÖ\‡g`ÝôùŒ§ìz# ”ÞÔÍu6¤}? ~ˬ¨À‹G>$ß¿[œ®š_ÈÛ3­Ÿæj3 Û Ù Ý®jÅ¿²4¬LäeÀñ´÷sÍñ R¾a1C2¾ÅMam€ŽÂ­Îæ-¸%4I O"~",§D*ïýäã{PÌ5§E•¼›Ö Wvýtàû+¹³¼~ø.ÐÌs©•ß4Ï}V/]+ÝÍÆï”ú¼nÒo`Í[ݾÖ3$C~“xJg9Ø)R,#ÎúϬúNä¨p:'õv¬(É™ž¾{jeÊõ3vç·s=Ìó|˜víì!B;-ã=œî3Vû¾Zv3dº’¯ƒ€õ"ö½UgsªYìBóYÉÔý© –Ï¡ù“å¸Ïÿ¹®Ó–:¬6€kþ‰hçl}ùDôzðdͯSÃw{hôX?Ö¿âùþ»|géûåt8?M–ÏC'¿ú<ÿ{^~ÈîÕfЯùòÙžûJIß‘‘{ÂÌTÏï♣lF?L¹‚Î%1Xû,ÐøæøùUgö +œ´ðŽÍÛ ¯/kî«+®qÃØ³ä¨\…I[¦t gLÚŒ“]äcôhš× &¡“v¦PäoH¡‘ËY2- ¬²Ýé=…§Ÿ!÷w¦Ð,Ê”.K>·d8ÿÏÿÉÄ40K~H ‘ èŽÅ4¼²Ë¤bŸìD+mšnÝÆ„:üµ¡¹â™hߣ(Ux“T~f!Z–s0’å’XCt±È`÷q»æ€³6£˜ïøÎÎÂïz©ž‘àØ,cgýpÀÇÖLedÂ,¦ýT&ˆÓ|y@v§¦„u¯a ð…W7¶oý"” ¬¥í¡ú”g–c='ß#G%Êç“Z.—¬i‘׺u®N;rÛa×gé'Üùô€¼õŽ<æNÜF|fÝ4_[êŒtÜ+™,«JÇí2…YoÍý,]¦Oðœìš®gÚùéö](eY3 -eaˆb'3ŒD1Zð¤çAÑêùœKÚeH¹Ž Ï óm2ãá;³b2äèÐríg )Kª¶ìþEÌ”¤õ;âá“ñœäWܾ‘ä_y­ã,[Ÿ¡Røº ¬­Ò²<Å3mQEħ´Ëc’ÿ¦,&"*úU3L† -¾ Üß)iâå9©+zAø„#¿«IúNÒËwÄ3ÏÁýóy‰÷-ž]”ó[˜GßT<ÙÃ+0ýÎÞ¸¬¤¥lþ0Þíd½ÛO¯i9ÇžÿJôrßÌ*Œ>GÞû²!ÑÕ »ï„7­ÕÓˆ³óñ3³6ùFrê€Zns\¸· _+çž+ßjB½ùë¯ÚLQÆÃ°DŠ73EJÑÙÜ9*{U#Âi·ë–¨yRÖ@ïãÀwöÙšun1ÀzÀå)ƒQm`&æT–ܼUö3fîM‹amÙ•"rÏÙC'kÕU¢ƒp"fÓî…U„Ó’ ¹í0»«4ˆˆçŽaÐrð‰…ÅGJÑÒ‘Öå·É•[808«,'RœhîÛ«|E@œ4ñnu¹ »]ËóÉ}kZ‰ a›Î·Q³ÉÍ4ª¶¨&Œu³¶ P±B:,ŒÌÀO8²¥6;WÁ•\;ÿŸ6Ü€~‡šlÑGÕçj§Ö$ÄpæØLàIÌiKmK3ï­9ÍH_þô§)G9áûsœ!PØÁ— .{ØÐR–.«Fwsm3÷œ“€u-ÀÐÄ/ªËïb£°õjÍåæ;o'm£z68Ä<¬5}¾yT²›ÁÏàdñøkøÇТStö”žþ´¬«› z`н ¶ÔR4ÏŽR…}çª2Ý^K™±´ #W-;ó«Š!m°¿>3ÝSö¿ÿwb&¿ºªsfvÆý9û~o`½‚òö³þ÷뉿kN}Gó͸‡S™åžäÝ íùk½k*}Φ?yõ;»çg ô? ²Ÿéà¹LùÓ˜«gEøYÞÃ÷ï¶ÌîSKŸ5ª¾+X²µôk…úqvWÑíûA±wgX‰NÑK—=M }Xö¤Â_qùš&MqÉ«Œ£¾•QŽ 5Ãpùy•ý²¸ª”÷€ï Ì–‰´ÓÊ-T’eW0“*%Ä0aÜôä¹9íL›”(­ýXÕ´à(@-ݨóY)xŠm”ÄõÇ]ÕZùNÎ!•~j7T„SGdeJÌ®õ4!š~azxîþL&žžÔÿ̘6ø{mÓf¸ž˜=H©öÓŇEÙ/„J†ú”Ö@Ù“ìl“nEàl«É•î¥=}Cy`ÀPâûÊûM"P€~Ríea×RAÂ6]%Ó¡™=k‘R­T8%±»C!”ö;Eëßa SéÎlFީÆœ!À)Ì”ðµÆk&]G>‰øa÷ÍËG‰žÄ÷.„»àŒ~€øäµ·¡¥)rÀÝö Rxæ%Ìž#úXŸžúu™aÆzf»â=hYÔ,{jí{+à»ÉSG¸Ò¹.¼#1lzwÁ¶Eu†K2$XïªÂÁaWAíá’í40/(éøó]äÈ›Y7m¾Øœ«)YËþÛLœæ`޹cOû·Ð’˜žAÒ_‘WIOªgµ®!H„žQ´tIG‡©ê½´’É ?ˆ¾/æÌÓÌ=e¢½‡)@íûïë$™ü•ï«ý3‘L“¼bÜO»çw‚ùä®>—j˜ZÃÏþóý|¦YÁŸ l¾Ÿ¸ò9À]ßãK.X_ƒþçïú~ ÿñþÏ9|×<ª4èk˜þÞç€y±ÛëÖÛ?þjßÉ ñ#§™©óû%cwÖÏ›õ[FT atß¾….S/˜Üµì‘ߨƒßŸË§š$²Û£bOî{rf¼4·1T­|–”4E_n™” 9êÉDU*5QB³Ž-Jâ”..»}”î™ÀuÙGÅ§ÚÆP&áo$1ìl£I+!hʆ4ri½mßvFßÅ:À œóй…dÀ³ &ºyâ)›o®c@ËÄË¥ ù:Ÿ$ÊWÛO©¹é‚*“s¨ßÊgÞ³N¾¯óÖ Ï~•7O…7<(Ìkëâ8Ä"Ùœz§ëøÝá´ 2@<ïÅ_KØVFÛÆt²ŒMSòZÏ~:íÛèÌÅtö·ÀÉArKkb´ #n¢Ë”–Í:­üµ+¨N¨ªâ|­iPl=Í©ý˜çú$¤Òo'P¾ë½ÂÁûwB|G »gФЙ5nÔ¥H0ë ®yjßûvÿhË®º `v„Ãn9VoŠx•.lê™"ˆWƒƒ´|nž ={Æ«ì T†Õî´m¸o*aW®KH‘äz|ü¾\×BŽÇYDšR2·f°AkÙgddîe‘¯œ´×ë%†`>ÃëÙxæ™/QÁ+è©i~¼Þ¥¬¼ʯ’×w¶û4Ë:©þ$'çÝÈËïHýGþÔrúõÞ$à6,ú•úõ÷Ùa‘žEX~WúÓÙ5@»Ð8§”œŠù+°ëOú“(¨ë¡È•âmòßOb%O‘ŒfÓ Üw.gå÷ ªgì0ÊÞ~—Ä÷ò· ó3ÊoZ×ÿî­Ý7Ù¨ÝÙ2 opX8nK²5æÌp»IïAb"©jjƒ©°>ju·ÜcH½ &P¶zÞ5¨ç¹%„Ñz«ºÀH¡NÒßÙ~>Iñýîõà³e°å(G­º ¼­<Šj¾¯]ÅîQ îëYͰÎdúˆsšñØc–@5oÝ7Zö÷#åÈù.:¬³e-‹/oÐ&Ç W†>]¤|þ­™zÎÞÖΫÜìþ>çò pœ‚!rë­»øDè³kÓSrD‡®Ÿ?ð«ƒ,»hiæå›mÃk+ÎÕ÷y9?S̳K,¦17Þ†ªa·ÉF"Ò 0w ¾ ©ýí(›i­üžßµçkÅöªàd¶±ÆÆŠ^\pŸ^Ò5+µúw­dZgC@ð´½®u=@šÂ'(ïÎã¿û™ u~fÕ´óæ …$;l2|œ±@jÚ¬ghlÿ–Yæªâ¼™×Í÷\¥½zpž;Ú¢¯r l¯êº*ð]èÆA<ãµ{™ ¼ï>¢K]ZèrÝbþZ aõ{jøÿ»LŽûû,5Ó üÛuÀïêÂ÷=Ͻ=“Ç8â_'_XÉ'É량[Þɱ±Æbýï»Ò—wzC¯Uã—ÙÒ4_õÎ~OäƒòÌð¯™o˜­kFùû©ùW^²óœyêOl% ¾¿v|–4?‡œQJÝîa÷}݃ӵë6—&ÔLvf-—­dõ˜éžWœËëB(öˆTe¾@µ;|æ‚.¸Zx™ÜäÕ;÷=9ñÑÜ&P!7Ä„áhàfÝ\öf^MÖ¯­þYG˜áÁñðýá¿'׋Â>Ìzüòß|©^ çm–9¶KbÃF7O/‹Ÿ’¾¥ d;9^9€´~›eÃÓ rRá„zퟬ}dÓq‡ÝÛå Ó»=QYE祤T¯C!UÙB ¤/°¡ñ»äZ§ž\€ø„$jr lÍñÿÝßÍÐh8þ@öŽ 5W‡ãIÊ@å,Ö³å@=Ê€ÇÙÉpÃ=_CóL\‘O ¼ÚŸÑËŒÎìãÙ‹™š9†p±6¶¡##gMORbfd8õ5ñ¶Ø©™à‹Üã&e÷YßI,<îd3Ñ—°¤c#FZ2l¦ð¬ »\p™Ê‚Ôé@…ä’ƒ_úþ¨4@Ÿü:¯î{tvHxÝó!±VûiïµVi¹Íúü{¨ÐÀ½‡vý]ô9fÅÄEãU¥Ó«šw£ªK¨“\ß„Å\™Í1Å+¡æ~®öI…oàžØÇ*ÌûìÞgÿl9÷ÿp¿ÜŸ‚Ôk~ü]-øwd-ïZQŸÇY~ÆÜ¿ËRÿŠVÔ§q‡ ÈÄ›yònÜçg±•Ï¡ö“w÷Z„óÕñ ïm¬oýÌþâÝ"§'m‹3ƒ‹¦¼3d^—;¨êãxrä€{ô”ÿÿòÞ\Ž+Yhh(j(((j8PÐÔÐPÐTPPÐTPÐPÔÐPp¨àžòĉÈõªõ¨néÞ_ß7í=½{W×»"### W†-cÖ©{¨SÖüyœd²Ó¼sç`Ž©—Ý$ްKSœ“D8Œ§æß’yÁ=ö2—T ,ÞâVÏÛ}þ¼Ôó r¢m%¤;âïñpÀü4€ ù$ùÏPh:oïˆKäv“x¬É‡˜À” £BÀ›"€ 6ãK-©–€’éí[€f¥+ ¨Û¸ž`ºtƒñXºÇpü”JhH»0#»ÙȺÑK‚uiÙiÇ)æž?Ëáž²i£±÷»£S×j”ÐmZž°óø$‚ûø$M*båÑBsôñ€,G^"Tä+‹”€¾LÌJbÁk·ÂôáQ|#Šg|`¨nºMdà•"Yˆ’“YÛ.þ ó«|ô݆ RÀË‘ìD܇ ËÀ¦2,IáM¥“L~÷ÁB—Æ‹ ®Ê\>yzn—B¸¨2w?@ý½idÊ@m‹™ B?~ž`‹ðe3‚õ TRj/;‡0œ”w)£'ªf-LaöIÂlòÈç˜Ð]‹'ˆ§¢ºY$E¡¹ûA|ö¯ëTÌOÄýççã¾—*º§Š¾Ãþw—™m\õÀydßÉ̽ºŸÉÌÚîJhPq–⨻ÝåK‡–U½û½Ì ªö5å#æ{l4Ù÷îÅ>óíÎy»B]8ü-ØdÇå–ãß%f=ûÊ{ ‘½äË@(—ÁäÔ:ˆ[вÄÒÄ|g ½g»JÑ®, ³ Ö㯬×ëÙ®å„ïðÎ^ág@hڇݡ{–KÐB¸/1ÿìã¿™ó–ñ¢Ú–?s»²ï²4²Èx‘²È·”~úîpºñ{ÞDyL %Ùð’Cw|ÞÙG€8i¦4KæQF»shÏyz÷«q î^ìîP壸e™×€‚5èÄsÙ¡Ô–I®”ù cŸI pG?DŸšcYC:”Ç2]À“5õê™²Š¸g,±+A°7öm-ápÛywúÚ)ßX÷í¦ÎÛGBE ÒÅ0®Åwé;'ÁY ^úƦS0G˜Ò™QòU#Å^H¤ÄýÙêlÈýI£¢ý~ÞfàŽŸ1w¡«€£·Ñq£.Ò”Ò@÷!tdèÌwwvÏÇÐkžÞ¡Ç—¾‘°›ƒ§ ‰h@‰f©tç“N¯ÊO-Ÿã4ŸtM|ë“×Ïñâ·>»c‡wKõÐPfgà5ó½{ù£{à~,Ìx\Á°_쿎«É5YKkmYûRòñ¨=Ór1Þwõtð3­´UæÞ—™ß†!Rf ²ñ 8KÜú jKýz)§qŸÀÝq—Í€%‡—SW}L?Øn®'â•à m¢:\[·ôTT‰^²S  ?!»–@½»€;Y¼úØ“Ò[ù˜¡O ”î %´¥¥¸y• ÌdżÜÓùNé³î, ’†Û­³à¤îÊ‚¥I%ìØ¼-;Õðrg—b‚!÷rCíúo x ñWô¶ÇÚªtñb†ì{¶³ÌÛHÇ Ê~(졜üºôî5gìLvv#‘êÚ½á)ƒ”áVýêžñø[üVr ÿIJ‘;Ò ão9øÈ¯ l `G†Õm(QÄ’ÝKp}—!ùšû(0Î1?]ïîû ½§äº‰p™ÅIíã︮ÚÝcÜë=GYùd‚® ÏÊ­ :Ýï¼»ÒLu$Ç\NБF ½»³+à) {¼¸ÒX˜áoëôÓZûî Ÿ[pGAäS<“åLïÛâæ9•k…^Šœø›–þž2›þÈ2 õ {ÏÐïÆ€é­kebPâèùÖ=zÀ ;ë²Ì Ó3)VÓjø$Õ½Ù³ÉèOíæ'G,{ÊæÊ}ˆOÎÉlF1F'aCÓ¯ïù«Œ>IÏëà>ï8ëåTsÞ2sû§”—¬šQΖ%ë¥æ]åAëg·wt^?ëøëÓQb«[Cª p‰‘¿ÿúµ‚ë1>NVCLGcÝc>ëã¥Å/GT5+.y oÔèt}<–&¯qó¥>6‡PÝN˜ÀÍ.øu‚ugÓÑÍǼlØ[ào÷ÉjC”"–Ý=]Väø&›±&|¸Êé\â%ªRÑYzÃã3r‚÷<$CîµLצœtžâñïî7Tð ^S)Žñ\z½Sï=ÛG˜Æ;’¹Ðˆì>¹m?2À뙵Úrþöè%À)9f“æq M8Â2ƒPÒ¡*­ U x©Ë?ÀÂBx ‘ÃÇ>øè¬§!v¾nX&G{Âä3郋S§ÖœºKbœëõî‡sØ.}¡‡Œø]w•qe¶`7Ó[]Kí!P9HkëEÃŒ4“D×Á»› 6²­A¹3Ù°Vdºªz&<²Ô”sÏàx±xPÊ©9©Û@þÞGK{¯ÀÃ’°üìɣ˕è9 5ÖŽ9Ê¿Ö=‘±Îè)ùyâKSO9´UÍã§>íÃn­wçȵãþOvï¬RÝî&Åžâ©ÞmiÜõªñÓ—/Q Ëùmc >+"ìî{Ä“ÔÒ“bàÞàR‹}®Ã®ÝTöüOýg>ïºq9¸D}<-hÀ…à>.ö¤VëAe \Bð«o)ƒÌúL@ôþNÛ²W$äP'¿)!P˜mýxÄçø§Ò¤Ò«ej6®#P€B•T¢K„SªáÙÕ­Ù?+º*ãùy°ÆwÒÑ<Î\Bv€øÒñ]†Œê/úã!X/‘|ˆÉ+gïnÇCKBþÌf±À.¼b¢PcÄ Áù-îm wB¬!2úRÍO ˆÿ'_g·b$°–œ†Ò ipé#áÀ‘¯Ôß{–*sCå]Stzœ3TÏ»V^½òÇ-%¿Í«RÕË[Ý»ÞI`©‹RåY:“íº|$e£_œ¨ÃMX†Ü‡ÑZ‚×€†ŒaR7à 6zòÄߢ•0ããaoÐVÊo™ER2ä¾%X€r*î!Sƒã€}Ó äŸg2+Ym 9|f€òÄ0çÜ{-ö]’5÷‡ñØ&WÃ{y–€o—ê,l ʘ*>VëeŒË{ðýmbM²§»ûª¥3$öš©3ìŒ?S¡g %..»RçÍýþñª‰Ü_¾ÄYÁ˜?qÿ)ÝuwÍ.^à½)È” Æs?ðs|FF%¬w;õŠõ„Âó”Î3+då’¤\Œ{ïC«–Ž'¼ìª{ú#Øú–ûb8quµ…îî™zþVï¯\¢ AÏ+fúÜéü𝠼[î.{¢©ÿ–Õ¾ÁÚ@êÝüº'Îæu ß\{Æ·º³Ý­ð¦ÞöòÖmAÉfäëBCršrëÄß+P‰Zy@pÁqw°‘ˆL¹Æ^% òWZj‚}gn«¼eäBCQÍ«W¢àÍá×xŸ’ÿŒûyK0C×Bmql»|ß¡zW;X@.3‘m0¥K½€£„=bô©Wv,_åÚN Ë€ƒˆ[Šd†/_Çé*sÀº”È‚á±ð>e- cr Âì$¡ ßRÓ:pϨx ½ˆ¬àw¯wyÎ88v(OWìc_KÖŸû^7Ä€•Œ@’ûÏ3.kp‹žú eP(+á÷—,“MfUʨ‘ë¬Aäœm)_BÞj<1ØýRÿÝ’¾@ âÂ)Å]Î΀`7•Óî.·€Z÷Ûñ¬Ül%©áZ9ØÐÀÛ[ÃácðÓ€ãØjv<àtŽ .çàËœTçãÝ9>û½àu¦qæÀ'ÞgXIÄF¿.¥²—¿{ ©Û€»^}dÙ{†ÑñÿâFˆïEµº1Ü:\˼§Qâw^ èû7Xûª'i¨c©;žüd¥G°îæŒ,ÝUÆá;Ä}±kËaæ1ùÞo÷yw”1ÐÉåQöâPg,ÇlýŒ‡Ìê·Ì$È>“ûŸ—jÜ[ÆÌ÷yo¢UÙ̪4h>¯t}ú¢Ïv_MŒÓRïýtn‘ÚŒ¾¦d¸Wµû®zÏ¿%”§}¤ {Éýçu/B­¡»¶»÷|ö–aÙÜò®‘Xˆ^1%Äç­\nW¥ÓKìQÀM¯Ò—€Å‰Fèãé¹ÕK5<8{>`”Æ*i 8{}÷ŒwéKܧë¹x&wÅqZ QÊWðH@ õN´ïõ÷¬Ó¬;³ëzhw’Ôö¸%weQª"©óm¥n>Ä2ˆt¯$ïBPÓ cD¸ÜPüS ?|ÔµLpäØíêâ¹ü2Œ‰&wrÊ÷ÒÅ-Ý‘Âi¸ΰ"õòÓ'õèìáeUVc‹¼'#_ \IÞ ^2¦à˜sª«„rPÉŽ.|’$½ƒaY‘”DÀZI€ð[ÌQRׯ‹ÜvÍ* £Èt ‹ÏcdÀ¸v|Ïòpv‡¨&~ö8$ïPîRJSTB0 ÉËQªÏ•Éšž”;‹W)øÅÜÇ™àº|úè{Z°Â¤¸íQ˜9p/û3ôq_Øñ?ö<¨KñOîô¯{šc0ÿC'v– ÜÞXA¿Ëc¤tw™¢ iÔû¿0at5Ë/I¹•¤Ä3×Ïe7lX·TYîc`ZÇ$ÍñëE¬êã÷€òžÿú¼7ü9P~œ0¦ç×>ÏÊçwÈ\Þ7‡Ðs3Ý+ZÆÃµg€Örh à†tlÕÓ£Ï[F^u4@C`JóGY1¶×Êùï×Þó£•ÓmÉèg庌#Ë qít6wçx‰^(b¸ˆH!Iq"Ú^y·»c ‡Põê"ÿ¼Ã»xó“è5>ËoÉNðú.Écä*C&D)lÚèco;ç+¾…¹,¤á߯ã "<>½¬ ’\œx£™.4:¡øÅ’ÝçPÒ[sVh ])ë\;‡#•åÒ9NH‡-kK\ƒîì®eºç½ï%%㺲ÿÍŒlBª‡ïr§yß_ +>PØ'øÜrÎ]ç½äð]~£üÁÈRð£(9àÓEf]Ò  a¯©wDZ¦FZÉøºÉ¦+Âñ[fR"RÇᾘr e"ħ­k߯þkÎX¦›-:£ŒWŸðŽ Üî='UzqöR\Ï|b×Á{F©8c·Y¤Žä1-u'x·T?ÁÝßCü"á yz/-ÈôsD`¬ÿçÏxÇ_]ÏåhèVÚzù¯Ç~—;Tõà$^¹>/ö±Jꌹ>ö¡+þ=%ÈNàîì>®5pBcÑw>JûT<3CE5 ª8Ã%}Á=\,»žM9;Üß©ÓÍ=ã|¸èËŒÒùAÏy@_rówÀëÖ_µ“DOʆúß 7ÿ8žþн àÉÚƒ°ÙÝ•__ÙR@ÜÖœãï’îœ ˜‚Cþùç üõWÎ[ÍJîGøÒ´uç±Oq#Óì [ßzJéK°Uí¿Öúà¦=àŸ÷¤ÕZIÏÑXŽ´Rrø…&WÌSãžÙqpÆäuÜžœí,Ý7Fy«z•ð¦ôÀZIôâl4¹d™BæÀ•÷`Ó³/ =pðI9·q÷±ÔÒž’K •¤ø$jâ5 Ë Æ¿dÚÈm¡ß<ׇaFÒ° Ž“?8À#ÐÁ±»•S½ÊÇ9¡¼SgÓm ŽéaÂÐý­D2Påì~vÈá`«8< ´¹,Ç·‘#u$\àóŸxOÚ3žûè{ÉA¤ä(r¦—-£ïgïpr@pJ¹¹,9|p9÷âÿÑpÓæ»=)–Ó’qzA?»Å-&_§ä¦îE•”gx_.A\5¡0Í1Éjg~øí '³.éˆ |tµ6 ÌqQÈ …h‡#¿âàL¬sðT.éΗs‹(C’âã3¾7ø3¶]C«åK—•á¯$+’ÃÇU}¼ÕÓs}ÎDžNîÙzRÅž|rè…­Fâ5ž\„ïðªÂ]QWO¤ø F㪞i çY¼~=mÉ‚òëR«ËÎAhÙÁ?9š=»ze‚øPh=JNײ×ï÷rR¯Øëxh¾xA'é~ÄO[Y®×ë° úÇKXåà¯>I‡Ñ+¥ûèUîÔ-§üRï¯Pæ|uîֳꮼ7N@¼WÀu0Ó¼©e<öã6¥/Ò÷fîñ¸´ÛóBâ ÷?™÷Rë“>T”ýdj'7Ò*{ º!ÆÍ;ö-½rÿñ0èbë1¢ª•ènFén»ò›ç¨«3œåPTµÚùgN  EV/ç,ª)ï®ö–<†ÀEé³„Ë 8Äà\ãps¬¿÷%|ÉÎyçq^A:¯»dEûÚ¥W ‡²I"“ecJÇ·P䨢bÆÝ’²NœeW^àñ™š#'›ï@Èáã’ñ’m8('¨Í Xܼ€>–€ÏˆÝ‡ÿsj³A¡l"áãN±Ab² ÇÁ‹ .cOÖ6‹¯„ÎJi…ªÞ9ì€×— ‡Ùßh$[ŠÏd^ò!¼ƒç×_AÞ㆛*98iP÷¾àîÏ©EwÑûŸÃ¬9>Le ®¬„^ o*•ôü.œQ$5xý²KÉû$%ˆ|÷·ø ¼²h÷þjV½g(O˜Žçç“8”o±ìm{Çö+é§aÒpŽ@¥Ëú™zJð^ëÌz8~ #Ër(sìm¿§2_ഺÚ°½÷û¯`\ ¬Ý–†£?×–~I@þÖþ'C,o”I÷¦¦Õv–ô¿o'§z²i)wÉž-3ÅÀÖ÷5î©sTS¶¡”Np„Œu™ºÊ¿ÅlŒn67|ÉD"¨H ^Rr‹w&^ðÚz‚od¬*ó•ßEç™ò5g¬bùR±«œL§=wJ>ñ5Æ*þk‹:ÌÈ-Þ ”ÙçÞ}âå½ æ^n3þõâ'çhŽú¸îÜÙzÇ¡¼ ;×Áµüé€eû˜™fw”Ç6ÂE‡lï3ˆ_çI¡Ë#R—,â;£9²¬oôà!÷ÌÁoôSN§0£àÝY\q[´,o\ñO=)ƒi²)#K0ЀnøšfŠ¿wÆ´öQaQ8ú4K÷÷ìЏdÅR¤Õvù ¡¹x\Âú¸VÅ÷åN`Š÷±uŠ7¢˜ ‘¹mˆL(á’}ù 3ò¡[ññ£ý3X¨Ø.¼C+LÀý8^Àа2F–]ãŽWˆpèF‰ ³",ÎÃðŒÒݵWÕtŠ¥Ù,U\¾‡îûîâÞhÈ;O¹´’PqýêdŸM–µ¼²T¨¾S"èåò¡¶´ìλÖÃeË?#Î>?%QDýýwDNMßµ}ÜÉnAžßVÀÏHkV]ÕÏ!ä]~ö£¿ji²ŸiÎxµo1ö„®Èé@íÜ«®»Ô³ä(ÿŠJý½Õr´Tþèc¿—¶ÔdGN“ÓKe/ÄáZËÞÒÖ×Þê}¾ìkךìõŽÎnwŽÛH™££|¸–$Bd&€Ê÷=§«Ê©]P^ \:u ÂÆ_epïC¨²”ï; 9ªõñ[YŒ(;/HM©€”¤8Œìöø'ªØ³ï{6©”ž[$ OóJúÞH–ÃâQI®€ŒÝi'¤p¸¥CvçÚ šÅëÌåh6}»ÜšƒÁ•äC;ôáѺ‰u–s('Ô=`.£ ²«ü=Æ @Ã]„럅c7B‘\ûË …Cá·5”wu>ùEø~•.¥™#Ö€  ™û$>ƒñbØí¡ð Z@Ò¬³ýðçZ|?÷ÜK[óü­øZ:ýS'­H,Á"ëéˆÒöѹvBj7—”\ÇwæãŠ­÷Üš­G€Ð\pÙ=søI(òõ·€kèÇzïÂ3Y½“à;ø¹Ý% ?½›â¦œXŽww|WŒT€l\¹áhOÂ#½D|@œ7“xգNj^}6KõÒK\;K>¹Â»Á(½žPü—¼;Šd–÷r°á@ªËc⓲€D¶aº'Q¼°ÀºÓ‚‚)­$’AQ,y ÌÏäg%÷s‹#“ oÕp‡Š’•–`cNú²Æ¾¯ª¥Ÿïè²ëQí=Ã<ñÑ¥×L.ûõíÊpù^9ÍÊP)n¬¡¥iµ´F¶’Qu%÷ü˜é#ònÅs3ÐgmØ4‹[Ä(” ¿EѶ›”×»Æ=ù[²¾äüùس¸-fß\gâÅ…óöZ{Î(æ)›H¢£Dß(ék õî-·¤üFý]%d—{ŒêòWÀS´˜sœ#Ÿä //˜|Kº£1Y ?ðpªjòPl š#¯‡P)w÷t3­—à@ÐßÏAQ*-°VpÕp®eL©/§ÂއݙÇ{î6ƒâŠ · j‚p|áSbÁ\‚Õ&@_>¸m±à’÷ÄY‘ÅK—Ų{8Ž/Îp”¦îA䙬Îʳ¬*û9®•w‹UúØÊãz‘óŒ ýîÊ܉,D¤T â™:’‰à;g{ 3à)òò%¶<:H( Ö$—̈·ÆRK©ŒŒã’ÆXN±ww1Í«æƒ`<Û<öx¯ïoÝæ^q‰¸¤JÁ:µJ~ÖCæ‘eÉü’iS¨èlÈ“8 Ò–'9X—Àã/YÔÑò{YGÕ*|°Å3|†Ô(À"A[[ŽÎiÜ5úê 6xª´{¥¥ci Y®C.øI±érÂÉ0]Jwš0æà§ìæÎ‘S2ÙâîûŽoׯ K8Ø*ך–ê7å,ã¡L…îì>› 3oäët,Æ2©æŸD†»–â(íÕGZ©ÅÃXp?ÞDÙL\€°®^6øh,ÓO±Î¢ˆË1Ê;Ň8³V[n9x‡À£ÌeÖ,4A¼ oþF¬[Y2Õ£®RÆ0u1'΢dr@ÆÙñˆ4Ùx@Äå+(9RJ^4ç€ò8ªîZ]äeÃP–|½„Ëîò²òÌ~5¥W½;̸”Å!/5µãd‘kA‹;Ç“•Øã’¬ý»rPÃz±×€Ô´’”²ÀßA 9r rd£ÉB….4ð̑Ìo#–S‹gX̨s‡xzäËsÆ{#Þ“áÝG8!”Byàb'/ö¼gâ%4—SºHÕÖ®í~i `â ¥ &)€‘Ѱ>à *™<*Ášï“ÜqƒÈX#äÿõ_qb÷¿•}-dM©]’†-Æ=¾§'+Šóyï—½÷ïöf¹'õ¼À8±¹œ`Z¥Âû±ú}oø;†bi•ˆÇvœp‰A:ç¬süÜø)5v¸Y\sçŒðà˜i_ÜB€‹.` n£}†WA˦ÊˀׯqëÃå {T\%°Ö }–ôHSÞJTåmÌ ã“T*x¯€ Û]xÄ%ï!àÖ'=‡UŸ¡œ7wuòwøê×3ûNõ¼Ãk4²qæàf<ÝO†ðå°Š•g„[ÃñÉeUF;Ñ“^ƒ\Ù—£`âbS²©"3 [ÎÙPO¬6E±Ôœ¢ªôVÈ`ðŽ3ît ÈâZ|^ (¸§>¶ÛÙ›õRÜâˆÀr,/H´u^<ø˜,A3|{Ø dˆàX¿Xs¨“ö÷¤tü” ²{žk©–1¨†žY´èlQJe>OÊ )ï9 írwÑ¡ß< ÕÀÈà–.+þêÚß÷w\|Bu8rL}È z\‰?”•ñú<@³ Z\%ê„1[±îJ’æºev¼,-Üc'Jò^AëI×Äû+÷xšp 6OHÄ¢YÚhÊùž¢,ù¸{Ñè© ­°-ùºIeœŠ-@AjÀA<¹y@|6eqå4qG›N‡™¸ßziÊw\­.Í:Ÿ‰F2XS㪠„Ðñd5#}Án ÓP*Óòqw¯îUH´*ƒ¹özo uzšûÚÊðûÕŒ ¡ïGsŸ c[pu¯™£¦HƒÎ(CÜĨLfŒ°¾îyäà/ 8öðµ /Æde¾©W¼ã¦œÌsU’3ëtˆ§úœÂY^ºªž<Ÿ {–ñhù>'@ØïÃpPn»¼k”e˽1L»É@øÊOß(ëLÍ'@ËÆ~`¨†óðêé¹Ê¶Ô$ËÆÏ×Ö³ˆXwKM¾ÃmDYÀ"ǵéd[)7⨢‹¬²G»—¾ç€§’kÏï\Æ_9¨uy‰÷Lwn>ÛVj îxã|9Ük\1µ¢¶Æ‹`»%ŒÑ·ÄsÛá²–P>>僧Ø.É{°¶x¹øŠE”nO–ÖÜÍ7}(ÙY|u'ØÙP€Õð> Œo¤Ÿ}l«»¶ûD Ùw±§á¼uÂ{†òè²K:›9xõ´ùqÃÇ+€Þ³iÙGŽ *éÌÝœîëî.8TxÐ^[Ê€’ÞÏyçBí7 [Ÿ£G¯Ç"÷ÔÞŸ–ê¡$ìYP2¡ð)°¶¥Ç¹˜o¼¹sá®\—’>Ž9áüÝ)ØÀ›à24ÇÅ¥ Ò,2>I¦ûYáP.žáçÝêQ>^$°ŠMwn˜¥”wjшÀ·‹|Ì”Cu´›Ìj{~FŸ@sŒqÏØÛÎÍKõ+ÁŒøBÙÞñœäÞ(—€s,@aô@–E2 ¢r‡{v-bkðêàÌÏ f—ª(’”ˆÛåI±÷žËÈú–(¥Õŵ餺4®êÆ+#Š|@ûÜ}ëß#ÇÕû.sç´›t<€¬—ø«,VQÔå( còœ|Ò=vÀý¼ã•R"- ¯,õêý Üò´TW¨ÓíGŠyÌIºOŽJ½ ÿ{e¨„ãÕäev.È1< yŒ†V½ÄŸkøN°Þ·}ô$XkˆÆ1s} 4”*€X÷€÷@(ñ¯4% s9Æ6ùÒÄÊgM¶›Ç‰V€”„¨äC“>„J‹F¨u¹nÜ:2v‚òÌÅ0œG;IÕ팠ÿ þ˜S5èÏŽ49¸Ê³oÝü{ÄA %@„/ÛˆϪ_ âûùIæ[Ò¿L*d ø EJœdÐÀ+þ {RE8ßå½ó @û8 ]¯,óJ·Tj,B©Ê$W¼fW{O?E‘ x&ˆXœ«vO/¼“¥ ®ž— îlþ^¡‡ÆÈ¯kÙµ6ÿ­-ÅO{@RÛv Ïí’1¥'N¸/;g-0ªs•Œ¾®;:G¡«Ã¤U†£qÔÕ]qœ¹WÁ oùÕ”À=9©ÓÅ.™zhdåyžÇ}X"1·•« {‰ßzFdãàl©Ò7ÿm9…u— tGã~Ü[ÞØ×Šö=6ýDr™ù¡5÷çCs¾²åÝÒR?_ÞCwð¶<éû¾WÇÿânômà>ÇkÜoo•ɵq»3ÏõJ ¬ ‰j}üº{ùíc:%` ÑêÍÁΞ‡šK‹¶DGüwÀd§y¨´©Àv÷w„Ð=·4tV>{° ^=:yôÊSY®Ð% i¦)È‘PËäÕP¬FcåKSkè åó,YR,Îî.ƒ‘Š]='Ë:÷OU7¹m·EƒÊ™@àÒG6}&„ZyqöàDý1Iø`-ÃD<Ô]ÜâNêü«ø™ã§áޮѻ NÉJSN67Ãq¢^xøº^œü·ÜÜÅ4K‚2C }ΩõÐ+å8b ¡~¦[—t½ŠÐëPÆYO_H&ðyw­ÎÙ“ùXÓ×ÇW7Ê$ï v<ɵƒ”¸¸é{#KÖø{€@v|„·Þ?8CÚ¹¼Ž`¬“ÜÀ×zäîFàé!äà+º=ñ³ûϪ žRh$+L”ÄÏý„-#îQxÐ ºw¼JÕÈaÝ}åq§õVŽ·êÚ!ã.P´•ȇ"%9½°‡ ­óôß\&1—”ž6„ìԬDZˆµÈ™µžÆŠã[‘Ý<û_ÞG<—TàJñ<IA=èµÏà>©ÉgÜwWoªœªH¦,•Á2[~2ûÉ-×6pï±æch>?6:¯ðþvú9Œ8ëÈõŒÒs¸¼ä4ï»ÿ8(ßS·ïg²Î}Få;·¬ =wªí=[É6(§ðcf $%%õéYLÖ²œ’}/‹â-¨T§Š¹Gó@';Ý~ä9Sš?f†žpÙå4º¹»#sán°è%‡8ù/ÑñF?˫ǻe&«+à}à‰@'[žÅZ‘ƒí’-š|½' †²ì)±„ðIu,¼Å¨’×_ÅCÑ¿ ¬íB0£4V r|ÚÀ2blÎ-îWãÞá>Vë[3ÐÛè‰õWçÁe!z¨‹íf_Bņ»î¸ONöf‰Ÿ•çJ wÅq Ïí­£"9¼qåYBhÝ\0 ¡O÷¶§AA9‹wŒyù2΋XÎy”pñ#7ŽôQT÷ÕörHÆ|\[Ïë%¸÷1_Bßoôkg¡@ßWBÌyº-Î1· ô­æÒ4±@éK¬³1ƒ¡Çz 8Ön9p±ç]ãŽW@sø©{v©Ãwé<<*J‡àÎOã•àtUg‘óîí/¹E¸RØ€ìsrÇìv»Fϻū—UØcì9hM2Ç/-»¿ï9¬ÎÄc¸›;¹ö²å6š.1Êf¸¤ 4š‘ …4JKÍLî9-?å÷3ËÎÙ'¦h£lÌi*ãWÐNêö¸Æ=×ýdîʽÛC¦õ:Ç.¯JGVC|VDAê!Þ]Õ#9 ФRzÊD8Q¼ºÛz ܳ7<€¯ä=̆W‡ ÇûÖÇv ë!#Ñ$€‡ 1CW¾òÙ¹¥4dô)ÊTîQ•>÷µH{Û;–Œ¿u©˜‡.ùVÔ×—g»gA$ݲ'À‚A²%?¾~¯`gÞG9c•yÕ¸.(ÚAR f$ƒÉq{€ˆ9ùÙg«MñôyÑsy½˜!tCÆAÀ;w ãJz„}åž'ñyhÐqE”€nµ¥’Þå(ü9î·žê9²(W úÈÑNš ã ^ûظÝÍ%ñêÝ×Ó]}¼á®,>ÚK‰‹X|¤,€‰n}~ÊQ]O™•"?:(ßÙÍPä Ò)ÈG–½è•Ï iö—<‰"_§±„Åg Ü_w’¥”ÄxÚº»œ¦Ýn]N‡†{Më ³eš³Îò¶_i8˜÷_`:é°'ªÌ}=úIäÞBh5JéÅ ˜‘¹‚yGЕ—L³È9¹Î•ÀfEÁ6¯_ŸgÇq[QÌxFÏÝJþæ‘ÓxÝsvg–*‹|—5ê©GpŸ;Ã;O۽ĘŠqŸ|3ðz^–pÎgu8šƒ¬Å¯àû¼1eÍ‚{sä1Àu-•f}x¾çÞvÈ›Pr0UB'››­=0¯¿b¾Q·'=äR²r™]síYßã­ÇóXNÜjàšÜ*!ÆEÅÜ-Cu‚æö°©ÿ•Ûtz_®'Ρfš·ÅVá!¿vŽœÖM”ßÄûx«Ôö,E|U¹ %]ãC¥âÒ@ X dû_i8•’.! ¼Ïõ¾¢R“ÇIùIgÁ)e‘㾑Êx¨÷=]U|¼ÖœeÝå5纑ç†"”£´=âÀ0›CPˆy犣´x ;ÓOn^)§´§Dô½Ã³9¦Tø³{ìHF⦙„}g*9úÝ¥‡¿%’ Üýéu .À @4ßÙÙ=KiªbhyPÔÇ Ö–£«1 BÆÝKþ Æ%C$›a,ßÝ<@¬xOÀ3\@E¹îÔ0”ÑK~¼bÙ¸Ä&Öǃ¥¸ôWøŒ‹¦<‰ü´˜uÓ¢ýh€f/–x޾c"‚¹1îr#¯›å—JÞA¹A2{ü4|èÅßCyŸã·$€¡€„¯œ7pßç³]<æûÁ{LuEHKä¼j˜Õuðñ]8+ Sp«JvNÝ yöª˜ô=FÙ•f*ܹ(;¸ËÈ[ç¤ pEL0PO#§¼÷Ê7ŒÔ€$1²!.“UjˆÿM÷±“Ì ¸_ÉÌA^-“aqz•ñ7ß›áÕpÒãÒ½fjW÷ó·œ(¨sFeœä.h/âa¶”WÖ7bèêZ¥Åü7ºú­·½q©K|5Ú¢™¥á¡†Ï÷ß‹dšq»/aúŠl¦'³©—)uøH/θv ¯SZK•|´è%ªÉZvÞ¦]¿ÎO‚ãt cÄO+ª©Œó¹'xnIÐLe¼»Íp´”ÁO”Yš’—æ¯,äÔîq$±ÍLTŽro"Þɤ’¥…—ÔXk=ÉFS¡ë[ÁÇg©•—ù# (5Üé Êrœ9ÖÏy«U~Ѓ_AW|ÀˆÝçÏÒÊË’p_²ù“&j`ü. ]›ëR¹¿“ëu8¢Ie ”¶ŒÜWš4pNÝuü¾÷T¢äŒ[¬3ˆÜÞëÉ=àº|ï ¸vÙ•÷8^>(™Jå¯RGVº0¾àÑÉ#XÊË! TühèYñ=ìØiPK Ž_¶’è0d»³ŠD2¤ ì¶SKå°îœ: fv'“€íõ‚ÄpL\qNݬÍ(Çž0Þ%k. “¦ÐOàtKzÔߨ;;TÔaºƒûgòwyVä5´ÁÐV]/Þ1ü¯Ôg“ô±¼WK×^‹drÿ4¤ëãñɇkܯ’JÇ—Þûsš\y™ßå0³.±xÆê™dè‘¢u¿šy.|ÄçÎÆa`Á-ëÜß š@…²óJ£ÈÞ¶àqеLè®×UüX3å~Ë×ü¾GGµ¿…¾ï*ÍŒ»„4å÷ºÃ:–„wPð++´Ø0SÖê2ôÓìéþýÙ+&Ëuøy Hå÷ÅÙk°tÂÉ£¥¥; Ø@Œnç/<ÁÌá±›C—¼o F_¦™äD¥@ÍC¥#rËÏÁ{xEi S?ª½u¤ ÝÏÇ•îëä¨â…ÜWZ£Ÿn¯™Ë_~væÇOoe÷ªx¢ʆø™ÊÝ€,pñØ#%’R4…}BÛ>I8(¥@i$7}€*k…Xå­æ¨Ÿòj •B/ö=xÜQxQÄ=æÆ¾ÿ ÝPjD•Ç…å“,)ÅŽ;ÿZÂýœ!ˆܯ_!ÒÈF™ðÿ‘,,¬Ïfà·,ŠV[:ë»ó×råæŠõ—Íeü—&’qÏ÷X+š6‚¹w3͸¢A9¹È%%®ç¾öuóñ_Wtîyp•n·ÂĹÄÏë·.€qv†v¡#Çn.'꼂̬³ˆ¢±#£ãæ&œ¥ É4uC–g—fŠä¯£ïö‚éQmã“>d߯\IehFØÜcïöuˆ q X+ù·Q–xßq¯}˜dq ýUtj—³Θâ1,; •ñ9FûÐ-¸sÌÎØ¹È„ŠX €jHN éí[ø»Cø«ÛGiâƒÕFÏüT€ ·ž”·–ì:~wˆwf0´ÎÓ¥\EŽw*˜”ìݱòY@‚¿¥±žÜ²qö è£T ^i¾é}ô>#Q:qÝXP¹ßg‘7,•?8cšf'oº€{0™‡g±ïáY¶êõ¤[ œ·o ÄcX“@œ£ÀTºÇÝH©¥d©ùI)ò‹I[ç0]GÇ9{œAìE°ó¯àà%ÂÉl·+ãõyòýÓá:/°^Ž–RÊ‚_Ö®(³y¶ÓÆQ ~œE,t'a ޾Ä]<ë¤qçóˆ]¦ò}Ç=™ º;Éä襶ŸD-AìíÀ ÄAÝ!ŸÖüÚWýdb'ÅaÀi7Ðãò`–åt«ïßÕm˜3ǹûßõí³§uœ‡à ¥ZváÇy¤Ôj`(áâLM$uÕµËû¸Í³'‘gxÆò5»ÅãU4³à®•Ïû­t^ÏË$d×ßbìIC{‚Åî+¯\U‚cOõs!Jf¾kºº:ôwÃM:ä ‡2`E@oóQçÖ–. r½‚¥$Úø&#.‡{ ­æÄY„¥®šŒ8¥‘.éq6]@³~_ì;“œGw+Lnµ†¬3h'¶Ý Ù5ÒJ‰EÐaÇçápÈå€5Š«ìdÏ"t°|÷ÞÑøŠ ›Ö£Ànè ]~@u0\õKVÒëx¹õž€g4ù;^ 8ÔöNÀ”S—4‘,Á±@*×ÓÍ+}lQr€·økÙ#R.…§ QN‰°Ïàó A1ܧáÈ¢$†p…3a'íÞGâŒ]Å®‚Fœ)MÁgè /<›¯0Ò`¡¨½çNç9‘·í]ã¡Tü¼ íÉÀí[Á¿bš/¯q–C±^|r2~žWeB*ý•´ínÂëX+éBG›¤‹v1îå“м|â ²¿x¢„„Åä2€é€ì0:Ä©p ÚVGWïåD÷@$e<VøžÂ‰î…øë¯¸,³µÕ«c¦P¢S_»&a:7ëœç¶gÀôÜ’Sœq/[okæŒqž@cì§„¿Ôm_5A¶C粑UàîÓ iªËÊ`²«LfÖóÔDK®#%}Nõø¤–°'¯I)yòÑÒÒ“> î«`Ýôxpë1ÊZ\Lâï—’SgÇ1ú™a½–ïÞ2žœšõè²Es ¨[;Ì"¦_ \컇y¹"†{Ãë{õøÄÃY3ü.gˆ%’q$Þ‚õu•¯‹òBñ¸g÷¹¶j¬“•÷1neE®’xC¶‰îˆ|MÊ6äJÎ帵¥FQÝ4Sœ#¯*œxÔ<þ…öCœÕ®D/ùXúôEBÊûÙæ™ ¡”ÀS¼ï©–Y­.1Œâœ¬»’^½û¥ñÖ߇ôÈ Oåí#“ÐòÌñŸî,#9e!(ìÞGZC2ýñy7@”CE,´…Fv™äªU0@×NÉ !µ>/-~Ùêá\EñÆoŒeJ¾ÓÌè¹¥ŠŠ,Œ)ºG)+À%:qŒXj’Ä ÔÚ¦,¥XdæQl}ý•αz92ÉÐð}6Ô“ER™œRú»s0½oDqè9ƒ“ T_¿"r9÷=Ù̽°ò.© Ø39<|¯àûL†´÷ªÇÕêž™Ï@½·mt¯Šýr ñègëoá4OO›læˆ6:c¥3ÞÖŽ£õÙ[¾çôÒRÛ ú ·Ê’ò{Òõ@¿øõÖÒêáÔÌSØ#Hí1Oäéù9åÜÓlÉbÀ¬[¸M„7<™¡<åÑ„,îô?Óß ÍwWÃËÇFR {äã’qð¬ó““u†Õ¡3=‚Èh:g¯ÌלKhKH”s^µ8’ HïÝÅlÁUF’zó &:ÏíÐÐEüÆn¸ÉQ].“òþÄ'µÇ²}¤@³âŸœ¡‹,(CCCŠgÄ£shϽÌ3LI—sg)$ÐlºØq¸Ífa9´ÏSɰ¥ýì~;~ýâ\rgBv/xÈÈÒ“Þ¥5îÛí*ü,™p;ÎX€2tä:5§!…ö˜ÄQdu)2a¿Bë¬Bο]ý1ªöyŽå1\b “P7út¾_ç ]t4®ê{ K“‚œ®2â)¬r =¼uBºþ8{íK›Nh.Ïul…Kwò'u’e—Ûº÷Ctâ;®ó™E•V;ÜW7ÌÍÙYràîÉÖzRH¨ë`ýŠGoññý@Él»¼À¸ceÖƒç µÖ•ÝáŒû<¬žž-HÙ|¤óÌ£÷î2]¿õŒ)‚ZjÒ÷n¯AçH™½:L¼Ê¾ï}£¤2¸ÝÀ ËáT9%÷Æs9;Çav¡ÉZs8d¶²ÍÊ·S`Å“ç#:«wÏŽ=f½CÌ|yÙ²,µï­qXO3õ‰ôq«‡/“b³~Àüº—òÉL¹ØhE…¿} Ó4…+eý½³×žüªÒ‚P2ÃkJúߪàÃX.Ñ¡JžËlç³æ.AöA/£©\ÙLàîð`  â ¸O¾ëÐå«ÃÙƒ,}qm:rÜëÐàæÏ?ƒõD½êAÄ‚õ ^sꊈk%€•ôØwÏ—°#«Ã%rq‹¼Ã1lbOHõˆ%2Ð’åxy€+OyÊT\9Tr¿ r´—ÐÖK\E¥,ÁmI™Î륣ÜÖ5ÂHh.KÍœ_«ø-ZeÄgXsÿh´K£pËK;…õpÊB,>Á74¤“†9Tì.}ѬE–œùu‘}ú©‰Ï.@Á½tÁßAD ÌF—gñ¿ú²å°,^=ÊÊc§@$ùèª+ïyŽQ•Îg„g!{b *ž±ºZQ•jÜKJöå™/q‹—åî.¥â"1ý¾—x£dÙ5œZ>ÇOÝc˜„‚êØÇ}õߪÞ}&î}ã 蔚ÿ<™u,%ÊŸáo%Th¯Ëñ=øÒŠêÃŽ®b§ç}<É|«#!GdWÒó'âgϱ“{†|§âвƒ>;Rðb‰¥–`IãÅJ÷üŸÿù¯ÿÃ+ÄKø^0²(˜ú#_ùR)+8.×g–¾ñ_ÆÙ„DÁ3GsI#¾™b )qtRžä R F–E » »QC†›ì'¨$(ûÇû°¯ûu ðϰœS‰%H /sl)%éqYN)£òrBþñÈ(Àšó wãT/3d/ËQi^ËN‹hL–ë É1GÈTâìEöDq-9Tû‡ÖKÂ!Wü•‹ÓPz‰Ã&”õp.‰¸\e^÷+èþŽR!^1ž~Ý0Œ¦¬Ï!ÊñIþø#„™²qôIƒ<^,œ…®—¾^è–ÇËÏ[•‹,ŒÎiÓ~Ó¦Æxg¹-aýùglÈÏ9È^šÏz½_JeNá×¹/ø×{¶n¬,ã4¿ËüTíí¹­µÃÏÜ++þõo zîÐ¥òx/2 ±Z=ÓU=ý<7îø`×{¾äÜS1Ü‹‘Óüê°Kí*£wâ—Þ5=y†%ƒÁ­ü¾›R Žg?õ ÷ûó|õ\R¹¾HãŸgˆŒq†õàÚµ>y$´õ)©á3Ã͘*•+mm¥fà~S ;e¡N<œ²³Ãz/ê•,2ùB÷Œw®4iÖEn:)w|çb³+¶¤P*Ô[È‚"ùü”Šj3 dó‚!Î,¼BHFq‚âß ôs*ªl1ÁÞ±S‘Øð>á‚å‹­Wn."AŒ'Â:OìR"òâXAC—Rä%äØ -Íã™dåéÞ,r ‰½ä>ú¾>î)$÷×èóXã|vo~ApÆ*9X—Ô‡.ƒxòÙ*~œU¥µŸ»õk}´4w¾Òœ€Ûzjì83åìKè¼ÂÝÞóh}À4ÛtjÜÓ…g>XÉò®D"<—ŠíÈ0¦oOH¢ãI€ï$;r‘ áÌL=7W Š^ì¦ðÊÔ•Ìz6TUA¨ó–PÞÇIqæ¨xóBÚ¯PuöhðàwƒK§$ÔÜáw§¯Ü×Å~ÇÔÖu·ù¾áÔ]Œ€{‹ æeÀ\Ò±ëÈsXÞpßÛ5{u.âo1(Üž4˜Ó©óæ¾'Â7{%Ц ² cf¯¶ObŽÖ©§óß2|Wá{l9Ÿ™ªa—k |•QÚ‚òŒpòßÂ]Šö¬ŠOuÀÚçÔG¼{+ªÉ5åÙCÝGZ[c¦bÁó ©†2KÙŒ¸Û¸}ÓÔO2’V‚NAx •é¾dß– ÍÄ‹;ã.õjæÎé~“ 3Ü—ûM µëÅ,f-»]ÄLcPülâñV2«³Y¯ò‹PABÿÁz±¡e€”FN‘ºZwø&‹–íÞ° ²Å=GB wõF!ä~,ž-êR6‚ uäðãÒéò psž+uí¯9ÉYp9ê¸Wzæ€ È¨Ìö1ÊrÍIL"­qOÏ= iî2ÙŒ½”êyZ@Ë)ƒ´²€‡:fÉ<^¿Æܶ:{ñ–Zò}Pf‘àÊf|†À[G’—õR!—åɇÌ8Î(ZsÆšàl‹ÂþÂ=4÷œL€%‡wUZ(þ ßå,;í uŽeWM&¸“}×Y‘°èÝ?çï–e 9rЬb+0I…é,¨í}NÀ;-î&„¥áèû‘*8¯zõHyËS*x(éwÀíöŽù.ZÊ`(‰Ï°‡Ö²¨ÞfЗèÅÿî-÷ô\ꡎ¼±Ü?QH¯ÊcîJ ýþ^ñ_´Û˜Ë¸ã™C¸SMúÌúyÏŒÑä¼ùæüiÝï¥@ù·£_?Ï´åë=pe°xôï©ïÄ£¶uÜðá…²ÕÔÚÞ¶M?l«Œ4*9¸ÕÒO ŸÛZó÷µÛLO…¯ŸÁrAúÒVÒ»SMœÕã„-æ¼r9zóXgÍsùRâà¦ô™áÏRvf0p®ÂϦ>rꬄ‘•Nðj^Kr“•ën8Øó*AñÛâÚ%!#€ó¡RˆU ÈA9 &^3”[¸ëNö5çh/!)z#&gìL9‡\Ý%ÝeZf¼ã¦‡O¾d‚Q!&åÎëT!ktÏ!Z ë©F $‹F©Ï¹‡ š}@Jq <ÝVE…w ðyÌðîR[ž„à…œDnø..­ñ#EÎ;—dÙ"P½/½+†}ˆô\EV‡Fº*–óþ}X€ …´”B©· .Y’iúYÈ©ÀÐèjf²5D[F¤éüÑ´€†›è™õKe¿dKŒš"(à© ÊÉ}™ËÏ®ü^~d3G|—„ê¢ø}Âr•ÀÝ_Ä;ã>îΠ£[Òc܉¬J­ü=–ËRŠ0Êù#ÆLg–°ê)~'|¸&ľ[Ÿÿ¶¿€éÞ€žèûkH‰5ú«Ÿ?±Vœ[CDê`Î.ÿê»$õ9÷œ9é”͸|»™÷ê›QBœPfˆž1 ã׺°é}/˜´dzХæõKv<¿ß2—l®Î'׳Â,½k~úéíÛ`¥ š*»åã¤Ü€òô©M÷xÔ2Ï-oAv,ú¯|û`kœ¥(…Šêš5Ô†R£·Ðñ»ß‹;óÔAN^p=1¢Ê1S ì9x¾©}Åcá<‘F܇]§.IL¶€$këÎ6‚Ë`4ÝHNm}MPÐ"[CyäÈJp"åºÖis  }à’óÆÞ‰Ë×ÞÐÀŸqq0ë óò¬Y:~0-ØÇ£%YQoDÝ{2æ\LFç8g¯ÂÀe-ì®̹†Þ]çè®üùgè’É‘KRâQ*¸çÒÔí2ubºª8`?Ç8Qã®óÜ.ô.tþd»O-3KD|iê–øH±ëõ©€} ‘ õú 9¢(kåÝH1–ø^¨„uŹ ¹œ /õë¼§gI °÷ò«á}&‘{‡“…ïº8Cr—Òó:zÖWYÝgÖ”Ô¡®½Í¸Ñ PžÓm?“» wЇ1I  ..ü1”m1ÒžÎþÿ ÏëŒÈd®ø¹KLò8Çr w÷gëÛ5Ð<³Æç<¬Ïp |hòJÊ2ï(¿¸G7^4Õ8*»Þêý–üÆE#®q¯Ç:ÝÞ±„ůÝ%`4Z¯¡óë5³Nx]Šmø·zsSð: cz5„#Ñ„ ð€ËŠm’¯|ÖõÊ[F“kŸÇn‘¦wœ³§ Ç5ô€}Y@n2[:–ýª‡³3 – †8³ò±í0ÙTö­ r &! 5ÁY}tÒô>zëâ¢rSKÍ®¦¾Å£¯X ðhôdÁÇþhõ˜UéñTd"é zö2£ïn3í8BH<¬Êõ3lÕeî–¸ƒ~ ù“¸^ŒíDKP÷rM/OKå4Švö•}§²Ðå>w¡…‹ÇòÐ-a´üXx†° eiêº|º†‹•Ç7Å?ü[bqÅ+Ô™fÒÕúH£¡I<8öª`#•ìh`—Ç|9/ïé¹Õ©ïIÏ0–ÈGkÅkV¯>̪óPž»W¡,F0‹1·¨˜qo+à±c™GçÛnuº¢¯x÷Ö;sæó}þ à~Ÿß+A¹Szñ¸¥wǰf;û€+€8'â„xÏ=땯–ÂÖŸŠav}`p(/Èëáö÷¶m÷xô‚$Ž—1X¤çæ>Äó­ wW7^ô«ßbÿC#XƒŽö·Ô- [%'`B4wϬüLiɃZÉÒ ;GîcÍ®;/#™È^Cw °¦÷ÉÓãµ–ÍËiÉu<_VŽ:âé±-da‘³ûçŸý…a8·ÔÌ”f‚t¤AöDLÞCçŒJ‹2M–ç¶òÌQñ€#«=÷ªÖG$r%ĤÏL=˜+Í®˜NŽ~*I~/âYc™ðÀ+Nväp&{ž³²Ñ”ƒ¾ÇËKÄOŒ¸«xFÙ·û%ÃÄaC؇íca[þ›{ÏÇ KÃôD4UK!Myx:ŒãõⳚaÏL¬#Ú5ÌêÅ›M7ǘ¦e!Rq Ѭ”ûd9.ÎáÖeÑŽÆ1Ëw|l—Ž.ñ*e¿Æ  Ó¥Úw#E€{ådž,½¼nò˜x†Ë"4~í©´Zs‰ŽÈý»Fç']°J¿s/y„ëÝ!~VÕN2~s—¶–„†ŸdÆ9fváû ¡V Ž Î±áã È{þ¨ë›{®koYC>gxwí9žŒ‡Ùù~Øsd_çéÀѬë댋z§W0ß©hFÃ…1ôõ+àûÇÙœqO²ÒóÔwȾ:‚S·_½Ø\s¯•¶0Æc•XBÔ©¨ÞÖt¸—/Uw] \b:ÐçC«–ßÔc²(‘\ˆñ>ÂAß /Êmq¯!ZDhÊÅO—Þ;yBÀ›ÅdøòY”=[ÄlåG¿«ÅR ›tSácÒ‡ÃÄí±á¢—ÒØh¯c|øk. d]ä 1 @ȆD©#¢ô3´e«D8Î*c¿¥dÈïÅAȃœ#‚në™}ßÝå 7ú ?~þŒõ'—)S·òÌFÚvW9SÞø.ˆŒïÍyœŠU¢fÚyn %;o-1-)k_mÕ8[ìúx}2,¢¼D‘RNe8o­1kç×%j‚Xzúléƒîx£mg? „OŸH³¨”wÀˆû¶kž!Ï«xÇÆ© Å·oÙ-!×.i "A¶å™`7$À_0”€/û7ˆ5}|¾Á­ ¸¥ÒÅœ^1mõyV¨{Ûº¼±öóPñAà9M³~:þÖ’[úøëCfâÙ!A𽍄óS9äšÃ¡œk÷¶2ˆK#3w|ÏÃ|îànß½ øX6—½éœ_å[¥Ç°¦”CÔÒpªÛM6™\ëºa—åL¬c$QâïNˆô¾`uW ·³ô u\—|H¼ä*p¥Àº7ŽDS¸ra †ÿú—[7ºù¦ÃqÅ¥…Ó<íö¨A/Ué¦î”¢Ð‰¦²}¤[ TÚö¹ybmïè~;®ægwHA®JÇÑtøè.(%Ðw·"yÎL—_zhwûήM.ùPiêVƒ²gŸk{´:]8'I‰ç°røU",Ofp§ k®qXX1ºöê|Á\:Ê{¤´,}qŸûl›Ë$/«²)§Ãe—$ñNR.'/!O¹¨çÃ>€,“ÿÆ~ kí¾>9İ~ÆÕ?Ë\ÒC¬\¤t—Hµ‹%ÚŒû8†iÞf~™«jõÕb®/á.ÑQ`µŠ¢k Çþ«_À{ã¼+þ-»… COʬÉ`Vê»…GÙP[ÙêHéûø‘·ii"L¼V«ç–_}‹éïl`­JeøÌ¤$\¨GEÛb ù•Jô Ù¼ŠS¤\ÁíÀj‡õž‡‚_Û’/wÑK]HÄZñ‡*p×Ö×Ò/ø¸¢e!|µ}­Æ[!i ÛÐÒLð%@kîÀº”!• †£PÛ—¸Ùþ2{ï8ô—:?+%lÐ2¥tØ<€ë~ê¸ÇާÛfaŒô»YöãL9_4áÃãùºèJÇ,~”{ À½t^w ¡žÆûÜýÆÅ*jTªh@a©Õ}tÒyqeŽR¤$ñ†´ÈLäh ÔÒ`ýµ½Ù_߈DuÄûñ-訠ôU§sÕâž=§SŠvZqð0+ s¯†wöŠåÔ1O>®Ú'ÍiJy¨[^º;»{æ¸9$InYvê>ëWš ä@æpþàº@þIi)Ø'¡QÉ÷kÌQãÔåpv™·ª‘ë\”êŒÒjÙ%p}<Ö~êØ‡.÷Ê\³œA‚P 0´ˆ|?ø¬í2¹>T.øy…µÅ=_ù Ù_CÌ.Š#àv<ÿ¬B¨îcÔž0.ÉsažîHRœK~éý=öTëœÔ¼†ýy°¸7Ñ  ܰ*¹žÚŠesè»öfœG>ÝáÔU>{U?oòèÿN[ëÝ1Ÿ¾y¯ýß½¥Ë÷£Ô¯—ÃÜJ´€ã¡ìã¼÷Z@ºsÈÒpÓ±.UËw‘%o×%W™ë2 ßÂhˆý `Ä!Â~T–J:Ï{DÍç+±Çß;4Ç;/_BÌf·@6SNÊiŸÇ[y­,ï}Kí4=˜«5Ñp=m(×)A†¶Y+/ÀªÁGð»r×¾om9Ê×ûVpK†+Ëü˜Š.Ào%'ӫز`©Ã‹Á4>LÙ{»+K˜ãwA¨ À”ROOH*xJ7hŽojÐÍ“,ÝgÚYd_Zæó^Êï;Ô#vÅ9Žx F!T†e­qCgÁKA…Þ‘†ÞUïW•À&yÙC¨­G—ùþ¡ „kënô {âÏš"7¼;î$ÕI±4²Ä_ù´-ãœx÷N~üåTCK}. ŸÛJËÎ,ƒQ zçÇYç¶ï•(R{»!£RWåEãÚú`ôUèJrö"ýË…XmZBƶ€S d/¢vU§÷4¸ì«à~&£ßrè*¹örÌ´´—­}ÉÓÃnÒÓ]Xòè>]SÚ”b˜™TT•âdú3ÚüdÏ’˜GḆ f>ÔéÐö¼W0뉎Ónësä'ßøò%¼¥>’çžáìǃÔßzLù²áøœœŠÒÖ- 7; WzËAÙV‚{ ôàÑ[}Žaqé  ñP²)Ù 6‹,‹ö‘ÿn pÑ-—v­wW9‘ÓaksIš?ÖÑQšÓÃG± uáÊiíÖzwqN¹ŒayÞ½å¥ÀAá¼?}ÈØØ&R—K–Ü‹Ú_í‡ÒzR.=6õ~‚Ã5ƶs Ø5²*“ø½%¸—Î^žý̘dŒýLÐÿɼlí¢þ€Â¡Ä×âýX²„tòö¼Ìœ"#®+v jÝ Eúf ,Æ7°È*ÝWt\PБFšu6.VQNªà>GTU*ÐI†Ò ªº)¤œ¿Qä °ÉûµÆ=W™Ý÷ Wú¬STC#N/<\ûν”ãÒj-8;9î\äe!/Ã?~üú5¯×ýõ—I}¼XÞä*›ë™“|êdñ=LDD¡´ˆþΧO-]¾ø2‘ œ+ð;°k¿Ïçû@ÉyûX|fîˉ¬-RZ³@1k+JÃÇ@çŒN¾gúú‹šÑ}f×kÔÒ¼\Rlm©L´[ ][aÍ÷ÞŸQÒÿã×àxÁ÷À=ß#¼wù½È6æaîü …Ì8>ö â#³|œ±ã«ÁL3÷=öúÊÍМJ?±uæÆD-¾dn ˆ÷Û.齡UŠ=\tÁ%KŸZËEÆJz÷¬5'ÔfÙãC®#u~ˆ֊5îñíH&|ž·x2Á¾íˆ×Ïú2)íæV¹õë¯äøQÓ^ÒÙ^:ù>ôTWgÜ•W8”Ä0w²£ ÿ–|þ*Ëo$Vq¥¬L!¾äàhúsÚ!KGú¬?üûßÇ‘o%z¨¥ËH¬<úéö•÷n Yº¡{®'8fþ‹º àÒº±ÒU¯#OÐ3‡^Cq|1J×r/ÈÝýËH²šýÍjx¼ÆjD•À=¼žLµn%:mKVn5–ï= 1ûгú-øü •ñ`äÓ/^6dE{ £3 /GEýÊfÍý7l¸S¹§ܵ¶eªKYB„ °½§Þ:|_ 7¼Ð¸Ÿtþßhõ8¹t㘗Üô¶qOÔñˆÉ8mã”Ý5+ÜÝ ¦ãâCPv9tò¨³b%ÖjÏDÒÝŠæ›k»9¦`Ê1L©¢«w »ºé8;ˇŸG¬“)H„•ñ”†ªÌÞV´·ŠG扙×·\ fzÊøš×w_ù¾¾Ÿâ"ºÇHT#éQ–ÙôŽ4ÓPK{*dvã¡b8‡CÕæhÄË.Aé}A|—ô´FµuyØ´dÔêÐ{u`<Þˆ ·lõ0–§!ˬÂwIŒä+Lç¥kEP®œæw•*ü’¿ux¤ÑÀ€‘J!å0+¾~ ·‡Leÿl&™—(H¦Š¡„Že}ùâ,u6£T0Sɳ ¸DV®D/¾n5kË}ÆÅ0mõ(ñw8Í"˜ÎóÓ{wú+ލªÌÐ'sZ­ÞÏj{h—±Ïጎ-e´–Žrº­à.¿‘ ™â"èÔ5“€3/åXgËŠQw-e¯Še×Ïü­ƒ»G ¦÷ÔY]²éYDWèçBÚ9lç×îËjçäœ[pKÜìíSŠ^fÒK|Mò”Ñ£`ú™x¦Á¸Ï˜6>‡~.ˆ÷ºpT=†ûD13×OÀ-m²; ŒÇQ­ý[F”ðÐjý­'wîo#ý³ïˆ‹-A@m+ÆèoùùhTq$ª‘¢}žohoµfÈöS Θw6”KÃc Ãjà%y˾ î!3øãW£¥zÐJãëy¥ ×`· †Ú¥4¥¯ÑwN=ƒø¶ü¦Ž|ò×2¶æoʵüÿõר?åhlæø¹Wë¾Ä•}g^·ƒlñô*TŠÔ0ZqôÎ_úãVc©µÛ}ÉJªÈûîšu@+0»® •0ÆÝÇÝõ­ñ<}Ó5Í™ãliys1À‚ ^û”¯¨Û â$ÿU©È§É”Áì–ºül7IFS}ß{.ýÚ)§\×ÎðÊíè…¯÷•N*CrçxBÒÉ6‘ ŽW‡ˆ [%PÃà)~£’^™^}ŽŸ±Üu=–îõµü#;µ»)§DJñð“Éé³Îô×ÖåÊB_#ŸO(Ï7žuPþ¿/ ¼zU¦–ãÊnƒþ“'ŸÿV>ôø|‹pÅù𽸠©×”˯BöÙçÚÊp?ád‘½ît4P5so®ê¹oŒí­2¬çÐjÈž°ò;¯y¸pF^"àòíʪS¯úx¬¾{ ßÜÖ÷LPxå¶z +GyVætæ–CŽœVÖ%åITU×ëÀ(éLäòW|cfFs8xG_gÜgyk@ÉRäïЋÀZð«] ½&úåêíŒÎ?2Q'®­/³z\{)_q^ª©Ý* Ú0ºžjðœWŽ:›¶LH­÷X 峬({û”¥`€U6¯]y/(OØÍqgÊ!r™á_‡8îHã"5åÝNã¡`‘Ã]ãÅeî¦+ÅÉ43êHzz )ºwµjÝ=ÃÃä³ý® rŒ#ÓLxG¸é‚ y¤H†ÁÍZ$«Ä’…e—‡à^£ºM¥O*±Îy2!Ãw%Â*#æñ‘Ä^E÷ŒS `ʯô¨¡“=; €ræƒjTÔ^UÙ+àþ ÊþüSÝ•·oñs/BÈGW¹ÿ]Ž•­}ÌÔ=^²‹|iy©kSCÕµ„¬<âçòË ',{ 20Gˆ…˜ÜRÚbú«b)q÷%›f™ Ê^縓C „#èéÝ™­÷=¼¦,ÿØôë5`ƒZ*³¯ÛÿÛ³ |Î ik{Qq*rè{âÑi…8èx}ñ1æóG,XÌgÀî“’`žÇÃÞ…ê–äÄÍGK€æçÕêýeâö‡¦5aV`SŠXF7ܲåùÃ51úž÷™å.w‘ÿ‰àNfõh,Õê,E(3ȃ•41¯éÎÜqE|}Öµç}X>ÆÆ‘#–Z¡$ý¿ŠOâáJÏà[¯}¢.“qê­B5£ŸÃ­Z"Ÿpó5Àºx&—=.ÂðœàTiîVzËh99ð¥ xrJµÌzt‰Fœ­÷%ÏyÅ9H{rÍ^ã\¢CHY¸ µÈ´wÌÆ|¾dAIÅ<•œz u›EBy–@J&¦¶–™åý,eñà’²c D[rÉì°Ìßùå—¸â\äy¢ ²’ô‚Alº‡UI ƽ™’K½ÇKQÄ"CL:ÁC¾âL¶Ê$)r+Ëjß!œë±åppw¶;[sz‘)ÿ~EîÝžóe÷”Sºùè*>G Œ^ï¸Ë!€û–¯<ÊÙFÏë½gPû“×b˜þ“k,¡)‰’;ä¦;LüÒk›q÷M=ÍúÍð÷¹,¯·J¿G P_.¢>I}dûëÀÛM¯øVI¨;¯åÙÛë)D¶½•ö Â^èÒ¹Ú~þâϾ鳭ÀÞ¶¸ 4agÖ¤½ŽŠ7 t¯R‡ «{;Èô.¡>UŽ¥º£¶§rªÀÈÚî– ¤v°™Àø¶ã¡³Ĺg8؇2»çrï…€5ù>Ÿct_iGGµ¤8°.èG>9—\þmv•É©®â}ù“ |TàË”»séY!61ó¾Ù~ÑÙz)e]à†˜âÔ%¦R$–sÏYÒ 0ŽýeWì%ÂE<Ùz2o‹˜~õ¯¼¢—¼s·¥†¾5ªë‚^”b e²(ÊFŠÙ¹EÛÂã×°€;=ÈÑ7ûŸÿù¯ÿ|'˜æ¶ÐÑ\39fÈ#Æ<”žE ¡*sa[¦“tÓ¯·…öŽ®V'¯Ï>I\MH/ÉAWî$£½ËÁ 0d!9—”ÚtÉÊLY昤R“Ïð|޹-¶âCé˳Ì3ân­HØÏ¸"-³Õ1îóâ5g_–^ÁqóÌv‰{‘L ãMªËŸ8îóY˜³I«H]!^HwÁqQñý Ï( z€ë“i®œ›ÙºïCrÅ4Æ_Ö¹üù‘ÓÖ­jžq¿Ë²Vº—ÐgÅý}–³/¥nç×N­ÝZ´¸^ GMî4”»„B5ÌUÔØ!Yþ‘a\{MÚC®R×]ˆÒC}ì¤Î}ÒÞÃ%SN&OÜv)b Î,`ò¼Ïºyw@šq/å7ȃln’UÍzô¶ >åìmBº¦X"ŒÂ¯uÖ yÀ;Ê;»é£«ùøĈ»À¸¬¥Öç`/ÐeN´´Âtʾœá{f÷]—Ïõ,GÇKSÑR^"‰mµ³„¦•½í&y&vc¤)ËǾuÍ2²ÊÏgœ‡#Gw‘÷5»ÓŠí®5ååÓ‡Ï5¬ ’õçàÉ\岯½ý?×…v^_TƒfJ_3}¢k¿“™ŽõÇÒ¬»ÎªÖ'˜©?$úmzq2¿|P{/=g­îJº-/¼«qÏÖà¯|‹Ë±Â¸áöäQk˜vy鎳-ÿøy g¾Ö%âÖ_­?$å5•<¸-BHÓâ¶Å²+§“Cü¬0yev–f|þª¡öŒ”¥óÔÏUí{Þgÿã|×ÅDJxǨ\» QKtÚv–ydVNç’—”kþú5õÄñªé…ö^j)=zó#²ú-mÎð]s äÔ僞çèVjësÀ{J•>î5îÖ~y{ÝyçÀ ý‹JÈå&}š4Èãƒ%ÿ겇ì;..Ù·‹c…¬\“ØoZ=°s•Ìf_<Šª¨ ªÌ5ËAÛìÊ’-5ÝåF2ú¨”ã˜ô‰æÜN…„Ã=ã‹%_KZ|ç6^]S€j?û¤ JÔ0±à3®§‡ØF¥Žóî% îZö֚ȿœE…÷yøEJˆ{ ]m9šûEm5ymCéÔC¥bޝ®²23Ÿ!òï¿#±µ~†Ö<:ø{ .·ž¹uj9Ë£éÀc»%‚ŶÀ­äéW;ÞóÀ}‰zIeƧ0xñÂǧ޿ŸýZÀDg܃‹ ް„ÈcÏøº{À"G¦~táPCÜyôcq,°nýò#:ì†_Ä┓¥bžÊc9ÏÇ=ünºç ?3ÄÎ÷»LE½ÁZ«š½hjÌ|ÄÝb’B…š‹åùÇ{¥¨–%¥»ÚãJT¼<Ž ={ËAަ³€Ü^‰4œIU·Ás鞎#%ØGM†®kç=Á¥#iˆc™…’帎¼„õ»daåhîû–ã|‚Èm{D‡³/L§¬HNóàËaãˆÊ¢„ޤƒàéú} ?xÑ`Ý0ëɦÓ½H Lt­¼Òdyµ îã,b¶®ö|K•{=øo–ååŠU~E-%…{®;gue‡ ¶Ë¸ZËN—÷p¼ ê÷ ægíFîIºx&ß«÷†Aq¼ˆ{ëå¸Ut¼âiŽc¶7¾ÚWßÌ”R™]ÔöAï‰:ÆR™{ꬫ#Œ{â–1÷Ï%à¶…Àc÷ÃîúÎ6¥È„*Ï@ )6®JQlô¿ž ˪xüú…‡ºñó¬Nnoê|džãð$aÃÜr¢TžÎŒÃ*WµT‡gÆ=CÒ2•0óˆÙÝÂõÜ,ZÐÌb‰–ucíƒ^ÖR¡¸(ø^L÷ä8cù[>¤Ëm_+Š|—Šaˆa¡Ê%W–—ƒÂ-cJ9—3év¥HšlI‰rÐÒñçPñÚ/¨nS¦–ô°Ó«à§«â§µ¥Ù4“%J õ$ ŠÏÛË-åeä#zÔ÷So-8æ¤]&³ÎY$¶æèŸrÑY[Avw¤!DvÓÒŸ$ÖPR K|–€€’¼8þ1‹”¢²°î¯H*|¼Cï|9½Ôþ6YX’G3³ë‘ú6è2ˆD™'x‚l–%RÃûþ¤÷Z¼B,„sžÖ“e2+·]ž<>ÈËñM­•^~깿áaU^xÊ©'ûÊm&' `}rÈ‘g*»á£ö9ÎŒÒÒÕ§ˆÖëFjÉ3ãªw8âêÀ´,&E[IñοBn€¯H1i÷Ûv»· …KßÝ®xgĸߡվglô{$=]Ý2îý^r“„b÷néjA2{&ÄmKÿ 7£‚øøñÍ›¹žÃátö`ÌúêœÇ#·-½ÿò%ÆËÜáŒ1òléïŸ;C¾Ö-´VÀâÜo³0©Lúl%n––ŽyPÕõÁšÔî%²ƒh.†jÆÚ5ëfEî&•èYÛ øœ ÊãXf…¶cT ŽöþÚ:vîµì—è¡=]ÆZ•¾éePTYò½|‰ {h[½‚NTíZ3ç«Sîó ÂZqTâöäIÏcªÑÀ6›ÞsÍ×ùãé˜:ò<‡¤^·çs–ÝÇ‘óx+ %¥&ר†D=Šv. ãwIüS;Õd!;m—n65î^ãbm ]Ëή`}ðÄØ38ß$æ)³WÅ»óLö¢QÁàðë }|Y´¸ ‰l½2Y}C–C™ ÅN9ßÔ=ï‘*JãÈ7op}Qõî3 HÅþAŸÓg{üXsÝ<}Vö”(fÊn†ü+ †–\»›uúXªW(?JÉç›j’¸Ã°›—cÎ<¤‰l}Ûõå šç’þÔ7ÝýàƒîŒÉ]•ÙEgî{9CÐÎu[@iéŽ÷gÈÊW™ç&¶ÖAßç¬óyñ01׿¥í òˆ­¸¯|¢R°Í{ɦwAU¹×ƒ-˜‰4êyì–QHãÕâVO Œy›•½±ç's½„~š·†JS÷¡ ”35Vr„³Ý9™/^µµã^*d'r=<\çZN50þ‰Õ‘ ¥å0ÓbÙ[`·6@ìyø8ÐDIž¸Œ%*E#åg†e¢ @£\W“÷æzÚ}–U^Ρ=]ÊáL5‡Dáìé^À–]”Ò(¯³wu‘!†‰G{lýׯ(TÝ+&ëøs:â™Ün²ÌsåçÇ5&èI“båÝ3DÀTNðú¤{½ûx(XgBmºlCc¾îtkȦx&®ÁnQe®j6ItîœN/r†¡¦\>ýâô‚$F»xŒ>6îÍï¥E-:òiOe©ÆäWGàÛ}åùÉÚ¨QCßt’Ò#2E—‹cåšÐY$‰QÖ»à-»ñ”çXNBuñL™7ì{ÞÇ»3sß™«Å9ëæìâ·E2*NÜ©©þ i½bƒ±kBÎÐ;|ýý‰jÆiè¹ã­Î•¿?À màþ8Uôªô¥­ž‡Bke|Óý=îNlý¾^Oúþ¯7½°çHS×I“óc×V¡ã5w(øx´Ä†›¬ýêÊ»yO&Ùç­©Vƒ™[]rê¸u¶XÊDO‡˜¥?‰«Û]>!NÖf-ÏÅ<÷)º«Ÿ³æ<³bUé7Êׯ)ê yøHC“¡­Cvw©ùT×Áë‘,(“{ý0pî™KpÛM­Ood“Pµ×`½–µy@sfDµäõ™Üù×_²Ãëmà‘8<·uc 1zJya}?4å”ÑÌÕ®uÖ©þ–ãëÐFC?íë@Åm)P)]&¼¹ß*3²(Ù8nµ†±&šôþ=ø<¹¸hXÓ÷‰3Í™›wÕ¯‡@•N8~&»;ЧÕf1†²ÄeªH¨ãxäeî|¹,ݶÒÝÐyv‰“–ˆÈå1î9#¾Vl= !Ñ8Ö(1…-Rà%ÊË— ±"—¯X.MHú’»ðu”sä.dòÌæXZ¬'†n³²ßÝ„|9ôîú/õ,n*²àäÞÆu­^Ÿ‹…²Š½>‹²DÊýŽr汬{}tµEÊðÝAy¨T¥mÙëûìF#•ƒòíoñí˜ñRóÑjü½Æ^{ˆ&·!|ž_§Æ6€{©UZ¬\U>ÙÌnÐìHz¿3ÜXô¬mùÏ<‡ão-³-1ÏQ«‚½ÿ<¡Æ·)xZ'T@©x·H¬ Î`ò-f/ΩÍÃW˜)cxZÆ9X/Prê ¯qö”*ÆxôÃ,R޲†tF¿äAñ-˜²Ð|‚{ÌûØbÍm0õ]ágÞéßÜGÆ ¸á×þå Ü22»,Ïwш"Ã'© „"°°”Ì&»¹$©åÉC€Bð•¼Ã©×RÛÀµºm/ï‹ÌùIŽ¥²…6Òù†÷á.^`šñIeò«FTsùZ‚òº€ñ~â«8@éPÒYm‚9Aºk{N3ÍÖ>ÜI‡{l9Ãízn7yô—}d[ãN]š3Re.Ð ‘k—}÷®q@ßJîÄzEog»{¸Ef=åRŽÆª€K“D¼ðIùÃPZ|ftŠp<Ž Ï”2àI±eêÕ0ü¨ `rßñz.B`=^†õ÷ߨTšŒ ÛÓ2ñœä’qÑÛÊ6Z‚ïóÐó¶çX2I‘Ï„»&¾V½ÞÕo\$|KW™ÿÛ¹ä{½Sfd'½ÏïùáÌü;wdŸŸ ˜Ù¢ù=5Ìêþ3¸‰×¬ß×ÙÒº.pë í-õÆv«+ÛoÃR¼¡žÒl§¢}{eû»ljàrJ^ƒÑz$Ô9ïÜþ&@/íÿ˜ Y«„¼0iÀ‘>gë Ù=ÿ2ë2Ý;ƒïÑ#a¥È)ýÔׇ€ÝjíÚÕG>3®°Ä 1Êï¿Ó™*ûó´¼q8¹ײim—?Œ³·OÿAojOµV­ÜšÝg×càÚÅU9<û9eˆ•õ޾Ũ"uÒ*]J3Ê,ÈÁOu N>óëÍÌ´ ¼ƒ6 '² M6»t¸ŸµÎTZ;@'øÆ7ÊùÄÍ%ÿ˜Ìû…Xà,Cüç`) ʹžíh!]Ñ>æë"–R@åSeè•Üu¼q8«Ï»w ®,r¡”˹uU/‚L|9Má³"<¯P*øÃ*¤ Ð]; ±Ý,â^¥^ŸÁgÄÌ/rÂ3ÊR†^å°º˜lG)Õ*ùØÿ°Ý ‚$€»O}ôòP[y÷Bí þ{rº¬ýÛëQopoö­‚Å=uõ<4|ÄÐÞÜ+ k˹·„xœ«Ï3Õü+Å sÙùômJÁ½Ù–Öþ±£³ìŽ:P‘¢ñz½>£›ã:KQ%Õr ¢[E}3]8òPWøÂwrQÖ{¬ G‘â£ÕZ}ìZG=7÷¾Åä•$fÅR3›ú’½«N/ÕU0‚€ \Ãì“#–Z‰†¸î—ÒŽAé»4ŒÆnÏ×–TÕ}›2A¶]<´…IÚŸå¸s댕;»;ùÂÖú~W´»çLå&•åÙË@<މ¥‘á(—c >©áK b’iö«Còoå'i‰¨hN¹ŸOÁ\²ŒᦂlѸÞãÎÔqöø!ç\ó ¤,8©Â/ ‚hf‰ˆ˜oÌ>!÷´–Çðøù&€;&.`¼˜K/.Ÿª}“yH×A¶+àG%kK/·hp™{)®°Ï¥ŽÂ•òôEY"欹Ӵ5ëY­ÞE­3<ûv”»ÏúìÝc¬·ßi¡‚só‰:ûb°´û#lö`ë]Ÿ_YŽlÿ¯>YZþí‰LîÚ–=ÅÿÌÒN ü]ËiŽ;uÞ+¢,ˆ.v®Žû®¦ÒYvï»2@¤2xÏžsû'À=ûl¸Ãƒ·’ 䑃länÁ^bí³s‹†JõÀ£ ܈) ©ýIæeBWýj6 ·¯Fòe˜T6”l«õtç%Hm?KˆìÃgŒS©¥DWɲWƒhy@ÙâeqåüßÜtAk´7ƒæ<Â[ÂkçÅå¯s2ûÌä)‹*µ´Âõ°l–:h´ÚûEú^ÈSáw‘ùcˆmd 0-†pçêÃðj’Kü%†S г©" qðòƒÏ>ë j<¾G[*ïóÌOëÜÈ#ÎÞ-¥>9PŽJFÓL~;9TH9¸ž *A‘Ëù\Œ'oõò3.ªÙ}áÍù¾Ù@ÓsQBg Hׯû÷ZRU®§+à[×Nmé[½e£,ÛÅ¿>¿ ÐÕ×ZO÷ªõçæõt\îf\wgÜÏÙOàæ¹cÉÌ+=GZ4öN™[æ£Æy[…&š+XËZVû0Ïa÷ïe@÷úLEÍ5î¹Êüø#tÎ]í÷䡈 ¤èIb$(Æ¢…ÎF¿tœÙ«$‡±3ð1…n<ç>ÙTÉ ¸“…"¿Ôcvû×û˜û³U`z¥ûô"ÙK©Ù0”ñ@ª_æR­ ñGš– ¦3 tÚ.M?3®ýõkÙOxr f$27¬ìL1qåÐçJâÊ]\¾•Ó Ú ¨ *x”¢Á8Äca¬³æ_•!ÇRu• |×jrü¿,}¼2¾OÉ©~ýʤ²⬷¥-j«ÿÑQÌB,í<ÙR›rÉ®œO!xœsKÖßå=®œö±G+ýX\¡^ÚeÂ…]”ÖPiÌ!’ÏOÕe´SfâÕeʲîT­ågÜŸàæ[¥i+ÓÀÓ껄 vü}ž¹­=×Z°¸<úm™ ¾‚½Y¾ùŒÕ);H<öîåg”ß'n^)~žöz^lœÈÚ[ÔWN·—æ–òÏñz_=¾Ïí<Ú¿¥]Œn ½%·ëï™B¢uñÀÐÕ탃ؙ±ŽrUû<+ôtR ’»v„G n2\¨2w³öa,2‘2”ÀJÆÚ—Yæwf‘€˜öš¶m‹Ì¾OÂ.(oÍ;Ÿ|´_Cç«€Ì%Ç™C8“’ØÎ\,uíc_|ïèÛ¹³×¯#Gö+ÙÕÞ…}>¹±bø8ÔxYÉSºxÆÝEêF©Òv®]%×a ½ÅC¶l4{¸ ¹v1îÁnf+ºœa N4øzŽyåßj,Œr)”¾R¯‚×­%-E¸| K¨ Gaïê\ù¸÷ ?ó‚•ÔÛY^? Û®­Ù®Ê’ºWp½æõ0bßu§ÚÎ\ §Wf7tur ))3S[45¬i›–öy¦ *3¼ÎPÆù~^Þ1àUÀ”á\.S‘j¼t.—gKöJNZb•,¶‰¿u+O¦„¾yãNØ`7ñsŽÁ’¾?õÊ&÷1ÐëÀ8,á¸ä‚î˹ˆ¥&¥_?1[´O[g¸ø–¼~©ùÖ™Àx /E\å{Bo0t¤™î“*óØÏÇ'é³È§MÚÅÈÂKzìUx11BÄÍÈ”b†˜ÆÌñܺ„=€æ:ÀqOHsÜïÕ¸Ï,$Þá†2÷·sÑôy x™ âÙׯ÷ {±·=)ÞˆwÉ¥ÿŠã¢rnoNŽòçÏöT™ª‹œá‚XÆ8ž’uÕ=[4¶f-J-rÞc¥Ñd¾²œMçUÃëP Æ|²ËÈ! i<9µîziæRÁ=é=UTÅlãÜá7"­vÙëÈÞ8þmE¾îN°Fõƒ0]Ly.ØX=IÔ­uKÿoWD{¿%'ƒ¶uä`Qpù(sKÄ2s=¶¬0óäF=®íÓ´ðŽs¸ÔyïˆUôŠrâ9Mõ5îågõ½Þ2óFÕÑ޳ôÚ÷ýœnëØAæÃ¶:`7v¤iCº ›fÄÏ6œ—%˜Žy䟯Ã<þ,n{g0÷[¼f†;æ:~ü1 à ïì¢åo!H™U«‹/×k)e™iú+øï9•6Ó#vê? Âq4¯²A¯@òpˆ(ƒÐ©¸KPøí[ëj=û(¡²T³GGí¯Ð"ðî\7Åm „Hû¹ÞW\&€´û§ wíw´èûY†ø+ãNJ½éºò¾î!HÜ.*zŒæ5ƒ8˱ÕɯKÿí7À;ÆQɨÎ_%.¯ïpÛèaO¹*3õk)˜)ÝßÕ5ò^V“Š;K¸”¨g…óe*¶;GÊüÑef^`Höæñ=n˜˜“Mu–£Q0î˜6ùð^ø¡ÇÕGËEÍ ø¸§Kçíƒé«„il¯$a®ÿìr×fy©TÑþw™Ú’¬Ô|°w \ÏïÊA×»vJ\yþmû|nÇõ’ò3h~Î W 9µ÷»ùUÎô³ìûµlæJT3£˜¿7ýÈÇ}žs}Ì"µe<œ«P~•3>¡¼Èúrš=Õø?A=:Òè9r¦½å\ç«]ƒõh Öƒ§ã@‡=yÌ|`Sϵ½ÎpóEŒ‰œàeý–½{‰¤ªUòò‚r§ö¨¦‚3ûõ×7oàüÀAײ‹¥S´{†>Òû–*aËÓVôF ×FN&^Í{·÷íñ¯Ý¢a’ú,î´½$×½DÃrÏ(`^ƒöž¹®?yÅú_Ëjwvï–ôG³È¤žúp>ó¬%ט(s SYÒdF©º–ª˜V°QFÒÿ„¾.à¼9“G$óÒ|’ÄGÀQÜf˜žÿJk’ÙwöØ©‹upYŽ4è¹çCç98ÉJ— ¿nöð8–½áã>#•9ÑXß!Æ'ŽSMd<`5°ªÏniëOë­wüÇ9µ?ŽM[g‹'þžC—®×³/—ÒŒA®šSŠç‡föÖvOG¨­ãí^°»Ô²»+U³j‘k´rÆÿ£0&>™C^èVÁ¸:%kHÎ!Eé>‘½<݇e¯èœò[lè@×#Ù‹}°#˽úÞä+²–àÑc ¸—g…s­%@ÃêñXíïº6‘lÉœzîû-@¿@ª]ùÛ{ƒ’ƒÒ¿ôÆ©£v”¸ 0ÑL”OH éØ|"·j­b}é®dÖsz+®>·¥SHYάÍÆ¦gç™ògÉ-ò5ȵÕ4ˆ*ÊLõqO:§ˆÎÅ3-ÃGìŸpÔôç¡^mÊÐKÀJ¬peîiúöf´J'õ‘B½7–Úæ•G!hqÿhWfñ lʱ÷XJµáx F—‚"¦¬€`Ÿ(›O*化ëÔw²«ÇXEC]DçÎÖªô é:Ä)ÙÇy•¿1NwzÇŽ[x<œjÍŸi³øˆ¼Òçpùs±D;þE£W††Ô]£6 ^]s ]ýí*Ïa÷å½³ÀX-&¯ÔÒ`ȃ ¸öPs®Tm€øJ'ÔwßhÀG$zzD à;`A<#ÖÉ»—ƒªIJ»‹¼»F„hÀ=àK6ˆ7£‡âXø1/êXõƒÏž'ðýŽ×ÖšpÞƒñ=ÊpÕ3ÂÇšWÖ™Þá×ãq½%÷¥½$ÚÑú@ƒ[úŽçŽÓׯ “‡H£TK+M³-ÌÈÒóäo„ËøÛ·Œ”G¹«%—Nðê‰Áå)'¶f˜d+]!òz@’w7ÁtPž§_4&›ó_}Ý´&*ÚY äB‰û'HÕÏxEoÔ³{Ë»=¢>ŒÈ޲ƒQ’£Ò—K¨ÏÉ0¹ŽòÌKz—÷8û˜ÒÜÐ'—¼Ðj_5kCŸm»Øy†›O|Ü«G9ÓßòîðLÙZ£Ÿû¿þõþ=ÊTuž[™ÙÜÒí¾ôº©½ð%ý’9£€{Û·¾æÅõ×Qã›åçyuóL+{\ÙEN9Ìê¾@^rã*–oŒÿÜVØgÊ\Dág“Ÿ>ýñG "ÇúÈi‡eUiõèa@¦}\U$åT=®-“P÷ºqØÝÏø¹M±ÓÈMÅç.²~Ëd&æfFEK_£»€rë eàWë»z"ê²#¡÷K[ðyu{hÐyà7Ž;kËß–Êœ;¢œ~¯»1.¼P²ÁLjxµ×¡üÛoÏßÏ {jõ™b`¯ û¶Çý“îJk Ãb*Ƴú3÷õÁÖo­›)L¾J99õÜ.—tDztpíÓ¡Áå ]üò¸ht¢ÅÞ]#°L ”Ò]vrps/0‘㟔®ê €)FgCkÅj=Žë†ÞB‹žÉÝ ýÞ“ÁÌÁw <Ξ9µÆ5D¸*œ®öö1A•³‰¥CvËÁ£–¾”í~™¶À´à«Wó&8DÏîåÐ3%[í‰VŸ|$òiû²—¦„.ei ŲØUÒBÖ²—3$­rBWESŒãñ‘ÓìES›`f×å¶J0㆕äøë¡dÞg sÁÀã[~êþex ~šDa9„ÊÞ DM J3P¬Ëë×r‚¯yk”’¥\§?ÌÝpö…x…âvsN2Üý¢ýª6ÿ„w¼³ÑÒÄçßÂíZdØKÅ^éæ×H»s¸iÙvµ¤ßç^<ÓÞÕ5åžÔ¡çë2·œ5ð»d-÷êÈWAüž¾æ¯úÛÑWß ^?΃hÿl¹r•‘×@K§èåånb뜞ߑéÑFö1;²byl”fŽâÿhËhNÎ5^Á}”g¨xü= HgÄ£‘€^ xgâ3o'nÕùQ²žñ¯Òå}©í'“ùlÁ5x2£é|Kj˜~=v6.zV’˜Æ\cÅj9êšÓ"Û¾éýý¶ãÐ7a×zV3c:×#•2päq@óÓxÿ2ðyôT&¤„ÍÂ0p€¶!œ‰v$;]><  –‹ÌvuÕ;Úǹ5 àžùE—1 Yüö-ÃXs ÛPøÚ³…žÙÿû!Ä9þ€WèÏd/yÖößbï½y“½ŒVŸ-Ý-ù¶g峜×9qÑI_ÂMHå¹á“'-Éb‡ò~ŽQû^¦fú¸jy6f{Á<²Ù {Ê#•¥Ö¼” QÍ첓—/ƒM— A¢/¶ýjòÞZü½ÆLs¬•³æ!U·”ÓäAÛz˜5»¶ûˆ9EA¸çÈó»L'-û L­«õçý©®ýœÎ:©Túž¿»Fxå(/×—Ü9aQ¡Ù†±$r,AQŽï*ŒîeB·ÃVœpÎægZúxHÄמ•³ÏÍX·èEÄÌXÕúdX@m-TpnµœñŸË.½óÕÇ@Õ똲3V±L?Âr Ÿó.7¢—,î|üy•O9އ¤C škyI VJ¹HîáÄ>d˜¼9?cå ‰ÎÃ<:™‹«nW9oçµnÙ§¥Ý" ÀëüAn^ƒu€”ØÓ–ôEŽïLõè¢,Ë‘VÞÇsð“{¹h0×9øzÂÁÙw%°îBO&t(s´ÌOÀ>Dì 'Ië+®å%5rRŸu1?+ªyíà¾:[$˵…úÎbžj© ;ÕWŠü»È»Û;ùuK‘Á¶Wîš¼kÃzUΘ'–þ‰ÂLÕ÷ä@ë .‹«¥ªÃ²õÓך~?VÿÕ%Ä ¨-Oh…-ßuН‰ÆÛü¾#}YqªÉžà¡}!\)y…™ê½µŠã†TQŒÙº•1+×ÑFÒlÀ:Í1ȯÁzã¿°ŽH!ߢ† Þð`îÅë{È9ÝÙYPü Á*·×Rg s .çÓÏèuß•RºãÛR«rW9rt0b²“°ë,ÑÞ{¥ú|§t‰»/4Ù”2˜™}.vsVlS&­Ö!JL*ë=P»}«3Ùô™)‚,®pGöœÖéqK™ÿ.uÿq¾{‡ç” ]˜ÛZIx“E/ñ3Ô‚·¼\Ô£h÷%j ¯ïrCÉ–Î;µ;P]$´MTYxä¦,TîBïÔ]†¸?ûñyŽ\¨µfÁÕá”yä4î•û’‹—fî!ï½è¥yçÕ+žŠ <ëÏýN §žgIÞ•©¹ÊÖ·¢ãuò]€éÊN»Þ-üȶ€2&»KßúþrYNËI2x é•¢nu€õ^®}~iç²™=ÜIVkoFžžåþ>­Ö‚3Ü|ë‘€ÔÃÿùŸðÉ ¼DpÙêñçŸ#°)üÀ #Rpñ(è.pÇ2&>Šw‰gÀ»kt•¼ý f÷¡2ÿøyŠ[j5Êkžo=P© g%À˜Ùó%pß·JÄgVFNëŒU÷¿j²ŸÞöuÿ¸‹§xt ù¹&ÕÁtÏ—&õvùDXéqEYtáæYÞVí»ü ÎµíÃý¶sH=SÑ»´‰¬µæFD…·Ø,'4îéKPÁ­ZËÙ<Ú^Ž`¢Ë‡>mÔ/0Jö’½®¥D™w×1ut¯pÂoЫÑÈrŸ7-<ëq…·Ðÿ¶Îëm%ô‹aÉ[/Øg_ kŽYùººiK{Šù=ÛǼ„xrD§:Üœ8þûxÉëþrá]wÞj×4îs |ÝÛVÈ,ãžÖnÅeƒ f¦üà‰ž¢gÅFý-ýUVoÌìÙô ‡¶(!Fb›X\?¼ONú»v÷¢²jÚÚWþq×ËŒf}þ ºF¡µÿü™7ÄèP”(L“²íqëDküË—à¼ÖáÛ@f= ;~û–¯x  =¾wwêÑéö‰ªŠ…Š÷}Ve`yAjO}Êâd”àÀí&g vFüú&k.§iµòcOöOg:3ûâömF©¥W{ñ9ÑÛá0hÀ)øX÷áƒömi“ç‰Æ%5>ØÚŸ˜Ó O6å"¥ƒ«ºã,î *wáLr]8å!Ë”V¦rf'%”ÙndYêªå]“Ç^^ý€Å(¤}H´,T$hÉl:µò‚¼nÆ…îyº —^½£,[* òº;D)(˜³°³3mO¿°Ì¨Yù¸ƒa[Üw§òÞ3M}˜µweîÜIˆ«;î­Ÿ>•tϬ⼕ù~ž]Þ!‰} ‘Æ:s¹µš).ï úó. +Øz{ïu¬=—c›wÈñK¢ Å´­ø[‹¦Ó‰ßË]`hCåã¼-&Á önfiü§=w÷ÕW€R¡Öw¾zŠ W€å%·yÜÖqTïâ}¢xìû›7äã!›AW ¼;±ÌÐ÷I–n éy®xŒÅ:C«íã›Äþ¥ˆ‰º{³ãÕ^òéò¯¨#¿+]þƒžAóµ¶»×I 1hžà´ƒ–Ÿ“ $D)Ž`1KY0¬c)QOÁŸím—»”NÐg–»  ã;è< “œYy„>ðêl})b)îË’Oà lPZÀ— þKa5»’el:F-ÛÍÒijԩ׉Ñè$÷CÜI@.ÀŸ¤N”½êu®–ƒ¹€ò b«ÙqÙ™ŸG*[3_R ¥U+ÝǾ¹›ÖÜ~:Äò±¶*¢æ gG.ï+Ù#  óËvÉówÑ™žö<_®3Ê{kkOüÿ3©E=Ó•ëóž~}²¯šò<‚ç>gµç—yW)r½n+\ï*܆v¼y-ÄšÛhù Ds<‡àT ÄšMc»5hâÖ¯ÛåÕÈi{Ànu,•¯xH@‰.'Ú±A¦‚ýƒ"Ÿ×]ýógð”þ³GÕà}pðïÞáoãÁUñ`•”ºJ¯½¢Ìpƒ³†r’É D!ðp­Q‚#ʆYljy`]¿?/§)KˆØv4{îCwû½Üóê¼u“7Þçe`VKI<ïÔ.j7ûÏ”`n%% qÁÃ?0e5ùë×dp”—L?—F?¨(302S¤ÕK@t¨:šP§ €Ò#êqØ&Öü:–Œþ`\ÝgȽ°Ú’å”>¹?5+ß¿‚œÐɯ’ÞÁù*€Ì4Ù½A³fÚ(ßÏX¨§|lWòWJ÷6ï^ŽÀž{ºÏvóô3Îäÿþïnâ™Ûönß‹#|ŽUô‚ä<4áÒ=³í{ ¯ÿ~y¢—0–pô4Ö=O˜™w±ø{Šÿ~øùç¸!ìl'é¼½5ï}‚ ÕÓbò[©MiÄ®l¬—] (¹+wi•ãÅ<*shˆÕ‚gÞaü€#nî`¯À£c–Ì: 9F Ç?“4ü øžå4ÜñWT½CY Wx8ÌăƒPõ“˜Gãh>ì[{q›—‚Ÿß±ŽÑÖ÷ ûsôVo°†³Fw×É9£k‚œŸ]?ÂK»À>à˜÷\¿ZOdyê¹6ó`ž=Rã’¬'0È¢”:E²\?îyÈ•¯(P“»6ÒŽŒ×…wj賨¦\«Va#ÏûZCP>jôý£þvj—ð#TeÆ­;ð!hiyÚh¼¥îdC}Õ'Fê£Óré)V$ª–q]ù3r—W‚,7ž`ú©ºn3ý×é¤õdKìÕ2­S`wì 5)q4ï=wZZvÞëPê ƒ[9&ªNõ 1º+þ?Çh69u5ôg•-1ÄãÝ‘Æ Lœ‘ÁŒuÞc »úo>>©.`fÁtì%øÂŽ„"3pü¾cÍüH™OOYŒÎ\™§gÝ}¢¦V½Ž‘µÙRaeMÊ<Úzùsû¹þÛÜŒîÛö•ÞçäÚ™– xOøI(Œ1*xOÆ=€;q÷P¼â“ñ?‚øPʸÓ>2ÎjßéÓ1€hQ# ªšáÎ~ yò$Îf-áÛrÒ³Õny§,œ-sGh­:°›]ÿ¿Þ†J”îä*ÊP¥l®O¯Ã範nHYNv§) G9ÀV–ÜpýKÀZÍRZÓÊ.hûºøx®sä²A¤~4×1UœÀ>)Ys~#³NqÎÈ÷@ùr¿µú¨8ÁG¾æ#ÛJŸ('<'µ¼:ÆÿU§({üƒpA˜Ýè(÷gW”ðºÖëž·Ùç:«xƒ«¥h¿ÏÆý\‰*êE³6ñúQDÿ¯P¡–æŒ.'f8æùÏÌþö¾p¥Öòá³îúÅà>Ïî¯l5TÎddûFH«Ðóq9©ó±\«–‹'Iº{0kÞ»½ö¡ÏL[Ç!ÁÅ,xpóx䥊]lzÀs8=}ù‚ÿÈîÀL|ˆ¨€w¯wXOòL5-CæQHPÌS?þ³Ë5K2Öµ–½Ü+P;ÃÄY÷÷}î î®#ÑÔ£‹Šmèl;»ÌùÐ_É–2G^‚*ð£dmÁX{’e{}²7ÂúÜHÍAgp_FŠúÛ‘Ô¤—d©¢K4¹’ÕÀ=÷ÊÁVMA`?dS;îKscÊžyh¯øÉš^²;p—.<îq_j'x9ª±Úž1hOb$îÜ{Žåê­ŽH½s¾×?²}˜Þî­o§t­Ü“«c÷³Ÿ§g%P×RðSv»^½úí·è«¹F¬6®èì_÷²æÊ`žýÜ€–ÿ GNW]’ÏÍ¢ñ¬¦O‘;ÇC¼wußhÝÕáÐS: Ýëdµ'“Û‹Lòò`e AÓ”–‹ç©&÷ÇtV)2|Œ3Þã~@?çk¯dði1˵ù¨×ã6T˯ŒH‚qD½ÞZ¶öÖa%Šº_ñ¼×¨êíc¿Á’ö¶b=¿–g,’:Gr¬gîñwÍ×ñ'®ù#GšÒ}¥-*È¡*ä; ’‰[«†Sÿ=|´9Z ½ûŸÆëß8Ç+Àzý øŽÏƒ}GI È‚†4‘õ‡`æ•Épï"‡»R<éVá|äµ<£½·×fó$öÊJ&kfàêÇ!ʧÙH—žQo6å«Ç³·§zù£³P¦6ï±q^1Ç€åŸS­¹J>:!ž¬¬_½Âà)zŸÚç†)‰y¢ögÜEÙm}v¿ewp*¸ºÙ£ ûGŒÍ¢té1Öµ€mÅí»;¹Šç¤²B!äžâ£kÍå.kð—ý?šûý¥ž”h† ï/¹¿íó ~?@°EïΖm­;äõó4„´” ñta0ÖóU ÊxÛ=kÅU ³*Ò˜ç>Ï%1kÜ|KÎ1Ãa×LyþÅqœë`Öº!w ¯×ÒŽÏ^I¶Æ[Ç£%Gv-Èvê*@WJ>o¸ƒ©}ÿ>‚Rv¶nO§>ïÍ?ss\ƒžÿí•ê:KJôðw];ÆIcd4Üfð ŠW¨ÏÁ¸Ó2@¸vˆdPv–ÃÒ¯àÝù*àîðˉ%GiåŠdðýÌI5¤ðШ–'ô•}ô>nøJöÊÖ’ïô\_îPj”¼r`(Ç[y¯±›ëb•^ #Œq4ÁàÆ€s‚¢†/ÁÙ}gýõ³'€¶b­ø™Rü‡Kõ<ŽK\ ·ÊqØqŸ¤u®Ï·^œÓÕùÖ.>Á%³o ˆ‰qØ–äff„÷êÌéû»™ÝVGýíeÜÏþ5X:íõ¦z¡Hkó3£Ÿãï­KÜO³³;^«˜Ÿ±œe¼Ä="Nõ•#«nG÷sEÎÙ Ñêh×òïl\òZY~.&éå\çjˆ€.ÙÐö:jÓP/^ËÓå L£-«Áµ,,)m+ïór¤ƒàa¤b B‰¿;ö£¡½&tÛÉÝíäÐìÇ‹dV]iW ¿+Y±_Á¥!¾ûë×8“¡Å”øoœçî €/'p‡6?ÿŒý_6îOŠ–¶(åúÜÐHë·èàº\Ña·“nûŸ¤ì­ç“C1˜ƒæ\6Ä‘bîf†ûåE|’áVáîÛ’ÝßW®¯V£îm® „^¼èû•ú½—q²òÞœÕ\ηï™Ò^™ãÚJî¨ðAOŸ å#Æý¡Bûÿ€Îz¼fÝ#Ø8ÑßßåqÎmÇC $:õ¾1ìâžgʰ~W³ö:ZÂO?aXÜäú’÷½üWŽõêÑßÛŠ«ÛSÉ´Îv=0öoö´ýÛüâê ´†°àÿ^¿†;ƒ™â‘@ÆJwJeŽ~í´‚ ðG£Cöú¿Õè*e30ˆ|‡Ò7¾ïÝ»ÁÁS Fã&¼öý(œœÏѤ å zJ€\²ŸóùÒµç¶^æqž·˜ËDÏ+àŽ-Á‘½îB̆öÛÜcH1kÄ‚×ï¿z•³6³&œ­Kq ³Úeß“K1ý±eŨŽÏü8Û½s=ÑÅ­•p³¢l îZÃRnTÆTµŽ]m É#RÓ¥ˆ(Žú$Pkó¸ SE%ز„@O;`~ÀÇv ,õGÐy=m&?¡ž+ï+OýÝi´-«äÑ• ¿LˆI¥¸ÛÏÊrÖ^{Ê{’)åàÿwùh´í7öø·acaLÛ°ïÊŠ:¶ž7ç _3Ó×…„œÚJú6”¤äcÕ£}Ï#¨¿çå`°šÂëôõk†oÏk¿œè ¼7xÝ?𣏍q[pOfsåÆsr}ù†4åúpÕô,Û¾iÄ#p98+Üqh ¶À@jÜ5–š!ûýû_~­á»wØJbøßRƒ'@ ²à7°û‡Gû‰â\@?`ô‘Þ=Àö–ß•á&1ü>€õ‡üŸ¡‰Þ™¹äúkéñÒcÜçÞ€SÀí(þç¶ DÜ!j+äQÐ’À³x} P^ìåÈcY\¹ò˜£9öWxôJz€¼ñè6 ¿ÃØŸ? o€Çè5íx«À½7²œe!¸â2·}]6äѸª8æЙ}{ÙhjùÊ^Íc©ç}§U[ÃŒûã\§«ÖÝÝýÕÏÕ¸ãáŽØï¬›3æÏà~Ž‚G'Û˜îêÝÏɈû&¶ˆÝ•:¦0:¢$bîǽI´LàÞªîb OÚôm+É9múŒô¥g¸ç[?£eÁ0·æcÇÖÞ˜Õ Ï ÎîUÞyJ 3®ž­µí £” ܳâSaÑ{,È» oÙÖ#¹³ÞÞýsiÆOfEj…ûÀH¹>ÊJ,FÚ²Ûerb V÷–+×÷^€¼‘@EÏŽX7–Um[I2­œ‘hõ‹\Ƭ0 v>ó}þªØØuAÑqvÏ(êúÓpçIÒÐ|µ{pþíÿÁu¨Úvx³Üpnήz«Å0U¯$׿¥ž» ª]]ò ï>_lÌ—LóÇhχç\³¾Zô>3“T:#¶ñ÷ÇãtcÖü^}•á®çßç%7ó*Ã+ó/º¡ó†Âñ8ñlD9à;E2äÂÃÅ=€;\h¨t¯E25dÿ:|Ü|LjªfÈ»ÿüsèŒÁÈú€ƒÏ’o(à[Y˜YÙßÓ*à "¼ÊÙf&9uÄ Kä³Cw”¯.˜‰éËvö˜¼qŒK9Ý1œ]u•ÙʹÍNÎX ’úü$@ž`ḟù0nÁµÕ ¢¹­<öE ÷Í/Ô€F{ýü§¨^écíþ®íéè|„ &%ÎáDYÏœ1–ÔqLw >–“‡îÁ?và™úœ¤…ÌÈNæõî3ÆÉøé#âÛÇq7Ùt¼'§;íºÜ]/¿L–}\Ré½2³Õ&ã’[%|ŒZÌÜ) êÍ~¬!ôöêÌuq.ɘ}nJO?bôugïŠÍO ›=†y5ÿãLW9~P?cñ?ø¡myþÖë ß”Uø¹–}U2Ck@6.xêå®fµÎCáw—‘ÿÌÉw:ú·xk-!`%àשå\Cßz¿4æ»·xDD½„ë*gÖs󺆹ž’HA¥)ñp|Ç *€;|Wâ_8¯¬wTU$€;œÝÑåCê'Jˆ˜±ùç?=†I¯Ø×yö–é•43é¡ÚW#e9,äÕè¿WýL©! ×X•^õ^)ÍW¯r©ÿWe›^2§kÿœÒ1:hwGa¼ZYžqý¿‹éß+ÝW @ú û¿ì¸Î•ˆ<¸ß®bœó tÛ™LØŸ! ÷¤ŒUú0ñž™¾øªÀfÏ6qî3¸«ãèdà®ý¶Ó-\ß;–Û£º:þ]œXÀC¯J£?\«p?@«0šÒýªnN² sg€é<Ç<Üq˜ÕÔ»Ë3g¾,qWò¶€dï(k\¬­r[•í¹ºž^ÍÙ}Žþìy•}_³ë磡K/ê:–ˆ (ßQB$;Œáî¥;Xp Z¸Ã[&g¦ö†SGÀŒ;¢àìŽqXDŒ¸Ã¤±6xÑÎ’C¥‚ïôm ž=²îË6‘í‘1Kz¥“¦½ã•¢z0•ëP¶; ózî }b?ÌûF×úÚ¶™f~‡œ®²ü+‡õµ».×I;`úìŒZYÌ©@†keðµÔ¤e¦y4¦W/æç¬-WüaÊ’¬VÄ–#•B…Jk°{¿#z ©{@³bžkà¸êÙ’I1ÄœùÄí¡ÍÕý6RÏGñPÞ÷,Ž­jŘú]‚O  ÜRê¼ ÜK¸üÆ\S¦÷Û²V[…ªc@¼®‹a˜¨’i†×¿«ó°W ÌþãÍ|D©®ÆÉŠ×k§—²›™Œ­ç{seÏÚuqRB´Ee}iÙœsù°Ÿåæý›%  ð p Æ=©‡^°xèwðî`ÇñÎÉ©óÀ=^=K~5HýõWwÄB!Ÿ’ÉPº‡ë õ¾îŸ õ-Øm ƒ²9…sá,{þ ócwIï³øT #¤æŽ¾y]õ gYOz¬í·ØR¨®¯ÊNÏð â÷æó¤¼RjwÿVæñ.dG9ѧ9î–EìQŒwǵÌ"ü‘jò¾;{]Î1³v<ŽŽzh¼Ÿìº©Œd*9PlÜUâ½K¤‘—“ÍC×»©Ê1X×èÏ[-û‘% ×.9<e¯Cض*^±:­SY¥†_yæN÷ÙD̶Æë.ÿþA‚7Hy²Î¬kØÔgôwà;jýÊÚ2Ëõ8÷¶ofqýcEýßÚ‡P¶´øC [pÇï§ŸÊÇdû»æ8õ= ~ïØèj)x&*CTGèÃë¤Ì½!ªº`ë‰ã‚MlÅ…üôlq”é¦Ì}ˆá-Ëð0&(Ýáý Ži fj÷kkHwøÕ€Í§5dÀwÉFž«oÔù-‡u0­`äÑÆVÔi—³0"å¬étwÊÀ>FƬ*SW·®%–9?œd[^íðs{\ˆ²ÇB­6£gp†k,;Ì,à–k9ƺnݸVöxª7GÏëÔdö129Ø‚znàxµ¯p}±T`w [”:~{ÅIô>}9Ýe‰”¶ôt5nò :ëN…{ˆYï+­Ç1LsÏñÇý'®¬ _þþÛ-\3Ȧø¬ÐËIÀ3;ÎÖÖ•ù²ÏôšaÛ^Æ:Ìy¹¬~½¾Ž·—1hí,=ÆÊYþ.}>sLq"þ á=Ö¿ÄÛ 9–¨PÜ9Ж÷ n^:HØz\$rÜ?¹T¦]µ.Œ«b&ç;8CšnåÁÏ|þŒ>ü<2~j—U}ž~UšÕVªÅ\Þ{}›G³ïŒŽ3:2êºË•6?Ô!,˜È­ALÇQ–C¹ †Tãàað¨F“žîQ…=ÝãÙa¦ßÛ¦ø[wÄÝÃzF{(„ßÀiÉUf T‚•X¤>Ù/|E]zÝ9é[éÍ‚utPä0Xǰc¤\癟?ƒ¦6º.Ðcä×Ï"}ËH˜ñˆüÅvÙPÜdèÂwÅžg¦×Ý<»@i¡@ÅÓ¡„G»Q\xÖ°Œ0k´çQBH6FÏ%l®Ï–µŽA¬!TÅH -%u÷c¾8™»¯r<÷nãÈs×ð½lÔ»¢9£ÞÔÈ´q6vG½ÍÓ!Ý4ò|øh ¨òÿ¬g[ã~"’é·=‘ǧõ¨åw=|§€jå~š½íÂÒëû +Zfäo®ZØÐ»¿z…›oÙÌòQ§xPŃMîÅ{™¦c˜«òL\}IFÝJæ¹ wòV¸rCôG…—7í^Áê°o]®Ôá±@¼•®Ž–ÞñÓEb«Ï”cÃôä[ÅO½¯â| êDŒ°Óÿ]í;’íy€¡¶uݽá2¬‰CÆWJk넜‘˜x—"™éª¼ ]AÀ‘qRÍ÷‹=rñ4¹V_¢3"™õp¨8'Bq ·]²ò3š’Bx·{Êòßo¿EëžÜ¸Áâá4{¬ÊWî’ÐÌ”—Î= å8ž«ïBó‘ò¤Ü99—«ÍÀ͘¶€»»ÊàêTÒ!‡ÛÜÓÖ¿ýÆ,U(Ýßñ`îÃ÷ÚÇÝ;wwð@(2!’?ÊG\´¥t_¬‚€Yˆ?î #žoþ1¿£Go'­®ï¸ûá>ÓÖìÖ6š÷Y^ŽpëÒ¥g¾ùHÛÍÞ+ÎO>Üq7нqU7|—&þ‡8貫~Bíjþ@kPw ì¸/~þìß* ’¹+‡ø¹äÔ›Èy>µ–Šû»? b2 zm 3N8s{ªôíqL×è§sñö3^‡{5¨4==mÍ#í'UH Ëwв¤jjuˆ³Íøæ¾Äh ñíêc¬rÞüH—r+@çªç°â¿Þ’Fàb4„+ù—7,Æ@Š1dæ‰þ«½´gX©w²¯ù}V’¡èþã‘ ¶Æ1 –ºÞãoN‚Eܯ䧃›ïNÆg8CÜ) àŽH&:ÌŒy÷¸3?R™XD,ÅÍ?Lû~ÿ=ŽA¶†ôUÉóæÏ¡OŸ÷5…w- é<š‡ãz'ž| ø¶M-qdKæìÞ€§½ñ»»”ýë®Õ—m˜‹™q†ãµ4›»’Üì6öç(œçž+\%c€t- Ïò_áZÆÕ{HYî†|&>ÓÊ?½jâZ¨mgö*MŠ`W°Ö»ŠÐPêÚ>3­ÞˆîH‚é÷v0Ên®óö÷RÔYp½#ÆÝ¹ÀÇ5V]ÛW„óLó¬6z Ü݃yUÄr×oO˜øC‰‡AHtÞ½[+æÙèÑñå€UÝmaÆãFN{>ý|…¼ fÐS÷ÏfôÊ:ST{fÕ°r²àñDÈR R>ÁÔÃÜF—H†<bº‘¥‚ ø^FƒqÇÙÇxSï®AÕ̤Ð%gåÝÇŠ@Øa8߈‚Œ;M!!Æã®¡Ã¬z?SW¯é8ÊØ:xÒŸAç5¡ìU$Îî”"Ù4$KIެ¥Kú½â®RªÏÞY˜q0·ŸLÙ;èAú‘Lé-³j5x¢º¾ÚRÍôl{ i¿çô† êÄb»%Ý™_÷ÝoJãæRË~)dEãûpO(òúõý¾ã€õ?þˆÒHˆçÁCçTï£óP³˜ÄP×4 ƒñ´’<¸XšÄ«)µ`ãù»l,žØÎÅÝ Ï ‰=xÿNp«k›o™=š]Žs¶sê| ±šJÛÚcXn¶Ïçë‚- ®¬39àÖö„1«ö¾·Vôƒ@b*¸Íľ èüë¯q3 p𔃪ñ°±š€»û̸ë5‹dÜÿþ;˜â‘ÈŽáTÀPwM(Ýc¯ÒaŒ;;<ãüÔ»ä=h’;Š™\\­È$VÓ8bQ.ò¡òæÍ p¯¥ƒt1§æ¸6šñqI¶ïgJÐ9áî`{:ãY×hv1?¦¥le$Ê~Ì>ù>lOw!vöƒxå(PZ–‘¥y_Ûâ³Î(þ² !Ý ’2†éç¸UÅÕ%WÏûÙ»2ÓR®ÿ}\û#_9ø»;UuF«½x1ïe<-ãûgÏÊ êø»=œžd©èúNš=¾||ÏóÇóEB]]E­u(WÇOç÷ÆÕIVú¿ž£«Wcr=;¬ÝŽ.ãÖmèz™¼ìwåžöx (‡N“qÇ…â<ÝßK—¿›åQæGX*?‚·n™6‚«nÇ!ñõ?â90²H9 Ÿ:±ˆ¸¦êâÚü?¶+í Áêëü`ß]I®óÒ—½"áê¤ÿÖZ½>ŒV"à9D>Ù":²·êàU6ýúÂE'í2º§ŵssé³ö”WLI{­æJ ½L;¾9ø¾;º .Jš+¯hwGèW‘ÜI¡w¤†Tà \¯§'*Uæ¥H&˜ö/_ÀÜC*#HrÀµc [#ªŒaÂoQ@–®2}8âŽ:åãWzÁ½Déî!îÚQ÷{OJ&->{^„Våèƒ ²£ô¶¢(ºàœÈÛ‡2.ÏÀ¹—ûZòèuÉ´ZC®p^_)%UÚ¯]›<:à¤É1¯Ä‡­º•¯öCúrà®Àü„V¾„w¥f¡3÷ŒŠÉ¸3¸£W ŽÏ¹ŒÙâs¡ËÉNL÷L‡wJ¸öõ^zmå¿uGšõïí÷|TÑ‚²…ÇP*s£9¿Zsh^¯Jbö”ô{2›5AÅ\&èüº•q¥Ì›ÙÒqòîzÁ€ØdTÏ-Ue(ÆŒ½^¡0ˆú.³ó°;ÿ¨ìÙ¼»Ó©ý1K;q–è¹CQšoè™gÒCò€EQ æMî`ÁƒsY œ×Ì„(%ºÍ ×¯€ø€û`Üßã, }˜N‚eÇp*¤2n’ˆŸ±&5jÁ‚ØR3«aòõc@e øZõË«£,k×´Ú3šã @!|ªÅZ{‘mà.+Ø XçÒëHJSvŽNµ]á˜QB¸µÞý $fÇߦÄ{{ò ¸Ï:y?ι<®NÜÜ{ ù³à Ð̦“=Öî÷{!>+”Gdwì…}_‹}$)iV«6#O=WÛ¯ ‚gŠÁ(¿ÒpðqÐáî“ L)ÛÃô=ÅÛàòŠg)Ʊº30wFè²—®ê6…{ÂûD,Á§!ÕR·`petP¹¾ù¶x¾üWc`Hq¶ü`äJ0‰“˜?^sj:i°®€J¼ÜH‘CÆ dô‡· ¼\ðJÁL¼Æþå.ØwfßùÀ.!;±üL¼rŒR™XÚÛ·qÜÁë£T 錈ΉßptµÕ/cÝ•¡ l³T¥¸ˆy¥w?ܾ”^œ†ûô—“E¸¾Pbi’d'¥ÕÕϵ8¯ÕÕ‚¶nÜ_ÛªcæowOî8¢(‡¤.gD5;¬mozawp¶Å¢˜Á5‹AçV±z‡8E‡Ý³è³AA`r¦5{Uä f¥'ð(!ÊãûŠ¡äʰñy¶E èÚt³~õ¬‡8®t}ü÷Ï%ã>§ôe A? èDs¢MŸÖTÜŒºË!{ËÇt j{ŸÁD.^ºs—x&Fàpº\•4ãm9MíGØÌ1Ü.œKÅwÕçs½žу0£ÑsC·²Vž+uÆ&ב~‘·Ü6NJ‚ö”ŸÞ´ö–‘8!@ò¯¿Â‡ðýåK°e(Ïb@ôÍÿþ{û6r²lpÀÝàsà‰ <|ð·ˆ(ÿ>þe9ˆ^Šs†~2ð–‰wéâùÍã8¡±Êvä޵Z÷®¡Æuº/_¢ðÁÊQJ«}I;îuVé†#°q¬Ê=¶²gðÐí»›»3ý ¬É3Z{{ÎdöïšØvÍiÌ‹æMcÏÙÇÝ€z¿¦úƒÎgŽ%nLcôgwKbåŸpZ¦ç»2Z We®†CÀs©“Jež«ža²¥/ÇnyðÌöpéÇIz eTs|oëæÅ?*Éb‹g‡hïƬuã$ÚûëàÞ2e@vŸŽ\ߘ™Ýù¿•t!Ö v™È0åžPë¹ÀöˆÚ I~<^áÜ"æŒ ¦îQ|O Ù ýa0´PÏYvüŒßRã®±T¦%¸GÁ&;† ±'ˆãíõmøøâ¾·tŒù®êÔKž5î`å,ӌԅ'¡0¨Ý…ƒóüë\1Yÿ-Î¥8kÚšWv Ö´Úå~C9WæïµÝ¯¾kþܘµ-óõ?‘Óœ¸n¯!u>1¤V P&x~E»¨¾r=çÿ:›ÛΪÏý¥o>ñ'K;aÍWe3½ŽÙË—`vg‹Ò«ãØ3²<ùÜõ¼_ØÉûêÝ‚™¾ý*›öêxâ)Sö¯Úµž2;y¼®{¨õU×O#yûîù_ TrÝ3ÃçwpÃãþõ+ò;sVåÉ¿yÿïU9Ðy"ŸÊâWÇy硼ú瘊Î˺êbãYZ·ù« l|!äõö%†q£™Ë²ój‘±R45+},üy *¤ 0À]A*Ž€ÔØ.d"âÕÇUÝëÆ‘âÚ)° © Ôípˆ§d”Q&„—6R ’‰¾Ãq(ÜÂþ쥨B è.,¹+úÇGH{´w®täW‡»Î-»OYº–¥>cÏuJ ]P¾¸r׎šwksl×xÑ÷ÛI9]í‡Ò}h}ñÄ”L±ÜÏáŽ4kð·ÅzÔãXŒÇ¬[€­\è#qÙÛ§Ú>d÷¥‘ϻˇ~,M™Y7žv²u»W¤´ûu×Tþs’öõý›ÔHâ¸çfw¼:€˜ÉjÀ¤@™ê×èm®4f&¨½&dT9Á8ž8癫 /‘ðœÞ[È1I§8މ¨¦€ãT±ë ^i©Ÿ>¬ú¾3&–WÙAÆš@ÆC渱-=^Ô¤¾7µtø¶é*£Ù^ó1ëŒïŽÌ~4Õ]~á­wZè3¯8ú˜ÖÈÞÞsæ†Ø˜‡q™ei®·«ôþ?ÙKó…™²ÖME÷â½j³‡V£C3ãƒÔÊC¸ö]- ÔÉÈsOØkÆýû]{ÞÎÍîŠ`fç™è¯è@öŽÈ([w廀”Ðõõ>ÛÎ~kži#ÆýHMyô3€ûˆÍÝ ?ÂáÁ’gUé- ÉÉ{ÇÔØ<ó}}Òëëô:—Áœpáó&•åròïεqãZY>|Ÿ_ŸÕýsçm®•[Þ¶úÙo¥D! ;D€x½6•Ã2cÞƒbdÜÎrûäÎþ€CÝÝðìTt ~ÿÀâ±éоп{*ÿ-tíîð«‘TÑKð¦Àbƒ ÂËNà^—(Ò•Ö0·¯ŒŸŸ8iýσ¿vá1òÉñÞ‘oÌ})«:äBô„4í¬6@œ 6r —qÀ÷þ˜ì=c©#aOö{i-!àmWöÿNžÎJ'mq½˜rÉ¡r臵¢vÎcžVE8ç~_å¶ïëÜkÚøâEP'åÑ¿fèOÖ‡¤L«ÃëCc€Ó#‚¥…3€{[Q²MðÍ÷ …çNGé{®ZT­GÝ ‡Í`Ù1D"¥ïžð¦w#8«´Kޏ±â´^ƒžó"¢UP;óÛüs;Þk^ Ô:»Jw‹Ü ¥CsŸ½h•×­ºÕKëìó­”Kú×KëJô¥yæh Çïò²¸¶t®ÝÇ=W¤¡UºV‡¬H}‚q^à:ux€AwI $3ˆ[¢ÀFîñÿ°|wZ|z ᢣÒC½„>|ÐV;r„ ©ß5ã@|~¼tn€¯îÛÛÑ 6yíøúóñÓÓÑFö|Æ¥ÑêwÍ m£w„ûa;—t>œhf¶d5îÊßy—ͬŸ]sæzˆ6ƒTiá7—BŠåìqáwK,Î]Õã ÖE|˜þëɱ §&³˜º;ý5÷ZÓ¦;ß%ñÚ#h¸çdÊtžãÎó+,ÙLÝ2iZ œ”µ.Š»¯¬íö ƒö÷:ã{‡/û*S>ÃʯŠjæ—ÖÒ‚“¹\qSÙuŒ¸d¨–¯_î³£š»ð^¼hE5µ^!ó %t –E0v`šsÉ‘O3× èk€1Ð^L÷ÞHÙ5ÐqoìªÆiÇ ÈÁ…€2Tædßa‰˜$OWu°ƒîï.Œ‰¸%|R¡K¿ü„PÒ# j{¸¹K$Ó½åpÈu$À˜-̼^ÁH%wżU‡z5×.+ϱ˜gÞË|w^bU4²ZÞì‰LöǸûjòùlÑ=ïóšã[—®¯Ù½á»eÛ] gŽæåôÈ^9qÖXñT»W?ÃûÛòýãÿ#v%TËíëGOj•£·S~î=ÙC^á÷õ ¬ÙÊ@Õ]Ù…«¢äwÆ+¯¿K¦¼Îa÷ü;÷Àÿ•eìe¸¶¶…C`­Vûu`S(˜Áù´ñ²éϘ?sx4!ógë~]4ݯü¯¿0Šæî1Ü`Ö[y~¥NzŽKhRíp·Ôµƒuf¨„Ægåp()¸ì¼;ÔöÁƒwwU::-PÀ¸ă_wM< ;œj˜“ TR䣯±ÔV¶@éjK.]ºO^¯e­¦ð*ØIâì[àíðÄ<ŸçÍw]ºÙÑtyLv6;ÑŽ_AU7ÄZœ+Ò=¡Q)ã¼ûˆìóå€n»¯méÎ3_ú ÁY—¡yšlŒ@úD˜øfÚb¶ÇÄ¿ÏÖù5Ì”Œ2-~ë«·¨´‹û‡ ìÔÌ&ñÔ¹:æwÐ< l-V>â„æÅ$W%äFè- ÏPJDN€oþWVs'Èt¬ ï×¶+ÿ 6”°Vã*ª¼,F>|øóÏÖ™ç±nïAx"˜é}²~¬–Ÿìm/®<´°á{ L<¶ƒ˜8Ûß;>söºóÐ3¶,ŽŽT­Ç0¾$pGÙ&eyÀ÷¸r©± n«í.ì(`‰›&ÃPâ3ð¸¼&³Ž¬Vdôº³^ ‹³Zðe<ºÊïéÂW¼®±'ÿ=4ÿíqRJFàòdt²ŽIŠ£‰¸ø•~ÎH©¿ (sÚÛÞ¹ëÂå©ÛU1wu‡\UÉfD#«‡™Y¸GH\ WYáö‘=ûv=¿8&Ùfޝöü]5g}X÷÷NH–£Ü;Ïp¾´užwžEsåér]]Ýí!:SÿZΗ٫2üñ?b$ € zz0yk ôÜ7®•EÔÕ‘ÂÈE[1nìx×q!•oY1|}ÖA’"Eûóò%¤5ù¬Ëb@ʽp¥™r¥uíÝdÕçâ-Ekz@\°ÎÙA|Eá*1Ͻs\f ¾{gº3ùð+4î±ÌàH§³‡~fº*5o)È%Kð6ÜÏ‹‡«ý62»< rÚµòtÀwbL9[Z”Z™9Þ ôGÎB÷vƒÏË•«oDç[d¾Æ=ê4té™Ó3{øò /‡B~ø¡ŒÈ~Dí2³Ûƒ’wA«Ø ¦(X½xPЭ°^ÃÄÞ¿:ž©½-xg]ã¼èè9ð=ÿì©«º×4‚×7÷kP~íD´—ïÛæZL¶Ê‰«m̲¢¶£ó5p3>è{<â ç Å9FcÁ ²ÀÒ_é0ƒ‘cXº Çƒ48òßÏ€qçµ³,Þ † €Žo[/yLØM*¥5`[f¨»…<†Nóqot+±Ø}¢Ÿî™â­ÅcEŸÀq½ЂP×ëO“S lÚþ'åÐá#ÜîËñô8Cp·Á™v*2™ß'ùÜÀøýìÖ­Æ]ñÐèêõ÷Ò‘1ö¿jôÚù|trVßì³Äß·dýüê[m‚²lK‘Q*Œ]’Ǹ'Gªî«B‘Ç*‡1šy?ï^ „ÖCë°šgwŒ®®Êîâàwû6ȼȨš?sF­çñ´¸ïõou‰Žn@RÌéíÖØ²Uðá ôu(Ì2Ò·TÖ4] Î;à8 útX§7|ô £Ü…&’²’Äoô[eûHÃGÙS’e÷÷Y`ìŒÞ7[úo$8Þs|çD)¥ÛñÜ+X1—å0‹Ã¯÷f®§´âœÉnK8k0=Žšš…Ñ#…µa9¦¹6l À96µ¼Ï3dÞ’/úláü4W´kãxOêg”ñˆl¹íÝoŒøíûj%úþw­x°Ü½þƒÔj^ M†ÕA2³Àý[Õyóbƒ«÷qj^æo `¨4w BŽR†=í—C-š» ›ö;bÅJÉ^Gb÷f6‚¶Â|E¾ôÛÇ™ý~«—õxÏí¾µü5ïß¼OY›ë·$ÍÃ"S*Œy ˜bo¸Y¤òVÉšC wèÅ_y´ÓWGK“§Œ)9¨ÊrBÐy<@yâWÍÏ "W´•^³¶üé'¸¼ËÔÒ}ÇQ,Q 6J˜…ò¹ Pa°Òȼ¸»÷ÐØÑ—Ùß{~,;*ÿœ×{îŸ3tÕ_ǵ[Éefêž_«ý¾7³LöÖ\”ømÈÊ»bk½|¦‡•H\›íÂï‘åÓ(S¶ÿ亦՞#úVÛ¿ÿµûØaæ™;â„e/ßÁM¡•KÚþ.p³t_n}’Þ8ôùÞèá| –Ü–jÜÅsûO|²„¶Ñ*——ü;þ˜òò>³È=-æ8‘tF!·7ZÚËöÛ‹ÔYSl‹kwÞ=8uxË„e¤=¸0îøŒŒáB€NÙ|†2ø.yÉKÂÁÑXŠØZÀÝ÷ÉLÚèž$fO¦2o¿xÊýÓPrlY‹¸r‰I!÷ªÁý .§50ÁÑ^ÎúžA&¢îü§æŒgw‰UÀ½hµ€Õú|ô/”DÛâzïÚwy–»„i-2)GwåÑäoÛãέ”‰gÙñQ—¤tëx%÷·ì¨_!ÜG/°Í5ãþ}ä–—w&®dS]CO_ZobZÙýš²õ¸ºÙ¸µ!oo§¤™Ó¨°Æ£c ÏU{ÊUö}üW3Põ¾·dKí¡í¾ÿq××jcµ]~¯ JoX“–‘¸¾Ó 2À‡V=ž‰Àì;tê`Ð ÜÁ»“}‡8\{)Œ#ïÏû©—…Ö¬Ãúìþ'õpâP>ßKéå_ùù•€¤÷]1H󌻊cZ®çìøfáÒæ‚"ï…îåkJö¥ÎO9ó}Ùvy~âÜ ¾OdHgn÷Ø{(䞇@æ»-\•g¾[ñÄýþÍïáä‚çÑjû«WN!Þ]¢<ùh¶/›Užød,õD6“§³Ùv¹Ò…_ALTg¡¡½6äo-“:Ε”PÜ*‚1äèØ½º|þŒa¬,ì˸/ó˜÷Ÿ¿8]Æóå\îa%0b}ë.îÿDÒðÈpŠõ‡z ¼fÞš]ðÏ?Ia ù99ϬïJ÷¸=K*ƒÏ8@§C<%4îCGùþÚŽ |†n£<È5í;=…t—[?"³g‘gôŽ"˰èD9Ô iºWšó¿6Ô ATðá_¾øÒp.i”]õ¿?øÑÛ'Ë®\qq—-Sx÷%O'>oŒšo›´¿ÝåC™tSé0LŸ´œ Þ}LßZwþ­ßk¢mõ“«ùè{¢h9ïõ-ËŸ¯‘±á4 Üg'§&½6•.6#{˜£Á#¤–¬ŠjÎïÃÀNô{pvoºŽYí™Óÿ¥~í°º=gý“ôÂ%äj~àž µïlðýëáîãÆN,OKÍØ’¡äÏ lçØ+üßé&NU:˜+½ {5ÎÀqé×!§ÁoéOáMÉ”’˜Gôv;˜JuáVs4çܽp•I¤7Þº„¡$îp…ßi8üZwDÉÅ3›óo]ÅÛ¾ïöO @ï(°Û….ü” ÛåËïî Ȫíz{^òêÀ”åܽ#³±ôÙl™Ó;§ŠzìŽoùÞ ÿ9ÈþžŸ›ïû8y&î÷P8Ý •qÖav>·e1y’0š7hÈÚÎôüç#ªðdh¯›F7Þ¿ÿða4Ø:Çw–pò™“*y¼äQðÓœÎ:0 ðîYs˜Y»Èß®-l§­@J;ÆWÖÕ2Ç¢ŽëÒnË:Çõóé“ó”ÊOu¶Õ3ˆ¥w¿(¯áQ÷~!pwCIæË–^1ŠU"‘àŒû9dwÑÖVªt”eñy¥ÏíÝ<Ô;6A›éæW¤DyàŒµÎ^&Tðópáˆ{ï¿þ…œÚë+ëÜiçd°2ï±¶‡úLRi©òoE§Í'²Ó;ü”Â\χ€{÷Þ+øë.[ýo_E€8żø-¬K‹ÛÙcz….öןãïc6´µnÜÞV?ª–Ýê™?ÇÆã2Ë Ú=p?ƒpÚÙ ­rz‘ª˜‡L{ŽÛú“Çb¸ƒ‘æà׎Þnoõ 2‡²¿£ù-Õ“ç úêÅ0Ï7ϰÔçm¯ùµmEYƒ»Úb›¯õÙµwë9¿!î|#`âÝ£`õ ä:ћ53¬sXðSýóç?ÿüüÌ®¼\|<Ô¿@\ °ž1I| s˜U°¿è§"™b-- `VÓOK¥;$±,Að3¯Ž¥EJko™íñSÇÑã* WfaqïœÁ>‚HcÖð‘SÊ—=9[öÝKæÞii[gÙ}g[ËRGyõ,Uxn\îÌ'Cœ×™èaš}Ÿ/_ÊÎ Í"ñ[P-r}ù¿“‘õwÐYÂVb+á1ÿ|6½ÿ™P#¼yÓ—‚\)È{Bšãx–¼{§MjÐ2 yÛö7®áO< ¥ššsvŠ=¾ºÕ;S%u/Ç*H"÷Y>»tRBBðÜ><83ó §øú5†‰#¡Ä¯D߆iÇwKJvÜ¸ïØŸ/^ •¹ýŒûÿ×ë•lõ^/¸Ö³eC‰K¿¥›~œùÑ#ûôiÝxB¡þgmG÷:•s<Í«çO€ïè'Ÿt¼®#|w‹‡Yöý¤ 赇z·ïU‰Nþ‘ârÔœ]?½Ö»ýÜ÷>w¿ Êwµ€¶*Wó2ïŠmržÌbÏPÏA¼xqgÍå#µºÆU5lÊÞ ‹dßKÙ‰‹ Öd3±„/_âÑŽ~Âû÷¿ÿþáÃׯÁ?–þåí X`A"6ˆWAóìç[)§åúÏŸ!òöi3gçî×eï(@ò˜¯~ßÎ’c£::0²„d¨Ýs¸ '‚»Ê¨_qâøTwZîñcéË´\\w —Ëç:ZÒÍ?“¦'½hŽ3Ë2Ö‡ùÙ;Îâi$p=$Ý£mÎ~îo‘&1Eý6¯¢„vÎÉO® §>§nž—œÃåYùÍ ¼ ©÷!ûÚÒÄ»´¹™ïm߆àêö誋Î#n ëö ß¢iÛî:yìeoì}>þÊ¡¥†ÎµYdNZË~1ú­QTÅŽ¢æ¶Šï˜œùøüÜÿw¤ÿä«Ç=[{ ²¢6ÿº—n{âåïá>WÐ3óFìm@áÒÀñjgÓ[{¬óú^4‡X—Cvës%ÈïãoËÉs ÷½Ö´#3Ð;žÖCŠ}TPÑU2úãlïWöãN8KcÍE÷h¸û’æ–àöqUs÷À5cŒ‡âä½áT¦ÜõâE\ëÜg¬}7åÃÙ.$fä"óœñ*,žgUD1þÆxDeìqê.AÎõöâ8éCúÚë×ÑB[+06~rI´ÎC87¯/ynðè{0»ËîêZÕZƒÈÑ0åÌkÔ0š@°ä×Êk,UwI_²¨¦fÖñ>"î³LhUÁ_ Z4ú|ûçÏôdÊìjBê3ì>3œ­E,ž{:ã¶´*zÁÀßš¿u¥¤X–½ Ú«õ÷îÓ§ÏŸÑQ‰wxÎ`G~6õ·¼øß£¶þÚZù¶»ã{œuí̧¾gQ{€ž!B«{&ÿ¯Ù8²O¨Ù˜GÀÁ:¹vš‡ 0ÌF|ùþ^sJqÙÞñüjd¥=aBc¸»Ž³}P·ÍŽìŒÛ²çàûüß X?ù÷:¨\íOÀLè¤[àøkB<7ÛöÜ¢\{ߣÒë¾ÇôŸÂï߇+Qé÷rBÎÎw ú”1,Â×ôëmZp®Ÿp ÜWb±[uÊ»*4¨÷JÌ^䄿Žß¥ÁÙ¾ÈdÔhK¶¿Ë—ŸuÀ'Òš»úé¿ü‚'¸v´ò ï>{+TSÒˆ~ò?b Á®^ïóW¯ N컸ߛ÷?àùQ¿–†•f‹}ux´•!G>6Ú‡Ýô>`ÚÃŒ¾qÕÕ¤VñŽFûºçy=úêÑ™W½_G#µXùý€§U¥™ýÜupÿËÃçD8Tcu!êGÙ?ƒ±ìˆ…j /÷¼_r ÍÀ¸¾sÎ#ºˆ'†’{”.F¹û=Æ«{vÒ)žbt÷Šs©7æX&Õì¾b6£mQýÃøÞ8sÇbÈÇìµY‘Çk) ˜ùÚúÝu» ¸‡×ªÃÄÙˆÚöPìnÔÄÐÆÐΧO­üÊfÏCÏ™zΞþÏ+²fØÍ¯ùu9±#•åãÇP~zãx­;±g ê~ÒWgi\fžzõÈqÿãõŸ/QîJ§Û³!ÛSUΊ7ï® ¯“GéíP>ƒìÚ ÆßÙ;Î }αÝ#Ê#»â¬Š7®Õö{N)«z\$ðz\wSEMµUÚ'Ã^{2¤õüÈàgr âRF8·—f}±zSgÖ„÷8ŵöƯ¯ý³Ÿkž³Å@¯çgßIšøQž›f”çG%Pûƒûþ»|*•¹Ã¾yf(a×tF+¥aGÊG g¾\‰¶;3»÷öIƒV‚¾~‘,Tuk|ê ¼ ÷XùsÖÿÜvpoô$t©\&˜$6Žgø“½ºÏXopýؔ縯nÝc83 wöXÕ96š Íœõ¡{ÉC ¹á¸~Æ#?OÑ€w§ÏL |WóPWÁÜ “]ÛqžJhf]ÌwE,#¦0ÿ£QÑu‘ä¬Y-ªáñüÚ;^½À¦‘ô«²©¿WÏ#&!äÛÛcW禔xú=dÇkÕc ¿íºåóœ¾:«ÙÞk‘|ø–<7²Ú!?‡ï«ž„sË„¯Z߇މ¿˜TBß~ÿ*ÃÞ|ýFx-üó$cÜïu‚€Ͱœ½UͳÝ{ä<¼>YÎÌi„‡JO¶±w¢Ï—3ß8_„܇t¾·wàþ}£¨{ŸGŒL­ŸQ²9ó‡Ö<¿ËAR¸!Ši¾…?ÿ• NÂÚÀˆƒh4…$?Ć#˜}Vþž×U5ù5øÎj콎ǽ®ûýÌdÃîXd6þú«fVbƒÞ¼‰s†BÍÒ£f^+¿_¼Ïœ·8î«à¸îk=3¨è~É ­`ét¿'úÎýkµ’þñm^)­¹ð+ì1ÿ-eFìsŽÂÞç×·HµíŠ–ÿ 6FÏ‘þ»/þ¹îO`ܯà{Ž59ñ?9ÆÌpÉ+#°×~Û«r”¹S¾#j¯oÐÓÎw0öº{°ûnÃD\º?þùç_Ñù›±÷íËiåa¹SŒÕ‰Œw©'ǪЬ_5‰kË<¾¹7´ •< NÎï¤Lp Ÿ>À{ÿžCm~tjã0ZÅ@Ï)«|pÎr{Þ­Ïk~`&Ѝ§µÇõ®¼Þ¯ÅLhG!W ­oeˆÜèp/ý«¢Ó;Cî°&ß+Ø}œlcUA°rŒÀsÏ «fÑÅ g@”¸?žØÏÎ7Âöš N_úîûGå ïƽ§ç[u<»ú]±ƒñoöÐî—å0HÛÅsž½Þ Z‚"ª³œ?¿¢šr3ÇõÆôü­p^Ì3÷€±õ14FÆ.X:ðvýÇÿ#-Àî}¹¨i”o×–\¦ÙÑÏu¥»û©×rôÂîãÇþ3þ«¡É™ôÓÖ+ÜÈüÕF{íÓS.v^¾rµ£¬ï…XÝ#ºè3ó*™Û€8W–3U®F뺎%Ÿ?Ê/QêAX Ç}þ…ëhèù#õ¸ @[ßê$<3ïåŽOÞïÑ~2¨úæM¤»ÿöÛš–½÷lmen`Æ@×NÞK˜õRDÔ½¥ìèYdFw«]÷=³‡ç}öŒÔ€{íL|ϘKë3éZc‘Zósº~NͶöV¾½œàæg0朽Yæ|‰ÎA¸¥FI ‚d5djw°uµ×1úÛ;'Ùaq˜B:Þ^äôÙ‹ùKnJº¡Ûã›ÂwðŽ«ñ+;™ùQšdkZŸ2øCRix­øðþý§O*Ê<Š~R½Ec¿š’OíÁâ«rZßÕ—©ìÅ3Õc²«ùã0 iPŽŒA½öÞ¦V·­Â+½„¿'ÅÏõÖÁe(_éýïBò®k÷±½ðù=G°ñ½¹_¯ß{ýüŒ»=¯5óܹK2ßë^Ñ‚CìáÏ4¸Ö”²´=€«ç$LYwùòU ÅÎÌù¶7.¿½745|®•œŸµŸ—XdçøQ¤ö¹r:ÿÞ´m.!ž ¶‘äFï+um‹¶¤FÖ`WÉ©e7 $Gî’|À%lè3*ÌúcÊóݘu0v`PÀU×Ë\¿;wFŸ§Æ¢¤oq®ÎÄÏÍü˜Üoßß‚ƒ}õ 9í'ãž³Í3!_[ç1¯L™ïOÎp3ß Ûžÿ«gãª<=t4fÇW• wEOŽO:_NfÜOiü673ãê=~?d á ¿×Öá&nLhJîœ@ë]…€‡í" ·ŒßßÜŒ\±­)~ÊBÜý÷?DZd>þú¢Å'ÿVo÷{ÅÀÜÀ†­ óBû'®î¾?»<îftoÓsÂÒ»†}Œ¸É·†5O¢Vʈ&dNÇ¿G ?öäÃ)8î¼ã¡hl¥  /€x;Bc;¹U÷÷¼&«YÞMâ½ Ç=§vì‰:êB¥,¶£Æþ!di}ïî·?¯±Þ›·)].ãÕKlÝ5eŽ}*¿¸vßò[ì½õû!ÜEÚÝûq—xήJ8Úë¿"¡<1ÝëÌñÕ´™Õçxìõ(V™õ{ŸÂ“k2RN¯pH×p^\qÝÚþó'ÐÜ)¨±ÜîWOЇïþmºއ7r ó2Àk¤õ,;gŸ72cÖ&áf àÀi‘ÙÂùÐbÜ}ÝC¿ç³*{N2sðçÕ¾¥Çå÷€¸¤&UÖI¢{Ï»úýå”ñì3lzO¼ÇTŠÚcGç®Á¢„/ëß|ïýìn&eöêýÊovÄpo[„BvQ\‚ÔíëÏ©®ÛƒÂ«ØéûáÂÇJ„“oÙØ{”Ê̞Ǚåíê·vN¦{Áw¯Ò%·XVó;[Ú÷~™‡§½ßÎG&ÍK_VÙô•Zãíf¼½'îée0Êz{qçJé5¸ùZDŽݣÛ+Å0”¦dߘyØÝÿ<€H[»<¯×Ï£«¥ÃCÍjÏ뤳ç«W¿ü2Žpo9‹£tDVÀ™¤t\H°PÀ—=YÓ40úeøÈÚ<Æ£•ÐW~á>0$n×ϧ÷ɶü`O¶{•ÁaéË— ÅXóŽ·ç¯¿Æ"¯ÝëòÚ*èœ+ص`¡8ÏË^?åó“½2©_Ômì‘8ë6×dÍ|NüÄ¿£`{ìë?¯ží¼·ÕàJSò‰<¦×†ßÖ ×j›iUÎqò½ý†&ÁÖÂ¥dO:´­ràã¼tž/{24Ï çß"r¸7 ¿VÆÌܪæE;«Ký5ŒsæÍ›ÒU}µEèV{2‰»B¶óH¨ÿÜ`Œe0ó¯¥2x=!õÇ‘ ØN€.µækjT˜^ëk[Û…ZøýúåË¿þœjôØ ûóÏ¿ýöþýÇñ]ó±2ú– Ê2˜g“ÿæ†V÷$[÷@[ôszÄdztÏð\#+ÿ3àH6®Ý[çõ¶÷Äþy-Ýó{€†\zíÙÖzòÉû'k6í}ާêl–íJÙS>}Vå4;¡³+nNÓ_ eûë w Òäð^Dྣbý}G0ò‰vjʯÔý3@öD›ÕZN°kÏÛÛçkr~,ÚûªµÏWùûyåýH³{^=‚AÌßBÛ·W€^Ÿí{qBõé|p°ìZ´¼ŒV€zþ3-÷•¶µÙpãUºÅgï—3}õJП–P݆SCx<}8E|ùøŽD‚¶|¨ÇôŒGâ^½Š˜ýKs>å±£ÄÍ%+ßÖc¤çÞ³7N:Ï‘>Ùc©ïb÷=@Öa2`[£‡+Ç¥àõÀ÷Õ×&Jëoî­  ¿Ä“}­pÚ‘¯Äù†þa›§ßëµöÂì Ø šåoÏB£îìdâlíüŒ¿BQ*áÜÖd¸ŸÞ2ú-­=h8ÿ-=Ž||€çùæ½uæCæv\ßçÏ‘,ƒræy÷Õ-:½ô>=w·+õ¨Ú[Ÿ Cñïžçj™4«¡Dš)„w»1<ú!7S*P^Åè\¯–ic î{À½ç_€nÇíáTƒkòto‡8'\žjïRhôö­óî®!¹ËÜð§ŸÀåø®ù-(¬üÚNÔ½®ç;Žg}˜rÒ ðâçÅ‹‘oÛ]B£™ÏÌ÷HGïǵ°f X“?üDT˜"x'g—¹÷ŽÊ Ÿúœ~ui{å·L)ãOï˜KqFîõgæ -J»6p?±? pݧ͇v¨èÉ3}àkçNä –+ÐOWà ©Þܯ6˜+ûèø\î’«@ÛµÛè Þ”ô‰^צ—@·e©6¾)¬r´{††«Ö‡.û9²jU¨p™½ðj~Ï—@ó\~­°DLÆX˸?Èu÷CkM–Ó÷2_RP{ŽXjÝ®¸ywnáàl{É/_‚óé^C+þ–c”­Q]WÙb+Bw~ðvÔÊ÷Õöë\5ÆÖ5 Ÿ¯5Ü?ÅÞÝÉôˆ1Ðg÷b¿Ag_/àï~†â#B¯®`õÖ»QíJb ùV ¿Ob¼ÎoË ³ö¤¯‡ù)ž“ëwÝ+$ã]lFžb~£üšÌÌË¡c}|fVöó8ßý~>-aSã~V• øï¿ãSîÐù%_ š åD¿íþÍåÿ€!T]Œ4òÜ®ë“lOs’Ú‹¯š‡Ú÷]Öo(ùØ…×5gy¤<ûaàq>ÃdO3¯SýÖ¸çpefÊÚÞl•æ‰{Êf¹$…·Q¤¶Ójcî;·üø#âEBëëËɯíý°©ð_¾D†+˜iü|.%‚<÷6-\ë‚N2ñ&°îïŸ]^¹]äÐCÂ:ø¸‹ú'q¤vxµýP¡»¢Äz©±w¥x[fxz´á,º–+èZ>í™\ Ó?‚¼×Èïpß‹®ž;Ì7 «€Ä8;®ÜÑ¡-ÎËTú¯cDRjÇ!È  ¿ÿA–¥o-Þn˽®–_ù´_œß q?;AYçå!¡ùËfnÝòæl}®…+s§Ýš€dO2´'_Yu=?)VÖm¤áž¹çÆ´âTN‘sº¿þ¸eì_qú«–”â*ØrÄ×—âHF°û:•3¼Pb‰m¹ W‡ØÃj±ãqí×N2bÙÁ‹Ã•h–…%Üï,—Ì)2ß²UÿôoèYk~%"Ð_‚W¤ö8/AaÐ?ÆÞaŸÙ“`âgäîÊ8áæ¿7Ööäþ³¾—Þ¿Ò« ™_/“nrß8[f÷ØœÃÌžÍÀ‰mñ¼άw;KÏvÀýóí[Èêð×é)eâ•%úYèá r˜ñ»‹ž’.®œŽZűâºêz1ÆþÆ€ûéÍë®jrämëûløÆ´w åϬ٢ü[UŸß qµ¯Úž»EåZJåÕ–ÖÕº äÝ5Îûãpï–âlÍ]Œ×èéiLg5Äó=ڒ߸w Å$+îûä¼Ûw/<”¾÷ù3»þÞŽ®ÕúÀ¥ʳ-Ýzœ×¡<®‘¼¥ñùx7&rØ »Z7,çÎ{ûgõ},¸—|wÚ.Ç^: ãÑýNÅL/îêo‘YÁyø^ïv╽î+Ä]É9:O?íQ`{÷á™§ùªÄ"þ_¨¿Á¸¸Ã.v¦‹ ^¿ŒÜZéÉdÏŠ“¿ÛGõöϦvÃÝð kì·;È{*ൃôóÏaª3Jf=i]õþ]qðí` ÿÛUh¾²{ë¼ÚXåÑ÷àìÞq9ÑμŸ?ƒ‡SdÊ®ÍûÏ'¤^¹?Bïø8o[ò1g€åþÐãëz&‚>ç7C>GøžÁÍÉHeÛFÜiþ5n@¯BðùØ©v‘0[&åu£LŠ{Æ?ÕÇ.ŽˆG ñùsXGFiÔ¹Á¬«Ç®h£wf6vÊZœKåxq9¸ü-ÝW®‹í²Œœ[z|^Ï¥? Ü´d9w=ÇWŸÅ3¿íw¡£‡tÝ»¯àyfrgo®fÞqŽÿƹٿR®JÍU,4&§f´ ‹gzÚ溡¹WSîAÆGD(Ÿ@Ò›ÈñLq{ ýS|ž­?Yÿû@ðLW0«Ãq/X_=âç$ªâP§÷¾qmÞ|Vðƒ[3=Å÷²[{ v‡` e»y¯ü@CŸ½¿ À /šQ+ÿ¤Gw®Þ—Q­Eë"L#DDhýÏ×<Îm4ÞãLvé×HµZøÍ}žñ1¸#/ Ùc1ú+¾ûçLœY/%v´þt›‡¹˜›ÇMŒîswž“Òbö®xãÎnÞY?s•Ñ¿W’ºsWµÔgÃûå:vµgÞ{çœ ~‹ï&¹ê\û“€û]B…µÀäV»vì® Zj G>u5‹}¥zÿé'²W¸ϯùyÿa~|õ˜ö/~ˆ¢m\€æ׃nó,õÌöÞUp^1Çœ‘¨í«Fem‹-=à_¼øç?‘vI^v®½>sôã‘ n0;¥,úù©ûI™w0‘SÎI½ÏÄ÷¾7ë’^mWݾ÷|Ù÷ªö«³»37‚ÞÚB|’Å?} –ÑͧPøÅ 6+ß¼Y·¶\·®«sìΕ߰ÐË}†wð™À“\Ì+8Ub>‡¹?ßçW‹×¶Ìrþ:ºw­Æ%ÊÙÞˆ¿î3¦ð·n³ªíµšó£XtÌ–À¦ßÇÐæ^ÓÌÇœ± ²qyÒ O¿b¤Ûžj¸ë)°^<¨(º»!ÁØ9Åy&PO¯«°î<'+÷,³7ö:™{]÷Ux4³‘ãœÔÕÖ•Š€xÅúÿýw«±xÎ4ŸHSV?¹ßÔË€¦÷7'ÊæsNúdïïÏ}-þ\XÏêw]]Æ?þùç_áu4÷~Û¾º¡¢†ÓHï&×ׇ3œ1n¬¹Ù÷a߉PðY <4oÞ\kßÏ 3IÆS Å»á™òÙ•>=Žgß{¾w=ÚG6Í×<½€pÕ_9>ÍßKÏ{;kûçuþªCÈjöê]åÄ*c}ö]ý@½Vm ¸·ÜÐÇxožê½ QšíF>'~´Í'µ'mÆ}|¢¬2µw±³DøŠVÂ/¿¼Ø¯ŸVOˆÑZÝ+¥˜ùLn%óªÕr¸¡¾$Nºë¶m¸zË›4ž4þöÊžù.ÇhÉÓÄŸ7s[{Œ$$q¶Z<4{.Ø}°µ5y´…ßÉš|o%GŽòÙYηÊéˆ^XÒ˜îi5÷Gj×ñÝ©§žÝ¢~r/¤þ^]ä½0ó ­çówؽz…y°öqüñÇ_ ç$ 3“Q{÷ÕïÁómµG½çÚwB„Ýå\wòÄÿVwõÞŒÐL¦¸îZÕSøšq¿ëô]eOûï£}O÷¦ÊRç>ž{•x˾«÷ÑÔÿüg@ªš¥ÞÅsóv«Qb0¬^f'…Äêvy3vµî?ïó¬†1=®I=ÿðã;.Õ¾U:æ#25÷~û8ÀT3Lû÷ö ܯƒBFßII8‘cúb¦Œïï=Èu®×gl+y—ÿø‘»GˆŽ¾-dß½¦ ùü™=övvAyØ×ýòwW[ºóâE.ëÄçj•š§“NÜ]N4»Ïè2lþ“ßê¹tÁ¿o8õ¬M³ÜIÕ”¯oÊ«0î¤ðà?#gî=p¹Ãpãÿ±¥Ž’f~¦ûç¿…T;š{oŽþÜ v¯°¬U€w1.{åbï{ž)NÇÛ vaÖ€¥àp|¼ û£ L}Œž#úáh kŽœ.þsÝ~\/?x¾R»p³Œaêg‹Æ'•P{‡ÏlÊï3Ù¾G8‚ßû|?ÍiѼ͵ÂgBœ·-)énèâ.Ô²;Œïýå—wï>~œílï‰pæŸ>»Ä°V‰mæ×y¯à•6òäáßbÖQS7÷Jàêô‰íx÷=±ÆÙ5î'³À'¯«ƒŠ6Y9ûÃ4Ÿjø=þxúȸ‡ãhØÝðf¿“ƒßãqQ6\ïÉ(eÄyµù£3£T[Û®«r+³(pó]ßë¥àÌu„›Ú®cÌÈ–n¤H¾áFWö¸ëªË¼Uñjƒ,èrë¼üËìTéÈÄíß~{÷.D\kAåè9pQHt‚zÜðjXÕ®å"ïfW9Ïð„®ÚÚt–rZ\mRtvݱèO:ù­w H®-¿É×rµ¿—…ÝWî2­ØæwïEÙ䳎p™¤^r•¹Ë\ïœ]¦j­†mÇß+È{½W§8þ‹]ŒÛŽÈ¼.'ÎÛ[õû+ûáN(_‚ìßÿÈîÇú¿l‹Ö+fÅÆûyµé9â{ÐŽòö§×yà¾÷°é›ÀÇÿPî¶ýwórý3—ùX~z}ðqGÀÐb}Ù%4©SQ{kÒŽN­ˆ¯æöú/q‘:á­o¥ô ôJÈ2oRy.úzF{WM{dÊ=÷–ž<~*å%(œfóJdz[wÅDê.œÁîSõž'öÄ'þ0íý‰žÆ}Té*™‹³wä^¸c @³Wâ{Œnç^A4€{›¥¾+È÷„ =7:+Fäµõ¥`žÙyp¿¿7r’ëIe¿n 5J ½ã¸j:cl+üTÛÝ€qñ·{»)¹ÿU¯úþMVfõ<ÃÕM 7‹Q$ÍÙxefã(€AŸuò釿ÜÊó5G¤5(,ÛGð²-ò»‚™°‡êŒáškÄXóŠáàþÞ[Ѹ÷Û/{b¯KË^Êí´þ±wþø#tÏÿýß_¿þë_þýïÏ?ïgÁÝå¸ÿÌy\Ûz.œ-3ÎïÁÆ,D]@Î !ÎÈ ‰Yª[ayswZÝ7fŠö}oö<ê\§>|ö|¿·«òòì]óqŸ1¥š© 1²ð¨T°ÖÐÉ<„›;·œ™râ¼ì™ÿ+)ï¸tg.Ôù,ÙÅÕ9óë¿ÿ½}˯~üJ¹œ|4W §Ñ­!z憲 Dpg@4Ÿ%yvYäý ¥=@™_á¥óóÏQúݵO2÷‰­#Ë;ÚF÷5Nè´ìYßÃ`ÀGûyfÖ ÔŸþý÷>þúõË—ýëÝ»·o][üHŸr–³¯ïñu•oîg߈ øú¸ä=Ü»£öLætœß˜/zéû±«ó†”4PBOp²ªŸÿÌüù™Ü‹Êî2¾<‡ã››ºü«šqoƒø½¦Òj›f¥•3½£eCÌ®/µ–‚5íßtÎa÷YÌÁ£Ê€yß¿¿yÓ ~ïÿ QR/ŒºõúÎW¯~ù¥'²jía:ÝeozWCóÚ´ ­}>õ[ÚÀ­©“W^K6]Æ…=qEÞ'?~”ÿñ•hdæ–݆/³7ú¾(å.†¸çÎïï=ÏÔ\1vl•g1MÁêCf0Xøç½ÿ/])ß‚_,ãêé…ž? ÿ•gѪÖY4|îì¨=‰u¬uÞ]òžŒs¶TöŸ<NËÖ¾%çŽSDöôë3Ø.§ž#½ÎîϼjþýÀ}¤›gÓ煮fj»U™u€…‘ X˜íbVã°?kgÚí¼þ±(Ç@ Á¯*òkÏæ™š~¾ŒüÇ?ZÓý×gÔˆqÌŸ„»}V<Âtí&^Þ@Ërq”s>LùHOñ’Sßj\aÐyoìËN®磿]Tê}|ÑA‚AoXy®‡0ã×^ŠUÊO¢c3*øIìíÙ3³µŸl½y© ¢…ZôÓõÀb» DÂëp•=õÞ~Ž?Ò)4 ¢êôèÕíº&[;‰s¸&8ë®R®çðÕùXj9ôÿÏõšŸùÞC¶žCùÕRgîX<äʺָ¯‹GØã¯Vi­Ó+n=.vô]Ù³b…+ÅX.éÒŒlÀÍfY­=¸Ï/g~ˆs渺°}8x¾œ›Æyôòeð{~›Ó“wEöƒâÐùmFa$ 9²œÈ»<š÷o»+N&Œ¦ÂÕÔr­¹²º{ôRiÇQ)k£~zHƒ§o{œ±óC~sûŸ p¤ W±ïsÿÐþõ×(â¨Õ²«ë1ëõP§u 6ß—«9«OÛ·û‘ÙkŸ(9Ï9W øâ´ñ=‡÷ Ãç@í¼£¾ã ¸žrÀ 1‰ú“s‚çšÄu'˜ä{¶>”ÊìÜfvÐLa0ÔÎ!ïãè¼&\AÃö:ð–qbo4·†ê·Ìw]z†ÕŒºÕÉêrf`qû¯ÎòîÔÞy­‚~ÿ>8ï™ØËÜÝ=Êí°­5ønE¥$ãÞ¦}?¹ÚÛ#qoá—Mog´Å«Å@¿„†¼pG<ö¬â'Øã7opÜSÌϺ3p¥ÏÏsv¥Ó»mgú${{f3ÜQÐÞA½-œo#Æ}µ¡ï¢®{Ö+àçý;ùÞyÓÇo|—çr=KÛ¸ýÊ{åâɿոä*»9~¼Í®ï¢%>/OŒ·Æ^ÜoÔ²gÿ¢x/K–î+22ûùç†^s´Íß‚[rh‹¯' žÃ ûzöÆÝF*ÿ8¸¯žK/JÄñy‚3!¸'ÜòšdEC?—ëw%àÞë±P+æß¿—Uk(vô-瘕»   <{°rdi°.bñpÀS‚‰Ë\éØã~uU€µà\™Ý/ùF{@3x»Ø³çs« q™±Ç4ßkj6ËÓ{À F³Çÿê6žuaüx—÷r2ê¤äxõêóç(Ë54?ÕÖ»kÅyþþýÇs=Þa2é0wÇÛÝóC-9ǹƒø‰Pç„è90ßG"™{±Ç¾”kt¯n‹£öœà¯JÜyøÎàÎ2†¬Ë¸_×Íó»l{~Žlõ:·œ\Ò§Â3f·Åϯ]<«\ÑjÑȰîZ;WU•·Ïy¨„Kgîù³ô.ø>ß°~ñâË—HY‹}ÑÓ©‹‰9üŽÂÎ ­á½DÌÚùx ¯B“¹ƒþ ¥g"ÊGÞ gP @óT”rÅJÆ­½ €Úg5N×’ó=ûÒ”6tk_­ó>Båù)8xm‚yZ>áQz%“)kpÊ6úß8öŸÑ+Gê Üç@ð5äâ4øûÔÇlQçÀ½ÏŒ>¼o…p,{¹?Ö>F{“=‰ËIx´Õ-'Ÿ½"gèæz8¤…F€~aèy-ÛWìúÕðÕ}€Y©Ì]â–}Ë¡Gò³;ç¼±ZSžŽÝQÆÄ#2BLúË/™éë6îj+pï²!Ó¼Ç#‚Y¯/Z0¦b†v¸üÝ’¬¥Àìc^õ¶Pè2Ó¿…ú¿þ+k…Waw/¢ëz÷@†ó·Â¾#ø½B‹ÕaÙ]>›î7ÌK½Š Ò#¡ïåîG)«¸‡¿Ç-å:wIkðäÊÀN<}ï¾Âàò¯p¯ |ŸœÛ­ïÅä ~®­uñNi<Á‚;.l½¯#t5¥°FFð˜bŸ‹ƒ<÷ŸÙã¶çÁY^f{(|G˜î=ï…à{öß«rE1Iá_¡µnÐòj —©¸c7°ÖŽ«Ìãü8´¹òg`~tÝXaðø);~n µ+ÏàévnØF˜Zêt—kÐó.‰è,/Œ{7¾Éî]#;B‚þÕ*°ÒHõAÆ_}ÿ>†#cR°¯öä¾R¯}~ýîTC´½~‰†ûj™9µÏä­^óÞ;.J¹.cÈm—aï­ñÄ>p¯ç.VΓò¬†ù#˜i>Ëj¶^ ¸Ò÷3Š_i—4€ÈëÒ¾™Òýq’›VoïçØ?ý;Þ÷d•ªl›ÛÞèxþöÈ…qâì<É*ßÜJÆ@A5%¶—Üš›Ú?šýgü‰"ÿºÈ¹²U]Ù«eð®ñÐ5ĵö|iCüUAifÿ¶Œ³=úý¸ÊÎgÑ,x¾ûÁNëgO¡5ï#~uÁ¾xçA¿Þ{|îÁµ{-ŠÖù†x0ÆiTfL®ÕÁûë¿ë2~ë‚9 *Ÿ9W·w/q³üÛ2z©Çí]Ïæ_¯YèÖÚ–¹¿ÅÞïs‚À^Jî^Ÿs÷(ݳhdUªÔ÷ÜcÎí)}„z·ØË¯°@»ÓçÏ?þùç_¸×CÛ|ýé'ôš>Ž{Ú|AIì}/½ó™ûÑ¢ì­íÌÈéjÑþêܱJ¿ðw©ç:m»'Y}UB$VÞNî·«j‚{¼’vϺU¦ÿ„ü:¹—Τ|„{ýœDme„²ÕÿùŸ¯_¿|ÁkWdU÷{O÷õŠvÿf׫xæÁÓÕ F1¨¯ÝÄ/ Òãpeà²v ¸ïÔïóSXô+¨Ÿ ”"¥Ö£Eçm Üó¯åßÜ·PÜ9Çîç…3 €;†¡}füŠÇ’²òšà®×:š­‚å8xw'Ì‹õºY‡NúŸÿüùgèÔ{æ’óÃÊwÉíî‘“I8´ºd\_³ý‡»·t¦oŒ^7ÖóT^µö·»âÌò)€ó3zEš¬Øï›‰íºŸJìPaiW˼¦/ƒÖ¯²ïÓ^Q䘥ij¦íVôÃÿÎÝ>˰\IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/greet.png0000664000175000017500000060305313657750470020250 0ustar jamesjames‰PNG  IHDRþûòP¶‚ vpAgþûj·œ• pHYsHHFÉk>ÈIDATxÚäý!·-Ýr]‰nPÀ?¡  @L \ p€¡@ƒ† ˜ úo¼Ú_œõ²göÙãä÷Ý«j¯µ·Àië¬+WæÌÌ9GDŒãëþŸÿäÿyÍ¿__ÿäÿyý ^óIý;ßš×gß/î“ÿþÙŸý¯ÿëŸýÙŸâU[þéŸþ/ÿËŸýÙìÍ[ίsoÿäŸüOÿÓçxxlõÞßåQqK¿ÏbŽösäß¯ÙæŸþÓÿíû§ÿ”Ÿðìfܸå|2Ûó¯ü•ùœÛÿ³_^<6§ßó“ÙdöéïzKÒ|â£å'³·ä/Ö_¹üŸÅëͱýîwþçÿûÿÎÏ}­½7oé¿þó_^û6<»ÙÒÇSG^cË_çžyÌOþ"·¯û„{›¿Ö™òß?ÿå5[ú·êzÍ{?<ë9~~Â_ñ•ÝÇÿýóÙçïþÅ//—û÷ýÌ#ähó:Î6>ßÙžW¡¶÷þy<>¶ýîš=û¼x]|5yF¼»¸}=õ$Ö‹GÎc®÷-ù»{óž9òóù—Gë_á6uGíwßûÚñºóÎáöó ¿û¯~yù‰žûp¶ç6>/îÍOÏwæùº"û‘ø¯ æ.åsÍcsèÈ£bè8ïgÏ_§Œøë ‹ IY0 &¸çÞøy}‹A?C‚y1,1à& ­:ƒHÖœ¹?åà¯pÂAŽ_|œž&æ2ó¯uvœVö³64$”1ür®½öF(S¹ÉÊIœ¹âÁG½FÒg½gô¹ §ƒyH|e m÷ A'.ƼÖ3†ž¾}äsÖ\Ú yM9%yQwÀY™ÔÍ`85×]í¥‹{öu7L¬Ú¹a/Ÿ)—|×püÞ™N‡jœv™¹™»ë_ÿò2œš¿þå_þÿÇ_þå|≞Ë!áÏ…÷XÕ1x¦³0UÛCÃt/þ¼êZÞÆÏ‘ï¢Ús’z®)çsäQâïúê׈ŒV.¿ ïs•³¼y‡¾ÑÀûúz–s…°òÍܧg_S×" X÷À‰sæ¼8þ¾¹gnéˆçÂÀw…ïpç¡«Fáë¸gå]ñ¨ì2¯gßóUuñLÅßâ¹Ð;/>¿Âì;ŸAgå]·á2œØŸ/çÛ9Î9gýý$:Ôô1üE¼¸%ßÏÞxMyÖœæ¯_wRÍÓw¢ i*Þƒsä?Ê ¨!8¯OÏ쾫ÙÜÛž¹wS°’™6-*Óï11päø‘pŽm]8•‡öž½C|çû‹~SÀ^ñ(’ÁŠA‰ƒ´ÊæÖ/šÌàÏye‹Qyt~×@¿ ”óÁ;¡ÈÇ` Pu›"´„1c'«8Óï«c@VPÏO™!TÍEœ9Î\†9Õ4J8þ—?^ß0Ý ÄçÅŒÎ@.óëΞz áBâó¿ùåÅ%¤î^›—v.½ÎJÖËõס¦¯¬Á·ç1/áÎ;éËpÖ”’ªðžÙ3¬†§UÇ(z‰«¡¶àŒ°©/®ª¼æE8Ë«@Bð¼ „*£Y°uÏ^ó©q¥¥®Žsü¬xÞyäê>tF¶¡¢ÞŽWé=L{¬<†¦¼!™Šã³vì+;ó)GØwfNÞEq+ á·˜ 7¡ËYÿú«Y "š8äyÛõ"ÿ|Î`•‰¤ª¥Ìñ|1¿ÎEδs÷?ß²Ím ‹ zÖ6ü-CvÂY$&ö8om˜Îe†­cpNzÏ(ó[ª€ûïö`€KšÃ³—[NÖœ´8Í%–ËL‘OvbI±íy^õ-æ$\+ ç_+¨.Éy—PwòaŸIJEƒq®º¨&;•¢¸ÚæU;x~úæçžöÀÃàÏÙDÞ“œpg!ásÇ ‘@y^³¨üÕ_ýŸÿç'ÿWõ×ýW剕ÁÀ¿ÂË Æ_ýÕ¿ûwŸ=Ìž¹äx‘àâñÙÃ÷· ”瘹%ï¼^θóùå(VúÞp¦“÷Œß³"Q5‡¯fŸû¾ræÞa*ø¬j•ûô¯TF|®ãŒ6ç@ÂG憋K]úÊå›M ào1,(æãq×ÏlUZÞÌÅÏ®kíñ¯35@/"PñéÍÂ/j–Ó *L×ñœ¶¿× ¯¹u¦”X×½W4-¨`¸&lèÏЫ²øÉ"nÕ¸:Z÷aQtª[užJßìA ÷Ã_q]È!ÊzA?AÛL§÷ÏÖXrâÏ¿³%?7Œ&ØuAµó8Ýu°Cùúœf¯ëhÍÄåïjÜ7€öqÄwðS¹p׊öããgÀæ#/rŽ{ ’V&þ ×|§6Xw(R%þ½ëÀåà"Àwß°uï^x“Ý©M•ëõýP,ö?× XÕ»v>ºÁœA3Ž—?™øç{ÂzNÙ³Íüu‚„Ùó/ó.Îл0ûa8A(ï‚2?ŸoÍ’0ßc`–ËÁÃì Óu ^?Ý >D£ïaë_Þ^W}ƒ{ž«Ïî ’ àxø‰po¡ª ŠpM&™ñ¯{¬ ¡ƒa›S ó¹Ó€Éízþ•ÙÆ@¡º82¸ôhøJ9ì$½#Ïã4pÙù÷•ÇåÞ ]1¨d„›w+ôª rç®Õ8_MÏ„ž]w0ZU8‚Ë‚à¾ÓHkq0Pô'δÎs«¾ +G¾oãk§îðJ9¨¨`•U¯A¾Rh™$âdàÎçÈ &W¤}eoô“jÓw½A¾çw Jîª;Ï`ÀPÞïM1:eý/æ½µzîÕƒkÿ¬{õÀ{þ½ £÷€¤: åwÐ\½;,`×*Fg5ó‰ . ¤–ªÌÎt·B‹3"U9)~¶¯šûZMæqàç(î5Kó>;­ÝÓz5d;§î9!³)g ‰ÝPÈçÝd /\þ©fà‰Òà›[ÊÏ¿Ìë3$`5`þý¿¼\Tu&r¶g­€t .dóó9Ñ›Ó9ûç’éÅÉTÞœ÷HðçsgX™Q.>+pçóh9k9癳Àkå> $½éå0•Åá.¡ïŠê»0ÔpëvõEð^â3hµ(?_žŸy]Hx¨¦gïÙ™Îâ£W¹šw}Ó½+í˜VÄš[ñ³+sl:VeÜ‹¶ÇûÜíªu¦¾o÷ì¾Ùÿoê Eïqå­Ô¢*xp¾|¯!¸‹ƒ3§3ë®`8x«cc%–ûñ}îOœƒ÷_­×Ä•¥èd&õùõçz}Þ ¸E¡15ÈpŸ ƒÂwÂn/En®,x5øîlû7= •¬œ·!—(÷èçþ/—œ"Ò‹½iÞäb‹tôF/V:G¾úULš*©Ç"ÿ¸£À!\eý½gCÞR¤©ùjoή+¸óé ¸W¦¿ÞWÈÁã)¨½¥öPdW¹±x¥óâ&ü8Éâ3-9NwGp4Ün[°Ã€ºC¸gwpíb¬®ÿhä-Ð\lþ]wÿýw¹üßýÌÜ3ÇÏ*«†/ý¦1ø­ŸSDwÔ¯¿icu€Qð«Z'w¨ýFª²Úp-›øFR³´á+€1‘¦ê»°fŒ]x±”vø9—Þ]ƒ¼š§«€NÙÙ½vá÷†¦0¹÷ ”UJ\Õù¤ºúÔÊpŸ‰µä͉ߗ1Bmžõä˹ONÊ>Nk\ÌT;û7íaöæŠAÑxx';»_K¾»&*%AåŸ x¦á?þòúЄ¾?™zÅ¿ýåÅZÉ<n+¯Õ]%m«zWëvÕ+v¡ò.(ñÐ]}¿*iÕ.üæxœËܰ²¿®ªÛ±v ÷}.{Ëoõ<øø}<ÎP–ÎŒƒ½bçû,J׿È0æâ›®¶«íwu]ö0€U¦ºTÈT]†¡uß:(NTká;?ͼg`çÚ«µÚÏN)ùi“餒Xu=ŠßuUc>[î+ïCþŠ+¡¿îfXÏÖØ“-דêcbOíÂz+1»¯3\Ý9úoräEž)h^6[ïÙêîæÙW6}×ݯVÚÊÕDæQË‚Ýìx-üùu/<$ŠXý£rÌ¥)nØ]º7{X²›±òcxí°sWõq ó¬e§µ›ˆUë­i9šK•Å™~ƒK3 =ÝóIš1aöÚ÷¼ÃuyÝá-j!!Pvèè4î#ð¡}ƒu>ÁÆwsð¼gƒÏÁÍéw1q!1Ø¢à¬u®êþáY›ìaŸ5Ëý„–Ìe¹4OÚ÷§ïáʯ›ÒCZ™×7͵­=xN+’F©•Äa…gü-B×ʰÉÇS {Žá©ùߥÍR=BÕò¦ÎSUŸ—[x]=xã5áà¡H {n»ˆpž»v•!uþ½§ÅÿÒ% š×}Tó- 'L;pr'À}Ïß³®•šî o×6Ö#b8WEO29Íô”ìäÔïü+‹®c¸Ï€ao öñ¸ÂP6a;9§€õ¾]ÚføáeU =>n 5ü²–Ð÷aéVñãû2º*qCæwòƒi9 !,ÉeÆÄOkiœ—[B³Ÿ8Ž3»ÿë®bþ¦i˜*CÎRïºì&ª•úP)UUÁ­œš¥T’‘îi©@wרq6½Ú£÷1ôÓm]2_)ÊÔY0åáì~ýú¿ÐËu¡"Ƹ.gE,C|†náeM£®ˆC8›…‰Ïï@ (óó¯‚ÈÖäqèÇ/}Omý„ã¶£2÷’ì,²³ïU pözל1üڕŽx—3ëÎnß­»*/[ÍÄ{î|g«ïp³rÃÞÆÌoO VùHÊ·Æ„‹œå,wj“Ùóæõ–ঋ¤»íW©æ×þëËÇ·´ù«Þ²ëlXûÅhçÔ`WµÍ49ÃGÎ ¼£œ‰1 ·zXI;«í‰p™£Í{læÀÉs[Þ·Ò3}ÛI½Î¨È–Þ¿5Мœ_§X$Á:)F T8ÖPòó»7Ô<•íWIîÍîHìj*~Ϲú~Ki†ðøKQ§úÒT[­3Ür8除Îkw«5D®vÞbÛïÒ±EJ1àöÌ\œ·ÒÚ;Fªzot.}›Ýì¬p‹êV¢‹£Ï¬suDìÖZ–X ¬7IÉ!‰Õ¥ö ‡¹öÒrÀæ;Î’æ´ñùúE»«Ì]b E¾J]ÇYüj½¥/ï¼7·Þ¶Ypuæþ ¨üE+r›Ý.NçÜö®µ_ùþ]ᾂŠb-W®ÚÛ¸OÀ}æŽïùu”+ÀØ-cvoã½ÛMr–¹ô–_iç{ú®ÒØq U£Wྠ¿JÉ»Í~uŠCïú€(«ùÕ¡»ŸJÏ ­¯å)û§C-;7|/Ð)‘ŸT`YaÎ0¼gHrû¡« ªfImò-yÌsñœi1Ÿ5öðNf8aPByº pÏsuf›ßÿþw¿»‡s÷¬Ûåu@ÇWoØ)Q>6fòl°ç2KØÑ™õ2rËfe‹ä¬X°roÒu´Ç,ó]Ttoó5tã1ïZòCÜᣃ„ê1Ø›†ý„îÛì «™YêÑÇVïüy¼J×ÈgdÒÝnVbš–¼ö‘w¾«6´ª¾”½e¹Í”„¨¹òÞ’÷'·qÎå3±âÚ…ÿ¼R–Š>8ò:¿Î¬ü»ù,»Ø½ô»ÀT”Á–á»—«Ý›Ö¥v÷ìÆXÖY/åœ2ÉÚ)C•·.E ÊñnVSi}R9`›1Y•eÙ¬¾‚ªBìYçÝÂÝÅÖä¶g±º½¥®ª ¢Џ ÔqRÅ£á ¥ ÊZñv½|·0zÁžßböâƒ0´¿ª:d6§½où‹U"ØróžM7íÇI¢Çp>ü乿·d½bþ:çUaÆÞhËÏMÅñ¼í%ß½(?´ôâ•bÓðèq±™†cº"”ë°e9KóN 3ÃÞ>î ¢Û"Ë4pw°v*Á-¿6¼s³©+¥[Â-˨hšå!º‹~¾‘Œ,ÅžR¡)`WÚ;¡Þô ÖÏãþ¥¢½iJ.C«º:Õ}ÁÚ ™Ù%4éû¹QΟ¥Oïûß䨽e¸\fjlRŸ+RZ4–³,*އùlcxÿ0 aU~\C`:ÃÌûâÓWàTD#3¯Ç=`ÞÒz>·LÿI@“€ûÊo¹@Ì¥ÈJ&µëîWà@‚[Ú7·ÔrÞØoíªAÎa&–{+=õy¬d²ÛâT(bïÞZ2ßЄªP­¢EŽ2-§,¨ 4wŸàè;ǽLˆÞhã”Y'2 Œî:9•¹¯¼þÞòûk÷ÀÒ ü/ñªæ?ŽÀÝÏûÊÙ³6èf8¶u²ñ±š29­›ÀSÌxÓr ô ©Í¿×žµ[H‡è/¸¿¿>)›'¹ˆû±Ù™¡ sNó/aýˆ‡rÌ©÷OñPz!³TÍ€³cHŒq¹Ünµ!.8¸5€³ šC…; ø~Ù{»“ó¬òv/Ò7ÞÞ³«‚oŒr à\]¿Xä%·lV£j5ªnå4¡ÈŸ{¶¯«Sí¿u×íáïv‚Ô©†ù¬=Âüu…Ô a7FûšÚ2ŒÙåJ­Ïã«ïú>goS¿Õ Mª!þ{1M;Äûnäµð1P¶¡„AÝÊ\!ßWYhy©3ÉÇ`”A‰{Þv¿§¢ÕñX=¦Ü‚ËØù~çà (*µ£ ˜Ù½†Væ.[‡¡B)ÞX›Å Ù@Í[Á&« ¼é+°˜ãÞPM´o|wû­ªÉ˜&´Ëk¾i2.EÚÿî`àjOq‹K‡§®šeö6 m¦BafqTïñh?¿åÆîÊ¥‚bØZõ7׋̰;¹@ä™2´3-Ž\ž=‹Êâ&Ýêp¨JE*žWIaèW†{çÍd†˜Ç°·±ò8‹¶äqæìdÁMþb5ïDëAy l+Y×®¼ ø»¦¾˜®ö&gO(løk.¾AöGÂøI7Ý+®FV€QÇ¿7×öå`Àšvy÷ò˜]W´Ä-ëÉ^5”)Ÿ]\¿©0£l¶Ü9àEzW©74wóÆ%×#ó^Û»«Â`9ÂjÀ-3²~S´*×â'~ÎôÛ)üNË1…òç/‡ÖÎ7ÜŸ«ðÉÁ_°žÃN‘øì,Nê0Ãó¡Åj}Ö³ÖyÞiEW%Á ß Z|ÿWWŒ[~ý\»fxêªc¹ÿîÐÄ:ýží$]=B{ó¨¡j‘pÞXöFÒêgðøØépe@‹šøæWxlœ3ß©LÞ('>/kXÒÕY8g_a˜-#ÿ"^±X94ßÝÁsÁkkRÙ»w‡¿Ö X?á¯xÕ(§»çÆ•Î0¥‡×Ú¤GVO)•kN««auãü ÷pÊ.6|QbŠ´7“ÉÇ…ï7}ƒ3ãwåŸbú: p}Ã#fð½ëèÿÌ–ëéšihÈWoL@ªöͽe¶´ÿ‹ÀSò—Ÿr-( î…Í­·E’©°Ð!ŠýJw€nÏ`/ÿöߨÈ0uÇ•³M•©ÅÌ¥ÞÉ;,ôY‚q4¥ry·<6 ô¼D;ÇCÖ;C¦»É`µê^°õTxjûTˬõ‘8ëþ¬Éøù çX…=ª®X|ÓtJκù¹CGϺnÚ+ 1rpY©¸[•]÷0ÏÔ —j¸¬D@ñ³w%¶#ï.§»BŽõ ÂîŒüÒdÛÕu|Ö\S/L×|#+Y¥nv,ý¢òo6ÅÅcHöù.yɹqo•.m«ãsϬ ì¢V¼ñ½W°¸ô¬ªõ¶\TÕˆçNH]œÕ2ëZ 3Üe†åcöšb›ÈÝ‘·ê>fëëÄ{|vÊÃ6­ 7zOAÿ½ü]j?'¥ç§¨ß{éò«B‚ªKÔû[oàîåy‡ào$, ÙrçüîîQ੼¼JT´zøÞÙâÊL¿9žU¿÷'ìš?V1ª&fÃÍ¥PT-Ëul6o* þR¹1„-’Œ•©Ìz·b•«U»`(Á:çgW\w’RíÙU ¢Ü” ·gFœ!–g’r‰v/‡Xnvhç³.%Öcý-8Z!•‡#ï¹™ŒÐü»¯F±½¼[‹e‰ßyñ(È^d!gËÜ··ðrºß•‚œ“#ì¨dQ† ²÷Ä7D 6-*­žúnâ7™~Û››0SŒüÒŒwyÔ äž›·mP91U®-jC•—°­©8™HÃ=[œ”K—Û=™ÛæöñíØ:Mf¾ ­\2EÊ™oþ¢3ý¦º™Ø3á»Ùü¿[oµ¢÷EïÙ¬µ¸»xZÔ‹{°QsWQ‰LÜÚm}î;még]Ϻ Ã.Àf6¨½¡h–Ómå¶] à0<­vÕĘL ñÑ–N¹)—÷gmij‡Û4w/Xçt+à1‘‰Àz×íñ1Wu‚ùu_q_—]í§ÆÖpœïMÈñfz˜k\ñ+kîð ²ÎueM€a]nç²û™ò]Çgß¿å½U ÁÔ ŽÉ®ÌãûÄÕªª<””ªÄ¡”•…x'ü0ç*~|éHìšÖìgýîÑûÌóqi1h6/¶Üj £È™9ÃèÒù&7,+Ý"ÌTN·4ˆ¬ÒóFN´4«¼î`c÷ý-÷Y—Î]?)Zˆ á £wûêfhß-ÿb[–Hhñw5$; X|°Ì‰Ü–mN?_¬û±Ý³tQôò­ŽbÕÓÜzk)RŽS ά3ëïðfϯ7¿ÿlzÅ»Úßzã•»³ùù\{ ßàl=+´ ÏØþ®?)³°7¹º, 2Oo¦/—ð¢£8Í¥ôj»9÷ÅÃø#Üéä…Ã~‹ä%Æ<ã:6ϨUIØ ?~9,)-#CU“FJý}7JÛ½ØpÕc`S_‡[»&ŒÏÔAŽe4ÝjìÚ…ë´®< »ææàvÏÇWØãönç¿Mä«°„}MÞ3ï» ”ÙÇgÊ*ŠÈ©+ç(VQž¬`ìmÇ_fazᬜ}©÷X§=ËTËÛ8÷¿kéh.’Æž 7);w×:ŠˆRê4Ììfau;oc%rWWvoc¿/Ö~q ýÞij[9Œ•‹p5%3s\ºò¦Ü8¼;+û,ì7_`½<‰yü<và”_²Á´C‹½VÀ6Yùœ>䟫§T›î„ØËyÀãÉñ/ÁPN–Áð‘ØØŠIå p³w©e»t{ ^›\.’^TŠo 3Ñ+qæo÷¾­€ÄwçÖ×·vÞÊÍ¿ÑeçâW­½ü–-ÀÊîª@‹¾Rªðžèãw(c_S8œ_Ù¯B¹ÏZ"³Ô„L2Õ§ÔŠê¬ß¸ó¾§•ï£+Nl`_aë§­”öj˜sÀŒîaÒåÑQ#yWK¸^œXGËÅ-h{÷‹µ‰aÙ?P羋V¥rüEeq…ÍÝ o²û<îr× v×wßPt*˜±ïA¼»ª¥ØaFµ“âX½ï@?³y¾‡ .]™,L5ÓÛj­(7Õ‚Ì=°æVT;|/‚³•Ei°leq¾9&vº½»8?͹,Öé@¥’GÅÞ61Æ9×jó-™Î7Uˆ"t•Û†;Jð”ùfÞ{ÜÎËÏ‹Ìã<ƒ‡aEÜò¸ÝÉ'wŸÇ3ÇiqL›§ñy‡ïu ÷Yùý~ñ9¢è…ÛµyÖ¤0è=œKp“ÝjÓå³»KvÅÈ6^®<8äpà<ŸsÆe˜UZF»G/ÃçtßèÒìš3ÕÀZ&V»Üd‰9îÇVZ×¥†anw5ï–â I)Î0Uî¿êÜ›¯¦!¸%üìlà³+«¯½¥ØÍ»8üy©ØkV¼ïZ(—èáçì®çÚ=*–PíÖc܆‚e”h,%ÏÌ3y1#ègKˆï,¾ç½SïÐÏÉB{ónýë§»rçά›£¿ShömvˆªŸT;²Cç'Vè*ˆ=hñ¿œ¥Y”¯'´4þ=£Zվ̭*SK \¹®¾¯T+­_ܾꄄ\öv-m®ª8à1l*æte ÷÷å3ðÆ)¹Ìªjÿ;ƒßD,Þ‡&UGGƒGÒóó~îmµÕD[=î-)H½7ûÚèÊÝ;û·Ø&»7—O°ÛÊYÁpá{†£jéU‡R–-b©Y_ÎÌÜ[Lsçåï¢r'#°Ë¢‹K…Á=—ç¿ûåeb@ICîœøêRx0ì’‹U1Øm³vz™ü×"´0€q¹Ù´¢¾ÅGwÃi¥.ùo¹½Vâë ¥=Àà™Y"§&D¹ÎÀšÀÖ]µ°q9𼨲_M®²ñÑ"ª|깸l]\պ̙v–Å{sÛVAK§qÿ6³s­­¾X!1™ÇEPÙ‹ mïj÷ç&W‡ÖÛyÓ ëšÀ›×Ï:žquäÕ¶nu ªÖV ò’zŸ‚º¯êY6•ÎïùÔ[…ÝàÕáAåø¼á£›#^ŠþÖJ/0ÃD·ÞîG[3[´™[u¦yQªØ>ÕiPuƒ<®)Õ\k0ú¦±˜‰¤Ê²;ÇìÀl¯Øøn¤2Oé2UKAy3æ÷ëh8îûmBðÚÙÝÅ!¡9Ád†wÕ+0ØMÍü+¼—ü­â÷ÿàô›ɦ4‡¦÷”9×þI1kùI›Â\°Ã aiõ|·nôû¶ZOúEø)ÍeŒ#ã=ïYó8V/óRnZ- f|ËwÖüWgš |«§b×Ïq ¾ÄõÌ÷ç{€@Ü ¡Ÿk•Âç¬gû1¨b=ʺ.n®Ê^5CÛ¢ëgÊ9äî_sïÿÒCë¬üY!çM¿*®fâ¿oS.暇k ÷.#ï!»Áð~¦û¯©/¬íŒö½ù¾øå%³[©ØŽOhè,¾sÉ7oÜŽÝnè±ò à³#TªPÄd•²‹*çÚ]ÓMÀ¬ØZ±Â!]¦»ø¯&,í!¿µsôh™ŒÄ#w]¢ÈT{¦2ý¦â8Ü}ã•[¢œ„é\}x¸O€Ýb²ü«=mø[|¨6æ£Lß*Äå³ðƒÞÃ\{eë9ÑŸXò·B…;ì|æõMËaþ†dç«öÿî¤Ë%ÁnÄΦ;WºÓ„ +Ë«åwÂIõìŸø8™‡°4¤q—-aÊêI0¤öÄT’¢?ÕUØM²L â2_¤,/ÉVïÞÃw¸zÀ…ÓªÒ>/ó°MàáÑšlWf:–ú3ë ™\Ö´öQ9Zpš›mîo€‹§düs¡r Ød>¬¸×¢DŠXRêþü×y}'YÞìs‡ûEƒqÐâºë{“8`¥ÌƒŸ2Þ·û¹¸>ÌçËà’¡]Ñ.N¿é¥IïÜ¡9ßN=¸ï&Sr:0ƒnÀWdC"ÏEnú't3§ßYsCí}ûê çô{ÂÏž«Þ‡eeyæ0 ä\«ZÂpŽW«ËW·‰·ôýfM›Êå¿i`­Ì½•Žv½ÿ7â~9rû¬iE'eåÜê=»åVeñÝýRÆaÖöùú‡þlÂår¿A³z‡›î¾A ´©'Ü+ ±sЭ½×uÝ^NºeUSÖZn5\ãw}ä•ÑÜÛ‚wXü¦°;þ:dr‚!ãnªUFcö²-rŽóˆ»jS);U«´¾'z®'Œ8yÍdħ˜Ó™ï/xx­i×gdàurÀø~r½Lr%|ÿ«¿úwÿî¯þjÀý„ìOàTKpO¨ÄQ²–kv̵„%+“{þ»fÝ9¶´óNô¬ÏSйý[~ÞP úþ–WŠ}{{—Ö“DE#œë2w—¯µµ¤.:à/;¹¢p”Z—s·†ƒ¦íykë_r~Ucñ®ôÆï–5‡Ðu †D%\yß7FWÕù³«Ö8}à:Ã~$5·;ð0µ£¤* èy<0LJ1¸gåÇí¿5þ¶Ó2é¥ ìvoZk%y´gàK++ÿŠsðnÝ"LØmû-ëúóÅ£ª¾‹"zqä­_Ä–ß›z¸Y­ÎëW`F~ux‘c‡€ÛvÉ—5‘¦xüÅÝ/ïØ ÜøèàÁ°øMÓd)ó”zÏÞ±PГîþk5¼Wé¼€þ›Üÿ]ïÓ=û'orœù(=x‡F¥ÁoU‘µ\+(ÉÑí8P%g‹…#@®?ÏŽßr ÊÅÏ=ž:=!ºzcÁ»Ý‚ ê˜ÙLÅ!‹3Öl²Î½="v5újŸ½Û~mÀÚý•½ÞA°Uðw"оå^U¨=w«î¦\´+í­Òžo©¿äš’éjår`^¾k&á§@§A†mþªÜ_FQVjçŒWÙßœ™ ãë½ÿ7¦cI® ÉgÏÇ» QZC•?¾ë¸Ï3Ûû}­ ‘‹;¾g÷‹Úä^‹ÃÚ«²E¯ªž&Š”bß½ Ø {×yü2ËÿNÑy*ÞÔ9ZfÔgQí×®N8˜tPQ{cxæ§Ï$(ŸéWeôO þ'Ü/ƒ× øùÍ{Ú{p¯êÄ=ظ¨GeVåºA©Ë•¶è1ÌÚe¥rê^ÌJijÜJ hïxCª<3Áy^€ R›ŒDâsçu¦Å§¯þ r¾}<%»éj€%>«»ÂTA>éFúÍà·Þ¿åìã[¢wˆü÷÷Yúç:ý>—êØë¿U›ó$vGDµ>³®âÁG'Ö|3­h—*."Á¥ùÖ{ÝöC„J|ZË®ËгŒö bÊu¤šæM>Ü[<Ý$j˜njSsÁÇ"AÌõhx¹VS¹j6ûVÖÜÙwÖ|´&çT}€s¦·7OÝ”÷w”óñU ¨¬v¼=LæáX±RQªünÆ-‚–mMrä.ßy%ãŠÐEqjSª*²¥× ô»XìlwM¸óþm–µzÌòtR™ûÇïÌÍn«^Пn«}“§/šÒů¦[¿7ܯs,}µŸîýVãùgëËí¼%WºW rªºâñ!pçµ.U"Ba·¢–D)ï7g×l7æ® ;ûZ‚“¹y‚f›ñ¹c^Ê W \zÑå‚aLTpX2Pd¼~ç=‰:3Ù SŸÔ96xæ'<ø¨õRóÆ'­ð¬–ÜYÔ×LÅñß!ì.=iÉw+™›¾kðï <»ç›Ï+›îðæÍ¿î^p·€ÇÇMõQø8ɉ·mYõ‰ùéØ9 ;˜æ0O·ÚCM³±ÝRåtùdí <%Z”n_ä‡.¦åXÕóIeÙë8÷‚»€¹Ü üæåkw¢ˆ\@³²Ýiö«PÕ æ›9ÇVך=÷_NÌL蔯B G„u»0!¬ÙðvB°>›]ríáãqPTù~·w3x+úS wrKfî âéã[ÿU?ù2E‡½4<{é*î~yúšéüMÁý%¬ü A| qº4ïJ…!¾VK]§¶yÃæß›Y+rvsoöq¾ÉsW5Àð/C…1.8š_[u çàËwÜûÂo¢Q…—eäie>ëú“+iE,i¬hdÏKgPœAdk/';ŸôÉÖ|§}‰¥Ü,XÆý»ñ÷gŸj6äñÏ_ÝJ^³t÷9‹šlã=zÖž‹|R*=;kŸ€ÛT½bØ¿ -ê,œ<º_—+OOJç›.‚Sëó6p&1µ È“vº¨`ƹaÏ?Vg/ÍÝ–Ë Õ¡B©€ÛîЂ’»)’3»f0{1ø+—ò u­£ÏEz±’únûERDqúw÷ßr™-J’+$¥#dò ¿ËÕín^ös¬>„ &뺾PÞk™l¾æàÁÔóæýÞ£ ™õwS¬¥î.þ¢óýÌú,í …{þ2ýÆ"Òœ zžÓk}‹hVç½v¾þ^Ø¿ë™ÃvÅÀ4›Òò7±go]Ýüõ¹C‹b«°Þõìwµ~7±íLýÝO·¤H«"±kf;d2 Ê™ø:õ¦ŽáW©9ñNã¶+ë³Jã¼ùëUía€j¡§3ƒ!òéÙoÀã·âÀý9æßÿþw¿»W¥ äp zà±q…ÿÞ›t/o`ÒŠ¾RDYhý,²iÔT·•3è>ÂRàa¸È«\p'2½Q1zcRVßÚáS·Øu¾î'qèèVã7½Nrí³îΖ.Fþ. Z Eåmbæw©©ì$‡j?5h+ö¼åƒÝÎK¨ê>ªo˜>T—û¹ç˜Ÿ9{UQDü‹»b}õl”–‘Ûy+3Í=0uåcp òîó`oã½õÖº7ågì0©v ¾MÑq0ã: ÏÅ!« ý¬žoSÚGÜôL2­ký­EÿáªpÁ ¬/¥æW¸ ßß?* ¸ï”ž²³@Ï_·¹’ÏèM&Þß-¿%w]š=C¿ õÞãS £••71ÆÔŽƒ³>eheÖ©söV¹®ŒÚ~]Þ„œþÜç`^¯§]óø½`— P)c¸êuïZùþw¦ þºs«ÌF»VàeØ¢½öÄ`»$ šœ(‡ÆóÑÔÿ¦ëpòbà*ܽÉòI/4ûDÅyÎi„n7:Q||έ®EMqB䟾æV¯FÞ{Às4¬÷oÊ`ÉŽ÷ãy >NW†wâ½ F²ÚŽyOZö”BÎH§pî,oêJH-ç·šUnµš’¢¶=çIÞ3C;-ÇA~y±ó *‘GÃÊ}ÿ¦2*-v‡Ö›·®‹+ÅÔ·¨¨®Дª½Uç½%3»”*f¶Õ­ÀΓ"Èc¦”‚ÓI¥]cv¸ÇpWmrãñ)ÚUyW–ÚgJËÏä"»±Õš6! ¦¹7ß-|F(a -ëó¸“Á´×gò¹g€Ÿ“æÊsÙÛ ËícøUôO—†àµ,NÿNž©Š¶ÖÕy²óç/´<#C½òÜuT‰¿6ûn}7Í”ÁScJYox}O¹1­âMî¼(CÒ˜këeÏž¸^½ðWÀSU—Rr¿Zß|5ÝåIß'> $c0` Ü©–D׸¸UÚ —F/ÏÎ||Tó¿[q‡»O÷\/!¦-턊ÓoXàå,[ýB¥u³[–GéÓ›äÞ!ËïZHÀw©på°«•ö6œ¡?Ÿ/÷6@ß»JÏç.}&,ÝïŸg˜wª!<†J9ñšr¾â3bÏ EæyãëvÕÚ¾_uYËå g½=.q̆¶†•ÎïÛìZþûw÷½½i vH`€[ºE‚r Q㶇®xpÿö$ÞI>7ø:<æ½ä~·Ì2;Nùæ½y×ßÚ °˜‰7åæ^Ó8SÅlð[¬»ï¥îpgú¤°OËÕ3[_œT+ð8ËhêâúW+­é=n!Ý»õ˜«}Ù{+æzq²M ²æÃnÿäÅ{WÇß%5 j OwÝ}³í¨<9V°çèî `žâà> *nV³’†ï17Ïí¹ù‚ò¾÷\¶.õ'ÚÖT¨i éëE˜b½,J2T°ð_]»rŸuno&›õ´ÊªEÑÏÏ×ùcÃGgawùÒáq‚£*-¤ÜÐB«\2fÚµ)•“&t¨u­ƒ{f¸å&ïÒ^ãè™Ë~"Aùß'Q‡!" :ûî*…þŸ)ÿl¾œIöªB…”¼Ötæâ:5ÀÍÝî'Â9ÝRosÎpb7Æz¯ácÈERÄnäTšýeÅYncÌ¿7[ڙѢR”¾ÐžÉ61ɲ‰<_¡³àÅê.LWªÁQeÎU9ûrÛu­ÆÇ@ÿ“âÜ;Œq^ßl~7õúêðN+÷‹WVÃ+á¸)ÄlA6Ë¿Ig|ìfã_çÓç{Æ_Ìñ3äàUãq~9/R ^)â¿ùVC Öœ•eØî’k?Ú¢…XÛÇÇYYçjêÝ5|xŽï Bż÷Yì5„Òê1Ü÷ùL [{«í¢ªíÕ°ÛÇ鬿¯ [„«.aþ«ïlx=qíšlYCNwéÉK·„ÀÎæ_1æ„æx<Ú®ÎÙÜíVÓä‚me N©‹öL(y§ñ\rœo2ÇîD:塟Ü3—4×Á9P75˘ÃNëåYîL¶ÇvgáWhÄ@‚€£4O ÁgàÎß:ùŸû*t-åMU¡úÇp¾â'åK]¶A®XËųYI ¾”¿åm\É4¿ªÅ“¶u—Å=mq动U\Há([«Ò6©OCsKߌOG‘—JsÝzJ„ÅEXò5åœìÊíù8yí*$3½ÄÞ±{m¤ÚÇ+h© ÍMÕÕ¢]R¡Õ«P{s°ZêO¥GäðÆaOy>Ü‚P]áÄ—KÒÙ‹Óï2뽜}–òtVÒº"^Ù`çz‚Y°¶+*¼3Í÷_tÀ¹°þ'zJšÑ¾»¸R±ÿ[¹ƒuç¡÷|ÑWœg2yÆjôv²´f޵bJÃÇ—½6²/¢;ÕÇõŽ'Aê<м«mÓ½‡Ê $ªûżps¾yä3L[-—ÿ.µÆ™{ºŽ¥Ç8í2œãâ;™£aÊÙ¦ÚjëýžÓ5œmÊÐÓÔŒcnR® Œà'•ëu· !Î|—ÊÀSl‡4–ïdPÄg™5 'Mª øúU…h˰§‡qÕ|L©òhðsŽŒ…\y­íÕÊ'Â$;8ÉR„+ŠëλÖï’&8¿NPn ­23Úý\ͽ.µ3îEO2·ÞÄ•¢¾ìÿú·æêTŽßðÑuf|¹.ðÈK{§l§ØÈ[Ö^—¨¿ò=9/n¨íØü _ÅûçÝëí}Fºœ›çx–/¯÷oº¯©-É|´U«¹™s9¯æ¦@ëL—w¯Ô¬Û³—Ñ]=¸»-^Z%;óÒ |æ×î2‘Î=—¤Ù·…4³Ó5ÌÆU¾Ùà¸F‹ˆRŠ7^œ*×ëê;|Ö„Þhüûø+<ðÞ\EqµÄ9Z«•ײÉ`E¾bAÄ$kÔ8×è¦sƒÞ«œø×ú“ƒ/IP;Œ:+9ï-¾I’kÖ”à‚çP¿ßI‡çù×êØå#=• %ï3¤A/µ›ÔLÎØ2œàµ¶b7+î1]ð·õ´74û·J÷zïmð‚Ä–>g’X¦÷óB: ïÛ™0|ß™ëOîy æò)ØÊ…íÃTþÎâÛÐä?þò¢…–§6^…ÙÆ“#§¹"ò¯Üs©~ñ¹+#ªå»çÖÕÝG¢ä«ÄÚM¤Z1˜©P³’YëÜ¡FÀYmÞKæßÙÌöd'…+ mõÃt7ìZ£©4—Þ¥ÛãµÌõ¹Ï½Ny>áLÂ<(ïáš©œÏ¶8²ï+ÿƒÜ€‰Û3'ZfLV°!œâÑúHîĆgv¿Óf|åõ뺃 BüÒªgZÐôž *¼«1¨¨Þ7UŽ ÒXk-Öû¾ç2h«Ëße¹ßi{Jßw ï îÁDšª½˜Bc;-ÿ:÷Ésa¿DiÜU…¡Îšcx˜Fͪ/™¹â>–ø&Š3(»Ð'³ûθ˜c nbƒ™ˆ4ô·V}Ù¶—›¯¡¤«ÎO¿!ó” ä.µY¹Æñ>£‚2ÞC5a×þ пÉô»,^ù~“ª“Áö:$N˜Ë¬†…eËmš‹óŽ|.¸ØðeG@³]=òÎð‘—ÏoÊÐô»Ø«Îð9‡Í°ÜEÿ]ig—×Ü! g¡bóÛ߀þÍlÅv~ÝÕ3×»8>n}ž«ÉÏ]iá8;ø'‘ùì[pÍÓ׈s»{Þx÷¾¹Fo™<‹¾×*yÓê(2˜Uƒ,ên%‡%1lèV|zS‰Üðm8hÊ%Á‡Ùäfí›4bH÷Fú³j†ªÎÇïô›b{P.z‰{60t¶@õB”¥)O†§PùŒÜ'`bI‘¸JÒt·Ð²²Eÿ®É?6hc†Á¡k\œo0”ÿ«¯=—¿sñíÀ.8 †yÉ@ßõ„Y) žYøžàÌί¦^NvüݳøÌß“ØðFc¤ô|îGûÜÛ.0Z°Û:ôoÀîî¹[ú6œŽß¸íÖûbºWën)E¸c輟©¶=[¹“‹Š£ï¦« 3¼‡ªN0Gë…§L¾x.ÕæÈ)Ïî„û¼¯¼ØZPÖcd42ûÈ— c3}XI€‹á~=®¹aÚ R¾ÓH,1_¿ÀŸÕñß(•¹ÚYU‡|ʼÌPcaê-ý³ìýõ//~>B¨,‚›G^Ž³Î WvÙg]žèÕ¼ñ7ÙîR|ÊñŸÛ…‹\T¡»Úù.²—E°‰©ìWaõ†5VêvÛ/Ï]nÜt»§ŸPÂ…=ÇYyzó˜Ë/ÖÊ3•óæ<ã¼r©Ùú—s3¾ÕVB–eªå&Q!«Æa¯ÒÕ‡gjPëœwåÂMyª_çY˜TcYIÊ9˜¾²÷QÔµ³23â®Nï$.W|­Ý’ËtA93÷|Æß¸¸ï´:ÿ.'¡|)äT«Ÿ[Ü* °Œš¡¿Åæ +=ýU͡쫸Œ¹‰mçs—§ï®ÙÏã·ÉWÁЂï>¯¢¸˜ao½öý, eJ-§üv] S ŠÌãÚ!µÙ¼‚n{²âPuP¸)¶œ¸`gï;™0‚ÓPQ1T ¿œç[úQör63Ðv d®šyñ]wÜùòòXí†ÎÍÉÕÍ „S'‘Çë=ܵY. ÂÅá:·ÙÇOÄu ¸§佑úûsþË©ßÖ“çÓËÖÏc5•ºÛá}=¡®»ËÞ¶\,ÑŸàãÿìNÀ s¯!ìÁŒõìH„qÞs¦ÓwÖdÌìg“w©­WwŠn߸óîªí¥_ '»Wî}ï¹$8÷€‡ÇéY‚Ÿ[ư•’‹ToCmïïúÎq®½Ú¯‹~ãñߥ(–zÒ]Aî µk”ü¹óåA0ì„"Cˆò—`âÆ5„:ëªÏø Ÿ™~O‚•7ˆgfˤšÊô³2à†]çKüI9Ñ}¨B”",™öSýZJ-gzF…O‚÷‚Ü»"ü”Õ×^a( “‰7„ø|ïç öÚóñÌ@T(åv:n“2æûnlñùbÁÚ껀"­^üaÆ?;˜Å'¤#§ÿ>]²Ëlç*à §ó‹&Åœ™ü³ƒ¿]«ÇÎýHEéaȉ˜ÍµÌ‘—?û± Ñݰìù ÿþdöìàÊ~,(8|rE…Þ¢n(¼«Ï1azå®ùó¬ôšïVé¬;Ço­ž¼TÁ‰ƒíŸÑ¡ÊIàç’ &¦šòj8NPÎûÍi²P6(ç_ÝØj°nÝ!gÍͯ6Ùj`5¥ä.^ùT§±›ë<5ËMºq¹òý–¶tu…{f~×ÎÁ|RÛ‡³w)îWÝ£2úçª ™³ÔŸxFþ.C ÖJñ¦@Íà·ÀÞæ»6Õ%Bš«³û%'Êê®á»¡=À(c2~þUÖWÖÛ)ªŒõsÊW²uxžû¯jCAX‹xî †n„†•A·K± a±Îâ÷—bÌ姬éÞpŸ n8+¿3èæ,ÖY{ö1ðØ v—°…Dkä]ðøTx³·üúzPòYcþ̬_×ʼqlÝca8ó‰9Vœ‚©™À©„£Ç¥Ôûq>ÒÒœÖÒ1iÊYUk´óߟ)ô?A¿íÌx?pºçuœs´õ«„×£§ô~yMÖFøV}ƒ~7{qÉ¡E¯Ñ|â^žµIt6ÿb&’÷§¯c¥* IwÀý¦>Ã{àÔÑQ^¿;ô·*ÔÏCʽq¼ös§¼žƒLW†Ý°ËPÇÕH[éDZ„€ª/&ÝUßõFóàËyÀ½ 6<ÚóôoÔQX‰%Å舧óÁu´E…2\.ÍvÔ±¹²á aq©Å[hµ'®üë–Ú4¼®Ã5 ƒx¼¢ Ó[²ó Ö-Sá–\þbQ˜ª^áo™öê‚Ã'ž! ·œPóëž5ÿþ×–ìÖ ±ÆNמ¼üòÄ-Û/C·ÿV®ÚÇï¦U»ü–¯ð›%­j *‡Íé¾rÿ%3ú^¨,Àê÷ŒxU JçÄíbE%z£¥c°¾{ïöaygt¬ Ehíöû¢~½8A­îr_ÏQ¹ó^e`à–ë*v,r©(mo«°l=ãÀeµÎÑ××m£VõáÓd63û/øh.»A¡Uˆéu` Ëe²9’4ªOÃôµÀÊÏË÷$÷@(cù]eyGÍ80‡Zû/6Ir§¸¼Éš—L§eŽß;ï¾§í]"ïÕ‡šPt¦$ye©àÁ•'Úª7ƒïÍç¶„qAö]ø²Ì­ ²Í€÷¬e»¥ -ŠÖbYF·Ô–U¥b—×´*ŽM²*ëì°j· Lèá„°Õ¢–€¬Ì4IŒ¼šÜxîNÏÆ\kÚ”§DA|_Ã;ñÉd'‚r‡(:²B[~;5È ®†Í òƒ:X°{w½e#¬e=[küšX¹Ä2l¸jŸ pqÇKÅÀºÀq©åØ®kgºï Á[‹¼á¼u1õ‹S¹Õî\l~sIKþÒB–•“æþ9m9`(WÝj>Þ¯i5«íw—ë6nÉÝ}'æ~fùÒ¹:†ß÷kôý s-åTmdÚ9÷F $Ö—pþƒªÿŸ¬ó•]&P ƒ)Ó¼î–õu¡ú;ËÙ–þt;éÎíæ¨R‹†ãlŸk2X߃ÇIjÁüúìaü³%Gu*\ö˜žà²ñûßÿîw§@—œ~JçMý"Øâ(¨’×ýé™Ç´;+Wsíý¯Ïà™OŸés;ÝËjrÜCÑuœ;“ׯ–âö ¾*á¦Hñ׸¹ù¤§w­¶%Êi2‰©Œ{Á0Ô”žÊd»oáÚO¹“:Ë^5„²ÁªgÜnÇ–s(ž:w>•e’Å¿]ªz'|½L—ª³ffh^jN{Ý­¯8<(…b´ó¹ ;—ï;ÇÕ¡2ðr-ea‹úe ¶>;8±qÇák‡û†Ý.…WN½4øí†xojdÛÜ51ÙÃÒAHÕ ÊºËgU hºØÚ†ò;C½T𠈿Q1Úg+û^ ¾d¿gó».ÁOªý×á–ÙÿVzáÙ™ê«æ¥tjœ3öÄéÞuØPâ°¶‹â¹;OfežOFùÊ%{9qŽÁ¼óÊÄX!Þ#Æ|’u9Ê¡ºv ¿¿îâ§Oº Ï‚‹ ›•+É)ž€›t‹UWþ ^¾gs óžð´({,êÊ_·(glk‡ÛÑÙÎÐN4üìJ=½{$¸æöÆw¹H8»×åïÙª\í@|n®ÄW÷6¸êÈYÚ½@VÙ"íÇÀ”Á¡­µŠðÀt‰³È†J623‘£À®25²Š°ôë«4…\[(×[­™ý^­L³qÂpÓÁƒ¯Né󸥘õÊë[U†¢–£$…Ì= ®3T Bñb*Ü›ÜRºþåqk0Í•®ÚgYI(’XÕ@\ç1•¨¬å<Ÿ×¹ݹûn=»çrâ(×ÛáçÉf®s!^æâ_Ëö>z{ ¯'ÍÊÜ›¿n Èbœ¿ÑrØP§ÅPß]o«Q¸Úg ΜrCÐ_¹öªìš ff}į̂C WWL ³Ä-µ8˜}·$Ÿ¶ëñþô2À›2Ì©pdªéÊhf› ιÔ~­+´ ÈãâaŠÎ‰rK. &pc†Û=0œsÜ#ävgÏ“å©\ ÖìúµaÞÉÎ÷Ô7í¼?«9üüs‹þŒu®X³Ž÷ªçsÃZPîùþú¤H#®xïzüâ@Eø)Q*ùT+­“¶mò™²‚êï–hc%YŠÛíëRõIWH*]!„¡°³ì®ÉÜ Ÿ·Ž³ 9%h Él}¹ó:”*u &>Ø`'fvVøwM×¹¯†W#5Ã'_AË!÷-Óoù¶Ÿžz>wñ3¸Óbk* Ü'IA÷Oj?ÏÅrwp6½\6]0Óô¾ý³’`ßÙ] s7®òÞ*s_Yóåÿž?¹ÊÅÊAZmØç¦÷ØÔÆË¡+,@Ï‘Ïþ) ÊkÁ³v{½ÃûÝáµ,–ªc‡ë?›·(ÆG S-¼ö›ŠC5—××ú¯Þ™Ìqiá‘°Zµ«Y±›Ðªò÷V„3ÉÍwûûV]·Ï Ç宾ïŠÓiÏu$•ïe™P³…œ“b;ɤ3ë®Kïö^†)h.î¾hI^éÈpp·—ªšƒiEîSrPJ8efî»Ç³+kÅÑ÷>I˜4yÆ¿HTó¦Àùì"J™úÂOʃ–ÇSz5å̇gÍ&`_M°U#o5»‚Á@e׃²©C#~Eøy8ã>™¬ñ4áT®5ñì­k·È“iÔYß>» —óRÎN½aÉ;€Ù›w÷=˜rÃÛ •0ÔÅú‚ïÎÏíÒ“å¼[ÄÕk6í¡^Î5î¶_m\6*ÀàRW6s–;4p´¡›ç“yàg{ DòêÛ€ÌùÓx8)˜¦ñÓ‡£ÿlÃb¦Ÿ0k~Ëy¯]¶f¦ÐÙêànÿ- *[ó¿ßAEÁñ÷ ?Us(WÚòÜ­j@‰ov…áYj· hÁbgˆ‹*S­“e€õF·Þ{Øæ7@KYßcÅýó!ñYô3cZå¦\K2¿ËZM©f™ßo(f«roe–zÂf¯É×'ᇙ¡¿e.­Žb‡ã2ÁñµcîÙ¤‹å\ŠdUU¿â0ïgûâÈúÉò2`»1²ðMZãòÌ e=M0+b.¼ÓÈæw&¾d wæŽâ˜˜`YúH|¹Æè ä h®ÎKv–pçÏÌ¿6ßú­"ù¸P^È»4-Å铚vz¾õN8Âg„PÒ-³†D–p`¦r±ù«»À°Û n·ë*pÌuÍüõ²|⯘Öè¼Aj53à!Lç³_–g>SƒWYÃeƒZgÇ­½³7òšÍÏ‘ç9:ËÎêèIç癳÷]T#¿Ëž¾¥çZÍN[²Î÷Ï^»¯Ra½”ò÷Ìzçì¯<ýŸ®/?vž7€©À®¥ð{°á̺ˆ :Ëê«”òMò1Ý¥Ü]Ÿq(bªÌ.Têæ×ú|w“­Î‡L{•c߬€6Lþ-‡¸^>m(v÷1e«âUébë­ûdq¬Uo;wx>lþ‹yO³-/E%OISÂHùpËr½\Ø,;ë9goß7´*pfjGÁk?¦ÖÔdíà“K53.<ÎãZ·Š#Ìëb{µ“êü5JEã¹Sá„ ³ðLÎç  yv <œ¯õÌO°åê™Ûʨën yè¶x{SUØýï5œ§ÿ¯7’ûù‘X¸³ü½7“Šd˜âšjéú";Cl¿[f@­iSUƒõr °”³©GVå*®wÕˆ¼wâ—¢¼É?Õ¦¼»ÏîúE&®ìù~¦„¬BsÁÏ@¢8÷¿r3WNÛ_Iœ™ÇÊ'á<\ó›]u¦ú|^ºžÃ=Xe¨<‰ßèýD0ϹyniÓæ!ªÁÑ¥s7Ë:×uZæ·Âwåóxœe(SG[-Î¥ßÿkuú÷ßõÑrÁ.•!WêÌìÜu„v–¼iE;OÚaF- õë–æô–î1p{®sí^»ž•G•D {îÐû ò‰`®ÝÙ þ<Á9£ÌÑžàS¸\`­ÂÄ«cÊ;6˜ÇôßÛ†¯àû¯Q\y‚-?)Nð*sŠ·T+§lƒiëyó rfÚ"g`:<ð, y+Uád3ýÖx¡\#ïRæÕ yT„.Ó—öï.Ö“Sp–pÿg¿Ô {Þ!{voùuå¡h<»ÿ{ÍŸª`T«1·©Š‡éj®pvµÂ³ÚvÙ9ý¾}l†³L”›zWûqðÀ=»A¿˜ý>Þÿ†¶ôŽumÄLôÒOã{·¢¾²´Y÷I"¨‰+vŸrÕ5=ÆÕË:?<÷ý´ ¾¯Zé÷ÛËU^;Kvò动>¥&¸*8¬öÊÝ »Ä„ÌqVcîžG߃‡"üpyð9–MIAö‚øÎzz;=¦Tóß;ïzY*H½Óuª½Õ\Û]îÓŸ»RQ£ç*D‰i–æ‰=?lĆKgè]‘pzÑÞ ø¢v»³ã,¸S»¦ô˜ ³qöf#æŒÝ_};܆YpwÈ4gþØ5}øëv35‡û¤pò$?0pâx–˜÷ ½|7Zš“:KüœK•û«íØ! 9NMŸÏàÇÜn ˜Ú+šO Ãv¡Ì'v-°L­EåxN¢±g߆½uë­!~ñà])"P–;Á¦:Lv9Q¹[ÿwáÓSs–ø´Éxné6c˜@Äô˜ÝFŠ`±òñ;ó»¨>fºsoî‚+¢E5 [¬˜Ù>;‹*:$0luŽŸ£W¾NL0yÄênó­„ÕíæQ±v]FTôV÷ç‘0›NpoµœJXd¶L¯JUéÎì¿hKœ£8&öŸ1;ß¡&Ö-ÙiO|õÈý Çš+ïÇ»Ôx¬o`Þ¹)C® pQ·¿¦“Ãôö'Ý¡-‹ï †É*Î3÷iòOI@°V{®yüŧ¯mR͘7ô7 Ü›q+s_AˆUÀÝ@ésý"s«¥ÃS°žàO„I,|F<Úùø9ü0½g+ëÀ‰ŒS³-ß95ðŶNç¼4²ÔOJeÐ>pK(gŒâg—WkéÓ;ÓϺ™ÝB¬ôqɽ&ý >¹7ËðqüéçP4$~ÎÑæÙ1ï^™l×i¹gμ ñçnäöìý à`@H8åNrm½¬2Äâ•*˜7Ysƒfך ú¹å;ßߟé 5)ÈW°Žj?öšXèôsá†`Ó~Šo°e‘ʽEØÙÖ‚û†°VÄ/Ë*ÿ–yðåºjí²¢Í¸:Q šwh¾éß—ÒŽáuIz­1à¶¾¹ïVÜ·­ÏÈŽ¹>»âk Ūç_ ¬M¼)‡–:÷ÑÙÈÌãÌŠ„9ýåÀ1'¸©÷„pW±xfÁ ”õä·¼¥³lº5q¤#‘³SŒJü±ä,ßxëó»LKrׯq°QÚöÅà¯À£œêxj4 æ\`ážL_ƒ§b‚º¢tWx„?šZ°ü—x+]TïyÄ+Îï–ú{i(q1æ1sZq#ò=»ð,á9lÖ£y¢§ÆßoÚu~ØÔ;¯ÚsxÏ£ªàÿ=X©-­Y’½fI÷¢•••‘f4ø»!Ò,nû6-§€;!»íûX}ªmLÛsXÎ'”Ë<”÷Ïà‡‹ßܱ¬ŸÔ#ÅÈ”0;[Ô#iå·½ z7ƒ{¬F×yÖ¯ÊÍ÷g¡Â9´ðLµW*õSs¬Õ`ÌSwìçkï0‡¾8ëB0hwý³´zJ6”МÇYò nB-Bˆ=k nÿµXg5àZÐÓOÜio §`½e(‡¿îZD'?weµŽß¼ykç[”ë²M¾J¸Ó®>—"8¹òP=ÜÛ×)›NÞ§zzAyC+.tx­\¾ÁzII:O_T¢â¯â[ ßçkC“½¶òúEà)Hm`]zÿÖ$q³l~lËR¾¶o¼{ËïÖ-Pºøø«%”g=Õü•¤ »ŠÚ3˜Y|NÓ§%ÿ’D$HâbV•ž³.I;ãu÷ÏB$ ˆlª,½2Ħì~S Žws8£R.7õbÆÁ­ðle¾ÓT.F~õ8 »•Öt ÃwêÊós×XýóÅШ„äì«J²3¾ºõÜ^rœ8ä²ûNÛÕ{ªEØÐ¼`WàKùç=ÜÓ«à`ƒs©½x™ù&=ÃæDÎýï*1sÎŒ:S[r“'ÉË‹ôX²åÏÊoUß‚­µX×róèοççÅwe€v<æ¢kï§z-¸ßP:û^b—üRR ß-©ìÑ6Ðß ¼Ü3PU‚» èYîÓ³"ɺÖM²£Îמ¿'´-e}O‘–,ÜUqÊÌè Jµ´š>Tm…»“®C‹Êµï¼ÿRé)/‚’ÅtÜyôbÞ34ª†ÝD¬ °L"r·Àn§ÅL’+9Δ¸ïm»eIF¦2ïgæéí³Ë6Ü‚§{éjä-s{fîýØ3ciGm½««y½XÎ%&ë^ ûzr1vc´A=¼ËTËõåLÂçÎyM³ŸIip€í¼»ƒÓ– CM²{tµ¢¶²Áº”^ê˜ØcÀG7_|ðýû_^$•øÙñŒîÑIÙï0˜ÜkBOë_• «A¶ï„F³Ö÷3¸†ø/ ¾ï ¼Û~Yb»B”J1tßÛvwØj§Kaš’Qйò¯Åì/»E6w¯Ù ] åÍÞæŒÁ¤[<­•dùKêç”ï<_Ö“1OGb(lJ’yê{ØàŒ¾óëÞÒÀÛ¸rhg÷]+pƒ²i6÷Vݧ*ë§竞à#/—_ýÒó±ëlÿU.¹4/û­Rõ1e¨Ÿe}uª'<³õ;y¦Âƒ‚,¥(²çÅí_¸«à¨ ¼%&«/¢HAÞ[5@W²›a½å,IÍj¬vd£êI0¡ÅÇÌkÇ1á$èÖvg^í2aÚIEŸRÝ•é4{žlûꙡám'!øNpWOQnªµÑ$¨r­v€Ç\~Ù*Y—ôß“olûœé´ò³ï|ê`¸ññ”9~Jpò>á–d±—leUZÜ,nQTÞá €÷Õ;L|¼šÔïwwÍüu`ÛÇÙ&N1ŸX‚Ó‚Ñ~ï«LpfX…”§–ß3àÞ¥<ßl\{©@ëlü\ËßóÀÞP*y$ó˜F誵ÛdM’)2áV½ÁºHÿzÕ L/!eÔÒïC‹Ê‘—bOÙ<1«ÍJ²Õ÷íPëŠëåFìF[Z¥ä3¿ÂPÄW“}–¹t˯¡¶Ù@™ïÉŒ7o¾Bš¿X_eÆð€4$kšñß»?Ï3ëïJÂW-Åï·¢ŽË{‡ÀõÞ:®0[i§Ì7úÂU¡¨"ÅOÜ9`âŸgK›­m ñ- ê XdµðÞS g`íûj×êqxæ:Ç­ºûo9¡ã:ên¶U=] ØüÍn" 9[¢“{ûi‘jN¡ÈY¾â —K¥ž÷ÊÐ;ì±'ÍMÀu¾&(b™KçûÙ½ãöß"ÿàºúÁú€; pÖtkru&pÏåWP­º<’¢$UF¿®—ÏÑ!GÀwÂA²³ØöÕç…ªxüE (OCüÊÕ9soµ½i¸¬¦J•¢XÎÁµÍ§Þj~Ó-`Ð_¹vC*3¼™Òù)M²ùKúÍŠéûp‹ ²¥ÌJ,&8ù®vNÚ\jÞÿ¬pÊ ”Ÿ¼¾GÝüjp_’—¥»ÅÞÜwÃÙ7vWÖ?1ßûÜk#Õ†k~f­˜ƒa¸Õz,[Úš÷'ÙÐËϵæ"’ $Õû.R“û%<Ÿ|f./^kæ˜4UaŒƒ=×÷¼ò‡÷t0ðýF}†¾óž>s}-á>w°¸ù˜ç5w‘'ìï[«Ø®çã6â7î¹{V¾xÿ2«®R4¡vxx’IJ–˜f5×–ò <ε¿r-×X·›TÆ£¸õö^59Óô³êí¬R®Î 3Ï]í®0c]=„ûE)ážIrðc#*l,úY¹órÞ5Ù†ÁƒƒC®»¾~éúsÖªF[ŽÀ¿Æ«‚y¥8žF¾ú ÃX°õ¡ÿ—³×œ¦wÖœžEë¬Tt—“ºÎ™``Žf‰9îœE쩽L/¸?7–Eîö=—Èf9׌ºAÖy©½m×äÿ• «ôò`”Y˜Yà®Ï8O¨Ç[ÜgäZyðî©ð¯˜xæÌ7_Žûÿã/¯ŠÚý,qºtQÕÙ}súâ? †2%_ȳ¶®ƒÏrN-Þ³¹ãlÜdö—¢©_{ƒi±·+…ql®¬'ïsi;åfï§²îîmìºåI÷Œj0ϪNùþ¾…dëóú}òIg¦ŸÐŸù6ÿ®Ÿ;Vëó|B] ‡ñ6d¬&xß'å†[Wí½ÞήÕSRžC,êê+n!W×{«¡¿ì®¸MQDœyeÇo1Ëo‹Ý–Rn·5ÁÆà{'YÍ9uþ–™ýnqæ1Èú» ÚmK«§Ä=ÍAw Ä#l•<³‰(Ÿ¢3ÝUwž¾ÂîO`ëp1ûy¦Vr¸u‡àŸÞá¸Ñ®Éðw9V>_ÅÙ-ðí»jÏ=é„<ƒ«š˜ØsÊh>'8gFKÔÒÀŹjM«>Z‹£d@ÍDS¨žúë®g_ {SbvgÜý¯5÷ß0þÝjì³C‚VJêCt ¬²˜["_y Ôh³RD#~î¥×ìvçn ¼Š@ž¡jý,êˆ}¾ïUˆ+àbYFå•sªl®ÿus×b?›1yÄ M²îg89-¬ùÌÛ]Û²³föwfúì~àzG•W­Ä@ @?ÿâñÿõ/¯Y–,Á;Ÿ‹"Ÿ}Î3#Šjò¤åq­ÃÆÕ‡ŸûZï²&ýz‹®?4$àYc~—"-×ÎçÅ›w.¿ÜgKù‡{®„JŸ‡°Ï‚<*×"J¡Èµ¿5×÷9­h!&œœê|][ÒLªTÿy¾„¹f«[Ó–™îΗH+=Áñ^…ð‘¸îáq3IÆ!·4pg.¿öì;ª¼,˜ä¸10¨Ög×IøùÌ´_èMf(©Í½u¬´íïåúÝRápað÷F(s·Á*¶zqÓ+ì1ƒß„–j`5à®cgÃÐ÷>-¾éí÷_7§ÖAˆ}“|.ÕÂË<žúõ怤¾úÌF8ççP§WÂ}·™µï½k;¼R¬ÈZ™a"íœ €Ìƒ¯…ßô†ë•/wjÀmIæ§–Ôed-GX£ê¼¬¡pÙè[Ç©7 p-üJ`g(l&º¥lIö8éÀ<+-eå¼/;.ØÎhèÉw^,”ú[’¿eªƒóÁ÷ËÒôE{÷z,ÃGÕ^©&ø½;âMPƒ;—\eâsWWœ%±Çò»Å¤ç“ël¨sØÖ“)’OýÕ<þ"‡8·]T"®tÕc`0ZYXÛld—¼£ÏÑÞ±>rD~îʲ˜Ežñ^í¤&A1DqPçëU9~ kòø™žÛíøg“å+l _²¤<6V­­#DÒŽC‹ºßʆìfÎu_ ÏSž‰,»ˆ\y¯Çt~«D?«µwgÉï´¢2±òò`]üú­7¡÷J5uœE*9Q{ÖZA¥ÈE»‘–À]¯½ˆ=¦iyÂõ¬ÍlªL…¬#|o3—2âG½á1ÿá—?áÔãLáðT ²ÁM9}šUo¨wWg?ó›Oî¡W×ÂG›Êµ¸ºÔ^T(C†»§Ö᫦Qšå†\VI'ç³Pž«Üdl€nXo!κ„k¬‡˜Ï]õµéù-çÎÍõŸ=0WjU~.ÿ³»\2À&[O±I,ó+¬˜úHý"‡””š(iÎë¥Ü_lþ½…º«RÏg­šž¹‚)yYMž¬6Ö"ü”&e:Ãö~J¾€AªõøM.* ~Üš©Ì½®ùÖ±U·@ñækîåØR‚‚ch’³ãÞ3¥{­™s×ê!Aå:÷½Š²WTÔ™soú–­ÁLȱh)E¸¥¯»ƒîÁã¾ <‡+ïbÜ©®æì | ãªÝ¶ôR옸sâKÚ²¤*=Q:)¿[¦ Ð;ÃíÜ<5¹KÇ@™ËGÆçæ Ö3(.W ßËöË{à1WÀPò¦Ü›ËýnVã]Ç Ëwïä{îû5¥í´8}ø0€+A@C[‡èÎܽÇÜîû®÷Ö®qhQÕ9Ò®æ=9»î±&½ý½œ{Êv±žÝ5®WTKquD8+ob¡ÙáµM]ßÒ`á1ð­-Sµ‹Õ–L{Ä>ï±==çÎló¸|Rè“ʧž5÷rØ]ÕO1Á"Ý! î«Ç‰u wAT¦ÿMÛî»æòßþòªÊ˜~#ö.e@Å«Yu×Òæç{³ü °:ãë–_sßË¥è1|²œ/Ï­ß[~M…2)ÅgAŠŽuiq†d6ý7ŸŸ›ÀãàÊŽ¼ N\E©bïÙµ ³äçEX|ž­å[\RžôuçxoZü×’à,ÚXõi˜€dÉÔ_Íé¿3#Ϧ9»€¦ùô–·+&}M[Å\ß=++_|}ÃÍ]±¾è=|ÝüjU„"«˜ÄϪ5Eø)ñÐâ‘ÛIw—ÈÜ͹xTȧÆB…(îš 1Æí‰Ã³çòopLË|À‡–p©ñP ™S¼ÙÉÊw#*ÒJáÇ2޵åþ/C‡ Ä{ÃzUÏ> í)W­v[$Ü÷Œa2ŒóÐ¥Òs"À<•Rœ7%¨-ARëë»âÊFتД½š«C;;Ü/E³Ä§;%úKdŽÿ<?M³·yÏ š´f÷-LièÆ€çÓùpUBœD°½—Ã+>íN½¿V·ç}'@¥=Ûp­¬Ï<.“ÓLœ9]µ )=;kŸÝMôÕ,»[kEÄwå>ÝPEÌÍïT%îÍ’—†¹ÜÆaƉkþÌÙWƒé¿\_b™Ä {–@ý23Þgá±eHSä%ïß´«ê ñÖ­8dýþ¢if¤ßéR×XѨÆÓMØ_å*Z™Î¢Çô? sí†;;DÞ³õ&u”ø3C–Æs âÉŽäËAD.÷Ùª˜Ç_{®œw5ã:Ìp¸b`½É^¨`©œM×çrb5!ß'¦a˜ìãq÷=é:ôåˆYôÐàÌšWå‰[–R¥pU¾þõª3ÔÝå£ü\MXr[¡µ€ ÚœvË0Åâª%[Œÿò9v}ÀYy¶–UŸçF{²sT);È § L7Ýa€ƒ(ÃM†Ê7’sìXI¸6­½,‘Ï"gªï=›Úxq ©å»÷©à´Ãw‹uî–y»ð{Ÿ„¢cÙᾤüÄTÏÞ¤Üð*¸õÖÕž=ÿM)OÃ#‡®0˜Cï*%Dºå—+ï=‚þRcsîÜÍÇæå[]‡ùé{¨ü$#y$ ©+ÕbOÜ’¤$.ÙP›š9h1¡¥|‚Mk1ô7Æ8UÁàN#ð¤rYéÿT?yž5·aó.ïRRdßK³ÍW5ü•¥-«å˜‘\ mÎñ›ÊâL•«¥½ce‰:/ƒ’bWœæš–SÕN¦†÷Î^ÚViµ4Øû&ŒaàQVYÞ›682&•¡‹òv:ô9R¹ŸãÆ&]:žÚ$Ž™ÔOÆqŒ„¾ÿÝ­æKó礩ÿó÷þ—÷[Õjx Õêm⇀’ös²ÀºX¾W™c3[×Ì]óeÉ`3·] K)˵ gú}Ÿ›~S†G& Ò;¹®l%lÐÆ#äxzo%µL"÷i°[¾¶%ojïy7~ÊeÑEJÅþ8òö°$”œ;„ó {o^ò·šIÿsBβýNæyCb×g­y>k¼oïôªë™-éI§r ÔxŸTˆ5·xG9ãN`dáj~­ÆÙ2Ûr¢D3Ý7ÜßõJãßí³”Þ³C“š˜v1`-•›" Y–ÔU\gÁ}uv"¨GÕXëv±õyUØc2•ë E]+`§Ë&ÌÄ*>;7õž“­ÕÓI·Ô0vÅ}/6ÖByCâ±9Z ›uýKXÍU‚ª3”®Ž!òî,ë0À¾•;ûߤ‚Ô]RÓçXD¦=soÁMÕ÷_+ÿ8\!°³öÿîXìfe׊žaM}g<>ŧ3€C8kX™G»Ãý¢¨Žï5ƒ¼â»Ø5½"zYÛ¾‚IOÊÌ|ÌFñGNÄdóûnáÈ—£ˆÇÓÜ»Ü'¥KŸª8 0Jw¶afÎÇÏE¤7 3`æuqƒwï)fðWˆÏAp(vsÿÓ/¯yo‚›˜­nOkÎÿ¤úðùe‚À]+ïaý{ºNµöþÚýï^&kq €foÌ'¸R¼ÝùPî°†¿Öw/‘Jg[KÁÆ@–[²ªSm»Öö)©J~­¥edƶeF- i¢‹Ü ÁUoqpÂs'¡ÅPÛ¡ͧÆëó18¡SìvçþOrœÏgú=ôÅà7ÉÊU)ëý×9rvªZA5p“Z|× ºÆÿæÈÛ~·ñ @¿õCv]|¾;Ñ–ÍVUJÅ×Ò)…þ軚MiÒïôãR›yÕ÷>+h)YºÝ€¬<Ê÷ zªÕ•ìÛÚÆZ®ùù-‚'~ë΄»{>ZUç9µi^ ²E­a…¡3*%\.S¶ÝÒËÀ÷ÞøÌˆìZÄÓêIl†v˜djßL|ìåàÝhÃ'Îáöm0ñ©¶t­Ò÷©§“bá¶Ñ °í:[ºîÁ ÖDJ?é~Zíì¬ÓNÞ<+?¼?é$ÀöÜš¼^< æà¹4r{Zn9›K‚gBæ°½Zýá¼|«ñüq9ý»èguàØU—$ ë±…º®i5æ;'öpo&¥˜lcŒÁýNÛpˆ §¸‡Ò±1ð5Õ„+‹ÍÍ <‹s«Á†‘†-°î8)ä<•ì÷\{·ŸI5&ÿTë­7©/ÜGئW>60÷;ä ÇMsv¿4õw’¯ˆG¯ˆI–÷™2.7ûs潬FRbš;į €=&«YÍ™Ë2XÙ…¹eÕl&E}˜Ê——Äç_[+ù¸êýsyc¦mo´u°Ïšš€»òßsƒ?÷ØE’ÜÄr p^Á-b{mÁS›yÖfH[&ÒŠàÖ&² &Wæ­­Já Ê6㥔_j$¥Ý¾72^”0åüë¶]_q¶A39pÄÓúI×^¶Cñ·8»ö¿çÊñ»E¸v™¿¿sǯÖR²692 4ûœS<ÕW—UŸgžò7¨ÆtBÈùæeIYg¯y?Ìq’Õê9ùCú¾+8\È]«Üôÿ0BN¢ý:ÚÏ–Ytñúr¾"Ÿ2B?³&[OÝÙ}›¬•>‰ÿj±HZJ×¥F-*ê#±ÿ«Ûˆ U ”»ª÷lÍu‡:;QÄfg%dùFèÄ>·þÏ3ÇÌѳž½ œ ì¸q–³=ë<ÎëÛ÷—B¢>Ó;Kþ:~½UŠp3ðµf˜í@—GëÌ4¤›d'ûNÎ)Þ"ϼ±ñڿ匾“Åkç\ Ä\î5²Ó²æn)™øhw•öØ]BÔÌ{sèwÓ¨oSž»Eþq'?çbÏÉ… <#kž¸&@Ì¿¾qL´@ª1ŸÓÒ\çq¾™Ya7rŠqS’©ÐOÐÿ dÝÂÛ¦NÏܶA!«4^\¹Hpä{³@›íolÌ{JàÚº¶Z¢]% }Ëî| [í'°¹B—if%ßšË!ïI>Öš`¾ÜOÈ"ì¹6k±ÑÊ÷{4¸”ºNbß\ÞíÎ{•1(¹Ó0..x5(¿¡ôì͸_ÿ¯¿úwŸÄ3Þ·&jò~èïàÙôH'eLqq»-ç·’ã$ƒß{.»"« U‹§ÛO+€¹ç,µ™å¼ÍÃ.ØmÑÏ"™çíλ%œôvÎTny‡›Ï³°¨¨ë5Ï3à4hæ<À`¦Ä4­±c± &K@³<%ì†k˜î»åÔpÍKn­v€°žÏæÜ-LŠñŠŽ¬T o)ÙWÛN‰¹ƒÝ§Þ¿9ô>Zï“ðÚ`Ú•‡¢îF—ïlQk-yiå7¼–ÁÖîÅë k—ά}Zɰ¾ºÊÀ«Â¤ÊGò1³v>aÇm淃̷«VBÌ¢·ñî5Y‹ ¬îCK1ºåš÷¶XÝÐùÞ1´Tê«`µ2×Ë!xWs2倢¨¼8Öÿ>¹ÿ^y5l3uðÌ'×z8E;´Ã«=žç\†×>ç8ïçh? ßÀÿÿúå5ïÿã//.ºV'c­À „•æÃ*;ë{ÕáS6|Æü°Å–÷ïyž¯¡‰ÓκëúÆžS/ZÎôÿXzüEì9=¿WÎæeo„ï{ì¯ñšûíSOûþ+Ãu“â¬ýbzOÍí¤9kÎ+¸Ã,Öüy9¹:›N iJ‡†•s÷° @¯lº¹ã%-êœúnYeØ]J8¥Ûcg€âÁ—·÷ìŒ{ɉrüÝÞj• _Zm©ZŠ}Ú—wï(Mª"ŒùžôË;áújå>Xþó_‹Åî`wÀåçÌ{½Qî7+½š;Ý\èl–—1ÇM¨pöÚǰ‡7^ kdÊDÆÐÙ Ê»*?ÏÝÃ]‚Ó*=n9õñ—°£a™³SXyàRD`ÇŒ£=]^4µ¬ôv,™jδý ÂÌ]æˆQŠK •XÜW`ÇP«³ŸXÚgwÞ¢•„¥Ùð¾glÎÅåÙºÌOÛ½Á­œÖ×g%„M¼sMì¡ññßý÷Ÿ8¥Â;Êj'Ög˜sÿx±}y>X楑å»6ÎÚ2ä FGÙÿ•±£"8t,æýÆû¶ú=XÓ«š$ŸèjÜ·íÔû¬ùoúevö“×?+,yœ¹NqŽ"uŠ÷Þ@’¬·fèï,µó¦•i6·ÛYÿ‚à„Ëœ]”Š¿!fÑ„êóûÙ]s_f›[ï³óÈìþ¾¬N˜²·/ó8gö(_X×1*0+σ`îÙ~Ö¡÷±qÏwÛ+,ñhQÔRòu÷~,»YÄ!ÞÕîF¨:¶+–|Á¦ôyJÅw®ÝõvöVƒUð Óòš§[ÐÖ”ŸiåÅ Xû\¬¬â|5㬷*Nñõ+ØýkTÝ\hÒ÷ÀoY£Ýp/x1/ΉÆp¹š¨ÜÀ¼~Õ¸¶qÙ˜Ïùû™reÃ*œßâ‘[iÇÀ½ ËÏ Ì9 ؉@¦Õ1)À+âü«"UÉ$fv¶¤Z«ßƒK[âÌs­N .–¬!@”·‰õIX—`ÀÉ%Šù~S/þ^V4b;&9’ˆ~è7ÿò2;ÙÏlugyn´x+Ã`ÖÜZð>t`£=÷°M™a[¹1ü±¸û§&à3ìþC‚Š~Nϵ»ù+S„þ„ïÌjÏ2pÞÏÆökßÛ|‚Lº(òŒÛ^ùLàî¶\„h¥o¡LÿºyöžuY3$Ì2…ù~;+¾[,Õ\yî(ðW™l†Íþ-KˆšI_]Å’/v{©÷øíÚëƒ{’”ìžë€§z*|Ìði*£1Žmwùuó4“D8Þ _Ôç±@§óý\°wþ}‰ošo]ˆr©Í˜ðP9uçû•/Q3ø«ŽAØQСhN†òer^è†ûÞIÎnVHS¶Õj\‚’œJæxü3 ðoñsf˜x£[„ÑY}>$â´A’Ã!.xlÃ5…ÉË¡sÕ<ëBœxÕ;y‚’üs¦ÐΣ®XÜÓÒœžO,OÆ«ð©ßÀ— IYzXLÐSdyˆZ»Ã†S¼<»ýná·,ÿG?Ç9ðëñ/à>Ÿü—_^Ìè´¹bÀ¿ÎÙ1`3ó•cU¡¯…ÊÙ[Rù{ÞW\‰ì&±ûcÌ{R‰NÞÌ{-ë×åþO¤ ë©ùmZþÕ9ð.D¿ÆÙµAë•qT™=e¦ß÷yü§¬ç³'§ü\ ›L²jMq²MÌp0àWŸšLæñzq"l<é.¥FoÀmÙJf—ý[þÜO7³Ñ®ŠX?þÔõœ½­Zcë´ L"âÅ`£ÅIŸ½–¶tXè±âutÈÜzgâË0Ëõ÷™|šz¯×IšóÜ_áÖÞ/k&X¥g×ݯ\¾UÒ­‰Qj6î(†}ÁÍ7]»ö¹Á=Û4 m«MÙù{NU‹(pï÷Î﮺ª­¶Ìœ™v¢ú|<†Y®u0/[&b¶tñÂÆÇ{h J‘JDTWWßM‡¦ô83Í’ºeÂŒ•@çà~WÙ?7é–áTéù´JÉ3T°T5I ï7l%ü5{Ò\Ukˆìœ·[ÓJyƒ !5ï.çoÌ©µÜ$–,|‚þO¶õûwÙ^i(ÆO$|Ú‚¯®¿p”œïŸ3bNYö"Xºaâé~fê>¹nÀ{›‹qØv‰ÕŸƒòúî ôŸu{våþ?œä9ó9´›§Iá½1½%óË‹O¯‹ÛRœbͶì«´³ŽjpIxg…›€ùEÇ–#o¢‘+3î!±ž»|šßÿe5g\JÃÁ™%T‹xî:<®˜Ìcz@„JEÇT¥êpŽ'Õì°ûw­7oηs„þ–í½y·ÂŒÊÐ×öetïm¬Rý¾e9n\è²É̺»>™Ñï«Ä<¿H޾KgR€ÒÏN¥qRæÀƒÛ0ûeá¾ÕôOúOdŞݼWEÎÐßw5§KN…»ÄÌ“íË0ó‘.¶R±Ä@Ÿ¯ótþ¾‹*?ä ­Bè³ÿ{ïÿ÷//Böy?‹0}¶$ÄŸ|¿Aÿ¼þóþ›¿ùÏÿù$|ÿ-±¸gfsŽºÎ]NúTj‰Æ^¾‡O>Зw„Ç–!ñ¯ÑØyÓÇòëXû{máE+Ú{8n?´ºø$|¿æÊ;yþuHÉû ®Y•?nId¢UH`t¥óý¿¿’ ¥Ä_n©UßpŽßÎäC[+íì ¯n¥õ6¥‡ÃÑ.b•YòE‰1•ÅÙîjP¶“nYƒ™’TZF|"\+ð½jáT‡ ÅﯠŒƒªi05cE;†?R$eTL\뎗jþ苨ã äý{g•Þ„x^Ö¨Þ Âª‘÷½“®ƒ¢¢që‹›jõF#¿l¼ªNÂs$YÅm[n겤«¼ÇXš/1Aj~FÓΉXOøNXϬ?¡¿5£Á=˜¿Ë0•ÿºâz¢¦<›¿wú™~ØlJ÷Ì»úQÍÏÂ/ðýÇUéùµ=¤aÌñ°†Æäƒ:Ö”fûÉôó.²Ò9g`î¿*r|âöfYÓoƒ\K4ÑÈJ2¦å˜žá@·²àu¦ßssçWì%\Æó¤Pý¬Xøn ®FØùR›q òœ)ï:››•ý[$8ž•qgº[ZÍÌ$«â8d²ü¨6‹MWÈçz‚Õœï÷]úeè\:S¥Zã€Ä 9Õb ùìmøÎ{Ø×ÑÝ–Ýäsçöh»írÝ2oy8¹3Í-Çy C_*®Ý-¥.1D»±º©´î^gÓ; xææ«ýצc;œrß¾¼¶ôâ–UÓ¨öSkYð™âÄg¯8kS®GUÜ¿ÁËWy€‘iiœvy$wJõ Á7—ÀÏo]RžÅÈ'8›÷ô©÷oèOxÇ kÞÓ'Òt¬¹ÃmöÇëNzØ O 'p7ùóMÛëþ¹óñorêL½©00¨oíÇÌU£h~Ô/âçûžë^%A×hªHÍ=C¸Ï s¶1AÈTOQö&ZsñÍ_ç³fHT.¿ÖHqÖöD.zRG60‡í_qïç ‚¶êU(¦{ù%;ë\Y|Ržvc,ƒxg«öâ&`V}‹å€ÐzD5ÚT-s²†Û¸îá` ü8ÅõÃw©)©ÕòΧÀ)$ŽÃWuü9—mlÌàwHà=;'T67üœyÒæ÷ž¹x”Õa_9Ý8vnžËž%&˽”ˆ,eX•–2<ª¥ìÆŠåïÜž–Ýd¹ý¶JÜÓ]pzÚÝ‹ù•®¼õXwIXÏÉÎ>yÓÎqJu;»áþ©qpk"Üý‰ñëöôؽŠ@hN^Ìú…“  &Ù"ªž³M<`‰œ÷Oõ ðŒ¬ Î°“Íå¤ÜؤÆêé¬xÌö÷€á2Zªæ]{(÷IP8{›#áþË%”Úó!º»SJ(¢ 3çû¼³éÛñÇî4ßó÷oÂ!ïÿÞý|¢Ý¡ÇO¾Îµ›}ò¹³ò CÄþÓC2 î^š!Îî>^SL® µƒœlW «-ÕIi¹øÞ®FØê(}!“] î­WcZGÙøªK0aQši¦Z9H+¥ óÚKÇagr“pxuxü«5ˆ¼žÞ«v8«?1̳m™žQeâíáÀ¾5Wi,§[ô§:ò¯bÃï ý¥µoÚ³’†Úe­åc¨œ=÷P¤ˆ”MØš}ÎWˆRvW»NµWÜ„Z@ÓCGCpg²yŽö')xjz¤¹|Bx¥æ‘W³ò®[Ïsáx¾–+u5û@ª¿Â™þ¾âçß²fsÙ¼Ütnß3ú²c¢—À’é¬ì¾‰(%n¸S‰Š7_¡ˆy¥»t¦óOµËAVnÞùìj«µˆ'Ë7e›eêŽKUÞî(‹1S&æv¬¶cSkJ ‰/z6;ÛʇÖõ—P¹·]R–{ á]Ä©AféýS¿ŸS!GÒnÍÎ’RL¶ ’){} ~&Jx†þÞ! ïgfñMM!‘ ¼¼ü³ƒÈZL¾ó9uàæ4J`ÄÜ<Ã’»“è³CÀ­~ÎäQlôß/ Æc ]É?Vå'pŸ|íŒí€¶ ãÕâÌΆÎn2ÿêj[¹OpªÀ²ÁúóŽÝ§Kβ:^¸nð¾ Qí¼¼'™Br úmèLÂYÂ)0®,wˆÿ}­?¡ìXò*ó›ûä¿þ׿ýÛÿú_.Î{·æï•”!XôwMŠ`­Õ4˜jfµù—A*¿µ·»þPd!0Š1OªŒC7O›&T*gEm²nWŠ$Ã@®ÔH|õõ29Ǫ;,vYÁLé¹ãÂIåø«C£~Ýì÷Xù‡dK“ˆ<>ÿ_s®gŽœ°›YÕ7šý,8:Ç̽™Hce˜²|/ê‹kµgw¼iÒÝi3„/榻æ@¥-«áµtô]N­>ƒõòµ¨mØýW“ªÖ‡Îú›ñÉe‰‚›¬'TÈ0Ô÷ 9úÎD:S ‡¹Or÷íÝk²‡uÜ«‘±d4 wøog=ÏyÊ=opcÉ΢ ZÂÒ¦æ @3Ú+÷É,'t/œ6c/_þ®Yû»¤§Zx«zàváR¸/?]þÕyzó PªE¸d4+ Ùk‡Gæî—NåóìŸÊïV5c·`ãÂ0‹Ó\)ò§]ÿ!{µd^‹úeƒf£µåžgqàè¦çòÈ´#}²í­{Ênž)÷|¤•@<+ 'õž3×ßAõ8!RÁf^E2±H™ŸÍ‚kåDa`q×±¹²à4̲†§r¶ÿR ‘Âäî[͵üœ 7@Ï6jÌÜsÏÇßë[ ¸¼±ÎPn”†,õo……]}zÞŸÖæßç~ÊþœV´wËì~Ø¥bTöy ÔݲÏ9“††L?•ƒŠ›¹ç·Y/b/Ç\efú ýy7r®6L,ª‰A¿™ÙnÌemÁ°rçÊ›øQôC:Þç§=?©DLE™ðcúP5ûœ9.Y‚‚ø&yÜ<¶Áethð}òT¾îƒZóæíì³sÞýd†u–æ$àvæÚKžKã¿*0¥ëoj¨{!~°bLV)Ò‹{lnÆó®yïéÉåþýßúV™víº(þ¤œk @3ßï<·):»ÐgY}•ü¥q3ö2ÀBq›2Õ²s§Ç™{0}¨<¸½ÕTøële餇 e¬æ+ËʃKا Ø78.… ^Aï“O ÃBí œþ:{Û£sîßÔ ·Ööö!бÍ)Ul"d6k‡µeîT®³·1¯¬›ky_q™™ßb(âØFVp+$MÇÜ`}žùüÿ^_”òdmdþÊ\,)=ìàïR Èm¾wÑECâYX‰Ï¾à’‘(?éS}ém#ï¡Ì_Ûð^5§ •c±õy, ÀY…3†û»XËrç ëiü+ëHó ÎBzØ|Â$Ý9œÝw*Ç@ÊÙë"fìíÂÓtË) UCØ%]UØÝd |‹×nˆ¿kºsœ]u¬váç°MŽr¶ÞìÃ⫌ÄùùTÓx¦]v9WhëJ•Tiìð¼8Ï—:S9xd¬"Å@‚ Á Q¾Š©ï̽½%-ëuÞhü¿é(Nu&˜Éí Dš7y÷‚Î^[§öùÞº«8÷%Œøk¡¼u¤Êâjÿ-BöÙó,TÎvS}Ÿ9þßÿþw¿;Õš¬¿ÎlË”ËJÒ,ì®s|Î[|ÂàoÍéÕ/R’˜¶åƒjg +ŸÝ[ž) ?3:·öÖ¿„)\> нIÊ3ª/P8Ù¸NÅ+å ŠÍVî3$ æ.ßù|§ë<áþüº5|HΘEÈnFµ < ý°k‚ÛSœ‘Õ~2By™dzÂ$µR0ÏýF)ÿ×¾:xþãØxÕ/:Àà¹ð½…7,o@=¿>W„É5BË¿ÎìîÌ«ü_𚻑ù~7ÂZ¦ÖP¦ìŸJö‘PŒéï­NÊf·Ÿ–¯›,­_õ¶B’ºóÂM+rÙ½*QâóÞS›ëæ[¥×Äǘçås9=§†EaWî?íáç.¿ÝjynÄôø0£Æ\²›PK!‡-†½{Žù™×q;)ƒ:Crñ­pRŸè;ÇO?÷LÐOOåõ™g%ð²¨"·ç_0ÓÏ€ô‚BRAî‹åÓ;“WÄ®Õå¦Âç× ¬Õ>Þ,?Wå¯êÁÏ*]?—Ç­vùòÐ ƒŸõ1Ê:Ø(øŽå½áÖð{KýUwò=ÆŠŸ)Cv{ Þ|ŸœïbäWÖßPÛŒv÷ lµ×¬weâÍg]±H&¦<™Äâcãâg­Ì³œæpÖÿtížD sÜÍà7ÅËË6³ùTµÉ: ñÈ›mOÁœ»îê:O˜î–âÝŠÑÔž×>©º¾˜5!$Úux>Z"ßùËÊ£;«Íâì."V9û‚’†\ L‰©Üy PZ+½$;­×þžlS[–v¾ÇÇ`¢Ý¨Š\v·ê‹¶¶â2• ·‰=ÎôûÈ­E`÷>‡‘4bj>Ì{Ûô­’ʵ›6ð3è_û)Ð}b)Æ?׋ùCäÌpßEü¤ªÞï7[%VxÌ£=€þ]XÓ6ÎÜ›¹ëŒZ…†¹–u ¡ K¡ß#rÊ‘×M½EÂÙM¸\å0göºï§Xû&¹—ÀÚ)nê5YÈW ˜ðÎ µÕ^Ìígñ+ ~ŽÆ8ξÝR} ìU #Ùî¡d²2ÇObÒì“™~žkoÀº›ÿºå·äK¹ÿé¶Ëïz®øô <·q84¯¡¸0§ÈÆYÃßù«ÛÑ,™J¦"×ñ“9ÞWÌß“xcÞ³¹ïs´ ú]0ož°~FfÓÿ‹^„õEÀX6p­@??'ô'(œÏy]îÐЕ§S5ƒg=ú»öÅNÞ“Mf{ÊËîþ¾;u§…qßjÿßù8•Ãz2Ós¥˜»%è')Ž÷óôüÄÒœÎ÷óŽš{ÀࣼcY=Þµðmå¼ø©ÙôÉð6 ö~ŠtÄ=Ð.Ê÷påÔ}l xîE})º¿å*G©'íµSÃnÓ˜qçY8 pS5¯H5¿:8<©é_dÃb»¼»¶ï:i—UøäÀ̸ 3œ(±ë$evsäe“áuñøÝÚkjûܼkˆ\\ùâëÏçÌúXŽÓ-bo¹çRåg–ÚÜÓRý¯ÌcžºüÎÖ»†`ðío1в…–¡¿yµ%å,MܪÀƒ¹+N Õ&Î̽»,|]˜9cÞ—#àæ3}Ö«oaöÃ&êùPrúc­€çxÊPnP¦´w¬‘ò¦Ù÷½Vûy(èð‰²€T£É:€g™_Ÿ¿2sS*"l ¯V­» ×÷QY0”~>¸ä7»UwöIáõ€ªì§!þûå5Ÿ;óÊ-â»)“ÇÆÏ0Tc Äý䡚ä`èà~ Ö6$²X³ùúo@ù½ÿS†~s®¨Œ¾]88·ð©7à ÅÜÕ³=¡?Çó^y’|ý"šôÅ{ÉwF ¾›vÂZ«7O­ÀOXÆ[Þæ´çç{æeíÀ¿Þ·|êÆø“’5Ù£è:„°\‘Y… $½*ϳsk©Þ"—$eVÞ-5†©W5¶ºw¥hK¾šÜÙÝ!þ³A¹SàL *•'öêNæ1|FWNà€©`nUJ.ÓMŠß?¿JñÆçh_^7V:›^¶Yªå×> ¥—_ª5¥µoeŸiYz•¢Ž%/¹7×\böçn«ý\£ïL°h Ùä4m»ÕØí Ô*ßçnq¶â§6†—e Ï ‡¶#ÑÇËÏ´ñÝè0Àú÷<~÷üÜÕ~ÎzüvãæóÂÑ€HHMM \z2„Ô–R­Œ>ÿ­¥ËjQü-Bv*¦¾ÜÕxÎ únÆuþ~`=!¾?áöÅ ˆYÿÒfq˯3Á™ûõý¾Ûç“»mÙSÝ‚@Á)ê¤qp½—•CVŠyÿ3_ç㻋ç:éfùNÓ9&dö4|òú×=6÷áÌ¢vhžOØÑÁ ŽzYÁÜK¹ŸwÝÜcì0lµ[E1ÎM Ú~Hwq;¬Ûv M˜©Åê1 _¹]‡«…×ÔGCI§›\‹LRMÒå@\¾È&–ÏžO´í }ßV†Þ˜³æ¥ìT$1¡G˜¿Â•Å{`PA.þÉší¬¸Ïç‚÷’·¬.¢~Ð{H<`&Ûüu·9ÚºËß2ì6P.‰FWL°±—uñ¹ƒN”o€{uÔY³ÀÒÚiE†ø„ž&S¬7Üñø;Ç¿ïÍlx´¹µ—‚äé~‚ÌgDËð Wšaîóìjº ŽcîeÆx̬ð=T‰s6/¿çww0PŒü– <ƒ~«¡ïõW%eË0¥LJÑË ñÐæ}zRvƒ;'wZqÙ…÷ßãżÔ]ÂòûH0™ª´7éšðŠ;È$é‹pÇöI&üì޽VP!A‘UÉ6|wεªΗŽ{QbJ.³@9;”j<-ïÈ}Þ+糫Öä7¾rø93èœ]MbXËÑpPQÎV¿ñÀî£; ç Ù}Fvp=ßãÌ¿ZöÔ5>º¦ñƒ_Pr™üÜ„Ÿbçï„CÛ"˜£ÿ§ñ"h`ÐRÝ®0ßÝgd¶wÈ›rS”!‡ß¶+ÿ])×.Jè³s]-áÕaßï¹ó·l`N'7·Ÿ[™¢œÎßÛ_‚÷ƒ}XÉ5'LÿçñrØv¿?¿÷chBøèÑ ø#'»ZÃÇ-‰e¹µ³ö™§/Ó;0zî¹ÿ¦=A ïvçû9†3JÌî“qÎü13ýÌP2‹9 Û“µù÷Tå¿g÷Ÿ¹yB"fR™å's´æL“–Uòæ[áÇ¿eÍë,_V±ê-±VP43ååÀ` lj%‘=¯4¸/‡Zk‹Ò;…ኅYù¢Ü¸jÁ™Í5?¹eÆÏyElU9¯/wgA” |Ín/µx·áºXiÙPa}<* ;¯ÿÞ¿v×ÆÙ ?†¿lwUB¢¾ „¡uœeæ_´pªGƒ5ë×r²³Œ)uJ’’çÂØm»fê›ÅÎÏI]#ÐäÕa õÚí®ÀOÈæ1úsùðø¯éæ®C©¶³â°0º)=¯€ãÆæàÒù±p¡óúî"0UÉy;_}‚r¶Vò5P•ýN/¡ÒγÀ¿HtÏU_ߥ%¡•5Ë ‚‹ϼ鉵åø µÿ žÕÓ{ Ñæ›„k»[<ذÃsÿ¤o1ˆryšÕ°=éyÕ•Ìâ÷—~N…»Eõq“}ч8/ù{¶Øï|öIð1ãL(03]s:ðê0H›kÍ+8÷Ih Sy§Íçd{W¾™Á¿Û7¹%ÛR ‚+ßlª‰™Ö%©Y”½ƒSMx—ZüÑp™@ÐÇïÕ ‡ ¸Û…€à›ŸìþÞ§a®ƒ“¾*Ïí¦m‡R¥èßîO…1;ØÆËy}&öØ[c¯rpdÀx|ø,|™´SÙz«n,Þµkø¯¡Œƒ2ö*×^SqjÏ„¤ÕKP¹+•woí-¼žè=Î¥ã^­Ãþ„çë¶Ô]J•䥒¹4ý‰ a´ÕîÍ€41¬”¹'o=ÿ’©ï°óÇc·iNOκ™êÃóuc.·g(ËE÷ý¿3sÖç£N¹I^µlS­3ó~·4rPQvB '˜+-c;çø9S-‡Ñ4Ëè§_¯3÷?Ëú3£ÿ̃Îs©Ío¨dåncåæï'gOi<óÉì5=Óï¿î ?ýt`ã|?_«{(õÔkúŒüU +kÒ{Ur †+”Ûj-j€î×ÕîŸõ4‡ñî@³8ò‡Àó=.¬ÏÜ Ñ¾Çíî?z9XϵcHðy²¾¿EZ¯8?™+>GÂ;Áíæóyåz yKoÞZ=Îë[™Çþ•/·.¾ ¡L9sGA5ƒ–^¾Ûˆ [ÍÉv0ã®6³žt„ÎÊñîypP±ÓTꪫÞGrWæyî‡×¥¼ªßƒºœ|¦¥{Ýf£Šñ=äFÛ$k¯«X­ÜôÂwN%•×gÖ¤lÕ ‚ËÝ2²®14½9uXÈ0c—Žc˜-gù·a‡U}îâûùš=Ã=‹ñ7°üL³좮Æ;“‹L9ØõF\ëpvÓáA…Mzz”v—sö3~3ÄVVE§!X¼Kg>­¯؉–áÉ9nÃ%¸wþž¼öAf?ÏûSvÿ ýIì ÿü‚ï§Ÿ¯bö¿øób5ƒ ŸãC¸Ï«Æ±jOâ«~2OßÏÕá²mʇ%LÒãÜ ºÌ³ ÜýÄ™ÆÉ`ž¿Ëç… žó³E í`:{àsÄ{’\÷“plgäy·»%—п`n ŸcfÐâÜ<‹³ïÎõ–úþ®»bÕš»¿é³P½¦U›²óÜÞsqîë8ígÜúIJq®½ÆÄj0n 6Eê4>çjF‰œüuýU¾¢µXü´t„šñïI¹yÒoÓ+̨¤´ùYó´°ìA²Óú÷nÉuÞ¢`·Í§\I8™s}Ã#³0OD‹fCföÿˆ &Ú¸ÊMÏ{¶Þ>Áü–=\+,)]ò;½g7›goårî™ÚÖ´ÙCÞ²Ìfàš…éÀ’ßB{ó]ÂS‡š\à©øÁ&]SV9Ȫ÷fj+P¹‘q–O«”0cç®ߥ'Fþ3CIzR™v™ÞS\ÿúô»MC¸_2š„øŽ—$á0ëI@i²[Q'lâ'ÜÞ¹ír-½«å\ÐÜÄCÿ¿×«>¯-ßÔŠªQ*þ–Uu äÀÉ Ö']Û®=«C7¤¤š~ã5‚óiûãúa0\®Y& ñ=ùú† sîtøæÌq²BÂæÌÃ;vfÎóù-VºæZ³ZÅÏ'ø´¶µ¡*Ì÷3[žO NMª¢ð¹ýÔ:-¦©¸`BŽYø¥Ùï½ñ½Ùù{&ž5ÊF[üÑ.7N±YöÔ"Ôö6öhØ·:"ܤëOœ/#6ïÙ£äàäÔ3p–ÔôÊgÚAf™ñ,¬,Tm»h¹Cƒãðc&tλy­^o"PÙ$9´0”çÄg@ì€Á`|M³®é«ºÛU»a9û:£ïú€k&áÕ‡šÇi>:'SÿÕªü6´÷HR#Ùšñ<ι½(!ç‚4_~P]™¹«ô#þ dyÌüÜ÷¶©D%÷ic8{f|:ãλzc6;réeŒ>ÇFµ ?¦9í6@w5ñMÕÇAˈ·{ÖR~24Ô,º,™><ûKF°M"2Y¨Xìð_g¦Íà4p/>¨iB®H¸˜ë,¾ý ß+ðTá¾]~«å—P˜“©åM¹üÔRÊi‘=4û°ô•aô]÷†º×{²]ÝWÙz·ÿ²þc»Ïò‘¾WƮڣ³øÑ“u–[ºÏÎöš Œ«îd¡EMÅ!Äqëa«÷Øðë¬UÅÚasð„‰‘θ)mf"KiÞ`”@ß5þÄ¿îì;ßÊ;‹ÏO(Ü9 ¿ü;Ðg TÕ] ¬7ÃÛ©Ý´‹¯‚þ÷jÏuŸÜI>Ïl"—½ðÒÅò ujar÷]Ó.=+‡•s’‚ çg.êŸøž%|Iïœñ±wµªh­eªáü¢{xoÌçòl¾·S²3Ç¦âœøëgƹÊwÖ´Ãëù¦·LS´Á“i "÷PÄé07‰Zñ†÷G¦œ­KæÒJóå_ùøÁïÌ´©>ÕÂkUni®¿I2'œ ¦»ÚfÈÎë[Miꛜcéj¤ï×J õ Ó¿«”n±ám/R¾¼•É.¯÷”«.aÕBø¾TƒléRŸU ð6$Øp s¨Â-ï¡ÚsËÒ«y?Ûƒ×j䵦~Õs|k’ÔÁVN?X^wvÍìØº»¨~Í6_æÞHrhA?;xJŒr@üL Ìa[Ë…ôlÉL‰ÆºVa[e4ƒyï(ÐÃ#ôRJ¸ÿ™^/mƒi;ïRÜjñ¦£0£YÖT¶»š÷ÎR›ÖÂP¿BªÌž}wŽ¿¨>¥çó÷¿òeªÉ¥ÍïPÊœoB@Ž’Ã6f”ùÉô_:ýÌî—«¨_œñ¹Àk,ÙiæñÌ?¼?ýܱ&3М€‰÷¼I_󭹋Hë²NÔ|n0jÐéSQm\C ƒœÉ6Ð7/ßÙqSOMìqæ»Âç¿ sIЪ6b“U†Þâ§Î‚ŸÜ6zLiüó.µÚLÃî'­ËDóþ}ÖÕüêkM«,6wMž³QWW®ÀL3Çb! æÝXþÐ¿ÜæX€ÕYpO—®.L'ÇÇpÜô$‚þ"Ï«ª¥rSF]æñï†VÖæ7㜙òÊÍûxæ[ÌI¸ÖQ~ÀEF2=£œt½gËrùÖçÄZ°¦uý0”Æ¢[WíDz GôsÁæy¹èf!æ]X$±„­£Üø[ݭƦ0ñHJÓÝPûÄÑ?ç×ïRžOUŸrö-+.®Vš,‰Ï{¶ r h?ü„•@CyÂ}zÂ}_ ‡ wáÎsàAÚž»^rLø­êâðqºçáúK¤>/Z‹xJ3¾LÁ[ËXÊ!„ùúûì}X´N7O4P&¸·¤…Aíƒ[*C¤ñЛöãIpoÀuG“¬aÏý¸I—|wGá<ò»×ì¾ÙKåì…*lãña•É!—|îÙô¡9w>rŸÁ«2à@×Ú½Ö„™¥‘:ñ3Ú ؆è:†©8>_çïKô“ÙJ޳þæýè°¯cöÀæïÙ–ËgáêŠ]x ýYŸq„{-¸¥Uù •—\¦·žç"ÒçùbÐ[&ÅUÃî©uþzvö•bŽ|ŽdÎt¶œ§ƒ,ÿy_ŽÑ$rág.ŸWpŽ ôÁ`½ÅŽÑ¼vìá“2wÃæ)-í0gÁÀJöίW“«ùúwWÚ îjB– 5­ÈfXE´(:k9­–juŠ,cjéÆ"œˆ—Ï.ß›COÌP^„ãQåã/κõß|^oôï«MÖ­Àœs|•ïùøïÄÖ‰¸un5fÀ9[Öç&h9@úr>ž@Çò…¥óìgiù3Où¦©×:ÊÖZ.õ›ÐbDó×­[Ohk\ÜzrL1òÑ2GEnYºÒËg Âì—Ã~î|‰'¬’ýºGá›Öí2Tذ§2…&çßyKÕ‡cÈÞpÙn²†û ;q§Ç…!2§¡f1giœE‘‹·­»ŠJäÖa{L°îF‰‰O?Ûò9ÎwõëgnÆÙÄ¿‰ ÷ÝdêÉVwݾ¶oÔñO\üg3®3îï_®T`¯ Xè³Ì¼,JèFr³ø|ÒÜžË?¡¤?±ò’½h×E‰O}.u%ýì ØÉg÷™Ë¯Fö»èíUgsO× 9òÙ=:œÏL2ߢG=8¯2—ÏkÄ‘çœCN?ëÜ~~×~ÌèäýÀ{‰ÚA®ñšmOØWDg£]‘f»?&œ¸°kÀs?v~åÊh­7¿Ô’vRæš;à)¦¾Á})ñ›Ý^ï[kèÙpLºŽóè{k,¯Zu¸Öd¾(dw¸Âqc0àãgðæ¦Þú_åbüÿýfðï*ø&¥Tûï-ââ¿—È,ÕyºöZÉÞ Á†éΈóÜM˜qHàæKSh¸MЏWA‰i·•·g[˜?7 ŒyhÞj܆U)¹n‘;7y[•ŸjÄÅk7Oá.Hóù¸ggÙ¹ôr1æ2i{"™a¥A•s“–t½Âµí+Sþ&¿^Þ(Íùoñš1!#–TŠY€Ù~G€Å¼Â=¶›bä*‡5|Jp³( w_Ò§b ~nªž3b¨Ã쾡!á)A-Y쥇cÎü½3úÜU+¨À}_…x“Ñ7ÅhöS}ËzÚœËÂîp¨ÀLn+ô“äãì¯I> ÙÔ{÷UxòÚ]Ü·ºKù¥¸ƒèÜ>íçªÁ—¡¸ÅÝãt÷ÁýOÿéž­œY…B´ó£2Aÿ왽|¾\3™kDR¢C·Ë³þƆ]úõò~˜_,…%gâ™Õ6$XôŠfÚO龯9;;{`-Âû1}ÈÞV â¹XÓ„œ•îØ»”ö¹Iô¤ôúTL¤qp² €þ–Æ¿Ùêx˜óžU¸L¬È¡wć䮢ó¤è8ÌpHàÖmŽŒG¸€"ÿ@õeÝÛlÄp·öNéô—ÍÏÝñ×:÷>‹rÌuÕ”³ùœ¸ÕØ­´*¬µÏïºïÂŽbç›…O@_Š7% ÊEôäœwEÿœ\¨!`P^Lq‡<Ú œ|.wxúÌs3Ç«ÉFa61[ØžšTé¡Âó—Žüë¿_3=qK¶;H¶¿a©îp“bu”ç¨C Ûô,œó5“›€Òz8•ç.ˆ_9xýÊÊï5«‚¿­ÚðÞlËõ{îcûlhæ_y7’–Cn·µÛíÝk¥+ö”›ò]¾ó¬|B­ó]àÏž-®Pµ õóåê7I>îݲø&Û”©¦OùN6¾Ï‹ ‡"È33Ïš G’ûç_i#8Á@y_Ü3Hã}ÂpŽR¤¥_­´üÜäUSq¬¥ãfMs ß˜[—zwr%µÆJÿL8§¿ôéË«j&Îë—â>Áh~1¯RC:7[WS움Çm¬ábá; noø]˜õÔ þ‰>Á½ó•éw¾Ÿ‹¥dËËvW²ß 3¿–[_¹ù?Vðð&pîÏúï ¿ È,rJW> ¥ÓïOÌì/]«Í08üpßɃfýK.P¯»-ÐiÆ¿ë„| >Õ¿§öÿ  8Ï0+OÇ\‚*Íø0­æ|ðÌ<„æ÷l|tà=#ÉÄlo~ì °K+ŸVÙwRɼÜ´ œÁh9ÆpK7òîq“|L1%fg¨3ç_±2ž÷Ã=T{¨É·&áXgöl~¹E$ýÜͳi¦m³eaʲ?ûÙ™>CcZ¼x^Vâwë­êx<¶ãñóN®>éÜïÖ<&_l4Œ.¢KÉwùÇŸsÝ ¿î‹¿nZ‘¡³óè„Â. Ï­IR‡sÌVàqåЇŸ÷ìs/ -Sn¬´cbó^dÌïÔ+°¯*ã×ÒT&%æ:¯¼;¹ûdÛÛ€ŒGe69¡*Ùº T\}"͆K#[ëè Éð€0…ít„8΃z9§¿,õ¹}ÿ›=Ìëˌ^ä„弞ß:É>»&Xs¸k«_@–ù³ÂÌNn1/ÿÞì»oùžÓÿÛ ÿî¿[Š=wÏÕáàÏwnw{ éLÐOµø¥Â©/|R÷ ‹é&k Âyω w•ÿîÝk S©>ôiú¿žñ²‹²öÎô_aÏgáÿþ„ ß•ú“ˆÈyŒ˜å\iÎÅÚï‡Ù’GåÕÊÖPÞŽ³TÑ1ùÇÚö^ìËëlzÙ~ÙÖaŒõ\7(–¼tÙT5Áæ¹çr90DvÍÄê:„楅¿ç ]‘p´•ŽJøÒ\û{˜\Ä-©ªGö¿3ëÎÇû^rðà³#Ê÷g¹r .ÿy}•„e™s¨Ù Ër‡Å•·œ™9ñV *Æ¿í¨Hwa–⽚Qj9VÙ7“Þ!J9ûîRž%Z¡a‹Gl]%·Ò–1öë%£Ý…QO & 9ÓÆ<±Û IÚùðû/òóÖ³c*ýßea/bŒËˆ88¹ôÿ a/J.,²sáœOþ/Š<šs'g—÷Øҋ`­Æ½î (áN÷˜ ]jH\Œ?¤©«ÑÐ^¼wÝý Ⱥ¡ö ·þ=ýæ=4ß!û›«iøžÝ¶)ÿ6Ð_Ù}·ð–9×ÞÎË;–÷6÷À ×]l=éÊßÿô”%Ÿí¼÷¥ú‚¦2²æÌy‰ ¯Üžw2·áS@mÂSf‘ XÙ„Êü´5|î}5gŽ8¡?a½Å‚M{³z•[{]`’‚õ@’jøäš³Ïçën"æ_bÝé=LO\{ã63ÃÓ¯·ŒÛ澚 a¶$è÷±Ê0ä&Å»ÚÌ‚KÃÇm©íÉzíÍë=ËN Uê†ÝnÐt(òƸòÇ;mÉ’ͼÜã½9+_ ¾&ÀT^?#þ®óNqy’|l­£åòOšÎß_WßAŽï Öï”°3ŸÍ»G=V§`ìê¯àÕÿ2ÇL\óàmÎe›R=ßµzêwK³òÜEª>q+.sÙ(ö¼Äš*&ÏTÛ1·1m‰ð®|îÑóe_UÛ»C€eƒKgk8ª<~fß42´³«+á#sÌÏÅ÷1ÌQ1ãÎz•¦ÜH}Wæ9{´wïù_Ž<ï®,û†††V˜±šÉ6ÿðGz ½ç©üÚêA‘‹v’=†O€KÐÓ2¯Êî›ßé„ò¶î*?[x©'ÃOHA1è?¹c>‹ïnêÝkÚ qÝÈ~wð%ô¿‚ä™CìYÁ§`ΈD—™˜Ñw݃Å}¶ùP²kÈ®ÉÜ›w­çc]&¾Ÿ;j¾å»‹ÈQCù‚ÎN?YÃk¥Š[on´·Lz©D˜Ö~À®iصÀ0ºñ½Ón ¾yœ¤ì캹¹¤']¯¸Ó™ž´ŸÝ-¸äDÝäZ;†Úü³ö]µ8{6] w;TW‰‰:÷ ÀSý©ôû-Tê¶é’E5)_^C(Bm·çî]{s$3èn8öž  ÊÝÊi¨2ô„‰¶²bHÀ©‡#Sf^åPÁƒk%UÉcæ2ÖSN[|tÝ3`Ì›òÞuÝú~üëûþ!¸dÃЂ÷k)|]ð¿dîRÉwì] ð{¶¥Ô>4²ž×#ÊÅr¶ç"Mlª[ 0âÂÏŒÚ,«Î‚Ìy‘¯Ïóe¦s^îTq{â^ Û(™ý¦QYñ$Ùy‘  ­ÛãüôNìùm¶\ïÁý{jЊìùþjó%Ü7çïÖ©>lÞuHà 7òòE˜Èü½ƒ·üòÉ"Ü'}Å$æÕʉó3ý­Öïßzù "Yˆ5·©tñ©çsú™—.’Çücä÷Ôùaç½½)Jç=†O¬¨påïôŸ^άöÌ~FyÌm©f½s®sg]1ì+Kíf\ÒŠª—`W’yï¤ëŒo5û2¼qÀsoÊ<«â¸va2LB)…ã³ S½„œø’é4@ß]~ £÷€¿ÂSq°6UB¢' gÀsª~ŸÖ üIUcʘWóËl~çõ)4~&DS\ªJ@ îß2Û˜{fP¼öÊ”»æ`J abfLÚaPaÅôÊÙ—&?ßÙüöÜ5È#7Ó‘Ÿó½5¯“(eC‚f^M‚B{-;ëÆœ¿Ë,Úè?C.*¼æ“Yð>-€ß ­mÔx¯Î¹ÜË‹Ó?ße¿Ò"$žEš‹ºŸ;÷« ˜àU`ã2yÀô*f>žãÉ+bA®±°ª3#3GÈÆeŽL;Å>™ý¥ÐO•›?\ˆó·Á÷ÿ¡×¯%½W+²å–ûvåþ»¥×÷{öTƒ¯ŽRÀ‘a€³ÈÖì'…B·§ß ôH‘é§É4¶j^?…ÏЗÒ옧€tŠ)0Í,mñÓ™1ظlyS Ì\-a%ÁpŸzb®Û¸ù~î7VrHopò…5gÒMÝzk¸c ~CX7€þ6•³ó~™Êb溭¬ÌØ®Ï÷ ¤ÝÕØÇéºA‘[Ìé/ùâÊûŒJÇ¿rj_>t¦)«G¡Nm…:|^*ª'a÷+¨«éq¸Ñ{Ê«ü5 ¹œæ’_{ö{N©»EWI‹îÝÅš­¢EΩv^g#J@óM=á½–‘óñÖŸfdÌ›‰7ŠEëøù°Ö{²³à¦³¿åFlÅwBOúæ)Å>êîϱ¹€ÎkÁÌ:‰=lE¥‘2y\’™³§†YËT³aÖs–[6{‘ÂDz{r¬g¬¯UÉÝqoY>Ãz;W0ï¥OÏÃu¾Tƒ9e /Àê ÷Ðü‡«ïÿ6‚Ðÿ›²ž³}‘£J·§||y-v~g÷mçÄì>¿Å*Ûy ýiåÀš6nö%bjé"{âw^Ïr®Xrö ›Ÿ+só/G†g7Ï”Uw,$`XWFzvJÌQÜô3Øãæ|<5vÜ»gÜKòÒõjëÏøWxTL~YGÅi,G‹u–š~ù¤:÷lÃ,“ÖH”rAQ€|¦Vý¯ƒ©×ÉöÌz/@_*=E€±1¯¯3ß>þ2ù*7ëú[Ö“•ÓlÌ)U¨ãfâòiv׊L~èô›–cVý>9VMÀ´Ö˜ƒ$¼f{.?¯¦[SŒÌzç_=õ²yû®|ov¾3ú»GoYw1Gåì¾÷Æ€„/Þ”Vz1äuæÀ>—æ‘sª5·ÕsØÌÀv“ÖÂûÇ\sfËø8 Ü$s‘”›9~:àò¹Ðo§^:hÎQ¦0Çiêμ8Ñ}wõ 6–°©Õ}öplÝÐïÊŒá¾ó£æôó¹ÛÁ„ÛyÍé7诬ÿ%Ÿ]™ç#0x¯ôÞ®‹ãÃ\~ wV€A9û. üÙ¶kü+süä‘{† †¶Ì÷»™ÕàÀ³±;¦ØÏЗT»V›ñÏêÙÝÍãû߆ý“˜Áÿ@sÎ!Ÿn¢K«g¶dÝ€@Ÿ³«+'zÏ*°2àoŽdî¶ó²ÎÃÊW1fú bLò±[­á»ùñE2õÅô›ÊÍ6±åÚB–¯6Ïòq:À8)=h¹˜[_VM†õ{=äÔû \™ñ1øúØ ÍYŠ´B){'ûøËg *–ÅôVžÞ}'³°·ÞƧѳjÓUCø"<5Ù†¢fnö-Û,çhw›*Â}ÂP;ãú8÷=—¸gÁëªEÔ®FUW LžñÈ0#âcó'Îú;gOÈhéL—G™ c e2·[Ró˜-ÐÉãäÀE¢tŠf{æÒœ‡þ@Þ‹ËBöìÁ\aŽû 8ÝIßÿ2+ÆæÔyÀŒHT`Ù¤õL˜¹üQžûå5gA ~ª Y¹œ]äúßùúW`Æ Ús‹äCö?ß3/BC"SDÈ2ß!ï?üÿÁË#@È^+ùpTMõ±|g9'¸Ã`Ûø_>nó¥F¡?á¬}dMïá';@ñ*ÆgÁ=*íW}µóò "õŽ–X¬~š\Ÿæ€wÝžk 6gêðT¦ß4S 9¶v]°ëÈÜ9Ls¸k‚«ƒYã¦bºÃd‰¿ÿD™ªaP^ú0Îg»—À½@ê]ÓîyO:£Ì㱊‘³û†Îæ[ëÝÄÝ“èÈ–h)ÏÔÖÚ8Å\'íÍt/ž5Ž<6‡»§¯Û^«`!N¶ ŸˆO[%ÁwBµ#;l¨'Lÿ}9sos.¯â”—&})ôW;¦ ?Ü„ÅE}±fŽe@KWÇ!É'ÍözüçñraÑÕ‰‚õU˜æ‘µïœ ÷ÃŒ—0hXs/> œãçÄGº¯æŸëUMá\Vù¹üf3Daëåê&g6GNñ;œ³ÓKröÀ<=5gÏv»$+—°ž. Œ¸×7X£ÿ1!Ž¥Ä8p´MKà¼s÷ë¯Nå‘Ê:Îîyý_+ÖùkYûfä—3ÀÎàoÆœ½sÿ%WzòÜ=Kvú½Ûví¿ËkDø^N åÌ ³©Ý®½ F ñï$Ÿs¾žn.–14³Ÿ«ƒywªû^¸+îÏñŸú ží€÷ÊÆU©»‡úW†žy} ž–Q×|Â`ƒÛðšR”á™;¼žÚl‹ï — ׬ÙâïµæÎP¿ºHËñžá.w[çòù]ž—‰.ż·ê‡Ù‘€€Û0½”ûÍûï&Ý3`­j@`·ò3öŠFzÕÉ×MÒgyÐÊÖ³[¦šŒ ÷yî|NÉ­ðÈsœzy˦$mî¼:_%^I33ýEâ~,ÙYì|ÿî. i"©G® ‡{³(§Öµˆê°~¿}‹Í_j<å¿[¼é]ß°&ßSoÇq¼a%¹ã¾ÖvÛåDã3uˆ-Û˜?&Ðô”ĉƒ-¤s^³çy€ïÊßÇÏPa¶H1ªÌ™|±U÷Äé¿öOs"6S®”ê=¤Í¸œWÙ ÖRLòáu9µö^#ÏZA˜é§Y3ý&ö”dçu?.gÿkþ÷Çð¦U×ùþ=8éô?ISn›þµ]¥ÞcQN‹{ò¯6³#ô4½‡m©w ݧf?Ÿ Ι†¶d0AÉt’j身[úïM~ßg2ŸFs¦ý@Š«²Çñ!”7áŸÜE<¯`iBAJ°ùž¡ÃÖèøáL¼ÃË;:<((_¿\Ñ [ ˜­^|q‚Tç˜w#­“.ûVºÀ •ëÂI)hËÇó\Šs_ÍÇîm(è쌾ՊLþaó·ëÚí-Ȇ¿l¯Æh§œ‰_·BQIsò[¾âE|2ŽO“÷G`‘mœY7W¾ò÷„h&Y‹ÝÒ™në4Æ2 þ–'ôë¦ñ˜NS’£^*öÖa3J½gÄ÷ÞNŽŒPÅ7×ßí¿n9rª4ìXì|<ÍÂ|üÌ™1Á°óN#¹^ëy´¼õ¹ô2ûE‚yºyˆ[r‰e;/3m$´Ì‹mĬ¿ëf\ëY‘zdÛpæ©jÂeØîÌÍÛ®¨(=ý̉²×‚á 3…Õ»óûw6ü{“¬÷ÛìŒü¼2ýÒø,êïœþ³Jÿe¾ß’o@?ïjæì™ýµr¿M¸X=àdÏ¢©ÌsÄR;k•œ©Š¢YÞó'»Ë‹×.ds=ƒs´lo%Í’ & ìn»7ûrž¡€&Ça€£ç·8Ú¼fû¹HšmÏÇ ³©;ú^ì)ëF7øÚwŹ^g÷Mì!%‰3óRCˆÙ’½XH¬¼^ÙbR8—¹Z™óíÜÄ>;ÁtÐÂÕÇ:Î|sÏ Ë„[ɤRïÿ¬dŠÄs½öå-­úÊyïðýtæN¿)ó¬R2 éÔæNãéŒþ34:åò­ßÿÌî;Ço9Nw+ó˜ÀCB—¯»M»L âJ‘ÆíõEBpî–Ͼe¬ïÕ­gvßÝ/÷Úã³H¤™ýÚMÖ¢¥3WÌñ3ëO˜Â±âóNMÒ¥˜þ`Ó0¯ iŠì˜÷’<9Ÿ{¥æê@Yû½X©Æk Q¤ë–Ù˜Ò¹j¯kÖêÙêÖ†¯ãäÙËŸG^]n½ z>œÈ¤¸øôõÞ Ag÷wÝýR2áÇ*ø¥L_*C%…É«ë®ETæ«ïÆh‡û¿%3Z 65ã~¾Þ»äšzQ8†ïZì=>ë 1ãhö?[+_ÿ¬Q7Ý•Úi±ù²ì½l1v*T]l9‚Tf˜L bÓ'ÊeºPÈãtÞËSóÞBí`ϬñY†g{.Ô¾ Ûžü~Óf˜ï¿g÷é 9Àâû_vDÜí½ž¹4+[ôóñv0ûdÆK)…ÝêG:› nxOÚo»yïÕ€ëJ}̼¾?á=ãLÿõ“|ÞƒþßFæá1윔ïJünb.%Ÿ7 ÿg†\WH`¹ÏRìaàºëöâ;H ¿ûda¶úý®®LÿYCÃÔ“ø¢f¿á>­ë(VËežÁüÛ¦‡ôX–š6—,áÈ¢ß8ûkxg5ƒK¯•Åœæ‘X·§1KY¥j„¹E rÞd‡'E—g°ÍËÞøãúLIfX‘tkµ5þ dK“¿bØmjëIçìíàÆÍ'h¼Èxu¿qìRׂ)?žõ©Aù4²FÁÑþr³¬[0¹Ø—T1àKÇ{ÛƒîÍÞ·;þ ?žî 0|<ÕªKRJ„˜ï'|/‘Pþ"3ôV¶q!ìÔ¸ö½8Qχ6[,h²û\e,i©JS KÒöOå;[J);Äç•-=øRb)qR‹EôçñØ9àñç%ÁYœ~BÒRÍ·xhÑ8ÂÖÔ/Ç\_kŸÜ8ëpÅ4''‹·g±+3·{Xòý¼ø®`"ÀÙz»Ã;ûº{á¦Þã|ži9nÌåöV¡±.¾½W½›w˧¶xŠºcUøRú¯ðfï(°:ß“'í#)e$×"˜cžýóAbf‹ÁãÏ·¾_&uð¶¾{î^9¯#‹†\ð*˜aîükFšA§¡¿eÈî†)—6?Mï¹¼ñ*pϬPá‡lÚ9BfѬ¢CøBN?É Ì|Ôqrj¸àjÏ”aÃÁsrd0[oä®bt)—ÛœÈ~½&ùp §¼)_ v7z…,+(XÏ`¬ØÒæ”›{]’‘÷œôu‡p?s§qË»}ÒÕêM>}åì9z⬌>Õ“xÌÝ'ô·?yù nàYñInüç­ …­dÅåß¹)íÃí¢]ÏŠŠjŸ€äû¨\W$¡‘g4£1ç;¿Na«%ÖááNÐÏfh{úòç<Æcæ:B¸Ï•×$Rƒ]óàݪk&½û”l~Têæ'õýgN÷Þ,»A[ˉ²²m0j–?L&®Ê›Um¬NØí&YwÐÿ7Ž %¾i²±ù®œ8c}‚àÏ-OZIÏdh¹”ì&µCR5ûVW€] ,EZ~~.|ü?Öq7°º$W¹s~˺Îj—rÎ{àëm¬~3Ç@b³ã¥ß_„œ"Ÿø÷ã´MX5 ó˜¹ý®tÏ4/0{«“Ãg5øxÌ6\´TÌöÖ¬`¹¼uÜ Ä¹ÐšF2¿Â)ƒ%3?¹ò„bœ”yçϯÜ[â.èLš¥'Yà#(1ÿ˜ŸÐ!˜…B«qb%àà½t—%½H>¶ý¢Ûë:ýŸë Ä“Æ`=~Ž$Ÿ¹cIy"„­ÌzQbŠãà ‡ÌYÝ}^Ÿõ"+Æpɱ’ ÿ5Ó”ù›Êè0<`ÀÌ=é=–ã$è÷wMàaîß–[„ï ÜÙ¶]sý0ØÁšÀ=Äz¶·Z`‚zð¥äãPÖ¢œw ŸKɇO ƒ9fAçxîáÁuoXaŒ]@ÔÒ™_a5‰w¦Ã'•Rg8æ®=ÎkhõÆ\ÿ~17φׂ¹å>kÕ¾ÖLpþÞ<õª ìd‡v~%óÒU…Ú¿‘m/Ròš8—Ïc&è7}.ç\A.lÌi1ÓPý dós2b)Ü d›Ðó.ùÌÓÛ÷”W°<­=Aó¹æ\Qmvsxl3ž6Òš1±·1èw^¿8úÙäw-éÈ'ÂO‡»Xy;r}Ÿ¿óa\nÍ$¶ZW«Q}Ý^O ¿g£ê\³1wvñxØ|Ï„CzÎ3Ld˜våÆ\×£îŽ×üé 6L“vHB&IL ºpïòzÊPZÚ0ÚmŽ'zÆ“¿Î§Ìn¾¥¼n©ÄÊ:—zLÉYZw¨¼xÝjì<®ýbM>±Ü§bWCð=À.N|AgÑ¡Wùõú¯üënìæž-Šênò Ø=tù»œ+NõkÎ/›¹ªbñ·¾¬Fì,xéÜïm¸„ª¥ÊO€è|víßòjö º™•é/yM×J;¨\x¹ó $x ,s«Çº¥SÿÙ,e±¹ “H%rÙŽ À씪PlWe8ʶ]ZºXyÁJ‚3³Ï2n5kfOŠ@OzÆlÏ 1á‘uÇÙÌ&c³'YS ø¨sQç4AàÅJ©ME Ú­¸¬ÑDö3¿Åggî=g‚ L'ØóúÕÈ[&\§FØ‹ÝÎ0`>±s3™÷Þ† Ê„³¥%O ¥“¢ù5­óé0)…ÿòêSÑ‹PÒwC|æÝËm×´ ;º%×j<g>~‘³n2Ï]œñš†0™çôŸzüL[”;8Aóî\Åæ¯°géð’‚›ÌÍ»ŠBXÏ£²FÐ=»ÿ$ö˜ÈõšOú]¬ù" rîåî˜óÐ&¨”°£ówêÎuW˜ÝÎïw Ç“KmÒÏ…’‹—tîß}w8";gì†QCüSôYe¨òß®3‚eÂOåã­eäQâÕq­µ”—ø4ñx¬‘ê[8nKŽ’r¼çìË Øw²½\µ¨°çË*=fí;—Ï<7*‡Ö„q+Ùɤìê.VŒqVÀáÃ/•Ý/*Qéú—$¨I> –x™ç´uÒxf¸¼ñ‘6˜à‘–ÀL³CëÙ¾s Âa%÷Ï2:yä4c†gñÉÖ_9°&,ŽsTç[³4Þ9ÁW νnpÁ5S¸Ûrˆî)ýÉ:ƒs6w¾ìÕ1gAXIs¬çÐb1è²U™süünÉzÒ5™J&o„;™Ë7|£ÍOå³üY ˜OL’aÂÎëí°?¡m —}¿¾jX6€O:Ÿ/¦'xoðw ÊKGŸw?q„@Ÿ£QœõhTlÞ}ö½p¾2¤ã*f·]’v¨ÏC=~ßÛlsgL(Ï–}*qñ½ÏÚmÊNdÐ߃ϑ÷6ïY³eþž³ŸÛ¯m(6ŸÌhâ[nÁ+»ëùÎòrdÌT>å_ŸÎ²\% zlfb‰ulü”¤r{+ã¹2À=pçÔ¯­À¦ºJ"³²Ý&·TÅÃj~5>e¡µ{¦³vçü}Y˜¹ûâÔkm¨çÊêËÙz`ÞÞûäw«aÚý$»fÔÁ‘×bšTÇwëí®dlxm{óª ›[ɉ€™cÃt¶^¬wHP »o‚OdÕà`Ã"•Ü'ù÷Δ §K×xÖÖ©åÞ˜ãçñ󵎵ãgÆëÓ üý:ÑBžÍ¾¼œ à¤ÌVH‚]ÛÄ áÒKÒŽËô,¡2‹æ¦a3•©Ë1GÈûg–p·ÓQj–#É¥”ÜJ‚žù®÷L(ãFagï˜ûäÇŒ)½¬f]ƒþ:ÍEÔ)Ðÿkm¶JMßÚùô»°[fOûÿ~‘IÏ•ÔùÜñÞcÈ]-ŒœiYí1¹‘O=­ëx]ŠaOÅ!Wi,»éð`^̳ý”Ðóþ׫«ÁaÀžì @¯Ï ý­Áçô¿øtpü`{E¸?³Wv‡õÍ’ð©¼Ã§ùœR ý®XZïŸb8ý®rŽbÂŽs¯Gƒu¦\«)Xv·gz†Ì: ŸÈ3[«n1é›Úñ´‡s.¹Ä+ßÀz;Ð ÞëÎÓ[ÝÆanƒ~íwÓíNõq.¿W˜6ã0àDLzjãðʺéÖ´¨ $L?sxyÒJ:×”v5¤/s FIÅáÔÆ¬*a.AÀž57ÛÞЙ¹|+–¸,N¸\ »Î»»€Š5|vTëç’\µ{öþž§6Ž^9ZøŒ¹@O¯ÌåÖÂ3ò"7{3aÌ”{¨p-ºÜžŠï\6&à8pR˜mþc¼Ü‡À1çKBÚ,*ÑÓQoÅY g6øRº‘ÚÌp³%úî¡{5òº•ÍAÑ]ºë™f㬽~­OâjÎ÷æÅ+÷ïmØæëÊ¡Û4wµþ7fUû6»žÏHìJA;‰Usîýš Vº³•†õTcãlc× >¿ž—H›™ß%ø&L$!Äš<îtFŸ|}“ ÜTÍt tÚÅsÆŠÔÁ9ë{^ÿR r¾ßú< bó[\™7e…³«½>¬µïÆ\+ö˜@È'‹UÍ;çêzbr„á(G÷ ç †ú¶Ñdf_^;r—OÂŽÏ0€#ÌÏÙ_ç¦XÓ'û¹¸ç{öÜjŸW'ª Úî¾°Û«¬»,sY ô÷ŒþY’²ê 'wág†þ¤hôl­.žê4æ®×·‰Š–õU…4%“j¥ ׫^qWì!–Ø\~‹®S:ýåið£‘×ò—¥´ÃG×àÞà˜€Þ½þ«ýÐ:[.“¿è£ÝÉ3æîsoε3¿Ó„ø»ÇK“çž»BÃ\î™ÐÐûœ[‡S*µÞ­lã^{N÷Ô³w®‘9Eæ´ 9Ú&‡0'g‰U>Z|x¼(Îrèú;ïtš§!'æ½fù¼kæ<$<˜Í³fp½ѿ“4Ž ¡¯8§ æÔ,¸0ÌföÎpßš?æ=ð~+NÿÉ;öÙo´zJÄÓï÷N€½¶à£bøA5ý9;6³}–W‡³Vˆbƒ/kz|^¨o"„uÛìÕ`=RJþ/JCºñ—™f{Øàôßíç¨Ùu%)XM%u€•ýR¯ä—^†MAd1cÈÙƒÄEϨÌñó¬éÝˉòó ;.œéçÞîú`Wháp‚»3ÎsŽ“Ý¿¯WU„½ ¼§'f åÚç¿Z±Çî¶&úV‡@õƒ¹"aó/“…ì0`R ’î^¿î%¨|¼sä¥dT)ÓY¨òè'ÑÒÊp?ÿµ¾M5ãr<5mŸ Wu¸â»)Ùbâ– q ˆI¦–9”b¦Ÿ!é=xØIš{û"Ð'Hå_®½»HemS}#šéV`k™NS¡BAÉR²jµÁ⛞ÎüëÜYs‘ãÌiÎÌHo;‚~f8´T£!IäËšDD¸Ïï:÷oΨ'_Â\ÂerÜ)ÄF• R &tq_—^C³üÉ‹µ—’¹¾4è¹çÿ®É…Á³Át1Sh±£€cB –) s¥x-N†Dß[òéföÔº@ìa $óÛùþ=—oÒŽ+eãeÐ_A…a}Õ (JÂÏßâEu|†…dÃ[AÅu³>fØfÓÀJôäÉex^ÕŽÌëh;h’–ïÁÉŠëbº× Ï;|÷‘¸W¨ž¤Ä“NÿS²“½I\’©D7Ÿ0ÃÍóº«ì_c΋ýtY#2Ÿ÷Ã3KvÞ-ϾÇvŽgî‚~ÞEC+¹9!ugê?¡6]b Íù-g÷ ìÌê ®›D ˜1¹f™t÷Ê=7àžÚjŸ­®¶ŽÚ)=ìWq–—· Â6X¦ëØôjÞ“ÖÅ{À.†_¤ˆ0çíÆt޹3¦î¾(íšR6ss$úƒ–j*e¿5¯œ¿·`e™Yæ`Ýj¶ÒŸ1¡eo·=ií?³¿xJÑŹÛòýeŠÊÝz&ô›4e¥ ÷°²ÁñqÞz¯·”v-Ò ò:íU†ò<6Ðçõ2 Çf^ajÉ¡V§ª=LºåúÕNÿ”ý¨33D8ËL¶'ÊRÚ)Û½-ØÄ›½-¸ëßsRö–„Ô<æRågiɰ¾ž³AükUXgÉ·¡£I–¡O³sãî™÷t4Lçï~rÿß Òch¢ˆõà?$–g¶üþ»ß•ƒd†æÞöw=Ì\žgËÙÛñ±œïJáßGB7\rú æ¨Ûc…+šïpÊ`g‹õïMxp͇”$0'±Â+i†R+gS£ÉZN 0CL*ÔNï©vÞ¾sU7pHðèÿ­^sÝç½ó²wÖ5µY®ûÖ|Vj^2–¼ ÁP š“í ˜O?w”­¸N òs.ÿ^CsVìIàSCºŽA¹ïUž5,Ÿ2E¬^šÇúxpŤy"áÅÝæïIŽóÿ¥×ŒC¬yjL”² “ ŠwÚÏE1bÀéÎÖýÜçÚ¡ú Ћ–C¸ïðäðúT¯/YjË-¶üõ]]¾Zo™9.¢NÁ5; @3[_b—»¥ï÷3&ý³½¸Ä-îž çcÂËàÞÄÝ{â)-jØís/M!ÿŠYþÿZ/ÖO,£\Ò.HJL²×+¬bT.ÎÜÛM²ÓôÂî"ÿxñ0@7!‡9$Ûv8ä Û»ä2«À èü ÛaËל{ëô[QÛ½µ´- ?gðÀ㔸*n?{˜é˜ ÜL>èÑâ{)"é¡}«šAï^»"˜NÀ†TÂJˆçÂz³âJ·›wõ,cŸRàµóQŸ¼#'+ï²õ%xf4gf^önssíÓš¶qÛómÌ:pbõ‰™cv#0O(cZNÉqž”þŸúý„’¬2¦¼áôW>¾ø÷§|?_çú@ù×Z{‡pÊaêuMÍ 6‘ 2dæ=ó/Ý3^SÂ}ŠäšÐX™9*ÿ˜^bzÏ]žaó=×TCϱœÛ™§wß÷¶…HH+"9ýl‰žçŽ)ƒ»2ýS©ƒµæäØqD½#·¿ó}¹5»1Úînÿ%Ld³²Sî—àHrÜÎkçÖ–[­ÿ C)M[nµ%YÌø2ê¶`^Ù{­þ™¯5%¤«6M›|U㳚<tùéžtßÏJ5ü¼è%|O:úg~¿× û{#ïð”„hŠÐ;ôr×Ü|‹Ÿ»:T^&•1­Ã0Àµ/SªôU™{gë ß‹c`·“vÊÌD×%L 2àv+°÷oÿ?ÓŠ*sfmOXþõªnრÀþs rè~jKRGè€ÈÈÒÒŸ¾:„q¬µìF°K%÷À@NÌpKæ<\âts¡Í¨XÂÿ|—Ó ÈªMÇzØ6Ò²p!¯›&YµàóÎ+bXv]C?„Ø›ë]T†™Á¡±ê ü]¼(¬iO€ÊÙ3Wz§{]Õ!ÒŸ },™¦ÅfPf¦ Cíba±9.QE§$ØåìíÞ-Îi¼3çE* {ìbQ.{Ûœgf­u÷ïÙý ˜šŽRBœ&ó0·ÍÏù¼0Ø3ÛÔD¾'͆û)J{`Hàá<95}ÈW‡³è¼æì~(|# òºBhWŠ>ÛØªö%¸YµÞs5ÑšúbÖ¸]~«&`ÙDwܹòNW=÷áÒêñýÆ'˼üjŒv!G²6ž¬ƒÄ}šðc’-·¬Š_Ùoíê@Î…ŸŒÒÎáG¯ãiŸçïúxîsàs4œpáLb?þÖ—sðüÄ <Ì‘FR@¹t{˜qg&€`·t„ Ùð»Ì{Ùs€¿h -}Ì.ÆãŠÜfvðe¶u¹k6زbOY–Ì"1×¹N1&q±±†ÐüJÁ}g¬M±¡=A6›qY˜6]gŽ„ ›û÷ &Xë˜íÝ$t_¶¯%Öê×äôÏ{>¨¦ÒÝiW×c|R§/ïs²˜ëÅ'ºè¦y8CÏçÔ[šäcI6•ÞûIž£7ð唓ߨ8E㩀λOUŸ<ý3@ªðÝ:Íz&OpïŠý_‹”Â#aàÇEˆùcÞuNI˜ÅÎZ+Ûèý+| ,ÊÉ “ò£­Ýþè宺sï“Öþ“pbXÿÞ~‹CÕüÐñšÏ u¨ÙÅì>É< ¥¨D?*ëϳO.;øræd‡»}j´Mì¡Z—Ç·ª4î6Æ2.õ¯În¥µJ½3ªñ×f‡;ð6=Ã\íÓdØpÕ8qÖŸõ%“[vu I9+[ŸÞÁ†×_“ Ê$"þ C5ÃqÓrŠTÓ4¡3{ž¿eÉN‡œë˜xä—7ïðI(âÕ÷ÈëèÌ=‘5°éãHlÃÚcÝŸY|Ö4ø0;2Ë›.œn§œ«ž_daÝy8N=¼çYi™ï2Ü2d$½ÁSŸC ýIµ*@Ïç·”O¬ëobÏ©‰ü¢7P°Ò›æè_!É?ï!>ƒC¶€WPÄ:IB§.þ{n--èom%¦î„™KŽ–°’U>Îö þMÂd†é.cwÝóIBÛ{gÂõ¬qîeƒÓÍ£5“¸·“®¿å*ͽvVñ¿/ÒO±NC ¹õŸ ž»—O Õô™þ°Ù™!¾« ?à}ÅÑp0ïs¯ˆ×Y{¿XPÒÕw°ØI·xü^»MâQ9—2¢ºà¸÷Æã)º‘ƒó¶¹~•¿¬áu)è»Jpo]}¶êvcñ9ÇïY”!›„:xpåyô ±îŽOÍC®æ-Û]Nº;”w5ÃmÓÖª^tKãß¡‹ÇíËŒ|kª¸¡Ö”.¿ÚCÔž¾»§[Ë=€S Y}\¨L²6RkËÊúï¥åÏIÁm—|qi4mÉì.f÷Í,ä˜ÐŽj@…“ˆ;+˜¿g¶Kêl­Ö:CLŽ=°÷ôºÝÝŒK’3÷3VìU 1ÍüÊü®)X¬ÎœÍ·&'ç¢93Çì9ñÅv[RkÜ^_V,¼Ö<—9~k¿ìWäM¦Ÿ=9î`HJáT;¼Ò·xü–Ëô·Ø-@‰L„bœ \wr«bÑNX c>¾hZn•.ðJÀÊ&TrÊyvl:gƒìmzn¸€Ë93÷IŠN²Zb¿ÁœÓFî;iC)fU«zóó»®0Ø£¤©ïXu´–Μ/Ã'²óîÓ盾ýVû!§ß‚¹¼:<Ó¹Eyªq¶ì2ŸûðÓ\I.†z&Áôï–^¼j%Y:3æå[…Ï ?n5ð%Œ&\öð•ç³ðͤwúä7ü 3LŽÚ ªÜ±›jºþžýnƒ~~âïú¯î³rMƒÄHßEîŽàœé»Ú5X`?·ýI´ž;³bÛ›®ãvXB ûÝš®Sª8„AÌs;Øð¯WFS•9…n,fþž‹1'‡ %˜Å©“›uxc™Ä,/3ÇfæYŽ“ãYÌqzªO‚*Ò Ø^Ìæ.ÜyÉÌññ#=†‡¢÷ìÈ¥‘B°Â;ß™KZ¶’êÀa3ýîÊg©ÝË*y-ÖÆEŽk÷ìéU¬7è¿K’Ùü,ñýO UéÞcáNjÞï¸÷:À¥‘Ï¿UðMs+'ïÌr81…‰‹%Ü70ÃZáñ.1ig”«†PžkþÕšK¬–°ÙÔ/v´0Ð÷½}ïzfâßxN}f¢?ïêSÝàÙqÁ¿ñ™âÂ?K;á>;‘¨zä¦vzîzœ™V`?€v°§‚aSÖÌßßû¸=צ£ÅO'…™ëî%.*}!»"ø,J+Éb–ª,] “m*dâ:HOŒî'áËr2>W|äm÷0Ø[À÷{BNt¬³{1¯ÂWÙlY5¿¬¬š­“Ã?á‚Uüߨi•„¨3ý%Æãtû¯; ÈÈTöMÀL†sÿ•·°¿¯{±çBRÇuÞÐ&us޵‚¿OÞqÀÜ÷¿£‚äÕœOhå¼ nC<9ö]ʇ{1•Iï¹ÛZ=†ÈÌöTEE »%еg–ï™+å’É2ú'÷öé4šfl}±KƒÜ0Ôa€ï »^8IPÎÿî¿ûñrH0àÉÙè¹^n¬wÑ@ …g?¼sæ5¿5G2¿Bzww¾¤*™G7KÛ ¼¾„þÌý“:UT4BÌÿ¢» øIýË‘an›!¨ïjShœËÿT“κ1÷ À™¯o†ú Пi?®½ÌËþß쯰\)ç ›p1Ó_ž¼¦¼²$œ(qÆUSªªöR´@fö›g ÌI:z§½ ˆËg—3¤­¾*+lúÄI<÷Iƒáñø ™pâ“. e?žþµ…L :ð(^ŽäISß|÷s¥µqÎ$";ݺٷÔ{x{“«ƒKgºY–”þº«I¥T$ï¹j®“ÜëKç³þ* LÐÏ©™™ÚÒà÷bo#•ýýž¿gÖo±õÒRÒ“èJkŸÝ²s{.#f+²›MÈœ(°S«î3¯àœ„Ë@îôw°Á¿òN èá2@‚ÊŒ?!dôb0‹„ÅOP³–úwÞáþ÷–$>‘©Lú»M˜/§GA*õ×¹”Ü“ÓLíxpÙS°Ã'†d3†¶Ÿf¸HÂFÉŸ•¹Mv¶yK–µeºØüoTù ýIòá_?Ÿß¯ !Žó.‚[ãÂ4$ë¥ðHhQç&x2­yo³¡“ïÐÎÞ¸2œ÷VÇ'èd¦Ÿb©½J‰ÛÌ'T˜á“b²¥Û@+§Nˆy’Î|Ò{L‘r½±Úv]U(%ŸÙ†>å¶áŠ=Œ úÙÔN¯>vwæ,d©Ù;‰ëésÌûÜm¸åàqRLrÃúuíˆ zì×{Ê•>a=Á±¾•ì ¦-¯é¶ÝŸ)ýŸõR´P 7©ƒŸ¦;´0 uÝÀ9æfÿ_¯Ý¾ê$lzÍôwí³[Ͳ% é3rÁé?›fæÅ£zžÝ~ä¾»NÒ¦›u=‡¬OO{ Ͼ,·¬„SŠþ¶²ªý³Í^e¤åì;á¸ÓÄ;òZÔͲ{oƒ·q“® ?¶&¹ñë‘®$m¶8¥Ú:„–3+Ì÷» Ñw™¬‘ˆuÏî_9`~b¿OBí;è¿™mXrýó!¡xk#¶ÊâdqwþÞ~ãÙ†ñS^f¯Ù{ð½ß3 $í.4p„ _ÈéçžÝ‰Á,²',–õ¹Ø“ÀÃ@Îͬös­ù¹Of+E¶§~åø‹ü3{öï²ÚÀk=/Vu|ï\ê Fóž,S37Åò¾bha[7Þ±œÜJ Ч+ψ¿EÅ$«ljæÀ€™~ªÇ˜°DÅwCFç×ïüw|Ï4s;Øg·(+lি8%<þt¢˜¹ˆ×‚}>¶{³G•5WùWºðÞ;4ž Bì²SÇÉë *!Ï> Ž•×J®qóbý„- ¿[qqeq–tgB[ ÒйtWÌgP‚¡ï3Ó\Ó­ãã±®³Ñ¤“pè\»í±ˆLø,0°n½ûÍ*“].¶¥wTtèrip·™Xô¨Zùç$ðM“øj­ý7aÉý`}éYk:L‚†Ëoªõ¹ß‹)n6¼Aùî¼k.}ù,ä<:÷L(O‚›0 Ä­Ü_Æ &826Üw—lEdÕ»ïfÁ în»g6?!,Án_fËø°1·aÒ Qn®šG—g:w”µ\Ø_AÐLÝñYbç½yÉ£uni^¤QyêqãI/³ý¸´P1€÷óIá¦Ñq…dì¨ï;¿º,ëFCKv–n©>;ôŸOþÇ//o9¿5[’ÊbVK…y} ¼ú æŠß[]¯tÆÁùuÓ9¼²jA=®{ðù¤‘îï®ì—pÃ4sÒ¬™0•ÃÕãÓ¬ý³2a½ÿµL…÷àiH˜KË~!.É3“Ìȳ‰Ÿ÷<+$$óÌ_Ù¾‹ÙÛG·ç 5¹†‘ìŸùýï÷»?ýSÎl\_îÕE×ܯ‹Ã6ÓèüÀ¾2§{ìOÿÆ«ª®½›fÃoUÝÀÄ ~˹sëÖW¦œPÏj6f›#Nø¸»˜º³{Ù»Ý͵§6åg滎Mþ1|7¯Ýb—öÊ-aM» ›$溊óôÕžk:Ö^¯ð~|ï30uëÖðºî_ί;3g0gMžÝÒ‹™†å¹[°žuæ»v‘MŸu\ ¨Ì}ÉwÖ_]Ž7ÃÌÇìÀŒû´¨';çòçNÇäó¬Ýöm¦æî_ì[fé ýÝQ`+ ‚lZÛpÜÍùðóž¡Ðç'ÏzAÿ9z¯²¦DŠÑ|N޾™µŸLçµÿùÄ[̬óAe¾„9uŽÏŽÕFù–(µ}7m§e÷V.üê8? ˜ýÓ_Ù\sKŠÞCX_ ï˜=s^rÝ¥.÷ÙÙC;;V„(ŽÉsçiMÚŒé@œåÜ,ÎìUÛ+Ç_nÇ»ñ3Ö”¡äuûÝnûß Ø ÃíùDXiž3Ly'—”§[ŠlŽpüïB™ßŸ~ÃJÎü•cÈ«CUÂ}VT˜n¸s÷Ÿ”Þ\)\¡õ“^ÞÆ¦W±9Û?Î<<çÅ‹ÒPD‘Rë·°5?·ú¾‰4{ÅÀÄ¡Ræñê\ε•e¯ö\3Ú¹ªº€÷ê]ðI¦òÝÎ1,_í2ŸªÃ~®Ã›ÄâD¡Í­œM·Ú’³ìÊ$ÆðÙyÜ,ža5k4•‰Xû ?ïpÖaæý—Õxò¨åÂåŸÓ«ùúVr4o(ïZáÚÞ °“pl fí=X›Ÿá»§‰[íÇ43êX `—ÁŠ¿NÚFi( $uPǃµ–ÝÊÉ{ƒEs³B ô3+oMkB¢oMÖþÜ·§Åø{¤¬'á‚s'w’ųµ­ÄÝîì9Efãv?c^eO6n³° u–L“àÕwøñ§ñú„+ßçåÛJá{¾y‡øo^Ìô¿ ý~qéýôï-™Õ¶^ )Có¯CgϬr¸¡Öý$¼K Yî[Ž¥ËU+c°1Gr—F½ >«%§à NX—0Tå3ÞÒ™»öÎó·ðºëÌJbNrYnò¤ísvD&ùÐ ƒ Ü^ÝnØ%è']Š=Tìá]Á®† A YKœ3š €Û”«ûÂD ^_\§œÂsm¶²ÝÝæøÌ"›ëï•—àÉliëù8_Û­·O¸Fq…“CËScÇ$¨ W Ú–¨èt> !»†}e¬íóSYj7ãÚjÊôEf(ø¬ ÐÝ/qÒG²Bÿ“t´›©ùúš°ä3åU`À{µ®”Y?Œ5ͯF^«p˜Æcªe﬜Sþ»µÏ"ù”kïîæk^»«e­eF¾ƒÚ’!õòý›€á‡„A[6ÉÉ3™g¦]N¦ÌÂîÏ_Íê&L'ègv‡Ò”ögýìaÄï.Îñ'ýTÿ@гb±uxX1௔ ú3Ëc‹ëlæugûìœû½[ã{Ÿ¦70èrÅŒ!\Õšr°èÞ]géâ÷;‡Ço‘PAÐÏ…Á.¡¤Ö:²Cù¤ÿ¯îûóý»ì°âʧíøz•ޙ߶d2¥‡@œ¢™ýVëâïRE‡F]&Sî;:‰¢^Û›Ó϶f>} ;¿þ ;w•}¯ ;¹r4T¥§ ÜMúžyVÚc‘œCª›tçyœü=ÇFr¼^[ÒÏø+L7PÆ—*=œ-O ÍÏÌÃ$ ˺嚄E9ÍÝ/ox³ð½³æœ÷¬FopÆ â.Ðù̪zËr°wGiØ;´°¸° $Vú"\.L«N9‹_¢–%.b-šûu¹²æf«·hé™*Ú@Q¡îÂßg¤ÝÁÝVL²|‹j­îeéØÊÅ÷~^,Zú£’o}ýX»I—ðÂÊ6÷•¡S+0¸7Xçän†=³|… ²Ë ¬8ôsöܵ†‰l,±ñ»æZY¨<5lXØqà,¯¬[ ì8é¸(o­w·J󌸱ÁqÞ z*q&{ö3K‹›säÜ…ð8}û¬Ý*G5!6êúS˜Ž›¼[¯ï¹ð+Ó_t‚‡p®/Ù—‘ψÕ9X…p¾ŸßyV>k.’ÞCó½‘ôI,yCìyúßÀ}þîNÞ‡„k÷vÛ«u’Û[¯ÝçNr „˜á¹ïmš—ýïs«ô¸®òÎ áÊý“›>û'e…‹´ò®Ìú½=÷ñ¤'Qs‚íÏ{˜*dnæþï*Xd! ÌÙ};ìÒuIJ§óž®¤YóŠ÷çÌf–{¨Ÿ`†…Îûr| ­âÂ=óÈÝP`š€Ø R,›º‰ÇÖZ¤FE œùEkcÏ‹ ²Îc%œnDãBhýæO#ݵ¸VNiXøÕlH^G.á„_»D¯¡›Sèb!“d²·“¾ÉÖ׫¾Uêþüœz53zb©Y©`nž‹–©¬l0Óïv[Þÿ[Æól\2x0¥gE­Ë©l>f†µ àŠO‚|*G9-å6J»Lp%b@kâŠe (ðJ‡iÎ]œµÜGÁ ˆy}‚xg÷mªÅ«|oÞ=kI•Y¤ÇÜO÷é꜓vï¯M%0mqÏrý‹÷o þ¢g”yViÒ;=W¢Šf´¿‘¹tíºB«Ó¼ ‡Úþé |wýþÝØÛ—\©õˆî䨧™—Ö­E¤qpÚó³ßƒcΦ„e}ÕJ¾¥zhBêÀcȳþâbL2§Â²Ó2i¤2ú„ÌJÒ­so./Ó â­¯ïs)¢Ž§Eâ”Ñ7ÿZ„ªšX­ÖÝþõ <U½úúaƒºûneï‡E9ìqlù0;~·@ºZi]ˆ4Ìå#GPΑg »N£o@?ýý&ö8+l(Ž9§­ [qùZø r{·}%-Þj>´Uzæ=¡’¯>Ã÷аõ™hrúïò?èüµYüú×·èì”0Äg‚€ãi_kÜ‘Z`È-žwÈûL ™+j¾|†‘&Ô}•Un ˆ]£`háÜ0¥oË«ä&=>·¸ò|òÞ2ú&8¹-ûNSy†N„ÚžhKoM¾ìbäp…9·û['Ó®gö½¼‡äT tjsò>x´_Α[ùÞœ¦©"bRgͧ/ZŽ9ôn«%¬,:M¯öY‚óeñPöxo„ìÅÑ¿Oj×%¬.«µP–‘·~±±éÜiòGx&wޤ—äÏþŸÚíÖ–áÀÆ JÎâÇ)ÉÂs^àÙ«`·W‡¸,ý»Z2Gx·ßºŠøäËr™wÖmÎ…ƒ{ÿjíÀxÇ’(EHDó¯ýo€û¯eü—Ò¿| ©iÜÆÆ2›jyÊ1—÷[{=>KÞ®8±æÀF[V-ÜÈ»Àýê\Ðàé˜^Õ°>ûVÈq@2 B®˜¹ÝA¬·9y\M½L[8Ïj™T‡=ÌôÏçóô±Üæt¬ÿ˜ÇÏ@îî.rÝ3<;窭»o'ŽU…%ñÉN Ë9Ôºl {w›¹à>óܲdxÆí ™tºÍY¥BSa†™÷)>éÞ3ÇÁ€]ip4)…u¹òµ­æÑ‹•NànòGÀ¤eóÝ˸Š×‚{(½Cv_wóõÝP[¡…?“Ö|–+óI8õ©ä=|•"¾•Uöš@qÁ‹»o€îÌYq;ɧl>L1"ô´ È~$ÌO;“jû¡bwù[.èS¥‡á—5˜™›wìèö5뱘‹O7nS^¦qŸwwÒË¢hþJµ{æø›ŸýÏB8#CFµóI3ò6b}Η¹|6êñýè?CO.e¸v8»®‘3}:ú™µ'´9¾nÌåoùóRvk&e‹µfC ýM&)2Ï?ü#¼öœ7i-$íL3ã>÷ð„µ¼â\ª- ÀëbY½{kÚÓµÚRM*»ÿ·x1¯_=±ªPÉÇ­Ã|ŠÀC¡L2ÂM³I,giwªðNfýó®9sÕX‹ãSCèÏjeR ý](£®¹æíêÀ±m˨¾?£jö6Gï¤Ìó¬½X2Õ¬}û´°!˜ó¯‚‰µîÇp+¤!²É<ÜÍt»ª!©›_ pË^ʹ^÷¾sÅ7!¤\c÷¶`q†IÞXþ„°M¤ñžù»Î”›¦bP{âÙ?ÇÜš÷üîéhŸ{ð‘¡ËJ;Õ%R|ý“_ïúW0fW"_/ŽäÍœ«²ïô+×nHçìþž§¯aÃÄj«uÚ!i9ÎnXç·LÔ±ã)§'Ã};Î2À°ÊĽèù$ü0(r×Ç„eT,¹2OÏ©ÙÖlnë´QWù"[•ppÎÂbsÎñÁ ò›}ù(¶ÔrÒáb?GÈ%üNÀ¸òúå'PÚÉåÿðq*ø|®˜9HãRj«y×âøtp‚à}H@àÎx¹½Ør¢¾jÔ¥yÃéÿµyý_[øµÿÎýô§!é÷@ñi–DAX7ŒZLîÊ43ü¸8üï<*÷ϳfÝÆbÔ¹*Ðo]|ÞÖc*Çò îβÓ³Ñv•1µÌÇœpŸÔ&fôèÎ}2w,;{ »ˆšçÈ™ aÇUØï~ºÏö\{î:<çšLÉøÞÅ=¯ÐŽx€’ \+-ÖiEçÔùyéÊ›KÝœõ³Ž»µÛí.lºÃ{7ÎòL­6cb Yþ&íœB”ŸWç+D1kbÇ[S™e^d›7ò¿-»ÿÛš†?™ïï×¼§8æßèŲléè§Kí¾þo½H¹[ž}jxÞ¨$•~ÿGyé{ÿ x0ßCÇ3„ÔJÂwgñÝoÃ8ÓÒL]c½‹®ÆlÍwïœ=]™y8>sÌÂ0o¾ÅŒ>u®î*%—i ×PÎÞn¤&”·P/ÇŸ‰€“mÙõ -üxí»lIw®³¦ûšs¢Ë>ëê®›C´à|¹í–Lû)=Ó{J³ßÌo0ÕpìÆâbÌ’~ÖÖs%aç⟴᭠t¦ÄXgæîÆóÌÙ[ßœø"G™lã{ÆÿrŸ>Γ¬ç¾—èg5F—š“›˜ÝwQ¡¯ÒÀ©6\Kdšœãš€M7H³) þn)Õðsçé¹S€8•ú3cjÅ}[™ðÃÇSŒc9&A±ÐlÑO‚{NjÜ ålÆâ¨RÂ’WК æh2ãËkü.§h+CŽ2á>›•™1õ¤æcæqrL8y±M Š9Z6&Î{ª!}Žü ѳ?¨kVÌô3ÇÉ`Ï KnòçÌIÓMçru;8ïׂü¤ÏUcàDÄ hYD½Ñ/Íùk_&Ôº?é.cHb»g9OßV¯ÔªÿÜGÕMÒ{ÆÊyý]шôòÑ©Äy¬xäw•˜ë½ç6‰Z‹¦Z{›bôÔ§šï2XuEÅêL†<_Nv~R*‡ê|?« )ü3WJZæ\Î(ÿZ^þ?Þ«räwQË‹ú2ç5ï-ÔH™N物éN&›|¹’Àì2G•jHÌðs¿µ•Ø-@ 0fä[ߤ†ì&“x.¢Òi`Ü› Tîðõú²ÐdñøMã)êNñû‹ñ_®äT¾ßž¾¦Ÿ±åÔ׌sÃý¢ß”ú¾3Öoˆ+Üwþ›„¶ÒZœ‘9`7ÿÍúr á ê ÿ©0´ e+ªµ¿ îé}o½žeÛi™¯_mè¬Ü©)W>›0ÚMù?%X¯¿òjò=ë6 †g&±Z?˜lb…–9þyöîÆ[å|}b^¾;ìŽÌæ]“y˜x¢dWv&îI§ãl9ìÚXÊÚhV¶™£ô³S*åØê€ÄDš L¶!D.÷çÚí@\N´v²¯ÆSË[’¤D*fËu*$#Àå'<6» ¸íÛ£SdzöÂ0²tŠÂdo½×¢dRy-íÀë˃èèÆé·À%a¥ó n«µ¥¹É?fäoB}Mű«_iþ(ó‘pVØï-•È ˆ¹Õ9koé±åò‘æÄÄ)ŒÐÍÍ©m̵°ìÎ÷ü\¢%³ ³es$\n­¿k¸<ïIa¢BŽŠÖ¹ý´Ü¦©kÄ㤠âÇçªE0$  /!°YJÔÍo•ºˆ=Íé'è7aϬй»ì—Ižneú-Øê$'\‚þ>|ÿÉ_9ò’•Ü-·ö`€!ÄF»ÿÊïÚ²ŠùoB‰O&ä’äl±ƒŽç{пsýé7½ÇF]ó‘†g#'çïM#ñüÃ`¸f'·–ò½kSLxñ^¥Hk&k¹gƒ-_q«ø3e01œçt>a=–ÕËùÜF„%¸ihîÖ^úòr¶gxàÊ€;©\Qa¹’hF¸Î¸a£Ü| gMãé¬üµ \ºàl±õˆìby÷¡öìò£'æýÖ2ËOìE`UŸ"6ï.Èþ-«ñp­w»ªÇöTÕ9Ëz’–Sí¶¥’dpo fë9<0 ܰ¾ºœÈã™2ý2Ù£„,ÝÈ[°Þ½@¿ë æèS)ÙìçjØå£âš€ HVËæmêNsúù]›p9ð0ŸÏÇlÅbsý]Þdsù¹ŒylYTåäÎiº霱cèÅ ø³JÃ,os T¡ærË÷³ø‘óÇñ1Ó×N¼ŸIa²ÆÙçsl|°©µ2ßš{Žv¶¿›æ\,Ö[xÍwù0›Oï>Ã, kÚÀ×øÜY0ÔžÜÖnr«4'ß9G¶œ2mÉN“|Þƒþbö¿ý»VýÐìL¿sáeÆÄ‡ù+!#ur 0¨pKô‹¼TWgžÐù]¶ŸÎñ3­|0… OU»'kßI ÏW8’,ÇìøËu­<ƒ ÄKØ´ª<6ó×³ì¦ÇÓçÂ3=yèž³ã%¯éPÁ>ÄÎî{ËR:²Êk#v¢p"Òuw5œ|ˆŸAT:ò:§ÎÅ›ùHÃw.ðÞ3a1ky߬ßõxQ«…·Z…<º½*&ŠØëÎ¼Ü Ì1¢ KåËkÀmI¾û‡TÒWÆ—y8ûy?Ûd;ÇO,*ô3»FåO©&,Í{Þ‡\`|ϰ”ϰ„ðÔú÷†Ëç{JŽú|ÝÜÆs™ÕVYdÉÛA¹8¦~v¼HðI1Ç׿Åü(?±†k 3ž¬§ÿ“9¾¨>•¥®ìûûF^·¨¾Q°Ù‰=Eõù@ðgP„Stø ¿õ·ñúµp§dFÜ6ŽüœG¬æ‘–V®ÌÌîèû:¸§'ƒŽµÂ¸ ó|™˜ð:¸2ô'įÖg_©ô´§ƒ=ÎoìI¨Ô›í5m‹ihhn}q»[åÉ5wN½òÄ'£®3£„H‰$=)÷Ÿí·LC:éÍ;ëÿ”Å4-§TÄh•ß-ƒ‡'§‚'÷=9{´7U—–+3yËtZè¥h<ÕûÁÔ3¯æÓ_ÌûrÕeÔ[õO¦¦©rÀ¥º ô[«Ç‘"Â&ž‘só®ð!dC3ÖÊú§ì™øæR$9`‘³ ^ºîÄŒ«8KÈËQú0à/¼ó¸Ù¾â\bù+|H¸¬RÿÕÿ~‘U*¶ã)ó2ŽdQ•ªÁWÇWÜÆjÜg–•­Ø×“,qóÎ Ä P̃7½§Ús½Mid›x󯝷D?3¨¨ºA•lxls! ª·¡   ÀXü%Ë“O6¢¸iÐÏl=³hæ—[z’ÔjÔ.[÷š]³~²æ×âÇVcsFïzW×ïd!Ìîó¯tÁ4¹7 ùQâ“}™º¹%¯ A¿EQ?¹É«¡‡‹V-¼D±ön®qÌ9¸±Œ×š fgµßsúß“|þXf^»p'«ªÕÕ"ž•ûgÝÃj<ü+OI.úÇÓ,²QÍí­´ãq0ÉÚciø˜®Ã§žD»¹ÜŸ@Ò5KO½ñó_GÖÛ±ê·ÙÛ¬™ ˜#wkû<;³gž3¯ìcÕ΀»%S¯t _l¤æ{ëÿ°Jì0À´®L·‘dÈú?¡Œýk-¾i@VÕ0j‚}²‹:âPÁú3¼Ko®.>Š––˯¥?œâtò»E"¶ÙmÈL€1k™CŽa¼jΤ6(ŸYë”×/S°gˆÂ³#~pÖŸý!x|}ë:è=å_È%œÐÄdCðÊÓ—¿'ef©ý˜Û<«”ø«`Tì1f¬P:ýeïåžV?`Ø——9T«Õ;sLˆéoVÞMÙ¾'wV~æ½åIîb ¬viEDiBç·ÜØÊ,¾íß}¯ò-v9Ÿ;Ó?/ŠâÑ2ÉK ˜1ôâ=Ï_q•Æ ‡w£Íb|Ÿ»½‰ÁÏ>söέ±ÇS|˜Ñ$d†Ø ÖZøvêýµ¦Z¿ 蛺cñJ« ó| ñÔç';³gôÐÿ‡ÏÚôbWÌîÙè3”ämÚ ©ïy¯#®¦rùÿ<ÅßË<ûs\{q5c¶dÀC¸Ï«ùId|? sv }gŸT0ãšÈùÐMóœ+|úÒ‹Ÿ¿ãý_Å¢iY7Éë‹7\O­¾b Š¥;ÜkWv]¥Cof¹%D«!Õt£=©Ùû}ë{ù[‹®<¸—ÀaƉBsö当žG[*ïÁöaÅþ?«~žËw–(…ÐÜô­"üøóªo”N‘ÃwÜ-Õ®Õ46ŽÆW¹íV¾Ÿ¹|o³;øš”õ¥Õ|݃OáÂî¿Hfd…Ö5â4äé†ce…€õ‹xÓøn_ ú¶ý÷ëο¿Ú³fÊ6…{ãUfXr‡ƒW~“5m˜õ7$³ŸÐ“yzúÌ–ÌØ>>×Ú ¦HŒé组øVïfùž6ºÚƉ²FÒ4§Qºù2LªÖ^sgYëàèY}ßt ëùpqe–—×·2ý†Îÿðÿ3¯r¥5Ñ¥H8”(-Ö¾)@ÞÏûoì~øÇõ40½‡ãà m>!ß?%œ6Ÿs”…kí/ÎgÄÜY“$?wéÀS Ø×e€û|Â:€U}Ô±!˜«ƒsÿó»³Í|þI7\6…&×ýPê2O¿†v©–_rú9“JÊïšHG…ù—@Ê€ž9~çûËØËµ÷"Ø2V]t'Ø8l8‘vž„þ–‰%ÕþÛƒvϺ1&;9ï–Ö»Íè“UoâJ!þ–ۯ݇À- ÊÝ'`êWµ){χR@rågUBì/áë^­ÞPÝyùrvß ÕÀ½Â›4¹Ò`º~לÍÂüð—ù—= møìðÃ=  ×ÌG$D«1§k//3˜{>þ‚˜.ˆÏw+‡ëå¿ë!¿ úïÞÅòg°QÙnò×íaùNf×]çž(ckfÿ“t î–):®`°w¶$E‡E æ8­ÑÄ}²ÚÌVxRt˜Â˜§Ì}¦ñpTËùÎÚ¿Øùë'cµç·ÊÌ‹÷+9N«ñìœÕöêoegßMÅ1ä-½yΫXuï9×n}zëÀTç†=e Ê]+0¶±g0ÓaÎ@[ÇÇc2<î@ü:Z’^ÊKÁ£íJ‚5ìMô:µÞ^×zëÞ³óýC+¹ÑÖÇì{Ïò¬þ–GûG"Àd›÷ÆXÌì"[è“”¹ano*‘…°£t~Ö_ëå¦Þš\l»ïu{þÚwÙýêc_<þ ÜDûÛü†÷Œþ›®:0`cÃg„ý$Ìâßɇ„O4ŸkÎÃnaçSÀ GEaY^©ÊÊ“Ø3gÍP‡bLÌÞHnd8äç—¤ úïrÍ=eß/ÀmÅý]ÅŸýÔlýú¾ŽîÊ ¡¿Õá¼YÜêveÃTpÙr“å`¡Ì‹½¬žÝÔf²»Yöɪ?é=Ççä1üì°ÆÎI—æh2ÏmÆ„uðÊO×#\>•ãw£­{c¬Ê_޹&íðÚí®Ïæè{K+5ùç©ôϰǧ/Nµæ©ï,Seœÿ¶îÞtë=3R'È&GÙB™ÎÖ;ÎvSWÕ¸ýëNéyf¸/°Yk„Vål6?á#§Nê³XL¾¸9²´»wv-°Ì´QþÒTôµ¬¡ó@.º6âbÀÚˆ5ìyFŸJ˳}–´ ¢YØG'ûûÈ©ßÏ¥zΔEù»‹ç%È_t{±•H7º—íX?™¾‚§û/‚£p!Ih–@eƒ]Y¼YýdmsM@nt&¤Ô{J'þ׿øÿð0`Ïp»I×M·Õ†KBˆ©>„Ñü„P»„5 â«úQ{pØãq ½ÇÒ¢÷jÞ%b»SzNzðOéû°V% VIÆcŽŽŸMºÎÍ3dµk2k€ü+ì`ÕÎÐyq‚¡’æ´*éö8÷oŶÿqo¨-A’\Ùæ§Îoè ( ðàÀDú4Ð@@ Hƒ† 4¬ßx+ËnŒo÷mÇÒoUK/Á]¹òFFFxD¸3;vNjðµš?Ÿ;͘ÎãÜ™p¶Îä¬HE¦OÀýdö§êuWÒ¬µOÕ>§ÿ„XR–ú6É 3É€v>»½¹U'µÙŸ¯«{=­wÕ5 æUóXñx¸zÕ#¸§€Wp^GÛ¨%gܤŸ³7d{ìù —)rê)€¹@fzLﱟµÏy{ÙN6\öì™1ëô—Ò“ þ™Wýîlì5gýgÕçûÍÚÏ#³šwÍéÿ.gvBøóÅËN>÷¸d³;gõ¤Ï“d=Gy}±Þšœ{ì°Ëã7™Ç»†õõ %>Ir+¸oWú˹‘Õ?Ve™³OcŰÊ€óôvG¾Ñì7¹Èbvz±:Kœb3‰‰Îzé^–H¶°¦k¤®$öù?ÛÊB¾tŽ9±ädO]^Í 623£=‘[\»¶Þ:Ódt• >˽fÕ§zˆ³æ<þä@ÌëžLÓ’ô»rÅl½³øÖ8rØÓ8òº Õ°ØL5SÃkûËø& -kÒŽ›ëÏc˜Ù~IÌ˱&ã-zÞdÎÇÒñŒÒ18À˜k̂ۂž„f×<Õz)e®—pœÝ jYâÃF=~ÒfhhUï÷1y¿ö%aÙlqz²+'«X\ëxêNm¼7 sÁvæžîÏ}ò~os.æxL"©íYrû—ÇõZÎ^p*ç¤@ˆï»š¶”,pc7ŸÇ:N;òZÐp–¡ükéù˜&t/ý9ëØ$àK¿?O–[ôÖuØð×›æ]>ëÚžÇÆŠG]q*Ü3±B%±ú×ß*RNÇìÎkö ± =qIÚqz½ü]&5øªÙ€aE< _¸¤æ üzu"œ9?“yrƒoß'ðI¹¿W[²ãçpw.yõ4–pV•×Ú²×ÎÛÖ*UÌæwXbmËr¤&ãDIÁC:ž¤Ncª[ÁLÆRì9Iªó]–ºñ48¶žÝa[gŒuö ï¥^…”¯=w:9ë¿É¤ÌT®$ÁÉk]¢Wè5Wj›W²/I0=©÷˜enèŸÂ >δÛmÝ3@AO‡dœ;D¡7¾«èô…9 ä%ÌK;×@Ìú*ƒx7ãÒØœ}6BwØÀ Á\¢!ñzí…ÈðÕûZðXÎæôáJ+TµM-K»Àè;0à”DQ?Ž•EÖjÿÖÌÞÛyè¯OÙ™·c¨`Ck[YÁu‹1;욺ÁÉ}8³Dž|ç{6H:?œ¾+Ç_Ç̳0ô·£-¡¿aè¯7íºúÖs#oÊv'%~³Æí¿kRÐÜè|Ÿï¿aÿ»’à0€Gåsdm§ž‘zjìÂa^8ÿÚþ)©ÏyM¡ñ ¨6÷ZÊWèB ÿuÕ®3÷O P 3‚ô gµöK[¹ùÄéOùø¤êÓ„hÑuv¸+¬kË^²œ-àŠ;ô,—i[@çݽªvÍ£½ì ;¡š™ÚI]½O­«†ø¦ßXÞÑT礗ŸlF¹Ž;KÍšCbÕïhçdü'rQ"É$pœHy×4Üî̽ٮËÝ–R5çÞR›Ãî´¸þBóø92/gè å õ4'ìv›¬UST˜„àük²Ó2)…+Œø½ ‹_¼<©s€ÇìêG}^Sž[„¹g7%›S¸ïÎܘi6lÌuÓv*ªZì’:9$ùøóú„×úyØVc.Yï|‘*CM-³ ¼ë܇À Çù¤G¥g‘šèa̺%;Y^¯mØœÇF^æàë»æãrlyosbݧÅõÀ;ÓÿÛšzÒ¤S¿[ð¿©·ÇÕ2ªùüÚc˜½ֹ̕Xó$÷@ÿ×ðø ¬“ ¯sùß}qœé7ý)y|ô§ŠA‚ø7pßyîºî¤úp ' gOj¿';’ BýÃûú]vùn¬&9‡Ô,ßÃõ+uíèØÍ™nL+ÔqÒœ‹2¾EH*:¹BrªñX¡?©ûïJn'5t¶ñr0jËí’r`ʬÏ:?&7ÚA6‰{vD3«¤!¨bZ¨Ñ† Õ¨`&Ûh&yJûþvíÂg 9[4“Ÿ»ª`Œ9ú‰?gÙ}ÈÞ ¦Èv>§ö‘…MS;¯kA]³ò™éÿõJ$âØ¯Ô@R¹1ןàØDšd&uãYëoñXr+µÿº3Ý= =IÝIíÅî¬w€Aý>ê¦0YלGËãñ(ñŠ8àÌ–•ض›òdÌè3×be'+*p2%Õ‡·/Å+¹ìÕÂYï sÌ]¦«¹ž 9ýÙ·ÀÖRZ±í˜JØäôS`´Î¢ö@ö-ÏÎK8iNÓôNÞõmNZNÝ!dðóxÜÍäK:åÏ´»¨AüÅÄÎwWÝ|9ì…Ë3ü#ô§úÎnï™ý¿Ltò>¸áñûó¤ácÂR‚ûI¬³3ä:G&ùßTfÐÿÝ&fb wt¦^ ¡?Ÿkç›>ÚÒÏ®r¹µ~ <<~f6áª-™ z3ýœ=Øù³;—¿_5„,‰OŸôyvNjº=á¾›tù-† ®!pKκ8cSÛLj‚s©%1˜b3äM ÞÒ®Ͷñ2k<‘vÀõœì=wR›gk¯Cy<{ëðI˜™Uá­'ãPÄñ$‘ɵÌz5†ïî^˜¥W '5ï¦0‰Çï#1‘©óW>©V»]`ªœ­Ø-°½nüwS3Ó„z©U×ÓrL"ÁÆ4ƒusðq2·Þ¿È)À¥.†q è'Cx?dÆï ëÖ¾]-žÌ¸sÒt;/X­Æ³ëëŸ]ÎòZ\ÕÕæõY°&à£?eAmÞo¤`q9/ø¸‹úê$2Q§¨ŽÚ\T¸×Ö¯4!¼æâMÞ?+ü–u“ÜvfÕü£¿ZŠwNÿëwÝ})Óy‹¹i>iyÙgÃee‚~sú-ŒhNÿÜÚ;‡3¬Ÿi? @›Ò“ ¿+&ê$’ƒVüës£í¬ís£Û“ÎÝçBC+jÒ3ߟ@¿{Ьt+¹“>îi!â“ËÌ=óú[ø1Wê.2ŸjŽÊùõÓZ+kç÷&\)ëo8ÞýV/ôI¡U®/ $¸ÑÏÄÝA&ú2•ÆëkÝ<³ºMb``š ölŒ•͹N¸ïz¾ýt |SΘi—Ô` ë&éÔçà¦RSMh ìðg $iùþz ÝÐI£žL}SkDí.Å=Ç-Å6¡óõr­¦Sa:é=[¦Öá1u‡¨á2÷`joë$÷é‡3}bb’·Bòsn·Ú8à£k¥ë%;ëÀQJšµ*¬ Ëq¦¢ó"&h1‡äÒjbÍrþµäkÿõX²AÖYp2Ñ݉ϥŽa$ŽOÒ`ªõÝ -jK^w–û™ù£Ÿül¢åÙ”×'”³²„Æôež‰dB‡gZ\ªA„×3YŽò£^ð¸Ür7¾ø¼sâˆQ«¤ÎˆyÖ¤|_psÎúÿz¯yŸ]Û®_ý뽩#†û©µ×–^®¸Î0K&Åý¹Ð…:gHÃ@…¼¤÷°žV/Þcœ…] ´È,ç+Áš£ê>dÏ›q è)¸Y÷0›:;²ö®›ͧ3¡ŸÓ:»Ú¦fŒÄ¶Ÿå8g6¶Ü:ˬ}÷ìö^½R»2Zð㺷í#ÀýÿÑk'xô[&ÿT“@,×aE×¼M:~ކá²sä&A¥{’'®%­µOœãëeízˆ[‰fMcŸšwO£.'ÅÜ^ìšC fæû'U'ºÞ31íÊ€Cˆ—suÌ”Øi5izXéßÐ?ULàIÊô~€ÝlŒϨSö=) þu>ö$Šð¿l %3•ÇÃc¶/3Á !¬wkƒ3æÅyÖn~ÝËâ‹é~€ú¯9—©Ù® 3î½»öŠÄYppÒÉuüLï±1oÓTMÖZ„†×Ó©ÑÖŸùQ·}F"Y"3e‘}ËRû¿&BX­%µPÊóÒ’ôÂÛ—™0g÷#7òžY·ÀòºX‡WŸLqk`¼R†òQ¡^/Þ{ `R‚>.*\ÀÜñ´óžÙ8Ú =]gí‚ ›Ÿÿ^æô»rŽk '˜å>9†i p°Jž±­ôXúö,Á#'›Ÿ^ÅUëôÏjýß%¢ÌÍ»÷lþ—çWý>Ó”ûwSìlòÅjÀ\÷˜½uùçF¡ŸµÚ®1ØãÕ'»¦rVòqÒП³"çJýrAå=i«8á,ÄÉ€ü™ Iéy?e¬(VdEð§AJÃ=Ùõö&£ŸXþgû¯«]gÅÊÊÛÙ7‘‹ìÀ}Z~šk®o’×8FÎþ:èœ4±„ÝÏ6QÄ*jVô·¶I)>&kœç& ö±úFs4’bOG}Y‰Ÿ)Ç-i×øì¬œ“štmæ£ÎŽIF¢E6½·L6Óä(>ïÉçò-öà\‘¤ºý­ÓO^ø¬ÂáÊ€5¹“ÒÿÜ'à÷Ì”[çÇ­·†¼¦Ù¢Âût0ã#w€ä3r34ɤáãѳ3lõ~¬êce .Š»EË‚ÈÑÕ¹ðØ5…†j-;ádæçÖ_Ìx¶ç2ûÎ=ӾǀžS3F¬TÔYX·‡÷:Ú‚/ÌÙÛs—Ä•:/zjÖöTá`¦‡D)êup!dŽaFC]qþ"Ç“d K¹í$+S’dLygz~H¡¬i OfUõÏ$™“¿þëóý¿^Õ'iøtª;}0{Ì’ç{~âŒûwÕ{Ü¿ u’31Ýj©ÖϬyÝô‡¦•­»ù9V/]av‡ Éf¼ füÓC×j]ìä©ÿ’¢C⥊™>«oÕlÀYb·ÊúžOvêƒ$ßé=Ðï­ØçQ±7ÀÔ,Wo˜Ê1vÎØÔYfL ­ë å-Má„ Á™-áɤSâ?¥Dl5«È{K{½ÏÙz-ª½=t¹½ZÁƯ”ÃvN:‘‹œ;'Ð7½'wk¹&àô™©GÉ1×Ô¢LéI² :aÙÓˆÍÇóú¹O¼œ†’¶LòÐUwÜðjνu÷ Äë89­`%u[ûùQ 2s´Ù=¼½ÜÔë`ƒù!CaNv.^Û?ÕY1’gì’H/Ÿ„}Iº‘Á}-`Ì[³¨ÍkA'©8¼Ž»:ĪQ¸d¨ð,-KÚ“8ǼŽÙÄkl×çôâ­³c'ë©v´SÞ£Á1w^œÓMmSGB±QŠcºÉÉ.¹¼ÓÜ"og†Tã]jMò¶kÄS ¯~ý¿Þ ê»Jö3»=þ”é7|wÖß’¿5‰Ï‚&e©2æ`ý|¾~‹%5wáΕ÷%džØ@Ÿ]FÌ×’àÇóú–Ô¨èsüù]Ö².ëWêH˜ã¯£bÍ³ŽŠõÏ: *‚w@ÜÐ?µí¦FÞ¦{ËÝ¢‹4¡óe¹UC&ë[¬ØXþÒ¬¦ƒÚ¦Ê:ô†_†ÝnÃ%p·pj35„åñ$kZHÊm[AÈ-ž‰)nÆ¿³ò–@µa––4!ê~¾g‹°¥«y„<£”÷6©>ÀLy²ÄrXÂÞ¼¤ ”(RÉ8ù*¤¿ûò‚mý·¢ZwßÛ4¤°Á9E f®0<²í“û¯#ls—SÓíËÎñÛ¢ˆÿõÔãþÔÅïQbæƒZ:„εçšXë¿5eî[šÓV\¼Êåæ,r„Iìa&¬–|B^…'ᆭcûצæcþºŽuèŽÉ÷™ý©‡!åøY(°h훫7ê=IÊ3eýùßdOfáN;6˜ä6뉙öÃÜ¿k³$øÕóÈçw&G˜M½ýì m"[êëH¢79Â9Ïj˜BÓÁôžäã6ßl¿5·öž¼îHBŸfü'¢i])nãdŸ5ñl‘™”yü]7ã:§nÚFRžá¬kº²Ã’¸øyVyOî³g•ÀŠï\[ÓjbÀíÜY 2é%zŒ?ßk §"MGê{ìfÀ³˜• â­šoš‘µzL|r=„Ût:ýLácâ=¿œÃ³ï¬›öœáK½ FÌ•w©§Ê\zÏÌþò[>vXÃÄí¹nw&€v×¼³ ©4É›ÌÚ;ä,r(gæ YíÇPØjýÖöI=¼8Î,ÿ=Ñçbu{I«eÒ™o.ê¼£¸õ >ëHÌéw#ïSÙ{ß᯼çk~sW@í¡žšJp†$³ß?YnY¡?Qq:5ýÉs×Á@êphῠ̸·ºŽOŠêý)1aˆìY˸Â,öD¶ä±Û7íàë|×”yî9qñ<"§àÄ4f´;gœ:Øg¡Oz’ÿ@¶;ÏÑÙñܪ{†IÖÔêZrÏãg…Á½îpèXx)¹˜øÔ/…°û^/BIBvƒÆ)—ïÆ¾”A·¡³ûÖÎ÷CKl³°gìÁÆ_w•#eý-`jös2 &=ƒ¥†|l| Iƒ¿~Ý:ÇñýÌý“c…{N²tá}Îë=æ;Wue‘ki÷cLC.^Agøj”|ì`çB=¯‹òĬÞJD4碯­3ýOðð>gN% ¥ìeA Ã<")g È6GŸÚç5z52{Át’¨®-oœÍr”áŸ}Ž-‰˜Ô{ƒ?9Ñþu_©Õ5qÜï­¸R /v FSÈä Üé¿ç÷'ïáô>ÙÙ‘—Lî´à#SÖ³ˆm¹ì­Ács“.Ó<BX.ê„ïÜž¼zv¨ÐÅ ¼ž²ŸöXô'¶˜¦3÷î{[pß½ewT}ÈÁoݘ‘&D7†Äé7—Ùn®SVè÷©œcÑL+É$Jé”f$öN±§·ñrcn2jL.³³^¾·Ÿ÷ÝȺIÉæÌÁ9î¦Áˆ§ÐÎÕŒÄÚçï¦þ¬Ÿ÷Œ+-‰èå·.Óß+1œ£²Ð§ßp– 9ôj'ò%5MafÝÚ5Ìß§²i?Ìzš c.ßóØLaJ\S5Ì2Lêì.rÒafš£äЈ‹ß¬Ø³3ÝÜwFœõ’—˜w¡˜'&e’|Ryɼ'ï–Ku}—KH}˺öï¤n¯¦í®¨ÎÁmhÎŬ?Õú ÜàÖ{B}6WFì䤯Cª5O8å=´¢Óo’9ªdãeÇå¤|5›À×ÈY²ÓynÒTüšö¿⻩wV ràqß¼;ƒ~¾gn،˛Ö'3ÍéFÕg~uF]}'C'>)s|Oxç°ß*=¤Ã‘/ÎZ(g¦„Ü_d­võ8ßÏL<›nÙè_ó$Õý-DÈYÈ –A…­²™gÖÚ7”w … »äÃzY\Á]I<ÔáÅØ›áJc‚ïf1$–¼(I>n„5á–³´ ¶(7âtž)CŸ ¿N·WŽLjW5 uWCjb6ÙiV²ß©&«æŸ]fÏ@+3#?57›ëÏ:;pL¡á/& ¢ô+­¶Ô&¯—U†$Å¡=`xÏl¾/kÚ¸9ÏæÀ‰CpŸä2w>y'@áqº©— ã!çjÏ5­0Ó쌻«"̵b8ä2¥;"x1ÐrÂåùlªÔ.Ûþƭɤñ[C^ f¾ë{j"(˜Ký(ºÌ0Ì í‡ÆO]þiU*+›µÏL*!~-ö5ò¼HªóµA}—ŠÂ<#^_‡[œÎê¿$210¦_Ä^ÓXA£Cn—}“¶Ÿ²T*åûßàňÙÒ³Lçýë&gÿË ¹˜;7ß-¼Ìú'aÍÔ¤ËVWfÁI)I.„ݳaÙ}¾ßdžÔ±àð†çh/ Æõt¬3ya±H‡ ø¸4¾lÈÅý” B+„œ‹(WÀz;öaåö+Çÿž7˜G$W>©ë¤¦Þt þ¸wzü} ¯ÉB\exE ý]àdÅ9ÏH„Gœå:'ûSÀÑØ I@v¾¶½«n²ÝL4¤ýÒ)¾¦÷àØZ:Vš÷N¸z`Š‹ 3¦ýt&\§nÿ›$PÍÝ·æýMûr¢YRÅ};Ü﯃ºÔvÌcNÔ¦Y¦Ó‚§›N¿ùú&®ðs^xëv› 7ëö8ÓoWZN îðCUÀ‚ÃÊ=›´Ã[º—ÀZ+É À۸߀yzfqŸQ3~®<Ø'Õ-¹d»&6¿Ã€/·Ÿ§`¶Ÿ²•ó©E¬Rê¾›én"Ja-| ¹ˆÖQ1|âh×¹3´ ,àhpÌù0sgkéCFz¿Ô/²`sŸZÂäi…†^\º”rêä~ 8íòduÂ)c•†4‘Õ“ÈiË>¬ÖªOÄž¤ÿkXû3è·½©>n8žm¹îA?[K =z†Ý©õyVò™sü¼x¥?®˜Yß—¨÷ÝBF¾ûsL]™dðÌt 뜮;1aq¾¯J?±M!ûXê ª«VßålÉ\#Ϭ 6¬ÖZÓ΄ɩ÷&ÓŸè=ÞÞD# -ö0cIMÔçt æJšêpVžp0 „'pž´¥f2ÃJ­ÃIÁÝù]'»|v¿ëë;ø± ¦[l7ÅàÕuÃevš¥cë õ–XãßaFÊß'?]'°nŒ½l ÆG€}RÒã>é~`e<û(;xx±xšZ÷’Á–³ï7’†ï©¹ÊúåÉîÊ7“á›oø+{†~í5 Ÿ)C&æžÝ½àþóöü ý]IðÂFÈÈeÒ ¯{¦ßÙ²E°!I†¡…†ë=I&;¿üÔæçcɶ¶ì9ž¥çÀ¦ÎA¿’ xä–’4´ªs'è¯û§¯•Lâãêgͬåä´@Æs >¯2'·ãÄSSÜÏo§BÐ7uÕƒ^·‡M¨„¼÷@ÿ¦‘÷æ¿sv–ª$¸Oñ…“¦õmÌ#·¬§]x­ÖŸÎʽ¬2Ä#ID$)(x•á3óä^© Îi–of¦ŸGBé[RqÈé÷ÓíuùÑú•ºÛ©âÅgÇ°Ó –Yᬔϑq® <™Ôköwb}çé=™8tÖ|œœÍxMg}ždâÉœ1ï„ÔêÖÏ™Òc¶áì¬`ãæK³·ÍSp ¯ÝL1-Ä3vj-uÖÙ¹d·ÛšûÎñtEÂ÷]¿èÔð1_? ¦»¤üÜ¥`‚Í>>+•¶×1Vg#WÆÙ=À-×&ùŽ5éè ôòú½sü©ÜŸ”þ ÓSŸ€›ƒÍ×wû¯oGùöÕsÍÁŠCÞž´¥ýÙV›~%ysjðôd?=G˜Yá.£.‡œRY°bàäÏÊëR·2MvœÕãcCmfN ¥ÒýI™Îj–å‘3¼©=×8øZÔ>šú‹×˼>‰@\Ƚfµk¨äû“7êS³À¥=I—²&À XŒÍ>¬Q x½V1ó—»MتùÌ ßlx3ÅOôžxKkÝtÔS†2ý×!½r ÷jr”èËqóžyTu¾A t™”ñÚa‚Ÿ[{©«ÃÐ¥~‹àÏd¡úÄÿ%±Ç ]¤vêû©a÷{züŸT€’ùW0XT”É—›îW-¸–¥+…nÀõlf²‡x:È)¥Íl±×ïßl~žÉ*„¶‰s›MMìá'ÏݸîÌ$‘é!õz¹ Úd>f±,¬™V¨,2qRw¤îª=M+5ì²úá¶i†+™¶—…Ãîù•xùÖðIÑs¢ñع“†_¤‹0çíÎý»½wáo'=yÏNs:l²K× ’­ÿ»‹Œ¯ß5ñÆU‘d£æ¾VØí–½]+°éXˆz¬¾°¡•É*¦å8ïîÀÀÝõ3ìí¿ë|¿9÷VÜO}O ©šá‰ƒçn;æø …6$Å!Bÿz1KꢡÇÙªÕ¤…X“'É«Y§ŸÕƒZ\µpˆº×|µ¼1ëÏG‚DNñUfIXb/[™¹È1Àà£B˰”ůø’x혱cŸ>q$kQ­(ù-83ç,)mÚ LXL–œcN桦ó4Qî™þ55d«¤F϶P7œþ¤í“ôgnÈE¦ñ8³Î¼þ¬Ìc ~ú¿2<0'éö$ÐÏN͵l æ•¢¿Ï×»\èŒÁûŸ@ßLñù½¬[áí8κúiÔEÍ1S’êŒXO`K.g¾'ÐgÍ2”6hîÚp Ó{Úƒ7æºÑ6× Îýw:?Ë—7x’M÷Ïš6çÎHnÜtº-ëØœÂN,&GÞ$79g‚Å7x5v\Ø%ÈOvþ|T–Ýœá¬söI=ƵV'¸‚ØÃx§±×ñlöMîïëLÞ¹á5åû}u(Ob–ò˜ÍËl•¶7×ßÇ™\‡¿2ýf´›fCî»%>yưذ;x¬“³øž¹urL JÕæ_}´|ð¸.9l(Z[ºÔ5´­<›e¹Ìðì,L™ò:ü„ !U±ôïã¡E<áo.ÝhB§6 3Ø ñ–óâëäø¸)y'AÊô„Yu„ ø ±XÏÀ€Ôæ;Éf8Ä{ÕZIc3š®f¸m7™Ö¥¦(‡¾Ý´{²¢=­'Åž9Óo¥ùÄ¿i?sÿ3Ó}È›Ÿ3ë„ŵ¥•ø ²™×Oûä+!³ÿË=äêÁÚÒ¡ Ý‚ÙðÊåŠsH’ktî9ÑQR5ï¡Ü,OÖQùD3¥3©Þ¥`}3ºæà5Ïp6  E<Ù5Äs±¢Î U&u¸%š•CÖQ)( n&®9xðýÀóõJäÞ¹Ô+e~¹ßžrž4l&YÈx×àŸ@sR’Iú÷NÓxŸ³›¯ùô®<˜G~Ù°,eÍ;p¼ÐÂNê!uªT8Á—òý†þ3QÇûdRŒïm”fC̤ÞÓ5Ÿ= ‰Äè+ÓŸ,´Œ X 7Éb¦Vfå-ÅÛËb…{CáÙAOÊùý‰êÀº„ƒ×|ä (÷éFa3)µ°¤ëø›™xš+ÙB‹S$á¯Uì.Ì0€0”gÊÜ|ýÖn™±˜Üµ°\ºÉ1'— Ÿõ u„äÊsæbÿt¼ÇšÁµ%¡|å½jdþÏ™BrÙI 3’ÇÉŽÃ3.¢¹Û«ïƒON7 eŸërêW¸’ÆçË6%{Av]ýÄé'Àeh…$mÆ0ý¦Ù—â•)Ç?«Ô'§[e6¿&§a·êR “[roe°aŸ·ñ~æ`AW'êø v ÈÌAïšMO»’L#q³/gE¦Hl¬“d… †˜¡§êƒv†¸„ûÌÞQŒ³C£ú-¦“ܱбùÏOšÙõ“ŠW•}_c35È5 »ÍXë/q\ HJjè®XúÓ ABU΢Vücö:U!\ƒ5{» 3΀ÄÜÔRœÔ`œƒO0ÚQlWM¬t‰mùü&^I2DKÖZ®c›ŒTOh:S^Þi–åïû‘ᚯµC'çåFÌÔ˜Kh±HC|¶êÚÌ"™S8æN^Ê_ò†v[ŒÖìÀÓ÷FÕuaêsB4‚ÚDõa!˜\6U¦—*ÏÙëÝÈfeú¹šóM¦¾5˜§?¯‚³|¼I€áín=Þcüu.¬xpK:Y20`€T¿ÈŃ…ujÞ´²ˆ'ψ°•Eyñ™ã/0ÇŠ'/íuÕâǫà QB»18C@ï© ¯8ÛÄë/ùˆž.­ÛC¥sRž˜í&Ðï,Ÿú&Ô{Eÿ{ÚϽMÕ —ݶËÊ= lUf‚S 6 Ð;ˆßÛ‡ÙyÀ@Ÿ¿Èã§Í«Xô”åzAØgÈhÚIrM¼³ÿëÙ¯- 9k1ïÎ…œz;öNaU³KÿTì!èç·8#1øO­º“’ –…2­óÃä‚A¹·O`î¸ñ ð>4ò¾2I˜ë¸QAâ•Ñyúäãkpé#1-'}k7Àò«¯'$¸Ÿ˜ân·ÝC‘÷“‚P×°{ªÍXSßÝÁLGPyc!×RŽ¿SÔ±8æ l’Â}b%즅vR/AÇÂ?é:ÍÙrê`ŠÁU'×g÷²©V’æLùo7­ÎýY¿ßÙ}îÁ;÷Èš$ °d)e"Ë“C ³HÉXå4ÄËÃ|á.ŠÙ™Š7Î…PáØ2&óz27VÛðøÝ„Çqæ2Ï쾋û¾¾u´îÌíÕ¯Ô2ð¼/E¤Ö$b†µõ OÉùc¡Ÿ¹ªn3oM¸Àa8r£©÷_[rü¹Œya³Å˜N÷lX¡ÂWœ3U~¢9¡Ðg7³ùW@KbC½ "“ðål&•¨8÷dž™Ø3ûþ:§žÜv“‡ng­Õïs&ç¤ÿìmìÐe¥÷ [S+¡Ý` âwu—“Øã_7°20&³ß½@,ò"ÕÔ'\n-¶ëL²r ý]%`n¶² #x5¶$ÑÆÈ ‹;Ûïl¯w¾‡Ó ŸD>ïI ¡þ>aéOïñ¡eÞ÷O¸<“vî™ý³N *nÔë“nÏŹÿdL–e@§_Iªü®¤ÊÀ§mÞãçýL)X¦,ÇùI¦g;ël•wƒc΄L1p uÇ¥öÝpp…öoaM€¡¯ „¥FkÓÖìß[ŸOèŸF/¹Þ¦«`zaªØ8äàñºz)RÒ„(u`$Àûˆb_[O‰³ØwŸóñ‰¨Ì85ÎîÚÿ‰Íb0ïßu‰ä_›Öyÿ›»1}B^óÝ“…VRÝ™ûÜÉà,¾Ã€¤zäj‰“_„Ú®o$¯]§…"ÜÒ8p–M¾üÅWʾ¤ü·]èf’Lbáû©)Îü½[v|÷,Á¬<Á óÜ;qå<;ÇåVÔ±P)°~Å™ÑG²ó´i0—šð+yOÖo&r{~Î-ùž¦Tå ¬- øRw9'oµ6Þq1£ ƒœÚ¾–íØ0Ç1Ld$r÷)Ãçæ?.Þ„T£§Â:ÇÄu #J2ÇÏÊ—F;+óÞæEÄûÐÜVZ&<°üÊpΊ=C$äu«¨áøJO2ÕJáAª̵‚›ÙîŸçHÏM3n‚ã3ýÉ]3knð­£-¸_A,Slie ~mÓµŠ&û§Ï¶P¾åüéFsƒþgN^Ô õž³h€û²_ØÜ¿ÏK ™dΧùµçÙwJ>§¾~×Î{Ž¡2ñ¦ß -œ³OG›öì ‡ÁŒ¥,8_LÛšÓ˜Áþ?»âÍɶO]NhF[µÏ´œ”¿!·të»LôX>2iê›Ld2o,â™;Nhëj€íníM.¹IœÚ´%‡>¶®â¤69üpç@Úƒ½{][èrùýoñ¿/¶±òQáãdXχdVݱ–E<Ýãxš´Ÿd©ímň{¦*Ž]~÷˜~ Î(÷lŠƒBF`|Ù˜¯ežÛÊý&±¸ÅÓR˜‰ÇOYÌÚ’¡Krf¨OH[²ië0fúôì’àÄ–\Þú,â3óí+Eº¯YøusVÛón!Øeõ BN%nGæS¿Èõ/̆Ï{|vWÈóI÷TÅÉÔ¼õÚÇdþ“翬~,³6ªÑ›ô’L¸’?î/£åÌŒÿY›ÿ¦b0ëö0ÔIÌûœÅw.¿'ö̼ÿ?Ž/s]£º‚Ôä±R‡sØœÙl?×Á^zÒbÃÄG®à$ù0Q•Šæ{Þn5Yr¦ªób¡^ìØÙíWeÀu?¦8J†û{ŸCO¹qf=¹Û²µ—£zCò5ºWßOu†ÙDÌB®¬…‘&êÆYvJ$¡Owâ1ùhMwÎv2M^¿Ü¿¥˜0%ÎIúúÎ…;ãÎûßļDòI Á øºÙtn±õuÉÊ<'•È€ÛaÛ £mCæ ÎßòUKu·óšÌ3Cyîa_ÁO…Û ë“W"ó¤b™µö »“Z޳þ$Æ0ÓoŽ—u®ð‚ññ®mø+ÎÐsö&›ynCpg”­¶K‡T/ŒÅ_ç#‘ˆ:¦‚ôS“Ù_Â}nÖ|W0“çXœ ž.m²Ã „gQÇ@EŽÚæ)©¿_ úo·íÒ>Œm»¦ ǾÎÖÛ¹3~J±ç·Ø÷ÂJfÊJšOÏ÷@N‡±¦‘¼¨™ð'\YÜV»ëç$ØÝK‰mß~5hª±Ìu˜›†`·)§¾Îê\ûlg–¸õÄ*æñ˜–ÌÄåŽ4ÎûÊ©®¤~cA:r“fq'ô7[ÇcÎ÷'9ÑóhgéLÃå9 HæS³éA|R²§NÝxôT™DÎé**gàá1œA|ÊâïTÉ~É êô›ÍOxç\µ[oÍÂ7gŽ¡…{áG?YfJzÎÍó,ÌÂw]‚Ç@XìOì`ó# a½¥»Ü¶âßMí¶;P® ýÊÓïÀÊ[ “ytRJÜ/A}æéýszåÄáüî9pþw²|ÇÍ‹=ßþ ólNTÀôQñ7árÒg±žÓ+óßÌzèç¹óŒ‰¦°!ÉtZ«Ç{d®3ÓÏå‡U,ûì2 È ²'‡˜ÝÎ$ë„l´åÂɘpÐõ óLROÇÓ ± ¼L•L˳â?ï2÷ýHÚØÿMö[ÖYJ½öž·áÕ´âŸT^;ÞØs×¼yÎ~ÖÑ·Ö¾yçv«µè¤yð¦Sz6ÎÁê$—éÕĽ nruXˈώé7¬½Ì£”dFy´†¼N¤ºÕ¤Ôzk¤DCJŽ4^O“Ù÷|£†tG:çáýóEc~Y™ÇôÃqn{² &“,3æÍK„ï 9?Ø7ÁI !R­Ãa÷ï|ÿîE·²ª»ÞyÓ03ýƒÄ[qí¶\Ë Š­®ö8ä¤Ï³`qœB“\®èsÉŒ êÝuÎL¿½¸Õö\È»¥ÍNO:Yþµ% Úi‘e[”MxÌaó/—ŠZàÉ_¯÷O#ïɉÜä Sí9jõYÛǺ$Jy wDÊ3YÅÈt7CÛ|Êr–†¿ô³óîO?¿n¾•€>¿kˆlÅWžó:A¼ýtíãkÛl­Õ«õ§L¿½x=òîëŒx´Vì!]-uqìÏÔZ¨X¿bxOÈ묰ü){m“)Ö3ÍuöÂL? ‚Èú/ûÒXˆžÄÖðá*ÆL¿©2VæIŽî—0ègÅÁCÍ?3‰È-ÅÉ8,‡:§ÞI­Ÿ³ד%[«¹;‘až}Ê[ï…PØM· ?¼·äþk'`W £-:™\Æì„’r{ùNýÄÔ7i9uøØ’­˜ÏÔ9þT—˜³ãöèj}Ð5÷å~Œtl'-Š¡QòÞ8ý©—¹>T¤ñ80p”f¹@·Î8Žä{‡nIL¼:‡ ©^a¶Ÿm¿\ á–Wþ=%ñ˜ §œæÔÃ|©)Ì“…ïÜÿ®æ~æ¿™3&uÄVöÌ‹ó¨ÜZíön:00 )‹a[Ww’Ò¢ñ¿µ·Oh’[X&Ÿd-rú¹H¬©ïò¿ ÕܧO ÏL?Uü=n.>2`c³¯3£\à2Ñ@ÍO7sQœ ÝþN}2ø=† ¢œã7³ß“I«ç†ÓŸ |ª $AÏ9SîÖ^çËí=œò멵×AQÇ×ï_¦î$­$~²›¦-ÿàú„ –æ¹™õ'ôç,Ä|?%˜&µ/ñ¿ úyϳOfÖ#ÿñÇ~x2ýdxsž$ÖóžŠéîi©ÏÍé¯cfÞ:{ÖÎ9ò^χۛ£oÂUrT°ù—°Ù]ÛÉT®µ·hó¨HÚœõyœuæõJÞ>©ÝÓÄ]çž“°¸).voµ‘¥u]쌛èC„ƒÜ§IAfÆÛ jЩQ5…"f¢w†“.å_Oæe~6;µûžÆãºë¬x¸`zRjÒµGĬä ÀÜXüÅéOºû ÿl[1äuÀm:ïºu™ ¸÷’Öw¦¦a fYjкòÌôóF' Èêæ¤9>\Z¸=[~yo;ÓÏ.‹Z¤éûû¸ð–öþÊ;ÓO°[ߢl¨Ï‚A&Ü™µ}à±ýš&e®ï¹„]çbK8g5jK*”Ûñ€$†CT°±#ï Üÿî+íù”ŸHGÉËÍ»î¯,~"ç$þL7:ë ô;0H¼· â9§1ÇÏé@©r•è=IÍ=ÙaŸ3ýì|0½'éÓS½'ýíºfWÝÙÞkÖüqX2Ãe+ݰüSv¦÷ÌÞ½I<Ô¡…Ÿ2£&ù0̳ Ÿ }rq?ïó– èÚa1efé˜ò°#õžBZÔ+Ž×¯3}à>çXÖ\ëè O¤™¾¹øÌ¦ïõSj³«Ã̆ùýgØÖAÿ^¡?ìÁ`¢×…é bÎr-0¤6èOšü¼« ôŠ4†Â³©“!l¦O(Ÿ+]%H 2éü8·íš€õæ}Fi{~‹ ÷)[óÞû7|Ÿ[–³V¯/”«gæÿÞx\Ïá½’½…ùýVÃMú<R£­™ÄüÜ̶´g[¹2@Ph3[Œñá'¬7#Ц¢º¹KîÓg¶Éê.ü„€Ø Ù\êØìkusßSÃ4é=\PÝÛàóÍÖ¨±’KÃÜÒæe{ ä íøKºTW.ÏÌX›šbˆ_Ëy!·)¨Tp§Ž³P=„¤¸’F ô/ˆàò=ƒ=ŽkD¼7ØÎ'Å&AfŽrÛ™1d"›Ù¼ô÷ùþïæõ™g¦÷$QÎØgןø/ N ø~Vпo5¾Q²ýÿâ'-7m»©×©òû (»VÑü¥€Úë™]"æLd-ðÓû%U ˜ ÷IòqºÇ°;71ÏYöIÿ> î…HA‚ B>”Å7A(Õù‰Ÿè(ÌõνL©¯Ì€ÒYù½Íwí'yîšwnK,Psè-gi–éFå®Ð&–|â‹w’=‘)±Þ]3qëmÊL'ê‹kζ@k2)Ën l¿y¦ ‡ûÙ»:$¬:@:¶6Ì™þ¤ƒô"Ä$¶(§›_ ŽçNsoËçœ@ÍKGn!¦§uûÕ¹VàzÅÿ_©’@•ºWZð‹ŒyßX^“a3â‰DÐÏ|?A9G˜pßb?¯ÇÜWŠŠÔÌIî“éûh ­E‘+Ï‚D’µXÇx ô‹ÀsüuœÎøðºCÕŽúÅÚþ:ï_)ÐOYÖ=œ³qØV¿nÞ­=üÞU5Þ I«Äµ²gBYŠ=<ëÂË£:sú뽡ÿ¯!öÜ7~œMçÍ}¯¿Ö&âßÓ‹ûqn~ÖJ= ©Á—àÞGÈëâÆSr÷ë.õdj䵨eמ{GÞ½I’àïQè_Dú¶’¶úôö¬ãáüàu°žzt(È5«öàšáîN}²~I§Üý¶û6å$…iÚ«³¾>÷f¿S0ÎÐ3`Û1µóö£¬UÞ·1åd^€)ÎÊÏ ¸üÜ ÒBsóæ‰ÌY7Œ#IVSy†ø]3î:ZK‡;Œ1-ÇÚðÎÖ»¿¥ÛÏY0Mˆ¶Ã »Í'ìúÝuž$ú©CÀãÖgëíšì0Ã}sO…«%/7¤šZcÊŠù÷„×ëVÑ™uuø8uÚügìh±-îœ/« q(HÝ­N7tR2jT0)ˆÚ ÞÜw3õ Ü™ù`·þ[(%;™ýeÖÍÕ›3d^2¹¤ñ˜ÝÌüŸ[rMIbŽŸ@Ö®´xvoÎE¿)ÈRŸ”©÷Tܯß*`WÛô×ö•-ðDZ úy‡$fnà À ˜œuϯŸRw’\Ý—wòÒ"ü2û[/ƒÎ”ï¿¡÷$îþ¬ÏsÏõŸ…/ë¿u^vÛe/'_s߉ïòô+a‹-?aw=t먬$Óù-ô™-·6&+CÞo]kþÙš™È!Ì(ßh·3à'q…W†Ð¦JÚ+c•Y÷cHì¹…ÏH}—²¼iìÅ›ùý)譲̕gOÓ ~9Hž3(‰Š¦ªi˜}àuÖFTLn2™ @0¸iØ0‘O{ï?ågòïmë"P&‰O“sœ7!§“êîyð\mVåŒþ¬vŸú(šâcÛsù‹æÇ3MUnú§09çÂk„fâk&¾¾üïËl{û×2ò³K™›ÔŸn›ë¤±ãb·ñ>“å–tùH3ãî‚óÁœ8’=Á“;¸ °ÁËþ¾'È|%\6½ÇÚ5]Z¡ß^¼veö½ay;¯/µÿ-EjJ»Eî-ª¥Ð¶¼XÂgäÍÓX‡ ‡¥7BX‚~~«~‹,æ¶IàBòä DàØºöBÆpÒ¾ ½‡úE+#9>t‰¶a óC»\ãgõŽIÁ\f÷ ”mVu÷oxÿßÝÃZ?C÷-Ô˜˜@Å ºÇ„{#Ù† ÞUÞoöÝ=’ ë×}î9wf’Næ|ȤïFÓ3fŠˆUê `SËïîæ±”|’Ä!ÙÿœÙv§ðuv¬Ö_Žª3—gB1ƒþä:<ëñÏ•TØŒOŠ”{‡èƒÛ©õ÷¯Ž¬åL÷S=Á÷Œ‹ED¬ ho'Y™Çê¦Ó$¸Ÿp<»sÀ€>µ–&!HgÊاÿ2䨫o~åý?·üλî˜éR®øx²óÌ Ù­Ìce$†[æ’Ì5‡"ÏÞTôä®]t%ìlŠúšÛp ^ æ˜g~¶Ürhoý<åÝ0ÊÅÆ¹y‹~º©”á{í­Àà35ÎÜhlÞÚ›_ß/š‡óؘ©åbCÐÆ,atKáµóý…„Ë”Fu³”É?tä>­ d.~òvÙ׎,õZÄùlëöðñ®ÏIz©mžrÿ‚Jõ‰ r£Õ‰U”öã”ÊÅŒ=!¾â©8î^iô|°w2§fÛÏ(-µ~‚Ž€™ß„Â$“¤–Ö™‹?³öïÁ}úëÃÙwÓcØ´J—ú|_ØÖè1LªQú^¿Å‹€>™añ/› î­ÕfµÏÀØÊ§ÕâY™ÇÚóIØq¾ÿí•ÎU FƒÄ>#î€r…Ö‚}åôÓAÎÚÏnÖ´Iš÷ø>·ºÌOã1¼6›ŸG>ûøS}`®Q¤>“NyR]ݼKØÊÐOÄ,ñ™²ûÎÁ»=·#:3VGtE¢ éû–bTf§‚æ|rvGì›÷ÚaÍ¢9 ðUàØº2Ù5Å®dŸuuRGI2–"H WT|´®ê¤cH:B9uïÁW‚ƒ‹=á]bÂYÓKE"í˜ÀÓiìœÚ´ÉŽ¡‹àÏH”Ë`GÒî[ ÀÝ/Õšây^¤¬pyØsüë2˜täŒ>¯[o ÍÉÛ&ŒãÄJ–¿a±óâdŸ3ëÏfâ(µÝø_ë ±c¡FŒ­· pŸ¤îpÜX¤6¡¥¾õ¼Øb[`‹A]-Õ Ø*ßOG^:×Z›¼€ a™é=ÎÜ0Tã„[Çló²¤Ïm%Þ™Àæ)Öè¨:E%r¿·GÉœ~ÛZÝÈw~WÏç»vÀePWçÂð†ÁŒåJí‹AOš²ž7Ó ngäçd¥p¸’ÃÔgÖ©µEË*ýO~º î÷Ùn2ι¥+ÎÇ»÷¬^4Âcʆ30çCjÐQk‹ó|Ýÿ í,(Lwí»×Ù{³ýÌø÷Þ:5ýp×öO-qªBtÄ E|ϘÌÓ±ùÏŽ[X8rÅIίV£ç'&³ñé›É!îp€í¼ì¨ŸÛd1úS‡'Ù9e2OÏbOô¿¹y7ùõúÈ­ ØÑ~ΚŒe=ÔNªAæ­ÐžÏA‘ÃOfµf×lÝëñ·8’>Nžé˪ÎÄ›ÁŸXï©•Öö®Ùï¸ö²ýµ3L¬6ð˜ÍiN*@̼vÆÝgÜi¥nÏ0ÀÍ‘×ü=a%<±ÉH«¦NBOÚ¹4“ãN&«•y9V\þ]µà±1ræžWÜY@Nëoú¹èI­îsº«š³ÎÙ¦®£+„\†­ÆözÎQýÆ@ꄤˆŸD-ÐL$C 4snIj`LO¸L¿[D-Ïul–a ;»«žË¾‡ý3¿Öü9¿›C×éÈ›i‡ýy™\ä0† ÙÉ”«˜iÀ êx?8‰iZKÒèË:úg€a‚;a¬v?{¸2%g¹F’Lü~æˆÏM¨Iù'‰Š:7o—¬»Lw@ÅÙÒ:9&íìB®=忦›"鹊›¬Ê<ò¦&Ú’‰¤›ä*Í‹*+\ LSIa€!¸Ë¾® 0æ¶9=Vy£§ÃL8?’//‘°Õ¿u{|TŽA9ªæ~™ââFêÄÀfÀÀR¦[¯jZä9r?„ãVr›¬O™·f¶ŒM¢æë“eNPÎóâ_.¤!‘vÅÌ+¼üÔÙÕfÇP3êH½¨ëK•Ò„* -!›ÿž€íý+õ¾¶d¾Ö“»5s×5‚ ^GûLsdx?s>;÷ÌqrT™ã§®³û•/Oª5³ï íç»*þ3ô·B?k;ÞXjÓu 9¬PõÅürk¼$xÍ<ëîk»€—7ÝvÏpѤÎ!ä|gè?©¹Ï^­IEÞ{¶€Ð=2¬ZðéàZYO›ø©ðCYR«›»™> ’zÜ2fAê,`zîß³Dçm|’*ݼ»ÿîÙZ’LZ3Ø ÷„xÎg%Ê51®ìf`›‹o ÐQMze#+ësvõ |C}™uîóÞ ÓaLR‰é¤!í0±Ò9>f² ‚¹7͆ÈÓ5Šäk0=Ëbvàû< Ûrù<†ÜËaU {^„ïIÁ ßM].¦XÕÞL8BgË}šiêf_Þ nš!˜vìnIJ7óvt‚·/³¼A9ÂÌ ›$cPe>ºÝ"kÊ#a†€Þ6UÉ£—Ó"󋮺XrÎD£ÝI·§å$]Sø+sÛQ9¯Æmè&»ÓTÎŽþ:S’vj0x Fíº¬)T¿XË[íÁÖxlöu(嬿sÿj˜¸e fNLÖ8·Ït²%â¦ÖÕÎkv©ÓpSÛÇUz¸%?a˜á|?„ÿ¥ºŸ>Ù„ëÔ&J úìø×ðb_j1L%-Í90Ö|öÏ^Ìñ“ËlÕÔƒø®!µ§¦¸IÔ÷?ùú¾óêÔ~¬ÇošG¬þëìi…LB1dJ¼ö¬fs²ög1S_‘¤ô•®B—}¿Qýÿ¼%+®Olþ“ æ}>ääžéÎOlbåmX%H ¸füϤ ®íµŸrºÄ9¦©°Ï„ó¹U}œoæñ»a—k¢i<¬©!³™Ï7GØU‚89ì™m¶ÕÇô›>ÙbÌÇiîÉMøñúIŒqžÞM¥ßfðÖ»í•õfÏ¥šƒÉ<©ù˜™{²îÜŽì料ujÅØÛ•/û¢ñ 7”¿hæ:3â,£3ÿÇÜp}B*Ž;=msf±3 ‰Z§Ÿ5«lÆîfã¼`wŸ¯Ìo}že=íHÀIpŸzóF•Ø `¶:uëÙÐY{ è'd¯_$ègµa7ÌzïŸç˜–m´*cPÇÑY.ö±¸2W]ã`µ~‚þN§Á}çï Ä-ÐiêNÊë{oÞ³á>©;<—úäô'iNîÄ'ö(ÅŽË¡òØxÕU`0ÀûÜy5[¼¹éú’3Í)ƒ›Zx ÙHÊçhÖ‡áZÃÊ•¹õ52žW™‹­'‚su3¸v0œþ½|¦3SÖ¹Oºƒþ½ÑÿîÔšt„Ÿ«æ€!5mÏ-¬,%*#álgªuŠÒºáÕÎY+9uh<`öÊÁg- SÙ&Qbf€k’ ‘O"ù8¨ØÝvO!Τâï3å10œó¬ósCaâÙQû15ïõг2`C.‡p¦È¦ã´ àìÅ{Óþû²¿I)¼‰yÌ%MYÿV.RŠ#0WÇ >¸g6¸âÈ:˜ñãêݼ1y"5qÿ܆ÐÍ ”$ÏÐÉÕ!÷iÏKÓl81¹æÀœœ2s í\a`NËê=v07´c«¯…–!–íÆj© ØÄ«÷ÌEOB"ÖmÈ_'Øe¦¿þKÐÏ3¢ÆE?üñ‡ØÁ<:–!~'‰¸˜¯VO÷1Ûuñ½j»•û9>t5¶/¯-¢æFޔןÅ=­úopŸB‹ÔÂËL?3ëv0èOë05 Šãéš f†þ X¡bgË.î¹àÝ.çÔÞö¢ÅYˆÏ óõ_ܹíÔ4LÎw¢*ˆ×sg +ºÔÑbÝ•k |™áÙí°sm$©ú¤®‰”5weæ„Ú‰&”´•lŽæ°d—gÕs›YßɽîÄs‡ž!;çÜTšD9U,éhz°kªIc'é&&á“ôßdeö¿8“A]7¤µo‰«(Éy`ö36ÌMi,S€Üu™|œã§ÁÙ ÐýI¶ßêA|r`@R³“ƒ«Úó‹…N7<™Àc5xleå<ý®¯OÁ¬“—ˆ=ntã_ÃNÊ K’n» |S:ØÅàÖ‘³f18‚f»ØrQá‘S7Ú¶S6R1 f†›”·ˆ›í˜ËëÎ C+ LPñî£å±q¬HLâbO§^Šëqfð3WMÍ~6ï2àçÌô»&þ*¸3¬¢ÌC8ª†×yqÏŸøD3²¤K“„òÎCð/µ}Lõ¡²]`“dç¬ä“ù7¼ÿ9´HV\„æôp;²›’ý׎¿þþz^}nr)U&ÕÝÎÐ¥>a/‰ú„’µÖÀ®{¦~ס ]2 לvW@r¥íª z& ï÷”0öSÆg¡k¶^«‰SB>ë½.ñ™ÖÒݤgŸ²æICi&U>€¾¼ç¹ ]÷TòQY„Ô"­–$áÝhÕ¤ÜbO\g—íÿÓ5Sž‰n?ëÒð»œzïêZûw‡dÊO3±ë\¾Yõ)?²øÖ–qX2gñg­Ë÷Tœù“ÙËZ=io>~T®±¤¾‚0pN Ó_ ?ÉV2êåÃÃŒŽ¹ûTÿ°BHãöª±Óib5‡žY; »ãží’õx0OÃðƒ‡y~‰ùGÐi…óG [í ËÑà4G:“! ùß\ŠRŸÃsF§O°IDdÕ×ïˆ3§Åœ“| €Ë 9N÷ N¸Ø3Ø`4üdúWÅƒÐ–Ž¼»ú{6­ò½Ó[cý¹Ö’Ù(ÊÜì½áÙ‘ANé×lT¤ÚE¢âd³­>¯ïœúæýÙ9àñ´öNÜxO-¹³ÖÐìWàî ââŒo˜ºý—פGÞó©ÖÉÇNìÒÍÁ+Sn~cþeùõ¬ºcg€É7UR–ÝßÊ-§P©j¦™r37ãæŽµ¾‰–™þYü4yuæëóº»ÿÁÑÝË2&꘵ïò“anÒöI±#”«e¶üâ£ke¡~¸àâIaŽàuÆ ë1H–d\¬íP ’ØšÉ2ºi<ΑsÒIÕ»lòWºd30àq&ß_~nÀjÅþ—Ó1Ñ⃬‡d!…Ùh t’ BR ïœGÃç½%*ö0™ýì2tÁ2ëè“dfÒÜà¸1›BÓ.i¬’‘Ì`—b:U»ˆé?u@#·ÊÉ9‰~s£ù“öÉíù_‡æÜóï¯_‰Íïf_×=ôùª±­ÿºÃ„îõy]ßúl¶fÅ ¶¡IkS¼îõß"ÉØÁæyŸåÙ™Õ´nï`ƒÏë]¤ˆøé¨»7‘?H³s†³Ó'QËÏt ©µwVû¹qíµJOöKN„œô'?·í&ö¿Gƒs¦;“à¦m­ì¹›¸Þ9ýnÙ´naµ‹K†õdÒŸ{³ÕA¤©#Î'={;ïºv‘´wfU×Ü'iZSwRå$eÜ Ü»vá³z“äJS£sbÞ§£kÅ>Õ¢fp¯¤Õãì5—vß@î 04·­´!2oôîæ^¿ÅÏSÔna^“—Øàå=§`ÃzçΆRwÅT fÇ­¦ÂЂKóú†wÎiY ‰ek-üœa€eF9æ»fü2L± §‰=ü‰I„ûVàÙ}‹Ws°ŠX-©÷{`iãþÄVÝšV(ÓY Bñ!¤L'Òõ¹Å½¨\ãU`šÐij響 5nvp°±çaþžÔG¦3Ìs%Y‘Ðy–༡p$Þ' Ï¹È³•=,o`î¸Ï:‘šÌ•Ÿ…;ÁénÉùø³ûo *R­Æ‚ªITôÆš-™|yŸTjòuáüïÙ5é:Ý™d»y·±X³Ëñ/ÌÐÁÐÓk–XÅuË-§à:ŸÒ=¶Ü²Â•ão(4©pC.JZC’N‘Ã_÷”õïTöû¦aCöNÏgóMmdöˆŽ¼fÀ›Oæì;—ùä›@63÷üݤ¡›Êa|,ùH¦8ð0áÇgÔùÛ-»?ZI_ÖŠ(Ì=×±‘°a÷M櫘µJêìn&gÝÆLÔíᕲ¼#3ÄÌsÉtˆÂo1 ùâ™a*w.ÜeænºA–ÕåkÄvò‚¤»ŠÎâ.¾“¦Â‡ÓM½¤¸Ì¥Zˆ]w$(o*Tââ³C€kM’µŸÃìug:¹§&`Þ? ÉRc®uÜ[e™K}tºû'Ô3yÆÌòÄPwR’ëBg¿5y8ü b¡l‰nSÆzVrðÃvä™ââÑHv`nêu— ÷MùNᄇWÁ.)°áu·Çpª?$%ŸTi2ýf(f’ÏÙ¶Â,/á»#9(MžIz³ä½Cê]Eg ³§»‡Àš&¨G±_ÎÊw®¿I“µQK%v›Ï @µ\BH›aŸHbÆ+9³2³E–¼•þ¹‚{êâ3‹oß\{y&eÖ8ò\Œ)Ùé¦+O7|뻦ñ®Sß­&HòÝ ‚©öSß"è÷u|þÞãS -I¹L.àãÝe*”)aÌ~qyô‹z :_f•˜9fˆUc tG˜™óè}`ªm°qhÞ†°;ي;©†Î+eú]C ɇÇV÷*‚{ÒØês.?œ9m3dÙ_6ÐwóUŸ½v˜º+´ôÙß@ÉÍ † nú·Ø«m–ØUÂÖ1d'ÒŽ 0ÞCʈÛN«û.¤ÏÜzÎ VËIŽ éŠ¸«Á²ªŸŒºz¥ o_³¨Qe?ØÅgR ¦Âš¸b,‘| þ’4§¹Ésw¬gõÀùì=÷¿B”ÙSÖ#0[P%†zIDIkß)ûžBˆü­ÓªrBMÆa®f1&ö'Ú×’ÅÛ—9—£^·ó:&f¨vS|ù´N®ì©3Ffç»ß< ‰ºEØ{K’[†û©áà ŽÀÜÑÏ\>½!ÝþE)O.9„ÝžF   ¼ÜÐ\“#« üWNX ç2ÀŒŽxª÷8ûÎL˜Aç“é?³ÚœŽå¥÷+™=Ùñ¥¿ÁŠ 3÷œÎ ŒÖçT­)Øô¨ñ¼_†¿lˆ$½Â^/žQgý·~…da^ðžœå ¼`¦0\´ø))s¬›qd¨\D.ø4žÓ·•Ž˜û·|gú{È>“vÜ ¬Óö Êû$Úg¦õd!¾wK±EQyg>d6gŸž—.åsŽJU£‚äåöÊ1»÷·»¯0ÓoK/‡ÁîÔb`ÃÔ ÿKª¡[ŠYH0úN²³Ï¯»âÁkñ‰(Õ»¸fbu59¿•š˜Ý½‚½O"žçhp63gÁ Ø’âÉ7—kzb%$/"91ÊÙÞ 9©cÖ»Á7¥e“ĤgÝ$š€x׌{:0dâȧÖÛ7*ìùêøóŠìaƹgÓœ Ó爵•f"ÐM^ß×+©-qü_ñ$“ðX!')Üó ©댾˜Ò#´çÏá tæ »´Ç[Öá‹e,иða ܆µ 24b6ùךÔÈž'ÀÝüKŽ“m²„¶”_t„ÝÁý³mˆÄË;&ÚógÌÊ»ÓÀßJS?)ßןº,J]ÿßàEJ».R X·ž}6gWÀœéŸ;R{1ÕúÉø'ÕÊ$\øY—d¼Ôê':1ÂÓwgý–¤HcÊïyÊsV!…ÒþëLxÑöË=KŒfÿœÎ!Ð\É8ë½G5©âÌíÑTvçïÞy`ÿü$ó$ˆï«?ËžZF‚óOê?Ü“g3eG-v¿¢óô‡›ˆˆ¤3¶³®ÎDÙúš‡S»ê¬«cÐiÕù9ïÌ}‚Ý^Y’²ÍÜä:³í“ègG¸Z®i'­×FR«tj)¶hé>ç55a)Aÿ3åó-nbÓ`l„‘úн·Ý~ùPv軡¤cY­Øí†ŽÕÒÍÇ35£‹j0ÜÞ–õ<ßô eãœEã¢Åß"47‰È‚›VâXq1ã·ÈJ7¸ß÷ÒÕñ¢K é&×]E~…:\²²­Ù7é Ðg÷Ÿõâ·HD!xý'¼è§z ³x‡Px‘Õ R§pdHrãôZÿµÔ)¹þTÂ1ôOÊ÷hîyoB‚”ã7-ÇÇ0W*Ò¯tAŽƒÅæOÙ}Òê=C,6U»E›K ûgÒüƻ˼yÓlÌäî̹&âÇ,I°kÀ$nËð†I>{ÀóÞ©57D”,^Ù»óÎ|}sñ½«$Ý€&}¤În¬¯Ü5j÷y}’tú=k™Æìà–kŸ¹I>„)Eg[M5±$Iòý5xMú÷6K.¿ZÜ–:Ãt»ê¦ZÁL˜á bv{Ò®Iu³0æî…$Bšz2;WÝEæ™›€]q0ÔÏ\W±XòýMê@N?’˜ûçÍdN§ylæ9Y;Öm1å$ȶŒ‰ýáì[mê[ÌÐóh™¿w9̅½åwéÅòsfÇÙ¾I8Nƶf×’ï¬Ý# z¶©ÙV)Õ@’ ¨>{HÈ‘5ôçö$vQ¿SÖ“9é'Û´€¬¡¿yêwêww ª‚A+£ÏÆGËV’ÁOS$f¾M{°íZA´âaSœWÐá_jéf®1™ñJqoûˆ1žÐédÌ@ÈNÌXpÜÜ`J ËÀÚæÝSî%5otu²àæ)»9×"±ÑЧ#ô¹»õ™Ÿ&hñ,¸OQZ.œœñœ²€¯ëÉ6.ÉVî0±‡³Iö1ý7Õ -(i°NšeÝùIyÌ<»þ¦öåÌ¡ïG#ƒéϳÑIÄÓÐ|†ÎÆ`©V`¾…Úg€ÁÓÈûxO•“¤)d½¦ä¸œªgË£·¾õš›YãΛϤ»»íYTrÏ€$çžSÇz’:Ú)7ëxxFé¡å',Ï9àaG’P˜\Cf»©¼Ë’º[âØhˆ$Â8ÊÌÙ$«sXçË%œÕ.ç\ö\àv{®µº­Äð&)Ð'Ê ËñV¢¢ˆ‹¶¤Öì-¼Kcž<þL,ùô3óMê‹Ï—wQ'Y×´ôJuŒ3vìà@QTTn×fYÜY Ž•I>üœÝ&³–¿]{ëõ¼æ¬ÿ¬™“¸û³3ÀÜþ{£ÿãjçb¢÷˜\”˜ýÖóyîvrúWáØˆàÉ@?9l˜Ì%ÙÇ™q>«È'°Ëúá©Ã‡4¦&rVd§Ó,‚™±>Cöù¿IG9²ÿîg©ÐÄËiªÍ4žÔÛà%ƒûYQðÆË6­ž©s`6·Jmĉ‚’‚d¼••…Î=d'ÝžP”ìÀf3©42s• «$¡õGHÌ–€xÒðq^Ÿ35õ¦ºAòHž¹¿ÔWTäDøitú­sbK]ÛNÑvE¶årË,ßórºÂ@uyW’‹YYn&Þ‡û{ÊuŒówë=ùñÉy€0‹ŒüúEh·#@“ÌCÐO‹1Ž˜):I’»œfØ`=ëöXa†…uNî¬QØ‹×MÃ^ÂYÓØ[ôÞ¿Â;‡&\œ¦2KM–]»‚Mä¦3ŸMØÊæÔú¤öcŸK±õžAE}—£ç6D³k\†y?0­í¹Ögì1É^3 ­CG^Ê¡²g† T ÌOÛ»79ךð“Át¯Sð0÷ ¸n`÷_f÷±ÇGKXO Ÿ@}îÀ‰+ëTÌôwUÓ³¥Ïò”êÝ3²§leÊà&€xÓ¶;{Äò®N  µ=«j&Ñ%c/Ÿ]2œ²ɬß)ý@ßo|]r³ïúË`iÖø·u`&ùLäŸÝÜØmOfÓi¼èŒ©{ M?6Jáú>sÊ“’3åN‰æà ˆd¬$3[nu)ÔÉè*YYÍyn×1¹(· Ÿg—ôŽ\ǘÏ+ý®Í³R×A¢09%½¾áI°5u/¸Ž1+½”mõl]Xkû˜”cæþâ9Jf ,sÛÜ¡3#$O-{$ä˜äæ`_7Ðpw)°XÌ’1o).–6­2Ó_ÓIDüoʾsôhæžMÝa=ÇJÛ¬ ’Z³Èd~μµ³ø,ævLâý“Ë K?;¿E(Ï;‡ž»492½Ç­Ì<;‚'fúiþåL<ÇaèçÕ1PÛ—æýyœÔáq÷Žù”dóÄwÕ€³Å­Æ“,‚W²ØwÆÿ/QÊŸÕu>eýgªÌ¿•| ’pç-s.æõ9z¤N1$³†óyœ'©ÊïÜ¿ï"ƒ¿å gïÕäÑKXÌïîïg‹­kb³›¯@s¿ÏÖÛ©7Qe’Or½] ˜à>ÕoêYqÿ<»N5h²úJÕ›”ïO-È®g2ÝF<`¬’TÄ4ôŸI;†›– Éì†3£Ÿòè³6Î^—8ë±ÔÜœòÍÞóì_ë_¡J unl¿¬oãk—šƒ ²iÃJòŒ †æ©can¹žÍÈxÌ-×/fßí/˜²ò]ËÈʼœ Öy3ñvLšµ\T¼7CgGðlÓ¤Úº/ ‹#ޤŸçºYÍp‰Ín”MäÅ£.5%heÏœ(Û£kZ· fíA¹òf“sQ´híÃ8’rÉw aņ f-~—µ æ¥êZ0_^׎#ÉÏ™“.Ø]Û°Á´®,Ã’y*j§6?¹ì†ì¼^uîõÝ‚hôÞsùgWƒ) É!!Õ ’¢y}‹Oâ>¡Ð³‚¼ð3‹L5$>ƒ Ü(o®¿)+÷f½Ïr™7pÿë~ÛÛ!øÉî÷ÇÀ ¶òöî¼î¬û§¶'ЯÏ)&Ë{žµ.lœ'YéõÌf])ß·†ªömå#ûgYeMíÅd훚hÞ¿ N3þ„§ÎÜßZ’Ÿn—ùîæì~ÖùØf9Ñ3´³Š‘ksØsãCÌ0Ì© z»ê‡$ùd­•´k0»bà=XAßÊú©=7u¸?“¿hüC%FCÛDŽJlû_&á˜cÂúðl¹•B#¿·‹m:þÄûwÀãÔ¶C W–ººMO”r…ëƱ¯ÔNHä®vóÛv%þU>ëjÏ_ÙúÏÒ 3©ÏÝmÄ{¼ò¸Ä‚eM<6ÒEf¥^fH=rC˜lv÷Lj¾[“-w¼¦Ìs07S“&4 Ù Ö¹à9[ŸÚs¹=a«¡ü®wq ì:àoÕ1XØhí!H1ûn¿RÖ¨îOEzýîj!+³îLíáÇøá¤îœœéDøq/„B3wIâýÉ÷ž‚S‹ÿ&·WVLâ3H]f¯ ýS«ëÜh{S˜YþsŽ?ùÜdý“Š¿ƒ¿¯¿nä­Oªe¼Þ›ê“šÕØ5dy SÆÚôž¤¿ž2è)lH{Ø¡gR)ÜI³-;j;«m?Ú¤{“m­Åå3µfÖØqÅŸ|ù^Ô[¦°Í$ÏDÙJÄN7:÷Ã5…É vÍítÜ:×L$àž–Ôyh¡p»V§\r‚ž©û΀• Ù» »y7“RNÚ¶}‹S•ÌÂ’~Nª¸Ê±··.k.™»?;ò¦VÝùh÷1§BÚyr[ðœ8@²pgòx9öuFß²S©Pb8‚þýÁ8_’-GŠJ Á-*Ê›ŒùŤËžªí,îtüg0P‡.‰j1ï|ÿK6- BèdMÀ&k äÜÊn’yê8Yì¦Ý˜yüö0g>oÏ1¯o™Ái8ËfPÁGbwZ zÀºÇöibå˜ëhi˜eÅ‚Zª÷°`bGƒÁ!«yTfÍÎΗm¶ízäïg;ï®äÓg Üàkc÷BìÁÀúV’X-¨ÊÜ¿!ïCþéóëVÜ÷ëFÖs¦%ùÎ;?àIÅŸç2ƒ~êùÔ'uwñ¿õI] “f"åX¤Ó¶AsblÏf[èÎß;«m¥K=ô[{͵2þVRÚI ÞÝJIëæ“1Ù™¿ÏÝ ²§|ÿü»sø‘ööÉ”mª6¤Ê€Ã9ž;i¨œi™Jp_¢± ¬)C‰qnÖC&¨¸·ðä>"ÏÒäI¥gßþ$ %‡WW6fÙÙß×ñDb™M²8n&Õ$WÚÔn»_ÓÞ…×ך$Ÿ¤äã}ÎãìÆÜÎØë¤¥ó˜BV¯3î6‘v‡»UáËgŒÛ$èi» =yê)ÒÝE3Ïì s„n¿Øo‘5LnÙ!|,èÿ4zžýŒŒ³­Eâ±Y}Ÿ‹ sôkRc©ÝÊ?vÐäU°¥--…ÉðcoÞ=A§ÿD¾;ÔñBèõŠŸºÛÄÍ£O¦…p©5z»ÎÉ)4YŸ…O¸_{3g— [Ý-ý¼‹vAÒžYjÐê(¶*s¾ß[„ñždkoÒ¦ ($uÇÊý¥×ʈ8T¨ý“XÅþ‡‚ÃTHðÇ‹× ú3)¨÷ÍAÿ¬t£ä£å')ëo~?sÿuo׈‘Lõ¯z¹EÛ€¡?I57ùlÓ9fºË dv¢í{`vU«B°ºh©ÜÜŸð¹ª0÷*$Xoìú‰+ Ÿ¼'x}ãÔ;× ýçVìO{^5L÷60Tãœo%3õ- nÊ„åOf•õfX<Ôm¾Iñf¶÷J™ö/J‰ÑD_¹1®J­®‰6“è»±]Ì‹}'‘ÉËäá3 t&šMÚ>I¬Òí>‘‚̸F1We¿2ýæ±™ÓÖñÆNéC»>`k _l‚W÷›ótùŒí£ bA«uQÙQΣÝé@ì஋töt;‹à…°¦+>Ò,ˆ×´ÈRÔÞʹráÔ„áôÇ‘¯óJ »¤ˆ|Ù7@÷†”.‰Øcñ>òbS®š¹™Ô–rØúlt¶rb >ªg›©ÙÌ„û{ð¾Léá„b NàÎmÜsÂ,{ù]ŽpÝ ;Ýâlö%éˆW„a¡þT*åtÖ{N^/©|ɉ^gÞ¿ofˆ㤛ƒs›ïV,Ö™^>¯úÄ­½¬“üN¯ú/yÿ솪‘çn(à¾.»oBÎäÛù×N„™™1Ÿàï,$@ÐÏÏošb³sðDòIzD79ø¹ õØg z~Gkè¤oåzH"€a’mÔ\ua )u Ÿ8³Þå°{u>ûZرÇàÞt—19û&;­“lz—ùîá„Î3L7ÊÚÉHg{®ûìÂ4h¢ßP Çþ™ë?[ZƒfgßÄÂOÁ’Ç¡ëv8)—’¯Â§¿ßÊ~íÌõ¦]Ø%üJöO¤©˜Ln(é%IÕ‡¹y Îpb{¸òæãÐ[|ŠÓéÌ•²àHÈe"Šu–Ñ™˜¹XòÔ™ó&»ÑŠ7FÐÙBÇ yù</ðœÜS˜áÆ\–Ñ÷ À‚¡†¹ ~œ¥K„1ÛPJ’ÂÌh2?mªCA¨ý¿ëa~²ò«Ý™‹Ÿ[c ­öÄÓªÌ$+Wõ+¼g¥/Òö“îÌûÎÉ´À¢§BfëIÚÙÇüœúyùë¼^Iè“À7õÜUñf¢ßô߉‡NAÈÀð¿êó –,èIzÏ~?¿ïLvF¾pö¦îç“쫺€ZGMé ­n <`G§9¥oMLªßeïMEú`fv¥íªšÉÝv 'RÝ#©è|j’þPÝoß tN”¡Üœ}Viìãz‹vÙkáNv#™§nv@²¸2?¢ <©83($UØÜÖrî95õšð“ä›Ý¥™ŒºRã,SE¹¥Õí¹+ëïu$Aÿô7qCö8ÇÏ{,5(;ÐÊa}Ëò|Wp/¶–'xuæÞ½á„ÝæþÞØCð–5¸·x(÷É_4GŠqcAÓ™8@¤ñP›ˆ@¿¾UŸ°¿ž¯‡ä³ŽÓz “ê¹Í®«³@OòÊå¨òsî­Ž$™mqÏnÏån/ÂP‚~çÆ¬Ÿm}›ô—ùòäjL­ýºúO8·Z·k$§¯ïb6º®5ͳêERu{xT¦3‘Þc·ZVrRïÄÞ€{fUI²ñ–C¯ä‘I¥ CBÿ¤\᧾ƶޛӿ‡«>ÐåÀ ¾íwËÛ,`?~×¾xö†û]<:ñÀꦯ…ï÷‹·.!)é1ԅؤS³ˆª/© ×¥C³SW€Áºùúµeý ©8‘^~ÈG7T%°§¬û$p„­»O\ÂS2û© _/ú9ì@gøÖ¯¬<·gîy6cˆâ®z±>Àª‹‰O©©—T+ ™ <·óú>áSœ4øQâ³¶tÖ¿ë·9MLxÅù—S!i*‚™á6(åé]°&Om³~B t:0p#r"íè×ïò,lÎÅ ‡:HÎñ[¾–œþd"ã;„¿ÆÍðý»>IWÞuB+_9,'x¥GJ”œšq]yÈ ?ŸÇ!URn>‰¥&"Í'øþÙL-u¤ŠÁ½g3e 9Gy{Sm;)Ï3¡`Å¿Oü…$£iP>x˜ÅŸ¥?¼žzÝÍØ1&NŒ”`kj«M™òqÏ™1Ÿþ{–3ðhSóܼ;S¡rƒò€94J$"Wà¿tú™_'e¹ŠG*QYã·ÐZ[ZeÖˆd»Pä´»qPëì¯Ïc£– ·¯Œ3ýµçä³F™QëäXL“gd+îÇœu¶í’dE(ÉžçáxTT¨ ÜŸ§ikòp?{°€¬[Hw[Ÿ^U†n²û°"•y\D«ó²ê³õ|ÌjËú– <$üPÊÓõû¢û>_×…XäÈÔä¸ñÚ1´HzA®˜#;{$3ˆ%¿ßõºÔð”d= ëýßÄõòÌL3« õº¡ý8_nˆŸª ¬'yÐÙC€Ç“¶ôñ;$à_fúIìa3zÍu„û$k=üþSiľ F߉3~¶‘šI)²–"`µ³VÄnϽ!¨XShΩÒ´ékscn’Ô4Ð÷q¦î…t<®c̽ÉO ÕÜÌ“W°¾ER±«ÜaHÚp­ï†þ‰xcšŠ¾á~~œÐÜYù~Ï€;AùÖï½`¿nnÎÌ{uVæ>¹ÿR§„”wòN ÜÇ9Û„¥à4ªä3À÷¤ 9è²xýÆé·Ñ´Û\ìåf~Bk¾:`ðMÌò=¡óý;Ïl>¢Éy€ÙºmïgÒ¨²_¯ÇºkݵAÎZ™Ð$ç¤Ñã8P¸“ ‘Îës|ü—ù{Ž•=Sm—C°Å«cÒ—icV–ð¤6ç':Fc¯$=÷qá¯c¶» ¿¬úoJLê +p¢Ü0»ï*A2#_ß ­¸|l<‹TÓH ßÐt<Ø‹åúRúçvÕϾ­³z"{]HÔqœZoÝ]33Ñ3¹èìRHúE©Í7… ¬sÎù¤ÔÛ'¯€zÕ˜†ÔK}3·õÍ8¿í2â'†1{ÞÖ¢ó°V½mìˆ+,úi¾C—šì™Ü‰R’`úì=ìì¾Á±;3“Y"ÞÌÀºKÎöB–sÓ°ÇÄ$gñ9jVè·¯Brcpïñ­iTN@§;îXnÎöؾœkO3j¦ÜhrÎÍgɹÖñ´½ñ|¹†`HáÛ”BœnAþdO½^¸l£¤9ˆÛݘ_§R;3ÁÎFúPdžw–Ú¹03/Bþ× r÷=eï ú9‘I•ßË*!2Až'J^S7Zy:¦ß'Mb‡õ‹T;!µ‰¯äEÀvjgÒ2rå¤#-¬+Â…°s µE×:6wÔ–tHàœX˜¶ÀËÆ+‹Óïe€"L:¸g†!7C>l¶²2à&I†ïSs­óô)„˜÷¹ç”ËwèâOðÔ=_ïwÞ%´ê Œƒ=’îHº°Þ‹óëÙ^j"½ø}Òƒç=ÀàÐöÎß³ó=C¦Àÿ5y)y“û™}Îeª!¸KçÎ=°ç'Õ ¼"¤ÊC nzv'ãZeú$…»Gx)’AXŸØùÄ0îi4ì³i—›}å寛³àugÖûçŠFlÆãL™þ.Çoí ‰Ñ>«·9GÒuýuHcþý¾^¬ãq»ð¬‚Ÿ<=>DžIf4)Q'…jÖ5š©GÎâg²Ó½lá“å5Ëß¡‚ÿkÙD~‹Šòæo%:#¶ÝwmÝVM¦]©…P²« ,Î75àŸ|RIa. “IJ̤²îÁpÈÃ-êqá²Ç…™ôŠBrñ›:y¢Î+[ðÑE³ùçå“YºN'ø¼.ÉK¡>)¸ÃP9NÙ"LÚóÇtóÍJD úó ÖÈY ô»_‚#O_Lk.Ù¾Ç]v–à󞚊ƒ3©.¤–)Þín$e KºÝcä~Ú±QÔlxÓæ\û¬®sS=H9þ„ú³Ža±N¾·L§Ý’?7ÖJOw‚„9«ÝÛue½šS™‡ajRÎaÀd˜ä5;óéÓç]ðlÈëùÌ Ÿh?ý1ÌÕƒÙ°lv-`ÍœÝG¦ »œ”û¹^'E #¢T±Lº=_Pñg9N¯\®*8ïNPžˆ"ÎC»é9å¹ÝÈ*zê½4òÙÏtwžaqg"6ÓÂÍ¡?Ï:‰™&ÇbwÀš¸5˶ÚÁûåFÇL|$¬Më6\kü[eß‚˜|ä̺ó°:ö²5ãKwj'£1_ê7'ìó¥"™‡Pƒ&N\Z(ŒHæ:™âl9µßYòÄu¶Øl{2È“'î¬oÖ¾©>÷ÇÉ©—á“ã]K©òsÖš’X¤a=¥`÷¦íSг>™G€çK%i‚þºC’·®»D å•ÿäÝÛ‡[ ¸gr¼Ã'«ÿº&"“ œ«Ž~–iZgrŸM~Tdbc«¥-“u:;­Ï+ Ê×–â¹'ÜžpŸJüµMç2q†C¾"¼K™¤p«¨ççzg=™”çÞ.{P˜Õ«V†Û9uÞíå &ošP³åÖ)=™½?IÕ¿O‚¡½|ç\_ÍÕ˜©ã"5à¦`€sW"y }‡$_'&ŒvR¿!—kû܃E#Y%ñÝ;äÓëÌ$9r{ ñ5w tš3gwq—!²Áër <’Ô¦›§™õw[pîŸ|ˆÏHê°T ÌÌ™Å:Só±÷–Úˆ}ä/F´.9fåÀ‘ß)ÿôBTÉiÌÞ½\Hæ‹ämr»É©””…rÕʰ«ÌÊ3'MÞv$¤ëP}ßv]µèÖwëH˜aeá’PŒÙz‚ìÄ7HM°µk®}b)ÓŠ’«®fç½Zq¿{j·³_¢®škA¶ÓbÃ.†[ÌF"òÏxí£z.êVÅ!iãÜiü÷}¥NjÐÌÈO!ŠÏ(éÝ\_ÿzç–ðÙ¡9Y¹¹i˜kŸûŽÌÎç=l9Kâ$ÜR“wï¬aï~ƒìk{&7¢Ì¢¢é¿ÝñvÀM{6=&AÿtÌ7WÃôgÍœ“">«¥³¾1ðòwí‘l)Ò.é)L›N¿™j¶ž6 wóJê¿­ÈÏŸ|¨x ZÜü< z’UÖ=ð'°¨×®;´¶a.Ð7k5Ýp!$?›fRTÍç¹JžZ5…°¬ŽBf‰@Â%!Qtæ`€<ËTè̶z9Δ×áïZ¡(éÝ’^ç[ Í…Ëèå5ë[Ôä¡ sü¼R| =Î|-ÌLtC‡dˆÆÀlfK¬z¹Fég]ˆ/BJë¦n"—¹“rZ.çÌî›Ç­_R—ßÃõ“ÐUs‚}mmwE nž=ß;[?C ? ÔË÷­mÑœçã¬Ë"ׂæpÊÔδŸd\• +\Jv].ççI,2Š%f¼›Pïé4]ÀsÒð¼=¿~œóUº.Ÿª4'…i®!dO†>h䯛’ÊÐÖ™fKvï) Jô|}S5ˆLøL9ü0cßç)„ *Á&AçÜ¿!ÏäÚˆóú'ÇÞ½¦€©¦Ú…k#É#ÙõLw$Ý!ÛfÍù~l©!¼iBIÇéå2¡6áˆé.æ½%Õ[GQ> S€ ì¸Ø[dw¡sñhKêŶž.ÿËlqŠí˜§'<%ÛÕÊý$óÔ6IéÈ~–kd#¯Ûp å qœ3žõòÓ>mìe)Oÿ¢yÀ´ÅñÍ|u÷™­wÍŠ$Ÿ‚GEçÔö©ýð"5È6F?þøÃO.<³C#gúYr°ä½qK¶åÕÓÄPa6÷éØÒgË ©–ò4q޹4†|*-ÔËi”µ8>§¬=²gÆ•ÚÒ‘ëoÚŸYhÆNθ3×þûðJ¹|~Ë ß@ŸÔRzê.µ*j,ã,T£DB&ÇÙõ¥Dð˜óâ³þ}òÓu†˜Áž[cÝL<·çv´œõT¦´i“‰˜””ìoÈ->fêü]nïºÁÏlÌÕ››™2”*ÎúÛ:s– IM¢I{Ðòâ†tI~‘ÕE{É›S|s Ug)Ï$¬ùIé¿:õž5‡Ì¤šO¼ý/úZøWœ Ÿa“4''UfÙÍd¿•´€æqóX¶1b/¤ôJÎësGâ~ßP;‹»qÁv Ûò:‹³Í¢+?1¢IJ޹kŸ j9d–Ý¿ëKHHAº O917ÏŠ„iQH5üª½Y1ä£LÝé•Ú ­šÏ_Éßíu÷çà Ÿ<þ]P•üû3;RwÔÃÔ_U ²ùkŸµ ¯;…±è)KC.B¨ä}ël(mäÙAÁ@Ñ#f ÃkM¢»G˜ïL®–»JF¬aÞ7löúÙóÃOv‚ßìYŽÖ­u§¾³€7Ò˜ñ5Dã¬òÜ'b—$‘d½|†ÌÐs ܦþ²™/zP$J¯Ç™“©Œ¹Kd–¶¼5±JÁƒ;R¶Þ!ï„èΖ[Σw™þþ©™ýh;-5jלßr{ñÌÈwPÁ{Ûu”ûOî 90˜d=Ó'H#` A¿ïdç­ÙoÓ.§9±g ™^Æö%<–”ò¦LÌ{3û;Eš>+o)”Yïö‘íä7κb’¡ìÈŸ}^¿sN8‰Xþ•„`ɱ)Ø ôÉA¸±!KÄ-á\Ãù’ì´o« 0Vì±ÊlêANrIy&yæÑîÇ ~·S²ÊQ¯ã³Ú²if‹kÂõÒèéÀ*"„8Ì ¨)Œ–õžú<\P)ÉFajﯜøý„×nmLyߤ#á6Üô[þÄ­r\†íÿʾ÷Z¬»0燰 QùÜW´m~?È ’6홀Ûa7!)¯&¡ó' ~ªò3ÔäÝh ›Õ¸{*B’på–2jœIÒs1KÅnók݉䙄!Ía°Yþ‰Èä;Ÿ„@öÔ‹ÕÂîß…—CþµO½jŸ|OMžúuUj’6Üß5ÁÖóè Ÿàl¶²Êüþº%±È™=ï=§Ú&kb쥙Å.ïõm:Ê“0ãsO¢ºüÄÁª-®>éÉ&ÌYó9l›9ú7µ‚LÖ:GlvBðìäJ g'ÖÝÇØ%OÂOʯÏ™DDD&ÉÃÕTç¤:Ÿº¤fžzÄI]m6ÞJIR÷'8ð™Îz;É4-ið§JN’š0i'95¥Ñžø[…7<žuæêÐfÎÅB¼•b¯È °#`ß9†ø¤ß°Ys'íœÑç®ÒsO“ò‹ Ì“xйðžÙer‘/H?yzæwí(L²“Ëèv„8)CŸt÷Ù$jïXKRkir‡å·è¹Tœ©íä½Vó®§<“Äø`Pް®òÓ|ºòZÓ—´!T}nf3G`—à<ƒ4Þ {MwBU ¤£ôgMŒÞð(ep“+3jfØ“@È*Ÿg!o™ÄXͰ5…º¶òÕ`’O ›Sçã~ öñαë3A9õòS¶>åò¹7æõšÚ¡îvÎZvòæœoû3w°$u—ŽÒÓCÌ.õ09ï¦lºÿrÝUÂzC1gš“Ãî'±Ñ‰ËžŒ·PY7IÊâÏtž]Ú¾ ÞÄ?ÛŽÓ¹{T}̳¦“«—LH™„ã$+öIp³£‹œ0Ë`šOÙ¬Ábe$“àø–Ë i‡{ð½¥Ï9]ÓH­±¾:NzXÏOžä'3ké$ ÐÜ—˜ú1º°ä¤„%cµ—[fg]X?©ßÙ’wmÉÒ}ô x’\à]ùqµéìÌ›/k› Äe’àµnÂ;N+̱ñ½s·äÔré%r~ÀÝY./´™å6yitØM½®PiÁÊÊõ¾KR&’Š­[u©LJå8^xÚ¶e&R¿^à¬öV0‹²›„A“Ò¹S`Ž Ê `èI²+åPMºH‚†&E8ü#ÁÌ¥ ë|±šGZŽ«ŽžRÀà">Iw¬¿¹Ù7…R|Ö¼9I˜òÓ\Ú~ßQäÙ”g‹0©8ôÊ%GŸŸ³1—ïkÏ–·cK.åb]'¡,Yònåÿd´4)ÙßhÀP&În©[ ÙŠuuŒsÏVα´.«]Þº‡ËI“'…âVßw ÷D•骔gßÅ'AÕ¥'Ö¹êžÅgƒ›_ä|;W ‰^öÔçކ¶ÉfËkz’tL›DJÖ7rVêšYO c÷Üä²’* ÎI»ãñ&HÖTfÿÏî¼s0sÓ¬µRå!…I‰?݉53 çÌwæfÎe ßôÉœ%gŒÂb —ðÌñ]aWÔ8,ž•y}“ñ¨£ë’ç£Â=8‹_0ñYHÞµG\ñ¨fÐú[Ko-KÜ¿µGüyRÇ÷Të·õû­À_qÈA¶w’ªL]|±ÆâÌ:³Î×puŠlR†•¬G¶¹©·öÉL*ÙÛ)[l—\Ža±›b½ÈeòÀ êŽJ:ߟD{©AÞKΕóúŽ;Oˆo½¾¬ýŸÌ¹ø×Mí¦ëØ Âl~g…g®yª³qÆs¹|·{ûíoŸÀ•wäê¿l/fha']•!:0ت/q÷3I£÷a½7ºº‘윉j©u˜) &\8 ™ö3{³Â–Øü3>±ÕùL%ZšûOfµî™É— ñ×ÈÓ.p¶å²¬0Ê^ üÄÿõº©šãàÙÆ ·cšfÿqÙºûìJÜ÷”ÛN›ÜÀÚW/#%OSSi E’´eÐε'Ñ—Yî3÷ôžÙ´+‰G35|#BšB›ñg:/‡—LUûW^ɡͽØIPÏ=gýo¢g–’YZ"׃ÎEË'I–?eo´ù®0ìÒŒÙÃ5I¬0çG8ëD`\Š8ÝSŸôž”MO-˜Y(³ë4µ#ÕL\aFÛnaŠ µeÁþ·³åz¿Øz›ò »1ø ¿úëþy4N….T&‡X‰A‘Aª›€ÝrmøÂß­ý$’T÷bŸè¾[¬‡cÎ}ÊÄ»êhB ‰O|¦8K°êeÿ`þu kU"ðîÓ˜³³  0PçÌÖiäŸ÷dº‡íaá6\‚]o©|缯{Èlæµ&„ÚÛ‚û¬?kô@ð8˜ÅûÁNÃúL¹OÂ2ÂWµ¾¾®ü쎤gÖŸ0œ~û@›äÃú•Ëî¤Àª:<àSÀ,5Cþ:ï.;w2\·Rû=k|΂ϊ4I‹cšÊ™‡ÿu~:õó¤N·Ýßdú¿«°>¿ŸG,AùD\Iá+0Lù¾uÚ"·ÞöGî̽¿µ?õgPÁ+È* ÓCx_ÙÍ =ãîéJ´œÔ”òý©Þ˜èR¬Ÿ˜€Ä”‡oÏœm,»É4¢W¢¨}–&OB&&ó¤FOS¯Y»N¹pˬ:Çœ³Ë½zaÐLùfƒÚ”}Oƒy?I@Óêþ‰ïÿº½;5={Än4…RÅ&) u$¢3üð½×4œ™sfÛ)‚àT¤°c.ãi c¹!Ïõwµ“®ãHŽzÿ6”1OÎ{îøâgÖÓs½œVjb˜áì&ÏŽ`ˆµ‹o’ â\{Òç±fŽóÄÞÒ®®$E0/HÈk^»³äÊjÀÞ˱&8R’JùÍôÐ݉:‹ÞÆ+Hã-Ëz’bÄ_©c˜u{œ·³Ö>Ùç³kòÜfípbvHíä;ûæÂY€Õm¼Kyo0”%|gÎJðÖÿásävv~ÂК Ï­½n²7ôß{IÓÔšyãðj†5ˆÜ*í°ÇB±~Æþ% È9ï~£È>³ù“B|²îJáÁ}ç€çC×yr¦røá5*®”zûY§ŸÇìFj†.P“_ï,Bšþ¤¼dXï„ÂÍ5ò•r½Âw ë6V#ÌÎB+åG4bú±±ŠågUŸŽ…6Ë&êÈ{+«Y”3QSRchÊ»'U"ú$Ž™•mz8k‡7gšÌÈ:7ÜS_ŸÀ=…7Iß2ý®Ã­¤AäN€Ô ò9ý}lj¯\ÇI§ßŒ¥Ô¥î3+3‡ŒQ¸x˜v?¾3  ‚»Ÿ®®\jÃs: Ä!_p‡àž¬t‚Q3nm0ä<+¡²srÞÈ}gñxr¹Á—\s+óл€pÓ"UÏ9}3¼“WΞYyæìë× â úYá![ºÄ© äl±Ùá¼"ü!©óè‰Gn ¡³ý)³è Ý’QWrZàÝEjM¬®S9·J{;+ú³©ÝU5×Ü,îO÷VY¾k‘œ ¤f¿Òă'@ghm+VϬ5dbRbl'Õy‡vYAås3n²ˆJó3(Laj W|ßÖ–Ézló¶ g1ûiܨþ'Qιëd ¯8ƒj+ý›+Ÿü†ùšëW‡Y•?Ñ®L4rÐbÐï$¯fj–5½‡µ©Õë¾;Ĭmo¾¾qQêQ4Èf¥")Ó;ƒî½™”D'ç6Ö¹ ·óâ rò64OÝ©&ãq0ѽ#8š~ɲ-Q†’spòZNMÒ7!Ö¦Þã¢ðܲ‹[ͬý³õ!7ˆ¬O¨­‘d­Üjœüð¸%'/ç©Ê¿Gc§ºQê•fó(¹•„q Üð¿Ü³[!YßÅ{½kÈxJíò÷½òORéI}O&f‘x¾¤Ä°{÷Ú²~*%õàºíÃî4تPa·o[Äî'fí!J-uç«ÀkjÆ?CëúwÖ9“NjƒK lý]D¯gëºáü4A !83Ó~ϻŠ,퇟ðo-•µÖ&plº…ÅÝe‘øÜÏY±$å³]sH -ŸŒ±R…'gÏ?1ÚS®wÞƒé(7„(pªÐôеS3ûù—" LÄ$ÁPâ(÷Áaª¹qeqʼnO"?ž…3ß4üâÃßÚõšÎšÌ,3ʳ¾ñÐMÏ‚s;uO%rÿž=(ˆp¬ÔGÚO­»¿ûz"'—Y’v2}¨×~1¸·½W.'2O‚憘ÎL'BŽ=޿ނôß4ž9 ¾ ¿îæ„´·T™qÐbt1œn ÎæcÞR¾™ÜcÞ 3õÊý©n¤©ÜàE}î—ße——íþ0¿_5m%/Þz±²A2I½ß'‚Þ}ÍfÛ×8PÇÏ… \²§ÊDÒMOüÝTvŽ?“|NéI¯Ú?ÆIçûévXž»nk¦˜&ï‡:O1èõ°=Úük:p°ÿ=[uYg`0rÛ†®Ì°NâåÍ | Ê8œ˜å>»,þÔ¹ªr™®XGÈš9&¥°–ågŠa³—pÛoñºxÿ¦À9ÇŸrœ7Lî|Ϧé“wé"¹½Î–O³¦þ~Î|^ "' ÆÜxÐZáÊŠLf° Ý0R5ÓŸö*ʪ¼u2»gjÁWü¸ö¾»F7‡I‰6?Ÿ„M?‡¸©£æÓӴއs‘‰+ù¼Êî´®¿ýnmžå÷ ²“Á¡äÜcé a6ÃÊT–^î3eñ‰(éè'¹ÏÄnŸsÛé·Ru"·Æ&µ3¯Ÿ(:¹ 85dŸ¡B²ãÕwHd:}§½l›e Îäøå~ó”o,_r.ÏÉ•ß|‡ë"ظñ×®À.á@LÝÐ|0X&Ü¡Æ<3X=p€K³JÔYw[RÇ=§?²]0Õ‡ä‡d;Eº—LÓ9x_Õ·¨ÖÂüz]Ž''Zhíùû÷6Ôæ÷çVM!ܧ•·çø˜"’$MI3³Â’ 's‹-©kÉyößM^ËÞC&ÿœÐÙçÈîç#yæ¬ßˆrZü4Õ’/o \-ÙMo½”@Lb!sûÜÐ9AmÏ7üø¹M9Ñ'|l7ú6xÜfª á,·ç=ì³à³FB'{×XÒÑM±î§÷}{«“>¬T³ŠÈÔÕÕØÕÆ™Ä󆉅Nø~KºpÉÇ=©ÆÍ”­DKl~?Ûv¹î'Ò… ÏI²œ´C“ŸgŽx"º|R—çÊÕK¨'ŠQÎ ŸÆ[sƒi¢¸¤VZW殀ûìûL†I@ß}³Wqúë Lwõ2Ù9úóµÏÈݶI¶5‰Ã~5òúÂP=ÆÍ%þœQ¯uL“ –cG~Bn÷~aJkåôÖõP’×H¾¸Ë.¬øvt¬ÏònÝôn$œ­I– ÌÐXqœ€ƒÙm¹Mý—EêÙ ÖMŠœ¸­ÖïÆ)sú™+­cæÍE‹“#a–s-]ç}ÅëWvÝñòZð1¨À<~òûkÔû·N0u{ìJ!QIr#v(U U{Òñèj8§{1sêI×bVk™› Jæfe߇&2¹5Ùá.â9Â\È]1°óƒ¬ýt8Tˬ=€›I&–OM î™$Óg4íZ:S/’G¬atµ „Í!Êœ‰ïêÈ­œ³û¯sÕÌ‘3qÃÔ x»Mwº³†ñ¹f¿-“åÜEckHÎ 4YÛÓÎß÷B«IÑËr¥Ÿä\Ýú<ÕÇ ýSêÁI W©–²ãüÄæ¤nçuã¯÷ìœtgŠzÂ5oI?'ñ¹“ÞÊ^'GXå /þ.Ó¦†ò&,%ežŽsßkÛÏý¤ûg9Q›Óß© U’nlõȲ‹í«4¯£Rûvì¤0OÒNê˜ÞËXç…ÙYòë·¨ñ²[iœ>„ÅÌô3¶º¿Kl„õ ŠèóJae{k‡v0‹Ï¬$C»·ú× ÖÍ[MJ2yLÊ3<’º Ö6›ÇÆVK’µjlIõ¡BŽ'AJvòÁ Ë)sö”U­ýP¬“aƒ)=‰ÄlYR׿¢Î«Fðjn½œKK¹Àɼ™šJ ÂöPätiuàûÄM·|1\tÎ>eôIKâ¶R3¾L› -†³{¦ÿ‚Ý]=èGþžBó‰ö“r®=ïÖÔOÍ»®xÌ• ß{s€Ô9ÇÏ»…ÏNÝ-®0S¸™™~³Ì»àp~úúŒ8“_¦rM¤8;ʘ bŒéªd–çS “³S }gçŠÔ„=ß™†˜¨Ï)Æjtá”%» íɳkýõ¾=ĵš¸xÖ7pŸI;‰îbð—À÷Ûn"ÿ$ŠAê.„=‘|½Ç\y¿÷ØšÎ=; Ø™!Z¾ú¾RðδÒÉÁ—çâPÓä"~þêl¹NðÍÔ☎ŸRq!E¥\æ‚ævíuö…ߪ½9ÊKhCŸ®y⼕™¥¦…óÙI•Ü~œ®0ãÌÛd­Àí"¯3©ä^Ûvžÿ5¤Žœy}.HÆxŽ\x<>|˜®}Ðû‘~ƒ>JþW½x'ðꓨc™ÎÇõýr£°É]I”“·¤Íœ#ŸÉ6I€2±ídÙ-óŸÜojôsH€›Oï “yã?=¦K¥¬¿ß“Ä-ÙØ)ß?“[¾H$YÌ ^'òỳ¼)l0 üÆ+÷F¡?‘aÒþMV±m ¨må~¾ìyi¯t^³›Á©ëE9Nž¿EQÎzOÐOÕ vðŽ2‹ýDþyÂÔUŸIpy®ÒåEÚN™7æJ]«_²×9¡d¢„¥j’ 9öf¶”­¡Œ}I“†É{«ho–Á .ƒ²ÒÉ06Wžj3müœÙ.6${°k“#;,¦Ü0ƒÃG«PSœŽ¿eEsÒHê“Ä,‘Øñ¶§†GWç¼v»i×Y«ñd‘Š=52¼TðŽe} @?ƒOµVOJT(f"Ù•aÐæ¼8H·©erΤ"â…<µ?¦%?5§ÑHšá±é:l’æÓmç V®lqå€Á*IõëVsÏþ£Ss³iÊÊwYê‰â²gg—üâì®l¤æ̬öÓƒu3° a;%¨S,ç˜oOS@Ë “õŸŽ{ýžj&á*C§‡ )ëÿIŒuªÛd ¬™äâ¯Sü€õLζÚt*ÁÕ'Î?ÉçøFjÖ‚Y“'U“Î ƒÕŒ„+lý9KU¥¬vú–3ÐÙ; ísê³Ô£Ÿaëœï@ðô>)Æõ¥=§|‡H©¯èãéý’çc›E0]Ï!öHdžtÖ©{Á÷€‘sªBÌ¢«õþå¡dô0{•% ~Â&S&’Óm×Õ~’CRðÀo.óW˜f)„r¸yÓ^˜‹œÔÖÉ$æ\/†œ¤X[0E€žÀÚËüNóx/¢ 0¨í@Ê¡€¡Ï…2fJ’!¾MÈrUo[êMñž$uªªï{r§uó¦q?¬ Øm€ãÌ\ á…u“ìEJçPÁ¾¿ d$’Fú îwÆ^g¦Ù !í‡[:M&_öFMü~3˜¸çè¹C&k’œ= IÜ0I &nú}nêÊðžП› ¹"Ô;¹Ì^Á}î™ïÛL(:)@ô a· ÛÇébÐFÁÎç PYù¬}¦q›ŸµD±³3†•Ðîî3Þ‚NI0„HT®D[²aVªxöKOНoJŽx{c o,àf\²ÿ™œšÕc ©»<ý¤v˜* ÿ^³.™îΧ#õa& > qÞHXæ úI.Jˆ1u$›ÆÖIažËýYjPN†³ÉGÙ! kAI+i–g}ÍPÛÛAÏÞš²©H4 -‘ñl[ küÛ|„¹gÃ2gŽY®%ÄL|JBk„›ÅîVcö¬$Æsy¤ö÷O°îü 3ú¶p¯É”¹vªÆ²HÊ,)CNî 껣ë¨jϲ”Ÿ¹hP°v;¯Œ¯Ü^Z+kŸž»u<¿ïª ØŽc˜è"ë„§ýÌ¢%Ï„$%Ùù*ôÚ&@)ßfšÐÿ¯DDÙmãÎÀÀ™x·žó= csÀÜ-÷ÀÐ75Ä[kÈ­Š Ö¤¬mR)1ÈN¹í¤bž˜Ö¦*uWpêI0Mh&o mªG9DIÒÃ7nÇs{zj²çÂUŒ¬{ÓT‘³·å§“6T¢3¹q|ö“¶¤Ï‚õR®h=¤§r^JâÂéN`¨@ ¢ôDØ:ÙÆ¥g„Ÿ0¹Æn‚6®#LZ%½s+i­¤öÖ¤ŽŸ•sNМj÷ ÷™{NºòÞƒñ[â²'^þÜLœöþ<…FsÊxT’ è “>éÿt©Ï&eÉØËáÁ| £tþÊ+'Ènåó­æ!¦‚,gÝÊÀR3ôŒÝ ÷÷åm~\Ú`Êó‘æ/ò¿,:ãnee÷'”x›œÝ_¾¶]žx-Þ\Úm]DèéÖÞÚyêõ ãQw_0¨ð²a…2þù­ªºìwȪá|U{fPj-N…Ü'sÿœôYù±9—CÙ7bzUÊ%"¸ÃJ)fôòº»Ø-§¼²†>©LŸ"S•ÀR}¶ëJÇiޝÅ4S«®E< S\KA…ÃÒÜÊœÚo\uyææ²Ê”ü7HŽê|'gÙN´´å]ûì$ÙiÚÏ\i’(5hNâ¡~îXweFÍ+ ÛÊËÖîv]˜[ägSE׊“ÓEÕã ¾ ©{ð /Fruëz‡Î«ÀcžÕúÝj?ûøúrM±¼fGN^Ôb&&¶˜ý¥¯Õx:Ö~H8åd•w7ø’ú7ö£í)(s.9eè³îƒœtlŸµ}v¬xâÔDësétŠÖÞˆ*Sð3×7æ÷©¦‘”nÚpgºÑLIâØ6¼©PµëÔžÊý©a"—3ÎK;ÇLÎè›áÍì>§W3ì âÝK@~6>K·6bû—'VOšÜÆnµ*Èó&)ÈšEtdtž‰E^‚B›µ›¬ZÍÌ7 å Tj„ÝðZ7—%*'£ÏШö@~díùß~~Q_¿ŽÖP>u°°3áÙÛ{‚(éO7†’ÑëŒ×‹-ÑfÊ>ò*¤úL ¼áv'‰@knô;gŸ~%ý7©Kýmx±ÑœÏ;³þn£wo‰+i΂›°7~n²Ôs{kn]äVS¶ØjE ºLÿªüd œ¤´Ó7vßHUf»¥³ÞuG:J~·g¥‹­«Ì”ÛÛ›t>w=q¥àlà„ÅW#Ž-5R§Ð}~fM4b¸K–¿ÍYÂÆO|Q|‚©%Ë$+Àdþ•î¥ùà\ÊjƬ"H œeÄ×6³¼fjÓ4Õdnçõ¯8[œÚOaÛd$Ë·XÛgFz‰b”Õë'48“|¬Oú9 O&Ò¼*û3¼ž:Síh’Nælë–¨‰ÿ·‘·ï%§$¥‹b„Yû ž±ÔÞKÞKYíéÔ>÷¥%ˆwn†E=ÊJ’XB^žãžóXáŠüü]æt¹Äò¿fx3œ`VÒõ ›gÙzioê:³ª³¿C…zŸ´x«Z9T`Æ…qfd ÜÉTãõ}::ÞŸ³lí|•9÷vè¢êußî\½÷ç±g!¼óØ$ªi?n}NVV+‰âÂ17½Ç’y7Tÿº)C‰Y›2ý¶c¨™Ú|­O ~WìÈ»Sþ&XÏqv†;)ÍÏ9oë´$/Ò$~šB,…wMÏØ3¯}ÍáFbÒ ,9ò ˜ÞÏMä]Åc Y=z»Q ó£kf¨ôï"ÂJJÞCA·ºk%uÅø¹sÛ®a7Wj‚Z*ú»•Ù†”FHŠa椻ŸEÑ黟YnÓqÙûP!ñÈS%j¶îr8ì½ðÙdeÀ½éçsI¹êY¡%¥ø<¹Ãj˜ùßž|§¼;Éx™zÑ‹&½ þîî~ÐËËvÚüŸ…“ ‡Nÿº¡wŸÚSÏÄ7bçæ{^TÓ„²9Å‚t¦‘øÁÛ/íÒ×ç’Ÿ¬ÄÜ–ê-ÛO¹Ä:/ë|¡Å1yÖþwÄ%QkÂpé2gš“)m÷Ö]Ô½vMf–‹K¦U‰êþáÈÐ+×*sù®œÔ-îìì.bUï×cOˆÏ6,¶íÒr‹ïy÷²¢Å…ŸW„.òh™WNà†W™¹XÖìæ;Óu ýyMYÞŽVÑk±ž&:PjÝ#Õ'‘š¨ÇÏàÖ‚›Š[IÉ@ÄO´I;Éy&Æ$¿XZ&¥ÆV·e»æca_7zÚ…#ñªç6ñܽÜ!Ö]Mý©!²W>I9T>Ý|í æ=WxáäÊBÁ‚B&’˜ùö,G¯&Ÿ``­˜~ ø4ñ.e"ÆŠs„¶\O…éÕÞX¹Ž³ŽŸ«ŸV·n§º“û»™§«† ‹}LΞ=Žçœí€ãÉ7ÌMfXâé•\’Z¤T×§&Ñ…âìñ¼?jOìüS’’Äoç§÷úÀé§ô©qö¤çùÈ“RP‚Ú¾î)˜™•yf*W ½’_rº[\›Úè=ûm±¦~í‰Ý‹È€»Ë럗ÜrK]ÌÝ>wÊ%-»ùr d›¦#-B|Žƒe:½Lvz# İåËCVá¿ûœ¡…é@‰œ@8ÂÅž À%k)¬0‡Í‚£Á#±')EðH,ŸÇ +#ññ&4wh/ä­ö\ uÏ›ØS[²väÐŽWÓR›fÞÏÑb‘ý)#ë€ð†¨“Ú “ÌbbœæÎ-°ÝÞÖ}nýá™À“(@ÉöË@ÙùïΑôYeüÖ³vn–½¯¨¸ÒhzUB>S’’3€Ó¦bÒî* æ²Ïg…ñÌ—ó åûn‰}ÿnõŒîsÞØðü]fýIA4I ¾UóF½§Hñ¿àe¢éìäí¿\Y(mÌÄDmÀt ç,|ÖÖ‘Ó½¾>ç:åJfripšƒwlêp_…wMâµu¦a+צºjÜïaëü8£l|uCÕpž{¦è0Ì`¥Ú‚+î`LYdÜäk€ž”Š›ái2Ãrx@m"†¦ô_âþíÿ“$éçÜ¿9÷IT´«õ>Yã 3–¤Ðâ•­ž{“çNühEÒæ™›e^”oúû‚ «iËrí]üçyñ¶àcÏl ³Œ†ø©‘ßbîá²ËîôffÖ¤LêÌ™fžž žÇœí§Œþ ÷©\äFê§¼ÎúV-x Šg€÷‹¡?³5Ï~Úl9ãBâé€ ¼?!/–à’˯£É–Ý´ùŽ)¾\›ÝU;¿M‘>‹E&P›*û’‚Ât„7„‰ÁoÍr>¡îL. ]kï )nÔW /ê~cÅ•%ΖÖHIÎÜöĨ{w¸ù¯®b±?3ƒ½Ìó·˜S÷'<_¾l~ÇOª¶@X©i1ƒÎoÕrÎOê[•egû)Më}íÙ}AO²º›j?œg¼jpäÿýßÿíßþýßYv'á‡Wgÿd UóNæÚa)çÔmÂ;œ÷0çIòÝM×!嵎­öÀN<Ó_ ëMRúTE¤^ß Â_LnB\‘“½TÇh_göX5Hu͹íû<5²LDŸõvúýâD¤>Ý“_4B²;ˆÜÇ">IfÌ*K˜o}BÌúuµÔn¨‹üé'»ÿ~q©pc)=Ì|X'$9†rJb«É0¤m°pìýXø¿)IƒÕcxÓì­]+ÇS+3儿d¸> ^/ÿÊXJsRBŽt#‚^ k¶Þrqz‚OîìÞ¤¾2ˆ„b4Þª¥½Æ-Ý{»çÊI3´³:Š`R†˜K83gVdOú$‰®ã.‚\gè}7¿«¾2küwýïór°äûߪY‰ÁÏßòÞL¾r5ɪ>±‚¤5Ãð}½þã?þð‡ÿøú¼ ãê£c4ál½~?' }*Tg«=fÍŸû|ÝóܳÎ<¶:þâïð*0MPÎmjoµMígÁmx¦üuŽ_£ë¿õ¾Æ¹~«öããá«>¯½ñ=¯ ŸÔ¯Ô·8z.î›<æÊC}Âñ÷<ÆuQë§yþäÝÎç—S\eØh¬ËÝžÚkLš¸Bn]&vçL’yµ 9¤\²¯ëlt3ô™=µSÍ]g¯goßçž“ÌΘèmªR?@êÆ4ñÆÀÚ] +¦³K²ì>Ó™ZóIé³d§u–LLÚá{Ÿ’žÛ³l}Êߟ½¯¹r²®QÒPújäµ.iRlu0·‰8òpӃųÜíNÈÈ ‘·ü2“Ç V“5ÉJzÐV&"§º«2½O@«ÓÀ lfÙ4±ù瀽”y+뻼Ftãã̀Р9¦¼RT‰¦øQ.QO³f¹|š»ç2WGjíâ]äìã^¯Xa$§TŒž ’C-•”ܰçÀèÛ‹!¦:O÷ôòy£&>gúÍJ÷˜Èävç䪛¸ûüœþ»‰¯oU{¿wCªÁhAONx]Û^×û‘5/d4¦sN#¨õ¯¦`ƒÀšš{ãqònÉãáqËô¾¶'ÜgP{ö{‡Oþ/·qÆíSV/^‚`Ï“üËdPÍQ ¸VZrÀº:¬ˆ’coZ&tÜ)ÇZ¥…wòLŸÉ6Lá‘pfc¿WmÂ}WØf'fëõqU¥()ÍNZX"± fyÇ$‚éŒor´³à‰ÞœÜ‚S(’œtÓq2½›PŸïÔêšDE}T9;þ>’$»™:ø‹{;ûÂs.¿óÓí êUZT&U:³Ú³»&QFé¯ p};îÒ‡ xåîæžs™ŠÈÌ‚ì7ÓÉÜêò[+'Á ‡ –NÐVÛ%Ä$øNBcæÇNñx'ža€ÿÌGšÓÏì/Üžvêåíb®¼r,0ÊoY¶•*uçÔ•%)Èì[sI¨qëŠt+‹ÉJéÝs·wÛ­¿T¨`°ÁfJ.-„†nø6ŸÕYÿ¤]Ão™”tÍMÂÙKä}±€ÓžSÓ°ƒ„ÎÃu¡ÏŽ¿›È9Ö-q¿Ý' ôÝwaÕ¬ºsœq'p'h&(dîœàÛyî”áNÙhîà˜–Çc`Í—$åø ÷ù_¾jŸý܃CŽª·äÈ×ùÖ6 8VOBüß/~×#™ê0¤UPÃÕc·¬…Ÿºï˜aÖßì|Ö< gGçºÉ b‡5§¡•Õë™äªý3¥ò•wTßÐV_v.çLë±åÌ@ëð¦stPûô JPÏŠ…3Aιù” uò´³yêÃŒL¢>;â¹%kÞŸÄéa;Ž{oÎzQ6zyЂPÇ+é%ººÊ)’³ø½¢¿Qq’«( QRmÇ×îÕµDœÂIn±õ{Òf,Ô1Yû.–5w^õs©,Åò–íEÒüøVÅ€(UœM¬I‡j/ÀÇmþøó‹[Ö{·Þ×öÀëÏ?¿j{þ—Ÿ¤Ï îy<…ùžÇl°öobá/Œß…—³æÍë=ÓÙtoHI2}È ~³þµ}‚þóç 0xüƒÂ_òÿÅ8‰ýü" ®‰›"•ž¾”¡tRÑvÿ€3²–µc1¹`¢y–9sýÜA< Ö.9‘[ÉzEæ±j2"ÈÛ«L«…ˆy†Ìë³RÄ=ÐÏ’M`\>“ôäœwð–\œ×Ï*1}ΞP;©¾ÌŸ']ùô7Õ:®táë:ÂΜ‹RžË‰"eúÍ¿w !,Á´A¶wm“þKÈ^àžû4¬ŸCÿ—ÛÄòr{òà×'`%”'ì®=0̘Aÿœç±úû=á>¹õ„ûüÜ)Öü+iäý×Ûû¬y õ¹³¹¬"¦êXLTÙ“bõ]6%[È5Lj¸ñ¯Ó=#f¥‚{¨mÌùZfß÷ªÅÙÎh…=¦NXýàhð»¯É¢4ñÑ“Ãk§Êf…»Ü9äL_θ>ÚìÐwìÁie5·üέ¨»ŠüIG™)1³‰ÕœûOC" ¥ëÔfíÐ=KnD>¯éÃkè }É!…(ÜÃ+5”ÌmS³?ó©t6­I¶Þ{‘ úŠ-wˆ;` ,óãM]^ÃM2Ë™‡&u‡4Yt^9)|²ì`¥—)ä´eBj‡"›Ÿ¿Â3ª¿TÎa›#á»ÛÝ@#›úœ4k{$9Yó®#q(9çÑ6ËÁÁ}-ùl&v€Ê%“õ"»Ì:¿nh3õI/¯—Ùö{^¿÷u›l2$J”7Ýî{®óš%_vNúI —ð‚¤8kÒ³&À¾Ž0îOúóŸÿô§‚kúùU0”ïù"l5(¯½ôûóúÅú¯¡?ßbÖ¯×Þ îA%1Ô ÊyŽ Ž§À`š¿âºßÏ™u2ûë)®_' gCêàù:ðxî÷Ø:0K!Ï”Š=õ ÓUýökŸ“5q~£º{¨8»rÆcK7'çxl¦ßЧ…+Žó÷\…¹ŽÄpfhalËcPêÔ]: 'R6Úo® ˜T3·¨æn‡…S¾¦ÓìZs}Z6í!)Ü;oxôòù·®)µõ:’Òg›­”ãO¦]s¦?‰rz”:©ÍIÓ2ùéZʳë1XwBÂá]ˆrvb8\ññ¼æ¨"Å ]?û ˜qqfËLSó Ys'ÀÜÎÂÇ;™-г8hò€e: îmÅBˆLË’¤E`ýu«‹˜ÀòÊÖ–a½Ââ†æÜ3oÄ=p v“¾eUàZlœUbŽŸŸs©³\¦õ’w&ëzXYâEÁÐ:f.Wuä Õ’«q¦¾œ:î\˜gS$Šlá5òSko’Ú´ å.Zùõ÷_†sk¯ìܶëÕÙ}oÏÜ$ÇÐ¥’ç\Þ°•3pÚÿ|„þ®Cÿzún")¥ºŠ W©U·ÆÜ½I_(]#~5†Ïß÷Ë¡WZÝœ˜ëï|9Få4YÔÄNÒ ß™,°?®R|Ö8kÕLnðíêAÍ®®3[P!ÁSƒiK¬ŒÇõšYy¦±8˜‘Zií]`ÐÆ =i³„bj¸œ»amf?Z‹±ºU””$[h&=™If—€…úR7fç"Üw#Ü0ûí:ÕÔO/‹¹n“z?fë.‡d$‰% åÏÁI£Óo™ÎNqö6qÂu+y±³…õM ¾»è<±¹Î0{A5zöìÅ‚øT†±+;ê=3»¦ñ˜Ôa¿wÆ”ÅM/Ž I¤áYpœÙþË©‡åc2û9áòvº ÖÍÍeW§9¬ XYª¼Bý.›c(hXÇÉfböа—ƒ ÙÌr%}èÙ¸|o°~WÜPtæF[Ÿ‹;üÝÔ'ïyc¬®ÃjáMǶ„ç'<ÂTŸahQ«^Òg*Šw/ëZ®YvÚdͳsù\#ìÂÎ"‹CðI$ù“+{}ÂPÄθ¤Ü°FaÕ#·êrfpE¢>ï(îú[9פÓ‘y&¾5×DWÈGOŠþ‰ žøås’Ô`1åøw"Êèk-®-íƒDD—d4wÀUS —ưcö&V9,äö¶l»qáõ=ɱJ×e¦0ñó—oñß8Ãqwg\ÌÈÜýúëCgv6uX³`º·:ÚD6âva.«vñ¬_!©À:? ĸmq7êE“Ò‹ †L"² -GÀS!+'ÌKÕûZ>Y·Ì\}Âf5vpl¯åw9¡[9ʪËë×ããç^;oÌ=s™tkµÕ{œ6˜vUgÖÀ±e½ºøëþÖnÚE£ûâOÊÐܦlg_ÿºûRht呱s3a·®)Ás·û'ëï_þòç?ÿå/þÜ€ß&î~‚¼é»ú„­)sÍÝj|³gŸï=¬gÅ{ž+s/DÒàwÕ‚a€Gžgáú‰¯‘÷lǦÏì}NYˆýI:5ÀâÌÆº1Ÿnדݤe4]s(ÎVZ*_?˜tjÅfñ ñ9­ÔôG7Dòþ- Hî~òøä·˜)á¤iƒÛ‚ úɯ1ä"A E˜û÷áÅf_6fq´mÁ¥‹S-¯K·l½ªûWŠKWrWðD¶ß‡«Åœ Qn 3ÕªÓÃ!Çý L_1…&kjËØÆ+‰x:›Îm\¸1Ïêº8p‹mªx¸þÀvd׬u-=eu'8ÛjðmÈN¨íoôî§ÿâÄÏÄ!Ù Öûï~ô;è÷“`}ß„é ºB¸×¢«ôƒ-ÁôÚÆZ=6­_aM u\ðwMjâwYg`·›s“Nްúj H+ÛÔ3â$g?vX1Uáî#ð\}¸fY0”ÄTÏ-NÆuµúÓH‹˃¢Ñ[ SI_cnp²sî?1¬ßbñ\O8A¶AäL,IöRé[Ùž¬‡õsw‡¡]½/¦@"RïNŸˆÓß”û§GA"¹a¶K"n% Ó|ü–§ŸIAì|`Ðû"̲ ¦ÍŒ¬š_“I;ê}·Ÿó&6Xd oí'ÉYE'É<Ù`Â9{f,8ݰa7©P.Мx¾<ðýn+¶øIóÄ~«.à’ mµw†‚̯Ïq<³S,~YÐY¶ ‘Ï2·‹•VÖgc®ƒOÞ9ô®_Iðš£ê`,å­ ÷mJuc¡e†½—g‡%‰ü“j ½ð³ú”8úfö›xæü=óô鯉juíþ^‰šâL¿áxÊú;ïNÂá~ œÝ¯mü+õyúÜ¿¯ìÕfÙO@ÜÑ“Îý'@ŸÂ$ß›àÊßMï”÷9¦o¥L¼Aµ2Ï,6jr‘MÇö•ñÔ‡a3«É?V{³·4SW6 È­ùçIs—• N7äÒÊͦn“5p¡§,'A „õÎãÎçõ9™ñlu"ňN½O~}™O1ù¼\Qñ ÇB''lÀå’Æ[Ÿµ”ý±?} ù`pK®I«!5ã&†«Yï–NOÅqÎlÞNœÙ=×üÚ™³gú{•ýYè3õ6xLRµ¤ ÎÑ£\lÍ!©Å3µÒî”’¼& žxüi›ú-‚øÔì|¿+üÛãˆø2`pµ¡ËÊO5.4šÂ—#ÆÏyŽŠXPõSåas‚–Ìø'-‡w—;ìÓ<™QÅŽk¢3ÙV°©9vö¨æüÿ̽«bOÓT+pó½k°œØ­tÓ«ÃÄÙØ/TÀÊ0 <\/HÚd¿•ôÎgˆ?sô^ÒM…¹áļ7ÊJ,üÔ?°÷uL‰”eg^Ù>Üó´ØVuç’L„«TÌÓžæ³ÉÁ¸×£Äz«7Yá§ÈI÷Xªùtéø©n`套å,STÁ/óÑâÏìÑv*¬œ½IûŸO€*@,2Ǽ3´Î¸Ÿ|Ašû°wÚ› S€ŒS’UEÁš-.×&gÝ É5–T%Æñ$2Õˆí*7–m]0yiÃVo]Yaš„1NöpðCN‘P»D3³å,óÜ Àž#´$Št%°¥ÅÎì;/@ÝRVšgÁ”ä“ú„R’,˜Rf‘m¬¦î˜ðã&Ý® ÷´ó¢YàIõßÙåd7F8RkjËÝYyšòX ®ñ©é’ާ¦*ñWÌ¿§*i]fì‘ÛÊ€|Áú]æ{XÁ°¤&…V“Ö¬7Ÿ¤0÷Ž‹¤9lK¿å0 ·Ï~VÍO‰<–ªüæ?Ü.̳ëZBØâômxgRfP<±òZ°ï‚Í7{ÆùPñÆåõ­ã¯PÍS$›·è„Ài‹W¿ÎÂt/.]lDf¥‚ [?æ’}Êë'"MŸ•OZ:7zÿI:s7Øúœ§Ÿµ·“ÖPÊåç` ‡ø>¶z6Í¢v.vÖ‰O /iíî§Üü^¿æ\þ,ôi²! ÖÿIÇà¼{ëOE‡"©’h<†þ)ø¹¡÷ô§3*gêmHÝ#Éɘ >åòÙ L®?å.lH‚ ×>zËXqÎTWƒíƒËùÙ+×N}\‰*vÕ~˜èáöœ Ø`î¾WaSz¸ [M…«;y¦ LT~dUOºò —“RÝI™fa"?gG£¾Îk½«Ò'c¯îÿ¢S¼{ÖÒñöÉš*ñøo<†©gu&&Y†d<¶[]gVsJÚüî ˜ï±9\ù’ì´Î:óñ)ûžºÝ­ÀC Fp–4ÃFüIW•™àúîþ¸®˜áA}‹À—Yy“UÛ-IÆm,™2$Q]ǬǤ¢`¯D«ì,ãØÖç»7Þ{4žéT¼á”J•›¨4òʦ‰Œ­0V:bóYý¥ä+ïRj=áÊôØ ØÍ¦ ²§y‚Èæ³úÎ1PNaÃÜŒk.¾3s‰ÍŸþvwÝMƒïZÈŸ»å}Eè?êܧó Và¹QÄO€•$œÐÿË^‰ëŸ¶qüfË98ñ>™ÿ&|O„œ®2ÐW \[H@ÿ¾CAU‡y7ŒÿûâÆe9¹+XÈêûlí­ûß¼|1Tàw­’—[™ §C<%•‘µbÎÛÍ»ïûÅuͪb4…Lþâ6Ž´x4Ã}† Öé·4ˆ=û(LUF’%²JÊ ïÂègš2‘y$­ãá¹›Ô:Ã}+ux¦”?7v>>eÊgyÍD¹1õ%áÆÔ¿1Šáç>™»’ˆÎl³5+ý'ÂÒËÙý}8˜÷]ðÚ¾k6Ô°’ú~£ŸÅ+¦ïQ`oYÌ=P1fo,^G>ç3ø²5ŠEÒ”­O:âÜžÙwNÇÎôϺ+‰DÁ0ƒÓ(=ké\kН,cwæ*ÐE8¹â±QÌuŽG›Û0ØØ¹˜+LuhQߪ¥ˆínóÎùì¹±õ—åÚ©³d7†–ÜdÖy<¶K5„ì0°^öU r[퓈a262Ds¶Û ó»¹ü_0„ø ¯”Ï ¾÷G˜ª¤}×g€Ût"¡«~Ð ¸'2R‚ã®ZÌúûŽˆYÌtWM^ΉýOpoOý·RQõ-ÛÌõ§£H­bÔ°çÌIû«ðC˜Î竘WpÚxÜבXŒ¸þÖšk‹CÏ6©RÁÔÃÒq¹•åLµœCìvp^¿#Z,*²Ka³£­÷L2?Á┺½!êÌ®s†>rKqø»özªQb˜1ûÚrôÒy¥:L Qˆ@fŒš?ü-î-5Ž›æÎF¢÷ƒÓŸxKk¾ |dݱˆF8îŸw|ÃIÇ"›] ½ ]ʉI‹ûÈì2³Â–Ô$L' sŸìg–>Ù®dö¿9ýÖl!ÈsᕊCd;7Oœ]óœ)ºJÁMÞ¦¬Ÿ°—S³å8íÀëÈVc.ZuÓUÖ£Ø?à+eeú}1ëå2çæ×äÑk¿[÷pÏ<ϧcâý[ƒŸ >Bü.ŸD¶² ·ÞSÐЖF³ÈcÒ½™ÿ~¸ÿ2¸ÏïÞï'‘vþZu†DšIG@çiafÀÍ.‹¹&sÓ²œü’çë~SùIÄ'ÓÀæóM=VúO¹6õ’Ó?küó™b^™sµu{l­hÂŒë„\}ÒJ팾Š-=L°Îj§g?&­Xéeí·¶dþÞ†vöí™’û,i¢´3KÆ[)³›DG:“¬3H˜)7Õ7ìÎêøÎF§@Å!ÐîLÜ×@’˜æ„¸Eu¶Ùºqùe`öE>IJ‰C?·áÞ7=“Áv–+=¡¿3ý¾»^|™ŸüI*4w|¦c¥ !íÿ^>55ßT‡\W1áÇ÷¹e=Ir«L?Uªê÷ðºÑ^0uå`À™Tûé¦ ¤i™ô3qʃbœE©÷xȬ¿K\—0‘‰gÇygLÄb®þnçí ì{õ4§À:‡©`Bõ,àø)Ç¿ C;š³ÅÙ኉=N×&AÉÔfʽً«yÒ·Ib0·ñ箃T=àq&§…YB”ÝN7wNS“ÛG’r¨|·[’'ª÷˜N3‹üï½áë¾ÂÇ’m4{&ÞžyŽJOYÏÔôððÑO8Þ^œ"©'ÀbœÕfj’b3q‚øVãá'Þ&‰x&~^“Y’œn Á©?@Ë-²$IÕ0QÇ1Ëͼ²1Ÿÿ4cľ€½_µò®à~x''’ i-„Ô6çJ&S–Ë´Â’;fÿÚdP•È<®9Ì ?63½‡ÿ­+nˆ_°Æ´„Ôà8K(&Nö ýžÒóËØùß Ì¡ÿ5û¼ÉëÏþ‰Jd0mšPn¨Müø³6…³!W 'nz!îA¢Hͤ¬9 qC0ë ‰‹W~\+¨ííPádçyVz=3Óg=Ynqžáþ9·§ŠA¼]ÀkÏ$%q®ɆŒÇÀ•‚ œx#‘.ÌàÊR/®’)glqFòþo2ÙÎóhÓÁA‹µ˜Rs“‡þg}uD$c©ä~Å¡Z QæÖáÿÄ ùÄõ?÷,™j)ÏäÿàÐhnÎNý¾[¾y“e=SgSÞ|;Ñâ¤ëÌ&Ã|h“¦ìÍÉ;æãThÍNÎ7ØðœÓÉ6‰ÂOÈéOZ='$Ð4Ênµ5b¶µâ³M™Úû·ÖÓ+‘ E3ë/Ç–ãYGëJ ÇêLdpÒ~«Ž§ 6Ieu“¡Õìgì¦X.â\ä’Ÿî.ÖÙ»Ïz™äõõü]/Û;5håï“ ‡ûþ^$'â›—Ÿ<³mÓ}æ>A·xB‹_O¼¹©Qüµ^shtã.<›…uþ»“¢Îì‰Ëí¿ëWpSº±T›ÅCo*i<9¦ë˜ÒSójÁ}“â˜éw5€i,JT;ñÁYÑš?„þN=° 3çR7õr¾¢i×K\pFµLÒq-ÂèôLN Ñi<¶M¹í.jà»Ö_zÑ$ªsÊ1ïÆ£½ÞüÌ›Oùf“I:ŠÈi:6c¹Lké]wø]÷éu­·g°aVÈì@œŽ0{¸Žtz óí¸«K|/9x°á,)“+Ñ{gÝá/—œœSO”Æ Ž¼­÷ŸÅÎ>eO77¬2È&]‚N6¡Ò×Ùb›ƒ83a=7k¾䥀aÇ“~; Á{ál©@°ÄÌåDzeµ É3;5ë„øIíž%`3MkŸ5‰ÓÓÎÎ.ïšdå1çñìtÏ”ŸZ«û–Ùô¿¯¯«©¼ž; ÕÇžÍ&ñ¾2¥‡AN<›qÍN¶Ã¨QĹ³êN‚§•YOTïrß¹·ïYòsÞý>÷Ÿ:æ@è»7t dѵK¦.×Û™©Ÿ˜ôsg‚?]µùe;°›û'õc$Þ¿]³I×Úü´ýr} ¶´‰!=Y÷fž„–ä'ãDW=®8µçYœ€ÐŸéÙæõÎMƬ]×·j†OÜèÄ&7“Û+‹VŸm¾‰î2sëçêÁ“ûDM7J/‰,Àqª ¤Ì} ‡’üe§ºsŽ»8fùÎYIiÖÞéé‚× ˆwÄ­dvÞÆØ‰–“ú7Rµ*í¡Žy3çòTbgÆ.µ%¡sç&ö$F”£4:®}ŠíÎ*³uüÖ°º 3œªhnXæFÞDÔIp¿ãè÷pŸS$á2Û¼¨¢SGζ]³ó9‰Sq¢¦3Ú¤;Òe™!µ} Щ3m}!ŠŠò\ø]æŠ ÷ûœÅ†ud!§Yý¬ˆo¦¾ȹ9x®,uaÀjò®ÿÒ.Üý½{åÎâ@ÏüøL“býlu£cgY›Xyÿÿu’ ÷¹ÿÔ,;SVœ¹·‰Ûy­ùCáΡT±¹q3°ë,z’Íä(ºÌÞÎ÷[¬“ó0gfRzÈøç–»÷ù טX±ž•|Xqu¡þË•š5pÎ~¢pÔ€ž"L‘ÒC•J>8Y9ú CÏ„—!µÍ= 7-"iIÊÐ2Œí{£çÂc†zîØìPÓ2€K”˜Yâ“{&DN°;5;W= z¦ „{3dgb± ½>›“º+5içϹüÙ+ùÌãŸÜ«ðÊáyòÉ¢"ÑxÜÂ;ë°º„ä_d{±ÃDMOmt~5ìf`WÝÄæg`• z:$Hu6lÕçéb“˜ÁÆeâýsªõ¯{€2šä‰ršæÒ ²ê=מÝá@>e*er !ˆóÙ¦ô¤ÆÜÄ›7©&`ÍÙz+dÛ…×yw‡ŽÙêë¤!Ñë÷“ ÁûEjAÒ$a“â':ÇÔÜ9ì{³ª9c2²sC§sÕÌÝ&#§™°ô]Ò èç À½V¢Ð¤³™—5ì×;_©´Í úo< îé=7ömÖ)JÒ¨ÐçÙì[O3÷ì™!Ä7ˆZº£Pð€ps7·:«ñ&aRÎÕH (sMïD~{j"çI¿¸0‹ïÖ^†1)¯lrHR¬7èOà˜@Ê þL9ž`VåáÆöËiYK¤Ìª>©¯ ñËSÕ"W!&AÏT߸ÉÙßì3YhÝ€l÷i¤\ûÜ<xR·À#òLq'fN”øz½ò­¬¹;¯ ¸Ý¤ë¨z'l,]ÛÔ9Àmò¹‚“š,jZ±à#Aj퇚OƒÑ©„Cí¶ÈNp³ÿ/ÎL†1ô|Šžë¬‰T!Ëļ.ã\?a†‰Êý5”$çi˜éçÍÇ}çŸx·ø·¸˜1Óã°›Lܦ'OrÛÕuü­D¼ñçŠÝÙgà©€½Ÿ ÷äî¹üÉ8i”7ŠìŸè'$'9cÝ1Ñ'Ev‡:Ô J†Vé“{€_ÌÐ6â™H3Ø|¥:îûyõçpî^£é†@5[–=kGýüï^ßXÝ ]иîU6ì’ö“œ.öÍZûXéåêLñJή\ ¯m¶e5}gâ­®c½2¯t^5ø+ÌO;P™ÛO ˜J‘´çÙO˜É'=w|&ÉðsàÓ·zíD‡ 3|Oí¹6ð2Ù;ìý,žC‚ĶOD£¿Þ$Ù™@|Wa8ÑiN‘Ï= qëÆy×À½ É(;Õ‹^³±33 Ω§“OE‡uÂ7Y®rw3 /ê,'JÒKM"d2:Ÿ´9Í%ã-»®²ÁÈZ!LÕø;¼ø Ï…¬>R¡öPjÝÜ„wÔ‚àÄJj–lÂ}Nå\6¬¢ã½Ãõ.WÌñºì˜)Ïm­‚ìg©›Ê°THŠ)^IjÓÔŽY—ýô'ÂL§$Ó DúH¬tž(ÜÆŸܳ“AÅ~$çû™Ô43Èï!ìÌAŸ¿åqö·|ä‰~“àûM~}>¶{.~ l¼M:ßúSÀý§§Ãw)µüÉÝgPïëÙ$Ég–NÞ3… ¼’ŠCŸ{®†Ü†"˜°…»³ô0ÀðÚÇʰûëHåqΠÓùÚŒf¥—H%°>JëÄ'À=Óc:©Êw¥þÉû-SÍÁ Ü”­Ÿ[{çŠ µÒUèx½@g;ûÙ8éX¦°-91Ͼ¿s€4gúSßH{ýâôw=¿.ôƒž ¶Ì$ë\r'UþíQ%—±¡|ý·nŠX±É˜`ˆgmݶ»SJÎ|ma%iL#ñ–üÅ]õý¢Gcý—7·=w™õgã÷OoE«óÖñ,Xl%”GK*ޝ‚“¼È@¥Ü*{'X’¦&R‚¬êjÓë¦Á7u$U~Vз?@ªK¤þ„Y ªöV£ÄÀb ˆä,xg¿«¿>‡ þsÊ ëë=e-!Êÿ&oÔÚ†-•üoÒ#º¡ÝXÝTÒ¿ë]pÍSûµáø,:‡4>kæË™_÷6ó¨ú“›ûÖò¦7á«ï ÿ¢kG¼™×·¢?§iT‚Tea:ÆúiLèô›Äȵ€k“ÓLÖ˜øj ï ¹5ûÍægU9AÉ$­8›OÍJù‰{ÚXSÎ>e»gT–9âvfí-V»c;›YSeÀ½š‰Î4³ðSž~'«|¦¥ñœõˆ:áÎBM«23·2ÏÔ¦›ºGbÓÜTNR?Ijþ²F¥Wî^_Z.éǸeMFŒÔÝHäIŠzùÎ^“Kç’_MUü/ohK÷ÝÆd‰1/N‚$1COó)*·$ˆÏsaV¦Æ*ÐBë¡ô¼oYBa‚WŽs0¤â Ê[ Ðhæ;⬅‡Þ½¼7HâÂ̽»)’oqòÐõÈÛ›– |g¦öÊú \=HÀ=Qq’ó.[o“™×œ×§ _‰Ì“^‰Á<û˜Îus }$Î1Ð¥T¢Õ6œ>ðâDÍ!« <¶s'€³Èü$)&\¶ÎÊ? ‚èÏn¸sP1 ³ÎÛûÈ­ ”BÄnûõž4­YQ*™ùöñx¬èYÁûÜN½¬Ç2ßOп«Êœ9×Ýíõ×f%œŽ¹L²¸Íy²æÌÄô³’Lš+WX3û™Hâqô»c0€š œj†b ÈJ¸áyg³§jɶHGÒ‡Iܽ ³K.)RnGNcâ°‰C©¦1çÚ³¦~_aè¤çS'Uɦ¬jÛÃÏl¡5ß?³R¢ÅL¿Ë+œV¬àžØrü“j Á© Ly&By’=8‰pÿ> Ò‡H*HÄ)‰Ù7ò&.[”óx8­$Ë-’y\xå±1xàoQ¦“†bœRÙÇMïFê(súfhÄF.2ÂÙÍ)†Ê¼÷®ƒsúóU¶dKÆv<èœN¾~‚Ú©%—Ÿì®“+ H\U$7jB»ö© d Cÿú„ý‰µŸ(+34/´÷sÛkÚÆ/aiòž ôY9äÜâ0ÀЇP#å Vêê\ñØì±ÊñÏzGgO·¡¼#á áþMë0‡¬B3kæÜ|fæýM3îÜ‚œÂ¤ÔPž*EswÇ,ÇÙYÎMpß})õ ì"2L­÷uÕ=`ª)¸\‹I †žèTÂáêcÓPMõ¤l†»é’›çXî­~—Çi;QC:ú•Ît ÷¦lt"öd-Á|'±È”ãŸä³mV"8¥:@âý§³Hûôšn |Ó¼›`ý Ó¤ͧæäÜo0÷!Ìýtœ Êß7ïÞt/صÉÖËžÜÑ¿èÅ|ÃÌIâÞhœävÌd®A2fšÓò\ïëØ(XÉfФºÃiÈzó†þÐÖù¡Ì™aI 2O—9f8ÄÝ ¸$ˆçdêcfUÿåƒGŽ• m NÖ)#éQ%ÜçÙÙØ¥3çêaú}.ÿ¦qöÖ[}6cï·gH`š2Ó)L—2}åäÜóu“³7¬OàÆÒ„õ Ö˜0$öÌ@P’4—,;kó :6V’>Çà–2‹ºxEì‚\ߢð\ÊOßhרãö»-³7[Îd¡¹8µÛÎî¿»c@o.6w†Ìv`ýIÆ4…¹°òý¾à¹@f¿¥< 5¨[o7tÎÜÛ] ·(=plžÅà©'bØ©e¹ fúNbrð&_k+¥=û{Ê‚§Ìt×h!š4õÔåDLJz5VÚ«:+»ŸDV °&?Óœ’ÕW‚ì&ÒÜÿuB™œ Æõ®¾ï¢“¥é»,nŽ“jQ–ÔLch•ýè'ˆŸÔ¨ÜÚþ%ÙIv:'÷2³àH`Á`€ E~bS’ÆëŸðJÍ1V᥉KfdhÙ>̲‰ÌI°4y8y1S^ï™G$EgγO€7Á§i$&äPŸDíÁ¬Úž7¯B<î¿® Ç„!'Nñlƒæâ4[b¹_ÂÀ=Ùr9§>gÙi¹µSnN½‹ÔRìÿ:ä3…ÉTŸŸz‚ @°)Ðâ?~óåŒiíÇÄ¡úÝô+©qvV×™ÛvS QÇÃ;œÉøÌc›ªC¤ñŽåÏêh¡:Ú{áÈÙà>ãn6¼¥6g2OÊôϪü©¹ùX;³N5'+å§uî0éZrÑ_{N èÉ´Î*X†û ×Yç©ð¸ž÷Ôàk—©2¬±ú»Úìzµíýž³bbó›ÒC¸ïôÐ³Ž¯Ü³óÖsþÛ0š#¬ÚÓÆ2;ÇÜ•–D­éì·’WÒÄŸ;0MâMRž|ö=ç#Lõ$Uyg¡5µeϹvÓÀL˜IÔ¯¹­v¦-% ¢¹åw‡MÁXê‰}1Føè.o^xÂtN@„õld“[”f]+ãîÕI—[0éIÎÛ`ËŠÅÌ|zú»¤Í—oÈî†'æ¡©]À©ÐùÝÚ¿Чikì°ÈËê‰FŒ†™+2¯‘®ÀÌw&‘)k>0'ÄúóLâ´Ë¬sHYç ûR¶ÞWÁZ=kâ ·«Í³ø¹3Ф'™ßÏ|¶K¢ !T šò‰à œtÃHÄ5YŽë)S?\‹½.Û µºZ}¦‘|2Û"í§Ï¾ß0¹orö³_¯3ÄÖlÙoOéérÒgj²èJ‚¤âNãÞôÔÎK¸wmM^®Ã¸VÃ$f:¯ôÝtGu×ñ4½MÓ¬soÀ\·á·^æ£ÛÔÃ-„û¿¿xqÚ夯ÉËù‰ùá|"ûÞ´‚Å,ª ô{gÎÞœx“|ÜRìéÏé@õy|)ëœÚCyéœà¾V!RóÖsÛ-- N£5J|¤ÓÃcc/Ö¨Dde¤Ž—ß{ÓÚ6 °Ú+79GZ)ÿžnÅ$ëټƔ¡ºc§,~ÊÜ—ØCxÊç—m 7*û‰åŸº¼‡¤ëoÀšˆ7¿žtú=©cÁßJ™ãY-g†õ镲ø¼ [Û çÞ¢+]£ü+“íá,ÆêëèËì¸LIͽ9¸`uÝÀwãfô£>;®’&­Q±Ên&Ðî!Á{6®÷)cêÊ¿i?vaO ŸÐßÍ»œo ñí`1aŒÎ óî§»ô‹œv¨03’Ãî^m`‡[ŸAï ê‚‰XgŸv~n8&jº!ÿpÿ †‘sÀÓÕX(·ÀÄJr;îYì³X<ÁtježC¸ pÞ®A¥Ê‰EQ“ˆjºKS(È`õ•ij(ÂX_æå$ßjä°:ã†`NCnÔ¨÷l­o¥Se´D«)ç-x¦žÈX $»šàŒßbx`âa´)C¶%O¹^+µÛ ˜2š ol§EØÍ:!8›{hq fï‡=çRƒ2™úÌÙø,IpÚevgÀŸ ßÍÙ‰ÉÍ)ýºÃ»7˜ð³Ó´Nèïå³®#læ°-ü7çD A’–Ž™÷;{e+ïýb ‰8î²­sÛåÉž ¼Ro€ÇóFÆ4kMÕŒdeű¢Ôf¢÷$¨=o“ˆ4þ-ŽêLÔqÞzöâMmÄ©‡Ä€ØÿRçà–¿ž¡ÿ ô»JEª|–¬u—‚CzׯÙMÇ¡¿³­ÎîSDÁÖŠl‹gÕѬ}~8÷Ú©&‰b»ÞN ‡Ôè»áwMºkÅ$Ü,Â.kVÙ¿QšOy\[dZ@…,Œ{mÓ]¼çY7¦kœ%Åú{ »†×)42]mþ;{’R]×w?žÏ–móõÍõSÂÕ¿˜* Éñ×ýWê”ç清‚øšhX”´¢6vSã/')2ùêwí×Ë›™´©¢6<§“LìÑK^¾œi9ÖàOn²f䧦Þîµ -§lë$¤«ü\ß÷‹G¸‹{:#²ŠÈó´Uï=¶v7L¯Ol“xÒ'»îÄIÔy‚©Ý6±º]ÿ±5˜ÉW¼O\[¨#!½ÍæP”€äûùÅl=©w©Å–@Š Ðôæ•òš3 LJ, BÍ,ím"Õ SÆz΂Ϟ»7¶VÒË0Ô2™}>ÉMÎm»é ¦ýÌÂs^®J%f¼{ZÜ%’ƒº¾ix ÇyÖJO+«| ØG"Åmk•¤Ø†ó¾L Y\Û <œµX7 Óui&VN0T¨5…©"&­X½·'qö¯]‰p˜íN­†b7b—93= SÎ0}vêõ–s›)q‚3Õd—Né S³rÆ=ãcöýý¤w4U æ3M6gó¯Ï–j™ÂÔëMÍ’ A}_dQÛˆ›ÜtfŽ]Ü}òNVÙ£Ürx9»ŸÈ< ö=,¾Z#+ E•bƒxê [·‡™×¤íc˜˜ŒÍ9ñtvÙå“Þcž79ú.¼r4Xqƒ/'A†X Àê=-hI]×Âdž¼îgpž;e廬ÿi³ÅÑcçƒ 6öÖÝ}¯Ÿã.×Ê’ü+Ÿ6Í“8—D6çI„¢ÔƒÑÑ®Î:GÆ×ÈÞºIEÇ`šµ&ÖdÌàO”6Cÿôþ^v¶³î:CÍ.$`¥MܯOØ·C÷h6¬»Á·VOÒ~Rû)kãîs↟8“l.=Cržß{ÌÖª”,À¸~Y@b†qÔ2"; iÍí­÷šë †ÞÙ6õ>»Yµ}ª0ÌßJ{¸¡¸|ªœWǘ|ϰ~Íœ‚mÅ•2÷î)½éO˜{9ªåý÷ô$+Pñ_æÇ“ÎA(Ï÷fY–ƒbˆï>wkoh &ÏâñS’-¿l3­I¡¦<7’ÖÄÁÜ6s„ÝœÈV4@d¡t)·ÞÎÜq A2h!dwÃOjÜø+ulu­«òÏz™ FÁ²ÎåtíÓ4‹Ý2k=œJ™Æ3Ëž:îü½‰UöåMî m ›™»âýÆ,5gœãL¹É9g9‡ „Dþ]wBÃý90Üÿn.¼ƒ°'hß pû¨R˜q£p?ƒþôë÷Yó”WžÁ÷¬Þ“œhÓÕ¹?Î4®ϘÖBˆŸB_o3‹`ºÓ,íßaðÞÈn?ÌúmR(Ké ™(Ëk‡ÒnIt•Þ`‹Ú8´q$EÇõ[ÎÃÌñ;âÜ?÷Lã-·íR}޵‚¡ØtkMw§2 ˜,ÚØÔû¸½óÁ9;niÎÓj-‰3ZçЗ‰×”¶‹ŽÛg"S&¨¬W ':x}«%/÷ZÌ4§õýÔ{àñIYöûJB:ëÊÇÇA Ýš_7*§ÎÍßð–R±éæ4|s3âŸM¤“®oÕÄg^ [W ÊËgñ™ªNµu­Õ~8!î\p¿?!f]B7?¹I×ÍXœ’ èSó˜Ó:õvxõ÷šÌš49A"»9˜ËVq¦$¥só®¸e6©ô¤Žˆ™®ã¼”åSÝ3`½RÅ(é&]·ˆ<š<'ÙÀZ=3G¿öÀ_dÈAJYæ3Äÿ)¼LJIsÍæ ó*³æ} 0f$@ü]jSÖL!Ê Ðåiü7×@NïÞDÈ1ÁÉÁ’¡"½¤ûÖÀ—P>}—÷så¿éz›ÂKÁÞuËÊŸýl³ gª{ìÏþ ¨IÅóò™òsWn ¤O Yþ¦±Bn¯˜¤ðã.,Îöî13§À3-3ô^]Cä2-2!–Š@¶+u ‘d7 @oüYÃ{ÿ|ÁqCÞ{åø=¤!O}îCèi9æeЙg¬Fÿ]wÞ{C®¹jq£JdW„‘S{8¸sc¦uí-ȉMsîß-Ú/žŒÉ3¹»yÝ"n·uœW{æ¯8þØcÖ³Ï{³Ã«;Ê9AÔž9Ñ{z",ÞµVN1M6§>AÈ{ÿÌP™ÇeMBùÇ<ètru#”5ìgJÌ߇íɳò RIÉma^8žn‰Î}AyV9’ARçæØ7ï¦À ÙfY•Ÿxon¼fHcêN-]u­©Â‘Ôx’2ÏÜÂè<¥yÀÎ}ZßÃÀú†ºóÓør[g¢—ÌÍ‘÷^ª‰¸ò]È>‡ß…þ¢fž*$3è7íd–¡œÃ›ûâ“)Õ$ZꜺ¡-çpÞÉ|±£¬>¡k2;ǘȠò}íÁýi³Á\j—O^¼Üž×4)±îA­ I>¶_„8VÀ3ì¦ä3ñ\§’Bêy«ÿ²òO~w$uü¤ežlËvÓÕÀvá1îÙý ôç$YÆD}I×m¯IÑè¾Uwf«Ê—ŸšŠ é™N“òúé×géL·ÀzoD°‰‹OîC2í²îPáÙT+…p–û®)½\’àFì^OÑj¾¥ÎÂSîûNYÿuëÔ@ÓšžP›g'ךhtÏâ&c5Næ÷;[OO€(¿÷ƆÝÔü䯦ß­ªä+9ú†ã¤q:`_„G¦ÎˆÝœÐÝ¥àšIÇÅ_ú6©“!I¿uêF=½Çúµ¥-Ò\’vkoòcvŽßý055Â&ð˜m<uRÑßyzÿ%|aéŸ X=YÊýé“ôÏN±)¯?ƒ{[ÍæSÿùÿëk>ªÔ]`˜>«Ýgs´^ªrfóÏ4§ÜÏA‚ïm«Ôû=ÃföÀð) ß-­ëI %¡‘·T¢ã˶Y® $™Wçû»÷“ìDBÑìoM 6ø’ëϘ'ø¦ÈrRÍ·4³%ž9kÖeÛ³¨ÓyL`™‡mgâ /fR»üôò&Úÿ¦ŽÄ“~L8Ûµ÷ßRésè²Sµ?{ÓÎû1…iVš9÷É!gÓ{|˜š_†´`ë|ÜûþÎÁ¤ïÆÙý i%AO…hIÆ6mþuÓËìËÔ[SYŠ*:öfënÊ3>«í-,E"c\NLœ†êá!Ü'¹¢¦BgÇ òì8HÚ'ÐúnMg„æ¯Î‹0_n÷_CŒýk¹£C.u5u kR³ÈZâ¬sšvާ+òö/‚瘤€Á*:]7ÅiÔÕÕúÊÃ.Øú>κ7{8ôYKÞ‚Ça@}ÎÆ>–øŸ¦·•™¨c¾ÉôÏ ?…7 —†õÎ1Ͼ°sÎ>yÜþš¬ÿL’IÕ€¤Ç?7ò¦†àlÕ“pÕd¶îêª ·­±I?ÊYüÚ¾îdºÕ2£Ï¦UÂ2’TçU{°IVý.Ÿ»äTý]e-^ëÙžŒ„ŽƒŽ CšÚÆR ^» …é†k—‚uË4{VO•j’!“oûÙ’ª=Ã;ÿ×½¬sOÈ&·çóûr¼uãç²É!) ôÞ¬$އt×.¼ Mdž,ÈG$¸ßýbÏÛ×¢¢OF„ŒÌUPO€‹ ³õÎ3[Ü5Ä,žúË#çTÅÉÝÁ³Y,ps¢wÞÅy™x^ëæ»wJùÈfUE^÷K0øIü~Ã}3ûÍIMGË«Feýz ›ŠcÅnçç\{e8‡g×¢ xH0H4žïfýoì¨fÎ=sùÉÄÊT™úÏ͵©a÷—åøEjÄLÇDB“¤éCV%²æLW%8_3}encM³T¤asj‚ng{ïYO`~š5a¦Q¼Æ1ID0íÀà&˜÷SŸZ““uWíP2Çdà¬íkDçAK…ŸµQi‡cH¶½çRËp®&å•sÓgLç1åç i¦¬*™ý4š4Àb¨à ‚Zß“éHvùÑ“(’ÚgçFÕÎèÊüòSÈôª€¤0“ä& Ç­÷ŸL¯Rs0¯)«=/õé´°_ÙuF¶›µÿ(Ÿ»êWºë¸Â›D.J#¾C^Ÿ8@g|6s­|òÏí~ÞdÝÞN›kN4T˜áCÎa­ PÌ’£Žõ[l]õÍG–?·ae€aa…itÅ¢¶ÿ ^»÷ÞûUŸ³ïž%E.¾ä<.Ÿ,UÛp–­¨vXäo “á»iKžî̤Y/§×¬Ü?+yKÛi™†TGB6­i7ùÎ9»ï‚ĆT¦·1‰L÷ €È3¾¯7`7éÌ$=xƒõÄ'+:iæ$‘Ít<)ó{™Ç#`ñÓY?ÙfÝØuÍzƒþ÷3]g†øË bîEqs­Õèk¾ªOh×h¢×Âzfˆù‰¥¨Éeï ëgö×é!†åÉ#õíð•ü¡Óçäú³rËP*‘|HRåjËJ çÖLªtZò’çlï•Âr¤¼fë¨IâÐ Ì$ÏÎ.ê³ùçádz5gýç¼ï4{횎÷Z;f8YøÎa›”b|8kØÏ’ï‰jrÀ(Oë¨h^6kÍλƴ;«å Q>Imž;Ék’áâVݤbÄ`Õ{>@/B”bèÌa:Åžn‚߬cÜ{?.KÌNñÈÝ —5fe`°lÍ_w›¦…ÛhÔBÁ2f_ I+²à)C«ï›Ôä ÝzÓ~E‡‡ Çfð›Xå…çS©&Ä‘áõrî- fôÍìw›¯KùÌîó¹`«œ»/¸„óÞàÑ~7c=oc\5³Éo˜âõ‹f´Ï-ª÷ ÿúßHs¦°d†Ú‰†”˜ýÉÿu623½Éëóþ1C=z÷º0'½‡µ,ëóï‚¶˜t³©û˜?vjƒAžA¿Ãúj'÷€ÿìdaæéß‹©Ÿ'p:Ùê–õt(Å (ÇÇI›w©Ï«œçYE·–¿ëêI9'<Â_ªÏ±3-åko ,[EšÎZøç²È¼i¥Ùü®B$­ú“è§ïŸt´‰4Ky:¤¿QCºa²tÜ–ÞâÍ÷?¹éH‚¤É’,5+›ëŸÒ÷tÊzeóêÓt ÝÐ]Ç1!þš”s^Š)»ønî?ÁJêûR–ËÜA曹„p:«½Õ,yIhh-v† ¦a8zs®…6dì:g9u„è'à,µN8}[Æ”ÛPµÆYç›·#£™ 6rgç€ë ɵwwA>A¼•û÷æ3WÖx5 ôggPëoX¦Óòšúõë4Ó©³`/9Ð ø‹„­Iƒÿ†õ>óÑoÚC³<åþçÆÖ9Sžšno‚oÌ¿fGÛÙá5‰`ÎêøÎÁûSèå#=þÉ$Ëj<õ¾€>5æyב‡Mc©½d·Ì7âóÉe67yu[P˜0éo8ëÏVc†7|¹Æ’êN ¤_WT°Þku¶ø»ñ”$“N¹:°Në +Uƒí×ë,ë½VJ.@†€”®æžgë”¬Ü +I\鱬dg$¢)>TG|þk–?ñØr1J²+ý7Äï9MYû¿_ GÙtÎFL&AkÌÈwÒ5.Âý]­ëêMÞœ‘,5±çêÞý4Y®—rœ¤î8$˜‰‰8ä´ÇÀÞÞzæq™ð"Ôf.ß›–Ã1¤øA¹“JÔ¦# ‡×”­ŠD åîR`Õ‚©«zÿ¬õg^™uêà9CLIMŽ•õÚݩȑ·Ò¼yð&¹qÏL2L•j ²Mõñ¯¦gÓÄt?C¦DÈI͵³Â¤ 3v£úÔL|6j»G"‰Ý»‘w>Óôþ¦™˜½̹æXÐM;ƒÿ¤íJ¨§VŠPa×cïò/™ §?v™Yçw iž$«(‘ÉÒ›s.×'µ‡ä6°· ­(Ÿú ŸL¦NoÚ+¿h*ÌÕù2×U¿kÙµ:çÒê[f\HØ3¸ŽŠJœ” m}.‰y?kYéÿæs.cuç[È/åõ“2‰µÆ™õ$—wo6ƒC‹äHêW¢Ô{Cá9Ï]/BÙÕuÖI07}žê–M̦Q“}’é:¿¬Ža%~» g‚Ó)Ä™ˆ7n íüžO¢GŒw2?IT´”Õf5‰ô2õ :ð>7¼æ¬Ë3á`=ì]I ß>踟z™þáléIÃTå0XOγ¢¢ $ÒË å;ý®·OM®>’¬©ÉßJ:E ¿qfHÖ`)äã‹29‰ 4k(q›W*»06Ý›MS)gÝ‚Vòñcà!`>¸£ú,ÏWÛpX!˜S•Uø¨Ûv„¤‘zOÐI»%jÞ[)ÈÜtÃPæœOJª2榳HíL6'VòïÝhEØMïáݪleèküÍàwãoÝô àø»]¸öÇ'Õ8>ä€vA­¾NK¯ÔæËo¹©—GBe·z;³Nqvƒì"ƒŒ×âZ£g oýÃý9ÿjiQª<ñ8Ù½`¶ú É'Aá”{fîsV77¹%“…zÆÿ¬í3çûçžÔ@<«ïó8;nýÃà u$AIÕfpéÊ•k•ôIÌrÒ,-PÏ{ÊÓ»^ç0ÀuÂý<0 0›Æ”¬c$׎ÙnÏÁ›3þ]u±Ã€} Ü6ÍsIn|NðNHëÄ ï€û‰ŽÜªëýÛ8 }~j_ž€2«3”7íTƒ&}}“sLØÛÏŽíÅ}Ö?Õp|l nœwgÍþÔRœ¨AIáÇÁ“à‰è¾Ó„Öø$w…¯Lÿ§"Âbƒùç­™!þÙl‰OÎXrª³™0süÌ0[O² ¿KχŸ„~N²¡0óâÌñwyèžãÎl·ÿ&©YìÒö(†Ë¤îØRÊÜ›Š˜§g^¿&Ð+Öêº;H㑘šÅŒöÖã÷ž2ôCN÷n¶k/¡éÌ’·yÕ?lC–—¥Ú[-ç¤ ðWLJ–^üÜ´Lb“"É<)KXø)ëlÐo#$Â#Ó™,d³ª÷?¹Ÿí¿©Ù7Õîi9éŒRc¨¡d"ó¤ ¹;[pÓg–”í •H¡qÔ€ÛÏxbê§ð>Aÿô׊~έ± fÐÏëE3/_¯$jí ü3 ¡(j‚Vuv̦׌ÍdY}Ëv„OýtÎ!ä=Ãqv¯ WÖ"HIbZ40'zöšÿ ËR®Ú,üÄ’ DÛÇvu*&òI2lÊ*CKöÑ—¹ 8 M&'àïöplÉ ™åãÓ¯ÌP{¶ »ÑóIU ·ü¦g'‘|§Ýô$$áZ·¿nÌ™gO²$œC3¸|÷‚ÔŠ>](IùugIòáâaf!!>E6ÝuÀ𠦃úœK‘¥ÉDL O"xòö¤q˜ó6c’‰MÔɰ¯‘Ü»,Þ/Ö4X6u(ʼnØqîÄpå„r“‰µÏð€UZ*<¸~r£èÏ‘´š8Yøµt¹mΙNç'\êZ˜,aSgî-!ê®:þ¦šá>k•˜œÐµ«NZ%©%ÔÐ6e» ›º>÷˹öÔ†;·í&Ô;ÁœËO­´¾ÖiÜfˆ8%HšúC¬½ck$Ë$¾5süéy|B€37?³öwRÐùÝýý 0ÜòK·–ÙÏ•?)7°ýìt€Öû:ºbæjCzÎ]³v5û·–ÁŸ_,~lWúŒW–¨ C½ç s›f¢Ç$ÕÿÔ0JÐÉŽG'dgc©—'œXŸÉ9³CpâŒÜdèS7Î ‡~V1JýîRp˵ W7ª>©À@ú5—3nLîÔI{¦—÷íOfz=YIk±|$)%ü/9åñlÞÍYV)Óm@Ìô[ÈrW}9—NXó_2øù+IžcÅÉtrÕw9εçšôk|*€¡’ŒUÜÖì¾nöŸzπʵ‹Ô±ˆU¾") È*Û—)úÉ@.]£$¶rEõ².³˜„PIþÏœ]ƒ²º­&”²ƒ&Ï$ ¹» ¸1´×ß-VPDàNâ>!½/89òg`Yß­{؆JÞ|/£™XþßmóÍ\üSçÆÖÍÒ±ì'á6¬™¤{É](úTãáµHi f “Ž~jÃMŸìd¼3ëŸ@ÿM˯·ï¬îz"PÒÇ#ɇÐßÏø ñç¾ öº¤:ýÖ®K³Ä­ðCq‹ú¤~×ÕWPÝÏæ9Ÿ÷ƒë½¼j$Y¹cï»êÐIã<ì <“ZËÜî™RŸ|:Hï±{®¥PfEB>žÙXj¦ÜÜ7õÎJó73)eì_™{æcv2:u5¤úŒÝŽS/G")¥ ÓubT˃¾>)óLÍ]L9µqðo-´æÛY‡{æCK8EGM’RX&Ä´ºð>A¬fÖßíeÎ[$¸¹Bõ™~sÖiKþЄ§<õÔ½¬Öذ²Àßuþž*Èœþž2ëÄlábŽŸÛ³Šbgû;:Ä1çrn"G©ŽÐý^H’]<.]$q¹BÂ@‘£ÍEŽ÷I]©$¬I‹®Ô¨g’À,í7SeÒ$í‹:ãÈJ£)[$ƒ™Øfý–›ñì­aï÷ ’gÊÙ;pJ·3-'µäÚÚÏ/ö«{࠽Ʃýâ{£vÿ̵gØí` ß¦Sõ9ƒÓ{ø¢ô¤·aòˆüì›Þ´ºÔÁâÏçpÝYجHì"•õ”®§µÖ‹ú]v,Êϲª|ÒÝ÷ÅQåJ±_…µêQö€©:'Ëxí¸ w ¬lÀ]<¹8ÏdéYi~¦XÏùì$ú ?OÌÃÜÙ,ÌM´žýç&ÝÙœk6Œooó&un¾§éª}-RÞ=ÁôY5…—©ÉÛ´®×½µÁ|gòèí)Cæ„b’üÀa²å/©ó“rÖ™ï·#ÏÈÿ%86a~‚ÐÐòdIKÞFc6±2¹…Ûר²¡ŽyhƒãÚOµóý Øô\ß2íj÷ô={ü™r5†þväå‘ósgkf¾ÜÎË€Ë+n2vyš…Tž/CšúÝZP¹Ä:3—Øù©É2i¶ø“ôÞ™æ]©Ý¾­ Èr›,y_sŽ :I q‘×˾žI_k¯´,qF“£R&>ÕRHX×̠ϬúëSæÞû'/?ÉÅžÜSÙ‰s&“¬wñºð¹³þ:AXGéé›k»\þÔ†›Xû©zÒ·¸O&S¬ˆÅºSîÀÏYÿ¹"tsÿøÞ°©Ÿ uuW³ŽAÜÕW—$4“)\w˜²©ùÓ|ªùÐŽÓº=ézqýerŠ)?Îê6Íd ¯áàÌŒ¸èÝ·Róîçð s=V?@:žÙ†ì† ?wGÌ^³Îdß4ÝÍšÔ­á !ùBâûÈg9T'XÝ îã顟AÿM…» ÍÆ·‘»Ë翌oø Ñ„Ë)6ýØþ‰ùT~Bˆíº¨äC2;èí)ËOjŠ¡&3µ÷Ÿ Æ¢—$hœ:„Ó:©;Мª¸î4 ÷0„ y–Ý8΄õ,È2a`Æ1L]©Z’Œº¸Høê8gïæé>òn´S²—g𓾾…5ÓS0@Àj.ûnµÔ7’&s(3Ô úù[n®M9Kž£©>„&Ô‡áìa‘Çôd¥Àu•äh›Ü‚gO\rèÙmV=m­ÒÝRߪ-ÝtKºŽ•[È2§v¾áf޾û©ôçìûÞ&ûʧmføî#I ò;¼ÿóÅù¤öƵd6`³«Æ\ùIr®®ÎYÝËw Ã?©€k×k®Îö·ÙÅ‘ß+2É´éYÖ™héjšVÄ\©!ëÞLðíò$ŸE0©«Ó‘gNöÿÜ'™¤E™H%¬OÊ?4Kø-)ñÏD ¤1ŸúNÉŘõv:S­ž6s¯ücqÌÙÔ¬ ™ÖÈ»>0÷K¤æÝÄòßyïü‰¢ãŒþ^ XYN¡³ì \jñ»ìñ¯½9ãN¸OØJ0Ê÷¬3¸ÖäÂܤÞcze(÷ïö4žšæ¨XÌ e7™iã„ø€éÔ2ûÎq`¸eg\ê÷“:Eû‚ Þœd ÂQ5³ßm¾]å ºÅû„l›fÖ¿û-Bÿõ[Ìu96ø.Mf²%#5×Îv`I¹¥ƒòý§ÙS’ÚL²’ î“wî ú|¦ü¼FÌ–¦9´ª+â—{l æê^­}2ðp dᤡ”Ü‘y^n¢­³3”w³;%Ü€ë^‹$GªƒõÐl›åüº=FºÅ™wßûjN±]CíÔzÛ÷³V²õÞÆ÷‰û¸Ä´Á“ƒØÙU㾦7÷8ø´ª9kÕ«k…´RRõ’ät=•¤qºßÉDM,€¹ë/Õr-Ö¹óæÏûÜR"ô™™5ï9ë3sÁMvßd"ºÙ¬ÊM®ì¤ºáú'åŸ$Ó9 Pùç$œ§´õMë°÷àŽ“»|Å÷\þ©Î4W0v ÎS 3Ëëu¥>šs¥ÑC0ßdý') d›irA# '¥‡À¹‚{JUr@É+e‚ðÓÁ´F™Ó2ó›KÔlÚå©Ð–aVªa`Ãú ‹ {¸={!XŠõÈ»bà†ffG2q¢dˆÂë ôÎî3+Ã)žU nóIÉ{UN:?„3l`}Öjõy§s¼À}Ê–Y ÇùûļO‚•® ^ÊÜÖ’O~º3}&ùxËÔi0óÚØjg¢¯¬g·t»•³ž Wæ-ÄŸô6z2ŒáMÅ!|'ó¾îF*)Õ-$Ç:ŸeÕ î9nw͵ñ³(gÿÝ9ãžüÎܧ@"i¥_te‰ #²ä}­)ÎëÚN÷ùÚÙrã½èauTuä ;©³^3aý—i®qäú'ÒéÞÏv6ïš:kÓF«ôìN, ô°ëÌmÁîÂbâŒÂ£D8¬Ì2|±u¸Cn=ØõD€ž°Ù¬´3çãÝ<Þ?»_Ü5ÁoÑì,­¶ »R'Ǥ›ÆÜTt ‘©çÁÖ Í)9wÚA«ñš~–éœvϸ$‰±4æÂ ots÷Màa¾ŸD*Í3M˜N î¹ ²ÿM²Ì%¹âìAä¬3³W ΖÖ]m`Ýdâ ø‹<;ª#3;‰Ìm©|ÔSxà¦gk(qä9’µ  •ò¼º ýÌ&ª•¯T É|5mdÆèœz&†eÉNkÖî¸ß’4›dY•*IE~'çœt Oàþ|Yµf¶Ó2Á†Lè:ªDŒqûéS‡|ƒ~Ö$ÙDå;-ig‘¬åŒ©¯{âÍ[*ÑÚ8»NÎj%”Ü à&“yë§±ëÉ2µ–èàûÊ£Ï^ã„qýƺûÜ}0¤6]HAEÒòßÉ$“ŒUhØm»Žw…ßÛ€¹v»,wª>§º¿ ¦œú³ŽÄ?Ÿ¦š«kÏ„ìisÊŒ÷Ûî÷N5†©³+‰4¸S׎ë>ÕìvGœC“23ÈÝ»hg€Î¹öÌ%'˜h‰ÕÙ£w¶Är—ˆ‘ÚM7W÷TŸ9 ¹ïŽèö¼ÈN>Î.Pé›esCðDÅ19ª ¥N·]_—] ³?ž/éÛýé5 yÙHßñV} ½on擯ù°¹Ôq*ð»ŒÝYg`¨`û0B|R€Üš6»êri$¨5ܧ¤fjæo¹5¤r‹Ú——β̸ۇ˜šHlž~8—ëZ›óÇÂ}}·@‰éR)²ÿ®+ôœürÐi;¼_ ]X3a†=ó†û©Y3±ðïõ::ºÎÉ)w»mâ úS‹Æºõ³FÍßJZõ7λIf¨LÂÜ¿IAöç3•åV˜àóÈ=`ª=?ïû¼N—ëm’R'åö8ßòåÞ§=[Ÿo ‘{Ý›¹í5r*ë¿>¼æ:€~nÔ~N@ßéüLúBnB¥” ¼ìjl¯›ÞëMÍO“éj ª ý“ë6ÃTW~Üdïz©ÇjnáM IŸ-%€˜´Ø¢B˜ÌÚµ{ƒªN¸³g‡;ψ1–àdubÇV­¹W¸O9òD2™ç·$ęڈS>>m™+gEjÀõY$gœ¥;!…XÄ`Ü’ ,Üùe™g•=œrö©0”ÄÚö±¬W¤h?W6Ç0ÓOJ¡³UkØäJ YÇÌœ½ÛsëwYm0M¨£ˆôB“ÿ#¼ö¼Å X4ä…wʼn‰5ÂhV9ø-ÆÁ¼¥(œÊ Þâœ()ZŸ×³0g–'?ºz9Ìžg@aG·s1?ôlã\þ©žÄ;mÏîœíhu,>Ú”Çô’:’\¦9»I†¯Ùà©s¥=á8è“•!û,Oy£iã#Õ ’4á¬lCδõIضHî2µ•¸<0¡`÷†¤E8’È I¶Ò¾¼«ñÌÛ;ôMµ²ä_›rùœ»:ËóÙ4«>Áú¬ŽÖô’rWÚ›ý’pg f0IAüœRž53µ¶S²ÀÍú³–—ëoõ_×$mÿG3>’ßxuêggß”= |íÒç{À¿èß%Þà‹ë׮ȩéö“KëÉ_ï̼1Uêf+«¬ôr6.Ï]Zás?åûÓY¤#1\¾9DB­;ô©JscD;‹ižaI R«q:N‡d¯ä¤kÖW²S”3YO»áËé¬<ãfëÆ$-vLÈá£K¸ìŒ8ÕcœÑ¯=° Am 3=1%®yÊý3ÇÏ‚N½¯«Æ6eKŒ=Ç¿4™mÏ•Z‚PôÖM\±‚¶ú¬pÂ¥”ª3¦®ð\d†}Êå»Uˆ/39goóZ¿Å ’;LÜŸÀ ×œIw% n2ŸÊôÌ´ôÛRêŽÜÛ›–Yÿô­O™þs{†%õ¹ÏËu–åÉÎ6¢r³,¯ùôuŸ×õe(ku/·^ ZKŠ Ù0ÝÞ¥)=ƒ{Ê $è?ç¿;÷Üì&_ÛDìùþ'Ÿõø;!ιvð¹ ×"z;0w%Qü€×¤¥%gîäÚ;WRx`—_>;µj0 ¨g°ŽŠ9~®&^örR,ù¢¤+˜ .ú:XeŠÍÉJëàYÒ£ÓÎ?sÕ)qæêbÊ[{]NZ:Õ0|¼a«ßhõø|ç,ûì€;ƒøOšµçJBê=˜«4æÐÛ9iÍúB©ÎpCÍr•€£ôA²óaƒEäNì©'ö$˜¸Û[0»|>†\JÙúãǯöÉÿ2—F®¹™ëõª³ãLò…2ù¹UÀ«É‚Y† 0³ äÏ9RçˆÕñÿøã?YOdìU E§À¥7³eÆ‘ãæŽ…2´&2`n¹&ɇõÞWÎåókãøÈS»³í´<¶ÎèÛ`‹#oÅ$S€L¯bvŸ1ešošqSÙ=µØÎÐ9Amg÷Mï1è7ôŸIAþÜÇ“j ©caÖüasê‘àUpÕ ”®ŒA’çXº^ðþ¡æ˜w˜~‚ìÄD¿oNåû¤·ã†ø™û~ŸGŸÉ<!<‰mŸ~åž´ó‰b4‘¯î€~_‹ í–™~›¦Ù‡!Í*i>IÍô žëé«™œ#Ï5Èk\Ý3<#VàmtX[šX›ˆ=®®[ÓÏ„" Z08!ˆ'Ja½Â­ÉL·¥ÚŽ€´(U)`˜Ý|-šŽÓ‰f¤À i+½h¾àÛ‹pÿÞxk6pæE˜X¿BþU\uGÙ¡“Ý77;÷cÍVî?!¬OT+ªBñ1˜¤áN-̆©Ùtn¼K4žnÙî%5orö‰®3ƒ{ý:*ÜÆÿsÿ757.'¡Ò¹ ØEX´ÁªOì©LpÆ6\ÒðøÄ±?$QtœãŸE0Ü·êNgX– þÜžÛËVšð3“y:Üúç¶àïþ$ênO*@Ÿƒ™ùëeyVËþ:}ି€›È-9gæ[•kzgQ*éq`òÅN5‰ðFÐoóÊÔ»âZkt܃ëÜföÓ5èOβ£ëFniÏp¼×³ï@êâ€Èιö”GŸe Ñ(aêyHP{¦¦§¶f´fí Y 3eý-šöy½¾kÚœíš'Ó.v˜ºˆÆ¼/ ;a×4a’‰+l å€ZDÒ`Vg›Až§Â$í7»:Hà/’–ÃØ*ûõbÆÂŠ@µ7KaRL“ÍC ¨xÓ“—ÏIœ¿Ë®^S¶k3Çï<Š[gh¦KMÛsg˜ÑI¦®š@/ke^˜m&u“³Ôæ'Ïמ “è7)ûž@¶Á½«)÷l¤¿7¡ËÜŸ@’ÃS§’K®M‹x­²O«=gd"% ö|äIÅa…j¬Lê1Yi' VÞfúoòÜnÇL”›¹ÑvæÙß@üû㟩;©0×1Ò–$ùÐS‚Ô2šdÍüþäu,ä¨&ijîLÎo)ïÎõ¥žwîQ ›é<z×RR‚Œul¦‡Ò'©ãŽ)E®žýD3ÄL@R|OLúDì1¾iÕíz2ºHÒŸLaÌú?÷¬t»ðx ¾S¸2÷˜dndW*ææé¸Ï+k‚Ó\WÙC»³ó!i:ñì^wZû3ܟ̹¬j¾8¡*6š&„^“šb-yÞ.¶x ïŸtîÙŸ3\a®Ú™ QÑo²gÐÏ=Ô2ÿŸ¥—I;÷¡BR r?€ÏÚ É,ÌáÓÇ—¡R]å¤s’¤BIbÀ©œõ´¤j•j_†ìIʰ㣟0zÎLÒÝïµt~©cîçvØöL!‡ƒ¤3÷*ÜÕné@L(Ô:ËN’t_1M€©n|Êø+6å6ö®æ,Íp¢žÍšckÏuluÌuç³²ÍG‰é¶¤ÅÇ=˜$ÌuÄŸ° mý+“ZÉd—rî´é:Éaÿ¸k-E>Væ©3¶£¸Ï\ëÙî'zʵÏ-¶‰¯Ÿí 3’¾Ð©V×@<…"³¨hô†òO•ãÔ š}‚ÝÔKö‹T„{SšÕçúÀù_f¦É„&|è4§”UzÈêv»*¡¹‹J ÌÚ'à3¿Öl~2¹(ra¶ž©&ɈŠGeÎÞsÒf© ¬;ĶfÞ:Op:½YW˜Ð„¦¼í\-±ášÕ²pÛUf-ÄIÝ$ó€9¼?¹Œ¹ ‚Åâ:~æt ø’ý–á~zÑ÷Y˜Ï @’Ýükåòo‚ÚÆþ®ó^hý”þôÞlgfáÙ€ì^Ynµäë½}sù—ÏN²$ô7Åb†ø dwd›³V`æ}’¤ü$ÇÙ _Z_ÿ;ºŸø¬ßWñ˜è=3k?‡ü[v\&\æ‹!(Éi&ù°;¨fi>ƒœÍH4­ã)êZ='$™Vó*©J– 'Zàü_gQße­•8ìj+’tj[O¯†~Ž<ÿs&¶IŽª)OœtÖ¹‡Ýuõdœ'›½÷o s§Vcl’´¥IDê[5Ž˜ÔsCÒÌ-ʼnŸ@|bÌÛmÀ;AÕ>H•ŠÐ=˜Y„j_‹´Ï9ëÿº¡ôdÿÝÙŒà,ñÁ°¿]Š’­Zc†º³ÝÌðcÁɱ8l—ÿ(ÝH ³I1ÀÓGÊÒ¹¾añPÆë,WqdHsâ¹ÐØÜ5 FŸì[§“he›|5m?ά?Ï‹£çܼ§æ¤wd;3‚~jí»ãì)á>9Ö¬BrÕØ²ÔþûñeÓ{/À)Ó¿ƒÑÞ+7)ó|‚ÿW¿R;¯‰I75ŠY´ó%˜œ€“JÒü¹ÍÑ|­M¢Haì ¨çŽ!ÁC“8…A™1Ò¶¨ÎbˆÌ¶²£ YtÝ`’§ïwø÷}ÐY€õĤ› !µSßW'¨x“j©ÏŸó~°Ã·[{“&ØN¹yßK| jŸõ|Õ'5cÔóRÛó¿ž…êη’OK2’ãXQɇ£QŸìAò g †H‘åJçŽö ¦ÖyÊKÐ…7!%’fLu#Á™ë 'Ÿµz{ï쌹ùg‚Šýƒç\¾Ã¦¡É;H’ß7cè.Ätü)àIØfÖØIZûII) €ÍÞ(;ùx¾2ýßáô¯‡jÏâ÷ª¨&š^QËv·4ZåRG0˜²Â@ÂbT.öŠ,É,$¯?Ë‚n¨%(¯c&Ü'LLλ³|çÃ_²Î—S!5@xs˜°D~“||-˜°ã2ÇÐÿïõâÕäx>5Ÿ÷ËVh6@±QWòS¤È ýtò™fF-&VL«#'t³>ÝvYjŸ¥9©¡qÓ€›ñ=óþ¯»ýý+ÑMƒ¯ÇÄí¿É!¸köí*;ÌWWŸßÒŸÖnJí¿» èÊøZÚõ4ûKdµŸ'€¹Qø“ŠÎä¼{ckey&íܸ|ýLÇ|“ïwCvç$ðyh gÐof?çªû×ÝR[R¥w>†Y¨—©„Ú†Ýz\׸rq¦u%Ÿ&’$—>Ö`oÂ'‚ÔÓ” d:‰Ô ®•·`…+;±Án"<›|’9ý“nýl¤Å£zÆð}4 ™’–Ž{ù’Fsós­€û¡ô‹›‰“ãSÒÎï4Žzú †Î%àì@˜iK‰äæÚ$Ÿ3ÏËÌ~¢\Ã}§b?¨÷Þ‘Ò³—i$¯ú©îRÇl4/-A³ÔÌÁ»`ÌZVÌ‹›5Kf¡}¨W`µÆ÷Ô4°O¬†­$¢pÿÐtá­+û-—5 ÊÙ$ͽY•¿Rÿ­ña”̃W­Æ™Ó=!ÇÖšHlµýÐü—Ës“¨'M2O~œ²WÛvgQNgú gª¨ <ß…Ú)ëÿ“^ÿuá·ç/&zaýw5æmÌ®”ûdŽß´ß ©÷ƒzÿ êó‹œÙ(Ñkƒ97Á›Ç?«Š9³> ŒvÂ'o>AvSŒR¸’z >µ 'ÊPß“<)ÓŸ¤!w o] >Ø`u±^Ìý§vÞúûP.'Žu­ìuŸÛX°žÁ@ýV=›u$¦ŸÐ3½ÓŒßŸ<ÜwâŠèZº”ψ)CÉŽŠ©(¾çª”üaX1£Ö_ßœÛOgÅúDJzö¯†é;-§7ä²2O²KúB‰sŸÒÄÝwû&æ²9Vf·û˜“Ÿ@ÒVšt÷`Ý †þéŠt¤©5©íû† Õ8òÖcãlnnö]%fŸL’j"%€&|$ „J2ÍÜÏ߆3 ŒqIJ1+@Ÿ€•õ¾¦¤§Ðó%NsÌXìSü²)¡) !/)(Ì[Q‡·•òMâ„åÀ€£½÷ž¯J'eÇ» <0ï«ìºJ‚òÖÈw¸²ß«Í×mßÜÒûa‹X¯M”êŽrÃ\ÒuqaÝìpòË™{¾á²;ÓŸÀº¡üOãëf›_܇ì ¥'‘…’6Ñ_Ajv`èïp΄K%º€sÿùךà pf¦Ž{oxç»IÑ\üìÚ{Â_nZQÇÚïÙÿŸ$DOÏÝúK¡‚NX›Åî¿7•;Ÿ¤tŠ:pÜ~]×¢f!B^6…×ýS³´ÏŽàÀ‚u?SjÙ2¼{ëÅŠ7çsÎüL”Ðŵ,¶¹3ÜMZFÆ$\ñI Iî4\¢J¾ìLT‘TœÑ ðMä™|;©ì' û3þFhÇ‹!’2ýéììüs“OÈsï?<Ã0')\Iã™ÀºAvrØ­lW%ÇÛwzMná=‰m¤E:ýlYDŽœé_aµZ5ȺìþÌ©‹O&Ye¬ ¼,1éG‘PŒ¼=²¯Xîáà²ÈEðmƒ6•îÂ”ë¬ |; ³óåìZ'oưÖaçNµî`ˬsá)î¬÷èÎ/Ö¯³ÀDV±W ¸S?ƒU–V±êÂm¸œ³.D@Ï*¹žîŽ`À@ö¡{Lü0à34œMµ’í¯É©Ðß¼Ÿ!þMÀðËšzçJErð ¿Ò'Þ'süü„!‚ô'TràÇÖIj³åOÞý·žÁú.!‘Ï œ¯R'@rؽ{?ëó$‘MËqÎÛ§&à®jÚxRý¬Ï ¾IÉÔ¦ÔEàªHj5¦„@ ¾ŠûxQ¦‚ÕÎú¤î¢ºÏ©"b8^ÇožÚûÊåó~v‹õˆ÷ ëYÓàžýþFïÜâöâµÐ§ErpLîä5kr1FbÛ§,þ¬]“3å=-*©ò?“‘,ÒJ<–*7ÉŸ8…Xs·Žþ¥×Y±Iƒt½RñÜé‘„bmÍöš9dY?µü¦Žæ•W&4$¥ˆyùŒ¤Í¥v©º& »ä²Øm³ râíÅëvÞúÆg¾q“…¸á¾å kérªTÈ¡ß-›[ëWÜ/aÌÛ—Aä">ö<#k%¹AÖ ž×š@„Ù}Ž9ÏÅ$j¤÷¸çË;aªU2Ìäž¡ÿ=蟡ê,‘yC¼ùeý_“û¿~ ¡¨öœ(@s(Å¿u]Üœ®›}í£ì,©›}ë¹c@ ‚~6‘;WZßr •Sœ’<(ú'ušžx“:¾ã›;©þ(ïYüÉWxþuW*nŽù^§ßÁOjó}Ö£Äë*¢Õ]ñ §¥£CÖµØ,[÷†Yûe¨x+<°eC_w=YÏŠp¿èIýu¦ìx©€§îm N80YÂ݆L±Õ*I!÷!písÛn2x2Ìd’V&uùXï-Ø“NVb³·nW%8Õô d)R’rósëjê ˜­¾Rv6SKW!ÕFfŸteÍï7=/µù^9òv™~æúÎ*ïnE¥¢Ë÷ׄBhEf<¶ÚM¶mæµ;Èž• “=x Ì13̨s©É¨öÃlJýŠÍ§›ÓMuú=µç&GaŽCj QÔSê\XIàõu0pãrÀœ"G‰ÙôúõßàÅ)@„'ßZÆÎQgɲ­<—:w«;³uÌú&rì¤Sõ…\p¾·ÆìGûË ð »½çž,t_=ønBRúŸ+ ¦ôÜ·ûêÜhü×C $ÞTU'£:}îl(ß3÷Ï”‡—ŠZ:99’&ÝúL•Y™{ÓNK>ëðœ¦`³νœh25›;nú R˜aÒTê[à™rÆ®+U—£Z÷LÝ õI­¤¤BQó*Ÿ®×ô`y,½VÕ+Ýÿv±à]]ïY`ðˆL¤·¹¦£"Ÿ $¿¹å×é*®k¦¤¦¬‚ã÷9r?­)9+î§ÆÓ¤·“8î RÅàé¥72›=‰oü‰oz f]ÊÖŸ=0éʦVéœ.?úDmJ©_œþd°|£ÙŸ~xÃ¥ü(ÕrØ3@!#3»di“ã·ð†kE¸ÉL³Á1™Üî…`I‘01éÌ$7(3ëÏ›’yqfÜ­ôï Ž„»*oîÕbe¥ÂwWP½ÝB„®À$] Ú¥Y‚-<äz:€¡¡I9Vmw?뺤O¬'ãÏS+jr±½QÓ¿ÉÇÿ÷dýçmÒùÞT6Rð“FÌ•ö× ¼¸þnùMÆaî ! â ƒ¬âbèÓÑ~&56›‚â0©AØj¹C3Ôù9·ï:÷û]=Å©— 9˜÷ŸÛg?{ ÜÈŒ&ÿL^2±*·¯ýó*.×zTŸð®ãl_û©Ojf£¼&+K»*ÈjóÝ=.N'l[Ú9-’B–+åýO‰[†sÏç .›ÎÑQ@ÏÞ?»¸°å4'®q7¶PÎî'Y h3fæ—ßdÄç\øÜÌd_Rïñ¯^{ϦâÜìÓûO#œ||<pO9þäÚ;÷Hø·^ÖÛIÑáÎÞîmœ=@‚ÔáÙå ›ŸYXBXR5È̦*H†®<ð8™ë5±„-?aÃ.óúµ0?aÀûUý »#ìépiv,3mʄˌ#©{CÐO ³Úž¹ f ‚¹Ø3 Î~ú&º6b] O‚;ãMl«Ÿ‹)XÌQY›ˆ•"ÞQ„û¤:0l³¿—"“yìsé0 S…góîI™)=Öá¹aü7ÿ× nö9Ó~’Æ?Ïúæ»Un?{ý¦ëbE ùoRý'²Å³¡5ÛðB=k›ì Íÿûç}ã »†’κ²uý3¥§§ý0$pæÞM½wb“9W"ç¤ÀÀÛX™'ƒ=צ„’ö?ç(7¹Ö«öPÿ%¯ûç+øó«>gÝ€š{µªRÈâ†û&:ÚËÂrlöõ³`‘ƒÞÄSHY^®qL!q•$|g'!Wa{ÙŒr¦¸Ü|žè7„ιqvÍd´§íç…j?©ß ‘Àçz‚ÏÝb”NX'¾þó¾×,ºéšÈÎgÓ°¯‹ISݯŸ×ô“Àéú^»QsOìù¤â¿ŠÅ./ºsŸ9iÞleŽÖ¬tBÜdsãÓfwâh>ë¢ ÕäR¿Ë<QŠ<2»ÏO¸¤¹WÁj<»ºÎš†85»°ø´y 7 ̹¨³J`¿7ºÿòÚyÁæT˜ˆù9ÇÁú ¬Šp|˜‰tàTË'ïö ܰ„pŠ‹SÊW‘Ò³gv×'n5Ed&óÜÀú_æ°ûÓËë×Óæ,þ}ÓðÍ~ágÎúûeVBÿdÓæü(E?ˆásÿ»Ú ÕØNCF/]T÷âsçÀ œdž¤öSû$äµyS2öº³î:õpfî~RÔ1E瓜èyT™Æ3{|Fœÿë Öçu•Y¨;„¬ôGãhý")Ž$[&9Z×0“ë…k˜©.j­3òþ ôyç›ücaS6«bN×÷?aÔ»c:‰é-Ãü„iÐéÜJ›\lY«Ÿî £‰ ¸ò=ëð©2à:À¬UoÏ ¬}l³qYæå'ƒ°Ôœz¼÷TIÕ‰Äãç±™øä{†èå ô[ÖÊÃòXŸâΕK&h#Ùƒ‘.÷CŠ}U™9¶ò4)=)Òbã‘õª 4©¦Oþ"yü,ªîµw`ÃöÜ$WÇ`)=PV!x³É +l‹áHÖ9òÆb&£0GÞŒ›©RÌ¥‘cký"ƒ-ÉlXæÀ‰!™ó|„#ñ4È!~‹#æ· ÈvºÎÔÊÙÑ?z^¸³Ë‰‰þ]üwyöÿýaÀÜü÷¦`œæfèÐ?_ßÔéá;ÇíI(–@߆M6ÿJÙP«´Ù€/õG¹½¾s>E ¬ FS6= z&u ù¿©Ú5yúvÞ¬ôYã(W΀á )šîŒJ¯lðåoÙ–‘5%× xgÚØÎMðé>g‹½,œéOá.Ÿ ÷8­ùŒÌrb†•kå¹ý=ùÄó/ScÔ‹»a«'nzÒº!-Äò¦ ¹Ögø›H>s² ‰WÞ0ògbRJïZ;?)Þ0æS-"97gÄc›•f–ÿºæ\ëF÷%ô-B5ß‚µ=¡³#ãÿ¯º³Åv¥Ý®ó†nF`ºá\pA€A``€Iš```pA i€ºÛï§[OÕóΩU¥}¾áœ¡£-•Jõ;×Zó‡Nüa¦jä™;ÎW(²Y'0ûЯÝpœÌì…Ó™‡ßÅ>ôzýœÿwX—²4²{‹‡Ä:¥•$o¨,lÖf¾;o½¬;-´åûý½,!¸=ÙgIÆüÙÔìøí$nùRÈ2ï÷QJæÂ’‰E¦‹(ú±WDòY'Ès_ÖÐß·ÀÄãO@óY8ׯvìù}¦Ï„¿Ï¶ØDGaèß½˜\Úñ•¤1Õ‡FŸ Ðóu¾Â~¿»þô9¡¹žo¢$űaá 7R§?iŸæ^ø‰Ø“¤À™,Ôüvî€þ}lYwõ™|—]wÖ~yÑu®si²ó]ðþµ^_ë¼îý‰ÐÈ®?KÙœ~}´ãÃÇ?á>ãÆëˆGõâ4¦ÃîúîW×£äùÆQgNèâÛõn÷"N3ÈS¯=ÙJ&óÊ\•zÕ)”ªSzv˼vdzÖ“M½|‰ºGЮLÚi©üH?þTò bñvÞS‡$kEŒ½þúe‘y`ç÷ 0§…‘;EÐF€Å›¿1ùµ¯O*’^xR±ïËá—é×_›k¯–ŒßJŒX^hl~îu}ÿ"÷ø™LbÉyhxluÙ2‡Þ\vd޾â܃ßEF#oêfö;VŒÛÖ^g+½k:>K;nŸàE2˜á¾O‰¿ÑÃîF¼á±ÇŸüøIãñà;yøtN?ÿjˆ9ñð¹Kõù$–ësWŸ»ƒ¹ iÿì|Z’¦+. ô×ë}¿Ÿõ¦ýô0}òø$è§3:‹XKÒY¬+›cÝMäYÆúu 9b Ù Yÿ:³ÜÃeg §¯õuõ²Qf‚ò3·¢}>@/TÞ¥ _Ë*èn÷¢tɬl[кšËk–HòÙÍ0¯”Åäp•„¿ìôóýìë;ÆÎ™Ä|ÿ:ÂÙ°;BWTcÀÇY7Ï·Ãܨòl½n=ÁôN‡BǧL5y…sµ<à>U0é¨{írˆ¯ôr« ‹mÀÊ_Arš)@;³ÔëV2õ(iÄ]\—vHÆó6Ügc»\I¥9 Þï_;÷ý½?oÎ;` >Ù]™ódKGž¼½–p8Û8 ËäϦLÖ5·A0æÚ”ì¬KÉz·ÒuYáAiÊ /ÓvÜ7ŠýsÐ?éd÷2à“¾ûç®>¿ÎNtNsš“|’IèüÑ¥½>~’9ì?ëÁ£7q =Ë2!„=àßÿq#çTSGçu$³KC:ɘŠsæô_Í@³eçU8ëâá®ã¾‹47H¹¼~O÷òv㽃[’E‰^Ìx1Üw–{ü‰‘ŸÊ€T°l¶‘±»þ,]øœÇ¶)m<“¡ç&qŸvœ£¡…³®Ù–êÔb¢…DÒ0>Ç9]¡çÎùçZ ôy‚ÿÊɆ—Ùé.þv^[’Ù%[̉jžèIfÆ›$Ó‰:ŽîJ:Ò¼´«îb·5®åÄnzs-´è²H†Ë…ÓÐ{ÜË9Ç»÷ÿýW:Ãòá ýYlt¬:xœnÐfçvÓÓè-uñ —Ýïçs³¾… ˆç®ÉA¤a ”¼ä ô&ÅÎËjäYÀ8d„ÉÁ¼Ñ¦¯åðBf1º¯÷›»ŸˆL» û£ÓÏ×Ä»ð—Ç’ÅxD¹»oî£Ý!ú­Î€ž¯»Ï¿¦ñ·_ïô.Ýå®÷÷ýÏò}Ÿ —AhR¤%šPêƒ:ý—ð+1þ ’hôiÆ3{¥&~ØúsçòqC§æŽ-‰Mã9;á´~yj(Ø?Ëm¯½öwf{gý.Æ}çèßI>{®¿»ÈÌQY¯¬£Â)ò¼Ó±¥Åcƒ¡dc@ÿY°¾×21É%fÿ'e [3.WLr3è·1I¶zÒåF§C?Ù×çÍTÕõÙ]Vëg‰ÇXØÅ%e¾h&¯úT $BT¢Ê¤yÅ.¬¥ ¤ÔÞÕŠMf£½ŒIï!IÆÇƒ5É;?‘|œ·üyÎEÂ~Âãµ]ÛäËñì¯Cÿ`«O<|¸Š©$‡°êåÂÞ;¼L“e¾ÖpÊdçe²Ï½.š6¸$à¶#µ ûa¿.7úÓ97×F–¤-ù6fV=9ñX¿bY‚ò[8{áû y-KZ’j÷×ñÀîøÚbÔØ£À/ y)’Þ…þe‘æÞÿ.Õx? *u÷©Üà€˜7˜Ô…M‘4éuû·dþëñ×Ä,Æï¿ŒõIäÖï¯"xfzw&G |îúwØ•ðÓÿ%Ú®ÿ.÷I{`—4«˜ös’å¨pk†÷g›ßï’€ÿÚó'Óo°žb ¸ÐïÂb~q™.!Þå ìžÜ>¼ý;לÞMLÃ僠]ÍÖQä‰Srãé¦<_YhÂOšk¥I—§^Ž÷J¶%ÉÞÑ4»ú˜âËæ£InDPÌ):CÞ+÷}׃ß{ìú’l.;û?ïöý°jÂK¦A|òÂß9Þ¬mrÁ“’r‘»k¾·§o"€¥2©¥u±rÚn;›Î£ÓÏ׿<&à×Ñ]i¥¹PÓfœ#ËIà!Áãå!píy“}ÎÞ?ùß¼…°W”è.vy'À¥31EQkˬ‹Ý‚û ‚Ûòr­ÿζò舓ÉG‚ ¡0Á·ëy+uv§\ÍRÍã§o÷š6&3|çSŽäÉ“zu¦ñ[, æ^à1émÈK€©ëfcñîÜŸ{ÿï ìz oO{Õ?£¸üGýŸç ^±Oéåti/‹Ó½:¬†>|¸oºŽy$Xp`73Î}£"H" åÕØê”€ë"?Ãë§õ®o“ͽ%hrééâÄþÏྐྵú˜"•îƒlóî³$1†ZNLÂaÚ´‹UC|>÷¼ËåD÷­²²Å Ÿ¿kçëO¡6E“Çñì Iûü\Ê;÷¾ßñ>Õ-# ‘dLœþìÄßÒy“åe2$=¯Ï÷vðè$Í`'áÝç'G.ºíÙITm+ÒdÊ9¡ e ×}ÁæÏ~%]³{ù)¶ÿ’òêÓ”úVÁ›Î±1O<Vr™f1Úßæ¡„þN“åšÍîôpŸÒaÞŠèÄ×í~Ãre-“¥g)vÏ¥ÓüZþZÛµ§#ó9³YžYl¶3{;ÙîQÞô¿òÖè2ÀGHÊ@8ÏU®[Ûý~îe’y<¶5gtП(=‰ä“ü|ºõ}eB‰ù}h?¿N-ð+É t’¦ü*Þûš›8Ñûýô˜b§Ön'A® @ ý™¹ñNl·wáuŒ-^¥=N>9 ô§ÞyòÕ™Áñ½ƒP_Ÿ$/6Ä·’![|î5žZP¶ö÷©õKyÓ3'l îû5ͽ|Òy-¥Þ‰6÷\k¾–fz¡?K ÙyT˜ž-.ä`ÇBÞC9×â]žÇªãAù)b¶µ/ƒÝk¿÷ž;uÇQŸ£ž3°'”¶ O%‡×6Z%ªOÒQtr”Ë¡3ƒ`_fìÖjï d"V 2svïoî=çNÌAä å%÷nèiP{–}_¼´b ÄÙÇæ„¹ôþ'\ã)ô¢ _2í¾O 9Âh&°rèÉ‘/‹I8ÅŽ8¡¿c¿Ø `YÂ-ãƒÞ:^\|¢’7TÇ{­íFnN 8&N}÷sïÍÉ—¸·»ÿúwר±I(;[„ûœKœÕÇ1ïÛ¡aÛY¥3û3Éç¸)Rì¿)(9ïݾõ„m?é‹ÿl¿ÿ§–éNüÝ„àÉ–LŒT8Ó7‰}ék~†MûΫQòü±A-‹a÷GÿN^9“é§Gí‰íêIo¢&ûÔãÏ@ÞÝOq`{:P’¿sîO¶¤WcÐN ZŸe;Ò^>'ÑË$1k§ê²»O°n—{ù{¦^ÉÄÖÇùZ7¾â’Æ÷z3 Ráš»ì¤Úº`wß“ö©c{+‘UØ0ì»´7%vû»L/1EÊËwI“È0)ŒCádÄ™hN=“Ê€»gô¦ÅD<í’ÆWNÿR¾çk÷ƒ÷nýIZÁ×íN³þJ#E‡!Û«g]˜Ît ƒ-÷âî?HÈá3èd÷}=gø á8òìgLkÎuÛs‡Þ§ëZòÚ¶ßÌ>tR,·Y€$M|óuV™¾¬$f?‘¬ §s³Ç‘Á»ïn‹=öé“UŸ•¶:õrLïáeôwK—g>?¦úî§’oW4^»þ칦’51ûé†n=€ ú„þ„•¤Gîäwû; “ è ?Ãqúwž=èOïÊñ&¹ô$_Ãýdú™®·\û©„¹žá؟ǃ"gGìRÉ÷ Ž”qÑÕPIÇ’R«YØÛÇYäúóîß9å©û›<å8—6µÕ„¼ò®}îO_ÛvÉ22Å`M$¼¦Ý{ǺÓiv}ú£=m`ígö“Æô×Nï1O3ÌïÕ‰CÉ'Ê3œdŽPµpì¤ÒɇK ¨Ô\m{àæ²H 7©®„°\Ÿ—‘åuVÀκOžWÿ›ÁïÉ­3Yfð„¤)©&< ¥L–òYŠ„Hsâú˜Ï’l-ÁfǼ@Ðz•#öÔý:‹@Byî)Žã-qæ Ì|}{Ìþ§—ÙdsHÍ0{W¾a¤ìÉ4’îý~.ǰoâÙßÝ{ž‰V?·Â¼+«ý)«ÐgƳ)ÇèwŸ¥îÈ”)@©Œç.2»'ìô{`_— 漚JÇÙg«D»¦¤üÎu]bß”m‘õèÐÜB^7 x]Ú1û'ËßÃ÷Ô³ïÎ?É43þ9a¸®9]û˜3cŸþ$O€;~z§¿óýžØû?ÉÜY²’¼Ä•TO‹Ô×±úšeÙ±Šòß+ˆ$q%[~Ä?žh9¤’YCìÊ'ï6 iÅžì/SOÚ¶§iÐ-TMÚ–‰à”Üúw){¿ 'ÿ:[gú%.‘[Ê‹èÛsýŸpú¹kOP;÷3RŠGBI{óû¯®hm°¸>Eå;A¿®µI’Y>úê¸_¾~ÝkÀwìàub€r @9[HtÓ–ÈéçëNÛu!ĽÆ(4.™ëÌ­Ä×ylÐMèì§q¨&ØS·+wã±Ø.çøæž&Y¶KXÀ>»û©—™:X©keð”ľ;¡Û^ÚÛ‡ÝàØ!é'ÿ§ä¿§eç'FŸó^þäSÝÖ3•pÉâ“…¢RLòá‘I—•Þ1%Áƒ¦ŸÉïۉï¤Ì÷Ì¢Þ¦³8ïê Bò¯c¤qr6˜úë¾jí4yŸºøž6ì^ï°~¯1èÅŒgªnʬíÌBÎÅ›_7yfu/?Ÿ#M"µ?’_Y¢úôCOMMâÑî¢eý¢uô²¸ea@±ï®UJ‚ôa›H¹-¡?öõç1Ì;,§¼çG¹žüû¤Nr[¸Ÿ --?ØÙÆÉ sWö:õÑ=ypL•Uà&†=¹\2×™ßâVrÊCè¡i©€ùoz8_ë7zOòêñ{O:áØ_ŸÒ+z¯ò€&ÄçAìî>;Í<¬ ÷ÙÃ&|÷ÅŽ^7»âäû7®K€7k"·XdC¨JbÉ™òtÈ”Yá±âçbÊ «CvÎ()æÁj²mF‘½öcGL¡ñHƒi»Ê֛јd|\·µÎÜž‰Áïî”o 4wbm¦d8vÞ`®ÛÛÍ!þç¢ÞOì/¸WòûSÑ]“²!õïûÜÆ,»B~x%§sN±ÜíI}’a7t?ÎrIò§™sÜDפŽû”|Å×4÷õÉøç_é›nÚŒ_O…DãZXì&ˆK‚]FïÞÄÓƒTêLœ|LîJ†>ºll°ŽF™ç©æõjÉs!©¡|•NÂ_Ïr-Sf±jƒÚu”2޳ûÖ§î¬3yèäN?óºùÅû ‰F„§$çÖ=õîüëŽíÐûëül·€ORÚÔwOe†¯ ÉfÔÑW)ëbI«Š¨NLÚÌì—ìe²²þú•~Æ™ÙpÂÈk§)•{®ç¬Ö§uøêP2›VŽh×’dšI)|nCIÔ<>4GýÊÓÏ¢X.Ÿ[ƒ½yîÚs7ýP87OšÓ²ÝäïbIË÷ ç#œlÉ/{ÉBA0™Ón?Qþk P²þ<߆¯D ^͘“®B» à+°ö$¯§ë—üW›'zÒ,`ïî¿¶“ýÙq¬›Yò¼ºrÍ®Çp×,QûÄRùîÞs-ZÇRÖŪ¬ÏàòˆŽ:CÏ£‘j¯*ú.œºþ¼’,D¡ç„jÒé7ž!$ËÎîÿ“ëPváÑ™ú»e_Ø$Ym A;/y_<$¥‡iB)ûÙ>H¶ø´Sßrúý:‰@ÇøÀµ¦;÷o–¾M¦»IeiRDÿ_ÄÙ§œC‚-ý‰·槦)AJxý×ßåñI0ÖšOÜ>÷zúŸ©&t zv ¾{ É$!Õï·ë¿Ï—ž˜%rˆÉ6‹¤ä—FŠ´˜´Sx¶Ã;`uhäR'~JÿõÕÌ›D˜ôÉqÈöÇ»,9ë£ZÜØZ·p"öPðÚ;ýÖ–r¯J~eÉò¸§\§«´sŸëA¹óÙÞãªE¡­¹RÜ×7Ucá’™-ÿ%-‘×þ5Õ„€’01Z¦¸˜Ig¢a÷D,›RR)â~¿Ãªv%Gó¼OBá¤sH뜬E'K6½Êó м ¿ßɪt§?”꺛Ύ²M-Iõ±ó ¾~6aôºX¯C™¤t)¶CßIó¬õ«¿Îœ]þ ÊOmI#NÖñ¯ÿC¹Eÿi¾B`ÍzV:Ó”—•µïÜçö!\^ŸZ[ …^ñÒc‰­ouÝ sm1qf~ÿÞ«‡¿‹"l›Ó¹ÓÏç¾Q9‹—%ÔÐü¬ØCüwâ¶ë-Í¢·Ñ•Øÿw‹„gA`Ÿ[vNžÏm:?ÉøÄêô.ÈýþN‡à$г£œò»'ª¹ÓŸâHøIå´9âM®ûÎ+êëûJE¡$‰‹g×˯·RÞ If°?:“x"ñ‘„¼g)ðÔÇw·w¼ÿë’wËkße‰]kp9¥1ùg½î#¤—‹¼6vXï8B†v¯×¿+]«½æœuPÁâ­dg¿D™N®ópæ ØîÓ½ü”LO”²öõ¹;¼çŽO˜åœTéž:ܵl°ößéŒ[‹q–`ÓUwÐ=‹H|z IþëB¥Ûâ'Á®—Ï’Æ@ß[à”ÈëKªE ¸¬Ë4™Ù3ñ2ʯ_«èÞ0á^”•ïçÅÒÓÆK¦ˆ“ïItºÝ¯÷,€HÇ–¸^æ9èê`íó$!]뿾‹ew$,‹“µ5(Œ³70O vì@—!ûa÷©Î.ë8*l¸™Ê€$ÿeIà½@ú…8$öxPë‘tºQ¹” 9ARŠ•Iýût»ê©–O˜ù4 ÃúgdžOúôÏÜ÷Ê<ôY‘ðl[uÙ®é[I2))S\"ùXÈnïs?·ÀNðvLçÙj§”mâfåôÊãÚÈy&{«6SNÎ`ç®óáIÚ€‰'í” =Iàx¸˜Yw1gÏs‘¸Ea·_=/ê]öÉ•mb^ìëªÏ”äåÏ_äÉ• «Vˆ¦x¬î,ѯ¢OŸ´ pk’G©'ÿ úsBÎ0ÐÔ;_gÄ:Öómé ~wî»)yI¶›œ‚=Hýþ×ep“r| ¹z§ŸïOÞÿ„z,ž-—4!„…÷”N±àëçÕC°ë¶6’€ÍM¢`ÇÝÙ·¼‹u«Mg§“–é¼÷ŠŠ”ÔËu#aƒê º6Ñ©É{Ü©Ïl¶»B¶‡™ý§,ÎÒqÞgYI‹Â€t Â}#.§·Ú 8–&QóNˆ²lƒAF€{ü†•”íNúÚR)º¥r¾'û¦â¡§§.;ñC¢îØ)¿“vdžë„$ÿêãÑ'E)ù­{Ï•‘æÁDèæ1Ó‚bëðbýÊ‚ÁqZ©N§£x”}W·œpÝHqtA?oöZÏ]Bú²¶iKäÿ‘Àc–<¥9úëBcµg, ñ ¯9ýð…ÃМ{$¹æÛ“çìªqíñ¨àwQÌã‡ÅÒ:‘(«²W‰Àà(®dÇ™,;ÓÍÌÀË–‹)ªi2 ç;çV’ŸØSÎál² ½Û¡¿«¸›$p77à×=Ò~·‹ù»`¯k©™]§Ž ÝøzJ±°# ;¬dNñu[úÁÏ2ñ7uXS_Ó^m¼•ò.àÎ:ŸŸyù{÷ý¤0‰ÑTë zÄX²ïLÂßõN^9­ÇXÏ“›“SRàvÉäšf@Ÿ$¿=Ì®»ú¬ç.l<+öœêìRu”£‰¨–H#ëØ£S"[¨l;²÷O@ÎÆ¹NÚùÜV•‰}žºõ‰ž––ÎMg¥”Ü$Nà>ùåïú÷W®¿_éÌûTdO§=YÈ[x—é»ß;\Ÿ¯Î´²w3Ý`ÜçvªCU|[e‚/a=KÚ«±o¢ˆù脼¾`ñ·x9¯¨¯òzÀ¢åœ—víBñd&}e=Öï%½‡í+pêû²ÂIÙù¯éØ ,](âö$Ë&¤=ù8Ýä²±éµÓ¿ýû™S¸•8Qá‡þ æëÛÂÆsïn]d§8’½XÞHšt¹x£JÝß»±P=ð+AügD »D»D Ïý]2Ò] À³YAŸêô ;£':ÙŽxæ‚ö:Ipןg»Åt|wÔõ¦—P @ï—g°u5 M¹ž†\ 3ba`~wý9)e—ý<;½æ—[òÛe».0|]MÖ¢;_ ï÷9•Ö½„ÅŽr3ÜO¶žiæ™ ]Ÿ¾"q™~êú³ÑãÙTÏ1à‘¹¶Ø.xn/`åqø×zPnK\áY7;ý¦÷¤€fµô\+“Uì*cm.~*!üžä«“ÒmϹ{蜞wM»„%Ç!3hRŽ/ûýlÔvcPŠ.rØ>Yv2} ”;œ­®œ¤3Ý ëÐ9ÿÈo`ÊŽ,™ß¤÷° d¥²>ËÑ'éî¾¤è ’RXã®_·¶†A< »äÚ “â3çXP9—kó¾TGÆ0/Ö$0º‹svôI%bD¿®!/%¾!¥OšøÇ~qïP“@™øºLÓº‡pu6sJ‚LO’ËJêTõawïúó¯‰/~¾ÿº~öOYj~BéùÄHônÎñ³€²Ew:{ÔQ"ÿœi{J:ž-mO4¹¤ðƒ€a–ƒÀX ¬Ï®»†‰@¯/(v Z:wþŽÆ ËΫ¨D«bš'q-[-Éî“ ­s÷wÓ†ë ÉSš/['öïïh=»×M“ÄÅ·qm*¥']!“– ײ”e Ê#–äu¦÷ð•ħ€•þëfó›²Ë{:ï•fg¸$ ZHÙäxã·ýï ¦Ó’“ååοïÃÓ?›JÇ™ñÊÐD-·Ýuú|ßÍŽcÀ³ Dò¹túy±»*Íw¯—2S‚B4ç°§ƒ^²žƱfe_œ2îuYòaí×ÙA¡¹' H¬®(P¶é§§ôÛÅÎV‰ŒmÂ39‰qžŠ¶)»À×Ks²¬{ÿ„Ú&æ%ç~"„³Äö*ýOña¶45Ä÷z¦P0öøSš~6-Ýë1.î=Ì>ìÎýW)‡›½²ônöaJ×äeåÀÚ,r wBUƒTóï×·¯ï]››|}3^29v ¯[èù]„Âë°XböémKÇuX˧€˜é•ŒøöÖ8^}r¸…’kb?ËoLŸ"q+Ñ{ú9Ö\ÇóÚ/åïßξ`ïB¥‹>ÁS¢@$Ž~ràq§ß#iµ]¿êÊÏNÞT|Åõ‰‡Ï]ÒÎL§fÍŸùý? ëÛÿ“صî]&?Ÿ$öÝÑÞ ‚]Ð)…¯³ pØA'Ù:C ¼RY°ßŸ&ü«ïŒë*z¶»Ø3Œm!MH}fç_í;“NÀšÅåb`ŸÀÙ¸{ÿœö§ùŒË¶Äõ7…Ʀ¾úñH›ôûM†Lų¯ÃÖ±$èoSZþ^RÎÚņ¦égv”r`“A?Q sLòÉ–Ù׿q ÃIºÊ#Ÿ`7‘væ÷Ôï'˜f™aÀmÚO"V¹£Ï‚Ç€›<ÿ5oÑdeÒé7ãÆàÞÖó›p®Ä6ÛÕ‡™¿Ø‡³âúùãÝé_¯‡Ä a‘®c›læ˜øâ稯#Ò‹›ÛÉv,cLkaà×:=hÉq½‡Úm SŠ0ç!”³\ùmˆóïõ @ýìô[ Ì“œe@rö¾Hžý ÊŸé@ÝËa^ö†âf‡€VÞ„Òˆ™ý{³N-ULýªnB×Éw³xÝÁÜ?ñ響ÿó0¬»ìùŸôŸÌ> {VtY³1yOHhÉkå_n>hw›ŒÝ=ME‚”fWó À2`=_w@Çú®yV°ëbÙ,ëºDØAg9‹ks†îµ`°÷Ž{ùÉùg7a¸ öw_÷OT¸Òžõ5þîçã«_—¼›¾È‚…Õ>þ»Xy­¿ï5ëXåVâä™Çï\„‰öx¡Ú„wyÞÙמµÑÛ—ž½§«Õ&ÿ8ë7¹þgñn"Æ´­ûET`zÌNz»O °¢ %°ÙE×N<·g¢B±}Ð=û©÷ð:i<”„^åM=õÐlìuˆ°ÿj&.§¤ÊØÔ•kws·±§ëßÿ‰Ýr81`Ó‡ÿ4%+Ž;ãõëŽË$WäÌŒ¤Äv]J½‹dºãë±Y»ß~Õ<Âüø=[à+iÎð›ê•à~ˆ¤î¬×_eÀ>aý›ÒXí?ÃúÆî=Nó]?hírÃÊôüœ}ø}ñr¾©kǬßËuK<9CsžÌÊ¥ñ%{Ò<˜l$ÊÒ‚§:«m8ðŒ…ëÆdGyÛÒôÌÚ¿NTì` w&/ûÿìf‡oo¥Œ<#ܧÁœAÃâ÷®§“`×\óP»ã~gu›ä[æÄƒ?‰ä:Ô¾; xæ‚?§uÂÏçó„gLýgs†´ä^Îu»ÃxäcÉÇüîõCòÞ=¯Òô¬Ã,S}L´°°’=W’ý˜ `:‹¦ó=câUhKtLz Îv‚ÝÆÈïS.={ß%³Ì÷ú]kͽÝÖ¦; “¸z%ML€ìöókBøö«º}~(óå`yÉ#Ê¥ãÙSqÏì'y˜÷}}Ù`õÝd'lÕñîœzÛâ–#›(¾¶K'üì’}økßžt>Jb'†s¹wž`}Ê%àú$cÓÔ7aÉE‘ËB-$è=ÎW£’~>)öÜpPlýÕ’‚{v÷ý)ÛqölW»Ò&" î‹ûþ½ËÙ¹'iDZVœ’¿NÓZ§dãgùu+-f¥ÎÐæ’µ»\ÛÈ{Ëd£ÏFÚq ±S)\ýòM^2-ÇßȆï.àºþ–qïÞyM-`±çd€/ •\‡ílË8xú>()H2X|%~_8¸ûÎEÞ¶;ëfü›ÆC¦ø$ÖºuB^þ"VÃi¶`cÐT¬“*C‚ ßÉ_ÍŠ™}zVðܶkòäÝT¾±ókykÉQÞGñãíc¢NÚbÞ¾-ñ¨àÅÈcÞkë÷® 褻ï~ÒÄ}ßb¯ô wÙ0—]N^ŸwñS9q·‹o~í]ÿOÁëÏusêÎ3¯¡‰¿Ðçà~R.vÂ]}z|yxuÉ»I>…i"g£O‹/ î]8+ KMÕà5ÇMBI:;·\Ü ïìÖ⸮ԧÏ\ÇYF|-höàyˆ¡¿~Rn²Iè…h²éô±=!üôì^±.fØ¿wætrŽb‰øJà9æùÉÒÑwyÙ„åñCàNŸ@Çu9䋘ó¨3ÙCj¶€SgÚdrûâÓBw—w{0Vvpy‘yö$"»â¸À Ü·_¾ ž]¤ßÉ‚!y…qïó³,Oœ~W™isûß?þñØ~õ¸‰Í_´ñ%;Ù¶ŽÚÈ£[¿‹ˆºv5ÜùH&Vñ®qûð‹ïg!Äße¨ÍÇÚztãqÖ/ÝúI‹¢'Òz¬od¿ß¬}®!µ·óëÆsü¢óö<€{øN©l£¨wýjJxÙYá-ß)¼ìôÏ#·&F‡¦î$«M Ñ&,éÆÖË€y1ñòúL †¹‰ç'Ú€Ï|?æ>[û…PßÚio¦÷ô @ž ¼7÷tÒ…¬'Ó¶ûÅåV¦²Ÿ æ‚þBv òóTä‘”¸Ñž;m—ÌìóîðFK÷G+©’Š`½BGª§¬¾ðIŠOu&äÉt„÷6DúTšq¥ùÝÚT8¸˜tb4¢L K}âDþ1ÓpŸ>ŠDîý§N›¯ðÞL¢Qr°1ØMý|úÉjêìyV“<@ úé(o ”!—9©æ‘Ûu'1Ñ @ÙíèÀ7ÙM:{ýRžZ땵MXñÔ={ìOÒ¨Ö÷®ÏR¦Ì-œ¶¤ûý9áJÅIÛij—®µHy4B=É×Γy¢îú'f?Gbš&¿Ù¨Ï”w!{÷oésßäºÎ>3ý³ó~›9¸Ï,>çLýÏCµ&Kèt¦ŸÊHžoaïäwþ®p½òûxºÎ ¤uyr·'c¿®æ¹žx`#Ñdš¢Ä80=åØ5Èüx¶á(ú$)÷Õ >ºœîúŠÍL–ÙQíªHí!G"º4šlÉäó“=úîd’gAÁ§\v]üí¤ú° °À÷ ú¯Ð?ùÄÛ©Æ>îÌJbÃщIÉ"…wgòûIõ1K‚Wƒû³MüÞMŸMÏ3³ÿªv°¯Žé4É ÅÎ?Ùkÿ ®ç¬õæ½MèJ”Tú,inö„s™^s¡c>ïÞüŽsÜ„Úë·°ç|ú“½©9/vè÷ú˜Rå`,O!\T$R».uúM%⧾Πþ€òöØUZëP;vØzð€p|ífÚ9±³NÐÏN?yíæŸ‡•××í¦ßÉ$̱ó¯H²'–4¦ ‘¹nÞ?): 3ˆqZ¤÷ð"îÊÏnk{r}lš¶Ò„®ãO9.ÍŽIž«xbãí¶~á>ƒrÌ(u¬OO[´á ûýÉ›ÒËÌr±}Roêñ÷Nÿ$ðkÒïOÔ4 ˜‹ƒŸ~9ëçœOÌF;ÐO|úgógë“Ô /¦‰¯ÿîL¹ú«^Ù‘=›žžŸà~ý¢‰…¨fòâgSÈ”¯<öq§Ihçó‹‰i Êvž­? èðf¦>ï,¨£;;…Ť\ºÏÝöY²äw™žÛìÚ(ûR3ï<ãºCšKS—"¼¿pjDˆïÞ¿Öo?³0üïÑ„M^4DÄÄclí%/Þ͉—ØÑçsÚŠ³å¼û4ßD[bÙÙi9fØ@÷”®§]€&…е Ncp1`%§£ÐìèÝ{ÎpÿûpyuŽÚ‘ éów¼‡ =; ƒi&/4¬) 7¹YÍA·|ä,e­yÄÔÝ'°æw9.Ê0—†•œQØÓÆÀšì7^(½MèÖïî «@fü[öÊ_aü,M¾zø¤þ=/;;νÄÙp¼Ù¬_½ègtèO7ßÈyÃN‰¹‰œ ’<1Éaçñ[=r«çøöЮnà˜Àbú-óh°g=øŸrå¿K@úÙîþ3ï »ö“í&•]÷éŽÒÖŒkY0V)Að.ÓL¥µyÕIŽŸDü,GÒs»ët!o Sã+†ø.<ìäß{öx<Š„S8×Y¤{@ü]FïúÍÁZ+šÈ0Üñ´¤t/Ù°•ÔöÔ“­Xrœ5M…ë@Qrwß7—‘'/ˆ»Ø ×_ÙÅçz¦î ¿q=_{ÓxHÝqäOHn7O*v²é½ŸOrà1”O,ÿ$íe!Dé9g;j'ð‰|ÐãcßTHì™8—Ï…¹sPÞw—Õ&ž ›¿÷ò'±_?Õÿþ)«Í»©ºŸ‹Œ? K¢jƒ•yjo×iH¹èR`„’-c*¿±—,sÂÆ5C 'ÅúW¸{&`kg!S-)f#Ãí sÁÙÎìð+|$ø{¥ž_—ë[XfðSLæYwœµ|+ü낹Ò~á„'#&âe·@˜\Ó:AnWpÇ¡·÷¦ûiðÊ=›,×$u;•Ïj,íMML6^–JŒaŸ~£¹ûéÚ¸œpÙP›†4æèûø·ü79ðP¼ËçîÖÛá§Ó‡ Ùw6¦ßûž6¥ÒüÆ ½ç¾;Ú¤Ùc6ú\+ç€'w‚5b /%ëÇìb¡öy„iÅÃÔÝ‹õ½IäÄêö ‹b†À=}—Ë Ko½|ûí¤Ž>å¿ýIze~ÑzKòÄv4Ì®‹¿§íJ£ëœ¥ëZÉì$õ,^ýôÈ¡âw䇫g—BNH8sêE§Ä$¸?I è><“iÃÝžúïiëù¬¸ë½ó,÷÷™øø®“OßûžYi YE㯫˜ž”'pM’ÏORæ˜Râð¾]pU¤ÀT;Ù»H0ëÝüoºÑ Æ ç{úUþkäÜwRD,mdÿ˜ ’ +K–×è>?ÉɇWTî»ÝQ÷ýH`ýÙ4Ò4¡N¢>*’|Ö¯8g8ÖÜw§‰Ùž‡c, H›ó/ˆ(hûaân7ÿ *àgmëÉu¶é¤{êgöüü‹eyܲ´àY°–lúMŸtME ÒJn?¦6Ù~Ôù Ü2ë¿hkèJ‘½s5yð·Œå$ßäŽyÉyy+Yì,(0J~AÝð1±Ùé÷rH²ð”ÀÔ·sù/^ÝÕGŸ'˜ƒÃÈÅíÀ]ÎâÁ1aI|ÃÒ…c»dÖÖ{ödõ%e…/™\t<ر`σ··Ä½ë ’:—“¿&ÀÔ 3gX½Q¥Ày¦Sתwîïòì;wßpÿn×ùgË€gÞ>ÏèFϤÿ‚æÔß?Ùƒ;Oså߉,­ÙMÑv’w–ÉS+•Ü<\Àg^›„’Rr¥ðuúP"Ú¼r}c"º³ÍÁ®0É!ëÚøŠý:îûdÿ³$ WØoa4À ø0ù‡ÑcžQ$!¯)OïRVZ†®§RÏLçÈž6MÂc¼X±-»³`I©JW*÷,ûßôdß©½¶õLØÀ^…Öv·¸yšRiù Ázê¦^Ÿò>Š+‰t}•\z2ÄßkΤc=ù‹Léñ;Ó|à7üL@Oþ_ïðÁw®ƒ’ ¡ªc½×¿Ö¢C³§µú„éäÐÛ{Ø=cfÇþW=8Šbž\êO“ôbâ§< ì 䎻ô„éIeoO¤õXïä°ÕâfÂ}Ÿ–V>$#T«z¢‚ß™œ|L¬bï'@¢÷tè?KÛÝËm}ó`>;–ì‹„nÙ):öÞé–Ž)ð„´3'öÜõéOPõ™÷öœ?÷àæ ô, ø“îþ¤<ëÔ…î×”æc$  §iU¸§¦w9û³;•")2Ìå® 0àóëÉ’Òó”ÀëÛÍ”;&ÌP–³‹LÃ~0í×uxÝã(Mø±‹ÿBîy'r¦¥±É.Ó×víÎþÜ` ]Q¹†&/9ÌË)tCzõþ÷ZÃÍ3Dfïùè‹óAQ/÷¯™D&þ+qQšÑÂzp}삟2‰Ý›?3éíyoFþî;Á]X^[ZÊH^þ& yBÞ¿%Ë_g—ߣ‹Ï€àž’ F$COvÍ-í%L\ÌeÅT¦É•ß@ÓÖŸ~îpŠÄ_'…ɤ®?OƒsúÝ•°Äõ¤T×θìÊÓLûDàqï?UóÉ;Ÿ“™”Lœæ-üíÉŽ3ÍU¸†ì øHæ¥ÓÜP“|Òóh’ùæÄâ°ûó¤yò]éßîÓHA ú'w‹sæ@ÿŠTÚ»ý“ô€Ÿ¢ý|>+èn$g$ÇíºòWW+'˜¦®|?_\ÊòuƒòÂܳwºªaz÷ïJ©ý“‚œ$Ð{üü—Äóþ†ÐŸ}åuý$)ˆ¦ŸžHÛ}ΑwK{¹&¾NS¶ÚÁ*ˆ¤-I¢óž×û9M.Í„-ä5¿ß_›´²ëozó2¸ø~}†®Úþ›û—S »²%j ß'üÄ6¬4Sßýuw¾]*XóÀ÷Ÿ—¼§±Àð’ù¯)7ly'õ‚Q _ÅÊ|ÿúÞ/ƒ$²ÁÎÞ>Çøùdf™ãNÊÇ*Lª1ëËNöìy3NÜ0Ìr‚`úç8*Ë ßND<ˆI‰±H—ãN¾ŸëìB…kë‘™³ôÖ{xBr/PBÍmëú›pŸßh=þ™äs(ïd¸G©`·6·×~ºá®ÒY¼¾I¸c”( ýõäÑs"³Õ3q“C‡ì=£wÆäI„÷ßÿzôO2eï‚þgÆ Ïb¿~E2@‡)ý·Lô)„(Ÿ†\>æûQw÷{*—ï2r2HLë‰;Ð.— MÜ¿ï}}“LSôôÒÆ , Lø¡|–WKvß_Ô_z¿_! „í'“Tݪ[Wl+۫Ǫ†ž£Ü}™Òܵ' rEJ…ëY—²‰sœ÷¸CÙvìŒ+7ÝÖ“¦¸ØÔ•”¶/}¿N–ßÄI-I ã€u'£„Ó~>ïÂ\wÄ ² ômÖéKfÝ¿7û?õìMò±@ÙÞD^š¿ýˇËú—É»Iîs¾¬~ÿaú¹^_Ž?þñØÙ;NXøîú;¬íܺ=üS ”½ç¹OiêÊrŽ"oã£ëý’¹§œõ)š—$O›uçæÕ©øa1ìAý }uR¡•<ø-ÕµÝ*¿…Sšdfúeù£=}Yì Ï¿Z ``z.®]sÃkoÈ[ éC>ì’=¥  6µC-»éöìgØ5½ö-#v!Á8³d ê «éI F§ÜÜTHø=&çô„Ý”×›Ö0éLòY[éU²^¼%×í ¸Ÿˆt}ƒI¬å~›éñ1Ý3uú;›ß‰¿=ä+‡:Ðï`t^ü”X6½gm‡yJî¿þ²GO¸»i25âŽH±9P%Q,ÿÚ©_ Ä÷D‹ Ñ"A®t.Oò¹ÓuÃ%ý…æ"àÔçNa©sìþ1 €uÍ\Ï×µtýõ<¸rHK0Ä~të~MÊŠ]ü ÷Ó¯óv3±*‹È¯×áÞÚèB¨©AÃw&­‚K8cýFh$i[*j&:¡$©ÂtmbÛy¦rÄ5¹M°ÑÈÙÅç …™‡ëï:ÕžXkŸÊ ÝAÈsƒ]Ip-ÏR†qŠèú2uÇ\†þvò!3lý•³‚õW»Ë¿:èûVÿË‹ˆçî7»ÓL‹+Ô$KeßÚñd³± ¡$=ˆÈª·0× ž`—Ó½/ÞÝî¹æ¢½¶Éu¿¤œDæqI“Ì@]Ƹ$K6£|¿]{éjl/mû@Ï<û÷ Qw%&É;èOð=Ñ~zGßw›&}â¹ûõÏöÑ'7æÞËO7ìÿ n&xw¶ÓÅ»)¨+iuÒ; Syy×ܶÒsJ[füïIA=u;‘yÒrq(€ºëoP'S BÚ#èÌû?&ÿ¼{šíŽï(Ž#©9, Òõy7kÚ_“{yÙ'±ï²/ìduYî´;üˆõ’ù²»±$¡'ûÐdœ“­àÔ^3)Œèhš’‚J“‰§5œ4è´Ï=­cù8›{î}uènd Ï’û¾õîÜ»$H!bfð³¤ÙýºƒŽÅéÍú¶î"Eçãuåý'ûÎ×Êü?Bv¸UÐ燯$ج_èÙ ê LÝ·îÿ¾ʀëlÁ nþvNÜ­'½‡§ÖÚ‘< ØMan"×~A¬Ñ×Á“Ös .!m¥Çf‰ ˜–@BW*rýÉ=—²G§*¹@¸'”nçý¶áþåm6LÜè9Õ'A@º¦LXÝ=D)$8Kkø ƒâ\t×ÉgΞÿ)yñ'Éý»æÅÞdjÄãÇ}wÓr|ñSý JÇO/ŒSêóä•YöÅÅøWv÷“’a®š4Sºmšx˜ød‘ãÆìÚ›–¹ íºÎ(ü%Ðg"»üíë¨öÄ7Åg·ç42ΆƒWFi%Ïé=¢“ÀP7íäœî¾2ùÞ9HíâàÎàÿR^|>ÇxVMf2“½iOýdG¸óõß{öO®æö¸©`žôû]0§svR´t‡xwú ÓÔÑ@YìÐóuD¦ô_ÛD’äÙI8„›ëþîWˆ( ¥¹›S„³¶­<ÿÆï·C‚Ñù¸z¯¿J­™tü$2^²mèŽOžHs‘ØÃ¶,¡¿û×_×ëëS쳓MB2 6*7ØÐ|ŧöÄ Ä*4q!B`´ë˘åjtN¼A!-îå»CojÍY ›ä¶ûÀ,—O© âûëIüÄÇÚwkwrTʺÜÅûî&ÙÀôÜÑ¿NTvlþë¼…Ÿ²lšƒmCyéö^Nqæ‡$Ÿ”ì˜Xþ=Z+1þ;éeÂÝŸq&Ap╦þýd“;{’]&/ÏîòÑÈûÕÖŸFïÜÖóg…¹wK©y™ŽŠdbë3ź™Œqý7Ã}Љsiv±ûE)8lOêÛ9íÿšÊo%“ïæþ¦80ûÃð±`eêñ›C´°ãýß­ž¬Rc“Ñ07 ‘“Tz’Í#á<ïÝ›ÀNZ'$f6“Žöäîq?Îcf°à éX/ÿ«)¤I#k¥äZöæmÏj¶Õ˜ÖLò_vý]˜©±ÞiG|ÏÜ?— ×ÀD2éIªñ–t‘`b?•HV\©;.*,8¶&áë ÜÍÁPrïY eœG2¥ä×^¿äÙ'ù©;Í ”¯%$‡þÔõg`8;ÊdðSÎËå³s¿6:Ýj©p'³Íùs„Ýö 2L÷oag§u…é$d›‹ÏnýY½/±œfÐé=fù§òcmaJxù~þ.êÙ“}§o¥©¯™ºûv/I|åd,8!ÉL`_‚ÅéõN¹éeÉü¯rÅ]‡ì9iç}׈ó.yi®CèâÝϽz&i£)Ø(tîó溄D?KÉóóËïì –ÉTdø•Á½''ÏÏDòË¿’Ù¿ž¯«"©;,x-u?Þ>3d¼\€¾ñÀBv ¡GPr¯÷¯ð<$_Ûß§.LHbókãDûäN?÷KÒr0iÁŠ ¶qÝõ§ÍºÝú mIì!×ßПd-·> åÝ ]¯¿Á~cן8„Ë\¿‚Ó~bGkQ'I9/‹‡…79Š–¯ç‡W×Ç,üÄÝçëœÆpË;G9i8Ÿù"Xç¸gÇÉ;Š~Š?rýìW}E%n«ÆµÃ—¹ƒi„0Ú•ÝÄàÚfRo'Ÿ˜úÂÏÒ“‡…Ë‹wYx81 h¦è«W¶ñ‘K`Oo%Î7ü×ýÝÝ?kðì^“ˆÖÓ/²¬‡¿Åáð”Js°E o)ð%ó%«>w:»@v"%|ÖÉžôz;E§¯áÄÅâ€ñyÎÝn÷3püì»:Ð|F šü®g¿¨'õN¨k¢ŽÓOSbn/:©©›ÉvÜ®]qÏÞÅÏ<Œ/Í(Îדc›'ÂOò®IiÁþךð1qÊ&eй®·”“ @@“B—Öu›Ë÷÷ö9F'dîâº|î©hsÊâ¤A`%‰ ¦,Sá`‰6ګĺ28ü/Á¢]nÜÝ_ˆ‘ 8¶áÌPpëÖmD÷õ[L‡æ_×ɼ ö7òöï'dzggóУ¯O<Ó§Éè‹pœ´æÎÒœ½[ÿ9ÌË?×ÊÉ\(k´»w¾)7ì—Û>ñõ ²)öÁ”æÌ«ãì"9Ñ’‹æ`‹ÔùæÚ²65ˆ>BžNìä°Á&És»?RÏ?NÖ¢öP²TzâùC¡éOì[0ìbv“‡†‡¿ưû”anþSàoÎàÏ¢Ïý\"ŸÝ2ï‚ûßçSŸ”.szOOGîÀ}>K™“Ó’m¢–%±xÒ LŽÿºîÈÔ ›NþéçãħÈ0Ž…µ»BkO—Jf†økÉ„ŒÉÁÌT‡‚b’Þ“Bë¯ëÚK·ºþÛ9ÀËY+\·”Ë낇:MTÒVMT·g.þýÚè)ïJüÕVYx›ïBW¯)Lަ"ô' ¤qû÷l}:¹ˆÈÇnФï¦üR€Ò[ßxÛ:èLœZLïË®4¡ÄÝ·B yðÛBÔëÓ#½üo‚øŽ÷ú³eç!¾±¿Cžù|Xk…^‡Ž=ûµ‹ƒ~:üª²ëO+I;¸Ý ?„ï=a.ÁwV½.Z‰eàËoqé’ÖdžV©H žPØÜzu§Ÿ"f§'ꎋÂýäá“à>Ë{ó9F¼…¤[o„†øY¶{ýkŠ+šs¦;°›~z=ÞÝŸŒ­'®ê©{7„ËÜÙO(=Ï(C©ø™ï‹îþÑ)^ýH˜§4ôÂf"@ï½í¹ç³B÷§¦:}ªŽR‹˜']ÿ16‘2óš³£²ɯÉÀ`hBIƒé]üCJOÊ6ˆž³bðêþGj¥Æîô'¸?·að ªË‚'ÇjºR¥°9«G¸ýYö°ëÑ],®øŠá>‘ j2×Þ¡» ï¶¶qË´¿‡€÷tƒ~¾‡X‘ sâÝkgaÀþ}’ö&±ïËAè˜0ìÌ”¡‰ßš†¹If;‡§´œåÓT$I‡ùÙyf!/÷/×й¼©C@u?/|ÎzLß§¿yàô1ñ$Uôn½w‹çÑK“Øšq5‘öÎ'Ïd²¿)hÞ›Ÿ®ú¾›8ÕôÙÂ'{gbjé^i_þÝR¶wßï ¬çŒÿ~þvg$Ÿgо„°¦‚ëè(×n£O]™üÃÉz?A?á¦v81X¯qΔ_?w3‘âÔeøÎ«:ÆT*4oôk¯!¾ËÚN4ò/â\¿Î´+]nì&™/A*…¼”ù²ßOïd ’(¾dC°goÐD‡NÌt—s Á•„ÿvg¾Ó ÞÁgY¼»÷ìwfpŸØ®Ô^C_¨í̶R°gó³g¿#%…À÷YyÚ@µ8í)mä”2á’sϦ©7ºûý’¦0)~…ù]¬SYðPÏšûµ)m"'†}ÚVétÝ•^MÃ`9o à˜8ü˜ ÄešjÅmKšÅjÉ{gå鱯MýÞ ø \œæ;I·¸FL²$Ózâi‡‰wÝQÒ뉸r¬›ÿ=q™˜ŸÞµíÌþôIúò\§ÑÕ&'œ Ƚî%Á߉ŽÒ›~z·õYù”R8æÅmzO·7å;×,{ ]]k’–ñÉÔ¦™~%€òAj) *gÔqà;ù° qçÞ%ÐùªN¥}VCrjêç¯Ï¦É5ÇS2f/¤®?÷×zÛÓÁ^;x5\¡Ö=f¢ã¶GS ¯ûôë9 ÒÆÄ9I鮿a±Yïtõ!5ˆðÝNùÎÁõò-ᵨ5-ÖÄRÎkñ®K‚¿ÁãË=ø±‡e»ûöç¹VI¼Nc²Çœ!—4æ–D¬lç’º;M‡ÈîóÐY»yÁÊTé&˜Ëþ7OÊ\¨"ðølíNž6ýìNDg‹Ò= ÷ôãü]GÉ‘†tž?˜Päí–ì>ÈÏÿ ;M±ƒebO~%c¾»Üå~³Ÿ÷Dç q&”ƒîWs÷÷òygϧ¿&w·»?é§¢hB™xä?›?L$¿“õL%Yâ§c/1ž{a9é÷OÈoÏdî]QÓ—œ‡îÊý{á‘„Ô™@umOœ%­ûŽxwý7ïŸ$»ý, np* vÞÿáÇß•bmTš €”2ák~"°¹°¼{F'?Ÿ$MžüK•§ÜkëýÆZD\£ÑUvÄ<Ä*dü;%)1ûM¥öÄ€9K. X–ìm÷½vKxMÝIN;.’$÷U$8U—IËv)bŒºþúµsé¹Jx)ó¥`—,±eôz˜dÓO¾ó<Îsà×~>ÀêÊ\|:óìúýáÇ´'ÂÚR·ÎuX‡“bÏÐïaï5qŽË—½öå#ùî§’Àž?I;ÓÀô'ïN¼z¸g»ÓQši°`[G,}Ø7r¯kgYxýÝac’é8a6Oz¢ ô»{—äÐáZòšÐ™Ò­ñ.”Ÿ»ÝÏuÚÏ¥ ÆËì}ý‰zÂ3‰õd¯ýónú¤dê%#Òæ…Á3XêéN¨A©Èïó¥nšHVýªeËK¾3õûI•¤½&‰Äž´ÙçŽý¢ßàú,Ë ÷ïÝÐ1cÞSÜ”;¡>~bõ›&o)“ÁÖ¥ž¬­G•½ü°ä¤^‚Wr.ˆ=زtŸ“ãÔè´oOBin`Rq(ÀM ÜŽþöÛY¨˜åÐYÔ{õø7ÄwyBòÂ% yÿ_ îRŸS{÷’\އ’N`WM^;úY?p]ŽS„w)€‡zšBaÖ¯kÓÛÖÓp߇šç>”ÝãO4˜4Hpœ”žN¦ÐÐ×6š6-uߣ·”Žì5?7•(eñ&[.ÿ›.")¯—ü~º>›Ìã›D÷è^ãäÐí'BÕ -¡S &|ý‰ýÜ|­&$™‰Á¥Çå öÍM-ïÒ“&éII02›ÛžÎ™úw§=]ø;OÌ[»Þ%Sõ‰GJMNÛ¼ÛƒNøý½°™§ û=;iïUÔÉB©gÜsÝÑ·ØÔpßòÓ”òë’€Üc íâ£wýS:{w9›ÖÎï<(p;…Õ> :e3§ýÂíÏ­Ä`çâH{mëÉ|$ÒŒÙÑ·s Ž}x̆0vâÝœ¥á¾ÍHˆh6š€u"ÿðAâa½v)äu./¿Å’ÜwkxÎðû¿²“ÓF;µ÷jÊÉ^~÷믹‹]&דK>KOŽ„?nV`\þÚÜŽ»J´– q¦ès€Ät÷_;Ÿ¾sôYaSá`ëOw*ÎÆ¦Ç¯H§œ×„¥‘‹ wú“­§ C½e\$¤Þ?¹}ëx s¿‡Åéö°ë÷· Î4‚·)[¿ÁOxÕ“%tèÖ»Î1 ðšðã?‰Íú$âj"ÿ‹bç pB¶é^õÂ\[2O‡­óºNTK’Ç °~fÒz·´èeØ]G Ém矦¨M&ÍPïî7Nºíp3A¿Çž3œðK{׿^² T2øw¹‰ãë2eöùÕ½¤ærsOÛ’8Û1^Ü/ll‘FE£Õ¬Þ܃ȅ¾ØÛ&1Ägk²ß£Ý6µC¿Ó¼„³ÓàµýºÐE¢ÇìºþÁæƒþÕÕǯ33˜¥BêÖ³ØpÂRáLº®É—Y\Pî0½C= Cïv:'4'¿'õþ'„»ÌÚg!bw‰R“ ´‰½fýw»þ}¿hν€úïM.æ“IÈçÖ¨wÅâÍÆ|ò0qjòºeJÏ~O™‰ž€¾o‚×~ChNˆÿOáá?ý‰UøÉг·oºqçÄ^vríí€.¶ã>×ÖIÉN5¶eêDQùŠ£ú~òB8tëgŸ´d3Rî[Šï¬Ï¯É¾ž!؉q•"]Ú;é²³øÙÙzºÿ½ MæÙ±ù™€Ãm) æžZ“´¾ÎZ¦ôì9ô;QoãëgFþõ³ûú³^7®Ïn&p<ßý®+MÈìü3ïüèL;œ+uÇíoyŠí2íÞCBŽó‰¹Ìµ¨‘†eÈà¯N³‹9éu[õQ]ò8J¤Î"¬+pGßÙ„þô‰"359÷÷DÌÝ{®F]昄bÖw¾ï<+>˜Ðgá\H7RúY'þîâ2‘Þ¥M £¿=þ.éNûk’¿»;ª÷¦‡=:‰by¦ô"'9ütz‰a݈‹Ï´&Z…^ÜRÈÞ÷‘÷Hâú¯%;'Øý~2þ»ð—ýf'éú¯äš'é0žFN[·evî¿vГÚáY.ï¤øOM‡ýËàa’ªƒÕ¥Š¾vD\³žú'pïb€te'%sÏúžM»~–hÄ ?xÙ5ß9¸îï¦×âÛ–åD*?ºð÷$ä5Ÿ¾CmöÎÍãß9ðì§ùßcÉ–³ä°ü—kBJ Ó–¸„¾@ï³êùWÊ4ÉÂ'ïm=çd€ïáHÈ– &ºð0ò -9䤘­tây^aU@wìI¶›™¨ó^ l‘4K2Î[Ö)AПÙg~ÿµ–b‰z×<Á£»ý× ÓzÒAŸ¸JO>5!ÿLÜÖ'fÝÆô®—ÿ|&0‰ëEBçëÏCÄ&°2ÉL'%á¾Á¥E¥ýˆM!GsKÖîôìxèP¾ç%žë1Ñ”_7‘†]yB¾b1»ò†þ^ª[vþÖé?{ò\{üî¾›tvÒ½Ö….!vRÝV¤>ýN^|]ç]VÀ>–b§C¸ÆRðà^‡Óv9ÀJÏY$ÖÓº”D#ž0œ8¯ u¸—GÍúlœš¿˜úW¿È?î„Úü”O<Ò–ÎVªßK`õï<3èß“¬v„¨# ïY[~뢹ž÷`_vˆ™z6 BÍÉ(ω4sŸ´Îsh{ד$Ášä:ß 0Ϩp?ûÎAÿ¼$»û{'zŒ X™§ww vëçY§Ÿy:àžˆÅû7ö²á®’¤;ºÌ÷EÏ I9v‰IÿèS›¼}Ø}7ן4[‚ÚÄ“Í> ÁvéIùë|%o½ëT6‘?oL8º+% ÓËß´+T,Ãl“ºó`¼ºÅóöÂ#”¨¶6ö0ž±`Ï\r´74ùúKÚ{À÷\¾vÍùËgí¿[ž,´›9\ÄIjœBǸä/rÜ Ð=8;W~Ôæé÷ ]]tøžðù«²üþ.Ú†®¥1À€>Çí—¶ã®ÁÔ„†»à°ïøÌMσ‰ã­õ©ÊMjJŠìõY§»‘üc±,‘u “Ê'a±…Î>ÿ>Es»OŸÇ^ÉBüuɈkÎ/LÖoÉÃýNw‰Ösg1vnwàvKÄ ÓzâÆ3ñð™ƒûÎÒþœ„“@ê„MÄÓÐÏÍ(çĤ»¾:'(Ói&þ0öOKHô6 s“àx˜ŸP¹,¦¼[¤¾ìœtW8ÎßEß÷^Mì C=™ OÈ$))–ÐßÄÇKÙÊÓ^þÌô]ÏÍGHÖ–gèÍ.H¨IÑioéHðñßž=Û¡ïï–[VMðau¥©àv…g¿Ÿ`”ÍGߋݴOôɡߒ_³$X ¬5wžÚé¼IâÌ-ÃwºˆJœ»wë@h‚_ÿò€ÌcwÙI§qž.—æ¢"õò½ç9ùúWàÞ“ìûËQ`Š¡vĘç\V×Rl±vÿ:˜Öµôè_Ûáª.à4€Zo+µ×÷¦PkF0Vƒp?y u‚ûI°‹'ÛóõSš/ žoØ Ì$"nÿ”ï˜w]ÿkÏ2¥<ÎÙü+Ã~³™ÀÖ®˜¸¦L^™€þ¹KçjßíåÏ ?óiÌ] é3ß›y6·ãLv„©ðHó«»RõÉQ÷IþnP×d&ð ôÿ›s/ I±1OüM)³Éès]ùœ&ÉÁ°›¯³ÍiÀº&»x°çŒYþ”öº‰ã’#1àûÖH…Ó]€´{®sÏgHÓ{ÖÖ£Kï†ÜÂÉ¿Ñåõ i´lz²A™Æ Öïøï­?IÏ®]TDƒõ|þKƒQ–œ±$Ðe§k¸ä܆ÔÇîç”À$™wRÚ+åÆ:[:In÷ÎcÉfÿsÍSr°Çˆég QÏ1®õ™î<ø~ý¿ÕÃà j Xãž—ÿ½¯É]³ÐÖyº™íP”d»iJz)›™šýõÛ}±Klþ”a™øý}œÜµ´êCùÉ­¢Ç0MàZ'&up9qŒéF‡Ð|BÒ˜Ì7î’|æBÞIQ7Ëw y ï]ÙqÏ帓* ½îjÒqb>ý“dèOŽF vÓœa²_xIÖŸv'[ï\¯ï2€¿l…ØßzAv>')ˆ×ÞäëoÊõ×u=çœ?¥Û÷ƹÅßÏç“ùؤ‹?i¬äàú°¨šsSªôYzÑíg×¾ö¡ O-í%kŸêD¶äœÅë9’ö&-" Žpu듽ù©éÓ?ñÈwb®sy×{ìë¿“ÿK΂CÁLFú2冻Ó^ûfðû xuпÿÊç;ÏŸ+M(ÓrÒó}¡ÂßE_.aÖ¦î˜à´ ­8–Àõ¡d4s«Z]@ZŸŸ÷È™qöy½*hÞDŽ ?ˆØFÓþB¦ßô”_Ÿ®»`²ƒÙß%¼~£:\PÁcϹ¼îZù–Ð=³ç—ìy÷}LçLýgîòw;Í.K&°û.Œ›tÑ&äo±^’u–|÷ñHp–ߨ½zz D*5S¨“‰jwõ'9Ðÿ®÷x6]éV‰wKÇ«7éîO&BwóäŒd‹-YÓ„Ó-^--'MŽþ¦ñùZ‚…§|N ïÙ˜û §™ƒK_á;ãßÒöIzÆÝI`ju•'0ýìúú3GÙÈи迅‘™ †øláÙù‡Ä]ê;êH¥BzÅëÀ(.vÐwà^ „æøz’Àî>I>ôùá{¸æ_»¤ÛÔé¿‚Î3afOÑq¿?½Ÿä3É Ž“´—1¶ìÌëpõø'¡ÈÓ®[!KÔ#–OÞª»iÉ~KZ{`õ5éfª¯Sq‘^ÈÃ#¸ç©Âº9…—õÐs*ðÞ¸³g§ÙËú)­_Ä:˜Ò±t‰|'ê¥öû¾þ]ÿòy§|ž·ÚûÁ{ÍÉë½ÈéÿŸ9&)wý×ïúî'Ùñ³P§np™:åsÚRšíØ7f’K:Ï'îµÉ1Ü;å½G>?êza0™LÊ€¾ÒïJ‰Â=°7’€u7odyp<7&9ü¸<0$uæ.YþìO³÷Léªýûɇ)*«7q&é+½ôíJ “QÓ¶¥Y*á¾#ÒÖöžd.¾B¸OÆ9¾úä;L2y*0³¿ÏR«KÎ.8`—ÝL³¹â1/Ù!Â}zð›VÄYMIPY×sjöà•$È|Ý”NGz¥³¦;k%!ï]^We¤r‹Âzg!³ÇÏvêN?¹·B!œe@ì‘îãfÛ/¤a?Cv}&#rÛXàKПºûœ˜`Ãç& ¹Ë>}òé§mh’ûõ¯wÖœW nsO—^¹÷¿7¥ç?„ßIí‚€“€“´·wèwŸrlõŽ»DñôÀ¶¡É7é]¡²Ÿ6dzÕ^4ÌÒ51¡³½ö“"žœ‡w¬×Éàé‹Ví/BÔABãÈ8].m‘v·?ú¹x÷Y'~øu·Óß»Psæz±uiò] ïœD‘|µŸl1eb]ßµpí¾=ÂiBFšðõ¹¨O&Ù¥wss½žk8çôwÒNïî÷ÇÜYhRÌË¡tœ$o~Ên÷fùâôûÚËþ=—“~,K%ƒ`ýÕýä)dœ]»çZ¥û¼D¿«;òwõÉIzPæ›ÓtVü{=è§“ûýœó3$ûT$ܯwRghÿEîD 3òù~?¡¿¡<íUÜ×·Oš 0ñ€p?g{Îp¥ñ³_¹Ó|íèw¿|CU‹Y_ øï“0uúù-=ö‹àÛe@š!pÉükÊ0•(õ]|p9üuÖ6¸À`¾îG±ÄeúT\¯ðäH¦O;ßû”›ÀwqÃz–|…£@ž$ëu÷õÝã牺¶’-;“ÃC¯qŒŽGáÉùd²;­â.¬ŸX‚ÞLÖÊ¿è.½ç“p®‰^gœßOs uO¢í~öóçIæqO{Ýû©oO7 õ¯›Ç=£õybÏ'²àgö²=ì)¥5÷c£g-Ï=dHõ1íñX†ª|§ç,lCÙ]}Ú•zü^븒#Ùäªu×Ò7k=¨Ëå“·${ÿkë±èmG‡œ²‡M¾€›qFnóY ¿‘ ÑåÈQθæÎÓ%¸·ùæ9®ËÀ}o¯Iáï ¸S]pЫè Ä÷pn°ÞóÕÁ:ëcîÚµˆÔuN€$5»Ýi» ú›˜Äezhe÷YkÎÒ’ÝÈ%“ßérÈÓ‰l¥z€ûõ‹ü½“´cÒ~(ûàáëz—§!5O0R}(¯™ÐoìËËe²戇¸}{Ø9 aiHœáp¬Éž“o<)»‘—]›»=ãîOÈ6¨õÞü„2ŸE¤5™Œ¿ûX|î$3gùwh~W:qëOð«+@æN;Ïæ6ó¤çy9:™œÌ}“æró$Ÿðõ»O‚æ½ËÞ?;)îæÏm@{阌\'êŽ]¸áq%$°vÜd!jü:|HòIÖálAÚB”kÎY‰I»@Æ}tc"Îõ«Á¼”ݵ™®œ~WINM=¹þÜžÞ¶ÆEÄö$œµ{¡ù„õÉåÏíEÚx$Ÿdnný¡5D#ìñ³×ÎÂ`ý5ùðX±Ãcû(.Ê|ÉÑàZÙ_èËÐp7¬1|¼zµšÌc:Š)1îñŽgÙUzäçuÛ'õ&¿–Ci%ZÅÄ&ü¤2ÆÞÿ¹ Ûod±êß~–,eë¯ëÀ]@ù|b|WÉ„à¬È ² Ä=PóÉL€nÇ}YysŒÅ‹—ï|enCöŠ,KpŸ#ìtSÜÝ8[Ïìݨ}ï ÔcÊì}߻ͷ±lFyUAt›Èg%Á¼‹Ö5ývÛ™¸“ÙîhÔ¡³I= ·ÓÒÜwïçtô&ê×|›ó¯ :OÀëÝ(®™4±é¼Kãùp?±ù¿ÿÙÙÇ gò¶ŸÁ ¸ îͳç+kÉlÓPÚ{Nð½’Š6aü'·~«Òùõ̵lwî\~ÚÜz]`Mêe¾JÛõûÙ˜¸‚ÿò®Í.¾ÃF› I{MB6C!ù Ò4<ùRz{¦ß][p&Ç'/¥"a-iÁvéITŸ¯¬¿Šhs:/ôÕ{Ç <¥ðÚÍ&Õ‘) ÚâWÒxƒß¿1‘j¬0MȺAš,Ä­Ç‘‹žZ™Q¨äN"%jÓ9Xû ±fež ž¡c†éëdx–½ó}wqOW¦pRÁ’c)ú×®R]Ï‚úpÙ)²ÍÌ>‡s5àÕe”‰2§ÖL<ã'´œ‰[Ë]»Òžÿz—Šs׿nzqŸÒL¤~±rbä÷9O‚à(׬³O~zÁöIŒ‘!o"êtðt× ó.ôŸ‘…&Û'É|'”'ÂÊ”’®oIl+äô=XÀ”ÿzÂO/ûÐ, ý]`œ‹+…)i½æVªNKI2Þªüœ{ð9U½ë6sß3× [y¿&y&Q}æÆßÆ,ù‡Ÿâ+Ézd½Næ=öæßÛ«‡ <åïNÔIc& _½OlÇžÄ×ßIu¯®ÿ»È­½‡}—«ºž9úüuW‰°{\Ï ç¥RØûü8¶ŒŸrLŸsVÐׇ{‡e€·ßŸBÄX`1Ÿ’óÖV%WÝz›s¥5 ïR…Íò^9ÇǨ‘eÀ:1Ö{˜«À'äzj£/ú©³Þÿ:‡Ú“Îè\Ü9¡ÙÜMÒM·¨‰Õã]/£^rüÅå®ÉéÄæ®o·µ½kž\üç{퓨µ÷= J¥ˆ¡êd┤®iNò9óÞ0:õO^¿+ÿ}& Þ ¸¯×+ç9¤^¾ÿíÑ„î'RŠ!8 *¡2/ˆª6þ•×|Rz šw@¿ýÆ»æ¿>æYhy¯¥B:¹ø3Ùöò¹ YDñ•7aßã·PÕ¢^~’!‡½Y$˜ÆsÆ-W6¿þS±aëOªm£éN¼é@Ä';ÞÿÖ[˜KDJ9ý!oëŽ'ŸBOZ™ÓÏå¸ÛÍ¿°î‚º®°˜†\ý\gÖ£ëStnIÌûÔéç6YK^ëé ®ÖÓÒ¼e’——P'Ò‘“ŒS޲“Ö¡ãCŸu952ûÍ×w Á¹E*çú@Í Š¼Oy Ù[ɹ‰Þc®¤ú»ÇÅ<õv²Àâ¹·z§ît0¸Ýw…Èt×Åhâ[ßuEç£wYð¤_>!/uÆpï¦û8I]wb“äD*='<8ýtâˆ?é OJ²‰ ¯U?#¥žñ³˜0t—:.ê’o=_7¨M@?IiYІ•ûü ZÐ¥Þ¥… HÿRÝ“mîÏóÌç'•gI5asOnN?’­ˆ;ýn×’Ðrάý~° Áác·B¾Óü~ÖÔ þuq(¶ë Ñ !øú¥$öð9]¹5œÚK#·!…¼»Bâª.Xïüštâwbß}ØÖÎËÿÚk§·ŒÉ?ü×ɾöß5hî ôs§ÿXŸÔ§O–Þn†øi ]üt:“‹ v×{ìªëÒ(uúÓ~OýxÑø:OãäÞã~ÿ:¸ÏD²EkÖ™¤íIúê÷sË$П ÝØg²ˆ- ¹>ñï¿ÛûŸÌrTÓ“OÍ}Ü;‡>BÏrzjfÚS“è®Iq’ I'ýòîÔÞc¶:«+&¾Oýß®v˜82õYÄ'¬è»üéI_ÿ®Aç\4Ü3(æÅÀœò4¤gÊâ^ºš¦OfÿSÅ÷O\h’3=û÷tõY×F[¦pFwôSPcâôOZ-Ÿd8x/ìxÿT ÙÉN$àë,œÖ¿d"p{&¿ÇäßÏÖÞzN› 6ibÝ`ÊÐMPÞ±¡ÉcmMOHZ^k{æÙ€Û}½îŽ¾Ã¼ìä³P 64wƒ§/ÌutG_±ÿõ߉é§!²ß™Ì:]Špi,’J!Átþºn£™ÖÍïIâ]ÓxÖ;]I[a$Gªy?&‡ÝdQº–¶#[eñ$aµíÁœýõ×ûY[ú»°ñÅÇ ܆/ êz¯âoZ’%Ðo®ç΃bï€>¡^¢%K¸ èŸÏžõÚç$»Ýúg¥ÑQDÌmîæÛÙcâªÔ%¶ó=bòL§7LŠÉ¬igï¦>Oºé.æÄ›gÒÞgÀ–ù¼ÜÐÃÞyÝ\ÕPìšóÚKN€¾ ©=õ9°óŒƒ/S·»+ Òd#ÙLfb=R-Õ,ðõƒeIrñ·¡“x—¤Ì×m8êÝõ§t•’|ø|fÞ¯‡­G ëi:Bf¿Å»‰ðc‹Oêè È€¾:g/£ƒÓOcM§óri9 ì(¨ïÅÒâ+…gböN?ë<ç<<§Ò^g þ®ÞYwÿ>¹éÛ‡¬zvÄmµ™“Àh$9.¶Òþ’êÁ‰‹¿ 7Ý^\u‚¯Áº“z­'t‘õ‡ì÷S½@üãD^¾B2õ úÙµ'!‹Ö§¾Ü­7uÄ=à”}›‹‡kIæ ½+σ‰Cºd Ú ?þÕ–)“bÔu|§m­¸þ„õvFJ'Ïú”cËR±+~Ú–O®J)ÛxR‹Ãú’Ä––ép4FæÙ:L]6P9ÐmdÓÑ»¶!5†þô-N†nîýì»{ˆÜ{ù½¿sþ¹ÚÆ¥([:þßI¾Ö]ÛwCçý0Û}¿<ï»wF–û @Wkœáõ{.oê…{ÏÚ£iÞyý„“ Ñ4»èEZ'óL`údÊñS¹î÷‰ÿ¯óοñ§ºHzGJa^éjyµ¤´sŽi?¼>ÓÊÓÞóôðYˆ¦ŸöòÏ~n­¤ù)(ßçé:i¸ï’É@ß‘gtF¢:±*’Ñ } X™½Ã~¿]ùWgèºsO‚±}ú“C õ_ùY§ ÐÓ5Ÿ°žÏ= ±¨—Ô ¶_Íéç2 çÚi]½z(QMþô‰xsæ—¼ù3¸¼¦Évùob¨“c–¶(|…±;å¦Ù˜Š“æ–¼$ÁnñrV±ûèöóɆ§ûý›BÓȉ|¹å½öuêRÚÂ’`½“§1Ox’ˆ’§/):»©Î•®Ær…~ï#Z¼YÈËq³å¼çþÊ• :§ßdÿ+Dv™‘€øÜ–ñÜß‹ÆÒ+Ö9L¸ÝóBeÎæŸ/­;¥ÞÞ$(ÍÄ›´}æ–©ó Ęԋº¾Ç{,ÑD|ôßl›0ªùžg¶žw ƒ»‚àg’T0'J%Ðß|R¼{ä;ä+ÉÚK—6 ÝŽ$‹=©Ò\×&ÕtYüähìz¤D+íF¨©ëo‡~K¥“åº9ý¬ä¯»÷ïF!{ù£oRqô.,N].Pž9B‰cñn²õ$ §WÏ®HØ6œþGÿ½ åŽÒ¨&ÝWÞ#–)Á×Ï î)Û%½'uÇwæžÇú›:bâMJ°Kš÷´=]Ìx6Òˆ²þ 𻀏³çíÄ1õæä½­‚€ž5ëÚS¬Œ97à‰Ä÷;¤š”3wú ÷ ú})4èO]ßž±¥ Ë|ûIö ï¢»lºgýÀ5dÞÓƒÎÓ¼ u6p÷š¸ ݵ=íVó’iRØL CÓú¤÷tåC"t%šÓœ©<)<ž9çÜñw©ô п+üý<àY_ÿîVHs_ÿzÔñ=¶ËäÕ õþ] ,Øê{÷‚‰¼$× F–®ŸótêIa9÷KóLÏO¼Å’'’i̼oõÙ'ý~C^çÿ°ñGO² éVàÉ' ¤uÂÏz¾<ˆXΞEÇo´ÎaÇÅ¿ŠqY8Ö“DŒô›{ÍÉ™6Tr¾lêú[\›’eý<±á“‡ý]ø›«eµö ¢M'£O¯ÉKÝwÈïqA•È9]RœJ‹4QIe‰ç»¬åv3\š%³úCý:1¾¡< žN¢±` Ks>øsq]þ8&ôûg ü Ý Ó;%CùëxÝc÷T`¤dÊ^„œoáï}fï¹þ–d¥—ºn“¼ä$˜›ûMºã„¨3YÎ]rTZÚd†@RÖDNÚ{ö“L€¹e*rîÒ`~Êqÿ§:ú)—÷ÓyÙp× Àd¹”òÛA?[3vòah&óvÑ,çåõ*]áû+òÞd231 NTŸ4KI½öû-ö¥œ—%AB ŒH#6 —ÿzNºŽ¡¿!;K*}º0 5ˆÆ. L² 7uýýε5Öo÷TÄrá]"ïAús§ÿÊ×§°Õ¬÷ÔñMv)ÄÁPÒ=éîÖŸÀ¨á5—ApŠÁrz{ööþgyc™iç½9À[•ëoÄÿ?ÐO3™TJÍË*ëFlnEË*&öqVàq!å2‹Ä®Àyb`§©ë€ÐŸ†e¾Ø¹Óoäw} ¼÷ ¿CÕÔ3^¯˜|bšPîš»hŸêfv¶¦IEŠ»¿ ^û§R3™!ÜMþļµKŠ'™=“xž)q7ò,éLž‘&å>7x&þ\zûI¿ÿsRÐ'éÂsˆ?WhLJ2^ßÌG÷©{ìp~Ë+<ïæõòŽ`·ìásõÏ™œ×s3Ö9ÈEHúžlús*Î’‰¤)öûMlfkÕNé×ÝœÆßÔøMh[«y§y^h¥l¤ëØu©[3Åj«äNCèon:Ù ŒO²«[ú–ÝDâzå·Z:#>'\åvÏqŽÛötÝïÖØä¢M'ï†Ü†ÆKl€[?˜ÞC lCO3ûÔ¦£¿]} èùΔ5df¿{ü)³ˆÖä4)±x·3þ-ÉåT„KcîáþzÿW2Çì_[v&ßúñ»AdϲMà¾w£Ù57ãŸe@Qq’¥f÷ r•œRü[øY+1,YNj~ŠƒNN«õ29»p¡â©ÅÙ{g­ÿAÝa½KŠñëðõ´„Ûð¬%8"áÎQ_ÇÅk¸.âì ñ—úýëRj£´Ùíê½Ð-eëfèý{’Á¨;gÉ„®GÒä×÷‚¶I¯.%JvuD/æƒä.Òõ}:18æiÂnê¯Ï}¢ºÏ„—Ü£Áº’¡s SY2ášÒïÿÄåæ.èã^®Ìç“Äâ¹õê\À®N ÈZhÛ½üí4Ï6Ù‚•,Ö=b-aÝÝ:¿ßW<“|Òùòlê• x¯!;úvòá'áö;"ô·¦Ñþ3¤ÝòÞMf?ŸÓœ4sëÍïw·Þ°Þ¤ [ÿ·—??åé¡?Û—‹•@Ë÷ì“$×ù»œØâÓåÄW"É8^ÁNö¦¹óÚÝß)¨í"QÓ~’Ì´ƒ~tƒxÖ£iâá×Óú»0ðóÌÓPÚÐ3Q}\6ØóÇ%ÞS‰ÒÚþ<*¥ºã{ ¶@eB³Ã)Î"ÝãÒ°N~þ ^”SyC—!n+vô×§laÆKÞzž:°=™ÓÍé=s¾µgÝS"ݸ²ï‚~B©pyŠ¢wÌø÷þ.Pî´¥´Ý&ÅFgÿ[ç«ÿ}ÏLèD N½¸›~–Ÿ¸ÚIjÜ|ùé?›}0ýÏ÷?·àü܈óY§ÿó‚ç®iì,åc}sÔálÊëý'=Üïçì×­~²ïÐ~N8OO;/¹pò\‚Y4É”ÔÔõ÷Öcù”ˆ=öó!Ð'»}=hÖiOÂzÃ}BðÔ›±ü(ŸÁdüóŽ"e1@}gvé™8÷'š—¹qï1˜¶ï¾éĬ풃M¢ßpJ`~ÀJýì_)q‡(‡>ú4ç2,öòS‡žKv¿œ=òIéÂuöÔ%M¬£§B€kbÁn"/¹qÂ@!KØyþ°ïæñFá/¹qŒ¨HAÖ¤ôpù êâïb_ÇÁt¡ïlÎÔ«6¨íaX‰%?a™wãÙ;_¿w÷M|òm8ÝÉ”µlºû#uRÐNu°W)t-A²OíþÉdÀãþ¤.˜€ò»åG§X¸äxGB›f÷dè¤Uèqcw}{žqÖ?ñ_ÿÄùçn&À<`¾V=º«Ï‚’¸<Õ½øOW!§ù¸ÎZe·ÙìpwºÑ$¢1©³í§½ýŠ—(—. èÍÏ®ÿÚ2ìîS g,GÔÁÖäúëº;3µ7¹÷,M~ÿº×¯×W¿œ½ùÈÅ9€#AÓLÀ´Â÷à•’f?b•DËa¦ý ù:Á=Ÿó•µU¿zohºbK¼s÷ÎíäÀ©îðÃÎwêîXÛ”“劙ë¦Ê¤™ƒáµA¹·^¢qiÉ›(’&`½KÞT¦'¹pž±‹Saà2/¹9õy½‡ã?»ùºV¦?)=i‹Y~dá—sý|'5›‚þî‚ÿΡy?øNM7'®¿=+z+9%׈nxÚ'y2°§yi§íIZBþ·M&“œ™ïSKhîîCswÿÞ¡ïnE†5s/—»±\I±@xt×/(ùÖb¹x—Z3)N~…kÐô?øv¢W©I¢ÚÍ”So›´^ÓàìçãB¢/¯9)å#)v&z’^ƧҨۛګg=þQõzj#š‚Ë»<í; síK“B»à&§?1øÙƒOVžîñ›Óïw¦e²ÀXŸ²bÁ^þI ` OHÒ4àΕ Z¢Á(wZÎ;™ïŠ¥Žx²)*ËQVtçí¼{¥h­XÆIH÷Jï!ŒNâfn+xúƒ¥Q'YMLBY8ìÌà>Q•ÈÎ?“sŽÒŪž<o­ÏîJ²ƒñÏ9‰-;ÔeŸž9§¯$‰­;ýYàÛH,éfiN¿ocwÁ}¿©8ÚÌßÕãcÒº¥éÄNÕHA{io§i½óJKkߘÒ=»L¶+C&$ŸIï6Ñzws’ç:ý© þD™l.Ó¶ú©îþÜÑÿsÿ‰Øwž=<Ÿ“¤wöYPòòJçãäê‘à;‰+õ²=dpß›;Tõ‰Y:ò'ûe.ÙOq“úÓ¥‡wLâ«y憯ô ÷9Û·•'û Ð ô×c—ÚûMéq©àÎýêÖ§LOãßÒdBöÄbàëï&á¯K…¯n•ìwqTû$W÷¿ùü<+8ÞIŠË‚t/ºË¾?ý."êJæÙQ_®¦Tl8¶ŒÀÚ[ƽí‰×P’ä& <éÍÛ„´[y¦bptºQ*-ænH©Të%è™tœë£˜˜T1+èáã¾N'Ÿt?éñç½áüÙ+]¤ |SGÜëL¡3{?vrà¶¢C¶»b‰FÅ%¸Kç[‰CiÌØ·{u„é@Îè䇔½Sz4ê‹ÿº~QwéN¯÷ÜÜI PêÚN"Ï|¬% Ä„;Þ…¼ºNòŸéT"÷nŸ•w):Ϲ> {I–¶I¤f¿¬ë#ÝPË”Ùu'âĽ¹ÓTL¿™§AwiµínÁœ¦Ù,“ØÝ·A'ñ‘yÉ>›`—€•ÏIìáƒ$výϬýý#yòâ/пþµh8Y‚úÛY®ðw™³`Ⱦ~#Ùég£“b_о’uî;AhNõñ–ìþ<]ÐüŒÍ?¡y{>“üÞuã™ý»€~>yx¦—èêŽ4·œ8÷'ª¯ðdù³QEkiÞwx%|×Ú¯[ŸÈÝÍž¸!±A૯ºìòþÈVàzÅfÖï%4H’5xi’ÿ×xØ(sß¿;úîÇô/@Ÿd»ï¾¼€¾—œè=‰÷ßFmÊI@Ï÷󹡿5_†n„_Ý‹Ý@ͬq'éZ¢J@Ï÷»CŸœs 4Ó’] $–¹ã¥ v;©iÒ×7”Oá\©š˜“z{z+ñÛ¹dsôS©“"Õ:ƒßGËDþÛ3˜í”Ìd¹M¸x 3œMýþ,)kп³Õ'öŽ©W:ë6 çÛÃ!ö5(OŒO–O܆ž ñÃy oÆœ¤— ©ƒ53TÝç-¤_ršä.ßöt{Í.þ~fcz÷Ñ9Ü êMüûÓ\¢çõ>óògÏub“z×ëænÀÖ³8°OB¾~Å:÷Â,½’®‡ïœò÷W`g®ÓÃPuA(b’u}ëMž}&‚ò_ÿÆO Ô”ì‘Ï|ýäÕ•¢^n«u—äl„N>ÉÄ=~{ôÑÐsV‚àÍ×óÕÿ¦l×À=q &䘗ŸXþŽôráÁâa­-©JNØ¥¡çzÝxhhN³N–Lü÷‹âZÜ|mŘ¢©RUçôY3ÂS_ÜàÛc#3þÍ&ß‘”Þ‡…%0í×]„$%€©· %DiváO%žä¿ š³Üâ /і楎…=èZ“Ç "Ó1q(œÿ‰"’†¶é¯†’]9O¢íPi’J뎚»ò{¾;±Â/Z¼ýSx¸ô⸙ŀ'3&­÷§àòn' $€~çìÑ„¿©<°Oÿ;11ÙÃ{ÏŸΕúâv~ïßwçþîèÒõ yñ¤[?R©Ó߉+óióج9ïÿszÏ<ø™ zBëÎý]¬oªa"´ðÞ´ ïƒn‚dKâfÓœ(vs+ω·U’GÏŽÜÜá+¾;§û¾…¼ý–®²·M+Oºø/Pî¤^»ò'þ}"íØéÿÜõ¿‚þT ¬çk¶@c’õëü«mÇiâÓzÜž_ÎXµÔe@ŠÓr·ž½öWÝ|Lèþžb¡ãúè"ž*L@jb¢'⊕vÖwa`¡¾é{S®°;î.r’ƒM_Ÿ.ãö÷&×ǂڔ#A8èiF2Kõú˜òä½LæzâšOáé=Ý1æ.Ý"9Bô ûÙ§ÎY2zK°>¥tóßä‚•¤cûeŽ~2îôL I!`xêž± :|na7z/Ò?NÓ†”6烘p$õÅ}qaõœÜf<^ä:w±/é©¿NH„¿i¹Hëc¾®Ipç€ëÆýK¸É×Í8\Ç0/Ri™ü¬§üÌæŸ2¿w=Ýæå’n~v¡éŽ}žàš©#î¦ÛÛêl| ÄqãÀÄ<ßÜûç9®º»YÆ3)îЇšùzð†ÝœîÃÓûÓs;ÑÞ…í.=ÉB´÷&ç1O]È;úsÐoÁe"8uÏ¢Ig÷sâг¯ŸM&¾ ÷ý×yÁœLŠS-| ýI± ñÃd6˜4sóÜNH륑'$ îóÚè,^Z\ð;Ÿÿ'÷žum'ÕÇÌ~Ú\®W(ç¥p–œïq_ŸÏòKÆ?): óbñf|弜ïÅ»;ˆÿýàLãEþù~xàÌ¢ß|ú mMŒ±07è$¥%Lœûð$°ž¼ù{gšŸ%¼óÒæÜô.Ÿí‡s±Å¼oú°pÇz]v¯IìY{„Ï/ßdwûü|ýû#ùö˜ßïç&ñu‚ûEçš>ĉü6ú¤­ùúë×Îçä»—ìÎzêî÷*O :D6=&GZ jÐihhuA‡ÂÝ‹†Ÿbô4·†{Õ~žúñ¦ x‚Á~üDFl‚„Át²Ôä7ºóøÏàÛã?¿n¹v¿ˆ$›Qv#’ž°ÏÝeï z5t—˜D¼Iýøôûr:U#Ù&vp–äòÉÄ̱SMLâ±±ö» ì|pìžb}£²h›ÇFš$³-A=7èꎔœ0‰Ór8¡ÖtºŽ ~=‘pîªPîv7'„Ÿ^$«P¿>­sKPÂâdEúÌYhè'4›ä?_Â\4ôÉwÝýì$¸j~t%Ÿƒ~öïm=ÉN*Í68+àD7}ãôß-çæ ^Ã$çív Æ'žä³aGÜhërúÙÊ!^ý~]ôÿ+<;Ÿýþõ/é@ŽÓ¢ß—æ‰)=\Bîúv¢ë[å-ÏõsFtQâÌYÁoœ~t&¨H5d™ß5²L.73ÊÉ(ßÝ;N>ñœñzÚ&2ÉI;%))\Võâ!uëͼ÷ZÙs7‰}MÄòšOör÷8JÓuÜéïj„¤^°)ˉtY4<å…Õ¤ŽÜëm6säãȧ.ßœ0Rîn2Ù& åõé·FÏC¸’kÉB=ŽÐ…4GÞ~Åý³^:“8 Ä÷ù¾çRrß盽/î#jNë¥ìÝu›È‘uÇ“$;žÉóù‰¿%‰{a01}61¸[ |ÒõïùÐi dâÖ{óYžAVdy‚g3J^C\£´7ûôXkžš8wK²I>·K ßÅÖoY[iÝ×ö¡M'›ƒ}Úoó’õ:Õd¥»ëo(ÌFí/W°7S{ »Wyà<Ùÿ|n£O›rZì{Î~/6ܧØwÝ­ÔåÜb’‚6œ~[=NL9; ïìó ;ÑŠ:@OßžúÜÎm(;|òº™ñ¾ww—7‰2d–³ËŸôpÞž—ÆõñEa"û6Èv@7®ƒ×*us×¥Íú ³ °«;¾¾¸“¯?³oëžúïß3I„í9¯ÉSe3ïG&ÉÜÿ{âÁÂ[»wÔÙ0.eoûÜLÝ/öyT°00ÜÏJ€} Ïä(šÓi¸4C-6™}'ßKÒç=ÎN<ëô§†’ŽÅs—OÏò‰'¿.1ûïÒŠ>ïúÏÉ$²³¼OQe âwПö~²£íVž)Üç8 ®‰òÊ`®¿½üñï®ÓÔÝ~¿æ8ÅV¦÷¤;¯Éؾö¾€þw™ ŸÞü$´â“ê¹@<å¼ Àê6šìî“c¡ðz¿MBM²/¿Å¢áõÊ‹ØsHu ñYð˜Ä­wâô®q·ÙØÑÅÀŽ;{¼ÇÖ™ d§[ÂöШÄÎ7Ä4ýÆ:rÙmDÕa}Ц"ì6³|gv¬•—ì|Y“jzIæ^xzÞi“‡ç‰¶”,M't¦þKÓdƒÛÙä%šx¦(^: ¼&ÓEðسáraôuÒj:}Í¡ðv[ÏéÛæ~?. Â_šx²ë¿À4Ùÿäñ“äãLßÄøçÜ K~ù~vôù©¯¯¿ø‹]JM<×–±‰çÙéÿÊï§·Ï×yìB‡ìëódy¶ì¼J{S@ îà-¾Ç€Þ’böæ ‹ÍØ¶˜8…‹¥þ½iʸkFI÷qμNýxiÅBêÇs¿t§ ¾Ì®ÐèÓK¥“ãK‚žÁÏÚ`ÔþQ¼´uûNºõÛí'µ¤\ÉLêØ?º D‚V½¯ÙáE‡cïÈ~2U˜÷ÓÍže'oE¯2à¸F™äƳɮ &¥ˆœ‰ß¿éd ÏĵÇqèž÷ÜSÜGZæÜï#Š)(_C:5&™x"íÌÔ#×åø¤ð:Í» é&¹]Ê<· }ÆàŸ/¿Cü¾œþÛŸ…yqû¤k©™ý‰ÞÉû…§ $MáݶÁgî1ßL€»Ì&wßÝ\ðäROsÏn(ÙI&þu$¨0ÿØôƒ´™'Ewu"ÍDœ¢»:iþH.=Þž.“ÎÄìíÄáîDd¾™:=‡:óï/q›Ì&Ž+ݬðsRÁOIw€cû»·—|Ìx£J„:_,vé8™d±oÊîm q‡$¶çdæÐ}Í“×~wàégD:kîž)IZÝçNϲÒN€ò¯öö™wñýÜ„ŸI×B¯J‘X)j0yÚð>H ˦é I¸ŸçKû‰î3 Uýž?$› ÷õ×ë‰×pæY\C`Ùï_°~½ÿ,ä=2z_€ƒÊBãTBaBÞ¾ÿøÇ?üá»)íµ‡Ï‚Úë=fç'A°iBÉ5(¥œÿz”«ðà¯#‰}òþMZŸúr• 3ó8­äÌC‡ŸdÖ™ öÏÖ!è 1×-`íâà´>î¬Ojû›„p%>ɵ¥ç@§0™fCø›r”»ÜÙšô»’Ñ$-¹%ò'={خæ¥N­oŽaê>ý½÷Ÿ:¦ ö9–Èsƒžà˜½ö[!1¹aw€2ïÙw—ùM±w¾¹-b;ÏÉ级yÁAš#ù–œ¦TŒ8z"ïðÔ¡O°¾ ¼ZLœ(@=Þ+E%Çßû,MÒ”¬Û†Þ}$òƤw>|š» ýj-A€ëŽ£²¤•Éìôóu‡v9À˯$^¾!¾ûé»ß3z ôÝïçü¡'¯WèÛÂáËØ ij ¸öz]צž´{Û O:»ÉÙf¶w•#$Rv¬á¯a½ûÇ&ð—òS>a|ûÿSx$0šˆ@©[Ÿ´Åå2À‚Wgô&Ïþ´{1Ã_ê­ÔÓ…Stˆ÷KÚn©ÓO¸ï0ówÄž÷°;yïd:A+DHBÞÙg¯kB 8{Öùë>*sÞMtÿÏ[•åÏs¢ðѯ²|Ͱ‡éæ{šÄùÀ®w˜Üýý‰©ùñ½Óß) I4œÊà]¡ríæ:gt’Q`î‰\*lˆäQÔ%ûçõ|/ágL a‹)%cN×w#ºú`’¾ìwÇü±/Rç›P>¡”õì3èt^Lö]ýÉ#ÎN>V¬ñ~—$¼ÉÊÜ”Hþ{¦ô|¿‡Ó¦Ìþw<Èæ'ô_Ï™n»ÞIf? €õWBy2øý)vý“0—Óƒ‰­'ÉE\Aÿzõ &ù°ßo§ÿ¯dgÙM0'Ì´Ô>\ í’› 1{?¸B:íÄð×¾î*“2}“×Çz€äᓦ =ÀëOõA€Â™OZÛNæéS¯­‹®¤=0Êe›×¡wúùÙ”Þº.Õ)’)õ5;xêI½ÉÞÑúÎZ6(LŽ—<÷ÞyæJÑ]½SRlÿ¬%†³(¨ëÞìqÂú›¥cØÇ¤óxóö”©÷þ“ilšóL:¦),¬—‹÷'WM’Ûµ(Ù¿eF$BѬü>þ5Äìço:êÖ±êòf’³Ñ ƒ¹pÿYnñÄ8u~Å0EÇEßÓÓ$ÒU7y²Y”ï³xA1¾“Ãzžü£&´¥gêþž²Èá=Ž-ÑåÉrÈ®gËÎk /3mÖi¯ö¶×ëëS„Èø’¢³@3»þæýÓíÇÜýÄæwGßR`²öýþôúZgÌße¦{ÿëý_ |ÿ½=P©GbyV`Èh_ùdšDº¦¯té>®oϲµaoÃIn›2q RÓ¸Ÿ'»ãwÏmhÊS*]ü åÀÛÓÿR¾îãÁn<¤œ¹êoq’/CŽýbÃ)M:N\nñrÉoríAŒ/ú“x¦I7wâò>—ööŒÌ ÕgîÑÑ{üsŠÑ$2©³¥Sg1 Ç™piï‹”ì¸EùÉ(=÷7åCó—&^~/ ߟûÎëÛÞ¢ñ*&½r=7w’ö{{ÞÂÝó1¥/'º”ÏS—v“¬â¹V§[÷N5=» {õ¶EŸº01ÝE‰¼ûðìæyÍvÒíð^7º[T®3ÍÌG>[ÿj'Š8$i&½c›N›rÒ½‡%±ç%Q=H>tî_ï$”7õå¿àᮿ3} ú»»¿‹‡ß¹4ɧßåÿ%¬' ê¬|8 §µÝ¾’ÙÜNt{ô¢LËéá 6Á´8ج¸‰¹dÏâ{¼ôä]w¯SO½lÜÏN<{Ë|ý)ÃÓ>gpiÁïå>u)’æ þAIrX²º#uëû/Me˜×'M´(?¢ Åô–)’‰]I|i&åÜ=u÷'A]“~ÿ3Ð?ÜsAí'~>=´ƒ‰p³‹›'J‡Ýœ)@×î׺šŠ–fwÎýõ¬é~*ðû#ð]ªt’¡_¥„.<$J¥ÂÌ0´ÍßfÜëý£»µ¤¦I¿?¢’3XÊU¸{Ob°Òy7¡ÜÌûÙ=SÙgw/;}üø,ps'5òÖy½ÎåÔ ɤÆ„e’ÏqçgSçÞÅA¹3wù/“w×óU8ê+¹±Œ¡n“ §ö~͉7ÉAÅèÎÔOËtÚÜôYRæÓÛx”K3ôL&’®é d  ÷Ù›ONÞÔ¦°ª$ÆØVÊ'™¯I2ö½ñœ!]Lì Iò>Oú '§Æ…¢—U.2)çb7ÈÒÞwÍS•wn?û>ß3’Ƽ/Þoð)´¨“|&¾ãfÿ³uîD…ÔÑLÛ*‰”yiË]º[¬ zº®N¼€&ÉI@˜òÎFv?³š¯{Æ ‰—?!Íç \òÙ©SÞï^~‡z¹|º®!»¶©xx§²hbåI9=Ïî”"bÏvðÑr&]ý||NQ§ç;á×zðá&QÏ_÷|&í…~õKòôä– €ôµllà9;ýìèâ¯÷, K~X6Ð ˆœxc^´™ï÷¬çë=©lH†› £,Ø,Fƒ¥<`k \xðÙÝhmçß,;;(gÏÉÊôÄÚ7]Çܾ¦zÑ‹Š>p’n÷Òé »ƒòΤOß>m°àØTÓnC™ C]®¤%øS vwbŒ=O’ýh²1¥¢ ‹}ÓV%7Ñ)¼žYXé‚Ó`ΣR÷Vwýͦó ©ß õÎ{öþ®Þ}L7ã9s×"¿ Ÿwï&û~âž„ª¼é&ƒ¼D˜dß+¥z'¹y/&.@i^Ô»¤)©—µ“Â`'/¶Ô¸?öÇÖï¥& ûoé3D7Jf¾“yÝDAÑ—ÓA7Øu©n¼ö 9Q ô»#N)¿Ój×ùH ïãë‘fM“0¾¹`=éÒüÙWõëØžHV"‰.nèON?{ùçàx°X`—$2ÝSE=»àÉÕ‡ÏÿRÔÑw4˜I;&ùX`y±{ÿ ê²Ì—TŸ/ÎL뫇O¢µtsO§ºúÖ‡A¦Ù$ Pbð'ÏŸý»oÉ,'’#P’ö&#NëâçY¿#(·OHòþO´%ï vå]~ð¯} $b÷8éCI90§ruÑpšnq/ð¿.šôqšØ´õ¡¼¡L¿ÐŸË€ã³ ôO ¿='¢Ë¼×þŒÍ?I'íÿ.ñ /­ Ãîñúm4|–Ç€eÁ–à›ýÏï²"Ť µæ¦¥uÍ€¡êXw(¿‡°"Ä®äØC|Ï º{º£K¦äÓå-ÐÛ&¤©‰&arÅè½ÿgSÁgÒÿ Äïg}ד¸ÔOWã4Ûqñlw8òÖ9Ë6¡¿§Á¹M0 ðJ„Æ4Á㯳WXÊ'fcŽw¶nmX²À¨¡¿{(íe'{=_×1UôóYŸ}1àç‚rÂeÂq:÷»7ï¾¾ §ÿ&qpš!¤b€”×Ë_ýåÝÉ1Lý ?9ü¸kžb¼RÏ8 !A^‹™sS‡Þ´ô«ÓL ýjÏ4R8T*'\¬'ñnrµO³3Œç)¹ÉR3qÿoOÎŽºš`¤/½LZ¯§î)/è.4™H{ΜuãÐSÿ,y¼Ì{ás/ð»RŸŠJdùI9áî]² LtJìÒ)ˆB|z‰Ø˜Ï7{÷8 ['ÉÁ½Ã}>bSçþ “85#™Iœ gÇ­£°É€+µ&uŽû $K©”ê‚à9i0±ö»ù©3FæÅvºJ¤²¤'p'áÜ¢4¹<%ÊÓ»y¾°äi6&ÏhÓíRF{W_¤kQÒÕLfVú¶'¶q§‘’Û”öòùγÿ*Û=ƒÚ½Œ•ÐßqÎXø_~Öóõ~––/ŠÎú”ƒº¸dxLæIi¾\²;ý,оì|ôŒÅ÷$J÷øÏ9ÇøÃÜÔŸîé¹½ä0P³/Pµ©À芅$„íKëý攄2zÌVšOì/S)Òå×½7ß³½ßÓ¼%­§Jiªç(»Çãn =}qw‡oæaÒœÎSÊo÷vø\ÈÛ{réöÿSnýŸ¤ô„à‰â\1™½|s¼î -ÍÙos±Ês?1•ûße×v2Ë"dO½ØDºƒ¿±Ó9|½,÷=Ñ^À$Áý¤@J¯g¾b´«×““œîu“è‚i&6I2N‰à>×lÁ9)z€ubü›cRÏ&SU XãÅóz§ŸÙÓÒÜâéDÇ ñÌéã¾P‰DG£îÖï°Âî9 a¼ü|…l~C––ô(ú“ëÿ—ƒÙÿ¦­5±{çŽ3ôO®ÿ6î$Áé‹’Y‡sõ.>Å©ž¸ƒî.lÊlë$ÃÄÄõ7ÿ{ÒN†z‰ÍoÊÔ]6͆ó‡µe|0ý&•"iFÑáµWàZ°;Ií51†Û­‹Œ ÊSñÖIS)òlâ”â½:è'Ë3›w‘òSwn!{çŸÔ°x»]`÷͘ŒûûºuîÒ&…A/?(IŸê¡îU?IÍd§Í©ÞçœïÙ¦è¼âÏ忽 0ùç.ë=«\šñe²³ìÚƒÁæ„Ý$Êïyv|h“O¬xwÉß >6eEš>úO®#àyq×Lô$ÜbÉ)+A>Øi¶ê&‘ˆRéØ W=NÑ÷”$ëw_½ž",“íÊz¼ºûß×+úôŸ=ûªÏ‚˶òdGŸÞ5”ð®ïZåHbÆ×]¬e:Ç—é¿|>Ñð¯„õËÛ‡~;ýSþËíÀP³/{¤8&¦ÇT±[o°è^¾YÚ>À%!){ö݃(ÉL»Û}Ï‹íù»hšfcúˆ“ h_ÿN‘JK¶;夨µ´Òús8è´ÙSjDš¨$O¡tò˜wIÙ»§îÚ¾sõI&ƒÍ$ |N!Jé¦ÞoÆå?éüÍ;ñÈnq0ŸÛ<Á…9õèîz&¢…;s6ÔãÍØGàN°7kæ5‡½½”'jˆã,ê áÇÎ3]R9ã=ï¹û9÷ª¬È\êc= â×ß¿gu{;t_—4gHT¢w–£ûI —Ì#ÜÛvâju7=·+…œÇz“ä׉ ½‡å‡!>„Dò1P˜¹†·Î\bÛOèç¸îÌóìV:ñœž;êô¼}Òw­wvÑD4ÜIGÉj0»†óÖËóÎW‰t£u뇮v¬úçðð±=Ÿk¥"Á½ùèoÚ€wŽþ¤Þ±ö÷`(IoݧŸôhíâßÁº×R\Y6í„nœ:IŸôõçsÍŒ•K“õIЦ¾œ4cIÞ>¶ÐåÄ{wt›Iq]©œ¾ëÆÖË¿T¸¦s?¹RƒDKBÿ$á%‡l~ÒWëéÃã ýþÙ§g§mîßó» Ö@EŸÛГ½ÿ$á%ÄO>?ë±Ö¿ñ«÷ÅÏ þêÉcoœ¶Å¥YÎbS§éü-Ž{H`.ýÎ\7XŸÄ~¥¥¥HwßùWvµS&±O9?·¾>•%†þ,’ã“ó½¶ÇÁ¿ëÔËnIif<§ò’ }bg3»KÊWÜï'ÈÛšI¶h§£LnÉ]Æ7ñÍèÐ? å»7ÿ'òß Ÿ»õO¢pú2;ÙÀüiS>퇷j_{ÏAŠÇH¯»’¬?“#K”Nz1·PØŒó‰OÁ{sÏTœxÀW憧}Z’zÿ.9ºŽ¢/3S“txO?›$%ÛÄvrÅèaRÉÒ`"rM†¤T’L‘ùY—¸Îßམ÷‹ÕÕ^Ðw¢tN±¨HÚ­¹š¨¥vìáo1…)9öìȇW¸oi/þzü~{pÉk'³Ÿw—öø·À—TŸõ°ß¿ÝýÓ¬`½Ç3³ùýœ‘^þ+ý|6œ~›’a¢ô“˜Dî‰ífw”O”•´§¨vèß­<;ñ†Ó’>…˜pâ;Ùf’.<ï”§%'ß¡TPy™I•Ñ÷xÒftž”`з€}úý+ÒÒú7úâh©Vï÷›ƒ›Ø™I¶ûŒwë±þ$”ªgÜ&ê‹{ðÔ;ýó¾ûÄWg.ù°ùÓ;˰æÜµ½–…tàáñ沟Ÿ^ë6É›1KŸ#,-L誮2 í®ùÝY%3à§¾%îßÖ;o!AùÔãOWƒsW¾Ñ0ü²ÃÓƒæé%}‘|„¬ IÓ€Tœ³¡Fqª“gÖ™•JJ¶&wd›J‹T0žÒëlèÿwxxö¸`qJçõóµÅhÍI@ON?ÿ% ~MŽ÷¯5I~>„ûœØô“YÿU ÙÅ·õ'M?»¡'—³Ê‰µ&vïù–yqàb®¶»¶‰Õ=1ú쉈â¿vüÄïò—+MûéÂeCX;&%zUŠWcçžKæBßú¾æw™÷ÉlâÜoàn)sÚËv ²d™ÔS}zRo7îtÇ7åvÏ]‡™‰Ý^'ó¤Ûsè÷~üô'ºÎœO<1ìkØ{ÿ“#ß° >’z„Ðß³PÞ€yÓe‡,Í}…IªƒDzçŽí²²÷SÓÞ’L¶Z’ÃIåîw´áxRSÐ Ì×O!zÉ‘ €nBš¨AvÛ®`¤ïôÂÉu/­ÕÄÀ6É4ÙÅ¡MrYÛxwÁ;ž¡–€ó|qQ×#Õz.A*TÒõÄ6$É肚"Ã}RqèÒ³®?ëStX,y\€hîI=EÃI-À÷¸< eˆël=ÀZ“|ìúÏWH"›?•¿uúm[I0GRMê’¦LYÇR$x4±ÚœAöÖòî aDîš„èk<ýÕsQœ™ç~?!x2ò›tý½O;‡>M$Ò|`b¨šŽŠ4èÓƒDlèôªTv¥›ô,`¨9¤Ûsòø¿ËÊÐuæÉs×üä´ý Ë¿ þLÚyæ4_‡ô;BB“®&Ḡïtå¡lnÏ´qÔÎÉmröp¹›úåɈNá†ÂØÚ!‘é@.ª­“Iýõ”pìîiêîÏÓ‘'³k &Å’{Ɖ4ÏlöµënâoŸ‰uZN/B’8x®ƒJódåÉb”ö.@Ê»É:›ÜƒGZ{Ÿa³Z®¹ç‡ô©ëVÚžÃîÜ›ÒÃ××6Y@ÙœuöìÙŧ˜•PÛÁ^Nðå+, ’ݧí2¹2ûÝï_¯¯Þ<¾ ʳǿþjz;ýœlÜ{z·Õ “‰ÓN*Ìe'AhâjŸf VR4ão™çæš•> J”Ÿiæàâaû•œm&6£ d»x0 6 é Á&],¼õì¨ãoá‘FÙº¿%õA½­xt¥’É Ÿî|KN0ÅdÝþýXü™ïþ$x+ùÒÜ…éw™úw…¿Ÿ¨îÒ~扤¬ì÷©»wfÛyƒ Ïìÿ«}ÞßêA޲#íÖëm@ñ†æŠcåƒÏ;C¥ éeî»OØdØ-PSªwJAæ·$ûÅDU²Ê"¥ˆ¤‚'=O3'àîÍ âßÍ ž„vÝή¼¹ÒiR¿œg¢£¯^MºoÆ:³V—z€n±³|Ýk)É‘iEm¡¿Ý_˜áÀŠvòq¦8'ɸ“ÀýLòù~§½Ã¹<+XÀ:Qù-,KìäÃ%³]bmé@ [þ<ÉÕ‡ÿœ°XKXŸý²`·{é°ëïè.Ã}÷-‡ãÓH’ɦ—œz®Ý;?9ýwmâ:Ê„•©$°»§”LØö}þÐMK's’äDÔíSyt±àrË™¸Þû‰lÛÍžrÀËYRbøBœxϼDÞq_N®äûp®núùL<×­'»`nbÒ—`÷\P›¬9ŸMìÞó³Áas±o7à#å ±¨“|œuL®cÏ×âÉ|=§iä„DxãY@€ý=£0\Îö—{ãNÕéLì%Ä\"ì¾ì<ë ­Ï'š›“öÙKß&½(JÛêèOaXûØ,°NŠ„”bîók;ز‰B“¨2ënÂì^çi¤#Ê~MibœÊ`7 X¢¸qÖÓëÍì·‰§E´ççû2€x:ñŸi<Q‡ó*8[àþú,3œþK_ ®HQ_…G¢ñ¤Wèߢ÷X’›^·,#qÖ'á\Ý]'yÒ›R’˜d©wž(Fµ\çT % ÌÛÛdF‘zÏ^sžNë¹×¯;¾'‘… ‚=™ðã ÷ âӯ㷤€yʯ…é.h=Íàvóöéòb'Ü q¿“ÙÞÿëßé6Ù™µîÍtæQð½„H!;ÿ†Ç„–3) ìÙÿywî'®ä¶òœÄõÀÄçæÕÉr¯ÛóUÆÑüëfyDíð*ê‚ßП%1'ÝËeB†I@¹Ê[Ò~>ÉÛÇüû¦ħ<7©#&D @ýü®×P²RíÐ?Ù¤&¡°I5épš3LÒš'DǤeJ¿Å!\æ&°½øõïÿ­‹áNõI{§“µ,áu×?!‡tßdþîzξxòì7з•çñ 4;ÒkÁhOÎ…Á÷ƒþ3ûÿüÜ“\ä4€ÁÏ®ÿßÏiÕj™¯á»¹þ&ó°ÇÏ÷|YC}6Á¼ŽzØ2%Ã-Y=vá&;LIXœ²W»KŒÝÖ»¨7 OùNS\R·;Ad.¡[ަþtê÷:'§|¯;â}Ò¾è~D‰ªÔ§%6÷ÛqêÂÄãȉ i«rvaªOº¡¦á{çë§L‚_GÒ“@ûIÏ3/äÛC˜~wióîþ]êÎZ«´æ<þ¾Å¼/RÀPêm':‡yöî¬÷\ŽW{èÐïò/R!µxl³ëþ"‹a¾ßd9ž/ü+ýO¬‚Ø1ìß‹ƒ:u÷½µS†qʽ#› —Ýt5uýYJÔÉNÜž³ ]ÍÜOšäÇ?açÏóÅ]<ä’ãJ°áñÉ#ü̶8rdø3OÂñžæî#¼gËî'J-ÛglÜõéO¬zStȪ·'A¹ßC°Îî>¾)=gÿŸ£\á\"‘‹þîSvý×ôÀR]§ù’Æc‹Ïèßu÷×8²ç&•v°I½vwýͶ_];¾GMYE0ÑLÀqŸ-LØü}Ô•Àë\Ô;±­ä¶MÛÁ]üm–÷]þ%‘qŸÉÜ…øÝh"ÂNd$ÏIR÷"©S¼ï|±N7à~k´uc öê··¹ëE¿ùM(=©£ß{ÿs'Ÿg ÿóŽþd}æåµ)~h"ðíâÂõW‡ì#úÖÎsÁ~ÿ»¿Aÿyp .$¬˜J¥rJ¼žôþ“Œ¾÷û}Þ¹ïžè1;£Ï}÷× þ‰óO»´3_Ϙãó A(y¼$õÅ.™á:覓ižù®H0gÏwï^CÙ‘ì úíýßÅÓk›ð¼³§Ü:/XN'ý.ªN÷ï#Nþ1Q9a¶qyÖ/€k!/é=g8~5î4óž}zt¶'èí“,>9 Ÿ­E×÷RWÀiƒŸó÷’åOoio2ýLæž_©ö2]V¢Xx@Ît*Ìä6èLÔš”t;) &D©xHг»rxGûª¾„TÀ$2• ŒžAëm˜è.àà©>é—'8Þi<} âwÝ™¼“‚“J½5ÜÑä–'32Á3n{äP¿)¾s÷oñ^ùæ×â`î2òû#ñõª÷ÿë@ÿ¤¯Ÿz‡½TëâÔsM^.R¯âyWºö² X_ùy_0e‘W >ᇿ:ͺpvb©é"$‰kSÇÔ@Ùà>Ÿ%>wrK“ =‹èËOMо%SI³Š{4Øž&Ô#ÃRÀη9ùìˆ=û†K:[û~ä9Èûã‚} °ZÚËx¯DN{gýžèûψԲ$—䔿_!h6¸gI`Q/'ìÜ“‹OPCÂú³ä÷X F-íeߦŸLf‰ÒÝýÉõw×ß¶žž œ:ýܤ»Ø‘t ©îÊŸ¨>ý†áâ 8u¦½>î.›®Ó‰sIkæö~y"#¥žw‚ÔîI'o¢D4ê.Féfß»òÅ&óÖ‰ kú“mRçþ}ú½Õ—@ÀÄ#ß2¬$dL=¿;F{I¬¶ïQåìÉfý9·ûì¯'²ù÷ÿúÿÕcnš&ü+»‰“¢Ì轉”ÂWx;'ý€þ?èä%Ó„¯œýGŠw(·*œxí~g8¦¿zkôþýúéSéÓvN7Am>μüc}’Yª—–bÝHç ÄÓ¡.ÈöL •U^•@y:æÓ¤ËçEòÝï%ÄD7•RœA‘JPByÞI×–_ÀŽ÷ æÃÌ›DI—â#Ðü~Ϻyg\×:}±ë¶¸šØwŸPž,|Âå3”?ýÖŽó„Á Òü½.'Ϊ€ëëœ`PˆLûNJxù/A?!¾{üëõ/’gHìY»L}Ãn÷ª“Ìtâ÷?éÝöotßÝåD"ÃX²9éww I?Þï™X…ÚÉÇ”•¹ahw+òö7™'Á_OK\Np?ö®|Ú“÷LK“˜¶^ ²3 Y³W:{– î§xý“LÊTœ3€ïqýxMüÚ‰æRÏK‚>…H’ß¹J¡¯Iúí‰ñO’Ó‘ûì¥ûؤY§ëø4——Å­çëÞA'ï×áî³ßÏ{„#]Ò»tw6°¡I2:|öo¹ÎIG“H/Úž¦‰¿…†õ:I;pvdçO%‡×3¥1ôBÈ×À.ÂîeíâçéÙ½Ü{ùšœKô+©&nûüø¾IŸŸ½©”Dêþ7Ý­|¦V'ôþ²—=rªÈ•'\¶w>ÿ¦âø_RƒÎÅÃQ0EÁnfž0pÉÎ%`ɱ >i<‰µï¸.ûúÑèî1$ó¬àþñ„ MH½ƒ¼ÔïOÐj-EÅ„Æc¾µ%³é ´H%}è©ïN9{¼õ\ ¤þºo‡išÑl¼el–ÊAº wÈÛ' ~=ò´×¼§’ Pj› eXïRÍv„º‘é=½–2D“<+ÅèLŒ pßë\¿+EkMºþw©>ÔΡÿç®üÞVsÐß…¼w=|zš©mû|ÌLúÊš<>בÌ΢¯‡ôžÍòaëOOØã·SÖ°º¤IÄ•N êÛpîÄîiZš©Mé»:ÍÆ{™Û¡7#wrîçZ9k6yõÌé: ~gŸ<¤%sÎà¾xê+»èn߀ÓNiÁ¼mÛy#uëS·×ÊGT*Ïz@rm2ˆ‘^ILìO%¥„¿AE)Àެew%;E!Ëy¯·¢Iw×›ºXÌý|º‰ç]h>7ßôë½—ÿ9g¾>Ùˆó(¢'8ÏvŽþâÄϾ{®'ÎñüyJ¶qgrcŠÄNk¹|›äB±÷É…Lè‰P¸ÃVfÌ„žôb'Û9ñø“PØ–‹)/–åöìkåIKÚVž-ôyH7']gÁ®h€”Ðgh¾úõe¦«h2Û]ïù?áÁíæ;&µ“„û=P,í;O¢x¶šOAßȳèÿû¬'€&¿Ÿ<~tc˜qkÚ ‹ÂnòéYrð=k{šbĹa=Ë€îVÄiŠ ñMà1ãÿ?éñ•ú¯ìÄ$pŸ˜ý‘WŸÄÚïi©IîÙàS l玧®¹‡Ëy=¨Âqo óY' œËäˆÍ{Š5Àuƒ—™Ì@ÿ1<’©«/FŽxó–LɾÞïfC2—7‰’=Ó°Ÿ•CU¨é=~wGH êîÚ¢Í<û÷R3ûU? ¥ŸxóOH>sioï÷?ýý=]ž{7 xýÓsº´·Ó0JGZò“IÜn‚?_ùJRˆ"°Óï˜?žwIìi@‚§¸†æ](ܱ''§ÂlRB¤ås&ɲ3YSIã)kdw;ÑDJ¤ çUOš&išÚ­wz€ýU—ábIÏ@åF÷Î?kiæºÏ‚$+÷ó4óI-?—ß¶†gÓ™Œwý  ñ]°GÎ×ɼ_ßBf¿ówÍÑOÞ>îâs:a×23.ìüC连/ˆ¿è@ÉÃg½²ž¥>ýßë±v†/ĉëß»þ]^é—‰©e÷¿ïlßxÒ(9•F©xè>ý¶ÑœXyø¶¦Bk²Ím–7ÉaHv–.»½&·<íÿR‡~bÜI(?É HÂh/ŸŸÔ8ö0x!¶“Ý‹M¯J‘+ÉÄÚ«;‰ÒÞûKd‡Š÷Þ‰«O*î:ù|Bãñú̧ ½—?Éî3î5žE‡)‚go\˜€þ./âÊ9NŸMœoƒB7 ÜâqЧC¼g%^òÝâ+. ¦ìî¡Îtï×PÌâãNRJTîÏ“èRÜ>¼j‘öCê]\°z;¬¥¹‹Ÿ¼h’2*íµDƒ4Ï×Õ&Šô!3Ù¡zOñüâ1ÏÞ9ïMÕŠ÷;¿Ý³Ô*åýýÜã_ô[a^»à¦ñ¸»ï¿²T €Y"‰lcQ¯ÝxÖ2³añÕΘàÞâ`‡ŽñבÆÃ~zN®ÿÿ­iMÐrMºIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/cloak1.png0000664000175000017500000000052613657750470020310 0ustar jamesjames‰PNG  IHDR \B- vpAg #’AmbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>áIDATxÚíÜA‚0ÐÖûß7]IŠˆÆ?ovÒšÔ7ß(ZÙFÚɤí—ËQ¥*U¯zUªRõªßâhÁ´ë¢bQ±ŠU¬b«XÅ*®Yñ»¯^¯wŸL”Qbf(1¢ÄÌ Ñ£§½&H A‚ $H`MÁÛÈÅ” A‚ $H A‚•{üíA‚ $H A‚¿ÈãõB™½áßëù‚ib»u3hÍ 4ƒfÐ šA3hK?ÏÀƒdÕŒÍö}ºŸ°¤ÍÄåsüê,?@•&Å/‰ˆÔ'ó3£(ð9ÞIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/cloak.png0000664000175000017500000000123613657750470020226 0ustar jamesjames‰PNG  IHDR@¼á\XsRGB®ÎébKGDùC» pHYs  šœtIMEÙ L™ÌIDATxÚí\Ë–ƒ þÿ?g3zÐ!@Àë&Jï# ¶§-13SbÓw¾&èƒ&èÃåÕúqyXÏí/J¿†ºÍ®.o–Ìþ×­ýs”A”A”g"œâÖëM÷ÍÃ*Ô(û®Ã=]ŸØpy ƒÓjÙ”bïñ83ü …†ÐBCh¸ª†Ï¸Ž†µÈ¿œ‡Rws磖W쇭µ =uÜ[#!!¡)Â.ø&KˆD_–€ËrÍ !\TË"&C]nB>5Kü»%ï–ÿÛÏž¯OÙ4¥ô“ãæU4ì¦ —á2\†Ë¥´Ÿ˜Žs'„4¢*ÝØµ< ÌÌ!„[”ê_w\3?&“hw^ODtNˆ(…ôu<…0¥!Oë6)0Õ‡t›.„ÒZþËÔÖ²{Êbßm¼­)vKÀ½wÛ Ô@v 4„†ÐBC[ ãE;Ž5‹üí|[—_b Ù <ÔˆÃ]–F2GØŠ”€p—ýWŠÿnã¿c§P5› TA ¡!4„†Ðp †ëNXÒPþIDATxÚí]ͱ$5Ü#Fpâ&D<08sYÖ"£X5íÉXhXïz +ˆ’ônZí2Vcke"¡\>¶EdÐŽìÞt¿ÏKÉV2V²Š˜U2<1%ÛÿŠŒJ¾µ‰Œ…’½ò‰)±×EMye(zS‹·”X3ÎK‰µZß–c+ 1‰$ÛÐJžp’žuY­ÊB²bIZ^…òTÚA9‘•Ú*®Ø°o)‰“†‰ {2Kã)Ùç©¶ò±^—G¼k'E’ò%ÿ-Z޽-Ù{Y[¹Y”Oƒ¶~ßÕhpo„mòÜ/º²R—Æ%‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ‚ ããG­ ÂxPÍÏpP5œ$C(¡G†‚ ‚ #áO­Fœëéñ§ÃÖ%ýõ×åªôiKKÿñ ìßiéí|€t]èÉ?'‘dßÇÑ_<[7ý•–Õ/wzÄÃReåÉ¿Ê/•P²’a—ɡ½ÚF`hº†•/…ZyHƒ•ŒílŒýÌ ßÇГd%Ó¡•?P&è®Ïw-ÄãMükíçZë"bÞ!mw}äí-ßtÞ_÷=?÷CN¬oöâäÉÀêhíñ¿'ÃwïL×-1þý½oÖû—N# Ûa&Ñ ÝwŽÎÛáÿqFÞG`ûœû¹3ùgFd ­¬¾ýöqýé§ÇõÇ×Ç¿úªe<ñé òêMXÂ…÷$-2”ë=ß|ó¸þõ×ãúÛoë÷ß?®i—ûë¯kóN6¸óËÝïvé-aöïÅfä§ÌäFÉ MÆwß­’ñÃë㉆DL[?êX2Ž=¥=yxòÒêSñd<ùq‹\$±Z‹#2ÐEܼ~K$J“Ø¥·×—8!Ï!Ë«©|ˆwL†uÍ@Ëý´4$Ë‘$ èå†ÂYzÐ( ÜŒ $ȵM‘Á CãsmlÁ*«˜O^NM ­½ôðÑ}¤}gì•›ÿt 6fœ¥„¡áíͪA”y!C]bÆñ„W&êÞ¾Ê/½ßb²û/MÔ&‰Æÿlió2giPòzV62?¢dÝ™ØÿY®>ùè# m.‘i’ýŸ—œdܧ:¼¿¤¾“òïuûØ{šôß\”Äg¢üýn  ]BBaºàQk Œ¥D€ ìͰ”¼¦‘—Vº¤´¥´AAAAA áÏÅjMnF*þý %ão¶<á­“~Òï‰ÿLåú/…_n_'j¡g/—+˜”RBÊ\=ÞDƒ<¢|aƒÈ訢­4Ü éãÚ.Ž÷ǶmUÏüÈ+c !n—úŸ¿CŠi,1ž6¿è½ ¸þo&òýûŸ~Ô°®4ø×¦çØ¿{{z/ACZJ{µ•züÕ¾Cжºu&#}]/Û2ú\›°}q1*@¶ÄxJ¬º{¹8þÙÛv.Ìõ￵âû+" £ uCÀ i¡s×òWûª|«/KÌË‘aª·Gw=î.…úM­=Ûòrc;ZYyQP+Š•´Ü–ÔÏ?KŒýnçÆ°L¼xX”_tÿÌ#õ•'ÆÊÊJ r‹ïŠº¼5rUsm¶´<çAdÞ\çKɾóŽíÊVy QÑäý“-ëä›ci/I{zbÂrÄ`JÇ5™mðdl-D, ñ²ò./r|ýçÚÇóVäœÚN&rdlebo`£¥G편‰3G–)×,ÌÇðSzMå2±WLK/“{¯©ôÓ=%“Å"V° ËK? +’¼­z 2¼LlvlB÷dø˜õáŒóWùÑ(È×Ê)+oÒ§TPÇ.lN&ÐýÎdgñ',åþÕÛD^AY2¶m ­'sLFœ*OÞ—HLÃÖ¿Ú{Vùé7áÞ׎ɰ?~¡$"÷Çö öš“KœïZèüÍ,Ç’áãí|Sí#ÓíÉð‰EÿmþÓsßÄSÅ7“Ñ*Þ®!p¯š,V2°õÊ…û0sr2°Ï‘±ö-/³^)yJ¼]9JÎç£ýAÉ@'‚JÈX(ɧ@Ž£n¯¬ìÒ{ž“‰hд 5ñþ]$G±7ãæ"™À1G S’6‘JÈXuwœêˆíÊQ»no-òÇ¦ïµÆšñ|ö4¿9Zš )Éææi`¶›¦‰ÆQT¼±ýÈù?¥)ô²d»W}ü‘¸áN{ßæ˜ 4Æm?ŸŒßÛ@ÿ^egi>‰L”«¬cJðnDZf(Ì%W°’==H>JT–§„ßGùàÈ_ŠUÓÄ(‰Ì(Ƀd%ÞKÏÓð£áJ¬w~9Ä–',RM/Ñ.Åç[Åõx„˰¢óQ±å8CÓËoKŽ$†P&˜‘†§"#þ1ž’˜.”cSOh¢=P­C¼Iå)A2ü„XñeSʇ¯gûˆœûI=*—ž\¼LX2ø;‘¡Ê/+s=gÏêÝ“ä©ÕèÚ~?¬÷;áXù¨©•«yÕ8 »ä£fQêFé§÷–’)ûˆØƒB×·&jõY(Á~›ÔÖÜw x[òÑáP*—­(™¬­æh_´‡\ªÇ© ‚´êÁæ²DÆÒ€ZzÅŒ:àt—­Ã”¡™ 2A Ú+¢s[›q§[¡Ø0Ä”ú_¢¤øþõ§ª˜g¢£r#t…žøÞG'©ì±t„½Ê¿'¢í…$©þ(ßÔ…§jú¾k5z™9Þyî,!ê†SzÄíIºšÇÛ–Œ¤GêJ( #bÕ:±YNˆm@ÉYô\+±|ÇçãéHY•úuÓ˜hdBà›m£Š –¤xªcꇆ¯åýÛ%+»ß9éÙ“äU#%ƒÊG,ÔH)•ÈAi³‰¸|&OŒ¿-xÅ5¨”Ä"GCÀ¾@¿¼y$"ÉâžDÉ4dXŸäHò‹âùEÌãžH\Žybˆ’Ž*‹Ïö0‘óQo!öKGqˆçô%Œû;|Ä‚qIci@ý¦økIÔIäpP:ï¨y 2Ôì·Á S¹Gà%‘ÊHJ2˜,Si²"ŒÜÄ” Do'°ÛzÜ_¯×‹ó²|Ì)‰¬JòwWYˆ¿(X&ò†åŽlkTû΋£‘o½RC V\Ç3npyQ{ÎNäÉð¯“Ûè~ô®'"õ¬|°*ëJT>¤bT¼sǧ&%%ÉÊ2ù¸Ít3?€ ß™(½]|×[FVΑÁ †ì–‹õ{XAÛ‰˜~ÛŠ‘§z2øøã™ˆSrHAÅþR«¡¸ÈÏ顬. gÉà2N‘LÔO(.Ýèe"¤ÞʪK^–K†Ÿ'£wîÀOà²jŒÊò?£žŒøXMÛV-ÕÑ…’Ø©íGF}/ÞòÙÇQOuÔüûfûQhÓ´=×äÖ|ÄÈ Ñ†OÉ•pæ0Y¿¾<(‰r4c½á|†ê†¹L©ä«$²O’ó±E»Œ‰Õ}úÝKFœ.¼A2¬|äfH²ç0|.¶ÕOb¢Åñ¹—ŽSüjÊ~kÈ`Ž‘µ½Ëâ,oLÚéçûuŠÃ[ú…`âçÒ®´q²„ÏY!™¸a[©$,“´eÄWZð*ž†Rkq©LÄ©&‘n‰á@þà%ŸrçSëh.Ú@‡£ÏepÏíxû…‹ÝJ¦&*ö ÐwC£ÐЪÕé%ûÓ‚<%hçÎÞ›qB%–9††î‹K'¹òUGûɬa÷éülWOUüd!xyoЋ$#6æ% öãVòÌ~xéÕ¿3CƒŸœ9„µ`È(¡„M¶ó÷,_­„ºR†;ä™KG£d{T P:¢Ú~îµÓ”ÉÄá˜ý1%gÑó'ÒKÇ40g¢bÅ8YI2sר†FÄÍWl”Tiø±¤ûü+¢6‡¦%þÊë6j&Xæ]j~ Ód唌²â£\nJYnÀ:WÈOŸ™Æ\·òµzÌ\âCKŸ©IDN@/%­f.1±}œ³šhçƒÿ ¥}DJ]U>?¥0fü\Z¥Ö[M^z¡æF %L•5ÓT"á\;05+•VžþËu”ªQ ¼Z+ùEW«ãâ¨^BzQ"‚ ‚0X=aH(ܶÄ" c(ÿÝcóçÉéä mø¥÷ŠÚžÛœAÕÄìîÙóWÌQ³›kŠÆQA±ÂaNÍÆK®]žo"ö4 V\ž´¬L‡A¦Ó-Óosù&“«/¿Üèq¾m]ý‰ž’'fÂï²ù%`ꂘsSÌ©ªÒ#–ßïÜ1Ñ3ÄÜL w uT3ª-¯|JÇ15í|î•§US#åSZa?1ÑʸíÈDû#þ|§&Fï£÷ä;Ÿ3ãËÈP!~\Ãq›L …À¥ù‘ö¯:ЕžÐE p¸&x1>Bfê…but®ý¹hüœsq%~Ã'N륨™ À”´”–$Ÿ«þ‹'Î\ŠòŠ£èÇx¥ÄW•^[•êÜL 2Ô¸-Þ1¥ùW,£¬ëê ã2}FeùÞ@‰Ai>^&âø€§?K‰Dù®©@ÞŠ\±[2ÕT* m3çê?¸Ù‚—È“‹eÁxˆU) mk³ÅÅ[Ç‹ä½oÜJièQôÈ«µ8ÝÉÇêͶx‘dxoН²æc×Þ½Ðiód”ª¬ø†+89†îÍØê=㚘kȨÊG¡^„¥dŒ0G¸´Ád¼Ó F&|Žs2q×Ö s`íÕÇ[XƒA&ùQWCoØ‘â*5æ Ȉ{ªñ]›FîÝT<òÓš‘ÁÇÛüT‰s½›ïÚTŽar½%£¦ŸïÎŽ°ƒÉŸú)A1G—}‹É¹«Y+2¬Õl¼£Ç¸tü$¢ñÛFÄ£Kã~r]ÈðiA”D ÁÛ†Ðv#¥»Q,M“1ùËy›mÅd07b—­¤˜ŒØŒó‰îñ)‰7ÎÝ¢á3û¥è`Øã^Ò]>2¦„'cö^9 g0aNL†¥Ä'áo›d× ¯?º“ᣠ4‡,Þ†|&Ï )óÆÓBÉ3^ú9ªí˜ýóŽÌœã;g9jäãúN öÛ¦ßëW£™ðY~ÿ%|²žàsßêúØ%.½hÒq…0ö#–-OÕù+f;öÒÌe©ÆDû€ç¦Ãô&ãš®—&–™9¯qµþ¼æ¬m©¢ž&SÀçjâò¯s”Ä“Àj޵űÑd®ª[=W‘WC¯pÃmý¥–;>éͤ㚥šAWLe_É™öüDãÉd"N5ÆË}nFkP?g .H˜ É×~£M*Þêð§©ŠUß9?íR<ŽÞÏÕÐ1µÜmçúMf´K}­sÄðeô¥Ó–ž¤KUì­×W–öUˆ÷¨ŸJjJ]øÊí¶°š%ø ø&7¸¼ç’ mG_1Ö¯I2íø¶­è®I¢UqrýU¨š¹$†Aávü‚aŽžïáKIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/explosion.png0000664000175000017500000007125513657750470021165 0ustar jamesjames‰PNG  IHDRB”°¬îósRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÙ $Ž ~A IDATxÚìy|åýÇßÏì•û"7!YîK!‚º­¶µ•ÐÃjkëâÕÖj“¶ÖÖ"þjµ¿¶²ñgµµ*Á¶VÛ*‹UDëÁ¢@b9"7É.!@îûÜÝy~Ìl² $t?¯×¼6ÙLfæùÌ÷žgž/„B!„B!„B!„B!„BŸdØû|~ª!C„$⤤¸ÝîO/ ·B4 Ü n·û¼%C†sÌx6ÁÔíЗœsAØj4GCô-V«Ñï÷ÇxÚ<`N§«Õ:¬Dˆ¡>ÁH*…ú,¸-cúôÌo¿új•”òÂi=š™§ïTܳÿ¡"ÈÌteRJ„ÚK55+ à³P˜=nÜMÕÕEÄÇû”zž­Z·ÔØšuË‚ÎØí›«æëÅ‹M¹¦­[·«ÌP“0,D0wéRoî-·tÔÖÖFÛùüÅãøµÏ¸w¢Ù¿/)b߯9œ8¿EùRX\Ü¥²4)Hôx<5Ÿ¬Àª¤„½//ùÞÞøCÅþÝÓêZv#»ê#¥÷ØéÛW]·.RV'¬©ð¼}ùÑ£G,¥œ/åð¹Ü!—92çF"ê-Ï6gŒº1c\+B,DˆL|¾d<žFdÍ›$ÃŽ´&þªÆ/Ó1™L }>_mV–p!„í o`ì˜ÇÏâ§w^Ÿ&¨¯ÿ11·b0¤a4èêò°ùãh¢ÍJúÔ˜Ý鉉ÿÞk±|~\DÄ/k?îÓív#sÝ”»tF[KÄMmñÛ!§¶«ë³tu?ÁèÑ£INžJE‰ªª*¢¢6OŠ0ïü¢Ç³R÷*¶ ›«ÕŠÅb‰Tç??§%êë†[mâSR" Z”X,FfÍÊfúôé¨j2²µÊ7¢ª´´´VÅdù{DvêÆæ$ÅÆÆzk|¾£ìÚu£G«‰í$&v1qbééí ¶Ð^¾wrV53[È¢O€ûu$³®=a~„%Â3Žx}‘ÔÕe_„‰@IIÅ$%9Q»¿Õeá=ü´då$ÂívSšt0³Æ¸\m3^ö¯ŽÖ¶ö0µ˜éÓͤ¦ÂáÃ{ñûk€*` UU1um]Yk 3Ùô͹L¼A`–ÃPØÃ¥ƒ÷—±ø¹?æÄ„=5*îŸQÑ™)¨¦ETTd’––ˆÑh¡²ò 6nŒ¨óû3n2W|üÑ+ù?ÿ‰ü&xÿðª(¢ë3  ·Á×êê~ÕÔå—†1W4TÖ%NŒIþXDF$khD¨‡¨®—8ј>uêÔ)“.>ð^AÁkWÁ‚pUlQ 6ÈJ.4ñU0§Cl<´nþÛßž¿féR£ßŸ±9:zKrw:ÇvÕtÕw]SѲ„Úæi¯Lš”1Ø÷žÄ:xQh†¤¶°O ° öž‹Vn†qÁµ)1JÉ$éåêŽb—½ÿä<)¥RZZš%¥4öëb_°%À“]°” %#ùHßúħ®´'CåîB!„B!„B!„B!„B!„B!„B!„B!„B!„B!„Bø´Ã®ÏG·‡ÖÓ"!$'%Åív‡H±ƒt»Ýò|%C®žäEº¾äœ †mÙ„ÀÀœN'‡¦.2×ݽÇ\…¶¢H~~¾øÄª‡Ûí–‡CJ‰ô8Rê[QÏø¾—÷‘Ÿ w|<ºI8~³é[!í"Ã&~²ÉÜào\½‰òdát:ÉË[Å.<©=*cµZÅ'ÂFô&Á<¤ÿ|E÷>YYÚgAÁb`1¹¹•eÅãq2¼FÀ(“PP°­ äæævÿìt:ñxÜdeY‘Ò%/x"ºuPô¨a^^°^ß’Ь>¿ß2l6lHu/`è„ÓÊ*äåÕ S‹ã¤ÈãÁét’››KV–ŠAÌÚkêE„Õj2×ÝO\°¾ŸÿX߯d|b¼†Ø€ý›…º¨É‰zpq¨@[¹h¨¥bX¼†, Ä K¥”.=¦pé[_¸zâ ù É^AQwàT„NFð û’ÑdõHÔî5vB„dz’žxâA}CW“õ}T#G)z<ÎPÖ6”á” §Ó©­TX¼ XF;D€‹‚‚ø¦óCAÈG–‹¶Z­Âív˧>ø¹¥„Þ r©ïv‡Û°ÜÜ\rss»ÿ?Êë%@Y8ˆÆÞ8Ô$¬–©IOµªgÇÀÊcs—êj²­W”œkØA ö ­x² 6‚<8ÛüÔ•ö>1.2„B!„B!„B!„B!„B!„B!„Bp†(€×@„Xб^;—çð*{ŸÏ!À/.˜»&ùäö?-‰Ú¦ÿö©$¢PÿôÃÛ0 hÿTµl˜&aí·ôIbw|B,þiO8 7ø¬~c‡Ÿüy¦ùwÖm}î¾¾9TçZŠ-zIÂVÃeÃq.ãyÎÅ}@gH$B~ ¹AÚ¹s§ðù| ;;û¼%â¬l„ bR‚ý¸R„…Bˆœ?þø‘ &´;õ7ÜVùùùçœålÅIÂ¥òú’ ’’,BÌB¼$¿?~¼×㯗›-“_ò ËÚ6ãÈÙÎ|­×§Ç‡ƒ’’Ö®]+^ýõn© ¬4p^ª†„ N@iŸïG¶]rÉöŸ~ÚîSb[Û»hY½à£K¬]þÆ6fú1~P4e÷;±{~²tªUY\8õÿ  >çÊ+Ù_ÞôºéíËî™a…mnP¯xe½¢(WŒ?^x½^9*6d6BjÒñï·7Ý˶—Š´«9Xc`Ü¡2ʬoEì8ñ›ùcÛ~ €J[ÖƒãWßžÙ¹ï@BX{×þ,2}ýõ%£Ò“o°X,uªªŽp»Ý½^j¹`Œ¥3èâYõ’‡oÍšþyfΘ¡*@z*ë÷BÚ4°Ä€'éBQŽD==æÚÎdv©_¡-õ¦NÇãé²Z­–¡2¸Æ¡&Á¬ò{ß”[nµÄŽbÓ;ÿ–3½¨Æp!c¦% “¡KD›2MÓÆa#=öZvlu8ê3ÕÄ¥+5íí“æÌ™3ª²²rLIIIéPx !“ˆÝ%<†_¦Ç‹Ÿû:¤L™€ˆVÁ’ª5“G^þ9—¿ÆÕ9/á°W€©ê((-ŸÅU·|)óæï¿õÑ/¿~8çË÷íj²³³??ó¿âs§‘:º]Èïà±G©˜1ÙÙŠH¼LMP׿ù²ü7ÌŸßÎUWµ‡ð:ÃYE`<_¼I\£™š6B»ÖÖkv‹)S¦È^ËÏfÁ#£tBœ@îp©F®vÂcmµÈx3„Å#”0鈄ié$Ä-¡±ñrââÖ1cÆ8`"pèfAÆ5V|ª[J+ß]+ñÕƒ*aG9â $AGußk;í8bÊJËšG¹ðäÍ“iŸc„Å@ÜɚʯòçÞ\GT|ã $$<lBóÀYÀ à×ÃUÂâæLˆÔ\P‰›â‹G!ù§uSþT Y…Ot°’’áv»åêÕ«ë·$K9KÉ…$’«®·¡ªS. †"r¡o¿@Ê_òÜsQ\:ÿ*ü‚+³×"ÕîÃÏÖÈÒ<ƒ¶È³âÆÂ퟇§gÁß“`Öɇ1cÆÔHÕUú÷¯Å¿¼û^0K`Káá@ÕϲxU{Ÿ—À•ÀO©«ëâ5Eˆ±ÑЩVüFKw°Ú 7ƒaȈ0·ë4KZq3” ¿‹;À7éäõ1mÚ´D\_6%„wr5¿måø|­€ø ° ïCÝÿ*êþ· ¹ƒˈ‰‘Œ—¼¹“À‡Ë¸Ì×Å‘À ^u`¶ÃøÏˆTð|O¿göÁŽ#öéÛT{!#øo;4žN\ØÍΖ3¬f`c§d>&زåz&ŽÏ 9YÕÊ¿”A,´•è€È ¿Ôðs¾ýíEÀàéýGJÙ”lî9G',1Áw£¡óHû;¬¸ÆþV—˜Â3$Â0 s{šøöò½?\³'öðdñ~Ž)ÆÌl&2òJþûßVFŽD‹žXƒ9ú"Ìr,Dd€1I·Pã€`Ó&ŽÖ6D41ÞßGXþïÙš.7\¿-ÏÃÏYpR"Î%%%ìÞ½k£è8ò·¬®®7¨6.õfa2F1rd-°]»tóDH¸ŒÀ—$݆8€– tÕŽßW¬‰az<óg}–6ßZíßW¡ìl* œ÷| ±×­[‡¿³yÁÅÕþ½9ClK '>HJò?Ðj±iÀlàߺᜠDë&«8Ô€j[!&¶¹ùøj›`Ãk°"Dá >J’Û™Ö$æÄ…S•Œq‚¸YÀ^´5"$àšuól¤ç âÏèøß\~µÜn•<Ò`0ðÎ;ïd?^X­Vþ<È$ i=¢­­­Ê`0Üb0>HNN‘uÍÕ4U…W% Rç57\—òÙÍ´Ú߇ù—Âæ÷ÀšÆíWÍâ¯õ]¿¿­£#íàm«ÕÊP•醔ˆììl6oÞ¼?,,ìÍ´´´k>FEiübek³Á„jT™ÛiäÊØkYÜü!Ú±…d_”ד›–Èê2aS~ô£{Ÿžu8X­Ö ÷¹FII Ó§Oá…Šš››žÿ\Çwø[ƒ›¨ðhRÇ?ÄÊÇ™XTJ¢WEÎËÆmnÈu\@Ï5"%%%퇺Â`0´fÝ×ëÏ-^üM…?Îtðþ6·VµnÎvmù£K“Ãqþì´TcÄ™Á »ðBH¬ò^î"Ø ùQøïw@Î× ¼õOæ¸}Ï?à8"fŒƒ‹RáÍT=~nˆ¦ ­†ÑN¸þTû=£­[÷=;ÜønÉ’c Mxs\_›6 ÏŒ:u€ûùß·àéZؽßñ§Á¾IvÎ߉¦Áªñ=% ~~9”^âœàtž}ß3òáèùxÃÎ¥{'DÈy®Î焌B!„B!„B!„B!„SÁj›B,ì¡ö×=CÔê|Àé¬("Eè þþÕ$„BV!„BC’’YRRr^[þ³]Qä”Ñf8ó5w´¢È9X‡rýùQI n·«ÕŠÛí†u¹Ì°öì“•p:2øûU8ÈÉÉA_'¢×õ9NÙ÷»óžˆà‹g].ä85RÜù݃Öç]w_ƒÇÌÊ×~wæ#+Šä:4Â3ô³³³ÅGD·*ä8±Z­dgg ãøH1sžNFªÐÚßö[…öšB@²†B*ŒÃEhoÊ"ä¡¢ž÷Â\Ú]ì·Í ©Ó©ÁâP‡Eš¡ÌË zý¿øøc9º©Ãá999C¢b¨IèýO+‚sôÕk—~‡mýHÀ‰HÐ )hÑiàXc¯`p=iöéq {ÂëþbЇú‰+´ÏC®^j(ÎRqûYxˆa%Âápôº[yóò{¹MÇÝ4õ¤â6]\Ýeõ‹ C™‚i®‘““CNNN÷½"ÍbÈ:f šzÔfõ\ÝQd€½b5d$ ¹j”””H·[3÷n·û8©!‹Ž×óCE½ã‡Ã!¥º –ˆ n·»WØ}¼íè1Ž}‹ºÃ¡^QD”””È@ѵoÄéq ³ôÂã@b…á&aØÐ×p†p’Zˆ… öOðô ¨ì W„”áøJÐùlD?õª;„(ŸT2Vš!|NÕ9„B!„B!„B!„B8%ôD)xÉ÷ó¡ï9…ËåbåÊ•8Ža]\w¸ÖݰDÄÇÇÚãy›­g²‡ÁëƒsÁÀÞçç¾’áü¤Ûˆ`<þøãÑ>Ÿ/ ?üáw Õ…9õm¸¤í´«Ø^¯wLttô»QQQ;—?ñÄ÷ìp‡¾:Ø– d;·¦­9Yßñ3!¢#2"¢9.)‰ÌŒŒ'üZß9i‡ñv¸6°ß›ƒ3 %u°H°Z­'m³}ÚD„……Õ¨ii7l¼ÿþ ï7ü~ ü/Zó‘Kt±Þqí)Êé'òo˜ŸŸÿ«Á "0—kH<Ð×!*R¿h;Œ°C¼]kè‰âÎÆ-¾ k¿}Ï%žzê©Àuu«ÃÉÔ⌠˜ãxOÒ5ocº°“ék°DœM¼²|ùò÷^~ùe9ÐXäŒô8;Üâ·xöw°¿8cåÊ•444díÛòòjûþOáYÆ'~úéG’SR~ZUUuÕwÜñî@ŽuFÏ>ë>£þT$÷êYšk#66)åݪª^¸À¬\[÷çíÚ„sìœ^+™›!êG]ôÀœË/oÈÈȨWUõ%ôŒ-ûk𠮸ö'Á$ŒÊµIÓµk‰åš^設¨˜s·¹èÆ7û{›Û†ÇéZ D¡uD°tütÖ¬;&ߦðz[¾uÓM¿"ÆÕ‚é=x³2ûSƒ¥¹6–9]Øá .  aáþk_Y5Umjø[‡”µ¿÷½Ž®ºº:U»˜pî7ÀÍ–IÜîæ®Ù%ùùÇ ,p#ìà‘°*"#£^íèØû§šš—†,²ìGü-¹Ðé Òï`,| ¬(ÒììÎ=±!õŠ/RYU÷¥]ß¾Ê>:_͸v¾¨Ù¼‡‘Ÿ™óã[æ½ù»¥ùÔ­("aõ‹ÝrRûa‡ QÀ×$äÂi¥ÉC2±ÓI¹ùT¯v0O˜ŒyϾï»é_çlŠŠêšçïò’õ_‰aBø½`4ƒ`0ÂášL*êGã~}3ÞæVÏw¤÷Ê•W&–¯[Wýwð÷%Âe…0Z'þóÂÏÏ v-¶˜ò.Œ8ësó‹n„ n¸6²s÷¥?yrçóT³{ëX"ÌpÑT0„†Çã÷š‘ ´7CK9ï…må3øð¹m46Ç‘1 sltkuQÑ÷Ûae$ø û¨'P—a%"p‡Þ„¯½—VE?Zý’%º«½óöÌ1|+{ŽÈ¶X$˜˜Ë!â}ðñW ~A×ÑRš6w’8® _}[>„{ÇP¹¥‚Vêg›K=O†Avj®­ùA§kèç)ŸN(x!‹à!þ ‹à×_õúK߯µî!d×{BÊH¹k‰”{o‘Ò;CJy‹”òëúö )¥]JïϤl›'¥ûë²õýï˶MwÉ¿F–ý+Êù£Å7üòö0³ô8@‚Xšk;ãÂÝé'Ÿ|RœêÀKsm8óa‰à÷_+î½æšmÿøžEv¹]ï å1¤,ýŽ”]¿•Ò·LJù3)å5RÊïH)Ó¥” RÊ1RÊ?I)—Jé/¥%eQŠôïºG¶½Šw÷2ó—¿ýÂÍŽ9óµNÔ'ÜýD§ƒÒ¥ÉápT¾÷Þ{JDØu"–Àí߀ïÝ{íµï¶¯3JY„”›GKYw‹”)夔BJy¿”m£¥¬¹AûÞókýïí*)åÿH)–RR|FÊ}_—mNäOS¿üÂeÒãЈXšk;an‡M·ên}PlÄ“O>)îºë®À2¯žBȲ¹Ê{@4CËŠ""ïðêç'¥}óæ;MÝÒJÆ7îØMÀ5à“ ÂáRŠ¡bXL ýà‡° Hý=¨>-F4F)àw@éçhÙñWJ¶«4µ!ÿU.ZºÚ¢„P2]Q«Ç*j^ca¼ý{ð<ié OX¶½¹º[Uë„|(èûÈ‹ÒÞúÌâ£\eƒrX÷÷h ͳAоÚÿ Y)P7d8$AÅ5`I%]kª= m; ¦‹¶íkÙú!¼±ýs/ÕºÞÿZ{CËÿ*ŠXžuýÇý·%ùùo” udŒ‘¹6Õé ÚÛÚNÅ&·hôÅȶõ@ÛåZÂe ©9ùkÔƯË×!q)–D+‘# r„'…cÉü&tI-eOºÚŠÀxˆÒyãèw™=¶n‡´+¦•v·~)ß(„?Õ·…gPi;ãG~Á.87ßËnŠŸ2á…KlU,×Àh[8däCÊ+Ào€LP/Åíáè@i¥§¾ª@ÇðèE ,pôÛ`€ÃePü>X à÷;ªÞ\…0‹=N×¼¬\§«ÊéÏ‚ïLžÑú}Jé¾WLQà©Ò¨ªÆØ­n0ÛɸâYP~I[ l. #>¿š¦ê÷C ꢡ*R¥ªä§lxb`ÍÓ‚úÚ{ÿ•…»c/»~žAQ„ç•÷(„ä³õgå€ì=bÐVS{¤¦aäÅ#F™Hk%!±á?2”T0½ Ìã4{Â÷ošæÃÚ!aø› c ˜.†ª¥¬þ‡ :šë‘ž'ï7ì.»D6V ‘árù^Ïqök؉ÈÖ¥cºö„)MÏ·Ö×ý¶®!%§3>Îh:Ü€owQqÛm]&À[ –w©Zª± üÁ¨@gt‚¦CÐüwö|M ÐÖ„|ÿˆæ&^úR>×í-â­‡«\}H8gqD°TH°(ð”0(÷úýjmÄÈ9íªxaõíeâeZ²•= R«W(qÐü>$|:r æÁ ²¨¤y?¼õ>à‡ÿ¬€¶þ½½ •A^ƒê¬‰xòÉ'ŇwÝ%&Ó(Ÿ×뾜•k£ìµÅç÷G¤%0rát™½]$DÖ’=N;¡%ÆDüTtµ!V{Þço «j>“ v‚–vXó\$‰s³×Ìž´á:gˆ.„æ[A<7Hoüž5«ŽÇ“[~øÃÿíðÀݹùˆ—ÌŒÍLÝ’8gŠßÛ¥fYßEIt¸dbš–ˆu_ˆ€†VØ_ á‚ÕÐÙ.ýväæ3#h}ºÀëÎÑžqž{‰øç?ÿÙa ³$§§ü«Y³‰ð¤«°³D’ÉhªôúŒ·çÓ¶Ím[í—æñFC—qJú¦ñ^ÿñË ¨T7eÖ©·V‡…«ÑÓG¾=R¯„Åi%F˜¡ìi=“ –;L.„=K BÂWhüйO‡>O¡¬¬¬pòäÉ–Ê}ûìcÇŒùeCiéQ »¦z}ã!w›Ûöð «kÑK®3C¤7÷s7IŸ¿×Ü+a2¶ø;:¢£ù™¹ãÖþ`ÍŸÃ ­í· §=Zå&]âÚÑS° ¸áqà3Àç€?ùüßó$ã´‰d¢–§žßýîw¿óØc=1zìXÆ~ó›M›–-{Ñ ûƒb]À®¥Ú]ý±E+î´\b}cñqOž}fÎóy%ÙuýöïmvHo«Kè$¬[o£mÇÅ3ú“ïÏè¿~$a2°Òb2ý¯·lõêÕbÑ¢ErP‰ô˘2eŠ´ƒÁÙÚÒ²¹]U±~¿ šƒŸ,Ý b™Ó%¿ ?ú'¤.͵ñšÃ¥ŒÌµ©½$BlûG籊YžÑwÿ$/ï ýkŸ–˃ðø p÷Ÿí½öíÝ“Yvy½­¯½öšë__ø‚-ø‰Ý ÂétvK‡¸EÊ’z=<}äkÐq3”ŸPå–/7Dôç¢õmû]ú£· q‹ž‰ÊåË—Û‡ÊF¤Ã®=ó›êâ·+áóýíŸwþlƒ‰Ð3-ñ¸xDˆ®¼¼¼®…ôvè¸äÓ§0ò…ðS¤dÕªUUBE±|4œó(V÷¹À‚‚‚h‡Ã1Þ~Ç F.¬8 ò¦ž'Åc=öïÇ{L¼ñÆ"ØÆ + &:ŽH´Y»g3?!0çá‹ð”Þs7ûC`²Ãáø“½у>'{ Ü>þøãƒßÙ3÷{@¤ˆàÏ€];'R1°sf3`†DªëË—/¿§  à;CAÆ`صAË5N„W^y%Úd25uuuqðàÁ[î»ï¾çƒÿþˆx¢ÝPóBŸç&çC¶ Wii©Ïãñlîèè¨ŽŽŽ¶ô³ËhqA Ÿ¼þúë—¼þúë ‚¿{õÓÖdyØ Óù¦N§—ËuAÝ´!!ÂívS__ÊÄþiQOLàB!|ê1Ðõ#º‹(çCÿÞs —Ë%W®\)‡´ãjÃõîþ€%¢ÏŠ"Á/† úã· ¡ ƒî+¡fCŒ]‹}Û/À;ïp8d «Ó§!A9—7\ç ZQDž—wi8T8 ƒªNŽ3°ÁÆétÊêë`Å+!ýL§8vèoß•+WÊØØXÜn7%ý¬}WgÝ¢.@à@u¦ït1 KsmÝ$äççw·ª ^Q$xÃAÂKÄé’°Tɺ_ˆ;)¶¹522ÐL½_¤ô®tZß‹˜~Vô—C¦v Wïê| )°ždÕ“b}ŸÊüni ´¶ÓßÉ8¿‰\ÜÒ\› Ø^$î¼5Xz‚£,Dk» ÜŽ^R’9Oë¾T[ÁhHÔcÐr¥¹6éÌG[2!°I¤,shëBôÚú$è÷¥½¿/Òÿ¿éqôœGG¾s:Q_0 ½(sô`ÐgðßzíwBʽȰƒ öDƒ‘(Šˆû@Üã «‹E7j^ s‘£pǃu¸÷Â^¶#øuUÑíFÀf8§v«VÐýN«8í€j zØ‹é‡fí­ùô´Æ^¦àŽ×ÉX •ú€­Aæ­«´ÁvoñÚÿH±æw?Ð1:K[Qä¤ax¡Þ_\œ¢Ï¸r66!8Hê6Œswó]}àŽÞ 2Š]Úgߟ»%ÈÑ› ýø2–9]"+×6 (ôT?ã4¼ß“‚e=ƒH¾*¢{ ªzç¸cqœÛuæ÷ا³M κ‘›¯»ÉG4ôÑñÊÞŽ"eö ²Ž;fŠ\õÙä&p=í µÉÕ3XkŸ;¨¸^‘cÑñÇêW"º?A6çÝ!ó”g•}v'PÇI½¢À`ƒ-~O‚Õ³õïIöÅÖÛpö±Q§ëNÏZ"úºÔÖ“ì¬ßÙà;>ÃÚAºŽW¡bWÿayŠƒL½ù I<‰8•žt1«Ïš.«W;)(ˆïWúJ@_Ä;]ÝIUàïÝv$`/‚ÙÊ *v½Û«½Ÿ‡7§Â¢énòòê{È8‹–K±h¹ñeëÒ a]Õ‹ôkP9«ü£ïŠ"bIPr¢÷}e~·èæååŸ4» ¨Áê '¥¼«,e«_ÔU*pçÝ‹û`ùCk,Oƪ½çý©Ó6L[2Ãêêþ¹@¹DˆîcÔciþ‰ê.`Ý)ÕoX½†ç„k5 ¤wü8‚V:#7?ÈNôµ'ÊS†’ˆÓz&PøáÝ^O`@ã§y V]ƒ²ƒ,í3¬ýØ~¤`0<Æ)‰ÈÍÍÁŸÁjøy›;Ø=.ßšÓ£VmU’nièUÓ<™g¨Ì'P œQdˆ%¶¹m§®Jϵ{qw•©oX 0áÚoL2pˆµiqE°Ôv¿ëçÄFœØ`öÉûÑé¾ë`c¬F½TÎíèEÂê{§ã§ j®ÑÛj˜Ù]œÕgÝZëû÷ý•ù'$ädjà« ò÷.ýD¾‡CtÎ×YÕ#Nì9–õc­3zìEà3ÅÑo@tÜwý쳺 ·ÕÑKÏNúât&¾ Ʋ 2+×ÖdÎ#(7XªW¦ƒ“¦SÄ•ù½ ’†`ãè¶:¨_§XÁDØÏ°Ô¯œ- }]Yw4Ø=ØwõÍu‚¬²ãØ)Á$8t?<î+ gfŸua&\õdAƒ¶Ýñ…«§¾Ð×ÅZëW“¸É©Ä™`PTƒ \¡—Šè„êþlKï ³¯4œm‚5dDö¼Ùm/phñÁqé´uÕñjÒ×fœÀ.ô%Á>ˆþkí|[t“Ñ'>è+òý¹Ô¾U­àg}%á¼!¢¿ &#¸œ5ž,~®f“p27yΈp82xžB°è«&ÁuÅ”÷‚“¨àBMwÞ43f؉d¢ñññØl61‹9Ó3ƒí5Ĭ(rª˜>Xm‚3jó‰l‹NU@ê+­…C5ÀétvOH’c?‹©‚gû¿gšˆ ÈFæK”„ì3”“PíC9Ÿb ~:qªcž­dœ³‰évR›l6h¯œîq‚÷w8ýJÞYÕ#œ sO½ð`&N0ØïdÒpVIWîi^È`bÅH†ÛíÆívw×`‡C=ûþLÕì¼|U!„>¥¸ôq¨V‘.—ë‚2JçrE‘óÿ½ÎÁ”Œ!„Ó ?ùÆr ¸ãÓ¶ÜB_,ÑvØ×'ùTJ„ÚO6{Î †ËÒ»ùhð÷Áá<>…¿ð%BìX`ºþó$ÐVA0ÙÁ_­Í5¹¸˜V8ŒFUœÎ úÞÕSI £m)÷1Àwк& _–ðëHؼêó;©­xîEëòù}Ù=±R;oKIÜh¤íì«é¿«‰=èûl˜ÌÚ þŒO¨°1jd’lonÛ/à¥cpõd¹Ý8Ü Ø%¡X…ÿ(°ZÂz?lWÓ a—®V¡t&ˆmýœ÷¼»v×/^B“‚{üEJKˆŠÉJ#á’iTïÂdV‰ «¢¾m 1•ü@|Æ 5•3ÕŽ¶IÂ` ±ìñcÒAU©wý¡À÷!r¤”ž áH¡Ö÷¬qZÅ[©¹¾^†.ÐÚA‚*´ùAW!Ê|RÞGŒ}µ0¢b'edônÒ¯5aP|¤Æ "Ì’b ¡ y ¢ýë©ãÍŒ&ŒF•º’ÆÄ© „wÄŒ  {\%#¦‹¢/9ªõX «KaܤzÌ¢™„È CUÓ¨œð´„%D~T¾¿|I¸_ö·²­çiÖÐ7#ÊëŸ*° 6= _¨‚ñW–æÚ8°»l\RZâ§/"ã/?±:bÔ7ŽŽeáԃćCl˜Öo+*'CDħBòHH Œ°HZ:°[ðÔNd|êNb-ÕÔ·ŠÈš?uCTVꯚöz~ õ+ Ô¯Íƒ<ê™’qÆ Ë¼9×®ú¤!6¢†v’ 16ˆž”]}ŠßéÿÇ!ç=¤_ó nç/1˜5[!¥Ö[Q@zaägïÇ? µ£¥á>˜ã…*L´›;i\ Åž,¶/­Û"ZÕ_$´D“€:?¤þ¼§£"¢Ÿ4ؤç¡~?J£>A¬ý¥³‚?-ÜÜttÎØŸ ‘#!fZ#ùT`O‡Þh`Ôâ'ho®¢bíCtyaw¥ 9ZbM‚Š:(¯…q©+PÛ%I×þŒúM¤-ü9†ú‡5ÝŠû&48h­òÑâO lð\"÷½vP¤.¸Xxœ®ºUÆVx&6BOƒS¿Ðø¤Á „ ÉQKl”YJõèE™ÉðhˆN‡˜Ñº'ðA—Hø)aiSñ7—áZñ¥5°µ<ЏpIB|xªš!Âîj¨m’øŒàzîפÚ~Èá×~†7ò¼Í•ÐòÄÜF䨑DŒŒFH0ûëEZΠʲrmã¤fmÖcO'i;¡j¼ âÚ @XýàLŒ{=íÊY1ª×ˈ¨*æOÝˬ/]@šÙ"ƒú7ã1™§ž”ÁžÕ¿¡¹+ ¿„wvN&gòzT&b6ö”%|~#Qaµ4¶Å1g\=Ò«b0CŒ á‚ä)Sü(ñ3Z®¦y×ZŽÖCñÁ1²²1CH)¾Š¦"xœ.‰–óìˆdœ0D ¡í0øƒRLCõúRaâȽL t£€,:·_JX̶¯ ìý6ÊàÀ±T5eÙJkgûMÄhðK¡(¯*d%Ôn®¥²1žÆÖZj[µ6ÛcR@é’öAÂørÌâ·D¦OCtŽ@)­eBk©¨jL“,ÿ”~¿ˆxws P|U¿*½ñÛF–·iͪe6Üà‡(0=f$ŠÑÈÈ„2Æ¥62j>š'ƒÎк;‹ÆÓvàmj›½—ޤɗL¸¡ÖÎ:|f<5 u&³ò´9\Ìk?R‰¿£‹±ÖVšÚ,€‹1ž£õqÄG6RÝ ÍÚ]SÚÁb©Ç?STÊèh†ÖN„ûÃZÂ’üû?ÚÿUSü S;Oqž4iñk,~˜n„™vÀ· &Ão}~SLZ¼‡‹fé\Çå ¦ÐæîBi/§ºS3hGšÇ`Ùx€ÖK&&ÉLÚSÕBÖw-Ç6ݼeÃHLá¤Ï/·F s\:˜ xjü(üª‘ŒQU¨n†ä¨>‰ÆMX&Õ¦@j¤Å•ó‘qÀÿtÂ]a%áRà";œò58éjzSÓ«*L±.œ§„EL›²ÝxѨ6Ò¦éDÄÕ`˜r)Æšd\›š(¯W˜žÙÉÁÊ‘ø½H!*7|$›Ëª9²£1Ž„ŒEå[;*Eª^ŸhõTü¿dz¦Äh »Õwð¡UMðÁ>ˆÜK|d Âd¦|Ížs}èMHWÈ¥z;ª‡¸U¸¾¿DØ VH—…Ô&¬g;ºÕAçåw¶ƒ ©5žNÕr©m6Ño¬¸Àãt­H6z>à Ø @ë¸ú²V"£ÞóûeOsvÿ¡ªš¾ªR/<ÁbF×èÜÆsÒõø IÞíÂ& x€]ùù"Ûá©g’Gý^޼üž/aã¶ÚÚ®Q”×çpÔ4ƒbÖSú®þ*¬lÉʵ-HxîéaÒž°˜‰*DfxñÈ;®ô·wçX²ª©4¶% „DúURsf"`Ÿ¦ ë¸UØ"—Ækï{Ã3Ò%µwDbjÏÜ«Ý ÌB c£>ªþÁMÓ©®ÅØÑP´lÕס±ï×Þ–£ŠÒ¤yœZW¤Ó–¯.tc«Àm6#Ã;2®š‡)*Bû§xô^¯ýg0ŧ]”a4Pþf+¤+ãNÑý.Æ8àCÀ\¸SØô"ø»äåÍ`_~¾X!m«°V1IžwQ\ËKo_ÛößÝ„UT! Ð释à­ $´t% £ÂVj%ÖÈd '”ˆH»áïoC5×öü¨ëçß®„Yj$5Mz dGOX&Ué×Ô¢µ3œo‰0ºO´DØn}ZºäÂ%ž“|´BòÍóÃÓ¹DpÝ­bYÀ“R›Œ¶B2IõùiÜS66<>úÙ¸«.‘Iñò­ð£¤Al&4´Áæ¢ ƒDúÕ„Z£ä¿U©nÈÀ‹úk.®yø¯á±ñ-µ->š»€@˜¾C9˜¢3ˆ²NA¨PÝ4’Æö(F!›ö—ãoï öâ%ÂöÓ§e`ÆçäRÉÜ¥èï‚^¬ë=åAÁO…A!iÎÔ?u4¶`8Z+¢>>F“7ŽŽ®H"¢@DCx ”Ö@åV­[ný΃)&Í4lHæ8"îyâ ñZwr€ÃÀýN'­U1&ƒ/±hÿFÆ+#4*S#Ľ 2ì8%©Û¾ÿ¾Ùj…¢Ôh õšô¼ßu§X&VH×£ÏI×Þ%Âæ¸UØ¢tSôH›×w}³ÏŸglë ¼´œ&o8*/¦ÃǾ]еökâÜ«¾N?u× !~¤—ˆNÏF8Ž×î¾ûîãÌàÎ'ŸTÞôG¯† ›VÓ’uDJ˜ ¾ ­‚™Ö†×ð:-¥[‘ $EW^‹_ýµÏLï¬oŠEð-´lp4<„¶-Õ ç²¾ÎoÛh]"\…B\ô­Ï_S÷fÑËáJG•£²‰1Õ2"ª’Úv¨.…ÒJÍ~×–K  Ôg-ºb9ð×@uû”DõÜ{²oð‹·ÞR=N×c[ýûSJWkziÊ ã’ ÿ½ ¤¿ –vŒa~"6îRå±ÚoDŽJ1>绯b°UÂL0!"Œ¶…³ñ,$F{˜7¦”‰sT¼•°u?¼ö,$-¼š/½U@Š ÄŸ@Ä)³ÏB-×øb |¹¢”-om10›$›¶CÕýI•„èp»¦’Â|Œ¿‹ðT﫪J’D^¤Y×-0¤-œ=Ù6K¸Y…B»°®ÐŸz,¦´‡3Àäp -Ÿ[€ßhFUS•Í*uawtª0¶Ê^~Ï/!N«€mÞÎ¥8e=B72«ìÉÖ"½û&ŽL,)Íu3<¨bR€6#¡ù hÞ ÐÞiqQÕM銪*ÄÏÄ$¾·Ë—b ·ŒñŬë½ -±­M­9ŠVY-µ°2_€)ë+ ñÅÅ’V²Ä¹¤—ÌQ%Ô5ÃKçSÅûT2¾p™²qß¡’aG!Œ-àÃáàμÏÁ®%x¬Ð'|ÙA)Ô°¾\ö„]ŸkkR„4ß±p=ÒéW¡Ð{¡¡Z+àãJhl£¶–]†* jf[‡å°Þ¨Ûé˜9‘×6ê'd’2kÿ)&aÚx*7l'ýªÙ(fÒ¯R¾f#“o¼„ŒØÝ­·21};>=[1(°ëðlÚ:£ ÌÈúÿöÎ<>ªó¼÷ß÷ÌŒö„X„F€Yl HlŒÇ[jg3ã&Ý4M·‰{“øFI—´÷¦Å´½m’Þ6rë&mcÆm“:«ÇY¼4^±žXê IDAT¼³™Eì- íû¬ïýã=G:stf4#Àñ§áý|ôAfΜ÷wžýyÞçÙ!ô£ÔºÇO"ƒÊiR-cO€6¢Â°.àçÀ}úû¶ûà—À&?ð)‘ 9Š“œHL b’Ž0÷.e%–-ù,×àx;„càÐâ)µû£±ûn“}w®®ö‹T³Ï¶ÃÉÄí7wä U±8ò…ÝŠ¦5 ×Ç614,h-áŽëàÐ tQ|¬ýÆFò‘D‘¨ãÔ9K#мæWì6}8ßÇd«ä8YËü–\ç“Éc©¢n¯ÇH!$ŸØøÅq*—¨Òç.èÙ Ñ äØGÛâŒEàà…MÈÁAÎÿò y‹Pºf‰X ““As$ãG ®©8À¡ÐF–ÍogÓÊ&Qìé®:‡Ê(ùå›…󋼞¡@ðFà9?T~DTL/#!Ýò:¯5Õ'`êìz½ƒØ]M¡ce×Ö®Ǽ“­U\«µò]*@5\E+~ŸñîcÌ"L߸ËZ¨™×Éâ °b”ÍËad(<Ç(N-JuÙiªŠZ-âúùoQYÔÆÑÖ)+ìbÍò&^#Ý·¯âb_…;ÞâôX˜½®¹ØÒÆ`7ðæAøÁê ³]3Ißë‡|ª-‚ëì‘Ey,>ð–Üð׈’˜½Ä" F(Oèþ.„/BAuýÍ9sœN&$‘ŒF”×z¦s)ƒãeÜrÍ^Ý‹„¢2íƒHF gÜÍÙ–ZúöìcxpäUô øàys2g‹úvé¿T­‘¢rædrRï*[Q»­ý¥½•×ֆΌ¬,Ìcv )«Ûá1K}®`6Ćï bÕBC'YP{E‘6f)—H@ž”÷â.=ϪÕP½Š°ü(†¡èäÓÕY.[_?#"ƒC¸à‡zøí§@ܯÒ}Z/ÓꙌ)â÷AÄ”¬ø,¦‹„~¿”ù¶u±ñ=o³úCÅ̪¬œ;Èì*(ߤ\ó€ñûáÔ „_&¡½Á“¿D8@H¦É‰H“¬Q´¼ 5ÂÁ§áÜèë+áõgrˆ u?íP1ÐVà*i]üÅL*f²ƒQ8ݘ _‹ÃGýðÇuðª€ç_üfã_•_ë^<Ž“žHµUÂåêex0JîÄBW„› º êUÿE^Ùÿ o±‹Ü•-ä,†œ¥ã€Ü¹Ê.Aƒ¡œ:mm…}?ËѾQá€^àZ_BÅVïÔÅô3u3¨£rdÂv½šÅs-œu*_ð¶þ}”‹#ýCËj>póÿÒdôÑX½Ã%´õV"#=\ìIP<ásî:CÞ<'Äz”9o‡Ø€ŠfŽ«ÈÐÀ^ï‚Ç¡»ÎwÀ?†î£ u!†á»šr×ßÖeCØ) Ñ¯H1Ùã?.Þ~äibñ”J yÃn¯gõ™@ðS¥ æ|cÎ-«ÊU‚X ÑÈw "r\¬«Þ…¦)y°zÄãö©Y‡ŸTÿ?†#-7Ðñê~z{é(€‡<;ÿ˜€­N‘J^¡GP÷YÊ.>Uþ6ðrCCÃô×ÚP[±!•ÿîñƒøÓMuœ7§ükH±päç ì¤öž•hNšˆsãâ}2ž°ÿn!áâHëZÒIO;×ôìÚsZ\'%߇Íù*mÒƒÊi>é‡ÿ¦v*02­\ý“È\ÿˆ> 9z°e—nÉUúõ¶çwUJ)µê{6ü!ÀÙÿ|ñÔ‚÷ÝtMÜQD\’È•¢øÍSG!Ä`RÑ )EiAßÚÑHÁ)sÄmë_îv+¤äວ“7ûû:[La{–`LK“#¡’j²M•vsªº~§ÛëñèE_þDÀÝ5^ÏË-ÏîlæK ö#w$H$´pÏ mÁý¿øH‰ ÄOÅÿLüÇDtFï>ÔVIè^îô§©g†q© ¹°0NÀ±]J>Ø%àOj¼ž×t€F%ä:A¨¨çSn¯Ç·-Ô0”Ù⃘œ[`®TßÒ{Á™Úæ+³€ßr9)"0|ð ›$<¬MVÚÖÀƒ.' %àÛë©m —$à4ð÷~ø#ŸºÄs~0äP_/B2×ýðIàæÍ*/›öžx7Hq#ÂÒ8dâSбSÿ¾—î™t¸öÓ¯O›¢JfV4ÿn®ñJTúÕ,_Š×|ðÌ•ÏK:âè³|Æ—Áõ,¥—m]ñÃm¿§œQ ü øð¯ì)½Öÿî]3%ó«ë꺺®®«ë꺺2U§ï©F<ÚÕG’…‰mªŸ ¡¡á¿%SD}}=ååå466Nq–®ä2?„+¹2>dÞÜÜ<ÈÁ,Ü]_Šñö¾mšmdÇ{ÇOillä©§žÂUýæUøÒ¸Æ¾ääñDK6óëKœÜú+qÃÍOß €ß„7ÍÍ»½ž4ãj¦^ê¿BSägLvvìŠì}–¡2§V '1··+ ‚Ÿ3&È›A±~ïtT][[‹×ë½²@Øñ½/Í õ7&ì¿kÊ$&‡ ù³ÐzF›ûË Dº'áK1VÂnóöŸ µ½õ3¥†ƒzpÇŽ)ÕÿŒ'·é ”¤IEš=úûų5ÈP 8BªXE* '†¬®O-4}\’ú´Úî†Ý`%[»e3uâc{ÂzÃÌ"áZ$%2 ³™7f&ßP ÈÖ¤Õ¬6Mx•J¨M°E¨õ[ÄäfRi‘KI h© i£Äë³HÛvAÚ:}ä¶ù)×lH¦ Ðò@0 Œ¤ëíÉNÞ¥ÂÇÄh¸¤äd:ÏD÷»½ž ª`ª%NÉ£oÍkû¹Æ‰M|Anqè +ŠØ2ù«­°œé ‚:EL^'Ш¾ã Íw<û´I£,jH ™)#ɸ"y¸r¦Ô0¿é_¿n€øALa}†á¶•!kê@´ÉWlmHŽd yôþÒíõL¨S[krD³Ao*o›ÜÚÍÓƒê& Ö8ÐS­ƒIj jç–›¥uÉ«Á¨q˜ªÖH¼É$^`6¤rókúëæ§n½v*¡™i8?«Êó{ø¥-‹0Õ¸1}X¥&~Œ‘ë0¾Ó„ò@pÂoñg¹·eºü–pJ0L9ŽT>ÝÓ4Wǘ7þoóƒS‹GR){\–lx} H}cš„$¥óÓbÝt&>™ºü3Ü“–-vv|›,Ô{!jø$†i¶&“mƒ`Òÿo~Ðþ½æªÿ ’¿3VŸÖÏú™Ì*mkLv̦‹47Nz“UÔHl0 c½òæÙ§'©aºâÕ+D’Gêõ ·)½æöz¦ÖK˜YÅ FºeŠy&ý³OÛZ‚ËPëÌV.¼^é „ù&¬’_ñ®%^0ñ›^ßPÛ0”°&gö`[D–„–éÔ¥/Mœå’(Â\ŪSØh«°Më§YvjÀß<ˆ}m¶ÄDzÏ7MÐé’´††Î‰Ötö@ªZ‡ti3…Ù•ú3l ãgúCg›–f7Ýg*Ý«kl¦n#bk ‰ ',Cµ2sÍE>SÖosÆ#(~gWxz©Ed*“ÜÎQ36eÇBéâ¤vÁŸÝ}N€bÁXk²/ }†¯-&2NhfPÌõ‘úõ¤7Í=™ÔwV`lahe}Ý‹™ócß^Á§¦ÉþÙ}>Î{}2vÃSž«ö)DEBw°Lø`žÛëù¢Þ± ø- DÀcNMó¤&®ûžà‰'žŸýìg¥ ¯œª h’j£†jÖù;Àûãàp q<.eHÀß;5mmõ}›Z¸„yã UTüƒ¨±4ÿâ/Q„‰2^v:÷þóŸ´îo¡æ!–£šù¿øDžwÀæÜ²¦óëoZúg¼÷ŽÁw?ÛÝrþ¤ Zh¦.åƒÆì½ÖçÞ˜‹Ä 4ø‚€g$¼îçÊu.ͺ£H]cãòhgçéáãoÆÛAñ¯ªa/- Ðr]…ß GG>O ø] ,¸ëF„¦Q<Ç®[øú‰£»s†ûs¯»Ir¢}9cñ Ú_Ü5ÑçÕ•Ÿ{¼òÆë šwØžÛºÐæÎw%FbQ50Ï««i¿%úô®a|áVU{€Â~È}æç«±eDࡺÏ}tѹ½òçý,özHDãtï|û>­ª8Ó¹š•î·éè_ÈàØld4Šj-qh‡ b1‘pWÓjfµ|r×)ÏÄ@wKžóÝÂÇ”Þ2a ÷šÞW6ÚÓß×òÒÞçêüVûíùiï±sDoSƒ‰Ç8´uµoP” ³‹áT‡òɯ¯VÓãG#°v‘šñµëTÇÛoÆ¡ÅüÝܰµ—£pçG€Ÿª`°fäŠaEܧ’Î_øÁò?ñFÎ-ðöº¿|øÁÞC§Žö8ÑWž_\¶tAn4,ÑDœxÂÉK‚ä8ÕÆcRÍ݈ÇÔ¿§êj¤í›'Š9Óyù®ð?üÑwÿáÿù‡[ƒšÓuÛ©À.D4&û£±¼ÊÜœh8)/uˆét¸qáOB‘¯8àÃÕ^OgÛ »ä‡ÿ "Î|zÁhÓÑ9ÑM߸÷û[ßÏwÄ?æÐ …C¡©[´—õ×ÂxŠ*¡Ô­¾¹÷ŒõAÕu ™ÂÈöA~ 2‘@œi‡þaÔÑ 72)¥õg¯opÀß%Ú=Z<1f¾wÿåÂgBXÀœ¬j’Á£5^ϱP Èâã‰ñÈ·„ˆÿ¿Ê’ö…‹çœýñ™Î5C•%í¾zw·,ÌE4¨™W]ðaªû~ Z©qs³ªÕ€ãóûÕH™ò"¨¼Æ l9à¨b´%J´§—wNB"{ά¡qêÅæÞ‚9Å_ê?Ñò§ ‡v³#žè¿ lÃùþI”æ¡Ô×—…¿[³ù¶cõµABÀÈãÛy.>^ç~­&lj,̹mÅ!f!%ရoU×9´ 5–> ýç ùäçB¬‹#rráÌEX¢AßXvŒ„€‚Eà¤tE/õÅ càr"žá\[Ñs!×?z¾›ðÐh@Ó´&‰î™jGJ5©€˜/¡‡ö¿£ yWÁ¬².èüÅHÕ] Õ§üÜ|pUï0ÿ:«ˆ s`ÁBˆID™JjÕèɼr5‡n¬Â=ÐÕ ]#ÊÒŠ&³Kùóö^6œìp»ÎuUàÔú)WÇÆ:Û>‘Xrò•0ÍCYäkôÅËH”/‘‘‹=µÑpx•€ëòag ÙN]±ÂâSUÀÖ„”7T\Sý‰‚y³ß|ó?Úî-Z¼ø/×Ôîç\Kò\øÜ³ Êç¨ T€3G‘òèyèmÈœ Aï”äCÇ@ï´.ä¥wêÏ•ž]sâüZç¼ò* Ç(-RÚ¤o òóÀ…wŽÂÂ%0Ò£äÅâU@/ä…EѼrÙ×YšˆD6Åàý¾D/cÕ«JÀ†’Úy7×ÎCT|tÕÒ£Ž+Ù´üš‹ƒÈEÕwä”Àh—D µÀþƒ0«ÔAàízÎuÏ¡£.=CUtÌep´L !n ;£ñ\â }£åäºzSÂvp J ¡¤N^€2,¸ò+¡¢0ƒC\Œ”‹xùrÂç;ˆÇâ$Úa!¥Ì†*F@åià9.`+ˆ|õÿcÀ™,*uÏ{ß…}!÷Úu-Žâ’!n^:HYA”Y¥ˆ…ë%t† ý© 5ClÎ^„¾Qɱ¶•Äe.áh!ÃÑ"š©¹ÄêÚ·èZš“p¼˜‘±|.ôÏ¡{pýnœÎÂÑqz†aa±[7>ã=P±ÊŠ!1ÐOO¸×ü%ŒŸïÚG¿%ô±3O¥G˜Â^È}–&à¤a¹[•I5‡Cm(_¹‚w¶žº°ªpżýŽ#më¶Ü¾“D +aö*<û÷+s}Ëm¬Z°Sè§3*!Hw¸­VÀ3ëþò3'±xxàTÂÁÙXœðM×21Du• ŠJÊ !upäü­„Gâ„~ñ.hrÀÀïözf Àºã^ö¨×Â:g”ÙÅô mâ_ñFcy§÷7{XYýѸ“ï¾~3š¦ÈGŽAÉ5Pwš˜#†9ÐìY•ú”9_6@oþ=p% ZÀ%4_lm‹F‡O; }nÝ$=…‡`,ªÏã“ùì:%8Ü^ÏXoT¶½¸ ^v{=׺½žkÜ^Ïï·‚óPþÊûbP ? ïÔ¯øã25–îÛn¯gð{FæÃ+ÃÍç—»œ1Îu]‡¦%2&O\€¾ ÐsJ¹¾ÎB(̇U5û%Ðämàz¡S˜6_å°Ú7@¾„Gªn^é?zîoúö[øó/ÝCcžÆ å ÕÔÅ¡èj‚˜€‚œ|·,`,QB_[œÖWÞùcàCM¡ßh h } ¸¸_âÜ„4v3jTùïTy=r¨)ôfSèv·×óó¦Ð)wwôhNË®½HÏ@Õ¿iš¬sjä¸ÂIˆ†!·ŠbÐÖƒhë]"ç—ŸÛvb7UÀ¸„³éÔ©–"XF‡Ge|<<ú‘žûÏ#µCCEK++ÿt€ö!eüœ»£Ñ(m'œÛqdoÕ¯÷oÀß‹ýÀ€Ín¯g3jò}n¯ç!ˆm *ß‚·»½ž'@ï‘S¼õR‰lýé+ŸŠÆs8ÛµŠ ýåŒÄ`¸SýäÏ…ù° ü,{OÞög C¡ï À&»Lª(v!ðõ‚êªæÑî¡;Oïæñ»W|ïûy9±êsçAJè9  04VÀ±öF dשQdLMŽ 4òŠ^3õ0pø<ð£&»ˆøM—¸>¯Æë9ü9ð@(Ü á‹ÀŸ& fµ=ÿæ÷†»ºËCÝÕŸ¯™-ª]®qŽ¿£\æáNeÜ(Ùà {x÷ŠX_ß_ÄTÐ5üe(<èözþÙíõ|שÑ£ÒþÞ¢®òZt§pm½ªÃÍþUB¯v¼v0äš[ó1N}RŸ‹B$ñ¸SÉt¡¾÷xÍ ‡§¸¡ô ¸5ëk–ÀÍwwQ–ßÏì|ð>/ýBɈ#­0ÍãtçrrcÄÃa£ãŸqÁQ+ïèQlB ±ôާ€2÷R)€¥ä ™·tô¸G_zêïÊJiï«‘ œ¹ÐuæÕÃê…pý¢½TÝ´†¸œz8Æ›‰ŒÐ TÂë À•E%d4Æâõjþæ’]$`uÆX¬€¡³íô;'5•´ù¨„Ÿ¸ÛíõµnØ?MÈø7_Í÷ú°„'4ȯöz¤Ûë9Œ;`QçY:;ÅÆß ]t‰þqè:¢=C® r]c8 f–ér{=$@¸ óYú±»‰]s'‰ˆ›ù³¡m?T®W®nð$àh«b}8¡j_¯šYM¶½'lØ%Ï;É“p.7ïüþOÍ?CÓè釅7]†”ŸqšnÉoÝÅìõ×3øÚKÜ|Ý+Ì/Âü:è<óëÕû×Ô(0̦±ìrÀÒ¸šÒší¦“^×õ}¾ e(,Ó¿ã¸Spã™cpð%Æ4M½¹õ-HĦ\j(+ Œ3˜'ø2]o¢èÖ{8~b1q R@Ǩ\®À@ÂÑvŠ3» ¾'౨2£ãfg’ÛL€Ô…l° èrk¥doŽàk»Þæ‘æƒpª ÂñÉÏæ:ÁY\tì# x[U×äì’ÀÝŒô 2r¶•þqè‚õÐß ³–¨˜ƒ™"„¾‹„¿ÖàfƒÍ¬*³e‘HM¹xE€W8äV”’,+†úH¢pL˜š€5tÔ×ÂÂi꿵ž˜ˆ‡£8¢,ÜX}|n[QÈñè8T®Žw`4O=~}µE‡Ç^“ýMÝbüçtàÏ0î×)£-n¯ç. à,È{¦`Þ,$Üï‚Ï]X,Ûz®Aâ@è‚cíóp:ù­Ót;˜„nØŒ œïŒtQ]znh<*šRç³8\*ÝÖ«Tt,‘·§éDèéßô£Ü|Ëíõ<|9RýÆgªõ#Sn¯çÞîÁ‘ßê9z6`˜.GD\è_LKw.¡nØqlå#ƒßúJŸÌŠ"ü“¼ìtäÔ—,[Dxœ›\ù”ÓÁMšS‘K<.ç8îYאָó¬ÿ‡Òe5ÿ)è‚?ËVcøÓ¶ÍtŽÜñ<•xÞ.@ÄNét$蔜½¡îåä¹"y/¾¼ïŸðw¡É²„Ô@…¡Æ³Ò*k+ IDATQWqÑO mjYHkÿ,ÎB|æ^¯#}#àrÄ)Îí­Î­,ßè*.ؘPÂìà+À7­ÝfJ zsߤŽ"QX ôEàÛóËN‹ÂÜšÆÀ(ô Í—¹t±š$ý¡¬âÆ› wöüàÌ«m´/gVa+o©âlK)Ä!§T½¯wXBÓ:wî·›j4xR¢SàÅT‚2U ‘o•jé(2˜…w rÃ84ãX[=B$’§®õzÆý°wºàŒ°ËnãÔÄ sñ*Á-›%O]Ϧ¥m¬¿§‘¡× š€wZ8öæ©û.pö}.> å–:óƒ—Û ­‚–>ofûüö÷a»Œ>-à‡¤2á9¡{Þý÷xWW¿úÇÛo4â ]Õ²mMå}ÊP8§œA×J¼…QžÙ‡w #à¾eâÃ×­qï|-!r̯*¿pú/¯pWB‡¡,ȤÐÌÜL£Æëù9ðPñ/»ù§x,á´„>s/µ˜lÀ ]÷|¼O”.®üLëÀRâ­'˜]ÚE4æd<â¤u8°dn>ÇÛêÉÍqqïñÆ<2ïöpå“PÕ3SHÛ ïAñ?fQÐf×QÄÛÀ7%„?³É@çÇÚo6¨¡?JLÂ7•Dop{=ü¤‘]»Ž|mÖÊù½­ñMTžãåã‹ùÊ_ßÁÂÊú?Ñ>Æ+_¥¶òXoBËëp èxý°nˆÃõµABà2ýËòBà¼r]ú÷ÁÁoÂGt`V+H#Œ“gIƒ<ÛȧÃðå-[5¹t]>µ…¯“¨p:´ŒÏ~9|Äõpä/šBoiNGSßÀð·z›B{Gš[>8èªÏ[wý~z†çsëšÊÃP7TÀÅH`°ôö׉G6.\7›’ë¯Ãs÷ÙÜÍž;û›B{»›B?u¨Vx_o‡.n ¾ à‘œ¦Ð£ð"ðÀv·×Ã@S·×ÃPSHÔè>PÙŠZ®½7dœ½¥i7íÀƼ‚ÜëN÷¯.³íÿ~ûÑþ3­wÞzò|Ÿ[õšÉ Ñã¨C{6ùõ\ ò[9ð±%^Ï¿4…j.±®d^Cã$zÃ̯fþ\ #O5—¬Òâã+æÊkªO âQN\X×*?ŽŒ“Ÿûpxdì R@8Ïëyu¤)ôKÿ¸ ð-„ò@¹À¹¦¸䉦Ð}t–®¨ïè¯%~øw @ƒeËÜ{ fææÜQrÍÜ*_Qû䈦ДxlJ ¢zËúujÐÿõ¡ ÂŽh õj‚ãýƒ«{.–P´°’ÓU¬›}G!¸ò×8³s.RYÜ)Æ" *Š$2±¹8¿Xåj ç•ABRPUæÐçßnš§ÁfêPÁÛÛÛšBžxTU{=‡ÇWÔ2ÐÚ)àç¥+j;Bà7âÊ×Û”€E!Nvõ­ =Ûœ¥ Ï›Õu]õ-_r&ü¹ƒ°¯^ »EzídPÀoF‡Š£Ô-™GïpùÝäBTB"óËU’§‘Ÿ;@YáNÆéY@þ¼Jò«fÉœ¢ÜEùeEw'Æ£;‡Ç#;ðm¡¡ÿTKøjÙŠÚÞúÚ 'v³KÂÞ¦ÐØ}ݧ>ä>q¨õ©Åë—-<Óvñþbx1N4)*ð›X=Óü§˜®lÈgÜBŒH)OæW–áy Nž6„»ס}PZ0U8Ö®¾d4\ަ%è™M{ßRœŽmšã|¬ûüý»w¨› Ò‹\ðC—àE))d²x ÷V{ï}®×®|3˜Øñå/npt=ÿËÛ2o\R1YPû ü…þÒ«Bðq)9¿òãëX^µ’äM7"†G•CVᆮƒSuSñ„ʇ:4H$Ĺ“ý€·Ï?P³iÑöçw¾—¢œþœŠáÝKw¾.˽Äï#9Œ÷F8òfùë6í•ÑÈMA±ÄCýWˆ\ŽÍ0ªSG+*.Yþ°<9ràóŸZ6Ö;tä¶ëް B½áÄyè€uK” ® ˆÆÝC*¢‰É¸З”ÇN¢ñ|޵®CÄ# @J )…Ô´¸H$4róU$2Æé¿ÚúÆÒG¿ª4ÊüÓÝð‹`ÙÀ)ˆ‡@<™Á Cg𪟰Åô]hdÉ¿-–IWQ Þ+¯²iÅ *‹`ƒò*áçß…ÕÕ°¿VVÙ PYóÊ f¶2b·ÂX„rUgã`óË éü:’ÅsŽ2»¸Ch‚* Ç÷õT8r‰oÙnŽþF>ý´i“~Ïá'3´.³ª¼ÞÒ`sš€R·×ù@ðú¼²¢wæÜ¶žªâ³Ì)±|®¤8O’ãRe>5·@tDUÏi• @S±ÅêµÐuTÕW„Çá6•†7ìäxÜ!5-.†nCJѯ[‹ÌV£ÙWñšÂõ™RDÆ@˜/h ûW$ GBsjK-ì(««ËqW¼]Q–žÕ5JÏålàPßX± «Õï{aîj]Å!ô:DpªS¡‰ ŽŸ_ÇÈx)NG”úÚ Q÷pÔíõ¬4{¶©<×LªìÓÐØØÈÜ^`;ð¼^Z$áÞ§àô à0WÀ‡5xd¬ðEŽŽ®îÙ+Ë*â\Ì¥­7Ÿ¹ecD0UUvås!6ñ(œ ±qˆCt†/Âx ªJ`<æbÿ¹zœN!%4×kúj¶”­¨}¢=Oê=húill¼÷…^8Mê3£¶ šïù_ðÀ÷á“>xA*7÷ `€ë‚ÆÎ}Ç7%€ƒKqäåêѽ<qK§º¿‡ÞóèEèSé3„zTåMKw-®¼Їöˆ˜¶ægM?yý‡ø¼¾©?éT$ÿià…˪5l„è_{á+zUnžTuh›¸½žçC xÆìy–®XŠŒ'(*‡kÖB$’憄 1:ÊÐéó †+d^θh?2ÊÞ1*VÃ…~•¶]?þ¸xä‘Gäe·#Ìëyï·<…Ï‚c>~©¿|7P|ßxp8ä/˜'e"!ÒÝPl,,Gº»….6þ]ƒWs?©ÞìÈ&-îøÕŒX§v‚É ´ÿ©¿t#ð–„åBÙG·Ix"Ã{]—58±¹kûV¯M"÷RÖ¥6Û±ª®¹zxÌœê[®Ë‘(°OÂg”dp_}˜ ˬ ÞK@d’¾t›“h&yÈËá;\Rø2nÜšâïÕ†²àÝáŠR„@ïÖ¦®®«ë꺺Þó+p‚ôdí´‰ï×…"RmÖw™Ûµ½çìS8Ïðµ’†™3ùºÈÔ¶È$¨ò®[–é:ù&›h˜›^mY%ɯK+Õø°í<"ý),×_zË×t $µc5oXOò Ie†2Å>TWã3¾÷ZGÿ÷a_ëä'ý ePŒAAv-ßÏéEcsÉW–Ef¦îèIÒA=qó&ͽ±ÍmžÍ-¢-ÔÍ!Í 0ÍhÛ+„ÏÔ<¤Š7¥AÆS·«ž³k>Ý2ƒñÐíÁ¤aF–ÉÏ—­«ˆÈ– ŒvJnUÈi<9™¼!ϔѹæ.éF7tkçtë8»¡"† ‚÷æ¿R@7‘AnÓÄèÍŠ2Ì›6ß¼yt”±Q;@ PRý¿ÝÔ fÐ/;# |izPoõzä¶@PÌcr“?oläÙ§“0&¥Xß?e…±ª&§/¤$Õ½^{@`[ ÈV¯Gi·úÚ L€Ý2oĈT ¦b)³,±‚‘- Óö˜ÑeÂD«wƒ ŒMYIÚø=¿ë›š‘fµ:SÁj±G²¢ç4la7I#]ÌBÑ ‚õ ÚMe2>cÌù:Ьd‹Yä¢ÍL "J¦’ÉÑV&0²>2EH«ux Ù31ÊÁNšey~x&Ën‘ »ïµ¡Œ¬(ÂÜÀ"abe ³eh§ ÍO(Ýl®T›žÎÂL7›Ã ¼Œ¬€0O1°‹¤ÁN¦›¨fø ©Vª# ©À°ßÔ7"cª˜Ž"pëÒ|Ó`f³³•íÊÔRµR¦ ³ñçÏÄ ·É#J+š§ò¦ý4GSĪ1=ÞÉ"¬2+N¿dAêI’;vj}mp‹Í$¦¥ °ØMPM¥Ö¬vA*÷Úf³"›Ÿ˜²B ë5i¬6FìÚQ•/ËÀŒáS+ ÙKŠS8¯ÂÊ–6ìšôÝŒž"w¦LŒ›ÊFIÎaF@˜¨a­4b{ã‹'ÕšíI)Vž/MdÊ–íp;6±ÃJ) ÅÔ@ΕáRû1Íð&µôäÏ„´Ašð'SˆHA1†Ad9aaêkƒÂN+™å–EðNy T•á[¸'cZÃÎq²ºÜv&®]4;SÝnuÿÓmÌnlžÙ¶0? ?Si©„ ½ “®µ1BnªïàIeI³<0ÔW6Žß~8™H!ˆ³Z^%¨Ó K™XI?›Ó žþ”„9”ïçò|Øð¶4M3#µŒ0[“fbóƒæ“öV£.Ù 9`&ë/Óµl…i(”vfºá÷¨¡Áiáj©¼N;O2yò3vZb‚¸ á³,2ÕEУÜVía'43¶#Œãˆ[Ø…Öìâ 3MÌ„E|SÙXNΞ>@4-†5iŒ¢MGœ&p2Á—Ó5%öT‘6œ†ýŠßìü A{Éra0&¾ÇBÂ#Õý™³LMì ž7“Y6ÁLùûgÀ~æûõg„!aíüþ xO\iYá·Á+§ e%, q Ù#4OÝy6ï4òÝCØVV§Ìì¥fìkLRCPÖ×"íÈ,Œ˜h~®üò§a›{fvFvD*ž3¹¹f’¬JÞ@R‚‘)«héÈÙ )k(EH‹yÅ´‡s†)sžŠMÓ ZÍJ †›k\4“P¼%—0­„~·–‰䌴ÆtžI›®º0•ÉéÂbWræö%k C%™-µ'wxR¥ð¥…-$6±ƒwIF¤Ël‰¬ð+é* 0¬…dÍ`\³IDATxÚì½-¸G¶¬-8ÐPÔPPÐÔÐÐÐÔÐPÐÔPÐÐÔÐÐPÔPÐp¨àÎ7yß'befUeUuoiÎwõʹ7ö>+÷‰öp{…µqNúýüÓ+ß}÷ý÷?ýÔþŸöÆlzýù û£¤ÏÊwö?çšsÿ³|ó¦mËýëÓ¿ÿýë_ÿõïüüáï¿þñ¿Õõå}U?qo©ý©«s{ g¯/ö[[ælWyÔ´·Ú7ÿþÝ»ß~kÿ¿í…þ[ÿÇglž!ãÞàÎðõÿý7^YyV´w½}»¿ßúûÏök¯~ýõ§OÿýϲdŒ÷Ãz7nïÚº–¿þºíÏ<Æë±¿jŽîŸÛÏM–ý·žßcï<•¶ž›³½}¼†sßô™ØéÞ“½íý¯¿ÖYÁ“„sø*&Üþ+®ÍvþüóüyÝ®£öé,¾|¼ŽŽÚÕóa{©ã´XVöÀY$6ÂÆ~¸rtÑþøã·ß~÷ÝñÏmg{à}óÍwß]9•LJÇç+KfpçñŸõìOXüùç/¿üü3Ë|x\¹å鯸ÈÛYøÃÏÞ?Àèþa¶~Yîû-x1:?Ûãõõëo¿¨[ ûFóuñ9^qóGõlms >Û#(×SA¶!øtö €9Û*¥òüÜÞÃù-Têô…Ö6 òÞ‚qÀq® ÿø÷¿Ùÿþ÷¿þúë—_Z‰ÁoûRd êõ% £ÐÏ ‰Ù1š»màÞï1þ}ûïß?ûDß—ëžyóæí[Ý«½··Îüý²sïŒýœïÿé§Ÿþõ×üî»Vf÷äE-¥öËžÙµ°}V«ŒÿöÛl°çûï· ïxŒ¶öçØ·ß¾}˽ev'Ì3mõ:šßñöžé{ôÁ:è¹7žG{u´Ÿ—Öüþûüé§÷ïÛ™¼uÔî|k¾ºÇoÁYgàž”¨èª•‹ïB9}ûÛ'¿yscœ¡t÷iÁ\^8 ¨Õ¾ûp|³_¯Má*VêT]r ¼Ÿý,`%ÉKtöN¸14ãůÀôv|{É¥ø_ÿõ÷ß?þý÷_ÿþ×àˆ˜§;ßîûïÛEÚþýüó¹Êx¥ ÊÊílšŸ»\·þÖ7µm˜¾Ý˜s`õs¼Í[@aÎPn­ypoÁÐÊ‘÷ß]{èÜ­pÿ Úæç*䪀Ô,ø |ì¡[²PÀô?ÿ|ÿþ×_ù™¥aíÜ‚×sXYa}¿Ï÷:0*,g¼ïü›òH¦ÝÛKuÏ·;ã·ßŽƒýŽÓþÙÅs vðøLð_µmiß'N_Îe±çW€ûö6‹ÉlÛl®t¼^jϪ/Aó<û(÷¯ÖÕçÂUøÛŽÄÛ·?ýÔ8Ú+\æö'¶£Ü¾øþÏ·ä܇~ RºŠÄ8‡)†ï¨0žQ,5$÷ö­)¿q¯´â£Ÿ¸_\ñÜo{fVÊ~Fà~å ñ A ÿ5pt³¸S+.?~ll—ƽæÚUÆþe–ÜÆç¸¡¸y}Ÿ§üøøñÏ??|øãß~ûãþÑxçSV˜ìǰUufkÎm½‡2¸?ÏgMd³ÎGg×–ð`ÆRk ÷¯ë=Ø·ÆVÎoÍ=ƒ¾%·X-¶…gåd{Ÿ^™Åæ~ÿfœñ^O 2 HbUÜ‘ø@ÏÕê{ÅQA2Û·«Âªµ²ª¿[Π¤íë×Üs[ùÝë9'=¾"*'¯ˆÕÒhëÚ÷‘šq{÷Ùèï×ÙúoœŸÇþÞ–üÉÕÀ¥àHÙfí™PìI±woÑw™ðϲÖuRõÀýÎç²7¾þú·ß~ÿý?—ï-Uz'Ÿ±%3#8~õj›¾ËÂwãs{8¾ÿM?¬P"ÀÐs«À=UìÙB½¦U]çÞ¶Áý¼ØÛVóÝ?|hEiûí ¯¿EÔdíõvQ1n[»þà{Úÿ´ç¿þÚç®û‹sAÎvù±Ϫçgã¬HƒißåÛoŒúð᫯޾ýñÇ} Vý”½^ÙªXë,k[‹[oIUIJDBÓÈ þs,jφ¹^û[TÔ¼¿‘gCNMp~¶½ÝÎÅ&m=ê¡%„Úº^V¦_ÎAêׯ³ë5Œ‚½3ÝËñS¾ùF³kÔ—Í+ÔÏþÖÞ{N!-nÞo¿¦¾$4¢¢bõxÍŠÏ-›hö²}†¤jÿqz¥ë_o¿J[YÏÑ{¸ÙqÂ=b÷Õ¡™ÿ?,¯Î'ìóÇõ=¹W%ÉÐßX‘Њ\GðâÛýŠyaÆ},g‡FIR»´¾ñl²h”·=¬ìu¶tÕ=üÚW`ï{]…—1Æør a]r?§È„îù’€»ï{× ¡õ=e?ÏÆ¬Ÿo½~ú´;òƒ›W7Kˆ{Ž.×4I/3ôyõÓ)i®«äïm ЄljÆM¶n©vy–fîQú³»á£?kˆÏöê‘HãXãn‰•Ü£Pá¸øÙ’p¼zu¶´0gÙ@óȆ®î±ôÌÜÙPlu—‚{÷î‡~þ¹1ñ?Êódߣf~›ÝoÆ!Ô¾^•µ÷·¾Ië0¶~×ÈÙ÷ÆQ ´Â¸k´‘½a®˜ÌYᘙ{ •uñá>]ëöTÀ¡ßÂnÞ¸|š½Ð®~k{÷Žò@“]U[¿çåu¾gµ·g®º™q>Èuä®$æ,Æ@±W¼ŒXèª ÕOØ3EÎöóâʳ8åXÿÿÑ&@yhÚs”{éž¿`{Èpê5±Ä*p¿ò%¯B¢«ß}ï1¿­Ü}<¬ÿïCøjKö“ýÜb[%ŸÃsk·Œû*=›šåñ—Ñ ÝÛg/oƒj¯Ï-†Ô{FxçΰS“~¦K®™»‰" ΰ¿×âìS¼Ÿè­ßÑÎýï¿÷.G¾Võúõ¬Õÿû<÷þ='—Œwÿùg“«ôêím¶~¿0˜om/Ã3XŸ kÒ©ùy"î¾’Ç♕}[*óçÚVùªßb6ú϶>œ®ß=ÀÔOôŸBôV×Åìþñ¼?yöújǪ š({œ}³­Ï]é-?F}pùàCt,,ÝÅ}p¯û„ þ>¿«ðeI—çøÖ€þ.ÆËqöÿ¶ƒ|Ì.èu®ÕQÄìBa¬¦ŸkÆyE!}÷ª{ Uý?üð(íc=<’ïîçó2’ Fʪ;.ø•Uâád÷w¿7F|·ß²ïo<ñú÷=¶Aí#®pŸñi9¹[åÔÛµ±2̽úe©YlwÜfzd_d³Ë3Æ}\^;•ô­ìâÓëh{F¿•w¤V}zÍDõèåþ?W®è¹«ø r„9„#íx/ AâR{Vgß½… ¶XÛª*}¾?Û5®}97•Ï)ƒYëÇbÔv]nÙ×¾ì7ZÓ”?Rgq¦ºÃyoíö0÷#ÈÙùSû!Ðsëâ¡ Ë(’Yçrž#9xÙ‘Ðõbàø=ç”aÈZú©ÙC—w¶cá$ÿø !ÊøêÅaº­?¾ä{´BñÜ#'¿ÑÐßà[aÀú‘ucûܦ}ÿñG¸´kgõÈÝÂè3G $=7ËîÈ‘©ýKÇ÷ï›xfÌlÅýì±ì[lîŠcU¿þ™ÎÜi~XG0¯ #ð}Nñ™3 Mtqfêé¨ Ìà$=ך¯3ÅfÇ]‘ž¤ð´Ïq¤ÑñÙ>/Åe-Çêó{wѳݼ/GSþxAï3Þé^®î-óãŘòõí?Þ¶—Þël¼¼–äñÁ Sà~ 4o¿?Ã5®€ãgœôÿ¹ËsGçœöh¿¸âÛÔXD< VØßç{Þ3Xƒq^Æýï9úg ~ªÐÏ”ýÇùiv¶uŒÆ6ˆCwMý¼ýž#ÃʳÁX÷{)ÛÅðÿù?Ÿ>ýóŸ,[Cû÷ßqjÚJî܃òwp÷TémŸâÝÜuYfº§t?wöQÖTù­ÄºÛ¤AÃ`?ý»¿0œºÏ[¯ƒû•]¶ur¯lÃõ€!Ÿâéj¼ª¼SùÍ-Ÿ9†{f±7ǰ:ÞúØcôéSƒ†ÜVŽoâÕêZq}ð÷Þq9ŽÅÙæ$Îù`È'¤ñ]+½âP–x»W¯°ØC’pGO¬ÑE+ÇvôíöxÖ³%´Aç9Îéyô:£ŠœÉ¸è·D[ª÷-µ÷¿§ßSÌ%–¥ +¥]~n¯ØÞÞòãþÉzçm¶\ [Þw9þ6݇=âÔ9£ænýûåÊ™ï]bV¯Îªñ||ÖSi'+ .ÏÐswå:ú.gÜê9"1Ì?Ðe])r”hÞÞÏç~ÎLN’ órñÞsÿ1]úíÏZ]¿ïRõiû¥¨óÙ*b+M¬¼zü†>¯vyˆ/€vszN¼mÆaìsØÜ G›§—YÖ(ûu/Ø=ìñ·þv³3ÆýVÙ°=–§­}\èñÙývÆ=w˳¨Ý(•{J¬ÏqQÇ|{LÇìË8¾–Ÿ%N]¼,ŽÇm,F!FGQ83þ•ÄppLkýS¾ÏvW—ýyfŠúÿl‰²U,]K$=«ã_Ó¬+ܾYæÝí±¬<Ôç îö5¸žò[Ÿã–¬Bê£-Ùrî—ι\ç똡ï"¶Éž…]/æ?ïÖ ßÞf*¸×®ŸùøÈAª¬}Ó^ÆÌ“‹õ\ÑbÔ1tîE{jõ—5ýüÜüz9WÅ£Sû3ôîÚéU5=o>úh;ÛÎ? Eâ05¥`/SyÉ‚êÜx랢q¶¤´ížÛ ù×׿þ.íK»˜ç€ó[(Þ:[¬ó¸áä¸qËËzunaëu¸ –Æêÿˆ5¯ð×ê+B#Æ=G­|g„£zû¶Ø-й”ªú³\¯ºÅ_j¨ÈŒÎYOôè@9£@Žy÷³Ë#!Ê^᪠è^¯`­0@›¾êfö(èGäÍ ï¹=°žó°Õiy4º¾þÿôAÿ;Hã*¥ÈSîly¤¬•…#p—0cuÌÀ(w<ùÔÍ»Ü{*öõ½º‘÷Uò÷°ÓcüdÖÏ“.þo…q?n"‰^xWƒZ?ýDK} ªØZ“ësø¸?¸o]`£òxëôz¬ϕ߮îGgÌà x¶LÊUìq¦Ápðß»Ay´Ø0nÜWŠ‹÷ëÜ.áwWŽÚ>SÎma Ž(£ú ¹þžíßÒ hùå—wïšÈ\º°Ò:²÷^Xký„ d)oZѱâÆã=ßü Zùû•Çz+Òh¿»uŽ Ùʾ=ËÐ@aÍ#ÝIæØ‰èì”Eÿ¹WS´÷83ïBÞ«×Åçy&>§ëÎ=;ñyÓ]öAçÝ=°}ÞnÓ"{DÛþü†þ6=¦îðÊ<ƒ»Žñ‹Ÿ3™gkŸÌzÎ[óuH”%ç´ø+Ö#+ùåÿ͸o­H¦f´ì÷7+jõu'x[ªi=›­~ý¥oÛÕõìðñrM¦`ÛºÝùÓo§É®êt_‚Ý9þ¬ •âVˆcô¶ç¨Cr¾eŸüú±°a…©Ýcp%ËÙ/™¶]ÄYµGÎ,|ç¼×ÇÖë[¿5³/t9cn¨ø¦m‰Â¶¿¾5êU1Î$që±q†­Oß'x{k»&^ºzmš¬A'ô»H Á#èñw;ìK7Ïß¼£¦ˆîùÛÅ-g²ei+|ð‘¼äó.3nïÜÛúŽs²¶Çì+÷®až;J«©DGäÝìº^ûÄU¸ŸÔípŸ]fO}_¯sæK®Uùg› [Ûù¨¦Ø5Î{e«|(·‡öVŽÂ3àûþç®]x0‹ø–Ü}°ÛsìñŸœG]º’©´[Þo¿!+@¼ìC݉Œ«üÓ£KçÏg"»ïúÙ­ð§^G_§WîíÕ~`ßl‘Ù†1¥uÕboß)üŽW’€;AT«{c&;¶8ÜÞ’¼sB½{×¶Ç"7ýCÌ_~yÿ¾ú‹u¾9Qu,ÕþwˆUî8>~:Ú*¤h¨޽Æ?×vž?ë8Û×Ç"5”R"jüÓ™}5ï¿íã¥3hjûýÛx /C·¶v«›º`ñ³í¾õÁg÷9ð½^Ó\ßM*?îkªYõÉŽ[N ϬgÎ kRg,½•ÞKÞܯú4_i²¿~͈Ò÷ß,θ|Ü7=<Ã}îûWô‘Igq޹ê9è|fas<–º ÔûÐÏy”uÇní:2iTœçÏ\õ[GDÁQzÄž-ÍîÐöÖÎ˪u‰Œ ò¡³©ÃGÊÑQ–[ÛŸQ«w¡3Ñ]-wÇ|€—¡$^šQ~Æóú®mS+ÏÁÏè÷ºíÚ—Kع€½ü™­WWp—~ÆaNŸ=š×PßUÉÕsl­ÿy0~$ÅÒüqøeVÆ’Í<ã–wö3rÆgí;·#EyŒÎ¶ÏtZ棨wŽsðno2a/’¦Ž_À·[)Âv¤žé¯†mRåÉ“%â˜u®ø¹7HW­ Wò,·¶-¥) ·ÇÏUö}Ë•ü«¯àÉæ#¹uûÉ1XU¯ÇZi,IÏ|q¸¯Ÿ ˆ'±ë=¶\]¿¬«‘·Ï–Þãh%@þ~iqÎ÷Æ÷™~˜ûÿåŒ>#©ô,ÆØ2>;_vï>£kàìÿߣºÙǃ¹íÎse`ôNáwVurôO€û^-egè=Ø4ûóÛ÷ña~œdåìsï¿K’ û²bŠŸ;Õ ~.>㌄à!–Žëà9ç÷LgÜÞºë‘1WZüGF}Qq^gÌzj¢ ·Æ›ŸŽ)¤ÇËs%„ŒfzG–øëÏm[÷ÇCÏ–LÛ qugß*VV±gÙy|†¬¹mKhlÞŠT 7¨åwoÞ`±jßÏa5û¨ÑÙ²\wµãûÌ3ž¡ÿ)Ëkèâ¾êîßæxëcp×–°pžá¤ûyƒõ®uÆ}]åv6`=:ï~ s$YY¯<î|½õ&ÔÊ¥ò¥)Òú¿´Ȩ»O=N¦_¹~ìãv¸¿yƒ®·yÕ$Óy®'p•«Ø÷;_w}^×?gß>J÷†ŸÞ‡ï½ú6óa¬Uû3~çGC¨Õ»fß#èJã8-uï1³Å»ï­³W±ï;šß+ð÷xG´ãØJ5%xŒ`WçÃ|zaý :.‰ÛÑÜw?ºâöòhqµ_¿=#’&»_Š\d…_'øÖqNëIÊÀqÅì¬cÉØ±T–ícC9ÏÂ÷g¤·¼­>o9Ú‡!žîgê$7«'ÌYÈ>æË`ÞG‚àÙwÉÌÈù%´6º® N®îÃÕGïÖ¿óVhãç^÷_žëËõ˜$ü>¶?Ò<ñ9—Çݶ¯©½Ì<®Jù”o'GžiM`Ê®®}s~«¹§½pe»h9/†Ù~϶ûʚ˖ÜeoŒ¬Œæ%—ôC«Gž-ù¨ Ý[¤YdÒ˜irñ„™#ÉÒ#ØòjÛÎðœ][ ÜB²¼«Æy–ƽ~ OŸž'ó«ìl¿÷^2ÃcîEcè%Õówfœö±ÍÖ°HN’’×Àè5¹ÅöÜÎTŸåÎïCóujòüŒcw'†lâ*³ÞöºÃæ®Nnˆ£÷g:ƒ3póÆÍ9Ø—á)Ép³6s\|Žð©ýÛÇú¬Âz ·º‡·»7Û7S$ ÈN³;ãðšËæÞõ–ðúòÀ}ÏšðÙîÅúD4Ó¸§·’ìÝ»³9G]‹€þÏÿùôéŸÿÄQ¾œÏ½"aËYqÈ1®!ÔQÒ³"¡Ùþtr0úŽÁÑ„’Þ)±Öß&‘dÛ϶g}õjEh´Üg„È xÍŠt¦ë…woðZßqëÜH†˜ç–ӳï‡[*óçt>I6æ I3»±¹7hâE|®Î3®¿>öù^}Ét¶‡ÿå÷Ï×Éæk{^ïωèºÄŵ¯ –³³1wΟk¾K÷•ÛÊJ 鬸d¶+a×uÊ5P/¢AÌÄÆë·ÅíÊÅÀ–ØuX7kЇüþû³¾¤+ÕéË;\œÌÞ³ÿ»Üëínì|ƒimßžßówGLÏòSW[œç?=ã–zÅðÑ'î©×Ë€¿ÿþãÇfßÙŽÍ~Pö¹à}ú›7wLBÿüó?>|ÀóÈž)¤Çïµçd¼¿WÜoÎÉcpS¡@Ò}JÎ÷³c”ÇsCO •âãÔóúoßrnãe~¦Û–i¯3Eõ¶HæÙ¶gðô|fÕdöx]ë4ÂñÓ妻r,-»>wAqЏh–.üL?™6Ññîçå•Nò3 ø:Ç|† ë¦ëôß·&[ïÛ$Ì þŠf (ï­y…_¥â´ã.Ö mo½,à9_\ôcºâ›LëM•WÎÔ¾ßWË•7o€†[ À#†ó^4kêùZâr‹óÖÍúÈsFÌ@6cÐ%A…Îíu½òÙ ¢ÕäQkÔ±­5n›Þ¯}X‡µ… ¶2QÛ޾ýñGîuí>øÏ¶××ç"úýD’Ax¬¤¿ê¶±&—~çìµ>î³!Úó÷%€ø^ˆ½ÄloÞðž3Ó ç÷ªíDïÏœœXçzÌ\OÜ÷ïŠNÇtÌûí_¾ÓÓVoa?ñ9Vÿäí×ßH/fø¾«¶¤×$"÷ô5eÈyLÒmÈ#ØwžþIûÞýîK®2+üúÙéଓf¼Z2îŽ2™q¼‡‡Šù§û*¢Ú´UÎ_+|I¶F䯿þñ0âºl~›Öø¨®ÕqN*ó²6ŽCoÞ|÷Ý „Ådm;1÷÷ýÖÕÖ1ÒÃ-RrD]d‹úýø¯è]X>K¸òˆ}r¶?ÓúQHÓ=k¼šÞºöY {”‡ïW>ëýú ß'qÕ6V;Vù Žº¼šÓ~RZÓ¢¿þøãíÛ~xÿ~=‘`‹;×Ì­ôíêïãZÖ,G-ŸÐÙñÌÒ}~Ä]H¯u´Î=°×¯Êç tr-Tnuoöw<æ(ˆê»N–Upü¨û'ò!úT[€{X¡`swq/ oïˆÿðûw¿þúéSÃK šqÛž%è]ñgõëWÓŠXåÑÝõ‡é}7ÏX™¤:eòxî"™«Ö*O<ãÔR©hnïê#ü‘Z«-×á£KåÙpÿx|iÞùö¨àÝp?–Ìt±ó†Ôì<”ü©_«·ì9ˆoÛ)ïêVÄÍÎzž\Ó\…¶Þos¿ù¯5qba|dÔÚ±?Õ#Æ1Ÿ¯3¯6Ń,g‹AGÊ™tÉ£ßï®'ñÒ™ø³g •®óîgûÀ÷‹·-žþ ý¬¨Ä ÆýŽSûº`fo+ä™1ÇgÔ»Ï\7‚G÷õ#r|m·¨ÆH5°²&ÒX[?#Goß6^`]þ¡–þêfÍõÊW'íA<Èx_ëyä:"PÚ¶'í瞤j¹õÎ6ç\ÒÄ×®Á>óµ²³üѦ\æy¥gœ[®œkgíÚ6«óéž<[GŠ.è_5qeù8¾ PÄ0up¾ºÚ·™éòÅ¥­1îW„L+w¯æÃãWÖŒ$i ©qRæ#FɯsðGïáXϵã÷ŸÂÇý“ú¹Ï&ΕV¾¯e¸Æ©ïã½ç…p½zuLhÎ ¾5}­œ¸w&|ÿĸ¯W$×"è¿`ý(C¢kÛ?JêÀÙõRê%êø+ ãý&{û=>ÐÏé¾Ç:ôçü¬;T¶÷ ×-ºfÛFˆÌÞäÃyùÍžãAÜ׆;ç‚ÛJô5?õö›”„õK«í÷Tïg<Ú¯‘¿×#¡ ?~ýøN™±ª q´¶rv‚eœ]­×:$gΫÞƒ»Ñc%õu÷qŽT©0¨7˜ŠÿýgîìŠÀƒÅN,÷Åù5ÜÉ[m÷¶6ùpO¾öŒó@sÿÔxyyÐÿX}v+,'¹óÛç…rºäèï*(à™:¸BómÀÞ©~Ž~Τsx¯¨*LµÇç“Ô³ÚñJçÕ ƒ=À0Ó*£óXõØõ ò|{|I¤²öÙÊÈ-!ÖàfdvŒÂ¡˜#iðý¼­¡D%ŽW/é«ûpÅ>òŽ álðБx oñ;ô­%‰XªªûŒ¬+¿¯ "Ç5Ôsiˆ×÷pÜÏ }j3ÿŠ{H³ÊÕ˜¾=Pµ2f%|VÖÎ%CÇQV+ÞÒ{ûmïüLÁä#K‚õÎÀµ.“9ã3NóóRmë.­dö!ú G‘æBµÚ÷Ðdõ›>3;yµK¶æìsÃWðÆsHÆu†{hî£õgôÊ¿õíìLÂ~0ÖÌò\÷fkÍ«V­ó«G +Î3¸Ÿ­W^ªÚsÜ<útÞ8¯Ï#“zÇ›ªn\9¹ÏOd‰Ñ†ZögÆÏùÌe6ª¤ïw<ön u¢à±|ÃÑCeÞ®:Í#`ç ÐÇhoü[.fÎL´Å×9Ë™3÷cø³•´Ñkmèã¿ÙÏÈ“ú"íO¼¥ag³«ü}v~¶Ç%gçêhA8ûîșڵŸ‘UkÀ]4„A•üÝ•rà5ÀK§'ÏþqÿÇ?öº@=p¿#û‚ù1AB祌AWzƒ”–ç;„«wÔÖÏ‘}FÖ·z)«×ÈŠzþÞÌÌ^ }´®‹Qt¥+¾ì^²S·g쮚ÜçÔ…÷Ö×¼VT$Q»R€a±*3ñm¼t´ œoóùºñßìêBàÚ¼pŒ®eGmÃdzÕdû‹l®ë¨V8øuiÄYî|öóÜôpoÍçÝiž×t;Û*zœÞkŸ)ávì¦ÒÞ4÷K“qܸ Ø¡ŒFUÌPàï¿ÿùg³œ êÛã_çççkÐ[þ1qÊRð¹,Ú:P™ÈÞœ®ZFrkË'¾Õ›7wâ ½Mu¾¨›_û}Ç`¯èÚŽyBè‚§{³={ÝæÈk.ã#F„׎rÿYû³-ÞúLíƒ~•Mßë­=R´P·¶1?ü€À’‚Ö]Ü;åôÙy€ûÉ©÷&Âûl“glÕ&ÁijtÌ»*áéà¼ð±ïÔž‰M÷ý÷í8'P9ËÁŸíK<¶Sq_TS)ÂyríêÛ£ÇBZOyøõG̃ý‘}Vôr­´ÿ·g3·Îý0ºß„:úFöwÛ7G§…+ÑYǨ#å4bÂuAQT·¿Ïh›ÁÝu=y`_n÷ïcÝÏ•¯³Ýg5Owþöþ¿;7Žíí¿>5Û?º7¥o…ëš«ÛÛãóë¯ûñóÏÍ&²-ò±ŒþÐU­û2`½î bkhùíÏWZV¶DðcuØq{TŸ}YU™ìÚ3i]†vŒÔm»ÏH>® ›Éxæ ¶ÿ¬Ê9ŽMlÓ†W[ÜÒ€>+wÙ¶ª¼r&¯CùuÆýêàìèßËíV$dG°Rt33m 4tpU]óp?ÛÝ?ßê(çj&ÆþìÖ59ÇþüÒŠRàlgû±OÒõžüü=WM±Ïî™Ù_ÍËøÔ:\câè÷ˆ† ?:‚–¿îcæ-¦ÿ^0h·<Ë|®J;ªÂ×ÃÙòà~m}f@áY-ÑÕŠüè¦y–zÔ¶ÍE@¥šÛ› 6(9»ä”Y‡÷àæÖw¹:ÐÆEÛÈ'W4˜–zÀnÙ ¾|”I]3Úèceü5·¶=G˜ïèl÷–/ûè…?›1Ðö‡2ç­qFÉ=—f­Àú+i”<ŠêèäØS:[Ô­;眗Öä’³w5êQ=º}Ÿ¨Gä$Ôâªu„¸Fð£e™M¬Ñrª›lfÕ£}m 1dìE8J3èì®Í}Ý:ß_ÿ5̰…OÐÌ'mÎI\îÈWÖé¼såÊKy Þ!vï—[{àh¥ç®ÒŽö›k¡¸Ïþw¾=tއ¾^gŸià>b ñîé¸Ö¯Ðƒíˆ;¨½Ã¸ëXàÝñ÷ßꌌoãÆh_ÞÞZdW£ŒAI•«–­ õcˆsäÆànÆ5¶µn!ÌÄú>Ǹ°5¯x¨hUÞÓ‹+ª…b¯‰¿²Î:ˆ?êš½‚Öw~¶Ïm~ ÷ß3³³<Û5B?ê”Ä—Ixɉš¯¾úå—f ‰ï—_Þ½kݼ±PÉqäGn ÌzU·kBâ×_«Ùè.ôÙ'ÎzŸüþö¬<ý¯&R|ÎSÀ¡˜?¸ï“ªÏ+Ò^Â.³¦2¯#Õ—0/¶íÎíúW¯¨Îçºä;uðÙËuöo>Äsî×n ½ŒÁ4gÕÏ+g÷ö /Ám8>ú88ºg›HFñRç‡2eÐF>Ÿ|¬ wÌj?§ò3Í|° qŽÜÛ>P>êµï†iÝž{ú½äÔ+·w•¡h¨³(+Zð5ú¹ˆh>Ö\ýã¯ùâ¯lí}‚ÁF©RºÎý5ÃÁW:)“xùñî5ÙÉ~é²zçi¤€ÆÙŸÑ[¸²÷Ö¦tÎKö}f¶Ÿ‰óíQp^2qþzLÍpWé¯èÙ·kπᆪX½Ûyx,[AMûhó±èkƒÝ1š¼&ºSÞ—ï¸Âéž­«dÜV£€×'w¤2k$Š>ôþQûe˜†ó†•ŸËyfÛ>onº÷¹Æg÷€œ2˜Õ!¹= »~ÜëzÌ+óÒQíÇñëûç„Þ?¡·<£Úç[|óM+~ÿýbî°^Õ‘ïÉ<ÖÙ}óÐkƒ¶ã€ãö_2²T› œrdðh¬ñ³VTä±Ç%gûd…ËŸAÛy‡d.½™KмgwÔGÚ»j¶ÏÃv„¾ÿžnÀ¾&øhÉ>PΔ—•ÙW–Ï¢ÜÎÑ[­ÃЦnÆŒ‹>«øNöËsòů–FU­¾½ `üúïÜ-¯)Ú¯uβìý`åL"»rn¬»³ûÿš ã¾øçÃÜ÷5îó]|dÅ8Öa+Ã+×7ý;Y®5§ÖoGkæ¦Ügæ}®dÙóŽò+¯óÑXŸû¦Ÿįx†Tà¾?Bwî1™°Ln*9öz'hýNˆÕºUÜÆÕÖÿ5ÓºóI«kGpõ·$•{õôÀ}¯ÛÀ£÷w¼êûHÙ–¬nÿ™¨,z#µo@Ù[ ŒAB£|î¬wÍlûß¿oZpÜr‹ý÷Ú‹Ouf…V]ÏŠãÖÞ‘½ßÕlÏJ\×sôèíÛ·~D8+v…ºöL|ºÈaŠŽÈŽ~«Ž¸ùW¯V¯£;çÕ†Üçºc\Ãz‰%Qêêvž-žwÎL×<çKîk¾Ï4\,òãׄ+×@üµ¶Ëºsm;ñÑ?üðË/×oIëÇå<÷k~ÿ´NC¥çÙæ#yT~Ÿ•^dÊÉÇý –gpëûdÕã| ÖU}ÿªkøÕ"¡‡Vg?eö-2Ò«—L<ª8Y}u×Çâñ!qßæY–£gÄ3[{˜¼dóœ!f•ñÇå|©RŸõûÿ§µñù×BÖš…+CýÏÙ÷G‡ëÚÎgÏåÁÐkÙöϰ9«ŒXAV[ ~|gs kãÚÿÝ<ï3QøÜ–œŸ(ØóÕYÇf;Àý:¼r:®U*피ÈÊç>dï×…×´éWµPcçýYn=[V†×oa’5?ƒ´q|tú)!#/óxã[XÉ}4Z·%ê•Û‘ÿÉzÄÌ8ø|£xg9©of/­§ž•»CÎJè’î]äq÷³HæüHîªÃÒúþY9vgqã5-þÚh©ï™oÞ4›[ v÷Ùº+/ºâ’t§Er^缟ǵ¯ƒï³ ½¨Xo‡½LÎ#Œ)ûÉçÁÄgîÚë>üùç‡רhnbÑÖ(­³°gå;{fýÝË•££É~¸«;qæ(ŸçŒç,ÈÙµÝÿgåû›ºsóÁ³EÂ5Ù̘«°oa©rÔ2Œ;}€õ\Ïûî[–ñÜëke²æZ$ÖÖ{½sü:è\;Cìyµud¯•«pgË¡\ÛµV¿r‡gVgœs;sL%Ú¾#Ô¹£nغÖE,w4×Óûˆ«•O­3¦#ÛŽH#ü~ùåÇêwMÔ´>ªù½ë4î û5bÿ,£| F¯×Ð’ÊÜú×b‡Ÿm4vØãDϲ/g8B « îýÔ_=ª·öä›7X¤Qåkx´Å3Ý-Q&µÑÎ pÙ#[c÷ß³¯«¾ ǯéãÏ5YgÎGH÷­?¿ûÊ>Ù ´Úúôõå¬Sûþw<>c×\ŒÎ&¿n‰»ÖïÕý?¾‹âÂN”=ªúù±ÞÖ1?æ~x%”êœmôàrt|ñ§ZE#Û}uŽT“HÑã}™ŽÇ.Á:Ú™á=JJ:Ì«ÅÌ}@ÿ,‚xì\mÏ[®SÌ3DÇÐy¿Çt-¬ªžܯÎGÚûò³~5QõúVxÜG+óöß#LMýœ5 ó”ÕàÚUÙL6”{qEû›ÑþÁvﺧD_Ó[›•k|N{7ÆþãǦmC„­mwŽ?ŠA<ú.ÜÄÍœ×y#jš‡u;iræ?ÏÚÜvGYÙ9@ÙKA¶ÖÆ'Ö3p„’«¶×¶ühÞâ¾²ìULäÙ˜¿±Ï;¾ïAçóëÏ’cÏõÅNWXa(µæ­’à¼jínߦš~ÿýÓ§6šéRÿZ¨ÓÕV¾išµn90·2W‡ ·~¦;·-U’Ô¨ÞµÎ`û›ñ?¦ÌÖÅ™g‘ÆÌE¦uòžAÊ'iå¢G¨Ï EÎÂñ;úû½ý_‹ì;ÅÒÑ6û|{™‚­ì™k Ä:G~¿Ê¹vø×DîÏY_ƒøgÏÀ}üx¾Ýsÿ¶~F´Àv~úÔ\/€¯ëŸ‚Cí1ã%5aËìûðW•û Á#Ô[…ò} ÑK-ËPzÍÕ+{±ögnÄó-_;‚üÞÓ±kÝ‚Zz¿ùþ»cÖŽøÜñÞøiî>‹÷ÚÈæ£F?¯©ó·XÕ£hú,“T^êçÖùöÛwï¸ZtõgÝÊ>?3û1‚­õgP{wã›WÌ9~Wcj[Û“ûGd;g(bÓ©ÛåkÐé‡Z©_KßcÎ{{Þ]==9.üÑ´Ä{PæÎ¿×¯›Ü¡w; GkÚÇ=ûÎÏ„ܳ²XÅ$ynÏ·ó_œô¾oÒêóQØoeŸÜqÔYqìY?š(é‡O¼©ÏìŽv)ÓbßïT9Rs¯9x´š2„]ßîG›¶tn>®±Âïß7«8ìêzqÈþ0è×_ó·Ç Ùׯû­ÅOüùg:±ùV³ø¼ðƒŽAßgX7@T€<å€õš[ß³ˆq?ç˜øtûž"y¡4ØÝ\ê·Ç›fy±séÅ1ëgaq¸ïÁ’ße~d·r;ò¹wwGÛ}Ö—OÚ{ÇåÖúpólhÚ~ýßÿã mÀ˜2ÛÎîë>ôgC VŽÝ«úæÜ¹ï³}HØG–€ø—îOºoœé¯’@Ü|oîê¿Ï÷*ePÅGÅóùuu,ûL‰í£³ÎFÏ_÷TÉ#%@ׄ%g±Í|5›+X‡ãw`î}Vþ,v=‹fÏöj'ÿŠV"GŸ/Jeî©‚è|÷n/óìQìÚ©|tøG>fo=«•É) 8ëç9‡è&yµ}ßÀ@û_‹ø[ù¦ü­JŽ«U‚iK'·×ð=£8dÿý7ßüðÃpoù©7°(ðšË5nRà~Ú²¢œÖH™ Úê£4¸³¡ÃÙ²ÝV¾ýð£¥s¾¶.éÌàw>ÂÖ6 •—3ú17j\#…hU›Õl{¥õ@¼†­¢èŠæ*¸ï-#c´.JÙŠ šÉWôNö‰¼”9ß~ÛØ^ù)Ý/fŽþJ™£l„:*zNå®[ÕÎÄ*ÿüg£ Z Më|v|Ü®AóÜУíŸd×"¥ÎöcG ñ`”׿ø¨áD+ë_Ïcêg·ðNnÌÙÉÃõ0¬³¿]A_/“³þìc½v¥CX#!ÃRvýšjVà?ÿŒ²`ßo‚gOÖ;­ŸG½ÿ ÛÍcf¾ç\£ä<÷Ðg;¼ØJDÂñM|¯¾L? €T5ýᇹ“÷–5^»Åûñ††µA¶÷ŽôÙÇLá1àP(§}ç¾Òw}°¯ÂÐuHDÛšÑØ¶†VH3›ç9ÛÕ4÷v/Ãx‹Û{ÖÓaå™~Í™älÿyÉ> Ôñ¯±¹g;ùw öY0}–Ñ¿CûÞIx={ž<§U×¼-¸ÚûtÍÌmvÏV„"gñkÕðµSáQD{¿­A'g“ÉVÓRÅ’Ž#8Ï;½¾Œe6ô÷¥#;w8oÜ–ºö}N—w¼y\¥/=÷?_Û}ÓÆ™´)lcMþøNÁ9Žñ¡Dßgd{&¸ßæÊ>Zù­ócjž5ED#|wAůqÈ­,ì{oß6iÁû÷ý1ÚŠ;Ëì®x}<΃e›ÏÖ5å¡á= <e^q˜Yé-¨#DjòQ±·×“Ù“„óô¼>ƒzU·mµ}“ö­ŽÛVN?xßIì øH>råsïóâW‰°ýµKyìSx}ŸÌû÷Øýû…ÐYiÊ£|âŸ1ú\|u'e¥>[Ëþ¿f°GŸ­žeõØ@¥±9xîV²q¯À ¥Âòz[öQvwnÄWnUíÆ„2þ8æúH+•eŸ?ò>3A˶úÿš£ÈY&5¿u}à˜Eòü&êHïÜ‹Ž:†ƒ«à»˜;~:ÏÌ>W6mê$ì‹gü­{F'ç†^鬨í)NÆb)¡ö³«í÷¦ÿmÊu`âñÌÞkû=Ÿœ3ûáJçáüàò(¯ª Éî"sØ´unw²G%úÜéè%³%}y ÄóŒ/ç³ÈÃ’øÌ§¼äˆóyöúlᴆᱻdñ³­·W’P×}‡ ®Çz.Áã¤kõœ^ÙËûÇ?|\‹“ØßNýÌÈËó5ßšµÐ 7°½'ÿë¿p…yd3î¬û:ƒòØOo’¤6rjeùúÖ·äZÆçü·ÛV†×â®EüÌAOšSÊ¿£yˆXµ?þժ͖,aåo+“{ã3—ɳíAmL×~Ö(êìÔ÷¯‰FæGp­ëò™qÈÒRŸóV¡[Ç”½r š¯zIÍJ¯3ƒÑËÄ9û¥{º$¯ìµ÷ùw¤kÚøÎpÜëÐÇgñsº×™ògúýuî‡÷ÕžÉYÑË5ý¬šà,œ]/)W”û2Ô•ø°³JŠç±õGKæ…°®~( ºÜÏV×äsF@ÆOY©{òïfq´ÍàsC gOÐ-‡Šgó7{–píº "Išó[×3©(=æBÎ9m¯×ÙƒÙpjÔâß[¿†„ª Îùï-–×çÿÖ9ó¸‘M ïA4lòZ<Íß㈂k>£<öZ|é~“ã¼ÇÐóC|‡WÎý¿š÷ÏQ*Cás (gùÑï±õÒîl—i¯Ï ~kkÍ Cg–‚g…7œQß|CzÃ÷ß·¾Ð,atž ë¯TÔg…(ÉuêžþÿŽŒáQïѱƟç8ûù%{kÊ‚ëèHÁUóÓm|˜ôÑþ'²ŸW½ÿ¼è³w…‰¿»× â£53}G¾¡œf91ëÕœîH¬Ÿ"ëTÿúÉ´¾;®µ?V*ûí‹&o•3èÿVqîÙ¦ßûŽ0÷‚µ¯¹óàxóÆÆçE2R${¹d9D¡"úµÎµï;”¯CÿGÀÓÞeeX_MÂ(Ìøëyß#Ð6~ú¨]ÎüÎL¢½L®­l/þÛÙ~ÃW»Ý Q[“]c~ú¹IƒVF¶Û+¾7סö Ñ»ÐVNDgú!+ÎëGö¬|îñ˜éžøªžåÚ¶Ä]{}‰sìõœÿ>GFxË9?kàÚöäÏff>}€r;½rËõyLùc#ÿž¡‡~ܒظv6·kÿqÀýþw\£ë˜j¶®Á¼¦öh¯mô0í9æÙ<HóÎÕìÌç>sÜÿ¿/’Y/)×9Þ[Ž&·jÞ8;:!à'úÁ޳ê¥#@ß×»gûZ÷`ÎÍ|hLFŠF¬|nÖáàW™§mÔx¯~Àè¨t±{ýXV!£]P¶!\çVèýœÚz¸j=Òߪ”Ú²ÛÓ_5™Ö?ÿ‰ Mû[¹åÌÂö`è\p²IkÁƒÑä(ìIOÜ´¾o{ÎìKbTÆàP„¥©{2ò,ºÂs+KxÍ©ýL÷f¥;[Žgòžèè›o°Eì'©ÏÞ¬ÂÈÖ+êˆqÕì{¬{áû::vMž‰”®ÀÖÚ¥Ù¿§èg÷ö%í~÷ãâéǧR{O»—ýü3Ìݬ\6|Àû\FŸÿûf¦.ÆT$dp}íAõ%Ç [ÿ99ÙªoÏViÝ^—·Ìš5äŒqw€ºÏº­µu#+˜>—È1³¹\c÷éK?‚Ÿ> €ÎûÐC'Í£ÿ*±ÈËÈ®³ég-,×x÷ÜKà‡¹MóUAÎ^ïîy$mstΩ¨ÃgÉÀžñ].ÌÕò˜W:æù‘š­ƒº% ]i­í*¿¦*o–pÛ¼ûó.àGƒõ\â˜ÁQ"9’h¤gªg¹k×@ùÙbæx ±‚°3’˜U™ÍLIìåÿ™³w\"=â:eù×_¤Ì·ù¥AüÆ›þù§4dÅÈÚ˜ê…7 6*p7\«’•-!g¬¢ÍË›Æi›W÷Òö{”°"°YSŸkmk#§ÖÖg‘¶×Òµ²pû,[Fþ½½O_àŽƒÊ~2.}!Ã÷Ök© s/¼©-› Õ¯¿¢½BIl?6{Õyš,Cî«×œã{P¾ÜWùò^ä¹u®Á´ª¥;_>¬9ZRæAm<«Ì¸Vàøz·ÿÊvÚ—ìœùÖ:ÏÌf÷ær8*$Ú=¢9’Õ´ …Ͼß/i6öðžßËÖªà ǵÞ3õßõ‹!!ÂL¿þë¯?ÿ¬ÜÇçòw²W:íQÊÇ‹á¾sÞ3ŠŠ³ý‡£w®Û0ûR„#¾¶—Z©SØ…ín`´…´ÏKg¼5ö|`úˆûvô4Ÿ>5±Ð¨ü–‚‘8­[p¬†à׊~ýÚ~Ëõ¨ÈM6·úû‘=ï>W~ŸÑ‚÷µDΦfF¢“ xfR¢UaU-_³½Ï (Ýïöx·³%»I~ÌsõoO¶Ä7%°ž]}ÉtäÔ®Ù˜k´£Â àÞKz§ãÂþؽJcÆÂKÜŸ{’Ž¢¤•Óýþ¿ò¹GHãÌS`ž1¼ö\æü¤³³þÌ’‰çyùÊc“g˸+³giµÏ›”ÐúÝs;ÏÅÏÙK™Ñ‹WègÏcìüí^ó}?ZyE<6™ìþ°þ]Ôæ»¢];WBlʪkÁúÅÐ8ü:j t•s¬h=#\éã]V?ñOgküåxìšÔãûïi £Im%nëꜷP\çþûe»õià÷•·og|¤Î@YŸé(°¢ßU`ºÈæeFè8ËmØ’mh=Y`Ì@3’ÇmÏÍ{DX~;±)L‰Ñø‰¨“Í'åouoYõ\_µWôv“¯4ÙØÞÄËÕ$×kTšÓëI±sAÚU"`tÖOY¹{Ÿ½#ÝZÎ…{#ôTÌWý÷Û·ížFÚÆÚ·èÏù•`²5{ƒ³K‹·Ît½¸‚®>‹Ï(2µÂÍ_[ÿ5Ž_÷ $‘ôíñgÎ×yÌ©ßA;wJš‹ß7/ÚU‡oy@¤_ÊËÌ•_ÕÀñ@%¥¹üè¹ùóú¹ýs Xïg&ǬÈn7¼jàˆ\DfLÒý¦í‘)=È·[·g˘k›³¾+À=cÜÙó­,$ËóH&qm`qK/nÀÝX3–Gë™åeê!Ç·áѾ?°ØÃh o4DXÝ6vs”‘¹U0$pwIÀ¾ÏÓYg í“¶=뛫’•v´ÎËxèv¶û«òž÷9g©æ…tTV˜ì• ­ÙµCŸGžöWôÜQ©aac©¶â· Â3Æ‘£àgß6ôÚÝûñsDÏeóYÀµÃØq–+Íså§ŸT˜­|/,2k_¥jñ¯tb×ÓH¶D¹ëÏ™‰*¿¥¯4WÌŸ‘¬Àè÷ž}õÿÑ¥™™*ÎÕ~PŸ|ÖYå!VAh½jù’0ús­œ“ÿ³N»Ø~ý5»’›,¯Kщ>6 èÙšry„ÓòÃèíåÞܽd»Ù}Ÿ9ú´¹Q<úÔŽ8ÙŠWöÃQÆäì¡kÍè¹$¹•a²³©ŠgÒ(÷ÙîÕ袳&€g‡VgŽ.Çy}§ Ô¨K6ÄÉîÁÖ:·¼hfïìá†ôë^ÚW`W>~unÉ{¶¾ãþš·ØtÏ£¡ä*ßúÖûçêžÚ~O`s̯“êÍ@ëH*³/t¹’¼òÊO?Ñõj(­NÏöÎÛwž&ëâUvyí»§¹ßòç9Ûo¿gs¼•‹$Ï ¶·–¯_ËàòÌ™|¼þK=‡ä1ç­Ê+¸Çüúk\›?;Šqµù²uHÈb”Gxõ<™«ßôoe¾xÿ&»kÖùÝÇwýÈwù‡Ú@b{°Í××¸ó«’ží ¥Gµ–®`WÙMÇšè{ÝqCßÊÜ×Oo{]ó¹MVãÁÑ[}?uuEç½ï³ÍýYvjXPŽsøîÑۭȧ vçFãUV=éçºr”ïäìË ®…mËæª}½¶» Cÿ­ty÷nßuõÛm­÷´'Úû÷ ­òÐ=÷Üî“,û>Q[Àý,þž«‰€{ÿÄ\cdW éÕ;ÿYÁ òŒ>^í]œÜA5gÖIäý¿ÿ5¹ë£œÌ.Bêíå \6_)äæ®ç¹Ðô=@E­˜Ùò§¿*>ν™,«Ïwrnm•?ýôË/¿ýÖ„l裦n·REWTzëtÝ•Êyî£ìÒåÔØº©í+JëV]ivß±eœ­ØLa™0× äˆ#\éû[;ÓYëž<Íiõëœà³ƒÆqçÞ–±Ša%•óh"9n›±‰Îޙ÷m·GW—Û{iî*ãäà^?½ÊW8éqœ7Ð#α+ÛTì¥C÷ŒTˆGgÓ¾TÆÀ}›™Ö(Û¶­¤&ñ R÷Î ufMó»k¸Ç:#j¥›ñ˜2ãl2ú½e†À_‡;ëx£~¯6TûÛoœ«{ÑÏ­ƒûcTSŽê^믈7ôJÿìÖÔ4îý7B=ÏU°ÊpŸaÄ÷ÃŒü¹ó¾ÍùB¥iCÚ–#¸*æ¹{öj¤¶økZìqY¹ó‰‚­s`Zß#•iƒ$u^sæ^áöo+Gú­½“f%Él«†«àã<–w=xÎX]SZwTw4kðÊàuà”uêgÂ\æ~2[Œ— ×]…èYµèQ9qG;»Òª^ñQhy=”ùcæ8î1Ä«¢—í>Œ?EB—cáÊ6p·5¤Ž5¹Ý ú ÑÈs7cß+Ôîåd|ÔŸ¥36´÷o1ɰÍv¯³Úµt\)(iÚŒÐ}qÈ6C??oÏMJìÍœíÞ¨¨kî8dsìëXüú´ÆÜ†$ Y®.ó#rEÁNGÃc‹Ø7oöÂyÿŸ³K:áìU6ýKóS¬wÊàNGzÎdÜ–‰ð×_ÃoŸ2 *Ï™kíl®|ÿ½¸ço‡vm¹!­H›^m"FŠd˜ïíŒó{©ùÔbë©ú&Šù±V˜Û¢óÓ=Ý9Û†ÕiŠÿùÛ±UÇáßWJ‘7þ–ƒÇd¹gotOûÅšá<™~^eÈ¥«ª#¶jütÖJläò„1ã+­i’‹‡´Ã+{ÇdULÐFIÀñëñ`߸X‡¬€Ïéûs~,®•3p¿c²Ôºg–àçÊ¿/T¨ ˜ï…®w[Z07+ÄEâ×_ûíÃB×{ßâäÑå£Ïõ:9vÎ’T 1ãÅ•îm¤œH¦ß~kWÏ Äp½£Ž?׬kü.Œîô¾ˆÓ?KýœÃîýc½ýþ¾Z»N·ö@^€]ró==|éeoµXª×þþvBqÅá8Aª'{Yßô°Lo%’k=:»gCY».¤ÃòDU43ö]·Ö½ ¦«õË€à—<KÀ¨;´Õáø¶»`Ë>hjoDõ·eÛzîh•kÀýyÇâx?“0Êì½¹Ámb·/$;¸"V!]uͱ5}™ii©_~™»©ôðÝKÿÝ´€NêÝÖâï†2BýáC+'z´$=òŸ©¼~Ýo=Ÿ1=î«ì÷m®BáÍ™°RœÌöíY-»g*Tœì•([׋]€X]ÿ)ç–s«B¯­;ƒ¯å}¶WxŽˆ¨ õÜ,Mÿèµ Áv7 KÍvþþ;gµÅ?™A{4H—[ˆeËk¤ÕuIÆ™÷σlî[&è꘯ÿNíûh¸&±àhqŸA ÁùЯ! ÷…"³ï¥2õŽæ{eÿ¤÷üóâW8õ~ËÛvõÒ¯¾(ƒÇ²g{e¢`[jÂq¤xÛº‡@@ íï±µHµ{9©‡>îã案&lVsè‘V#u¿jôßžóÔ[*sá•&8‹Zát»ëÞo߶ɨ­³ÇEȱaß¼ÌhÇœ}BÓ¿W!§tuÑf$uì§±â}ñ2CxÕ5%¡ÏŒïÜöÙ.çŽÝ`ª¤¤gŽ«ª;…(\‰DÎç±àµ5‘{å§f6úÉpˆe÷Ò ‰ªÆ›j÷mFâ¶äFÓö>¸‰âÍUf×ÁÙ¹‘" n¾‡=Så@#ä=»sýØm‡R­÷Qª—ëw*BÿÎuöÑFsüÛYŸjŸ¼Ø6»\+Î÷Êà½ëîèçm)š?K³ \;íŒFIÌ£NÊlK1+-òþýï¿¿{מ8«â–ýð¾—dÁ_P~û¬*KHúr7€Ë¯9Gç4Ü7Éó‘BNNögL}¯9²}<;œZU)&<>.[çí3¼ÇaYÝØŸÈM· òÜõÌ+\ňúR„\¯¬í1ß;á¡×€û&å½_Ì.?NVÃÍÏ¡“;V'ÏeÖ¬s›ÜtÚáØÒÎõY«ÐPR"38æSÇÖêŠOóJ@ºÀSBQß¼YïÑä^-ݧTŠCj¯c ¥²a¾žss¬é—I_Ϧ{.¿>Úýʨ/Üç[;¶¦‡G€ÛÔ£o žZˆ2`$pGLRóDg>è#ŒöÑ4TÊбPq1¸1ûÎëxf÷¥‚2VŒƒm]kê¤Ùt䨳ÑgØ>xÜ­{låqí+qeéùÝùíÛðôÇvzÏõÍ{êí>Nü¸)|&Ð~E¯¼¥¢>µ=h¨œ”~í7äYâ+dh¯·Ó_‘=•Q=¹Øµ-ÿ“Ç@¦ä²÷®/ŠæîáѬ=Ò·ÅïÎ_­Ó5#Ç?!Ý:¾†hÊäù(¡ÈŒkï÷}ý•Æ¥k7ßöXë± ¬ªp¼nKÐdÔÔ q~z•âXþ±¦Z™3iÍ‘]ã¼ó“¬|¿Ïµ7}ñÐhf‚y7à*ØîÌÔ£œeÀE{=:€!_ÊËÈûÞËŠÍëÑ êJ‘œØìý>v{ó?kÛÉzï¶m y%uö[4ýÒ+vq^ó›ÚN=Rú’ýÛì0ïÇ»\K{‰šªMa>AîqÒ”ë0k^讑²À—£‹}-x]M¢4ÊQö9þõrhöþ;aI”ʸßçÀý ù»}?÷’ï˜åÊI©L2û ÷Šîí±'÷ÃÁù+nŒÎ=˜Gíž=_¦ î¹F¬´à{éK{ 6Q œnuãî-·ð²²}³W*Xá†Õà ¤ËçßåP&‡šŸ’r‹~Ûf0k¶U[Mÿ-õ𿘑7öEùæh³s Jfz<^UÁÜå}®º7LÜßæ-;Å:´Zuçþ+Bˆ$¤™É0ÌS&Ã]ᦗí|“Š]ƒŒuÖ#ÜÔäƒÛý}I[®BQ°©cã`nÝ3X<IÉßç·F áëèÍšã?þøý÷´ûàìÖy²Þ/ÚîôÅ@í±T)"ZlÌîQ}fo¶g#«k‚ß~:2Á¤ðèÙè3"´ö÷xeÇlÿ)Gœb¬÷™ÿR§ôª<ëŠà¤öªŒG×Ř­û<ËÅ•ÌÔ£5‹u†êúá‡÷ïQ'çп<‚ØÏ3ÐöêÕX´Ða;²hôvŽ¥Ô*N¸¦6^±w<»Î³š~ƒõkPx»Û³µ%rÝ&^?'±-9Öö^éaûàû•Ïk„:Ï:hWßw2õ¤™ôë_i®Ÿ;Rø­@öúÛRcï5åG¦sæ¢XkêÆ0kO¸vn÷4%q9hC>rvŸ™ô%0ÒçàÄ,ŽúàÜûýxÛ·Ù–UK­n€ ‰?·d†±4c õo~/m÷¶´ËÎîéû†¸=iÚ*±ÏÅ´²¿çbGp¹?QÐ;X÷`kIS¶Q5úlUòÓW½ãxEH¦’jòZ¦Vã? "Ãê øæ¹”ò˜äGóõ¾„3¼–dKLÞ¶WR_NÏáã–× å¿þûߟZöƒR¿IbäsâÏòÏ[ýkð}Í¡ÜÇ´ŽÏΖÕì*jªgòQÇ/{÷™ï„=oÇ™B¾½nê^r…ÒÁ×Õ§œnÆöƒ¿c#{¥³ú¼çi&í™ož3>ÎO£~øoÌòqïvy?Ü‹¦¯¥T¥á¼µ/)å½¶¶Õ¿jçjC[þå-y–¶{)n-tkTï&Rå ¶/O’ ô?Åuežú§ûµÁ…µ vÍãú~)ç¶Ã/Î4Ce˜Í­E«ôíò½v¼8\ ©Q(”ТO”œI†2•O( ü·¸ðlè H‰—?:ïä&ë-±§Dyãëfܵ´P¤ÂS ò ¥Ëï¿ÿùgSÀ7†F°c>"™b }‹-e³¡†¢ÀíoÍÚzV½ÚYšö¨¥÷<#Iü–ÂIöUûPr»W =¼Õ©õÙ•ŸÎ= ¢3Á‚Ÿ™Ã‰ËŽ£R÷ĬÀŸ‰‡öñ5¬×È^[ó_µ8 lÚ{€{ò+[Ò‚<°ù¾îÃl•@zOí~ô}ƒ¾XÚÊsÍw|ãÏuÊp¹!©[ÿs½þ¬ÓÒ+°÷º.cÆBrá[ÿë×ÌiùTañÖÄ~äGª©=³CØ—y{`ôȉKúï-0]÷Ø^²¯Ï›mñI?ЃÎŽÔy\‡óššoÏ6¬©½ Ýu¯ðmEŭ䇌C±oÞÈŒA°h,öÎ •¸GV˜3³Å{ˆÂÇ{œ²`4vÎì>Š­­ßÆ +Lö8!pf&ϬgŠ" ¡¶åú )ö‘[Ý›ëgÑêÌÀãF_h8õñáód)Ú^[·EY5vyõö·Â»Œþ³%¢”£ÖsF3´¡½ý«e°¢Í²5^· ¼¢*vâfSgØøïVÀ(Œ àŽEå8ã$6ì–N½wA%ÞYyÓ””È™G{o.³aA“W°µ ÅF ¯Jï‹Ü‹C*³.˜èaP…»ÈwÙŸ¢Ò¢vKÔÚ07ŽT²å@½tNØÊ:Ÿ3iJ–EÅXÆôŠ3F_¤&í €©/ |¶]ˆ”`ñ8Éᄂx`7ÆúçŸÛÈo;7³Ô¡ÇÒ®n¬ßtæ3Ä\ÛæªñºÿkÑR½íÇ@¨ øzŽY×`=£?ÆùRakΨ®öU7o 86­±ì½wÊxg•0»ƒeÜÒìtkkj}ŠZT±ãûãÔ}ïhÅt ஌¤«à?z§»õ.d¿g¦,ˆ$Û20íe0žppÇ€{K×C®ºg®?g‰’‡ßzOƒ›¼‹Õ Ïöäãx_Žà<ãeìlë-Hý蟡`Ïy<8} s;t®¶`Þ©Ñ”ó«`E…ïØyjh_.õ’‰Å¯^F¡µ~ÏçÇÝ„›ó kºöª·V:Jêr_áÚKeZ Ý 5ýï¿ïn–=e'ân1 Ôƒ³JY8zÐVpÐ`‡†:ŒÐ7'מÀ­RÏMͺ¿;ÛКsïßS–4´O‡‡Nh•œwÊ*Òu;™ïY‡Aëô~ëG9·áºe[||`÷c‘€.àxêÝÇ¥¥5:F[gÅLT³wFÙɌ˯ 3³Î{ÏÊò*jR·DÛf¨ÇµÖ¸ª÷ï+|ß3£äœÓšÍ¬«’[Å¡ž0}\n“ÎFck Q ÏÒ±];’HõišYò59Íï¿«T›M8ô‰›ã,DŠvf=êf³}ž‚ÅŸ 2³Ç»~Û]ÊDÀ¸|¤k¯p¶žràq³•Sx¾Ï÷“=;Óĸc©ã+˜5´ÝÛZ:téˆeÏcJÏžó½aV ¸ÿ?J"»2ƺ>꺢wÖ s´ÍÏ7îfÜ §_^­3s½³¡®È—¨üV¦’‰{.ä³ÍÐïÕ®Ã÷ÇP;w?®îòu×CÒ——ä¯ÖÙ3Ï–­A´m.Ö„ê3™³Q‘<ÂÖ­6t/oÐ3K©Ã §Î:øÁ .S)}·À(›æýpêV–·‡1BxÐÖm,,0ÝKtêí‘ùûïfå¹tR*hn¯0Œèöq¬ä9qɈ…Í>@²ãbøø¾u/Lçpc%ˆÌ€ó* q[6ýpFƒò6£¡íí*ÛÈýý‡¹ª~Ö1¢ß†z,4™0î9¨\S¶©S!8êu öY¸RÙâ*‡‰«™cî/±##7”×Võ{¯ÎlNymΡúò»“ŒëGÉÕÿá{ÑãÒhã&•:ø xJö×Ç}Æ8ò)ïÞÑÏùî»Ö­Ø™lCØQ,4NP@7>î÷߉•ñµ?—©Ì½¶¶,/}¯ÛÐGiWÌÞ÷š÷+¶Å<ç—p“.ÌÖÓgWz¿GϾ±Ûðõ× õ«gËJjæšÃÝg:ÓV«³g³õ ÝY º?ÿ-¶‰Ež€È·}óá7r·Or×<Ò^Vè—0”éÙ•Ç}i3 :š~2ny.¹_·³ ‚=÷Ó[÷W7€GŒœ^o­˜ÍÕí6«ª¶tsɇYÉuÌ\YÌ©ÐNm!d*VýVp`.Æ]žß*¾KËÎ{¤5—[pÜïÀµ*U @ 1Öt†‘|Å¢š„2Œïµw¶›tcaÚŽwA²ŸÑXPí³>~lÍ/AõªAÐ@6M3ͱ/±t†Ð¦š7sÖŽŽ †4ãË#“ÎàR±MÚóÀåö*mý©Ÿé­«HCc¦½öšaœZêÔq^ÉTªxC#¢ÕÝ[U{)½ÐÈZGªÊ®€”’qVhZÓ;ÒäYÁãYQö­{Ö"®›õª mÍ79ïÑtRÛÖ÷(ªÔ$‹“ѧeƚ̽ö­ŽbÂSù)yïÆ—«©«Ì4¶ïî8Ó¶4åÛñU–áqoɸ«~ܳAõLzI’‹Þê²2—n9ÿl»oÁ¥yÍ[0ýš0r>Ô¨±Ôúà´ö½·µ½Ã&Å+~ (o×\8V8òZ¤=‚ ßODiÉf-¸—z´~†,ŸÜ·þ–ñΟ~‚ÞêSlÅΞU–?–î×¹¶%ç ©0Ï}·™±LÒ–øÜØr@¹öU-ûÕЫµs"4²¿ÎCo¥ãQúçÕ[ëÎýôú,†c~y0é$®-u—1û® é‰1ú¬Ø +ó$ŽÎû§ŸÚ|¾/"Å@cǵy>W,»^ççx?ŒZeÜyôñWNð,3ÿÍ;©9V;ú鵬 Z xhû²†kÉßM@¬o$@Ö+¿+›µåë¸\cWGÓ»wš[¨l"ŸH©×·îûÚæöNœI¶`kÏû¾×ßjìXÏ@õ(| „iÏ›½vOÃð:ÙñìHŒ£–ÞçÉÇçPiŽ«"“ÒÜB? PE5@vnÄœ]tÀÄýWÙLš3VP.‰5æžç¬KÕrµþ¬ã‰g½ÕÇo炤{ɪ,#¨f&§£–½~å.3!êùì›QŽÎE#ã>Óë*vÇ/EGÊÞ[¸å3Ô×ûžØÚ„Òïö5¿—+ðûÐöÈ)èˆÒ:Rü÷jævÎDqW»úLŸ›c®óÄÍQüÃf™žÅ•Î×ÀSJ¶¶ûÖ„W¸ÕvWäw>a„ËsíþËóå¶1xÖ™v|.Ý9CÇW'L¾û9"Ö–óyž‡hÜÑè¨âÿ|í•‘Å[y|KÝ6Köˆ=âaféHU ìª$èmq©¢ØðIÃÈáŽ2[= —ñGƒ†kÀtÞý°üòeå 6œ]e£Ï|ß«QDíîtÄžžÙ~÷?Ÿa}øX¹Î3d9[lú>³þˆséŽl Š*û5*ܵÁ@fœåñÁ¸^µŸ²j…óo,Jmì­ ÜûG~eÄš‹ŸVúf40j½AßOŸšLP^á¾ùx¹ËÍC,©÷ï›_‡c ]Jê· t6)Âû÷€›Q×>2Çk o´U¦ÞN1èi Éû¥O ï5³ÇhܳÔ-Û¼µ>WÂÆñÛ=£‡éséQ­øWâÌöÑœ.?»¿ñÃmOÒAÆÀ²–uÒ W‡g— æÚr1}`*KJÙ,?й¥àh%é=f!‡„RU&”²¨äÝe¦ÉY!è?×”R™Ñ;ÈŲ$Û:nƒJ_4å½— Ç•m‚ûìE¸2û¾édRÅEóÃ˺µ¿ÿÞ®²æ!õϺƒ”¢¾lpIæßö@¶fOÖ~ÝLŽÒ«ØÇû§ˆfÖ‡éÓ¯â¶ßÓj.ø9ÜÛó|›çŸUÕŸý¨ë¬wQÍdã¥zž{Æ ïCv›‡®ÎvÖ…"£á#þ][ÑTgž¿ž:û·«ÑT5葲õeývšû¾ãG£“×0Õc žGåø>Ûvsÿ[ßùíc–íLÃÞàœzizð€q—¡’c´ísü¨p¥ýWfÀ½2X~øår®{ž¹7¤„f‹“\Ä wŽœæø¦‡3=Ó߃Ý10ËyžÌ†nóþ?+ofçScÇß6ºäÝ;÷¨ç Û==ŸQÛÞ)gFQsöâžÆý¦ëÅÃUÚû[{xÝßëºíÇú‹ ýÙÇ}ÿ*XwŒÑ’¹d/Ý+èÉ›qÆfÙ*Éÿ~ל=-Ά)œú¯mÐô+àݸ7"œÄy÷nå¦ ¢µG7PäŒÎ‰‰ˆÇ¥{ Lk5•=G@lÎÛ¬g”Á¦`}o)Á >3b^­t×@¤]oa/ÅQ‘_ÉÏò:ajÛg ~’<&·!ûÀDÞ#gq»Ñ/†V7ž Ër’c%iŠ¿ Œ„·ýë¿þý%­.^Ï=\Ë»ñxÍ9ÕÐ}jîBK Qêøi•¸ôpß^=Ü÷zÁUpö¢”ÔÄ÷‚–´Ë´’Ûý™î.°Ô¬T7IüýL`“…ATáoÛÛt–œ|ég jW;kã^Ñ´À­—Ès¯C£œ­çíÒEEVwáÆ²mþvû’S"c¨“{ðÔƒÎÑúsÛ²ÊÃÛ–3¨7NkÐ?=ìpæ¹—ºUr‹ß ­Kž{Åy}>{05íw¶Ì:“ÙŸý¹˜Êe†i¯ì ôótíšÌ«+r¸ªëä¯s¤vU» ¤®3åœÁíNß®‚»@çèo¹Nn½4ÄLôŒŒÛkb‰GAvù¼?ÒK¾Þ9^º`8âà‘Ëöæ˜/_µÑóv>SHè(œšKyÔËú ~?RÎÌËÕÁ 8©ô–p¸›ƒáAh¨š 9=“eo0)åD Žë‚§†ìŠTfº8Z¦båw»•£—Í2ÀýFk>A$D6¼3ߣ¡ÌÌçä2&Áô8ÌZ;°þl[»$¸m²È‘ߎx3öQ±À¦w’1Ô³ü&s^%¹QáQË!³ÈÉÍë[Ѽ—çÅ=;ËtüHàž¥àÈã&Ìõ6ÌìÙ{w8]Á#}¯TÌsÎIÇŸªn‹…\ðà•Ãà£ö€Á}Æu‚{¼Õ3É£ôûé oÜc;[TN¨E5Ydêê8@\a=Ž(éëRï½#¾Ehä¹ê\•ˆ'û¿ÿ¦ä¨0Ú¦¤””ÌKè ìÇ‚3̨zÛ‹Ûv~óœ#¯}˜Œ‚jÛ,^/ǵ·L{P›œfxYûx@9ßZÇPå¼Þ|ƒãû1Lû®ðÛÏ‚­|ƒs‰Ú:{G8>ëì?ïzŸ>¨…+Â20º&#ï~.°iM%_‹„t“ÆýÐßO?]ÙŸ”ߣþÊxßž0i ád ÷(æµ]»­lŸwu¾LýÈÂ쟽Ïjûî½Aµï³ÖûW$Íz9–}_¦µ2_1ìŸs ˆ£]sm˜Õlk^–ë¼BÍ5¬>èîɵW¶A|Ùìå%ü¬X% ¨!ÿ0¤Î ‚§^ÿ-0,»`¨FWÚ,I¥;C— Üs‰ìDŽ4¹|Jòⵘ™Ãw­A.ïß}(¤}L¨Á£VBè»´þƒö‰dBU “eŒ ¾ŠŸdñ%½èÅ<ør¤z>ÁhÚ—L,[-üáÁ4+À=Í:òŽ—’åôÁCöE¦a;PlË2w¶ÊlÚ^Wñcø®óJý ˜úl¤' Yœœv²¼L@Ÿ…“>K"(öj¾ÇÁLÞu ßùÙRŸä­S“ã¡Ù…pI€ J ozñÅu]Ê„à5#ehèGm}ÎE$ðêkî‹q·|h´wìƒá¤”3ÝØZH„¹÷ül"Yç,0ìó£àI7€£€<Œ³±–ío³'3ûÜ™¨¦úëÏ}Tö}UÐÎä%û¾.ã EÿaÔÙo‰mV`(û¡BóHeek$wöÛ;2Ô#öw,<ÎHAæsÛ[U‹çk{ƒ{îË&á±Ã ÿvo|†°äññ~6ƒ»VŸ-ŠÑ!×ü¼µ†öÍ.iOº»Üü |ÿ¼²Ÿ;bª-¼ý0ÝØ«W¤ßµöYã g_~%t?^{+?’‡ºçû“,¡†º÷ÚtƒÔñ<%ާA4š›ÿÝþWèô]I>xjž•W°³ð@bõR¾Ò—#p!;œq¾2³&ûÎÏTÌéFŸ¡NùÒ]ÞÐߥE[j 3í³H žÉk†õL{@¯´Â€’€G dH†˜lÁIÀƒK3Üb1­Ôç³¼'Ù{Mßý×_[R™Ü«îíÛ¶[’”Ü~Tn Ün*%:ûPù»*êúÐYÈ‘Ê$œòS DS{ t_#*½Xjà¸îC¾5ÊzKò²˜‡‚Š5TaL {Fö­÷$”¯–—ñW–ðÄbK¼ý±i˜H—5>Ã1R5q³ÙuÑߎҠQèR]bè(R$´Ÿ•<Ûz•Õî92;¶Zm¶µpmR2 y†º NlËM%–]ˆÜ‡©2×}x6T½Â²×y€= }^wó°¼í¿må:gϯy*s¿æm^|&³Ù‡;Íá&×M¾£ÑÛûü÷ÙñÙùÏ÷,ðžáIrô]Lâ|üÈ=ísnÿyàÎ}Ã[þœ²§!b?~ü׿ÚDrwñYP¾®zÿ’'¿]ߤXù·÷µ«IÙ¨;ë°;Þ«¯BA± £-kœJZ1V©LÚ>ZšRØ àÂ<1ªˆQcFeaÓ%]¼Ž ˜Â}[s Õúx険}¦wV¢Ú_yg³£$¿P²ËH´U*!’kw (‚ýp$e{&¹Ûþ=ú¦5|ªí=Q,Å.«0 (´äÃŽ=•‹ŸÖ™Ú'Àw`:,;Pž[ùȸsd¹Å7Àݬô|S½MRãž¶UrÑÆ›œahåñMÅv÷y®îí¸Gô矈»¼ÏÝm¨ ¦y˜…Õ2ûìs GZã;•‘UÙñ`ýiùùg)ªó¸Tµ½Ë›:>+³Ôšk;Ê“Ldy€¯¿; É…+¸ÈND€×´{mªíT¹Xz¥ˆ?wì-äž©æ9ml}-Ãz‰Qv6ÿm繺ˆŒÈ}X]ðår³EÔ‘ÙÚ7˜¥~îy´Ïêz…¢½úåWP[ 43Ë%Ä–€A[ëlú9°»ý­›° uM•ð°2¨ù®…ó:õ‡Æ°®GéÎ*A“ú\~ú«¯ZW«u^Û5ÂýðËõu™•%ærÕœ³P‡“æ(È)¿}b;÷E’— ½ò}-^¯¾ß_u lš&•9œš>*ùsïПGg·¡ÎŸôÝ’±0¨²¥^ÉÝ‹šÚùÕd8¿ý†÷|5MþÛ· ‘gÐÃe\ ¢JëÏÑ;¨*à96Ä´qÍ~û-#€\=/^{DÛÚúY¸Õ¨>Ÿ Qà¼ñ<Þrੲ"Y΂¢ú1¾$q\tm¹ÎÛ˼òýÕ“j?jj.3èE>µ“³‹s{¶TÂÚZ%° ºÝóQ™»ßóúþ½íêFz )kwË–¾ðჲ;Ž·gÕ6c}ï³áÓ½èǨù9 zWŒ1[÷(H¨3Ry{œ;þY¾ü¼Zä?Œqïgáëà±á–ÇYÏ™ûŒÅÖ:kŸy”>ê¼Z­ÙñƳ¡ŒÂ_r´´¥l;Á—ŽÏÜ`,>©‚ɳZ¾"æÛPxdÜ+Oì¸%¼qx—ï×p^ˆ1F?øqŒU®ê¹ ªµ-qiÛÉÈ]õááoÝ=H‘Lv$TP6 ±¾–O5S–=¦9ì]Œ –‘É]ué W6^?ˆì>ÉÌøi 9TRöŠüdWíãwJÖö ‡$BÏE0è,ý= [L¹{D9*­ò#ÏØ^Åð"zEuf\>µŸèN oõê¤Y‘vä¿ùæ‡FgI½Õ}Å€¾}š8K»÷$[ŸGaTŸç8oîgÙqÖQé:Ì®|Wø®9ýbãK$V½~u˱٥’úäà|g5%¸¤ä¨#ªÕ’Â@ŸÕb­¨Bß?+H’õ¯Êþ*Ô©îø½ëKÌX†”cˆîôÎî pÛwDëOn×G„L ùbúN ¬í»ïxö ò¶ãÖJ¿ÿžCºsп-Èé +GÝücž˜LȤI¤;qQ6“Ð9Y?;!Ó_Ûö£œùôs<}¦ ?û˜òêÇ=ï6Ÿo£ãûõæIÚÝꑾ1–î€D1œ]ÿ#¦VÀú³Õí_,¸Ÿç«iIK‹VËõ/¶¯Yßæcöô޽ ZuŒíÏÒÕÛù¦(¬!D{é[I¥•sÍ@¢ 4Å5:¢È@ÁY§èìÁô¸=ã’‡nc>~ûm ¾'ôLWò\?eÀ¿žP>÷¯üòK{¼%p/V{†ŸåÇb»@±ã޵7k;ûîÖÁš×Ï‘Üü^ÉþfËúà©WÇ)2|Ô°£p®Sõp_Æ‘ì%O º!Ai’.$(ÚâVŲ[8$FÜâ™*g’” ž}½dm€',äl­ØŽ&°}•e°•÷M’ô×_HYRº“éÅ£MöRYî±?{‹ úд̾Å^V£™vÁ· Èû\½tó*´$6ój¶­Ý:ÈÛ`Zý?S„g®Bö R-¶e¬p\ «¶nœÊ¼ÞnrôtO¶8a½ Nû¦Þž>†¬7LÌum• }Öl£–«+}gï!êáµÄ*í¬–}j;³9ŽÜ£ϵ3£ GŽ?‹1¼©ô}1Ì^Úè |§\D>* ޵õs.Ü{«Yî?[:~‹íZå 6=sÊûpgØñ*³n3çL°þrŒ Ÿå 3ßzwš£xy8»2pvbáþ_}9@!_mvÙïëŠö¹‡-ûÈ­›H¾³çHfz÷yI0±¤ˆ`*óº ÓG“D+€Í>ö ÊKÛJåÆò4 =íòˆÜžÒÞq„˜ UʯÝbTì)žaèl¸Ö}d»Ç÷Hã€l+­°OèœÜ*œ™ÖÓ–¼Ž1_ñqäš³ÀÈß²÷è0ì»ãoõ4j~-<– NÊ6¬#oß‚¦°Ä!)}±ˆñßæXlh2ë†hne¦_r””¥â_ðQ¯»ûa¯}@¹YyNY¤ájBqÈë0å0ý:FmsUz ¾ëÈJeΧ´÷Cèø:ÇW?¸'³n¸<òè•)×P¸F{þÞN5*{l$ZÚü¹†ïu{²èbd¿1¸¿þúþ}z¥K‚2ãeÝ詊4åL#Ñìçô¶¡>ù[Xø¡> œ¨lDÕ5ªCºîyúo3ÍIÀsÓÏ­AÕU€žLUÞ»òþÏÁÙÙh/¶ñ䀤tâVÉ›3Îкœsu´ÿÛÍcD×ZkõŸY³½Û6ŽJeÉç¡Ïj]šÜ¯,%ˆq QóJU¸²%²’WaÎ%á¶¶8ôëô¤õç¯ÔUÐ{ÙÛÚмR–ï,Uª…R]%¼„êû5~KW® fúÖgŸMËV©È©ûßnë’0Éíg„ì3-{‚T rØŸ8·4¿…OŸÞÒÉܵ5Źwª±%. Ü7z¶ÞÃ¦Þæäíù£½Ñä ¿þÊëy}­™™Š””¨W&£Ì*_A¼¾u;€¶Û#ªóVÎæªˆÓc~îôR-{{ÊúJu_>†Ñ (çŒ{òôœƒÚvtœ-°Âè?XÔïȵÌ} '¤[ѹOoMÆ\‘þ•Ð×!¬“ž¿L žˆz6w>«<ÿèóÔ:!Iš}l±é׾̖ pMÕw4måzÿºGÊšö×I€—˜×Œ7Ê0 `_/w©Jß”^¤V˜e~J¯q·§‡?Q­MoXÌyª^Ú2ÌÇ–4F¯ò¦UÍT‰pÚ:õ27l`Z\5pYK*×½—ö}hí •!Ôƒ°?þH'á—_°‰t9‘{hè^໺ íàÂÈ‚§.Ÿbü¤ÅgÕñ3E@Ý@üœ:`x U®Ý֓ɾ[ö ¿ÿš+Þ qõÃÃgÕ¸J¾šJ+½rMäMG‹R,æqùD)%Œa}ž¼‡£,Ï~Ÿ âÝ›h†“ÁÖEhG';Q˜”‰Å—æÞs‚¼µ·`ëÉ­¬ÖÞW¾kÛ†J¡ϭÁIÖ^÷~2î^¬–”ëé±óí·¸R$pW¹^fzÆ}~5ˆÏímhƒâ/û *‹ˆäDÒúÎL­ûª%€WBykî½…ŠZ³ cµéLÿø³Us…nn=Ç4Çœ;ÃTØ·j‹Õv>âïÔ¯sëY“C·–ˆg¶GHgÚ+2Ñ í­g5Û¤m-&¡ç€ûãåÚÁè¿Ýì¯î)ÈïÂwÈE_*Ô^w&¹d¿äRäÕ+¨îT«®2É<‰ÏÞw<‘œz¯æà¦ \NS6G»k$+/?½¿ò3Õ» ‘9uñë È+F™¬C™siðèÝ>òè 4VEx2ÇÕeÅ‚&¹%¤ç‰– ˆ4v†ìFGØqïpR™õdèS$CItnðª9Wðžý«X%½Yx¬b!×nsz§¹aöÛç—±Plzzmï™#Ñ…d3Ú‰+ Äs í,SÖ’ìø–è¥w ªCÀ¼Žô¨Bmèjž)›NDæà{ï þˆWi“tÕÕ13]s^U$X¢#ûH{iB@œ¶›Ú6“ÚI¦ýœ"-Ûžÿùç&!T‹á¼¥¢‘±Aö¶l¯Â8RhOYÏ(¤QÑUÍOí³”}ŒvÛ•?í/3s·6ŸQ5Ö¶T‘þ6³„ZVö€€oeÇõé\eÊ|pY(  ¢Ž)…¦§ eŸŸª#ÕÎØÔ»‹?Ë T[af7€Þ³þÖ©Òž¹ÄT—ôt…ÏR*‹îc†¬ze3[ÌzÕÄ÷O‡¹rï™Rü#a$¿';Šôƒ¶¹ÎY^침œÊ8óW{þñÇZùk¾ìgý௽gÝÔòlA2ºíí:®­ùs@Ãc5Ä,ížçò35÷í3¶½†Öz[‘^="w¥b÷öÒV&q síã~­œ³ ~×ÇXåßìlEÛ{é1,­°Àºöâ ßÓÏ[œweßb ;æëóñÐä, DRì±Kk@Å)ööÖp$êg†±F:E…xîöÎÑs†)89Á}q1¬µ{`ÝÛKè`%{h"A¼<Ùë·Þi¨ÿ¦¹G¹Ž`Ÿñj×hÖ<Å3zÝ^@#”OùMY>—ð#zÕ½>ß/ÐÜ` JjõÆ…Ú‡æ\ Fs=Œ\5(ÜCüœÇHçÃñ*ÊRÑ(ÃÐÌ p‘æ2LŠs !|9çpc„¢]â«ß²ÀtØwý\£ÛûÈÙmëóõ"­¿<ˆÚž”¬HVžÚcvã1pL ¡pz̧„&ý|Ò½'½ÕçÌ÷×_ãžáТºH—ÿmhÎ Ë™œ#+"£×ÜøZÅ.~Z¼¸G™«f}®OIŒ½kj_"·¡w‚wIœzZvæg±å•ý5|OSÅîÌ™1Sv5ïýÄ’e¯¥gǘ‰[ É¥¶9ïsðzn=yìE3WºÏÄ6«¯ëðôì¶Jˆû¬ùâ诎 ©ÿsmW&Ÿ÷}Ûù‰ðs²EåØ{ÕÏ·\ºþGåà^³í_¯ßqö·ô·qÊõ(㤽wfȶÝÖn4ó„Ô-×ÞlÑö> æ’ò†d@«~îãžR™^ b’¢ç¶-`BÀ¼8΄È)ðD-¸3=“gI ž¨ Ê@äÜæì¬gÚ¥øÎs¶ó“TC@ ‘LûYkÆ*±mI f²àoä‘Y €ÏŽíO˜Î-˜±¬ëoýýVˆï©%™;„ôáS*í ¦Íš;xËB#›i ÊלÝäæµç5 é’À”ô¶Ô¤ ’gލÇUd7C= Ûqf¥eƒéì`½Ê0ÍNh8wà>R1‚–òP¹ØŽu^5yôÙ«J–MkEM .§§{n•ã«R`Ó{Ô˜ªÀN–ÚÚw%°ræ'Z𜩰o}Žlºo`ÈX­*+5¸(kØ´F,Uf:‡8Ý£ÈËÌÝÖë'L¯R™Õäèö_®&$7=×^3b{mš£_äDÓþ“%÷seÇû‘ÙÚ+ÐÄBzÃo–®ËfjѲmä òÑç¤&ª^îõ¯8oAm½Ób­õ×óÞ5Wøûµ×ùw|¤îŠsÎpákÎBG9=_û2…ÁçK–]ßÃI <Ë“‡Ãqr¹b@%”ô›MÛõP{LS+à²ÚöRÜÌý·›0Õðm±•7ˆ¯PÞ,o)¦×{:Ñ<>ÖÔÌìôy¢s ý(,Ñh å1Ò¬7QGDÞ#žÕ¢@¹ÕÀRpŽž©¶Ê©™Î4E²Â~Àó8-)G@ŒøGàOü®Õó­haÍ*'z¾<O{ûÙˆª†)ýÎÑ|3á{ÚÖõdqÕ‹¬X§í Û–+˜Iãžæ×m)‡{©ÏÓ^³–ÐØl1ýé“eoŸ¥‰4ë†ïrwÉ2·?‡M‘¾°x¨#AÑÎX!"^¾#ŽÂSG‡cžB)&ñ^’¤D©™x!Ü5vٻʹ+sI¦>ÒíGN5u­ÐÙöšf¸ ÍXÇ '©íÕà¯ä’®ò)úìhÿgßÀÞ/õþV?k0ÍüTYVh®õä÷äµQ…4Y<¨àmpš© §g™¯}êm2~ó A?Õþr •“N½ä¦/ÎòÆÅ‰Ï‡ìŒ–—û`zm¸VÇqE3ï9¬|î>®?·+–Ñä-ý·ž =üT;þrôÚ’Lô}Œ =ïhÙëq¯áYÛ|óÙ„™#£ÉÏoy¼Ï±g×0º>{Š`&Dyì§cÑ»?f´÷ÿÛ*7©Æ÷…4kDý¯BS|þõ×ê­MõŠ[:°½Ybm¥l½Md*VeH—ƒ¡¶8Ô£]ËÆd²i††e+ÍUç(j÷ª¶÷ÐêÈëWŠÿ…”YÒš—/{ožˆ0©×kïéñŸÎ÷=Ç{¤t7k ”JiGÕgF’øZüm2ÉȘ=š·di îõ.2áÕü= ±ÄÚ3N­¬–Üärt²¯–—|b{D¡OX,p¬ (´ì>ÓÌÓg·AŸÂä@“Bñz:Y¿®b,óbå¶îá¿4aôo=ŠÊw±$Fûв 9ÐJhGþRë3©$ãgßÛß&O¯5sÜÙÏÀwÉÌÒ×?EòwÏaß,;)0$Èñxîìý–ÁÔNH:Ç'ÔvâlêïÓµÝ|¶½óíÇŸÜ9ß”‘ë¼_å'öºçž°¨Ðs–íj9På­Ó6tÔµ³äÜ–WUïcN:»½b¾š…CUÛÍ Á9+0lçHs¯÷¹4¥ÿ¬<.¶¼ì‰!„½r½ýEŸnÛúã0&¾ Oɹãû,Fj_ïM!·S]÷«Ò”¡Ïj« ÝÙz䲕ŸÛî==À½ðïzã´ínŸ¾ª·> ù2 û9П{©ÎäÇ%ž~™ÁF>·ŸÿñžlWÄl·ì óõkɾ]» ã§í|»#Owç/¢•Ï·Ü å¥:Õ@ ×sÉKú@¢d¬d£0 ”¬$ïÎhš-Ê82™o?$Ä~¬èQ¡€´È3ˆ'´›v³Q<ÇQù±Ýkyó¦ÏÿƒéädÛFø.@‰i e‚׌ÂÁÇó: 1ƒ]b2¦èH°¸H xu¸÷2Ça= +~=ßCñkÈwæªéŸ[Òö|Ó:ÿóŸÙ=È® Â&ÖSaqºÙØÑ¨ÚqæØ4ðÝ.é´ÌäëÒ«Õù.dRÈU¯}»÷¤šŸs•ó m=Fœ |·ïexÍþ×ÞÞ‰†¡ä\¾{×ÖÀÒW„A<*ysóò#Ò¨4€Û¡Z¾UÜö‘g°ìl§§”…ùÝwô d™ÎåÌrª"3ñ£|*æÓ°r*UÀs8ck¯8OÏœ>øI…ÁîÙÓÎ’÷·#ï¡Øœ¨ÊøZ®àÓÎ,»YV”ÒÑë}乓­ïû¨Õœ1ùWsù:R©’¯÷·™_» †Î[À„ûÿøÜ‘™¤3qkacg÷Tù÷½‘^Òi(ßÌ;ÿøƒy àûh…ÙO;l?=k9ô8yɾôh¾Í'h›ß¿oßÒmuý[Rä;ëþ½’¸N,ŒßúõkîfÜ+ú’i–PËì‘àoEòaúàîh&% Ï]__šme=ާÌw• tpŸ]]ÿ€»X*aàUÕê­ÉžwZÍ[pFr˜ I¥ÑÚpë~ˆÁs‹gíòa>0ܰ˜ÿÝF6GFea‘1 juk{ ¸DCò<éSZsk¸§3Cwû‡¼}ÛFãþú w Gç8ÿµùYuf oú_â%·0NØÄÔC'û›±SÇbÐÙ€ïÔ¸Žs×ò ÁÍä×åïWÄßÛþ2Æé±“Ç(e<ãx+@™BbKxÃ#¿AÖ4¾ìÏc޶•ÕÙqHö2âÊŠ.Ò,’áu¾AÛžÖßúô‰30Ç|%˜±Zr‹mæý!¬€Î~ ÄbÿÄùŽp±ðëÀtJJö¿e/a£Éx@¸g†O¡?‘r 'Ýæð´D/êi´ítU;[ípÅb$$LÕ|³ŽHÚäqäÝsfèf£I{Âä5+Ÿnô Í)Ô3ãîŸBÙ뜥êæp­·¶CÒD„·TÀT-{öR¯è/"[«{¯M6´õ‚ÆZZT|î6Ãq®¹×áõW^ßÅÀèÖÂ÷hç9³@i‰Û³:¼I¾ùŠc¡8Nu¿­ ­R<#*3 ØkÙ÷¤r©ûó9éÎ^´Ó6£Ï½ˆ²w[Øã#‹ÀI´3]þú`è9oû#=ô¬Ï{çå÷†t)’¯«¨g®&œÉî9óyøû£"8¼½‘ÖgË“öýí[zDXFn0î£ùü¾?èöT î…+m-óoýh7>4¬ð7–¾¼íñ°téÞëËsd0ýIR&C/ˆã%¯'ã®m—씽/<äað±>z "WA€w—(=7;•à>3~ªÈá³(0ë,9õ5œš‰›é ƒ#{ƒU9lšô¥µ¸¥ºÊèË)^Ĭ9 Ò—í·øÜb&³d”<ÃÛ©-±‰#žã­0Í0îXþÕ-éç¶FfÕ{IJ{ÌW¿|¸y´ò.$­¡ŒöÁ›cŽM3Öœ…A›ªÀH×| ¡¶}doì»~6›(¦ó),¹*¹B1”„qôëzikãHým1ÙæÜOð ªDeÚ*[aÌ8]:¾gn«xh)ÎÓ¼5l*Ø´Z/O_‰iÖ™\…ƒ]ÕÓãFŸòLkÓÖ¦Éã,±uT«+²J¥‚û µP»£þÞºyç‚?~l¢)Î+˜ãçÍ’Cw+ÔGUý÷97ðÂR'ÊÎ03/Õ×SHm;ù¥‘5xF¡ç–ÏÏè-³ Ó §]a’Àíæ ëUlI_ö³MÄÀÖâgMïÜ£©öå=Îp@ê9Bö ß]hU»Ì¾H8pBpGŸÝ©¶m âÀv¯»†m¹…Xe¸_áV³ Ë—ÍUhÝzI>Àj¯šŒß÷YßÓµoeý~nÔQ(}ü|Ü·;7àÂþM XÛ»¹ÏÜÙ«÷KïÎ[­$Ó/¹=ãà}{0uЌ˜4Ƈ;Цéû±T û<ŽPsà@uÝ8Çä‰>ŽÐõÞc ~þºnÓ†é†ýûS9ªÏê‡äRœc¦?ãlzò•‹4d41Ó)Í´%QÅK͹”23ñ‚΂ûm=úÛöÀ•üÆGAÀ½½.¶¸½ž¼»@{`KâSkzqÝdèqÎi}÷ªïßo‡kâ'×.nØHùžTÃS¥Á"e­³lÝèýÔkˆ’Å0iûd—н-étµ‘³ß~²ÓfŸ°|o?£þ‡ƒôÖï@yeû i4¶ŽÞªD¬~ù™M+ Mòåí2Õß:”JŽI½ÞLv¦±Šg•Úž£Æ÷Ê1ÙQ-]`êPiæÅz 7½êÛwTÔN^ËÙ@·¬Hr ÛŒp_åDvRþ¡uˆ7±íu·Ú¥ƒ‡ÑÏÅøÌè¸ä~˜ÉöØê–è9aPÎUÌÞHo™ú³÷ú›¶”å®à° sfx ÂØò¤*­úïùhi {F{ÍkÞí£Î,orθo3£{ ?¥Nçb=²¿â@²5ƒ÷ú5y½™Æð=:û ù“uaÑñ )…î3ÃÄY:ÁÝò£ÂbŸ9=øæÞ@Bùçð·Y÷¼ÞÑÜŸâx@4Õ~Äë6×n>{{Ó øpjéèh;KÌÛ¥o‹va¯*Fy¼(Ÿ2`úi=–d‰æAH‚ì¾Å ªŽ l|Tˆ‘O9"ŠßoÖp¥ÉäõêóÊxeq"þ; ›dÍÕRÉïbáMÆÂëo ¯õðNéKº_WànËÈdÜ{‡™ús*¼-­Qù”‰­ pÛ_È <ù×äÂ]ðŠæ̯kü±²òÒ¸çHkŽK¦ŠÖÜ»ÑWgz†/ý‰l•$R=”Wê*⮞›ç‘V½çSã=–cÊâÎÙòÔÁ÷ƒ³•Åwl–Š$Lp9ø½0oàT¾)K K@9 ¨äéB è¾ó[x,@?<=‘ã5ŒÀôŒ‘J1X¦Û1Æ@V`W÷ÃSŠ,à+ÐO޼jèkwË  …Ûß"Â1.°8*Ô{éK…ìÊìtÄ’ïZt<ê:+o׬;*Õ[£ßæÞ[–TkS\Tîô<-7Rß ¹‘¾uÞ™¹sýô"ª~hö”ÐØ×¥úÙ[݈¯ýC÷Á*h®%Aí$h4{µ|vT5y‚`1ÍŽ9«±\ímæ|¶lmû^Á±œc‹›[[§£Ì9ÚcQJåÚóy½Íú÷"Š«&‰r¯Ÿ’–Óç½·uLûy¼+–Ï_uèPžZØ ;|œa¿äþ<7Íà¤gô(î¨ç!ž%92ļâÿG‰t¶Ò:sÏB÷êòŒO~½ÂYûûfjÕzz,rF2.Ùpï3’Xqžvbj˜—Õz^T{ÏÁ,{ruùk[‹W¼¦$6¸Ìb&mí“ýæ Óm­Ì0û® —(°f>=—Ò£ÛàOàÒ01XS:"e³ ¶øx`¢UìNÅIÆ:òäÝÓÇ&Å3©Y—`¦ÖÖpÀÀÍTêS’%¸ÌW¾{ílJS*O߀­Ö#žª°ç8J}î²Gý²H“³÷þO€Î‡Ç¯«4ˆm«@Ù= –@vÎ1ÖÆ¨ƒ¤œuüÈŽÔ¸dÏ0O‚xFÊøÆÓJ<øªÝl2KÆ©öÏ(Jûn'û:>î(1~K™+Žæú!×êdw»¼§2^We^SuMCÏdÍ%×±Ý$ðT^C Ì¢‹Ò›QJ“êÏ­Ûì»böS®C)N)c[Òѽ^e€Ï͸ ™Iw¬w÷€iût;ý3n%Ê:†kM¹eE*Ÿò b§üÞíÞ4PºË§_Ê(=êc¤\Pùž,ǤÆõÏ)§¹ÇK?`j¿í‘/·¸qûé¹¥ï ²¾$p¸&ÎÙ’ m±þ½üéqÖŠ=º8»æ=O¼vݵûBmŸKP¾<æ8¯²™wÊJÇàå„\æ}fý¯  xK‰®fûò Ú4|Üú·_]OL¶«||/I•7o€r\i°€Gr+”3q¶ÈFe–§ðù£b.óõ~ÜÖm+L +ðÚ“ýÐ[5d¬C«¶$ó+¯”VXR [Ô™/—ñ™ùx‡%©-™ üHFGÀ¡ƒ~ãÖªDÏX¥”aX|" Æ²=ábæðOÝy*ã{§µï IU¤¢šò -3ç50Œ(%_Îßú›w·©åèè+ÌMÉŠ>ÑÛœžô£LeÐÍ…kT·Ï—em¨xÍøchèÖÜ|ªØ³@Jàdgœ”³ŽÂÈ4§\ù׿þëßÿfËæáᘰö¯x޵´ò…•¹$ßÑßÔƒªíŠÆ`Î|¼ –¶8´o‘)ojä™ö¿=ò-qyà!Ty³0(æ %…aUOqxÎ%òfIow9çàè"¸ß÷]Þ³=ñì³ÕAÕ¶~Y¿UÆ]ž]rÈ©2ž¶Øff~m©¢b_ wž²¦zé$/j¦W®WjCB j_;jßgÁRU¦8úÊgé’k°BKÇv–•Ë-ÀêLïó™Ü%:Eìùˆê‚E#óë:ŸÀ±Å®Ê[pWÏ_Š¿»‚–´ó{”ed®9óDWØÜWKy8s¿ÿ#7òÙ"MF–ýÊ€æmÁÆ.Gþ µúÝÁ_gN™Éò>? Ü·àû˜ý¶6®±¹ö^*SÙ£Lc` ÅËp¤°£Ë˜ÒW¡sûÁÆ8 # ™×Ç °ÌÍ×Jû®äHheÇÓ‡m0ƒnÇwÊ ‡¨3 %Y‹xDçšÃ3pO×óôMOkÂt—¢!¾@ÞèÓ6…‚€m´6Wå¸UŽ OÌ+ôãõK.’\8ë+ψp“0¡‚Õ–4°]³<1¬¶âDŽÐËÚɬ6”*üÎê`ò×Ê{˜Ö¿*ݳ‡ÓûðT›Ë¸yNJ¸…KîmµzŒ\iÁqK°ã€NÊ›ì0ÌÀzû¯–~=9x8ûtžI}¼4îØŒÚQljêzÑ1|—# ¾KVf-ÌàV÷Ü÷¹W¹º•]¡ÃŽÒLÏjëk¯À{ƒ{Ô§Oíºþô©•æ¶±Û·=RöxÊí^Ác@جà¹%Ûghœqóy¦ØãùÀz¶8ß÷f-îÙ~ÏWOëÚiˆÖT¢ºïÙ¿Ù;Z×mÿVmúþršëØfîì5ö¢7s”¶²±/wÂ-[Ùj¦7HÖáJîÄTKÄdFÜøv“k€¼hŽ ºïƒë“%¤Ól“`ñÌþO`Újc;«ÌSM>SŸkèÓKZZÍaFÎÊß=å:ŽҙЎWvi2%—oW¾¾©Ö£=жøÎoëÖÓù­Ë*Ö–" &pSòÏíHmƒõqÙÞÐçoáÝY'""~ËrìÕdBŽO ÁÓÇP®ªä1zéu÷Ù¤’L¯œ}–¾žÑ`¢]kªDDžQµß•ìò•—Åç¨2·Œä4tKtçpçÎЭ‰¼úÖ–ëÔò#Å'†øææN”¥…>¥mÿ8̪’@ûst¦¯AQ†¿î‹Ú§¥v#=äšÀ=•Ó3mzŠm4¿á4뚘[E,£3zJ.SÝÎYÇsp&€9öi“h«B¯ŒzôŒÓÒÓ bkȵx•ßøXŒ|‹’â¼9¼µ{]í­µûE&‡Ìð€Ï‡sÄ_õ_Ï<Ý»Àú:(\‹×¹FÕÏYù«=iÐçÌ<£ðßžì)!§qP×söØÖl…™V7{)[-¡¦oí¼é¬\f9xšžî=¼VK1—É»dq¸”3 i\8¼lÊcä÷’·ýW\»€»eÅñÈgF1Ya ¿$+ÞÎt%OÍ:çLcMP»Å^§2¾ºÐô&Âs÷þ0ùiômI)à^=gÿT­mšÙ§ö><’ëd©Ãµìã[$ˆ—Æýy"ilTKu-R×Þ€;ÜùànøÎßâBÃè*SbqùزSzwGY±lv;|SýÖ:u)¹«>]áÅ=›WÖok§K`W‚‰vÒ…&{ƒ)ÆËûë‘dä—_ì–“pÙP¸½s6ŒKø r”Ò´5¨[Õ®,³ì9›qNñ᨜ã*ËjŽ)u~Â÷¾`[É:ä*í{2Í’XôÊþOß'•¦¼µ~͈­O¢>Î)2ôÌX.%lŒQç†ÝcÀSïw^{š™_Í\G®³úÈ$ñX¹>vÑÛؼ¡2²JáfØY;}oŒ®ŒºžõèàoÛ=€sõŒùã¸ðÑqÎ$î:W`ÜßgµàÇÖZB@¬Ïr=ßvÖ?CÆ}¹7²|F©3ÛžŒ{[Ö¸o3ëöÚ~ÿöe6RäÏ©2ì- k€H¸›²°=Îi¹æª[‚ÚÓæÌÌâûçTRÚ[F#˜Vr§Â¸gÜħp"ÁŸBémöWE)æçÇ-ãIWóî´³ÛÐ Úl¨G‹vdš‰§Š!•;‡©í A=û´êaˆ …±-9:' ô_¡YOž>Ùz ~¥Ñ§!l{uí9ÂX½á¹üÌ.+ÏÅ@.†â×ÝÈ|P Nò˜šÿVÁcê6Ü­§—Ú™²c!!ý:¾ém4vœIvÒö1½YT–Ø+]¢ AvÍ!ôŠv>/¤2 œj&§÷{>ài¯ã·“³´­ u~rÔø¦ÙqÒRŠuHÔ’ËÉÒý]\µ˜xÁúÔŽ›c6|Ϩ#÷ßR!Ù‰@¹¥;âÅMCòâX_¥2rѱ׻ Ê %[8”Îî¹6/ YáËîíwéb‰N x’Þvuû.:Õ³×—KîR÷{ÅyåÈë¨nèF›Õà®ùÜ"¾×€*® $šíƒï™Š}âÉy›‡Vá±jyfðtõÕÈ2Ç5õÄ|WÞíÞÑ&¾V]êÏŠ|fqNÛÊþáØË~ÖÌ·ÝTŽÀYCÈí³òW÷¸|ýšŒ^‡+=’}ï·PãòÕwü¥û™d€ÿ¬ñÜ!†ÞðŸSt_Î?róÙXì•‚56BŒT‚õŒL²¤ÓQ‡·Çè vçËQGh•yƒ¼¶™Keyú¸V€p¨ÒgôOû-§úv›IÉ|°Ýö(Ez¿g÷ún@zxégt@'ÇLÓ}™Ô,RÞiN×_‚ AR6*¾>ÕÒ ô=ršì¯r:ÈYHÀÙ§³»‚“*ˆ§€ÉŽAÊfútU;ħ:?~û™Q°[ŸB Nò·ô¬‰­wí+¯¿)º5â).¿íÀ1úïªhÇ}¥myÆYì¤ÑÛtÅIIR/ÎUÞŸcÁ–Ä@júµcøXÕí+½×»ó€G0#g÷…8[R,$’Ç Õo©n92uªª”­¼µœ‘’ɶ\ F_ÀºïnY~S=@ÛÙÆW´m%Ó˜Unå• Ÿ)æÓw ]’a"¬ZóvࢣN”@|3–ý°6¡'ßkÖըɬçd§ÂåÍÌ5+Áº‹óÖº{÷&Œ)¡±À$o5‚´icÕôg´_ŸçZU ¦ß¾%Ÿ˜«Àù!}u…h<­“]µl¨I½ýÐê ï>>‹·R]·Œ ÷Ücæ&0†íÊ•“w²Ëµ¿±R6Œršuuû¿Î1OHÝ÷ÿ~¬ÎK>ó>_ÑÎ3ÉÇË žÞ÷i¹ïÑþ2%AN_´¾É>¦±¢ 1^´É…×é~[&Û1cV܈K ª¾¡|F·ˆ%’ØÆ.v¥°¢==¼SK-6´A’Œ ^Sž #ùº°Dw|d©>0{¬olß8lJœ Ep°Š1¼„5Ð7`¥ä@>Á·³`FQö¬ͺø¿&…P^¦˜]1÷¹½ÎšaßÛÖfiÄVI6“œ½Ö߆‰­ü†;LÐ/ʆeÙfYÊ*Ê{ȰýbèûòFðÝlwÚVº˜Ñ6ç+e …¦<Ï"ñ¶— sSÒC€¥>‹ióý™ø«p%§¢ò8oÖOp’RQȾʵ÷ðôY3HqàÝù\•íŒÍ~—ú9ŒžTXÇýŠà©ÆU5@©!ÎLo]µòº Y~#0ê{ˆ=X:8©ú²Wî_’'Y®“n3=Ôv !e¹GN%lï¬äêàqµÒW±gNÓ17–®s¸ºÌ[MiŒ2%°!*k „rSJt*2F2UÝù éf“ÁÕs&-&-@ʈ¢q¶ÿ\~¦„«Y³ÐF­¸åŒå;Jþ䲡—’ö¬òë½›CŠU=ï§Frµ+ùè¶žòùµë³ò½Â¾zÚä¸jeпþù&©0:¸JÝä1ûílqƒÑìQkÍcL]„V8ɘ²í¬/·Œ%Ž4ÄÞ‡ÜK=Éðæ ÷žçž%º¤ôE{aö¹+Þ#[ ¬÷ùoÊ·†®uÖ$7ú¹õ>[ÈcU`¯}.t$´Î±Â~ÝðqÅóÿ-¯!S£5û•“r¬áŽM¦F úèp\ƒ™ª2Õ1F’‘0F#тƿܯÀÝ#žf©GÃÇäP倞 ë­Ø°J¿k ™¶D=iøhyŒÔ½ÀÌ¢jzÖ<äi–S‡@'¹ú©#æA´C.Tr´}» þX¦d(÷ ªµÁû¶¿r¦fõ6É"!·!Õóæ³˜…:yk5DËšÑh¢ºÖ¬—¼Çe°˜häýYP)ªÉî4i ™}éàíøÎÈ&ƒ_3‹Iüj$°ÑôÂÈâsÒ÷ÈþOêÚµŸÍ#*5{[μۯ0ŒU˜6 €» 3l!p“âJñg–_ò*†{Ö5Ò~‡*ØÊÖóþšÌÝ Án8Eóôé"%hž ßL¶¤)æà²ëyù{Ü6ðë©t×.Î^ÿªÅdŸçðú5}©`%’a(Ö|yv¼-]®8‚ÊL|_*äÚøÖÚ· ñåÞ“b˜taxEÕ³éUj’zúÞùÞ’:û$ >f‘*m>˜OÏŽ„á~-WjlÎŒõÀ}ëù””èkÔåýu;š Ø9_v䤫ýšälbmþW> íúâ¾d“ Eºvç ƒ«™”ë..Wøïs*ùs¼{}Oßó#³í.×dªpð,Û½âm‡kßÿÛg /©’ß)n÷tef`¯9¢wÎYó(Ajom5r¢"ª˜$­N,xª´9P·éǽ‚š¶éQå1~Ë«޶—.$|O¼à)ì¦Ç3¦Ç–šõÛ9‰QT’4ß“}¯ ¾w&ášÎ!xÀý#žÉ‘MœÎ ˜$Ï0ŒÎ€¤ä¹aâ%§1+œ¬|ÿŠTÔú«dPžwCõY|®ßCÀè˜öÖm§w ç ðQ~í“ 0­ ]ö-Ý)§|.À] 7=»âTÿxk˨ª6=!xž?t`ÄudsàØ¯ð3Ì=eIΰßòÊI¦ñ¾ìCD;ìmº0gU0s¸·DUwItÚ#F¢&ϨÃàr˜Î9,›Ed!2.”ﯳTNm&Îö2ø{Ž/LÇ×R™o¾©wIqdM è—¦¼}²¾`k äÄC£ –5­×« ÇÝFv†Ôò˜OsLA|q´m/U7r!lïh‹F_sç™– 4!â\تџ;Ö÷Nö=;.IÆÛ·ùˆóDÌ)»¾ð¹É¸+GV¬ÿ\HS·$ÇpÀ*žX–¾uÄPNhíÜ<Íb§²Hèpù­òÚY—~5*’¥9±~ØQEÝè?ÆMUú¹PESq™Ûê”è*PEîM¥W#™Ž8øknÙWÓLŸ©Ìv8”®ÍuG‡Ý±q\ãÏ ~ºÆ[_ÛžÇòž[òt¸÷^I;‡œ“.öz5yt‘ä-£æƒöÀ½*,k¸·cæÅÓ0Íઃ„t¨âõ%iP&½Ø=®šŸÒtöÀ=¥ •¥6O, hð–ð‰He*@oÐ\`þ–Wqçé c¡ŽôÜ 6yB‹%jJÊöÀ%5ëð¯s…º¾—4Úè¶NÀ––í·ÀnÀ™ä4vÐ'D3¯¯¿Íu¦œ6…:ânýJrÒê¸+à ™L<À<]nÄ»Ô!uÛlÚk9Ëqë;z¸YÊûô/7LGHƒß9[*PËv¶÷HyoàÎö£7ͽê}R;ÞÃòngÉ>ás9Îù¸ÿŸÿ³%•!K.Ÿ£©kG~ùšR°èH ²€!ïj’A®JÝδã4—d)ÒbwÛø¦rø±(E…wŸ\› ¬¬¶L)›†×Ö»û>“™©©Œ‡)oßÈjuàµ|Ü £%,Lð*šC<±ÇF)lsÉÒf²©Vï +S6Ó^ረ“Pd¬no?s™ H+LŽrzø˜Ï®y´iY¥22ålÓA°¶+2ñî‡_õ³;{ 9Ž]Z»ßw’³ÐŽþ˜ÏZE¤l¿saùî Tr=ZØÃgh~COÓÞ…FeÏ óÈm{¸ö ¾mòX˜´MuýÜÿÍ%ïG>e¯··sO‰¾.¹f>x¯x`,ÿ‘:~Ö ·}–Aÿ\ž-ŽL4;ìó”"Õ³I*3;Tò²Uáý;· ÷ ~ºðVñL•V&^ìu6¬õøû Öàf.ÍUKñÙ@‰SWÇÈq©QSN#™ ,;`½­ ’€)5â…½#ø¤¾•¯A[¨<\3)=F$‰©2˜Æ§'Œa )Ma¬yì%dGƒ›üº9lý6¡|eâÑÇ{,ø˜<Ùz%wöÌ:² ~ øÔòsîùqI'D#žVçW ËœL°# 6%)iÒfŒ=RIÙÖùûïþù×_lI:ó$ç­ÑÌLoEã Š_å¨+{†íO™“ »ç²°„_×^²ˆ‚#¢áT÷«Þ2¶ƒäM¹%÷qwTÔÁ ïa¿ÎvbÊ„4!@G+ç œã«A7@6ü·iÚMëɶ—th{U’æfPÏЧâ×%°Q@>ë€l3ýÞ~9Ãxt/9{K\l‹>ˆã{†PÓþè¬< õ“­gkë=êJ#W³ZíŠãûjJ}ÒÁ]Œ»dŠ.WTÈÕÞ¹°æõÆ­öXjÊo$zÑoÛVåhxFzñí8:ÞÎ~ 5GTg#­‚¶‚Âö)÷ßö7ñè9Ó‡UñLþ¦Zæw7ß¿=–j¡Ž†•gV•õs«Î^[š‡nƒà|¾¿yÃý–Ü•ßÏO}ne oVùõ;@ù¬Éãq©€ ­=ݶM$…–-ϸ&r¾Ë¯?âï;ù8`~2—ÿ¨á}ÙgÎ0<6€&û§>s1{?7z¹¤»2Ï zú&”—íšô£©üæ¡•Þ2ŽG gkSD!8Þಣš”V˜c¬½á xô|lÐROX/¿Û檑Ð_|¹GKëP©AR´»Þä/m"ù\6}ÎdïçK'mW– 'VM?_΋ý®2[,{ýn÷Œ{ò(ÚbÙ¯{júv¶7ÀšC¨ÀtÅÛð‘W”fš®Nµ#„®ãÁýŒsª>ÍÙ³x&(ò„ƒî?¦Ï ?×à¤QSm¥·N‘€R-íH», ‡$æ;áxþVÀÑï±6Ú²ÞcY Ë;ÍÿñJBüÓÀ5öL¾ò+UCŸ \!>~]¬¼ð©××+ sÓ}ÅðÕQž½ Ôvþ¨æànÙĮ̈Pèäaæ‘Y}¢9ãÔy³ý©ðΘ§q,•É ­FßÀWŸÛÞS'¼÷8 Ü‘ÜÜ9F3‡™½%ïÌäT– x²òžmÀß=jÕ‹°i –l-Wߣ«º‚ÒÿG£«íŠ“^ܼ4èD&«µô”K©'ÖÖƒ ™wÒ+Ð:ÅÙÛÁÆ>ñé3#°n/yAs<%ÂÖ1\iè«HF Û_râXÐñpÒC´ö¢1—ï5ØÆJ}ºšÕÒ" Ïet”6œW¬MŽ=Éú÷\»a½Ýo[è[ËäUÎâö¹·ǃ°ÕbxŠuò«f®F`m¾ ²_1p¯r‘žw¯c¸3óJ)õûü× ÜG@¿/zYZyÆïE,i/±çáÎ×Ì.¯ÉQîŠ%Øs‚•ëð}Olmú³, _D޼u5 =ó4ýðßú·o!#°Ø€žø_jy¤v²F FaûPí5h®úæ-èÉÃXž´¤¨d_x‹¯jÇíØ`g³q²¡ÌüÂÔÄKªð&=Ú{É!Rï>ºw:8¶½=ô3`Èp\>îv˜©V‰©ÃNξOBUÐRJeÈ@µ"ßP¯Z.¦gK2ñ‚òæ¡Ó PE ¢ÎRƒ.¼óÒ¬Û͆¥3âÚ›’»A|>%»´Úí·9¨šRfZSÁb²ãZÕȲª\5hH¿¢úØ¸Û YˆrRma™{¾½n;½óS`“ìr¤o{B’¤ôêá¨1Áà½-É“ED–!i85w„IHJf>3sÈÐg‰dˆ²V¥Wûôœ¦È¾MŽÛfiT=,’€ªý=i¡‹®)`tõbÜãEÓŽ¼´òVÀÃÍsVc‘™îO‚ûJióŒÞƒ,ÇÂÃ*{¸…Ê.‹S—%ܹügÚ±Q÷ƒW8ÅÊ'Ÿì¾µûìí¼³ÙG~5°õz½÷qgióJ Z[ÓÀW{#‡VÛ½” (ìê \Ú~vPQº¼§cŒ?Å:xÛ&ªSá"D|¿Ë žh9þ[ó‚¿m{¸¢ ßëiÕ»{k5'`@?ŠpjYR}ÙÍÓ[ 2iíM-ÓéÅ냙Ô1èó5SW³{¤ƒOûÅ£¸¨µÒbÕúâÌ«ÎävÅŸ+ªWz¯Ë¶b{}0÷Ú'6O›ÖϬ²Jë/ ÚR–#÷U§¬ɵEìçÔ¯?ÐÇ}¶Ô°”nLW­òÒÇ_öá¾’VÛ‰›•RŠ +©)ªrŒÑ¸§<™HjO‰äËJ±˜á–=5£öŒ¯jukpSë,øhn ;zà¸Ñú-L ³%Xoð…L¸/P¼†oÐð÷ „J žp®]ë=ÏÊëõ¶Öt,‘(¢ ¨™M·« ˜,F†p™€2á{*æ+|oï+of7e3úŽºMu8{&uð=üÍFÑHŠ 2ŒÎ};fÊf¯#íGôµmÕÏÁI¦ÛVɓ픊ê’)÷³Ê!Ker?KïÞ`7Q'Ã÷ñ‚ìt™4¥ng,U[â2lÛňr…„Zû5É8’ÑU°RtIõî+E{ªÏÐ) äµï.– {ÀeޤgfW+çצA¼E&Eâýê~´ïeżgúÛ+Rç·}¦Òäï¿-ʼnÀ·°¨F 1Iö<–Úî–ˆUè7ö>3²}´£—‡_­Ò–ÆõŒ"†J·­ÏU’qûoÞcû *)Ô{¯0 iªácu³IéŽù.d[™`ZÁdíê°VExo‰È3ˆ‚ߤäõ³¬ª&’cš¬e9ÕÉÞ>6©Ëï{ŸWºš‡º Ößm@‚¤ååÚÐꊗü\NSÿ+|ü¶Ÿýœ dBe;˜iùúµî·íÎ}—/í;ïèòïÚ_Ö¬U.ŒñzKÇ=rù? ¦¿ºÜ´:<1º½¦B} ¦÷2›ÙÉLJAzôÞgÆl„Ä-\q9ðî)wá±jlº)ÖUÝ»ÓH Œ\Á¾é@¥ôíNIL6èÅÙ[ö“\{.“w—Ò½ 2ÚÛ$N¨GÜ%óÖy'MeyÂYƒx³Ëíû¦cêÑňêšÛ z&w„.÷ÏЀ‰ÏW(¼¹ŠY€{û´t RÆö uzZ@\;KG\eN°:öÝ@gé9Œmâ }ÊæQW¼B1¨WÃ̼k$ÌËd·&m[I äáÄÒºyŠ:)ò-Úˆ˜¹Ïž$Ž7¶´†Ÿ-ƒ±o}êòõNEVõ‚–™¹¤í)%k‘A¡Æaeã´€4ȤæX›Õöxk:½Tè?“ÜTø›Å€=[tØ=¦µ¬<=Åejõ®±F:xõØîu8Õ$™ûô¢1¤¯C¨5쩦ºîÃzÎy¼’Ô;Úîç¬$E¶«¬Žù²)Æ5µ·6®)&ŽÖ0ÏZpUU"xï}ó,.Úð\"él‰äãÞ&ëˆî^çÚ´À—xôÅzú³raâÛfï: œ„8.¯:»o³æ®…ªkûȾÏGTåžë œÊR‡$•–Ý\;ÿ(Œ·C|Õ¾§v¼Fåßæ¨(œbZù˜Ç™Óo=ø(_p± ʧlfÌðsŽK²%ûk‹=˜`i¯¸ÛƒFº* p È•,¯¬LþXð·- ú«í tɹ§V«Ë«>ÿJ®26ÄtS‹‘VíÛ›rAbCÌý” Ü2‡Õã§#dŸ)ã=Vð£ED?€{¤P_-b®šÑÓ]CÞíuÂÚ®xÉÏ%¾GÝ€-=}]ºS$i‹‹ê»–”œJ2¾â1ÿy %¯½~pœò*u@âU2瓘™´ˆçoù×ؼ©‘\Î9ûž~<¿°óuùøv3çãñ»_nzº$öݡߙ¤n5_If=‡MS) äJûÈ ?’–=O͵‹Å‚M‡t#>ý"ÒÀ.×Y‡ê\0¤ˆ—:€àLe)I>¹Ìô'$E[o}»ÁV5¼Á+ UV€˜6vÜÛcî\ ­JûœHGÞà©×_$#מïP@'ìoj»Óª2?Q xöŒ‡MYÿ,@JR±Å©OÑ p—2¦ŠŽÜ9ÉÔ[)à5ûÓO}l;^m) .FvqI…=Y Ôÿ¹ÏsO¶µµ1Ì*›¸ó:{•tÕüY°ž¿Í5Ó-£ÊeNÖøoö(ì ¤²³ú%”göîð\ƒ,¹¦lç*à®îœ¾Š|ÿ-@Ôc¬í}í/8FòkjŸ˜Jz9Á3êÚz\qÀ—ì¹eF/Ò‹jGë¨)~k?x ÂÚÒÜ¿Ó!œ ›¥÷+?!`@`£‚­ÌÓËÇ&ÝßyÅòÔ닊4ÄÌqR¯¹D²=€¹LŠåýt’)´üé³eïo@_£z>Þò‹>« ¾s[SH#*jÌdõ8²æÁª~õ<®*éHï¼>&”×WÓSU?ßÛB Â^׸ E0RÎÝo‹G§Ÿ.6}æá½Àt Ük0ÖM™Ø ñ!gÝ9÷÷}P{ÇJòª9æç‘ |õTÔ}¡Ñ£|{¶Î®ãh°‡+Ýû2ƒòf»·2œŽ'¬ûÛDòè£$f.§©1³eúûj| u»Ü ìx Çi€Dz°8l\^é9Ã2åÑnÑKeË%¿ÕŒÌþÃÔØÄl;ŒIé Á+ïö=pA,cæwÊ•’/|'›^ÕðD2™ÏdPÇ6iÈ5-#ìŽÀ=uç µvbÓ »Å²[À“ý„C‘[TÝ2˜*†é9pÕ߄ڒ»Øò2å4òPo?§Ì#}`_åqXo‰÷°cO3JÀÝû!¥#@Ûœ.H㿪ÏQ]Hò¿G/ÙŒ%1c¢Û–Æ}î•«ðou‹—¢Ý.ïò“ÉôÁô2YƒëÍñÐÊ»'àîAyrØrtipJH;?Häè—¸¥½j«äÅKÙ7F[+„›ûj¼RÅ3Òé v§Ç,²âÚ¥$i`E ³ý·„|E¬'ëÇNZʤD$¹UùÌšœK]ûÖ8©>Ë£î½üCútPa=ö·áSZ“Œo­¦ºÄ<?Jˆï¿|¤Â‹#˜9{PµïvªB¦^%ŸåSfÊ ¦{_i±%¼.•¹$L)•ê©S¯KŒ#“ƒç[7Žž½-»IÊæT0Ø›ßçjf¤øÇçžÅH*Én)EUŽ1ž?‘¢×0úñ Fô›¹7OïÐ%BÖ¸KUoïþÖëd™–”§G¯ï)ç¿ ”§¨OPgz½G]î4ɯW‡ßÁЋ·»}®ŽfâËFÓ¡Q~ˆéç¸K2¤áT}‹IÀ•ŒG÷pub{'™Ñ†2ƒ¢Ô1¶Â^î1^CÍsí“SÓ-'‡b¥žO¾•øÖ܇٫ÎÞ®î(}!ÑûƸì»lõÎ ÐÇwÖ§pjÁç9#¨íÉ®/·Œ-Úarl¹¸pÇ€á¦÷³"ÔésÛµD ­’àí[îiœ±9R|äKãóíºüçå¼·¤2×⨮y鬯áqY­+®¢sºñg O¾é³jµ @N¿ñÙLXv‹ŸöéaPõñ£+íë× QoP “VmæèüÔö3r`ÜȵgjÆ3¥Æ¹˜Ò©ópúhÑ£ÜaÖÆ£Ô ~N‘Ü•<¡íPÑ;¸KZ#Ð#3A¼t¹‘TÃ儨G?~$60iV^éž|ä³ÒEdë ”ë+©€ÇaÆLü–í£8cs´|.çF²ï’ë´Q§šÜ‰¿·*õúŽÖÜ'Ä×no{F©ä¥ãÐü¾™uš@nÃù”©¨½–=e$uðwË]'ýjØô”j~jÛc™«ŠF×]þÜóîÕÆ™©*òögHöøÝÓîix2!G‡³?Ã;Üñbâå ÏRWA;ó=ÌÚÖn¯!®2>QÃ…£ƒ ‰úÌÄYò¹æò5ÔΚóu|ÖLæ EF¨hù ¬¼Á±FÛñV¡EYn~MKÕzÚ»œ|ºô¹•k×^\ì¸e}öÞ2éS‰Oà.ï÷ë¬ký¾JªdèXä<4hS@¼»õë¬A£ÉÖ sÏO#Tw µ•4ÒkåÓG¥‚?½‡ï21Ô™ó¸¨ä¿þšëHÇÎ’žú„Cö–ÉJî[FjmìÛÖ·»~›.ið´Ñ[8£8„BÚ*0FðÍq—<ƒãÒ®ŽKÎóÓLŽ…à{U?ˆk-WþŠÄåè—ôësÂå/Ý饷=*6…·wN”伯³ì[­Ÿ‘}«ÁMª½NÛ 3¬¼g€³}mëÔ|óRmdéS}+tI`!JûD[UâilÄ–±J,yHçðßîS`“`u±SU¡Þàݯ¿æc€mfkSö“îò°òuŒÁŒ}ß3¹35ëÉ÷gi‘€&G`y,&¥§o@=oYø‘² `Ae»Sen™ÊÁÓFܰ½S’;—ÒºÁådú3ª–ÕTß÷Þ—fŒgÒXdFP ÜkƒxüÈ„±1Á@LÚ&9f,ƾÉ4§Å ·ºyÀ/––óU }?& Зþ¾½.y†çmÔIkWhn¹‰Û‡ï XáJq7R’©ä™¢7Ðö@zÀKº@hQÛCfÖŠDKÐl™Tìf¸ %Á)|ÊfÔ}ÍW’×§T½»aÙ3$Ë’Á\~‚õ4ÄäÜô¡c;֙㧙#Ûw=Ý€¹,NËã:›úx?%Ùw©¡¯.ï½AsîÛ>*Ÿà*`!ÌóÎg0}ßë]l·ÜW,¯ .5ÚØ€lܺt™¤ãb9G0 XÏ@«\kÒ/_me ¹Ýô%€á–É»Ûhž½Ø©u‹¦Tð´OÑ·ÈñeJš¶çÙŸ¤rr>dá—ɸ픀›cšÌw†:ÕÒ×QkúmƒËyÈ!òdÍ“ËWñ`–½Êx$„pg_43¤ (“]5½Ž¨Æ¬³à{[W(礸|9tiÔ53ž]¨T¦}_Î7ÍT‡EA ·Ï§ÐµŽ{/D1‘!h.ÿM© HŽÜ¯Óáà5à«r‚ŽOÃúñ9ë.üæYƒ"±Ú~°È˜ÞÙ&­$ùD®kîÒ½?}…æbŽ•íj@ŸJÜ>˜©v¼{ñÌš¸eÏFbÎv¯)éëfŸ>K–¥ŸÓ¿ÿõk„—PZ³µU+϶wÀæ%‡° ëÜ3Ë^7Ñ>T”É»2Q¸hŒ¿\5”œÙtfq² ¥÷ðœ>úÜvEàv}*àº.¿¦ïQTÝê¼Äƒã–^mhÜ×?x¿êÚ7„:]6e¤…!ûø³8•ý•¯…AÂwªôlë&›Þí Ùs$´Ý”%ƒa`-»£yä'mǘT½‹}·“Œ²4€f~–¿» ¼^É[ù˜ð*櫇é)‰‘³{ö4‡æf•$Fe‰½Û‘´4`n‘`1Ù딾¤4¥2îÖ§L²Ë*4BpA=8WƒHÞ##QCØ, z“J+ÝÑñÃõ2"ÙVÚ,öƒ¿Ö¬çö'0­$½Í|»1o•5ÃjÃâ×,ØÊÍ ¬çv&¯yXyB€áTGhi?Ãy£Soæ,·:'iÖ ˜ÎW¤wwI`ö½í“qˆ¶ýÀº–ˆ}êjÎHd•à>ðÝ2¤è9eÁÑäŠMröä)ŒüºzÞÏ÷’1¥Beì.e]}Kn€øc`kã=Hi$ãðà©€8†’€x áé¬Y‚»ÎsLå«“‚Ër€¿”ÖÜ €°¬Ó^+Îpû®„ Ž©öm©SéÝÓ£ÝC®N8ɵ2ñ©}OyóT€žüºýàuwµ¬Åëôwlwêì Ôà'I_¾§½ ïç¹P1_>s›q\T¯¼Om}Êu¬êÞ lê—fÓëh¬)¶ílÑ}~ÍJrËßfñUTØ@3Ùè퀪ñûÛõ;WÀ¯©Ã%v²wø9MyÏ÷ŸÍ ÍsÅÝ’³™¬ã;ÑcÕŽ¿׎ÆÁùE³=óÒò[3¥›;±ªÒ¯÷^Ëžš­õo±ï µ+Xïõñù[1ë2Ûê×Ka€ 8–ìD>L{)©*ña  ¾§x†G²Ôðvm—Æ¡1Avm›R͸Ã0Äkéª8ª|gÕ£3Ú·¬…­’uJÂww%y¥­- €cà3#ïv‹7Rv’‚™-çu`h•¬ø¯Ùé8Î_¥GÖ¦Wµn;K‹ô3I]û¸žšŸš~êŒö2"œ²Cg>%]Þ+pŸÐ,Zäö#wía hR\åwÉ„TËNž&o "m^\ÇBL¼%4‚ïfÜ-ƒY§0ОÜ[„“‚™¶d»º<ë ¿Üþ´¹ÌÁVW½“}îáLcMÍçò-€ÑÓlåºN!P*<ŠŠdH@Óë‘Ì<œÏâŠÕ䉯ÓaóÜ£R7Ÿ\>啕°¢-N×¾À½Ué1J#°^31¤é‡o†±¶xFî.“äá{©äUwg¸Ú>Rb’”ˆ)wR¬–æ¤3¶Ïªôê3Sýa¬³¯µ ýë2Çd¹{×hª^ߟ>95µzºÏ\Õ{ïyöåVÊo2ãÓ%–¼á×A°¿ã–üußYn(oùÄaL×dåW3&†ž÷›ïáîèÔ߼ᾠÕuÝ=ýª %EzçÈÜ//õœ«º­'÷¥2Gò§ÛÉgׯb“'Æï¯VO—ý¯×«©Ò%FÖK ÖY¢wïUuɨÖï9u¯!ÖÚRjÂ'#¡ ?Ê!Ô¯Õs†‡¨YvÀò5mÝXÞƥÛR ð’Æ}¶åz ä+é dÙÞ^‚ºíÔ–#{²ï èèÕýÝáAéã^;±öë)‡HØÍÏ9Ê™`]…à²-ó©‡_’òº½Å52›<½œm Ž3nɹ%1î!dLk°QµË¬ò3åÉ»§WO:äȧ¼A:Ä*¨<ÓéœuÂܧ«LºÜôRrôÏb‰p/=lTnIqŽüI@¼–a¼_…SMïL nUMÃõñb?£L…§¯‰¾®ÙüÖî¢eGÍœ0A[Jk¬Ò©·#˜*ðŒ JûE‰UP“ÛÓ=¥Az¿×™ºÿt‰aY]P¬ÏNvÍXMù{lIîI}zפ„F¡'^OÚtJ[o'~;›F€÷ç&›ž=e3 ¾skõ~Нßk¨ß¢öÐLj3?+E8>Åû+ûîGi2èiÿÊëÊFpÉÇX'K­-…Û2sŽÓWž£¬«…=ïa •üæVhÉ÷ݯ{tµf¾Â¬kŒ5ýæU¨{@ç§zºÃÊ[H£) özf¸f0“×_]çØD1 ޼m›á»€5\BE2Uw3èüÖkp€ì»ÇFõ~åªZ1oF?…:9º* ÈFÈI½}w¸Ro³$+òBqß ¹|‡7¹#!xJÛž÷”IóÙ-wôK[Isê·Øý†sX݆‘ó®€>]ä÷xúñiÞsÿs}9e̺$f6>{ìIo±Ñ É8ÿìËEÖ³Q·<ÂÿSœU¾¬e†s­þ•©„-zd¹gc?ª~Ýùc}´p÷Ø´ƒ<®JËLë«U-ÎÕì®è =Í Ï*éʬWÞûnóÖâÝnš5£}Ü^á¡¥CåÞß=]\èíÜÂoi¯ ÜË R)w±eÚeò½44fQöÛˆ—^¤-aÙáÚØ’äÎÓmf4ŽT®gûËôOcA!ÚÂ/·s4¶” åÁbˆ,σHHÜuØ¿\lkµ›´¤$tqÖ“*s¾KuÄgéïÈö@S 8é3M3¹5¤½cï"Ï_µµ;Q5G$óo{qQõ×WÅG™=“e’@ :«_~vNpøqÏDÃÇŒ¢fyÆqDN“GÖìk Ö[1òëã–¨xpDå\ŽÉê tq˜…Sö@¶•b/É…e“üë_ÿõï,Ù*9ÏX<Ã+™†«AX åv”Ù*óôŽ‘jK®@¼$1m Æ(V©×Ä{ä.Á}o.i¡ w<ñë bzp8®äi,ð ô³`0@7oæ^Œ¸†_͈s×sz·¥2RŸK—ï ¶YW1ñ=í³`šÕMmÛÃèW ­ªÀ  ÁkEŽ+v¿ ·oÇ}F"±é©V¯ì¾´ûm«8¯èbi°Õƒ§u<7‡_íHã@+ÍJXÆÓ3ô¨Íom7›ª ¯’Ô~mˆÏâœ* ç*óÔÍÛehÔ”ç@m]sÛvL_ÓÇ÷ü½ ›íÀk™¬ë`îìHëýóy!8güY›ÏUBì£Ó£­úô© ‹CÊ€—»…P16àí³ñ­g¢š²Ïh•ªb¾÷­ì{úq¤Õ7¾Êâ'ˆ—õdrÞ<¼+nÅy2*¥=,“eip äG>ëç¬÷XÐ’NóôO÷ 6?'nïäý­¡Uf¶Ç*ItÚßJâb/šú€ûôk¯"äÎL~¥÷kfhrUu»­€aìÙw9²{3w6&èçjh^¹y/%ûiX9Ä[a_ÝÓÛ>I›Âܶ\[µÎ4ç-p$I%úy,€é™ª+ÓÃ,­ÚÏ}›f‹9†›.4)5;ÞÛGÖùKž²'pÏŸ“_gUŸþ>·}wª}$eIþ–ïHñÓ¾ ã¼Ü‚ÿ뿚ƒJ–Rc_ÂÂ'{ç;‡˜÷·oóáCw¾©8uw~¶¤ªÝ%ìlƒe*Û¦«!>KÍØˆ¿×«d3œ’jßBh[^¦¥,Àe)ýºõ÷éF¯Vø{Ap%¿f^,`W>6ö¥qPQeÙséX( QøY̺ ~ü¿&å¼ZU¯~bS'h$Ôïiï·Ú>Å<~Ïù¾·y'„~„ }¤þ);ÈëÒþX/.Üm…uÓÉí ‡™WLÞzª·ŒB¤ýNbýUuI÷hú¦ §·zwN)€Iö}ÔFóN|~s<޵åú¹á&lÍ„T 6P/<é¿^{ûvü•Ü-Úã¼·’(ïíòQÀc©íÛ¥ˆ(5ß ¶äð݃lù»ã[Ò§–&Ä”ÆÝ:á`.g£®vaÍ#0ˆì•z/i¯Yÿ˜r*Ÿ²Ã}ëží,¨Y¶Zêìê=õu,äc¥õ,SÖ1OìÏd÷Õý° HÀÝ|¶gÓ…½WŸ2˜t’pçhJ¤2@#ÂîYLæy•À=û9âé Ëûñõ^‘Ùç)[JßMýœ{X.=íìÍØ¾…Œ&‘Ù˜qW¯†¢YN[bʶ ¸§ã NV•§§Ìóµ‰G­$ÜaÖerS®1Öýšï…7 ™6­û•ÚlÙ>¥­-‡eùD}®©Ö)»Â 4g4•Â’€ìBåÎÌ_±·e0`‘Œºz©§§ I9ž[Èž1ˆÄÇ@S‚Ù\:FFR¡½Ô~‚{­ÕyöxdoƒK©áÙ'©•—î Oa%Ï”¾Ê×aS‹§×Hñ¾ãÜöQ=+J©m{ÇY„Ó(¡9§JŸùÃPdîå¡zªû:û~ Ü× ûŠç?[èòÌyÁ®Í*p×”ÐÑ„çc½e¤/gdŽ­!Õø[õ%]s|á{Â}ÙA¦ò;‡5í<ã¿•Þ]úHzݸS#žÀºF)õ¾ïܲ{©ŒÓLåEÓ¸ŸÞ÷=ºY%ñë½Ûº–.3R„“šøÞêQÙ«æÝ~S"¬½h2’©}:îõf‚¯1ÖT–'¤KàeÐVÁ_B´„>1¾QÈäÑåA/1€¶½ò÷†ì©JõîYJ¥ƒ»Úô}š)Ì\¯•ÏþLóþ—–ZÖ¹m*¥¡•=î™<šÝ†ÜK)¡/:§”(ÕçÚóî¢äÔ\}ìÖŸ’¡ê$Ã_ùy;³®Ô¶,Žà—]$œM™=7d|Ípóåʺä>ÈöøËv»jK7ÖW3 î[FöFf’S×Íáõk"þþ»±¹be¸iöFŠ£ö½š-ú6*7ƒTŠóH3lì:Q’1-5ߟ@ßN°;:k%ÄO&,·*·eUºë ­Já‰/u[sz°ÀßËîм{– @Ì”|¤@¥‡¡5–ÄÀ«L$ýÀÚâ”æ*M³f ` MÀû.ºÁ€Û¬³ÊNî0m‚r }÷T®ÏâŸÄ%ø[œcð]ýàm@™zª)Uc˜,űDG‘ÕÁÆ0=  9{Ø¥‚Ü` ëõ¹³Ø©”¸$4ï-,ó¯äŸãªúÛj²)Â+¬¬«®}¯^]qúQW[[V·òZ0ô<}-œ;»5œº¥³ŸÛ±J[ O{ Û\ÝçRqî>ùú#7º’z´%XÁŽÇˆ«Œ œsßbü¥°{äu‡ç?½G1?Ý$ç_­Õ"kÒ{UÛcÜ7úÞž²2ë3àn?îÿúWkY³T\‘ôîÄî}izÙŒfÿyEnǖФT&“JS²‚<@`ÝÝÊ{}|Ú½%àÎPúü¬ÌÝÌSÁ»öˆO˜^júWÒ’Ÿ‚à0bËë=¥aº¹yÖ ÄgÉj{øx½%ƒIˆœéª©N–§‡°Gî Ðh˜Òþ9Ùap‰"MÖIŸ‘ì¤o½ö‰}{Xz_Õð&í1oÿèST%X^[•‰°É£Kãn%Ò‘d¾+7çz/‰©Ê~ÇK®A5WÕÀ‰TŽóYYŒ 9Ž, ªÞñFÓ£Ýd+ðªo=2˜Þß½–=úbÙ=51ή²§<)ËÈ> ?KZ¶XÍíI(ã®x)ÛVÊusn+ÔIaO·D&.RŽ‘\°çÁ+òÊM«õ%àtÍÑCÛ=†;¡ã¢~ü)gEƒZC¯#­4V±ìé!#~o' ¼>ÀÝæý(*Šù‡­Â•4µäsÓ-ûIo ž/E‡È“rˆ6Ë«ÕLÝ®zô”ÊTÉfÒ!^ökµ’”ü¦¦™æ³ÐOái¾Y€ÕáÉÊÛKÞSgéfS…={ÀZâÚÔ£»ðÐ5¾²rgšïÊëWÉͺÄeò?Ùûü%ä+íˆp…ríðüz®š¼'OŸÉ4ù,þÊXð‹÷M!ü«ÇÏç~õßÿÆÚ}lÁÔK×¹syŒnÉ—úÔFY&p·ÆtCö:´jGy¼äÀ¨Ü]ªø¤2=¢Äç1 W\!&pä)§Q®ªãíW“Ž+b 3FÞNéUÂE^L3!ÕYª€KÞ/i º.¡&_žNð‚¶ödà.ËÈtMÉð&ñÜÓÕÅŒ:Êé@"I$héÖ2Å6ÃþªœhŸC)ànÈ®ß*dJåÇ¢=ž¥f3_Ó{¾î+¹o¾'k‹§m‘K¬ÁýoC“›44:Éd*­Šl:åÅ®Ç@uwA¾ÒÖ «$ëFÅ- ’Vçr›cÚù^Å ç'åK˜ïOŸÐçoÎØ¿z™A·¢]ªñ:&›æ’VÒ׸.3åµ÷’â™tÙ·ðF¯dT–ùþ]Eã›`=ór2!¹üÔÓk{H0åõvø-yé=ÔF«ÍqLOqötÌü)œÌo襌÷Rz÷¶ý|2Ÿ <Í (ÙAÊQ¤àö·œE|‹Ê;ÕU?7šÀ½k«j€ÈÎÞÔN+Ix_€»e9•F p÷$’‘Wpx¨{$÷Ý;z š _Þî@mß2ÝÄõ˜ltÊc235LgÖóTÇag)bèÇŸ½LÏe»Öȧ,$¬ªGN ë÷ÆX+‘7òèbfë|«í2`͵µ3Ãʱ¨ØË¥q_âŠZý,Ðç³ÚµÔ®8à;$Ü#€ï¶XèKƒÔ÷Ñ?ÿ)Û¿å~µê6sqštEµ»ú߯ìæ­¢4ŸûÆŒ@¶¥fí¹‘ƒÏaVßXœÚR}8‘†‡¬zÏqÕ*žñ…ÍXjýmrÕÉ-‰›‡µ²Ü"GHkÜIQXVa¾­†X‘R`xÏGCß’¥ØÞ+Ý9íøt·¿þ:}&¡Ö ­íM Ÿp °ˆ÷1²üÐï5$ƒ.¦Ù¢”ªÏ]…:#CgÑCÝÛÏ$p”oðØ×ÀŸ>å¨k•L䜀Îkÿû›&`íÒ%&Ýo^d^l-fzwù,tΤ0Æìx‚u}ŠsI3ÐJ°²—'¥‰Â·|Õ8ÅV•ä¹åoÿûìd¶«‚Ør$Úôi.™¥9¼®ÑÕêŠSûéô_»m‹€é4ÖñôpŒ”œà=úÜ~æ<Á¿ý¬,XFNÓÁ&î3ÕU®ºw%CŸJw ˆÜfð†oK1ÓR¢k(–+‘V~ (KšÒ–í®Ë®¸É¸Ãþ6(4J\Öml3Jý–½—ö”6 æý­\ÁùGl½¤)¼NÁ#g}éìEÙ`¹ŽIõY©ƒ§c¬bF Br&ÛDº·œ)­UGn€Ë“59õ¾„¨F“©ŒÏ5Ÿ 9:Ò¯§ÃÌìÛ@Y:ûü+M´~Ôv¸ýªf]åÍ5ðw  9Û9#ÉÐ]@Ü£—…ã=º› ](>-§¹âµ?‹jYœ}¡§ì±~7½ZP½o½gT«Ÿ±UÚý#dŸéÝ·@¼e‹¦&–Ýà ¥£Â5FËHÛJV&^¼~k‰Òö­>3†ã)JÉ!ÎŒXb nÖ™045ÐÈP£&´”™ŸÅ:·À:p6×nòp5;î Q‰.\´GÐ>ˆŸ£«É§† sä–ÜTÐée <2|× žÜ6ÒsCc¸©æ÷Ïâöê6×P)SsŸlk`ôþ0íèdYe_ü^“惩þ·T¦5¤dyIÆEÕˆ%Ѧífº¾ÈuÞqi÷:^œŠÿ¶NfK²/”V‰<)ÑI1IJbaé-È¡ÿÏ?™g•ôi.©ÑØ>Š¿MàžÌ}Ê„²¤Ö«,ìÙñêYäm¨†›í{$s_Ë3÷ʲM'"&4˜€±^W+ç¼ÏY‘Ò¡Ÿd÷0«5îíõ>| ˆ@Ï-m¸B³3#[C{Æ ”3² XOàŽC‹¼Nô~ •j$´²àé/”ç{È—%‘d‚oùµg†kºÍè[…7ýb¦)$€ûpÿˆLäZãϵ½:´†ã9&›R=•ìÝné‹5î¥RB;Ó=ÞšñLÕµÆãª9š~ðæ×•ÿÚ÷™ ûLƒ^…¯3[Æðl¯ó܈ê´2ÑOÀqÐsþ)Û xÏ©æ1Lví]ü'ÊTTD­Ø–pt°b|¼Éãýµ½LŠêd8õ¬ŸÌ6¬Ÿy®oŸ^Ü(ú¦Øœƒ?NZÕ{¸Áñ0ó°izÈô<ºMÝRTƒÒ<½D2¾ê¦ kÈÒï1nP˜lww9․“E{§Šš‡1 fà»ü1Ú+—tUO_0bÄšaeªÉ k0›.eöˆõN–?¶-’½8œ}nJSÅ6Jo•¾ŠaÒâ0í ¤&ío›^!»ÌÑ<è¦A´>_ÖþôµP<Ó4ï4‚TßÃÁLÀ}KVÄwŽóé3#‰‘µÎéo“’˜,ír_¥sòÇäo®Œ³éECAhñIutá(pÜY[Ðê;¡Hµw„S¾9lI\2!5‹Ûqf6ª¸yäUt‡=ež+à†ë(÷dõ„qdU/‚r‰Hrr÷ÁÙÚ~DUçv:Ö[X•)JNí{µeÿÈaÆL¼€{ž'–ÊpO€¶^2¥·¶÷ šëJnß·í[ Ëz&G^4©í¶‰¤~kj#9õô‰ços‚ÈÐ\>ô‚ûɾÛ^@_|¹l(­_×Ì|¿#å÷ÂÝÒŃªxà¤^ ^.4íoT øg»ÍH`c™Íl=éÁS9Õx‚é¶ž”&^>ñVóKèâ!Ú ¸ûü»ÄÐsîÉ…½Æ0µ¢©;UGî'ûèŸ`]ÏâY¾ºÁT7÷Ñg.ƒ9Šgâ¯4F<Ú>ÊME6š{%Áqœå£Å{Ñ‹Óy×3s¤|¨ß…o­H ÇÐv&·çIsm:.?42Û–ÿ›UõK¨{_ã¾õïÑ_xVO¯JøòN:ЙaŽ‘‰ïí k2«ý ¤}ïs[ŵ'ãn5dZOýÛ’õ´Gl+æêSÍ5r  ÊÃw±‚(UqÆs 2ŽC¥cZ'¯Z1Lê¿’e¤Ayu8Ÿôî;˜©= Ú_eIc?r¤)•YWfj/’–åàiµJôwä³ÒQ'ºº%ëN“U–¤d?Èhä]­Ç0<_*õ%¿¬ÛÁ=‹¥ìð·úŽÚ·½O/’T&õЩ ïaeJeò·ÉO'³žœúè×CŸ·êæ`JPÑŽå¶bsF®”™¿û#Ô–.?Ç^)$ÚRE…ßÃ2IÓ¦úßg\—9r˜x~Ëšå'“qWì™öº&v aW çVñM‰ Ó(j/bÍ™¡aVH´¦7ÑØ¡4· )#Ÿr)ݼuí‚øxd¡¶‡ÑÇš–»†ï$"8dX©û¡….J­¶A¤X|Ä-oñ×_aæËøîZ(–]¶’ ÈÚë=ãŸú ×öŒ€wwÀ°Û㪬M¶Àº, uO€q·›øþ18IåŠçÞmF¡Tâç­M´mkf_å´@Êfì“ì{¶sï•QìgŠ7=MŽ2èe6ö‰¯Œþ–®ÝOpRWGþ›=ɽ…ûä^<Óû>çï•:¬§ñ=þS¶-,Ïxþè*smDõÚˆÀ^ãiÛâ~äà3¼I!7‡y‘–=A¼8ØTGQUôŒ»_1”wl“Á=€ q ÐGêÒX4Ó,n»Z%Μ¶¹a1…ü@á/io×kê±j9Mª“‘ ÊóqkÞ]Šm±ÝèÌ¿ŠIlàß&¿ž~2éyŸ¬v²³â-ü¨n6²ù¨N©ŒŒê ÜÓ¾*±‡·6f2n&ókGþ*êù²Dä幡óý¦ÊQúâIÉl$°Õ€iï|‚¯KšlŠkOí¸Ábý­G¥S­ÎçlO© ð]*¯'å=é_[ýÛÆdÆ €›%ƒ\°;|C‰jÚ+Àk1îÛÔï¶ß´6kkë1!µÙ¥¿WŠiÍuïyÒÀÚ} b}¤q§‹Ò®ùØx?Hxcw~«ÂÀ ?'(T@ú^”ðÝpS±7¨”O°^ýã-ÑÑ«=dÒÍFà¾G ¹æ2å4ŠŽjg8ýÖà@( ‰ºoƶ%{ƒsO¹î² °ë‹Å3tDëržI(o¾ßÚô¶¤#6Z<·jUæµóp̈MIŒ•ôî ô%ÈQX°>f,Âq£®59U*^{Ý|ó £´æ¼õYÿ$ÁŒD8ɲWÞ=Ýlz1LÍ7=»xè´+‹¯ÿÄkªz! ÀÍ££Ú§Óóæêæù‹´£Ï×TœSïHóX5ü£ØßÿÜP§—Ùò—Él÷k4þJvÔö×› cFçÔÙiduû¬Ñ–â¿_‚ìô©åñà&Y@&OÏÏéïÞËl”«j[I¸øï¿nΛGHªÛØUCºÄKÀÐ ;K<òSõž’ $é ,ßw5»¥dÍáÑôTÉ1V)T¥µÅÔ2}Ðeý¬©À·W½1Ué©’Nðì1±žrΑ|%AmÊ*χSqµáËY?“Õ“§wãé¥Pý{,Uoû+áQr¥ÿŒ‚èy¿‡bJ¹Ÿ={PÝÙeR p‡É¶Šš2ÑœÈÑÏ«äh <Ħ7¸É;Ûz*”×¹š†ƒ} Â,ÁzoO™ËôÌÉþ@‚oÀº÷t‘Ü·k‡åÌ]ÞŠí™üÙ{‰WÒŸgœà»gOLü=*üùäÐpû­®/ÏNÔ©€´Fͤa¦Úš‘ré*«™Õ\’û¯äTƒ|Üíþ®¾^ò>Ÿ¥ƒo¯Ø—Fö‘\5©VOe|‚õ´ªd”™o'C@Ä3Ü«[‘À lAràÓùÖܹSËÎûÝ‘sŸýmzCI…@U7wEõ¬¶F]m(©AC}këûðÈI=å4é/pßÖïð&«ö­D——ZúÒ˜³7pwùÁë<ÛöµsI㿆õ–ñ¼y#h‹(È%¤; £­§O°n–}„û{€[B }îŠTfOÖRqw7Ì1G;Kö†®‡ màá¤ö^Övö½B·Úú7|P6NÖ<÷a?5ÔãÞöeBáªÂo{’ãh³N:Ú3ÒÖgn¥çsŠÀ¶˜’Lj§ô~ÿ·L$ß½c¸hª×ÓÆ" ŽšŠ7Áë&/hçÏÌqŃž[-5h)ÍG­<¥£…. :«Õcº­cÔóß5üÈú(øÅ^»¹ òs)c<䪫)™3 žTÕse¡Ñ×T€%@î Ê Ü³´È¾A~ßLxÍЫšK±äÄY]AHk8â˜u¬±ˆE‰nð-aŒsv«´ÆÎî6iL™>RW7/s[4He$ÃÆY­ØH:åu˜û”Ê“òÛúx »—Ê~*±TI Ïx•îJEµ¥=môº%1¨Õ•ój(Iã÷ §F‚‰yÚgq—+y {Ê”ÖÆñóä|G:âe‚rf>«º¼ë=l›­’kÏÑX}ÇÞ’‘ ×Ü<ï̘°ØT›*Žƒ­œíAü9šYoå­JbÔ&Î[I~nNz.:úÜKˆ9Ï!h¤˜ϰŒD˜ÇòøS¥zßîë3³wŽ<÷Þ_Ù‰ûU2à–ÿ̶=¥á¸nJ5øZ|¹êysÌAU ÚˆŒë¥>GTshÕò B‘€ôò?Öhi/Š%„•š¶…äóAžïÑð+o ?8ùfžå9è™ Ž<ò ¬¡ mæ»z™cšIÁ,çËBjDQûÖJKuQµ°´p" *)k {Nõ½àwÁÚRÞPM žZ³[…:m ÚÞ2ŽD±~ÃøùÛÜ’„ø°×÷ÉÉD~äuÀ7÷|Âî ß{SEβQïžàR,¸yk`}8fyªôP5«àu†7!VÉoç"6¯˜iƒcбÕ«fw"K…t²‡µMCÉœPX•xwí)×]N'kž‚–ì’åþ—<Ærú :¸3›Žò¼N¬W®b›œàûƒìÄgIa£à­öÛ`­*v+àe´çw²~‰dį+1:‡Y¥•7ïžKÁz®_Iq~ø¡n畦×FZ ܹÅ(§–=ùuu(¹ÂWSÈ*¿ÑÈ,C±‚¶¬.?‹„öm Ü%•ѼV2îW•«ŒØ÷ÌIÕÔ9éô®ÉVþÊOF›7T¿v­ŠÑO#Î^õN‘V ›EööŽÕëÆÑQÊ+Ni¦ÄŸÿöªó̶õäœ"LÍu«Ê+ª÷ÇÀ÷wšZê|y1FcÀä<_¶ß†³°»í1€»QßÀ´ë÷…7œj½m÷ñunj´œ¶Ä0ò÷µ‡îÓÇeÕ¾3CÝnå4dyèêVhyŒš‰m)ÀÍ€£¬Ç4Ø*ÈîñÇ>©TÀ=㻳Ŝ¼{ßþ®Ša–ð~@ iì<´ZctÄ“<™òPÍ=K”' ØuÖ)Q æã âõ)@¥šŸJ{ÝeL9ß`—BÒeÌ“»€oæÂa”ÙiÜíÔž°;ÖDZÈ*qq2²àé°žž<ã–kwb•¼>K޳Žë³%ç 2fÉ‘ié?“þulÔf‘RxûoÙKl”šõ £{¹Ëè1ÏMP¨lyŸ{šŒ>íf†€¤éòž œý&Ðlà.çŒaºüãA•{€¦¦±öc²)õ¯ÜL´Õ™fÞo4v9²P§¬¼O›Tá§¥tùy&äÐ-.õí¸óMÙo å5jÁLJ°Ô[£¨*ùv>ûõô´‘$Œîž$J`%¢Î}HÁ}‹d`Ý4îï¡U¾©«ª>àe–]cëoµ£<ÛúÓObÓm0Ì“Ë Wéæ ô%Œ©Ž1†ì9Œ+ÞZr¹Â'°îm"û¥…(™¢êµy=‘zÕ±ƒœÍS `’AÇç¤jèëXjªºÀS¾‹„~|v;¤)õñâ×gDžß9÷¾Û†õ3¥û‘p݆U@üùnOãüüóýR¢s5¨h{ÉÕÊÓÿshß3ôEŽÅÜÇ}ßrE6³ål*ŸòÖÚÅMekNy柪ÛÓÜ&þÒþ$r’ÉAÕÞëÝÙ«rà}ýš9Ü EZô™s½Ò½Úq«M­¤»wR ’v„²nl ,yÊ Üg#ÞÝÀ=‡Ss ?'e­ášD2–v¤Ú›ÈnAjéY«û¸Ôù}ªhz§¤ÛLóÙaF<±|Ê ¾k4“wjûÛÖâ3/bž¤¿W‹^A¾¢q[híö)æ“QîÅ Én ¦+²ÞÛ™Úßìr¤„‰²AÂmƒR- Ü3(¾îs;ØÈ ÛŽF–Éʧ´fü¾£$fŒy¼†Ùua“UùþÑ GF“VØ'÷±è¥5ɦ[$Õ‘f—©\Ï>Fº×ëVðïOØ­«Ðn6£?}ùÜVŽ,ó¶ŒÔß6È^…FüìH¬‘¿g YäË‘†)§gþk¦Xyß®gå*»×Ë俥¡ÇK7z^yû­ ? }ØŒlºŠQKh,¤ÉŸ“¿oËÌæÜâçPl¦º¶óšþÛ X/ÛJF]q¸@ÛK^9ŸÀü@»«À¬ÛÍ]\»L!úÛÓYXÚìÒ {ƒ{§À:t©‡ï2‚´<&….VÀWÈ>¾SÝéZ$ئws¯€ž%g÷ê„Ý=x5ûÞGDJ÷|¦çV­ÙAæ6¬qð¸ãKgçëÙbñ¿ù†»4çË™K^‘ÇlƒÔs[Õö9÷Îê»Ð9Kµÿõ®2>!ö³Q·¼e¶þvÞÂh狀"-q¿Òšé׳YÖAr;`ˆ®.×0Æ3åÅ —P{,¹éÜ"…m_•U> ‹¨Ų;:;ã?¼SƒQ>îbñÅ˶Û= Î[îÝsC0ÁºÃ²âYŠqO_íôÉ $lÛwL ,À—æŠd’Ž`7Â4:4XdßàçÒOÆM|½Ôí™(™@0UãÙÁHž›caá -ÆÆ.rlI)9J2¦){¨|vš9*(Gº^™Zzÿè¨õ ²bÙí`ŽCéè_»m4ùÜŒþI˜(3f£é+ŸNù½öºž3Ž‹Ï‚Ð@\{†cÒšúsÛl3?§Tf;Õ ô»¥\ïE/ù:×ëÑëíüLYB@9^C’xµcÊ;5o ÁŒºU9'Àõ˜Òöa g¨–J¯Íé?°µ96šŸ’\»ÖïØ¬,8S7??ÏÍÓSf¸dMM|ríºð["«<…’‘OëæàEÐ[Ó`« %=´*9™F½Mäú)6\ýþ»3fñåKÓîÈìÛv\Þ½Ó{àï Ü3 e¼%.°Ñí¸3´ë €.ùÁ•HžñØ”QPö}O‡™ú·v•‘˜3….’µHöY9õY¼ D53@ŸrÐ*­¥/ô6WmÏhGÉc¾‡Ô)~ŸÂR½KsÏ4sˆŸAüË?þ‘ÎîœoÜ7z‘ð|Íì½v~⻥h¡5ÿ0]1¹3®z¦Û cÍ3\õÞ;WŠ÷òÀe2géNÊZ°( w;fºZÊ’a@u<4]_ my]®2i(é„Î>!UJôÑÔ’#Ȳ<ù=JдØ&?%ÝÙû$THÀbÙuy¬D\5³Õˆ³,ŽÎ)ãÑ;[á‘D¥HBù>jÊ€Û‘X©žïÇas˳h©Í.$R$“Þ5RºÚzñଘö&Œ•£%ÔÊl9ä¸ó ÞÝAbÜ­q—J~Ô£'›nت\»ÿå7§„àºR|ípN寛¥1(KÒ¹gäãò@àÛ1R²Âô«úž¦H· '¿R Œ¾õ}ñ#ˆŸZqí.Šð¡J§ äø¸§hJÓ.ð\TkG,;½&翦£¼9­sÂo«=%:x›Nj¬Ö >^åZ·*ƒ»ºüËÅÇKõž²ÏH6£w >Pç…D;²’l\8^ãæãŲ§£¼ørAð”Á ­‘—¼Þ#ŠLähý‚û} ³üdí»í©qÄŸ¥æ2ùû*ž©ð:˃ºÌ!]z5¥µ.³TÈÀ¦Jƹ'PuØ5ó5zëµä˜ lfË´Ît†ÀßïIh²´`|WJÊXË[½çìÎÞØS=¬¸µè[Ð#Ò>_xÜî|.Š…ëðúìÖž‡ïyý"k÷Ödv¸ïÿñ>³.¶˜Øö\6 7¦µ9ßíšµž@¾-*7.“I}k-C¨d Ìy˜·Ð@jfI}(ÁL{eô—–ÚƒrvẆ5”ÖÁWɇði¢§¢N‚ŸŒªq)hè¯÷·%ß"“5sO¦ ~w ÁúÑ5?¥kwH™£>ÖZ§Ã‰8²ùYÉ7'g<PjŠÃŽìɧÜ­W,˜á•T´çßjý¸*理ÄI&¯&æI,®k.iì÷’ uAáLHuù—@YW«‡eSãι—b¤,º$"Rºmo—™[Õd!£þžò ¥J ~Öã?c¾_ãªnÅ?iø5£¦â»ÐµÎ”Y§w® öNϵ}®ë¨`¥hÉñVà>×à[–”ÕåFƒ³)¤ì¶zžs =jàRÔNQMðʘw+áFWÝZ³„1Œó~žÁ~~Ù‡Þ.ghÍëÓ-¥,6f胟ú˜§”ÁˆÑ¯Ò—äõ“³÷Ï>—mX™°~¦q÷§Wÿ™µ•3+ÚÖ)òioÔµ}ÙeÎõô½« =÷vÖ¶kSâ+e”Þ•£ìýS$àžËd5SÞŽ/ç?T,ª‡R¬ ³j ú Äç¦~E9}†XEøîýŠ=çÃàžËkŒ{Û}í°y÷éu@mÕ¦×iëcûÔÎËO:£Á“X<£Ìưµz¾Å( »6 â÷L¹ÇLíT Û±SúR$£ö«×–žâ ΒˬJwó^ÕÑÂup‡,=,ÜT%¿ÈcrLH•ÛIÂ}ñS Âá©Oº¿×ŒÕöé9P›À.À‚¤ù°·ãM/˜q€­Å÷ÆßQ€¸m1ïIà.µ}Âu\¯×%‰˜õ «•/8›v–)(ÊoÔ'³æ\„Ê’ôcö-@0Õä µ3 Ž|="šÙÝ’´ÉÆ”ÀµÜW¹UéY¤OaÔ5‡Y Ç“_Ï>RúÆT@Ÿ ŸW˜²p¬R¾ŸNZw>EY\M6ÐçµV t^qîTÔR\€^! yn¶{µwËiRgŸeƒÖÙÖ/8ž~>ô<9 hîÌ×ZxàãdÁLzÃç÷MX/u¯µõâì-Ê=Où´4ðº|Ù­ ‚•w\”ŠaÞ™QMwóî9m’Ù«’¬@aRI¦,p¹½+ÁºÈ»¹[f“ºvÆbµë~Ÿ•V’ÒÇ3üj>ž¥ü|Z±!ÆÝ¿µ&¾ªÞñÉáêã©Ô»ÂWØÃ¦éÏ6eg¾*šÊ™¯Õ&+r= «’¾w“e±ÊoÞpo?eôIÁ>uO¹ž>îê;Ìs[½f‡dµ¿“eçvyð8'õ<ë®—íÉã™@ìCP=0ÇÈȳu›Í—ŸÏålïGf××s†ïçHñíÜWùÌÉ©ûYYçR¯0÷ë±û‘ ã¤ùW_Á¹˜ý•nʩޫrš `Ê¥óð0|l7)€¬A˜T’XL:˳õÄ›Åè—Sxuti·öhLƒ¹Ô»'×Xíí’ëuÏ©oîÝÍå,®áNtðf—DUhnÈ®ßÚ\ÛïÜJI/Ìææègrù£'ÇaûÈ*ñë–£H/xšÜ¹?Ëñ9ÄÙ`«ÕíêØ‹C`] ¾}og[fᑟYŒA6yžXNÓ¦;œ)½oû+86)ùAñö-¤#ogEZ Ö‚ ïù„ƒÉ¡ªÔ”ë¼Ó\Ò$|¸OXßÎi1ú.0€¿æTÛ§lFAKö™Y:ħÛú8´š"4ù»;Up?ó{9K!¯¾êd ^§# Ç-zQQ”þô*àÂ)3,%49lšî7 ֥Ɇk·˜uËoê^ÊÞÂ,ϵÆu©äíÑ™ã#HáÁ+¼_¯f·¨†WTrû=H_$ÔiŸY=ã-Èe9òºAôÈ4Dƒ;o—5K /‹¹QH³Ž1¥,Û_âIßÖ*¾˜ÞsíIr›(¶3Äkfÿ—_\fèÙ”¹­}œþ²9å#.jß”m CÌÒrÉftE4@#u~ÊiÄâòkyä{“BeÁúo5´ZÙ÷:;ÓÜWý½ŠŸÑ˜²WÛ÷ÿ›o )­2¸â(föž{º ˆGˆ|½àøJ­n©ŒäÑ";¿Ü<ÔkßúóŽ´žhLä¿<áÎBù•÷o¾³Ø…„éþmsáæ‘c£Æ™ï»™ñëfÙÕ&’Þ½ÎÑK)˜‘ÜÄ[i%–¯£l´/Ä è±v¹fpš¡ÜЦO>5¡ŒÄ3ý°]…ïrÅ®ò‰jVh K1Ríçž»E‘_Í­§oj\ ¯t~He,ðÈÀªêä sC%ݱš\MyG/¥–==@<<×óǽ¤ú^ç˜fo€(± àuæg/—ëjÔØöLõ˜'’ÆG?}ÜÚy\/#Š.*<±®)0—ì“¡å#[…Cy|mÇ™¶¡ÕÛ>Ë9Ž—pôJ[wžÛœ!€E·Uà^Õí–ÁÊgùŠRÜ?˸vy4¸#¤×nP.«DÒôžÊîs†Q$äMï±·Šÿ|géª Áõ~Ýi©™®šfÜ 5äÊ:­§OyL$ѵ² ú·o™AZîøy¶w°ÑnÃÐŒ‹â¯ëÉ»sðz‚l{×Ôs ®]°»ñâ‚þö’— Fü´”ëã語Äâë¯Ä·õsôáìécm÷Ä66-à–|w٠&‘JÞ øö™mÏP´+pª­Oßξòi“`cÊäéÕéu@• ;…„†ûk†«ä.‘*šå$4*dõ˜E,YœcÁƒ yk !~eß{O›ÑU=¥>”g’m9µ'Gî@+Té½̺ûèh¾pë;·¢'÷Ûr®“xq­b³m]þ¾¶âþXÓÌ—‡àrAœ—a‡Û³ÔóÖg³Tñõü™ûuêQȂ̡|¹r× h6|Oƽ²ï¾ÑÌœÝÓW£¨ºQÚ[Æ¡ßR½îshÏ”Ž4‚ï<†pd‚YÒ»·ÇI… ö¾H[:éGÓkÜËr4v´“L<”*v 3ä#X–²‰ìPžá>ýDIþ;›õŠøQ!uç»iH—P¬ÚV²ýnÖÛ‰¼ï`™gwó^³Û¶>9f›EŽÀ}L¯¬¾= °¦ã;FôšaýM³˜ܧ[¼Hâ/P @½ýY2ÙÎR–”yñzúY’$PÕ:R¹ßÒ|3uÛÉÄWM|m+CoÉM‚ãý¸=d¡«!W€¸n¹ÐôüzJ×ÈÍÏ­}€~ô;–"éOD–“½Kñœà=úÄæ /¶¾µ¶k!‘.=ÞK£í¡øÙwöOýêZã׳’W1,2üz¾.˜îk\Þðñ|–œmp¹i¿‘õd:ÕX0£)«j6©ý……7ÒÈ…ÆNó™óÊõ%Ÿ™öN uBy )ÛO}ä“dØ”y® ¢TÆŒÁ#­Ò¯·rCBG÷ rà5ƒ¥xRp‡ñëRÆSŠ@C@{iËsØ4‡=›I®æø=Ò*Ø­‚œmêPl[ƒ§$¹öT·i¬¨˜vXUŽ·ÖÕ¹O<ßWJýóœú\®³¾Û§A+$ǯ3g=é=6‚õuÂô±Üö}]ø#Uæ÷¾ïÕ…Ä6Ûsž;kÞàÖÓGì+à·,#×¹öµÝš%cÓ¾&>3Só·ÃT[+›^©B2|—%–GßåQSE5’ß$·M5‹L/”ôzÏ÷ä`bæe&'š¼cªS׫ÜJ+¼³HH®”ǘÔÛhÜÿJí;+¼n®^Úæ­3ÜGâØú1‰ÓýH²årw©àOOçĪSOÓF€ ¥BÛWì}–á™Ù)(Ÿ©®þmJ€ÄÊKâe*Ôí|/ø‹A¤Càsô™£S#™,Ê2Oübò÷íüI.¿–OøØÕ>û3<ÕÄÖKjãã^~“zúô†—è!5îXGXvXãåòÝwÌÑ©о‹L$-}IÅ|Âñq,µ:ØXm_Ázï4L¯/µ– ç-søõí[º+쿾í¦ânR;ëÚžS^Œtî³<ÑÕl×—e©s¨WÒ©#ß›ãïUƒºå~³Ûô¦q\ ]’<ë0Ôô²µ5†(â™äÔ4gÝìÔħq$\â­_ë”ÀÆaLú¬ÑéÖï×Ъ€»E2éìîŒÕÙR¶€Ø±Uç–ê’!M£Þ½ÂDKJø¹‡¼f^­ÏÜS°LNEúÒàx‚éªê–e^ï7Ò÷Ë.sÚÂöhFµÜê9:étXû·83Õ£«Km¼²¸dëÂÓ)% :ìk ߎ­ø`ü´wz™Jz+Ý3eV¶whmm™î4z¿Ò%QJË?^ÑN¶¡Ì3J“AW'µòÿ¨äÈqÌäÚsk³;D™‘㘙í*æ8M9í“Çhæ_dñRž9ul4ùû‘5‡­÷2 ` ;À·ÚAšó¸¥±žà~v=60…ABj—?Ò H÷ziúµ­ nP%Å€¸ùLŠe Ý%JÊxfÛiMö1€éRÛ3þŽ`'û¶.Àzw†z/•¾70ôò›—Ç¿s —þÞîò¼®kM \g¯½kª®Ýð=z½žŒ;I®ö}²b^¾ïêJµm6I/LkÿŒc9åZmR¬ ÜÓl óYY'À- +¯’@c¬¹m0ß0l‡b Äë+*g˜~©ý¹Uà®áÔ¶N€» ö7ß`[̹m:Ì2Ô¶~J2öteÄg=õî ÍStd&~Ʋó[ŽWVÕµ¯˜?ž_Î'\#êKè\#1tþ·.8o¹"Ò¾sªæÂã¹ùÕ’À©Àã ¶ÌÇ¿DàsHqN»lîÿÛŠRÚ²ýßÎ$›Ç0ÍAÿœk_ßçæ{>žìUéÝÆŒ@<‹‡²·vž<àÅIðŠXv)Ý=Úƒõ>ÑÓ¯óðâÀñ87¨êó,­Cå!=ºÊ$ÿš@Vþë¶JYy;ñµ#„ÊÈú:Öi¯ú”š¤~=Õä ѼmŒÕÎü^Ò°Ò-JÛu殾Q²Îʬòö3ö§A¤³?-)q¬}ÍÍ:óNÖ– ~ËfÄLצì´èJТ9¬|òßÈ¢!m€'³]s7#–Üô…ד+Eò”ABë,*r7ϺÃT’‡8ÅŽ£~6¸Ï@ûq :=XòZS;ykœÔ¶Œé3“@?Oå± ÍÇéþŽD  ,e|ð$e|û¤:bKÙ€Ÿ k4C#›÷Ó5B+¥2öIŸøtŽ×\H cE~ö4R–“šx©Þ­°WÀÜ‚;ÚeÇÓ‹‰ßÐÓ'ø®Ò¥—ôs¼U¿^3pïìÕ^$£Wr†Äâ4ñôùþô€‚g™SL²}´ž^Ì:¯´í•›Mû-O;#>~Ä>R`Ô¬¹†/äÄäIo­¿ÌFmmÎoO2{ÃkD5—VÃ;0«uª¡¤¸êtgG/ÎE—BšÊ  jÃ|[C?:̤e$Æ”R‡‹oæ»Ë±ÇŸÕc ½Â™&ãQà²B£F‡ø57<–Jê­î+s™z™uN|¯è‘Uš]V¾æO‡˜Ë½1Ùkºöž5?ëgßÞ/O›vº¢’¿£ªæ²ÕÜ´€¼¢wßzÏšŸåw<†§®Û7°¸:¼ Ž×ÕqÙsçHí0Ö[ˆË{»ýÑ^ôÒI«øØTWxyÈ4 R9ËäYå0Ó€;7>¥*Ù‘˜‹@¶r1 ¤ÄÝ: UNíi¶˜P^áPí•”¦äëé“âÁk-jHÑÊi%€òWÉRçÚú±Kõ"ÓVV£¼÷w×X$å Ôb  m&¼]Ï3ŒÉ±G ¯µU©>ÏÖdµù¦YVeN¤¦¤ÖÑÕQtaMÅ|_q·Y$+ß ngƒ¤i.¹íénåýÜhò‘’Ãw9²W“Í-<¦aèvÿÚó›ÝWdØmÕÃ:\>÷¬ÆÏ(Ñ?/XßûîÛ¿¸1r $–'ë#7z抺§tçÖ€ÙS*Ôg›ôé!¾~+ø‚R0¡<·»Í$4OÕ{ÚG²— å ÷ â“elàž†€)>Éû3ä±ÑÔ”WaIz¿¤»yš÷™ƒ·HF¯¤´&E, @¤àD{cGm³ñ™qË+ʳlçþ0zÅÀ:ÇLV’û·Ò=š Bbü]$©ñ>ϱ?±˜fÓ‚“¿e;Ñm÷vŸÕÃ'§2Õ5ÝÐÇ}•¾@9‡þ-bßÇìaKS”lÐÀqz4ñÛQãÎoS<#UºÁzšKÂf¥l&e* ZZè’#³pðŸÖk€5[³œNõ>‹Š*6s_EËVò)ÔÉœ}^¹êžù…4îäàSN(×Ufˆ/Þ½Éò) ý”k^ÅI‚ò€r[Lb=©~æyÚ]í2ð(uí€`â8JÅ€¢šÚÿj %g8×2€ž‚G†‡M »QÀ+AVÏ_•üôÏ×Ufؤ’¾¥4úÐu¶—ÁdfêèW!MõY¯2õdý<–}€B££$Ñm1p¯ÃÞ{ÏYʯ¾J7›5ÑåGÏI¦¾_*_NdÐê°é¢å>›þˆ¸¥=Yø"ž7;VÆO¸s¬øçÕÕY€¾ÏÄ×ÑR[7V;ÈquvW–}¼0<æR=g¤€·ï»^gKlY—™ñipÏMAÙ«rHunîíFŸªâ*5i¯T~ÚÂ)±ÅLdBŸ^ô’kƒ+•D¤Žz\µOé}žËÔR×R—c«Õ3‘±Ê`±$ ô”â¼½»ý?Éú¯Ô0ë/è ·ÝÞ)Ö¿ê­-†é÷gŽÕŠ´øÇa1ô4ÄU›#ךÓ¦òôɸ·­7¯_‹ŠŠdcÇÑò2ç5  Ð@6 °ºÅ{ï%¯3¶'l ê9"ÚWJÏî–Z»y÷š±ÚóëßÒÈ2ÕíëKj7YYni6_C«9ºšþÕï%@SQ“/-#iÇ'uáédR ææÓ]„wòØNàžâ– é·$wê\§áûl ÔŃEbÔüäÑRg©&p·z^stf¬ §šÚêxd„M~Ó,’ î.ÍÜ¥l(·,Ä…Shf)%ÿ–äËÛÏ‚>†àR-Wø.ƒÚº fø¾’*Uï‘óÕ8{Õ®ØwAöNµ!‹ÏzVd¶¨GT³’gBž! Üá ÓQB޼:\$¤g‘€¦ä è“#7Œn¼5°8—™ÌÚÛGæÀg.Çb€÷ÓåÅÒ~ö+Ÿ>‘ášEµà¸·3KÞÏ’çu–µð€‰÷¶é€å¥=òy%½e(™(xp–=¸v]5í÷ca )˜xØz~Vd•³`ÐYôÏdCö: 3UVþ—_ª¥çC2ÛUUÛ“nŸžñ\/bÜÛ• ¯§ÞðV·3˱}zÃ[„Ã`ÊyâdÐÛ ‘\Š„öšüòaÙmU‰m!£SQÜm4)KG3ßÎ8çg• z§¥E;'5à¿RÚ(V•ÕVRzz>Ò~PUÎñ=pÔv'A°$ÀYüŒOèm(·%1c, ]ã¿3ÉÍòƒ&×ùøìZð½@"æâ¤nWeÌÖ´¡³W××{Í}Î\Q_‘ÙœgîÏaÚûz“ à¾mc´ÿ•¶Ø÷k»øŒ³&Ü67]ÞÓÞgfþXÁ:€{¦n_Ï2 jàœ¢šüzå=œÚ^¸Û²²ïºá(˜I™©ŠpRëiôé' |q&±À …%©\dó®C¥64¬žÓæðÔˆ·Â{´ä‰[ Î꠪˵ô©2›dÓ«´C°»-³™žjòÑÑɯmÌÔ[…´W­mÐã?e l³`úèÏ#6]ò˜ŒŽ¯îïvÐO¶/ÓO«ˆÈãzü”¾Ýì ®Pª/Ñ>°l¹KùFOwåÑ*šªŠ©ê„C:Ç×®…awF_1¬œbñoÍ%S7Ï_¥¦<ý[¤Ø¶EãìÎtUqú„æ#Ë>®G…A4rªÉiÀ»_OÇÉ`ø\Ê ¦ §®ÒÂZÀ½ýW þ~|¶à6~>A6¿eÀãª Š’A¤ËBÀwÙUÐwd€ÛÀ={ô0ñVÆ Ê÷v“™çšŽ4 P³s|ºÈç:e1éewú°ã¼Âo %ÛÜÆz*ªI°XÎëR´Ã£+Î)yz`}.åû.Yêy‰sÚÊ̶!W³íAþÁ=VÃ+ÏU¦=w.ÈnCIG ^Ë Ò¹­Vä#à©aO3Öï¹ÿt©¯GÊ%eJ¼äànAΫLH•¼Î®LÍ×-·HèŸr`q‚Ú‘“Ôj •ÿo©Œ¸üÆ-sÕ¬yH¤Ö\ªzkÙ“Ý·é¤8xÀÐÜ£Àø²÷€Þ½‚Z„ð[_ãøVÁè'˜æõ¹”H] õz}9Õ¾K€Ô¶I*ü¶ªŽËJ)à{fµÚ}HG\¢(æaÜÍÖKÒ–ƒÑl•Z®£Zu8;ž8‡Û_¥Ì&{rö`ïn ½µõpó ªirÅIObþx² Zk×/E Ì=Û@€¶q‚Lc)À$óJ0F3:J€[¼x‚l±òR¨kðÔš ¬õWZÇ^•r¾·?}šæH«&ð µµž±$p&:ï§ä|ã(ävªHð4–ÕÇ¢Ä!uijJw®M›<ÖO¡Ä³èèYV‰/ﯜàxÕ´÷AÎâx0Мº³C¹)lm —“štn^lw rw{ôS•heÖÍ|Ë. ÝšuÛ8Vˆß;¾ëun¬<øª«Œå1º$•¡‡Væp]9´”îïf‹Å¡Í"uzþ{ô„±LEünGf}²ïÕSÅaæéé‘§S;>ŽÃZÙ\A°…+úž‚n5yÔܶefÖüQÞö¸Ð¤W:iˆr@O¸ßžšœÚ«ö¥šUK×`Ç€7³\±‘eßöc¦úD€EºâXxÓKAÛözV!‘v©þ£i£ÉƤŸ ×4­1XNÿe0uÃ|뜗¨>Bmÿ¤>çÛ&a ç¨ ÅÚóqðSž·¶57–¿ ^7ÐO¯v$Èz/š:ÌZ!rZL¦>ߓƚ ¾«ÂÞ¿…ÃæÓ%¹‚ökýYx—bƒ÷Àñó½ôü)~Õú-Ô1ŒNø®LÖöŠœ4âL 7Ï2AZdV×ysü2”Le¼Ùw-Û]nô†‡›O‹RAü:q!~]п½7C ßö”6Õ͆Žg»“$OÏÕa­y»‚t½üü3ûW WqG¢nçÙa%k¦+¼$7íoÙG8ÁµkUzåê-“0]ð‚×rdoïT¬’ÞOʬ¨bƒ $2ܯl½L'«ª>CÌ| @óTî!~u‘›ð7?ËT ~îÅ3Éàº<¨Væã™ Ù2ÒQÐ~b¨Šš9:+$(†2eE{õ~9J½ë÷½Ìòå63/`R,¤ÎŽG«Þ7:'< ó„;7¨º/‰Ù:þñdÈöá¸Í¯ByÏP³Û©_W*jÚAö¦úmÀ4ŠjT–pÉ¥ÛLZCrBÊû6'•aúõ2¢jŸ Ueâí$ ÷ö€MGöêvÒÛD&ŒNn>Ç[s´«2÷†;ÒC÷¢‘d"S<“¬|zãTÔ •ãÈo3KEKN#ð)¹·íë!TÏHHål°¥ÂrÞóIyL÷Œ Ë1Vi–ÖVb•èTÑâÀh8xÉH’Û—`DN2Uïž¼8ïOKw²šwßÒÊÏ ¿á{J€øÛÔ+:Êï§hÉuV¿Òm¯²Ù?ÕAßÝÖŸÀ]I®}-{dô·©±P–ÖÈ€²]ùueYÁ}jå%°Ö'L—Õì{[GjÜ3]Uó*–ÙdðÓ(°ñoÕ³Ò–´³±Ó‘ƒ)7;žÃ¯R´ÛDÒÞêíªkë«Zyñ†#”‡j©Œ­'%_ÑÏÎm7ïð&sóz¢éülç °žýŸ¥53–j½·¡rðÿd¸ŸÎ0ÕýÝ}xýmUÃ÷~2 Ü Í ÷ý…0ÔëhÇ®²ø)q•ô{ƒ­î³òt]jèOŸ¢ÓÖ'“ÐGèý´Ÿû¥‚Òîe“ºõYÛ¢#4?þÈ3ݬüüýíJá=srùÔ¾ÒlõyÂÝgf6é Ó÷yÅ&r]f3‚ï‘¡×Ù;̤ ¦gâ{>>_¥8™¨Ú{ºëÒ5{!uõŸñ2»dÛû¸Ñ™7µìÐé|Ðô©.RÃW67Á`nïÝ.ˆœÐŸ‡ÜȾ§“L: ›ÓjRJUoànˆ¯OÌÁÖŒ|‚3¶ö©¥Rù£ºÆŠ±•<öÀäìÏle(“j9æ(6º-á ]©D±Ð%æÅŽ£Ç{g8;BpqÌæòm¡(¸  Ñ¸*B7Ó}v v ”gz@¿LL†ÎðŠü.\|ªœ°q$c‰…ìNcù“|ë3¢ËV•m¿#–ð¹”Ìw–ˆì¥tÈI¡WšBŽ x©Þ°SY‹?ú×9æ:œª¥9õ”ʤ; KAù>PÉlºb­lûXa=ÿ߯TˆŸë±b¾u üI9 ÀJ5·˜~K—ýJðªâÐåi£ ';Ø@‰_okàM¯ñ¬1k°N!<ËÅ‘‹YÏ1VçkŠ5—0¦mIªÌ%ªi¥‚=à¥SÏWFçxKh Ìx%× >žçt†=Ù¾ºÅ'”Æù¯˜hB ™'m"+|ïÙñ^è; Wö€;â( £œv¶Í?ŽÐ߈³÷X0s†f]©z9›½ÏmÇwe XÈÒÝÁSßeòî·*VtíÏ X;9ö"–d‡ß/u ˆ»Y–©mˆDTìu€59uµ•,‰Q5?:ÍgHS[3Eüb4Xí"¤bÓUÓHàžmÈÄK­Ú28iˆí„]ó}ºê¨€g©I+JSæÁ{C •ÄÜ÷’†Üf”bµ]BŒ¥‚<é%§ph&ÄÏÁÖ¾›Á~1+æ!ÑZ•¹$0£| ñÊíSÔoP>Ýf²Øf] =‚œÊÇ;íµºÙôáVÄòb×gå;Ùžt}ág¤¹mé—/XŸÐ_¡Ä0t• 9T=í¹ ñ˜`_z¬0g't™wO` ðp·z&•¦Ö\Î1èýÒ`÷ÁI†éÉÁçÏrjJ‘L¯>7ÌÏQGîx&¬ŠYÌ6§ž¢½Ó¿­K¹ÖHôÂg²•¬yJ†Ò÷&?=õô|€¸ö€áxÆ5ÐOX@Oî?M'GJ±þ>f£ÑdåæõöºIˆŸEr]õër­i?SL”s–¦[<%žÜ†¶Íl[Êi ÕÞŸÌ}.å‹ÒH„ÌpLÛëL YO.f_œÕ@$SºH¹ P&k<É>}åÍ£+ÔQPÉâ‹¡oïeŸPþ) ª‚ødÜ{È®üÖÞc¾ë:„ZË=I«×»uðñu8· ªšûÊß§g]òå#7”Ÿ:ï [z\ÓA<*ÙôÜ*wþ8£Æ^a¯3äó Ñþkþº™ü<ÙëK˜>k³?¯nçA 3{Ž«æåÙ{Ëx€uLZEmï°ÕÕ6¨²ž[*c:öý K6“î(iÛGx‘ò›”CÈe³=$¾×ñÐôU°b¸†.á¥cy‰€xÏ»'‹™®2öPw`SZC¦‘_—<µ/AdÛ¶ ïh\™!K“AqÉ}Z-û0Uïî@^iÁÛßÊÓ¼šrV#Åêc#n^Ü3¿…½3pÛmP^9<›~V˜nÐ^öSêª3åR9›Àþ¦–mVöçøii–çbCö”鳑\„ìiôÙ®Ö¾·×«¸ÅÎE£Ë~{Ùü1å èkd’9ìô~¬7ð7BvéÔçL©hO‘ŒÄ-=¬ì6+ïߊá¦Ã“œ·È`Òs¦½F\N2i7é2 uð ÄU"dÉá¢Bɬ}!¡^ïl+£I¿’<ºú˜cºWÀ§ÀWiWväµßþ¿’_q³!×£I³ïÜÓøY†’½7<àñ @“Agý•õñ€ìôÕ}wªƒîo Ü9o8:œ±Øé]“Kéãi%¤I5vŽ÷ϖʨ[+³H³àz…Ÿß’Ó¸TmŸ“îòc­#³è’~ÒÑ&;»e±è³øîÜO¬’¯Þ2z½ByA&@w< É2Ÿ9Ç÷Oy#yéŒl½·*qH&ª&öèQJu—ï“PGÎ~o€õœsüy7›30}Ï?çf\Ñ««¥Èçº[©«oÞp:îyàÒ'uí­®¸¹o9ïÜúÜõ¤®j ©ç½z cbKÌ£+n©çÎ Ä{¸o?™4¡bY‡_-­‘Ó-7±dÓ=J(]{ŠaÄ ÌíÒw½’ ïäÚS¾"i pÜ.©òfIè<údÏF=ê:ÏXÌ“ð=yô,-jÖfŠ‚2‹Ô#†U$¾ªºó»d—HšI´é]ÓÖ¦²AÐÜRtMÁ_B3²è’±crÏbò`¬3Ú©ï~‚[k›…JJn¬+˜öðk÷ümByÿ­S$ÕÈ^‡·VßÐ\áYâÍÖ Ë,Q8šýù¸ËA_Œ;@Yn3îÛŒ>3 ÁG&~ä¼Y3Ü<[aºùu©ØÉbì-G+ÆQصj¼ô|%Å3Àb½"€.gƒrk³ì=ãn™MÑŽQPþ”Ü’êŸc5| Þ­'K—,iRgŸ‚«öÒ#À¾úyEÎ6©ƒ÷Ъd6v­'æ)=j åíä!W&…lFÉ0ÊRªï~ÔÆž²­í§ôbo¨+%sI&FÔO«®ðÀt§®ŠlÀµiJ{*ÐߧȰ$ ˆç™Ôº*P X/óÆ‘7ÖŸî±ä7ퟦ¶¾ißÔŽòm=$<´}…àG¢…ÉÈÁFϾ|=³ZFÒ”ÛùmË‹&Cªe¤zy´;ø)=jRšÛKMfú™§¸ÇW¥NŽÃn´ŽrbeΞ¯{¢ëG‘³w øSK?K¼”:Dÿ-¸:ãª^]H÷U%˜Yÿý5¯U„Ém¯TŸs¼a}½$ˆÏŸ¹ØÍ]«•—H¦ÂzÞ)àÞKbñ{.UqBLËcªò˜ÈÒÈR-'$5×x«œ‡_ÅÄ;I¡ÚfÓS¢0*àÓý&Áz}§ÿV-]Â2 FJðÐá•7kž’¡räž©†@í4pLÕ»qeJµTµÖý¸}G«ëÑR©TU*)22>®ºQ»!Õ-¯sâ;g¦­¥îSÄÒÁ”épíý˜#¤8gMr—a0¦Ù“¡×Ì œ¯ûuyÓ³œøk­ü»ºöçðý§€øs½Æ¯‚é=ÀZ ±)aªvÛ³ïsE-ÈàXvß±±þºØó ó„àDïô˜ó½ï=S`»&þ”Á4LOëÛñ¶¥žÙðFUÎ(I÷Ƙ~í!…M\ÐÔü%y&õ]5/³+ðênÔN…gûÀDy<Ï-•IN°p¶ÓÐYšl“pÆÉwªh‘L÷XO~vXüS—?Óf¸ArkW™š¤yÞW×¾ôìÁÀøÂ…φÚñ׋G㯂H="h»; 1¦Oa½vÏÓ¦ ´ ³g®¤«‡æØlºršNw ï®W!²¨„rF¤ÁÌäì£Ëï˜K$ÝH;:º4s~;é‘íA…¯Ø¾SçÃqN›)!ª]¨”6SûÐ;üñä×…ìÓìY­ü,Zš¹+ôõJ,g¾ûzÌpTü Ü'|oö}-ùœ›}﬘ýþ89õV«7ÜÏ«´ò¾?™tIS·¨:Èk§Yöìˆí9[{Ëžƒðdoí;{³¡–̨¤u«këàáÔZ0Dì„øµt6`]ÆMQ(ßÖji­78rK€~æë¿Ìzïj§ÝêÚÅg]ð”ÇIˆBx ø¾·¥5dÆV!þÓKä™úªüGÖC!)ŒIýT½Ëâ'ý¦*3®]vß(ØõÙîJwÈ(„7 ZB“{÷®AŸ&Ty÷ɵ Å¢³oà>ƒ##qi¡ËžZ1.œýu•’È#ë|ÒÀúyýåë.Ò§@ÿ§Xg˜æ{zú_ Ü;Štý -‚jxuæ»åÿ¸ßí”K\_¶ø¾>Fz°q³à÷œøïX yt”ìâ*ÇýjJ" ŸH_&Lß¡özõ˜Kú¯ÂwsÜPµ/ç_»´¹·aoûÞO¦ní¡œðNŽ3ðq*ž;°Õªz kédÙMžqÐ-ª3å=lzë৺=ÒšŽ³l,àF;3s’CÏsáÑ”U„ÕŽ]¶x†!fhÄ@vXpÞïÎÏ,yâHhºµ´Ë‰”ßDµ4IšÚnX:!lßY3C3×w픬v·žEÑZš£mAkÖç«$acE9§3“|œ9YßÝ™ÿ“9„pói¢m5[™DÜih£²‡(žÑ ”q÷YSÑÞjõΊ¹V«O]û®qW½½Cù¨º‚{}Öf‹êîs*Ë[NÓÇÙ?Có÷§½µå7W†(ïŸ;‡"‘èL1оÜ3sfÐäžR?å7ž|# ÏÖ9ë±R {ŸK-¬šeO tÓÞª¥5a»>^m<[TÃLcgÝè{é$«„¥úkê”›t#4 W¿H D)iiuþ”á àÞÎìu,@ùfÄ%“ˆ…]kxï)²¹ößäM±[£€_m{uË0èZÙWo„=f™ÛíÚ\;@ü¯ÿš+'HÊ’ãô.¼öd3¹SËÄÏê¥9ØÓâ%gX¤Ë+ðÍ»ƒ8è=wÆüWÌúžÿ5ÿíâ¿G_xóÛçÕˆ&¿¨aºÓBgN¦áþ]ÿKìñ„wïºFØOÃöïTòWo2ã¶ÝTÚE 3¯ýT±ß÷ÅV’±ïŒ†ìžTÇC;àÖ ß‚™@skŸ…ã¨wn¾=ÜÃþ¸+àI'ŸÑ‡méëøÂ€o!`³òݯiîŠ ÒøB€& ‰›iƒãXEm6mž©Aü)‰9kžJÎd›= ²5úÓA·r=Ã0#ÓA«Œ$°Þò©lÙLp <¸ŸÆÓ½)96{ÖÊÔ¼ÎʧÉÁwßꌹLÚŒŒÀ_‡+)¢jáÓL¾Ï~z0¾0"–õ ÀxµõÙ¿’ÏP~¾/Ö´böËF,¤ƒ`ÄùçÃ<ëbHíºµìáG]&%iAÞIevIL[E›_?›SÃIïjòkÌÙª2¾­úLï&Q™øµìtð6­vø`Ôï>nñLkÙmlÝ+œ¦Jþüë~üÍ÷s›rj%ýü¤ö’)Áz‚#“¯¢ÝmMEÓ™ñíd@Tcÿîz–Æhö¿Ž½g„壌ON|×E5‹¯&BÄb)!~p忥”ÊÈÍ;Ãf³9ñ©|ÄÇðsð²Õ†­o#¬p<ÆV¸v  %ß=vX×Ä뜳.¯ÀqÙî„Q&]Þ>Â(×½ÕJîõÂtµòßÌýÙJwE5rájÜÛrzXçܦͬWq)KJ„ådµï »{Ë{yÎd¿kZý-A¼)~¾!’ß\¾6§òƒÄçÎtÒÕhàÈîúß×aC¯ùøW™6Wüµr}—ǼV>í?•™K3c"ûñô›¯ÓÈq?¹ïÂtëd¾ò8µJŠdÛDf³3ôg‚{?&†Ï‹{€»ÍÀtíܘ¨ óÊ~ÚÒºsÏÉB‰¥µÍ¬BÆä wºvú>§HÄs›•o“åiZíÊ'§ž#iµ÷´±®›£°ëçÎvwîJ§èD²Êl`»× ro÷Ô¶b»ç4Nà®á8A“±ÞµÝ»×Ïí”ý4ÿmýVd*=÷Òß]çúóXñÙ5á×Y2EÞCnÏÝnkÀåi{ÝÛgYã+L?ÃÎÏiyUO=ßà;Ü»ý”Ǧ¸ÀЇqç¯SB@Ü” ‚à™…DÑÁÒ°SÈÞµJ'(Ý ˜Üóu3kÃýñæfÜ9rx÷îaâ›;ˆep<½ÿçð¸ÓlÚðÚÉ6W,;ûIÎŒñšÙË.¥Šuf°+;N€G2»Z¹Wâ=ÊýÏÈH×'‘Æ 0¶ìÞÖµeàûñ\`åÕÓ't’ccË ÜÉwÛ„¥¿Y®e²øÒ¬=ð+æ¯|b'`]9MÀ:€x6+wâÍâÝY÷W•Ð…0ëѵ¯€ZùÄM²tM p‹jdñ“?ÓJ÷¨äÞ8cß0ýdÍY˜ÁÆt‡ ,s¿îìSÓПÏl}ÚB gWëßù3QÀgÐÒÙðWgïX½æã竼#¤yW­þ½š¯ŽäY>ýý«›Ç?“òÿóÀúM}éŒçú Š¿cܯ@Lw-ªáh;Á½AƒW@<°ÒàÂl„¿;ø6©}çÔïp4à~-QO®a‚Ï’“¾“ÓdM+à9†ï½lÛ«G€ÞöÓèï.åȵ´NpߥNóóŠÞ½…DZT×_[Uß¶ãæàÝ3ôQ´«WÂ$pOK«ÆV)’˜\™åf{D©0½³¼:?¾ri3pØ%½P¾«¸"% ˜î–YC$øÐ9‡Ù'Ïí¸I5ñØOiPŽlß)79×:£*ÓäªIŒ|¹jxc+3TH¹•O ‹ì®Ö¬±ƒÜ!Á Žœ5L€û6¶&€2æÑæÝ}|F@Ô×'Ày¸ëæ;f6µt§Y±Ëu”äP~…¦~<‹•|×*D~*¨þNîû{êö÷‹¥Nû]"â;K× |!•ùî„Âܽ]ëfüjû'`ýÙiq}bí¶Ô«’¦+8~­nÏO1Pž‹`›z’Kî<Ó\ü# 'ì{Mžrš.uºbÜ#ÎÁò@Ø ìÜënÙìš›Î/oîù4¿ž¸ëà›ƒoAK+¹Ÿ). .3DØÀ²ášÐPó"‚‹Øaá_×6mïÛ3[fÙP ãßÿ}C[^`§&žÙ>ضÂLv³J>Ö [£šrŸÉ'“1pÁo°sô3øé!™B£ž÷8n‹gkÇûÓÐЌѬ=Î?Ìâ§«A‚ET> ®îJºÓgK‡“šb$Ó› dÛ ±·öί´ðör—'39uðÑÄ·ÄpÜÊõÎHiˆf´7ìžÀúîñ•äzÍÉ…ïC…þë΂ÿïÿ­)ödͳ¦·ȶ•öÚ+ŸÛ좚©Pß¹öΤŸ]ïÊ,ž°ì~.)~j;l‹aâX˜Qòôîm{mX¯•™Ú:£x–©ðÈi`è[/³®œF l^±Ùw€»šx~SY«\S––!ç *y³hbŠåÚÌ 4Ÿþf“NÃõ­sâYšOO•°~Q6iNÕÒaLÊ›å¬=ÀšÃUóê Å#¹‘Y÷}¡æ‡ÅŸ]­³°Iæ> xÞûiiQ’ûz!]`:à¸YyQDç¾ï¡“îùk¾¼9þ×/Wÿ•´&yÿ‹²|*›á]jÑ\ÿöz£ïFß•úü¬ÞÝ÷õÝ:ª *Uæ·Ž‘ÿÙW|ÒãÑΫô˜»qç½ìÛ7pwi’̹ëïUº£½SBc†ŒŠv/4Ù·i5!’ â{½°>)¼ÀwoÞIÿmùG‹7ZG>µòrçŠU€§­°)vš÷T––^„3fÿrÌ ÈäÉ(zY7!¡á„¡Â5Ò‚ÑswÍ lk ikÖ;•¼e9™0ù‡Ëz“0ƒE‹š¥“ZÓÀÈ;%C`L ËÚ4kÆÌ`¦¡6°µ›\9‡"Ñô÷yÒ ^Nþ{L£jtù=œð¨Ò‡z~ã/ÔY7¼V¯o[ó)¤qÈ g=«çv®æy¢qoÓj;-`J S³ìsÅ©Gè"÷õLùìæø÷Ô—;-û¸Ï_›_R_³é­‰ŸY4mf½N°éåp™õN*33dö¿20¸ôkŸÍ¾ÏFÕŽû\ß`§âÌ׿éaîc`mèÏ6ö²+ŸâÍÍãÇȬQÃt¡üYÿdf¼ÛóŠ=G'XG¨–ÙEà;3 ܵ’g K¹s@|H©"ã\?”[ÿ”%%¯Z¶~][भ|‚e—A7²«â3 PˆÂÝYBëoÿÖÐÏõI³ñÎ ¤‡5i6²òHñiLhü\FÅà>c'®9»Q`ÍÆìöF/yiŸ†T÷³ÃÖÆ3_‡?ö s OAp’ûã$Ýÿ'Ì©ßÜ¿Ö8ûmûO¼Ì§©í99>{Ýó¹Žov`ýÁ¥?!;¯U'+0]W5ÍT™V¨O¾AvC/cdéw€~çÆô b6edÜ||öðÇ?6GÕB¤> ¾£ÃV ¶’[Ö~^;ëÌ­ Þ±·iFvÂôuTŒÑ¹%þ8“ëmãiWGµæ¾ ²m£< ¾d8­É Ïch«k\öç|&²÷`¦µï|É䙶љѾÃJ>nÁímÐ笋qmpkMƒ•i“%ܳuüIƒî´¢ùähy-³\ZΔϰx*…qÔ9°Ï ùù/À„‚hÔÁ£9rä M=:W n-&}IO:-ª-nih~•×ü•Ö|×7ø'½¡ó|V–Í…G¡~»;ffÀóÜ+yLt@ÿÕž£Dw›]x#|÷UÖw Íni™3I’iøÎÞš¹?í­@ðæ³›§oQMËcš×²³¾çxVR„L©—­gŸ½ÌìMËrØ>&×ë÷…ìZW×ïÊÈuvÃëäÊSüÄ/™ÉT`ƒ>~æÁïkÜI¤qFÑ yúÈlÈq7VRˆ MÃúN¿‘Ÿ‡7Ge¼à[ùÍ:6 ÓMŸ¶T†|þü¢[%ß]­±Æ:Hˆ¥5wí]…¯€g®_ÿ‰Ñäã“+¿çÇ_§Âg½"œÝ´zWðôIÖûלw$=gù»Áßz¾Ræ°¿:’¶3xãjÖúµðýQ§ékËë÷{¸)óó:§«Ók/Îu{.¨Á^©'(efá8F™ðî3uµÅ6ŽãÓœªR •<Óy*×wûéº )¿Aç6Ù÷N¡a4ÛÉ0\€¸Í4(O.ú{xVuí‹‘Pܲd3Ñ1Ê‘i˜Hí—sd9N‰*½XÀ%³¥û\ž¥B“ëíb&8ÑŽTbaʼnÓʪ´ÕŒæñÚ²ójb¨õxسÚå”:ñº]’å» WÝ 6ÒÓi6†¦5« ð u™iàÂl„²ßVHa¨ï=USVzäͯG†ä€-³+3ûŸ×ÍШá{ƒ{{¢_ïO :]Ï´nüe…o„³š³ƺ%1ÎðdHÀ_»nÉÔú€u ¼`}î;ròî‘Ç´aôN*3`vu»À½³YöåY±Ô!MƒõVÀ·Ð…õö¡Â.†9¡€{àøYêt'’i ,¿#³kfÚL/åæ[HÓ˳ÿµ ›f=S õ¬pêÜwô0ïì¡SÞ²O>AN þ9Tp‰(ífYû\9_É«_ok‚&OΞm€msgxßë#¤‘2°ô'ÕNšM^É5¹¹y…4ªÛ“Ÿü# ™¸×?¶þ‹ß¾"^&sV¾ã#ÇI˜Qf];àÞ¼À·‰ïkÉûZW’àÉ«Ùa7,rëà›V;å7ST£ ‡-ãXf iö øn]í×Ñ3ï™*ý½ô§FÕ¯òÝ_y¯oy— }fo}úºjˆm_¿‹oêJÚœÊIü*¨ñµý9 ?èÉ«\ïó:…÷s£ê©e9Oô†ì;çm7ê¾ýV…:—¤T?¬‹‹Œ»¢šfß›q ÷b±UeÓîÜ bim®ÝÒé~˜ O@øã—Üb•$¹Õó{ ¸¢”„<šîÝ‘‹ÀĆã ?…±f²&¦±Å¥%>&0!,73lzXûq3ñm å&‡”ÇÔX#›î”1ŸžÒ†D{fù´wåÐzÂÇ@äNÑæv,&©íØ|U[ù8.3Í-3çCÌÇ‘¾tŸnëé{9Cî:z¦Ðø­y›'9>zúNàáqÏH´{AÆ=s5ά3±goà×;1¦ ¦ì§!{øøHöe·Ÿ¶r½“a®€ûûØ,;°û„Ë÷™-æüõ´“ö–<¸¿Ò²O³)Cˆ†õ½Üí­W]<3ç Ù„wÏãÉ»OQMØzpæÊ'Ù}à–u?«‰@úWÓìx'Ø8XëÙ[ë㸷ªþäã…õ»ùUî|Av–mTm‘Œ5O! øÅÍ®ÖNªÉ_ýâ H-Ë6¶ ß“(/d_± w½†pó ?˜­ÕÜo34ŸCkâÍZYy›]j²hßɘ8šÛ®ÚòÔðôÙ’2î{|ä½µ« ”¿¶¦Í©Êf²¥5šP³eĺ{®|—4݃xŽ™ïîµ´ø pÒ™óÉ_ß]ÿ¸?Ïwÿlˆòƒ”{ªÌ“lõïÉcž ožUý+?¶™‡óõ‡ÕpÿuˆäõU+à›Ë¢£ù)žá‡teuÍ ©Œì3c ¯ØRYšŸV5î­­_Ü9—È÷-§éÁ€ê?œeO€¹¶® š\Ð[^Ò†å²ï†<8FB°KÒˆÜó™×Þ‰3÷=|s×05¨mËw*C†>ìµ¼þ‚ȧl&€[ØÝm…¾kM´jÙ!dž(þF½Ý¦Ûî\ÌögÞŽÉ*”díÂöÜ6_çC:Ã>FÕ}Èä²f€ã~þÉÇ8Áýäéçyâ@b¦È¯Çá ‚ŒXhž3Böø‡.Þb‰}ðî@ð¦Af•ҹ윙»Æ»eØî†Ý'×<ùæ U[”Ò€¾ÓÙÙ¾Ÿ{.ï^«Át3úúÄŸë[N#Þý.JòÌ™i¾ŸáÐLç™Zùi&nn¾µò­Œ?-³ »aÇ[C/Ä×ë`®áû©¼çغ ¬õñXZ;¯†_™Ôî†o†ž­÷]ÅöYïÕÒŠ¨3©,°Þ„øµï¹N²áµ·¶VÞ<øe,5q¥ój˜‹^w þÊõÖmÖ^½Oµf=ÅLÉ–‘k·A…;xÏœ Ö“³Ž‚«÷ÄRÉãñìG ûIœånimØÝ ©v‘Ìܪ>˜ÏÝ›_››ï”›‰ˆNzô«\šg—W6Ögò˜OýgGþSàûGúYwà~Ð_ƒéç{Í݇õYÓóÚýݸ@èÝWþÚ´Ú'½†êÓÆÚ½ª¯òj"kÉOꥬ·lÑ|y›]²ÏÙØÚ|ùÎÇOž^‘Œ[ö6>VD‘¶Q¶g 7  Uóµ-¹‡(×éÀ¯X Õvwæwó©3á;qi'7¬ý1ÆÍi´3ú8²™~n?´™:GÁ{ù»¿S€ÁÞx§ë=>ÚxÚR9éÜbgšJ „:Ã>¶7òu ¶ªŒ¿î'ä:O¡N¿Šâ–ä´ôà*ŸäþÉïÊøˆa”QÍPQ›”î°„ÏösÞÃ%Yδõâ×°»%1½4´ñãÞÒŒ)€9Óc®ì§SeÞ`úä×§æ«5²³¼~€{³ï½·óHúxNF¿‡ç¼ÁÕ³"·ëú§³žiÎ<œ¥N]ÆÄç¹'ÕØ´õ¹åY±ºÞ‰mßh S€•÷ »g:MTò3b2;\#¤q›äÄ3ì¾3s$Ïìb 8Þ]X/Ï ä:f;×@}>éjí6‰5tî·¼{cfoënoe? åÐw ¢ši]ui{+²À”d3X;Æ1¥‡‚ã6Éʇÿ^ë¹²ÜÏPHçÞÉKi€àžÁÄïSé.X¶ë“hr°õî ܯHÉN‘?çÿîrù3ë}ßç®).> ™ÁÿU(ù§€þšlå»x6ðø­;S‡i~y_só_½m Þ“֯װ‡×ó¯ì²àÏ…=¦§-³jŸZù;%}òYÙÜ€¼IyŸ \ÁŒ4Õêîx¦öºŠ«ÖU×4¸ï¼ùd×j‰ðCö}ñǪêÉå5÷Ý,ù–‹ìÙˆ12bOlØÝ n×9qÓ² %²˜iÖX'Ø]S°éÈdŸm¬^3dßuÿ‰A¼JÔ±–¨#,Ï6Ó90ˆa"Ûv9{3 øn*yë¶ÛÈÛŒþ\Ÿ×êÁƒÜÿ‚gêKïÿj®c‡ïÏç#¯™Äë3Ò±°m¦'XïpÆŽ_ÙFŸ€ìçÑ×\ûv|f¼\Ãèˆ7¾Þ¦×Ï¿¶¾ü|V³òw{;ý]àcK’O/잉7³V6g¯©4 ·ÒN¡i{‹^ºu5<}>Æbì–¢J?….ÝØÚ‘”í…˜á¡ë:užÿbƒÆÝ~ÖüêY߬ÿL‘ïʧÈoZB³ i¦„Æd¶œ…h)R`³~Ãò¦%CŸ¼"ךÖÓ·^:Ih¾xt ›T½+­‰&ÞB¨õ 9o8òµ´UV^xíã.Eâž*PW•Þ"œ–ÇD¿Ãt_e÷™hþ^YN'Äÿþ÷Kºî¹HÚ;G8tàxØý=yfÎvÏ¿Œ¸¾Î4~¡Mž’Ù/âSî<³. ¹îÌ·¼ÓûçÒ±:¿/-¤ï1îÏÅ0wý pïçÙŸ$e~f¢ýt´w—N³W;µ±u®çGËe];™3ùYv¶Œ"Sh"q0@ˆ—¥Ëïa@›S[ƒ¾Æü‹Õèg9›>»<M<bþºö`f¹©ðn¯¤$Ið NÌ<à°ÿE·-PØ]•Üðºô~ÆüujM›PGÈ­ˆ[à ìlõlß’¶äZ«”Œ…iWUÓ¯ˆõ=cÀûÝ­“Q¨7^¿Sð'÷¿Þ C{x¢Òšp+¿‰.¼S\t 4¤vû$´Dð3Ù¦YÿS Ó`]é QŽ™o¾‡/oµz§¾ð.XÓ½å(“#¿è÷šït^ËZîÖœÀýZÄ2Uìûú{}ë?îçC'ûi±MÏTì;§Õµá{ëÚ;7&=¬3 þº´TfZ}¾xq ûéü~•ômi pŸR™NÙßóþð$9¾­±°ï€ò¾.qlÎãQE¸äZr53߉ßF®c‘Óx…ŒT¦—fmµÅ_Æ=BšN§”ÃXÛ»¼þŠ0¦;K€~`lfU=e<̺Õ(Ú…æ$Ò䯸û·ü~ü›Jty÷èà›M×]&[oN|çÆR§0†gdàòîž}w`p«Š_3™OÈk52YG¨á53ü-søþ®EU~½eE|kœ]êõg«ë×îÄÞf}œ9|÷¸î‘ÏÏŠdÞí—}ù¬¯¤2ŸÉWž›MV'ôl™Üô«Ók©Ì“×=UõW&×=Óý.9^NЇ¤¼ÏQxò^¼p¨q§©5Y4ÑÙ¯ †¡)ÅQÛ·gËhc5Ó`ý(¿‹vfˆd2F„V–.­õÓj ƒ‘mºÂƒøÉVÆ'÷@õùzÜé(­ìä&Ç­TÛYªé•ĦwJºVÔXW[Snb8ãN/ʯcƒOâøÛÚÛ`}Ok™©öÝkkÓçºY&ÄpMàsϬWg ·g¶8žÀÕ{Ëx&Äç1 ýžknÃ(ÏÁwß~æåGÞ£ÑVè¿ZâÒG5~ mÛåYÚØ¯ÕO«èÔŽßiЯú“åÉIßñ軸å^qþ.(µþe Zv ?ßÅ ÖÏn×)¿9³tvø~¥›¿Ë‰G%½{D5¾J³é-˜iË)Ü9Û4pOöKXsD2è׎”›CÕ <]•á _–}]ãz0ÀzA¼ƒ‡ý×–Ê8€ç7’õ]ùăA¹Â›hßä¾µ˜î‘ÜìÙ22îýÂúõkm°¿Ž¤X´U+O¸d8øÕy.P>ÊøÈcäËÉšã®'yL€¯PÞD¶ôh%É<;P55-’é HïòIïYåS/˜Y4ªØÃîsx[³‹\-쉴Fèϧ—ª§BuýÓû]Þ¹7ÌÌÓA_ëSz/ƒåì¾Òß?â¿MÊûÕ~×þîGs~ÜO"#ÝžK$ ñîa¦¯¡üÝþýñõ)€>Ǭəi'øµ`Æ:§Ît÷1ÏmÆ]î<à;Sfi`Másb"î¤Öœù3Ø+¹y |Öd`ÐvUã…§m?M…\»*gEEÝ ¶óC¬õö5p(l.Û$”÷6Ùò XŸV©Î ™€×™~ml ;‰Ì2†ÔÎ/÷îBšæÎg†= úÚ?7W{rÄåÚ÷ãi¡È¬Š®=€8Rœ@ü.s«èŒ™ïˆpZ03+ŸæÞ&°î5“_ðfBzHc;kîÒ`vaÌ.k‘ ¿ŽJ¼Sœ_…0¾’»ì|öÕ_;Þñ]XÇ£_ÃÓ“<Ããû·Ú]â³ÍëD¿‹“Ÿ’¡)4(³ýL—UðÄ+Í0Éì¹•î ¾w àî8È)° ôï¤yÛv×/…ç¶Å™wÄ»àýöëv•Usíæ»‡ÑW– ' žÇ»¥ÕVW~këYjÜ#ªÑe3mܸ¯|%ÛìêóNF?c&»ÙWš(Æ>rx&–§‘TIÌ]ö ºö3„qòîJ,^‹a¾寷¹Êu9—ÂeÅ3OÀú\ÿ ¸7@JöPá~¹óî_æv–üUV}«ÞwÆýªoõ®“u··š6ÃÀ~åZNw&¾ ˜zÍiim¶ÞÁäθC‹0' pÏ«÷ç?c"ïQ´7ï.GØÍ5­É…6¶xsªÒš€r£'ciE°ÑæW”î\»¥°ŽlÆDšõ þÞ×ëÖ›‰—e§É¡aýÚ÷wî\°ì܉:ëà®`»jšV“oê ë…à(°eÓÍ÷Â&Ùe(ÂVÉ ¸ÿð‡ðâZ`mÚ†}Ÿ,»ÆÙ–ÊpÿæªÞçWÈ~Å”ï îríWd"°û´½FkðT6óйo*ùš6=Õíó7ÜA8öï†Nþ¶†T~WXôÅ –qÕs¥û¯Ž‰üL]ôÓ>‘²\}>œXÀå» ø+n>Ã3Ç}·º ë3V†ï’d§ù¸w@äYÆ„qçÔ¸¸w$kåÂVÂc.v@¹ËfTÉ›9#ƒ>ÓÙí7MŒ é4iÚk.*à“í=NH…_?é´«ºtÀйæ¹aöbÉ­t2÷­Š7’/·”›.=‘wOJІ›g±QW&9å=™ò©×ç">å.k›žšââ× ¾9éæÎû¯rö<«Á½°>Zöñ=ØàéD ¨Ï[îâsá ×<ƒ‡ ö!Gü kŽèdÓÓQê¼Êú:aý´‡6d7ke‡ì¯£ïtá↹'dçŸÀëÉ|¯=Ÿý\ÞÁ÷»íûxîþÚ˸¿‚ò¬_Gî]°§Ò½L÷¿î­«g‘SfáÎåö°†SOÖ»ü:ð×sµU“iÓ–ÓÙ¡›=;´È‘Ì$œu´/ïÎ¹ŽÆ=ª÷iE¥vmòæìÚ\á[#¿þÞƒ“<Ó5  ä ipä¾d= œø`> Ž6²•î]HL7µ&ý©½ Êruäø(dÇ„ k.ó}V;µEUN=Ìz+’I{«Ï2Æ1‰ìKµœ†=§É5ì»ð:I5êÝÿ{ ¾çÛº¦EÀ㳚 ŸH£¹ü$Ïœ<:GÅQß3ëÏ”ÜwBåw¢!Âñ‹ÞyëÏB$EqÒÕ>9£öTC>w#¶¿`Ü'T]OƒíûܨúÓ)ï\¼¸=ÿ|dÏ×lú4¿Þ¦ùã:¯t¯[ÊOeÚX÷ xE2D=’ÿ‡?¹è›«{}Bù,eß»EµYíˆj¸ÌQfaÆ|”ô¿ÿ=·"Ζ®‚b(Ø ÝYà¼bÃ÷$ÉÊû,ûYmÀeÐb­ÒºYFn¾8L0´kVšón6—[NOd 믲Ôm÷t™9„Î{ÑÜÝvçÃÈÿ´n0-30¢.ÐÞ’1™­Ç‚æá:/¥zCüó¯ Êۺʲ·?ù~ö܃„nz'½œ-¤òîSgž>kžðèm?½Š_<å.; ~ÍO¦ü 7œ•½¸¿f¯?YÞñ;ˆ}<óØžqí×[Þý¯ùøØLïT쓉µž;O?÷xôçÓÐVãé>{Ð ñæ¾·¤¤µò{r|¤¹Šg’¿æ~—Á´™õ²êõ Þlœ}7‘ý^Ýþ®õó§tðßµ«~¥û߈QôO÷×6Öw„.×*¥¿üKoëþu›×»½VOFfé»>·P8²<{3m]ê´®UŠ÷Ü Zð‰}DßkºÂ)P[hÞë£z&ܼÁJ^¼ÂÌ#Ÿ}«–Ø'9>0]VL‡ZfºK’u<™ÄÔ> @ò†þv4@ Ü®Xj ÎMë4h Áw‰ˆË]™-ó½ÖóZÜt[‘?#,É“1Jr}òdŠx›ßÃ4Ï ¹fÙwµw”µ›Ï¾“â´Xů›=ôEóâû²?É–Êd¸Òúþ™üsÜ;—C³é5d?£_‹X®!ûÔj¿»w`ý)ˆv|>¾ß§Ëóßy­§ ~çà§Ìæ9doYË^u•þ>¿Í6›^³òÓÚ²¨ b6½ÒÊ· ¦õý Z•ÞS$YªPG²’H;:çý¯¤ßþ->ÇãÞ20à·áì\h€8ƒŠ©›Ï`€½5‡›·|Š(ɰòÂ."ƒmØ|síTˆG`©Ñ€>ù33¡KàŽÆ=ÙðšVSÛÄp‚ï ßâ™0Ê6³&\²k› Ö+°AVJN˺·á|³“>FU[Ö™¯_û4;n½—¦œ½­ioÍÀ ë£õ×HÛ0½ew©Ní{â&Ïä–Ö©¯×?áfSwL¼¯{b§«2Ð÷õîOYÿ_é Æ=øþö0à?ï“r¥'Œû;í+xºìóüП½úÂ|¯@ÿ½Në~?.l Èu^ÍiZË^¿Cö÷ó‡7K—ÎØÇDÆÞêEÇøÈÎtÿãV±ºö¢‡ þuBK0´¡˜ú ÓwjgºsÑÔðº,­v².I…“y,{3k oÇ´qc3ºYK;Qa#Y‘g ¿ÞQŒJÿš(Æî Ù»õsÏ¡7²µï-5™¡‡{,c+hYÏ0¸Å!<¦ôP¤ÛC{00ïI5'߬üß#tÁBè¿ÇANi)1ëYwM¥=H›`ýN³Ç/~­ŸR“½ì ù^þt^û¾_özýW þóaÃWƒ„×ë¯Xü;qΈUÒt÷nc=scZßsqÍ©«Œþõî3ÞÀG!µçd[ž÷`ÊN¤Êwd$ïb:£Èïœ@3³@m–@ðN ³&«D€8{Sƒ½5{îŒÿ.Šjæžw$¿®Šjå)hƒ› oÞ½[¨­| ˆ7 þŒ$U<Ëõ—ÖÓ ñ©´cÕ9^¸y˜ûŽœ ©Ü•âÕw'°A)¶cI®µ§ÄD.Â+…P¦J\H‡š²weÝÃ÷꓾Ӻú«}˜¿û÷_ì!âéË»ªß0âþeû*ü8™¸ýUþÞ› ™‰ìg–Ëë^U.¯´ïó}EŽ’ý'å€Û#ÚÉ»wàãÕ´{aòë j' ^¾W,µ`f÷uéAw5lön×3 øn:{øtPZ·Ä«´l&y24å™ûÎgÂå¬ ›ì^ì*ÅYÕÅ*Y2²·ê=ºs™J8KŽßeè“‹ äá’ñkæ´Õvë…MT9%ow´nT-:êŒn§X¥—ÍÖÛ-šP»V· DZ´žŒûÜÛ{2ýÍÙ·þÊfÊšðîãÞv[é:•›\ËV·æªêè•HæuTâ•Âû oàβøÝšçËï@ðïïák Íg þ“‰¿î× ¾;7ܼžEþ'ïÞ¶÷Ð õÞ²÷ÖåM²ôi“²§™"ßa‘ú3ïÛUgâ{¤/\Õ¤ŒI¥{ {/5Ѹû™Â²3øÏ{‰öÝ ',­JrÆÐŸ6ÖÀ÷ú§Ö¯ëƒJ6|ÃqògxGè”ÐDZÓù3<6¾b`Ð… &>ápíì­;àηj‚»`š†uÇmY×7¹çzœ è&ÇDÿª.Æ\^W>%s¦¡üD/MG^÷k=ÂkŸá»—Ïx÷çi3ÿY*¿ûÝ+£íÍ©¯§¿.&r®”0 ¾óå]áëÄÓÓñÓý×ü«Ð¢0âso=ÌxÙ¯ÆÓþ˜gÓÙ½~ýdÜ1¿¶ØF•ü®žŸ¦U­«¦Â³¦ð ß›†ìýØ\&ò”Á¬ÉÄm§ÐÌWYÛ7ˆ×´í{«ÞYc%ÓÎÓp@UÙ•RrÞ±«Ê7'¼…4êà×§£Mž‰påܧ–ÖµF³Z‹:ÂijMƒ93kÙfV–3&²a÷Þ¼¨Ž¶§à×Ö ÐwF|ísèÍp·]µ³2zË“Ÿ0ý¸O ¿sí3Ò±?뽕`:[Óí¯2ÅïâŸ[3ßîß_ÞññÏ8[®gÿ6ÐÿŽe7 ñŽ}߇X­ƒŸ½ª» ª÷Ùƒ·nQ¾·J~½®Ò—Î’ŸCˆõ¨%4Ùæ2 ÝèOÝ|„4 oz}3ñ-’é|zxôô¬aûØ„qw{ißgeòéûYü2{pƒl·±®ßöžþεšõR ëÝ4Ën:r®ð9³ ³ßõú¬î6¸Ã[4_3Ã|³Ì(¡ÉR>ºyå4üµõôðôvµZáÔ :¯Û໋ŸÔÙGl“õ -ÛSŸ™ñÏ®##åšØÛU³¼gܽØBs‡Ê"9~¥•øiÈ~'ÆþYEûuÌú³5œ_ha>ÉqnB}]íô¸ç&Í-°²Ãåï7¡žQDrêüì“éþÔ$q=op­tïã?»T'+JhL °Žp¥ógÒ™:ªÍÐ7O/ .ÐÏp‚e·®¶¾Í¯'ãÞRœy¬ï˘V …L£*pN"« į‹,À–¥E8U£Oº¼‰4ÀzuçÝŠÔ&0ZÆ×‚–™ß5F,eè[õžCË9s'ÌÑÔÓ“¥:’’Îi99ò†òªlEäZLþìMuQsöÙgïíÔ ÷šYº”8ÈSÓÆÖ– MQÐ^¢djC·k+êk1Ìû°õ;|yç ÿ9,ž}âO]þ%y¶®NE{L«Sõ>SbüutìcA†ƒoíûlc=Ùôi{m†>ù0lÙÏëÒ¥6¼6¬·(*p¿õñ²ïI…2©YªlÙ±¥ÃRмžË`øÞ¼>`½Á}/[ÔQ’ðÙgåS9ÉГO{vf&ccUBÓkTµç˜»˜ †¾-ªfÔ,pϵ¨sâúVAÙuªyt‘äqz8oXð„Hβ'Yp!þì^ÅÌ ÄoñÒ.ŒôG ?óà#¿ùã¹Bvœ®ï«èβ%VQÄl¹Ò®kÿ M…ɧ}¬»ƒÖ¾ÕYcD›ªm6çŒA’ëï‘á{ƒŠûÙŽä©óAŽû=® ¿[ôN‹ªÖå£nîùWùyç’LÀÜ«W?Óc&5öºâà¯fö¿ö¨ÊÅNº™õHY´™6ànù:NÀ:Û¨n?ËvP>uó< †¸ÓâÏ–V.mBmIŒr`wä1­bŽs‘ û¾ö¼§¿³g£SxÔQ’Ö?ÁÃŽÖË‚w^»=¦I}Ñêš“ÙÀÚé4I:÷˜5ì'‘‘Èx ÍäòªåwýïÌÆiÕ;àxV½¦´¼¤™xƒê¯Sx4*]Ó;xQoæÄ{ódŸÃæÂÇ÷°J°ýº`ýΊúU€ãµ æžl÷k8þç°ü>—ÿ[@ö“wï¿¶`¦0½œ¶Ô.ÒÚáû^Ÿ4³Û[ 2¥2=ˆµŸ¦|fºßY]Y*ž‰Ž|¢×ï-9Ë[xÓ,»93É’÷7›=ð˜ß'…éaè›GgÙ¬¼vö¬IÀîrѬg;§¹Ž¨ ¡L‚O6¼öÖÄ\B£°âw |¼mÜÉ}¦·¥Pï®ü&€žO€]űñî¸5ûSÎ]Š‹ûNsí3ïEN}FFîM«&Ììùñ뾆½>‰4¤õµ³bz¶¶‰¦¿{g7[5üµâ g®L«s >aqÇV¾B§¾«×a”ÎuðùœM;ìOÅ‘s¦%•±óæOUÈÇØõZ*óIÌsfýûÁ‘ŸåÇ?ãÎÜ$Öš«/~-9M¯F“ü„Ðá½>žk°~rOø¾\"ÍJ_—!N•˜PÍ ³¾.¹€ž Ê«Ä/ß…Œµ²‡Õ¥êóu9‹œÆÊk¡Ë„øëBÐuKÍ”·uÀ«‚™ :ÙF]8KžÛÜ6}÷½ÞeO'Pnp×uÖ£œ¹+-­qÿ©%¸«zÏìâ™fî×M§›eï$. Í›/Ÿ€»¡ùnm£ê åå¼³ÏîÂk`¬Oç²_5›6ûÞöYg2 ˜ðý*—ý+ýú„˜{è3NýϬŸÀý9 nýÜØú:ñð:"_µ±Î¬i ½î‚ìœ?³Þà^Hm}×-µáõ dÏ`R±Í¾‡ vQMƒþŽ•ì5‚uK£ôáÔ›eß*ü]¶~ß›I5Yß>¢–åLM‹v%I‡«IðÝØŠ ÏU<€iΠ*’4!Èg|j›H…×…e}rÜI¼1ôsKÞ¡Ìr!-ž$3CåÝciÝ[ÏL^sêý*ìá×µ¥")]TVRe®’dØ3Ï[ûçþè w½£î­q4W°Û8„ÏŸWj?…ýø¾—¿þ³ršw²ØYúióipo2ϯ+oú‹w÷çðýnHpÜ›þ ¸·H†5ÞîW‚™fܯ”è­åú÷Í»§¼)ó€B.æmÝ ›¦kkôÿî\zL›QÐb²lwÎuÂŒÛû8ºù†ìaÙ»oµ{R…ïrÿHb¸/À”áJó÷^Rf8{æ~á÷ k˜Þ™ëwËVÀ““ÐÖÉŽ]æ âcÙäö Øiå½LåÇ߬ ûB±·pl3„1Šö6’*tÙá;[6nõùäì#¡é ÷–ÍœÀh!&@ŸÊø–ÙxTW¹1'pßå1•x¥\oå÷Àý5 ;¯øçÃП½³ý×™6Ï##-½ºæÚO˜~æ¾ûŸ¶Ô,;–Ñy›x$z x°»öçy>¥,J]v5üUokËlv~ÎìÀ}ªç;s&juCsTÝíê{É€Dók¸ye-ѸËèg-Þhö½õôÍij¦9øYä´æåà;>.#¶Q<ƒpqmÅß“ûîÁ wÐs‰xÆ„`¥‰=ë“a˜oÄ0Ü+}Vwï•‘²(b ãÞ²î—(æíIÕ~š×2=Šç„ÝÝØÚ©2 uø«¿âÓ—©L3è¯û½™õØ­NàךPß…ï_áR>«¯ÕóŸÙp߈ƒ|ž×þ¬‘?yîë!Çw÷ó–©…1}À÷U2Ì¿ ê~ýÔQ]G^-gY±vÓvÓgÛRçcÒm°q•t÷®YW¡~Ê`N‹jó÷N;. ›ôïV×t¬FG ìB«ÞMF_r—Μéz©^¾¯ÿ­ýȑò£¤oæ;e¾9{U‘g£j‚#yÜ,ܰ¹ýkrͰaÚ[óº³Ú÷ôª:'Ð,kË=ºQ¿90™gÙ‹g5ݼø]’ú ÓµŠFºpÜè·Z½«”¦)píׄïE$7æ,Z:ùÚûj¤'"“×|öEàþDBó¾&^ÿ¤˜éUÇê•3áÞ¨zæ¾O¡K¬Ì9szXØKÏÃ~¼[À'_~ǵgÙN¦µìiñ§íuæÌ,@Ù໕ë”§ÕÀÝâ™)} ãÞÙ\m9m ôi`µì)uN§ÕÕ-4Oü‚’™ýæÊfîû"nNK+ˆÔÒ†Kª€_×÷µ>ÅOÌg. =ቒ„E62yðD7ÜÍnç~Iî;3ËäÀ˜ o.»°»“Ú­yê~VîÅÊi Éø~™eœ} ˜’„FA¬@<‡7>R‰N8{ÒíÜ; ò>OfÇWQ“£}  _É`^ ~øþý°ÈßýŽ¢^Æ7¤2_ö3=°¨¾†Úß šüLó`Ê>i€àpÛ“ÿªª)Œøõžé=½ßçyr'Ýû î£SG<£s|6ÆÐ‰Œ¸»ÏˆÌ0`‚ï³WÓâ–†æépm!ûLÖ»,¸¦ì³ ¬gÃksç@Û— µtÿaß§ùµSá»ÁÂä™pð©deýÖ‡å µ}ºÏ€{„-§ÍÁG°îÌ@kë=ªõýNM²áϸɖдùµ«”àŠ–ÖÙ´QM¦Ø â¹ÌÀ ý³·Î›?~ó—Jq:·#Ðmf´gyZQïSbžIÿ<å1ßÕܽßwòã¯x÷ó“yòèw,{·¥öùÐÀý Ä·*ýZ$3…%1y{¶‡NqÒLiaÌ ß#¡¹×Á·±õŒ•”qÏ1ô~N½>ŸíéxiÍz]º«µë¢:©¦6Je"¤é´¡üZHÆPÝ0ÜœUçÁ£t¬sM¦¯k¹ÉîïDC&‘fòñ3^€žîÕXT;&åMæ²³}€8Ì:|<°[1Lxñì!ÅOjÜs׌TFž>ñÍæÃ$ë%œ}ëæÝ¦ÕðIvŸM«:ýÂÙŸý¸½Þï=?É͉͠üÞËtš6óy²Í«¶×¯ÑæzöÛпÃÞ9ô.±¯€é9”ô¯'&Ö íHåMÒsžÏDcÜš„zòõ§¤é/þb?!iÔ^ lׯ×c€Ú9 µsð3òª¾x/jÙL:Mµ·îÉ3K3Á:b˜ô.×Å¢wxzsaŠÕ2–Ó˜M¯â&¹0ºýâ^þþï—Ò1FÕîdMW«RQÛ›LþÌ‚ãÀwm¦Üˆ€ŒÝÄ•]<Ó¼¸eL܈gÒy ¬.ÓT:Yö¹4ãüè˜Y[ñ™ÈH9ø½ÌÈ5-qi°¢=Á‘ ¸ï„.Å8¹óÀzÿèÓ‚0×Ò—3L]{ë˜w‘Ì3+ê]ÒOô;ýÏEó}þ Äß<]óëW=µ=›ðýzé°­*;|o›òUÚÌ4­*¡ä8§ñ´SkÅ×a¬ËþšŸ™ñÀúþÌO­|‹gzÿÍÜw TÏY¹ŸÔQåšà¾š77/ûN‚;×16(××5¡¥;­†ïY?óæ×5¿š%Ï–€ûìS MºW”C©°žýðxŠgîAÖ¢ƒ÷~“6’µ\›9á5“œym£Àý$´È©Ê‚£hOB|çºÄ]&7¯4Jýpö-I·]ñ÷³é¥³h"zYl½Ió ëOÕ{÷ÊïâÞ')4×Zƒ+lëjp /Oã:¯L¥ï«6>À<ª^:wÞ?Gïdº¿–¬¼›-ó|Ÿ¿r"#þeOß'¶‰½iu&Äg: 9MW)ÁÓ7[šÌ2¦ˆì&½Þ³õLy'7¦•îô”3³£m@ÿìg5‘&’›4ªªnwfÀDØ6¿òÞ»™Õ€²œd·g`Ð x.aÍ»/æ<`](ÉØX…éN;*ÚéÌœ.lêŽÒLݦcµ•ë)WšÙí±¨òW,»W5i-2ô¬oka#ÈQ¬ìæH4ã’U¬1÷*ž5ÍÄ·ÝóL˜éšëZTcNUÝk°P{2îaÇId±ŸÜùuãéÜg÷ŽzŒõ¸•Âþsý9¬ÿ¯âO@ÿ^òÌ+aL¬¥{—ídÖ÷¼ö»dw™õ°ïçÞNn¾sÓ]?;V]ߦÏN}‰Ø&–Ð]eÞY1-ƒv·öÝŸkš½ž‘‘¾7¼í•w}±³Ã5 E}gÃkriZPî%À}ªÞw¥;<}[][ûnÚ k™¢`&Ý«&Áß×V,{=—(Ý‘Ö4p_`;é¡dÀßYd7-ÖUï‰ išMïä™™ÑnФsų?ÕI­iÐoèäÚË4ª¶]5ѳ?5úxgçÝ’¿oìêöÏD,'Ç»?—Ó<_š<óõlÀ× þ×R_šSgÃèsýúë­­›WfóDõþ.+ÿßñ„Ô9ùhZ]?-ì•k™Ï„é·éB¨ëeWAµf=à¾ywùòìµM†BÎL÷½ªÉ¿Zð”ª^ÉuIÖl‡K2<8uð ÍYCÛË6gâ;ÛD¿.¯†‚ÙR_ŽÝ|2wI­QƒŽq1Õ š … ÿÝnEmßl Õ{¸üñV½w‘‘ Èw<…û lj2uèâ²u˜s`ËNggŸÍÂg·ñôdÍ;ée÷À©Ö¸7SÞ¥HÍâ_Å8žñ޽¦ƒ ¿bÙçò>ðñ×dÅ44½ü¯î_çÏ\³ïw½³w\ûûÞü™é~róœQW`}ïR,öÇ›qw@»§Å·íuFLvèdÿu7¡ÞÙXà§iµþ\èßp¿•î ý{=`0W¾$ÙÏÙÛªHfу:²¾óW3jâõ­•Ÿ6ÖŵO; xëè÷Í» Öó¸å1FC.ŸÛºVÊjs?`é6Ô<5ˆŸÆÖu¿CN#XOâ»ÖÕŲ¸wÑ’<=â ¼¶TÍ©mQ¸GIïÀ ûV;t2<ú Ü£qw›¼ºÏ Ý&áØ|üU=Ó$%ÝÆ¡À3 Í“ÖÕûõ×¹ò?Û¥úY äõÒ^ÛÿØÃ{÷çíªŸíí[ãÚ'§Z?®@ö«ñÜä¶£z¿6§î`ý<-8Aœ…Û†qwŸü•c>%1 Á¯ì°ôÚM|S]yntí¶¥ò׬Ÿ³â÷àa—ôÈÊ'[f¦Ó'“¦]õ>·\6¸ç’ŒîÄ›©zO:;‰¤Í´VÞ¨¯pÒ`Ã>[Þ#ÙŒ6Ö°éBêuÓéÛêäËìcº2xI°º0¥µã йÍs;œåJ°Y–’ÙÍpð°nZ=á¾ ³ndÁ§ ›i0ï>m©»Õo>^{éJ»¨¾ëüŒ¤D‹Ü ÿ5pof÷¸ʵ»_Ã÷óñŸ|¿³«^Áwû]’Ïë2¬3öñ.»=°öU£êdŸ`º÷0ƒ#ÛØzÊföâ§pÓ2ÙS1OéÒk>ÓâO°~w–±Éš÷{(ÂuL)N¸ö^¶ŽŸá-ª‰qU“+•24ñè࣒çªÈhJb²´ã"Á‘rðüX&ž¤/½1‘ëטּ Ó“õÞ€h®<¦Á=¹4J®k,¬<˵Môî3aÆRB;Å× îÄ©a2JÒ¿Çÿꯦ˜&æ×Ž˜LìÌ¢Ð7žÜ`tê“&³¾wºÏÉŸ¹÷¾#niˆÿSŠöïZTŸññ‘¾|ߢ1EËqÐòYês˜þ._þ¤jO ).J>®­¥ž|<ær¬é,—ë8H4X=lØ5îpêBöi~Ý0´® ĺ\äu¬'³ÞÃ÷¬ýÔw­,DÍœ§„{kI ¶÷ß0=|yÔoÛˆ™|„EÈK±PàÃ…¯J©u1UF™MÃý©ž‡Ñï?Sq„õ²òërÚ©ðv¬¦jÊãìõ ¨p²-Õ,nB‚øu«ò&t*ׯòg–Üe^l|ô.9jXpç}eF™“.¢:óì¯d3ë–Ö:ÝÙEºÇä5Û=3Ú[§~Ê]äõL¾÷g×éɾïLüµ õ¾né*Iæ†þz–ý5¬=øÏ„ò¯UïOÜß5§v’Ì9Ì;Yö^&+}—Çôyx6­îËÖ; ÍÌRG4ö²•îü¢gžz̯®o1̾OA¿GâÀÀWÏ{¼Ûóœ„eW*³³ï|î͸s%äºÔò¨ å…áã[ïÞa‘g¦Móñ½çVÏGöq¯š¼þgRí/â ï yCê —ã,æ¼kQý©|˜'Bšwk˜®FT@ '+?N~ _OÇLîü ¸'3¾GŸ­nwÆ`ýhÉ!©ýî]®ÔûÜ­¨ÈiÖÖzÐÀî´£!˜ /·€àüéNñ ß~ޤt.$ÄGHã[&û"•‘•çŸËšÐ¹ÁzçÆÜå¸s¹ä]0âÛ$]ÕûúLúY­zo±Àe >ЬËʧP) îsÍ)‰”s¹Ï6®ªÛYp‚·©·3|øÌ{`Ð×ÒÚÀ}Ù^ Žl+j ]vMù•ÍôÆ4Œx†žêäÝ÷5­{Þ÷)xoHý ÈþXθÿ¹[ZßQ½ßGC¾|<å1óŒÚ“…Ú<ºkÙ»ýôþlœ{˜p|f¹4ÈÞójvίiîÓ Û96̃íÆÙ=¶rU›ƒoà~ªá»¶éœhæÞÊ :OÆöh®é[îùCÓß#ƒ X—q?ÞðÎØç”Ð,˜NÎ @\àNö×߉T¿®â¬oàÞéï“•Ïz ŠŽÖ»dH`dä™ìn Íºã¤øI8>KH¡1ðÐ!µ§Ü[»ŸU¾6Khµì!í­ìü3LCͽ¹4³Wµí§ÓWPþ™õ)ÿ ûnEÔÓç†ç–õçîm$ý M\Az‡.¦?¾HAžhПåwC?kB}5Åpõ¶ïc"\&¸|Áã¾÷õüîw@:ëëÞÓ9Ù;ŽúY=÷’Ó¬íÖ$לœjúþÐ|!Ð3åT›%[)ÑLž‰J~ýNˆ_>> ¬IÙµò½OóbuÁÃ÷ïêöÙØ ”Ü‹™äéSÞÄGéQsù­•ÇH;Þ|9 >ü­dÔ¬€Èîg½âï9/"J‘ƒ_· >ÿæãۜڠ\6}Ýl® |ÖpcËÖ c)Ž4ßßfY͵yÌ1sá>íª‚xÒñ£°ï£:—Ý.ygÆÓwŸÃ6­Þ¥Ê\×*½ÊùîŒö¯rN~R×þ}–ýûšø?—Ì™«”÷ÙË»osæ²?Mp?ÓÙ¯¶ÙŸ{'˜™¦Õl+畨ÆßÅ9¸–ë´êýÜgïçÌkwÿ{Öû9ÛUýey4fÉw:ý´U½cm}ËiÏ7Ú²åz"`çQ5¸>~÷¹ïIþªº½9øDL^øNÄ/8®i5¶TK-ï¤3àY öVÕð¡“úžÒ1ç¢Ñ̯…¾/*™è âw6|gº§o51ÍÑÁ›6Ó‰ò‹¨s†\µýÚÛ:¾©6¡úxmë±ñ.x®y5ø¡|­‚º6³:›A¹ÕwRÛ¿#­YÇÏùÃ;zZ)õ¿¾¯¹±_HeúÏ ˜>ƒõŸ oÞ»(ŠX?•§ÏZ'yW/­Òk3Ä.ÂYœö‚rgÖéµ>^8ï äU ¯iu&À$cþ¯ÿºy©u¬˜ÿÇÿ8‡ îÕ{ÀzÒ`¢’Ÿ¶Tyz´}-†9ûY§ÔGÕ»%J–7íÏjÆ]èî\®=»°ïî¿Å3=0h¡‘•×ëò:{b%Y&…F¡N²äÄôÉ%z] ‹Çôi7À·[Z¹½5ðm}g¯ôwd$êóÜ’¹­šò¾n?ÍÓ÷’Á¡GËco`Ö¯O~æÄG£ß¦Xuí¹aŸ°»oíWàûŽM¿Ë–Ù¹öiR¼¶0îºö능Ÿƒì¯õèßaÜ¿å ˆÿ~Läü.vÁÌÜ÷¨Ç“k¿‚ïûuš¤gªI,ú)-j`=aô‘g¬j¸psO†éa@›Dí+¸Û?sbSºã»ínÔê„Õÿ×j ¾×šqϼ›àž5¾k’ݸ§›¢0Üg3îW}´±®2‰Õ•½%ÑKÁL$4€xöÙM«ÓºŠ]<Ú÷µ­ý©fÀkNefµå1gXyôîè×§$F®=FXè-³eºhÉ=(lMä¥~8"%`ë“NÓvU0g&ß—í­ÓüÚ’\†/«ðñ:ÌÑü{Øñ¯€û=g>÷}žÅWi3Oàûû€þU@äËLsÀs)Ëg©O’j¾–ÁÈX÷LÂ×£`ñu0>?Q„ïIqî¾€ÀwúVÉOÕbÛú´zØ–ÊÔ¡?³ μönTíi¯@yÊ’ûݘªîÇÚÒƒ®mÒÛ>£!s$LkëÚá@p8€fÓãzDAÙ›<:—×0±Þb¦¬iCíncõ2kÚ€G¥¹–½i¥à©­ÄGÒ“šÔš–Á(YY·¡ÖÍO ýìC]ÛFfÃ-–[s3±„ËÙ3ïð 's¥¼gÿfѬË4àv1Þl £‹o®Ì…ͧ^g±ßiÙO¿kÜ_AöSÝþsaŽ¿²ÿ×è[ý*gæJ0sÜÃÇߟ9Wœ9ÎE¾"(?aú._™p¹“azM@íÙŠ°ëÑÝ[fâúè#dØÑƒH¦u5¬ôNjï’¦™fÓL<ï?Í©rÓ0½•ýÞO(?“db|ï´x†a¼zq¶ïÈÈ.‡êV¶gK@¹²™µdŸ­kW ”ǤÏ<íú kf6üÚGÄ“\%áÚ5§vÚ ƒ¾ÁΜññúÿ^Ï0ͧ¡Tc­×r*Ë>K[˜*¬'-^Î^o&L8{géí^MÇjgMžYwÑE Iz’dئóÝÜ=~í°×5”Êož›YŸ oÚº*„B¨‚Ã-™ñ_éÚ¿ßú/×wgwÐÑ«z¬ò:Òñ³¸Æó ßM…ÿÊœÊݬáÓaù·ùÅð3àqS¾†éO¾Ú+{k3Öm‡=õñÀY¸Té»n¾óÝ£tßm¦ÙrÏqÏ–ˆsäæ—>º5îþYfµéÑÇÏ¶×ØRcÃUÍß >k¨u2VR9P’àgÊû®SŸ‘¯ú Ö÷Ç鼜™ß'»çÆ\3î§!õ}øþS†Ô×öÓÿÀýdÜïsf¸ŸI2¸Ï¤öÙ›^v]×n›n&þ5³~þõÔ»Ÿa‘ñrÿ×|wAÒ•n>@¼-¤gàc0¯€{ޤk•€× *î{ ,g¦ º•OüSÞä•‚×å:ÖÂe3 ަ å“ïë;B@¸Öóøžk/×>"—0К Ü#¤1a&%MBùlôŠjÖsy–­«¹ËD%/Ø ^6¹È‚é Vù+3Ì^‹©ùM· ƒçYÞ»#}A•ÐÀ]È®iÕÎm‘Ö0Â.ÀýL…ÏáþÌ¿SO¨ý]ÍzæÆ\'Çk×^ׇ;ðÍ`©­«ïé,^Cÿ/õî_ÇA>Ï{ù¾æÝ¦{Xüj@r¿‚|ÞÉú.ï~uü¯Í¬@+àP85V8åñÙáÚÆÖ]èÒ ¬»E•áù6Í µ»Kµ5ôêàÍh‡·€ ŽHÆíyGæÏÌ^Õ\PbõâÄOöKKY”Ðt!0Ê©%ŠÆð¯œáZ¯´¨3gœ*Ç&> H‡€Ý÷–¾LÕ{0Ü„P‹vÎ [9:a}Kh¿Ö©ç â…éaß•Lâo:½ÂijT<³^ñ+[j dŸaw1ޝŸœÍ×þ$dÿŽ*ýWÀý?w©ÌõŒÇ«ÈûAÚ ÝyOEûɸ·a´¹ö½i¦­[L†€¤½d¹d˜:÷SCv»†ƒoüÓ2ô³h)†Ú]6“2©¼£[ï¹~'äœ6V¤)@Ïã¨ÕçP¡¥Pý ¹g8ø ƒ:°²Y|!~æÕ¾¯«¨‚™äÕÀ¦ó×.ÂK=ÓzÖZÊ»/¬o3+âuðë1¢šÿ1‹»®ò×êvîÍÍ“‡Õœ™4Æ`"»bÑn21>2À@Ï0£uó çŸÏ(•é~Öpðþ5ÅLëÙмc%;y&Œ²[6æé„ïúëʤf÷¯‚#•û*FºêÂÀæ?'-þZ‹ÿˆq Ž ÙÚ g{{ž-ónüùVß±ºfä÷ÚJûÄü¤øéÖ_üá€0nZhÝ’ ß1”sz¥“Ý牀~•'£è…ë_ÿu[$…¿†E®ñ«y5–Uíwe0€ìZ”ßÀ£7CßÀ½ žå­•`Gž«V.$`Ç(æ›#GÓLŒ=©\¦"ÙY4V÷üVË(‡¾kZmö½£yLÂÉÍ3§Ä–]ÔÊÂw F,ªüH ì`?jñÓ«ÚÀÝÙ|³þÚXI8x€;ûwØ© €æLÚ>Uì_÷ž~•öÝp0œîµTæ'RšÕÇÿd^Ïô.pÿ.Äó¬EuªÛŸ0î§®}Â÷fß÷R¤;@?¹ó@ÇÐ7ÜÉ*­t¥}ß3'Xï<3ׯÙ}ÖŸ@ÿ<æH†fR{ó÷<Þ{B;†2ü7ÛwéÒ ²ì¤Ç”åuÛÚ€=gÆ-•ÿ%UƾUSe\Ó®ÉàZp¼-ª$ÒDéÞ}«pçÈ¡r ¡¹®}‰•”‰_ y&¾G`£lr=/##­ÿk½{–l‰P6DU·±ªÒîÞVޤöé~ÒÕÚ}«%yϯ«eÊ;tá¹Svˆ¿ƒÔ9xµ¯ãYŸçŸþtC9›\ßaîŸW/½ÓÞzÙIÙ¿×ªÜæ¸¿ÜO`íÎ÷å7Ÿ¥¿yÎÿ•±`žŽW™3X ×_gÇ>Î(I´Ú\î¹™"wõصÉãzyUä´ÃúüU{(U7¯^?Ø3ß×m¦/fæÌš'óhѹ§†)‰ï2ßräá<:ÉÅa1â˜(»^Ÿ6k¸pgb4æÑµTÊ%8EQ­Åçב£ú›¿iˆÜñ— xÕ,àÎáÏ:óষ} þ»•î ܹ¤j0]{îǰþ@ŸL-¯¨‰5B}rÖ18q- ÿçN…»S3ß±ì¯aß;é1EKŸqí¿¶’éyºÎלú ÙŸÁôkßÂ]öÿ•õ¹å1)ãáššË"·˜„*z‹íµTèäã›kžvÒÝé!¿ÞÌtb.OÑÎÉÇû{Ÿi6>÷dîï´û¼~ ‰æâ”Öì¬|³émH=wTe¿G™õ}À}Ζ2áíaḚ́ºöÄV¸åû­¹ïîUí=j¬dògÚØÊ>xôl­ ä\|¾ë¢÷¬…û÷¯µïƒHíÙ^{7³ìºB—$¼umÓñÎ0K <2I2<6O&ôÙ©eoÖ\~‚[¸ð=qW7Ú +•y_êt-§ìÐ?mx}.±~þÜõ%Žó¥Æý9 ÷'(?ä ÞOžð£ÖüŒ;§Æþü“yGÏ$ÇûÔR"#µHžZö+6‹Ð?£äÝ®*ó ¬«!A’Ý#k¸G0³síÔàîJ&öÍÝÞÕ9eÿìIe^߈aŽ:Ã_ÇY’™Â_ª]Ϥ÷ “º'•¥æÑuáî› ¯ÛreEÕºàeü¾ÔÒÊ¡ƒÀxÝɦ·ñ nŒmŒr‹|¥ÕóÜœ|Þ¨Í-¬¦Í4pïõ²øi`e0À1Ëÿqs=#ï ÚÞ~zxf´¿î?—$ó\‚ò¿þç¾<å1×Ìúuàã}îþÝ™0EV×Þ‰«Îݽ[ ¸Þœ»èEV»sfR Ö¡«ÍF_ÅDîkš?Uégék8Ï[¢3ÕíšËˆŸb›Îu™GØ,û®¶ïþW†\at³ìRœ³uÕ†ÑæþO+mL·½¾÷{_ 3Übow<¿ÏN‚OI“93ÙÆG¾«›_ƒ7Ö¸^øƽSh0­&[¦á8WÑ®mêç¶Tfróý–ÖPÌ4»Táà½ÿ*b¡5V×9¿še2àÕ½Opûg³´`€ø4§vr‹œzXù;ïß“º%^±SÑ~>Vò]ÿœäÝ—5,¹Ö¸Gæñ5•¦2™à÷-­0ÄšW¬úÙ\š{¨í»¦zièÏ?âWÙ2_±þQpŽ¿ææn°˜;XO_lçÆÈ[ÿîwhÿüÏ{1ÖèæÝϙ߀–¬tcg°dŒ®ñ´'×:]~O€iiMgÛ Ó“V» $pP¼Àwx}at—:E½ýÇ?r˜–7Óœj›`ëI|ç’º†›¸@˜7 .(G¢Ã:í@ÉÁ¼¬?ÇÆP`Ä »-­­e?-ªNý“ɬGȲàµÀtyÔêI‰a›Ïô fŠŽ¢ÑìtÙ±t¦¼mE‰ì ¯YÞ¯ÁúFCê÷Uÿ|Ü_Éf^3ëtÜ îI2 ÙÏ|÷ÄÚ¾û@ÚT=3d8Kš›•?¡ywš (ãñh†»_e>Þ3jº(ª?SrsæÕ\0uk)Ø–õpaŸ7hþ{ol|ÏÆÖŽÏÉ™.¿Cy¿Å–ØÌº>ßuü°ÚˆaÖmcmV~êã“ßfÖômf5yàNÙÓúk_±%z‡=—áà{‰uµË›:…¡ËÌ}ïÇØ.áÝ“H£lF nlC¼aÉy‹,§ÝM²ìi]µÑ% >Êö¾§Ï,öS`ÓÛÜø;–Ý5¯xt²_œ‰Z÷²Ó=ø]qËsröë¶ÔÇHõ3©L—¥¢Vß²IîüLÿ:ìòÝ*Ú÷Yü'²™“×ÔO›#ï´xó×Ì5Å%p|žÖ-˜ (çi[[‹gZï¡KKeŒ£Ü ¸aëÛÖ™-O®½¾ÁŽòúˆRR«ÄþÑ‹£yÜêsŽÄŽÕpóÜ*4wî€!ÉîlAËÛ$h’5Jh¸°†ƒïšÎ¢±)v}[cÑÄ£¶oKk?îz!ÈÙcN( a‘s0AŽÛ¯¡#Ãl…=ñ´ Éóy}ÊÝ·Ú‰V!·ÈáuªÌ+û5p¿ëÿ¤2ï2úÿ9¼þ}†ÌüŽî”ëgôç æ ¬_¯ç·Üäì¿yeÙ÷‹\Ëfµ»¨·oi ü+¼2ïk²Ú{BË90ØAð¹ÃôëͲ'œñ ПÄW©óê_1âáׯ³äç‘·˜§÷3ÓfÒüÊðÙC&¶A hÍÓn–•kÉ+Wò»ÄÙèBàxKh`Ó1­®5]áÄ’Ú@ötw(¿!>= 3mfÜC—tþŒÛ‡k‡àvw‘SZPZõ.ðMyS@|à>uNÛ²§)Œ™|¼}«Ó5× ¼ß·ÈÁß7›¶ºý.=fnOäåÐ9Ô5¼Ëèÿ‹êØ’¢S?Ÿ<ÍqgÚC¯UŸ·«þVöÓOôñߑǻ¯Â ÁXFUøpÿ<—eW ÁúìY\ßò ¸}ºÌ­­õd{?‘½áµ…1]Õ„!˜ÇQÒû×ñ-ExÊÁßqí¯tíw`ý+à~¦5×þ+´ò¿Š­¿ÏiÁŒLmsêWüL€ ¤nƒiCö-êè rSVz›sÏYvÐ! ²á~ EîÚUâO.<‡ ²íOå“á1Ǽ§ÅßåÉ\Yow}æÞt~ËŒ€ àž Q{ë+³Ûp>Ó;3žýwÍÜ2Z|à»z÷uý’Y¿ÊŸq á³زA<Ðžíµ®.i«L|@|K+±K¹óî-¡Q Ï_;–`í¹{X­]kfy¢šuÿ²° gUD/Üé¤ÓˆYâ9¹ù€~úa‘€Î=ÚÐ s­»ê=^A“åçs×V8s•<ÑK'Æôã+‘ð5(Gm¬eq'Çð“6Óç0ý-ÏÍ›î{ч.9>Kpÿšõÿ¬™ÕÅŸáÎßYîÆÜÏ ü3ÅÕש2sbÈ“~ÁM&õ°{îÜw¸ª„`M›ij›ÂÜÓWª)“õÀPnB@á(Ý}TÏ %†Ô4ÀZù³Ûµ…=ÓVÛ–V¶1Îë‚æ.WB<ƒÄe‚xŽCÑ‚§fÅxñdâÕA.Ö†½)ªñ)÷ŸNV!»À=¯f½9&©“oîL|bg"Mtç'|i~ˆ3³5v½¬Ì>$F“#á“켚^¶\§a×¾Ÿyí§®ýkàþë“d¾럧Êü¹(ã_G@^ëÝO‘Ì —{}÷ìqÞ΄™Ì,ͼö¸[!Ý&Ñ®aš3K@Ö¤¦ðN9ëøë C wÞìr3ô­\ŸyPø»H&ó=0hp¼kúgÀån?=ƒ)O¦ Ì~,7Úç,WêaFãÛŠzBùNç“ç³î¾ç>@üU"M–~s¦f­™Áˆd8*™øô]fsËý½Ù[ÝÞ¢\jðä-Aì$x!; }”ë|Z\ýº½ëœ¢ƒ_÷#ôîÌâ¦uU5|i„ã;ol–Ç0îrðÜ…“-£œÂŒ;o¬°&î¯Ï¯Ã"wéKøòÀ÷†í¯N‡9N!ÍŒ€¼oʳ´vjMïó=¦üµ_ô3ÐøóÕ¯Ñã«–Ó¯—_¥¯¼[ÃôYŽûü°4OÆ:Oè¿#¤¹: :~1 ûûc¾«×šàÜùµê«ó×¹Äp9 üåÄÆäJ‰’‰1˜Q&¾ )—¶n3írf4|JhÖpÁ‘}x÷Tÿ¸ÞÑ^&奠 µ{Ÿ+ýpúëî\ìüñÖ4µ»ÎÉÒu9e©(×ï¾.õÈ]Â…¨¿çÓh‹m‹Lö‚'¶ä¿¬v(›È¾^‘ãÇnÅ­¨SeäÑ›Œ®·E2guCÿΆ¸Ë¾¯wÍ Œ‰,[1ߦ؆ï;d¿îÏ û¯wÿ~gêo§ƒÿ ¸%’iY×¹tî¥ÓŠÒÐs5í—¸‚ Í“_Þ÷óÌoàÎ_ÜÍ6Ù3§ý”_¬|€ò Ü¡–:íºù“GoÍ÷Ï´$f¯šša”¸Oýº³€ÝžØùr{7¹î¡Ã~ÚœÊú)qY»uU)]Â%ëQ±»äJ¦øÎ·Ö6ßÞž-•ß$ý½9xøu†ðî< °@÷lF>êù¾”80h¡N›t€å¥Šw:õîa¸Ãs«DgPÁe­ÄQ{+4ÙI…G<ÃEÜÄ÷ÄD¶5Ö!Íú4˜$M®‹ªñ–М°˜#i…e µ—nQ\Z L›ÕšAT6“úqG÷†ã½äØÜ‘ú„ƒçóìzûöS ãà~'˜ùó°Ÿ~Ç¢únîûo©nÇœz%S‰dëÉô6gvû9w$Äo€ˆ|¥¡þÊ8ËøÞ©·ýí„?nYZ¿J¯ïæã™³›J»ë`šPwãæi'Ýùòi|‡#ïÌõYS£­C‘„Wöòg&}à{ŽÐù„.W:¡ÿÌ Zœ}Ë`:[¦w"éR]°Èøn‘Œ²™°òÚOÓ{0Ð2în©hgå»G×nÖ{ä1–4!¶Šö½ÙwÕðëy°ï*à÷ôw€¾²¹ö9q·U¹–$øVº¸ìÚ\;æœ×@#•ˆ±«&£¹öÓ23 ÐßE2{ï©ì8T3þ èŸÊøWÛ¼^rÿD÷ ×»~.ùÀœúÓ2’È_PÌ­ÿ>äí)ѯôóI‡_‘Eódçdâ§µL¿<|eȸ/^}J{¦{Ì©LŽ­14?’S%¿‰y/É\?çõn|dŒ­¤ L3ÐÛÙåà;’Fð­ðF¦`U­K´ ©¼W<3/[)êd˜ÎNéí³ ªfÑ´EÈnFþ*›²>íø‡Å½4—Ïë2Øp2”5©ÅfhÔìu÷@3œàÃ͉eߌ'_ØàþZlÓÆV÷iÜäz”4÷$Ç3°– ²€ïü:Л€[GÒLüu‚û5¬?cÿü ©¿ èÿ-€{Úѵ÷ò.1æƸÌYtúÉ”gûöoø[PÑlHÇ m÷Œ—¶ú×°¶½7׬ßB[?ج5òØì1ºêзl&¡Š3Çývœ ©­õÏ/}}þ°Ñ;àžƒ=9¾¡v'ÕÄ;³çgJ̾7‡Iû>ûݱ쳨A?g@‡rvZ|ƒ{“g–/H°Þñ‘ÑÊwNü©’oVžÐIå4i"’á:@W@¸ˆ•†ãjßÊ{½ ^Õ»ñ‘v˜$n¸å1º¹H|ß«"•I©STïÎHkx…äšð=q“»95‰ï¶¾tRÌý5¸+Ïþ¹Ç9ÓÞ-­-ñmYΧÙí¯Ì²ïwQœ'¼»§a‘_w>Ö¯cÞÍyýrÅÁ3aøxO<ó} þ}à~¯sâÇÀÞSÕë!Š'=0ŽùŽ'“2»Pç\2uåOÑd˜®Hhy@v •Z}nL4ÜêËa—”]Ã4ÛR‰tʯûSåãg<¬üÓ\^£¿ŸÛØ»ªz×eKõ÷‚øîrvÔµÞ:§d±娭®Ýá:;_™U%=±’®_{‰x†Ù†´œR8¥ôîzÒp̬‰,½…¯¿‘[éîä~Jm¼q<ËöDšYöÔ¦ÕæÝ{ýL…ß³hžU/=1ªþçøwóažô³þZ°þšqp¿ŽõœŒ{ª¸€µaz>ˆïeŸó¯lŸ4$öã›ì”>£ÎßB6É~¯G=×Ä/b&>e¨Ü¿-¡ úyn"OóëY½Ôâ™+hÖ´ ¦õù¬–âaåÙ[àÚ[³PvnÞ=d€ÑÿuNЙß*|…7³– ~:R~l®ÈiÌeÛwÚ ëyÜü=ÅL&Á#›!†¾í=ÆL÷G*Œ¬Ó½X¿öwFIÄ;g†Çq÷ußL ¤÷;8ø¶¥.¯ØB+Yïn)p'&2ëF›ò˜6¤ÂÊ%Ù™îÓ±¦J`9÷ ³ç…\3ô?+haÀ`‰kŸÐûÐÿ*ð9ýïýHW3TŸ f^ßg€žé¤4‰þ” åu¾Í»@ü;âÞæ>Øñ.ÿ«ýÌb‚¯O„HªGãkEã.€îðÇÓ$Ú?éY®ÔuNý"«ÝŒ8p¿5sÙ[ÃwÇíîfúg1®ùXl9’6àv–{°÷ê ÉY8Þ~‰ ý{è¨1Z!ÙÌu‰°¤ùà™ c× KÎ>Üé½Ì|T^{¶Šcãwpg ÜpW­¿Áî|½’Ê\ƒø)A¹Ê{ ˆìnQ ù–ûóìfÖNsÕ]¸ßÌú åOËNÂé >7®iF»ù.øvj ÜIYK@y3ë-ªi¿uðf¦¥uíß 'Jý@78rm£>˜Ø[—Ì?UG&s¦ ›ì^É3 /9ÿCô(¿îÇÚÕѱžÛâz©êÍ—Ï&Ô˜Y[éîšäÉd0ÐeaÍÛ®ÚRœ T¢[‡tZdºÉÕ#×öà|€»‘-°Yª½YóîœeÌ©BùuáÔÆ ïâ>[­ 7·ÀÞ§û |‡qáYmWõßy퀛¾É;„ÚÍ;¶/™Öò‚é,gg<T4pŸ0ë®0½V·uõŽß½ªdúTBó™Qõ5Sþ®Áô9dÿ.¬?%1¯’dN®½…1æµgM—û<9z~æè}nœBš3e} ®:ñ}f×ÄØ:óÎ׫4ï5ü¦Îy*4Ž6*L¶^þ¾=*¾VW›@ï33êñTº³ôvêÎsߥãw¡R[`üDÒvμ®^êò¦ÉÊçõ †TB’Ù<öjÅ÷ÂЋaR·@œÜ˜€õ»Ç ý,@<Ð?ü‚à Idd ›Œ‰\`>½Ý}áÖžÖ;à¯UÑ)tpd÷ª¦½{É6×¹Ä=ByŒÂËdÎ@Á¾¯{Y<ÿû‘¡šøÕ@H™õÞ÷夼G¿[N;!^xïö*x|mcíÌøÏí×Ò徯 R}®÷ÏÜ_ѵ Õ ¬~JeöpûO5îO*œÎõœFÀŽw€ïWÃ~wm–ý^ÇêW²Ï þÏÆ uqRO%ÝÄV2½ê'ëUA|§µtI °UÈ;·Ë>e6SßÀší©@s£*Ï´xøõ¹Ÿ9„ˆÙwBÍǘ DÓQémø§ðm< ;Ë*­Ë· Å¿ÿû¾áÉÓ¯¿jè4nÒý •?“dÌuYÐÜlõ.áÕ—˜F0νk˜ÚÌš©•Áagck˜Nn¬Í›^ñîO è÷\ù¹=ˆ}]ÖÓ||ó¾¯X¯%4ÿy²™'û|w›Ÿ„ï“_ŸÂ$>ÛSÑÞŸ|ƒàæUÏDÿ¤z÷ž‡¹.³å@®:Ûtš Hëwå´é"m*í4ñî&Ÿ`<Ý!;Ì´cޤ¥2á€Uý~3´\:hoI*‡øÿÎbï×:5ëSkŽ hÒt:Í©˜ç=ÞÃñ€r¥5»J~7ʇMÏ'ÌkE…oaÓÉܳäóiRY$4|†ëªùÏÿ̧°†ÿ‚s}TÓÖ=y†càY|Sðî–ñ­¿ØºjHîbܹzÐ×3HFçìåšÌz >¬¼¾ uŽif…­O1“)4t†,Ü¥%”ÙaÄ3tš$©lêãד2üàHrÀ×EZîÀïc¦¾Áz—45›ÞPþ*òJˆr]ÞÖÿ'Ä3ßä<}î·Ì©?eÖìäö©¸'èS>Ûgc!Íô¢vRÙ÷æ¸ yƒø@s”—´±v ¥ÚǾ@·JrqfEèNÓ§œfSŒ¼ϬÇÈfn Ž ïÇ GÎpÉpÿüÏIðX7×ÝÆz2”gåSó¦çšŽŒœqQB2®ã#'?è÷"#èåûíª?©nÚŠzBös¸¥²Í¾ýêì»@é1t‹jÂ\áÎ}•4Oó7ãn{ëÚÊàH ›äÚ$ÈÇC¨pæQÛǰÁ¦U·çh ’›Ö» ÓÓ´ÚŒ{sð ïPìü§–1o¬uÁ}Shñ°Ôͦ õäÝâÍv릞Ï?•ë³ßý¬_ý¹l4ñWLüÕ~îòa>³¨žtóÁâ_³Â¿ÂÊyµ=Ç4W=ëÏa÷÷¡ùÿw‚&Ÿ´¢r²Ûûu?mÝ1vWOð\¿O*]=+¼ø ‹L ò4 4L?¹ÿÈ`„Ý€~.š€Që³i5ðv¬ ©U½gr06S :Ö0µ]5М璒+ï,v†ZX‘²8Yiö‹úż…Ýni7ªŠy¹¶1=€K3úÈæïåݽý;UmD6ЉoÙLksôô4ý„ì{¦»¬[W8qOˆä\žæ¿W9!;Œ³çµ!QXÕæÔ•mœ@ó+àþ[U2}_ló[@ö+Eû„ì-dº3¡ÎäõÖ<çL`ËN¡9¥2 ÓÛ´Úu`F‘®_g¾ßõ[ínS?«‹vÕ{2Êý­µÍ”½5@ç¨`ÇI2]ÛÕ{—©q €Q,)\Séî™Æ ¾+àï*™öÊ+õ|‡?Öw¦ûUü]ëjg½›¼ÞUM¤îìúøY»µçØt®À}]/ºÎ ÀÝÖÕžÓpMŽ¡Ùwa}rlZ1¯öÝúu^®5¦Íë×’5ŠjÊ`Q û®Ò 1‘æ›™?Ó¢ÍE3fÝ`ǵ4-­e3k+Ÿ•43ï•(ãcfíTóÜ+áøùÅÅiÖÅL!÷»¤¶w>Lg®úò)/þêYð÷;-û^ufðÏSå(é¯ùà×öÍÏà/èr"ïë»ÔýgRä?ƒÑ¯{XŸ™n_[{?“å<7³þtyÓÝõ•zlo-Ýå1{–|~ºûþ;£¦M«ô¿’›|ͦ€òù,t€ëfÉå U:b¡Vº7/®§>â™d?÷Òta“ûª]ÕhH"QÀ‡g:•%Û¬×ûÓŸP4:ͺ0ðñ€~½Ó÷‹SÙIƲ™µOnÂt´Àµ<›M»R•mbõg]‚ÓÁySíc¢`®3=x•è•_—Ògû0ôëØ:,Ò*Ÿ@ÉÄJž¼{@üO÷ªþ,4’9ó“Pþ®n)"™³PéŒ}l»33;ËÞ]­çîЙ•´óë{òÌ‚ËÙò QõlÏ~<÷º4°µ ¬³‘”ßC`· æ¸ø}uâ :ìZ¬ômNm±M«õlr­®ë¯f™‡‰Ÿa‹³g%“æÔ ŸfåS`z—L…S £Õ§Péñ-õAŠ39û‘Ÿ¹õwŠùVÆK7$%Fckd0í40å§¹üô˶¯ÛÇÉpecÍY!מŽUm¬ú9„òoœ†ÖaVf=¼» øäÌĮꚎ˜L†Ìªj 4g}"´®òºvœïÂ'º#Öì yèEþ¥œqZT•;· ´™ïOzb£¿Ê‡Qúó.ßÿ¾æu@ä`Üß·iþÃÍWî¯H°ù~±Ô\³³Â­kgøq%úÄ´úY‘ÓÏv¯ºäÇùš›¿ªvBš5ü ͧîü:3>R¥2¸%:Ò±“gbrU cnŒ°¾Í¦\^Á×ň!A×BM &T-­uÌ“i‡ÛH˜c_4‘µ$Í}üÇ?Nîœ[/½6IªÖ#ïAlíQ}gúåÔÃD˨%.2ógd ¬Ÿ™îB™]¯ÜÜßì÷Ô‘ ²Õʧ;ó.IæLþVxÃMíZ?å4DUfq/žù|ÿ~sêgÛÿá×é1ç·³—çìŒûõLKK°æ,PfŠ8«ÏÀÓöB°ŸíøÔ3~´AÿUñSÒo Hm&>’Înoþ™$ÃoŠÇ ?诚xmi Z 3Í&Ò>±f [ùݱ’{•’¡9PÙYù¸÷|ÅÔÓ÷àgï[X÷æLj¿›CØM·³u5DFƒouí{L¤ „’õîlÀÚ'çk[x•T­×W ë´±ÆÀ*û¾Ö·êÇm]5'>Œ{RÞñÞÒÀ ‰åŒ0ËuOi(ŸàHß›}7¿%Ðf½³cÛ°þ…3ð}ñ+n«ùîV3'+ꮉ„¦å4¯ÀôùƒìWø‡Œ|‰fë¥>îׯ¸§;Þ`¼ëJØ'²~áÏ@³ÿ"¹²xþGnå· ð¦œÊ¿*2ò§ß5ï^§„Þ«¦r>ƒò-Yyµ¥µJŒìß95÷fÖÎtïNÓ¹M?ž|ÇG*bq``1“uÍ Ù[õކזÓ8E¸ ¯°~-Uø%+&I2‘Ö°†ìš6e(Ÿ‹£ü‚ïÜ€àTئ5ñV)1UJb~ª+,³jWxwnNþF㎂“}¢—•qÕµ³hœˆ_ @Þž?ÕÉ{îõÙÀå˜q'p‡—mVïš/ïÔí=aF†õ*µfWHŸË{ Í÷’gžËZ¾_«ô3ðý„ì'p_ï¤2_Á÷œ3§)yBö]¾„êûém¦û"fèéZÁò‡„F÷:gЈïúï°ªëÙå%BÕœù2èÑÁ·÷£ â,µ9®-;U8Þ||3ñg| ú¹3'¾'­qOì㌘Œa·!>Ûó]ð;nW@§Ù´(ª]™ÔGÕC‹ü÷1wæL fZBÃc…IvWúBÄml©Ša’Á¯T&ò˜†þ½äMŽ'V²ý QÀóØÌxå4k¹Šùxwaà»ç-Bš¸ó¸ÏÙÞNͬwÓ\ i²{#%¦1¶j9U0#wkè0‚#ñÝAºaŠxÆöeO‚û|¿8ékpsp 6âU¾†ì-êõ_%Á·U÷Ë=cÜŸ=_‡<~Æ‘?×µõ*œ.0Ÿ¿JÇÿ›ÎO%¹¡s.@)ŸšÓCa ûT°Ò(@ü«øH€ìµA¹G±óU^ ux/Ž’aè¾ç ª>P>[žqNÉ®‰ä¦«—äÔÇ̓ǖö]Þ ¿~‚ü<Ñ—wáðež—H_Âî›$Ãw ´…ÿž9ëm3]kÌß]À ·Uuêînþ]g@F7°r BÙÞºT½ÚR“àn0™¯hLØ9«dÂö¤ZÆÐÀ½s¦»ÎfB·üUñÌ.¡q¹¯W–Ó‘‚-³‰R¹ÙÓŽù{ ÜO•öUµÓÏ i¾¿ýoÑú4©}¦ÁÄ^|v£žVÔæ§g ïÜ7îÞ=‰üj®d*9Ãù®3såo! ÄúSÿ–ŠuòIóÊV  Ð3 t_ÞŸ@Ë3Ú Þà=ö»óã3mm}ØýfŽ;×å” tjûÌŸ ž³gÚL蓟VÔŽt È>õîîñOÐð]€ÞŸë÷ù.øü×Í»³ä˜[<3 yfž¤SÞÏxÁ Ÿ£BTc"™IðšV¹_ÀÊs†;mkä4ÆG"ãL÷ª¦U@|¬¨jÖÁ£‰_ë-l¢w|ᮬ¡Âˆ#i1Ì®eoñÌBZ]Í«I¾»0º§wP8õWÀýýô÷¯»gàºvMô½/q˜ÀU(ôõ£T™'6Ð×Pþ‰bþ]¹ËóÁë¿>©mú ²¯Ó÷¿ý7~~Oà{gÏý ·~ »Ã…eƒøéþ°; )?.$%Eß™6ÒĹ‹jÎ%ùÞµ¶~¶¯%C&€>À M0ö¤ úìÐ[r¤eñÚtÔ¸›0†~öªªn÷É_O;pQüâ*à×s5¶Ââ/°îÅ7«­ß†~*ìaqÈ4à|îâÉ7Ês“èS37ˆ‰DG›SnX­q|OÞs8W]CùˆdÖ¯"Y6 oiMCùsM/ï@<€©³kfüOÀ÷ïdÆÿ¯{¥k×z¦Ä´àäµ?á\¶¤ÄT–©Ÿêv­ØPÖãÖ¯s$Í>¶¦á{¤2žÛ=ä˜sGŠp†[N”¬ë]ÿ=} ;w¼yôV±Ÿ=¬ý¸E5v¸yBO~‰FUbôŒ¥;Vù}u€ã^ä”áJ’ÚÙÃ,{êwmgª »e9Í—³Ÿ†æso Ü“0sn3ƒ#÷„øŽ³Ü:×y°`:C 8‚4ª² þûë¬pZÏ5'žÁÌúÚ¿ËõºKø8…4æ‰Ù½jÎk| 7¿†]ÌXïÀGÖ å‘t®íåÝ×Rs*R¡¹ >º)$+™RÌ$•¶ž—ÀÈô½LÈÆDÑàÞû{ C¯áøµ®ä×´«f°÷¤^qç_À$ë3ßÞ¾»¾Q}. ¹‚ÔŒ™XùUýO„<¦#ö9_~î™ø.!þ§ÚU÷¿.°xg =ן”.}½F¾?b•pí{œS_M 5¯ï e‰Œ9U@e~Ýã ¯ ¼`=¶›Èi`ÙÍ„I¼Šöõ?qšPe&ɨ’Ês¶XÙœ= ¼Ã"“þn•îûDI »[Ýža@&+Ê”Ý'©&y½O“à¹ÄGxÃs½ì9ñ€ûŽÏR°äÖ…–Thø®(¢§Ú›/OÍMƒò“Mß•è /&po@ÙUPÍŸÜp×<µ2þ.)E&þ,rz-;¹ã³«À×ýU+j³ì-‰Ù?I8ï$ÿäóœ€øüî˜*ðæàÛ•çÜKD£. ^m¸w>zKªz~¦á{ÇG6ƒ.@l=!û\¶~O1o]{8²>P2eLiý„M·ÿ8jì6ŽOf½»Ws$<ÓKûúyü‡#o[ªï|ßò¾òißCáëçš^N.üTí3“áÁLª±|nÉ]¬pZðšØM`zæ.\F_î?¾‚æõUÒ/ξÓß’5ï®~)ÚM›AïÞÑÀ1­r­áƽ—῱®ò_À÷Ny‡!ŽÒ=YìêÚåÉÌùÇL¤sà­ŒßóÝ;ñ}–14ɯU™ÍlKÒš›­7ö~ŽÊ<å1Ÿìí¤b/)æ“q×Ú²> Ïò5N¿©‡õSÿÞîS1ÏšÓ÷çõë÷™ÅÑüÂGüæ×Ö£?ßL&1z¾Î~y½Ÿ)Ñ9{UÈ;pŸõI]Þtî³Uì=çІÔL»ª‰õJqzý„ò¶ðÒºªl¦Yv€,‚™ìÙfVçVþL{í•'-.àÎ̉—0ØÍ¦Ž€ÿøGnx­È?!þU“«@_ðÚ&“à=OÄä’Äð€yæï•ʤ¶©•s <èÂë½`B]Ó‚ˆ[fÏ" ?ðÝa€pY+OkÐÛÀª'Yï.+YÿMõFúóÏD=ÏТaw¸ö5\YGÈ «õ÷=0{вÛ•"*<Ôh ªÖ ¦k˜˜†\ïéÝ{Òˆië ¸Ïä™úÀ´jŽlQÍ™3aå.¹ƒïݽº¯•>>'',þÕÀýŽ¿æÚ¿ÎyU†å’ó¡ÅTÓ¦™-ÙœK{ø#ƒÆÖ²ÓŒê(Ö0MÿFLŸýw.¯õyw€Y3î ÊgrΙ€¾ç«y“B3óà¦É¸SÛ>Îí ;µ¦uí3Ïgׯ7×îÑšv'kKV¸whcoy‚øÒttã)•9ÓÙŽw6˘wøMµÄÈO&rš)¤‰¿3µ *æŒGàxkß9óù+p¼·ì¥FUº]“-[¿¾wøxSe2ˆµ5U}–÷‘ò¾Ò]”Ð(£´¶iÚ[×r–¶u•;æÂ0z`ÁçÙ5ï^ï@êg‰1ß ‚|r$“Go$÷d¿{–°¨—ž³t ®)—{ à »Ïê¥~uÁDüó¯É¢¡8i±Ë ôáÝ;ð±sÜ߇q—M·°Éíq ƒGï+Ê(PKa[jÔó™(ìr e3N/Ž1€"¶AeÈc€²Â˜Åj31 Ëî%5½Yêpö‹}ÑØš¡Bý)ÝÙC0ûø¹4³l; ²p<ë˜Uå,`dÅIøª+üˆCÉAÄ6;|¿2ªÞAüÓ`ú¾ï5õ¸ß¥}ßçÁ§¨è>hòµˆå5wþš5¿{üÊ¿Ê9}ò¸~Z6ÓK²¹(݈åtñŽœ'F”z¦ù¸—ž‡ëŒlÍ„ì»PêTØŸ‰7ÂMÖœÎë„™6qž¼{÷)··=³Þ .ŒP÷_+ ×¢º@ü©¤o J¸ó“_?×Ož{—¦œ‘ˆ ÙÛ–n}ýÖùvýŠS/ìN½ì~d3=ä8w1ŽS7?‡b­È'›J;rsÿ=§aþyGé²õ;êL5ôídð\D Ï·¬x&sÉÖÿ·±ß,;à^«ëÚ§3ºM¥"°{ç»3¯‹0áM§¼[½„Ð&€~jÙ»hi‡ïŠg¦Ü%\{óñ¯Øñwa÷ŒÜˆ,§_ýsô uû%ÚLæ÷wšJ¿“3óÜèùn†Ìûr%hñßϤ?cóß±œîÝ]O£¼Ö…¿ñðÐH&œ¢Z÷ª]l¼˜J:/¾YÑË)ªIêK/wF?:u-Ó~ê{f×ȈçÕ#¼éXI$Ì´†ç ß[ïÎE*:u}Š™¨Œç“éˆIe6t²R„ñ§?÷-¿‚¯×(é¸.¾ÚCú tž€é¿ë²®œ†%€~ý—x\”•ëæ×+­áDæœhAN\j“%æÒÇëX- 13¾ë`ºÙøÞõïgÚ÷× ø+aLsÓ•?µï{Zü™9s&ÁŸ•=ý××™*×G» lNÝ’›+.¿}—÷‰²¿Ú[gr¿öœs»ÅȽ©.|pÌÙ®€d%ϱÿþßyÕ=sÆ,öfâÙ§`(‹ByxëfKQ·g¨ÙA– ?ZNÓÉâ ß;ßýšqoÖ¶+“š;o³i <:&2¼ûzáÔe—›³ß… Ê{~¬•ë'¸oÅ|k»[Z#¯ßŠù ~ÚfÚŠö®I:“÷Ê2m¬g<€¸;Sí¦È0£Ùú†òý;©½%7Bó|-¡é<™T>¹Þ®Ö$Ûtaç-i3÷µÎUµíÿüÏ@ê^à ¶C$yE[u×1&sÌ"§N¡1‹&ì;†Q£¬d MÆyÑ?éH![F>ž}²=w=}˜õ™*“9ö'*ö×Å‘ïAðïoÿÍÚÍbž*çwUãÏô»C…ç¹òŸ¥Ñÿå_rbó#ý:(óµñô.©æþËã¦òÈšðÀæ“9—fFÞjÜM™ ë»6}½wAð®}O [š¶~%¡qÿfž®‹HÃô$Ûâñ $ü1ßjeÌ©- < õ™ ù9-¡AZÓ]}¼*=††a%VÒ‹šUÒ ¾wL¤ùë êBÓŒ;b3}×å˜õ|w\”Ù…=_dñ ƒÂ€îpÜÇ (g"Uèƒíoí3æ×Xl£Îç°nÜTL‘çö 4Á°FU|jˆ¯õî÷˜çrš³ÎInxîW *×öÖfåÏpÉS~%¤9å4ó¯ Я û;À½Yö¸ŸŸùÝgxŠ‘Z¿~'IŠú|qŠ‘ÄD­®ƒBQVŠ“Ð¸ó‹šIè7+ßõòáõUÕ÷<@[fÍi€Þ©óYߪñ®:;DOÑÈUªzÖôŒD ü”ÄìÀ}-»%tš\3ƒC9Àõ´Ÿžƒ®@4ïM®9"2ïùU'¹¥A-¶Ñ±DZծÇyÖ©ewû¸Ü丛p5AùÉß·ö½;\;+¦KºW•×m¾¿Kx–ºöhÜOˆßëÙRÁŒ²™ØU#Ywùx£„‘ÇDrcÐ$N*ÒfâÄ¥ðëëJ&¢1›z/^øNsÇZjªL¶¬gx%—S~”l™¸_-ŸA~ÖuúI7ꉿN | ž¸nfú "ÙMú¼¦Ï ž>3ƒ^Ûc÷í[}øô3ù¾T¦O&˜þÏFfïNÊÜ/ùs¹TÓqwj°Y“´[QgbŒ/–¥Œi—ÐÐSÆå««p|‹\Àzñ*×+ØÙôü5 wg ,l’õRßÁZª€wù¸é›ƒç¹<Ë G.—zód`;à­WÈ—ZÓ’63™î\м£Á²p¿BÄš)æž›7ÂÄɬ7d@ôE\5|ŒM:ïXy Kló­uÉÇà¯NLGrÐVÑS³Ç5>ƒï²ì䵿bÜO`:õÜ_w²^í9åP×àûJ?x`ýÉâ÷'s½Ï+–ýNóÚ?Ðó$'pï¾RÎ=y÷佨Pç Yûaÿ ð2ï”–Sš hXë'ãp ¬¿!-eï´ºXwhÛ)7×’*ü…•„fšS÷¬•†˜Íâ·å´ ¦m²<¥G=»Õ=¬Î#¬õÝ窞>Ù2çQ]üÓÕÓsŽ›óî¦X«ßÖ1tÙÓd¬#éq`³ƒ{>ÏSôÂñ(i¥{E¦ÚÓðók[TOæ¾9ø>Îñ¼ûì!Š“ëéhÈÓ¢Š9µ-ÈάºÔ–§‡g»„NU“òIJ¯õdÐilÍõÜRØU;,Rº‡;]¢$åÜÑé}Ù<™)¡¹ŽtìvÒdÙMÈÞk>cÐïã&B¿þN}ç_è ^_å+HýÈÎ?“8¯SbžÛ[ŸØdŸ3÷sŸpŸð¯ ²?¡h¿ë+ýDaÿ|²æµ¾Õä‚W¸vuí[r3óg€za»ÏÌu_ ‰‘€ìÖ² ©“tØÝôü\çsM¡a”¯Í4ÝØ)»TÑwèdJzA |SÖa¯m’‰÷Èåéc`mK(`Åt—õIZf¼4Wq˜4A<½Õðt@2=º ;·ó.Rl°@Oê<àiç´Ì¦ËáF+ɻЙ:Ï’ý­Û“à~=ËJvšel¦³7wÓªñ Ü÷åܼ2ª|߉=Î5OþzǸ¿Nˆoð}Š^‡]6tîw÷j`Ð ýWý,ÆšÀ=¡~õî ö¸÷ùø0™G´öÙ}m˜n  _n>À].8ÄÑ”wuðÉ9Ùëÿ÷ÿ©2÷ƒŸŒû^øsÙ[ÐÒÑ„ý¸£!YÏ/Âãܽ õΘH>Ö·á•Ïœïô„ȧº½Óc:ZñLké•f»û¦:ÊEßoCö6ƒîûŸ}´aë;1ç<6»Š}Šöî‚/÷mê$Ïþ,išÌz¬¨ÊfÖm©iie؉ÒÁ'ï7`óY8Î,­ fH¤Éžyî™0£z¶?>+Ázƒxã’Ó®*I×wÌÌlçî ºd¸ÍÛÆj6;ÿ1ö•êý»ÁŽOJ”¾zÅë6¡¯Žv{–ceÂtœhxn}ÜŸƒÚw»Z_7¡¾«Ñoû~ý­ñÓ—ÛD;þ,Hè3eÕWuÁpÏ\m oÈîO.Œ;•¿ X[®± l7åT½; Ø!{3ýŒÅᬗÌ&I/²ã(Ý‘¬XªX }ö¸ÇðÝžVW­±Ñ¾ó˜ËÒ…(d¹$Ý…õÉM—wO¶ ºÃ•:?-Dfδ¾œÛ3_ì}3Á= |æ¯ÛIw©òZrùæÕØÛ*ˆnx= øÕvXÁzºWís}ÐIû=Ï›Û\ƒÑ®jb‚{¯mú ²7Ìí”~•†Å-›¹ƒømm|ôÚÎr¨¬¿Ò”_u¸ÒSÓäµÎþÎ2{§_Ÿ¯›¿î!ž»±ø:²¿ýÌ@Ï4+½ÆwÙÜ\<{¯Œªëüì¶xÆ„–f¯3Ô–ÊÎxiÞŸÏ„¶{êùÔµ‡·V²Ël¸ OànL$%M1àºMUÛÒÊsýÅ%¸ðN0sgZië{ÖŠCñd õÀ`Ve8ÄþÓª±;£÷ÌYkÕVÔVNèßuK ÄçY¾‡N¦p*fÖD^vleëõÛœªÙ4C,á{Ö+ƒáqØtB!y_èO؛à ÁÓ]ëç˜ÞjøçöÐ'ë¯@ó^WôYšÍówºX¯tKŸñâŽ¯ŠžB|„\‚Ÿ@üÏÆ WJôs $5°2Gåä?ųziÖ6õ$߸N»ðfšY8sºí¯ÿFuµì{óñ0ñFCîBšÝ;m²áÔcfµÔÉ4›UÉdæL¶?sÜ'pG5Ž¥yw`z¸v¶T¹ž)Ñ4¼.ðpᢿ´æmìCBÃ6ê&×ô«1aI°;âAü‚]½ôx„u¸d§ÙdK5÷Ê$àŸ¦mQíhWÍŸ)4ÍßE¾VcOõù.›¹‹’ìW<Á÷=pÏîúnôlaFW¯ÂzûD£ÝïÙç2˜éXÏ•ÛÎÜËù)íeFK†DÇÚƒ33̰”ÿ&än‡Â}å1,=»úäã×y¨ô+=CÙ)ÈIó€%bÎÅHͲ;J»—tòî‰)œ 6*ùfñÏe3Á=Ò½¡üî&{ü®ģÁh/uêTø—Æ;&2RþÈoeRØq·iáM 3{fFÅŒóS…AËL OPfµGÑ8?Û€õ3²í­]Õ}«|×-Ëé(ɼëõ«að¹Ûg[¯Ÿ ™u† —wˆ…¨†í¯ôîCùòµ½€Ø51Ñr¡‰n>‚—ty}Œ¬&±Dû.ãnÂzßå*€ò{|d f’ ÓëüÅ0ÊczâÀ’Ô Ï̆ö1œº-’}œ†K®W ϳ֒™¤5‘4°FEòzl¨)ûY7-³aIÙ$2ë#u*BÒ¸ŸBŽ3yžþL?S_N~½·d}Û:_s𯗸rIùD£Ô$zëóÈÏOì‰g}ËK:£¦¹ù3ÞñLªiλͣgN÷ŶQõ„콜ªzuük>$"œVÃ÷ C†jßïï}fºÇ®Ê{ïHÊVÆs»f=‹Dš"y9i tlK'­5Þ¡â[à od$fÖÔF2J¹áÚb½zJ²äY€`a}’dôüg¡š¿†õ“®}רjQÔé`|1ÀýÝ”˜¨sˆZ£¨ÏSޟ絟åPŸfÈ|÷¿‚õO |š8ÿ{ÃËÖÏóéy»¿ $>.ýOö³ƒòïÔ65ìæŸ*yŒ˜€/n2Ð1îÉ3ü<—¸EK¨•)ŒIjM‡K"Ù s?³eHè›û®Ð…KDb"à#°1Á}†TÊ´ °+Û·n„ì(®xfg sQc½yíBg´ï,ùkzÀ1ÀËnàu\x³Ý ÄÛêPîÜͦÖv,s*Ž…µ‡ž[èhK ^Ö#Ê¥œIU•Ž<Ò-(Ö¡NëSŽÃ$~Ã÷=æ50} X[‚ò:¹Ü×Ú3gÎ%Ã!ÞѨ¦!xƒà]³.,fËVŸIóq ˜ˆßPþ”]'â;à¹D^žÛú)(_s>XœÚaÓ®4/ÎùÉ`Fð½ÎÌÚÁ6¯BhžÄùx€;¬dþšèÉiîä›e`vrím½í¦S½-œ¸%¼¾:ã>ÃÖ·ÐE@¹CùHbþå_¶¶Œ„ùàx š·>m£û®¬%kZOÞŸU,¶„¦5âýW£ã+8û_S\Ã÷މ|²ìäõ©‰oߊù¬é£=Õí-­9¹|A;¿¬9‹Ÿôù¾äË×™,ÏšwžÛC&¾ýذ¥ûLþŒÕ² Ö¹ê6dïþlcX®{S3ëÞÿèWÌ©w hŽH•íiW…Ûî¾Õ€òå[¯ÅñOo[sí3óš|üÚlúIêSéËŽ}yŸfñüN¯êÕ³Ð;}=Fy&}Ù¿ÂwBOŸ{¿dºG½ìºÉ©ž½­¿û÷Oöɉj*Ⱥ”‹ß;žHhò,THy¿çé{„ú×mlýjë† Ì2µ¦c%M…g ÚµnWµo•Ï 1Ì,FnÙLëæ;¶RŸé¶6žvÍS‚#ý3ý¨¾>ówºÙí21îÈ7§8:¼Ù¶÷ò×ÛÀ<4pGA¾˜¹s PTéZNY¸ t˜Í@ÂL›ÄGj6Å¢ pÏ€!àÞÚ©”`û.ö²§äí¬÷ X7 {à]›b9ràŽ«9Á³–ýš‰o8þZ:òÚðÚë}õäÁŸÀý ‚¯k‚¾£»š§k~áM†—«WxÏJoñLÇ>¶Êÿ´ºžóý~ÛÐ0ýÔ¯ï îÜÍXE›> ’f"»lzgh4Þ™úÝF¶~çž½(„g$ªâSùÝ@M#u f®e3ÂÓN€‰ú¹Ïn‡mS©Ÿ[³ò;/î\AÃ÷¾7`!)õ.ó¬®yrHa€ëh¶ ¥Õêë=Ú˜íyܦϓoéHÛL•Ê0„pOûé„õ= ècæu»æ)óšÝ§Î¾³}ߣko»Ëýžý\>Ÿ¼Š&Ýðå=sâ+|wYù¼;>aõñl³kå;b’÷(¯iýšds§8yw”îDF:së}Í;׺±O]Ok{m¬±ŸzÍ·¶iBvÝné¹¶ÓfÒ'“¸‹§Ñ?¡5xN€ò?ñCþßå×L?Äßo<F\úkkÿW”FÏ2s®´û\XwmýûÖUM×Íœ_9§iºc¿úRù”¸…Dø‹üdZçyúK9\¸¾>¹Õ…Çcí6—n¥éÑ»ÏJ¦€ìþëÚ3°Ò*¨†øNo5y%¼ÞöÉзÕUSi ¬Ñ¸GéNf-ò‡L€8ÛM¥­wë`Ê; ¿uí2ßXZáãeÁ ˜åbÊ5…IáB¼d-h|¹X«¶|oÐÌaô=þõ¸¡ù̽qVAXLÌ…wר„F™Û¢ÇŸ#é!Gç„t_')ßu²žå8'ëܰµÕáÍîOKh%ïôîòÜÙÛix=E/w’®ýyžËVÉwm»÷mü}õYõàÄ!S’£§å´%@Ý` îˆ îg2LTk/œÉ#þÊy¢nžsR{œõaþ.Ö²Õí0š­$nà>[Hhœ`=ÕÊÇZÚÛt^JKkfŒcøæÎ·‘/ß–Ófg9ÂëÌ-Ý|¿¼Óž[È{l®ÝÐÌÊìB¨¼÷Ùg:ûpoÍ÷Y·tÊHdåwu{G(¶-u uÖyܯÞ2˜ó¨ú»; •Nö]ÍÉßïÀ½ÿÚŒ~w¯6XçÕù½ù-çûjøÎ’»­I2ÉÉ|Ëžþ¾Ö™JöWgÀsg ø¸svuî;òÇuG4d3öÀc€;œë¾Jw’gÙ¬Ç#Ë®]õ¬^šù3ý×`Ý`­t½+Źr¾ ÙŸ0îÏ#¼Cæú©ü_¤ô´îçŽe¿SÆ?ëÏ÷ÿ<÷ýÝÎÑWÙó䚯“8ª©Ouí€ÂkyLö“ϧwZf+*\SÒ¿?­“%x…(ÎÏÚ©¤Ç¤KjOÛúPW›¼æ»÷Ü*vôŒ‰ô½'µ=ÐÜtšd±w d§Ù´)Ö©ºÀz$1¹ˆ(¶aŬ˜$ƤÎÀGk_2õÏz …Yïá*€û îÑ †­§DÚe’Ý;ß]ÆÑLtäÄ;ôómrÎtì£ztꬵº ÄáQœTF¹™þ>þ¶´öð£Ùâþ~QÌs›‰>^þ¸‡%™ØU©¬,$Y4!§¨¦ó:X†#Ÿ°~gâgäb'Ïì%M'è¿‹h<+œÚxú:þÔˆ·èèψw6ÿ]Z9ËúJe<~ Ú÷NYÅ0gzLƒx Êq8p<ŽV±·µ”óVÿF*™8C2ŒôsȼMxw>aâöÖ畱µ[K­¢`•5ß“àÝ&€Ò-›#D§yîi9Í«Ÿ¥KmCœÒÊí©²ZïQ‹*VS÷6Ë}úø;K¾mO {¶b)²þ”ïöÍ=[¦'»¶>VÝu¶í0ݼ)~•ÝlšmÎvÕÖ˯ïüN„Óúõ»´øi2Ký}¶éhH;’ªØXO=! ÒÖŒÄwXö¼kæ-Ѹ› ¯8ÇÌ~wÝ¢ qÃ1÷ €ýâÉœ1gÈ®ê]9 ’˜U {˜%†ì.¹“Xç¤Í´1TxÞY4»`˜õвßîŸAügÊ>UBñ*?ò.ó!ráf‚ã“,vå#| ŸsüçÛîþÝÖÕï—+½;uòSEN÷Ç`~ö•öýŒ¿|räw8wÙðûRl¥Qÿu‡ì=’ž¼ø ŽœZ7™rÁtòaÒŠ*SžíÙ†Á)‰(˜P|ó÷ $¸ Ù·>}.•ëµ)s^Ëάm§< <ši M|äÎ&bZG€2?u¶OI—éæÅñÖ\O|(eM:ßá™ÙƒÜ8Ù?{KßÒGæ˜cZš™÷§g`¾÷ÌQËÖí„ë®3Of²u–É­‰3B—)zéøÅ‚ »jÊÙ÷ÓÛÀ÷ £l Üù ïÿº{L€1U]`Ý€{׬{󾋳l~ËE„hÙô“f¶G…zÌ£ÄNaoS©L|fR#G`åóI5XÔð‹H¬À+>²dx&Ïü™©t§}3ƒ: x+Ñ[ÞÞ×Ô÷G˜æHZ£lzwäÚ4#\iÉD³ã¼‹N;aHf"MsóÙóá´v·ò8’D7î3gyÓ”â4ó ›©²³ém“ÅL,õ³x×ügLäY±„ ¸g]2pjSl§Ö\ûsÏ× ¿ôæÔ§9U½ûT± Ðÿá˜f8±ÍÙžkˆ$ûYßµ ëDp¤ì»Ä‰TŽ=Ù0Ê` ÜÔÀÊ=‹» 4rJàûúKÊ“<ÓeL-óûí_”‰5Wª_«Ø_+ ®ÿª×r ¡Ÿd·oûjN½ÎY'JòKëW¶Ô³Ü‡õܼ?/Wzù|ýwàõ÷!ûs+9æªÐ¾›-úndd/ÜaŽm1é Èþ@Ÿm:á¾µõN¥ áûÖÑ©ûXÕ»*vræ 2¹œÅ\k-”5ÎÚe4žÊÖ˾¯ËYL™áº‡•5ê¿›‡æ½˜9ƒV^«+œ=—>`º£s.¾@%':Só”n¼ô›bQMs^çÆè×_½0‰¼n-™àï‘„w93=À8ß/k¨hðM”˜Y=áòM»Š¾™aIˇþá䘠àSÐâ¿^ƒ3Ö4°>COëçpGã΀¡YíW¦Õ'¬ç60Ü-"º²ŠfðÓË3nòªI4 ¬õÜÍ—‡cÄG•N£Y.SË.¸¿ZÊgr-Ù@?Zy,oa”¾±o.p Ñœsq…È$7T¼Zšƒˆkì®éÊwã&¯ØvR·gè…I1G.¤Æà¸Ö+i‚wOÆïbV2EZÃöÊ'¢þoÕ>ÛgháÞšwïhÅðÄÓ¼+÷ëí ÍLÍ ?;_÷¨Ç:Ëa/öºªSæÕ{Æ@ûl›M#¤±–«Å6{2ýTð·tçšË¾ŸÝ«³]5gi—7ñMù­-.Üoà‰Qz¾¥Ò=7eegÚUí±'ûïþ®«¹æ»\œ»3Æ}]U-IãŠENÆ+ ßCœIË5@¿zŠm&Æœ°û©ºý“0GŽu;C‰ÝÉé;z ß¿–Ê|¦kÿô¹ÜÄ?)`zn–}—Ëÿ Þ÷SMž¢Ö|¿èq.x´GÌzŸ"Om¬°×³öªšÂ7xŽ5wKR¯~­k÷ñµ¾-)‹G¡žÎÔ^¦Q.?Ù5)_ˆ,'YïrÿÒt~N¬«ºãVÊ4sá[2.R]ÕäÌŒ¸OLdsð=<`HÐÊr*)¯¬'V²/Á¹L«)§T+2ñ€ÙµlàÛCUé¹|·&¾¹s/â1øjBÖÏù™Kcè–°ÞŒš8° ÷3'‹štKwYðÀë^Þ1ÖÓ{JqvñÌ™€~ÕáÚ•ë˜È~|Ù2dÅåO¿å7*ÔÍÔWÆÓUåSõnèmÔäÉ[´ 5gˆîˆ%âvL>~ÇlN•¡dÌÆÒ%ÿÚUð‰¡“‚]@m”ß|Gm1tÏÎ,éhK+Ô¸ ¬cåÓh›5Ÿ0ЪC[Îçßb›Y ©ŒvÛ¶¥ÎA‚òë÷Û¬6Ÿ r8õñÉoƒlÃ^+ÿhµ:"Î×µ¥;€û=gf¦ÍÄ:óàw˜>ÛIùm‚· ·…1“oÃhË{º{µÓâ›#ïÂ&{bMn¥ûL9mµû{ô󇉄†¥Wæ–Ê$‘F™Ù^ðt•Ÿ ³iN ãzÈ@ŘP y\Û(¡ |ç¾Ãu¦ÓÌ„ï!er•b›üÌ$Uf>~Ê'Dî ²zéq—ÝÎX÷ õyBåpt¬‡ŠËñCàþL þ^ˆäg@ÿ®]õ¹êýݦw+œÞYbøhË £¹ÀOrl8Ùë¶.)<~5.læû™ìàkµPW 1TpÈq5I”í¿Z^qím0}µÿ„B¶Å"¤$Ã0é¶€;à~†490>`ÝaÕÉÐGfÃ+µÏXN|\—-³t‰•JxÖ#×áâ¥b¾uó=Ÿ`•±î øñ$¸› °.»Ä5¢ŽF+v"̶IjçvŽÈÁ”õL ·l&çRÒ/p׉jî×9ßZäÄe:ó C•?ŸAÀ}Øúl¿a èä²xÜROàÞ [•|êfÎpƆÑmU*³kèmˆÜ¹ö¸ŸEQg:ûuŽÍ®\Oú0ôÔÇ·´f2î×À½‡ *Íc#8vqR¿®Ã¹¶S“ÙžI|æÂÄ›'Ãö|ÎSü‚~ÞÉzV0¡ñå1ðçÀ& 9sJòâŠ4"eéL›Y;Æt‡Ññ9ðéÅrÚ¶Ô Éß/Ø}n¤ƒ•ÄçuÛìÛæHÞ4ÑÆÌÚ‚ Áeð§âŸÇßv ŽÎ{¶±¦˜i&¬G)niÑÙa¾Ò9ÛRù½)Ù“à§à'b¸;ÑK/§Y¶UìÝ;{øÞ¯Øm¼ÕN™Ïé\–T ÁùöC¬4pÐ ™3d=Ë0Êu6ÚŠÀ½`…L(žYg ^¹×º¶Êµ'=Æ’¦ Ü×]/kB-{+./ðïS$ƒ¥u×¾7…wrêÓ5w-’ÙusûwÒffÀÆDV|>|×÷u/ã›öä•=eÜËŸ ]ÞU¾ŸÍð©^Ë~vSi²ð9í¸°ÂŒ~=\¹*câòÁ¥›Ðuãé_þ%ÀÅ`ÊŸïOíŸ`w÷«=gû«˜@êÎwÏà¡Cû‘]‹ªÚ÷Htfˆd«ç'—o“k³ã îcWuÊo²ûI”ïˆÉî^‰7h¾¦ˆdµöÕq±\—¼«ÔšL;Â4›×nªL,G+_; Ð ¾[%¯Jx]öѸ«?î뽸G,‡ {ÚQ’üÊî ¿ìþÚ'®j2“/Þé+‘ðd.•Êt¥Q A¯i&®]ÈËx ܯ˜u¬®ä´´¦³\æƒ}j«µ ç4›¶úÿÀœk:®±SPz K™õðëQ· ¸9—¦ã‚Af*Éþþïá×{Êžwª‘Ú)û3IÕh uXyí¼@yÖ“‘°¤sŠP·­õy8fµï±–òx†<î¦Õ–:trKwšúK\çâLàFû\_ÏW7PRp¯Í7Ay3©_Ál¨%Ñçÿù˜aàW %tÿt¢Žìr ³`”–ÙpÛ´ÎPÈ–—4ÈÞùiá~Žª‡UüµgHLøI5U[]§hgß+ø;Àñ4Ôž!’-i;ogý“ÆÖ–B%}(üº:õöEpeîókKžÛêÿÞô|<: ÓY\˜øµE˜ÉkWɳ"›1Uf]»¹£âYr¿ö.|—ºr[y*ÄVÉ&×ÞY4ÜÝgÆàÝlÿ»Í6ïj÷_g¡çYuù¬÷â ”_ ÏWt=•ð|0ðnjûW{îí¹y„Y¤/ó”©Ü ?ZòîÐbÝæ¸è¯Ÿú°üýßß@\V¸©¡©ú–ê}}¦\b¢#”Õ|–àõŽ¡ïŸ%·öpóšVg²9ë|³*ݹ¸8¾?ÓÜ£qŸN|Ð{00½¯›^ÕíÄ;¿Ö,(ÀÝÁ 4ï%)é^°äÔ#ñàÎΊ·™±’Éœ@õZ1,+Ÿt^Pk)°ƒÁMu<7 CGRv®| ¸³Δëgy“žÛûÖcç4²;?A ØÚÖÇäÁË[DÅ-ŠªvØ>Ay3®ÙƒѲ7×Þ£3†²Snz0°3åQŠË.·ˆegÝç¿þ+©ÕüÒ§|Å™lzsê÷ >‘‹fýz2Ñ÷{þ乑Kýíßc”B9¯?AàŽ²–š02§ýNVÞóMsªú­†Ÿ³f@EHsÍ…·@%0ýŠ;6™ëÒzú^“l™Î&o.(ÖÙ/-†áhgk3æ2ï¢Í‹ò¬þZ1û žý¦rÌ}Ô»FRîNm¾l9Ê• 7þŽ_læÒ*(>©™ÊÂ…’TÝèÈòwy5ÓšÍn†×ü§âY©|¢çrŠLóX·‡½ˆÞý÷vÖk[2Ã.y§I6è8Ë@4%ͬŸêjöÀ ’3§­·²-YÉt÷@ŸYé è;£ø¾'©³¾9òl°lµŸ.¶Ÿ}¨§¤bçÝÏò£=…ý.µ¦­f@ð'©G7"ª6wö¿Û“àl…_™vŸ= ±,š?n#]W‰Åäªx¦­™1 š:ß 9aëmcíLuZ¼Iqéõ ›á¹Dò«1¼"¿Ž!îfÖSÿ”¡)1Q¬·þ>I>Ó"<‡á›­©Š¬¥ÛROö½Ëª:â°Å'-kᯠ‹§4¥E2égÙ“3 Çã+èR·~ÍI_Ùa;E~W®ßéø¯l©Ý{½dK-Î|w†BNƒò´®æ ášÐß~ žÖ9¶–­Ú´ÆHƒNgo€n‚ûN€¢}Jh’?ÓN-@<ûäŒâ¹Q(¬{%WfÔ¡\Ö•öf)‘ÇLµ9ñOÈÇH_Ökq=ü÷Tõo¼/‡þÍûOíÿ³Y‚Ï ð»ÜŸ°®¾úR_ÏÜ2º†¹“M§±õqéî 4ïô˜>éÑòmë<õè_‰pµǶ›aÀÊÚ‡#]£TP±\—™‡ QzÐÉî³E5KëŠä°Ûh Ä7\~½m¬æ/ɸ˾”aXZ(où 3AÉ¢ ×¾Ö§o5­1Û d)Û/€ÿTêù‡)¶IZ<[:p iäÅc{å–Ü UÂpó€Àz7ö%ÍÈ]~rräk£ªT©1OfÔ@ û h¶†TÓ* B , ¶µËf'ˆ¿8zä+ÍÍGB#Üâ7poÖ? ûÔ¾÷ ¥;ôrJex­NaŸ‚Aª©,]Õ‰=f¨ÇÜÜÏê¿zãìçv~¦õ°3!r1°ÆšÜÏÊLf]†žs˜Þ)C ôž*ëd•æ³…¶ˆ‹r&ÌFÒîá¹e7‘¬$C&)Úîß™”÷‘Çœ¬*{ðq¸sÕí±*"ù·[¼930νœ¦U--.òwä Çϧí³Éái`ÝL³m£»ÝlleRt& mã/RÖ»wÊ;[îb•é¸g¶ðiÕ~ {ÿÄ2ÁÌdýZ$J²%OwyðWI8צUm¾Q··,ª!x{b?õ ao~×þBüœ œ±Ðš¬—_÷ ,ãžl™õ»[àŸïúî<ÓĽª‰• C¿–èã™Õ •5漇ƒØ5móÑÁ7pã~ªÛÙŸR+®Î+ùyÓ¶äÅ|QßÀŸÃ¿w%4¯SÛ?ËÀùN›ì»±•¿ÒßÿžŸw žÎüû'w¸vÓfÖO ñ€­±Œª'pw`šKºu ò\d$ ˜ªÛ«šö¡‚bC¦4˜NÈ.Ÿlõü\[ÓéòæÀ´´f*ìßd¹ôïnnLŠØ8c€Þ0 “1ÕíQxs¡[œºy,u¸k]MÎnøKaïºõˆý\÷‹ßYÚˆm<×ð½B䊖¾Þœø°æÜ*HtÌßÄ›RúU´Œ¯}«Š…š•ïB¨ä–òh ü§jÛå¬LJå“lwT¿¾ïŒ;À]øcÙÛì…G‚õ}›sÏwÀ}vv¶¹ðÊ4ÙFRÙë9à>M¢­&H©]{¿iƒoz™o ž!«Û÷:wÈ×MÔ)0W΂Ó9gÒ?Ó||?V›¾«Ûï"/›¡¥ÏãÁê÷È:çDŸBˆ=Gv\ÖÌý‚bˆ¦zÙù3æÓ3»²›Ë‹è!Cñ.{êåšuw00Íp´ùi%@Í(g m;l€ÛŠ­q—ß-­3Â2RŸŽ†ìðÄÓÛ)7­õoà>….9’;àÎ>›wïFØþdzÙ2'?]ÞÔ¹1 çòW¯®Ø²“ ï¹—Y Ôêí3Q*³3î˜×>q7Ù·š_"5L â¹£…ÌBû¾@<ׂ6Å ï.pGû®0ft{Jšf@äUÓ|Ö°=wÛÎ~I“ë¯ëê¹dÜ ë1.þ3^ü³gõÛ{’<óÎþ³l™w3g¾c™ýÌVûGž’¬û17~*O“ÝaÑ—ßë½`dù~À\à€æ«4|ïüK‘:¯ýdèïRkŠ Ð÷†T¡¶­¨aÐ[³>óà×û,I¹Í}f”ï„bYyf<¦9uÍ ¸´Cn]Ⱥ@ )ËZƒ ®º³VdÁ;9^uûúœ×>y»W‘|×Å´ŸÅ÷Ë¥Ög…¡ÙƪŒN…¡‚<7j.ýZ¦¢ƒWã®'["Ȥpï§5Ð-§é£Jtຑ¬sOØHÊk=wÔ½|JÉœ‘Ÿ–-ìDà³µnÖ'Ÿ½­]üÔ2›ÈfZsôSTÓ@ßY‚”"M lƒø=bR³æ.’Ѱ8-§fÀ·ý·!;ÐÉ0¾¹ós)Ÿ¨P¿enöS Æ”¿¯ÏÈÁ§Q¸‡… ºÂÁw¶º0zýŸuÍŽw‚{+Ë=s ””ôŽÛë½Ét Ó#°‘O•kZlfØŸç%-§ëû·[pÝåî=lë øÎêQÍOëó. â©à'V2 - ^=G#›ÆÏÏ-5U,M©'©}×µ›c³³Ô £ÄOE~ØÜ›zNÌÇ$9o°Knš•oaIË]æ â”РÚn^n~¸l’ØjyïJòwÎLkåUɯ3³ÅÙ§]õÎâJrÙ1‘ýá1sd&Ì@îà§J¯jsíÀtg‰×½Œ³NÆÝ,¦Èf2×Ój{Ò(FLî{³ïìWàûL|ç¹ ÞaÙ?ô7FÕW©2ßÍW¬íž\þïºGØ=è×|Róéq¦r=š¶«PÕ%Pëg¯Þ= ¦œK·1˜r¬¢À Òià!š•g?\¬m'åB©xÆE¸íöï+³YÏ ‹€[~bø¬¶>­Ÿš=mE][&t2 iÝöLk .ë#¬©µ4£ ¦ÕN´ˆìª+B~pLIªiµº]÷Óæ×)ÿh•ünÄl“(à̤öµÄúÉk©J¯b>Jtõ®ô<ÖÌXÉÎïB¨S+{k«œg.õ.¡™Ñ– N¿žÉ*7×{ä†Ý©ð³+i0 if0,z’¡§ü&Q¹2t±2ŸºùSfÓMÃw@F—Ë0̋˿ò[XgH iLÈN^‡£3+= ò´œ¸¨×M«ˆd¦de=»ç ”Ó$3‡wÑÓC¿dgº¿äaïï‹ÁYº3E±ñ` ØH¶iÙ {;á2î‹Ä6ÏÝÏfî»w¶Sä;w¿ Íô·ÚÞ½4OzçÀpûºüLýn„í< ¸ù„Ï*¨×úõs@2×÷«£¼G¡ž¾[%Xòí”°'*Dàî9Ówj® lÃÒk/¿ðµ†ûWÇ Ïl™´¥:Ç«cŠ{VªšÒøÁž%ž"ÙY|>¦Ø¨³Þ'ãÎìz'¾ޝgIQ}ù9@×Àz¹å×Àý§TéßÌ¿ræ#þ!Œ­Z[?¶u™è È9,YéIºÒ¨k¹˜Y4òîÝ¢Ú/™ØSÞæès×;å2 „F£g3î-;Qû¾Ö[V².»){²ø©Uï uÖz 370 ¼IóªÓKgf“š`å1X]§9u]‚û3$EØ£ýhê ×¹~íÐ)ãëj’@¦Z½í­­G;káN¬¨*›IÖÚÃëú«àrísÊ8†uäµÒzkµï€QxÇ0—-“èJš6¶ <ötšæ&ÛlÚRÀºà¾—¬m˜žõ€uYÉDËuÁiÜ@¥?’Â1Vws²½§õéEÞ…Jòù<çœ Ù‘¦ÄʬÔʸRfN¢›Ÿß2À}oíís …d{¢ï¢Å6†‰FÐ-8 ï3aÆ#  “}çül¨-Ãõ@yƒ ÇIôú§]õÄ3Í&Z|6s)΢DVÑúx÷¼ÎîéÔfšÈ¶Hb¸ LA‘ž‡2ljÔly‰¥v—£«:¹–ÍdÉ]Ò(íà‡vôýBÙÌ×@óû‚™ï×3íÏMáíw÷ù™ìç5È~mlý•¬<—0.[Š1>0º+9úDéÞæ×WÕK{êûž”V&Èp¾ï~0©Ibzkf½wµS,ª-Ò«š<õ$ˆ7@O†Œz»@y÷¦N=b˜W’‰‡½`ª¾µ Æ2n‡31ÅL&ÃÌæÑõZÄ’Æ8›lxÛISª•Lös˜Î’ó ˆÙÖ.™j¬IÃ}€ïkÝŽrí²hÍÃy›"¬Gƒës݃Qƒrü<Ë[ á ìloÍ[ÈÇX ŸðA¶oÝsBÖÎ*û©„Üi±JA6<<ëI‰ihÂqÆ<¬ï5rêë1–ÄtíÌlõmíöPK"½Ù Ø'£¼ ƒUãHPt5´mT¨Ú6Ðæ­y®i?¤MGO/˜èdw$^éžíèkc¿¾òQ¬÷BYU7”9o"!hepæ÷4’Ú+4o6½Ó·¦é§Ô Ç3Cˆ uÚTmŽ vUlâɃPöìˆL€ÔõÉwŠüRÙÚôñ ò;m3®ß~ ¸ÀV¤,=Ìh&¾…"ͦŸ5L§=žx0»óWMœ3==ƒýSUA¾^«ÁtIÏt1SCÿ“³o¹Ñ9`8å1M%t@òaŒ:µyÃ<øNÒqÑyí]ÀXo;Û¸f-!}:Dr¦ÂSÞ·Þ¯æTüTë¾Á}Ð{œ[é®Þ]Ç ²Ã1Ùƒ®fÌw9LÊ`©¿©™#—Ï Rxß3çXìÀK»J°³7pǪ›aà CûÌôÕ“(ïàpg£ 3ËÇ vfÀ·Utí@f5R~ †*†wwÖiJŽÙÊ̇ŸÛžਸâñê-všæ×ÌrÌVÝ\å;íâ­–ÖpBöwÁSß#ži@oj [*±pR~Jb`2gä%¶œô ‰ƒê„!æÕc±Î O3c€l&¢f);9‡ '8î£Úãci l‘À àŽ`¦ Á=¼Ùådî¹gx,;±Jƒ³sN£c÷ðJBî)KÔÞÿÝC—Þƒ¿D]{TN'ÏäÜ«ó[ïÞ%SüÕan´ã@«nu5B±‹Š"Méýó×þE(}™Ç&ßäö„ð-ðk:çi ¶üžÂ˜S‚5Õù9’–ñ8€¾'žßHÃñž³jÙ KÀzÏ>5מÚ&Xvãè;ãž»@BÒ–íìw,ªÞéÇ z¬Ÿíªtýu¶ÌLs¿¯gŠgoRŠ¿¢9õ sêg’˜Ï$+ßœ9îÑ|¯“‡KÞÕæ{ÿ,Íæ]ûø~BÛ×’¡wÕçÏûW•¿ÜV\_ïùIÌ5¿~\R¹øÂ˾zÖœFŸ°>30­Yß ˜&ˆ—Aç2ǧ ¬W’›píòåpíº4ÔæâÅ…5:?²_–HƬ5=7ÌìŠAäÝI³ží’3£Û  mÊf|uah[K½¤®ÿˆó.:U†7Î^¥%4²ì Ù=6X~a±ƒ¥HqºnI&aF†"§èôL’±©Þ¦šÄ†H2ø,ÖX“|˜UXï—[~§—$³<Éßë»ã– óÇc€ìl3MÑ=`ZÅm«á®Ú}ÅG ÓFÕÎÃn©ÌUîM8HöÆ_eû’\Þ£;³¾f-'@ù­²6êÿ€{~ñôì*›47Ît¿ÙÕë¹ÎWØ9#›ßMÊû”6õúuÈ©›-ÛÊ0 ".#JûŒÊ€$À=ŒxXíØX›]{xЩ óÝu—jWê¬Wì(Ì–Ù´ÆÝ_‡C ¯Íw®Î>ÌXÇkÏÇ&(\¿YßW‰'gE[H§’{)š¿#Di{h?™aIgÚ8 oÈkoò:£ú|>s–¬åê‚$âbwL3ßü*ï¥ù>¢ YM•w>ÿ9ÀèwÐßÀÝŠ(ri2˜lßß rMyô˜³5R¯Wc½¹dë±Ùçë|ËnÂŒz÷¤Ð˜Eõ4í f£yÇ„¨²ŒICêÔ»Û®zV2±dß N]û×À=:‚¯Æï²ïo¤Êüê÷_¿½ Ýgàø5ÃýLËîÍýWòÚÆú£êW)ò_gÈœ}òºŸ‚÷ɯƒ–hBEªti£*—¦þMqéÈ™N³Î«‘ØXëŸò³ä'ªÅ-#°Q63‹ŸR¨¤ˆ% 5tk.¤v‰²ØÊ6¤Ódii…­r^Îx.€X–"eRòñ옮œÆW‡|¯›.ÀšË·å©yêWLI“2'™r9û¤q/ø›4îë.L,†‘Ót,]+}§Éu­‡Õâv‚ž¦[0^‚ä‡p«¶|$L¿µSÎ`0ã¼CÞ5Ûh%Ìì,¾ÇŸŒ!H2—¯’aš‡w2åÊ!v¦Üº¥¹&ö¾@ó@" §ZÛ±õúEÓuB-ᲯO`¿È»°õ“ôñÅ>2L5`G3áDå¼ÃÓ³½½’óúägÅR³õÀb²Ã)ë‰"Üc[ŸCsäÀ—“Ø ±ò_þˆo ^ް9lcOØ ¡iéK¶ Ôžb#9£kŸÂ‰iÕbÛœ} ßΖ4TmiŠ¿‘½ÉUõs'äpþk‘\ 0Xš yœ´“ÄÓæ‰ÈYùÔÖÏÉ7ï,š„B6Øåý¦ªiÁúÙäêëö¯Ïãï-âûÈO‡€©öô@ùþut§¬P; <œ9=üGÏìAÛgOUýùIžÕœ'ëz¾Ke„øˆaZHT±uK™ †wï-í Yk¬4ÞÀˆØnTõN:e0áÚ•›Ù™îBó€ø3r¦Ç|ÎñÝJÍÿXóJ*óý„™'\õ“ˆÆçkÞ-TúN”䯄×ÿšÅW¢Ð¶Qå-Ø+¯¾¶gÁW˽môyÔãû–Ö÷ÀúÜÏpïÚá×6ÖîXåV ÄfE¿Ãw÷y—æÞð½ŸËàП˜ÈñY/p7¨Q¨ÈŽI”q¿¦UØeË:3TXà[°Žáuý5<„É0ðhòî¦Ä(ea͇óNDâfÍÓ0`ÍqP”eý­m Y I\ÐÄ¢lO ¦BÖµóZŠUüâÓªeößí§J¶‰ÕŒöN Ï dmQƇøKÛ:cÆøÇv‚Ì$ô«tk,àÉ”^+rŽ6NF< ¾“^:4çݵ±4|ï2yí}-€ ßé4:ñ|©€3zÀz">‘ñ]t !ó$pÆ |MºÕ’õ&I¯¡ã4ÒÅdi]Ù‘Į́Áï„é-äD6Ë<Ì}'ÛÈV¶áoBáHkÖïC¥²¯húPì}Ân^kÆùÅÒÚr Þ{çjwÚzÏEx„ýÞ›çY¦¿+.j‘Lç•ù™@ó¾˜}eÈw–IyÊ—ÌK0s.ªç×s…ÎÑÓOýzÛ²§3µ5ègÔ£&×°õ6Ä´E»À½Ói83{6l6•dû+ë¡r”ú ×¾øu÷ÑrÅ“cøfÌ©{zÌÌÿ™„«œø.„Š!ØDRá3ìä]tÿFÃ÷6³ú×Ôá5p·u„Ç$’¸7+Ï]@7Ë:›€ìÒUëÙ²ìíX‹HÆÈ®Òs'óuê¯-]z°¼îÂÁ¶^}"ŒQ¬Ò[ʧÓÞ/Nú©¤ùŸªš¸3^¼–¸Ì=›ÖLÚz§°¯Ÿ§uƒ…êkyý¹ý/þn¦ûs•ü“tšÏ~ ¦9›M"OÉQrÓ#_±kMËirff M²h:½ÛX…æ»W=yð–At[ªÁ‘™ì£«ÕD—€o6aèŒá×Ù­ o¾\>#¯û)¬ü‚ïi¦ìXIþÚ]ªlÉkY2’öV®@ísÒ³í­mM“ïôGlƒX…÷› _¥+œ¸µÀý´ù‰eŠ{Ô1ïK°™‹ó^7ÑNªiùM¤AÉÏa&$Ã`=¡ìÓo-5k:üàÓ³‚~ÝšÛ†˜¾#¶Tö–÷Òb³~§=óp—®#`_ó6êy‡Ê‰›õi÷õ¶ã ùf[63£ ˜· ãÎý¥E8²òH@Ó"Ò\;À½e¥áàÛ´JNšPÞ º3[&wðމlü5]øp¿jEåÕ¿DbäTÞbcwÖGñ™B)ï qׄô5€ûÙT™ï×*=³Š¾»l–å ÈîR÷wóAºïC}ߟéWéïß_^iâ;8xÊ<ƒ—]µ6Á7àŒsíøÐ­a¢:rÛtj,ªzÞù³Í¾œ|ç² (w6@C€È,ô‰„ÃáDÖÀ¯–Ç_d=§‘»qr$*Óò™fÄZïÝXÙ@<óSÃ<˜€{¸§T†9 –ÂJBTw¥rǘ¶€GˆPh´k¾ W1ˆ' SÁ Ÿgˆ£dÀ»‡ðå‚Î0ý<·Á=çiè÷ÒÙí‘5ŸÐ9çpóå]œÔ{îÙ!‡™×êÙ›ž;šRŸHÝZÀ㕬ý 6ìnê§Þûì›»ÊN¾gÝm¬`i‹XT9—”ͬmκ¥äÉ4ïÌ2ÁÍs™˜ÈIä¦7i|Åžû¾[¿.r:û²õÿ®ßû.éß=ùãïäµÿTKëOÉ{¾³ågžÊg{hÀúÎ  ¸Ÿ:ßåד€N)€&ËOm²¯ík(ÝPøºæ)p¿Ö×ö0‘ˆ4tòSJfÏó¹±­ÜÄéUe\Öë¿Ö¹Xù@yB»i&²Gi-7‹ªšDLNÝyóî1ÎmµÏ’f³êݬUx+›Y u¦J‘¸0·€'ÚÄ®³6ë¦-­äÌDö£•6m²‚ ôëh‹•Ù;(YŸ{‡Kš+Œ®=ZyyúÕ)›‰¶o†áf½n çÊÀA€†ÞÙ†”7îÍŽÀ-¡H/yEà7k4ß­Yïüõ¶Ü創?nÛÝ _«+7öá#ì ˆßöÓðÜΠ̲÷ð÷á¼cǤ¶)ÖIÍ‘r TZÙß2öÓÚ_ŽÀ¤*=€)•Ivxõ€QbßEXj* n¾:w”¸èìª÷äí$ßc·´fx“(ÉÖ¾7Îë ÷0¦srüe©8÷;™ô§FÊÒÀ}ŸÓˆ@"Ýœ¨|kfº¯óJ>;ž„fý.â=pØé_å´MÅ,{ÆGrþŸJ\c4åÎÏ4ƒž5ÊN"øiÏC?:aFî(î¼­®37&CˆÖÓ7Ü7n3s=89õëýî:³{úhy|GSf–_—œK‰’Ä'£¦{UOPžÙZç< EXKy÷píREòòñ:¾T½›!ã}VàÞ.µ)Íe{äÐxihK={R-ŸÄå×’›wÿ¾H•yFíû»93φ h …k?!³¹:6N£ÏtN–ô~•ÿó›c(PIÈ»þ;…Ãý,.»€  r”WvØ' 3çc·äÌE­‹Î‘ë5ßßðúª˜ICjg±ïV |Š‘ñQ·÷È;y2k›Î8osêd艉ôRÂÅànò 0Üz.3hÎ 5éï1¼&ØQ†#šø´¨2$ËàaíÇZ ‡ æàZêv?£?ýI¥#‚œÀýŽTL’m”Ó¤¸žKsë|"óÎþÛ“ó#y† |tçÝá èWï±á/Óß|ÿzVG=š+Ï-Ì„ˆœPÀ³þGž½G¸ni1"+=â÷ˆ†¾ã£ï–S‹«œ@g¢~chì°ZèÖ– w(Q…ß=¦‚Å™åÒ€¦Í| †$‘ÖÇÄÒ±^ ôåìÓ9е”ƒ _®Ò½ùõXZMh ëoµVà…À—L•¤È ǧíU™Ê„Ëáž‘Nq“Õd7fí`ä ò dTÜÒƒ™ß’H}šûTñ]èFˆ!PÛó½ÞݼoW´$F±fØmu¦+ÃoHµ‘”DXÒ|³÷È¢øýÈ<€@9ÿŒk졨tõÒé4ðxÚ`ºþ¿ã#í‰ú¼tÖ¸MD>=„6ÿH‹ œw:Ͳ©^RÞÍýµð¦5ñWݮⲟ¯èÀ;g>ÏUÙœ3ÍÀ€õ}Ni ´È”VæÑI2¬¿rÕµWµå1ëJIL·«®kºñ‘sñ{%Ó^Ì4##_¡W1¿Dãþýôôß¾¤é;” †®S'°ø¹Îþ¹áµ‹ŠÞχiØ÷^jÍë´™¯×Ëv™ ŽŸ.É*²ïOÓßß üÁ y¯TewüzkÖ™ašÏ²9ÖÒMÏ@ø>•ñ-­Iâ» ž[ 7-=ï&Òì‘‘têÊv[$Á°  “mÑR€]kâàÖU»cÜárÌÐKÖí}] ÕFÏ'¥äƶWe3\@åÚ¹ìÂ8´#1Æaà |L¶@'ÌÀ‘'éÅl«—ÂÁ·d¨Óå÷VÎR…é& wÎŒju3d2Ñ¿–‘¯,ðHÊ)Âa»•³„ÌgÅØÊçÓÆ\«Áêß;X0ÇX”Ë…7ÈHž7]‹[ØzÙô¤Ç*רaŽ e:è°YÏØÙֺλOÙÊf`Dg]+h |ï€ÅÒñŠ-Ã{1%ºç/.Tí4ôA†/÷fFƒcnöéËÉdža‚õ–Á$£}aŠ¢f FXE5ÂeA3 }›¶Ã‹w"PçÙ·áuÎ}Eü|o(¯¦ŸðGK—ÌYÚ…FqÄbÛiè=;¿åÙ§=T¾ù^'P²= sn'ƒO÷ß!¤Ùý*mHíÁm+ì­TK’Œsyï[GpžöÜ*œÀý„é(ß¿D xÂ{N©lyž]Î2qޱegÎìÑ `rý䯬ç“çŠÔiñÀzå1¼¡·,(LªŒ¢—DD¬{cJš@ -…Ý¥¶gßê5íø¾æ>âUä¯(cz^–.ÿ*&r–1}gÏÏro€&Œóï½»¿üK~*I¡ùlÜvg¤øs75¦t¢ê™iãnÿýM‘Òºì¿ÀÙ|‡›´téë‚§h×v°>á~·®¸ ô{yÌO[X/üÕœšŽU¾%W)4ªäÝîðÜ ê®K›ƒ(Ã%ÿð4âm{ ¬7ß½ ,gÙY7Àý9$èm”î(wqh1•ë p;ѹf„¶aë²ô€xà5o.Uõ+á ·(`èL9ˆÞ¢¥.O© 0%¯®Ée|‚#[£†>N¹F[š©ï¼Äâ#×sφZÃ1Õú”«« ûÖôÑ,îp„ÙR\ð 4¸4po–]c+`+ÀEII§ªÚ¶ì}’ÂaõÕÝÄ©> \ÐÀ‘›c ó× ·©2s ju ‹¼ó×YØšì¶„òŠ3Z±fægÚL׳º§S¾¦Ê´T&úõ]¹žáÁTÏw!Nm…æÝäšWì–18“ŸABÛaÙÀͽù!™+³iÁ*¤ÀûšnÞC£™áP>óNL'åÈÛÁ‹ gÏæÑÖ…ó}5¿®Ü«¹yÀt’gºOÀ¡Â19C'±A‡Ý× ’ÞÙNÈi-þôxDa•éNsígøã¦é¯,¿ ¿ò-˜Ó¿ÏçäÌ_{£¯:gZóܽìúu›J™¿ZgwïMë~²žï¾îk„ƒÖçÞ×÷0ëfÑDNÓÆÖèàOKë{•”oeý}ÝœúS5IïƒìDÂÅDø~ö¹¹©3FÿImýýs¹Å¶ïþkaÒÝçùYÎúû93û>ÕÁ+°éñè}κ?˜½Xøs¥»RŸóuß¾Ö4³vzLÇAîa‘ÕˆÛ-šb¦ *„ãmuíáAûfòLÒÜ׺õ,øyú9Íè+¶·Žyªó“àî¬E:\ÛÛ ¬¦Ù0?°NÙžw¤ì‡£ÍsŸAÜ$¹4 ÜÔÖ8k*N^±Õ`Z£dÅwgþzW29;¡†ž½ m5ª.бn=‚ì#€ø]8oÝ%{h°Îm¬Á·’˜V÷¶bž«Q$:˜o£h÷ÈúDOò¿Ì6´Ôýw!y,­BRÞu’¹*SIôdëÑ÷Lw™¿¢´y4ÐyÁ> ¬Íþ&¡EŰъ‚³núœñ‹H‚Ö‘t’ú|…Ô-äàµ0ô_­sŠ ®ºz统•òÎ0,àÎ~¦¹6¯ÞÓ×Gî÷åþ“Ém0_<m™í´öÐÙÛ뽈k.ïšú–î°Uø1ÅFöóOÿ¤£#¹Ýþfײ‡ÇªçáË“²ß‰@3Ö0Ÿç4kö{gH™³¨Ú6Ð^ß@6@\Í„¶ÊXÌiˆßŠV¢·I·•î Nþÿ?rý£2ïÄ!/Šy […/|Ÿî‘™LßÙóJtò‹kýzWZ$ÓšþNëwfûqZN;ö Þ0ÝB¤Åï\~úõ;ÔýòÛÌt‹L’ª®€f:­x²>îÜVè ÖÛ0šAl:·[Õíüˆ 7O{sÒW¦ÌãiX|碌ç3ì[2G!Ïsy_1Š9“ Jïnò×…DQ‡›¤Þa”±À¦|ç_þej¬M×Ú¼3Ý Ð<ý4Y&qŠšÛ†;_ßW«líÍ<Àèk €˜Fk= ׳.Íg7¸—‰ßËá9þ©>ȇ÷¨¢½5ñ04œmèß&-Lj«q‹sØ[›S§ÁÔ™)†Ñ\º”Ê­œk0]«Äž=ëÖ+8¼ ‡šóa–^µÅ³çy2›â“Ö¯÷ãîhGG·„Ê£O™eŠ—ã<ßG¬2Ã1 hiAÚU\)çÞ‚ìYó fokLäͯ§ÿuæÏì)7p9ã;3e"q¥{´eg§†¾Sn˜/Êà­çpúÜãsÓ|¿°tIæw_Ä™éîõ°»ù< z¿à¼eF—¤öžOÎìñ^Ò$9b‹Ž6Öbwí{l©gªÌg©zo!´“~e£|‡uæ6|èN"š”õ?&¦W8š?  Àg°õú¹ßWð?­2ä=ÈnZËh>_ë;‰1§º^\KâϘ*Ö·»öãÅeý54ßÅ-°ÝZI^ÃôiWm^ü”ÏÈNˆGÞâ™æÚwFœF6«ÔŽ'&’-5w&ÙÆ¹ˆå¹>̺y2L,æÒç‚Ûé1Ì9ñ Ó“ËÞM«ayÕ¸·*½SÞÛÔËú‹dÏÜŠ¬‹2å¦Í©É!ö1ð] ,ï.­¼™ýÊfRíÄ-Ÿ[2ÙîYÉÞ’€ãÀkD‰®‹—5Žõ½X;E@¡œ¢ŠðæÅ{Æ …Ú½l.|²Ýmã;•Ùa—wÑÈn]m)ˆŸ@‹y°·òNÛ°»ö&à6|tVçðÞÏZí»qˆ ÷©¢=û9‡]QÔq¥3•%<úÔÁïŠsÎOî/ž¥;„òÂ+Á DnÙÌìF ¬OÞ‹3! —{Þ ‡X=xàÌŸ®6€¶A¶·É À™þ~ùLøA¾•NÖó´t§Eh¼Jƒû¼)b>%¿)0CÌqÚž?³HœNGîú†%Çß©2|=€dNRøUšû]ÒÕ¸¯-Ú M¼Ü< >Ðü:ò¾&òiaÓ{A#—úxø¡Ï%(žR÷°Øxü=¥ÄjAÉï¼Èw¸§ˆSü?}ýõh=|¢‰ÿN¶Ì|×£ýŽë=q‹åGÏ’„ÑŒàj{!Â}^ð÷úùj”¬0f¯Kðç}6ª ÖgHe† øQÕGYÎz9x•ý0Á p\€ }ꂘQé( ¸wŸ®7,’Y~q\p›íÎ¥MpPnƒ¬2ž_ßÝÿìŽÅ  >;,»³Â÷~½;Šð”khÆ5à=}ê²ÍkǾ¹@¹ ܹåh¿[¬³a‘ŠO£Ï³¢ X'}¼­¥VêYÈ«I6РâÔpîˆ|ÿÈ¥O^ªE;!k€€‘ÐXé ÁL4ñ|2U‘Öøî€e‘¬(ÙÓÓ(Ó Œcº<Œ~`½¦IŽ d1–Ð>ÔN/Iþºšõ†qg–K u:´Ž÷ؼ2Ÿ­ õ[›¥ž©,Qô6pwËÖds´‘Üèh­Ì&ïëlßl r+ÑOèßu9SÔ•¼çöú€PÌŒ©<^ŸOÃÓY”¡ 3*êã9sÖö^©’$Ó©ùZL&[zBö|bmhîO©3‹úývÎÌiÊœA1OŸ|[—4%œw:‡þõÜ‘3-k=w·†õ2÷î'zú¬±Ñ6¼¸Yøì.Ï­ïOøÊÎþ…øüìK¾ßþ=Z«—®ŠÓ‰Á,ÛpÎ@èh¾_gŸ.‘µô“Ä’Â~ËÜTº“?_×HKšdß;m&…ŒÝ®î|öª&)î¬ß­qú”¿Û1ÿ³«ÏµìßyÖÕ–üÅ.½ueŠüdå?‡àßÙŸqð¯×Üɇži÷ßcÙ?Ó¾_5~%8ò­üÑ':µsçïïÔíúa¿æÝ£­·š~ëÉäǹgÑôÏõúUZƒýE>` X_¨YZûNâ»K‡pífÀì˜|÷0ÜšD“O.ZsX ”ÊÝØÚ"å1(Ú£>çÈ…ÎÙ¿&ËfâÝF1±\Z„òZf×k™šâLE†òñ‚õ4³ &s¯¤<öÐVÆw¢°€à X ç­®wÏÇhEf@¼m¬Óh•¬÷žP¶|'¯+ûˆ gxnKܘi»”'n&¸Ei¢å±"½µ¦or¡36vv7íäª×ãäµÏGÖø¾ÖrÚàÖÝ&à^…4œ=3¾ûYu `ô檛À•î|t‡m{=;ŸgÛU[ßÀñLgï¡E7eÎáDÎ!Aç¾î·Ò]°Þ}¢‘5xÍFÝyC+éUóÇfªf¡àZ&ùç*‡„õýûâ{q>¡ùTEhÿðós “ÝFÏŽ><3gøã„æ1’Î §³t)/rÿ§h$õaÍÐO3wóÓÌEYîîs -Ë?ù,Ùæµÿ]@ÿÌrÊ)ù“4ýw¦W¾æËï#Š¢ð>ãøï¼æÌÉ+ð=çdžŒ2ÏÁäõ”S|â÷Ûäq2–xãÚ>{­k¿Ò\ý€;‹FSu–pá¸æSÒÔªwMŸ^Jà·ßì¡ã#yÜ2Šp´Hþˆ,AN¿Gøõ–ÐØšœL–_dKM¥±Šê»ÏR ̇GΡ•àÛâ"õîó„ËOH"ºvã#B(¶‰ì¸ÐeOÂDÌ %m²Ô¨ìè¶¿N³Ž€Ç¬5Üá³mWM6v3¾ðŽä½@R4Ïþ±¾Qšƒ¡¡Wç˜ÍþcÞ,v¥Lêù*=1Í`£-›m-Ÿ™p䉛”+¥}žuí¹¡|§¸t8cç–Ìxǘ/çw ýÈ!Z(ÒÀ¢ÓWêD3'ú;jDö¨êOI Ÿ[ Š7»WÛ–Ú¬ä´`î¼l˜æ0èÉÌAomdççÄTÚÇCùQFäõ¿?̺ûT5ï`,’'ƒÿ24Jµ“‡ £ÃL74£<›JÛcÐ\û”…LÏTøf÷„x £ÍÜg¡­œ)Z òÅFK/ÐRt´ûìYów5f‰2 Pëû[ÜçÌŸz÷ ¶ÏyÝ =ÏÀç–¼ÑÚf݇ú«D “þ]‡‚´]$ͽ[Zãnü@è’$̘à.üMÅKît;p÷þ•eh¯¿ú+‡누õë뮣KWIÒfNù+úxîqV2‘(Šüž¬ÜœWÈíßUø¯â ïa.Ü §Ë«´“ï[<Ÿèì¿FùýäœçÐß÷å©'ߪÝ÷ò×ß*Ëý"CÓaXÒg{S«}u:6ø]ÆýœŠz½4Ùú†žóÇv ÷{Éhyî9'aÜ÷”÷nxíè¨ðКe…°NÛ¥J–=*=ïðª½;©&Ò“aÐÌ%Oö½m¯ÉOK.Y12îø3-Þ#DÅÎP?ïŽ3míG–}š\„¤à ˆ)_Ì÷´¨j„MF¦ÕÜT‹I½ ZQ0çHÀe¸|cï¢W~³ ©-¤ÑBj^ ¯k†FÀhèyw1çýÏÿ‰t°Uû¾ Ç_ÆY}¥Âéi»ŠR üF€ø³¡¶‹–RÀÞêú(ÈÛ%H®9u‡1q ˜{)EÀ´ qóô£¢‰PMmçÀtÒ‹y)ɎΛo0@¹SÛ­+êdôÎ¥‰K°’Ôc(q;Äè9õ葎œý©-³9Sk´ë­á^Ãý>Z]á­'pOe3î=Э´ýذ¿x ”x…q¸¯cëfÐîmxÍzÀ(rÁæ³uœC¼»ò½¸\x†éýM´âžlÓÝR$j®{RÍeÊ ¢…4mÀm•9Öp_% œoÖ–â°øV¤aÅx€î‘dîBàÑ‘’Ž•”韃+ް½þZ÷D£nEЊ±ŸçX\I±ÎÛƒa¼o”î©gòîã"éì‚uÖ ˜a=eåñsLÜÀ½]Òg°ï»&¡{‹ªkÖ]oíd÷ápMnèmÊû{²“Ɉ¾ü,D~WŠóSÅL?‘$óTºc„bfîKš`çcË{nW}לú&ž2:<å4=<èV¦5°&ä±M9*ÝÓ´ F$cR‚–@ón9mw¿1‘^"Ìh$Ò2ë_»d*s €û¿ùRàªÃ$ßã ·Zí¹¶¥&ÒXFŽTˆÏ™cúõdN«ùVpâc¶gx 4¸gŸ@1nHtd² ȃéo±M^“{ÓJ÷.«b?ÜPC â͇If‹ ÙÏάóŽL¾÷Öæ;n>…Dòs'ÌhÈ@“ÓÞ×·ö©†×âæŒß ÃHS3$+ïÀ€áD¤ ’£„$föC`‘>Ú†trä{ÝŒ <}¥W‘±QÆ¢×3ÎL?¼xË`Z&»»ÿ=Óçæu)OÃͳ5®Ø×Lƒ<ö ¼ŽiU°Û¥KžŸæ¶/9—¡„SÓŸ<[3×ÑÐël{?ítöçã{Ù5ß]6ÕüHôÞú¹=y×$ÉtžŒ°>³V»Ó4˜†ø-=êa’–Ùõ]“º3ÝùE÷|EÏD9‹å\Sšßʾ7ñÑ¢žÏ éQŸ•vvb4 gvw–.Eû¾Ëf$Œ$ÎpdÉáùÃ5dJ[gË4LOyÓÐf›×Ôä•þâ]7†~_×~Â|'Æ_LŸ@ÏÏ€øóÔוOƒmäÚ×s©ÇŒ{‘™¬äÇØú™¹Í¯@%K‹W²“OZW'G¾^eRÛrzŸô’“þÝRƒX`ˆçÏlƒ?¼â{Ì‚4ëö<ç"¦H&gÙsçÏÌùpÏ©^2`12˜@üˆO´‡ |£믨&ÆÞ­‹~ËQº ˜Ôv˜þ]qÞ93or$ Lsò¹Â÷6§2©™½;™'Úd½@˦ïëÃýãe¸Ò¨–¥=€€lo i05Àv':ï^±–p8À0žíx*{zº¹c+…ÅI^g‡£jËi߯„ûÙ0 Ü¤gFX®ÿâzÒÙ~nK¯dêÙjzôô–^™´³C¦õ,&úå÷¾Ï¾å_¶¸YjÍg†Ejü%^~:³ë˜ñUÛš|tM¨Àå8"œu±m4ó ©Or®žf=NÀ}.{h[áL‚OõÒi{m%}/9£ö9„½þ©ë´¶œfŠF¦Q2À= 5Ü)·Ÿï%’]½d#l†‚ÉçðµŽ* ºP;Šüz.ø;aú,k~JD®{U‚rm„lj}|?k`ÌvRç8殎Ââ-þ„ÂíÙ‡-I2Ù=ƒáV¢O3wæOz¦¢Uõj§ÀcèY|J-ÂÙ}æÆpS0ƽ[x¯BHíRÕ›tÆD’”çwa¿ì:êöà.Ã`økfw¾'v¢gÅçÐì{±ï†?~U ù¸§„è 8~?Ñå•ýñgí¡ßaå¿‚³|Â0í[¶¡ª÷c>3S'ë´ãGxõ™<ô²\a¯vX=º?ì'̯Ÿ´ˆ­oŸ =?°§¹§½Í¿~¥Sߢ2Œ1UF Ë•:M-ûdÍ»µk:ÙÝv7•îI›qlpð•7ƒÅr¥<·ÛàÀô–äÃ`05$ËnN.²ixMÖ ‘Ž 0ý BîÂE0lG’tµî*|Rer´¼J¶çqëÚÕß›?ãðøÿë¿’‘Œ"|2î­çfà2>ºð˜Y¤›m¦é‚5'^`E=y/¼.ßWÒ¥*$„ã\7E9éí¼…Î˜oûl§ËgºY›,|dëkù}q TH³=/”a8´ W$"ë3?3¿eˆ»É gyÊov ¾³ãî¡Å6mvä%‹fêã˜àÕˆ/@—윃v8ˆY‰­dû¶ÌÂ1“\ w’­÷¤ó ²“!ëì³nÙƒ„)0ñÝWtûVêvòL³òÍ(gÈ$?ÚßiCðéLXk8 Ù­%â·6z&“Ät;-ö04žîCÄ} ¢Èìp6á¿›ŒqS6:iB Äȶ›âœ%`vH iç´\'º´dÅ„û]ßfY3drl0ò}æè3‰'ÁøÈ÷ûLkß{¶àkíw&üDUÏ9çÇög@dÛOÛÀÚ¡÷-2œöSòd¼&Ÿùî˵µ>¾kÞé¬^2<šxâuWJÂL÷æà“!Ó*ö â!œ:—æu6Ý¡ùº…æ…Èù½¦'ñ;õLwêðï°éß—ÜÜ¿.ЄŸ\4Êן•|ó5ÐÜm¸ÞJ¹å¯Ó— 'îµÑó=­…"S3ëTÔ£³à+ø~7^¼Nƒy§°É#d:•›ëSÏ÷G· ~ZGÑ}¯.¯´ïw ¬9’aù®½dȸ‡G0‘ŒÓyˆì m­ü̘OæºÏ%…¿ÀqÒÙU½»ýڲ˯'Cø¾´Ñ 9µêDºãEÏhH@<“˜hôåìÉJ'.ô«‰_ûäÒÏ EÉ’¬aÛ|Ùö&ÓâÃÄ«˜çý®›‡ó ¼kd$°Ñš_­vo`mÊMøõÖfãt½"ùãLq·¶ÚL¼‰¡•ý-Ї €—Ìœ¹ò1Ýîšo‡kPdœeKŒÔô;ýÝ‘Îÿn^9ò! ¤ô #¸¸ùµ„9s:\ì§ žš!–³NÑ’--øachØAÓf¢;絬ò;ÒÃÀ²¦Û"Ü@­S½˜±×¯8ó칄¿ÏD®à§á`æ|n@|›Yýäó¬ÖëÏÀÐd—Ø\Nà`sÿ ÷õû±uFP8à«TøD@ò©vKnsám3Ý_e¾úÕÅ®e¸#+êÜw oÓ'÷ߟLcÅ䫨¯Õ²™6ìîú䯴ÊÏ›ïãÁ ßR™Vº÷{o‘U·w™gx¿®÷ˆåzÞiæú©j ÑÂ?~¡\Ù¬v¢–.y2¨ÛíûàŽ5¼Bš$ÉØ–7]“hê&’wsû¼ýÌóŠÖ m·¥Ê|eN½_OøÎ{‘…ï&Ìü”ýô³tö¯u䉸Ùïrá÷y­½6÷C“_&h>‘ÊÜPO\N@ÆÝ‰ÕjïÏ‹Ÿîž»Î¯Å“ùÞ_¿Š qŸâßëÌ™]Ѿ>W@ÀeMöœÉ+ƒì>òžªôùZü#—Ed]Æ4 ›’ïÞ¦9U¿‹šÅï É„^9Q¨Ò=y5°€f. f¼(¡YlqŒžò àZá´ cÜ;²›íÌ“ §ž¨Ì°OùoD_hôð¾#ð ~ÁŒÀ=ê|Àh² lx]ÀkÝHdýŸzúÄ)¶^\€Ž'vXå=€~¹|'¶ý‘Ë ¤Â)Ö. ¨êÑÅ®ë€CˆN‚ϰŸ"'‚àèŒtBO%:–ö¶ží;zÒÙ‰äÍ·Þ½…mô”ïG窞•÷» 3ð7ð=Óë: xï±´ªÅ×i~5SKŽJb.ÊÉÙÎLBÏft2F3Ê]"Ã'©7ÉñZi©…OD#LjL¥ë;ÚÁh«ùÍÎÇDÙ­EÀÍqŸ*ùÙ©Åïd-ÀNƒ1® n±9å8)®¬œ3 {åÖ9SÑÆÊB4ßÜ©/“O«®C…nØíO2 Vˆ¿'Þt¾ûd¾Lyšz#;ipŸ:-Ø÷dØÏFÕ$]7¤ÎGIK‰z@5sâ×_aÓöœ¥`-F²‡!3] ‡µ]XHf¥ZvÅ~TÉï!’íêÄ0füøí¬ùÕU¹µ^Aû©=³Ê@ø½n©— bç«#ÖÛ´TF¼Ô‘O试ˆN×5ø¸?“çÃûœYÿŽ4å]-þÏîíùú'k\fÈæÕÈ xÁßhøý¼ö ÷wÜ2ßaÊïëÞíp}ËþŒeçÆùdZÊ6ŸðºØñ øv£›À;~½g ¦ÓuÞÙðë¹H¼è„5ßÅ6±·fÐBšLüumÀzM™Äô–⤠ЬH†›+Ã$"iš \þlZ¹4Ñ»;DQ£Ÿ!DšYM¼é©OöƒH†íyM–ÍLˆH¤«u¶´æ‚.LOa“¬yÀ¥L6Ë ß[„c¼Ã¶äxÒ]Ú©Ê?Ò‰Ûö,öfŸenozsì;ìîN8ì–µ¨ûw¶Á¦X0M´gMú™qáÔ9Px½/=û»“½ÎúÀÐS»‡Hªbop)c퀡U¶6†šˆÂ·Ð$uÛ»¡y/®RCORÉ<‰þlklkÊ•¬$\àÙO¤ *ü%v¸¤Âžõª­_[^É$iùŠ:ü®,oªšw?%LÍ› Ç3K¹QD&‰¼ìFÞ¶¢žª}^%ÏR/>×äSm.ÙÕõ¾œÁh¦&ùô¼„Úýæïg#i< Z³;¢AoHÒ–zÙ ²ç®SW¾'Ü›Ÿ0Ç6ÂúýföFƒl\£?^×cøx?ɽ‹ gl"¦Zã°û¦¶'zÕú³Žgíy¿Õð{o¿žË±1K y4é1¡„rg ¬‡z†”IS„1v¹ì‰1×åJ î S>sfÞÉÐ{™ãþ~ä»b˜ŸŠkü©Ô—׬ÿs(ÿnÎegmŸTò½Y¶fÖ­ ÕŽïF߬Ø}0.pzÏlñ\úòî6¯Ê’ö£âFË÷À •¼~ö5jŸÊx ’°Þj´í)³ÖÙï#o%1p¢Üþãë C¦{`®½ª.=’ÙØjr|OêET#7˜ÈŒìcWm¥{Û€¸°·rωOCþ~†HN€Þà[ý7).]ùÄ‘$…F1ÏnÉ ‡ W¸ÒVùJ¶l z‡!&þoÿ–„rÉÂZ²wÄK“óF)Hgjø,or°Øô÷îáÝš š{l¬á×eè[›;ú×öÇÉ·ìžIÙghÑYï­î,ù] ×@‰0f± ¶Œ;\Ÿ<=x?vÁÉÌz¿ÏdÈÑ…V=(j?\x þ mñ@à5Ïyϼ|9éØ={Ë£¼w¶9¹üÎué3G{qfZT#SÞ;.îþŠé¸èÙyúN›IÖ{fT¦iõìsíL›®”jønÔuîS|›wOYòjÚ‘˜¿² G{ã”ÉÍYŽd% ß3£Å1@èúK˵×aXɱuÛXaõè„BF£®f=o—›¶l5°ÛŽ›(Ú[NÜHã+Ôñd›/€ûóæÔ_§#ÿ>_WÔ‘‹ŸS>×O̸(‡MtátaZO°á¤È¬Qò¹4å+PÕ—–ˆ/öœZ?¤w·™3W©;ï B¾bèwaÌTÞkIA±=³b€ŒW…M3ÒóÝ–üäÉ„YL¶)4&Ò8ÓúÔÊOþÊ\à>¹ù¹”Kà8ÿðn–LÎlõ´·ê‹Xœ´‚Ë’L(bÓ@¼}a½ðê°¿\jµ±†}TFv¤ ­Ñ°FÖb„e«Û3'ÐZó†ï‚xóUTÀ —×­…5ȨîbpS©¹Þs o‚¨Õ;ž²’ %;!ªnsÍ剹¥eøÄcg!Ö¾;¯Æ¶Â u„øQÿ—Ù@9|¼TKžtšÞ”L,^0ÔŒ¯%YQçÇ0ç:<òˆ‚ø¬Ze«&{´L ÷Ú²¡IC·~»Ù.ï.@dÖͬoÁ${rÍåÕå‡;L!Q›AgEW'´¨˜ŸvÞ)òéìy÷x®3 š'ZQ¸yòô Êñ;8cðÐâÙ}{²¶1˜ö²Cë a¸÷s;º‘ïb·3Ô9Ùw³Ò#ä˜i0-ƒÙú¦9ZúÒM«û`Fƽ‹ŸG­WTèK±}«Q®7+¯>UJ-Ò`ºxt?±ìa¿­gêÙ† uæ÷YÚz–ÀiË^ÎÎãÌÏ0ÌîˆUž ña„Cúž¹¾i÷Ï ª`}ÎBËÁK~IåΘpŽ–Íô_'ãnú¾$æ³¼¾ Æý§xëïKe¾£bïég•ôŸ%¦_oßÚk ^Âû½ð£={d¿Ö¸¿fÙe£/ToiÖ¿Ãè_Ðü8gið×?€§J²WKà2¾9ª~-¶9uí÷i6ÂîõéžÎœøX^,fÊȈßa‘ü’UÀÇ«0Ùw¡3 \ù ÛûÈÐe×ÙËp·*]AK²ÀÙ³3B3?“P§$ýã?¶ÀÆ<™(ï£__ë;±ÉL9ví@mUõ¾îLª‘MOÄ$ŒK³™U¹KÀ"Ð?ƒêŒV’ŒM ê)sœFIª•ÿ­Ø†m€ø2²vOϬqÁeäŠFÖ6še™[ÏøÛ\þ©ÔWÞ£úœú9cÀÕɹ’["™èø9þêÍ™ >µ¼SnÕäÙÃ0Øë¨ÆDö‹uže Çl†túMÍ $¦{Fc§A³Á«Óý-+Z{èÍi6]yÍî'Gaï‚os&𤺫‡s ÙjŸhÆwî q!Zaß/Éœ äŠÉxg¬gmÓž«#oÍg5K ‚Ÿ”IJq6A°¯Ë»¶s4.{æ!þ‡ù©¶Î>üôpw.%é+€Ø>9˜éÀÓÔ{õ`£*mê5)â–ÙA›´) ê#ïXÌ~ýýú\­ÑŸ~ŒN+êÐ]ûÎ5ý0p%Ac©UbÊ“ºÎ©ƒ#3¼ï˜H¸v{0åš?³Øì4ä¾g^Z¾ß[. qÃþ5n ­öŽÜ÷¸ßƒ¿çÜögö]æþ ¯ÿY™ÔW—³ŸïE5øWÕHOæ+®àµ^‚ ±xÍsü;rü:õå;Ÿ©Ø{ËßÿžKpøæï ž‡Q„ÿíß6[Ò×Ó^¯~ra¸§`dnzæ=ÚìÖܨÇÈl\56¼:èú'íª ·Ší5Ç€´Si&å×ÛÞªy”-÷,ùÈ]š©/Ù§ºÃìÇa@ØñbNí»"Ÿ˜²Oso„w¯ÕŠð§R› c·@Öm¸ydËÄtšû«ù5ý¯ Õä’(ï´o6û¹ˆÒ‘†¡&®¤$¡“2U±ÆÊ[¯=«ÚgÒÌ·nNÑYÏ g,À¢¥BÐàôw'´„…ͼA 82žt»Ê²›´¾G3øMìÑ$9G›H³@]jPm®½SVÂ1 èáÈ3 ê øž—qÄLœÁ|íGàžWéÎÝVáŸèû;a= 2í˜|1­ýܯ‚?ó­&¤‹`¦#&{žÎ ™Ò‘NàÚ Úº“s¦¨cg¬wyO-™x“¿¶<£³q”â$jSºEDx4ž†`Z<Ó¦(…aC6Ì´;”…•Ü¥ ¯ Ä;džèÛñ#4C3¯‹®zˆ¢è%ðýLÔé5ýIv3qžMsŸöôõ½¬£í<+Î ;â.dŠœW ®MÖ;”„×m‰˜˜SåÚ¹bð™U,pï•Àtÿån ¥Ål/wÞõ_ìS—”ºöë0Œ«8éçÂàÜï@ÛgR™uÓ‡Aœ/ÿë”ë×Pû ¤vÎÉmîD#Wï—Û3< ¾æûxͯb7߃ż6šìw ò³éNë§C©ç½§Ïçî û»ÆŽç{ -íOÂÚ ¶ûI¨e'µÏ%yçœÀUÑCJ©º±µ»Q÷´™~u¸óuÙŠ0f l„ÔŽþÛŽ3#®:&—³†Ô2îÑš›I/¬ÿ›¿û‚À@ËïÚ~‡Ú} T ¾[Ì$_ï 6n£Å<™Ì=‰.²Å öF¿Þ…Ídû›Zë°«å1‰]Å‹°FÛžÁh|i:¡Å6JU{N#Ï2‹}‡Íg»fEj6çÝièS~Ãk[‘»åÓ1M<Ÿ³Ÿvóߺƒ^¼£ô ôì9™ÖŽ/p}¹¢—¤â˜Óq-hËiÃb*»mÑ× Èv6`zt '߈"“~­äßO˜¸³ÑÝì;ã;ÅÎ{Ew°d§ðií§«Á‚ …¾fã» ïçòÍjíÎ'lEfcR{WqeoFûs“㇃ï&×=È2†`§m²¾¯ä ô#›éÔ içm!YfҸ˩ã¸Î¨.`BÀ#ã¾^í,iêÎTͦɘÒמå,]ê HÝb»Æ½çº¹WêEL¦ûì½Ùïò­ÿ„ø{̸?Ϭò fšŸd±?aÇßÞÌýp½*÷¹®–½î7½[rcàþÝj¤ÏD)_‰OÞ7›:€yò.žH®OÇÌXüÌà ”ßTQÛ@‰òþûò›TAu4dÛSvµú ÇM^篺LáÍý ñÛêÊ«Ïìšpù÷ô¿v««†žXE:T¾iJD5ÜT¸¨§ Üs?Šg¸wR ²ZZ÷¦‚…›q~c˜ƒ2Ú}Eyq^]îY=åÌQõ>»ü:3è=G‰,¸ƒuT|Vê8±FJÑ` æôZo¿éZÓJP©2ahÊP@ìe×ÇüÚl±¼{˜Ú(;B1üw·l6`qœ 0¢j x•÷[Œ¤'I;FÜÀM>çîtœ-¶»â–Ï\ånÀ}gWû¬Î§›ØàÃaRóî 9Ž…ï̱¤M¢yúÖ–E.¥=—ï‘™‡dÌ·èmTâ³¢+·-›6¼ò]ïŒ{gÎôœFb(¢„ioZ0:p|Æ5žyðÉQéô÷]Òý(³“K“ƒïÅ}æsè´u÷¹ÎŸ½¨kÇâu¸ŸðÊ~ŽO„+f7ÅÃÐR†¦ë›Y—è']í~’mx.G.ß•RI‹r8”nã}F«µìþ‚:e?yJھ͙YÛ6Xwn0$‹‚άF0¼nàî,h‡)û×.WŽïÞ°³ï<[žáÞ½–®_ð×à‡ þ¸¿So´+{>Mœ Üß1ž«8wÑQ”⾓Óáwê °~ ?Üç÷~º¾²¨>ôÀ5X¨Ï‡Ïós®rR_û¾Í)ßnØ\¦a™ð+X—ƒëb¦Ih»©·åtVön‡)cê/>=[`iÛp0éùæ) W}5ðZJ_u×ÿ¨ ßI]fbÿöoùLÄ«?ÂtÓfÒ¿H‘íL˜i@oq¶TUßwönfnþ[ÀýkeöW°uÏ$y®ŒÿLw~'äØÊŽ«w†\€€?Ë¿ë ¸â*­NëÃÓ=|O¾òSów3-ß±´~§øiîhÕY.WÒÄüHaè{›ù‹t¾ÛçëžW9¶ûB‡©Üã ¯c"÷AÖ;˜‰Þ‹X‹m|ÌØÄ´{B$[HûµÆ_ƒ&%èOE}(ÈÖTÔAg ,ìx¢9Í¥(›‡Ãe}]âý¥Öýk’d"záFE9Ž6\ãÆf©€Þòðu{ íìDUx} T[c‡D6ÃceØôÎwOH%ð·Uø,Ü`8†.‡êw™­$¦ òv3k›)O.œíÛ?Ðni“M )Sý4lñ©Z;åë*(2#?¬¶É9@jÌÄëxŒ’l3îžÖßt-8´!c`ÙAúö☖ ×2—"o3g3*ÂÍõÞ_´yØØš"ª™Zcx¥U-ÁŠ£ ¹4{¡GèŒG ´Ö»ÓWt6@ ¹¦ÌÈΆàq&˜îÒü} ™äàÝ{Go/›Ë?ל¢ V´ŸÂ’î¸J”ßî)ÔÙ9™¯P´–º®žÇ¸‚ï|VèÝ;oþ„ãíOª&W9u%7áò[ëߟ Ãjf¸5íÔûü‰C5Dh»$†ëa;‚œ;]v¯0\“³œxªÖ/7©íˆ,wÞý©§Qµ•cãcBO?gï_‡?î˜$jûG þ•ÆýyËg¡ŸBù°³÷àR¶ã^ÌsõܽB|G³þŽÔ„  N‘Ÿyõç¹O:q¿#¡y·ÛõuWë'}±€í½ò}Ÿ¯~ýZîr=‰v »³TúÂ8žçVÏO3k‡Q Ó_…Eîb˜ifmÍýT·gûÀw¸‡uy~54´¦ÕùÈc1 ç=jf5DR9 Ù‹ eËØgS#åÔ'ÀÎ!‘çš7ÛݯØU·Í]¯ž¸1Å'Êiö2¦® ’ÇzÞyƒõ¾¸ªÎLBŽvLn`{˜£p0PŒ=+’ÉÃdw,žQÞs“O¥Qí¾—9lˆ Tî<À]ùG´ï-ÔqKrW:¯}q\L /±<ë“1}í™ä `=leóè=Ÿ`šÍÚ€ où‡"³é¾X ¬k"¶QÔR<ÀÄ_Ïú˜þ¦†ÎXÏÎŒ_K¶ïá¢Útä.ë¾ c¨3ïýÄ’¿1e6Wž‡[Ø$)?%óBɈκ®VçïüºÇÐÛ+X¯ÛQ€ÝÏ*ÄŸ™èn¤3#<{˜Ð|bN¯ÂÌØÉz>ånv®c ™¸#ÿë¿¢)—užuNJFŸ¨ÇH€fœb‡lNp?¹ö0÷¼/æ8gZ•ÞWðî<‹c–§ç—¥ö_þÑÔÿú_‘ÄÄöê‘ï›ÌcìÛ¹M$L ýn1PÄDz~Cíí‘kçZ-²hÞYcü.£~ì,n¤237&i3Ó¨RLÒªÿÙ‰9Í5|ÕXÏ{¼Ë»sþ‘ʼ›ÇòŠ‹½â¹Ÿéæ?I¡¹Óëö—¯è?›Oø.ƒþYÍЄŒœ¸üð8ÕžjÙçþ¯åL>˯¥>À*¨î…IÏ“Ý?½ÊwüUÍYÆtÿ¸!x ykÙ{›]3÷ÖA“ª÷’ŸÐI÷?¥2³±u‡}A Oq’é4{ç«€[éˆzÁ®,žžKí¦ÜÈŸPf3“m2Hè(åòÏ w §¦•¸)ËàÊË)ÿØä±rÊj+¸J0e)ÔI^¾à,šÎÈ]^3N²2~ƒgVý”Ö,ÉSË`¦Ø†_Ă Ü;Cé(ßs/sŸ³êÅe͸w™Ä†gùäMF_ÇÞ&×èýŠ-˜éy®¢¼/KšÈÚOâ>gCSòj|¿HéëÍlÃλg¦Âá‡ñµ\ ú8µk¯s¾Ïƹu.“×Àæ×IÌþeÜóW=Q™ËM¤oCsï§3¶ax˜¥K‰~Î6¸ÞÍ£»šÛ¿ØÏ5ãþ„#ý¬«5;p¼Þ¿Qöïòñ ܾŸÓOÊ•¾Ÿøþ„•¿Ëž¿†’ï”.ÝÄßRó<ø+ÎÑa‘‘N}Êï^ý<ÿʀÜpözðК¹)Y™Sr÷?ï;Ê÷~ö¶î†¡¼ ^N}îaòôòaÓá˨h0Môä4ÈúºŠpX -¬ŽÞÝ„œ›I°›©rË=+ÀÂ,.Óš_•ߘ?cæŒÙ/òý2ëQº+ö`>¸íªD@ØÀÓ¤ÄÀ¦ó*>7û”—7Zÿ?üx€;ûI¥ÔÌ¥1ÔR.YYCóÜÑâÿÃ?»öoÿ¶dód¼i®g)ï pg$ݱÓðç€'ÒÚËÂmke¹‹vL>YY4&ÀÀ “üÞdiÊÊR¢,à>…›|/=jÈÞñN§éàËØyUwWnƒ×f¬…ïIà™@<ÇÀc¬ŠŸ×p§ÏžoÊw[p/s†8HnÏ9' ˜$ßE@ÿ<ò¶/·¤*á•êË» 93Ìi´ ¿[fOLm;(³í¤=ô‚îHÄŽ=ƒ,'PnÍ=M«I©o›f³ï3Å%†Î3sÆÔš$±gT6¡Fé.LWI —5£•fÖù—)€Ym9 à^†>‘”-¶QL…$¦ýNõ'ˆ·#¢«”'ê~Ïÿ$‹ÌùIÎü–ä¡Qð:otAwƒØŒngjD2>ö¾íû~GžÜü•¼ö¹= ‚œø{ô¸û'ñ+¸ÌåûóÌõgNÄëPÅ×Lÿ»¯û}€þdâ'šM¿›âò}ýݪ©§ËWIó+·ž¨²µl†˜‹xJ»Üøsƒïóogý°£o¶+ôU2G Ë&\Žåôë¡WúYõc03…1çx½û„òB|ö#Ôîa€nØ÷ÙÕQ²ìf&”Ÿ¦U_—›+6*-ÙƒYï `ñ9ËŽ'+]Ö\±]Û+yêrüp¸r3ɱYÇ–D-ªÞœítª¼„•ÊX+_ À€M<¼·\øº=­Û^Ï´;‰ìëÈÛª¡RÜp;*Ÿ˜b–‘•Ïæ8¸÷P Û0ïZˆ½™pÖ\‡g`ÝôùŒ§ìz# ”ÞÔÍu6¤}? ~ˬ¨À‹G>$ß¿[œ®š_ÈÛ3­Ÿæj3 Û Ù Ý®jÅ¿²4¬LäeÀñ´÷sÍñ R¾a1C2¾ÅMam€ŽÂ­Îæ-¸%4I O"~",§D*ïýäã{PÌ5§E•¼›Ö Wvýtàû+¹³¼~ø.ÐÌs©•ß4Ï}V/]+ÝÍÆï”ú¼nÒo`Í[ݾÖ3$C~“xJg9Ø)R,#ÎúϬúNä¨p:'õv¬(É™ž¾{jeÊõ3vç·s=Ìó|˜víì!B;-ã=œî3Vû¾Zv3dº’¯ƒ€õ"ö½UgsªYìBóYÉÔý© –Ï¡ù“å¸Ïÿ¹®Ó–:¬6€kþ‰hçl}ùDôzðdͯSÃw{hôX?Ö¿âùþ»|géûåt8?M–ÏC'¿ú<ÿ{^~ÈîÕfЯùòÙžûJIß‘‘{ÂÌTÏï♣lF?L¹‚Î%1Xû,ÐøæøùUgö +œ´ðŽÍÛ ¯/kî«+®qÃØ³ä¨\…I[¦t gLÚŒ“]äcôhš× &¡“v¦PäoH¡‘ËY2- ¬²Ýé=…§Ÿ!÷w¦Ð,Ê”.K>·d8ÿÏÿÉÄ40K~H ‘ èŽÅ4¼²Ë¤bŸìD+mšnÝÆ„:üµ¡¹â™hߣ(Ux“T~f!Z–s0’å’XCt±È`÷q»æ€³6£˜ïøÎÎÂïz©ž‘àØ,cgýpÀÇÖLedÂ,¦ýT&ˆÓ|y@v§¦„u¯a ð…W7¶oý"” ¬¥í¡ú”g–c='ß#G%Êç“Z.—¬i‘׺u®N;rÛa×gé'Üùô€¼õŽ<æNÜF|fÝ4_[êŒtÜ+™,«JÇí2…YoÍý,]¦Oðœìš®gÚùéö](eY3 -eaˆb'3ŒD1Zð¤çAÑêùœKÚeH¹Ž Ï óm2ãá;³b2äèÐríg )Kª¶ìþEÌ”¤õ;âá“ñœäWܾ‘ä_y­ã,[Ÿ¡Røº ¬­Ò²<Å3mQEħ´Ëc’ÿ¦,&"*úU3L† -¾ Üß)iâå9©+zAø„#¿«IúNÒËwÄ3ÏÁýóy‰÷-ž]”ó[˜GßT<ÙÃ+0ýÎÞ¸¬¤¥lþ0Þíd½ÛO¯i9ÇžÿJôrßÌ*Œ>GÞû²!ÑÕ »ï„7­ÕÓˆ³óñ3³6ùFrê€Zns\¸· _+çž+ßjB½ùë¯ÚLQÆÃ°DŠ73EJÑÙÜ9*{U#Âi·ë–¨yRÖ@ïãÀwöÙšun1ÀzÀå)ƒQm`&æT–ܼUö3fîM‹amÙ•"rÏÙC'kÕU¢ƒp"fÓî…U„Ó’ ¹í0»«4ˆˆçŽaÐrð‰…ÅGJÑÒ‘Öå·É•[808«,'RœhîÛ«|E@œ4ñnu¹ »]ËóÉ}kZ‰ a›Î·Q³ÉÍ4ª¶¨&Œu³¶ P±B:,ŒÌÀO8²¥6;WÁ•\;ÿŸ6Ü€~‡šlÑGÕçj§Ö$ÄpæØLàIÌiKmK3ï­9ÍH_þô§)G9áûsœ!PØÁ— .{ØÐR–.«Fwsm3÷œ“€u-ÀÐÄ/ªËïb£°õjÍåæ;o'm£z68Ä<¬5}¾yT²›ÁÏàdñøkøÇТStö”žþ´¬«› z`н ¶ÔR4ÏŽR…}çª2Ý^K™±´ #W-;ó«Š!m°¿>3ÝSö¿ÿwb&¿ºªsfvÆý9û~o`½‚òö³þ÷뉿kN}Gó͸‡S™åžäÝ íùk½k*}Φ?yõ;»çg ô? ²Ÿéà¹LùÓ˜«gEøYÞÃ÷ï¶ÌîSKŸ5ª¾+X²µôk…úqvWÑíûA±wgX‰NÑK—=M }Xö¤Â_qùš&MqÉ«Œ£¾•QŽ 5Ãpùy•ý²¸ª”÷€ï Ì–‰´ÓÊ-T’eW0“*%Ä0aÜôä¹9íL›”(­ýXÕ´à(@-ݨóY)xŠm”ÄõÇ]ÕZùNÎ!•~j7T„SGdeJÌ®õ4!š~azxîþL&žžÔÿ̘6ø{mÓf¸ž˜=H©öÓŇEÙ/„J†ú”Ö@Ù“ìl“nEàl«É•î¥=}Cy`ÀPâûÊûM"P€~Ríea×RAÂ6]%Ó¡™=k‘R­T8%±»C!”ö;Eëßa SéÎlFީÆœ!À)Ì”ðµÆk&]G>‰øa÷ÍËG‰žÄ÷.„»àŒ~€øäµ·¡¥)rÀÝö Rxæ%Ìž#úXŸžúu™aÆzf»â=hYÔ,{jí{+à»ÉSG¸Ò¹.¼#1lzwÁ¶Eu†K2$XïªÂÁaWAíá’í40/(éøó]äÈ›Y7m¾Øœ«)YËþÛLœæ`޹cOû·Ð’˜žAÒ_‘WIOªgµ®!H„žQ´tIG‡©ê½´’É ?ˆ¾/æÌÓÌ=e¢½‡)@íûïë$™ü•ï«ý3‘L“¼bÜO»çw‚ùä®>—j˜ZÃÏþóý|¦YÁŸ l¾Ÿ¸ò9À]ßãK.X_ƒþçïú~ ÿñþÏ9|×<ª4èk˜þÞç€y±ÛëÖÛ?þjßÉ ñ#§™©óû%cwÖÏ›õ[FT atß¾….S/˜Üµì‘ߨƒßŸË§š$²Û£bOî{rf¼4·1T­|–”4E_n™” 9êÉDU*5QB³Ž-Jâ”..»}”î™ÀuÙGÅ§ÚÆP&áo$1ìl£I+!hʆ4ri½mßvFßÅ:À œóй…dÀ³ &ºyâ)›o®c@ËÄË¥ ù:Ÿ$ÊWÛO©¹é‚*“s¨ßÊgÞ³N¾¯óÖ Ï~•7O…7<(Ìkëâ8Ä"Ùœz§ëøÝá´ 2@<ïÅ_KØVFÛÆt²ŒMSòZÏ~:íÛèÌÅtö·ÀÉArKkb´ #n¢Ë”–Í:­üµ+¨N¨ªâ|­iPl=Í©ý˜çú$¤Òo'P¾ë½ÂÁûwB|G »gФЙ5nÔ¥H0ë ®yjßûvÿhË®º `v„Ãn9VoŠx•.lê™"ˆWƒƒ´|nž ={Æ«ì T†Õî´m¸o*aW®KH‘äz|ü¾\×BŽÇYDšR2·f°AkÙgddîe‘¯œ´×ë%†`>ÃëÙxæ™/QÁ+è©i~¼Þ¥¬¼ʯ’×w¶û4Ë:©þ$'çÝÈËïHýGþÔrúõÞ$à6,ú•úõ÷Ùa‘žEX~WúÓÙ5@»Ð8§”œŠù+°ëOú“(¨ë¡È•âmòßOb%O‘ŒfÓ Üw.gå÷ ªgì0ÊÞ~—Ä÷ò· ó3ÊoZ×ÿî­Ý7Ù¨ÝÙ2 opX8nK²5æÌp»IïAb"©jjƒ©°>ju·ÜcH½ &P¶zÞ5¨ç¹%„Ñz«ºÀH¡NÒßÙ~>Iñýîõà³e°å(G­º ¼­<Šj¾¯]ÅîQ îëYͰÎdúˆsšñØc–@5oÝ7Zö÷#åÈù.:¬³e-‹/oÐ&Ç W†>]¤|þ­™zÎÞÖΫÜìþ>çò pœ‚!rë­»øDè³kÓSrD‡®Ÿ?ð«ƒ,»hiæå›mÃk+ÎÕ÷y9?S̳K,¦17Þ†ªa·ÉF"Ò 0w ¾ ©ýí(›i­üžßµçkÅöªàd¶±ÆÆŠ^\pŸ^Ò5+µúw­dZgC@ð´½®u=@šÂ'(ïÎã¿û™ u~fÕ´óæ …$;l2|œ±@jÚ¬ghlÿ–Yæªâ¼™×Í÷\¥½zpž;Ú¢¯r l¯êº*ð]èÆA<ãµ{™ ¼ï>¢K]ZèrÝbþZ aõ{jøÿ»LŽûû,5Ó üÛuÀïêÂ÷=Ͻ=“Ç8â_'_XÉ'É량[Þɱ±Æbýï»Ò—wzC¯Uã—ÙÒ4_õÎ~OäƒòÌð¯™o˜­kFùû©ùW^²óœyêOl% ¾¿v|–4?‡œQJÝîa÷}݃ӵë6—&ÔLvf-—­dõ˜éžWœËëB(öˆTe¾@µ;|æ‚.¸Zx™ÜäÕ;÷=9ñÑÜ&P!7Ä„áhàfÝ\öf^MÖ¯­þYG˜áÁñðýá¿'׋Â>Ìzüòß|©^ çm–9¶KbÃF7O/‹Ÿ’¾¥ d;9^9€´~›eÃÓ rRá„zퟬ}dÓq‡ÝÛå Ó»=QYE祤T¯C!UÙB ¤/°¡ñ»äZ§ž\€ø„$jr lÍñÿÝßÍÐh8þ@öŽ 5W‡ãIÊ@å,Ö³å@=Ê€ÇÙÉpÃ=_CóL\‘O ¼ÚŸÑËŒÎìãÙ‹™š9†p±6¶¡##gMORbfd8õ5ñ¶Ø©™à‹Üã&e÷YßI,<îd3Ñ—°¤c#FZ2l¦ð¬ »\p™Ê‚Ôé@…ä’ƒ_úþ¨4@Ÿü:¯î{tvHxÝó!±VûiïµVi¹Íúü{¨ÐÀ½‡vý]ô9fÅÄEãU¥Ó«šw£ªK¨“\ß„Å\™Í1Å+¡æ~®öI…oàžØÇ*ÌûìÞgÿl9÷ÿp¿ÜŸ‚Ôk~ü]-øwd-ïZQŸÇY~ÆÜ¿ËRÿŠVÔ§q‡ ÈÄ›yònÜçg±•Ï¡ö“w÷Z„óÕñ ïm¬oýÌþâÝ"§'m‹3ƒ‹¦¼3d^—;¨êãxrä€{ô”ÿÿòÞ\Ž+Yhh(j(((j8PÐÔÐPÐTPPÐTPÐPÔÐPp¨àžòĉÈõªõ¨néÞ_ß7í=½{W×»"### W†-cÖ©{¨SÖüyœd²Ó¼sç`Ž©—Ý$ްKSœ“D8Œ§æß’yÁ=ö2—T ,ÞâVÏÛ}þ¼Ôó r¢m%¤;âïñpÀü4€ ù$ùÏPh:oïˆKäv“x¬É‡˜À” £BÀ›"€ 6ãK-©–€’éí[€f¥+ ¨Û¸ž`ºtƒñXºÇpü”JhH»0#»ÙȺÑK‚uiÙiÇ)æž?Ëáž²i£±÷»£S×j”ÐmZž°óø$‚ûø$M*båÑBsôñ€,G^"Tä+‹”€¾LÌJbÁk·ÂôáQ|#Šg|`¨nºMdà•"Yˆ’“YÛ.þ ó«|ô݆ RÀË‘ìD܇ ËÀ¦2,IáM¥“L~÷ÁB—Æ‹ ®Ê\>yzn—B¸¨2w?@ý½idÊ@m‹™ B?~ž`‹ðe3‚õ TRj/;‡0œ”w)£'ªf-LaöIÂlòÈç˜Ð]‹'ˆ§¢ºY$E¡¹ûA|ö¯ëTÌOÄýççã¾—*º§Š¾Ãþw—™m\õÀydßÉ̽ºŸÉÌÚîJhPq–⨻ÝåK‡–U½û½Ì ªö5å#æ{l4Ù÷îÅ>óíÎy»B]8ü-ØdÇå–ãß%f=ûÊ{ ‘½äË@(—ÁäÔ:ˆ[вÄÒÄ|g ½g»JÑ®, ³ Ö㯬×ëÙ®å„ïðÎ^ág@hڇݡ{–KÐB¸/1ÿìã¿™ó–ñ¢Ú–?s»²ï²4²Èx‘²È·”~úîpºñ{ÞDyL %Ùð’Cw|ÞÙG€8i¦4KæQF»shÏyz÷«q î^ìîP壸e™×€‚5èÄsÙ¡Ô–I®”ù cŸI pG?DŸšcYC:”Ç2]À“5õê™²Š¸g,±+A°7öm-ápÛywúÚ)ßX÷í¦ÎÛGBE ÒÅ0®Åwé;'ÁY ^úƦS0G˜Ò™QòU#Å^H¤ÄýÙêlÈýI£¢ý~ÞfàŽŸ1w¡«€£·Ñq£.Ò”Ò@÷!tdèÌwwvÏÇÐkžÞ¡Ç—¾‘°›ƒ§ ‰h@‰f©tç“N¯ÊO-Ÿã4ŸtM|ë“×Ïñâ·>»c‡wKõÐPfgà5ó½{ù£{à~,Ìx\Á°_쿎«É5YKkmYûRòñ¨=Ór1Þwõtð3­´UæÞ—™ß†!Rf ²ñ 8KÜú jKýz)§qŸÀÝq—Í€%‡—SW}L?Øn®'â•à m¢:\[·ôTT‰^²S  ?!»–@½»€;Y¼úØ“Ò[ù˜¡O ”î %´¥¥¸y• ÌdżÜÓùNé³î, ’†Û­³à¤îÊ‚¥I%ìØ¼-;Õðrg—b‚!÷rCíúo x ñWô¶ÇÚªtñb†ì{¶³ÌÛHÇ Ê~(졜üºôî5gìLvv#‘êÚ½á)ƒ”áVýêžñø[üVr ÿIJ‘;Ò ão9øÈ¯ l `G†Õm(QÄ’ÝKp}—!ùšû(0Î1?]ïîû ½§äº‰p™ÅIíã︮ÚÝcÜë=GYùd‚® ÏÊ­ :Ýï¼»ÒLu$Ç\NБF ½»³+à) {¼¸ÒX˜áoëôÓZûî Ÿ[pGAäS<“åLïÛâæ9•k…^Šœø›–þž2›þÈ2 õ {ÏÐïÆ€é­kebPâèùÖ=zÀ ;ë²Ì Ó3)VÓjø$Õ½Ù³ÉèOíæ'G,{ÊæÊ}ˆOÎÉlF1F'aCÓ¯ïù«Œ>IÏëà>ï8ëåTsÞ2sû§”—¬šQΖ%ë¥æ]åAëg·wt^?ëøëÓQb«[Cª p‰‘¿ÿúµ‚ë1>NVCLGcÝc>ëã¥Å/GT5+.y oÔèt}<–&¯qó¥>6‡PÝN˜ÀÍ.øu‚ugÓÑÍǼlØ[ào÷ÉjC”"–Ý=]Väø&›±&|¸Êé\â%ªRÑYzÃã3r‚÷<$CîµLצœtžâñïî7Tð ^S)Žñ\z½Sï=ÛG˜Æ;’¹Ðˆì>¹m?2À뙵Úrþöè%À)9f“æq M8Â2ƒPÒ¡*­ U x©Ë?ÀÂBx ‘ÃÇ>øè¬§!v¾nX&G{Âä3郋S§ÖœºKbœëõî‡sØ.}¡‡Œø]w•qe¶`7Ó[]Kí!P9HkëEÃŒ4“D×Á»› 6²­A¹3Ù°Vdºªz&<²Ô”sÏàx±xPÊ©9©Û@þÞGK{¯ÀÃ’°üìɣ˕è9 5ÖŽ9Ê¿Ö=‘±Îè)ùyâKSO9´UÍã§>íÃn­wçȵãþOvï¬RÝî&Åžâ©ÞmiÜõªñÓ—/Q Ëùmc >+"ìî{Ä“ÔÒ“bàÞàR‹}®Ã®ÝTöüOýg>ïºq9¸D}<-hÀ…à>.ö¤VëAe \Bð«o)ƒÌúL@ôþNÛ²W$äP'¿)!P˜mýxÄçø§Ò¤Ò«ej6®#P€B•T¢K„SªáÙÕ­Ù?+º*ãùy°ÆwÒÑ<Î\Bv€øÒñ]†Œê/úã!X/‘|ˆÉ+gïnÇCKBþÌf±À.¼b¢PcÄ Áù-îm wB¬!2úRÍO ˆÿ'_g·b$°–œ†Ò ipé#áÀ‘¯Ôß{–*sCå]Stzœ3TÏ»V^½òÇ-%¿Í«RÕË[Ý»ÞI`©‹RåY:“íº|$e£_œ¨ÃMX†Ü‡ÑZ‚×€†ŒaR7à 6zòÄߢ•0ããaoÐVÊo™ER2ä¾%X€r*î!Sƒã€}Ó äŸg2+Ym 9|f€òÄ0çÜ{-ö]’5÷‡ñØ&WÃ{y–€o—ê,l ʘ*>VëeŒË{ðýmbM²§»ûª¥3$öš©3ìŒ?S¡g %..»RçÍýþñª‰Ü_¾ÄYÁ˜?qÿ)ÝuwÍ.^à½)È” Æs?ðs|FF%¬w;õŠõ„Âó”Î3+då’¤\Œ{ïC«–Ž'¼ìª{ú#Øú–ûb8quµ…îî™zþVï¯\¢ AÏ+fúÜéü𝠼[î.{¢©ÿ–Õ¾ÁÚ@êÝüº'Îæu ß\{Æ·º³Ý­ð¦ÞöòÖmAÉfäëBCršrëÄß+P‰Zy@pÁqw°‘ˆL¹Æ^% òWZj‚}gn«¼eäBCQÍ«W¢àÍá×xŸ’ÿŒûyK0C×Bmql»|ß¡zW;X@.3‘m0¥K½€£„=bô©Wv,_åÚN Ë€ƒˆ[Šd†/_Çé*sÀº”È‚á±ð>e- cr Âì$¡ ßRÓ:pϨx ½ˆ¬àw¯wyÎ88v(OWìc_KÖŸû^7Ä€•Œ@’ûÏ3.kp‹žú eP(+á÷—,“MfUʨ‘ë¬Aäœm)_BÞj<1ØýRÿÝ’¾@ âÂ)Å]Î΀`7•Óî.·€Z÷Ûñ¬Ül%©áZ9ØÐÀÛ[ÃácðÓ€ãØjv<àtŽ .çàËœTçãÝ9>û½àu¦qæÀ'ÞgXIÄF¿.¥²—¿{ ©Û€»^}dÙ{†ÑñÿâFˆïEµº1Ü:\˼§Qâw^ èû7Xûª'i¨c©;žüd¥G°îæŒ,ÝUÆá;Ä}±kËaæ1ùÞo÷yw”1ÐÉåQöâPg,ÇlýŒ‡Ìê·Ì$È>“ûŸ—jÜ[ÆÌ÷yo¢UÙ̪4h>¯t}ú¢Ïv_MŒÓRïýtn‘ÚŒ¾¦d¸Wµû®zÏ¿%”§}¤ {Éýçu/B­¡»¶»÷|ö–aÙÜò®‘Xˆ^1%Äç­\nW¥ÓKìQÀM¯Ò—€Å‰Fèãé¹ÕK5<8{>`”Æ*i 8{}÷ŒwéKܧë¹x&wÅqZ QÊWðH@ õN´ïõ÷¬Ó¬;³ëzhw’Ôö¸%weQª"©óm¥n>Ä2ˆt¯$ïBPÓ cD¸ÜPüS ?|ÔµLpäØíêâ¹ü2Œ‰&wrÊ÷ÒÅ-Ý‘Âi¸ΰ"õòÓ'õèìáeUVc‹¼'#_ \IÞ ^2¦à˜sª«„rPÉŽ.|’$½ƒaY‘”DÀZI€ð[ÌQRׯ‹ÜvÍ* £Èt ‹ÏcdÀ¸v|Ïòpv‡¨&~ö8$ïPîRJSTB0 ÉËQªÏ•Éšž”;‹W)øÅÜÇ™àº|úè{Z°Â¤¸íQ˜9p/û3ôq_Øñ?ö<¨KñOîô¯{šc0ÿC'v– ÜÞXA¿Ëc¤tw™¢ iÔû¿0at5Ë/I¹•¤Ä3×Ïe7lX·TYîc`ZÇ$ÍñëE¬êã÷€òžÿú¼7ü9P~œ0¦ç×>ÏÊçwÈ\Þ7‡Ðs3Ý+ZÆÃµg€Örh à†tlÕÓ£Ï[F^u4@C`JóGY1¶×Êùï×Þó£•ÓmÉèg庌#Ë qít6wçx‰^(b¸ˆH!Iq"Ú^y·»c ‡Põê"ÿ¼Ã»xó“è5>ËoÉNðú.Écä*C&D)lÚèco;ç+¾…¹,¤á߯ã "<>½¬ ’\œx£™.4:¡øÅ’ÝçPÒ[sVh ])ë\;‡#•åÒ9NH‡-kK\ƒîì®eºç½ï%%㺲ÿÍŒlBª‡ïr§yß_ +>PØ'øÜrÎ]ç½äð]~£üÁÈRð£(9àÓEf]Ò  a¯©wDZ¦FZÉøºÉ¦+Âñ[fR"RÇᾘr e"ħ­k߯þkÎX¦›-:£ŒWŸðŽ Üî='UzqöR\Ï|b×Á{F©8c·Y¤Žä1-u'x·T?ÁÝßCü"á yz/-ÈôsD`¬ÿçÏxÇ_]ÏåhèVÚzù¯Ç~—;Tõà$^¹>/ö±Jꌹ>ö¡+þ=%ÈNàîì>®5pBcÑw>JûT<3CE5 ª8Ã%}Á=\,»žM9;Üß©ÓÍ=ã|¸èËŒÒùAÏy@_rówÀëÖ_µ“DOʆúß 7ÿ8žþн àÉÚƒ°ÙÝ•__ÙR@ÜÖœãï’îœ ˜‚Cþùç üõWÎ[ÍJîGøÒ´uç±Oq#Óì [ßzJéK°Uí¿Öúà¦=àŸ÷¤ÕZIÏÑXŽ´Rrø…&WÌSãžÙqpÆäuÜžœí,Ý7Fy«z•ð¦ôÀZIôâl4¹d™BæÀ•÷`Ó³/ =pðI9·q÷±ÔÒž’K •¤ø$jâ5 Ë Æ¿dÚÈm¡ß<ׇaFÒ° Ž“?8À#ÐÁ±»•S½ÊÇ9¡¼SgÓm ŽéaÂÐý­D2Påì~vÈá`«8< ´¹,Ç·‘#u$\àóŸxOÚ3žûè{ÉA¤ä(r¦—-£ïgïpr@pJ¹¹,9|p9÷âÿÑpÓæ»=)–Ó’qzA?»Å-&_§ä¦îE•”gx_.A\5¡0Í1Éjg~øí '³.éˆ |tµ6 ÌqQÈ …h‡#¿âàL¬sðT.éΗs‹(C’âã3¾7ø3¶]C«åK—•á¯$+’ÃÇU}¼ÕÓs}ÎDžNîÙzRÅž|rè…­Fâ5ž\„ïðªÂ]QWO¤ø F㪞i çY¼~=mÉ‚òëR«ËÎAhÙÁ?9š=»ze‚øPh=JNײ×ï÷rR¯Øëxh¾xA'é~ÄO[Y®×ë° úÇKXåà¯>I‡Ñ+¥ûèUîÔ-§üRï¯Pæ|uîֳꮼ7N@¼WÀu0Ó¼©e<öã6¥/Ò÷fîñ¸´ÛóBâ ÷?™÷Rë“>T”ýdj'7Ò*{ º!ÆÍ;ö-½rÿñ0èbë1¢ª•ènFén»ò›ç¨«3œåPTµÚùgN  EV/ç,ª)ï®ö–<†ÀEé³„Ë 8Äà\ãps¬¿÷%|ÉÎyçq^A:¯»dEûÚ¥W ‡²I"“ecJÇ·P䨢bÆÝ’²NœeW^àñ™š#'›ï@Èáã’ñ’m8('¨Í Xܼ€>–€ÏˆÝ‡ÿsj³A¡l"áãN±Ab² ÇÁ‹ .cOÖ6‹¯„ÎJi…ªÞ9ì€×— ‡Ùßh$[ŠÏd^ò!¼ƒç×_AÞ㆛*98iP÷¾àîÏ©EwÑûŸÃ¬9>Le ®¬„^ o*•ôü.œQ$5xý²KÉû$%ˆ|÷·ø ¼²h÷þjV½g(O˜Žçç“8”o±ìm{Çö+é§aÒpŽ@¥Ëú™zJð^ëÌz8~ #Ër(sìm¿§2_ഺÚ°½÷û¯`\ ¬Ý–†£?×–~I@þÖþ'C,o”I÷¦¦Õv–ô¿o'§z²i)wÉž-3ÅÀÖ÷5î©sTS¶¡”Np„Œu™ºÊ¿ÅlŒn67|ÉD"¨H ^Rr‹w&^ðÚz‚od¬*ó•ßEç™ò5g¬bùR±«œL§=wJ>ñ5Æ*þk‹:ÌÈ-Þ ”ÙçÞ}âå½ æ^n3þõâ'çhŽú¸îÜÙzÇ¡¼ ;×Áµüé€eû˜™fw”Ç6ÂE‡lï3ˆ_çI¡Ë#R—,â;£9²¬oôà!÷ÌÁoôSN§0£àÝY\q[´,o\ñO=)ƒi²)#K0ЀnøšfŠ¿wÆ´öQaQ8ú4K÷÷ìЏdÅR¤Õvù ¡¹x\Âú¸VÅ÷åN`Š÷±uŠ7¢˜ ‘¹mˆL(á’}ù 3ò¡[ññ£ý3X¨Ø.¼C+LÀý8^Àа2F–]ãŽWˆpèF‰ ³",ÎÃðŒÒݵWÕtŠ¥Ù,U\¾‡îûîâÞhÈ;O¹´’PqýêdŸM–µ¼²T¨¾S"èåò¡¶´ìλÖÃeË?#Î>?%QDýýwDNMßµ}ÜÉnAžßVÀÏHkV]ÕÏ!ä]~ö£¿ji²ŸiÎxµo1ö„®Èé@íÜ«®»Ô³ä(ÿŠJý½Õr´Tþèc¿—¶ÔdGN“ÓKe/ÄáZËÞÒÖ×Þê}¾ìkךìõŽÎnwŽÛH™££|¸–$Bd&€Ê÷=§«Ê©]P^ \:u ÂÆ_epïC¨²”ï; 9ªõñ[YŒ(;/HM©€”¤8Œìöø'ªØ³ï{6©”ž[$ OóJúÞH–ÃâQI®€ŒÝi'¤p¸¥CvçÚ šÅëÌåh6}»ÜšƒÁ•äC;ôáѺ‰u–s('Ô=`.£ ²«ü=Æ @Ã]„럅c7B‘\ûË …Cá·5”wu>ùEø~•.¥™#Ö€  ™û$>ƒñbØí¡ð Z@Ò¬³ýðçZ|?÷ÜK[óü­øZ:ýS'­H,Á"ëéˆÒöѹvBj7—”\ÇwæãŠ­÷Üš­G€Ð\pÙ=søI(òõ·€kèÇzïÂ3Y½“à;ø¹Ý% ?½›â¦œXŽww|WŒT€l\¹áhOÂ#½D|@œ7“xգNj^}6KõÒK\;K>¹Â»Á(½žPü—¼;Šd–÷r°á@ªËc⓲€D¶aº'Q¼°ÀºÓ‚‚)­$’AQ,y ÌÏäg%÷s‹#“ oÕp‡Š’•–`cNú²Æ¾¯ª¥Ÿïè²ëQí=Ã<ñÑ¥×L.ûõíÊpù^9ÍÊP)n¬¡¥iµ´F¶’Qu%÷ü˜é#ònÅs3ÐgmØ4‹[Ä(” ¿EѶ›”×»Æ=ù[²¾äüùس¸-fß\gâÅ…óöZ{Î(æ)›H¢£Dß(ék õî-·¤üFý]%d—{ŒêòWÀS´˜sœ#Ÿä //˜|Kº£1Y ?ðpªjòPl š#¯‡P)w÷t3­—à@ÐßÏAQ*-°VpÕp®eL©/§ÂއݙÇ{î6ƒâŠ · j‚p|áSbÁ\‚Õ&@_>¸m±à’÷ÄY‘ÅK—Ų{8Ž/Îp”¦îA䙬Îʳ¬*û9®•w‹UúØÊãz‘óŒ ýîÊ܉,D¤T â™:’‰à;g{ 3à)òò%¶<:H( Ö$—̈·ÆRK©ŒŒã’ÆXN±ww1Í«æƒ`<Û<öx¯ïoÝæ^q‰¸¤JÁ:µJ~ÖCæ‘eÉü’iS¨èlÈ“8 Ò–'9X—Àã/YÔÑò{YGÕ*|°Å3|†Ô(À"A[[ŽÎiÜ5úê 6xª´{¥¥ci Y®C.øI±érÂÉ0]Jwš0æà§ìæÎ‘S2ÙâîûŽoׯ K8Ø*ך–ê7å,ã¡L…îì>› 3oäët,Æ2©æŸD†»–â(íÕGZ©ÅÃXp?ÞDÙL\€°®^6øh,ÓO±Î¢ˆË1Ê;Ň8³V[n9x‡À£ÌeÖ,4A¼ oþF¬[Y2Õ£®RÆ0u1'΢dr@ÆÙñˆ4Ùx@Äå+(9RJ^4ç€ò8ªîZ]äeÃP–|½„Ëîò²òÌ~5¥W½;̸”Å!/5µãd‘kA‹;Ç“•Øã’¬ý»rPÃz±×€Ô´’”²ÀßA 9r rd£ÉB….4ð̑Ìo#–S‹gX̨s‡xzäËsÆ{#Þ“áÝG8!”Byàb'/ö¼gâ%4—SºHÕÖ®í~i `â ¥ &)€‘Ѱ>à *™<*Ášï“ÜqƒÈX#äÿõ_qb÷¿•}-dM©]’†-Æ=¾§'+Šóyï—½÷ïöf¹'õ¼À8±¹œ`Z¥Âû±ú}oø;†bi•ˆÇvœp‰A:ç¬süÜø)5v¸Y\sçŒðà˜i_ÜB€‹.` n£}†WA˦ÊˀׯqëÃå {T\%°Ö }–ôHSÞJTåmÌ ã“T*x¯€ Û]xÄ%ï!àÖ'=‡UŸ¡œ7wuòwøê×3ûNõ¼Ãk4²qæàf<ÝO†ðå°Š•g„[ÃñÉeUF;Ñ“^ƒ\Ù—£`âbS²©"3 [ÎÙPO¬6E±Ôœ¢ªôVÈ`ðŽ3ît ÈâZ|^ (¸§>¶ÛÙ›õRÜâˆÀr,/H´u^<ø˜,A3|{Ø dˆàX¿Xs¨“ö÷¤tü” ²{žk©–1¨†žY´èlQJe>OÊ )ï9 írwÑ¡ß< ÕÀÈà–.+þêÚß÷w\|Bu8rL}È z\‰?”•ñú<@³ Z\%ê„1[±îJ’æºev¼,-Üc'Jò^AëI×Äû+÷xšp 6OHÄ¢YÚhÊùž¢,ù¸{Ñè© ­°-ùºIeœŠ-@AjÀA<¹y@|6eqå4qG›N‡™¸ßziÊw\­.Í:Ÿ‰F2XS㪠„Ðñd5#}Án ÓP*Óòqw¯îUH´*ƒ¹özo uzšûÚÊðûÕŒ ¡ïGsŸ c[pu¯™£¦HƒÎ(CÜĨLfŒ°¾îyäà/ 8öðµ /Æde¾©W¼ã¦œÌsU’3ëtˆ§úœÂY^ºªž<Ÿ {–ñhù>'@ØïÃpPn»¼k”e˽1L»É@øÊOß(ëLÍ'@ËÆ~`¨†óðêé¹Ê¶Ô$ËÆÏ×Ö³ˆXwKM¾ÃmDYÀ"ǵéd[)7⨢‹¬²G»—¾ç€§’kÏï\Æ_9¨uy‰÷Lwn>ÛVj îxã|9Ük\1µ¢¶Æ‹`»%ŒÑ·ÄsÛá²–P>>僧Ø.É{°¶x¹øŠE”nO–ÖÜÍ7}(ÙY|u'ØÙP€Õð> Œo¤Ÿ}l«»¶ûD Ùw±§á¼uÂ{†òè²K:›9xõ´ùqÃÇ+€Þ³iÙGŽ *éÌÝœîëî.8TxÐ^[Ê€’ÞÏyçBí7 [Ÿ£G¯Ç"÷ÔÞŸ–ê¡$ìYP2¡ð)°¶¥Ç¹˜o¼¹sá®\—’>Ž9áüÝ)ØÀ›à24ÇÅ¥ Ò,2>I¦ûYáP.žáçÝêQ>^$°ŠMwn˜¥”wjшÀ·‹|Ì”Cu´›Ìj{~FŸ@sŒqÏØÛÎÍKõ+ÁŒøBÙÞñœäÞ(—€s,@aô@–E2 ¢r‡{v-bkðêàÌÏ f—ª(’”ˆÛåI±÷žËÈú–(¥Õŵ餺4®êÆ+#Š|@ûÜ}ëß#ÇÕû.sç´›t<€¬—ø«,VQÔå( còœ|Ò=vÀý¼ã•R"- ¯,õêý Üò´TW¨ÓíGŠyÌIºOŽJ½ ÿ{e¨„ãÕäev.È1< yŒ†V½ÄŸkøN°Þ·}ô$XkˆÆ1s} 4”*€X÷€÷@(ñ¯4% s9Æ6ùÒÄÊgM¶›Ç‰V€”„¨äC“>„J‹F¨u¹nÜ:2v‚òÌÅ0œG;IÕ팠ÿ þ˜S5èÏŽ49¸Ê³oÝü{ÄA %@„/ÛˆϪ_ âûùIæ[Ò¿L*d ø EJœdÐÀ+þ {RE8ßå½ó @û8 ]¯,óJ·Tj,B©Ê$W¼fW{O?E‘ x&ˆXœ«vO/¼“¥ ®ž— îlþ^¡‡ÆÈ¯kÙµ6ÿ­-ÅO{@RÛv Ïí’1¥'N¸/;g-0ªs•Œ¾®;:G¡«Ã¤U†£qÔÕ]qœ¹WÁ oùÕ”À=9©ÓÅ.™zhdåyžÇ}X"1·•« {‰ßzFdãàl©Ò7ÿm9…u— tGã~Ü[ÞØ×Šö=6ýDr™ù¡5÷çCs¾²åÝÒR?_ÞCwð¶<éû¾WÇÿânômà>ÇkÜoo•ɵq»3ÏõJ ¬ ‰j}üº{ùíc:%` ÑêÍÁΞ‡šK‹¶DGüwÀd§y¨´©Àv÷w„Ð=·4tV>{° ^=:yôÊSY®Ð% i¦)È‘PËäÕP¬FcåKSkè åó,YR,Îî.ƒ‘Š]='Ë:÷OU7¹m·EƒÊ™@àÒG6}&„ZyqöàDý1Iø`-ÃD<Ô]ÜâNêü«ø™ã§áޮѻ NÉJSN67Ãq¢^xøº^œü·ÜÜÅ4K‚2C }ΩõÐ+å8b ¡~¦[—t½ŠÐëPÆYO_H&ðyw­ÎÙ“ùXÓ×ÇW7Ê$ï v<ɵƒ”¸¸é{#KÖø{€@v|„·Þ?8CÚ¹¼Ž`¬“ÜÀ×zäîFàé!äà+º=ñ³ûϪ žRh$+L”ÄÏý„-#îQxÐ ºw¼JÕÈaÝ}åq§õVŽ·êÚ!ã.P´•ȇ"%9½°‡ ­óôß\&1—”ž6„ìԬDZˆµÈ™µžÆŠã[‘Ý<û_ÞG<—TàJñ<IA=èµÏà>©ÉgÜwWoªœªH¦,•Á2[~2ûÉ-×6pï±æch>?6:¯ðþvú9Œ8ëÈõŒÒs¸¼ä4ï»ÿ8(ßS·ïg²Î}Få;·¬ =wªí=[É6(§ðcf $%%õéYLÖ²œ’}/‹â-¨T§Š¹Gó@';Ý~ä9Sš?f†žpÙå4º¹»#sán°è%‡8ù/ÑñF?˫ǻe&«+à}à‰@'[žÅZ‘ƒí’-š|½' †²ì)±„ðIu,¼Å¨’×_ÅCÑ¿ ¬íB0£4V r|ÚÀ2blÎ-îWãÞá>Vë[3ÐÛè‰õWçÁe!z¨‹íf_Bņ»î¸ONöf‰Ÿ•çJ wÅq Ïí­£"9¼qåYBhÝ\0 ¡O÷¶§AA9‹wŒyù2΋XÎy”pñ#7ŽôQT÷ÕörHÆ|\[Ïë%¸÷1_Bßoôkg¡@ßWBÌyº-Î1· ô­æÒ4±@éK¬³1ƒ¡Çz 8Ön9p±ç]ãŽW@sø©{v©Ãwé<<*J‡àÎOã•àtUg‘óîí/¹E¸RØ€ìsrÇìv»Fϻū—UØcì9hM2Ç/-»¿ï9¬ÎÄc¸›;¹ö²å6š.1Êf¸¤ 4š‘ …4JKÍLî9-?å÷3ËÎÙ'¦h£lÌi*ãWÐNêö¸Æ=×ýdîʽÛC¦õ:Ç.¯JGVC|VDAê!Þ]Õ#9 ФRzÊD8Q¼ºÛz ܳ7<€¯ä=̆W‡ ÇûÖÇv ë!#Ñ$€‡ 1CW¾òÙ¹¥4dô)ÊTîQ•>÷µH{Û;–Œ¿u©˜‡.ùVÔ×—g»gA$ݲ'À‚A²%?¾~¯`gÞG9c•yÕ¸.(ÚAR f$ƒÉq{€ˆ9ùÙg«MñôyÑsy½˜!tCÆAÀ;w ãJz„}åž'ñyhÐqE”€nµ¥’Þå(ü9î·žê9²(W úÈÑNš ã ^ûظÝÍ%ñêÝ×Ó]}¼á®,>ÚK‰‹X|¤,€‰n}~ÊQ]O™•"?:(ßÙÍPä Ò)ÈG–½è•Ï iö—<‰"_§±„Åg Ü_w’¥”ÄxÚº»œ¦Ýn]N‡†{Më ³eš³Îò¶_i8˜÷_`:é°'ªÌ}=úIäÞBh5JéÅ ˜‘¹‚yGЕ—L³È9¹Î•ÀfEÁ6¯_ŸgÇq[QÌxFÏÝJþæ‘ÓxÝsvg–*‹|—5ê©GpŸ;Ã;O۽ĘŠqŸ|3ðz^–pÎgu8šƒ¬Å¯àû¼1eÍ‚{sä1Àu-•f}x¾çÞvÈ›Pr0UB'››­=0¯¿b¾Q·'=äR²r™]síYßã­ÇóXNÜjàšÜ*!ÆEÅÜ-Cu‚æö°©ÿ•Ûtz_®'Ρfš·ÅVá!¿vŽœÖM”ßÄûx«Ôö,E|U¹ %]ãC¥âÒ@ X dû_i8•’.! ¼Ïõ¾¢R“ÇIùIgÁ)e‘㾑Êx¨÷=]U|¼ÖœeÝå5纑ç†"”£´=âÀ0›CPˆy犣´x ;ÓOn^)§´§Dô½Ã³9¦Tø³{ìHF⦙„}g*9úÝ¥‡¿%’ Üýéu .À @4ßÙÙ=KiªbhyPÔÇ Ö–£«1 BÆÝKþ Æ%C$›a,ßÝ<@¬xOÀ3\@E¹îÔ0”ÑK~¼bÙ¸Ä&Öǃ¥¸ôWøŒ‹¦<‰ü´˜uÓ¢ýh€f/–x޾c"‚¹1îr#¯›å—JÞA¹A2{ü4|èÅßCyŸã·$€¡€„¯œ7pßç³]<æûÁ{LuEHKä¼j˜Õuðñ]8+ Sp«JvNÝ yöª˜ô=FÙ•f*ܹ(;¸ËÈ[ç¤ pEL0PO#§¼÷Ê7ŒÔ€$1²!.“UjˆÿM÷±“Ì ¸_ÉÌA^-“aqz•ñ7ß›áÕpÒãÒ½fjW÷ó·œ(¨sFeœä.h/âa¶”WÖ7bèêZ¥Åü7ºú­·½q©K|5Ú¢™¥á¡†Ï÷ß‹dšq»/aúŠl¦'³©—)uøH/θv ¯SZK•|´è%ªÉZvÞ¦]¿ÎO‚ãt cÄO+ª©Œó¹'xnIÐLe¼»Íp´”ÁO”Yš’—æ¯,äÔîq$±ÍLTŽro"Þɤ’¥…—ÔXk=ÉFS¡ë[ÁÇg©•—ù# (5Üé Êrœ9ÖÏy«U~Ѓ_AW|ÀˆÝçÏÒÊË’p_²ù“&j`ü. ]›ëR¹¿“ëu8¢Ie ”¶ŒÜWš4pNÝuü¾÷T¢äŒ[¬3ˆÜÞëÉ=àº|ï ¸vÙ•÷8^>(™Jå¯RGVº0¾àÑÉ#XÊË! TühèYñ=ìØiPK Ž_¶’è0d»³ŠD2¤ ì¶SKå°îœ: fv'“€íõ‚ÄpL\qNݬÍ(Çž0Þ%k. “¦ÐOàtKzÔߨ;;TÔaºƒûgòwyVä5´ÁÐV]/Þ1ü¯Ôg“ô±¼WK×^‹drÿ4¤ëãñɇkܯ’JÇ—Þûsš\y™ßå0³.±xÆê™dè‘¢u¿šy.|ÄçÎÆa`Á-ëÜß š@…²óJ£ÈÞ¶àqеLè®×UüX3å~Ë×ü¾GGµ¿…¾ï*ÍŒ»„4å÷ºÃ:–„wPð++´Ø0SÖê2ôÓìéþýÙ+&Ëuøy Hå÷ÅÙk°tÂÉ£¥¥; Ø@Œnç/<ÁÌá±›C—¼o F_¦™äD¥@ÍC¥#rËÏÁ{xEi S?ª½u¤ ÝÏÇ•îëä¨â…ÜWZ£Ÿn¯™Ë_~væÇOoe÷ªx¢ʆø™ÊÝ€,pñØ#%’R4…}BÛ>I8(¥@i$7}€*k…Xå­æ¨Ÿòj •B/ö=xÜQxQÄ=æÆ¾ÿ ÝPjD•Ç…å“,)ÅŽ;ÿZÂýœ!ˆܯ_!ÒÈF™ðÿ‘,,¬Ïfà·,ŠV[:ë»ó×råæŠõ—Íeü—&’qÏ÷X+š6‚¹w3͸¢A9¹È%%®ç¾öuóñ_Wtîyp•n·ÂĹÄÏë·.€qv†v¡#Çn.'꼂̬³ˆ¢±#£ãæ&œ¥ É4uC–g—fŠä¯£ïö‚éQmã“>d߯\IehFØÜcïöuˆ q X+ù·Q–xßq¯}˜dq ýUtj—³Θâ1,; •ñ9FûÐ-¸sÌÎØ¹È„ŠX €jHN éí[ø»Cø«ÛGiâƒÕFÏüT€ ·ž”·–ì:~wˆwf0´ÎÓ¥\EŽw*˜”ìݱòY@‚¿¥±žÜ²qö è£T ^i¾é}ô>#Q:qÝXP¹ßg‘7,•?8cšf'oº€{0™‡g±ïáY¶êõ¤[ œ·o ÄcX“@œ£ÀTºÇÝH©¥d©ùI)ò‹I[ç0]GÇ9{œAìE°ó¯àà%ÂÉl·+ãõyòýÓá:/°^Ž–RÊ‚_Ö®(³y¶ÓÆQ ~œE,t'a ޾Ä]<ë¤qçóˆ]¦ò}Ç=™ º;Éä襶ŸD-AìíÀ ÄAÝ!ŸÖüÚWýdb'ÅaÀi7Ðãò`–åt«ïßÕm˜3ǹûßõí³§uœ‡à ¥ZváÇy¤Ôj`(áâLM$uÕµËû¸Í³'‘gxÆò5»ÅãU4³à®•Ïû­t^ÏË$d×ßbìIC{‚Åî+¯\U‚cOõs!Jf¾kºº:ôwÃM:ä ‡2`E@oóQçÖ–. r½‚¥$Úø&#.‡{ ­æÄY„¥®šŒ8¥‘.éq6]@³~_ì;“œGw+Lnµ†¬3h'¶Ý Ù5ÒJ‰EÐaÇçápÈå€5Š«ìdÏ"t°|÷ÞÑøŠ ›Ö£Ànè ]~@u0\õKVÒëx¹õž€g4ù;^ 8ÔöNÀ”S—4‘,Á±@*×ÓÍ+}lQr€·økÙ#R.…§ QN‰°Ïàó A1ܧáÈ¢$†p…3a'íÞGâŒ]Å®‚Fœ)MÁgè /<›¯0Ò`¡¨½çNç9‘·í]ã¡Tü¼ íÉÀí[Á¿bš/¯q–C±^|r2~žWeB*ý•´ínÂëX+éBG›¤‹v1îå“м|â ²¿x¢„„Åä2€é€ì0:Ä©p ÚVGWïåD÷@$e<VøžÂ‰î…øë¯¸,³µÕ«c¦P¢S_»&a:7ëœç¶gÀôÜ’Sœq/[okæŒqž@cì§„¿Ôm_5A¶C粑UàîÓ iªËÊ`²«LfÖóÔDK®#%}Nõø¤–°'¯I)yòÑÒÒ“> î«`Ýôxpë1ÊZ\Lâï—’SgÇ1ú™a½–ïÞ2žœšõè²Es ¨[;Ì"¦_ \컇y¹"†{Ãë{õøÄÃY3ü.gˆ%’q$Þ‚õu•¯‹òBñ¸g÷¹¶j¬“•÷1neE®’xC¶‰îˆ|MÊ6äJÎ帵¥FQÝ4Sœ#¯*œxÔ<þ…öCœÕ®D/ùXúôEBÊûÙæ™ ¡”ÀS¼ï©–Y­.1Œâœ¬»’^½û¥ñÖ߇ôÈ Oåí#“ÐòÌñŸî,#9e!(ìÞGZC2ýñy7@”CE,´…Fv™äªU0@×NÉ !µ>/-~Ùêá\EñÆoŒeJ¾ÓÌè¹¥ŠŠ,Œ)ºG)+À%:qŒXj’Ä ÔÚ¦,¥XdæQl}ý•αz92ÉÐð}6Ô“ER™œRú»s0½oDqè9ƒ“ T_¿"r9÷=Ù̽°ò.© Ø39<|¯àûL†´÷ªÇÕêž™Ï@½·mt¯Šýr ñègëoá4OO›læˆ6:c¥3ÞÖŽ£õÙ[¾çôÒRÛ ú ·Ê’ò{Òõ@¿øõÖÒêáÔÌSØ#Hí1Oäéù9åÜÓlÉbÀ¬[¸M„7<™¡<åÑ„,îô?Óß ÍwWÃËÇFR {äã’qð¬ó““u†Õ¡3=‚Èh:g¯ÌלKhKH”s^µ8’ HïÝÅlÁUF’zó &:ÏíÐÐEüÆn¸ÉQ].“òþÄ'µÇ²}¤@³âŸœ¡‹,(CCCŠgÄ£shϽÌ3LI—sg)$ÐlºØq¸Ífa9´ÏSɰ¥ýì~;~ýâ\rgBv/xÈÈÒ“Þ¥5îÛí*ü,™p;ÎX€2tä:5§!…ö˜ÄQdu)2a¿Bë¬Bο]ý1ªöyŽå1\b “P7út¾_ç ]t4®ê{ K“‚œ®2â)¬r =¼uBºþ8{íK›Nh.Ïul…Kwò'u’e—Ûº÷Ctâ;®ó™E•V;ÜW7ÌÍÙYràîÉÖzRH¨ë`ýŠGoññý@Él»¼À¸ceÖƒç µÖ•ÝáŒû<¬žž-HÙ|¤óÌ£÷î2]¿õŒ)‚ZjÒ÷n¯AçH™½:L¼Ê¾ï}£¤2¸ÝÀ ËáT9%÷Æs9;Çav¡ÉZs8d¶²ÍÊ·S`Å“ç#:«wÏŽ=f½CÌ|yÙ²,µï­qXO3õ‰ôq«‡/“b³~Àüº—òÉL¹ØhE…¿} Ó4…+eý½³×žüªÒ‚P2ÃkJúߪàÃX.Ñ¡JžËlç³æ.AöA/£©\ÙLàîð`  â ¸O¾ëÐå«ÃÙƒ,}qm:rÜëÐàæÏ?ƒõD½êAÄ‚õ ^sꊈk%€•ôØwÏ—°#«Ã%rq‹¼Ã1lbOHõˆ%2Ð’åxy€+OyÊT\9Tr¿ r´—ÐÖK\E¥,ÁmI™Î륣ÜÖ5ÂHh.KÍœ_«ø-ZeÄgXsÿh´K£pËK;…õpÊB,>Á74¤“†9Tì.}ѬE–œùu‘}ú©‰Ï.@Á½tÁßAD ÌF—gñ¿ú²å°,^=ÊÊc§@$ùèª+ïyŽQ•Îg„g!{b *ž±ºZQ•jÜKJöå™/q‹—åî.¥â"1ý¾—x£dÙ5œZ>ÇOÝc˜„‚êØÇ}õߪÞ}&î}ã 蔚ÿ<™u,%ÊŸáo%Th¯Ëñ=øÒŠêÃŽ®b§ç}<É|«#!GdWÒó'âgϱ“{†|§âвƒ>;Rðb‰¥–`IãÅJ÷üŸÿù¯ÿÃ+ÄKø^0²(˜ú#_ùR)+8.×g–¾ñ_ÆÙ„DÁ3GsI#¾™b )qtRžä R F–E » »QC†›ì'¨$(ûÇû°¯ûu ðϰœS‰%H /sl)%éqYN)£òrBþñÈ(Àšó wãT/3d/ËQi^ËN‹hL–ë É1GÈTâìEöDq-9Tû‡ÖKÂ!Wü•‹ÓPz‰Ã&”õp.‰¸\e^÷+èþŽR!^1ž~Ý0Œ¦¬Ï!ÊñIþø#„™²qôIƒ<^,œ…®—¾^è–ÇËÏ[•‹,ŒÎiÓ~Ó¦Æxg¹-aýùglÈÏ9È^šÏz½_JeNá×¹/ø×{¶n¬,ã4¿ËüTíí¹­µÃÏÜ++þõo zîÐ¥òx/2 ±Z=ÓU=ý<7îø`×{¾äÜS1Ü‹‘Óüê°Kí*£wâ—Þ5=y†%ƒÁ­ü¾›R Žg?õ ÷ûó|õ\R¹¾HãŸgˆŒq†õàÚµ>y$´õ)©á3Ã͘*•+mm¥fà~S ;e¡N<œ²³Ãz/ê•,2ùB÷Œw®4iÖEn:)w|çb³+¶¤P*Ô[È‚"ùü”Šj3 dó‚!Î,¼BHFq‚âß ôs*ªl1ÁÞ±S‘Øð>á‚å‹­Wn."AŒ'Â:OìR"òâXAC—Rä%äØ -Íã™dåéÞ,r ‰½ä>ú¾>î)$÷×èóXã|vo~ApÆ*9X—Ô‡.ƒxòÙ*~œU¥µŸ»õk}´4w¾Òœ€Ûzjì83åìKè¼ÂÝÞóh}À4ÛtjÜÓ…g>XÉò®D"<—ŠíÈ0¦oOH¢ãI€ï$;r‘ áÌL=7W Š^ì¦ðÊÔ•Ìz6TUA¨ó–PÞÇIqæ¨xóBÚ¯PuöhðàwƒK§$ÔÜáw§¯Ü×Å~ÇÔÖu·ù¾áÔ]Œ€{‹ æeÀ\Ò±ëÈsXÞpßÛ5{u.âo1(Üž4˜Ó©óæ¾'Â7{%Ц ² cf¯¶ObŽÖ©§óß2|Wá{l9Ÿ™ªa—k |•QÚ‚òŒpòßÂ]Šö¬ŠOuÀÚçÔG¼{+ªÉ5åÙCÝGZ[c¦bÁó ©†2KÙŒ¸Û¸}ÓÔO2’V‚NAx •é¾dß– ÍÄ‹;ã.õjæÎé~“ 3Ü—ûM µëÅ,f-»]ÄLcPülâñV2«³Y¯ò‹PABÿÁz±¡e€”FN‘ºZwø&‹–íÞ° ²Å=GB wõF!ä~,ž-êR6‚ uäðãÒéò psž+uí¯9ÉYp9ê¸Wzæ€ È¨Ìö1ÊrÍIL"­qOÏ= iî2ÙŒ½”êyZ@Ë)ƒ´²€‡:fÉ<^¿Æܶ:{ñ–Zò}Pf‘àÊf|†À[G’—õR!—åɇÌ8Î(ZsÆšàl‹ÂþÂ=4÷œL€%‡wUZ(þ ßå,;í uŽeWM&¸“}×Y‘°èÝ?çï–e 9rЬb+0I…é,¨í}NÀ;-î&„¥áèû‘*8¯zõHyËS*x(éwÀíöŽù.ZÊ`(‰Ï°‡Ö²¨ÞfЗèÅÿî-÷ô\ꡎ¼±Ü?QH¯ÊcîJ ýþ^ñ_´Û˜Ë¸ã™C¸SMúÌúyÏŒÑä¼ùæüiÝï¥@ù·£_?Ï´åë=pe°xôï©ïÄ£¶uÜðá…²ÕÔÚÞ¶M?l«Œ4*9¸ÕÒO ŸÛZó÷µÛLO…¯ŸÁrAúÒVÒ»SMœÕã„-æ¼r9zóXgÍsùRâà¦ô™áÏRvf0p®ÂϦ>rꬄ‘•Nðj^Kr“•ën8Øó*AñÛâÚ%!#€ó¡RˆU ÈA9 &^3”[¸ëNö5çh/!)z#&gìL9‡\Ý%ÝeZf¼ã¦‡O¾d‚Q!&åÎëT!ktÏ!Z ë©F $‹F©Ï¹‡ š}@Jq <ÝVE…w ðyÌðîR[ž„à…œDnø..­ñ#EÎ;—dÙ"P½/½+†}ˆô\EV‡Fº*–óþ}X€ …´”B©· .Y’iúYÈ©ÀÐèjf²5D[F¤éüÑ´€†›è™õKe¿dKŒš"(à© ÊÉ}™ËÏ®ü^~d3G|—„ê¢ø}Âr•ÀÝ_Ä;ã>îΠ£[Òc܉¬J­ü=–ËRŠ0Êù#ÆLg–°ê)~'|¸&ľ[Ÿÿ¶¿€éÞ€žèûkH‰5ú«Ÿ?±Vœ[CDê`Î.ÿê»$õ9÷œ9é”͸|»™÷ê›QBœPfˆž1 ã׺°é}/˜´dzХæõKv<¿ß2—l®Î'׳Â,½k~úéíÛ`¥ š*»åã¤Ü€òô©M÷xÔ2Ï-oAv,ú¯|û`kœ¥(…Šêš5Ô†R£·Ðñ»ß‹;óÔAN^p=1¢Ê1S ì9x¾©}Åcá<‘F܇]§.IL¶€$këÎ6‚Ë`4ÝHNm}MPÐ"[CyäÈJp"åºÖis  }à’óÆÞ‰Ë×ÞÐÀŸqq0ë óò¬Y:~0-ØÇ£%YQoDÝ{2æ\LFç8g¯ÂÀe-ì®̹†Þ]çè®üùgè’É‘KRâQ*¸çÒÔí2ubºª8`?Ç8Qã®óÜ.ô.tþd»O-3KD|iê–øH±ëõ©€} ‘ õú 9¢(kåÝH1–ø^¨„uŹ ¹œ /õë¼§gI °÷ò«á}&‘{‡“…ïº8Cr—Òó:zÖWYÝgÖ”Ô¡®½Í¸Ñ PžÓm?“» wЇ1I  ..ü1”m1ÒžÎþÿ ÏëŒÈd®ø¹KLò8Çr w÷gëÛ5Ð<³Æç<¬Ïp |hòJÊ2ï(¿¸G7^4Õ8*»Þêý–üÆE#®q¯Ç:ÝÞ±„ůÝ%`4Z¯¡óë5³Nx]Šmø·zsSð: cz5„#Ñ„ ð€ËŠm’¯|ÖõÊ[F“kŸÇn‘¦wœ³§ Ç5ô€}Y@n2[:–ýª‡³3 – †8³ò±í0ÙTö­ r &! 5ÁY}tÒô>zëâ¢rSKÍ®¦¾Å£¯X ðhôdÁÇþhõ˜UéñTd"é zö2£ïn3í8BH<¬Êõ3lÕeî–¸ƒ~ ù“¸^ŒíDKP÷rM/OKå4Švö•}§²Ðå>w¡…‹ÇòÐ-a´üXx†° eiêº|º†‹•Ç7Å?ü[bqÅ+Ô™fÒÕúH£¡I<8öª`#•ìh`—Ç|9/ïé¹Õ©ïIÏ0–ÈGkÅkV¯>̪óPž»W¡,F0‹1·¨˜qo+à±c™GçÛnuº¢¯x÷Ö;sæó}þ à~Ÿß+A¹Szñ¸¥wǰf;û€+€8'â„xÏ=땯–ÂÖŸŠav}`p(/Èëáö÷¶m÷xô‚$Ž—1X¤çæ>Äó­ wW7^ô«ßbÿC#XƒŽö·Ô- [%'`B4wϬüLiɃZÉÒ ;GîcÍ®;/#™È^Cw °¦÷ÉÓãµ–ÍËiÉu<_VŽ:âé±-da‘³ûçŸý…a8·ÔÌ”f‚t¤AöDLÞCçŒJ‹2M–ç¶òÌQñ€#«=÷ªÖG$r%ĤÏL=˜+Í®˜NŽ~*I~/âYc™ðÀ+Nväp&{ž³²Ñ”ƒ¾ÇËKÄOŒ¸«xFÙ·û%ÃÄaC؇íca[þ›{ÏÇ KÃôD4UK!Myx:ŒãõⳚaÏL¬#Ú5ÌêÅ›M7ǘ¦e!Rq Ѭ”ûd9.ÎáÖeÑŽÆ1Ëw|l—Ž.ñ*e¿Æ  Ó¥Úw#E€{ådž,½¼nò˜x†Ë"4~í©´Zs‰ŽÈý»Fç']°J¿s/y„ëÝ!~VÕN2~s—¶–„†ŸdÆ9fváû ¡V Ž Î±áã È{þ¨ë›{®koYC>gxwí9žŒ‡Ùù~Øsd_çéÀѬë댋z§W0ß©hFÃ…1ôõ+àûÇÙœqO²ÒóÔwȾ:‚S·_½Ø\s¯•¶0Æc•XBÔ©¨ÞÖt¸—/Uw] \b:ÐçC«–ßÔc²(‘\ˆñ>ÂAß /Êmq¯!ZDhÊÅO—Þ;yBÀ›ÅdøòY”=[ÄlåG¿«ÅR ›tSácÒ‡ÃÄí±á¢—ÒØh¯c|øk. d]ä 1 @ȆD©#¢ô3´e«D8Î*c¿¥dÈïÅAȃœ#‚në™}ßÝå 7ú ?~þŒõ'—)S·òÌFÚvW9SÞø.ˆŒïÍyœŠU¢fÚyn %;o-1-)k_mÕ8[ìúx}2,¢¼D‘RNe8o­1kç×%j‚Xzúléƒîx£mg? „OŸH³¨”wÀˆû¶kž!Ï«xÇÆ© Å·oÙ-!×.i "A¶å™`7$À_0”€/û7ˆ5}|¾Á­ ¸¥ÒÅœ^1mõyV¨{Ûº¼±öóPñAà9M³~:þÖ’[úøëCfâÙ!A𽍄óS9äšÃ¡œk÷¶2ˆK#3w|ÏÃ|îànß½ øX6—½éœ_å[¥Ç°¦”CÔÒpªÛM6™\ëºa—åL¬c$QâïNˆô¾`uW ·³ô u\—|H¼ä*p¥Àº7ŽDS¸ra †ÿú—[7ºù¦ÃqÅ¥…Ó<íö¨A/Ué¦î”¢Ð‰¦²}¤[ TÚö¹ybmïè~;®ægwHA®JÇÑtøè.(%Ðw·"yÎL—_zhwûήM.ùPiêVƒ²gŸk{´:]8'I‰ç°røU",Ofp§ k®qXX1ºöê|Á\:Ê{¤´,}qŸûl›Ë$/«²)§Ãe—$ñNR.'/!O¹¨çÃ>€,“ÿÆ~ kí¾>9İ~ÆÕ?Ë\ÒC¬\¤t—Hµ‹%ÚŒû8†iÞf~™«jõÕb®/á.ÑQ`µŠ¢k Çþ«_À{ã¼+þ-»… COʬÉ`Vê»…GÙP[ÙêHéûø‘·ii"L¼V«ç–_}‹éïl`­JeøÌ¤$\¨GEÛb ù•Jô Ù¼ŠS¤\ÁíÀj‡õž‡‚_Û’/wÑK]HÄZñ‡*p×Ö×Ò/ø¸¢e!|µ}­Æ[!i ÛÐÒLð%@kîÀº”!• †£PÛ—¸Ùþ2{ï8ô—:?+%lÐ2¥tØ<€ë~ê¸ÇާÛfaŒô»YöãL9_4áÃãùºèJÇ,~”{ À½t^w ¡žÆûÜýÆÅ*jTªh@a©Õ}tÒyqeŽR¤$ñ†´ÈLäh ÔÒ`ýµ½Ù_߈DuÄûñ-訠ôU§sÕâž=§SŠvZqð0+ s¯†wöŠåÔ1O>®Ú'ÍiJy¨[^º;»{æ¸9$InYvê>ëWš ä@æpþàº@þIi)Ø'¡QÉ÷kÌQãÔåpv™·ª‘ë\”êŒÒjÙ%p}<Ö~êØ‡.÷Ê\³œA‚P 0´ˆ|?ø¬í2¹>T.øy…µÅ=_ù Ù_CÌ.Š#àv<ÿ¬B¨îcÔž0.ÉsažîHRœK~éý=öTëœÔ¼†ýy°¸7Ñ  ܰ*¹žÚŠesè»öfœG>ÝáÔU>{U?oòèÿN[ëÝ1Ÿ¾y¯ýß½¥Ë÷£Ô¯—ÃÜJ´€ã¡ìã¼÷Z@ºsÈÒpÓ±.UËw‘%o×%W™ë2 ßÂhˆý `Ä!Â~T–J:Ï{DÍç+±Çß;4Ç;/_BÌf·@6SNÊiŸÇ[y­,ï}Kí4=˜«5Ñp=m(×)A†¶Y+/ÀªÁGð»r×¾om9Ê×ûVpK†+Ëü˜Š.Ào%'ӫز`©Ã‹Á4>LÙ{»+K˜ãwA¨ À”ROOH*xJ7hŽojÐÍ“,ÝgÚYd_Zæó^Êï;Ô#vÅ9Žx F!T†e­qCgÁKA…Þ‘†ÞUïW•À&yÙC¨­G—ùþ¡ „kënô {âÏš"7¼;î$ÕI±4²Ä_ù´-ãœx÷N~üåTCK}. ŸÛJËÎ,ƒQ zçÇYç¶ï•(R{»!£RWåEãÚú`ôUèJrö"ýË…XmZBƶ€S d/¢vU§÷4¸ì«à~&£ßrè*¹örÌ´´—­}ÉÓÃnÒÓ]Xòè>]SÚ”b˜™TT•âdú3ÚüdÏ’˜GḆ f>ÔéÐö¼W0뉎Ónësä'ßøò%¼¥>’çžáìǃÔßzLù²áøœœŠÒÖ- 7; WzËAÙV‚{ ôàÑ[}Žaqé  ñP²)Ù 6‹,‹ö‘ÿn pÑ-—v­wW9‘ÓaksIš?ÖÑQšÓÃG± uáÊiíÖzwqN¹ŒayÞ½å¥ÀAá¼?}ÈØØ&R—K–Ü‹Ú_í‡ÒzR.=6õ~‚Ã5ƶs Ø5²*“ø½%¸—Î^žý̘dŒýLÐÿɼlí¢þ€Â¡Ä×âýX²„tòö¼Ìœ"#®+v jÝ Eúf ,Æ7°È*ÝWt\PБFšu6.VQNªà>GTU*ÐI†Ò ªº)¤œ¿Qä °ÉûµÆ=W™Ý÷ Wú¬STC#N/<\ûν”ãÒj-8;9î\äe!/Ã?~üú5¯×ýõ—I}¼XÞä*›ë™“|êdñ=LDD¡´ˆþΧO-]¾ø2‘ œ+ð;°k¿Ïçû@ÉyûX|fîˉ¬-RZ³@1k+JÃÇ@çŒN¾gúú‹šÑ}f×kÔÒ¼\Rlm©L´[ ][aÍ÷ÞŸQÒÿã×àxÁ÷À=ß#¼wù½È6æaîü …Ì8>ö â#³|œ±ã«ÁL3÷=öúÊÍМJ?±uæÆD-¾dn ˆ÷Û.齡UŠ=\tÁ%KŸZËEÆJz÷¬5'ÔfÙãC®#u~ˆ֊5îñíH&|ž·x2Á¾íˆ×Ïú2)íæV¹õë¯äøQÓ^ÒÙ^:ù>ôTWgÜ•W8”Ä0w²£ ÿ–|þ*Ëo$Vq¥¬L!¾äàhúsÚ!KGú¬?üûßÇ‘o%z¨¥ËH¬<úéö•÷n Yº¡{®'8fþ‹º àÒº±ÒU¯#OÐ3‡^Cq|1J×r/ÈÝýËH²šýÍjx¼ÆjD•À=¼žLµn%:mKVn5–ï= 1ûгú-øü •ñ`äÓ/^6dE{ £3 /GEýÊfÍý7l¸S¹§ܵ¶eªKYB„ °½§Þ:|_ 7¼Ð¸Ÿtþßhõ8¹t㘗Üô¶qOÔñˆÉ8mã”Ý5+ÜÝ ¦ãâCPv9tò¨³b%ÖjÏDÒÝŠæ›k»9¦`Ê1L©¢«w »ºé8;ˇŸG¬“)H„•ñ”†ªÌÞV´·ŠG扙×·\ fzÊøš×w_ù¾¾Ÿâ"ºÇHT#éQ–ÙôŽ4ÓPK{*dvã¡b8‡CÕæhÄË.Aé}A|—ô´FµuyØ´dÔêÐ{u`<Þˆ ·lõ0–§!ˬÂwIŒä+Lç¥kEP®œæw•*ü’¿ux¤ÑÀ€‘J!å0+¾~ ·‡Leÿl&™—(H¦Š¡„Že}ùâ,u6£T0Sɳ ¸DV®D/¾n5kË}ÆÅ0mõ(ñw8Í"˜ÎóÓ{wú+ލªÌÐ'sZ­ÞÏj{h—±Ïጎ-e´–Žrº­à.¿‘ ™â"èÔ5“€3/åXgËŠQw-e¯Še×Ïü­ƒ»G ¦÷ÔY]²éYDWèçBÚ9lç×îËjçäœ[pKÜìíSŠ^fÒK|Mò”Ñ£`ú™x¦Á¸Ï˜6>‡~.ˆ÷ºpT=†ûD13×OÀ-m²; ŒÇQ­ý[F”ðÐjý­'wîo#ý³ïˆ‹-A@m+ÆèoùùhTq$ª‘¢}žohoµfÈöS Θw6”KÃc Ãjà%y˾ î!3øãW£¥zÐJãëy¥ ×`· †Ú¥4¥¯ÑwN=ƒø¶ü¦Ž|ò×2¶æoʵüÿõר?åhlæø¹Wë¾Ä•}g^·ƒlñô*TŠÔ0ZqôÎ_úãVc©µÛ}ÉJªÈûîšu@+0»® •0ÆÝÇÝõ­ñ<}Ó5Í™ãliys1À‚ ^û”¯¨Û â$ÿU©È§É”Áì–ºül7IFS}ß{.ýÚ)§\×ÎðÊíè…¯÷•N*CrçxBÒÉ6‘ ŽW‡ˆ [%PÃà)~£’^™^}ŽŸ±Üu=–îõµü#;µ»)§DJñð“Éé³Îô×ÖåÊB_#ŸO(Ï7žuPþ¿/ ¼zU¦–ãÊnƒþ“'ŸÿV>ôø|‹pÅù𽸠©×”˯BöÙçÚÊp?ád‘½ît4P5so®ê¹oŒí­2¬çÐjÈž°ò;¯y¸pF^"àòíʪS¯úx¬¾{ ßÜÖ÷LPxå¶z +GyVætæ–CŽœVÖ%åITU×ëÀ(éLäòW|cfFs8xG_gÜgyk@ÉRäïЋÀZð«] ½&úåêíŒÎ?2Q'®­/³z\{)_q^ª©Ý* Ú0ºžjðœWŽ:›¶LH­÷X 峬({û”¥`€U6¯]y/(OØÍqgÊ!r™á_‡8îHã"5åÝNã¡`‘Ã]ãÅeî¦+ÅÉ43êHzz )ºwµjÝ=ÃÃä³ý® rŒ#ÓLxG¸é‚ y¤H†ÁÍZ$«Ä’…e—‡à^£ºM¥O*±Îy2!Ãw%Â*#æñ‘Ä^E÷ŒS `ʯô¨¡“=; €ræƒjTÔ^UÙ+àþ ÊþüSÝ•·oñs/BÈGW¹ÿ]Ž•­}ÌÔ=^²‹|iy©kSCÕµ„¬<âçòË ',{ 20Gˆ…˜ÜRÚbú«b)q÷%›f™ Ê^縓C „#èéÝ™­÷=¼¦,ÿØôë5`ƒZ*³¯ÛÿÛ³ |Î ik{Qq*rè{âÑi…8èx}ñ1æóG,XÌgÀî“’`žÇÃÞ…ê–äÄÍGK€æçÕêýeâö‡¦5aV`SŠXF7ܲåùÃ51úž÷™å.w‘ÿ‰àNfõh,Õê,E(3ȃ•41¯éÎÜqE|}Öµç}X>ÆÆ‘#–Z¡$ý¿ŠOâáJÏà[¯}¢.“qê­B5£ŸÃ­Z"Ÿpó5Àºx&—=.ÂðœàTiîVzËh99ð¥ xrJµÌzt‰Fœ­÷%ÏyÅ9H{rÍ^ã\¢CHY¸ µÈ´wÌÆ|¾dAIÅ<•œz u›EBy–@J&¦¶–™åý,eñà’²c D[rÉì°Ìßùå—¸â\äy¢ ²’ô‚Alº‡UI ƽ™’K½ÇKQÄ"CL:ÁC¾âL¶Ê$)r+Ëjß!œë±åppw¶;[sz‘)ÿ~EîÝžóe÷”Sºùè*>G Œ^ï¸Ë!€û–¯<ÊÙFÏë½gPû“×b˜þ“k,¡)‰’;ä¦;LüÒk›q÷M=ÍúÍð÷¹,¯·J¿G P_.¢>I}dûëÀÛM¯øVI¨;¯åÙÛë)D¶½•ö Â^èÒ¹Ú~þâϾ鳭ÀÞ¶¸ 4agÖ¤½ŽŠ7 t¯R‡ «{;Èô.¡>UŽ¥º£¶§rªÀÈÚî– ¤v°™Àø¶ã¡³Ĺg8؇2»çrï…€5ù>Ÿct_iGGµ¤8°.èG>9—\þmv•É©®â}ù“ |TàË”»séY!61ó¾Ù~ÑÙz)e]à†˜âÔ%¦R$–sÏYÒ 0ŽýeWì%ÂE<Ùz2o‹˜~õ¯¼¢—¼s·¥†¾5ªë‚^”b e²(ÊFŠÙ¹EÛÂã×°€;=ÈÑ7ûŸÿù¯ÿ|'˜æ¶ÐÑ\39fÈ#Æ<”žE ¡*sa[¦“tÓ¯·…öŽ®V'¯Ï>I\MH/ÉAWî$£½ËÁ 0d!9—”ÚtÉÊLY昤R“Ïð|޹-¶âCé˳Ì3ân­HØÏ¸"-³Õ1îóâ5g_–^ÁqóÌv‰{‘L ãMªËŸ8îóY˜³I«H]!^HwÁqQñý Ï( z€ë“i®œ›ÙºïCrÅ4Æ_Ö¹üù‘ÓÖ­jžq¿Ë²Vº—ÐgÅý}–³/¥nç×N­ÝZ´¸^ GMî4”»„B5ÌUÔØ!Yþ‘a\{MÚC®R×]ˆÒC}ì¤Î}ÒÞÃ%SN&OÜv)b Î,`ò¼Ïºyw@šq/å7ȃln’UÍzô¶ >åìmBº¦X"ŒÂ¯uÖ yÀ;Ê;»é£«ùøĈ»À¸¬¥Öç`/ÐeN´´Âtʾœá{f÷]—Ïõ,GÇKSÑR^"‰mµ³„¦•½í&y&vc¤)ËǾuÍ2²ÊÏgœ‡#Gw‘÷5»ÓŠí®5ååÓ‡Ï5¬ ’õçàÉ\岯½ý?×…v^_TƒfJ_3}¢k¿“™ŽõÇÒ¬»ÎªÖ'˜©?$úmzq2¿|P{/=g­îJº-/¼«qÏÖà¯|‹Ë±Â¸áöäQk˜vy鎳-ÿøy g¾Ö%âÖ_­?$å5•<¸-BHÓâ¶Å²+§“Cü¬0yev–f|þª¡öŒ”¥óÔÏUí{Þgÿã|×ÅDJxǨ\» QKtÚv–ydVNç’—”kþú5õÄñªé…ö^j)=zó#²ú-mÎð]s äÔ僞çèVjësÀ{J•>î5îÖ~y{ÝyçÀ ý‹JÈå&}š4Èãƒ%ÿ겇ì;..Ù·‹c…¬\“ØoZ=°s•Ìf_<Šª¨ ªÌ5ËAÛìÊ’-5ÝåF2ú¨”ã˜ô‰æÜN…„Ã=ã‹%_KZ|ç6^]S€j?û¤ JÔ0±à3®§‡ØF¥Žóî% îZö֚ȿœE…÷yøEJˆ{ ]m9šûEm5ymCéÔC¥bޝ®²23Ÿ!òï¿#±µ~†Ö<:ø{ .·ž¹uj9Ë£éÀc»%‚ŶÀ­äéW;ÞóÀ}‰zIeƧ0xñÂǧ޿ŸýZÀDg܃‹ ް„ÈcÏøº{À"G¦~táPCÜyôcq,°nýò#:ì†_Ä┓¥bžÊc9ÏÇ=ünºç ?3ÄÎ÷»LE½ÁZ«š½hjÌ|ÄÝb’B…š‹åùÇ{¥¨–%¥»ÚãJT¼<Ž ={ËAަ³€Ü^‰4œIU·Ás鞎#%ØGM†®kç=Á¥#iˆc™…’帎¼„õ»daåhîû–ã|‚Èm{D‡³/L§¬HNóàËaãˆÊ¢„ޤƒàéú} ?xÑ`Ý0ëɦÓ½H Lt­¼Òdyµ îã,b¶®ö|K•{=øo–ååŠU~E-%…{®;gue‡ ¶Ë¸ZËN—÷p¼ ê÷ ægíFîIºx&ß«÷†Aq¼ˆ{ëå¸Ut¼âiŽc¶7¾ÚWßÌ”R™]ÔöAï‰:ÆR™{ꬫ#Œ{â–1÷Ï%à¶…Àc÷ÃîúÎ6¥È„*Ï@ )6®JQlô¿ž ˪xüú…‡ºñó¬Nnoê|džãð$aÃÜr¢TžÎŒÃ*WµT‡gÆ=CÒ2•0óˆÙÝÂõÜ,ZÐÌb‰–ucíƒ^ÖR¡¸(ø^L÷ä8cù[>¤Ëm_+Š|—Šaˆa¡Ê%W–—ƒÂ-cJ9—3év¥HšlI‰rÐÒñçPñÚ/¨nS¦–ô°Ó«à§«â§µ¥Ù4“%J õ$ ŠÏÛË-åeä#zÔ÷So-8æ¤]&³ÎY$¶æèŸrÑY[Avw¤!DvÓÒŸ$ÖPR K|–€€’¼8þ1‹”¢²°î¯H*|¼Cï|9½Ôþ6YX’G3³ë‘ú6è2ˆD™'x‚l–%RÃûþ¤÷Z¼B,„sžÖ“e2+·]ž<>ÈËñM­•^~깿áaU^xÊ©'ûÊm&' `}rÈ‘g*»á£ö9ÎŒÒÒÕ§ˆÖëFjÉ3ãªw8âêÀ´,&E[IñοBn€¯H1i÷Ûv»· …KßÝ®xgĸߡվglô{$=]Ý2îý^r“„b÷néjA2{&ÄmKÿ 7£‚øøñÍ›¹žÃátö`ÌúêœÇ#·-½ÿò%ÆËÜáŒ1òléïŸ;C¾Ö-´VÀâÜo³0©Lúl%n––ŽyPÕõÁšÔî%²ƒh.†jÆÚ5ëfEî&•èYÛ øœ ÊãXf…¶cT ŽöþÚ:vîµì—è¡=]ÆZ•¾éePTYò½|‰ {h[½‚NTíZ3ç«Sîó ÂZqTâöäIÏcªÑÀ6›ÞsÍ×ùãé˜:ò<‡¤^·çs–ÝÇ‘óx+ %¥&ר†D=Šv. ãwIüS;Õd!;m—n65î^ãbm ]Ëή`}ðÄØ38ß$æ)³WÅ»óLö¢QÁàðë }|Y´¸ ‰l½2Y}C–C™ ÅN9ßÔ=ï‘*JãÈ7op}Qõî3 HÅþAŸÓg{üXsÝ<}Vö”(fÊn†ü+ †–\»›uúXªW(?JÉç›j’¸Ã°›—cÎ<¤‰l}Ûõå šç’þÔ7ÝýàƒîŒÉ]•ÙEgî{9CÐÎu[@iéŽ÷gÈÊW™ç&¶ÖAßç¬óyñ01׿¥í òˆ­¸¯|¢R°Í{ɦwAU¹×ƒ-˜‰4êyì–QHãÕâVO Œy›•½±ç's½„~š·†JS÷¡ ”35Vr„³Ý9™/^µµã^*d'r=<\çZN50þ‰Õ‘ ¥å0ÓbÙ[`·6@ìyø8ÐDIž¸Œ%*E#åg†e¢ @£\W“÷æzÚ}–U^Ρ=]ÊáL5‡Dáìé^À–]”Ò(¯³wu‘!†‰G{lýׯ(TÝ+&ëøs:â™Ün²ÌsåçÇ5&èI“båÝ3DÀTNðú¤{½ûx(XgBmºlCc¾îtkȦx&®ÁnQe®j6ItîœN/r†¡¦\>ýâô‚$F»xŒ>6îÍï¥E-:òiOe©ÆäWGàÛ}åùÉÚ¨QCßt’Ò#2E—‹cåšÐY$‰QÖ»à-»ñ”çXNBuñL™7ì{ÞÇ»3sß™«Å9ëæìâ·E2*NÜ©©þ i½bƒ±kBÎÐ;|ýý‰jÆiè¹ã­Î•¿?À màþ8Uôªô¥­ž‡Bke|Óý=îNlý¾^Oúþ¯7½°çHS×I“óc×V¡ã5w(øx´Ä†›¬ýêÊ»yO&Ùç­©Vƒ™[]rê¸u¶XÊDO‡˜¥?‰«Û]>!NÖf-ÏÅ<÷)º«Ÿ³æ<³bUé7Êׯ)ê yøHC“¡­Cvw©ùT×Áë‘,(“{ý0pî™KpÛM­Ood“Pµ×`½–µy@sfDµäõ™Üù×_²Ãëmà‘8<·uc 1zJya}?4å”ÑÌÕ®uÖ©þ–ãëÐFC?íë@Åm)P)]&¼¹ß*3²(Ù8nµ†±&šôþ=ø<¹¸hXÓ÷‰3Í™›wÕ¯‡@•N8~&»;ЧÕf1†²ÄeªH¨ãxäeî|¹,ݶÒÝÐyv‰“–ˆÈå1î9#¾Vl= !Ñ8Ö(1…-Rà%ÊË— ±"—¯X.MHú’»ðu”sä.dòÌæXZ¬'†n³²ßÝ„|9ôîú/õ,n*²àäÞÆu­^Ÿ‹…²Š½>‹²DÊýŽr汬{}tµEÊðÝAy¨T¥mÙëûìF#•ƒòíoñí˜ñRóÑjü½Æ^{ˆ&·!|ž_§Æ6€{©UZ¬\U>ÙÌnÐìHz¿3ÜXô¬mùÏ<‡ão-³-1ÏQ«‚½ÿ<¡Æ·)xZ'T@©x·H¬ Î`ò-f/ΩÍÃW˜)cxZÆ9X/Prê ¯qö”*ÆxôÃ,R޲†tF¿äAñ-˜²Ð|‚{ÌûØbÍm0õ]ágÞéßÜGÆ ¸á×þå Ü22»,Ïwш"Ã'© „"°°”Ì&»¹$©åÉC€Bð•¼Ã©×RÛÀµºm/ï‹ÌùIŽ¥²…6Òù†÷á.^`šñIeò«FTsùZ‚òº€ñ~â«8@éPÒYm‚9Aºk{N3ÍÖ>ÜI‡{l9Ãízn7yô—}d[ãN]š3Re.Ð ‘k—}÷®q@ßJîÄzEog»{¸Ef=åRŽÆª€K“D¼ðIùÃPZ|ftŠp<Ž Ï”2àI±eêÕ0ü¨ `rßñz.B`=^†õ÷ߨTšŒ ÛÓ2ñœä’qÑÛÊ6Z‚ïóÐó¶çX2I‘Ï„»&¾V½ÞÕo\$|KW™ÿÛ¹ä{½Sfd'½ÏïùáÌü;wdŸŸ ˜Ù¢ù=5Ìêþ3¸‰×¬ß×ÙÒº.pë í-õÆv«+ÛoÃR¼¡žÒl§¢}{eû»ljàrJ^ƒÑz$Ô9ïÜþ&@/íÿ˜ Y«„¼0iÀ‘>gë Ù=ÿ2ë2Ý;ƒïÑ#a¥È)ýÔׇ€ÝjíÚÕG>3®°Ä 1Êï¿Ó™*ûó´¼q8¹ײim—?Œ³·OÿAojOµV­ÜšÝg×càÚÅU9<û9eˆ•õ޾Ũ"uÒ*]J3Ê,ÈÁOu N>óëÍÌ´ ¼ƒ6 '² M6»t¸ŸµÎTZ;@'øÆ7ÊùÄÍ%ÿ˜Ìû…Xà,Cüç`) ʹžíh!]Ñ>æë"–R@åSeè•Üu¼q8«Ï»w ®,r¡”˹uU/‚L|9Má³"<¯P*øÃ*¤ Ð]; ±Ý,â^¥^ŸÁgÄÌ/rÂ3ÊR†^å°º˜lG)Õ*ùØÿ°Ý ‚$€»O}ôòP[y÷Bí þ{rº¬ýÛëQopoö­‚Å=uõ<4|ÄÐÞÜ+ k˹·„xœ«Ï3Õü+Å sÙùômJÁ½Ù–Öþ±£³ìŽ:P‘¢ñz½>£›ã:KQ%Õr ¢[E}3]8òPWøÂwrQÖ{¬ G‘â£ÕZ}ìZG=7÷¾Åä•$fÅR3›ú’½«N/ÕU0‚€ \Ãì“#–Z‰†¸î—ÒŽAé»4ŒÆnÏ×–TÕ}›2A¶]<´…IÚŸå¸s댕;»;ùÂÖú~W´»çLå&•åÙË@<މ¥‘á(—c >©áK b’iö«Còoå'i‰¨hN¹ŸOÁ\²ŒᦂlѸÞãÎÔqöø!ç\ó ¤,8©Â/ ‚hf‰ˆ˜oÌ>!÷´–Çðøù&€;&.`¼˜K/.Ÿª}“yH×A¶+àG%kK/·hp™{)®°Ï¥ŽÂ•òôEY"欹Ӵ5ëY­ÞE­3<ûv”»ÏúìÝc¬·ßi¡‚só‰:ûb°´û#lö`ë]Ÿ_YŽlÿ¯>YZþí‰LîÚ–=ÅÿÌÒN ü]ËiŽ;uÞ+¢,ˆ.v®Žû®¦ÒYvï»2@¤2xÏžsû'À=ûl¸Ãƒ·’ 䑃länÁ^bí³s‹†JõÀ£ ܈) ©ýIæeBWýj6 ·¯Fòe˜T6”l«õtç%Hm?KˆìÃgŒS©¥DWɲWƒhy@ÙâeqåüßÜtAk´7ƒæ<Â[ÂkçÅå¯s2ûÌä)‹*µ´Âõ°l–:h´ÚûEú^ÈSáw‘ùcˆmd 0-†pçêÃðj’Kü%†S г©" qðòƒÏ>ë j<¾G[*ïóÌOëÜÈ#ÎÞ-¥>9PŽJFÓL~;9TH9¸ž *A‘Ëù\Œ'oõò3.ªÙ}áÍù¾Ù@ÓsQBg Hׯû÷ZRU®§+à[×Nmé[½e£,ÛÅ¿>¿ ÐÕ×ZO÷ªõçæõt\îf\wgÜÏÙOàæ¹cÉÌ+=GZ4öN™[æ£Æy[…&š+XËZVû0Ïa÷ïe@÷úLEÍ5î¹Êüø#tÎ]í÷䡈 ¤èIb$(Æ¢…ÎF¿tœÙ«$‡±3ð1…n<ç>ÙTÉ ¸“…"¿Ôcvû×û˜û³U`z¥ûô"ÙK©Ù0”ñ@ª_æR­ ñGš– ¦3 tÚ.M?3®ýõkÙOxr f$27¬ìL1qåÐçJâÊ]\¾•Ó Ú ¨ *x”¢Á8Äca¬³æ_•!ÇRu• |×jrü¿,}¼2¾OÉ©~ýʤ²⬷¥-j«ÿÑQÌB,í<ÙR›rÉ®œO!xœsKÖßå=®œö±G+ýX\¡^ÚeÂ…]”ÖPiÌ!’ÏOÕe´SfâÕeʲîT­ågÜŸàæ[¥i+ÓÀÓ껄 vü}ž¹­=×Z°¸<úm™ ¾‚½Y¾ùŒÕ);H<öîåg”ß'n^)~žöz^lœÈÚ[ÔWN·—æ–òÏñz_=¾Ïí<Ú¿¥]Œn ½%·ëï™B¢uñÀÐÕ탃ؙ±ŽrUû<+ôtR ’»v„G n2\¨2w³öa,2‘2”ÀJÆÚ—Yæwf‘€˜öš¶m‹Ì¾OÂ.(oÍ;Ÿ|´_Cç«€Ì%Ç™C8“’ØÎ\,uíc_|ïèÛ¹³×¯#Gö+ÙÕÞ…}>¹±bø8ÔxYÉSºxÆÝEêF©Òv®]%×a ½ÅC¶l4{¸ ¹v1îÁnf+ºœa N4øzŽyåßj,Œr)”¾R¯‚×­%-E¸| K¨ Gaïê\ù¸÷ ?ó‚•ÔÛY^? Û®­Ù®Ê’ºWp½æõ0bßu§ÚÎ\ §Wf7tur ))3S[45¬i›–öy¦ *3¼ÎPÆù~^Þ1àUÀ”á\.S‘j¼t.—gKöJNZb•,¶‰¿u+O¦„¾yãNØ`7ñsŽÁ’¾?õÊ&÷1ÐëÀ8,á¸ä‚î˹ˆ¥&¥_?1[´O[g¸ø–¼~©ùÖ™Àx /E\å{Bo0t¤™î“*óØÏÇ'é³È§MÚÅÈÂKzìUx11BÄÍÈ”b†˜ÆÌñܺ„=€æ:ÀqOHsÜïÕ¸Ï,$Þá†2÷·sÑôy x™ âÙׯ÷ {±·=)ÞˆwÉ¥ÿŠã¢rnoNŽòçÏöT™ª‹œá‚XÆ8ž’uÕ=[4¶f-J-rÞc¥Ñd¾²œMçUÃëP Æ|²ËÈ! i<9µîziæRÁ=é=UTÅlãÜá7"­vÙëÈÞ8þmE¾îN°Fõƒ0]Ly.ØX=IÔ­uKÿoWD{¿%'ƒ¶uä`Qpù(sKÄ2s=¶¬0óäF=®íÓ´ðŽs¸ÔyïˆUôŠrâ9Mõ5îågõ½Þ2óFÕÑ޳ôÚ÷ýœnëØAæÃ¶:`7v¤iCº ›fÄÏ6œ—%˜Žy䟯Ã<þ,n{g0÷[¼f†;æ:~ü1 à ïì¢åo!H™U«‹/×k)e™iú+øï9•6Ó#vê? Âq4¯²A¯@òpˆ(ƒÐ©¸KPøí[ëj=û(¡²T³GGí¯Ð"ðî\7Åm „Hû¹ÞW\&€´û§ wíw´èûY†ø+ãNJ½éºò¾î!HÜ.*zŒæ5ƒ8˱ÕɯKÿí7À;ÆQɨÎ_%.¯ïpÛèaO¹*3õk)˜)ÝßÕ5ò^V“Š;K¸”¨g…óe*¶;GÊüÑef^`Höæñ=n˜˜“Mu–£Q0î˜6ùð^ø¡ÇÕGËEÍ ø¸§Kçíƒé«„il¯$a®ÿìr×fy©TÑþw™Ú’¬Ô|°w \ÏïÊA×»vJ\yþmû|nÇõ’ò3h~Î W 9µ÷»ùUÎô³ìûµlæJT3£˜¿7ýÈÇ}žs}Ì"µe<œ«P~•3>¡¼Èúrš=Õø?A=:Òè9r¦½å\ç«]ƒõh Öƒ§ã@‡=yÌ|`Sϵ½ÎpóEŒ‰œàeý–½{‰¤ªUòò‚r§ö¨¦‚3ûõ×7oàüÀAײ‹¥S´{†>Òû–*aËÓVôF ×FN&^Í{·÷íñ¯Ý¢a’ú,î´½$×½DÃrÏ(`^ƒöž¹®?yÅú_Ëjwvï–ôG³È¤žúp>ó¬%ט(s SYÒdF©º–ª˜V°QFÒÿ„¾.à¼9“G$óÒ|’ÄGÀQÜf˜žÿJk’ÙwöØ©‹upYŽ4è¹çCç98ÉJ— ¿nöð8–½áã>#•9ÑXß!Æ'ŽSMd<`5°ªÏniëOë­wüÇ9µ?ŽM[g‹'þžC—®×³/—ÒŒA®šSŠç‡föÖvOG¨­ãí^°»Ô²»+U³j‘k´rÆÿ£0&>™C^èVÁ¸:%kHÎ!Eé>‘½<݇e¯èœò[lè@×#Ù‹}°#˽úÞä+²–àÑc ¸—g…s­%@ÃêñXíïº6‘lÉœzîû-@¿@ª]ùÛ{ƒ’ƒÒ¿ôÆ©£v”¸ 0ÑL”OH éØ|"·j­b}é®dÖsz+®>·¥SHYάÍÆ¦gç™ògÉ-ò5ȵÕ4ˆ*ÊLõqO:§ˆÎÅ3-ÃGìŸpÔôç¡^mÊÐKÀJ¬peîiúöf´J'õ‘B½7–Úæ•G!hqÿhWfñ lʱ÷XJµáx F—‚"¦¬€`Ÿ(›O*化ëÔw²«ÇXEC]DçÎÖªô é:Ä)ÙÇy•¿1NwzÇŽ[x<œjÍŸi³øˆ¼Òçpùs±D;þE£W††Ô]£6 ^]s ]ýí*Ïa÷å½³ÀX-&¯ÔÒ`ȃ ¸öPs®Tm€øJ'ÔwßhÀG$zzD à;`A<#ÖÉ»—ƒªIJ»‹¼»F„hÀ=àK6ˆ7£‡âXø1/êXõƒÏž'ðýŽ×ÖšpÞƒñ=ÊpÕ3ÂÇšWÖ™Þá×ãq½%÷¥½$ÚÑú@ƒ[úŽçŽÓׯ “‡H£TK+M³-ÌÈÒóäo„ËøÛ·Œ”G¹«%—Nðê‰Áå)'¶f˜d+]!òz@’w7ÁtPž§_4&›ó_}Ý´&*ÚY äB‰û'HÕÏxEoÔ³{Ë»=¢>ŒÈ޲ƒQ’£Ò—K¨ÏÉ0¹ŽòÌKz—÷8û˜ÒÜÐ'—¼Ðj_5kCŸm»Øy†›O|Ü«G9ÓßòîðLÙZ£Ÿû¿þõþ=ÊTuž[™ÙÜÒí¾ôº©½ð%ý’9£€{Û·¾æÅõ×Qã›åçyuóL+{\ÙEN9Ìê¾@^rã*–oŒÿÜVØgÊ\Dág“Ÿ>ýñG "ÇúÈi‡eUiõèa@¦}\U$åT=®-“P÷ºqØÝÏø¹M±ÓÈMÅç.²~Ëd&æfFEK_£»€rë eàWë»z"ê²#¡÷K[ðyu{hÐyà7Ž;kËß–Êœ;¢œ~¯»1.¼P²ÁLjxµ×¡üÛoÏßÏ {jõ™b`¯ û¶Çý“îJk Ãb*Ƴú3÷õÁÖo­›)L¾J99õÜ.—tDztpíÓ¡Áå ]üò¸ht¢ÅÞ]#°L ”Ò]vrps/0‘㟔®ê €)FgCkÅj=Žë†ÞB‹žÉÝ ýÞ“ÁÌÁw <Ξ9µÆ5D¸*œ®öö1A•³‰¥CvËÁ£–¾”í~™¶À´à«Wó&8DÏîåÐ3%[í‰VŸ|$òiû²—¦„.ei ŲØUÒBÖ²—3$­rBWESŒãñ‘ÓìES›`f×å¶J0㆕äøë¡dÞg sÁÀã[~êþex ~šDa9„ÊÞ DM J3P¬Ëë×r‚¯yk”’¥\§?ÌÝpö…x…âvsN2Üý¢ýª6ÿ„w¼³ÑÒÄçßÂíZdØKÅ^éæ×H»s¸iÙvµ¤ßç^<ÓÞÕ5åžÔ¡çë2·œ5ð»d-÷êÈWAüž¾æ¯úÛÑWß ^?΃hÿl¹r•‘×@K§èåånb뜞ߑéÑFö1;²byl”fŽâÿhËhNÎ5^Á}”g¨xü= HgÄ£‘€^ xgâ3o'nÕùQ²žñ¯Òå}©í'“ùlÁ5x2£é|Kj˜~=v6.zV’˜Æ\cÅj9êšÓ"Û¾éýý¶ãÐ7a×zV3c:×#•2päq@óÓxÿ2ðyôT&¤„ÍÂ0p€¶!œ‰v$;]><  –‹ÌvuÕ;Úǹ5 àžùE—1 Yüö-ÃXs ÛPøÚ³…žÙÿû!Ä9þ€WèÏd/yÖößbï½y“½ŒVŸ-Ý-ù¶g峜×9qÑI_ÂMHå¹á“'-Éb‡ò~ŽQû^¦fú¸jy6f{Á<²Ù {Ê#•¥Ö¼” QÍ첓—/ƒM— A¢/¶ýjòÞZü½ÆLs¬•³æ!U·”ÓäAÛz˜5»¶ûˆ9EA¸çÈó»L'-û L­«õçý©®ýœÎ:©Túž¿»Fxå(/×—Ü9aQ¡Ù†±$r,AQŽï*ŒîeB·ÃVœpÎægZúxHÄמ•³ÏÍX·èEÄÌXÕúdX@m-TpnµœñŸË.½óÕÇ@Õ똲3V±L?Âr Ÿó.7¢—,î|üy•O9އ¤C škyI VJ¹HîáÄ>d˜¼9?cå ‰ÎÃ<:™‹«nW9oçµnÙ§¥Ý" ÀëüAn^ƒu€”ØÓ–ôEŽïLõè¢,Ë‘VÞÇsð“{¹h0×9øzÂÁÙw%°îBO&t(s´ÌOÀ>Dì 'Ië+®å%5rRŸu1?+ªyíà¾:[$˵…úÎbžj© ;ÕWŠü»È»Û;ùuK‘Á¶Wîš¼kÃzUΘ'–þ‰ÂLÕ÷ä@ë .‹«¥ªÃ²õÓך~?VÿÕ%Ä ¨-Oh…-ßuН‰ÆÛü¾#}YqªÉžà¡}!\)y…™ê½µŠã†TQŒÙº•1+×ÑFÒlÀ:Í1ȯÁzã¿°ŽH!ߢ† Þð`îÅë{È9ÝÙYPü Á*·×Rg s .çÓÏèuß•RºãÛR«rW9rt0b²“°ë,ÑÞ{¥ú|§t‰»/4Ù”2˜™}.vsVlS&­Ö!JL*ë=P»}«3Ùô™)‚,®pGöœÖéqK™ÿ.uÿq¾{‡ç” ]˜ÛZIx“E/ñ3Ô‚·¼\Ô£h÷%j ¯ïrCÉ–Î;µ;P]$´MTYxä¦,TîBïÔ]†¸?ûñyŽ\¨µfÁÕá”yä4î•û’‹—fî!ï½è¥yçÕ+žŠ <ëÏýN §žgIÞ•©¹ÊÖ·¢ãuò]€éÊN»Þ-üȶ€2&»KßúþrYNËI2x é•¢nu€õ^®}~iç²™=ÜIVkoFžžåþ>­Ö‚3Ü|ë‘€ÔÃÿùŸðÉ ¼DpÙêñçŸ#°)üÀ #Rpñ(è.pÇ2&>Šw‰gÀ»kt•¼ý f÷¡2ÿøyŠ[j5Êkžo=P© g%À˜Ùó%pß·JÄgVFNëŒU÷¿j²ŸÞöuÿ¸‹§xt ù¹&ÕÁtÏ—&õvùDXéqEYtáæYÞVí»ü ÎµíÃý¶sH=SÑ»´‰¬µæFD…·Ø,'4îéKPÁ­ZËÙ<Ú^Ž`¢Ë‡>mÔ/0Jö’½®¥D™w×1ut¯pÂoЫÑÈrŸ7-<ëq…·Ðÿ¶Îëm%ô‹aÉ[/Øg_ kŽYùººiK{Šù=ÛǼ„xrD§:Üœ8þûxÉëþrá]wÞj×4îs |ÝÛVÈ,ãžÖnÅeƒ f¦üà‰ž¢gÅFý-ýUVoÌìÙô ‡¶(!Fb›X\?¼ONú»v÷¢²jÚÚWþq×ËŒf}þ ºF¡µÿü™7ÄèP”(L“²íqëDküË—à¼ÖáÛ@f= ;~û–¯x  =¾wwêÑéö‰ªŠ…Š÷}Ve`yAjO}Êâd”àÀí&g vFüú&k.§iµòcOöOg:3ûâömF©¥W{ñ9ÑÛá0hÀ)øX÷áƒömi“ç‰Æ%5>ØÚŸ˜Ó O6å"¥ƒ«ºã,î *wáLr]8å!Ë”V¦rf'%”ÙndYêªå]“Ç^^ý€Å(¤}H´,T$hÉl:µò‚¼nÆ…îyº —^½£,[* òº;D)(˜³°³3mO¿°Ì¨Yù¸ƒa[Üw§òÞ3M}˜µweîÜIˆ«;î­Ÿ>•tϬ⼕ù~ž]Þ!‰} ‘Æ:s¹µš).ï úó. +Øz{ïu¬=—c›wÈñK¢ Å´­ø[‹¦Ó‰ßË]`hCåã¼-&Á önfiü§=w÷ÕW€R¡Öw¾zŠ W€å%·yÜÖqTïâ}¢xìû›7äã!›AW ¼;±ÌÐ÷I–n éy®xŒÅ:C«íã›Äþ¥ˆ‰º{³ãÕ^òéò¯¨#¿+]þƒžAóµ¶»×I 1hžà´ƒ–Ÿ“ $D)Ž`1KY0¬c)QOÁŸím—»”NÐg–»  ã;è< “œYy„>ðêl})b)îË’Oà lPZÀ— þKa5»’el:F-ÛÍÒijԩ׉Ñè$÷CÜI@.ÀŸ¤N”½êu®–ƒ¹€ò b«ÙqÙ™ŸG*[3_R ¥U+ÝǾ¹›ÖÜ~:Äò±¶*¢æ gG.ï+Ù#  óËvÉówÑ™žö<_®3Ê{kkOüÿ3©E=Ó•ëóž~}²¯šò<‚ç>gµç—yW)r½n+\ï*܆v¼y-ÄšÛhù Ds<‡àT ÄšMc»5hâÖ¯ÛåÕÈi{Ànu,•¯xH@‰.'Ú±A¦‚ýƒ"Ÿ×]ýógð”þ³GÕà}pðïÞáoãÁUñ`•”ºJ¯½¢Ìpƒ³†r’É D!ðp­Q‚#ʆYljy`]¿?/§)KˆØv4{îCwû½Üóê¼u“7Þçe`VKI<ïÔ.j7ûÏ”`n%% qÁÃ?0e5ùë×dp”—L?—F?¨(302S¤ÕK@t¨:šP§ €Ò#êqØ&Öü:–Œþ`\ÝgȽ°Ú’å”>¹?5+ß¿‚œÐɯ’ÞÁù*€Ì4Ù½A³fÚ(ßÏX¨§|lWòWJ÷6ï^ŽÀž{ºÏvóô3Îäÿþïnâ™Ûönß‹#|ŽUô‚ä<4áÒ=³í{ ¯ÿ~y¢—0–pô4Ö=O˜™w±ø{Šÿ~øùç¸!ìl'é¼½5ï}‚ ÕÓbò[©MiÄ®l¬—] (¹+wi•ãÅ<*shˆÕ‚gÞaü€#nî`¯À£c–Ì: 9F Ç?“4ü øžå4ÜñWT½CY Wx8ÌăƒPõ“˜Gãh>ì[{q›—‚Ÿß±ŽÑÖ÷ ûsôVo°†³Fw×É9£k‚œŸ]?ÂK»À>à˜÷\¿ZOdyê¹6ó`ž=Rã’¬'0È¢”:E²\?îyÈ•¯(P“»6ÒŽŒ×…wj賨¦\«Va#ÏûZCP>jôý£þvj—ð#TeÆ­;ð!hiyÚh¼¥îdC}Õ'Fê£Óré)V$ª–q]ù3r—W‚,7ž`ú©ºn3ý×é¤õdKìÕ2­S`wì 5)q4ï=wZZvÞëPê ƒ[9&ªNõ 1º+þ?Çh69u5ôg•-1ÄãÝ‘Æ Lœ‘ÁŒuÞc »úo>>©.`fÁtì%øÂŽ„"3pü¾cÍüH™OOYŒÎ\™§gÝ}¢¦V½Ž‘µÙRaeMÊ<Úzùsû¹þÛÜŒîÛö•ÞçäÚ™– xOøI(Œ1*xOÆ=€;q÷P¼â“ñ?‚øPʸÓ>2ÎjßéÓ1€hQ# ªšáÎ~ yò$Îf-áÛrÒ³Õny§,œ-sGh­:°›]ÿ¿Þ†J”îä*ÊP¥l®O¯Ã範nHYNv§) G9ÀV–ÜpýKÀZÍRZÓÊ.hûºøx®sä²A¤~4×1UœÀ>)Ys~#³NqÎÈ÷@ùr¿µú¨8ÁG¾æ#ÛJŸ('<'µ¼:ÆÿU§({üƒpA˜Ýè(÷gW”ðºÖëž·Ùç:«xƒ«¥h¿ÏÆý\‰*êE³6ñúQDÿ¯P¡–æŒ.'f8æùÏÌþö¾p¥Öòá³îúÅà>Ïî¯l5TÎddûFH«Ðóq9©ó±\«–‹'Iº{0kÞ»½ö¡ÏL[Ç!ÁÅ,xpóx䥊]lzÀs8=}ù‚ÿÈîÀL|ˆ¨€w¯wXOòL5-CæQHPÌS?þ³Ë5K2Öµ–½Ü+P;ÃÄY÷÷}î î®#ÑÔ£‹Šmèl;»ÌùÐ_É–2G^‚*ð£dmÁX{’e{}²7ÂúÜHÍAgp_FŠúÛ‘Ô¤—d©¢K4¹’ÕÀ=÷ÊÁVMA`?dS;îKscÊžyh¯øÉš^²;p—.<îq_j'x9ª±Úž1hOb$îÜ{Žåê­ŽH½s¾×?²}˜Þî­o§t­Ü“«c÷³Ÿ§g%P×RðSv»^½úí·è«¹F¬6®èì_÷²æÊ`žýÜ€–ÿ GNW]’ÏÍ¢ñ¬¦O‘;ÇC¼wußhÝÕáÐS: Ýëdµ'“Û‹Lòò`e AÓ”–‹ç©&÷ÇtV)2|Œ3Þã~@?çk¯dði1˵ù¨×ã6T˯ŒH‚qD½ÞZ¶öÖa%Šº_ñ¼×¨êíc¿Á’ö¶b=¿–g,’:Gr¬gîñwÍ×ñ'®ù#GšÒ}¥-*È¡*ä; ’‰[«†Sÿ=|´9Z ½ûŸÆëß8Ç+Àzý øŽÏƒ}GI È‚†4‘õ‡`æ•Épï"‡»R<éVá|äµ<£½·×fó$öÊJ&kfàêÇ!ʧÙH—žQo6å«Ç³·§zù£³P¦6ï±q^1Ç€åŸS­¹J>:!ž¬¬_½Âà)zŸÚç†)‰y¢ögÜEÙm}v¿ewp*¸ºÙ£ ûGŒÍ¢té1Öµ€mÅí»;¹Šç¤²B!äžâ£kÍå.kð—ý?šûý¥ž”h† ï/¹¿íó ~?@°EïΖm­;äõó4„´” ñta0ÖóU ÊxÛ=kÅU ³*Ò˜ç>Ï%1kÜ|KÎ1Ãa×LyþÅqœë`Öº!w ¯×ÒŽÏ^I¶Æ[Ç£%Gv-Èvê*@WJ>o¸ƒ©}ÿ>‚Rv¶nO§>ïÍ?ss\ƒžÿí•ê:KJôðw];ÆIcd4Üfð ŠW¨ÏÁ¸Ó2@¸vˆdPv–ÃÒ¯àÝù*àîðˉ%GiåŠdðýÌI5¤ðШ–'ô•}ô>nøJöÊÖ’ïô\_îPj”¼r`(Ç[y¯±›ëb•^ #Œq4ÁàÆ€s‚¢†/ÁÙ}gýõ³'€¶b­ø™Rü‡Kõ<ŽK\ ·ÊqØqŸ¤u®Ï·^œÓÕùÖ.>Á%³o ˆ‰qØ–äff„÷êÌéû»™ÝVGýíeÜÏþ5X:íõ¦z¡Hkó3£Ÿãï­KÜO³³;^«˜Ÿ±œe¼Ä="Nõ•#«nG÷sEÎÙ Ñêh×òïl\òZY~.&éå\çjˆ€.ÙÐö:jÓP/^ËÓå L£-«Áµ,,)m+ïór¤ƒàa¤b B‰¿;ö£¡½&tÛÉÝíäÐìÇ‹dV]iW ¿+Y±_Á¥!¾ûë×8“¡Å”øoœçî €/'p‡6?ÿŒý_6îOŠ–¶(åúÜÐHë·èàº\Ña·“nûŸ¤ì­ç“C1˜ƒæ\6Ä‘bîf†ûåE|’áVáîÛ’ÝßW®¯V£îm® „^¼èû•ú½—q²òÞœÕ\ηï™Ò^™ãÚJî¨ðAOŸ å#Æý¡Bûÿ€Îz¼fÝ#Ø8ÑßßåqÎmÇC $:õ¾1ìâžgʰ~W³ö:ZÂO?aXÜäú’÷½üWŽõêÑßÛŠ«ÛSÉ´Îv=0öoö´ýÛüâê ´†°àÿ^¿†;ƒ™â‘@ÆJwJeŽ~í´‚ ðG£Cöú¿Õè*e30ˆ|‡Ò7¾ïÝ»ÁÁS Fã&¼öý(œœÏѤ å zJ€\²ŸóùÒµç¶^æqž·˜ËDÏ+àŽ-Á‘½îB̆öÛÜcH1kÄ‚×ï¿z•³6³&œ­Kq ³Úeß“K1ý±eŨŽÏü8Û½s=ÑÅ­•p³¢l îZÃRnTÆTµŽ]m É#RÓ¥ˆ(Žú$Pkó¸ SE%ز„@O;`~ÀÇv ,õGÐy=m&?¡ž+ï+OýÝi´-«äÑ• ¿LˆI¥¸ÛÏÊrÖ^{Ê{’)åàÿwùh´í7öø·acaLÛ°ïÊŠ:¶ž7ç _3Ó×…„œÚJú6”¤äcÕ£}Ï#¨¿çå`°šÂëôõk†oÏk¿œè ¼7xÝ?𣏍q[pOfsåÆsr}ù†4åúpÕô,Û¾iÄ#p98+Üqh ¶À@jÜ5–š!ûýû_~­á»wØJbøßRƒ'@ ²à7°û‡Gû‰â\@?`ô‘Þ=Àö–ß•á&1ü>€õ‡üŸ¡‰Þ™¹äúkéñÒcÜçÞ€SÀí(þç¶ DÜ!j+äQÐ’À³x} P^ìåÈcY\¹ò˜£9öWxôJz€¼ñè6 ¿ÃØŸ? o€Çè5íx«À½7²œe!¸â2·}]6äѸª8æЙ}{ÙhjùÊ^Íc©ç}§U[ÃŒûã\§«ÖÝÝýÕÏÕ¸ãáŽØï¬›3æÏà~Ž‚G'Û˜îêÝÏɈû&¶ˆÝ•:¦0:¢$bîǽI´LàÞªîb OÚôm+É9múŒô¥g¸ç[?£eÁ0·æcÇÖÞ˜Õ Ï ÎîUÞyJ 3®ž­µí £” ܳâSaÑ{,È» oÙÖ#¹³ÞÞýsiÆOfEj…ûÀH¹>ÊJ,FÚ²Ûerb V÷–+×÷^€¼‘@EÏŽX7–Um[I2­œ‘hõ‹\Ƭ0 v>ó}þªØØuAÑqvÏ(êúÓpçIÒÐ|µ{pþíÿÁu¨Úvx³Üpnήz«Å0U¯$׿¥ž» ª]]ò ï>_lÌ—LóÇhχç\³¾Zô>3“T:#¶ñ÷ÇãtcÖü^}•á®çßç%7ó*Ã+ó/º¡ó†Âñ8ñlD9à;E2äÂÃÅ=€;\h¨t¯E25dÿ:|Ü|LjªfÈ»ÿüsèŒÁÈú€ƒÏ’o(à[Y˜YÙßÓ*à "¼ÊÙf&9uÄ Kä³Cw”¯.˜‰éËvö˜¼qŒK9Ý1œ]u•ÙʹÍNÎX ’úü$@ž`ḟù0nÁµÕ ¢¹­<öE ÷Í/Ô€F{ýü§¨^écíþ®íéè|„ &%ÎáDYÏœ1–ÔqLw >–“‡îÁ?và™úœ¤…ÌÈNæõî3ÆÉøé#âÛÇq7Ùt¼'§;íºÜ]/¿L–}\Ré½2³Õ&ã’[%|ŒZÌÜ) êÍ~¬!ôöêÌuq.ɘ}nJO?bôugïŠÍO ›=†y5ÿãLW9~P?cñ?ø¡myþÖë ß”Uø¹–}U2Ck@6.xêå®fµÎCáw—‘ÿÌÉw:ú·xk-!`%àשå\Cßz¿4æ»·xDD½„ë*gÖs󺆹ž’HA¥)ñp|Ç *€;|Wâ_8¯¬wTU$€;œÝÑåCê'Jˆ˜±ùç?=†I¯Ø×yö–é•43é¡ÚW#e9,äÕè¿WýL©! ×X•^õ^)ÍW¯r©ÿWe›^2§kÿœÒ1:hwGa¼ZYžqý¿‹éß+ÝW @ú û¿ì¸Î•ˆ<¸ß®bœó tÛ™LØŸ! ÷¤ŒUú0ñž™¾øªÀfÏ6qî3¸«ãèdà®ý¶Ó-\ß;–Û£º:þ]œXÀC¯J£?\«p?@«0šÒýªnN² sg€é<Ç<Üq˜ÕÔ»Ë3g¾,qWò¶€dï(k\¬­r[•í¹ºž^ÍÙ}Žþìy•}_³ë磡K/ê:–ˆ (ßQB$;Œáî¥;Xp Z¸Ã[&g¦ö†SGÀŒ;¢àìŽqXDŒ¸Ã¤±6xÑÎ’C¥‚ïôm ž=²îË6‘í‘1Kz¥“¦½ã•¢z0•ëP¶; ózî }b?ÌûF×úÚ¶™f~‡œ®²ü+‡õµ».×I;`úìŒZYÌ©@†keðµÔ¤e¦y4¦W/æç¬-WüaÊ’¬VÄ–#•B…Jk°{¿#z ©{@³bžkà¸êÙ’I1ÄœùÄí¡ÍÕý6RÏGñPÞ÷,Ž­jŘú]‚O  ÜRê¼ ÜK¸üÆ\S¦÷Û²V[…ªc@¼®‹a˜¨’i†×¿«ó°W ÌþãÍ|D©®ÆÉŠ×k§—²›™Œ­ç{seÏÚuqRB´Ee}iÙœsù°Ÿåæý›%  ð p Æ=©‡^°xèwðî`ÇñÎÉ©óÀ=^=K~5HýõWwÄB!Ÿ’ÉPº‡ë õ¾îŸ õ-Øm ƒ²9…sá,{þ ócwIï³øT #¤æŽ¾y]õ gYOz¬í·ØR¨®¯ÊNÏð â÷æó¤¼RjwÿVæñ.dG9ѧ9î–EìQŒwǵÌ"ü‘jò¾;{]Î1³v<ŽŽzh¼Ÿìº©Œd*9PlÜUâ½K¤‘—“ÍC×»©Ê1X×èÏ[-û‘% ×.9<e¯Cض*^±:­SY¥†_yæN÷ÙD̶Æë.ÿþA‚7Hy²Î¬kØÔgôwà;jýÊÚ2Ëõ8÷¶ofqýcEýßÚ‡P¶´øC [pÇï§ŸÊÇdû»æ8õ= ~ïØèj)x&*CTGèÃë¤Ì½!ªº`ë‰ã‚MlÅ…üôlq”é¦Ì}ˆá-Ëð0&(Ýáý Ži fj÷kkHwøÕ€Í§5dÀwÉFž«oÔù-‡u0­`äÑÆVÔi—³0"å¬étwÊÀ>FƬ*SW·®%–9?œd[^íðs{\ˆ²ÇB­6£gp†k,;Ì,à–k9ƺnݸVöxª7GÏëÔdö129Ø‚znàxµ¯p}±T`w [”:~{ÅIô>}9Ýe‰”¶ôt5nò :ëN…{ˆYï+­Ç1LsÏñÇý'®¬ _þþÛ-\3Ȧø¬ÐËIÀ3;ÎÖÖ•ù²ÏôšaÛ^Æ:Ìy¹¬~½¾Ž·—1hí,=ÆÊYþ.}>sLq"þ á=Ö¿ÄÛ 9–¨PÜ9Ж÷ n^:HØz\$rÜ?¹T¦]µ.Œ«b&ç;8CšnåÁÏ|þŒ>ü<2~j—U}ž~UšÕVªÅ\Þ{}›G³ïŒŽ3:2êºË•6?Ô!,˜È­ALÇQ–C¹ †Tãàað¨F“žîQ…=ÝãÙa¦ßÛ¦ø[wÄÝÃzF{(„ßÀiÉUf T‚•X¤>Ù/|E]zÝ9é[éÍ‚utPä0Xǰc¤\癟?ƒ¦6º.Ðcä×Ï"}ËH˜ñˆüÅvÙPÜdèÂwÅžg¦×Ý<»@i¡@ÅÓ¡„G»Q\xÖ°Œ0k´çQBH6FÏ%l®Ï–µŽA¬!TÅH -%u÷c¾8™»¯r<÷nãÈs×ð½lÔ»¢9£ÞÔÈ´q6vG½ÍÓ!Ý4ò|øh ¨òÿ¬g[ã~"’é·=‘ǧõ¨åw=|§€jå~š½íÂÒëû +Zfäo®ZØÐ»¿z…›oÙÌòQ§xPŃMîÅ{™¦c˜«òL\}IFÝJæ¹ wòV¸rCôG…—7í^Áê°o]®Ôá±@¼•®Ž–ÞñÓEb«Ï”cÃôä[ÅO½¯â| êDŒ°Óÿ]í;’íy€¡¶uݽá2¬‰CÆWJk넜‘˜x—"™éª¼ ]AÀ‘qRÍ÷‹=rñ4¹V_¢3"™õp¨8'Bq ·]²ò3š’Bx·{Êòßo¿EëžÜ¸Áâá4{¬ÊWî’ÐÌ”—Î= å8ž«ïBó‘ò¤Ü99—«ÍÀ͘¶€»»ÊàêTÒ!‡ÛÜÓÖ¿ýÆ,U(Ýßñ`îÃ÷ÚÇÝ;wwð@(2!’?ÊG\´¥t_¬‚€Yˆ?î #žoþ1¿£Go'­®ï¸ûá>ÓÖìÖ6š÷Y^ŽpëÒ¥g¾ùHÛÍÞ+ÎO>Üq7нqU7|—&þ‡8貫~Bíjþ@kPw ì¸/~þìß* ’¹+‡ø¹äÔ›Èy>µ–Šû»? b2 zm 3N8s{ªôíqL×è§sñö3^‡{5¨4==mÍ#í'UH Ëwв¤jjuˆ³Íøæ¾Äh ñíêc¬rÞüH—r+@çªç°â¿Þ’Fàb4„+ù—7,Æ@Š1dæ‰þ«½´gX©w²¯ù}V’¡èþã‘ ¶Æ1 –ºÞãoN‚Eܯ䧃›ïNÆg8CÜ) àŽH&:ÌŒy÷¸3?R™XD,ÅÍ?Lû~ÿ=ŽA¶†ôUÉóæÏ¡OŸ÷5…w- é<š‡ãz'ž| ø¶M-qdKæìÞ€§½ñ»»”ýë®Õ—m˜‹™q†ãµ4›»’Üì6öç(œçž+\%c€t- Ïò_áZÆÕ{HYî†|&>ÓÊ?½jâZ¨mgö*MŠ`W°Ö»ŠÐPêÚ>3­ÞˆîH‚é÷v0Ên®óö÷RÔYp½#ÆÝ¹ÀÇ5V]ÛW„óLó¬6z Ü݃yUÄr×oO˜øC‰‡AHtÞ½[+æÙèÑñå€UÝmaÆãFN{>ý|…¼ fÐS÷ÏfôÊ:ST{fÕ°r²àñDÈR R>ÁÔÃÜF—H†<bº‘¥‚ ø^FƒqÇÙÇxSï®AÕ̤Ð%gåÝÇŠ@Øa8߈‚Œ;M!!Æã®¡Ã¬z?SW¯é8ÊØ:xÒŸAç5¡ìU$Îî”"Ù4$KIެ¥Kú½â®RªÏÞY˜q0·ŸLÙ;èAú‘Lé-³j5x¢º¾ÚRÍôl{ i¿çô† êÄb»%Ý™_÷ÝoJãæRË~)dEãûpO(òúõý¾ã€õ?þˆÒHˆçÁCçTï£óP³˜ÄP×4 ƒñ´’<¸XšÄ«)µ`ãù»l,žØÎÅÝ Ï ‰=xÿNp«k›o™=š]Žs¶sê| ±šJÛÚcXn¶Ïçë‚- ®¬39àÖö„1«ö¾·Vôƒ@b*¸Íľ èüë¯q3 p𔃪ñ°±š€»û̸ë5‹dÜÿþ;˜â‘ÈŽáTÀPwM(Ýc¯ÒaŒ;;<ãüÔ»ä=h’;Š™\\­È$VÓ8bQ.ò¡òæÍ p¯¥ƒt1§æ¸6šñqI¶ïgJÐ9áî`{:ãY×hv1?¦¥le$Ê~Ì>ù>lOw!vöƒxå(PZ–‘¥y_Ûâ³Î(þ² !Ý ’2†éç¸UÅÕ%WÏûÙ»2ÓR®ÿ}\û#_9ø»;UuF«½x1ïe<-ãûgÏÊ êø»=œžd©èúNš=¾||ÏóÇóEB]]E­u(WÇOç÷ÆÕIVú¿ž£«Wcr=;¬ÝŽ.ãÖmèz™¼ìwåžöx (‡N“qÇ…â<ÝßK—¿›åQæGX*?‚·n™6‚«nÇ!ñõ?â90²H9 Ÿ:±ˆ¸¦êâÚü?¶+í Áêëü`ß]I®óÒ—½"áê¤ÿÖZ½>ŒV"à9D>Ù":²·êàU6ýúÂE'í2º§ŵssé³ö”WLI{­æJ ½L;¾9ø¾;º .Jš+¯hwGèW‘ÜI¡w¤†Tà \¯§'*Uæ¥H&˜ö/_ÀÜC*#HrÀµc [#ªŒaÂoQ@–®2}8âŽ:åãWzÁ½Déî!îÚQ÷{OJ&->{^„Våèƒ ²£ô¶¢(ºàœÈÛ‡2.ÏÀ¹—ûZòèuÉ´ZC®p^_)%UÚ¯]›<:à¤É1¯Ä‡­º•¯öCúrà®Àü„V¾„w¥f¡3÷ŒŠÉ¸3¸£W ŽÏ¹ŒÙâs¡ËÉNL÷L‡wJ¸öõ^zmå¿uGšõïí÷|TÑ‚²…ÇP*s£9¿Zsh^¯Jbö”ô{2›5AÅ\&èüº•q¥Ì›ÙÒqòîzÁ€ØdTÏ-Ue(ÆŒ½^¡0ˆú.³ó°;ÿ¨ìÙ¼»Ó©ý1K;q–è¹CQšoè™gÒCò€EQ æMî`ÁƒsY œ×Ì„(%ºÍ ×¯€ø€û`Üßã, }˜N‚eÇp*¤2n’ˆŸ±&5jÁ‚ØR3«aòõc@e øZõË«£,k×´Ú3šã @!|ªÅZ{‘mà.+Ø XçÒëHJSvŽNµ]á˜QB¸µÞý $fÇߦÄ{{ò ¸Ï:y?ι<®NÜÜ{ ù³à Ð̦“=Öî÷{!>+”Gdwì…}_‹}$)iV«6#O=WÛ¯ ‚gŠÁ(¿ÒpðqÐáî“ L)ÛÃô=ÅÛàòŠg)Ʊº30wFè²—®ê6…{ÂûD,Á§!ÕR·`petP¹¾ù¶x¾üWc`Hq¶ü`äJ0‰“˜?^sj:i°®€J¼ÜH‘CÆ dô‡· ¼\ðJÁL¼Æþå.ØwfßùÀ.!;±üL¼rŒR™XÚÛ·qÜÁë£T 錈ΉßptµÕ/cÝ•¡ l³T¥¸ˆy¥w?ܾ”^œ†ûô—“E¸¾Pbi’d'¥ÕÕϵ8¯ÕÕ‚¶nÜ_ÛªcæowOî8¢(‡¤.gD5;¬mozawp¶Å¢˜Á5‹AçV±z‡8E‡Ý³è³AA`r¦5{Uä f¥'ð(!ÊãûŠ¡äʰñy¶E èÚt³~õ¬‡8®t}ü÷Ï%ã>§ôe A? èDs¢MŸÖTÜŒºË!{ËÇt j{ŸÁD.^ºs—x&Fàpº\•4ãm9MíGØÌ1Ü.œKÅwÕçs½žу0£ÑsC·²Vž+uÆ&ב~‘·Ü6NJ‚ö”ŸÞ´ö–‘8!@ò¯¿Â‡ðýåK°e(Ïb@ôÍÿþ{û6r²lpÀÝàsà‰ <|ð·ˆ(ÿ>þe9ˆ^Šs†~2ð–‰wéâùÍã8¡±Êvä޵Z÷®¡Æuº/_¢ðÁÊQJ«}I;îuVé†#°q¬Ê=¶²gðÐí»›»3ý ¬É3Z{{ÎdöïšØvÍiÌ‹æMcÏÙÇÝ€z¿¦úƒÎgŽ%nLcôgwKbåŸpZ¦ç»2Z We®†CÀs©“Jež«ža²¥/ÇnyðÌöpéÇIz eTs|oëæÅ?*Éb‹g‡hïƬuã$ÚûëàÞ2e@vŸŽ\ߘ™Ýù¿•t!Ö v™È0åžPë¹ÀöˆÚ I~<^áÜ"æŒ ¦îQ|O Ù ýa0´PÏYvüŒßRã®±T¦%¸GÁ&;† ±'ˆãíõmøøâ¾·tŒù®êÔKž5î`å,ӌԅ'¡0¨Ý…ƒóüë\1Yÿ-Î¥8kÚšWv Ö´Úå~C9WæïµÝ¯¾kþܘµ-óõ?‘Óœ¸n¯!u>1¤V P&x~E»¨¾r=çÿ:›ÛΪÏý¥o>ñ'K;aÍWe3½ŽÙË—`vg‹Ò«ãØ3²<ùÜõ¼_ØÉûêÝ‚™¾ý*›öêxâ)Sö¯Úµž2;y¼®{¨õU×O#yûîù_ TrÝ3ÃçwpÃãþõ+ò;sVåÉ¿yÿïU9Ðy"ŸÊâWÇy硼ú瘊Î˺êbãYZ·ù« l|!äõö%†q£™Ë²ój‘±R45+},üy *¤ 0À]A*Ž€ÔØ.d"âÕÇUÝëÆ‘âÚ)° © Ôípˆ§d”Q&„—6R ’‰¾Ãq(ÜÂþ쥨B è.,¹+úÇGH{´w®täW‡»Î-»OYº–¥>cÏuJ ]P¾¸r׎šwksl×xÑ÷ÛI9]í‡Ò}h}ñÄ”L±ÜÏáŽ4kð·ÅzÔãXŒÇ¬[€­\è#qÙÛ§Ú>d÷¥‘ϻˇ~,M™Y7žv²u»W¤´ûu×Tþs’öõý›ÔHâ¸çfw¼:€˜ÉjÀ¤@™ê×èm®4f&¨½&dT9Á8ž8癫 /‘ðœÞ[È1I§8މ¨¦€ãT±ë ^i©Ÿ>¬ú¾3&–WÙAÆš@ÆC渱-=^Ô¤¾7µtø¶é*£Ù^ó1ëŒïŽÌ~4Õ]~á­wZè3¯8ú˜ÖÈÞÞsæ†Ø˜‡q™ei®·«ôþ?ÙKó…™²ÖME÷â½j³‡V£C3ãƒÔÊC¸ö]- ÔÉÈsOØkÆýû]{ÞÎÍîŠ`fç™è¯è@öŽÈ([w廀”Ðõõ>ÛÎ~kži#ÆýHMyô3€ûˆÍÝ ?ÂáÁ’gUé- ÉÉ{ÇÔØ<ó}}Òëëô:—Áœpáó&•åròïεqãZY>|Ÿ_ŸÕýsçm®•[Þ¶úÙo¥D! ;D€x½6•Ã2cÞƒbdÜÎrûäÎþ€CÝÝðìTt ~ÿÀâ±éоп{*ÿ-tíîð«‘TÑKð¦Àbƒ ÂËNà^—(Ò•Ö0·¯ŒŸŸ8iýσ¿vá1òÉñÞ‘oÌ})«:äBô„4í¬6@œ 6r —qÀ÷þ˜ì=c©#aOö{i-!àmWöÿNžÎJ'mq½˜rÉ¡r臵¢vÎcžVE8ç~_å¶ïëÜkÚøâEP'åÑ¿fèOÖ‡¤L«ÃëCc€Ó#‚¥…3€{[Q²MðÍ÷ …çNGé{®ZT­GÝ ‡Í`Ù1D"¥ïžð¦w#8«´Kޏ±â´^ƒžó"¢UP;óÛüs;Þk^ Ô:»Jw‹Ü ¥CsŸ½h•×­ºÕKëìó­”Kú×KëJô¥yæh Çïò²¸¶t®ÝÇ=W¤¡UºV‡¬H}‚q^à:ux€AwI $3ˆ[¢ÀFîñÿ°|wZ|z ᢣÒC½„>|ÐV;r„ ©ß5ã@|~¼tn€¯îÛÛÑ 6yíøúóñÓÓÑFö|Æ¥ÑêwÍ m£w„ûa;—t>œhf¶d5îÊßy—ͬŸ]sæzˆ6ƒTiá7—BŠåìqáwK,Î]Õã ÖE|˜þëɱ §&³˜º;ý5÷ZÓ¦;ß%ñÚ#h¸çdÊtžãÎó+,ÙLÝ2iZ œ”µ.Š»¯¬íö ƒö÷:ã{‡/û*S>ÃʯŠjæ—ÖÒ‚“¹\qSÙuŒ¸d¨–¯_î³£š»ð^¼hE5µ^!ó %t –E0v`šsÉ‘O3× èk€1Ð^L÷ÞHÙ5ÐqoìªÆiÇ ÈÁ…€2Tædßa‰˜$OWu°ƒîï.Œ‰¸%|R¡K¿ü„PÒ# j{¸¹K$Ó½åpÈu$À˜-̼^ÁH%wżU‡z5×.+ϱ˜gÞË|w^bU4²ZÞì‰LöǸûjòùlÑ=ïóšã[—®¯Ù½á»eÛ] gŽæåôÈ^9qÖXñT»W?ÃûÛòýãÿ#v%TËíëGOj•£·S~î=ÙC^á÷õ ¬ÙÊ@Õ]Ù…«¢äwÆ+¯¿K¦¼Îa÷ü;÷Àÿ•eìe¸¶¶…C`­Vûu`S(˜Áù´ñ²éϘ?sx4!ógë~]4ݯü¯¿0Šæî1Ü`Ö[y~¥NzŽKhRíp·Ôµƒuf¨„Ægåp()¸ì¼;ÔöÁƒwwU::-PÀ¸ă_wM< ;œj˜“ TR䣯±ÔV¶@éjK.]ºO^¯e­¦ð*ØIâì[àíðÄ<ŸçÍw]ºÙÑtyLv6;ÑŽ_AU7ÄZœ+Ò=¡Q)ã¼ûˆìóå€n»¯méÎ3_ú ÁY—¡yšlŒ@úD˜øfÚb¶ÇÄ¿ÏÖù5Ì”Œ2-~ë«·¨´‹û‡ ìÔÌ&ñÔ¹:æwÐ< l-V>â„æÅ$W%äFè- ÏPJDN€oþWVs'Èt¬ ï×¶+ÿ 6”°Vã*ª¼,F>|øóÏÖ™ç±nïAx"˜é}²~¬–Ÿìm/®<´°á{ L<¶ƒ˜8Ûß;>söºóÐ3¶,ŽŽT­Ç0¾$pGÙ&eyÀ÷¸r©± n«í.ì(`‰›&ÃPâ3ð¸¼&³Ž¬Vdôº³^ ‹³Zðe<ºÊïéÂW¼®±'ÿ=4ÿíqRJFàòdt²ŽIŠ£‰¸ø•~ÎH©¿ (sÚÛÞ¹ëÂå©ÛU1wu‡\UÉfD#«‡™Y¸GH\ WYáö‘=ûv=¿8&Ùfޝöü]5g}X÷÷NH–£Ü;Ïp¾´užwžEsåér]]Ýí!:SÿZΗ٫2üñ?b$ € zz0yk ôÜ7®•EÔÕ‘ÂÈE[1nìx×q!•oY1|}ÖA’"Eûóò%¤5ù¬Ëb@ʽp¥™r¥uíÝdÕçâ-Ekz@\°ÎÙA|Eá*1Ͻs\f ¾{gº3ùð+4î±ÌàH§³‡~fº*5o)È%Kð6ÜÏ‹‡«ý62»< rÚµòtÀwbL9[Z”Z™9Þ ôGÎB÷vƒÏË•«oDç[d¾Æ=ê4té™Ó3{øò /‡B~ø¡ŒÈ~Dí2³Ûƒ’wA«Ø ¦(X½xPЭ°^ÃÄÞ¿:ž©½-xg]ã¼èè9ð=ÿì©«º×4‚×7÷kP~íD´—ïÛæZL¶Ê‰«m̲¢¶£ó5p3>è{<â ç Å9FcÁ ²ÀÒ_é0ƒ‘cXº Çƒ48òßÏ€qçµ³,Þ † €Žo[/yLØM*¥5`[f¨»…<†Nóqot+±Ø}¢Ÿî™â­ÅcEŸÀq½ЂP×ëO“S lÚþ'åÐá#ÜîËñô8Cp·Á™v*2™ß'ùÜÀøýìÖ­Æ]ñÐèêõ÷Ò‘1ö¿jôÚù|trVßì³Äß·dýüê[m‚²lK‘Q*Œ]’Ǹ'Gªî«B‘Ç*‡1šy?ï^ „ÖCë°šgwŒ®®Êîâàwû6ȼȨš?sF­çñ´¸ïõou‰Žn@RÌéíÖØ²Uðá ôu(Ì2Ò·TÖ4] Î;à8 útX§7|ô £Ü…&’²’Äoô[eûHÃGÙS’e÷÷Y`ìŒÞ7[úo$8Þs|çD)¥ÛñÜ+X1—å0‹Ã¯÷f®§´âœÉnK8k0=Žšš…Ñ#…µa9¦¹6l À96µ¼Ï3dÞ’/úláü4W´kãxOêg”ñˆl¹íÝoŒøíûj%úþw­x°Ü½þƒÔj^ M†ÕA2³Àý[Õyóbƒ«÷qj^æo `¨4w BŽR†=í—C-š» ›ö;bÅJÉ^Gb÷f6‚¶Â|E¾ôÛÇ™ý~«—õxÏí¾µü5ïß¼OY›ë·$ÍÃ"S*Œy ˜bo¸Y¤òVÉšC wèÅ_y´ÓWGK“§Œ)9¨ÊrBÐy<@yâWÍÏ "W´•^³¶üé'¸¼ËÔÒ}ÇQ,Q 6J˜…ò¹ Pa°Òȼ¸»÷ÐØÑ—Ùß{~,;*ÿœ×{îŸ3tÕ_ǵ[Éefêž_«ý¾7³LöÖ\”ømÈÊ»bk½|¦‡•H\›íÂï‘åÓ(S¶ÿ亦՞#úVÛ¿ÿµûØaæ™;â„e/ßÁM¡•KÚþ.p³t_n}’Þ8ôùÞèá| –Ü–jÜÅsûO|²„¶Ñ*——ü;þ˜òò>³È=-æ8‘tF!·7ZÚËöÛ‹ÔYSl‹kwÞ=8uxË„e¤=¸0îøŒŒáB€NÙ|†2ø.yÉKÂÁÑXŠØZÀÝ÷ÉLÚèž$fO¦2o¿xÊýÓPrlY‹¸r‰I!÷ªÁý .§50ÁÑ^ÎúžA&¢îü§æŒgw‰UÀ½hµ€Õú|ô/”DÛâzïÚwy–»„i-2)GwåÑäoÛãέ”‰gÙñQ—¤tëx%÷·ì¨_!ÜG/°Í5ãþ}ä–—w&®dS]CO_ZobZÙýš²õ¸ºÙ¸µ!oo§¤™Ó¨°Æ£c ÏU{ÊUö}üW3Põ¾·dKí¡í¾ÿq××jcµ]~¯ JoX“–‘¸¾Ó 2À‡V=ž‰Àì;tê`Ð ÜÁ»“}‡8\{)Œ#ïÏû©—…Ö¬Ãúìþ'õpâP>ßKéå_ùù•€¤÷]1H󌻊cZ®çìøfáÒæ‚"ï…îåkJö¥ÎO9ó}Ùvy~âÜ ¾OdHgn÷Ø{(䞇@æ»-\•g¾[ñÄýþÍïáä‚çÑjû«WN!Þ]¢<ùh¶/›Užød,õD6“§³Ùv¹Ò…_ALTg¡¡½6äo-“:Ε”PÜ*‚1äèØ½º|þŒa¬,ì˸/ó˜÷Ÿ¿8]Æóå\îa%0b}ë.îÿDÒðÈpŠõ‡z ¼fÞš]ðÏ?Ia ù99ϬïJ÷¸=K*ƒÏ8@§C<%4îCGùþÚŽ |†n£<È5í;=…t—[?"³g‘gôŽ"˰èD9Ô iºWšó¿6Ô ATðá_¾øÒp.i”]õ¿?øÑÛ'Ë®\qq—-Sx÷%O'>oŒšo›´¿ÝåC™tSé0LŸ´œ Þ}LßZwþ­ßk¢mõ“«ùè{¢h9ïõ-ËŸ¯‘±á4 Üg'§&½6•.6#{˜£Á#¤–¬ŠjÎïÃÀNô{pvoºŽYí™Óÿ¥~í°º=gý“ôÂ%äj~àž µïlðýëáîãÆN,OKÍØ’¡äÏ lçØ+üßé&NU:˜+½ {5ÎÀqé×!§ÁoéOáMÉ”’˜Gôv;˜JuáVs4çܽp•I¤7Þº„¡$îp…ßi8üZwDÉÅ3›óo]ÅÛ¾ïöO @ï(°Û….ü” ÛåËïî Ȫíz{^òêÀ”åܽ#³±ôÙl™Ó;§ŠzìŽoùÞ ÿ9ÈþžŸ›ïû8y&î÷P8Ý •qÖav>·e1y’0š7hÈÚÎôüç#ªðdh¯›F7Þ¿ÿða4Ø:Çw–pò™“*y¼äQðÓœÎ:0 ðîYs˜Y»Èß®-l§­@J;ÆWÖÕ2Ç¢ŽëÒnË:Çõóé“ó”ÊOu¶Õ3ˆ¥w¿(¯áQ÷~!pwCIæË–^1ŠU"‘àŒû9dwÑÖVªt”eñy¥ÏíÝ<Ô;6A›éæW¤DyàŒµÎ^&Tðópáˆ{ï¿þ…œÚë+ëÜiçd°2ï±¶‡úLRi©òoE§Í'²Ó;ü”Â\χ€{÷Þ+øë.[ýo_E€8żø-¬K‹ÛÙcz….öןãïc6´µnÜÞV?ª–Ýê™?ÇÆã2Ë Ú=p?ƒpÚÙ ­rz‘ª˜‡L{ŽÛú“Çb¸ƒ‘æà׎Þnoõ 2‡²¿£ù-Õ“ç úêÅ0Ï7ϰÔçm¯ùµmEYƒ»Úb›¯õÙµwë9¿!î|#`âÝ£`õ ä:ћ53¬sXðSýóç?ÿüüÌ®¼\|<Ô¿@\ °ž1I| s˜U°¿è§"™b-- `VÓOK¥;$±,Að3¯Ž¥EJko™íñSÇÑã* WfaqïœÁ>‚HcÖð‘SÊ—=9[öÝKæÞii[gÙ}g[ËRGyõ,Uxn\îÌ'Cœ×™èaš}Ÿ/_ÊÎ Í"ñ[P-r}ù¿“‘õwÐYÂVb+á1ÿ|6½ÿ™P#¼yÓ—‚\)È{Bšãx–¼{§MjÐ2 yÛö7®áO< ¥ššsvŠ=¾ºÕ;S%u/Ç*H"÷Y>»tRBBðÜ><83ó §øú5†‰#¡Ä¯D߆iÇwKJvÜ¸ïØŸ/^ •¹ýŒûÿ×ë•lõ^/¸Ö³eC‰K¿¥›~œùÑ#ûôiÝxB¡þgmG÷:•s<Í«çO€ïè'Ÿt¼®#|w‹‡Yöý¤ 赇z·ïU‰Nþ‘ârÔœ]?½Ö»ýÜ÷>w¿ Êwµ€¶*Wó2ïŠmržÌbÏPÏA¼xqgÍå#µºÆU5lÊÞ ‹dßKÙ‰‹ Öd3±„/_âÑŽ~Âû÷¿ÿþáÃׯÁ?–þåí X`A"6ˆWAóìç[)§åúÏŸ!òöi3gçî×eï(@ò˜¯~ßÎ’c£::0²„d¨Ýs¸ '‚»Ê¨_qâøTwZîñcéË´\\w —Ëç:ZÒÍ?“¦'½hŽ3Ë2Ö‡ùÙ;Îâi$p=$Ý£mÎ~îo‘&1Eý6¯¢„vÎÉO® §>§nž—œÃåYùÍ ¼ ©÷!ûÚÒÄ»´¹™ïm߆àêö誋Î#n ëö ß¢iÛî:yìeoì}>þÊ¡¥†ÎµYdNZË~1ú­QTÅŽ¢æ¶Šï˜œùøüÜÿw¤ÿä«Ç=[{ ²¢6ÿº—n{âåïá>WÐ3óFìm@áÒÀñjgÓ[{¬óú^4‡X—Cvës%ÈïãoËÉs ÷½Ö´#3Ð;žÖCŠ}TPÑU2úãlïWöãN8KcÍE÷h¸û’æ–àöqUs÷À5cŒ‡âä½áT¦ÜõâE\ëÜg¬}7åÃÙ.$fä"óœñ*,žgUD1þÆxDeìqê.AÎõöâ8éCúÚë×ÑB[+06~rI´ÎC87¯/ynðè{0»ËîêZÕZƒÈÑ0åÌkÔ0š@°ä×Êk,UwI_²¨¦fÖñ>"î³LhUÁ_ Z4ú|ûçÏôdÊìjBê3ì>3œ­E,ž{:ã¶´*zÁÀßš¿u¥¤X–½ Ú«õ÷îÓ§ÏŸÑQ‰wxÎ`G~6õ·¼øß£¶þÚZù¶»ã{œuí̧¾gQ{€ž!B«{&ÿ¯Ù8²O¨Ù˜GÀÁ:¹vš‡ 0ÌF|ùþ^sJqÙÞñüjd¥=aBc¸»Ž³}P·ÍŽìŒÛ²çàûüß X?ù÷:¨\íOÀLè¤[àøkB<7ÛöÜ¢\{ߣÒë¾ÇôŸÂï߇+Qé÷rBÎÎw ú”1,Â×ôëmZp®Ÿp ÜWb±[uÊ»*4¨÷JÌ^䄿Žß¥ÁÙ¾ÈdÔhK¶¿Ë—ŸuÀ'Òš»úé¿ü‚'¸v´ò ï>{+TSÒˆ~ò?b Á®^ïóW¯ N컸ߛ÷?àùQ¿–†•f‹}ux´•!G>6Ú‡Ýô>`ÚÃŒ¾qÕÕ¤VñŽFûºçy=úêÑ™W½_G#µXùý€§U¥™ýÜupÿËÃçD8Tcu!êGÙ?ƒ±ìˆ…j /÷¼_r ÍÀ¸¾sÎ#ºˆ'†’{”.F¹û=Æ«{vÒ)žbt÷Šs©7æX&Õì¾b6£mQýÃøÞ8sÇbÈÇìµY‘Çk) ˜ùÚúÝu» ¸‡×ªÃÄÙˆÚöPìnÔÄÐÆÐΧO­üÊfÏCÏ™zΞþÏ+²fØÍ¯ùu9±#•åãÇP~zãx­;±g ê~ÒWgi\fžzõÈqÿãõŸ/QîJ§Û³!ÛSUΊ7ï® ¯“GéíP>ƒìÚ ÆßÙ;Î }αÝ#Ê#»â¬Š7®Õö{N)«z\$ðz\wSEMµUÚ'Ã^{2¤õüÈàgr âRF8·—f}±zSgÖ„÷8ŵöƯ¯ý³Ÿkž³Å@¯çgßIšøQž›f”çG%Pûƒûþ»|*•¹Ã¾yf(a×tF+¥aGÊG g¾\‰¶;3»÷öIƒV‚¾~‘,Tuk|ê ¼ ÷XùsÖÿÜvpoô$t©\&˜$6Žgø“½ºÏXopýؔ縯nÝc83 wöXÕ96š Íœõ¡{ÉC ¹á¸~Æ#?OÑ€w§ÏL |WóPWÁÜ “]ÛqžJhf]ÌwE,#¦0ÿ£QÑu‘ä¬Y-ªáñüÚ;^½À¦‘ô«²©¿WÏ#&!äÛÛcW禔xú=dÇkÕc ¿íºåóœ¾:«ÙÞk‘|ø–<7²Ú!?‡ï«ž„sË„¯Z߇މ¿˜TBß~ÿ*ÃÞ|ýFx-üó$cÜïu‚€Ͱœ½UͳÝ{ä<¼>YÎÌi„‡JO¶±w¢Ï—3ß8_„܇t¾·wàþ}£¨{ŸGŒL­ŸQ²9ó‡Ö<¿ËAR¸!Ši¾…?ÿ• NÂÚÀˆƒh4…$?Ć#˜}Vþž×U5ù5øÎj콎ǽ®ûýÌdÃîXd6þú«fVbƒÞ¼‰s†BÍÒ£f^+¿_¼Ïœ·8î«à¸îk=3¨è~É ­`ét¿'úÎýkµ’þñm^)­¹ð+ì1ÿ-eFìsŽÂÞç×·HµíŠ–ÿ 6FÏ‘þ»/þ¹îO`ܯà{Ž59ñ?9ÆÌpÉ+#°×~Û«r”¹S¾#j¯oÐÓÎw0öº{°ûnÃD\º?þùç_Ñù›±÷íËiåa¹SŒÕ‰Œw©'ǪЬ_5‰kË<¾¹7´ •< NÎï¤Lp Ÿ>À{ÿžCm~tjã0ZÅ@Ï)«|pÎr{Þ­Ïk~`&Ѝ§µÇõ®¼Þ¯ÅLhG!W ­oeˆÜèp/ý«¢Ó;Cî°&ß+Ø}œlcUA°rŒÀsÏ «fÑÅ g@”¸?žØÏÎ7Âöš N_úîûGå ïƽ§ç[u<»ú]±ƒñoöÐî—å0HÛÅsž½Þ Z‚"ª³œ?¿¢šr3ÇõÆôü­p^Ì3÷€±õ14FÆ.X:ðvýÇÿ#-Àî}¹¨i”o×–\¦ÙÑÏu¥»û©×rôÂîãÇþ3þ«¡É™ôÓÖ+ÜÈüÕF{íÓS.v^¾rµ£¬ï…XÝ#ºè3ó*™Û€8W–3U®F뺎%Ÿ?Ê/QêAX Ç}þ…ëhèù#õ¸ @[ßê$<3ïåŽOÞïÑ~2¨úæM¤»ÿöÛš–½÷lmen`Æ@×NÞK˜õRDÔ½¥ìèYdFw«]÷=³‡ç}öŒÔ€{íL|ϘKë3éZc‘Zósº~NͶöV¾½œàæg0朽Yæ|‰ÎA¸¥FI ‚d5djw°uµ×1úÛ;'Ùaq˜B:Þ^äôÙ‹ùKnJº¡Ûã›ÂwðŽ«ñ+;™ùQšdkZŸ2øCRix­øðþý§O*Ê<Š~R½Ec¿š’OíÁâ«rZßÕ—©ìÅ3Õc²«ùã0 iPŽŒA½öÞ¦V·­Â+½„¿'ÅÏõÖÁe(_éýïBò®k÷±½ðù=G°ñ½¹_¯ß{ýüŒ»=¯5óܹK2ßë^Ñ‚CìáÏ4¸Ö”²´=€«ç$LYwùòU ÅÎÌù¶7.¿½745|®•œŸµŸ—XdçøQ¤ö¹r:ÿÞ´m.!ž ¶‘äFï+um‹¶¤FÖ`WÉ©e7 $Gî’|À%lè3*ÌúcÊóݘu0v`PÀU×Ë\¿;wFŸ§Æ¢¤oq®ÎÄÏÍü˜Üoßß‚ƒ}õ 9í'ãž³Í3!_[ç1¯L™ïOÎp3ß Ûžÿ«gãª<=t4fÇW• wEOŽO:_NfÜOiü673ãê=~?d á ¿×Öá&nLhJîœ@ë]…€‡í" ·ŒßßÜŒ\±­)~ÊBÜý÷?DZd>þú¢Å'ÿVo÷{ÅÀÜÀ†­ óBû'®î¾?»<îftoÓsÂÒ»†}Œ¸É·†5O¢Vʈ&dNÇ¿G ?öäÃ)8î¼ã¡hl¥  /€x;Bc;¹U÷÷¼&«YÞMâ½ Ç=§vì‰:êB¥,¶£Æþ!di}ïî·?¯±Þ›·)].ãÕKlÝ5eŽ}*¿¸vßò[ì½õû!ÜEÚÝûq—xήJ8Úë¿"¡<1ÝëÌñÕ´™Õçxìõ(V™õ{ŸÂ“k2RN¯pH×p^\qÝÚþó'ÐÜ)¨±ÜîWOЇïþmºއ7r ó2Àk¤õ,;gŸ72cÖ&áf àÀi‘ÙÂùÐbÜ}ÝC¿ç³*{N2sðçÕ¾¥Çå÷€¸¤&UÖI¢{Ï»úýå”ñì3lzO¼ÇTŠÚcGç®Á¢„/ëß|ïýìn&eöêýÊovÄpo[„BvQ\‚ÔíëÏ©®ÛƒÂ«ØéûáÂÇJ„“oÙØ{”Ê̞Ǚåíê·vN¦{Áw¯Ò%·XVó;[Ú÷~™‡§½ßÎG&ÍK_VÙô•Zãíf¼½'îée0Êz{qçJé5¸ùZDŽݣÛ+Å0”¦dߘyØÝÿ<€H[»<¯×Ï£«¥ÃCÍjÏ뤳ç«W¿ü2Žpo9‹£tDVÀ™¤t\H°PÀ—=YÓ40úeøÈÚ<Æ£•ÐW~á>0$n×ϧ÷ɶü`O¶{•ÁaéË— ÅXóŽ·ç¯¿Æ"¯ÝëòÚ*èœ+ص`¡8ÏË^?åó“½2©_Ômì‘8ë6×dÍ|NüÄ¿£`{ìë?¯ží¼·ÕàJSò‰<¦×†ßÖ ×j›iUÎqò½ý†&ÁÖÂ¥dO:´­ràã¼tž/{24Ï çß"r¸7 ¿VÆÌܪæE;«Ký5ŒsæÍ›ÒU}µEèV{2‰»B¶óH¨ÿÜ`Œe0ó¯¥2x=!õÇ‘ ØN€.µækjT˜^ëk[Û…ZøýúåË¿þœjôØ ûóÏ¿ýöþýÇñ]ó±2ú– Ê2˜g“ÿæ†V÷$[÷@[ôszÄdztÏð\#+ÿ3àH6®Ý[çõ¶÷Äþy-Ýó{€†\zíÙÖzòÉû'k6í}ާêl–íJÙS>}Vå4;¡³+nNÓ_ eûë w Òäð^Dྣbý}G0ò‰vjʯÔý3@öD›ÕZN°kÏÛÛçkr~,ÚûªµÏWùûyåýH³{^=‚AÌßBÛ·W€^Ÿí{qBõé|p°ìZ´¼ŒV€zþ3-÷•¶µÙpãUºÅgï—3}õJП–P݆SCx<}8E|ùøŽD‚¶|¨ÇôŒGâ^½Š˜ýKs>å±£ÄÍ%+ßÖc¤çÞ³7N:Ï‘>Ùc©ïb÷=@Öa2`[£‡+Ç¥àõÀ÷Õ×&Jëoî­  ¿Ä“}­pÚ‘¯Äù†þa›§ßëµöÂì Ø šåoÏB£îìdâlíüŒ¿BQ*áÜÖd¸ŸÞ2ú-­=h8ÿ-=Ž||€çùæ½uæCæv\ßçÏ‘,ƒræy÷Õ-:½ô>=w·+õ¨Ú[Ÿ Cñïžçj™4«¡Dš)„w»1<ú!7S*P^Åè\¯–ic î{À½ç_€nÇíáTƒkòto‡8'\žjïRhôö­óî®!¹ËÜð§ŸÀåø®ù-(¬üÚNÔ½®ç;Žg}˜rÒ ðâçÅ‹‘oÛ]B£™ÏÌ÷HGïǵ°f X“?üDT˜"x'g—¹÷ŽÊ Ÿúœ~ui{å·L)ãOï˜KqFîõgæ -J»6p?±? pݧ͇v¨èÉ3}àkçNä –+ÐOWà ©Þܯ6˜+ûèø\î’«@ÛµÛè Þ”ô‰^צ—@·e©6¾)¬r´{††«Ö‡.û9²jU¨p™½ðj~Ï—@ó\~­°DLÆX˸?Èu÷CkM–Ó÷2_RP{ŽXjÝ®¸ywnáàl{É/_‚óé^C+þ–c”­Q]WÙb+Bw~ðvÔÊ÷Õöë\5ÆÖ5 Ÿ¯5Ü?ÅÞÝÉôˆ1Ðg÷b¿Ag_/àï~†â#B¯®`õÖ»QíJb ùV ¿Ob¼ÎoË ³ö¤¯‡ù)ž“ëwÝ+$ã]lFžb~£üšÌÌË¡c}|fVöó8ßý~>-aSã~V• øï¿ãSîÐù%_ š åD¿íþÍåÿ€!T]Œ4òÜ®ë“lOs’Ú‹¯š‡Ú÷]Öo(ùØ…×5gy¤<ûaàq>ÃdO3¯SýÖ¸çpefÊÚÞl•æ‰{Êf¹$…·Q¤¶Ójcî;·üø#âEBëëËɯíý°©ð_¾D†+˜iü|.%‚<÷6-\ë‚N2ñ&°îïŸ]^¹]äÐCÂ:ø¸‹ú'q¤vxµýP¡»¢Äz©±w¥x[fxz´á,º–+èZ>í™\ Ó?‚¼×Èïpß‹®ž;Ì7 «€Ä8;®ÜÑ¡-ÎËTú¯cDRjÇ!È  ¿ÿA–¥o-Þn˽®–_ù´_œß q?;AYçå!¡ùËfnÝòæl}®…+s§Ýš€dO2´'_Yu=?)VÖm¤áž¹çÆ´âTN‘sº¿þ¸eì_qú«–”â*ØrÄ×—âHF°û:•3¼Pb‰m¹ W‡ØÃj±ãqí×N2bÙÁ‹Ã•h–…%Üï,—Ì)2ß²UÿôoèYk~%"Ð_‚W¤ö8/AaÐ?ÆÞaŸÙ“`âgäîÊ8áæ¿7Ööäþ³¾—Þ¿Ò« ™_/“nrß8[f÷ØœÃÌžÍÀ‰mñ¼άw;KÏvÀýóí[Èêð×é)eâ•%úYèá r˜ñ»‹ž’.®œŽZűâºêz1ÆþÆ€ûéÍë®jrämëûløÆ´w åϬ٢ü[UŸß qµ¯Úž»EåZJåÕ–ÖÕº äÝ5Îûãpï–âlÍ]Œ×èéiLg5Äó=ڒ߸w Å$+îûä¼Ûw/<”¾÷ù3»þÞŽ®ÕúÀ¥ʳ-Ýzœ×¡<®‘¼¥ñùx7&rØ »Z7,çÎ{ûgõ},¸—|wÚ.Ç^: ãÑýNÅL/îêo‘YÁyø^ïv╽î+Ä]É9:O?íQ`{÷á™§ùªÄ"þ_¨¿Á¸¸Ã.v¦‹ ^¿ŒÜZéÉdÏŠ“¿ÛGõöϦvÃÝð kì·;È{*ൃôóÏaª3Jf=i]õþ]qðí` ÿÛUh¾²{ë¼ÚXåÑ÷àìÞq9ÑμŸ?ƒ‡SdÊ®ÍûÏ'¤^¹?Bïø8o[ò1g€åþÐãëz&‚>ç7C>GøžÁÍÉHeÛFÜiþ5n@¯BðùØ©v‘0[&åu£LŠ{Æ?ÕÇ.ŽˆG ñùsXGFiÔ¹Á¬«Ç®h£wf6vÊZœKåxq9¸ü-ÝW®‹í²Œœ[z|^Ï¥? Ü´d9w=ÇWŸÅ3¿íw¡£‡tÝ»¯àyfrgo®fÞqŽÿƹٿR®JÍU,4&§f´ ‹gzÚ溡¹WSîAÆGD(Ÿ@Ò›ÈñLq{ ýS|ž­?Yÿû@ðLW0«Ãq/X_=âç$ªâP§÷¾qmÞ|Vðƒ[3=Å÷²[{ v‡` e»y¯ü@CŸ½¿ À /šQ+ÿ¤Gw®Þ—Q­Eë"L#DDhýÏ×<Îm4ÞãLvé×HµZøÍ}žñ1¸#/ Ùc1ú+¾ûçLœY/%v´þt›‡¹˜›ÇMŒîswž“Òbö®xãÎnÞY?s•Ñ¿W’ºsWµÔgÃûå:vµgÞ{çœ ~‹ï&¹ê\û“€û]B…µÀäV»vì® Zj G>u5‹}¥zÿé'²W¸ϯùyÿa~|õ˜ö/~ˆ¢m\€æ׃nó,õÌöÞUp^1Çœ‘¨í«Fem‹-=à_¼øç?‘vI^v®½>sôã‘ n0;¥,úù©ûI™w0‘SÎI½ÏÄ÷¾7ë’^mWݾ÷|Ù÷ªö«³»37‚ÞÚB|’Å?} –ÑͧPøÅ 6+ß¼Y·¶\·®«sìΕ߰ÐË}†wð™À“\Ì+8Ub>‡¹?ßçW‹×¶Ìrþ:ºw­Æ%ÊÙÞˆ¿î3¦ð·n³ªíµšó£XtÌ–À¦ßÇÐæ^ÓÌÇœ± ²qyÒ O¿b¤Ûžj¸ë)°^<¨(º»!ÁØ9Åy&PO¯«°î<'+÷,³7ö:™{]÷Ux4³‘ãœÔÕÖ•Š€xÅúÿýw«±xÎ4ŸHSV?¹ßÔË€¦÷7'ÊæsNúdïïÏ}-þ\XÏêw]]Æ?þùç_áu4÷~Û¾º¡¢†ÓHï&×ׇ3œ1n¬¹Ù÷a߉PðY <4oÞ\kßÏ 3IÆS Å»á™òÙ•>=Žgß{¾w=ÚG6Í×<½€pÕ_9>ÍßKÏ{;kûçuþªCÈjöê]åÄ*c}ö]ý@½Vm ¸·ÜÐÇxožê½ QšíF>'~´Í'µ'mÆ}|¢¬2µw±³DøŠVÂ/¿¼Ø¯ŸVOˆÑZÝ+¥˜ùLn%óªÕr¸¡¾$Nºë¶m¸zË›4ž4þöÊžù.ÇhÉÓÄŸ7s[{Œ$$q¶Z<4{.Ø}°µ5y´…ßÉš|o%GŽòÙYηÊéˆ^XÒ˜îi5÷Gj×ñÝ©§žÝ¢~r/¤þ^]ä½0ó ­çówؽz…y°öqüñÇ_ ç$ 3“Q{÷ÕïÁómµG½çÚwB„Ýå\wòÄÿVwõÞŒÐL¦¸îZÕSøšq¿ëô]eOûï£}O÷¦ÊRç>ž{•x˾«÷ÑÔÿüg@ªš¥ÞÅsóv«Qb0¬^f'…Äêvy3vµî?ïó¬†1=®I=ÿðã;.Õ¾U:æ#25÷~û8ÀT3Lû÷ö ܯƒBFßII8‘cúb¦Œïï=Èu®×gl+y—ÿø‘»GˆŽ¾-dß½¦ ùü™=övvAyØ×ýòwW[ºóâE.ëÄçj•š§“NÜ]N4»Ïè2lþ“ßê¹tÁ¿o8õ¬M³ÜIÕ”¯oÊ«0î¤ðà?#gî=p¹Ãpãÿ±¥Ž’f~¦ûç¿…T;š{oŽþÜ v¯°¬U€w1.{åbï{ž)NÇÛ vaÖ€¥àp|¼ û£ L}Œž#úáh kŽœ.þsÝ~\/?x¾R»p³Œaêg‹Æ'•P{‡ÏlÊï3Ù¾G8‚ßû|?ÍiѼ͵ÂgBœ·-)énèâ.Ô²;Œïýå—wï>~œílï‰pæŸ>»Ä°V‰mæ×y¯à•6òäáßbÖQS7÷Jàêô‰íx÷=±ÆÙ5î'³À'¯«ƒŠ6Y9ûÃ4Ÿjø=þxúȸ‡ãhØÝðf¿“ƒßãqQ6\ïÉ(eÄyµù£3£T[Û®«r+³(pó]ßë¥àÌu„›Ú®cÌÈ–n¤H¾áFWö¸ëªË¼Uñjƒ,èrë¼üËìTéÈÄíß~{÷.D\kAåè9pQHt‚zÜðjXÕ®å"ïfW9Ïð„®ÚÚt–rZ\mRtvݱèO:ù­w H®-¿É×rµ¿—…ÝWî2­ØæwïEÙ䳎p™¤^r•¹Ë\ïœ]¦j­†mÇß+È{½W§8þ‹]ŒÛŽÈ¼.'ÎÛ[õû+ûáN(_‚ìßÿÈîÇú¿l‹Ö+fÅÆûyµé9â{ÐŽòö§×yà¾÷°é›ÀÇÿPî¶ýwórý3—ùX~z}ðqGÀÐb}Ù%4©SQ{kÒŽN­ˆ¯æöú/q‘:á­o¥ô ôJÈ2oRy.úzF{WM{dÊ=÷–ž<~*å%(œfóJdz[wÅDê.œÁîSõž'öÄ'þ0íý‰žÆ}Té*™‹³wä^¸c @³Wâ{Œnç^A4€{›¥¾+È÷„ =7:+Fäµõ¥`žÙyp¿¿7r’ëIe¿n 5J ½ã¸j:cl+üTÛÝ€qñ·{»)¹ÿU¯úþMVfõ<ÃÕM 7‹Q$ÍÙxefã(€AŸuò釿ÜÊó5G¤5(,ÛGð²-ò»‚™°‡êŒáškÄXóŠáàþÞ[Ѹ÷Û/{b¯KË^Êí´þ±wþø#tÏÿýß_¿þë_þýïÏ?ïgÁÝå¸ÿÌy\Ûz.œ-3ÎïÁÆ,D]@Î !ÎÈ ‰Yª[ayswZÝ7fŠö}oö<ê\§>|ö|¿·«òòì]óqŸ1¥š© 1²ð¨T°ÖÐÉ<„›;·œ™râ¼ì™ÿ+)ï¸tg.Ôù,ÙÅÕ9óë¿ÿ½}˯~üJ¹œ|4W §Ñ­!z憲 Dpg@4Ÿ%yvYäý ¥=@™_á¥óóÏQúݵO2÷‰­#Ë;ÚF÷5Nè´ìYßÃ`ÀGûyfÖ ÔŸþý÷>þúõË—ýëÝ»·o][üHŸr–³¯ïñu•oîg߈ øú¸ä=Ü»£öLætœß˜/zéû±«ó†”4PBOp²ªŸÿÌüù™Ü‹Êî2¾<‡ã››ºü«šqoƒø½¦Òj›f¥•3½£eCÌ®/µ–‚5íßtÎa÷YÌÁ£Ê€yß¿¿yÓ ~ïÿ QR/ŒºõúÎW¯~ù¥'²jía:ÝeozWCóÚ´ ­}>õ[ÚÀ­©“W^K6]Æ…=qEÞ'?~”ÿñ•hdæ–݆/³7ú¾(å.†¸çÎïï=ÏÔ\1vl•g1MÁêCf0Xøç½ÿ/])ß‚_,ãêé…ž? ÿ•gѪÖY4|îì¨=‰u¬uÞ]òžŒs¶TöŸ<NËÖ¾%çŽSDöôë3Ø.§ž#½ÎîϼjþýÀ}¤›gÓ煮fj»U™u€…‘ X˜íbVã°?kgÚí¼þ±(Ç@ Á¯*òkÏæ™š~¾ŒüÇ?ZÓý×gÔˆqÌŸ„»}V<Âtí&^Þ@Ërq”s>LùHOñ’Sßj\aÐyoìËN®磿]Tê}|ÑA‚AoXy®‡0ã×^ŠUÊO¢c3*øIìíÙ3³µŸl½y© ¢…ZôÓõÀb» DÂëp•=õÞ~Ž?Ò)4 ¢êôèÕíº&[;‰s¸&8ë®R®çðÕùXj9ôÿÏõšŸùÞC¶žCùÕRgîX<äʺָ¯‹GØã¯Vi­Ó+n=.vô]Ù³b…+ÅX.éÒŒlÀÍfY­=¸Ï/g~ˆs渺°}8x¾œ›Æyôòeð{~›Ó“wEöƒâÐùmFa$ 9²œÈ»<š÷o»+N&Œ¦ÂÕÔr­¹²º{ôRiÇQ)k£~zHƒ§o{œ±óC~sûŸ p¤ W±ïsÿÐþõ×(â¨Õ²«ë1ëõP§u 6ß—«9«OÛ·û‘ÙkŸ(9Ï9W øâ´ñ=‡÷ Ãç@í¼£¾ã ¸žrÀ 1‰ú“s‚çšÄu'˜ä{¶>”ÊìÜfvÐLa0ÔÎ!ïãè¼&\AÃö:ð–qbo4·†ê·Ìw]z†ÕŒºÕÉêrf`qû¯ÎòîÔÞy­‚~ÿ>8ï™ØËÜÝ=Êí°­5ønE¥$ãÞ¦}?¹ÚÛ#qoá—Mog´Å«Å@¿„†¼pG<ö¬â'Øã7opÜSÌϺ3p¥ÏÏsv¥Ó»mgú${{f3ÜQÐÞA½-œo#Æ}µ¡ï¢®{Ö+àçý;ùÞyÓÇo|—çr=KÛ¸ýÊ{åâɿոä*»9~¼Í®ï¢%>/OŒ·Æ^ÜoÔ²gÿ¢x/K–î+22ûùç†^s´Íß‚[rh‹¯' žÃ ûzöÆÝF*ÿ8¸¯žK/JÄñy‚3!¸'ÜòšdEC?—ëw%àÞë±P+æß¿—Uk(vô-瘕»   <{°rdi°.bñpÀS‚‰Ë\éØã~uU€µà\™Ý/ùF{@3x»Ø³çs« q™±Ç4ßkj6ËÓ{À F³Çÿê6žuaüx—÷r2ê¤äxõêóç(Ë54?ÕÖ»kÅyþþýÇs=Þa2é0wÇÛÝóC-9ǹƒø‰Pç„è90ßG"™{±Ç¾”kt¯n‹£öœà¯JÜyøÎàÎ2†¬Ë¸_×Íó»l{~Žlõ:·œ\Ò§Â3f·Åϯ]<«\ÑjÑȰîZ;WU•·Ïy¨„Kgîù³ô.ø>ß°~ñâË—HY‹}ÑÓ©‹‰9üŽÂÎ ­á½DÌÚùx ¯B“¹ƒþ ¥g"ÊGÞ gP @óT”rÅJÆ­½ €Úg5N×’ó=ûÒ”6tk_­ó>Båù)8xm‚yZ>áQz%“)kpÊ6úß8öŸÑ+Gê Üç@ð5äâ4øûÔÇlQçÀ½ÏŒ>¼o…p,{¹?Ö>F{“=‰ËIx´Õ-'Ÿ½"gèæz8¤…F€~aèy-ÛWìúÕðÕ}€Y©Ì]â–}Ë¡Gò³;ç¼±ZSžŽÝQÆÄ#2BLúË/™éë6îj+pï²!Ó¼Ç#‚Y¯/Z0¦b†v¸üÝ’¬¥Àìc^õ¶Pè2Ó¿…ú¿þ+k…Waw/¢ëz÷@†ó·Â¾#ø½B‹ÕaÙ]>›î7ÌK½Š Ò#¡ïåîG)«¸‡¿Ç-å:wIkðäÊÀN<}ï¾Âàò¯p¯ |ŸœÛ­ïÅä ~®­uñNi<Á‚;.l½¯#t5¥°FFð˜bŸ‹ƒ<÷ŸÙã¶çÁY^f{(|G˜î=ï…à{öß«rE1Iá_¡µnÐòj —©¸c7°ÖŽ«Ìãü8´¹òg`~tÝXaðø);~n µ+ÏàévnØF˜Zêt—kÐó.‰è,/Œ{7¾Éî]#;B‚þÕ*°ÒHõAÆ_}ÿ>†#cR°¯öä¾R¯}~ýîTC´½~‰†ûj™9µÏä­^óÞ;.J¹.cÈm—aï­ñÄ>p¯ç.VΓò¬†ù#˜i>Ëj¶^ ¸Ò÷3Š_i—4€ÈëÒ¾™Òýq’›VoïçØ?ý;Þ÷d•ªl›ÛÞèxþöÈ…qâì<É*ßÜJÆ@A5%¶—Üš›Ú?šýgü‰"ÿºÈ¹²U]Ù«eð®ñÐ5ĵö|iCüUAifÿ¶Œ³=úý¸ÊÎgÑ,x¾ûÁNëgO¡5ï#~uÁ¾xçA¿Þ{|îÁµ{-ŠÖù†x0ÆiTfL®ÕÁûë¿ë2~ë‚9 *Ÿ9W·w/q³üÛ2z©Çí]Ïæ_¯YèÖÚ–¹¿ÅÞïs‚À^Jî^Ÿs÷(ݳhdUªÔ÷ÜcÎí)}„z·ØË¯°@»ÓçÏ?þùç_¸×CÛ|ýé'ôš>Ž{Ú|AIì}/½ó™ûÑ¢ì­íÌÈéjÑþêܱJ¿ðw©ç:m»'Y}UB$VÞNî·«j‚{¼’vϺU¦ÿ„ü:¹—Τ|„{ýœDme„²ÕÿùŸ¯_¿|ÁkWdU÷{O÷õŠvÿf׫xæÁÓÕ F1¨¯ÝÄ/ Òãpeà²v ¸ïÔïóSXô+¨Ÿ ”"¥Ö£Eçm Üó¯åßÜ·PÜ9Çîç…3 €;†¡}füŠÇ’²òšà®×:š­‚å8xw'Ì‹õºY‡NúŸÿüùgèÔ{æ’óÃÊwÉíî‘“I8´ºd\_³ý‡»·t¦oŒ^7ÖóT^µö·»âÌò)€ó3zEš¬Øï›‰íºŸJìPaiW˼¦/ƒÖ¯²ïÓ^Q䘥ij¦íVôÃÿÎÝ>˰\IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/CLOAK3.png0000664000175000017500000000032213657750470020044 0ustar jamesjames‰PNG  IHDR $©qà vpAg #’AmbKGDª#2 pHYsHHFÉk>aIDAT(Ïcpd`€…8›\qO• p1j°]\À´  Uø¡¡T¥W­ZfS‹¦¦Y šÚîcF $Ž€ñÿAÁo.L `y `ùPõ PýèÛ™v€—÷b«IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Misc/cloak2.png0000664000175000017500000000032213657750470020303 0ustar jamesjames‰PNG  IHDR $©qà vpAg #’AmbKGDª#2 pHYsHHFÉk>aIDAT(Ïcpd`€…8›\qO• p1j°]\À´  Uø¡¡T¥W­ZfS‹¦¦Y šÚîcF $Ž€ñÿAÁo.L `y `ùPõ PýèÛ™v€—÷b«IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/0000775000175000017500000000000013657750470017140 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Planets/Map/0000775000175000017500000000000013657750470017655 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Planets/Map/Ori.png0000664000175000017500000000034213657750470021113 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>mIDATHÇc`ƒütÑY@°~ýÿÿÇ€àÁƒÿÿa|bõ“ `ÑJ=Ñ`%8€Û`Bò$\A‹.N¬:ªû˜Öú Æe/,X€[žâ´@ÈBALµÄˆ+(I§z¢D÷!ʼnŽZÕ(rÄ ¬ã}2P6IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/UNKN.png0000664000175000017500000000037713657750470021145 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ŠIDATHÇÕ•Á €0EÙÌ%ÜÇ\ÁIL4!© |—zø¯…R'‡‚‡]6å]¥ŠSlð½;_ÓB,˜±,r)€ð§E¬À,˜•€‰¤Oþ}²…›`±f+ð=·xpZ€5% nð‡›ÑŠdÂs`&àmÎð@êºö‘\ö°ß•@þÆ|+Ã_vyIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/Rom.png0000664000175000017500000000035613657750470021124 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>yIDATHÇÅ”Ñ À DÝÜYºŸÝĮĤB‰µgrp†àÇ=C0¥Eý ÑÑ”"§hïr6¹K˜8çZp÷½n ¶ž÷„àñecÀl¥Ì‚¨X¶é_'CÚz{Ôov[Fz°BßúU  |Å{.H¢p^ŸÂIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/Fed.png0000664000175000017500000000032113657750470021055 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>\IDATHÇc`d‚ƒ`ðÿÿZ\_ÿþýÿÿtwÈ€9ÝbtšæY° Ð0 €Âbš9Ýç0‹aò0>Lžê!äCº9€:ô(0\ƒ( FÁ´Òóë¡è±IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/army.png0000664000175000017500000000026613657750470021337 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>AIDATHÇc`hà? €Å€d5*=`° GÃßèâÓ<Î1@ç4Ñ’ Ñ-¦»CF0  }?«u«feIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/AGRI.png0000664000175000017500000000033313657750470021104 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>fIDATHÇc` ØÚjkÿÿ ƒ‚,-Atv¶·7ˆ®­ˆÑTèâ¢q9¤¿?%…,k1ÕB®ÅÄ:`áÂÂB¼0Pj1ÅuÀ¨¨ísÅåÀ€—„ƒ¦.4µ!}/_'qã0WŒIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/fuel.png0000664000175000017500000000024213657750470021314 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>-IDATHÇc`à ü9Ò³¦³ÿ±ÑtrШˆ£GÁ(ž[¥y>IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/Ind.png0000664000175000017500000000021413657750470021072 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATHÇc`£`Œ‚Q0 FÁHæ‘õÂIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/repair.png0000664000175000017500000000026213657750470021645 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>=IDATHÇc`*àüÿO®<Åëº9Mó¨Xÿÿ£ÓtK £uÀÈuÀ€•ƒ®$¤{]0ìÛÀº—ÿòIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/ROCK.png0000664000175000017500000000035013657750470021117 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>sIDATHÇc` ØÚêë30üÿ£ƒ‚ìíAtvvPˆ®­MHÑ Ôèâ¢a¹‡ô÷çå‘å b-&6Dˆv¹뀅 ««ñ:dÀ@©Å;dÔ£ ¶CÌ—^RZPÍâASÒ ùC2}Õù£IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Planets/Map/Kli.png0000664000175000017500000000032613657750470021103 0ustar jamesjames‰PNG  IHDROc#" vpAg\Æ­ÃbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>aIDATHÇc`d‚ÿÿä¨ÄbtšîXè€ `€p¬®¯ÿañ0øÿÿ  hˆiâ T<D BSÉbtz [€Írª8Ýtfñ( ÞL°}òòÇIEND®B`‚netrek-client-cow-3.3.2/pixmaps/icon.png0000664000175000017500000000253013657750470017170 0ustar jamesjames‰PNG  IHDR00Wù‡gAMA± üa pHYs  ÒÝ~üúIDATxí™GoIÇMÎaÉLN" p–hA¼GNH{õ¾Ã~Ë ‰Ëú€8ÀÅF ‘£ÈÈ"šœ¡öý«Ý»3#33ÕÝ–×Z?©ÔÓݯ«Þ«—þ¯z¨kw Êcùyóü,nþ|=ºüŒ×¯Ãµk4>Îoå9«{Û§:¶ò\\´u+´+óÓöï‡gϨ7º–zõ‚aÃ`Ü8?ÜŽ¸ pΕ{÷âêêpf©¿òÐ µ†…½níZX°&L¨,Òòå0`ܾMýÁƒ¸'ÈÅ+¯\Â!am¸]»p_¾à¾}ÃýøQ~÷eïßq_¿âîßÇmߎ ^¸äƒ` Ìšﺮ3gÂܹзoõbÈõ÷[³>~Äݺå-òûË—üYýL1g°ù¶l‰ؼ/†©Sã8]جÆÃ‡ðä 87ÂÝ)Ø ZÑ’%°bE¨Øÿò÷ë[PV¼|† I7—´{S]m¿noà ¶îéý{x÷ú÷K£‰Å¬&ðù3(}úVRQ°çÎÅëXábÎ0XÀêÕák¿} MMpú4¡µ5|ŽT_(ý F´Ùp{öT®¾á#Ø54àFŒ ¦wïT¢ø‚?•©evƒ r£Ö±cù5²r(wÆ‘K•#¯«Wáüy8rÄ×€¹SZ ®ÄÉB´¦Æß¹É“c`·iÌž]^”C‡À@œ/^wîÀ£GáÕ·p…à,ÔÇ¢F;-<# cÍI4e Ñ¥Kðô©Ç6(> I;,«}ø }ò$œ:EdØ'’Kj®´lU«üRNWõ‡{5[¶,¶ÀúõÐÎç™°â;s&v¹9ÿøô\ãñãpkg¡ÂîK¸È¥±$ºwZs§¦I“ŠÐÎ?ÖÌ´´µ±rÔ(0+¸;aÛ¶8nîÞçòP°rÑÈ‘ ALpŸÇ5&N¤ùÅ‹Ø ePàË ÖJ®Ôó$ë(›g5¹fÊà}i–Ëÿ›”z ¢ÕP@ŠJóºÒ¬vX#mÅý™ê¹(°t©ŸÞ©?Pun¿ÿgMaý Àj†;{ZZ@JåA¹(¥èXEÂË· iÐ X·ÔÐ+f<€¼ŽU2Å€\fÆ ßϺE‹`út?.V@.ee'YHéVÃ,’™2Y q Y ¾’D²”QÖªtVi.½Ï¤€RªÒ6ÒPNN Pðª"[ÕfÚ´ÿX HPAbUXõòw¹HBzvìXü>q¹Z”) С­Î=÷íý.$Ub)°{w|µ‚–er!ug:×Qõ5PçÑå«WqÕ-”Pn%K³ÑÍ›8!Q¹™¬ jž…2) ×÷¹*«‰Öf^I1`p9'ðP¬x® HPueF¿´_‹Wë„»ÜÒh'ÈVÕ”= TµMÈÔcNÜܪ¦îöÈ5VµeÆ”å(±t`t®)ÒYÐðápåJ锕ïUðì?æèèQÿ÷¬?3Ê¡–•@èÑÆÖº… qú]öƒ^êoY566œ5CNרþþ›€ôº$/íIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/0000775000175000017500000000000013657750470016251 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Kli/DDBC16.png0000664000175000017500000000223713657750470017626 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>*IDATxÚí]Knì0 ›c÷8=NoÕ·xõF€@Ù–%:! è¢3%–IäÏç}øúú|~ ‰ýüü'6®ñ7]ä1ÚH~“ÁÇb¤k$ƒØhÅt‘l#ˆ•}´–`ôÿÓ zÄìM#8¾ÈÞmg/KÔÞŸOp¶‘Ø$‚PäUh-À Fk¦d¢v‰Ñ¤÷&4c-V~oÑ/@’¿ìQyzÏ#ÖFy¶¼•øã:n–¢„£¤œ`´‘´™¤]S%‚ðv—7.º¼H;ev¬ËÛý cúp•˜§# UD¼\ò#¹„v™«›•úm~Ø“úí^I|ëAÚG¼á4ÚQ,:“´ÚêeŽAŠº8šüVEhÛ4R)v½á² ]í[‘5°Ÿ·I4šÛËt¢g¸=+P¾Iýòˆ!%m‰ÒRïÓK|Zå|ÝŒúk»DA^'ùéÒ˵=-AÚÊÙÍíŠzwàrÛ4!%¦#Ð=ÍvÒFþ¼¦+Q?¾/á-àš±bôãƒtj†n„)êöH®Žò·¹9Úy’è"34óD+õ=7·lšNÿrÛø¦ø5óÅÕ„A‚éˆ~ì†vX®Ý£´í†ÝUÖí]a´àM›‹óuA´f«m7DTâï–³Ún ³‘(oÍY›­D4ûÝN›ú:èéÚ¼*ó%ÂSÌ”íÊè*5FWd´ê)ÒFâ”+êèö‹¶u4ÑGÓVÎjö]¹† }¹çk$þuä“D+l¾¤3Gã’Ì!)!—«Õã?¥¬iŽ\ˆF¸üЊÙF¢sI²“¼ˆŠ ðªi)ï!I}.=Áh©¡¶ôµe£þ(¢Ñù“¶RC«¢ËN8@ËöÐæ„rÉ¿[@ìØ#޾cm³Ÿª«C‘[m´Òþš Anµå{8OYÚüH—ØmÑtlýš=Ü¢üô¨{+oõÑyÛHŽ»»¬/8N,;Ÿ¦õt Zû?AæÒ}EoTÌî»éz"o‚‡Æ–zž¤­¬ÚoÒæî<7‡vð”G ™¤4Wg——dC·­Ì=šýR§åÇÓAæ3}¢–‰Ê6QtÄÒ¶PÎêÀÕ;i‚uöïžæîh#xÍ;øšV¬Dýº¾XA&*9QÓŽnô?Ý7{G"ìvöe²‹þ0 /2³ó$åÊšv¦)êEÚç켈ÒÍv¢HÒzºåËô£Y2I‚ ,ª:Ðï§óVЃf%ú㈮zQv‡·×n_ 2Qmr ™¦öù’hu½v¡JïæÚkÂ!Bk/é«‚Þ¹?Ðngk;Hy7ÿ=Vú‹(=A$ééL}y+T ìøÙ9³î.ºŠ®¼Äšg–Ž [ôhfIj“øÞhMµùö¼(i/¤â/hôAööIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/plasma.png0000664000175000017500000000051213657750470020232 0ustar jamesjames‰PNG  IHDR8aî>è vpAg8H1JbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÕIDATHÇåVÁ À ëŽàŽà(¥£t„nhå>(B+DõLræÜ¶Y-¥}O©µœ#çÖbno(å˜qã{ ¯ˆ#Å#²KYUrØíLzÅïÊ!±¡1^×Ói¤`;%)NdÂKv»1¾/‡åhÌ¥Y¡ öë6+Äöa90cl9˜÷P¬L?ù:þT;˜÷Ø©†ìÚf….7¿Z-hVÃ?+dS¾Æ¢”ƒÕ»”ãÂ…~VÝ©Æd‘:¢YI—c»¯<ýguyu‘¨,׋IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/AT.png0000664000175000017500000000173513657750470017271 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>hIDATxÚíánã0 ƒûÞy¾o÷kP K‹é~†ÃÝp§²$šòãÀ'¼^c_bÇóy¿ð÷ïWÿ|ÿ6Ä­!ö‰h9±÷wë:‘³ŸgòäÚŽ>ÙeϋʹYâª8¸üÓ<ºÔe;L@ 6ßêb’À.8oíaf.aV¥üb‚wÔ­oŽÀ2‚*Bí)ÿ8ÑâpS4>©2‚Wñ|±TLpô”×$ŸÞɶ¥MñåK©"\Nm¥:Im±€è½ÍZ$C,Ï«Rz›“GóÚ˜àhõVö«ÎpVs5OráI$ͧyÙ–gp$àZø1:TØ»&ÁORM¬ÍO2»GËO OsrÂ6)?c–¸­Ã`fbµùV·NH~’ Ûo¶ LûpHÝV†ˆrì¤0[1Ñ^Ž={'ñ“¨ ã' ¿@'™K"lý$ Ç”mzÛ•75ØÛ5ì /³áOÓlugë¯k$³Õ…ë$Gä?IxûÍ~ ŽýH¡˜¡Lñc­ÚƒÅŒV3Nw­€78‰d? qnéñ“¾­&ÁORM¬ÝOÒxq€ýÕ ›4Ñc®ÿˆ›Ü®Õ\â£Nùñ“à'|'ð“¨óB[?Él¯º­,«]Zû”ßæ~’¶¢I¥Ÿ´gÒ¶~»ûIÚ‡ã'Ø”è$µí8ü$†æSMò=å— 9wO½Ý/7‹ü$*_ ~ü$«; øIbuŠ#ò€ŸDÓ~‹¹Ÿ¤ÝORGÐdPlù“Tõ¤m…œóï/Nù— 9ºG‹ì1~î'¹ŸÚã'|Gë?Iõ^l{?‰®6iV˜bR~Æ,±Á‡Ä>ÌÄjó­nü$¶ßl˜ö-à&º­ +äØIa¶b¢½{÷ä~’*ÂøIÈ/ÐI4Ívb¶~’†ƒÞœå¯õ“ØØ5ì /³U]Üì7[w˜í}MøI¶ÕI(ŽÈ~mKØÞO"ˆc?R(f(SÜX+›Á`1£ÕŒ‡Ó}XÆûi—zÙ–‡ŸìŽM´L¹F}óIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/plasma_det.png0000664000175000017500000000104713657750470021072 0ustar jamesjames‰PNG  IHDRKÿs vpAgK÷ ™bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>²IDAThÞíY[ Ã0 ëQ{¤%7ì>JS'$;n(#PÒÇìø!9Þ¶­±û¾mÇ1QÐëu^[û^ß6º6ûó2Kôê;vóûöÀª4ÊYéqüZ®*Âh.ª0}Ÿ¥âYF—¶ET¾²üÅ臘„A)®Ó1 |¬F;áZª¬%Á|¬Š=æÛtTcð`àºf˜, ºÏY-–¶€R4£ô6uUãìù¼=]C‘Ó»9ªzdЙ*·¥Ÿ ¢X¬,4ìë¬)mšt‰?ªh¸U¨NƒÃ­E¥Ñl°}®xX) þ2HŸ‹Ý"0ÜnRA¥*aV dƒ©ü¯ü˜à7Äœkp<IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DD16.png0000664000175000017500000000254013657750470017416 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>ýIDATxÚíarë0„{ÿ_½BoÐ+¼“õMãé{…‚­’v÷W&“†HÂè3FôíMzn}ÜÔ`òßM¥æ?oÚ o¯‹ ¿ß´Þ^¯ò×ý+·ÑD&|ý{“¹nøÂB|O£õXô^4<úüÉåx7ÚþØš±ïÛ1ý|æþþE׳ìµ»½ƒ¯í(—¼Ýþ±ýžùÑçI×®5fEeÄü6¥›Ûl¯KÃHY ”$QX!•ŽÒòmÄóq yQÀ/ô©äe7ƒu"€@ƒIDŸtÊ´Nô³¢cÀY¡Ð‘=ì;ó.ò¥ç·žI4¶Ä—sÜ™^ mÎd9«å¦M’¤×RUÅýå¯"±[çf~ üì†øˆœïÆ™ìM“/é4GöD“^Â%%™8òç1¤§Z¼͇ç£FÃFÈÞ´ùðqnüNªÓ%ž$IéA´ÔdÁ¾t4Ç ú(#tÚOÄLd½hÞNòÜ¡ldiŸÆIFöø4¢ezF˜‡ä•L\¥´e'Ïw"mázï¯æ’`2šÞãOI¨ï ÒP*IRJ,+ Å…dE©ˆ1ì•îK{H–݉ã `Áèô¬l €{ìëOWsÚ|ț׸ͫ›¯ã'‰\å±Z’¤ô`Ò’ŒJ¾[ô¤ß%7dCŠ’/ó¬Oú¯†<&<¥eö¼iŸØû ëÏfo ©ÔfÜiŽÕâ,Iú™¯ÂÛ5ä/òÀ|ȨėZô‹™”·].†ÕÙá*ü‰tp·Iˆ’„„݉ñXhC%½5L6S=¯Ù#coz"~~áŽÜyÜë2é·nÑë¾ %Izna,­È´Gžy{»²Ÿˆ!íQ‘^Þ©z²y¯àÈn…KGûíŒÐ'z¤îòY¾Y "sá¸Ó G’K¬ùø'’¯àøaà†.0)ÇŸx’ô÷(¬(9QÔr¦´ÉN[[¡†FJ­£Z›e­CÏé·5Dã&£È×tCÓ»¶6m ½ L’¤×Ѩ&7ÙŒ‡AdðóчXzu4¶ï‚‘ÐeàL[¨câm‰5ã‚°GkÚGŸ“Þ¦I7ÿØoi5QvE#´EãK‹;¥œeÇÑHÓ>%I¿‹¶ÙÈ–i¬C?Ë‘Ø>ùË‚_JàDòBóä%ÀVI~™YZ†Ä¦ÓJ üqWNß45G#Uxí16²rË&ч#_Gã˳œÕÐ8Kµõ’$ Ä8e£ô>7Œ²`yç¯yÕS:y!$Þ¾{w žIÍŸ¬Ætd$“Hãø‹«8Çëÿ] ‹!ç_ÔÐono,áAðŠ™«p”èPÚÉ$驲n“ Á²´ ›*5Œ›À8šHk,ÿÃ{Ä[‚á£ìÓxÛ0âæ5~ ¯nºŽnYÛbµ$I¿í®éiÀïâWœÏ6ij'S:TE²>øT‘xDô\ž«¡kYs³˜)éÓxö6e”£k—ººñ }QPÔ?’$éaLŽÇ^r°<_oKª0Ž÷'"×T{ÿùÈC¾”îµÆj¨ž·ulé'sGi—#WÓÿጶ'CæÍfç ð(ÌiäwÌ_’ù9«4é$Â’¤¿„A4“Í{JX¨<¬ÆÑ¥Ü¶Ï»D$Þ°ûM‹èóá{WÚkÀº%©^-B^Ÿ½”Î/sÜAÀKé,è-DikŽQ>W»Ù“ê?aD7›¹ˆ1iIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SCbc0.png0000664000175000017500000000034113657750470017647 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>lIDATHÇí”Á !S¶åX‚eØ•÷à]>Â=Ü K~úH…«V`  ÷9™íÀh[PÚŒ*å Æl{‹öŸ%ÿޞΰ[T°]ÍÕMÑѺ9þôºÁ`pí´¼AV¶“mA'`ên=çø¡OH2IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ASbc0.png0000664000175000017500000000032513657750470017647 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>`IDATHÇc`9`Á†ÿÿ1éAã°' 4 ÃøîÐAï@¨¨€8âQŽ˜4ˆËBrCê@t‡ár ºCi£1ô™dÈ9ÜrîhóFvmñ_´qŽÿÏIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ASpara.png0000664000175000017500000000335613657750470020135 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>yIDATxÚí]ëm›1 ôþ¿ºB7È Ý ¹¨ƒ¯i•Ð<>uªI 0Ò$öEŸDÝI|Ünc$öýa÷»ôõv`?v¿¿=ìãëí@W€ë+ÝH^#Xìú .€Öσ'yÖ#68=ÀÛí÷÷=bëçýù…o“1:‚ïx}Ðúºú½õuÑõµ   긾Á 4 Pz_÷*öޤ>rE{÷ X[$Úb+···÷yûá÷È]óxllìlÒæ^PB¹úÅðŽ‘ÍÓ´-/}D­¥-°@£øk£xÂëõýƽø_`ë«—Y£Åˆ1i‰ÍHô*m®KÖ¹¥ñ@ïâRùÄ÷P`ëHêÖ¬Ež¯N”âK‹äóœ\GÔ:‚‰*.g§X§‚4‚eWj/=JíѶËYµÍyáØØË›ùL¹[ Š(Ÿç—ÈF;³¶2nœí™µ—OJ"Ê}piÝ;% iH¦ýÅšxJ_£^GfýZÁtwb=4_'9{±l§SV-âõsnÿxRï}H½(þχÉDKmšDr?Û€yýèv`¨ýohÙØHèžMéo—AÈʰÑSóÒolŽ®,)Íá¢sMúÃÒ™¶D\¥7^é™v„I”òK¤ß“¦Rù™´ôóR˜K“–Y‚@ÏeÒi#„2èj-’Πµ“ŠÆd¡Þ¡ (¾ã¼o•í#­kRñ12¤âh¨úØËÛgÂúüŸÄ#·ù½í«Y;\§{Ä4µÓ~šœ%‰ÊK@µ?+£^)¿ôÿÚ÷˵”¶¦‰ª¶Óýö¤ŸƒÇ¬bz?xÌNB¿GÙÌðÁ±——òâ¡w;›Û/²“÷à®c¸°Ú[i—Äç¶‘”¸––WÖ67½Ž(Hò^è ”? \Ë'ñ^‰¥i4uHšð0Ÿ”˜4š-¦ýn`ÚõBÖ{Ú”Bˆù ]p…U³m¬ÿX¾ St‡KÛCDiƒl%f½=Lù±5~š&Л>Tž6Ù€>]ƒ.á嘔!Ú¤+‰V¥­%•Ð&þI?GWÓÑ(Ú >ccc¬‹k-ㇺ‘† ·ÏÏ®·e&¢ÛëÍx‹s¶Õ‰V •椠V”©Z›À{4ʬÑSÿ«\-Jgð“¶ÚoÚ£/ Y¶Õ…j‘¢=OS“dh@ïÖ¤EËmªÍɲõV™_ÑH:@cccŠ )5¾½X;}¹{ú†ô-ŽkZ¡M…mm?¼²´¼qÊôÆé>LjoÔ °m .ú&fÒ$Ÿü‘±1V³ïMÚ-¾.i•1õõ‘°·ãA9À¬€Ÿ²‘³Þ8iIeG¿Ñ²W’ UGØ{¿aæô±2aí~ϦP´ ÊlÑž8Úï—·‰öÄ)iÕòêÊd§—I^ÚmÖNQVá[ªÈˆ~`{aœÑ c§1ív`„ékO¤†æ•lÓ$Z(ýåȯtKDµM~ÿõ„h4Ä›j¾ý@³½,ª,á½y*#ªR `4¥¬ó‹•ê£imáÛÏhúE:°ì–45§Mþh~IºXÊ+:R$3£d€––MìÖØ.£•´}J¶—û“JŠkâ©<¨ÖºÇjíÒi )j$c[ŸU›¤©<Ô´©;”†I©ãmêN+ª„–­J»»C“ïÑ`šh »—h²uJ¤×Ö yYsßÓüavÃ'mÇq¿V0Ú¶ ´}Jèøàˆ£±]‹á¸Ú´%ÉÑ­(}™üòFÞÖ ÞV f`ÞæönNM¢•uFK즫ºcFvv­bº^ô}h;bµ“õí´;[n¸J)I^vh”µ©—EÉiQ¾è&eî¸jáÑ#`kˆ0£öž—u‚±6¡Ø˜:„o¿ÀÁÝÇó©Ñ~¦Fuù%"*’äöIA€Ö¢mÙ °†+o#X~-ŽèÉÖôw{9QE"JdK¦Lè-©;šPyTímO6@=Mº†ô¨h^¬r5ýžä˜¤«ª´µ+¿.QÍå$þ5¨9ÚÔI (}w5ú³éa¾c»´Í"‘º¨m¯Ø¨Õ—±ŽdÙªÏ.c¿­Ñ<>'›R(%mÒ.CQM‚ÎI³ªó6°2åpÕ(oí"ôf)¬æ¬Ž7¯ëùóŸ—}¶ª¹òV„Ѻƒ…z8§þ`!Áµ‰¦mwr¨ûXERÛܤcœj¿6±2$«Ý'IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SCBC32.png0000664000175000017500000000334413657750470017642 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>oIDATxÚíŽÛ0 óì>§Oè3ú«ÅÁ8„9ždÙGé Z„‘egW©ÇCÊùùóñøóçñøýûãïã=.°ã… ôxa;øñã9°ã=v.âo{ñï²¹k=f–GêxÄÇÍòKG°`ñcçׯ~òùöm€"RìMÊUŽÞDob`¿½˜À°ž$‚ó$ÛHþÆ4éE PDÞÔ£`ÃY€("pæ)Ó‰Xéû¥Á^JL€Y¢|Îe“?¾Ž€ËMSo~¤(Ð(ù1^$óǯž¤üñ¢Ôy3Ó„Ï›àÌVDÄŒ+°˜À0Êg3³4nä2É_îIà[¢^ñ“É,<Û{Ìâù¶ž¤l®f#ˆ;zæ9P½È¼/ i‘‹*FéÿvÒ·)S1Û¤#¶ wé·ó$es4ó"ñ®.7M­î˜]o_{€YºêU ðíùïÀŸ)ÛªCÆÈ*¬7Ù¦¿Ì¶[¤ÉQû‰Û¾wWÛƒéf)ó"Ë/}¯Á$r>ØÈ“èEô ²”¿Ýîv+‰YÁIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/AS32.png0000664000175000017500000000604013657750470017427 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> «IDATxÚíQr¤7„}ÿ§\!7Ø+ädN­·œìþ†šÿ^\[•ØŒFBý ÞÞÖ†Øßöþnýû¸cÿ|Øûûûÿßǽ:xý9n$?G°Ý±Ï?¤r0ú÷àIÎúŠÃ#>ÞÁ··Ÿÿ±î+Žþ½ÿþ‡¿>Ìþ«#øÿï/:øù‡®?¯qïúó:¢×Ÿmzޡަ¼þ‚«£U­ß›^ÅÙ‘ôG®iï¾:ì-o±µÛ¿æí/~ŽÜç<^[[»7›ŒsÌb“qÊØ„%ýÛŒþb<±$ãÄôÙq&AUHõ«-;hMvÞê=Ä$thê–úe&A¥þ1XB¥>Ê"tXbomrXвÈqXZ[[û.ŒÒî0*ýå‰ì/´všã^UO#›ü®4òÒ¿q‘ä$¿‹+jË1KÐÒSbWYdÉ&Oa·A[ò7bçcÉ:è­Þ¯s»(ýÇ$pБ”Ó\VêGG¬Ý±ßgÌ#±àHK/+ÃÖÖ^Þ²§þí«6«N¬Ãô1l"°¹-Éb¢ƒ*êìŸvhŠž„¶'rPÉ2I;ÝYŠºš~8æXšÂ³’?ÐÛ¥~|õ’•µçP–È~Jý(‹È`é MsÈa©_—EÖÖöd É1A˜©XKDÐ¥?[É%¿• ó4Û$ÿÌüsó·”µuFÆ$YÉOû*³áUÔ²¸‡Þ4ª‚z–¼ÉÏÊ0•§€'õ½9h…1úÜü”úÞª–úÚ}9Ì$vÂf,-$­©­¼|£E0îlåÏ[•þ4fïµ)‘=5±Ò{l)š~´$¿ç(ªi(`I~ïÊÒQÉß6RYðöæT{œÌJ}Y·n+>ru4Ï"ϧmN¢ ¿*í&XŠî8ã˜d,$-‹¬-›8J{Тx:üòññ/2*ù³ðDÛ!¢lbASž¬Oì©OòÓÒè#ëÚÝ1hB™¡²ƒQÉï½/¦+hët_x‘‘Ã$c*5^GJð~ޏÃÀ=&96Â6‹ «ˆ×–Q/š¯0öáØÙ˘°’•üÇqvÏmƒ'Oú[*Æ’öô4ETò{Lb}À6¡eÚ¢RAºÈ@GÐSÒò€.’ãR_VQå; z,×Iq9Ì$Ë kk ôGÙD^Æ¥%^^úËEƒ¦!¼§åÇ+ª¨ÇH~o¤C“lÇÏÁÛ¬âÛJý±‡çc÷âÛ¨™µµyÒ¨¡' ò2þlævÒÿ¸ƒÇªA±kV–íeNùåIÐ9x,ÓäIýè=BoÇÄ=úâ¹­ÔKscï,<Ž”n}¬­-£ãã˜l'z‡U~ÐÛ¿¨txBUtŸø½¬ý¸›èQE}l$ǽ‚ÈJýè{’¶ÓýèKÙ‹œì›¦è”I}ô1V[€fC]â”úCŸ„{ߎA6a³6…QÆ1É× K^íóãµÐQñàuÛ¥M¯öe•Md÷fŽè®ò¦´ÅPíª!ë.TeÙjõÒ²‘ÍJ~4“ž³^U¨,‹ÐdŸæ7ÎIΞ*8q¸“܆E–AÖ–M’[ãñ¶G^-ty㨫ô·ÊºÈÛGo ¡lB›£QÁÚÖÜ»KòËöÚ(<ÉW§wJß^­C-©FQ/ž¡«RP8WÝáÆ¯ž+õÍmkMneí«Xv²RmíUÙ亗˽*lOâË Ê’þ(›´9Xm¬ì•¿§Í¥®vpåGã Éë•ØÅ$îÞn­>´¥ŒI÷ëôd“°³KNêàä“Úcr¥~Ûˆf¡ü i6¾Éšú,ƒ¬­½š}*lEäeÕëGÙ¤=PGÓ퉨ä÷؄栥«máÒ÷ ½CôãÐäž[ü[e’Ä¢‰Iþj¿º„/ù¹6îØêŠ>ˆ9.õ­E4ÆQ9~¢« =qأߵµµ¤ô·å˜yÙ–úMaèú³RŸOèý“xŸ4 M(Ž&àé¹¢Fïry{x›ƒÙ×UÝYVÔYÕ’†&•þksù¶ÒÙ¯J&P£ŸHî ëÔkLÍtZýƒlý­µµe“féo±=že¥¿/ù“j†-ý­ÄNž0É0¡ƒIþìWLw°KÅ”ÔéÀ$«t`á…öPÕR_VÄ}YäÛ±Èê¼µµévU;r6‰>F•lTú£Âµ¡â#Wúá‰#ùá‰#ùÛ™„­fè)±n=ØîàÁLf¬üˆ¬´¬Bú‹ÇÂÒx¹ÎÁ±,"›SkkÓmüä·ïâ?F‹Q]|\ɰðÄUÖ ‰ÞtDÙ1kÎYj&Ë$m«¶Z= MÕG¦(4Y!iú,ûžäxaˆvhª:‡¥¦¬–o{JÎ’øíf¥~;,]™ddmínl2xq<—þ–~Üåz¬¬£J»ž×ÂŒ–?”»ÇDC4_Ò.ù¯{k;4UeS¶Úr{S´jý™Ch'À44e€£«TMÙvôz„–’®eFŽ] ½îÖ±èݪfËb­-L“þžÔ?æš–:ŒI¿™I®UE½9ˆ²Iž²ÍËdÍ-ª7ÑQé/_TÕ‚amñ/ú¦M¼³jk¤¼L“Œâ¢#Ÿ†¦®vthbOr:,YŽvùÐVíqXê‚®µµe“ilÂî1Ûæ¬¤®'ý½¶çí'¨ÙB¯xÛ82<±d˜ðVÜóÓÐS;‚[pØW™½G(/œí9Î;|/ŽT”EÒ=Zlí©H¯GÈ~L@Ûq²#…ÃÒ¸næÃ+Ã6a³¶‹Ã@€híL™ô·v†vˆªJÿƒ‰çZ²jL¹ü&’ž¢Êº­C´ÎB4yÏ-,’ASTò{WéiO‡ÐËcѪô®èݬ,‹”ã"»×á¸ÀmA’×{gŒ¨$·†ÀÒ²ÈÚtF>1ЧB¼¼É˜ƒ}*Öî üqAVúË¡ÉSܸÂN2‰7wMTê{Æ+ƒ¦®þtìDW¥Ç ‚ ÖéÊ*ŒØ~_Ðst@Ï0 ž–EÖÖ¾ £´¯Öq½c½KÇßMš¥~õ°­E5*¯Ž;-ëAS:%Vešà”X6Ne/••ïvKþòÓ¡j|4ÅH ÈÕ=gE×ñ°züÖÙ¼qÔ×@;Ì–EÖÖîºXPÕržª—$dí઩.Ù]þü…æ'D·c’v³÷e¼ÕBSÛäEÄKäÀ·[òRaÏïÅd_â4²cR?ŠmÐdÍ4‘Ó˜£,ÒÖ)ºh¬¯ìX¡‡µµµ HÇ(Þ3ÝñýÆ–Ô:Öþö©ê`x¤£My'©MŠšÅÉí’?ûU¨û¢/thЄ–òª÷Tˆæ «*€—iJÄO“´ÝD¥>Ê"ô¬€÷Ðåúï1o—ìEókZÈ`iíîö/LÒS?Y QIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ASBC16.png0000664000175000017500000000252013657750470017635 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÛIDATxÚí][n#1 ˱{œ§·ê~ùñB dëAg( t‹2–¤lK¯×sìûûõúýýÿIìççïùþ¼Jðm__@Ö§\,€éƒÖÜmÁô/°¶Ì ̸-ka| @úArÀÝy°àôûd2Ävh­ÓÍ5bІZ÷XK®-G#¢,—¶K€ì5¹ ˜µ&·ôòÁ¶>g±/a¥k¹õß- i-¼¾ˆ†ê{G+=À(°c€Þ ¥lœA[-Bðc´‡Êd›Ä–NíY+Í.Àºò”©<ïšjµ˜Å´[Ò»è{ÅSZä1êõ‰\YÞbë@š¤˜5=XÀÚ\i™Xú|·;*‘Xj³(°uД³Dñ˵H¨ÕÇhHƒ˜L&ûÐÈA:ÛÙ]ÊV Öžh]“‘þ]wž,vdE-‚(¿E¼’àxWÀ¢úÖ‰'ÄŠ¶C õƒZ(mp ^ÊŸâXû¤PûÁFËUå®Ë ›Y‘Ê:· ™L&^¼O-m^Ò@Çb¢<}‘í/èåH“Dïj1iïýë÷a€´-H߯Åtóàõ+‰L&»•À^Ç´¯•×iªo+?DAaÝM·Ç¨w£üe„t—IG÷IʉW‹¤í4y§‡è^Ú£C·(Ò˜uÖngÛQÔE¬.SÖ7w'bÚ[³2Ùã¤À5W‚ôz èBóØ‘/³;»="ïSi‹½E›¼@ÛX‰—ê·Ó'tuܺgŒmYÄÀ"šéûYLÚÒ"m}3k0µ»> ´ÝõQÍAŸ@±MÅeµ¨LÖÅðÀxŽë25–SþÓ«ám‰p¬~LZÓö–ô^!»lmÉñPÊ’WΜweéu½éÒmKï—årZWÓŠ$‰%›¶PªñÓùî¹UÑ@U"©…UþH§È„úàǺ˜öòÕ㘶ÒCyiîF·Ò²Íg—`(ªG‰ë5ÛkCŒSÿèZL—ö”¶åèJ0Ъ9š2GÑ醿 ýFÍuÔžöšFdeÜv-0o%ºòpí+OT4!"ÛÝ:Oé}z÷,—×CiK\ôYYÑ»ëä½2dÕ*f¹2Ê Ç\Ù 1häÊ1BJKñ-—Ëd²§ª;eþŽ¢Ö–Œ3‹d ÔCãÚ‘Žt (·Ñnú«2×Eˆ¥×#A%c¢)yÓ+¸ Q„¶Ê¼!Ø'W‚j]ýöº ‰¥íA‚bÐ^•O৪RîÊd2™,W›Ð${Wy¯*CI7Ó5"¬»E*ÒÔEXwËxDË„Üß‚ô}ðšQü¸`’ʆÈd2ÙÓmw mË\»DKà1@º+:ê„bÕÈÑ5ŒUG£üÑB+å}swŸ¤œY[/ÛiÚmÙèž]»‰Z)£øÖ(¤O×iŒkÅе€e21ìîµ–&œ†îpŽ·¨7$ìmÑre1k: Þ±èÖC;PËõcWɽ®GWÊÛ]ïOm}õÍöÁ´›º½DÍ)жúM(½³uqFT^@T¶†£¦lyY@Ç x§zW_›Áq<ª…4JÖ¾ÂÐ%󺺬\¦—êÓ¥X;MRWÎz¢Çó"ÑDŸmž.æØÄL àz€µö–u{¦UøÕIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/BB16.png0000664000175000017500000000344213657750470017414 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>¿IDATxÚíQrä Dçþß{…=B®°×ÊÖÆ•Šâ¦5µwb>R)OÆ2Ä£‘Èãq—'å÷Gñ¯—_åÏG±×+ǧëz˜ùmн²ÅðÛGùCÊñiú¦Ø€¬©÷÷Ï¿ÿüÖ¿+‘¦X‰Fóq“Ž•è-Ž¿y3%þ­ÏÇ fW|ÃüŠkØ~ÍöÕãúqÅ>®øß ¶Cå¸þžcö©½5lŸ‹™´×±WcKØëØ–ƒ·‚5F“¶ÆhkÌÞýÀQØØÛ±c½íïÌH=?D¼ÆÖØ’·ïì¸Ñ—ÙïCeÒqÆÌ¿ýÄOïr—m6Y"s³u„ø÷“1l1Èš™¿Xǹ~q”9{ìiðƒ@Œ(fø‹‚ë&öá²äE€ˆ>kwXÉâí`Ôàì;ªý™¶ö”‰èãs–üG\v¾§C™^½}öøNa¾ŒP‡5É8ë;œùrÒ°ÅŸ³°®‹Ì5&¬Y 6$,tu»l-q½à6™_ÙÂ|ÒdİÁ“-ô‹”ˆÃhëIí ÌFøk²ö8/±§f’›5ê%èo‘4¹ „Xy #òX“›i<ØøÅ°ÇÞ1ƒžr©øüÎ426u¤Çâ»÷ ‡˜¥lƒQï=S•íÿ‰1mu†;>à¥1Ï?¦Þ›d–vÛÉ+² ½ahѱ4>Ë ßb–C¶˜-8·>->0è·C3Ö}V\rKw@tý±}µ³F0 X°‘¼&EFoLjÁ¶Á¦NPfd›‡Ñ§ñ¨]ÿsè)f–:Pjñi«dŸ‡“Z6Mˆç.67¾—ˆÓ_a49Q&±â¤2é¿âÞxx˘—ß hœ:_íø[d›÷-HTÜàèè[1ˆ‡flvè­F²ÿ6?5ŠjÙPKÖo­yVWì‰VÁ ÑGlLºHȾyŸ¹ÝPfXØÔÒÎ%Nb"v™âIB0-^.‡D3­xÛ ô­K᢭}™*X˜‹¥‰ø"’›d›LR”‰¨—[…rñÖ€x3D°ýy[½:Ôå)¬X¢××­[õ²à„•p Fœ¡yi.Å÷ÌOa{ÈxQsµ†U]",~ë‚Ð9ÿo ôÃ#Ÿ9ÂåðÈ,u„b ZC`™ùìY°p“ÆOŸW ­))²$AÚQk¢•8µLL‡°=}Pž0Ùž"™ü·&Åf'ÿ²4àœáòÄçè´_žê5¼%¹}v‘w—»”¨]M‘4½";l¦õxÙB²#”d‡F]☬{l9,.¸…&;üMvÜ]ܱð' Á‘†²CaÝÌu—åþ̶MP+FF#––Ì3uÀç¯EðC]`¬^Å÷á& £ùï[ž â›&ɇ­kd”íÒÝ„õSЧ5b‘ÁÓ v)! -›Œ`ÐçD’?ëF3‹á:ÿL§ï_üè-6yà4ºÔ«YL5C¾²d |ë|º,Mf5àx/y)Ž52Ëñ#ÂVø[ÙÇJ¼E¿ÇòIsá3Üa½”é  °eòŠÅ8m-E㎂âSËÔ8NØ¿N–ëå§œ¯)‚¡­%·\+6†dR¦Tã²ÌOe mý¸äâ‡` DÚ¨h2ÉÍgñpbš—eÍÓW»ò¥³ø0iÅ5Åóòƒ(12ìK-H[Øì,çqrðøïŒ5þähÎ&{úã;ÔÅ0ëÐêÑ–uB¯®f:Ö¡A®h9S`4jo´+c¦{È._9‚g -M sLÁô-,]tòÿ´Í˜äçt†f_¦{ð•ƼÒ]Ì'z5ïºÕ°¸©K<œþÒê2“Dë´x ¸ ·ã­ èÅK˜²E›x™*X˜ ¤±ø"›Ä›LR¼œˆ*–Bùö­‹l†4nÿÄÂïz'ÁÇ]^àüñV}Sp‚8C€"¹1ÕVadÙecèÜÆ`Aqx¤ 'üÖ؈ù­A¿ž#lsö@çFŸW.²ÓMšRRÄI8‚´#Y¢ÕèË-©e>{lO¦óÍO¦Ê&ÛSD™á¶¤Ø³ù¶4à±á¶ÄçóÈkKõ>¿‰Öäö¸ŠYœÎÿâå/ló_h«oÛºIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DDBC32.png0000664000175000017500000000404313657750470017621 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>®IDATxÚí[n9 D½ì,'ËÉ®2ƒþaR¥îSÀ…ñ¥uõ¨#ªÅŸŸïéׯŸŸ¿ûóçßÀž×óo¹–{“mÉß¿E#À×ø Š'@¹AòöŒb¹–l Ðú¨Æv ÐûÿÜ6~µ ðy£ñë¸Ä¯1Ðñëû\$ã„‚Q’ÙäyÁ&8k“ &9h¯e’²>e9êÙ×4hвúi°´»æ^Ç"í"„Þ.yëÿ&›àž^gýå[®|s×ò§ ïÈYþÙ÷gµINY${­Wzǰ—EÊô’kXXBYÿç%7ÝÈÓüæúwÙdõ#)c’ÕÀvOm6k‰ÙÏË™ÄJ?̬Û`˜YþÕ³Zé:e‘ò wÖ’m°´Ë"å®2ùV„žþ?@xJ[YNQ4í6sÚi.ÅëFd,¿Å"åÖ5ýÐÆ$³ôC{~dlI‹EÚ·8vY¤}eIÜìŽz¹Ý,X!„|+Ðñ9îIg¹#™À–Â]û4¾aº ›ýÅV eþÐËí»ýVú¡IÆ´NÉX}¹g€~Í)ßkNûZÓ,‚BÉk±Ìq“6(äï~«º5ïØògg–¶S`U³Œƒz›È_ng“¶ŠÏ»kè¸dÉUY»Îò·u~+í W—Ä*—ÖwËZ–æ¨â=Ý·Ã`){¢— XB%OÌmx]\ÕÝrµŠ™µ¯råàd éÉ—"\µüåL²;êä™$½^göDN Q»aÀR7g#„>7zWÙ¤œÖ¼Ï§·äÌò¯²IX€ÞçÛµ÷¤Q»“¿oñ±Ì´pM€³DéP¶/Ž%99¾HBèëš™Ëø–jïI¤ð-Gm±‰å Ë]ägl"»g#·-8{µÃÓ¬Û—ÊÕ;ƒËï¶iõÞ7´v&ÂQÔ­xéµïŽaõ£ç5„‚Mþ,›xÝìG-SÜ2°ãKž¬ÓpíÕÊ­„Nù´2ësmÐäÍYÓQÙ4R^Ï$û/>NeuêãÀ°ú!Ô<W›DùDÙÄÎÌúˤÊd É{©q[ÆÉâàrhòžfÛ-@jj|7ª¢é1BÌÎÇDwê°ù1»¯\³$"„ŒÒlòzx’/ ,cùW¯^ÛÕ^£ºZù%¬w …®–¬9î3§kZ9{´1/F-rk3B}–ä7Xƒ£m—\`að´jXw™$lÝ›vXe’th*oÁkúàgF1õçÖb„úúÞ ðÔà訣>‚ðÜݪå/Ûå_µümy’(Ç,ÿl“L®Î;je¡ iŸ÷ªF¡¯ÃSØ|({Ž:Ëú‡­Ñ££ŽzH íhoý‘¶‹"vŸ')7®²OäX}íº !ä³²,"wõ$§ÜB¨ØFÉ)Ë}„Mà«ñF-‘i°szçQÚ’¸zkTùƦÅ$V‘9&ißí¿šfÓU›O´¨N.Ëì.aò‰„ÖÑYËÞ.?³þò: ´¼†ö5®œMÖõUãÏÛë”X•]Ú*½x™Dšä* ÊÝžçåãò¾æ-,c&®9D†Ðç­¿¬®±þrå<²œ4ÎÖ`¹ZÚ§L’ài¹ôth²¬¾Üi8Ùò˜ò…E-)Ë“¬Vß-3z³:»LN!t´¯ ^ë/Û’×̃°Éë´Ò rдÊ$íŽÌj£»ÕëÊaiõvæðµ×Ë"éK£7í0Û¦“¹øA†EB·šö Ï«-(Ï(8jàI•MäZN6Ù( MÞÓoi°ä½bÍJÜXL’¨÷0YY€«w¼•vóÚÝAHSÿŒÜ_Î[¤BIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/AS16.png0000664000175000017500000000330413657750470017431 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>OIDATxÚí]ëm›1 ôþ¿ºB7È ,E¸idÓ|ÝQTL ±i}”tGQÇËe¬‰ý¾Úû»ôûvÇþ\íýýíj_¿owtup}m7’·¤;vû *½ŸgrÔ#vx{/—?®{ÄÞÏû÷¿®&ÿcv¿Þ?éàíƒÖ×uÝ[_×]_ijŽY ;¸¾ÁêhÖAé}ó8:’úÈ‘öîÕam’h“nooŸqûéÂÇÈÝâxllìgq•vŽÝÖCºÃVÄ[N¢¢o(í0Û\÷h"‰úÅ¡?q’ØõF~ü°JŽIð N?Wx$Au Fc·Iiçc`juP›½÷±í&MÏ—md) ñ è¦â{GŒîØÿóˆ{H$‰Îâ^† :Õ±uá¦Øè¯; ðIøµdе•vjàÁý5D­=J:'Ñõê°DÔéJ<7ŠiËŠ¨‚?6’(.’Íý\¼Ábsé¸!hiÄ´”–1xlÞ ¾6«u’Dæ$Òl×IR‘cšÃ÷{ífÇ6 —±1ÎŽ€FØ&㵬Aј´ðn?A×v ÔO‡†„¬µ7– %°{ÔZÑt`”Àš<—ÎE4 ã*Ñì¾u„Òz‘ôêm\ë`X\æ(ŠƒÐîu¤ Î…1 ·7ÖÖ/HstuXÞI,ÎÏEšƒŠAÄc/k÷“áùÓÊ–“v Ь·=â6jÉôv(ÆŠµN?+”p¡†°ÓxÒŠ¤­œD:g /?íG°} 3‹Û¯ƒÇì$í÷âcÐÌØX*ÐÌôc×M™kn¦ìÀÇšÕ²:_%°° 4¬eÈí2¬^Àºm$Ûe÷­H:{NBCÒÞ¦²“¦èY÷ –!hë!#mFs›4rn{âþ}énXâ¤9|Ü1Ä£±n\¥}Jd;'‘J¨Ên J)a©4 üª¤Y{9 ,F½5ü´‹ÏRŒYoA”“§è-úm«¶‘VÃQ«“·,6¢Úzf• …S¯„F²€ƒ  $6rŽ–éÎDc©\]tÎ=ÆÆ~ŠIò}VQOºc+Р~XJ…¬%ÈO'QÞÛ±eB8ÜŠfûïcÔ¹Çk€•u¿8¬¥á:Ía"«{®`+Mû½ât^ñ0Iµ¬ƒô´Èf5=¿‡©£9Zžñj_j³{RÀcccI °]j|»X{{¹ûö Ú·\8®i I§Œâ?zã”é“u°}û£,iÛ#¬­j@Û&fR{9;Ny[’_ÿnå*ô4œV¶,ßý¤9ˆ®DÅ…þ°Ìªô³Çá‘DáA»‹MxI“t.ªÞszÁ# ÒKGóE¤»¨»î´Ê#´§;…ø4·:ÐŽ{ÃÆ^† 4ŒÅÇ*x ®±=®Ö®mlsÌÚ…íëw07‘n&J1¨•ÒÃHTô’iÙe„l†Õ ýËbUtF[ÿ¼íá`ìM’4VWöH½#ŸîB.D°ÂY:…sì>ö}ÄP©•6èe¨ÁØØp•$ÒÎöµ£!l»¼Ø¢5ùzÌæØ“p_;å[À‚Yš›Ðê £Îî´c«œíH̪þ$ÉZY•oݳÛÛ¡Eþ¢Ý’@)é}ìÀ“õ~íú<5–êmßm£‰N×ÜyvT@»ÝÂÜN¯¶³m»â[Zò<Ú:!Úª! X­Í'üÝ8‚¤I:{³öN´¾º+4Á¶1xÌ,~™u°ÝN²}/>ÍŒ />5³àÏÑ41k/YXQE»ü ªÇloÖ’áVUPzŽÚ›å·fûiìN£¯ù&QQc âÓI*v5Ç .ÚÈ-梪Qå'ïÖ¾%HÒóª† Vl‰±±1%AŸ^ JŸÝøût`òÄ“­9ª!ë(¹ KîzcÉ;²Ùa¶g%Op©µ,©ÒHSYR=Ûü±Ôÿްéz ^é_¬d›ó‰“H“¦\ÞE[϶s’cŠ'XŽ2I4Qö6šZ.ÄÌÒʲuü˜|4ÖVûh›8ST%ÀÚr&ZŒj¹`m@JS0CkÀ9æùCTs~äÈüÑu%­tëi(maÖ.®¬¼L¯ß.!¾.[t7v¶ý´2¼Ú±Z߆IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/as0.png0000664000175000017500000000042113657750470017437 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>œIDATHÇí•KÀ D¹ÿªWè ¼BOF#†6™Ä⧨ gCL^FP¢­EtŠ˜sëé`—ˆ9ˆÞõtPĸœ“ê ;˜X[¯¸ÉÿºâjÇ—$Š›Ç]qm½çÀ!ÊìuðÍß ¨…0⻇Åèh•‚6bíÌåmžâV'mçœþn¶†Ä6w…ú6!Dç´·¶>u"ý 3·‹3ÓIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ATBC16.png0000664000175000017500000000300213657750470017632 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚían+! „sì§Çé­ú~EÕC²lÃØ|l@ŠVU“Õ, fÆÆæõúœöýýzýþþ]qÀÆ(`Û+~?ùn€&<À¯/@Çl¾oøóóÿuöMï'ÏÞXðý}ó ¼¿0^­Œÿz<þ¼ºÇ1ee¿g v¯‡¼÷ûéÉå|?©÷±Æ¨Ì°{c+ ÐzPYS,oÖì ÏÊî†tÛmƒ=ÅØ2  (ª"°r`«=W.¢f‰«Ç†Ê–.LÏy„5ú»2¶â½¢¨G£V'™+ž<êî]gŽ4ÎíIê[4;ÙÂVd•I[cÑîÊNƒ¶ÄÒ²šËެH²€ÊŽ×¨)3à³Z¤\ÅU“‰ÛðMEË>vR¨í•̪},r…%¬»î'?åk¯Ç¨­! wñzDÕ¢KÖßåäÀcÒåW‹¦´€÷k{Ä= ÌÒ"e²s–ê[ê®|­RülÀÆRuíßIåÚ$‹Û®ðìnÈm³æ# Æ%o»$ÀF1-€8ÑdÙ3,@•]›¾GPÕ“,}_µ³|ìy¥oèõhT›È†LÔ£Õ0e‘§ÙEå³|`¹оÚ*-"§úí;Š¢=ê1éí+Kû¬]õj€çžÓ„IXíñx€øW|ÛÕ*»«äy¬¤\›x¼Ð“r qõ|ÒQ PÐêÁègZåeãc–«»,‹ˆÆä¢âɶט§¸Kä*ÿòtïøàíé¿^è¨ù*³—«=PfÐU¯¨¬¢­zìÈS'UÌYþJÕÔ^®âÔ=X.3o»m—þõ–¼vÑ“u —o™÷ò?¢Àä"ÊbÔQ€Ùü“rƒé1éeñ¤&¬YñÔ–ÉíÁ¶ƒ¢”\³ÛwhªòNä­Ùìå™”W¶Àå™`óKªãËf¦  \fV),#Çn±¿'×p[¡¬E?»­YÄ"–Q²ýhV4SmW§p6Õ6«³q“r ^¼¤<4¦Ò$m³ 1òW›­“ey¢õºÒ9LªC³!²m>hËN.oºUÖæõÖìKÏÚUœ n“Ù­»5Ë´=)€Ÿ Xsr\ÍôíGvE5 ¾žÿöWnÕ>’…ÄfyŸETe”ßó¨Î&ÀÈ"Nx€øW|Ì$y¼™ÁjüR‡% ÛéÖñ„õ8I€mXÙyŒp?ÖõQ¶Wç~Ã:0sãœè³Ð†XeÐØH6fõ$&˜hi\8Ðnßpì¦ Ì¶”ãéÓcµÊª»evN}ßå`7Ùâ·)W‰žò= Ø#¢$a{²ÅÿpéYM²-ᥜ‹ IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/BBpara.png0000664000175000017500000000360413657750470020111 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚí][Ž1 Ëý¿z…Þ WèÅšv³˜ë”õ°E'6P ’f'Œí‘II–o·ÓšÛ÷G»ßÙ÷—µov¿ÿ|´g ×û×çÚzîr½Fï/ï¹öº^ŸK÷$ª(Ð(0ˆÃ ÍöĽa5@øwѧ®  eþ~`¼¢§püÿàõ>:þÿx5{p4ÈÈû¹(݃ÖŽö]­¿G=y³† dY@­ž¤W tãÛíþëÏ?Øõ9 `Ø€£¡É¼®eKÜó?¿ø’W¯¯ë¿¡úüÜ4`–ÝcX«9ím›ixU¥@à(WšiOµ÷#³FKYZLU1kkMÌNnD&ª÷/ŒõóÚ|H,>hÝQÿ2]lñA‹¢#]®îXªÏÛé“_[Ú„"ôÊU뇢)C›¹,@d^Ø9ífÒ#ƒ®Ò"îžcôHñY ’Vsùµûÿ¤Ü.FE²‹‡!ŸVÕÂæ@XÚ WXäà,jâj£ï†"ësF·ˆ—žè’Ä®Ùnbk¹€­¥ ­$˜{écáã/·>$B˜^±,„6Í“ÊUïT(zóRýéün 7,ø•AGã!l¦WDñYª€ $ĬLÅEÍØrÚf é²§û´·×*íše| Û'=$IZf`³Ñ5+;Ã?ÔÆ´•5ç^ª3 ••­µˆF!ÍÖ^  ùƒÑŒÄÕ«MÀñ}àÈ«E¬©€†Ú~`…7о0-;-ÍÆE–ÙA šƒmKš›mNóQ~²AÄeCm…[Û4¬ö`ãˈ%-'ˆ¦ÉÚ£ÞØBCˆV¢v†Ý¾=CÆœ âZ%–;‰–?l~ŒwíMOä›FŒÚ›S•øãޱ©Sm›FT­¹š´@Ù!–HäÍŒ¼¡Þf©Û†,lC·¶!¬§½ª“ÓÅržyßLÔ»µ|²þÁåÀ¼V9€m =QF=ÝËo͵¨&A©¢á8‰l¤©*V‡öÓ¥cu^Ê¿<ÚÉ2èªxqÚ~ÊFÜYŠ/Ãïd³>XÀòLúˆ£—o2 Ž¥ˆŠ&Ùʤ)Ë'zo”*/¶Ù@~»†ü†ù-CÛlº’ß¶&»ñý¡ÌÖÉ*—.*3$Ènß­zÚi³ÖîÑË€h+¡QU„dZœyv«ÂY9aÂYpZ)¡h1& XY1&ÙrVlA0Ëë?­ ˜>ˆRür¶RMPQ;m˜³…®§—õË®8Ó=²¥%£=¹¼8gUx¢LµÍz¶kœ6{ŽÉÌ–-9.[´]®ì½üÁòG/lwx…üñQ»8ý•¬áž~M7À²S†–ƒT­AÚs[eâbŸ:™Ì$ÙãàN;M%>‚êÉ´=­ˆFeº}ózZG 0Ѝ2•gר6A*/ìSa©?«IÒê¹€Ù¸Çt€¬WÊÚÞ‹š¬º+'ª¬œdÅÓt&mU2[¶Ëõ ;EܺØ+fª¶’—Ÿ®Q]– ¬ç,s2MÍy©½Y^5Àb)ÙHRY&úbÙm'rZלCI¸mõ½<ѺN{J½Îõçz5“{ŒõI£Í £x ËU‹ú@—Õ]ðxÂênÛA[Œ¦ôõ²¡-MÝÀž2‰’mÙºlÊ›ðèfмÏ%攲b‚´÷>\v€\¡Ü=hôv¹i‹jé§­eoü²çݽ>ÓnWwV µåÕôóúûÚ´J4}ey€›u²’ ­úüóNįU®ê2«M–µW<¥3[¦Ê+žÜQR$‚¬ó‰½Ùq¨>ƒ›¨¢/òjK4Ñ'» ¹…†Æªýk•ÃJò¨“œWi5-NŒžî²5»j¯»li^Ö'Lö”6Íq´Çö ­(Ök¹:Õrf…Õ*òµÓÛìBËé¨ìnYK–¦K eX@LÚ-C½ÙV¨¬Ê…ìœÕ$eêNà6C,û¬23Q³¯¡~™¥N–,ÈЭm ëvR`›Ï6ù…²€§ÕB—õnmã\åau'S°üÐÊÅ/÷Qw{ùËâ$Þã>Ø8Iú`=o¤ÉKùåÒô–ÙsIÚÊÅ‹½›¯ÚRC—ç,l—õ!—7e=G[¼½¨ZFÙå€V<,ßÉ€¶%Ùn“¦\íÂE{¢ÂÎ%ÙTy‹QËl6¨–•åÛ5¢SAfÃKT‹,ß2´lÓU×¶5wÊnüc-~ûÖI¶GÛ7Ÿ²KU{Jüioßde=mÞ+°­¤Æ6EIä˺X…q²åMËëö#àËdh´gYEgšUÞÊ[w ZùaÞÉj•X³Bjá ßòEêXgy[™?Ô“2…Ù8 tZ©IÖ“ÐV¬Ó+Ü‘¹9Œ¹»ý"0SaãJIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/AS.png0000664000175000017500000000604013657750470017262 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> «IDATxÚíQr¤7„}ÿ§\!7Ø+ädN­·œìþ†šÿ^\[•ØŒFBý ÞÞÖ†Øßöþnýû¸cÿ|Øûûûÿßǽ:xý9n$?G°Ý±Ï?¤r0ú÷àIÎúŠÃ#>ÞÁ··Ÿÿ±î+Žþ½ÿþ‡¿>Ìþ«#øÿï/:øù‡®?¯qïúó:¢×Ÿmzޡަ¼þ‚«£U­ß›^ÅÙ‘ôG®iï¾:ì-o±µÛ¿æí/~ŽÜç<^[[»7›ŒsÌb“qÊØ„%ýÛŒþb<±$ãÄôÙq&AUHõ«-;hMvÞê=Ä$thê–úe&A¥þ1XB¥>Ê"tXbomrXвÈqXZ[[û.ŒÒî0*ýå‰ì/´všã^UO#›ü®4òÒ¿q‘ä$¿‹+jË1KÐÒSbWYdÉ&Oa·A[ò7bçcÉ:è­Þ¯s»(ýÇ$pБ”Ó\VêGG¬Ý±ßgÌ#±àHK/+ÃÖÖ^Þ²§þí«6«N¬Ãô1l"°¹-Éb¢ƒ*êìŸvhŠž„¶'rPÉ2I;ÝYŠºš~8æXšÂ³’?ÐÛ¥~|õ’•µçP–È~Jý(‹È`é MsÈa©_—EÖÖöd É1A˜©XKDÐ¥?[É%¿• ó4Û$ÿÌüsó·”µuFÆ$YÉOû*³áUÔ²¸‡Þ4ª‚z–¼ÉÏÊ0•§€'õ½9h…1úÜü”úÞª–úÚ}9Ì$vÂf,-$­©­¼|£E0îlåÏ[•þ4fïµ)‘=5±Ò{l)š~´$¿ç(ªi(`I~ïÊÒQÉß6RYðöæT{œÌJ}Y·n+>ru4Ï"ϧmN¢ ¿*í&XŠî8ã˜d,$-‹¬-›8J{Тx:üòññ/2*ù³ðDÛ!¢lbASž¬Oì©OòÓÒè#ëÚÝ1hB™¡²ƒQÉï½/¦+hët_x‘‘Ã$c*5^GJð~ޏÃÀ=&96Â6‹ «ˆ×–Q/š¯0öáØÙ˘°’•üÇqvÏmƒ'Oú[*Æ’öô4ETò{Lb}À6¡eÚ¢RAºÈ@GÐSÒò€.’ãR_VQå; z,×Iq9Ì$Ë kk ôGÙD^Æ¥%^^úËEƒ¦!¼§åÇ+ª¨ÇH~o¤C“lÇÏÁÛ¬âÛJý±‡çc÷âÛ¨™µµyÒ¨¡' ò2þlævÒÿ¸ƒÇªA±kV–íeNùåIÐ9x,ÓäIýè=BoÇÄ=úâ¹­ÔKscï,<Ž”n}¬­-£ãã˜l'z‡U~ÐÛ¿¨txBUtŸø½¬ý¸›èQE}l$ǽ‚ÈJýè{’¶ÓýèKÙ‹œì›¦è”I}ô1V[€fC]â”úCŸ„{ߎA6a³6…QÆ1É× K^íóãµÐQñàuÛ¥M¯öe•Md÷fŽè®ò¦´ÅPíª!ë.TeÙjõÒ²‘ÍJ~4“ž³^U¨,‹ÐdŸæ7ÎIΞ*8q¸“܆E–AÖ–M’[ãñ¶G^-ty㨫ô·ÊºÈÛGo ¡lB›£QÁÚÖÜ»KòËöÚ(<ÉW§wJß^­C-©FQ/ž¡«RP8WÝáÆ¯ž+õÍmkMneí«Xv²RmíUÙ亗˽*lOâË Ê’þ(›´9Xm¬ì•¿§Í¥®vpåGã Éë•ØÅ$îÞn­>´¥ŒI÷ëôd“°³KNêàä“Úcr¥~Ûˆf¡ü i6¾Éšú,ƒ¬­½š}*lEäeÕëGÙ¤=PGÓ퉨ä÷؄栥«máÒ÷ ½CôãÐäž[ü[e’Ä¢‰Iþj¿º„/ù¹6îØêŠ>ˆ9.õ­E4ÆQ9~¢« =qأߵµµ¤ô·å˜yÙ–úMaèú³RŸOèý“xŸ4 M(Ž&àé¹¢Fïry{x›ƒÙ×UÝYVÔYÕ’†&•þksù¶ÒÙ¯J&P£ŸHî ëÔkLÍtZýƒlý­µµe“féo±=že¥¿/ù“j†-ý­ÄNž0É0¡ƒIþìWLw°KÅ”ÔéÀ$«t`á…öPÕR_VÄ}YäÛ±Èê¼µµévU;r6‰>F•lTú£Âµ¡â#Wúá‰#ùá‰#ùÛ™„­fè)±n=ØîàÁLf¬üˆ¬´¬Bú‹ÇÂÒx¹ÎÁ±,"›SkkÓmüä·ïâ?F‹Q]|\ɰðÄUÖ ‰ÞtDÙ1kÎYj&Ë$m«¶Z= MÕG¦(4Y!iú,ûžäxaˆvhª:‡¥¦¬–o{JÎ’øíf¥~;,]™ddmínl2xq<—þ–~Üåz¬¬£J»ž×ÂŒ–?”»ÇDC4_Ò.ù¯{k;4UeS¶Úr{S´jý™Ch'À44e€£«TMÙvôz„–’®eFŽ] ½îÖ±èݪfËb­-L“þžÔ?æš–:ŒI¿™I®UE½9ˆ²Iž²ÍËdÍ-ª7ÑQé/_TÕ‚amñ/ú¦M¼³jk¤¼L“Œâ¢#Ÿ†¦®vthbOr:,YŽvùÐVíqXê‚®µµe“ilÂî1Ûæ¬¤®'ý½¶çí'¨ÙB¯xÛ82<±d˜ðVÜóÓÐS;‚[pØW™½G(/œí9Î;|/ŽT”EÒ=Zlí©H¯GÈ~L@Ûq²#…ÃÒ¸næÃ+Ã6a³¶‹Ã@€híL™ô·v†vˆªJÿƒ‰çZ²jL¹ü&’ž¢Êº­C´ÎB4yÏ-,’ASTò{WéiO‡ÐËcѪô®èݬ,‹”ã"»×á¸ÀmA’×{gŒ¨$·†ÀÒ²ÈÚtF>1ЧB¼¼É˜ƒ}*Öî üqAVúË¡ÉSܸÂN2‰7wMTê{Æ+ƒ¦®þtìDW¥Ç ‚ ÖéÊ*ŒØ~_Ðst@Ï0 ž–EÖÖ¾ £´¯Öq½c½KÇßMš¥~õ°­E5*¯Ž;-ëAS:%Vešà”X6Ne/••ïvKþòÓ¡j|4ÅH ÈÕ=gE×ñ°züÖÙ¼qÔ×@;Ì–EÖÖîºXPÕržª—$dí઩.Ù]þü…æ'D·c’v³÷e¼ÕBSÛäEÄKäÀ·[òRaÏïÅd_â4²cR?ŠmÐdÍ4‘Ó˜£,ÒÖ)ºh¬¯ìX¡‡µµµ HÇ(Þ3ÝñýÆ–Ô:Öþö©ê`x¤£My'©MŠšÅÉí’?ûU¨û¢/thЄ–òª÷Tˆæ «*€—iJÄO“´ÝD¥>Ê"ô¬€÷Ðåúï1o—ìEókZÈ`iíîö/LÒS?Y QIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/BB0.png0000664000175000017500000000045613657750470017327 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>ËIDATHÇí”Ë Ã0 Cµÿ¹+d¯µRÄ„¶4U¥mná!([Ï’?·>héÊ?ëѵv±Ñ kf!±s ¸u­FˆžNª t­ŽØ¶1~ÌÚJ«'” XñudB©¦À˜FªÏË-€“ƒ½“‚yŸUøp 'ŸUóUßD¼Ç.Êy,˜×åìë©ÖN°¯½œìŠV¬H®XñZ±ÛûÉCÁp:W±ÖÍÿq榾/¢^1Ã~zÃyÏèÀ¾^•/ÎÿÇW£·fz){{Ë _FIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SCpara.png0000664000175000017500000000236313657750470020134 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>~IDATxÚí]Ûã0 Lÿ_×Âu®ƒëÈ8‚07KÊ+’£ì `Ù W’¥ñ¡ÛMbøuâ8ÆÎÀ¿'ŽcÜi û}âiظ¿ÓtíŸÏ;]WßOǸ—ýðh‘ÕF¿7Ü…ÞûÖÀèç–8½ýâaƒ¶%½ïYfà¸#áöóË"dàíö¸ÞçÁÇ… L›NÞ_?®Ç;Ïû¸ðçŠçÁûýaظÓ.y‚ Â&Ze¬Ácm.#²Ñ-eÉCº³]T®Q¢?P®Mì G„Qÿrýk k”ò§‹§YÊåcÒv5¢üž¡išä_S};ÒES”ê[-’.–VMGÒ(‚ šDì-M³%nÍ.ú£¥Ó=Q³tÉòÆaèrVãm¢#"uG¤ ò(åoä{_SýFþ÷Jõíào7ÐR|O‹ C—ÉMÏP«AH*Ts9ÓxA(š€i4´û}W×Vûù4¦v÷½B¢)MÕYªo F’ Í%f)þ¸<-‚B£Ò ª¥ú4ZQüv‡º9šyM?h~,_i¼ù‘v¥‘A Z9ÚDÔìL#žèXL[ÔUê4J QÊOËÕ½ô]Lÿl7ÍÐOÔ´K ‚%¤KÍöÝ&ý0ý&:­bG­+ÌR|:gâ*wlÙÓ¾­¡_ƒ%’AHµItIlH:xeÖ4Þ„Ê“'ЧkÐ%¼l“2D›t…Zr–È–P¤Mü[5)¶KT‹Ð”–$ª7s­bOz‹ÑÖ<¢¯E[wk›Êe´µß®Ž™6zµþ Û¢­‚ãw2‘A!¦Mãgìk’ƒh^ ?¼b›ã?ü‡¤éú#hf4s¦?‰þ ©Ú£¸$ŽAø©?¬fÖïYÅÚÄcÔ–ú#mRf 7±ÑV“¤-…Þ˜‹úK–‹¦Y&í¥m´ùì<-‚†HÙS?KõËžjÛ¥«Tâ²› u*SqôþQ{A„Ñ(ímS×ø}Qi†!‚y^ÅÓ{t\SË¢ø2u7K`­ºkÏ/™Íy/k9$š¼$¬´ð¼h|`ù´„’«fÿÁ´…ïúAèN¸*Ws‚ ¦Ú…Ò·å¶£¥‹þð2Ä­Vi7Ø2l$¢è´I™(¸ÌÓ&¶n×ò®¶›ç³u·ÒrÞ£Ž¦m¤g‡!uvõ$Ú³i—>º%P"I„Ÿ–LïðÞ†úÓ×Ê,¯}äuŠåJcÒQõtº&¡7¾‹·{H>f𡛍·[êA´õñÿÍ£m4JZK\e'éä~ Øò;ºMtÔ2ˆ˜¶¹!¢†·;r¢CÖÖîLÜÆKëÐŽ>Ý‚ Â&qÙIôaÊ´ÞöhCågÕ^y²A”AÓ¤kDµH»û¡=eh›¤+Ú´5šiCZDáô íM_ÎåêÙ_e.2ú’B¨ËiŠ2y–•µÚ¦0mi5¯‹hŠÓ¡i†¦¼2¦@âì˜> ÿáJ-ý#ÀºãIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ATBC32.png0000664000175000017500000000561013657750470017637 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚí[Ž; DgÙYN–“]å~Ám€à«Š*¹IÀ0™qh©%Õ)êçç=öû÷ÏÏß¿ÿÞå{¾d•wp¬‹?ßü´ƒ¦òþú¥á éGµ?øçÏÿß«_ØôãóͳŒrðóûf|~áùnýÁóߟz_øùïÏw×Áç3e9òt(û{–£á‡Ýk!ïåý}ypy~¾©÷²žQØÄî=[Q­/ 3´ƒt³F_xTN›œCk¯79FñV–ãÊzŒMT”u^Ñ.<?¸Ú‚mùä5Tu©c’¬äg9èþ]Tòw™ÄúÝ1eI²Ðä>»(©ÿyÁ¡ -õ³ŽK},Eæã°Ôe’qXò\[SeY](/ýiŒ‚’þpÇP˜øé_h-çm¢GÿŽ. ¬.z:ê©•î s:Q©o½w¡)Ì&^øÁúBÕÁžEº’ßz-ÇÃÐÔ•úVK(©ÅS¸ƒÏ÷(‹Ð&p‹c’µµ)ƒ‡T£É096A}S¸ƒè=ø Â’þ°g/ª¨­/F_s³’ÿùóSЙēôÑ߃Y4Ü`ýL‡&OQ[:¶kßu°Ê"´…Å"ÖÆÌè¼è±H4>’uͲ<:Pe±SvšZ[xc² Žžä”õulÒv°*ù§>=clâIyKÅÐCI~Úšìíî[a:,Y]¬ãr*ê˜Å$thÊ2‰ÅÓôµ>*õ³¹ZÖÎ\êGi°Ý,¢å ²¦'úÖïÚ4È¡€<×`¹–’Í´d9Ö,©NgT‹µG¿§ ££Ûë‰òÏfyL[ꢒ?Ê$ô€N4üàµ,mzÉîî3I•Eèz6ü s»Ë"´ R/…´šDÖŽ4eçÉ(‹Œ#€,,­}-›ÿ˜Ä¿f“\Þ–E^Ç$2³eJŽËmG—½÷à‰¦¬Ç/¿z¡{ym¥‘¿þCþ•gGÃcWР$¿ÜͧÓè_’ÞsÓ[…ÐËý]#ñ×Ñ5u69ê²W³Ê^n+=°ìËòWTË^ò-MºüEóQe’1‰ÆGè”’¦9Ê’ú4º“ƒ%´Ô§;ˆVδѽMÍ®ËÄŒ2ʸc]6;è½,&ÉÆMh’ßc¸ƒh6± Mw^ìÍ‹0UÙ$Àñ¤<ê‚÷¬·%ÿ4y) Ñé‡6ﱤ> šäX­ûƶÛPR_®%åY„Þ‚ò´¶Lr[Qº(›Œ9•þtxª*jô9¸ä:˜'ž¢®ærÁàÉú€ìIlOY—CbÞfx4 ‘í:—E¼iÂû`44¹f?å Ks*Rßt¥奾ìf¹¬ƒtAI{ë%Ë"Ë$k§à&?t_UÖ4xBI8<¡¤?ž¢’ß[9¼Óiy-ðše4e%—IÒuý«Š%ù]ªªŽ1&QQÒ¦*JZ–hW¾6ðu,"_eymM ÆÌK¡?Î$]éOŸ>ºÒ¿ OYE=OUÉ}µá)·ðÜÁvÁëeµ5òüV•þãlâ WMàŽf‹W¥?ÍA«³Ò? OÙsY6iCSv-Œž]Št`,UÔÑwwÉìª'³•méóbt:+êŽb¸ƒ¯%¸¢FŸr€w)ZâÓaIž‡×ÖTìøe·Ù´:›T•u”MÚ-•e“j}®òÄié¸çÏ]6¡¯‰(6¡-5Ö#àuí¸ƒÝ’¼´ÝÑéæXÙ?ïˆÐ1hª†´è¢Y>£ã"mÙ™E°ZÀhi€Ž2Ùs&[¿k5XÆÊWu¥ÿØUÕUéOìdÕH–MÊVç'ow¿Í$hE…¦±`c´éŒf™ä).Æ«ë¡î1;èUðêqÑjËÝ["{_ [I˲æT>o.‹,$}e¥ÿ8$u÷ÂjKú£ïq§¶*›\SE`ü:õ.›È0ɘƒÑ;qŽAS4,½6E+še³âàÒÜ»PÅkñöÊã]Òs ºhRabIýëŠzÊ)k9X’m©e‘ëF£µ™-“†²ÒßSÚã–M:;fÕÀθgÃeGu6‡‹î¨w®ä84e™„î`¶¼k£RßcOâ§'v¯K²Hƒ&ÖphB;6v†©; Éœ^XÊ:$IË"ÕéãØ³e­¡Þš:Î(¨ùNî@ÌX`Í&Ç»Ü èŸ°»lB_Êž] w0ú¬DAî §¤³; 0hò6Ï£eš­.n”ÔÏ&•ÉM;²÷5KŸ¼xecK›¥é©òQÇÖPpœQªƒCv‹Cvþ‹ªGe×`YcU®…­0Õ½è.“Ðõ“È;(ßÅ× ’¯Ÿfä'jù¥NV,—[× VY¸ÆQ9ì¼ܯÛú¸fóH~û ¾)¿,¿‰n-i2aˆ¬ä?Æ$ÝgŽ C3‰œƒòáXÙ€¶|JÀxRÅõi)Ë lê“5Ùô¼,£È;*O°:3rð$›è}]ª¼Üaƒê?®ÑUв'rd ¡XD®¤Æ±êyrÿÆN^{øTæøîõòiÙäÔ£pMËÊWÍ“¯;([¹Î&²q²Ò?:Zá§c«•cE™ªòêxY+k4Êóº^¦öÛ5Åéèåý®)([bÒk)™"ÑÁ Ÿ‹°6­¤×QYˆ’-9þÚªòð­Ù‹XÐ3–®ç1ɳ+Õ„“½þÃk!™ T¢×b–¡éšK|d¯AòÖJô%·Çoá¥_ÅÕ•úc—™eUˆÌ™ÍµµSl"{±¨üÕ¬ò—Û²”0me‘½`9êèñ+ª­ÿPî’ï±kÒå/šG9è)j/}6qzéx–£å-c‹žÏH5Û­Í$U©ï±œI²Rÿx¶[6‰L¶®ÂÚÚi>–q ¥¬åÙNy蛸åxÍ&cá9xòTMô‹™Ç–ümhê Èl–[ùÜq¶%½s$ÖtT…Y]b2‹¤eZUIgY¤ MYyŽÞã—ötY„.ùnжÇ9ÖØÒ_–M¼c¾rðÔu’ƒ'´ƒòðd¶`·iÇà©ê¨¥¨³]æ®ÙhÉ…¦°¨Èê5O![œjÍÝ<÷Z.[= ýìVóc²R¿]M*ë`VêÃÓòØŽI}ù£A×UÝ#æözò''á‚éIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SCBC16.png0000664000175000017500000000177013657750470017645 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ƒIDATxÚíQr«0 EYv—Ó%tÝUûñ†yÅ&€uLΙa˜|U€¡÷Ú–´,RÎçç²üü,Ë÷÷¿óúØz`]L`+·­¿±cÿ²à«c/žËÆb ¬õ™h¼Së±?7Ã}¼ƒ­‹?;__Ëò7ÿ¿q`?Ð("K€ gâÿhœ‰Êt"VYãþÃ`%&ÀLò—¹lðÇc ¸lìmõ"EF©0KÙ#ϼHùçE‰/"r1ó„Ó‹‘Uå`= ~%j¸™ºU3 ó”-;`%?n!“üåë#-©¹ƒQâcÌRë¶Þjaº½aÒ«à.ïteÝ ´5é~ØÌ$fг 9éß U¨¢¾?—òl6?»sÃ$ïÀlËÛ{!"""òfà]ŽÊ‚&ù{ukkÕniŸ3e³ ¼Îœt Nô‹ˆˆÓàÀìöhÍUã2´3É_¼ýn‚u’lìe‰/ƒWš^_«‹6lHì]í<Øvž7DDDDäq€ñ&Qúc²"¢²†æßK}LVDV” “WÒ*†ËÐÎ~O£˜[/ ®.Þ$á±…rDDVÖz‘ó"˜Ý ÓÖaÅU´Í< ¦&0Vâ÷ÖYÀz‘iÍæÑc«ÍOc’°uf¦yYDD ðà[0L×ÄפכXÚ«Æ"vìawbNÓÔ kŽDDõ®Þp¿eª<ÀçÒ¿Ð<µºm`fX㦲òjR½cš2%®ø&ìä8öQÚ l/z‘ÉWIDATxÚí][Ž1 ëý¿z…Þ WèÉR4Å ˆ6ɲô‚ŠÛMÂõÌȤ-É?~ øóÄãq½Â;†(Ü%þõÄãq½’àÏ'ü_%¸ú=ßàõ{¿Ÿx½®¾?p‘ÿ½É‘ëÿ%Aïû®ï ¼þBíJB’°v ¼F.‰ v)­@­]úm‚òƒ´‘´j#÷•èæC¢½FàëLò~k„6ßÈ^„þÅëõúùöHUô1BA$?ÝÇy•²ð³úÁí&ªKÀ–“sµ”]ð WMÀ¶³FRêÅw÷Y°Ê/Þõ$aqa UI¨ &(%1©¨uÏQæêîŸÎU/"ÿ€WwÉ5©/ ê’?‰˜õ´J©/Ÿþv‚ÖÔæum°–€^… ˆâpQnvãX¡WÙ›šä™HpMò[Äg’ÏŠ:ºúŸ®û¬%`‹PÁˆ­ÙHïk[8ÑÏ5âmªÅ»hÞè‡ïã—\$פþ¸>Ô$¾æEÚ…«f7í ›f/b…¥1bþ{ ŒÍA¸—Æñ®âÙžÂ.‹c^á:/³÷?ÒÜ¥¨£ŸSFPõ¦¯Xé, é)>%ÝîM,%=îI¤‚¶¤þX\|]ª÷K=n–¬8¨mÔÀµ^Çæl{‰|Φ÷ "lŠ>ÿKËò­ Ì #KL ã­\ý1b2³Ü›~²ªØË”´U®á5Ma¢°¹Ä°É1a>P;£ÀŠ‚ ¾«q‡_ú€Y<²–ß¼¹ÿå%“Ѻâ2À/Ã.¢ÃoCìnäD­@Xò[.Þ]€ô­°]O¢ʤ¥Šf+è4ÛYE0m.‡M ðEƃ<MA|7¯“" ›d»š¦œ^lêUØ0‰Þ°©òðÅÇ•kŒ¼T2Zt•-LÛ‰îÞ:…¹q«­Í lñ)A4SCf ¦ l;—Õ†8¶G)"8ÞRÈjÊdIÿUo²½x×ÖJªVnþAo•Ã@kµÏD­ßn'½‰Ë·Àv‰Â÷H?®Oy“ÎèˆÓ$Ä©c¼úxÓvø¶÷ðÀ½pÌá°ÇÀ Â3rº:ÏiÊ–øðÞƒ‡™Ñ´Ê5nŠ4ÒHñþŒ©ë¤yËþBUŸI>¿?˜¶ý°êMÒW\½dx³â§kD%¿·|#|.É.Aù9cgDh­Ö¬?¨-#su_dŒXÃÖWikRUÐå©ÇyÖÄ©V¸lí>¿z°|힘•ø3æêô9ï&jüæ·¼‰Ü"k¿3­úáÕ3ÓGZó»'¦\Ô4µœöÅÖfbº_Žî(•¹º¬º4ÓT׉"iIJ¥}ÙC±K–€ èU’”6lï󂌢!mI×z…ér QMQ_·ÄX.«úUš§1b–yjsw^ïaíÝ…GÄJT´«¦)L0{30ÝÕe+é2?œõAeI¶Ù~Ά‘W4Iqš)ж"Ìð½Ñቮöá‚ñ(iD£ÉVVœ,1Z&ê-ý±²á¬’¢°y‚'‰yHªÃ gxbÇŠ‚ ¾‹q‡[úh_<‚]~ƒ_Àô6úZ•[iæÉ»ˆnÉ(øÓ6ʶ!¢„á6r,¢0[a–ÙL´ìgÛùLVß'†K °¶AÓ=—± ØQø$[ø4eKNí$G´ýhØb˵Á”k¬z’ñUþö’¡cŠ®`ËÖ´ëõ"m…QÀÒÉ{¢ôqª€ïÐ}L¿A¸°ß”s÷ãö‘ô.í¶Ÿ>¹Ú”)ý•,ó”Ö¬¸ª1XúÚuvk5Ë4¥ ÓœN¦šhïw/ña$Ðb’Òž(Å_£¸àÕEãhIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/GA16.png0000664000175000017500000000365213657750470017423 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>GIDATxÚíYrã0 Dsÿï¹BŽ+äZ™rT®Àn6Ø AB^ø‘š’Á¤(àÛ||¼Gg|þޝ¯Ë¿ŸÇ•…"ÿýŽïßñós¹rü<®Ÿ.œë!æÓ {%|ÓãýßùúßdŸ†¥(‚¯‹yY`+ò¸â/õíï+¸â‘Ýû·oÁ®|™¡ÿÕõëÁöÏæßÞ“Fñx‹ë{ü7Ž+L>g©/ÿ¶·³bì§×Wèr×À~JgŒßoj¯à®¶+wÀõk<œ Š´K‡â[«ÒÞ1/agÀæŠ_ÿ* Jí¯Ú¥c‚Q¼Õbƒ:7²{÷­¢>k`ogÍ¢ýŠ mÔ{<ÃPŒ#£°å‚­r°6… X :ÄL‚ŸJv®Vü0ø©â«Ïæjƒ€†21þꀳ öº@’f   .’n[h¬¥ŠRfËŒ`lÅ®Dö„‹>:{àìÙhR¦güiØ·–ñ¥¶1ÁŒ³Øi®-Þ¸Çlí H!/°½ý6(GSŽAà›LžAäfÁopÄ72år‹vû_ äþõ ØfìûCü$âd–„ùC|þ²³/µ¢o™ËÍŠ—” 3jÌÖ¢C ‰zí"Ñ”a@ïs©Lñ¥‚þóKs‘£­E³´Åˆm¥ÛØí¸€ìbgŒ[/¶>u gÝ"@û·#ðN[µ‡À¼0æé›ŽíÿEë‚ñ æ;Œ·2×óRØf2Aõaƒïå¼`ó)aʱ2"ò†‚Aø~K Evb(®ËÍg"®–{5)ñ,¤Åb+H^a'#;n³XsCáRK[’Ý‚¹ZZð·'nm—¼«}ÁÌÕàë@W‹O[ ÃR‡Äãç®$-ûܼdÆÆ+þùjÐt2ÐA½Æ(3 ¶ºZåÁøiÌÓk°Wu°õž%s-/¿„ÂìMý—gÉ"’±D$³µþq4™,Q?§e<(>´K¾çk*E‰¼0ôg®‹€ûAAöDÊ,ŒKÍ(3}©‹6WÙëT¦@ŠUæ)ŒDÔ,.·Ä[AàtHT f+Þ.ú²#L֡펩x0çYÅIóbWD‰óåbüÌžwÓ‰l›\ŠÅNÔb·q£ü¡²`HAøGx½JòÑ)ao‰ ¹ p½5T?Ÿœ0Hœ¾["9£,…áÀ|ÊM{Ç’ŒÒ˜kkZUq"™’:‡'«©Ô9´B›’‹Ó# BqººOHeâ·%ýÞjÐ)ã×#¬2[AƦ’”²"œh•uZÙ‘Ï!É…VÅ¥eÅtsY^>¸³`²©z·—ˆú.‡HP`ÊORPì VÜiio6—z«‚·ë¿ŸVÎÿ¯ u[‘lm½RÖlÆo¯ãÓH¸½NYC¡²JeM£NÑ&« 1XA+´²æoŠà™vwÔÒ—5øÓI#¹¥¡®J š8"amj[ùÏìábL‚–&†I…M‰ÇŒLŃàâÎ6øÁKü$¿ãÛ@G¿éPWp?"ª¤1ÖtÞ…>dyÁ¤¨ƒB ¾GŒöXˆ:ôL†·ƒ‘Gž»¦΂a{Ý«ÕãKY°;x£°ûTÇh>ÞÔ"[¥xCô”ÃT|΂–= a²1ÂzÇç•°¶f,*‘‰”v~V«(­¹°Wï¤4˜ ''XåàGËü0`€8@òBíšœ¦ßøÍØæb¹ç ùÒª9ýóžGI.ähæ×Ôq¡Že{ù!ü{ø[J†×`'6öüü ¯VÜ<øN£xv£¹Œ0Bˆ; _ÖûYµ‡IÓ2”hØÿ>¯½^)ók“È⚉¥_¥}BÄêÅ´=Éh„Õõ%d!+ƒ—ü¯ %w~aúÖyZâLž·ïó ”–E™Ën1†|-ÖjTpÿ"!úø¬h̪$ʱx:;‹ÐÙû®ÖŠ–¥Gb·cüí÷Äes2Ø#ZìÉΕµŠU‡ì[£BÝÚܹ z/.ïlSOÖ[û¬4¹ufŠ:LÞJ †NÑ E/VJÏÒ,œ+›wËt.¬uGX}¢yÐ&±=ß™·â÷ðéHôô´ÀGŸ¹Âý¹¶ ÎZêA¼-Ø\ůÓ(­*³ÀHl5‹Å pR$*¼½ýlЗa’meÇÔ‚ƒy™+¢ÌùRænÊr°±gu)žÈ‰ª»[¡úGq”o C Â?§ x"ÄÛŒÏ.>¹eIA¨¾ 9¡8£ ¥8å¦ ÉÈrËÓªöX˜H¦ø=Sç”’Áh²`l Ò#ýó®žö_*Ô±<ÅoNúío®¥iÎè<ûÿnýªckÆLI濇ӥZ1wáòÒ2Ÿ=¦Šé¢?­|°¬` ÿÌÒJD™õÝVÛfhðp83Vøíx Žm¥ÞÞ†Z^Üî•…åüænŠŽÿ¸sè¥?eÎ@IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SC.png0000664000175000017500000000452113657750470017266 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÜIDATxÚíaŽc) „çþ¿æ {ƒ¾ÂÞ`n”Ñv„zÛI=‚í"]%µ¢žQ'Püë—$ÅôûS·Ûx¥+àŸOÝn㕦`ÿ|ê«`ãuü;MÓþû©¯Wº¦þøÔí6^Ë>xÔÈîFß7Ü„ÞÿÛFÿnCþ÷&_½}ãQ û Úš÷ÕyÆÏ¦o<^QÁPAíßoïD¨€£&ÇÁû*`Úpòøûýçþ?_¯ãÿ]ñ8øñq/Øx¥ò$I’Ä&b± ‡å/c“h ´A“gùW™d;4!Ge’Dhº¶ü“”A²úvX‰2IÁ@c‘tXÚÅ"bI’$rF¡eº"6Iÿ`Ï`"&)ƒ§Uë_f«P  UÿrhòÂmÐd gÔò—C“­±Ñô^|ÄG‡´Î²ÙKQ«˜¤–ì°òEPSÒ,"I’$I‡©œM¢6©œM¢5`Ù¤ €ÿ·HóL2 š¾ųK(Ñfù=&iƒ¦hø¡m²üÑÎvhBßöR[Pô §Õ° ;DY¤ š¼ñpèV¹¸‘$I’öÌ–Mg˜ëÕ~ôEð®dgíÕ„5¶iÏò{L’ÐA–Ñ[[¼ÄÖ C†À®;‹gõÛ†kõQ|¤m´Lb æp)kú(‹´ÁR´×kî•$IjÓ"_u3´Ëi³·Q@'}/ôP@g{×aˆ6h²–?z¶=Ý¢ð] džhâ#¶©fY„~œl›iÄ"’$Iä,bW¯hؤí™YËO{ À¬½*ÛË`Ÿ=ϨzL²­¼SQ&I+à¬åGÔ—ÖÄ^ÛYa' ‹?ìÐÜÇL}’$Ib’Úß@:Ó˜„¶£â«~0jXÛõñLRNutMLßIŽfèj±ˆ$IÒ1,B>`Ó/¿Ñ˜ú%`úEtú0} ”&f‡º`â1q4@‹E$I’¤=Sà±Ç9ÊfúÞ´[åéÐ× ?ðbƒöÈí¡+úckøY½‡XD’$éMؤ½ ³lRÆ$³‰Òã(«©L}òŠXòò^•¶¤Žô)hPAýÞ^”ÄÇvŽÙG£, Òê°Q˜HJ’$IzK6¡+Hû~kúË´)ªi“|Ó§I?.Ѽw†½áh¹Ýñc‘ò]oÑgÊ®þ—±ÈlïCº)O°$I’$Å9åòÀ GDÙ¤üÐÁ£¸.àvhB‡¼0„ÐIßÃﱉW€4hòŽe4DšîMéÅGPéÖZÚÒazÏŒe‘ÂÎZ§‹¼Ý:¡$IÒO“µþ–Mì» CL²º1üå©Êc’(›¤'š†#0~n‚'¯©PA=G½±¿[~Ôä³Nz;4ÍZý²¾ý¦t«é¶˜Ý*‹ÐÝËEKikI’$©†MÒ ‚¬¿Ç&éð„ϯÆK6×Ü*“@Óµå2I:4ùdŽI¶Õàªåßõ¾Û$‹ˆE$I’¤K›DÃ&Ø_³IzÍ2‰e“Dxº¶ü«L’þÌÍ2I4E7ôxL’MY–¿ð”ØZ|$šÄ"bI’$©wŠCvʲIùŒáYË$…ðôÝúÏÆKÒ/C¿{ñ’ô ÃV÷ð{ÐTnˋ؛ɎY†“$Iúi¢£÷jµñD[6y¼;8©ÆáôòÑ‚¦ÕèìÆ[P MmÛöf:í«ü^ §Ì?F7••AÓø”Ñ%:¤Aº-oö^.:)OnKË"’$IÒ󹙈M®­›ØBLbÙ$If}¡—4tæ˜Ä²I'£€Ž ä”× º¹1Ja®œ¹<$éЄÂÑë Òií°œÏãžÔY¬ÕŸ­ E$I’¤çÖ¿m7‡?eͱIºÐúJnѾÙÌÿ"Ï:íÐÔÐYe’rhЦCG¿·…PÒ¯1@V?ºjŸÎ$(÷álwÂE¦ç;MÁèNèH’$‰MHØÄÎí{ôgç\MÚ jã%6 ÓVsžå/ƒ'ÔTѶ[~ÈI;:äååDçHÒ¯Þµ½ïÕðCÙøç'“­‰E$I’Õã€\|síêM;ç¶'˜ßÅ&möÀ¤3 :‰ãYþ´"'=Ë$i×D è5qÙ³·Ú+m GÃÎêÀ}ÌÔ'I’$i€^cš—í<ßÅ$e§ ¼¦ò k›£~&)§ºö&>®“¼Í0C7P‹E$I’Ä&5S]Ë0é–€éÑéÃ^Ó1I´ÆÛBa«LBL<&.Ò>@·%@’$IB8½ŠMÍFïc¶ÊÓ6@5Aw\5=rÐm^fY„–Iè]¡a¥íØÚÿH¯u‘$I’Þ„MÒ¯s¡¿‡þJ¡YË_~)“ç i®µzÕò·ßyD{µÿÊ/§;æz?Ú Å"’$IÒ^ëOwíý«‰ì™fùgS/ x*sÐ4É+<'}-w=^RÇö*Q&)‡&Ä¿mI|¼°Q$ÒDRÞø&‘$I"µþt¤OLŸ`™>EµgùÛ“|Ï2I;4µ'šö>Ä$v-;íèz†ˆ8×Vß²ˆ…¥ò8 =‹ÐD’$Iãßa“t¡pD”MÊà …#èž]ï\ jòEuIÒ É{f<&A»ß¶ŸmB¿£Me(“ø,>·ü(>Rv}gõ‹”pP/DMO—+V’$IlB–0ϳþ4³ÖŸŽM¤kêÕ£âeðä±I:°ÿIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/CA.png0000664000175000017500000000560613657750470017251 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚí}nä6 Åsÿ¿{…¡Wèµ¶Ø,Œ4´9¤(~>h öï§ýúu}Â8ö÷§}9v}^?wð¯O»;xýÆÁ«Å®O?>~;qwðúyyˬ>‹«Ï^¸¥ÿù´•/þ¿Õüß[¿Îí‚kŠßئƒÖ…½Þÿÿ¦ƒò-ÕŸç.–¿w˃^@þ¡ëWKXãàõ{òí¾ÿýÍ·Y:zïÒïÿÊÓºèÞåþÝçâï-®ý¶)îÏ¥¾>a¦¼¯gíc×'ÐTG£Ñ¶Ø†QÈ&Dz‰ÿÍl²ªŒ¥c ÏÞêǘd㨑üéФIþqh²$¿—IÊ É’úÚ¸'Ç¿rhÒÆ9/‹”3‰î¸EÚÓDÅ"í°D¡Ñ~*£À9¦1 ,›” ØÕWÎÙåðä×wÏLRO1 ßÐY“ü»7¶-Xë$’î³ÂQÃϦWòïvi¸Å5¡)[ÊË":,%=«ZØAcM¶aÉ;CH‰o±H;4]_::¸¹?ÜÏ ¢9BV¡Ñh§³ITú·Ež¢2ªžb«ý lSmд*ùµl“üÞÕûûÚu1,é‹çß[¬š,©/ßÒh‹¥=›w×Vù_S_4ù\‹$¦å½vT†¬qOc“r©o±ˆõÙ¸òÐôÐh´Ÿf°ÃGtîl€§=µRO{«ýrnNƒ'¿`b“ø"yqœ7_ÆCË*¯ägMkÊzp@~?Xñ‘ò_J}Ùr²ke—Á’%õ½,r Zl¯ –vo„*‡F£¥?à[ :àî:¦åtm³‰œVuŸåXØA+—?ª'Ó#Oë[|‘¦tx²ºVc’ò,8Kò3‰–a4Î$Úª¾th| ÖVõµMùã¶ü,Ò4Ej+:‹€L‘zÀdî&‹Ðhç™–W #ý¹´'ù£Éf£¤9¼ÎßoLƒ¦mxZ)^³É64iñ‘Õ8I94Y’ßÏ$ʼnXéÍD :0š³kùžÙtxò¦Fif1Iš4èCø )ì µx¾ê ÕÅaÉo;8ürh-;TÉËY傸½]=Î"–x ¸¢ÑhI6ðZ ¸Â†ÉYhÛ½+ùaø×ÒƒYÐT¨¨ß„IÚ©n¼‹-©—d ;Ì7PÃOu°bF£½‹À/}À/Á-¿iÒL4À/Ã/¢Ã‡!à9–ä…Y &˜¨àS\\DsX6Eh4ÚðZ HŠ(L’-lš²¥ ÇæbøTyøÍ—Áo×ð®îmxÝ2dµèªnLßtuì¶µÃàLB¡ÑÞ Žc”±:4Ö”Ø^ŒD+çrG4—s±ÓÇÏ„€/)[”é2ø²VÞ5é±Â`°¥ÕŽ+NWÞO—ú9 \uùÅ%²F6b”± Ãm·ÊÞûÙ¤©´ÐêÁÞ¶ÅÜÑ Ç^¡‡!š™ä˜T` ±Æ;˜C|öÇ­âc²…?…Wvy¹ƒÇ©öîpÔ>Ánë=Xc“2x:æ€eø#ª5]×~È÷1ǤÃ4oIþU%]؆±hd‘¨£¾HÓ¸Ô×ÆÏ²®®¹´ÁÒîë FCµKúk žclò•àc“6åÌ`¥Ji,RORòkI›¤Á“w1]NaZ éÐtT‹½iaˆè…ˆ`%ôØaˆ"hŠJþä²ï]æ¿p[®ìBåœøC<Ä"Q©/•4\…³6Xz{!$Ñh¨&¥¿Æ(ãǶA®mlbm:°j¥ÏÁúbºIÒµRå­õ?Í‘4xò:¸ª#Nß»¤Nòo:è®Q7&¶º¿ú½ð˲zgcÇ‚øï°)ëm÷F#L9,ã`Ùž¥*ÁÀ F6I˜-6i›‹ïúÐÇ&eðä/ŒóšMÚ™D†#´9¸ž^K~/“”AS•äO‡¦UÞMñ Ån¬Pê?3I94­¶Y„,‚Æ"Ôy4Ù$Iú{Ù¤ÍA=Ÿæ5›”ç,ø‹?³I<ù$¿7^RO«‰=¯™¤ š²%4EãmÐ=Þ#_)ÖƒQ&)Ì–Ûc‘¶E%²ÈÛ²ã!4ÚéìáE‚‹MÆÔ²~/&)‡'oÁ/M;ÏÒ_;6Ý:ä"q¦yÖwRYlbûÞ–7£ÝX4­~Q“üZ §½sšÚVù½Jº¼ „-ù«!+(õW™¤ –´âííeýV¥>\þ4l1¶ài@ò¿~4ÚŠÖ­{¦¾²–[UÒåÐdKþ½QbœEÊh.Kê—ÁRÖ€[öRÃ"4­]ý4!P[ùÊU ®¤>«/›¤Ã“Wúkç”È( ž¢s¬V‚è¬ÅgšÓhpœI é5“h[‡ +Xìî~(‚¦]±°3MêçÅE’˜$m%–²¤~û‰¨ÇªvÎ[û,õÔö¿Î‡)ÏÝÒf/›ÀDæµ-ã‘'ïËòì`aä)Æ$zVÜ0“ @ÓsB£')ƒ&mIë¬Ë6%X¹úÑóÜÓò5©¿ÚZ×n·à®cþÕ1°e;8U K4 ßž×ùÆEËÉ·Ød¼u÷¼ÍÖq-#ilŠ“„Mƒðôú`ú¶t=/“”A“%ùWã$V¼$,ù£GÖ–¡4©_D[’öÌY‡Öî7p{ø˜)К³i4mq†¸oŽŸX 켞sa—ÛN‚Îax’²-=â¤ë@oÂMËZJÚÏ$Ïœí.^wpM~m¿,¶Ô2V¾`UYÃܰ3̸C:ƒ´0J£ÑÞӼà lŠèx`g•M`[ÖQM¦çÍdéÁAEý&LÒNuc]\õ’¤AÓÛ3Ç ÔÀ9 ‡ˆönlpãá1Ëo_–4³À/W-¢§A|Â+ùÇ™$Ë`„&ʲã°Ð>&%6©‚F£ý\FµC;i2 .Ñû˜TyØÍÖ³³»]£!]lÃËî lбܦ+«ËÛÏÆßøwàÖI°Í§4loM•aʹÀÄ/)ä•ücE™¬g(ZÖjl­¨0Ø‹ÀBlq:««Ó#Lщò™k„%°“Þ)ë!$ÑhïÊ&e€/Ú_ö>ëà€rGa^°$?ÌáÖŽÿXªé[È«˜$šŽ9ÄÇ:îHûyù1HÖ¸åe‘òƒ¤ìÕ)˜£¸^?sT-4 Dú·9w¸-üñÀð,g±I›£šªñþ~ûyž°Ç¤[LâÅÎeGwWä[ž óžx*/dp ø×]%¥¾É[ÛY”ú^),Y©OòYß»äm ¢†Žd“)é_>@ïæt•Oy»lÒ¶§…#VURùž§µ •U½.ù‹¡) ä–âN+gˆŸ©M ðl¼ÍÏÏ–ÖBrøÑ8!°çm‹hœô™G«³ ÿÛJ&k›q´.²Xd|¾æøx% æ”þpŒbåúÃIX6=Þc7©íFvã%aݹ~‡Q 2Éêy™$šÖ¾…¦4W#HÚÛžÎ$÷ øXD ä”oºÒ“´å zkÀi‘¦1‘],70"B2H;,ÑNµÿ_¥)ƒÔWoæIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ATbc0.png0000664000175000017500000000041413657750470017647 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>—IDATHÇí”Q À C{lãq¼•ƒA „¨t®°J?¬ò¢­fßQ­f½_9FÐô€ÛžØ¿ H9Ò–’r¬Þ ØÚ=¯¦î|öà(@¯§/à˜Ù\G@e×1K@ì)‚@³u t¸ÙÕ ©Pû—‡KºS¬GÃ>vÕ[£€Ìh˜¢›¾á©Ü­t@¿NN¶XäLdIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SC32.png0000664000175000017500000000413013657750470017427 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk>õIDATxÚí]rã8 „sÿ§½Bn°WØÌfÊ«J–ºÑ²§ûa&•J‰&ÍŸOMüø°®­‚F þ4TäçÿŠo¿jäÿ‚Füß ð£·Úœ)xý„MZý>¼þËuþýû«+ÅGl…Åï8Ö{û˯îv{ÂÁå"sññïOuº\ðVûq|ûM.0xî¾³5âWSÞþßûKÂ8Þ¾Óí_ÁÄiY–ÉËä¥%¯>ú€Ék]"ìUèÓg®S°—‰bÍ\ØÛGŸŠ¹À°—¡çWRÅ\À‰eE[0Ì;F[æ/˲àË(‘¼F ÎäE÷~2s‘¯@àE0× ;@Ø«ì&"ì}&UèC½XË­ñ+‡«&@ë;\‡0o =™¹¨˜‡Ðþ ê=ØZ–e½‚(äµ^à(äµ®A$/`Á÷ëÐ#æÚЇmüTË\6ˆèS1öÖFq{+£ÏÚZ;{¹ø­›ÅÞ‹Ï}ÐÑbZÓöª‘­µÑwF›j–e]Q¹)’d.Û÷~òÇÚÛqHUˆ ›­BŸŠ¹`6[FŸÌ”D·+Ö,ÛMp3q¿‹UÐCHz²ÃEÇ‘¹b‘Uð¸ñ×´EļuÏ÷ünYÖÃéðºýìê$xí—d› ë³~P¶Ù"_ؽf.°Í–9+3 ƒ~MtæêMtô‰FÓÐhÎÛz‘¶rSS>Öš¶è“Ìž©<‚y–e™¼ž|Aœ›òœ¼žÁñ\ØË6`h8™¹þÞý·»o7a/¢Ï:z¶g£iÔ`‹FÓðC[²ñMœÑL[–e\"GÉ‹x¢©ƒ>‚Ó¥¼K¿Ý *æ:ØBU\Óš¹wÐ'Ó' ©«‚é´•ñvˆ¶.7´“‰xú´,Ëäux–„,ÄÀõgí¦ èr9æ¢PæhSË:×%†“l1mY–õª/m²×Ô¡¥BfEÈÌ™Ý$3ØrñC–bB£&ªØÛÊS‡i˲¬×#/YpÂP8†,Er# 2’…UÉÉ"O BçÁ‚²ðȽoZ:eš¶,Ëz%ò=v$;h%8Z&>L';>8z`R|DTp(öYØŽK–Ë´eY ƒèÅtÈ Ì\„B0ÿ«ŸB‰´„È’F­²²S25U‰ÁˆÉXe©Ðrñkû ~ÇÂãqIIw×*ð–eYCH$#/ŠÏ%Hœ-H.HŽ.K‰ø£)ÿe—t&ÒµÝþI¼B¬#cžeY×Õèui² âF¯Ä“](¾öPpÑ£ìjËÎ÷DL<+»¾´ïmý}´e̳,« @‘¼¦‘ÛB™™«¤òôX1ך¼` ðצÓäB¾ªsñ®ñ7úäfï°àŽë5ô€{ðúó°æc‡‹xÁe‡¶FÏ3Ê0vw¦eY&/Ò;` Š¼`È·_Ýw»NÔµÏ\@ØÛGŸ5sÁ`¯î\™ë`ûèsì eÚ2mY–e• ÜyíqÅ>yÁjÙa®H^äÛGŸ>sÁ¾×s`o½ÕU1öΣìQÍŠCÖð`ÚÊPŽiŒb^„b´^zFi+žÈ¿¬Z–õ.Ö½°Êß ÆpUAÞ‘¼îóI€^Gc-«¼˜[ñ€Úw6¼bñöˆ»›îúTxÍ^og‚ao{PÎB¶ ØË'p;çGi‹’TY@[–e½»õDÕ>É+>.3W$/suVåèv‘l¶ÇÌÉ‹ÈØÙf‹¥Æ9[Bæ/x&¶ÇÙ¸`°—¦õá_æñ^úÓ],BO§v†,˺š~žÙ£ÏS1”Š’ˆ´ó¾›“IÑ78ëõÓf£ÃÑfë3öÖÉßóÏD£©ºÐÛ3ô¬såL§<ô‚;÷F³Y–eò:07 î¸î“½øèvE›mÔnÊ6pÉÛ‡½\0}²Á «òÛvn:Õ°Õý‰£èÓ¹âQ8¾ï2mY–uhº dKèÏÞ‚™™žúþy?DTc®»V¡ àÌæZX\55øÛí÷Øh°½ûÐFÖÓ§eYÖu§Ž¡}ÆÎò `.Ê]|ë i`®Ïô‘1…2éM}‰ÎuÑá4:˜¶,Ëz7ò-˜òb>jEÈÌ™Ý$3Øú­B´ûÌ5j¢Š½-úÔq‰­˲ޓ¼d",C(âAQ®ÇhXUnüLÄ@²m ˜k4X0!bxäEBÇY–eò¢ÎÞàÓ壭dGË:èC9LWQÇÐñÁgч~¦MpD4`Ê¡Xñ1`ÁÁgÓ–eY¯'Yzg ÅÉ€>JùÀÔ1”4ªbµ(kW•Œ•žlÍ\ØËMLþVYLcéîÆüU#Õ´eYÖ-X–FZ–8[–*¼BzrôsÑaž_–ò_vÉÁzˆ×:¬‘OPeÚ²¬× “Uâ âWâUèS3tã3øÚCÙE²«-+ô¡_æYAÏØõ¥û“ Ÿ±eYïB^þºŸŸGh”¼òJ<ÚàýÀu0òUäC¾5úT6[\¿Â^õy3úTÛáð =ñk pBµC[sÁŠÞ×þ'sÑ÷Qï» ó,ë¸þ Èmj6*æïIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/GA.png0000664000175000017500000000766613657750470017265 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>AIDATxÚíkn9 „÷þ¿÷ {„\a¯åÅ:háLu_ÛV‘‰3ÃQ·¤úHŠüë¯sm¾þù¼>>~ýúÿo_?¯×·ö÷çõññïçõññÛ”¯Ÿ×ë×ïm¹Ëëïèõô^o¨þþ¯ÏëËôóú½´^¿nÝï?Ö°ëuõ¿þï/ˆ†z s|þý³×¯[yýŒ¾Ï×—$Ú7ê2ðõóˆÈPôÆ_ëàŸ^¯3ƒÐ#"ÜâßìYCìï}-+¿ÿ ‘µ¿GG}#ôöu4‹í£÷Ew >hDaö!Cñˆß?ëÐ`;läÁè}Â[¡ýö1‘¡vg)Û«‘×X±€f§wë ¬ý +·ìÛ¦jÎu®élb'Íre­²É6U6)[fºØ¤Cíf_Ã&;HNò¿ NQFéwräOC“*ù»  ȵ5$Ë$nhòJ~•I ¡É'õUE­B“l Wê3Qa‰V%õ‹”Á’*õUQa)½¢Ye‘v`²ÊŽ|;,ë\«¯¬T·Œ²Ý@»¾YF)ðxêVú_†4vb^z;rÖÐB6‰Iu L,ØKdÙ¤pä4è±ÿžeª¤™äWÃQÃèäTà H D¡ Ë6¢¨s°×ãϰ†ˆz÷ш²Ÿ²ôW•4úwûÓ°”•úŒEÊ  {ó߇¼,bŸÍrémúŒAPl¯–˜¡*ƒŒ‰“œ€ÍE€ŸgXTú#…Ý؉ MÆ&ðóÎÛ§1°s/չᛸGɯ·Ÿ‰‹´—Ë+ùUqQ&B¶{,c’ò\ûjÆQ54Áõ9Ï™F³µ šµ¡0ƒÝd#Ø|RŸ±H,±ÙÈXD ड‰I}Æ"z /i ;°xÈrXR'“:9–¡û Ã(vKÿ×û…::‰Ê3²lb¥~ž˜²V×·rxb›¸_¿vDÓ·Ø»E±d3k¨{!g®Z&£ŽÄ‰AAÃЋ<§*“¤·>¤F˜œjƒ%Õy®>SíþTg©P^„Õ24!©ÏFM¦0Íy¥¾Ê"*4…×EUê«›6&a“ˆÍþ0fF Dlõ¸Ú¸8Éa“Ç)í±Òï,C 3 Uéïu-¿êÍbÑe“2x²›Tú#QaáÉ}kÕÜ|ö>Lõ$DÂ}f’SÞl÷3]%ùUQ‘^VØH0&)ƒ&t‹˜Ô_Î$ªÔ÷²jOàño×Hêó£á¾€xšØäa,¢ÂRZt°u‘…qÛa %z¿5†O}u«ŸÃ"߈MP {˜ôOûV¦IÿeþÂ1ð¤Jf0òÝ„S¤˜ä÷&áó%Ahª;Tð>+Ĺ” e›ÙaRUøº±„mv®˜1I94©’_g’?ŸáW( ÎbÕ@–Î×&õ‘äWã#ð¤I}Ä" }Ó÷R߸Y»C¯«N¦2yÆÂ ŒETXjSCvkä,²ˆIüG(‡\ƒ¤( ¹ç6p¯æÕÚ6rÞã½ËFn¹(¨GlKžå[o'*yM¨â@Íå 3‰ú‡mue'™äW¡)@ušóÜk šZUn ×'ž,Lêogïd)ˆ½ÕzµTŸÍ˜…[=Ë´mëScuËØCeuÁn—ec é\ëoé¦gŽºœM˜ôßÎ&Lúo[ Uù´|‹S÷àm"AU1Èq¹ ž¼y3~Žóh¼ûm¬¹€Ç¥£Œw¢ C¨’#4…=$˜88«Iýí,ò˜”öLmg‘Ç¥¥ Ù>ðܱv3t|YçqéyÛǧˆv'Ù¶-'ÛÓ”™ôß–èý˜TùÁ‡ ÞKuµDÛqÇxsdˆIÿ1‡®slmìÁ?uò|Ûº3Ë$þ@¹7x<‹œ@M7o‚¨ñ… Æ—ÒWŒdu97L1gºÊ& L2´¤šjõ¨ö¢LcËZ!%=°0˜¶î-/­ö¸âtãÊûE¥þò‰)1ɤþ@åw$þa‘g1Ê66_0{\Éñ®¢íË;\-+{?¾qs¦wµ^CeUÍ+Úã$ãÚ<¦Š· ÃÖÆ„ÈaM|Óil#)4ÑM¾­3tP3³ä–´[âW·Aºd9‹0Q±½±èøÖ¬cšÛzÛ«lÒOC,3'¸Ú&®¼Eõ”&ßp#ß&9ÏÇ4šG’9ƒÔÙŸ^ÿ²R_íµXKLê㑸_–ÂÙnY©ÏXÄJÿ‚g3׸–jœävkl€¥‡†ŽD?Œ2%Øhgc”MÚ »Ö5æÓV<á[…6•MÚàÉ›½Áà ½†'ÕÛ¯B`®ej r“!%­ž/)‡'vØÔûº×3K dLRwAô?²¡f#±šÞÏ*Uê£wáKTT÷–;Íõ½V['Ë ÉûY2Y,å”4c‘BXŠhgûõÿÚa)úÿ¿–ŸbH:×¹žrYO—QÚhÍî±ö$‹Ÿ”CT•ô/ƒ'|4È[¾O ì T%?cÐqC“ðÞDúÐ OLQãÄ5&÷þsäScªäWÃÞè€p«µlù‰B“U’“úYä]Lê{K È=_?b–LV¾Õe¥~Cà&§¤5nb"±°´]~Yi Üœë\O ÔØ…—±É¶s$Y6) ieÙ¤žTéïe“p-L†`Ò_e“4þ±ÜUéÏØ¤ žTY¥&ú¨l6°Úë_O÷ÊÅ?¼l€'­çƒ·,Ë~s”ÊI~/“”A“ßP™D…&h SÕ’ß MYÉßMQƒ¢¹ZéüAïV—e‘×Ù^,õDZˆ•úU,R®¨f‘r‘¬:,r®Ýá‰q†¨ŒÒn+˜Ã¥ÜPVSeØI@”&ù»ØD6P•þ¯n´#æ}•Æ¢l‚ºøt\÷¹¨¤Ñ¦í•üê9JuÙÃ¥Ñ:„jcÒ²À¶·E!.ú”TÖU,R^u^ ; h‡%$é³=oÊo­ÝÂ^ëji oùÉon@ ²–¬ŒÊ2È9š~®.ÙÖ—ÄË&ËΑ0éÏâ'íuU]ÇØ¤À@­Ó3kîˆ -€§˜ôGl¢·)ÚÙäP۪˓©Jòãž÷ ‰e÷B&ùÕ,¸ò"ÇÈ0Èa JËÖCu6z¡)~`³1a Óœv`,‚‘aɯ†¼ nY|$õ£,RK(쇜2Y’~‹Œë„ʨIƒi÷ýET6i09ca‰2x² °ZåIe“0‰â$]ÊúZÅ&m†Ž-9ÞU´}y‡«meïÇ6xLë…hó æ»N7¯PŸ¥íí?¼ÞýmФ>«å-hÔ•½ª‰O86¶ Û’²¤Ætá]ÖŠ‹1É ff¾I²±œECˆú±ž±­YÇ7·}L{à± –­ô×¢Zý€íM¾U©_Þ&}|£yoßN/“0=){`½í^]¼ZQJ TÖMRÍv+HðI}•Eû-{~@Ic,ÂÔÞ8 MÆ"ËZoy'Ëöz2z À¹ÎÕs]³1{Ú«]úÛX5¸œM¬ôϲI<±°„wy)ƒ'$ù½lÒf ‡_²mû¡,¤¤üðBÆÀnÉï…¦—/àuž«ªby„±géBïëÂìI}õü‚¥@ ü^ê«,¢pzñ^ê3FÑ×ɤ÷_•ú*‹Â’6)Xüøúým…‹XY¶]9×.&±?·×:·*ÈÌÆOÊÙ9.½#ÙÆ&èç6xR=ªê-¦9`^˽EèÊà):ÔŒMâð Œ~s¯ª»Iy“)ÀU¡‰*i–x¨ú®,… dRßË", αnj’Ÿ%“¡×‘"w§†Ú…ÙvðÂRØ@Vc9,y%>b KgÛï·:Ä m›s9¯ÿ%|U¸Ýr.IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/CA16.png0000664000175000017500000000265413657750470017420 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>IIDATxÚí]VÄ0…gÿϳ—àÜ–í™3´·¤·3ÂcÕÒüÁñvk1É—"•"/OÒßÿD*^ž)þR¤øvûþ~tø£“Ÿ„µÉ2Ò–ÑuôÇçŸXÚmi«ím«—¿Îó‰NÅÚ«ÇŠ×ÏŠåìÝ­mWËŸ®g»Yñ]ˆœÃK;´u¼üTÎóõ{œs[ª_wï³Åa*±ëÖÝþûêµ­~ö þU°±”#\d8#ºÌÞЖµ´\’ÂJU"…ø+ü,fAšÒ0ûuää·ä~V¬ G¾cñ~¢Ûk“ÅÃ\îiõEœnvÅŽQרcÍPÖîuô R„lÒöDÀ @ÜAÚ’Ì5É—ÜAÎ’€{îHõ‰€·ž&û3`r·´üg!,»¡?«½Eð›Vìãé$&‰ d¬8 ù<?(ʧ…Ö‚è{{蘄‘l1\RÍÅz4Ú 3;ËHÞXäD[r§B⎶_BOÜ[ {å™Ïz_ÕÒ,¸WN_0¡±ŽË‡ñ)Œ×¸N"ß8ö£aЗ"îÑ=šPû^ËÍšH[æBÊœœj‘Otæ:pÁPK:mÉ3%©^vxâ“{!ï¢ Sa3„ß2꜕lÉïŠ,yK˻Ĺäâ!¬Ýò¶™Ií ªÈ=h’î=*·§0Ž~B8BŸì9(“¦˜ÖÕ8¹´Àâ{-§KšÉ$8‰––ÿÀ\´-LѦ°MÕœc¢•¦…"hÁr¸ỉ6BH‘D½PØø"¸C&¬–ÿ€º‹%¾º(9AKÇÀ§°tŒ¹”qJŠÛJ—¦Ü“ŒöÐ'uɉd„Ô9mÕ% ú×bPzäœúÀ„Pi¿)°—ñE--ï$„’BθìHºÅಣÒB«1$––Ñ‹é¨åƒ¥“´QbQ¬µ­á˜g)…Ïs€WzâJ(n—BPÙÒ’€AEW¯]6C»^çèHdŸ¼‚ï0*»B‰tiùš, &_ F» vù›7ªUtG»àv¥!íGIXÍY-¯ÎYc>II<Ò0HòWø-‘¿ÁoË!˜Ö®¥ MÛ²­¯•>Uö„vØ9ÉšžXÎó%òMžåW}öö ƒB3ZßduÍÑÖ4eÚ¡'¸c¡­€€£\H+˜¤•ˆž)Š [B0òÆ}0œVzãMJ©÷xž··DȰ?—^.f#õIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/CABC32.png0000664000175000017500000000413313657750470017615 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>æIDATxÚíQn9 D}ì'ÇñçÞ( dw¸†¤šŸzª€$±Ë==R½–D~|H}~~|üøñëõúó¸¾ÿÝÐ??õ»Á×ßÃŒ‚ŒYF±’AìÒ·oÿÁ¯Oïõëê÷[6øºB×aÅûzýÛ Z/´î™Uƒí÷ ÷÷ׯÛ?$Ôï'IR›¼^x6ÁÅ-kŠS.<Þ ö-ÅG~ŒAË@–IÚ F™¤=n­Fým‘¿*êocoÎÅŒ²H;,M W2(I4FÁÆ.øxaçúc¡IÑuŠÂ3v½§¼Èg‘mF±O÷WÁ’õ÷QcmLýE^_·-ܼMÔו“¤ÓeÍ@‚§UƒØ]qZqÂ2É5­x?xû[Y½üÐõ½a£Ý ÷0<Ê"cãÜ*‹l‹_×+l]9<‹\)ò?ΘXD’O#-ì´ÁÓêøfåÈñØKØ·“w6òo‹þ–1ëoÛÐè%jIÚa)Ë"˜¨Ÿ]~‹QQXßGe‘1&ñ>½ãÆÄ"ocL’¤w‡'Lô÷à óP¨ì¡{6ògÙd ²‘ÿze¶AS4òc‚*vùÁzªaIpëÀ×e|ä÷Œa‚,öé>Þ˜$IÒ»([®% Oe†î&e«Cž¬+Sµ‹­üÅê–(ï*g–èòÃØ—(‹à—!0L‚Ý“ê1þ€&aWÏ,ÏgI’¤w­buÒØœ[eð6$tÈÞX³FÇ"¿w+ŒC;1÷à±QÜà±3‰$I’¢ÿ!3æéÖ1¡aìÀsU`ÅÄ?å['±îÁèl‡&¯ŠòÝÑ ¬öGõ°²üÿ]/ö~I’¤w‹þDz †E¬9zÜp6÷%kl…\1&¼A+êcÞêÕ†)å'r¼ááî§Ök~›¾EªOƒµÁR×ÌQ¶5T’$i8~‰QkW%ÅŠüãlâ•ÂGþñõ’läß>®e[Ž)ö‚æ¶KUä·µÑ¬ª‰~}a$X’$é©ÑkÔjµ5fÔël5Æ&wû·ÍvYÃDþmL’ücU£°}I,£Ùˆ>ntu|Ä>nk¯ùÖ5`« `Û_J’Dþb“ÕÔ3~%£]w·—½nðicïdÛÁµ½å^ïlo9bû=–­¼Ýh¶™ãا6Ûr;ðb#ýø•¼õ±µA¬íx0ƒàZq’$Ê&£86±v"µG~ï7^üåðä퟉.G´ÓùÇ›Wx‘œI¢‘Ã$IÒ2Xm[8 ÛKÖÔ(IÒéŒÒ–£Á6úï·Ä$êã#?Þh6úo3xsÇ™DIZQ_W²˜EŽa\Qw̉EI’šâ‘Ød5úo¬Ç³É1L²?­98:÷Ž=QP•A‹lfIRô—Á¢èc“Õd7Ø~|»^²ù·1It.ŽV¶Å3‰ É2†7(Y}Kqÿëðf\C)I ƒOg“×03^j×ÛÛ}mƒ§êèßfÐzkÇWœV™Ï&ãõðL’Wxƒ‚%l©\kÙ¿Ü€½Å -À gÌKØ86±Š6m3­Ïê½Æf”»lÒ~…½R¼V<ÃÀÓ“dKðnÿtc™ÿtºÃè E¸·ø‘¤SEÆc,Ûì cÌbÌ\m½ÆÐߺpŒM¢íA¶S×¹`¬wÎj;2c–ÕØvŪΠ·Ã'i,,I’ô®‰»°ƒ3æ­—ŒèY6¿²Q67…¦ñ­Q8hŠöVÜö!ò …]ÿ\MÖ7Ì^6hª.™VþáøïÞ¹¿Ãh,)êK’$=0ýI¼r¨ã²R n[3vA'Ë$cư+NÛ›?F#´xq4U7’> ¿åר_m°l ¯Šú¸™E’$I:šÆqXŒr ›à b‹··GþÕ·¤I¢I:»°Ì —¨½+ë-äܾ«X¤–ª£~šÆ‡oFŸY$I’$©’0㎠mFï~£¶.åw+&ò1 þ âïÁ·}‚1vÌL"I’$Æ&Xµ?¼;É—‡†êæ^"oüÑD½šÆ˜ä¯·p5Š5è•5,EYE°$I’ô®ÂŽþeÇw¿Æ¢û[æ³{ùÆWOCXÉzûòh@µÎ“`+˜áŽá âO…a &z'ñ 9x –$Iz÷è_®hwŒì@Ý›º ª<•¬Föí…b=v±îáñ’»Ù&í÷j6òc É{a¡i,F{ÊŽŸ9fS™¤Ú¨$I”è{díÁ]9ìQðêç}øÕØ.ä¸vé«}J¶˜,‡&¯ÜóöÑÓ5ñÇKŽgŽW+Úã×Ç bI¢2 ¶±TÕFŸmÑÇ&U‘U¸™&Û̳±MÙœ±¾îÑœ6ª³‚iUcÑÛF½¨Ùõ–e‘q&±†\]~<‹H’ô¿àOýˆþøNXØzZdzÉc â˜dš²,‚&¯ëd¹ÁÕ¨ïÁR94e zSc¹Á¨ÑñbÄxÁK,"IÁ© Ç(_æƒ\ùu%O3ˆa ôÛ¢~–ð,òh7¸íÃâ}Ãì÷íÅ RJÿœmqN=€IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SB.png0000664000175000017500000000042613657750470017265 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¡IDATHÇíVÑ À ìÿŸö ûƒý¾Ìqbö ;1õ<³ÖjíÇa\ ‘S¼0nE\h—ž) Yñl÷ t;Ü]"V"$€uÉVyð£ŽðRÀþ(|A.ŒyÛ[€…1BàUŒ÷>Û9v‹Çñn8ýÜî˜ÅC^æ™['*`ºË›S­ÀôKœþ#IÌ”9¨ÓþêÊ\Ê_·~>õæ¯ÞÞÕHIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DD.png0000664000175000017500000000517113657750470017252 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíanå6 „{ÿ_½Bo°WèÉR4„Ïc’²HŽóf€Å"ÙMÂÈ’5ŸHIý%I1ýó©ÚÀþýÔÇ] >õàñ1M€ê;ÀãcÂ^øP-’}ÔUß>ºª7t…¯GfG%¥(@üõ7»Äñ~ÿ¦_l ößmË|ÿÿŸÿ¾m0Ùì{ïø<úضØöQn¿¡ Ø }ñ{Ïdÿ.k±l Ç#ü áûcºöŸ?ÇÈ—$I›ˆMÁ&yKÞÌ$Õ–¥ÝµüåÐäYþ,“l7®ÈòG™¤šP ÈQÛÏ—CÓ}i¶þö}e‘v‹H’$=”Q^×ÉdÙ¤¼£-˜¤Ði¯º&6± ”´lâ9jºÀPb<Ódµþ¨¯–C“gù£,² –¼Ñé†*ƒ%4ª«e‘v8¬¾eâ„¶$I’tÅ&4Ö€MrîÃÚ²#Ðí†Öšƒx Ä|b»åo·þhÑ<›†•ÑüÉXKZ'íåG¶C“gùQÀè‘—[;š½ôb‘húnÇ5Á’7hPbI’¤!Ñæ?VçPË&ev+ =ˆM¶ÃÓ«Œù=kÊ )jùÇ­¿—$¤±üØQÞëUþñMžÕ/­Q«ï±ˆE\-Wy˽H’ôÛôZWMÇ$d/`;CÐì´Áe)9j[yE›¢}u{5œ}´ÑAaÙdû¶·áe’PË–Ù­¨å$Þêþ˜µû†½–Ë >Ù^“uuë<ðñ)Q,"IÒ»3‰}AÓ0 ­õÀLñ³i¼wÑœuÞÛ™Õîû†õú´ÑÛFkø-“ Ã˜¶µàá¨Ñ>bšµgÔ‚„ú?iF³ÿ>$}/>`Qé!s³$IÒ»° Z,"<¤˜lF-F·²úºˆ>,ϰFu»åÏ2I;4·àcú ý(~Ì{ð3‰XD’$±È#ÖfèfÚõAoÛÆ˜«¡]£ŽZ~ÚUþñ<‰×÷²LRMhôfßoe-ˆ¬¾ýAÄï?ò©N,"I’ô6ñ¯î×p°·Er¼žš¶Ym€^í{tûIQõFeùŽï‘gO@{›ÚVüÁvÞreT÷«ÿ˜¹X,"I’tîZÚm˜ÀðÖÊ׈.+;7e3ŽgùÇØÄ.ñÒm:È^MM°rpÞrƒçný 4ë Ë»€wìsô\궃³³-a»@94­&n?${™Ä"’$I{Ñ`Ü'zlÒ°·7Î,EÖÕ¿Ø¿=ãZ~\4_RO~9Yy¾šÐZý¡Ñê¥!Úá =â(‹´ßß™íôÙÑ}{g¿ª–vMa4Ur’$IÒ°l¡ºù ›beÙ¤“æÙ³Æ@s£³ü–ÛײLRKÖêÓ±ˆm Ú -r!’$‰E®ÏÙË“xw(Z~°I¹[yµI×l‚ö¼—•FÙGöjÎà-ƒ&Ï¡| >—køf”¡q=ÑDN{Kz†µšðùÔ1YMöè´õüHÓÙètåxÉ‹H’$IÎY¥Q× ²~Âfz³öéõø–s6i€§ó¹9š/¯‰žpFPóMuciäíÙõIfíЄC”›ËCç fP,íË‹îØÑÝŠ’$I$ÖŸö2GïóåûSÕuÅúÁ¶ª8tÖ%b‘šÚáÉc¼)xÑ@b”yj8:Ç$eç²Úoœ½Z]Õº½wí[þ^\}Dã§§äû®`I’$é=ÙÄ® "‹O<“\³ÉX Ñ|Ék훌eœ<&iƒ&Ô‡,“xt·­Oz}+ê¬íèß6Xî¦^· 5Ò<8z,BhýÉZ yI’~›¢÷ÕiJ[ÚÚîHÜí çfï6Ê!y›ñhºMuö‘¡#Ö^ó$±½MÛ­~´$ oçØÜq >ü5ôÊ0¤%QôïCš€²wÉJ’$½›Ð™Úe7:“`] =í•CÓªaõ9m–?Ê$Ð4܂郿x“¿iKÄ"’$‰MÊ&ÄmK¶>hKëËWXï®Q·ôD · Vù‡ó$w…6ºl‡¦]£x¼‹f9IóÅtôö¸šI’¤±÷#½šØÙö‘[‰}ó¶ÝÕ[ÉËüßÝÝhëxãòŸ-ÝOBw´ÚcŽ1ƒ¥Õ]aí-†ß{M}oug"Íö€2eI’$±É•»)3Y˾¾í¤žì*›ý ,±¯k[ Fiˆ,~¶IˆÖ¬¯Y„šåo³þٽˀ°ID´´á~Žìkg<¡|ˆ$I™îNòmËn´çò[·’=:²ÍQgï©Céµßôç]EHwM:ºÌ‘®°g šðëæºê­ýbQ4ºÊò¢Ìq}ðC›Õ÷Y„$Ó.‘$éÝ€.°Õ9µýZàÕLRùÌóº’z×/¶ÔX_¥c’qhò˜Ä tœIʶ yƒõ-E¶·œ­0B€j»ñÔ¿´öšEÚfÿ:àŸí]’$IzO&¡c“}×7Yþ¬ h»ùjµªmÜIÇyzèJB:hò,«~C½VÐÚ4Z‰¸ vΨŊorYµúQi/lDŸG‰›¶A‘ešï,I’´ÅaÓFwè&²þtlbíÔc.L¹ë7iؤÌQß p4­žà´šÎ­>f‹sÇl¡iÛ`BV?Ë"h”—åKPúa|ŽgõÛªÝV»€eÚÅ RRÿíû“²M/ÔIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/GA32.png0000664000175000017500000000714613657750470017423 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk>IDATxÚí[rÜ: D³ÿï»…,![ȶrË™r…c°› y4üH¥d[i(ਠ?~¼Çbüü;~ýúøÿãßÇ‘D“ÿý¿ÿŽ?>Ž<þ}yü4ñZf~c<â>éãùïüú;~ƒñø©ÛŠbøóf~ÜàÑäã¿ÕÏ¿¯ü€šWL.Ï??:òkú_}~\`xü³sÃÏ熭y{ŠÏçøßxAÆìWCnõÇÿÇÓfÆŸ~>BGì= ¯Ø~:{ÒñˆÕã°g°÷oò­Ø«±&Ç[gÍÏîÊ|ÆL>ÄxèZ퇰åp¥ã¯Ž·¶æG/¶éíáljÆ9jç­â>÷`<Ýǘ£Þã¾äu4‹õxŒÈ+Ñ0'¯ÍÇ霼¶Qwtú;äµá³|èóØià[Ý×HôqÃGŸsØ›F2šñ2—{ úpæÚ†½5ôpá°·0¬@¢-ŽyÐäôXÚÚÄ<=œ¶8æ¹]©Õ:m…a ‚㽠ü÷xÍá…˜‘¿Ò OêÈ_G’›"ÄŒô0s(¶©*Îx­£ùmòRˆ;Q—aôä%¯íkeð6÷’d„>\nÒMÂiËE$ tØ›S@ ˆ­ÐÏœ r“®÷Ø«Gc@œ=ìññƒº1Ï =ˆ¶6ao¦ñ|•˜Ú¿õ#zx!ÄYVï<Âm´Aá/ó¸ì¿¿°TPŽéhYOyçgøö,ô +¶SÏÁ— ôpÚâ°çx¦9ôpQ-€¹Ð¤Cóß´ºa+ŽóÄÈRëuÉ«”IhæÅJLÍR@Š˜ñ×B…—¼6‘ï§ Ù2"Ÿt“yú+»\áa¾¢fß²^#Í=ôá!Äý¡ë@̵ {öÖ!èIa.=J‚`Øò–’²‰-ôàdõµ°î†=4ÝmqÌs‡ôL#9 ófÉt_ݪ#1*‚½:m5’—•Î Èý.T @ÁïÊEÈÇ}ûNåXèCè£,sÎr»Ž•øUJÑ×ՙч-Ì£Ôm”ÐËñAJ¦Ci%(³1×ìqôY1׿9ñ ò¬æ†ÑRoôXôá Wò1è±´®~Ì¡GÕ‚uM{„¿Òm†N$.!Úâ˜ÍF·Ši+”¹´DØ’q ÀK…!öúšÄÏì=1ñZ•ôçàkM '¢Sbúv™kO·qoXHà¯3:˜‹ÿ‹\榾ÇA¡‡=‘2™ì¢æK‚G†ÝÃ=Åô¤Ó–2Å6tÊý÷Dþ6UäLx¶^¢ûäZf0aqÎân$,hÞ]Çêö¦}¯È| y!J'/@‰®ƒ‡¼gɽtbxàqɾ’#Ÿ²î„EÆ4¹(s…Q&RöÂouÓäj{œÚH³Ë¼Dð†ÅR=$ÞüU _¶½÷滽´µ½¦6¼˜[)¢tá§M|i›8ú¤Â^›¤Ø*¢¶ÈÆMBù%–C.´üSºàå¥æÛŠp”.ã¦/\·-ÕG%'<<éé€PšSnZ’Œ¾B ¯ÔVu¡D²¢Ô9@EÉ‚Íé‘ ¡|º}ƒ]OÁ¸SÌYóÑF[wÒŠ¶+´mÐhÛ’Rº 'cÛ‘„H‚áäuÈ\å[ËPHç{ù{Y•o´ìQ¼a’=»)[D/±)¶t°=)Ÿ›·z#è)Ž¿oܹ÷²e:yµ")-½r^l&¥¦`py¶‚BH‚9/¡´÷ŠF…é\¥e²š ƒ)¥Ð‡,nk.w×PàÏ^îîJ"óeEïE–ï.gþBœ•B[ŠrŸ~m%†‹Š*+e¤9y"_yál$¦ðB–G¥ÂkŠ£OQ[9x+»À·(STò¿¹ÉAC[/ô„7²øj^ !˜·#²6+¹Œ¸ôã=®Ê_áÌÅ–’¶^-±•V[ó°½±íÒ¸öÜ ®¹%^C@„>‰m+=NýykK=eÍ<{¤¶/õAOxÃV•=Â[Ôª†›òê¿Ö†ø=î;J¨7´Œß Mä›%Ê)Û}¹Ø&æèƒ( Élì!¬Q®ØÆf ṵ̀¸rÉ“†í¬¶è£èC䆳Í%èÓa¬æø ÇK[$ԪУl6Û»ëÚÔh!óÈez¡çPT󱇅ºCQM5l9ë¹#Rò9+@T{» i£s@䕘Éå%¯M¡ÐK^GÈÇH!/ÇNs+7!âäåF>}æ5KçŸ#ßôê¿¡EÎ\öŽÐÇË\âV•HôqÞŽ>{°71ì]eòj[ðüŠaN[›˜§\+§-ÅMnR §­Àí)>Ú**Ì:†ÅÄk};(\s%+è9!òÚD>ùâ'/‡áhùæb•,…¼DäcÕ™”Bh5u¹ÑPE…¹6a+Vœ¹8ìM £s‚>ìyÑ'ötcúz¢{ýXq™^ÚzžóÐSJ[#ôìÑÖ‘uB[G†m|ÓÖë P¥f8…™A°™GûÍ9yY±Í~ }ÎÉka˜Ðó&*–â.^ï¶ÔÉköÕÀgaY£²½&ìa]¹‚><ó R¦7¹Wß…Ì ônÊåJ™ÒÙ¦<'‡ìÑÖQõ.1Ù…ažEo}µ£›<:Åçý‰Ì9å¤â’å¬tÌŸ—³ÞÉð¯ÀY‰•¹ò ÎäB„”¯°Ç<Ê"òÚ0Ìês£’¬Öüò©dÉkUVk˯¢iÅKÆ/¦Þú̪3±>2“³y})B¾¦zTΚDn°õ4ó¹ªÀž[hBsU×ô|É%&D[Htu —˜·°YjÇBN[G˜g%&¯ªu§­‡oÀK D“ú®§òš×ÛâäuhؾJ«ÒÓ&ò.‚ïÄãäå@>…C,sñ@2“iÀÃÎMZ@Õ»”º9ø£-³Ø^%¯# 1—ý?ß¼€^ á>’a¥«äߟR%õù)w>ÓÖ<:ÑY…/zMo³sŽ…ÔÂB“ ·žW=Ú×ÔRè¹m½"à­”øà1ψ±o½#æ´ê »-?Øá©†zŒ>èµ¥ö‡¨|óI¤$õ‡-ì®uXò0‰1ßræÞ3 ×Ê‹öÜK]¼¸p0ì长Ð=Ø|¦‘ÒcŸoŽîú/z¸ø‚ªCL´Ð³G[›//{å7ù2.t–4És/|côi`Êæ^O©…í¬«Ø¢)ŠÁ¨—Ûf&½¢ý  “Áº‡.=w6Gn“׈|Á×Ís»-ñt“–4s9¦˜-mf$Ä\Gõ”vâ¼­6‚=xõ<¥Ñ*w7[g Ç¢w–<™Î>Þ¾EHËw¸U =èS£wÉàÞ ^è)ÎH.Á¼âb^)àÝ¥Ð~™m!f¾Ü‡ø+˜Â¸Þ$o•We.Ci‹{ætÿ¥”fMN^›Ègã’¢k"ô‘`OY¤DrÓ‘a.»(†·{\¯ ó™Í)† GÉÞÒÚ¹L1þh­Zާ9“Mi-ö¥&}Jû`¯8+!N¯ä´4æºGz˜’\Rô½e™fYŸ«¥W΋ͤÔL,¯ÓPP¨¹„’^4 ©"î¢Qü›K/“¥è=‰°§¬8m–BSZz‹¿9ÄĆrw|A/ðWTÓ9¸¤!b®²"ŽëÉ•Z¶rM[?Þã¶à@^ %†ÛŠ*7—‘n(œ=Pi©p~¢ôâèzŽÊÁ·ÀWêÞ*Ìå.ù¯<òz“„ya}­ÂÚ:èÐÃik»‘Å\h*hݱVÜS›•¬q'±=‹¾¬÷æ¯×¥¥NZi‘Wsó°†vim â0¶%·ÄãìqÔ0 }ÜmÛ=Îb0ûÎÂZ[z¡'¼™ç}¼íK·sè} [WÏ·SjiQË&TzS^èƒÛŸð×{¼s54PohÏ¥§Äî©\zJD>®ð[ W$•Ï¢lÝD>ý† òò Xøñ¢®ïM)s.ü)Ë 8ìAö@KÍ\A˜ç0Œ G¡-´¦º|Öú …L{Ä‹´H?: EbR0Ïam7IÁ<w,g˜’=?w™–³Dµ[Œÿh´e» …ÉIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/ASBC32.png0000664000175000017500000000463413657750470017643 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> 'IDATxÚí[Ž; CgÙYN–“]å~ýS%Yº‹A`†írÙ<~H??ï‰ß¿~þþýÿŸ4Âþüù÷ççóùûºPzŸøõëŸçŸzÄøš>hýÂl –gË<…YŸBÛZX_#þ%¹N`v¸ýó Ä(´Æõó‘/<õ…ô-(xʾc«çâöÎO÷hO ë{¡É+l]à3¾†EKô,2=àK˜¢ËíÐ ³ÆEzKóÖ¢f½åh6vè­ÿº³F¬¹y\ ×Qõ9´R€Œ+]ËY(`u…ò¾GKèm¥v,ÐûÐT¶nXÑRˆ¬¾*QËF–nß„ž¬©®žÐ°Ø¤}ØA¿`ÍÀ¢½·ç#ãá¬åÛL<]åoö|„YGÝîó¢+mκ›EÚ‡Ôׯ6pNY„öȨX¤{PË)N§-xʲ‰e.ÆÇ9«ÅÚàÉ;·zíXÈ#Ëoî@;Mc“´ ‹Zþ±GåÞvÌ<]1°(o,¢Âž/M»ÛAV–žB­>F{…R,"a …âKá©|%6:…Y‡ÍÊïõGÀN›®åšm‡q¡43ˆB¡P(j,¿–Û²®†ne5º6í…¦1Ê,}4y-¿—IÆ¡i½éûà5o1Ý8xýL¢P(²þ— Èô_€f}Ù-š“çÑ5êçl]ݧYå_ß'ÉZ~tú­ š²B³{uîŽÞqÏÛw¼}/}éêÚE,¢P(Ї“ëàZf¹ŽMÖ¬¿·X{Ú“èÙ3üt Q µ«ã§÷IÚ^/‹”ÝÈñÑ;Mè.Óqrãé[aã©4,ÁV—Ë[¬P(·Yÿëe-PÑŠµ#Èâç›9½¶KŸóh 7£E+ÆÞ¾S&iËìÍ¢Œ2–µ·lUî·òÒ4ÑaõÙ²-°Ó>mÙñ‚R^¾¦M1©PÈúK¨„6[6ñZÿµ¼3Y']VÌ,êJÆ-¿Wh4ÅîØ’n¶Vâx1GK(Zů׉jfy¬z™Æ}Tèø£Zûñ£§K'‚%ÅkEB¯gïÊé“ ™ ­,0mÅç¨ @vª½À²õƒ¼NzÍ ÒU×È }ú¿ñq-Ê$ã-™]zú–Ó9çò¥*¡Ö9B:¹–h‹—)Ä(¯è°fýר$jýÇ·!ºÙ¤Ý^E-ûᲨ“^kIo念âÑ–\_kAÆtÜ z·Ê®3¦ôBéò–Õ†}=‹”ßYê†&…Øäë„F³§xÿ?íÜKÇ&^‡>.Öò_Ë&×lY<­C“×ÿÑÍ×Z} <}™è`éz.¦e1‰‚%Ä&§ãß{~½£–@z´/‰| ŠEôˆÅ nø~ab“n_ø5lÒ&ðÚ#Rô–ŸF`•YXÏ`±6þy[ŽÆn]ãé´XäT ÝËXDñ:‡-YëOc¼ããØÅ˜Óë¼ílR}À‡^`Û hö¨5ëzLoüŠ9mËyÓ]­3Éú=,Yà ÅÑ_h¹n»6ÁF_ë°µÒ%ŒnÁr}@fð»Ö{ Mmn§;‹TÛ(m¹öëQ&·þÞ”AãÐäõ…cÙô²tmÀ>Mü5öHéòh­'Ÿó¶$-‹Èâ+¾ÕiKØu¸i±ÉÓ,¬ ó²I{Ùôçß½«þk9‘ª«n”µp¶nIû ªX…¦2aÞšcIë²U3Æ„!ãóñGé}+ËÇ¿µ(§KÊþ¤P¼žhœ7íÆ}Ky˯ óV>X›i¢5¶×˜äÚLEÖú—?JTr:[€>üè³E»Û )ÛRY&I·˜µªjù˘Ä¢Îº|†‘ÕW(Šƒ+AY6YfÍ@ë3“—MÆáÉ+ÈrGm§A4YŸrhB§)‡¦¨å÷2ɱ¯ô¶êìÖÊÚ–…}]˵,¿Õ"^X:†&k<[ÀOÔk ( … ©xª»N@£Ð-×!ÛE KÇðäÅFïÉ#ô ´¾¡õ‹-&ñ2JxûÁú†^§Ý/9f´s„úàñËáµú^A9ëNÜ;€¯å] ¿”ªP(ŠKáˆvª£»ÉØ–+Ýkù­§3¬QG=fù£Lr Mô-H߯y‹¿v¼f&Q( Å¥lò5•v#ÈŽ¡Ÿs¼Âj¥m©^£>>Ø“µüí«üŸ Ý'‰Zþ(“”í4E¿H”IÖ:¢–^‡&ÚýâëYC°¤P(Cskv€ntzŽº ¢¼Öü$:J‹Îô£'=Ëá)z"zS»½of_Æ·`kìFN¶eéBdo…§ûCÙh`éÚÔ“×ÀÓ5‚ »õ34l⽄ê[Ûs`¢k¼HhÛ\ŠT¬å<:…ªhFÛò®`mCD™d¬ÏfKÑŒ[ô¹ßNBŒY|t}m|‡É»C·¡#ymË*¯±þtIÛ­êë¶Ñ9š(›´ µVûé„¢„Ö£[7Œ>úµréÞGJŽ?úÓ¤Åãå1Ç_&dñ«Šù´Y|¯Ðµ,)èØÞz¹`Y{ U(ŠV±®±þ´éŽ#[†“Žöå_c¯Aõ^hše’±)Í[poüTH¶ÂË:†F¡©L *{´þ–{ë3e¡©½%½3и1õCrÎkSØë„*¢@'ìëOWh Õ£Ë+Cÿ¨¯ÃÑñEò(†¢²qksw–IÖµ·žûºÕkɨÕ÷ÂÒxKÒ°ÚȘeX¢sØ‚% “бÉõ~>¥$<éwÁÝŒâådËßnõ­ouÒôVŸNàu-9nõQŸ¤g‘µµšè†õxMí‡ÜÿÕ…GQ§¹ã³IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SBbc0.png0000664000175000017500000000121313657750470017645 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚí×ÁqÂ0PY“bÜm¤Ê€(ƒhƒ膜4‰×,2†Þ¿0v´’¼¶¯y{v»R®×wÕÕÇÇu¶®®>¥Ùø×ÌSç²+´ãá”a˜o糺¬ÃÓ¿×ù„½[?{Ìê²L÷ñ±¼åmâÍf:îrYÖ™X·ì¨ý µÄÚñççíµóY]¶Ît?néñ¸¬cYÎçûéÕµ;Ѳݖ2 µüóÔù³÷ûÇ:Ð>cGcڼٺݷ8ÆÛñét{ƒí|V—­³ø-ŽÇé3zâï‡=ëPßî[;”-7œÕ­þÎî ˆWºô«îv‡žÿÒÝàïÖ­ø7Ó»E¯®a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&a&&a&a&a&a&a&a&a&a&a&a&aa&a&a&a&a&a&a&a&a&a&a?Uÿ"_Æ~ ö³¡qIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/CABC16.png0000664000175000017500000000221313657750470017614 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚíáN! „ï±}ÇŸ¾‘&šÍ)ImB?Ö™ä²1ïæXf(-‡€ÁÛÛãñññ|]—ãõõ'¡÷/ü$x½# "fÅBEp^^þþâëém¯£Ÿ7Lðj¡vXñ®íÿm'h½DÐê3£—÷Aïýöºý!¡~ž «½ VÕÀÍØDµ·G¬RÖ½s'–`±¶Oy’¿œ`Ô‹l¿µ%=Jl›‰Jö(±ef)úC®ë6“T=ŽŠ˜Ü› Ü ÖT #ø4QË\Þè¸fÉ´esn–yšVà-±è.wu1ë‹-™µœ˜Õ"^¸a»Ä÷u™ijoaTê—É&XùZLKÔ y•yïé-'&"ï!‚0§gǽV¾¥šUÌÖ~ð µZÆ“ü³în¸%{W÷£?(Ý»D¥~Y 'ª¤ñ’¿|˜Áy^‰\g 丙¥|•Ká.ß»â¦6\J–ઠxÌSŒIA´¢_›ñÖšË {º¯ü–âwyà6ôà ¶pq’Ñ—ôH“7<Ì>µ^Ñ’î.’å´Ü\Úf[\¼XAVà&D­¿2¢Vb¹7™Íå\N´7£¨·í›ñ„ªEtûÎ#l‰E´Wê—·Í^ËÁ³Ï#ˆ-âÙá¯"¢£ê§Œ`+á£õe–×™ÁÂÉ*%T^Ö´¼So9«ò²VVßÄ).—ú³úOg‰b7Ÿa3v¼˜ÖÅ ‚pO¡bíØr÷:Ñ`A̡ޜ[v쇔´Š`²9Æ{àq$AJ[ïÒrí@]¶w+ºfݾ¶™¨Qé?é ¼N?Æ›ŒÅTª,±cn'†3@‰=%>^Úcû ¼‡ + b €%ÖìåkÓѬ‰òä|ìÑ ÑLnK¦-oÙ^ÓÔ[F0zÄÌö\§^EN,Ú"½ÃSz‹ákþ~¿€ÿÂ1_„ÿn¢°¿qµÑ+=‰[®Ãš§¨7)7MXwµŸi}1ZŽÊÊ~í5OÓ·jöÈXø–· :›`Ú@ž¥ UñVA¸¹‹Ã{?¶~úIÙ ý ˆ^¢Ë=‰'X£þwA| âûà1OñmÇA"‚ üú`öV€´}3¿uÛüRpïu˜ðè*¿'XËäWoœ» ÃÄG;±›n½ˆ;Þ4á!'BpŽÅ ¼øRørõÙs+>}›¡K%Í+Ùþ0õž­¸(î”ÊÞÊe¶öGÑò“¯¼ò÷ò2G‚Ð ¸Â—óÃe÷¬*Ò¹› fãêzóH¶š¦c h/“gYeþ–=4ž±"Ke­awFÞƒL|Y¼ûË…èõÂIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DD32.png0000664000175000017500000000464413657750470017423 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> AIDATxÚí]rã8 „çþO¹ÂÞ WØ“ÍÖF5eX êmO÷SÊ嘢ğOMøõKzmýó£ Eþû£Öâ¿t|üÝTð׎‚¿›ŸòïßðŸ¨ïÚ¬µ¬ÜÒ£Ù·#m¥$‰¼D^¯M^5d!0 } r}`°¡O…¹ná€GŸœ¹`°ç‹ñb?ÁÞô¢z`m8¯uD[†F+® &V£-Z h2Õ$IúÚ0DÔèŠR&‹¬×ÕÂÞ­‡â(¯-²æ‘nÝ•Ïõ˜‘` ?‘Ó0×ЧÉZËãÇiõG‘_·€EÙu5_×ÜÏ‚q_N9ÑG´&Ì“$‰òâÚÌ\C„›šbÔFË?×8ö|¨QźX,ÞÞä¼AYòºåDÁÜÞÁó÷0-æèCw¹Z.{ó¢z.ÿ¼)«‡óo‹çK¡¨¢-Izæ²CGm #Ôc½^ã5¾´|r‹¹||O ã=÷ÓÅçQ>ßNžÈ¦‹<ÄGS7¹¾ÆÍÔq†Ü¦¶÷æö>½ñ5në¸-IÒ»‘—Qk>ž¢q”öµlõžÍ²"È „‚>æ¢À½Æ›Ÿñ¶V½¹¿ÈÈ%Ú’¤O¡­M½¹uüÚð~Wç¨ HŽ>\ºÏ=Ý s`Ï·çJOÔØCý¹-=xÓ)Ú’$ 4–ùé¤å••¼Ò£A6D¾xúôÀîhû =žË#@ÔbalÑm¯Ÿ¶¿a›†¯+€27CÏæ±Z´%IŸì|5@}þQXãyòŒkúÉËZ­¡F•CÂÛÜkæjõ=¼Áœü+Á‚ÐFWß“k öê¦Ü„k‰ÖmIÒßM^ô:"/ðED!ÏW,ò~"E8;¶2w»`È/Ý6.ãŽ(µÐCkÑÝDA>«sÚ¢œ~[i8•v¾Ð‡¯üµA±i­U’$©0>Ï(.…¹¢Ôôœ!‘ÏåóÛ ¥¤g¡ŸT> 2"3×UöA2sURQ™+'gðmŸ{–àT¦uk .·Ö%¶e0àIÒûP«ÃåG𜼈NHpDXª“ù¢ó«y4[Ã+|#ìyæò.ðxoWåçƒh$–}lHD©‡rÈ¥4¥ˆ¹ÚüZªƒ™.tF0UN@p‰µOý«Jü íl×¢›Nrµ$IZ 5Ó@õ!0áWÖÛ(R9)ÓÑI94:”´õ8x kë‚öF*Ke €ž¼“ps¶oÊCOL[-Þ¼hK’ÞƒZ‹¬À”¤ëlt{~ÿŸ§Á“ÖZ™‹{sEÅÓ™ :7›e€’XÊŸ1:*ìŒ|ô^Qò0siËæÎhND$IÒ§ZO`jM”æ_Æ›RÃL§öWÙúÊjS®g:ìEVS}ÓÈ“ZFyަ ŽÒ4ø”R”½Šôä´EY²öŸÀòvUú%5SÙŠÛ%Ì“¤w0¶¥³ÔJ^õt¼tßcÍÒ “1»5öê{¢Â–aï =#’:“†Ï6 €ž m2˜__KÔZ=àÔú#°´µaǵ8ë-ôw¡µáØ[›IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/AT16.png0000664000175000017500000000162613657750470017437 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>3IDATxÚíÍr1 ƒyo^ƒ÷¥.ÌÐ]’ØÖç Òé0-fâheٽ݌Žx>¿¿&á~<î÷ׇ¾~>}ÿMQÈÄð+!?ÇB¾_ÅoaŽþVr¬…GÎArࣅ$:bÑ©^[Ç%÷öÈ _Ìe`R&¼IÆ®8^©åËiŽ¿Dœú$ßü—Óç\€äÀñ`åÔg,|`ñÀdoäøŸ'ŠyšXØ0 ·ˆ"M±g´^Puß±Ò@‹bˆaü 粟«ÔÏU:P¡ÔR|Çdµ˜Q®e †¿eQû¹®¬sÆÕa?èçšUB ¥ˆà肜“ŒQÑ|®B²W¾Ê¹àç’Îç*Ra?—aÈÈÐN:×ì#ëŽ~.io—,|´ƒ-ÍÏ5+Ç$ø¹â®.û¹MlÚžý\;m‹†!ã\ös‰çs•û¹VK„Ž;®{ÛñûÔ'Y`˨±¥Úª`?—çsÉ8—aìʹìçÚg>Wó*Öô`ê³c`é©Ü\Ør‚”2›ê\†quØÏ%ös Ò'&E â 75ؤ’" ¢b²1&”·( €ÅÃ@ÉÐN:×Ú£zyHÀÏåÿ·˜>ŸKd«ÂŒd³,³Eo*àU¦íÙϵ߶h2Îõ{~®ä,†5Za­ep3]‹öAQÃ$Ü"Š4Å~¿ÅŠÚ€a¡+ ´(†qüLßþÇ@¼IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/BBBC32.png0000664000175000017500000000537413657750470017625 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ‡IDATxÚían1…sì§Gè1z«öG5ªâ„<Àž³iUm›fYÏŒý>càííuìçÏ··?ì÷ãŽýþýÞ¡çý¸£Ïë±çý¸ƒÏH­=¯udÇGp}àïYï½çßÇíqäqÆ1­|þÞrý¿2­{oýÓºË|>ÐrlÉÕѲ‡9ø¼žŸ[çÁ6­{9hýÿò‡Äë`ûCòÞ~ýzÖß?÷ÿ}î÷w°îçÚæK™lšQhÙ„ÆáëÙ„n××8²Yi’_˜EÚ8¾[Àf‘òéåZù6މEd²M¥-xʲ‰%>Úç¹u­.‡§èŒŽ¯KÊB’«±ÔM™cÙpı5Úº”Þ³Zå°„~±Wò·‹äØñ›Wê{%›NŒ:ÖÆ$^ µ&I~9&“ÉOgņ%ׯö^¬x‰õsí›B’Òñ¯ä²‰Eyn£’}ßM^e“”­ÙèÄÑÐé·Gêû%ÿØü•üíÇòVxŠ²È¸^D[#4Šš¶ ­c2™LF>Ý»!~$t·%¿%ý³ žÒ—ÌË&ˆiP*Qú’[¬áÍŠ8MQÉïe”¿)ùm;õ†lN²ú8’c,â½ÑÓM£iYdìðØµ "“Éd¯2Q£]ûui£±ì¥7Jp, Mt.ÏбØIýhfNp? Uo„5ÂÛ#è}H¼µÞPŽ|:†F±È˜£IËÈN;ô+ ÝÊ"“Éd2ò•‚n¿f ¦S1^Åì³:gã¬HQ{%?t4ûP .*g@8‚—݃=Åtóàµ+‰L&“Iú_2!‹MNÉ­a5“ߣ¿·¢ŠºšÆâ$Þ{Ð;‚QhÚ>ž‡.Q6V7Æ"Þ/–Nºº&^ìý"2™Lö*ÒÿZV¡u”îP…—IšÊœŸD÷žár4ž ÑÖ·Iýl>IY=G^ˆJgä é!›Ó„ >¤9èyï­ãYaU+GùÑPäxÔè¡K&“±U1Ê·wxŒI¬òöVO0$&Ú‹sz÷¨Ç%ÿpýU[·W°õ–Øõþy|çÁ[±Ìš(¿ä84y @xOÅY¯±ªyÞ’ãã5ÑÛêîŠ –èL°$“IIßæhv‰£íl5/‰Vmw4*ùÛ Äz%y#½¬£cí?²}IÆš9¢‡ ­¦å¨wÄ­So4»ùè0Ù˜£mÕòNIûõ©·eœAK2ÙmŒBûÁ$lò_ú“ŽdœMŠ-ßÙàø5RÔVçg$Ž$jZ6ÖÜÛz ‘ä§ëߎš9Ž»Ulx¸?I|W•½_I,%]ÉÞ ¨Wì¸r¶¢c‘k`IL"“ÝÆ&tÒŸÄÁÒß:*U¶ÃŠu4q\a{û[lÒV]Ô{&[¸\òµIJþ1ÇÐ%ÉfæŒMÐãæ£,B'õQbËøî>=,Y—––EÖKJÇ$‚$Ë®×5ŒÒ|Le•þl‚~!RÔÙ[¡ŒMPžÉ¸ägïî>RØm"6i;‡ºIŽ+i/“Œ±ˆ÷ вª«5îèØ!²¨Ôo˸ÙÁu)¤eu^¤e±‰ŒMúÓ3‡Ø$*ýÛôJo`§MòÓÄK²LÒæ Ò4Lâ•üí¢’ŸžIÄ"b±`©/‘Ý*ýå -›d¥›ƒYé_æ`Ö±6xòJ~&±ÖbÄ$í:ñÛ2I{‹šñÓoÖ½GË"å•ÈNK}±È®Ä§e1ˆ@Œrèiü7Í|Lçhw ežWØðtJú—;h)jo@§Ü±lJùp9hÌ&c=·-Éß^b-Ê"cЄ¸xl¶Â4L‚Âãõ³Ôg‘Õ±¤=-ƒˆE^–Mèê]ïØØÎêúÁ›Œ¥óZÂ5Ê&e’?Ê&mO)ÚŽtÊ#O«ƒ(SþðdÛ¤·7¤Gí>Ú ig]Ú.©µY­ËU.õ­°C»ƒ–Ô§M _¥> ‹X+Ü “½:È1´“Ú.P“øØ¤±gÄ:ûk€'ä 7÷½³ÐÔÆ&^&A)éÇîAkäPç8› §ÕÛš°Ì1Ô ¾½˜»Wê¯Okûþ!’ú4Öz餾$¿Lö*Š›¾9]êäØQø¨c_³ÉG©?Ö6n š¼K¡šáÉË$åЄXÂb‘rÇ¢}I¬VÔÇ ÉRÔëHx™ä84YRwwÿ8“¬–•üåLBÛÞ\R_&“]M´(@‹4ŽY+7°Óîð×lbÃS»cÖNìØq=¯µF2-·¢þ,&9Æ&QÉ2qŽep[÷%õÑY­h&NÚqëHT´¹õÅÒЄðq|eÙ•úôÉ©2™L&ûz%Ï/¡8åG¥¿Å&4Øùõ ö xò– BÉу?n½g÷½Òþó€Nš,ýçÍ‚°FÐb™mš‹f?”7{ôJýèQ(Úigýâ4:ýJ"“Éd²KሎY®c“ã—Q¹åíº‘¬>ØÁò …!ŽÅIä2ÉöÃrÍÒÞƒ×<Åßv¼n%‘Éd2ÙelBkÇ÷ÑÙýèNk™hØÝ£>Þù ºËoI{š]þö8ITòG™d\îÆêƘ„š®e‘k·åd2™LvhéÊNÐeÑŸ£FÒ?Z”s;}×Òq–ô²‰w۽۟͆@Yei¼èEóIÚ’ñ׿oËÈ9%ñQn ‹ ƒíý<×{•îˆ(}éÉëØC°$“ÉŠ¤¹íVK)+w¤öà÷ñ‘Û-ÒYæ°å7éÀ{d~ÛQ$ùQw oûã%w£ýI¼,RÞÄ[U¹]ÀÆêR@“÷ô[[éqïÖ†Mc Fi™D Rí¨L&éÏ&ýǵÄj <î ·‚Oû|ˆ¤6°Sî(jQv`ÛäRÒÞ.c‚5Ú§¤ÌA‹î¢,ÒÞ³š¼É÷¨™O»ÄUöPÌ_F$èÆKÛÏøZ‹È^žI®‘þ´Òuáõ¶ ›ÿÐAh#¶‡$zôi¼0R9í·bhòÖ>VÑö“xY䘃VøÅEÚúw"&¡iÍše‘1ý¹ ißxIGR&«W7´Ñ´lõ² Mj$’þc†òÇçCŽ yhP‚fÅñfAÐ9êío2昞ʤ¾·ö¯÷¼a™’FR±ÈqGs,âwôøôbM7ï([àe‘k$¾XDöò,BÇ&Öv£¬!~ZéoÕF¢ÁÝ#SeôñòU,l2æ¨%LÇ–Hï!³ò³ZQÉ߯"ÈÁh§ÜÁ]©ßM_KýFA†l¼1Á°ÔìàE ¢3\öÜäÀ«âY.IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/CA0.png0000664000175000017500000000040513657750470017321 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>¢IDATHÇíTA€ ÛÿÏ|Á'ø¿……Љ薌èq„Öv¢ .@äQÂjIDATHÇc`ƒœ8ÁÀðÿ?Ãø,@vÐ0@v L~9t9 —C-uà¨i**ð[ ˽è4¹æ‘í@X¡+„ht}tw .<ê@\i†\Ò< ’G§éžI«y£`ˆöî¡ÛkêwIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DDpara.png0000664000175000017500000000244113657750470020113 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¬IDATxÚí][Ž1 Ëý¿z…Þ WèÉR D)W~I¢3$°»É2ÛCÚ’|» B~?p¿ÓûûÀýNGôÏ/‚í5 Á_¼¶×t·:½åZ‹Dý|xë¢.w…övT¢QŠ¢÷o#h‰6"íÚ~^·«%¶m0yD[_²×pbÑÛíùƒ¶ß‡Ã{Œ`ÙÝná“Âç-%š¨Ÿ%›A~VC4&ÊŠ IŸn¢FŸ©é&*Zúoªýz±h4Zi¿Í¥EI~ëA¢íí´'ñLÔvÛ9+õ­›³æ)Aq÷yäæÂ‘õ íê+æJ}‚p”©–¨ 9üQ·úÁVõ„µv‹Ì“_ËGÿ•Yá}­î—™& %R¶‰øÙßkùîæ¨Ô/Ó‡M9#‰ßÛGÃ&ü¶Š$¾g–Ê6tF¯ ‚ È$OÐ"-ýÓ[nt…tT‘o#Ø+T‘~Üv'¬’îõ$öïF¿Ø Tí_4O×{HIÓ4"‚e-ç™&òØ·öJ}»QSþH<Ö‹È ‚p5 ‰¹ÜLÆÕˆ˜'ýˈ"¹…VûÓawŒfµuwË-nפGyì5ÌÝѶà1}~3~ Qšg± ßnhç¿òÅ£Ùå·0QaÑm¬Bù&íð1‹èhIút£9^JùvYæå¸{ï÷RË·O+£ƒÂ¾.3}TÓD·œ^È{‚pusDãMèÔi½éCåI6 O×8&á…6eˆ>éŠ6mmuY-ý‰"‰/‚°g'D\Œd®öebõ¨>éo÷QÒÊœ¢%]«VÒJ S”É+kU&õG ƒ•UдË*|÷vfd–hž4ôEÜmK*}C„«€®ä8mÑvÚ²÷´Ð½@xÅ1ÇDIýe‚ôGÐÌ*iÚÕ-Úcè=ýQ\Þô#‚®¼‹  ¸»’\áó,@¸{ó‚ÉÒMÔlRA¸7™”^Dy ¸ýbѲQí©žô–L7MÑR?!¦uNê§Y‚° ¨ \êCl‚¦Ëqï]Tÿ|ô½›¨í;Rž²F«úÈD½¢åŠn}™yZ•c(¾°Œ˜}]^U ÑðrÏžùéUȳy)˃`6Ï$ŒàêvCÚyM«ù%tHå¡‚p+p¬7)"xi4-ŒËÿð@¹7A¥Ìøµ£XľöY,·Yz¢ÇÌ‹ôëƒéѳG/l¿å^Òý¨. kI¯ XoæÎömˆÕ®€[>( k–pùVº¥t›‰¨¼:F)ŒD4ÚÇã."‚Pl¢èÔ ô¦ •÷,À¬yJ×½V /½DiR†Ê’®ŽI[£Mü[õ"²‚ Åk1´ÅHèKKÎJÿ´-2ú’B½’ŸŽ mY+Ô’a…ÁŽ)­6ZœÎ;p4­p6*÷W^¡·DQÄÑ–E%&is?¥Zÿé|§`IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DDbc0.png0000664000175000017500000000034513657750470017635 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>pIDATHÇíÕA À DÑÛãxoee6D B§6 .ÄgB0âQJDÖn˜–öv•̶’µšÂx1IDATxÚíQnã0 D{ÿ¯½Bn°WØôF]d… ôR¤›Ãq‚™¶‚0’%ùiLª__Òµõ˨5ð·QSÈÛ?ÙÀ㕦NþcÔÚῊ?z´æLàüvº4zÝÎßy Í??¡d?b³×ض{¼ó1ÜîŸp°Å7#Ò‡·ï?5è|àÑŽí<¾¿âLžíß÷0£]yÿ={'`k:~NI’>‘ÂüÕØóœCK Q0eÞœ"ô‰:¹€2-ôD´KÁ[§­C|™ãާ­b¾Œ§Ð|›º%jI’$ä"•¬Õsñ_ëÛ© ¢vX@(@>O ¹éT†|ö6çXö€—m™GŸr°1;p°G LëêK ®‹N§ÖäK¦$IŸÆ_4V±¦9ÙŠ ˜/d»‰l°E_¢ÉRÌi«ÉDõSh_Ä(o|4 I’tÒ–hMÇ % ÐRnr¶&åV <­Ê·žHæaž:ך,HOlOfª8K’Þ™FÈÔ˜PvD.´"”–Eè…þg``ù ­`’V"±¼(6b®¶2à9îÀ Ÿ%é¸þˇ~úÙ¤cIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SC0.png0000664000175000017500000000036013657750470017343 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>IDATHÇí”Á €0E»ÿɺ+¸ÕàÉoPLÚŠújáJMiòo"T¼AÊ|ÂbD‚†¼¡_‰Á¥ÑMدð0Ò»8‹ý̆žKÑUâñsßÈÔu“ gÂ*­žó»–ΊÑG}%bÅ.Oý- QG)ï«Ìî1ÎÏ~œ“‰ÇëMøµÇ'ÙîIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/CA32.png0000664000175000017500000000515713657750470017417 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> IDATxÚíQ’Ü0D÷þß¹Â!Wȵ’ÊNm­l©¡=3ð9Ù[–ÅSK‚6—ý¬Èåç—Ž¿¤;þõe£ãÇ/EŽ?+rüññ÷ïwƒ7òÿ_`ÏäyÓž·hß_æynϳú®v¸èõå"·t¬]Úv|ü=èxì½³·unêñ_½Ýíø×`c~<‡ö?þuìçÇëûöèþؼ?O s)›îØìÿ/}«ZEþ/ð`9¾á¢óû>z/ôÉÚÚnF^EüÕä$¯« %—‡+>…Á8Å\¡W°‹>[°'Ñ'ö4ô±™ {ôÈowü‚a°'¿W›¶`Ì5»‹¶À.eHÐh+óš¶ÚÞ™¿J]Jþ" <ƒÃ8’Ãï*Öž™ ‚|^¬Ël×è½Å0 Ðg)újr“ßqà­ÛèmÞ@«È>>ŸM[3Ì[êRb’Ì%É+Œy‰É¦­Ø{4áè>QT;v“yXž)µµµ•—€À*Ÿ?ð‘Ï«ýÉËUÀ°çAùÄ`ô±u£*¼™ìòó”)°§AÏØ{ýO¹øÖ°.UŸ9}.KŠö°`ÑÖòîÜý±›Í¿]I^0èÑhK3ø Ú‰ÚÚÞÓŒ¼"_, A/¦ýŒãö"ò]@yEDКª½â¤ËM  h£O:sI®’:\œ…&Má‚ ;#ôŒÏú[ ó4è±iëøÕ¦é¹Rïc^\t}ÕxÕÖ–@Å=¹|Xˆº”«aòÇ#OôÕ\k{}üñ{Kåóm޳”½-äÓY2lMUCŸtæ’ëjéÌ%•žÑYú"•¹‘?}?Œ+Ú‚®r†1£­’Áu&§•ŒçM[m¯brOH½ê„Ì>áÐ.Êl¾…¾3ýQ,üv¯:Ôœ¼Â°'.΃= }®˜ ´È%…¦ÄjÜA=º<ñ“k§E´%;šü² ·¢ÑVÊH®/^–ämm¯Á\r'júðI ÿªYfƒ¹Œ¬ž7ý†‘Ï^â³U¢E}OFâ+¹É‚½€cMvñ8ÖšzKïI?ç¢55ákN:{»2g$ &vƒ§Ó–0:¶µ-KO„ù‰FŠÖ$À;Ç÷µŸÒx¼{¹%s¥PfzSkÐSº9ð9Ýb¡ ™„ ÑÖöÚ´E›ÂÐ&m¥ÓT @‰¡‚&EÐÄšÜDØ4ôI—É"êì & “¥Ú–¼ J°hÚjkKŸG•,ÕmN lÇТrâXMÛrCÛdô0Ú¶*[ïIÜHFØ:§=½'Zom¼ÑöÈ›HL$æjÎj{m º•ò•ö|E‡pä±#Y!|ìH“`Ò³6ÑŽ–ÓI§ôø ­{$˜$½Å¡ØÒcÀ;Òàà3l~€˜Ì5mµ5yòW⥋’Íhéu®È zÀÌ“PÈN1¥)”ÈI£frSs‘ƒR¡i_mQò·ø·Jw·æž–Óylvpý¦­¶¶"´K¬$QšTÙN#­UÅ…U !$Φ¥ —Q6%9:9ö€¸&9ˆ¸O)¨åýȵËz1¯­íUPJ‹P<Ì.—6†Ep¹´Òq¶“X^Zö°´Ð#­´%±˜§÷YSh‹V°umbWzš“L[ xmÏ«sJÆ4bÄ0yi[´Ól[£ôL‚±˜k˽¶åF›K7‹Èg;öÄìe}ï§¹ètlã€ßqˆË¼zç/]Ìs‰‰³®îºŽ½-¸¦·B[EŽ{óöÃF‹jmM^éI’x¬>Æf‹¼ÈwuÜjN^)Ì%« A¾9úØÌ€½}ôÙ‚=¥€a/r9ï-Âô?m‡—¦­÷£­ŽØmM^‹d“Øñl%jN^°5‰«ÄgòÚD> }lµkù< ^sæÀÞú,ž_½Þ?VDÅc?sAV\c´žÆ5mÐV«Zm¯GX6¥$’Ò¤§‘¼`Èg‰”äÛÎ$SÃk)¥–G´s¬C›F^Z®z𺓼EìyþT¢ØR²iøa¬úØì;¦¡£ ÝÐãa.æÉ”3)€=ÐSº„ jî;V·½6y¥Ì eØ×žIò‚Å"MtGì1 À·kçGÞШp×~/7Kâ°{‘;=§­H/O¤”Â"€<&Ïô $lö€ÁÞ^ñÃ%æZ£-_®AóÖ†@‡"ÓV[Ûm0(ÅYqë€`êüÿ—lòÚ.m’YºÆ1nùü£±LâP–=õÌ—’GÓ™«öæÌ%7ÐAΊDw4mÃ^”¶4¼]„žUmk‰¹öæB˜·=„‚Ó½«­Ék€ÊøK¯,ÁÖåHd“W‘~/·¯'©|v;;†¨|^æš­¯&3Wì«5 {r’bs` ’¶§ÇŸ~qýXBç d#‡Ÿ8êòjvY8¡-QÌkk{f;ÏzùKîàÑÈ+ý©g÷¼‹p+rí-]Ýe¶öR‡Ñy’|ð’®Í\ØÓÐÇ£sij×¢Þc«>ÚÖ¹Eè9Š/ÞŒ]‹ïUK›ý¨J}ÚòAÑ ªämmm®€/ ǧ“—=NÑp‡05MÊÛ½B^EÈ7Ó-}O+¥£{.Ç{\1×Y` 7µÏñuˆ w1z¼ À*ÜHhJÝ xÌ›q¹ôv[Ûó™ý!–êÓÅ6ÿœ¸ô¹ îe$ÞZwZ‹Ç©rKæJ¡ÌĦÞï\‹°÷4Ÿy¡¬OPƒD[Ûk“í†J¿fò4ukbN“"öÅ—EØ£ÉM4,)>ˆ*k¨&:+ÊÉK„Ŷ¶÷æ/‚ÝFl[ p¥PÈ[n›Œ´·ÝV\Ò-ÜH½­¤­s^Ú*Ý,¨5{Jöµô ¡7Ù[¸é·­­É‹xгÖEÇŽh­hGËlôIEI£´‹–¥ÉºF€­­ìû̵{ääoZr;ù ,Ýö-Ú´Kð§ÏþŠRÎßëóÇ¢¶¶r»QQø[×΀U !$Î^#/°{£ì¿IÉ„KH¯1—·.÷;)ÿ·$EZ‘Ù‹Ê:ØÐcÓLÍ#–îðvº†¡¶çÅ ÷ /Zñ0Z¹4Z8]tòÄ7Ø^>B@ }@°G+ôH+m¹SÌ"&Ê—JçL^ÚB&x\+-Qk÷ó¢¢¼mmå  €ŠøKŽÏ¥äEH‡]oßVTí DwßúAÎÍ\ž{´™kö®ÿÔ{‹Ž=Úìó[Ìu¼E[R`ƒm”B“d.ðʱ}BU*{‰´56õøž‹ÂÆÈY)˜×†³{n_ {8ÜQIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/GA0.png0000664000175000017500000000050113657750470017322 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>ÞIDATHÇí•Qà C{ÿï]¡Gà ½V'°Ð^eB¡“æT%`'†Â¶ýqƒ½ ¥ü­Q‘…’¯‚£à ÞIDATxÚíkrÜ8 „}ÿß¹BŽ+ìµ²µ™J…°[ Ù+þH¥Æö@”øøÔ§]´ï¿ÿ$¹}ûÕþùÕÖÏ_Ÿ¼~ZØ×—™ïK[?)1üãWû´×OÝ_jo ºÕ?þþýßõß'Ê­ÞXQ [óºIbEýŠ×ïüXšþW¿/W0Œ>á†ñ'ÔðúgëX}}þúd5üú„ÿ•dx*¯Ï˜¶>côÓõ{ áõºÉõs;ªíX?·÷róTl­ÉµÇÖ¼í1zö›…bíÁúu¨Ç¶ßëÿ?<3õý"ô¯ÆŽÖðõ™½¾èÙ¿§JpáÔÌ¿þÿç_ûÓ§=-•¼Ê'¯à—*ÌÉ+¸\(†9y…Áf¿t‘W`ñ¡ÏºV#ˆ82CŸ ì!ˆ9‡½aK –CtærÀž‚>œ¹Â°w =v$Ûñì†=z8{pÌ»˜¨zÚ b‡¶ÒÈk>ˆ¶’1ïoóŒ¶æzÚùK ´ç/Å @«™0yù8ÄÒV˜¼tùh¿SÄ6ÆMW{Dó‚â GŸòÚ|B.7%l ôØæ¥Ìͬ±›ÿ®÷ï´•{k¿¹¶… Q‡@zì'#€ótèá´„=EbRhëBFôBå¬B̳æ9gúbžöuÚ‘|Ôc¾íÇ´eb ò Ÿªß¬ "¶í ã¯`ä%õx§ø˜ëȳª ½Õö>¹ÎÕ$BþÓ Œ.»Õ§Áž"» 8Qr¸6¼¢u(ñ‘|±ÈXè±€ÇiKâKzl¿‘£Ì\zßéæ!‰ ©Z%˜gÁNÉ]P;=˜÷Y1h„¼|š÷Ý$]Ûƒwèh^òr ’`¬€¨W°÷vCDWœ«yi”XÞ°¤au.¾_9ÐÇ"zõFtö Ñ õ)m•ÖÝzé! ð¬Âut“í­VF¬}öܰ4Á,ô\ÞwÄYÇ¿cN#èÑEµ#æ²Üé¡­“ˆ§¸œVŽAŠái÷Ç uî¶3WÓ(=Q3ÖÙìÞBv²ÄõïÛ8¯£mñ»i\Rt;5׫¶;\v@*Ÿ{eæäe™Ën ØCèÙ+{\ïáÞ5ö)ë=Ü|sYèAúzhž)=<¤(Á¯¶Bê1Ÿli›—XÑ¢\ËÄô´dæâÊöÎXI=dãÁ ”Þ`8!¹€Ìï+Ê–"®§}Wv8úú𯰠äÑ2©H-V;îÓh¶·Ñ’W0˜ fzì½9‚=o·Ý$,,»^·¯…¦´i¶BE®p¥1‚t(0ñ"Þ‡Xl~©|\ÕmZDÑ»dæé«q9si°[çWVºX B?ïc[šd¨rBBLÓéLg\ØoŽ>ú}r\º½\jA»¸cÌ#ôáÁÜÈdPË´ìÁÉëÈ0—]ÃÜAvd˜ïNÁ!† §œ¶”!V~‚O­Å¤Èsì{›jÝ0¾ÑÖºOø¦¾j»º½eÏ•ËPÉc›P9æáSçÅ/j€ K€Z÷¥Õ<êëò)û1M-!›2W e–ÞêÑÁ50†á%sx“Øo•âí0м ¼´ ¼¦¼˜IÃâË€Ü4(° IŠc"ê˜l<,”»œ!7rÿüngmuã¶:®[]õƒÁ íá(Ã!7#AFCaUcdüM©0tNAŸ’`Á[„G¶„òÞ‚SOÉ+ö-.âdvúj:W;ø•Ð<’ÒxgìØÑÀA«±£eÃ‡éÆŽ˜´7¼üˆè-ŶæÐ£ËSAÌ>ê½®Ò·À±öø o%°•Dÿ í¤0Ikꕱd3'éuòIûq,¡ÐQöÈJv[T’F¥Á^kš¬[$Ó¿:!Æ…Éßxº»«…ð8Ýzü@OBJCdÞ»E&¼S ãÎC[7ç¯dòjJ¸;–b¸5©òXéáÄÙM©ÂÇ’£¥ƒ·*tS|Þoû8ÒRþ9(ëà…žôB>èIļu$+ypçiÍm °Tk)­±âaåÒZ Ä —Ä(he—ò²‡ã…ÛK[*ìQZÌÓ+¸¤•/õN/ت²Gz‰ZÕpIQÞ¨°þ´§Pkõ’ñzàóò)Œ%$°é³ÐËä õvÃ>Q~íîC†/Ìï4ëøqäÚÄ®#Á°5Ðçöö‚ÐÇ =D5Ø#úä„2ØÑÖsé†ÑØ.‡žCQ-=‰¢šOhµ—Ø$O=œõ´²üešnò]z²äudžN^näã¤B>InB¤ôØ| ú Í y”q0_8y!7n@ß»F¹°—‹>AØS&[ ö6†½^¦˜¶µ±¢æ´¥˜Â§­Â„aœ¶ ™„ÓVSZLJ¿žV@ˆ¼Òæ0 D^Áe‹)@AÃ^H9\(ù$œ«|Aôáj—‚|AôQ˜+{è©+ÌÅaocXßaôqÀž}aïÚØ‰?1|.f?ž½¾È#è‰ÑVóVè‰ÑÖ‘5F[Úõ´²w…¿Jh )@+™G® N^‡bCN^‡Èw @/bÑ^’Àf÷á¥×îÑ@ÖŒ O—vÑoï|K ¼¥¥³°†wg®“á™D_d#ÂŽ˜K¡-ôIð\ ‚¯/òHbòæW;ºÉë˜_Íbžk_Ë1ïá¬ÿ/µr–e®äx.@Hù:Ûö¤øÞÂÈ÷.Áàš!ì$cùö{ŽB^<Ü*¸°­«ÕÚo¤s¹`Ï7踮Y>h9„ŸpLÈ?‰0Ï lè˜lp6Û±Š£ÖŽûÊ‘Â\îs1\bâ©ÂŽ0KLŠ7hyÔtÚJɨQµž,¢O aPs©ƒ½…¸,ÜTÙéC©&é)ˆ|ë±{Š('×û¿äã“Ýê=võFN’#êæø9Î䬄ÊAÊ伩ˆ¹ôo5ºÉ¨öÏð%V>b£×ê\Êe9È™XþìƒÏILœ¶¦'Áž=:m&ØpÖ·–?ªw+LüO@[à•’WíÏ÷”×bÆxê!÷^dÕwýƒÄ†Ò”ÄŒ¼Ö‹N©ãt<Œ Ž]t¨Ç;àMR»x r" oü^}æ ®iØ ùQ}EJÏÕ Îûd³‹Œ»ò‘âÖÛe¬?z·¥\õ‘˜x’Q~ ˆOb±’ø6úÐV5=¿åkÏ\»(˜¤a‚ˆW],<ŠƒÈ %Ý.‘]PåÉäÙŒ<ʈ¼VäKžNœ@Ö^§…ÚgŒd6÷lÿ+Ìu{}”z‹Hž’xé=–¶¸zôbg=ãÊÙÍ£4øÞºE|~;Ü™új¼;IRàªW¦YS}Æ1Ì+,C|ÅYà•2sYÙ)¤Ê£|+<Ÿµ­õìyٖ¾¢•¹|±Tœ…½çä@>4JùHFÌ%Áwrñ”G†ùE(†Ñ­BZFøÑ÷Óý‰x¦–w!Lƒ½Øb"ýÍ_>dÄ“~ànܧoQ ò«´«ÛÛRö““Wë ËÀ Foˆå‰gP€Yá*¶‡¦}É/îÇJ|B¹)s•Pfù­\ÃÓéÓ, ­KæÀ&Ѻ-ÞþjÆÛ ~…~i+yMx1–"Ä—¹iX`‡EÔ›ÊÆ·Ê[]åÎ[¹Î?}:$)8®=Øø•ƒÚŽ1€‚Р0äf8Èh ¬jí÷@ ™—ÈÒBçNh«$Xp8GËÅÞâpÉÁç›õn<Ü®3Wkp\sƒ§Ýš¼Ì§^iJ6sž^!Ÿ»—zB!»¸:̧PÒ“F!™Í4Š£Oyš,Eï)L ÆG@y*´ÂäoJ¦ßÂtwzJü)ÐS˜ÒPg®¢$Ž*Q¥­¼¦­|ðK¿¦ÃcI•‡ÓH$Î^W¢ÖTáQ[’£sè)L¯3Wa|Î\Á”ÿãEÚË:x©#½Å»ù¶ÒûÜV¬d?›Ê³(—ò´¯Ùš“2ìÉ«°”Öpñ°ricâvÜR³Gy@n>Xöp¼Ðc{iKd¸­˜çž=Ê—2èi(Øz =E%jߟDkQ^¿’Ë?íiíü5P2žKO…ÈÇ¥§Bäã1=Ú­>€¼ÈwB :òAÃúµsÃvó'°A$°qØ»]е+1mÖ¼dAB[H¦¹œë }ôà أ,lø8Âòݘ‚yRt€=…z›IDATHÇí•Ñ À D3¶ã8‚c¸•ý(Gñà°”&ÚƒPÒÆú85ûŽj5Cçé`½Ï@ÈÓA€€§Â)B°³ér¤;XÊ Â½‡ïé·ÛPmˆ÷ pµÎ Põ?U/ºbCÆN2¨Ûð¬¨ãs0 PõÜ P­w’»€áC2«5Ü¿gÝ•?ûßë€~uaç寪Á;–y3‘iIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/AT0.png0000664000175000017500000000030513657750470017341 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>bIDATHÇc`ƒüÿO˜¤¨®ž2¥ºb(„ŸDVI'+©h=9VbZO‘•ȱHÈ\zéâWZLLPÙb\‰N>¦SP“—i’¶‰ p2˲,@¨ÈàJbPL¾<à‚óÊIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/SBpara.png0000664000175000017500000000042613657750470020131 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¡IDATHÇíVÑ À ìÿŸö ûƒý¾Ìqbö ;1õ<³ÖjíÇa\ ‘S¼0nE\h—ž) Yñl÷ t;Ü]"V"$€uÉVyð£ŽðRÀþ(|A.ŒyÛ[€…1BàUŒ÷>Û9v‹Çñn8ýÜî˜ÅC^æ™['*`ºË›S­ÀôKœþ#IÌ”9¨ÓþêÊ\Ê_·~>õæ¯ÞÞÕHIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/torp_det.png0000664000175000017500000000052713657750470020603 0ustar jamesjames‰PNG  IHDR -,âIDATHÇåUA€ Ûý†ÏòúBŒ1„¤Z» Cbä² ¬”®L³i2+ÅlžÏXça€e9â¶•²®m< @›W†ã½¦Ñjƒ1Xµ(«†'±²c”€È *í€WR̤VÏÌ:œÍª5Þééñ ¨I¸üÌ7n ¶±2c¯~Á73\P€ÝoN“iÀ˜…ýîCÃ;#^Õ­ë  f@ƈj†‰ ˆ2b‰ê»Ôˆ%²}²Åª"¸˜³»;eºé‡×™ñ¼Ú¹ÛIú7”v¶b€Ãý' ìÕ‚>?hEºkÁG ZÒIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/torp.png0000664000175000017500000000044113657750470017742 0ustar jamesjames‰PNG  IHDR(fÍìN vpAg(B‚bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¬IDAT8Ë­”Q€ D9`×ðXÝ!Oh6@¯5'~Ë–Ì’m›YkÆVÊõ`߯³ßÐ?¨µµãx yD“9J@ Ï„$2Óžû÷y A¤|Ž/d¼„™ÌˆHeIZ+#¬—b¡ýÛ J(Q©¤ÐÑóç™Yo³Ï3ƒõ£¶Â†®£TFMaZ)rvè*5M&Î <’JÕ(`›Åûúî¡ðßó]t¼e„¶^ŠöIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/BBBC16.png0000664000175000017500000000303113657750470017613 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¤IDATxÚí][N$1ãØ‡#p nÅ~ MSÔ+‹-µÐìÎ &NìTªòòòwðööòòù‰_·ûøx$´^·]Öµ°^·\-µZ×Þ²í-¸_í-øúúHdï{ëÿÛ±ˆ,‚cˆ!ˆ~áúwDPú\AÔ÷öŸ¨/¦\¿Û[r'šöðH×µÞ·ƒeQŸ“¢Ï§?$Z‚åÉ#Þß×üûõ¾ï×¾ï '˜÷¾²ñ’ ¦x•qÄöqpœ™Ú½J»Øgd¢ÚZro¹1& éÃr%Í»Ê)3OZéÞæM$ÉßNlú$/’&L%%íõ"i¦IêcZ/’N ÄmfÉ&ñe“Ô¶V³{2“-íÇïQh¢©¸Ç¹=äòƺ»4—§ÕyûLTØ-· P$Ë$9&XÑ’®v=˜Wú‡M}èVjã"é¦Iúb$õ­‘¦ô5—@xç·áYâ#bÁô[¯%–YÒŽûLÐn’®WÒ$FÄ_Ãéð&*N7E ½]nõƒYE2OÈå¹o™$ý‘ß?'…ÈÜ·™!íj¿;î‹’}”â${K­4|+i$õQ‹•Gš¢F}¨8xøÜ’ÚˆR9$‰ŸY:mi´$ÒNl !ï*AÄí^ÃûsÌÔ6.¤åõ&e*Æšõ€þ0´"{¬¨%É/¹Aé{D¢Þ‡Bja”=vˆ-xY¼è)7^;“ApEaøÚÌøÕ­]VIsrz,Ò…cVXµkÓMDí«üe9íHIŸÆIÒvbJæHk¢Ü‘&mÙk¬ÅèܦIºEÚ¾íÌš9ÂãÅVâVŒÍš%‚Và6¢Þü¹¦M8±Ý›hwž#•“NÔºE>½“¤¨‘@M¯iä%Ú–®áÍ#)Ûy$eâhóIÒ[T»r€údz¥ ¯Ä/¯K¨5Ié;.OŠ’ì£Â˜"žcs;éâ"xI¤Í4m(„ø;ìe\ÂÕŒµÖe[!œÓ¢œãÊš¶c²æ´·×ÝÒ–·j÷¼§¶º= ߪ ËÌ’µ…¥íwí-(iºµcMÒØò¦4I=HÑû‚.Ö>®ÜýøÆ¹0þÐ Dx̱Rßl;8EûðlœÓ‡g\®ûø¤®;‚kaL Ž?yzJü[­@[Ë!ø5¼<‡)Úæ^(4Q^é_f¢ö/²z“ò³!N±(?uCò&mùÈHQ—oÓ³Jý6Ó„ú 6ŽR.ñÇxIâ·ïÁ’$þ˜3ÀÆy$åÇy‰0A¯Bb·CS\ÛRÖý4»Ò.¿•Zb_—l¢Òe—×<•ëB+±ôdoѦ0%e=HõÒr´O«öà•pbRuë*Wx‹!‰¯ßÒŒ:zêÆ)éñ zl¥F‚ Š•÷ØŠßãj£Ù€Vý­&ªÍåýìQž=IÛ’0R=mÕ´cÃÜòR¬N[+\°jël¥% >„”µÖƒh#Lnâhg‘5S[:ïÓÝ’§å§ÒžÞSÍ’»ADŒY[äýººýá"ÁºÃÜZ¼)L°¢æÚS6~¾#Nh‡¹µ¼ÕñÃrM Žíƒ×<Åÿí8ÈãB‚ ˆØU®´âšõÁ…ÓVI<¨ K5+¥µjIniõ¤ZY{Wùµ‡\„AJ¦÷ÆIÒ”µt‹Ê"M^‰/µ`{íto´³¬¼ê«mnnlĽmæ¨"NÄm ;iÇùFIÿ]a­ ¯UÖå&*ª®LQ)}WR;ééÚªQÚ¬ˆ2pšW’F¹7«YJ/½†nu›«Ó&_íDË%¾¶ÄFÛ¹M¿o®}®¢ÒF´}À¾ÞsÐÞŒ-!Y€1Ç]SœÝžhkÁq©•Þ3!ÆŠ_ÑV›ÒF¬¼@˜·ÄÚu´Ó噕`y­ti–·Pbºý|Dc©Iï-¹†(Q‹œKÈøæ×žIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Kli/DD0.png0000664000175000017500000000036313657750470017330 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>IDATHÇí”KÀ D½ÿÊ+ô½BOfS&M'+„vᬟ|´”¥k}€7IDATxÚían¹„}ÿßï {„½Â»VHÐ0"OM©¢DÙ;cNwKª¤È;6~_¿Ô×—ÿý¿~ýÿ÷øjÈóúó{Û®ÜcÈó=z}¹ÿþŸ† ¯ÏïMÿAt«Ø-þøøóo4ìy=z‹¡Q‘¡YÃ;roüüþs+Ÿ¯Ù÷ùüAÙëªüuÑÀñÆÙøüüy}4ðy]}Ÿ°ã²ñü|4äs–þýýÞøþÔÀñ“0ÃÆŸ£YŒ®ðøstçà³® 2l¼‚ÈPtÙ3 âñ Œˆ]At%Çï?òëÛkƒ³Wp4ȾWÏÐóþü‰Ï¯ãCoÛòâ†>ßÿ1ìùŠ~ïŽ;.›t*›Øþ`ô U6±-ÈQU61>PM±‰aÁž“üã^̰Ý@—ä·A“êUÐ DŠ)ë,“¤¡)*ùU&1BSLê£Y‹fï44E¥¾ª¤UX’—7UêGYÄKªÔϲH9›Œ?c‘e°ôÕп±Èe’;îØÅ(YéÏT‰ÍðYé?bd“9eXÄÈ&Ù0Â{ucìh ¡ NOÜ„:ÑUÉïfø˜äWÃeb *õÑ×Yªƒ«¨øŠ¾f‘2h¯¤aRŸ)è°ôW¥>zý«P„¥¬ÔWYÄMѰC”EäÐ׬ÔG ² –¡*ƒlËþ¸ãŽêa#t1zL]ÞþèòÀØÄO9ïü(X ;ï äo¬±Iø bõ“سᢒÝbt'¦·¼Ñ0&éÕß›ž³j| ÑrhŠ:Ï™\àâ8N‚q2¨³V^Ø‘ÔG¤²H˜æ¢R]I–žÇ%’IÔf¹Ùa‰…XK_Kúqö§×E&õ³;“ Ú˳ˆÙ0ÆjÀf;DS î¸l’ßYš2I›Yèö-ëá´¨À.áØÿGçMìrk4T•þ¶ƒ/ã'Fê„M$XäizÏUÙ1 ’iihb’_e4©Þ}5Ó(ëKz÷UCË™I}f0»r†j^}õPAY†Ñ(õÙT—£r± ÙjÛaXØí4Ë™„mܠņeÓšï8Xv,·—ô/3§oÜ[F¿0"Å$¿úÆhK³omQg9òÌÚô"Û[Ñ-Clb;JÄ1Lê£+o‡¦ÙƒÎH, ¼pDÆÂåËÐ(õ‘äWã#åL¤>+OµÀàדŵNÚ#Oj4´Íȼ`å°”Ýc·3Iüe3yv!(»ü,{ø1÷¾Ï0o¦Ø.ý™S½M¥2v*vÛ•T%öN¤?»¥ª³œéÊôlg’_=ðÌ ³Åê’VÙÄn ê<¨&Ù TÕŒm²0©¿E¢“e{m#uÙi»poÈœóÙ´lÖò”›ôbã<›;\·tÓ3§†)–ÍfUúo‡%^s³³Iÿm[\Tú·S1£¡ìÊÙá)ªU÷ÛrEým˜d9Õm¼Å‡L’¶ËÌ1 õ1[Ý1b¡­Ü:V°Þñí°ópoëúhëÆ‰Þ6 q@ §y(¬}0Q•úÛ±ªÔßÎ"Ǥ ÃÛ°Èqi)Ÿã2Hí#ÑÖvéyíÛ¥ˆdÛ4M¹m¢÷1©ò4?®ÑþÀ‹êƒÙvd(*ù—º:îØZ»ƒêý¶ug–íÉÇüm{HÜqLƒí… (¥Ñ¬Iûr.m â´/)tLQ¦öe­ÚC·z{iµãŠÓµ+ï§JýlÃKÇ”˜÷àã$~{¡z%þ äìb“ö³Û•o_´Ý]öžÁSXºØ»­µm½€äV´yE94µkÿq\•ì.kA£>ƒÛšø¨mô-«¨ Ò¬Ô/k$å–úe­¸˜¡³ò«ÌwsŒÄ¿,rG—8I»Æ¢í[³¶knÛ¾=ð1 –Û´¨nßä»}›ôñV´k4¯^IôH &±ùº™Ô×ÝkÚ$*sšgYÄ/ÉI}Æ"£ô7<›9©¿–< zº›ä•øwÜQÎ$ÏRôšQ6rþ–þ,,¡xl›ç U6)‡'–èÃR¥ôò/fÉÏ2’›„ Dn2d(ƒ(-x¯'©¡,üÀ…+Ñõ¤è3 FÁZ`¨¦¤ãG&ç|ÜF§¹Æ"vhÊ*hÛÑ —’f,b„¥œãº‡þ»¢ÆW˜Þñã™düª2Jyg”þˆQÊX$*ý£l’68êLGŠšr²G0?X~ÌìÁèihâµ.c©RÌ@ÙP죎ÄfIf<Í%h 2”Iþhz¯¨™äŸ•ú‚Gö½Pe¯»©Î®¤‹Ø™$k ›ÍÛ¥~AàÆ#õnrƒÍ¾6aŒË wÜökFA¿·Ð°×a Ä&vCUéŸe“ixR¥”M<…ÃLúG¯`ž¢’ŸÅMX^!?J$:ÑU6aéy†ˆSLòg™$ M«$¿ š¢Ë‘ š ³ù1®¸´#j Ê"QCmWe‘m VTÙ¦´UiÓäì2Êw€u±ÉÈ(eË “þŒMl 63Èåõ·8ëõ–¿’˜ªô¯Š<Ù$¿/‰Â“MòG™ÄMìÙŒ2‰ MÐÀ¬úˆJþ44ÍJþÐ3È«e¬ýñ~öÎæ~Ù¥¾‹El°4J}‹ØÃíYäÆKî¸C´*£,gæõÅn(KSQÙ¤ °£I~•M à)&ý¿–kÑ΄9H…°s&Q6Á¥;äW[ÖÈWr¶ü(RÔê×ò"ÇÈ@\- Ö.Énû蜊I¢,Â^·Õþ`R6÷Ëv˜íyc¿µãl ÝKh¯ÜvXº rGwéߎA“,;O¢J?)ì¼—þÑŒ$#<½v¦³+§Öã2ÀÓ{Ueõ8‡mËwŽñJ²8É4ÍM"5v·ü0RÖj½®².n –P ‡­³­‡h6ò8EWNQ&™®ý¡†ÔÆ*vXRÃÑ´<›,³(Ë"…=Ã<ñÛ!ðŽÇ"í:¡²ðcãÈ)lXdX4,aƒ§qÆÏëGòú_žÔ…y÷ÑÍ’.ìü¬Ö_U+œ-ëœ-¶¬Ç"cú¶[Ìn-ZfÔ"Çié¯ÎR'‰~4荒R}FmÏ ;¨,Â"LahŠJý,‹Ø«àˆYÑaÎz›•Wå°ômYäBÒ·c“ Œò¾ ŠÍÏWÅ$jÃiÕ‚"è,ÇŸ¹v7¶vÕØdüÀeGŠT>f9\ei{Ì`v1ŽÇKÔCùËÎ:1Å<{ÆÉ&ù£Lbƒ&Tø] Ö×E¢¦…)Ë4RÛ‚°>ñé-2› …û¿›Á‰~b{Ìݽš|;P;&iÚþ²È,´y¦ÄOÞ3 ÎL/~¸™ôg;Ä2ƒÕ]MKYf0K•bÍ.–ÏZ•MFxZ¶Ì¨Šz¬ÇP~8 =ƒ, 3­ÿ¾Êª×ËÌlyƒ2ɯha¡0Ù@õPcl´;›P†e´¢™½á<ºÅêí®“餲ì‹+],N.Ce­[ÝL²–xÁˆí r!éø±¬H{l¡fL¶¼í³¶|Ïu#€}ï½rlÏݾÅE“Ͷ]QUú§á‰ÍBuÖ2& C“šÈ£%¶¨5Ýb›Ôg ¶ZÖ`z²dsµŽÚ—Ù-«š\ w¢œßÚ­Ïúr_ÉvÄ$môb[&¹ÃwK7=sÑÉÑÖÅÑvýcÞ¬íEÜÙ˜m{0 mTÌ(³x¤iÒ‰õ,Dã%åŠúÛ0ÉrªÛ~‹ÛN’c–™o¿P·ÛêÚŠ…vrë8ÁzÇÁζà~ŒëãçÑr÷[[æ1.à¶Nô¶aˆc9mCa®Y_Lt±ÈvX:. Ý.%@e‘2X:8-å2H-``óPXÛÇÝÖI•úËIE¥þ¶V\Y&ÙÐÌ,ÇÃÚÁÅXäJó;.D}›í›ÛÓ¸mƒåq'h×¢šcb“&ߪÔßÖ&=Ë$ÛÍ«L‚„+R?ÐÀ¨äGܬ¥œàá÷³‘¥B!Xbù‡å Z=ý…fÿ´ÔÇè×ß/‹,ͲȲÖ[Œ16nr†ßqÇêѰ„î{6‰lc“Qú»ØÄO,,‘—”Iþ(›”ˆßpŽIÊò ‘’fðÃZUÛƒŒ¬@š¾|À¯ÏžÔ1Âò{†¢e X‚£°<½6%ò°l·qvã´=Y%½VÒQatgƒ¦lØEšlÑM&õU1ÂÒëgAMýïÀ¶Bh+üÊ*‹ »ãŽË(¦8‡­|iuXb<©a‰mð¤æêÇo±YêgÙ$ OnE…'j`ö“«"*@“Gò³@Ž M²óœ}òèIdhØ@&õ£,œïuS“üÙr<¯0(Hùy¸×Ea)œ»•úÛÎ.©GƒFai{½é‘AÊ7wÇIIÚQµCDIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/0000775000175000017500000000000013657750470016157 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/ss/scrshot10.png0000664000175000017500000000754713657750470020530 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>òIDATxÚíÝ?ç`éh©¨ø‘P¢[¤H‰P$ê´á$¬hiòÒ'‚R Ý:ß‚"íú†XçÎúØgß™±=žYž§ùÏzÌoÏœ÷ϵkÀ<Ý»wûöÍ›«ÕãÇ·nݸ±Z=yrÿþÝ»ÛGŸÀg90âvEÜÿöíÇwîlK~¾OàŠWù˜ƒà?ÿù曯¾Z­ÎÎ=zð ;¾~ýË/ß}WßV©,\«¢ÈDÜŸƒ#n·‚#Ÿ>}öììlû~ß Àä>|Û'à8áW½‹\aä ©!G«€iï`&"¾þúûï¿ü²€x<‚$ß®¡«L~ýõÓóãñèÄórÏ$îùòùó/ºŸ$3 ªâ¨%_ÚÊA ˆ€ÈÍõ 9Hr0ùæN,*„|)ª †ªGRÎÊAѺƒ«ê¡Äûö L¬N[5Ïó1?ž¤Î[U8ùñêv®LâRšoàȪ}5¯£u»5*+?Þ·"‰žGŽü¸KZHn~ç}¾´UU yTVk&zß #?»ù¾ÀDâ„_GÕÓhõHúÎDz»=¼WLRyä £Ž›+€ ¹2©FaU½”ª"©æôè›8R€äàÈÇÜãˆ{«çQ5×ÇV U$Ï 1* `â ¤ $U0ôíuäÑVUÏ#÷>ò¼‘üûªµ´|ÓGÒª@r€T'ðjxo]Ql×Ç#ªy ÕëÅ1~>‚Ñ7 p¢ $÷@ro#^¯µ(b޾«óæ`ȯת\|Ó|ÎÿñîÿÞ™X^Ë*Ž­Es%Ÿø«fzUq´_Ì=Ž* â¨0Q%’‡óöÝ(ª šêÔöšZ›«cô@ò(¬ªBñÍY5|7G<ž/EUGÅí\ä%GºÙ$y?êRV~Ü7 0qRUUE‘ƒ¡µjo›ÇÜËè;DïàDúî@ØÚÓ¼®8ò¥«ÝH5j«ª@Ì<˜IEÒªDªçµz9HªŠ¤ž[­Ö뛘Y€´–.i-ûÐêäKÕ<ßÀ̃¤uÌϯ+ŽÝ·[ka™i°ð ÉE«"ÉÏoM8lM<ôÍ,4Pò(¬¾kcµ‚£å哸bòðßÖ(­*xòÏûd>óJ¥ÕCñIWÃê_>€+wbÏGØ«"ÈÏ4s{>Gª@†ÎØ :ôë}>G®LN CP€,$(NUªbá“ó¼{çsŽò—û¡žßúùCõ@ ÀÌ+8Hå,˺èsè«ïjÏÖn{‚@øLƒcÓ«W/_¾y³ZÅñÉ“çÏÿüsÊ­À¢‚ã⣇YRäPAÀ"‚#*±¿eûçÇî€)@OŸ>{vvÖ=?ß>| ½€YHô:âðþý‡?®VoÞ\»výzw¬z#u%#@®dpÄý9@â¸~FwŒ`ÉGT,u/%¿/°¨ÉG¾ÿåËçÏ_¼è‚"W$ùv~½þ’ïï0L ¹ÂÈ=޳³G<Ø®@rPäŸ_°ˆi²ªz 9Prð´+°èiªÊÅЊåpbI€YHß™åÑiÍHÏÏû¾,©° ©´*ŽVÅ2>8NûïD#O¤9úVã+q=šVðÉ «àˆæyô8ZÁsªà8\€AARºŠÞFu‚n÷R†Íç8Ô"Žû7ñ]Â$¹çQÈØJ§º¿ïZ\±„ÊãÇ·nݸ±}‰-7ûÇOdT <á«é|˜µ¸òR*­ ŽÃ+pà@ÙwþŸՀsOæüüÇ¿ÿnÇþ]˜Y õ ¸¿ZÔ1÷h¶/µ™€ðYHŠêñjI•­×k ‹ÖL÷jI•¾{º×A¢çp%*êñí™îë×kU¹™žãç…0‹ :“½ïósd{ƒ¬¾óNÆ.þÀQ¤ïLöÖ¥®V0U—Â$*€Iƒ¤µIk?’÷l¯vL̯7|f}« “I~¼:áç #ÏTÏ[aÍx€™ÉúþÜÃÈE‚j¦z߀È{Â}¿öt8Yì>çžE®@rP´f®·ÞÍðá¿Ì:Pr€D¥Ðš¹>´ç±ÿþ"œ8@¶ï½ ÕŠU°ôŸ©>ì}0ƒàè3Ñ/I+rpäÞJ{8±8ªØÁpø‰yØ ; ^¿ÿFWkÕ¥.—®€Å‹á¨ù8×÷›OäC÷V UOc;v7åãýV=’íà3#XHpÄpÔêöÜÞ÷ŵªvõ(öÿ »GeU=îRØå?£¶ªµ·Æ &ŽÕê?~ÿ}{'¾¹I>ñVkPmN+vß_½~žÇÑÍç¸|˜ðöV¾‡:ñ àȪ™ÔÝíu ÄíxþÜÿ]Õ(¨¾{®W1üÒXß Ap «<¶+Ë+‘¹÷Dúî0÷çJ®hªàˆÆøåÙݳÀÄÁpïÞíÛ7ovFÜŸ+”¥Gè;/#‚#Nêu£uŸzk[Áœ¸é{\ê¿7_ÂÊ£ âv>ɼopŒ}e40q€´*|{iÿÞ=‘¾;ú­åG[«çöµu¨÷ ð_|ñãýõéòí·ûÍŒž&@®Êh¬¹²ÈÍòÖ^æÕ¥¬ýg¼ô ’‹òóϧv÷îO?]|q{ýþ–2$*Š|‚¯FUÅýÑ#iÚÀ ¬¯±w—OæV‘Äû‹÷µ>Fà-­çQGßk/sÿ=ج4¶+‘¹½ÏuÀÍïýí6vÿ¡KšôGâ¿w`¿øó¥£im÷hâïoÞZûm+°rE²³`±RÁ¶$yÖ©{"­%Hýûª $z(þ{&ø‹¿Ò·"é.æ/íê÷vÍôO¿§š`8—a½C7x*¯ž»kÿÃv£þÅ_ÊZ9tÍïÝ?Ÿ/Emþþ:à6_¿ïÃ¥ÎTXTln´>Q÷¯Pò¨®ª§’ŸŸ{­÷µ¾½œ †WÔ®y qB6/¤o’ŸßÃåKU\^‰,¿q ˜­VchO#žß÷uó(«\¡\Þ é*ŒÍKa*€+kß™ïÛ—Â.ë¥0ÛJe?ã÷ûØÝ#ñ}L®ú‹þ8kdí»ßG5JëÔ">ãJ£ï¨ªý*ޱû}\ì}\lú_µ §žr˜%EÆî÷Ñ·bÉ%H&¯DŽcì~C+–¥ï\ÀÀ@ÉÇØŠ%î_Êþ!Œ ªw±Å¢ GÅRõD|räß@¸wïöí›7ëÑW‚€ «ÕÏ?ª0âö“'÷ïß½+0(‚ãíÛ‡ïÜY­ÎÏ?|øûïîv<î“`CT9H£*Ÿse‘=.Q­åd¿zU]`¬W•ín«D¸TÞS{½ü·Jd\ Û° ø O|W#ó¨£îöq6|êäà6H,‚°wN½xþ=ùRృ €ƒVÛ'òÃlô4× €=+¼…ëôƒâ÷„°°iØ€ ªŠ§«Ìôbf©kÞŸ¶Òé.Ꭰ°Ð 9m&"gýÿ—σÊÃy§®Hò(0pÀ¿ÐÓ ÈKÃÄï9öðáíàØýïÛ¬€le PÊ=‰|œº"è{ kØ’(ÛFžP À¨Š ;‘Æ%¥¸=×y›—žÚ— r¯esŒÿö®r2·¿Ð÷]e³ynÞ ÀNÌK ¼þÈî²Àlµ*˜}/‘ ]Å* ±{õß¾—Žþû¯Õ*Ž>O€+j}Šß½TÈÕspt²9jìíÛ‡ïÜéŽOŸ>{vvÖ}#‹µ=úi×ÌóžŠW¯^¾üùöÙÙ£G\¶ŸÉúõòóÏÏûí‹/V«×¯ùå»ïº€É¯ßú×ô}{kõv_ÊŠuTq;NüÕLöx~õÛ"Hòýñsñx~h.©Ì\TÝ_þyáæLö¨0r¬C¦»ÿýû>~ìŽñûòÏG`U‘o`frå‘+8ÁÇ1_"‹ûspÄíù˜{*9@|Cp…ʼnÂ'±ÌŠ#NäU#CnžÇãùØ –üzùýåÞ‰@˜IÅ‘ƒ"Ÿàsñé?ü°+@Ö÷×ÇÝ“ƒ$¿¿V€#{óæÚµë×·{¹Â¨zÝíóówï¶$îcß@©~¶S}nV(*êDÞÇú„Ÿ"WùñêØU›AR]ÚªFqp"Õ‰;Ž­ £ª4úI<÷ïψKY'’G5U'î|©ª>ñ»?)†óæQ^Õ¨-0±jfyuânUùñ8Û·7+”\ÙäQ\U€ËMê¾ÈðQU»(GT"ùçãýŽ­@îÝ»}ûæMp0Õ„¾Üû ­@j]âʯѪ@"(b´TÜŽµ¾ À‘‚¤ï‰¾:á*@â}õí´‚ApHôBrïc;Hv7½«ÞG{¾Ç壴ª ¤5$æµ €#ËK…TkRåfwÿKYý£5¤šPè8±jí«z‚_¿ùcçT—ªHîyøF&Öj¦ ’áÁ±{"aµ6W¼ïŽh’ €I»>ìÕö¥ªÜcÙ݈kyyù$¾A€‰Uúª †ùvžI^/ë¾»âȯ—GYYÆ`¦ò‰9o Õ7H¶'î®TrS¼ª8rå!8f$ÕN„­K[ñ:}7Žj ϵ#!À©Dúîy^M lõ8¸bARm1›Uó4ràX àŠëpPyë\`Iò2å>v²Ö£‚ÃFHì$ŸË¿÷Ø•–Š€ƒ– €Q‰K…ì$> €Åùpyÿé$IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot37.png0000664000175000017500000000566113657750470020534 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ß—`ØI€´*ˆ¥H¶>50ÀÆdjÅ+ˆxÜøüÔã©,v[´*†V…r[3µ`ã’U1 ò>ëÁÒªdÀî¤îÌ΂ ÛgØ ƒ¢ßn¼s>{]°Ó Éd•DÜ.«\Özì,@ê=ÚWa•íî÷>ØYtÁЪ@¦ˆàxÚŠdÛ¯ÀA‚Dp~}ýüùÓ§®’Žë?ÿü¶î;+6ø&”bO.¢C\ Ž~»ñußYX1PLÉ6tAPá2.ƒãï.Ÿÿúµ ’. Êóeûó¹{ümy¹^ö÷}Øi…+ˆeY¢C™y÷x\ÆíÎç¯_Ç‚äÏ?ûí—_úçËþ~2; Ž>0ƃä­a¿¼éÇ»ap”ýÿx×oßEe¿¸.H6}P\«4âò¿ïÆd¼O¤T 1h²àÈ–‚`3òåK]atëyŸG×€÷§žb€ÄNöº¤l7Va”ÊýPeÈž:hºu?9€™ÖºØ"žª* ý¿ÿžÏý5\+‹Ò^ÅV‚"[æH9~ :HT" céþŸ?—e zýï¿_^~ÿ½Ž××_ýò%¨²_kÚ‚X¡dWaõÕW cIy_®ÚHþ{wØi>^ÄíK¥p>×A’U$±o¤Šñõ¼é–—ï—ûùÇïó)ǰ"‰@7Ús±VÝv—÷…¼¯¼N¬8J Nåxõz¬HJâTÖ¶+``ƒÁ‘ çŸó?^qôA;³ëelHJÃ߯wÁï÷È.ïÞƒ£>u5|¼®HÜÑþ˜ßGA¨8²aÿ³‰ÁQúÿ¼» ‚®!ÎSSîãè+ŠX¡tR*Œ²}vp¿¯8b`ÄõáU\ÓæÇa•0ð€?Ô©sÞÇíãTÇñ”Rzä2@êý^^ÞžWKÅàˆ—ëfHꪬ×Ñ9_TÞW¹üØ©Ÿuß·SX°ƒàȦ0Îy_¯+ëÛ×»×+ ß`üóÏÛ¿ÃÇë Þ©^ßyž ºØÉxR‚cø|½ÿå [hàîuê' ø{U^v ãCk9µbÉ*˜øº}§x?¶Uå“]iôA«dx‡úe0L­@†Wm•!S¦V ×'nÛZ€ôÁQÿ¼â²ŸhnÞŒ¥ s+†VÈô㵤~¾4Ôå2ßË;Ù/¢ï3‰§¬ê†¿ÝR¯ïé+·±¯ÿ„~ßàXûÖ­¿­ßVÅU­ç§/»l·?^=L{d±Õ¯šŠHkÙïýÿŸ5¨­Êmé'ø¥È­dv¼xjÔ_º¯ ú† õ tÙóÃÎññ ¤ô9 ÇÒªÇÈŽu5>Zo¼/$Ž}×§k „©|t€´*ÀlÝ_žlÿ,pýû0ÿÿ'8@€ÌÚcù¹üìŽô>(⩨ñ $ëóˆËö}!õ`Ž­ùB¦~BÏN.í3¹_€L{¿þr€‚äz€ /ëœzʤL(UÖãü ñÔU=Um6Ún{>ºâ^e54s?±gA»ÕOü­«¬üÅ+T$Ë^'•·4Ô}pÔ7ìÅ dx¿ÇøœèY2 ŽzýòTר˜W­Š$k ç^õô1¿Ã˧^…’»7 ’áæã§°J0Ä9ÓãØX—rÙײöœèëÝ©¿SGñÔ—¿ `õ ¥ZÛ·*’$ýý±“¼î¿¬P®]eµ48†§ò²SCÓ®âòI8l Üð»VEo(¬ŸÁ“]eÕŠ¸Î°ìYƒ?윮/ƒÎž÷›°P$±RÉ–ñ~ÇL%v,ãAã;<S§|Pƒ{”X€|pƒÛjˆ[“=ëösçÃXûøG Z€‡ÈÔÇç®/ ´¹Á·öë”[ÇôZz|¿AÀ‡{»¤qÎã¦@(OsÜGßÈåÆ1€«4Ö ’úñ{7èÕxpÅq:}ûv: ·Ï¿õuï=´„xPpçó÷ïçórý}Ü» w §ÓËË[0Äõ¥Û €G©ʲyr}ûáz¬X¦õ€ÍHݰO]fÈÔå°2éÞ×Ò9¼oïApÌ ¹C«dúñÆä^•®@²†?.³ç[Ç[+@À‡U ãDßGr½"¹õù<@ÜÁ°ñ ¤nȇCy¾ûŠOmu_ññXq´€]I&;%•m—WËÞý¯qÊE$NÕ²«‰Û·®Âºõ¸~v°R°» dƒ• €IæÞƒ• €ƒH½Çúƒ• €Ãɺƒ• €§­H¶ý:$HÀ“‰ ¥X5PLi À¾¸c€›ãÑû°ÓàØËq8hpÁñ.›“yê\Ís_ש0€ƒTYPdSrÞú>æ>ÀF¤ÌÅ\‚!.³)˸ÿ­¢Øhp”Š"kø³õ,@Úûw¯ß—ÀØ|€t y«â˜[´–­Q‰ì$@æVy2¯¢Qqì4@¦V Ùã­ç—V l¶iU ·=ŸLÜ^€ì<@²Š¤¾ûv†Ç@è¾âã10âë €;ûñnyC;µÁÎ*Œ¸Ý°™vc¡àØy%2möUXe»û½v$åÔÔõ dj€€§­H¶ý:$HÀ“‰ ¥X5PLi ðäÖº=žÃÿ›Dãš~‚øÚIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot1.png0000664000175000017500000001160513657750470020436 0ustar jamesjames‰PNG  IHDRÈÈýÈrÝgAMA± üasRGB®Îé cHRMz&€„ú€èu0ê`:˜pœºQ< vpAgÈÈëJ|–bKGDÿÿÿ ½§“ pHYs  šœÇIDATxÚí;ÕFÑ$FÎ ì_€.ÒÈ"qˆ„Œ $ADHꄘIJþÂ8væŸàÉÓOß­¾µ«¿Þûœ:U]µ6ýp?ª¦Ïª½Ïëw&e÷/oÿË‘ ÅÅÅõõÍ €H€@  ÏE ˆÖÇGýóχîvÙÈC ÓÿÞ¼Ùÿ&`V˜úßY#Ÿ~úþûï½·ÛY¼ºº¼¼{÷¿üò“O<à|ÂÂÅ¡uK½PæÚP.µ!F óä?ÿòî»»E/ŒŸ¾¼¼sg·{üøáÃ{÷ò‘# ‹Î4žß²o´jREõ>þ~k}«F ÐB>Ãðâ(Æ‹WW÷ï¢ÝO¦‹È8úâØóì–ÝnªŒ¤uCé_oé 1"™ƒ5ä*^]}óÍèÌÃÿå—o¿ý⋾(¼@ ,J& /ÿxëŒd¬R½šLà £Ÿyìaâ°Û^ ^$üñë¯_݉ÝïEb÷Ûëp¦à¬11ø=¿T$çHÔ”ªL&‚E/ %/Ûâ_=}úý÷‡ˆHà¬â°LÃb©H Úá¿->èdÎâ°•ÏL¼ Ôý*©ˆEÎŒ*ëÃP%ª(#É ¥ôsÕfµ )qØý¾oÃǵû} +Ê<|gzTÒò¥-»MßL”ìçl©Ê¢e>s)Í`ZÍÙjCŠ@ÚòÕWÿÒF69ôqŸç•²T'ºê‰:Ùíý9³0j Ë2ÕÐ{qØë)DBi%Ðe‡¹ÎÎöuøNòþã9qüðÃï¿¿–ÅÒÑXQ$I’ÍH¼ìu}I,‰ú\Ì`G¤ç$›i(±ø˜ÍÎ4ÌR$*"²$¨R•*Y2ŽnF‰ ˆ=î[ôåY0C&ÆØJ1lÌ5 Ëa뾎㙈‰ÊL²æ~ %{œU4­·´Ed ¥¬h–‰*mE˹g×ÂÊÎP'óJg€@Μ‰DÂÈwŠïT†ë*dgª“yÀ&€HÉœâKVj)“hx¯ $ƒ=ÏÛUb‰Âòî€ÌD$>3ñK•D‰5è~Ã)_Šæ}D[ßfž³ˆ" @ ³‰ïÓˆK\Ýù&ß'¢–DQ«ìF«ðræ‘ rfÔ> ¥{¡ûÑXѨ­l¦áK[dˆÌ4‰GeßXÊ—¦tç{nt–,Û€HÈBDâ…â'ªý@¢½ÒýÄÁhtâ@$ˆd%™‰^ê$·º*Q! D‚@VŽß׋Ä÷møŒC-u‘]ûïtž;t"‚@f€š¡îûN8Rˆ €H D²…ó•=oœ_D‚@fÞ«Èy@$Gÿxm&‘ýwS‰ 6,˜i£z^«û9¿ˆ €H Ç UðÙgOŸ¾ý^üôÓ!ZCsqñèÑë×oÿßž§æl'zéãÑû)Aœ»sV)‚¾!:þ8lL$‡ŒÂ2ŽÓˆ¿Ÿ3°Y‘xaD!@$Gr\$‘TŠdO¿”›çââúúæ†a(Ïží›Ùå‰ä¸0|ƱT¨ó@F2¸ÁôÙG?l—ažI+lËU°Q˜,fŸo·×&ìqX½H|ƒ˜½­Äâïo%¹4Ü6/’ZQXüñÇÏ?ÿøãþûÛýJ$ÑëÒ,<#QÂðñÏ?¿ûîÎC´çûûõÌô}ôï^Dœi€‘E¢ÜèŠ_eJ JþyýÑX]A¨Ñ\‘°8ã3Ÿ‘¨+ùHJ*óxõê·ßÞ Ânû5³¢ ÄǾˆr“ G&sHŠÃ‹Ae$*“P¢ÈŠÃG½´‰G7ÑMõ}@Rê~•‘øçÅ JS‘8v»¿ÿ>&X$]¨×÷™NTB‹ l^J&Õ‡‰A5Ô& ãL¤+ ÿ¾´¦¾oTâB$°úÌC]¹ÛmßPF‚ð‰jp•J£‰$;\¸T$Y!f;ÝV#5<ÛWÍH²Ò¥óH"”ÎG©€H`q¨ œ¢Å‡Š#[šR£¶² {ôùÕâŠc‹$[’C °:²3ÂkÅá;Ù³‹'–Æìê¼cÍ”/µ…H`ñ¥«¨³¹VªTåErhHÏ4W«ëúµªÔ>!¥BQñ^,µ%-ÿzþsò ³†Ï8²¥«ÒyÙa®‡%QÔ@ãøÒ$êû–f"ÑjÂ¥")ídG °X±øy¥%«(ãPÈ–QôE’[]7+¨nUâ"€ÕgêñÒáª*ª+öþ•~W‘äV×úBjW¶´UÛwD&‹Ч¶S¸\ÆñŒC‹¤¬„U{².‡ÎxWA$0û Äß_º¨a´üy~v$õ¼:Ô–´¢>’¡%­ìZZj¸6ÀhÉÎûˆ–ðÈÎãÈ6Äý £+ ÝG2L Y‘DBžZ ‘xÕ¨5~P,¨$£ÄÐjŸŒ¸A>^¢êw²—Ñ*‰Ž§ÊäÆHÛQki‘d;}KGWeKWµµýR‘D[Þªy%µbVk‡©ëY‘Øûú=á[Z(nèÔ¨«ìÁ©ÄQ.µÑTî =ÛÉ•¶²ê奨¬@È@` @T¦Pº¶ÓÐùZ*ò"ñWèQ¢®ÐkGi)A+Q«RÔa°ƒ€FÔÎ8ÏŠ$+±÷7QxaÄ9ÝÀFß§vÂðRT$Œn&F še µ«Ë–f Se"ªt¥bézVêqÜâR”º­î÷ÂPϨHiÈÐ $?Œw‘ô3‘¬`NÏöé ¡ßç Dý;€‰2ìÞåóÍ@ŒnÛïL?}… F ‡Î.…¢:ÏØ¿W¿ÔE&±%¢¿Ãì…À ¨Eì<…ìNçßûû¸@Z]¡gÅ¢~H6“È–¢˜X¸&aLýïŽ2tÑ¿ÒUd³ÎCyñâêêþýÝîêêòòîÝv3ÓǺbôçA÷q”ö]0±p â8÷ë’áÀÉÖPd;Ó³BK$>NýPHV0Ùã4ÝÄÂiJg[+ÙL}a3—Ï+É@²"E‹(f—2iÍAû?ÿ››—/Ÿ<ÙíL(§úDèÑy(o0ÛN,Œ;ïÏ[²yv‹î«BÃÞÀɆ,+’ZLÝ¢3ŽýÏaêH©@ÔÏÒ+ôv ³ùã6d& ‹Ïo9Dÿ¸Å¹÷”¾¾æØŸƒÒœlÈÔ°Ò¬@¼H|†£n-Ÿx¡œ[ *,HméGg,QiLuîÛ€*q¨X+’¨!Z ‘0Ï%2D‚@NÎQ£„J·dzT–Ê@TçúT?õ=#Ô¿ã鉅奱¶}CÅñêUƒ;4#9·8ô÷²Ë&ûŽãž²q¨†,ZE6êLÏ®Æ;V߈}u® D‡ìëíR6±p¬ÎêÚ’oPk2—†²T ÙïÕ}‡Ãój?%,H5hÑFHþþV}!­3ŸiDÃz§Î@{´ïŸ:Îsÿ»©mXj¢®ÀÇȹû>¢Ìk.¥,ØH¦Q»¯…jà|)KM,TNt¥]û=Ô(,»}.‘D™Çù'ZŽ+–¡Ç7G¶Ô“½âžê8ÕŠÓ—®™Æ4%,@0©†Z ¤tG½(³Q¢©ÍX|òøñÇ÷îõ‡ñ¶þá”ny»•¿»Òy~Ô\”DèCK6S÷¨^>ãðŸ@Ã+à¡WÌÑ|UÒÊΩ]SË ¤Õgè~ kÉ0Æn0cÑt¯¸K3޹4˜Ãû’º‚Ífp&KéNj±Åh ÜZ¡Ô®ö«b­@J÷ÙêßY¾a:~ÅìGQY,í$ž[ƒ9üýë2 ı0..®¯on–w‚²"QK¡DûŒ´IÔ—2T ‘8¢y/['>¾¹0[ÒÉ^¡/_ u™Y˜8v»7oö3x—)Õ «†?Z½·V(­Äâ¿O´zn$R5ºŠ_@®²¾Œ¬8ÖV²Yj) È@þ÷=}ÅVºJTÚŠæ“” EEû¼J<6/B‰ÄæSd÷:÷Ç…¿ü¨ÁêÎWP ^ ¹Lf® çÜS%óPÏËn‘­<¶Xüòé&¿ÑTi¦“‡ÇHÜË¿pê.uÒo¸öÇ_•¦ÊG!-[ c>ijKíN‡ª³={»TPjKY¿Ñ”ÅlF“-™•ßåþ…¨«r«ùF‰2—¥7 l(«D¶A‹D’Í8JK]êßGÏó Z«Û}˜íƒá/Fadz»šoébŒji“(óˆPµvؼ…†O°ÊL$›™Ô–°”h¢>ÿ¸„ýð|fR:ê‹¿/ŽÓ;,Ö6x~Ba}Æ‘[+¬/<Ÿa@³L%š‰­ú&jÅ‘ñëww$ãVŠs®’Mé~'ÃJrˆ¢¢†ŸÍL"± ÍXô>&êŠX50þ8OW²)[­Ø—äø»8Av˜o«%?jÅR> ëxi¥¿³_÷ñ­/M2µH²_µ+¹e3'/žiöŠ˜•Zg(­×ŽÊýüé ¤aÌõ *¡ÀàRWëØo"P랆h#,ج †>o'☹@"AÔ>î×ȪÍD ÀÌÄáQB¸¸xôèõë¾üýÙNr¿un$ ›æââúú憜W Ѳë^ ^jø®=¯tù÷Hˆ`f‰ú*Ô^éÑ<Ò×ClA êys)aÍÿx¾y“Ù `5É®¶;´=ÈÐy!pv‘Ÿ9Þj¯š'‚8*hÞF«y"jÂ"XI&â—©]LQ‰Ä¿/g`aø^¯Âk• $g`¥"ñ÷— D­Âëß—3°‘øL¡õ†R°1ØÒFc¿ÖÇ€ÔàÿدÎI$‰DbYä@‰D"‰D"‰D"‰D"‰D"‘ˆ@ˆD"‘ˆ@ˆD"‘ˆ@ˆD"‘ˆ@ˆD"‘ˆ@ˆD"‘HD D"‘HD D"‘HD D"‘HD D"‘HÜ€@&ã¿ØR$`› Ù€IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot24.png0000664000175000017500000000634113657750470020524 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> lIDATxÚíÝßqâÈàMÅal „0)iÂVM<’ÁDà‡}p à[\Ýs[:R# #þˆï«ÚÕJÆÀÌÚýãôiIý¼¢Íf·ûþîÿøhŽo·ÇãÐ×àAÒEl÷ûïoÁðŸè_å}7Á±ôŸc¬²‰ àm>Áo·17û¯2FÅq¯ ¤L‘u_7¶«Ÿ¤c ŒOðåøsˆµ »W%oñ~ô^€Õ‹·Vp¹b«mMao80øæ¯¿G¸©¸ˆXlxj»Ý~¾h×ñx8œ·ÝA¼l—Ž©Çx¨Œöp}þ÷9PÎï:~ÿ>Êþr"@V¡íÊ$ŽÇ~ÞÞ.HÀ †ÓÇ ¤ŸŸþ|~– $ŽÇ~Gm_ð&¢âˆàÈÆÜ`ˆç +w<Æ ÝlO§¯¯Ó©?•55HbÊk~%"8^:@"0.U$nU ðjATQqÔ‚cjE2¿À“W—WKåÀÈAQ«@òñvó]¥°¢‰>Ã¥UTíe»c«¬jÍ÷vÅ¢"X‘$ó›Þ]9hnõ¼0%¦MA VYil·Ý2<öU" ‹š«‹ö+@€ÀÅJ$ ‚€ € @ @@ @$ðæ¿xÓî AA€ @€ H@€ H ¯<@NÝ qÕ€øî"H߃Ÿ÷UƒH€‚£ãx<ŽÇïïÝn¿?o‡ß¿‡ú÷Åãb;}`­=N¼lpìvÓŸ·åûÇ^W€¬ªâ{|<.¾ïóóÏŸÏϲí?ÏÔ yõžŠ Þ$@b°Î05@N§¯¯Ó©_ü|`½Í@|<6ϵÛ5ÛØ_{€ÄŸ×Ï?põ@jÁ1>ð7¢Û¡)«)ÁóóÞȼ´y†±¿ü«VVyÔ*ŽèY\Ú¿.0ÆÞ×m§®rPÄ”Zìçír‰V µ`¨mc Žý±UYõ¯/;°æ©ªåÏ¡˜4pEP´+ö*«ZPD#Èk«¸–Psp”í?ÿœßOžÂ$#ÖÔGžú©-Ï­Jžúzô@š{!ëàÅ+±¶ÖC¨­ÒŠýéÊ}Ò\aÔ*’¼$3¬pÇV[Õö»¯:êkéJäñ½¬4@êððª¬è©L} ”~Ò Ž(ËŸ7"H€•I®0J¯d^pL•GÊý{#Ï ËŸ` ¼]Ôî²Ôy¯©¯±žÏýÎQ‰+ ’ëÏ0_v@\*P®íäíø+í÷Ï´¸à†AòZ÷ñ¸U¥2÷¼‘±ýú+}|4çÅDl6Íþv;ïò÷/(¯uKÛŸÊXPŒMqÉfÓ Œí¶ÙF°€— ”Ú*¬Z°”ódâøfsÞþý÷ÇG·g’+ŽØ@‰ E€¼D ŒËÔå¿%@šàˆã$% .W&ñ¼‚`e•J­ÙAQë¡ô+’F¾W-@¢²9ý:o÷ÿU¶í êUT<`ñõ±@à¦Rz¥Þ¬Z’¹R‰¯Gp”+4Aïäß÷ûóÇ6¿~=–8û—dìjË\(%Xj«ªš:÷Db¿T0MP” £Y>]*‹æuâq%@òª®ü~rO%ÞW|=÷b¢Â¾E±Ÿ€Ér“{j¥Ò<¾vi”Ò#9­,Í6>ùÇÀ]z(µJ$W±-AÑýz÷}FÐD`å×W‰\ ¹ÂeЍýI>Ë=<µ•÷s¯#öK`Ä3íÕ]y¿_qä ¥û¾#@râç`²©SC5ÝCMT %XºÊù‘퉿~©™Ò4ïÉpå‘ÿqÜTÀÍ+ëD`ô+•&@úÍ÷8þýýëW¿7ÇkÛþª«ZÅÒ}Qùø9øAtW5Í“§°r3<òKÚ=’¡‰ËêÇöR Äóå×Ͻ•2eö® У¢èÜ%Hš©ªö€ßÖžºj*Œzäm÷yû¯÷L@Ò¸K2t‚àPäêdj€t+”á×ÏRÎGàÎG÷òøµ;‡Á¥©©ö×kßÛ~|û¼’h†—€º\€;«Y^¸ó€Ÿ·—Â&OQ õBreÓ_ÅÕ 6ð$òùµ äRP´›àýï/ûC”ƒ£\ ²ûýñ~¯ ÛßúàÍõ›ÓãEmUÕДӥ{¶Ô*›îó5H^%V Š¿ÿn¶óo°@ÅåA}¨êqÔüá©§)Ò®hÊ»^Λd,Àƒ¢‘›Öy€® ôy¹n}9îôí” dlo¾¶—ÿÿ? Šš|©~€tÏû¸´|·6•550jÔ®`úWý`Ñ Së-´§žr0L;Ÿc<0æL…ÕÞgîyø9ŃbÌ¥ djŒ88¥Ÿ§Ðrpä $‚£\«K‚â!.]¤(s+Ž¡ç©]ó*7Ëãü•|?ÁŠ©Ð×?Áp8XrSþÒe݇*Ž\98\ÆO*Ìñ z4ûC'U*¥×Ò]eU;¿#ß‘ÐÏ (ž4HâY9HÆ.ºXþ–.M­9^«ŒÜ‘xá€XWP\[‰ÔzSz&.Ѝ$Þ@’Ú-f³Z%‘ï((8A±rSƒ@PpS.- Å+Ë—)÷s A1ȵžà­||ìv~ÑÅm‚Ãà-l6Í=¢›Ó­Êþ»Š X"HÖ÷Á*ö»Çã¾*:Þ&8š_€Ž0K¬+@ÞûD;®•¶ÛæVlCO‰'ùdU«@TP~âçh»}†Ÿ'S…!0¶yåÕÒ/$튣vÒßÒ•/$Ïû¼îIDATxÚí=Ž9†ç_:ÇÐæŽ6Þ9‚Žàh |cRc"ÅNœm¾€›ù ú m(Y]ÅVÿ÷óËå´~Ú-‰o¿U,òé 6Ïéôüüôt½r% ÊåòúzŠó¹ŒÔyA@ÀD„¢“Š[ûë×û{ê#$í@¤Ï€*ä<`H„YWЋ…‡LÛeÖ4 ‰Ôà@ „.L}¦õ@…Ë¥ ÊZê|N§$gƒWp °ŽA^W··PÌéo­×³/³“¼V?O¿®u]¬+ 3 ‰×žÏ¯¯÷b½n‚îñ­}}]<áà›°°@µ ŠS¿?˧Àê.뎚‚»m ,ÀdèÕoŒi…ëy0Òþì= {Žú¾\€ „Dö$^ËÅcÞ!s%¸î0’ĺ^ýzO;›qe`Ëغ!Â7ãcü UwÌŠîxÇ{ßè΀Crk•éÔ™ìLHla!„0÷ÀÕþKµkNox@8¸k½c{`×àCÛ­:–RAHVëÖ"åÀßÝ×þ~{üåòöÖ=¯ëKŽR^/ïž—¦ç§¶EXŽú¹" Ž¥Ö¤ÛIÈ@¯ÛÖçMåT„Ç1‘`ØÂêçŽ@äÑÝ{?í@,Gâ½ßZ?w6ÍåÂx2Õç2VÈjêäøXNä¨7‡â|Þ÷l©djëÀ5Õ¬¨ñ„¥žcyô|(iéì\ÂñhAÞÚÒ©§ùŽ] ;‚ý;™q¾¡wâÑxèã’G…AØÞcõ-aÑǧ¸—¾^S…¦:okI¡èûŽuþÖã׺t ÀÎÂÛÛù<^e³'Ò·î(u€õ|OˆÖúÃæ¢wúÑ;ó©þ½VÆ· G«3ÀlБ”}¬Ž ¤yõž°äÉٱơ‹|¶Î’²®—'[K2Gs?ÖçºÔô_ êñîø½]× h¡°êJ‰Ö9ô×%¬Åyèó{zzy¹9B¿®B¤ÏÏ÷N2ý½{=i×>=V Eôú-]?‚ÂÑ“¼ÔÇË;åü‡ëU&k‡q½vK`XÑöñîï]qk¼µ„Qê7ÆÎ™xŽãéé?þþûÖ¾½uç(ýN¼:ŽôNò<ýzëp(ñïc¬.$~]`ráЫ‘Zǵ°øk)‰pèµ”raH}†úq-úxr4õEñôó-e‡°bBiå¹¹èëk¢úu¤¿Ðgëã¶Rˆp¨P•wg¨ÿn9íD<¡¸^¿}ëÚþÉûZ8ôñúãËׯ;™RHúcíÞõµ¤4 =ÕH4ç‘Цî@Ž"  À Âa;þ‚^[IÜÖZHöÀßõÓÀ/Çsá(JþøòùÖëkG¤…¤>+ʘ¬™³·s ù¤ÿ“Áœ‡&Ï‘,-c ÉÜkiµ8lš¡uúŽ×vÖ@^wI@úví ¢¡-O8®×ß¿?}Š8–<4æÍ“V;[Hb«ÜÆ$-ÒŸG8æ»Ê¿—ÑE  ¸SŠW‚×cì–Ã(r/´d G=Çñï¤VŽé¾þ»L³µ„æããëײ-Š8’ú,1ËyxwÌÒÊùÊûZ³‘ìÏYçRĉô'Ñ×êDZÅrŒÀ$ޤ~'§CTÖ,¨ÒaXŽC;‚~Ç¢‡ôõ@o9Ë‘X‚a ‰Î¹èœ ü"0ÚaÔJ´.¦}´’ðë¾±_@p £‡®ôpúæ𕳰CS±Ð‘êÒï—„#å&nç%»½ŸEý|-øþýÇŸ?Ë6*$vΤ_H¼:•öBH qÚ‰lÛ9GóZ{ªÃ.)§ÛöW8ûŽÃš%ÕŸÓÐ[ž–¡œúl(=°[Ï÷BZ³Dþ=" Z8Ûr$­;üù •ã¿ocV{¨µ¿b©$:{¨ÃÎI%x<u$ùûX⇠ºŸ%Vë;ºpz9{Vÿžä„`†…®– eá@`X;ÞE´*½Ë6:ݶ¿Î"ºg¶•S* V2>* e¥{¿PZK̵3ßÞǺ£^×ùCX8Øõ[Î`¨pØ¡ªþ=²µPèi°r\ì–0ê–¼ÞðV=­+ñê>ÖÃ_*$ÕúýmÍ)á@ ]ÕcìeÝE[e··V•b¨;$Ïx{k!z4‰®Q4´g]k‘IësÚËtÛ±ïðõõYË,,lÜaä?ýƒò×¢ŠÕiXÏ·ržpè‡=°ë¯'D­!0k–Uë¬3K@ìåÛUÇ04Dg‡®–]»–²ÎëܮÏ:ê8¢çëŠcÐ…„éÿëïçåT¼¤~¼ò½ÿúèó¡’ºM8i6VlvÝïߟ>Ý·uai i! €i¨SºãÞ^ˆçH¼¿?½W‡²ÚE«àµ:V§24W¢gUéóNŽ#Ï}èI*8ìZ Y%Aé¾ïÖ>0Œ €©ÄäK«Þ¶õ¬j™º`p­BÝó<êèuHCCZKµå÷Roœ/Š)‘nˆúÑ9 ½X'Îà©VàÖºzllÙhrùhBâç ú¯çX¡¶µ Šuå÷QVÈë@’ãH¥íDt«…DŠî@¬ck5µV¢{Âq:ëjԺ€¤F›#I‚‘ç>ZPìÚX™£×¡,këÚØj¼ÞÚNÛØbÿŽ2™«Ÿ8ú÷·Ì…h'"Â’þ>‡a G.òzÚ1¢<ÕfeÕ×&*‰·#aÿ2äSU¢¯UÊ=Ü»ëg9ësÚêçS KkhËÚoD¿Ž·6‡•D¿èÖr™ñ¦÷Ös"V z¾ÑeÕç®;i]­×sh–Côeìó^»p¤‡måB`9¾Ò‘Ôs(ñß ‚ eyµ- ­{zë¤q=9·c™ûú>šãhu({»1²–g×~™Ë¨×‹è¿ËëI¥uI e"$°ÓPUì‹íÝ1û;ìÕëC¢u#­;Î- ÞõZZøö"$r½¼¹œ5e…²ôtô¿øyQ'°.—þ;M;TÓ¿ª¯Ú²V÷õö\omÓ¿¯îhäïC…¤tLõ;åý9Óy+æ—ºQJÎe[!?€U‡²¼%¾Uk¿#‰>x¿uÏîX?z=½ÉØm Œ ,öžÙý«ûZu$ñ¾ç\úG÷üö' ­9¦ƒÀnî´âÓYû÷»ð~;ÔÕö|û¸7+lX†o À@¡iµÝÜ>®…F¯Õål6Ž`¤P–ÚJ¯¯µÕž±„!ÚæXús|ò…"úxÛ¡Är~NcX?ê8ö²S ÀìxÓ|£³´âÓe­:XŽâÑãåjÄ1‡p8Û¡Œ½vTtÿŒ¡môýù&¬Œ±Ö²škm¬å¯Wÿ2㻡u?’¥„†O `§Ž„+p`nëíRp°®WYP2Ö‚1H€ƒ ÇZ^!Ø…p|||ýúñq½~þüåËûûõ*}ëñò8iãB`=!ؤpœÏ¯¯çsüñº=ŸßÞºç{ï‹€ìÊqx—Ç}ÿþãÇÏŸ©µ_'*$„²6! 2XGCU–€hò¸£@@V-þÀŸ;«:—Çs#°ˆ€XŽCr:b%Óã‚á¡+€M ˆ' Ò×9Žr¶Uû8°)‘]$Í’êÁ´€DC]‚~}`£Íqt°…Æ\8ÆK¦À*ˆ=ðwϹ\ä¹é5nX³´¬Jô¼àŽÓéùùö#9ºËùüòr:ÝúÝߥϕ‚%„ÄCÄš¦«…$ÚB8î„¢ûQ$aÐíËË}{¹¼¾Þ„Cÿý¾EX`i±Jî0tNe®óØ4–£(…£ë_.ùq’ÛßsaÉ:!(°¼XŽ္¿¿±ïÛj†„¢¤ÍöÛ<ùºpä’F„ãõ5–Ò©ÜÚ÷÷¿þúóÏû÷éZ¾H0§X{ ‘ç4dÀÏ…¥tV?9‘\ˆº.9ž„äíMžYä`Èo9Ž©À¦ùßô9޼_:‘¼ÕBú²Ò}ëù)äõíÛM8îs)8OHØÇ`’ç8N§.¤”H7€k¹ï×Dˆîxç(,¡±HêwçÇ'Ó [Úô Çóó}ˆJD;$õ\Fjµä¡/é—Çur]çPòY]|Ž3s »PP’¼©Ï²²“é^${–Výùz—8&>Q€‰ÑõI0’0h©÷°fciÇ¡…£oW_]‰8œÀì"ÉèzΣt zà¯×qx³¬î…ªË‰ÜÎ*-%Qöó׳êHød&Žn@®M×íkKÁˆ¶y.ÄjE(R[?^:z¥;Ÿ4ÀDÎ#. í³°òþÛ[îdòYZ¶ã~7}Wúiz¯%$Lï˜X@ì:>ç‘_Ï…Ü EÞÿöM¯9™"iõKá`VÀ"D Cj»»\]W¦ùjáãZ8¤íœˆËháHÇë9éS`0yò¼t":´• ‰= K÷µpÔ…¤ÝäŽC·8€ÉˆÜÙ—ÓsëD ô»e®Ëˆºêú"$~D÷%'Ò½ÏõÚU¨ëEù¤&r v2=Ï‘Dg[Y«çZ9‘” Ï…Âo;±–¢N¤¿’Ü_ÖÝZuWç8ÊEï…ŽO`&ÊYUÉaÔÅýþu‡Ý¤.$zµÝ¾Õyó •è‹8·It6VÝ”‹$zÇ-á–YW Éí¿µ:|VVr$:çQ¢r-,½Èb}5Þ²/­8’å«r"¾#©'Ãku õE­Y[õÕwËd:;lBHÊ uH}-¬Ôæu":4e·Ér€ÍImOt«]}ת±f]!›kVžó(÷ûðöHÏûä8àPb;–­®A0–lÖVmVW àFÚ\ªk[ŸÀj ˆCØ­^iõÖ¨ÀèãúyCÌ:Þ*|­úx„ vïD¢÷PÁ[ІžÏP2Ö¿àpdèõÜúR2Ô±F@ÆzŸ½9œ F8ÆÊA´>n¬‹÷øh&šSúxØ4ÿ#XÏÖ+èHIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot33.png0000664000175000017500000000530113657750470020517 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> LIDATxÚíÝ=rãVP/aªœLà¤C‡µ%Î{ Z‚g^Âô(`àÀ³W9tè¨s…òP¨[лÄ Š? qN0(ˆÅ–Æøø½<|÷—ãåÿºÿ·õ{±E@,<8ªÇÿzµ œ+Ð8Sp„ÿ½z{0?näç €‹ ŽÎÓÓׯOO//Çj$ÕãàB‚#‚"H~üÐÄd=À…HCÞN=ÿ½AòÑ!-Ñ4bÁ°Ù<>n6ÓA6›î§:ÀB$æ0ª!ª©F27PÀÕ6nèiîPU4’h9ˆÞÛ`ÀÅHÛHª}Ý«åÀ¨‚$J~}pá2·‘ä ˆý¼­‚%‰¸ºiƒ$u*8¦‚DXI䳪r“xoÄ÷ €«o"­|áÜ¡¬<"@V$Ÿ>Ýß÷ ¢šã¨‡àX]ÜÞv“ÞÝsc¿ ”©³­Àê‚äöv}pDôAò¶‘T×}€ÕI×0êûÃß/8VïîîíU‡UrHÚ èGlïîöY¾€ÕI4ØÆÜHì@#G Oå&ƒróÈ[HÁÑ5Ž|V{ýG¿€Fžë г®òYXùBAÀhä+Ñc¿j*‚`åb$Ÿ}U͉8; `åvb¸D°ÄÜH<ÁS5VÚH"ª³²\©@£jùJuàrå묙À,ýÌí•˱ôÒÞUp0ª_|¯mÖH`T5Ç‘ïpŒ±z1{±z1ÀÕØÛµ»¢úÀnõb€+Q5„²z1À•‹{4„C­*lõb€•Hnyò;áP € M`ꬨ”~hÊYTŒÈ“ëy2Ü鸌Ò@ø`Äœ‰Ö._gr¬ $¸2ù:Cn¼3HÚ $]¿À^M¤o$šÀIäµ².­¸NàìA2üI¾úD?µh¢;ÀJä+ѧI?„tœÕ~OÍZ`ï”›Fn"s›K^åÒVãu%>À?çFR}2Ï#o/eËZ`’ç@ª ôæ®î«¬ÄÚ¯¯pa"Àžò'pK„0+8ª¡)sG”ï´ØßË¢‹÷D¯œzß|‡Á¸¿‡; ,ô“~¾—ú©>éç†QÝš6ÞW$ ÀÙ‚¤½“aà>Í ©ò½ÛsÉwXŒçk,gŽÜDò'úSHnUÙ·±,]~¿°øU0§~?ñs£åæÑÜûË¥Èÿžüû`2HÚ¡ª6–Ëi†ÝûÍÿNÜX.E~ÿ¹ap¦Ær)Ícªq@ á9g“0Ú<ª³Êœ}À ©ë`8ùù2?¹²XÈ×€W¹YTg-åë'b_ ÐFÞj Ìj$Õj¼Ö’`Vó¨Ví@pŒ®V»»èâø•ê–Y« çúŠ¿^½¼ÌÝú{œÍTÃÈs‡ùh €•™{Àxøí·ÇÇ——Øêuû¥Nb{l§þyWb³é¢q€ßl·C`±½¿xØ6›§§¯_Ÿžêl~þá‚äØÁqêŸ pe£Ž¿ÿÞ@ó~4¹AÛýƒ$7ƒS7fÀó?Çóó·oÏÏ}غŠ×™z^$§j†°8 øÅo‚5HèspTbj¨*¾ÿ?~ÿýŸúƒôòDØ+8B ME0Ä©$s'Í«F3?HŽ æ@ 9HrPÄ×s0ä9‘ÝæÒΩLH5÷1÷ÀþÞ0„°W€TCQ÷÷wwoÏC]9Pª¡¯ 9Hw½ˆ 8I€Ì’ªšHÌqÄ6ËîãÃCaÁpTqÝÇî×ÇO»­ž_ UÅJuVW¾nÄëÖ@r™ ’©9Žjh«o.]€¾°¨ ‰†PÍiL5Ž~¿ Ž ‚àJ$ɾsy®£¦.@4€+’8[ªšªç8ºïÎ Fp¬4Hò¶šãÈ[Á°ò ÉRÍ™˜$¸rÕi½ï½!T‚@3qK[`Ýnn>}ꑌíÝÝÍÍv{{Ûíw[¿)€•ÅÍÍvïm`tÛ?ÿüé§ï¿»ÿë¯?ÿ¼,77··]Àtû~³W¹aD³Èûó¶}°DSi·~óæÇWo#ìUpäÇÛýÜHrPä ©‚Å_`ÁMc{ ¾}5 ÕÇÔ¶j(ÃA’·‚`ÁÁÑQÅÅçÏÕþö¾'ý½»J‚<Çñv;ôý_¾<>þðCÝHú&#H"¤;àçíܦ1w(ªj6y²=ö¿|ùå—.X"@œÍ°°àèFßHº¯ÍalCýxw€¯¯Ÿ¿}Oýãý¶m }Ãé¾ßßàlÁ‘‡°òÅܳ¬ª¹’qV’áççàÈDœHÑ8ÚæQŸž;¼?7ö}½©FbNàl2u:nuöTÛdvç8¦šI÷xÜ›¾Úöcx(ËœÀɤmy΢?ëjøÊñ~è(GDãCS÷÷Ý67þñvr}wN¤û÷ø ¡y´“å±?ûjw?PÕ<ÆÌTóˆ`È’‰ëDN m`Ä9_çÑ®uµ8í6èõYWíYSýãm`líOŸ•Õý|i€£È{·ÃÁqÿùsÕþøY[UóÈÁ‘IuV–pdÛfð¶ì®®;|–TU°L¯Î{¨ât^€35’ñ9¹ ¤ZÛ*ÖØŠíÔHÕ@,ºpòÉ#F·UÅ_í®UÕKŽ<‡ÒI^+«_¬± ˆéýñ%SÌÙ^Íiùñ|ºou%z{¥yn Us˜šã˜j þ²Go"íäx¿¶UnóæHêûä{ùî~±J¯¡+€³¿µluAáô Çï÷1ùë}´[CWgsyQż:n>k«Z’dþZYùJ÷vŽd78Ú}Á°°F²Û,Úíîé¾S ¤ZÝw¸©Ìm†¬b(†‡®âññµ²òýBªFÒ_™><çQÍ€ÅIÈܵ±¦U¬HSCp,ܯÆÆð=ÓÛ’ü»ËÆ]í6Áp¡†ï™>÷^éUã¨ï™îþWi÷tÞªaÌ= KÃ,£w8Ô,8‚ççoßžŸ þAÜü €…¨óV€°×»:€WÏ›  ¹U½ÞÔÏûsæ¾ÿ}_éÁ pôOús^_sV ïýÄüÑð¡¾oé%P d!ø}‡ÚNýþ5`5Ícîãm,ûx÷}ýc¿ÿ}ç„€Uø¼T%9þh–IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot21.png0000664000175000017500000001430013657750470020513 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>KIDATxÚí»‘,ÇEa*O¤ 0€Ê ¾&<7VE(C k(S¦D?–ñÐQÑSYu+3«?Ó3sNÐÑ;³óÛyuûfVfþô<__¹ÿÁ˜àE…ã^ûõ'ëñø÷{îóÀîüöÛ¯¿þþû×—=fçû÷eQ(G>Ù«9õ<öçG/èêñ—Ÿ¾ö;+ Ïö÷)BxÜßë^!&ïy­3Ø{aG@¦þÙ.ÿHŽ^˜Æ-Y„£üöwT1áøþýýýûwÿ~ó‚¯É9 üÑBðW¸Ïò¾žåýï@ÆR„£ƒ=ßOHî- 8„µ«ó°Bò¿ÿýç?ÿþ÷*$Qá™]Wðpá˜ë@Ѝû—Ûó›!ÖD~?¤]س÷#tðrI ]ÖQ©PÑó é>Is%$e1¶ÂsÖëB@^‘«œ€ºÿçç6!x>!Ù{×Õ²`[Ça…äø×…p¼,Êèó÷÷ŸÎÜ,<[ÿÙD/üuÈG%Û‹p—ûæ_ì¼¢÷BUëíoo?„C??ßßoïWÎíÑ{õ|žð\ßÁdæZ0”Ã(ÂQ¶ßßÀË8uûº€/Ž£Š" ·ç__Ëy¹_9_ï?þýVhêçoã÷ó8N¤ŸTVÛyË}çC…L^q{C9+ öXÁ»]9“¬sQŽêq$–CP-gâ¡*„D+§³£Ün…AŸÿñGîØûüžC‰ ÉýC[÷Þ¾Šp€ë(ê…2šÃhÖID…Á«-ˆ=N+,ãP–’èväóãÞ̀Е\8í®)+^#*Ùãÿ»$ç¦u(ãœÈyMs¡©ãx„‚¬‚ cœËX‡]È·9‰¼cé L:SÎd,¬^¨ëøÐ”×^ý¬R ŽÃ\a{9šš =- ~©”ŽžÏ ŠÊÁ(Gâ}^y!9+—ÁH[8»ðù9+YÁ( yùýú<žl·çåqìQ Šý¹’±#É·P¡w<©#±ÛZmŽÃO†«º^à‹ƒðê<²·—×gu,JÈÔ®.[g2íð®.8€—a¶ð+[)®sJ8ìyßixõ!ªÎ#ZO²þ\99!ñêGÖϧ/ºjcþuÝD~›­r^ÎAUšçΣ¡//cï¯vm)Áx¶‰‘ðÒB1vÖyÄCUÖqôs^ƺPëMf{he…ÄÖ‘XG²6%;„žNH¼]VQáÐc¯^UýÛÕã·9“XÅ’¶›m¬’A_ðpÌç<¼m¹69>îU•uëëíu(ñž\}ÁP•íöó¼å:ÀAÂÑ.Ð^Î#–$÷{Q•…µïxÊëjf+cååtTÎD †N‡ù†Àà É|Σ/ v›k»ý6ÖF] …ºÂo…pìP”YC5uTu%±]Z”]`°ãB2[çQbÿåʼ^˜<Çq^N VЧëHÊû™åpö~¿«@Ž/$Ê߉ ìæ@tŒ¿/ ¶Îà “Í!D“峎à õ|º€²vH~ˆ·+ë¾3×q °ÛBb¯¼ómØûÛu[!é/ û-d¹S¾ô%^hË…œ-|ó`7GbN?4«4·uº·–]¨ë…îËa¶)¡7Qp]xc9O@²¸°ãè‡nör ëú6¢¡¸½B9ÑQµÞà¬h¨Œ…XXê+â6² ?‰~ìxôŠŽ.#Þ㯅u^ÓÄþ.£v¹ó×}Ì^‘{»Ì¼ÐT´W–×;Ëï½Õ¾l ŽØ,û…vúó7ÚîºÊ‰äHû¼û8xË“¹î¼jUtBb¶ 1Ûm€Ãð Çf…ÄÖx»²ô.¬X$êf…¤Wß‘™¢Z´¨ÛÕûo'&Ž?卸— ðñìï?Þ Ëke2¾"÷ºâª×£*§ýdxÌa´›úsLüíºãm¼ª7˜÷º²BBh  UEžoßzÉq?©›ÿ±¾žq]D>ù=7ïC¿¿ìÌw+¬1‰æŒÔß“]]pw!ùé§··ÏÏ?ÿøXÃr¾J¼­{ÚŠæ¼ ~ñAR*§‘­s™=–Ms“­Ü§E Ü‘E Vá(‹]9¯‰Òjë ¢»–¬ÔÂPOU¶û£Ç—wYÇ¢FÍŒµ@a;0„Ù/TQ¤ï@â•ê¹€½Òö& Fsþ“¬`ØÉƒÑ㬠ôs0Y!Á‘€•\ö„ÅžEPt¥ztÏÇÐ U¨jœãh__N0lo/Õë+{^¢­›nz—Û8GÂÌu8Ñx¡~H<¹Þ/G¢s"}Ç1ÿz¬s¿¾ìíVHÚsåxln¤ïè¢-R8]˜TȨ]H‹3Ê5a´M ³uÑÊyõüëH^U§¡r:ãn2’Õ±ô“ìÞÌuåHø†ÀÝ…dŒ¬oÿÕÂÑ/tŒ>_ÔqØPQ¶Òàn!)‹õr>ë@\&î}u zþFtîÆÜ1:“<zâ_ <)g²OJôŠ8z»Ê¡¬ÏͱŒoßê°^žý*¡sBM6{ŽÄ{¾­Î‘y€$ÁYD“ÏÙ]IÙ÷÷(ó9¼P#€»ÐFÏÏNÏ.ä³»˜¶¾¿Ù÷ÿ¸91x8f¯g…B .ZïœJêÙû:8Ø‘dgvÛJjoWR|Fø> =»˜&J?ô”‡±þ|<ƒ¼ß­vkBp¸pôwy¡&o†ê>ëu§õ*ý: Oí %¾Aá° ®×dï^SÞ¼èíÊÑ(ô*½Àuã…S]ÑG+«£ó.t;óXï)ýøÙ™áV@@8Báå%,%§²œóÍ€»‡®t`\Ÿ­ÃˆVvÏ 7ï"úx~2Þ:•¬èJü:G²D°rûíï#$p ^ÓC¯ÕÖ: £/ìžxïwV˜ì®…¤,ì¹]gme{y¾~hk=–ç«Î7î&,¶ž"^¸ã8Êa©‰ƒ%y]®à³óJâu&ã]Z½Ï§WÉÞ Ç*l884Tµž×IX{{~{®Êy¨+ö9á˜uíçQ„ÃvÛ ‰7ŸdVHT(Ë:¯¯÷÷Û]Yeס,8=”e‰.|^GV8Žž¾ „ŠZPVañIyœ¾ñ{©¤ºM–×Bb…ƒí½p¢Ï65T½¦<áP½·ŽŸ·±,Ì:tUn/DZÃQ9’[g’I®Û‘î¥Užoù¹¾ñp˜ãðê>¢-<¢uÞB|ÞçP ‡r$·Âpûz[a‰MVô界·÷Þæ¨ns·¹[!ã»;¯BõrR¡+ofy6TuÞçñí[-lË‚\Îÿþ÷_~ùÛßZ‡R~w$³¤ß;˯ ¡Õ œ$$~[t;§#ç<<Çq¾±Î£Ÿûh‡u$ãd»êæ¶ê;սמ³Ns º×“% ý }Wºë ÃARí®,ëHê܆]ØoÝÇk›OÎÎl¯¢vaÀa §r ~¯«mùÔë¹ßça“éËñ/ÒîÂZCW±ºåðüy)1Òvë%÷‡9»4;ÏcœñˆŽ{ I» «Î!”Ü‚Šþ.­v{pôóžu ËüNw Ѧ€[g‚G“ég:Þ@µK++$*´Ÿo?×E(l7^;/„o:à@¬€¬W´±È6’­?;”Õ†¦ì.­"8j»¯zöþ±ÁU¶ ³BE¸ˆ‰Ö)ä'î]Ó(!ñŽk*%^Ý‹÷¹×Bb·Eã8ànD5M,Dë”QÏw¡ðÄ u(«“°½´–]\cÇåuïUŽŽép!Q“öæz_YÒ:žZ8®ºŠ8‘ÚQY‡e·ûö·ÿzUå¿+\|“àt2?qpÞµ¼°±õ Ù‰zÞ¼ÇÿäÚ®»ª»m‘Òß>=þ;Ð’.p%Ý¿âWó+ÚÂBo~Ŷî»+Äe—–r(å}÷waÙÏ_Í`ç w]©P’žÍ eÙd|ºê‡²žW°ëd|/9™±N’.ì@lh¥ƒ×sA¶å@^%¦ïMDT„o.\Ψ…LÅèu·Ø~Á›ß·~¾WòèŒu¾¹pyai“Àã™ßÚÔ9;k}¾õý|~^Sìû-ŸŸÊðÍ€ …Jb «ºBn‰Mª÷ë”Ãñ®´g»÷žWwòõ'ë1&Ôºò^¯/öz¦Gt¡V1úìLïÞ6×^áá¼c± znßkÁö>_rð°Â½Âõ¯˜Çöôü‹hÝHn¢¡î ÉXp¼çÛ¯i¤}þ¨ fól¡€—ofº—\÷B[*g¢r.ú<·pçM.4¯´ ÚÞ!,„Nb¶—“7ªÕ«d;›K©¯¨çÁx¡]…£8qÝKþŠÿ(™u,;;–ÖAô‰?ÏÖ‘(‡âm¶eœkØî`êÍëî*+hg9…³^oû« Õ¨^N^hKu÷õf®gëûë;šõçsBbŸÏ ‹ÅÍyDsÞï‘û€;‡²´ÐÔ»¬üî½Þ(ÝØïÏžû9–¹óèçyÕº€Ó…Å›t¨¶ÿªd{ô\õæRÏ͵d2ËÖy¼Z¥><ѺÚRó.¼d»/‡¢[®Œ…¤Í±Ìå`øÆL M~×Vl&¸º½-dç\¼nÂÙÝ`8€BY*´µ 굕ˉhaˆ£9/çÁ_`R(¢÷W%š{ðróç1Ç¡f¾@0D ïqæ…%š£Øz{-Q‡ðtœµ]to!ÉÎϘ?ÆžŸoÀÅØ«—Õq½±®Åo¿ýúëï¿#hðdç‘ÜKhøK<©#á“€áÛ·ïßßÛÛç'aÞßá°GxQ>>–.¶ÊYçñþ^w½-çåvxq!YcºÂ@…uÊ‘”Ÿã<^å8Š#˜r$8 €Wãÿ÷Ö„ùr«GOIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot38.png0000664000175000017500000000551413657750470020532 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ×IDATxÚíÝ?nI`a¯ pà ™;Ò=é &0àØ:˜À˜d’”0Ù@ÀÌæÜ¥z ÍzU¯»I‘ÿ|_àF‹"E‘VýøúUuøÀ•xyÙü»^{%8´õÿy%Øßjuw÷áÃzýøx¿Z­×Ù¾W àæƒ"nïï§¶ÏÏCŒ_xØìüxÿñ£`¸ÚÀX­6{ý £$Ãþq?¾~ýüyÜ/[¯<ÀÅVYP´QWýÊ$ÅÜþ¸îï8Sÿ~5RŠÁ±Zõ=eþxÿúö,8¾ÿé§Þí¥bÑC8;ÃÀ\!†¹m¬P¦¿¿EùyYp´7|ÝûðÎÆG}Hª ìß¾}ùòéÓ8€—ýìö åëåñcÅ‘7ãëžÉf»}ïÀ™Ç8àg=Rd~V‰d½‘úþcP<<ôfmÅÛU"gRqd³ªâ,ª¸=йYYSÒûy¥Â‰·—}Apâ‰{¾¾#6ÓÛš›¥5$s•K?8b…â8z€ÄYUwwý•ãõgaÅûÇ`ˆ×6ǧ׉dG¶ï8zåÑ~òßnš·³°êØ·'ÒΪêW*c#ë‘ Ûv݈ 8’¬ç+ŠúöÕjÐÛ`‰F¥ylÎÖc™î‰Ì-@ô>©‰³®â×ã!® ›º’~³}¾7Ò¯HæzÙt^§@8YÒö<â¹®zÁ±Ý©o_v.¬¥= sßßINTd³®æ*$Ùl«üÐT½Î£ †ºÙ^ÎU$*€#W m€Ô=,@Æíðõl%ú^µ§(™;×Uvhjîþ±§â}8r’ój»ÇQ7×KÐÔIv®«$qàOaÒŸ¥5$ùÙ{ÍÂ8ª±Rÿ^õƒ£¿®£?ëªGÎÊš›µUúÊÎޛ탡’|ú®x— ‰Û|¶Öôç¯TØV$õ,¯~’5ÛÀ;k¯y^WùtßþI{g÷ÝÞ]e1Ýqî+€³ !8Ú ¨{$Ù%jÛžG^Ô×ó˜î}LõÿS-ÀÕȾóÖ d× yïǸ™Ù÷ÿ±äPÏëÔÀÍW ï o=¤vìß_eŽ7Óßµ2صiŸÝ¾´ç±ôqçî§÷p0«Õæßõ:Û¿V//·ñ{œl@}|4° གྷög} Àb÷÷Leýjù¸ wwC`<<}Ê+‡Ø)_f~Èj×`s Î^üD¿Ë¢±ÕªÞö‚¥T±")•@ùù±Âh÷ë Ê{6ýŠc¬PJ%Vžó­T$Ãï[‚¢T åu)¯ã\cl¢×÷ßÿʘ.xX)seÖMoÛ«\6+¶RŠAìá T[á Ï+M¬€æ{C±Gt+‡°»½³Ý¯Y/@ં£T10¦” (Gùd?î·³ÆúAR÷p–:«÷³&|ìd³ÓÞ{`>Þ¶Tžu…‘z*ËÒŠ$;¶k€”ÿWþRᬂ#~bïÇvE±Dìi” !ÿÄŸU—9 _Nr1HöŸ¦-(àbÄžÂöŸq¬<Æph¿>ª8ÖÀ\ÍFÜöz0ñ÷Ëz*ïõú¿ÿÙ;`Ç %«@Úu&‚ƒ‹ví³nj±éÜkž—y—CWmRÜí¬§l]J®ÓVPËz&·\ƒN­@_Zqd³²âJõ|¢á"”cÜÙ:‰Ûg/MȲ ©îåçêÊÖi Û%QÙ{"õtä$sÓ…o5Hæzq¥ùáOegYi”uå?p<[íí ±÷m÷BbO¤ýÄ™ Üe@ÉfAeÛñÐU?(êç×΋=žÝÖ›Üz\îÏ£ˆŸpcerkÃF{¨'Il¦O­,ÏîáqÛŠ#¾þö7}8îo÷@bÀµëYê`Sœz€\U%rÛb/$ï!ŒuÛï·ã¹¬â‚¿ùõ$ý…ˆñþã~ïÐU Žö÷Š“ö rÒÉÛ ×ñv –í?þlöÓöÀÝž’¤®@zÓ§dî*íó‹=’ÞÊø±ò˜e¶TÙ/³În'H²@pI[ Ç8Ð÷g1Í7Ùó $[˜IM/œí`jÕM÷@æ‚ayp¸Pp¥â'ì,Hz³m¶+‘Ò ƒ'ž»j~b –¹¦þTEÔ«lz§8ÉÖì^ad=5\ipÌ ”½Io@K~nªºÙ½¼²<0²ª›çýÓÆïoéÙ®,Hv½_6¿?^¯cÜ=Å`˜[gWšï¶¤(,ëdÙrÙ:£[9I#À%ö¦Îµµä,¿»lë &B‹Ï«®@Jpì:r•ÀAd×ïXr=‘¹f{ÿì¼upÄCiãÙ€qd ï À‰e úÚ†ý`‰Mü© \õ*Žö$ŠupÄÓ¸ïöX*Ìå~;«kúz½½JelŠ×³¬bÅ1VFo=í8' ’x¡¢|I½Î£<ÎÒ Ge½XyÄkx{§Î¼‰²ôšçÙjç¹W$Ù%f£¬’ˆÓo àÊ- 8¨ñÒ¹À剧)÷ŠÐõös=p“Áqº !¹ ÀUÉ­ü¾Ç®´Tt4°ô”Ø«"¹Ýk¦p ñJ\°õÿlþõJpÿDRtüü‚ 0IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot29.png0000664000175000017500000001070613657750470020531 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>QIDATxÚíÝ=n#ɇñ¹ƒO cÌ&qädòŸ€ùž@‘±p4W˜ÈÐp4¹òIæ 4´r³ß®·«šŸMê÷vm“"©!…zø¯·>>}àcñô´Ûí÷ãõ—/Ãu¼€ _¿¾¾¾‹¢´E //û=šÙïaœ[åy{[ÀÆ)¢(‰£ˆäùù´ŽüT! lœ¬ÆQ„²V$—êð‰”u|6|õúúýû{Úí~ÿý·ßjÏG$ð¡Ä‘‰"¶åþò¸rûñ"1w%ŽÝîååP íë,qû{¬½pd‚ˆ·Çd‘'ŒK ° q¬@Ì~ÿë×ÛÛ|(ët‘ ÜEòh=*&‘yí£<÷О?‰lJ §&Ž?ÞÞ~þ¼¤@›H–DjÉãýñEñööþ|¦÷[èŽû¢:ûqÖT6$µ~Öp]ÄÒJ4w*(ŒZ¢Xšu•ÍÒÊj%qýÀ‹¤ˆ#&’cŸu^3iEe‛ðï¿ØïcÛ+"ŽÞÙX™(bÒèc%¸)¥"Ùí†Núóç¡=Wž‰cm:Uœ>y8si E±dzVã8ÿ‚AÀ&˜‹a $K%â„J•йøWI$§ Á‘¶‡ô@pÍŽöÑþ]þÅ~_Z³Ã€@ª”L¶Rß' àn)ÅæóÕ>–‰³ºÊu\—r®¶=‹Œà¬ß˜/%ŽÞ6 %O¼^ûz×å¥ß_x8z;òÝîË—ÏŸçâÈž¯ü|¼>öõ‰6.Ž±ãŸ¶¯¯_¿CY§µñyûD^V”·NDpw c·{~®%ƒýþÛ·iÇÿü<¬ nÛ··÷ö?âíÓûãuy¾òú™HJÒùx Á:WïvŽûF_DÑêø—®w»¥vø¹Q4ÓÇÏJý÷\‘L…0nŸ?Ü7ßV¿|ÎåDHBpµd2$€yrÈDQD°æ[ña[žo8ƒ=&•ò{ÄÄÒã 5ÕO”ŒgÒ¯½ŸHœmè*«eô'ŠÃoÇkÚ"Œñö¥ÄJüý'L“FëÈì„ÉÖÉ’Dàq ßàÇF–0Jg3ïð³6 %K ­Ç÷$”øï)ß¼ïw¨j¼Äò6ûcòÞŸxf}û<—^‘ 6Ë¥ªe‰£0ò¿~=®ˆkY(õÚIiÇb{}Zð¥ÞÏs‹# ¤•8Ö^ç‚­‘w“zɆrÆ"ô4qŒCCcÂè’~R¹.|ëút‘,×HÎÓÑÇY`çß ž<¢@æ"Þϵ÷çG·„`–ð‡ª¦ßÌÇÇ´#^ªZ3›êPƒXæ5“úíýµ•>‘,ÏÚÚÚU-y¼ÿ÷R#»ÿýö¥É~¿&‰d¢ àáÄ‘MoÇ{GÖñÇD±~zoý÷‰ÏŸý~ñþ©Hbòj%´SÞ¹’Õ0²šH¬´~íPV–<ˆ¸{2qŒ›ŽÉcÚq·ŠÞó„г`0ΚÊÖy3=x¹Øž%‘i"Ùjé=“>Ë{¾}Ö=!†®þ?tgYõO¿­u-wü1éäâˆmœeÕ_“Yš¥5ÖD¦Iäö"©wÔóYSåßÕ×¶ÿN¦ÏO f‰c^óȦ經Dz8¢(êíÚ-MòYaíÍR9ÿPTév×uôçBª:ýç øð"™ïUÕþF?íˆã7úúPUÜ +»¿w﬚è†ÚK{¶Víyãëߪ£ïO qåxýþV¢èÊ"ÀÐÕlh¦–<ÖÍnê­qL¿é÷î¶›uÅ!¬ó¶Û[¹¾<”•%ˆÞ•çÙã‰x Äp.‘”²tÈqG<·c>«)ºšŠ¢•0ÊëÎPok6óu$õYYuñeÓ{·*VÉf]µ‹éÓC À‹£,L;õü‹¸;O ÓxI¾®£ÖgÉ#[ýßW·4Kky:qœn\_©žÕB¶CŸH…±´$&5@éH"SÌ;æc‹çõšG|½r[$q/®úóçëDÆÚHÏºí ¤¯C/ ¢µò¼}6=qÄÓ@Ö®ûè«DQu=qd d)‘´Vª×W¶ß[Y+’uë@ˆÀì}&–y $K óoî§Õ@ú†æÆ=¥²YZ­•êÙ¬±¾-Nîç“^Þ{ª5kËÞUÀ¤5-3ß4qúM>Ÿ.ÛÚºdÝ:±c~zz\Jv½tÉôõ[{gÕH6ì~ÿ2i àâj­»hMç­ÏjÊ~úôõë ¸ØB‰CZë×…ôîö[ß÷qÜçמ5_~¼cW&&’cŠéÙùÓC<ЩˆâùyúGP®‡û³šI{Ë“ü\‘ò{-m©²ÝÝx#Œk?'Š$›åTK Ë»ÝN¿áÇMKÂÈH¶àpý–&}»ÿÆoïASw¦:p;qÜËó"é[+¿k+Ôûj"Ù쨒H¡¿­ûúëÚKœÕß^q\ê„H€8ˆd³âhmª8*ʶ8‰+ÇûÇÇ÷Í‚j'ŠcïŸ&ŽÒá+àû’‡¡-àþ:t"¹Q"9—HzÎ ém[_ªqĶˆ$&0CWÀö;ð?ÿ¢ÿy‰äj‰dz&z¾N¤5¤•‰äØ3Òããs±,íµ5ÿ÷5  ÀvrîÍ< äB¿R½W$-¡´’Iÿ™ë=»ýÆ¡;À“GëÈdCZ›Iö }ý:Œ|þvŸp²-Tz†š®ë àrœ8Ú[óÈU†²r±ÄD2ܾ~wÜÖ¡¾•ã™8Ö&Åq`;)ýJ¼=¯y¬K$re‘¬¯‘ô&”l(¬oVUëDÁÞÄ!‘ÛHv^M&ÙÈÐU¯Xæ"™&“¼f²þŒóž3ÓóÄa+à^’‰£$8D• …@.J™¾ÚÚd±wèg¬‘ŒÉä0¡d{YµŽ¾í=3½÷÷í£¿àzi‰cý1rZG™ž«#É$K(ǶÙóû„ûIGL Ç „8Δ<âqì7øµ¢É:þy‚Y¾½Ð¦¿ç©5v"“d€S“H&Ùh"9V [ºUG~nQDB›O"­šÈ¹¾¡+‚{ݬPM¸]‡NWÊÖ;ÎSÏ['’S‹‘ÇÃ2?Ã|Únå÷¼ôïÓÚöÝöïÀ¼Ãw ÔÝ~€çíP·>tsíɹÆr(GÚbSqĤt©×“< éï]$Þ/PÃØ> ‹8•@èáóç§§aÓÏ¡-»>Çkï|pQ”ëÝîéi*Šr@ÙpýßÿþóŸÃ1Ë×ÞYx8¦Éâ°=Á(Žz;Šcz]8‹÷{ßàÆ(¾|YŠR,›&Šñþßÿí·¹(Z×£˜ }ÀæÅ1MSQÌkå„Ëx=&Ú‰˜1iqüç?ß¾ýë_ãý‡?wØú¤`câ˜U½ß;¢–ÆŽ}H£x†Ûãuüùì:Ф\ lŽº8Ƥ‘Õ>¢†öïÿÇ?þö·1a^þ\C&ŽØÜi¸€@b±|Ín»óû§‰"_G2Ý+kL Q­ëz D€Фž8⦉uq,%ÚÐV¶Ib¶=¶Ùt^Ÿ,\Q õ’ϲê+®÷í¶›Ý¿v¥zy¼O..!AAŒí>[ÒWã˜×L YÀ&EÒž•¶]>}.šúì¬lVqÀ&’ÚÐV–Hê5úýY xúN,Œ~–0j5šh¼ïð  %K$óóB¦‰c~¿„Äò©V#™î‰åœ…ýþׯ·7bÀÅ(?y'`ãul pT‡uàÙϵÔ+¨ìùÚ¯;ÞzØ–ÿÍoï{½ÖëÞ›˜àâßô{;È[=&„s=þØßŸ(|8¬ýÆ|ª@ŽO=Aœ*¨~Å÷¨ï}=Ï'EL$χ –‡Úz‡¤^_¿}Ÿ<˜ *Éiïs¿8ÀF“Gïý§&–µi&ŽBAiüx{ûù3¿ÎÚÝîåå°mÕJ²÷à|µ( €U∷{`M;þ캴eez&Žòz»]Gý÷È;ôS;úK=/|Pd¢˜ fš$Þþ½ã-m+‘Œ"©'‘ë ¤Õâ˜&ŽÞçY›HŠX²×›‹äÚI8`•@ÖŠ#K,kk$óHùÿS“Á±" <=ív‡c¹þòez{=‘ÄYT…(†,q´k"Ãó·Ö‹\——¡CýúuH¥}~~¿=Ö4Æ¡¦i $ŠeL.ã´Ý¬rX#Éj,§ „8àÌ”¤Q:Ø"©Z‰aÞñÿËfmµfeÅ„S«Xq7aHóä1$’,Qä")CYõŽ}íóõ®TÜ,yDJ dI{ÖTLõé½£H¦CaÄw/Ž)q=FÊ:Vµõµä›!U•6Ϊ‹¤w¨j.ެÒÚÊ…8`#â(5ÒiÇHO&i‹#&–lÅyKX>7¸9%aD‘¬G½ƒÏÖ…¬]€H°yúj ­ÄÑ{ TKý7m6αPM…Ðj½ÏðÁÅ ‚èÐÄ qˆâ¬q$ qˆ@â€8ÄÑÉò™ì€/Žx”nlÄQ¥¥[„±ßO…Ò{Ô.Çå奞DJBa(ލy€¤ Ž‘ÖP’*ŽXcXK)fg³¦w&ŽÒ±÷ÎV*"‰³ŸzDœ-uª˜7J¥ãîíÈK‚ˆÓe{_'k aÀÄ;òÒ!1Dâý1Ľ\ÇõÙóg¯×JB€+'Žck kH–HîL™Ö1­­…DQ q%¶G—@ˆð‘„AI@â€8 qÀGëÆ÷uj·Äôü•ÿúõöæï.Œë=þÚ¢œUåúõõû÷÷=J{®ç=5qlLQ­öt‘<¤8þü‹±==‘œ¶GÀ‰£W$ÃÕ:øzÇß+†$ŠâÇ··Ÿ?Û"™ ä°Ðwü-1܉8Š0²¶%˜8ÊÏå3©–EA ð ‰")/·ÇÄÑ+÷|°r˜0–¦ÿ¶fqܹ@Z"ÉÄqê´_€Ho½ÍO]'B p')×½"É~.>?ÀÉÚDql!àqù “ZϬ IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot40.png0000664000175000017500000000731713657750470020526 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ZIDATxÚíÝ=nÛÌ`/äk²ˆÞAà%dAú4îé—)S¦ýJW© d.n•&Az—¾×W8 xÄ£¡dI¦Èç)BP¢~BY|uf†Ã‹ à„ÿgõ︥= 0ö „CŠ`8“à¨îÿóçþþînÿ@yé àÄÁ± qP?ÎëäíÀ™Çíí·o··Ýv±~ªŠD€œipäÙ –ÓV$L4@rpTòÜ  3ޱAÒ½N÷ï>ïËpa€‰Hôa´ú2ž(* €ÙV «_õc›ªb•Æww¿~µ+—êùÀÙH¿"iušGpÄóÅãö pæ2¶"‰ È’ƒ¤,`v²ryùêÕÐö]%2 Õ2‰8ó ùþýÍ›§õëë««§e^Ï£ªr€äŠ£ùñ>€3 qàõ¸ß ¤ê g$ÑT•+¼[´:ÓÀ™‹àˆ€ÈAR=.ÁØQW‚`&Áñû÷ÇëMP9HÆV0‚`!Áq}Ý_æà;eHu¿)Gf*#:É[MW.i °×׫Ã~^v÷¯‚"š®¢ÙõuÀLtSŒ /#8rűëì¹`fGÑ—Ñ¿=÷äŠ$× \qä3Ës“Öþ˜e€DÅ}]ó¼  g.÷iä@É' æûÀb*Ž~_FAžz¤Û®ùv°¸ ‰QT÷÷_¿nžÇQÆz^p8è¹ÿ…<ÔtêžÛÂaö®DrSÖ¡ú<œà }yéÀÊñäQUcç®:üß»¯@Z³Ÿî:>Ì,XvýE©‰gêPMcçÊW„«Î×K{¡<-v~|+¨r2öñ @`bv½ÐNnzÊ×–®ß ¦Öý¼¬]/Ä$@Àá¢$¹o#* {vYë\ƒE€Àˆ Øõq*†eȃ$rå9×Ñs‚xOÿ€;—ÿOUqúÌo0³ $–ùÒnΩyU¤à@Á‘g"P,ÄØáÚíkŽÏ+0ÀF ÷YŒíüÎGU‘¨@€`çÙ†_IŒžªÎü¯¯)ÞŽªb ÀÙŠäww¿~µÝõ&â—ô<ƒ$ÿÿªÿïRö‡Ø±ž·Ë'>VgÔÏåÀ™¯Ü—¯ž+±z89{ýúúÚ罸à‰Ýíí·o··›ëqæt^VAëqlÿéÓçÏ>l>ë}ŽÝîÐ6/ñÚ_¯®à§ Ëòöíêûùþýê3u²(q Ž¬Ç?B$ùÌüjj–ü|¹S:^¿U;8ª ¨nï:Ë—=K²YZp<>®–9HX” ùÀ]U$yùøøï¿«åþ³^é´ž/«ªˆN?~ùòîÝø ©Ö—[á e4YEPäe8ùñ77ñ­aFÁ‘+‚. Vë9(6×W’Í€é?_¼~±ùǪ<¢¢ÚìÓ„Í@hÝŸ+•ÊY«š¤rS†8Ðw³^Æ®/ÇMäÕ~ýöËËáyº}Û²y}$ùýk¶ÚÍó4úA¯›;Ãó(¬¥œ×!@8l€ä>î“¶9ì´ý‘Í nŠz²Þ´µ O·wËûû¯_×—ÃR½~^»â¨Î4¯*²±Sš 1‹ dLpÄ= ºàè¢ õ²ÿ¼ãúLŽw [ý»yù~°ÄþÚõ ”óŠ..úËøœû·ûæÁèß`ëm}S{wUŸÄê=·+Œn™+‹õûþþ}xØö¸á×Ï¿øýK¿cïŸë_oÌÐýŒ „ªÉÏÏ}}s£MÁ1úöÓÈ£«ªwnªª›¦êÛ«ç[_Æ/ù<Ê«ª@ÝÒ§±úlªó8rÇTƒãP—ÆÍòîïe· blV’xÝÍ 9õ²iÿdqò2òyy¸ìPÇP%±-@ràô×û} íQ[ã–‡?¯>»¨˜òì¹yÔÕK®¹BŠ÷õÜ&¿.0úMP»Vc?§P¹"9ý÷kš?QLâ°žÛ®@vU5@¹i¬;¿¢ÿøx¿Ur¬ª®ß‘ïŸÊ_[>OåPH> çe€*@ªû«çmVõ™.ë‡!‹ ’iýáår®@rŸÇzÆp€äÑTÕ»îlï?ßêýäQbUÈfÓS¿R¨øS«€öÿ+‹ÿÙ¾ARUX¹I+¯·*íÇWA}êh‚Ê ª@Æ6am?ap·é¾®ÃÃysÒªŽ])¼tåY‚5È ¸óLùÀŸ!7QæÎø*8òë¼|€¸È_ÐøB×'ödèDÁáá¸ù¼j9®i ãm55C}:¥ (°[MO­Š$¿ß|ÝÇѪDŽ ‚6ä/l57ÕPg÷¸¾ñ1@ý>ÜWãÖ"œ&€rÓTW±¬fWÍ?ûžçq¸Qof[2\Œ?Ó¼µ\¯`rZk*““|Û ‚CG®§šÆÝÔUÓUÕY^-«¦¬0&(˜sC;HVëC'U*ÝÓ«Ç·:É«+"rÚ ‰Š".Õ¨ª<œ·5jKpÀ ‚¤¾áöI»/ü¸ Gµ†ç¾Ô Ù~ஂ`ìç“縪š&œ‘ø…_uv޽æyÕ‰zìI9¬jnªVF«o#ß_U$ñº»v¶ ’±_઒¨.‘kOO[5 ï®ßÏ ¬c½pD~ù ¡>Œc5)åÉ÷î Ì€¶ë¹|ŽýQU¹‰ißÏ9?¾ºp•O`!?Æ.í18¡ÁÑoºŠ¾AÀ^A‰=ÀNA’ûDìŠà蟕ˆa½ « òíc+Š®)ëþþëWÀb+Š]§,É} :Ó&*ŽUÕ:¯#ó@άb¨F?í:***‡}3úÜt4¶"ˆÇWÛkŠ˜©]›žƒsQU“ þ¯êãÈ}ytU<€-J×G²:Oã÷ïš`K…ÒoÚju–À֊Ĩ*¶jõØCl­8bTVôäí)¶Ižz¤ë\ ‘ni,T„VŸGŒÊª¨÷㓘xpäÛ«I£)ëööÛ·ÛÛz¹oäÇ €3 ŽÍíVÿæ)O"X$­í À™G>ó¼:/$‚%–û‰8óà¹ÂÈA÷çÛü¸»ûõk3@ZïC€Ì$@ªJ""Çs¤º_pœIpTA260Z¢â˜i€äiÝÇVUÅ" f ùöŽ–$c+0Û $FJõmަêÉ©*#& ÃÁÑ ’ºo£ûW€Ì8@ª¦«*8Ƙm¬*V@Œq•Œà€;ô'¬Û¾„úÀ]u~·–Î20Nýx–Q‰ kHÞ+8`RÁ1•çDK’v lÿ»0¡àˆ/îõõÍÍú²Ú~s»±APm'H–$ùï°ê„0Áàøôéóçöo‚èßz]²Ä yîu<L¸âhmÛUsm>ÏØ Ñ”µä@i-í1˜P€t—íÂØ?ÅÄ® @fy»]ûHv0©©‚#ú,ªõ¼ýøÀh½/MWg U0´.ð3ö„¯Ã5eð¢A’GYÅÿááï߇‡ýƒ#Ô£¸ÀYÈØ>Ž“±ï €3 ’öÖ««¾VŸ‰àXh€TªQYϽ3 ’ªâ‚¤¹õ~SJ€EÉî}‚`áAâ:4P\Ò˜²ËËW¯..¯¯cyuuyùøØÝ~uõ´´§——OkëÑŠXÿþýÍ›á`¹ºúçŸnÝž˜Œþ2EAÜÞGl×Ý?´ÌÛÛïgæ)Ö›ž¢RXo¢ÊMSCEËÏŸ_¾¼{÷øøéÓçÏ>të±]ÜëÝýýç÷ÉLÔfeц¡ d88rô×óíU…2´ ˜`pä X_¾õ¸º‚®(ºísÉöÇç×ñÉL @¶õMäe®@ªÎóÍÛ«û‡+Ÿ\±ä`ñÉL¦ò¨š¦†G]Õ£°úËjVUE’ûPâýù$Vþ ŸIç°Ç·bIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot26.png0000664000175000017500000000502213657750470020521 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíÝ=nãæ`/ÄË[Þ"…Ú[jS{´´f)Ý `HªlÀî¦Ê ¼^ÈÌÍ#“ÔŸiéy€„¡þ‡R¾wÎ÷CÞÜðõ<>®×··Móô´ÝkG€½‚d³Y¯·A²ZÝÝm·±ï0¨ˆ¦y}}~~yišG€AUÅâpP°8"{Y¯7›¦Ù½ýýþþçÏ¡ûàß y|ÜEl¿oÁÀäJ¤iÚà¨*艊CÀ¬àˆ1ª2ອVwwÛþê|ûf³^oo¯î€7OOÛ7Íããz}{+8˜(*ަyxØöUǾ#À‡Ú¨hš\‰82 Š ¨*]Yì'OßYXV¤ð¡˜Î›×…Ä>de:{È𹱪‡Ð«@TIŒM˜-À,1VÑM¿5vÀ„Ê#‚#¦Ýš5€ €sI;¢òØG{ŇöBï·ñÏîíŒ=A \ip|ÞëÆµ¶c{ú?qÿýÎõ¾ç«ê÷‰î°Ü°Ÿ:88JƒÞ4ÓÖ&™úøéÉ©+päJ`)Ÿ£jàÕðëº G­@ À¢ƒcüs €E6ÔSÇ.NÿyÞ’¡.¥¹]Lsÿ\º°ŽZ+`¦²«2WZ€GÈ×±‚`Ñ µÏÀl°À…ȹV¢ •ˆÊ@|æÉ$‚àZ"£›˜z¶Þêl»s®"`.¸2™ºuÄ€S×(*¤º pv픾˜Ú7¾uÄÆÛö¯¿þþûŸšæõõùùå¥ÞÆãª@ùñãÏ?üA°p¼éâ±ÍÏ‹ ¨!n××Í·p¾A€…TS? Q%ä ÊA2µ" ŽhèÇ*…©Hí»å ™û9ÀB‚#wQå†?¶$98ª ©^'¿Þ¾ H ѰW ~$ùþ\Ét•J±_ÁX@€…GVÅÍÍ÷ïCc77÷÷?Î$Ù[cA¢ `! ÷X€tAÐŽjúnÉîó÷ c[­îî¶ï³ÙüòËjÕ4Ýþzý~ë—0 Õ˜FÞÎ]2õuO »AÑß|\¯oow·OOíÑŠýx¼_ @.,@þó¦kèÿ÷¦ ‚Ž®ÒèïGPÄþÃÃo¿}ûÖÝû*@€LìÂêÆ>Ú®©ñ.¬¶«k÷ùÃö u×T»ßIÛðÇórPä ¤ ’üøÕJ W cƒèSƒ$G5+«zýùëBúÁ‘$ïGtrßVÕ¶_ìî·kšûû÷·çûýÒ€‹’jzmºdìù‡GÃjÕ ð’¹û9ªý®yxØlvï×óK.6@ªuy,£ªHÆÖT¯37@ºàÞFTÁ“ƒ¦Úæà ØæûýÒ€«éÒʧ;UIu½Ž¤ÿ¾Óƒ£_ql›èmƒÝ¡D%AÏëÇï¿ÿúëPtÁÓ¯(ªYZ9Pâöøùñ~iÀÅÈ |}Þ¸o^€ŒÖÔàØíºj·Õ,°ÝÁôáàˆýn6Vž¥Õ˜±Át³¶€«“ƒ wmí[TgáÍ6öùò,ª¨ê ¤ñ¼± $¯û˜Õ¬-ëH€«©Hr¥pì JM56æ‘ì|{|ŽÜ…UI?PªÀȳºò¶ª@â~¿4àêœë’¶Õàø¶¡o»˜ÚJ£Ú±?9âõªŠ¢{\ÿþ\É䮯¼ Ñ/ àÈb°u;V ùžNTÄ~>IŠÜµÕy||2Å|Ê“ê\V]ß_glÿãS¢ø¦N$¹b Šíí9XºçåÁñöu¦žëjêJôê'‚àì†OÏ^E–iÓsóþXT× ©Öäé¼¾W€³W ýi¼0»c ÃÁñß7»A·W][ùz!Ó¯`د||³g’¨Hê ÈH[äsQuÓy‡Ï…•+ŠÝç÷d<8T «HbL¤ÿ7üꊄՊò|¶ÜÝé»yvV?@ª  “geå‚yzn·Î#¯ûèW98òÃ<Û«,ï¯Cñqˆsƒ®D®@Úx_y¼¯Hêk¢Ç¹²ªÙZó®Xh¥9§ŒÏ~¾ â¢íÁp0̽FúÔY[ùtò¾ ŽÏ~]ÁUúè †Cc%c³¬Æ‚ì*–û¾O~œÊƒ+ ”öç_]S=Ÿ¬±Zçኂ|åà˜û¾c!HP© ®/é™8R,!8ârùÓS/ }ì q2Ñ|ƒØësL­P|“ ­È× :>Š©c#¾>5@>ëõOÝàúçÚEµ” CCr™Aâûæ¬?ìsQúúÇî ;Õ Ü¹qªãïäx_;@êŠB€’Ôc"‚@|÷àB‚Dp\Y|Ö¥¸Ð@1€+dº,Àq<>®×··M³ZÝÝY¯ÀÁA²Ù¬×Û­`àCmD4ÍëëóóËKÓD 82 zzjƒ#W(޳ä®,G€3‹±G€AyznÓÜß›ž À¨<«*¦éƾ `RDE]XQ‘8B 2—!ÿ ˆÇÄE=IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot2.png0000664000175000017500000001033613657750470020437 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>iIDATxÚí=rIFÅžˆà\A7ÀÃçè kàèrˆG%3{.€f&2šÉžœÌ¬®î®ê~Ï bþ%1So¾¬¿›¸ÌáÈéßXË_ a ¡¶P@'â°nÿþ‡r¡¬-"XXcH§>Ïëèû!€NÅñõÈÓÓp¿G‡¥ èL" -}ûÒ‰ˆˆA·Þý³"A ‡$ i³"^gø·äçbº0@ã‘1 o,ÃIT($ €Í&Ó·úh©JZI" Òƒ@ºÈy"±:z-y>d´H,¡ €$šHD–@¬V‹lN ç"Ñ׊²±بHô¬ªRè‚8çþþŸ#‡ƒnKŸO +Љ8$A|ùòîÝïËoß¾zõâE¹H¢A‹ãpø|ĉn³‰NßE‰Âº^‹D_~~þñãþ~Jvko!âèD –8¬¤!­$÷¶ ñ„À–#óáÈÃÃð P.—vPoÞœw0Ж@¼¤a•¬,ÁxB`*€Š´ÞÁÖÚ³¨÷ÿÝnE ÖX‡WºÊŽ}D„>HçÔ­}Sïå÷ñ–ü½ÿ?YÓqírŠUºÒÉ4ð @æL–8¬$âMÛE ˆ6&Àh‰Ê*UÕZ8ˆ@èÀø»w*¯Då•¶j‹T t²µ„du¸ÙDe•Ši­r=‰x³æ@ƒѵæ^¾‘g…2µB$u…2W‰ ,(™ÙŠH¼$ Û÷ïoo_¿ŽßßÏÔÇó».µÄ@6”@J“…‡ÕÊ4O}Y·ÞóX¯ç‰‡Ó&6Õ[·KçÝ>µã_{,$Úñz¢°Úÿþû÷ßß×­÷¸¬h¬$Ä;qTÇÛ¢aêó´RŠ*I-QD[KY¡ô’«!©0¤ÕùÔ$‘M,–`¬’W6‘ÌDJö!X-qDÇ8J“†-‚S‡ŸoË„b‰¯´´µtIkëƒé C¡dőƩ#Äs~¹´õcý\–P<‘DRkö³° YèÙHÑÄáuÐVïÍžÊÞn ÉN*—¯÷J\^ K.ïuöh˜ÒŽ'»RÜê°e°_‹CO°:òèúè‚A«Ã¯%’ì´ßÒÙS{K`CÉÈ5Æ`McŽ&]*Ê®4Ÿº@у‰¶{¥¦èì)’ hV¥ƒäV©J' +yD×aXcµöÐÊ‹$VÒÒ")=µ·u c‘d“Çxüô<:‰D÷°ÊŠÂNi ¬T$µ’ÈÞ×y €„ˆ•<´8¬’•#)…ü¼Ñ]vKWÈû"‰è±}Ùk÷ºÎqt(«ƒö’Çørl6•<¿t€ÖëÊÏ¥;æèŠøZ[­Xõ’ˆîàµ(,ÑX¥/’4'’Ò1O ÖóE·Q÷œ²¦Ñz‚ª—D®—´¬„aýžK)Ž@`µÒ•·à.;Xný\¥{Péç÷DRºù£•D¢³¨˜ž‹@ºŠH¶ÃÌ.Ì&©bô¾áGEý{D×{èõ1$Ð|òðJWÑ•åYdÅQzU6ÉÌ%o•u1â@ Ý'è&„^é*:»j®M£çvÔ*ey³¨´8†Í/‹„w,h>ä÷´Š%èùSGV$Ùõ/µÇBH  {¡xñnª%µ˜5F‰wâ¡·ÎÃ:‰2+ï²µ&‹òý‡ƒÕÊûN.óI†.ùpäáápøxäñÑî`{)aI;—@¼±ï|ëßI¯mhv=LV Ößa®õòz– Öú¼èV "›@ôã­×¡Ç‚&aè7´õÆ_(u:̹Htð¼vɪüXÜóד=ZÊ_8üúe ¤vÉÊÚ‹lmqÈç§4AxŸ#y^y[$±ÏÍÒŸSØy"ѯþ†Œ^oö•wôìÒY*‘e…ã d©É:iè’ØZŸ ]z*}ÿ{Ñ‚Ò"™úyYës ;áë‘§§ñÖJ(þ<ûÆ,ÃÚ„pê º7ûj®£_K×­Òš•@†­VÊ’Nmqzczk˜¥¢;të‹”|~,qX·[Ï«K[ñ„ºT"’ÇÃðÆ–¶T ñû×ùf#?géÖ%Ö9¥ë>j#Ï'ËÉL Äû{Y›*ŽÇz¦•ØZÇ*UY¾õþ×ÉCμdo—Ì–NˆþB‚Zoì¨ʓȴ7¦UÊ={9‰”nY²T)Ë›Æl]ï­X×IĈwômyGÔ¶xtÇ­„']óJÄÖë¬/Ä ÔJ$õ…“+eMH4‰x‰`îäá•®² õõÓg›ÕîÈæ'ýþõD¢¦Ò/hc‘Ì-ÄA‰êÁ~ã[°b½áךn8uEºw2_tÛvO ÙWööìzoZ¯—<Öž40·x²³¬´HôçÇz­ìçfø¹¦ 3{¿¾K‘Pˆ7[Ä«ÅFÛ¹“J¶”Sº2=*«tæ-ð‹ºg÷Ä*GéØGY&éè/f77ww?÷Ñ“TÊB²€¢£³7›Ê[Ðd}Ó²fq--kVVt[w-”Ò……^Ç;U8Yqd“‡u@T4)õJiñ³¾@LüÞq©;µD¦…²vIkêî¼µÎ>·:tO4YÁdg]y¿•@¶.ý9É~´4j)² 4õñ’Iö”}\íuÞtÖøù ÓD¢__‹D³n‘M>YqDgí…hGm ¢[; )'OZZdQq”.tÜÖ$“ìR–08P  #±Xñ¶DÉžµnô—m½iÆ–8ôz޹v F4—…àµ|2:*]Y¥¬Ò•ÛÞ‘°"’±Xί÷JcÑ#g=qd·RÉž´H’€ÝЧ–P|±äÚ蘉µµIíÍ£×µNl½Æ_`Â(M$Ùíѧ¶Þ¬ªè^Y­”VÃ\,í°²âðÄ3uÚmt˔ұ :v€Ê߈K·Jñ¶{/m§&,XI$ÑÁæè¦‡ÖëɘÅÜ¿¬$žh>׬¤^²Ž`ÇdOeÛº ²")M4S¾ÚÉ -Œµߺ¨Xïˆc¦Ž¹öó¶*ÞA€8}ÖKdˆG£¯Ë ^€FÄñü|8üú5´2¾0lòv>î ×{[SD܉ q4š<äd´A$9¬#=u«Eâ‰q4*-¹‰íîîçÏkç¼|ywW.èL V;N&'AˆHnnno?}Z-°SH+ƒèƒHD2è.B9‹%ADе@¬ÇKXç‰cÜê„rº<¼ŽÜO'-¹l]/€U’ÆóÒ”´VIk|½\ÖÉÅ’õxXE$cä'˜ËbÑ·Ûb°JbúzK$:ù@UŒgM­µðú`¼5¦¢Kcöã`Ö$²þëZƒé^¢Ð‰F'€~‘møuË_v%’ù_ÇJ.Ìò‚~Å!‰ßºÌ_ 6-’å’Ž5‹  _qŸü}ù¼E$ФHÖ:P ؉C„BI ºÊÖ´h+œ „1(Š\~ûöÕ«/†V?κ6Štüѱ/_Þ½ûû~žX`£â!hXc!rûóó÷÷ˆ`·âh‘è$¢£ïÇ_ L}¼•@ä~º¤¥K]–øXݱ[ý\Bbö@çIc8çTjÒ‰€¿\‰$÷ïoo_¿öBI \…7{Š¿\E—¸X—¡dUðOR"¡„!ô³¯à*l-³ …¿ „ÂJu([ž@•ÂQÐp†%k äã‘ÇÇárm¡ &€NÄaÝ.¢öë‘§§¡Õ·K[*ý8DЙ8´@Dßÿ0´žP¢¯ãÝ‘ÀFxùòîî÷YZ€ý‰Ãj-¡LÎ…Qz;@?âБ6*-k¬ÀF¹½ýôéï7ª„\Ö÷“Ëòm  èD1—@¬Ûl$X¥+lGš¨8ôý,8`§‰Ä c"°软²Ñ¥/$³Ö @¿X׋X²%+;‡'„[J —ÇîÆÓrÏE²T2ؘX4"=¸в@b“>¬ƒãgþE €0Ü1¨`Úˆ—$¢c‚”²ÀfErJzšn¹@bIqt.IVi*Z²B »M"—ñ¢§÷"DÊPòºž<"9ÃK ˆ`g"™zŽâ@(®åH[€"Xi)a”Þ;aê9  Ó¤P»Ÿkë’x]™ƒ©fFéíÙD2õ©B@(;rKµKKµ¶mŸ«ÃGDHíÒR­s@–ê £¯cÝ‘ÀnÉRGÌFϹÜ!8òðàoRW>ÏÞ’ÇL'fŸW?ÿuqX¯‹Œ½+jT$ˆv'¯Ã ¥ö |ÝYÄ¢[}¿±H²I‘b1°Ž˜­5?8Æ»fÑ?„QéˆÙZƒðç°€•¼Ò•>!Î+…åâ(¤îúéàuÇ/­7¶a=îôʇÃýý?GÖ+©l(L¦[k4.ŒÒÛ­ûM„¿ÜQ·_ÂØ,k­8÷~ýzótÔó ¢ì6ÔZq^k~‘Ô›Æ °ÛD²ÔŠóRzYH°Ûä1uÅùº"Yo+€»ÅeÎ<žk°» ‘ôû:Ý' o°{k"AŽ0jv¯-Îñ€ªBáH[€úüîí\_ªÂEIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot25.png0000664000175000017500000001267213657750470020531 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>EIDATxÚí;²Ü8E{+Z˜ڂ¶¢è”¡ Œù¢­6ÆÕþ3ewÈé%ÈeÔL=Dˆ $ðÿ9'bšÃW,U\ÞL ó·ßàÒ<Ÿ}ÿc’ (7Ž£œ÷ùAÜÀEœÆRB¢÷!¸¸ã˜ûºÀ©…ãñøúõñ¨÷ãÇ÷ï?~ÌɕԄá8…€üûƒçÓ„Áö··1¡è?¤…8¡óÈ…äçÏ×À]s$*<Ó¯ 8µ€˜ãP!ñˆ Mx^ͱ´;„àTRŠÒpÿú¯†¾¶º.èàñ°_yÿÊà Î~¢‚¡ŽC…8Á€úù3+̨½? ' C[áxË‘Ø÷ÑŽë¿.§v *&êQ€©%Ó§II84©­Â1 eµô‰Žeš¨#â›0SHÆj_yµ¬¼d»ñÚ¡*¸-’ †u$Ô~ ­Â‘ç\ʯèzŒ|aŸW†=Š®$Ϧ£¡'.M†Çó…¿Ï-ãs0!„f¢ǵç;@X²¤§ÖU í¯á¯ïçaÏ.,9•˜Ó(7’Òëó:"ª£ñU*<ÑéáÐý³õ|˜$$aÀ±m_EOHüN„ãEã€ÝÖ8Ê›ž«¡&O@6¹­:qïúøæLÏ!´Ÿ'=>®\/Ÿ_“ëí=ßÃëèI_PÊ=çéù«£eʯ÷ï+; è§:Üa¤Ž`¸~¬ç{.évXu˜žï°Óyˆî^ëIBÿõR=ßU0ÞßË÷ =ß`#áØ«ÒÔÚ?ßx£wÚmŠJÏßÓó½VÛkØ·¤æ¯¿ï„ú÷Óó{ŽåóçÔD꫾kç‰B^ׄãñx{+=•?WHú'@ü¥Æ%ú†€ã,òê²sîPkwøž3x>ß߇_TÛ>Ÿooaݵ<î¯Él’ètúªïšpèÀÿ¯b.Ä ^9g’ ‰þ}ºãŒ‚Xvœ”`¹3ÃßI¹"¡¬Û ÇÕcãt:·~Qk¿¿ÿT£ÅŽ=¤m?K|ôù¹C±ëŽ9Œ0PO«¾k¾ýàT8¢ ¤åµóÇËŽäèŽ.²Òýmû[ä΢&&¯×ž²ç ç±ýTXt›O¿UaIs$ÃP×°ún´þé,¬Ò¬¬ô|¶- G¿Ô'9˜ìHjO[H#Ÿõsm¡Ž" ‚í·nÃyâþ˜cQ‡2œUÕR}7&Ó-bŽ,Ïq˜èãÞþ0ô^Ï‹MÓ¯w"µ;ҾІ'^è(îÛÀ£¶UAñHíù-E§×jR±¾ë=ÊdÜ¡ä[ m…ë4öo j9.¯§;ܙںfeÝ„µªåÂî¤ÇBS!Gáøå}?”eN£ÒÍ¡xBbÉn]Yž†¢TxjŽBCe^ŽDs(þùý{ê”ò…Z¿’èà…ž½(Þ¡ÛÝY¤+^rÜsÃý¾T<>RàÛ¶ó…d®ŽeŠè¬­šCÉ…¤æHZ“ç–¬ûm U¥´¹Xûÿwû~F!™v ‡¡žü^cå¸:X0OŽ·9Žv§1oºoÝ©xוžÏrZÓÊ~`êúfaÅ÷s<¢ëBlŸÇTÁØúùg‰TŒ¯y>YXxRÁض‰'ÕÔÞ¬ªZÒ[GË‚Á±PÙÜéÁãÉö4i­+ç5´•ç8¬6VyVU-ç¡ÂT޲P0 +ø×=ïÝœ œ6dµM,Û ]åw{®£êj[I^[ XZ™žÎ²šzåu$:Ë*ÏaxÓuÃßchJ׃¤+ÔóYZvغ¾#_‘>\·ráÐ^^Øê8°Š#Ù&Æ;ÍyxÓs½;úVáP¡èݯ “Î ÏÑŒçDl`ÒPTk­+uúx.áóÕ}r å]û­Øç«Už=aYZHâyØÔyìãÖœGÏ,«r.Bvseaðo­Uº{©ÏÖ6/¹îå<¼"‰ºÕGþxú²Z\= D¯é<údŽ×úš×¶¶¿¼#AH`Uᨠɒ1nÖ•Ôí’Ϊª…¦ÒœCkµ]½¾º°L½þrNÄŸ•eǥϋÕ{Óþ!Z½×s(í9uBœWÉuxaûºµãýN’µëðÂgžSXUXÖ¹ÓôBWê@´oG>«É ]‡¢j[%ÖîHüÙYåYYeáóH*hVr¤$$cNÄ eéãüú„CÀnT zÏW¿.ï:q °iîÃëGaÎAk3¥m¤|‡_ZgñÚB¢ÄùÀ\ž.¨ ïl,ÔVÎxÓ‰ói½éõ{³²ÊÂa þL8tß›…UË™ÄÐÒ3Û÷Ŷ*(½!+¿âCM0Z¦þ¯¿†SÁq‚¥[ÑŽ9yÉs/tU~=ß!•RK(«¼.e|]ˆï@,”Uv*ñññ~ ê@Ž¥äçÏp“°Œ#¹«³°P¬NNXúuò×­¹)ØTxê¤uÝG_¤^J$užñ‰·ò=^wye{-’V!V!ñ‰·`0JI´ Ô~ dŒT8¼¿kDÏwYË©è@^Ï-# µÏgû…Ÿ÷Xh:rQv.õÐP. étÈy9O8¼}–Vm¥º7k¬µÄIÒJ…ÄŠ4ªó( G¾N„*¨-umà2huåíë6®{ $ñýN§G¯å ¼Ï#¾ÿ*”k7ÉmY²ÛÛ÷‹&F'2žœ®õéè[yîõH9˜r%ÏÙä³°Æ;¦9=¿ºò…ÃúyØ¿oË©u=HßÂVg2e]H[•ßrÏöÒŠôtÛ¶Þ#nùæÍûÁÚ÷ozN£,PÞ3p C†eឪšûù­?ÀóùÉ”dºW}7Í1”z¿öUÛ‚B?tå÷±ë*]:-¢«˜æ9‘á:R­¬a‘õ>Ñ«¯Dÿáê]èÜdìÝCWžS1Aõ„DAßÿÚOïuö„cTH¼YN%2^í6ݶ— i+i2§ZoKhÍk•—o×ã´vÖÚ¡©Úz¡«.,ì+)²Ü¬¡{ µÐSÍ‘ ב•ãôÏgmA8*VÔýÛf5y ôÒCž£(ÍÚÚr?LãLWì%ic)s(iµ¦5Fö­Þ|V!©ÅØëŸH‹PçN¤< NoDç ÇÔHïq{åZ.õ¢ŠQj%B,¹™ÎÒ²ç·Í‚ª;Šé#ÞYR?ý÷·†þöÃë‰~uB¬û˜ãIºN$:–oßJëpö_çÁ绉#ñs"½Bâ/@,ÏŠòÏK–”/ç8t–Uü"§ÉñÚû³ÿ'EuÞñ;Å­Ÿ '°×qù,7]Ài!Åôïë;w„c'GR1!Ÿæë HotßÉLé®ÿÞãR½=Òï\Y®¥íÑ[ãý›2Ý×[h¬¡¬ù•¦]'¬Äô•êíB2.(º²½\‹«¥çzKµ_ ÝïÎD¯gŸêÍ-‘±ôr#}ë<ÖZñ+ IÍ‘´¯ÃðïþZgü<åЕ瑃‡®Z…%w$^m«ù ÛÊÄ{ÂÑZ2dî¼ð­¤×L¹‘Ïa¬%X[½LĽVd±5ôãÕŒª;”ez¦û×Û6°ÖsM]ñº¶€àL`}ñJlçxB…Oä –ÔªõþóªšþÅÓ¢ƒe‡2}¿|þ~gлҴµãÜÜóÖžÇÊXØ’òzµnlÇj‘1m÷ÎC¤ÕqL }åÂ2oÛ/héuÎ]XwdóÎp:G2U¦‡†Öa¯|i¡8¼©åD–ºCŸ*g…qœÚYG€Ô¥åè§:¥½„mêë1› "¶À0¶¨=ÖøÚ×ãß„šyíp–PºÙ:GbÎ):ZijWZ0·rH¹ó0ý¨Y·ã졘­CkyÇÃÖq¨ | ý;¼-!,€›’ C¹ñ“ÿ|àÖNÃBR¢Âa|À´T˜Ó(‡®n†ÖÒB@jNà2„’ÿ¼ ð|ZÏu€qþ}uë°0ú2#IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot22.png0000664000175000017500000000530213657750470020516 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> MIDATxÚíÝ1–ÚÊ໘ÙÇMÙ k` ,Ä©rœ;¾ÁDÞ ïNF=-1$ñ}ÁôÑ»J¥ÿüÃ[;þ_÷sØèo @`ÜSŠ`XHpÌe¿ùq‚`¥Áñãìx¬CŸ§u?A°’àøuv<Æøûìz$`%Áñ÷¬{Ôåãr…ñ笌ÿ]H+HÀb$ŸYu[­ÒˆÀÉcÜ•ÊØ 3 Ž˜Ø#(Êö0Qa䊣 Q¨8 ¹rˆÊ öø˜øspÔ#qÿ±=€É'B Û¾ 9Z/~··ZÔ‚%ˆ xz`<ûñ­àZz€Då1t»$µfz®tð´ ïÙû]Ë1úÖël­ãÈ÷ËÁP;m·v–>ÑÅDÕ:+èUµ¶iõBZjËÒÿþ€Npù“l>{èUÉR'¾¡A’¿Û}|Ü^·Q~®1xOhy…óí=Œ? uìëXË„7öï{·ÛlN÷?º1¶ÿý÷v `öŸˆëû›öñZ'ºÚŸ«G‡ÃvÛÝûóóp(ÛµŠDp³ ŽW“_û鵆QaÔ*ÁÌ>@†ž”O#uVд˜ý„e]Â<Þ—¹|¡ÀàyÖÊè$dX XùÌ.@jß'Ñ ×fxóÉë;ÊÂajßG1õÕa˜iܾÇ뿟€ÅÈí h}C^íû*âôÔ|ÿ©È0ó ©©õRòï#(baܽÁ§·Þ{š+3 ’Öú‘¨8b…õÐÈ ì¢Š *Žï/’Ú~câÏ+­‡î'‚!¨K7Ö*œÖíÞy€É'üi¶µ®å4t"*AÒÚŽkIåÊå{—aÙ¢77tô7ʳ¶Õ*Š#"0J¥s;XòïÉ:ìvÛínwú€ðógwˆt¿?m7òã‡ýþrÿ§ñ´í€ªU ù,¯¼•ÈØCiÌ-8úyÈ£*ˆ$%¨.ÇþG¯é¿˜mØG>ÿžá® ÉEî”Ì÷.“Î<ÄD bÝÑ£*ƒP¹âyþ„^;L,z ë¬@ò!¦˜ØcÌÐ ˆÚïóþãyëõì ^€À'ÇšÔUåCZe{Xe’(ïoèë¨OèšèÀ]ršà/'Ð<ñßê]\öPb»‡Ãççåó€ÇíCOý&w-"8â0SíöÖë*) ‹–|+*ˆR™tÛ¹_148®_Wë”÷©‚à»Ï @Ò_'R*–ýþ2HNë‰N?ï]çq]¨$VQ”J¤_”+'t=”¼`ðQ¯Kp, @.{×—ÜéÊ{ÖÖô/ |VUÂu€äÉí³¶òþsóÞ5´$ÑÃÈ|>«*ŸmUz$_Ÿµ%8V^‰´‚cHårëñã0KQ1Ô.r˜'ü¡WΫU$—×ÞÓlàÅjWá­Ç£kl³€™Hn–Ç?õ÷Ôä«ý–Фë¡xG$—cÈT_(U‚ê¾u"Ì\­òˆ "¡µíoàÍ‚#È£¾r€•W 8–µ,‚ÁÀêDÓ•‚€ààí‚£(@€‚Àê‚ch ÁÁ€à`526X€ÊÀùøØí7Á €ÕÙlºàØï»I>¶c¤à8.ƒãxìÆ$Ýí÷ÉÔ—YD³«u`€7­H£&ü{'~WÍàf LýM‚€Å˜ºÉ­iÀì¹ïâÑWc8!,uÿ<70žýøGï€ÿ³ã±5úžÁqöë¬Äï³ãñÏYÙŽÛãþCŸGp¬,8r呃㿳z ­Hòía,<8rÁñ÷ìz[‘´CÀ&й=¯y¿º{–ûG ä ¤ µŠäÞ€ðï `ö(b’ï1æC[Q´^—Ó„ Ýd•B¾5÷ò¶OoþAãÞ âúyÊOðFAR«8Z÷¯µ%8Þ$@B^q^»}lp€7 ’ QqDEpÀŠþïåy™×û[ší*FLð*MøsùB)V(¾Ò`íŸüÞåyX”ý¾¿w³ÙíNÛÛí=+së›Öšæ÷ñÑFI ÃÁ @ÓfÓF,žŠmøRTQDE |YD€ÀÍ¥Y­iÀÓÌ­I­iÀÃi–ðvæÚœÖ4¦q:PÆöBxЄýè ß u€…ÊܾÒV  P((@ö?oömê5 «IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot35.png0000664000175000017500000001073413657750470020527 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>gIDATxÚíÝ=’ãØ±†a-ãrf½…1¯)Wæ,¡M¹cÊ–5[Ù[‘3Æ]Fݨ¦N€HœD&Pd‘Uõ¼3üYèó!ÿÿòØãû÷×ÿ¿¼ø%ž‹ÿüÇß,˜€gY}ûF˜€4„à³»ä¸à¿Daèîg¶…›EàÓðûOŽ/hg…bìÿþë¯ß¾m?w<^½¾" 9|P‹d»ÐÿöÛ«0 ¸Þ¾ÿñãŸÿ¼~þ¿ý6„fþúJXÖBä/w&sõTwüÕÂ…# ŵ`\?/{üìv¼Ÿ¿4ÜY8¢0,_,‚LX¶ ÿÚ‚ˆÆËËÅY,’Þña¹ÄãñóºSܺ2 )qÁÍŽGa9jŒíXø£¼}n¹ä9· \!д8ª…3[ˆÇžY×Ál¡û//ÿþ÷eûZšx½…"Ïž?ªx~×ç?sµuø²Â±Í‚Ú!Ädz…zkyd ÿe¿Šhq,Ûs¯¯b1„À—ãh]ÅhI2,†ÅˆwìóÄva_/Ü‹²¿°wßkÑTÊŸ~ÿ^[8G³À\i>ptô×~Ì¢r-³ªÏË,œ~ÌäØùˆ™xG^~ò|I –¯cñùc!ý¿ŸÌ,Œ¹Å±AO(²ÊxÝÌ"ŠY^Ç„èØñÅ"ÙY\>ë*ŽõãÙýxý­TÈ9 ¢ÊæÊÏû¨…²/tYp~+d„À'c›n›×e¼îg1†­€ì[ ãy[a¸|~|¿ìüŽîg1›nI7+¬Š‘¸ò|"‹d¿?¾ÿxýØ­#¹UEúñº”ýtá̵å ð4dœºM³Jï*‹j+ ¯çpýü±?¶ûwðãy1†1ÎwÐmª˜ G¯W¿N¥#\ð‰\Yûá¹ëfm9l…âèvýþYŒåh7ÞãÂÒ«”ïþ>™EBH|`×Õú? 6×é·¹0üø‘osËåòþQ8Æ6ëUUßJX¢Å“ï_Ç„* ­ª#Y„œ x: c½0y¼]8öˆ±±]‚ò—÷Hõ}ß:?¤k9ZGß' +À›Éb·–XçÓW󬪹p\[¢%R Éøœ®ÅQÝ៙WÒ«3ÙÏÒŠiÉ„ÀÓ¹ªâuv¼jb¸½ÃÞÉ£Åq K$ªÊ¢8ïÚ‹ï·oÔ1’^–W€ãÊŠd®˜múm ž^RÇ£k‘l-ËB|+a=j‘,¿ç¼Î¤Û2%Bàé-øxîzY[ Û:Ž\@ºB2{^. —ó¹õïî£1’JHº1‘ª—Ö½]›ð—,°Ïçu±;îv!Œ.¥! k!™¹¢ºBåúó¢Ð½5fP I¾¿_GÒ-8ÌêDX nTuY/§þà¦($Û`úY‹d&XouÕuŸŸu/®,’£u4G-x˜T½ŸÆBo{^Å>Î×è[‘™p\W¢ßã½û~Ý™ï™ðfû™¸‚<’g eGÞ¢ãºùaîÒª-“¹åqy]Ýký½î-$µkk"cwf; ÀèZvÔ•Ôûù¶•ä=×Öžp\ïÇJ6ï£[ 8‚ÏÝ,¬·¸÷bLß—àÁ2¿C¯}ôóý,†’VAöe»~“<«@ÏêPâùG `»¿?Ÿ£[©ž Iv¼;3¾ª €» Çváëõ¾êZ YEvæÚBÇ÷ cð¾TU¹†ºó9n••ut¾JÖÚî࢚/\³;à·Ô)¸W Eœ’“¨Òa—˜ËÅ%–µ`ÙïEÕuuåÞüûW-OfçG@ÜU8Žº^²,¥nBæj‰}[ dnd3ѳº”jG_höcGc&u·ßyòBõù®tï.,Ûæ|ó™àýѬûó,Æó3á¨êPb7àÌÂ9ÚkêèþÑ,¯®T1(óA<Ìu• GÖMöh¯¦£1…L8–ç箵Y×ÛÜõÓ›aÞ­¬¯¾ßy!ÙïÞ›Y²°Ül¡ÊîàãïÙ‰zu ¡?Oã3Ë+ k+4YÓȵÀf߯ëZŒ½®ªy ð0×UuÇŸÝ×®¬ùu‡~töx÷ùÝæÝ:Œ~¯ª¹TYXÝïéŠðfA躮ª–%Ä:¸ÛÍbšÇ ²Bv>gf–ï}^fqÕ1”žë®›þ»×½wïûøàÂÓ³@¶Ç³,¡}WV5¡ï¼PÝ?k™ì ÉÙ–#ù À¾â ð0×U\¸³ùqá‹>ú#È›þÍcGë$b¥{õ}»mêcŒ!³˜ò¦‘o›i^ Ýú÷sE¸ùD¼µE‘ÕKTwì¹E²oTó,ºþ²ï›½~NÝR¤÷=Ö‘T3Í!_ ·–%OŽ‘øJHc¨½ìÎãz!œÝ‘gÂVùø»é°]aéÔaìÅLÎf¥eu#U]‰+ÀÝ…".ÐÙñ­¬+ÅãB˜¹ÂŽÆDú–Í1×ÖÙ ƒUK‘£1’øý3áÎ,W2€§seU®Ÿ¬Î¡jÓïгAV‡±W§±Wçq´`ï¬d }Ö‚%û½Þꪀ‡Y ññmåõ¼WUÌÒÊ…$«‰é¯½Jñº;î|{ë,®L@âï…ãìïÿ^\í@ƒeÎ5naqtgœW-<¶>üJHö牙w±CèÆ,ºGeT1‘YVÛurAåªcx¸R¥‡V-;ªn·ÕÞ{*ËÒ:×m÷¬…r+a©…tíÌD°ÀÓ I6s;‹Q,wÐÛ×÷\Eó^NÛJîý:Šªéa·×U<~mQìuó=+$™ÅcDYV–+ÀÓX yÖPŒQìÏãÈbQ­û鯙EÔçqÌR¹µ%ÓÝv+ÕÅ<¼;U/¨£½ª¬¨þ ðsuYIw¿ú>g{wÑdŸw4ÂÕàHo¦y.UK’^úl5sýèèÖnï©îëoséZ.g›.À,ùVõrzëLð£•àYÖV_Xö…1ï\Ï¿ÿ %Æ’ª ƒð $.ÌsK¤®ÓèÍâ~kÖR´œª9U $†þ~/Ær´›oÃQà‰,·õnª[œ›÷ÏÌ󨫹ÇÌóÊâ˜÷¶Ú¯ƒ‰û,OcÄH|^w¢`ÕMvd uƒéµðUÂrt²àm·[Uï|»+ÀIU‡±®ó8Éþ®…ñv!©,–ÛÌT¿Õàªøûg‚¬ÀÃ-~–S7«i?Û¨²8Î.Œ÷ŸPxn¿¾ÊBª~¿³ÿßB€¼IHò˜Á¬ ­ž¨WÕ9œ[ønU÷poáèžÿ¬}ž•%æàI¨ê.²;à£3Í»ïma=Kï¨Ìu·' ž\ðð…,ë…•Í4Ï‚éãõËûG×ËúŽú«ÄU®ºlæ:ða,̵²µD*!9ùªB²YW>ˆ²=¾®S¨]YûoY $fE}µ¬¢£3Ö]¹ž^Xú3ȇ ì[ ÝÞX·”ô¬]j³ÑÀÙïìÊðD®’ÞšÝ!G}teeu ™…ÓÜÔý~ÙùÇ÷{”ÅS<>öü ½uêì¹[©Þµl–óy_‹eûû\’¾}ûå—,fÑIÎ÷Å8|Pá8ZWqt~Èb‘ìÏÃ8>Ã|.$÷ú½^^.ç7\bµ°ì  À—–n Ž,¸…¤ª9?ñïØÂÝ]؇P¼òãG-ÝßÓàËp¶—Óñ €Çæid½ªúç¿/ÑâˆÁù­pÄ:.*صXò¹U÷Þ·Í,?:k¼ïª±šïß/B2>?«£¹µK@| ªô×ÌU“õrª\[ÝѱÝJ¶?ηž×qÎõ?/ÆŒ\Y¸²šÁëm ”îLñ£ƒn;¿ãÖÛîïù¬u+ðîÂ2[P;mâ³:’m~~¼šXß‹±Ìz}Íh>¿#ÆTŽ †à;€K·n$små³™åsWW53<}ky›%³g¬Ÿ7ÏÞáèN¬,„îþVhöc.Y/¯³u*[‹¡—þ Äpa¬]™Ë㣻²2×Ö"4ÝYåg…£·ß±u,3à×Y[þ%(…b+c!ùõ׿þuzYˆæÇŸUXÎúð÷²˜fu[‹ «+éëÖ¡du.ÙßeT®ŸmàK-ŠõÂdfy\ ÉõøÚ—~–oß+(U¶P?K«ruEaéZ,·ÝÆÏëZX°caŒoÅ;èÜ¢¸~Ýëó¿_ž·µPÖÿñÇ¿þõ\α:ƒ÷J½µŸq~¿÷ù÷úݪ^[>kj+ÛýtÝ·@†p K$ ÏZ0†¼ºT>Óà¡[õ²ºWo¬{]Wã:ß™üþB<%ÿó“ë˜F&ÙñùÂßÝÊ‘ç?³Gò(¡yÔ Š¬-àS-Ž_~±vEeÂÑ’ë¶èG„fûüϤý*mЗvñ름øÐ ØÚÂÂñ·¿ 똰·vY×e1­0Ìc&Ûã1Ʋvy} ÏÇ fmÅ1àÞñ.ÿ`×·y–UŒ}ìgcåé½1K«l¯÷—ý¨×#‹øpÿ`£Å±¤ë^ê d›¾»_÷Qí¯-ˆêý·Ÿ7Ù-//þù #$Àø‡ƒãµ-Ž,ûªûø¼${ݵå1³`üe?‡è©<±ëêõèõ` aiÄØÇ" qÁ¯·—¬ªEx®³¬â~îÚÊb(b"ŸýÆÆßxz×Õ¾å±ÍÂÚÏºšµ ŸãGVU´(–¬«uAav|[ÙΕwb[Ç1Û_,µë*Z$ñŽqŠCùã×…}ì°·0ª}®x df1,õ™¥›(VB2g4ç› K–U•Ëc ä:vb´*<ĉBñúš¼ën5»¾Žý‹pŒýºîc½}­+˜5e€w°@fBб8fYT1FR¹²Æã±ò|ÁÿþdÙÆJô%†²~Ü™% knqÌZ–\gMFÕ²$º²ÆþòüµD¡øûOöZš¬?©g܉ÌÂX÷Ä:’u5¯ÙÖƒÌê>²¬ªL82!ñw€;Óµ8öö×Íçó@êÊôè‚Z»¦ÆñóØZ<#¦r9?Y¸»€\„cÛJ$Æ4¢E’Õ…Ìë?r!™(Æn»y·ÞuV—Â3x%²÷±´sŸ J–¾{]é>Ž~“Ĭ›ï:‹KÖ<‰lc!ÑÕ5Oß­›"ÎÏê>¶ûc»¸¬Ä<à)dXáÈb&¹¬ë:êASsWW>#]Á <µÌ&λéö¶Ñ5µ—­5·@XðA-’mo¬ùÌô¬;oo&:á€OC´H¶u"ó˜GoFzÜŽ÷÷»À§µP^÷¶ÈpUÅýë˜IœHH0€°¤YYÒn¾,¯Ý¢.ÿŸoïõ9Ïöý] pãô^Bâ—€/* g-–£Ï«Þ?>Þ=Ÿ³çý¬–[IDATxÚíÝArê¸à,æîãN³ÖÀ²ž¦‡TÏßø î¨wâ.p>XX&Œù¾ªŽŠ` וöŸ#YÒÇëÓuå+Àö×]šóã¦@(oóì÷__û}×__‡C×ÛùïÛ”ö~ÿÎáç<êsáIÿ[ûKŽgU‡Ã÷w »Ý1(jÏGÛuþ¿F°LIþþ£¤õû̪8¢¢¸VyœÇáÐGy\{ýTEò¬Ê@€ü(8r@L—+Ö×]«H[!€E$`*.+¾m$°©Êã¼’¸6æ‘dº¢CiYúB/8 o¨uEÕ*Žë˜3™ùéÝQsA€Ü%@ò…¿H,¿^±äºµ2+ à¨Wq»n[Å2ÝÕõÓO £¸ ŒaÅó<.+áG™`85Fr9bÞÀ V ñ8ž/ÁQŽî ¯0r¥2÷ç`åA2u¡/FG´ã3ÏÀ›HûÄ¿¡üº<†"@6×Ǧ‚d*À›W$Ë”àx±Êâ1A’ïÚºÿ<V^y–ðì li °êÀ¸=î(Ëup§àXËûÞD‚àa±1u;ìqpzî~·‰-^6]qÌŸéÝú¹à%‚£Á¼àç«ÛŽIË<Œ¶ « rá/kGµlÄ4%ÏèÉx0Ì=€WyÕÚcË¢Ÿ/>Vqävl_m-ªË±“ º°V õý6Æ÷oÜW4SJ{`àMÅrãyùñËåÈûöQ’µï9>¾±Óåãñ®°Ë­f@ºPƒá÷ïapÄã(Ï ©Š¡tEGÙØiî¿C€ŒV9 rÔÚZ¥²t€\V×+”úžä·ýœf˜4V S]ZSA³t€Ìx98>¾'¹ à‡R뺪´V,ËÉøÝS¹½<~n`€Æ¿Ø¯Wµ äÑ]Y—8ÿ.¬–®0ðÃ@i­8r××rwkÍ»€çæç•ÊùZYyLãrc'Á°¨ZŃÓ÷»Kë¶ zmOR‘ôóLòç4X¸"¹_—Õ}ƒäyï  âøhéºzÜO¶Î ¥H•Gš'òøŸtj [°Š dªKË™ ·Ìqæ8©U·¯-À[Šàؘýþóóã£ë~ÿþõëØÖžw¦u8ìvǠ裢ëöû>PjÁ']÷çÏá 8h ލ8¢JÄ`TmŒ£T$}×–3@»©á•ÅêÍ~¿ábç?[Åò¿çµýfœ!øAâL°íJ¤ÿ;\~ï^ä•ñ¿ôsE°ôçæ÷/“•Xà…*Þ¨žU—`Q‰¼„Rô]IÆ h]G$1¸íÌ0*ß•Ÿo­Dt=Ð$ÏSŠ Æ]TÌ c'Ì•G ’ácg€²RÂp‡3,g©1Ž²æ•®.€ÇøLõ[»®Œ™¼IÅceÑÃáÈ­Áï'H6&O\j­,À›V$˽ŸÓ`뺮¿é¼µ6oêöaû›Œ±@8¾¾úí úvîë È;2Æ<—˜àè ½kpÔ~_¾¿û•úö¸’Âñë1Höûk¿/‚VcjâÜ™íei•þÂ`‚£àÿ½ë+Žc€?oÇ+A«¯ ò’(­þ¼ŸIY²å¶µ¾ØFpÔ*Šèº*•HT »Ýøñ­Á<\Ù“½_”qnÅ0u¼ äý‚£å‚_¤õø¶ã€Èû‰” é/ηHkÅpÞ•5çxçV ãc$ÑåLÑ­ú­•ˆ®,€H\èëc åùó©ÏÔól,@jC<Ÿ>~^W/ 1ù/W Q‘\›2å¸þ}€ÍÈçgßeõù9Ö5u9æ‘ç ƒ$¿N€l>@¾¾úçûÇµŠ£L<íÛÚÌt°Ù ùõkñýxÏ÷JeÁí°Ë«Œ}ô­Øl%2^,ñ)‚àM‚¤¯$†•Ç­Ü}ðvAò³˜^æ€F¥khÝ‘ßë/8 ’¾‹h·[²Ëhù þ­~J,l·^X×^‘ÔÁ–¶ «Ý½FTù®'ÞDÓÈíÜŠdm]XÜɼ xP© r²õ®)c?´ÌŒmêæMòÑg 0n „¥E@¼Xpü{²ÜÒs/üSÇ €•G<þç¤ëþ²ÜZ4K]øÀÊ‚#Èß'%Hþwr(±wñ½+Á°Òà¨I´ñý’س8¿î¯“®‹öÖŸC`¼h€DÔ‚¤õø¨dr Ô~Áð¢ÁÑZID×VލPr×WéIDATxÚí?rÜFGiRïàH—P¢ð,¦Sf”«œ:°œË‘/ JI'>K*:Ñt•¤ýL¡æ›Ec~Ó3À\`ß „—û_œ‡žžî99€d÷Ý¿eG>1„1J­…‚˜V"ŽCy\{?D°QqÜܼ}{s³Û©céóx¿‡H6&޾£¥"A ǧO?~øÐÝkÿ~6¸¿ÿþáax´ñD‚@V+»²*Š4‚pìqj$‚8Da`¢ˆçe¨ˆ£T D+ˆŠ ÔýÕT•†=ª)-°2X1x÷~÷hJ$J,V DHí1<žJš{Ét°r”Šd‰tç-ÛU«°ÀF2öq=Õ¾.X™HZ=â82èUYýe¿‘|GªÂÂZ €ŠÄÆX1 €#‹H¦Þq™HÆNM±C!dÅÀÖ¶0‹pø$€#˜{G$UÂXúþž¸ø†É€ÓºRšÀ4aÿˆÚJ襴µŒ××çç§§»ÝõõÅÅ‹ó½‹_¡Úf~c[k´ŽHÖ: Q¼|ùìÙ£8ÂŽ‚wwK¼D‹ (µÝ`çz[ø‚HÂç"›HùãÅ[¼Žµ x··gg¯7A‡Ï)ˆÄž#X½8jâ=NíŽxkY.¬„¦ªâí——ûçKEˆ¤Oø^ ˆ·'wH¶ëžÜA!’°âçV0‡úý/õy=•8ì÷ĈÐ`ñÄ¡Žá2ˆÄ Eý|kñŽV$Ç*§Ž<ÀŒñîï‰#$‡í¹ý¹MÎoE *ñ®|—Kéç¼µqÌ0€¨©'O JÞQE"‡.oR‘GGÜ»¼;?ö©,"€ ÄÖwÄÂ2¬H<¡le «tÕաνoM ¿QÈbW<¥QL©@e +€JW]Ù#Þ>n¹®½¿½Â¶Çð{ê>÷°:ÌÕýå{²GDpÀW aà·õ6©®"µ kmWÂSW]…Ês+‚áùÏ?ÿøcNÝíá~qàï~~{ûúõ?쟧oŸœbû÷ß_~ÉÝ?¥ÿüK F‰¬p*Ã.×õ–õn}ÕUˆMŽÛœH˜Uä "uÜí‚úÇ(ŒNñöeÚŸÇßïŽïÞu“þ©‘ËÔ)>°‘z½ÇØUO¥«®l¢"Ž˜TWôéˆÁäñ¼ø¿ýÇß§nç»ÝÕUêö(þ寧/Š(Õóuçö}ÊT°H–zÜC‰Dl«%¨áºOˆ$Ò¢Ð"Ñbèî§ÅÒÿ½áïçïoÏûOi¤Â_ÀEòÔJÙWMq<õ@äUšÛÜ…Í1Ä·`cDÑ à1G‘Èã@ÏØ!|OêõÙ‰Q>bQ¯‘‘PžªGU¼BS?y±,Jzû9 {ů#‚ô€\–‹ðVe©ÛýÜ‹uScJ(D&°Ð®ˆU*§®¼uDÑÏIØ© •S°«¶jo·Ñ«ÃÒ«°†N:" çqA_(jÕÿó`ò­6fR…|Ë‹#}Å®" ›ü¶¢‰k:2PÏïÕ‰ØcðkëI<Ѥ>‡tĕΡØ÷ßzÊ‘¿,€#À&m¥·];w÷[5Eesq€L¯‚Fù:‹Z1´ImÁ¢þ=ûùä“ñö÷‰H`ò•£·œÖ«o%?·‘¾âöæþçÅT”Fˆ¥õ-*"[*"€£ˆDTRÖ›ª]$”ÏqxWÔ^ÄaêZŒ}jÄX!éˆ*Cñ>?D“¢ ø¼ý8†WÌuS\zU’7ðõ#/âPxíÔÚÔH¤6"+}=þj¯2‘l€ÉSY6"ùúõê*¡èJðü4è†-Bjæðk§†êæt¥´—•Êš:Õçõòûù"h6¥ÎÃ2Q½j«p¼}:†õù^Qª®cl¤Q›Ä欇–W2uŠÌ{ý~®¤L$Ô‘ÀhlDa»ß~ûöîÝŸ–G j Öq¤WÙŠëÚœ…½]Õu +Ýӫ†•á¶"ÜV¦çŸ¯V(^Dâu.ø¨p€Š)­ü†žºêçHü:+Š~/);Ъò®ÔýÈBuã-=ï·¿oHé²ÝV‘•ú>†«Úú˦™Ò€Éxûo¨ˆcxEžïNk¬©«¥¼}B†9‚t²¾¼ b¿—–m÷®÷©ImD¢+ÝmM¿é$SZ°XÄbWeù½žÒâ?o-o¿ZQ”ŸÔõ°j7µåÕ¤sNôØ€ÙSX!'Vmå¦Jö ݆Wäù¤tÕGzjÊë5Uß¾N$^]ËT‘xSYñ¿19h†Š8l2]÷nR­Gò€µWÞqÕ˜·œu¸_H¿uŠ=ªn¿^÷_»ñTú󘑌D†ŸO:B$ÍÐMÕª*»ŸEYÎC=¿ÍÑØs_Jã]dÖßÄë®;ŒHÒŸO;¤ëlj{ñ“#¯Îcl²¼tŠÆî•n#¢%Ä‘ÉP éEåHì•þÔˆ¬<'ÒßDåªø €é_9×ÖÔ&ÉÕ€"{\R%bQû™è6ôms"*e¿?%~zi@3øË_ósêcWYÙ6ôúùãŽcþ8%55"ñ÷P/© ;¥åõÐ~~jçFÍÒo+îÍ¡_¦këLòâš9„÷3E$vëâ~R¾ÿúU.¤•@ìãúË{Y•Oäê ¦æ>üu‘‡…:¶ˆDúI×Éx݇Kb¿/]¡^›LG Ð8Ñuù9}%Ý-׋@ʲ„8T$’_Þ;wR}Ü~,D ÐP ª@/_ç0vǾ¹#–¹Rì,N]•U»aUj'Èt%íß ±@†ûwtfëå»sE µ¹ŽÖIuÕ¸4‡4^ 6鎶Ž%¼>’è0[²ß…6UG0¶eI‹dÊ*¬ù#’tľOoªOÝ®>ïÜ^ô©&‹D 0ƒ@T¤;ŸÚmw|2n*k¹BÃ|Äëæ ×ï•ÎØˆ(ˆS½þ @ò9Võ:ñ§²–‰}¾t¤têªN ö{ò+Ñm&]ǃ@ ¹@Ô@4wˆzþ§INûSaûˆ±Zí4¶­½WGã5ÁôêSFDí³‘¿¢»µkù~å"i%”|ÄáuëMç>jw.,mç®#¸|KZ™¡çŸ¬\$^N"ì>O/,½ãžnÛ>wD’Ž8ÔòØþ~!öý¨ˆÍû|j?¯áÔ•u 0ûT–]Í“N¦OÝÜ`µG #‚z‘ä#™á~!¹ˆhläá Äë}åµ½§fHéª(oOp%%ÕXïyÞ‡u‚ RB°½¶ö§¨üˆ#Ý41<Îô6÷ýˆE}>åu4D 0»@Ô¾ ó¬Êªßq¯nô(/‚ðv$,«ó°‘ÈÔ^a^îÃÿ<ú"¶Â@ Ð@ ý+Ro‰pÅ?ßþ éUZ¥{¤GqŒÝ݈ӯ/D½¿ú÷Ÿßÿþ>µêJõ2C 0™òU>Ã:ƒÇ+öÒ+îú´¬þÁŠ$ DM…;÷ö>WSX¥ºº¿±¹X,"Iϱ{û…Œ‰wåî]¡ûâPÉgµÌ5yõ6ñ„QZ©os@ÃÖ,u½¸øŸ3¤n£"‰Ì%¯B;dxÅ>í¨Ÿ/ýzK“éc#,³Éw&€'Iz¹èpÕR~ÿÚÂC?Bému…m#†±ç¥«««¬àÀrròüù«Wõu j¹¬7g¯…ÒTŽq 8*j#Ž©ukÈ\x6+’òˆƒœ8ÑËzŸºÞ‘À QäÔŠëC¿¶®Ã¶03T2P"€£$= ò¹ Y¢8ºp{‘A 0v ‡q (‡— ásB q ‚H@€@@ˆ Ä@ ‚H@ q"Ç$„„qƒ@Âï•ùd©Hj…psóöíÍÍøû× Œo q0˜@¼:ˆ"ÿùN<ÚÛÃqìÀ0¬,ñ„qÿþýÃCþDbZ(ž(JEÂTÀA‹ÃÃF$ê<<®Q»H‘¬J ûû÷ï¢8ÂÏãy÷¸J4ˆàHÄþOŸ>~üð! !ýõ§Ÿ~û­|Š©\$ˆ`Õ¹½=; ™Ç£@ìÔU;ØŸ#€•E çç§§Q A!"±9-ˆ¶¯ ¶ÃÿXî|¥Ð»öóIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot7.png0000664000175000017500000001104013657750470020435 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>«IDATxÚí=vã:…½„ 'u8ᄽ…^BoÁKPàM8|QŸ—;r¨¼ÔÎ;ô6<‡æÔqQE€¥ï ’L±% —·ª<<ÀÝðõÕÿûãGꄜN¹`hà*a¸œó¹û—ª48*ï__þüóÏùL5ÀÍbËÃÏ-Ö××ÏOOÝûYûòMjùFîDxL(^_ÿ~}-û*T ûv¼ÚëM`ôøµó|ûaØ-*Ö·¿UHJ¡ê_9™š Õì¸uÀú__oo}ûçÏÐéÔŽg‚9"¾!Ø5Ó%¶ ÷(ê@L’Pô}вßýv<¡É É|8${Õ’í wk{Z#”÷-Q9 ½ÁJB¡m›ÐDן=N( 5êX-™ÇÖ¤pDáH¡ÁÀz{]wóä H÷øX›Oû½DÂÆ7‡$s 5GÂꢰÇëøtІï8†Î¢sž€tÛÓ)o}Añß_n;¡å÷ þ0n-SH]8lÀ ÄP8L T@¢6?n[΄o nÚ‘À¼ØÅ<€eˆsýÞâ0¬Ug¡Ïþßùï¯ÄßT…ƒ²ÍyÑ\^4pk¨j,4å=Þò¾À ‹%õʫ máDhoíÿ¥KjP6Ïç©ã;v‘€˜hD4ÌDeòqÕ °Œ:È2Äå¹uâ%ÁKáHÇóH…ÃNÿ^Ïwª!Ô ;ùÁõâZ¤VuY_ç£Ì5Àîm^ ŽcY¢ }šûðrCQá(ËË6 }åUYýùh•Xä@¢ß‹­õ…À.ŽÚ뢙ÂÑIû{¹C‹„‹ª°u…Äs c!,/T5–Œot^Zæç@j×/ÂwAë…~:ýüÙýÐ, Ý©ÛñìõÚßú‡†plƒæ”ÊP–/ é:+C[úz÷µ-¤6$]×\7€pB¡mmɉÖVÛ:!ri¡d X½á e “ÝcUUùÀß.‘  3ÑšΧ'Ïè)ž9ìß±ÕÖ²ãÙûGBb á6ˆ×¼J¡'ÍqDó8¼*«éó@üPX”¹Õµèþÿ½ì޾ü!·®všúý9j£;Nª<ôE¨é6ÑCZ‹*rí3Íkmî`òZ´F—^–$çz„;u&Ñ`$&q•Ëx«å•þÚCêxÔ!jºM!IÂQÎ QA©ÍO˜W8¬gwøñN„ã‹.¦£¶åìjå¹ìH‡v ­D¡œÈq gêjl¸5•Çœ“`Ôú× ÉxŽdžž™Äë ‡¡ké<£Ö=Ïãël<Ç€ð<”ø†¹„á@<ªj«¦*Œ-‹­9ÿñöÜJ›ŒWmÁ>…£&$­N=„`D8¢òV¯®¾ÍqD¿:Šéå½þùèñãóËŸÏ…DCv5‡v­Ãƒy…# !ñù,@$&,Ñ<‹zÒ»tmó:þøý§—'Ûó;Ìr=p$ᘠ¶€¸(t¥w{ù­êš–ŒŒ…£\4/¯²jÏÉŒUi1oä¾…&88ç'kÎc\8üdf{¿u&{{Žf,'B(j™ë ḡv¹VUýŽ^ìüŽÞwº6Pô|ëÚYžÐùkEçï;(¹Î3ÍáÖ…á8|èªÌIL­njÍqDU-&B~.¢æPZr"mçïçDp Ó®¯zù2°™c˜ë‡/MÒ;ŠrB–V5E¡«i£ìçw°íŽ$žGâWeù‡™÷FåÖ…cé¤;åå0‹pèê—^X:;v ù<\"š×1e_XØüÿ_)tõµ·´œx|^Šï@¸¯DZÄxÀ lâ@Ò€9k“ç~ÎC߯¶Gô°:,Ÿïlžˆî876/A@ŽàðXé6žº™:ï£-ï0è;ŽÈ”#çTæBü™í8„cÊïéñ±¿>úvk!á:ƒM.´zh¨½s¿.bï_ŽäDüœH}¦úxŽ‚pŒ;õþzìÃîüÏçþq¾o84ºQMëÆ5qVY;¾tÉ´™çQèLÏGû¥Ð•Σm-.ßì]@t§È¨+Âa÷~„Ĥ¿ÙÛùl40Õªœjå°~USëÂhuÜRPZç…´®öëïÙ¾7Q¡ˆB}Û…4–»ÃW°¥<ÏGûŒ$p¨#¹$™…†òƒ?ЗÇÏ•DÏÇkuʱóÙk¹¤ H­ o}!™G8ìÎ> G^N>ô-¾}ÿ­… `WBU9yd|µÛü¿} ’¶%M._­×½þõóˆ¼u&r Û…².u‘Èžç °#tBa½*+ž˜çç¢ê¨K—q¿¾?Ü3]«ºôóhŽ¥—o¯R[Z@®s)‡`ŽÊ„Þþ?ù½ ‡=9€­«¢îJ8j‹*–"^"ÄVi C-UPuGqéó¹ã°¿,#ÏylÚŠÇòó–ÍqhÛRÒ¡%€9¯Ú©&$& ºcmßÖ¶ö÷c9mMHÔí%tÕÚګ㈅øº>•ÓZ5°#G’çDZIm/ôh+Üi{¤ëßÇÂ26o$úÿr%,+s O4/ƒï `“fþlŸ©Þ.$5A©Í$oÝs½e ®£­%”ry›V2ÖÇoK8ÒŽï4LHس`BRs$íó0"¡¨ M4ߤe-®h^ÇÞ„ãtz~îÎÿí›î¼úþµ‚ oKíø§ÓËK÷ýE8à@¡¬XX4Én•æHj«ãÆÂÒ–#ñ…ëRDZvr\r¥B1vÜ$T& *ú],ï­Ö}?X]H¦çHZJm?Öò\­­VDZ¶#±\CP¥3˜÷ý4ôeB ÉÒÂÑú8ì>tÕ*,êHâòßk'^¶$Šžßþ:UYˆÉú$0*85AòOk£µ Vä×r$°[¬|µ¶Èbkè'9’\Pj{œ×„¦uGÃÖómÆå‡ÉèsÏCZÖ×Å1kBRUŸÇúáØ=6éïÜi)$¾C¹´Ž”ïAî÷÷ÏÏá÷ ‰ ‚æPÊd¼/ú>Û Âp8çQL—ÝÁOš¡3Q§2¥?]Ðòó¼6çQwdþó:`G¡§T5å;’²jËr¹p¤ÇTG´´€ 7çH.†½„†Zò¥¨ ÕÔ*+ a™ƒ0±¾ ÈTá(Ï«V!7—0\û>°¹±©–™ëýR!Xz±Â¥…ìrÉCSɱtŸÆ°Ÿ ÇÔj®ùʇ€»”¥νœçÖŽäRb­:{\' ®' Ì$º:ìÞ– Yú|âã÷~«jŽc؈ ÈÔª­X@˜™̽šëÞvô‹Îo-a³]ç}Ô„Cçqh²<ªª+«±r4yÏb„Âòûhô˜ã°Vls:ÀGUWZ¾[«ÚB8`w5¹­B²öç Ü‘pèüøÿ“çL¢™íÀAÑV$‘ÀDÇ-'†úŽ$9¯iÉvØÜùø«ðÖbnÁššl€ˆ&Ë—^Î=Ê©ðÀf=²yU•†˜æÚPªL¶«pP¶ +¡ÉYdy™ñ¶®·ºðï,Yæò(\G°?~<>><|}N?þøñõ5ì[>)€»ŠîßNU(¼~÷º¾ÿü|:uÏÛãùó|²7ê,´MÂ;ŒÓé驆ñö|~zê^>??›  …‡Oàp$è…9u½˜£8Ÿ_^:‡‘Âï'Ò;’ô|/$ç³ ‰9–_¿p(‡p¹Pèã)ôd­:‹^(þóç@rÇÒ*<Öç›Ø™pÄ£wIXúVâ¿ß”B¡Â“ޝÄ„âåe¬oÇã›Ø\@raÐÐTøÕqäBSæB4WÒ·eÎÃw0ÚO!®¾Ï7°±ó(H÷l𭯯ïrC!±~ähôõÉhßG.Xýõ÷ßýëúç il,±L­¾*ã½> ƒõsG¢Ï'‡òòÒõ“$烬" Éa¨ãë'!és"å<²Ÿ‡®|bUWö¼öKáèûäDV| O B‘O–óúŽ#r&eë9ŽRHúy"*eK( `Q¬jª M™£èC… „†¨¢y"* i^‡_…¥9¢BR†²€…$Jv÷í¿¿[’Äok¹ÖyåÄÂv#$m;Z>o£PVì0üH¹Ö¸ÐðMìDHê­/ê-/´UVUå9Œa’|<B¹.À.HÉóñ™é©ï‡®li‘²Ê«ï«£˜^…•;"¾9€Ý9?2¹‡²Ú’éÓª´X¶`÷BÒ;ŽxÑŨJ+J®G{¢G‘¯u…pÞ™Œ/¢èåDÆ7šŠ‚p‚’‹…²ÆWï-«º „%u …ƒO öÅ×7©ÝÛyÀ…úZ<6À ÉÔþRÁi}}ëñõùVAœzþk -ÀÍ È¥‚s­™*$[ànäÒ;þ¥d®óZÛØUÂuwë@¶kCjKÿÿq&€p\ÓŸê ¦&í£ç[s­Ç­ý¹¸5ZsfäÆŒ«A¸SáØËq"€CÇÛ7ÝfÏÏÝÉÑ«íùôú——óy‰ ´k \$¯¯¿¿¾&!øøxÿüL׎bg‚r½ »u&&FÍ‘ó;’ô»u&$*(Sˆ ú— `×ÂQ ŸãhÏ‘,%$À®D1!ÐVs'ÖÚãÖÖ…„µ×) S«®Ê‰:¿ß. p™Zm¥9Í•X_oRæT€ƒ:<ôýuTî›Iÿ­9ààbhnCECS*çsÞÖÞ¸1!™’ÓΩ ÇÔó€ƒ ÈðUÜ…V[­upcBÒ¾t €8s4„dÒßîH€;öñ€Y…-m †­õÅ'kò?4“´Þ£ã>üIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot42.png0000664000175000017500000000436613657750470020531 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚíÝ=ŽÛF`ŸÀMN°p•2å¦L]E­‹:Aº[nl—´)U¸°¡2€O¡D"\}Ò§¡$R"¥çìõÃÕ=ï~3äðÃÚúÍßÝZŸ€À8+ú~¾ ˜HpÜz¿àÁƒãÜŸ§òxÐà8õçÖCL<8–Ë··år½ŽíЯC€L4@JP|ÛÚo»ɹ†˜Xp¬VÍ^b€|ß.HÌÀ#{zZ,6ÿïg³×Wÿÿ' ¥ó>\”‰Ari€|ø0Ÿ7ýHlu€” ˆ·×†°Ð_å1ŸïŽB”ír?#¯@vÅ¡¬[M¦  ]©@& »CYY°Ü*Ø€G•ÇÄäxpÔï $ǃ!›#*‘‡xL¤p qîÀœêÐÜR<Š©ÈËË%s˜0h/8` J`”¹MÁÁ€Ar« J}*A±>…áêâJ0%ÙG(‚€þ|ßr+G­V›¿×ëØ–?û· 0Îð Áq»ýÆË=¥v™iªéûJa±˜Ï7×_.ßޖ˼#-÷w}|=HÊpXìà‡.ª Jdmm?ýI­B £ŽXQ´íjµé`o$YßWÇoè  —É‚äë×/_þý·{ Äç—Îy|¢2è%8jApêÐÖåA"@& §JºÊÚ,HÞŸWrÙÑQ§>ÎÀErjE‘͑Ԃ¥ *€» ,HÊI;W²,ñy%@âý—ˆàØá V Ù³ó¡ª&8âaÁµ Êäøœ #©@² #«$²à躄Iÿ£’ÚdùbñéÓÇ݃@pÜY€qÎâÔ € 9$µ9Á Hv‚$¶‚@œÔÁwÚwçø‰}×» ”Ãvîº2éÚúÄ€!‚îÖ|¾\®×m 'Éz½ Ùìõõ} G½¼4²^7­Š€£žž‹C•G©Hଊ˜ çç§§ÍDãbñéÓÇ›v6{~ÞßöI?;*«¶ƒ¤T8¾G€+Gìèës ý¶1ºMl À•dQ;Lwÿ¼¸ƒ)»¿™©'R‚¥¶½XüöÛ?€«Hmh*ÚªWÝW‚`µj‚&kkA¢¸’켎ü(ªÃsqŽ$šÃÏ/AP‚"«@âýÙᾂ`ÀÊcÓá~ßj ¶18ö'ÓmU;¤Ü_«ß'pgò9’lQÅÃs"ñ~Ÿ,ÀƒW*µ+ú¤€S|Û2Çàsî¦ãù¾µ^—í¡:¤±utñýûÐSÇ^ëð»N|ܹϻÕû·×ÞOíñ}½ßK¯r.+ÚoäÙý];È[W0çV]þ©ŸÏ¹Ÿg×÷£ÂFSœû›ì©0ÔoÌçîçÒ÷yn¥×÷ëRyŒÅËËz}ì{xzr!2&S Ýáuý |¨ŽöÒý CW CWtœ«D ’Ùìõõ} ¨<.­(†»¯Í)ôýþûþœN}ý}½ž®s6þŒE Œõº ’ù¼ik óùrù¾ò(Û†°8¨†²¸Šf¬LŒÕ[Ÿ€À8+úÁ0‘àË~U6çþœø8ð ÁqéÏ # ޲tD»„D3\·ãí«U³—lÿËåÛÛæ¢ØöU‘0’Ê£tðç. ƒ".5‘‰ÇyàNÿádBM×µŒ²@É^—Ã…& µ É*ŒØÆ¡±S€‰H­-s Y`d­ @€ÂàÂ9uCM¢0‘ ¹ô oµÃxÀHv"a$ã8‘€‘W"÷þs˜h‡.8‰à ïð]Ç€^ÅUÀdüZE­ÊR‡IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot20.png0000664000175000017500000000442113657750470020515 0ustar jamesjames‰PNG  IHDRȺ»"Þ vpAgȺöCgâbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>œIDATxÚíÝKnW`ËÓlÙR÷Öãä×_ûíü¼ë¢}ñâ?^¼h/WíÇoßþõW×½|ùúõï¿o–óóÕr¼ï€i‹`¸¹¹¼<;ÛE,¿zu~þèѦƒÇ£Çoo¯®..¾†xGõóì)€‰ÈË—ïÞýüóf¹oÅQ eýóÏÉÉééæõy¹UÁ€‰H5”çÉîªÍ¯Àˆ6Wñxž3ùòåúúéSs"³©@ú…U-GSU±G[ååŽjŽÄ˜xRMªç¹Œêý¹òøêä¤^nM²«@` Ößûþÿ1iÏž=yòøq×Umtܱz^ŽÊ£UDpäçû¥eÁœcßïg/tµ\u•‡®¢}h’‡²¢²Ç`NÁq¨õnú˜u»ûÿßýþ¼‰ÈF<4•;ôü|ß9¼\€A"@`É•ÆXA’ßu‡^­ÿH‚¤u‰’,Õ%H6—"¹¿iµ±¾Üæõû¢Âô+Ž®ë×vIß×÷¯Hre0vÇ~äÒ:,· ’ª"‰ÉC_ÕÜFëZZ‚Žq¨j¼Šd?ü®ƒj¦R’çDZg®ç¡©÷ßl–«‹,FPù¢‚™n€i’ç<òa»Õy¹Âè{­¬*(òÕ{£’qø.ŽáÛ%@vª:!0Wù<ܶ®eÕ:LWpÀü¤ïÜÅî·f3tôßm>´´íëŽô(¬\QT' æå¡Hk.$Äæ_Œ0ý×3VetdA0TuønuH$­L幓*@Ìy€ äáˆàØ‹ª¢ÈË}ïHØ ª"°¼ äðÛå öªæ@òs148ªû‰Ø @–»] U]ûªuõÝ|”VߊC`€ G(Õµ°ªkc©0@€ìïLt2«`i]×'‚DåÀD;tÁ HÇ’ î?›óÐÛ³”ÏÕoËŒû/ó^ÍeÔWÛíß«tp‡êu¼°„ qKÛ£‡V,ùñ¾¯ß¶"º=}··ïöoû:€£ ¡ð¶úXo+vµý*)èS¡p”Ò·RÚÁ޽]cU ûªðf íPÇ]ÂÐÀ ÀÔÿðßÛzΡoÇ>´Ù60v=GàRvò½O€À`OA!0PY 0 !0ÀÂüôÓ/¿üùç¦ãŠåü8àNO¯¯?}êºhONž?ÿûï¯í›7Ÿ?ëà@éùóþÛÉ ðCëŠãûJpjŽ#$? €Ê€À˜§¥"0v.ŸËÑ Rp¬Ï‰àÈç…Äó€{+ªô0µ9€À@` 0Ì>(* Àl;ÞV+0Æ Žwì÷÷ *pàà˜úzMv,<8Æþ9àÈ‚cèÏUiL48V«»»ÕjÓF'—óãë.¼îÈßÓu¹mI‚`¢•G«£o©£$}'Åoo¯®..ºîææòòìL<8rŒ¹²ÙT.ÛUùñ$Ïž=yòø±`8x€´‚¤­ÀhU"íí_ÿë@±g& ­6wäU`äç‡HUq´æb˜h€´c¬©¼zu~þèQ×Ek8@ª÷o;„µë`"²íú¶D ’CÆkÌ,@¦v"!3­D–þs˜i‡.8‰à îðuC)(s¹¥-s≠’otå>%lù¢“*~(*Ž¡Áï¡0Ÿ(À‘V$­ ¨îñ~{{uuq!@èYyÄЗ €^¢òˆàÈË>!þ'†ª"(µô׺bÜ9Ñ'À½·Ö½¹¹¼<;ÛÜ›Ý'ÀE`¬Vww«Õ&H"X|B0‹/ò×/«/,û‘ƒ"–£2‰å©mo~ÁJ€@-ÏQ|ùr}ýô©£¤ "(ò÷&5å“bÒz!,$ùD¿¨H|BÌ:@ƪ\|Ïá´u²mŒ}>1— feµº»[­º®o[­çý7õó¡ë¾¾¦ëZ­=p ¹Cïñ¾*ªç[ïëK€L4Hú¾¾~ߺJÈA”ß·íÏ‘+Œª£ZÄúÖ¯hqµ‚C€L4@rÇߪZCUÕ˜!,ro[W2ë*¢ ­€  ެ®0Þ¼ùüùû€9=½¾þôiû¹Öv8ú `æRÇCƒdèœm‡¤ú¶Û®×#Ðu1Œ€ G Õ󹣡©öèë¡.CXG ÛI`¡ªÃk[‡ã=œWp,,@úžð7tÎD€,TuÉ‘‡^ʤz˜yåѪ6'ïm ­Ÿk,,H†VUES]^,,HªçǺ¡,¿ã†jÕé4’{IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot13.png0000664000175000017500000001036713657750470020525 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>‚IDATxÚíÝ¿nÙàx…4û* ¤H Ežd{?‚Š8é7 ¤3}ˆ¸µªâf;A`Ø/à7`eâ†á!νCRœ~_áÁˆI‘òüxîß_ý X§»_lþí;zÅÆN ¼yóúõÛ·u@(‚ `¡ÁÑ‚¢÷Ø{¿§~žÞ1€™Ç»wïßü¸ †v£rª ¿à˜ip´ãçÏŸ>}ø/$`&Á  Ž,@Î]Q€™È—_üüóx€´ãþýoÿ=&ÀÌ‚£Ç¾ŽÞiǬ k{ÞFLM 0ÓÊãܲ­PA°Ð ¤uÕ$ññzƒD€0g77¯^ÝÜlÿÎÛùèý¼|ùìÙóçwwíè•eU’JÖÙžõ…Äóìþ‡üþ÷¿þõÓ§óý{8vðÈZÞŸ„s¿8S€ôþǨ¦êTÏîG€°û÷¹ýk¸?®í´”ß§ª°Zp´÷IE%@ޤw–¡çîZ~¯µü>*AÒ9ÿbóoV9ÄŠcýÁ!è‰÷Ã+!@/„›ÎïSM TypÍŸà‚äˆ ¬¹BÊ‚n´¢ÊšŠ)W$‚ƒ5"Ïú²ï¿½}òä˜Oö‚„EIïbŠ‚ƒ%Ë*€ìüææÅ‹o¿íÿþ*xŽýyï  ’SmåeIA‘UYSU»ýüÃ~ûÛüx{ûÝwß|³ÕýdW †Yй¦Š#»=»À¿yóÃ_½­DZ0´ó/_~üñ«¯¶ß×ÎÛíÕÏ·Û³Çoß×Î ·8S…Ñ$YE‘³ ˆÇìö¬2­\²ŠÊ_@gôΜŽFüD+‚XdÁÐÎïîþùÏûçѾ^ÇŸÏ?V,ñù÷‰¦-€¢¢ˆÊÞ>ŒxÌ*ˆ:(ª&á¾ ‰Á’=ÿ©}<þrMWÉ…3vNWGVQŒöÖÇýë~Mªìö*XâïQõ‰X¢ Ð.´Ygx…/äÓ.ôÓ+–Óõ¥ŒV$USÀÕU½}UpŒ6=µ ~Û¡·-¥³Ûóû{8P²>˜l”Võz àêÄ _ÕÇ/¼U`dA±ýúîyogû~SY ˆÝcþá¯eõð'ðÞÊcjÓNo°ÄóÑÊ$Û—dêZZ½¿ß±{ÀÙ…7ÅÔßt5Ö篷â8uÄJåøÕ„ï'0û¦¬Ø‡0>Ï£o­ªÞÑUçꨖaÏ›¼FûDúš²²>€ÅV õ€}ó<²>„jÏñc+ŽÑ ©ú€²ÊìT£²ŒÂ[ÄOÞUUTkUU}—ªÀªQ_Õ~'Sw<Àb+’xáÝ1°Z=7…” ¯}¬ ©vl_ïí©ödW«©8²>ñ î<¯fœV §¾ÐfGv{ïLõÞµ¾¦6Å\\¶há¶yxëÙÞ>ª¹ô'ðѵÀâïçÉÄ`É~ÿs#À£ÉþLc£°F׺:×’S;׫¦µ¬o'…ÕnÏ‚Ip‹õæÍë×oßæ«µ¯âžäU›5ïã±?‘÷Î ‰R½^±é*Žò²°ú¦¬ÞQY£û{ÄÇ=÷…4«HªáÍÕŒõj¦z֤ϸ¸››W¯î?ùŸîþvç;Ħ˜¬)ëØ>ª"8µÞÕ|ãÚY½keÅÛ³ Ä_0°X½kaÕMYcŸ¼{QÌ*ˆêüèí§^++ûým$,VoSÎÔ™é½kaÅŠ§š™>ºVV5Ï£w‘Åjÿ,@c߉y\Õ¥÷vÖ$qØjV‘äûlŽSç…ô®^; ÕÏ÷îlØ[yÄû­‚%.ÝÎm¹yÝÁrìÆRÙÌô8¢Úó<냨‚¦jšÊšîªQWÙŸ¬éÌ_<‹®<4YÍ;Ø{¸kµ5ìhçz$½}$½«åN=f›=¿êyVïÿ_¬Bõ VrYçn<žk«ÓÞûbÓT$‡—@‰Ÿô³>†ñ>”‡û(² ¢ã<˜lƒ¬ÑàÐ4̪?ñúÄ4ÊðÒ}RõŽ}›«–5σäáù$U0Ú'1õ~z÷3 ÀlƒäÜHï¾øÉ»Ú3¼ ’ýêÛ*·Ú±ÚÓ¼7¸be2:àâArîÊpôu ’lÞÈèþ"ûÁ³ùz$Õy6J,YïLòÑy'W'ûÄ]X{¬–‰Ï¶Š=ùUå‘­eu®Á&‚X|¥3µ)kêÌíjOñmÄ`‰_¸i¬wÏòxœZaŒV S—lXMðdó ªÕl³¦§SU ½}&Õ¼¨ÞŠáØŠ¢ýüæ°¢¦¬,HއQí9>õ¼UÕ»VÖ\šÎV Ô•ÂÃûˆLýÍϨöéÇ1:O$EU­M5Úôä/XM€œk…ÞOĽ·÷îXxìñØ X8êÇ+r80Î=q4Hz;›«Š¤z¼cçÅ~ +;ýGøB<·%iz;ŸÏ=*i)O½e1Ž_‚ãóçOŸ>|$1.½(fïãMÅtì’;S_}°¢OÚ*± ¤šÑ~階€G¿ðذçpE’]ˆÏµzï¹+$°¶`RpÜÞ~÷Ý7ßl÷£±]ÁѶTŽAâ•`GÜSppTEâ•àÊ}ùÅÏ?+‘øŸ6\÷åËgÏž?ßoB6a€µy›¨ØÎ47|€µ h3γŠv‚#V­y¬ç¡âX˜¬#.arl0Ußß*ž\‚àÊ‚(V0wwúÓ“'yÄïoMh‚àJƒd´/%‰>€+GqÅóÞ 1|àJ´¾áì‹£J²£W àʃ¢M`ŠÁѾކ+fç77/^|û­qìWqSûz¼=®Ï[€¼yó׿ÞÜlÏÛÑ+°ÐÀÈVç¿ûÝ‹¿ùÍ~…+”Õ¹ `aÁÑ!6IÅ¯Ç };ÆJ$Þ¾¯_¿}{üᇯ¿Þ¿=V0Þ)€™iÑŽY@dBÕDZ$›àhÁÐÎcplïïÕ«û`iÏÏ;0“Ê#kšÊ‚£ª0âí-Úí­âÈúNbŸI;¶Ÿ÷ÎÌ,8¾|ùñÇû ô¿ÿý÷¿ÿãÛó¬‰*VÙ¨«ÞQ[ñ˜Ý®I `&ÁÑÎ[pÄc¼àÇJ!¿ž³àˆMZ‚àÂ’BVÄ ¹½}òäÿƒ(^ø³ûÁ‘õyTH¼Ý;»®¿Ïøuû_À ÄÎòly»=ŽÂz÷îýû÷>«,b_HUÉdA¡¹Î ‰ûgxe`MW킾í,ßåÏcpÄQVYeÑ;3= †ìö8ÜW¬K¬ˆ½¿0£ÿ˜- ¶£¨Úùî×[p´¯gEŽªiÏß;½lUÓärš²îŸ£¿GV ±£]€cp´¯Ç vüùjÞlM¬,zû>âÚZÞiN!Nx=×”·o¿ÿþ§Ÿ¶÷ÿç?ÿýí­¿cR´ˆÁñùó§O>Ô}$ÇVñ¸?*ëo{ö¬¾?Âi‚c÷B+ðS?^¼ÿö¸ûAr÷_Ûãù+¨Ç}<$m˜nìãØ¯ŽvlGlʵuªç  ’¬Bـ݉†YÒqX°w†y4]ž';ËÛ×GçyœkÆ;\4PbEÑ»gúhbIæ¤UñŸªÚßÝüW£¶*”§õ„Ù¨-KGï…?ö™œ{-Xd°T{®{¥˜³ÞyYÀT¥^ €Eˆò؇q®ÀŠÉñí\$@²%HNýxy¢/`¡vGU+@ZPåóD Ûe%ÿ¡æ¹¤‰RG^Ðëï‚ °² ½ÐO œ©‹²õÞ_o N]LÎâp<îÿOMP¬(@Ž]zê…w4H.}¿W S?ñŸ+@Nõ¼»"¸ú äRrl“Ú¹• 8ŽlÓ­ F;í³Û{û䣮²ŠcÛi¾ —/Ÿ={þ\€¬V †¬é) ìëYSüW ’V‘xeèÒ*Žª3^e°òŠ¢·âè©^MPgTæ"*ŠlTÖù—2€à?Q±ˆ0j¯IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot36.png0000664000175000017500000001067713657750470020536 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>JIDATxÚíÝ?ŽÜص`­Àpø€™DËPúBcv"8ph4àdÂI C Ä€S…½%³C€W1a=·øŽ/yÈS—dUW×Ÿï †`U»º[suî?¾{À}9|·þ€ÀØàAƒãV® ÀMÇ_þò׿þéO‡ÃóóçÏÏχÃ/¿üýïÿüç±ëGqµ—ÿžïûê ¸‰àèWÇÅëÏ$*€« ½Á]Wù<Žý é‚Y^W]yôüxþé)®1ãñÿÇo¿yLd%R…¸ª‰†>*‘\‘´@˜HG|}U‘ì¯DªÊC\e€ä®¨Šê<ŽQÄu«`QYÜY€ä@èsT•K> €; *HrD@THo0¾~^€ÜU€ä ©º¸ª±ð`ARiTIŒc0¿žà¸ËY»>¤?ÆQU à.ƒdo€˜uðàA²¶¢hÁñåËËuê®-ÁðAÒ©V¦ `«Þ¿i;žžþð‡u;ZpeA²®áŸWö®NÁ;_’» ·´.‡Ãׯ㭔 À4äùñS»–Ö¾^p'Aòüüñãаõõm7ïáz[_¿õýzFÞDkø‡®¤½ y«(†ë\KEÑ‚Q…pV­ i޵•C}Ü5µ/^;HZWÛu¼?€ Ž¡A­*޵ŸØ«†ùZƒò_ÿúüùÏ~ ¸}A Àƒ¨*Ž¿!€z³¦®µ¢8w°ø—°StEÅ'sclúDcf-wã×ï‡|üñÇ/_~üqþ¸ßضà0FÜm`\úõ¢7 kï´^€7 Ž·»î¥ö~³çÀI¢ *n°¥ù]j|{·b®‚$ÞǼíYû8»*ƒ^PÄy<¯Û$ý áµ €“‚#Cu76ëßjyëû¸t… 8`‡OŸ^þÇùᇟ~úùgÿ=j€TÁPuIµÇ‡[-Ÿ?ÈÜ\¼{÷ñãÐPÄñýû§'ÿcÝkpT·R®äŠ£¾Õò6ó1˜Kˆà€3ˆÀþ‡R‘cÛ²äð_ã¯Ë•L†¼n$žo³¾†àqÇ:à]ë ‹ Ƀñ¦_B4Èí8D’<}7wMåAô98Æß'ß@éåùx]>úËïÚ¬­jÝ ¯/A=ŽhÀ‡¯__þ9Hò˜GœÏÑ—ŸÏGÜßbi–ÖÒK|½.-À˜ÇŃãå¿óŠ#ÎcºlH’\1äc«@¦A_?Ži`ÄûÈ7Rʃï‚àb"8†¹Èr’»”¢ "¡­Û$?Ÿ+Œ½ç9HÌÒ¸hpsp,—>éG0äYTõ úò¬­cÇ¥®¬ºbQÀC~6H~9óÁòVŒÉ«óŽ*XZC>„Ǹ j<øÁÐ*›å1’jLäØ˜‰ »WMÛ(—躊 $fQEÅçÑÇ1oiRMËë´ÙtÃäˆqÀLïj–ÕR¥q¬+K€ÀƒÇtÚnž…Å%* UÅ‘§éÆëÛyÌŠŽóíÿ—7Ý\;ÆÑ{>ŸûKÃ]wYY8ø–ȸb/Ì«öŠÇó`zëÊŠ®°i€´óã›n«(¶G› x¼·éæÞŠãpøôiiE¼¿4p÷8VD€Ä4ݼ…HÞDñùùÛ·ñyŒ¡ÄëÛ¬­i€Ä„ÜÀG%’§ãV+׫1{eÆ:,`sòòI<øƒ"ãù-P¦'æ¯Ë×Ë»íÆ±Úò¤ Ž<˜ï/]º«ŠÐïØ$Ñpç ¤5ÜÕ¶îóu 9@ÆÏW³«ªà˜w]åç§çþ²ý ÔÞsÀIþ绥OþÓ d¾‰âðüx7ÞñÁ:@–Ç4ò:\qä ã—_þö·ßý®u]íUÝŠÚÞsÀ† d©‹i\,um»¬ŽU ãçc6ÖxºöÚÝzã<HÈÞJ`§¼¥Éú d>–²¥©>DZÝ+}90ÀÕÉòØHŠí’wëÍ}ð­"à¸.i0¼<6ž¥5=Ï{O­…•+¼3A5F’Äî»Wf~Ÿ!0ò`{µ‰boVuoõ< ¨Qy\þƒ…±`WE’ÇH–*Žñ×剱“x¬Ú=w~ÿiдM¹„<+k^9¬®L¦’ƒäX’aù¾Õ¶ð\V¾•ô|ï2{Ö'ÊËÇÂò zµ·U|Ÿ‘ßìuTUâ7¼šy’wÿ1nƒ1àÂâ÷@Ë•Är€Ô_Àbƒ™½×Åý5òñ\ òë7äë*­¿—ëùùÎû~+pöã×ï‡|7¾õìp•§§áx}?÷t }í몠 €ÙØÆ1$¥ªl"XÞþÿ´9µÍÏ÷~Ž­_jÅ(@€7 Þ×WÁH¯"Yß _k€œ+0Îý÷Ù{Áœ-@zÇsW:çn«.¬êçˆÀëuÅí ­?ÿÖß¿. §6$Qqì –GëÂÚûûÏ]ˆ¸x¼vüõõñ¯ ת´N­@rpÜû,1€‹«gMw!á¥ܘ¬ÇsÍø¯Gß’ã^$Æ`rWÕ¹º®€76jwÊ‹óËHÌ¢ºÔº<«+Îs—NÝÀn[‰~mëZTÀ?¡Á ùáðõëËvÖ­a¿ì}*^«¡í­#ÉŸÌ«Ž Umý~— Ê×þý$±ùrEr«?×Ú†®äŽIT:*€Wc3[?ÑG…P7üÕóß¾ 7jòrcF-xâk¦¯ÏŠ®&€+Õ¯(æçC ô¶ü¨¶2™M®p¢‚Éï+WHºš^Ynh£!Îc½Šb¸¯ù8†ëãóã8@âñ|¾|ý8‚$ÞO~ÿ*€7 ŽºÂ˜7ìKǶ bÜë<ÎãûÆ×šµJ[™þ®ÎÞ•íUWN]qD×Ð<8ŽU-8¦ë`–ǧ×lȾ ‰÷9}ÿyŒä\ }ž–'#ø— Ü@L?ÑW+Ý«•ÝyÝFûDŸ»ªÚØÆ´áŽ•öÓ1Šü~òûÍ2¬F_ª(æ×¯eùýA²vÖÀÝË[¥T+Ü{Ó[糪ÖVíë¢ëkúøpÌc ãû“,W U×Y>Vï/?Ÿ×L+¯^…vj…p5ªŠ£$®‚#òz°¼ãXžU ¶G0 ²:@zÓƒ£"éÅŒ__M÷͉aÀÃK¯ëj)8ÖŽu,9ôþé˜Ä¼ +¯ó¨fYí}ŸÇƒ¤ú}_º°3YZ¹^]^2¼¯å )W<Ö}¬ ’-ƒéÇw»ÍÇjºm=kkiú–{®/W ǃc리 Þ|/¬^¿Umc˜Qôºº¦›(®ß”q[°ä1•jo°µÁñZwˆ¸âàXn8ëYYõYÑe4í:šw5ŸꊢWq ’ø¹Ú‚Èáýõ‚£êú ¬Hê1‘j¯©å ©vï¯oÝXKÏçï_=¿y–UI®Àt]ì¬Hz›.U$Ço%[ßxjzçÂÖ…uüŽƒÕJòiESÍ®ª~^ÿ6Ú¿R}^‘#éW&ƒå½¸z÷\ïUÕ˜‡g ’õIoL¢Š*`Úv&Ço`µf%|5ËJp¼RWV,9HÚ$ÛwÇ=^¬[9ž¿ßÞŠÃà8À+ÉÖ1’-+ÅsWXÙ²ŽdoÅ¡"Øií'ð*Hâ˜W o–ãë@Žm²¼[¯Áq€³jÓW—ƒ£Z'RO’ªBY{Oôêùµ³ª¶V¶0èˆ[ÔÆn½¿~WwUí¯h–¥£¨¶2©Ç4–¯ï/ ðÊ•GIÈÞOðÛo¥[Këf^ÿº­?w5¦³÷÷ثȌ©W‘ì †^C»özã;¢Ÿâ­òsÀÕW"½1‘5 ÿ9Î ñ~z›æï-Œ©(oÝpö*Sßç[W$ØþÅÁ14‘í¸¶á>WÖ[IoÛwÛ¿w#ú·ª@.ùý]ª"‰1¦jÌ €ÝvÙ‰àØZ!í¥ò(ÆS±O ½ßÿÒc"àÆ+D€<œµ}ûkî2~ÜoàÎÄtÔhè«YU²åõ[§ (€+T5ÐyÄ8ˆ^ôÖIœc¶— àƒ#vÿÍǯ¶þ8µâ 7ÿþß~«$Ž{+’êyp¥ÁÑ Ž q¾¶Y½£¿$À…ƒãµ$*ÞÞQ[Ap\iå±5H¶Žœú¾ÀH¾û[7 aë,¬K½/®,@ªûŒ´àˆ«MdíuÀHtQåÇ£kª:®½Ž¸Ói3£–­¿CߺÍÀÝɺé–¿Žà¸³éu=­­@zƒêàî‚dyp|íH{ÝñÝzýî,HòÊòj7Þê<¯$kgOõŒ € ’½ ¿MX »äÀ™ƒvͺx%?_èöþýÓ“…p$?üðÓO?ÿü?÷ñŽíqèT"C€ÄÖŸ> Ç^…ÀCG®Dâ\%@¡7Æ• Àmø?lJ|f¹¼øIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot5.png0000664000175000017500000001272313657750470020444 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>^IDATxÚíÍ‘ã8@'•cRèT:§Ñ9LÕTí±¾n;÷¾nÞÏVᣠø#Ù’Þ;ŒÆ–-Û²›O HðÇØ7·ÿ1üÛrÆF•z 1ìD¯r\ýžlµHJEÁïì_Êø‚lvž­ÁÃ…lÿyÐ_$¹8h(žv~ua=_ök1èÛºkLöËëÈ–ïrÞß/—ñï@n¿½å÷#@$/D·’1haXÛÚކ‚ðñ1üÞ߯×ñöó“.*@ ;‰@¼Û"+ï „D"ŠA(r[~[óâ¸\>?ï׿#Dòˆõ|$—ãé®,KD £# yH¤2üÖîâ¸ß½~ßoËïHîç|"ybRz<-9Ž•#!9"EÉòíáñ·Û ’ô{Ò9˜ÕÏgë0^9^ïa¼pqX‰Î‰LE3ŽXˆD‘lx­‰„1D'êïÅÊ¡ð}Â2Aè­ÎÈýr[öË‘ìæ<–‡ïï,x„ÇrÄ1ÝÊëÐN$|og(Òh«|ÔUä5Ïð¼ËåãcþùQ1Ð ½Üù¬­mGC|¤.¨XWÓü¼i®#uyÑ…ˆäEÎgm×+€5ÏCß_'É­‰PjKò  Õ†Bai[(Cç@j~þó˜Xˆ„ï I$4`œD4`œD4dÀù‡— B2Î; çó4hÀù aã|Рq¾Žß°ýü9¼jéýÖ~ëqÑçõ~¥ç¹öxk»½BŽ6äúq½DO½E€@^ŒÞ‚‰FB–ˆlÞ°oU¼¯ô8—KŸ+þgG4½#K$r~[»Ä\alý|O\k5´ÑÜEkPúþ¬ý—ËûûÏŸ¶(¬ãèóˆH ›8ž}\Oµï³¶ì•¯•ÞÞW‚?^n_¯ÃVÄ’nëýÃVΣܾoÇBê5(N$Ž´×´ñ®|kߟu½¶0Z#¯kÉÚJÃ/—Û­[9Þã„#YQìï·Û¿Ê…âõÁ÷î+½’ïÕ•U+šZÁŒ#{Än‘GÚû§÷ÛLŸ7ŽHÒíüqqüð2„±Xb ¥õ>¼ý^äÝZ ©n€{‰¦tô••Ûèõ¾¬­>¯Öyò²ö Ø‘@âÇ‹5Ñ.-¯‹ÊE4—+X¾"Ïûü½ÛцP {VÃÍixçSŸ¯Ò.@Dp"q” Ä;Žw<+Òˆn­O÷å[ œŽDZs'µ ltÿÚ¿ +ÂÐçIçHZ?/¡;È׃ÔàëÛZ’l—®.ÙÊód«ï×dzº²¼Çîzq|~棌ʺ‚jÏó«\yG_×û]”n=¥ƒà‰±"o+]W–Hd«÷Gâ]Éêd°¾2¶úìuøVÃ]›©­Õû÷á½¾—L§¡8‘@¼çKa‰C’êú¶lõã£WÀÑ>ù騢|ë¿Ú.šh„R+ž^b‰ŽŽk¹–¸`CXƒõ|«ëJ‹ÂÚê×I‘L™@ô~=¯Á‹0ÖÆZ£¤zÍ'ñ>wï™þ:ÅE€ DÏïHch‘ÈmO V–×Fs¥9•Ò†1Úeíò±ï/›Þ*šRD#‹V‘ €teåð'ZLT Ñ>wËУ«¬\GtÆzï.'o>G¯íí&-›§Q:/¤5òÐ") ±»ȼ(ô|=ªÊŠH¬QX¥ѵœô¼Ž^¥Sâ—ç™$Ñ ½nð½ZU©”Éð<] KŽ'û£ç§V ¥9ë|$¡ä3Ý ÀEb¡g®[[/çáÕ‚²"ÞŸ3:ƒýçÏ··9!膽tF·wtëEjžx{5ØÖû"2@$?¬ˆDnG_'5©až¿B_G´4Š'.«–”¼¿ÛM:ý~ç#’h×V\˵®¬ÀŠP¬.ÀÚœ„õ¸éû›ŠÎq‘#8HJ;Ÿ! tj@{Ì÷âG ÃûJ‘Æ÷÷õ:¾bÎ#’ÒdziÄQû|/¢³æ×ôªRì½/y\kä OÉÚ JÍ5xcqH­EÒzåi—@ɯÈ红Ƣ˜Š#VKk­­—“ñr8Öz!­Ã…½û­ˆDÏã±"("€ ¥×’¶V®C‹D"/b±^Ǫ…e•3ç†×-0Jâ^eêKGwéóã !*Œ¥ ˆ9ÑY‘ ‘À‰Nà[ZçbîŠß:Îõšº¸Æ÷ªë2š#ðr¥]>­ó JÅ_/d^$½çoD"«¹¢˜D' z…­aeGJy×—D&I,ó ¾^™/íŸOާãÌG Ï=T¾4n4"ÉÏO­ÐêRV]™¿8€ Ä+Âç­?1m ´(–sVŸ»UKK"Ôôõ¶mÀj«ÕÖæPR¥Î -ÏÃé%k…DK$üÅœ0©]2ÕÊèHÁÊuX%PôóSd“‹ãY¢è%šè÷1IYÄØûý 8‘8¼ b:)m@ã]5Ë3µÇ‘È\Ä¡s+:G3þs9œÞ®}~ií#´4³~~½•Ú.¦ÚÀb]1zÍZ]e5pÖ¨2‰H¦](ùýVޤ5Rë•c) -舤×û,Í!R¼ÐSô 5*Ž4ŠËšx8?*,E(__ã®®èù‰®án­éÞ«¡¶î×]|¥çw-Á‘D8±@ZKSø}÷󵩖ºÐòçÒpæ]Yú}è úʸv¾IévíÛš?³V-«Òüüåœ8im`t-%KZ©á·æ•ÌG$úñÓÁJâ{Õy󃽿¬ÔI«H’@¬y$ùûë‰ôŠpà€éyäÃyuŽbqä5®R×Ôü(-ïsFkQµn×IŠ´–#^‘ˆ™FcÀñJR”–úˆGz^‡\ç3Ó%GaÍëÐ…ŽPær‘y&ÞúzT“÷xûv,gbËßÃôó/çœz Ä‹¬yCp`ôŽpôÂMºL¼Ž,æÖ§(Y¶>ÒУ˜¼ÛóÏ/Lj#}k$RúýZߣ°(}{+Œ¯ÌuƒÖ3¹ìÕÒÒ9 ax¢¨Ýï­ß:L:*ƒòr½Æ"ŽÒý@RDK§” dúzy­(½µþéöëKr0˷矟D2<Þ‹HÖˆÎEõ…å]¸À "~Ãv¥vU¬VS:^l&¹ŸsI£“b]Sž(b"±ŽïåHZ¯ÜýQYù÷QÛÕÔ»ú/¼0ÑÚEý#Ý•Sö:VÆÒþRD¢sËG<'²,/GÒ+ÍY3Õ[#º®,µ#kAo¦öRätßÿçÏïß¿~-•_®«‹êˆÄG4b‰$6ª«b­É>ßµØzA‚HN ï ¸¶t‰71¯TTzÄÒ™äÓG.’iWÔrד7jË‘5z«5™n Ä?Ou¹^U›`W]XÖ<ˆ¶jªÑZLÑÄš÷¡»¶¼5Äí†^Dëzò"œhW–Dç…Dvk=+‰¾îô‚cþý#€C d¾a¯àG ±¾þ^W¾ñQW"X×U¯$:?d=ÔE ^ÕÝÞƒà2½bÌsÑá™ÑÄÊQ¬'ù+|;‡¡ER6£4b×Ò*›™Þ+©½ph0à@ˆÕ —6Xµ£½z Ä…åÍóй‘y‘xóóü+skžŠµb`žCH‰®8Ø7×ÝÚëäé÷;"8­H¶È´ï¼€æýY¯[›CˆF.ÓâˆeÇ÷¶^ußÚµã{?V‡a¹ð£´kjë¤T$ñÃrÄ2-Ï>¿ž‡^o$zü$X§>ù_öý”v½mýýÀ„ãæjíJë/”X+;±nío­ÈĈ•/Û––y–@ìÑ`ó‚ã/ºu-yEþž%˜Öáºý'&ο¿Ö†º6R³G­Í/<Å_tïÒ*Í=¼Î°Ð>ó=ê#Ÿé»Ù²ˆ¥•«)-÷Ž`Dñ²èŠƒ¥µ«Öo êJ”l¡³5'ÓZîIsÒÚêS_{å>TÙÝ‹@z‰¤t½o~]Y°ºp¬QHÖ y[‰ÄÈ«7ˆ½Öñοwl.–Öªºýs%Ë‘Gi_ÿÚ¥\¢Ur£‘`­ éÊx"÷?Ü#ÿz¥.Ê#’µfbÏ d¯‘ˆ?¹––÷ùK‹-@)ùö–''‡ÛgDÆ"í9Âj@{EÏšyÍEx‘žq”¾o°jƒ9ˆbø»o¿¿¯×tûÕEr¹lÓêj¿ºá—ysÏ«Iò{9^ôZŸWš‹°jiµŽjÛj˜1Ì6Äy"]X©hß9º²¢Wòµ]Uñˆ$Ÿiý­ÂéÕWZ«ª6’"x œ#çÑúüÚ."o}ŽáäE[gŒ[¢´r ^—R­xäõJ—¢íõ}"xY1Õ®n­ïÑšS)}^íZåÑjǺèaoÁ#x¹H¥´\ym¹ö$޲š¢óXôzÑõBtåEµE׊œ€×ži~”È‘â@ È™²uÃŽ@ ˆˆD‘ì—{){ÿÛÛåò̆q¼BC@`AC#ñþ>E¶DÏDj«E+ €—hPφCìÏÏaëE(dMDR¬Sj°!€§" äû»\Ë•÷¹¢#Žéö9çq,U}~VD‚@²HCD¢¯¼Ï‰xŸH[½_¶–¢9—^‘ éxózø×Ρ aÈ~K$¹È¶T$ž0 Ž' d¼ÀÖ¸A–.(ÙŸ–ÌÍ#-hWVT Q #ËŸ?¿ÿú5D"8…8.—ÏÏëõvûz`wW•‹‘R"ŒñÞû¿w¡\.·Û_Òí©P¢‚(}âxIqxŒÅ1ŽLäþ$žá¸ZDý"D°+×ë÷÷ýyÈýéöpÜËåãã~[D¢(.‰8D"„©bÇ•ãùï ±ìZ ׫ “IDATxÚíÝ?ÔVàì¡ §E4‘ÂHK‰"ezÒ¦b{¤UDAR€ ÊW  Å"­(Ò]Jøa^öµŽ¼>öëù³3ž™ç‘ËkÏ첓øÇ¹ç^û›oX¿;wnܸvm6+íï«óó££ããýÿs\¹æR:›=xpô• +*¶,°<ëc€Ýöþý‡?Îf±õØSq{øõÇ­[§§Û»w>lßÿììääæÍÙ,¶Ož<}úøq»õ‰Hð´ÑEì¿yó÷ßoÞÌfÝ»wûv{üììùóë×g_½zuùAQùü8ç¿~ýâÅË—ý÷¯ýœcÏ`cîÞ}ûöò…¹©8¢²¸\\œ×~=^—Ï/U7hr%ÓM÷}"8 ©ì@ 4CUÝ¡«\¡ô/üÝŠ¤=þï¿ñ_ÿüùÓ§ÏŸÛm$Ý×ÇPX•Àä+’ÜÉ_o¶ý¯7páâxмÍ=• >€ÉŠãã““áfzÞvÇëbÛE·"ÉûÑ#É?]Š¡,€‰GÛ£®0r/¤¿}öìË—1çu+–¨LrÄO—g{ù¼¶äüüè¨{n†”Ú¡¥îPT췕ȸ ¤´?›ý÷ß/¿\Þæ¡­æû•z,Ûú½¹;0@ryVUB©Òýz?G®@.Žùêݻ˕GIÚŠã݉O `"Ê=‰æÞ. ®8j=’8Á‘·m€ ÿ\ÊØ’˜ÕÛò…»Ù–+޼ÈpÏ#o#˜b:oì×fm € +­,YOý¡£¦2ê}\Cÿëý î•4¯ÀˆïßHºŠžˆ `r“:W åYUÝJâr U1T•{ ùÞYQ‰äYYñó.[ܹsãÆµk`RZÐR® †{ ÍksO¤]Ò­lʽÜûˆi¼ó+Š˜-ûq¯/ApeA’+ZÏcxGÜS©H[qt‡®JH-ÀšD/$7­Û u©Ò Ž¼Ò¼4 «¿îc± ¤¶$Öµ €+–Ÿ×Qº'U[ ߢ¤?d5ÜL/Fy=H·’{5>A€-ËÏëh÷c(+dx]G©É‘›çõÊc\$÷<|¢Vk¦çJär0 Ͷ»ím ¯@/=¸*‚#šä‚`ëAÒ½V¹Ç1¼î£>T•‡¬†ƒ¢}b#/€ÌAâذ¼ãò­KÆÌ²*¯<ï®L/WyÁ`w–•Û¸LTÿÂÜ]@X¯@JûÝžIGãpÅ‘+Á0ñ ©ßu·¶dþyc§çz"!Àȸ•èÃçå㵊€=’á eÜó@Úãì©á £¼_«Xò€½ò,¬r%2܉}Ôü•éõ{e°Qù6åS­Pæm ]lÀôïõTš…•ŸHÀFƒÃƒX)HåÏ{Õ•–»÷°ÖÀRá°TEb¨€•‚ÄoØýGèÎßúŒÿoã¶ôŸ?úôùsyç•%?ƒ}ÕÀòIlI¾ çÀ(=¹0^W „|<Þ·öºEÎ'0‘ŠcÑà)A9ˆV Á0Ñàˆ ý¢FéxÍwËA²èÏ)@&yˆ*_øKRÚÖÞ'¿ß² Hö,@òëûÓ„F-@j!@&Y¹ÂhžO’&žc²ho#foÕ‚ÄÀD$.Üc$Giúî¢AR & ‹I]2ö}€ ‡ ¥óò…>†¦jCX1Ôe `#dL}lÔ‚£ íëÀNU"¥éµµé¸ËNçÍÁ¡òØñ©-ø+U$µà {$¥[ެz+“Òy‚`G•î–ÛïmıŤX>€¬9†žÏ±èm×kÇKwá-ýìxE’+…u?P €ƒ«[<Ò€ܹsãÆµk³Ù£G÷îݾ=›åýØúM¸ß~ûî»o¿íE|ýìì§Ÿ¾ÿ¾¾ÿã?ÿ|ó¦`Ø#ÍSD)(bÿÉ“§O?îýììää" âxìçm¿R1İ“¢2¨ ME0Ds½TqäÙXm€4çÅ~œzzÿþé© `gƒ#öse_ÏwËÍ•D)hr…RÚýúÅ‹—/õP&'Qå #‚¢Tä‰óóVìçÛÃÿñÇ_]ÏAû¥ã>9€‰H޼]µ‰óÎΞ?¿~½ †¼_ª@ÀÄ‚#]E»¹‰mEÞFD€´ÁÑô@âûµCYyÖV·GÒ¾€­V9HjÁ‘·cŸ(˜"7ÑKÍõü: À–$þ&Ÿ×s”†®JÁ’+‚Rpô£[aôßo¸âÈÇÛŠ €HÞ¥m\Øól«Zq~~tt|\Þæ÷Ï•‰OàŠƒ£´ plp”*èiäéºQĺŽ|~޾êW*q<‚c6ûõ×~èW0>i€+ |¡-õ@r}ÑžHiöTLËÍ+ÎK•GFÞW‰l©©C\èkë@òñRRzÿ¨8" â.½¥ý¨Hf³W¯.°á)AžÖ[[p˜÷ó4ÝŒ¼-U98T  Z”šì¥ýŠRR å+¦=Ÿ4À†ƒ¤ ¹Â(ÍÚªõ@òÐU­)mÛÊF°•àÈA‘·¥•è¹×‘_WëDpÄûç ¤¶ï'«@rÏ#O­móûµ·mï®ûȳ°ú+Ó»•E Mõ{+ͽ³À†•ž÷QÚæ yi]G¾÷U^PXZYž›î9€J7Yô¼€-U cŸa^«HòÐUi[Z¹^š*Ý­·¿ž€­I®Hò3ËÇ>‘0zy[º7V¾·U(«[ä&¼O`bA’o¯^jÂçç|”ž™ïWº+o­¢Y0Qµg  q~~HôP¢’È=•¼ÂÜ3Ò&®ÖÉÇKH퉄¥žG¿"i*Á°#J k¶-­©Çðó?<ï`G½ ãØm)8ô8v^4¼ÇJm:p¼_®(òù~ï^©”‚$†¦ü¦€í˜ßD¿ª×ǃ£jÇkç°öXè^€KÛmÿ|ë:€ ]¨×Uäãµ Z4Ц|_‰¬»bXô}W­@VýsL½B˜l²îà™j€¬+8×( ØÙi¿><ÄTŸq¯[5V‚[ô÷•Ÿc²î ¿ Ø™àXvˆ¦ÖÃû}–½ .ÚKYö_z’bûÞWSq €‰WZãc\²®JH€L,8ò#uÇnç‡Õ{5šõ“¯<š‹r- 6 ë:`’—àÅ.dÓ¸ðÕ.Àµ!¨ñ2îý ÂAúòÕ»wþÃgÚ2¶r;¤Õ|E0@€Ì’ïßøðñãêÓt}B; ¥¡§Šy»èP—Ø› $Îoÿ}¹ÉS Zà .ŵ^Â/ˆ«^¨s€Dp”dlE"@ö´)U¥ ©U$‚à@¤@¬ ‚@Ì ’Zó¼ö+8€º´.÷Ï~É¢÷ÊÀƦ_?­ Y´2Yöõ{‹yòäéÓÇg³×¯_¼xùr6ûý÷?ÿüçŸò¤æ_²ëÏÓXO4Ì»Ãí¸@q—Üõ8>>9é®à¿uëôÔïvâoص |üÍúôôþý¡ÿ±óPM4#X–’«M_†Ý½ûðálAÒ`ç*ލ(JÇ£Ò(-˜+¿~ìÍ 7U‘©ÉÛ·›ü¼µGˆúû4ÿDpÔ_Wû96]!¸`-S1ô÷KCOq<¿®|^$ÀÎH@-rR»×ÓøÞˆ™²vˆ).ô±}öìË—þ×ÇIÅëô@`g+‚~£{<Hí}K=”þϵ©«Hüþ"8†ëiÀHôJCQ¥Š#zµžI½'²Üì¨åA€,f\…‘+ ùÂRZq]ªXr-[ „m›ßã¸ýCS°wÁ‘ƒ¢Tq´3®b©u­ ‚àŠãc~€D¢t¯§¼Î#Ÿ—{Q‘Ô{$ÝŸËB<€¯@âx~öw~”k¼.Åø{@ è©7Œ ²ý ©]èãøƒG_ÍfççGGÇÇå•ç‚Ö¢´D¿¶ 6 ãþuå×å F€Àš‚¤»D¿™gzû$ùõ‚Ö Wý D%Âô‚dùw°Fµ‡{¾°»A’gm]ý:&å{QmòR¦íì}e²ß²v£>QyÀü°”þmŒM¿`d‘Þ}â–`‰ F™JDåÀBOÞÀÜŠ'‚$÷`Ì `ŽüpúvAƒô<`CóÌQš7I€¹òöšIBù ÀHÃË<ê€ =€VÿÿU]èÀŽË=‰«¾ëxw¨ªý¾`gƒ¤ Žî/ÖדÈ=Ž~óÜ,,€’g?õgC­«i*Œ\yhšì¬ÚÐÑUU†¬ö?—#‘¥ÇW¼¯IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot4.png0000664000175000017500000000511613657750470020441 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÙIDATxÚíÝ=rëFP/é–0¡Ò ½ ‡Z·à¡R-á…H½ ¦³ N‘í[¾@àŸLŠçTÙ( È'ªðéöú·ß€×6 ¿~ Ã~ÿ×Ñ~û~2ÌÚl¶ÛCPD` Ãn·ß÷d¶ÛÏÏ4·ÿDû£ºà!åŠ#Éfóñ±Ùô/ä· ðäAÁQ*“¥×]ßÔ•+ÀCZª(r“Ö¹Œ à‡Š>Œµ•Eî\ïoíyÀ“Zê³ÈE®HòëóóÑü$@~\rº©i.8bTÖxtVî#¹<@ô<…劢ô‘ôGeÍ¿>ï_^‰ð•H®H–æ…ôöo×”ÀC‹ |nŠšHÙîvoo‡ãcÁ‘IðbAR#FUÕ)G9:¶½y"½`à‡Hî¹t¦¹{i¼h\zÁðâAâ'ñM¾ŽüÀç—çyè˸¸}øÚÿ3+àõ&(/ób݉aØíÊÜíº—žw|\,–T¶÷ÿ÷~ïû¼H¥‘E`Äv¿/A²~A£ÞûäÇï}Aï_\Uq Ãvûùyªéj]Ò–¥ÀÊ•Á­/ìàÆÁÑëÓ˜†µÇGðœS‘Ü÷/@þ•Yß÷±t^ðÔÁ±6@rpÄ~¿Âh+–õŸK€¾÷øõA"8ž*8r…ûßó T Oc¶ÛÏÏC`ĶGÞ ›ÍÇÇfÓ6[\ ×÷‘h¸òÂÞö=,õ5Ô w©$.ýË·{{;<6’¼žiŲÛÍÐíûJ˜ ޵AP/îó+€åŸ?G/Höûùã}Ã7–û"–ޝA‘ÿâoƒdmM›Ž"@ÊùÎÿw €»Êó,Ö6õ,ýÅ¿öýsÅ’EÓÀƒÇÒ_ìKMG×·­Ÿ'* ðÇt¦w¹/Çm>Ñ´éª7/¤WÁøf¾½òXš‡qÙ¨¦Þóï肋¼·Ýlþøãý½lçf¤ç`‹ã}³wRû*Ú©Á2ß~iG¼îý½œ}³ÉAûåùÏ£ýþ¿G‡çËüÃöñ|ì× )û$q~ß8Àd©bˆa´ãŠcnþÅÒyÆÂ80j…Qö£ êï£i DPô[ÚªPî ÕBÔ#Ó ™ë,ïõ‘䊠î·ð¿£¶AzÜvÇ+–i…R¶~î4$íÁå¾’¸`G…Ñ^¸ë¿GìçÉþÿÕ©ÇýùçÛ[[i”Àkó}~~}ýþ» ø×*˜\qÔNîKD~ü×Q †˜‚ÜG2 ZáŒ_× ðMú· )ÁQ#FMÅóívÚÒ6aÅ6‚¦·­Aç›ö±”í|päJÉ7 p'ss4Ú>¶c¿ßn}5@Ê~ÿB?$y›+”iP´Io\™>×ûûLJQ[7°´G†›‡çö*üºÚ×rº"ÉG?(Úç£Ï#G=~»‘oàΦ£ªæ÷£É)Ï©})Ó׃¨×=]QL©l§ûÑù߈ `UcTÿ®·Ë )µ£§æ&ü¶58êh¬Ãã1Ÿ¤v¦GpD§úü¼¥>ZYäàÈM\mÔ÷$'ãü›¶¯Ï·‰QQ1¯#²ê­m>•5$_Gý>“ZIô*ŽØ/óDê~&»G³°Óü½¬ò«–W,çÊc\i”`™VsóHj´ûq_ª@¦}m`Ô[µÌïçy!Fe¤¦§ü—¾×ÕÒ-Izç9 "@¢"é-,Uß·mªêÝâ$W ùø¥ ¤ŽËÏçsË@pÌÏãÈÒYsÀDgxT µi+*8T¹),W¹½_äẗV yTV­@4a/Zqœ^ŠöüÛÛ¦ç>ž;^z¶œÿëëЄU£ìÇóu½øš‚zó>r,U ¹¢èÍL¯}$1ñ¯˜;õ—na2mºro,@€¬ ¹m;J«m ëÝû*ß]77eå %÷ôîÚAMX$1O£¾>‚äôz Ó ™¿É¢ß+àå¤_Q´}Ó×U(9HzH­Ú ¤®ÒÞæ=7]õ¶ÓJ¤l§3Óë¿÷TE¢é xùéUñxNÛ_ó<ï·ë€D€DŸH<\7÷䦪^ŸGÞNûDÚ¦¬¥õ@r"82óìÜšçÓŠ¢E¬<˜W ìO ùÏÕ»ÙâaÛÞûªìçÛ´çÛÃGÓU^¤Wôú8êú"ÖLÈâQmWŒ £gj¯ ¦˜2îãh;ÅóBSíMO­ó1>O>.÷‰ôƒ£åe ÀÊJdi”Õ¹ï:½—Öü½²¦wÛ-ôüüR0Äþ4hÊ(®¦¥¦+Ápq%rÝh£þëÛÏ1’ñ…{\ÌU(µ“|~tVž‘Þ›ÏÑå÷àÊ ùî÷ÍÈtÍôùõ@z£´z+æãý^Ü肞G_­¿­ûeÁÑ“‡ÿö—ºm‡ûæ¦(}?ù·Ø÷ ]‘<ÎyÛJ¥®`8¿â¡ïàÛ‚äÒ ÿµ¯à‡ʹKÚ¼NåÀ»°»ÀpUE°öñµ}.çÔÚó @€' µÏ_úºkíÚÏ€ D€<|¬½À_Ú÷q«>“¥ó莻ÿðøþþT/òKý„£IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot8.png0000664000175000017500000000722113657750470020444 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚíÝ=rÛÈP/áma–á-x+^‚‚ ´ ]5É„/U¨tÂY‚·ÂW2ê¾V_t£)ñçœ`P %ˆÖˆøxûv_¾Ô¿ÍoG‚@¸Óà˜óòòüüòr8äí{ ÀGoØê\ÀG®4~þ|zjW§ Ca7ý¡ªS½Ž½p’ƒ"Hyþׯ×ã”ýåØç ®"8òÕããë`Y¾âpxxX¶£ YW0ùu €«\YÌW&K’ƒdtœq€äÇÀEÈlO#]•à¨÷ãù|üÜSQYàýh.7RÌWí ¤ß+©döuÁ-F¼?ÊÐïò>)CÅËãß¿?<.4@Fz³°rPä‰ò÷ß/1䛇~gŸ÷¾á"d³=Žqpnÿý6û~Uô½nÞ?\DŒþGG¯8÷óþŠ÷Ak(¸õ>[?ž§Ë÷Þ_èò àåR»ÏÏÈü uÀÜþ³Þ•f'£äçËש†„½yÇ|nÞå?TÁÇWëÙŠÙýþ5éFï/³¼8Ã~n†Ï†àÀûg¦òh ÏV½çç+ tù„7Âå®!@Ú=Œ­íL3=¾nÿPV¯òð>å¤o7”‚cdö"¤yèx4y¥7«Ë7®$P¬˜…щzïÕ«ßήšyïýpÈ©$O~ wRäÿÛé¹o× CX7$½ aë’?­éõ½ï7^‰ô+”vó<Œ¾_€ÜxäŠa¼¤¾–Ö¨¢7$9ZÈá0®@€ i®ÏÆw$s·–^ˆõV4¡Þ®/˜»cF€ @ ‚€€@€ @$ @  €€@€ H @ ‚€@€€@ @ €@€ @$ @  €@€€@€ H œÛãã‡CÞ ¦¼¼{]K¦ânÖ¹N´³Az {û{ÞG广7göDþððíÛׯeVR¯‰ãÅ×çýc¾à¸ðà('þzûòòýûë×çmè=Ÿ·ù¸³ "Ï”—2=àj*Œ‡‡?ÿlU‡ÃóórâzZNðË~<_$ÏÏÿúÕÚãÅÏïI ™©Î,7ÝgO¼¥¢Ø>ñ¯÷ï_[Û%XJÐÔÇ[W(í×/H>½2ÉCQ£ ˆ x=y×ÛÒÙÚ–Šåµ‡Röë`)ARW(³ïˆúDÛëelG]A”@ˆý؆üxl—À(ûíã/Û\¡äׯø°àX>Á—F(*öó ¿·­@Fߟ_O«BÉA²<"H€;r®…j½Šc\aôOøíý÷e%W&u”f{{Zð¹~Ÿ_1Ìê5—{G*CJ£zœÈãë—@Šï/'úx¾ÌÈÚš½A²Ý#9͉>Ï‹ G7<_¿þñÇÛ]îuäñÛøžÞĺ"(Á²ã?^íøxý@™ ’íY[|©ƒ"åÄþº9>[qä@(û¹âXNÐß¾½m¦Ç~Þ®{ùøý×W?A²ü;ó]¯B{o…puþóÛëI½Šòx=Ôò¶òÈAÒëqô*V³ý5–z4·c?Žõý{ÉÛfxì¿­Lööbê×Ó«DêŠÄ_pÇÁ±T롪¼ŸƒcSøËn8XÚCU£ý~²wÝG»ÉÑ«Hr`ô*¬øúõ‚Ç^å´î…Ô‰  )¢YDÙ¯{ ëH¿ÉŸÜë $FÝ<_÷@âëFÁQW,¹‡ÒZðØ¾–ÖöÊxpwÊ-[—€(CBu3;Ï–êW %HÚÍè:0zÓk×AÒ¾¯Hž–÷×=”uå1w-®vÒ»÷º¿0àn†°J#öceu^§±ìÏܳ¼UaôWv·{"9Hr哯Ž[dÜóõ@ÚWÿmß³]€w 1äA³­êmoF^—ÑëaÌ,(¬{ íýz¨,K0½çû×êê÷>Ú¯§.ë>€;¬@âX‚ãm°ä«Ûæû¬cÝLoIûÿÖtÛ¹ ¥Þ¯Dïõ@Ú_Ÿ+šüûèý¾­ nz(«²}[‘¬§ÕŽfeõæµ{ ½ÙQ³ApúýºÒªguå–³Áq®;D|B€äàØ^éÝ_™>uÞúN‚Ëóåû׳¶f*„­«ïî{¾®8â„¿žF¼Ýó0´ÜEÒ^¸WiE%²^À×_¡> ’|1ÆÑ}Cf·£ïßêqämI^Xiè ¸;­Kƒ¼­@¢")—4éÝ¡°^ùÝ_'2ÒêI}ôÙYSùûûÁ²µn¤÷ïõìöïo‡Ãìöã^Y¬ßÈûq5ÚÛÉzh+/@\N¤ó+Õçƒd(£•ä³÷\ߪ8z=ïàèÀøèïŸ÷ˈ«ÏnFh«ž•µ^'Ò¾ÑT¯"™_‡Ñ ŠqÐôî$8s-®õÕ~ó,+Áyâÿ¼ãæ“àÞ!©X·±÷çä5íYY%8ê!®^E—Y÷HFWÇí¿¶¹I;¸Ž­84Çæiôõ¿¿~›9aNl1»èùùõvž¾¹?HFQ_³ªl;þ¨"Ýxj¾G2ªPz³¦rdvzn{%ùlÅ¡"vW?>=- ß^c¦Dì—çãñzÏÇv$åž{í!©ÜûÈÇ $í«õ–¡­Þ 늤?ý÷½ ÷^%‡K‘' Ž2ÿ?G{?¶¯'²:Xê¯/Ódë ȯcÜØ;ñ?„UÿòÐM¿’&÷L¢"©%÷ re4ùùùYUû* —0º’+„ØæïËÏ¿EDzmI šå”ƒe½ 8U€lK\­÷ŸßÊÏëHgnLõöë×AÒ®PŽÝöŽï/8YpäŠcö8û+’e¿ëÌçH¼îc?ÁÏ~b»rÂÏ˾ý½ÿêüïyoÏcÔŒ×Sª<ö§ßó¨ƒ#F®<Ö¯kÔ ŸšzßVˆJ$¶{ƒáR‡†>ëD~ê >1@²\‘¼Ž¡·šÕë hWãžÈrüÙY`§ mñ{Èrêà8U䀻z*pHže•+“,½ £Õ©{$uÌÛGÇ(PZ?õ˜à¹Nœï½êígW$ׄpò ¯Ãö,ªÞtÜÞ¬­Ñ¬¬¼NdTô†µÞÿéM®ï 2ûûœ Ž<+íÒ†rÎýzF—}$pÁH¯¢èÉè“íèx98ò‰w¶Éß·>G Äg(߉°^G+ÊGÇë½¾üx ’vŽsìÏ æî‘ä¡BW$£YS³Ó{óX/ˆNýÇ£bˆKšlWE¬`/÷Bo½Þc+ù×ÿ1Ç7‚£·~ç\âÆSpE²Šzop¬×”5åïþ'ï¨<"8â¹úžæ[ò68Æ+ÙçNÄñ{½´™­T>zhM€ÀIÌŠšÞÛïlŸ˜öκ:_•Gþº<ùš[û^×¥È{¿`º5ÏG ÷ζѸ§÷Ù×XW4¹G²ïu޾noÏã\Ç÷NN$Q‘äfúÞ•ë§[çñ^¥â˜{ýQy”ÞÈ\OàÆõ>y~ô ¥>þpîy”mùùÙžJÍØ>ÓoÈó^«>^T£ýËÿåf{ï>"sëA²|--põò:‘}³®8Cå}ÝMØã†¦¸;£ŠCÐÔ»—ºYVLI} “ÊÒ`38r%rܬ+îÆ¨Ç1»Ð.Œé½ì’¯…U_íW° ŽíUÍÞo$Ïòê]{ €‘¯•+Ùïu%åâ.p—²W®XÊEU"œ!xNኺ­‰PøäIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot16.png0000664000175000017500000000517713657750470020533 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíݱnU`[Š@¢á\@ÁÐÂ<@Œ"”a›Î¥¡æ5,Y2RLE)EÊ~ JVGã=³Çwfwm¯w¿O².³3»Nâ0Μ;wöö€Mppp|Üuþéðpgg]÷qŒí`ÎÑÑõõíàèºÙÛ±VU£è<´7oÞ¾}÷®ëò¸·7û¾€À¸''çç''ýöééË—/^ C ìhpä×»nViüóÏŸ¾~ýñ¿Ž®¯?ŽÇÇ·ÇÃÃ㜟ÿ÷_ÿ9ヤëâ{ÍÆûöÐß`kÌNž77ïßßÜô'Ðù“j×]^^\\]Ýг³Ù¾Y`ôÛ³ý³OêºW¯ö÷Ÿ=$q9,ŸØï;8ƾÀ¤ŠcXaDPĉ6¶ó8$ùÒW»"É•ÁCW$,±¿¯<¢ÒÈGlljwþ¸¸”Õθ_ÇÃU.ak'ÀÝ8á×—®Z•Èìøü9}eSD,-NŒ¹)AR]óß®àˆ|®†DþóÊãlôTr€ô—ÆæåÌýˆ°²êD8ÿ/éáþí ¨ rpTû‡½‘ùŠ#¶ãûÅû«¹}_ÉâÞÇØûÔp ˜¬ ˆª©¶ÃÓ¨LÆV Õû£ž{$ùýyTã+— €¯8òXø«íÖñùõËË‹‹««~;÷Püä6,@¢ò¨+ÅÛ­ ùí·¿ÿþâ‹:8¢bÉû?|øõ×o¿6ãëßÑ}7¹5ÑÙ&Ñc„5Gn–+ˆÅ³¨ÆïŸ¿”•+‹±³ºúf;­ÇÔYWÕçå@˜züpÖ ùRUŒ­fy=Ëj¹±ûºÿKYšç€ äS%QϺšà§ÎÂÊÇW³¬âÄ_U±³¶Z¢©ðÀH>ñW÷äYQ1Ž žª÷‘+ÙTÂz» ŽñÓ{X)@ò‰>KµöUk–V$QIŒ­@"8òþaPÌ–4É=?i€{®@r0L]4±UäÞÆØ ¤_+ÖÆŠí<æU|X‹VpäÞHµVÕ„ ˆ±ºS½ÕÉÛÃç‚ÄW^d1ö¯{õ^Mt@²pí«ji’jÑÃÜ㨖@©$W ÕØˆªÉûXkTwš·f]µîûÈÁ“/aÅûãsóZY}¯#_²ÊÛ9(rÀxŽÀZ¤UyT÷sÄñUd¸–Öâ;ÊcµÝ|_ÈpY÷ªçÑz]àA*8áŸç±¸B©ÞßZÛ*ß·ÑZ¾z>H9XX«ê9ùÒS®4ªÙZ­µ²òÚUõ3Òç/yÅØ7±«ÀÈãº.]ižÜ$9òÒ&Uä×§>½ÚHÕãˆ&»^ÀƒjMçmUæúÝkfµž©’DÕO ¶x"ÀFÊFuikê,­ÜœÏÛñLt€'R‘ giµVÙ½{•Þºç‘{"‹g}ùÉ<Ñ@i-Y2¶"‰ ¨Ï—¨«‰­yp/²®'ª0Ë«÷ÆvõþŸž€Mi^k¢ÜóiÖ‰àIœ¨ó¸{b‘D€µœ°«xu\+€ÆTõy­ï;öûô¯çUxój¼ùI…³qÕ߇¿iÀÖÇØ `ì qS?¿^m·zRáüs@–ÿ¾[ Sÿżê ~]ïkŸÈóþêÉ‚U²x{j¢y¨@¹YöRÛ0@¦>Êv>x¦£ÊØÚÊcìþU+–eO¼Ë~þð}­'æ ™ï…Líͬ+ˆؘJ«õìóè…Üý(ÛU/Ñ §]©;ù?þâ £Þ¾ûÉ„Ë^ÒsbØ È÷/ûªÇ1_y\^^\\]uÝÍÍû÷77«L0k àIUqâ ;ÞýÖ7ûL€lh€Ä ¿@p,Ôº5>@Æ}^õëjÍb( c+‡±—´f¯¨0v @î’oÞ¼}ûîÝ* @¶"@ªKO98ò8õR— `k*¾.¸}|BŒœ*@ZA"@¶,@² U€Œ­HÀ–IUQTAÒªHÀŽH+8€ Y)@€ ¹3HZÍó~Ú¯àØÉ ™ºV–àØÑ ™Z™,û~v$P¬Qcü4š.íͳ»óIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot19.png0000664000175000017500000000454313657750470020532 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>îIDATxÚíÝÛmG`9Å%ÅHâ7àÒ…C%ªÀ/A:ð» 1 y–‡3³Ü]î.¿0^$Y”°¿Îœ¹<=<°Ã¡ïã§@øúõùùååpøôéË—OŸ‡x¿öñì>8Ž>~|~þøñåöõõÛ·××Ã!>?[y¾5HÞÞžžÞ½;ÊíÜßíÒ_`÷•F«,8b€Ôƒäüñ¹/èÙç$Uåþpˆê({<G¬Xj+ƒ¥+¿ÁQÄ }¹?6@âçÒåÿÇÒ‚àè SEpù‡¸Ê…¿ÜÆ/gÁÑdKˆàYyœ‚â<b…Uµ ûÿš;@À•G^œJì‰”àˆ·­Íøáôß㿬÷ÑzÁï}ݽz-› 8ÔT Z’ÝM¶Ždªõ"àFñ/‹Ú, @’]ð㬬¬â(÷ó……çzge Ž™d¥e6¯^JŽûÁùÂþ*øq­Híz2\€Ä öI½Àã›ø‚Ö ý×óñz1¼~œW:ñú5\€(0‘UµùØÙ/ÆØ¿ ì/H²x=Ȇ¼bÐd_[ÂL²Ä¯Eö‹’]öV"‚¶ 1²½®Z¯+µ¡ô[+":Å7>+³_ˆ8Æ™m1Ð;D¦ýIÿ…ÿ<bE’‘àX´âˆ?  µfúí }m.Þ¶îïKUÐZ¡°1µÙXµÝ3³u$‚è6±ç‘­ôüå—÷ïÿøãô|¹_n³1L°q±BÈ+Šs§@ùüùÇS`<=}øp|ýñqCUVq´¯-ñöö_`”àˆ•‡f9ÀNÅ ¤¾°ÇñöT¤öu¼ãÀPmÚ/›¨H²Ê£<{±'R 4`²u$Þ!`·jðøƒ€‹Jå÷X+÷MúPi\=W"ÉŽ=ÿ¦•ÍAk4ÑH6ûpêq<ÀN$E\÷Tû¸©€H|¾uý“ q¾Äú–ÔZId»K·V.cƒDpÀ10†{eÁœÎO¾‹³ªjG4g¯?‹¦î?¯ñϳSq¯,BÝ÷ïÿüó÷ß·üžœH¶7[ëù6ÊÆ  ¼"å*Þ“6óÜ!@`9µ3¶³ ${½ê ñ~o’}>`AšéÜÓØˆwnnšè49?GDp½³°€UTeÈù †z$ܳ"©í¬ª)A¢`D¨<èÔÚ×D Ëo¿ýú«!%RýõûïÿE Œxß;ÀÕJ£œ_RvI.÷oMt&ae:¬=H²ŠÄ;ÄJĆ֋ÀZÄ;ÁFÄT°t@ 6i¸KoÜò˜;@¦ëmÀŠ*CX0pLß$ÏŒmŠk¦¨@`>×{*˜/H›6`T€d›– “¸w[€»[KóZ€Çf+X…¾æõáp|}ëíÜÿV/·Âír=¸ü„V_¿>?¿¼Ôo{?ïT¯$ Ž¥‚D€l48^_¿}{}ÞŽ [+ÁpÇÈøùBœG9É1ÞN à ¹ `#•G ˆ±Ò;Ý: Á°Òà(÷³¡ª,@² ~¥··?ÆÉ|Ó…˜4@j=,@Êmü:§`i °ñém¦—!«¬‰=°“$18jÍôzE"@6 ½Æ® ‰Cb*€H묪[ €ÝV"Ç¡§Ö¡*Á @º‚¤w¡x° )=Œ‚@tU$ÙzÁ Hš*Á±qµ$@kÜû@)v(ö¨€iôžS‘}žéNÐà®â=Û6<û¸ÞÑcbÕ$ØH´¾¾v"^ ¢[÷j ++ŒÚ™Û½H<¿âÖÓ`¥’€×»]xí$½ÖÊÃz€ øñÀiÛ–¼·2àNÁåÆçÏ—zåñÞ&yïÖ?àÎjîa|øðs`äÓwû‚dí{ÇÙÛ ¹0öIµ®iý¼.ÐD€ ÆIDATxÚíÝ1rãV`a«6u¢@Áv®*Gêsú<‚S…ªr8'˜r¤x¡pB]»¶BÍ÷H‘E~_Õ$åÑþé×?ýp8›þ`WWëµyùt»½½¿Ž»»áÆ®Ø-l ޏ38 ,HU@=8)›ÿzþ¯? €³öýÅf“·ÃTÒ¥¯ 0^Âz½Z}ùRï·^À™GþzܸöõëŸ><<ÿþööþþy{uµ^¿Þ_ÏÛþ¾s›M|Ö°=¶÷þ<€³1\<Ÿž~üxz/ Ó‹êfóíÅë ¸»ŽEÄþpüññúúùuëu|F+HòÕǾ Wï/HRqÌ+ŒŠ¸ÐÆþj5ÝÏA2êjW$¹2x½‚ãáá￟?VQiäŠ#öãÂ;=/†²Æ÷éû>Þ¯B0„L\/;@â‚A2¯@¢âˆ ïrïÛþÞÈG 1  [\W«áÂ6m×cþçù_íÏÿ¼òv8=• Õ*²¹süÑVqämü‹:ÊyHÕñyodZqÄ~T0ñú*@^ßW²Üû轰€M‡ZÚHµŸƒè<*êõÑ Ï=’üú|<*Œþ Äpò•GUa,ßßÐ,§9ô•¤ÕänU*1ý¶5ôÒ®@pòªŠ£ Š8âZÞÏ_ÏÇ?ÚôE yúmoàTIuçúRÄ÷€OV‰ä@ÉDu~UqTçVRU±ÍASA+Hz¿/€O ª0ª ¢:ÞÚVÊÇI­YYU…RÑî÷|š©faåf{«²hõVNc6Wk6VÕ ÏAÒ[Á¨<€ Ô €:€–+–*hN#H¢¢È÷qÌïL~µ*˜þžÀÙH«ÒèmÆW_ÿX$­ $ß×QU*€ÿkÍÚê­8Nû†Ä¸Àç!«\Qä Pq”z{UpDOå´*jºl~ Tשׂêõû~g 5«ª÷>‘Ϲ$JT­}_Þ\¡œÇ"ŒK|R1p„€8ešç\¬V“\€³§yÀÅÚµ)®‰—ìööþþ¹"¸ºZ¯_oãë0Aqw·Ù¼ŒØãŒI…A±Ù ÛØ_­¦û‚€QiäŠ#ö#Pòy™æ9À…V"¹âˆàPÐ$«ÕÃÃÒVpÐ$y›¼Ÿ·6Á5ÑØQ¾ÏÃ&le vª4ÚK˜ ÷ä Ñ<Py¬wYÂD%À$@rÅ1.a²\T==€ ¯Dbí«j¨«º3]àÂTCoí¡pæ•È ñk¹2éí¡hžœy€ìÚÙõ|.¤©z"ûžÀ…IkY÷]Ϻ魉—àææù¿›Íz½Z}ù²ÙÜÜ\] û¿þúÏŽûíwŠû,Â8v¸€O9 òöû÷ßÿå—Íæññúúù¼ØÏ‚&öÇO¨Ö¢ÚuÃc5¹5Ï:cŠV`äàè݃dº­—àD AñïuŰû¶zýðõ¿þúúõ?Æ€™W–8i77··?ÿ<^àç2ÝŽÇsPL+‹ˆ±¢™ Éïï'p"þñb¼ ç ˆý¼­.üÕ~ëü0¹"ÉC_~r,÷8¢ò¨+åývÜÝýöÛ¶`‚!Ï2qUŽÝäÖDG¹Y¾|¡ïïqlÊš7ÕûfuÍvÞ58¢YÁûUT=ö,«åm=½·÷üª'±<¯©õú\y w™×ûUd^‘p`ÓYV98ò"‰ÕjºKCZ98¦ûß¾-UUÁ‘σbXÒÄ †ïX,C’žYVÛƒc9Hr ôV ãX±ÄIìçíjeñE€#hGn²·z󡬨8b[Ý©¾\Tûóç‚į¼Èb?t€h¢*ɶµÆÕ¿^´gYUÍøêôªÉÛ±¢ÈH«ÉÇ8ðPVß,«Öj»óY\¹g2̪Ê=‹ñ}§ke½¡¢ÈF¹1”pQQ´*jÛZÖ½õ੆q(kyÅù²î­ £ªP8jÒº³|ÞY~}ï’$½ËÀWÏ™FT¹Bà ªç|ÔÁ²Ü|ßw­«:hâs§ÍøñW’Öö­4϶É|zïòZVãñáâúÖg¢×û9@ªGÌÂ2dðΖggUÛöª»»­‰Õî‘,O ös81y¨ªÚÚu–Ö|Úïð~½=ÏDø$ɾ³´Z÷T•Kõ (ÁðIUw¦ïþÌôiP´Î¿ƒjbkž%PõÄBÀÅËð¯öjõÞñYìËžž~üxz$|§Ò¼ÖD8òeÖ…àS\¨óöòÄ"‰¹`Wðê¼VõTõ~­ÏíýœñëÕ"‰ÛWã}ëÿ‡¿iÀÙGoÐ{A<Õ÷¯$?ÊvyÞý?àÌd×1¿õ¨×µ/äùxõdÁªYÞßµÑ<T \ì;Ô6¯<ú‚¢ š]ƒQeœmåÑ{ü­˾Þ}ßþºªâ¨ž‰>í…ìÚ›9Tp2•VëÙç«ÕôR˳´Þ:D'@>MpT•H«7²ýÉ„ûé €ŠŒ¾ÙWCUÓGÙ~±Ùô.ÊX®Y[Ÿªâˆ Á·ííöO8Üì3p¢üØæ× Á±¨5Õ }ïW}_­YlàĤ·rèÒz|¼¾Va\D€l’Õ×.ß™8ƒ©†ž"(rpTÛÞ¡.ÀÙT ƒ<UEžÅUÍæ  U’ƒ£ ÞŠD€œiÄ…¿U´%ˆà¸ÉAR‡$[+Þ‚dëPVk)Áp¡AR e &A²ke²ïë¸@±Fôø˜n2E½‚HÐIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot30.png0000664000175000017500000000533513657750470020523 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> hIDATxÚíÝ;rÛV`­À“¤qá&;Ð2^B¶ Ñ Xdî4*Sx´–jÓ9…‹”)¼5^2ç ÈC^âA€ˆï›±1|SàÅýyîÀ»»«Õï¿ÿúkUÝßüxwWU_¾üùço¿UÕjµ½\ßþÇ›e}ùóçÝûÇí¥Ë¥åËËÓÓãc}ùÛ·OŸ>|8|ý|ÿ¼ŒÛï×ýýæÿ:8rP䎾$§ƒ#î——MA’ƒ¬个z{«*ë5H¶tJ®HêËÛÛë ØV ¥`É‘+Œq9î˦ ñI\=Hš—÷÷»²]æ (U(q}C©¢(H"ŸÀ•ýòîTrz¨«©‰ËME©ÂÈïÇ'0¹J$ T‰ÄÐÕ~%Òw2½íœH<ŸO `&AÒ\‘ìe5W(û{}5U$‚`ær¸{ošý 8\žÞ=×äø2äÊÖEÊæÿcC[1”µ½\:®#W *Œe~!1§©TŽW: •ÇnpTÕÿ½¾~Ѱ¦P0~ÅjUÕöK±œÚû`&AÀB;ú¾EÛû·}þ|{~\éñ]ßÛç ï¹Á0V Måy¸R€týÆ?V€œ[qp¡éûücˆÊ`à é:WrîEÛ9¶ÏÛô8spœ¹3¶Ýe»ý?nÚËËÓÓãcU½¾®×›_4ŒËçÂþã×ë¯_×ëúùW«ççÍëùfÑ‘G€ŒWAlŸ7^'^÷0H.}€ªb:9 Œí¿±*ƒüzåŠ'wìcGÛëØ«@òStìu‡Ÿ ) Ž_ŸŸ¿9°®uÊÐØQªÊCZq9 m¥‘_ ÒÙ¥+ÁÐ+@6ünš;þy%OÆ—‚ãû÷?~þܪºn€€ÞÁq¬2ˆŠ£T‘ä9Œf*ÝÞ½";@ÀYÒ$aE—ó|EûàÈï«ëÏô †s_@€œ”‡¦êŠåùyÓÑÆåªz{Ûüßÿ8¡vW <$Ë\Äýb%0x¹Àbºñnùµî—ç8êå¶âˆË,]÷Ú*ˆS¢:èY®—NÄ熛šÒ¿úsñùîðƒ`ŸÆß±¿;3 Ã@{th?€ í °Á‚ö6DÐnÁÚ7ØpÀv€A€@€ @ @ €@€ è³)Û ÀÙA"P €Ê¨L €Ê­H€€ (@  @€) @e‚T&@e‚Šõ @T&@e‚T&@—#PÀ`‚P™• P™ @b=•‰P™• е 0X  @T&@e"HT&@ X@e"@T&@e"@t¡Ë 0x T&@e"@T&@ Y™•‰P™f(‚`v"@˜qe"@T&@\®2 *Àå* 2$\¾2 ¥W  "@¡2 Üxó{[âoWÃ%*À • ôªL ‡UÈáu†¸F Šã·—*“¦Ç÷ ¬sŸ€‘ƒ#_¿~WU±Œûåëc9ve"@f¿«—qÿ|},ë Ù¯L °°àø÷]Uý󮃸>ß^’(à&‚£  ¥‰es€t«LÀL$ÄùHé}8p`–ÁÑ·éíƒÄñ&7 ݇®º¾/A0« M“é¹ï}©L& ß¾}úôáé½§ö—,íŸg˜`$W棾7J–†¬JÁ2\€¨L.§¢Û7û¦àèZ! ¿·•@83úþ0Ôeär»é–ÞÇÇ«•€C§g?Õq7 =µ ˜\¿~€”ÖëÃÃvùùó_m–CJÛÏO…L$† ’íûÈ{Uµ©w©ŸÆÍ\Ž`q9‚£$ç}®«Õóóëëf½|ýÚnwf‚a¦ß4s‡^:®£í2ïö;~Åñü¼›¼^æ`É·÷ýœbç‚mP¼¾®×›çûþýÇŸ?ë ÉŠû½¼<==>w®0A³ ˆÛù+w <÷ùò‡ã½óŽ\Qt­\Úvàû·çŠ#I9(öß?Húí ÁÍcÕT× ’¡~j¼wš‡žbÉXí㸊ªz{ÛÊjz•œî!@ÚQ)MÃ|e:¿Xš³ˆÊbœ iª("šƒa?x† íüÆ:²©=ï\˜`` Ûq»öHÓœGÜÞ\±ô›£ñù-$8¢!ÅXj,£a6°¡‚d.×ߎËÛáþ^X¹)E¾}¸“KÚnn:8¢¡´ÿ2TƒºtǬràv¶ç¶CM±=ÇdzŠ\‘Äý»ˆíiÁ‘?ä]$*”º!vLz(LCf9Rúâw¸=n—›ûÇòØãóåæs—±ˆ‰†JßWËC[±×Çp" ëGÛí3W$q{žL m`Ñ€r¥‘V©És ¥o>¹!v/qœûŰ y{ÓÛÇ2¶ßrðE—¸åGíï'ÞTÊ–.î.Ø7(4HèÛQ—FLßÞ;¤´WV~>²°Vj» ìX)»;Fº;V*`>•Hîøûîsx.-Ûõ"¿¡d¹”=œÃ8œ|ëÖ54¸V%rîgùñ¶kr$@rÉÛþ,ž¥o8\;H®ÝÏp£R#í·—–aÚšN9Ò÷4êÓÜîÏÝ=ßv,HzJéÕÜË•ŠÇ‚dè“Îs»œõçý¾Ûî…¥á1ï‰v:·Ê£i»s²TF’<$%ï/ži?–ªá1ù‡Ÿæ^´ Ç]1@”Ž4í:l 9Géœn¥ ÉtŸ€‰—´—~<7(ÆH™£<‡CTm“€…Ê?sç‰ ÀbÜê,*޼{ni¯«±å¡5•ÀÄ+kFVZSÐ)Ø ­Ð+@¦2´ÀL˜»¦#¡ý^ÆiMëÇzn¾Œ³Õ–ŽSÈ×ëO†³ÿ‹«Dâéޏ>.çÛw|ý9ǰ¸oÎyÙ¶B ùôñÖ pãš*CVí*ÒúQ¡\9Èàvý lpURõçIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot32.png0000664000175000017500000001053013657750470020516 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ãIDATxÚíÝ?’ÛÈÇqÁWÐ1”:p0‰s_aŽ0åh/°®Ò ¶mîDU“:ÜĹްW›B½ñÐ `Hÿ|¾UÚ6C‘rçׯ»ñé.ÊÛÿ9ü×' ‘ˆ@  |î"D ˆ@$€HD @$"€H ˆ@$ €@7%’_~ùõ×oßÞÞ¢ýöâ¬É~2 $„òåËðê——¡½—Ï#þ~þeÀN„0rB©®bñÉ€$²(†H ½DòúJ,ðÐ"¹7Bx÷6W+CU—Á$’6‘kO>Dr¦ßÐïísÿã'ooÑš€H¤IÔ`râ@Ü@.Ulγºâ8¯G9U{mëZ$D²³#ï=/תŽÕñÖŸw)QæDâ_€»É¥ÅñòòôôåË\uÇ<B¯ã¯üxyyûÉëëññ‡ã¹`¦¯Êx 5À•$‘LNkD‚Ž·¶Y4ÃqK~_9!j€3‹$w´ÑçÅúD1 !_×þùçÛÛôñ¥Ä’J~ÿ\H$Yu˜wì½6 ¥J ½×¯I(ùï3«ª—8žŸüDBÚ¯_‡×LÇññû¦ûÖI¥J@­D•“W/¡½7áÀÍR‰#ÄRË«G$›Š£N$Ãqž5U­óX:n×T–‹íyH+¯œ7ô+‡®ZâXš-5Š"'J£Ýæõ•8æ+Ó§Åñ5CYíÚȲHªÏ >ŒCYÓ½ªêé¹1d5ˆ"×<Æu‘0Æ¡­V-$'’jAàúD2I¼Ï,åšÈi‡²îX—㓈䭵¢|mqzèX«¡ªi›…“K~½½³Z¢›Îë½ÿvÉID`èª3t5vÔý•ã-Ѭ­yÄÏËÇyVT^ÀXyÍE²íý÷j"àNéDRuÐѱæûväYM9ai É¢@zí¸Ð¯–I5;«=+«½°àîÄ ÓÞ{ÿ‹¼»õ}^gqhÇ@M×m´VšOI.ªÇó«!µéßkl{5‘Þ:’Q K+Õ«b:<|¯W%vñ¼ÞzdZ<ókkuBZNJu"™'Éšu!…xzsoÝÇÚ„Ï2¾;Þ°¨ªR'’ê~"ãû®V¶4¨o=CFëÈ´8H{GN$U­£š«j!õ‚Çj…zU#‘@<(ß¿ÿþû÷ïcG—«¡¯è¨×Ìjj£ç»ëN;òª&’÷ÚÊëCò&‡Õ=ÓGÌ~N Ë{iMïhH °’þ,§é쪹@r1=ž7nš˜¶V®gqì™…µœ4æíòl0€æÐÕx<]‰¾f(kiG7ÞIüïA 9 å÷ÓÛò¤µ}Zûh/@¬Äå_ tD²¥˜ÞÚÒd¾ò¼Ú kØ;kžDÚé­­M ËâØz£)ëB<<ó½°¦"©¶uï%Œù^X¹ÍId*œýÛ¼¯Ë|åûð9ä–kÅq®;DÀ‹£ÝqV³²æNs± #^ÓN,ëo»÷ü4qÄ‚ÈøûõÄQ ýÊDR×DÚ»ñNïPX'‘v‚Yº§ùt–Uï|[y–Uˆ$'0CW°3‘TCYyA`]©ÎWÇÓYZý;Ö5ŽããjvUõ÷õ/6Ò[©¾v÷Û%Ql™µÕÚí·}?¼Î£8æ÷û˜Ýù'ÉÚ½¨ÖÞØi.†<xžDÚ{o-ïÅÕ_×ApÖ¡¬J,Y$ñxUlïݰUCi¯ãh¯Ï☯$_'Åq8“H¶ÖH¶¬ïÝÏ#'Ž¥{¦ïM ìdíoà•Hò¬­ýbéOw÷/Ì›4*ŽÀI§¯¶ÅQ­©Ä3ŠdÚöîq¾µ­võ]û~׊ѿHÄŠéØ­÷??©‡ªö'šéºŠ*¡ì=‘äëû†àÌÉ#DÙûüö[é¶“ÊÖ6®7á×%Œêx+½D¦¦àáÉ^1ô:Ús e‘|TG~jQÀÕ'‘^MäT¿¡o%ÞO¼¿µ¹ÔT<ŒP®½ã|¯Hú ó=ßO+R»ö@GCy(~í¥‡r*!üñ“ì®uÏ«„ÒAü}/%*ø0¢£¿öR‘k8YÑæ÷WÍFË×6®Ï_›(âõ¹æD p%ä¹ê #!„*DJÈ"Ú*’z‹–8<<§®œJÑÑG_uØ=Äã£8†Ÿ–E²õ}\‰8òÕ¼ãžI!¯ƒ©’D¾Nnãù{…@$pe‰C5ô”kY ùõó¤2\«WËX;+Ì7 ,ŽL•8ê"ûׯ‡s[‹ä1{«'CX¸t-dÜ•wè¸{gi ÷dω$Oß ‘T+õ· :æøMýòÅôiÇŸ‡˜ª6¯ÉÉ"Y{]€!wüUÇžkÕBÂ*‰ä×W×'¸Qô’ÒXˆ¦*‘ŒCXÃP×üõmnL ½"z0_q>IG5+«ºþÞu!€Iž^[Õ>Ö®Éçóë‰nXÇÓa«u¹žÉÚu ÕuÆäB pÓI¤Úr¤·UIu¾J*ùçúàÆX¿@0ÎmHOX¾¸S‘äÇ· ¤Ú %ÿ\ß܉HrR8õ ¥7Ëûv¿=݉@Å—/Ÿ?ÃËK´OO_¾ÚççãcŸ<¸(Fa bCÃño¿ýóŸûÛÛÛëëÓÓñq~½OîN‡ÿŽþ\C»çÇ__§ç³Hòó£õÉÀÍ1¯CýÉ<1DÂ1ÄtÝQ Ó’§õf‘Äqü‡ÂžŸ%¸ê¤1&ŒC‡âˆ6:ô|œïÛ~®}T¢ qÄ4áx}>&¸bqLkCÇ÷x<=_ dÍpÉÏ Qü÷¿ÿú×ßÿN$p³‰šG@G-qöÕq›R‰cHÔHàCÉÉc^$o‰#:ðüŸcä]wC¹E3üœx~U©ÎÇë}p±Ä1$Œœ8â8Ñ+qôDRÝÛ<^"ˆŸ7Šcz~.–éùñ}Î,©8¢C¯¿}[Ép>Õó=Íó¬¬Þ:‘Þq^°è›€‹ ¤IÒšÖ<ªr¼ŽãС‡Hrâhžÿú:¼ªíÍÚòÍÀ™øËOŽ×uäYUí•å!ˆµCYy›÷ÖôÞ——Vq|*Œê|U\7”H­uyÖÕ<©ôÈtöU5ý6·½ä‰#'‘Öõ ÎBµ²|ʼˆ>]2Ì4ÁÄù˜mÕ«ÄÏÇÐÆvïÕqUL7+ .@Zm•Dr[½>OÎë6ªH•ßÕz¡­»àÂIäÔ‰aëuß›@ˆ>(œZ<"S=~jTC^§ÈÚQxXqì-¢ï}ÞÖŽwk­¤ÿþ¶ýœ½ŸçG'DÀ…D»¿÷zqS' ß\™8rÇÛÐÇîÀkÛ|‹Þ½ bíàƒÅ1=3Š ýþý÷ß¿E‘óóÆÔ°öç.Ÿ'¸Zq üñ“ú|NÕózCa[׳ʃýõÏ?[¿áö¿Ùåìº;¸~ÜNY cÒØwsMg\\ÛÒK ½ël}_W.jèim ¤wb€;ÈðŒùó¢6磭j&ÕuîT ™˜¢E2\/Žó¬­s¿/¸ê.wߟûH^בÅCTY ýÚ\†ÏŸ_^ZŸk~<Ž«çØ!ŒK¿þº5¹5žž^_ŸçóóPƒŠ6ñõëð™?= ÇùyvtüÛøå—_=.&Çñöëæ5çTÈÒÚŠmÉ#·[EBçG|gqç£Íçløw¹ 1¼¼´½uyúëÖ÷E À»‰$‚ó‹¤×Ñ #Ä1´ÕÊsâ€Èú…Sª¤É&¡<¨HÎ×!ɧqeyÈuuØ‚+ź Ü’.꽨.yC©KuèÄ+#Ï–rCÜs2y¬[ÙH¾£•$°HÞË*ßJÐA{@“J½•ê@À¢ r’|VCf¹c/-‡O(Ä1M¹c Ä IO!€@ \µd€@€]Ä‘ÄìB) `—8 `f±Ä<"y§ ìÉ´6qꡦqa¶@ ¸ òm3ΕHòñónŒH9œ{¯¿œxÞÇÿuÝÙŸ§ÕIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot43.png0000664000175000017500000001103313657750470020517 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¦IDATxÚí;r#;EµŒ1Ú‘©%h ´ßäËGÛ ÙVÇ‹Ö :Úb„âY-wЛ˜p‚È‘@VfýÈúœc¨,þT¬Â­›‰ÖÏÛÛáððp>s$ ÉéôúzŠççÇÇËVÚoo©Í€&"I*.ÛÏϯ_s[ös¤ SH²I!,is„  9X(Þh+r `ÄáðåKNšëQY!èDãgBršˆãÐDr¤ ÀËP‘Ðâññíí:‡"mý8ÀOO//ïïç³l‡$Ç£T›˜’jLp¡HŽ£v"M¬‡<þúŠXî;@#ȹ‚{ ŠNv—¹ ~1€…GÎ Èh¥Ô¾_‡-•„„$8ÀâHµí@¢½Fê-d;ìûä׋°õ}?¸ñÿ0'S;šqލ~_ m‘«Øº`¯¨Iç8´ãX§óx{»üEèôz/÷þ>§¿ À‚Ð9“iÇwݦ^ª˜…Âà! …寅ÄU-ÛY=?w “Y²!؉èçu K]i’#Àÿ;î²CŒ¶-aÑû‡ ‰äD–ÖqG…`áxÂ*Ò¾tðÏÏõçÊãÞë=!¢#X©#©;ú$ yûú*ÛËþÓ)måù§Óñ˜^—¯_ï Kz„àfޤÝázwü^Ç® E) úyÖãC·ò~üÒ3 ‡†üxy‡¯…£îøÅqhaHÛó¹tÑýâTô~ýyQǤ·œAáЮµ_ K_ [éøµŒo·‹-mÅt^ÇiuÄÚ1Ø9Œná8ŸüHÛß¿Ëv) õ~ëùmaÑßÏrLÞ`€Ý ‡í@ºsúñ,ºÃÖÎÃêø¥-ïÓ½_OaÒ÷õÖ÷´r6 송urn;ŒvÂsÙ´;vy½õþºÎ#W ëç[Â!•êÝŽEÿ¿:§B¨ 6/}•ŸƒðBKÝÂQ‡ªÚŸ—GiG…Íû¾Ñœ B;t$¥ÃÐ9Šk'ÒåT;Œ¶ãе' VE‡Îô\Wu»;2t¿v$Ù•B²´Ù‡®tA_ˆòq+ga‡¦†ÝÑû9’œãhÿ-CYöè®î÷·“óÞÿ« K”¿ÎVN=ÜÖªËHmßq´sÑœFS˜¶mål¢u$Ñÿ÷z”ÙuHMÏŰGÒ] M†ÇIl”Sß:’©*Òû×¥XÂY†®ò÷ÄÀ°pŠN:¨s V`hò;ZgÑš#kÈ$ŠžÃŠÎůS‘ý‡Ã—/Y8¬ g,l ”eÝG ú¬:жywþC…b¸°LS)ßwÔ£´`Å¡«öwÝñ÷«ìöç²jWv‚îŽ8þ~åñ°ÛeN(*$VIrç0ÊŽ©Îc\†WÉmuìžxÿïØõC¢¹–¾ÇK¿þÿ8c`5¢ë<â€Ó8Žù–„˜0ùë•´s4Ñäºu|X\¨JßQ[ûãÉr+tSæ8¬˜ÿ)T†9Š±Â£…Ä[Ÿ$îມ,X|(Kïø¼:=ê(šêªšJXãB¢sí:“è”)–€ $°x¢÷¦E¯…£½õržÃ¸×ñ‰:}ÜlGÒ7¹›KË® pcÎçTîÝš‡½B 5·U{®ªxG¬#^šÐzÇÏÒùë•XsiÍëÀ&Œ[¿îÑ1zuVex]Y­ ïªZjhÏ ­YŽdnp'áXÚû"H÷oî'é謺{=ŒîºŽ¥ GTH¢ÂlÍVÏ>Ün[B ޱŸƒ`ÜÓØ³ÐÆæ®²*Ê×*}…$Úê¿Æ;•ê1ŽÇËQ{zzyyçø¬X8ú~.9–{t„VŽÂŸëª{.«¾ )­åŽzø(­¶ÃóÖK©/¤<<ooׂòøxis|n$Ò‰|üúõñq>ÿþíÛÏŸ—øxöCD…æ²#껞‡—ñH-dåzSžõ÷(Hôr$þz#8q¼¾^߀âHî$ rÂË!"‚Ò_He;¾³Ë[\¯À'Ó›Ëlµsœý÷[8ckÆ{u! $‡‘#9ìHàFÎ#ýÕŽc:Gb}/ä–¡˜èÜWž>·•^XiÞéÌuxt®ÐV4çÓw}d¬#!„5‹€È%'¼ ÿÎ6*$ú{‘Y¦é®SèZq/R÷¡VÒí[\sI}|ÛÿNª÷œÀ ‹ˆ,$IDHN§ÏÏi;r„a¤¼®¥XÂuwšò>/ç>î»Ò\!.n®îÙ{-G·GЊâJ]™€ˆ`XTÔ‰ kq"í5Á‡Î}¥sÒŽ&——pµÜRH<¸ÝõAÊÑQuÎV% ÚqxB1_në@†­8¨÷kᜆO8ö'$Þ Œm籕QXY8¤?d·çP`Q¢…Ä-4ÒF@Öê@Ú9 ow-8¶)+Ñ×tõL‘t÷FaÙk®o3ç¡Gí@p"«O,Çâ Âq_Á°:²î;à, ÝëWèP–ä6–>iâÜÎÄ…å­+²=!éÎqP·±rÑB1Vpe…®¬P’u eé ë‘¶Šé+$þ'Ýk¬ëÀª„d½Ÿ }H=Jª=J(ºˆÃß›#±r<žáÌ… ±dbudVŒ¾ž-¶=jËZë“XóÕÔ'Wb­h¸Ð9 „áØ°x+éÕŽDr"Ý+F’šJHî½2Ÿ%$úÿ•ãgçåŸ9åì·õ°\Ø™° ÔCUQâß!—ŽD‡²¬:ÛátÇø‡ÎÞ»”º-$^ÈúV”d¸ ¿ÕÃq)DPXÒvó¡,¯£¶îû¯¨×íl,¡™Û±Ì}|µlµ²¼v Lb°ÁPU¬ãµï˜»§àÐŽD×™èÊw;wÒoEÃ[ ƒw¼ê¹¿æ™Ìñþó@X‚Ó’Û£³¬¥YÛ“4z[[P¢³ýk{¡±¨£ó†ïnOHŒŽ³ï\Nõð^o½‹¶C±ê"¬vôû …iáðê^,Ø­c±„]'[o*‡âuäc‹ÎÙHN¨oŽ!€Õ;è·5JËov_oÍu;‡ÒÞŸÿ¿¶ðä¹¼† I=—X),}„6ʲŸgMÆh…¶¼¥tc¯ºíëdÆ:}<­º•í&Ý aÑ9‰è4ñVI´mÍÍe}¾5÷—õýmGÓo9=Š‹3VC´n¤mu¯wá­uu¿~ªœKÔ¹Ìý{ $°Y¡‰ÿÕ9 oMp{¿=|ØÛ?®Ne¬Ã@H€P–SG’ïv&VîÄw(}Û±ËØ\Ç­„A€Õ Eôù¶C±ê:,GkÛu(íï³ôõ9XÞ,·ÑQZñá²Ýshͽ­“è1‡…ÀîÃØÏ™NH>~ýúøˆ¯PÁš¯Žlšïß¿}ûù3Ÿè–`è׉X‚ ËûËûêǹã‹ñüüø˜ê?d{8èí’'5Ä™p¢‡DîÂ,gâ¿~Ÿ¤E-i{:_¾äö?ÿüûßýeïGX€›ØÒÑ{N!ê@²p¤OÓBBh@;вã×Òr×B"³åfaIûEXžŸ„`¢Y‡¨tÇ/[-–ÐXï£ßoèµÖ 1;Œô_H‡.Û<[®í(®_'“Êóôóõã—u?.Ï¿^×A¹ßõ‡ À¦D:v«Ã·„Dï×N&;•tÑHÛº€¼ kmžMÕÂQ·õS]$ Gz~-<¥`ˆ\¶Évœ £%á.¡±„âááxlå6žž^^Þßû'ɽÖÚOüýá:§a ‡µ¿Ýñûm†îý8’u ÉØëbª×óË! MÉBÐŽz´Öëëåyõë‡ ÈúÑŽãñQ¢ EYÂ’ëÇûMýüô½¸R–-$s]/CŒ_l§bå4ô¶oHß÷Ýê‰x-éè~~ýz>ÿþý÷ß—[Ú"(yE@YB¶Ó¨…¡3Ñûõ¨­œ|O¯“¶|_®˜e É­®“èç 2©`¤£œ;àì@®DoëQV:÷Ñ=ËÞ«GiÅ’íúõ\9˸no}l- 7aIG/9?„•B]úõ{ aµ’å×BôkÙ¤».ä:§ÒžvÛ®œe…²–&$€€„„Dr–pX£²ö& :9~óHûËÐRI}~^Ž…=ú*úxÙ>D¬­F»Ž„+gY¢÷[×›Ô_é(Sð",;?1­áµ:Ä­ñ^¿]áHGõ"I8¤„âùY:ôv[Ž—5Uoµðèçëd¹8”R0êJzœœÈ:„CÐÃá§š*'¡Áªûй Ë‘xu Öûl=tõß?´G¹­…£,¬$ÊJŸ—¶õ(,qžóH¯×NDW¶ÊZ¶€X“˜N-$t†´ô”#ÞT%Ö~»Žd«'¢ž‚¤ËqäU9ŒV·³Peûǽ¿¬LÇ!G=w«m9q<\1ËïÆ¯”òº¶Š ½Ð6ÍÞž…Wöõ½€×¤% ¹cO‚¡…CBI9‡¢Ûµã¸KX,ç!¿ƒåH´0)ã:ˆ5—ÝÔ•îüBÐm}‡:ëNH ØVHv©­‡]åçë܆5¥…C·“pH»¯9Ÿ%dU 9e ˆ77!,¸‰#Ñ'ÊÔ Jm‘á¹ú¾tðeîC·Ëz]™î…²²pˆ³i;{›r("Ú‰p¥,K@ôõ;×(,&9¡™¤­›< K¯ëQ …ƒ{îª2™®CYÒ¾žëªå@üvûós= ,YH¶þ=6Ž.$LÛZ(D´©G]éV{9‹¯UYžGUµç²æÒâwE@€›…²äÎ^:ö¨Ñ“#¶×ñ+ÓÓë³p”¡)Ù/9Öl½×¹~Ù}vàÀM$]vz*‘Z(ºC[vý‡®@×ÂÑ®P׳ívM_&å ]íQH€8‘þDê>ô „âhÚk¤ÇW$´fó-Gq1êjŸB‚p,PH² èI[,!±×F/·fã­Û¹ÀñÚ±ðË­KHîµ ÜT@¤N$]¾vÎÄ]/â-4ÕuÙk¤S0¸%Aa´$À…¤µBa{6ÝØV‡¦ºFkµÎ`¥Ž¤töšéÖì¼–)ÛÀfÐŽ¤^½óˆ­‘^ ¢ظC¹´j"¡*ݾΙ”ŽÁ@X:Fe1ì`±ÜjœûÒÆÍoe\?õ°ØŽhk+±y߃`f‰ÞÁu8s9„¾ï£Ÿý‡ç¡Çg/Ž , sw÷v2C$úõ=>cŽ Vã@†Î4¶ãžêÎy¬ûü¾2Õ÷ÃÀbä^ï?w‡;öÿ†¨–â0-·ÊQŒ}ÿ©CaS;§¡‚1×ñg6Y€uÃÜa;æe£ÄÒÚU›OIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot15.png0000664000175000017500000000754613657750470020534 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ñIDATxÚíݽŽu` ˆ $.Q¡4\¢$=p ä"($zÄ%DI›]”’* }¶ã¢Ä/‹uÞñœñÙ¯¿fÆÏSd4^ÛëØ³óóùÍoÀ\|ôÑ;‹EwÿÖ­»wWo€–û÷_½jã­·¾ù毿š­÷€Â­[çç—Añú_‚€MPD€D“UT$PTëû8¢D0z‹ÅË—7nöŠã8Ðbwæ·y§àââÅ‹‹‹í?ßmŸGpÀ¤ƒ¤ZƒÊb†§ ççggOž,>xðèÑðm<îº"8`BAÒÿÛ^“ªÙgž–ŸsAÜÚq¿æqq¼8áÊD%rJž>}öìùóús­‚£ªdœtDÅ‘¯ÏÁœ+m予 YW$ýˆãf$þOCÕô4´¤ïyâÄ0ÛÏ·ùwUôÄÏc[õ™TÏ HNDŒªŠ ¨¶yÔ€ 9Qy^GE4MÅ6nÞ7{u˜Ñ>_~ùÖ¿šß“÷çêìl?M ‚ä´$O<ôrPëæbøh´ÕžJ€ª"(óAÂH,ƒ¢ Žåð¿n¨@¦(Þ {°¬0rÒ]Ìï0‰  Ýék Œ*P¼‚„ñÉЭà$eA2tëT&Ø»}ú '$Ýë¸þ§çØ£Ò ×|v6N×åÑÿÏ?ã9îuº3r¹ÒÈÜ€±Šw‚‰T$æ'€ @@œ¼¼ÖwDeÌö„Õü»Ëà¨ä?¾þúËØþøãO?ýðC³õ‰àD‚'_á-ïß½ûÕW¼X¼~ýûï—ó3"8b?ž¯ºÿãÇ¿üòþûMÀäçï{S_óH0 ýÃ{ÚbˆõÇIœ¨# b?Nüq{<>JõÛrÐäJ¦zžhSoR$Ùr¾H=sVÅpðöqÓw¼DÑ|óo_?¥  xžØoÿ¾Åâï¿ß|³ ˆ|]‡ø}Q¡Äý"°ªŠhú•ŸNwŽ$Ë™ê1s}ù‡k"ë+¼ÒÁúyF¹òhNØq¼µ·ëeõçq¢ÌA‘·¹O%È\?%AÂAäoÖÎbÓã&NðËãd$¹Ï"ö»A“¯Ÿ+õûM´+’¼_uÂ羓¹Š á@ß(û*hë¾Xä>ˆ\!t'HŽ\©D_Éë×ï½×T"y?÷•äÑ^§òi `tÎΖ§§|‚Žàˆyì×}y›ûH¢òX.ޏº½ ’(ù÷çß??Öûv¬Õõ•£’ƒ£[Ô•Çòö¦ó‰8Q5}ÝNòªnH€¬V(«’+xþ&Hr  !"‚!EþyßÖ;˔Ĩ¦óó³³'OêàX­VOøõ(¬uµ>0V›®.÷#˜šá¼¹ó½]‘ÄÏO­/DŒ¤Âè Šøù·ßÞ¾ýùç‹Å§Ÿ~ñÅ4ûqÿÜ©Ûx¼wœ1ªf–lj<7å~ß6NÞÏAÒ]úd}ŸJ½ 9€‚øƒ‰@È•D¾=öó¶ Çýõòý¸¿O`nbÅÐí8UçUÒ× ^ªZ8ݦ±ªo¥}û¦ȱ/{¬ (;+ŠØÆ‰?ßž+–*(òã«ç;üÿ\§ã~ãÐßo€ä‰|¹ïcx€Dà´Ÿ§nk÷‘ôWU…Òмµ¾N-HT&; ¹iªjÚª*‘*8â]ÞßW¬› ÖÞ²]p´}ÿýÏ?ÿùgÓôÝw÷ïß»·Éû<® ªú@†6aÕ2¼¢Y ¦Ü™ž.ß}ÁpªÁ!Hö ñÍ« ޼ÍÏÁ'{÷~ûíÝw›m¾ܾûÿa ³<ÁX#k·Á±û?Ä¡APÝïzA}!¹ï£iÊZ «Éêí×í3Y×9UÈê(¬Õã9æµ A²×©‚¢º½¯¯$‚!nÏÛ\‘ì¯I+ÃÏ£dØEpl»˜_÷ñ}A°ÛÉK…ÔkSµ;»‡6eÕMSë‡õæÊ}(Õ²ñì&HÊÀ©F]åy ùþCGaÅÏ« ‰íbqûögŸícÔ–>}G4]Åð×:†é6} ’Ý4aUk_­v~¯žÐ‡WëWÿmDUSXól¹¿·Ü×á8V™ìEо¦ªjTV¸Õ~%Òî|7dš•G’ØFSJlã~Ã+™M+ÝIµ*nU i’Z]%º/8šmþ½ë_W¼nä‚ä úš¬r%‘+”ø¦£¸ò7 Üû}ˆa¾ÓŽªâˆ€ˆ>…8‘Å6DGñ|õj~]û ܔՙÞíoŸø—Ûúú4ËŠ¤~žõ‹8æ/XÝååÛAâx${ ¾>ª©æäoœq{E_ì¿O„m$>ŸÜÔûù„ÖwIØü|Ãd?MX!OèËÛzöåëof’/›Pãq¹O$‚¤ ŽÜç‘_ßÜ—q$#¼ÖUjžHÞVGìç ¥ Ž8‘qHžŸWü<*ØÆ 4Jî›÷7ýÈ'æ| Ûþ Yîç¥IªJ¥šR5éžÊ¥¦$'(¹$OÌû90rŸG®<â ­öó<<Š+‚Ë!Z©äË» ªï"ÿ¼»¦Ô²m?L<®¿éê8’ƒ$aSQ\½èbóê‡]8ªêÛÈ•‡Q™U5 +º:Á°ª@rpäŠ$÷¹Dpìo~ÈÜTׂßOR=*Wùº¹b‰ý¸ÿؤªDrÅÐ>“êR¶‘’I¨æsôm«>’M+jÔV^´Ñ¡Ø íkÀo;Ó~ý‰zèÌò|­ðî(¤õËu_×±‚¤ºÄl÷U¯¯$òð[«é ’IHîãÈ‹,æyùþ¹ «oV®@ò6›CðjyÉ–ÝMÜì„ÝŒÊÊæâyÚ×ÏÈXƒ£jBräq ™M ôC_çyœàãD+¾mßÚYdxp¬_’eÛ ”ÃNÜ}}Ý•†5‰5@¶•/‹Êd’" rÅQíçÉ£¥b[õqTAaøîØ]Ý'Rºª×tÊËiÌ*Hr€T×z=ª¯$7MåÕx›ùû]wsù|¾.ÃiI|ÈËÝ ¤}ÿÜ™¾mpXºArUŸGÞQXy”Tß„Â$¹âˆN®@Æsë×.R‘´ƒ!‚#Žƒ »jª’ T y?šê ŽŠéõy¬_»È!žOøíÿðàØl¹5ž8Å m äàÈIT¹)*ösHA®8ªQVùùÆò¾ô­]äо:º£¯v{IÛ¹G_e»ïÿ¯ŠNe²U€ôU}ka劢ž›+˜ñ®¾Û7Ã[ôÅÈfMW¬I÷Ê™‡ís(‚d}IÞÏÄÐKÛÿšè1Š/&Çm2ÕT(H‰Îê*86‘Þw tÁ!@X§æ<¦+f ŽiÉÁ¥ZD±…UGß<K’¶©H\Q“W&Cƒbè }”8‘ ©‚%_/$ ãWRìPÚ `R•Éñåyë×ZBp‚äÿÁ±¥ÒîX­öŠ“î¨*óŠ$G¨<ª Ä&@ÆüÖ+ÀŒƒd|1ú@È”+é]]AF|ž¯žhèíÕµ «:ô?°étÛû«\ˆJ•Éž`Óõ¾nßô~‚Bp¦¹º‚®gA2•Ù×ë(d •ÊêR'*&$×=‘OµQ™qV,íQ‡®OÃ$“gÓ¾‰mû4úcÛ×3´ÏÆ @)÷tûJT"€¡%/¢˜¯’+ÁÁòÃM·«ç “«(V/U»ù0Ü<DS 8fía¸ËNñÍ—0±† @NR®<6¯@òêÓ*@€ìÄt&|[ «}}!€à€æ(/ ‡ÀµžÀ§3fÀ5+•ˆØ²àZ\AM€\‹¾]ê^¡Np3}û ’nßÒnÞo0[Ñ4¸ŸQn`¶]ûE›_WB€ÐªHv3XA€ 8 D€pµöõYºÁaéÖj_è+d×óI˜­å ön€¸‚$Ep¬Îdoš°bIMX¬ÕˆnˆU”¸‚QW€ààÄTKxÄíó˜¡-@ö¦½VÔ\V©e¥qyÊUy0P®{öüùbqqñâÅÅE½Éç}øðÁƒGúfh`ù¤Ž$ŸÐs`Ä6?îüüììÉ“Å"?>$ÿ<ž·zÜuÎ'0’Šcèý#bÛmºZÎkÉA´m€‘GœèûNð}·7Á±üm9H6}`$Á‘›¨ò‰?¶$±Ý4@ªç»n €‘HœØ‡HìG€äÇçûGÓVìWAЄS`T#“ެ Œ7Þ¸ÿÕ«nÀTç}¯'Foõ‰&,€‘Hœ¸‡HŽóIDATxÚí;–Û:@ßV:œpB¥öÞœx ½Ç>ǃ½…z ?Ç“÷ŒÌSBÅ*€òÞÀ4D‰RS. …Ï_@Îûÿþm9c£Ks 1DÖþÿþ÷Ÿ~ýêÊÖ"€•Å!üøñóç ©Ô—yý<pPq¼ý!=OÊkE$à âÐ)ŲnD;ˆ‡%©"A 'GT$é}Ò¿=Ÿ‹îÂ;ˆä0Rr¼O,K‹ v wõѦ*ÙJ¤!ê`Àa’G$^Ò\Ä!ÇôŠ\ шDD!Çñè&1O,àtÉEbG"uxBA ‰îU¥"bðRæPÀ®yy ·½Çkˆ•A ;‡Dß¿??‘mŸH,D“éˆà âH ‰äãÇG‘ÜnOOCyض $Úë qìLúq…‰.ß«ö——ûvJëÔ"ˆà$Ñ9EŠ0ê‡N’{S†xB`Ê€óíÛëëׯéPʽÔÔ¤+,+QÔ·Òd¥E’"“\,ž˜£ `Fn·}W°sÍYtôïG*ܽ_½ѹ«éJžç‰Ã‹0øåL@ÿPÏR1EŒ:âŠV´G¨üœ†Þ9޲éj(ë^Y`w¸gk"!Ù—8<èH$‰£þw 8h‡ôšŠ E—狼wðˆã‘‡iX#Îçî @f©¨ò6å£FHvÓF[Åc5!Òyâ%Ë­ó@võÏûÑïU$Ö¹•°ž?µ)‘,#”µÏ+˜ôCÎûÑ—M ÛŠÄŠìòóóíÖòüqñL}=WXL [ , ’è\BsW(VÄa5UiqXÛÇ9“ËzëÇz?O/—Çï•UGoí%/·‰$:…Ê\½§è…»Ht·V_ÞÞKJGÞ8ÖýRÖÇO‹%²h¯®q‘X½7{-W Xñ‡5íÖ¾ƒÏuHÅ*É~-éUö¸ÿ^A?&Óïeo|ˆ5ÎÃ{~Ù=¸þþ­"±r$^„ÐÚ{êj8AÓUÙ )å>ÆrIùËhÄñØ{«>N#Dt¿?ÎÄŠ òÏ«_Ÿzm‹Ä‹8Ò¯u¡\eœ8”(Æ#yxMUqè5¯ËGlFª¨ÇÇ›ôΡÕ*=Ž$‘ôöžºÚ8p`‘x½¬üG:Îãš×ÞÈðö¹ªêeëøÑ¹³ZEbçDê#Ù½ãêã<ÀŽéÍyxõÈ{]KSVtö\ûN¾Þ ª7B‰æPERË™h‘xÓÈ{Û«Žó@GYAç9{€ž.×»ßÚsQÕ ¯“ÏeU̶H¬Nýï‹Îþkÿý:'’ÿ}V".[Ï?û8p@‘ôæ"Ú»jéÙk½Ùrû×1Ñã`êâHãbòõ^t„¢#®X°ûÄ_0HtîªèúS#Žvqêr,'ÒÞ++Éãy'A ‡Œ@ô·_1Æ"èÚã½â˜?«—ã9‘ú”.åú)ùVGiÊ—¾ó’r*õ0·Z˜,Ê?ÞoH¬­\wRæ— ‡äóçOŸ>|¸Wwì vïIÙ}Ôkão‹@¼¤¹Õ=·ížtlÊøXDíÅeõÊòÖd·r@KMM’FþË÷;.–µ/R–ë'*ý»Ò¯×Ç—25ì}AÊm]¸Ë %VaFGž/D{]õ6Åõ f\<úóÅ×tÏœ¬.Ðy#1k.²­Å!ÛÞÂûi‘èmëïfíß)‘T/\ÿ‚î½ £['Ѷôl<b»ÈE¶—ˆ¬U8º)«<±q/ÓÅ1ˆBG[åRô”\/½×¿'-(}c7õ÷²Õï.¡èÈüB™÷ÔH|ÒDoÊ’ñÞWK-ýÚ›\÷šÖ¬ÜNo¤3·8­‡D$éó®{c ¬ßŽô½ß%’x„ºVDcä‚mCüùóÜÙÈûÙ EÏ}U®AnÍÕ&޵"’ø\`¹@´pu¢“ìö”+ÓšØöŽ\Ñ ßHïëí&³µ#ÄÙå.ïÇ;¤Þõ—m[µÖß(Ûô­œH[R¾ï²MYVDâwoÖ[oeÆú\XÞÒ·ýѾţ+îÖÈ\~ò7xMÅÖûn/Äè6Þ©‰Ç·o¯¯_¿ÎÙ”•¯§Q¶é×›²¦æ@¼ˆ`n¢³ùÚsgÏ•¥÷ëq&Ûå|Ö'ŽÖ¦]ý™,Ñ´GDK q\ëÂôš®¼6ßhÛïÒÄçÂò¦qöªßÉ[ŸÇŠ ¼;øÖýsÏ•eýý[{Y[<­½¬¼ß“õ^­{ú\S…Ùú¼c7EB'^Å®#޹¶íMYó6åôŽLÎ…¥#odzë\YÞ8ø$‹Þšðõ¦¾ô÷Ö#œ­{í5Ò)o°^^~ÿ.öŽó˜o"€X¡³UñG#=Òv©¦®V‘h´Oë^J|\Èøú ½bð^]ÙÐRþm¢; ½H«`ú#ÄÝWÕD2UP²•ˆf©$*kñèì¼ýscÅÖï°ç®Š5MùkÀkáÙk¸ë¿§œ]úwÒÚT¬¥¡o¬¬ˆ?ú>V¯0€M~ ÞHôV‘´ŠcîqÞì´-ëƒÔD#«|ÿñ¦ è)Ñ)U,qx[¯×ÙUˆÞé[{4â÷DâõÎØed²ta­¡mcî·FªÛÓ¾— Ç"{®,+ÂÈ÷[+ú•Lìù–0­5Ýý¹¾†ÏoŸßsG"úŽßêå5Ggz@p ÖJޝ5nÂ'M®×EÏ‘xMOÓ¶Öû¶FNÖšçÞù½Z$2u¼Ô| `±§ˆ7w–'’è(õCkÅËQØãTò‘øþšîmâ8/¬¼¢OrX ¼ýÖq·Î) ’ÑHDš‚zERÉ]_¤5'Ñ{œèz&WCo$îÏMµ¬°øF$:€¯–«_Oĉž2e|©\ƒ±"Móú8oKë8”« Dç0–jR²ÄA°bĽ£Ö")góí]_¤\áïþ¸•CñÖd·»×§­Ž$owrU¬^UzT¯0¬†ˆãâÐo{ŸbIÑã2òÅ_CÜ›&¾¾Tl{Yx¬Oiå\¢S¬ÌÕTxõß»Á+óËDr ¦+»)«oä¶·¦xI)–üq¯il|Ír+çÑa´F ½S¶@‡HÊ^ÅSaÍ%U®§áåPúÊþ8”|ä¸5Î&1L(ôûs¥åMaœ 29pS–%’©ã0¼5Ç{s ~¯ªqQl™ìo‘Þ;ho\†5wUtÇÔrtMòÖ¦'®("˜éŽ8º?¾bá´íÔ ˆL¨6I4ÙìE$ÞûMÍÐýˆLv.ž¨˜–ê•t”€s/Y ŠLZWe;úyVì½½˜¦NRØ+r°¸P¦ aî×ï]TŒÜ€Ó ¥µâ^*‚ÙëñÖŠXN™¬U!O}Ÿ½7‘!¸ŒP¶ª§6mñ l„TÄed2HE—õã^7Óè‚;Q! € DWø½ÉwoiNK$žÀNÅ¡ åho.Kz}oe5ës!€ùÐK“³ƒYb55‰HÊ•Ø^^~ÿ.E‘ÄóôtŸ®¼W 0Ÿ8¤éÙ*s¦`XÛ22!"Ñ[ý<°8tSo ,*Ùê 2‰C’îu¡Ø‘Îóó "˜ï÷>qÈïWïçÌÁ$X¯·š°ì­ŽPQ¤÷ñ^'HY‹F¬D „œÌ*ö#ZMS¹0|ÑX‘KôõHôöv{z’Ù£ë“sû9ƒPI4ñ"“ôúºXôþ~±X™èŠ?š I+hÆÄˆ505Q­5Њ4¢ˆ÷z€ë‰C„ EPF"oo÷߉ìO¹ÄMZÛ½¯Uá{…Þ¯#€óóò’‹CD–DöëHDOÛ\4œYØ…H–"8²¦ÝñËë%âxÏ#ô¼<IÏÏ…!ÇûþH6¬à׋t¬^\ûA7-éò\ïcÞW°ŠH¶ZP àÌè;~ÉA舀3§ÊÙ—´XS$)G14yMYò|Î ÀE±D!9‡2§1ÜÎqæÀ‰ü‡¥·TêŽKTÐã6¼^Up±{˶¼\ ¯Wü.-Œµ_Ǽjê#ɉ@.%޽ëêþÕ#Ê93ˆ£˜3ìóçOŸ>|°_'ûÓÜbQXÏC${ÄÎ$­âÍ~¬×a)_ï½/92Ö\UœÄñ—qhqH“F±DEBSÖ#Fª\P RY÷FV2=¢@ G‡^N‘ Ž"â°ÖSñr$íb@ GŽ@˜Jà„±ÄÑ»þ¹hº:ÚUU‚•Ñ×ÉÜBAL;ˆ•öÊ"²8—8¬ý½7 SgÕF$+Dÿ`õ¡ˆBoã9Žz…‚@Î-K Öu4U$Þó À‚ñ"iËÖ½ª¢MWþóÈÄ!×µí Ø¡@ÒBùÖË}´çFÈÄ1U ö¸¡ñÏ@6‰ÿìá_kœGRq\A Q‘ô ÄÚ8v ÖŠ"þÃE g‡u}XâðrjÖ ÀE‚8ÈX¤j D‹Ä‹dÀ EÒ? qœQ "ý¸BÄâõê‹öæC ÉôƒˆãÜHìºÑ"Y+2€MDÂ:dz'ˆè Htúwph¡°¤-±›®,qDEƒ@N+’áFÁÄÜݹÀÁÒ: ’®©L¬™ ¢ÉtÄp1‘øB‰­Oø¸H´P¬$<⸘H¦®ã8Ê{K×oÎÀn·§§û‚@//ÏÏ·Ûû»UæL\V÷‘‹¢,??ßËß¿çe½Ÿ3 pÒÈBÄ!‚xŒ0j"‘ý"Žûv(¿½ýý÷ýy?çeÙræG.Ý•Da D?^ET$D(‡—ÃòþPHòý¹ZE"e9ßÀÎÄ!´UñËV‹#mSÄoë"²Þ¦ç×_/Çå{Ø©ÐS‘‹âóçOŸ>|H[å$–ñ$%ÕEeòýQLZ$ò~|sq» µßôdGy…¯gmó^Y’\·ŽWöâJB"7°ª8tÎâéi<ç1¾•Š]?ß뵕zeåˆU–ç¿¿âHâA$+Qo*ò„Q ¢>Ä>ŽŽ D ƒì% #ï,ï‡@VŠ@êMW:BÐÏÓã:lQè¦/9Αèc¨úïåa«Ë–8ˆ@VG="Ð9 ×#Æ=QŒåHjMS"Œ$Ž\úñ±q#ˆ`QXã<$R*b)—µ8ô8z¯©Ô}Wö×#ŽTÖÊø8š²H¹ÕMV’“й‰èÈsÝ{JŽ“?®#ávYwûMÛ\(|Ó Qëu5ܹ‹PtROr? ¤6‰b™3xÈ ŽráXskñ Ì ±,·¶õ¢ÜÖ»÷Z½ªú#z¯,°’@¬œG-©'ׇãüëöÔ')BÐb±"«œÏGÂ7 0»@¤‚­Ï}ußÿ˜L/ÇmÔ·ÿþƒ?i¢@XF ã[+yþ˜c!X$Œ<ˆŽD·GŽë¹²¬ç罦$ÇòúúåËP~{k›q¬‰<Žï('S´Fš×'C,s!zH^NâD!å$ýº˜HøfFr"ˆR y¯©r’Ä2'òxœrv^Ýô•GR.#RIDATxÚí=nIFeŽ)S&M™4iÒ¤I,@@&Í1ûâ¹ëÉ& @ÎúZ°˜#ìMz·»6]Q‘YYÿï3‰êŸj’ÝÊ×_FfÖ‡ëç|Nÿ€ó+ç³´K‹¬œ÷+I_¯D:îËcêuðZ`åâÐí?¯tÛ$–ör-q €•""Äá DoÝ_+yx-ïÀJÐÑbHµvÒðÄQ[,¼S+M"Ö•5Ä%ÏÓµ’$ýØ¥@¼¢‹ìºØÞM&u‹ë°1¢c’|CØ>"+‰èÇYC_:¡ð—=¨0æ~>,‚÷8i%qèDÂ_ô âÐcšºx¦ÿëÞß^þÂÛK"ÖýÞÐVíÙY°rqX÷k‘D[] Àúñ†œ¬¡-¯í~!…]‹£–H´P¢¯ËPÀú‰·ÀКµµ–­Q`fqX$ká‘'O$¬DX"ñŠçVË_t§É-¡§ýå~`À~ã­hç/µ3qxCRÑózÑÉÄû¹ À~“ l\ ZÖØ¥w¾Ò1Q-Oˆ`%ñ EÇ2£âðD‚ &À2=ýÆì©5„%™j V&9[DשUD€ˆD %~ž˜@rؘ@¢¤ÚE¿@j¯H€‹Äò" ‰Ã›)L$–0¬íܶs@$rV€'”="”n{«„aÁ´ D @ 0e‡,Ýòm{»‰aûv€0 „°´PÀBâðºfÝQkòÏëý\é,%»òFÏÏ' «kîK Ýa© ¿oûåÒ×Q×½~GT l÷02q莿TÝó”%oÛö±ÑçA ™âè^€)&Ž¿]±ÛxGɘ߳ïSµ_àp‰>>W ºµj$K dlÂ@…²%Ч+v«…âý\µ2•¨Hf"‰Š#W ¥ ¡[Û@ “ D×>¼óäŠC d*±• 2bÕ6,aôÕ6.狊ÃT­u"–yç*(ävöU´ã·ÚÛõ—óz³²¬¾oJD‚@ª&\D§ãz¢±Ö‰Lµå ˜H$¹µŠh’ðÄá¯LG ›H":‘ä¬(¿-¾[+Ûµ8¦N`f‘X{XYÏEÿ)óˆ‘Ì,’ÒŽÙHßî½lïp`‘t×èÝ{» gÉ…z`‚®ÕZ?Ñ×ñÛâˆ=?÷ç@ ;I&Ѷ4Ù @ 뢣µŠè°™$‚@ @  @$àØùãÊùüãÊù,Ç¥yyiŽøËTf©6šDD$GM òþè–O.,˜R7¾DÇÄõAÚ‰ËÈRï@øîZ“ "Ù¸@^þÇíyåXß^çýà“ ›ÊVE2¥@šó¾¼¼¿·Û¯‡8* ÄJHV‡›; Ë*ê>_„!‚ª#¨,KQ¡ˆHÞßÇ~³Ÿ6y@%x‰@ÚÓéõõñѾ_'O<ö㚇u;"˜ /YXID‹Ãjßß/L‘cÝzç±^ÏOô÷€‘"ézŠÃƒÈùüõksÜ´ÞórEc%!Þa€J #*éE$¾(Ú‚Hm¿@<¡x‚²Bò)ŽèÊi/ah¤Û‡…ÐÈŸ6Ç^[&–R‘ 'QèŽ2ZøŠê„'„Dû<ºÍŒ—DÆÎ`èÊHVò°‡¦tGï !µ1\^³\0–Prg}ñ ø?"O2vh(*ÖZ $š0lAõ ¦È+7‘D€Äa|ö‹ÎzA^:nn)zJ~šÊiK…Ò/¾Ò¡-D‡J\zkæ~[º#OI¥}œ7«{K0ÞÏ•'D%-=de%»ƒîiõ Ã[’3 ¸_PVâ‰ÍêòD¬žÒ=¢¼oÐñâxÓÑv‡¬¢IcxˆN ¹ëInTC$¹Ó~.yØ[‹Äk ÃCJ:‰´‡Š¬’»=>äe×`†’'’ìNÑ"¹•8"Óqs:`yž^hx{ÿ…èúo%z¾HbCZ$8œHò“‡'ŽØ–#z¡áЊö!xµ‘ü¤ €Ã#*;yxÅñaqx B‹D~^-设ù›7Z"‰ÕF¼mêҀ݈CnÏO^‘ÜÛ‹ª_zx]‰®ˆ/‰?´Õ/N/‰0Ív'’òšÇ°@¬óE·QïÖD†¢Eh ª^)ÒBpà¡«áwzK“Ûõ"—6ú ]_O$zeÂîïK(%"“DødÀf…¢’ßaöYy×÷’‡uaªÛã[‘xCDÒŠHr“I-ä]¿<@¥äá ]Ef!EÒ£½µITQDVîvôcRºN`É#º á¸ä‘;¤£·wÏý}­×›{(‹!,ØM‰'_ UèŽ÷¶©aÔH4‘¬}( `uBñ’·P0zíñ±¨Òª%«6âí–»gâ€Ía¥ÙMãb%oºni‡:V Þ×\A$°™Äa Ý” Ä»Tt½GéP\-‘Z5™4k+:”•WDG °9üÙWÃ×.^Hª–@æJdåëCúb_ˆ ÀNDÒ½nÆpÝ»”·`oª-=rÏãm‰b%îß©-\kO,j °y~\·uÉíVºR*޹:ÖÜìÖöðV‰nªˆH`‡CYzHƪ‰äí¶«_wêŽÔ›ÆlÝî­X·“Èðæ‘ç+õ:¢Ú‰&/L<¼¡«ÜZˆ¾}ìl3€Õ1~Eúð¬£è¶íž@r‡¸rïÏ]âMëõ’€Í û½|ezL$ÖЙ·À/Z;ÈÝ«Tck|"`w"±geE·uo ¥taaôJ~¥ÂÉGnòóåÖ`6+–ñ»ó–mm½~GtZlT(¹³®¼ßÇJ ˆVŸ$JÏãMgo"8N$úõµHô7ûè)Ñä“+Žè¬3€Õˆ£éšò×Dï÷âÍÎÊ+²Ç/AÛr²¦ÛzË­u”&©¨°6—@¼ó–i ‹$*”Üí×s[ëusÅ¡“µ8¼˜¬Ž·äú!%ÛÀ—×P†k¶†Ž€Ã‹D:Î1"J&¥bñÄPë|lI`Ã:Ö¨¿½¹'=ÄÕŸPÆ Æ¯áĆÖ¢p†X¼ŽPw¨öº‘Ü TuÅ“#_]aõí¢ë‰£t¡#ÀaÅb Äß%÷ZëÖ•þr[ošq¿8ôzŽ©v F4°ê^â5:”UºrÛ¿$lÚ.¾oûx¿¶â‰exlìV*¹WZ$ÉÀ*2Cs¡§y’‰N$ã…â‰%·ÕL¬­Mjoæý»Ê:>Ï0I®¯AÞn§Fi"É¿Tì¸Ö›UÝ+k-C‡“†}Mò¾$â]G¤´ÃÊGé5ÈkMÃÙM•4Žû…Çúü‹çç»»Ïçßxøô)µ§ÓããÝ]jùÜÀbI¤æ?Ì©·Jñ¶{/mÇ&,˜ê Ï´‰y-<<|üxù\==ÝÝýöÛåsyww9a¼½Ýß7ÿa|ÿÞn¿}{|¼ˆ±ÀÄÿ0×5´’[lŽnzh½žÔ,2ZÿçµFJÌ{ˆˆB†CZ†´:yˆ8~ýz}mŽßÞ^_»íÛÛéôü|>¿¾~ùòðÀçv“€Æ%“©g%me`íK¯O :)ÏûE¨wwô”!7K‰¢Dävƒ%O($˜¹ã¯•lì¡´Ûó”]^*ˆ±ÉæxÉ7 Uõ¡èÿ\lUVíBÚ/_žžîïouûyéùíÄ-BøùóÛ·‹ ¤ýõëçÏÓ)[Bár0SPkLº[Ì$†Žöš(ö‰ˆãññááóç$éðSh:pbÒCWZéqmq<]éŠCŽEÖ"™:€î,®XG ¿qÆ:„±ßÏϾ‹â÷÷·ÉB:~¼6 DK[(" NF»V"÷˘‰¼ŸS˜ü›ãÐÐSy">"ÙþçH'Ø=&ûû‡‡Ûä!W ýIC:xÝzÅvyœ.®ëóÈã­"üëëéÄ¿3˜`Ë @É„m×8ô•Ô*¤ÃO¿®}´ ‹çºˆîµ)4BV C·ò¸¿þ:.IIŽ ÀB‘Ž['<?}º<^OßÕ³´ºëDÚ³«,hÁhq €™‘¡+Ýá§âyӑ˱¬‘c+qXC\VrQȬ@«ÕÂ@ '«æ!¢ÐÓu»+Íû§ñjè!1=„¥…¡‹çúvkš/"˜=ÛJOÛM·??_:b‹N&]A´gké„z–V4yèÇiaèõ$`â"â†#‰£éˆ¥ÕCUzKϮҭ5ËJ CÖ\YÇ" ©…H›¦3½`¢ÒÞQÁÓ´Þ~¡è¢º.¾‹tmE’„ÇK Z:èëCfHš]Õ†%+aèb¹žMe­ûÈM Ýêz˜E ºæa ¤©…¤b{{}Æç+ÝZ‡®QxñZ½W–N""*Þi˜ o“<€ý Dj!zë)²kqè"¹2º¿bﺫ‹ë¥±f_ÉùصfˆÞ~‘ÀþEÒžeMßÕŒòŠåzÖ•ºJm{Úmª±|ÿ~ÛZ³®º"A°Pòȹt.À°¦ïꢺ>ÖÓw¥ïni¢¶…¢…¡Ó¦ŠíDc „Ú@fBj"=­×Û«{¶`º»óê]}%ièc@Ú‰ÅÛ»ÃjDBò€£ µª’Vö¼²¦íêV¯8×+Òµ(¼¡+iõXZ ˆ`aDÝ]yû7UÔ›)v7Qlo‘"I"*k芃+Cfgi!Xµ’”(ÚbÑÑ ÅJ"Q¤â{#&Þ9€•`]ÚVO÷Õ­‡ÂÒÉ#‰C_Ù°=tE­`s‰DÖƒ´EÒ]Pؾöy÷BTúéýÑ ­b<ï ÀF…â‰DÄÑÝÆ½ÿÚêz°y€¡7cÔEôTlo ¡»^¤=äÅ_±´Ä¢wéÝÚïÕ^lì·|ÊX!Ô ‚ؘ8–>¯÷xD°sq”¾Nó°Z,Õ—&Ä“wLt4eø+ç³n½¤ðŸ+ÝzÅ¿¯¤cyœ´ UÀj;ÄèíÑb­uîã£?GmaZQüëJ· ÅBŸ¯ô}X\ ¹U­Žn¬èjÿZ’tk‰%÷}²úl S.1É?-²”@r“Í\‘Öˆj²Ä"­—L¼³ºÄ@ÈR™úö±"³ˆ‡ÕŠ8¤bÕN¢5«Ii2¨•(¼Ÿ'úú¥ÏÖd€•%Ÿ­ü¼ a!˜9Ùlu–ÐVŠè`£"Yz/lD Z$µêÛsÀÆD²××€v舑 °;ü¥/(5#//ÍûòòþŽé¦ÊŽ/i«E’ÚË=|ÀˆØDŽ8š„ÑM²c @A"a ÖŸ\ìûI40 kV€#’FiVW»è‡Ý2„½CY0 .i Fó_QÝÍ_ÞGY+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot11.png0000664000175000017500000000504313657750470020516 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ®IDATxÚíÝ;n#GàMö}œ8ò ßÀ‘ ÅÎu*Ñn,H‰2§†c+q ²A‘Ž †MUÛ3|‡ßZ“bÿ¬îžž€C»¸¸¹yzšÍ¢}x¸»{~^{…è%‚d2¹½Lfÿûða›²xÎy À +Œ®‹àˆÇ=>^__]åNÀ *ˆÜF0lHñ|ëÉj €U9@îï_^ÞÞV+’\iä $·WAÇý+ ¾iÁîåŽ>Gž,ïzÜ ˆîCeÕçÂç|ÓbPòÐUçÊ"‚&W,­ ¦€ÀÉߨÞÝ|ŒX€pŒÁR u-†¨æ»Ÿ?úôñ£¿_ÉÒê”,ÛCYì_׊ ÉêGü-Ï[¯,'%þð[c¼——ççgg«“‰Ûü—ö]at½üýWÉö?0 Ññçà¨Jóöª‘õ>ˆ„!V"y9oõE)O¾{9ÉJO§¯¯Óéjô¦®ëÞ ]1\]W]å¡-¯£uk|ß Nás“??Õa"¯ £ú TߨZßÀ¼‚°(yqI*†QV ­?ô¼^œ¨¼{h¬*i=.W$­¦ºD™åŽG$}À KAÒõþyÕ–9A²VE²» ‰CÍY˜+`Ë u0†œ\€Š`¨_p\IPùèðàˆm{¨ËÐbh ¨,@ *  ‚Þ×u¨Ëg A‚ à¤;òËËóó³³Ùìááîîùy6›Lno'“íÂããõõÕÕâù/.nnžžÀÑMîÈ#@¢ÝöoÍÏ¿w5Hfÿ[´»=öûûŽÜ"(æÿåŽ}W¿/Ö¢âÉÔ®;ôêù @§ $:òbª*‘VeRÝÞzþ:°re°ïŠ€^r…Ç]+ªân… 8à(¾ÿZµ3<«üòÐV„<‡’+š*8îï_^ÞÞºmᲟ[ Žå©*’<‡ÃLõǶ:ömuø‚`§òVTqœç+6Žuç@úÞïPs-#—Ï©*‘éôõu:Ây`/¢ãoU Ñæ $Ï•äÀhô;c=ÏqDÁ“‡²ú®ÚÚÖ¿€¨ÎÉ“åñó¾çyìêŒwö,eµV]ÅÏcŽ$¤Zµ%8F® Ž®ž3Ùõ[ìY«bhmMÒ  (í½°8 ¹#Ïs» ¬\‘l>ÙÀA¤Ú‚dÛ¿¯ª@bÅ;pt–WUí*@"¨êóD,Û`Ç Ap2\±€µ‚£ëÏ„Öõ6¢ýúõ½7»°“8"]w½mívÇùBPë‰àuÅÒÚÛª{¨@N¢b‰`ÈW\Ÿ´®Zj]Wãþþååím×Û0„0(Q1DÇAКãˆ6?~ÞÅÏfŸ?úôñ£`ô•G® ª¶ ’x|H´^i€‘ÊÁP =UW¬*× W%³«k›0R¹B©*0òŠ¢oÅQ mÅ ªc ŽüöÛÿÄ¢€Åñ¯¿~÷Ý¢õ—PT­3Í·¿•ɰ‚"_^žŸŸÍfÿüóË/ó ™?.Žãþþ’F&:øª¢¨ÚŽüóŽÜªTFÑF üôÓÏ?ÿ}q{× $î«Úòýãù¼3vns`Äqn[•ICŠ8λç`ñ ¬â¨£Šy%±h—ç@rûòå÷ß¿ùf5â8ß^Ýß;0Š#IýÚv̓'‚"F´ýõ÷ß_¾lsï06ªŸ²zá×÷Âêº;ouœ+ÀŽ+$ÑFpT“ë¹"©V]U{iÕC[ïW}÷Ê2‰°§ Éç{ä cU«°ª€hmÂØ j.¤ÚËÞXhs’ç>Ö­@ªÉðj2½ÚL±ºÝ™è VPä duõÕׯ@ØÚ¾k…ÑZ¥å8P¬[T×ÿ¨*Œ QQä c¯«üøTÞI€U$]ÛjHª}¥ÂåÕ[Õj¬ªõÎ Dtèyhª –ÖœFµ×V×UXUpäÕdI%’'ËÛ»ï¾HÞÛªuž‡eºG^‘ä És Õ5Ò«½°Z»ë:A`¤•I÷-LÞßDÑä8À‰Kß3ÍÍi°(ÕЗþ€ašýoÑíßÀšú¾:x6ÀÈ‚¤oG¿nàt½×çÏ·w ľÿþ}-ÀèdÝÀÙ´é$‡~^€“ u¿ñï*@¶õïÚwEpòÈ¡dÓ!µ]ÿÿ«LÁ±á˜~ßÊ ï¤}u{×9®ÏÛzœ¹†e2¹½Lf³ÇÇëë««Eûðpw÷ülÖ –’Øxm{¿ÁfnG77OOÝ;ê¸$ëʦÛg³‰éôõu:õ:‚#:Œ„¢Z÷y#Hâùú‰ ´<—qÿòòö¶8Îsqÿ†ªÉA”+“v@©@ޢɑƒ ïqk¤ûä»9€£ç@r¥‘¦ªX¢­*.¯8ÀÈå #GTóHX´^9€‘ëZTs‹9p’F×ûçÉôÖä;#WMŠç6‰À S TÇ&ÇxW>Ã<*¼WV>qP…ÀW%Z 0±•:À:¦Ó××éÔjD€µý C¹Î(§dœIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot6.png0000664000175000017500000001002613657750470020437 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¡IDATxÚíÝ=’ãÊ•†á^ÂDÈCN›cŽY[è%ȳBÖ2¸2äimÒU„™×l£·P ¨ æD™HÅ€|Þˆ{3@‚ ›dåË/O&ðíÛÕùø¤´·~<`cœÖáïvooûýÇÇ~ÿóç¡í¯ð`â§ŠÒ^KP€G-qìv_âZºñÀ&ÅÂèU]êuœz;`ɢȉ# ¥Ü?ûzlJq¾}¿ÿõ«qÚöž§ýºˆ6!¥5Vyÿýûý½ˆc*ˆS’o'X¥@–Ö4¦CWCimçã—šJ~>‚nÙ ÔfS~}–%ž:ôÄ"ˆÄÇ[Z3i! ¸•0nýøž¸|BHií#„3/Dûµp{qÜû¸½ý‰äÁCL-dôKÿ B ÀÚÅq­ç!I¯ÆÑ;^yq*ŽK%âxäd5Žå ÇCY}á°vqüñ‰¡*,èøóÕ²äQO Ĭ_ ÿüär5ÉÖë Ž'É æÇtÝÈ©ç¶pÿäq»ùu™.üd"YÛÀ%rÞßi;±H¨~‘Níø[¿.¬E ­S µk§ýŠ0€­ äç'¹mŸÃŽ@pSÑXŸ@ÞÞ‰¡¨hÿýÉá8?~Ÿ ¯wRT.Hß¾}ÿ>bÉAÃd™¡ ¡”ýo›Œ"V#’"ŠA¯¯!Œñìɸ}Øÿ\xÌ'Ži;ìO €HþŸœ<¢Í‰#ö#ðä"'‹òw™É¥… °qê‰#϶"€‰@Æ—]ˆ$rž0ˆ<¾K€ ¡•@z[šlr› ˆÀƒåVÇËÉÅ…»Ѻt0ªä¤Ñ«¡€@`Q"1½—H`D.Úƒ@`faœ(Žq­£,@Ͼ€B p=‘(– ýÌh=G¯xò~%¯ÛˆDÓq— àÉú“KmW?E ºÙíÞÞÂ8´cAäÙUƒ@bÿýþçÏeBÑ_ ž——ïßß©hw»?^^¦ÛÞ©ÇÇAû}´ƒŠZgÛÊõDb(Œ@°QLÅQ„qh÷û¿þõ ŽÖön÷úJ,Ûë/²8Þßÿ~?B$ùYU×O$ú9ÁÝi%м Qì÷cqô¶ãxÞñmô9yì÷¿~ö ÁôŽšéáü~Ë,/ÁjFI Y¥ï7nKâ’F[$¯¯µý%”mô1¤U†¶!äížHbÿÓEÒzú9"ÁÕùÏOŠ8þû“ÃöXe{èØc¿èø{Û!ŽÃ㇡‹úö¿þõ÷¿ÿíoc‘X`¶þ!'‹šX†Ï».ž~"é c©`@ ¸X∿tÜCÒˆÛs›÷ËÉ¡ˆchC ¹ý[Û9™øäÖ1tµ4QäI_,ç ‚›s¢:E©qDòøË_þüç©8Z‰$CO çnûÄîÛ?L§í.K"¥FRßÎÇL…¥ß"Ü1y Ÿýq9.b‹¡–LÊvÔFJ×Bòíõd÷Qôj$Ãý>Éû&H í&ãD‘gm \^#ÑoV”8¦Óqlj#ÚIÜ_:òñ¬«¯n÷fiåýÍÚºoÿÐ+–×jåˆÓvNDB$¸{òÈë5BÃw ‹bº=ž®»|Vo;¯ž·µ®¤ÜoâšEÒJ åþyqè§«HÔ8BãYV¹Ýíþñ?ýiœH–$ˆ"€8åŰ]†ªÆ¿@§ÛóÇ—@ÖÕ?”šE}:¯~Š@°Iò,«ñú޶8"Œ‡²¦ë@êÅîÖ¬¬ØÎC9¡‘Ôk'YT>çu‰¤•HôO‚ &~›k ­¡¬º ¦Ó{s;$™vâÚœPÊtÞq1='Ÿô:E’[ý‘`S>Û<ë*¯ó(C[cäu"SQÔÏ…ÕJ0Ó"jt0õíiq½>‹Ë'½îþ¢µR]?D ØPÉëqn,€@pwZÓwÛçºjMÇ­¯ë({ýz"Ó+ÖÏ‘Õ: oív³¯Á i eå³éþÇ'펾-šzÂè¯\_v6Þ¼2Þ' nÆ|Mä8!Ô׋´®XØjçÏ…µü …Ä VH¦×û˜®û¨ MÍ]3½>”µ,¡D …8ÁJˆ!ª¼2½U+i¯8ïµõÊthjþšêj`e´Wª×·kžª]‘ðô+¶ˆÙV`“"ÉçÊjMîÍÚj_ó¼^#q½€@°qJ¤ž8ò~E,!X2/×÷ˆO”PòuFj³¬¦IEÂøÖúʧDñN‚ãO>>–¶×ùvù~‚Í ãÖ@$ب8b;®WŠÜãísÛÿþÜú{ä{ Nþ´ÿ_ÚÁ‡8ò%G[— Í׸>]$·ú¾úÞòä"ÈíÒdpnÂqì÷c‘ô^G_$×¾2]>žï-@ ÞýQ‡ÝëÀs¢Èm¾¿%†i"ùõë°Oïqñ:¦¯óã£Îû·/½‡SN¶x« Jm¡Þ¹¿Äól¦œ@N}¾\ãWJç áÖ—´} D²q8EÁÇÚŽrÅ÷õ”ë@"@$  ¾Oç]qHf„!q œ$ïq‘œöï>¯¶D¾$b «$‰„8€HÎþwœ"â‘8€@Ö ‚‘8à™ržˆˆ„8€@ˆd³â ظ@¾Ö‘K ‰qàÖ]þ%:|Åq€Ä qnÕÕ_²£'7çå%:³úö#wßðï<_„àÂên÷y^q€B°±à”,wù÷8ÄX³8ˆVӥߢC–8Ä À™\j}Lƒ8à2À6k®'=€8Ähvå·ìȉVÊ¿?ùøøã“õtÔŠãp…ßÿ—èC¹Íûí÷¯¯‡ç‹öí“ÒJð$â Qüüdº½Û ¢8(bÇÐÆv¯·&¿'ŽÞ~€;u$‹ø/:þ¸=‹¡ìßÁX49É”ãÅöX1”ÖJD€• "'’vÇ?N$åþ_¿†öçÏC"ȵ•òø±°Z‰È'+#:þ訣=D¢(ÛcQL·1dÑLï×Tr9ý_¤v7Iѱ·kc1äây>÷TiçÅ’—__Ün( V–8ZCQ¥ƒ:þ㡦——º@·ÏµuÁŒÅ’__¯Æ¸2yºo)‚F«†qÜñï÷un?nw»q{, éÐV~þñë»_B¿o $Q´†ªŽ;ücA‹#‘í±x¦"i‰ª>]p÷DÒ*~gCÍ%ŒhóPUKõÇÕŸ¿?]X‘nBÌjúç'sw¿ão%ŽåUŸµ¥léjü-cÓ´V–·:îã?h‰¢|IêÉ#ˆýkÅ÷é,®±Ø–.X\™\¤>%ÔgUåÇ—íZ‚Éâˆ$’_~Éœ'——áÑ>q¸˜@æôÍÕ<æ§åæé¿Ó¶5ô5>ÞðzÊ4Þy„(b¶TlǬ3"€«‰dš@j³®æjsÅø¥)‰#H.¦ÒqÀ…˜­ó:z ¤¶P°>wºî£ÕÆãƒZé­‘0àFäS…äuyÝÇ9CY=a´Ö‡Ôj*¹Vã€;Ó>÷UzÊbh iõ†¾ækËj ¹æá€Ó+¦Ÿ#’SÅ1´ymþÂU!ŽÂ"¸»HÚç¾ÊBi­<Ïm^'2>N]‘ˆâõåÓËg‘øàÆ´ôMÖÅ’‹òs§u¯'ŽúIóëswX¹cÎê‹dØ®-¬%•Rϲʉ#'―‹¤}%Âù“.Æq–_¡p~zîå®H¸*ñ ?‹$:ò¥×IDATxÚíÝ;nÇ`/ĉÂëp \‚¶À(` Ð" 81 -0az'^€¦h ¼ úôÔ©®®îá49Ãþ>@j4çÁ>úç©çO?/óô´îã¨@(; Ž·zÞ§Æãöï÷u?€JãÄA’?¾õ½õü‚à+Ž—~Þ\œúÂ.@6 Ž/_>}úø±¿ûûoßîï_ÒWòVø­ƒ `gÁÁç··wwíÇ­’·ÀI+$þù÷ßÿþ;ÉÒà9þu €‹¨8r´î·ÇãzKýºZMJK/ìkï§é `“éÅÔeùùÿÜôõZ¯Kœy€ô*Ž$Û¿.ÁîîÊ_ˆëëÛÛçó››ÇG¿(l K/ü­ÎöÇÇËú1b;¼À‡C`D\_mÉq„í+\YDPD0ä>’Ž·®Œ€¢òˆ_Ú8‡× ’\aä p¦RVQ‘D…ÛÈÒŠD€ÀYV *Î'H.÷óp¡tÁ H€Àhüµ6”0ï—ÔPyÀ;Kž˜¹À‹‚d ”cæ•ÜÞÆ_™Óç¼;1s}\ å%ÉñKVp!r¥‘+‘uT *’“®¥•ƒäŸ +ƒ$D°ÊÚéÝO ì,8b¹ï¸ýééóççÿnnæ*•¸=/î+ °“ É{cG€”#žÿ×U#HzûL<=Ù à¢E@ÔÁÑ?^]•Ç©@iU:¾ò qÁoEËÔqªrexÞàGTKä¾8F`Äó € 5öQÔr‡Å¹éI|߀ëÍ4?váº~cáþþÛ·ûû:@ê¾¼{¯sÞî8È}uçù÷ï_¿N÷u#W$uRv²¼Ãxm±hb|þXÂ丵°Zr_Ä)äðþ1Ã=qlûù8Yp´§Xë0V˾2H¦š¢æ;ÓË ¸º*#ŸŸ{%r{ûáÃðz¯¯p¦z}§<0IÝ™¾¤2‰àÈ•FŽ4ç CpŒïG;U÷…äJ$e ’VSÕTä€èǹHŽx¿‚ ,c ä&­ve2UŒÁ1\hóy«©k«÷wuMQåç‰ó‡‡é@Pt‚c „ºi+W$s3Ó[•H®8råѪXNõ>cþË$Ãqi4áð8?9Àîä u’<£]‘äà>ž/´­Š£7#}«ÑZñ¼ýP¿^?!àè]˜§úH¦GiåJ%dzzüÅß»Pç`k5mµš’rp÷/?Ü>.C_¾.K®4‚díãZ˳çeÜ[Þ­.ÈcD¥3,íà*ûH,þ°‘Þ~§–û0råMi§jвC#ðŽÅ¼‘ÓÎPß¾šÅK¬´*„܇1ŽâŠ ™~ü±Áa‡FàŠê q~ÞÆ kÙy½t4T®@òùÒ Z$y0AÞqÑÀEGYyÄ…g ’SÎXßJž ×êü^[Á¼”È™Êó0â˜+Š× Ž<úÊÀŽD€»_ÈÚ îü¼‰—VQ´šªNdõÃáõÍíиlQI;4LŠ ï8¯dÙ<¥öÖT§zþþ‰ççÏAb‡F€^hO9|¶~þè“('þª‚ÊÏX ²f1ÉÌéžû0N½ªnî›8µ‚¤·Öaed‡F€#þ‚ïU —÷¾Ê€hm„µ&@¦*”¨HpñÌ?¬ÝkÜQqyäcÙ„5¯ x'H¯Ië˜=ãs߇À€‹õ:Ã_9OcßÄtÅ‘Ïs¥²¦S}jÂáa%(Hàì´ffÇÇïî†_Þ8¿Œ™Ül£UqÔÁÑß;>WSËÞ·^ÇÖ;4 ¤üEóŽøåƒÄpJI\à§*ŽcvhÌAÓ ­wh‰`ˆ¦ª\iä „=Ùz‡ÆÞ0Þ¥KšlµC#°¨‰ Èôì98ÖîÐ8W.¤ž 8¿CãÒàXºC#o$k×ZKë­whÎZ®Xâ\%³¯à]*ŒmgÎïBî3‰Õp/kg@^flú*÷d÷•fDŸJÞȉ­¿îçPá彨óí§^Txr¥‘GqqZyÏ÷<Š.΢.æ‚Öú¸ Ù¦ÒËÇ:PÊÛØ©>ß^n:zÙê»KƒâñqxŸ­¾‘x|«‚QqoÒ$sŽ{xÔ× øËþꪼ/_}·üúŽû@rçúôy»¤ìCY^qö*}VœÀQ•Hë/è±)ã5W“}« d Žrømû{œOWjup´Žùó–£²ZIþxÿûÜëñŠ0° ©f~ÏîV×ÛØ*H"0ƒãpžFœ/]}·ž÷Ñ«8¦GiÇrTVëöß~ûý÷éQ[­>®óª8 «@–íáý¾å ýT s^WËŽ¹³¼½5Üçu€ôú°úû™€EMW9@Ê {–ÖÌò$½>º¢èõ”÷Ë2ö‰äвÕ’+Ž|;¦«!@Æ (ûBÚÁѪ8z3ÏsŸÆpÿ¨(úóBÊŠ$W"ýy+½ŠSpÀùÅ?®éª¬ ê ˆÛŸ5w{QY±´;ɧ+”þ<‘ò<7m- V§¹QW°Kçqì«Oc}üVH« ª÷ñc¹ò(+ŽÖ¼zÔ\+(z} ÀŽdÝÚL¾n9Hr€DVTÓ}y”V»¢8ö¼¬0ꦮáõE´GWõFYéó€9ÍÚL‚#÷m”AÒ¯8òqþqõ<éUx[}$½ŠeùŒùùy+~¿`×¢{™VpDŸÆp£š¢"É£¢ÚAûTæWß­ç}”÷¯×ÈÊÃ{c‘ÅöÒ$Ók]ùy€]5]iã>e€ä ™•õŸæ‚£7ï£÷¸ù™æíÎó2HŽ1ïçv$ǬÍäë–›²¦‡íÖ£¬Êy9hê>’Žxþ¸yž+’ÞÚW­Îôöš]­Ÿ`×AûKó墲¨ûDÊa¹­á»õíóÁ1Þ/Ÿ/[ëª7*ËTÀQb?‡c*Œç³©µ°ò<áü¯Æc݇RVqžgŽçQX½`È}"ËUà(±<|?Hægœçठ˜qM«áx{{w7ì2#@ꦰ2òþy-¬z4gQ‘DðDPÜßûv_ŸG“ÔÓÓçχÁç½ûGÀÔÏ?ÝyǸŸï À›ÈõLôáê¸àøáŸƒ#W"uŸÈðüqÿÖV¶õó•Á‘+"ßI€7Ó[+«¬(rSVëÂ_Ÿ?×8ãñŸÆc+H"°Z‘ïÀ›W$娬\yä d „áBŸ¢}|¾è>.?~º©+ˆïÀ™É}í>2ꀉ ÈÇeAÏS¿¾²ï¤(†ulª×•`¼ý¹j©G_ÅÇçŽÓ•I$ùõ˹÷£·všÕ›Ž’‡ûæ t­¦¨çûLHοÿúõð8(íÏ_[ûm»zs¬ì' ª@z}ã?‚¢ Ž1 oŸ;–Ï;T9HêwÐ[\±U‰äÛX¥×é=ÕÇÑ:æÊbiÌHk¸p;@ê@™ß/ÄŠ‹D ü÷‡ù&ªÃ¦ªúت8Ú•Èa°D ÅpÞz”×tRÈÒ}BZk«0«5³¼uáž«$uPÄãB@eHî;©Gq•ÁÖïLo­ÞAaõf`ÇMí!²ë/„­Îó%ȺQUÓLލDòãÇwßëL_»z³¦+`·A²ôãÓT×-`®Ïc:@òDÁVØõ›¸æ*~€´Fa @€¬ ùÏU óácÌO\ ã«[6œ7Ööj½ßúvMY ›°ÊÛ£/d¬0òÂ陚(8=7Ïûh—U up”ï'æµ´ƒä¸&>€U Ëî?.ÒoÊ:ìì^Þ”µ<0¦¨5ó=æ‚Pyù—uù¸öÚWõÄÁùá¼Ó£¬ÖÏ™n kõŒ;,ö*Á°‰^gúú YÃ1w¾O¯Í5VRCXD–¥FÞŽ¾V 䙿¹2àM‚¤µÅlÖÚ¯cùR$-±vÕÓû}p–ÇvòZVQÍXÛ à]Ë[ç®—W×ͬ V‰ sV—`V{­'˜ Žö2å° Höò~·®´Ttœ4°TxU‘h*àEAâ+pQžž†À¡§ÿó•€ó÷?RßiôÃÀ·\IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot12.png0000664000175000017500000000773213657750470020526 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>eIDATxÚíݽŽ[U`B-BÜt\@: ¸$¤\m.a$¤MŠôDJ‘"RŠDT)] P¤Ì• ÏkÉãe/ï}lÿ>GÇžñxìÉ~½ößyç 0ùÏôÿ}G¯Àà†vöÿS Œ]õxþÂ<8åqU6gëþœüuàLƒcÓŸ+@,8^½zóæòrvŒî¢|žooõ<}úäɳg“I>n«"ò{þóà­xùÖdÇ¡—ƒ"?^sŒ Œ9†>^qŒŠeh˜. pdÒ ’¸?Cuž›V"x€´Ž1Ò  @€Ù¼ kÝ®+p¢2ôñªYW­1p"ArèÓx8°9–…„x%rê?€#mЀ Ô ¾ëx°Õ@±G;ðÙg}ôÞ{“I¿ÿþË/?þx2ùöÛ>¸~î•Kqü㯿þðÃÅÛóÑ+ lƒç•Øìõ‹J¢: øüó¯¾úôÓÉä‡îܹ}{v|øð—_î߯Ïãû½_ÀÁ4|ñ XWÊzFÕçqÌ_Añüù½{·nÍŽùë«£÷ Pëß±þÃßg2¹¸xÿý«ã£GÏ‚Ä'Üå¢rÈÁQU¹‰¿ª@"8..<¸¸˜}]œ·*–8z§à€DÃ:ý§¹Ø0Û¿àè ÜhÐ#(rÃ#}œç†?n‰ûã}É•F¾½ª\¼sp@ È¿ÿ^^þý÷é5´‚£ïõiaT•B®@"`rpGÄíU×b¾¿ªH¼sp GîËŽJÄ+tr%]~ùX}äÛóßUž…UÍÊÊWG‘±Ø£ê`CðJöûŸ+Þ©‚£|¯*ކ|už+“@ï(Àž*Ïه咿ïÅ‹7®™U³²ªu!­ ¥êòŠã?>xpó¦.-€HUÄyŒyäàxúôÉ“gÏÚßߪ@òyT¼ÕI|QìH4¸­Áò|GÜŸ+ªk«ZyÞ;FRMŽsA°£Ê#Žñ‰¾š~AÁQÝ?4HZI<€h­dו0r€äÀ¨*’ŽW¯Þ¼¹¼œ}}îRj­Pï…Õ;’×…˜•°ã $wUE TÁ·G0ä ¤Ua䯯Ç«1üøÕ^ZÞi€‘+|ÌÁç­=®ª]xó1O×ÍS}}U¡äŠD€ì¨‰é¹98¢R¨Îãñâû«Mó˜Fk0ùî»ëïwœçÛa@ƒ7»~ÅÕ­ÖŒ$¹Âè½fz«"Éç­+ ŽsõÍ7ýuõ¾Çñ‹/îÞLnÞüí·ø×k7xÛ¾ï±_~¬ ÉCïÊóÖ±ºP”M™É[‚ƒ­Xœu5¾iº­Ç;•@©*ˆ<˜^}}^ç‘g]¹Â ×Í‚bZq,V"°†<˜º­±ëDúäé¿­YY­u"º¦X®ã˜Þ®aVC³­1Èf¯[kŒÄ+ì­òX¼†÷´¡«AÔðœˆÜŤ¡`¥j°6W&^)æØ–}ÿµß´Ã0އö¼X³AßU¯Á8± ÚЯ8½_ßûøùþÞ@úüw´' ëΦÈÐ Ù÷ãœM€¬û‰¬ÙÖóÚuEpöȾdÓ.µ±• 86ìÓZ ´¯îïóè}ÜÖ÷ûvÎ¥MØjä-N¼B,•7UtI[Vª*ŽmmëÞª`À‰˦»òV]cc]w€1™!ï68bH¬Pwi\àè²|{T ­ŠÄf€ëÉ+ÓÀxñâÆ«­BŽ%àp² Û•»½"€ChhOí÷ŠÉ ¯^½ysyi5€)ÄL®8T ÀÑ‹.ÇþyyVWœGƒºí.žC[×¢âN>PÆ ŽÞ6J<ù|èÏÛUPŽýúœœÞ†ü‡îܹ}{18ªÇ‹¯Ïçëþ|ÁpàÁ èò1ÒmzÌÛ» rì 4=``ÃXíé4™¼~}õÿ¨ž?¿wïÖ­Ù1îŸL~ÿýÝwg{EÕ÷ÏŸç@©‚$*ÀÈb°}è'úhÐ[ }þúõÝ»«ŽÓ€™ç¿?Š®&`ÑÕ¿}ÿþ÷.ì¨0ZA› ^™Þ>ô¸4W糊e,ñ|r ôVTl(7´ÕXFE1 ‚ÿýççŸûWþùgþ|uÅ2¿mz~þ*€Çì“~Õ5ß°÷Ãõ@©*Ö÷çJ£:Ï¿ÏôAœ‘±ªUÁÑ®0–7øu@,ÿ¾úöÕE¬«lz>»Z™ÄùØtÒU]ÅЫêÊÉŸÜó,©¡]R‹Á0;¿êšŠóYßïï ’ÖtájŒd[ }ž&HNCü=z%`IðäK­^ã˜6蹫jèØÄüàw,­Û—]<ÿúùÌaï¬-RPTÓ[gUõU¹b¨+Š¡Ó{—w-{üeÏo1æƒ$~ÿ¼Ò}Ó DÀÉ©‚#_zu±án zçÊ  ‚¼`0¯ëX¾ÎcÕyÏXLž?¿Zá®ë  ³ëj18æ+ŠÖl¨¨fƒÖËþ<¨]I^ç±|È iÕ:ëF:+Uc˦ç¶+é×Ïbþ¼š UI+Xzf…­£Y=&¢+  $y¯ªö˜B5Æ1_aä ŠÇŸÍRšo¸ãþ›*Þ’z]G_’"?¯ê¸X‰ôí½•êù·Óξ Ñ@.V }ƒç³OüËgMåmáó'ûêí¹«+ïÅ•úÅ1’¼N$ÿ«×…ä1y€àiT ×»°†®ûèYç‘N*”\ÔÉê•ê«V¶¯ñœ­ªqåy»É{S-[Y^MÇÍcÕ˜I$՘ɪé¼ÃVÆ/ñœ¬ì®Î«®¯< «œno’8låyµéaŠüüòqqÌ&ÏÂê?^ŸÎ«Ù—¸R\ïÀÞµ¯Y¾ÞtÞÜ0W][ùçç1þkª·÷ʺ¾ûouÍvc ãü}Å›‹‹..¶óß“<âñúé×_ÿüÓû[•+’z,dyWVûúÓ󺡯ö¾š?Vë?êYX­ëŠ,¯rÅcÝÇvä†|VUAL7~NüÜÅ ÉãWV»ýy°Ã Y5·oewõ‰¿o ’Ö&튣5²:8ò:•Våa]ÈЮÕùÿƪ òÏ«+žÜ°½·ÃÉ{aµƒdõ¥jóØBµ®dýmÜ·³ |5ö’_Þàë ‘§Rä.¦hØ[cwu@,¿=?~;°ªíovU‘ÀGn8ë•é«wç½~ûü,­øþGOð,{œj ¥ÚíWpf€äu"q¼yó·ß®ÞÕ8÷{ýuÛš>, ìʪ‚%W$±Ðoøî¸­cßÊñjÁâЊÃàøaT qÌH’¼`pw"8`p #é¯PZ×ó蛞[íµÕ[q¨Hö yŒ#W˜¹+k謭úyÙ¶ÖuÕ,9Hª½­6_8l“Æ\qøÄxØ’gUͦWÏ–ÇíÕ:’ª+kqð^`ÀÆâbk“ÅÞ®Ÿ|]‘ªBYCY¾eIuuÍôÞçÛŒþBÆ ’¨(r_ͪŠÛãýnÍÚ0¢üÉíå[uWÕº?'W&U…²î±z|ïðqT"Up´V¢‡¦RmA2övî9¸\YvÒÕpØ ç¦ÏsßÉXŸ¼ß|Þ»˜¶uA©ªzÈyŽ…ÄZ:Žâ÷ôOu¶ÐðкrÆ~>­mßu©ô‚KÚˆ†þÐ+m?¿][k:ßJàÈEpD¥4v¨<¶]¡GïØÄ]w­ 8.úöè’÷Ò À®ür/qçæÏ IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot34.png0000664000175000017500000001104313657750470020520 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>®IDATxÚí1vã¸E{ ?ü©ÃNØ[˜%ô¼½ ‡õ™Ü‘C-`R;ïÐÛЙ¿ˆ‡*”H”î ’L±% ¯ª|û]p8œÿ=¢þ½r<>Æÿ`u†¡ôtúþp °µ°\`ß||¼¿~žN¿ÿóÏñH5ÀÝbËÃ/-Ö××ÏÏç÷³öå‹Ôò<ˆð˜P¼¾þúõúZöU0ÎR1îÛñj¯7Ñã×Îóí „  [T¬o«”B5¼.r25Aª9"è¸uÀú§ÓÛÛÐþþ=v:µã™`EŽˆoºFcºÄvá…Cˆ AŠ¡¯BQöÏ¿OhòãEB2v‰Å^õ‡d;ÈÝÛžÖåc GÔFŽBo°’PhÛ&4ÑõgÊ‚] ¤z'VKæ±5)ìQ8’@¨C0°Þ^w¾yòäüøT›OûƒDÂÆ7»$s 5GÂê¢Ðãu|8DÃwcgqvž€œ·‡CÞú‚â¿¿ ÜvBËï üaÜ[(æ:ºpØ€?ˆ±p˜@¨€Dm~ܶœ ßܵ#e±Šyëç$†¼ÅaX«ÎBŸ7ü¿óß_ˆ9&¾9¨ e›Ë¢¹¼hàÖPÕThÊ{|ä};K†k•WÚ‰¬6ÐÞÛÿK—Ô :l™ÏS' Æwì$"1шhœ‰Êäãª-`9u8uˆËsëÄK‚—‘Žç ‡ œþ½žï\B¨:ùÁ â­.H­ê²¾ÎGYj€ím^ Žc]¢ }šûðrcQá(ËË6 }åUYÃùh•Xä@¢ß‹­õ…@—wÌk GíuÑLá臤ý^îÐ"á¢*ì¶Bâ9©–ªšJÆ· H:/­ ós µëဇ õB?þüóüC³$ht§ndz×kë± šS*CY¾€¤ë¬ méëuÞGÔ¶8Ú…$ G9/D¥6ó< Uí'¢!+]›xÈÐU”ËhwõXs-Çw*êPôüùáÞšã('öMïï¡3ɧ–u NjUá`w@8¾¥GŠéÖ6Þ‰W3ÕV¥V>ý}‹CQ!±ßø~½‡·'z» }oB çTôú¯%É£:¹óºã¨;ŒxÀ÷ûÑßµ‡¸¦EI.$)Ùî—¯õy²Âa=»Ãw"œ^t1µ-gW+ÏeGBصch% åDŽc¿üù\H4dWsh×:Úr ñƒ¾ãˆH9á1rNe.ÄŸÙŽA8æüžžž†ëch·®3ØäB«‡†JÑ;÷ër öþ5áHNÄωÔgªOçHp Ç´S®ÇA0ìÎÿxçû†]£Õ´n\Wa•å±ÓK—Ì›y…Îô|´_ ]é<ÚÖâòHï¢;EFý{¸ûᤷóØh`ªU9ÕÊaýª¦Ö „Ñ긥 ´Î i]í×ß³½7Q¡ˆB}Û…4Ö»ÃW°¥<ŽÏGûŒ$ð¨#¹$™…†òƒ?ЗǟΕDÏÇkuŹ©óéµ\Ò¤V…w{!YF8ìÎ> G^N>ô-¾}ÿ­…  +!‰ªœ<2½Úm~‡ß¾IÛ’&—¯Öë¿^ÿ¿úyÄÞm&r Û…².u‘Èžç Ð:¡°^•OÌós Quԥ˸_ßï™®U]úy´ ÇÚˇ·W©­- ×9Ž”C0GeBoÿŸüÎ^…ÞÀÖUQ%µEK/bŒ«´Æ¡ˆ–*¨º£¸ôùÜqØ€_–Oç<¶mEŽcýùëæ8´m )i‚Ð@GŽÄ«vª ‰ ˆ.ÆXÛ7¤µ­ýýTŽC[u`½„®ZC[½:ŽXˆ¯èS9­UC!9’<'ÒâHj{¡G[áÎÛ#]ÿ>–©y#Ñÿ—+a]áXJx¢y|o›ü0ó`ûLõv!© Jm&yëžë-kpím-¡”3ÈÛ´’±>~_‘nt|§aBžåIÍ‘´ÏÈ„¢.4Ñ|“–µ¸¢y½ Çáðóçùüß¾8Ÿ×пVôïmb©ÿpxy9?{ØQ(+M²Û@¥9’Ú긱°´åH|áºÔqÜ:9®¹ ÈZ¡;n*ý.Ö÷V·}?¸¹ÌÏ‘´:”Ú~­å¹þZ[­ŽãÖŽÄr A•Î`Ù÷ÓЗ Y,$k GëãÐ}èªUXÔ‘Äå¿×N¼lI=¿þ:UYˆÉú$0*85AòOk£µ VäoåH [¬|µ¶Èbkè'9’\Pj{œ×„¦uGÃÖómÆõ‡ÉèsÏCZÖ×Å1kBRUMŸÇíÂÐ=6éïÒi)$¾C¹´Ž¿—ïAî÷÷ÏÏñ÷ ‰ ‚æPÊd¼/ú>Û Â°;çQL—ÝÁÏš±3Q§2§?_Ðòó¼6çQwdþó:`G¡§T5å;’²jËr¹p¤Ç\G´¶€ wçH.†^BC­ùZÔ„jn••†°ÌA˜€Xßd®p”çU«[J®}ØÜ‰ØÀTˉ,u‡~©¬½XáÚBv¹€ä¡©äXΟƸŸ ÇÜj®åʇ€‡”µÎ^ÎskGr©±Vˆ ‡=®o' ,$º:loK†¬}>ññ‡¿U5Ç1nÇÄdnÕV, ÌL€F–^͵·ý¢ó»•°Ù€®ó>j¡ó84YUÕ•ÕX9š¼g1B€™aý}4ÌqX«¶9 ࣪+-ß­Um!Ð{Mn«ÜúóŠîH8tþFüÿÉs&ÑÌv`§hH+ŽH`¢ã–C}G’œ×¼d;lî|üUxk±´`ÍM¶@'¢Éòµ—sr*|#°{Ï…lG^U¥!¦¥6”*“í*”íÀÐä,²¾Ìx[ׯ[Ýøw–,Ky®#hçû÷§§ñªãþ¸å“xX¡8ÿ{„§' ¯~ݸ¾þûwÝ£{xžOàN…¶Ir‡‘öäžnÇççóëÇŸ?MPÆÂÃ'°;’@ ŽÂ‡:ŒAÌQ//ÃòÙ&~?9[nÛž„äx4!1Çòã`N# }<…ž¬Ug1Åÿ¾ðHîXZ…Çú|S Gì0„ehU þø¢ žt|u &//S};ßÀæ’ ƒ†¦ÒÀ¯Ž#š2¢¹’¡-s¾ƒÑ~ q }¾9€Gé@ÎϦßúúús®b,$Ö¾>9í›ãÈ믿þþÛVc?Î7 °‘pÄB2·úª<Ž÷ú$ Öω>ŸÊË˹Ÿ„$9„à&’†:Ž©~’!'RÎó(ûyèÊw VueÏk¿Ž¡ONàæ’äIT(ò‰‚ãr^ßqDΤl=ÇQ É0OD…£l e¬ŠUM•¡)sƒ`¨£PÐU4OD…!Íëð«°4'¢óBTHÊPB°²€DÉî¡ýïSK’øm-÷Ñ:Ï£œX˜çH¢P°^2\†—óˆs¥PxÏ뼈òø5¡±*,GB.`%1aðE)‘“˜Ÿóð…¤V¥5=¤"Vû¸‘ÉörGž‰æ}”ó@RîïÒò$>~äHü×óM¬& ùÒ$6°ÿç‹r~E9󼬦ògªë@_ MEóDòª,M®'B`%±>ŸÇ¡ó(´*j,4^È©\òÄŽ_[Ö=Z Ë_·ìûÉw¾i€•ˆ†–ÔD¹]dñÜÏË­?½Zo¼Oˆ …îÂÚX Èù_¯ « U颊* *sH-§•ÿoo?~P¾ °™)“ée’{, ¥pè꽃p¤yQUV«#±ä¸ ‡¶ä>º’¶- Ÿ·Q(+v~¤\ kZhø&:’zë ǸjË m•UUycœ$ŸÎP® Ð)y>=3=õýЕ--RVy }uó«°rGÄ7Ðñ÷)“ëq(«-™>¯J‹eÛº’ÁqÄ‹.FUZQr=Ú=Ž|­+„`÷ÎdzE/'2½ÑTä8 €‡”äX,”5½zoYÕ…` ,A¨k,|RЧ/RÛÛyÀ…ú­xl€;’¹ý¥‚ÓúúÖãëó­‚8÷üo-´w' — εd®l}\€‡Kïø×¥ÎëÖŽàáÈVrmHmíÿ?ÎŽ+cúsÁܤ}ô|kΣõ¸µ¿#÷Чþδ.¿NÕ‚q• (*½!Ø…p¼}q:?ñ€mϧ׿¼kìÅ~+€‹„ãõõׯ××$ïéñÚQìïLP® káPGaÂaB`Ô‰±¼#!Iе€¨“0!QA™ëDlп\@p ] G)~Ž£=G²– ] ˆbB ­æN¬µÇ­­ ‰ž¡+€]Èܪ«2G¢Åï· ìB@æV[iŽDs%Ö×㛀”9 ‡ña:Ô ÈDò¼&$Q¹or$Ã{´æH€ ˆ¡¹  M©py[{à΄dNNc xHþM[Â:-XIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot28.png0000664000175000017500000000630313657750470020526 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> NIDATxÚíÝßqâÈàMÅal aRp¤A[5ðHöÁ)€oquÏméH$Œ@ˆï«Úí‘ø;cÜ?NwKúë/`mÞßw»ïïþþ··fÿÇÇñ8t;ü/Hš ˆv¿ÿþ+øFÿ,ïûû» Ž¥ÿc•MT@/ó þã#:àfûY:¨8îU”!²îëF wßœ¢…{ˆoÒÑÆç¯ì_w‡AQ º{U"ñïïÇÜËKØíöûóúx<Îm÷—¨´ËÇÔý°Ä7éZÂ劭ÖÂÚ´Œvw}þÿ9PÎ?øÃá÷ïál/(„uuŒ:¾9Áëß‘–vp´+“ØÛ¹½]€t§ëH??ÿüùü,HìíŽÚ¶ àEDÅÁ‘+Œ¹ÁÏ'@6îxŒN»iO§¯¯Ó©?”55HbÈk~%"8ž:@"0.U$V©¼€ZEETµà˜Z‘ÌŸ`åÆåÕR90rPÔ*¼¿=ù®RØP€Ä<Ã¥UTíe»c«¬j“ïíŠEE°!9HæOzwå ¹Õó°ò i‰Þ®D®Y¾{¾¿¡+€ süHmÕ•¡)`ù4Û±íú \T»éÒ—@àédø¤0(‚"WQ‘À ÚGÌDe°|…Ìhã¿þ~6-.D–/LöÓ@È ¹´2ÀF‚#_Ùr© "ž·T×fÎáuÚꞯðä¢#ÏCPKU9 rÅS†ÃrǾtpLÝ@§ÉCLѱ—€É3HÃûóóVí¾ Õnrh¨*iÅvÀÔJ#?¾0õ!³{W‚àªùüüóçó³lçŽhî¢=‡24?ùu ‚àªà¨UíUS—*Š<V»}~E´t€€Ș<„DDlçùŠ©ÁÑ_µ¹©þÜû=j®à¤=4U*–æR¼±}:}}N×çq»åÃ`UH´¹‰;öçï ‚`ñ¹¦Éç"H€ è¬s L ÓéëëtêW ?ïXoÓÍsívMÛ[øûúüWwd¡ã#æ@¢²šT ÍqÔ;üá¡§)Ò®hÊ»^Λd,Àƒ¢‘'­s]ëèórÝúrÜéí” dlo>·—Ÿ?Àƒ¢&Ÿ*¤ Ýã>.-ß­ eM ŒZµ+˜þYX4(ÆÔæÚCO9¦Ï1s†Âjï3Ïyøœ‚âÆA1æR25HÆœ2Ÿ‡Ðrpä $‚£œ«K‚â!.¤(s+Ž¡ç©ó*O–Çñ+ùz ‚R; ¯€áp°äIùK§uª8rpåàpw@P¬Tî˜ãþô i¶‡ªTÊ\Kw•UíøŽ|EBŸ7@P¬4HâY9HÆNºXþ•.Mmr¼V¹"!ðı­ ¸¶©ÍUL™3qRD@%ñrÔ.1›Õ*‰|EAÁŠ›‚‚›rj@P (žY>M¹Ï (Å çz‚—òö¶ÛùE· B‚—ðþÞ\#º9ܪl¿Z Š%‚d{_¬b»»?®ë¡¢ãe‚£ùˆàˆ³ɶäµ´ãZù÷áã£ù‚íc˜Sb%߬jˆJÊïC|Ž>>Öðy2TÈÊKuAÁ+Ë•F®Ø×Ap€ ài¾PÅþu :ȉ­ Wuc_ûP” ¸²ã¼•ÚíÜIð¥:rAðàˆ Ñä äìvû}÷8X’W‰Ì­DnU €»Gt¾%(Æ\»N}nÇ/(V¹3®Uã¯×Tí ¥ ’ÚûÛ/(V Ñ)G…qí«å¡­ríåGEí[;Â`¡àˆ€ÈÁ‘Û 0Ú¼òjé €'’vÅQ;èoéÊ€' ’õ>/+ ’¥.(À‹гâðRþo™,——*Q—IEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot23.png0000664000175000017500000000452713657750470020527 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>âIDATxÚíÝ=rãHйJ›mŽÙî:1æš{…9/°¹—XcLZ ^aLA-Ü ±9T§X¬Â¼Ñ€@‚”ÔQŸ²þò sp8iß 0‚@Xip<ÛyÀ,ƒc·{}Ýí¦¸û€À˜uűݾ¼l·‡CÉfóò²ÙLQQ´V*€YG)@îW‘ €YHTŸ+c Ô/@V%µ $*–ñïK€Ì*@jF)@âyQÔÎS~_z ‹x\T_§ºŽ¦˜Ê`6ò¹‚ˆ@ØnßÞŽÏ/õD>>º*ás%2¬`–’ƒ$‚""ö»3·q<¶·z_Ì @>OQµƒaÖöû÷÷ýÞH˜bÀÎ=ŽZ@´ˆàXt€Œ¯0€ ™õë0Ó]pÁ@yÀ÷RL(n5ëeÝ<‘ßï>ðå¥[àûÀLuk¸¥oߺÏ"àˆâ±Ç@À-‚¤«8b ™› —Ò\ýRåü} L€Áqýj¡¥°90—œ“‰r­W ýñÇÛÛçàT‘Œ ”µgPT‘¨D`I4©¸*¦„òÔ[zôü {mhüòÕN±?¶‰ó¨t€Å‰Àȉ¯M^W2ÕÏ#T¾ª `ÆÒ dçuëØn] ä 'k­ ,@þKÛ€v›€.mMa³ ŽÒÖ:°åÇÅP÷õ'‡Ã?O‡|Ýþû伯Çó=9o—SÙXϨ`ÒULÝÍæä y¿¶Í`ùlj`vΕ@î¡ ŽÚãÿsòõx®TüfžÔ÷“KwÃý¹é9(r€ìv¯¯»Ýáð×É×Ç €'“{1·Ÿú(¥à¨EiÁA[Að¤GGž:ª5ÅKSSµŠ"E~|i_<‰ÒÕS¥¯·ö4úIkERšÚò›¸“h’ÇÕN¥žFë”TmJkhER ’8ÿyê €»V­—Ýݶö8JÇKÁ_×™ß:€™HîyŒ]×Q» «VQ´î—DOàÿ>>º5­ÛÖ©«ÚÊñÖ )õ.òã‡Céxœ×T@!0¦~~ßàÈç«õDJ ÇVµ ÉÁe* X]pä¯çsìyóÔUiê)F-(JÇ[{¥ ˆí~ÿþ¾ß×{$¦²€ÕÇYw ‘ ÿ{rÞö}|ÕUn¢çà(Meµ^µÕ·ÂˆçE`”‚£vU–{i+ŽëH’Ö@‰×-MaÅñ†<…U žÖuSOeå}°úà8ß¼ð²R€”¶1Ðæ (U µãµfz-HJÍð±A¢HÏÉÇó”Wœ/H©÷Q«Pjëm®,òÍû.(lýúØŠ£T¦®€ÕHB­ARšòÊSWCdì-LZo®XûœZÄû6u¬.@rEQk—.ï-Me1ÐÖ¤4•UºeÉÐÛº·~ÐT©çaê X]€äÀ(EÞæ€û¾ú.zÓÅÒUX¥ýRðäÀó? X°Ë÷¨ªUµà»2="a¼Ï<@í”>½ µÀ‰÷¥ç¬¶)U µíTûù3Ñû^UÕz¼Vi”¦Æ@ao­@jA2t*-äŠ$_֛ב ÚjýCWYTôZ½Ô#™*8²¼^$oÇ®i­`Tƒ¤(­SWcןÔelE’ƒ"Ÿ×ÿ €/.쥄ê[iŒŽi?á0oãñQYÄy¬ã˜¸2™ê#mo%þè¡´îû Àµ^µU{ÞÔïgèñ©^gê×Xl€<êùàá†õ2n ãÞO­òi­¤úV\µ×»Uå0Û ¤u@½wRÛúþú~cϰØyÔó‡VSWC¿?'¡ÉЩ0Ð8`½ ë^Íí©*¾•Vä± Ÿï}ÀßÝÌÖLàh¿ßïUˆÀ“yTS[3€Ù¸W“[3€Ù¹u³[3€ÙºUÓ[3€Å˜ª ®™ÀâŒm†k¦°XC›âšé¬Fß&¹¦:«ÑÚ$×LX„?¾}»4 o6¿ýöýûáP:?I‚€FQq||tSL±ï'ÀUQyl6Ý6öýd¨ÇåŠcøTV­Y®™°(µæ¹©-š*“\¡h®P©D"@ÞÞ¶[Á@EE®84Õ¨T×›éÃäç¦ùù<Ý¿õŸÏ'@FÇfÓ øç{lý Ÿé—_V:^’Ò€>v ¿ÕyV ¥>"¶¥Šbú èÖRÛÐ8`_·Ý¾½ÖÖŠcüûºw¥ 8& ÜÛˆ )õ:JÊ1x6›óã#ˆ¾¾¯±•ÁÐ  “H¾]|-Hr…ûûýûû~ÿõù,Ó]&ž"@ò‚ÀQ5Ô‚d»ýóÏãóòóãqãDpÜT\]Õ^tBŸŠãøø|ž˜Ú*õP¬XXXJÁñè÷ÀƒƒäÚe¼¹ù}©Â+¯D"(òJóÖfyéõJÇÀ‚$ÔneR ’ZÅ"8V$s{$‚`aJ—õú@)&­ Z·~bÀíô]á,ÅÿËfÓïë”ÑIEND®B`‚netrek-client-cow-3.3.2/pixmaps/ss/scrshot14.png0000664000175000017500000000533113657750470020521 0ustar jamesjames‰PNG  IHDRȹ=¶¬¹ vpAgȹÝn4!bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> dIDATxÚíÝ=nçà^@ 1\^@ ôéÜz)U§ ¡%ÈÝ­½‚°ˆp{ïÁ+ÐÄk‹÷`¢C~ÃÿáÌó÷NÆ$‡Äú^žù~øÓOÀ,¾[þ¿­3 0v „CŠ`¸àÊqU6‡;ÿËsp!Á±ëóäû €‰ǾÏ+@ß¾ë¶q±#ïç_6åuƒ>ŸßßÏç‹EÞvϯb·Š€Tÿ}¶XÄvÛãå ÈÇ‹íj€‹ ŽÛ¯ НÏV·}ƒÄpa€ VÄíU@Ä6_Û6@¸Ðim££ Œj+@ˆ .a°g€l{¼cu¢p!A’‡ßö=Îlöþýë׫—¸ªá»‚`$RM$ŒŠ!ö>|xûv±˜ÍÞ¼yõªÛ¿¾~÷îÇ~UÑ´. €‘T"•ŠnùçÏŸ>uûUìû¼Œ,HºŠdy +ö€ Y+ãXÀH‚ÄïxpÐ@±F0ÛÎó@p¼[7óöù\åÏWëó\ n˜ï=óDØ5(–Ÿ—n» Šü{3ùßóÖ™… ¸1OÄ2}>/¹¢X Ž—?œ÷ó6ßþÛo¿ÿþë¯>‡p! Áò8*gH…ñï #ôØþñ¬®8ò6î¿ë+•þùøñÏ?»ÇÅÖ;j ª`éû·L+8âóû¹b¨*мŸ%nÏAò×_?þò‹ |€´‚#W"Uß÷«mõøØÎç÷÷óy·ïR+œAkÔ•?Ìi‹`h]ºªöooïînoë ‰Û£¢¨‚¦µo H¬‘źàˆAy»ÚÒ¯ï#W¹¤¾½Õùî œíRÅãã·ï¬Î;Ý//¿8D@T’GYÕé›û@ö¥•·>¿pByÞ‡Nói~ˆ†¹o’ç{Ä種DrP¬¯0ªªöU"p­ßñ‡8µyù~__ßÜüüójŸF®8¢S;W ­QVq¼xþêñ­ãUŠwàÈÁ‘·yT×Ð/¥kÀ¿|ùQwäÎòj›ûBZ÷ËF«E%p¦ùϳzUìGÅûùþÕ¨¬nÂêË ŠQX9"(b?ž·º½Úz§Ž «—¨Ö7ôÑ€}¶:Œ6ïÇãóñ"0V+šÍ3ҷݪ@NTä "*’¹ÉýÑ Ç¿çÛ«J¤5êJ€À€åµ²œ‘±¾¿/;Í£#‚#w–çNïÜÉž+‰ˆ*Hr€ô­@b0ˆSÍÃ}™qU 1<7W³ÙßÏfõ~~|î©.]åàÈ3ÍóÚZ±ûÇëŒý*H¼Ó0€àˆ‰†‚dÜAÒ ë]E®Ž*(ª Æ; l`LÔwptÃnó¥«eƒßª@Zkbõ ˜‡íæÛ-ó0ÝðÛõH›+<ïcÛµ¯ªÕv[H×Ç¢B8S…ù2(¢ˆ`ÈÈêVÕ¶ßÌñêöVpu0˜ yY‘¬î¯ÿMôjuÑÄý*”å *ªÛ«Š#wž·FmUóHªÎt•ÀÀƒ¤ú…¼cë'nóo¦·n¯*åZ‘T¿‘^ýaßßLÏ[Á02Õo¤ç>j™øVpäµ¹œq|­ÛQ¡¬ïÙoë̈ˆøÃŽéÖÚ|¾œ‡Íñ¾€À„XKC¹þüäK7J`òòZXÖÆZ±*më7çFÏ7êÍZæ†tÞ1€W$çüÕÅ Ý9½X,ëÐØ§VÖë¼eÙ;äßq9^0ª ©'<\EÑ÷þ}ŸoÏ«¿íëï{\€ÉHîƒi5¼ûá+—¡`"²û7þcÈ¡^ש+"€ÉȾ÷?T€ìzücˆÊ`Çoø»~#¯žg×>о}}Ûzœ¾8ƒÙìýûׯ‹ëëwï^½Z,œz‰àXF‡ `Ëàx|üö ``ˆKe#’ÙìÍ›C4ðÝñ–ÁõððáÃÛ·€žA—ÈT ô•GT6úXØèééææêª Š¸”åÌ@mñÎÓV-ibõ^z‰µ²bµ^Á@ωeß?þôÉÚYô”Wíõ»!lAQU.e—¬5ïè,6ŠNõ<*+¶ÎkEòøøí; aò7Âjß™jŸÉåÙÚ¼ÿžZpÄç)ö}®à‚å€ð‡¾o`œúñ—ò9Û<äééææêÊç .²òÈGת«†ÿ¸ÇZ¥Œ i]ÒK··ww··‹Å|~?Ÿ×—­†PêÒUé^ÊzÙ G`äJáááîîáa±ˆ`‰ýÝ¥_tÇ<ÀÉ›Çõ‡àØ®AÎÉl¶ Öþá+Aœ9PtžïÖWûy÷Šeû×Q]>«*±yu0l>^ûuU¯Sp’+¶( }/YÅ¥°þ¯«ªõÇ‹ ù÷7` Gw‰/7ð}G¹U±ïûwüÞûÏEý¡n¾t•—<™Z€ä ɕɮ±¹3wj HU©DR$9òùoMðŒãFp'@#kcm·¤ÈáF M»©*ƒêÒau)±ªwŽ ‚ƒQ6£c¯8û‡¯±×†d—J%_ÂÊ}H±Ÿ+Åýƒc×>mïw®¾`0Aâ›çqäy"U%ópÎ?ÏÃû ”ßOýøaTçº_å–+n•ä˜Ó·§;+Î ô¼ô°ÝOÚý~Ç8» ÷Íç8*Ž|)k×µÉö} D5O¤êÙvžÇ±f¼pbQQä¾53úHZ£¶ÀÈUÁ‘ç‰Tªßa#ÑwžG0­ÊÒ^ €‹PýRã±*…ªdÿÎvÎ Õ$‡~¾ª‰>ïÀÅY?ßãÐÏAµi-2Ãv8*— à$þ\×8  |ŒIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/0000775000175000017500000000000013657750470016267 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Rom/DDBC16.png0000664000175000017500000000253413657750470017644 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>çIDATxÚí][N$1 䨇ãp+B-„%ËŽãG%SþØÖ"v¦6ØUNb¿½½š½¿ÿüùõ ìóó÷ ôö é( ÀÿÀž¿Ã½jX`í£“< pùû0 àó…ÚóYµrõj?מmµg@íj¥£Ö¶…H T„ñ‹ œÃ>&à¤]°D–¸Ò^VDÁÎIò`€J¿XævvÿÇå1y—¸–ëfÖÛ„ FXÇuñª&K:­j/ðtÿhQ}¯X‚XY$0kµ©¹h(k9Xú§=Ú^v‹ºXÙŽÔîi‘gà.³¶hZÚˆYtiL*µ-/’ ¶¹ZáVñqàZmò:½”¿°Z×0¢åç¹Wûó‹“Ö˜µ7G–ÇŒ 줛a$9 à1l†F£Ý–Y°r2c€ÛBßj~°=&K “aõ樽— ÚæÖ*`X5Ãj¼¯tl§)ºW×¾‰˜µÛY¦ê²^QÚ!Ûã(>Y FK^­cŽ8›a·•1Ò{Ñ:¾\vJ;G½ú,Q/£?»à=2ßN&¼”L›xÂd ,-2Ôûûå8Þ¼"JTáÊ©T¾ë »_ w*¸=”íR{ØíÞ¡ÑNCÙgYË€EKr°*±ÎS{¯ehû(á‘´^åjÖ? Xƒ†ëÝ®IªFî–ĸhò~!,0ï¿ÛŽLÙs)MÍIŸEñÓï‘deï™ý§Ñh›¼®R7LÍoÎúÚR“mûÌÞrWòçms×¢üZ¡Ù²z¬^€ ±¹ØV0ÌÛ—ÎÉô¦Ý/H/¦1è(Àrÿ˜}]ƒ•n¯%Ô$4Úišä¸R»Œ×Å`x€í„5JT½å¯Ü¢ÉKX£í=¬çr¸è vpAg8H1JbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÔIDATHÇåVÛ € tGpGsGp6«ýéų!ãý4$¼®W®,K/œçªIiSˆØ˜^ r(ˆ ü‘]QnÐïÄfŽãà¯è#äfÑgf5’£âDr!’^q^9Bn¥/Å«–Í<Â$ÙŽHø0»ÕÇËAsC5jc¬¼äëh6+Ïmb9|ÅÐr ï\‘~áëøSï@ÞC—Z™]Ú¬r—ëß­>hVÍ?«²g„¯ã9‹¡¨wЭÜOüÐϪºÔ,„޹Y….‡N¬¾r÷ŸÕ ·cí͘ý>pIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/AT.png0000664000175000017500000000174013657750470017303 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>kIDATxÚíQn1 Csï½Fî›~E€ ÁŒÇ¢Dz?´Ev<+K¢)|ð|}ýýõîW9¡×ëóóõúþÿ~÷ëÏgCLN´ŠØoDˉý|·î¹ú~6OnŒàê“m#x^lž ÍWÅÁöOóêR—í0öÚ~«‹I§à*¾‡™Ý„µœ°*«‘|š –m}»Úª§ü«DËÃILÑ´ú¤ÊÞ Ä»ÿr‚«ï ¼&ùí[ÚÕ_¾”*Âeá0T  “T'r¢Oó¼¶-®º‰.ë¬ÆÊm¯Õ§5ÉÝ?/'¸*y]}_¹ aS4UwýÇãßx<\-Üßo«‹×I(ŽHƒ]ëþyd×~Sò¬N³Údˆö|°*¥·9y´Ûý—\­ÞÊž`Õ®²j®êI¶DR}šÛ¶¼ñ#wÃÍ¡ Àé5 ~’jbc~’Ý=Z~}¼xÚ•ŽIù!³ÄcÛ0¨í·ºct@ ð“×~³m`Ú·€cšè¶2D¬c'…ÙŠ‰örìÕ;‰ŸDM? é¥:Énaë'i߃mzÛ•·5ØÛ5ì /»áOÓnugë¯#³ÕÅë$G¤?I|ûÍ~ ŽýH¡˜¡Lñc­ÆƒÅŒV³Nw·€?‰d? qwéñ“Þ­&ÁORMlÜO2vq€ýÕ Ç4Ñc®ÿˆ›<®Õ_â£~’øIð“ÞøIÔy¡­Ÿd·W=Ö.«^Zû”ßæ~’±¢I¥ŸŒgÒ¶~»ûIƇã'˜”è$Õí8ü$væSUÃr<å— 9OO½=­IÊü$*_ ~ü$Ýü$±: ÅiÀO¢j¿ÅÜO2î'©"h3(¶üIªzÒ¶BÎÕß·§ümBŽª€o³kÄøI¸ŸäiøÁOx—Ö~’ê½Øö~Um2®0ŤüŒYâñ‰}˜‰ Ôö[Ý1: øIŽk¿Ù60í[À1Mt["Vȱ“ÂlÅD{9öé;Éý$U„ñ“^  “¨›ãÄlý$í½9Ë_í'±±kØ^v«º¸Ùo¶î0Ûûšð“«“Pü$ê–°½ŸD>Ç~¤PÌP¦¸±V6ƒÁbF«Ù§[ý°´÷S/uÛ–‡ŸœŽ?ÐçL¹•˜*IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/plasma_det.png0000664000175000017500000000105313657750470021105 0ustar jamesjames‰PNG  IHDRKÿs vpAgK÷ ™bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¶IDAThÞíY[à ëQ{¤¥7ÜCšæÎ²š&øXEY›‡Òm[c 2öýõ{¿Ot»×ãøœÜœ"®×¶^f‰ö¢¶Ã·Àã9Þó¶^îwÇÃM>ÍÇhúiQ½ÆÿK ÓÉÁw³î!ÎÓ–ÁP’bu7K1Vº²Ô÷õnÁ¸„÷›à²Šƒ™"[•e*À‚kx>»éµÆëè²a~ºd`“…"•·åÉvŠs¥6¢1dbXÿcti ftÈLË•A©|ȳÙÁÅL‚§DÅN*êÃQŽ;Ç«ëÓË}f"&@a“3ã Uð…‘ŽùØÍïá€Ui”³ÒÏñk¹b¨£¹¨Âôÿ,mÏ2º´-¢ò•å/>Ç 5 $ JqžŽåc%0Ú9Ø¢µTYK‚ùX{Ì·é¨ÆàÁÀuM7Y0t×Y-–¶€R4½ô6uUãì÷y{º† "§wsTõÈ 3TnK)>AD±XY¨Û×YSÚ4éTÑp«P»[‹*J£Ù`û\ñ°R@}2HŸ‹Ý"0ÜnRA¥*nV dƒ©üS~Tðö_œkQ£³¦IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/DD16.png0000664000175000017500000000254013657750470017434 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ëIDATxÚí]An#1 ëÏó…Üzι—|¡?èú“,ö`,V!Ù#KtK^ͦ ×™±IY–ÞÞ~n·÷÷Ûíõ¢#v¿|Üï¯×óùõõ|¾^ãgŒâñøü|<þ?Ó}Õ´ÄDðÇDìÃa¯ö}e„ÆuL'hšWôûéÓ‡%€£×ѧKÚ÷÷ßwa‚ãßÇûÓ Ú•büADÐþÇÁ²•&Jæiö^§™ÿè'lA&'x™©«k8‰ 5QtK]»ôŸe‘!÷”r91Oò{’~ÛˆF•4"l_/ ¯y½×Ë$þ¬Ù>/^%V6qÏš¤¶¥N^Dᚉ¢q{^¤¶]Êosyž¢öo—YÑí…¶&º©­b¶ï+ ƒRÔh¤ËŸF$õ½›rbÈT!/Ò)°Jz\Ë F‰•›$o^³¤Í$]5üR!‚ Å+Á]±ç4o’$÷‚îË6ÔÑWƒäÈÝ]I+õ‘²ž5Uéº}p›A#€¾b;’åo÷"HI#Ò¶Ûi%¾õËtŸÞƒxÓ‹D‚ ²Í3ÝÊô A+èTŒ'ùÛu 'T£Jí¤?,Q;= ¶ÇŒ í=xÌS|¼ÄW–¯ ÂÿÓ±öt”c,Ê“n ÒFX½4Ú5’üeÑ}OIÓí“X%íí0y·Â¶yÓKϋÑeÓ4k+gÝ\Z²í®‰8=—U_áp´{/5 šàíy”òæˆhÛq]ïAÛyâ(Qt´|;±h•¨rO‚>}µm‡ V¥~»/^¦ès`·mfßÓ´å]è+ø‚À‚cŠ-Ñ•f˸x9þÛë¬G)ßà‰–5Ý>r(DKSë¥,¡ö*Ü–+j/w«ü©õ6pèçGd3[ev•Þ{Óé€ö^”{äMX£WôÅÚiÊÝG•õ¬‰Ú&XiZ.Ð7­ð”u{Û(áöÆ)’ú"xJ8޾¾–º¬É{Âoñ&hñvÙJUØe&jVú#bÛMÔ¬ÄGÞ¤ìaˆænmww³’?Ú¤\ýDÝ_[ ÕlhDJú˜mº‘£=*yœ´§%(¢ì¢]IP¶‡×²«œ W§µÜDÙ¯8J¬|$g·%Êv f›W´u‚ö¤>:RÔþTÛ-oòÝŽ-o°2Û¼tzÿv•¯ZUÎô_,ÊE߯½½rGé>ï¸G¡ó&³²l›ä÷š|·¹;äM¼ŠgéÉeQILSÚ–ØÕ.’è+¶[a—êjY‚èVYšäÏ^ah·/TKAó5"µêMÚ‚çQoâµl¸,X£ÈË8ò®Ë‚uµGYßš<æü±O±7Ò÷q¢MIAø­&*kiJ¢T€ÕkúÚm”Õ…(±'ýÞñFÈSÖå_äî“”+kd–Úwš¢{um%yéw;Ñ|gÍR»›;¦E!}®—L’ ‹Vu¯¤¯'˜up¥M®š§¶£DÑŠ·e÷ôì¹’ò’¼^#«°ËC^z^9QÏ‹ÌÎßFlÕƒ”e^¢€ã}4fIçMáT¥MKPÕò²‰ÒF³Ž«Ã/‚Y£)Uíe­PgÀí—W5ÙËDÚ–ø˜UnÛ<Š„j´€v™‚Ž–ù³¿¿¨wv©½PâÕæ˜Þb‚`ðÌÝënƒhˆ IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SCbc0.png0000664000175000017500000000033513657750470017670 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>hIDATHÇc`£`Pœ8"ÿÿ(ýÄhò- Tÿðw`E~yš9–vpYsL.‡ÂôS=-Â,„Y°`*î]LžPHSÝ0qtšnôQIDATHÇí–Ý À „ÛqÇ­,EBéÁa´4‰?†°‹¥t·¥ä\½ôÝÁb|ƒU¤§/ñeÀÐOÅ 0¥-)ÿXDå´ ¢’f€L9- Ì?€£gÐ-Œqí8³[üµNÄT# {QöS°÷Œº=q-Ya^æƒÀî¿V×°nº§x4~ÌÚ.G;:³bºIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SCBC32.png0000664000175000017500000000363313657750470017661 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>&IDATxÚí[r[9 D³ì,'ËÉ®’JMÝa¥P"€¦uú#.Ƕ‘¼d¾ðíBèŒ~þüóï¯_Sê¿—~ý Þýû¯à÷ïÿþyY€OÛQoðöüž ôùûãmñyÃç ~üøÿ×õ<߯¿÷ü<*éã>ÿ¿~m Ð¾Š¯yŠí;j„BbýËU>¦NhëfÊj òƒãL¢õ«†µ-ÀW™äxTUlÃ$YQUÜMï~@ÛÞ¾c–BˆøïC—ífXÖú·7ÕQG,ÒÎ&YËŸe’cFV_Y~U…em7ªÚˆEÚ )úy;‹œ®»×¦a7òÀ"!¬?û²ÀVhàãB"ë? 2¤êƒ´=\‘cÎ2IYÛU/¨–Ú˜$ª‚u"jcmwm{m 8§YÄ6@X!„Ìú?»~ÐÎaÛ[ÿkJlõ{6mLM’·ÛªheImjƒ¦¬å_}ߨ.8õ¢Ýq6L²V}ùÎi&± p·Mޱl‚‚Q†ûÁ5§­fVÇS¶Ên9ÂŽI²–ŒIvm•1Uµ¯4f’±‡+ÚTfû´ÛÌzÁ"!„jؤ­ã^‡0;ˆŽéÚYµ?ÆFë2Äî¹’6>{(ª™¤½³mr¬¤£Me¶ÝÐX›T“G¶›É`„2Ó:bD;ÐÛÙD½íæ Úeoùm}uçѸݲ Ô¾Õñ û‡%‹mý¢M˜åa»Íd!„Le7‚첈Í|á—±[8j˜„‡d:ÀëúAX!„Й!Ï~D±›|ÕÕ´›û9jûG0É—±üÙÕN›‡Än½8jƒv+î!„þ=ÂØúAû]ÀcÖþ]Û5n"vÙ¤­d¯³ü¶¶JÌ¿ÁÌ–‡m/©Ëž«³½+ݾ£F!XÄ\×°‰ Ô–MÆMDöœq{ êеlU–»ˆIÚ-ÔÖÆ˜$²ú¶–ß6?“í]»M1!„Lû½kr(ÚÏn)6± p7Çv› ‹®;mgµ©íÂØ¨JÔÀÙ4 Ç“;*&Y)¯=‘ŠÊhoõíG XA¡íבŞM®ÙlÖhäUZ¸cUþjæ¿öÄzÊòï2I4EU¸Ë$ÇK2›‡d¼¿´·új+,‹ „ðä=^³°SÆ$ê“+£ª˜¤,@åZ¢«ƒÊsjg@ï2ÉñŒ¶áínd,g’ìï·ÝSLRÞݰ>‹ „º“MlK šT ¨‹qÚÙ$»P¡AY€‘åW_ÔÉœãUYþì:ɸÕc‘Óo`(Ћ „šAìÇà1?¸kXËõ—c’vª³«âl#¿žIо£F!ô!Ö¿\ö½í&0£½ü«amŸL—IÊu´3Î$QÕDL2à.“¯bûõ‘S˱tìÀBÁ&g²®¹E4Ë&mM#²üŠMÚw ©Ξ;)sÖÑáy…mдË"QÕ–­4½ûí­ÙvÍ­!„èÿîÿì,¿-›dBÝTÝh»›¤m2=Ê­]î³–?Ë$m·)«‡'j¶é‘ìò7ÙßõaKŒÍ!dÖßÙô*¡žM‰Ù2I´±–° P†´­MîZþ¬s>–þc·ê³·*·•ðjåmråD²É6”e`i70»AÁ&°ÉÞˆa;´E[¤ìLÀ“ìÎò¿šx¾Gí€>b’qhÚe»§} è³,2Kª ÇÛ ‚Bæý¢Ú*5îVv7òŒ¹cL’uÆöx®c›TçH¢…œqµ: Kvݺ’|ì¡B½6¢¨!mÌ(Ðn vlÆ×Kv} =“ØX~ÕìW=íÎØ,.î:VõÙþpŒE²# c.B¡÷ØdÌúï~µ™Y½nnG “ðLx}?8>’ „ºŒ=®™Ýº†E”›±;¾ “|“ØùÁöµºìj§ÝÃa³^ü.‹Ø_óŒBÈ„Mìw«±Øv:ÎþØ®Í^~U…vÐdžd š^=ÓÔ^r‘¥·cû»>ÔSl{2p„úTëo¨ý-òÊTØoW¶¹©'ò‡c®'båÛ¡©Iv/öRsÒmGÖêÓ\6/çøÈ¡,þ5,ÂBô{Â&ö·ÍÛÓʥؖöcµüÑM¶ÇSf§ìÞÜ–`þ)!µëmŒIÔFÆ1@WXi»‘ñšüì×°ùIB6© ОIŽxêËç®ws%*&)ÃÐÈNELRMÙ’Œ˜¤¼;RY…ÚªðËY}Ûœ±ªí¯!„`“e’¶@ß­ªòýÔYËŸ}v&YK:b’²Yÿ]&i»Æ ²ú»É|Ê𵤢õU•eË5Vÿºeu„‚M°üµžzƒñ@#+?OY£ZÆ$j/–²ü“0²úŠE¢eŠq‰ªºÜòÛvܰBfú Ï -‹=U"­IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/AS32.png0000664000175000017500000000543713657750470017456 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ªIDATxÚí]InI ôÏõ|ÖÝ}Á?ðüƒAA@× YÕ‡¤qwGgå‘d2ü Þßýzÿúúøøýûããëëú}±ÏÏ?>?•ˆ?Ûˆ¾½ýüùööýY‚çû•¼>(JðúYFðïßÿþûý†Õ¯÷=‚g_”Jÿ¾Œ Ög®¿Kµ×•n­SŸ-©}0lk-qÔ^×Nðã¥ÑyþNPë{ÿÔ÷^¿‹­%ÚZŠ ˆW÷&cóžU¶µd•p-#”UÔpó„–üÏ7MÚ7¶zA«`3MV/•üéQM/‚^ÚçEÖXz‚xšGYCä\YÚÍÓ5¿y½ œhµô_GpÜ4Eœ$µb•ü’')3OÖ Ê1W§½‘6(Æ<‰WòKÄ­ĢØ|(bkß‚ ÙSêŸ-2f–¤8=ÈZ/2n3 ‚x*¤5w, £ XMȶy’5Òÿ”EëL“Uò[[®¼%lõ$pW ?ÀM“õ…R JÓ ÜÍI^DK*;‰•Gš¤Gdß`!0‰ $õÛÒñ¼ZûwíÊÚš›5&ù­”rŠ Ðt3À±JÉ›´…!¬Äڒͪˆ•´.ö^Ó”~ÔVb^O’ö&^yÔFÌû¬&x¤ÉJLKð˪aiy^©o”›%Mê[‰e¯õ"ëˆñ4H›ëãÓŒFL 0bÒÚ«’Nè”›§¨‹ƒyoŸ²Jt¼òÉêIบX٠Ѥ|Ô“”K}iTJáˆ6OrfyS¡$båº$õ­ƒ îI¼}¨˜Wê¯Ù'ŒNèAw÷&×Ä«yéum²Õ“À²à$BÖµZò&'Qx™ƒ¨Y‚GœÎß­„ʳ࢒æM´Î_E(ýhÏsÃ’ä—Zf–4©õ"moÚžwº*—úV/÷$Þ‰ü\ǼåAMÒ_š×ä°Â—4/«(h äDÅ…”ý6–Ã=óVÔ’Ýô*ì2o" ÕjbeU£¼vÈÑZPó"Öä²²Îï ?ÜfšpÖ¯(Q2f–‚ –z“ñ•bÍŠݰ\÷Èa„½2˪Çëc$»ikÁÛôÁµ£øvóàíWz‚ ^·Ý›YïEÆö«wVËEzº¼i‡ ÖíòÅIniŠ~x¬®zzi+Jw»xñmv³Öæ,qwé[Ò–»m©ö,àl‚7| ¬ÎDo;¶{ Ö¶\þªÓpód­«0À±¶t»ñvâè™&x‰5©p¶÷TXÛÊÑ~®Î*õ­'Û¡yz‚ Š'îõ&iÌ›HkíO’õ&åe]®7:%¿v?±¦zÊú¬Wò×<Šîî·r¤G˜õ"i%íí cYoÖ:Ôíõ¨µ>˜­žWÞ½õDzެ^Dû½Í“Ünc“ ˆ¢]±vëâÄk‰z«É—Wp<ß8[¤³ýv5ï-’ðç^ɯm ·UÝ+ùÛ¼ˆ—hô¾N8Ñlì¶‹E³Iep©%ÚîI´«ZÇOâЋ½I³ô—üR¢O{Kž+Å)ý×ÜteMܶ^ èH’_SÊÒ-ka¢Ö–Ðâ&š'IÔúVTA—Gœ´¾™% ›x­ž~?‰¶«ß–«U%õÛ d[‰j^^Z\åÖ¬·uêf]µ‚ î²³pJÿ±/ IIïµ°vðÙ*tÛZR GXï=._k­ÞD{ßòˆ“WQk›ð+ªÏÿ•úð– äH¤Zê§ J÷/y‰Â3޲ÛˆZÃãÕ¼^d]e‰8uAУ8 œÒ_ó(k¤AMfI‘uM‰Ã j’-A¯7'øh’ßÐ)SÔ^É7MZúI4ü'˜” ´Ô‡êu¦É*õۓɼK^[5€,áuÄ‚HnpŽO+^oÒÖR뽉V„‰ÞÄú†ÑxIÙ ¨ò$å¦Éšq¾Î“TIþ笖ú妩JêÃÍ’¦œ×TK¶¥!¢Ù›Œy¬7i#Ho’•üÚùØàÊJ~ø£µæð{söá¦ée$yz^Õ¡{Øé°ufɺձÆ, !bXÀ®õ&’GiûV{&¡µ§x½ üŒ{4ó&Zªü¸iÊz’ë'|G"ª¨ááÚìg-Sv¶)ª¨o+ùa•*Öš%k j^¤Ý4µW쎥®#ˆ§{“1b°’7óz¸yòžeo ìhÊÚëMÊZëïk)RðG­IþèÁ—4ÁªGíƒ$[|©|~¬ºþ¼Ü4¡%yeï¬Yjó$V{Ùf–´õÞÛD²ë½Iûæ‘7,7O§Â¶šª±Ý~«7oÓYoY³ž}‡‡¢×¾µ§È[lv#F¬í6¢êë=`¦)êEàwãT•Pk“¬!f%¾fã’ ˆWñ&ë®&´ƒ—6×­_¨­fÔ›”›'ë5éš"¿Ön©4Ü“H«ê)QOÛDJþ6Ó„&–ž7½Ä¬E˜ÊÜœ÷^övO¢Ý–aÝq€ß×$f«ó$RŸZCŒ ˆWñ(í|Íoš7i'(Bð_öí][a9\VÉï}=,òd­¦,ý»óѦ‰fïÌÖõz³D=GÛ±öÜœ5ilF’WÖSm÷g/7+'š•üðÈ“WIkž¾Ë_}5!Lòg/wLrëÅ¢Öû:Ëo@•võ¥ùN ìÀæC«Ô—¼H[!±èí»§Yj+Á&}@[‘ö¬Y#*èEânÐÂkL“×›´Ó¼‰Øi'æ•üm-g ¦‰Jy0U-™TÕaˆòA£I~ |ÇU“úÒ9’6W'µÎÚôRžèhõ"Ò i¯ýkõ"í¹[V/rý}Y:‰Ž™%z‚x ´©5Ä4ý7æê¼›èkD·•¹BKþ2óUÔp‚YÉžÌi#()h¯iJrkøÁkšÊÓò¼^ÄëIà:Oò$k ZW”6‚ÚÖÆ³tz²3Kô OÅ?:â:·kTbIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/ASBC16.png0000664000175000017500000000302313657750470017652 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>žIDATxÚí]knœAÛcç89NoÕþ¨VUGB60<¾¬ù³j“&tž6æõúûþ~½^¯ß¿ýúûùþó¸c__ÿ;ö×¥~}cçg›£ç/8§}žS~Ýá÷\ÃÑšB/OeÀ»+O8VF;Ï©±¸: ¯9†Ž‘±7:öe‰ý…mw´wªÆž¼Ä=d2™v¿£¬qÈB+å0 Œ—<½á±4Q‚²ÅïM:+{²¦Ô›™™æ&(äkqD ¢Å~B}4"e›ÃÚ¥(åº"Î’&Kç.cµu>¦ÏÁ,M,¿Y² Èd2™Ìw…y?Ç/ùVq“tæ‚GÖ÷!n‚>ÃŽz‘²—“¤IŠîŸŸQÝ´sí>f ®ÝÅ?æ|ìM"“ÉdŸNÖÿÂö›"z—¶]qÙ+Ь¦C¿(6}+F†KÞ(?ÝOGù’¾õNÒ¦·pKÁ¢ü8ʲ¹òWÏèkçõLÌh’mû{1ûâ^žÐ˜i™LöSv#{âý‡XôQñÙÂæ1…䫼 ßí#êÕOh ^% DšÚ!?KšÚói¢IemtT©¢×‰³¯këÁÑÛß½õÂdßUèÈVoS 7»Cœƒum â^³ëGpý|Ì.~Ì9ø¸›D&“ÉaX›±¢\cÑ­[òõeW \ÛQ Ê8÷æÍ´gy«`ÛÊvo¿“Xø²|³ ”úk/M,ôgßêЛݵ9ÞçÔ²×Î(ôršö›fý.’$“ÉŠ‘öcÆ §Æ½½éÉí%“,ôowô–NYRE´:¶íÎŽ¦H•íjoé+µÛ®\{Î1õP6k%Mm½rØã ±¹ëÐß;¬ÜÁš]È|LÁ´H•ìcl­”ÚÛ!TÛÙ¾k½škt½0¬DyG²¼åB¶QÀZ‘αìÚ+¿“Q¾ â$k4½ªÊe#éåÏã-Ð9¹V„äZ:^•ƒkÕæ­¦cò.ÈQռˀýøxIDATxÚíÍqd1„·ÓØœ‡OÅæâ=ÌEU]ành¤ñX:Ìa~OO|BÀ¼½ý¬öþþçÏûûúºIäç翟Ÿëë¸ø‡€¿?>Ö×­ýù¸è×—6Æïo) ‹^[C%^”ùŽ øñ¸?Æ9Œ¢ïà0Q㊗S_…ñÎçý¼NŸHà§²àH+1š+¿‚0Ÿñ;(¿SœÛùW×n޹Žðƒõy¬‚óï ‚™½Ã\GnYºª|ç¶×l›$Òtð„f# ŠXe)GÀoåž¿l6GŸH°Ìš<úðhŒ³7zG°Ç90èÝ¢ð¨£G”‹ÌaO˜V¹æ1šb¹Æ‰ú´^´È—¼RŒæj‘/™QÏÛv̈5Ì¥GlTNX¬²™)oû½4™/órB+ñ—As­¶™±²âì O‘8USŸ“— *c´&Ôú³œŸyÂú†@˜)À Þ„xoŠo@=¹¯Oîkî Å UäËÜÔ«œe×h†G‚W‘6æÊoÄ#Ö±3¨‹ · L¥Á™ŒKW¶ÙÑ„úhÅ Èüµ–\nsx+„þ“ÐÖâÇëEUBûf8_eÏ,{ÏòÊ‹§¹—©J[-Áy_™ñ.E¤È8‹Šeí·êå3è2†:ŠDc‹ŒN mTt&~Qᶙɸ Z×îºjq›o%·QãÑl¼a TˆÄ CN¹%.B@÷¢{5Ü)Ræ±ãc³úéÖñ&ÍõDºz“uºí7¶Ã\éÞM3†0Aü™Š>#Ö‰§-saN[Q8e{øã·eð¶¼ßq Rþê|Dkzspèª7%ZE°~±á•aè°jäÒŒiYN|t€!î{9ˆ'¥¨™þj¿ä¦‚!/è«ÁÜ6^‹i¢çUôɅɉƒ Q˜½ü#‰Ùc4FÒSrñL*Në”Å3‘xf%Š}Â(7œùƒîÅ­†ò¶W¦°­©Q2Ê þ¡Ò`ÐΆ|ÂQQgÕR¬"Ë&[b€˜Ú20v:B!.2gµÄA¹<…Ê”Êì'‡) } m!72H¬Œ”}cªA 2n…¡‘h;¾#âÁOÖÒÈVùéSqz殈€ [:}òdK¹>ï\ŠŽA}žÇ&ñ…ÁŠÌÅ#Žö=˜Œ€–•7…yؘM‰F¸3Â$<;Ž„²oJHÈû}À“5r²tÛS=vž¥ÍªcÕ9Ù˜ i„Á¿VïsG Ã_ÅÞG’—jOâ #©È'€Ï­mNçÂWk†ìÁ<ƒÈN·Û•ÊêP¥­¢£‚)Y§Âž™:r̳ÐEœ5X^‡)ÓxÉä¶aòZ×Â8ymÊ ‰|#-Üqǘ‰“ÑÉÌoåˆÆ ¡æ2¬DmÌ“×ú< gPBEÁ*ȸÃiå#]´Á|i3ƒ‹‚ÌŒ7õ÷x¾n±­:Y~16j·ñ2Òè篮x}B·½æmŠÎD Šò’Ñ5cPLáC_s`R Õ!“È/³&ÚãŽ÷C`.È.·c=>6Ƈgõ­ãcšë˜®>ln»íkm|'yîÍEïç8³[”#Êù~Ãþ˜·Ê|-«o<Džs˜†ÈlóýôŒQêhëÔò ÕÉT_f+k“ÿ#›÷–W›¿Úå¡oùé™›9“ÈWù8¯­çN·ý.Âä¬ü/³±¼ÔH¡hæïY1*¢˜ïT+¦cú­qˆ9æ¸ïû1üëƒÅSu,BÀ¸"˜Gjˆ¤qÁ0Óg$€Ž÷m1ÅßZçæ|êoėŃk5,ÔÆ\ªI½bÆlä4ÆL»h·è·ŠÜšËÐÈàlçSqÆëv3YO#±©9µâp‘CeØ+–ëd^m)uµnÛ©_…?‚½¢× Oå3ìe¼­Õ1S&ýÆœ \ó(ÇüÔœ¯ÉÜ1d:©âG’ú_°þÞ‰oœ@MÊ¥IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/DDBC32.png0000664000175000017500000000465013657750470017643 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> 3IDATxÚíY= „çØ‡ãp+x@#D$Ë»]é.¿Œþ…¡&ÝIêËb>o‹?>ŸÏç÷oXa¿~ýý„úöWÒ?¡0þü_Ø÷Ÿá5¬°qÑ—<*Ðý÷Q`•Àï_(}~{íÙ{¥/}Ž ”>ÛJPxÔ’À±)òz „¿B¾áìkæbøÁQÜ8x3oƒ§66É×vxª3ÎyáÇ,»Ã¶Zþ5&±>2‰IÆZ·`WX¥Ï5ÓqúÂè™­6ª“õ:,iŽZvÂR™@í‘®]i’__A Åg0ÞÂÖOUÖÿœÒ«­<¿, ?ãÛ*FXÔ ¶ …& ”õº@EÆ…Z!) KáñPe‘2açx­¾ôÚYdß)øÓdµWÂÞ¸m©*;%ÍTíN: OmÎ::e–Û²ì~‰dÆ,?Ü~ ,“X¯g¬ Ò,»ÐóÑI–_ºè7v4ô µÎàíåéÚû¨Æ7pªz=œ0xHb0È$ÕŽøq‚ºõ¸À¬Ð¶èÙk’Ÿ,§»¨™h;Oe’1hÊ.š;ë1«îãJ‚ÖYä¬1Çø#Ž^"h;«º5>®O•°°t©`0È$Bo]ï½U'‘È&×͹pð”õ§]+ßó ”|¤{KLÊŸM¤Ž3SÝÙÄ’Õ׬ÿºÕ‡a‘­Þ ¿VÙe-…Úu®†Á`õ^¸5Î ™ƒaF-Y¯´Zþ.h2 õZ~ëù™ðVØ5-ûr˜áLr›ÀkÜ ƒÁxÊÊìÚ ÙDòƒV»5ÞrS†5ݽ«ûc†vŸ¤Ëò{¡ †IÚÎÒê¿Æê÷ Y„Áx£Àà0‚á¬ÿšy85ÌItëYþê±å°~ò(ê¤aï¸{YäüïíÉ··]¶ªºÖ†ÕIIʾàšmºƒñôa©ºªFûe« mÆ)O-)­E¯³‰–©ƸÂ\€ö &“TY}Ø /Ñ„Ùm?ŽEª­~Û©¹®9µü{¯gú7½·®-Yÿ‚ªœèå¾O²þQ6iKc¥%éŒæåoj­²6þè­Bá,ÿ›ÀÖJÔÎ^i½xM¨w)¤ÍçUW>-/ÍZ5 ´mÜT +\e`6 ZÿmpW$¥š±ëEm5Ge“6š“ö²ÉxKFÙ¤í´‡¶aµUc· Ö˜Ä[Ìq|@†cÉêÃÍÖeXeõÛ)/Ûë¿ÃœÕo‡%2 ƒïRPÐ5ÖîѶWì«¶þÑ–³üQ6ihµüã5ì÷I¬'’ÚÎðW1‰[ ×ò¯1IÖò¿×êW9ix30NwÙ¸9{ –²-Û‚„$²ÉÔš lg8+£´%´y} ZQŒ3I–MÒÆ樽:iÖT¹Zâ°òÓoVUFµìw9ixÏe’ì0+lýÀãµsói»àï›EË$pöìtÖd“­©Íz¾m€Õµ•IÆõ㘤ê^kùŸ'ðqVŸ,òZ!ƒ0È(F6éÕd“ëZÐjýÇÙ$ê¨ÇÒ\u3ɘa}“¼š¢Âà–È"[aY„ B6Aà7Ç®uxyÕuŽ´å×LÃXËe­“hFF f¼l²6~y™dmX9{óÚݦ¨a…x¾Jí'1aïÕÁetŸÊ¢¿þ" s3·BTÖå´íŠfs|H—ÊÇ;o*Ýv6©²þåFÕjù5ac-g}×`j(Fa ¦ê†Æ$ë°¤ý€ñ„ÙoKN—}dí*``I²ú°iõ ²øŠB›?”òÐx唕t•¾ Ë&i§mýeÖ“HíµüRÁ•µN4¾¡“õ‹påA4ß8Î&QYæšž™ª¼–ª­~ù\^]eœ·$ ÆŒY8aY3PVu×k¬KÂÕ3•Û¨J‡Í¤rëãLbÍËÃ$0eÔa˜Dë cµJ¦Ñ^ÞöòWµt™ÀìÊ@y v  í©Ægýy„ŠÁ¸IÖ{kuUÞ±æ(|—À±r+›Hð4nù56‘à©ý¸uCg½táØ!3Íò3IÕâyùá²SXv¯­}|¬.ÿÕV ¼© “0·1Ézïµ&kâŒñ¸¹7»ä Ã&pð$ÁÒùiîý§qµæUð¦Z ×ZÔ¾X{§Ú˜D* e‘öÜo[½™÷µ×Íœ«a0E½6ßg×± ŒÀñEô*Ãjµüb¯·.¢[?£Ðto ^ór˜áLr‹ÀkÝ ƒÁxÊÊÌÚ g”kLCõy™6?èµü°Ð´¶OÒeùËvšº´ vâRûac××È"Z/‡Ÿ9È" ÆÛå:áð3LY:¸)°Êú·þ¨:2?–(Ö{B3®0vµöFŽ5íóÚ¦è­0÷VØ4“¼–$Kqdãmlò>Á]-Pö½Õ~®žºÙ¤Ý xÓ<ÃV×€«²q-“¬Slï£O¤mí¥ÒÞXòvi%ÂúJ”Ï©°•^®u+ £¨×Ã'mÃRuÍØ6xªžšÊ…Fç\Í\Œ%+Ž¢Á¸å—\ \¹t8&‘Ž:Á$-†«ßé­€ÚÆ Ñ:MÖ”ãcVßzºí„%¸4c—«[P…Á Sl Ì:ëvxªªC×î áà)kù¥?7~ÚÃûÿ 2ÉØ(¡Õ'Yƒ¦q&±6¹fõ۶¬— ¬•OÛ©µ€”5ÏBÛS´úîxKf;O,Uõòk\ ,ãñïl¯”¬?l F] œ“^—áèîZx‚…¦,“¸zÿ€Æ$mw›´Gd½GÒ¶XnµüVhZg’± œì8unàÀZü±cxÙa–`}$!‰lÒ-ììp‚átkö ~@†í,ðL2.4ëb®¨ùÈr{X™$-Ðkõµ ©…ÇJÛã–_ÚŽ¸ffµúlÁª„¿¤ÿùå°Ö†ZÐé+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/AS16.png0000664000175000017500000000311513657750470017447 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ØIDATxÚí]INl1 ì›sV¬Ù³à Ü€#pþâë ÉRÉC<=¨Ú´@tw‘—¡ÊIìǃ lx~~{{~þþ~}ýøx}ýþ¾~^Gìýýóóý}QDL¾¶}zzyyzúù‚S‚òóÒ^_%x½¦üúz<ŸÌ&x}þß#(û""ˆþ> Ög®ß#‚ÚûÒF·Ö©eKj_\6е–µ÷µ”ƒbœ ò÷åµ¾÷ÿ«~¾ðúy\4h-ÑÖRAOCkˆÈ¥Ý›\óš×”=®’è:‚e-h%6æîJ±J~äIÒÜU ŒÙN탴AQnš²¤>"&h%5Keó!ÅÖ¾U.`¥Ä—-Òf’¬_ ½Ç¸IŠöYê:‚ Š,@;!)`ÑÚŒm›ä·³Ê°ôG%–Nõ1 ¯«;~ÔVbš'AÄÂ-h%f•üí$õ­ÄÊÍ"¦Ñˈ…Êö謦ÉÚgÓˆißJ¬=üÖ¾— ¡Œ""Yi#ÅÝNèš 5 €Þ×æÞ¬ª¥ìØ"U=(¨^æò$1ë~I›»“?[ ¥o‰iJ9J,Ü'µÎŸEèøÑÊs0qmçÚ²iɽ£ºÍ4Y?y–¶3[ÖùóxË«j"—Kâ:oBQdÚ'f4!G_Ç[½®{äe„‘`E é@í5M°j-áUØé§á¤’ŽJ7Ok[ð6}pí(¾ÝF[ª=ºu¸,_ò²#¬iåAns–ËcÔYQ~M¨F}(k[¢M'¶›%o'ŽîÕ•ÓC7m¼»m+Gû~±Uâ[wÜÛ–°5á6‚ îf¬'/×Dó×õžþM?ž,?XSÖcD­÷E¬'ÑËUX/h2¬íôÇØÝvë­’¿ÜÝY¥þ¢Ñ< e™*¬Y¼ !Êô)ÑrK`MV×v<ï×4 ‚¸Û(¶¦ïkËñò ®K„ˆÖfíªe{K"é_žÖTûµTBÚ离;푣İcɘ¬’¿<°Ftx›Q|›yðv+ÉÚµ˜ bxâFó㚥o,ºµ6>xa-;žÍÈQ‡‰ž*ê5×u½û$iû%ÚN“—x{ÑoäE!éêÒ6µ]OïûÒw;­å?¼DË%þé|V>ÊåR¶®êîš–"â¯z•ñ°¨mW&åzoî¹|ê%š.N½IYæžê´¦ãD½åDÒ•´÷®{[ šh&³öZ9Öi©üv˜Wâ£Ü¨¼RZ‹ž]D|] s7¡9"ˆ»@“úãÑZ;–ZRó¦u)¿Uþm<1Ž—`zì–LË•%ùÓÍiÊÝrucM±†Ò?·ÙNk*h’ºôŠ/Z_Eƒ¤-ƒ£7“cûá3k.Ìë÷2ÕäX.LI´<Ï ½ÉÝñýÃ2v¦ÄIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/as0.png0000664000175000017500000000043113657750470017456 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¤IDATHÇí–Á À EÝ<3ääÙ»WpGpK)A„”6Z¡þƒÑüGH@ç¶¶î 1FÄÖBÈ9„Ö(^,¥RRZTãû4PïºÁ[@žÏ ŒžÒnXë¹ö„Ö€”ÿ€¼%@é¾ Ö3t.jï̦[kj^IÍxØk•à€Ú»é€|(>”¦“ŸÔzï²ê†þiÐ*1­R[‚,Tu÷,cIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/ATBC16.png0000664000175000017500000000272213657750470017660 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>]IDATxÚíknÜ0 „{ì'ÇÉ­RQ@Ë·ôi—üQÍ&;–li†/ýú5±ÏÏ?ÿ~?WÀ¯¯`Ï7r?þ^1#‰ˆŸâí£S“hþÞÿpò\×gPú\ô{ÿùàsGÚiµ{¾Ç 0ºà®Ûøõ¤;N±4‚îgÐ pæêžâh7@70ïˆz†GÌûl®€%`ÒïµïÏ<×àúó!¤ccÅìh;OÄJ€6½ãm%ºÀJ[aÀuïÅi“(<P!ò·mþV-¢Q~ïï—Um䤑.“Q&-‘ˆkxÕˆ2hiŠ¥¿æ‹Væ¼MÍy_ž¬ŠkÛY4í!ZU\»´Ç:B£IÆÆFü8]ÝtÎý‡² [Qa€šËËë¤-±|ï•h“•^•‰'ZÅR›6‰Š$+q-[N¢”ÿ8À(amj¦ÉÔò…9:rm5í¥øÐìàäÞˆR9Ó–¨½W$µ“ŽõÎ¥-Qº¡á…coc¸‡ç)\˜,7+³>ÐëÍ·ºxבwÏDÔ™žu²»óf²q¯Ó½œQ¯€¬¬'ý’­Sluš·r$ÙéÔ®E¼#µM‹H@­ÉcÛFлÜlKY ÇvkYÚ³·³->‚e?ÔÇN1íãB+¬>kìÂ| &ã(»÷nI+aŽ`ú¥ŠR|«&Ñ’2büK‚_f®Y¨ñ[ÝuþB<Ý)@“8áŽu}`Gx÷Ö‰wãèø0>ƒ…჉ÚXnUsåên(~öí¾Æ›?ÚclÌ(Ž0 ŽØQl’mWšrZåu%z—ïÝØTùªbƒc—kà ^¼%CÞjsyx©~[Ñ•V¶Vå©À0èòÂ?má®ö3–/?ÃçÆÆ^Åp °­4°ÍHðí\° qð-…°M™®ik…m ¦½½˜ $|s:÷[µK,U1èëºÌc›¸Kn7À[cok¸†ÙØ–ãØ¦íØ¶÷øƒðG/à¯Àÿ?@M–÷Í)C/¯A椫.—ÉØØÛj­øj[ÿ™•a[ã"’˜j[>²Îõ2MRŬ­j/ýŒi;G4~N.[GÒš†Ò®î´;ÒâQñTöòd«ÊÏ­‹ª:k¤©dx«%¶Q-–ʦVòâG¶í,U¿}j±"  í16f\ù%)>É*˰½õ$¸^èmŧÒTz¿­R |D­ôʪMÚ¦>ªMÚ¾­Ú$yÚÆj²§m£ íeÉÖŸ”¹B¬T?ZÆV&+£ my$^r§e겚ÏjÝŠ?|¤ÂØÛÛ5§oËÝÒ€ózyá1Woàv Q²þÿ¶ôJ€ö"i½‘§mç{¯mgi{+sÚT7i,7IŸ‘ã uY5JxŠ¥þXÖ`cU¿®c 9¦ •Ö· Ë~0âhŽ{{Ófã^üºgÝÚŽõæðo[¸ÛiV·6iSwQšeOáä2oFÕ±!÷ÄOñu/ÉË,3ø…úš­G®£[ccT­‚Œí~­ˆ*cÒYÚUîÀ¼ÆüΉ®=ä¸0Dt¤·r¢L »6˜ˆ ÇbÚÇeæuI¸´/ðaÄccÉåªMST½å嵜Ø4e>E·Æò–køTy+€cÅP\¹†•9+xÁ— a‹®0ek×þaK'­~¾ãŧÚÔcÊwÇÆ^žºW»¦×ùËwllSy؆8VvÝ™¶Ä4e’dé±¶Vǃá[«á›ÓY}'ÇÚûI/®Abè¶“’hÂ5é´>£ÇÚœŽ)öàna> Á~{IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/AS.png0000664000175000017500000000543713657750470017311 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ªIDATxÚí]InI ôÏõ|ÖÝ}Á?ðüƒAA@× YÕ‡¤qwGgå‘d2ü Þßýzÿúúøøýûããëëú}±ÏÏ?>?•ˆ?Ûˆ¾½ýüùööýY‚çû•¼>(JðúYFðïßÿþûý†Õ¯÷=‚g_”Jÿ¾Œ Ög®¿Kµ×•n­SŸ-©}0lk-qÔ^×Nðã¥ÑyþNPë{ÿÔ÷^¿‹­%ÚZŠ ˆW÷&cóžU¶µd•p-#”UÔpó„–üÏ7MÚ7¶zA«`3MV/•üéQM/‚^ÚçEÖXz‚xšGYCä\YÚÍÓ5¿y½ œhµô_GpÜ4Eœ$µb•ü’')3OÖ Ê1W§½‘6(Æ<‰WòKÄ­ĢØ|(bkß‚ ÙSêŸ-2f–¤8=ÈZ/2n3 ‚x*¤5w, £ XMȶy’5Òÿ”EëL“Uò[[®¼%lõ$pW ?ÀM“õ…R JÓ ÜÍI^DK*;‰•Gš¤Gdß`!0‰ $õÛÒñ¼ZûwíÊÚš›5&ù­”rŠ Ðt3À±JÉ›´…!¬Äڒͪˆ•´.ö^Ó”~ÔVb^O’ö&^yÔFÌû¬&x¤ÉJLKð˪aiy^©o”›%Mê[‰e¯õ"ëˆñ4H›ëãÓŒFL 0bÒÚ«’Nè”›§¨‹ƒyoŸ²Jt¼òÉêIบX٠Ѥ|Ô“”K}iTJáˆ6OrfyS¡$båº$õ­ƒ îI¼}¨˜Wê¯Ù'ŒNèAw÷&×Ä«yéum²Õ“À²à$BÖµZò&'Qx™ƒ¨Y‚GœÎß­„ʳ࢒æM´Î_E(ýhÏsÃ’ä—Zf–4©õ"moÚžwº*—úV/÷$Þ‰ü\ǼåAMÒ_š×ä°Â—4/«(h äDÅ…”ý6–Ã=óVÔ’Ýô*ì2o" ÕjbeU£¼vÈÑZPó"Öä²²Îï ?ÜfšpÖ¯(Q2f–‚ –z“ñ•bÍŠݰ\÷Èa„½2˪Çëc$»ikÁÛôÁµ£øvóàíWz‚ ^·Ý›YïEÆö«wVËEzº¼i‡ ÖíòÅIniŠ~x¬®zzi+Jw»xñmv³Öæ,qwé[Ò–»m©ö,àl‚7| ¬ÎDo;¶{ Ö¶\þªÓpód­«0À±¶t»ñvâè™&x‰5©p¶÷TXÛÊÑ~®Î*õ­'Û¡yz‚ Š'îõ&iÌ›HkíO’õ&åe]®7:%¿v?±¦zÊú¬Wò×<Šîî·r¤G˜õ"i%íí cYoÖ:Ôíõ¨µ>˜­žWÞ½õDzެ^Dû½Í“Ünc“ ˆ¢]±vëâÄk‰z«É—Wp<ß8[¤³ýv5ï-’ðç^ɯm ·UÝ+ùÛ¼ˆ—hô¾N8Ñlì¶‹E³Iep©%ÚîI´«ZÇOâЋ½I³ô—üR¢O{Kž+Å)ý×ÜteMܶ^ èH’_SÊÒ-ka¢Ö–Ðâ&š'IÔúVTA—Gœ´¾™% ›x­ž~?‰¶«ß–«U%õÛ d[‰j^^Z\åÖ¬·uêf]µ‚ î²³pJÿ±/ IIïµ°vðÙ*tÛZR GXï=._k­ÞD{ßòˆ“WQk›ð+ªÏÿ•úð– äH¤Zê§ J÷/y‰Â3޲ÛˆZÃãÕ¼^d]e‰8uAУ8 œÒ_ó(k¤AMfI‘uM‰Ã j’-A¯7'øh’ßÐ)SÔ^É7MZúI4ü'˜” ´Ô‡êu¦É*õۓɼK^[5€,áuÄ‚HnpŽO+^oÒÖR뽉V„‰ÞÄú†ÑxIÙ ¨ò$å¦Éšq¾Î“TIþ笖ú妩JêÃÍ’¦œ×TK¶¥!¢Ù›Œy¬7i#Ho’•üÚùØàÊJ~ø£µæð{söá¦ée$yz^Õ¡{Øé°ufɺձÆ, !bXÀ®õ&’GiûV{&¡µ§x½ üŒ{4ó&Zªü¸iÊz’ë'|G"ª¨ááÚìg-Sv¶)ª¨o+ùa•*Öš%k j^¤Ý4µW쎥®#ˆ§{“1b°’7óz¸yòžeo ìhÊÚëMÊZëïk)RðG­IþèÁ—4ÁªGíƒ$[|©|~¬ºþ¼Ü4¡%yeï¬Yjó$V{Ùf–´õÞÛD²ë½Iûæ‘7,7O§Â¶šª±Ý~«7oÓYoY³ž}‡‡¢×¾µ§È[lv#F¬í6¢êë=`¦)êEàwãT•Pk“¬!f%¾fã’ ˆWñ&ë®&´ƒ—6×­_¨­fÔ›”›'ë5éš"¿Ön©4Ü“H«ê)QOÛDJþ6Ó„&–ž7½Ä¬E˜ÊÜœ÷^övO¢Ý–aÝq€ß×$f«ó$RŸZCŒ ˆWñ(í|Íoš7i'(Bð_öí][a9\VÉï}=,òd­¦,ý»óѦ‰fïÌÖõz³D=GÛ±öÜœ5ilF’WÖSm÷g/7+'š•üðÈ“WIkž¾Ë_}5!Lòg/wLrëÅ¢Öû:Ëo@•võ¥ùN ìÀæC«Ô—¼H[!±èí»§Yj+Á&}@[‘ö¬Y#*èEânÐÂkL“×›´Ó¼‰Øi'æ•üm-g ¦‰Jy0U-™TÕaˆòA£I~ |ÇU“úÒ9’6W'µÎÚôRžèhõ"Ò i¯ýkõ"í¹[V/rý}Y:‰Ž™%z‚x ´©5Ä4ý7æê¼›èkD·•¹BKþ2óUÔp‚YÉžÌi#()h¯iJrkøÁkšÊÓò¼^ÄëIà:Oò$k ZW”6‚ÚÖÆ³tz²3Kô OÅ?:â:·kTbIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/BB0.png0000664000175000017500000000041713657750470017342 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>¬IDATHÇí”Á À E»·k¸{xr w±.$¿¾&MÊCûå)Ÿp]ߊRj-ÅæCÈÖÆhÍæíxˆô.bóÑwoDjÑ99U¿x!l)¼üÊÏK,šÑ`m—ÆF€§A›R¾b96~Çàø}[Àv|¼‚i°·•2›+®@Ì3jŒšÅÙŽ¥ÖQïr™:ÄÛ Žõ8Ó@ïK¦:¥v-à—?žâ)ã:{·9W§IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/ATBC32.png0000664000175000017500000000540213657750470017654 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíkŽ;„³ì,'ËÉ®E££HޝÊÝðãŽ4w¢Ã±»íúŒoßÖHìÇ?ÿýõëó“ÎÁŸ?¿ûü¤¹/—þþ¤Iz駸ÝÁèÔd4î÷ïÿÿÃÓ‘ÏÏó”þ.ú¹ÿüáçi¤9¨}±Ï瘌.¸§ƒe üù¤obiÝÏ ÕÁÓ1¯£î)>­vÐí˜wD½†GÌûlžKŽIÿ®|çøŒÀççéàùÿW®­)oû ×e“ÇLqtå÷*è25e]þrxõ U°Â É»~y™$ýhY%¿—IàÐZiµÏscg‹„×I´Ô/“þÒæ?KÖG@c‘rX²ž$H,B4¼¶Æ"di<—:é_¦£ß¸MPÒîà¹ÐASôŒzÌAi„4É?KVñP†¡VE­œšÜa4‹HŠ:¼jD¥¾•‹ÓÖzšßaò¾¬ÑR_‚%ØÝ-:X²žHñ6Ǭ{µÄ"ç.£¬­M3cè³Øzx®g4ð¤Ýöõª«êI‹MÐj2 Mš`*ñ1ÉßÎ$Ý7àFua¹£VÇ4ކ/ÌÑ‘+s-õ%G³€*õ½?á°d•ø^H*ç7—¶Dé ­.\[{Šô‡ïÉ4ŽIg-’ÂŽRazáÎJ~ šÒðd•üÙ(@ž¬‡èQT€M-*…¼üð<{±§ü-¶:T>rÒ3˜©2GQq‘²[r$Ë"åÏdôäuZæÞ­ë]»Ø8?x<é> WkkÕËÏJ¯ô9ëiÿ˜ƒ(ɯAR˜I¢7¢çŒî ílþˆ79.ùµ+RmyÅ^É_–ð•üRɸÔoHŽz¹—¾ DûBîutl§‰²H9,YO\5Ç–AÖ^Ë$4ACím¥c“qéï=í§Û1ÚÅATò{eVž²â@û}:âUÔV&I;uÈ*hÓËSŽÚ^Mê{sÙi•4í²sÍÂM³õ]#¤€Í¢ÀÚkYD{9ÚßfÚ°Ä㤻ƒt"!ªbÚFÒ*ù£#Ø®¨Ã$íT76Åô/ ý2ó©O§¿Ã@/·ÖÖØ™dÜi>+ýÛŸ5Ñ@|Í!:m‚>C £&Ò‡c#õi´ªZÙµ,²ÆöLÒ¾$ãi¯ˆÒ^²¥¿¦L{Ñ›þª<}²}º} }Ê}Ò•6Öÿ‡%ëHÒ³­Ô¿®Ç2ÈÚ2Šó­KЖҠ-FB_Î…¶ }I!ú¢Lôe­è ƒÑ—V£/N'=‹Y—÷£/xÔßô‹µµ§ÂMÁlÚ’ã´EÛ«ÊާᩪqÀx·µ¶x ªyŘƒãí?è¨x[Ðx¿PÙYL”EàM|ÐR¿,–‡’úô]xµ‚/?«çÖÖžÆ&4Ei[³Ò6·¥oLÛ`™¾E5}“oú6é´æµ;ûF¶±ˆõ%ÑxW[ÿÊF4ú,ŸSO#õ¥NÙ”ÓÁRõ³½zpmmÚ>ˇ•MÚ ÉÊ&Òïáa]´ô‡GÚ£§ýmõ²{$Õ~F­’?›û~ŽœÙÑ,“hÂ6,J¢IÚÉ\aG%{ÂKöJh[ÊP[ËwެƒpAKý2³_¬<¨ˆ²k`iêÚk™äü©1J›XëÇH7ŽÊăõŽ¿&.`w·¢Òß{Ù¬Mò—Ó]÷Í#÷Hz³!¤·Z“aá©ö½7 “ÖŸÑ,°l Ç]wË+鯓ú´B•ÖÁëX„ÎAú)ÖÄÅ Ôµ×ÙÉ›Œ½V6)¿»…’þ0xê’þa&±êÁvxŠžQ·Eœ¢sô”ßýyÞxIô’Yxн’ß;Åi%?~(W=Ë"Ë";ÅE üÚÚãLËi/Ú©©+›”ÁJúÃá©Zú§áÉ+ýÛàÉ{-%{]¯¬y…—I`Ðd•ü^&íáÞ©EagùN6~Ræ *>Òæà²È²È”ìZY[STÆ(åŽHE‰µü)ÀS¶œd/úÀÔ ê´ßJ?c^=è…§°ìÑÒxQl;D×®I[Û«ôö)÷ “¤–MÊ"OVG­Ò¿lê£ñ’¶š˜è[pm'­å·ßª˜¤š¢T†ÞðC´-Lê{Ú²XURÖC -õé[.Ó¬½ÎèßF­gb{½-T?÷2Šóö¿yîe“ö²¨¨¸I¹cY6i»*ïíû^þLf¯çµ…IJIøiÁ­ l}ËÃSœ-ŒmÉp·¡hŸ/4Á¤~¶Ì´‡ÓˆŽvñXZ[{£HÒüî–æØØ}i”ôoß9®'/›œ¿oÁ¨Ò.‡'k«Âvhò:‡&ë2¢]*+ƒ&oÁ¯h~‰»J@6%ÈŠá)–¤>ŠEh§Ë#LU K^õ³Jyíµp¤…'è×»ò+ñhé<µ9FKw¨Ü÷6xвIØAé¡ÎpÂZËõ¡ —1ð6Fi{Y²Rß‹ôËýÂM³õ]#Æ“Ž~—IÖ^oÒËA{ÄAsÝB³—ý¢G® ž¢G¿^h*SÔg’2ª›âë^’Ç,3;å—þ4bá:¹µ¶ÆÆ&×%ÄÐ8LxD»£”`Ò_sˆN†°J~&ɾ´÷½ÐÔîàõ—m–¬â`lk»îZÊÚ;£Ð;L›Owm`vº•þe½¯¹*/ Îñdí!§K׈Ž4]•Ú”¡k“®hÓÖ®¯šÒ^w†6ù”.}×ëø*âµµäIÄóቾœ }AM×—òJþ±¢LÖ)+keu”®0˜u$Ç éºâtÙ—úe¯)1I[¤Ó{09Vætdm­Éèû3Ñw¸‚Ó&ýÑð”IÚÖ ^Æð:Þ^ x¼ý‡U95PñæŒUSβH[çÓö6H(©?Ö…w¼—Wâ53Ó¦ž¦ÜÚÚZ³ô/s¶¹­$ýéÚÓ7X¦mQeM?–ŸÒ¶I§m4ïÍe·:›Zí{¡)ü’H=cQq‘ô³'Iý,‹À<¢áØö®»š£ç﵈=|A>¿±5§}Ydíõ@/ýiG–€ ŠMÊ"OÖp„w(—ü4ðä•aã÷«­q’ò‹ìÑnúºŠ·ž‚–Gg’ó%ýgÅO«£î—D‹çfY¤-Ù*Àlj­Ž¶Á’$í%æ°²H{Ž»Æ"å9KkkìLBž éXU-ýßç ýkôx²:n^au({%*¬¨­’?Ãs¯£Öû1Õya)ì ÷Œ¦íöJI·AÚA˜ô?¥~ÔÁrq!¨µàX‰Ä meûÖû žÀ3Ò÷TyêIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SCBC16.png0000664000175000017500000000212113657750470017652 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÜIDATxÚí]rÛ0 „sì'ÇÉ­ÒédøPÌ Kɸ´¾}¨'µ-Á$îòøø¬Á÷÷ß~v}_â÷Ò÷oðê÷ßßÀÏÏÿ¿_fàðìðñ¹ÌÐñýå¾8n8nðõõïküãïø¹ñ¾jéåŽÿ¯mÚwñ1O±} ð0 PN\ËÇVÛA¿ŠvmsHX•i×&³”–°.30ëREù³.,ó]ÕµJ‹Ä²ÜÕ³®-K«{ÀÎÀèv#" ðT `ÿì$@¤a6†eôʶŲ󱌎n£UJÅe˳¾ü´« DŸT¢©]WGƒ”on{¨2-R.–Vk¯úä6 ‚&3±”ñǶ€‡.;  ¶ŸØh’ŒVÙù^¤üW×K¶ÉP“íÙ²ájj–жûd4Ð> móÉlJ¤}†a•а)0Ç‘Ãnh»újÃb쨿wgù·û¤¡ö-ÈCòöqÐn$0¸í :fvkÀvÎzv†µ}¦ut¥Ýõq”ßvO¶â´}œ­±Ýè8»^lw¬ÍfÅÀ\À¶ÌÇŒ$™˜²ã‰Û[4²u¾¸íd´+fR]_>c ›õ¹å]®(ÿlö¨åS&1¾ÙQ}åsö#†­¡ÊGíÇdØ &¦Q« -OÙ/ψj[VÅVÔö“òóÆ*KÀÕ³îe´Lϸºo¦<ƒÙìçÛ ®m’ºc)¾½¡h½#Çsë”_ec{ û2 oSec{b0ª ½} ð0 PnÝô›ý®•wuv2½¬FÄl‘ŠmËÙ…g×Sʨ¿Úµ»¶]4]Õ"ªkËTÝ«?Ð~9ÖÖ0ûÝr0 Ä69Ò+»:%¶ÚDQÅÛi“Ú›Õæ“ª+Ubˆ2¶3{¥I¶3ììðýö³Mw™µ]9»óuÇ´˜]G$Ð(fqP埱M^l7ÖnË4++Û¸¬ÒɶõJlZ0[Q¢i;Ú–À^5Ð> mˬªðBýÜYì†6û*³4ËžÚjʯ²+Ó‚<$ƒT°fè‹ïÛœ½¶CŸý>›9ê¬ í«ý:É6Ñtw­®½åÔz‡XRÚnFᘪCˆ$ÀÓ%€½¡Ç寴ßl_.³ìœÉÝcª åòÂ)³GdzB*åO½"¤*›r›Ï©ôw³*—S|ÛEÃcήÛ F“À!…¼ý«ºÊ>1l&žÚ»È¶Â‹ª:Y^¿SåU¸zøÊ¦ÂKÖ•eË1Å£ø êàÝñÕ½Fç×IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/GA16.png0000664000175000017500000000315213657750470017434 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>IDATxÚí]Áq$1tÞ›†SØ<öå(œ‹ýØê¨fôìYzL¹ì1ƒh¡|¼K»Ý>?o7{my¿}ÝïÇ÷÷ãñ¼>Ó(^&ØŠoùìîç'3ÆÏ§Â/„¾‰¿&õa¶cé ^Õ‹ŒÈ¿Úû)µ?oz^×.v®kŸIÁö›˜¿R‚WU¯¯c‰£{(UÛÇÖÁL?”=Û{`{gÀ¶™E?ú5G‚nÊÍ×À¨Žù½ß[ ¡‰AM˜ÓÞº !/ ¿3³­Ã(û&ƒ|°3´B!²¥äuAðÁl¸_Eúp€Àš ñvìÏ”¡ù®„G)Œf¤57æ…!€U#Ò{/¾˜ñÓQ˜÷Âiúya`ÝÎø‹h_¢9m§„?Iʶ¯VQ<À+v”þÈÙI8ä¡ 0åi—x[^€…A«m—¡»ÒZg‡äʵ |×™Dœ«º|âÃ?ô×"£NÞG^a à‡/¾`z0ú@`¹™ðkEqg ²=üKPbìÈù Ç‡½Ô·¢åÂxè壋P³ÖØZ½yÁ¤Ííýõ¹mùï>z%yZk³ó²ý<ÑÎÎâƒ>´Z„¼Ðâô—~Œú/a»XÈÁ f?Ô#rk“ŽÜ5 ðG½ðÃÎoÅ=r8«`añÍÄ?cNô L~ýªpÿ±…3¨£àñ£Ž\Hã‘ÝÖ¶D¯ÂúŸãYöÚbÃÖ”Ö)d'Ï*¾ØèÎK;Ëß2§ùƒ‘¤?¶] Q÷•,@ IÐÏ#k^O°LÕ2ãÚ™N|TÁ2´d^ÂIŒºÅÓ„íðvÐna›6ñ6U°1ß EXûµƒ/²p“,À&)ŽQ/6æåÌÑ_˜¹'8†\èøç´Ë£ZÌjT¼ø¨~ˆœ  cˆ (Ê c}Jw’d BøLú-Fy#‘Œ§ÎãKYЊ¢Gú¨ƒÙ1”¥ (°ÈÚ‡H¿ÑmÎAa+"ÖëÛ4))â$œö´#Y¢•,µLœL'HäO–˜ŽõÉRDeI±h#Ãଂ}¢,ñY{{ªwè´$·Gƒ2&ýBïÝÚ ‘ÈJ¯ŠÍÈÊëˆ ÉJ( ŠFÉÊdÉ ƒÉJ¡ñóÕ¿•U*wgÕîŸ@”øËécèü¥ê‘‡Oÿ~Ñ«\Ī¥ì›o8>d(Ȥç£Zö7añ<~Xï,K8²^9 €Fê‡"”Î/‚/ ÆvتGsSÑÎØZfóË}Eõ í3Ñ+F+ÉJl¾Gò¥ ˜AT0:ÛZÅøÃeõ}ûäù«T‹ý(Â:ñ,I»tÝ2ü…¬M¼âj/«‡fàßÖWú8„œ¤“å˜\kRây–ƒFµ›üŠïü·F—‰ë”¥ˆZs@Ї{¾k‡Û†·;h+¬†“…X>¾Lf¥"ö²ód&ʇ`&^¤E¦az[(uPØ¿.²XŒ]ÚÙˆ~l¤å`>ƒ¶'³&3ÏÄón\¶¸ä>…ßG^Åÿk`'“1׌:ûºBûê8žR„Ô¾jÉ¥–±0sÉhŒmÏêàuS–’âG²ìH£ m³ÍšÞP}.úÏÿþ9­“4ž(£Ú'(/¹wF@Ê€_Ò ½¨_‹Hd|9ø0Öäi6ÅÐEv.É74*X j™qå `ã –- ²%Sæ$Änñ´¿‹¼†ýÐftÓÆoS÷‹ï¨7æ²P„,ø" 7‰l—)" cU6ÊÅGâÃÙñÏ%¼NFX€_@†Žêe䞎Ô0âP”›R@2ЪPúà‘L@c6)dÁu¤ôH1!t”‹fðé×_@Zå¾øÓ U=*l4AC’"NÂñgKÚ”ñKt†‰d‚Ô2A2]ÛÓe “‚QYR¬?”ŒºJ|æctũތlOn÷¢%?`ïÕ~üMvÚÑLï*IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SC.png0000664000175000017500000000410513657750470017302 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÐIDATxÚíKr9 DçÞº†¯ {håSø.šÅDoèA$XU’­—‡Õ¶ M²È|üáŸz3}|üúõññýmØ×ן?__ßßãþ÷è¿øüüýûóóïŸGÿ¾¬¤¢R?//Ù×^%õªÒ×ß³Ÿ—WmÀúçúyyU¿ðzðú¹úyy€¯] 0ú¼-À¨„ÚŒº‘lw¢þÿøHÑÖͼÝPˆB° lòÿì²I[`QŠ=Úõ.“´AÓ]&)ðªåoƒ¦»LR`ö­cÕvÆaénãë߆E€%„Ö:·T52DDŽÚŽMƪr-¡¬µ[†Øe’ÇKx-)eíÛ¡i}`–EÚ˜ä®å ̆IªšVA!s©åˆñ[Ð1³YÿÈ,´•àjùÇ–²Ö?b’ˆúÊ϶¥lÉ>höe!êñ̲È“<Å"cÞm³ã°d;ôÙïYÀ¥ „`Ó‘cí¨Ç6›­L½í :ÑlÛrÃn`ã·>(kí#mg‘håi¼ê‹¬Uþúw6vle›þ1û2³ˆ]`°BÁ&÷\Í:’D›ÍÚS5 Wå,²Ó5°¶ItåRÚœóî/V_Æ_Å$ív,ÛŒqröe²aXäí!„Ð!s4«Pl2f ”A-³úÑ™õì¤yôÇšBdPm6³ÈúR¨§õs»ÙþñªU/IÔýØÀÒøˆaË" ê!„ž{ǘ$kùwÙĦdÕ‚ÎX€Q ¶ï‚[-v Ôø–¨ãÚàZ¥¶3 v,Ò¾Û-ê²B®¬õWlbc«"c»Ý®I´¯8)ËŸe’ñ»àlJð˜6hóÛ"„BÏ yöÛÌfŒØÛÛГ=ðlwLÃfd—IÚ¡){sYùZÝîj§Ý[;¾^ŒBèpëL ö×ÚÛ6Ͳ‰íDæØ^~uBµÉ±ª·ßž9ê²9wÏ4E%ÜvÝstq¶mÖ¡cX„…„2ëé˜m™D™ U–ÿªm T1É㇠®~Óv&ÉZýµäƺŸ«w¿µO¬/I–EÆS´r“-B™[}{6±»Ó>ËZ6O]ùäùnÕª4ëˆÕÀesתñۥÌŠªL.cku /íYdœU`„‚M~8›ŒU•2žåL²›PO1IY Êò;íÝdŽQJšr_x·¤Ú6>FLb³¡1{D|<`{YBèðþÏ>À¶m)wµ-›´˜âƒ§¬åWN»ÜIï2I»ÓVV?:ÓÞÞíDª@Ú³,2Öa¯ŒrÄÚoº…EB6yæãl’]޳üÙ-RåîZþ6&9&@uÏV–IÚ­¾º_«-@µîîÛ>Æ$cR,¹„BÏvÀölR`ÖúÁ“rÔÇ3Iy€*ë¸ “¨eˆèóò³Ì1Î$j§Ñîÿ+·úª±I—‹ „ýÝ›x׺—Á«Ö¿<À»•ÃÓ]Ë߯$Q Œ¨,½ “¬5Ë$mT·Ëã‡ó‹Œ‡EBëÿfF—qÚx×ú—ïé·ƒ&XÖú—5 嘳Lò8›¨,ê¾­ö…œlɶ3Én£c‘ˆêvaª-Pu¾!„@“Àl<Öú)ÚÓ•MƘ¤M²7Ûf«¼-±^ö*Þò6»~ãhù!b’±—)[²íÇ5Ô’Ø,eÉÛ^­;¾€ƒB°Éalb»,a—î#²ô6­É'îž}/küÙ\Úí+Në/Š–!²0Õö¶gvûËA”JYXÐn¦—±³íQ‚ÛA¡Cáɦã†Mî2Éx`‘õÏ~¡öŸb’2©cãS%»U^Mk W™¤|÷[ôÍ# mo‹ÑV¨õ Øl‘‚EBèÍÅŽMƳ±þ‘P³þc^uÐåU™åà•MÆì×]&)·ü»Z˜Jœ¢0´-¡Š:?¢àiÌê¯Ýݱ ˜!„P­k_؉Æ^»­ñ¶îÅv÷›òÑkÛdahTÕmE§JpÜ×ÕN{JÅ$ö© B¡C•ƒÇM‚›ØúÁìÜôX`ª-)&i‡&;&±oƒÇ½Å¶ý B!ôCtÌü஫)3 wç¨Ëo‹RÉ*ìfùmÖI”²%Øh´MÏîBudȦ{±=ƶÛF%„B× ­=›Ø”TäjÚL„ÚÓ?¾—?{Ân¶ßæ äIDATxÚí[n; D³oo#[ð>ü•Ud/ÎG0 €àC|§«~Œ{3vsº[R‘’~ü @ôññóçÇÇ÷÷ë'\`__¿}ýû èçç¯_ŸŸß߯Ÿcwêï¥ÿ@{įßK¿³¯?xÞ¡óBR€ÖßOðõ®wþ{Y€Òç¤/ }.-@ë…­ÝŒõï¹û7k`Ö@ÓúK­µIÒHïf´wÔúÿÓL{Wšþ.EQcëÃ&šõcÉYÃàç-›”Á“ÕòKãü÷t6±Z~IÊ¡Ir^&I‡&/kHŸ+ƒ&kwáe’ë­VßË$iÐTÅ"i¸ö ÇY¤ºÃ‡ °DQ[6°v69 ©Æ&mJŽX³þmðtZÿós±dý56‘pµÌò{™¤œM¢–ßšø è}¹Û¡)jù­_$ µßвHÍy­¾öj¤g˜²O‡¦Ç±l€„$ŠÚEíVš$‡aÉúK.›<ל5 ›¼‹2Iù#öH‰œ4xòþ¢ÆÒÿ¿n¥Vçe’p£±º/“”eš4çMà”³I”EÚ³^Ö¸¶Ïr‘E(ŠêF`‹Éαغœ£Üa[ó%mð¤Y~Éyk¥Ri.ÅZ¸ÓÆ&Þ?(=êñÀ¼LR–qÒîX{"ÇË"^&)+ÓÓ¶>ú¶Ý»§I¼,ÒKYw˜,²&0Š¢œ­w¼5Ÿó|V6L3éN[òuÚO­Øìž¤oMG¤­'‰N›i7šqcªYþ(4•ToI”·µ·[þöÀ¼–ÿ´þ0f,³´–`wìÝ¡‡¢¨wén4hŸ‹H„·úëXd ƒ0aCQÛÙdì¬XØMÛ×l{{p€×òk‰œ¶š†ñÃ+àÿXs€ ì4^ZlCØcn­þXæ}]m¥(ª™9Ú[õšÃma¶>ê±–£lRvDõšC¾áI‡?h^ªÝò2‰vð#÷Îêmóle’q§½†EÖ¤à]ó!µ­ŸÖv‰•MÆòÈZ©”äj`2P’±-+K9™¨•IÊ0S«,’ü`z ·iˆ6hÒ,ÿ-4]\魯—IÒZµh4“VÆrË"å`}WàŽ ¤‹!‹PÔ„³þ°Œb­Q \{ÄåLrZ~k€Úr2Ëï]Z.9p6)c’[Ë/5š²5Ã:MÙKÆÓ²V«Ë$å–?ºsYz·ãe­1¤½‹\ N=Uñ’²Ü;Iª+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/ATbc0.png0000664000175000017500000000042113657750470017663 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>œIDATHÇí–Q€ C96Çá8Ü cHcR3¡3è>؇ýpdoÝ‚¦´#H”r>[ƒ†¬µƒAÃ9ב. ãdxÀð#þÐ;š·€Óus~Nd(ï •ç­{KDG£B#ÀQc¨3 è½ppÙϬν#¶”wpÁTPyÄ ºPSUÝŽ©»ÉÀ˜unù—@ßïÒ¿âár³`¥4ÛªIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SC32.png0000664000175000017500000000367613657750470017463 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk>[IDATxÚíÁq¥@ D·Óp Î㟅sñ¸L­ªU~·ÿw¶\¬`ÐC#¤ËJôùùõõù9`òñøý}<äæÿþþßòýýóóýÿáü♡-´18vtœß1¼ÇÏùvÚ Gë¿ëvÚ€;:v½nG[h†ÝÕ ÇídÃñÌȆãm“ß<è÷åO(òítéG©eY&¯k‘×±ë y‘MFˆ°ÈRa.2ìí2Íp}Ȱ·Ë\ÃùŒ2ºZrÌÛ&Â{ú¢´e̳,«è¡%‘žzÐ)H+y v=³t„ᦠs=5ëù!БÀÞºÓœ¶È̵‹>B“MÌõüE1mY–õÆBA'ùc9y¡“ˆùŒWô—*QŸ•¶"}%¿rùœ4ŸÿY~OqN[Bæ:G[Bûó@Žyϱ5 û/ËzEò’?­Öˆpse®ø|–„Ùbì‡\Ú 7I`oÝ]:x%´£|òÁG´µûñ¿Mîr¥­¦;;ŸzrÚj5iÚ²,ëNäµúŸhXò`‰ÌŸÒi´µºýÕ$9ø‚ü™7*»@édòÉ…˜Kâ.óÛFÈØùÔkb®÷ ­1β,ëu™«ÉØê y ]rþè‰ùñyÀ%¨ðBDçß´Ì)§­uB¡øÞº½5ö#d4¹â Ö„yòçÔmÙEX–u?Åp2såèS!¯¦1@a6y\`=cÉšêŠ>ù‚ž|qï×xÞ·ŠVÚ’¬ Æ{ÚR˲¬MBäÕä£_È|i½’øBŸœ¹äß©6ñð5nšÕº-˲î @c‡Òô~œŽIF­ ÎÂ¥®<™»5¡ª)ÎUa. ìå_jÒb™•èmëL–Ç«-˲è4l~¬ŒÎ@¢oN^¯çÂ\”Ý„®·pðÇ–q#2ØvsöâHËrÄr$è†iËA5˲N<ǃNc†Š5™¯T"_Î\O%ÕWÂ\9ô¬ç*¼ÁêߦJ^mÖɕӖ¼Ð°+'X–u×ÐÓ;‘Wë7æcu#óJ™´°Ke‘á§ÌçDªD¢"hú´žE½â=-Œe"˜£­¦vöY–eò2y=á:…ˆÜûpcZßÁ¼ŽI*eXcY4šWÞ=?òRvÞS³uY/»ð ÆhË,fYæ¯×1L^þ9tj%/²á<ä D¾JÃC ìåÃ(lñ˜C°ÏQn™!‡RsÚ>FÖÆJÆc‰ ¦-Ë2y]ÅðîŽää•„è“/ôÑÌWЇÌ\ÆѷŠ9sÉMBÃheuwÎ ™K(D[Îê²,ëÞ7F^4Ã9 ‘È嘋fUbob.nŠÛi†s¶’3Z]«ü& zÐmÓTÞ´eYÖÕïÚÛ¬J:>Wƒ$×§â‹È·‹>dæBm…„†â41×êüsæ"Sf=ô$¯üNžÄnÚ²,ËäUà u¼É -ã§öÉ€‘FÎ\O‘ªY…¾X”Øò10Weâi+RfÿÈæQn—eYÆ ‘‹†ž„$TÌø©“—¹$ä•WQȇ\®3/å@›ëQÇ@Sd.áÔËÇ@’V…‹BÌË Ý”ihê$aY–Éë~¡§ÖÒXqšL®E v³êÉQŸøá $¾·þY 7åø'iLŒhD2õ"ø¡’¥ä@z’0*5V Ô´eYÖýøëÕÉ õ?nº~ùÀ Ýâ9æ"%TÉ_s*ÃNƒ=ÔÑ'g.Újj<öˆº’+—õZð˜¶,Ë’úïVò’›l è ò¶-ó­½%W—‡Xº©Ûä.sÑÐGÞLš*iEÂPB>!ô¬7Xkr•™Ë²¬W°˜t|>·¦Ù x¤ÕTä‰ã!’—6Q¸IÒí%s7õµF¦ákœ÷a$W„EÌ5V Ô²,Ë ž*'/¡{h%¯œG?äQnŠÌ%½Væ»Æ—˜Õ÷±eY–u¯÷㊢5a®ûcÚ÷{¨PTkÔ§)ÎU‰ú  HžÏ̯îÀºù@ªdåÚó,˺®žM­¹·•̲Û@?ò\Ÿ<»©5öӔϕ÷ð^·HŽrö*`Ûz3Wk&ê奖e™¼N¸ yùÆœ¼$þ¥I¾i«ûfd¯uî»Åmó(uNX  lSU¸ë1ܹD„k8´æ šeYW$¯¼M\y!4Æ@âϨFyk¹Îx(O™ï£rðäŠ÷Äó“8Í<Î%ÿ–o¬Þ/yúܘ¶ÞÕ¼eYw¸_+äÕéi]àlêÅWiKSg’íóË[ðH¼õîùÑjÒÅ$uè‘÷z6™"OÓ–i˲L^âG&jš&$¯5#G>„>Ñí l(Ÿžl¾ÒüPè­úÛ=V '® ¡gŒ¶ä”IÀ›½¬ÚgY–Éë´Éœ¼„c®œ¼hæúÈÃl•†Ó’oúT>c¸§ázÐÀ’aïÜœo¥-òMeÚ²ªúþ‘UY¿ñŠIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/GA.png0000664000175000017500000000635113657750470017271 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> tIDATxÚíÑ9 D·Óp ÎÃ_ŽÂ¹ì}ô`Y¤ª×ÒÏÀw;3œnµT¤Èoß¾úøþýÇïß?>¢×ã†ýüùû÷ÏŸ¿~ýùóëׯŸÿý˜¡öF†®öùEÿ~Õÿ¿ƒŸŸÓþÙ•©¾Ê®tôÑC jø¼¥ÙC€¾Fï§oùç>_Ÿ¬~}~ŸÌÀèʰGø¼ÅÏ|αÌÀìïé[}ÐóXÙϧŸÞèï3£÷•Ÿfv³ï^‘²¸ÈÞ ZçÊ 5{‹Øÿ~Oyd˽|ÜqÇ0£Ø² ½S|Y6A¥¦ÀAÑ1>Τ?Ê"2xzîèÜZƒ'Vò³lÒ†¦-&)C*ù3‰JòË TK}šè+ˆ Z”EÚ°ÄJýê¶ŸbVêwYD¾Ó<ð*‹S7褃¥;î˜~J§`]ÀveüÊ l’ \ÙÊvŒL9íjé/7 u¦³–¡)SÔ,›D·ݳaEÍ*å,BEË®lýBõ {ÅËÎóèÒ³†¡L_AVتX$eTŸU8mXRùh¦â)°ÄÎMt¹Oˆn… ,u$Z®ltâ…¤;\:kL†%Æ;¨ô_‡§h3G·:–eÚ²únl²’Ÿ¥<Ù\« QÖPÚ7^–IÚs±›'£¢¿5É^aùÂÍJ~4=OîN«²ˆŒI¢…¹ª Ë4§’ú‹¬'Y°¾•õüj–Eì}ÖW!ßqz®­ÇG¢°Äó©÷ú£Ò}Á~*ëHa³lÒ†§+UÒ¿-X«‚´ Mm':z%PCÇ·$ôJgšÔŠ…'Ù!,”Eª—õ^õ€Ë4¡¾˜,p“ý q©_‹e×ËË w¸Hþ×0Ê1¯¾m)×#±-çݺcqìK Me’ÃS5xx_ü^ðëœèvaû@ÎkBaìC´L|]8Ö> Ý{ÇÔŒ]Rj MZJU7ÞqÇ)F9fÐñQ»$Ûjšr•MÚ½m½íSåídØyü¸FÕðuhR ×ñ#Ch÷ÉõCW¯9¶f{ðõæ?:‰zP>®€ÍñÝîzi׈ïŽ/Ë$6§¾¢§y­”†m1’j9t+l—syMAû’B¶E™¦<­ëŸˤþñÒjöÅéìËûEJÚ¦@¢šEÆ`) ;/ÒÉ®‡¯a¹c[úË’]é¼ä¸}ÑöjÙûlïnÃÓkض^P{ûÇšWضÿˆ¨Tô4¡) ÝH“l¶kâ󜋶m^ÓHÊ®W¶þÙ43CjXêzÇ_Ží[³Ú6·í¶>ÖñJÕzlg±iQmÛä›=q³Þ&ݾÑ|Uò«X„ÆNôÊk‹™ší8c%vÕR_ašrÃ+l~Æ"K*‰oÓ0å*å¿ì :žÝ¡’þãU7?& ì¬GžX–Y+â‰J™·+:4¥Š—´é.º%Ñ¿«Ê›†&uBÏXnW7´UMø¡9Ý+“]!ú©FsõѰÃ84E²,‚~1üƒ²SþèûÖª+£>ú;9,±² ý!c°„Nâã,rÏ…üõa ÃÆCªuÑÖ@Ö…»Þ§ •}ÑUÉße“¶Õz¬ÕðD;ë#£³nŸwÚÀ,5JýJˆ:Ï«ÕòÚT§60ƒ%šêÔ,’©ŸòÓÍþÒ.4µ¹8“úÙ’»çºR?z• áîI›±.è/»}HÜÇ?‘é‘Il ¹úIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/CA16.png0000664000175000017500000000244313657750470017432 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>ÀIDATxÚíËuì@D÷¤á&Y9 çâ·Ð†sê©Ò^xÆBê}»í¯¯±½^ß߯×ö³Õåçóûûùl?[Ý¿ß??ï÷ö³ðùþþ¢M½}s© ¶?¶Of/‡Žýï/9ÞzÔ^Ô~Ç~ºäxk4{Q¼4Þ–ývÐÇörvX¡›íSûûÇø)Þ~zбi:ùš©¾KßýÁYÎÆ$^Ž9XšN¬ïýß,9>ØC©W{4… \–ð—]ö1NÙ…2Í1ràdð³bŸ ["¹‘‘Cy!•.1CŸ¼–/7Ö ÂŽ#Ãć½ƒ”é³Gdó²öü¹¡­%¾Œàë”%¾\¹•%¾¼ØR!ssaƒ'pö¦-í5nÜq2æí…žÇ—6¢•Ñ&ÀÃ9:JÖØØ¹Í.฼Û8e£US˜düÕ2Ñ}Ó.¹„­Ÿ}ò*ÙÊúèÃ`/¡%ZŸ¢©[׉¦Sy9]È»“ˆU-:-Ø´ ¶©â¹@Šˆ/b¹I °5IŠbU ³&mÊ#ã¼üÕÀÞN»º‰Ç³Ø}!þ‰Ó1šPâ)7¸P& Mä+L«'’ Rç|ZFôINÄQÝšé ‹å ¡Ø÷­)°M—ìüU쨼ÐJ\Z&(¦‹÷PIù`¤· sèe%¢>úÅ2èi*–>ã“5•zÇoKàøºÀØØ½©ñàdÇëÈ’¡$;4JvL–ø`0ÁQh²ÃßdÇÝ!52Â*„‚ò# }Â’ÞpÖØu•¬'äâǦÂ7‰lÁg7”|†sϯÞ10}ô‰+_K¹ä>ú¬«fÿa¦j¥Q¦=~ï&ÀS¬mÙÀT­òz_á*I±²sGiaý(YcO°gŒmAÂ~ JÎò‰(@É}‰Ù%'«+b[ ú¤©È,o+NU B ¶G“K6èØûÇ¥žö³ê“aÏÇF[ÉGÎ0!MC?Y]c£‚•ÀPÓ¤Š`PZ °?å'Tû8Pˆ|Ç(­/ý÷j%Ž‘âu‹iŒí+=iÏÍØƒ-þÉZ+µðÚR\c‘o‹Áž¥qŽ « CŠh­´5kòØØÕt<Ä ŒVö›KxÄV$±“™rEýH^. ÝDT-öéÁÿ?ü*Mç’9–5µxpb:Ɉ,dŽÝk #Û´•oSóSH­â‹Xn l2IQ&¢Êdcë¾U(÷ŸIÌS­/C–bÓØØEÈ«õl—Âäq:† Åoö”›%'ÉҪĉd‚Ô9tß”,Èx£)=r/îŽök]žê~잸#p)>Õ¥µ·h>y5qgr¡• ´LVL'+drJŠÉ“ñÅ¿ðÿŠbýÞ*/–>‹yC :£d­Ù?6}bÁªIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/CABC32.png0000664000175000017500000000525713657750470017643 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> :IDATxÚí]Ž»„³ì,g–“]M þ“¥vñá7ö—»ÕR}%þúÅø´øþþ÷¿ßøçÏÏ÷¼¶ üýÛöÁçs__?¯Ï<¯Ï¿{ÿžY t%Î÷Ÿ×Sàù¾$@{_x^‰çÿ{j§LàùÅÞ×÷ <Ÿ¦ne݌ֵWí©.ë%Ï¿kï·ZM·±ªÐ¾XëOÇV}ŽÁ`ÐúS`pH›f“ð˜+½oe“6xª²þÖ;¢ Œ:êSXà­?,¬/P{õ:›œ·Ôëç$óÐö0X',56i–]/ñBS»å— ©ÝLd-¿uíÎ-0+ì|ˆ¤§=Ü´+RÅ$iÒS¬ Õ>Ÿ¦õ—‹¬åti+PÚC0f>Êæ^h×oe¸¶‹×ƒa“§mY—%$6küÞ1öü÷qaVg=¶°͆k³üZ\y­²üm·¸JX94ES¡¼Ðt¶u·@iùÁ*ÐÚ-µMoY.ÌÊ"㤶:é Kd"À- Ya§¯“&××û-IÌžN¯õK6ÓLBw.—ÙVE™¤š¢¿š¼;±× )ºü ý°±§¹ –Êí™fù½ ?åéÐ^‘šBÛCãížàÝ,ÁCƒŒ2-dM4_ç ›²XgM˜4ÖJžpL2~룆u|‡NšÊ„VeA“5o°jgNZhTàØÓì¸KVK?¾ì uГH Üã®Çš®ë~` *™„Â(ãmòüBF‘®ÀØDeÖÀŽOTz±f„І²µ„î©Ýië¿Î$ÚÌ.è´ÓWà˜³†e’îÊÛñŽÚÚq¯,ÚÐ7F[!©Ý†Iýüv_c Эv ìÇ“)>†MÆYMš‹yÝä9¬£¾†IÆ©î5\¯äúÆ¿k¶NÂn>õbç5 rMRaécØäÁíÏ5‡‘Àçâe“µqàŽ‚=”éšc­`‹Zýµó¨a§‹2IÛñ~×{Ĥ6ØÃm`±¶E2„Ñ4…òym3{h{»Ðè±÷ãÝÓzáøÒ ðÅ+²–ÿºš‰í¦¶ LŸkÊ iV­”õÖ®—â¢Å§P2ƒð3¶pB×Ë_S`¶DµfùaŠ|×I¯š†&éèòCšÌ¥Éò(‹”=µÑš±šÐq«oe‘±£ÆµF.=ãC-þuvéµBð˜i3Ðmý½¾®¼6˜¶ù^c“±+i]ŽÌE¹“Žn6ð2IÚêWí# ¬²üÖã ÜB5'Ý}¬•[ ôË»sµÔ§Ûkõ«¡)-PûÜZ­XXüËÓ‡iñ Æå𤹒(›´Y~+“´÷¯ÚŠ’—MÂB­›M«,™Àê½íeLÒeùÃ5£ºKYÚf{MH¹P+“´ÍÕhV_êÿ²ÙnnÑŽ¼}¨£Åg0Œ渆MÆ'“Ör´¢–ßÊ$é‘«Ëò·AS·åOûÀa’1^«ßMÖ†qX²~NcïßksÒY)››!b0 sxÇìq6ñZ+›´ Óì–u½$ O]–¿ š¦fùáŽAÓÚJS•Õ×6º”e½YÈ,y­•EÊ`);ÔE;bî® ,1´þCÝÀZmØ*6)ÿ!^ë¯Áeð$ý!«/´Vt)8½Ù`I‡2u[}í š7XÀ4yíŽwùÁzŠTZ ¶ìÐÎ$Ñ¡ídïq€ãÇà[G’k¶À2¼@TÆë¶qGÇê1aÑL¤±bÞÑý#mð$ ³:k­°@ZX•å×xÍEëÓ•;³>¥kÕǽSÞóµÊ ©Ëòk‡Ó•QI/E©NzÊ­°ÔMV ?KÑkõáÏíz]cð–eöZ÷Glï·4K?Æ&VaÖåˆ5aÑL#7›hÓaÙ’ÔZ²Œå‡­™¸Ö6­V¬tu”EÆtV˜Ä$åçZYdL˜ÖF5Lm+b[Í"p–ŸÂ^ã×ßJØSô¤§Ñ;ø—'öXO‰²²IY›².CHŸkßž½²m©P^?­Û>æ³9[åmS³ü0Дµüéì7ë­õ Ï0’R¡Ö`Ik›V‘níøÐ©Õc‚1Ò­†F!ƒI¾Áº ˜Æ ±&ò¬=Ú¤¸4´I§Ì-ìhPµný×&Í­î¥jëøš0ëV¢vË¿– '9é¨ÀñÝc[…ºŸâñHÛ'¢­¬‘Ö[:n.´[¿îz¤6ç~È Œ­¶7Æ(çXêú³æÅ¬ •†4mëøÚ¼ wÒ¼šºŽÚ}/“HfÀ;»?žÐ]~(ZÍ$mKÕŽœµílë3 Ö¹8Ã* y0CŸµñ\AÆ·dÃèŒÓmN{]_?O–xm ;ÄY­»¬²üôƒU–žIÆ©îuKbp3 ãÝÌ55üPc®µ[ŒCXÁpà~ÝÔ|‡ ;ý;ùZËß>vÃ/CH·ŽIà—Âà­Wrm9öl‹p Ú0)×&Uhc1YäµÖ^0ü™nVFYŸ" “d Ÿ¦ ›è ›*ÍfØí×lxg’èS<¾éjmÛÚ5ÿ`·N¾ÆVIM‚ BF!£$ÙV(ÜQ0‡‘Àç{ Î5G ÁÊtͱV°ƒ·xühµk§ƒ=ÞÏ{¥ÖHôº“µ#&5¡×ø>²ýÖ_ú„(ëÒØdÜaG½oƒ'øÂ°¥®)^±Vþ¾€ | MÈzŸ¬Ð±2H^«¿VHªÊ>§N]ãóÈ Œ[›!ªšMƾPci¤›õ‡+ [`y­D5|‘oø2éšÓ]/4ïuÒpÙnÒ¬~t§¼ôŒ—I¬Ùni¡V½~z”Eh— BÔ²ÀkxàØ¦v˜¶ïÄ,Ô›õáµüVx*k½Ë’@³í—T9ê0Ýy¹6+0|'«,[ö[—À²îEbë-×pÚÇL+‹”/àdûGë-»’0,K ƒµ,0;1i6Þ_"Ykæ¹ÛÝDÇÞv&±º Éf×KÒB«­»À5hšb’44¬˜îE¼Vß›LV¾¿Dë½ë(ãÓgÚ•)‡%Z}ãÿø ÐmȮoï§IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SB.png0000664000175000017500000000056113657750470017303 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>üIDATHÇÝ–A Ä ósßà)W½çà’äGî! !-M«;ìBÑšž±uYÞÞbܶkÅ1„u ¡Ö¿å|9·#þWMƒÌ* 6¶u1 iP¦ €}GeK9ÏR@m”ö=%½ d`6¿'¶5õ춦Ýà î¯nŠ¢²*·Ó©ŠÁL!oÈ>ah £€ SŠ˜i?ÊplP¥XÖ&+rÞ®Ô)0+…¯Ç üÙQYùIDATxÚíAn; Dçæ¾‚wY{¯ä¹ÉdÕ@¤PTK"K3U#þù6Ó£–ê‰"õx¼›>>~üøøx>åûüüùóóóùüþþýûûûù¼þì³úúúõëëë_€×Ÿå>jÙÀàËx_Žø5þ½²€®¯×t‚¦™ë+úÿ—O10ú>zÂ˼–´?Çxý÷ëï/0®×DÆ °l¥É(ó6³ïËÌò¶e™Q’Öÿúj61›8@µ5вìY&){+ã/e’²³L²š²V¿ šf­þvXZ`ÙÒg±,K œà™5rðtIžä–¼vë?j ÊD ÎŒhy`Ìò3Ǽí‰f-? x;4¡í4 û~™Õ—c’ÙÀʈƲ™Ä²¬w‡§x¤@ƸžV­Ý²ðÔfù™»)ãZ–†(·SlzhßÅGVŸY~v¨l{ ,°ì-Ÿ.˜å/ÖžÀAG‰+Gy€f˲¬…'´•ܾ‚lƒ§¬åϺ rËß~¸ jä Ûl³üèI—¿Ç°H,?ÒfP‘å/0X;‹Ä±H;,e§'³‹eYÖáð4}|oõŽ)òË­ÿÝ€—SÚ½ÏÓ²c–çξ½è#ŽO²Ü˜²‡vhʲˆÌ¨ôrV_žEd¶<,˲š@60ùC.@dÕW%x–ÁS¶¾xžn§ÄÿcåÌWN§-XŽ%p²®ýœå/M9‹dŸ`{-{v,F—1¬2y‘ãYÄ bYÖ»3‰lÂúë/`ܰ”µY³LÒfX³ŽºÌòg™$ Miª;æ ÊŽÁcÞâc­¾ü-³ˆeYï.ù½™c¬¿\?™ìi¶B2çeFÿr»ü2y’ÙLÓ(4-³ú³õ#èvû€ãÝ¢+[}¶‚¸)»eY–ø´ÓÞJè6AM8ÛÏOËžDÏÖËå/²þm¸)WO-?«ÄaCaÛ¼ÉZ«eëO:ܦºÑTW9,!hZõ-ïCh«oY–u¨dØ$þbvåV›õog“¬ågF¶Ýò·3 ;È#Ó 8[|_þrDÇ‹Òm廳–û}%«YdyˆÕ}ÛÇìèБ½xÙ²,Ël²ÙÀ¢¶.ål’mÒÉØ¤üBehÛ•ÔÙ{êÚ/¯`–¿š¢å—aÖæ9>©¶K*fY¤ ÜïNSòý ·Y­Ór–,Ëze×â8·_ ÌØDÆò·Õ™ ëàdZ eëŠËµüef-“0Ë/Ã$£‡ÃŽ9tÌ ¥ãN–feX²,¯7­{ÀÌ4DËÏN…”Y~y6‰¾0æK¶†Ž²³Ëص›B¿¸œI²–¿I² ¾ŽqÒ°jOG†Eäó!ÇÀ’!ɲN±þf“Ul¿_6Q³tD“ŒZþ,›, 9ꈕŒA¶áÏ,#SP~É÷h{ªööÏÇœ(:Öê;ÀÙ·^¾þ1 Yª3‹X–:›0ÓÐhÖú—OÀÈú36YOÌògó%Ûà‰Yþ,“lï>:Új1I[—e9&±“v€f‘wa3ˆe™M^Mf­ÙR&à*Ë_O, 6&A2Iù1½Q&ig”öRòÑyÐVß,òöV_¾ÒÆ bY§2 šN˜³n³UYë_~¦4°2x-ÓˆLRö2dûnm‡&ö$õ!h*wAY¦CîÉÉ^½u\ºA¾˜Þ²¬Ó–BTÐWVÉ]Î&Ñú·ÃS t”MÚ‹X}I¹ÍBå¬ÛrÛ˜DV?ž‚+[˳¶]ò“})Ê¡IÖê˲ÈqV_&À¶éÁ²,³Fqåõ¬{alÒ~¡@–MÚ>âl`åO’åKâß—g“òšå?Ú ‰í8įå®hô Â2h½‚p;4­ê]´½{ž¬Õ—¯´¶,Ëj¶þdzI¹“že“¶@娄åEd®fÈ2 º˜¾IÚ ‰5+ŽOp4ž¨Ì– MÏ›w»$g¡iùØš½3qYžÅVß²,ëÅÙD.mÛ~ªc4@d«ÚeÙ¤ÝòRve!*Ó@ ò:[B¾|,f>¡'Çâ4“ êÿÑôJäL;ivŠíîĽ|ŸýAÛ¡i÷|i“`Y–%2!›Mflo¹>R™Ãf³×€”§#›,ûEÙûE²Æ4ûDoÃO¶·/+x™‹hóü.‹lë³pw̰",¹* ù[ÈåÛ^•í½X–eÂ&r³ÄÉÀcxb›èÓðt×°2G=mùÑ&z¶u.c’rh*‚ÇŒÁ—}‹Ù3»–ÀÛ?p•õßv"åÏ.þì,ÿòŒÓhwdVÑf¿FëIÚŠñQ·€moój)ß»‘¯ Có]ÜIƒ%ùÝ,YqâÆ²¬W‘üuG³E¨Y˜†¦Ù2ÞíE¨wý]Yïè? ‰h¿Êë±1 l»Íb]•ËÛ>ö¥.‡&Ö® š²,ÒÞ%pÚ›·ûz˲lý›$g,²þò»V«à©<ðQ6i»š%tÚà)Ë$åЄΠʰb’vhbù‘¶†ÙìŠÖl^¤¬kc™ŽYIJ¬EÖ_6Àc¬ÿq™uù±)ŸaÝâm/€FLÒM¬ž¤šXíR;4e™D†EØà/»Š&{?S;4Ýe‘²ÌR\³{3¶]–e4òÖÿ˜ü‰|¢Ùäí̶Òa’rhÊv¬E]¤¶5­ËZþ,4-ŸGÑæytÐ(@yÙhö„%c‘öéˆa§'pË2› :êãÒò÷¹{B~ùã¸'Ù^OÌúO·w‹bóál[„ÛOŒµ³ŠßG°4 +šB,RMw™¤ šâÒ1‹ìžmL- ¿|ßÑ ûÏIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/GA32.png0000664000175000017500000000571613657750470017442 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> kIDATxÚíÍ•Û0 „Ó÷¶‘¶=¥Šô’|Ñ{|€g G¶Éƒ»¶ Qüù8_¿^¥|}ýþýõµ~ÊM~ÿùóýýóó÷ïÏÏãóñ¡y›áÕ¼ÄäãrÿþUÞñãWô EÏ„ëcýñú.sc´ákõF(ÿ\¿UûãKÏë%:Ÿ×k ¯Ï„ü2|­êë¯ï22}ªêõg× †‘ë@íyýNdxý&Ѷ‘AŸ}b"‰¾Të¯Ä‚Tò÷üjD‰:ÔaNyÑr ò‚F¨ ¯€"JB®#Êi«ˆ|×1(‹Ãȇ B^4ìÍ2{9úÈ™«†>EÃèA`zârÚ¢1ü¢t«F ‡¥­ÖˆvRpÚÎTyÃÀ¼SnH^[MF³õ˜–¿Æž)'¯Šï,§"Þ§:Ô2™K0ˆaö"AÈk­ð|$B cD 49F=2Ÿ‘Z!d—µr“9s=ybj´2W>wâÒyµT_{‚;×·žw’±-ƒµ¢6aËYk'Ü4CÀû™m˜¹éi@lËH‚|ëàž™ц‘¹và#èƒgñâS=bR?ò§A˜‹~Óì^SA‡Ñ'¯‰Ö`‚ O¾;¶ÓV‘¹ÖA§‚/kÐÑ–dcY Iù½hËx§lÖ¶$Ö~¹ÎB‘òÕz¦€ €F¾uìE\žò"œ~;D^Ëõ¢5ÃcûÈnñð.+ûÜÃ; 8î ì5±¤Á^QïAŒ=}4Éã¤=`8¡è­[¼Ú ˜—7ë‹üú¿æ.Ó)ö²v¹Ç|N^c3n@9y  @ˆ[xë%ði!¯Mè3v|#šq}ðtÂÑG¾aôÐ÷½G{ˆþœ+\4æåÐúÑŸž¨Ñ T8¢ôHh ëÑ"™¯Ö.$¼H8=ŒòžÌµ^‰WD^‘ò5Ðzñõqk|Æ'‰MÑ1ð‰šÝ‰!ñ„¹òyI¨ïÍ¢Oq»¯hÒgú†‹’z^ÕmmÕ{Æ`¯#¨J†ƒ†›«ZcMù|%”%—¼[‰F`ɺ! œ¼„=¸å[¬,%}š%¯y)zëy%TŸ¢Ðºu3×fØVÕ¶ÆÕéNòÔÖdÓy‹Ibë´xÊM0HnæF@¿i s£E›|™j[˜w¤ˆ-Lƒøb›l›MR´‰¨5ÙÁ<Úä&¡ü[[7Cn±ýsŠ¥ÜbwëÆu>¤ oÕœÌîd’@•µÎÓor2²¹UEýܑŒ%a×9dÌs¼…{$îЬ¯èHlØõÇr§_¤—ÎúµËÌ_B¥Çp$Å|Çpìh­LáA+ÛѲþaºòá©ÜÙÆv`’Ebt3Š5Žzg~ð9ZYIbÝHŽzã“ðp;>+Fù,þ’ üVóæÐ+昂Bä32„Pª¡’™Q‚>y4úVTva`0<Ú°¦g þ¶šßîžm Çt–GF5qd¥å£|}  ETCÀÝM!† A•Ía¤ ³Yi… ·G7‡ƒŸ €Oè_¶ÿ+{lJr 5ÃÂ8Î’DÊÈSw Ø‹>³N-Â4K›KRi™“‡ÉÓ¥ÙÄÙR♓Ò"O†'z¤·9m©-mÉ<#ñXN[ô¶F­]ž¢–—$˜Ç.emÑè ½[‘'P—§ŒîIz×jíÈ%ž¢‘uÕ_kˆ†=dEbÁæäEÈ @5æ‚ ¯€Ÿö*F²i²°qžÆ3úlùìur¶·"à"RN[EïÌü®å‚ "1mŠÍŽlbo5¼IT“ï5r+ ـN^ò!+%–¼#,Ü@­@-äë OþÍ¢ø‚;•E°×"—a®"e"qù‰ :Ñ#Ò_ó½Ö1ÚÂoà]=Ìë@àgÐÖÖç>´õ%šemáusòp)ª‘W ùŠcùrpÁÉ 2¾ÓVD¾ú´`¯Ï\EØËÑGÈ\x‡Áϯ°Wƒžöhw2dB¼¾Wá ÕütÀ°aœ ‡1ÏL[[cÝUë&$GŸèJø‹ õ†Ægøµ‚ýáÓøð(á+:4w¹AÈ«ÆêOœŒ&Y/Ml•°Ñ"®^[áIi9 î¥…Ô ­sEçÕðÓág䘇47DTö¡ÏÛ'*,gIv+gÑÛ§(u K É 9«8æ…lÄ cE¬R“Üè8¡‡ äÕŠZ;¥8œD'챌Áî%’r+x0ƒ'ï8g<× -ôÁ¶1“{ÓC)[,Z´µø‡ž1ÌËÇê\TÛ$#žòžÌe; ‘›#¯h%õû±˜¨5j=e®ýà†‹ÈW‹ÌÛ胻XÑ)—kèS˜×->ö&ÆŽþFrS n8?ÝGKŠ}ô!ꉱUüb6M„¶b:ר˜—«yëHÕ‡Pý8üõ)äµuÿX~Þ6 Üð€*ß Ö’аʇLÈöÖ°a6>=QíôY¶ö’YÃÂ< {5'*I 6:ÙúŽ¡œ\p©a^ñH K[kôzúÜu~§Q7KÝ‘«Zk4úM¾È‡¹>‘¿$ž_ë"LÑ7÷’€_¼ZȇÌÄÈoé= dòG6PÁ€áYÙ…€½)ÃtC g,&‚·8ôlMm9ОkB2ž„©µ…ŸsÖ:_Iv·Šj§|Ôå-Y⫈×pƇŽM$Œ°'ê—ÏKlÊb>žB˜™‹6l¨j[ãªÉoÂl@lC¦m’0O‹§|¢„¶ èmKÛ¢M¾LEæÿê;I·_¶ÊM6Í,)"N"¢ÞB6¶ å¶­ófÈ-¶l^§ÜŠ¿„Æä[õ[pw œ¼èh¨›Pl.76'£oånUø­H`¯ƒc®sy,X‰³ Ù=Òàšk ÒIDATxÚí]QŽ\9̱sœ'·ÊjVû$T6¯§øØQ”l7c\~üø.òë׿ÿýóç÷ï¿?¿þ<®ØÏŸÿWì¯Jÿýùëï×(öü)SôùÏ-E?Ÿ[~]á¯|®»‚Ï•lS0Z9VÁ¯ÿß VÏ`»‚Ñ?ÿžýwmV|êe >·ú©`t£|¿̞ѱ+­`ä˜× ˜§Âã¨&òkO¿9¾ÅÕ¿·XTÖ½–›|ý”YsäN.”Yóó*ËâByª"ky:…þ×A‚ü‘b2nýÆìÙ“‘¦*”‘¦SD-'Mˆ“ŒA~‘“¦[\D®˜¹ÈÇr‘S¿i±¨i­‘ h¿ÌJŸn'‰2–‡ÒHÁ67Ä’¦IËÌråŒqDšŽW}:ƒ2ÒÄâÁH¡ë ¢ˆ¶Q9äGg­4E²Ž‹=òÀ–ÊGˆ\¦X6or Y£•b¹IÛ›'öL±¤‰-º.UÒÔ³f9‰¼kÚ*6¡s}¥²5ªm¤‰…úlî-"K×# ÑesymiØ*‘Õl±U~ê[,–—p”õÜd\¡´‡~ÑÊœ’&Y´ŒM}!*Ðvø³UpmEgÑ–f»ê“&ù#NR­‚+¯L”~@+Òf¨h¹ÈhPåê³\$Ú‘ë~ð4u%#K¯ š³X,ËRŽ‚â~mEÕƒít+W8ËMdä ma•“@Ò„ð[DŽªœ¤œCQ|ÔÆ¯º‚Lj:*‰ªV¿•YZAÖ*ÛzÁ±g1KÖ¸™ÈÊå7 {£øÒ·X,KíYwÃD c H`9I;Ìb9I[Ÿj°Þâ$eV‡ ÿ-N’æ&kWð5gp­Œ|íMb±X,–—r“µŠ·ÅY¸•ýœël«1jÙœTг6Ê?–'yM¦‰=ühvN«ëâ"ÑŠ_Ïr²GcŒ,­Í¸ßúE ,˧Bÿõ_(wÈU¨>öè4[‰Ž*ЯµØEÿ´–¿L³¯!ØWÇÕnˆnÞzO",Š—+É)iV}v½‹Þí&$ís›ŸnoF÷±Ä$Éb±\vcn…í–2æ «ðHöØMYcG-\K;°­,Jä\ïyÄr’èh´M<å$m}·XR%ïpjí¬‚²†Ùì8¤ö¦íâg›¶_Oeeç"kûÏnY,ŽAÂÚ_(;Ùª}ä Û¤S®(ÕYa²e!?¸mÖÌÆšQ"Gž†`9ò^HÕ†`2],Úq8ÍÚf$,Ad©Ýš³ŠÊS_ìÖWo"Ú1G±XÞ ýÇÈ“¼-º)P´Ìÿ±ƃIÙ©ñ›$‹NÆV2;ño|˳³ÛP ËIXÒtï=Ïbê·q’,‘!éê\&y9^uê®,G‡fጓ%dÍh¥-ßF^óÀy"Ñ]<®( s“ìtµñ³•H±øQùYÄÜŽ¤(ˆîZùè–“ÈÆ£gGÞ- Á§l1™,V$Úf4(íÀ•Aýµ\E¿²ùd9y*º."k’dù¶…¨·ú¯Sp¼²mñZNR½ÒdˆA~YB‡…ühÇÆÁ±gQõ£³ˆ8H»‚’ÎB}™¢§ÝÖ)ø´êö³¸®s6"ëå–]QYà-0±¶|ÅòñÜcÍ<:s“Ó-^ËM²xPn YDmN²~Ùª6yõ[õ¡ó'©B}+x«uZ»WÏ  Dd>Œ7Ë(™ƒX>…›¬1s“×s“[±j™bòÅÙ«NÎI²¯äœ$jN7ž³;mÛFšn?ËhÓ¾–‹ ·2¦`öÆ@ŠÉw–‹ÈÛà¯#IO1±˜£­[V*êÈÙF²ò­“·µg‘5Ûšw7‘­ì” ùÊ!”}\ÚÖUµZcó%2ÈÏöÓjÓ^­4jGÔk‹ÉX¨Ï*6Þ-O–¸AW‚úòÄMt×qHa#`Ëvn²ÞˆÖ*d‘´lx« ¬ÏÌ) j￟E;2°€ ÿš.¡=×­¶ ’Õp±5ûÕ’ø¶ÆÙ§½~eO«\¤]AñÇò#¯ã"ò¡˜õ,–Oá(æ&Y„-W0;ŠPFžª5ý퉴U¨ÅP[B‡…ü,¨ƒüÑ`iʶ ’6«¯dA¥Û-tÛ9ìüu9'É*$ϰŠÈ†òd/ûµ3ÍE,“'1ôg¿³.W¬†eûl¡Ém¨†}l€f+“§,ägÑO[=a6ýÐÞo&û q’¶DNòËü[´UՃ׬ÕêW¹È5ÿ—}4ö<#úÂÓGWòKßPßb±|÷CÕÊ ÆÃ0ù³ïˆ¯ç²yèNÎN‚)+š­8B¸UÃÑŠV+ŽнFšª=Q!ã5kEo“Ʀf ^ËB~Yezµ ¶·u @î#òk›· X,ËR."wÜè‹ÇªÚX²“E/Un?ˆíi”å&eòt:¤,úw×RbUDå¯ ¿hM¤õQGgõšâë£üÑJ®É“d!ÿ)'ikVœÝÂë¤) õÙÿ}Þu¨¿&_|ÊU ,˧Ss”¬"Ï+N^\-®`ßv^ëÔ³®µ3­r“¶3w:éY6îö{’¸¶ ÑpíEËMØ7Mˆ4]kZœåm¯Âª¿J¾ä7Íú;ÝdÉb±,óƒíŠŒq“lƒD7‰‚éÙ“ò˜lÇå\osz«ë87‘Ïë̦!XNr˜²évM{ï·ˆ“°O†®ÓRv"÷‚ÊÊZ³Æ¶î.–“¥S.bîb±XŠîAî>²!^yƒÄj»{ùXàj/ÌvEo3kŸ¡}«k{WQÄIÚ¬: ù# *Kä°iˆìʶ+ÊZ}iª"g4š5rCcá6v|æš]ËE^3ÜdÉb™’,ΓAB`õJo÷[Ù)¼²Z®ìX8ù˜à*äo_ITVRíËÚDϦ#5·³;–“È›ÔU§NÊͺ£q<—-*ÖÊJeÙÝš3Ñ›¦u(è5dÉbé¦ë¬U{ȹ Šÿ¡›b-7KìdWòúÕV…ü,7iC/YnÒN?³¡Yp 8_å$ò˜tdÝÙW×*ÊéÉñ`–4­{íÀNB]ÇEÖ€‹çYŒÎê8GyM›#g‹ÊZ×q6Ò:f,Y<8ÆM²ø° fEgïõ_¦ ËêÐY”)z:`¥]AôÅòRR{ÉBývkFVn™‚lPi-'Y÷´rm×eÔëm‚èqª9ˆå!ÿtÈàúG™ØIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SBbc0.png0000664000175000017500000000143113657750470017665 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¤IDATxÚíÙÝM1 àu6€11Ú ` F`Œ²Û”‡“µ°|?*ñå%½¦>ÇñÝ'Ƹò±ÛºÀËËcœÏùïïïÓüü<ƻݯÝÞ~ÿyŸßß_˜oèñqå ßgfmFóº§Ó4w×·#Ê V7Pý=¾ëLWôÞ, 8¶®Úâî{wwÓüö6ͯ¯ k0î$j#×\·àÃÃeíEFŸž.‹Zíjp_Ýi.ú*¹5|Íçs.‘رܞÊãÂÈhÞânk«U[Ì¿·Ïå"Ï M?ð¹ÕUã0üú£®ª©.³‘Á¼¥‘ÑÈ`NÌ~îáÉ},ŸÊªÆº.Ñu‹2 |Zsç_ûÉsÏMwúrçŸ}§)3K¿·¸/výlíC¿[w77Ðêõ(·‡®Æ–¾^m~a T­~ß3˜„I˜„I¶™$~°zÿûs“äº:“DÆþ½IÊþ4·OV[›·¾ÛêªÝü˜Iªvr5&©Ú“0 “0 “0 “0Éu˜¤zV3 “0 “0 “0‰Á$LÂ$L2üŸ„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I &a&a&a&a&a&a&a&a&a&a&a&aƒI˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜Ä`&a&a&a&a&a&a&a&a&a&a&a&1˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I˜„I &a&a&a&a&a&a&a&a&a&a&a&aƒI˜„I˜„I˜„I˜„I˜„I˜äËøK¯™q¹^›IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/CABC16.png0000664000175000017500000000262013657750470017634 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚí][n$1̱÷89ÎÞ*ûµVBB€Í£è)>ÒÊLg¦Ò¶q6øë‹öiöóóÿ'ä÷žüû÷÷ïžkÀ?|7>÷}ÿ^Ÿ/x®ÏëÑÏsÔž„|ÿ¹J€ò} €õ¾ P>‰ç÷(@ësÒÊ/Ž^ßPަj€inÆêƒÖÕÕi~Pø¼n½_>AX}ôºe™õÅ–?m˜uF{+Óv;fx€°Mëä?Rî ­9׺O2ëv€^ê*¢Ô>/߈2kK›\{.F}<(-F} 0MÝiLú”ò§‰&ï ¨ ¯ÑÔ\@íƒ,-’¦æn©»ì×þnZ«Œ‘Š$Ú”€cÜÒÿXŒ;yú–W´‰-­óGãòõv`½Ò$@[ô“⩬齌Z{re^à–êß.6ºYJ–hJ£cÖrCôÉZMVYTß Ðë–ÚúfÔ_¦ÓÜìcíÀ´¾y:u’7^G«hÔ,o•ȸ°bÏQ2Ðæ$i€qÀÖ\«‘‹1ù™ÅÓž\”¶¯Éñí5[`7UDå&| ì^o× ¥½Va_´$ ÐÓmÊíîh|£7üVyødo`r,]ãTfŽEZaS†`’®Ö¤­i<žøçmÚñÔI/PRúץ校|da¬ |9ø‚8(\I!ø¢L0e­à ƒ­+­WœNkR˜ò~^€Ö}í+Kp%&ÇÄÏ)À5!\JíÓÄÑxUy¸²÷ãÀ½°îð ¸ã?xÂK5@¸C|¼ò³ý$ï}íIÁŘF£õOcysѹۚ²Ò÷,x™µ¦MÒE”öA^ÚåÍÀ)SmãùÅU¯³eO™tÖtͽÿ@›ª‹ò°(Õ÷îDºhQür±t:µI ÝRZ¾Š e*žFÅ`  l5eª7Úëûì>ÁS`å;Ï5ê®…Õ¬ò2`Ñõ² Å(°Óe‡°x²¦žÛt]k'Ímð|’ì¾é¥úmi½QªÍeJ§ø§À45—¾—Uô^Ùž¡è 2Á%)À³æt[Çi·M9Þ¤kNn«í¡5•E@½å\ÚEÔiý­ò'½îÈ…Û=[cÀ¼KdåŒ: 4]Dyëg—VÓêg•/UâöÈZÿ°DÒøémÒvra5ý8ëáÉ-Ô¯9N aóüËïÁi‡-wïÝGÓ^z2kßLYŸÍ:´"ýIÞ2ê¶#h`Â7ñšAïfÖ8jø©öü‘5t‹öq¢iM‰5Xá¾&ô<‚¿Á0aCÀk‚è°Ëkr`—ÂnGqûbâØrìšmØ-¯¡UZ— ö f¡Vy+Ðñ-¢p›la·)Ãoô†Ý*¿&Ù`,]>á>eÈ2žtu ´-mÍ;‡Ž'þeѧöå‰5<ÚƒöQ¥4¤Cö~q{•”òr.ðqàK yûÎx©]ø²V^ c…Áª–•VÓ˜ôXq:«OŒ—÷;õí£@_sF&ì:ÖçI×DBIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/DD32.png0000664000175000017500000000455613657750470017443 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ùIDATxÚíAn; Dçæ¾‚wY{¯ä¹ÉdÕ@¤PTK"K3U#þù6Ó£–ê‰"õx¼›>>~üøøx>åûüüùóóóùüþþýûûûù¼þì³úúúõëëë_€×Ÿå>jÙÀàËx_Žø5þ½²€®¯×t‚¦™ë+úÿ—O10ú>zÂ˼–´?Çxý÷ëï/0®×DÆ °l¥É(ó6³ïËÌò¶e™Q’Öÿúj61›8@µ5вìY&){+ã/e’²³L²š²V¿ šf­þvXZ`ÙÒg±,K œà™5rðtIžä–¼vë?j ÊD ÎŒhy`Ìò3Ǽí‰f-? x;4¡í4 û~™Õ—c’ÙÀʈƲ™Ä²¬w‡§x¤@ƸžV­Ý²ðÔfù™»)ãZ–†(·SlzhßÅGVŸY~v¨l{ ,°ì-Ÿ.˜å/ÖžÀAG‰+Gy€f˲¬…'´•ܾ‚lƒ§¬åϺ rËß~¸ jä Ûl³üèI—¿Ç°H,?ÒfP‘å/0X;‹Ä±H;,e§'³‹eYÖáð4}|oõŽ)òË­ÿÝ€—SÚ½ÏÓ²c–çξ½è#ŽO²Ü˜²‡vhʲˆÌ¨ôrV_žEd¶<,˲š@60ùC.@dÕW%x–ÁS¶¾xžn§ÄÿcåÌWN§-XŽ%p²®ýœå/M9‹dŸ`{-{v,F—1¬2y‘ãYÄ bYÖ»3‰lÂúë/`ܰ”µY³LÒfX³ŽºÌòg™$ Miª;æ ÊŽÁcÞâc­¾ü-³ˆeYï.ù½™c¬¿\?™ìi¶B2çeFÿr»ü2y’ÙLÓ(4-³ú³õ#èvû€ãÝ¢+[}¶‚¸)»eY–ø´ÓÞJè6AM8ÛÏOËžDÏÖËå/²þm¸)WO-?«ÄaCaÛ¼ÉZ«eëO:ܦºÑTW9,!hZõ-ïCh«oY–u¨dØ$þbvåV›õog“¬ågF¶Ýò·3 ;È#Ó 8[|_þrDÇ‹Òm廳–û}%«YdyˆÕ}ÛÇìèБ½xÙ²,Ël²ÙÀ¢¶.ål’mÒÉØ¤üBehÛ•ÔÙ{êÚ/¯`–¿š¢å—aÖæ9>©¶K*fY¤ ÜïNSòý ·Y­Ór–,Ëze×â8·_ ÌØDÆò·Õ™ ëàdZ eëŠËµüef-“0Ë/Ã$£‡ÃŽ9tÌ ¥ãN–feX²,¯7­{ÀÌ4DËÏN…”Y~y6‰¾0æK¶†Ž²³Ëص›B¿¸œI²–¿I² ¾ŽqÒ°jOG†Eäó!ÇÀ’!ɲN±þf“Ul¿_6Q³tD“ŒZþ,›, 9ꈕŒA¶áÏ,#SP~É÷h{ªööÏÇœ(:Öê;ÀÙ·^¾þ1 Yª3‹X–:›0ÓÐhÖú—OÀÈú36YOÌògó%Ûà‰Yþ,“lï>:Új1I[—e9&±“v€f‘wa3ˆe™M^Mf­ÙR&à*Ë_O, 6&A2Iù1½Q&ig”öRòÑyÐVß,òöV_¾ÒÆ bY§2 šN˜³n³UYë_~¦4°2x-ÓˆLRö2dûnm‡&ö$õ!h*wAY¦CîÉÉ^½u\ºA¾˜Þ²¬Ó–BTÐWVÉ]Î&Ñú·ÃS t”MÚ‹X}I¹ÍBå¬ÛrÛ˜DV?ž‚+[˳¶]ò“})Ê¡IÖê˲ÈqV_&À¶éÁ²,³Fqåõ¬{alÒ~¡@–MÚ>âl`åO’åKâß—g“òšå?Ú ‰í8įå®hô Â2h½‚p;4­ê]´½{ž¬Õ—¯´¶,Ëj¶þdzI¹“že“¶@娄åEd®fÈ2 º˜¾IÚ ‰5+ŽOp4ž¨Ì– MÏ›w»$g¡iùØš½3qYžÅVß²,ëÅÙD.mÛ~ªc4@d«ÚeÙ¤ÝòRve!*Ó@ ò:[B¾|,f>¡'Çâ4“ êÿÑôJäL;ivŠíîĽ|ŸýAÛ¡i÷|i“`Y–%2!›Mflo¹>R™Ãf³×€”§#›,ûEÙûE²Æ4ûDoÃO¶·/+x™‹hóü.‹lë³pw̰",¹* ù[ÈåÛ^•í½X–eÂ&r³ÄÉÀcxb›èÓðt×°2G=mùÑ&z¶u.c’rh*‚ÇŒÁ—}‹Ù3»–ÀÛ?p•õßv"åÏ.þì,ÿòŒÓhwdVÑf¿FëIÚŠñQ·€moój)ß»‘¯ Có]ÜIƒ%ùÝ,YqâÆ²¬W‘üuG³E¨Y˜†¦Ù2ÞíE¨wý]Yïè? ‰h¿Êë±1 l»Íb]•ËÛ>ö¥.‡&Ö® š²,ÒÞ%pÚ›·ûz˲lý›$g,²þò»V«à©<ðQ6i»š%tÚà)Ë$åЄΠʰb’vhbù‘¶†ÙìŠÖl^¤¬kc™ŽYIJ¬EÖ_6Àc¬ÿq™uù±)ŸaÝâm/€FLÒM¬ž¤šXíR;4e™D†EØà/»Š&{?S;4Ýe‘²ÌR\³{3¶]–e4òÖÿ˜ü‰|¢Ùäí̶Òa’rhÊv¬E]¤¶5­ËZþ,4-ŸGÑæytÐ(@yÙhö„%c‘öéˆa§'pË2› :êãÒò÷¹{B~ùã¸'Ù^OÌúO·w‹bóál[„ÛOŒµ³ŠßG°4 +šB,RMw™¤ šâÒ1‹ìžmL- ¿|ßÑ ûÏIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/AT16.png0000664000175000017500000000162413657750470017453 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>1IDATxÚíÁ’Â0 Cùïþÿ˸0ô›Ä–Ÿ¤³ÃìbZˆ£È²÷ñ0úáõúÿ1 Çñ|ÇûEß?_?~þfQÈ´ðk!¿Ã‡B~~Š×aÎþ¶èZ…GîArà³…TtÅE·zmK¾Û#7|1—a K™ð&a»âl¥Ê—Ó,½‰ø•x|ó_LŸ³’ǃɩÏHøÐâÉÞÈõ-¾N³o(xä3Nã\ߟ·ð&д‹‹Ç0“¡½t®Ùm#-üøŽ›œ,#âK‚ÐHnJ|FÆ9×õ3¡À#âÙ+¤ÉMEd/¢ÉW°|5ú{¦Ìv:—©±J0Ø¡­ô˜¯¼¤ŽlˆÉr“d?^£8E•¶Y(-ð§\¼âµ ã"¿\»îäª[ü»}·Ò@‹bˆaü粟KäçšÍÞiž9囑šRŸ½·ðs¥'€å',e6Õ¹ ãî°ŸKzL昋/€ÜÔH`+•“1¡¼Ei+†J†öÒ¹F¶ ÀÏ%ÉÒ€³Ü&#ÌV…ÉfÏý={³\pg CÂ)³Îejgìû¹Šý\ÂF+¬µ n¦k×>(l˜„[D¦ØkZ/¯ºaÏXi E1Ä0~‡sÙÏ%õs  a#”šŠ/𘬳"äZ¦|ø[ÖuÛÏuoË0îû¹@?׬"”"B£ ²n2F}Šæs É^\ù’sÀÏU:ŸK>¤Â~.Ã("C{é\³GÖý\¥½]Eáãli~®Y9&ÁÏwuÙÏ•¨hbÓöìçÚg[4ŒBÎe?Wñ|.¹Ÿk-pуÐuÇu@`;{^B}’¶8­O¶UÁ~.ÏçrmÑ0úaìç*žÏg^rM¦>;.½Õò/¶œà‚¥Ì¦:—aÜösû¹äé“"`ñ› l¥’" ¢b²1&”·( `ÅÃ@ÉÐ^:×ÚQ]ðsùÿ-¦Ïç*²UaF²Y–Ù¢7ð*ÓöìçÚm[4ŒBÎõ{~®ä,†5Za­ep3]‹öÁ¢†I¸EhŠùŠIÚ€a¡+ ´(†ø¡ßþÿ³h-IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/BBBC32.png0000664000175000017500000000545113657750470017637 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ´IDATxÚí]Y®I ˱sœ'·Ê| ŒÁ4 ˆRQKµ©1æ½<›®®…,m?~ȾÕþüù￳Ÿ?ÿýw¿~ýÿõósÖç˜ìýþ÷ï¿¿¢ïChûŒÄçJøöä½Z@i½C~^i?“> Ì]L0@Ö+ õFÖøü<û¾ÇÛŒÔÖ¾ÍDG¾Íœ.Ú\{-@ëçm’=©ð€²¯¥þc†NîSmR¾1{ôªMÏX–6¡©;‹X²´ M4e)›xBß Ý‘ã|Rÿç~gíå³ZÄšÓ´G‹®btn•=ÚçϳZ¤|QxsSTÿµT_#÷Ó\ë¶îòèô¾°œúŸ›•±–¿$ ¬K4ÑCpÛ…gV“”ÇzÑEDfiç6â9pèšÄ£üèä§;¼­?Ìj‘¶°<ëä@Gf½#¢_¢ú2ÍÁoö¤OφvȦþmâÉ»íg…FÑeæó·Œ ”.ž²”ÿÔ㔞ƒO`Q½LMÙP¨èÍC:ǼíËi=öü½§E¬¿kwpGµH{,×k´ˆD’4ˆÌ¹Ñܼv¤,r`/?Ú¢ì¦-vËŒ^š£ì§Œêg)?YGùb›CÇz$¬Ø­²E‘õáѣݼÕi}‘ö¹÷ o5¢yvÇ¿ …D“óiTÕ"ô¨7ÖY¼&ñeŒL¬e-2Yrÿ”°€¬äi“1Àh8ŠåØi?Q¢Dµ-C'Kù³5’‹ ›I ˆiUwaMr³UV~Ò|v¨ûÍà.‹ÄŒúGÚˆY-‚Цã3ÛÒ^0™%–Ú®>²_¤•¬#2™¬ˆ‰—‹(ëƒÇ·—hê1ÕžG’%ž„Æÿ²s«L<¡‘^ÂsV<Ñ!ê†hˆRþ¬h*×$ÑG\¶ªÑPÏq·,ê~(MÙíÆÚ¸Ëï^²#ìi“rò°–4Èd²·Š¡èk›Êã‹kF´L“dJÚYÌ©&içƒQÂÚ~ËÿMÒ¦êÖ<â5‹äúmf|£~ÝQwYÉdo×&ßwy´öú-:Bc˜Q>hý»¶Xþµ—èëÝÖ£k×$׸ÂÖ:YS ÜËÖ"ãÁµkC^ã‘X’ɶ¬¾ÓU»pyíé·‡)?IÁº@ﵡòãÉפk¬Mx9ÝÏÚR†NïnÚ“®¢@׉¥u‰×¥N¾Fƒ\X"Iöu“~ý[[ŒÄ¢aãå\ÖÄYSR蚢LkËZy€×Ën+ãåžÑE0VœÎÉñò~×H\SbòëXŽø£ìëæÚõ@××®:Vö¾ºq@y3³lë‹–?úÓæ¨–¡µôn{ûôǨTS~úlE9pО±k¹5šÄÓ"cµÐ­“¥],e·õL”шjn}P›ãºJ›´ Öm›cÇ£üQmR6PVc¹–h*£ühB´EpÛ4‰'ŽÊDS4ûë4v+]EêùM«õq™«lbKÔÃt<’Õ¢)]”乬ಱح¨k¬l;9½–³¦†ø^zË$¢ÞNýO?h õocÎÑ#Ï‹Djˆf`·9t,€YmBýæh¾pyJù=‡  õFQ‘D_DU·ûeay§Z„.š¼ýí¡ŒÊOT‹”m7ha°2"½'¤;¬Eñeߢ5Dý¥M¶Rÿ÷Dʨ۲<ê½,£üÑ,Mhðؘ#§ŠòÓe'+Mƒ.š,ª¿N,yš$[  <ð4˜, ¥ú§ZD’B&r+°5¡SÒ&,ê_Љ1mrzËÍÔ)£ü¨&)c3Öe5I9@4fßcÐk(?]4±©>}U£TXŠE©9ÕGµÈØ‘wªEb%“À·‰§l…Ú¶œw‹–åºgÐSÇOoûËEÓóƒ-`–6)knvê†h[Ù<‘2ÑÄ¢üO ÏÉlõ¼S-ôøKÕ•»g½¸@ËqÓVø]Ýã×oÖ£Z_´S"I¦9'ñÔDý×h“l•y@EµI0”…”'DI¥E,GNÛí>úD¤dkÀªòU´}“Mùé‹eÜÔÕ$è"j ¶EµÈºTJѯ¯(“F™–×h“6`hŒ~[7^‹YG;Ò+ö  ÏÞY6\¡‹öL¤ñÁ,å6T)ó8e™sùö“í?Ò¾½d)?:…ÚZîˆ2êÏêKÒàõ!is܈f ˜Lö÷mjÍ¥i¬)4© ›Þϼ¤”úÓº{¼h‰&:£F4hçÚbò(¿G¯PÑ”Qvì²4IûÜ[ÓHÞKBµHÛ†Õ"e¥Æ½mà´óÕûYËõ”_}Ûe2pqdݳô³Ù’〞g³*•ý"¦yš!›\àeS”‘ÿÑES˜×hÞsè´ßM{š$ꀿÀiß´;ex•Ÿº¼›‡ãmÇÒ¹§¢©ê·×ö@¢±\ížw¸'’Ɖíz@ã4«ìȒɾE“”¯jë²ÛsGœžåÑ h¡°²‘ŽRþv‡N´«¸EXËZTG«<§B¹&ɺ!Êf™´çÈ¡=â,ÀhYƒôvsJõÛ·›h Â5¿½_{öhj+¡q i@ɃxL¶ÕPê?¾Í ¤¢œ9³Žºñ#QT>%¢” å#–õ—Œ3êk5ÉU×öˆ×/’k¶™k6êuGÝkÈ‚L&ê»p_»Í¬½e#i9´=-òy-äY-RÎÀ³Zdm/1Ñ+iYЬ}ð{ç$z²´EIÄM⥒Ó;Þ$fSþt}-ï÷QGŽG·Ž²UÝq«j”ò³4 íNÚÓ ¨š+×$Ö~hi“²’VÄ‘õ¨§ìê«ÑU\~†ZSÁsÜŒ· ^£EN?@bIbI&E¾ž;ž«è7CËZÑOôh‹†©DÕ_šœ2k:ÀÓà²2V“¥þm'Fe%À±hB5‰Ç¤ÛE“÷FhBÛvÕ"cš &kïF¸†A…°>è "±Ôeÿ‚ìÓþ/¯JóIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/CA0.png0000664000175000017500000000037513657750470017345 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>šIDATHÇ퓱 !EÝÛ5\=¨œÂ]¼‚æ'?O<“K¤ üARº6e9—’³ù£HÕÖTÍÅ‹Ô*bþÃ÷õ>ÛjË õÀ.ãËPŽÁ~~lEQÌÁhlMCQ–æ²0‡ôŒrø­cQ<ßæ(ÄÑE°/í¯“wjS}¤_ÜòÑŸd¹ ´N£Ùû'!ðâ„¶*\û·=,UD´Óuþ'IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/CAbc0.png0000664000175000017500000000040013657750470017637 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>‹IDATHÇí•Ñ À DÛqǭ쇅@8S“"mî£GMjÓRRÓ÷óȺO{ŸßÁÃk]KD^kÓQŽuë~Ë€ÚIÈ8\ʸÀâPžÞ­€l7@YØêß”·)Ðm̰dÎnµÛÔ±Îâá?Ö£Û=æ%V˜ÍÓ×½òR©Su¤¦¸c&ìIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/dd0.png0000664000175000017500000000041313657750470017442 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>–IDATHÇ핱 !EÝœ쬩mXÁ ÁM¸\ñs 9 cÈ4DóÔðIéoFT ‘j8°œkÍYU¤wUÄpÖ˜[c~‡ûê°`ðs€±Ía½­Û9ñdÞÛ¿\>,€ìå½^ˆ‘6Æ]åbõËí¤À ½˜¸mÒÌ†éæ·|ý /ØÇ¢Øu@ÂØÌ_ÎIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/DDbc0.png0000664000175000017500000000036713657750470017657 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>‚IDATHÇíÖË À P˶˱+%È20‡ˆ.Œ½øð³nJ§µœ¯¾5[X­#ÚA¤j,å ÃØî¨maáÀÙK> |½Þ\Ä‚*âÕòëUó*†UÜTG¨€œ¨0ì‹d(mò" Ú%ìÏüÅö;Èe—m¡j[¸®n–C ²pBåIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SC16.png0000664000175000017500000000213513657750470017452 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>úIDATxÚíËqÃ0 DÓ·Úp îÃ'Wá^œ/˜`l, Ù»‡L†IóÿÈÏ$Ú¶ËeÛLÞnÇíF7ÿ|þ-¹^ï÷ë5þ‚úùš¡’²6XZõ[Í»¾ËËÙ°_myYƒ¯­GÛrTRfx=.oØ—ö5+6ì§MÐ<–$I:ß»ÓÀÛbüfÜz´ÙtÐ7æA^ÔßÄÆoòsÅ´UæÙÛëËô-QÐÓ~ò½·™F÷Tz)•$éÌ4f~˜¼èæãÆÄ­1eseHAAkfÀÝ_Þ·ûV³£áÓt gâ/W‘2¬ÌÒCRâ`z(Žö,I…ÛpSD9=ÄjoP=„ŸF— ôLBOÖ@ •´=ŠòbøhUbhFД…XWÿPò<ðê& “$©pq8~›±TBcÉ“ÆÒE%ÈK 6–m,íÃôDw¨ šRû‰³$é[1è̆QÐ\“á½—‰ÊtÇ *R`/n ìeñ€ÓâºÃÕšgoà&—$Içg’áÛÔÔt‡óû26I<òÙ›®³`äûdYñu«‚dYüóÌEz1þQޝÑܵõ¦ 1ï\НXÑg¶œN’$ÿZ3úø ~:ÆÆwމæ[c4í.gã¢Gm¢t¤ÄFöèC4gã¢gFE¾-ÿ!(2k‹$IJcP&©RÙöк/yÐiÂ<´Ó $N‡E½÷ñ!FõÀ<–$Iú j5Ùš^'ã(v¼!OÝ{}ÆòT7ÿ8†-¡8bÆòÍe2v5Íã&¯uŒºMúÃ-¥’$‰¿þÝ$P9ýÒ/Bâ~ì¿G÷«›Nàò½eÞ_­AWÙ‹·Ëø[¦fÄTaôó¶wè}cÿêКÿVÂàI’k×b'Ü!Öµ)Ü E¶yÞ ÂžO`@ÉŸ "D»uYS#æ"bÂÞ@Q4  'C[”£žÇzIDATHÇíT± À0 Ëß~#/øO¹"¿¤ƒSÓA¡¬!a$$°[+ˆô.òƒ¥ÙœfÇí×z3ªc¨æ3„|1ÙŽ¡u!äC½øç<­ähà_ÏÓ ‡¤=¿chÆûny²qLF6Žk“/Ïnþø…"¯ÓÕ§´p!ÏÌ¿Õ@êa/IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/CA32.png0000664000175000017500000000453513657750470017434 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk>úIDATxÚíË‘Ü0 D÷¦á6=9 çbta ¨&ˆFk$à0‡YA¢øyl‚à¯_c}}ýþýõu}¶ºüùùû÷ççúluÿýýçÏ÷÷õI|¾ÿТ¾~yT×?¯O¶^Î:Žäøz£ëE×߬ß9¾ m½¨½´½­õ7öm8^/·V+ëæúvý{cû­½!ûmÒq|é¸9Åÿ µÔØeì>Ùʽ:i/ç98jNÞ»ÿrä8ù†J¯06öRòj &òòˆH^–Cš w—¼ /F[­Ö¿‘WŒ>s•Ážaæ:‚=„ªì·°7„¹¶ÇЃ0WöÎi+Ù¥xwJ§­ªnGàx0oìIü%pI!¯uÀ÷ȫر% €Š‘o õÉè\mÈ#/ Âèƒ0Wyáè‹pŽ‘jB=}âÛÚp·Eœ¶’|‰@÷RŽ4½“[9‚½¤-ã¼±çA ¬ÈÒD^€ì¥ dCšÈër‰3WYñâ ^V`K"òS°ì_¶ko<Ö"̵QÑâa®eÏã \Z+#/œ¶(.ã‹ p€2gÚ#6ÁBæÚWÇáVe4«]ÅÈç¡åo¹/9þÄ [Åä…ü³-pºK„¹ ô=ï))[Nh:‚=„7õIJ‰ "%™ ¡- æåJâY´%ÓñÆÆÈõ™^·×YoL^t—Þ`pÄ$v”õ>½Îmä³wŠ‹NÉx.|Â鹤W4ú°ï¡{ÅB“‡>H§ Å%‚>+5U4¢šw Ììðìêi^tgQfÃkßäB=—‡>+ŸÄäµý"vµv»àea¯¸§óü2}Ï\h¶²Áa.ʤƣ­â-¢¸c"sá´EìRbÀ`^ÓÐ*§ÍâØ›•/ú¬pí§ ºÉ•<¢ ’×-Ä—]ò*fobæJž§_â{7 (qLifqQS$&<`_Ü´ˆ ߤBœ?R¤5Û}Îp86ö9G^MSSúÊËîðдL@ѳâñ ;¢‡U‰™‹H™‚¢n­\7jNôäv]æØØØçOaš&m7š¦6MÌo!E´Š/2¹éF[“¤ˆ×j¢ˆ7¡‚KßN(§/ äl0oìs1HàX¶Tw)ÇÄp qŠ ä&vL 2‡U É[) Â#‘¹¡,,¡)v÷¥Œ}º%毷’Qfo´jb.ñf:ÁöÁ&ñE¼ET°)6Ætú6`w(Ÿq÷­eëæö±1QÝ~Ÿ{¢ä&N¯Ó”Ph÷h¥âuAÒ(Ï}qš,qb0A*4}¼JDÙ"ÚšîκoMðgß}kJæKÝLùzyÑ;Åi¤›gÓS…Ë’£ËÒÁã £8¾wi„¹ Rþ[©¥õË\²µZ²ð²éè¤Î‹ y=‹¼ˆšŽK£'>Op þ†nqÆuqzÙÑ–±ÜD<ÌÓƒž&Ú’ØjŸL@[ñmÉ"bðÆüîÔ´¼ûµ}–7â&Ç‚ C²ßÞe®â3ã»Æe6"ú ‹+{ä¶ÇsÓÖî¾Ì‚x.},ôØKÀžu¼+ºt»ñtÎ’aÞˆjcct`K^Ák—@^G[¬rj×òá ^»ÿ›DœÈ(è3WãX<‹cÚŽMç¼¼ Ú*üzˆ˜‡´ò·ÒÖ ¨c£X1+žcœ¼Šµ"yyŒ«]IÇ1ú ƒDrñÐçDK¢Â\°£÷v`σ$Xì!ÐSL[»К{® ód´5ªÖØ“0è¹QZ»ƒ9q—b @Ä[‰—½pæÚ¨˜1syîË`AŸ“ZA½U{»´U,°y‘YHæÐâfæÇô<ôq$1†ÞÃwbú‰Øòz ÉÎl%¯X‚¡, Ø­eÈ\¹,=…EŸ]æÚh àr"]@’ƒ·™yŽí “v”õ§Š•=}bæ*>D>¦­2ØCâ¹(˜‡Ð%+"1 =ÃÞ1Ÿ$½G„˜bòŠ™‹RÞÀ3×ÑÓÇè““Ù(rSYŒEŸæ*h„^òÑ&—¶Òy˜w´?Ä£‹8c×Q›Ž¡ÇS¸ˆdii«u;Ë}cÏ&¯V嫵!!$P€Š a®bØÛ ŠKϱG[§þ èS{'ÀKwŸ/))â.½„Iè±ËzH~úí÷ÓEL[Äp/==ýd {µ’IëÑpÂ1ˆ‚>tòʉNŃA<ØQ g­«øy‹Å¨3W±²ÓV1QÇ'Å­ö<è‰SâÁ=ñiŒÄ.¥‰¶Sò±±7‹mÉmí.ˆý2 RÈ+Ç\”y0ÖNÛðšIÎBä¦2èA²RÅ[rã ⸸¨ã±6G[Ÿ))Æ´ç+;º9KÚ^÷IW¸ÆÆÆ>äbò¢ôYqgÙ@Mc”ÕZûd„¹èr;æú´¢W®[4'Y"ë2ÇÆÆž2…‘MÚdÓTúÄ\&EˆÅÜ$ØÄ’b =ÞïË`O&ÛÖJ[¶ð›–re3˜76V0f7Í›‚èá‚”[„Ü´åG ÅÓ–¦@2Yèœ,XP¹ºo ŸI 7­A¿G}ÓØØíÕ®Ö&DÜ„#Ûv$Þh%ØZ†>e3@R´µ·uäx‹¨`S¬…žVÚò„¦·Ò–˜³FN{ªÚEÉg,H6#N¯#H(„ '°¯UГFÉÒd‰ƒ R¡y0‹+\eiw[ÓÝíBQ§¿Åâ[ݑي~n— ©² t\àÄÄÙ8y¤ 'G—¥ƒ—%À¤üÇ•bBÁ±xAÑiëM§µ%ëçØØkµì(-Ùáa^ÿE?.m—¼ –ZÄ“(;ö0FâA¸àB9Ú2vO<Ì3~[ôãKe¶Š¡ghkìÍÒ€ü¯CoÅ+ê2æZÑ'vì…a Ün)¥‰¼ ˜k}lE+pìöNÂדšr˜ö¼Ëá;5šB[^UJ¾é PËÛi¹?)?1D„IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/GA0.png0000664000175000017500000000041413657750470017343 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>©IDATHÇíU± À0Ëß¼Ñø#S®È/éÀ‚dª¨ªT†Ôàb ií+&r]"èSªŽ¡Úûœ½›·“ƒô¯#ýJK·V¥Ç•þ¡¨&ÞõÀ`ìåž,Mìå†hïOÉn ó>Åïs‰±&æ+Eì¥öÁ¾—q„¡¤Æ0À3y¨yFLDŒÈÄl3—~¶šÄCjûš¸@é˜ó}¶„E‹A-ÌoíæMzëlC­WIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/BB32.png0000664000175000017500000000610313657750470017425 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> àIDATxÚíÁ•! D÷¦á6=9 çbæÂ{z’«¤*hÏÂaö쨻¡Å§ÒÿWûøøùóãcýÜdòëë÷ﯯõÓnþeàóóׯÏÏõsë}M¾~ôÏ®_ßo^P|¤ÑXö9ꂬ/ã"ß! ¿×ë㎲ïÄn‚ú5þûIôwm¸¾?‹áuød$þ/m8óJˆçªÏñ;ÑpüNsl×_]{4»8äwˆ?XŸÇj¸þ>ay€Ù¿ ¿C·×(]ÝBü—ÛÞ­]ò®(ò‰åÎ6Ñ5K^äËÐ'»ˆì_ˆ¾GÐ'c®ÑpS1—öìÌ•ñTæ:F†‘—'{°2Ø«!£­&æ©h«9ª3X±ÓV}¯8mÉ ³´%üÛE^LFÿµUzª×#€­ÉKÆ_MZĶ€zä5z°5úd†iØÃÑÞ,èS“(Ô÷Ù4ŽÈMÙ%º‡>5s œ,mAC¬ö8Ù=­?ÚÄ<Ü)ÖÔ![1gKæ!¸ƒü´eŽª9ëÀ¬|íGÅ®#¾—™À`A¾@ñndÈqÀN^«I\t’ÁÎ\µ¢I€@6ïâ„E?‰L"DÐG{¬8^Kn#èÉh+’höµB[æÂ¡g½ïÕdS¯^B[2_ÑVý„ŽÑÖVò:†y·½ÈÕÎÁ¾Ý—‘—À¬P€Lvä›ÈMM$êMøYßÓâ «ëø2s÷YÿÕ}ÿ@†Òñ" »JKЬÐ4‚=zØýUóXèí "w¬ŒG˜—Ý=‚yâé¡î­c±Ön³ +ã‹rLM^#ä‹ûm,y5ƒ~Wˆï,EòjF÷ˆ_âue<…ÃäJqôɘËè«YÔ¼©Ú"89ÍOŒ¯å±#ñKbim½o|B†yõÐX»C†y,}n p>&§ÝöþœeѳêåI†Ab9-†’°³ÝÔCŸìÒ ô‰¾‰â¤)8»‰‡óË gÈׄ½ ú6s³µË\#Ãõ½"ýÝÜUÌÔ9$€N{l4›À—!JO3PN¥kÚMF7bW¸²ó¶n³aQPÍh+¾»#oÅn|a>š?%› 'ì!C>Ü<":ú^=!²èCÀ^}jØ[A §á“?1wÕwlÙOœè=2ØÃ¡Ç¢hâ}oT€¢ª?ŸSsÖÖ]ÅÛn³Ñ–e$×T“—Ñu‚š}^Ú’x¦ž—,"Î\4LÐg{ôIŠÇîøXÕ{7y®ùêËY·m »v%a¼”Mk§­ëc|ZO°ó±¬/-ªÏ1k¢ìmÚ?k™=õéÝf¿]¯~B¿iOâA»0·}—vxÿ8s‡ÉËšà"ÍãžD/òEàlõ™D7 ¸‡û^“ñ¸BÏà4RæªhL$EË‘|ã“05™4«þdIeÕ­YO{ó¢–Må‹-)•±Gs%¡ÇN[ôl:X‡—H3 "Oe+mm<‹qÛ£Ú¦ÒéQç‹Ï®4“ždâ1â(,•bÙ̉2gÒ CÈkäkòűe‚ËMbÃìgöð=6Y"ø zjÚª+˜7ßéúŒdãúÚíR "1m­~cO©Ã.sÐÖe®÷ä,K¾9d¶Fæo#ÙÉ+JO2•/z%–¼šÈ7AŸòÕèSÀ^½ãôh柖@˜« {õŒ[³•`†®KÖŸ²h¶ z²9ؘ›ýÒÖ6mërÖû´l®µ“W½‰‡“—E£FÈ‹@>€ŒäU»|¹fDŸºnW΢O]“ñÙÌ… ‘¹ê´ øÒfð~–¢>&(€=zÄ´Õ›‰ÌjÚ²`Þ¥­ËYÛ1hSï"üeJ¥.¥@#äÃ'sùèI"RU}²­9<뛚¼n‡Eöèa… NvÄŠðê5ôÔíæÂe% ìeçÕjÚ×BÆiË’'9«(s#AZÒÁoJê_ß÷ˆ­æ®ÊmÿÅ£Fò É«žÚ2ò’B^£gõÆÉ«‰|µS?A!žš7zQò±ârq„>ìчÍê駰朖A’'D|4§-Yæ=–¶F÷ŠCOüŽÀc#$f´”SÚš¦áâÎå¯X_›´”u@H¦sá„`á€ò!_@õ¾ÚùðBìÌFˆ/ì~› _YóøYO}æÊ`oäpXôiöz9>ÁÞ&ôô61ôÔÒš,!ZM[ÆÌÉ|uÛmjkÂY @µaY®n€êƒÒÑ ok¢Ñaot² 9µ†Ÿ{#ørN^²„hˆyûÜS²Ò‹ccÆkа÷Ãõ‘Á^²x‚=2-1,òhè©ik´ÝWÿY|ÙÄEÓ&û2·Ýfhv½é`Jd?$ìHŒ|ÈLŒü­ }ò!_– Q»Öç!8ßÖKM:2Ü#¯fI¤fuÖÓMÝ£†q!qÄ0ÒßH·˜¯¡G {õ ¨WÑ»S…e€g/8}`Cè¶ÛÌÌUŸ g銟ò½´Ø$@2Ã5úlÒ÷Ø}ÆQŠô‰èD÷}øœ-O ÁÞ}ê¬l´a¼ö özÐcG¼-ï4§7òÛY©ÃøiLÌZÏWw¿í]ùËb!/±ëÀ}Ö&²— ëÅ’ – ì|,èÓÛhÕgÓëããúAïñ1ÏuÌWžn»m gm]I[;[-Ú×ÇuŸáŧ›RD¯þñá}§&й+{ìxƵL‚¹Xè‘ÁÞ1½ú˜BxO§-;æá“æm·IùËh,NšbæBÞ Qt,žŒÕô‹›$œ3ôAœÅI„&ÝÆñŒãŽìà =‚m³g9¦aŒRìmÝŠ5½^$êÚe‚±ýÚ:·+¾£[ï¶÷g®MPV‡)_ƘÌ'²(fkû:!rÞ‰¨w­Úö¢ó³èƒÀÞ¨` [k`sÉ*·[62ñûë%kÂË\uŽXqµÉÚ±ˆ…&üT£,ÕK[–äB8kÓÆÞ.æ½›ªeÔ¶"ÅZ°1ÏžÌ$^X:f¹캱ä%;ðÝ ðNbœd•‘€#Ú«Ç•²e<ÒM)Y-LiÜüÂ÷Ç‘:ØMèÁi+üQ"<ÙŒ €X'z ‰¶ó6Mˆ—³¾¯žµ5 žáØ’Û¸&²Ôöª§t$±¡eÎ’ÊQE^ͺÏHbp¼2d¾®>ˆ"¥©šrš8ÿþúv²Ì%˜Óz奶æ6d‰@̳å,F›šuªäºf›}ÏÅ‚y ­Mqzƒ6+—Í¿{È2æñb›JÔÖ˜`Éï\“×(—u @xÉQd¼*ޏü2¾]+¡ØJ×YJÏf ¶Ö@¶À¡“«JzîqÓžÄ$Þ=¯%¦ø¿âDm‰11o)‰wU­‡HOˆú(Í×bÛ¦žF€FŸM°—]{öÓµNÒ¬‚Œ¤ÁÇ÷T-è#Vöp¨ËHf¡­æ"¯G[²@+äªÙlÇÍQ=¡­æ;]_R0Œ†¼D‡XçÊ®ÔÎYoØþ¬N˜{ZIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/BBbc0.png0000664000175000017500000000040313657750470017642 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ŽIDATHÇí”Ñ À DÛqÇ­ìG9¤ÂiÔ#ÐÖ|x%yƘŽýÕJ©kÏb¼Ï¥ôTøUyhâÑ~Î}µÆ‘20Tj•¶`-ÐH¨ pT1+ Tˆ¦_c ³ŸÉ ¨R9 Ä.ÿjÜí1Ã@˜û˜™­ |Ìì~Y¯}ùÝžRÝÔð5€ÞvÑi£À~7È|IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/AT0.png0000664000175000017500000000030513657750470017357 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>bIDATHÇc`ƒüÿO˜¤¨®ž2¥ºb(„ŸDVI'+©f=yVbZO‘•ȱˆß\zéäWZLLPÙb\‰N>¦SP“—i’¶‰ p2˲+@¬ÈàJbPòt¾<‚ƒ7­IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/SBpara.png0000664000175000017500000000056113657750470020147 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>üIDATHÇÝ–A Ä ósßà)W½çà’äGî! !-M«;ìBÑšž±uYÞÞbܶkÅ1„u ¡Ö¿å|9·#þWMƒÌ* 6¶u1 iP¦ €}GeK9ÏR@m”ö=%½ d`6¿'¶5õ춦Ýà î¯nŠ¢²*·Ó©ŠÁL!oÈ>ah £€ SŠ˜i?ÊplP¥XÖ&+rÞ®Ô)0+…¯Ç üÙQYéIDATHÇå•Ñ Ã0 D3BGèF)#e„Ž”\ÿˆÂ…ÇIJ ”êÇ8¶ÎçÓYY–Ÿ‰m{Ìcߟ3ƈyà8ÖcÆkÆgž  óX¿Ñ×4úƒPmt,W-mÕô$*»ŽP¨A­”‘cfµrÌÚΦjÝïôö‰zÕ¤\~òMˆ63O€êMH3ÓxùÍYc’ĬìŸrº½3êUÓQW8‘‰j¦‰Q¢ûn5¢DÚg[¬+Bˆœ}¹S¶›~yŒ—Õ.ÝNÚ¿¡¶³.÷Ÿ6pV |*ÙGK½9®:â¨üà+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/torp.png0000664000175000017500000000044713657750470017766 0ustar jamesjames‰PNG  IHDR(fÍìN vpAg(B‚bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>²IDAT8Ë”Á€0)ÅRl2ÿ”`9vƒñAaVˆ<œÁ@¸ã "ÎZ»¿ªBfç¹S5&úÕcXLŸ2RµàKaiû¡ú&c>&ؽoýÑt>o$% cÈôdPÂT¡ ãbIDATxÚí][n1 ˱sœ'·J?ŠAQŒd=©]飃n’îøEJ²üñ±ö®öóóïßßìóóïï}}ý}>z|°ôóïï߯Úû„DÀž7ñ\µ@ÞÀN@Ò (½1-ÀçðéôV`èí`RŒº†D7B_àùÜz_÷4ƒ€"`åÓÌí Ÿf¼ƒ'¬¯½,@ôyYSFwê8àZÓn3Ú¾tKÝÏ ½}‚N£UVf$ú¿VD…W/å7Âsm¢þa21_Ô×ÊÕön›>\ÝioP.š´Ti4ÿ¥”dè­š kZí(Öö­´¦=?·jôA!õÍtRá}ÀXÖ³WmÓ.0§8ycØšEï“ÈD°¬xI8I8›¸à­ijÕ]صÊÑ4&(¿Ví…QXÒu«:ô‹Zo¾Ví…CiɹTæLBM+ ¦òé¥L$U96—Í,µ_æO@í}õB ‘„vÀÚ|$¢ÚÔ–I—Ež¬”ßšgs=¬žë7‰€ Ap~soœÄ½¶"ênMáúXKõµ ?iQÏ[-R.ص>i~L[³Q¤HJ @Ùpáþ6 š¶f[oHG"ÖÖÖ¦«5ïµLíII4oÔºñ%­É´,&Íh›N˨ÃJ!­Û´•rFm¥üîÁD¾‰iÉøi¦}¢~¹¥nYX[[c×ô®:çÑ8÷ÛI蘴.àv'ú˜0m Ç;Ÿ•…Ânßj‘ð`â-Pšp,jÚö€ö¸”€±ñ±€W½cÚ ´ (Óˆh[šrv¢wz­#kª<"´î¦÷n6¤BPI ”m×Ðþaû†­Ú+ß2ä-ïW&–¢Ji”©9ºZ5×¾uri×Ý7ø.@é‹Ð•¥/F¢% må\¤5˜¦ Î-Y(/)$õ5º¢LZf]V XëY(/ 6¦´mqºhM^ÞOKñÛ $Zehy±bú"cøÞÆ;VM• P;aÓmߺüÞ¦”kúÑ c¯ ?þcÌ*´GÐ YIsˆbÎtÇ I¿ý ©[-’~ýafkkÓdéÆGº€•—à½}pzuy‰õ´×å?ÙN:ÍB2ÒʬËÏ‚@À6±öÍtÊ_6(¬ñ­ºsŸìbeÒ?¼î“Ö L¯XR”ˆcT|$Ý"åj!‘~hwt·»áPSÑ'~å‹«ÞVL½°ñ5ÐÛâÄZßsÙNEkJ"áG"6#-’c3 zu߉›°JŒúvLšº³Óôé§m¿ˆ•I[©~Фk’¨}$eî6ißH™HZšµÀÖÖšCT}®4@·žÔô¢íáô~Ñw"m!¿ušKQ‚tÚ%…'´‘§4ºe­¿UνҾqó’éÝ'‚êu¹‹Õy©¾$šÜÓÒ¹Z€e,çvÓ}“F_›'ؾ&K®=䬌x­¼VÇÚ«ƒÁ{mû"´ÅÚéÊÛks´+KX—ÐòB­x ëVš%i“0ug%ª’& [*éÒ71ý 3ÍŒ™¨é–º—! kk+;§ ÷±®vç­ûÖIï¦w¢?ö2aˆ¶@m(L ´,˜8.Kж®±m)Ù¤`5ËÚÛÚ-”6É–6M™>Ñ›>U~Ìfƒöíc6¼ÐnºªŽÒ…=í¶5 ¨ôó¶# i·NZ.›y; kV£/cPÞiKiÐ#i/çB_‡¾¤JS”é–Q·•µº­å…Á$€h>DÚ$½´mq:­•4Hz rú‰V1UVb2ûcNg[€Y@ÿ” éøñíIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Rom/BB.png0000664000175000017500000000640513657750470017265 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> IDATxÚíËI Då·Ü ã‡N²B¾h‹¹”@0‚ ~Jü4 ´zXYù‰—d’ß¾}•öýûß¿ÿùóü\cØÏŸ¿ÿüù÷縡Ÿ||üúõññ÷纞3ìóþÿ'ÿþÃèüüÿ²°^¡e÷)Þ³þ ûý°Ÿ¯äó­Ùjà}ß2ô˜³þPö3<&QÑžj7ð9ø½…Úú^Ú@og`wôwó×ú¾e õ}ÙlFÿãs¬yÄþ~øž=ý4ýÿaÙWåý;ûûéö9 Ÿ ®õï×®M1ʱÉkØ•þ–ònï¡5|œe“2xò$¿g°÷ïá1ÊJ~Iä“§šIÚ iœI<Æðh¹ìrâ½ÊrhB­Ç"2XªfÙ,ö¤ø8‹ =e‘r³,RK×®uM£¬…(k/nÃI”MÊ…¥¶vÇÎSú«ØDþ*QÉ¦¨ä:zÚ%?Jôõ„%ë†ð,üŠU’e’²c³,‹Ð“]齞yþA,E·0TA—ŸzGå°ÄJ|ö·«”AÖꃤk_¢Ðe¥Í±c†£lRO–ô·z¤ž,á:Î&OâîˆrhŠ2 ê³ VOïEÙ#ÝÞ+‹•üeÐ…+ÖÁ#—ú‹X(ƒ&öl†e‘2&‰JýgO> “ù‹Ÿ¯‚e‘ò½Øcô ¬g‘ul²–®]ëšèÂ;*å±IÙ‚ý°¬l*ƒ'µB†*AêÑô!zöô¾Œæ¼MÞSè…+;XÙ!`\v˜žzK»Â²î94±R?—†¥¬Ô—G»±=Êž ÊaÉëQ–ÚD:vÖß7>!zíÚÖëpe9}nUÑx‹Md·cUÒ?|ˆn=‰ÇQh¢·Â¨ä÷˜dl/ÎbhÙú¦f‘°²fó&X†”õ(zÌZFÚ_9{Ë¡ÍóìÉhŒB9,¡ƒù9$Êa)K}k®í®wØ\»¶ÐÇf¯¥ß<hsØXÚYµ’¾ ¡’üÞƒ‡%¿µCdÝ–,+Ëh½œ_n O2hRKþ²0=ïÄ Ë$rÑžcǤ,fËó ±W‡Ê ){C§l‡aOõeWƒÔaÖ‚=îñ²â½vÍA™bV»#¬uO¾sXèè¦\°;F¹¼R+érxŠʺ#Â'Tfe%šT’…¦çï–9l¢5¬zÐlÕRŸî—CSTê·ûì¢ctìÔßò‡XŸmeu1[×®]sX¤}Ö¢Òe“±ºìšîÔÜžÄU1í2+Ê$iÁª–ürhRK~¹+l}®ƒëgñë×Á5;Ék÷âck×ÈÉ2nHödaÌð5g3¯=Ý;ŒÊ­6ÑÀ Ö¬,cí§üëý$jOÓšøÁ6_«³^NÙú¸Æ_üZûš˜…,›¬•e×®M!ÀÚÉàmU¯a“ñ‹~žô/3˜ ª‹YPE¢·]ÛåW߆(ãâ¨Ô“Kc Z¨£‰ \&AA¨]aí©4¢Áha«n&¶–²dŒE¼8¹Ö-ý_ã/YïL+žÍñQÆ&Öåz6ŸV›CÍ7ƒV2(ÏÔÃÖ+c’hΣ±p=U¨TÙ˜\»ï Z¯lGˆJþ¶ªCU ³­I'“úÑ1ç1N:[Pª –XC­ÉÐKÙIvíÚ1Ê–Yʪ±²Gk G= ˆúK䥷Ð$¨°•gêA2UÑ å’½g\žÙv})B3-µ“>z•¼ŒI¢n†vhòr¡,"»t•úh¡”¶ã86ÏVù‚ÍRZ{™ôöD‡Ùž\{O$}ðxí-mí¥õl‚Ê#MÊ¥?Ë&òžõRLFÙDOèa:ÚÓò ìQGÓð”u7°é²ä’Ÿ…¦tª!TxFYE¦Š<©Ïæ«nKRe‘òúMY‘÷\Tê[ß/Û“ÙAmUÆ*Oã®oërý^»vŒâ,ØìÖÙv²€Jÿr?ITú³°%—þ,›ÈáÉ“þh„‘žXɯrè„ѳHec.kh4#ZXò³LâA“|¡ÏJ~ÙØDo`«±T&õUŽœ6©:pÊKÑ ,2L¦V9×®}9Y3I¬…zAV Ù1xÊJ4Áb™;"zsG&ùÙÛ4És±¹Œ¢9’Â4WÅ&å¥hXCÇ×?•ÿÃ} ìÍkì-h‚ DÓX©Ê©‡•´wZÏÊ>¥¥>Ê"òP)ô‡¬å¨Ì奒['D¯]#'Íøž¼&¥ëßQì%„6xbu û{å’Ÿe9×;kAnc“èÜfXTú—ˆJþ5§l,—¼Ø·Ú‘£hÑî¨ C“Zò£µsÒ²=WÃ_%õÇ…jt ¶¯‹Ñ;Lò½ÙÞÞ‡PÙl~‹¬­_b­kë éÚµ-³z =™Ãb“±¸jo¯•×óNFÑÒ[l¾ÚடtšÓ¬äg¡IæðñŠWŒíÅëά­edMV媂)2hÊ2 Z2m Zu]ÈÛÜÑü\åið³,Ò^H`-ƒx;Ïzx°t­KúùE,éÿ4ä¹.–/;ÙZ‰^Vù²H¤,›”§šTIÿrUߊ­²!Ûí“6°‘}…kŠ;¶ÓÛX O4ÒuÃʳèEYă%YrºlA©réŸÝ×\nƒ¥52ëäÚ[À|M¡”h ÙöÚ±èe/0hì°ˆ-ÉÕ™Ô^Ô¬šM†zÎ@õázø•{†°™Ì¼-wØd™$\Ï=Ë$eª=Õo/,š•úe9€YCÙâ¶eõݽ-dåÒŸ]¯Úaéu,²æÓµéÉ2ŽëØ„•òã¡ò轓± f¨Þ«Ê‹²‰¼ž1*ý£U×ÒLb½"ï³ šTUÆËܨägiM¹îî£÷H¼#’t¹ô,“”É7Vêg¡)Žu;´Ed¢në{e°#í°ÄZ~wþkŽÜZËÃkeL1G E;kÆ" YiÉ¿š¼'÷þ0z¦~õÑ‚óÑ(¸vÉßæiŠB‘‡å²,";|R±Hù5ö‰³5ee³XÍ"²u}ÔŸ"ÀìÝÎv?‰÷„ã rÍhÿkÞ‚ñ3J…YIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/0000775000175000017500000000000013657750470016263 5ustar jamesjamesnetrek-client-cow-3.3.2/pixmaps/Ori/DDBC16.png0000664000175000017500000000243613657750470017641 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>©IDATxÚíQnÜ0Csì§Çé­Ò4€‘BÀ€#¯4zã% $Ù€+Ë)iè÷Á¯/|~þ\qøó…Ä®+®å>¿ñsÅ´äÕb#ALKšà«øý…ÿ ]×ëçå¸Zhö)Ž>·àH$"8v²¾6ÞÊèGŸ[>έ&¸lœŒŽSÛE躎¿/'8;—\Õ——\5®]à}îRA†Q¥¸±X>îíò*x…mu—Ø1‚£ª‰ta±¬2.7OwõvÓ›%¸Í4e¥~tK#O²|MuòÈ‹lss³5ò"ÛÌÒ*=ÃÎÉXbÛ<È㉵¬vo†ûæMñÀË=ÊøÕªäQ¶-`*éÀm²KSÛËÍ“"6þ^¹¹e¦iÔÑ7V’Û>ÈØ‡²jeüBQ‹–m…E-®ºf Æ®j)/‚ó 8/‚%wË'{Ãxª Ã<µYÝyŽìL#gž‘H$\•ǘõ&Ñÿ‘w(¬Jò«Ûîî²Au…í2,K,ºÕåR?ÚÁ¯¹`ð‹Gí–߯¾‰]ÀÄ-ãÑñÛw½É²‡·Ön31"~l;öî\lÆÓ”¶‰®¶8ॢxoô>.X·•oSl€-×ÈÚÈã/³D• Ý%šõ"Ç+Æ–,?ØxwfÁ檮â"ÞÅ)/z| ¶1S¸@Ämq.mq°‘BÑäŽ eR1±VŠèñ`0%<1ÑjY©<œî®´wFú*‚éĈ»7ã]ú3Ñqñ±÷m^ÐæÕ ˜—W(E}üõª/ER¿Ì4eÍæ4Ѹ†1K‘ø&x×{`M6J-;íÜZ‚Øø±]`±U2j™‰RÒÿîx¸Üå) Ÿ-Û?·Œ`$ù#]Xfžf%ö€Ï6‚J,”»º¬ÔÏöÙryy‘r³„ßi+ñ±& ÿ V{»i0– RÚ&6+0%ãêŒ?æ!Q§ÛŽŒˆ½Zó>þݶ}eš¢Ï-oñlÉHtû{ì²õ"Ù:”m†=òÇÊ,mÛLœõ eã"Öƒ´©ÿ°r6 »»&ÉßÇÍ6SåÏ`¤?nÇ=’QØ9[Õ¼—V5’þÛf¥{9±¬’ކeš”í”ãX6'KÝjõŦ£<¬ìé6EhÛ.çê)Ð0 Ã0î™§ãáïÙxü2—׿}%¸w?¨—Ul¯]Ê Ö2é'ˆ¿Åí’Ç 3غÝTg†a<ÄD-“Y˜Ì6KÀ#aÌ"zV>a¶!aÌFN˜­°ñ©Åo&¶ÉúÅnhg}4~]wB]6 £ú)ÄÃØi[*‰9èmÉcGå•zÁ(S„)טmÙò‚—6%CØ¢«6ekØÂ?5¶™³±D±æ/ÏÚu ©§‡6QNl\MK)¤$¿jñ²¨]Õ¢Çb­Úƒa£Õ°átøx?|@b±€élCÔI¶ßø Tù\¶y¯«NIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/plasma.png0000664000175000017500000000050713657750470020250 0ustar jamesjames‰PNG  IHDR8aî>è vpAg8H1JbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÒIDATHÇåVÁ €0 tGp„ŽæHŽâ(n«ÏÁq×RP1ŸP±Ms—^2M£lž·j˲W‹Èµ½¡”£šqnX׸ ±;Çç ¯ˆžæ–Ñ¥¨*:ìˆöFF½â{é¹!é¯o—ÑH‰&z RžÈˆ—è6çø<vn¬Fs-Å i°_G·Xan/¦+ƦƒiÍ•ñ'_ÇŸzÓ»Ô][¬PåÆw«ŠU÷d…hÊ×ÁP”t°Þa·rüñC“Us©1Z$(VRåXÄæ+Ÿ¬N¼)Ð$—_d*IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/AT.png0000664000175000017500000000174613657750470017305 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>qIDATxÚí]n#1 ƒs´Ü+/9DîÛö¥(4˜±­Òóñ¥Ø-¶ËŽ'²$šòíÀÿ¸ßŸÏ¯œýšNèñx½¿ÿð÷Ïg¿¾ÿ;béD£ˆ}"NìýÝ:KäèçÉ<¹6‚£O¶ŒàQx‘y‚2KË?Í£K¶ÃÈjù­Î&Yì‚£øÖfVÖpÂYYM:ÁÙ5lë[%PF0‹P{Ê?J4<œØM£O*ŒàÙ@¼ú „}Ók’OïdÛÒŽ¦øéK™E8,œšJt’è$"èlžW¶ÅE7ÑÓ:«¶2DÁ£Du¶&9û÷áG%¯£Ÿ›.CÈMÑ]ÿöø×G ÷ëmuö: Ånk}È7äÚoY§<Ò F§Ye2Dy>•ÒËœÌØjù­nàü$Ûµßd˜ò-`›&º¬ a+äÈIa²b¢¼;ûNr?Iaü$¸—è$YÍvb²~’òƒÞœåö“ÈØ5ä /«UÝì7Yw˜ì}MøI¶ÕI(Žp~’ì–°¼Ÿ$} ŽüH!›¡Lvc­dƒÙŒV“N7úa)ï—½Ôe[~°;¾Ecè9ý¤IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/plasma_det.png0000664000175000017500000000105013657750470021076 0ustar jamesjames‰PNG  IHDRKÿs vpAgK÷ ™bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>³IDAThÞíY[Â0 ÛQ9Gá†cUËNšUj~F7 ivš-Ë”)Tn›¬ë@E÷Möëc“ÏõiÒ¬/9^Ûó2O´?j;|+Ú?+nÏËCàîøt—‹1º~XVO™ò¿¤0œÜu7{ábá:íü*@R@¬îf©ß¬t\—³º¸­QÞoŠË:ærTˆlUVhK®ÓëÙ-¯)SæÑåPŸ.Ød¡ÈAÕm9d²âšA©h ™Vã÷]ÚŠ2×2CeRª2Ålgvr1—à)Q±“Êúp–ãÎñêÆôpŸ¹ˆ)P AØåÌÅø‡*ùÂHÇbìÖ÷é€Ùi”³ÒåøµÜ04„Ñ\Ô`ú}V6Šg]ÚQõÊêÇ 5 $ JqÎc¥0:9÷Re# cÕì±Ø¦³“74ÝdÁhÐ}Îz±´”¡i„쥿°««g×çíá*ˆ>ÍQÝ#ƒÎtR¹s,e@øÅbå¡îXg]iÓ¤KüQCãBuì-ª,VƒsÅÃÊõÊ }.v›Àð¸I%•ê4º!XM¦òWù1ÅO&5™à7:IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/DD16.png0000664000175000017500000000237613657750470017437 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>‰IDATxÚí]Knë0 ìÑ{w·êö­z…®zŽÞÄ/@aQ̈”øÙ3E›Lõ¡f$‘~{#@ð÷†ÏÏmÛŸpÿÝðõµmûŽØ÷ ??÷' ѽK[‚p]]ÞÅnøø¿XK°÷9Ã]èÝ‚nC`‚½l'Ib¼|ß¶ûîO)¼Háæ™Øïç:N“G¢m—JÄZ‚Ät¿òþ, øHT;î¿Nìx°Kqmÿ9¬x âl^–àóJæQÒvOK%œè¨pM3QQÊ:}Ç ÀÝ=ê@/bŽînLò'ÆG›Ô/ x¬¤­^$|÷K[Z/îIz_^ÚvBÉžDš•e&é4ê… "ÙÌêËé@lõ(a.oô?•céÒ?Ð<=ª«ôOð&¯uÛ•e¦Ij™òSN-1íàßg½›«“ÆÜ.ñ »v®…¥YŸ.h{6ewÚYýlŽ@= AÄÕЮîwfõ!P[Í­­ÏK£»x˜#¨¿¶$ùG…®›Z±JþžNt¶í¬l•4ÜÍËAx©³I4: ù$ñ¥“¤´&ëÖðJCqU¼^QÊWŽ¡D×R6e +³¬BÕ]ò[õ¨‡q*pá»~’À‡™…õò-KqmOR¾y¿ý¿ÙVvÁm¢ÃC,s{¦¦Ú¿A)œô¾8}…= ¯ÕqõBÄÙpœGRvN,é:kölšäïå!Ãt´äM$óäÖõÖük5©´´+’ü½<“4Obí²ð™^R?,.zå…„¥­Y/‹µ³><ÇúÌu'‚€ÛÉq·×ÙJ2QÚ¥«gžÊ—@xó$É2É<¥·œ– [WKõ²¼ëp¹u™uŒ¹›&í!áìV‰c>îêr‚q+MÚužA€­pKš¤çd¢ k0¬Xª³2«·—=,ù{ -VÉïnšà Âwñr“dÙ0³L †ÈAÄâ›Ga+ ìæ2[À­ð„ÙDï)j¸cë?’~3;$`ŽÂz^¤Lâk£@Z×ÂhëW ÐÝ,‚ ˆ³þ’-ü5垌šõ:î- {U~V÷•í¸Â¦khÇhxÂËiR†Ê’®´Rææ%l⟠°ÔI‚ Φ´a‰-Së¾j<\9ø‚8=™u‚îIø^D¯W ¾´ZOò—§k•3ly?IâH|M¨Ääbê†@Ç>Ôvÿ"¥›ÄIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SCbc0.png0000664000175000017500000000033113657750470017660 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>dIDATHÇí”1 }¶Ïñ9þª¡ B©]l†Ü"Òå $­8¦",&@Ñ®œbögįBÑ[ÎPN!û3âk­'xßËÚë –·Ù›˜¹ñ†ùn˜ˆ³÷ï%ÉÞ)1Áfœ4Åm LIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/ASbc0.png0000664000175000017500000000035013657750470017657 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>sIDATHÇc`9`üÿ Ãþƒ‚4ô„ 9FFñhÓ;O2=`!ˆî=Šq©£¹Ã(u Í:hKô„,&Ö0yªe¦!ë@ô¨Çå@\êhæ@J‹š9ÔV7 FÑ_ü”d¤æIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/ASpara.png0000664000175000017500000000337113657750470020144 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>„IDATxÚí]Kn[1 Ìý^ «l»JUÏ‘›¸.Ї L‰áWÙäæ¡nl¥÷¨ñ£——g±ïw{{»Ý®+ °ow{}½Ý~Üíýýóz½N3r¿îöññy]6’Ú]#$É«6’é€>@N­fê0P믿“÷ ÷ým#â2€Ý÷`Àì—”#Áëßi€r$4‡Œj\޼àíöçM_¿À ½®×÷¤j÷š˜üœç(¿À P{ *Ÿ¶¯÷Òç_ÿïÞ•Þ! ÌëŽ~þü ìºÒñ±§·å÷¤—ÐzybZ$YÙÍ2­bý`äÀ5vD0Ì^ª‰«—ȆGÔJý‘º³>TaŠîMÀ[§ÖýðH6ceÔ¨W£”ñAD³¬O«û©®"ªÚÔ¦ES5@m+$ P~@”I—S}ôTÓüJÙÿ¥øV Òð2Iñ­}™‰<)À±‰“<Œê¦9î6ê_­Q¶ÝcíE’‡kJ´©Akp@v!`H“hÛrå|P“írSãƒVY€ð×XH”zGÎýTG©¾×¿¥:Q ¢ ó²¥Q2è¨H* !æ¬Q|tm'r÷Þ „†êÓ“Áh´ÇØxŠ­üq9 å##݆FÇ¢n) Uë¡5ÙüCQ|¥“H†-YSÂK—¤_Vê_. ¢ÌÚûÿá(hÕ¦¹Æ´ËR£¼ÀäŽAÛ‡FP­×´;éÕ¿é4=+µ÷¦)·m¡í4Í·/(¥9öåyÕZ`F.‘4äaçØ«iO-ÊqmwЈò[µ-qè‹£ÚdÙÊ‘'d B•7ÚȦGÜ›~‚R£äëòsÝŒ;ˤ³ª><ô駘þ!9ÆÍÐ;jú¥Žž,Œ=ªp§ßú Ý<²–a,ß~£ÝÀ¤ß¦ßD¯ C´•«E9åGtÍ Ð CÁBÜ}+T½1¾°[±†cQùZZvv´5àiÇM—]“ii˜¶oß?c{HèµÊ¶QÚ$Ûlšr»C§Oô¦O•§+6 /× /x¡/B›èÛ‹®Ð”Ó”­¡¥¬ÊMmkNb¸½ÿ šúe≞N$iì”{t¹ k¥AÛŒ„¦ß }CœcZ Ñ6e²­Oe#émµëÝ…+r¼­Õ¢Ì¹½9 älkœ-"ѤMWë/D2´A{›°/o1iº­Igè²6§/®ÆŽÕÛfÓ¶§oÚ>}ù«Ò½@xýñÇ beÐË ñRüåZÄ»gCw Ò¶ƒ¤Ðl?ŠËû¶i¯Ì¤;nâ$c«L£þt­4LЍeÀ¬EЍ¶‘ï¢þ´µø‹›úkŒºJ“¤Å¢üÑxI Ô Ö¿óNqzä¼;¨Ö:y«”ŒæÁhj.Üó-ºèVšõX#IÚ=Õ.7£S[–Ñì1GíZ=¥ËŠî½ú·]VN¼cìQ´Êu¥ì(LA •m´‰(+M \â©\í¡B>/³.SyÚ=•¥þéoï/³nd¦åg6q;ƒî©úàP¯>.ËÈ´ÐölʃŠUååI·U,ZÙZzJ«ë@ÚšTiv±´ìÔ §•'c×*ÛjÞQß­å™—t}·¬ý³cO'òD-¢UÙ¾\e+@T<µÉP9^ÑÔPÛ­öç*O.ój6u§µ§ÊŠ¥tùnˆ·ÿVúø#k5ƒµ8ßêØÃŽ9{pJ ¯ÕQ‡ª óíäa{?.éÛÚ´ŒmbÖÚöZ›ô†ø½áŠå[[â蚸[†•ˆõuD·Â„UK¢¿ÜÛ(vÙ©Ñã=Ò≠ýóçfèõ1K-YKú¹ösŠßúèÚ IDATxÚíkj1sì'ÇÉ­XHMK3šîÒnÕŸ`ì°½š×W£×‚ã÷7__à¾þ,ôç7ÿöúÙC<[Pöo;¿¾ù· ×ÏâŒ×U8þ¾íê l¿š£Û ævݘÇ7æ¯þ¾ü"Yý½â±ˆlʉº‰nÒí&8'ÝS¨N¢“t¹Hä$mê"ºˆ."".O¯û Vž0¡á'Éܤ­Ð(`:t²È¹ZqÒ4Þ>Fi]QAYÚõwåb<ë"³Ï^‘æ`‹»?âå S`æ&íÏêWÄÇõDÝ‘DµGþö–Ë5ÖIÚãWömW+ÞEf£>öí>ÞEDDäMä Ó±åDL mú³NÒ^`æ$cGNY¡ÑÈ#¬,-ùúe9qÕEÊrâì•·ØjËâ’5¶ÅtQž˜ò4††Lš–gÁ´­¥¢ÎÁÙB¶å¾Y'iÏ{Qo&&/bôà\Ä¡O"""g寲õ²‘M€Ù^ØXÐU'ÙӲȟòX—Øì7ŒúMpÁè"˜ иBŒü"""Râ&3Fþ(~E_nÝ(f­ÎQʤ©ÌêV×¥.S…ÕĸHYòÎÎEy$fÍ:I›4]u’òÈ¿ê$eÒÔÞ‚ÇŸƒ""""ïù±`ÇËìJÔå§By?É®ž¦6iϽ»}um§€²$""ò¡Ñÿ¸Â±NÒæ&«³!Êsa6çê|’Ç™yT6#çêÅÒ>,望àq1Aï]ÇZ>2ýîšGå-Ò¨ òS [³ ã$cÁ³«)·ïÛ9ë$˜u¹ðKŽÏÊ’Ò$"ò©ÑßÈ|‹ÎZÜøJ“÷¢B1-ší>ÞÞ¢Çl0Ÿm‡‰q’ÌEp´÷0ͺHV0¾EEDŒþïýg·Æ·Pû!Ϧåb"¶û8¦%±NsÇ: >˜âZ_îCv޶¿»Q–DäSÜäøè¯›Ü=Ô˜gnù1ãb²1ù:É]OÆ1ö´wà+Kǹ¾ãæ˜EKDDGÑM â’4ö¹&Åd‘×5†“¦¬@¼‹`:rV—T3 ®Þv°‚—%9Ý=°}t“·;ÄÑ‹KD'1Å$N¢‹è"ºˆ."¢›ýu“­Ïà(å´µ N¢“tÍe?ÆI<´ºHõ9("§Ó¶ë®èï ³»Œ‰þ㓦]š¢‚0 †a$Ë…ífÓ1Úmñq“î±Nr{¿Í꨽Zú"Ò̱nÒÞbXyºÉlx(/, Ç8 æÍ+fAØÙ}G0·Üü‘lûÌ~#øn|""ºÉZÃ9 voÅÕ+ߢç&Q‹eý'˜´S.M«{!¶µXÖýÐ~õâúG2çÐEDDDþ ¸Å±n‚k©«k_>þEfäq_ÎZ${w]vÈg_ž—­ª<»O{¹“d-…‰úøÑ½"""²l1Ïvl!Ç Ÿm¹m-œ%éÙñ4Û¥)‹ü™“3ú—}ð®wÔ è™ü«_´Lš0óG¢Â±NqÜ8¨p¥IDDDXÑ¿½ÀÕ>å1êêlˆñÿ—OŒ¾:Ÿ$ ®å>\>#窋`ä8çP–DDDîE~|ôǮܓå¼ÈIÚ÷«‹öÐŽ¾X[Ñ©ÙayÁÑ¡Œ i;°k¿µ{ðS§€–'""p8®@Lô?¶E1{DDûÔEËW³]:nsÇh÷ɶ]Ý#§½Eg moQ¥éãZTDäô蟭‰y"`Ýä˜CŽÛ:âmœ“÷2'Á]ÝcÁiÊ&ëã“s{¡Y¸‹GY‘›¡ýñòtŒ›ýW #û–Õ«W5.4ã$˜«;_ˆ“¦ìÆiÉã]DYÒEDt”¦Â°Ž…ñUÁ¹I4Dê7Á¥\Ù$,L’Ž\cuY÷,ÞIt‘ã]D‘Kü#ô·@”jIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/AS32.png0000664000175000017500000000633713657750470017452 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> jIDATxÚíMr\7 „sô\ ÈÊÛ¬’#d•sø&Š«\S.QƒAã¿)›)+±&ß#ûHà·ß¾ŠýùÃþþûííñIãØ?ìÛ···¿~Ø¿ÿþú|üœfäþûaß¿ÿúlIé‹#t:v~J#þh¿àœÚÓ1tªÝŽ¢ññÿÏ õï— wŠÓ¬~ËŒNqºƒçHxGðñç°ƒçHH ²æ ´€Ÿ#ïXh~ÿýííã ŽiŽþrìç÷„”ž5«cGî«9x~ê ô÷¾wô|ÛΑùù_~}~|ÖÎ…9ì˜m9ú矟Ž=>étáÚ—3:F‘¶ÂÀV–«ÇØ$K¸Ž;èe“rxB…kºôÏ’üè§;ø0hÒž¡v&Ñ$ÿ8Õi’ÕƒД£¤ ¡©Fê—Ã’Wê°&õ ÄÞrE aéµ ¢±H;,­­eé½.!K#ý%F)OðDÙ¤l­¿XÛiÒG•þš¨HŸâÓ1/›”%tP*“€½MÞ«- !M-:¥1©¯½ …ÐôZQ[Ó‰Ðô|ä²$¿Kág/:‚¦çm–Ô/SÔRÚ†EÎtƒÄ ã,r2‰Æ íŽyñu¥ûK¢fœM²"°eŽi¶ žÐ)Õò&e#‡:†Š‹ðJ[–wJ ¦“ü(›´K~”IySÔ¨P-X±è¾7?’Æ$3xó#Z'¼ìd±HÚ±Jqç^.má)ÔE¢8«Ð Ñ¥‰¢€;ˆe’hÊ žkx醧èí‡2Š“¤¾&ù³’„n&AsríÂT‹(X³ ,•ºEY¤|KDc5Ò‚?&ˆ%ÿ2ÈÚŒÒöÅèºÞÒ쑃×ç­FÊw°g'å`Q šÊÅ‚Fk$àéµäG3Ö„Žš²%ZJ ž{™DšbøÙŒ:(MqÚË¢I}+‹”/CVÉ?¾§f/Üi‡Ì²X¤`K|½õÅ 7í°¶v«½–þÞu°Mú{iÛAÆØÄ*ýÛC%¿–/AÞD× g+ê(“¨/½ƒôSLÿ’\³Ì\°P“ouˆ…µµµÏîä¡ ‚Gäá7º&}øš :m‚>‘CŸ ³JýödâéXò„6*õé%=Á¡Š±±²u-ÿ-'uŒî€ã5GDiÙÒS¦=èMTžþ²Á)è®kh’ü ñ•¡K.]_[{-ù‰.þÅZ)¤ßÄÍÚ¦%AKW¹{¼”m1úr.ôqèK Ñe",kE_ì’ÒjÄÅé°,ïç›z”E $æ*æÂ“Ÿ$½@Wætm…ÔÇØ„¶ä8mÑökÊÞÓ63£m½Õ¼¢šr$a"'Ö@¥¡©#å׺fŒ(QŸço3Úšµ± RLA·5’ò®[í­¸Â l,e9º¶¶ù“n6¡mÍJßÜ–¾=0“з¨¾¤É7q›tŸä`’çϤv GSÐéªêK,"l™‚F™}fÇE:ޱHÕY×t‰ßK…vfm˜Qší¡°µÛ_ml"I´H¹£§^6IsPÊ,¡Jºž^Ó£l€'LQ{G2I06ñ6ËÚ*aÉ=°“Ã$¿Æ$å- µûèu CÝrÊË$è»§u½Á3–v@ô1©Ÿ5ÕåJ/O9,yl¤²´6kgZe”6ˆ:¥¿Ä(…lò^ÍdKÿ°äG§Ð8•üéÐue“@æ “þV¡šv NRÔR¢šžÿ틬Ôt¥ÿ¯E¬RßzÇ©ÌÑh°¼|$½yMI§U—÷²H¸Ãi–£Z¡ìqùuN5MïœÂàÐÚš+=¡±I½–þ(›ÀS®ô/€§éÿuô2‰Qn5ÉŸ•Ðqo…šä÷2I4Y[(Ð1 ÕE…ê˜ÔN1=‹”3IÖ3ئf®c‘Á2ÐË kSö\úklòø,w ­C#±I»ƒ^]ØOÑZHmÒŒM²$™ƒY’¿,ã”­¨Ë¡)K°¦CSUlÚí úÆÎzï´±*õÇY$:ÅãzY¤Mq{‹×-ƒ¬e YZÇ´…ùd”1Ç´k¾6iHðø¤¿–ØIw¬ž‚ ²$ý½éˆëhPòg§#Â7u²ÏÍH#˜MVÑ€B“{äÐÀ¥õ>ÉÇŠ=Α‹²ˆõöDYú!Ê"i ·´¼XÏj•É4ôjxöL¥Iýq‘¦Xjo4K4xI÷ÅkýLBZ_k¼õ —M$ר‰IÿrxB‹5Yës¥Ç`Î:ZQ6IsLR)Þ|‰,»’˜$+_bfoý˜(4¥ÝÓ*ÖJLÒM(‹¤Cª½7±åtl±Ô·Þ)«Í‹”ÁRÖåú²‘‹ÖÍ¿„¿iŠ5>F!g‚—ÃÆ&mË·/I9<¡Ñþvx’ž)&ÉÚ«ÓèÎ;äÑCfé±jkÝUÜÁb&A»k¤tôvÍ?ý˜ž–~@…«äpxJ³:·$V¨À–o»£ôÞˆZ&iŒEÎ_ì=ò´å¬ÖÖîÉŸ¼Î´»#õk‡' Ž´?·uÛõ²I45¯{èzWмÂÇ"V6)¯&ïÝsÇ×K+4•9¢ET­ÖÍ$’ŠÑô!úi†&IQKú0Ê$fÑày64¥I~­y·¿Äš1„N±¦¼ÛB^ÉBSûúØv ¸_ú  Ñ‡ßÆ˜ô!`ú :}âšD}*Ìê¸ôó¶db6‹¤ÁÒ5 mÚ#^ÇÛUÄmaimÙä®äâu÷éÊÙÒS¦=è}ÍQyÚË’Ñ]×Ð^ º /šãíW†®¿teåêôkkZöâÝÕIëŽ3~ùÔË „$9¼¶Ö“ž¸–Mʾ€®É5å\h âh”¦¤Uò·e²*hÚZÀí…ÁèK«Ñ§ónamåý¬R¬@¢7¼Ö^bR›Rº"š´§»Ë¹‰›µ[X¥ü‹èJŽÓm§/{J눦Û£o½àm^ÂRYmIXÞþ#; †&¯äooACÛÄG[¿hZ³¢ŽŽ7’’¤>]+.MâÓ43³:JÌ"kk³ŒÑ~”¶5+}s[MúÓ´¦o°LÓ¢úÚ&ß^&k“ŽrsY£yôaF™Õ‘n¥·ÔË"úý»ÏÆ$Vi_NsÖ(þ8,yYd–^;ºùµO—fˆ"ªÿÊ“vM^µ;¬©—1Qé?ö £•x46 3 ú½S>¶—%P¥ßnUm ž£L’MèD«„ëiS½?’æ Ý÷&pÂ#)-Yu>&õµ=qÁ~® Qi(¥öšE¤·³–l,òøy#$IL²öÉ™„–M¤·Ö{„ªMú£â¢ÜAmÇ(gMÅDÏt•I~I[ƒHåL‚ª—1xBkÙ2e•üèTŸH™ƒèž/U˜ê´è~V~$|ÚM“úѳZ‰Çò^_l΂¦4£,Rp°1×ÁËXXøÚX䬟ÐX¤ó§£(ƒ $nÖžÚÿå4çÉM9IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/ASBC16.png0000664000175000017500000000235113657750470017651 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>tIDATxÚíQnÜ0 Dsì§Çé­¶ÛF )‹Ÿ¼3?F’Ev Ùô %R__Ÿƒßo¼^?W±×7~®¢x‚~½ñÐuÕkŠwàŸ7þ¿¶àHàúyœbësåÄV –żnzï‹£¯¿§=LǧÞ"h}®Œàj˜)#èýÃìÏ ÂÇy,1¬>Ä Ù1Àc-& [SŠÚ뺘'X·)ç,E]>r–ʦU%]Fp¼É³¤~:AKA[ÄÚÜœ'ñgGx[྾Èò e&iu„ËMÒã³]wGZ„!ÐËDÍßñe£/}kÄÒ­ÀøÎæËGÌú‚‘˜%«ÊÌÓ]b^ C¬Œ`ôå>«¨·ûâYbÛüqÔ$µx+ÜD½J;ÚMRÔ{àˆá +ñå=A€†‘ÛjÇË´Z×(‘éµ<‹P4m}µòt{ÁgœJ—4·^eYØZ„|ÎJ}Ï“xî.LO?ÅÇ<$Ø0ƒÔøW Ÿ¢´qÄð©lòŸ~Ã%0Ic“èÖÔâ–!¢ÒÛBv)ì˜ÅDpÛrììÔgßÛ‚ Ma¨Ì à€Ý"ê鯶JDÜ6åÕÞÛš2µo•ÇW®+xÉ"Z^2 /íEWYR¾¼l-‹è±#Š­ñ”›„S¼JA|+öf$Øv.ø†8ø–BÖHbš2yÓ x»ZÁ·V»ûá³$fEõ—Y%ˆïÇ*weØ–ãÇ4m?¦í½N6Ø¥¨uº†Ggš<1€9‚›ÍzŒ0Õ9Mšân¢ò SÚÇ[öœ n¤= `môÞN,ªœ£›/Ú„«·&Ýd)k«6ªLQãÌÓª'Ù–"¶ÄÂ1'¿´w鸣ÕÀ­…šÇI{­ò*‹qÛÑSJîY€vD½‡µC}›¼Âíñ·”u{•„—ÍZ%V6õ«•:åEZwkʈYRÿîC“N,ú^uXÙˆa+¾`EÙ{A3QØŽß83…ëÇ…o½;ëQÚZñzõÆV³¦6—íÓUžvórÖž(“_^¯àÙŠîÛ÷”×7Ë[‰žèÞ‹ÞTE³úчÅúÿÓDg{¸yñ0m•³*^©E¯ ‚c¢ÚÜÞ¬pÝF~ɶ#f™È:ÜbZÒ{]³9Ÿ ~ŠyHfðú˜W ‚°ùå_õfY&†K`—Æ%ÑgG¸mböáÁ,äÌ>mKaQ/‚_LÄ,ÇâMÒü]øMaAº”µúfT_ýªµ>_¾UÞQL±'·pu$AL] ¶d[tu\Ù®ðo¼g°¥“QŽ9NæèqJKL]ò²ˆªk|ÖTc‰â³WøC-pm­ðÁŽi­†oN‡kïwLƒDl‹I‹ Vaãß òßø ¯à¼RP›ÃIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BB16.png0000664000175000017500000000333713657750470017431 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>jIDATxÚí]KrÜ: ôÑ}\ +o³²àUÎá›L\åRM -Ùt€ÊyzR)’Ý>=ý/öûÓ^_o·ãJìï§}|ܯËþú´——ïÀÆëqß´–ÒZNkÉô–•8üóiïï÷«ÖÕi@µŒÀÆkÀ€ô À¤ûÆûÝ@5€Ò ­÷»z_Xu¿út° ƒ# ðééùùv“G©4j­÷ï ”hó v_ Ô{Ÿ˜ ¿€¶Ú¢ ÀÎŽ@µoPú&Ó¢+†u”­ÉÇõëÑ÷«õ¿O£[oo玟F·ÚVKZ`Ó5Š4¿5­RÔÊjÊEJ\%RÞ‚(õGWš4•'½Èûÿˆ§G’€>È*žÂ¿Ó¤\ ï ü“ÖØL¹ª“€jÄ}qà#÷2iixŸúMyJ‡µ•âûESsF)¾.’ÒÄÒãü5RwÍíV&’$“¨ý¨=¦Ó>…Q{Œ?€–°¶u ‡ÐH³ÊˆUhZ% (º¸£ÀbÌúèJM£Xy£™Q{©¿$ž2ôš°Z?0M,¡DT& Ÿ€[Ý¡D¥üÚtS0{TÂ÷ßF”ê—©:‰ßYE’ ,75UwØÜu—G»¾ŒY£Ô^¦ú“(¿Ôõ4ýš·µ +Â8ª ¢s¿aú 1‹¸jÓ’ÆÍ-f¥þ#€0M»ßp½GÁK«Ð5\jeÔZKZ÷8˜uÔƒUÝH¼Ô_êúðôs8"­L<á0¬Õevܱ:ie@M¹».»«ËVmР>ÑåaôÒJ#­ÙåÔ^Zq¾/mmmì6º4Îùã´xˆÈ»g5= ]‹Ë<«QWð45'­½èZ‹Š'IݹYLöFž°ª«rù¢?XUu´é»˜~ÐO3ÛLÔôKÝ6d¡­­í§wZ×­óˆÞýFëÀ¤wÓ;ÑéÃôœmBa´ÁDúp¬”0 }Ý¢D[®¿-¢MmmœR€fÐnp¤Ý"J»É–~›rÕFoi¥ ‹%š­òÛ$DÓ5¤T pºÆH«¬”_ á„—,¢:ÑWMŸtuÞåÚü91míºE²\(Ó‹“X–ïi K>Ms§µµ%}s4e h AÐ•ÒØ¦ }9â‚8ä%…Pº¼(Óve­ˆ ƒ3iºÒj§Ãô²ò~^Š?½@"Ú%ËJL¢Ôž¦H§õ‡ÐK¥m«Ã4åži foPrœ¼h;qÙ{úƒ69zöð úã?èP¡?‚†þ”A/;ÉJñ—$%=æ(.nÑf†jZ Òœ'‘¶~ŽZeÄs¦­i‘øt`è„}/˜~0ç:ÊÕ^å×ET°åÐøG4LvgzÜâÉêYEã'e!1í~o<Å Ôï@Ó8ÒZÐKõñžI ¦5­i‘r±„STƒ”D)þ4‘d ÔH;,§3펴íªU ]W¬(¤ú6 ]%1UÌKPË>+¿CWœp×k‡^àR×—û¨³º>}¥ˆ&ïÃ,Ǻq[Ò$^Aï(e/DåiõG½úÖoÔ LJ÷j I?‡Ã²¨ÞóIt9f 3 Z$ý|’,`ÓóFÐ4´íN_kkkêqMËzëo•{·¼%(%•¦òPZe%ªPsˆÌ;ñzK¹sÞ½-íUyáoSK˜ÖÕZ!ˆhË…äòEwµeW>ƒå(åÏ®ã3ho\DÎùЦú(q•ÅRPnJI¥ÑigYÍÌåGjÓ:-µµµµ%€Tš| =÷pÙ>jëÚk=çxÚ’W¶w+zd‚U–ÂŒZ£[Ù{¹`M‚óëVuôé»x›A²Í4³ÝDM»ÔmCÚÚÚ~ªÙÎõ1ÍyDë~£u`nï^îDß& ±M g›PX6ÕO &Ò‡cÑbY@ÛJñ—o Z”fSn$ÛRÚÚØ¥Àò/ß"J¿É–~›òa´½·Ù*O—l@Ÿ®AŸðužO+AŸt%¥I[C5ÉòÄ?‰1Ó¥NÊÔž.ùô0Qú®Í§ÓŒy[ŠO Œ¾B7])m‹‘,+çB_g»’B£^V”i›²V´…ÁèK«Ñ§“4My¿(ÅŸX ñšâ”˜Ä¨=A‘N (A™ÓkíAT(vŽý‘_’ ·/P^IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/DDBC32.png0000664000175000017500000000453713657750470017643 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>êIDATxÚíQŽ7 D}ì'ÇÉ­'ÀÀ†”š{Š?Ø^oº%Õ%êÇï‰?~ÅÏŸ¿?qñׯøGØç×r?ÿߟ˜–ü´Ø*Ó’ø4þüÿôùüüùõø´Ðn/¶~®Là*ĸ¾×ÞµõQZØú¹ôq.[`Ú8i \§¶ Ïçú÷×îÎÅ×f½Ë鳯µõøU.H¡ø:FY§<Œ/›H`—å·ü`›ìZþ¶Gˆa’l˘ö xVßb‘Õï•ASÔê·³ÈÓa/°–²™°V/Pôz6ÁFúðRÅ(xg-x:6†MÚ-¿eýË¡éÔQ{-^&lW`“DÓÖ#-ƒ&K€g£¢,rÝI[LR–À©b윌†·úxcXK‚(Р܀=6-m¹ë-Ý"U.Ìów^:¢ŒI¬Þµüå-æYþ¨°2Ë]Ý_…Z ´ò»ÿ¾,s:>EY·}¹,?RÅ"ë;(y:ŽÊ*‚§·ÁÓú{Ößb“²Þž²ìVù¾™S&I·[ž°õï¯í~³,|”YÊŒéú²F¿±eñ˘äi‹{¯Îfá‹,Á Ä&n°Â¬d¢ì“D¡P'ûÿÕ®´Ýó«¥ße“ã¹:*Ì2Ÿ™Å¶ O»-µË$Ç.Ç;ÈìUIÚlWûv¼¨Õ÷˜cñ1°ä ö†±ÈËoåCp,‚†Ïƒ(Šépƒï<§e žÌ/¾ ‰Ú§(“x_d{ó…eõ½4„×bå'ÏY{,rÍŽíîݺŽÞž­¶šož`ïÑâXÃ$Ña§AÚYÄ«íÖ>â)ŠoAÌxç!Àuåù=ÏÂãLAÔ°ÃSV‹[¦" švÍC4?x–¼ÏôÑÀ;¦ÅØvÁ¬ò{ïVû°ƒIZ¢ÍaG§<…B¡x+kì~¶/áöÅ<5˜•U|ì¨amsÔÙL’^ 'ÿˆñ3Ì`ê1SB¡Phé¾x4fù-Ë<à˜¤­%ñ‹èø4DÔÊ·%rv™ä4µ'Ǥc± íÓ/¢P(Åã#&ð[D-€¯ݦ¼¾›ØÞ¸­òøÃøã§ð”Ö‰pG†Æº²„·[;‹ …â’õǶ„5•á[v ›`—åpq°%…ÆeºVÖjLa0liµ§‚¯§ËjYkÇ\ÙêÍ4ØêòÞR(^úÔ4à fxÅ&Y¦¢]赫Æ\^½þÀ»@eWhÛ4§B-m·øí× eÍ,XXò^Á’BŒBˆg¼À1l2æ¼IÚBåÓŸ+cüÕÖ¤¾‹å ü5é»Nºýž«%£LÒ¶]/º ›n“, –b”oˆg“1BË+ñd1IYM£SP·Ø¤l—‡÷ŽYù’òÎ–å·æXžÊF-9“D-¿'Ðsàeþ΂eì-”¯aÁÒiïÇÂR™Y$)Þú¨Ó­ö7.˜5Ùa“tÑÕ~ë_¸Ú+/OâÝr¡ž£.OèT l³ümÐä½ôž@<‹`.ykõ%ð”A°°„¯‰£ŠnØÁZ<›” ÌÏ®[,›x§½0x&I°ÐôÔò·1‰çb¢?wmÕJ,"b‘Mƒ(¦!ÎYˆµþålòÔ´ ŒŽ‡é{¹<ëîåKÊá Ï$V àî2I›™À@“Ç"“\(«/¡1ö¤äuÖœ@£Œ§1ø0lâ¥#NÇÇtxÚe“(4¥ ´,ô^ÏrëµüÑâLe=óÐMžå¾³mv Ë"G=Öêca {›cXÅ(_ƒŸx6ÁmØ= ÝÞr˜«-ã±ÉõÑÀKGìÐN/¸m•'°êo]Ë8í2‰%Ô²þeã¨'Ì+‡uý¢y¯3• Û½åÚ0„g‘qV×røºY²øŠiŒ‚g`oÓÀ¦cÛoö;]åÂtÏ€¶Õ|Ûe’ÝûNʆ+Ëú{~²[~«E½:Õ鹺håkÐ-±e—ô­¡»,²Ž‹e¹¬¾¬¾B1ž0Í:Ö‹†ÉŸˆM²6.ïYLï2 FhûAèè}íÑôÊ÷ÒS&ñ ,̳úŸO‹E¢LrünžæEÒ[j×êã–× …b4µ_– öOÛ•Õ§nÃ&Ø ”=_ˆ›Ë½{ݯ öÍ=Ê»Ö ¢LR&,ººo #^"Çú÷áqÌc‘è£ö¾˜Esf˯B£‹CÑ–Æ^z«óÈ …B1 šÚîÝûìÚØ¤=oâ¹ 4yƵÍXïÐéÁ—tßMG”ï0ŠѲDΩå÷qYu<ïG±³$rúJ´%=H¬ ’ …b8,]ŸIN·­´³I;£\g’]?xݰf[þ²ÚnøG<®“¼n˜ÁÔã¦:…B¡P Y<Â-¿•/`â—€ñ‹èkKàÒ»–¿I¼hO…e9è6acÄkIœPì–€§ð¤P( Ø€æ1½Çl•_cDm渆'sàe—QÚ ­½è {l-:¬àfŠq7b«‹z‚ …,:½l3¾œ ¶ NÔò·—:µü§ðT&¸½¬ÕSáíî[ZmLq:,‹x½?óà—×p—œYB±7E§/\*²þÉÖ7•»x÷â€ö–l»za×òŸÂSz`¯ÿØmÙ먌¹‚{‰w5+>?"y½PlÂoÏÆ UÈú½õŸ7iй¢:jù£LÒ^W¡íštüEó»Lâýâò»-HŠ LOøxLòtj,«Ç€››qx¯%ñ/oñÅ ¯E\x3ˆ¬ÿxxÇ&ÞF,“xþ±,¬Ùe’²ÞeK`¹PÏê{‰œrÞ#‹.—íÈŒ²Hô–Õ†Ëb’ò*{²ø¯g9ê×3ɘ¢KØãiø‰b“× ŒîEIDATxÚí]KRc1 äè\`.0+¶³ŽÀjÎÁM2TQ¯Rq¢§ÖÏnió BHǹ۲䗗g±ß_ö÷ïår»Q Ržøçõ[ÓS'³1åɧY@ÛÚ~|<…®}) ºb$Äå\h âlVRˆ°(“Q/,kõx,{̤éJ«Ñ§CÇʲò~Þo6½@" tY‰I+@iòL¿ñ€®Ìi‹ª6V#(˜M[rœ¾h{×åÏHwõýåô×lwŠ•ÿM»‚ÆKP§]âƒþí5HË.’ÒþÁò«¸¬_`Ùefh`†ö:¸ÄÍ ¶Ž„x¢¦U–ÓŽBe‚˜ò1lMD¥Ë’i+ŠÆ¬½ÔÿÞo'´œEýè,ªµ [JX¥ÙîÒìL›´;³óA¦UKñæ&•‹¤iu¦[´u<…L<-Ïy—êm•Ó*t_ÏZ« U ÏéþÒzñžYÝES"Qm2ž7L“¡QʨutDã‡Ëä'šÃî ‰™j]‡fâ Éú°²žMH%´°,¼âHW3hý-ÍOºå¦6i¬yíÌí®(ìÛÖÚÚÚ’)¿î“´õD9zèl™ã–Ö^º"îÓÄ’õ ôtH:a•è—µÞjù­QʯÅîöHßÅÛL’íÜ ½£Þf©£% mmmÏ&Ü·­•žî˜i·ßh70·Ù¦ÝDß& ±] ‡.¶}0Õ"eáXÉÁJ¿§ hÓ °®8ËUàFr,Ÿ­m ³žöAtGDéÙÒSÖøßòƒÞè–îò£òôÉ`štlÊNxÙ&eˆ6éJó_4ik(Ð剒j£K”˜2]ò©(¡öh Ò”~îŽM!ˆíJiÐ#¡-çBS‡¾¤Ð)Ê´¬¬•u¬L/ †¤+­FWœndÐtåý$BJW QcÎ%&1jOP¤ó¨4É&–9íøÇCûoàЄxytIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/as0.png0000664000175000017500000000047313657750470017460 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÆIDATHÇå–K €0 D=z/à\¹ueàÊsô&±PBqJè'V MðóœÄà²Ì¢Íë<‰8¶zí;Ñáu]1òùaœ»½œ‹ñ7'¥Bì‚a”œT¿@îØZ+mu3hi"߇3X›ßÍÁÖØ{»j[ü9 :Ñê «Ñ i!祎Î7,cˆÒ¥`9ÐꨥY«K›  ”Jù À7(~mèL¸c:k¸˜Õ`uëÈÚÆq¸ÿÂiõ©Âžnf¯ðÞIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/ATBC16.png0000664000175000017500000000321013657750470017645 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚí][n1 ̱{œ§·rÓ‹Bߣ˜üYı×4¥¥fH‘úøxùý)¯×וF~}Ê?…^ÿåëú¼Þn¡óï?Ÿò‚ÏëÒçÒ{¾0ª ôº[NÅ$Kœ j“î[¦àó>ÉÒé JC+‰dA퇻‡Z²ˆô>iFïo¾Áã>ÎÿK >×Óí„<yþ–†DâçsÒ}à V qš‚ô|þ–,+)¨}>¬ tëCb½Ú\´ÎÁ°åP° ¹I18–6d++ÅHœ†$\¥MQ ˜jT ü)×¶•£”‘&+G)cyV`)­Ñ— ¯ÁQn¢‘'³%Q¸¥¡ïœv£°Z§D’Ž’¦ô¡õZ%úiHÚJØ¥æÅ(Ä×ÈR:¢ÎšsédÉ:GQ’T®˜6—P‚ÞF ´/:‰úÊÊÛËéfÆ:^¤­2Ò¤±>iJS]Ü%:*­Ýéá7ë %ÅÂyÉbç’¾èTDâ(å€UC9¨b°¢§"èSçŇfn¢Á¥ª9¿åšÅ¬©´4ÿ‡¥ËÒV)åóôâŸ)WL¢¡ÒKïoã"Þ9;®Ø¹¢l¾de%)Æ3F’$^N¦´hUú aUH²ˆu¨Ïkú¦ È¢v)jFÔ±â: ™i¨–½D aK¯»‡œj–‘bÞé¹:t¨´tDxS®†¤Q ¥;ttû]K gœ¬~õoeu?Y¾mÅ)_‹%hf˜Ú…F‘•••àS«ùÁrÒduÄè5¬¸Å—üžÕ–YXZ{ÇØÑ˜³TÀ…üÞbæ$RÈ7zEï§Z”^Aú!¾æ!¡w3×8jڥ²²òSˆûu¡ºà]ø6€y]˜.ˆ® M+í‰úT}2QR”&õƒÚÔIKh£à`,Ac}ºÇ7UDQÐÊÊÛʵÛëèh7ÙfoSNW4k£wùÒèÝ*Ÿ^ÛžUl€âD³%éË5è ^¬%CÖÊípÉÊM´2¶²¢+TQTÊÊÖ¼±”ö¿,EËK'5ƒúÕòâS+‰ZYy[¡mAßJƒ¦ };Ú†8ô-…®iÊDÛÖJªãÁС¦k­FלÎ;™ÛÚûE‘óX|º“èÓ4éD‰÷X›Ó,б²R…´Çò#´-Çi›¶Ó·½¿æà€=¼âÇZþú#hèñA4 dÓØœWÁ±ƒ¤èâ’,As˜ê/ǃ‹’¨••ª‡C›sí¼QÖÞå&Rþ¤mïºØ\oUk$*Œ­sI#OiìÎ Ÿ4\˜Æî´òÝèœ +h š·çì¼P_ÊŸ”­I£s;Í‚’bÑGÃGiu)æ­3)+Û@OÛh#Ql²Â±´à’vYÉSYdUû¿÷P ø©÷ÖD `Âç“Xy°6uÜ=“$ ŠX³œan¢A}m(5?™¶UÔ[¶¦)žŽ ½•5éÈúDÎ(Ä/W }êÆØ[tÅ¡C7++ì…®£·pÛ{¢£Ê6ÑÒûX-'ZŒfiëv”¬X¶°Z´¶¿rÏU´?–·WÙ~oŸ­4ø¥5+öî¸ÔÈ|6:T^Væ&§¢V¢­õãJßm&G¿â´k_­q °iˆ••ÛEr'hkòvÿ‡^Óµ"k ­hÌ6Ú~ €õ¨„ò½ûò~1ЍÝ80zŒ‡•£¨ŠÒ+H?Ä×<$×¹zGM»Ô]VVV~ q¿.ô1<¢ ¿Ñ0¯ ÓÑQ¸5ž†Ðµô…m‰úT}2Ñ:WÚÓ±^‡‹º“ñµ˜öŒ°ñMQÅWVÞž›ŒA|Ú-¢ô›lé·)£ðÉ{¿´LÝVyúbúr ú‚ôc%C(7/ºBƒAV²TÖ‰¶ðOS”¦tµ(Ж﮼ Ô§UŒ®}+ ºf$ôí\hâ\ÛR…SåM™¬ ޵µº¦1mk5úæt0oï‡Büñ‰(Ä#IÚä¶Z¾‹Ð´9]ùVþù%ûÿ„ZŽIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BBpara.png0000664000175000017500000000351513657750470020124 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ØIDATxÚí]In1 ôÿ| '_s²ŸàSÞáŸL&ÃŒ‰â*U{ÈË É¤»†Ý’ªHŠzzzûy·——Ûm}Òû}·÷÷Ïã@Üíùù`òs}o›§ç'Ë=«]Püu···Oô¨Ë€¢H`ò³   ½ƒëϘö=ùý0PP»¡÷ûa€Ñv}^À:X¬ƒ# ðvûûŸôQªZï÷×}Ò5hDßKD@£Ÿòúáéf]Àê1«GÓÀ4€(zµw²  uÅð’¶5y}þ»ôǧ÷ß·Ñ­×ׯ¬¿ßF·ÆN3ïõ¹ý”7”o%°ÛÔ’ pùàÉkSˆÀ¢ ]>â2€VÞ†$ZA€½ÄrÝH¾khP¹Jan]C½â)üÈ­ŒZֆɃ•QklÆëé0@+ßC? M4E™4âƒå«(Z,y'Þc%ÐÅŒ£¤\‹hÌY£ðè+“™õÚ¤×Óm‘Ô±±«%r¬!bI§$û)ÿAÖ5Tz­,Û©¿–G)O™I^ˆ.hÕ&iu§Öh_Swa"F­­ˆï•Ó«7€iUofÀU¼Ïë!ø}>E©¾wvHTo^ΰš[–<ÏëAMð§ÅÒ2-öìÍ4e_0ƒöêåvf-5‰öŽÊij;å—k­|·h4Èh1vm"ÓöœÆjÂ1ç¬i4Ì›˜‘? ͨ³FÓŒœ/5Uç&²Ö°ÕSÖµ´FV­V _ÅûP ZŽVoƒùÑf5òH8w'‰jV›XIF`ô~&ª^Eoì~ÄV€Ù¼‡{¥éMÒÓáG-´¨µâ(Í#µâob§LÅy§M{Ó"cccßÅ´é¤mBÆKÞ׀ޭ ÞR€(‹)Ûa]ʶE­PüÏ»ÆjDÕM³²ìÅZiVs^¢š-èq¥Hÿˆé ý4s™‰š~©» Yû® kÈ£=OB<ê¿…=\ÀÔV4Pú0mý2iÚDÎeRaÞd¢U“T%'U 4éX9Ó%´àèüWV€lûöj’±ÍScôÙm#m‰(m‘-m™2}¡7m©üe6Ðn×@´ŠfËJ·e¬Þt•¦aÝÛÖÊÖò®åQ/Ú­“(á3nï6:‰›1)p\«Ð5‚ o¥AÛŒ„¾K°2€—k)mÊd%¶e„µª­•Œ]§v5 7NÔZõ®ô êkMÛœ.½4Ò·÷³2èc ­Œùx‹É* ÛÒ´mN«bÚCñ/£AhÚ=Ó6Ìîj9^æYú¦í´mïé¸ÌÑ ´‡WÐÿA€ ý4ô‡ø 1sü$+ÀãIi¤9Š Ñ-šÃÌg鎃›DÎØ¦‹[,„æðk «¶mm^j¯ âwˆ. å¢©J‹”áVk’2 Þ<Çvu‡~©w Q;@ïZlýn€Þ‹Æj¬1ë0@k4ÞëétÃlëY6Z>¤]Í!€([ÍD•Ř­¹»6¥öV‘TÎv4zm×h äöö¦écß]«Ðhòo½«I)¢Ú4 bØV-Ò¦ò²ÌYÛ*™ö¨¶ÖZÕœNT??útç+ÁõŠ&ùèÝžÛõ ˜ßÍè>*ž`µj o¦ISuau§¹ÞJXŸ ó2éè;šöœš&äõÊjX­ïv±dÕÑ£Z·Süm*nÒccfÖ>\Û¦šöVÚüVÕ ,­ò4`Ç)´ø?š?q¯@Ù¾Y^m"“ma·¬1ËOĤ£ï^YÇ3kæH«IÍöíR"x‹d½×ƒÀÛ-Ïš2+K&jƒ!Ú ê´Žv}ÒZ©?¢5¥ÛH;ömøÝØØÕ2IÚÚ{¼ÿ–—úk€ÛꨣKMCE¯ˆ Ÿ=2Á«öÌâ Ñ®hOZ†ZUWÁ™Õ=@úGÌ2H¶eæÛ§™ËMÔ]Kݶ½îtç¹9C"´õ„Öyq›§¢ÁôòêŽl{úòð[4€ie5éfuØ£N{òxý2iúD}*Œ>™ˆ<“õ\Y¦æQš„v•œl+ðzULšblìji‰m7¤-¥/²¥/S¦/ô¦/•G£óØfúíô^¤gª¢úe[†¬T?*?Ë)?í¶µêGضñOíÖI (ÝæS˜fûnõ|:FGéiß)ºF’ÅD[i´ šêf$mÝRhÚ¹Ð7ıö‹9ÞRõOõÞPãaMâ­<ßÖÖJzÆ«wÛƒ!&í¥úÛZ«Ñ5§C ºJf¦c5] Û%Vµ˜,_òª›t¶³º6§Ö¥ñáúqýÙVàLbx1QIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/AS.png0000664000175000017500000000633713657750470017305 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> jIDATxÚíMr\7 „sô\ ÈÊÛ¬’#d•sø&Š«\S.QƒAã¿)›)+±&ß#ûHà·ß¾ŠýùÃþþûííñIãØ?ìÛ···¿~Ø¿ÿþú|üœfäþûaß¿ÿúlIé‹#t:v~J#þh¿àœÚÓ1tªÝŽ¢ññÿÏ õï— wŠÓ¬~ËŒNqºƒçHxGðñç°ƒçHH ²æ ´€Ÿ#ïXh~ÿýííã ŽiŽþrìç÷„”ž5«cGî«9x~ê ô÷¾wô|ÛΑùù_~}~|ÖÎ…9ì˜m9ú矟Ž=>étáÚ—3:F‘¶ÂÀV–«ÇØ$K¸Ž;èe“rxB…kºôÏ’üè§;ø0hÒž¡v&Ñ$ÿ8Õi’ÕƒД£¤ ¡©Fê—Ã’Wê°&õ ÄÞrE aéµ ¢±H;,­­eé½.!K#ý%F)OðDÙ¤l­¿XÛiÒG•þš¨HŸâÓ1/›”%tP*“€½MÞ«- !M-:¥1©¯½ …ÐôZQ[Ó‰Ðô|ä²$¿Kág/:‚¦çm–Ô/SÔRÚ†EÎtƒÄ ã,r2‰Æ íŽyñu¥ûK¢fœM²"°eŽi¶ žÐ)Õò&e#‡:†Š‹ðJ[–wJ ¦“ü(›´K~”IySÔ¨P-X±è¾7?’Æ$3xó#Z'¼ìd±HÚ±Jqç^.má)ÔE¢8«Ð Ñ¥‰¢€;ˆe’hÊ žkx醧èí‡2Š“¤¾&ù³’„n&AsríÂT‹(X³ ,•ºEY¤|KDc5Ò‚?&ˆ%ÿ2ÈÚŒÒöÅèºÞÒ쑃×ç­FÊw°g'å`Q šÊÅ‚Fk$àéµäG3Ö„Žš²%ZJ ž{™DšbøÙŒ:(MqÚË¢I}+‹”/CVÉ?¾§f/Üi‡Ì²X¤`K|½õÅ 7í°¶v«½–þÞu°Mú{iÛAÆØÄ*ýÛC%¿–/AÞD× g+ê(“¨/½ƒôSLÿ’\³Ì\°P“ouˆ…µµµÏîä¡ ‚Gäá7º&}øš :m‚>‘CŸ ³JýödâéXò„6*õé%=Á¡Š±±²u-ÿ-'uŒî€ã5GDiÙÒS¦=èMTžþ²Á)è®kh’ü ñ•¡K.]_[{-ù‰.þÅZ)¤ßÄÍÚ¦%AKW¹{¼”m1úr.ôqèK Ñe",kE_ì’ÒjÄÅé°,ïç›z”E $æ*æÂ“Ÿ$½@Wætm…ÔÇØ„¶ä8mÑökÊÞÓ63£m½Õ¼¢šr$a"'Ö@¥¡©#å׺fŒ(QŸço3Úšµ± RLA·5’ò®[í­¸Â l,e9º¶¶ù“n6¡mÍJßÜ–¾=0“з¨¾¤É7q›tŸä`’çϤv GSÐéªêK,"l™‚F™}fÇE:ޱHÕY×t‰ßK…vfm˜Qší¡°µÛ_ml"I´H¹£§^6IsPÊ,¡Jºž^Ó£l€'LQ{G2I06ñ6ËÚ*aÉ=°“Ã$¿Æ$å- µûèu CÝrÊË$è»§u½Á3–v@ô1©Ÿ5ÕåJ/O9,yl¤²´6kgZe”6ˆ:¥¿Ä(…lò^ÍdKÿ°äG§Ð8•üéÐue“@æ “þV¡šv NRÔR¢šžÿ틬Ôt¥ÿ¯E¬RßzÇ©ÌÑh°¼|$½yMI§U—÷²H¸Ãi–£Z¡ìqùuN5MïœÂàÐÚš+=¡±I½–þ(›ÀS®ô/€§éÿuô2‰Qn5ÉŸ•Ðqo…šä÷2I4Y[(Ð1 ÕE…ê˜ÔN1=‹”3IÖ3ئf®c‘Á2ÐË kSö\úklòø,w ­C#±I»ƒ^]ØOÑZHmÒŒM²$™ƒY’¿,ã”­¨Ë¡)K°¦CSUlÚí úÆÎzï´±*õÇY$:ÅãzY¤Mq{‹×-ƒ¬e YZÇ´…ùd”1Ç´k¾6iHðø¤¿–ØIw¬ž‚ ²$ý½éˆëhPòg§#Â7u²ÏÍH#˜MVÑ€B“{äÐÀ¥õ>ÉÇŠ=Α‹²ˆõöDYú!Ê"i ·´¼XÏj•É4ôjxöL¥Iýq‘¦Xjo4K4xI÷ÅkýLBZ_k¼õ —M$ר‰IÿrxB‹5Yës¥Ç`Î:ZQ6IsLR)Þ|‰,»’˜$+_bfoý˜(4¥ÝÓ*ÖJLÒM(‹¤Cª½7±åtl±Ô·Þ)«Í‹”ÁRÖåú²‘‹ÖÍ¿„¿iŠ5>F!g‚—ÃÆ&mË·/I9<¡Ñþvx’ž)&ÉÚ«ÓèÎ;äÑCfé±jkÝUÜÁb&A»k¤tôvÍ?ý˜ž–~@…«äpxJ³:·$V¨À–o»£ôÞˆZ&iŒEÎ_ì=ò´å¬ÖÖîÉŸ¼Î´»#õk‡' Ž´?·uÛõ²I45¯{èzWмÂÇ"V6)¯&ïÝsÇ×K+4•9¢ET­ÖÍ$’ŠÑô!úi†&IQKú0Ê$fÑày64¥I~­y·¿Äš1„N±¦¼ÛB^ÉBSûúØv ¸_ú  Ñ‡ßÆ˜ô!`ú :}âšD}*Ìê¸ôó¶db6‹¤ÁÒ5 mÚ#^ÇÛUÄmaimÙä®äâu÷éÊÙÒS¦=è}ÍQyÚË’Ñ]×Ð^ º /šãíW†®¿teåêôkkZöâÝÕIëŽ3~ùÔË „$9¼¶Ö“ž¸–Mʾ€®É5å\h âh”¦¤Uò·e²*hÚZÀí…ÁèK«Ñ§ónamåý¬R¬@¢7¼Ö^bR›Rº"š´§»Ë¹‰›µ[X¥ü‹èJŽÓm§/{J눦Û£o½àm^ÂRYmIXÞþ#; †&¯äooACÛÄG[¿hZ³¢ŽŽ7’’¤>]+.MâÓ43³:JÌ"kk³ŒÑ~”¶5+}s[MúÓ´¦o°LÓ¢úÚ&ß^&k“ŽrsY£yôaF™Õ‘n¥·ÔË"úý»ÏÆ$Vi_NsÖ(þ8,yYd–^;ºùµO—fˆ"ªÿÊ“vM^µ;¬©—1Qé?ö £•x46 3 ú½S>¶—%P¥ßnUm ž£L’MèD«„ëiS½?’æ Ý÷&pÂ#)-Yu>&õµ=qÁ~® Qi(¥öšE¤·³–l,òøy#$IL²öÉ™„–M¤·Ö{„ªMú£â¢ÜAmÇ(gMÅDÏt•I~I[ƒHåL‚ª—1xBkÙ2e•üèTŸH™ƒèž/U˜ê´è~V~$|ÚM“úѳZ‰Çò^_l΂¦4£,Rp°1×ÁËXXøÚX䬟ÐX¤ó§£(ƒ $nÖžÚÿå4çÉM9IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SCpara.png0000664000175000017500000000225713657750470020150 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>:IDATxÚíKn#1C}`.0«lg•!«9Gnâq‚pPªÛ*R6ß"†M«[mRßËŘ¿o¼¾^¯²ÿÜxÂþÞøø¸^儯© ´SýëÆËK~àQÉ>¿¼Œ./Ù8@v Làèswˆ•"ˆ•f¹À¸†â€Ÿ\.ßF!ñÿx}ù5ˆ%ÞÞ>_ýzöóùOí·•½K¸ý¶3+Ð&Àc̃e•p-èrdCT›ÍªZÿvx¯lÒvmU³Éòð„–¯1ü?]`–Iâ}äÛœ5 Œ,2 Mm3+B¿…“RÝl‘mí¢§9cŒ1›0ûÛÚî¨GÌüár¡è¨Gïk MÕ™9íå! j&Œ–sC–(Mú»è^˜Mw´ÚÖ¯±ø"´°„d6taYöAí7fcŒ1¦'Ì:î6A2¦…a?Èì˜-üüÝ¿¶=£ÿ9òeÃ÷P •,­ç [÷åÚ¤ÃQËU<õm9xVZ~¼Æè‚³Ûˆ3‰1ÆÃÍ&4û…­ýøHqž=Ò[ùGNºZò´,’=F ·Í/‘+Ám®AÙZ¼Í}ÐcŒyÒL"ײ:r3ôžÌÊØ­°ür¶*Ë"r­ú2=LÙ°¼£}t˯ÑjÉz9—¥;Ù~âÙKÁóGŒ1Æs;²Ã”G½‰>ñëo6T¾]¨üdùéò^ª%Ö>e¨jLÛ']eB«YDn~ÝòÚkŒ1Æp2Ь€¬‰X®„è+õdë¯ÒÖ::ºZT[ºËŒgµq|¹ÀQÆ /÷|vÁlºÅ—é" ¤¥¹je’]¬­RcŒ9gýi¿ ²Èn¹ ¿i…ü¶ÛlœrÔêËgš³–Ùþh6ƒÈïtåìaŒ1b÷=Ù¬FÃSÚ³Iæ¨qgšÀl`Ïÿ¯“2 :clA¥e’Y'­ÿh¿èG%NsÔô,2ªÍ²e-¾üš¿òÙÃcÌfd›ZÐÃú½¬{‚.,\M¶Ìi¦–ÊêˆÏaíÔc[u6S‡&,ËÅí£àÐYËÜê<‘vaY>[¹Úk³çcŒy°L"¿þ>¶¸fKÑÓÍÆOZª9gìqj+™ê²U˜=–úêÀÌÉË:fSªÓ5ä¦mÈ-µ‹BœEŒ1Æ kIDATxÚí][ŽG ó±sœ'·rì$õî]égáõ쌦ºJEêùãÇ÷‘¿ÉÏŸ~®‘¿~Éo…~þ'~~~ß¾BÏÿóKþOÁÏï­¿KWìóQ­ß»å©˜µOÑŠYï[¦àçuÖJ§+h=ZK¬D_Üý¨­±^gíÁèûËoð1Ïÿ·üü|š°‚OE>ÿ¶ zÄŸ¿³Þ7¬`Õ#NSpý ~þm­¬¥ úû°‚Ö¨‡D}ÿ´½¨îÁðʱ`™K18–öÈNNÞÎQÐi~š~CÿrAÈzœC™%MrÍ{—Z+cíÁ4ò„ ¿š b)âÆƒìidv›SF ±µMéÝØ•R?Ð}Š£ ©¡0ÔgC]è0¥¹>ØÌK–‹ŒùÑiGØ(p3ýŸô¸ÈÉIð0qÄMÚ 4{³¬¹¼hÅ"Oa°€6ËM,øæÎ<²R}Ͷъ¢*//°E¿w?j6Ü¥aÒ…ülÙF˜<±­PºAgû(¨x‘uB•ÛAÖ¾•xÖü”g»e¯tù]l…¼Þ¯ö•;.rrò6AöÏâ(évPõr±ð¬->2ÖÖ™Íæe9ID+ŠÞ8Z¬ŸÞ˜Íùgy¸ª,MUPVLU„ý`·‹XU=âôÃõ½Œ!gäÕR9IºáF+ w@†›½òÊ™(нÖoxrròVš—1ûýY~ƒ°WÜØ å(Få$é䉽SYÀ:†¨³9 \Ñõ ®į9$ëÍÌk õÚ«î5`áäää«÷µ®×8ÖºßÖ90×»€_ãD_†`!ÿX GÝ[c¡0곜}a9Áq}8vm@›…úã)ÑnKª899I6?còºQ¯s©Ü®IS^›èýºTùuÅ,°/×`÷J{ÁËú’¡õEW–¢kÊÖ¢vm´Â?/7Y#ëŠO£(èääÛÉúFë[i¨7Oº¢ëÛ¹¼¦!ÎÚ–B^È?ÎIXZÖÖj}c°õ­ÕÖ7§C†ñö~ê Árô‰ì!o1É:}Ö4éT?NrrÜä­ ³ÛgÅ®mÚžÝö¾Œâr½\¤l¸í.’ õËôŽ6²¤ÞmžÕã 'Û…í81VãΦ@µsÝ´÷Ýb{·‘§hN? ì„ÑŒº—ÚH“F±)RáC¤U÷\XAµ¸ ½¶Éˇ­:“òG«"jvo§­ ¥ØØdT곆·­Æ}Aí\,„Ý>`å£ËAÆ(Áq‘“-œ$Ú@±\1ïµAÖ19ÎMÐö–’Ö„•›¤+æ G°¤ÉÝA~•4©ƒV܈:«“™|º£)Ql;7ôG}±ØBg¶U'ñÆè ›ìb‚²¦$ÑÖieÈU9°\¤œ,©ñ6²¤Büë|rBÞ­ã‡dYBÐ_[ÒÖM^å&éw±šàÃr“t£Bô6Ò¤®,›dÆÆ_žPú«óOèªümkŠŒZÔaj+07Aáô(ËÇ"yé%kàË ¾ê,/#KjØ¡,¡S7QŠÞ8ëÐÍÉÉVn26MH½SÛO5;6xÜÎy¹I:yÊš×n]™eÅÞÆaaò¤žº¬ñéá•S§jx:îCâÚÍ΃—F³rTNbÍЖI“W4Iõí¸]l*›ëê>Ål’ ùÓ ´5o]õö!m´Õ> ewô¸"''_…›¬QÄ2Ìå®åǹ R9›Ææ³Ã-ÒVZ½²rþÉ=êŒàZ8âô¼kÕB—2Ò…ülˆ´&ÅÖ{WÆ]=k!i5üÀ– =_/5›Í2;{KkNǯ¿qÚÀ{¯ K\nÖÉI5XgïÚ 3kËÆÀ±Š ”R¶b*ä·8Éš%Z&OÍ ByÓ ²ƒôX`›® û†ª"è»çHA¶ÁCZïßhi8zÿ2³ÃBËì dܱ²éæE5Üê•×và 2îa=99y»°æeÌþy¶Ý ì·æFÜdŔςP!?ËIXÒT†¨Û8Éz×?â×’×™™õ†zíU÷°prròÕ9ȸëã5Σõî·qæzðz'úGÖ†!TÈ?ÆIÔÃÑ S¥=˜øšpìÚ€v6Gój­MªðÞÉG–N¾-XÏIÖ¦ˆFícº¿oMšòÚDïפʯ-6`qáx¹‚üÖ¶¼¬/Z_t¥î•ö²5¯ÁeÍÉø]¼Î½¶¦ø4ªøÉÉ·å$kAŒ·ÒXÛŒä5í\Ö6ÄaqÝxK¡õM™¬7V·@z€g}c°õ­ÕØo:ÖœNUt¬½ õ-ò4y_×b’…ökštª\äjáOŽ›L‡Ö¶_ß´½ªí}Yÿ­èà€çû¥'•=á;z%•…{{‡W°ƒFeE×ÿX?@…ý5éL%en^̾aùŸ,ßJYBP_å"ãSxÇGq±+ºNÖŽƒ;9™â¬ao;$ëG³¾f¸íÚñÀë,¯Q½~È÷ú1é*äo4ö"‚YÞNøQ?{hØÚ'·}dS¡ÆH‚ú,)#K–‚(ìÐN–,3NýXª”eÏNN¶Q€1Å]ó'¤C–h ð°ÈÚÛ&¼ÇTnRNK"Ž–š‡ófXׯØIO.S]¼l¶G›‚hO¦“&ò«|ùÉIÒÙZøRÎêÔ7bÓô¾ ;˽\$Ýû…ÂY{2“°D~Œ‹°¥Dm Z  Gtõ$'Õv-7QÕí_D…þåaˆuÜ„õö«Ü$MAöîô²tÒÄ® —›¤“'ö°°ŽÎ°ošE/¨*4¡ÐV”~¦!i5ü€8é zokÅʵÂkHSICÚì7#KìžL¯<¬òM_û.ù¯8'bßN©.IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SCBC16.png0000664000175000017500000000175013657750470017655 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>sIDATxÚímŠ#1 çØ{œ=ÎÞ*ƒVê¤Û*e«þ„! Qä¶óž?ä¯/ÁñçÉãìñ 0Ð_O~vümWÊ^Ûùýäg@Çß6qÆÑk£×÷Ûzo`{oކÌp ÌëÀiâ³ïoï$gß7@|‹Èÿb¢°k¢Ö ¶ØxOy“ö@#1€1O™äÇôVœiZ‡Õ‹´Ë­( öa¥ÚdíM‹UÐYí¤úÛ+""5®‰ªfçU"oÒF´Ñ`$ù#Ó´-ÐõaÇ4eÕ{_`›üÊ>hõ"Û”uõƒ¶gìlfq³ùØŒaÜ›ˆˆÓ^®zòv——Í f ;—¶‰†,ËÄF$«ª¹Í~V¿aäQp`õ"˜ =¸@œÅ‘D*&’ü™üÚ.h«~•üÛ•øúAg_o³íÿ ŠˆˆˆüSÕŒ Ç*X·ÏQŸå¯~¡Ëˆ”t”Áê:ÉíT7òl[izµ³dktØ­¢‘M U<ã¤?Ös´—ªº¹ösÅÑ™¤h¶¾=£cßG›ÎÉ¿Ý4eà î°UÕÕaú(cc3*"¢Øˆ•¯2IØz3˜²¦™äß~¾8Ëd¤Rð5€±3 X½ÌÆŒ/뇫`öjïÆe?M§‹™êE¬&?>À1MŒ¿r{iþÚüÅ)ã½ÖƒŒñ$X‚3IøKÌô"Ÿ¶PbU½XmþÝn {C$ù£Â_8ÉU5˜³e†¶¦¤=î"Q¬SJ ûÛë&1÷(¸™VìÉí³Û~|·*"¶ß±f"ÚTÛ"¿Ý4­ñÛ–±LA·÷^œÉ2†9D—ø""",K€ÙWƒ dÜ]ÛÜ]õ.Īâ¾LyWëmeþòg1ËH$õoïÑ>ü ‘Ï Û'•ÜÍ®r¸Ì[Tç¦oÛÛ Ö³¯·ÛMlÇ<ƒ""""Ÿ!í±3¬Ue½ ×í:ïÕYþõÿ·o‘zuäö+mªÏÞö•¦ˆl­»\1ÎéæDDd˜Â æLçØŒFÞ¤-°ìrŠ1;×ÛÏ8E‡ñ£jíe ªgšÚ3Z S(o–ðèâDäMQ€€ÇV|õxlÓc‹sFW,àJ eM‹¯h‹­ Œ«ªœ•ÆÝƒ¬Õ,æþn€cîùæ/šÜYk$2VIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/CApara.png0000664000175000017500000000322613657750470020123 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>!IDATxÚí]MN1 äþR/ÐÛ®à¬znB©P„d4òOlgöæI¯¯ù†äK2cÇÎÃÃO±ßïöôôö¶>é€ý}·××ÏO Þíåå+Àõ}{OÉï½ÛããW€ë{k;éÀPOZ{. ¨õ^€i¯€ÖÐê Pë¡t€è˜Ö“òJˆôÎbï« ÚÛÛÿF¾6({”=¿¾_í¦Ô€i@ÛJ úüD;K@9ÔÏÏ¿^Ÿèwé%P–vÊÖ­ò=:ú€vò066¶i‹QSëˆÚ£½ý¾M b%²í ­çÖµ­·Ó4àÚ!mbLitK6ˆzÌúÎm¿“ˆòK`ÑI& ˜:4” êñmu·Ê5 â¸=´h'дš,i”_ki‘6±‚v±´KÕË€±©Átš•îƒ+&²Vq”¶g1l$ÊÔžWü •®U$qЧôP™"´ÞW" L¾;š&)Ûê4ユò§‹&I“¶RþtÞi}ÇP¸!*ðÓJŠ´Š0¥Çê4 RíYßÙc[vœYÓ“Ë’ü<ÎbF{Œ}W¢Ñ³öõf¹‘ ±×iŽv toÿnO!'|˜¸¢wJ~/Œh"ºi¼ù¢½Ÿa•§PôR lV#F},ÊiDeGG³z¬|GÇ“½³¼Œêk"©|§‘ kÁÆcÔEŽh´ÈØØØØ! bÜ»’ ̬wlÕ²h“¬å§ªñ@ëP—Ñ./Õ·ÆUÒÒÝèÒ1Í$¹f™¡]¨¯ÙêÆÆÆÆ~ºËCsÉÃb4>·›•ÕÈ-Löl›ãRãƒ^Wn:P«óÜ 4Ý7}<üPÀAiiLQý¬˜°7ˆ¸Ö2ËÔ\W6-Ce‰E——²“–RDgHµ¢ ÎZúŽôaYúC¶t@ô¦?*M²mº"ª4 /“¦IŠRþ¶¤«,mÒ^á‘6ñ¥KÔz”&ùtllì»Úu•*Ê©>mµúz3ô{èkY Äzã$i³»ªîV´›¹'у¼™8Y«„Jõ×~³RýèÐ¥ôRü¶úƒÞw¦½‚£uHŠkøhâçXQoO_*;Ͱik¡·¥-{OqÀµW/Ð^^áeÔå×Ð_ rÍ4k9~‰OÅOH‘”Öàñ«¸¼âèØefZÏÒ^‡4ÈÓ±®Ù[I§aÆU ›F›X©ÕVšFý5m’=°!äDGÚ-èÛï2:­]ÿ¡Ù_ÿ? P;°m½Ÿ‰¦íô2ikœ$M4YÃÖ#P²Ç·F½ùÖ0ÝV>ÐíY/s.¦M ­ˉ¬vúý±[Ö&¡el,i§«lKW®Ø-0íT:†¼´I90D—À¥I¤ˆJ#Q…<é>k¯ë×*šdûaùé¥üÞ2WåÉXZ|¥”—e‹ížÑ*¶ë$/ï±Ý<25'ßoϵ©8+µG“aøÝØØX±69Ƹ%«‹·¢Oˆú»¯ñˆ’„,¿aÛá +?D¢©Ý?¨i‘r€h¨­5}­Cm~¥PÏdÕ×Ú–›ZJ&ØÑ,G<Ñ-7%À,tº&‰zç5YIw`; «Ú466ö]ÍZRW+ê^lx˜$T÷¸&¢Ú"^Y®æ¼CÛvkÆîuiÚ„ ý_3I®[f®Y¨i·º±±±±C†Ümô.ôd‚l7œ,ƒŸî†CGh™QW°ôÈ¢ S¶]Áè,3F@{8b—9·t¼WÈ´‡Ä¢ËK»hÒ6¨tÚ1±DØÖ  @Wts!ÀøÐ­±±1±3Ð¥?dKLYnIt½­¼ïøQù(«)O6 O× Ox¡O’ÿ‘.éÊ:)ާ­!ÆLýùu@¯ Ø\wMÜØµ ›®”š·RE»'IšZ¨'UKÑzĻΥ‹¨híKë1–r€ÚíVí-ÑzéıR»Z¯»¥M†ÝÊee7½hCÜ^û ¥©ž§ÜÝ)ÒwÚ Žè5Ô~âcAûÝ\¡£ŒQi÷IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/GA16.png0000664000175000017500000000340013657750470017424 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>IDATxÚíIrÜ0 E}t_ ÈÊÛ¬â#x•sø&Ž]ªTÓ‚>øALí˜\¨RÝm} ñ„)_kü|¿ÛR±?ïãõõØ&Ä÷ñô4Š¡íñË€óÿÍË¿Z”D¿ÞÇË˱EÂfyôÇ£Ú. òŸŒbÌ/'òHX$Œ$ ÂÌNùߘ…™‰ÆÌ‰é~||{C³Ídæ7Çž§óú,?  '}KJÞ„‘<¿÷cZ»>þ@?Kýì$Ï£<ºÇò~/ Ë™yìäØŽÂã禙̚ÂQ€ù<Ø8>?ŸŽO â«V èœå \Cøz™¯þÙã.B|‰b ë†P}CrB[:†?U³Ý_ÊMs’‘5­ e§-” ±‰dº‰\ö“4¤Î]ÿ²dÁÛ¬¶È¤G¶%„2¶(±ö©!éwæ–p@ö¸[æ**Wh(Ð(-Ii.Âi+;j)´j*-ÓA`-øµØ9ÁS>¸€A­“¥%¢E±šñO,–çÍx=à Ÿuÿzb©73M%õƒH/ç÷\›=œLRÔ–£¡Ic땦f3-íuÚ 5´PjjÕÖ&«¹1àáÃ×®léÍßtãŸØîŽ§Ž”ÈÓ“ÞÒÄ¢&Žúœ/j[ÉÃïI±EIaIÒg&A´uJŠ$òyøç|´4wŒüDzÇÌ¡5ôÁàGO"Þ“Å»¡Ì®ãB>>¡{¾Ì°Ç£ï3Àžd­Ìg¬Â£ä­ÐÃû¿ÌÄ€{æ1Ô!Ÿi¦šÙ­ù³Â^ÏׄÃ,±$¬ñ¾õËܣ DÏ0=#\c¿zÂ^Xô­ä¬Å.7Œ­ÕêâË#ÕsµôC‘ŸŠ¦2¿Y»ø®µÉšæo¶TèÞðþ=³0bM+üªVöÐï½Á‰Ê„qÃ0O_4¬ým> ‡RDZkÝãwU%•€;ðÖj&ˆ—R·Èçpm<ÚÃ5ÅØêۦðr!”­€Ø"ªá«ÍÄ)dö8¶NÆóɳ7xöÐ׺ &¬€O÷ »àÒý '«3¦sžT/òõ¶¼wsò€­Ñ–§æqbü׺DÈ|Ãóu óÜ裷žp­”g*åÝMïŠ}–¡Â»nqBwZÊFÌ…Væ€ÿIB‡.§ç¶Mì‡Ã¤QòÖÖ@|«C³yðòˆ•¼$ú\0—zÖüšIn»ÔÍ“«íqj^@˜×êô%S÷ͧ‰f³¸Çf®& ÇýŒóœyi›=ÓK’¥¯© /æwçŠHw¾4»›Úlm.Åf'jƒÛ9ÊÑ™â(gp'84Ð iÿìñÝ¢Šóoúž”†ê=É .îlHÇhN@iH¹ñWX,¦!­ŠaàD²æÔ¹¶dA½e]bzdCB(³˜$¦À~åI¿Ì¥¦9ÛLçf—J”,-Ðh(Ii+¹£²#¾ÐÊŒºm¥ewTLWZ>ÈHJÁ$Ó…<½D´¨(VË€%i”>£ƒ((õžƒNAq»&_PÎMXe "Ç_ý¬…*Þ@-IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SC.png0000664000175000017500000000412713657750470017302 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>âIDATxÚíKrÜFut]ÀÐJ[¯¤#håsè&c*ÆðÔÕ ºêÌÜÐ&MOŸ™—¨þ|ù0Ç·~üxx³²#ÏËCƒñ3ês‰ºÃ>ɹNS™4¦ ôêŽ .‡±k4~ÚvQNå&mNÇrÙ¸‰ÑÌìã‰-vóIôŒœ\â.[ûmvNSùæŽñíä½³ÂÊžÑÜfŒ²gSÎMÝĦБ›´E~µæ‘jä,\ öxÓ £Õ¢ž Uû’´oœ2Z¹LZv-îwü;å» Í¶[Û–ÛG}\ÎÆ¯›¸IŒY6}jKêB'ù{ä¡Õ³èòBãNíû·ï÷mÏíßÞæ&£U”ÛélÔ/³•-pùbtW¹H»/ã"ðIݤýHE'QnÒ6á%n^Ñî$g·",¶2Ú̱-žÅöƒ“dOY{31»«P¼Yʬ½‹ÌÞT,¹@k°jÔÍÜDmQ]ÞЉ“ bBÍ+) jäÑè!y™“Œ"ÿèš[>¾æì¢mNr»ÕG[±[¹ÂîT_uÍ€­´Ð$O*òÇ!Rín2Šüñ)s’ÙÈ_.M£Ú.MÙöÃÙ ûñ]dt$F“®l"~Û`²ã"8ÀmÜ£ÉMöK ™¹IŒüÑM”“”Ŭ³NRXíd6ò—;ÉÙX¦g l›”€‹à"ÐýÆlê&ûùÆÍªÈ¯œ$ºIùS~5üD9IÙ5ó_ÖIlŸò—.³-pTX»4u‘6YÂEp€«iõ^7)BE›#¬¶…õKÚœDý¼ÜMæÛEœìÿ¸½‘s6¶9Iv:F[·3.Blë$¶‘Ÿ¨€›\fr»°•}Äw“&'پ痔zjÜà¬G—]cv œ³oà7ÇÎM”“´¦¶ƒSO\ߢ¾ÚIš}Y9I¹4e7N‰:º\šf'”É’Šú£%wÛV°톋À'E •Ú/΃*òÛ¹‰BõKlOyt“òædñµ¨"¿°ñ\4uh¶ý¯ÉenrvQâx Ú$írYÂI9üìyåŸÉª=è7yß%Pæ$Ñ5Ô)_—¨V˜±oä,–¦Ñ]¯AƒQ³wssÔϾ/À'ý ¥›š*ÚV¨‹#»“ØÁÛ]ƒ·»‹qÜäÒTcX÷ÛM6ÈFþ|¢.–&;'9{줼@ÕíÌÄ,ž:d×/¨ùŒ¶Åfwµl_.O£­G¹°|žñü ð¹n>‰ÉBa6Ò]¤MšÔ£Û‘—ÊIÔp|¤nR&ÊóÝìSþr‰štP>W-1¤v׈»m@öyÐ$j'YT¨ZöYíF>^—ºèZ´Ÿv[¡7u“lð´qÛf·¨n —ÝeÃ&꫈¿¬ÐÙ^Ôî“åÛcª›f¼gQ¡ÊIlF½E±Ûªuì"4pàoŸÁ¶…κI[a#7il–Øb³ªhÖI–òÙÈß&M£S–ÝÜÑÆIÊ¥I¿>»ˆv’æ=rp8ûÆlým Ìæ½67QÃRì. û¡Û·‰ËöÞFN²üZÌ:‰r‘2'‰.瑨FNÙµÛÑItÇÞEšW.ÃEp”æ&³Ó8ÚNíÈIlfê´»ÉèH´7t²‘¬å‘ßLšb’V @”5pf]D5rÚºžã¨ß®¸@ ÿ¬nbíª-$pIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/CA.png0000664000175000017500000000547213657750470017264 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÅIDATxÚíMn9 …sô\`.U¶³JŽÕœ#7ñ0 †åfñGäã“›Ü4`Õ¯UUÒûD‰úöíYâÇküúõòr}Ò ûï5þþ}ÿ¤úïküùóYàõwxK­ÿç5~þü,ðú»õ:餖´¶\šPëz¦=Ú…®–Xj-”.PúÂU˜Ö’ëJ(]Ðû{C|ÿþòòù‚kKH×–¿ÎÛuÓjÂ4¡0«·¯zÿ”F˜ÀõVÿþý&ìú”þ¯@àG¡<×)ê·ÊÇèèÀÍÃÄÄ0J›\ŸíÖ¿M´[åe“¶Úê÷ÒŸÍ*6ÙªY~‰I`lbµüV&)›[þèÛ›M’aÝe’rV&)„¦{«/±ÈÊ$0h’ž¥vÙ}V°”Õ- cƒ®ç6ñtlB+ ž7±Òš4V— Õº ‰Mè&Ö,‡'¯…‡Ã“7½Ì8Ù,4í¦! Çê‹¡É–~°æGÊ¡Ij‰6±þB‰I œ½‡Xîvè¬ÿ%ˆ”Iè,ÿ0ÈÄĦm‚³‰öÅp6±ö›ÀZÿOQ§¼~ÀÓDZ4;QÆ$šµ¶tš°hÂÚ‚á²kùË¡I{;5«_MÚ.‹¯1ItÆ!I4¡³ü°üÈþ cú&™˜¨ôYf`?d7-QÆ&Q# €§ÇÖÛÀ“O˜¶– nù5A…Cßý,¿të¬Î:LwšÉf’ô9kú¡ª»2ÇÊ$ÖNÁò<[‹j\hü"=,'nV8¢¥¸‰‰ ̘Zõ[ó'ôS…ðt¿\Š+ýPOÓYT—°çÉ'L²U{žl+¬L² gœ´–’Z š'IôW˯1Iy"G³ú»LR—P©»Ð:l@.ïñ³iM2¶US‘,û­—Ylýu("ߨ211qzhSÆÇ±IùäÐî Ÿ¾òh·Å$xr •{) ¡µLt?²ûVHŽÙûMW˜-¿5 ‘M^ËïÝ®³ú’@ºÙüÝ+oaíí³&vÊ[2:ÃPôÒœMsB:,211ÑÌ( Lr?û¯íŽmk)Éò7Þ²{G­¥!¬l’OšÍŠ2JÙr½hÂ*Î$Ò#³Þâ²<‰Öbð—)‹Eà‚Ûæf¼¥3¤[\~ëåÄÌý¬W#ƒLLL‚ì )ƒi÷0­–ŸÎnIiï­†;ê,&ÙJ/þÓ¼$Çt3´õ1CÝÄÄÄD»õ' ÚÉ£c¦ß´1µqqÙ½¤cé'ÑéÓô‰œÕòÃSaÇ$iÓ±V«€¥§[°7T,MLL„6ÉÑcÙZMÍžNÚ…Þ´Kåé7´o×8và ͖!Íònº"ݶ¦Y|¢¶GᘪQt›O'&&Ne’ãJiÃ&´å\è âЖj/ÊD_ÖŠ¾0˜ä¤iJ«Y-¿vÅé[}Âò~¶[…¥òêò„%&mÏŒÚè0rbât –H^rÜUälÒ&ˆîàÚ£¼gg§¿ýÿAz€Šfõ%טݤ=ÄgO¨Ô²°3d ’ÚëàçG…¶åM&a31Q<ÒOä¥6hó%’iHHÀ2ýÕô‡|KöŠî˜túƒæ¥l¥•IîæqBI¼-˜>”i–„–Õ¡Ž>Ô™¥Spµ–¤gG[ }؇Y&†MN;`ôÀI ´[þÕú[Ù¤ %_ЛŽ(x?Ëoµüš±M¨Y}ÍVdšî-ÿô–ôZ}«ó.7ªr·²_»,èýÿë™,‡%«P‰E`c²u&€†E´B'l ib,?«Ðý/ cÙÿ-¿Ä$÷ º×4›D÷ ÃZ-!4ù,4i¿8š~(K…YY¤ šv[¼Ià°d½ Ä"0XÒ„îYªaÂ=KXú›˜:‡IÊ…fÌ"&ÑvÒ±É:RHLHèì1 š¤[æe’ôœ]“¤C“fݽLRMÖ©/Ã"i½»»à°¤]ÐË"mGÕÇ"´›ï‡A&Ø­ÿó ˲ìð >DBsؤžl–_Ë—ÂÓ½åogÉFy™¤\`ÖÌ*|¡£—IÒ iw/{ùž¦*«ŸÞÿy“Ñ •Ѽ¼Î–7Ë ³ m;m†A&†Q¾>›ÐþÊ=3 Æ$k½2 PhŒMÊ¡)jùµ¡0ÍYG-9›xý<‘³kùË¡)jù­ ¸Õ÷¶8ÌêG÷™À­¾Æ"夹@%Š=¡³OdbbÓõÐ9m:&¡o1ºã€%÷"±Iùج¹I4¡i­sÎR=.ý™[~;4Íûykà i[Kê–ASÔòÛa)¹åÖã;v‹ì~;‹hiW+‹ÀZó!p˜˜Hê/é6azbïh®6ëOýÚö¶#¶¬é+“ÀÞÆxB§xZÍË$Û3^S`­ ¬g³üÒqêåд»—½lõ[ô¸Ë2aYšË8Ñ´Ü2111Ñ4Rè³YàÄ+¼m ¶² ‹‘˜¤ì 4?h5¬íŽºœIèÒßâc^’㺙c:jÚ¡nbbb¢y(£F?yD;ý–-<¼ñ™v ˜~ý Ú4„×ò·1IÖ[Û.ÐË$ðSÇ­,Òv+ÛÚZÐ, Ø¥‰‰‰­‘â¸%¢0Á´Ë”iz·Tžn³tÛ5v[š†I¬ðT&~Óý¶5kÖ¶ñÏoé›·NF ›˜˜(1¸0Aðü m1’cʹÐÄY/L[RÈkùáE™vtYY«/SL{fËJ«Y-¿Ôâðât´åýôg…´x»Eè‚®HçÄÄÔÿ˜ö¬X˜Pú²÷’¢98ÀënÚŽ^Ȳai‡WÐÿA€Š·{ÐÎÈI_ý& ¥;ÄÇûöíÀ¡g‘ã,ýa[Ž&žž9²Çr¸õ‡ÍJ¸­f«húGº–;¢ÚÚ2å‡|sL:íAóšå÷2‰þ¶'%¥gl7“ØýÜ[ýõZa© ü(”–Eˆ÷‡$Í t±È0É´ £-ÓâMKÀ<’{±²I¹ÀKH{b'jù­ö–z7›¦Õ(“Øá©xžÏÊ$é­–_c’òÕoNîCS?vÒñN:¸?(±H“äæG G–I7Œà‰¯Å$´lÝd k£ù¸õ·² ¼îLt©T›å‡ ܵüÖ9ír¡Q&Íò{ßæ2&ñZ~àNœÇS¼Þº t,"%ràB×/^™¤š îÞ/‡- ™HŠÿ8?úºûVIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/ATbc0.png0000664000175000017500000000044613657750470017666 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>±IDATHÇí–[ €0 =¶Çñ8ÞªVa‚Cl ûZ›8njé0|GSU){|ƪ¨lÚ£æowÈŽçª#@ÍS^:˜^¤ùnY0rÂzŽQÝËµŽœN¤Ö’ÈAïû[MŽÐ:ÚƒÑúÍt|Øç¨h0 јZâµXyT7 xU‹Ó_ï Æä,zùa@*Ðú“´ÖOÛ‹­{0ìÜÙË‚wìÀc×±´–ýJÕÐr7Æ{4³IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SC32.png0000664000175000017500000000412713657750470017447 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>âIDATxÚíKrÜFut]ÀÐJ[¯¤#håsè&c*ÆðÔÕ ºêÌÜÐ&MOŸ™—¨þ|ù0Ç·~üxx³²#ÏËCƒñ3ês‰ºÃ>ɹNS™4¦ ôêŽ .‡±k4~ÚvQNå&mNÇrÙ¸‰ÑÌìã‰-vóIôŒœ\â.[ûmvNSùæŽñíä½³ÂÊžÑÜfŒ²gSÎMÝĦБ›´E~µæ‘jä,\ öxÓ £Õ¢ž Uû’´oœ2Z¹LZv-îwü;å» Í¶[Û–ÛG}\ÎÆ¯›¸IŒY6}jKêB'ù{ä¡Õ³èòBãNíû·ï÷mÏíßÞæ&£U”ÛélÔ/³•-pùbtW¹H»/ã"ðIݤýHE'QnÒ6á%n^Ñî$g·",¶2Ú̱-žÅöƒ“dOY{31»«P¼Yʬ½‹ÌÞT,¹@k°jÔÍÜDmQ]ÞЉ“ bBÍ+) jäÑè!y™“Œ"ÿèš[>¾æì¢mNr»ÕG[±[¹ÂîT_uÍ€­´Ð$O*òÇ!Rín2Šüñ)s’ÙÈ_.M£Ú.MÙöÃÙ ûñ]dt$F“®l"~Û`²ã"8ÀmÜ£ÉMöK ™¹IŒüÑM”“”Ŭ³NRXíd6ò—;ÉÙX¦g l›”€‹à"ÐýÆlê&ûùÆÍªÈ¯œ$ºIùS~5üD9IÙ5ó_ÖIlŸò—.³-pTX»4u‘6YÂEp€«iõ^7)BE›#¬¶…õKÚœDý¼ÜMæÛEœìÿ¸½‘s6¶9Iv:F[·3.Blë$¶‘Ÿ¨€›\fr»°•}Äw“&'پ痔zjÜà¬G—]cv œ³oà7ÇÎM”“´¦¶ƒSO\ߢ¾ÚIš}Y9I¹4e7N‰:º\šf'”É’Šú£%wÛV°톋À'E •Ú/΃*òÛ¹‰BõKlOyt“òædñµ¨"¿°ñ\4uh¶ý¯ÉenrvQâx Ú$írYÂI9üìyåŸÉª=è7yß%Pæ$Ñ5Ô)_—¨V˜±oä,–¦Ñ]¯AƒQ³wssÔϾ/À'ý ¥›š*ÚV¨‹#»“ØÁÛ]ƒ·»‹qÜäÒTcX÷ÛM6ÈFþ|¢.–&;'9{줼@ÕíÌÄ,ž:d×/¨ùŒ¶Åfwµl_.O£­G¹°|žñü ð¹n>‰ÉBa6Ò]¤MšÔ£Û‘—ÊIÔp|¤nR&ÊóÝìSþr‰štP>W-1¤v׈»m@öyÐ$j'YT¨ZöYíF>^—ºèZ´Ÿv[¡7u“lð´qÛf·¨n —ÝeÃ&꫈¿¬ÐÙ^Ôî“åÛcª›f¼gQ¡ÊIlF½E±Ûªuì"4pàoŸÁ¶…κI[a#7il–Øb³ªhÖI–òÙÈß&M£S–ÝÜÑÆIÊ¥I¿>»ˆv’æ=rp8ûÆlým Ìæ½67QÃRì. û¡Û·‰ËöÞFN²üZÌ:‰r‘2'‰.瑨FNÙµÛÑItÇÞEšW.ÃEp”æ&³Ó8ÚNíÈIlfê´»ÉèH´7t²‘¬å‘ßLšb’V @”5pf]D5rÚºžã¨ß®¸@ ÿ¬nbíª-$pIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/GA.png0000664000175000017500000000710713657750470017265 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÒIDATxÚíÁq9 EºØ|òuOv>mÎD«*Õ”Jtcð?ð¢-ò2eYšÁ°»Éÿøò峌o¯ãÇ——Çë8ƒþ{¿¿¿n3øŸ×ñýûŸy¯¿+›©õ߬ÖûÈ ó ü÷uüúõþê˜6Ô{ÃÕ ïUfàj€u®?_ bÿ6Ô3ОžaaÙŒþ~Ú@ö¡aïaâ^üúõåÅJ½§–ýýÇçÏñµ¡«Þúçý^À°z†F_×÷Oì%oo€Î:£î \ õîAëž”h=uooýþº¸þâ©É«ÕöÿÛd×ÏŸ×<~^&³ÎøôŒò¸·<6y_˜›f$*ýËf’U1íðTÍ&i&ñ$<Ê$2xRIþõïeðT%ùË  }ƒ6hB%”IÒÐÄJ~O–A“Jê£ÐžA•ÔÂ&õ·Ã’'õQ)„%Lê³,"7•øÖ(‡%tf-ãT?£K‰oû`QÊ UIÿr—‡ŠMdqOß­¿‡:.ÓðĆ#X—¯ –²Ò¿  óQ²[”÷…„!±kC³eÝ{i&arY …'ï  Ð¦º¬ä·fˆ}xà§8j 7óáå† ;´±‰§-©³ˆXò?–…5œ`1HyàÆ‹lƒ$ôVXYÄ‚©#ÝÏè ÔX÷b9D¡7=Š2CYéßÎ$l8¢ žP!še“0ªŸ#PÏ8L2‡MÞª^ÿ¹ÂnÛêþ\çrÒߺÔáô¶Œ©·U¦…jÔ‰—¤á)šŽÂ² m ZòGÙDî<Ï–Ø¥©.êÝgƒ‹iÑK h‡—¨äo[¨×oÊ.;ìVVVó#ú”ånÙá†ç{óÆÌ¤ç rR¦Î8|86>½Ï——íë_Ö ×¶ƒl«+¨’þ2æ¥DϾ‡õ w$rœ`­’üaCÇ8þHÆ/3·Y¨U[šÆ¼M,X›mêæ%?㌩àžu}”·=Ê:Ö½Xië~ëÀïïD†È »M0ql8ö6m•_p»–AY¤–°KwØäŒO7Æ'8ŽMU'ÙÊ ª*MÙ[GˤÛ7>U~üaƒñÇ5Æx¹Í‘¡±‡®XÝ~lÍ3tàÁ¿ç†Fã"íug¢ÍpÇ1É®gT£À¸‡bL!ˆ±¥4Æ#©.ç’†§ê‚8á‡m|I¡ñE™nSÖj|a°±¥ÕXÉÏÆGÊ \Þ“úÑN[uyÔ{ÕV˜­ÓoÑÞ6&«Ïøk™d ÿŽ-˜=¶äøØ¢íãËÞW5Hw[ßzá6Í+²í?<}'ë™È2 *Ä)£c[иÑüsÉÏ*iëçilö,{!,=¿tÞ%c©.Ý&ÓSÒQ)›Éq,bÍhÖÐöŽÐžNØb”QÊ]žôoƒ(kOFOlûl"ò°f¥¿ŒEÔÞ~ÜРaž²Îf¿•¥Ê£áV§™Ä‹ ±3"‰±XM,¡Z5l ›«ï1L“ ©P(“È Œ*iv9‘Á“ŠE ‚]:–EPžYê ôœq›á!€Å(m÷Ô*íÙÿ—fIÿ(›È‹°a ¯’O›¨¶ŒITÒ¿ž0ÉÏtðÄ5@OMøa ÐPVò³LR–¦—•ürhÊJþ6hbá§šP%²ˆ–ºX¤ŒITq‘2!û¸—ÆÀú´—W8 r†ót{ŒÒf'ý­øID]K–M g;5ký¼žj½þ26Q3IØ@T l‹<±’e4±’e94UI~94©$¿šPóÍ+ä²õå°ÄJým,¢’úmªâ#mò =³ÙK‡A>“X÷ÜÊ&LÄÀb“vüó%k€§¼‘Ë&Ö¹”t95‹ÈÚ† UÔÇ9ŠÚ;’‡¦"EvåHKýl"Kô ¢RŸ•ð«¡áDÎδuK¤g ?°°$“þl°°,€ÃJ}¯¶‡ŒæTe‘²äб°dê1È6=xXäÓ³Év.fÙ¤¢®¥4À#7Ȫ§…ê?Ê"> ÉêòU,RÞ+q»aÙ…üÔ>c£Œa Ú< ë2ãf1JYDV9{Égi&A+Ñ¢†ÊàÉò1³žSt‹„ó ³71kàzɉfß×’ß«D˪yHLMu4“¬…n¢§ÿ³}áÃ:e¼üÇ~2£O:ƆS£Œ#ÃM‹ÈC`ÙØrXò F7yY;àêøÉa‘3 ¹mЯ·°òšÀÖÂkmeeu·PéÏŠ yî–·g•tÃQ"ŒM\ òö³¡WÛÎ>Es·`hò:˜²î·hä)­¨Õl"7°*ŸÐ½ÔQÃÊ¡):sÙK '8ª¥>û°„O‡EÃ,4…k~D'ã°$Þúò,R$ÐB²3K],r˜äŒÃ$0›lbžMšÖ?oôOÁ6ï ¨š‘ÁSVúoW1Ù€N:w«šI¼ŠrQ1IØË¿ÝÀñ—ø6Éøeæ6 5ëåÚ¾ÕEý„åbá6rëŒ3îÂ"ÛÀÝs}øl²yl[ÇºßÆ90Ç»€Ç;ÑLJ!nÈ LŽe¥~7em¯(ɶ”t¦¶'U°²k{ZÊgÜ•MÆn1JÛyºlÜDžý;.Myl¢÷íSå·6PKþ²ãã¼øjEË"á8‰7ÃYÉ¿­¥uù±5ë£[ZûÁ¿ªô䶺3ÛŸúÓã»gœ1M¢[d™ôgÙ¤¼î »w–¯»M9—ÛÄÙ^Rh|Q¦ñe­<¹¥VÒaª³fv{iµñÅ领¶•÷c¥þ¶‰žÔß^bݶéÄÇæ2§*½xÆ]÷T¨-9®.Ú.‡§±eï«ØÒ¿š¶µ^PÇKÊBb¨ä÷½¬ýëÝge—œIÔO}šêÆ7ññ:Ÿnoƒ4¶‘»pokÅeKúk‰¿­™û6¶ƒËɳ£¤Ï¨Ž‡lk,:¾5ëØæ¶êöÀòÈÓøËQéõĦŸÖ±M¾ÙKÖÞ&]©2YÉŸ}êâ—.šý–®XÖ@zýÓ1º¬ÔGa)±~¼‰­T(ÔvŒE6*íkC­ô»mp²§Èθm8b›a衃öÜ­¬ôßÎ$¨2C-éŸÝ[·I~MÒ¡1ïÒDìè}`y@ÇËZIDATxÚí]Kn+1 ëÑ{w®º}«ö]½sô&y‚AP'Š>¶d*%7Å ãñؤdË//¿og||œNÇŽØ¿3¾¿¯W¢Ïøúº%xü½¼¥Æ¿ÿ9ãýý–àñwë}–“ZÒÚrˈZè%¸¬ h7:Zb$¨µÐr‚ÒGbZKŽ?hAé†Þ¯ØÛ x}=no8¶„Dplùë}.÷]NP#¦-#8¹<êz•f–2‚ã«þü¼;®Òÿ%üIç>IãVú}@¹x ˆn^–X¹G±º7i®N'ªg’G Ç”LÔr‚ÖWk¦ËÍ“Uʺ»ûŠÚêI ÌÓœäO÷…ªUò¸:›Ô·z‘tW'µ„äEÒÍ’õJ^¤À,ÍubyØIò$ó]ލ¡9"ˆI+ÿÕ–ýY f¢¬Bt„¤zü)¿¢ù“—ç#&‰„„æ>±±“k„§¾ÇŠZzuš¢žvwšnóJþò “UêoW?‡Ä×¼ˆ4<•É2mI@áGó$^Ø$æÌ$Ñ‹ij@“g3Ø@õ( eÖ}em±#¡3 ]7Ñq.Õ$¿Ö2Öu6áÕ$¿÷µæÕnVÉ/u‰´Ü¤¤gMSA8å<Ûbé-¬}}VU´~ÅŠYŠÙl–üQØD ADY æ±òN›Ú$e=Kdš¨¶î677ª˜mÂÔ+ù½¯ztwË~ Wòk¦iyîž ü+†ùHÚ 3°u›©Ž ‚¡fÁ#Øð›¦jà˜°!`ø úö4DÛDL*LSÒ€ÉDÐt¬Uê$´m]¡ÍÊ#¸EA,šÃ¾DT¸ÁˆÂ-S†]è »TÞ»¯xù×ßh»è†MIKòic$vÓÕQ©eÓ‹“oü›`ëÏháºmqB P‚èëMÚ›)H÷&m âÀ–jP” ¾¬Õ}¢Òƒ6{LÐêEÊëR§óIýíåý¢?½@¢•è¶“^i¿Í$EÃrðõX©” š¢ÝÞ¤AÑvز÷ð4=zöð ¯äO?þþ•6GÐxCåfi¶+¤„?HJ»áö£¸¼îmÛafVïëA˜È!ºZßCèV²ƒV‡_µÓ0½²­½I!Q›ô½‰ÜÂÉŠÚëMÒÌ“UQ[MÓ2‚^áYnšf—@i¦iš`TI[ÍUºÔæCÒg QâÔwÖ> -Q“NL+£´™ÿ ˆç³°ûHbË–Ûy“å}K"¶-x¤íѼ‰Õ<¥}óæ)y óš&­O/#hMäHÓ7cY½ˆVÉ"íÀh^$--ôFL[qé½Ïò™&*ñ·y‘èðgh¢?î{“ÃÎã‰eD½¥%Ëêík_›"a‚C’€…s{Ò¢³4ó•üeÇЮ·¶¯õU»M“¦¤£u¶–cÝ ¤ÕÝÒR`îqQ*WÝn!»¾¢L“>~‚…綇ãt#Nñœ°/¢x\Ô½\YûkEBöŒ£­Ù®´Ó -ض*ì´S3fóXæIà ¿â6I»a¦Í@ ;ÕA0ô<‚ ¿Á0Û…€á‚èàÒ³- “i’Z´Œ |2>kÏœ¦²$ JˆA.+ÿ`Ø}teDá—)-·ÐÛ+¶-•ª»Ñº»YÉŸ¶]~Ëwx(ß2$…Ûtåýz2K ÿ¬DuL³„ ÍQ­´a‰ÁWè†-¥[ŒäL9ø‚8ð%…à‹2Á—µ’µ×“¤ÓúLi5I Â§Ó–÷,(I|J{z‘çÆ("SžªÄŽ+IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/CABC32.png0000664000175000017500000000477413657750470017642 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ‡IDATxÚí]Yn\1 ˱{œ§·ši’l-ô ù i2Š™´déãC ÁÏO¼^__é ûõ‰¿¿Òú6èõ__ßÿ>ŽŸøŸï×¼ÆÀ÷Ô¡)^7 šbô{Ê Œn’t×Me`Ú&z¯©ÕÀÕÿ!×5ùþ~ÚZ]GpÝ ^×?4m¯3pâ÷÷ÑW4Å垺™ô“&ël-;£³víQ(S´‹fSH›H›LQ~šÍ‘EÊ×&A”ŸV4EuÜ5¬M4YTŸV‹¬ß·´H™E§Ñ"Y—öè+KIÂS4 ­aôÚ„Î@¤MÚü`”ú·Ÿ Qi(?"m»1Jù˧1ê(q-Ó$§Z¤ÌÀ•gpÒ¦Þvˆj’´Ýí¥ú^-’6‚Ñ¿p5´|j«;í—HÒ"‚P¼Yè;×j“r×ôÝ2ñdѯõÿ¡5Wv¢X”]smk ­!¯&);‹Ñ”îÞò·ÉÌÓøHš&Y?QþÝøHMBá¯i#®(ì€ÜK›ƒ>Õ"4Ìš>%€>WA‰§deGe„ÖK`­“¥éŒ:JùË9ѵ8þL Ýê{“É¢î(]“Xþ¬]“\£E¬‘*ïjñ[Ý ]$I¡éˆÛ½ýo§YÑßw° ÚeÈVοù{Ñ%:bÖˆú[#•q² о3>M§”¿"ªo­©1m‚Þ.ß´FµÈ˜&Ao›vïnÚ(ÿ¸Aá†qÊoå ‚ »Ÿ1wc•k±èVÛ‰Ñn@ôİ(ÿî̤§Py©¿•RqІ!Ê ôR~ï£).Ó$Ö·»ÚˆÙ»¹ÍPïš,3ÀÚµèÖ‹æèAx:¼•Ûüb4ý„V\Ãbè®~--bÖvFýMÒ®êh¦˜~“й™ë5ÝQ'‚@FýÇ´k.è®ß¢¬†–òH‰N† ä ÍÑ »&˜HŽR}ú?@ZD„dw‚ü$ hSDè’lєӤ)Ó'zÓ¦ÊÓ?6 ®Aóàåš'C´®v×^›Xò~ÍÃ?A„aB_‚¶”†×à1mB[Î…¶ }I!š¢L×”µ¢- fQ~šÒjÞµgýÜ:òe•½iËûyGh¼@¢ O§þôn‚¶`¶W£ÐL5¡´eïÇз^ o^±KùÇ[Ò5P± õêç¶“†¶‰O–¡åmN¯2ÚIe³‰%A`Õ(ô69¥þh$ÛÃcíé,Ó·¨¦oòMß&=JPÛÍ£M³«Iʦý?+€Ó~RxG~¬Ì®¾¦»Ø”Xi”bÆý}DTtj¢Ú$}ŠÐæM•*Syå÷†#ÒÅ“E¯¼”¿|ªw)¿•lV&žÐ[¦¨xJÏ‚³(?2°½Ô®e zë4æx½üÞ@ºë8Ë?J‹Dw?­×ðBAÚ„M£ÐŽÀ8õ·T\9aµ˜·W›”¥ümîÞò#m’þ*vW›´ ùÝ0D¹&ñRþ1­_u74TŸžÿш´XKtÜÕ ÜÂSÅOÙ¦Éògé~ÑKýé´ K mÒf`”QÓj“6å? 蔉¦,Ê_ööýñšD݇¤E¤EnÑ"‚p‹ ¥þå™n²µI¹xB‰ÜÞ*Ë´Ô?ÝÀ]ÊߦMN)[šJ6åOßÅô¢ÉZ´š$zå;n ´ˆ´ëæ„o§MÒJE²k“6O‹p¦½’°J ¡²Wåâ ½ ±¨¿7°S>µ§¢é˜dXŒz\›œŠ&´TÊéY4w¿ý±ÕŸd\4Ñië dÜÀñ7LQªO¯EôNDn_›´€¶‘”÷ô˜ê³¨?2p¬’¥M¼´Íµ/±DÓñ{‹2y5IÍŠ4¥hõu·(DWÁÖR);qvëk•O)šJšÖ¬ã¢£Ev„æK¥1 @_‘Þ°±©¶fhOÑæ(°Óf˜W›xiVù£¬(õ_>ÝÀSÃÚÚfz kã•V“GïZnËÀŒn²²GW§ýIʦr·'X›XÕV?;ÃÆ5ÊiÛ`Zm2¦IÐÑØ¦I¼‡?J•¯ÓêmŸÞÖ3Ç CDµIºª‹VU.MÞnBhm•‰¦hÿuëÒ×¢÷¦ ê–Òü¢5•QwD_Ÿ_¡˜T”‘‚Sm2౴ɸF±4Iû”F›™!m2ÄÇÒõVC¼Ifm†Z](ËE“Eù½š$½}:rVÐÐ2æ¾dB‹üÔ¯Y~r[4¡‘ÚuKcMo-õÖ~‰$‚ œi”1CN›—iÞ‹NЧXÚd¼(“uu|¬I,è}‰“n õÁÑV4¨¯{Ùí¾÷õW¹X:¥ú»»y¼×¢µÆ ˆPl?úA2‘´[‚wL›Œ‰§(›¡Me™EhÍx ë£~Œ&iWucS|Í&yŒ›¹ÎQÓu‚ Â%—G×]¿Eÿ7?¤¿¾æ6 á¥üãš$êNÚCaÙºúÑD§Eè âФD —XA A[š2m¢÷u©òt ÐÒ=׈²•±/Þ¦}2Õ"í)P^7Eó~dü៥EèžNz5]uÑÕàð-– Â0è˹\S‡¶¤—òe:]me­,@[ -…qÑD_œŽ¾¼Ÿ¥‡Ç $zµèŠtz ¥oþ(+õ§3¾ì=mãDhZ/x׿xóŠ(“oÿá¥úã T² =f=×4ñ¡mƒtªEÆJKÒµâŠJ§Eh6ÖI#¢þ¬ÔŸ®¹-m{`úËë‰A×¢Ú»6Ç›|¯#Iß&¦Ñ¼7ü°+šÒFSoR2ðØŸz©>ºÃ±¦2½‚ET‹´pÖ]ÿ€ñ<ÁkµÈ5´L¾íZ[O i“,zE£MvÃcŽœÞÀhÎ~û’@¤Á20}÷£)òR}Ä'˨>šâ]ÑTF«¼iz–XJÏÈô¾mZ @†–mo2¡ô¨J‹¤íêk(>MÅ i}í]×ûÆÐèÕ/Íå]±ú¸pt³´‘è&Õ è¤c—ò·‰¦lÛèÕ¸Y±W‹Œ‹¦h½…ò“e`´b›ìÜu7mb‰Ž‰Óki‘ðгa–gÄfúIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SB.png0000664000175000017500000000047313657750470017301 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÆIDATHÇÕ–Á € E»¹¸€'®ž\Á“s¸# ~Lj~(‚‚ÿÒCy´¥Täo£œ aŠZ–ðÝ|½`ŽZ×ËÖÔþ“  ì+@ J#ÈjÐ-jß98ûŸòŸ]R¥ŽZ=3:)PfK3aNMjCÔì)‘ )|Ú°!¤-a_cíèŠø0x}»Ÿšh3@B–êfµ @}IrÛSñmî¦ÍXµÕ±TJ1‡¹OÞã§î7ÃB·ãV÷k¯:ùç͚υ²­IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/DD.png0000664000175000017500000000444013657750470017262 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>«IDATxÚíMrÜ: „sô\ ÈÊÛ¬r…¬rßdâªÔ”KCHü4¥îÍTå=aQ"û#(àÛ7 D??ôû÷ãñü„ ðׇþüy<žŸpýýÐûûç'L Ï!„êö!þñ¡·7ù[Ô¾gz£¯`Ø-°M€ÚŽIá|ùýûãñù…ÏOiz‘¦›×Àþoàcr tR)°1À„Àlþÿ•ŸŸ µ> Ÿÿ_z`_ßìÒ¼öüwXó@QÔU؄ƕl‚jýÛ-?|€åФÚÆ$’åŸe’„ϵÆ$åФ±ˆÆ$éÐÌ"sOuy€ÚtñÊ"ÅQuWF ðuÂc“r&Ñ §Ä&éÎ:ë2xÊÚí/³üà~4¬QÂÓ\¢ š¬–¿ šfó#é»]Ò½ee’t‡­¥ti¶þÏÀÛ7—q/E]žàÙ¤ÌYϲ Ì Q–yZµüCk³üíL¢Ú–iŠJ?Œ¶,š¤+4û”†ß“ã=-¾–'‘¶ðãyÒXY¤}%Ñ8M ³ó#EQòº’ô%oüb/›¤9ìÙ¿|v‹¸œM:6ËßhýÏwùÇ¡lc«å/ÏnZ³ÞüáÐ$Ýs#“À®Õó#I4·Ê"m°4>Õ¯,B&¡(ŠjÕ¸B„ŸÑvÖÖ£‰ð4·¶j‡ÍÒôš‰Dx:?ydµ_ã ôçz4&I7°^Ëß~âRK?À̃cúÁ M–ßaáCîe‘2&yýE‹ÌÍ›EQÔõÙv…XÛt;4Ž[/9´˜ÕÊGR‡Ä›†(ƒ&¯åoßå߆IãÙ†zö)L›È¥´ƒvˆ àx2Y„¢( TÍ»X^X*[s­KÐRæKC”Ófý5£jE„é%h-Æ” ×òkN;!Ód ÖêÃÕ´žÑjœÇy°ùŒ–>qo²ôQE‘M@w³€Øt)³îöÃúÁÙŸËõöLRNu0C ÿlè˜a'êí¯,EQÔ=YpÂÝ~ƒÝÀÜf XsÔð¶¥!à9ð©0ød¢fõaײEQÍ&ÍK!ü1eøƒÞšÏƒa¸— `_רæ…ØW†¬ÕúÓ‰/]ÅXðÚš´y.ز.EQw|1ør.š­j/ˆ3:ëö’BðE™àËZÁÛ ´Úš“.(N·Æ$…åý¾¶øÖ飠@"Y„¢(jK6/Ú[ö^³We øÖ ðÍ+¼í?àÉ–†hoêÜ‚fÎ6ñYÛ²(¿GaIEíµðŒEQT±¶inÛÖx›˰-ª7hò½I›ômÍ{Ÿfx)sÐQ œô+kM;H ¸•¥ –²ïeŠ¢¨|UÅ&ÅWÆšú/cÉòÖßÊ&‰žðÑŽÀ'.uç»ü³[¼é]`Œ²úámÒa™Ä;$Û˜žÀñÞ;Úa2X5ÛÀ}EQA+Êóß tÌš\è×–ßÊ$é,âµü ð“ŽHKäh_ÜÆ$Ö¿Øë¤ÃŒ²úágþWó#0t;4Y¯ôø°ÀÖ¶ÌÒl °°ÄJfEO'v6)ÓÑú['î2&‘¬ÿvlRà\B:L¨uMµ2Iøµ»Ÿ£­~Û‹Òd²‹ÐNQì56i ¬Í½d±I¹åŸÍ—”Y~/“„_Aë½ãOà_Á(7“f*¢w÷ËžêÙüH[€0°D¹ n’E(ê*~Ši ˜W^6)HìØ¬ÿÈ$ÒÊS¶rxó%0–¿šVLcëSée’²“™³VÎò—MèR™*˜¥é¤­w¬5PËŸXðú6î…¢¨«éˆlrÎ$m¸VGKb“txÒv±´<ÉhøŽîKOÖ:Yí «£–†°¼0ĺåO®¦·š ·kQ»úé>r–EÊhžEhõ)Š¢Î`d“¶~îR˜‚8“À ˜$ÜÕxKãZó%mVÊ¡ivh¥ÿ^MÞ!K‡¦¨ôCÚ¼¸Úg$½ ’·Ð×øÔ—õFôNO´EQÍ{5Z÷ô•D[Y¬l’¾²Xû³·9f¯å×:m²&tÚO´C“ÖñEòph’ú¯[¯Húé7k“ÿ¼™dõ½¯e”€ð¾Ø—7L[PEÁ³IS@ÖϲĎÕklÒ¾-ŸÐ±2IÛ•+‡&¯å·ÂRØC³Jgá‰ëËTóÎ<é]¦Ù!)lƒµÒE(Š¢¨3ëÿºb€,mZÞ¤,Pk¯0ÉÁÕ£…§2&‘†ÆjùÃÔ6ϽL"e¦‡Ø 6Äá°eõ¥Ÿ‡³þm¯ i÷œõ·/}EQ'hßלØÙvéKß<_õƒšÁ-sÔ—a’rªkâí’m§™m&j²EQÙ¤jÉ¿²ak2üð6›è°i«å‡a’YÁØ–LÜ6 “Ðö/mdŠ¢(m{ȶ¬‘ÌAïmŽÊKƳýeÍòý®áýC`«H·“´½tµÍkk°/þù7‡È"EQ÷før.ðq4×^RhÖòk?ß^ɶ¼¬U“À”7hƒ&øâtðåý4&i/èg‘¦“EQw|Ñvø²÷šŠ6ËW¶õ‚ÕòûÍEs mí?¼xÚÞur>Ðbª+oâ£Y}¸6H°¤dµâ¢(гþåÂ6·•Ü L{àm,ö¨¶ú@û¼K›tøFó³ï¶—A“¼«þtKL’6oz™D‚¥‚yñx“³È×·%n(Šº*À[Ø+Ë&³G¥Ê;«éˆò+z¹ÃÍGÚfù­,`z¦Éjõõº i<|´ø‹HLR0¡Ÿ3Iû&’0<‹0aCQ»2 |zvÓ(j׿Ìú{_ã€â¶%p5_ˆvÚ´~‘—IÊÔΖ7ûÖX$=ãµúíÐ$¬1IûL>itÜÇ@¥iˆùjwýàÄ×5bëIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/GA32.png0000664000175000017500000000643313657750470017433 0ustar jamesjames‰PNG  IHDR€Ce vpAg€µ’±¡ pHYsHHFÉk> ¸IDATxÚíMrÜ8 …sô\`.U¶³JŽÕœ#7É8¥J™i à{ÀѶ©…+Õ±E‘Ÿþ>}z[Ç——ãÛ·ëçVcÿ½?^? O⟗ãë×јõóúMÁõÿF Ï4iþ÷åøñãúi¦Í[<³~ æ{<~2C~saÞ2<–aË$aùRüwhÃÈDCæÄòNþüë—5{­™ŒüÎõÍËyýh~4`=ÁÖÿ‚&_ [æñŸã÷Pk×ï?ð¯Ò¿ú€ÉGãyëÏ÷;hxž™×—\?GÃãçÔLF·ÂÑò¹xsüþýÑÀõ‰`CDtBä‡ æ±””Ù^wbdñ³N.,,>šgp¾»4s!t!Ø|ä³Nȇ=‚2Yô™¯ ™n‹Y¶Æ†x¨‰IL^]Ìг¢­ú\Ä("Íœ%Õæc¦­BÀóoÄH[3þ zoBÚ|§eàçOƒ‚æ*a.Dt#Ÿ¿Õ³äE Ÿ%» Ì•¼ÇúøÌeíÁAñe–›| ˆ¨žaÛ—&x¥ã ‡_ó7­ÄiË—Öæb™ì®zzðŸô>mAâ®MúQ9qI†yî4ЖµûÚzŸâ™GÅ:ŽA‚IÇš”×ïç d#¡¯;¦ýXT}2†)‡¶‡>ˆÀ&ó8Íû«O¢ôNì;ñ옞µÀ&Ö{ð»`®qße¢˜ÖÒâ¼pèñ%´ócãCëM¥N z 1!NŒ¶D¾Åqð·Ò–u ©¼gK¬j!ä/#ô‡®h>9É2òÈ!Èë‘@üsG^äƒ áE\ñŸÿðÄ qØ#Ä–¹|Ø3a(ãêò{ô&›«×•ÞÔqûC¶}ˆ¤ð·ÈÑËÄJkà>C"³Y>Uš¹,WîÌ ®Øã]_qÖëR#ã“»×óG“[•s|æ*%í{b—Ì aÜ6n‚á1XK0H-°ÅD'öfôAâ¨qæ2ͳè#S»fîkJÁÞL øI nÂÞìgALú±„sWzXM0ïG‘‹W®Ì€[žÕ o™±ÌóŸìyE³V7AÐï¼®ÝIh¯;؇s”1WÉów$9úßÓˆxÉüûyåhp „¤í[K,¸ø‚«]4òᎄ¼ ÃôÁÉ+%»°Å ÊÄõDP¥ ûC åÄ£…£xÏy´¥QƒO.oñN\º_·K=p÷œuœ~ç( 6L.ïA*‚Ù—UñšU˜a à¾„¸ð¨zb?¶‚\·‚@}óm†Û†ºmrµ=NÍ HlÉôÃ4 7‰YT+Ü©N@û9Þ"г¯0²wìKÛ¸Vµù†×Ô†ó6)¢M|i“›Ú¶6I±YDm›…òØ›qùÞäÓ–óžÀýsŽ÷éI¼{¾=þ*bÊ]õ™à„ øåÃ1¬ç^@âŲ-ä¦-Ȩ-¬ª-¬9t®!X¡Ž’ðHËüæ€Ð{ó¸¶U’õ„^ÞÊ\'Þ mP›4RR’pTiG4ò©­ˆ)Ù–ZÖ–Lל>Ø–0Ù"Š ¢p ·¤{ЃKkâZ7þ[¡¸bRãgæÎBæjاϱ™« 5"i(½ÒPl¦­¼N¾ ]=²­„RsÑ(¶L–µ×k¢"Ìåo”a·}C)´{öØVüíñE Çô¶¨E¦I¡Iÿ$ÊÛgÆæ®.o'ÞÐ@½¡eü¼bûÑå6y…€‚´•Ñ~Væa“‡°ÞTAÈ/:!”B3—¥Ý!W“‘/ÀÞ7—ÖÃHLÅeæòÝz>s…¨£ì<)ØcÑG {ÂÉ`ÏgŸ¶R˜§¥-sÅ´-\wnæùs^–p8ë u.Ÿ¿ÄÆ,š•/!ø=B^’1ðâçO$ȧQ€‚ä•a.°¿ª|²øÌ„=¼u§µ#¥`/>)Ø‹¡O öüSa‹F¥ #yÆ)ÌC §¶bÐ#6S¸Ä[¤][‚y‡³}‹ã}ɫȴ‡A3y•˜´b»FÉMVà!¯9 ŒN;ÊÐV° –Ÿ) ·"ÄŠÒâa/M ~]+zX¹‰%QèŠ}èA°f4O\±ÿ ÞÐ0Ï M¸ç‘ D,HkôXù/A¾ŒáŽO[—HæÍæ-Î*Ümµ“W9W#ä%¿GÂ%·”±93Ñ߃ƒÈkÕ‚ ª|F}æ?‹e5.Ìãè×m%AW^)\¤¢é MÖJŠþ°³xèkEÐa."g†žm 0ÏŸ±>æ•0—óÃHUcîø´uÀè£ð×£$šFâÈ‹ ¥ÏâÖÓF ¾Ÿ]ΞÊ<øŸ‡ ò;±ÁO¡»ƒÑÛ†/7!pO¶ô=+Œ{•S ò"û»‚išË¤5ÑÈ–BO[O%²ÖMž¶dÕPËM² Ë©ñ±øksÍ0$~“'ËäÌ_‚Äg„7,gg°Ó5‹;ãÓÈ7kÈ;¿¿¸.<Êì¤@ þ,‘þˆ>V%dK ‹Ê„˜kL¥Âó2í{ˆ0תz½Û` 1ŒO7ZLDd`œ×‚`£­”˜ÈFާ0Ï: ¹Ou É+_‡¶Î!˜Vh×EYňyq˜—FAÞ¢@ÈF’ò-ZKËÂ`:¼,䣙‹Õ~‚añ’Ù²÷=NìµÎ°· L¶‰6~ú ´•‚=Ÿ=XG¦•˜BÃRÖ–ÖÒr“n’-èÁ+±¥LÆV.æ! Ëa®s”M.AÛŒôt×ú1ÑnÛwôáä•JõfA`6,ŽèÃ}‹ سê÷"¯©¸ÊGH†¼R†ó¾dsÀÙFØÃ¯•ê…ã:=È#bq¡ ="#/½Â¼ÄòÉÓVzÃ`Û¥—oˆ‡¹Î±eŠm¢-Œ¼¤O°õÛ±Åk–¿;‘ ò}‰•Ùhߢй¬¼‘mŘ‹P}Ê · uóäj{œšä±|ÉÄß’e›Dó¶xŽN[…@o½ÂØäU|>Í ¯©[_ÌÛ¤ˆ6ñ¥MnjØÚ$Å6µM6~ ¡ÜJÅ)t ø×Wî y ÷Ï9ymQgþGd²šW*bk8FCÊÓ…Ü”eÐGVÕHfïBqÚ"t.k$Xô),'. œ‡Ú_ KBó⬧ò _{êm s>ÇÇ%/|qB^²Ìcd½Dg6§=Q¢UyjY[2][ú µ-f؃ Ìy ÊSDÛ’bqóâ4`z Ÿ}ç^aª·¿•'·¯ŽâtþŒ£èo•³ Ëi›ª½ÄŠÍ¤¯¡¼N¾ Ð¥a¯°„RFí‹>ú°uùƒ]ž¬opd®Ì̧)³­ø›Ué·¼Ü]C?d1),ix‡8¸SXÄ9¡Ò²•ÜÖyØåý¨Z…wÛJ 7UΔ‘N©|m…³qÂõz7GG†±¤|S­-µ3Ÿî©¹©Ée¾¼­Cz,fÐÙÔºÃ?‰ ÍJPÚ*mÏâqÖ¶†4Gt*7¹µ±TC+­¶æaOÔ. '/Z^lk‰÷DM·¶=DЧ¤Ñ#Þ8»°µå¦fžþƒTؾԂžM [}è)mQ»Æ MyQÚ*jC|O[Û/LæjÒ†ê -ã-*A¾ùÜÉ!eØúc$±.Õ”×g.‹§|ò"ª¡Î_ç‹Nò û_Š«(ô±¦ÕJí"õß¹—Â<üíe’@Fr}žãµIDATxÚí[®7 D½ì,'ËÉ®;ÀÀAII$zª~N®=u¥nuÖƒ?~|þþ¥Ÿ?ÿ|âŒýüO>1Fñ?úë—~ú|ª‹ÕÅÝ-øÏ/ýÿs¬Ÿ>~v±õsåÆv –Åü\ôÞG ~þÿ±›éZƒÏ®· Z?Wfpw˜)3èýƒ§N’Ä(”\h O ®b“¯3øìÚ±.~† “ì&j¼Á29¨]56n0õÛYĺ&ÇYÄú£ÃK™ÁÓÏÞ1ƒ×‡ékØk ý¯ °øè÷<.Ʋ &Q·½Í?ùË[Î ¬&Ùe‘2ƒÏ‹KѨ?6ÃäEýl · ÜŸ/³ˆ',‹\à ‚$Iõ66ÁüKØ«lÒž°½këR+ˆZ±ªü b]Üãó$»‰ºÍ õEÙ–;Æ$VËa#vøðŒµ¼÷ÅÖ%Ðþèʲ&¸ŽQ\Ö &l$éíÐ$xZe“rƒÑ‡¾ÕbÇáéùì.*o±hä÷˜¤¬Å²Æ¼å)ce£/³‘¿}®.k¬=ê¯Þ4íQ?Ê"í³žÙ‹d‡'<‹H’$xz<=Ç·ì‹Ik±Ùöü‰÷2ÝJ1Ï–°i° EyLr¬+Wóžõ÷ÆVÁYɺ}ÃK’0;qV¯Í¶¨c«Ë¯g,ƒàX;í ‘$é’ae;Àz‘?Ë&«¸F½ÈW«Ð”6jåÁèÞögä÷fœ¶®·Æc’²¹¹lä·Œ”!@–EÚõó¦±sàÛ¢~ôfüÞx8nwð5Ý€gI’¤·²‡÷9öHó"ùX¼Ê†+^yl² O»Ñÿù xL²=%‰2ɱ)1+IG?­‰«‹Ó-5˜]WXõwo–1FÁ;VWcîñdí=ò$I’¾=úc^EÓ þ}à¸Q/^¿ú~F“sy¢>Í$éÕpXƒø.¾æ&Á3øÿ¨“$IÒ«K^á_¿íưq#c± ÿ? áuñøDÎîÍÑ6†›LÄOÇâ'´%I’`€3†_"ú¶º¤"Ƹ…Þ×,•Çn6°º·]#õÛ6¼`· ]³éÊ3<¶m-Ûõ§¯mI’¤¦a§ü6òcâ#Áç‚?¤þP¦]ˆÂœž\~0þhµÕÈßv8Ý*åïW=*`Ks= š$IŒ’|†c^³d Smwìýná€r£˜Ò ØâוÿÀP9 QmO±E|ª¢=¦†ìÓèµ-*X’$*ࣿØ$úlÆ·Å–/°|M‰jl‘o¯%1eÒ³‘¿½Ð|ôî2Éø»+9—ó\5á’s~ž¾ÙK»†%©û.<­¶ÌulRÞBÞ|ˆö^ùWu¹Á(›d›µÜmÉöÈolžALÅ¿ìMv ‹`^³Øâýe€« ’$‰Ê(Ñ/>>p{_ìm>-g“ÕèÿL1m½/Ž&ïrƒ«où±lÒd_Ç$c;s²{ݱO \’¾. bƒªº¸Š‹±,"&‘;E?w,úgÃ.ú±Éj`ý>ƒ§#?žIÚØM^(¸ŽITÅ"jÁÛºX "}í0þ㿈ý³¡¡žVÙ¤ž²ûŒË¢6Q·³É©È_¾Ï$Ö]‹3^Æ¡ ;?¢ *™Ö5ëÅ ¯G1J›Œµt–MÚÏÝÊÓ(<¬«Ñ¿žª¢ÿqƒÙmÛ'tv#ÛRz+Õ`˜»ÏÄÚ ª¸‡«,tœžij7Øv0DtØÉžËÕX­=íí‡eì9ZÞ©ÈbE|é­Œ‚gŒQ<›´W4È×,›ŒZŒ©±ýÛ ž6V¾–kµòKyJÚ¥¹ãƬàºzÓ7ýïdï²[ ®Çï^|ír$ Ê(ØUÁ^ýãq]Ï&ãE¿£1« žv‹cvEŒ&µj¬­ÅžQµ¬ú1ð¦²ó$^ùôe8²`«ž»·,o¹Å¬ß0š¬½ùâc]©¨/I’t°Ð„™àÁïg=s1¼µ\ÖÒù±g¶³¬Ûí-8†ïz†Ê¡ÉŠüQ&9fìy-YQß*ƒ´º†Ë½½®ŠFþ,,¥Å[«¿Ê"Ç¡©j¼ÂoZ•$IúvhÂ@”2ÆàÉKÐclâ…ÌÚ†(›´÷ŒxÑ?}-ZoV­¤…¤c½$e’è¼É2E z]|–¼¨e‘èÍ‚v¼K`|àöybI’$i š0l2þ ŽNèŒ×ˆð>Qô¿g[°-Q·1 Þ ¾‹¯¹I^;Ìàêku’$IÒ%¾~+{‰Œ‰þv"ùǘdõj› ;Í"ãЄŸŽõXK‹`a) M’$IÒf¨¸·áz_·T·Ù ÛÂcÛ5²7fÃËiP;îšMW˜mkø‰ïͶ vó©gX’$ÉxÆâŒásÁˆólIì‘BÑÈ?v(S´e1ÇZYFqÿ”Ѷb>øÃé°Çû= bH´vìÄ öNš°,IŠþŠþIƒ˜cï­€zm‹z9±­Ò ¶xE4naê’x1uJ°%h°E|²ó"ãe°…¤ð¥¸<£Øh°ƒH]q kì5Aýqlb½fÃw9®DµõäÀù¶¨ W&[h~5A{?Ü`´ ½ {¼%=&ñŒ¶ GYi»{­é†§g‹¶?¯e¬A±ˆ`*ná£?~þÿŠãš®ÆÅÔ^ìc¯ËÇ Fªg°¼°|v)T9‹¬2ÉÕUAÓñíõ–ãïâëX$úóŠú˜–‘ºŸÁX6¹î]5–Q°Ã͵3Pø.ÆvutždÌØë˜¤/¯c‘v£V’ήÕj7h}q,­²H–Ê âžÍšn¸Sÿ[?±”ø àIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SBbc0.png0000664000175000017500000000127513657750470017667 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>HIDATxÚí×ÑQÂ@`ÒeØ–aZ†¾ñ¦eh–¡XàggàÈ™;Äf¾ÿ%¹õ.Ùägžáð«‡Èf³X\EÆÏŸ‘ñø†ÓMÝ6ÏPÿA37‘SøçËdû…îLøÙ-°Ì_XzÙ+0Wð6òÓ‰³ÐÍ6± ÛŽ«ý½VXæ-2¹‚½ÿéþ‰ê¿ÏB?"ý;Ópâ\¹Bk©íHÛNtlÍÜ%×Nù¹ߺò³+8×râëÈÔ¸ÇÈÔ÷}íjø}ÿº‹ŒÇÕj½þ>.—»ã_#Ç÷Ó˜) ý·ËãIDATxÚíknÜ0 „sì§Çé­¶A#Q‚”MRŸ²3 $ÈfÖzÍõñ!`ðû¯×÷GìÏ'þ}bˆ^„^_ø~^?ߎ_ŸøÁëçêƒÇ¼šÎkb;H¼&ö>§àê )'hAÁ²Atõ)KÐÎAÛ'¯ß—õUûí`È´_´ì GÐ6ñõ{ïé5q;Á§ÓLùJSµ¶¶­ÑU£» Ân†%†÷(8‚žG3Q‘àlÕÇ›Ìësžh«’¿½I=¡º*ùÛLÓS%ÝFÐ*âj³TÖôY‰¿êEÊF·×Dv´zÄ+{ƒ«ßÐmoÚ®‰G0rwÒ‚ 4ê1A›U%vÍn3Qž8È~ûl g‰GV#b^2q¬)½N>žLôÞX–XAû1IJêcUêg[¦MßYéï ŠvbY‰ßîEªº6óŽ%fG5†~‚ §Á.mw•v9!È*¡¬¸¸­¨Ÿš(–~®'X#_ëm¦ˆBÁeî."´ºoÆ~±¾¸MÍØ¦‹¼Èx*Ì#ŠÛT¥Vmì˜ÄF)FâÛic\Y{ÒÞ>·»6Û'AŠ—8oÉ›v²‘ÔìS1™Hòãd–'L³½=ÏÒ®¨W÷Ï”åîðñMŒ$¸i渉·Ô ‚ðÓpŒqdž>Ž áÃoø&6Œ¢ãÓ˜DÎ1©0l2ñnß[ý¼¶ ¸„¶ ïbðÛó°£¥ ·C»MyûFoüVyüaƒè›bˆâ¼DD£AÔ~dè)Ñ($Ò6Ý`­Eÿxõ‹áª§D¾ZºgÁ{|š¶­(çS ÐFÐþcoéÚVÎÅ[k1qŽ))„-Ê\}“m-\a0ïMFÓ̶ó$Ù&ÂÎÞf–ªÌ¦Ê<¾Ä¤7 ᫉ ‚LÐîAƒ-9Ž/Ú~\Ù{ÝlP¥¨±—Wd%ÿØõ‘PÝnš¢Æ\A“í«ºe¨Êƒ`«FáLþ2³c‰ +°kþÃL'Yuƒ%øt§yYô?Ú®âmò–¾².âå;"e5QíMû4oòX\DŠz»yº+ù½üʶ{L²ždl‚ΓŒ¹º§2küĶ7Ýl'¸=7·*ññDùAø)>ÙÛ«Š á‰mkÚÕ­ôãötõ0‚g¢Æˆe½IÖ{´'W«HÙ¿/'ø”ØØ¥Ybc‡²¢³îÙ¾<–T\dmÉħçIÚšòîÎö¥Oç@A€Ã›/·+nïLÀ¸™²Ñ{LÉ]o­õVœ±&;™(Áƒ Ïec×mÈV‘²*h¼.×j=®²¦Ž ?dOæ”-êdy="ä»}WŽ÷†ª­Ãr“Goêî´ÔÖïRI^Aá™G‰ŽsŒ/m«Ïí‰ñ÷½Ï$+³î^jq»FR~µþV¹iÂÄ7ñ1ƒäÇL3ÇMÔ¸¥NA8 cá7ló¸0.ˆîý!. ±*¯¶%r²o› ˲1bÇ¥cq íȃà¶x„1›*²„½>*ÂÛã˜ø~›2v£·'L1[åW]߶Ñ¢Æ׈b¼T}L?æÐöØZäƒ1ÿ"¢8Å|Ìí“xs­4‚ÐÕǰĎ©uޝ¯»+ˆswBÞF_” SÖ _ _Z _œî¸ò~¸‰Ù¦ÞVb2"ˆõ Çx7Å_lnXŠÒÒYIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/DD32.png0000664000175000017500000000444013657750470017427 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>«IDATxÚíMrÜ: „sô\ ÈÊÛ¬r…¬rßdâªÔ”KCHü4¥îÍTå=aQ"û#(àÛ7 D??ôû÷ãñü„ ðׇþüy<žŸpýýÐûûç'L Ï!„êö!þñ¡·7ù[Ô¾gz£¯`Ø-°M€ÚŽIá|ùýûãñù…ÏOiz‘¦›×Àþoàcr tR)°1À„Àlþÿ•ŸŸ µ> Ÿÿ_z`_ßìÒ¼öüwXó@QÔU؄ƕl‚jýÛ-?|€åФÚÆ$’åŸe’„ϵÆ$åФ±ˆÆ$éÐÌ"sOuy€ÚtñÊ"ÅQuWF ðuÂc“r&Ñ §Ä&éÎ:ë2xÊÚí/³üà~4¬QÂÓ\¢ š¬–¿ šfó#é»]Ò½ee’t‡­¥ti¶þÏÀÛ7—q/E]žàÙ¤ÌYϲ Ì Q–yZµüCk³üíL¢Ú–iŠJ?Œ¶,š¤+4û”†ß“ã=-¾–'‘¶ðãyÒXY¤}%Ñ8M ³ó#EQòº’ô%oüb/›¤9ìÙ¿|v‹¸œM:6ËßhýÏwùÇ¡lc«å/ÏnZ³ÞüáÐ$Ýs#“À®Õó#I4·Ê"m°4>Õ¯,B&¡(ŠjÕ¸B„ŸÑvÖÖ£‰ð4·¶j‡ÍÒôš‰Dx:?ydµ_ã ôçz4&I7°^Ëß~âRK?À̃cúÁ M–ßaáCîe‘2&yýE‹ÌÍ›EQÔõÙv…XÛt;4Ž[/9´˜ÕÊGR‡Ä›†(ƒ&¯åoßå߆IãÙ†zö)L›È¥´ƒvˆ àx2Y„¢( TÍ»X^X*[s­KÐRæKC”Ófý5£jE„é%h-Æ” ×òkN;!Ód ÖêÃÕ´žÑjœÇy°ùŒ–>qo²ôQE‘M@w³€Øt)³îöÃúÁÙŸËõöLRNu0C ÿlè˜a'êí¯,EQÔ=YpÂÝ~ƒÝÀÜf XsÔð¶¥!à9ð©0ød¢fõaײEQÍ&ÍK!ü1eøƒÞšÏƒa¸— `_רæ…ØW†¬ÕúÓ‰/]ÅXðÚš´y.ز.EQw|1ør.š­j/ˆ3:ëö’BðE™àËZÁÛ ´Úš“.(N·Æ$…åý¾¶øÖ飠@"Y„¢(jK6/Ú[ö^³We øÖ ðÍ+¼í?àÉ–†hoêÜ‚fÎ6ñYÛ²(¿GaIEíµðŒEQT±¶inÛÖx›˰-ª7hò½I›ômÍ{Ÿfx)sÐQ œô+kM;H ¸•¥ –²ïeŠ¢¨|UÅ&ÅWÆšú/cÉòÖßÊ&‰žðÑŽÀ'.uç»ü³[¼é]`Œ²úámÒa™Ä;$Û˜žÀñÞ;Úa2X5ÛÀ}EQA+Êóß tÌš\è×–ßÊ$é,âµü ð“ŽHKäh_ÜÆ$Ö¿Øë¤ÃŒ²úágþWó#0t;4Y¯ôø°ÀÖ¶ÌÒl °°ÄJfEO'v6)ÓÑú['î2&‘¬ÿvlRà\B:L¨uMµ2Iøµ»Ÿ£­~Û‹Òd²‹ÐNQì56i ¬Í½d±I¹åŸÍ—”Y~/“„_Aë½ãOà_Á(7“f*¢w÷ËžêÙüH[€0°D¹ n’E(ê*~Ši ˜W^6)HìØ¬ÿÈ$ÒÊS¶rxó%0–¿šVLcëSée’²“™³VÎò—MèR™*˜¥é¤­w¬5PËŸXðú6î…¢¨«éˆlrÎ$m¸VGKb“txÒv±´<ÉhøŽîKOÖ:Yí «£–†°¼0ĺåO®¦·š ·kQ»úé>r–EÊhžEhõ)Š¢Î`d“¶~îR˜‚8“À ˜$ÜÕxKãZó%mVÊ¡ivh¥ÿ^MÞ!K‡¦¨ôCÚ¼¸Úg$½ ’·Ð×øÔ—õFôNO´EQÍ{5Z÷ô•D[Y¬l’¾²Xû³·9f¯å×:m²&tÚO´C“ÖñEòph’ú¯[¯Húé7k“ÿ¼™dõ½¯e”€ð¾Ø—7L[PEÁ³IS@ÖϲĎÕklÒ¾-ŸÐ±2IÛ•+‡&¯å·ÂRØC³Jgá‰ëËTóÎ<é]¦Ù!)lƒµÒE(Š¢¨3ëÿºb€,mZÞ¤,Pk¯0ÉÁÕ£…§2&‘†ÆjùÃÔ6ϽL"e¦‡Ø 6Äá°eõ¥Ÿ‡³þm¯ i÷œõ·/}EQ'hßלØÙvéKß<_õƒšÁ-sÔ—a’rªkâí’m§™m&j²EQÙ¤jÉ¿²ak2üð6›è°i«å‡a’YÁØ–LÜ6 “Ðö/mdŠ¢(m{ȶ¬‘ÌAïmŽÊKƳýeÍòý®áýC`«H·“´½tµÍkk°/þù7‡È"EQ÷før.ðq4×^RhÖòk?ß^ɶ¼¬U“À”7hƒ&øâtðåý4&i/èg‘¦“EQw|Ñvø²÷šŠ6ËW¶õ‚ÕòûÍEs mí?¼xÚÞur>Ðbª+oâ£Y}¸6H°¤dµâ¢(гþåÂ6·•Ü L{àm,ö¨¶ú@û¼K›tøFó³ï¶—A“¼«þtKL’6oz™D‚¥‚yñx“³È×·%n(Šº*À[Ø+Ë&³G¥Ê;«éˆò+z¹ÃÍGÚfù­,`z¦Éjõõº i<|´ø‹HLR0¡Ÿ3Iû&’0<‹0aCQ»2 |zvÓ(j׿Ìú{_ã€â¶%p5_ˆvÚ´~‘—IÊÔΖ7ûÖX$=ãµúíÐ$¬1IûL>itÜÇ@¥iˆùjwýàÄ×5bëIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/AT16.png0000664000175000017500000000163313657750470017447 0ustar jamesjames‰PNG  IHDR@cL vpAg@|.ض pHYsHHFÉk>8IDATxÚíÁn1 Dûiü>‚ÿ¥.HhWIìñ󆙪P‹Ù…8“ñØýû3úáv{<^¯óÇ´`÷ûóy¿¿_ôýóùãço…L ¿ò;|(äç§xæèo‹®Uxä$>ZHEW\t«×Ö±ä»=rÃs–@°” o†±+ŽVª|9ÍЛˆïQiÇ7ÿÅô9 9p<˜œúŒ„-˜ì\ßbàóD1û†BG>ã4Îõýy oòÝI»±ñ7±¸x £1ÚKçšÝ6ÒÂï¸ÉÉ2"¾$hä¦äÀG`œs? <" ½BšÜTDö" |ËWó¡¿fÊl§s™Ú{ ôƒÚJ©ñÊKZàȆ˜,7Iöã5ŠSTi›ÕÒpÊÅ+^«0.ò˵ëN®ºÅ¿ÛW+ ´(†Æïp.û¹D~®Ùìæy‘S¾Y©)õÙ+p ?WÚyXNpÁRfSË0®û¹¤ÇTà`ŽI°øÈM¶RIQ1ÙÊ[”°bˆa dh/kdÛü\’, P0Ë `2ÂlU˜‘lvñ\ß³7Ë5w¦0$œ2Ûé\¦vưŸ«ØÏ%l´ÂZËàfºvíƒÂ†I¸EhŠ=§õòªÖøŒ•ZC ãw8—ý\R?—p 6B©©øÉj1+B®eʇ¿e]·ý\×Ö¹ ãê°Ÿ ôsÍ*!B)"4º ë&cÔ§h>—ìÅ•/9÷ü\¥ó¹äC*ìç2Œ"2´—Î5{dÝÑÏUÚÛU>ÞÁ–æçš•cü\qW—ý\‰Š&6mÏ~®}¶EÃ(ä\ösÏç’û¹Ö 0]w\÷¶£ç%Ô'Y`‹Óúd[ìçò|.× £ïÆ~®âù\qæ%×ô`ê³càÒ[-ÿraË N XÊlªsÆÕa?W±ŸKž>1)_¹©‘ÀV*)"*&cBy‹ÒV 1 ” í¥s­Õå!?—ÿßbú|®"[f$›e™-zS¯"0mÏ~.û¹ £ã¦©Ÿ+9‹aVXkÜL×¢}°¨anšbG¾b’6`X(ÇJ-Š!Fþì=öIÿ TkIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BBBC32.png0000664000175000017500000000500613657750470017627 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ‘IDATxÚíkŽ9 „çØ{œ=Nn5; ±€¢H‰R»øÇ’Øe¹%Õ'JÔ××çÄ??ñýýõõïOü¾>¦öç'~_¿ÿÆÿú´Ø#l}}þ~,Ö–[_Ÿ¿—Àk®}T`y§Y?`^ÖÎaýû6Vo¶z¯^#p`Í$ëhø¼Z×'ø1Í(ÖßÓYEÕ³JÇ&Ï+=›Œ DÆUð”mýi„ “H`—@d³Ýj('-]-«îíckÖ¯aAÒk[peºÅ(ô«þã-)ëÿ:hBlB#Ð Meã#š[i-¿%l\ òƒ4ÂÆý`–“.ëë^cõ‘°q«OÇ Ö¸· ¡ó}×A’âã Ê7•–@? <Ѳ‰µXD', ìc-ak/n[\…E™$­sX¾Ðêh|k3®Vomƒ¥l)ÿI£V¿l öZýñ¼ˆµR:Fq»ŸÞêÓ ‹(n‡&ÁS›ŒX/›”¯î [§Êq&)g´'•FJCX`Þ&l×ò§ƒ»ÂP ½WØîZ‹—EÊÓtÂÐj­(ЙZa« zQ(oƒ'ä´­uÆ2xB-e“ò–B‡¯ÊzŸdýÓSbÈò[桌MÖ–B1‰Õ)Ò5Zå·˜¤|u òéã­0dõi,¿ÕhXä«oË Ýú¤P(— Gíµ?›Xð”n&Ð"7t\îÀj¯½Š² lI¯Õ?e’04E…YÏ’õÁÈWn3Š×ò[”žÈYßÈ›Fm?È·þ4ÖOâíméKÆÖ™LïëøÎ#KÍ lÚtƒB¡P(.…#ôJÿÁ– Ó×QGmV”IÌ÷·Ž@zÓÖ«W ;ã„~’(FF[0í'A,uæ°å¼oe‘ò,fv§)³ø^)½8æ´eñ …BÑ3ŵO‰QË?^'!Ë^y¡ ¶´÷ ½ÛSÒ9»“ý ©Ž¶¯yi{1ý8¨P(ŠËœõk¬?­£n_Œn¦ht¬<»kÔé'³O/å«üOÐçI¼¤-ÓÝýV•«sopìÊv¶•â‹( ‰³¦H\-jõÛZ.ºº\pôpÀîNô´–CÇvËË Ú:= a}áãÞÚ}žd{ÜÛ=‰ÓVÆàôLÓ.Õ×[¨:6VëÃ\v®.k FP¥P(n·þ4Â,S0~1º»£}ª¢¯7ãµüås.º5c¼´ÐîrÄ$e® ¶z5b’²ZÀÑÊe^k_.8ºÐfõ£%3hnò^ÞV0:ÞY°4¾V°¤øXõ϶þía¹š;bOËÝ·=üãB£…awo6Úv‘ž×IÓ E½ÝjññÅ#oå1¡t‹žZü¶$ä®Ð¶üÈ.ݵ'pPç±2ùò‘Š×³‰¬–õKH[wƶ õ.¦Ó°IÔò· ô EkÎí-¹{ÿæØ³9vÉ·w@FL²þ¿v°G-Ú^Š×j‘qhòZýqhB3Žw#äXÐÀRÔdÐ ÜÝ © GZA4UõÐM¨í—Q ë?î¨w­[Kz5­ÀëZ²}ø±žIz&A–¬%½Ûr$ÐJÃ$ãß»¸DÇ"Q«OË"4°t ‹¬-JkhI×ÆØ”†>íõcd·dý% žhØäZË/UÐDÃ"×0 ½Õ—@¯í¢…%‹AÆ.Î8ÚTvM  a¯õg9k œHÛIdù?F µ%ІI¢F•æÜ¬¾X„…Eèöø‹A²f–ë¥ý™C¶ËšQÆ#ÈYK`×°âíceùÅ$ÝSãîV(‚¥S«?.åèhX„vóXû²ÚÇ1Ê5Ûðh¶çyež¢{ýéá©lØ=Á=~b‡®š€—MÆ…¡Ã×ASY§@Ïâ8“ Ê~BYþ×ÁÒØœ{]â†æ´ƒu|—¾.«âcØ„ŽE¢ÂÆ„ï:ìö:]»‡ÊmX”êÆJóÒ°‰×Y·³I´(“•È)ÿI½LÒMë3FSl6^EùÔò·'phYäÔê –Ðø¦Z¾ŠÛ…žèöÒÁSôF„6á§wJŒU¼Ý…§¶•ƒö{M®…¦2XW¼Ö¿MXôRÇrhÊ*›. cÎzí4²¬~›)@·ðjÍY¡D‘Ž4ûéài÷ªëö+¹ rxŠ:ì¬ëÖÇ„•§'¼L‚ØäX ú Ëa{¡)M²üˆIÒ03ûºó4ÛæµúÞu“œ²HÙT†¬þ8‹Èê+Š—Á}‚g|€G‰:X²X%ÍåDŸknÞΑÑ‹–ÓZÒJC @ŒrÜ(ý€˜$ MfKžZ~/“l ó¦¼çHVÛ™øh‹yWÒg ë2nï §í5/¯]˜T( ÅìÄPÎ(åS£÷½lÒþSD…µß@Î|ž¬#’è £lâ= `~ãèG ®õ [.úÁѬæö³Ý ÍRz;šÐ3ÍR¶ƒã¬P( …(,Ccð”e³Ü©1¯åæ5Ž©îtÝ»-oû ïBNö«Ù¢ô-Hÿ ^Ó‹?nT( …âCؤì‘íjû"eiƒ í2Ó¯ò?A›'‰Zþh f?20¼L…¦cFÙý†m[E£ÃF{¾¸®èg$…B¡P  íŇ£û¨­©-=¼ÖWðñ¹â]G]¾—ßrÔ§lâõ…Û‚»Ï“¤Æ·Œé鉜òQÁ[¡"ýLSÕ©°²Óa§,2VeÞ+˜vŒþB>¥¾ ûÚ‰µÆìuÐå-µkùÛàhõÐö9´5¢–ß+4½œ•÷§GLâ­ \~d1IÚ!üÓgh·ö›ÅÏå·šÚòXýÁèÊ„W0]º9^°¤PÈú;çVºÚ¾»•hÛØ$Zõ©}¼;Í›ÐA*w:.t ž,¡Þ‹æ-Ç\V=Ùû¬zoŸ¤ZVU9*ôô2Ÿt¡§÷4•ðÙBÇ i¼0"*XzT\iÛJº5=›Ð^rµüåqzÑ2PkÆhïLt—}[-e’¶"LÞNÔ~á|”IÚ¯ÅDB­tº´§ÝêG¡‰†EÊS`»-i m'½?¹`É+T,ò ã[ïMWtlrõ úkƒOÙ„¦%i˜Ä²úí§¬©Ë: 3v ÃË$í÷¹Ÿ2Iû „˜dÌâ_Ã"Q¡× ‡%$´Ýy[»AÖ–£¹Á€’hÑ}-iŒ FÖ<BŸ7y@:&c“×[~ ÜHÇ"²úÈ&p¬³X âQÚ„¢æ¥ñ|ú÷>>›IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/sc0.png0000664000175000017500000000042013657750470017452 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>›IDATHÇí–1€ y:ðN¬Nò&ßÁO*¤iˆ¦šØÀÐ[ôR¨âœa|c/œ'À²‚G!¥Iì*ä °œ(m- NÛê­XÊœ´^½$AõÌR.'(­û]°/ N°/uA:CMÄ{€xÁyW?ƒc¦P Æ:ZŸ°¥~/8áü›Ï Oø¾´K€a(qŒ KódIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/CAbc0.png0000664000175000017500000000040413657750470017637 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATHÇí•Q €0 Cwlãq¼U-B˜ Š)v²ü6oK³¶6UF«Ë¬×r`›ë\Ë€ÈõŠõϵ¸®±>{p@XYÌ!‰,ŽÎI|9 ‡@( zŠùÿ‹¹'±/ëU~AÃ]@¾¨ì‡d‹±ÕÈâtÀ·ßŒ|Ò¨fkÚŒV¥®ì(ü©vé2ÒÜÈb^`IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/DDpara.png0000664000175000017500000000245513657750470020132 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¸IDATxÚí]KnÝ0 Ìý^ «l»Ê²ê9rçñ¶R2EŽê™±ùô¡f$’zyHðó··ã8Ÿtþzàýý8Î'a¿øøx>i =»ÔH×Õí]üã×Wüá¨Þ{¦»0»Ó†À6z/´“¤Ì_ÇŸ—<_x>‘{AîÆþÿùÞ´±h µ]Š ³¦5ðë“Ïg¹ÖÐèdxþ€Å†¡ÁŽüÚùwZò ‚pw1e—:zRf`”²—‹¨è,Û¡äåcβ½œ†¥«·YÊoÇ\¹h¥úžhZf òkžX²]¾Ìq#C£Zd¹&‰º6±;V$•‹¥íH Âb6J«<ÚVƬíÊ‚v\Û[l–Ž v®©Q-K—ˆQÓèaQ· uDT=&ݾ…quð§¹Û"'µ¿Ú‚Ëe)Ò ÖÏY÷TNh£"©LÈ#e5H›a‚ Â÷{24{3–'Ò´˜5lVÕ¡5<úT/®&Y#í±Ä²8Cô¡h@j¡´±‹Æ˜Ç¬Ûi2f6£®l;FîÁÓ"åb m… ¥}…ñ´ˆŽ%AÈ6ÝÊáÔ?Ó¾”EYL›¶‹åŸýÁeLÚÓ$ž†IŒD"3¾‹é' ½›ÙÆQoß²‚ wÕ"4›Föˆ…”¯(Ûl\">HH»þͨÛÔÜ(å/ëJoìµàXwBwæRšCDd(Í1¬g(íR' "‚@Ž¿S(IƒliÔi½í éBåé“ èÓ5¶Ix¡M¢Oº²†Ò¥­E½×’Ëÿ²Ztyê¤ ‚ë¸Ë—º¶j)vkwTD•礩Øcy ]Í£mªFÑÖÝ¢¯\F_ûm´KÊ«çÍîÐqo¯àxuO‡ŽDè$J„‹îƒ®h;mÙ{ú‹h¯^ ¿¼‚þúÝðRŤÛ.ñ™%¨t+ ­¡¿Š‹¾‹¥=á“te­¢ Ìðh˜ räË õ˜uT›¤S~kÐÕãˆtC£]5p™&e5hì•_Å=~ˆg´Ó¬r9ê>ÊÒØFÏæÊ»”^ƒÐ«8Q{Aî_4J¹¿´†y |Aù!˜Úi“å-6K"Χ54­…³BãÛIƨº+Ó$^Ë´ÅŽvÙrU‡²F“¬–¥±e%Y¥†N7Ggá²eöhŸ&lYá®° i“öÍ#ô\N¢Ì:ªMÚTžÇéö=±Ô&à£jnVŒ…y\V=®ËF?ˆ>´ìŒÎ‹ýéb)«>–u?4·‘ÛJ{MºŽ)AÈVŒ¶°“Q € ¥]‹éZ6ªQÒÖêÙz{ÙÓŒÚ#¬£×{¤‹'zé»x»I²­›ÙÆQÓ;dAaóM¤e+ ýF&ýV°ýÝf:jQo\½d9?Õ$m³œîH,ªEÚ¨>ݱlô`ÛÎÚ¶°èBAîú [ú0eDŸh½õ§ •ò¾(ûQºFTý-Ox¡OZ•tµì¶!º´5Ï]Ð$þy†¢ÔIÚ2W‚ °‚~÷ž>VŸ¾Z }½Ô¢4{¼1I7ÉÚ«FÑ×ÝÚ¦rYVí7Ë#ÓÆmõ<ÏÐÑúƒeþ¶‚cûv› ãúñÛ>7‚³¤IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/dd0.png0000664000175000017500000000042213657750470017436 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATHÇí–Á À Eݺ@O^{rOÃMÒ€Ñ6ŠÖü—"ñá7Ac–”hGy@®ð@…@®ìDŘ] (EZª‹zzÄÊ9þ`)`«Îë{ß`·'ðÀVÁºI>œ—Öä‚äÜxáÆÍ,ÕíØ&%h)V“¦#³O,A¥Í÷ {~ìÜ\£uµŸ‡¥%¡.¯F©À´ñÑLIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/bb0.png0000664000175000017500000000050413657750470017433 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÏIDATHÇå–M …0 „{t/à\¹u¥Gpå9¼I-H(Ì3Lú«ð²Ô!ùˆM[çþ%¦ëê½èçÀŽçõuÐ1Ä<ÿ‚¡Š¯[§XçX'«wVKˆ€Kˆ}Ê~u5PVÁP›"€¶åÁ4ú³A V0ÕŸ ˜[°•Ÿ&°‹u8Šïõ)Õ¦6Õ/uŠ5¶2_1 ÍUÌ_°Þ ¬³v´Ø3 ‚²5¨­Éj€Ö#uHšÉ¢wꨩ߻]·¶í@Þw»n½‘uÍzvrÛIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/DDbc0.png0000664000175000017500000000037313657750470017650 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>†IDATHÇí–A À }vŸÓçôW©-,–…¤›й,X„!¦ÑÖÖáè˜,ÇÕyÄå*g/#ËTcÁ2•Ü‚9;_!$ÖÓA…fÿbo_˜ ‹x‚Üi½ÆGé±·O>çÔ‚²9é òÕ!$Oœ½‹ÓU½,TÍ5nu£^A›XnêJ¸LÈÔ…YIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SC16.png0000664000175000017500000000235313657750470017450 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>vIDATxÚíArÛ0 Esô\ è*Û®’#dÕsä&®3Ž'€Š|¹ïmÔ:MS”ô?A‚OOsü¾òúz¹ÈøçÊû»`€-°¿W>>.¹@Û¥m–]ê_W^^ì{-çýþò›À py˶X'²ô~ïðû›Â °¿i–ØúÐ=ççËå~âm ·Ÿ·Ï—÷ÁmKÝx{ûüôóO·cû{`Áã€ý/¿¶pÁ0 "ÌD5qPæM,ÙÔ{“2•þé—8*ÝË.í¬äOww–ä—1Mq/Rdšz©õ"‰7KT¹¹h`ÂÃp˜$8Ò”›¨¨²N÷&QšnžzEm°ÿyÚ¥íOly’2›éI~$âXêϺ¹ {,D-/Òg=Ó\ÿÆfI.°åÚÞ$]' ˆ‚ï¥ÿÞ´Äá_È“ü^K/3OÛy2ý1öEZ‚¯4õ$é}³÷"²ƒæ–m,õ-/ÒŽ Ïɯ}±ïƒ-ùéÊf’ ÅÁXxöêE@ZR_NŽ%ÿl˧K~ïh¥Ä–u Á°»ô{“å—ÞÛlÂJG´@{óTÖ'{Ùe™¦2ëy’ôÕÑE÷i©0Kê˘¥ÙtƒÜ~Lå& `í+Ðßmc±`õj]Z‹d<–7‘½ä­%mó”,»¬êÛ–\tÉ-Áj ×qÅÛe[ÎÌÎ,Znšfg¹•™¥½#²5yuÀƒpºr÷§ÙP ÷&Ñ®³›U,3OVFÉRÊÖ1Í4ɵàéúàéîb¶ý€ÿÔÈZ>>8;šVëhv¬:}bÏü(cñ(¿Õ¢ÖˆçID&›¥gš¢^¤Ì4YR_6Ûiykñ¯4À£#£¢pÊŸF7HŸ‘>»|·|äÕ T®’µÖ}ùbüÙµîýÊœ4…í­mjŸ÷[Ô¤»:Ï‹Èd˜z2_b£ÈDm/)?E‘/Œ¤éJº—þžG)ïr«e÷˜¶wv4о¦-ö:Ö"ü´ fV…þçé5à,©ï‚(RÖ²eþìÇ • 3â•[˜ýIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/CA32.png0000664000175000017500000000547213657750470017431 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÅIDATxÚíMn9 …sô\`.U¶³JŽÕœ#7ñ0 †åfñGäã“›Ü4`Õ¯UUÒûD‰úöíYâÇküúõòr}Ò ûï5þþ}ÿ¤úïküùóYàõwxK­ÿç5~þü,ðú»õ:餖´¶\šPëz¦=Ú…®–Xj-”.PúÂU˜Ö’ëJ(]Ðû{C|ÿþòòù‚kKH×–¿ÎÛuÓjÂ4¡0«·¯zÿ”F˜ÀõVÿþý&ìú”þ¯@àG¡<×)ê·ÊÇèèÀÍÃÄÄ0J›\ŸíÖ¿M´[åe“¶Úê÷ÒŸÍ*6ÙªY~‰I`lbµüV&)›[þèÛ›M’aÝe’rV&)„¦{«/±ÈÊ$0h’ž¥vÙ}V°”Õ- cƒ®ç6ñtlB+ ž7±Òš4V— Õº ‰Mè&Ö,‡'¯…‡Ã“7½Ì8Ù,4í¦! Çê‹¡É–~°æGÊ¡Ij‰6±þB‰I œ½‡Xîvè¬ÿ%ˆ”Iè,ÿ0ÈÄĦm‚³‰öÅp6±ö›ÀZÿOQ§¼~ÀÓDZ4;QÆ$šµ¶tš°hÂÚ‚á²kùË¡I{;5«_MÚ.‹¯1ItÆ!I4¡³ü°üÈþ cú&™˜¨ôYf`?d7-QÆ&Q# €§ÇÖÛÀ“O˜¶– nù5A…Cßý,¿të¬Î:LwšÉf’ô9kú¡ª»2ÇÊ$ÖNÁò<[‹j\hü"=,'nV8¢¥¸‰‰ ̘Zõ[ó'ôS…ðt¿\Š+ýPOÓYT—°çÉ'L²U{žl+¬L² gœ´–’Z š'IôW˯1Iy"G³ú»LR—P©»Ð:l@.ïñ³iM2¶US‘,û­—Ylýu("ߨ211qzhSÆÇ±IùäÐî Ÿ¾òh·Å$xr •{) ¡µLt?²ûVHŽÙûMW˜-¿5 ‘M^ËïÝ®³ú’@ºÙüÝ+oaíí³&vÊ[2:ÃPôÒœMsB:,211ÑÌ( Lr?û¯íŽmk)Éò7Þ²{G­¥!¬l’OšÍŠ2JÙr½hÂ*Î$Ò#³Þâ²<‰Öbð—)‹Eà‚Ûæf¼¥3¤[\~ëåÄÌý¬W#ƒLLL‚ì )ƒi÷0­–ŸÎnIiï­†;ê,&ÙJ/þÓ¼$Çt3´õ1CÝÄÄÄD»õ' ÚÉ£c¦ß´1µqqÙ½¤cé'ÑéÓô‰œÕòÃSaÇ$iÓ±V«€¥§[°7T,MLL„6ÉÑcÙZMÍžNÚ…Þ´Kåé7´o×8và ͖!Íònº"ݶ¦Y|¢¶GᘪQt›O'&&Ne’ãJiÃ&´å\è âЖj/ÊD_ÖŠ¾0˜ä¤iJ«Y-¿vÅé[}Âò~¶[…¥òêò„%&mÏŒÚè0rbât –H^rÜUälÒ&ˆîàÚ£¼gg§¿ýÿAz€Šfõ%טݤ=ÄgO¨Ô²°3d ’ÚëàçG…¶åM&a31Q<ÒOä¥6hó%’iHHÀ2ýÕô‡|KöŠî˜túƒæ¥l¥•IîæqBI¼-˜>”i–„–Õ¡Ž>Ô™¥Spµ–¤gG[ }؇Y&†MN;`ôÀI ´[þÕú[Ù¤ %_ЛŽ(x?Ëoµüš±M¨Y}ÍVdšî-ÿô–ôZ}«ó.7ªr·²_»,èýÿë™,‡%«P‰E`c²u&€†E´B'l ib,?«Ðý/ cÙÿ-¿Ä$÷ º×4›D÷ ÃZ-!4ù,4i¿8š~(K…YY¤ šv[¼Ià°d½ Ä"0XÒ„îYªaÂ=KXú›˜:‡IÊ…fÌ"&ÑvÒ±É:RHLHèì1 š¤[æe’ôœ]“¤C“fݽLRMÖ©/Ã"i½»»à°¤]ÐË"mGÕÇ"´›ï‡A&Ø­ÿó ˲ìð >DBsؤžl–_Ë—ÂÓ½åogÉFy™¤\`ÖÌ*|¡£—IÒ iw/{ùž¦*«ŸÞÿy“Ñ •Ѽ¼Î–7Ë ³ m;m†A&†Q¾>›ÐþÊ=3 Æ$k½2 PhŒMÊ¡)jùµ¡0ÍYG-9›xý<‘³kùË¡)jù­ ¸Õ÷¶8ÌêG÷™À­¾Æ"夹@%Š=¡³OdbbÓõÐ9m:&¡o1ºã€%÷"±Iùج¹I4¡i­sÎR=.ý™[~;4Íûykà i[Kê–ASÔòÛa)¹åÖã;v‹ì~;‹hiW+‹ÀZó!p˜˜Hê/é6azbïh®6ëOýÚö¶#¶¬é+“ÀÞÆxB§xZÍË$Û3^S`­ ¬g³üÒqêåд»—½lõ[ô¸Ë2aYšË8Ñ´Ü2111Ñ4Rè³YàÄ+¼m ¶² ‹‘˜¤ì 4?h5¬íŽºœIèÒßâc^’㺙c:jÚ¡nbbb¢y(£F?yD;ý–-<¼ñ™v ˜~ý Ú4„×ò·1IÖ[Û.ÐË$ðSÇ­,Òv+ÛÚZÐ, Ø¥‰‰‰­‘â¸%¢0Á´Ë”iz·Tžn³tÛ5v[š†I¬ðT&~Óý¶5kÖ¶ñÏoé›·NF ›˜˜(1¸0Aðü m1’cʹÐÄY/L[RÈkùáE™vtYY«/SL{fËJ«Y-¿Ôâðât´åýôg…´x»Eè‚®HçÄÄÔÿ˜ö¬X˜Pú²÷’¢98ÀënÚŽ^Ȳai‡WÐÿA€Š·{ÐÎÈI_ý& ¥;ÄÇûöíÀ¡g‘ã,ýa[Ž&žž9²Çr¸õ‡ÍJ¸­f«húGº–;¢ÚÚ2å‡|sL:íAóšå÷2‰þ¶'%¥gl7“ØýÜ[ýõZa© ü(”–Eˆ÷‡$Í t±È0É´ £-ÓâMKÀ<’{±²I¹ÀKH{b'jù­ö–z7›¦Õ(“Øá©xžÏÊ$é­–_c’òÕoNîCS?vÒñN:¸?(±H“äæG G–I7Œà‰¯Å$´lÝd k£ù¸õ·² ¼îLt©T›å‡ ܵüÖ9ír¡Q&Íò{ßæ2&ñZ~àNœÇS¼Þº t,"%ràB×/^™¤š îÞ/‡- ™HŠÿ8?úºûVIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/GA0.png0000664000175000017500000000045213657750470017341 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>ÇIDATHÇÕ•± …0 DþT´T0s° ä˧XGÎQ@ÂÅ Ç/‘Òuߊ!Å<›¾ ÛRì»éƒ›ø¥G„1µÊçÃgìWU"xJ±®¦ ƳÅcZ F€Ÿ1f¦Tð ìƒ2Všê5a°b4ÅÅI÷ýq0÷2'+5Ö¹èëö³·"ò3¼®Ø'ôïú/¸?åýé+9ñlÆ~Þ•`ïLkbŠ`̇œ¬^…Pò/ÇeÉ–ip!¾'¸Ï…BÝìÜIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BB32.png0000664000175000017500000000656413657750470017434 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÿIDATxÚíArIEut_`.0+og5>‚WsßD£G…B颸À‡$%rÓ!¹Ý²ª2ÿ^^¾ÊøûmüûïëëõÚΰÿÞÆ¯_ï¯Û ýëm|ÿþ§aëëõ¾²™ÒfN›IúÌJ¸øÏÛøùóýU»Ô4Cµ/X [_Ó \ îÁëçÕ0é}ëû݆jJ_h}¿Û@ïf½_ýôaAް//ß¾½¾ÊO©ôÔZß}OØ@ÉmÔÞ6P3Ôûº~~`%üý茡3J0ìÞÀÕPí”îIšèŽa}HÒöäëõ÷G¿¿Zÿ½LnýøqoÀõû2¹5ãË3Ц°Ë ±²I¹aV6IšÙlBgI·mc“¨ä_ÿÝÀ*ÉO3Pû r5ÉõÍЙD“S²0¥CWê§CKêa “úÛa)*õ `éYê{Y„n *ñ%I‡%tf%içTŸQ¥#Û1ʶ‡cý½Æ(醶cTYKl’>ƒh8Ýið¤1†õÿ%t>ªôƒ¬ºäg+d·¢ö*dÔÕA‡&4¬`¥@‡¯WIK‰÷áSï)¯ÒÏaáj ;”A“&ñã,B–ü×úµ†4€/c‘kH,¢1HºaÚ­°²ˆS#Ýgt£r6ñÆOÒ•u”MÊ¥ÿº¬”Áª:¢lBs`z™$!â„I~tƉ;˳]úbMˆjÐd03PÏ(Js.Ť¾OaµKåeíóÍ3¸~P4™Lƒ&÷‚ŒJý Lê[ÓïèJËàI‡%Mâ·e‘õfxXdÆ.&i—L¦$ÓþkXBCš¡èjeºô—>𺔛Óöî%¿7!±I€î0ɶþ´ê×ëº5š¥?ê’î [óc¢¯'ìÕB­Ö‡tɽ†–Ý›:ƒ3‰tÉ·tŒî›1£ë^é÷Õ³ôO[ˆ³œéÚ:ªù¬Ã’ Ñ I’üÖóÃ^&Q Jþ(›˜½üÑœ}:4iª%ª¬ÃËÏšÍá5LzšœÊŠ„U‘Uê{ê04±.uÚŽƒJ}ë‘¡ôôdIêKUÒ÷hÙcº²G™1c†QÐjëÝ6&Ák{=®s1é_IòªéR›å—ÕQé—„áÉ›Žbe³lÉoe5âäuž{K캩ÎëÝ×¾ ü°x½úå>¯ä/ƒ¦Õ§bIíi¦ÇI¢,’¾ãh[Ÿæ7Ü ™1ãlA——m럷zùâ]i%vÛ¨kZŠõp~XJ2‹]„©\Q³™D4µ5°ý%nÿ´_fŽY¨ÛouLj…3f|poëúhë=“´ó¶³Û–o[´½}Ùû¬Æh×J3˜·i½pLóŠhûIß…Û¬úÏÊ$hSGw–ó¼0§¿}ŸûK®­Ÿ…m|>•m,"=íQC˘D»ôn§QµÁ3f° MBcÛÆ¢m[³¶mnÛ¾=pÛËÇ´¨nÛä[sž·k“Þ¸Ñü³ä÷ Û„ÆæÕ·²Íel=lFšÊ¥¾•E4÷l àÛ¶ҽ³þ|ÍÐ6½ëÙ0ËŒ,Ð%Ý 5Ÿ O¤³‰&ý¥"ÍPi†¼®á4xÒff›°|¤Ÿ3yŸD0%œÐyVÔ¬"M4ï¾ò²2 áø/&ù£¼¾ÄÑð Máe&Ê$Ä“MêGY$Ý@Iê»e)çm°„zÖØ[A/y[H:žI$6)¿Ä×Kl‚2JšÓH;¾×þ ³‰5qg“$&E†Æ$b@çÙ‰ÎÊ~£Š~1šŽ8i’_òÞ[EAØ@ëúåUÞ4ÉŸõ~Zeï(ÃlctAO3Ð*õË`é8ñÆCèix,ig J3ŽHŒRvO­ìaýwºa^é_зéYú£l’âJ¢\éŸO˜ä·tèðä­…¾ßm UÏ¡LBƒ¦*Éï60*ù·3ɺ…Y8´Ûz/Ï"eLâÍÑ*÷¸¶%+‹´¯‰4’þÓÄIPF)3h]ï4ö(„¨çºƒšìJ‡'ôÔìxÊõúÓØ„Í$1É¿ ž¬aýÇ:HLÝ‹éД%ùiÐTÅ$aµßGs¼ÂÐÄfºwK“úÛYÄ+õ·x +‹”+íc’džA>=“H¥ÄW6Ù`â=hŒr^nºp_†'ÀvÕ‡Dˆâ²HBã{é=¦;M¥ð*Þ:™ÄšŽž3I;:dÝ›í­T—Máô†ð+C60zxŠvèÊ*õ××ô èÖÃõi¶g-p.)že蜙ѕMˆkؤ¢°~MhËVºaR=-Tÿ%ÂSNœd…§°3=».—[QKÄnî.½Ý«é'ë”{Ƙ©mNâ©‘¢Â’ ÷J~:4¡’ßÀ!Í\”Eh¦¨Ô/ àX—SË Ôâ!å,2(0ãTFi`Ú=„8l"xÒ óê¾´[€yD»ô’²Ž–æ•.}š—?/q÷Pd‹ŠpÄÉÚÁhWsØ»¯1ÉúàÕ‚ÒÍ8²Þ£nôւÑ­9êXû“¤E˜¼R?½ðƒÕ@«aå}HжF“*5cÆ9œ|ß=¡WÌ QÒáÉ«œµ0´õ-*ñéðäíÏn…'s^¡÷/óÆKÒïM+“¸CbhN6ÕÑÛe¢a½}áÝÎs+“àý௟°Ö&=þŽSú£ ¯vojmAÜAÄ<IŠÍiAQoØ6Õ¦-ÜÄGfÌ ¡ÀÇŸË£ ÒÂ+meåE‹Q]Oè鯒.—üVýçªÞ™öFžÂ÷&êâM¿ÔZÇS͹¯ä÷žu2r¢,B‡&TIG“É´’:Ô™N‡&Iê³\!eýqIêcl]~ÐeiÆŒç2J±'A_ïî_ÓãÇÖpDZÝ-tᵄ^ 4ÃS¶äCkOöFž`Emõ÷yÙ6PÓƒÖêyô˜×°thòÎ\ô¯†¥~4>B…Eû[ 'nÛ eX"m}ÚA¼´ø&&ÑÅÃŒ3fPÃ2“l2È~L7yñ Ö‚Ž/‡¨ë)XZî*\£L")jQòGY„Å$n/ÿvÛ_âc’c–™ãê¶[Ý1baÆŒŸ•EÚ¸>Žqµs¿µq`¶w·w¢·CÈi Û-ùÓ A †ÑñmÚè=¶=%Àjèö¤ ûXš1ã &9&E´,ɶmšrÛDïãSå·6u»ãèr⪴/Ú̲X$|d(Kò‡¡©ý±5t‡ØvðÏvØ~tRšÑ6‡Oý ²éøîŒ]Q ­Aå¥4Ú#9¦œKÛ‚8Vo¿W†…g²}Q&TÅ”—µ:®0ûé§u:¦8]Ûò~Ö‡d[ÄèL¥—˜Ô¥}³"Vƒ7–9=T'Îø2á‰í_¼½äxû¢ííËÞKÒßÛ8@öŠ}Ñí[/´k^mÿ!¹†ií?¼ T¬²+Ì$m[ÐH7uV|„VEO‹¨—·AB½UÛIIʹ]+.Mâ7jfölp£vpØÎ3L2£šo·1IÛÖ¬í›Û׸MƒåcZTk ^Þäû˜6émÍ{%”IÂj—.šýæ^†ÐT¨¨×Ÿ°>ú¤>=†¨,Íh¶±ÈXÂXd…¤+·ÝEl­h1ãxØf˜¦¤·&±‰–Ó•f Uú—ßÚ!ô’ÓË·°Ù$Í@M†y™Ä O^ÉoÂNhòf·i—i²J~T1KO“X>Ó£!.;,¹þ£rŽž]JHËã²H4ÕÔ,õ½AÖˆ[á½Ä×< ‹¬3TVÞ^cm4#ë·3Ъ¨ÛˆÆO¾›X¥™^É Öt&‰2­z¨?@Ã}™r! ¢¶=  I~”ÒÐ!ð^ê³2ˆu 9’ŸaÒ¤>;NB,ÚÄa‘ÄCVX\DKÃK“iÒú¥1ÈÊ"ea )u~e‘OÏ$ÿ283ÐrðÊÓIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BBbc0.png0000664000175000017500000000036213657750470017642 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>}IDATHÇí–] À ƒ{l³ãìV]!Æ`ó›— ü,F5ÛG%änv„ªc< تî·Úx8(:0vÔ‡‰;ÇŽz.ȇþ-àï¡áøzáp¨ùÝUšUzp@P/ o ; \ò¼LÀmBòô¢¨ú4Ùot¯öSÅgIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/AT0.png0000664000175000017500000000031113657750470017350 0ustar jamesjames‰PNG  IHDRR{V vpAg£;*Ñ pHYsHHFÉk>fIDATHÇc`ƒ8844üÿŸ¤šeÕÕS¦TWC …°ñ“È*éd%Õ¬'ÏJLë)²9ñ[ƒK/üJC‹‰ *[Œ+#ÑÉÇt jòò1MÒ61NfY6`È€™\IŒê\RK|—IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/SBpara.png0000664000175000017500000000047313657750470020145 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>ÆIDATHÇÕ–Á € E»¹¸€'®ž\Á“s¸# ~Lj~(‚‚ÿÒCy´¥Täo£œ aŠZ–ðÝ|½`ŽZ×ËÖÔþ“  ì+@ J#ÈjÐ-jß98ûŸòŸ]R¥ŽZ=3:)PfK3aNMjCÔì)‘ )|Ú°!¤-a_cíèŠø0x}»Ÿšh3@B–êfµ @}IrÛSñmî¦ÍXµÕ±TJ1‡¹OÞã§î7ÃB·ãV÷k¯:ùç͚υ²­IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/torp_det.png0000664000175000017500000000053113657750470020610 0ustar jamesjames‰PNG  IHDR -,äIDATHÇåUQ …0 Û‘<Š7Ú‘<šG˜ø <ˆ/$­¸Ÿ2·fYšÕÖ4–¥÷1Z[×m;cÌÓ½ïûÇg|ç6`0@€˜ÇúÌIDAT8ËTÑ…0s$GéFŒ¤›éõ|•¢¡¹è㇫Ješ’ͳY­·RÖõ 0Û÷Óû¹KY–{@ýÙÐþwËHMÖ(xUø«6DšmÛˆÌ s ÄÌxO"!©¨I”0È´šÝwdøgÆt5–«„h ©)³÷‘Jéd¨„R%Dº:2 RrÂQB9fŸßL’ÍJ¡O‡CŽ™ ÄÍ1`MH¨GE•BØïdP‘ÔGÊŽqÀ~þ÷8k3¹_o±ç°B} Ã5ŸIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BBBC16.png0000664000175000017500000000262213657750470017632 0ustar jamesjames‰PNG  IHDR@ìq€ vpAg@|.ضbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>IDATxÚí][Ž1 ˱{œ§·Jw  $ËzÐYêÇØM0ž±MÊêõú9ñë+Þï×ë÷W|·Ïß4Àþ|ÅwûþÿÿúôØlmŸ×Çbí¹µ}^Àk®7ý.ÀòA³~Á:½¬ƒ½¿ Íhô à5Wh%Y@;À§E×÷  þ˜Ab­(èu"«¨^yè´ ˜BZ…ža÷$Ø¥þôÇ€YÚ„ W4•ÍÖZ:Nù‹AÀÆZ<Ø8ÌbÐeƒbýBŠ~¹ØØšû|á¸öðÒ©ï“(RܪòèîU4Á·mô gÚQ`O[¾VG­Kd[*ÃÚ\\iZ9£¦fQ~$šÚ€¡éÂ;mŠ(0«‡>X4¥áeÒ唟˜µ†®ÿ¶KùéÎÉÐS|i…âÓUÍlàWº®PédÂú@”µZ·FA=ã%¤–@$þpµhmÞf¦ëv¡{ }±%žÂZÅÊæ#@ˆ†‹¦õƒ¼)‹ö êõÒ Kâméô 5ð¶c<Ñ2¶Ýp µW( iÎ%«M_Ú¼íxz- ñKDÛÌžö~ úÔ¦‰¦Ý¬já¢ïÁkîAÚQL?* …â²Ì}nÆ" cKZ4?Xx7éͰ¦õœuÚ£ìp†z4šåG?¸\nfï“„ç½èSúNÓ.ÃöîÕíª¹ã]ÏÝidw·³l°E—íGg…èû ÅÔ(¥aØt=6þX"°tÏÏOn»ùÇzyàéIôq ^žXÔºôã@­ÑŽz|Gc¡aßÈ1àu=Ù>ýx-%Û¨¾ EùÇzÒ °}"·" ã†Ù–¡wô¦1§»Þ¼ÆŸßÚåç¨-¡¥SoŠ]¦Mcó,7yÀO$CùÐKõiKÏÐïù8Š/€VÐ1£/ç%¬ŠSI@+/id§—†[mìæ°ÛšQ†]6ê­s54nó^ê?ÐZ›i€YIô6ñ”EùÛl-Êß®I,Ø^Ñ%‹¨Ò£8Fñ½v}´"‰&‹Ž¥ÈjWZ…ý 7µ£åÞìíe?¢"ª­ÐÔ.°²5{÷YN¯F9fÜ׳ìQÛtñzs{+þµ‹?¡V¶äY'.½„µ<÷B,Kƒ´—ý(¯«ô±¹g…B¡ÙÁÇÀÇ6x¼"ŠF4Yš%ÍUj÷ÞA^IcÕ'wyäú¾ãžD”ßkÊ”æÛe]˾ʲÁ —nˆVh‰Ú_m‹Ö´ñÊÒpÖ+j.+x+ĤïÕUív–ízz7°Ë÷‹«ÓfÃ蘖ÌT(Øv{ú ‘ƒñžò.òí=íeØÖó!m´)ªQÚ€zµŠõ|ñ8PïCm@½á[ê®|þ³ÜC‘ª£š.;£@O«¥ͪNÔîžrZFièØšnŸ–íÕõhhÍ:P4¡×³_âzÅÑ_ÑâýxMF¤IEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/ca0.png0000664000175000017500000000045313657750470017436 0ustar jamesjames‰PNG  IHDRÝÁN vpAg£;*ÑbKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk>¶IDATHÇí–Á € E\ÀWO0'ç`$! ±¤)˜B0ú/Móûü€¨ÔW´'Y#ÔåÀΤJ]ôHò¾„þô¤pK2¦„~«8•dkrb ­{ŶgI`@.!q@j ã’Ä/$HöžâÞ­Ð ­c¬ q N¾ød_q@ŒˆAò¨R©›e ^jç2Tê¹€wÐu|}·†ßÑOLÿyøõ]ºÇ:ÃÊYùIEND®B`‚netrek-client-cow-3.3.2/pixmaps/Ori/BB.png0000664000175000017500000000656413657750470017267 0ustar jamesjames‰PNG  IHDR€Ìq„2 vpAg€µ’±¡bKGDÿÿÿÿÿÿ X÷Ü pHYsHHFÉk> ÿIDATxÚíArIEut_`.0+og5>‚WsßD£G…B颸À‡$%rÓ!¹Ý²ª2ÿ^^¾ÊøûmüûïëëõÚΰÿÞÆ¯_ï¯Û ýëm|ÿþ§aëëõ¾²™ÒfN›IúÌJ¸øÏÛøùóýU»Ô4Cµ/X [_Ó \ îÁëçÕ0é}ëû݆jJ_h}¿Û@ïf½_ýôaAް//ß¾½¾ÊO©ôÔZß}OØ@ÉmÔÞ6P3Ôûº~~`%üý茡3J0ìÞÀÕPí”îIšèŽa}HÒöäëõ÷G¿¿Zÿ½LnýøqoÀõû2¹5ãË3Ц°Ë ±²I¹aV6IšÙlBgI·mc“¨ä_ÿÝÀ*ÉO3Pû r5ÉõÍЙD“S²0¥CWê§CKêa “úÛa)*õ `éYê{Y„n *ñ%I‡%tf%içTŸQ¥#Û1ʶ‡cý½Æ(醶cTYKl’>ƒh8Ýið¤1†õÿ%t>ªôƒ¬ºäg+d·¢ö*dÔÕA‡&4¬`¥@‡¯WIK‰÷áSï)¯ÒÏaáj ;”A“&ñã,B–ü×úµ†4€/c‘kH,¢1HºaÚ­°²ˆS#Ýgt£r6ñÆOÒ•u”MÊ¥ÿº¬”Áª:¢lBs`z™$!â„I~tƉ;˳]úbMˆjÐd03PÏ(Js.Ť¾OaµKåeíóÍ3¸~P4™Lƒ&÷‚ŒJý Lê[ÓïèJËàI‡%Mâ·e‘õfxXdÆ.&i—L¦$ÓþkXBCš¡èjeºô—>𺔛Óöî%¿7!±I€î0ɶþ´ê×ëº5š¥?ê’î [óc¢¯'ìÕB­Ö‡tɽ†–Ý›:ƒ3‰tÉ·tŒî›1£ë^é÷Õ³ôO[ˆ³œéÚ:ªù¬Ã’ Ñ I’üÖóÃ^&Q Jþ(›˜½üÑœ}:4iª%ª¬ÃËÏšÍá5LzšœÊŠ„U‘Uê{ê04±.uÚŽƒJ}ë‘¡ôôdIêKUÒ÷hÙcº²G™1c†QÐjëÝ6&Ák{=®s1é_IòªéR›å—ÕQé—„áÉ›Žbe³lÉoe5âäuž{K캩ÎëÝ×¾ ü°x½úå>¯ä/ƒ¦Õ§bIíi¦ÇI¢,’¾ãh[Ÿæ7Ü ™1ãlA——m럷zùâ]i%vÛ¨kZŠõp~XJ2‹]„©\Q³™D4µ5°ý%nÿ´_fŽY¨ÛouLj…3f|poëúhë=“´ó¶³Û–o[´½}Ùû¬Æh×J3˜·i½pLóŠhûIß…Û¬úÏÊ$hSGw–ó¼0§¿}ŸûK®­Ÿ…m|>•m,"=íQC˘D»ôn§QµÁ3f° MBcÛÆ¢m[³¶mnÛ¾=pÛËÇ´¨nÛä[sž·k“Þ¸Ñü³ä÷ Û„ÆæÕ·²Íel=lFšÊ¥¾•E4÷l àÛ¶ҽ³þ|ÍÐ6½ëÙ0ËŒ,Ð%Ý 5Ÿ O¤³‰&ý¥"ÍPi†¼®á4xÒff›°|¤Ÿ3yŸD0%œÐyVÔ¬"M4ï¾ò²2 áø/&ù£¼¾ÄÑð Máe&Ê$Ä“MêGY$Ý@Iê»e)çm°„zÖØ[A/y[H:žI$6)¿Ä×Kl‚2JšÓH;¾×þ ³‰5qg“$&E†Æ$b@çÙ‰ÎÊ~£Š~1šŽ8i’_òÞ[EAØ@ëúåUÞ4ÉŸõ~Zeï(ÃlctAO3Ð*õË`é8ñÆCèix,ig J3ŽHŒRvO­ìaýwºa^é_зéYú£l’âJ¢\éŸO˜ä·tèðä­…¾ßm UÏ¡LBƒ¦*Éï60*ù·3ɺ…Y8´Ûz/Ï"eLâÍÑ*÷¸¶%+‹´¯‰4’þÓÄIPF)3h]ï4ö(„¨çºƒšìJ‡'ôÔìxÊõúÓØ„Í$1É¿ ž¬aýÇ:HLÝ‹éД%ùiÐTÅ$aµßGs¼ÂÐÄfºwK“úÛYÄ+õ·x +‹”+íc’džA>=“H¥ÄW6Ù`â=hŒr^nºp_†'ÀvÕ‡Dˆâ²HBã{é=¦;M¥ð*Þ:™ÄšŽž3I;:dÝ›í­T—Máô†ð+C60zxŠvèÊ*õ××ô èÖÃõi¶g-p.)že蜙ѕMˆkؤ¢°~MhËVºaR=-Tÿ%ÂSNœd…§°3=».—[QKÄnî.½Ý«é'ë”{Ƙ©mNâ©‘¢Â’ ÷J~:4¡’ßÀ!Í\”Eh¦¨Ô/ àX—SË Ôâ!å,2(0ãTFi`Ú=„8l"xÒ óê¾´[€yD»ô’²Ž–æ•.}š—?/q÷Pd‹ŠpÄÉÚÁhWsØ»¯1ÉúàÕ‚ÒÍ8²Þ£nôւÑ­9êXû“¤E˜¼R?½ðƒÕ@«aå}HжF“*5cÆ9œ|ß=¡WÌ QÒáÉ«œµ0´õ-*ñéðäíÏn…'s^¡÷/óÆKÒïM+“¸CbhN6ÕÑÛe¢a½}áÝÎs+“àý௟°Ö&=þŽSú£ ¯vojmAÜAÄ<IŠÍiAQoØ6Õ¦-ÜÄGfÌ ¡ÀÇŸË£ ÒÂ+meåE‹Q]Oè鯒.—üVýçªÞ™öFžÂ÷&êâM¿ÔZÇS͹¯ä÷žu2r¢,B‡&TIG“É´’:Ô™N‡&Iê³\!eýqIêcl]~ÐeiÆŒç2J±'A_ïî_ÓãÇÖpDZÝ-tᵄ^ 4ÃS¶äCkOöFž`Emõ÷yÙ6PÓƒÖêyô˜×°thòÎ\ô¯†¥~4>B…Eû[ 'nÛ eX"m}ÚA¼´ø&&ÑÅÃŒ3fPÃ2“l2È~L7yñ Ö‚Ž/‡¨ë)XZî*\£L")jQòGY„Å$n/ÿvÛ_âc’c–™ãê¶[Ý1baÆŒŸ•EÚ¸>Žqµs¿µq`¶w·w¢·CÈi Û-ùÓ A †ÑñmÚè=¶=%Àjèö¤ ûXš1ã &9&E´,ɶmšrÛDïãSå·6u»ãèr⪴/Ú̲X$|d(Kò‡¡©ý±5t‡ØvðÏvØ~tRšÑ6‡Oý ²éøîŒ]Q ­Aå¥4Ú#9¦œKÛ‚8Vo¿W†…g²}Q&TÅ”—µ:®0ûé§u:¦8]Ûò~Ö‡d[ÄèL¥—˜Ô¥}³"Vƒ7–9=T'Îø2á‰í_¼½äxû¢ííËÞKÒßÛ8@öŠ}Ñí[/´k^mÿ!¹†ií?¼ T¬²+Ì$m[ÐH7uV|„VEO‹¨—·AB½UÛIIʹ]+.Mâ7jfölp£vpØÎ3L2£šo·1IÛÖ¬í›Û׸MƒåcZTk ^Þäû˜6émÍ{%”IÂj—.šýæ^†ÐT¨¨×Ÿ°>ú¤>=†¨,Íh¶±ÈXÂXd…¤+·ÝEl­h1ãxØf˜¦¤·&±‰–Ó•f Uú—ßÚ!ô’ÓË·°Ù$Í@M†y™Ä O^ÉoÂNhòf·i—i²J~T1KO“X>Ó£!.;,¹þ£rŽž]JHËã²H4ÕÔ,õ½AÖˆ[á½Ä×< ‹¬3TVÞ^cm4#ë·3Ъ¨ÛˆÆO¾›X¥™^É Öt&‰2­z¨?@Ã}™r! ¢¶=  I~”ÒÐ!ð^ê³2ˆu 9’ŸaÒ¤>;NB,ÚÄa‘ÄCVX\DKÃK“iÒú¥1ÈÊ"ea )u~e‘OÏ$ÿ283ÐrðÊÓIEND®B`‚netrek-client-cow-3.3.2/input.h0000664000175000017500000000057613657750470015371 0ustar jamesjames/* input.c */ unsigned char getctrlkey(unsigned char **s); void initkeymap(void); void detsetallow(int _dummy); void input(void); int process_event(void); void mkeyaction(W_Event *data); void buttonaction(W_Event *data); int getcourse(W_Window ww, int x, int y); void lockPlanetOrBase(W_Window ww, int x, int y); void macro_on(void); void doMacro(W_Event *data); void Key109(void); netrek-client-cow-3.3.2/README.releasing0000664000175000017500000000215513657750470016704 0ustar jamesjames# release process for cow # emacs: sh-mode # resolve any differences between working directory and repository # decide on version number export VERSION=3.3.1 # update version.h patchlevel.h cow.spec # update ChangeLog with a release date # commit darcs record # tag release darcs tag ${VERSION} # make dist cd /tmp && \ darcs get ~/src/netrek-client-cow && \ cd netrek-client-cow && \ sh autogen.sh && \ ./configure && \ make dist && \ mv netrek-client-cow-${VERSION}.tar.gz .. cd /tmp md5sum netrek-client-cow-${VERSION}.tar.gz b4f686e37b694050e701e4b36f605008 netrek-client-cow-3.3.1.tar.gz # test build the .tar.gz cd /tmp tar xfv netrek-client-cow-${VERSION}.tar.gz cd netrek-client-cow-${VERSION} ./configure make ./netrek-client-cow # release cd /tmp cp netrek-client-cow-${VERSION}.tar.gz ~/public_html/external/mine/netrek/ upw http://quozl.linux.org.au/netrek/ # orion upload rsync -avP netrek-client-cow-${VERSION}.tar.gz \ quozl@orion.netrek.org:/var/www/files.netrek.org/COW/ # sf.net upload rsync -avP netrek-client-cow-${VERSION}.tar.gz quozl@frs.sf.net:uploads/ http://sourceforge.net/projects/netrek netrek-client-cow-3.3.2/mapcursor.bitmap0000664000175000017500000000141013657750470017256 0ustar jamesjames#define mapcursor_width 11 #define mapcursor_height 11 #define mapcursor_x_hot 5 #define mapcursor_y_hot 5 #ifndef WIN32 static char mapcursor_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; #else /* doesn't work under X */ static char mapcursor_bits[] = { 0x01, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x04}; #endif #define mapmask_width 11 #define mapmask_height 11 #define mapmask_x_hot 5 #define mapmask_y_hot 5 static char mapmask_bits[] = { 0x01, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x04}; netrek-client-cow-3.3.2/random.c0000664000175000017500000003256613657750470015511 0ustar jamesjames /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)random.c 8.1 (Berkeley) 6/4/93"; #endif /* LIBC_SCCS and not lint */ #include #include long random (); void srandom (); /* * random.c: * * An improved random number generation package. In addition to the standard * rand()/srand() like interface, this package also has a special state info * interface. The initstate() routine is called with a seed, an array of * bytes, and a count of how many bytes are being passed in; this array is * then initialized to contain information for random number generation with * that much state information. Good sizes for the amount of state * information are 32, 64, 128, and 256 bytes. The state can be switched by * calling the setstate() routine with the same array as was initiallized * with initstate(). By default, the package runs with 128 bytes of state * information and generates far better random numbers than a linear * congruential generator. If the amount of state information is less than * 32 bytes, a simple linear congruential R.N.G. is used. * * Internally, the state information is treated as an array of longs; the * zeroeth element of the array is the type of R.N.G. being used (small * integer); the remainder of the array is the state information for the * R.N.G. Thus, 32 bytes of state information will give 7 longs worth of * state information, which will allow a degree seven polynomial. (Note: * the zeroeth word of state information also has some other information * stored in it -- see setstate() for details). * * The random number generation technique is a linear feedback shift register * approach, employing trinomials (since there are fewer terms to sum up that * way). In this approach, the least significant bit of all the numbers in * the state table will act as a linear feedback shift register, and will * have period 2^deg - 1 (where deg is the degree of the polynomial being * used, assuming that the polynomial is irreducible and primitive). The * higher order bits will have longer periods, since their values are also * influenced by pseudo-random carries out of the lower bits. The total * period of the generator is approximately deg*(2**deg - 1); thus doubling * the amount of state information has a vast influence on the period of the * generator. Note: the deg*(2**deg - 1) is an approximation only good for * large deg, when the period of the shift register is the dominant factor. * With deg equal to seven, the period is actually much longer than the * 7*(2**7 - 1) predicted by this formula. */ /* * For each of the currently supported random number generators, we have a * break value on the amount of state information (you need at least this * many bytes of state info to support this random number generator), a degree * for the polynomial (actually a trinomial) that the R.N.G. is based on, and * the separation between the two lower order coefficients of the trinomial. */ #define TYPE_0 0 /* linear congruential */ #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 #define TYPE_1 1 /* x**7 + x**3 + 1 */ #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 #define TYPE_2 2 /* x**15 + x + 1 */ #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 #define TYPE_3 3 /* x**31 + x**3 + 1 */ #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 #define TYPE_4 4 /* x**63 + x + 1 */ #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* * Array versions of the above information to make code run faster -- * relies on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* max number of types above */ static int degrees[MAX_TYPES] = {DEG_0, DEG_1, DEG_2, DEG_3, DEG_4}; static int seps[MAX_TYPES] = {SEP_0, SEP_1, SEP_2, SEP_3, SEP_4}; /* * Initially, everything is set up as if from: * * initstate(1, &randtbl, 128); * * Note that this initialization takes advantage of the fact that srandom() * advances the front and rear pointers 10*rand_deg times, and hence the * rear pointer which starts at 0 will also end up at zero; thus the zeroeth * element of the state information, which contains info about the current * position of the rear pointer is just * * MAX_TYPES * (rptr - state) + TYPE_3 == TYPE_3. */ static long randtbl[DEG_3 + 1] = { TYPE_3, 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342, 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb, 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd, 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86, 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7, 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc, 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b, 0xf5ad9d0e, 0x8999220b, 0x27fb47b9, }; /* * fptr and rptr are two pointers into the state info, a front and a rear * pointer. These two pointers are always rand_sep places aparts, as they * cycle cyclically through the state information. (Yes, this does mean we * could get away with just one pointer, but the code for random() is more * efficient this way). The pointers are left positioned as they would be * from the call * * initstate(1, randtbl, 128); * * (The position of the rear pointer, rptr, is really 0 (as explained above * in the initialization of randtbl) because the state table pointer is set * to point to randtbl[1] (as explained below). */ static long *fptr = &randtbl[SEP_3 + 1]; static long *rptr = &randtbl[1]; /* * The following things are the pointer to the state information table, the * type of the current generator, the degree of the current polynomial being * used, and the separation between the two pointers. Note that for efficiency * of random(), we remember the first location of the state information, not * the zeroeth. Hence it is valid to access state[-1], which is used to * store the type of the R.N.G. Also, we remember the last location, since * this is more efficient than indexing every time to find the address of * the last element to see if the front and rear pointers have wrapped. */ static long *state = &randtbl[1]; static int rand_type = TYPE_3; static int rand_deg = DEG_3; static int rand_sep = SEP_3; static long *end_ptr = &randtbl[DEG_3 + 1]; /* * srandom: * * Initialize the random number generator based on the given seed. If the * type is the trivial no-state-information type, just remember the seed. * Otherwise, initializes state[] based on the given "seed" via a linear * congruential generator. Then, the pointers are set to known locations * that are exactly rand_sep places apart. Lastly, it cycles the state * information a given number of times to get rid of any initial dependencies * introduced by the L.C.R.N.G. Note that the initialization of randtbl[] * for default usage relies on values produced by this routine. */ void srandom (x) unsigned int x; { register int i, j; if (rand_type == TYPE_0) state[0] = x; else { j = 1; state[0] = x; for (i = 1; i < rand_deg; i++) state[i] = 1103515245 * state[i - 1] + 12345; fptr = &state[rand_sep]; rptr = &state[0]; for (i = 0; i < 10 * rand_deg; i++) (void) random (); } } /* * initstate: * * Initialize the state information in the given array of n bytes for future * random number generation. Based on the number of bytes we are given, and * the break values for the different R.N.G.'s, we choose the best (largest) * one we can and set things up for it. srandom() is then called to * initialize the state information. * * Note that on return from srandom(), we set state[-1] to be the type * multiplexed with the current value of the rear pointer; this is so * successive calls to initstate() won't lose this information and will be * able to restart with setstate(). * * Note: the first thing we do is save the current state, if any, just like * setstate() so that it doesn't matter when initstate is called. * * Returns a pointer to the old state. */ char * initstate (seed, arg_state, n) unsigned int seed; /* seed for R.N.G. */ char *arg_state; /* pointer to state array */ int n; /* # bytes of state info */ { register char *ostate = (char *) (&state[-1]); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = MAX_TYPES * (rptr - state) + rand_type; if (n < BREAK_0) { (void) fprintf (stderr, "random: not enough state (%d bytes); ignored.\n", n); return (0); } if (n < BREAK_1) { rand_type = TYPE_0; rand_deg = DEG_0; rand_sep = SEP_0; } else if (n < BREAK_2) { rand_type = TYPE_1; rand_deg = DEG_1; rand_sep = SEP_1; } else if (n < BREAK_3) { rand_type = TYPE_2; rand_deg = DEG_2; rand_sep = SEP_2; } else if (n < BREAK_4) { rand_type = TYPE_3; rand_deg = DEG_3; rand_sep = SEP_3; } else { rand_type = TYPE_4; rand_deg = DEG_4; rand_sep = SEP_4; } state = &(((long *) arg_state)[1]); /* first location */ end_ptr = &state[rand_deg]; /* must set end_ptr before srandom */ srandom (seed); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = MAX_TYPES * (rptr - state) + rand_type; return (ostate); } /* * setstate: * * Restore the state from the given state array. * * Note: it is important that we also remember the locations of the pointers * in the current state information, and restore the locations of the pointers * from the old state information. This is done by multiplexing the pointer * location into the zeroeth word of the state information. * * Note that due to the order in which things are done, it is OK to call * setstate() with the same state as the current state. * * Returns a pointer to the old state information. */ char * setstate (arg_state) char *arg_state; { register long *new_state = (long *) arg_state; register int type = new_state[0] % MAX_TYPES; register int rear = new_state[0] / MAX_TYPES; char *ostate = (char *) (&state[-1]); if (rand_type == TYPE_0) state[-1] = rand_type; else state[-1] = MAX_TYPES * (rptr - state) + rand_type; switch (type) { case TYPE_0: case TYPE_1: case TYPE_2: case TYPE_3: case TYPE_4: rand_type = type; rand_deg = degrees[type]; rand_sep = seps[type]; break; default: (void) fprintf (stderr, "random: state info corrupted; not changed.\n"); } state = &new_state[1]; if (rand_type != TYPE_0) { rptr = &state[rear]; fptr = &state[(rear + rand_sep) % rand_deg]; } end_ptr = &state[rand_deg]; /* set end_ptr too */ return (ostate); } /* * random: * * If we are using the trivial TYPE_0 R.N.G., just do the old linear * congruential bit. Otherwise, we do our fancy trinomial stuff, which is * the same in all the other cases due to all the global variables that have * been set up. The basic operation is to add the number at the rear pointer * into the one at the front pointer. Then both pointers are advanced to * the next location cyclically in the table. The value returned is the sum * generated, reduced to 31 bits by throwing away the "least random" low bit. * * Note: the code takes advantage of the fact that both the front and * rear pointers can't wrap on the same call by not testing the rear * pointer if the front one has wrapped. * * Returns a 31-bit random number. */ long random () { long i; if (rand_type == TYPE_0) i = state[0] = (state[0] * 1103515245 + 12345) & 0x7fffffff; else { *fptr += *rptr; i = (*fptr >> 1) & 0x7fffffff; /* chucking least random bit */ if (++fptr >= end_ptr) { fptr = state; ++rptr; } else if (++rptr >= end_ptr) rptr = state; } return (i); } netrek-client-cow-3.3.2/ping.c0000664000175000017500000000661413657750470015161 0ustar jamesjames/* ping.c */ #include "config.h" #include "copyright2.h" #include #include #include INC_NETINET_IN #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "pingstats.h" #include "socket.h" #include "ping.h" /* These are used only in pingstats.c */ int ping_iloss_sc = 0; /* inc % loss 0--100, server * * * * to client */ int ping_iloss_cs = 0; /* inc % loss 0--100, client * * * * to server */ int ping_tloss_sc = 0; /* total % loss 0--100, * * * * server to client */ int ping_tloss_cs = 0; /* total % loss 0--100, * * * * client to server */ int ping_lag = 0; /* delay in ms of last ping */ int ping_av = 0; /* rt time */ int ping_sd = 0; /* std deviation */ static int sum, n; static int M, var; static double s2; static void sendServerPingResponse(int number); static void calc_lag(void); void handlePing(struct ping_spacket *packet) /* SP_PING */ { ping = 1; /* we got a ping */ /* printf("ping received at %d (lag: %d)\n", msetime(), (int)packet->lag); */ sendServerPingResponse((int) packet->number); ping_lag = ntohs(packet->lag); ping_iloss_sc = (int) packet->iloss_sc; ping_iloss_cs = (int) packet->iloss_cs; ping_tloss_sc = (int) packet->tloss_sc; ping_tloss_cs = (int) packet->tloss_cs; calc_lag(); if (W_IsMapped(pStats)) /* pstat window */ updatePStats(); } void startPing(void) { static struct ping_cpacket packet; extern int serverDead; packet.type = CP_PING_RESPONSE; packet.pingme = 1; if (gwrite(sock, (char *) &packet, sizeof(struct ping_cpacket)) != sizeof (struct ping_cpacket)) { printf("gwrite failed.\n"); serverDead = 1; } } void stopPing(void) { static struct ping_cpacket packet; extern int serverDead; packet.type = CP_PING_RESPONSE; packet.pingme = 0; if (gwrite(sock, (char *) &packet, sizeof(struct ping_cpacket)) != sizeof (struct ping_cpacket)) { printf("gwrite failed.\n"); serverDead = 1; } } static void sendServerPingResponse(int number) /* CP_PING_RESPONSE */ { struct ping_cpacket packet; int s; extern int serverDead; if (udpSock >= 0) { s = udpSock; packets_sent++; } else s = sock; bzero(&packet, sizeof(packet)); packet.type = CP_PING_RESPONSE; packet.pingme = (char) ping; packet.number = (unsigned char) number; /* count this one */ packet.cp_sent = htonl(packets_sent); packet.cp_recv = htonl(packets_received); /* printf("ping response sent at %d\n", msetime()); */ if (gwrite(s, (char *) &packet, sizeof(struct ping_cpacket)) != sizeof (struct ping_cpacket)) { if (s == udpSock) { s = sock; if (gwrite(s, (char *) &packet, sizeof(struct ping_cpacket)) != sizeof (struct ping_cpacket)) { serverDead = 1; printf("gwrite failed again.\n"); } } } } static void calc_lag(void) { #ifdef nodef /* probably ghostbusted */ if (ping_lag > 2000 || ping_lag == 0) return; #endif n++; sum += ping_lag; s2 += (ping_lag * ping_lag); if (n == 1) return; M = sum / n; var = (s2 - M * sum) / (n - 1); ping_av = M; ping_sd = (int) sqrt((double) var); } netrek-client-cow-3.3.2/audio.c0000664000175000017500000000521113657750470015315 0ustar jamesjames/* Background Sound Library * * Copyright 1993 by Kurt Siegl <007@netrek.org> Permission to use, * modify, copy and distribute this software without fee is hereby granted as * long as this notice is left here. * */ #include "config.h" #if defined(SOUND) && !defined(sgi) #include #include INC_UNISTD #include INC_STDLIB #include INC_LIMITS #include INC_FCNTL #include INC_STRINGS #include #include #include #include "audio.h" #include "defaults.h" static int snd_pid, SoundRet = -1, shmid; static struct shm_sound *shared_data; static RETSIGTYPE RetOk(int _dummy) { SoundRet = 0; } static RETSIGTYPE RetErr(int _dummy) { SoundRet = -1; } extern void ExitSound(void) { kill(snd_pid, SIGINT); shmctl(shmid, IPC_RMID, 0); } extern int InitSound(void) { char *argv[5], shmids[10], mypid[10], *sound_player; int argc = 0; int pid, shmKey = IPC_PRIVATE; struct shmid_ds smbuf; /* if ((shmid=shmget(shmKey, sizeof(struct shm_sound),0))>=0) { * * * fprintf(stderr,"Killing Sound Shared Memory\n"); shmctl(shmid, IPC_RMID, * * * 0); } */ if ((shmid = shmget(shmKey, sizeof(struct shm_sound), (IPC_CREAT | 0777))) < 0) { perror("Can't open Sound Shared Memory\n"); return (-1); } shmctl(shmid, IPC_STAT, &smbuf); smbuf.shm_perm.uid = getuid(); smbuf.shm_perm.mode = 0777; shmctl(shmid, IPC_SET, &smbuf); if ((shared_data = (struct shm_sound *) shmat(shmid, 0, 0)) == (void *) -1) { perror("shm attach failed"); return (-1); } SoundRet = 1; SIGNAL(SIGUSR1, RetOk); SIGNAL(SIGUSR2, RetErr); SIGNAL(SIGCHLD, RetErr); sprintf(shmids, "%i", shmid); sprintf(mypid, "%i", getpid()); if ((pid = vfork()) == 0) { /* setsid(); Make it independend of the main program */ if ((sound_player = (char *) getdefault("soundplayer")) == NULL) sound_player = SOUNDPLAYER; argv[argc++] = sound_player; argv[argc++] = (char *) shmids; argv[argc++] = (char *) mypid; argv[argc] = NULL; SIGNAL(SIGINT, SIG_DFL); execvp(sound_player, argv); perror(sound_player); fflush(stderr); SoundRet = -2; _exit(-1); } if (pid == -1) { perror("forking"); return (-1); } snd_pid = pid; if (SoundRet >0 ) pause(); if (SoundRet) ExitSound(); return (SoundRet); } extern void StopSound(void) { kill(snd_pid, SIGUSR1); } extern int StartSound(char *name) { strcpy(shared_data->name, name); kill(snd_pid, SIGUSR2); return (0); } extern int SoundPlaying() { return (shared_data->play_sound); } #endif netrek-client-cow-3.3.2/install.sh0000664000175000017500000000000013657750470016041 0ustar jamesjamesnetrek-client-cow-3.3.2/dashboard.c0000664000175000017500000003346213657750470016154 0ustar jamesjames/* dashboard.c - graphic tstatw - 6/2/93 * * Copyright (C) 1993, Lars Bernhardsson (lab@mtek.chalmers.se) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * Color by Nick Trown. * */ #include "config.h" #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "string_util.h" #define DB_NOFILL 0 #define DB_LINE 1 #define DB_FILL 2 #define DB_3DIGITS 0 #define DB_5DIGITS 1 #define BAR_LENGTH 56 extern void db_redraw_lab2(int fr); void db_box(int x, int y, int w, int h, int f, int color) { int border = W_White; if (color == W_Red) border = color; if (w == 0 || h == 0) return; switch (f) { case DB_FILL: W_FillArea(tstatw, x, y, w + 1, h + 1, color); break; case DB_LINE: W_MakeLine(tstatw, x + w, y, x + w, y + h, border); W_MakeLine(tstatw, x + w, y + 4, x + BAR_LENGTH, y + 4, border); break; case DB_NOFILL: W_MakeLine(tstatw, x, y, x + w, y, border); W_MakeLine(tstatw, x + w, y, x + w, y + h, border); W_MakeLine(tstatw, x + w, y + h, x, y + h, border); W_MakeLine(tstatw, x, y + h, x, y, border); break; } } void db_bar(char *lab, int x, int y, int value, int tmpmax, int max, int digits, int color) { register int wt, wv, tw, tc; char valstr[32]; switch (digits) { case DB_3DIGITS: tc = 11; tw = W_Textwidth * tc; valstr[0] = lab[0]; valstr[1] = lab[1]; valstr[2] = '['; itoapad(value, &(valstr[3]), 0, 3); valstr[6] = '/'; itoapad(tmpmax, &(valstr[7]), 0, 3); valstr[10] = ']'; W_ClearArea(tstatw, x, y, tw + BAR_LENGTH, 10); break; case DB_5DIGITS: tc = 15; tw = W_Textwidth * tc; valstr[0] = lab[0]; valstr[1] = lab[1]; valstr[2] = '['; itoapad(value, &(valstr[3]), 0, 5); valstr[8] = '/'; itoapad(tmpmax, &(valstr[9]), 0, 5); valstr[14] = ']'; W_ClearArea(tstatw, x, y, tw + BAR_LENGTH, 10); break; } wt = (int) ((float) BAR_LENGTH * ((float) tmpmax / (float) max)); wv = (int) ((float) BAR_LENGTH * ((float) value / (float) max)); if (wt > BAR_LENGTH) wt = BAR_LENGTH; if (wv > BAR_LENGTH) wv = BAR_LENGTH; W_WriteText(tstatw, x, y, textColor, valstr, 3, W_RegularFont); W_WriteText(tstatw, x + 3 * W_Textwidth, y, textColor, (&valstr[3]), tc / 2 + 1, W_BoldFont); W_WriteText(tstatw, x + (tc / 2 + 1) * W_Textwidth, y, textColor, (&valstr[tc / 2 + 1]), tc / 2, W_RegularFont); db_box(x + tw, y, BAR_LENGTH, 9, DB_NOFILL, color); if (wt >= wv && wt > 0) db_box(x + tw, y, wt, 9, DB_LINE, color); if (wv > 0) db_box(x + tw, y, wv, 9, DB_FILL, color); } void db_flags(int fr) { static float old_kills = -1.0; static int old_torp = -1; static unsigned int old_flags = -1; static int old_tourn = -1; char buf[16]; struct player *plr; if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV)) plr = players + me->p_playerl; else plr = me; if (fr || me->p_flags != old_flags) { buf[0] = (me->p_flags & PFSHIELD ? 'S' : ' '); if (me->p_flags & PFGREEN) buf[1] = 'G'; else if (me->p_flags & PFYELLOW) buf[1] = 'Y'; else buf[1] = 'R'; buf[2] = (me->p_flags & (PFPLLOCK | PFPLOCK) ? 'L' : ' '); buf[3] = (me->p_flags & PFREPAIR ? 'R' : ' '); buf[4] = (me->p_flags & PFBOMB ? 'B' : ' '); buf[5] = (me->p_flags & PFORBIT ? 'O' : ' '); if (me->p_ship.s_type == STARBASE) buf[6] = (me->p_flags & PFDOCKOK ? 'D' : ' '); else buf[6] = (me->p_flags & PFDOCK ? 'D' : ' '); buf[7] = (me->p_flags & PFCLOAK ? 'C' : ' '); buf[8] = (me->p_flags & PFWEP ? 'W' : ' '); buf[9] = (me->p_flags & PFENG ? 'E' : ' '); if (me->p_flags & PFPRESS) buf[10] = 'P'; else if (me->p_flags & PFTRACT) buf[10] = 'T'; else buf[10] = ' '; if (me->p_flags & PFBEAMUP) buf[11] = 'u'; else if (me->p_flags & PFBEAMDOWN) buf[11] = 'd'; else buf[11] = ' '; W_WriteText(tstatw, 2, 3, textColor, "Flags", 5, W_RegularFont); W_WriteText(tstatw, 2, 17, textColor, buf, 12, W_RegularFont); old_flags = me->p_flags; } if (fr || status->tourn != old_tourn) { if (status->tourn) W_WriteText(tstatw, 74, 17, textColor, "T", 1, W_BoldFont); else W_WriteText(tstatw, 74, 17, textColor, " ", 1, W_BoldFont); old_tourn = status->tourn; } if (fr || plr->p_kills != old_kills) { if (plr->p_kills > 0.0) { W_WriteText(tstatw, 346, 17, textColor, "Kills:", 6, W_RegularFont); ftoa(plr->p_kills, buf, 0, 3, 2); W_WriteText(tstatw, 386, 17, textColor, buf, strlen(buf), W_RegularFont); } else { W_ClearArea(tstatw, 346, 17, 96, 10); } old_kills = plr->p_kills; } if (fr || plr->p_ntorp != old_torp) { if (plr->p_ntorp > 0) { W_WriteText(tstatw, 346, 30, textColor, "Torps:", 6, W_RegularFont); buf[0] = plr->p_ntorp % 10 + '0'; W_WriteText(tstatw, 386, 30, textColor, buf, 1, W_RegularFont); } else { W_ClearArea(tstatw, 346, 30, 96, 10); } old_torp = plr->p_ntorp; } } void db_redraw_krp(int fr) { static int old_spd = -1, old_cur_spd = -1; static int old_shl = -1, old_dam = -1; static int old_arm = -1, old_cur_arm = -1; static int old_wpn = -1, old_egn = -1; static int old_ful = -1; register int cur_max; register int value; int color; float kills; if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV)) kills = players[me->p_playerl].p_kills; else kills = me->p_kills; if (fr) W_ClearWindow(tstatw); db_flags(fr); cur_max = (me->p_ship.s_maxspeed + 2) - (me->p_ship.s_maxspeed + 1) * ((float) me->p_damage / (float) (me->p_ship.s_maxdamage)); if (cur_max > me->p_ship.s_maxspeed) cur_max = me->p_ship.s_maxspeed; if (cur_max < 0) cur_max = 0; if (fr || me->p_speed != old_spd || cur_max != old_cur_spd) { if (me->p_speed >= me->p_ship.s_maxspeed - 2) color = W_Red; else color = W_Green; db_bar("Sp", 90, 3, me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color); old_spd = me->p_speed; old_cur_spd = cur_max; } if (fr || me->p_shield != old_shl) { value = (100 * me->p_shield) / me->p_ship.s_maxshield; if (value <= 16) color = W_Red; else if (value <= 66) color = W_Yellow; else color = W_Green; db_bar("Sh", 90, 17, me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_3DIGITS, color); old_shl = me->p_shield; } if (fr || me->p_damage != old_dam) { value = (100 * (me->p_ship.s_maxdamage - me->p_damage)) / me->p_ship.s_maxdamage; if (value <= 16) color = W_Red; else if (value <= 66) color = W_Yellow; else color = W_Green; db_bar("Hu", 90, 31, (me->p_ship.s_maxdamage - me->p_damage), me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_3DIGITS, color); old_dam = me->p_damage; } if (me->p_ship.s_type == ASSAULT) cur_max = (((kills * 3) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (kills * 3)); else if (me->p_ship.s_type == STARBASE) cur_max = me->p_ship.s_maxarmies; else cur_max = (((kills * 2) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (kills * 2)); if (fr || me->p_armies != old_arm || cur_max != old_cur_arm) { value = me->p_armies; if (value <= 0) color = W_Green; else color = W_Red; db_bar("Ar", 218, 3, me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color); old_arm = me->p_armies; old_cur_arm = cur_max; } if (fr || me->p_wtemp != old_wpn) { value = (100 * me->p_wtemp) / me->p_ship.s_maxwpntemp; if (value <= 16) color = W_Green; else if (value <= 66) color = W_Yellow; else color = W_Red; db_bar("Wt", 218, 17, me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS ,color); old_wpn = me->p_wtemp; } if (fr || me->p_etemp != old_egn) { value = (100 * me->p_etemp) / me->p_ship.s_maxegntemp; if (value <= 16) color = W_Green; else if (value <= 66) color = W_Yellow; else color = W_Red; db_bar("Et", 218, 31, me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS ,color); old_egn = me->p_etemp; } if (fr || me->p_fuel != old_ful) { value = ((100 * me->p_fuel) / me->p_ship.s_maxfuel); if (value <= 16) color = W_Red; else if (value <= 66) color = W_Yellow; else color = W_Green; db_bar("Fu", 346, 3, me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color); old_ful = me->p_fuel; } } void db_redraw_COW(int fr) { static int old_spd = -1, old_cur_spd = -1; static int old_shl = -1, old_dam = -1; static int old_arm = -1, old_cur_arm = -1; static int old_wpn = -1, old_egn = -1; static int old_ful = -1; register int cur_max; register int value; int color; float kills; if ((me->p_flags & (PFPLOCK | PFOBSERV)) == (PFPLOCK | PFOBSERV)) kills = players[me->p_playerl].p_kills; else kills = me->p_kills; if (fr) W_ClearWindow(tstatw); db_flags(fr); cur_max = (me->p_ship.s_maxspeed + 2) - (me->p_ship.s_maxspeed + 1) * ((float) me->p_damage / (float) (me->p_ship.s_maxdamage)); if (cur_max > me->p_ship.s_maxspeed) cur_max = me->p_ship.s_maxspeed; if (cur_max < 0) cur_max = 0; if (fr || me->p_speed != old_spd || cur_max != old_cur_spd) { if (me->p_speed >= me->p_ship.s_maxspeed - 2) color = W_Yellow; else color = W_White; db_bar("Sp", 90, 3, me->p_speed, cur_max, me->p_ship.s_maxspeed, DB_3DIGITS, color); old_spd = me->p_speed; old_cur_spd = cur_max; } if (fr || me->p_shield != old_shl) { value = (100 * me->p_shield) / me->p_ship.s_maxshield; if (value <= 50) color = W_Red; else if (value < 90) color = W_Yellow; else color = W_White; db_bar("Sh", 90, 17, me->p_ship.s_maxshield - me->p_shield, me->p_ship.s_maxshield, me->p_ship.s_maxshield, DB_3DIGITS, color); old_shl = me->p_shield; } if (fr || me->p_damage != old_dam) { value = (100 * me->p_damage) / me->p_ship.s_maxdamage; if (value <= 10) color = W_White; else if (value > 50) color = W_Red; else color = W_Yellow; db_bar("Da", 90, 31, me->p_damage, me->p_ship.s_maxdamage, me->p_ship.s_maxdamage, DB_3DIGITS, color); old_dam = me->p_damage; } if (me->p_ship.s_type == ASSAULT) cur_max = (((kills * 3) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (kills * 3)); else if (me->p_ship.s_type == STARBASE) cur_max = me->p_ship.s_maxarmies; else cur_max = (((kills * 2) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (kills * 2)); if (fr || me->p_armies != old_arm || cur_max != old_cur_arm) { value = me->p_armies; if (value <= 3) color = W_White; else if (value > 5) color = W_Red; else color = W_Yellow; db_bar("Ar", 218, 3, me->p_armies, cur_max, me->p_ship.s_maxarmies, DB_3DIGITS, color); old_arm = me->p_armies; old_cur_arm = cur_max; } if (fr || me->p_wtemp != old_wpn) { value = (100 * me->p_wtemp) / me->p_ship.s_maxwpntemp; if (value > 50) color = W_Red; else if (value <= 20) color = W_White; else color = W_Yellow; db_bar("Wt", 218, 17, me->p_wtemp / 10, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxwpntemp / 10, DB_3DIGITS ,color); old_wpn = me->p_wtemp; } if (fr || me->p_etemp != old_egn) { value = (100 * me->p_etemp) / me->p_ship.s_maxegntemp; if (value <= 25) color = W_White; else if (value < 75) color = W_Yellow; else color = W_Red; db_bar("Et", 218, 31, me->p_etemp / 10, me->p_ship.s_maxegntemp / 10, me->p_ship.s_maxegntemp / 10, DB_3DIGITS ,color); old_egn = me->p_etemp; } if (fr || me->p_fuel != old_ful) { value = ((100 * me->p_fuel) / me->p_ship.s_maxfuel); if (value <= 50) color = W_Red; else if (value > 90) color = W_White; else color = W_Yellow; db_bar("Fu", 346, 3, me->p_fuel, me->p_ship.s_maxfuel, me->p_ship.s_maxfuel, DB_5DIGITS, color); old_ful = me->p_fuel; } } void db_redraw(int fr) { switch (newDashboard) { case 2: db_redraw_krp(fr); break; case 3: db_redraw_lab2(fr); break; default: db_redraw_COW(fr); } } netrek-client-cow-3.3.2/SHORT_PACKETS.DOC0000664000175000017500000001535313657750470016460 0ustar jamesjamesReceived: from plato.Chemietechnik.Uni-Dortmund.DE by mail.Chemietechnik.Uni-Dortmund.DE id AA20183; Mon, 7 Jun 93 09:46:43 +0200 From: Heiko Wengler Message-Id: <9306070746.AA04496@plato.Chemietechnik.Uni-Dortmund.DE> Subject: README for SHORT_PACKETS To: short@plato.chemietechnik.uni-dortmund.de Date: Mon, 7 Jun 1993 09:46:41 +0200 (MET DST) X-Mailer: ELM [version 2.4 PL13] Content-Type: text Content-Length: 6423 Short Packets Code by Tedd Hadley and Heiko Wengler. Extra feature: ',' puts up a menu ('network' for your .xtrekrc) with 1 toggle options and 1 integer entry field: and two new keys: '-' updateSmall 'xx' (not assigned yet) updateMiddle (:-) 'UpdateSmall' gives you an update of all weapons+Planets+Kills. ( <400 bytes) 'UpdateMiddle' is updateAll without the Stats. (< 700 bytes) UpdateAll (<2200 bytes) orig UpdateAll (4192 bytes) MENU: [Don't] Receive variable and short packets (1) Receive threshold: (2) Done (1) Variable and short packets. This tells the server to send several new types of packets instead of the original types. The technical details follow at the end. (2) Receive threshold. This is complete experimental. If a non-zero threshold is specified the server tries to not overload the connection. This option could be not implemented in the server. You should give as a threshold the number of bytes per second you wanna give from your bandwith. For example if you set the threshold to 500 bytes. And you are playing with 5 updates/sec. You have a threshold of 500/updates = 100bytes/update. The server checks after every update if he wrote more than the limit. If yes the server skips your next update and you get a warning from your client. This can actually halve your Updates/sec. Not more. (Eg if you play with 5 updates it 'slows' you down to 3 updates.) Minimum limit per update is 60 bytes. (Threshold = 60 * updates then.) If you set it to 0 Server ends testing. ( If you wanna calculate your bandwith requirements you should count the tcp/ip overhead of 64 bytes to the actual data. For example if you wanna play with a 9600 Baud modem. You have a bandwith of 1200 bytes. you can subtract 200 bytes for client-server communication. So you have 1000 bytes to play with. With 5 updates you need under tcp/ip (5*64=)320 bytes for headers. You have then ~650 bytes for serverdata. That means you should set the threshold to 650 bytes. ( 130 bytes per update are much. All playermovement(16 players) +SP_S_YOU + 16 Torps.) I do not think that you ever get 16 player packets in one update. That leaves you with some more "weaponsdata" :-) If you have another protocol you must compute the overhead by yourself. And any limit smaller than 500 bytes /update means that after an UpdateAll the next update is skipped. **************************************************************************** Variable and short packet justification: The three largest contributors to netrek bandwidth are the packets SP_PLAYER (all player movement), SP_YOU (information relating to your ship statistics, and your status) and SP_TORP (torp movement). In one test I got these statistics: SP_PLAYER: 2407 K SP_YOU: 1408 K SP_TORP: 1118 K SP_STATS: 262 K SP_FLAGS: 148 K SP_WARNING: 139 K SP_TORP_INFO: 90 K SP_MESSAGE: 82 K, ... (the remaining packets account for about 50K) Without much doubt, the first three (SP_PLAYER, SP_YOU, SP_TORP) contribute most of the overhead. So... NEW PACKETS: ORIGINAL SIZE (bytes) NEW SIZE (bytes) -------------------------------------------------------------- SP_PLAYER 12 SP_S_PLAYER 4 (**) SP_YOU 32 SP_S_YOU 12 SP_S_YOU_SS 12 SP_TORP 12 SP_S_TORP ~4 (***) SP_TORP_INFO 8 SP_S_TORPINFO 1 SP_PLANET 12 SP_S_PLANET 6 (*) SP_MESSAGE 84 SP_S_MESSAGE 8-76 SP_WARNING 84 SP_S_WARNING 4 (*) variable packets, each packet containing 2 bytes of type & length information and some number of 6-byte entries, (**) variable packets, each packet containing 4 (or 12) bytes of type & length information and some number of 4-byte entries, (***) The torp packet is really a packet container for 9 bit pixelcoordinates. Look into the code to figure out :-) Notice that the reduction in network traffic is very close to 40-70% of the original. SP_S_PLAYER: byte bit description ----------------------- 0 0-4 player number, 5 local or galactic, 6 = 9. x-bit, 7 9. y-bit 1 0-3 speed, 4-7 direction of ship 2 0-7 low 8 bits from X-Pixelcoordinate 3 0-7 low 8 bits from Y-Pixelcoordinate SP_S_TORP: byte range ----------------------- 0 0-7 Packettype 1 0-7 Bitset describing which torps are in this packet. 2 0-7 Torpnumber of first torp( num*8=torpnumber) 3 A number of 9 Bit pairs. Each describing one torp. ( The 9 bit numbers are the torpcoordinates in pixel-coordinates.) All rounded up to 4 byte boundaries. SP_S_YOU and SP_S_YOU_SS are the result of dividing SP_YOU into two packets. Most of the time, SP_YOU gets sent because ship status has changed, i.e. damage, fuel, or shields. The remaining information, hostile, swar, armies, and flags are not needed as often. Therefore it makes sense to split SP_YOU into two packets: struct youshort_spacket { /* SP_S_YOU */ char type; char pnum; char hostile; char swar; char armies; char whydead; char whodead; char pad1; unsigned flags; }; and struct youss_spacket { /* SP_S_YOU_SS */ char type; char pad1; unsigned short damage; unsigned short shield; unsigned short fuel; unsigned short etemp; unsigned short wtemp; }; The new SP_S_PLANET: All info as in the old packet but only 255 armies. struct planet_s_spacket { /* body of SP_S_PLANET */ char pnum; char owner; char info; uchar armies; /* more than 255 Armies ? ... */ short flags; }; struct warning_s_spacket { /* SP_S_WARNING */ char type; uchar whichmessage; char argument, argument2; /* for phaser etc ... */ }; Instead of sending the strings i send only an index into an string array. This works also for all weapons warnings with arguments. (like Phaser.) (eg: old: Phaserpacket (16) + SP_WARNING = 100 bytes. now only 20.) Limitations: Only 64 Players can be send with SP_S_PLAYER. netrek-client-cow-3.3.2/death.c0000664000175000017500000001414113657750470015303 0ustar jamesjames#include #include "config.h" #include "copyright.h" #include #include #include #include #include INC_SYS_TIME #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "inform.h" #include "option.h" #include "short.h" extern jmp_buf env; W_Font deathFont; #ifdef nodef static struct itimerval udt; #endif static char *teamstring[9] = {"", "and the Feds", "and the Roms", "", "and the Klis", "", "", "", "and the Oris"}; void death(void) { W_Event event; W_Window oldw; oldw = w; #ifdef AUTOKEY if (autoKey) autoKeyAllOff(); #endif /* AUTOKEY */ #ifdef nodef /* Reset the signal */ SIGNAL(SIGALRM, SIG_IGN); udt.it_interval.tv_sec = 0; udt.it_interval.tv_usec = 0; udt.it_value.tv_sec = 0; udt.it_value.tv_usec = 0; setitimer(ITIMER_REAL, &udt, 0); SIGNAL(SIGALRM, SIG_DFL); #endif W_ClearWindow(w); W_ClearWindow(iconWin); sound_flags = PFSHIELD; if (oldalert != PFGREEN) { if (extraBorder) W_ChangeBorder(oldw, gColor); W_ChangeBorder(baseWin, gColor); oldalert = PFGREEN; } if (W_IsMapped(statwin)) { W_UnmapWindow(statwin); showStats = 1; } else { showStats = 0; } if (infomapped) destroyInfo(); W_UnmapWindow(planetw); W_UnmapWindow(rankw); W_UnmapWindow(war); if (optionWin) optiondone(); #ifdef SOUND if (soundWin) sounddone(); #endif if (promoted) { /* Use deathmessage as a buffer because it will be updated in a moment * * anyway */ if (mystats->st_rank < nranks) { sprintf(deathmessage, "Congratulations, you were promoted to %s", ranks[mystats->st_rank].name); } else { sprintf(deathmessage, "Congratulations, you were promoted"); } if (warncount > 0) W_ClearArea(warnw, 5, 5, W_Textwidth * warncount, W_Textheight); W_WriteText(warnw, 5, 5, W_Green, deathmessage, strlen(deathmessage), W_BoldFont); warncount = strlen(deathmessage); promoted = 0; } else { static int first = 10; if (first) { first--; sprintf(deathmessage, "Okay, you died, but that is NORMAL! Press Enter for new ship!"); if (warncount > 0) W_ClearArea(warnw, 5, 5, W_Textwidth * warncount, W_Textheight); W_WriteText(warnw, 5, 5, W_Green, deathmessage, strlen(deathmessage), W_BoldFont); warncount = strlen(deathmessage); } } deathFont = W_RegularFont; switch (me->p_whydead) { case KQUIT: strcpy(deathmessage, " You QUIT!!"); break; case KTORP: sprintf(deathmessage, "You were thumped by a photon torpedo from %s (%c%c).", players[me->p_whodead].p_name, teamlet[players[me->p_whodead].p_team], shipnos[me->p_whodead]); break; case KPLASMA: sprintf(deathmessage, "You were SMACKed by a plasma torpedo from %s (%c%c) ", players[me->p_whodead].p_name, teamlet[players[me->p_whodead].p_team], shipnos[me->p_whodead]); break; case KPHASER: sprintf(deathmessage, "You were phasered to death by %s (%c%c)", players[me->p_whodead].p_name, teamlet[players[me->p_whodead].p_team], shipnos[me->p_whodead]); break; case KPLANET: sprintf(deathmessage, "You were killed by planetary fire from %s (%c)", planets[me->p_whodead].pl_name, teamlet[planets[me->p_whodead].pl_owner]); break; case KSHIP: sprintf(deathmessage, "You were killed by the explosion of %s (%c%c)", players[me->p_whodead].p_name, teamlet[players[me->p_whodead].p_team], shipnos[me->p_whodead]); break; case KDAEMON: strcpy(deathmessage, "You were killed by a dying daemon."); break; case KWINNER: sprintf(deathmessage, "Galaxy has been conquered by %s (%c%c) %s", players[me->p_whodead].p_name, teamlet[players[me->p_whodead].p_team], shipnos[players[me->p_whodead].p_no], teamstring[players[me->p_whodead].p_team]); deathFont = W_BoldFont; W_GalacticBgd(GENO_PIX); break; case KGHOST: strcpy(deathmessage, "You were killed by a confused daemon."); break; case KGENOCIDE: sprintf(deathmessage, "You were GENOCIDED by %s (%c%c) %s. You suck!", players[me->p_whodead].p_name, teamlet[players[me->p_whodead].p_team], shipnos[me->p_whodead], teamstring[players[me->p_whodead].p_team]); deathFont = W_BoldFont; break; case KPROVIDENCE: strcpy(deathmessage, "You were nuked by GOD."); break; case KOVER: strcpy(deathmessage, "The game is over!"); break; case TOURNSTART: strcpy(deathmessage, "The tournament game has begun!"); #if defined(SOUND) && defined(sgi) Play_Sound(BUZZER_SOUND); #endif break; case TOURNEND: strcpy(deathmessage, "The tournament game has ended."); break; case KBADBIN: strcpy(deathmessage, "Your netrek executable didn't verify correctly."); break; default: strcpy(deathmessage, "You were killed by something unknown to this game?"); break; } W_ClearWindow(messagew); W_WriteText(messagew, 5, 5, W_Yellow, deathmessage, strlen(deathmessage), deathFont); w = oldw; /* This is a good time to expire all the torps and phasors that we have * * missed the TFREE and PFREE packes for. */ resetWeaponInfo(); #ifndef THREADED while (W_EventsPending()) W_NextEvent(&event); longjmp(env, 0); #else /* Threaded: when using threads, this thread has been spawned to handle * * network I/O and so we cannot longjmp here, into another thread! Instead * * we call W_TerminateWait which makes the main thead's W_WaitForEvent() * * return 0 and exitthread */ W_TerminateWait(); ENDTHREAD #endif /* Threaded */ } void updatedeath(void) { if (deathFont != W_BoldFont) /* Initialise deathFont */ deathFont = W_RegularFont; W_WriteText(messagew, 5, 5, W_Yellow, deathmessage, strlen(deathmessage), deathFont); } netrek-client-cow-3.3.2/udpopt.c0000664000175000017500000001107613657750470015535 0ustar jamesjames/* udpopt.c - present UDP control window */ #include "config.h" #include "copyright.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "socket.h" #include "udpopt.h" #define UDPBORDER 2 #define UDPLEN 35 /* Set up the UDP control window */ void udpwindow() { register int i; for (i = 0; i < UDP_NUMOPTS; i++) udprefresh(i); /* Map window */ W_MapWindow(udpWin); } /* Refresh item i */ void udprefresh(int i) { char buf[BUFSIZ]; switch (i) { case UDP_CURRENT: sprintf(buf, "UDP channel is %s", (commMode == COMM_TCP) ? "CLOSED" : "OPEN"); break; case UDP_STATUS: strcpy(buf, "> Status: "); switch (commStatus) { case STAT_CONNECTED: strcat(buf, "Connected, yay us!"); break; case STAT_SWITCH_UDP: strcat(buf, "Requesting switch to UDP"); break; case STAT_SWITCH_TCP: strcat(buf, "Requesting switch to TCP"); break; case STAT_VERIFY_UDP: strcat(buf, "Verifying UDP connection"); break; default: fprintf(stderr, "netrek: UDP error: bad commStatus (%d)\n", commStatus); } break; case UDP_DROPPED: sprintf(buf, "> UDP trans dropped: %d (%d%% | %d%%)", udpDropped, udpDropped * 100 / udpTotal, /* (udpTotal always > 0) */ udpRecentDropped * 100 / UDP_RECENT_INTR); break; case UDP_SEQUENCE: sprintf(buf, "Sequence checking is %s", (udpSequenceChk) ? "ON" : "OFF"); break; case UDP_DEBUG: sprintf(buf, "Debugging info is "); switch (udpDebug) { case 0: strcat(buf, "OFF"); break; case 1: strcat(buf, "ON (connect msgs only)"); break; case 2: strcat(buf, "ON (verbose output)"); break; } break; case UDP_SEND: sprintf(buf, "Sending with "); switch (udpClientSend) { case 0: strcat(buf, "TCP only"); break; case 1: strcat(buf, "simple UDP"); break; case 2: strcat(buf, "enforced UDP (state only)"); break; case 3: strcat(buf, "enforced UDP (state & weap)"); break; } break; case UDP_RECV: sprintf(buf, "Receiving with "); switch (udpClientRecv) { case MODE_TCP: strcat(buf, "TCP only"); break; case MODE_SIMPLE: strcat(buf, "simple UDP"); break; case MODE_FAT: strcat(buf, "fat UDP"); break; #ifdef DOUBLE_UDP case MODE_DOUBLE: strcat(buf, "double UDP"); break; #endif /* DOUBLE_UDP */ } break; case UDP_FORCE_RESET: sprintf(buf, "Force reset to TCP"); break; case UDP_UPDATE_ALL: sprintf(buf, "Request full update (=)"); break; #ifdef GATEWAY case UDP_GW: sprintf(buf, "gw: %s %d/%d/%d", gw_mach, gw_serv_port, gw_port, gw_local_port); break; #endif case UDP_DONE: strcpy(buf, "Done"); break; default: fprintf(stderr, "netrek: UDP error: bad udprefresh(%d) call\n", i); } W_WriteText(udpWin, 0, i, textColor, buf, strlen(buf), 0); } void udpaction(W_Event * data) { register int i; switch (data->y) { case UDP_CURRENT: if (commMode == COMM_TCP) sendUdpReq(COMM_UDP); else sendUdpReq(COMM_TCP); break; case UDP_STATUS: case UDP_DROPPED: W_Beep(); break; case UDP_SEQUENCE: udpSequenceChk = !udpSequenceChk; udprefresh(UDP_SEQUENCE); break; case UDP_SEND: udpClientSend++; if (udpClientSend > 3) udpClientSend = 0; udprefresh(UDP_SEND); break; case UDP_RECV: udpClientRecv++; #ifdef DOUBLE_UDP if (udpClientRecv > MODE_DOUBLE) udpClientRecv = 0; #else if (udpClientRecv >= MODE_DOUBLE) udpClientRecv = 0; #endif udprefresh(UDP_RECV); sendUdpReq(COMM_MODE + udpClientRecv); break; case UDP_DEBUG: udpDebug++; if (udpDebug > 2) udpDebug = 0; udprefresh(UDP_DEBUG); break; case UDP_FORCE_RESET: /* clobber UDP */ UDPDIAG(("*** FORCE RESET REQUESTED\n")); sendUdpReq(COMM_TCP); commMode = commModeReq = COMM_TCP; commStatus = STAT_CONNECTED; commSwitchTimeout = 0; udpClientSend = udpClientRecv = udpSequenceChk = udpTotal = 1; udpDebug = udpDropped = udpRecentDropped = 0; if (udpSock >= 0) closeUdpConn(); for (i = 0; i < UDP_NUMOPTS; i++) udprefresh(i); break; case UDP_UPDATE_ALL: sendUdpReq(COMM_UPDATE); break; #ifdef GATEWAY case UDP_GW: W_Beep(); break; #endif case UDP_DONE: udpdone(); break; } } void udpdone() { /* Unmap window */ W_UnmapWindow(udpWin); } netrek-client-cow-3.3.2/interface.c0000664000175000017500000000610413657750470016156 0ustar jamesjames/* interface.c * * This file will include all the interfaces between the input routines and the * daemon. They should be useful for writing robots and the like * */ #include "config.h" #include "copyright.h" #include #include #include INC_SYS_TIME #include INC_SYS_TIMEB #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "socket.h" #include "interface.h" void set_speed(int speed) { sendSpeedReq(speed); } void set_course(unsigned char dir) { sendDirReq(dir); } void shield_up(void) { if (!(me->p_flags & PFSHIELD)) { sendShieldReq(1); } } void shield_down(void) { if (me->p_flags & PFSHIELD) { sendShieldReq(0); } } void shield_tog(void) { if (me->p_flags & PFSHIELD) { sendShieldReq(0); } else { sendShieldReq(1); } } void bomb_planet(void) { if (!(me->p_flags & PFBOMB)) { sendBombReq(1); } } void beam_up(void) { if (!(me->p_flags & PFBEAMUP)) { sendBeamReq(1); /* 1 means up... */ } } void beam_down(void) { if (!(me->p_flags & PFBEAMDOWN)) { sendBeamReq(2); /* 2 means down... */ } } void repair(void) { if (!(me->p_flags & PFREPAIR)) { sendRepairReq(1); } } void repair_off(void) { if (me->p_flags & PFREPAIR) { sendRepairReq(0); } } void repeat_message(void) { if (++lastm == MAXMESSAGE) { lastm = 0; } } void cloak(void) { if (me->p_flags & PFCLOAK) { sendCloakReq(0); } else { sendCloakReq(1); } } void cloak_on(void) { if (!(me->p_flags & PFCLOAK)) { sendCloakReq(1); } } void cloak_off(void) { if (me->p_flags & PFCLOAK) { sendCloakReq(0); } } unsigned long mstime(void) { #ifndef WIN32 static struct timeval tv_base; struct timeval tv; if (!tv_base.tv_sec) { gettimeofday(&tv_base, NULL); return 0; } gettimeofday(&tv, NULL); return (tv.tv_sec - tv_base.tv_sec) * 1000L + (tv.tv_usec - tv_base.tv_usec) / 1000L; #else static unsigned long base; if (!base) { base = GetTickCount(); return (0); } return (GetTickCount() - base); #endif /* WIN32 */ } unsigned long msetime(void) { #ifndef WIN32 struct timeval tv; gettimeofday(&tv, NULL); return (tv.tv_sec - 732737182) * 1000 + tv.tv_usec / 1000; #else return GetTickCount(); #endif } void run_clock(time_t curtime) { char timebuf[9]; struct tm *tm; static time_t tt; if ((curtime - tt) < 1) return; tm = localtime(&curtime); timebuf[0] = tm->tm_hour / 10 + '0'; timebuf[1] = (tm->tm_hour % 10) + '0'; timebuf[2] = ':'; timebuf[3] = tm->tm_min / 10 + '0'; timebuf[4] = (tm->tm_min % 10) + '0'; timebuf[5] = ':'; timebuf[6] = tm->tm_sec / 10 + '0'; timebuf[7] = (tm->tm_sec % 10) + '0'; switch (newDashboard) { case 1: case 2: W_WriteText(tstatw, 2, 30, textColor, timebuf, 8, W_RegularFont); break; default: W_WriteText(tstatw, 446, 27, textColor, timebuf, 8, W_RegularFont); } tt = curtime; } netrek-client-cow-3.3.2/enter.c0000664000175000017500000002276413657750470015345 0ustar jamesjames/* enter.c * * This version modified to work as the client in a socket based protocol. * */ #include "config.h" #include "copyright.h" #include #include #include #include #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "enter.h" /* Enter the game */ /* long random(); */ static void drawTstats(); void enter(void) { drawTstats(); delay = 0; } void openmem(void) { int i; players = universe.players; torps = universe.torps; plasmatorps = universe.plasmatorps; status = universe.status; planets = universe.planets; phasers = universe.phasers; mctl = universe.mctl; messages = universe.messages; context = universe.context; context->gameup = GU_UNSAFE; for (i = 0; i < MAXPLAYER; i++) { players[i].p_status = PFREE; players[i].p_cloakphase = 0; players[i].p_no = i; players[i].p_ntorp = 0; players[i].p_explode = 1; players[i].p_stats.st_tticks = 1; } mctl->mc_current = 0; status->time = 1; status->timeprod = 1; status->kills = 1; status->losses = 1; status->time = 1; status->planets = 1; status->armsbomb = 1; for (i = 0; i < MAXPLAYER * MAXTORP; i++) { torps[i].t_status = TFREE; torps[i].t_owner = (i / MAXTORP); } for (i = 0; i < MAXPLAYER; i++) { phasers[i].ph_status = PHFREE; #ifdef SOUND phasers[i].sound_phaser = 0; #endif } for (i = 0; i < MAXPLAYER * MAXPLASMA; i++) { plasmatorps[i].pt_status = PTFREE; plasmatorps[i].pt_owner = (i / MAXPLASMA); } for (i = 0; i < MAXPLANETS; i++) { planets[i].pl_no = i; } /* initialize planet redraw for moving planets */ for (i = 0; i < MAXPLANETS; i++) { pl_update[i].plu_update = -1; } /* initialise dynamic rank table */ nranks = DEFAULT_NUMRANKS; i = nranks * sizeof(struct rank); ranks = malloc(i); memcpy(ranks, &default_ranks, i); /* initialize pointers if ghost start */ if (ghoststart) { me = &players[ghost_pno]; myship = &(me->p_ship); mystats = &(me->p_stats); } } void drawTstats(void) { char buf[BUFSIZ]; if (newDashboard) return; sprintf(buf, "Flags Warp Dam Shd Torps Kills Armies Fuel Wtemp Etemp"); W_WriteText(tstatw, 50, 5, textColor, buf, strlen(buf), W_RegularFont); sprintf(buf, "Maximum: %2d %3d %3d %3d %6d %3d %3d", me->p_ship.s_maxspeed, me->p_ship.s_maxdamage, me->p_ship.s_maxshield, me->p_ship.s_maxarmies, me->p_ship.s_maxfuel, me->p_ship.s_maxwpntemp / 10, me->p_ship.s_maxegntemp / 10); W_WriteText(tstatw, 50, 27, textColor, buf, strlen(buf), W_RegularFont); } #ifdef HOCKEY_LINES void init_hockey_lines(void) { int i = 0; /* This is incremented for * * * * * each line added */ /* For speed, the normal netrek walls are not done this way */ /* Defines for Hockey lines and the Hockey lines themselves */ #define RINK_TOP 0 #define RINK_BOTTOM (GWIDTH) #define TENTH (((RINK_BOTTOM - RINK_TOP)/10)) #define R_MID (((RINK_BOTTOM - RINK_TOP)/2)) /* center (red) line */ #define RINK_LENGTH ((RINK_BOTTOM - RINK_TOP)) #define RINK_WIDTH ((GWIDTH*2/3)) #define G_MID ((GWIDTH/2)) /* center of goal */ #define RINK_LEFT ((G_MID-(RINK_WIDTH/2))) #define RINK_RIGHT ((G_MID+(RINK_WIDTH/2))) #define G_LFT (R_MID-TENTH) /* left edge of goal */ #define G_RGT (R_MID+TENTH) /* right edge of goal */ #define RED_1 (RINK_LEFT + (1*RINK_WIDTH/5)) #define RED_2 (RINK_LEFT + (2*RINK_WIDTH/5)) #define RED_3 (RINK_LEFT + (3*RINK_WIDTH/5)) #define RED_4 (RINK_LEFT + (4*RINK_WIDTH/5)) #define ORI_G (RINK_BOTTOM - /*2* */TENTH) /* Ori goal line */ #define ORI_E (RINK_BOTTOM - TENTH/2) /* end of Ori goal */ #define ORI_B (RINK_BOTTOM - (RINK_LENGTH/3)) /* Ori blue line */ #define KLI_G (RINK_TOP + /*2* */TENTH) /* Kli goal line */ #define KLI_E (RINK_TOP + TENTH/2) /* end of Kli goal */ #define KLI_B (RINK_TOP + (RINK_LENGTH/3)) /* Kli blue line */ /* The Kli goal line */ s_lines[i].begin_x = G_LFT; s_lines[i].end_x = G_RGT; s_lines[i].begin_y = s_lines[i].end_y = KLI_G; s_lines[i].color = W_Red; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"Kli Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The left side goal line */ s_lines[i].begin_x = s_lines[i].end_x = G_LFT; s_lines[i].begin_y = KLI_G; s_lines[i].end_y = KLI_E; s_lines[i].color = W_Green; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_VERTICAL; /* fprintf(stderr,"L K Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The right side goal line */ s_lines[i].begin_x = s_lines[i].end_x = G_RGT; s_lines[i].begin_y = KLI_G; s_lines[i].end_y = KLI_E; s_lines[i].color = W_Green; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_VERTICAL; /* fprintf(stderr,"K R Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The End of kli goal line */ s_lines[i].begin_x = G_LFT; s_lines[i].end_x = G_RGT; s_lines[i].begin_y = s_lines[i].end_y = KLI_E; s_lines[i].color = W_Green; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"K B Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The Kli blue line */ s_lines[i].begin_x = RINK_LEFT; s_lines[i].end_x = RINK_RIGHT; s_lines[i].begin_y = s_lines[i].end_y = KLI_B; s_lines[i].color = W_Cyan; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"Kli Blue: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The Ori goal line */ s_lines[i].begin_x = G_LFT; s_lines[i].end_x = G_RGT; s_lines[i].begin_y = s_lines[i].end_y = ORI_G; s_lines[i].color = W_Red; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"Ori Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The left side goal line */ s_lines[i].begin_x = s_lines[i].end_x = G_LFT; s_lines[i].begin_y = ORI_G; s_lines[i].end_y = ORI_E; s_lines[i].color = W_Cyan; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_VERTICAL; /* fprintf(stderr,"O L Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The right side goal line */ s_lines[i].begin_x = s_lines[i].end_x = G_RGT; s_lines[i].begin_y = ORI_G; s_lines[i].end_y = ORI_E; s_lines[i].color = W_Cyan; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_VERTICAL; /* fprintf(stderr,"O R Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The End of ori goal line */ s_lines[i].begin_x = G_LFT; s_lines[i].end_x = G_RGT; s_lines[i].begin_y = s_lines[i].end_y = ORI_E; s_lines[i].color = W_Cyan; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"O B Goal: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The Ori blue line */ s_lines[i].begin_x = RINK_LEFT; s_lines[i].end_x = RINK_RIGHT; s_lines[i].begin_y = s_lines[i].end_y = ORI_B; s_lines[i].color = W_Cyan; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"Ori Blue: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* The red line */ s_lines[i].begin_x = RINK_LEFT; s_lines[i].end_x = RINK_RIGHT; s_lines[i].begin_y = s_lines[i].end_y = R_MID; s_lines[i].color = W_Red; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_HORIZONTAL; /* fprintf(stderr,"Red Line: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* Right rink boundary */ s_lines[i].begin_x = s_lines[i].end_x = RINK_RIGHT; s_lines[i].begin_y = 0; s_lines[i].end_y = GWIDTH - 1; s_lines[i].color = W_Grey; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_VERTICAL; /* fprintf(stderr,"Rt. Line: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* Left rink boundary */ s_lines[i].begin_x = s_lines[i].end_x = RINK_LEFT; s_lines[i].begin_y = 0; s_lines[i].end_y = GWIDTH - 1; s_lines[i].color = W_Grey; s_lines[i].flag = &hockey_s_lines; s_lines[i++].orientation = S_LINE_VERTICAL; /* fprintf(stderr,"Lef Line: x: %i to %i, y: %i to * * * %i\n",s_lines[i-1].begin_x, * * * s_lines[i-1].end_x,s_lines[i-1].begin_y,s_lines[i-1].end_y); */ /* NOTE: The number of lines must EXACTLY match the NUM_HOCKEY_LINES */ /* in defs.h for it to run properly. */ } #endif netrek-client-cow-3.3.2/playerlist.h0000664000175000017500000000716313657750470016421 0ustar jamesjames/* playerlist.h All functions which update the playerlist should include this header file. */ #ifndef h_playerlist #define h_playerlist /* Constants. */ #define PLISTLASTSTYLE 4 /* The number of the default last plist style */ /* Global Variables partitionPlist : Separate the goodies from baddies in the sorted list? plistCustomLayout : The value of `playerlist' in the defaults file. plistReorder : True only if the order of the playerlist is out of date. plistStyle : The current style number for the player list. plistUpdated : True only if the player list is out of date. sortMyTeamFirst : Should my team go first or second in the sorted list? sortPlayers : Should the player list be sorted? updatePlayer[plr] : The playerlist entry for "plr" is old. plistHasHostile : True if "Hostile" is a field in the current list. plistHasSpeed : True if "Speed" is true in the current playerlist. */ extern int partitionPlist; extern char *plistCustomLayout; extern int plistReorder; extern int plistStyle; extern int plistUpdated; extern int sortMyTeamFirst; extern int sortPlayers; extern char updatePlayer[MAXPLAYER+1]; #ifdef PLIST2 extern int plistHasHostile = FALSE; extern int plistHasSpeed = FALSE; #endif /* Macro Declarations */ /* void PlistNoteUpdate(i) int i; Note the update of a player so that the entry in the player list can be update. */ #define PlistNoteUpdate(i) { updatePlayer[i] = 1; plistUpdated = 1; } /* void PlistNoteArrive(i) int i; Note the arrive or leaving of a player from a team. This call should also be made if a player changes teams. */ #define PlistNoteArrive(i) { plistReorder = 1; } /* void PlistNoteHostile(i) int i; Note the change in war status of player `i'. Only update if the war status is shown on the current player list. */ #ifdef PLIST2 #define PlistNoteHostile(i) { if (plistHasHostile) PlistNoteUpdate(i); } #else #define PlistNoteHostile(i) {}; #endif /* void PlistNoteSpeed(i) int i; Note the change in speed of player `i'. Only update if speed is shown on the current player list. */ #ifdef PLIST2 #define PlistNoteSpeed(i) { if (plistHasSpeed) PlistNoteUpdate(i); } #else #define PlistNoteSpeed(i) {}; #endif /* Function Declarations */ void InitPlayerList(void); /* Set the global variables associtated with the player list. This should be called when the defaults file is loaded or reloaded. */ int PlistMaxWidth(void); /* Calculate the maximum width of all the defined player lists so that the width of the player list window can be defined. */ void RedrawPlayerList(void); /* Completly redraw the player list, rather than incrimentally updating the list as with UpdatePlayerList(). This function should be called if the plistStyle changes or if the window has just been revealed. This function is called automatically from InitPlayerList. */ /* void UpdatePlayerList() Update the player list. This function works incrimentally. If a dramatic change has taken place (i.e. if plistStyle changes) then RedrawPlayerList() should be called instead. This function is called through a macro. It is expected that 9 times out of 10 the call will not do any work. We can predict when work will be done by looking at "plistUpdated". To avoid redundant procedure calls, the macro only calls the function if plistUpdated suggests that work will be done. */ void UpdatePlistFn(void); #define UpdatePlayerList() if (plistUpdated) UpdatePlistFn() #endif /* defined h_playerlist */ netrek-client-cow-3.3.2/reserved.c0000664000175000017500000000566413657750470016047 0ustar jamesjames/* reserved.c (adapted for trekhopd) * * Kevin P. Smith 7/3/89 * */ #include "config.h" #include "copyright2.h" #include #include #include #include INC_NETINET_IN #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "reserved.h" #ifdef GATEWAY extern unsigned LONG netaddr; #endif extern void terminate(int error); void makeReservedPacket(struct reserved_spacket *packet) { int i; for (i = 0; i < 16; i++) { packet->data[i] = RANDOM() % 256; } packet->type = SP_RESERVED; } /* A "random" table we use to hose our data. */ static unsigned char swap[16][16] = { {4, 13, 9, 7, 5, 8, 14, 2, 10, 11, 6, 3, 12, 15, 0, 1}, {0, 4, 12, 5, 15, 2, 7, 3, 14, 6, 1, 10, 8, 13, 11, 9}, {9, 5, 4, 2, 3, 6, 10, 12, 1, 7, 15, 14, 11, 0, 13, 8}, {5, 8, 15, 4, 6, 9, 1, 12, 10, 3, 13, 11, 2, 7, 0, 14}, {15, 13, 1, 14, 4, 0, 8, 12, 11, 9, 2, 10, 3, 6, 7, 5}, {6, 7, 9, 11, 14, 1, 4, 13, 2, 12, 8, 15, 10, 0, 5, 3}, {11, 0, 10, 14, 7, 12, 2, 4, 15, 13, 3, 9, 1, 5, 8, 6}, {9, 8, 2, 10, 12, 14, 3, 7, 4, 0, 11, 1, 5, 15, 6, 13}, {15, 12, 3, 0, 10, 8, 13, 9, 14, 2, 4, 5, 7, 6, 1, 11}, {14, 3, 0, 11, 2, 10, 15, 12, 13, 1, 5, 4, 6, 8, 7, 9}, {1, 2, 7, 3, 8, 0, 10, 14, 6, 5, 13, 12, 4, 9, 11, 15}, {2, 1, 11, 9, 7, 3, 12, 6, 5, 8, 0, 10, 14, 4, 15, 13}, {0, 12, 15, 1, 13, 7, 6, 5, 3, 14, 11, 8, 9, 10, 2, 4}, {10, 9, 0, 6, 1, 14, 5, 12, 7, 4, 15, 13, 8, 2, 3, 11}, {3, 11, 6, 12, 10, 5, 14, 1, 9, 15, 7, 2, 13, 8, 4, 0}, {12, 6, 5, 8, 14, 4, 13, 15, 10, 0, 11, 9, 3, 1, 7, 2} }; void encryptReservedPacket(struct reserved_spacket *spacket, struct reserved_cpacket *cpacket, char *server, int pno) { struct sockaddr_in saddr; unsigned char mixin1, mixin2, mixin3, mixin4, mixin5; int i, j, k; char buf[16]; unsigned char *s; int len; #ifndef GATEWAY unsigned LONG netaddr = 0; #endif MCOPY(spacket->data, cpacket->data, 16); MCOPY(spacket->data, cpacket->resp, 16); cpacket->type = CP_RESERVED; /* if we didn't get it from -H, go ahead and query the socket */ if (netaddr == 0) { len = sizeof(saddr); if (getpeername(sock, (struct sockaddr *) &saddr, (socklen_t *) &len) < 0) { perror("getpeername(sock)"); terminate(1); } netaddr = saddr.sin_addr.s_addr; } /* printf("Verifying with netaddr %x\n", netaddr); */ mixin1 = (netaddr >> 24) & 0xff; mixin2 = pno; mixin3 = (netaddr >> 16) & 0xff; mixin4 = (netaddr >> 8) & 0xff; mixin5 = netaddr & 0xff; j = 0; for (i = 0; i < 23; i++) { j = (j + cpacket->resp[j]) & 15; s = swap[j]; cpacket->resp[s[i % 7]] ^= mixin1; cpacket->resp[s[i % 5]] ^= mixin2; cpacket->resp[s[i % 13]] ^= mixin3; cpacket->resp[s[i % 3]] ^= mixin4; cpacket->resp[s[i % 11]] ^= mixin5; for (k = 0; k < 16; k++) { buf[k] = cpacket->resp[s[k]]; } MCOPY(buf, cpacket->resp, 16); } } netrek-client-cow-3.3.2/check.h0000664000175000017500000000004013657750470015271 0ustar jamesjames/* check.c */ void check(void); netrek-client-cow-3.3.2/netstat.c0000664000175000017500000000650113657750470015701 0ustar jamesjames#include "config.h" #include "copyright2.h" #include INC_MACHINE_ENDIAN #include #include #include #include #include INC_NETINET_IN #include INC_NETINET_TCP #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "lagmeter.h" #include "netstat.h" #include "netstatopt.h" #include "interface.h" /* #define NETDEBUG */ static int lastread; static int dead; static int start; static int counter; static int sum, n, s2; /* total since last reset */ static int M, var; static double sd; static int suml, nl, s2l; /* total since last death */ static int Ml, varl; static double sdl; static int nf; /* network failures */ static char nfthresh_s[8] = NETSTAT_DF_NFT_S; static int nfthresh = NETSTAT_DF_NFT; void ns_init(int v) { start = v; sum = n = s2 = 0; suml = nl = s2l = 0; nf = 0; } void ns_record_update(int count) { int now; int et; static int lastupdateSpeed; static int lasttime = -1; et = 1000 / server_ups; /* expected time */ if (!me) return; now = mstime(); if (lasttime < (et + et / 4) && now - lastread < et / 2) { #ifdef NETDEBUG printf("skipping %d\n", now - lastread); #endif return; } /* wait a few updates to stabilize */ if (start) { start--; lastread = now; return; } /* wait a few updates to stabilize */ if (me->p_status != PALIVE) { #ifdef NETDEBUG printf("waiting after death...\n"); #endif dead = 5; lastread = now; suml = nl = s2l = 0; return; } else if (dead) { dead--; lastread = now; return; } /* reset if we change updates */ if (server_ups != lastupdateSpeed) { ns_init(3); lastupdateSpeed = server_ups; lastread = now; return; } lastupdateSpeed = server_ups; lasttime = now - lastread; if (lasttime >= nfthresh) { nf++; /* network failure */ nsrefresh(NETSTAT_FAILURES); updateLMeter(); #ifdef NETDEBUG printf("network failure: %d\n", lasttime);; #endif } else { counter++; ns_do_stat(lasttime, counter); #ifdef NETDEBUG printf("%d\n", lasttime); #endif } lastread = now; } void ns_do_stat(int v, int c) { int uf; n++; nl++; sum += v; suml += v; s2 += (v * v); s2l += (v * v); if (n <= 1 || nl <= 1) return; uf = (server_ups * 10) / netstatfreq; if (uf == 0) uf = 1; if ((c % uf) == 0) { M = sum / n; var = (s2 - M * sum) / (n - 1); if (debug) printf("ns1: var=%d\n", var); sd = (int) sqrt((double) var); nsrefresh(NETSTAT_TOTAL); Ml = suml / nl; varl = (s2l - Ml * suml) / (nl - 1); if (debug) printf("ns2: varl=%d\n", varl); sdl = (int) sqrt((double) varl); nsrefresh(NETSTAT_LOCAL); updateLMeter(); } } double ns_get_tstat(void) { return sd; } double ns_get_lstat(void) { return sdl; } int ns_get_nfailures(void) { return nf; } char * ns_get_nfthresh_s(void) { return nfthresh_s; } void ns_set_nfthresh_s(char *s) { strcpy(nfthresh_s, s); } int ns_get_nfthresh(void) { return nfthresh; } void ns_set_nfthresh(int v) { nfthresh = v; } netrek-client-cow-3.3.2/TREK.CUR0000664000175000017500000000050613657750470015172 0ustar jamesjames  0( @ÿÿÿ@@`ppxx|üøðàÀ€~|xp`@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnetrek-client-cow-3.3.2/rabbitbitmaps.h0000664000175000017500000001735013657750470017053 0ustar jamesjames #define rmyplanet000_width 30 #define rmyplanet000_height 30 static char rmyplanet000_bits[] = { 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet001_width 30 #define rmyplanet001_height 30 static char rmyplanet001_bits[] = { 0x00, 0x18, 0x03, 0x07, 0x00, 0x00, 0x00, 0x05, 0xc0, 0x00, 0x60, 0x07, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet010_width 30 #define rmyplanet010_height 30 static char rmyplanet010_bits[] = { 0x1c, 0x18, 0x03, 0x00, 0x14, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x60, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet011_width 30 #define rmyplanet011_height 30 static char rmyplanet011_bits[] = { 0x1c, 0x18, 0x03, 0x07, 0x14, 0x00, 0x00, 0x05, 0xdc, 0x00, 0x60, 0x07, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet100_width 30 #define rmyplanet100_height 30 static char rmyplanet100_bits[] = { 0x00, 0xf8, 0x03, 0x00, 0x00, 0x07, 0x1c, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x20, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet101_width 30 #define rmyplanet101_height 30 static char rmyplanet101_bits[] = { 0x00, 0xf8, 0x03, 0x07, 0x00, 0x07, 0x1c, 0x05, 0xc0, 0x00, 0x60, 0x07, 0x20, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet110_width 30 #define rmyplanet110_height 30 static char rmyplanet110_bits[] = { 0x1c, 0xf8, 0x03, 0x00, 0x14, 0x07, 0x1c, 0x00, 0xdc, 0x00, 0x60, 0x00, 0x10, 0x00, 0x80, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyplanet111_width 30 #define rmyplanet111_height 30 static char rmyplanet111_bits[] = { 0x1c, 0xf8, 0x03, 0x07, 0x14, 0x07, 0x1c, 0x05, 0xdc, 0x00, 0x60, 0x07, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x01, 0x00, 0x00, 0x10, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x02, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x01, 0x20, 0x00, 0x80, 0x00, 0xc0, 0x00, 0x60, 0x00, 0x00, 0x07, 0x1c, 0x00, 0x00, 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}; #define rmyindmplanet_width 16 #define rmyindmplanet_height 16 static char rmyindmplanet_bits[] = { 0xa0, 0x02, 0x08, 0x08, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x08, 0xa0, 0x02, 0x00, 0x00}; #define rmymplanet011_width 16 #define rmymplanet011_height 16 static char rmymplanet011_bits[] = { 0xa0, 0x02, 0x08, 0x08, 0x40, 0x01, 0x42, 0x21, 0xc0, 0x01, 0x81, 0x4c, 0x80, 0x14, 0x81, 0x54, 0x80, 0x14, 0x81, 0x5c, 0xc0, 0x01, 0x42, 0x21, 0x40, 0x01, 0x08, 0x08, 0xa0, 0x02, 0x00, 0x00}; #define rmymplanet010_width 16 #define rmymplanet010_height 16 static char rmymplanet010_bits[] = { 0xa0, 0x02, 0x08, 0x08, 0x40, 0x01, 0x42, 0x21, 0xc0, 0x01, 0x81, 0x40, 0x80, 0x00, 0x81, 0x40, 0x80, 0x00, 0x81, 0x40, 0xc0, 0x01, 0x42, 0x21, 0x40, 0x01, 0x08, 0x08, 0xa0, 0x02, 0x00, 0x00}; #define rmymplanet001_width 16 #define rmymplanet001_height 16 static char rmymplanet001_bits[] = { 0xa0, 0x02, 0x08, 0x08, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x01, 0x4c, 0x00, 0x14, 0x01, 0x54, 0x00, 0x14, 0x01, 0x5c, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x08, 0xa0, 0x02, 0x00, 0x00}; netrek-client-cow-3.3.2/feature.c0000664000175000017500000001703013657750470015651 0ustar jamesjames#include "config.h" /* Feature.c * * March, 1994. Joe Rumsey, Tedd Hadley * * most of the functions needed to handle SP_FEATURE/CP_FEATURE packets. fill * in the features list below for your client, and add a call to * reportFeatures just before the RSA response is sent. handleFeature should * just call checkFeature, which will search the list and set the appropriate * variable. features unknown to the server are set to the desired value for * client features, and off for server/client features. * * feature packets look like: * */ #ifdef nodef struct feature_cpacket { char type; char feature_type; char arg1, arg2; int value; char name[80]; }; #endif /* type is CP_FEATURE, which is 60. feature_spacket is identical. */ #ifdef FEATURE_PACKETS #include "copyright.h" #include #include #include INC_NETINET_IN #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "defaults.h" #include "feature.h" #include "socket.h" /* not the actual packets: this holds a list of features to report for this * client. */ struct feature { char *name; int *var; /* holds allowed/enabled * * * status */ char feature_type; /* 'S' or 'C' for * * * server/client */ int value; /* desired status */ char *arg1, *arg2; /* where to copy args, if * * * non-null */ }; static int _dummy; void reportFeatures(void); struct feature features[] = { /* also sent seperately, put here for checking later. should be ok that it's * sent twice. */ {"FEATURE_PACKETS", &F_feature_packets, 'S', 1, 0, 0}, #ifdef nodef {"VIEW_BOX", &allowViewBox, 'C', 1, 0, 0}, #endif {"SHOW_ALL_TRACTORS", &F_show_all_tractors, 'S', 1, 0, 0}, #ifdef MOTION_MOUSE {"CONTINUOUS_MOUSE", &motion_mouse_enablable, 'C', 1, 0, 0}, {"CONTINUOUS_STEER", &motion_mouse_steering, 'C', 0, 0, 0}, #endif {"NEWMACRO", &UseNewMacro, 'C', 1, 0, 0}, {"SMARTMACRO", &UseSmartMacro, 'C', 1, 0, 0}, {"WHY_DEAD", &why_dead, 'S', 1, 0, 0}, {"RC_DISTRESS", &gen_distress, 'S', 1, 0, 0}, #ifdef MULTILINE_MACROS {"MULTIMACROS", &multiline_enabled, 'S', 1, 0, 0}, #endif {"SBHOURS", &SBhours, 'S', 1, 0, 0}, {"CLOAK_MAXWARP", &F_cloak_maxwarp, 'S', 1, 0, 0}, {"SELF_8FLAGS", &F_self_8flags, 'S', 1, 0, 0}, {"SELF_8FLAGS2", &F_self_8flags2, 'S', 0, 0, 0}, {"SHIP_CAP", &F_ship_cap, 'S', 1, 0, 0}, {"SP_GENERIC_32", &F_sp_generic_32, 'S', 1, &A_sp_generic_32, 0}, #ifdef WARP_DEAD {"DEAD_WARP", &F_dead_warp, 'S', 1, 0, 0}, #endif #ifdef BEEPLITE {"BEEPLITE", &_dummy, 'C', 1, &F_beeplite_flags, 0}, #endif {"AGRI_PIXMAP", &F_agri_pix, 'C', 1, 0, 0}, #ifdef RECORDGAME {"MANY_SELF", &F_many_self, 'S', 0, 0, 0}, #endif {"LAME_BASE_REFIT", &_dummy, 'S', 0, 0, 0}, {"UPS", &_dummy, 'S', 0, 0, 0}, {"FPS", &_dummy, 'S', 0, 0, 0}, {"SP_RANK", &F_sp_rank, 'S', 1, 0, 0}, {"SP_LTD", &F_sp_ltd, 'S', 1, 0, 0}, {"TIPS", &F_tips, 'S', 1, 0, 0}, {0, 0, 0, 0, 0, 0} }; void checkFeature(struct feature_cpacket *packet) { int i; int value = (int) ntohl(packet->value); char buf[100]; #ifdef DEBUG if (packet->type != SP_FEATURE) { printf("Packet type %d sent to checkFeature!\n", packet->type); return; } #endif sprintf(buf, "%s: %s(%d)", &packet->name[0], ((value == 1) ? "ON" : (value == 0) ? "OFF" : "UNKNOWN"), value); #ifdef TOOLS W_WriteText(toolsWin, 0, 0, textColor, buf, strlen(buf), W_RegularFont); #else printf("%s\n", buf); #endif for (i = 0; features[i].name != 0; i++) { if (strcmpi(packet->name, features[i].name) == 0) { /* if server returns unknown, set to off for server mods, desired * * * * value for client mods. Otherwise, set to value from server. */ *features[i].var = (value == -1 ? (features[i].feature_type == 'S' ? 0 : features[i].value) : value); if (features[i].arg1) *features[i].arg1 = packet->arg1; if (features[i].arg2) *features[i].arg2 = packet->arg2; break; } } if (strcmpi(packet->name, "FPS") == 0 && value != -1) { server_fps = client_ups = server_ups = value; return; } if (strcmpi(packet->name, "UPS") == 0 && value != -1) { client_ups = server_ups = value; return; } if (features[i].name == 0) { printf("Feature %s from server unknown to client!\n", packet->name); } /* special cases: */ if (strcmpi(packet->name, "FEATURE_PACKETS") == 0) reportFeatures(); /* features unknown ... turn off AGRI pixmaps just in case */ if (strcmpi(packet->name, "FEATURE_PACKETS") == 0) { if (value == -1) F_agri_pix = 0; } if ((strcmpi(packet->name, "RC_DISTRESS") == 0) && gen_distress) distmacro = dist_prefered; #ifdef BEEPLITE if ((strcmpi(packet->name, "BEEPLITE") == 0)) { switch (value) { case -1: /* Unknown, we can use all * * * * of the features! */ F_beeplite_flags = LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL | LITE_SELF | LITE_PLANETS | LITE_SOUNDS | LITE_COLOR | LITE_TTS; break; case 1: if (F_beeplite_flags == 0) { /* Server says we can have * * * * beeplite, but no * * * options??? must be * * * configured wrong. */ F_beeplite_flags = LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL | LITE_SELF | LITE_PLANETS | LITE_SOUNDS | LITE_COLOR | LITE_TTS; } strcpy(buf, " disabled:"); if (!(F_beeplite_flags & LITE_PLAYERS_MAP)) strcat(buf, " LITE_PLAYERS_MAP"); if (!(F_beeplite_flags & LITE_PLAYERS_LOCAL)) strcat(buf, " LITE_PLAYERS_LOCAL"); if (!(F_beeplite_flags & LITE_SELF)) strcat(buf, " LITE_SELF"); if (!(F_beeplite_flags & LITE_PLANETS)) strcat(buf, " LITE_PLANETS"); if (!(F_beeplite_flags & LITE_SOUNDS)) strcat(buf, " LITE_SOUNDS\n"); if (!(F_beeplite_flags & LITE_COLOR)) strcat(buf, " LITE_COLOR"); if (!(F_beeplite_flags & LITE_TTS)) strcat(buf, " LITE_TTS"); if (strcmp(buf, " disabled:")) { #ifdef TOOLS W_WriteText(toolsWin, 0, 0, textColor, buf, strlen(buf), W_RegularFont); #else printf("%s\n", buf); #endif } break; case 0: F_beeplite_flags = 0; break; default: break; } } #endif /* BEEPLITE */ } void sendFeature(char *name, char feature_type, int value, char arg1, char arg2) { struct feature_cpacket packet; bzero(&packet, sizeof(packet)); STRNCPY(packet.name, name, sizeof(packet.name)); packet.type = CP_FEATURE; packet.name[sizeof(packet.name) - 1] = 0; packet.feature_type = feature_type; packet.value = htonl(value); packet.arg1 = arg1; packet.arg2 = arg2; sendServerPacket((struct player_spacket *) &packet); } /* call this from handleRSAKey, before sending the response. */ void reportFeatures(void) { struct feature *f; int value; char arg1, arg2; for (f = features; f->name != 0; f++) { if (strcmpi(f->name, "FEATURE_PACKETS") != 0) { value = f->value; arg1 = (f->arg1 ? *f->arg1 : 0); arg2 = (f->arg2 ? *f->arg2 : 0); if (!strcmp(f->name, "SP_GENERIC_32")) { value = 1; arg1 = GENERIC_32_VERSION; } sendFeature(f->name, f->feature_type, value, arg1, arg2); } #ifdef DEBUG printf("(C->S) %s (%c): %d\n", f->name, f->feature_type, f->value); #endif } } void handleFeature(struct feature_cpacket *packet) { checkFeature(packet); } #endif /* FEATURE_PACKETS */ netrek-client-cow-3.3.2/dmessage.h0000664000175000017500000000020213657750470016004 0ustar jamesjames/* dmessage.c */ void dmessage(char *message, unsigned char flags, unsigned char from, unsigned char to); void sendVersion(void); netrek-client-cow-3.3.2/beeplite.c0000664000175000017500000001331713657750470016013 0ustar jamesjames#include "config.h" #ifdef BEEPLITE #include "copyright.h" #include #include INC_STDLIB #include #include #ifndef SERVER #include "Wlib.h" #endif #include "defs.h" #include "struct.h" #include "data.h" #include "map.h" #include "distress.h" #include "warning.h" static int makelite(struct distress * dist, char *pm); void rcdlite(struct distress *dist) /* the info */ { char message[100]; int len = 0; if ((dist == NULL) || /* (dist->sender == me->p_no) || */ (distlite[dist->distype] == NULL)) return; len = makedistress(dist, message, distlite[dist->distype]); if (len <= 0) return; makelite(dist, message); } void litedefaults(void) { if (distlite[take] == NULL) distlite[take] = "/c/l"; if (distlite[base_ogg] == NULL) distlite[base_ogg] = "/g/m"; if (distlite[pickup] == NULL) distlite[pickup] = "/p"; if (distlite[generic] == NULL) distlite[generic] = "%?%S=SB%{/c%}"; } static void liteplanet(struct planet *l) { emph_planet_seq_n[l->pl_no] = beep_lite_cycle_time_planet * server_ups / 5; l->pl_flags |= PLREDRAW; /* Leave redraw on until * * * done highlighting */ } static void liteplayer(struct player *j) { if (!j || (j->p_flags & PFCLOAK)) return; redrawPlayer[j->p_no] = 1; emph_player_seq_n[j->p_no] = beep_lite_cycle_time_player * server_ups / 5; } /* small permutation on makedistress. Searches for the highliting * * arguments, ignores everything else. */ static int makelite(struct distress * dist, char *pm) /* the info */ /* macro to parse, used for distress and macro */ { struct player *sender; struct player *j; struct planet *l; char *strcap(char *s); char c; sender = &players[dist->sender]; if (!(*pm)) { return 0; } /* first step is to substitute variables */ while (*pm) { if (*pm == '/') { pm++; if (!pm) continue; switch (c = *(pm++)) { case 'P': /* push player id into buf */ case 'G': /* push friendly player id * * * * into buf */ case 'H': /* push enemy target player * * * id into buf */ case 'p': /* push player id into buf */ case 'g': /* push friendly player id * * * * into buf */ case 'h': /* push enemy target player * * * id into buf */ switch (c) { case 'p': j = &players[dist->tclose_j]; break; case 'g': j = &players[dist->tclose_fr]; break; case 'h': j = &players[dist->tclose_en]; break; case 'P': j = &players[dist->close_j]; break; case 'G': j = &players[dist->close_fr]; break; default: j = &players[dist->close_en]; break; } liteflag = (F_beeplite_flags & (LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL)); liteplayer(j); break; case 'B': /* highlites planet nearest * * * sender */ case 'b': l = &planets[dist->close_pl]; if (F_beeplite_flags & LITE_PLANETS) liteplanet(l); break; case 'L': /* highlites planet nearest * * * pointer */ case 'l': l = &planets[dist->tclose_pl]; if (F_beeplite_flags & LITE_PLANETS) liteplanet(l); break; case 'U': /* highlites enemy nearest * * * * pointer */ case 'u': j = &players[dist->tclose_en]; liteflag = (F_beeplite_flags & (LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL)); liteplayer(j); break; case 'c': /* highlites sender */ case 'I': case 'i': liteflag = (F_beeplite_flags & (LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL)); liteplayer(sender); break; case 'M': /* highlites me */ case 'm': if (F_beeplite_flags & LITE_SELF) { liteflag = (LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL); liteplayer(me); } break; case '0': if (F_beeplite_flags & LITE_SOUNDS) { #ifdef SOUND if (sound_toggle) Play_Sound(MESSAGE_SOUND); else #endif W_Beep(); } break; #ifdef SOUND case '1': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE1_SOUND); break; case '2': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE2_SOUND); break; case '3': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE3_SOUND); break; case '4': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE4_SOUND); break; case '5': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE5_SOUND); break; case '6': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE6_SOUND); break; case '7': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE7_SOUND); break; case '8': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE8_SOUND); break; case '9': if (F_beeplite_flags & LITE_SOUNDS) Play_Sound(MESSAGE9_SOUND); break; #endif /* Text between: /| | will be displayed with TTS */ case '|': if (F_beeplite_flags & LITE_TTS) { for (tts_len = 0; (*pm != '|' && tts_len < tts_max_len); tts_len++) lastIn[tts_len] = *pm++; lastIn[tts_len] = '\0'; tts_width = W_TTSTextWidth(lastIn, tts_len); tts_timer = tts_time * server_ups / 5; } break; default: /* try to continue * bad macro character is skipped entirely, * * * * the message will be parsed without whatever argument has * * * occurred. - jn */ warning("Bad Macro character in distress!"); fprintf(stderr, "Unrecognizable special character in distress pass 1: %c\n", *(pm - 1)); break; } } else { pm++; } } return 1; } #endif /* BEEPLITE */ netrek-client-cow-3.3.2/CHANGES0000664000175000017500000010631413657750470015051 0ustar jamesjamesComments, suggestions and bug reports to cow@netrek.org Patches to cow@netrek.org 3.01 pl0 Jun. 22, 2002 - COW_SDL_MIXER_BRANCH Jun. 11, 2002 + add spike solution [tanner] + converted local.c to SDL_mixer + added cvs commit to mailing list - minor source packaging changes [cameron] - mouse wheel support [siegl] 3.00 pl3 Jan. 2, 2000 - Expiry date removed [siegl] - minor bugfixes [various authors] 3.00 pl2 Jan. 7, 2000 - New default portSwap for UDP_PORTSWAP feature [siegl] - System wide .xtrekrc file set to "/etc/netrekrc" [siegl] - Cambot recording replay [koconnor] - various Win32 fixes [siegl] - V,B core dump with rabit ears fix [siegl] - remove DEFINES (BRMH NEW_DASHBOARD_2 RABBIT_EARS) [siegl] - MAX_MACRO increased to 255 [siegl] - -B options for automatic bug sumition [siegl] - new sample netrekrc file [siegl] - WindowMaker docking support [siegl] - Win32 Sound support [siegl] 3.00 pl1 Mar. 27, 1999 - Added UDP queries to the metaserver. [cameron, villalpando] - Added Multiple metaserver support. [cameron, villalpando] - Metaserver KEYGOD alias: clientkeys@clientkeys.netrek.org [villalpando] - New xtrekrc variables: metaverbose, metaUDPcache, metaType [cameron, villalpando] - modified behavior of metaserver to do multiple metaservers [cameron] - changed metaserver menu. Added age of data and refresh button [cameron] - new option, -M for TCP metaserver [cameron] - changed option -m for UDP metaserver [cameron] - Port to Cygnus Win32 [siegl] - Autoconfig detects Cygnus Win32 [siegl] - Win32 fixes [Gosselin] - Fix Pixmap transparancy [siegl] - Added hockey rink background XPM on galactic [siegl] 3.00 pl0 Feb. 28, 1998 - full color client [kellen] - metaserver defaults to: metaserver.netrek.org [sven] - new cow mailing list alias: cow@netrek.org [sven] - 32 views color pixmaps [Shawn] - recording feature [koconnor] - KDE sound support (.wav files) [siegl] - Tab key fixes [koconnor] - OpenVMS fixes [cameron] - Auto upgrade via netscape [siegl] - whydead message fixes [siegl] - GMP 2 key generator fix [siegl] 2.02 pl2 May 31, 1997 - final stable NO pixmap release - NO expiry date - NO background images, kathy, stars, ... - NO colored planets - BEEPLITE is off (exept TTS and sound) unless explicitly turned on by server 2.02 pl1 Feb. 28, 1997 - GMP and XPM autoconfig fixes [siegl] 2.02 pl0 Feb. 15, 1997 - scrolling message windows stolen from BRMH [siegl] - colored planets on galactic map [kellen] - high color fixes [kellen] - phaser stats and fixed PhaserMsg [greynite] - replace all exits with clean returns [siegl] - netscape plugin version included [siegl] - GMP 2.0 support 2.01 - version left out due to an Version conflict with WinCOW 2.00 pl0 Aug. 18, 1996 - LABs newest dashboard [lab] - cleanup dashboard .xtrekrc defaults -> newDashboard is int [siegl] - COW api - shared libs, java and Netscape plugin support [siegl] - support for WIN95 and NT [jshekter,greynite] - improved sound system [jshekter,siegl] - split up cowmain.c from main.c [siegl] - highlight friendly phasers [ellisj] - censor (obscenities filter) [ellisj] - Wide enemy phaser fix [koconnor] - Kathy replaced by stars [Kellen, majority vote] - Colormap Option [Kellen] - fix array overflow in metaserver Win [siegl] 1.03 pl1 Aug. 25, 1995 - map/unmap the motd window button [dearing] - RCD docs update [ahabig] - FTP server switched from infant2 to bigbang [ahabig] - SGI X crash bug fixed [siegl] - security enhancements [siegl] 1.03 pl0 Apr. 27, 1995 - configurable destination macro keys [siegl] - added lots of tricks to XTREKRC.example [siegl] - playerlist option "sortMyTeamFirst" [Soutter] - phaser shrink options [Soutter] - new files for map and local [Soutter] - Lot's of Bug fixes [Soutter] - invalid robots race char fix [siegl] - upgraded to autoconfig 2 [siegl] - add external rint() replacement function [siegl] 1.02 pl2 Feb. 20, 1995 - One year expire time [siegl] - put back sortPlayers option for unsorted playerlist [Soutter] - send full update request when joining [siegl] - Fixed some bugs with galactic map updates [Soutter] - Fixed some bugs with color map allocations [siegl] - Added sample xtrekrc file to the docs [siegl] - audio.c: replaced SIGCLD with SIGCHLD [ahabig] - config.h.in: include stdio.h for suns [gosselin] 1.02 pl1 Feb. 9, 1995 - phaserShrink option to remove the bottom of your phaser [Soutter] - change TTS Y-location [Joseph] - Ignore Caps_Lock on key events [sheldon (taken from SWINE)] - Race Colors [Kellen] - removed message handler for Dashboard [Siegl] - fixed multi-line macro bug [Soutter] - metserver window rewritten [Soutter,Kellen] - playerlist window rewritten [Soutter] - The player list is now always sorted and so the "sortPlist" option has been removed [Soutter] - The key "/" now changes the playerlist style rather than selecting between sorted and unsorted player lists [Soutter] - Reimplemented the option "showPlanetOwner". [Soutter] - New layout for the option menus [Soutter]. - Removed the options "mapmode" and "showShields". Effectively, these options are now treated as always being true [Soutter] - Added range checking on the options "showlocal", "showgalactic", and "showLock" [Soutter] - Redraw the galactic map when you change teams [Soutter]. - All handlers (both for X events and for packets) now return a void rather than an integers. This fixes some compiler errors [Soutter]. 1.02 pl0 Nov. 29, 1994 - SP-2 New improved Short packages [hw] - New 10x faster playerlist [siegl] - tab stops and other RCD additions [siegl] - RCM (receiver configurable server messages) [siegl] - dashboard color fixes [soutter] - merged server and client's autoconfig stuff [siegl] - boolean defaults comments bug fix [siegl] - FreeBSD fixes [ahabig] - DEC Alpha defwin fixes [essl] - minor RCD fixes [hadley] - i386/UnixWare port fixes [bsp] 1.01 pl2 June 22, 1994 - Changed default RCD save planet [ahabig] - Firewall patches [fadden] - New Kathy image [ppregler] - AIX nint fixes [ahabig] - feature packets for non rsa [siegl] - warp dead off (needs server side changes for SP) [siegl] - TTS for B&W screens [siegl] - ship dependend key & buttonmaps [siegl] - forcemono fixes [gosselin] - 6 Month expire time [siegl] - ship stats packet [ahabig] 1.01 pl1 Apr 25, 1994 - Added Hadleys TTS to BEEPLITE [siegl] - bug fixes for MULTILINE and feature packets [siegl] - selective features for BEEPLITE [jrumsey,siegl] - Add server features CLOAK_MAXWARP, SELF_8FLAGS, SELF_8FLAGS2 [siegl] - included nint() for floats to int casts [siegl] - cleanups and random() fixes [flan] - features info will go to the toolsw [siegl] - WARP_DEAD speed 14 for dead dedection [nbt] - VAX VMS port [cameron] 1.01 pl0 Apr 8, 1994 - SMALL_SCREEN version for 800x600 screens [siegl] - various autoconfig changes [siegl] - ship dependend .xtrekrc file [siegl] - 64bit (DEC alpha) port [essl] - protoizing the client for ANSI C [siegl] - replace cflags.h with cflags.c [siegl] - adding new key generator [sls, nbt] - switching from BRMH to BRM3 short package code [siegl] - BEEPLITE players and planets highlighting [nelson] - Multiline macros [nelson] - Request features with new feature package [hadley,jrumsey] - Sound support for BEEPLITE and plasmas [siegl] - include VSHIELD_BITMAPS with warning shields [siegl] 1.00 pl2 Feb 14, 1994 - add status infos in handleSelfShip with SP [hw] - SP message bug fixes [jrumsey] - refit core dump fix [amb] - added gmp as configurable package [flan] - Makefile uses SECKEYFILE and KEYFILE [flan] - automatically turns RSA off if rsa_clientutil.c is missing [siegl] - socket.c, trekhopd fixes [fadden] - map message and players window per default [ahabig] 1.00 pl1 Feb 7, 1994 - add initializations to all defaults [siegl] - cleaned up refit code [siegl] - short package window fixes [siegl] - send short package request only once [siegl] - fixed networkstats (lagmeter) [siegl] - fixed maxstats in tstatw [siegl] 1.00 pl0 Jan 17, 1994 - fix NULL servername with -m flag [siegl] - add all warnings to the logfile [siegl] - always use ANSI C string functions [siegl] 0.50 pl6 Jan 7, 1994 - add control key support to buttonmap, singleMacro, all macro and RCD definitions. [siegl] - RCD keys defaults to control key [siegl] - macro window show actual key definition for RCD [siegl] - change of .xtrekrc file via macros [siegl] - Wlib.h: changed key in event struct to unsigned char [siegl] - increased SB stats (needs server support) [ahabig] - check defaults after metaserver call [siegl] 0.50 pl5 Dec 22, 1993 - added Hockey Lines on tactical map [kantner] - don't use planets defaults sent by the server [siegl] - changed brmbugs to brmbugs@crown.EECS.Berkeley.EDU [siegl] 0.50 pl4 Dec 9, 1993 - configurable metaserver [siegl] - include all window and string defaults in sample .xtrekrc [buchholz] - fixed playerlist hoses defaults bug [siegl] - autoconfig always uses gmp if it exists [siegl] - config.h /dev/null replaced by null file [siegl] - sound stuff now portable across most machines [siegl] 0.50 pl3 Nov 18, 1993 - defwin: fixed name of planet bitmap [siegl] - defwin: fixed tryUdp [siegl] - fixed run_clock problem [siegl] - sun3 patches [gosselin] - fixed ghoststart [nelson] 0.50 pl2 Nov 8, 1993 - fixed det bug [powell] - find_font returns NULL on failure [hadley] 0.50 pl1 Nov 4, 1993 - fixed sound interupt problem [siegl] - added ROTATERACE define [siegl] - fixed invisible message destination [powell] 0.50 pl0 Nov 3, 1993 - changed all BRM related names to COW [siegl] - move system dependencies to config.h header file [siegl] - cleaning up system dependend includes [siegl] - new automatic installation procedure with GNU autoconfig [siegl] - replace geometry parser with X built in for negative coordinates [hadley] - replace strdup by builtin C function [siegl] - various RCD fixes [nelson] - added %k (number of kills) to distress calls [nelson] - added missing distress ctrl keys [nelson] - trekhopd support in reserved.c [fadden] - fixed problem with high wtmp [jmn] - added shell escape tool feature [siegl] - minor run_clock and SABER fixes [hadley] - removed double check of defaults [siegl] - code is formated with gnu indent [siegl] - show RCDS in macrowin [trown] - replace strncpy with STRNCPY (memcpy) for better efficiency [siegl] - generate sample .xtrekrc [buchholz] - removed implizit dependencies of -DRSA [siegl] - new improved distress.c [hoswell] - initial sound support [siegl] - increased x11window.c HASHSIZE to 101 [siegl] - changed input.c to do some direct io on the x socket [powell] - used Hadley's optimized socket.c [powell] - hacked short.c to work with Hadley's optimized socket.c [powell] - added documentation window and xtrekrc file window [powell] - changed default window creation for xtrekrc, documentation window [powell] and xtrekrc file window [powell] - hopefuly finally fixed personalized cursors [powell] - got rid of slew of sprintf's [powell] - added custom string routines for field construction [powell] - applied the above to dashboard.c and playerlist.c [powell] - changed the clock redraw so it only redraws every second [powell] - added rabbit ear bitmaps to client [powell] - changed calls of readFromServer () to new Hadley form [powell] - modified W_ResizeWindow routine to work properly [powell] - added class spezification to mkkey [siegl] ------------------------ old BRM changes --------------------------------- 3.00 pl2 Oct 13, 1993 - minor RCD cleanup[nelson] - added ^ l ^ m ^ p RCD[nelson] - "ogging" RCD fix[choker, nelson] - "carrying" % y->y[nelson] 3.00 pl1 Oct 13, 1993 - strncmpi fix[choker, nelson] - reserved.c gateway[fadden] - MCOPY reserved.c[nelson] 3.00 Oct 8, 1993 - galaxy rotate/ short packet fixes [gosselin] - stats to end of motd [rick] - forcemono ignore [rick] - send RCD within macro mode reinstalled, ignores keymap [nelson] - double header removed [jmn, nelson] - control-t same as control-T [nelson] - doc additions [nick trown, hoswell, nelson] 3.00bp2 Oct 6, 1993 - added further RCD DOCs [nelson] - control-U full message erase fix [powell] - doc additions [jmn] - further control key mods [powell] 3.00bp1 Oct 5, 1993 - fixed "I'm at calvin. the cursor is invisible." [powell] - doc additions [nelson] 3.00bp0 Oct 5, 1993 - fixed ^d problem [powell] - fixed warp 10 problem [powell] - added missing features into the xtrekrc window [powell] - control keymap "ckeymap" w/ docs [powell] - socket.c keymap safety net [nelson] - new RCD defaults for whining twinks who didn't send give us input before (ability to configure prefix maintained!) [jmn] - old RCD code removed, MUST use control keymap [nelson] - added %o and %O macro arguments [nelson] - galaxy rotation fixed [gosselin] 2.99pl3 Sep 24, 1993 - changed whole MDISTR send format [jmn] note that .features better be set to pl3 and not lower as lower ones will/may crash the server - cleaned up default RCD formats (based on sent-in suggestions) [jmn] - cleaned up Makefile defines. system specific in .mk file [jmn] - updated BRM.DOC for new dist labels [jmn] - distress.c now has a #define SERVER to make it easier to patch [jmn] - send macro to cloaker [hadley] - more sgi fixes [siegl] - enhanced mouse polishing, default off [powell] - enhanced mouse configurability [powell, nelson] - MACRO based on distress.c now [nelson] - MACRO/distress fixes [nelson] - ghost start, recovery after client dies [nelson] - planetary distresses not on team window [jmn,nelson] - major code cleanups [gold] - BRM.DOC rewrites [gold] - VARY_HULL [powell] - Hadley's xtrekrc window!! [stolden by powell] - TNG bitmaps [powell] - continous mouse thresholds [powell] - configurable playerlist [gosselin] - CONTROL KEYS! [powell, nelson] 2.99pl2 Sep 17, 1993 - MAJOR receiver configurable distress fixes and enhancements [jmn, jn] - sgi fixes [siegl] - reserved.c MCOPY [Thaler, jn] - enhanced mouse [powell] - seg fault and bus recovery [powell] - new new dashboard [powell] 2.99pl1 mainly jeff nelson and jmn - big hacks to support receiver configurable macro type distresses [jn,jmn] - removed show tractor code for observers [jmn] - playerlist.c, kills moved before logins, 0 showed as 0. [lab] - short.c, short packet fixes [hw] 2.99pl0 - Aug 93, A little closer to a "stable" version. [lab] -playerlist.c, .xtrekrc newPlist: on/off, new format for list [lab] -newwin.c, credits moved to BRM.DOC. [lab] -inform.c, 'i' shows login and adress too. [lab] -redraw.c, .xtrekrc showIND: on/off, mark indep planets extra [lab] -playerlist.c, Show total ratings instead of offense [lab] -input.c, Removed obsolete macros, slurping etc. Use smartmacros [lab] -redraw.c, .xtrekrc varyShields: on/off Shield status color/bitmap [lab] -redraw.c, .xtrekrc cloakChars: xy Use 'xy' instead of '??' [lab] -dmessage.c, New features handling [lab] Current features: WHY_DEAD, shows death reason. NO_NEWMACRO, disables Jeffs macro system. NO_SMARTMACRO, disables the SMARTer macros. NO_SMARTDISTRESS, no customized distresses. With this the server god must actually do something to prevent the use of nifty things. -redraw.c, .xtrekrc enemyPhasers: width Set enemy phaser width [lab] -data.c, UseNewDistress by default off (poll showed this :) [lab] -Makefile, new dir config [trown] -small macro ext (%b, %B), no time limit on macros [nelson] pl19 -New option in menu and .xtrekrc, newDistress: on/off [lab] -Ifdefs for ptx added [siegl] -NEWMACRO extension, uses mouse position etc. [nelson] -main.c, logfile fopen mode [nelson] -socket.c, more whydead msgs [trown] -socket.c, add_whydead [trown/lab] -socket.c, NEWMACRO+SMARTMACRO turned on when using old reserved.c [lab] -socket.c, new file short.c, S_P code in own file! [hw] pl18 -Compiling, new file describing how [nelson] -Makefile, added distbin [nelson] -getname.c, removed check for autolog==-1 [rmk] -defaults.c, cleaned up a few booleanDefaults [nelson] -helpwin.c, added &, moved everything up one line [lab] -x11window.c, changed default bigfont [lab] -findslot.c, default is now to show motd while on queue, in .xtrekrc add showMotd: off if you don't like it [lab] -smessage.c, macro fix [hoswell/nelson] pl17 -newwin.c - fix quittime re-read within loop - nelson -more X11 patches- jeffw - PPosition and whatnot. -getname.c - nelson- fix CPU hogging -dashboard.c - fix kills now being shown - nelson -fix duplicate Conquer file if message logging on -add .xtrekrc option: reportKills: on/off (do you want kills in review window?) -quick quit from jeff nelson - don't need to hit 'Q' twice - use 'q' instead -heiko - final final final final torp detting fix? -minor bug fix for kill tracking reports with S_P - jmn pl16 - x11window.c - sam shen- fixes paste buffer - nick trown - big diff add WHYDEAD to features and improve client ID - warning.c - Jeff Nelson- time append fix of strcat with S_P - heiko- torp det bug fix, and some reportKills bug fix - HW I'd be lying if I said I ever saw the reportKills problem - jmn :-) - sample .feature file BerkRick Moo entries: BerkRick Moo: NEWMACRO SMARTMACRO BerkRick Moo*confirm:2.00.16: WHY_DEAD version.pl pl15 - playerlist displays dead players - nelson (playerlist.c) - removed old unused makefiles from manifest - jeffw patches to make it more x11 friendly - and makefile cleanup (again- sigh) - sls@aero.org: 1. Add W_{Get,Set}Window{Button,KeyDown,KeyUp,Expose}Handler functions to Wlib.h 2. Implement those functions in x11window.c 3. Modify input.c (and some others) to use those functions. This avoids a lot of ugly code in input() (it's possibly it's faster as well, dunno.) 4. Get rid of the polling stuff in getname 5. Eliminate an unneccessary call to time() in run_clock. - SMARTMACRO %% fix - nelson@soliton.physics.arizona.edu - galactic updates when you're on re-entry screen - jmn - hello screen tries to credit all big contributors (I bet I missed some) - jmn - warning.c: nelson@soliton.physics.arizona.edu Here is a quick warning.c patch which does two things, 1) fixes a bug in the size of the phaser message (+10 -> +9) 2) if logmessages is active, dumps phaser warnings - x11window.c: jeffw@cs.tamu.edu This will cause the window manager to place any top level window anywhere it wants, but is overridden if the geometry is specified in the defaults file. - x11window.c: Kurt.Siegl@risc.uni-linz.ac.at I had some time to fix the 4 plane bug again. But there are still plenty of other bugs which I didn't correct yet. pl14 - updated to june 12 mkkey.c - improved searching for .trekgwrc - fadden - NEWMACRO stuff fix from nelson - removed berk.main.c - due to extreme whining added in random() function (same one as in INL) - jmn - udp default on, showPlanetOwner default off, showlocal default 1 pl13 - removed back door login stuff - shields in new dashboard now are consistent with damage (ie big is bad) - jeff (Miles Teg) fixed minor shield goto problem - jeff NEWMACRO stuff - lab .features file configuration type patches, touched up - jmn - jeff (galactus) fixes window resize problem in x11window.c pl12 - heiko/hadley short packets torp fix - makefile major cleanup - jeffw - maybe now we can have only one makefile for all architectures? - distress calls right justified (and properly truncated to avoid errors)- jmn - display shields when cloaked - lehors - solaris patches - jeffw - autologin added - Robert Kenney 0) Autologin is only enabled if a default password is given, either on the command line via '-A', or with a "password:" in the .rc. 1) If the playername has never been used, the autologin procedure will create it with the given password. 2) If the password fails for the given player name, then an error message is displayed, and the user is dropped back into the manual login mode, and prompted for a correct playername/ password. 3) If everything matches, the first thing you should see is the team selection phase. - minor hp bug fixed - trown - dashboard now does colour - nick pl11 - dashboard.c - added display of tmpmax in newdb - lab - changed over to sam shen's new mkkey.c for key management to compile this baby you will now need rsa_clientutil.c ... at this point how to get that file is uncertain ( I suppose you could ask sls@aero.org for it but I'm not if he wants that or not ) pl10 - trown patches for hp - added 'request medium update' (short_packets related) key - adds clock and display of tmpmax in newdb - lab - valstr[20] in dashboard.c - heiko fixes packet logging - fadden trekhopd fix - message logging missing \n fix - pigcall moved to own routine - finally fixed .xtrekrc overriding command line -R or -o - unnecessary metaserver call fixed pl9 - intrupt double playerlist call removed - eric mehlhaff - patch to log_packets - hw - sheesh ... somewhere main.c lost resetdefaults call... - option showPlanetOwner: on/off to display planet ownership pl8 - slurp fixed - lab - input.c remove borg code (don't panic... it wasn't used anywhere) - lab - keepInfo changed to number of updates instead of seconds - lab - ; now locks onto planets or base (not players) - lab - defaults were being read all over the place... attempted to put them into some kind of order (all in resetdefaults in defaults.c) - jmn - macrowin didn't list last macro - added trekhopd patches - gosselin@ll.mit.edu and fadden - added mondo new dashboard design (newDashboard: on/off) - lab pl7 - keepInfo now uses >= time so you can do 1 sec duration - nick trown minor parsemeta patches pl6 - added metaserver support - nick trown - added separate lock on planet key - lab - added variable time info windows stay displayed (keepInfo in .xtrekrc)- lab pl5- - added t/p NBR keys - john irwin - added check for legitimate fonts - john irwin - fixed 24 bit display thingie - steve sheldon pl4 - heiko - fixed incorrect doosh count reporting pl3 - nick trown - make patches is more robust now (doesn't assume ../$(PATCHDIR) - added show defined macro option 'X?' 2.00pl2 - added automatic generation of properly named patch files, dist targets now to make diff files just do 'make PATCHDIR=client.old patches' - fixed pigcall to make it all on one line - added EXPIRE define - added manifest file - nick attempts to fix FPE error again - tryShort in prev versions would make client try every time you died 2.00pl1 - FPE error fix attempt to redraw.c - nick trown BRM version 2 - jmn - added SHORT_PACKETS (thanks to Heiko)!!!!!!!!!!!!!!!!! - fixed up size of outmessage (hack) so it didn't make suns puke- why decstations were tolerant of this is beyond me - added .xtrekrc options: tryShort: on/off - useRSA: on/off (didn't work earlier) - RSA and short packets on by default. - hadley patch to netstat to fix floating point exception error pl8- - added packet logging stuff back in (Eric used to have this in client) - cleaned up Usage summary - nick trown patches to bplanets - getcourse fix applied to round off properly - pl1 was wrong and went away somewhere as well pl6- - applied fix to macro re-read inspired by Tim Nali - det requests get sent out at most once per 100msec (only applies to det requests) - anybody know what happened to AUTOKEY code? it seemed to be trying to do the same sort of thing... pl5- see README.CMU for more - patched to support observers - MDISTR flagging confuses servers.. (messages to TEAM with MDISTR don't get transmitted).. I'll wait till heiko finishes his SHORT message protocol for this - messages marked with MCONQ get put on stdout in addition to message window pl3- hadley,John Sin, jmn - added defines _IBMR2 for IBM RS6000 AIX3.2 support - fixed ping calculations overflow problem - boolean was a dumb variable name- changed wherever dec cc used to barf on it - handlePlasmaxxx CORRUPTED_PACKETS ntohs problem fixed pl2 April 23 93 - rick, sam , jmn - added ck_players code to client - rick - added mega paranoid rsa-client.c generator thanks to sam shen this means berk+ricksmoo is most secure client out there right now - moved xtrePort related code in main.c to top of main.c this fixes ck_players code if you give no port - ROMVLUS (gross- jmn) CA bitmap apparantly added (default is OFF)- rick either use options or use .xtrekrc line: ROMVLVS: on/off - the ROMVLVS bitmaps are buggy right now (when going up they don't draw at all- jmn)- was an optimizer bug of mine pl1 April 20 93 - jmn - compiled with new berk+ricksmoo dec key (nick - our key god has this one) - added Key_Version to version.h - fixed makefile library ordering for RSA - didn't work previously - leonard's fix to getcourse in input.c applied - cleaned up RSA related dependencies in makefile 1.00pl0 Apr 19 93 - jmn - added observer support (your ship isn't displayed if you are on another one) - merged nick trown's variable distress call code (-DNBTDIST, -DNBTDISTVAR) and macro code (-DNBT) - pigcall changed to something appropriate - added -v flag to get version info - cleaned up makefile - added version, patchlevel and cflags files macros: macro.x.X: #x is any ascii character; it is the "name" of the macro (the key you press #in macro mode to send the associated macro) #X can be A,T,F,R,K,O where A=all, T=team, F=fed, R=rom, K=kli, O=ori #(determines the message board to which the text body of the macro is sent) Example: macro.b.T: BOMB!!!! #Variable distresses (only available if -DNBTDISTVAR) #I'm not sure letting people play with these is a good idea.... #variable distress calls- ala nick trown # custom distress calls. d. is for ships. d.sb. is for SBs. # the different levels for changes in the distress calls. # first number is low value. Second is high value. In between is mid. # set up strings for each part of the distress call. # a '_' is a "no show" d.shld.lvl: 10 90 d.shld.low: SHLDS OUT! d.shld.high: _ d.shld.mid: %d%% shlds d.dam.lvl: 10 90 d.dam.low: _ d.dam.high: %d%% DAM! d.dam.mid: %d%% dam d.arms.lvl: 0 50 d.arms.low: _ d.arms.high: _ d.arms.mid: %d Armies d.fuel.lvl: 10 90 d.fuel.low: FUEL OUT! d.fuel.high: _ d.fuel.mid: %d%%fuel # starbase stuff.... Much more interesting than ship distress I reckon d.sb.dam.lvl: 10 66 d.sb.dam.low: _ d.sb.dam.mid: %d%% dam d.sb.dam.high: WRP1 %d%%dam etc. -------------------- Recent updates to the "moo" client. (sort of a tribute to harvard Admiral Moooooooo!) (aka ryche) future changes i'm working on: having the outgoing message you are composing to redraw. Configurable bitmaps for your cursors and your women, if you happen to be sick enough not to like Kathy and Steph. --> RSA soon to be added by bronco gods. i'm open to suggestions... Changes to 'original' Mehlhaff client as of Apr 17, 1993: BRAND NEW FEATURES!!-- o enemy phasers are now dotted lines so people on color machines have less advantage over us b&w users. o you can turn the babes off if you want. .netrekrc resource: babes: on/off o In color, you can have your shield be color of your warning status, like your slot number. resource: warnshields: on/off o lagmeter now working. \ to see the window and . to see the netstat window resources: netstats: on netstatfreq: 5 (how many updates to the lagmeter per second) o silly info-borg planet bitmaps are now optional. resource: newPlanetBitmaps: on/off o client now responds to pigcall with "ricksmoo ver. 1.08" will only respond to individual messages. not 5 spaces to ALL. o added hadley's ping stuff. the "," key brings the window up. o Windows can now be resized!! o zorg type XSendEvents will not be accepted by moo. o moo has no default server compiled in. you must use -h or the .netrekrc resource o New Sexist Features: Stephanie Seymour now welcomes you to MOO when you enter your name. Kathy Ireland informs you if you get ghostbusted. o the 'you were killed by' messages now redraw. sometimes they change the names when they do... not sure why. o Phaser hits can now be logged in different places. resource-- showPhaser: 2 0 = don't show 1 = show on kill window 2 = show on phaser window 3 = show on total review window only the phaser window is controlled just like the other review windows. e.g.: review_phaser.mapped: on review_phaser.parent: netrek review_phaser.geometry: 81x2+0+555 o Changed the 'you were killed by' messages to be more degrading. (You were SMACKed by a plasma from R3) o client now tells you what server you have connected to in the name entry screen, also in the wait queue o added kill messages to the message logging feature. o you can change the defaults file you want to read in by sending the name of the file to 'M' (you->MOO) currently, you have to put the full path to the file in but I'll see about ~ completion... example: F0->MOO /afs/andrew.cmu.edu/cm5m/.netrekrc then hit & to re read the defaults. o defaults file can now be re-read in. using the & key. this way you can change defaults without quitting out. Currently the only changes that will take effect are the message macros and the keymap. o Configurable message macros to the all board. control-jkliop send to ALL board messages from your .xtrekrc resource-- message1: your control-j message message2: your control-k message message3: your control-l message message4: your control-i message message5: your control-o message message6: your control-p message o Made the regular info window smaller. the shift-i info window is bigger. It contains the deleted info from the regular one. o Made the time-out for entering your name 199 seconds. Used to be 99. o Client now calls you by your real rank, not just "Captain!" o added message logging on/off by default file. resource-- logging: on o Added time stamping to logged messages. o Added message logging. Will log TEAM and ALL board messages, either to standard out (your xterm, whatever) or, to a file. usage: moo -l /path/to/messagelog OR in .xtrekrc- logfile: file the message logging is toggled with the ':' key. o Player list sorting is now toggleable with the '/' key, which you can remap like any normal key. o show shields/don't show shields removed from shift-O window. if this bothers you, see a pshychiatrist o show stats/don't show stats removed from shift-O window. if this bothers you, use shift-S. that's what it's for. o Removed 'M' key. If this bothers you, see a doctor. ('M' key used to turn off the galactic map) o Show resources on galactic map by default. o Update galactic map frequently by default. o Visible tractor/pressors turn off when tractee cloaks. o Show My Speed is no longer an option. o bug in x11window.c fixed. o beeps twice when you make the queue. o Small clock is displayed on the far right of tstat window. o Distress calls show armies carried as last field. (easier to read) o SB distress call says "HELP!!" (to attract more attention) o New (better?) cursor for tactical & galactic. o Option to not continue the visible tractors. (a la Bert's client) Can write TEAM and ALL messages to a file when you hit ':' resource-- logfile: /tmp/messagelog the logfile can also be given on the command line. Can show nothing, resources, or owner on galactic by default. resource-- showgalactic: 1 2 = nothing 1 = resources 0 = ownership Can show nothing, resources, or owner on local map by default. resource-- showlocal: 2 2 = nothing 1 = resources 0 = ownership Can turn off planet names by default. resource-- showplanetnames: off Can sort player list by team. code fixed by Greg. (gc2n@andrew.cmu.edu) resource-- sortPlayerlist: on Can show lock on galactic, local, galactic & local, or none. resource-- showLock: 3 0 = none 1 = galactic 2 = local 3 = both Can be set to not continue the visible tractors. resource-- continuetractor: on on = continue off = turns off after 2 updates. ---- OLD README, from Mehlhaff client --- New key commands: > increase speed by 1 < decrease speed by 1 } turn on cloaking device. { turn off cloaking device. F send a report of armies carried. This sends a message to your team saying how many armies you are carrying. Many players used to use distress signals to quickly convey the same information, lessening the impact of the distress signal. Distress signals should be for emergencies, not just common usage. Changed distress signals: The distress signal of ships tells your team if you are low on fuel. Many ships are just as doomed when out of fuel as they are when they are damaged. Alternately, if you are flying a starbase, the distress signal tells instead how your weapon temperature is doing, because starbases overheat far more often than they run out of fuel. Also, after the percentage weapon temperature, it will put a 'W' if your weapons are currently overheated. Help Window: Basically, this was done to show what keys were actually mapped to what functions. Every key function has a line in the help window. Her'es a sample line: s gb Toggle shields ||\\_ The 'b' key has been mapped to toggle shields || \_ The 'g' key has also been mapped toggle to the shields |\____This space is always there, as a separator. \_____This is the default key for this function, and the hook that you use when defining things to this function. I.e. to set the 'g' and 'b' mappings mentioned here, you'd have to put 'gsbs' in your .xtrekrc or your keymap options. NOTE: This character will appear here, even if it is mapped to something else. Featues from the Calvin_bwo client, by Tedd Hadley: These features had been available in the hadley client for quite some time. If they bother you, you should bother him. Lock-on Icon: A little triangle is put above the icon of planet that you are locked onto. If you are locked onto a ship, this icon goes on the bottom. Message-Warp: The non-warp version. Hit the 'm' key and start typing. Your cursor changes to the 'text' cursor, and all keystrokes go to the message window. Sending the mesage or the ESC key ends this. Note, the mouse pointer is not moved, and in fact, you could even still shoot and/or steer with mouse events while in 'message' state. Changed cursors: The cursor changes in different windows. Of specific importance is the tactical cursor and how it changes when non-warp message-warp. Is activated. New xtrekrc features: A sample xtrekrc should come with the client, but here are some of the new xtrekrc options: buttonmap: map the mouse buttons to something else. i.e. the default mapping is: 1t2p3k server: default server that is called when no -h argument is specified. The compiled in default server is bronco.ece.cmu.edu port: default port that gets called. The compiled default is 2592 showtractorpressor: toggle showing tractor/pressor beams UDp control tryUdp: (on/off) Automaticaly use UDP if on udpDebug: udpClientSend: udpClientRecv: udpSequenceChk: extraAlertBorder: Draws border in internal netrek windows, as well as external ones (which get ignored in X11 with window-managers ) forcemono: if on, the client windows are set to be monochrome netrek-client-cow-3.3.2/findslot.c0000664000175000017500000001543513657750470016047 0ustar jamesjames/* findslot.c * * Kevin Smith 03/23/88 */ #include "config.h" #include "copyright2.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "cowmain.h" #include "defaults.h" #include "findslot.h" #include "newwin.h" #include "socket.h" /* window hierarchy diagram w wait queue window \_ quit button \_ count button (not reactive) \_ motd button w_motd message of the day window */ /* wait queue window constants, in pixels */ #define WQ_W 405 /* window width */ #define WQ_H 100 /* window height */ #define WQ_HEAD 20 /* heading height */ #define BM 10 /* button margin */ /* calculate an X coordinate for centering given text */ static int xc(char *s) { return WQ_W / 6 - BM - strlen(s) * W_Textwidth / 2; } /* draw or redraw the heading in the wait queue window */ static void draw_heading(W_Window w) { char buf[60]; sprintf(buf, "You are on the queue at %s, please wait.", serverName); W_WriteText(w, 10, 10, textColor, buf, strlen(buf), W_RegularFont); } /* draw or redraw the quit button */ static void draw_b_quit(W_Window w) { char *s = "Quit"; W_WriteText(w, xc(s), 25, textColor, s, strlen(s), W_RegularFont); } /* draw or redraw the count button */ static void draw_b_count(W_Window ww, W_Window cw, int count) { char *s1 = "queue"; char *s2 = "position"; char buf[80]; W_WriteText(cw, xc(s1), 5, textColor, s1, strlen(s1), W_RegularFont); W_WriteText(cw, xc(s2), 15, textColor, s2, strlen(s2), W_RegularFont); sprintf(buf, " %d ", count); if (count == -1) strcpy(buf, " ? "); W_WriteText(cw, xc(buf), 35, textColor, buf, strlen(buf), W_RegularFont); /* update the window title bar for the window manager to display */ sprintf(buf, "Q%d @ %s", count, serverName); W_SetWindowName(ww, buf); } /* draw or redraw the motd button */ static void draw_b_motd(W_Window w) { char *s1 = "show server"; char *s2 = "welcome message"; W_WriteText(w, xc(s1), 20, textColor, s1, strlen(s1), W_RegularFont); W_WriteText(w, xc(s2), 30, textColor, s2, strlen(s2), W_RegularFont); } /* find a server slot, returns the slot number once it is known, but if the server reports we are placed in a queue then display the wait queue window and maintain the count while optionally showing the server message of the day */ int findslot(void) { int oldcount = -1; W_Window w, b_quit, b_count, b_motd; W_Window w_motd; extern int motd_last; int WaitMotdLine = 0; int mapMotd = booleanDefault("showMotd", 0); W_Event event; /* Wait for some kind of indication about in/not in */ while (queuePos == -1) { socketPauseNoUser(); if (isServerDead()) { #if defined(SOUND) Exit_Sound(); #endif fprintf(stderr, "server connection lost, during pre-queue\n"); terminate(0); } readFromServer(NULL); if (me != NULL) { /* We are in! */ return me->p_no; } } /* We have to wait. Make appropriate windows, etc... */ w = W_MakeWindow("wait", 0, 0, WQ_W, WQ_H, NULL, 2, foreColor); b_quit = W_MakeWindow("waitquit", BM, WQ_HEAD + BM, WQ_W / 3 - BM * 2, WQ_H - WQ_HEAD - 2 - BM * 2, w, 2, W_Red); b_count = W_MakeWindow("count", WQ_W / 3 + BM, WQ_HEAD + BM, WQ_W / 3 - BM * 2, WQ_H - WQ_HEAD - 2 - BM * 2, w, 2, W_Yellow); b_motd = W_MakeWindow("motdbutton", 2 * WQ_W / 3 + BM, WQ_HEAD + BM, WQ_W / 3 - BM * 2, WQ_H - WQ_HEAD - 2 - BM * 2, w, 2, W_Green); W_MapWindow(w); W_MapWindow(b_count); W_MapWindow(b_motd); W_MapWindow(b_quit); if (mapMotd) { w_motd = W_MakeWindow("waitmotd", 1, WQ_W + 1, TWINSIDE, TWINSIDE, 0, 2, foreColor); W_MapWindow(w_motd); showMotd(w_motd, WaitMotdLine); } /* a local event loop, exits when the player is given a slot, or if the server disconnects, or if the user choses to quit */ for (;;) { socketPause(); readFromServer(NULL); if (isServerDead()) { #if defined(SOUND) Exit_Sound(); #endif fprintf(stderr, "server connection lost, during queue wait\n"); terminate(0); } while (W_EventsPending()) { W_NextEvent(&event); switch ((int) event.type) { case W_EV_BUTTON: case W_EV_KEY: if (mapMotd && event.Window == w_motd) { if (event.key == ' ' || event.key == 'q') { W_DestroyWindow(w_motd); mapMotd = !mapMotd; } else { if (event.key == 'b') { WaitMotdLine -= 28; WaitMotdLine = MAX(WaitMotdLine, 0); } else { WaitMotdLine += 28; if (WaitMotdLine > motd_last) WaitMotdLine = 0; } W_ClearWindow(w_motd); showMotd(w_motd, WaitMotdLine); break; } } else if (event.Window == b_motd) { if (mapMotd) { W_DestroyWindow(w_motd); } else { w_motd = W_MakeWindow("waitmotd", 1, WQ_W + 1, TWINSIDE, TWINSIDE, 0, 2, foreColor); W_MapWindow(w_motd); WaitMotdLine = 0; showMotd(w_motd, WaitMotdLine); } mapMotd = !mapMotd; } else if (event.Window == b_quit || event.key == 'q') { #if defined(SOUND) Exit_Sound(); #endif fprintf(stderr, "you selected quit\n"); terminate(0); } break; case W_EV_EXPOSE: if (event.Window == w) { draw_heading(w); } else if (event.Window == w_motd) { showMotd(w_motd, WaitMotdLine); } else if (event.Window == b_quit) { draw_b_quit(b_quit); } else if (event.Window == b_count) { draw_b_count(w, b_count, queuePos); } else if (event.Window == b_motd) { draw_b_motd(b_motd); } break; case W_EV_CLOSED: if (event.Window == w) { fprintf(stderr, "you quit, by closing the wait window\n"); terminate(0); } else if (event.Window == w_motd) { W_DestroyWindow(w_motd); mapMotd = 0; } break; default: break; } } /* keep the count button up to date based on the server responses */ if (queuePos != oldcount) { draw_b_count(w, b_count, queuePos); oldcount = queuePos; } /* if we have a slot now, destroy the windows and begin playing */ if (me != NULL) { W_DestroyWindow(w); if (mapMotd) { W_DestroyWindow(w_motd); } W_Beep(); W_Beep(); return me->p_no; } } } netrek-client-cow-3.3.2/inform.h0000664000175000017500000000013113657750470015507 0ustar jamesjames/* inform.c */ void inform(W_Window ww, int x, int y, char key); void destroyInfo(void); netrek-client-cow-3.3.2/stars.gif0000664000175000017500000001032713657750470015677 0ustar jamesjamesGIF87aóQ÷J}iÿ¿ÿÒÿØÿëÿÿ000@@@€€€ÿÿÿCGxµ°R€ S&èÿIGªµÐ€Ìÿ3f™ÿ3SCCsä0Aósh/iNHÈX ¦¨Sþ P ˜UšTh AUhÿ›#h-@CgX`¸PF ¤U˜hS ÿUªQhÐS/RPQ„R¦¨CIL†¶ØˆCPÈ G¼ hAÄ”²SGCŸ`à`ÿC`È Uhÿ &TèCCTs|hG ŸUÿàhp PPAÿªÄÐÿÿªdÐÿHGȵ`X€ÿSlSAÿGªµÐЀÿTÿCGuµ`è€ÿ PL ®UXTh SUPhA U Ph@•PÌ,óQþH° Áƒ&HȰ¡Ã‡#JœH±¢Å‹3jÜÈÑ¡‚Ž CŠq!B“$Sª\ɲ¥ËŽÆ|I³¦Í›8sêÜÉ“&J‚3I~ä8´§Ñ£'‘*]Ê´©B?Jj4*Õ«X³j5t«×¯`W2K–¤Õ„E˪]˶­Ò³gþ„{1AW·xóêÝktìÔ»| æéw°aŒi &N|¸±ãÇ[éæd|0&eÈ{%cÞ  0犗¯.øLºtiÏ%56x9tÎѦcËžÝP3CÊ3WÓÞ}xîfÔÚævÎÉ+O˜|¹óçz›CçIÙõôëØJ¯¹Ý#ëƒE‡þ^žÝ%òòÌŸ¢/ký ƒ÷ëãËŸv`ûÎÄÐO_*ùþ×Ý} UÿˆQwÙ1X Fø™ƒ%ÈÒe](aynh˜††˜‘… uh‘‰œ •zé&šˆ0–ˆŠÑh‘‹2¦ãŽe™hãNÉÙˆ<Yã‘Fæˆd’L6 äFD~aX8 c”-ùVÑ!rI•—VÞ4–aNXf]UÀåb#Uy&f`¢ÙVœ‘9Ñ}«Ñ9Քǽ¹¡žôñiš›#ê'Y†îI¡‡:U¢y êV”æé¡vJD—ž—bǨyèuº›––j*C$ž:¤}6*ªªþ°²\`¯’öãPVe:X­¥QÈk¬!éºÑ§ lV&ýÚhZ2–ê[ùæœoÆ8z—§F›ãwM§Û ižd¢Q—îPÕÑù¹ëÎŽxR J$4íÛ>Q¿»ì;Mª'Dúº¼gùÒða1ŸüóÑÞ¼ºÎŸúcÓCï·ˆ_?Qö/Ôñ¸OÊYõ»)~XÚÚæ=~íÇqmؽ/ÿý‘êøsO’þM±ø—ñõ€×¹ÎÐ÷öo7äYàMˆ *ê„‹c¶E@ Ƈ9Ï– 2¥fy03naä`å£öEÅ"gÊeGvyHúøÒCœj1²ÌXâ…•:i¦o‡D}I³’S&V…,g¾,iVÔ¦7§SÆ4å°‹ØÚÈÞ%Ì縲%Çda“ˆtMÓóž?þƒb>wRÎÀÔ󕱂¦›ˆO”©ê6éçW’zª '‚¨D'J½å͈¢g1zx ïw s(•VÈÑ×DS‹9Ó(°Þ)È’Îòu.ýÚ@¦ÒgÆ´t,õÉQjª-n‚ó! õ˜>éƒ>R:$§0mTP¹: !5^7m㟢*ÅÙðT#O¥jÂd§ÕØ\5Kyëj@•¸yµ³^Ym©v˜(UŒ.U¬õú*\#:Wíɵ®ÙÙ[“Z“:FÕ£G»+!{™3Ž –%€ÕWb™vXxòíPiMIdçÖÏ,6£L™Î&›-­Æ¯í›¾ÒXRó" Åëu‚’½þ4!©%þˆHÕÂ*ñ‰±³¼TÈT?`Ê1%³åí±JË–àâó¬#¼Žk… ʵþÖ)—uŒq¡ÇUæ"²9±½ uéÁ¿uÇF  rá©”ñlš½#¨M¼gÞœà˜©j¯Z&[Qs~G9ï…jòˆË•d—Zòm }Õv“Tgb!ßr­›Mˆü·-ïY°MüAÙ ˜~^-ˆ„+²`þÊò@É¡°„6˜ —Ky}­"UD¬ éîÆÄ™mëÂôEbÊn®Æ ^ Œ/˜ÇsÃ…ÚäEòà‘àØÇTëÕ¬cV’",VJtyÜ–j)‰‡u1D4äš«„°6±ZQ…¼Á ZU½™2þEÔ!áyeÆÉ‘ïKg?̓5¾s}œÓλ§i^Æ‹y£¼IêY¸ƒnH‘UÜ4oí$ÐɯACè'£xÆ5‘´TÚõªádì=Ô¡ñ÷1ŸJÄ5•FrÑ>g¢0ÕzÑò¾lº¹E[:L+Zb8j‘Èúl. ìqþë½Å¾5[æ¶¶ZQ(Ù;i¯u<ÌÏ5öÍhˬW)h»NÌCÖŠŠªŠYªR»À-±5ï´yîø¬ÝHK$zsiz+ˆT×v2KÓ¬.åsÛVÌj1 -xk—'¥V6ˆ“;A…Ï–ñ¶Ù‚æpÎüÒøü\¯þfÈ4u> Rþ=\ï?þzᮚ ûùq—$V@a.kHV®l¿˜hãaP +žN#]|7?O‰ÄOÌ‘’ ¬å枊kÆ qöÈÛR=ŸÒoôøÕ@QÂ9pÃçBfps'‹ÑÓûÚ[}T=YÈL´.2±+ÈÞæT°ö±ÄŒ\Ájú¡Înãù¼]Aç8:‰E#B*ìZ»;·‚P[”Ñùþ%Ó¹¨–©oçêZäU¯Zu[a›m[ |n>+Gdé|yT?"½?¾ã1C}eÎdvš[ßÈ { …ýëþžtŒc³{ðÎ1³<]Y¢xÈE»ïýòçXÖzžè‘¾ñþïõbŽDË£ð¶~eT#…Rù[+äxÑﵣȄ4}so(&W"ÄjOaniŸ'³?ˆ˜çzl|ob!øâ6¿G5F#Áv3~"L¬€Xµ„fTâAn\‚tÎãCÒ‘D|÷o…K—è^%O(µO`Ó:±7ï‚'€•GTt5frçnsR{ý±Œ£M2X8À7,_Ñxñ)³s(A!ÍÇ-5ôè¡#-ا'xf¥3Sw‚|k‘…7Ü6íw64°CZv&x!zÜg$JˆñsRè4‡M¸QÂyÔT‡ÕæD2D@5E$~aaôyþ¦…`†¨,¦¦V8‡ Ø‚o(Oø\‘€…„—'T!'.èWˆ²Á?-¤…¶4sNFy|Ez4øz3Dœ(1%‡%Aáfó·‡Û¥_VÂPt±aQdy¤8‹8íÑ!ºò.(=1â†óyŒ8}‘8‰É7@ áŒHc,è.øÆHÔ84«Ö}ÑÃ[Ñøˆ˜žøŸ’êvp|è\£Öç!ýÄ‚•‰æ¸x v‡¯øŽó˜!RF¸bJöE[h"^êÑ´‡© \V ÓÑŽë¡i·V‡øxŽð4„e3$1çŽ/u…[µŒ"’aQŽY;)¹’>8m‚ïDþŒÔu0BŠ”Ž%S~“‹,I8¹ƒ­HqvIF`*ñ“ÿ¸g›ñHøG™‡=‚BêD‰h¨‡P£S[$“E•&ã}¡}§…N Á(¨sM6‰’ò”ï{e¢•\ç~ðˆHy”&™ˆõgxw?(ü7‰gI“uyB¯‚‘ø—…Ç–!7…$Ô“b‹54Øøm7¡–Œ©‘”ò¸•èO¥£"‚…ƒ•—B‘zPBkš¸Q0S÷+(é÷Ñš…ow)°™š¡¹Š)æ_95ni™é|1—5A$µé•·I×—w7•ÅÕ³Fp€)Ô”¶‡q6Ál1b;rþe˜þ‹Ü¸›Ôù‘)ŽôW2™RœögÑo—X†ÎÁ¯Ÿ®hnƒJØ&|‚‹IǃEGžïé˜q=ú©Cõ<Üyœ'„ž¶©‹2Äiˆ{W zšÐ™íÕ2삘ꜺwA‘X¸¡˜!œ»h`é2–6Eýøƒí9$*¢Öé zJgr 0jšé›7FòH•c£™y5Fñ¢ýãö J+™G•óã’ rFJuD؈5žnÁ‘Ri¸Dª”ªAšÆiS]©¡e¦XJcg ¤2|Òˆ]*¤$1§™vÝ…b?’ŽŒ3£ùs£‚æ¥éÙ`Éa €ŠiVW_å¦ðW‰z‘¤`§¤uVŠ™)¥J•úüS›ìö<x—‰©œ_q¤Ô’¦šfª0©æaÛaªVB™J ú1üèž÷v§ó¹‚‡*s](¥Gá§)wG(:‚#©ª¡zj»ª¥˜§žØ§÷”©˜‘UЬý °f˜¶ághĨª­eWUâ[›ÆeÉŠ^y²e½šÈe `®:z8J;ÓbŸO«‡¯þ =Þê~MÈgêªýz®»Y’ª¦ž;netrek-client-cow-3.3.2/netstat.h0000664000175000017500000000046013657750470015704 0ustar jamesjames/* netstat.c */ void ns_init(int v); void ns_record_update(int count); void ns_do_stat(int v, int c); double ns_get_tstat(void); double ns_get_lstat(void); int ns_get_nfailures(void); char *ns_get_nfthresh_s(void); void ns_set_nfthresh_s(char *s); int ns_get_nfthresh(void); void ns_set_nfthresh(int v); netrek-client-cow-3.3.2/mkportable.sh0000664000175000017500000000263213657750470016550 0ustar jamesjames#!/bin/sh # mkportable.sh # # produces a tar.gz consisting of a binary and dependent libraries. set -e BINARY=netrek ALIAS=netrek-client-cow if [ ! -x ${BINARY} ]; then echo "mkportable: error, you must make netrek first" exit 1 fi if [ ! -x name ]; then echo "mkportable: error, you must make name first" exit 1 fi PACKAGE=netrek-client-cow VERSION=`./name` ARCH=i386 RELEASE=0 DESTDIR=${PACKAGE}-${VERSION}-${ARCH}-portable-${RELEASE} if [ -d ${DESTDIR} ]; then echo "mkportable: error, old destination directory ${DESTDIR} exists" exit 1 fi LIBDIR=/lib BINDIR=/ mkdir --parents ${DESTDIR}${LIBDIR} mkdir --parents ${DESTDIR}${BINDIR} # place the binary cp --preserve=mode,ownership,timestamps ${BINARY} ${DESTDIR}${LIBDIR}/ # place the dependencies for library in `ldd ${BINARY}|egrep -v "linux-gate.so|ld-linux.so"|awk '{print $3}'`; do cp --preserve=mode,ownership,timestamps ${library} ${DESTDIR}${LIBDIR}/ done # prepare wrapper cat > ${DESTDIR}${BINDIR}/${ALIAS} < #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" /* * Provide the angular distance between two angles. */ int angdist(unsigned char x, unsigned char y) { register unsigned char res; if (x > y) res = x - y; else res = y - x; if (res > 128) return (256 - (int) res); return ((int) res); } /* * Find the object nearest mouse. Returns a pointer to an * obtype * structure. This is used for info and locking on. * * * Because we are never interested in it, this function will * never return your * own ship as the target. * * * Finally, this only works on the two main windows */ struct obtype * gettarget(W_Window ww, int x, int y, int targtype) { int g_x, g_y; struct obtype *gettarget2(int x, int y, int targtype); struct obtype *targ; if (ww == mapw) { g_x = x * GWIDTH / GWINSIDE; g_y = y * GWIDTH / GWINSIDE; } else { g_x = me->p_x + ((x - TWINSIDE / 2) * SCALE); g_y = me->p_y + ((y - TWINSIDE / 2) * SCALE); } targ = gettarget2(g_x, g_y, targtype); return (targ); } static struct obtype _target; struct obtype * gettarget2(int x, int y, int targtype) { register int i; register struct player *j; register struct planet *k; double dist, closedist; int friendly; closedist = GWIDTH; if (targtype & TARG_PLANET) { for (i = 0, k = &planets[i]; i < MAXPLANETS; i++, k++) { dist = hypot((double) (x - k->pl_x), (double) (y - k->pl_y)); if (dist < closedist) { _target.o_type = PLANETTYPE; _target.o_num = i; closedist = dist; } } } if (targtype & (TARG_PLAYER | TARG_FRIEND | TARG_ENEMY)) { for (i = 0, j = &players[i]; i < MAXPLAYER; i++, j++) { if (j->p_status != PALIVE) continue; if ((j->p_flags & PFCLOAK) && (!(targtype & TARG_CLOAK))) continue; if (j == me && !(targtype & TARG_SELF)) continue; friendly = friendlyPlayer(j); if (friendly && (targtype & TARG_ENEMY)) continue; if (!friendly && (targtype & TARG_FRIEND)) continue; dist = hypot((double) (x - j->p_x), (double) (y - j->p_y)); if (dist < closedist) { _target.o_type = PLAYERTYPE; _target.o_num = i; closedist = dist; } } } if (closedist == GWIDTH) { /* Didn't get one. bad news * */ _target.o_type = PLAYERTYPE; _target.o_num = me->p_no; /* Return myself. Oh * * * well... */ return (&_target); } else { return (&_target); } } #ifdef hpux #include #include getrusage(foo, buf) int foo; struct rusage *buf; { buf->ru_utime.tv_sec = 0; buf->ru_stime.tv_sec = 0; } #include /* int (* signal(sig, funct))() int sig; int (*funct)(); { struct sigvec vec, * oldvec; * * sigvector(sig, 0, &vec); vec.sv_handler = funct; sigvector(sig, &vec, (struct * sigvec *) 0); } */ #endif /* hpux */ int troop_capacity(void) { if (me->p_ship.s_type == ASSAULT) return (((me->p_kills * 3) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (me->p_kills * 3)); else if (me->p_ship.s_type != STARBASE) return (((me->p_kills * 2) > me->p_ship.s_maxarmies) ? me->p_ship.s_maxarmies : (int) (me->p_kills * 2)); else return me->p_ship.s_maxarmies; } netrek-client-cow-3.3.2/playerlist.c0000664000175000017500000005246513657750470016421 0ustar jamesjames/* playerlist.c * * Fairly substantial re-write to do variable player lists: Sept 93 DRG Major * rewrite for demand driven updates -> huge speedup: Oct. 94 [007] Major * rewrite to fix some bugs and speed things up : Jan. 95 [Zork] * * * TODO: * * Sort observers separatly: opserver if (pl->p_flags & PFOBSERV) is true. * */ #include "config.h" #include "copyright.h" #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "defaults.h" #include "string_util.h" #include "playerlist.h" #define MaxPlistField 18 /* The width of the longest * * * possible plist field */ #define IsEmpty(x) (!x) #define IsNotEmpty(x) (x) #define IsZero(x) (!x) #define IsNotZero(x) (x) #define TRUE 1 #define FALSE 0 /* Current list of flags */ /* ' ' - White Space */ /* 'b' - Armies Bombed */ /* 'd' - Damage Inflicted (DI) */ /* 'k' - Max Kills */ /* 'l' - Login Name */ /* 'n' - Ship Number */ /* 'p' - Planets Taken */ /* 'r' - Ratio */ /* 's' - Speed */ /* 'v' - Deaths per hour */ /* 'w' - War staus */ /* 'B' - Bombing */ /* 'C' - Curt (short) rank */ /* 'D' - Defense */ /* 'H' - Hours Played */ /* 'K' - Kills */ /* 'L' - Losses */ /* 'M' - Display, Host Machine */ /* 'N' - Name */ /* 'O' - Offense */ /* 'P' - Planets */ /* 'R' - Rank */ /* 'S' - Total Rating (stats) */ /* 'T' - Ship Type */ /* 'V' - Kills per hour */ /* 'W' - Wins */ /* * Global Variables * * partitionPlist : Separate the goodies from baddies in the sorted list? * plistCustomLayout : The value of `playerlist' in the defaults file. * plistReorder : True only if the order of the playerlist is out of date. * plistStyle : The current style number for the player list. * plistUpdated : True only if the player list is out of date. * sortMyTeamFirst : Should my team go first or second in the sorted list? * sortPlayers : Should the player list be sorted? * updatePlayer[plr] : The playerlist entry for "plr" is old. * * plistHasHostile : True if "Hostile" is a field in the current list. * plistHasSpeed : True if "Speed" is true in the current playerlist. */ int partitionPlist = FALSE; char *plistCustomLayout; int plistReorder = FALSE; int plistStyle = 0; int plistUpdated = FALSE; int sortMyTeamFirst = FALSE; int sortPlayers = TRUE; char updatePlayer[MAXPLAYER + 1]; #ifdef PLIST2 int plistHasHostile = FALSE; int plistHasSpeed = FALSE; #endif /* PLIST2 */ /* * Local Variables * * plistLayout : The fields in the current playerlist. * plistPos[plr] : The player list row assigned to each player. * plistWidth : The width of the playerlist. * my_classes : The letters to go with each ship type. */ static char *plistLayout = ""; static int plistPos[MAXPLAYER]; static int plistWidth = 0; static char *my_classes[NUM_TYPES] = {"SC", "DD", "CA", "BB", "AS", "SB", "GA", "??"}; /* Local Functions */ static int PlistHeader(char *layout, int doWrite); static void PlistLine(struct player *j, int pos); static void WriteSortedPlist(void); static void WriteUnsortedPlist(void); void InitPlayerList() /* Set the global variables associtated with the player list. This * should be called when the defaults file is loaded or reloaded. */ { /* Find the default style number for the player list. */ plistCustomLayout = getdefault("playerlist"); /* Select a style number base on the information in the defaults * * * (.xtrekrc) file. */ plistStyle = intDefault("playerListStyle", -1); if (IsZero(plistStyle) && IsEmpty(plistCustomLayout)) { fputs( "Warning: `playerListStyle' set to 0 but `playerlist' is not set.\n", stderr); fputs("\tPlease correct your defaults (.xtrekrc) file.\n", stderr); plistStyle = -1; } #ifdef ALWAYS_USE_PLIST_CUSTOM_LAYOUT if (IsNotEmpty(plistCustomLayout)) plistStyle = 0; else #endif if (plistStyle > PLISTLASTSTYLE) { plistStyle = PLISTLASTSTYLE; } else if (plistStyle == -1) { /* Backward compatibility */ if (IsNotEmpty(plistCustomLayout)) { plistStyle = 0; } else if (booleanDefault("newPlist", FALSE)) { plistStyle = 2; } else /* use the old playerlist */ { plistStyle = 1; } } /* Read the partitionPlist flag to tell us whether to break up the player * * * * list with blank lines. */ partitionPlist = booleanDefault("partitionPlist", partitionPlist); /* Sort the playerlist? */ sortPlayers = booleanDefault("sortPlayers", sortPlayers); /* My team goes first (or second)? */ sortMyTeamFirst = booleanDefault("sortMyTeamFirst", sortMyTeamFirst); /* plistUpdate[MAXPLAYER] must always be TRUE because thats how we no when * * * to stop looking for a changed player. */ updatePlayer[MAXPLAYER] = TRUE; RedrawPlayerList(); } int PlistMaxWidth() /* Calculate the maximum width of all the defined player lists so that the * width of the player list window can be defined. */ { plistCustomLayout = getdefault("playerlist"); if (IsNotEmpty(plistCustomLayout)) plistWidth = PlistHeader(plistCustomLayout, FALSE); else plistWidth = 0; if (plistWidth < 83) plistWidth = 83; return plistWidth; } void RedrawPlayerList() /* Completly redraw the player list, rather than incrementally updating the * list as with UpdatePlayerList(). * * This function should be called if the plistStyle changes or if the * window has just been revealed. * * This function is called automatically from InitPlayerList. */ { int i; if (IsEmpty(me) || !W_IsMapped(playerw)) return; /* Translate this style number into a player list layout string. */ switch (plistStyle) { case 0: /* Custom */ if (IsEmpty(plistCustomLayout)) /* this is chacked for in */ { /* InitPlayerList */ plistLayout = ""; printf("??? empty plistLayout? This can't happen!\n"); } else plistLayout = plistCustomLayout; break; case 1: /* Old Style */ plistLayout = "nTRNKWLr O D d "; break; case 2: /* COW Style */ plistLayout = "nTR N K lrSd"; break; case 3: /* Kill Watch Style */ plistLayout = "nTK RNlr Sd"; break; case 4: /* BRMH Style */ plistLayout = "nTR N K l M"; break; default: fprintf(stderr, "Unknown plistStyle in ChangedPlistStyle().\n"); break; } /* Redraw the player list. */ W_ClearWindow(playerw); (void) PlistHeader(plistLayout, TRUE); plistReorder = TRUE; plistUpdated = TRUE; for (i = 0; i < MAXPLAYER; i++) updatePlayer[i] = TRUE; UpdatePlistFn(); } void UpdatePlistFn() /* Update the player list. * * This function should usually be called through the UpdatePlayerList() macro * (see playerlist.h). * * This function works incrimentally. If a dramatic change has taken place * (i.e. if plistStyle changes) then RedrawPlayerList() should be called * instead. */ { int count; char *update; plistUpdated = FALSE; if (!W_IsMapped(playerw)) return; if (!plistReorder) { /* Redraw the lines that have changed. */ #if defined(sgi) #pragma set woff 1167 #endif update = updatePlayer-1; for (;;) { /* Find the changed player as quickly as possible. */ do ++update; while (!(*update)); /* Is this a valid player? Remember updatePlayer[MAXPLAYER] is * * * always TRUE to make the above loop more efficient. */ count = update - updatePlayer; if (count == MAXPLAYER) break; *update = FALSE; /* We should not get updates for free players any more, but just * * * incase a packet arrives late... */ if (players[count].p_status != PFREE) PlistLine(players + count, plistPos[count]); } } else { /* Reorder the player list. Note that this may not require a full * * * rewrite. */ plistReorder = FALSE; if (sortPlayers) WriteSortedPlist(); else WriteUnsortedPlist(); } } static void WriteSortedPlist() /* Update the order of the players in the list and write out any changes. */ { int row, i, last; struct player *current; int teamPos[NUMTEAM + 1]; int *pos; static int plistLastRow = -1; static int blankLine = -1; static int blankLine2 = -1; static int myTeam = -1; /* If I have changed team, redraw everything (to get the colors right). */ if (remap[me->p_team] != myTeam) { myTeam = remap[me->p_team]; for (pos = plistPos + MAXPLAYER - 1; pos >= plistPos; --pos) *pos = -1; } /* If partitionPlist is false, reset the blank line markers */ if (!partitionPlist) { blankLine = -1; blankLine2 = -1; } /* Count the number of players in each team. */ for (i = NUMTEAM; i >= 0; --i) teamPos[i] = 0; for (current = players + MAXPLAYER - 1; current >= players; --current) { if (current->p_status != PFREE) ++teamPos[remap[current->p_team]]; } /* Find the row after the last player in each team. */ last = 1; /* The title is line zero */ if (sortMyTeamFirst) /* My team comes at the top */ { last += teamPos[myTeam]; teamPos[myTeam] = last; if (partitionPlist) { if (blankLine != last) { blankLine = last; W_ClearArea(playerw, 0, last, plistWidth, 1); } ++last; } } for (i = 1; i <= NUMTEAM; ++i) { if (i != myTeam) { last += teamPos[i]; teamPos[i] = last; } } if (!sortMyTeamFirst) /* My team comes below the * * others */ { if (partitionPlist) { if (blankLine != last) { blankLine = last; W_ClearArea(playerw, 0, last, plistWidth, 1); } ++last; } last += teamPos[myTeam]; teamPos[myTeam] = last; } if (myTeam != NOBODY) { /* Separate the goodies from the arriving players. */ if (partitionPlist) { if (blankLine2 != last) { blankLine2 = last; W_ClearArea(playerw, 0, last, plistWidth, 1); } ++last; } last += teamPos[NOBODY]; teamPos[NOBODY] = last; } /* Clear some lines if people have left. */ for (row = last; row < plistLastRow; ++row) W_ClearArea(playerw, 0, row, plistWidth, 1); plistLastRow = last; /* Write out each player that has either changed position or has * new * * stats. */ for (i = MAXPLAYER - 1, current = players + MAXPLAYER - 1; i >= 0; --i, --current) { if (current->p_status == PFREE) { updatePlayer[i] = FALSE; continue; } row = --(teamPos[remap[current->p_team]]); if ((!updatePlayer[i]) && plistPos[i] == row) continue; plistPos[i] = row; updatePlayer[i] = FALSE; PlistLine(current, row); } } static void WriteUnsortedPlist(void) /* * Update the order of the players in the list and write out any * changes. */ { int count; int pos; char *update; static int myTeam = -1; /* * If I have changed team, redraw everything (to get the colors * right). */ if (remap[me->p_team] != myTeam) { myTeam = remap[me->p_team]; for (update = updatePlayer + MAXPLAYER ; update >= updatePlayer ; --update) { *update = TRUE; } } #if defined(sgi) #pragma set woff 1167 #endif update = updatePlayer - 1; for (;;) { /* Find the changed player as quickly as possible. */ do ++update; while (!(*update)); /* Is this a valid player? Remember updatePlayer[MAXPLAYER] * is * * always TRUE to make the above loop more efficient. */ count = update - updatePlayer; if (count == MAXPLAYER) break; /* Update the player. */ *update = FALSE; pos = count + 1; plistPos[count] = pos; if (players[count].p_status != PFREE) PlistLine(players + count, pos); else W_ClearArea(playerw, 0, pos, plistWidth, 1); } } static int PlistHeader(char *layout, int doWrite) /* Analyse the heading (field names) for a player list, and set the * plistHasSpeed and plistHasHostile flags. * * If doWrite is TRUE, write the heading to the list. * * RETURN the width of the player list. */ { char header[BUFSIZ]; int num = 0; #ifdef PLIST2 plistHasSpeed = FALSE; plistHasHostile = FALSE; #endif /* PLIST2 */ for (; IsNotZero(*layout); ++layout) { if (num + MaxPlistField >= BUFSIZ) { /* Assume that we have tested the standard layouts so that only * * * custom layouts can be too long. * * If a standard layout is * * found to be too long then some compiler's * code will dump core * * here because of an attempt to write over a * constant string. */ fprintf(stderr, "Playerlist truncated to fit buffer.\n"); layout = '\0'; break; } switch (*layout) { case 'n': /* Ship Number */ STRNCPY(&header[num], " No", 3); num += 3; break; case 'T': /* Ship Type */ STRNCPY(&header[num], " Ty", 3); num += 3; break; case 'C': /* Curt (short) Rank */ STRNCPY(&header[num], " Rank", 5); num += 5; break; case 'R': /* Rank */ STRNCPY(&header[num], " Rank ", 11); num += 11; break; case 'N': /* Name */ STRNCPY(&header[num], " Name ", 17); num += 17; break; case 'K': /* Kills */ STRNCPY(&header[num], " Kills", 6); num += 6; break; case 'l': /* Login Name */ STRNCPY(&header[num], " Login ", 17); num += 17; break; case 'O': /* Offense */ STRNCPY(&header[num], " Offse", 6); num += 6; break; case 'W': /* Wins */ STRNCPY(&header[num], " Wins", 6); num += 6; break; case 'D': /* Defense */ STRNCPY(&header[num], " Defse", 6); num += 6; break; case 'L': /* Losses */ STRNCPY(&header[num], " Loss", 6); num += 6; break; case 'S': /* Total Rating (stats) */ STRNCPY(&header[num], " Stats", 6); num += 6; break; case 'r': /* Ratio */ STRNCPY(&header[num], " Ratio", 6); num += 6; break; case 'd': /* Damage Inflicted (DI) */ STRNCPY(&header[num], " DI", 8); num += 8; break; case ' ': /* White Space */ header[num] = ' '; num += 1; break; #ifdef PLIST1 case 'B': /* Bombing */ STRNCPY(&header[num], " Bmbng", 6); num += 6; break; case 'b': /* Armies Bombed */ STRNCPY(&header[num], " Bmbed", 6); num += 6; break; case 'P': /* Planets */ STRNCPY(&header[num], " Plnts", 6); num += 6; break; case 'p': /* Planets Taken */ STRNCPY(&header[num], " Plnts", 6); num += 6; break; case 'M': /* Display, Host Machine */ STRNCPY(&header[num], " Host Machine ", 17); num += 17; break; case 'H': /* Hours Played */ STRNCPY(&header[num], " Hours ", 7); num += 7; break; case 'k': /* Max Kills */ STRNCPY(&header[num], " Max K", 6); num += 6; break; case 'V': /* Kills per hour */ STRNCPY(&header[num], " KPH", 6); num += 6; break; case 'v': /* Deaths per hour */ STRNCPY(&header[num], " DPH", 6); num += 6; break; #endif #ifdef PLIST2 case 'w': /* War staus */ STRNCPY(&header[num], " War Stat", 9); num += 9; plistHasHostile = TRUE; break; case 's': /* Speed */ STRNCPY(&header[num], " Sp", 3); num += 3; plistHasSpeed = TRUE; break; #endif default: fprintf(stderr, "%c is not an option for the playerlist\n", *layout); break; } } header[num] = '\0'; if (doWrite) W_WriteText(playerw, 0, 0, textColor, header, num, W_RegularFont); return num; } static void PlistLine(struct player *j, int pos) /* Write the player list entry for player `j' on line `pos'. */ { char buf[BUFSIZ]; char *ptr; char *buffPoint; int kills, losses, my_ticks; float pRating, oRating, dRating, bRating, Ratings; float KillsPerHour, LossesPerHour; /* Added 12/27/93 ATH */ double ratio, max_kills; if (j->p_ship.s_type == STARBASE) { kills = j->p_stats.st_sbkills; losses = j->p_stats.st_sblosses; max_kills = j->p_stats.st_sbmaxkills; if (SBhours) my_ticks = j->p_stats.st_sbticks; else my_ticks = j->p_stats.st_tticks; KillsPerHour = (float) (my_ticks == 0) ? 0.0 : (float) kills *36000.0 / (float) my_ticks; LossesPerHour = (float) (my_ticks == 0) ? 0.0 : (float) losses *36000.0 / (float) my_ticks; } else { kills = j->p_stats.st_kills + j->p_stats.st_tkills; losses = j->p_stats.st_losses + j->p_stats.st_tlosses; max_kills = j->p_stats.st_maxkills; my_ticks = j->p_stats.st_tticks; KillsPerHour = (float) (my_ticks == 0) ? 0.0 : (float) j->p_stats.st_tkills * 36000.0 / (float) my_ticks; LossesPerHour = (float) (my_ticks == 0) ? 0.0 : (float) j->p_stats.st_tlosses * 36000.0 / (float) my_ticks; } if (losses == 0) ratio = (double) kills; else ratio = (double) kills / (double) losses; if (!j->p_stats.st_tticks) { oRating = pRating = bRating = Ratings = 0.0; dRating = defenseRating(j); } else { oRating = offenseRating(j); pRating = planetRating(j); bRating = bombingRating(j); Ratings = oRating + pRating + bRating; dRating = defenseRating(j); if ((j->p_ship.s_type == STARBASE) && (SBhours)) { /* If SB, show KPH for * * * offense etc. */ oRating = KillsPerHour; dRating = LossesPerHour; } } buffPoint = buf; for (ptr = plistLayout; IsNotZero(*ptr); ++ptr) { *(buffPoint++) = ' '; switch (*ptr) { case 'n': /* Ship Number */ if (j->p_status != PALIVE) { *(buffPoint++) = ' '; *(buffPoint++) = shipnos[j->p_no]; } else { *(buffPoint++) = teamlet[j->p_team]; *(buffPoint++) = shipnos[j->p_no]; } break; case 'T': /* Ship Type */ if (j->p_status != PALIVE) { *(buffPoint++) = ' '; *(buffPoint++) = ' '; } else { *(buffPoint++) = my_classes[j->p_ship.s_type][0]; *(buffPoint++) = my_classes[j->p_ship.s_type][1]; } break; case 'C': /* Curt (short) Rank */ format(buffPoint, (j->p_stats.st_rank < nranks) ? ranks[j->p_stats.st_rank].cname : "", 4, 0); buffPoint += 4; break; case 'R': /* Rank */ format(buffPoint, (j->p_stats.st_rank < nranks) ? ranks[j->p_stats.st_rank].name : "", 10, 0); buffPoint += 10; break; case 'N': /* Name */ format(buffPoint, j->p_name, 16, 0); buffPoint += 16; break; case 'K': /* Kills */ if (j->p_kills == 0.0) { format(buffPoint, " ", 5, 0); } else { if (j->p_kills > 100.0) ftoa(j->p_kills, buffPoint - 1, 0, 3, 2); else ftoa(j->p_kills, buffPoint, 0, 2, 2); } buffPoint += 5; break; case 'l': /* Login Name */ format(buffPoint, j->p_login, 16, 0); buffPoint += 16; break; case 'O': /* Offense */ ftoa(oRating, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'W': /* Wins */ itoapad(kills, buffPoint, 0, 5); buffPoint += 5; break; case 'D': /* Defense */ ftoa(dRating, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'L': /* Losses */ itoapad(losses, buffPoint, 0, 5); buffPoint += 5; break; case 'S': /* Total Rating (stats) */ ftoa(Ratings, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'r': /* Ratio */ ftoa(ratio, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'd': /* Damage Inflicted (DI) */ ftoa(Ratings * (j->p_stats.st_tticks / 36000.0), buffPoint, 0, 4, 2); buffPoint += 7; break; case ' ': /* White Space */ break; #ifdef PLIST1 case 'B': /* Bombing */ ftoa(bRating, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'b': /* Armies Bombed */ itoapad(j->p_stats.st_tarmsbomb + j->p_stats.st_armsbomb, buffPoint, 0, 5); buffPoint += 5; break; case 'P': /* Planets */ ftoa(pRating, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'p': /* Planets Taken */ itoapad(j->p_stats.st_tplanets + j->p_stats.st_planets, buffPoint, 0, 5); buffPoint += 5; break; case 'M': /* Display, Host Machine */ format(buffPoint, j->p_monitor, 16, 0); buffPoint += 16; break; case 'H': /* Hours Played */ ftoa(my_ticks / 36000.0, buffPoint, 0, 3, 2); buffPoint += 6; break; case 'k': /* Max Kills */ ftoa(max_kills, buffPoint, 0, 2, 2); buffPoint += 5; break; case 'V': /* Kills Per Hour */ ftoa(KillsPerHour, buffPoint, 0, 3, 1); buffPoint += 5; break; case 'v': /* Deaths Per Hour */ ftoa(LossesPerHour, buffPoint, 0, 3, 1); buffPoint += 5; break; #endif #ifdef PLIST2 case 'w': /* War staus */ if (j->p_swar & me->p_team) STRNCPY(buffPoint, "WAR ", 8); else if (j->p_hostile & me->p_team) STRNCPY(buffPoint, "HOSTILE ", 8); else STRNCPY(buffPoint, "PEACEFUL", 8); buffPoint += 8; break; case 's': /* Speed */ itoapad(j->p_speed, buffPoint, 0, 2); buffPoint += 2; break; #endif default: break; } } *buffPoint = '\0'; W_WriteText(playerw, 0, pos, playerColor(j), buf, buffPoint - buf, shipFont(j)); } netrek-client-cow-3.3.2/local.c0000664000175000017500000010703213657750470015312 0ustar jamesjames/* * Local.c * * Functions to maintain the local map. */ #include "config.h" #include "copyright2.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "local.h" #ifdef WIN32 /* Fixup for minor inconsistencies between SAC's interger * linedraw and Win32 LineTo() */ int tpline = -1; #endif /* Local Variables */ static int clearcount = 0; static int clearzone[4][(MAXTORP + 1) * MAXPLAYER + (MAXPLASMA + 1) * MAXPLAYER + MAXPLANETS]; static int clearlcount = 0; #ifdef HOCKEY_LINES static int clearline[4][MAXPLAYER + 2 * MAXPLAYER + NUM_HOCKEY_LINES]; #else static int clearline[4][MAXPLAYER + 2 * MAXPLAYER]; #endif #ifdef SOUND static int sound_torps = 0; static int sound_other_torps = 0; static int num_other_torps = 0; static int sound_plasma = 0; static int sound_other_plasma = 0; static int num_other_plasma = 0; #if 0 /* unused? */ static int sound_other_explode = 0; #endif unsigned int sound_flags = PFSHIELD; #endif extern void *S_Plasma(int); extern void *S_Ship(int); extern void *S_Torp(int); extern int W_DrawSprite(void *, int, int, int); int clearsize; /* Function Defininitions */ #define NORMALIZE(d) (((d) + 256) % 256) static inline W_Icon planetBitmap(register struct planet *p) { int i; if (showlocal == 0) /* nothing */ { return (bplanets[0]); } else if ((p->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) { if (showlocal == 1) /* owner */ { return (bplanets[remap[p->pl_owner]]); } else /* resources */ { i = 0; if (p->pl_armies > 4) i += 4; if (p->pl_flags & PLREPAIR) i += 2; if (p->pl_flags & PLFUEL) i += 1; switch (showlocal) { case 2: /* standard */ return (bplanets2[i]); case 3: /* ZZ aka MOO */ return (bplanets3[i]); case 4: /* rabbit ears */ return (bplanets4[i]); default: return (bplanets[0]); } } } else { return (noinfoplanet); } } static void DrawPlanets(void) /* * Draw the planets on the local map. */ { register int dx, dy; register struct planet *l; const int view = SCALE * TWINSIDE / 2; for (l = planets + MAXPLANETS - 1; l >= planets; --l) { dx = l->pl_x - me->p_x; dy = l->pl_y - me->p_y; if (dx > view || dx < -view || dy > view || dy < -view) continue; dx = dx / SCALE + TWINSIDE / 2; dy = dy / SCALE + TWINSIDE / 2; W_WriteBitmap(dx - (planet_width / 2), dy - (planet_height / 2), planetBitmap(l), planetColor(l)); if (showIND && ((l->pl_info & me->p_team) #ifdef RECORDGAME || playback #endif ) && (l->pl_owner == NOBODY)) { W_CacheLine(w, dx - (planet_width / 2), dy - (planet_height / 2), dx + (planet_width / 2 - 1), dy + (planet_height / 2 - 1), W_White); W_CacheLine(w, dx + (planet_width / 2 - 1), dy - (planet_height / 2), dx - (planet_width / 2), dy + (planet_height / 2 - 1), W_White); } if (namemode) { W_MaskText(w, dx - (planet_width / 2), dy + (planet_height / 2), planetColor(l), l->pl_name, l->pl_namelen, planetFont(l)); clearzone[0][clearcount] = dx - (planet_width / 2); clearzone[1][clearcount] = dy + (planet_height / 2); clearzone[2][clearcount] = W_Textwidth * l->pl_namelen; clearzone[3][clearcount] = W_Textheight; clearcount++; } clearzone[0][clearcount] = dx - (planet_width / 2); clearzone[1][clearcount] = dy - (planet_height / 2); clearzone[2][clearcount] = planet_width; clearzone[3][clearcount] = planet_height; clearcount++; } } static void DrawShips(void) { register struct player *j; register struct phaser *php; char idbuf[10]; const int view = SCALE * TWINSIDE / 2; int dx, dy, px, py, wx, wy, tx, ty, lx, ly; #ifndef DYNAMIC_BITMAPS W_Icon(*ship_bits)[VIEWS]; #endif /* ** Kludge to try to fix missing ID chars on tactical (short range) display. */ idbuf[0] = '0'; idbuf[1] = '\0'; for (j=players + MAXPLAYER - 1; j >= players; --j) { /* jmn - observer support.. tried to diplay tractors but no works */ if (j->p_flags & PFCLOAK) { if (j->p_cloakphase < (CLOAK_PHASES - 1)) { #ifdef SOUND if (myPlayer(j) && (j->p_cloakphase == 0)) { Play_Sound(CLOAK_SOUND); } #endif j->p_cloakphase++; } } else { if (j->p_cloakphase) { #ifdef SOUND if (myPlayer(j)) { if (j->p_cloakphase == CLOAK_PHASES - 1) { Play_Sound(UNCLOAK_SOUND); } # if !defined(sgi) else Abort_Sound(CLOAK_SOUND); # endif } #endif j->p_cloakphase--; } } void *sprite = S_Ship(j->p_no); dx = j->p_x - me->p_x; dy = j->p_y - me->p_y; if ((sprite == NULL) && (dx > view || dx < -view || dy > view || dy < -view)) continue; dx = dx / SCALE + TWINSIDE / 2; dy = dy / SCALE + TWINSIDE / 2; if ((sprite == NULL) || (pixFlags & NO_CLK_PIX)) if (j->p_flags & PFCLOAK && (j->p_cloakphase == (CLOAK_PHASES - 1))) { if (myPlayer(j) #ifdef RECORDGAME || playback #endif ) { W_WriteBitmap(dx - (cloak_width / 2), dy - (cloak_height / 2), cloakicon, myColor); #ifdef VARY_HULL clearzone[0][clearcount] = dx - (shield_width / 2 + 1); clearzone[1][clearcount] = dy - (shield_height / 2 + 1); clearzone[2][clearcount] = shield_width + 3; clearzone[3][clearcount] = shield_height + 3; clearcount++; #else clearzone[0][clearcount] = dx - (shield_width / 2); clearzone[1][clearcount] = dy - (shield_height / 2); clearzone[2][clearcount] = shield_width; clearzone[3][clearcount] = shield_height; clearcount++; #endif goto shieldlabel; /* draw the shield even when cloaked */ } continue; } if (j->p_status == PALIVE && !(myPlayer(j) && (me->p_flags & PFOBSERV))) { /* * not an observing me */ #ifndef DYNAMIC_BITMAPS switch (j->p_team) { case FED: #ifdef TNG_FED_BITMAPS if (use_tng_fed_bitmaps) ship_bits = tng_fed_bitmaps; else ship_bits = fed_bitmaps; #else ship_bits = fed_bitmaps; #endif break; case ROM: ship_bits = rom_bitmaps; break; case KLI: ship_bits = kli_bitmaps; break; case ORI: ship_bits = ori_bitmaps; break; default: ship_bits = ind_bitmaps; break; } #endif #if defined (VARY_HULL) || defined (BEEPLITE) clearzone[0][clearcount] = dx - (shield_width / 2 + 6); clearzone[1][clearcount] = dy - (shield_height / 2 + 6); clearzone[2][clearcount] = shield_width + 12; clearzone[3][clearcount] = shield_height + 12; clearcount++; #else clearzone[0][clearcount] = dx - (shield_width / 2); clearzone[1][clearcount] = dy - (shield_height / 2); clearzone[2][clearcount] = shield_width; clearzone[3][clearcount] = shield_height; clearcount++; #endif if (sprite != NULL) { clearsize = W_DrawSprite(sprite, dx, dy, TWINSIDE); #if defined (VARY_HULL) if (clearsize > shield_width + 12 #else if (clearsize > shield_width #endif ) { clearcount--; clearzone[0][clearcount] = dx - (clearsize / 2); clearzone[1][clearcount] = dy - (clearsize / 2); clearzone[2][clearcount] = clearsize; clearzone[3][clearcount] = clearsize; clearcount++; } } else if (j->p_team == ROM && j->p_ship.s_type == CRUISER && ROMVLVS) W_WriteBitmap(dx - (j->p_ship.s_width / 2), dy - (j->p_ship.s_height / 2), ROMVLVS_bitmap[rosette(j->p_dir)], playerColor(j)); else W_WriteBitmap(dx - (j->p_ship.s_width / 2), dy - (j->p_ship.s_height / 2), #ifndef DYNAMIC_BITMAPS ship_bits[j->p_ship.s_type][rosette(j->p_dir)], #else ship_bitmaps[PlayerBitmap(j)][rosette(j->p_dir)], #endif playerColor(j)); if (j->p_cloakphase > 0) { if (sprite == NULL) W_WriteBitmap(dx - (cloak_width / 2), dy - (cloak_height / 2), cloakicon, playerColor(j)); if (!myPlayer(j)) /* if myplayer draw the shield */ continue; } shieldlabel: #ifdef BEEPLITE if ((UseLite && emph_player_seq_n[j->p_no] > 0) && (liteflag & LITE_PLAYERS_LOCAL)) { int seq_n = (emph_player_seq_n[j->p_no] * 5 / server_ups) % emph_player_seql_frames; W_WriteBitmap(dx - (emph_player_seql_width / 2), dy - (emph_player_seql_height / 2), emph_player_seql[seq_n], W_White); } #endif #ifdef VARY_HULL if ((myPlayer(j) || isObsLockPlayer(j)) && vary_hull) { int hull_left = (100 * (me->p_ship.s_maxdamage - me->p_damage)) / me->p_ship.s_maxdamage; int hull_num = 7; int hull_color; if (hull_left <= 16) { hull_num = 0; hull_color = W_Red; } else if (hull_left <= 28) { hull_num = 1; hull_color = W_Yellow; } else if (hull_left <= 40) { hull_num = 2; hull_color = W_Green; } else if (hull_left <= 52) { hull_num = 3; hull_color = W_Green; } else if (hull_left <= 64) { hull_num = 4; hull_color = W_Green; } else if (hull_left <= 76) { hull_num = 5; hull_color = W_White; } else if (hull_left <= 88) { hull_num = 6; hull_color = W_White; } else hull_color = playerColor(j); W_WriteBitmap(dx - (shield_width / 2 + 1), dy - (shield_height / 2 + 1), hull[hull_num], hull_color); } #endif #ifdef SOUND if (j->p_no == me->p_no) { if ((sound_flags & PFSHIELD) && !(j->p_flags & PFSHIELD)) Play_Sound(SHIELD_DOWN_SOUND); else if (!(sound_flags & PFSHIELD) && (j->p_flags & PFSHIELD)) Play_Sound(SHIELD_UP_SOUND); } #endif /* * It used to be that if "showShields" was false, shields were not * shown. COW has already stopped accepting showShields flags from * the server, now stop using showShields altogether. * James Soutter (Zork) 4 Jan 95 */ if (j->p_flags & PFSHIELD) { int color = playerColor(j); #ifdef VSHIELD_BITMAPS int shieldnum; if ((myPlayer(j) || isObsLockPlayer(j)) && VShieldBitmaps) { int value; shieldnum = SHIELD_FRAMES * me->p_shield / me->p_ship.s_maxshield; if (shieldnum >= SHIELD_FRAMES) shieldnum = SHIELD_FRAMES - 1; value = 100 * me->p_shield / me->p_ship.s_maxshield; if (value < 34) color = rColor; else if (value < 67) color = yColor; else color = gColor; } else { color = playerColor(j); shieldnum = 2; } #endif if (warnShields && (myPlayer(j) || isObsLockPlayer(j))) { switch (me->p_flags & (PFGREEN | PFYELLOW | PFRED)) { case PFGREEN: color = gColor; break; case PFYELLOW: color = yColor; break; case PFRED: color = rColor; break; } } #ifdef VSHIELD_BITMAPS W_WriteBitmap(dx - (shield_width / 2), dy - (shield_height / 2), shield[shieldnum], color); #else W_WriteBitmap(dx - (shield_width / 2), dy - (shield_height / 2), shield, color); #endif } /* Det circle */ if (detCircle) { if (myPlayer(j)) { int dcr = DETDIST*2/SCALE; int dcx = dx - (dcr/2); int dcy = dy - (dcr/2); W_WriteCircle(w, dcy, dcy, dcr, W_Red); clearzone[0][clearcount] = dcx; clearzone[1][clearcount] = dcy; clearzone[2][clearcount] = dcr + dcr; clearzone[3][clearcount] = dcr + dcr; clearcount++; detCircle--; } } if (j->p_flags & PFCLOAK) /* when cloaked stop here */ continue; { /* drawing of ship number */ int color = playerColor(j); idbuf[0] = *(shipnos + j->p_no); if (myPlayer(j) || isObsLockPlayer(j)) { switch (me->p_flags & (PFGREEN | PFYELLOW | PFRED)) { case PFGREEN: color = gColor; break; case PFYELLOW: color = yColor; break; case PFRED: color = rColor; break; } } W_MaskText(w, dx + (j->p_ship.s_width / 2), dy - (j->p_ship.s_height / 2), color, idbuf, 1, shipFont(j)); clearzone[0][clearcount] = dx + (j->p_ship.s_width / 2); clearzone[1][clearcount] = dy - (j->p_ship.s_height / 2); clearzone[2][clearcount] = W_Textwidth; clearzone[3][clearcount] = W_Textheight; clearcount++; } } else if (j->p_status == PEXPLODE) { int i = j->p_explode * 5 / server_ups; #ifdef SOUND if (j->p_explode == 1) { if (j == me) { #if defined(sgi) Engine_Sound(ENG_OFF); /* stop engine sound */ #endif if (j->p_ship.s_type == STARBASE) Play_Sound(SBEXPLOSION_SOUND); else Play_Sound(EXPLOSION_SOUND); } else if (j->p_ship.s_type == STARBASE) Play_Sound(OTHER_SBEXPLOSION_SOUND); else Play_Sound(OTHER_EXPLOSION_SOUND); } #endif if (sprite != NULL) { clearsize = W_DrawSprite(sprite, dx, dy, TWINSIDE); clearzone[0][clearcount] = dx - (clearsize / 2); clearzone[1][clearcount] = dy - (clearsize / 2); clearzone[2][clearcount] = clearsize; clearzone[3][clearcount] = clearsize; clearcount++; } else { if (i < EX_FRAMES || (i < SBEXPVIEWS && j->p_ship.s_type == STARBASE)) { if (j->p_ship.s_type == STARBASE) { W_WriteBitmap(dx - (sbexp_width / 2), dy - (sbexp_height / 2), sbexpview[i], playerColor(j)); clearzone[0][clearcount] = dx - (sbexp_width / 2); clearzone[1][clearcount] = dy - (sbexp_height / 2); clearzone[2][clearcount] = sbexp_width; clearzone[3][clearcount] = sbexp_height; } else { W_WriteBitmap(dx - (ex_width / 2), dy - (ex_height / 2), expview[i], playerColor(j)); clearzone[0][clearcount] = dx - (ex_width / 2); clearzone[1][clearcount] = dy - (ex_height / 2); clearzone[2][clearcount] = ex_width; clearzone[3][clearcount] = ex_height; } clearcount++; } j->p_explode++; } } /* Now draw his phaser (if it exists) */ php = &phasers[j->p_no]; if (php->ph_status != PHFREE) { #ifdef SOUND if (php->sound_phaser) { Play_Sound(j == me ? PHASER_SOUND : OTHER_PHASER_SOUND); php->sound_phaser = 0; } #endif if ((php->ph_updateFuse -= weaponUpdate) == 0) { /* expire the phaser */ php->ph_status = PHFREE; #ifdef SOUND php->sound_phaser = 0; #endif } else { if (php->ph_status == PHMISS) { /* Here I will have to compute the end coordinate */ tx = PHASEDIST * j->p_ship.s_phaserdamage / 100 * Cos[php->ph_dir]; ty = PHASEDIST * j->p_ship.s_phaserdamage / 100 * Sin[php->ph_dir]; tx = (j->p_x + tx - me->p_x) / SCALE + TWINSIDE / 2; ty = (j->p_y + ty - me->p_y) / SCALE + TWINSIDE / 2; php->ph_fuse = 0; } else if (php->ph_status == PHHIT2) { tx = (php->ph_x - me->p_x) / SCALE + TWINSIDE / 2; ty = (php->ph_y - me->p_y) / SCALE + TWINSIDE / 2; } else { /* start point is dx, dy */ tx = (players[php->ph_target].p_x - me->p_x) / SCALE + TWINSIDE / 2; ty = (players[php->ph_target].p_y - me->p_y) / SCALE + TWINSIDE / 2; } /* * Shrink the phasers if necessary: Measure length in 16ths * to make the maths a little easier for the computer (div * 16 is a 4 bit shift). Add 8 to each sum to round properly. */ if (shrinkPhaserOnMiss || php->ph_status != PHMISS) { if ((myPlayer(j) || isObsLockPlayer(j))) { px = (dx * (16 - phaserShrink) + tx * phaserShrink + 8) / 16; py = (dy * (16 - phaserShrink) + ty * phaserShrink + 8) / 16; } else { px = (dx * (16 - theirPhaserShrink) + tx * theirPhaserShrink + 8) / 16; py = (dy * (16 - theirPhaserShrink) + ty * theirPhaserShrink + 8) / 16; } } else { px = dx; py = dy; } /* Now draw the phasers */ if (friendlyPlayer(j)) { if (highlightFriendlyPhasers && (php->ph_status == PHHIT)) W_CacheLine(w, px, py, tx, ty, foreColor); else { if ((php->ph_fuse % 2) == 1) W_CacheLine(w, px, py, tx, ty, foreColor); else W_CacheLine(w, px, py, tx, ty, phaserColor(php)); } php->ph_fuse++; clearline[0][clearlcount] = px; clearline[1][clearlcount] = py; clearline[2][clearlcount] = tx; clearline[3][clearlcount] = ty; clearlcount++; } else { if ((enemyPhasers > 0) && (enemyPhasers <= 10)) { unsigned char dir; if (tx == px && ty == py) continue; #ifdef SHORT_PACKETS if (php->ph_status != PHMISS) { /* KOC 10/20/95 */ /* hack for SP_2 */ #define XPI 3.1415926 dir = (unsigned char) nint(atan2((double) (ty-py), (double) (tx-px))/XPI * 128.0); #undef XPI } else #endif { dir = NORMALIZE(php->ph_dir + 64); } wx = px + enemyPhasers * Cos[dir]; wy = py + enemyPhasers * Sin[dir]; lx = px - enemyPhasers * Cos[dir]; ly = py - enemyPhasers * Sin[dir]; W_MakePhaserLine(w, wx, wy, tx, ty, shipCol[remap[j->p_team]]); W_MakePhaserLine(w, lx, ly, tx, ty, shipCol[remap[j->p_team]]); php->ph_fuse++; clearline[0][clearlcount] = wx; clearline[1][clearlcount] = wy; clearline[2][clearlcount] = tx; clearline[3][clearlcount] = ty; clearlcount++; clearline[0][clearlcount] = lx; clearline[1][clearlcount] = ly; clearline[2][clearlcount] = tx; clearline[3][clearlcount] = ty; clearlcount++; } else { W_MakePhaserLine(w, px, py, tx, ty, shipCol[remap[j->p_team]]); php->ph_fuse++; clearline[0][clearlcount] = px; clearline[1][clearlcount] = py; clearline[2][clearlcount] = tx; clearline[3][clearlcount] = ty; clearlcount++; } } } } /* * ATM - show tractor/pressor beams (modified by James Collins) * showTractorPressor is a variable set by xtrekrc. */ if (showTractorPressor) { if ((myPlayer(j) || (F_show_all_tractors)) && isAlive(me) && isAlive(j) && (j->p_flags & PFTRACT || j->p_flags & PFPRESS)) { double theta; unsigned char dir; int lx[2], ly[2], target_width; struct player *tractee; if (j->p_tractor < 0 || j->p_tractor >= MAXPLAYER) continue; if (j->p_flags & PFOBSERV) continue; tractee = &players[j->p_tractor]; if (tractee->p_status != PALIVE || ((tractee->p_flags & PFCLOAK) && (tractee->p_cloakphase == (CLOAK_PHASES - 1)))) continue; if (tcounter >= 2) { /* continue tractor stuff */ if (!continuetractor) tcounter--; px = (tractee->p_x - me->p_x) / SCALE + TWINSIDE / 2; py = (tractee->p_y - me->p_y) / SCALE + TWINSIDE / 2; if (px == dx && py == dy) continue; /* this had better be last in for(;;) */ #define XPI 3.1415926 theta = atan2((double) (px-dx), (double) (dy-py))+XPI / 2.0; dir = (unsigned char) nint(theta/XPI * 128.0); if (tractee->p_flags & PFSHIELD) target_width = shield_width; else target_width = tractee->p_ship.s_width / 2; lx[0] = px + (Cos[dir] * (target_width / 2)); ly[0] = py + (Sin[dir] * (target_width / 2)); lx[1] = px - (Cos[dir] * (target_width / 2)); ly[1] = py - (Sin[dir] * (target_width / 2)); #undef XPI if (j->p_flags & PFPRESS) { W_MakeTractLine(w, dx, dy, lx[0], ly[0], W_Yellow); W_MakeTractLine(w, dx, dy, lx[1], ly[1], W_Yellow); } else { W_MakeTractLine(w, dx, dy, lx[0], ly[0], W_Green); W_MakeTractLine(w, dx, dy, lx[1], ly[1], W_Green); } #ifdef WIN32 /* * Fixup for minor inconsistencies between SAC's interger * linedraw and Win32 LineTo() */ tpline = clearlcount; #endif clearline[0][clearlcount] = dx; clearline[1][clearlcount] = dy; clearline[2][clearlcount] = lx[0]; clearline[3][clearlcount] = ly[0]; clearlcount++; clearline[0][clearlcount] = dx; clearline[1][clearlcount] = dy; clearline[2][clearlcount] = lx[1]; clearline[3][clearlcount] = ly[1]; clearlcount++; } } else if (!(me->p_flags & PFPRESS || me->p_flags & PFTRACT)) tcounter = 2; } } return; } static void DrawTorps(void) { register struct torp *k, *t; register int dx, dy; int numdetframes, frame; register int tno, tsub; void *sprite; struct player *j; int torpCount; const int view = SCALE * TWINSIDE / 2; for (t=torps, j=players, tno=0; j != players + MAXPLAYER; t += MAXTORP, ++j, tno += MAXTORP) { #ifdef SOUND if (j != me) num_other_torps += j->p_ntorp; #endif torpCount = j->p_ntorp; for (tsub=0, k=t; torpCount > 0; ++k, ++tsub) { /* * Work until all the torps for a given player have been examined. * In the current INL server torps are allocated from low to high * so this loop must work so that k is incrimented rather than * decrimented. */ if (!k->t_status) continue; --torpCount; /* * Age a torp only if some weapon has been updated * (eg this is not a pause). */ if ((k->t_updateFuse -= weaponUpdate) == 0) { if (k->t_status != TEXPLODE) { /* expire the torp */ k->t_status = TFREE; j->p_ntorp--; continue; } k->t_updateFuse = 100; /* leave the torp to explode on its own */ } dx = k->t_x - me->p_x; dy = k->t_y - me->p_y; if (dx > view || dx < -view || dy > view || dy < -view) { /* * Call any torps off screen "free" (if owned by other) */ if (k->t_status == TEXPLODE && j != me) { k->t_status = TFREE; j->p_ntorp--; } continue; } dx = dx / SCALE + TWINSIDE / 2; dy = dy / SCALE + TWINSIDE / 2; if ((sprite = S_Torp(tno + tsub)) != NULL) { clearsize = W_DrawSprite(sprite, dx, dy, TWINSIDE); clearzone[0][clearcount] = dx - (clearsize / 2); clearzone[1][clearcount] = dy - (clearsize / 2); clearzone[2][clearcount] = clearsize; clearzone[3][clearcount] = clearsize; clearcount++; } else if (k->t_status == TEXPLODE) { k->t_fuse--; numdetframes = NUMDETFRAMES * server_ups / 5; frame = k->t_fuse * 5 / server_ups; if (frame > NUMDETFRAMES - 1) frame = NUMDETFRAMES - 1; if (k->t_fuse <= 0) { k->t_status = TFREE; j->p_ntorp--; continue; } if (k->t_fuse >= numdetframes) k->t_fuse = numdetframes-1; #ifdef SOUND if (k->t_fuse == numdetframes-1) Play_Sound(TORP_HIT_SOUND); #endif W_WriteBitmap(dx - (cloud_width / 2), dy - (cloud_height / 2), cloud[frame], torpColor(k)); clearzone[0][clearcount] = dx - (cloud_width / 2); clearzone[1][clearcount] = dy - (cloud_height / 2); clearzone[2][clearcount] = cloud_width; clearzone[3][clearcount] = cloud_height; clearcount++; } else if (j != me && ((k->t_war & me->p_team) || (j->p_team & (me->p_hostile | me->p_swar)))) { /* * Solid. Looks strange. W_FillArea(w, dx-(etorp_width/2), dy-(etorp_height/2), etorp_width, etorp_height, torpColor(k)); */ /* XFIX */ W_CacheLine(w, dx-(etorp_width/2), dy-(etorp_height/2), dx+(etorp_width/2), dy+(etorp_height/2), torpColor(k)); W_CacheLine(w, dx+(etorp_width/2), dy-(etorp_height/2), dx-(etorp_width/2), dy+(etorp_height/2), torpColor(k)); /* W_WriteBitmap(dx-(etorp_width/2), dy-(etorp_height/2), etorp, torpColor(k)); */ clearzone[0][clearcount] = dx - (etorp_width / 2); clearzone[1][clearcount] = dy - (etorp_height / 2); clearzone[2][clearcount] = etorp_width; clearzone[3][clearcount] = etorp_height; clearcount++; } else { W_CacheLine(w, dx-(mtorp_width/2), dy, dx+(mtorp_width/2), dy, torpColor(k)); W_CacheLine(w, dx, dy-(mtorp_width/2), dx, dy+(mtorp_width/2), torpColor(k)); /* W_WriteBitmap(dx - (mtorp_width/2), dy - (mtorp_height/2), mtorp, torpColor(k)); */ clearzone[0][clearcount] = dx - (mtorp_width / 2); clearzone[1][clearcount] = dy - (mtorp_height / 2); clearzone[2][clearcount] = mtorp_width; clearzone[3][clearcount] = mtorp_height; clearcount++; } } } return; } void DrawPlasmaTorps(void) { register struct plasmatorp *pt; register int dx, dy; int numdetframes, frame; register int ptno; void *sprite; const int view = SCALE * TWINSIDE / 2; /* * MAXPLASMA is small so work through all the plasmas rather than * look at the number of outstanding plasma torps for each player. */ for (pt=plasmatorps+(MAXPLASMA * MAXPLAYER)-1, ptno=(MAXPLASMA * MAXPLAYER)-1; pt >= plasmatorps; --pt, --ptno) { if (!pt->pt_status) continue; #ifdef SOUND if (pt->pt_owner != me->p_no) num_other_plasma++; #endif if ((pt->pt_updateFuse -= weaponUpdate) == 0) { if (pt->pt_status != PTEXPLODE) { /* expire the plasma torpedo */ pt->pt_status = PTFREE; players[pt->pt_owner].p_nplasmatorp--; continue; } pt->pt_updateFuse = 100; /* leave the torp to explode on its own */ } dx = pt->pt_x - me->p_x; dy = pt->pt_y - me->p_y; if (dx > view || dx < -view || dy > view || dy < -view) continue; dx = dx / SCALE + TWINSIDE / 2; dy = dy / SCALE + TWINSIDE / 2; if ((sprite = S_Plasma(ptno)) != NULL) { clearsize = W_DrawSprite(sprite, dx, dy, TWINSIDE); clearzone[0][clearcount] = dx - (clearsize / 2); clearzone[1][clearcount] = dy - (clearsize / 2); clearzone[2][clearcount] = clearsize; clearzone[3][clearcount] = clearsize; clearcount++; } else if (pt->pt_status == PTEXPLODE) { pt->pt_fuse--; numdetframes = NUMDETFRAMES * server_ups / 5; frame = pt->pt_fuse * 5 / server_ups; if (frame > NUMDETFRAMES-1) frame = NUMDETFRAMES-1; if (pt->pt_fuse <= 0) { pt->pt_status = PTFREE; players[pt->pt_owner].p_nplasmatorp--; continue; } if (pt->pt_fuse >= numdetframes) pt->pt_fuse = numdetframes-1; #ifdef SOUND if (pt->pt_fuse == numdetframes-1) Play_Sound(PLASMA_HIT_SOUND); #endif W_WriteBitmap(dx - (plasmacloud_width / 2), dy - (plasmacloud_height / 2), plasmacloud[frame], plasmatorpColor(pt)); clearzone[0][clearcount] = dx - (plasmacloud_width / 2); clearzone[1][clearcount] = dy - (plasmacloud_height / 2); clearzone[2][clearcount] = plasmacloud_width; clearzone[3][clearcount] = plasmacloud_height; clearcount++; } /* * needmore: if (pt->pt_war & me->p_team) */ else if (pt->pt_owner != me->p_no && ((pt->pt_war & me->p_team) || (players[pt->pt_owner].p_team & (me->p_hostile | me->p_swar)))) { W_WriteBitmap(dx - (eplasmatorp_width / 2), dy - (eplasmatorp_height / 2), eplasmatorp, plasmatorpColor(pt)); clearzone[0][clearcount] = dx - (eplasmatorp_width / 2); clearzone[1][clearcount] = dy - (eplasmatorp_height / 2); clearzone[2][clearcount] = eplasmatorp_width; clearzone[3][clearcount] = eplasmatorp_height; clearcount++; } else { W_WriteBitmap(dx - (mplasmatorp_width / 2), dy - (mplasmatorp_height / 2), mplasmatorp, plasmatorpColor(pt)); clearzone[0][clearcount] = dx - (mplasmatorp_width / 2); clearzone[1][clearcount] = dy - (mplasmatorp_height / 2); clearzone[2][clearcount] = mplasmatorp_width; clearzone[3][clearcount] = mplasmatorp_height; clearcount++; } } return; } /* draws hockey lines, galaxy edges, tactical border alert colour, and lock icon */ static void DrawMisc(void) { register struct player *j; register int dx, dy; const int view = SCALE * TWINSIDE / 2; #ifdef HOCKEY_LINES register struct s_line *sl; const int HALF_WINSIDE = TWINSIDE / 2; int ex, ey, sx, sy; #endif #ifdef HOCKEY_LINES if (hockey_s_lines && 1) for (sl = s_lines + NUM_HOCKEY_LINES - 1; sl >= s_lines; --sl) { /* Treat the line differently based on the orientation */ if (sl->orientation == S_LINE_VERTICAL) { if (((sx = (sl->begin_x - me->p_x) / SCALE) < HALF_WINSIDE) && (sx > -HALF_WINSIDE)) { sx += HALF_WINSIDE; ex = sx; if ((sy = HALF_WINSIDE - (me->p_y - sl->begin_y) / SCALE) < 0) sy = 0; if (sy > (TWINSIDE - 1)) sy = TWINSIDE - 1; if ((ey = HALF_WINSIDE - (me->p_y - sl->end_y) / SCALE) < 0) ey = 0; if (ey > (TWINSIDE - 1)) ey = TWINSIDE - 1; if (sy == ey) continue; } else continue; } else if (sl->orientation == S_LINE_HORIZONTAL) { if (((sy = (sl->begin_y - me->p_y) / SCALE) < HALF_WINSIDE) && (sy > -HALF_WINSIDE)) { sy += HALF_WINSIDE; ey = sy; if ((sx = HALF_WINSIDE - (me->p_x - sl->begin_x) / SCALE) < 0) sx = 0; if (sx > (TWINSIDE - 1)) sx = TWINSIDE - 1; if ((ex = HALF_WINSIDE - (me->p_x - sl->end_x) / SCALE) < 0) ex = 0; if (ex > (TWINSIDE - 1)) ex = TWINSIDE - 1; if (sx == ex) continue; } else continue; } else continue; W_CacheLine(w, sx, sy, ex, ey, sl->color); clearline[0][clearlcount] = sx; clearline[1][clearlcount] = sy; clearline[2][clearlcount] = ex; clearline[3][clearlcount] = ey; clearlcount++; } /* End for Hockey Lines * * * * Ends the if, too */ #endif /* HOCKEY_LINES */ /* Draw Edges */ if (me->p_x < (TWINSIDE / 2) * SCALE) { dx = (TWINSIDE / 2) - (me->p_x) / SCALE; sy = (TWINSIDE / 2) + (0 - me->p_y) / SCALE; ey = (TWINSIDE / 2) + (GWIDTH - me->p_y) / SCALE; if (sy < 0) sy = 0; if (ey > TWINSIDE - 1) ey = TWINSIDE - 1; /* XFIX */ W_CacheLine(w, dx, sy, dx, ey, warningColor); /* W_MakeLine(w, dx, sy, dx, ey, warningColor); */ clearline[0][clearlcount] = dx; clearline[1][clearlcount] = sy; clearline[2][clearlcount] = dx; clearline[3][clearlcount] = ey; clearlcount++; } if ((GWIDTH - me->p_x) < (TWINSIDE / 2) * SCALE) { dx = (TWINSIDE / 2) + (GWIDTH - me->p_x) / SCALE; sy = (TWINSIDE / 2) + (0 - me->p_y) / SCALE; ey = (TWINSIDE / 2) + (GWIDTH - me->p_y) / SCALE; if (sy < 0) sy = 0; if (ey > TWINSIDE - 1) ey = TWINSIDE - 1; /* XFIX */ W_CacheLine(w, dx, sy, dx, ey, warningColor); /* W_MakeLine(w, dx, sy, dx, ey, warningColor); */ clearline[0][clearlcount] = dx; clearline[1][clearlcount] = sy; clearline[2][clearlcount] = dx; clearline[3][clearlcount] = ey; clearlcount++; } if (me->p_y < (TWINSIDE / 2) * SCALE) { dy = (TWINSIDE / 2) - (me->p_y) / SCALE; sx = (TWINSIDE / 2) + (0 - me->p_x) / SCALE; ex = (TWINSIDE / 2) + (GWIDTH - me->p_x) / SCALE; if (sx < 0) sx = 0; if (ex > TWINSIDE - 1) ex = TWINSIDE - 1; /* XFIX */ W_CacheLine(w, sx, dy, ex, dy, warningColor); /* W_MakeLine(w, sx, dy, ex, dy, warningColor); */ clearline[0][clearlcount] = sx; clearline[1][clearlcount] = dy; clearline[2][clearlcount] = ex; clearline[3][clearlcount] = dy; clearlcount++; } if ((GWIDTH - me->p_y) < (TWINSIDE / 2) * SCALE) { dy = (TWINSIDE / 2) + (GWIDTH - me->p_y) / SCALE; sx = (TWINSIDE / 2) + (0 - me->p_x) / SCALE; ex = (TWINSIDE / 2) + (GWIDTH - me->p_x) / SCALE; if (sx < 0) sx = 0; if (ex > TWINSIDE - 1) ex = TWINSIDE - 1; /* XFIX */ W_CacheLine(w, sx, dy, ex, dy, warningColor); /* W_MakeLine(w, sx, dy, ex, dy, warningColor); */ clearline[0][clearlcount] = sx; clearline[1][clearlcount] = dy; clearline[2][clearlcount] = ex; clearline[3][clearlcount] = dy; clearlcount++; } /* Change border color to signify alert status */ if (oldalert != (me->p_flags & (PFGREEN | PFYELLOW | PFRED))) { oldalert = (me->p_flags & (PFGREEN | PFYELLOW | PFRED)); switch (oldalert) { case PFGREEN: if (extraBorder) W_ChangeBorder(w, gColor); W_ChangeBorder(baseWin, gColor); W_ChangeBorder(iconWin, gColor); #if defined(SOUND) && !defined(sgi) Abort_Sound(REDALERT_SOUND); #endif break; case PFYELLOW: if (extraBorder) W_ChangeBorder(w, yColor); W_ChangeBorder(baseWin, yColor); W_ChangeBorder(iconWin, yColor); #if defined(SOUND) && !defined(sgi) Abort_Sound(REDALERT_SOUND); #endif break; case PFRED: if (extraBorder) W_ChangeBorder(w, rColor); W_ChangeBorder(baseWin, rColor); W_ChangeBorder(iconWin, rColor); #ifdef SOUND Play_Sound(REDALERT_SOUND); #endif break; } } #ifdef SOUND if (sound_torps < me->p_ntorp) Play_Sound(FIRE_TORP_SOUND); if (sound_other_torps < num_other_torps) Play_Sound(OTHER_FIRE_TORP_SOUND); if (sound_plasma < me->p_nplasmatorp) Play_Sound(FIRE_PLASMA_SOUND); if (sound_other_plasma < num_other_plasma) Play_Sound(OTHER_FIRE_PLASMA_SOUND); sound_flags = me->p_flags; sound_torps = me->p_ntorp; sound_other_torps = num_other_torps; num_other_torps = 0; sound_plasma = me->p_nplasmatorp; sound_other_plasma = num_other_plasma; num_other_plasma = 0; #endif /* show 'lock' icon on local map (Actually an EM hack ) */ if ((showLock & 2) && !(me->p_flags & PFOBSERV)) { int tri_x = -1, tri_y = -1, facing = 0; int tri_size = 4; if (me->p_flags & PFPLOCK) { /* locked onto a ship */ j = &players[me->p_playerl]; if (!(j->p_flags & PFCLOAK)) { dx = j->p_x - me->p_x; dy = j->p_y - me->p_y; if (ABS(dx) < view && ABS(dy) < view) { dx = dx / SCALE + TWINSIDE / 2; dy = dy / SCALE + TWINSIDE / 2; tri_x = dx + 0; tri_y = dy + 20; /* below ship */ facing = 1; } /* printf("Drawing local triangle at %d %d\n", tri_x, tri_y); */ } } else if (me->p_flags & PFPLLOCK) { /* locked onto a planet */ struct planet *l = &planets[me->p_planet]; dx = l->pl_x - me->p_x; dy = l->pl_y - me->p_y; if (ABS(dx) < view && ABS(dy) < view) { dx = dx / SCALE + TWINSIDE / 2; dy = dy / SCALE + TWINSIDE / 2; tri_x = dx; tri_y = dy - 20; /* below planet */ facing = 0; } /* printf("Drawing local triangle at %d %d\n", tri_x, tri_y); */ } if (tri_x != -1) { W_WriteTriangle(w, tri_x, tri_y, 4, facing, foreColor); clearzone[0][clearcount] = tri_x - tri_size - 1; clearzone[1][clearcount] = tri_y - 1 + (facing ? 0 : -tri_size); clearzone[2][clearcount] = tri_size * 2 + 2; clearzone[3][clearcount] = tri_size + 2; clearcount++; } } } extern void local(void) /* * Draw out the 'tactical' map */ { if (me->p_x < 0) return; DrawPlanets(); DrawShips(); DrawTorps(); DrawPlasmaTorps(); weaponUpdate = 0; DrawMisc(); } extern void clearLocal(void) /* * Clear the local map (intelligently rather than just simply wiping * the map). */ { if (W_FastClear) { W_ClearWindow(w); clearcount = 0; clearlcount = 0; } else { #ifndef WIN32 while (clearcount) { clearcount--; /* XFIX */ W_CacheClearArea(w, clearzone[0][clearcount], clearzone[1][clearcount], clearzone[2][clearcount], clearzone[3][clearcount]); /* W_ClearArea(w, clearzone[0][clearcount], * * * clearzone[1][clearcount], clearzone[2][clearcount], * * * clearzone[3][clearcount]); */ } while (clearlcount) { clearlcount--; /* XFIX */ W_CacheLine(w, clearline[0][clearlcount], clearline[1][clearlcount], clearline[2][clearlcount], clearline[3][clearlcount], backColor); /* W_MakeLine(w, clearline[0][clearlcount], * * * clearline[1][clearlcount], clearline[2][clearlcount], * * * clearline[3][clearlcount], backColor); */ } /* XFIX */ W_FlushClearAreaCache(w); W_FlushLineCaches(w); #else // Much more efficient way of clearing -- X programmers take note! W_ClearAreas(w, clearzone[0], clearzone[1], clearzone[2], clearzone[3], clearcount); clearcount = 0; if (tpline != -1) { /* Fixup for SAC's integer linedraw */ W_MakeTractLine(w, clearline[0][tpline], clearline[1][tpline], clearline[2][tpline], clearline[3][tpline], backColor); W_MakeTractLine(w, clearline[0][tpline + 1], clearline[1][tpline + 1], clearline[2][tpline + 1], clearline[3][tpline + 1], backColor); tpline = -1; } W_MakeLines(w, clearline[0], clearline[1], clearline[2], clearline[3], clearlcount, backColor); clearlcount = 0; #endif } } netrek-client-cow-3.3.2/configure0000775000175000017500000060227113657750472015772 0ustar jamesjames#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="name.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS SDL_MIXER_LIBS HAVE_SDL_FALSE HAVE_SDL_TRUE SDL_LIBS SDL_CFLAGS SDL_CONFIG LIBOBJS INCS NOWIN32 NOX11 XMKMF EGREP GREP LN_S CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_x with_sdl_prefix with_sdl_exec_prefix enable_sdltest ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP XMKMF' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-sdltest Do not try to compile and run a test SDL program Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if ${ac_cv_target+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- ac_config_headers="$ac_config_headers config.h" # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac #-------------------------------------------------------------------- # Include sys/select.h if it exists and if it supplies things # that appear to be useful. This appears to be true only on # the RS/6000 under AIX. Some systems like OSF/1 have a # sys/select.h that's of no use, and other systems like SCO # UNIX have a sys/select.h that's pernicious. If there isn't # a sys/select.h, then make sure that "fd_set" is defined in # sys/types.h. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fd_set requires sys/select.h" >&5 $as_echo_n "checking if fd_set requires sys/select.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { fd_set readMask, writeMask; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "fd_set" >/dev/null 2>&1; then : $as_echo "#define NEED_SYS_SELECT_H 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else $as_echo "#define NO_FD_SET 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: fd_set missing" >&5 $as_echo "fd_set missing" >&6; } fi rm -f conftest* fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext #-------------------------------------------------------------------- # Check for various typedefs and provide substitutes if # they don't exist. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in unistd.h memory.h math.h stdlib.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/timeb.h sys/ptyio.h sys/fcntl.h fcntl.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in ctype.h machine/endian.h sys/resource.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/wait.h netinet/in.h netinet/tcp.h sys/filio.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if ${ac_cv_type_uid_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for itimer in time.h" >&5 $as_echo_n "checking for itimer in time.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "itimerval" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else $as_echo "#define NEED_SYS_TIME_H 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : else if test "$ac_cv_type_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 $as_echo "$ac_cv_sizeof_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for u_int in sys/types.h" >&5 $as_echo_n "checking for u_int in sys/types.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "u_int" >/dev/null 2>&1; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else $as_echo "#define NO_U_INT 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PATH_MAX in limits.h" >&5 $as_echo_n "checking for PATH_MAX in limits.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include PATH_MAX _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "PATH_MAX" >/dev/null 2>&1; then : $as_echo "#define NO_PATH_MAX 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi rm -f conftest* for ac_func in strcmpi strncmpi do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done #-------------------------------------------------------------------- # Locate the X11 header files and the X11 library archive. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi $as_echo "#define HAVE_X11 1" >>confdefs.h $as_echo "#define HAVE_X11_XPM_H 1" >>confdefs.h NOWIN32="#" if test -z "$NOX11" ; then if test -z "$x_libraries" ; then echo checking for X11 header files XINCLUDES="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else XINCLUDES="nope" fi rm -f conftest.err conftest.i conftest.$ac_ext if test "$XINCLUDES" = nope; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include \ /usr/include/X11R4 /usr/X11R5/include /usr/include/X11R5 \ /usr/openwin/include /usr/X11/include /pub/X11R5/include \ /usr/local/X11R5/include /usr/X11R6/include /usr/include/X11R6 \ /pub/X11R6/include /usr/local/X11R6/include" for i in $dirs ; do if test -r $i/X11/Intrinsic.h; then XINCLUDES=" -I$i" fi done fi if test "$XINCLUDES" = nope; then echo "Warning: couldn't find any X11 include files." XINCLUDES="" fi echo "checking for X11 library archive" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lX11" >&5 $as_echo_n "checking for main in -lX11... " >&6; } if ${ac_cv_lib_X11_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_main=yes else ac_cv_lib_X11_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_main" >&5 $as_echo "$ac_cv_lib_X11_main" >&6; } if test "x$ac_cv_lib_X11_main" = xyes; then : XLIBSWLIB="-lX11" else XLIBSWLIB=nope fi if test "$XLIBSWLIB" = nope; then dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib \ /usr/lib/X11R4 /usr/X11R5/lib /usr/lib/X11R5 /usr/openwin/lib \ /usr/X11/lib /pub/X11R5/lib /usr/local/X11R5/lib \ /usr/X11R6/lib /usr/lib/X11R6 /pub/X11R6/lib /usr/local/X11R6/lib" for i in $dirs ; do if test -r $i/libX11.a; then XLIBSWDIR="-L$i" XLIBSWLIB="-lX11" fi done fi if test "$XLIBSWLIB" = nope ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXwindow" >&5 $as_echo_n "checking for main in -lXwindow... " >&6; } if ${ac_cv_lib_Xwindow_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXwindow $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xwindow_main=yes else ac_cv_lib_Xwindow_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xwindow_main" >&5 $as_echo "$ac_cv_lib_Xwindow_main" >&6; } if test "x$ac_cv_lib_Xwindow_main" = xyes; then : XLIBSWLIB=-lXwindow fi fi if test "$XLIBSWLIB" = nope ; then echo "Warning: couldn't find the X11 library archive. Using -lX11." XLIBSWLIB=-lX11 fi else XINCLUDES="-I$x_includes" XLIBSWDIR="-L$x_libraries" XLIBSWLIB="-lX11" fi fi SAVELIBS="$LIBS" LIBS="$LIBS $XLIBSWDIR $XLIBSWLIB" SAVEINCS="$INCS" INCS="$INCS $XINCLUDES" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXpm" >&5 $as_echo_n "checking for main in -lXpm... " >&6; } if ${ac_cv_lib_Xpm_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXpm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xpm_main=yes else ac_cv_lib_Xpm_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xpm_main" >&5 $as_echo "$ac_cv_lib_Xpm_main" >&6; } if test "x$ac_cv_lib_Xpm_main" = xyes; then : $as_echo "#define HAVE_XPM 1" >>confdefs.h XPMLIBS="-lXpm" fi for ac_header in X11/xpm.h do : ac_fn_c_check_header_mongrel "$LINENO" "X11/xpm.h" "ac_cv_header_X11_xpm_h" "$ac_includes_default" if test "x$ac_cv_header_X11_xpm_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_X11_XPM_H 1 _ACEOF fi done LIBS="$SAVELIBS" INCS="$SAVEINCS" # Fix link order for Xpm XLIBSW="$XLIBSWDIR $XPMLIBS $XLIBSWLIB" INCS="$INCS $XINCLUDES" LIBS="$LIBS $XLIBSW" #-------------------------------------------------------------------- # Check for the existence of various libraries. The order here # is important, so that then end up in the right order in the # command line generated by Make. #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXbsd" >&5 $as_echo_n "checking for main in -lXbsd... " >&6; } if ${ac_cv_lib_Xbsd_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xbsd_main=yes else ac_cv_lib_Xbsd_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xbsd_main" >&5 $as_echo "$ac_cv_lib_Xbsd_main" >&6; } if test "x$ac_cv_lib_Xbsd_main" = xyes; then : LIBS="$LIBS -lXbsd" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsocket" >&5 $as_echo_n "checking for main in -lsocket... " >&6; } if ${ac_cv_lib_socket_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_main=yes else ac_cv_lib_socket_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_main" >&5 $as_echo "$ac_cv_lib_socket_main" >&6; } if test "x$ac_cv_lib_socket_main" = xyes; then : LIBS="$LIBS -lsocket" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 $as_echo_n "checking for main in -linet... " >&6; } if ${ac_cv_lib_inet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet_main=yes else ac_cv_lib_inet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 $as_echo "$ac_cv_lib_inet_main" >&6; } if test "x$ac_cv_lib_inet_main" = xyes; then : LIBS="$LIBS -linet" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lnsl" >&5 $as_echo_n "checking for main in -lnsl... " >&6; } if ${ac_cv_lib_nsl_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_main=yes else ac_cv_lib_nsl_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_main" >&5 $as_echo "$ac_cv_lib_nsl_main" >&6; } if test "x$ac_cv_lib_nsl_main" = xyes; then : LIBS="$LIBS -lnsl" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lseq" >&5 $as_echo_n "checking for main in -lseq... " >&6; } if ${ac_cv_lib_seq_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lseq $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_seq_main=yes else ac_cv_lib_seq_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_seq_main" >&5 $as_echo "$ac_cv_lib_seq_main" >&6; } if test "x$ac_cv_lib_seq_main" = xyes; then : LIBS="$LIBS -lseq" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lsun" >&5 $as_echo_n "checking for main in -lsun... " >&6; } if ${ac_cv_lib_sun_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsun $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sun_main=yes else ac_cv_lib_sun_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_main" >&5 $as_echo "$ac_cv_lib_sun_main" >&6; } if test "x$ac_cv_lib_sun_main" = xyes; then : LIBS="$LIBS -lsun" fi #-------------------------------------------------------------------- # Check for type of signals #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF for ac_func in usleep random setstate strftime ftime do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 $as_echo_n "checking for main in -lm... " >&6; } if ${ac_cv_lib_m_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_main=yes else ac_cv_lib_m_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 $as_echo "$ac_cv_lib_m_main" >&6; } if test "x$ac_cv_lib_m_main" = xyes; then : LIBS="$LIBS -lm" fi for ac_func in nint do : ac_fn_c_check_func "$LINENO" "nint" "ac_cv_func_nint" if test "x$ac_cv_func_nint" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NINT 1 _ACEOF fi done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "rint" >/dev/null 2>&1; then : else $as_echo "#define NEED_RINT_DEC 1" >>confdefs.h fi rm -f conftest* ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep" if test "x$ac_cv_func_usleep" = xyes; then : $as_echo "#define HAVE_USLEEP 1" >>confdefs.h else case " $LIBOBJS " in *" usleep.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS usleep.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "setstate" "ac_cv_func_setstate" if test "x$ac_cv_func_setstate" = xyes; then : $as_echo "#define HAVE_SETSTATE 1" >>confdefs.h else case " $LIBOBJS " in *" setstate.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS setstate.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" if test "x$ac_cv_func_strdup" = xyes; then : $as_echo "#define HAVE_STRDUP 1" >>confdefs.h else case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "rint" "ac_cv_func_rint" if test "x$ac_cv_func_rint" = xyes; then : $as_echo "#define HAVE_RINT 1" >>confdefs.h else case " $LIBOBJS " in *" rint.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS rint.$ac_objext" ;; esac fi #-------------------------------------------------------------------- # Check for system dependent programs #-------------------------------------------------------------------- #-------------------------------------------------------------------- # Check for Imlib #-------------------------------------------------------------------- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing imlib_load_image" >&5 $as_echo_n "checking for library containing imlib_load_image... " >&6; } if ${ac_cv_search_imlib_load_image+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char imlib_load_image (); int main () { return imlib_load_image (); ; return 0; } _ACEOF for ac_lib in '' Imlib2; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_imlib_load_image=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_imlib_load_image+:} false; then : break fi done if ${ac_cv_search_imlib_load_image+:} false; then : else ac_cv_search_imlib_load_image=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_imlib_load_image" >&5 $as_echo "$ac_cv_search_imlib_load_image" >&6; } ac_res=$ac_cv_search_imlib_load_image if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "Could not find Imlib2" "$LINENO" 5 fi #-------------------------------------------------------------------- # Check for SDL #-------------------------------------------------------------------- # Check whether --with-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then : withval=$with_sdl_prefix; sdl_prefix="$withval" else sdl_prefix="" fi # Check whether --with-sdl-exec-prefix was given. if test "${with_sdl_exec_prefix+set}" = set; then : withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else sdl_exec_prefix="" fi # Check whether --enable-sdltest was given. if test "${enable_sdltest+set}" = set; then : enableval=$enable_sdltest; else enable_sdltest=yes fi if test x$sdl_exec_prefix != x ; then sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi as_save_PATH="$PATH" if test "x$prefix" != xNONE; then PATH="$prefix/bin:$prefix/usr/bin:$PATH" fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SDL_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 $as_echo "$SDL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi PATH="$as_save_PATH" min_sdl_version=1.2.4 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 $as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_sdl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_SDL 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" : fi rm -f conf.sdltest if test x"$no_sdl" != x"yes"; then HAVE_SDL_TRUE= HAVE_SDL_FALSE='#' else HAVE_SDL_TRUE='#' HAVE_SDL_FALSE= fi if test x$no_sdl != xyes; then have_SDLmixer=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mix_OpenAudio in -lSDL_mixer" >&5 $as_echo_n "checking for Mix_OpenAudio in -lSDL_mixer... " >&6; } if ${ac_cv_lib_SDL_mixer_Mix_OpenAudio+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSDL_mixer $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char Mix_OpenAudio (); int main () { return Mix_OpenAudio (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_SDL_mixer_Mix_OpenAudio=yes else ac_cv_lib_SDL_mixer_Mix_OpenAudio=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_SDL_mixer_Mix_OpenAudio" >&5 $as_echo "$ac_cv_lib_SDL_mixer_Mix_OpenAudio" >&6; } if test "x$ac_cv_lib_SDL_mixer_Mix_OpenAudio" = xyes; then : have_SDLmixer=yes SDL_MIXER_LIBS="-lSDL_mixer" fi if test x$have_SDLmixer != xyes; then as_fn_error $? "*** Can't find the SDL_mixer library Try: http://www.libsdl.org/projects/SDL_mixer/" "$LINENO" 5 fi fi #-------------------------------------------------------------------- # Emit output #-------------------------------------------------------------------- ac_config_files="$ac_config_files system.mk" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${HAVE_SDL_TRUE}" && test -z "${HAVE_SDL_FALSE}"; then as_fn_error $? "conditional \"HAVE_SDL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "system.mk") CONFIG_FILES="$CONFIG_FILES system.mk" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi netrek-client-cow-3.3.2/lagmeter.h0000664000175000017500000000016213657750470016021 0ustar jamesjames/* lagmeter.c */ int lMeterHeight(void); int lMeterWidth(void); void redrawLMeter(void); void updateLMeter(void); netrek-client-cow-3.3.2/REPOSITORIES0000664000175000017500000000105713657750470015726 0ustar jamesjamesdevelopers http://james.tooraweenah.com/darcs/netrek-client-cow/ http://sethwklein.net/projects/netrek/darcs/netrek-client-cow/ http://www.ninjatronics.com/darcs/netrek-client-cow/ http://netrek.warped.us/netrek-client-cow/ project http://www.netrek.org/repos/netrek-client-cow/ mirror (synced with http://james.tooraweenah.com/darcs/netrek-client-cow/) private push targets quozl@giskard.tooraweenah.com:/var/www/tooraweenah.com/james/darcs/netrek-client-cow web references http://james.tooraweenah.com/cgi-bin/darcs.cgi/netrek-client-cow/?c=patches netrek-client-cow-3.3.2/litebitmaps.h0000664000175000017500000001453213657750470016544 0ustar jamesjames #define emph_planet_seq_width 24 #define emph_planet_seq_height 24 #define emph_planet_seq_frames 5 static char emph_planet_seq_bits[emph_planet_seq_frames][72] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x83, 0x01, 0xc0, 0x00, 0x06, 0x40, 0x00, 0x04, 0x20, 0x00, 0x08, 0x20, 0x00, 0x08, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x20, 0x00, 0x08, 0x20, 0x00, 0x08, 0x40, 0x00, 0x04, 0xc0, 0x00, 0x06, 0x00, 0x83, 0x01, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x01, 0x03, 0x40, 0x00, 0x04, 0x20, 0x00, 0x08, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x10, 0x00, 0x10, 0x10, 0x00, 0x10, 0x20, 0x00, 0x08, 0x40, 0x00, 0x04, 0x80, 0x01, 0x03, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x80, 0x01, 0x03, 0x40, 0x00, 0x04, 0x20, 0x00, 0x08, 0x10, 0x00, 0x10, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x10, 0x00, 0x10, 0x20, 0x00, 0x08, 0x40, 0x00, 0x04, 0x80, 0x01, 0x03, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0xfe, 0x00, 0x80, 0x01, 0x03, 0x60, 0x00, 0x0c, 0x10, 0x00, 0x10, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x10, 0x00, 0x10, 0x60, 0x00, 0x0c, 0x80, 0x01, 0x03, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0xff, 0x01, 0xc0, 0x00, 0x06, 0x30, 0x00, 0x18, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x02, 0x00, 0x80, 0x04, 0x00, 0x40, 0x04, 0x00, 0x40, 0x08, 0x00, 0x20, 0x08, 0x00, 0x20, 0x30, 0x00, 0x18, 0xc0, 0x00, 0x06, 0x00, 0xff, 0x01, 0x00, 0x00, 0x00}}; #define emph_player_seq_width 24 #define emph_player_seq_height 24 #define emph_player_seq_frames 3 static char emph_player_seq_bits[emph_player_seq_frames][72] = { { 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x80, 0x9c, 0x00, 0x80, 0xff, 0x00, 0xc0, 0xc1, 0x01, 0x60, 0x00, 0x03, 0x38, 0x00, 0x0e, 0x30, 0x00, 0x06, 0x10, 0x00, 0x04, 0x18, 0x00, 0x0c, 0x1e, 0x00, 0x3c, 0x18, 0x00, 0x0c, 0x10, 0x00, 0x04, 0x30, 0x00, 0x06, 0x38, 0x00, 0x0e, 0x60, 0x00, 0x03, 0xc0, 0xc1, 0x01, 0x80, 0xff, 0x00, 0x80, 0x9c, 0x00, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x40, 0x1c, 0x01, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0xe0, 0x80, 0x03, 0x7c, 0x00, 0x1f, 0x38, 0x00, 0x0e, 0x18, 0x00, 0x0c, 0x18, 0x00, 0x0c, 0x1c, 0x00, 0x1c, 0x1f, 0x00, 0x7c, 0x1c, 0x00, 0x1c, 0x18, 0x00, 0x0c, 0x18, 0x00, 0x0c, 0x38, 0x00, 0x0e, 0x7c, 0x00, 0x1f, 0xe0, 0x80, 0x03, 0xc0, 0xff, 0x01, 0xc0, 0xff, 0x01, 0x40, 0x1c, 0x01, 0x00, 0x08, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; #define emph_player_seql_width 30 #define emph_player_seql_height 30 #define emph_player_seql_frames 3 static char emph_player_seql_bits[emph_player_seql_frames][120] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x18, 0x06, 0x00, 0x80, 0xfc, 0x4f, 0x00, 0x80, 0x0f, 0x7c, 0x00, 0xc0, 0x01, 0xe0, 0x00, 0x60, 0x00, 0x80, 0x01, 0x38, 0x00, 0x00, 0x07, 0x30, 0x00, 0x00, 0x03, 0x10, 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x06, 0x1e, 0x00, 0x00, 0x1e, 0x0c, 0x00, 0x00, 0x0c, 0x08, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x04, 0x0c, 0x00, 0x00, 0x0c, 0x1e, 0x00, 0x00, 0x1e, 0x18, 0x00, 0x00, 0x06, 0x10, 0x00, 0x00, 0x02, 0x30, 0x00, 0x00, 0x03, 0x38, 0x00, 0x00, 0x07, 0x60, 0x00, 0x80, 0x01, 0xc0, 0x01, 0xe0, 0x00, 0x80, 0x0f, 0x7c, 0x00, 0x80, 0xfc, 0x4f, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00}, { 0x00, 0x08, 0x04, 0x00, 0x00, 0x18, 0x06, 0x00, 0x40, 0xfc, 0x8f, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc0, 0x0f, 0xfc, 0x00, 0xe0, 0x00, 0xc0, 0x01, 0x7c, 0x00, 0x80, 0x0f, 0x38, 0x00, 0x00, 0x07, 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x1c, 0x00, 0x00, 0x0e, 0x1f, 0x00, 0x00, 0x3e, 0x0e, 0x00, 0x00, 0x1c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x0c, 0x0e, 0x00, 0x00, 0x1c, 0x1f, 0x00, 0x00, 0x3e, 0x1c, 0x00, 0x00, 0x0e, 0x18, 0x00, 0x00, 0x06, 0x18, 0x00, 0x00, 0x06, 0x38, 0x00, 0x00, 0x07, 0x7c, 0x00, 0x80, 0x0f, 0xe0, 0x00, 0xc0, 0x01, 0xc0, 0x0f, 0xfc, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x40, 0xfc, 0x8f, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x08, 0x04, 0x00}, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; netrek-client-cow-3.3.2/x11sprite.h0000664000175000017500000000011513657750470016057 0ustar jamesjamesvoid GetPixmaps(Display * d, struct window *win, W_Window t, W_Window g); netrek-client-cow-3.3.2/sample_key.def0000664000175000017500000000362313657750470016666 0ustar jamesjames############################################################################ # Sample RSA Key def file for the COW client by siegl@risc.uni-linz.ac.at # # Change it acording to your system. # # Store this file along with you secret key file for further use. # ############################################################################ ARCH = linux # # NOTE: If you have to make a key from keys.h then after you have changed # the following 5 params do: # make convert # KEYSH = keys.h KEYNAME = $(ARCH) DESC = "automatic packaged key" MAKER = "quozl@us.netrek.org" COMMENT = "netrek.org/files/COW/" # If you have already an valid RSA key change the name of the file below. # Otherwise make will automaticaly generate one for you. KEYFILE = key.cow.$(KEYNAME) SECKEYFILE = $(KEYFILE).secret # How to generate cwho in cflags.h. Some hosts fully resolve the name # others need to tack on the domainname. # # several possitilities: # CWHO = \"`whoami`@`hostname`\" # CWHO = \"`whoami`@`domainname`\" # CWHO = \"`whoami`@`hostname`.`domainname`\" CWHO = \"`whoami`@`hostname -f`\" ####################################################################### # Here you may add and overwrite missing or wrong system definitions. # ####################################################################### # If GMP will not be found automatically you should add # CONFFLAGS = --with-gmp-incdir=/pkg/gnu/include --with-gmp-libdir=/pkg/gnu/lib # If CC in configure needs some extra defines for its tests: # gcc sometimes needs: # CFLAGS = -D__STDC__=0 # Additional flags for the Makefile # EXTRACFLAGS = -DSMALL_SCREEN -DGATEWAY -DTREKHOPD # EXTRALINKFLAGS = -s -N # EXTRALIBS = # For statically linked clients # EXTRALINKFLAGS = -static # Parallel make on Sequent machines # PMAKE = & # overwrite optimization flag # OPT = -O2 -fomit_frame_pointer # OPT = -g netrek-client-cow-3.3.2/parsemeta.h0000664000175000017500000000120113657750470016175 0ustar jamesjames#ifndef meta_h_header #define meta_h_header #ifdef META /* meta.h */ /* Function Definitions */ void parsemeta(); void metawindow(void); /* * Show the meta server menu window */ void metainput(void); /* * Wait for actions in the meta-server window. * * This is really the meta-server window's own little input() function. * It is needed so we don't have to use all the bull in the main * input(). Plus to use it I'd have to call mapAll() first and the client * would read in the default server and then call it up before I can * select a server. */ #endif /* defined META */ #endif /* defined meta_h_header */ netrek-client-cow-3.3.2/wsl.c0000664000175000017500000002115513657750470015026 0ustar jamesjames/* Background Sound Library, 32 bit Windows Version Interface based on the (Unix) Background Sound Library: "Copyright 1993 by Kurt Siegl <007@netrek.org> Permission to use, modify, copy and distribute this software without fee is hereby granted as long as this notice is left here." by Jonathan Shekter, June 1995 At first I went the hideously easy route of using the Windows sndPlaySound() call. This made the whole thing a 40 line file, everything was just a wrapper. Sadly this didn't give the performance I expected; there was a noticable pause as the file was loaded. So this code implements an LRU cache of sounds. */ #include #include #include #include #include "audio.h" /* Currently open device ID */ static HWAVEOUT hw=0; /* Linked list of loaded sounds */ struct sound { char name[PATH_MAX]; WAVEHDR hdr; PCMWAVEFORMAT fmt; struct sound *newer,*older; }; struct sound *newest, *oldest, *current; int bytesused; /* Sound cache size */ #define MAXBYTES (256*1024) /* Here we use the Windows multimedia file io (mmio) library which makes reading RIFF waveform files really easy */ int ParseSoundFile(char *fname, PCMWAVEFORMAT *header, DWORD *len, char **data) { HMMIO hmmio; /* file handle for open file */ MMCKINFO mmckinfoParent; /* parent chunk information structure */ MMCKINFO mmckinfoSubchunk; /* subchunk information structure */ char fname2[PATH_MAX]; int flen = strlen (fname); if (fname[flen-4] != '.') // check for ext on filename { strcpy(fname2, fname); strcat(fname2, ".wav"); fname = fname2; } hmmio = mmioOpen(fname, NULL, MMIO_READ | MMIO_ALLOCBUF); if(!hmmio) { #ifdef DEBUG fprintf(stderr, "Could not open wave file %s\n", fname); #endif return 0; } /* Find RIFF chunk "WAVE" */ mmckinfoParent.fccType = mmioFOURCC('W', 'A', 'V', 'E'); if (mmioDescend(hmmio, (LPMMCKINFO) &mmckinfoParent, NULL, MMIO_FINDRIFF)) { fprintf(stderr, "\"Wave\" file has no WAVE chunk!\n"); return 0; mmioClose(hmmio, 0); return 0; } /* Find format chunk */ mmckinfoSubchunk.ckid = mmioFOURCC('f', 'm', 't', ' '); if (mmioDescend(hmmio, &mmckinfoSubchunk, &mmckinfoParent, MMIO_FINDCHUNK)) { fprintf(stderr, "\"Wave\" file has no fmt sub-chunk!\n"); mmioClose(hmmio, 0); return 0; } /* Read PCM header */ if (mmckinfoSubchunk.cksize != sizeof(PCMWAVEFORMAT)) { fprintf(stderr, "PCMWAVEFORMAT chunk is the wrong size.\n"); mmioClose(hmmio, 0); return 0; } if (mmioRead(hmmio, header, sizeof(PCMWAVEFORMAT)) != sizeof(PCMWAVEFORMAT)) { fprintf(stderr, "Failed to read wave file header\n"); mmioClose(hmmio, 0); return 0; } /* Ascend out of the "fmt " subchunk. */ mmioAscend(hmmio, &mmckinfoSubchunk, 0); mmckinfoSubchunk.ckid = mmioFOURCC('d', 'a', 't', 'a'); if (mmioDescend(hmmio, &mmckinfoSubchunk, &mmckinfoParent, MMIO_FINDCHUNK)) { fprintf(stderr, "\"Wave\" file has no data sub-chunk!\n"); mmioClose(hmmio, 0); return 0; } /* Get the size of the data subchunk and allocate */ *len = mmckinfoSubchunk.cksize; *data = (char *) malloc(len); if (mmioRead(hmmio, *data, *len) != *len) { fprintf(stderr, "Failed to read wave file data\n"); free(*data); mmioClose(hmmio, 0); return 0; } mmioClose(hmmio, 0); return 1; } /* Finds a sound in the cache or loads it. */ struct sound *GetSound(char *name) { #ifdef DEBUG int loopcount=0; #endif struct sound *itr = newest, *newsnd; #ifdef DEBUG printf("Searching for sound %s in cache\n", name); #endif while (itr) { #ifdef DEBUG if (loopcount >0 && itr == newest) { printf("Sound list is circular with %d items!\n", loopcount); return 0; } if (loopcount++ > 100) { printf("Stuck in GetSound loop!\n"); return 0; } printf("Found %s in cache\n", itr->name); #endif if (!strcmp(name ,itr->name)) { /* If found, move to front of list */ if (itr!= newest) { if (itr->older) itr->older->newer = itr->newer; else oldest = itr->newer; itr->newer->older = itr->older; itr->older = newest; itr->newer=0; newest = itr; } return itr; } itr = itr->older; } /* Sound not in cache, must load */ #ifdef DEBUG printf("Sound %s not in cache, loading\n", name); #endif newsnd = (struct sound *) malloc (sizeof(struct sound)); memset(newsnd, 0, sizeof(struct sound)); if (ParseSoundFile(name, &newsnd->fmt, &newsnd->hdr.dwBufferLength, &newsnd->hdr.lpData)) { bytesused += newsnd->hdr.dwBufferLength; /* trim cache down if too large, starting from oldest */ itr = oldest; while (bytesused > MAXBYTES && itr) { struct sound *next = itr->newer; bytesused -= itr->hdr.dwBufferLength; #ifdef DEBUG printf("Trimming sound cache, file %s, %d bytes\n", itr->name, itr->hdr.dwBufferLength); #endif if (next) /* Remove from list, simple as always at end */ { next->older = 0; oldest = next; } else newest = 0; free(itr->hdr.lpData); free(itr); oldest = itr = next; } strcpy(newsnd->name, name); newsnd->older = newest; /* insert into list */ newsnd->newer = 0; if (newest) newest->newer = newsnd; else oldest = newsnd; newest = newsnd; return newest; } free(newsnd); return 0; } void ExitSound () { if (hw) { if (soundPlaying()) StopSound(); waveOutClose(hw); } hw = NULL; /* Delete all the sounds in the cache */ while (newest) { struct sound *tmp = newest->older; free(newest->hdr.lpData); free(newest); #ifdef DEBUG /* Avoid circular lists */ newest->older=0; #endif } oldest=newest=NULL; } int InitSound () { return 0; } void StopSound () { if (soundPlaying()) { #ifdef DEBUG printf("Interuppting sound\n"); #endif waveOutReset(hw); waveOutUnprepareHeader(hw, ¤t->hdr, sizeof(WAVEHDR)); current = NULL; } } int StartSound (char *name) { static PCMWAVEFORMAT lastfmt; struct sound *snd; #ifdef DEBUG printf("Request to play sound %s\n", name); #endif stopSound(); if (snd=GetSound(name)) { current = snd; if (!hw) { #ifdef DEBUG printf("Initial open of wave device\n"); #endif waveOutOpen(&hw, 0, (WAVEFORMAT *)&snd->fmt, NULL, 0, 0); memcpy(&lastfmt, &snd->fmt, sizeof(PCMWAVEFORMAT)); } else /*if (memcmp(&snd->fmt, &lastfmt, sizeof(PCMWAVEFORMAT))) /* Re-use the currently open sound handle of the formats are the same */ { #ifdef DEBUG printf("Re-open of wave device\n"); #endif printf("close: %d, ", waveOutClose(hw)); memcpy(&lastfmt, &snd->fmt, sizeof(PCMWAVEFORMAT)); printf("open %d\n",waveOutOpen(&hw, 0, (WAVEFORMAT *)&snd->fmt, NULL, 0, 0)); } #ifdef DEBUG // else // printf("Re-using open sound handle\n"); #endif printf("prepare header: %\d, ", waveOutPrepareHeader(hw, &snd->hdr, sizeof(WAVEHDR))); printf("write: %d\n", waveOutWrite(hw, &snd->hdr, sizeof(WAVEHDR))); return 0; } return -1; } int SoundPlaying() { int playing; #ifdef DEBUG printf("playing = ..."); #endif if (!hw || !current) return 0; playing = !(current->hdr.dwFlags & WHDR_DONE); if (!playing) { printf(" (unprepare: %d) ",waveOutUnprepareHeader(hw, ¤t->hdr, sizeof(WAVEHDR))); current = NULL; } #ifdef DEBUG printf("%d\n", playing); #endif return playing; } netrek-client-cow-3.3.2/lagmeter.c0000664000175000017500000000776313657750470016032 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "lagmeter.h" #include "netstat.h" #define L_NB 3 #define L_LENGTHTEXT 3 #define L_TSP 3 #define L_NMARKS 11 #define L_WIDTH ((W_Textwidth*L_NB + L_TSP + L_NB*L_LENGTHTEXT \ *W_Textwidth + 3*L_TSP)+2*L_IBORDER) #define L_HEIGHT ((((W_Textheight+L_TSP) * L_NMARKS)+\ W_Textheight+L_TSP)+2*L_IBORDER) #define L_IBORDER 5 #define L_BWIDTH (W_Textwidth*3) #define L_BHEIGHT (L_HEIGHT-(W_Textheight+L_TSP)-2*L_IBORDER+3) static void lMeterBox(int filled, int x, int y, int w, int h, W_Color color); int lMeterHeight(void) { return L_HEIGHT; } int lMeterWidth(void) { return L_WIDTH; } void redrawLMeter(void) { int i; char buf[8]; W_ClearWindow(lMeter); /* vertical number marks */ for (i = 0; i < L_NMARKS; i++) { sprintf(buf, "%3d", (L_NMARKS - (i + 1)) * 10); W_WriteText(lMeter, L_IBORDER, i + (i * (W_Textheight + L_TSP)) + L_TSP + 2 /* X * */ , textColor, buf, strlen(buf), W_RegularFont); } /* horizontal text */ W_WriteText(lMeter, L_IBORDER + L_LENGTHTEXT * W_Textwidth + L_TSP, L_HEIGHT - L_IBORDER - W_Textheight / 2 - 3, textColor, "TOT", 3, W_RegularFont); W_WriteText(lMeter, L_IBORDER + 2 * (L_LENGTHTEXT * W_Textwidth + L_TSP), L_HEIGHT - L_IBORDER - W_Textheight / 2 - 3, textColor, "SLS", 3, W_RegularFont); W_WriteText(lMeter, L_IBORDER + 3 * (L_LENGTHTEXT * W_Textwidth + L_TSP), L_HEIGHT - L_IBORDER - W_Textheight / 2 - 3, textColor, "NF", 3, W_RegularFont); /* bars */ lMeterBox(0, L_LENGTHTEXT * W_Textwidth + L_IBORDER + L_TSP, L_IBORDER, L_BWIDTH, L_BHEIGHT, borderColor); lMeterBox(0, L_LENGTHTEXT * W_Textwidth + L_IBORDER + L_BWIDTH + L_TSP + L_TSP, L_IBORDER, L_BWIDTH, L_BHEIGHT, borderColor); lMeterBox(0, L_LENGTHTEXT * W_Textwidth + L_IBORDER + 2 * (L_BWIDTH + L_TSP) + L_TSP, L_IBORDER, L_BWIDTH, L_BHEIGHT, borderColor); updateLMeter(); } void updateLMeter(void) { double sd, sdl, ns_get_tstat(void), ns_get_lstat(void); int nf, h; W_Color color; sd = ns_get_tstat(); sdl = ns_get_lstat(); nf = ns_get_nfailures(); /* filled */ lMeterBox(1, L_LENGTHTEXT * W_Textwidth + L_IBORDER + L_TSP + 1, L_IBORDER + 1, L_BWIDTH - 2, L_BHEIGHT - 2, backColor); if (sd > 0.) { if (sd > 99.) sd = 99.; color = gColor; if (sd > 25.) color = yColor; if (sd > 45.) color = rColor; h = (int) (sd * (double) L_BHEIGHT / 100.); lMeterBox(1, L_LENGTHTEXT * W_Textwidth + L_IBORDER + L_TSP + 1, L_IBORDER + L_BHEIGHT - h, L_BWIDTH - 2, h - 1, color); } lMeterBox(1, L_LENGTHTEXT * W_Textwidth + L_IBORDER + L_BWIDTH + L_TSP + L_TSP + 1, L_IBORDER + 1, L_BWIDTH - 2, L_BHEIGHT - 2, backColor); if (sdl > 0.) { if (sdl > 99.) sdl = 99.; color = gColor; if (sdl > 25.) color = yColor; if (sdl > 45.) color = rColor; h = (int) (sdl * (double) L_BHEIGHT / 100.); lMeterBox(1, L_LENGTHTEXT * W_Textwidth + L_IBORDER + L_BWIDTH + L_TSP + L_TSP + 1, L_IBORDER + L_BHEIGHT - h, L_BWIDTH - 2, h - 1, color); } lMeterBox(1, L_LENGTHTEXT * W_Textwidth + L_IBORDER + 2 * (L_BWIDTH + L_TSP) + L_TSP + 1, L_IBORDER + 1, L_BWIDTH - 2, L_BHEIGHT - 2, backColor); if (nf > 0.) { if (nf > 99.) nf = 99.; h = (int) (nf * (double) L_BHEIGHT / 100.); lMeterBox(1, L_LENGTHTEXT * W_Textwidth + L_IBORDER + 2 * (L_BWIDTH + L_TSP) + L_TSP + 1, L_IBORDER + L_BHEIGHT - h, L_BWIDTH - 1, h - 2, rColor); } } static void lMeterBox(int filled, int x, int y, int w, int h, W_Color color) { if (filled) { W_FillArea(lMeter, x, y, w + 1, h + 1, color); return; } W_MakeLine(lMeter, x, y, x + w, y, color); W_MakeLine(lMeter, x + w, y, x + w, y + h, color); W_MakeLine(lMeter, x + w, y + h, x, y + h, color); W_MakeLine(lMeter, x, y + h, x, y, color); } netrek-client-cow-3.3.2/main.c0000664000175000017500000002561413657750470015151 0ustar jamesjames/* main.c */ #include "config.h" #include "copyright.h" #include #include INC_STRINGS #include #include INC_SYS_TIME #include #ifdef TOOLS #include #include "version.h" #include "patchlevel.h" #endif #include "cowapi.h" #include "defs.h" #include "defaults.h" #ifdef GATEWAY extern int gw_serv_port, gw_port, gw_local_port; /* UDP */ extern char *gw_mach; /* UDP */ extern char *gateway; extern char *serverName; void read_servers(); #endif extern int logmess; char *servertmp = NULL; #ifdef EXPIRE char exptime[27]; #endif #define NO_PIXMAPS 0x8000 extern int pixMissing; extern int gather_stats; static void printUsage(char *prog); #ifndef WIN32 int main(int argc, char **argv) #else int main2(int argc, char **argv) #endif { int usage = 0; int err = 0; int inplayback = 0; char *name, *ptr; #ifdef TOOLS char url[1024]; #endif #ifdef EXPIRE time_t expday, daycomp, today; #endif #ifdef GATEWAY int hset = 0; #endif int xtrekPort = -1; program = argv[0]; setlocale(LC_ALL, ""); #ifdef WINDOWMAKER wm_argv=argv; wm_argc=argc; #endif name = *argv++; argc--; if ((ptr = RINDEX(name, '/')) != NULL) name = ptr + 1; #ifdef GATEWAY netaddr = 0; #endif #ifdef EXPIRE daycomp = tv_ctime.tv_sec; expday = daycomp + EXPIRE * 24 * 3600; today = time(NULL); STRNCPY(exptime, ctime(&expday), sizeof(exptime)); #endif #ifdef TOOLS url[0] = '\0'; #endif pseudo[0] = defpasswd[0] = '\0'; while (*argv) { if (!strcmp(*argv, "--help")) { printUsage(name); exit(0); } if (!strcmp(*argv, "--fast-guest")) { fastGuest++; argv++; argc--; continue; } if (!strcmp(*argv, "--small-screen")) { extern int small_screen; small_screen++; argv++; argc--; continue; } if (!strcmp(*argv, "--server")) { argv++; argc--; if (*argv) { servertmp = *argv; argv++; argc--; continue; } } if (!strcmp(*argv, "--port")) { argv++; argc--; if (*argv) { xtrekPort = atoi(*argv); argv++; argc--; continue; } } if (**argv == '-') ++ * argv; else break; argc--; ptr = *argv++; while (*ptr) { switch (*ptr) { case 'C': /* character name */ (void) STRNCPY(pseudo, *argv, sizeof(pseudo)); argv++; argc--; break; case 'A': /* authorization password */ (void) STRNCPY(defpasswd, *argv, sizeof(defpasswd)); argv++; argc--; break; case 'u': usage++; break; case 'c': checking = 1; break; case 's': if (*argv) { xtrekPort = atoi(*argv); passive = 1; argv++; argc--; } break; #ifdef RECORDGAME case 'F': inplayback = 1; if (*(ptr+1) == 'i') pb_create_index = 1; /* No break */ case 'f': recordFileName = *argv; argv++; argc--; break; #endif case 'l': logFileName = *argv; logmess = 1; argv++; argc--; break; case 'p': if (*argv) { xtrekPort = atoi(*argv); argv++; argc--; } break; case 'd': display_host = *argv; argc--; argv++; break; #ifdef META case 'm': /* use multiple metaservers by UDP */ if (usemeta && usemeta != 1) { fputs("The options -k and -m and -M are mutually exclusive\n", stderr); err++; } usemeta = 1; break; case 'k': /* use metaserver cache from prior -M usage */ if (usemeta && usemeta != 2) { fputs("The options -k and -m and -M are mutually exclusive\n", stderr); err++; } usemeta = 2; break; case 'M': /* use single metaserver by TCP */ if (usemeta && usemeta != 3) { fputs("The options -k, -m and -M are mutually exclusive\n", stderr); err++; } usemeta = 3; break; #endif #ifdef RSA case 'o': RSA_Client = -1; /* will be reset leter, set * * * negative here * to * flag * * that it should * override * * xtrekrc */ printf("Using standard binary verification\n"); break; case 'R': RSA_Client = -2; /* will be reset leter, set * * * negative here * to * flag * * that it should * override * * xtrekrc */ printf("Using RSA verification\n"); break; #else case 'R': printf("This client does not support RSA verification\n"); case 'o': printf("Using standard binary verification\n"); break; #endif case 'h': servertmp = *argv; #ifdef GATEWAY gw_mach = *argv; #endif argc--; argv++; break; #ifdef GATEWAY case 'H': hset++; read_servers(); serverName = gateway; netaddr = strToNetaddr(*argv); /* netaddrstr = *argv; */ argc--; argv++; break; #endif case 'U': if ((baseLocalPort = atoi(*argv)) == 0) { fprintf(stderr, "Error: -U requires a port number\n"); exit(1); } argc--; argv++; break; #ifdef PACKET_LOG case 'P': log_packets++; break; #endif case 'G': if (*argv) { ghoststart++; ghost_pno = atoi(*argv); printf("Emergency restart being attempted...\n"); argv++; argc--; } break; case 't': title = *argv; argc--; argv++; break; case 'r': deffile = *argv; argv++; argc--; break; case 'D': debug++; break; case 'v': printf("%s\n", cowid); printf("Compile options used: %s\n", cflags); printf("Compiled on %s by %s\n", cdate, cwho); printf("%s\n", cbugs); #ifdef RSA printf("RSA key installed: %s --- Created by: %s\n", key_name, client_creator); printf(" Client type: %s\n", client_type); printf(" Client arch: %s\n", client_arch); printf(" Key permutation date: %s\n", client_key_date); printf(" Comments: %s\n", client_comments); #endif #ifdef EXPIRE printf("THIS CLIENT WILL EXPIRE ON %s\n", exptime); #endif exit(0); break; #ifdef IGNORE_SIGNALS_SEGV_BUS case 'i': printf("Ignoring signals SIGSEGV and SIGBUS\n"); ignore_signals = -1; break; #endif #ifndef WIN32 case 'n': takeNearest = 1; break; #endif case 'b': pixMissing |= NO_PIXMAPS; break; #ifdef TOOLS case 'L': sprintf(url, upgradeURL, arch); break; case 'V': sprintf(url, releaseURL, mvers, PATCHLEVEL); break; case 'B': sprintf(url, bugURL, mvers, PATCHLEVEL, arch); break; #endif case 'S': /* analyse a cambot recording for visualisation */ gather_stats++; break; default: fprintf(stderr, "%s: unknown option '%c'\n", name, *ptr); err++; break; } ptr++; } } #ifdef TOOLS if (*url) { char webcall[1024]; initDefaults(deffile); if (getdefault("wwwlink") != NULL) wwwlink = getdefault("wwwlink"); snprintf(webcall, sizeof(webcall), wwwlink, url); if (system(webcall) == -1) printf("Running %s for URL %s failed\n", wwwlink, url); url[0] = '\0'; exit(0); } #endif #ifdef EXPIRE daycomp = tv_ctime.tv_sec; expday = daycomp + EXPIRE * 24 * 3600; today = time(NULL); STRNCPY(exptime, ctime(&expday), sizeof(exptime)); if ((expday - today) < 0.2 * (expday - daycomp) || (expday - today) / (24 * 3600) < 5) { printf("!!!!!!!!!!!!!!!!!!!!!!WARNING!!!!!!!!!!!!!!!!!!!!!!!\n"); printf("This client will expire on %s\n", exptime); printf("Please obtain a newer version from your favourite ftp site.\n"); printf("At the moment of writing http://cow.netrek.org/ is the COW home.\n"); #ifdef TOOLS printf("Or try the -L option to get a new version.\n"); #endif } if (today > expday) { printf("Sorry. This client has expired. It can no longer be used.\n"); #ifdef TOOLS printf("Try the -L option to get a new version.\n"); #endif exit(0); } #endif if (usage || err) { printUsage(name); exit(err); } #ifdef GATEWAY if (!hset) use_trekhopd = 0; /* allow use via normal * * * connections */ if (netaddr == 0) { fprintf(stderr, "netrek: no remote address set (-H). Restricted server will not work.\n"); } #endif #ifdef RECORDGAME if (inplayback) err = pbmain(name); else #endif err = cowmain(servertmp, xtrekPort, name); exit(err); } static void printUsage(char *prog) { printf("%s\n", cowid); printf("Usage: %s [options] [display-name]\n", prog); printf("Options:\n"); printf(" [--server n] Connect to a server immediately\n"); printf(" [--port n] Port to connect to\n"); printf(" [--fast-guest] Bypass login and play as guest\n"); printf(" [--small-screen] Shrink windows to fit on an 800x600 screen\n"); printf(" [-r defaultsfile] Specify defaults file\n"); printf(" [-s socketnum] Specify listen socket port for manual start\n"); printf(" [-G playernum] Reconnect after ghostbust. Use with -s\n"); printf(" [-u] show usage\n"); printf(" [-A] character password\n"); printf(" [-C] character name\n"); #ifdef IGNORE_SIGNALS_SEGV_BUS printf(" [-i] ignore SIGSEGV and SIGBUS\n"); #endif #ifdef GATEWAY printf(" [-H] specify host (via gateway)\n"); #endif printf(" [-U port] Specify client UDP or TCP port (useful for some firewalls)\n"); #ifdef RSA printf(" [-o] use old-style binary verification)\n"); printf(" [-R] use RSA binary verification\n"); #endif #ifdef PACKET_LOG printf(" [-P] Log server packets, repeat for increased information\n"); #endif printf(" [-c] to just do ck_players on the server\n"); printf(" [-f filename] Record game into 'filename'\n"); printf(" [-F filename] Plays the recorded game from 'filename'\n"); printf(" [-l filename] Record messages into 'filename'\n"); #ifdef META printf(" [-m] list servers, using UDP/IP to multiple metaservers\n"); printf(" [-M] list servers, using TCP/IP to single metaserver\n"); printf(" [-k] list servers from cache generated by -M\n"); #endif #ifndef WIN32 printf(" [-n] use nearest colors in shared colormap\n"); #endif printf(" [-b] do not attempt to load color pixmaps\n"); #ifdef TOOLS printf(" [-L] upgrade to Latest version (requires running netscape)\n"); printf(" [-V] Version info and release notes (requires running netscape)\n"); printf(" [-B] submit a Bug report (requires running netscape)\n"); #endif printf(" [-v] display client version info\n"); #ifdef EXPIRE printf("THIS CLIENT WILL EXPIRE ON %s\n", exptime); #endif } netrek-client-cow-3.3.2/censor.c0000664000175000017500000000523713657750470015515 0ustar jamesjames#include #include #include #include #include #define MAX_CURSE_LEN 10 #define REPLACE_STR_LEN 20 #define NUM_CURSES 8 #define NOT_FOUND -1 typedef struct { char badWord[MAX_CURSE_LEN]; int beginningOnly; int skip[128]; } profanity; /* if beginningOnly is true censor only looks for the curse at the beginning * of words. Currently only set for "twat" so "saltwater", etc aren't caught. * Grepped for the other strings in /usr/dict/words and came up with a blank, * so beginningOnly is left off for them. */ static profanity curseWords[NUM_CURSES] = { {"damn", 0}, {"fuck", 0}, {"bastard", 0}, {"shit", 0}, {"bitch", 0}, {"twat", 1}, {"cunt", 0}, {"dammit", 0} }; static char replacementChars[REPLACE_STR_LEN + 1] = "@#$%^&*%#$%@#$*&@%$%"; /* + 1 for trailing null */ void initSkipArray(char *word, int *skip) { int i, wordLen = strlen(word); for (i = 0; i < 128; i++) skip[i] = wordLen; for (i = 0; i < wordLen; i++) { skip[(int) word[i]] = wordLen - i - 1; if (isascii(toupper(word[i]))) skip[toupper(word[i])] = skip[(int) word[i]]; } } void initCensoring() { int i; for (i = 0; i < NUM_CURSES; i++) initSkipArray(curseWords[i].badWord, curseWords[i].skip); } static int search(char *word, char *text, int *skip) { int i, j, wordLen = strlen(word), textLen = strlen(text); for (i = j = wordLen - 1; j >= 0; i--, j--) while (tolower(text[i]) != word[j]) { int t = skip[(int) text[i]]; i += (wordLen - j > t) ? wordLen - j : t; if (i >= textLen) return NOT_FOUND; j = wordLen - 1; } return i + 1; } char *censor(char *text) { int i, j, t = strlen(text) - 1; char *str = text; for (i = 0; i < NUM_CURSES; i++) { text = str; while ((j = search(curseWords[i].badWord, text, curseWords[i].skip)) != NOT_FOUND) { int k, l, wordBegin, wordEnd; for (wordBegin = j; wordBegin > 0; wordBegin--) if (!isalpha(text[wordBegin - 1])) break; for (wordEnd = j + strlen(curseWords[i].badWord) - 1; wordEnd < t; wordEnd++) if (!isalpha(text[wordEnd + 1])) break; if (!curseWords[i].beginningOnly || wordBegin == j) for (k = wordBegin, l = 0; k <= wordEnd; k++) { text[k] = replacementChars[l]; if (++l >= REPLACE_STR_LEN) l = 0; /* make sure we don't go * * past bound of * * replacementChars */ } text += wordEnd; /* so we don't go into * * infinite loop if * * beginningOnly */ } } return str; } #undef MAX_CURSE_LEN #undef REPLACE_STR_LEN #undef NUM_CURSES #undef NOT_FOUND netrek-client-cow-3.3.2/system.mk.in0000664000175000017500000001543313657750470016341 0ustar jamesjames############################################################################ # System dependend defines, we try to guess this values. # Change them if we are wrong. ############################################################################ PACKAGE=netrek-client-cow prefix=@prefix@ exec_prefix=@exec_prefix@ datarootdir=@datarootdir@ DESTDIR= BINDIR=${prefix}/games PIXMAPDIR=${datarootdir}/pixmaps/${PACKAGE} APPDIR=${datarootdir}/applications SHELL = /bin/sh CC = @CC@ LN = @LN_S@ CWHO = \"`whoami`@`hostname -f`\" PROTOIZE = protoize UNPROTOIZE = unprotoize INDENT = indent -i2 -bap -bacc -bad -nbc -bl -nip -di8\ -npsl -nce -cli0.5 -ci4 -npcs -fca -ncdb -sc -cd50 -c50 TOUCH = touch RM = rm -f # Other libraries neeeded. (All systems need -lX11 -lm) LIBS = @LIBS@ INCS = @INCS@ # Flags for optimizing # (-O, -g, -O2) OPT = -g -Wall # Flags for shared libraries SL_CFLAGS = -fPIC SL_LDFLAGS = -shared $(LIBRARIES) -lc SL_LIB = libcow.so.`./name 1` SL_LIBFLAGS = -Wl,-soname,$(SL_LIB) COWAPI = cowapi.h COWLIB = libcow.so.`./name 1`.`./name 2`.`./name p` COWDLL = cow.so # random.c Some arches don't have random(), we will compile it if necessary # set RANDOMOBJ = random.o if you need this, otherwise leave it blank. RANDOMOBJ = @LIBOBJS@ ############################################################################### # No editables below this point. ############################################################################### ROBJ = check.o colors.o data.o death.o defaults.o dmessage.o \ enter.o findslot.o getname.o getship.o helpwin.o inform.o \ interface.o newwin.o option.o planetlist.o macrowin.o \ map.o playerlist.o ranklist.o reserved.o sintab.o \ smessage.o socket.o playback.o stats.o util.o war.o \ warning.o udpopt.o ping.o pingstats.o rotate.o lagmeter.o \ parsemeta.o netstat.o netstatopt.o spopt.o dashboard.o \ dashboard3.o short.o distress.o senddist.o defwin.o tools.o \ sound.o docwin.o cflags.o beeplite.o feature.o string_util.o \ local.o censor.o cowmain.o camera.o myf.o RSRC = check.c colors.c data.c death.c defaults.c dmessage.c \ enter.c findslot.c getname.c getship.c helpwin.c inform.c \ input.c interface.c newwin.c option.c planetlist.c \ macrowin.c map.c playerlist.c ranklist.c redraw.c \ smessage.c parsemeta.c socket.c playback.c stats.c util.c \ war.c warning.c udpopt.c sintab.c ping.c pingstats.c \ rotate.c lagmeter.c netstat.c netstatopt.c spopt.c \ dashboard.c dashboard3.c short.c distress.c senddist.c \ defwin.c tools.c sound.c docwin.c cflags.c beeplite.c \ feature.c reserved.c string_util.c local.c censor.c \ cowmain.c camera.c myf.c INCLUDES = struct.h packets.h defs.h copyright.h bitmaps.h data.h \ oldbitmaps.h tngbitmaps.h hullbitmaps.h rabbitbitmaps.h \ sound.h audio.h litebitmaps.h INPUTOBJ = input.o redraw.o MAINOBJ = main.o MAINSRC = main.c X11OBJ = @NOX11@ x11window.o x11sprite.o audio.o X11SRC = @NOX11@ x11window.c x11sprite.c audio.c WIN32OBJ = @NOWIN32@ gnu_win32.o winsprite.o winsndlib.o WIN32SRC = @NOWIN32@ gnu_win32.c winsprite.c winsndlib.c SDL_CONFIG = @SDL_CONFIG@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_LIBS = @SDL_LIBS@ SDL_MIXER_LIBS = @SDL_MIXER_LIBS@ # full screen support XXF86VM_LIBS = -lXxf86vm SHARED = $(SL_CFLAGS) INCDIRS = $(INCS) CFLAGS ?= $(OPT) CFLAGS += $(INCDIRS) LDFLAGS ?= -g LIBRARIES = $(LIBS) $(EXTRALIBS) $(SDL_LIBS) $(SDL_MIXER_LIBS) $(XXF86VM_LIBS) netrek-client-cow: $(PMAKE) null $(ROBJ) $(MAINOBJ) $(INPUTOBJ) $(X11OBJ) $(WIN32OBJ) $(RANDOMOBJ) cflags.c $(CC) $(LDFLAGS) -o netrek-client-cow $(ROBJ) $(INPUTOBJ) $(MAINOBJ) $(X11OBJ) $(WIN32OBJ) $(RANDOMOBJ) $(LIBRARIES) netrek.shared: done.libcow $(MAINOBJ) $(COWAPI) $(CC) $(LDFLAGS) $(MAINOBJ) -L. -lcow $(LIBS) -o netrek.shared done.libcow: $(PMAKE) $(ROBJ) $(INPUTOBJ) $(X11OBJ) $(WIN32OBJ) $(RANDOMOBJ) $(CC) $(ROBJ) $(INPUTOBJ) \ $(X11OBJ) $(WIN32OBJ) $(RANDOMOBJ) $(SL_LDFLAGS) $(SL_LIBFLAGS) -o $(COWLIB) $(RM) $(SL_LIB) $(LN) $(COWLIB) $(SL_LIB) $(TOUCH) done.libcow sound.o: sound.c $(CC) $(CPPFLAGS) $(CFLAGS) $(SDL_CFLAGS) -c sound.c random.o: random.c $(CC) $(CPPFLAGS) $(CFLAGS) -c random.c strdup.o: strdup.c $(CC) $(CPPFLAGS) $(CFLAGS) -c strdup.c cflags.c: mkcflags ./mkcflags "$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)" "$(ARCH)" > cflags.c echo char cwho[]=$(CWHO)\; >> cflags.c mkcflags: mkcflags.c system.mk null patchlevel.h version.h $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o mkcflags mkcflags.c $(LIBRARIES) tags: $(RSRC) ctags $(RSRC) $(INCLUDES) depend: cflags.c null -makedepend -f system.mk $(RSRC) $(MAINSRC) \ $(X11SRC) name.c $(INCDIRS) proto: cflags.c null $(PROTOIZE) $(RSRC) $(MAINSRC) $(X11SRC) $(WIN32SRC) unproto: cflags.c null $(UNPROTOIZE) $(RSRC) $(MAINSRC) $(X11SRC) $(WIN32SRC) indent: cflags.c null $(INDENT) $(RSRC) $(MAINSRC) $(INCLUDES) $(X11SRC) $(WIN32SRC) to_unix: $(RSRC) $(INCLUDES) $(MAINSRC) $(X11SRC) -for f in $(RSRC) $(INCLUDES) $(MAINSRC) $(X11SRC) $(WIN32SRC) ; do \ mv $${f} $${f}.bak ; win32/uncr < $${f}.bak > $${f} ;\ done to_dos: $(RSRC) $(INCLUDES) $(MAINSRC) $(X11SRC) $(WIN32SRC) -for f in $(RSRC) $(INCLUDES) $(MAINSRC) $(X11SRC) $(WIN32SRC) ; do \ mv $${f} $${f}.bak ; win32/cr < $${f}.bak >$${f} ;\ done install: netrek-client-cow mkdir -p $(DESTDIR)$(BINDIR) install netrek-client-cow $(DESTDIR)$(BINDIR) mkdir -p $(DESTDIR)$(PIXMAPDIR) cp -pr pixmaps/* $(DESTDIR)$(PIXMAPDIR)/ mkdir -p $(DESTDIR)$(APPDIR) cp netrek-client-cow.desktop $(DESTDIR)$(APPDIR)/ null: @echo "/* This file is intentionally empty */" >null xtrekrc: @grep '^int' data.c \ | grep '=' \ | sed -e 's/;.*//' \ | awk 'NF==4{print $$2,$$4}' > xtrekrc.tmp @egrep '(booleanDefault|intDefault)' $(RSRC) $(MAINSRC) $(X11SRC) $(WIN32SRC) \ | grep '\"' \ | sed -e '{s/[(]/ /g;s/[)]/ /g;s/\"//;s/\"/:/;s/, */ /;s/ *;.*//;}' \ -e '/intDefault/{s/^.*intDefault */ /;}' \ -e '/booleanDefault/{s/^.*booleanDefault */ /;}' \ | awk 'NF==3{print $$3,$$2,$$1}' >> xtrekrc.tmp @sort -u xtrekrc.tmp \ | awk 'NF==2{var=$$1;value=$$2} \ NF==3{if (length($$1)<=2)\ {print "# "$$2,$$1}\ else if (var==$$1)\ {print "# "$$2,value}\ else\ {print "# "$$2,$$3};}' > xtrekrc.tmp1 @grep 'getdefault' $(RSRC) $(MAINSRC) $(X11SRC) $(WIN32SRC) \ | grep '\"' \ | sed -e '{s|^.*getdefault[^\"]*\"|# |;s|\".*|: |;}' \ >> xtrekrc.tmp1 @echo '# Automatic created xtrekrc with default values' \ > xtrekrc @sort -u xtrekrc.tmp1\ >> xtrekrc -$(RM) xtrekrc.tmp* # DO NOT DELETE THIS LINE -- make depend depends on it. netrek-client-cow-3.3.2/docwin.c0000664000175000017500000001514713657750470015510 0ustar jamesjames#include "config.h" #include "copyright.h" #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "cowmain.h" #include "defaults.h" #include "docwin.h" extern char cbugs[]; #define NORMAL 0 #define BOLD 1 #define ITALIC 2 struct list { int face; struct list *next; char *data; }; static struct list *docdata = NULL; static struct list *xtrekrcdata = NULL; char *malloc_fail = "Warning: couldn't malloc space for a new doc line!\n"; void showdocs(int atline) { int i, length, top, center; struct list *data; int count; char buf[128]; W_Font font; if (!docwin) docwin = W_MakeWindow("DocWin", 0, 181, 500, 500, 0, 2, foreColor); W_ClearWindow(docwin); if (!W_IsMapped(docwin)) W_MapWindow(docwin); snprintf(buf, sizeof(buf), "--- %s ---", (char *) query_cowid()); length = strlen(buf); /* using GWINSIDE instead of TWINSIDE because with small_screen set it * makes more sense to use the smaller width in the interest of saving * screen real estate */ center = GWINSIDE / 2 - (length * W_Textwidth) / 2; W_WriteText(docwin, center, W_Textheight, textColor, buf, length, W_BoldFont); snprintf(buf, sizeof(buf), "%s", cbugs); length = strlen(buf); center = GWINSIDE / 2 - (length * W_Textwidth) / 2; W_WriteText(docwin, center, 3 * W_Textheight, textColor, buf, length, W_RegularFont); if (!docdata) loaddocs(); top = 10; if (atline > maxdoclines) atline = maxdoclines - 28; data = docdata; for (i = 0; i < atline; i++) { if (data == NULL) { atline = 0; data = docdata; break; } data = data->next; } count = 28; /* Magical # of lines to display */ for (i = top; i < 50; i++) { if (data == NULL) break; if (data->data == NULL) continue; switch (data->face) { case BOLD: font = W_BoldFont; break; case ITALIC: font = W_UnderlineFont; break; case NORMAL: font = W_RegularFont; break; } W_WriteText(docwin, 20, i * W_Textheight, textColor, data->data, strlen(data->data), font); data = data->next; count--; if (count <= 0) break; } } void loaddocs(void) { FILE *fptr; struct list *temp = NULL; struct list *fl = NULL; char line[80], *filename = NULL; int i; filename = getdefault("documentation"); if (filename) { if ((fptr = fopen(filename, "r")) == NULL) return; } else if ((fptr = fopen("BRM.DOC", "r")) == NULL) return; temp = (struct list *) malloc(sizeof(struct list)); if (temp == NULL) { /* malloc error checking -- 10/30/92 EM */ printf("%s", malloc_fail); return; } while (fgets(line, 80, fptr) != NULL) { if (fl == NULL) fl = temp; if (line[strlen(line) - 1] == '\n') line[strlen(line) - 1] = '\0'; temp->face = NORMAL; if (line[0] == '\f') line[0] = ' '; if (line[0] == 0x1b) { switch (line[1]) { case 'b': temp->face = BOLD; break; case 'i': temp->face = ITALIC; break; } line[0] = line[1] = ' '; } for (i = 0; i < strlen(line); i++) if (line[i] == '\t') line[i] = ' '; temp->data = (char *) malloc(strlen(line) + 1); strcpy(temp->data, line); temp->next = (struct list *) malloc(sizeof(struct list)); if (temp->next == NULL) { /* malloc error checking -- 10/30/92 EM */ printf("%s", malloc_fail); return; } maxdoclines++; temp = temp->next; temp->data = NULL; temp->next = NULL; } temp->next = NULL; docdata = fl; } void showxtrekrc(int atline) { int i, length, top, center; struct list *data; int count; char buf[128]; W_Font font; if (!xtrekrcwin) xtrekrcwin = W_MakeWindow("xtrekrcWin", 0, 200, 500, 500, 0, 2, foreColor); W_ClearWindow(xtrekrcwin); if (!W_IsMapped(xtrekrcwin)) W_MapWindow(xtrekrcwin); snprintf(buf, sizeof(buf), "--- %s ---", (char *) query_cowid()); length = strlen(buf); center = GWINSIDE / 2 - (length * W_Textwidth) / 2; W_WriteText(xtrekrcwin, center, W_Textheight, textColor, buf, length, W_BoldFont); snprintf(buf, sizeof(buf), "%s", cbugs); length = strlen(buf); center = GWINSIDE / 2 - (length * W_Textwidth) / 2; W_WriteText(xtrekrcwin, center, 3 * W_Textheight, textColor, buf, length, W_RegularFont); if (!xtrekrcdata) loadxtrekrc(); top = 10; if (atline > maxxtrekrclines) atline = maxxtrekrclines - 28; data = xtrekrcdata; for (i = 0; i < atline; i++) { if (data == NULL) { atline = 0; data = xtrekrcdata; break; } data = data->next; } count = 28; /* Magical # of lines to display */ for (i = top; i < 50; i++) { if (data == NULL) break; if (data->data == NULL) continue; switch (data->face) { case BOLD: font = W_BoldFont; break; case ITALIC: font = W_UnderlineFont; break; case NORMAL: font = W_RegularFont; break; } W_WriteText(xtrekrcwin, 20, i * W_Textheight, textColor, data->data, strlen(data->data), font); data = data->next; count--; if (count <= 0) break; } } void loadxtrekrc(void) { FILE *fptr; struct list *temp = NULL; struct list *fl = NULL; char line[80], filename[256]; int i; filename[0] = '\0'; #ifndef WIN32 if (!findfile(".netrekrc", filename) && !findfile(".xtrekrc", filename)) return; #else if (!findfile("netrekrc", filename) && !findfile("xtrekrc", filename)) return; #endif if ((fptr = fopen(filename, "r")) == NULL) return; temp = (struct list *) malloc(sizeof(struct list)); if (temp == NULL) { /* malloc error checking -- 10/30/92 EM */ printf("%s", malloc_fail); return; } while (fgets(line, 80, fptr) != NULL) { if (fl == NULL) fl = temp; if (line[strlen(line) - 1] == '\n') line[strlen(line) - 1] = '\0'; temp->face = NORMAL; if (line[0] == '\f') line[0] = ' '; if (line[0] == '#') temp->face = ITALIC; for (i = 0; i < strlen(line); i++) if (line[i] == '\t') line[i] = ' '; temp->data = (char *) malloc(strlen(line) + 1); strcpy(temp->data, line); temp->next = (struct list *) malloc(sizeof(struct list)); if (temp->next == NULL) { /* malloc error checking -- 10/30/92 EM */ printf("%s", malloc_fail); return; } maxxtrekrclines++; temp = temp->next; temp->data = NULL; temp->next = NULL; } temp->next = NULL; xtrekrcdata = fl; } netrek-client-cow-3.3.2/configure.ac0000664000175000017500000001474213657750470016347 0ustar jamesjamesdnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Netrek installation dnl to configure the system for the local environment. AC_INIT(name.c) AC_CANONICAL_SYSTEM AC_CONFIG_HEADER(config.h) AC_PROG_INSTALL AC_PROG_CC AC_PROG_CPP AC_PROG_LN_S AC_AIX AC_C_INLINE #-------------------------------------------------------------------- # Include sys/select.h if it exists and if it supplies things # that appear to be useful. This appears to be true only on # the RS/6000 under AIX. Some systems like OSF/1 have a # sys/select.h that's of no use, and other systems like SCO # UNIX have a sys/select.h that's pernicious. If there isn't # a sys/select.h, then make sure that "fd_set" is defined in # sys/types.h. #-------------------------------------------------------------------- AC_MSG_CHECKING(if fd_set requires sys/select.h) AC_TRY_COMPILE( [#include ], [fd_set readMask, writeMask;], AC_MSG_RESULT(no) , AC_EGREP_HEADER(fd_set, sys/select.h, AC_DEFINE(NEED_SYS_SELECT_H) AC_MSG_RESULT(yes), AC_DEFINE(NO_FD_SET) AC_MSG_RESULT(fd_set missing))) #-------------------------------------------------------------------- # Check for various typedefs and provide substitutes if # they don't exist. #-------------------------------------------------------------------- AC_HEADER_STDC AC_CHECK_HEADERS(unistd.h memory.h math.h stdlib.h) AC_CHECK_HEADERS(sys/timeb.h sys/ptyio.h sys/fcntl.h fcntl.h) AC_CHECK_HEADERS(ctype.h machine/endian.h sys/resource.h) AC_CHECK_HEADERS(sys/wait.h netinet/in.h netinet/tcp.h sys/filio.h) AC_TYPE_PID_T AC_TYPE_UID_T AC_TYPE_SIZE_T AC_FUNC_VFORK AC_STRUCT_TM AC_MSG_CHECKING(for itimer in time.h) AC_EGREP_HEADER(itimerval, time.h, AC_MSG_RESULT(yes) , AC_DEFINE(NEED_SYS_TIME_H) AC_MSG_RESULT(no)) AC_CHECK_SIZEOF(long) AC_MSG_CHECKING(for u_int in sys/types.h) AC_EGREP_HEADER(u_int, sys/types.h, AC_MSG_RESULT(yes) , AC_DEFINE(NO_U_INT) AC_MSG_RESULT(no)) AC_MSG_CHECKING(for PATH_MAX in limits.h) AC_EGREP_CPP(PATH_MAX, [ #include PATH_MAX ], AC_DEFINE(NO_PATH_MAX) AC_MSG_RESULT(no), AC_MSG_RESULT(yes)) AC_CHECK_FUNCS(strcmpi strncmpi) #-------------------------------------------------------------------- # Locate the X11 header files and the X11 library archive. #-------------------------------------------------------------------- AC_PATH_X AC_DEFINE(HAVE_X11) AC_DEFINE(HAVE_X11_XPM_H) NOWIN32="#" if test -z "$NOX11" ; then if test -z "$x_libraries" ; then echo checking for X11 header files XINCLUDES="" AC_TRY_CPP([#include ], , XINCLUDES="nope") if test "$XINCLUDES" = nope; then dirs="/usr/unsupported/include /usr/local/include /usr/X386/include \ /usr/include/X11R4 /usr/X11R5/include /usr/include/X11R5 \ /usr/openwin/include /usr/X11/include /pub/X11R5/include \ /usr/local/X11R5/include /usr/X11R6/include /usr/include/X11R6 \ /pub/X11R6/include /usr/local/X11R6/include" for i in $dirs ; do if test -r $i/X11/Intrinsic.h; then XINCLUDES=" -I$i" fi done fi if test "$XINCLUDES" = nope; then echo "Warning: couldn't find any X11 include files." XINCLUDES="" fi echo "checking for X11 library archive" AC_CHECK_LIB(X11, main, XLIBSWLIB="-lX11", XLIBSWLIB=nope) if test "$XLIBSWLIB" = nope; then dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib \ /usr/lib/X11R4 /usr/X11R5/lib /usr/lib/X11R5 /usr/openwin/lib \ /usr/X11/lib /pub/X11R5/lib /usr/local/X11R5/lib \ /usr/X11R6/lib /usr/lib/X11R6 /pub/X11R6/lib /usr/local/X11R6/lib" for i in $dirs ; do if test -r $i/libX11.a; then XLIBSWDIR="-L$i" XLIBSWLIB="-lX11" fi done fi if test "$XLIBSWLIB" = nope ; then AC_CHECK_LIB(Xwindow, main, XLIBSWLIB=-lXwindow) fi if test "$XLIBSWLIB" = nope ; then echo "Warning: couldn't find the X11 library archive. Using -lX11." XLIBSWLIB=-lX11 fi else XINCLUDES="-I$x_includes" XLIBSWDIR="-L$x_libraries" XLIBSWLIB="-lX11" fi fi AC_SUBST(NOX11) AC_SUBST(NOWIN32) SAVELIBS="$LIBS" LIBS="$LIBS $XLIBSWDIR $XLIBSWLIB" SAVEINCS="$INCS" INCS="$INCS $XINCLUDES" AC_CHECK_LIB(Xpm, main, [AC_DEFINE(HAVE_XPM) XPMLIBS="-lXpm"]) AC_CHECK_HEADERS(X11/xpm.h) LIBS="$SAVELIBS" INCS="$SAVEINCS" # Fix link order for Xpm XLIBSW="$XLIBSWDIR $XPMLIBS $XLIBSWLIB" INCS="$INCS $XINCLUDES" AC_SUBST(INCS) LIBS="$LIBS $XLIBSW" #-------------------------------------------------------------------- # Check for the existence of various libraries. The order here # is important, so that then end up in the right order in the # command line generated by Make. #-------------------------------------------------------------------- AC_CHECK_LIB(Xbsd, main, [LIBS="$LIBS -lXbsd"]) AC_CHECK_LIB(socket, main, [LIBS="$LIBS -lsocket"]) AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) AC_CHECK_LIB(nsl, main, [LIBS="$LIBS -lnsl"]) AC_CHECK_LIB(seq, main, [LIBS="$LIBS -lseq"]) AC_CHECK_LIB(sun, main, [LIBS="$LIBS -lsun"]) #-------------------------------------------------------------------- # Check for type of signals #-------------------------------------------------------------------- AC_TYPE_SIGNAL AC_CHECK_FUNCS(usleep random setstate strftime ftime) AC_CHECK_LIB(m, main, [LIBS="$LIBS -lm"]) AC_CHECK_FUNCS(nint) AC_EGREP_HEADER(rint, math.h, , AC_DEFINE(NEED_RINT_DEC)) AC_REPLACE_FUNCS(usleep setstate strdup rint) #-------------------------------------------------------------------- # Check for system dependent programs #-------------------------------------------------------------------- #-------------------------------------------------------------------- # Check for Imlib #-------------------------------------------------------------------- AC_SEARCH_LIBS([imlib_load_image], [Imlib2], [], [AC_MSG_ERROR([Could not find Imlib2])]) #-------------------------------------------------------------------- # Check for SDL #-------------------------------------------------------------------- AM_PATH_SDL(1.2.4, AC_DEFINE(HAVE_SDL),[]) AM_CONDITIONAL(HAVE_SDL, [test x"$no_sdl" != x"yes"]) if test x$no_sdl != xyes; then have_SDLmixer=no AC_CHECK_LIB(SDL_mixer, Mix_OpenAudio, [have_SDLmixer=yes SDL_MIXER_LIBS="-lSDL_mixer"]) if test x$have_SDLmixer != xyes; then AC_MSG_ERROR([*** Can't find the SDL_mixer library Try: http://www.libsdl.org/projects/SDL_mixer/]) AC_SUBST(SDL_MIXER_LIBS) fi fi #-------------------------------------------------------------------- # Emit output #-------------------------------------------------------------------- AC_OUTPUT(system.mk) netrek-client-cow-3.3.2/war.c0000664000175000017500000001171213657750470015010 0ustar jamesjames/****************************************************************************/ /** File: war.c **/ /** **/ /** Function: **/ /** This file contains the code for modifying war status. This **/ /** includes the display of the war options menu, the interpreting of **/ /** the user's selection, and the validation of the user's selection. **/ /** **/ /** Revisions: **/ /** **/ /** 9/20/93 VEG modified function waraction() to use switch **/ /** structure instead of successive if statements. Altered spacing **/ /** to improve clarity. **/ /****************************************************************************/ #include "config.h" #include "copyright.h" #include #include #include #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "socket.h" #include "warning.h" #include "war.h" /******************************************************************************/ /*** newhostile - identifies user request from the war options window ***/ /******************************************************************************/ static int newhostile; /******************************************************************************/ /*** Text needed for drawing the war options window ***/ /******************************************************************************/ static char *feds = "FED - "; static char *roms = "ROM - "; static char *klis = "KLI - "; static char *oris = "ORI - "; static char *gos = " Save"; static char *exs = " Exit - no change"; static char *peaces = "Peace"; static char *hostiles = "Hostile"; static char *wars = "War"; /******************************************************************************/ /*** fillwin() displays text into war window, deciding which color to use ***/ /******************************************************************************/ static void fillwin(int menunum, char *string, int hostile, int warbits, int team) { char buf[80]; if (team & warbits) { (void) sprintf(buf, " %s%s", string, wars); W_WriteText(war, 0, menunum, rColor, buf, strlen(buf), 0); } else if (team & hostile) { (void) sprintf(buf, " %s%s", string, hostiles); W_WriteText(war, 0, menunum, yColor, buf, strlen(buf), 0); } else { (void) sprintf(buf, " %s%s", string, peaces); W_WriteText(war, 0, menunum, gColor, buf, strlen(buf), 0); } } /******************************************************************************/ /*** warrefresh() redraws the text into the war options window ***/ /******************************************************************************/ static void warrefresh(void) { fillwin(0, feds, newhostile, me->p_swar, FED); fillwin(1, roms, newhostile, me->p_swar, ROM); fillwin(2, klis, newhostile, me->p_swar, KLI); fillwin(3, oris, newhostile, me->p_swar, ORI); W_WriteText(war, 0, 4, textColor, gos, strlen(gos), 0); W_WriteText(war, 0, 5, textColor, exs, strlen(exs), 0); } /******************************************************************************/ /*** warwindow() draws the war options window ***/ /******************************************************************************/ void warwindow(void) { W_MapWindow(war); newhostile = me->p_hostile; warrefresh(); } /******************************************************************************/ /*** waraction() accpets Xwindow event and processes the user's request. ***/ /*** This procedure will toggle war status for races, and will print error ***/ /*** message when the request cannot be granted. ***/ /******************************************************************************/ void waraction(W_Event * data) { int enemyteam; switch (data->y) { case 0: enemyteam = FED; break; case 1: enemyteam = ROM; break; case 2: enemyteam = KLI; break; case 3: enemyteam = ORI; break; case 4: W_UnmapWindow(war); sendWarReq(newhostile); return; break; case 5: W_UnmapWindow(war); return; break; } if (me->p_swar & enemyteam) { warning("You are already at war. Status cannot be changed."); W_Beep(); } else { if (me->p_team == enemyteam) { warning("You can't declare war on your own team, fool."); } else { newhostile ^= enemyteam; } } warrefresh(); } netrek-client-cow-3.3.2/dashboard.h0000664000175000017500000000003013657750470016142 0ustar jamesjamesvoid db_redraw(int fr); netrek-client-cow-3.3.2/cowmain.c0000664000175000017500000005244013657750470015657 0ustar jamesjames#include #include "config.h" #include "copyright.h" #include INC_MACHINE_ENDIAN #include #include INC_STRINGS #include #include #include #include #include #include #include INC_SYS_TIME #include INC_SYS_WAIT #include INC_SYS_RESOURCE #include INC_SYS_SELECT #include "Wlib.h" #include "defs.h" #include "struct.h" #include "data.h" #include "packets.h" #include "version.h" #include "patchlevel.h" #include "censor.h" #include "check.h" #include "defaults.h" #include "dmessage.h" #include "enter.h" #include "feature.h" #include "findslot.h" #include "getname.h" #include "getship.h" #include "input.h" #include "lagmeter.h" #include "map.h" #include "newwin.h" #include "ping.h" #include "pingstats.h" #include "playerlist.h" #include "parsemeta.h" #include "short.h" #include "smessage.h" #include "socket.h" #include "stats.h" #include "warning.h" #include "cowmain.h" int takeNearest = 0; extern char cflags[], arch[], cdate[], cbugs[], cowid[], cwho[]; jmp_buf env; int isFirstEntry; #define RETURNBASE 10 void terminate(int error); #ifdef IGNORE_SIGNALS_SEGV_BUS int died_from_signal = 0; RETSIGTYPE reset_game(int); #endif #ifdef GATEWAY /*-----------------------------------------------------------*/ /* IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT * * Set MYADDR and MYADDR_MASK to however much of the address is significant. For * example, I want to restrict the use of my clients to the 129.212 subnet * (all machines within Amdahl), so I set MYADDR=0x81d40000, and MYADDR_MASK * to be 0xffff0000. The host's address will be ANDed with the mask and then * compared to MYADDR. * * If you only want your client to be run on your host, then you'd use all eight * bytes. */ #define MYADDR 0x81d40000 #define MYADDR_MASK 0xffff0000 /* we want these for the client subnet validation */ #include #include INC_NETINET_IN #include INC_NETINET_TCP #include extern char *getenv(); char *home, homedot[256]; #define DEFAULT_GATEWAY "rebel" #ifdef WHAT_THE_FUCK char *get_gw(); #endif unsigned LONG mkaddr(); unsigned LONG netaddr; /* used for blessedness checking */ int serv_port; /* used for blessedness checking */ char *gateway = DEFAULT_GATEWAY; #ifdef TREKHOPD static int trekhopd_port = 6592; int use_trekhopd = 0; int port_req = 6592; char *host_req = "rebel"; #endif typedef struct { char id[16]; char inet_addr[24]; int remote_port; int gw_port; char full_name[64]; char comment[40]; } SERVER_LIST; #define MAX_SERVER 128 static SERVER_LIST servers[MAX_SERVER]; /* that ought to be enough */ #define SERVER_DIR "/usr/local/games/" #define SERVER_FILE ".trekgwrc" static int server_count = 0; #define WSPC " \t" unsigned LONG strToNetaddr(str) char *str; { SERVER_LIST *slp; char *t; unsigned LONG answer; int i; if (!server_count) { fprintf(stderr, "No server list, cannot resolve id\n"); return -1; } /* find the one we want */ for (i = 0, slp = servers; i < server_count; i++, slp++) { if (!strcmp(str, slp->id)) { printf("%s is %s(%d) (%s)\n", slp->id, slp->full_name, slp->remote_port, slp->comment); xtrekPort = slp->gw_port; str = slp->inet_addr; break; } } if (i == server_count) { fprintf(stderr, "Specified server not found.\n"); return -1; } /* now "str" is either the original string or slp->inet_addr */ /* (this will be wrong if -H isn't last on command line) */ answer = 0; t = str; for (i = 0; i < 4; i++) { answer = (answer << 8) | atoi(t); while (*t && *t != '.') t++; if (*t) t++; } #ifdef TREKHOPD /* do things slightly different */ if (slp->id == NULL) { fprintf(stderr, "ERROR: host ID '%s' unknown\n", str); return -1; } xtrekPort = trekhopd_port; /* ought to have an arg to * * * * specify this */ port_req = slp->remote_port; host_req = slp->full_name; printf("Connecting to %s (%d) via trekhopd (%s %d)\n", host_req, port_req, serverName, xtrekPort); #else printf("Connecting to %s through %s port %d\n", str, serverName, xtrekPort); #endif return answer; } /* for trekhopd, only gw_local_port is important */ /* (should be possible to eliminate that too, but I want minimal changes) */ typedef struct { int uid; int serv_port; int port; int local_port; } UDPMAP; #define MAX_UDPMAP 32 static UDPMAP udpmap[MAX_UDPMAP]; static int map_count; getUdpPort() { int i; uid_t uid; char *gw_m, *gw_p, *gw_lp, *gw_sp, *err, *getenv(); /* should always be set prior, but in case not .. */ if (!gw_mach) { gw_m = getenv("GW_MACH"); if (gw_m) gw_mach = gw_m; else gw_mach = gateway; } uid = getuid(); for (i = 0; i < map_count; i++) { if (uid == udpmap[i].uid) { gw_serv_port = udpmap[i].serv_port; gw_port = udpmap[i].port; gw_local_port = udpmap[i].local_port; return; } } printf("unable to get ports for your uid\n"); /* debug */ gw_p = getenv("GW_PORT"); gw_sp = getenv("GW_SPORT"); gw_lp = getenv("GW_LPORT"); if (gw_p) { gw_port = strtol(gw_p, &err, 10); if (err == gw_p) { fprintf(stderr, "netrek: malformed integer for GW_PORT: %s\n", gw_p); /* let something else complain about port 0 */ } } else gw_port = 5001; if (gw_sp) { gw_serv_port = strtol(gw_sp, &err, 10); if (err == gw_sp) { fprintf(stderr, "netrek: malformed integer for GW_SPORT: %s\n", gw_sp); /* let something else complain about port 0 */ } } else gw_serv_port = 5000; if (gw_lp) { gw_local_port = strtol(gw_lp, &err, 10); if (err == gw_lp) { fprintf(stderr, "netrek: malformed integer for GW_LPORT: %s\n", gw_lp); /* let something else complain about port 0 */ } } else gw_local_port = 5000; /* printf("gw_mach: \'%s\'\n", gw_mach); printf("gw_local_port: %d\n", * * * gw_local_port); printf("gw_serv_port: %d\n", gw_serv_port); * * * printf("gw_port: %d\n", gw_port); */ } /* In the event of problems assiocated with the above include files the * following routine can be alternately used to convert a string * ("xxx.xxx.xxx.xxx") to an internet address number. */ #ifdef notneeded unsigned LONG dotAddrToNetAddr(str) char *str; { char *t; unsigned LONG answer = 0; t = str; for (i = 0; i < 4; i++) { answer = (answer << 8) | atoi(t); while (*t && *t != '.') t++; if (*t) t++; } return answer; } #endif /* More network "correct" routine */ unsigned LONG mkaddr(m) char *m; { struct in_addr ad; struct hostent *hp; hp = gethostbyname(m); if (!hp) { ad.s_addr = inet_addr(m); if (ad.s_addr == -1) { fprintf(stderr, "netrek: unknown host \'%s\'\n", m); terminate(1); } } else MCOPY(hp->h_addr, (char *) &ad, hp->h_length); return ad.s_addr; } #ifdef WHAT_THE_FUCK char * get_gw() { char *gw_m; gw_m = getenv("GW_MACH"); if (gw_m) gw_mach = gw_m; else gw_mach = gateway; return gw_mach; } #endif /* This is not very robust. */ void read_servers() { FILE *fp; SERVER_LIST *slp; UDPMAP *ump; char buf[128]; int state; char *cp; server_count = map_count = 0; fp = NULL; if (getenv("HOME") != NULL) { STRNCPY(homedot, getenv("HOME"), sizeof(homedot)); strcat(homedot, "/"); strcat(homedot, SERVER_FILE); fp = fopen(homedot, "r"); } if (fp == NULL) { /* failed, try common one */ STRNCPY(buf, SERVER_DIR, sizeof(SERVER_DIR)); STRNCPY(buf, SERVER_FILE, sizeof(SERVER_FILE)); fp = fopen(buf, "r"); } if (fp == NULL) { /* failed, try current directory */ fp = fopen(SERVER_FILE, "r"); } if (fp == NULL) { /* failed, give up */ perror("warning: Unable to open server list"); fprintf(stderr, "Tried to open '%s', '%s', and './%s'\n", homedot, buf, SERVER_FILE); return; } state = 0; while (1) { fgets(buf, 128, fp); if (ferror(fp) || feof(fp)) { if (ferror(fp)) perror("fgets"); break; } /* skip blank lines and lines which start with '#' */ if (*buf == '\0' || *buf == '\n' || *buf == '#') continue; buf[strlen(buf) - 1] = '\0'; /* strip the trailing '\n' */ switch (state) { case 0: /* "trekhopd" or "gw" */ #ifdef TREKHOPD use_trekhopd = 0; if (!strcmp(buf, "trekhopd")) use_trekhopd = 1; #endif state++; break; case 1: /* gateway host */ gateway = (char *) malloc(strlen(buf) + 1); strcpy(gateway, buf); state++; break; case 2: /* trekhopd port */ trekhopd_port = atoi(buf); state++; break; case 3: /* UDP map */ if (!strcmp(buf, "END")) { state++; break; } if (map_count >= MAX_UDPMAP) { fprintf(stderr, "UDP map too large; max is %d entries\n", MAX_UDPMAP); break; } ump = &udpmap[map_count]; cp = strtok(buf, WSPC); /* skip ascii uid */ cp = strtok(NULL, WSPC); ump->uid = atoi(cp); cp = strtok(NULL, WSPC); ump->serv_port = atoi(cp); cp = strtok(NULL, WSPC); ump->port = atoi(cp); cp = strtok(NULL, WSPC); ump->local_port = atoi(cp); #ifdef DEBUG printf("%2d: %-8d %-8d %-8d %-8d\n", map_count, ump->uid, ump->serv_port, ump->port, ump->local_port); #endif map_count++; break; case 4: /* host description */ if (!strcmp(buf, "END")) { state++; break; } if (server_count >= MAX_SERVER) { fprintf(stderr, "server list too large; max is %d entries\n", MAX_SERVER); break; } slp = &servers[server_count]; cp = strtok(buf, WSPC); STRNCPY(slp->id, cp, sizeof(slp->id)); cp = strtok(NULL, WSPC); STRNCPY(slp->inet_addr, cp, sizeof(slp->inet_addr)); cp = strtok(NULL, WSPC); slp->remote_port = atoi(cp); cp = strtok(NULL, WSPC); slp->gw_port = atoi(cp); cp = strtok(NULL, WSPC); STRNCPY(slp->full_name, cp, sizeof(slp->full_name)); cp = strtok(NULL, "\"\t"); STRNCPY(slp->comment, cp, sizeof(slp->comment)); #ifdef DEBUG printf("%2d: %-9s %-15s %-5d %-5d %-25s \"%s\"\n", server_count, slp->id, slp->inet_addr, slp->remote_port, slp->gw_port, slp->full_name, slp->comment); #endif server_count++; break; case 5: /* all done! */ break; default: fprintf(stderr, "Whoops!\n"); terminate(2); } } fclose(fp); } #endif /* GATEWAY */ /* end of gateway-specific mass */ /* ------------------------------------------------------------------------- */ char defaulttmp[100]; RETSIGTYPE handle_exception(int); #ifdef PACKET_LOG extern int log_packets; #endif char * query_cowid(void) { return cowid; } /* Variables passing Optional Arguments to cowmain */ char *deffile = NULL; char *recordFileName = NULL; char *logFileName = NULL; char *display_host = NULL; int passive = 0; /* whether -s specified on * * * commandline */ int checking = 0; /* whether -c specified on * * * commandline */ #ifdef META int usemeta = 0; #define DEFAULT_METATYPE 1 #endif int cowmain(char *server, int port, char *name) { int team, s_type; char *cp; char buf[80]; struct passwd *pwent; int i; i = setjmp(env); /* Error while initializing */ if (i >= RETURNBASE) return i - RETURNBASE; /* Terminate with retcode */ #ifdef GATEWAY /* restrict this client to certain machines */ { struct sockaddr_in saddr; struct hostent *hp; char myname[64]; LONG myaddr; if (gethostname(myname, 64) < 0) { perror("gethostname"); return 1; } if ((myaddr = inet_addr(myname)) == -1) { if ((hp = gethostbyname(myname)) == NULL) { fprintf(stderr, "unable to get addr for local host\n"); return 1; } myaddr = *(LONG *) hp->h_addr; } /* printf("myname = '%s', myaddr = 0x%.8lx\n", myname, myaddr); */ if ((myaddr & MYADDR_MASK) != MYADDR) { fprintf(stderr, "Sorry, you may not run this client on this host\n"); return 1; } } #endif #ifdef GATEWAY read_servers(); serverName = gateway; #endif pseudo[0] = defpasswd[0] = '\0'; #ifdef RECORDGAME if (recordFileName != NULL) { recordFile = fopen(recordFileName, "wb"); if (recordFile == NULL) { perror(recordFileName); return 1; } } #endif if (logFileName != NULL) { logFile = fopen(logFileName, "a"); if (logFile == NULL) { perror(logFileName); return 1; } } for (i = 0; i < 80; i++) { outmessage[i] = '\0'; } #ifndef DEBUG (void) SIGNAL(SIGFPE, handle_exception); #endif SRANDOM(time(0)); initDefaults(deffile); identityBlind = booleanDefault("identityBlind", identityBlind); versionHide = booleanDefault("versionHide", versionHide); xtrekPort = port; if (server) { if (xtrekPort < 0) { sprintf(defaulttmp, "port.%s", server); xtrekPort = intDefault(defaulttmp, -1); if (checking) xtrekPort = xtrekPort - 1; } sprintf(defaulttmp, "server.%s", server); /* check for "abbreviation" */ serverName = getdefault(defaulttmp); if (!serverName) /* no abbreviation found */ serverName = server; } SRANDOM(getpid() * time(NULL)); if (!passive) { if (!serverName) serverName = getdefault("server"); if (!serverName) #ifdef META if (!usemeta) { fprintf(stderr, "using metaserver\n"); usemeta = 1; } #else printf("No server name was given. Please put a default server in\n"); printf("your .xtrekrc file or specify the server in the command line.\n"); terminate(1); #endif } if (xtrekPort < 0) { xtrekPort = intDefault("port", DEFAULT_PORT); if (checking) xtrekPort = xtrekPort - 1; } if (checking) check(); if (!logFileName) logFileName = getdefault("logfile"); if (logFileName != NULL) { logFile = fopen(logFileName, "a"); if (logFile == NULL) { perror(logFileName); return 1; } } #ifdef META if (usemeta) { newwinmeta(display_host, name); parsemeta(); metawindow(); metainput(); /* calls terminate() on quit, may fork(2) */ } #endif newwin(display_host, name); resetdefaults(); #if defined(SOUND) && (defined(HAVE_SDL) || defined(sgi)) Init_Sound(); #endif if (censorMessages) initCensoring(); /* open memory...? */ openmem(); #ifdef GATEWAY /* pick a nice set of UDP ports */ getUdpPort(); #endif cp = getdefault("login"); if (cp == NULL) { if ((pwent = getpwuid(getuid())) != NULL) cp = pwent->pw_name; else cp = "Bozo"; } (void) STRNCPY(login, cp, sizeof(login)); login[sizeof(login) - 1] = '\0'; if (fastGuest) strcpy(pseudo, "guest"); else if (pseudo[0] == '\0') { if ((cp = getdefault("name")) != 0) (void) STRNCPY(pseudo, cp, sizeof(pseudo)); else (void) STRNCPY(pseudo, login, sizeof(pseudo)); } pseudo[sizeof(pseudo) - 1] = '\0'; if (fastGuest) strcpy(defpasswd, "guest"); else if (defpasswd[0] == '\0') if ((cp = getdefault("password")) != 0) (void) STRNCPY(defpasswd, cp, sizeof(defpasswd)); defpasswd[sizeof(defpasswd) - 1] = '\0'; if (!passive) { callServer(xtrekPort, serverName); } else { connectToServer(xtrekPort); } #ifdef FEATURE_PACKETS sendFeature("FEATURE_PACKETS", 'S', 1, 0, 0); #endif findslot(); lastm = mctl->mc_current; mapAll(); #ifndef RWATCH getname(pseudo, defpasswd); #else MZERO(mystats, sizeof(mystats)); mystats->st_tticks = 1; mystats->st_flags = ST_MAPMODE + ST_NAMEMODE + ST_SHOWSHIELDS + ST_KEEPPEACE + ST_SHOWLOCAL * 2 + ST_SHOWGLOBAL * 2; #endif /* RWATCH */ loggedIn = 1; phaserWindow = booleanDefault("phaserWindow", phaserWindow); #ifdef AUTOKEY /* autokey.c */ autoKeyDefaults(); #endif /* AUTOKEY */ initkeymap(); sendOptionsPacket(); /* Set p_hostile to hostile, so if keeppeace is on, the guy starts off * * * hating everyone (like a good fighter should) */ me->p_hostile = (FED | ROM | KLI | ORI); if (!newDashboard) { sprintf(buf, "Maximum: %2d %3d %3d %3d %6d %3d %3d", 0, 0, 0, 0, 0, 0, 0); W_WriteText(tstatw, 50, 27, textColor, buf, strlen(buf), W_RegularFont); } me->p_planets = 0; me->p_genoplanets = 0; me->p_armsbomb = 0; me->p_genoarmsbomb = 0; /* Set up a reasonable default */ #ifndef RWATCH me->p_whydead = KQUIT; me->p_team = ALLTEAM; s_type = CRUISER; #endif /* RWATCH */ startPing(); /* support ping stuff */ #ifdef AUTOKEY if (autoKey) { /* XX: changes entire state of display */ W_AutoRepeatOff(); } #endif /* Moved SDL sound initialization to right after readdefaults() so * the intro can start playing ASAP */ #if defined(SOUND) && !defined(HAVE_SDL) && !defined(sgi) Init_Sound(); #endif isFirstEntry = 1; /* First entry into game */ i = setjmp(env); /* Reentry point of game */ if (i >= RETURNBASE) { W_FullScreenOff(baseWin); W_Flush(); return i - RETURNBASE; /* Terminate with retcode */ } #ifdef IGNORE_SIGNALS_SEGV_BUS if (ignore_signals) { (void) SIGNAL(SIGBUS, reset_game); (void) SIGNAL(SIGSEGV, reset_game); } if (died_from_signal) { died_from_signal = 0; input(); } else { #endif #if defined(SOUND) #if defined(sgi) Engine_Sound(ENG_OFF); /* turn off engine sound */ #else /* text in sound.c:soundrefresh() says engine sound is not supported Abort_Sound(ENGINE_SOUND); */ #endif #endif /* give the player the motd and find out which team he wants */ #ifndef RWATCH /* check if this dude is trying to resume a ghostbust slot */ if (ghoststart) { char *getteam = "IFR K O"; int i; ghoststart = 0; for (i = 0; i < 9; i++) if (getteam[i] == me->p_mapchars[0]) break; me->p_team = i; if (me->p_damage > me->p_ship.s_maxdamage) { me->p_status = POUTFIT; entrywindow(&team, &s_type); } else me->p_status = PALIVE; } else { /* give the player the motd and find out which team he wants */ entrywindow(&team, &s_type); } if (team == -1) { W_FullScreenOff(baseWin); W_Flush(); W_DestroyWindow(baseWin); #ifdef AUTOKEY if (autoKey) W_AutoRepeatOn(); #endif sendByeReq(); fprintf(stderr, "you quit\n"); #if defined(SOUND) Exit_Sound(); #endif if (logFile != NULL) fclose(logFile); #ifdef PACKET_LOG if (log_packets) Dump_Packet_Log_Info(); #endif return 0; } #endif /* RWATCH */ { char buf[80]; if (me->p_stats.st_rank < nranks) { sprintf(buf, "Welcome aboard %s!", ranks[me->p_stats.st_rank].name); } else { sprintf(buf, "Welcome aboard!"); } warning(buf); W_ClearArea(messagew, 5, 5, W_Textwidth * 80, W_Textheight); } sendVersion(); getship(myship, myship->s_type); redrawall = 2; shipchange(s_type); enter(); calibrate_stats(); W_ClearWindow(w); /* for (i = 0; i < NSIG; i++) { (void) SIGNAL(i, SIG_IGN); } */ me->p_flags &= ~(PFYELLOW | PFRED | PFENG); /* Reset flags to avoid sounds */ me->p_flags |= PFGREEN | PFSHIELD; /* ... from previous alerts */ me->p_status = PALIVE; /* Put player in game */ PlistNoteUpdate(me->p_no); if (showStats) /* Default showstats are on. * */ W_MapWindow(statwin); if (W_IsMapped(lMeter)) redrawLMeter(); if (W_IsMapped(pStats)) /* support ping stuff */ redrawPStats(); if (isFirstEntry) { if (tryUdp && commMode != COMM_UDP) sendUdpReq(COMM_UDP); #ifdef SHORT_PACKETS /* should we be checking for * * * udp on here? */ if (tryShort) sendShortReq(SPK_VON); else { /* * If tryShort is true, we get an automatic `-' style update * when the short packets kick in, so this is not necessary. */ sendUdpReq(COMM_UPDATE); } #else /* `=' style update to get the kills in the playerlist right */ sendUdpReq(COMM_UPDATE); #endif isFirstEntry = 0; } DisplayMessage(); #ifdef SOUND #if defined(sgi) Engine_Sound(ENG_ON); #else /* text in sound.c:soundrefresh() says engine sound is not supported Play_Sound(ENGINE_SOUND); */ #endif Play_Sound(ENTER_SHIP_SOUND); #endif #ifdef HOCKEY_LINES init_hockey_lines(); #endif /* Get input until the player quits or dies */ input(); #ifdef IGNORE_SIGNALS_SEGV_BUS } #endif return 0; } RETSIGTYPE handle_exception(int _dummy) { printf("floating point exception error detected; attempting to continue\n"); #ifdef WIN32 /* Under Watcom C++, after a signal handler is called the signal reverts to * * * SIG_DFL so has to be reset... is this standard? */ (void) SIGNAL(SIGFPE, handle_exception); #endif } #ifdef IGNORE_SIGNALS_SEGV_BUS RETSIGTYPE reset_game(int _dummy) { died_from_signal = 1; longjmp(env, 0); } #endif void terminate(int error) { #ifdef RECORDGAME if (recordFile) fclose(recordFile); #endif longjmp(env, RETURNBASE + error); }