Index: branches/charge_board/code/projects/colonet/ColonetServer/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/Makefile	(revision 62)
@@ -0,0 +1,36 @@
+# ColonetServer makefile
+
+CC = g++
+CFLAGS = -Wall -Wshadow -Wextra -g
+
+COLONETCPPFILES = ColonetServer.cpp client.cpp ConnectionPool.cpp
+COLONETCPPOBJECTS = $(COLONETCPPFILES:.cpp=.o)
+COLONETFILES = options.c
+COLONETOBJECTS = $(COLONETFILES:.c=.o)
+LOGGINGFILES = Log.cpp
+LOGGINGOBJECTS = $(LOGGINGFILES:.cpp=.o)
+
+VPATH = ../lib:../lib/colonet_wireless
+INCLUDE_DIRS = ../lib/colonet_wireless ../lib
+LIBRARY_DIRS = ../lib
+
+
+#this takes the include directory and puts a -I in front of each directory name before being used in a gcc statement
+INCLUDE_DIRS_FOR_GCC = $(patsubst %, -I %, $(INCLUDE_DIRS))
+#this takes the library directory and puts a -L in front of each directory name so it can be used in a gcc statement
+LIBRARY_DIRS_FOR_GCC = $(patsubst %,-L%, $(LIBRARY_DIRS))
+
+.PHONY : all clean
+
+all: ColonetServer
+
+#TODO: make a variable that handles the multiple -I blah stuff so it doesn't have to be written on every line
+#TODO: make use of VPATH or vpath directive to point at lib directory and then use -lcolonet_wireless
+ColonetServer: $(COLONETCPPFILES) $(COLONETFILES) $(LOGGINGFILES) -lcolonet_wireless
+	$(CC) $(CFLAGS) -c $(COLONETFILES) $(INCLUDE_DIRS_FOR_GCC)
+	$(CC) $(CFLAGS) -c $(COLONETCPPFILES) $(INCLUDE_DIRS_FOR_GCC)
+	$(CC) $(CFLAGS) -c $(LOGGINGFILES) $(INCLUDE_DIRS_FOR_GCC)
+	$(CC) $(CFLAGS) $(COLONETOBJECTS) $(COLONETCPPOBJECTS) $(LOGGINGOBJECTS) $(LIBRARY_DIRS_FOR_GCC) -lpthread -lcolonet_wireless $(INCLUDE_DIRS_FOR_GCC) -o $@
+
+clean: 
+	rm -rf *.o ColonetServer
Index: branches/charge_board/code/projects/colonet/ColonetServer/ConnectionPool.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/ConnectionPool.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/ConnectionPool.cpp	(revision 62)
@@ -0,0 +1,527 @@
+/**
+ * @file ConnectionPool.cpp
+ *
+ * @author Jason Knichel
+ * @date 7/22/07
+ */
+
+#include <sys/select.h>
+#include <ctype.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "includes/ConnectionPool.h"
+#include "includes/client.h"
+#include "../lib/colonet_defs.h"
+
+/**
+ * @brief The default constructor for ConnectionPool
+ */
+ConnectionPool::ConnectionPool() {
+  max_file_descriptor = 0;
+  next_available_slot = 0;
+  number_clients_ready = 0;
+
+  FD_ZERO(&ready_set);
+  FD_ZERO(&read_set);
+  FD_ZERO(&write_set);
+
+  memset(&client_file_descriptor_array, 0, sizeof(int)*MAX_CONNECTIONS);
+  memset(&read_buffer, 0, sizeof(char *)*MAX_CONNECTIONS);
+  memset(&read_buffer_size, 0, sizeof(int)*MAX_CONNECTIONS);
+  memset(&write_buffer, 0, sizeof(char *)*MAX_CONNECTIONS);
+  memset(&write_buffer_size, 0, sizeof(int)*MAX_CONNECTIONS);
+}
+
+/**
+ * @brief The destructor for ConnectionPool
+ */
+ConnectionPool::~ConnectionPool() {
+}
+
+/**
+ * @brief Adds a client to the connection pool
+ *
+ * @param client_file_descriptor The file descriptor to add to the connection pool
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::add_client(int client_file_descriptor) {
+  if (client_file_descriptor < 0) {
+    return ERROR_INVALID_CLIENT_DESCRIPTOR;
+  }
+
+  if (next_available_slot == MAX_CONNECTIONS) {
+    return ERROR_TOO_MANY_CLIENTS;
+  }
+
+  if (client_file_descriptor > max_file_descriptor) {
+    max_file_descriptor = client_file_descriptor;
+  }
+
+  FD_SET(client_file_descriptor, &ready_set);
+
+  int next_slot = next_available_slot;
+
+  client_file_descriptor_array[next_slot] = client_file_descriptor;
+  read_buffer[next_slot] = (char*) malloc(sizeof(char) * READ_BUFFER_SIZE);
+  if (!(read_buffer[next_slot])) {
+    return ERROR_ALLOCATING_MEMORY;
+  }
+  read_buffer_size[next_slot] = 0;
+  write_buffer[next_slot] = (char *)malloc(sizeof(char) * WRITE_BUFFER_SIZE);
+
+  if (!(write_buffer[next_slot])) {
+    free(read_buffer[next_slot]);
+    return ERROR_ALLOCATING_MEMORY;
+  }
+
+  write_buffer_size[next_slot] = 0;
+
+  next_available_slot++;
+
+  return 0;
+}
+
+/**
+ * @brief Removes a client from the connection pool
+ *
+ * @param The index in the pool of the client to remove
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::remove_client(int pool_index) {
+  if (pool_index < 0 || pool_index >= next_available_slot) {
+    return ERROR_INVALID_CLIENT_DESCRIPTOR;
+  }
+
+  int client_file_descriptor = client_file_descriptor_array[pool_index];
+
+  if (FD_ISSET(client_file_descriptor, &ready_set)) {
+    FD_CLR(client_file_descriptor, &ready_set);
+  }
+  if (FD_ISSET(client_file_descriptor, &read_set)) {
+    FD_CLR(client_file_descriptor, &read_set);
+  }
+  if (FD_ISSET(client_file_descriptor, &write_set)) {
+    FD_CLR(client_file_descriptor, &write_set);
+  }
+
+  free(read_buffer[pool_index]);
+  free(write_buffer[pool_index]);
+  for (int j = pool_index; j < next_available_slot - 1; j++) {
+    client_file_descriptor_array[pool_index] = client_file_descriptor_array[pool_index+1];
+    read_buffer[pool_index] = read_buffer[pool_index+1];
+    read_buffer_size[pool_index] = read_buffer_size[pool_index+1];
+    write_buffer[pool_index] = write_buffer[pool_index+1];
+    write_buffer_size[pool_index] = write_buffer_size[pool_index+1];
+  }
+  next_available_slot--;
+  int temp_max_file_descriptor = 0;
+
+  for (int j = 0; j < next_available_slot; j++) {
+    if (client_file_descriptor_array[j] > temp_max_file_descriptor)
+      temp_max_file_descriptor = client_file_descriptor_array[j];
+  }
+  max_file_descriptor = temp_max_file_descriptor;
+
+  printf("Removing client.\n");
+
+  return 0;
+}
+
+/**
+ * @brief Checks the status of the clients
+ *
+ * Sees is any clients are ready to read from their file descriptor or are
+ *  ready to write to their file descriptor.
+ *
+ * @param wireless A pointer to the wireless object
+ *
+ * @return 0 on success, negative error code on error
+ */
+//TODO: test that it drops commands properly if it gets sent too much data
+//      do we want it to drop the data or drop the connection?
+int ConnectionPool::check_clients(ColonetWireless * wireless) {
+  char temporary_buffer[READ_BUFFER_SIZE];
+  char temporary_command_buffer[READ_BUFFER_SIZE+1];
+  int i;
+  int client_file_descriptor;
+  int num_bytes_read;
+  int length;
+  int sent;
+  int command_length;
+
+  for (i = 0; i < next_available_slot; i++) {
+    client_file_descriptor = client_file_descriptor_array[i];
+
+    if (FD_ISSET(client_file_descriptor, &read_set)) {
+      num_bytes_read = read(client_file_descriptor, temporary_buffer, READ_BUFFER_SIZE);
+
+      if (num_bytes_read == 0 || (num_bytes_read == -1 && errno == ECONNRESET)) {
+        remove_client(i);
+        i--;
+        continue;
+      }
+
+      while (num_bytes_read > 0) {
+        length = num_bytes_read;
+
+        if (length + read_buffer_size[i] > READ_BUFFER_SIZE) {
+          length = READ_BUFFER_SIZE - read_buffer_size[i];
+        }
+
+        memcpy(read_buffer[i]+read_buffer_size[i], temporary_buffer, length);
+        read_buffer_size[i] += length;
+        num_bytes_read -= length;
+
+        if (num_bytes_read > 0) {
+          memmove(temporary_buffer, temporary_buffer+length, READ_BUFFER_SIZE - length);
+        }
+
+        printf("Read buffer is %s\n", read_buffer[i]);
+
+        char* newline_position;
+
+        while ((newline_position = strstr(read_buffer[i], "\n"))) {
+
+          //if no newline if found in the entire readbuffer (when its full), 
+          //toss out the command
+          // because either the command being given is too long or someone is trying
+          // to do something bad to the server
+          //TODO: this is from before all this code was put in the loop.  reconsider
+          //      how to check this error condition and do it elsewhere
+          if (!newline_position && (read_buffer_size[i] == READ_BUFFER_SIZE)) {
+            read_buffer_size[i] = 0;
+            break;
+          }
+
+          //if no newline is found then there is not a command in the buffer
+          if (!newline_position) {
+            break;
+          }
+
+          command_length = (newline_position - read_buffer[i])+1;
+
+          //the newline was found in garbage in the currently not used portion
+          // of the read buffer
+          if (command_length > read_buffer_size[i]) {
+            break;
+          }
+
+          memcpy(temporary_command_buffer, read_buffer[i], command_length);
+          //do command_length-1 to get rid of the newline terminating the command
+          temporary_command_buffer[command_length-1] = '\0';
+          //did this because telnet was putting a \r\n on the end instead of just \n
+          if (isspace(temporary_command_buffer[command_length-2])) {
+            temporary_command_buffer[command_length-2] = '\0';
+          }
+
+          memmove(read_buffer[i], read_buffer[i]+command_length, read_buffer_size[i] - command_length);
+          read_buffer_size[i] -= command_length;
+
+          if (command_length > MAX_COMMAND_LEN) {
+            printf("The command was too long.  Tossing command out.\n");
+            break;
+          }
+
+          if (parse_command(temporary_command_buffer, i, wireless) < 0) {
+            printf("There was an error parsing command\n");
+            break;
+          }
+        }
+      }
+    }
+
+    if (FD_ISSET(client_file_descriptor, &write_set)) {
+      if (write_buffer_size[i] == 0) {
+        continue;
+      }
+
+      sent = write(client_file_descriptor, write_buffer[i], write_buffer_size[i]);
+      memmove(write_buffer[i], write_buffer[i]+sent, WRITE_BUFFER_SIZE - sent);
+      write_buffer_size[i] -= sent;
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Puts text into a write buffer that will be written to a client's file
+ *  descriptor sometime when the client is ready to write.
+ *
+ * @param pool_index Index in the pool of the client to write to
+ * @param message The message to be written
+ * @param length The length of the message
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::write_to_client(int pool_index, char * message, int length) {
+  if (pool_index < 0 || pool_index >= next_available_slot) {
+    return ERROR_INVALID_CLIENT_ID;
+  }
+
+  if (!message) {
+    return ERROR_INVALID_MESSAGE;
+  }
+
+  if (length < 0) {
+    return ERROR_INVALID_MESSAGE_LENGTH;
+  }
+
+  if (length > (WRITE_BUFFER_SIZE-write_buffer_size[pool_index])) {
+    //TODO: make this a logging statement instead of a print statement
+    printf("There is not enough room in the write buffer to send the data to the client.\n");
+    return ERROR_NOT_ENOUGH_ROOM;
+  }
+
+  memcpy(write_buffer[pool_index], message, length);
+  write_buffer_size[pool_index] += length;
+
+  return 0;
+}
+
+/**
+ * @brief Sets the socket to listen on
+ *
+ * @param listen_socket The socket to listen on
+ *
+ * @return void
+ */
+void ConnectionPool::set_listen_socket_in_ready_set(int listen_socket) {
+  if (listen_socket < 0)
+    return;
+
+  FD_SET(listen_socket, &ready_set);
+}
+
+/**
+ * @brief Find out what file descriptors are ready to write to and read from
+ *
+ * @param listen_socket The socket to listen on
+ * @param select_timeout The timeout for the select statement
+ *
+ * @return 0
+ */
+int ConnectionPool::perform_select(int listen_socket) {
+  read_set = ready_set;
+  write_set = ready_set;
+
+  struct timeval select_timeout;
+  memset(&select_timeout, 0, sizeof(select_timeout));
+
+  //TODO(Jason): think about why I put this there
+  if (max_file_descriptor < listen_socket)
+    max_file_descriptor = listen_socket;
+
+  number_clients_ready = select(max_file_descriptor+1, &(read_set), &(write_set), NULL, &select_timeout);
+
+  if (number_clients_ready < 0) {
+    perror(__FUNCTION__);
+  }
+
+  return 0;
+}
+
+int ConnectionPool::is_socket_ready_to_read(int socket) {
+  return FD_ISSET(socket, &read_set);
+}
+
+int ConnectionPool::is_socket_ready_to_write(int socket) {
+  return FD_ISSET(socket, &write_set);
+}
+
+int ConnectionPool::get_max_file_descriptor() {
+  return max_file_descriptor;
+}
+
+void ConnectionPool::set_max_file_descriptor(int new_max_file_descriptor) {
+  max_file_descriptor = new_max_file_descriptor;
+}
+
+int ConnectionPool::get_next_available_slot() {
+  return next_available_slot;
+}
+
+int ConnectionPool::get_number_clients_ready() {
+  return number_clients_ready;
+}
+
+void ConnectionPool::set_number_clients_ready(int new_number_clients_ready) {
+  number_clients_ready = new_number_clients_ready;
+}
+
+fd_set ConnectionPool::get_ready_set() {
+  return ready_set;
+}
+
+fd_set ConnectionPool::get_read_set() {
+  return read_set;
+}
+
+void ConnectionPool::set_read_set(fd_set new_set) {
+  read_set = new_set;
+}
+
+fd_set ConnectionPool::get_write_set() {
+  return write_set;
+}
+
+void ConnectionPool::set_write_set(fd_set new_set) {
+  write_set = new_set;
+}
+
+//TODO: write a function to write data into the write buffers (jason: what was this referring to?)
+int ConnectionPool::parse_command(char* command, int pool_index, ColonetWireless * wireless) {
+  char tokens[MAX_TOKENS][MAX_TOKEN_SIZE];
+  unsigned char int_tokens[MAX_TOKENS];
+  int number_tokens = 0;
+  char* end_pointer = NULL;
+  int command_id;
+  int i;
+  unsigned char arguments[PACKET_DATA_LEN];
+
+  memset(arguments, 1, PACKET_DATA_LEN);
+
+  if (!command) {
+    return -1;
+  }
+
+  if (pool_index < 0) {
+    return -1;
+  }
+
+  if (pool_index >= next_available_slot) {
+    return -1;
+  }
+
+  if ((number_tokens = tokenize_command(command, tokens)) < 0) {
+    return -1;
+  }
+
+  //the 10 in the function call indicates number is base 10
+  command_id = strtol(tokens[0], &end_pointer, 10);
+
+  if (!end_pointer || *end_pointer != '\0') {
+    printf("There was an error converting first token into a number.\n");
+    return -1;
+  }
+
+  if (command_id == SEND_TO_ROBOT || REQUEST_FROM_ROBOT) {
+    int number_int_tokens = number_tokens;
+
+    /* Convert tokens to ints */
+    for (i = ROBOT_COMMAND_OFFSET; i < number_int_tokens; i++) {
+      int_tokens[i-ROBOT_COMMAND_OFFSET] = atoi(tokens[i]);
+    }
+    if (command_id == REQUEST_FROM_ROBOT) {
+      if (i < MAX_TOKENS) {
+        for (;i >= 4; i--) {
+          int_tokens[i] = int_tokens[i-1];
+        }
+        int_tokens[3] = pool_index;
+        number_int_tokens++;
+      } else {
+        //TODO: send an error back to client here also
+        fprintf(stderr, "Client attempted to request data from the robot but there was not enough room to put in the client's id.\n");
+        return -1;
+      }
+    }
+
+    /* Fill arguments buffer with arguments */
+    for (i = ROBOT_COMMAND_LEN; i < number_int_tokens-ROBOT_COMMAND_OFFSET; i++) {
+      arguments[i-ROBOT_COMMAND_LEN] = int_tokens[i];
+    }
+
+    /* Check the tokens */
+    if (check_tokens(int_tokens, number_int_tokens) < 0) {
+      fprintf(stderr, "%s: Error - Invalid command/request.\n", __FUNCTION__);
+      return 0;
+    }
+  
+    /* Send packet to robot */
+    fprintf(stderr, "Calling wireless->send(%d, %d, %d, arguments)\n", 
+            int_tokens[0], int_tokens[1], int_tokens[2]);
+    wireless->send(int_tokens[0], int_tokens[1], int_tokens[2], arguments);
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Breaks a command up into tokens
+ *
+ * @param command The command to tokenize
+ * @param tokens A two dimensional character array to store the tokens in
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ConnectionPool::tokenize_command(char* command, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE]) {
+  char* next_token = command;
+  char* end_token = NULL;
+  int number_tokens = 0;
+
+  if (!command) {
+    return -1;
+  }
+
+  while ((end_token = strstr(next_token, " "))) {
+    *end_token = '\0';
+
+    if (strlen(next_token) > MAX_TOKEN_SIZE-1) {
+      return -1;
+    }
+
+    strcpy(tokens[number_tokens], next_token);
+
+    number_tokens++;
+    next_token = end_token + 1;
+
+    while (isspace(*next_token) && *next_token != '\0') {
+      next_token++;
+    }
+  }
+
+  if (end_token == NULL && *next_token != '\0') {
+    if (strlen(next_token) > MAX_TOKEN_SIZE-1) {
+      return -1;
+    }
+
+    strcpy(tokens[number_tokens], next_token);
+
+    number_tokens++;
+  }
+
+  return number_tokens;
+}
+
+/** 
+ * @brief checks a list of tokens to see if it's valid
+ *
+ * @param tokens The tokens to check
+ * @param number_tokens The number of tokens contained in the tokens parameter
+ *
+ * @return 0 if tokens is valid
+ */
+int ConnectionPool::check_tokens(unsigned char* tokens, int number_tokens) {
+  if (number_tokens > 3 + PACKET_DATA_LEN) {
+    /* Too many tokens */
+    return -1;
+  }
+
+  if (number_tokens < 3) {
+    /* Not enough tokens */
+    return -1;
+  }
+  
+  if (tokens[1] != COLONET_REQUEST && tokens[1] != COLONET_COMMAND) {
+    /* Invalid message type */
+    return -1;
+  }
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/ColonetServer/ColonetServer.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/ColonetServer.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/ColonetServer.cpp	(revision 62)
@@ -0,0 +1,340 @@
+/** 
+ * @file ColonetServer.cpp
+ *
+ * @brief colonet_server - primary server application for Colonet
+ *
+ * @author Jason Knichel
+ * @author Eugene Marinelli
+ * @date 10/31/06
+ */
+
+#include <colonet_wireless.h>
+#include <sys/select.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <errno.h>
+#include <arpa/inet.h>
+
+#include <fcntl.h>
+
+#include <colonet_wireless.h>
+
+#include "includes/ColonetServer.h"
+#include "includes/ConnectionPool.h"
+#include "includes/client.h"
+#include "includes/options.h"
+#include "includes/Log.h"
+
+#define LISTEN_BACKLOG 5
+#define LOG_BUFFER_LENGTH 128
+
+ConnectionPool * connection_pool;
+
+/**
+ * @brief Default constructor for ColonetServer
+ */
+ColonetServer::ColonetServer(): logger("logFile.txt") {
+  listen_socket = 0;
+}
+
+/**
+ * @brief Destructor for ColonetServer
+ */
+ColonetServer::~ColonetServer() {
+}
+
+/**
+ * @brief Initializes the various elements needed for the server to run
+ *
+ * @param argc The number of command line arguments passed to the program
+ * @param argv The command line arguments passed to the program
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ColonetServer::initialize_server(int argc, char * argv[]) {
+  printf("Initializing Server...\n");
+
+  parseCmdLine(argc, argv);
+
+  if (initialize_connection(optionsG.listen_port) < 0) {
+    return -1;
+  }
+
+  if (initialize_wireless() < 0) {
+    fprintf(stderr, "%s: initWireless failed\n", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Starts the server listening on the socket that was opened for listening
+ *
+ * @return 0 on success, negative error code on failure
+ */
+int ColonetServer::start_listening() {
+  if (listen(listen_socket, LISTEN_BACKLOG) < 0) {
+    log_error("\t\nThere was an error telling the socket to "
+              "listen for connections from clients.  Terminating Server...\n");
+    return -1;
+  }
+  return 0;
+}
+
+/**
+ * @brief Logs an error message to the log file
+ */
+int ColonetServer::log_error(char * error_message) {
+  return logger.logMessage(LOG_TYPE_ERROR, error_message);
+}
+
+/**
+ * @brief Logs a message to the log file
+ */
+int ColonetServer::log_message(char * message) {
+  return logger.logMessage(LOG_TYPE_MESSAGE, message);
+}
+
+/**
+ * @brief Starts the server running (starts an infinite loop)
+ */
+int ColonetServer::run_server() {
+  connection_pool.set_listen_socket_in_ready_set(listen_socket);
+
+  //TODO: why is all of this in that if statement and not just conn_pool.maxfd = listen_socket ?
+  if (listen_socket > connection_pool.get_max_file_descriptor()) {
+    connection_pool.set_max_file_descriptor(listen_socket);
+
+    int accept_socket = 0;
+    struct sockaddr_in client_addr;
+    socklen_t client_addr_size = sizeof(client_addr);
+
+    log_message("Server initialized.  About to start listening for connections");
+
+    while(1) {
+      connection_pool.perform_select(listen_socket);
+
+      //either no descriptors are ready or there was an error
+      if (connection_pool.get_number_clients_ready() <= 0) {
+        continue;
+      }
+
+      if (connection_pool.is_socket_ready_to_read(listen_socket)) {
+        printf("Something is trying to connect...\n");
+        if ((accept_socket = accept(listen_socket, (struct sockaddr*) &client_addr, &client_addr_size)) < 0) {
+          if (errno == EMFILE) {
+            printf("\tWhen attempting to accept a connection, "
+                   "reached the per process limit of file descriptors."
+                   "  Dropping the new connection.\n");
+            continue;
+          } else {
+            printf("\tThere was an error when attempting to accept a connection");
+          }
+          continue;
+        }
+
+        char log_buffer[LOG_BUFFER_LENGTH];
+        snprintf(log_buffer, LOG_BUFFER_LENGTH, "Client at address %s attempting to connect.", 
+                 inet_ntoa(client_addr.sin_addr));
+        logger.logMessage(LOG_TYPE_CONNECT, log_buffer);
+
+        if (connection_pool.add_client(accept_socket) < 0) {
+          printf("\tThere was an error when trying to add a client to the connection pool.");
+          continue;
+        }
+
+        snprintf(log_buffer, LOG_BUFFER_LENGTH, "Client at address %s successfully added to connection pool.", 
+                 inet_ntoa(client_addr.sin_addr));
+        logger.logMessage(LOG_TYPE_CONNECT, log_buffer);
+      }
+
+      if (connection_pool.check_clients(wireless) < 0) {
+        printf("\tThere was an error trying to update the clients.");
+        continue;
+      }
+    }
+  }
+
+  return 0;
+}
+
+/**
+ * @todo This method is here because the wireless message handler has a dependency on the connection_pool
+ *  This should be removed when that dependency is broken
+ *
+ * @return A pointer to the connection pool
+ */
+ConnectionPool * ColonetServer::get_connection_pool_pointer() {
+  return &connection_pool;
+}
+
+/**
+ * @brief Initializes the wireless
+ *
+ * @return 0 on success, negative error code on error
+ */
+int ColonetServer::initialize_wireless() {
+  char* log_filename = NULL;
+
+  if (optionsG.logging_enabled) {
+    log_filename = optionsG.log_filename;
+  }
+
+  wireless = new ColonetWireless(optionsG.wireless_port, 
+                                 wirelessMessageHandler, log_filename, 
+                                 /*!optionsG.listener_mode*/false, true);
+  //Note: last arg set to true ignores token ring;  in general, this should
+  //probably be false (changed for demo purposes)
+
+  if (!wireless->run_listener_thread()) {
+    return -1;
+  }
+
+  return 0;
+}
+
+/**
+ * @brief Initialize a connection to listen on
+ *
+ * @port The port to try to open to listen on
+ *
+ * @return 0 on success, negative error code on error
+ */
+int ColonetServer::initialize_connection(int port) {
+  printf("Initializing connection that will be used to listen for " 
+         "clients...\n");
+  int options = 1;
+  struct sockaddr_in my_address;
+
+  //get a socket fd
+  if ((listen_socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+    printf("\tThere was an error creating a socket\n");
+    return -1;
+  }
+
+  //set up the address struct
+  memset(&my_address,'\0',sizeof(my_address));
+  my_address.sin_family = AF_INET;
+  my_address.sin_addr.s_addr = htonl(INADDR_ANY);
+  my_address.sin_port = htons(port);
+  
+  setsockopt(listen_socket, SOL_SOCKET, SO_REUSEADDR, &options, sizeof(options));
+
+  //get the current socket options
+  if ((options = fcntl(listen_socket, F_GETFL)) < 0) {
+    printf("\tThere was an error getting the socket options.\n");
+    return -1;
+  }
+
+  //set the socket to non blocking
+  options = (options | O_NONBLOCK);
+  if (fcntl(listen_socket, F_SETFL, options) < 0) {
+    printf("\tThere was an error setting the socket to be non blocking.\n");
+    return -1;
+  }
+  
+  //bind the socket to listen on the specified port
+  if (bind(listen_socket, (struct sockaddr *) &my_address, sizeof(my_address)) < 0) {
+    printf("\tThere was an error binding the socket\n");
+    return -1;
+  }
+  
+  return 0;
+}
+
+/**
+ * @brief The main function of the server
+ *
+ * @param argc The number of command line arguments passed to the program
+ * @param argv The command line arguments passed to the program
+ *
+ * @return 0 on success, negative error code on error
+ */
+int main(int argc, char** argv) {
+  ColonetServer colonet_server;
+
+  connection_pool = colonet_server.get_connection_pool_pointer();
+
+  if (colonet_server.initialize_server(argc, argv) < 0) {
+    colonet_server.log_error("\t\nThere was an error initializing the server. "
+                             "Terminating server...\n");
+    return -1;
+  }
+
+  if (colonet_server.start_listening() < 0) {
+    return -1;
+  }
+  
+  colonet_server.run_server();
+
+  return 0;
+}
+
+//this is old code that was commented out that I didn't want to delete yet
+/*
+int parseCommandLine(int argc, char * argv[], commandParams_t * params)
+{
+  printf("Parsing Command Line...\n");
+  if (!params)
+    return -1;
+
+  //if no command line parameters were specified, set to defaults
+  if (argc == 1) {
+    printf("No port was specified for listening for client connections."
+           "  Defaulting to %d\n", DEFAULTPORT);
+    params->listenPort = DEFAULTPORT;
+  }
+
+  if (!argv)
+    return -1;
+
+  int i;
+  for (i = 1; i < argc; i++) {
+    char * temp = argv[i];
+    if (temp[0] != '-')
+      {
+        printUsage(argv[0]);
+        return -1;
+      }
+
+    switch(temp[1])
+      {
+      case 'h': printUsage(argv[0]);
+        break;
+      case 'p': 
+        {
+          if (i >= argc-1)
+            {
+              printUsage(argv[0]);
+              return -1;
+            }
+          i++;
+          char * portString = argv[i];
+          char * endptr = NULL;
+          int port = strtol(portString, &endptr, 10);
+          if (*endptr != '\0')
+            {
+              printf("Invalid port specified...%s, %d\n", endptr, port);
+              return -1;
+            }
+          if (port < SMALLEST_POSS_LISTEN_PORT)
+            {
+              printf("You cannot listen on a port less than %d.\n",
+                     SMALLEST_POSS_LISTEN_PORT);
+              return -1;
+            }
+          params->listenPort = port;
+          printf("Setting port to listen on to %d.\n", params->listenPort);
+        }
+        break;
+      default: printUsage(argv[0]);
+        return -1;
+        break;
+      }
+  }
+
+  return 0;
+}
+*/
+
Index: branches/charge_board/code/projects/colonet/ColonetServer/includes/ConnectionPool.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/includes/ConnectionPool.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/includes/ConnectionPool.h	(revision 62)
@@ -0,0 +1,82 @@
+/**
+ * @author Jason Knichel
+ * @date 7/22/07
+ */
+
+#ifndef CONNECTION_POOL_H
+#define CONNECTION_POOL_H
+
+#include <sys/select.h>
+
+#include <colonet_wireless.h>
+
+#define MAX_TOKENS 15
+#define MAX_TOKEN_SIZE 30
+
+#define ROBOT_COMMAND_OFFSET 1
+#define ROBOT_COMMAND_LEN    3
+
+#define ERROR_INVALID_CLIENT_DESCRIPTOR -1
+#define ERROR_TOO_MANY_CLIENTS          -2
+#define ERROR_ALLOCATING_MEMORY         -3
+#define ERROR_NOT_ENOUGH_ROOM           -4
+#define ERROR_INVALID_COMMAND           -5
+#define ERROR_INVALID_CLIENT_ID         -6
+#define ERROR_INVALID_MESSAGE           -7
+#define ERROR_INVALID_MESSAGE_LENGTH    -8
+
+#define MAX_CONNECTIONS 250
+#define READ_BUFFER_SIZE 1024
+#define WRITE_BUFFER_SIZE 1024
+
+class ConnectionPool {
+
+public:
+  ConnectionPool();
+  ~ConnectionPool();
+
+  int add_client(int client_file_descriptor);
+  int remove_client(int pool_index);
+  int check_clients(ColonetWireless * wireless);
+  int write_to_client(int pool_index, char * message, int length);
+  void set_listen_socket_in_ready_set(int listen_socket);
+  int perform_select(int listen_socket);
+  int is_socket_ready_to_read(int socket);
+  int is_socket_ready_to_write(int socket);
+
+
+  int get_max_file_descriptor();
+  void set_max_file_descriptor(int new_max_file_descriptor);
+
+  int get_next_available_slot();
+
+  int get_number_clients_ready();
+  void set_number_clients_ready(int new_number_clients_ready);
+
+  fd_set get_ready_set();
+  
+  fd_set get_read_set();
+  void set_read_set(fd_set new_set);
+
+  fd_set get_write_set();
+  void set_write_set(fd_set new_set);
+
+private:
+  int max_file_descriptor;
+  int next_available_slot;
+  int number_clients_ready;
+  fd_set ready_set;
+  fd_set read_set;
+  fd_set write_set;
+  int client_file_descriptor_array[MAX_CONNECTIONS];
+  char * read_buffer[MAX_CONNECTIONS];
+  int read_buffer_size[MAX_CONNECTIONS];
+  char * write_buffer[MAX_CONNECTIONS];
+  int write_buffer_size[MAX_CONNECTIONS];
+
+  int parse_command(char* command, int pool_index, ColonetWireless * wireless);
+  int tokenize_command(char* command, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE]);
+  int check_tokens(unsigned char* tokens, int number_tokens);
+};
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetServer/includes/Log.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/includes/Log.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/includes/Log.h	(revision 62)
@@ -0,0 +1,35 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ */
+
+#ifndef LOGGING_H
+#define LOGGING_H
+
+#include <time.h>
+#include <stdio.h>
+
+#define LOG_TYPE_START_LOG  0
+#define LOG_TYPE_CONNECT    1
+#define LOG_TYPE_DISCONNECT 2
+#define LOG_TYPE_ERROR      3
+#define LOG_TYPE_MESSAGE    4
+
+#define LOG_MAX_TYPE_LENGTH 25
+#define LOG_MAX_TIME_LENGTH 64
+
+class Log {
+public:
+  Log(char * fileName);
+  ~Log();
+
+  int logMessage(int type, char * message);
+
+private:
+  struct tm getCurrentTime();
+
+  FILE * logFile;
+};
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetServer/includes/ColonetServer.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/includes/ColonetServer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/includes/ColonetServer.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @author Jason Knichel
+ * @date 9/10/07
+ */
+
+#ifndef COLONETSERVER_H
+#define COLONETSERVER_H
+
+#include <colonet_wireless.h>
+#include "ConnectionPool.h"
+#include "Log.h"
+
+class ColonetServer {
+public:
+  ColonetServer();
+  ~ColonetServer();
+  int initialize_server(int argc, char * argv[]);
+
+  int start_listening();
+
+  int log_error(char * error_message);
+  int log_message(char * message);
+
+  int run_server();
+
+  ConnectionPool * get_connection_pool_pointer();
+
+private:
+  ConnectionPool connection_pool;
+  Log logger;
+  ColonetWireless* wireless;
+  int listen_socket;
+
+  int initialize_wireless();
+  int initialize_connection(int port);
+};
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetServer/includes/options.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/includes/options.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/includes/options.h	(revision 62)
@@ -0,0 +1,26 @@
+/**
+ * @file options.h
+ * @brief Options for ColonetServer
+ * @author Eugene Marinelli
+ * @date 2/13/07
+ */
+
+#ifndef OPTIONS_H
+#define OPTIONS_H
+
+#define DEFAULTPORT 10123
+#define SMALLEST_POSS_LISTEN_PORT 2000
+
+typedef struct {
+  int listen_port;
+  char wireless_port[80];
+  char log_filename[80];
+  bool logging_enabled;
+  bool listener_mode;
+} ColonetServerOptionsT;
+
+extern ColonetServerOptionsT optionsG;
+
+void parseCmdLine(int argc, char** argv);
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetServer/includes/client.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/includes/client.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/includes/client.h	(revision 62)
@@ -0,0 +1,17 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ */
+
+#ifndef CLIENT_H
+#define CLIENT_H
+
+#include <colonet_wireless.h>
+
+int wirelessMessageHandler(ColonetPacket* pkt);
+int initWireless(void);
+void send_wireless_message(unsigned char msg_dest, unsigned char msg_type, 
+                           unsigned char msg_code, unsigned char* data);
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetServer/Log.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/Log.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/Log.cpp	(revision 62)
@@ -0,0 +1,120 @@
+/**
+ * @file Logging.cpp
+ *
+ * @brief This file contains the code to do logging for Colonet
+ * 
+ * @author Jason Knichel
+ *
+ */
+
+#include <time.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "includes/Log.h"
+
+/**
+ * @brief Constructor for the Log class
+ *
+ * @param filename The name of the file to output log statements to
+ */
+Log::Log(char * filename) {
+  printf("Creating log object\n");
+
+  if (!filename) {
+    fprintf(stderr, "Provided a null filename when trying to create a log.\n");
+    return;
+  }
+
+  logFile = fopen(filename, "a"); //open file for appending
+  if (!logFile) {
+    fprintf(stderr, "Error opening %s as log file.\n", filename);
+    return;
+  }
+
+  printf("About to log start message.\n");
+  logMessage(LOG_TYPE_START_LOG, "Starting server");
+}
+
+/**
+ * @brief Destructor for the Log class
+ */
+Log::~Log() {
+  if (!logFile)
+    fclose(logFile);
+}
+
+/**
+ * @brief A function to get the current time
+ *
+ * @return A struct tm that represents the current time
+ */
+struct tm Log::getCurrentTime() {
+  struct tm currTime;
+  memset(&currTime, 0, sizeof(struct tm));
+  
+  time_t t = time(NULL);
+  localtime_r(&t, &currTime);
+  
+  return currTime;  
+}
+
+/**
+ * @brief This method logs a message with the specified type
+ *
+ * @param type The type of the message to log
+ * @param message The message to log
+ *
+ * @return 0 on success, negative error code on error
+ */
+int Log::logMessage(int type, char * message) {
+  if (!logFile) {
+    fprintf(stderr, "Tried to log a message but the file pointer was null.\n");
+    return -1;
+  }
+
+  if (!message) {
+    fprintf(stderr, "Tried to log a null message.\n");
+    return -1;
+  }
+  
+  static char * start_log = "Starting Log";
+  static char * connect = "Client Connecting";
+  static char * disconnect = "Client Disconnecting";
+  static char * error = "Error";
+  static char * logGenMessage = "Generic Message";
+
+  char * messageType;
+
+  switch(type) {
+  case LOG_TYPE_START_LOG:
+    messageType = start_log;
+    break;
+  case LOG_TYPE_CONNECT:
+    messageType = connect;
+    break;
+  case LOG_TYPE_DISCONNECT:
+    messageType = disconnect;
+    break;
+  case LOG_TYPE_ERROR:
+    messageType = error;
+    break;
+  case LOG_TYPE_MESSAGE:
+    messageType = logGenMessage;
+    break;
+  default:
+    fprintf(stderr, "Tried to log a message with an invalid type.\n");
+    return -1;
+  }
+
+  struct tm currTime = getCurrentTime();
+  
+  char buffer[LOG_MAX_TIME_LENGTH];
+  asctime_r(&currTime, buffer);
+  int len = strlen(buffer);
+  buffer[len-1] = '\0'; //remove the newline that is put at the end by asctime_r
+  fprintf(logFile, "%s %*s   %s\n", buffer, LOG_MAX_TYPE_LENGTH, messageType, message);
+  fflush(logFile);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/ColonetServer/client.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/client.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/client.cpp	(revision 62)
@@ -0,0 +1,57 @@
+/** @file client.c
+ *
+ *  @author Jason Knichel
+ *  @author Eugene Marinelli
+ *
+ * @TODO remove dependency on connection_pool
+ * @bug Weird segfault when processing tokens
+ */
+
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <errno.h>
+
+#include <colonet_wireless.h>
+
+#include "includes/client.h"
+#include "includes/options.h"
+#include "includes/ConnectionPool.h"
+
+/* Globals */
+extern ConnectionPool * connection_pool;
+
+
+/* Public functions */
+int wirelessMessageHandler(ColonetPacket* pkt)
+{
+  printf("Received wireless message!!!\n");
+  if (!pkt) {
+    printf("The packet pointer was null.\n");
+    return -1;
+  }
+
+  if ((int)pkt->msg_type == COLONET_RESPONSE) {
+    printf("response\n");
+
+    int dest = (int)(pkt->msg_dest);
+    char buffer[WRITE_BUFFER_SIZE];
+          
+    int value = (int)(pkt->data[0]);
+    snprintf(buffer, WRITE_BUFFER_SIZE, "%d\n", value);
+          
+    int len = strlen(buffer);
+    if (connection_pool->write_to_client(dest, buffer, len) == ERROR_INVALID_CLIENT_ID) {
+      printf("The robot wanted to pass the data to a client not in the pool.\n");
+      return -1;
+    }
+
+    printf("Put data in write buffer for client.\n");
+  } else {
+    printf("not a response\n");
+  }
+
+  pkt = 0;
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/ColonetServer/options.c
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetServer/options.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetServer/options.c	(revision 62)
@@ -0,0 +1,92 @@
+/**
+ * @file options.c
+ *
+ * @brief Options for ColonetServer
+ *
+ * @author Eugene Marinelli
+ *
+ * @date 2/13/07
+ *
+ * @bug Usage not written
+ */
+
+#include <stdio.h>
+#include <getopt.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include <colonet_defs.h>
+
+#include "includes/options.h"
+
+ColonetServerOptionsT optionsG;
+
+/**
+ * @brief Prints the usage of the program
+ */
+static void printUsage() {
+  printf("USAGE:\n");
+}
+
+/**
+ * @brief Parses the command line arguments
+ *
+ * @param argc The number of arguments passed to the program
+ * @param argv The arguments passed to the program
+ *
+ * @return Void
+ */
+void parseCmdLine(int argc, char** argv) {
+  int c;
+
+  memset(&optionsG, 0, sizeof(ColonetServerOptionsT));
+  
+  if (argc < 2) {
+    printf("No port was specified for listening for client connections."
+           "  Defaulting to %d\n", DEFAULTPORT);
+  }
+
+  /* Defaults */
+  optionsG.listen_port = DEFAULTPORT;
+  strcpy(optionsG.wireless_port, USB_PORT);
+  optionsG.logging_enabled = false;
+  optionsG.listener_mode = false;
+
+  /* Parse args */
+  while (1) {
+    c = getopt(argc, argv, "p:l:w:su");
+
+    if (c == -1) {
+      break;
+    }
+    
+    switch (c) {
+    case 'p':
+      /* Listen port */
+      optionsG.listen_port = atoi(optarg);
+      
+      if (optionsG.listen_port < SMALLEST_POSS_LISTEN_PORT) {
+        printf("You cannot listen on a port less than %d.\n", 
+               SMALLEST_POSS_LISTEN_PORT);
+        printf("Setting listener port to %d\n", DEFAULTPORT);
+        optionsG.listen_port = DEFAULTPORT;
+      }
+      break;
+    case 'w':
+      /* Set wireless port */
+      strcpy(optionsG.wireless_port, optarg);
+      break;
+    case 'l':
+      /* Set log filename (and enable logging) */
+      strcpy(optionsG.log_filename, optarg);
+      optionsG.logging_enabled = true;
+      break;
+    case 's':
+      /* Enable listener mode */
+      optionsG.listener_mode = true;
+      break;
+    case 'u':
+      printUsage();
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.mode1
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.mode1	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.mode1	(revision 62)
@@ -0,0 +1,1238 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActivePerspectiveName</key>
+	<string>Project</string>
+	<key>AllowedModules</key>
+	<array>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXSmartGroupTreeModule</string>
+			<key>Name</key>
+			<string>Groups and Files Outline View</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXNavigatorGroup</string>
+			<key>Name</key>
+			<string>Editor</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCTaskListModule</string>
+			<key>Name</key>
+			<string>Task List</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCDetailModule</string>
+			<key>Name</key>
+			<string>File and Smart Group Detail Viewer</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXBuildResultsModule</string>
+			<key>Name</key>
+			<string>Detailed Build Results Viewer</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXProjectFindModule</string>
+			<key>Name</key>
+			<string>Project Batch Find Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXRunSessionModule</string>
+			<key>Name</key>
+			<string>Run Log</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXBookmarksModule</string>
+			<key>Name</key>
+			<string>Bookmarks Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXClassBrowserModule</string>
+			<key>Name</key>
+			<string>Class Browser</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXCVSModule</string>
+			<key>Name</key>
+			<string>Source Code Control Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXDebugBreakpointsModule</string>
+			<key>Name</key>
+			<string>Debug Breakpoints Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCDockableInspector</string>
+			<key>Name</key>
+			<string>Inspector</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXOpenQuicklyModule</string>
+			<key>Name</key>
+			<string>Open Quickly Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXDebugSessionModule</string>
+			<key>Name</key>
+			<string>Debugger</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXDebugCLIModule</string>
+			<key>Name</key>
+			<string>Debug Console</string>
+		</dict>
+	</array>
+	<key>Description</key>
+	<string>DefaultDescriptionKey</string>
+	<key>DockingSystemVisible</key>
+	<false/>
+	<key>Extension</key>
+	<string>mode1</string>
+	<key>FavBarConfig</key>
+	<dict>
+		<key>PBXProjectModuleGUID</key>
+		<string>A341617D0C989B510007BEF2</string>
+		<key>XCBarModuleItemNames</key>
+		<dict/>
+		<key>XCBarModuleItems</key>
+		<array/>
+	</dict>
+	<key>FirstTimeWindowDisplayed</key>
+	<false/>
+	<key>Identifier</key>
+	<string>com.apple.perspectives.project.mode1</string>
+	<key>MajorVersion</key>
+	<integer>31</integer>
+	<key>MinorVersion</key>
+	<integer>1</integer>
+	<key>Name</key>
+	<string>Default</string>
+	<key>Notifications</key>
+	<array/>
+	<key>OpenEditors</key>
+	<array/>
+	<key>PerspectiveWidths</key>
+	<array>
+		<integer>-1</integer>
+		<integer>-1</integer>
+	</array>
+	<key>Perspectives</key>
+	<array>
+		<dict>
+			<key>ChosenToolbarItems</key>
+			<array>
+				<string>active-target-popup</string>
+				<string>action</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>buildOrClean</string>
+				<string>build-and-runOrDebug</string>
+				<string>com.apple.ide.PBXToolbarStopButton</string>
+				<string>get-info</string>
+				<string>toggle-editor</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>com.apple.pbx.toolbar.searchfield</string>
+			</array>
+			<key>ControllerClassBaseName</key>
+			<string></string>
+			<key>IconName</key>
+			<string>WindowOfProjectWithEditor</string>
+			<key>Identifier</key>
+			<string>perspective.project</string>
+			<key>IsVertical</key>
+			<false/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>PBXBottomSmartGroupGIDs</key>
+						<array>
+							<string>1C37FBAC04509CD000000102</string>
+							<string>1C37FAAC04509CD000000102</string>
+							<string>1C08E77C0454961000C914BD</string>
+							<string>1C37FABC05509CD000000102</string>
+							<string>1C37FABC05539CD112110102</string>
+							<string>E2644B35053B69B200211256</string>
+							<string>1C37FABC04509CD000100104</string>
+							<string>1CC0EA4004350EF90044410B</string>
+							<string>1CC0EA4004350EF90041110B</string>
+						</array>
+						<key>PBXProjectModuleGUID</key>
+						<string>1CE0B1FE06471DED0097A5F4</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Files</string>
+						<key>PBXProjectStructureProvided</key>
+						<string>yes</string>
+						<key>PBXSmartGroupTreeModuleColumnData</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+							<array>
+								<real>186</real>
+							</array>
+							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+							<array>
+								<string>MainColumn</string>
+							</array>
+						</dict>
+						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+							<array>
+								<string>00E6828FFEC88D1A11DB9C8B</string>
+								<string>1C37FBAC04509CD000000102</string>
+								<string>A341619F0C989DE00007BEF2</string>
+								<string>1C37FAAC04509CD000000102</string>
+								<string>1C37FABC05509CD000000102</string>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+							<array>
+								<array>
+									<integer>19</integer>
+								</array>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+							<string>{{0, 36}, {186, 338}}</string>
+						</dict>
+						<key>PBXTopSmartGroupGIDs</key>
+						<array/>
+						<key>XCIncludePerspectivesSwitch</key>
+						<true/>
+						<key>XCSharingToken</key>
+						<string>com.apple.Xcode.GFSharingToken</string>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>Frame</key>
+						<string>{{0, 0}, {203, 356}}</string>
+						<key>GroupTreeTableConfiguration</key>
+						<array>
+							<string>MainColumn</string>
+							<real>186</real>
+						</array>
+						<key>RubberWindowFrame</key>
+						<string>34 131 690 397 0 0 1280 832 </string>
+					</dict>
+					<key>Module</key>
+					<string>PBXSmartGroupTreeModule</string>
+					<key>Proportion</key>
+					<string>203pt</string>
+				</dict>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CE0B20306471E060097A5F4</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>MyNewFile14.java</string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CE0B20406471E060097A5F4</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>MyNewFile14.java</string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<true/>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {482, 0}}</string>
+								<key>RubberWindowFrame</key>
+								<string>34 131 690 397 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CE0B20506471E060097A5F4</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Detail</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 5}, {482, 351}}</string>
+								<key>RubberWindowFrame</key>
+								<string>34 131 690 397 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>XCDetailModule</string>
+							<key>Proportion</key>
+							<string>351pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>482pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCModuleDock</string>
+				<string>PBXSmartGroupTreeModule</string>
+				<string>XCModuleDock</string>
+				<string>PBXNavigatorGroup</string>
+				<string>XCDetailModule</string>
+			</array>
+			<key>TableOfContents</key>
+			<array>
+				<string>A341618E0C989C770007BEF2</string>
+				<string>1CE0B1FE06471DED0097A5F4</string>
+				<string>A341618F0C989C770007BEF2</string>
+				<string>1CE0B20306471E060097A5F4</string>
+				<string>1CE0B20506471E060097A5F4</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.default</string>
+		</dict>
+		<dict>
+			<key>ControllerClassBaseName</key>
+			<string></string>
+			<key>IconName</key>
+			<string>WindowOfProject</string>
+			<key>Identifier</key>
+			<string>perspective.morph</string>
+			<key>IsVertical</key>
+			<integer>0</integer>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>BecomeActive</key>
+					<integer>1</integer>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>PBXBottomSmartGroupGIDs</key>
+						<array>
+							<string>1C37FBAC04509CD000000102</string>
+							<string>1C37FAAC04509CD000000102</string>
+							<string>1C08E77C0454961000C914BD</string>
+							<string>1C37FABC05509CD000000102</string>
+							<string>1C37FABC05539CD112110102</string>
+							<string>E2644B35053B69B200211256</string>
+							<string>1C37FABC04509CD000100104</string>
+							<string>1CC0EA4004350EF90044410B</string>
+							<string>1CC0EA4004350EF90041110B</string>
+						</array>
+						<key>PBXProjectModuleGUID</key>
+						<string>11E0B1FE06471DED0097A5F4</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Files</string>
+						<key>PBXProjectStructureProvided</key>
+						<string>yes</string>
+						<key>PBXSmartGroupTreeModuleColumnData</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+							<array>
+								<real>186</real>
+							</array>
+							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+							<array>
+								<string>MainColumn</string>
+							</array>
+						</dict>
+						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+							<array>
+								<string>29B97314FDCFA39411CA2CEA</string>
+								<string>1C37FABC05509CD000000102</string>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+							<array>
+								<array>
+									<integer>0</integer>
+								</array>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+							<string>{{0, 0}, {186, 337}}</string>
+						</dict>
+						<key>PBXTopSmartGroupGIDs</key>
+						<array/>
+						<key>XCIncludePerspectivesSwitch</key>
+						<integer>1</integer>
+						<key>XCSharingToken</key>
+						<string>com.apple.Xcode.GFSharingToken</string>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>Frame</key>
+						<string>{{0, 0}, {203, 355}}</string>
+						<key>GroupTreeTableConfiguration</key>
+						<array>
+							<string>MainColumn</string>
+							<real>186</real>
+						</array>
+						<key>RubberWindowFrame</key>
+						<string>373 269 690 397 0 0 1440 878 </string>
+					</dict>
+					<key>Module</key>
+					<string>PBXSmartGroupTreeModule</string>
+					<key>Proportion</key>
+					<string>100%</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Morph</string>
+			<key>PreferredWidth</key>
+			<integer>300</integer>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCModuleDock</string>
+				<string>PBXSmartGroupTreeModule</string>
+			</array>
+			<key>TableOfContents</key>
+			<array>
+				<string>11E0B1FE06471DED0097A5F4</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.default.short</string>
+		</dict>
+	</array>
+	<key>PerspectivesBarVisible</key>
+	<false/>
+	<key>ShelfIsVisible</key>
+	<false/>
+	<key>SourceDescription</key>
+	<string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecificationMode1.xcperspec'</string>
+	<key>StatusbarIsVisible</key>
+	<true/>
+	<key>TimeStamp</key>
+	<real>0.0</real>
+	<key>ToolbarDisplayMode</key>
+	<integer>1</integer>
+	<key>ToolbarIsVisible</key>
+	<true/>
+	<key>ToolbarSizeMode</key>
+	<integer>1</integer>
+	<key>Type</key>
+	<string>Perspectives</string>
+	<key>UpdateMessage</key>
+	<string>The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature).  You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature.  Do you wish to update to the latest Workspace defaults for project '%@'?</string>
+	<key>WindowJustification</key>
+	<integer>5</integer>
+	<key>WindowOrderList</key>
+	<array>
+		<string>1C0AD2B3069F1EA900FABCE6</string>
+		<string>A34161950C989DA30007BEF2</string>
+		<string>/Users/gmtress/Documents/Colony/roboclub_repository/colony/trunk/code/projects/colonet/ColonetGUI/Colonet.xcode</string>
+	</array>
+	<key>WindowString</key>
+	<string>34 131 690 397 0 0 1280 832 </string>
+	<key>WindowTools</key>
+	<array>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.build</string>
+			<key>IsVertical</key>
+			<true/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528F0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string></string>
+								<key>StatusBarVisibility</key>
+								<true/>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {645, 253}}</string>
+								<key>RubberWindowFrame</key>
+								<string>82 262 645 535 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>253pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>XCMainBuildResultsModuleGUID</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Build</string>
+								<key>XCBuildResultsTrigger_Collapse</key>
+								<integer>1021</integer>
+								<key>XCBuildResultsTrigger_Open</key>
+								<integer>1011</integer>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 258}, {645, 236}}</string>
+								<key>RubberWindowFrame</key>
+								<string>82 262 645 535 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXBuildResultsModule</string>
+							<key>Proportion</key>
+							<string>236pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>494pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Build Results</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXBuildResultsModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>A34161950C989DA30007BEF2</string>
+				<string>A34161960C989DA30007BEF2</string>
+				<string>1CD0528F0623707200166675</string>
+				<string>XCMainBuildResultsModuleGUID</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.build</string>
+			<key>WindowString</key>
+			<string>82 262 645 535 0 0 1280 832 </string>
+			<key>WindowToolGUID</key>
+			<string>A34161950C989DA30007BEF2</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.debugger</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>Debugger</key>
+								<dict>
+									<key>HorizontalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {317, 164}}</string>
+											<string>{{317, 0}, {377, 164}}</string>
+										</array>
+									</dict>
+									<key>VerticalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {694, 164}}</string>
+											<string>{{0, 164}, {694, 216}}</string>
+										</array>
+									</dict>
+								</dict>
+								<key>LauncherConfigVersion</key>
+								<string>8</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C162984064C10D400B95A72</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Debug - GLUTExamples (Underwater)</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>DebugConsoleDrawerSize</key>
+								<string>{100, 120}</string>
+								<key>DebugConsoleVisible</key>
+								<string>None</string>
+								<key>DebugConsoleWindowFrame</key>
+								<string>{{200, 200}, {500, 300}}</string>
+								<key>DebugSTDIOWindowFrame</key>
+								<string>{{200, 200}, {500, 300}}</string>
+								<key>Frame</key>
+								<string>{{0, 0}, {694, 380}}</string>
+								<key>RubberWindowFrame</key>
+								<string>321 238 694 422 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXDebugSessionModule</string>
+							<key>Proportion</key>
+							<string>100%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>100%</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Debugger</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXDebugSessionModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1CD10A99069EF8BA00B06720</string>
+				<string>1C0AD2AB069F1E9B00FABCE6</string>
+				<string>1C162984064C10D400B95A72</string>
+				<string>1C0AD2AC069F1E9B00FABCE6</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.debug</string>
+			<key>WindowString</key>
+			<string>321 238 694 422 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1CD10A99069EF8BA00B06720</string>
+			<key>WindowToolIsVisible</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.find</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Dock</key>
+							<array>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CDD528C0622207200134675</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>&lt;No Editor&gt;</string>
+										<key>PBXSplitModuleInNavigatorKey</key>
+										<dict>
+											<key>Split0</key>
+											<dict>
+												<key>PBXProjectModuleGUID</key>
+												<string>1CD0528D0623707200166675</string>
+											</dict>
+											<key>SplitCount</key>
+											<string>1</string>
+										</dict>
+										<key>StatusBarVisibility</key>
+										<integer>1</integer>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{0, 0}, {781, 167}}</string>
+										<key>RubberWindowFrame</key>
+										<string>62 385 781 470 0 0 1440 878 </string>
+									</dict>
+									<key>Module</key>
+									<string>PBXNavigatorGroup</string>
+									<key>Proportion</key>
+									<string>781pt</string>
+								</dict>
+							</array>
+							<key>Proportion</key>
+							<string>50%</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528E0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Project Find</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{8, 0}, {773, 254}}</string>
+								<key>RubberWindowFrame</key>
+								<string>62 385 781 470 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXProjectFindModule</string>
+							<key>Proportion</key>
+							<string>50%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>428pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project Find</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXProjectFindModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C530D57069F1CE1000CFCEE</string>
+				<string>1C530D58069F1CE1000CFCEE</string>
+				<string>1C530D59069F1CE1000CFCEE</string>
+				<string>1CDD528C0622207200134675</string>
+				<string>1C530D5A069F1CE1000CFCEE</string>
+				<string>1CE0B1FE06471DED0097A5F4</string>
+				<string>1CD0528E0623707200166675</string>
+			</array>
+			<key>WindowString</key>
+			<string>62 385 781 470 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1C530D57069F1CE1000CFCEE</string>
+			<key>WindowToolIsVisible</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>MENUSEPARATOR</string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.debuggerConsole</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C78EAAC065D492600B07095</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Debugger Console</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {440, 358}}</string>
+								<key>RubberWindowFrame</key>
+								<string>650 41 440 400 0 0 1280 1002 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXDebugCLIModule</string>
+							<key>Proportion</key>
+							<string>358pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>358pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Debugger Console</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXDebugCLIModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C78EAAD065D492600B07095</string>
+				<string>1C78EAAE065D492600B07095</string>
+				<string>1C78EAAC065D492600B07095</string>
+			</array>
+			<key>WindowString</key>
+			<string>650 41 440 400 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>FirstTimeWindowDisplayed</key>
+			<false/>
+			<key>Identifier</key>
+			<string>windowTool.run</string>
+			<key>IsVertical</key>
+			<true/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>LauncherConfigVersion</key>
+								<string>3</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528B0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Run</string>
+								<key>Runner</key>
+								<dict>
+									<key>HorizontalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {367, 168}}</string>
+											<string>{{0, 173}, {367, 270}}</string>
+										</array>
+									</dict>
+									<key>VerticalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {406, 443}}</string>
+											<string>{{411, 0}, {517, 443}}</string>
+										</array>
+									</dict>
+								</dict>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {459, 159}}</string>
+								<key>RubberWindowFrame</key>
+								<string>103 574 459 200 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXRunSessionModule</string>
+							<key>Proportion</key>
+							<string>159pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>159pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Run Log</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXRunSessionModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C0AD2B3069F1EA900FABCE6</string>
+				<string>A34161970C989DA30007BEF2</string>
+				<string>1CD0528B0623707200166675</string>
+				<string>A34161980C989DA30007BEF2</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.run</string>
+			<key>WindowString</key>
+			<string>103 574 459 200 0 0 1280 832 </string>
+			<key>WindowToolGUID</key>
+			<string>1C0AD2B3069F1EA900FABCE6</string>
+			<key>WindowToolIsVisible</key>
+			<false/>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.scm</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C78EAB2065D492600B07095</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>&lt;No Editor&gt;</string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1C78EAB3065D492600B07095</string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<integer>1</integer>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {452, 0}}</string>
+								<key>RubberWindowFrame</key>
+								<string>743 379 452 308 0 0 1280 1002 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD052920623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>SCM</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>ConsoleFrame</key>
+								<string>{{0, 259}, {452, 0}}</string>
+								<key>Frame</key>
+								<string>{{0, 7}, {452, 259}}</string>
+								<key>RubberWindowFrame</key>
+								<string>743 379 452 308 0 0 1280 1002 </string>
+								<key>TableConfiguration</key>
+								<array>
+									<string>Status</string>
+									<real>30</real>
+									<string>FileName</string>
+									<real>199</real>
+									<string>Path</string>
+									<real>197.09500122070312</real>
+								</array>
+								<key>TableFrame</key>
+								<string>{{0, 0}, {452, 250}}</string>
+							</dict>
+							<key>Module</key>
+							<string>PBXCVSModule</string>
+							<key>Proportion</key>
+							<string>262pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>266pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>SCM</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXCVSModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C78EAB4065D492600B07095</string>
+				<string>1C78EAB5065D492600B07095</string>
+				<string>1C78EAB2065D492600B07095</string>
+				<string>1CD052920623707200166675</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.scm</string>
+			<key>WindowString</key>
+			<string>743 379 452 308 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.breakpoints</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD052930623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Breakpoints</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>BreakpointsTreeTableConfiguration</key>
+								<array>
+									<string>enabledColumn</string>
+									<real>16</real>
+									<string>breakpointColumn</string>
+									<real>201.5830078125</real>
+								</array>
+								<key>Frame</key>
+								<string>{{0, 0}, {240, 195}}</string>
+								<key>RubberWindowFrame</key>
+								<string>342 421 240 216 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXDebugBreakpointsModule</string>
+							<key>Proportion</key>
+							<string>195pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>195pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Breakpoints</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXDebugBreakpointsModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C0AD2AD069F1E9B00FABCE6</string>
+				<string>1C0AD2AE069F1E9B00FABCE6</string>
+				<string>1CD052930623707200166675</string>
+			</array>
+			<key>WindowString</key>
+			<string>342 421 240 216 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1C0AD2AD069F1E9B00FABCE6</string>
+			<key>WindowToolIsVisible</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.bookmarks</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Module</key>
+							<string>PBXBookmarksModule</string>
+							<key>Proportion</key>
+							<string>100%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>100%</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Bookmarks</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXBookmarksModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>WindowString</key>
+			<string>538 42 401 187 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.classBrowser</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>OptionsSetName</key>
+								<string>Hierarchy, all classes</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CA6456E063B45B4001379D8</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Class Browser - NSObject</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>ClassesFrame</key>
+								<string>{{0, 0}, {374, 96}}</string>
+								<key>ClassesTreeTableConfiguration</key>
+								<array>
+									<string>PBXClassNameColumnIdentifier</string>
+									<real>208</real>
+									<string>PBXClassBookColumnIdentifier</string>
+									<real>22</real>
+								</array>
+								<key>Frame</key>
+								<string>{{0, 0}, {630, 331}}</string>
+								<key>MembersFrame</key>
+								<string>{{0, 105}, {374, 395}}</string>
+								<key>MembersTreeTableConfiguration</key>
+								<array>
+									<string>PBXMemberTypeIconColumnIdentifier</string>
+									<real>22</real>
+									<string>PBXMemberNameColumnIdentifier</string>
+									<real>216</real>
+									<string>PBXMemberTypeColumnIdentifier</string>
+									<real>97</real>
+									<string>PBXMemberBookColumnIdentifier</string>
+									<real>22</real>
+								</array>
+								<key>PBXModuleWindowStatusBarHidden2</key>
+								<integer>1</integer>
+								<key>RubberWindowFrame</key>
+								<string>385 179 630 352 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXClassBrowserModule</string>
+							<key>Proportion</key>
+							<string>332pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>332pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Class Browser</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXClassBrowserModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C0AD2AF069F1E9B00FABCE6</string>
+				<string>1C0AD2B0069F1E9B00FABCE6</string>
+				<string>1CA6456E063B45B4001379D8</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.classbrowser</string>
+			<key>WindowString</key>
+			<string>385 179 630 352 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1C0AD2AF069F1E9B00FABCE6</string>
+			<key>WindowToolIsVisible</key>
+			<integer>0</integer>
+		</dict>
+	</array>
+</dict>
+</plist>
Index: branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/project.pbxproj
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/project.pbxproj	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/project.pbxproj	(revision 62)
@@ -0,0 +1,221 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 42;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		130F8B86001BDB6411CA292A /* Colonet.java in Sources */ = {isa = PBXBuildFile; fileRef = 00E68290FEC88D7311DB9C8B /* Colonet.java */; };
+		130F8B8A001BDB6411CA292A /* index_colonet.html in CopyFiles */ = {isa = PBXBuildFile; fileRef = 00E68291FEC88ED911DB9C8B /* index_colonet.html */; };
+		A34161830C989C090007BEF2 /* colonetstyle.css in JavaArchive */ = {isa = PBXBuildFile; fileRef = A34161820C989C090007BEF2 /* colonetstyle.css */; settings = {JAVA_ARCHIVE_SUBDIR = ""; }; };
+		A34161910C989CB30007BEF2 /* ColonetServerInterface.java in Sources */ = {isa = PBXBuildFile; fileRef = A34161900C989CB30007BEF2 /* ColonetServerInterface.java */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		130F8B89001BDB6411CA292A /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 16;
+			files = (
+				130F8B8A001BDB6411CA292A /* index_colonet.html in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		00E68290FEC88D7311DB9C8B /* Colonet.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = Colonet.java; sourceTree = "<group>"; };
+		00E68291FEC88ED911DB9C8B /* index_colonet.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = index_colonet.html; sourceTree = "<group>"; };
+		329C72810360BFA200C91783 /* Colonet.jar */ = {isa = PBXFileReference; explicitFileType = archive.jar; includeInIndex = 0; path = Colonet.jar; sourceTree = BUILT_PRODUCTS_DIR; };
+		A34161820C989C090007BEF2 /* colonetstyle.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = colonetstyle.css; sourceTree = "<group>"; };
+		A34161900C989CB30007BEF2 /* ColonetServerInterface.java */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.java; path = ColonetServerInterface.java; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		130F8B88001BDB6411CA292A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		00E6828FFEC88D1A11DB9C8B = {
+			isa = PBXGroup;
+			children = (
+				00E68290FEC88D7311DB9C8B /* Colonet.java */,
+				A34161900C989CB30007BEF2 /* ColonetServerInterface.java */,
+				00E68291FEC88ED911DB9C8B /* index_colonet.html */,
+				A34161820C989C090007BEF2 /* colonetstyle.css */,
+				0120612AFEC8923411DB9C8B /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		0120612AFEC8923411DB9C8B /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				329C72810360BFA200C91783 /* Colonet.jar */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXJavaArchiveBuildPhase section */
+		130F8B87001BDB6411CA292A /* JavaArchive */ = {
+			isa = PBXJavaArchiveBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				A34161830C989C090007BEF2 /* colonetstyle.css in JavaArchive */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXJavaArchiveBuildPhase section */
+
+/* Begin PBXProject section */
+		00E6828EFEC88D1A11DB9C8B /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = A302C9570C9B05D300337FAF /* Build configuration list for PBXProject "Colonet" */;
+			hasScannedForEncodings = 1;
+			mainGroup = 00E6828FFEC88D1A11DB9C8B;
+			productRefGroup = 0120612AFEC8923411DB9C8B /* Products */;
+			projectDirPath = "";
+			targets = (
+				130F8B84001BDB6411CA292A /* Colonet */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		130F8B85001BDB6411CA292A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				130F8B86001BDB6411CA292A /* Colonet.java in Sources */,
+				A34161910C989CB30007BEF2 /* ColonetServerInterface.java in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXToolTarget section */
+		130F8B84001BDB6411CA292A /* Colonet */ = {
+			isa = PBXToolTarget;
+			buildConfigurationList = A302C9530C9B05D300337FAF /* Build configuration list for PBXToolTarget "Colonet" */;
+			buildPhases = (
+				130F8B85001BDB6411CA292A /* Sources */,
+				130F8B87001BDB6411CA292A /* JavaArchive */,
+				130F8B88001BDB6411CA292A /* Frameworks */,
+				130F8B89001BDB6411CA292A /* CopyFiles */,
+			);
+			dependencies = (
+			);
+			name = Colonet;
+			productInstallPath = /usr/local/bin;
+			productName = JavaAWTApplet;
+			productReference = 329C72810360BFA200C91783 /* Colonet.jar */;
+		};
+/* End PBXToolTarget section */
+
+/* Begin XCBuildConfiguration section */
+		A302C9540C9B05D300337FAF /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_FIX_AND_CONTINUE = YES;
+				GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				JAVA_ARCHIVE_CLASSES = YES;
+				JAVA_ARCHIVE_COMPRESSION = NO;
+				JAVA_ARCHIVE_TYPE = JAR;
+				JAVA_COMPILER = /usr/bin/javac;
+				JAVA_SOURCE_SUBDIR = .;
+				PRODUCT_NAME = Colonet;
+				PURE_JAVA = YES;
+				REZ_EXECUTABLE = YES;
+				ZERO_LINK = YES;
+			};
+			name = Development;
+		};
+		A302C9550C9B05D300337FAF /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				JAVA_ARCHIVE_CLASSES = YES;
+				JAVA_ARCHIVE_COMPRESSION = NO;
+				JAVA_ARCHIVE_TYPE = JAR;
+				JAVA_COMPILER = /usr/bin/javac;
+				JAVA_SOURCE_SUBDIR = .;
+				PRODUCT_NAME = Colonet;
+				PURE_JAVA = YES;
+				REZ_EXECUTABLE = YES;
+				ZERO_LINK = NO;
+			};
+			name = Deployment;
+		};
+		A302C9560C9B05D300337FAF /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				JAVA_ARCHIVE_CLASSES = YES;
+				JAVA_ARCHIVE_COMPRESSION = NO;
+				JAVA_ARCHIVE_TYPE = JAR;
+				JAVA_COMPILER = /usr/bin/javac;
+				JAVA_SOURCE_SUBDIR = .;
+				PRODUCT_NAME = Colonet;
+				PURE_JAVA = YES;
+				REZ_EXECUTABLE = YES;
+			};
+			name = Default;
+		};
+		A302C9580C9B05D300337FAF /* Development */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Development;
+		};
+		A302C9590C9B05D300337FAF /* Deployment */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Deployment;
+		};
+		A302C95A0C9B05D300337FAF /* Default */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Default;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		A302C9530C9B05D300337FAF /* Build configuration list for PBXToolTarget "Colonet" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A302C9540C9B05D300337FAF /* Development */,
+				A302C9550C9B05D300337FAF /* Deployment */,
+				A302C9560C9B05D300337FAF /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+		A302C9570C9B05D300337FAF /* Build configuration list for PBXProject "Colonet" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				A302C9580C9B05D300337FAF /* Development */,
+				A302C9590C9B05D300337FAF /* Deployment */,
+				A302C95A0C9B05D300337FAF /* Default */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Default;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 00E6828EFEC88D1A11DB9C8B /* Project object */;
+}
Index: branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/default.pbxuser
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/default.pbxuser	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/default.pbxuser	(revision 62)
@@ -0,0 +1,38 @@
+// !$*UTF8*$!
+{
+	00E6828EFEC88D1A11DB9C8B = {
+		activeBuildStyle = 130F8B80001BD9A911CA292A;
+		activeExecutable = 130F8B8C001BDBAD11CA292A;
+		activeTarget = 130F8B84001BDB6411CA292A;
+		executables = (
+			130F8B8C001BDBAD11CA292A,
+		);
+	};
+	130F8B84001BDB6411CA292A = {
+		activeExec = 0;
+	};
+	130F8B8C001BDBAD11CA292A = {
+		activeArgIndex = 0;
+		activeArgIndices = (
+			YES,
+		);
+		argumentStrings = (
+			example1.html,
+		);
+		debuggerPlugin = JavaDebugging;
+		dylibVariantSuffix = "";
+		enableDebugStr = 1;
+		environmentEntries = (
+		);
+		isa = PBXExecutable;
+		launchableReference = 130F8B8D001BDBAD11CA292A;
+		sourceDirectories = (
+		);
+	};
+	130F8B8D001BDBAD11CA292A = {
+		isa = PBXExecutableFileReference;
+		name = appletviewer;
+		path = /usr/bin/appletviewer;
+		refType = 0;
+	};
+}
Index: branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.pbxuser
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.pbxuser	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.pbxuser	(revision 62)
@@ -0,0 +1,217 @@
+// !$*UTF8*$!
+{
+	00E6828EFEC88D1A11DB9C8B /* Project object */ = {
+		activeBuildConfigurationName = Development;
+		activeExecutable = 130F8B8C001BDBAD11CA292A;
+		activeTarget = 130F8B84001BDB6411CA292A /* Colonet */;
+		addToTargets = (
+			130F8B84001BDB6411CA292A /* Colonet */,
+		);
+		breakpoints = (
+		);
+		codeSenseManager = A341617F0C989B510007BEF2 /* Code sense */;
+		executables = (
+			130F8B8C001BDBAD11CA292A,
+		);
+		perUserDictionary = {
+			PBXConfiguration.PBXFileTableDataSource3.PBXBookmarksDataSource = {
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXBookmarksDataSource_NameID;
+				PBXFileTableDataSourceColumnWidthsKey = (
+					200,
+					200,
+					300,
+				);
+				PBXFileTableDataSourceColumnsKey = (
+					PBXBookmarksDataSource_LocationID,
+					PBXBookmarksDataSource_NameID,
+					PBXBookmarksDataSource_CommentsID,
+				);
+			};
+			PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
+				PBXFileTableDataSourceColumnWidthsKey = (
+					22,
+					300,
+					131,
+				);
+				PBXFileTableDataSourceColumnsKey = (
+					PBXExecutablesDataSource_ActiveFlagID,
+					PBXExecutablesDataSource_NameID,
+					PBXExecutablesDataSource_CommentsID,
+				);
+			};
+			PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+				PBXFileTableDataSourceColumnWidthsKey = (
+					20,
+					537,
+					20,
+					48,
+					43,
+					43,
+					20,
+				);
+				PBXFileTableDataSourceColumnsKey = (
+					PBXFileDataSource_FiletypeID,
+					PBXFileDataSource_Filename_ColumnID,
+					PBXFileDataSource_Built_ColumnID,
+					PBXFileDataSource_ObjectSize_ColumnID,
+					PBXFileDataSource_Errors_ColumnID,
+					PBXFileDataSource_Warnings_ColumnID,
+					PBXFileDataSource_Target_ColumnID,
+				);
+			};
+			PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = {
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID;
+				PBXFileTableDataSourceColumnWidthsKey = (
+					16,
+					200,
+					50,
+					183,
+				);
+				PBXFileTableDataSourceColumnsKey = (
+					PBXSymbolsDataSource_SymbolTypeIconID,
+					PBXSymbolsDataSource_SymbolNameID,
+					PBXSymbolsDataSource_SymbolTypeID,
+					PBXSymbolsDataSource_ReferenceNameID,
+				);
+			};
+			PBXConfiguration.PBXFileTableDataSource3.XCSCMDataSource = {
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+				PBXFileTableDataSourceColumnWidthsKey = (
+					20,
+					20,
+					513,
+					20,
+					48.1626,
+					43,
+					43,
+					20,
+				);
+				PBXFileTableDataSourceColumnsKey = (
+					PBXFileDataSource_SCM_ColumnID,
+					PBXFileDataSource_FiletypeID,
+					PBXFileDataSource_Filename_ColumnID,
+					PBXFileDataSource_Built_ColumnID,
+					PBXFileDataSource_ObjectSize_ColumnID,
+					PBXFileDataSource_Errors_ColumnID,
+					PBXFileDataSource_Warnings_ColumnID,
+					PBXFileDataSource_Target_ColumnID,
+				);
+			};
+			PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
+				PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+				PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+				PBXFileTableDataSourceColumnWidthsKey = (
+					20,
+					200,
+					63,
+					20,
+					48,
+					43,
+					43,
+				);
+				PBXFileTableDataSourceColumnsKey = (
+					PBXFileDataSource_FiletypeID,
+					PBXFileDataSource_Filename_ColumnID,
+					PBXTargetDataSource_PrimaryAttribute,
+					PBXFileDataSource_Built_ColumnID,
+					PBXFileDataSource_ObjectSize_ColumnID,
+					PBXFileDataSource_Errors_ColumnID,
+					PBXFileDataSource_Warnings_ColumnID,
+				);
+			};
+			PBXPerProjectTemplateStateSaveDate = 211486151;
+			PBXWorkspaceStateSaveDate = 211486151;
+		};
+		sourceControlManager = A341617E0C989B510007BEF2 /* Source Control */;
+		userBuildSettings = {
+		};
+	};
+	00E68290FEC88D7311DB9C8B /* Colonet.java */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {698, 10906}}";
+			sepNavSelRange = "{21978, 0}";
+			sepNavVisRect = "{{0, 10259}, {606, 647}}";
+			sepNavWindowFrame = "{{499, 170}, {651, 776}}";
+		};
+	};
+	00E68291FEC88ED911DB9C8B /* index_colonet.html */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {764, 924}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRect = "{{0, 197}, {606, 647}}";
+			sepNavWindowFrame = "{{597, 192}, {651, 776}}";
+		};
+	};
+	130F8B84001BDB6411CA292A /* Colonet */ = {
+		activeExec = 0;
+	};
+	130F8B8C001BDBAD11CA292A = {
+		isa = PBXExecutable;
+		activeArgIndex = 0;
+		activeArgIndices = (
+			YES,
+		);
+		argumentStrings = (
+			index_colonet.html,
+		);
+		autoAttachOnCrash = 1;
+		configStateDict = {
+		};
+		customDataFormattersEnabled = 1;
+		debuggerPlugin = JavaDebugging;
+		disassemblyDisplayState = 0;
+		dylibVariantSuffix = "";
+		enableDebugStr = 1;
+		environmentEntries = (
+		);
+		executableSystemSymbolLevel = 0;
+		executableUserSymbolLevel = 0;
+		launchableReference = 130F8B8D001BDBAD11CA292A /* appletviewer */;
+		libgmallocEnabled = 0;
+		sourceDirectories = (
+		);
+	};
+	130F8B8D001BDBAD11CA292A /* appletviewer */ = {
+		isa = PBXFileReference;
+		explicitFileType = "compiled.mach-o.executable";
+		name = appletviewer;
+		path = /usr/bin/appletviewer;
+		sourceTree = "<absolute>";
+	};
+	A341617E0C989B510007BEF2 /* Source Control */ = {
+		isa = PBXSourceControlManager;
+		fallbackIsa = XCSourceControlManager;
+		isSCMEnabled = 0;
+		scmConfiguration = {
+			SubversionToolPath = /usr/local/bin/svn;
+		};
+		scmType = scm.subversion;
+	};
+	A341617F0C989B510007BEF2 /* Code sense */ = {
+		isa = PBXCodeSenseManager;
+		indexTemplatePath = "";
+	};
+	A34161820C989C090007BEF2 /* colonetstyle.css */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {612, 647}}";
+			sepNavSelRange = "{0, 0}";
+			sepNavVisRect = "{{0, 0}, {612, 647}}";
+			sepNavWindowFrame = "{{15, 56}, {651, 776}}";
+		};
+	};
+	A34161900C989CB30007BEF2 /* ColonetServerInterface.java */ = {
+		uiCtxt = {
+			sepNavIntBoundsRect = "{{0, 0}, {926, 4102}}";
+			sepNavSelRange = "{1566, 0}";
+			sepNavVisRect = "{{0, 349}, {606, 647}}";
+			sepNavWindowFrame = "{{15, 56}, {651, 776}}";
+		};
+	};
+}
Index: branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.perspective
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.perspective	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.xcodeproj/gmtress.perspective	(revision 62)
@@ -0,0 +1,1385 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>ActivePerspectiveName</key>
+	<string>Project</string>
+	<key>AllowedModules</key>
+	<array>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXSmartGroupTreeModule</string>
+			<key>Name</key>
+			<string>Groups and Files Outline View</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXNavigatorGroup</string>
+			<key>Name</key>
+			<string>Editor</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCTaskListModule</string>
+			<key>Name</key>
+			<string>Task List</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCDetailModule</string>
+			<key>Name</key>
+			<string>File and Smart Group Detail Viewer</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXBuildResultsModule</string>
+			<key>Name</key>
+			<string>Detailed Build Results Viewer</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXProjectFindModule</string>
+			<key>Name</key>
+			<string>Project Batch Find Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXRunSessionModule</string>
+			<key>Name</key>
+			<string>Run Log</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXBookmarksModule</string>
+			<key>Name</key>
+			<string>Bookmarks Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXClassBrowserModule</string>
+			<key>Name</key>
+			<string>Class Browser</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXCVSModule</string>
+			<key>Name</key>
+			<string>Source Code Control Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXDebugBreakpointsModule</string>
+			<key>Name</key>
+			<string>Debug Breakpoints Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>XCDockableInspector</string>
+			<key>Name</key>
+			<string>Inspector</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>n</string>
+			<key>Module</key>
+			<string>PBXOpenQuicklyModule</string>
+			<key>Name</key>
+			<string>Open Quickly Tool</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXDebugSessionModule</string>
+			<key>Name</key>
+			<string>Debugger</string>
+		</dict>
+		<dict>
+			<key>BundleLoadPath</key>
+			<string></string>
+			<key>MaxInstances</key>
+			<string>1</string>
+			<key>Module</key>
+			<string>PBXDebugCLIModule</string>
+			<key>Name</key>
+			<string>Debug Console</string>
+		</dict>
+	</array>
+	<key>Description</key>
+	<string>AIODescriptionKey</string>
+	<key>DockingSystemVisible</key>
+	<false/>
+	<key>Extension</key>
+	<string>perspective</string>
+	<key>FavBarConfig</key>
+	<dict>
+		<key>PBXProjectModuleGUID</key>
+		<string>A34161AA0C989E610007BEF2</string>
+		<key>XCBarModuleItemNames</key>
+		<dict/>
+		<key>XCBarModuleItems</key>
+		<array/>
+	</dict>
+	<key>FirstTimeWindowDisplayed</key>
+	<false/>
+	<key>Identifier</key>
+	<string>com.apple.perspectives.project.default</string>
+	<key>MajorVersion</key>
+	<integer>33</integer>
+	<key>MinorVersion</key>
+	<integer>0</integer>
+	<key>Name</key>
+	<string>All-In-One</string>
+	<key>Notifications</key>
+	<array/>
+	<key>OpenEditors</key>
+	<array/>
+	<key>PerspectiveWidths</key>
+	<array>
+		<integer>1000</integer>
+		<integer>1000</integer>
+		<integer>1000</integer>
+	</array>
+	<key>Perspectives</key>
+	<array>
+		<dict>
+			<key>ChosenToolbarItems</key>
+			<array>
+				<string>XCToolbarPerspectiveControl</string>
+				<string>NSToolbarSeparatorItem</string>
+				<string>active-target-popup</string>
+				<string>action</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>buildOrClean</string>
+				<string>build-and-runOrDebug</string>
+				<string>com.apple.ide.PBXToolbarStopButton</string>
+				<string>get-info</string>
+				<string>toggle-editor</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>com.apple.pbx.toolbar.searchfield</string>
+			</array>
+			<key>ControllerClassBaseName</key>
+			<string></string>
+			<key>IconName</key>
+			<string>WindowOfProject</string>
+			<key>Identifier</key>
+			<string>perspective.project</string>
+			<key>IsVertical</key>
+			<false/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>PBXBottomSmartGroupGIDs</key>
+						<array>
+							<string>1C37FBAC04509CD000000102</string>
+							<string>1C37FAAC04509CD000000102</string>
+							<string>1C08E77C0454961000C914BD</string>
+							<string>1C37FABC05509CD000000102</string>
+							<string>1C37FABC05539CD112110102</string>
+							<string>E2644B35053B69B200211256</string>
+							<string>1C37FABC04509CD000100104</string>
+							<string>1CC0EA4004350EF90044410B</string>
+							<string>1CC0EA4004350EF90041110B</string>
+						</array>
+						<key>PBXProjectModuleGUID</key>
+						<string>1CA23ED40692098700951B8B</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Files</string>
+						<key>PBXProjectStructureProvided</key>
+						<string>yes</string>
+						<key>PBXSmartGroupTreeModuleColumnData</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+							<array>
+								<real>22</real>
+								<real>180</real>
+							</array>
+							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+							<array>
+								<string>SCMStatusColumn</string>
+								<string>MainColumn</string>
+							</array>
+						</dict>
+						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+							<array/>
+							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+							<array>
+								<array>
+									<integer>0</integer>
+								</array>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+							<string>{{0, 0}, {202, 564}}</string>
+						</dict>
+						<key>PBXTopSmartGroupGIDs</key>
+						<array/>
+						<key>XCIncludePerspectivesSwitch</key>
+						<false/>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>Frame</key>
+						<string>{{0, 0}, {219, 582}}</string>
+						<key>GroupTreeTableConfiguration</key>
+						<array>
+							<string>SCMStatusColumn</string>
+							<real>22</real>
+							<string>MainColumn</string>
+							<real>180</real>
+						</array>
+						<key>RubberWindowFrame</key>
+						<string>28 184 1000 623 0 0 1280 832 </string>
+					</dict>
+					<key>Module</key>
+					<string>PBXSmartGroupTreeModule</string>
+					<key>Proportion</key>
+					<string>219pt</string>
+				</dict>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>A34161A50C989E610007BEF2</string>
+								<key>PBXProjectModuleLabel</key>
+								<string></string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>A34161A60C989E610007BEF2</string>
+										<key>PBXProjectModuleLabel</key>
+										<string></string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<true/>
+								<key>XCSharingToken</key>
+								<string>com.apple.Xcode.CommonNavigatorGroupSharingToken</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {776, 0}}</string>
+								<key>RubberWindowFrame</key>
+								<string>28 184 1000 623 0 0 1280 832 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>Proportion</key>
+							<string>577pt</string>
+							<key>Tabs</key>
+							<array>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CA23EDF0692099D00951B8B</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>Detail</string>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{10, 27}, {776, 550}}</string>
+										<key>RubberWindowFrame</key>
+										<string>28 184 1000 623 0 0 1280 832 </string>
+									</dict>
+									<key>Module</key>
+									<string>XCDetailModule</string>
+								</dict>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CA23EE00692099D00951B8B</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>Project Find</string>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{10, 27}, {776, 550}}</string>
+									</dict>
+									<key>Module</key>
+									<string>PBXProjectFindModule</string>
+								</dict>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CA23EE10692099D00951B8B</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>SCM Results</string>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{10, 27}, {776, 550}}</string>
+									</dict>
+									<key>Module</key>
+									<string>PBXCVSModule</string>
+								</dict>
+							</array>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>776pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCModuleDock</string>
+				<string>PBXSmartGroupTreeModule</string>
+				<string>XCModuleDock</string>
+				<string>PBXNavigatorGroup</string>
+				<string>XCDockableTabModule</string>
+				<string>XCDetailModule</string>
+				<string>PBXProjectFindModule</string>
+				<string>PBXCVSModule</string>
+			</array>
+			<key>TableOfContents</key>
+			<array>
+				<string>A302C94A0C9B05D300337FAF</string>
+				<string>1CA23ED40692098700951B8B</string>
+				<string>A302C94B0C9B05D300337FAF</string>
+				<string>A34161A50C989E610007BEF2</string>
+				<string>A302C94C0C9B05D300337FAF</string>
+				<string>1CA23EDF0692099D00951B8B</string>
+				<string>1CA23EE00692099D00951B8B</string>
+				<string>1CA23EE10692099D00951B8B</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.default</string>
+		</dict>
+		<dict>
+			<key>ChosenToolbarItems</key>
+			<array>
+				<string>XCToolbarPerspectiveControl</string>
+				<string>NSToolbarSeparatorItem</string>
+				<string>active-target-popup</string>
+				<string>active-executable-popup</string>
+				<string>active-buildstyle-popup</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>build</string>
+				<string>clean</string>
+				<string>NSToolbarSeparatorItem</string>
+				<string>run</string>
+				<string>debug</string>
+			</array>
+			<key>ControllerClassBaseName</key>
+			<string></string>
+			<key>IconName</key>
+			<string>BuildTabIcon</string>
+			<key>Identifier</key>
+			<string>perspective.build</string>
+			<key>IsVertical</key>
+			<false/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>PBXBottomSmartGroupGIDs</key>
+						<array/>
+						<key>PBXProjectModuleGUID</key>
+						<string>1CA23EE50692099D00951B8B</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Files</string>
+						<key>PBXProjectStructureProvided</key>
+						<string>yes</string>
+						<key>PBXSmartGroupTreeModuleColumnData</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+							<array>
+								<real>184</real>
+							</array>
+							<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+							<array>
+								<string>MainColumn</string>
+							</array>
+						</dict>
+						<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+						<dict>
+							<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+							<array>
+								<string>00E6828FFEC88D1A11DB9C8B</string>
+								<string>0120612AFEC8923411DB9C8B</string>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+							<array>
+								<array>
+									<integer>0</integer>
+								</array>
+							</array>
+							<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+							<string>{{0, 0}, {184, 564}}</string>
+						</dict>
+						<key>PBXTopSmartGroupGIDs</key>
+						<array/>
+						<key>XCIncludePerspectivesSwitch</key>
+						<false/>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>Frame</key>
+						<string>{{0, 0}, {201, 582}}</string>
+						<key>GroupTreeTableConfiguration</key>
+						<array>
+							<string>MainColumn</string>
+							<real>184</real>
+						</array>
+					</dict>
+					<key>Module</key>
+					<string>PBXSmartGroupTreeModule</string>
+					<key>Proportion</key>
+					<string>201pt</string>
+				</dict>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>A34161AC0C989F140007BEF2</string>
+								<key>PBXProjectModuleLabel</key>
+								<string></string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>A34161AD0C989F140007BEF2</string>
+										<key>PBXProjectModuleLabel</key>
+										<string></string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<true/>
+								<key>XCSharingToken</key>
+								<string>com.apple.Xcode.CommonNavigatorGroupSharingToken</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {794, 0}}</string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>Proportion</key>
+							<string>577pt</string>
+							<key>Tabs</key>
+							<array>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>XCMainBuildResultsModuleGUID</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>Build</string>
+										<key>XCBuildResultsTrigger_Collapse</key>
+										<integer>1021</integer>
+										<key>XCBuildResultsTrigger_Open</key>
+										<integer>1011</integer>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{10, 27}, {794, 550}}</string>
+									</dict>
+									<key>Module</key>
+									<string>PBXBuildResultsModule</string>
+								</dict>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>LauncherConfigVersion</key>
+										<string>3</string>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CA23EE80692099D00951B8B</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>Run</string>
+										<key>Runner</key>
+										<dict>
+											<key>HorizontalSplitView</key>
+											<dict>
+												<key>_collapsingFrameDimension</key>
+												<real>0.0</real>
+												<key>_indexOfCollapsedView</key>
+												<integer>0</integer>
+												<key>_percentageOfCollapsedView</key>
+												<real>0.0</real>
+												<key>isCollapsed</key>
+												<string>yes</string>
+												<key>sizes</key>
+												<array>
+													<string>{{0, 0}, {367, 168}}</string>
+													<string>{{0, 173}, {367, 270}}</string>
+												</array>
+											</dict>
+											<key>VerticalSplitView</key>
+											<dict>
+												<key>_collapsingFrameDimension</key>
+												<real>0.0</real>
+												<key>_indexOfCollapsedView</key>
+												<integer>0</integer>
+												<key>_percentageOfCollapsedView</key>
+												<real>0.0</real>
+												<key>isCollapsed</key>
+												<string>yes</string>
+												<key>sizes</key>
+												<array>
+													<string>{{0, 0}, {406, 443}}</string>
+													<string>{{411, 0}, {517, 443}}</string>
+												</array>
+											</dict>
+										</dict>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{10, 27}, {794, 550}}</string>
+									</dict>
+									<key>Module</key>
+									<string>PBXRunSessionModule</string>
+								</dict>
+							</array>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>794pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Build</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCModuleDock</string>
+				<string>PBXSmartGroupTreeModule</string>
+				<string>XCModuleDock</string>
+				<string>PBXNavigatorGroup</string>
+				<string>XCDockableTabModule</string>
+				<string>PBXBuildResultsModule</string>
+				<string>PBXRunSessionModule</string>
+				<string>XCConsole</string>
+			</array>
+			<key>TableOfContents</key>
+			<array>
+				<string>A3206E5B0C9A392E00ED99C1</string>
+				<string>1CA23EE50692099D00951B8B</string>
+				<string>A3206E5C0C9A392E00ED99C1</string>
+				<string>A34161AC0C989F140007BEF2</string>
+				<string>A3206E5D0C9A392E00ED99C1</string>
+				<string>XCMainBuildResultsModuleGUID</string>
+				<string>1CA23EE80692099D00951B8B</string>
+				<string>A3206E5E0C9A392E00ED99C1</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.buildAndRun</string>
+		</dict>
+		<dict>
+			<key>ChosenToolbarItems</key>
+			<array>
+				<string>XCToolbarPerspectiveControl</string>
+				<string>NSToolbarSeparatorItem</string>
+				<string>build-and-debug</string>
+				<string>debug</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+				<string>debugger-fix-and-continue</string>
+				<string>debugger-restart-executable</string>
+				<string>debugger-pause</string>
+				<string>debugger-continue</string>
+				<string>debugger-step-over</string>
+				<string>debugger-step-into</string>
+				<string>debugger-step-out</string>
+				<string>debugger-step-instruction</string>
+				<string>NSToolbarFlexibleSpaceItem</string>
+			</array>
+			<key>ControllerClassBaseName</key>
+			<string>PBXDebugSessionModule</string>
+			<key>IconName</key>
+			<string>DebugTabIcon</string>
+			<key>Identifier</key>
+			<string>perspective.debug</string>
+			<key>IsVertical</key>
+			<true/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>PBXProjectModuleGUID</key>
+						<string>1CCC7628064C1048000F2A68</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Debugger Console</string>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>Frame</key>
+						<string>{{0, 0}, {1000, 0}}</string>
+					</dict>
+					<key>Module</key>
+					<string>PBXDebugCLIModule</string>
+					<key>Proportion</key>
+					<string>0pt</string>
+				</dict>
+				<dict>
+					<key>ContentConfiguration</key>
+					<dict>
+						<key>Debugger</key>
+						<dict>
+							<key>HorizontalSplitView</key>
+							<dict>
+								<key>_collapsingFrameDimension</key>
+								<real>0.0</real>
+								<key>_indexOfCollapsedView</key>
+								<integer>0</integer>
+								<key>_percentageOfCollapsedView</key>
+								<real>0.0</real>
+								<key>isCollapsed</key>
+								<string>yes</string>
+								<key>sizes</key>
+								<array>
+									<string>{{0, 0}, {486, 274}}</string>
+									<string>{{486, 0}, {514, 274}}</string>
+								</array>
+							</dict>
+							<key>VerticalSplitView</key>
+							<dict>
+								<key>_collapsingFrameDimension</key>
+								<real>0.0</real>
+								<key>_indexOfCollapsedView</key>
+								<integer>0</integer>
+								<key>_percentageOfCollapsedView</key>
+								<real>0.0</real>
+								<key>isCollapsed</key>
+								<string>yes</string>
+								<key>sizes</key>
+								<array>
+									<string>{{0, 0}, {1000, 274}}</string>
+									<string>{{0, 274}, {1000, 303}}</string>
+								</array>
+							</dict>
+						</dict>
+						<key>LauncherConfigVersion</key>
+						<string>8</string>
+						<key>PBXProjectModuleGUID</key>
+						<string>1CCC7629064C1048000F2A68</string>
+						<key>PBXProjectModuleLabel</key>
+						<string>Debug</string>
+					</dict>
+					<key>GeometryConfiguration</key>
+					<dict>
+						<key>DebugConsoleDrawerSize</key>
+						<string>{100, 120}</string>
+						<key>DebugConsoleVisible</key>
+						<string>None</string>
+						<key>DebugConsoleWindowFrame</key>
+						<string>{{200, 200}, {500, 300}}</string>
+						<key>DebugSTDIOWindowFrame</key>
+						<string>{{200, 200}, {500, 300}}</string>
+						<key>Frame</key>
+						<string>{{0, 5}, {1000, 577}}</string>
+					</dict>
+					<key>Module</key>
+					<string>PBXDebugSessionModule</string>
+					<key>Proportion</key>
+					<string>577pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Debug</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>XCModuleDock</string>
+				<string>PBXDebugCLIModule</string>
+				<string>PBXDebugSessionModule</string>
+				<string>PBXDebugProcessAndThreadModule</string>
+				<string>PBXDebugProcessViewModule</string>
+				<string>PBXDebugThreadViewModule</string>
+				<string>PBXDebugStackFrameViewModule</string>
+				<string>PBXNavigatorGroup</string>
+				<string>XCConsole</string>
+			</array>
+			<key>TableOfContents</key>
+			<array>
+				<string>A302C94D0C9B05D300337FAF</string>
+				<string>1CCC7628064C1048000F2A68</string>
+				<string>1CCC7629064C1048000F2A68</string>
+				<string>A302C94E0C9B05D300337FAF</string>
+				<string>A302C94F0C9B05D300337FAF</string>
+				<string>A302C9500C9B05D300337FAF</string>
+				<string>A302C9510C9B05D300337FAF</string>
+				<string>A302C9460C9B05CD00337FAF</string>
+				<string>A302C9520C9B05D300337FAF</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.debug</string>
+		</dict>
+	</array>
+	<key>PerspectivesBarVisible</key>
+	<true/>
+	<key>ShelfIsVisible</key>
+	<false/>
+	<key>SourceDescription</key>
+	<string>file at '/System/Library/PrivateFrameworks/DevToolsInterface.framework/Versions/A/Resources/XCPerspectivesSpecification.xcperspec'</string>
+	<key>StatusbarIsVisible</key>
+	<true/>
+	<key>TimeStamp</key>
+	<real>0.0</real>
+	<key>ToolbarDisplayMode</key>
+	<integer>1</integer>
+	<key>ToolbarIsVisible</key>
+	<true/>
+	<key>ToolbarSizeMode</key>
+	<integer>1</integer>
+	<key>Type</key>
+	<string>Perspectives</string>
+	<key>UpdateMessage</key>
+	<string></string>
+	<key>WindowJustification</key>
+	<integer>5</integer>
+	<key>WindowOrderList</key>
+	<array>
+		<string>A302C9520C9B05D300337FAF</string>
+		<string>/Users/gmtress/Documents/Colony/roboclub_repository/colony/trunk/code/projects/colonet/ColonetGUI/Colonet.xcodeproj</string>
+	</array>
+	<key>WindowString</key>
+	<string>28 184 1000 623 0 0 1280 832 </string>
+	<key>WindowTools</key>
+	<array>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.find</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Dock</key>
+							<array>
+								<dict>
+									<key>ContentConfiguration</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1CDD528C0622207200134675</string>
+										<key>PBXProjectModuleLabel</key>
+										<string>&lt;No Editor&gt;</string>
+										<key>PBXSplitModuleInNavigatorKey</key>
+										<dict>
+											<key>Split0</key>
+											<dict>
+												<key>PBXProjectModuleGUID</key>
+												<string>1CD0528D0623707200166675</string>
+											</dict>
+											<key>SplitCount</key>
+											<string>1</string>
+										</dict>
+										<key>StatusBarVisibility</key>
+										<integer>1</integer>
+									</dict>
+									<key>GeometryConfiguration</key>
+									<dict>
+										<key>Frame</key>
+										<string>{{0, 0}, {781, 167}}</string>
+										<key>RubberWindowFrame</key>
+										<string>62 385 781 470 0 0 1440 878 </string>
+									</dict>
+									<key>Module</key>
+									<string>PBXNavigatorGroup</string>
+									<key>Proportion</key>
+									<string>781pt</string>
+								</dict>
+							</array>
+							<key>Proportion</key>
+							<string>50%</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528E0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Project Find</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{8, 0}, {773, 254}}</string>
+								<key>RubberWindowFrame</key>
+								<string>62 385 781 470 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXProjectFindModule</string>
+							<key>Proportion</key>
+							<string>50%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>428pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Project Find</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXProjectFindModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C530D57069F1CE1000CFCEE</string>
+				<string>1C530D58069F1CE1000CFCEE</string>
+				<string>1C530D59069F1CE1000CFCEE</string>
+				<string>1CDD528C0622207200134675</string>
+				<string>1C530D5A069F1CE1000CFCEE</string>
+				<string>1CE0B1FE06471DED0097A5F4</string>
+				<string>1CD0528E0623707200166675</string>
+			</array>
+			<key>WindowString</key>
+			<string>62 385 781 470 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1C530D57069F1CE1000CFCEE</string>
+			<key>WindowToolIsVisible</key>
+			<integer>0</integer>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.run</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>LauncherConfigVersion</key>
+								<string>3</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD0528B0623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Run - cocoapp112 - cocoapp112</string>
+								<key>Runner</key>
+								<dict>
+									<key>HorizontalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {365, 167}}</string>
+											<string>{{0, 176}, {365, 267}}</string>
+										</array>
+									</dict>
+									<key>VerticalSplitView</key>
+									<dict>
+										<key>_collapsingFrameDimension</key>
+										<real>0.0</real>
+										<key>_indexOfCollapsedView</key>
+										<integer>0</integer>
+										<key>_percentageOfCollapsedView</key>
+										<real>0.0</real>
+										<key>isCollapsed</key>
+										<string>yes</string>
+										<key>sizes</key>
+										<array>
+											<string>{{0, 0}, {405, 443}}</string>
+											<string>{{414, 0}, {514, 443}}</string>
+										</array>
+									</dict>
+								</dict>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {456, 192}}</string>
+								<key>RubberWindowFrame</key>
+								<string>741 130 456 234 0 0 1280 1002 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXRunSessionModule</string>
+							<key>Proportion</key>
+							<string>192pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>192pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Run Log</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXRunSessionModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C78EAAF065D492600B07095</string>
+				<string>1C78EAB0065D492600B07095</string>
+				<string>1CD0528B0623707200166675</string>
+				<string>1C78EAB1065D492600B07095</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.run</string>
+			<key>WindowString</key>
+			<string>741 130 456 234 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.scm</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1C78EAB2065D492600B07095</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>&lt;No Editor&gt;</string>
+								<key>PBXSplitModuleInNavigatorKey</key>
+								<dict>
+									<key>Split0</key>
+									<dict>
+										<key>PBXProjectModuleGUID</key>
+										<string>1C78EAB3065D492600B07095</string>
+									</dict>
+									<key>SplitCount</key>
+									<string>1</string>
+								</dict>
+								<key>StatusBarVisibility</key>
+								<integer>1</integer>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {452, 0}}</string>
+								<key>RubberWindowFrame</key>
+								<string>743 379 452 308 0 0 1280 1002 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>0pt</string>
+						</dict>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CD052920623707200166675</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>SCM</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>ConsoleFrame</key>
+								<string>{{0, 259}, {452, 0}}</string>
+								<key>Frame</key>
+								<string>{{0, 7}, {452, 259}}</string>
+								<key>RubberWindowFrame</key>
+								<string>743 379 452 308 0 0 1280 1002 </string>
+								<key>TableConfiguration</key>
+								<array>
+									<string>Status</string>
+									<real>30</real>
+									<string>FileName</string>
+									<real>199</real>
+									<string>Path</string>
+									<real>197.09500122070312</real>
+								</array>
+								<key>TableFrame</key>
+								<string>{{0, 0}, {452, 250}}</string>
+							</dict>
+							<key>Module</key>
+							<string>PBXCVSModule</string>
+							<key>Proportion</key>
+							<string>262pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>266pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>SCM</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXCVSModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>1</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C78EAB4065D492600B07095</string>
+				<string>1C78EAB5065D492600B07095</string>
+				<string>1C78EAB2065D492600B07095</string>
+				<string>1CD052920623707200166675</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.scm</string>
+			<key>WindowString</key>
+			<string>743 379 452 308 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.breakpoints</string>
+			<key>IsVertical</key>
+			<false/>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<true/>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXBottomSmartGroupGIDs</key>
+								<array>
+									<string>1C77FABC04509CD000000102</string>
+								</array>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CE0B1FE06471DED0097A5F4</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Files</string>
+								<key>PBXProjectStructureProvided</key>
+								<string>no</string>
+								<key>PBXSmartGroupTreeModuleColumnData</key>
+								<dict>
+									<key>PBXSmartGroupTreeModuleColumnWidthsKey</key>
+									<array>
+										<real>168</real>
+									</array>
+									<key>PBXSmartGroupTreeModuleColumnsKey_v4</key>
+									<array>
+										<string>MainColumn</string>
+									</array>
+								</dict>
+								<key>PBXSmartGroupTreeModuleOutlineStateKey_v7</key>
+								<dict>
+									<key>PBXSmartGroupTreeModuleOutlineStateExpansionKey</key>
+									<array>
+										<string>1C77FABC04509CD000000102</string>
+									</array>
+									<key>PBXSmartGroupTreeModuleOutlineStateSelectionKey</key>
+									<array>
+										<array>
+											<integer>0</integer>
+										</array>
+									</array>
+									<key>PBXSmartGroupTreeModuleOutlineStateVisibleRectKey</key>
+									<string>{{0, 0}, {168, 350}}</string>
+								</dict>
+								<key>PBXTopSmartGroupGIDs</key>
+								<array/>
+								<key>XCIncludePerspectivesSwitch</key>
+								<false/>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{0, 0}, {185, 368}}</string>
+								<key>GroupTreeTableConfiguration</key>
+								<array>
+									<string>MainColumn</string>
+									<real>168</real>
+								</array>
+								<key>RubberWindowFrame</key>
+								<string>315 424 744 409 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXSmartGroupTreeModule</string>
+							<key>Proportion</key>
+							<string>185pt</string>
+						</dict>
+						<dict>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CA1AED706398EBD00589147</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Detail</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>Frame</key>
+								<string>{{190, 0}, {554, 368}}</string>
+								<key>RubberWindowFrame</key>
+								<string>315 424 744 409 0 0 1440 878 </string>
+							</dict>
+							<key>Module</key>
+							<string>XCDetailModule</string>
+							<key>Proportion</key>
+							<string>554pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>368pt</string>
+				</dict>
+			</array>
+			<key>MajorVersion</key>
+			<integer>2</integer>
+			<key>MinorVersion</key>
+			<integer>0</integer>
+			<key>Name</key>
+			<string>Breakpoints</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXSmartGroupTreeModule</string>
+				<string>XCDetailModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>TableOfContents</key>
+			<array>
+				<string>1CDDB66807F98D9800BB5817</string>
+				<string>1CDDB66907F98D9800BB5817</string>
+				<string>1CE0B1FE06471DED0097A5F4</string>
+				<string>1CA1AED706398EBD00589147</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.breakpoints</string>
+			<key>WindowString</key>
+			<string>315 424 744 409 0 0 1440 878 </string>
+			<key>WindowToolGUID</key>
+			<string>1CDDB66807F98D9800BB5817</string>
+			<key>WindowToolIsVisible</key>
+			<true/>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.debugAnimator</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Module</key>
+							<string>PBXNavigatorGroup</string>
+							<key>Proportion</key>
+							<string>100%</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>100%</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Debug Visualizer</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXNavigatorGroup</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<true/>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.debugAnimator</string>
+			<key>WindowString</key>
+			<string>100 100 700 500 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.bookmarks</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>Module</key>
+							<string>PBXBookmarksModule</string>
+							<key>Proportion</key>
+							<string>166pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>166pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Bookmarks</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXBookmarksModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>WindowString</key>
+			<string>538 42 401 187 0 0 1280 1002 </string>
+		</dict>
+		<dict>
+			<key>Identifier</key>
+			<string>windowTool.classBrowser</string>
+			<key>Layout</key>
+			<array>
+				<dict>
+					<key>Dock</key>
+					<array>
+						<dict>
+							<key>BecomeActive</key>
+							<integer>1</integer>
+							<key>ContentConfiguration</key>
+							<dict>
+								<key>OptionsSetName</key>
+								<string>Hierarchy, all classes</string>
+								<key>PBXProjectModuleGUID</key>
+								<string>1CA6456E063B45B4001379D8</string>
+								<key>PBXProjectModuleLabel</key>
+								<string>Class Browser - NSObject</string>
+							</dict>
+							<key>GeometryConfiguration</key>
+							<dict>
+								<key>ClassesFrame</key>
+								<string>{{0, 0}, {369, 96}}</string>
+								<key>ClassesTreeTableConfiguration</key>
+								<array>
+									<string>PBXClassNameColumnIdentifier</string>
+									<real>208</real>
+									<string>PBXClassBookColumnIdentifier</string>
+									<real>22</real>
+								</array>
+								<key>Frame</key>
+								<string>{{0, 0}, {616, 353}}</string>
+								<key>MembersFrame</key>
+								<string>{{0, 105}, {369, 395}}</string>
+								<key>MembersTreeTableConfiguration</key>
+								<array>
+									<string>PBXMemberTypeIconColumnIdentifier</string>
+									<real>22</real>
+									<string>PBXMemberNameColumnIdentifier</string>
+									<real>216</real>
+									<string>PBXMemberTypeColumnIdentifier</string>
+									<real>94</real>
+									<string>PBXMemberBookColumnIdentifier</string>
+									<real>22</real>
+								</array>
+								<key>PBXModuleWindowStatusBarHidden2</key>
+								<integer>1</integer>
+								<key>RubberWindowFrame</key>
+								<string>597 125 616 374 0 0 1280 1002 </string>
+							</dict>
+							<key>Module</key>
+							<string>PBXClassBrowserModule</string>
+							<key>Proportion</key>
+							<string>354pt</string>
+						</dict>
+					</array>
+					<key>Proportion</key>
+					<string>354pt</string>
+				</dict>
+			</array>
+			<key>Name</key>
+			<string>Class Browser</string>
+			<key>ServiceClasses</key>
+			<array>
+				<string>PBXClassBrowserModule</string>
+			</array>
+			<key>StatusbarIsVisible</key>
+			<integer>0</integer>
+			<key>TableOfContents</key>
+			<array>
+				<string>1C78EABA065D492600B07095</string>
+				<string>1C78EABB065D492600B07095</string>
+				<string>1CA6456E063B45B4001379D8</string>
+			</array>
+			<key>ToolbarConfiguration</key>
+			<string>xcode.toolbar.config.classbrowser</string>
+			<key>WindowString</key>
+			<string>597 125 616 374 0 0 1280 1002 </string>
+		</dict>
+	</array>
+</dict>
+</plist>
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaClasses/Colonet.class
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaClasses/Colonet.class
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaClasses/Colonet.class	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaClasses/Colonet.class	(revision 62)

Property changes on: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaClasses/Colonet.class
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/Colonet.hmap
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/Colonet.hmap
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/Colonet.hmap	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/Colonet.hmap	(revision 62)

Property changes on: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/Colonet.hmap
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaFileList
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaFileList	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.build/Colonet.build/JavaFileList	(revision 62)
@@ -0,0 +1,2 @@
+"Colonet.java"
+"ColonetServerInterface.java"
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.jar
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.jar	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.jar	(revision 62)

Property changes on: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet	(revision 62)
@@ -0,0 +1 @@
+link /Users/gmtress/Documents/Colony/roboclub_repository/colony/trunk/code/projects/colonet/ColonetGUI/build/Colonet.jar
\ No newline at end of file

Property changes on: branches/charge_board/code/projects/colonet/ColonetGUI/build/Colonet
___________________________________________________________________
Added: svn:special
## -0,0 +1 ##
+*
\ No newline at end of property
Index: branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.java
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.java	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/Colonet.java	(revision 62)
@@ -0,0 +1,778 @@
+//
+//  Colonet.java
+//
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.*;
+import java.awt.event.*;
+import java.net.*;
+import java.io.*;
+import java.util.Random;
+import java.applet.*;
+
+public class Colonet extends JApplet implements ActionListener, MouseListener, Runnable {
+
+	final int CANVAS_SIZE = 500;  //don't make this too large, or the applet will be slow.
+	final int BUFFER = 50;
+	final int RADIUS = 30;
+
+	// Connection
+	JTextField txtHost;				
+	JTextField txtPort;				
+	JButton btnConnect;	
+	JButton btnGraph;
+	JLabel lblConnectionStatus;
+	JTextArea txtInput;
+	JTextArea txtInfo; 
+	JPanel panelConnect;
+	JPanel panelServerInterface;
+	
+	// Stats
+	JLabel lblBattery;
+	JLabel lblTokenPasses;
+	JLabel lblHastToken;
+	JPanel panelStats;
+	
+	// South
+	JPanel panelSouth;
+	JTextArea log;
+	JScrollPane spLog;
+	
+	// Control
+	JPanel panelControl;
+	JTabbedPane tabPaneControl;
+	JPanel panelRobotControl;
+	JPanel panelRobotDirection;
+	JPanel panelRobotCommands;
+	JButton btnF, btnB, btnL, btnR, btnActivate;
+	
+	// Task Manager
+	JPanel panelTaskManager;
+	JScrollPane spTaskManager;
+	JPanel panelTaskManagerControls;
+	JPanel panelTaskManagerControlsPriority;
+	DefaultListModel taskListModel;
+	JList taskList;
+	JButton btnAddTask;
+	JButton btnRemoveTask;
+	JButton btnMoveTaskUp;
+	JButton btnMoveTaskDown;
+	
+	// Graphics
+	JPanel panel;
+	GraphicsConfiguration gc;
+	volatile BufferedImage image;
+	volatile Graphics2D canvas;
+	int cx, cy;
+	
+	Socket socket;					
+	OutputStreamWriter out;			//TODO: add a BufferedWriter
+	DataListener datalistener;  
+	
+	Font botFont;
+	Random random = new Random();
+	volatile int tokenLoc;  //the token is currently here
+	volatile int numBots;
+	volatile int selectedBot;  //the user has selected this bot
+	volatile Rectangle[] botRect;  //contains boundary shapes around bots for click detection
+	
+	Thread drawThread;
+	SelectionIndicator indicator;
+	PacketMonitor packetMonitor;
+	ColonetServerInterface csi;
+
+	
+	public void init () {
+		// set the default look and feel
+        String laf = UIManager.getSystemLookAndFeelClassName();
+        try {
+            UIManager.setLookAndFeel(laf);
+        } catch (UnsupportedLookAndFeelException exc) {
+            System.err.println ("Warning: UnsupportedLookAndFeel: " + laf);
+        } catch (Exception exc) {
+            System.err.println ("Error loading " + laf + ": " + exc);
+        }
+		// We should invoke and wait to avoid browser display difficulties
+		Runnable r = new Runnable() {
+			public void run() {
+				createAndShowGUI();
+			}
+		};
+		try {
+			SwingUtilities.invokeAndWait(r);
+		} catch (InterruptedException e) {
+			//Not really sure why we would be in this situation
+			System.out.println(e);
+		} catch (java.lang.reflect.InvocationTargetException e) {
+			//This should never happen. Seriously.
+			System.out.println(e);
+		}
+	}
+	
+	public void destroy () {
+		try { drawThread.interrupt(); } catch (Exception e) { }
+		try { indicator.interrupt(); } catch (Exception e) { }
+		try { packetMonitor.interrupt(); } catch (Exception e) { }
+	}
+
+	private synchronized void createAndShowGUI () {
+		// init graphical elements
+		panel = new JPanel(false);  //set automatic double-buffering to false. we are doing it manually.
+		
+		// Connection area
+		txtInput = new JTextArea("- 9 3 - 1\n- - - 5 -\n4 - - - 2\n- - - - -\n1 - - 3 -");
+		txtInput.setBorder(BorderFactory.createTitledBorder("Input Matrix"));
+		txtInfo = new JTextArea();
+		txtInfo.setBorder(BorderFactory.createTitledBorder("Info"));
+		txtInfo.setEditable(false);
+		btnGraph = new JButton("Run");
+		txtHost = new JTextField("roboclub1.frc.ri.cmu.edu");
+		txtHost.setBorder(BorderFactory.createTitledBorder("Host"));
+		txtPort = new JTextField("10123");
+		txtPort.setBorder(BorderFactory.createTitledBorder("Port"));
+		btnConnect = new JButton("Connect");
+		lblConnectionStatus = new JLabel("Status: Offline");
+		panelConnect = new JPanel();
+		panelConnect.setLayout(new GridLayout(6,1));
+		panelConnect.add(lblConnectionStatus);
+		panelConnect.add(txtHost);
+		panelConnect.add(txtPort);
+		panelConnect.add(btnConnect);
+		panelConnect.add(txtInfo);
+		panelConnect.add(btnGraph);
+		panelServerInterface = new JPanel();
+		panelServerInterface.setLayout(new GridLayout(2,1));
+		panelServerInterface.add(panelConnect);
+		panelServerInterface.add(txtInput);
+				
+		// Status Elements
+		lblTokenPasses = new JLabel();
+		lblBattery = new JLabel("???");
+		panelStats = new JPanel();
+		panelStats.setLayout(new GridLayout(4,2));
+		panelStats.add(new JLabel("Token Passes / sec          "));
+		panelStats.add(lblTokenPasses);
+		panelStats.add(new JLabel("Battery     "));
+		panelStats.add(lblBattery);
+		panelStats.add(new JLabel("Token Passes / sec     "));
+		panelStats.add(lblTokenPasses);
+		
+		//TODO: add panelStats somewhere!
+
+		// Robot direction panel
+		panelRobotDirection = new JPanel();
+		btnF = new JButton("^");
+		btnB = new JButton("v");
+		btnL = new JButton("<");
+		btnR = new JButton(">");
+		btnActivate = new JButton("o");
+		panelRobotDirection = new JPanel();
+		panelRobotDirection.setLayout(new GridLayout(3,3));
+		panelRobotDirection.add(new JLabel(""));
+		panelRobotDirection.add(btnF);
+		panelRobotDirection.add(new JLabel(""));
+		panelRobotDirection.add(btnL);
+		panelRobotDirection.add(btnActivate);
+		panelRobotDirection.add(btnR);
+		panelRobotDirection.add(new JLabel(""));
+		panelRobotDirection.add(btnB);
+		panelRobotDirection.add(new JLabel(""));
+		
+		// Robot Control and Commands
+		panelRobotCommands = new JPanel();
+		panelRobotCommands.setLayout(new FlowLayout());
+		panelRobotCommands.add(new JLabel("Commands go here"));
+		panelRobotControl = new JPanel();
+		panelRobotControl.setLayout(new GridLayout(2,1));
+		panelRobotControl.add(panelRobotDirection);
+		panelRobotControl.add(panelRobotCommands);
+		
+		// Task Manager
+		panelTaskManager = new JPanel();
+		panelTaskManager.setLayout(new BorderLayout());
+		taskListModel = new DefaultListModel();
+		taskListModel.addElement("Map the Environment");
+		taskListModel.addElement("Clean Up Chemical Spill");
+		taskListModel.addElement("Grow Plants");
+		taskListModel.addElement("Save the Cheerleader");
+		taskListModel.addElement("Save the World");
+		taskList = new JList(taskListModel);
+		taskList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		taskList.setSelectedIndex(0);
+		spTaskManager = new JScrollPane(taskList);
+		panelTaskManagerControls = new JPanel();
+		panelTaskManagerControls.setLayout(new GridLayout(1,3));
+		panelTaskManagerControlsPriority = new JPanel();
+		panelTaskManagerControlsPriority.setLayout(new GridLayout(1,2));
+		btnAddTask = new JButton("Add...");
+		btnRemoveTask = new JButton("Remove");
+		btnMoveTaskUp = new JButton("^");
+		btnMoveTaskDown = new JButton("v");
+		panelTaskManagerControlsPriority.add(btnMoveTaskUp);
+		panelTaskManagerControlsPriority.add(btnMoveTaskDown);
+		panelTaskManagerControls.add(btnAddTask);
+		panelTaskManagerControls.add(btnRemoveTask);
+		panelTaskManagerControls.add(panelTaskManagerControlsPriority);
+		panelTaskManager.add(spTaskManager, BorderLayout.CENTER);
+		panelTaskManager.add(panelTaskManagerControls, BorderLayout.SOUTH);
+		panelTaskManager.add(new JLabel("Current Task Queue"), BorderLayout.NORTH);
+		
+		// Message log
+		log = new JTextArea();
+		spLog = new JScrollPane(log,
+			ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, 
+			ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		spLog.setBorder(BorderFactory.createTitledBorder("Log"));
+		spLog.setPreferredSize(new Dimension(0, 150));
+		log.setEditable(false);
+		
+		// Main control mechanism
+		panelControl = new JPanel();
+		panelControl.setLayout(new GridLayout(1,1));
+		tabPaneControl = new JTabbedPane(JTabbedPane.TOP);
+		tabPaneControl.setPreferredSize(new Dimension(300, 0));
+		tabPaneControl.addTab("Connection", panelServerInterface);
+		tabPaneControl.addTab("Robots", panelRobotControl);
+		tabPaneControl.addTab("Tasks", panelTaskManager);
+		panelControl.add(tabPaneControl);
+		
+		// Set up elements in the south
+		panelSouth = new JPanel();
+		panelSouth.setLayout(new GridLayout(1,2));
+		panelSouth.add(spLog);
+
+		this.getContentPane().setLayout(new BorderLayout());
+		this.getContentPane().add(panel, BorderLayout.CENTER);
+		this.getContentPane().add(panelSouth, BorderLayout.SOUTH);
+		this.getContentPane().add(panelControl, BorderLayout.EAST);
+		this.setVisible(true);
+		
+		btnAddTask.addActionListener(this);
+		btnRemoveTask.addActionListener(this);
+		btnMoveTaskUp.addActionListener(this);
+		btnMoveTaskDown.addActionListener(this);
+		btnGraph.addActionListener(this);
+		btnConnect.addActionListener(this);
+		panel.addMouseListener(this);
+		
+		
+		// Get the graphics configuration of the screen to create a buffer
+		gc = GraphicsEnvironment.getLocalGraphicsEnvironment()
+			.getDefaultScreenDevice().getDefaultConfiguration();
+		image = gc.createCompatibleImage(CANVAS_SIZE,CANVAS_SIZE);
+		canvas = image.createGraphics();
+		canvas.setStroke(new BasicStroke(2));  //set pen width
+		
+		// Calculate center of canvas
+		cx = image.getWidth() / 2;
+		cy = image.getHeight() / 2;
+		
+		botFont = new Font("Arial", Font.PLAIN, 30);
+		tokenLoc = 0;
+		numBots = 0;
+		selectedBot = 0;
+		
+		// Set up dependent threads
+		indicator = new SelectionIndicator(canvas);
+		indicator.setRadius(RADIUS+3, 15);  //a tad more than the bot radius
+		packetMonitor = new PacketMonitor();
+		datalistener = new DataListener();
+		
+		csi = new ColonetServerInterface(log);
+	
+	}
+	
+	public synchronized void paint (Graphics g) {
+		/*	First, redraw the graphical components in the applet. 
+			This paint method overrides the built-in paint of the 
+			JApplet, and we don't want to deal with redrawing the
+			components manually. Fuck that shit. */
+		super.paint(g);
+		
+		// Place the buffered image on the screen, inside the panel
+		panel.getGraphics().drawImage(image, 0, 0, Color.WHITE, this);
+		
+	}
+	
+	public synchronized void update (Graphics g) {
+		paint(g);
+	}
+	
+	public void actionPerformed (ActionEvent e) {
+		Object source = e.getSource();
+		if (source == btnGraph) {
+			btnGraph.setEnabled(false);
+			lblConnectionStatus.setText("Simulating");
+			
+			//Start dependent threads
+			drawThread = new Thread(this, "drawThread");
+			drawThread.start();
+			indicator.start();
+			packetMonitor.start();
+		} else if (source == btnConnect) {
+			doSocket();
+		} else if (source == btnRemoveTask) {
+			try {
+				taskListModel.remove(taskList.getSelectedIndex());
+			} catch (ArrayIndexOutOfBoundsException ex) {
+			}
+		}
+	}
+	
+	private void randomize () {
+		Random r = new Random();
+		StringBuilder s = new StringBuilder();
+		
+		int count = r.nextInt(8) + 1;
+		for (int i = 0; i < count; i++) {
+			for (int j = 0; j < count; j++) {
+				if (r.nextBoolean())	
+					s.append("" + (r.nextInt(16) + 1));
+				else 
+					s.append("-");
+				if (j != count-1)
+					s.append(" ");
+			}
+			if (i != count-1) s.append("\n");
+		}
+		
+		txtInput.setText(s.toString());
+	}
+	
+	private void doSocket () {
+		csi.connect(txtHost.getText(), txtPort.getText());
+	}
+	
+	public void drawRobot (int id, int x, int y) {
+		//save the bot in memory, so we can tell if we click on it later
+		botRect[id] = new Rectangle(x-RADIUS, y-RADIUS, 2*RADIUS, 2*RADIUS);
+	
+		//draw the bot on the canvas
+		canvas.setColor(Color.BLACK);
+		canvas.drawOval(x-RADIUS, y-RADIUS, RADIUS*2, RADIUS*2);
+		
+		//draw the label
+		canvas.setFont(botFont);
+		canvas.drawString("" + id, x-10, y+10);
+	}
+	
+	public void drawConnection (int start, int end, int radius, Color color) {
+		final int ARROW_LENGTH = 18;
+	
+		double angle = 2.0 * Math.PI / numBots;
+		int startx, starty, endx, endy;
+		startx = cx - (int)(radius * Math.cos(start * angle));
+		starty = cy - (int)(radius * Math.sin(start * angle));
+		endx = cx - (int)(radius * Math.cos(end * angle));
+		endy = cy - (int)(radius * Math.sin(end * angle));
+		canvas.setColor(color);
+		canvas.drawLine(startx, starty, endx, endy);
+		
+		//create arrow
+		if (color.equals(Color.BLACK)) return;
+		int big_dy = starty - endy;
+		int big_dx = endx - startx;
+		double theta = 0;
+		if (big_dx == 0 && starty > endy) //pointing up
+			theta = Math.PI/2;
+		else if (big_dx == 0 && starty < endy) //pointing down 
+			theta = 3*Math.PI/2;
+		else if (big_dy == 0 && startx > endx) //pointing left
+			theta = Math.PI;
+		else if (big_dy == 0 && startx < endx) //pointing right
+			theta = 0;
+		else
+			theta = Math.atan(1.0 * big_dy / big_dx);
+		
+		//create ploygon
+		Polygon poly = new Polygon();
+		int dx_arrow = Math.abs((int)(ARROW_LENGTH * Math.cos(theta)));
+		int dy_arrow = Math.abs((int)(ARROW_LENGTH * Math.sin(theta)));
+		int dy_half = (int)(ARROW_LENGTH/2 * Math.cos(theta));
+		int dx_half = (int)(ARROW_LENGTH/2 * Math.sin(theta));
+		int rx = (big_dx > 0) ? endx - dx_arrow : endx + dx_arrow;
+		int ry = (big_dy > 0) ? endy + dy_arrow : endy - dy_arrow;
+		poly.addPoint(endx, endy);
+		poly.addPoint(rx - dx_half, ry - dy_half);
+		poly.addPoint(rx + dx_half, ry + dy_half);
+		canvas.fillPolygon(poly);
+	}
+	
+	public void run () {
+		while (true) {
+			step();
+			repaint();
+			try { 
+				Thread.sleep(90);
+			} catch (InterruptedException e) {
+				return;
+			}
+		}
+	}
+	
+	public void step () {
+		final int DIAMETER = image.getWidth() - 2*BUFFER;
+		final int BIGRADIUS = DIAMETER / 2;
+		final int TOKENRADIUS = 40;
+		boolean valid;
+	
+		// clear image
+		canvas.setColor(Color.WHITE);
+		canvas.fillRect(0, 0, image.getWidth(), image.getHeight());
+		
+		// parse the matrix, to see what robots exist
+		String [] rows = txtInput.getText().split("\n");
+		numBots = rows.length;
+		String [][] entries = new String[numBots][numBots];
+		valid = true;
+		for (int i = 0; i < numBots; i++) {
+			entries[i] = rows[i].split(" ");
+			if (entries[i].length != rows.length) valid = false;
+		}
+		
+		if (valid) {
+			this.showStatus("Running");
+			
+			// draw robots and find which one is seleced
+			double angle = 2.0 * Math.PI / numBots;
+			canvas.setColor(Color.BLACK);
+			botRect = new Rectangle[numBots];
+			int x, y;
+			if (selectedBot >= numBots) selectedBot = 0;
+			for (int i = 0; i < numBots; i++) {
+				x = cx - (int)(BIGRADIUS * Math.cos(i * angle));
+				y = cy - (int)(BIGRADIUS * Math.sin(i * angle));
+				drawRobot(i, x, y);
+				if (i == selectedBot) indicator.setCenter(x, y);
+			}
+			
+			// draw token marker
+			int tokenx, tokeny;
+			int tokenNum = tokenLoc;
+			tokenx = cx - (int)(BIGRADIUS * Math.cos(tokenNum * angle));
+			tokeny = cy - (int)(BIGRADIUS * Math.sin(tokenNum * angle));
+			canvas.setColor(Color.RED);
+			canvas.drawOval(tokenx-TOKENRADIUS, tokeny-TOKENRADIUS, 2*TOKENRADIUS, 2*TOKENRADIUS);
+			
+			// create an inner circle along which the connections are made.
+			// let the diameter of this circle be 2*RADIUS less than the outerDiameter.
+			// see what connections exist
+			for (int row = 0; row < numBots; row++) {
+				for(int col = 0; col < numBots; col++) {
+					if (!entries[row][col].equals("-") && entries[col][row].equals("-") && row != col) {
+						//TODO: Make a standard gray
+						drawConnection(row, col, BIGRADIUS-RADIUS, new Color(200,200,200));
+					} else if (!entries[row][col].equals("-") && ! entries[col][row].equals("-") && row != col) {
+						drawConnection(row, col, BIGRADIUS-RADIUS, Color.BLACK);
+					}
+				}
+			}
+			
+			// draw the selection indicator
+			indicator.draw();
+			
+		} else {// if matrix is not valid
+			this.showStatus("Error: Invalid matrix");
+		}
+	
+	}
+	
+	/*	At this point, moveToken is only called by the simulator.
+	*	In the future, it can be rewritten to account for non-standard
+	*	token passing or deleted if the information can be retrieved
+	*	directly from the Colonet server instead.
+	*/
+	public void moveToken () {
+		try {
+			tokenLoc = (tokenLoc+1)%numBots;
+		} catch (ArithmeticException e) {  // in case numRobots is zero
+		}
+		
+		packetMonitor.addTokenPass();
+	}
+	
+	//
+	// MouseEvent methods
+	//
+	public void mouseExited(MouseEvent e) {}
+	public void mouseEntered(MouseEvent e) {}
+	public void mouseReleased(MouseEvent e) {}
+	public void mouseClicked(MouseEvent e) {}
+	public void mousePressed(MouseEvent e) {
+		try {
+			for (int i = 0; i < numBots; i++) {
+				if (botRect[i].contains(e.getPoint()))
+					selectedBot = i;
+			}
+		} catch (Exception ex) {
+			System.out.println(e);
+		}
+	
+	}
+	
+	/*
+	*	SelectionIndicator thread.
+	*	Graphical representation of the selection marker
+	*
+	*	step() and draw() are synchronized methods. step() is private and 
+	*	used to update the position of the crosshairs. draw() is called 
+	*	externally and should only run if all calculations in step() have
+	*	been completed.
+	*/
+	private class SelectionIndicator extends Thread {
+	
+		final int INDICATOR_DELAY = 100;
+		final double DTHETA = 0.3;    //larger values make the marker rotate faster
+		Graphics2D g;   //canvas to draw on
+		boolean running;
+		
+		int sx, sy;		//center
+		int r, dr;		//radius and width of marker
+		double theta;   //current angle
+		
+		volatile Polygon poly1, poly2, poly3, poly4;
+		
+		int px1, py1;
+		int rx1, ry1;
+		int px2, py2;
+		int rx2, ry2;
+		int px3, py3;
+		int rx3, ry3;
+		int px4, py4;
+		int rx4, ry4;
+		
+		int steps;
+	
+		public SelectionIndicator (Graphics2D g) {
+			super("SelectionIndicator");
+			this.g = g;
+			running = false;
+			steps = 0;
+			
+			theta = 0;
+			rx1 = 0; ry1 = 0;
+			px1 = 0; py1 = 0;
+			rx2 = 0; ry2 = 0;
+			px2 = 0; py2 = 0;
+			rx3 = 0; ry3 = 0;
+			px3 = 0; py3 = 0;
+			rx4 = 0; ry4 = 0;
+			px4 = 0; py4 = 0;
+		}
+		
+		public synchronized void setCenter (int sx, int sy) {
+			if (sx == this.sx && sy == this.sy) return;
+			this.sx = sx;
+			this.sy = sy;
+			steps = 0;
+		}
+		
+		public synchronized void setRadius (int r, int dr) {
+			this.r = r;
+			this.dr = dr;
+			steps = 0;
+		}
+		
+		public void run () {
+			running = true;
+			while (running) {
+				step();
+				try { 
+					Thread.sleep(INDICATOR_DELAY);
+				} catch (InterruptedException e) {
+					running = false;
+					return;
+				}
+			}
+		}
+		
+		private synchronized void step () {
+			Polygon poly1_new = new Polygon();
+			Polygon poly2_new = new Polygon();
+			Polygon poly3_new = new Polygon();
+			Polygon poly4_new = new Polygon();
+		
+			//the step
+			theta = (theta + DTHETA/Math.PI) % (Math.PI);
+			
+			//the calculation
+			//let p be the point of the pointy thing toward the center
+			//let r be the point at the opposite side
+			
+			//recalculate radius, if it will look cool, lolz
+			int newr = r;
+			if (steps < 100)
+        newr = (int)( r + 200/(steps+1) );
+			
+			//precompute values for dx and dy
+			int dx_inner = (int)(newr * Math.cos(theta));
+			int dy_inner = (int)(newr * Math.sin(theta));
+			int dx_outer = (int)((newr+dr) * Math.cos(theta));
+			int dy_outer = (int)((newr+dr) * Math.sin(theta));
+			
+			//calculate polygon constants
+			int dy_poly = (int)(dr/2 * Math.cos(theta));
+			int dx_poly = (int)(dr/2 * Math.sin(theta));
+			
+			//determine critical points
+			//kansas city shuffle!
+			px1 = sx + dx_inner;
+			py1 = sy - dy_inner;
+			rx1 = sx + dx_outer;
+			ry1 = sy - dy_outer;
+			px2 = sx - dx_inner;
+			py2 = sy + dy_inner;
+			rx2 = sx - dx_outer;
+			ry2 = sy + dy_outer;
+			px3 = sx - dy_inner;
+			py3 = sy - dx_inner;
+			rx3 = sx - dy_outer;
+			ry3 = sy - dx_outer;
+			px4 = sx + dy_inner;
+			py4 = sy + dx_inner;
+			rx4 = sx + dy_outer;
+			ry4 = sy + dx_outer;
+			
+			//create polygons
+			poly1_new.addPoint(px1, py1);
+			poly1_new.addPoint(rx1+dx_poly, ry1+dy_poly);
+			poly1_new.addPoint(rx1-dx_poly, ry1-dy_poly);
+			poly2_new.addPoint(px2, py2);
+			poly2_new.addPoint(rx2+dx_poly, ry2+dy_poly);
+			poly2_new.addPoint(rx2-dx_poly, ry2-dy_poly);
+			poly3_new.addPoint(px3, py3);
+			poly3_new.addPoint(rx3-dy_poly, ry3+dx_poly);
+			poly3_new.addPoint(rx3+dy_poly, ry3-dx_poly);
+			poly4_new.addPoint(px4, py4);
+			poly4_new.addPoint(rx4-dy_poly, ry4+dx_poly);
+			poly4_new.addPoint(rx4+dy_poly, ry4-dx_poly);
+			
+			//reassign updated polygons
+			poly1 = poly1_new;
+			poly2 = poly2_new;
+			poly3 = poly3_new;
+			poly4 = poly4_new;
+		
+			if (steps < 300) steps++;
+		}
+		
+		public synchronized void draw () {
+			if (!running) return;
+			g.setColor(Color.GRAY);
+			//draw polygons
+			g.fillPolygon(poly1);
+			g.fillPolygon(poly2);
+			g.fillPolygon(poly3);
+			g.fillPolygon(poly4);
+		}
+	
+	}
+	
+	/*
+	*	Simulator thread.
+	*
+	*/
+	private class Simulator extends Thread {
+		final int SIMULATOR_DELAY = 300;
+		boolean running;
+	
+		public Simulator () {
+			super("Simulator");
+			running = false;
+		}
+		
+		public void run () {
+			running = true;
+			while (running) {
+				step();
+				try { 
+					Thread.sleep(SIMULATOR_DELAY);
+				} catch (InterruptedException e) {
+					running = false;
+					return; 
+				}
+			}
+		}
+		
+		private void step () {
+			// simulate passing the token
+			moveToken();
+		}
+	
+	}
+	
+	/*
+	*	PacketMonitor thread.
+	*
+	*	Currently, this counts the rate of token passes but will eventually 
+	*	be modified to keep more important statistics.
+	*/
+	private class PacketMonitor extends Thread {
+		final int PACKETMONITOR_DELAY = 1000;
+	
+		boolean running;
+		int tokenPasses;
+	
+		public PacketMonitor () {
+			super("PacketMonitor");
+			running = false;
+			tokenPasses = 0;
+		}
+		
+		public void run () {
+			running = true;
+			while (running) {
+				displayTokenPasses();
+				try { 
+					Thread.sleep(PACKETMONITOR_DELAY);
+				} catch (InterruptedException e) { 
+					running = false;
+					return; 
+				}
+			}
+		}
+		
+		public synchronized void addTokenPass () {
+			tokenPasses++;
+		}
+		
+		public synchronized void displayTokenPasses () {
+			lblTokenPasses.setText("" + tokenPasses);
+			tokenPasses = 0;
+		}
+	
+	}
+	
+	/*
+	*	DataListener thread.
+	*
+	*/
+	class DataListener extends Thread {
+		final int DATALISTENER_DELAY = 666;
+		BufferedReader reader;
+		
+		public DataListener () {
+			super("Colonet DataListener");
+		}
+		
+		public void run () {
+			String line;
+			while (true) {
+				try {
+					if (csi == null) return;
+					line = csi.getLine();
+					if (line != null) {
+						csi.msg("Incoming data: [" + line + "]");
+						//TODO: parse incoming data here
+					}
+					Thread.sleep(DATALISTENER_DELAY);
+				} catch (InterruptedException e) {
+					return;
+				} 
+			}
+		}
+
+	}
+
+}
Index: branches/charge_board/code/projects/colonet/ColonetGUI/ColonetServerInterface.java
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/ColonetServerInterface.java	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/ColonetServerInterface.java	(revision 62)
@@ -0,0 +1,293 @@
+/*
+*	ColonetServerInterface.java
+*	Gregory Tress
+*/
+
+import java.net.*;
+import java.io.*;
+import javax.swing.JOptionPane;
+import javax.swing.JTextArea;
+
+public class ColonetServerInterface 
+{
+
+	/* STATIC FIELDS
+	 * Eugene Marinelli, Fan
+	 * 10/27/06
+	 *
+	 * Colonet Definitions - common definitions and structs used in all colonet 
+	 * applications
+
+  COMMAND PACKET STRUCTURE
+	1:  SEND_TO_ROBOT
+	2:  # of robot, or GLOBAL_DEST
+	3:  COLONET_COMMMAND
+	4:  message code (i.e. ORB_SET)
+	5:  any data, as many that fit in the packet
+	
+	REQUEST PACKET STRUCTURE
+	1:  REQUEST_FROM_ROBOT
+	2:  # of robot
+	3:  COLONET_REQUEST
+	4:  ???
+  
+  9/12/07 New server interface structure
+    Client will no longer send full robot packets to the server.
+    Commands will be defined as necessary.
+	*/
+	
+	public static final String SEND_TO_ROBOT = "0";
+	public static final String REQUEST_FROM_ROBOT = "1";
+	public static final String RESPONSE_TO_CLIENT_REQUEST = "2";
+	public static final String GLOBAL_DEST = "200";
+
+	//Message types
+	public static final String COLONET_COMMAND = "13"; //0x0D
+	public static final String COLONET_REQUEST = "14"; //0x0E
+	public static final String CORONET_RESPONSE = "15"; //0x0F
+	
+	//Use BATTERY to request battery level
+	public static final String BATTERY = "56"; //0x38
+	
+	//MOTORS
+	public static final String MOTORS_INIT = "23"; //0x17
+	public static final String MOTOR1_SET = "24"; //0x18
+	public static final String MOTOR2_SET = "25"; //0x19
+	public static final String MOTORS_OFF = "26"; //0x1A
+	public static final String MOVE = "27"; //0x1B
+	public static final String MOVE_AVOID = "28"; //0x1C
+	
+	//BUZZER
+	public static final String BUZZER_INIT = "0"; //0x00
+	public static final String BUZZER_SET_VAL = "1"; //0x01
+	public static final String BUZZER_SET_FREQ = "2"; //0x02
+	public static final String BUZZER_CHIRP = "3"; //0x03
+	public static final String BUZZER_OFF = "4"; //0x04
+
+	//ORB
+	public static final String ORB_INIT = "12"; //0x0C
+	public static final String ORB_SET = "13"; //0x0D
+	public static final String ORB_SET_COLOR = "14"; //0x0E
+	public static final String ORB_DISABLE = "15"; //0x0F
+	public static final String ORB_ENABLE = "16"; //0x10
+	public static final String ORB_SET_DIO = "17"; //0x11
+	public static final String LED_INIT = "18"; //0x12
+	public static final String LED_USER = "19"; //0x13
+	public static final String ORB_SET_NUM_NS = "20"; //0x14
+	public static final String ORB_SET_NUM = "21"; //0x15
+	public static final String ORB_SEND = "22"; //0x16
+
+	
+	Socket socket;
+	OutputStreamWriter out;
+	BufferedReader reader;
+	JTextArea log;
+	
+	/*
+	*	FUNCTION IMPLEMENTATIONS
+	*/
+
+	public ColonetServerInterface (JTextArea log) {
+		this.log = log;
+	}
+
+	public Socket getSocket () {
+		return socket;
+	}
+	
+	public OutputStreamWriter getOutputStreamWriter () {
+		return out;
+	}
+	
+	public BufferedReader getBufferedReader () {
+		return reader;
+	}
+	
+	public boolean isReady () {
+		if (socket == null || out == null || reader == null) return false;
+		if (!socket.isConnected() || socket.isClosed() || socket.isInputShutdown() || socket.isOutputShutdown()) return false;
+		return true;
+	}
+	
+	public boolean isInputReady () {
+		try {
+			if (reader.ready()) return true;
+		} catch (Exception e) {
+			return false;
+		}
+		return false;
+	}
+	
+	public String getLine () {
+		if (this.isReady()) {
+			try {
+				return reader.readLine();
+			} catch (IOException e) {
+				return null;
+			}
+		} else {
+		  return null;
+		}
+	}
+  
+	/**
+	 * Create socket connection to Colonet server.
+	 * If successful, start threads for loading the webcam image and listening for incoming data.
+	 */
+	public void connect (String strHost, String strPort) {
+		//make sure hostname and port are valid
+		if (strHost.equals("") || strPort.equals("")) {
+			err("Please enter a hostname and port.");
+			return;
+		}
+		int port = 0;
+		try {
+			port = Integer.parseInt(strPort);
+		} catch (Exception e) {
+			err("Invalid port");
+			return;
+		}
+		
+		//make sure we aren't already connected. if so, disconnect first.
+		if (socket != null && socket.isConnected()) {
+			try {
+				out.close();
+				socket.close();
+			} catch (IOException e) {
+				log.append("Error closing socket. Reconnecting...\n");
+			}
+		}
+		
+		try {
+			log.append("Attempting to connect to " + strHost + "\n");
+			socket = new Socket(strHost, port);
+		} catch (UnknownHostException e) {
+			log.append("Unknown host exception.\n");
+			err("Unknown Host Exception");
+			return;
+		} catch (IOException e) {
+			log.append("IO Exception.\n");
+			err("IO Exception");
+			return;
+		} catch (java.security.AccessControlException e) {
+			log.append("Access Control Exception.\n");
+			err("Permission denied by java.security.AccessControlException.\n\nYou may only connect to the server from which this applet was loaded.");
+			return;
+		}
+		if (socket == null || !socket.isConnected()) {
+			log.append("Connection is not ready. Try connecting again.");
+			return;
+		}
+		log.append("Connected to " + strPort + " on port " + port + "\n");
+		try {
+			out = new OutputStreamWriter(socket.getOutputStream());
+			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+		} catch (IOException e) {
+			warn("Could not get transfer streams from socket connection.");
+		}
+	
+	}
+	
+	/**
+	 * Sends a command code to the colonet server so that it can be redirected to one or more robots.
+	 * Assembles the given string into a packet and sends a full command string to the colonet server.
+	 * The string sent from here should be the correct form for sending directly to the robot.
+	 */
+	public void sendData (String s, String robotNumber) {
+		//make sure we can send
+		if (!this.isReady()) {
+			warn("There was a problem with the connection. Data could not be sent.\nMake sure you are connected and try sending the command again.");
+			return;
+		}
+	
+		//create packet
+		String packet;
+		packet = ColonetServerInterface.SEND_TO_ROBOT;
+		packet += " " + robotNumber;
+		packet += " " + ColonetServerInterface.COLONET_COMMAND;
+		packet += " " + s;  //add  the command code here
+		packet += "\n";
+		
+		//send packet
+		try {
+      log.append("Sending: " + packet);
+			out.write(packet);
+			out.flush();
+		} catch (IOException e) {
+			log.append("Could not send data.\n");
+    }
+	}
+	
+	/**
+	 * Sends a request to the colonet server so that it can be redirected to one or more robots.
+	 * Assembles the given string into a packet and sends a full command string to the colonet server.
+	 * The string sent from here should be the correct form for sending directly to the robot.
+	 * @param s The request code to be sent
+	 * @see #sendData(String)
+	 */
+	public void sendRequest (String s, String robotNumber) {
+		//make sure we can send
+		if (!this.isReady()) {
+			warn("There was a problem with the connection. Data could not be sent.\nMake sure you are connected and try sending the command again.");
+			return;
+		}
+	
+		//get robot code to send to.
+		/*
+		if (cmbRobotNumber.getSelectedIndex() == 0)
+			robotNumber = ColonetServerInterface.GLOBAL_DEST;
+		else
+			robotNumber = ( cmbRobotNumber.getSelectedIndex() - 1 ) + "";
+		*/
+	
+		//create packet
+		String packet;
+		packet = ColonetServerInterface.REQUEST_FROM_ROBOT;
+		packet += " " + robotNumber;
+		packet += " " + ColonetServerInterface.COLONET_REQUEST;
+		packet += " " + s;  //add  the command code here
+		packet += "\n";
+		
+		//send packet
+		try {
+			Thread.sleep(200);  //paue to be safe
+			out.write(packet);
+			out.flush();
+			log.append("Sent: " + packet);
+		} catch (IOException e) {
+			log.append("Could not send data.\n");
+		} catch (InterruptedException e) {
+			log.append("Thread InterruptedException in sendData\n");
+		}
+		
+	}
+
+
+	
+	
+	/**
+	 * Display informational message box on the screen. Used for casual communicaton to the user.
+	 * @param text Text to display
+	 */
+	public void msg (String text) {
+		JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.INFORMATION_MESSAGE);
+	}
+	
+	/**
+	 * Display warning message box on the screen. Used for minor alerts or exceptions.
+	 * @param text Text to display
+	 */
+	public void warn (String text) {
+		JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.WARNING_MESSAGE);
+	}
+	
+	/**
+	 * Display error message box on the screen. Used for major errors or exceptions in the program.
+	 * @param text Text to display
+	 */
+	public void err (String text) {
+		JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.ERROR_MESSAGE);
+	}
+	
+
+}
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/ColonetGUI/index_colonet.html
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/index_colonet.html	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/index_colonet.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+	<title>Colony Control Applet - Carnegie Mellon Robotics Club</title>
+	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+	<link rel="stylesheet" type="text/css" href="colonetstyle.css" />
+</head>
+
+<body>
+
+<div class="top">
+	<h1>Colonet: Robot Graph</h1>
+	<p>Carnegie Mellon Robotics Club: Colony Project</p>
+	<img src="http://roboclub8.frc.ri.cmu.edu/mainwiki/roboclublogo.png" height="125px" width="110px" alt="RoboClub Logo" />
+</div>
+
+<div class="app">
+	<p>
+	<object
+		archive = "Colonet.jar"
+		type = "application/x-java-applet"
+		width = "800"
+		height = "700"
+		align = "bottom"
+		codebase = "http://roboclub1.frc.ri.cmu.edu/gui/" 
+		name = "Colonet"
+		title = "Colonet" >
+		<param name = "code" value = "Colonet.class" />
+	</object>
+	<br />
+	Requires Java 5.
+	<br />
+	<a href="Colonet.java">Source Code</a>
+	<br />
+	<br />
+	</p>
+</div>
+
+<div class="bottom">
+	<p><b>Colony Project Home page:</b><br />
+	<a href="http://www.robotcolony.org/">www.robotcolony.org</a></p>
+	
+	<p><b>Validator:</b><br />
+	<a href="http://validator.w3.org/check?uri=referer">
+	<img src="http://www.w3.org/Icons/valid-xhtml10-blue"
+		 alt="Valid XHTML 1.0 Transitional"
+		 height="31"
+		 width="88" 
+		 border="0"
+		 />
+	</a>
+	<a href="http://jigsaw.w3.org/css-validator/validator?uri=http://roboclub1.frc.ri.cmu.edu/ColonetGUI/colonetstyle.css">
+  	<img style="border:0;width:88px;height:31px"
+       src="http://www.w3.org/Icons/valid-css-blue" 
+       alt="Valid CSS!" />
+	</a><br />
+	</p>
+	
+</div>
+
+
+
+</body>
+</html>
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/ColonetGUI/copy.sh
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/copy.sh	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/copy.sh	(revision 62)
@@ -0,0 +1,3 @@
+#! /bin/bash
+
+sudo cp * /var/www/gui/
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/ColonetGUI/index_simple.html
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/index_simple.html	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/index_simple.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+	<title>Colony Control Applet - Carnegie Mellon Robotics Club</title>
+	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+	<link rel="stylesheet" type="text/css" href="colonetstyle.css" />
+</head>
+
+<body>
+
+<div class="top">
+	<h1>Colonet</h1>
+	<p>Carnegie Mellon Robotics Club: Colony Project</p>
+	<img src="http://roboclub8.frc.ri.cmu.edu/mainwiki/roboclublogo.png" height="125px" width="110px" />
+</div>
+
+<div class="app">
+	<p>
+	<object
+		classid = "java:SimpleColonet.class"
+		type = "application/x-java-applet"
+		width = "900"
+		height = "600"
+		align = "bottom"
+		codebase = "http://roboclub1.frc.ri.cmu.edu/gui/" 
+		name = "SimpleColonet"
+		title = "SimpleColonet" >
+		<param name = "code" value = "SimpleColonet.class" />
+	</object>
+	<br />
+	</p>
+</div>
+
+<div class="bottom">
+	<p><b>Colony Project Home page:</b><br />
+	<a href="http://www.robotcolony.org/">www.robotcolony.org</a></p>
+	
+	<p><b>Colonet Developers:</b><br />
+	Gregory Tress, Eugene Edward Marinelli III, Jason Knichel, Suresh Nidhiry</p>
+	
+	<p><b>Validator:</b><br />
+	<a href="http://validator.w3.org/check?uri=referer">
+	<img src="http://www.w3.org/Icons/valid-xhtml10-blue"
+		 alt="Valid XHTML 1.0 Transitional"
+		 height="31"
+		 width="88" 
+		 border="0"
+		 />
+	</a>
+	<a href="http://jigsaw.w3.org/css-validator/validator?uri=http://roboclub1.frc.ri.cmu.edu/ColonetGUI/colonetstyle.css">
+  	<img style="border:0;width:88px;height:31px"
+       src="http://www.w3.org/Icons/valid-css-blue" 
+       alt="Valid CSS!" />
+	</a><br />
+	</p>
+	
+</div>
+
+
+
+</body>
+</html>
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/ColonetGUI/BotGraph.java
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/BotGraph.java	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/BotGraph.java	(revision 62)
@@ -0,0 +1,800 @@
+/* 
+	BotGraph.java
+	Colony Project
+	Gregory Tress 
+*/
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.*;
+import java.awt.event.*;
+import java.net.*;
+import java.io.*;
+import java.util.Random;
+
+public class BotGraph extends JApplet implements ActionListener, MouseListener, Runnable
+{
+
+	final int CANVAS_SIZE = 550;  //don't make this too large, or the applet will be slow.
+	final int BUFFER = 50;
+	final int RADIUS = 30;
+
+	JTextField txtHost;				
+	JTextField txtPort;				
+	JButton btnConnect;	
+	JButton btnGraph;
+	JButton btnRandomize;
+	JLabel lblNumRobots;
+	JLabel lblHasToken;
+	JLabel lblTokenPasses;
+	JLabel lblConnectionStatus;
+	JTextArea txtInput;  //sample matrix is entered in this area
+	JTextArea txtInfo; 
+	JPanel panel;
+	JPanel panelConnect;
+	JPanel panelControl;
+	JPanel panelStats;
+	
+	GraphicsConfiguration gc;
+	volatile BufferedImage image;
+	volatile Graphics2D canvas;
+	int cx, cy;
+	
+	Socket socket;					
+	OutputStreamWriter out;			//TODO: add a BufferedWriter
+	DataListener datalistener;  
+	
+	Font botFont;
+	Random random = new Random();
+	volatile int tokenLoc;  //the token is currently here
+	volatile int numBots;
+	volatile int selectedBot;  //the user has selected this bot
+	volatile Rectangle[] botRect;  //contains boundary shapes around bots for click detection
+	
+	Thread drawThread;
+	SelectionIndicator indicator;
+	Simulator simulator;
+	PacketMonitor packetMonitor;
+	
+	public void init ()
+	{
+		// We should invoke and wait to avoid browser display difficulties
+		Runnable r = new Runnable() {
+			public void run() {
+				createAndShowGUI();
+			}
+		};
+		try {
+			SwingUtilities.invokeAndWait(r);
+		} catch (InterruptedException e) {
+			//Not really sure why we would be in this situation
+			System.out.println(e);
+		} catch (java.lang.reflect.InvocationTargetException e) {
+			//This should never happen. Seriously.
+			System.out.println(e);
+		}
+	}
+	
+	public void destroy ()
+	{
+		drawThread.interrupt();
+		indicator.interrupt();
+		simulator.interrupt();
+		packetMonitor.interrupt();
+	}
+
+	private synchronized void createAndShowGUI ()
+	{
+		// init graphical elements
+		panel = new JPanel(false);  //set automatic double-buffering to false. we are doing it manually.
+		
+		// Set up connection area
+		txtHost = new JTextField("roboclub1.frc.ri.cmu.edu");
+		txtPort = new JTextField("10123");
+		btnConnect = new JButton("Connect");
+		lblConnectionStatus = new JLabel("Status: Offline");
+		panelConnect = new JPanel();
+		panelConnect.setLayout(new GridLayout(2,3));
+		panelConnect.add(new JLabel("Host"));
+		panelConnect.add(new JLabel("Port"));
+		panelConnect.add(lblConnectionStatus);
+		panelConnect.add(txtHost);
+		panelConnect.add(txtPort);
+		panelConnect.add(btnConnect);
+		panelConnect.setBorder(BorderFactory.createTitledBorder("Connection"));
+		
+		// Set up elements in the east
+		panelControl = new JPanel();
+		panelControl.setLayout(new GridLayout(5,1));
+		lblNumRobots = new JLabel();
+		lblHasToken = new JLabel();
+		lblTokenPasses = new JLabel();
+		panelStats = new JPanel();
+		panelStats.setLayout(new GridLayout(3,2));
+		panelStats.add(new JLabel("Number of Bots  "));
+		panelStats.add(lblNumRobots);
+		panelStats.add(new JLabel("Token At  "));
+		panelStats.add(lblHasToken);
+		panelStats.add(new JLabel("Token Passes / sec     "));
+		panelStats.add(lblTokenPasses);
+		txtInput = new JTextArea("- 9 3 - 1\n- - - 5 -\n4 - - - 2\n- - - - -\n1 - - 3 -");
+		txtInput.setBorder(BorderFactory.createTitledBorder("Input Matrix"));
+		txtInfo = new JTextArea();
+		txtInfo.setBorder(BorderFactory.createTitledBorder("Info"));
+		txtInfo.setEditable(false);
+		btnGraph = new JButton("Run");
+		btnRandomize = new JButton("Randomize");
+		panelControl.add(panelStats);
+		panelControl.add(txtInput);
+		panelControl.add(txtInfo);
+		panelControl.add(btnRandomize);
+		panelControl.add(btnGraph);
+		
+		
+		this.getContentPane().setLayout(new BorderLayout());
+		this.getContentPane().add(panelConnect, BorderLayout.NORTH);
+		this.getContentPane().add(panelControl, BorderLayout.EAST);
+		this.getContentPane().add(panel, BorderLayout.CENTER);
+		this.setVisible(true);
+		
+		btnGraph.addActionListener(this);
+		btnRandomize.addActionListener(this);
+		btnConnect.addActionListener(this);
+		panel.addMouseListener(this);
+		
+		
+		// Get the graphics configuration of the screen to create a buffer
+		gc = GraphicsEnvironment.getLocalGraphicsEnvironment()
+			.getDefaultScreenDevice().getDefaultConfiguration();
+		image = gc.createCompatibleImage(CANVAS_SIZE,CANVAS_SIZE);
+		canvas = image.createGraphics();
+		canvas.setStroke(new BasicStroke(2));  //set pen width
+		
+		// Calculate center of canvas
+		cx = image.getWidth() / 2;
+		cy = image.getHeight() / 2;
+		
+		botFont = new Font("Arial", Font.PLAIN, 30);
+		tokenLoc = 0;
+		numBots = 0;
+		selectedBot = 0;
+		
+		// Set up dependent threads
+		indicator = new SelectionIndicator(canvas);
+		indicator.setRadius(RADIUS+3, 15);  //a tad more than the bot radius
+		simulator = new Simulator();
+		packetMonitor = new PacketMonitor();
+		datalistener = new DataListener();
+	
+	}
+	
+	public synchronized void paint (Graphics g)
+	{
+		/*	First, redraw the graphical components in the applet. 
+			This paint method overrides the built-in paint of the 
+			JApplet, and we don't want to deal with redrawing the
+			components manually. Fuck that shit. */
+		super.paint(g);
+		
+		// Place the buffered image on the screen, inside the panel
+		panel.getGraphics().drawImage(image, 0, 0, Color.WHITE, this);
+		
+	}
+	
+	public synchronized void update (Graphics g)
+	{
+		paint(g);
+	}
+	
+	public void actionPerformed (ActionEvent e)
+	{
+		Object source = e.getSource();
+		if (source == btnGraph)
+		{
+			btnGraph.setEnabled(false);
+			lblConnectionStatus.setText("Status: Simulation mode => running");
+			
+			//Start dependent threads
+			drawThread = new Thread(this, "drawThread");
+			drawThread.start();
+			indicator.start();
+			simulator.start();
+			packetMonitor.start();
+		}
+		else if (source == btnConnect)
+		{
+			doSocket();
+		}
+		else if (source == btnRandomize)
+		{
+			randomize();
+		}
+	}
+	
+	private void randomize ()
+	{
+		Random r = new Random();
+		StringBuilder s = new StringBuilder();
+		
+		int count = r.nextInt(8) + 1;
+		for (int i = 0; i < count; i++)
+		{
+			for (int j = 0; j < count; j++)
+			{
+				if (r.nextBoolean())	
+					s.append("" + (r.nextInt(16) + 1));
+				else 
+					s.append("-");
+				if (j != count-1)
+					s.append(" ");
+			}
+			if (i != count-1) s.append("\n");
+		}
+		
+		txtInput.setText(s.toString());
+	}
+	
+	private void doSocket ()
+	{
+		//make sure hostname and port are valid
+		if (txtHost.getText().equals("") || txtPort.getText().equals("")) {
+			err("Please enter a hostname and port.");
+			return;
+		}
+		int port = 0;
+		try {
+			port = Integer.parseInt(txtPort.getText());
+		} catch (Exception e) {
+			err("Invalid port");
+			return;
+		}
+		
+		//make sure we aren't already connected. if so, disconnect first.
+		if (socket != null && socket.isConnected()) {
+			try {
+				out.close();
+				socket.close();
+			} catch (IOException e) {}
+		}
+		
+		try {
+			socket = new Socket(txtHost.getText(), port);
+		} catch (UnknownHostException e) {
+			err("Unknown Host Exception");
+			return;
+		} catch (IOException e) {
+			err("IO Exception\n\n" + e);
+			return;
+		} catch (java.security.AccessControlException e) {
+			err("Permission denied by java.security.AccessControlException.\n\nYou may only connect to the server from which this applet was loaded.");
+			return;
+		}
+		if (socket == null || !socket.isConnected()) {
+			err("Connection failed. Try connecting again.");
+			return;
+		}
+		msg("Connected to " + txtHost.getText() + " on port " + port + "\n");
+		lblConnectionStatus.setText("Status: ONLINE");
+		try {
+			out = new OutputStreamWriter(socket.getOutputStream());
+		} catch (IOException e) {
+			warn("Could not get OutputStream from socket connection.");
+		}
+	
+	}
+	
+	public void drawRobot (int id, int x, int y) 
+	{
+		//save the bot in memory, so we can tell if we click on it later
+		botRect[id] = new Rectangle(x-RADIUS, y-RADIUS, 2*RADIUS, 2*RADIUS);
+	
+		//draw the bot on the canvas
+		canvas.setColor(Color.BLACK);
+		canvas.drawOval(x-RADIUS, y-RADIUS, RADIUS*2, RADIUS*2);
+		
+		//draw the label
+		canvas.setFont(botFont);
+		canvas.drawString("" + id, x-10, y+10);
+	}
+	
+	public void drawConnection (int start, int end, int radius, Color color)
+	{
+		final int ARROW_LENGTH = 18;
+	
+		double angle = 2.0 * Math.PI / numBots;
+		int startx, starty, endx, endy;
+		startx = cx - (int)(radius * Math.cos(start * angle));
+		starty = cy - (int)(radius * Math.sin(start * angle));
+		endx = cx - (int)(radius * Math.cos(end * angle));
+		endy = cy - (int)(radius * Math.sin(end * angle));
+		canvas.setColor(color);
+		canvas.drawLine(startx, starty, endx, endy);
+		
+		//create arrow
+		if (color.equals(Color.BLACK)) return;
+		int big_dy = starty - endy;
+		int big_dx = endx - startx;
+		double theta = 0;
+		if (big_dx == 0 && starty > endy) //pointing up
+			theta = Math.PI/2;
+		else if (big_dx == 0 && starty < endy) //pointing down 
+			theta = 3*Math.PI/2;
+		else if (big_dy == 0 && startx > endx) //pointing left
+			theta = Math.PI;
+		else if (big_dy == 0 && startx < endx) //pointing right
+			theta = 0;
+		else
+			theta = Math.atan(1.0 * big_dy / big_dx);
+		
+		//create ploygon
+		Polygon poly = new Polygon();
+		int dx_arrow = Math.abs((int)(ARROW_LENGTH * Math.cos(theta)));
+		int dy_arrow = Math.abs((int)(ARROW_LENGTH * Math.sin(theta)));
+		int dy_half = (int)(ARROW_LENGTH/2 * Math.cos(theta));
+		int dx_half = (int)(ARROW_LENGTH/2 * Math.sin(theta));
+		int rx = (big_dx > 0) ? endx - dx_arrow : endx + dx_arrow;
+		int ry = (big_dy > 0) ? endy + dy_arrow : endy - dy_arrow;
+		//System.out.println("" + start + "->" + end + " : dx=" + big_dx + ",dy=" + big_dy + ",dy_arrow=" + dy_arrow + ",dx_arrow=" + dx_arrow + ",theta=" + theta + ",endx=" + endx + ",endy=" + endy + ",rx=" + rx + ",ry=" + ry);
+		poly.addPoint(endx, endy);
+		poly.addPoint(rx - dx_half, ry - dy_half);
+		poly.addPoint(rx + dx_half, ry + dy_half);
+		canvas.fillPolygon(poly);
+	}
+	
+	public void run ()
+	{
+		while (true)
+		{
+			step();
+			repaint();
+			try { Thread.sleep(90); }
+				catch (InterruptedException e) { return; }
+		}
+	}
+	
+	public void step () 
+	{
+		final int DIAMETER = image.getWidth() - 2*BUFFER;
+		final int BIGRADIUS = DIAMETER / 2;
+		final int TOKENRADIUS = 40;
+		boolean valid;
+	
+		// clear image
+		canvas.setColor(Color.WHITE);
+		canvas.fillRect(0, 0, image.getWidth(), image.getHeight());
+		
+		// parse the matrix, to see what robots exist
+		String [] rows = txtInput.getText().split("\n");
+		numBots = rows.length;
+		String [][] entries = new String[numBots][numBots];
+		valid = true;
+		for (int i = 0; i < numBots; i++) 
+		{
+			entries[i] = rows[i].split(" ");
+			if (entries[i].length != rows.length) valid = false;
+		}
+		
+		if (valid)
+		{
+			lblNumRobots.setText("" + numBots);
+			lblHasToken.setText("" + tokenLoc);
+			this.showStatus("Matrix OK");
+			
+			// draw outer ring
+			//canvas.setColor(Color.GREEN);
+			//canvas.drawOval(BUFFER, BUFFER, DIAMETER, DIAMETER);
+			
+			// draw robots and find which one is seleced
+			double angle = 2.0 * Math.PI / numBots;
+			canvas.setColor(Color.BLACK);
+			botRect = new Rectangle[numBots];
+			int x, y;
+			if (selectedBot >= numBots) selectedBot = 0;
+			for (int i = 0; i < numBots; i++)
+			{
+				x = cx - (int)(BIGRADIUS * Math.cos(i * angle));
+				y = cy - (int)(BIGRADIUS * Math.sin(i * angle));
+				drawRobot(i, x, y);
+				if (i == selectedBot) indicator.setCenter(x, y);
+			}
+			
+			// draw token marker
+			int tokenx, tokeny;
+			int tokenNum = tokenLoc;
+			tokenx = cx - (int)(BIGRADIUS * Math.cos(tokenNum * angle));
+			tokeny = cy - (int)(BIGRADIUS * Math.sin(tokenNum * angle));
+			canvas.setColor(Color.RED);
+			canvas.drawOval(tokenx-TOKENRADIUS, tokeny-TOKENRADIUS, 2*TOKENRADIUS, 2*TOKENRADIUS);
+			
+			// create an inner circle along which the connections are made.
+			// let the diameter of this circle be 2*RADIUS less than the outerDiameter.
+			// see what connections exist
+			for (int row = 0; row < numBots; row++)
+			{
+				for(int col = 0; col < numBots; col++)
+				{
+					if (! entries[row][col].equals("-") && entries[col][row].equals("-") && row != col) //one-way
+					{
+						//drawConnection(row, col, BIGRADIUS-RADIUS, Color.GRAY);
+						drawConnection(row, col, BIGRADIUS-RADIUS, new Color(200,200,200));
+					}
+					else if (! entries[row][col].equals("-") && ! entries[col][row].equals("-") && row != col) //two-way
+					{
+						drawConnection(row, col, BIGRADIUS-RADIUS, Color.BLACK);
+					}
+				}
+			}
+			
+			// draw the selection indicator
+			indicator.draw();
+			txtInfo.setText("Bot " + selectedBot + " is selected.\n");
+			txtInfo.append("Battery: ???\n");
+			txtInfo.append("Packet statistics: ???");
+			
+		}
+		else // if matrix is not valid
+		{
+			this.showStatus("Error: Invalid matrix");
+		}
+	
+	}
+	
+	/*	At this point, moveToken is only called by the simulator.
+	*	In the future, it can be rewritten to account for non-standard
+	*	token passing or deleted if the information can be retrieved
+	*	directly from the Colonet server instead.
+	*/
+	public void moveToken ()
+	{
+		try { tokenLoc = (tokenLoc+1)%numBots; }
+			catch (ArithmeticException e) { }  // in case numRobots is zero
+		
+		packetMonitor.addTokenPass();
+	}
+	
+	//
+	// MouseEvent methods
+	//
+	public void mouseExited(MouseEvent e) {}
+	public void mouseEntered(MouseEvent e) {}
+	public void mouseReleased(MouseEvent e) {}
+	public void mouseClicked(MouseEvent e) {}
+	public void mousePressed(MouseEvent e)
+	{
+		try {
+			for (int i = 0; i < numBots; i++)
+			{
+				if (botRect[i].contains(e.getPoint()))
+					selectedBot = i;
+			}
+		} catch (Exception ex) {
+			System.out.println(e);
+		}
+	
+	}
+	
+	private void msg (String text) {JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.INFORMATION_MESSAGE);}
+	private void warn (String text) {JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.WARNING_MESSAGE);}
+	private void err (String text) {JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.ERROR_MESSAGE);}
+	
+	
+	/*
+	*	SelectionIndicator thread.
+	*	Graphical representation of the selection marker
+	*
+	*	step() and draw() are synchronized methods. step() is private and 
+	*	used to update the position of the crosshairs. draw() is called 
+	*	externally and should only run if all calculations in step() have
+	*	been completed.
+	*/
+	private class SelectionIndicator extends Thread
+	{
+	
+		final int INDICATOR_DELAY = 100;
+		final double DTHETA = 0.3;    //larger values make the marker rotate faster
+		Graphics2D g;   //canvas to draw on
+		boolean running;
+		
+		int sx, sy;		//center
+		int r, dr;		//radius and width of marker
+		double theta;   //current angle
+		
+		volatile Polygon poly1, poly2, poly3, poly4;
+		
+		int px1, py1;
+		int rx1, ry1;
+		int px2, py2;
+		int rx2, ry2;
+		int px3, py3;
+		int rx3, ry3;
+		int px4, py4;
+		int rx4, ry4;
+		
+		int steps;
+	
+		public SelectionIndicator (Graphics2D g)
+		{
+			super("SelectionIndicator");
+			this.g = g;
+			running = false;
+			steps = 0;
+			
+			theta = 0;
+			rx1 = 0; ry1 = 0;
+			px1 = 0; py1 = 0;
+			rx2 = 0; ry2 = 0;
+			px2 = 0; py2 = 0;
+			rx3 = 0; ry3 = 0;
+			px3 = 0; py3 = 0;
+			rx4 = 0; ry4 = 0;
+			px4 = 0; py4 = 0;
+		}
+		
+		public synchronized void setCenter (int sx, int sy)
+		{
+			if (sx == this.sx && sy == this.sy) return;
+			this.sx = sx;
+			this.sy = sy;
+			steps = 0;
+		}
+		
+		public synchronized void setRadius (int r, int dr)
+		{
+			this.r = r;
+			this.dr = dr;
+			steps = 0;
+		}
+		
+		public void run ()
+		{
+			running = true;
+			while (running)
+			{
+				step();
+				try { Thread.sleep(INDICATOR_DELAY); }
+					catch (InterruptedException e) {  running = false; return; }
+			}
+		}
+		
+		private synchronized void step ()
+		{
+			Polygon poly1_new = new Polygon();
+			Polygon poly2_new = new Polygon();
+			Polygon poly3_new = new Polygon();
+			Polygon poly4_new = new Polygon();
+		
+			//the step
+			theta = (theta + DTHETA/Math.PI) % (Math.PI);
+			
+			//the calculation
+			//let p be the point of the pointy thing toward the center
+			//let r be the point at the opposite side
+			
+			//recalculate radius, if it will look cool, lolz
+			int newr = r;
+			if (steps < 100) newr = (int)( r + 200/(steps+1) );
+			
+			//precompute values for dx and dy
+			int dx_inner = (int)(newr * Math.cos(theta));
+			int dy_inner = (int)(newr * Math.sin(theta));
+			int dx_outer = (int)((newr+dr) * Math.cos(theta));
+			int dy_outer = (int)((newr+dr) * Math.sin(theta));
+			
+			//calculate polygon constants
+			int dy_poly = (int)(dr/2 * Math.cos(theta));
+			int dx_poly = (int)(dr/2 * Math.sin(theta));
+			
+			//determine critical points
+			px1 = sx + dx_inner;
+			py1 = sy - dy_inner;
+			rx1 = sx + dx_outer;
+			ry1 = sy - dy_outer;
+			px2 = sx - dx_inner;
+			py2 = sy + dy_inner;
+			rx2 = sx - dx_outer;
+			ry2 = sy + dy_outer;
+			px3 = sx - dy_inner;
+			py3 = sy - dx_inner;
+			rx3 = sx - dy_outer;
+			ry3 = sy - dx_outer;
+			px4 = sx + dy_inner;
+			py4 = sy + dx_inner;
+			rx4 = sx + dy_outer;
+			ry4 = sy + dx_outer;
+			
+			//create polygons
+			poly1_new.addPoint(px1, py1);
+			poly1_new.addPoint(rx1+dx_poly, ry1+dy_poly);
+			poly1_new.addPoint(rx1-dx_poly, ry1-dy_poly);
+			poly2_new.addPoint(px2, py2);
+			poly2_new.addPoint(rx2+dx_poly, ry2+dy_poly);
+			poly2_new.addPoint(rx2-dx_poly, ry2-dy_poly);
+			poly3_new.addPoint(px3, py3);
+			poly3_new.addPoint(rx3-dy_poly, ry3+dx_poly);
+			poly3_new.addPoint(rx3+dy_poly, ry3-dx_poly);
+			poly4_new.addPoint(px4, py4);
+			poly4_new.addPoint(rx4-dy_poly, ry4+dx_poly);
+			poly4_new.addPoint(rx4+dy_poly, ry4-dx_poly);
+			
+			//reassign updated polygons
+			poly1 = poly1_new;
+			poly2 = poly2_new;
+			poly3 = poly3_new;
+			poly4 = poly4_new;
+		
+			if (steps < 300) steps++;
+		}
+		
+		public synchronized void draw ()
+		{
+			if (!running) return;
+			g.setColor(Color.GRAY);
+			//draw polygons
+			g.fillPolygon(poly1);
+			g.fillPolygon(poly2);
+			g.fillPolygon(poly3);
+			g.fillPolygon(poly4);
+		}
+	
+	
+	}
+	
+	/*
+	*	Simulator thread.
+	*
+	*/
+	private class Simulator extends Thread
+	{
+		final int SIMULATOR_DELAY = 300;
+	
+		boolean running;
+	
+		public Simulator ()
+		{
+			super("Simulator");
+			running = false;
+		}
+		
+		public void run ()
+		{
+			running = true;
+			while (running)
+			{
+				step();
+				try { Thread.sleep(SIMULATOR_DELAY); }
+					catch (InterruptedException e) { running = false; return; }
+			}
+		}
+		
+		private void step ()
+		{
+			// simulate passing the token
+			moveToken();
+		
+		}
+	
+	}
+	
+	/*
+	*	PacketMonitor thread.
+	*
+	*	Currently, this counts the rate of token passes but will eventually 
+	*	be modified to keep more important statistics.
+	*/
+	private class PacketMonitor extends Thread
+	{
+		final int PACKETMONITOR_DELAY = 1000;
+	
+		boolean running;
+		int tokenPasses;
+	
+		public PacketMonitor ()
+		{
+			super("PacketMonitor");
+			running = false;
+			tokenPasses = 0;
+		}
+		
+		public void run ()
+		{
+			running = true;
+			while (running)
+			{
+				displayTokenPasses();
+				try { Thread.sleep(PACKETMONITOR_DELAY); }
+					catch (InterruptedException e) { running = false; return; }
+			}
+		}
+		
+		public synchronized void addTokenPass ()
+		{
+			tokenPasses++;
+		}
+		
+		public synchronized void displayTokenPasses ()
+		{
+			lblTokenPasses.setText("" + tokenPasses);
+			tokenPasses = 0;
+		}
+	
+	}
+	
+	/*
+	*	DataListener thread.
+	*
+	*/
+	class DataListener extends Thread
+	{
+		final int DATALISTENER_DELAY = 1000;
+		BufferedReader reader;
+		
+		public DataListener ()
+		{
+			super("Colonet DataListener");
+		}
+		
+		public void run ()
+		{
+			String line;
+			try {
+				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+			} catch (IOException e) {
+				warn("Could not open input stream from socket.\nTry relooding the applet.");
+			}
+			while (true)
+			{
+				try {
+					if (reader.ready())
+					{
+						line = reader.readLine();
+						if (line != null)
+						{
+							msg("Incoming data: [" + line + "]");
+						}
+					}
+					Thread.sleep(DATALISTENER_DELAY);
+				} catch (InterruptedException e) {
+					return;
+				} catch (IOException e) {
+					warn("IOException while reading incoming data.");
+				}
+			}
+		}
+
+	}
+
+	
+	/*
+	*	Matrix class
+	*	holds current sensor matrix data
+	*/
+	
+	/*
+	private class Matrix
+	{
+		int [][] grid;
+	
+		public Matrix ()
+		{
+			grid = new int[1][1];
+		}
+		
+		public String toString ()
+		{
+			StringBuilder s = new StringBuilder();
+			for (int j = 0; j < grid.length; j++)
+			{
+				for (int i = 0; i < grid[0].length; i++)
+					s.append(grid[i][j]);
+				if (j < grid.length-1) s.append("\n");
+			}
+			return s.toString();
+		}
+	
+	}
+	*/
+	
+	
+	
+}
+
Index: branches/charge_board/code/projects/colonet/ColonetGUI/colonetstyle.css
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/colonetstyle.css	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/colonetstyle.css	(revision 62)
@@ -0,0 +1,40 @@
+/* Colonet Applet Stylesheet */
+/* Gregory Tress */
+
+div
+{
+	background-color: #A00016;
+	color: white;
+	font-family: verdana, arial, helvetica, sans-serif;
+	padding: 5px 5px 5px 5px;
+}
+
+/* Top bar */
+div.top
+{
+	font-size: 14pt;
+}
+div.top img
+{
+	position: absolute;
+	top: 10px;
+	right: 10px;
+}
+
+/* The Applet */
+div.app
+{
+	background-color: white;
+	color: black;
+}
+
+/* Bottom bar */
+div.bottom
+{
+	font-size: 12pt;
+}
+div.bottom a
+{
+	color: #DDFFFF;
+}
+
Index: branches/charge_board/code/projects/colonet/ColonetGUI/index_graph.html
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/index_graph.html	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/index_graph.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+	<title>Colony Control Applet - Carnegie Mellon Robotics Club</title>
+	<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+	<link rel="stylesheet" type="text/css" href="colonetstyle.css" />
+</head>
+
+<body>
+
+<div class="top">
+	<h1>Colonet: Robot Graph</h1>
+	<p>Carnegie Mellon Robotics Club: Colony Project</p>
+	<img src="http://roboclub8.frc.ri.cmu.edu/mainwiki/roboclublogo.png" height="125px" width="110px" alt="RoboClub Logo" />
+</div>
+
+<div class="app">
+	<p>
+	<object
+		classid = "java:BotGraph.class"
+		type = "application/x-java-applet"
+		width = "850"
+		height = "650"
+		align = "bottom"
+		codebase = "http://roboclub1.frc.ri.cmu.edu/gui/" 
+		name = "BotGraph"
+		title = "BotGraph" >
+		<param name = "code" value = "BotGraph.class" />
+	</object>
+	<br />
+	Requires Java 5.
+	<br />
+	<a href="BotGraph.java">Source Code</a>
+	<br />
+	<br />
+	</p>
+</div>
+
+<div class="bottom">
+	<p><b>Colony Project Home page:</b><br />
+	<a href="http://www.robotcolony.org/">www.robotcolony.org</a></p>
+	
+	<p><b>Validator:</b><br />
+	<a href="http://validator.w3.org/check?uri=referer">
+	<img src="http://www.w3.org/Icons/valid-xhtml10-blue"
+		 alt="Valid XHTML 1.0 Transitional"
+		 height="31"
+		 width="88" 
+		 border="0"
+		 />
+	</a>
+	<a href="http://jigsaw.w3.org/css-validator/validator?uri=http://roboclub1.frc.ri.cmu.edu/ColonetGUI/colonetstyle.css">
+  	<img style="border:0;width:88px;height:31px"
+       src="http://www.w3.org/Icons/valid-css-blue" 
+       alt="Valid CSS!" />
+	</a><br />
+	</p>
+	
+</div>
+
+
+
+</body>
+</html>
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/ColonetGUI/SimpleColonet.java
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetGUI/SimpleColonet.java	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetGUI/SimpleColonet.java	(revision 62)
@@ -0,0 +1,554 @@
+
+import java.awt.*;
+import java.awt.event.*;
+import java.applet.*;
+import javax.swing.*;
+import javax.swing.event.*;
+import java.net.*;
+import java.io.*;
+
+/**
+ *		Colonet: The Colony Control Applet.
+ *		This applet provides a graphical control mechanism for the robot colony designed
+ *		for web deployment.
+ *
+ *		@author Gregory Tress
+ *		@version 0.1
+ *
+ */
+public class SimpleColonet extends JApplet implements ActionListener, KeyListener, ChangeListener
+{
+
+	/*
+	*   Graphical Applet Elements
+	*/
+
+	ColonetServerInterface csi;
+	DataListener datalistener;      
+	
+	// panelTop contains stuff on top
+	JPanel panelTop;				
+	JPanel panelConnect;			
+	JTextField txtHost;				
+	JTextField txtPort;				
+	JButton btnConnect;				
+	
+	// panelMove contains directional buttons for controlling the robot
+	JPanel panelMove;
+	JButton btnF, btnB, btnL, btnR, btnActivate;
+	boolean isMoving;
+	
+	// panelCommands contains 
+	JPanel panelCommands;
+	JButton btnClearLog;
+	JButton btnBuzzerOn;
+	JButton btnBuzzerOff;
+	JButton btnRequestBattery;
+	JButton btnChangeOrbColor;
+	JButton btnGetSensorData;
+	JComboBox cmbRobotNumber;
+	String robotNumber;
+	
+	JColorChooser chooser;
+	JPanel panelChooser;
+	
+	JPanel panelBottom;
+	JTextArea log;
+	JScrollPane spLog;
+	
+	JPanel panelWebcam;
+	WebcamLoader webcamLoader;
+	boolean destroyed = false;
+	
+	/**
+	 * Sets up user control elements.
+	 * Specifies layout for all GUI elements,
+	 * attaches all ActionListeners, KeyListeners, and ChangeListeners, and
+	 * creates threads for loading webcam image and listening for incoming data.
+	 *
+	 */
+	public void init () {
+		Container content = getContentPane();
+		content.setLayout(new GridLayout(2,1));
+		
+		txtHost = new JTextField();
+		txtPort = new JTextField();
+		btnConnect = new JButton("Connect");
+		panelConnect = new JPanel();
+		panelConnect.setLayout(new GridLayout(2,3));
+		panelConnect.add(new JLabel("Host"));
+		panelConnect.add(new JLabel("Port"));
+		panelConnect.add(new JLabel(" "));
+		panelConnect.add(txtHost);
+		panelConnect.add(txtPort);
+		panelConnect.add(btnConnect);
+		panelConnect.setBorder(BorderFactory.createTitledBorder("Connection"));
+		
+		btnF = new JButton("Forward");
+		btnB = new JButton("Back");
+		btnL = new JButton("Left");
+		btnR = new JButton("Right");
+		btnActivate = new JButton("On/Stop");
+		panelMove = new JPanel();
+		panelMove.setLayout(new GridLayout(3,3));
+		panelMove.add(new JLabel(""));
+		panelMove.add(btnF);
+		panelMove.add(new JLabel(""));
+		panelMove.add(btnL);
+		panelMove.add(btnActivate);
+		panelMove.add(btnR);
+		panelMove.add(new JLabel(""));
+		panelMove.add(btnB);
+		panelMove.add(new JLabel(""));
+		panelMove.setBorder(BorderFactory.createTitledBorder("Movement Control"));
+		
+		btnClearLog = new JButton("Clear Log");
+		btnBuzzerOn = new JButton("Buzzer On");
+		btnBuzzerOff = new JButton("Buzzer Off");
+		btnRequestBattery = new JButton("Request Battery");
+		btnChangeOrbColor = new JButton("Change Orb Color");
+		btnGetSensorData = new JButton("Get Sensor Data");
+		String [] robotList = {"All   ", "0", "1", "2", "3", "4", "5"};
+		cmbRobotNumber = new JComboBox(robotList);
+		panelCommands = new JPanel();
+		panelCommands.setLayout(new FlowLayout());
+		panelCommands.add(btnBuzzerOn);
+		panelCommands.add(btnBuzzerOff);
+		panelCommands.add(btnClearLog);
+		panelCommands.add(btnRequestBattery);
+		//panelCommands.add(btnChangeOrbColor);
+		panelCommands.add(btnGetSensorData);
+		panelCommands.add(new JLabel("Robot # to control"));
+		panelCommands.add(cmbRobotNumber);
+		panelCommands.setBorder(BorderFactory.createTitledBorder("Commands"));
+		
+		chooser = new JColorChooser();
+		chooser.setPreviewPanel(new JPanel());
+		panelChooser = new JPanel();
+		panelChooser.setLayout(new BorderLayout());
+		panelChooser.add(chooser, BorderLayout.CENTER);
+		panelChooser.setBorder(BorderFactory.createTitledBorder("Orb"));
+		
+		panelTop = new JPanel();
+		panelTop.setLayout(new BorderLayout());
+		panelTop.add(panelConnect, BorderLayout.NORTH);
+		panelTop.add(panelMove, BorderLayout.WEST);
+		panelTop.add(panelCommands, BorderLayout.CENTER);
+		panelTop.add(panelChooser, BorderLayout.EAST);
+		
+		log = new JTextArea();
+		spLog = new JScrollPane(log, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		spLog.setBorder(BorderFactory.createTitledBorder("Log"));
+		log.setEditable(false);
+		
+		panelWebcam = new JPanel();
+		panelWebcam.setBorder(BorderFactory.createTitledBorder("Webcam"));
+		
+		panelBottom = new JPanel();
+		panelBottom.setLayout(new GridLayout(1,2));
+		panelBottom.add(spLog);
+		panelBottom.add(panelWebcam);
+		
+		content.add(panelTop);
+		content.add(panelBottom);
+		
+		txtHost.setText("roboclub1.frc.ri.cmu.edu");
+		txtPort.setText("10123");
+		isMoving = false;
+		
+		btnConnect.addActionListener(this);
+		btnClearLog.addActionListener(this);
+		btnBuzzerOn.addActionListener(this);
+		btnBuzzerOff.addActionListener(this);
+		btnRequestBattery.addActionListener(this);
+		btnChangeOrbColor.addActionListener(this);
+		btnGetSensorData.addActionListener(this);
+		
+		btnActivate.addActionListener(this);
+		btnActivate.addKeyListener(this);
+		btnF.addActionListener(this);
+		btnF.addKeyListener(this);
+		btnB.addActionListener(this);
+		btnB.addKeyListener(this);
+		btnL.addActionListener(this);
+		btnL.addKeyListener(this);
+		btnR.addActionListener(this);
+		btnR.addKeyListener(this);
+		
+		chooser.getSelectionModel().addChangeListener(this);
+		
+		csi = new ColonetServerInterface(log);
+		webcamLoader = new WebcamLoader(this);
+		datalistener = new DataListener(log);
+	}
+	
+	/**
+	 * Attempt to shut down the applet cleanly. 
+	 * Clean up leftover tasks when destroyed,
+	 * i.e., browser window is closed or appletviewer is stopped. 
+	 * This method attempts to pause the destruction of the applet for 1000ms.
+	 * If successful, other threads will have the chance to receive the shutdown
+	 * signal and stop. Otherwise catches an exception.
+	 */
+	public void destroy ()
+	{
+		try {
+			destroyed = true;
+			//Wait for a second to give other threads a chance to be interrupted and return.
+			//This may not be necessary but it seems to prevent some browser crashes. 
+			Thread.sleep(1000);
+		} catch (InterruptedException e) {
+			err("Interrupted exception in destroy()");
+		}
+	}
+	
+	public void actionPerformed (ActionEvent event) {
+		Object source = event.getSource();
+		
+		if (source == btnConnect)
+		{
+			csi.connect(txtHost.getText(), txtPort.getText());
+			webcamLoader.start();
+			datalistener.start();
+		}
+		else if (source == btnClearLog)
+			log.setText("");
+		else if (source == btnBuzzerOn)
+		{
+			csi.sendData(ColonetServerInterface.BUZZER_SET_FREQ + " 254", ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnBuzzerOff)
+		{
+			csi.sendData(ColonetServerInterface.BUZZER_OFF, ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnRequestBattery)
+		{
+			csi.sendRequest(ColonetServerInterface.BATTERY, ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnGetSensorData)
+		{
+			SensorDataWindow sd = new SensorDataWindow(this);
+			Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
+			sd.setBounds(screenDim.width/4, screenDim.height/4, screenDim.width/2, screenDim.height/2);
+			sd.setVisible(true);
+		}
+		else if (source == btnActivate)
+		{
+			isMoving = false;
+			csi.sendData(ColonetServerInterface.MOTORS_INIT, ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR1_SET + " 1 0", ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR2_SET + " 1 0", ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnF)
+		{
+			isMoving = true;
+			csi.sendData(ColonetServerInterface.MOTOR1_SET + " 1 200", ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR2_SET + " 1 200", ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnB)
+		{
+			isMoving = true;
+			csi.sendData(ColonetServerInterface.MOTOR1_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR2_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnL)
+		{
+			isMoving = true;
+			csi.sendData(ColonetServerInterface.MOTOR1_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR2_SET + " 1 200", ColonetServerInterface.GLOBAL_DEST);
+		}
+		else if (source == btnR)
+		{
+			isMoving = true;
+			csi.sendData(ColonetServerInterface.MOTOR1_SET + " 1 200", ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR2_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+		}
+	
+	}
+	
+	public void stateChanged (ChangeEvent e) 
+	{
+		//Update the orb color
+		int red = chooser.getColor().getRed();
+		int green = chooser.getColor().getGreen();
+		int blue = chooser.getColor().getBlue();
+		csi.sendData(ColonetServerInterface.ORB_SET + " " + red + " " + green + " " + blue, ColonetServerInterface.GLOBAL_DEST);
+	}
+	
+	
+	/**
+	 * Display informational message box on the screen. Used for casual communicaton to the user.
+	 * @param text Text to display
+	 */
+	private void msg (String text) {
+		JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.INFORMATION_MESSAGE);
+	}
+	
+	/**
+	 * Display warning message box on the screen. Used for minor alerts or exceptions.
+	 * @param text Text to display
+	 */
+	private void warn (String text) {
+		JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.WARNING_MESSAGE);
+	}
+	
+	/**
+	 * Display error message box on the screen. Used for major errors or exceptions in the program.
+	 * @param text Text to display
+	 */
+	private void err (String text) {
+		JOptionPane.showMessageDialog(null, text, "Colonet", JOptionPane.ERROR_MESSAGE);
+	}
+	
+	public void keyPressed (KeyEvent e) {
+		if (isMoving) return;
+		try {
+			if (e.getKeyCode() == KeyEvent.VK_UP) {
+				log.append("Key: Up\n");
+				isMoving = true;
+
+        csi.sendData(ColonetServerInterface.MOVE_AVOID + " 200 0 0", ColonetServerInterface.GLOBAL_DEST);
+
+				//sendData(MOTOR1_SET + " 1 200");
+				//sendData(MOTOR2_SET + " 1 200");
+			}
+			else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
+				log.append("Key: Down\n");
+				isMoving = true;
+				csi.sendData(ColonetServerInterface.MOTOR1_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+				csi.sendData(ColonetServerInterface.MOTOR2_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+			}
+			else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
+				log.append("Key: Left\n");
+				isMoving = true;
+				csi.sendData(ColonetServerInterface.MOTOR1_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+				csi.sendData(ColonetServerInterface.MOTOR2_SET + " 1 200", ColonetServerInterface.GLOBAL_DEST);
+			}
+			else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
+				log.append("Key: Right\n");
+				isMoving = true;
+				csi.sendData(ColonetServerInterface.MOTOR1_SET + " 1 200", ColonetServerInterface.GLOBAL_DEST);
+				csi.sendData(ColonetServerInterface.MOTOR2_SET + " 0 200", ColonetServerInterface.GLOBAL_DEST);
+			}
+			
+		} catch (Exception ex) {
+			log.append("Error sending command.\n");
+		}
+	}
+	
+	public void keyReleased (KeyEvent e) {
+		if (!isMoving) return;
+		// if we are no longer pressing a direction key, stop the robot
+		if (e.getKeyCode() == KeyEvent.VK_UP ||
+			e.getKeyCode() == KeyEvent.VK_DOWN ||
+			e.getKeyCode() == KeyEvent.VK_LEFT ||
+			e.getKeyCode() == KeyEvent.VK_RIGHT)
+			log.append("Stopping robot\n");
+			isMoving = false;
+			csi.sendData(ColonetServerInterface.MOTOR1_SET + " 0 0", ColonetServerInterface.GLOBAL_DEST);
+			csi.sendData(ColonetServerInterface.MOTOR2_SET + " 0 0", ColonetServerInterface.GLOBAL_DEST);
+	}
+	public void keyTyped (KeyEvent e) {
+		
+	}
+	
+	/**
+	 * Listens for incoming data from the colonet server. 
+	 * This includes responses to requests for robot data.
+	 */
+	class DataListener extends Thread
+	{
+
+		JTextArea log;
+		BufferedReader reader;
+
+		/**
+		 * Create a new DataListener that listens for incoming data on the specified socket.
+		 * @param log TextArea to which incoming messages should be printed.
+		 * @param socket Socket on which to listen for data.
+		 */
+		public DataListener (JTextArea log)
+		{
+			super("Colonet DataListener");
+			this.log = log;
+		}
+		
+		public void run ()
+		{
+			String line;
+			log.append("Started listener for responses\n");
+			while (!destroyed)
+			{
+				try {
+					if (csi.isReady())
+					{
+						line = csi.getBufferedReader().readLine();
+						if (line != null) log.append("Message from server: " + line + "\n");
+					}
+					Thread.sleep(500);
+				} catch (Exception e) {
+					warn("Error: " + e);
+				}
+			}
+		}
+
+	}
+
+
+	class WebcamLoader extends Thread 
+	{
+
+		URL path;
+		Image image;
+		MediaTracker mt;
+		int BUFFER = 16;  // this is arbitrary. it makes the image look nice.
+		
+		public WebcamLoader (JApplet applet)
+		{
+			super("Colonet WebcamLoader");
+			try {
+				path = new URL("http://roboclub1.frc.ri.cmu.edu/ColonetGUI/webcam/colonet.jpg");
+			} catch (MalformedURLException e) {
+				err("MalformedURLException.\nCannot load webcam image.");
+			}
+			mt = new MediaTracker(applet);
+		}
+		
+		public void run ()
+		{
+			while (!destroyed) {
+				try {
+					Thread.sleep(1000);
+					if (destroyed) return;
+					if (image != null) image.flush();
+					image = getImage(path);
+					mt.addImage(image, 1);
+					mt.waitForID(1);
+					panelWebcam.getGraphics().drawImage(image, 
+						BUFFER,	//dx1 - the x coordinate of the first corner of the destination rectangle.
+						BUFFER,	//dy1 - the y coordinate of the first corner of the destination rectangle.
+						panelWebcam.getWidth() - BUFFER, 	//dx2 - the x coordinate of the second corner of the destination rectangle.
+						panelWebcam.getHeight() - BUFFER,	//dy2 - the y coordinate of the second corner of the destination rectangle.
+						0,	//sx1 - the x coordinate of the first corner of the source rectangle.
+						0,	//sy1 - the y coordinate of the first corner of the source rectangle.
+						image.getWidth(null),	//sx2 - the x coordinate of the second corner of the source rectangle.
+						image.getHeight(null),	//sy2 - the y coordinate of the second corner of the source rectangle.
+						null	//observer - object to be notified as more of the image is scaled and converted.
+						);
+						
+				} catch (InterruptedException e) {
+					//Closing the browser window will probably couse an InterruptedException.
+					//I can't think of anything else to do than let it happen and then return.
+					return;
+				} catch (java.security.AccessControlException e) {
+					warn("java.security.AccessControlException in WebcamLoader.\n" + 
+						"The image cannot be loaded from the specified location.\n" + 
+						"Make sure you are accessing this applet from the correct server.");
+					destroyed = true;
+				}
+			}
+		}
+	}
+	
+	class SensorDataWindow extends JFrame implements ActionListener
+	{
+	
+		JApplet applet;
+		JTextArea log;
+		JScrollPane spLog;
+		JButton btnClose;
+		JPanel panelButtons;
+		SensorDataLoader sdl;
+	
+		public SensorDataWindow (JApplet applet)
+		{
+			super("Sensor Data");
+			this.applet = applet;
+			
+			log = new JTextArea();
+			log.setEditable(false);
+			spLog = new JScrollPane(log, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+			spLog.setBorder(BorderFactory.createTitledBorder("Log"));
+			
+			Container content = this.getContentPane();
+			content.setLayout(new BorderLayout());
+			content.add(spLog, BorderLayout.CENTER);
+			
+			btnClose = new JButton("Close Window");
+			btnClose.addActionListener(this);
+			panelButtons = new JPanel();
+			panelButtons.setLayout(new FlowLayout());
+			panelButtons.add(btnClose);
+			content.add(panelButtons, BorderLayout.SOUTH);
+			
+			//start thread to continuously update data
+			sdl = new SensorDataLoader(this, this.applet);
+			sdl.start();
+			
+			//if the window is closed,
+			//make sure we stop the thread.
+			this.addWindowListener(new SensorDataWindowListener());
+			
+		}
+		
+		public void actionPerformed (ActionEvent event)
+		{
+			Object source = event.getSource();
+			if (source == btnClose)
+			{
+				this.setVisible(false);
+				sdl.stopMe();
+			}
+		}
+		
+		class SensorDataWindowListener extends WindowAdapter
+		{
+			public SensorDataWindowListener ()
+			{
+				super();
+			}
+			public void windowClosing (WindowEvent e)
+			{
+				sdl.stopMe();
+			}
+		}
+		
+	}
+	
+	class SensorDataLoader extends Thread
+	{
+	
+		SensorDataWindow window;
+		JApplet applet;
+		boolean running;
+	
+		public SensorDataLoader (SensorDataWindow window, JApplet applet)
+		{
+			this.window = window;
+			this.applet = applet;
+		}
+		
+		public void run ()
+		{
+			running = true;
+			log.append("Sensor data loading started.\n");
+			while (running)
+			{
+				try {
+					Thread.sleep(2000);
+				} catch (InterruptedException e) {
+					err("InterruptedException in SensorDataLoader\n" + e);
+				}
+				log.append("<update data here ...>\n");
+			}
+			log.append("Sensor data loading stopped.\n");
+		}
+		
+		public void stopMe ()
+		{
+			running = false;
+		}
+	
+	}
+	
+}
Index: branches/charge_board/code/projects/colonet/ColonetClient/Client.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/Client.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/Client.cpp	(revision 62)
@@ -0,0 +1,73 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ * 3/1/07
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "includes/Server.h"
+#include "includes/Client.h"
+#include "includes/Commands.h"
+#include "includes/Buzzer.h"
+
+
+
+//TODO: figure out why it thinks its connected to the server even if we pick some random IP address
+
+
+int main(int argc, char * argv[])
+{
+  Buzzer buzzer;
+  if (argc < 3)
+    {
+      printf("\nUsage: %s <server address> <port number>\n", argv[0]);
+      exit(0);
+    }
+
+  Server colonetServer(argv[1], argv[2]);
+  if (colonetServer.isError())
+    {
+      printf("There was an error initializing a connection to the server.\nError message: %s\n", colonetServer.getErrorMsg());
+      exit(0);
+    }
+  
+  Commands commands;
+
+  char msgBuffer[MAX_RESPONSE_LEN];
+  char inputBuffer[MAX_INPUT_LENGTH+1];
+  
+  printf("Type \"help\" for information on available commands\n");
+  while(1)
+    {
+      colonetServer.recvMessagesFromServer();
+
+      while(colonetServer.getMsg(msgBuffer, MAX_RESPONSE_LEN) > 0)
+        {
+          //buffer now contains a message the server sent to the client.  do something with it
+        }
+      if (colonetServer.isError())
+        {
+          printf("There was an error:\n%s\n", colonetServer.getErrorMsg());
+          colonetServer.clearError();
+        }
+
+      printf("Enter a command: ");
+      if (fgets(inputBuffer, MAX_INPUT_LENGTH, stdin) == NULL)
+        {
+          printf("There was an error reading from standard input.\n");
+          continue;
+        }
+      if(inputBuffer[0] == '\n')
+        continue;
+
+      if (commands.parseCommand(inputBuffer, colonetServer))
+        {
+          printf("There was an error parsing a command.\n");
+          continue;
+        }
+    }
+  printf("Done.\n");
+}
Index: branches/charge_board/code/projects/colonet/ColonetClient/Buzzer.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/Buzzer.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/Buzzer.cpp	(revision 62)
@@ -0,0 +1,92 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  3/22/07
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "includes/Buzzer.h"
+
+Buzzer::Buzzer()
+{
+}
+
+void Buzzer::printUsage()
+{
+  printf("\nUsage of the \"buzzer\" command:\n");
+  printf("buzzer init\n");
+  printf("buzzer setValue <value>\n");
+  printf("buzzer setFreq <frequency>\n");
+  printf("buzzer chirp\n");
+  printf("buzzer off\n");
+  printf("\n");
+}
+
+
+int Buzzer::parseCommand(char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int numTokens, Server server)
+{
+  if (numTokens < 2)
+    {
+      printf("Error: The buzzer command did not contain enough fields.\n");
+      return -1;
+    }
+
+  char buffer[MAX_COMMAND_LEN];
+  buffer[0] = '\0';
+  snprintf(buffer,MAX_COMMAND_LEN, "%d ", SEND_TO_ROBOT);
+  int len = strlen(buffer);
+
+  if (strcmp(tokens[1], "init") == 0)
+    {
+      snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d", BUZZER_INIT);
+    }
+  else if (strcmp(tokens[1], "setValue") == 0 || strcmp(tokens[1], "setFreq") == 0)
+    {
+      if (numTokens < 3)
+        {
+          printf("Error: That buzzer command needs arguments.\n");
+          return -1;
+        }
+
+      char * endPtr = NULL;
+      int value = strtol(tokens[2], &endPtr, 10);
+      if (tokens[2][0] == '\0' || *endPtr != '\0')
+        {
+          printf("Error: The specified value was invalid.\n");
+          return -1;
+        }
+      
+      if (strcmp(tokens[1], "setValue") == 0)
+        {
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %d", BUZZER_SET_VAL, value);
+        }
+      else
+        {
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %d", BUZZER_SET_FREQ, value);
+        }
+    }
+  else if (strcmp(tokens[1], "chirp") == 0)
+    {
+      snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d", BUZZER_CHIRP);
+    }
+  else if (strcmp(tokens[1], "off") == 0)
+    {
+      snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d", BUZZER_OFF);
+    }
+  else
+    {
+      printf("Error: invalid buzzer command.\n");
+      return -1;
+    }
+
+
+  //TODO: remove this print later
+  printf("Command being sent to server:\n%s\n", buffer);
+
+  server.sendMsg(buffer);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/ColonetClient/Commands.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/Commands.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/Commands.cpp	(revision 62)
@@ -0,0 +1,120 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  3/22/07
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include "includes/Client.h"
+#include "includes/Commands.h"
+
+void Commands::printUsage()
+{
+  printf("\nAvailable commands:\n");
+  printf("buzzer\n");
+  printf("lcd\n");
+  printf("type \"help <command>\" for more information\n\n");
+}
+
+int Commands::parseCommand(char * command, Server server)
+{
+  if (!command)
+    return -1;
+
+  if (strlen(command) > MAX_INPUT_LENGTH)
+    return -1;
+
+  char tempCommand[MAX_INPUT_LENGTH];
+  strcpy(tempCommand, command);
+  char tokens[MAX_TOKENS][MAX_TOKEN_SIZE];
+  int numTokens = 0;
+  if ((numTokens = tokenizeCommand(tempCommand, tokens)) < 1)
+    {
+      return -1;
+    }
+
+  if (strcmp(tokens[0], "help") == 0)
+    {
+      if (numTokens == 1)
+        {
+          printUsage();
+          return 0;
+        }
+      
+      if (strcmp(tokens[1], "buzzer") == 0)
+        {
+          buzzer.printUsage();
+        }
+      else if (strcmp(tokens[1], "lcd") == 0)
+        {
+          lcd.printUsage();
+        }
+    }
+  else if (strcmp(tokens[0], "buzzer") == 0)
+    {
+      if (buzzer.parseCommand(tokens, numTokens, server) < 0)
+        {
+          return -1;
+        }
+    }
+  else if (strcmp(tokens[0], "lcd") == 0)
+    {
+      if (lcd.parseCommand(tokens, numTokens, server) < 0)
+        {
+          return -1;
+        }
+    }
+  else
+    {
+      printf("Invalid command.\n");
+    }
+
+  return 0;
+}
+
+int tokenizeCommand(char* command, 
+                           char tokens[MAX_TOKENS][MAX_TOKEN_SIZE])
+{
+  char* nextToken = command;
+  char* endToken = NULL;
+  int numTokens = 0;
+
+  if (!command) {
+    return -1;
+  }
+
+  while ((endToken = strstr(nextToken, " "))) {
+    *endToken = '\0';
+
+    if (strlen(nextToken) > MAX_TOKEN_SIZE-1) {
+      return -1;
+    }
+
+    strcpy(tokens[numTokens], nextToken);
+
+    numTokens++;
+    nextToken = endToken + 1;
+
+    while (isspace(*nextToken) && *nextToken != '\0') {
+      nextToken++;
+    }
+  }
+
+  if (endToken == NULL && *nextToken != '\0') {
+    int nextTokenLen = strlen(nextToken);
+    if (nextTokenLen > MAX_TOKEN_SIZE-1) {
+      return -1;
+    }
+    if (nextToken[nextTokenLen-1] == '\n')
+      nextToken[nextTokenLen-1] = '\0';
+
+    strcpy(tokens[numTokens], nextToken);
+
+    numTokens++;
+  }
+
+  return numTokens;
+}
Index: branches/charge_board/code/projects/colonet/ColonetClient/Lcd.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/Lcd.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/Lcd.cpp	(revision 62)
@@ -0,0 +1,159 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  4/12/07
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include "includes/Lcd.h"
+#include "includes/Client.h"
+
+Lcd::Lcd()
+{
+}
+
+void Lcd::printUsage()
+{
+  printf("\nUsage of the \"lcd\" command:\n");
+  printf("lcd init\n");
+  printf("lcd clearScreen\n");
+  printf("lcd putByte <byteValue>\n");
+  printf("lcd putChar <character>\n");
+  printf("lcd putString <string>\n");
+  printf("lcd goto <x> <y>\n");
+  printf("lcd putInt <integer>\n");
+  printf("\n");
+}
+
+
+int Lcd::parseCommand(char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int numTokens, Server server)
+{
+  if (numTokens < 2)
+    {
+      printf("Error: The lcd command did not contain enough fields.\n");
+      return -1;
+    }
+
+  char buffer[MAX_COMMAND_LEN];
+  buffer[0] = '\0';
+  snprintf(buffer, MAX_COMMAND_LEN, "%d ", SEND_TO_ROBOT);
+  int len = strlen(buffer);
+
+  if (strcmp(tokens[1], "init") == 0)
+    {
+      snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d", LCD_INIT);
+    }
+  else if (strcmp(tokens[1], "clearScreen") == 0)
+    {
+      snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d", LCD_CLEAR_SCREEN);
+    }
+  else if (numTokens < 3)
+    {
+      printf("Error: The lcd %s command was invalid or did not contain enough fields.\n", tokens[1]);
+      return -1;
+    }
+  else
+    {
+      if (strcmp(tokens[1], "putByte") == 0)
+        {
+          char * endPtr = NULL;
+          int value = strtol(tokens[2], &endPtr, 10);
+          if (tokens[2][0] == '\0' || *endPtr != '\0')
+            {
+              printf("Error: The specified value was invalid.\n");
+              return -1;
+            }
+          
+          if (value < 0 || value > 255)
+            {
+              printf("Error: The specified byte value was too large.\n");
+              return -1;
+            }
+
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %d", LCD_PUTBYTE, value);
+        }
+      else if (strcmp(tokens[1], "putChar") == 0)
+        {
+          int charLength = strlen(tokens[2]);
+          if (charLength <= 0 || charLength > 1)
+            {
+              printf("Error: The specified character was invalid.\n");
+              return -1;
+            }
+          
+          char character = tokens[2][0];
+          
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %c", LCD_PUTCHAR, character);
+        }
+      else if (strcmp(tokens[1], "putString") == 0)
+        {
+          //TODO: make this faster
+          char stringBuffer[MAX_INPUT_LENGTH];
+          stringBuffer[0] = '\0';
+          for (int i = 2; i < numTokens; i++)
+            {
+              strncat(stringBuffer, tokens[i], MAX_INPUT_LENGTH - strlen(stringBuffer));
+              strcat(stringBuffer, " ");
+            }
+          if ((signed)(strlen(stringBuffer)) > MAX_COMMAND_LEN - len - 3)
+            {
+              printf("Error: The string you want to send is too long.\n");
+              return -1;
+            }
+
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %s", LCD_PUTSTR, stringBuffer);
+        }
+      else if (strcmp(tokens[1], "goto") == 0)
+        {
+          if (numTokens < 4)
+            {
+              printf("Error: Not enough parameters for the goto command.\n");
+              return -1;
+            }
+
+          char * endPtr = NULL;
+          int xValue = strtol(tokens[2], &endPtr, 10);
+          if (tokens[2][0] == '\0' || *endPtr != '\0')
+            {
+              printf("Error: The specified value was invalid.\n");
+              return -1;
+            }
+          endPtr = NULL;
+          int yValue = strtol(tokens[2], &endPtr, 10);
+          if (tokens[2][0] == '\0' || *endPtr != '\0')
+            {
+              printf("Error: The specified value was invalid.\n");
+              return -1;
+            }
+          
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %d %d", LCD_GOTOXY, xValue, yValue);
+        }
+      else if (strcmp(tokens[1], "putInt") == 0)
+        {
+          char * endPtr = NULL;
+          int value = strtol(tokens[2], &endPtr, 10);
+          if (tokens[2][0] == '\0' || *endPtr != '\0')
+            {
+              printf("Error: The specified value was invalid.\n");
+              return -1;
+            }
+          
+          snprintf(buffer+len, MAX_COMMAND_LEN - len, "%d %d", LCD_PUTINT, value);
+        }
+      else
+        {
+          printf("Error: invalid lcd command.\n");
+          return -1;
+        }
+    }
+
+  //TODO: remove this print later
+  printf("Command being sent to server:\n%s\n", buffer);
+  
+  server.sendMsg(buffer);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/ColonetClient/includes/command_defines.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/includes/command_defines.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/includes/command_defines.h	(revision 62)
@@ -0,0 +1,15 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  3/22/07
+ */
+
+#ifndef COMMAND_DEFINES_H
+#define COMMAND_DEFINES_H
+
+#define MAX_TOKENS 15
+#define MAX_TOKEN_SIZE 30
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetClient/includes/Client.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/includes/Client.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/includes/Client.h	(revision 62)
@@ -0,0 +1,14 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ * 3/1/07
+ */
+
+
+#ifndef CLIENT_H
+#define CLIENT_H
+
+#define MAX_INPUT_LENGTH 128
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetClient/includes/Buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/includes/Buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/includes/Buzzer.h	(revision 62)
@@ -0,0 +1,22 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  3/22/07
+ */
+
+#ifndef BUZZER_H
+#define BUZZER_H
+
+#include "command_defines.h"
+#include "Server.h"
+
+class Buzzer
+{
+ public:
+  Buzzer();
+  void printUsage();
+  int parseCommand(char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int numTokens, Server server);
+};
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetClient/includes/Commands.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/includes/Commands.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/includes/Commands.h	(revision 62)
@@ -0,0 +1,30 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  3/22/07
+ */
+
+#ifndef COMMANDS_H
+#define COMMANDS_H
+
+#include "command_defines.h"
+#include "Server.h"
+#include "Buzzer.h"
+#include "Lcd.h"
+
+class Commands
+{
+ public:
+  void printUsage();
+  int parseCommand(char * command, Server colonetServer);
+
+ private:
+  Buzzer buzzer;
+  Lcd lcd;
+};
+
+int tokenizeCommand(char * command, char tokens[MAX_TOKENS][MAX_TOKEN_SIZE]);
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetClient/includes/Lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/includes/Lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/includes/Lcd.h	(revision 62)
@@ -0,0 +1,23 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ *  4/12/07
+ */
+
+#ifndef LCD_H
+#define LCD_H
+
+#include "command_defines.h"
+#include "Server.h"
+
+class Lcd
+{
+ public:
+  Lcd();
+  void printUsage();
+  int parseCommand(char tokens[MAX_TOKENS][MAX_TOKEN_SIZE], int numTokens, Server server);
+
+};
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetClient/includes/Server.h
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/includes/Server.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/includes/Server.h	(revision 62)
@@ -0,0 +1,61 @@
+/**
+ *
+ * @author Jason Knichel
+ *
+ * 2/15/07
+ */
+
+#ifndef SERVER_H
+#define SERVER_H
+
+#include "../../lib/colonet_defs.h"
+
+#define MAX_ERROR_MSG_LEN 256
+#define MIN_PORT 1024
+#define MAX_PORT 65536
+#define MAX_RESPONSES_QUEUE 8
+#define READ_BUFFER_SIZE (MAX_RESPONSE_LEN * MAX_RESPONSES_QUEUE)
+
+//Error codes
+#define ERROR_SERVER_PARAMETER_NULL -1
+#define ERROR_SERVER_MESSAGE_LENGTH -2
+#define ERROR_SERVER_SOCKET         -3
+#define ERROR_SERVER_SENDING        -4
+#define ERROR_SERVER_READING        -5
+#define ERROR_SERVER_BUFFER_LENGTH  -6
+#define ERROR_SERVER_MESSAGE_TOO_LONG -7
+#define ERROR_SERVER_NOT_ENOUGH_ROOM -8
+#define ERROR_NO_NEWLINE            -9
+
+
+class Server
+{
+ public:
+  Server(char * serverAddress, char * port);
+  Server(int ipAdress, unsigned short port);
+
+  //sends a message to the server you are connected to
+  int sendMsg(char * message);
+  //try to read something from the server you are connected to and buffer it
+  int recvMessagesFromServer();
+  //getMsg - returns the next message in the readBuffer
+  int getMsg(char * buffer, int bufferLen);
+
+  int isError();
+  char * getErrorMsg();
+  void clearError();
+
+ private:
+  void initializeServer(int ipAddress, unsigned short port);
+
+  int serverSocket;
+  int error;
+  char errorMsg[MAX_ERROR_MSG_LEN];
+
+  char readBuffer[READ_BUFFER_SIZE];
+  int readBufferLength;
+};
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/ColonetClient/Server.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/Server.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/Server.cpp	(revision 62)
@@ -0,0 +1,275 @@
+/**
+ *
+ *  @author Jason Knichel
+ *
+ * 2/15/07
+ */
+
+#include "includes/Server.h"
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdio.h>
+#include <string.h>
+#include <netinet/in.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <stdlib.h>
+#include "../lib/colonet_defs.h"
+
+
+Server::Server(char * serverAddress, char * port)
+{
+  if (!serverAddress)
+    {
+      //TODO: log error message here
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "Server address was null.");
+      return;
+    }
+ 
+  struct hostent * host = gethostbyname(serverAddress);
+  if (!host)
+    {
+      //TODO: log error message here
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "Could not look up IP address from server address.");
+      return;
+    }
+
+  int portNum = 0;
+  char * endPtr = NULL;
+  portNum = strtol(port, &endPtr, 10);
+  if (port[0] == '\0' || *endPtr != '\0')
+    {
+      //TODO: log error message here
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "\nThe specified port was invalid.\n");
+      return;
+    }
+  if (portNum < MIN_PORT || portNum > MAX_PORT)
+    {
+      //TODO: log error message here
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "\nThe port must be between %d and %d inclusive.\n", MIN_PORT, MAX_PORT);
+      return;
+    }
+
+  //TODO: test this to make sure the string host->h_addr is the 4 byte ip
+  // and not a string in dot notation
+  int ipAddress = ntohl(atoi(host->h_addr));
+
+  initializeServer(ipAddress, (unsigned short)portNum);
+}
+
+Server::Server (int ipAddress, unsigned short port)
+{
+  initializeServer(ipAddress, (unsigned short)port);
+}
+
+
+int Server::sendMsg(char * message)
+{
+  if (!message)
+    {
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "Message was null when trying to send a message.");
+      return ERROR_SERVER_PARAMETER_NULL;
+    }
+
+  if (strlen(message) > MAX_COMMAND_LEN)
+    {
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "Message was too long.");
+      return ERROR_SERVER_MESSAGE_LENGTH;
+    }
+
+  if (serverSocket < 0)
+    {
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "The socket was not a valid file descriptor.");
+      return ERROR_SERVER_SOCKET;
+    }
+
+  char * sentPoint = message;
+  int needToSend = strlen(sentPoint);
+
+  if (sentPoint[needToSend-1] != '\n')
+    {
+      if (needToSend == MAX_COMMAND_LEN-1)
+        {
+          error = 1;
+          snprintf(errorMsg, MAX_ERROR_MSG_LEN, "The message was not terminated by a newline and there was no room to add one.");
+          return ERROR_NO_NEWLINE;
+        }
+      else
+        {
+          sentPoint[needToSend] = '\n';
+          sentPoint[needToSend+1] = '\0';
+          needToSend++;
+        }
+    }
+  while(needToSend > 0)
+    {
+      int sent = write(serverSocket, sentPoint, needToSend);
+      if (sent < 0)
+        {
+          error = 1;
+          snprintf(errorMsg, MAX_ERROR_MSG_LEN, "There was an error when trying to send the message to the server.");
+          return ERROR_SERVER_SENDING;
+        }
+      needToSend -= sent;
+    }
+
+  return 1;
+}
+
+int Server::recvMessagesFromServer()
+{
+  char message[READ_BUFFER_SIZE];
+  int maxCanRead = READ_BUFFER_SIZE - readBufferLength;
+  
+  if (maxCanRead > 0)
+    {
+      fd_set readSet;
+      FD_ZERO(&readSet);
+      FD_SET(serverSocket, &readSet);
+
+      struct timeval t;
+      memset(&t, 0, sizeof(struct timeval));
+
+      select (serverSocket+1, &readSet, NULL, NULL, &t);
+
+      if (!(FD_ISSET(serverSocket, &readSet)))
+        {
+          return 1;
+        }
+
+      printf("Before read.\n");
+      int numRead = read(serverSocket, message, maxCanRead);
+      printf("After read.\n");
+
+      if (numRead < 0)
+        {
+          error = 1;
+          snprintf(errorMsg, MAX_ERROR_MSG_LEN, "There was an error reading from the server.");
+          return ERROR_SERVER_READING;
+        }
+      memcpy(readBuffer+readBufferLength, message, numRead);
+      readBufferLength += numRead;
+    }
+
+  return 1;
+}
+
+int Server::getMsg(char * buffer, int bufferLen)
+{
+  if (!buffer)
+    {
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "The buffer given to getMsg was null.");
+      return ERROR_SERVER_PARAMETER_NULL;
+    }
+  if (bufferLen < 0 || bufferLen > MAX_RESPONSE_LEN)
+    {
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "The buffer length given to getMsg was invalid.");
+      return ERROR_SERVER_BUFFER_LENGTH;
+    }
+
+  int len = -1;
+  int i;
+  for (i = 0; i < readBufferLength; i++)
+    {
+      if (readBuffer[i] == '\n')
+        {
+          len = i+1;
+          break;
+        }
+    }
+  
+  if (len == -1)
+    {
+      //no message found in buffer
+      return 0;
+    }
+
+  if (len > MAX_RESPONSE_LEN)
+    {
+      //there was a message in the buffer but it was too long
+      memmove(readBuffer, readBuffer+len, readBufferLength - len);
+      readBufferLength -= len;
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "The next message in the buffer was too long.  Removing message from buffer.");
+      return ERROR_SERVER_MESSAGE_TOO_LONG;
+    }
+
+  if (len > bufferLen)
+    {
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "The next message is longer than the buffer it is trying to be stored in.  Leaving message in queue.");
+      return ERROR_SERVER_NOT_ENOUGH_ROOM;
+    }
+
+  //this copies the newline over also into the buffer
+  memcpy(buffer, readBuffer, len);
+  memmove(readBuffer, readBuffer+len, readBufferLength - len);
+  readBufferLength -= len;
+  
+  return 1;
+}
+
+int Server::isError()
+{
+  return error;
+}
+
+char * Server::getErrorMsg()
+{
+  return errorMsg;
+}
+
+void Server::clearError()
+{
+  memset(errorMsg, 0, MAX_ERROR_MSG_LEN);
+  error = 0;
+}
+
+
+
+/******************
+ *  Private Methods
+ *****************/
+
+//assumes ipAddress and port are in host format
+void Server::initializeServer(int ipAddress, unsigned short port)
+{
+  serverSocket = socket(AF_INET, SOCK_STREAM, 0);
+  if (serverSocket < 0)
+    {
+      //TODO: implement logging system and log error message here
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "Could not create a socket.");
+      return;
+    }
+
+  struct sockaddr_in addr;
+  memset (&addr, 0, sizeof(struct sockaddr_in));
+  addr.sin_family = AF_INET;
+  addr.sin_addr.s_addr = htonl(ipAddress);
+  addr.sin_port = htons(port);
+  
+  if (connect(serverSocket, (struct sockaddr*)&addr, sizeof(addr)) < 0)
+    {
+      //TODO: log error message here
+      close(serverSocket);
+      error = 1;
+      snprintf(errorMsg, MAX_ERROR_MSG_LEN, "Could not connect to server.");
+      return;
+    }
+
+  readBufferLength = 0;
+
+  clearError();
+}
+
Index: branches/charge_board/code/projects/colonet/ColonetClient/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/Makefile	(revision 62)
@@ -0,0 +1,25 @@
+CC = g++
+LD = g++
+FLAGS = -Wall -Wshadow -Wextra
+CONNECTION_FILES = Server.cpp
+CONNECTION_OBJECTS = $(CONNECTION_FILES:.cpp=.o)
+CLIENT_FILES = Client.cpp
+CLIENT_OBJECTS = $(CLIENT_FILES:.cpp=.o)
+COMMANDS_FILES = Commands.cpp Buzzer.cpp Lcd.cpp
+COMMANDS_OBJECTS = $(COMMANDS_FILES:.cpp=.o)
+
+all: client
+
+
+connection: $(CONNECTION_FILES)
+	$(CC) $(FLAGS) -c $(CONNECTION_FILES)
+
+commands: 
+	$(CC) $(FLAGS) -c $(COMMANDS_FILES)
+
+client: connection commands $(CLIENT_FILES)
+	$(LD) -o $@ $(CONNECTION_OBJECTS) $(COMMANDS_OBJECTS) $(CLIENT_FILES) 
+
+
+clean:
+	rm -rf *.o
Index: branches/charge_board/code/projects/colonet/ColonetClient/client
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/projects/colonet/ColonetClient/client
===================================================================
--- branches/charge_board/code/projects/colonet/ColonetClient/client	(nonexistent)
+++ branches/charge_board/code/projects/colonet/ColonetClient/client	(revision 62)

Property changes on: branches/charge_board/code/projects/colonet/ColonetClient/client
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless_test.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless_test.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless_test.cpp	(revision 62)
@@ -0,0 +1,85 @@
+/* Eugene Marinelli
+ * 11/2/06
+ *
+ * colonet_wireless_test - tests the colonet_wireless library
+ */
+
+#include <iostream>
+#include <signal.h>
+
+#include "colonet_wireless.h"
+
+int msg_handler(ColonetPacket* pkt)
+{
+  printf("Handler!\n");
+
+  fprintf(stderr, 
+          "token_src:%d\n"
+          "token_dest:%d\n"
+          "msg_dest:%d\n"
+          "msg_type:%d\n"
+          "msg_code:%d\n"
+          "num_robots:%d\n",
+          pkt->token_src, pkt->token_dest, pkt->msg_dest, pkt->msg_type,
+          pkt->msg_code, pkt->num_robots);
+  
+  printf("data: ");
+
+  for(int i = 0; i < PACKET_DATA_LEN; i++){
+    printf("%d ", pkt->data[i]);
+  }
+  
+  printf("\n\n");
+
+  return 0;
+}
+
+int main()
+{
+  ColonetWireless* cw = new ColonetWireless(SERIAL_PORT, msg_handler, NULL, 
+                                            true, false);
+
+  /*
+  unsigned char orbdata[3] = {0xFF, 0xFF, 0xFF};
+  unsigned char motordata[4] = {0, 1, 0, 0xFF};
+  unsigned char motordata2[4] = {0, 0, 0, 0xFF};
+  unsigned char buzzerdata[5] = {0x01};
+  */
+
+  unsigned char data[10];
+  unsigned char msgcode;
+
+  //cw->send(GLOBAL_DEST, 0, 0, "eugene");
+
+  //cw->send(GLOBAL_DEST, COLONET_COMMAND, ORB_SET, orbdata);
+  //cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR1_SET, motordata);
+
+  //cw->send(GLOBAL_DEST, COLONET_COMMAND, BUZZER_INIT, (unsigned char*)"");
+  //cw->send(GLOBAL_DEST, COLONET_COMMAND, BUZZER_SET_VAL, buzzerdata);
+
+  cw->run_listener_thread();
+
+  printf("spawned thread\n");
+
+  while(1){
+    printf("Code: ");
+    scanf("%x", (int*)&msgcode);
+
+    for (int i = 0; i < 5; i++) {
+      printf("Byte %d: ", i);
+      scanf("%x", (int*)&(data[i]));
+    }
+
+    cw->send(GLOBAL_DEST, COLONET_COMMAND, msgcode, data);
+
+    /*
+    cw->send(GLOBAL_DEST, COLONET_COMMAND, ORB_SET, orbdata);
+    cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR1_SET, motordata);
+    cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR2_SET, motordata2);
+
+    sleep(3);
+    */
+  }
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless.cpp	(revision 62)
@@ -0,0 +1,626 @@
+/** @file colonet_wireless.cpp 
+ *
+ * @brief Implementation of server-side colonet wireless library
+ *
+ * @author Eugene Marinelli
+ *
+ * @bug Only reads when gtkterm is open
+ * @bug Fails to tokenize
+ * @bug Deconstructor not implemented
+ * @bug Nonsense initializations in constructor
+ */
+
+/********************************* Includes **********************************/
+#include <string>
+#include <pthread.h>
+#include <iostream>
+#include <fstream>
+#include <unistd.h>
+#include <fcntl.h>
+#include "colonet_wireless.h"
+
+/******************************* Definitions *********************************/
+#define TIMEOUT_MAX 100
+#define WL_SEND_DELAY 5 //microseconds
+
+//for debug printouts
+#define DEBUG 1
+
+#ifdef DEBUG
+#define dbg_printf(...) printf(__VA_ARGS__)
+#define dbg_fprintf(...) fprintf(__VA_ARGS__)
+#else
+#define dbg_printf(...)
+#define dbg_fprintf(...)
+#endif
+
+typedef struct {
+  MsgHandlerFunction handler;
+  ColonetWireless* cw;
+} ListenerArgs;
+
+/************************* Internal prototypes *******************************/
+static void* listen(void* args);
+
+/**************************** Public functions *******************************/
+ColonetWireless::ColonetWireless(char* wl_port, 
+                                 MsgHandlerFunction message_handler_, 
+                                 char* log_filename_, bool join_token_ring_,
+                                 bool ignore_token_)
+{
+  have_token = false;
+  first_packet_sent = false;
+
+  //FIX THESE INITIALIZATIONS
+  token_src = 255;
+  token_dest = 255;
+  num_robots = 0;
+  connected = false;
+  ignore_token = ignore_token_;
+
+  sprintf(wireless_port, wl_port);
+
+  if (log_filename) {
+    logging_enabled = true;
+    sprintf(log_filename, log_filename_);
+  }
+
+  join_token_ring = join_token_ring_;
+
+  message_handler = message_handler_;
+}
+
+ColonetWireless::~ColonetWireless()
+{
+  //kill listener thread
+  
+
+  //free packets in queues
+  
+}
+
+int ColonetWireless::handle_packet(ColonetPacket* pkt)
+{
+  if (logging_enabled) {
+    /* Log the packet */
+    log_packet(pkt);
+  }
+
+  /* Update what we know about the network based on the packet */
+  update_network_props(pkt);
+
+  /* Received a message */
+  if (message_handler(pkt) < 0) {
+    fprintf(stderr, "%s: message_handler failed\n", __FUNCTION__);
+    return -1;
+  }
+  
+  if ((unsigned char) pkt->token_dest == WL_ERROR_DEST) {
+    /* token_dest is an error - handle it */
+    if (handle_error(pkt) < 0) {
+      fprintf(stderr, "%s: handle_error failed\n", __FUNCTION__);
+      return -1;
+    }
+  } else if(join_token_ring && !connected) {
+    /* We want to join the token ring but we are not connected - join robot 
+     * network */
+    dbg_printf("%s: Trying to join robot network...\n", __FUNCTION__);
+
+    if (join_network(pkt) < 0) {
+      dbg_fprintf(stderr, "%s: join_network failed\n", __FUNCTION__);
+      return -1;
+    }
+  } else {
+
+    if (pkt->token_dest == token_src && join_token_ring && !ignore_token) {
+      /* Received the token - send queued message(s) */
+      dbg_printf("%s: token received\n", __FUNCTION__);
+
+      have_token = true;
+    
+      if (transmit_queued_message() < 0) {
+        fprintf(stderr, "%s: transmit_queued_message failed\n", __FUNCTION__);
+        return -1;
+      } else {
+        if (!first_packet_sent) {
+          dbg_printf("First packet sent.\n");
+          first_packet_sent = true;
+        }
+      }
+    }
+  }
+
+  return 0;
+}
+
+pthread_t* ColonetWireless::run_listener_thread()
+{
+  // pthread_t listener_thread;
+
+  pthread_t* listener_thread = (pthread_t*)malloc(sizeof(pthread_t));
+
+  dbg_printf("Spawning listener thread...\n");
+
+  ListenerArgs* args = new ListenerArgs;
+  args->cw = this;
+
+  if (pthread_create(listener_thread, NULL, listen, args) != 0) {
+    perror("pthread_create");
+    return NULL;
+  }
+
+  return listener_thread;
+}
+
+int ColonetWireless::send(unsigned char msg_dest, unsigned char msg_type, 
+                          unsigned char msg_code, unsigned char* data)
+{
+  /* Create a new packet it and queue it to be sent */
+  ColonetPacket* newpkt = create_packet(token_src, token_dest, msg_dest, 
+                                        msg_type, msg_code, data, num_robots);
+
+  if(newpkt == NULL){
+    fprintf(stderr, "Error: %s - create_packet failed\n", __FUNCTION__);
+    return -1;
+  }
+
+  if (ignore_token) {
+    send_packet(newpkt);
+  } else {
+    outbox.push(newpkt);                
+  }
+
+  return 0;
+}
+
+void ColonetWireless::clear_message_queue(void)
+{
+  while (!outbox.empty()) {
+    outbox.pop();
+  }
+}
+
+/**************************** Private functions ******************************/
+
+/** @brief Analogous to the "SIGNAL" or "ISR" function on the robots.
+ * Listens for bytes on the wireless port and constructs packets based on them.
+ * Not part of the ColonetWireless class since a function pointer must be
+ * passed in starting the thread that runs it (tricky or impossible if it's 
+ * a class function).
+ *
+ * @param args Pointer to arguments.  Can be safely casted to ListenerArgs type
+ * @return NULL
+ */
+static void* listen(void* args)
+{
+  int read_len;
+  int portfd;
+  unsigned char inbuf[128];
+  int no_packet_timeout_count = 0;
+  ColonetPacket* in_pkt;
+
+  /* Extract arguments from args */
+
+  ColonetWireless* cw = ((ListenerArgs*)args)->cw;
+
+  /* Open connection to wireless port */
+  if((portfd = open(cw->wireless_port, O_RDWR)) < 0){
+    perror("open");
+    pthread_exit(NULL);
+  }
+
+  /* loop waiting for messages */
+  while(1){
+    /* Read in some bytes (blocks until bytes are read) */
+    read_len = read(portfd, inbuf, 3);
+
+    if(read_len > 0){
+      /* Read in some bytes - this will always be true if portfd is blocking */
+      /* parse the packet or part of packet */
+      in_pkt = cw->build_packet(inbuf, read_len);
+      
+      if(in_pkt == NULL){
+        /* Packet is not ready yet - go back and read some more bytes */
+        continue;
+      }else{
+        /* Packet is complete */
+        /* close fd so that we can safely write to it in the handler */
+        close(portfd);
+
+        if (cw->handle_packet(in_pkt)) {
+          fprintf(stderr, "%s: Error - handle_packet failed\n", __FUNCTION__);
+        }
+
+        /* reopen wireless port */
+        if(!(portfd = open(cw->wireless_port, O_RDWR))){
+          perror("open");
+          pthread_exit(NULL);
+        }
+      }
+    }else if(read_len == 0){
+      // Note - this won't actually happen if read blocks
+      if(no_packet_timeout_count++ > TIMEOUT_MAX){
+        //Nothing received for a while - try to start a new token ring
+        dbg_printf("Attempting to start a token ring...\n");
+
+        cw->token_src = 0;
+        cw->token_dest = 1;
+        cw->num_robots = 0;
+  
+        ColonetPacket* tmp_pkt = cw->create_packet(cw->token_src, 
+                                                   cw->token_dest, 0, 0, 0, 
+                                                   (unsigned char*) "",
+                                                   cw->num_robots);
+        cw->send_packet(tmp_pkt);
+        free(tmp_pkt);
+      }
+    }else{ //(read_len < 0)
+      //Error
+      perror("read");
+    }
+  }
+
+  pthread_exit(NULL);
+
+  return NULL;
+}
+
+/** @brief Takes some number of bytes and tries to build a packet with them
+ * State of the function is saved between callings, so parts of packets 
+ * can be provided as available
+ *
+ * @param buf Data buffer 
+ * @param len Number of bytes to build with
+ */
+ColonetPacket* ColonetWireless::build_packet(unsigned char* buf, int len)
+{
+  static unsigned char packet_buf[PACKET_SIZE];
+  static int buf_pos = 0;
+
+  /* If this is pointer is returned - will either point to NULL or a complete
+   * packet */
+  ColonetPacket* complete_packet = NULL;
+
+  if (buf_pos >= PACKET_SIZE) {
+    buf_pos = 0;
+  }
+
+  for (int i = 0; i < len; i++) {
+    dbg_printf("%d ", buf[i]);
+
+    switch(buf_pos){
+    case 0: //prefix0
+      if(buf[i] == 'R'){
+        memset(packet_buf, 0, PACKET_SIZE);
+        packet_buf[0] = 'R';
+        buf_pos = 1;
+      }
+      break;
+    case 1: //prefix1
+      if(buf[i] == 'C'){
+        packet_buf[1] = 'C';
+        buf_pos = 2;
+      }else{
+        buf_pos = 0;
+      }
+      break;
+    default: 
+      /* anything except prefix0, prefix1, or checksum */
+      
+      /* Check for R,C - in this case, very likely that we missed a byte */
+      if (i > 0 && buf[i] == 'C' && buf[i-1] == 'R') {
+        packet_buf[0] = 'R';
+        packet_buf[1] = 'C';
+        
+        buf_pos = 2;
+      } else {
+        packet_buf[buf_pos] = buf[i];
+        buf_pos++;
+      }
+      break;
+    case (PACKET_SIZE-1):
+      /* At checksum location */
+      buf_pos = 0;
+      packet_buf[15] = buf[i];
+
+      /* Compute desired checksum */
+      unsigned char sum = 0;
+      for(int j = 2; j < PACKET_SIZE; j++){
+        sum += packet_buf[j];
+      }
+      
+      if(!sum){
+        //Checksum passed
+        dbg_printf("%s: checksum passed\n", __FUNCTION__);
+
+        complete_packet = create_packet(packet_buf[2], packet_buf[3], 
+                                        packet_buf[4], packet_buf[5], 
+                                        packet_buf[6], (packet_buf+7), 
+                                        packet_buf[PACKET_SIZE-2]);
+      }else{
+        dbg_printf("%s: checksum failed\n", __FUNCTION__);
+      }
+
+      break;
+    }
+  }
+
+  return complete_packet;
+}
+
+void ColonetWireless::update_network_props(ColonetPacket* pkt)
+{
+  if(first_packet_sent && pkt->token_dest == token_dest){
+    /* Another robot is sending to our dest - therefore the network
+     * doesn't know about us yet.  Try to register again. */
+    dbg_printf("Disconnected from network\n");
+    dbg_printf("%s: failed to register in network; trying again...\n", 
+               __FUNCTION__);
+    connected = false;
+
+  }
+
+  if(num_robots < pkt->num_robots){    
+    if(token_dest == 0){
+      /* If we were the last robot, we now point to newly added robot */
+      token_dest = num_robots;
+      dbg_printf("%s: token_dest updated to %d\n", __FUNCTION__, token_dest);
+    }
+
+    num_robots = pkt->num_robots;
+
+    dbg_printf("%s: num_robots updated to %d\n", __FUNCTION__, num_robots);
+  }else if(num_robots > pkt->num_robots && first_packet_sent){
+    /* A robot has left the network... hopefully not us */
+    dbg_printf("%s: number of robots decreased to %d\n", __FUNCTION__, 
+               pkt->num_robots);
+
+    num_robots = pkt->num_robots;
+  }
+}
+
+int ColonetWireless::join_network(ColonetPacket* pkt)
+{
+  dbg_printf("Attempting to join network...\n");
+
+  token_src = pkt->num_robots;
+  token_dest = 0;
+  num_robots = pkt->num_robots+1;
+
+  ColonetPacket* newpkt = create_packet(token_src, token_dest, 0, 0, 0, 
+                                        (unsigned char*)"", num_robots);
+  if(newpkt == NULL){
+    fprintf(stderr, "Error: %s - create_packet failed\n", __FUNCTION__);
+    return -1;
+  }
+
+  dbg_printf("JOIN PACKET:\n"
+             "token_src:%d\n"
+             "token_dest:%d\n"
+             "msg_dest:%d\n"
+             "msg_type:%d\n"
+             "msg_code:%d\n"
+             "num_robots:%d\n",
+             newpkt->token_src, newpkt->token_dest, newpkt->msg_dest, 
+             newpkt->msg_type, newpkt->msg_code, newpkt->num_robots);
+  
+  dbg_printf("data: ");
+
+  for(int i = 0; i < PACKET_DATA_LEN; i++){
+    dbg_printf("%d ", newpkt->data[i]);
+  }
+  dbg_printf("\n");
+
+  send_packet(newpkt);
+
+  connected = true;
+  dbg_printf("Connected to network.\n");
+
+  free(newpkt);
+
+  return 0;
+}
+
+int ColonetWireless::transmit_queued_message()
+{
+  ColonetPacket* top_pkt;
+  int ret;
+
+  if(have_token){
+    top_pkt = outbox.front();
+    if(top_pkt == NULL){
+      dbg_printf("%s: no messages to send -- Passing the token.\n", 
+                 __FUNCTION__);
+      /* If no packets need to be sent, just send a blank packet */
+      top_pkt = create_packet(token_src, token_dest, 0, 0, 0, 
+                              (unsigned char*)"", num_robots);
+    }else{
+      outbox.pop();
+    }
+
+    ret = send_packet(top_pkt);
+    free(top_pkt);
+    if(ret < 0){
+      dbg_fprintf(stderr, "%s: send_packet failed\n", __FUNCTION__);
+      return -1;
+    }
+
+    dbg_printf("%s: packet sent\n", __FUNCTION__);
+
+    have_token = false;
+  }
+
+  return 0;
+}
+
+int ColonetWireless::send_packet(ColonetPacket* pkt)
+{
+  int portfd = open(wireless_port, O_RDWR);
+
+  dbg_printf("\nsend packet: \n");
+
+  if (portfd == 0) {
+    return -1;
+  }
+
+  //write(portfd, (unsigned char*)pkt, 16);
+
+  for (int i = 0; i < PACKET_SIZE; i++) {
+    write(portfd, (unsigned char*)pkt+i, 1);
+    usleep(50); //delay here - robot wireless can't handle full data rate...
+    dbg_fprintf(stderr, "%x ", ((unsigned char*)pkt)[i]);
+  }
+  dbg_printf("\n");
+
+  close(portfd);
+
+  return 0;
+}
+
+unsigned char ColonetWireless::compute_checksum(ColonetPacket* pkt)
+{
+  char checksum = 0;
+
+  checksum -= pkt->token_src;
+  checksum -= pkt->token_dest;
+  checksum -= pkt->msg_dest;
+  checksum -= pkt->msg_type;
+  checksum -= pkt->msg_code;
+
+  for(int i = 0; i < PACKET_DATA_LEN; i++){
+    checksum -= pkt->data[i];
+  }
+
+  checksum -= pkt->num_robots;
+
+  return checksum;
+}
+
+ColonetPacket* ColonetWireless::create_packet(unsigned char token_src_, 
+                                              unsigned char token_dest_,
+                                              unsigned char msg_dest, 
+                                              unsigned char msg_type, 
+                                              unsigned char msg_code, 
+                                              unsigned char* data,
+                                              unsigned char num_robots_)
+{
+  ColonetPacket* dest_packet = new ColonetPacket;
+
+  dest_packet->prefix[0] = 'R';
+  dest_packet->prefix[1] = 'C';
+
+  dest_packet->token_src = token_src_;
+  dest_packet->token_dest = token_dest_;
+    
+  dest_packet->msg_dest = msg_dest;
+  dest_packet->msg_type = msg_type;
+  dest_packet->msg_code = msg_code;
+
+  memset(dest_packet->data, 0, PACKET_DATA_LEN);
+  memcpy(dest_packet->data, (char*)data, PACKET_DATA_LEN);
+
+  dest_packet->num_robots = num_robots_;
+  dest_packet->checksum = compute_checksum(dest_packet);
+
+  //printf("Made this packet: \n");
+  //print_packet(dest_packet);
+
+  return dest_packet;
+}
+
+void ColonetWireless::print_packet(ColonetPacket* pkt)
+{
+  int i;
+
+  printf("Prefix: %c%c\n", pkt->prefix[0], pkt->prefix[1]);
+  printf("Token src: %d\n", pkt->token_src);
+  printf("Token dest: %d\n", pkt->token_dest);
+  printf("Msg dest: %d\n", pkt->msg_dest);
+  printf("Msg type: %d\n", pkt->msg_type);
+  printf("Msg code: %d\n", pkt->msg_code);
+
+  printf("Data: ");
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    printf("%d ", pkt->data[i]);
+  }
+  printf("\n");
+  
+  printf("Num robots: %d\n", pkt->num_robots);
+  printf("Checksum: %d\n", pkt->checksum);
+}
+
+int ColonetWireless::handle_error(ColonetPacket* pkt)
+{
+  int dead_robot;
+  int errcode = ((char*)pkt)[WL_ERROR_LOC];
+
+  dbg_printf("%s: Handling error %d\n", __FUNCTION__, pkt->token_dest);
+
+  switch(errcode){ //token_dest 
+  case WL_ERRCODE_ROBOTDEATH:
+    dead_robot = ((char*)pkt)[WL_ERR_DEAD_LOC];
+
+    fprintf(stderr, "Dead robot: %d\n", dead_robot);
+    num_robots--;
+    
+    if(token_src > dead_robot){
+      if(token_src == num_robots){
+        token_src--;
+        token_dest = 0;
+      }else{
+        token_src--;
+        token_dest--;
+      }
+    }
+
+    //ensure that the last robot talks to the 0th one
+    //this won't be set if the LAST robot dies (all robots are < dead)
+    if(token_src == num_robots - 1){
+      token_dest = 0;
+    }
+
+    if(token_src == dead_robot){
+      //you took the place of the dead robot
+      //you start the token ring again
+      ColonetPacket* tmp_pkt = create_packet(token_src, token_dest, 0, 0, 0,
+                                             (unsigned char*)"", num_robots);
+      send_packet(tmp_pkt);
+      free(tmp_pkt);
+    }
+    break;
+  case WL_ERRCODE_NEEDTOCHARGE:
+    fprintf(stderr, "Need to charge error received\n");
+    break;
+  case WL_ERRCODE_CHARGESTATION:
+    fprintf(stderr, "Charge station error received\n");
+    break;
+  }
+    
+  return 0;
+}
+
+/** @brief 
+ *
+ * @param pkt Packet to be logged
+ *
+ * @return 0 on success, -1 on failure
+ */
+int ColonetWireless::log_packet(ColonetPacket* pkt)
+{
+  FILE* logfile = fopen(log_filename, "a");
+
+  if (logfile == NULL) {
+    dbg_printf("%s: Error - fopen %s failed.\n", log_filename, __FUNCTION__);
+    return -1;
+  }
+
+  for (int i = 0; i < PACKET_SIZE; i++) {
+    fprintf(logfile, "%d ", *((unsigned char*)pkt+i));
+  }
+
+  fprintf(logfile, "\n");
+
+  fclose(logfile);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless_test2.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless_test2.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless_test2.cpp	(revision 62)
@@ -0,0 +1,110 @@
+/** @file colonet_wireless_test2.cpp
+ * @brief colonet_wireless_test2 - tests the colonet_wireless library with
+ * manual control.
+ *
+ * @author Eugene Marinelli
+ * @date 2/5/06
+ */
+
+#include <iostream>
+#include <signal.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include "colonet_wireless.h"
+#include "colonet_defs.h"
+
+ColonetWireless* cw;
+
+int msg_handler(ColonetPacket* pkt)
+{
+  printf("Handler!\n");
+  return 0;
+}
+
+char get_mouse()
+{
+  int fd;
+  char buf[10];
+
+  fd = open("/dev/input/mouse0", O_RDONLY);
+
+  read(fd, buf, 1);
+
+  close(fd);
+
+  return buf[0];
+}
+
+void exit_handler(int sig)
+{
+  unsigned char data[10];
+
+  printf("Sending kill packet...\n");
+  cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTORS_OFF, data);
+
+  printf("Exiting...\n");
+
+  sleep(2);
+  exit(0);
+}
+
+int main()
+{
+  unsigned char data[10];
+  char dir;
+  int paused = 0;
+
+  unsigned char motor_back_args[6] = {0, 0, 0, 0xFF, 0};
+  unsigned char motor_forward_args[6] = {0, 1, 0, 0xFF, 0};
+
+  cw = new ColonetWireless(SERIAL_PORT, msg_handler, NULL, true, true);
+
+  signal(SIGINT, exit_handler);
+
+  cw->run_listener_thread();
+
+  while(1){
+    dir = get_mouse();
+
+    usleep(300000);
+
+    printf("%d\n", dir);
+
+    switch (dir) {
+    case 40:
+      /* Forward */
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR1_SET, motor_forward_args);
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR2_SET, motor_forward_args);
+      break;
+    case 8:
+      /* Back */
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR1_SET, motor_back_args);
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR2_SET, motor_back_args);
+      break;
+    case 24:
+      /* Left */
+      //cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTORS_OFF, data);
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR1_SET, motor_forward_args);
+      break;
+    case 56:
+      /* Right */
+      //cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTORS_OFF, data);
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTOR2_SET, motor_forward_args);
+      break;
+    case 9:
+      /* Left click */
+      /* Stop */
+      cw->clear_message_queue();
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, MOTORS_OFF, data);
+      break;
+    case 10:
+      /* Right click */
+      /* Execute first user-defined function */
+      cw->send(GLOBAL_DEST, COLONET_COMMAND, 0xF0, data);
+      break;
+    }
+  }
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless.h
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_wireless/colonet_wireless.h	(revision 62)
@@ -0,0 +1,134 @@
+/** @file colonet_wireless.h
+ *
+ * @brief Wireless library for communicating with colony robots
+ * 
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ *
+ * @bug gtkterm must be running for the library to work...
+ */
+
+/* 
+   NOTES
+   Things colonet server must be able to do with wireless:
+   - Send a commmand/request packet to a specific robot
+   - Accept packets from robots - need a "SIGNAL"-like function and a 
+   message queue
+   - Only send stuff when we have the token
+   - Pass token along to the next robot
+   - Join ad-hoc network automatically
+*/
+
+#ifndef COLONET_WIRELESS_H_
+#define COLONET_WIRELESS_H_
+
+#include <queue>
+#include <colonet_defs.h>
+
+using namespace std;
+
+typedef int(*MsgHandlerFunction)(ColonetPacket*);
+/* takes src, msg_type, req_code, data */
+
+class ColonetWireless {
+ public:
+  /** @brief Constructor - creates a new instance of ColonetWireless 
+   * and initializes values
+   * 
+   * @param wl_port Either SERIAL_PORT or USB_PORT (as defined in COLONET_DEFS)
+   * @param log_filename Path to log file - outputs all raw data on the network
+   * If set to NULL, logging is disabled.
+   * @param msg_handler Function to be called when a packet is received.
+   * Must take a ColonetPacket as an argument (see defn of MsgHandlerFunction)
+   * @param join_token_ring true if server should join the token ring,
+   * false if it should just observe the network
+   * 
+   * @return new ColonetWireless object
+   */
+  ColonetWireless(char* wl_port, MsgHandlerFunction message_handler_, 
+                  char* log_filename_, bool join_token_ring_, 
+									bool ignore_token_);
+
+  /**
+   * @brief Deconstructor - frees queue and other stuff
+   */
+  ~ColonetWireless(void);
+
+  /** @brief Spawns a thread which reads data from the hardware interface 
+   * with the colony (either a dongle or a robot programmed to relay data)
+   * and runs msg_handler when a full packet is received
+   *
+   * @return pointer to the thread
+   */
+  pthread_t* run_listener_thread(void);
+
+  /** @brief Adds a message to the message sending queue.  One message in the
+   * queue is sent each time the server receives the token.  Therefore
+   * there might be a delay on the order of seconds before the packet is 
+   * actually sent.
+   *
+   * @param msg_dest ID of the robot message is being sent to.  To send to 
+   * all robots, use GLOBAL_DEST
+   * @param msg_type Type of message being sent.  Should be either 
+   * COLONET_COMMAND or COLONET_REQUEST
+   * @param msg_code The message code/id telling the robot what to do or 
+   * return.  For example this might be ORB_SET
+   * @param data Pointer to a buffer of data to be sent.  Assumed to 
+   * point to valid data.  An invalid pointer will cause a segfault.
+   *
+   * @return -1 on failure, 0 on success
+   */
+  int send(unsigned char msg_dest, unsigned char msg_type, 
+           unsigned char msg_code, unsigned char* data);
+
+  /** @brief Clears the message queue
+   * @return void
+   */
+  void clear_message_queue(void);
+
+  /** @brief Handles a complete packet.
+   *
+   * @param pkt A complete packet to which we should react
+   *
+   * @return 0 on success, -1 on failure
+   */
+  int handle_packet(ColonetPacket* pkt);
+
+  //the rest of these would ideally be private, but must be accessed by 
+  //the listen function
+  ColonetPacket* create_packet(unsigned char token_src_, 
+                               unsigned char token_dest_, 
+                               unsigned char msg_dest, 
+                               unsigned char msg_type, 
+                               unsigned char msg_code, 
+                               unsigned char* data, unsigned char num_robots_);
+  ColonetPacket* build_packet(unsigned char* buf, int len);
+  int send_packet(ColonetPacket* pkt);
+
+  char wireless_port[80];
+  unsigned char token_src; //id of server in token ring
+  unsigned char token_dest; //id of "dest" robot in token ring
+  unsigned char num_robots;
+
+ private:
+  queue<ColonetPacket*> outbox;
+  bool join_token_ring;
+  MsgHandlerFunction message_handler;
+  bool have_token;
+  bool connected; //whether we are connected to the robot
+  bool first_packet_sent;
+  bool logging_enabled;
+	bool ignore_token;
+  char log_filename[80];
+
+  int transmit_queued_message(void);
+  int join_network(ColonetPacket* pkt);
+  void update_network_props(ColonetPacket* pkt);
+  unsigned char compute_checksum(ColonetPacket* pkt);
+  void print_packet(ColonetPacket* pkt);
+
+  int handle_error(ColonetPacket* pkt);
+  int log_packet(ColonetPacket* pkt);
+};
+
+#endif
Index: branches/charge_board/code/projects/colonet/lib/colonet_wireless/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_wireless/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_wireless/Makefile	(revision 62)
@@ -0,0 +1,27 @@
+# colonet_wireless_test makefile
+
+CC = g++
+CFLAGS = -Wall -Wshadow -Wextra -g
+INCLUDES = ../
+
+all: colonet_wireless_test colonet_wireless_test2
+
+colonet_wireless_test: colonet_wireless_test.o colonet_wireless.o Makefile
+	$(CC) $(CFLAGS) -I ../ -pthread -o colonet_wireless_test colonet_wireless_test.o colonet_wireless.o 
+
+colonet_wireless_test2: colonet_wireless_test2.o colonet_wireless.o Makefile
+	$(CC) $(CFLAGS) -I ../ -pthread -o colonet_wireless_test2 colonet_wireless_test2.o colonet_wireless.o 
+
+colonet_wireless.o: colonet_wireless.cpp colonet_wireless.h
+	$(CC) $(CFLAGS) -I $(INCLUDES) -pthread -c colonet_wireless.cpp
+	ar rc ../libcolonet_wireless.a colonet_wireless.o 
+	ranlib ../libcolonet_wireless.a
+
+colonet_wireless_test.o: colonet_wireless_test.cpp
+	$(CC) $(CFLAGS) -I $(INCLUDES) -pthread -c colonet_wireless_test.cpp
+
+colonet_wireless_test2.o: colonet_wireless_test2.cpp
+	$(CC) $(CFLAGS) -I $(INCLUDES) -pthread -c colonet_wireless_test2.cpp
+
+clean: 
+	rm -rf *o colonet_wireless_test
Index: branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/colonet_dragonfly.c
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/colonet_dragonfly.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/colonet_dragonfly.c	(revision 62)
@@ -0,0 +1,297 @@
+/** @file colonet.c
+ * @brief Colonet library for DRAGONFLY colony robots
+ *
+ * @author Eugene Marinelli
+ * @date 4/17/07
+ * 
+ * @bug Handler registration not tested
+ * @bug Request reponding not implemented - only accepts commands.
+ */
+
+#include <dragonfly_lib.h>
+#include "colonet_dragonfly.h"
+
+typedef struct {
+  unsigned char msgId; //is this necessary?
+  void (*handler)(void);
+} UserHandler;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+/* Internal function prototypes */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf);
+static unsigned int two_bytes_to_int(char high, char low);
+
+/* Public functions */
+int colonet_handle_message(unsigned char robot_id, char* pkt_buf)
+{
+  ColonetPacket pkt;
+  unsigned char* args; //up to 7 char args
+  unsigned int int_args[3]; //up to 3 int (2-byte) args
+
+  packet_string_to_struct(&pkt, pkt_buf);
+
+  if(pkt.msg_dest != GLOBAL_DEST && pkt.msg_dest != robot_id){ 
+    //message not intended for us
+    return 1;
+  }
+
+  args = pkt.data;
+  
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if(pkt.msg_type == COLONET_REQUEST){
+    /* TODO - send back data! */
+
+    switch(pkt.msg_code){
+      //Sharp
+    case READ_DISTANCE:
+      break;
+    case LINEARIZE_DISTANCE:
+      break;
+    case LOG_DISTANCE:
+      break;
+
+
+      //Analog
+    case CALL_ANALOG8:
+      break;
+    case CALL_ANALOG10:
+      break;
+    case WHEEL:
+      break;
+    case BATTERY:
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+      //Dio
+    case DIGITAL_INPUT:
+      break;
+    case BUTTON1_READ:
+      break;
+    case BUTTON2_READ:
+      break;
+
+      //Bumper
+    case DETECT_BUMP:
+      break;
+    }
+  }else if(pkt.msg_type == COLONET_COMMAND){
+    if(pkt.msg_code >= USER_DEFINED_MSG_ID_START && 
+       pkt.msg_code <= USER_DEFINED_MSG_ID_END){
+      if (user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler) {
+        /* Call the user's handler function if it the function's address
+         * is non-zero (has been set) */
+        user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler();
+      }
+
+      return 0;
+    }
+
+    switch(pkt.msg_code){
+    default:
+      printf("%s: Error - message code %d not implemented\n", __FUNCTION__,
+             pkt.msg_code);
+      return -1;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+      
+      //LCD
+    case LCD_INIT:
+      lcd_init();
+      break;
+    case LCD_CLEAR_SCREEN:
+      lcd_clear_screen();
+      break;
+    case LCD_PUTBYTE:
+      lcd_putbyte(args[0]);
+      break;
+    case LCD_PUTCHAR:
+      lcd_putchar((char)args[0]);
+      break;
+    case LCD_PUTSTR:
+      lcd_putstr((char*)args);
+      break;
+    case LCD_GOTOXY: 
+      lcd_gotoxy(int_args[0], int_args[1]);
+      break;
+    case LCD_PUTINT: 
+      lcd_putint(int_args[0]);
+      break;
+    case ORB_INIT:
+      orb_init();
+      break;
+      //Orb
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+    case LED_INIT:
+      break;
+    case LED_USER:
+      break;
+    case ORB_SEND:
+      //orb_send();
+      break;
+      //Motors
+    case MOTORS_INIT:
+      motors_init();
+      break;
+    case MOTOR1_SET:
+      motor1_set(int_args[0], int_args[1]);
+      break;
+    case MOTOR2_SET:
+      motor2_set(int_args[0], int_args[1]);
+      break;
+    case MOTORS_OFF:
+      motors_off();
+      break;
+
+      /*
+    case MOVE:
+      
+      break;
+      */
+
+    case XBEE_INIT:
+      xbee_init();
+      break;
+
+    case XBEE_PUTC:
+      xbee_putc((char)args[0]);
+      break;
+
+    case USB_INIT:
+      usb_init();
+      break;
+
+    case USB_PUTC:
+      usb_putc((char)args[0]);
+      break;
+
+    case PRINTF:
+      printf("%s", pkt.data);
+      break;
+    case KILL_ROBOT:
+      motors_off();
+      buzzer_off();
+      exit(0); //kill the robot
+      break;
+      //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      analog_init();
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+    case OUTPUT_HIGH:
+      output_high(int_args[0]);
+      break;
+    case OUTPUT_LOW:
+      output_low(int_args[0]);
+      break;
+
+      //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    }
+  }else{
+    printf("%s: Error: Invalid colonet message type", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void))
+{
+  if(msgId < USER_DEFINED_MSG_ID_START || msgId > USER_DEFINED_MSG_ID_END){
+    return -1;
+  }
+
+  /* Register this function in the array */
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+/* Private functions */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf)
+{
+  int i;
+  
+  printf("\npacket:");
+  for(i = 0; i < 16; i++){
+    printf("%d ", pkt_buf[i]);
+  }
+
+  printf("\n");
+
+  dest_pkt->prefix[0] = pkt_buf[0];
+  dest_pkt->prefix[1] = pkt_buf[1];
+  dest_pkt->token_src = pkt_buf[2];
+  dest_pkt->token_dest = pkt_buf[3];
+  dest_pkt->msg_dest = pkt_buf[4];
+  dest_pkt->msg_type = pkt_buf[5];
+  dest_pkt->msg_code = pkt_buf[6];
+  
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    dest_pkt->data[i] = pkt_buf[7+i];
+  }
+
+  dest_pkt->num_robots = pkt_buf[PACKET_SIZE-2];
+  dest_pkt->checksum = pkt_buf[PACKET_SIZE-1];
+}
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+static unsigned int two_bytes_to_int(char high, char low)
+{
+  return (((unsigned int)high)<<8) + (unsigned int)low;
+}
Index: branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/Makefile	(revision 62)
@@ -0,0 +1,21 @@
+# colonet_wireless_test makefile
+MCU = atmega128
+F_CPU = 8000000
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+CC = avr-gcc
+CFLAGS = -Wall -Wshadow -Wextra -g -mmcu=$(MCU)
+INCLUDES = -I../../../xfly_lib -I../
+
+all: colonet_dragonfly.o
+
+#colonet_dragonfly: colonet_dragonfly.o Makefile
+#	$(CC) $(CFLAGS) $(INCLUDES) -o colonet_wireless_test colonet_wireless.o
+
+colonet_dragonfly.o: colonet_dragonfly.c colonet_dragonfly.h
+	$(CC) $(CDEFS) $(CFLAGS) $(INCLUDES) -c colonet_dragonfly.c
+	ar rc ../libcolonet_dragonfly.a colonet_dragonfly.o
+	ranlib ../libcolonet_dragonfly.a
+
+clean: 
+	rm -rf *.o
Index: branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/colonet_dragonfly.h
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/colonet_dragonfly.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_dragonfly/colonet_dragonfly.h	(revision 62)
@@ -0,0 +1,34 @@
+/** @file colonet.h
+ * @brief Colonet library for colony robots
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ */
+
+#ifndef COLONET_DRAGONFLY_H_
+#define COLONET_DRAGONFLYH_
+
+#include <colonet_defs.h>
+
+/** @brief Handles colonet packets.  Should be called by parse_buffer 
+ * when it is determined that a colonet message has been received.
+ *
+ * @param robot_id The robot id
+ * @param pkt_buf The packet buffer (e.g. wl_buf)
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_handle_message(unsigned char robot_id, char* packet);
+
+/** @brief Registers a new colonet message handler function.  If a message
+ * with msgId is received, then handler will be called.
+ * 
+ * @param msgId The message id of the handler to be registered.  Must be
+ * between USER_DEFINED_MSG_ID_START and USER_DEFINED_MSG_ID_END
+ * @param handler The function to be called if a colonet packet with message
+ * id msgId is received
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+#endif
Index: branches/charge_board/code/projects/colonet/lib/colonet_defs.h
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_defs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_defs.h	(revision 62)
@@ -0,0 +1,165 @@
+/* Eugene Marinelli, Fan
+ * 10/27/06
+ *
+ * Colonet Definitions - common definitions and structs used in all colonet 
+ * applications
+ */
+
+#ifndef COLONET_DEFS_H_
+#define COLONET_DEFS_H_
+
+//Message types
+#define COLONET_COMMAND 0x0D
+#define COLONET_REQUEST 0x0E
+#define COLONET_RESPONSE 0x0F
+
+//Packet properties
+#define PACKET_DATA_LEN 7
+#define PACKET_SIZE 16
+
+//Packet error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGESTATION 251  //Charging station response to ping
+#define WL_ERR_DEAD_LOC 5
+#define WL_ERROR_DEST 255
+#define WL_ERROR_LOC 4
+
+#define WL_DEFAULT_PAN 3332
+
+typedef struct {
+  unsigned char prefix[2];
+  unsigned char token_src;
+  unsigned char token_dest;
+  unsigned char msg_dest;
+  unsigned char msg_type;
+  unsigned char msg_code;
+  unsigned char data[PACKET_DATA_LEN];
+  unsigned char num_robots;
+  unsigned char checksum;
+} ColonetPacket;
+
+#define SERIAL_PORT "/dev/ttyS0"
+#define USB_PORT "/dev/ttyUSB0"
+
+// Message dests
+#define GLOBAL_DEST 200
+#define MAX_NUM_ROBOTS 7
+#define COLONET_SERVER_RESPONSE_ADDR 201
+
+#define USER_DEFINED_MSG_ID_START 0xF0
+#define USER_DEFINED_MSG_ID_END 0xFF
+#define USER_DEFINED_MSG_TOTAL 0x0F
+
+/* Low level robot commands */
+//BUZZER
+#define BUZZER_INIT 0x00
+#define BUZZER_SET_VAL 0x01
+#define BUZZER_SET_FREQ 0x02
+#define BUZZER_CHIRP 0x03
+#define BUZZER_OFF 0x04
+
+//LCD
+#define LCD_INIT 0x05
+#define LCD_CLEAR_SCREEN 0x06
+#define LCD_PUTBYTE 0x07
+#define LCD_PUTCHAR 0x08
+#define LCD_PUTSTR 0x09
+#define LCD_GOTOXY 0x0A
+#define LCD_PUTINT 0x0B
+
+//ORB
+#define ORB_INIT 0x0C
+#define ORB_SET 0x0D
+#define ORB_SET_COLOR 0x0E
+#define ORB_DISABLE 0x0F
+#define ORB_ENABLE 0x10
+#define ORB_SET_DIO 0x11
+#define LED_INIT 0x12
+#define LED_USER 0x13
+#define ORB_SET_NUM_NS 0x14
+#define ORB_SET_NUM 0x15
+#define ORB_SEND 0x16
+
+//MOTORS
+#define MOTORS_INIT 0x17
+#define MOTOR1_SET 0x18
+#define MOTOR2_SET 0x19
+#define MOTORS_OFF 0x1A
+#define MOVE 0x1B
+#define MOVE_AVOID 0x1C
+
+//SHARP
+#define READ_DISTANCE 0x24
+#define LINEARIZE_DISTANCE 0x25
+#define LOG_DISTANCE 0x26
+#define ENABLE_IR 0x27
+#define DISABLE_IR 0x28
+
+//SERIAL
+#define XBEE_INIT 0x29
+#define XBEE_PUTC 0x2A
+#define XBEE_GETC 0x2B
+
+#define USB_INIT 0x2D
+#define USB_PUTC 0x2E
+#define USB_GETC 0x2F
+
+
+
+//DELAY_MS
+#define DELAY_MS 0x31
+
+//ANALOG
+#define ANALOG_INIT 0x32
+#define SET_ADC_MUX 0x33
+#define ENABLE_ANALOG 0x34
+#define CALL_ANALOG8 0x35
+#define CALL_ANALOG10 0x36
+#define WHEEL 0x37
+#define BATTERY 0x38
+
+//BOM
+#define GETMAXBOM 0x39
+#define BOM_ON 0x3A
+#define BOM_OFF 0x3B
+#define OUTPUT_HIGH 0x3C
+#define OUTPUT_LOW 0x3D
+
+//DIO
+#define DIGITAL_INPUT 0x3E
+#define DIGITAL_OUTPUT 0x3F
+#define BUTTON1_READ 0x41
+#define BUTTON1_WAIT 0x42
+#define BUTTON1_WAIT_LED 0x43
+#define BUTTON2_READ 0x44
+#define BUTTON2_WAIT 0x45
+#define BUTTON2_WAIT_LED 0x46
+
+//WL 
+#define WL_INIT 0x47
+#define PARSE_BUFFER 0x48
+#define WL_SEND 0x49
+
+//BUMPER
+#define DETECT_BUMP 0x50
+
+//Other
+#define PRINTF 0x51
+#define KILL_ROBOT 0x52
+
+
+
+
+/* End low-level robot commands */
+
+
+//Colonet Client commands
+#define MAX_COMMAND_LEN 128
+#define MAX_RESPONSE_LEN 512
+
+#define SEND_TO_ROBOT      0x00
+#define REQUEST_FROM_ROBOT 0x01
+#define RESPONSE_TO_CLIENT_REQUEST 0x02
+
+#endif
Index: branches/charge_board/code/projects/colonet/lib/colonet_firefly+/colonet.c
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_firefly+/colonet.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_firefly+/colonet.c	(revision 62)
@@ -0,0 +1,335 @@
+/** @file colonet.c
+ * @brief Colonet library for colony robots
+
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ * 
+ * @bug Handler registration not tested
+ * @bug Request reponding not implemented - only accepts commands.
+ */
+
+#include <firefly+_lib.h>
+
+#include "colonet.h"
+
+typedef struct {
+  unsigned char msgId; //is this necessary?
+  void (*handler)(void);
+} UserHandler;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+/* Internal function prototypes */
+void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf);
+unsigned int two_bytes_to_int(char high, char low);
+
+/* Public functions */
+int colonet_handle_message(unsigned char robot_id, char* pkt_buf)
+{
+  ColonetPacket pkt;
+  unsigned char* args; //up to 7 char args
+  unsigned int int_args[3]; //up to 3 int (2-byte) args
+
+  packet_string_to_struct(&pkt, pkt_buf);
+
+  if(pkt.msg_dest != GLOBAL_DEST && pkt.msg_dest != robot_id){ 
+    //message not intended for us
+    return 1;
+  }
+
+  args = pkt.data;
+  
+  /* Hack - could be done more 1337ly with casting, but this way we don't have
+   * to worry about little/big endian stuff */
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if(pkt.msg_type == COLONET_REQUEST){
+    switch(pkt.msg_code){
+      //Sharp
+    case READ_DISTANCE:
+      break;
+    case LINEARIZE_DISTANCE:
+      break;
+    case LOG_DISTANCE:
+      break;
+
+      //Serial
+    case SERIAL_GETCHAR:
+      break;
+    case SERIAL_GETCHAR_NB:
+      break;
+    case SERIAL1_GETCHAR:
+      break;
+    case SERIAL1_GETCHAR_NB:
+      break;
+
+      //Analog
+    case ANALOG8:
+      break;
+    case ANALOG10:
+      break;
+    case WHEEL:
+      break;
+    case BATTERY:
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+      //Dio
+    case DIGITAL_INPUT:
+      break;
+    case BUTTON1_READ:
+      break;
+    case BUTTON2_READ:
+      break;
+
+      //Bumper
+    case DETECT_BUMP:
+      break;
+    }
+
+    /* TODO - send back data! */
+
+  }else if(pkt.msg_type == COLONET_COMMAND){
+    if(pkt.msg_code >= USER_DEFINED_MSG_ID_START && 
+       pkt.msg_code <= USER_DEFINED_MSG_ID_END){
+      if (user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler) {
+        /* Call the user's handler function if it the function's address
+         * is non-zero (has been set) */
+        user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler();
+      }
+
+      return 0;
+    }
+
+    switch(pkt.msg_code){
+    default:
+      printf("%s: Error - message code %d not implemented\n", __FUNCTION__,
+             pkt.msg_code);
+      return -1;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+      
+      //LCD
+    case LCD_INIT:
+      lcd_init();
+      break;
+    case LCD_CLEAR_SCREEN:
+      lcd_clear_screen();
+      break;
+    case LCD_PUTBYTE:
+      lcd_putbyte(args[0]);
+      break;
+    case LCD_PUTCHAR:
+      lcd_putchar((char)args[0]);
+      break;
+    case LCD_PUTSTR:
+      lcd_putstr((char*)args);
+      break;
+    case LCD_GOTOXY: 
+      lcd_gotoxy(int_args[0], int_args[1]);
+      break;
+    case LCD_PUTINT: 
+      lcd_putint(int_args[0]);
+      break;
+    case ORB_INIT:
+      orb_init();
+      break;
+      //Orb
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+    case ORB_SET_DIO:
+      orb_set_dio(int_args[0], int_args[1], int_args[2]);
+      break;
+    case LED_INIT:
+      led_init();
+      break;
+    case LED_USER:
+      led_user(int_args[0]);
+      break;
+    case ORB_SEND:
+      //orb_send();
+      break;
+      //Motors
+    case MOTORS_INIT:
+      motors_init();
+      break;
+    case MOTOR1_SET:
+      motor1_set(int_args[0], int_args[1]);
+      break;
+    case MOTOR2_SET:
+      motor2_set(int_args[0], int_args[1]);
+      break;
+    case MOTORS_OFF:
+      motors_off();
+      break;
+
+      /*
+    case MOVE:
+      
+      break;
+      */
+
+      //SERIAL
+    case SERIAL_INIT:
+      serial_init(int_args[0]);
+      break;
+    case SERIAL_PUTCHAR:
+      serial_putchar((char)args[0]);
+      break;
+    case SERIAL1_INIT:
+      serial1_init(int_args[0]);
+      break;
+    case SERIAL1_PUTCHAR:
+      serial1_putchar((char)args[0]);
+      break;
+    case PRINTF:
+      printf("%s", pkt.data);
+      break;
+    case KILL_ROBOT:
+      motors_off();
+      buzzer_off();
+      exit(0); //kill the robot
+      break;
+      //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      analog_init();
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+    case OUTPUT_HIGH:
+      output_high(int_args[0]);
+      break;
+    case OUTPUT_LOW:
+      output_low(int_args[0]);
+      break;
+
+      //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    case BUTTON1_WAIT:
+      button1_wait();
+      break;
+    case BUTTON1_WAIT_LED:
+      button1_wait_led();
+      break;
+    case BUTTON2_WAIT:
+      button2_wait();
+      break;
+    case BUTTON2_WAIT_LED:
+      button2_wait_led();
+      break;
+
+      //WL
+    case WL_INIT:
+      wl_init();
+      break;
+    case PARSE_BUFFER:
+      parse_buffer();
+      break;
+    case WL_SEND:
+      wl_send();
+      break;
+    }
+  }else{
+    printf("%s: Error: Invalid colonet message type", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void))
+{
+  if(msgId < USER_DEFINED_MSG_ID_START || msgId > USER_DEFINED_MSG_ID_END){
+    return -1;
+  }
+
+  /* Register this function in the array */
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+/* Private functions */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf)
+{
+  int i;
+  
+  printf("\npacket:");
+  for(i = 0; i < 16; i++){
+    printf("%d ", pkt_buf[i]);
+  }
+
+  printf("\n");
+
+  dest_pkt->prefix[0] = pkt_buf[0];
+  dest_pkt->prefix[1] = pkt_buf[1];
+  dest_pkt->token_src = pkt_buf[2];
+  dest_pkt->token_dest = pkt_buf[3];
+  dest_pkt->msg_dest = pkt_buf[4];
+  dest_pkt->msg_type = pkt_buf[5];
+  dest_pkt->msg_code = pkt_buf[6];
+  
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    dest_pkt->data[i] = pkt_buf[7+i];
+  }
+
+  dest_pkt->num_robots = pkt_buf[PACKET_SIZE-2];
+  dest_pkt->checksum = pkt_buf[PACKET_SIZE-1];
+}
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+static unsigned int two_bytes_to_int(char high, char low)
+{
+  return (((unsigned int)high)<<8) + (unsigned int)low;
+}
Index: branches/charge_board/code/projects/colonet/lib/colonet_firefly+/colonet.h
===================================================================
--- branches/charge_board/code/projects/colonet/lib/colonet_firefly+/colonet.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/lib/colonet_firefly+/colonet.h	(revision 62)
@@ -0,0 +1,34 @@
+/** @file colonet.h
+ * @brief Colonet library for colony robots
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ */
+
+#ifndef COLONET_H_
+#define COLONET_H_
+
+#include <colonet_defs.h>
+
+/** @brief Handles colonet packets.  Should be called by parse_buffer 
+ * when it is determined that a colonet message has been received.
+ *
+ * @param robot_id The robot id
+ * @param pkt_buf The packet buffer (e.g. wl_buf)
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_handle_message(unsigned char robot_id, char* packet);
+
+/** @brief Registers a new colonet message handler function.  If a message
+ * with msgId is received, then handler will be called.
+ * 
+ * @param msgId The message id of the handler to be registered.  Must be
+ * between USER_DEFINED_MSG_ID_START and USER_DEFINED_MSG_ID_END
+ * @param handler The function to be called if a colonet packet with message
+ * id msgId is received
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/colonet_sniffer/colonetSniffer.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/colonet_sniffer/colonetSniffer.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/colonet_sniffer/colonetSniffer.cpp	(revision 62)
@@ -0,0 +1,293 @@
+/** @file colonetSniffer.cpp
+ * @brief A packet sniffer for the colony network.  Uses the colonet_wireless
+ * library
+ *
+ * @author Eugene Marinelli
+ * @date 2/13/06
+ */
+
+#include <iostream>
+#include <signal.h>
+#include <fcntl.h>
+#include <signal.h>
+
+#include <colonet_wireless.h>
+#include <colonet_defs.h>
+#include <set>
+#include <queue>
+#include <assert.h>
+
+typedef struct robot {
+  int id;
+} robot_t;
+
+static bool monitor_mode;
+static int cur_robot_id;
+static int last_robot_id;
+
+static queue<ColonetPacket*> pkt_queue;
+
+pthread_cond_t monitor_cvar;
+pthread_mutex_t pkt_queue_lock;
+
+void print_robot(robot_t* robot)
+{
+  assert(robot);
+
+  if (robot->id == cur_robot_id) {
+    cout<<" * ";
+  } else if (robot->id == last_robot_id) {
+    cout<<" > ";
+  } else {
+    cout<<"   ";
+  }
+
+  cout<<"robot "<<robot->id<<" ";
+
+  cout<<endl;
+}
+
+int set_contains_id(set<void*> s, int id)
+{
+  for (set<void*>::iterator itr = s.begin(); itr != s.end(); itr++) {
+    if (((robot_t*)*itr)->id == id) {
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+void set_remove_id(set<void*>* s, int id)
+{
+  for (set<void*>::iterator itr = s->begin(); itr != s->end(); itr++) {
+    if (((robot_t*)*itr)->id == id) {
+      s->erase(*itr);
+      return;
+    }
+  }
+}
+
+void* monitor_packets(void* args)
+{
+  static set<void*> robot_set;
+  int sender_id;
+  robot_t* new_robot;
+  ColonetPacket* pkt;
+  int errcode;
+
+  assert(monitor_mode);
+
+  pthread_cond_init(&monitor_cvar, NULL);
+  pthread_mutex_init(&pkt_queue_lock, NULL);
+
+  while (1) {
+    if (pkt_queue.empty()) {
+      pthread_mutex_lock(&pkt_queue_lock);
+      pthread_cond_wait(&monitor_cvar, &pkt_queue_lock);
+    }
+
+    assert(!pkt_queue.empty());
+
+    pkt = pkt_queue.front();
+    pkt_queue.pop();
+
+    pthread_mutex_unlock(&pkt_queue_lock);
+
+    errcode = ((char*)pkt)[WL_ERROR_LOC];
+    sender_id = pkt->token_src;
+    last_robot_id = pkt->token_src;
+    cur_robot_id = pkt->token_dest;
+
+    if (!set_contains_id(robot_set, sender_id)) {
+      assert(new_robot = (robot_t*) malloc(sizeof(robot_t)));
+      new_robot->id = sender_id;
+      robot_set.insert((void*)new_robot);
+    }
+
+    /* Handle errors */
+    if (pkt->token_dest == WL_ERROR_DEST) {
+      switch (errcode) {
+      case WL_ERRCODE_ROBOTDEATH: {
+        int dead_robot = ((char*)pkt)[WL_ERR_DEAD_LOC];
+        set_remove_id(&robot_set, dead_robot);
+
+        for (set<void*>::iterator itr = robot_set.begin(); itr != robot_set.end(); itr++) {
+          if (((robot_t*)*itr)->id > dead_robot) {
+            ((robot_t*)*itr)->id--;
+          }
+        }
+        break;
+      }
+      case WL_ERRCODE_NEEDTOCHARGE:
+        fprintf(stderr, "Need to charge error received\n");
+        break;
+      case WL_ERRCODE_CHARGESTATION:
+        fprintf(stderr, "Charge station error received\n");
+        break;
+      }
+    }
+
+    /* Display */
+    cout<<endl;
+    for (set<void*>::iterator itr = robot_set.begin(); itr != robot_set.end(); itr++) {
+      print_robot((robot_t*)*itr);
+    }
+
+    free(pkt);
+  }
+
+  return NULL;
+}
+
+int msg_handler(ColonetPacket* pkt)
+{
+  ColonetPacket* copy_pkt = (ColonetPacket*) malloc(sizeof(ColonetPacket));
+  assert(copy_pkt);
+
+  memcpy(copy_pkt, pkt, sizeof(ColonetPacket));
+
+  pthread_mutex_lock(&pkt_queue_lock);
+  pkt_queue.push(copy_pkt);
+  pthread_mutex_unlock(&pkt_queue_lock);
+
+  pthread_cond_signal(&monitor_cvar);
+
+  return 0;
+}
+
+void set_xbee_pan(char* port, int pan)
+{
+  int xbee_fd = open(port, O_RDWR);
+  char inbuf[8];
+  char panbuf[16];
+
+  sprintf(panbuf, "ATID %d\r", pan);
+
+  assert(xbee_fd);
+
+  write(xbee_fd, "+++", 3);
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  while (inbuf[0] != 'O') {
+    read(xbee_fd, inbuf, 1);
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  while (inbuf[0] != 'K') {
+    read(xbee_fd, inbuf, 1);
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  while (inbuf[0] != '\r') {
+    read(xbee_fd, inbuf, 1);
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  write(xbee_fd, panbuf, strlen(panbuf));
+
+  read(xbee_fd, inbuf, 1);
+  if (inbuf[0] != 'O') {
+    printf("XBEE ERROR! received %d\n", inbuf[0]);
+    return;
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  if (inbuf[0] != 'K') {
+    printf("XBEE ERROR! received %d\n", inbuf[0]);
+    return;
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  read(xbee_fd, inbuf, 1);
+  if (inbuf[0] != '\r') {
+    printf("XBEE ERROR! received %d\n", inbuf[0]);
+    return;
+  }
+
+  printf(".");
+  fflush(stdout);
+
+  write(xbee_fd, "ATCN\r", 5);
+
+  printf("pan id set!\n");
+
+  close(xbee_fd);
+}
+
+int main(int argc, char** argv)
+{
+  ColonetWireless* cw;
+  pthread_t* wl_thr;
+  pthread_t monitor_thr;
+  int opt;
+  char* log_filename = NULL;
+  char* port = SERIAL_PORT;
+  bool join_network = false;
+  int pan = WL_DEFAULT_PAN;
+	bool ignore_token = false;
+
+  while ((opt = getopt(argc, argv, "l:mhp:ja:")) != -1) {
+    switch(opt) {
+    case 'm':
+      monitor_mode = true;
+      cout<<"Monitoring token\n";
+      break;
+    case 'l':
+      log_filename = optarg;
+      break;
+    case 'h':
+      cout<<"Usage: ./colonetSniffer [-l log_filename] [-m (token monitor)] [-h (help/usage)] [-a pan] [-j join nework] [-i ignore token] [-p port]\n";
+      cout<<"* latest destination\n";
+      cout<<"> latest sender\n";
+
+      return 1;
+      break;
+    case 'p':
+      port = optarg;
+      break;
+    case 'j':
+      join_network = true;
+      break;
+    case 'a':
+      pan = atoi(optarg);
+      break;
+		case 'i':
+			ignore_token = true;
+			break;
+    }
+  }
+
+  if (monitor_mode) {
+    assert(!pthread_create(&monitor_thr, NULL, monitor_packets, NULL));
+  }
+
+  //cout<<"Setting pan to "<<pan<<"...\n";
+  //set_xbee_pan(port, pan);
+
+  cw = new ColonetWireless(port, msg_handler, log_filename, join_network,
+													 ignore_token);
+
+  assert(wl_thr = cw->run_listener_thread());
+  
+  pthread_join(*wl_thr, NULL);
+  free(wl_thr);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/colonet_sniffer/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/colonet_sniffer/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/colonet_sniffer/Makefile	(revision 62)
@@ -0,0 +1,12 @@
+# colonet_wireless_test makefile
+
+CC = g++
+CFLAGS = -Wall -Wshadow -Wextra -g
+
+all: colonetSniffer colonetSniffer.cpp
+
+colonetSniffer: colonetSniffer.cpp ../../lib/libcolonet_wireless.a Makefile
+	$(CC) $(CFLAGS) -I../../lib -I../../lib/colonet_wireless colonetSniffer.cpp -o colonetSniffer -L../../lib -lpthread -lcolonet_wireless 
+
+clean: 
+	rm -rf *.o colonetSniffer
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/lights.h	(revision 62)
@@ -0,0 +1,90 @@
+/*
+lights.h
+
+Contains function prototypes, variables, and pins used by the Orbs and PWM
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+Change Log:
+1.25.07 - KWoo
+	Removed FF+ code. Cleaned up and commented all variables.
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+/***** Port and Pin Definitions ****/
+
+//Orb Ports and Registers
+#define ORB_PORT	PORTC
+#define ORB_DDR		DDRC
+
+//Orb Pins
+#define ORB1_RED	0x00
+#define ORB1_GREEN	0x01
+#define ORB1_BLUE	0x02
+#define ORB2_RED 	0x04
+#define ORB2_GREEN 	0x05
+#define ORB2_BLUE 	0x06
+
+//ORB Colors
+#define RED       0xE0
+#define ORANGE    0xE4
+#define YELLOW    0xE8
+#define LIME      0x68
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0xA6 
+#define PURPLE    0x41
+#define MAGENTA   0xE3
+#define WHITE     0xFE
+#define ORB_OFF   0x00
+
+
+
+#include <avr/interrupt.h>
+
+
+#define ORB_RESET 1025
+
+#define ORBPORT PORTC
+
+#define ORBDDR DDRC
+
+#define ORBMASK 0x77
+
+
+
+/**** Function Prototypes ****/
+//Enables counter and PWM for use with the orb.
+void orb_init(void);
+
+//Sets both orbs to a specified color 
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led);
+//Sets Orb1 to the specified color
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led); 
+//Sets Orb2 to the specified color
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led);
+
+//Sets both orbs to the same color using a color name
+void orb_set_color(int col);
+//Sets orb1 to a color using a color name
+void orb1_set_color(int col);
+//Sets orb2 to a color using a color name
+void orb2_set_color(int col);
+
+//Turns off the PWM and thus the Orbs
+void orb_disable(void);
+//Turns on the PWM and thus the Orbs
+void orb_enable(void);
+
+//Runs through some colors
+void orb_tester(void);
+//Set just one channel
+void orb_set_angle(int servo, int angle);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/motor.c	(revision 62)
@@ -0,0 +1,102 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	PORTA &= 0x0F;
+	DDRA |= 0xF0;
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
+	TCCR1B = _BV(WGM12) | _BV(CS10);
+//	TCCR1A = 0xA1;
+//	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+
+	if(direction == 0) {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x10)
+		{
+		  OCR1A = 0;
+		}	
+		PORTA = (PORTA & 0xCF) | 0x10;
+//		PORTD |= 0x10;
+//		PORTD &= 0xBF;
+	}
+	else {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x20)
+		{
+		  OCR1A = 0;
+		}
+		PORTA = (PORTA & 0xCF) | 0x20;
+//		PORTD |= 0x40;
+//		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+
+
+}
+
+void motor2_set(int direction, int speed) {
+
+	if(direction == 0) {
+//		PORTD |= 0x20;
+//		PORTD &= 0x7F;
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x80)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x80;
+	}
+	else {
+//		PORTD |= 0x80;
+//		PORTD &= 0xDF;
+
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x40)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x40;
+	}
+	OCR1BL = speed;
+
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/motor.h	(revision 62)
@@ -0,0 +1,22 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/colonet_dragonfly.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/colonet_dragonfly.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/colonet_dragonfly.c	(revision 62)
@@ -0,0 +1,379 @@
+/** @file colonet.c
+ * @brief Colonet library for DRAGONFLY colony robots
+ *
+ * @author Eugene Marinelli
+ * @date 4/17/07
+ * 
+ * @bug Handler registration not tested
+ * @bug Request reponding not implemented - only accepts commands.
+ */
+
+#include <dragonfly_lib.h>
+#include <string.h>
+#include "colonet_dragonfly.h"
+
+typedef struct {
+  unsigned char msgId; //is this necessary?
+  void (*handler)(void);
+} UserHandler;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+/* Internal function prototypes */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf);
+static unsigned int two_bytes_to_int(char high, char low);
+static void fill_packet(ColonetPacket* pkt, unsigned char msg_dest, 
+                        unsigned char msg_code, unsigned char* data, 
+                        unsigned char num_robots);
+static unsigned char compute_checksum(ColonetPacket* pkt);
+static void send_packet(ColonetPacket* pkt);
+
+static int colonet_robot_id;
+
+void colonet_set_id(int id)
+{
+  colonet_robot_id = id;
+}
+
+/* Public functions */
+int colonet_handle_message(char* pkt_buf)
+{
+  ColonetPacket pkt;
+  unsigned char* args; //up to 7 char args
+  unsigned int int_args[3]; //up to 3 int (2-byte) args
+
+  packet_string_to_struct(&pkt, pkt_buf);
+
+  if(pkt.msg_dest != GLOBAL_DEST && pkt.msg_dest != colonet_robot_id){ 
+    //message not intended for us
+    return 1;
+  }
+
+  args = pkt.data;
+  
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if(pkt.msg_type == COLONET_REQUEST){
+    printf("got colonet request\n");
+
+    ColonetPacket response_pkt;
+    char response_data[PACKET_DATA_LEN];
+
+    memset(response_data, 0, PACKET_DATA_LEN);
+    memset((char*)&response_pkt, 0, PACKET_SIZE);
+    
+
+    switch(pkt.msg_code){
+      //Sharp
+    case READ_DISTANCE:
+      break;
+    case LINEARIZE_DISTANCE:
+      break;
+    case LOG_DISTANCE:
+      break;
+
+      //Analog
+    case CALL_ANALOG8:
+      break;
+    case CALL_ANALOG10:
+      break;
+    case WHEEL:
+      break;
+    case BATTERY:
+      response_data[0] = battery8();
+      printf("battery life: %d\n", response_data[0]);
+
+      fill_packet(&response_pkt, args[0], BATTERY, response_data, 
+                  ((ColonetPacket*)pkt_buf)->num_robots);
+
+      send_packet(&response_pkt);
+
+      printf("got battery request and sent packet\n");
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+      //Dio
+    case DIGITAL_INPUT:
+      break;
+    case BUTTON1_READ:
+      break;
+    case BUTTON2_READ:
+      break;
+
+      //Bumper
+    case DETECT_BUMP:
+      break;
+    }
+  }else if(pkt.msg_type == COLONET_COMMAND){
+    if(pkt.msg_code >= USER_DEFINED_MSG_ID_START && 
+       pkt.msg_code <= USER_DEFINED_MSG_ID_END){
+      if (user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler) {
+        /* Call the user's handler function if it the function's address
+         * is non-zero (has been set) */
+        user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler();
+      }
+
+      return 0;
+    }
+
+    switch(pkt.msg_code){
+    default:
+      printf("%s: Error - message code %d not implemented\n", __FUNCTION__,
+             pkt.msg_code);
+      return -1;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+      
+      //LCD
+    case LCD_INIT:
+      lcd_init();
+      break;
+    case LCD_CLEAR_SCREEN:
+      lcd_clear_screen();
+      break;
+    case LCD_PUTBYTE:
+      lcd_putbyte(args[0]);
+      break;
+    case LCD_PUTCHAR:
+      lcd_putchar((char)args[0]);
+      break;
+    case LCD_PUTSTR:
+      lcd_putstr((char*)args);
+      break;
+    case LCD_GOTOXY: 
+      lcd_gotoxy(int_args[0], int_args[1]);
+      break;
+    case LCD_PUTINT: 
+      lcd_putint(int_args[0]);
+      break;
+    case ORB_INIT:
+      orb_init();
+      break;
+      //Orb
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+    case LED_INIT:
+      break;
+    case LED_USER:
+      break;
+    case ORB_SEND:
+      //orb_send();
+      break;
+      //Motors
+    case MOTORS_INIT:
+      motors_init();
+      break;
+    case MOTOR1_SET:
+      motor1_set(args[0], args[1]);
+      break;
+    case MOTOR2_SET:
+      motor2_set(args[0], args[1]);
+      break;
+    case MOTORS_OFF:
+      motors_off();
+      break;
+
+
+    case MOVE_AVOID:
+      move_avoid(args[0], args[1], args[2]);
+      break;
+      /*
+    case MOVE:
+      
+      break;
+      */
+
+    case XBEE_INIT:
+      xbee_init();
+      break;
+
+    case XBEE_PUTC:
+      xbee_putc((char)args[0]);
+      break;
+
+    case USB_INIT:
+      usb_init();
+      break;
+
+    case USB_PUTC:
+      usb_putc((char)args[0]);
+      break;
+
+    case PRINTF:
+      printf("%s", pkt.data);
+      break;
+    case KILL_ROBOT:
+      motors_off();
+      buzzer_off();
+      exit(0); //kill the robot
+      break;
+      //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      analog_init();
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+    case OUTPUT_HIGH:
+      output_high(int_args[0]);
+      break;
+    case OUTPUT_LOW:
+      output_low(int_args[0]);
+      break;
+
+      //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    }
+  }else{
+    printf("%s: Error: Invalid colonet message type", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void))
+{
+  if(msgId < USER_DEFINED_MSG_ID_START || msgId > USER_DEFINED_MSG_ID_END){
+    return -1;
+  }
+
+  /* Register this function in the array */
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+/* Private functions */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf)
+{
+  int i;
+  
+  printf("\npacket:");
+  for(i = 0; i < 16; i++){
+    printf("%d ", pkt_buf[i]);
+  }
+
+  printf("\n");
+
+  dest_pkt->prefix[0] = pkt_buf[0];
+  dest_pkt->prefix[1] = pkt_buf[1];
+  dest_pkt->token_src = pkt_buf[2];
+  dest_pkt->token_dest = pkt_buf[3];
+  dest_pkt->msg_dest = pkt_buf[4];
+  dest_pkt->msg_type = pkt_buf[5];
+  dest_pkt->msg_code = pkt_buf[6];
+  
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    dest_pkt->data[i] = pkt_buf[7+i];
+  }
+
+  dest_pkt->num_robots = pkt_buf[PACKET_SIZE-2];
+  dest_pkt->checksum = pkt_buf[PACKET_SIZE-1];
+}
+
+static void fill_packet(ColonetPacket* pkt, unsigned char msg_dest, 
+                        unsigned char msg_code, unsigned char* data, 
+                        unsigned char num_robots)
+{
+  int i;
+
+  pkt->prefix[0] = 'R';
+  pkt->prefix[1] = 'C';
+  pkt->token_src = 0;
+  pkt->token_dest = 0;
+  pkt->msg_dest = msg_dest;
+  pkt->msg_code = msg_code;
+  pkt->msg_type = COLONET_RESPONSE;
+  
+  for (i = 0; i < PACKET_DATA_LEN; i++)
+  {
+    pkt->data[i] = data[i];
+  }
+
+  pkt->num_robots = num_robots;
+  
+  pkt->checksum = compute_checksum(pkt);
+}
+
+static unsigned char compute_checksum(ColonetPacket* pkt)
+{
+  char checksum = 0;
+
+  checksum -= pkt->token_src;
+  checksum -= pkt->token_dest;
+  checksum -= pkt->msg_dest;
+  checksum -= pkt->msg_type;
+  checksum -= pkt->msg_code;
+
+  for (int i = 0; i < PACKET_DATA_LEN; i++)
+    checksum -= pkt->data[i];
+
+  checksum -= pkt->num_robots;
+
+  return checksum;
+}
+
+static void send_packet(ColonetPacket* pkt)
+{
+  int i;
+
+  for (i = 0; i < PACKET_SIZE; i++)
+    xbee_putc(*((unsigned char*)pkt+i));
+}
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+static unsigned int two_bytes_to_int(char high, char low)
+{
+  return (((unsigned int)high)<<8) + (unsigned int)low;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/dragonfly_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/dragonfly_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/dragonfly_lib.c	(revision 62)
@@ -0,0 +1,729 @@
+#include <dragonfly_lib.h>
+
+/* init_dragonfly - Initializes functions based on configuration parameters
+   examples:
+
+   init_dragonfly (0, 0, 0); - just initialize the digital IO (buttons, potentiometer)
+
+   init_dragonfly (ANALOG | SERIAL | BUZZER, C0_C1_ANALOG, BAUD115200); 
+   Initialize ADC and set C0 and C1 as analog inputs.  Initialize serial and set baud rate
+   to 115200 bps.  Initialize the buzzer.
+   
+   init_dragonfly (MOTORS | ORB, 0, 0);
+   Initialize motor driving and the color fading abilities of the ORB. */
+   
+void dragonfly_init(int config) 
+{
+	// Set directionality of various IO pins
+	DDRG &= ~(_BV(PING0)|_BV(PING1));
+	PORTG |= _BV(PING0)|_BV(PING1);
+	
+	if(config & ANALOG) {
+		analog_init();
+	}
+	
+	if(config & COMM) {
+    //Defaults to 115200. Check serial.h for more information.
+    sei();
+    usb_init();
+    xbee_init();
+	}
+	
+	if(config & BUZZER) {
+    sei();
+		buzzer_init();
+	}
+	
+	if(config & ORB) {
+    sei();
+		orb_init();
+	}
+	
+	if(config & MOTORS) {
+		motors_init();
+	}
+	
+	if(config & SERVOS) {
+		sei();
+    //Servos not yet implemented
+    //servo_init();
+	}
+
+	if(config & LCD) {
+		lcd_init();
+	}
+	
+	if(config & (SERVOS | ORB)) {
+    sei();
+    orb_init();
+    //Servos not yet implemented
+	}
+	
+	// delay a bit for stability
+	_delay_ms(1);
+}
+
+void adc_gain_test(void);
+void analog_test(void);
+void batt_test(void);
+void button_test(void);
+void buzzer_test(void);
+void dio_test(void);
+void general_test(void);
+void i2c_test(void);
+void lcd_test(void);
+void motor_test(void);
+void orb_test(void);
+void pullup_test(void);
+void ranger_test(void);
+void reset_test(void);
+void ring_buffer_tester(void);
+void rtc_test(void);
+void rtc_test_pulse(void);
+void serial_test(void);
+void servo_orb_test(void);
+void wl_receive_test(void);
+void wl_send_test(void);
+void wl_send_packet_test(void);
+void move_test(void);
+
+void move_test(void){
+  range_init();
+  motors_init();
+  analog_init();
+  while(1){
+    move_avoid(200,0,50 );
+  }
+}  
+
+void general_test(){
+	int i;
+	dragonfly_init(MOTORS|BUZZER|ORB|USB);
+
+	while(1){
+		if(button1_read()){
+
+			for(i=0;i<17;i++){
+				buzzer_set_val(i);
+				delay_ms(100);
+			}
+			
+			buzzer_off();
+			
+			motor1_set(1, 255);
+			motor2_set(1, 255);
+			
+			delay_ms(3000);
+			
+			motor1_set(1, 200);
+			
+			delay_ms(1000);
+			motor1_set(0, 255);
+			motor2_set(0, 255);
+			
+			delay_ms(3000);
+			motors_off();
+		}
+		if(button2_read()){
+			orb_enable();
+			orb1_set_color(RED);
+			delay_ms(500);
+			orb2_set_color(GREEN);
+			delay_ms(500);
+			orb1_set_color(YELLOW);
+			delay_ms(500);
+			orb2_set_color(CYAN);
+			delay_ms(500);
+			orb1_set_color(WHITE);
+			delay_ms(500);
+			orb2_set_color(WHITE);
+			delay_ms(500);
+			orb_disable();
+			
+		}
+	
+	}
+}
+
+void reset_test() {
+
+    dragonfly_init(ORB|SERIAL);
+    
+    delay_ms(1000);
+    usb_puti((int)DDRE);
+    
+    orb_set_color(RED);
+    delay_ms(1000);
+    
+    orb_set_color(GREEN);
+    delay_ms(1000);
+    
+    DDRE |= 0x80;
+    
+    reset();
+    
+    /*
+    alternate implelmentation using external interrupts
+    maintains register values on reset
+    
+    sei();
+    EIMSK |= 0x80;
+    EICRB |= 0xC0;
+    DDRE |= 0x80;
+    PORTE &= 0x7F;
+    PORTE |= 0x80;
+    */
+    
+    /*
+    should not reach here
+    */
+    
+    orb_set_color(BLUE);
+    delay_ms(1000);
+}
+
+void ring_buffer_tester (void) {
+
+	dragonfly_init(ALL_ON & ~ORB);
+	orb_disable();
+
+	RING_BUFFER_NEW(ring_buffer, 12, int, buffer);
+	RING_BUFFER_INIT(buffer, 12);
+	RING_BUFFER_CLEAR(buffer);
+	
+	for(int i=0;i<10;i++)
+		RING_BUFFER_ADD(buffer, 0);
+	
+	int x;
+	for(int i = 0; i < 100; i++) {
+	
+		RING_BUFFER_REMOVE(buffer, x);
+		
+		RING_BUFFER_ADD(buffer, i);
+		
+		usb_puti(i-x);
+		usb_putc(' ');
+	
+	}
+	
+	usb_puts("\n\rfull? " );
+	usb_puti(RING_BUFFER_FULL(buffer));
+	
+	while(!RING_BUFFER_FULL(buffer))
+		RING_BUFFER_ADD(buffer, 0);
+	
+	usb_puts("\n\rfilling... full? " );
+	usb_puti(RING_BUFFER_FULL(buffer));
+	
+	usb_puts("\n\rempty? " );
+	usb_puti(RING_BUFFER_EMPTY(buffer));
+	usb_puts("\n\rclearing... empty? ");
+	RING_BUFFER_CLEAR(buffer);
+	usb_puti(RING_BUFFER_EMPTY(buffer));
+	
+	usb_puts("\n\r");
+	
+	
+}
+
+#define WL_BAUD BAUD115200
+//serial -- XBEE
+//serial1 -- USB
+
+void wl_send_test(void) {
+
+	int i;
+	
+	usb_init();		//WIRED
+	xbee_init();	//WIRELESS
+	
+	orb_init();
+	sei();
+	
+	while(1) {
+	
+		for(i = 32; i <= 126; i++) {
+			
+			if(i%4) {
+				orb1_set(255, 0, 0);
+			}
+			else {
+				orb1_set(0,0,0);
+			}
+			
+			usb_putc(i);		//wired
+			xbee_putc(i);		//wireless
+			delay_ms(100);
+	
+		}
+
+	}
+
+	return;
+}
+
+void wl_send_packet_test(void) {
+
+	int i;
+	
+	usb_init();		//WIRED
+	xbee_init();	//WIRELESS
+	
+	orb_init();
+	sei();
+	
+	while(1) {
+	
+		for(i = 65; i <= 122; i++) {
+			usb_putc(i);		//wired
+			xbee_putc(i);		//wireless
+      //delay_ms(100);
+		}
+    
+    delay_ms(1000);
+
+	}
+
+	return;
+}
+
+volatile char c;
+volatile char haveNew = 0;
+
+
+void wl_receive_test(void) {
+
+
+	usb_init();
+	xbee_init();
+	orb_init();
+	
+	
+	c = '.';
+	
+  xbee_putc('r');
+	
+	
+	UCSR1B |= _BV(RXCIE);
+	UCSR0B |= _BV(RXCIE);
+	sei();
+	
+	orb1_set(255, 0, 0);		//blue
+
+	
+	while(1)	 {
+	
+		if(haveNew) {
+			xbee_putc(c);
+			haveNew = 0;
+		}
+	}
+	
+	orb1_set(0, 0, 255);		//green
+	
+	while(1);
+
+}
+/*
+ISR(USART1_RX_vect) {
+	
+	c = UDR1;
+	haveNew = 1;
+}
+
+ISR(USART0_RX_vect) {
+	
+	c = UDR0;
+	haveNew = 1;
+}
+*/
+void buzzer_test(void)
+{
+	sei();
+	buzzer_init();
+	unsigned int i = 0;
+	
+	while(1) {
+		buzzer_set_val(i);
+		if (i == 20) {
+			i = 0;
+			delay_ms(250);
+		} else {
+			i++;
+		}
+		
+		delay_ms(100);
+	}
+}
+
+void adc_gain_test(void)
+{
+  analog_init();
+  lcd_init();
+  
+  while(1)
+  {
+    
+    lcd_putint(ADCH);
+    delay_ms(100);
+    lcd_clear_screen();
+  }
+  
+  
+
+}
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+
+void button_test ( void) 
+{
+    dragonfly_init(ALL_ON);
+    
+    
+    move(200,0);
+
+	while(1) {
+	
+	
+		if(button1_read()) {
+			//lcd_putchar('1');
+			usb_putc('1');
+		} else if(button2_read()) {
+			//lcd_putchar('2');
+			usb_putc('2');
+		}
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	//motor1_set(1, 255);
+	//motor2_set(1, 255);
+	move(200,0);
+	
+	delay_ms(5000);
+	
+	//motor1_set(0, 200);
+	move(200,100);
+	
+	delay_ms(5000);
+	
+	//motor2_set(0, 170);
+	move(200,0);
+	
+	delay_ms(5000);
+	motors_off();
+	//LED USER NO LONGER EXISTS
+	//led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+
+void orb_test( void ) {
+	int orbs[12] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	lcd_init();
+	orb_init();
+	sei();
+	orb2_set(254, 253, 252);
+	orb1_set(251, 250, 249);
+	while(1) {
+	
+		orb_set_color(orbs[orb_select]);
+		/*orb_set1(251, 250, 249);
+		delay_ms(2000);
+		orb_set1(255, 1,2);
+		delay_ms(1000);
+		orb_set1(1, 255, 2);
+		delay_ms(1000);
+		orb_set1(1, 2, 255);
+		*/
+		delay_ms(3000);
+		
+		orb_select++;
+		
+		
+		
+		if(orb_select == 13) {
+			orb_disable();
+			delay_ms(2000);
+			orb_enable();
+			orb_select = 0;
+		}
+	
+	/*
+		for (int i = 0; i < 256; i++) {
+			for (int j = 0; j < 256; j++) {
+				for (int k = 0; k < 256; k++) {
+					orb_set(i, j, k);
+				}
+			}
+		}
+	*/
+	}
+	return;
+
+}
+
+void servo_orb_test( void ) {
+//	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	sei();
+	orb_set_angle(1,250);
+	orb_set_angle(2,250);
+	orb_set_angle(4,0);
+	orb_set_angle(5,0);
+	orb_set_angle(6,0);
+
+	while(1) {
+	
+		//orb_set_color(orbs[orb_select]);
+		
+		orb_set_angle(0,orb_select+1);
+	//	orb_set_angle(1,orb_select+1);
+	//	orb_set_angle(2,orb_select+1);
+		delay_ms(50);
+		orb_select++;
+		
+		
+		
+		if(orb_select == 255) {
+			
+			orb_select = 0;
+		}
+	
+	/*
+		for (int i = 0; i < 256; i++) {
+			for (int j = 0; j < 256; j++) {
+				for (int k = 0; k < 256; k++) {
+					orb_set(i, j, k);
+				}
+			}
+		}
+	*/
+	}
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i, j;
+	lcd_init();
+	
+	for(i = 32,j = 1; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+        if(j > 50) {
+            lcd_clear_screen();
+            j = 0;
+        }
+        j++;
+	}
+	
+	
+	return;
+	
+}
+
+void serial_test( void ) {
+	int i;
+	
+	usb_init();
+
+	for(i = 32; i <= 126; i++) {
+		usb_putc(i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+  usb_init();
+
+	analog_init();
+
+	while(1){
+    usb_puti(battery8());
+    usb_putc(' ');
+		delay_ms(10000);
+	}
+}
+
+
+void analog_test(void){
+  //int i;
+  analog_init();
+  usb_init();
+  range_init();
+  usb_puts(" information:\n");
+  while(1){
+    printAllBoms();
+    /*for(i=0;i<16;i++){
+      digital_output(MONK0,i&1);
+      digital_output(MONK1, (i>>1)&1);
+      digital_output(MONK2, (i>>2)&1);
+      digital_output(MONK3, (i>>3)&1);
+      usb_puts("Bom ");
+      usb_puti(i);
+      usb_puts(": ");
+      usb_puti(analog8(MONKI));
+      usb_puts("\n\r");
+    }*/
+  
+    /*for(i=1;i<8;i++){
+      usb_puts("Analog Ext ");
+      usb_puti(i);
+      usb_puts(":  ");
+      usb_puti(analog8(i));
+      usb_puts("\n\r");
+    }
+    
+    usb_puts("IR1 val: ");
+    usb_puti(read_distance(IR1));
+    usb_puts("\n\rIR2 val: ");
+    usb_puti(read_distance(IR2));
+    usb_puts("\n\rIR3 val: ");
+    usb_puti(read_distance(IR3));
+    usb_puts("\n\rIR4 val: ");
+    usb_puti(read_distance(IR4));
+    usb_puts("\n\rIR5 val: ");
+    usb_puti(read_distance(IR5));
+    */
+    delay_ms(2000);
+  }
+}
+
+void dio_test()
+{
+	while(1)
+	{
+		digital_output(_PIN_E5,1);
+		delay_ms(1000);
+		digital_output(_PIN_E5,0);
+		delay_ms(1000);
+	}
+}
+
+void rtc_test_pulse() {
+	usb_putc('s');
+}
+
+void rtc_test() {
+	sei();
+	usb_init();
+	usb_putc('a');
+	rtc_init(HALF_SECOND, &rtc_test_pulse);
+}
+
+#define RECEIVE 1
+
+#define MY_ADDR (RECEIVE == 1 ? 0x01 : 0x02)
+#define TARGET_ADDR (RECEIVE == 1 ? 0x02 : 0x01)
+
+void i2c_test() {
+  char c = 0;
+  char i = 0;
+  
+  sei();
+  i2c_init(MY_ADDR);
+  usb_init();
+
+  usb_putc('5');
+  delay_ms(1000);
+  
+  while(1) {
+    if (RECEIVE) {
+      while(c != 'z') {
+        if(!i2c_getc(&c)) {
+          usb_putc(c);
+          usb_putc(' ');
+        }
+      }
+    } else {
+    while(i < 26) {
+      if(!i2c_putc(TARGET_ADDR, i + 0x61))
+        i++;
+      }
+    }
+  
+    delay_ms(1000);
+  
+    if (!RECEIVE) {
+      while(c != 'z') {
+        if(!i2c_getc(&c)) {
+          usb_putc(c);
+          usb_putc(' ');
+        }
+      }
+    } else {
+      while(i < 26) {
+        if(!i2c_putc(TARGET_ADDR, i + 0x61))
+          i++;
+      }
+    }
+    
+    c = 0;
+    i = 0;
+  }
+  while(1);
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/colonet_dragonfly.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/colonet_dragonfly.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/colonet_dragonfly.h	(revision 62)
@@ -0,0 +1,38 @@
+/** @file colonet.h
+ * @brief Colonet library for colony robots
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ */
+
+#ifndef COLONET_DRAGONFLY_H_
+#define COLONET_DRAGONFLYH_
+
+#include <colonet_defs.h>
+
+/** @brief Handles colonet packets.  Should be called by parse_buffer 
+ * when it is determined that a colonet message has been received.
+ *
+ * @param robot_id The robot id
+ * @param pkt_buf The packet buffer (e.g. wl_buf)
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_handle_message(char* packet);
+
+/** @brief Registers a new colonet message handler function.  If a message
+ * with msgId is received, then handler will be called.
+ * 
+ * @param msgId The message id of the handler to be registered.  Must be
+ * between USER_DEFINED_MSG_ID_START and USER_DEFINED_MSG_ID_END
+ * @param handler The function to be called if a colonet packet with message
+ * id msgId is received
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+
+void colonet_set_id(int id);
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/i2c.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/i2c.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/i2c.c	(revision 62)
@@ -0,0 +1,125 @@
+/* I2C.c
+
+*/
+
+#include <avr/interrupt.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+#include "ring_buffer.h"
+
+
+static int start_flag;
+RING_BUFFER_NEW(i2c_buffer, 64, char, i2c_write_buff, i2c_addr_buff, i2c_read_buff);
+
+void i2c_init(char address) {
+	// Enable I2C and turn on the interrupt
+  //TWCR = 0;
+  
+  /* initialize the buffers */
+  RING_BUFFER_CLEAR(i2c_write_buff);
+  RING_BUFFER_CLEAR(i2c_addr_buff);
+  RING_BUFFER_CLEAR(i2c_read_buff);
+  
+	TWCR =  (_BV(TWEA) | _BV(TWEN) | _BV(TWIE));
+
+  //Set bit rate 12 = 100kbit/s
+  TWBR = 0x0C;
+    
+	TWAR = (address << 1);	//0b0000001 address, 0 for global commands to be off
+	
+  //usb_putint(TWAR);
+  //i2cTXFlag = 0;
+  //i2cRXFlag = 0;
+}
+
+char i2c_putc(char dest, char data) {
+  if(RING_BUFFER_FULL(i2c_write_buff))
+    return -1;
+  
+  cli();
+  RING_BUFFER_ADD(i2c_write_buff, data);
+  RING_BUFFER_ADD(i2c_addr_buff, dest << 1);
+  sei();
+  
+	//Start bit
+  if(!start_flag) {
+    start_flag = 1;
+    TWCR |= _BV(TWSTA);
+    TWCR |= _BV(TWINT);
+  }
+  
+  return 0;
+}
+
+char i2c_getc(char * c) {
+  if(RING_BUFFER_EMPTY(i2c_read_buff))
+    return -1;
+  else
+    RING_BUFFER_REMOVE(i2c_read_buff, *c);
+  
+  return 0;
+}
+ 
+ISR(TWI_vect) {
+  static char data_to_send;
+  static char addr_to_send = -1;
+  char addr, statusCode;
+  
+    //Get status code (only upper 5 bits)
+    statusCode = (TWSR & 0xF8);
+  
+  switch (statusCode) {
+    //Start sent successfully
+    case TW_START:
+    case TW_REP_START:
+      //Send address and write
+      //ring_buffer will not be empty
+      RING_BUFFER_REMOVE(i2c_addr_buff, addr_to_send);
+      RING_BUFFER_REMOVE(i2c_write_buff, data_to_send);
+      
+      TWDR = addr_to_send; /* first send the address */
+      /* we will send the data next time around */
+      
+      //Turn off start bits
+      TWCR &= ~_BV(TWSTA);
+      break;
+    //Address sent successfully
+    case TW_MT_SLA_ACK:
+      //Send byte
+      TWDR = data_to_send;
+      break;
+    //Packet complete, close line
+    case TW_MT_DATA_ACK:
+      if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+        RING_BUFFER_PEEK(i2c_addr_buff, addr);
+        if(addr == addr_to_send) {
+          RING_BUFFER_REMOVE(i2c_addr_buff, addr);
+          RING_BUFFER_REMOVE(i2c_write_buff, TWDR);
+          break;
+        }
+        else { /* no more bytes to this addr, bytes to send to new addr */
+          /* doing the start signal again */
+          TWCR |= _BV(TWSTA);
+          break;
+        }
+      }
+      
+      /* there are no bytes to send */
+      TWCR |= _BV(TWSTO);
+      start_flag = 0;
+      
+      break;
+    case TW_SR_SLA_ACK:
+      break;
+    case TW_SR_DATA_ACK:
+      if(!RING_BUFFER_FULL(i2c_read_buff))
+        RING_BUFFER_ADD(i2c_read_buff, TWDR);
+      break;
+    case TW_SR_STOP:
+      break;
+  }
+      
+  TWCR |= _BV(TWINT);
+	
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/robot_slave.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/robot_slave.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/robot_slave.c	(revision 62)
@@ -0,0 +1,37 @@
+/**
+ * Eugene Marinelli
+ * 4/5/07
+ *
+ * Robot slave program -- just listens for packets
+ */
+
+#include "dragonfly_lib.h"
+#include "wl_adhoc.h"
+#include <stdio.h>
+#include <string.h>
+
+int main(void)
+{
+  orb_init();
+  orb_enable();
+  usb_init();
+  xbee_init();
+  wl_init();
+  motors_init();
+  analog_init();
+
+  orb_set_color(GREEN);
+  fprintf(usb_fd, "test ");
+	/*
+  UCSR1B |= _BV(RXCIE);
+  sei();
+	*/
+
+  colonet_set_id(0);
+
+  while (1) {
+    parse_buffer();
+  }
+  
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/serial.c	(revision 62)
@@ -0,0 +1,190 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	authors: Robotics Club, Colony Project, pkv
+	much code taken from FWR's library, author: Tom Lauwers
+*/
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+/* usb_init() - sets up AVR for communication over the usb serial port */
+void usb_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (USB_BAUD == 115200)
+    UBRR0H = 0x00;
+    UBRR0L = 8;
+    UCSR0A |= _BV(U2X0);
+  #elif (USB_BAUD == 9600)
+    UBRR0H = 0x00;
+    UBRR0L = 107;
+    UCSR0A |= _BV(U2X0);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+  /*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    usb_fd = fdevopen(usb_putc, usb_getc);
+  #endif
+}
+
+/* xbee_init() - sets up AVR for communication over the xbee serial port */
+void xbee_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (XBEE_BAUD == 115200)
+    UBRR1H = 0x00;
+    UBRR1L = 8;
+    UCSR1A |= _BV(U2X1);
+  #elif (XBEE_BAUD == 9600)
+    UBRR1H = 0x00;
+    UBRR1L = 107;
+    UCSR1A |= _BV(U2X1);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+	//Enable receiver and transmitter
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	// Set frame format: 8data, 1stop bit, asynchronous normal mode
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    xbee_fd = fdevopen(xbee_putc, xbee_getc);
+  #endif
+}
+
+/* usb_putc(c) - waits until the usb serial tx buffer is clear, then 
+  puts the character c into the buffer */
+int usb_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR0A, UDRE0);
+	
+  // Load buffer with your character
+  UDR0 = c;
+  return 0;
+}
+
+/* xbee_putc(c) - waits until the xbee serial tx buffer is clear, then 
+  puts the character c into the buffer */
+int xbee_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR1A, UDRE1);
+	
+  // Load buffer with your character
+  UDR1 = c;
+  return 0;
+}
+
+/* usb_puts(c) - writes each character from the string to the usb */
+int usb_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		usb_putc(*t);
+		t++;
+	}
+  return 0;
+}
+
+
+/* usb_getc() - waits until the usb serial rx buffer is not empty, then 
+  returns the first character in the buffer */
+int usb_getc(void)
+{
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+	return UDR0;
+}
+
+/* xbee_getc() - waits until the xbee serial rx buffer is not empty, then 
+  returns the first character in the buffer */
+int xbee_getc(void)
+{
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+	return UDR1;
+}
+
+/* usb_getc_nb(*c) - checks if the usb serial rx buffer is empty or not:
+  -If it is empty, c is unchanged and -1 is returned.  
+  -If is not empty, the first character in the buffer is loaded into c,
+    and 0 is returned */
+int usb_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR0A & _BV(RXC0)) {
+    // Read the receive buffer
+    (*c) = UDR0;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+/* xbee_getc_nb(*c) - checks if the xbee serial rx buffer is empty or not:
+  -If it is empty, c is unchanged and -1 is returned.  
+  -If is not empty, the first character in the buffer is loaded into c,
+    and 0 is returned */
+int xbee_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR1A & _BV(RXC1)) {
+    // Read the receive buffer
+    (*c) = UDR1;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+
+/*
+prints an int to serial
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+uses usb_putc
+*/
+int usb_puti(int value ) {
+	unsigned char usb_data[6]={'0','0','0','0','0','0' }, position=sizeof(usb_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { usb_putc('-'); value=-value; }    
+        do { position--; *(usb_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(usb_data)-1);position++)
+          {
+            
+            usb_putc(usb_data[position]);
+          }
+
+	return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/dragonfly_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/dragonfly_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/dragonfly_lib.h	(revision 62)
@@ -0,0 +1,54 @@
+/*
+dragonfly_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+
+// Configuration definitions
+#define ANALOG 0x01
+#define SERIAL 0x02
+#define USB    0x02
+#define COMM   0x02
+#define ORB    0x04
+#define MOTORS 0x08
+#define SERVOS 0x10
+#define I2C    0x20
+#define BUZZER 0x40
+#define LCD	   0x80
+#define ALL_ON 0xFF
+
+// initializes the board with the functions specified by config
+void dragonfly_init(int config);
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+#include <i2c.h>
+#include <ring_buffer.h>
+#include <reset.h>
+#include <math.h>
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/buzzer.c	(revision 62)
@@ -0,0 +1,73 @@
+/*
+  buzzer.c - Contains the functions necessary for running the buzzer
+  
+  author: Robotics Club, Colony Project
+  
+  much taken from FWR's firefly library (author: Tom Lauwers)
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+//NOTE: This is mostly handled by buzzer_Set_val for now
+	// Set pin B7 to output - B7 is buzzer pin
+//	DDRB |= _BV(DDB7);
+	
+		
+	//Fast PWM Mode, Clear OCR0 on compare match and set at bottom, clock/64
+//	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+	DDRB |= _BV(DDB7);
+  OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest 
+// buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0xBF;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/i2c.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/i2c.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/i2c.h	(revision 62)
@@ -0,0 +1,8 @@
+#ifndef _I2C_H_
+#define _I2C_H_
+
+void i2c_init(char address);
+char i2c_putc(char dest, char data);
+char i2c_getc(char * c);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/serial.h	(revision 62)
@@ -0,0 +1,61 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+    usb_*() -> UART0
+    xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+    #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+#define USB_BAUD 115200
+#endif
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+#define XBEE_BAUD 115200
+#endif
+
+#include <stdio.h>
+FILE *usb_fd;  //For use with fprintf() and related stdio functions
+FILE *xbee_fd;  //For use with fprintf() and related stdio functions
+
+void usb_init(void);
+int usb_putc(char c);
+int usb_getc(void);
+int usb_getc_nb(char *c);
+int usb_puts(char *s);
+int usb_puti(int value);
+
+void xbee_init(void);
+int xbee_putc(char c);
+int xbee_getc(void);
+int xbee_getc_nb(char *c);
+int xbee_puts(char *s);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/buzzer.h	(revision 62)
@@ -0,0 +1,32 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/localization.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/localization.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/localization.c	(revision 62)
@@ -0,0 +1,83 @@
+#include "localization.h"
+
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/math.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/math.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/math.c	(revision 62)
@@ -0,0 +1,10 @@
+#include "math.h"
+
+int abs_int (int x) {
+
+  if(x < 0)
+    return -x;
+    
+  return x;
+
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/Makefile	(revision 62)
@@ -0,0 +1,519 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik RouleauF
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = robot_slave
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+#DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = /home/eugene/Robotics/Colony/roboclub_repository/svn/colony/code/colonet/lib/ ../../lib ../../lib/colonet_dragonfly/
+#$(COLONYROOT)/code/
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+CDEFS += -DUSE_STDIO
+
+
+# Place -I options here
+CINCS = 
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) # -lcolonet_dragonfly 
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB1 #com4
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/ttyUSB0
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = bash
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) 
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/localization.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/localization.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/localization.h	(revision 62)
@@ -0,0 +1,24 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+typedef struct{
+  //actual row of sensor values -- need to be able to have up to
+  //max_robots
+  unsigned char row[MAX_ROBOTS];
+  //actual length of the row
+  unsigned char len;
+  //'index' value of the row -- which robot it's for
+  unsigned char row_num;
+  
+} SensorRow;
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, 
+			     int NUM_BOTS);
+ 
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/math.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/math.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/math.h	(revision 62)
@@ -0,0 +1,6 @@
+#ifndef _MATH_H_
+#define _MATH_H_
+
+int abs_int(int x);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/servo.c	(revision 62)
@@ -0,0 +1,213 @@
+#include "servo.h"
+
+
+#define SERVO_COUNT 16	//please dont change this, or bad things might happen
+
+
+
+struct SERVO_NODE {
+   uint8_t num;
+   uint16_t angle;
+};
+
+struct SERVO_CHANGE {
+   uint16_t port_val;
+   uint16_t split_time_period;
+};
+
+
+struct SERVO_STATUS_STRUCT {
+   struct SERVO_NODE servos[SERVO_COUNT];
+   uint16_t servo_angles[SERVO_COUNT];
+   struct SERVO_CHANGE changes[SERVO_COUNT+1];
+   uint8_t change_count;
+   uint16_t ms;
+   uint8_t new_angles;
+   uint8_t in_pulse;
+   uint8_t current_servo;
+
+} SERVO_STATUS;
+
+
+void servo_sort(void);
+void servo_setup_pulse(void);
+void servo_set_next_interrupt(uint16_t ticks, struct SERVO_CHANGE *sn);
+
+
+
+
+SIGNAL (SIG_OUTPUT_COMPARE3B){
+
+   if (SERVO_STATUS.in_pulse) {
+   
+		//pull the correct ones down
+      SERVOPORT1 &= (~SERVOMASK1)|SERVO_STATUS.changes[SERVO_STATUS.current_servo].port_val;
+      SERVOPORT2 &= (~SERVOMASK2)|(SERVO_STATUS.changes[SERVO_STATUS.current_servo].port_val >> 8);
+
+      ++SERVO_STATUS.current_servo; //now look at next servo
+
+      if (SERVO_STATUS.current_servo < SERVO_STATUS.change_count) { //if it isnt the end...
+	  
+			//setup timer for next pull down
+         OCR3B = SERVO_STATUS.changes[SERVO_STATUS.current_servo].split_time_period;
+		 TCNT3 = 0;
+     }
+      else { //we are done with these pulses
+//         SERVO_STATUS.in_pulse = 0;
+//         SERVO_STATUS.ms = 0;
+//         OCR3B += SERVO_MS; //NOTE--this might mean the negative width is a function of max pos width
+//		 TCNT3 = 0;
+		servo_setup_pulse();
+      }
+
+   }
+   else { //we are between pulses
+      ++SERVO_STATUS.ms;  //increment ms counter
+
+      if (SERVO_STATUS.ms >= SERVO_PERIOD) { //see how many ms have passed
+         servo_setup_pulse(); //Seems like we could do this while not on the clock, but who knows
+      }
+      else {
+         OCR3B = SERVO_MS;  //go another ms
+		 TCNT3 = 0;
+         
+      }
+   }
+}
+
+
+
+void servo_init(void) {
+   int i;
+   uint8_t mysreg;
+   
+   SERVODDR1 |= SERVOMASK1;	//all outputs
+   SERVODDR2 |= SERVOMASK2;
+
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+   for (i = 0; i < SERVO_COUNT; ++i) {
+      SERVO_STATUS.servos[i].num = i;
+      SERVO_STATUS.servos[i].angle = 127;
+      SERVO_STATUS.servo_angles[i] = 127;
+   }
+
+   SERVO_STATUS.ms = 0;
+   SERVO_STATUS.new_angles = 1;
+   SERVO_STATUS.in_pulse = 0;
+   SERVO_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C=0;
+	TCNT3=0;
+	ETIMSK |= _BV(OCIE3B);
+	OCR3B = SERVO_MS;
+
+	SREG=mysreg;
+}
+
+void servo_set_angle(int servo, int angle) {
+	uint8_t mysreg;
+	if(servo>=8){ //2nd port flipped (on avrxbee at least)
+		servo= 23-servo;
+	}
+   if (SERVO_STATUS.servo_angles[servo] != angle) {
+	  mysreg=SREG;
+	  cli();
+      SERVO_STATUS.servo_angles[servo] = angle;
+      SERVO_STATUS.new_angles = 1;
+	  SREG=mysreg;
+   }
+}
+
+
+void servo_sort(void) {
+   int done = 0, i;
+   
+   while (! done) {
+      done = 1;
+
+      for (i = 0; i < SERVO_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+         if (SERVO_STATUS.servos[i].angle > SERVO_STATUS.servos[i+1].angle) {
+            SERVO_STATUS.servos[i].angle ^= SERVO_STATUS.servos[i+1].angle;
+            SERVO_STATUS.servos[i+1].angle ^= SERVO_STATUS.servos[i].angle;
+            SERVO_STATUS.servos[i].angle ^= SERVO_STATUS.servos[i+1].angle;
+
+            SERVO_STATUS.servos[i].num ^= SERVO_STATUS.servos[i+1].num;
+            SERVO_STATUS.servos[i+1].num ^= SERVO_STATUS.servos[i].num;
+            SERVO_STATUS.servos[i].num ^= SERVO_STATUS.servos[i+1].num;
+
+            done = 0;
+         }
+      }
+   }
+}
+
+void servo_setup_pulse(void) {
+   int i;
+   uint16_t my_port;
+   uint16_t sum = 0;
+   uint16_t split_time;
+
+   my_port = 0xffff; //all on
+
+   if (SERVO_STATUS.new_angles) {
+
+      SERVO_STATUS.change_count = 0;
+
+      for (i = 0; i < SERVO_COUNT; ++i) {
+         SERVO_STATUS.servos[i].angle = SERVO_STATUS.servo_angles[SERVO_STATUS.servos[i].num];
+      }
+
+      servo_sort();
+      SERVO_STATUS.new_angles = 0;
+
+      for (i = 0; i < SERVO_COUNT; ++i) {
+         split_time = /*SERVO_MIN + ((((((long int)(SERVO_MAX-SERVO_MIN)) >> 3) ) *
+                                  SERVO_STATUS.servos[i].angle) >> 5) */SERVO_STATUS.servos[i].angle - sum;
+         my_port &= ~_BV(SERVO_STATUS.servos[i].num);
+         for (; i < SERVO_COUNT - 1 && SERVO_STATUS.servos[i].angle == SERVO_STATUS.servos[i+1].angle; ++i) {
+            my_port &= ~_BV(SERVO_STATUS.servos[i+1].num);
+         }
+		 
+         SERVO_STATUS.changes[SERVO_STATUS.change_count].port_val = my_port;
+         servo_set_next_interrupt(split_time, &SERVO_STATUS.changes[SERVO_STATUS.change_count]);
+         
+		 ++SERVO_STATUS.change_count;
+		 
+         sum += split_time;
+      }
+
+      SERVO_STATUS.changes[SERVO_STATUS.change_count].port_val = my_port;
+      servo_set_next_interrupt(SERVO_RESET - split_time, &SERVO_STATUS.changes[SERVO_STATUS.change_count]);
+
+      ++SERVO_STATUS.change_count;
+
+   }
+
+
+
+   SERVO_STATUS.current_servo = 0;
+   SERVO_STATUS.in_pulse = 1;
+
+
+   SERVOPORT1 |= SERVOMASK1;
+   SERVOPORT2 |= SERVOMASK2;
+
+	OCR3B = SERVO_STATUS.changes[0].split_time_period;
+	TCNT3=0;
+}
+
+void servo_set_next_interrupt(uint16_t ticks, struct SERVO_CHANGE *sn) { 
+	//this function is a holdover from when we used a worse clock. 
+
+      (*sn).split_time_period = ticks;
+
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/time.c	(revision 62)
@@ -0,0 +1,134 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+Change Log:
+	2.5.07 - Kevin
+		Aaron fixed the orb/servo code and made them use timer3 but compare registers B and C. He hard set the prescaler
+		to 8 so the RTC broke. Changed it so that we use a 8 prescaler which sets the compare match at 1/16th of a second.
+		You now count how many 16ths of a second you want until you trigger your actual interrupt. Works. Changed defines
+		for time so you can still call rtc_init with a scale but now it is defined in terms of actual time like second, quarter_second
+		etc. Read that section in the time.h file for more information. Tested and works, though the clock drifts more than
+		it used to
+	1.30.07 - Kevin
+		Modified the clock to run on timer3 on the Dragonfly. Works with decent accuracy. Using a prescaler of 256
+	the timer counts up to a precomputer value which will trigger an interrupt and reset the timer. Multiples of
+	256 change it by that multiple. Refer to the time.h file for all possible prescalers.
+		The interrupt will call a specified function _rtc_func every pulse.
+		All of it has been tested and it works.
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static volatile int _rtc_pulse = 0;
+static volatile int _rtc_scale = 32;	//Defaults to 1 Second per pulse
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/* 	Prescales defined in time.h. SECOND will give you 1 second.
+	More scales are defined in the time.h file.
+	rtc_func is the address to a function that you want called every clock tick. */
+void rtc_init(int prescale_opt, void (*rtc_func)(void)) {
+	
+	//Clear timer register for Timer 3
+	TCNT3 = 0;
+	
+	/* 	This sets the Waveform Generation Module to CTC (Clear Timer on Compare) Mode (100)
+		See page135 in Atmega128 Docs for more modes and explanations */
+	TCCR3B |= _BV(WGM32);
+	
+	/* 	This sets the prescaler for the system clock (8MHz) ie: divides the clock by some number.
+		Currently set to a prescaler of 8 because that is what the orb and servos use (they are on this timer as well)
+		See page137 in Atemga128 Docs for all the available prescalers */
+	TCCR3B |= _BV(CS31);
+	
+	/* 	Sets the two regsiters that we compare against. So the timer counts up to this number and
+		then resets back to 0 and calls the compare match interrupt.
+		8x10^6 / 8 = 1/16 Second. All values are based off of this number. Do not change it unless you
+		are l337*/
+		
+	OCR3A = 0xF424;	
+
+	/* 	Enable Output Compare A Interrupt. When OCR3A is met by the timer TCNT3 this interrupt will be
+		triggerd. (See page140 in Atmega128 Docs for more information */
+	ETIMSK |= _BV(OCIE3A);
+	
+	/*	Store the pointer to the function to be used in the interrupt */
+	_rtc_f = rtc_func;
+	
+	/*	Store how many 1/16ths of a second you want to let by before triggering an interrupt */
+	_rtc_scale = prescale_opt;
+}
+
+//Returns the real time clock counter to 0
+int rtc(void){
+	return _rtc_val;
+}
+
+//Resets the real time clock counter
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+/*	Called every pulse. Function in _rtc_f is called every _rtc_scale and also the counter is updated.
+	Bascially, since the pulse is hard set at 1/16s  you want to count how many 16ths of a second have passed
+	and when it reaches the amount of time you want, execute the code. */
+SIGNAL(TIMER3_COMPA_vect) {
+
+	if (_rtc_pulse ==  _rtc_scale) {
+		//Increment the real time clock counter
+		_rtc_val++;
+		
+		//Calls the function tied to the real time clock if defined
+		if(_rtc_f != 0)
+			_rtc_f();
+		
+		//Resets the pulse until the next scale is matched
+		_rtc_pulse = 0;
+	}	
+	
+	//Updates the amount of pulses seen since the last scale match
+	_rtc_pulse++;
+	
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/analog.c	(revision 62)
@@ -0,0 +1,133 @@
+/*
+ * analog.c - Contains the function implementations for manipulating the ADC
+ * on the firefly+ board
+ * 
+ * author:  CMU Robotics Club, Colony Project
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ */
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void set_adc_mux(int which)
+{
+  // FIX THIS IN NEXT REVISION
+  // ADDR2 ADDR1 ADDR0
+  // G2.G4.G3 set mux to port 0-7 via binary selection
+  // math would be much cleaner if it was G4.G3.G2
+  
+  // mask so only proper bits are possible.  
+  PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04);
+}
+
+void analog_init(void)
+{
+
+
+	// ADC Status Register A
+	// Bit 7 - ADEN is set (enables analog)
+	// Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+	// Bit 5 - Enable Auto Trigger (for free running mode)
+	// Bit 4 - ADC interrupt flag, 0
+	// Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+	// Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 8,000,000/128
+	ADCSRA |= 0xEF;
+
+	// ADC Status Register B
+	// Bit 7, 5-3 - Must be cleared
+	// Bit 2:0 - Set mode, currently cleared for free running operation
+	// Bit 6 - Analog comparator mode - cleared
+//	ADCSRB = 0x00;
+	
+	// ADMUX register
+	// Bit 7,6 - Set voltage reference to AVcc (0b01)
+	// Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+	// Bit 4 - X
+	// Bit 3:0 - Sets the current channel, set to ADC7 (the external mux)
+	ADMUX = 0x67;
+
+	// Set external mux lines to outputs
+	DDRG |= 0x1C;
+	set_adc_mux(0x07);
+
+
+}	
+
+
+
+unsigned int analog8(int which)
+{
+
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+	
+	_delay_ms(1); // need at least 130 us between conversions
+	return ADCH;
+	
+}
+
+
+
+
+unsigned int analog10(int which)
+{
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void)
+{
+	return analog8(WHEEL_PORT);
+}
+
+int battery8(void)
+{
+  return analog8(BATT_PORT);
+}
+
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+	return analog8(BATT_PORT) * 500 >>7;
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/lcd.c	(revision 62)
@@ -0,0 +1,471 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void crazycircle (void) {
+/*  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+
+      delay_ms(10);
+  }
+*/
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  write_c(0x8e);    // clear window command
+  write_d(0);
+  write_d(0);
+  write_d(130);
+  write_d(130);
+
+  delay_ms(100);
+  
+  write_c(0x92);    // fill enable command
+  write_d(0x01); 
+  
+  delay_ms(10);
+
+  crazycircle();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+//**************************************Old shit below!*****************
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+
+
+	LCDDDR |= (SCE | SDI | SCK);
+	LCDRESETDDR |= (RST|D_C);
+
+	LCDPORT &= ~( SCE | SDI | SCK);
+	LCDRESETPORT &=~(D_C);
+  
+	SPCR |= 0x50; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDRESETPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+  LCDRESETPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDRESETPORT |= D_C;
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/servo.h	(revision 62)
@@ -0,0 +1,29 @@
+
+#ifndef SERVO_H
+#define SERVO_H
+
+#include <avr/interrupt.h>
+
+
+#define SERVO_MS 2000          // Number of ticks per ms
+#define SERVO_PERIOD 0          // Amount of time to wait between pulses
+#define SERVO_RESET 15000
+
+#define SERVO_MIN 1800            // Smallest pulse length (ticks)
+#define SERVO_MAX 4200           // Largest pulse length (ticks)
+
+#define SERVOPORT1 PORTA
+#define SERVOPORT2 PORTC	//note that this port will be "backwards", i.e. pin0 is servo 15
+
+#define SERVODDR1 DDRA
+#define SERVODDR2 DDRC
+
+#define SERVOMASK1 0x0F
+#define SERVOMASK2 0x77
+
+void servo_init(void);
+void servo_set_angle(int servo, int angle);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/time.h	(revision 62)
@@ -0,0 +1,59 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+#define SIXTEENTH_SECOND 1
+#define EIGTH_SECOND 2
+#define QUARTER_SECOND 4
+#define HALF_SECOND	8
+#define SECOND 16
+#define TWO_SECOND 32
+#define FOUR_SECOND 64
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/move.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/move.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/move.c	(revision 62)
@@ -0,0 +1,179 @@
+//Created 4/30/06 by James Kong
+
+#include "dragonfly_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+void move (int velocity, int omega) {
+  int vl = 0;
+  int vr = 0;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  //
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+/*@strength, the strength of the avoid behavior from 0 to 100,
+255 gives full control to avoid, 0 none. defines here for now*/
+
+void move_avoid(int velocity, int omega, int strength){
+  int pControl;
+  int temp;
+  
+  temp=read_distance(IR1);
+  d1 = (temp == -1) ? d1 : temp;
+  
+  temp=read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /* Avoid obstacles ahead
+  if(d2>170)
+    v*=-1;
+    
+  Naturally slow down if there is something in the way.
+  if(d2>150 || d1>180 || d3>180){
+    v>>=1;
+  */
+  
+  pControl= (((d3-d1) + (d4-d5))*strength)/100;
+  omega = (omega*(100-strength))/100 + pControl;
+
+  move(velocity, omega);
+}
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr) {
+	//omega: angle measure, positive couter-clockwise from front.
+	// -180 <= omega <= 180
+	//velocity: -255 <= velocity <= 255
+  
+  long int vltemp, vrtemp;
+  
+  //make sure values are in bounds
+  if (velocity < -255 || velocity >255 || omega < -255 || omega > 255) return;
+	
+  //compute
+	vrtemp = velocity + omega * 3;
+	vltemp = velocity - omega * 3;
+	
+	//check to see if max linear velocities have been exceeded.
+  if (vrtemp > 255) {
+    vltemp = 255 * vltemp / vrtemp;
+    vrtemp = 255;
+  }
+  if (vltemp > 255) {	   
+	vrtemp = 255 * vrtemp / vltemp;    
+	vltemp = 255;  
+  }
+  if (vrtemp < -255) {
+    vltemp = -255 * vltemp / vrtemp;
+    vrtemp = -255;
+  }
+  if (vltemp < -255) {
+    vrtemp = -255 * vrtemp / vltemp;
+    vltemp = -255;
+  }
+  
+  *vr = (int)vrtemp;
+  *vl = (int)vltemp;
+	
+
+}
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/analog.h	(revision 62)
@@ -0,0 +1,100 @@
+/*
+ * analog.h - Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7
+ * AN6 and AN7 are used for the wheel and battery
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog
+	
+ * author: CMU Robotics Club, Colony Project
+ * code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+#define AN8 0x08
+#define AN9 0x09
+#define AN10 0x0a
+#define AN11 0x0b
+#define AN12 0x0c
+#define AN13 0x0d
+#define AN14 0x0e
+#define AN15 0x0f
+
+#define ANALOG0 AN0
+#define ANALOG1 AN1
+#define ANALOG2 AN8
+#define ANALOG3 AN9
+#define ANALOG4 AN2
+#define ANALOG5 AN3
+#define ANALOG6 AN4
+#define ANALOG7 AN5
+#define ANALOG8 AN6
+
+#define EXT_MUX AN7
+#define WHEEL_PORT AN10
+#define BATT_PORT  AN11
+
+//Macros for Battery
+//Constants determined experimentally 2/9/2007 - James Kong
+//See Battery8_data.xls for experiment data
+#define NORMALV 6
+#define CHARGINGV 7.00
+#define LOWV 5.25
+
+#define BATT_NRMLV (int)(25.7*NORMALV)
+#define BATT_CHRGV (int)(25.7*CHARGINGV)
+#define BATT_LOWV (int)(25.7*LOWV)
+
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+/*
+  returns the current analog8 reading of the battery voltage
+  128 ~= 5 volts, higher value -> higher voltage
+  analog_init() must be called before a call to this function
+*/
+int battery8(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/lcd.h	(revision 62)
@@ -0,0 +1,31 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+
+
+//////lcd defines
+#define RST _BV(4)  // pd4 (GPIO)
+#define SCE _BV(0)  // pb0 (~SS)
+#define D_C _BV(5)  // pd5 (GPIO?)
+#define SDI _BV(2)  // pb2 (MOSI)
+#define SCK _BV(1) // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTD
+#define LCDRESETDDR DDRD
+
+
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/pindefs_ff.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/pindefs_ff.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/pindefs_ff.h	(revision 62)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/move.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/move.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/move.h	(revision 62)
@@ -0,0 +1,46 @@
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+int d1,d2,d3,d4,d5;  /*Move avoid distance variables*/
+
+void move(int velocity, int omega);
+
+void move_avoid(int velocity, int omega, int strength);
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr);
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/dio.c	(revision 62)
@@ -0,0 +1,324 @@
+/* 
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+the first 3 (abc in this example) are used to select the bank
+A = 001
+B = 010
+C = 011
+D = 100
+E = 101
+F = 110
+G = 111
+		
+the bank can be found by doing portpin >> 3
+		
+the next 3 (def in this example) are used to select the pin number
+the 3 bits are just the binary representation of the pin number
+0 = 000
+1 = 001
+2 = 010
+3 = 011
+4 = 100
+5 = 101
+6 = 110
+7 = 111
+		
+the pin number can be found by doing portping & 0b111
+*/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/*
+ * digital_input
+ * Reads the value on the selected portpin, returns it as 1 or 0
+ * see general description (above) for definition of portpin
+ */
+int digital_input(int portpin){
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3){
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4){
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/*
+  digital_pull_up
+  Enables pullup on a pin.  if pin is output, it will make it output 1.
+*/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/*
+  digital_output
+
+  sets portpin to the value
+  see general description above for explanation of portpin
+  val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  }else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+  return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING0);
+	PORTG|= _BV(PING0);
+    pin_val = PING;
+	return !((pin_val & _BV(PING0)));
+  
+}
+
+/* similar to button1_read, but hold program until the button is actually 
+ * pressed
+*/
+void button1_wait( void )
+{
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/* USER LED 
+  same as button1_wait
+  However, blink the led while waiting
+
+  IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+/*
+void button1_wait_led( void )
+{
+  int i = 0;
+  
+  while(!button1_read()){
+    if(i < 8){
+      led_user(1);
+    }else{
+      led_user(0);
+    }
+    //increment i, but restart when i = 15;
+    i = (i+1) & 0xF;
+    delay_ms(15);
+  }
+  
+  led_user(0);
+}
+*/
+//click waits until the button is realesed to return true
+//return false immediatley
+int button1_click()
+{
+  if(button1_read()){
+    while(button1_read());
+    return 1;
+  }else{
+    return 0;
+  }
+}
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING1);
+	PORTG|= _BV(PING1);
+    pin_val = PING;
+	return !((pin_val & _BV(PING1)));
+}
+
+void button2_wait( void )
+{
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+/*USER LED NO LONGER EXISTS
+void button2_wait_led(void)
+{
+  int i = 0;
+  
+  while(!button2_read()){
+    if(i < 8){
+			led_user(1);
+    }else{
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+*/
+int button2_click()
+{
+	if(button2_read()){
+    while(button2_read());
+    return 1;
+  }else{
+		return 0;
+  }
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/bom.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/bom.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/bom.c	(revision 62)
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include <dragonfly_lib.h>
+#include "bom.h"
+#include "dio.h"
+#include "analog.h"
+
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+int getMaxBom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+              
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+	printf("max_bom_temp = %d\n", max_bom_temp);
+	return max_bom_temp;
+}
+
+char bytetosymb(unsigned int c)
+{
+  c = 255 - c;
+
+  if (c < 32)
+    return ' ';
+  if (c < 64)
+    return '_';
+  if (c < 96)
+    return ',';
+  if (c < 128)
+    return '.';
+  if (c < 160)
+    return '-';
+  if (c < 192)
+    return '~';
+  if (c < 224)
+    return '\'';
+  return '`';
+}
+
+void bom_on(void)
+{
+  output_high(MONKL);
+
+}
+
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
+int printAllBoms(void){
+  int i,j;
+  for(i=0;i<16;i++){
+      j=lookup[i];
+      digital_output(MONK0,j&1);
+      digital_output(MONK1, (j>>1)&1);
+      digital_output(MONK2, (j>>2)&1);
+      digital_output(MONK3, (j>>3)&1);
+      usb_puts("Bom ");
+      usb_puti(i);
+      usb_puts(": ");
+      usb_puti(analog8(MONKI));
+      usb_puts("\n\r");
+    }
+    return 1;
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/dio.h	(revision 62)
@@ -0,0 +1,182 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+these are ALL the pins
+don't use unless you know what you're doing
+*/
+
+/*
+DIO pins on new dragonfly boards are shown below:
+-----------------------------------------------
+| _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+-----------------------------------------------
+| _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+-----------------------------------------------
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+#define _PIN_D1 33  // pin DIO7
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42  // pin DIO0
+#define _PIN_E3 43  // pin DIO1
+#define _PIN_E4 44  // pin DIO2
+#define _PIN_E5 45  // pin DIO3
+#define _PIN_E6 46  // pin DIO4
+#define _PIN_E7 47  // pin DIO5
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#define PIN_LED1 58
+
+
+/* Buttons */
+#define PIN_BTN PING
+#define BTN2 PING1
+#define BTN1 PING0
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+int button1_read( void );
+int button1_click( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+int button2_click( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/wl_adhoc.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/wl_adhoc.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/wl_adhoc.c	(revision 62)
@@ -0,0 +1,813 @@
+/**
+   \file wl_adhoc.c
+   Wireless ad hoc networking.
+   NOW WITH SENSORS
+   Robots can come in and out of the ring.
+*/
+
+
+#include <dragonfly_lib.h>
+#include "wl_adhoc.h"
+#include <avr/interrupt.h>
+
+#include "ring_buffer.h"
+#include "bom.h"
+
+#include <colonet_dragonfly.h>
+#include <colonet_defs.h>
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b)  ((a) < (b) ? (a) : (b))
+
+//#define USB_DEBUG
+
+#ifdef USB_DEBUG
+#define USB_PUTC( c ) usb_putc( c )
+#define USB_PUTS( s ) usb_puts( s )
+#define USB_PUTI( i ) usb_puti( i )
+#else
+#define USB_PUTC( c )
+#define USB_PUTS( s )
+#define USB_PUTI( i )
+#endif
+
+
+RING_BUFFER_NEW(ring_buffer, 256, char, buffer);
+volatile int buffer_size = 0;
+
+void led_user(int x) {}
+
+void usb_putstr(char *s)
+{
+  char *t = s;
+  while (*t != 0)
+  {
+    usb_putc(*t);
+    t++;
+  }
+}
+
+unsigned char set_orb_wireless = 1;
+unsigned char crazy_debug = 0;
+int max_bom = -1;
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time 
+  one occurs.  In the case where a robot first turns on, it will wait for a 
+  long time before declaring itself the leader.  Otherwise, if enough 
+  time-outs occur in a row, wl_to_flag will be set to 1.  This will cause a 
+  timeout packet to be sent next time around
+
+*/
+void wl_timeout_handler( void ) {
+
+  if(crazy_debug) {
+    return;
+  }
+
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  //lcd_putchar('w');
+  USB_PUTC('w');
+  
+  static int wl_first_to_count =  0;
+  
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TO_INITIAL){
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+        
+      //lcd_putchar('Z');
+        
+      //you don't actually want to send out a packet -- you would confuse 
+      //other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+  }else{
+    //not the first time - regular time out routine
+    
+    //
+    if ((wl_sent_cs || wl_sent_depart || wl_sent_dock) && wl_to_count > 3)
+    {
+      usb_puts("Charging station timed out. \n\r");
+      wl_sent_cs = 0;
+      wl_sent_depart = 0;
+      wl_sent_dock = 0;
+      wl_create_packet();
+      wl_send();
+    }
+
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT){
+      //lcd_putchar('z');
+      
+      USB_PUTS("|time.out|");
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+      
+      //increment the count for robot death
+      if(NUM_BOTS > 1) {
+        //only increase death count if there are robots that can die
+        //if numbots = 1, you are the only robot (no suicidal robots... yet)
+        wl_to_death_count++;
+      }
+      
+      //check for a robot death
+      if(wl_to_death_count > WL_TO_DEATH) {
+        //a robot has died :(
+        wl_to_death_flag = 1;
+        wl_death_handler();
+      }
+    }
+  }
+  
+  //take care of the case where you time out so much that you become the leader
+  if(wl_first_to_count > WL_TO_LEADER) {
+    //you are now the leader
+    //lcd_putchar('L');
+    
+    first_time = 0;
+        
+    NUM_BOTS = 1;     //there are (1) robot in the ring
+    SRC = 0;        //you are robot # 1
+    DEST = 1;       //you are 'speaking' to (nonexistent) robot #1
+    
+    /*
+      lcd_putchar('[');
+      lcd_putchar(SRC+48);
+      lcd_putchar('|');
+      lcd_putchar(DEST+48);
+      lcd_putchar('|');
+      lcd_putchar(NUM_BOTS+48); 
+      lcd_putchar('|');
+      lcd_putint(wl_to_death_count);
+      lcd_putchar(']');
+    */
+    usb_putc('t');
+    
+    //create a a packet and send it
+    wl_create_packet();
+    wl_send();
+    
+    //change the timeout count to 0
+    wl_to_count = 0;
+    wl_first_to_count = 0;
+  }
+}
+
+/**
+   \fn wl_error_handler(int errcode)
+   Handles error codes.
+   \param errcode The error code.
+   At the time, the only real error that happens is robot death.
+
+   Robot death requires that wl_buf have been set (either by receiving a
+   error packet or by calling wl_death_handler.
+
+   Robot death:
+   Number of robots will decrement.
+   Robots above the dead robot will decrement their ID and their source.
+   The loop remains closed.
+
+*/
+void wl_error_handler(unsigned char errcode)
+{
+  USB_PUTS("Error Code: ");
+  USB_PUTI(errcode);
+  //which robot is dead
+  int dead_robot;
+
+  //print debug information
+  /*
+    lcd_clear_screen();
+    lcd_gotoxy(0,0);
+    lcd_putstr("error handler    ");
+    lcd_putint(errcode);
+    lcd_gotoxy(0,1);
+  */
+  
+  USB_PUTS("|error handler|");
+
+  switch(errcode) {
+  case WL_ERRCODE_ROBOTDEATH:
+    orb_set_color(RED);
+    buzzer_chirp(1000, C5);
+    //lcd_putstr("  dead_robot: ");
+    //lcd_putint(wl_buf[WL_ERR_DEAD_LOC]);
+    break;
+  case WL_ERRCODE_NEEDTOCHARGE:
+    //lcd_putstr("   charge_robot: ");
+    //lcd_putint(wl_buf[WL_SRC_LOC]);
+    break;
+  default:
+    break;
+  }
+
+  //lcd_gotoxy(0,2);
+  
+  //set all the time-out counts and flags to 0
+  wl_to_count = 0;
+  wl_to_flag = 0;
+  wl_to_death_flag = 0;
+  wl_to_death_count = 0;
+    
+  //acknowledge receipt of the error packet by setting the errorcode in the 
+  //packet to 0
+  wl_buf[WL_ERROR_LOC] = 0;
+  //also set checksum to !0
+  wl_chksum = 1;
+  
+  //switch the error code
+  switch(errcode) {
+    //ROBOT DEATH
+  case WL_ERRCODE_ROBOTDEATH:
+    //get which robot has died
+    dead_robot = wl_buf[WL_ERR_DEAD_LOC];
+      
+    //decrement the total number of robots
+    NUM_BOTS--;
+      
+    //see if you are above the dead robot
+    if( SRC > dead_robot ) {
+      //if you are the last robot (since NUM_ROBOTS was decremented, 
+      //you can check that way) then decrement your number
+      //and set your destination to 0
+      if( SRC == NUM_BOTS) {
+        //lcd_putchar('+');
+        //lcd_putchar('1');
+        //lcd_putchar('+');
+        SRC--;
+        DEST = 0;
+      } else {
+        //otherwise decrement both your ID and the destination by 1
+        //lcd_putchar('+');
+        //lcd_putchar('2');
+        //lcd_putchar('+');
+        //decrement src and dest
+        SRC--;
+        DEST--;
+      }
+    }
+      
+    //ensure that the last robot talks to the 0th one
+    //this won't be set if the LAST robot dies (all robots are < dead)
+    if(SRC == (NUM_BOTS - 1) ) {
+      DEST = 0;
+    }
+      
+    //now your SRC and DEST have been set properly
+    //if you are the robot before the dead robot - send a message
+    if(SRC == dead_robot) {
+      //lcd_putstr(" send packet ");
+      //you took the place of the dead robot
+      //you start the token ring again
+      wl_create_packet();
+      wl_send();
+    }
+    break;
+      
+  case WL_ERRCODE_NEEDTOCHARGE:
+    break;      //Do nothing about this, yet
+        
+  case WL_ERRCODE_CHARGE_ACCEPT:
+    // use the value we saved in parse_buffer()
+    wl_csloc = max_bom;
+    USB_PUTS("\n\rBOM direction: ");
+    USB_PUTI(wl_csloc);
+    if (wl_sent_cs)
+    {
+      direction_from_station = wl_buf[WL_DATA_DATA1];
+      desired_bay = wl_buf[WL_DATA_DATA2];
+      charge_request_register = CHARGE_REQUEST_ACCEPTED;
+      USB_PUTS("\n\rReceived charge request response\n\r");
+      wl_sent_cs = 0;
+      wl_create_packet();
+      wl_send();
+      orb_set_color(BLUE);
+    }
+    break;
+  
+  case WL_ERRCODE_CHARGE_DENY:
+    if (wl_sent_cs)
+    {
+      //TODO: set flag to tell robot to stop moving, etc...
+      charge_request_register = CHARGE_REQUEST_NOT_ACCEPTED;
+      usb_puts("\n\rI HAVE BEEN DENIED\n\r");
+      wl_sent_cs = 0;
+      wl_create_packet();
+      wl_send();
+      orb2_set_color(RED);
+    }
+    break;
+  case WL_ERRCODE_CHARGE_DEPART://we have sent the charging station a depart request, and now need to continue the token ring
+    if (wl_sent_depart)
+    {
+      usb_puts("Received Departing Ack from Station\n\r");
+      wl_sent_depart = 0;
+      wl_cs_flag = NOT_REQUEST_CS;
+      wl_create_packet();
+      wl_send();
+    }
+    break;
+  case WL_ERRCODE_CHARGE_DOCK:
+    if (wl_sent_dock)
+    {
+      usb_puts("Received Docking Ack from Station\n\r");
+      wl_sent_dock = 0;
+      wl_cs_flag = NOT_REQUEST_CS;
+      wl_create_packet();
+      wl_send();
+    }
+    break;
+  default:
+    //do other stuff;
+    break;
+  } 
+}
+
+/**
+   \fn wl_death_handler
+
+   Handles robot death (for the one robot that detects death).
+
+   The robot that currently 'senses' robot death is the robot AFTER the dead
+   robot in the ring.  It knows that PREV (the robot right before it) is dead.
+   Robot creates a error packet and sends it. 
+
+   This will also call wl_error_handler since wl_buf was set with the current
+   dead robot
+*/
+void wl_death_handler( void ) 
+{
+  //set time out and death count/flags to 0
+  wl_to_count = 0;
+  wl_to_flag = 0;
+  wl_to_death_flag = 0;
+  wl_to_death_count = 0;
+
+  //create a packet with the error
+  wl_create_error_packet(WL_ERRCODE_ROBOTDEATH);
+  wl_buf[WL_ERR_DEAD_LOC] = PREV;   //PREV is the robot that is dead
+  wl_make_checksum();                    //Recompute checksum after adding data
+  
+  //send the packet
+  wl_send();
+  
+  //handle the error yourself
+  wl_error_handler(wl_buf[WL_ERROR_LOC]);
+  
+  return;
+}
+
+/**
+   \fun parse_buffer
+   Parses the buffer in wl_buf.
+
+   Does nothing if the buffer isn't full.
+*/
+void parse_buffer () 
+{
+  //deal with timeout case
+  /*
+  if( wl_to_flag ) {
+    usb_putc('x');
+    wl_to_flag = 0;
+    wl_create_packet();
+    wl_send();
+    return;
+  }
+*/
+  while (1)
+  {
+    if (buffer_size < WL_PKT_LEN)
+      return;
+
+    char c;
+    RING_BUFFER_REMOVE(buffer, c);
+    buffer_size--;
+    //if (usb_debug)
+    //  usb_putc(c);
+    if (c == 'R')
+    {
+      RING_BUFFER_REMOVE(buffer, c);
+      //fprintf(usb_fd, "%x ", c);
+      buffer_size--;
+      //if (usb_debug)
+      //  usb_putc(c);
+      if (c == 'C')
+        break;
+    }
+  }
+  //wl_to_count = 0;
+  wl_index = 2;
+  wl_chksum = 0;
+  
+  //read bom here, save value for later (error_handler??)
+  //max_bom = getMaxBom();
+  
+  //get the packet from the ring buffer -- make sure it's valid
+  while (wl_index != 0)
+  {
+    char wl_input;
+    RING_BUFFER_REMOVE(buffer, wl_input);
+    buffer_size--;
+
+    if( wl_index >= WL_SRC_LOC ) {
+      if( wl_index < WL_CHK_LOC ) {
+        
+        //getting the rest of the packet
+        wl_buf[wl_index] = wl_input;
+        wl_chksum += wl_input;
+        wl_index++;
+        
+      }else{
+        //we are at checksum location
+        wl_buf[wl_index] = 0;
+        wl_chksum += wl_input;
+        wl_index = 0;
+               
+        USB_PUTC('o');
+        
+        if(!wl_chksum) {
+          //checksum is correct - equal to zero
+          if(set_orb_wireless) {
+            //orb2_set_color(GREEN);
+          }
+          //lcd_putchar('p');
+        
+          USB_PUTC('p');
+            
+          //get the maximum BOM from the person who sent you the packet
+          //max_bom = getMaxBom();
+          //lcd_putint(max_bom);
+          //lcd_putchar(' ');
+          //add to your own sensor the other robot's direction
+            
+          //        max_bom  you  them
+          //usb_puti(max_bom);
+          //usb_putc(' ');
+          //addSensor(max_bom, SRC, wl_buf[WL_SRC_LOC], NUM_BOTS);
+            
+          //also set whether that robot can see the light or not
+          //set_light_status(wl_buf[WL_SRC_LOC], wl_buf[WL_DATA_LIGHT_LOC]);
+        }else{  
+          //chksum failed
+          //usb_putc('F');
+          int i;
+          for(i = 0; i < WL_CHK_LOC; i++) {
+            USB_PUTC(wl_buf[i]);
+          }
+          USB_PUTS("Fail");
+          usb_putstr("Fail");
+          return;
+          //need to return -- was at the end of the ISR
+        }
+        break;
+      }
+    }
+  }
+  
+  //acknowledge you take the packet by changing the chksum to nonzero
+  wl_chksum = 1;
+    
+  USB_PUTS("|received_a_packet|");
+
+  if (wl_buf[5] == COLONET_REQUEST || wl_buf[5] == COLONET_COMMAND)
+  {
+    //orb_set_color(YELLOW);
+    //colonet_handle_message(SRC, wl_buf);
+    colonet_handle_message(wl_buf);
+    return;
+  }
+  
+  //this is the case when you get your first packet -- you want to join the ring
+  if(first_time == 1) {
+    
+    USB_PUTS("|first_packet|");
+    
+    //you received a first packet from someone
+    first_time = 0;
+      
+    //get the current number of robots
+    NUM_BOTS = wl_buf[NUM_BOTS_LOC];
+      
+    //you are now the last robot in the line
+    SRC = NUM_BOTS;
+    //you are sending back to the first robot
+    DEST = 0;
+      
+    //since you've just added yourself, increase numbots
+    NUM_BOTS++;
+    
+    //wl_wait_for_turn = 1
+    
+    //figure out a way to send out a packet TODO
+    wl_create_packet();
+    wl_send();
+  }
+  
+  if(wl_wait_for_turn) {
+    if(NUM_BOTS <= 2 || wl_buf[WL_DEST_LOC] == SRC - 1 ) {
+      //you just got a packet from the 'old' last robot send yours
+      //lcd_putchar('S');
+      wl_wait_for_turn = 0;
+      first_time = 1;
+      //so we don't wait with a delay
+      wl_create_packet();
+      wl_send();
+      first_time = 0;
+      return;
+    }else{
+      //otherwise just exit out of parse
+      return;
+    }
+  }
+  
+  //check for error packet first
+  if(wl_buf[WL_DEST_LOC] == WL_PKT_ERROR){
+    orb2_set_color(RED);
+    //handle error packet
+    wl_error_handler( wl_buf[WL_ERROR_LOC] );
+    return;
+  }
+  
+  //see if there are more robots this turn around -- NUM_ROBOTS would have 
+  //increased
+  if(wl_buf[NUM_BOTS_LOC] > NUM_BOTS){
+    //if you are the last robot
+    if(DEST == 0){
+      //if you are the last robot in the ring
+      //change your dest to the new number (the last bot)
+      DEST = NUM_BOTS;
+    }
+
+    NUM_BOTS = wl_buf[NUM_BOTS_LOC];
+  }
+    
+  if(wl_buf[WL_SRC_LOC] == SRC) {
+    return;
+  }
+  
+  //increment time out count so we respond first if we are second in line
+  int next = wl_buf[WL_DEST_LOC] + 1;
+  if (next == NUM_BOTS)
+    next = 0;
+  if (next == SRC)
+    wl_to_count = 1;
+  
+  //get the data out of the sensor row
+  int i = 0;
+  int self = wl_buf[WL_SRC_LOC];
+  //13-4 = 9
+  int end = MIN(WL_DATA_ROW_END, NUM_BOTS+WL_DATA_ROW_START);
+
+  for(i = WL_DATA_ROW_START; i < end; i++){
+    addSensor(wl_buf[i], self, (i-WL_DATA_ROW_START), NUM_BOTS);
+  }
+  
+  //if you are the destination - respond
+  if(wl_buf[WL_DEST_LOC] == SRC) {
+  
+    //you know that you got a message addressed to you -- previous robot must 
+    //not be dead
+    wl_to_death_count = 0;
+    //the robot previous to you is in wl_buf[WL_SRC_LOC]
+    PREV = wl_buf[WL_SRC_LOC];
+    
+    //create a packet
+    //lcd_putchar('s');
+    USB_PUTS("|received.packet.addr.me|");
+  
+    switch (wl_cs_flag)
+    {
+    case REQUEST_CS:
+      wl_sent_cs = 1;
+      wl_create_charging_error_packet();
+      wl_send();
+      usb_puts("\n\rRequested charge\n\r");
+      return;
+    case DEPART_CS:
+      wl_sent_depart = 1;
+      wl_create_leaving_packet();
+      wl_send();
+      //wl_cs_flag = NOT_REQUEST_CS;
+      usb_puts("\n\rSent Leaving Packet\n\r");
+      return;
+    case ARRIVE_CS:
+      wl_sent_dock = 1;
+      wl_create_docking_packet();
+      wl_send();
+      //wl_cs_flag = NOT_REQUEST_CS;
+      usb_puts("Sent Docking Packet\n\r");
+      return;
+    }
+  
+    wl_create_packet();
+    wl_send();
+  }
+  else
+  {
+    usb_putstr("packet not addressed to me");
+    usb_puti(wl_buf[WL_DEST_LOC]);
+  }
+
+  return;
+}
+
+/**
+   \fun wl_init
+*/
+void wl_init(void)
+{
+  wl_index = 0;
+  wl_chksum = 1;
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  /* executes the function about every 1 sec */
+  //rtc_init(HALF_SECOND, &wl_timeout_handler);
+  
+  wl_to_flag = 0;
+  wl_to_count = 0; 
+  wl_to_death_count = 0;
+  wl_to_death_flag = 0;
+  
+  wl_to_max = WL_TO_INITIAL;
+  first_time = 1;
+  wl_wait_for_turn = 0;
+  wl_sent_cs = 0;
+  wl_sent_depart = 0;
+  wl_sent_dock = 0;
+  
+  UCSR1B |= _BV(RXCIE);
+  
+  sei();
+}
+
+void wl_send ( void ) {
+  int i = 0;
+  
+  //turn off interrupt so you don't receive packet as you send it
+  UCSR1B &= ~_BV(RXCIE);
+  
+
+  USB_PUTS("\n\r|sending---\n\r");
+  
+  if(set_orb_wireless) {
+    orb2_set_color(BLUE);
+  }
+  
+  led_user(1);
+  
+  if(SRC == (NUM_BOTS - 1)) {
+    //if you are the last robot
+    //delay for some time
+    if(set_orb_wireless) {
+      orb2_set_color(RED);
+    }
+    delay_ms(LAST_ROBOT_DELAY);
+  }
+  
+  bom_on();
+  delay_ms(WL_DELAY_BOM_PRE);
+  for(i = 0; i < WL_PKT_LEN; i++) {
+    //print characters to wireless
+    xbee_putc(wl_buf[i]);
+  
+    //print characters to usb if needed
+    //USB_PUTC(wl_buf[i]);
+  }
+  
+  delay_ms(WL_DELAY_BOM_POST);
+  //this is where you would turn the BOM off
+  bom_off();
+
+  led_user(0);
+  //sprintf(buf, "%d\n\r", wl_buf[WL_CHK_LOC]);
+  //put_string(buf);
+  
+  //turn it back on so you can get things now
+  UCSR1B |= _BV(RXCIE);
+}
+
+void wl_create_packet () {
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  wl_buf[WL_SRC_LOC] = SRC;     //Where the packet came from
+  wl_buf[WL_DEST_LOC] = DEST;   //Who the packet is for
+  
+  //Behavior Specific Data goes here
+  wl_buf[WL_DATA_DATA0] = 0;
+  wl_buf[WL_DATA_DATA1] = 0;
+  wl_buf[WL_DATA_DATA2] = 0;
+  
+  //fill packet with data -- sensor row
+  for(int i = WL_DATA_ROW_START; i <= WL_DATA_ROW_END; i++) {
+    wl_buf[i] = sensors[SRC][i - WL_DATA_ROW_START];
+  }
+  
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Add custom data to the packets
+void wl_create_data_packet(unsigned char d0, unsigned char d1, 
+                           unsigned char d2)
+{
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  wl_buf[WL_SRC_LOC] = SRC;     //Where the packet came from
+  wl_buf[WL_DEST_LOC] = DEST;   //Who the packet is for
+    
+  //Behavior Specific Data goes here
+  wl_buf[WL_DATA_DATA0] = d0;
+  wl_buf[WL_DATA_DATA1] = d1;
+  wl_buf[WL_DATA_DATA2] = d2;
+  
+  //fill packet with data -- sensor row
+  for(int i = WL_DATA_ROW_START; i <= WL_DATA_ROW_END; i++) {
+    wl_buf[i] = sensors[SRC][i - WL_DATA_ROW_START];
+  }
+  
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+void wl_create_leaving_packet()
+{
+  wl_create_error_packet(WL_ERRCODE_CHARGE_DEPART);
+}
+
+void wl_create_docking_packet()
+{
+  wl_create_error_packet(WL_ERRCODE_CHARGE_DOCK);
+}
+
+void wl_create_charging_error_packet()
+{
+  wl_create_error_packet(WL_ERRCODE_NEEDTOCHARGE);
+}
+
+//Send an error packet
+void wl_create_error_packet(unsigned char errcode)
+{
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  //DEST is all robots
+  wl_buf[WL_SRC_LOC] = SRC;
+  wl_buf[WL_DEST_LOC] = WL_PKT_ERROR;
+  wl_buf[WL_ERROR_LOC] = errcode;
+  
+  //rest of the packet is just a bunch of 0s
+  for (int i = WL_ERR_DEAD_LOC + 1; i <= WL_DATA_END; i++) {
+    wl_buf[i] = 0;
+  }
+  
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Computes the checksum
+void wl_make_checksum() 
+{
+  char checksum = 0;
+
+  for(int i = WL_SRC_LOC; i < WL_CHK_LOC; i++) {
+    checksum -= wl_buf[i];
+  }
+
+  wl_buf[WL_CHK_LOC] = checksum;
+}
+
+ISR(USART1_RX_vect) {
+  char tmp = UDR1;
+  RING_BUFFER_ADD(buffer, tmp);
+  buffer_size++;
+  
+  //we got a byte, so we're not timing out
+  wl_to_count = 0;
+  
+  return;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/reset.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/reset.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/reset.c	(revision 62)
@@ -0,0 +1,27 @@
+/*
+reset.h - contains reset() function that resets the AVR
+author: James Kong
+
+Last Modified:
+
+3.7.2007 - James
+    created reset.c
+*/
+
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <reset.h>
+
+/*
+Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+to reset the AVR.  The reset clears all memory and resets all registers
+with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+and Status Register (MCUCSR).
+*/
+void reset(void)
+{
+    WDTCR &= 0xF8;
+    WDTCR |= 0x08;
+    _delay_ms(15);
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/bom.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/bom.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/bom.h	(revision 62)
@@ -0,0 +1,55 @@
+
+#ifndef _BOM_H
+#define _BOM_H
+
+
+/*
+
+
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+
+*/
+
+
+/*
+the analog pin definitions from dio.h DO NOT work here,
+so we must use PF0 from avrgcc (as opposed to _PIN_F0).
+BUT the dio pin definitions from dio.h must be used (no PE...).
+
+also, _PIN_E2 is initialized to high for some reason,
+which turns the BOM on when the robot is turned on.
+WORK-AROUND: call digital_output(_PIN_E2,0) at some point.
+
+*/
+
+#define MONKI PF0         //analog (yellow)
+//------------------------//
+#define MONKL _PIN_E2     //green
+#define MONK1 _PIN_E3     //blue
+#define MONK0 _PIN_E4     //white
+//------------------------//
+#define MONK3 _PIN_E6     //blue
+#define MONK2 _PIN_E7     //white 
+
+
+int getMaxBom( void );
+
+int printAllBoms(void);
+char bytetosymb(unsigned int c);
+
+void bom_on(void);
+void bom_off(void);
+
+void output_high(int which);
+void output_low(int which);
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/rangefinder.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/rangefinder.c	(revision 62)
@@ -0,0 +1,135 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "dragonfly_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+void range_init(void){
+  digital_output(_PIN_B4,0);
+}
+
+int read_distance (int range_id) {  
+  return analog8(range_id);
+}
+
+
+int linearize_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+
+
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+/*
+int linearize_distance (int reading) {
+
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+
+}*/
+
+
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+
+/*
+int log_distance(int distance) {
+
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+
+	return 0;
+
+*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/wl_adhoc.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/wl_adhoc.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/wl_adhoc.h	(revision 62)
@@ -0,0 +1,159 @@
+#ifndef _WL_ADHOC_H_
+#define _WL_ADHOC_H_
+
+#include "localization.h"
+
+#define WL_BAUD BAUD115200
+
+/*
+ 0 - R
+ 1 - C
+ 2 - SRC
+ 3 - DEST
+ 4 - DATA0          Behavior specific Data
+ 5 - DATA1
+ 6 - DATA2
+ 7 - ROW[0]
+ 8 - ROW[1] 
+ 9 - ROW[2]
+10 - ROW[3]         make sure that you can fit MAX_ROBOTS bytes
+11 - ROW[4]
+12 - ROW[5]
+13 - ROW[6]
+14 - NUM_BOTS
+15 - CHK
+*/
+
+#define WL_PKT_LEN 16 //0...15
+
+#define WL_SRC_LOC 2   //SRC
+#define WL_DEST_LOC 3  //DEST
+
+#define WL_DATA_DATA0 4     //Behavior Specific Data
+#define WL_DATA_DATA1 5
+#define WL_DATA_DATA2 6
+
+#define WL_DATA_ROW_START 7     //start of sensor row (ROW[0])
+#define WL_DATA_ROW_END 13      //end (ROW[6] for now)
+
+//start of wireless data -- not necessarily anything in particular
+#define WL_DATA_START 4
+#define WL_DATA_END 13
+
+#define NUM_BOTS_LOC 14   //location of number of robots - sent in every packet
+#define WL_CHK_LOC 15    //check sum, negative of the sum of the rest of the 
+
+#define WL_TIMEOUT 4
+#define WL_TO_INITIAL 2
+#define WL_TO_LEADER 2
+#define WL_TO_DEATH 5
+//if a robot times out WL_TO_DEATH times, it will be considered dead
+
+#define LAST_ROBOT_DELAY 10
+#define WL_DELAY_BOM_PRE 100
+//How much to delay between turning on BOM and sending a packet
+
+#define WL_DELAY_BOM_POST 100
+//How much to delay between completing a packet send and turning off BOM
+
+#define WL_PKT_COLONET_PACKET 254
+#define WL_PKT_ERROR 255
+#define WL_ERROR_LOC 4
+
+//parse buffer flag
+#define NOT_REQUEST_CS 0
+#define REQUEST_CS 1
+#define DEPART_CS 2
+#define ARRIVE_CS 3
+
+
+//error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGE_ACCEPT 251  //Charging station response to ping
+#define WL_ERRCODE_CHARGE_DENY 252		//For if charging station is already in use
+#define WL_ERRCODE_CHARGE_DOCK 253		//Robot announces docking (battery charging) status to charging station
+#define WL_ERRCODE_CHARGE_DEPART 254	//Robot announces departing (battery full) status to charging station
+#define WL_ERR_DEAD_LOC 5
+
+char wl_buf[WL_PKT_LEN];
+int wl_csloc; //Stores where the last seen Charging Station was relative to you
+volatile char wl_input;
+unsigned int wl_index;
+unsigned char wl_chksum;
+
+unsigned char wl_to_flag;
+//Throws 1 if the time since last packet crosses a threshhold
+
+int wl_sent_cs;
+int wl_sent_depart;
+int wl_sent_dock;
+
+int wl_cs_flag;
+
+//direction from charging station in bom reading
+char direction_from_station;
+//desired bay in charging station in bom reading
+char desired_bay;
+
+unsigned int wl_to_count;
+//Counts up for every time unit that you do not recieve 
+
+unsigned int PREV;            //Who's before you in the ring
+unsigned int SRC;             //Your ID in the ring
+unsigned int DEST;            //Who's after you in the ring
+unsigned int NUM_BOTS;        //How many robots are in the ring
+
+unsigned int CHARGESTATION;     //0 If robot, 1 if Charging Station
+
+unsigned int wl_to_max;         //Timeout maximum (threshold)
+
+//Counts how many times the robot before you times out
+unsigned int wl_to_death_count;
+unsigned char wl_to_death_flag;   //If the one before you times out too much
+
+char first_time;
+char wl_wait_for_turn;
+
+
+#define CHARGE_REQUEST_NO_REPLY 0
+#define CHARGE_REQUEST_ACCEPTED 1
+#define CHARGE_REQUEST_NOT_ACCEPTED 2
+char charge_request_register;	//@bit 0: charge_accepted, @bit 1 charge_not_accepted.
+
+
+/* Functions */
+void bom_test(void);
+void wl_adhoc(void);
+
+void wl_init(void);
+
+void wl_send(void);
+void parse_buffer(void);
+void wl_timeout_handler(void);
+
+//Prints out debug information
+void display_debug(void);
+void display_debug_usb(void);
+
+//Removes Dead robot from network
+void wl_death_handler( void );
+//Chooses an error and deals with it
+void wl_error_handler(unsigned char ecode);
+
+//Generic Packet
+void wl_create_packet(void);
+//Data Packet
+void wl_create_data_packet(unsigned char d0, unsigned char d1, 
+                           unsigned char d2);
+                           
+void wl_create_charging_error_packet(void);
+void wl_create_leaving_packet(void);
+void wl_create_docking_packet(void);
+
+//Generic Error Packet
+void wl_create_error_packet(unsigned char errcode);
+//Compute the checksum and stores it for a packet
+void wl_make_checksum( void );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/reset.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/reset.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/reset.h	(revision 62)
@@ -0,0 +1,12 @@
+/*
+reset.h - contains reset() function that resets the AVR
+*/
+
+
+/*
+Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+to reset the AVR.  The reset clears all memory and resets all registers
+with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+and Status Register (MCUCSR).
+*/
+void reset(void);
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/rangefinder.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/rangefinder.h	(revision 62)
@@ -0,0 +1,62 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+
+#define IR1 6
+#define IR2 5
+#define IR3 4
+#define IR4 3
+#define IR5 2
+
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+
+void range_init(void);
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/lights.c	(revision 62)
@@ -0,0 +1,310 @@
+/*
+  lights.c
+  Controls orb1 and orb2. Also contains the framework for a software PWM that may be used for servos in the future.
+
+  author: CMU Robotics Club, Colony Project
+
+  Change Log:
+  2.4.07 - Aaron
+	Revamped orb code so it works.  Need to check interaction with rtc, and tweak some colors.
+
+  2.1.07 - James
+	Modified sort_buffer() to prune for repeats.  PWM now uses orb_buf_size for the number of orb values in orb_time_arr[].
+  Changed sorting algorithm used in sort_buffer() to selection sort (faster). And it works now.
+
+  1.25.07 - KWoo
+	Deleted old FF+ code to make it cleaner. Commented code. This all works. Note however that if you ever plan to use the
+  software PWM (which is this) you will need to change the implementation of orb_enable() and orb_disable() to not
+  shutdown the PWM.
+
+*/
+
+#include "lights.h"
+#include "dragonfly_lib.h"
+
+#define ORB_COUNT 8	//please dont change this, or bad things might happen
+
+struct ORB_NODE {
+  uint8_t num;
+  uint16_t angle;
+};
+
+struct ORB_CHANGE {
+  uint16_t port_val;
+  uint16_t split_time_period;
+};
+
+
+struct ORB_STATUS_STRUCT {
+  struct ORB_NODE orbs[ORB_COUNT];
+  uint16_t orb_angles[ORB_COUNT];
+  struct ORB_CHANGE changes[ORB_COUNT+1];
+  uint8_t change_count;
+  uint8_t new_angles;
+  uint8_t current_orb;
+
+} ORB_STATUS;
+
+void orb_sort(void);
+void orb_setup_pulse(void);
+
+SIGNAL (SIG_OUTPUT_COMPARE3C){
+
+  //pull the correct ones down
+  ORBPORT &= (~ORBMASK)|(ORB_STATUS.changes[ORB_STATUS.current_orb].port_val);
+
+  ++ORB_STATUS.current_orb; //now look at next orb transition
+
+  if (ORB_STATUS.current_orb < ORB_STATUS.change_count) { //if it isnt the end...
+	  
+    //setup timer for next pull down
+    OCR3C = TCNT3+ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period;
+		 
+  }
+  else { //we are done with these pulses
+		orb_setup_pulse();
+  }
+
+}
+
+
+//sets a channel to a value
+void orb_set_angle(int orb, int angle) {
+	uint8_t mysreg;
+	
+	orb=orb&0x07; //only have 8
+	angle=angle&0xff; //only accept 0-255
+	angle=255-angle; //inverse intensity
+	angle=angle<<2; //scale up so that we dont run it too often
+	angle+=3; //0 values dont really work
+  if (ORB_STATUS.orb_angles[orb] != angle) { //if the angle has changed
+	  mysreg=SREG; 
+	  cli(); //disable interrupts
+    ORB_STATUS.orb_angles[orb] = angle; //update angle
+    ORB_STATUS.new_angles = 1;
+	  SREG=mysreg; //put interrupt status back
+  }
+}
+
+
+void orb_sort(void) {
+  int done = 0, i;
+   
+  while (! done) {
+    done = 1;
+
+    for (i = 0; i < ORB_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+      if (ORB_STATUS.orbs[i].angle > ORB_STATUS.orbs[i+1].angle) {
+        ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+        ORB_STATUS.orbs[i+1].angle ^= ORB_STATUS.orbs[i].angle;
+        ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+
+        ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+        ORB_STATUS.orbs[i+1].num ^= ORB_STATUS.orbs[i].num;
+        ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+
+        done = 0;
+      }
+    }
+  }
+}
+
+//calculate the split times
+void orb_setup_pulse(void) {
+  int i;
+  uint16_t my_port;
+  uint16_t sum = 0;
+  uint16_t split_time;
+
+  my_port = 0xff; //all on
+
+  if (ORB_STATUS.new_angles) {
+
+    ORB_STATUS.change_count = 0;
+	  for (i = 0; i < ORB_COUNT; ++i) { //get the new values
+      ORB_STATUS.orbs[i].angle = ORB_STATUS.orb_angles[ORB_STATUS.orbs[i].num];
+    }
+
+    orb_sort(); //sort them
+    ORB_STATUS.new_angles = 0;
+
+    for (i = 0; i < ORB_COUNT; ++i) { //calculate split times
+      split_time = ORB_STATUS.orbs[i].angle - sum;
+      my_port &= ~_BV(ORB_STATUS.orbs[i].num);
+		 
+      for (; i < ORB_COUNT - 1 && ORB_STATUS.orbs[i].angle == ORB_STATUS.orbs[i+1].angle; ++i) {
+        my_port &= ~_BV(ORB_STATUS.orbs[i+1].num); //look for doups
+      }
+		 
+      ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port; //which pins are low
+      ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = split_time;
+         
+      ++ORB_STATUS.change_count;
+		 
+      sum += split_time;
+    }
+
+    ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port;
+    ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = ORB_RESET - sum; //get a constant period
+
+    ++ORB_STATUS.change_count;
+
+  }
+
+
+
+  ORB_STATUS.current_orb = 0;
+
+  ORBPORT |= ORBMASK; //start with all high
+	OCR3C = TCNT3 + ORB_STATUS.changes[0].split_time_period; //wait for first split
+
+}
+
+
+//Initializes the PWM for Orb control. This must be called before the Orbs are used for them to function.
+void orb_init() 
+{	
+  int i;
+  uint8_t mysreg;
+   
+  ORBDDR |= ORBMASK;	//all outputs
+   
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+  for (i = 0; i < ORB_COUNT; ++i) {
+    ORB_STATUS.orbs[i].num = i;
+    ORB_STATUS.orbs[i].angle = 1023;	//127 is a pretty stupid start angle, but oh well
+    ORB_STATUS.orb_angles[i] = 1023;
+  }
+
+  ORB_STATUS.new_angles = 1;
+  ORB_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C = 0;
+	ETIMSK |= _BV(OCIE3C); //turn on oc3c interrupt
+	OCR3C = TCNT3+ORB_RESET;
+
+	SREG=mysreg;
+
+}
+
+//Set both Orbs (1 and 2) to the same color as specified
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb1_set(red_led,green_led,blue_led);
+	orb2_set(red_led,green_led,blue_led);
+
+}
+
+//Sets Orb1 to the specified color
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb_set_angle(0,red_led);
+	orb_set_angle(1,green_led);
+	orb_set_angle(2,blue_led);
+}
+
+//Sets Orb2 to the specified color
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {	
+	orb_set_angle(4,red_led);
+	orb_set_angle(5,green_led);
+	orb_set_angle(6,blue_led);
+}
+
+
+//Sets both orbs to the same color using the color defines
+void orb_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb_set(red, green, blue);
+}
+//Sets both orbs to the same color using the color defines
+void orb1_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb1_set(red, green, blue);
+}
+//Sets both orbs to the same color using the color defines
+void orb2_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb2_set(red, green, blue);
+}
+
+//DOES THIS WORK?
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+/* If we use the PWM for anything else besides the ORB, this implementation needs to be done better */
+void orb_disable()
+{
+	TCCR3B &= 0;  	//Turn off everything
+	ORB_PORT |= _BV(ORB1_RED);
+	ORB_PORT |= _BV(ORB1_GREEN);
+	ORB_PORT |= _BV(ORB1_BLUE);
+	ORB_PORT |= _BV(ORB2_RED);
+	ORB_PORT |= _BV(ORB2_GREEN);
+	ORB_PORT |= _BV(ORB2_BLUE);
+}
+
+//DOES THIS WORK?
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+//	TCCR0 |= _BV(COM01) | _BV(COM00)  | _BV(WGM00) | _BV(CS01);	//Toggle OC Pin on match, FAST PWM Mode, clock/8
+	TCCR3B =_BV(CS31);
+
+}
+
+void orb_tester()
+{
+	orb_init();
+	lcd_init();
+	sei();
+
+	while(1)
+	{
+		orb_set_color(RED);
+		//orb_set1(128,128,128);
+		//orb_set2(1,56,255);
+		delay_ms(100);
+		for (int i = 0; i < ORB_COUNT; i++) {
+			lcd_putint(ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period>>3);
+			lcd_putchar(' ');
+		}
+		
+		delay_ms(2000);
+		lcd_clear_screen();
+		orb_set_color(GREEN);
+		//orb_set1(128,128,128);
+		//orb_set2(128,128,128);
+		delay_ms(100);
+		for (int i = 0; i < ORB_COUNT; i++) {
+			lcd_putint(ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period>>3);
+			lcd_putchar(' ');
+		}
+		
+		delay_ms(2000);
+		lcd_clear_screen();
+	}
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_slave/ring_buffer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_slave/ring_buffer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_slave/ring_buffer.h	(revision 62)
@@ -0,0 +1,115 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs Could not create buffer of non byte-sized elements due to modding with sizeof(queue).  
+ * 		  Fixed 3/2/07, Felix Duvallet and Brad Neuman
+ */
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+		uint8_t buffer_size;			\
+	} __VA_ARGS__
+
+
+/** @brief Initializes the ring buffer, setting its size to the correct value
+ *
+ *	@param buf The ring buffer to initialize.
+ *
+ *  @param size The size of the ring buffer (in array elements)
+ */
+#define RING_BUFFER_INIT(buf, size) 			\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % (buf).buffer_size == (buf).start)
+
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % (buf).buffer_size;	\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % (buf).buffer_size;	\
+	} while (0)
+
+/** @brief Checks the value at the head of the ring buffer without removing it
+ *  and puts it into val_ret. Note that val_ret must be the same type used in
+ *  creating the ring buffer to prevent the compiler from spewing confusing
+ *  errors. Also, this assumes that the ring buffer is not empty.
+ *
+ *  @param buf The ring buffer to check from
+ *  @param val_ret where to put the value checked from the head of the ring
+ */
+ #define RING_BUFFER_PEEK(buf, val_ret)  \
+  do { \
+    (val_ret) = (buf).queue[(buf).start]; \
+  } while(0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/charge_board/code/projects/colonet/utilities/sendpacket/sendpacket.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/sendpacket/sendpacket.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/sendpacket/sendpacket.c	(revision 62)
@@ -0,0 +1,73 @@
+/* Eugene Marinelli
+ * 10/5/06
+ * sendpacket - sends a packet through the xbee dongle
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include "wireless.h"
+
+#define SERIAL_PORT "/dev/ttyS0"
+#define SERVER_ID 213
+
+int message_length = 15;
+
+int main(int argc, char** argv){
+  FILE* serial = fopen(SERIAL_PORT, "w");
+  WL_Packet pkt;
+  int i;
+
+  if(argc < 2){
+    fprintf(stderr, "Error: no packet content specified.\n");
+    return -1;
+  }
+
+  fprintf(stderr, "Sending message: %s\n", argv[1]);
+
+  wl_create_packet(argv[1], SERVER_ID, GLOBAL_DEST, &pkt);
+  
+  printf("%x %x %x %x\n", pkt.prefix[0], pkt.prefix[1], pkt.src, pkt.dest);
+
+  fprintf(serial, "%c%c%c%c", pkt.prefix[0], pkt.prefix[1], pkt.src, pkt.dest);
+
+  for(i = 0; i < message_length; i++){
+    fprintf(serial, "%c", pkt.msg[i]);
+  }
+
+  fprintf(serial, "%c", pkt.checksum);
+
+  fclose(serial);
+
+  return 0;
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  printf("checksum: %d\n", packet->checksum);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lights.h	(revision 62)
@@ -0,0 +1,91 @@
+/*
+lights.h
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+//user LED
+#ifdef FFPP
+
+#define USERLED 15
+#define USERLED1 15
+#define USERLED2 31
+
+#else
+
+#define USERLED PING2
+#define USERLED1 PING2
+#define USERLED2 PING2 //only have 1
+
+//LEDs are on bank E
+#define REDLED   PE3
+#define GREENLED PE4
+#define BLUELED  PE5
+
+#endif
+
+//ORB
+#define RED       0xE0
+#define ORANGE    0xE8
+#define YELLOW    0xFC
+#define LIME      0x7C
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0x63
+#define PURPLE    0x23
+#define MAGENTA   0xE3
+#define WHITE     0xFF
+#define ORB_OFF   0x00
+
+
+
+//?
+#define COUNT_START 0x8000
+
+
+//user LED
+void led_init( void );
+void led_user(int value);
+
+
+// For function descriptions see orb.c 
+void orb_init(void);
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led); 
+void orb_set_color(int col);
+void orb_disable(void);
+void orb_enable(void);
+
+void orb_set_dio(int red, int green, int blue);
+
+#ifdef FFPP
+int orbs[32];
+
+//send now
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//force send
+void orb_send(void);
+
+void tlc5940test(void);
+
+void tlc_clock1(int data);//may not need these 2
+void tlc_clock2(int data);
+
+void tlc_send(void);
+void tlc_latch(void);
+
+
+void tlc5940init(void);
+#endif
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/motor.c	(revision 62)
@@ -0,0 +1,107 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+#ifndef FFPP
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = 0xA1;
+	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+#else
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution at a frequency of
+	// PWM is mode 1, Freq = Clock I/O/1024. 
+	// OC1A and OC1B as pwm.
+	OCR1A = 0x00;
+	OCR1B = 0x00;
+	
+	PORTD &= 0x0F;
+	DDRD |= 0xF0;
+	DDRB |= 0x60;
+	
+	TCCR1A = 0xA1;
+	TCCR1B = 0x05;
+#endif
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x10;
+		PORTD &= 0xBF;
+	}
+	else {
+		PORTD |= 0x40;
+		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+#else
+
+	if(direction == FORWARD) {
+		PORTD = (PORTD & 0xCF) | 0x20;
+	}
+	else {
+		PORTD = (PORTD & 0xCF) | 0x10;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1A = speed;
+#endif
+
+}
+
+void motor2_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x20;
+		PORTD &= 0x7F;
+	}
+	else {
+		PORTD |= 0x80;
+		PORTD &= 0xDF;
+	}
+	OCR1BL = speed;
+#else
+
+	if(direction != FORWARD) {
+		PORTD = (PORTD & 0x3F) | 0x80;
+	}
+	else {
+		PORTD = (PORTD & 0x3F) | 0x40;
+	}
+	
+	OCR1B = speed;
+#endif
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/follow.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/follow.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/follow.c	(revision 62)
@@ -0,0 +1,47 @@
+
+#include "firefly+_lib.h"
+#include "follow.h"
+
+#define FWD 0
+#define BCK 1    
+
+#define TOTAL 16
+
+
+/*
+int find_max
+returns the index of the BOM with the highest reading
+* note: index, not value
+*/
+
+void seek(int relative_position) 
+{
+	int speed = 255;
+	
+	//MOTOR1 - left
+	//MOTOR2 - right
+	
+	if(relative_position < 5 || relative_position > 13)
+	{ //turn right
+		motor2_set(BCK, 0);
+		motor1_set(FWD, speed);
+	}
+	else if(relative_position > 5 && relative_position <= 13)
+	{ //turn left
+		motor2_set(FWD, speed);
+		motor1_set(BCK, 0);
+	}
+	else 
+	{ //go forward
+		//turn_off_motors();
+		motor1_set(FWD, speed);
+		motor2_set(FWD, speed);
+	}
+}
+
+void drive_forward (void)
+{
+    int speed = 255;
+    motor1_set(FWD, speed);
+    motor2_set(FWD, speed);
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/wireless.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/wireless.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/wireless.h	(revision 62)
@@ -0,0 +1,32 @@
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+/*
+Wireless - wireless functions for Colony
+
+Eugene Marinelli
+7/22/06
+*/
+
+#define WL_MSG_MAX_LEN 16
+#define WL_PACKET_MAX_LEN (WL_MSG_MAX_LEN+5)
+
+#define GLOBAL_DEST 200
+
+typedef struct {
+  char prefix[2];
+  char src;
+  char dest;
+  char msg[WL_MSG_MAX_LEN];
+  char checksum;
+} WL_Packet;
+
+int wl_init(int msg_len, char listener_address);
+int wl_send(char* msg, char dest);
+int wl_recv(char* msgbuf, char* src, char* dest);
+// get most recent valid message - implement message queue later
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet);
+char wl_get_checksum(WL_Packet* packet);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/motor.h	(revision 62)
@@ -0,0 +1,43 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+#ifdef FFPP
+
+#define IN1A PD4
+#define IN1B PD5
+#define IN2A PD6
+#define IN2B PD7
+
+/* truth table for this robot (w/ 17529 and nand gates)
+PWM	!A	!B	M+	M-
+L	X	X   Z	Z  - coast
+H	0	0	Z	Z  - coast
+H	0	1	1	0  - forward
+H	1	0	0	1  - backward
+H	1	1	0	0  - fast brake
+
+*/
+
+
+
+
+#endif
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off( void );
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/follow.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/follow.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/follow.h	(revision 62)
@@ -0,0 +1,9 @@
+
+#ifndef _FOLLOW_H
+#define _FOLLOW_H
+
+
+void seek(int velocity);
+void drive_forward (void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/serial.c	(revision 62)
@@ -0,0 +1,143 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	author: Robotics Club, Colony Project
+	
+	much code taken from FWR's library, author: Tom Lauwers
+	
+	
+	general note - serial -> uart
+				   serial1 -> uart1
+		this is done for clarity purposes
+*/
+
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+//setup uart0 (serial)
+void serial_init(unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR0H = 0x00;
+	UBRR0L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+}
+
+// uart_putchar - Low-level function which puts a value into the 
+// Tx buffer for transmission.  Automatically injects
+// a \r before all \n's
+int serial_putchar(char c)
+{
+
+    if (c == '\n')
+		putchar('\r');
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR0A, UDRE0);
+	// Load buffer with your character
+    UDR0 = c;
+    return 0;
+}
+
+// uart_getchar - Low-level function which waits for the Rx buffer
+// to be filled, and then reads one character out of it.
+// Note that this function blocks on read - it will wait until
+// something fills the Rx buffer.
+int serial_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+    c = UDR0;
+	return c;
+}
+
+// uart_getchar_nb - Low-level function which checks if the Rx buffer
+// is filled, and then reads one character out of it.
+// This is a non blocking version uart_getchar
+int serial_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR0A, RXC0);
+	if (UCSR0A & _BV(RXC0)){
+		// Read the receive buffer
+		c = UDR0;
+		return c;
+	}
+	return 0;
+		
+}
+
+//setup uart1 (serial1)
+void serial1_init( unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR1H = 0x00;
+	UBRR1L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  /* For use with fprintf() and related functions */
+  serial1_stream = fdevopen(serial1_putchar, serial1_putchar);
+  
+  /* To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); 
+     This call to fdevopen() does give a compile warning
+  but works fine.
+  -Greg Tress
+  */
+}
+
+//put to uart1 (serial1)
+int serial1_putchar(char c)
+{
+
+    if (c == '\n')
+		serial1_putchar('\r'); //changed from putchar aj
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR1A, UDRE1);
+	// Load buffer with your character
+    UDR1 = c;
+    return 0;
+}
+
+//get from uart1 (serial1)
+int serial1_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+    c = UDR1;
+	return c;
+}
+
+//get from uart1 non-block
+int serial1_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR1A, RXC1);
+	if (UCSR1A & _BV(RXC1)){
+		// Read the receive buffer
+		c = UDR1;
+		return c;
+	}
+	return 0;
+		
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/buzzer.c	(revision 62)
@@ -0,0 +1,76 @@
+/*
+	buzzer.c - Contains the functions necessary for running the buzzer
+	
+	author: Robotics Club, Colony Project
+	
+	much taken from FWR's firefly library (author: Tom Lauwers)
+
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+	// Set pin D7 to output - D7 is buzzer pin
+	DDRB |= 0x80;
+	
+	// Set to Fast PWM mode, toggle the OC0A pin (D6) on output compare
+	// matches, and select a clock prescalar of 64 for the counter.
+	// Counter FREQ = 8000000/64 = 125000
+	//01011000
+	TCCR2 = 0x1B;
+	OCR2=100;
+	
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+	int buzz_value;
+	
+	buzz_value = 62500/buzz_freq - 1;
+
+	if(buzz_value > 255)
+		buzz_value = 255;
+	else if(buzz_value < 0)
+		buzz_value = 0;
+	
+	buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{	
+	buzzer_set_freq(buzz_freq);
+	
+	delay_ms(ms);
+		
+	buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off() 
+{
+	// Disable clock, to halt counter
+	TCCR2 &= 0xF8;
+	
+	// Set buzzer pin low in case it's high
+	PORTB &= 0x7F;
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/serial.h	(revision 62)
@@ -0,0 +1,49 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// Tested baud rates
+#define BAUD9600    103
+#define BAUD115200  8  //Warning--3.5% error
+
+// Untested baud rates that might be right --aaron
+#define BAUD1M	     0
+#define BAUD500K     1
+#define BAUD250K     3
+#define BAUD230400   3   //Warning--8.5% error
+#define BAUD76800    12
+#define BAUD57600    16  //Warning--2.1% error
+#define BAUD38400    25
+#define BAUD28800    34
+#define BAUD19200    51
+#define BAUD14400    68
+#define BAUD4800     207
+#define BAUD2400     416  //Might not work, since it needs some high bits set
+
+#include <stdio.h>
+FILE *serial1_stream;  //For use with fprintf() and related functions
+
+  /* NOTE: To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); */
+
+// Function descriptions are available in serial.c
+
+//serial (serial0) is the ttl serial (wireless)
+void serial_init( unsigned int ubrr);
+int serial_putchar(char c);
+int serial_getchar(void);
+int serial_getchar_nb(void);
+
+//serial1 is the rs-232 port (db9 connector) (except on robot0 where both are serial0)
+void serial1_init( unsigned int ubrr);
+int serial1_putchar(char c);
+int serial1_getchar(void);
+int serial1_getchar_nb(void);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/manualControlRobot.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/manualControlRobot.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/manualControlRobot.c	(revision 62)
@@ -0,0 +1,87 @@
+/*
+Ryan Kellogg 
+10/12/06
+manualControlRobot - Receives commands from server and executes
+*/
+
+/* Includes */
+#include <stdio.h>
+#include <string.h>
+ 
+#include <firefly+_lib.h>
+#include "pindefs_ff.h"
+
+#include <wireless.h>
+
+#define FORWARD 0xF0
+#define BACK 0xF1
+#define RIGHT 0xF2
+#define LEFT 0xF3
+#define STOP 0xF4
+
+void init_hardware(void);
+
+/* Main */
+int main(void){
+  char buf[80];
+  char src, dest;
+  
+  init_hardware();
+  wl_init(3,1);
+
+  orb_set_color(GREEN);
+
+  while(1){
+    if(wl_recv(buf, &src, &dest)){
+      lcd_putchar('[');
+      lcd_putchar(buf[0]);
+      lcd_putchar(']');
+      orb_set_color(RED);
+    }else{
+      printf(".");
+      orb_set_color(GREEN);
+    }
+    
+    switch(buf[0]){
+      case FORWARD:
+        motor1_set(0,255);
+        motor2_set(0,255);
+        break;
+      case BACK:
+        motor1_set(1,255);
+        motor2_set(1,255);
+        break;
+      case LEFT:
+        motor1_set(1,255);
+        motor2_set(0,255);
+        delay_ms(150);
+        motors_off();
+        break;
+      case RIGHT:
+        motor1_set(0,255);
+        motor2_set(1,255);
+        delay_ms(150);
+        motors_off();
+        break;
+      case STOP:
+        motors_off();
+      }
+      
+      buf[0] = 0;
+  }
+  
+  return 0;
+}
+
+void init_hardware(){
+  motors_init();
+  orb_init();
+  led_init();
+  analog_init();
+  
+  serial_init(BAUD9600);
+  serial1_init(BAUD115200);2
+  lcd_init();
+
+  fdevopen(&serial1_putchar, &serial1_getchar);
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/buzzer.h	(revision 62)
@@ -0,0 +1,33 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+	
+	
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/localization.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/localization.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/localization.c	(revision 62)
@@ -0,0 +1,84 @@
+#include "localization.h"
+
+#include "firefly+_lib.h"
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/Makefile	(revision 62)
@@ -0,0 +1,519 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = robotWirelessRelay
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 9600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/localization.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/localization.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/localization.h	(revision 62)
@@ -0,0 +1,28 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+
+
+typedef struct{
+    //actual row of sensor values -- need to be able to have up to
+    //max_robots
+    unsigned char row[MAX_ROBOTS];
+    //actual length of the row
+    unsigned char len;
+    //'index' value of the row -- which robot it's for
+    unsigned char row_num;
+    
+ } SensorRow;
+ 
+ 
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS);
+ 
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/servo.c	(revision 62)
@@ -0,0 +1,132 @@
+/*  
+	servo.c - Contains functions and interrupts necessary to activate servos
+	author:  Tom Lauwers
+	
+	3/1/06 Iain
+		Man, I don't know what a servo is. 
+*/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <servo.h>
+#include <dio.h>
+#include <lights.h>
+#include <lcd.h>
+//1677.7216 c/ms
+//i dunno must be 2^k
+//250
+//9C40 ~ 20ms
+//#A000 ~ 20.48 but prolly wont work
+//div by 256: 6.55078125 c/ms 80 ~ 19.5ms
+#define SERVO_PERIOD 0x80
+//needs be 1ms
+//is 1.22ms
+#define SERVO_CONSTANT 0x8
+
+/* dirty dirty
+unsigned int servo_vals[4] = {0,0,0,0}; // Stores the set servo values
+int current_servo = 0;  // Stores which servo is current in the interrupt routine
+*/
+unsigned int servo_vals[8] = {0,0,0,0,0,0,0,0}; // Stores the set servo values
+int phase_time=0;
+int phase_base=0;
+int servos_on = 0;      // Stores which servos are enabled
+int servos_enabled=0; //which are high
+int servo_flag = 0;     // Stores whether or not servos are enabled
+
+/* Timer 1 output compare B interrupt.  Does the following:
+	Checks to see if the current servo is 4, in which case just need
+	to set low servo 3's signal and return.
+	Else, check to see if the current servo is enabled, and set it's signal high
+	Then, set the previous servo's signal low
+	Now, set the next output compare to occur for some time from now 
+	specified by the current servo's value
+*/
+SIGNAL (SIG_OUTPUT_COMPARE3B)
+{
+	lcd_putchar('i');
+	if(servo_flag == 0)
+		return;
+	
+	int i;
+	if(phase_time == 0){
+		lcd_putchar('p');
+		for(i=0;i<8;i++){
+			if(servos_on & _BV(i))
+				digital_output((_PORT_E << 3) +i,1);
+		}
+		servos_enabled = servos_on;
+		phase_base = OCR3B;
+	}
+
+	unsigned int min=~0;
+	for(i=0;i<8;i++){
+		if(_BV(i) & servos_enabled){
+			if(SERVO_CONSTANT*servo_vals[i] <= phase_time){
+				digital_output((_PORT_E << 3) + i,0);
+				servos_enabled &= ~_BV(i);
+			}
+			else if(SERVO_CONSTANT*servo_vals[i] < min) {
+				min = servo_vals[i];
+			}
+		}
+	}
+	if(!servos_enabled){
+		OCR3B = phase_base + SERVO_PERIOD;
+		phase_time = 0;
+	}
+	else {
+		OCR3B = phase_base + min;
+		phase_time = min;
+	}
+	
+}	
+
+void init_servo()
+{
+	//1010 1001
+	TCCR3A = 0; 
+	//0000 0100
+	TCCR3B = 0x4;  //prescaler to 256
+	TCCR3C=0;
+	lcd_init();
+	ETIMSK |= 0x08;
+	servo_flag = 1;
+	OCR3B = 0x0;
+	lcd_putchar('i');
+}
+
+// Enable a servo specified by config
+void enable_servo(int config)
+{
+	servos_on |= _BV(config);
+}
+
+// Disable a servo specified by config
+void disable_servo(int config)
+{
+	servos_on &= (0xFF-_BV(config));
+}
+
+// Disables the timer1 interrupt, disabling the servos
+void disable_servos()
+{
+	// Disables interrupts
+	ETIMSK &= ~0x08;
+	servo_flag=0;
+
+}
+
+// Enables the timer1 interrupt, enabling the servos
+void enable_servos()
+{
+	// Enable interrupts on output compare B
+	ETIMSK |= 0x08;
+	servo_flag=1;
+}
+// Set a servo to a value.  Automatically enables the servo.
+void set_servo(int servo, unsigned int value)
+{
+	enable_servo(servo);
+	servo_vals[servo] = value;
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/time.c	(revision 62)
@@ -0,0 +1,100 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <help.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/*
+void rtc_init(void)
+call this function to start the real time timer
+use rtc() to get the time value and rtc_resest() to reset
+
+requires global interrupts to be enabled for proper use
+(I bit of SREG register should be set)
+
+uses TIMER0 on asynchronous mode
+*/
+
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void)){
+	int mask = _BV(TCN0UB) + _BV(OCR0UB) + _BV(TCR0UB);
+	char tmp;
+	
+	TIMSK &= ~(_BV(OCIE0) + _BV(TOIE0)); //1. disable interrupts
+	ASSR |= _BV(AS0); //2. selecting clock source (external)
+	
+	//3. writing new values to TCCR, TCNT, OCR
+	TCNT0 = 0;
+	OCR0 = ocr_val;
+	TCCR0 = (0x01 << 3) + (prescale_opt & 0x07); //setting CTC mode, prescaler is lowest 3 bits
+	
+	//4. waiting for busy bits to clear
+	tmp = ASSR;
+	while( tmp & mask ){
+		tmp = ASSR;
+	}
+	
+	TIFR &= ~(_BV(OCF0) + _BV(TOV0)); //5. clearing the interrupt flags
+	TIMSK |= _BV(OCIE0); // + _BV(TOIE0); //6. enabling interrupts
+	
+	_rtc_f = rtc_func;
+}
+
+int rtc(void){
+	return _rtc_val;
+}
+
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+SIGNAL (SIG_OUTPUT_COMPARE0){
+	_rtc_val++;
+	
+	if(_rtc_f != 0)
+		_rtc_f();
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/analog.c	(revision 62)
@@ -0,0 +1,134 @@
+/*
+	analog.c - Contains the function implementations for manipulating the ADC
+	on the firefly+ board
+	
+	author:  CMU Robotics Club, Colony Project
+	code mostly taken from fwr analog file (author: Tom Lauwers)
+*/
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void analog_init(void){
+
+	/*
+		ADC Status Register A
+		Bit 7 - ADEN is set (enables analog)
+		Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+		Bit 5 - Enable Auto Trigger (for free running mode)
+		Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+		Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 16,000,000/128
+	*/
+	ADCSRA |= 0xEF;
+
+	/*
+		ADMUX register
+		Bit 7,6 - Set voltage reference to AVcc (0b01)
+		Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+		Bit 4 - X
+		Bit 3:0 - Sets the current channel
+	*/
+	ADMUX = 0x67;
+	
+	#ifdef FFPP
+	DDRA |= 0x70;
+	set_adc_mux(0x07);
+	#endif
+	
+}	
+
+#ifdef FFPP
+void set_adc_mux(int which)
+{
+  // A4..A6 set mux to port 0-7 via binary selection
+  
+  // mask so only proper bits are possible.
+  which &= 0x07;
+  PORTA &= 0x8F;
+  PORTA |= which << 4;
+}
+
+void enable_analog(int analog_setting)	//why do we need this?
+{
+	// Digital input disable - don't disable any of them
+	// Set any of the lower six bits to a 1 to disable that bit
+	DDRF = 0x00; //ALL_ANALOG;
+}
+#endif
+
+unsigned int analog8(int which){
+
+#ifdef FFPP
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)		//Why dont we combine this and the above?
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(10);
+	}
+
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+
+	_delay_ms(1); // need at least 130 us between conversions (for fwr robot, how much for new avr?)
+	return ADCH;
+}
+
+unsigned int analog10(int which){
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+	
+
+
+#ifdef FFPP
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)		//Why dont we combine this and the above?
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(10);
+	}
+
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void){
+	return analog8(WHEEL_PORT);
+}
+
+int battery(void){
+	return analog8(BATT_PORT) * 500 >>7; /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/firefly+_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/firefly+_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/firefly+_lib.c	(revision 62)
@@ -0,0 +1,179 @@
+#include <firefly+_lib.h>
+#include <rangefinder.h>
+
+void button_test ( void);
+void motor_test (void);
+void serial_test( void );
+void lcd_test(void);
+void orb_test( void );
+void batt_test(void);
+void pullup_test(void);
+void ranger_test(void);
+
+/*
+int main( void ) {
+//	orb_init();
+	//motors_init();
+	tlc5940test();
+	//ranger_test();
+	//pullup_test();
+	//serial_test();
+	//lcd_test();
+	
+ orb_set_num(2, 255,0,0);
+	motor_test();
+ orb_set_num(3, 255,0,0);
+	return 0;
+}*/
+
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+void button_test ( void) 
+{
+
+	lcd_init();
+	
+	while(1) {
+	
+	
+		if(button1_read())
+			lcd_putchar('1');
+		if(button2_read())
+			lcd_putchar('2');
+			
+		delay_ms(100);
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	motor1_set(1, 255);
+	motor2_set(1, 255);
+	
+	delay_ms(10000);
+	
+	motors_off();
+	led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+void orb_test( void ) {
+	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	
+	
+	while(1) {
+		orb_set_color(orbs[orb_select]);
+		delay_ms(1000);
+		orb_select++;
+		if(orb_select == 14)
+			orb_select = 0;
+	}
+
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i;
+	lcd_init();
+	
+	for(i = 32; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+	}
+	
+	
+	return;
+	
+}
+
+/*
+prints all printable characters to the serial
+
+baud rate is 115200
+*/
+void serial_test( void ) {
+	int i;
+	
+	serial1_init(BAUD115200);
+	fdevopen(&serial1_putchar,&serial1_getchar);
+	for(i = 32; i <= 126; i++) {
+		printf("%d",i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+
+	analog_init();
+
+	while(1){
+		lcd_clear_screen();
+		lcd_putint(battery());
+		delay_ms(1000);
+	}
+}
+
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lcd.c	(revision 62)
@@ -0,0 +1,264 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+#include "oled.h"
+
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+	{ 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+#ifdef FFPP
+
+	OLED_init();
+
+#else
+
+	LCDDDR |= (D_C | SCE | SDI | SCK);
+	LCDRESETDDR |= RST;
+
+	LCDPORT &= ~(D_C | SCE | SDI | SCK);
+	
+	SPCR |= 0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+#endif
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+#ifdef FFPP
+	drawclear();
+#else
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+#endif
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+#ifndef FFPP
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+#endif
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+#ifndef FFPP
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+#endif
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+#ifndef FFPP
+  LCDPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDPORT |= D_C;
+#endif
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/servo.h	(revision 62)
@@ -0,0 +1,16 @@
+/*  
+	servo.h - Contains function prototypes for servo activation
+	author:  Tom Lauwers
+*/
+#ifndef _SERVO_H_
+#define _SERVO_H_
+
+// Information on functions available in servo.c
+void init_servo(void);
+void enable_servos(void);
+void enable_servo(int config);
+void set_servo(int servo, unsigned int value);
+void disable_servos(void);
+void disable_servo(int );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/time.h	(revision 62)
@@ -0,0 +1,58 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#define TIMER_OFF         0x00
+#define PRESCALE_NONE     0x01
+#define PRESCALE_DIV_8    0x02
+#define PRESCALE_DIV_32   0x03
+#define PRESCALE_DIV_64   0x04
+#define PRESCALE_DIV_128  0x05
+#define PRESCALE_DIV_256  0x06
+#define PRESCALE_DIV_1024 0x07
+
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void));
+
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/move.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/move.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/move.c	(revision 62)
@@ -0,0 +1,86 @@
+//Created 4/30/06 by James Kong
+
+#include "firefly+_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/analog.h	(revision 62)
@@ -0,0 +1,95 @@
+/*
+	analog.h - Contains definitions and function prototypes for using the
+	ADC to detect analog signals on pins AN0 - AN7
+	AN6 and AN7 are used for the wheel and battery
+	
+	The pins labeled E6 and E7 are external interrupt pins and are not related to analog
+	
+	author: CMU Robotics Club, Colony Project
+	code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+
+#ifdef FFPP
+#define AN8 0x08
+#define AN9 0x09
+#define ANA 0x0A
+#define ANB 0x0B
+#define ANC 0x0C
+#define AND 0x0D
+#define ANE 0x0E
+#define ANF 0x0F
+
+#define EXT_MUX   0x07
+#define IR_READ   0x08
+#define IR1_READ  0x08
+#define IR2_READ  0x09
+#define IR3_READ  10
+#define IR4_READ  11
+#define IR5_READ  12
+#define ADC_BATT  13
+#define ADC_WHEEL 14
+#define ADC_3V3   15
+
+#define WHEEL_PORT ANE
+#define BATT_PORT AND
+
+#else
+
+#define WHEEL_PORT AN6
+#define BATT_PORT  AN7
+
+#endif
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+#ifdef FFPP
+ void enable_analog(int analog_setting);
+void set_adc_mux(int which);
+#endif
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/firefly+_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/firefly+_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/firefly+_lib.h	(revision 62)
@@ -0,0 +1,33 @@
+/*
+
+firefly+_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+#ifndef _FIREFLY_LIB_H_
+#define _FIREFLY_LIB_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+//#include <avr/signal.h>
+#include <avr/interrupt.h>
+//#include <avr/delay.h>
+#include <util/delay.h>
+
+#include <analog.h>
+#include <dio.h>
+
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lcd.h	(revision 62)
@@ -0,0 +1,84 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+#ifndef FFPP
+
+//////lcd defines
+#define RST 0x04  // pe2 (GPIO)
+#define SCE 0x01  // pb0 (~SS)
+#define D_C 0x10  // pb4 (GPIO?)
+#define SDI 0x04  // pb2 (MOSI)
+#define SCK 0x02  // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTE
+#define LCDRESETDDR DDRE
+
+#else
+	
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow);
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+inline void drawclear(void);
+
+void drawscroll(char hoff, char srow, char rows, char speed);
+inline void drawscrollstart(void);
+inline void drawscrollstop(void);
+
+void drawIR(void);
+
+void crazycircle (void);
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+
+#endif
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/pindefs_ff.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/pindefs_ff.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/pindefs_ff.h	(revision 62)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/move.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/move.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/move.h	(revision 62)
@@ -0,0 +1,34 @@
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/dio.c	(revision 62)
@@ -0,0 +1,312 @@
+/* 
+
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+	the first 3 (abc in this example) are used to select the bank
+		A = 001
+		B = 010
+		C = 011
+		D = 100
+		E = 101
+		F = 110
+		G = 111
+		
+		the bank can be found by doing portpin >> 3
+		
+	the next 3 (def in this example) are used to select the pin number
+	the 3 bits are just the binary representation of the pin number
+		0 = 000
+		1 = 001
+		2 = 010
+		3 = 011
+		4 = 100
+		5 = 101
+		6 = 110
+		7 = 111
+		
+		the pin number can be found by doing portping & 0b111
+		
+
+*/
+
+#include <avr/interrupt.h>
+
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+/*
+digital_input
+
+reads the value on the selected portpin, returns it as 1 or 0
+see general description (above) for definition of portpin
+
+*/
+int digital_input(int portpin){
+	int pin = portpin & 0x7;
+	int pin_val = 0;
+	
+	switch(portpin >> 3){
+		case _PORT_A:
+			DDRA &= ~_BV(pin);
+			pin_val = PINA;
+			return (pin_val >> pin) & 1;
+		case _PORT_B:
+			DDRB &= ~_BV(pin);
+			pin_val = PINB;
+			return (pin_val >> pin) & 1;
+		case _PORT_C:
+			DDRC &= ~_BV(pin);
+			pin_val = PINC;
+			return (pin_val >> pin) & 1;
+		case _PORT_D:
+			DDRD &= ~_BV(pin);
+			pin_val = PIND;
+			return (pin_val >> pin) & 1;
+		case _PORT_E:
+			DDRE &= ~_BV(pin);
+			pin_val = PINE;
+			return (pin_val >> pin) & 1;
+		case _PORT_F:
+			if(pin>=4){
+				MCUSR|=1<<7;
+				MCUSR|=1<<7;
+			}
+			DDRF &= ~_BV(pin);
+			pin_val = PINF;
+			return (pin_val >> pin) & 1;
+		case _PORT_G:
+			DDRG &= ~_BV(pin);
+			pin_val = PING;
+			return (pin_val >> pin) & 1;
+		default: break;
+	}
+	
+	return -1;
+}
+
+/*
+digital_pull_up
+Enables pullup on a pin.  if pin is output, it will make it output 1.
+
+*/
+void digital_pull_up(int portpin) {
+	int pins = portpin & 0x07;
+	
+
+	switch(portpin >> 3) {
+		case _PORT_A:
+			PORTA |= _BV(pins);
+			break;
+		case _PORT_B:
+			PORTB |= _BV(pins);
+			break;		
+		case _PORT_C:
+			PORTC |= _BV(pins);
+			break;		
+		case _PORT_D:
+			PORTD |= _BV(pins);
+			break;		
+		case _PORT_E:
+			PORTE |= _BV(pins);
+			break;		
+		case _PORT_F:
+			PORTF |= _BV(pins);
+			break;		
+		case _PORT_G:
+			PORTG |= _BV(pins);
+			break;
+	}
+	
+}
+
+/*
+digital_output
+
+sets portpin to the value
+
+see general description above for explanation of portpin
+
+val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+	int pins = portpin & 0x07;
+	
+	/*
+	if you want to set to 0
+	*/
+	if(val == 0) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA &= (0XFF - _BV(pins));
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG &= (0XFF - _BV(pins));
+				break;
+		}
+	}
+	else { /* ( val == 1) */ 
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA |= _BV(pins);
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB |= _BV(pins);
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC |= _BV(pins);
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD |= _BV(pins);
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE |= _BV(pins);
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF |= _BV(pins);
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG |= _BV(pins);
+				break;
+		}
+	}
+}
+
+
+
+
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	//return (BTN & (_BV(BTN1)) >> BTN1);
+	return (PIN_BTN >> BTN1) & 1;
+}
+
+/*
+similar to button1_read, but hold program until the button is actually pressed
+*/
+void button1_wait( void )
+{
+	while(!button1_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+/*
+same as button1_wait
+However, blink the led while waiting
+
+IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+void button1_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button1_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	return (PIN_BTN >> BTN2) & 1;
+}
+
+void button2_wait( void )
+{
+	while(!button2_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+void button2_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button2_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+	putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/dio.h	(revision 62)
@@ -0,0 +1,183 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+
+/*
+
+these are ALL the pins
+don't use unless you know what you're doing
+
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32
+#define _PIN_D1 33
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42
+#define _PIN_E3 43
+#define _PIN_E4 44
+#define _PIN_E5 45
+#define _PIN_E6 46
+#define _PIN_E7 47
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#ifndef FFPP
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+#endif
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#ifndef FFPP
+#define PIN_LED1 58
+#endif
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+///////////////////////
+//////  BUTTONS  //////
+///////////////////////
+#define PIN_BTN PING
+
+#define BTN2 PING1
+#define BTN1 PING0
+
+int button1_read( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/oled.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/oled.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/oled.c	(revision 62)
@@ -0,0 +1,394 @@
+#ifdef FFPP
+#include "firefly+_lib.h"
+/******************************************************************************/
+/*  OLED example.   8 bit mode                                           */
+/*      Spark Fun Electronics   5/3/06   OSO                                 */
+/******************************************************************************/
+/*                                                                            */
+/*    STOLEN and hacked to work with SPI, AVR     		                        */
+/******************************************************************************/
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor) {
+	write_c(0x86);
+	write_d(col);
+	write_d(row);
+	write_d(radius);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor) {
+	write_c(0x84);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor) {
+	write_c(0x83);
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+}
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) {
+	write_c(0x8A);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(ncol);
+	write_d(nrow);
+}
+
+void drawfill(char fill) {
+	write_c(0x92);    // fill enable command
+	write_d(0x01&fill); 
+}
+
+void drawclearwindow(char scol, char srow, char ecol, char erow) {
+	write_c(0x8e);    // clear window command
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+}
+
+inline void drawclear(void) {
+	drawclearwindow(0,0,130,130);
+}
+
+void drawscroll(char hoff, char srow, char rows, char speed) {
+	write_c(0x96);
+	write_d(hoff);
+	write_d(srow);
+	write_d((srow+rows>132)?132:rows);
+	write_d(0x00);
+	write_d(speed&0x3);
+	
+}
+
+inline void drawscrollstart(void) {
+	write_c(0x9F);
+}
+
+inline void drawscrollstop(void) {
+	write_c(0x9E);
+}
+
+#define ROBOSIZE 4
+
+#include "rangefinder.h"
+
+void drawIR(void) {
+/*	char d;
+	enable_IR();
+	drawclear();
+	delay_ms(500);
+	drawfill(1);
+	
+	delay_ms(10);
+
+	drawcircle(64,64-ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawcircle(64,64+ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawrect(64-ROBOSIZE,64-ROBOSIZE,64+ROBOSIZE,64+ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+
+	while(1){
+		
+		d=(convert_IR_distance(read_IR_val(1))-100)>>4;
+		if(d>63-ROBOSIZE*2){
+			d=0;//63-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(63, 0, 65, 63-ROBOSIZE*2);
+		drawline(64,63-ROBOSIZE*2-d,64,63-ROBOSIZE*2,C_RED);
+		delay_ms(5);
+		
+		
+		
+		
+
+		d=(convert_IR_distance(read_IR_val(0))-100)/11;
+		if(d>62-ROBOSIZE){
+			d=0;//64-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 0, 63-ROBOSIZE, 63-ROBOSIZE);
+		delay_ms(5);	
+		drawline(63-ROBOSIZE-d,63-ROBOSIZE-d,63-ROBOSIZE,63-ROBOSIZE,C_RED);
+		//delay_ms(25);	
+		delay_ms(5);
+		
+		
+
+//		d=(convert_IR_distance(read_IR_val(2))-100)/11;
+//		if(d>64){
+//			d=0;//64-ROBOSIZE*2;
+//		}
+//		delay_ms(100);	
+	
+//		drawclearwindow(65+ROBOSIZE,0, 128,128);
+//		delay_ms(5);	
+//		drawline(128-(65+ROBOSIZE+d),128-(65+ROBOSIZE-d),65+ROBOSIZE,(65-ROBOSIZE),C_RED);
+//		drawline(64,64-d,64+d,64,C_RED);
+		//delay_ms(25);	
+//		delay_ms(5);
+		
+		
+		
+		
+		
+		
+		d=(convert_IR_distance(read_IR_val(4))-100)>>4;
+		if(d>64-ROBOSIZE){
+			d=0;//64-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 63+ROBOSIZE, 63-ROBOSIZE, 65+ROBOSIZE);
+		drawline(64-ROBOSIZE-d,64+ROBOSIZE,63-ROBOSIZE,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+
+		d=(convert_IR_distance(read_IR_val(3))-100)>>4;
+		if(d>128-65-ROBOSIZE){
+			d=0;//128-65-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(65+ROBOSIZE, 63+ROBOSIZE, 127, 65+ROBOSIZE);
+		drawline(65+ROBOSIZE,64+ROBOSIZE,65+ROBOSIZE+d,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+		
+	}
+*/
+}
+
+void crazycircle (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+/*      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+	  */
+	  drawcircle(rand() % 130,rand() % 130,rand() %64, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void crazyrect (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+
+	  drawrect(rand() % 130,rand() % 130,rand() % 130,rand() % 130, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  drawclear();
+
+ delay_ms(100);
+  
+  drawfill(1);
+  
+  delay_ms(10);
+
+//  crazycircle();
+  
+//  delay_ms(500);
+  
+ // drawscroll(1,0,50,1);
+  //drawscrollstart();
+  //delay_ms(1000);
+  //drawscrollstop();
+  //drawcopy(0,0,100,100,50,50);
+ // delay_ms(100);
+//  drawfill(0);
+  //drawcircle(64,64,16,C_RED,C_GREEN);
+//  drawcircle(64,64,15,C_RED,C_GREEN);
+//  drawcircle(64,64,14,C_RED,C_GREEN);
+  
+  drawIR();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/rangefinder.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/rangefinder.c	(revision 62)
@@ -0,0 +1,183 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "firefly+_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+int read_distance (int range_id) {  
+#ifndef FFPP
+	int bitcount;
+	int current = 0;
+	digital_output(RANGE_CTRL, 0);						//set Vin Low
+	while(digital_input(range_id) == 0);				//waits until Vout reads high
+	digital_output(RANGE_CTRL, 1);						//first Vin clock high transition
+	
+	for(bitcount = 8; bitcount != 0; bitcount--){
+		digital_output(RANGE_CTRL, 0);					//Vin clock low transition
+		//clock delay (unnecessary)
+		current = current << 1;							//shifts current 8-bit value left
+		current |= digital_input(range_id);				//LSB set to Vout value
+		digital_output(RANGE_CTRL, 1);					//Vin clock high transition
+		//clock delay (unnecessary)
+	}													//repeats until all 8 bits are stored
+	return current;
+#else
+	enable_IR();
+	_delay_ms(5);										///////Figure out what this should be!!!!!!  Maybe if not enabled already?
+	return read_IR_val(range_id);
+#endif
+}
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+
+int linearize_distance (int reading) {
+#ifndef FFPP
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+#else
+	return convert_IR_distance(reading);
+#endif
+}
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+int log_distance(int distance) {
+#ifndef FFPP
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+#endif
+	return 0;
+}
+
+
+#ifdef FFPP
+
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+void enable_IR()
+{
+  // active low, so set enable to low to turn on IR
+  PORTC &= ~(_BV(IR_ENABLE));
+  DDRC |= _BV(IR_ENABLE);
+}
+
+void disable_IR()
+{
+  // active low, so set line high and turn to input for good measure (line has pull-up)
+  PORTC |= _BV(IR_ENABLE);
+  DDRC &= ~(_BV(IR_ENABLE));
+}
+
+int read_IR_val(int which)
+{
+  return analog8(IR_READ + which);
+}
+
+int convert_IR_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+int get_IR_distance(int which)
+{
+  return convert_IR_distance(read_IR_val(which));
+}
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/oled.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/oled.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/oled.h	(revision 62)
@@ -0,0 +1,82 @@
+#ifndef _OLED_H_
+#define _OLED_H_
+#ifdef FFPP
+
+#define C_BLUE 0x001f
+#define C_GREEN 0x07e0
+#define C_RED 0xf800 
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) ;
+
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+
+inline void drawclear(void) ;
+
+void drawscroll(char hoff, char srow, char rows, char speed) ;
+
+inline void drawscrollstart(void) ;
+inline void drawscrollstop(void) ;
+
+void drawIR(void);
+
+void crazycircle (void) ;
+
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+void OLED_init(void);
+
+void Reset_SSD1339(void);
+
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat);
+
+void RES(char stat);
+void CS(char stat);
+
+// send to the LCD
+void LCD_out(unsigned char cmd);
+
+
+#endif
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/rangefinder.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/rangefinder.h	(revision 62)
@@ -0,0 +1,70 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+//old range_in0
+//#define RANGE_IN0 PIN_AN5
+
+/*  These do not exist yet.
+#define RANGE_IN1 PIN_??
+#define RANGE_IN2 PIN_
+#define RANGE_IN3 PIN_
+#define RANGE_IN4 PIN_
+#define RANGE_IN5 PIN_
+#define RANGE_IN6 PIN_
+#define RANGE_IN7 PIN_
+*/
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+#ifdef FFPP
+// IR range finders are indexed 0-4.
+// IR1 is front left, IR2 is front center, IR3 is front right, IR4 is rear right, IR5 is rear left.
+
+// active low
+#define IR_ENABLE PC7
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+
+void enable_IR(void);
+void disable_IR(void);
+int read_IR_val(int);
+int convert_IR_distance(int);
+int get_IR_distance(int);
+#endif
+
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/photovore.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/photovore.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/photovore.h	(revision 62)
@@ -0,0 +1,25 @@
+#ifndef _PHOTOVORE_H_
+#define _PHOTOVORE_H_
+
+
+#define PHOTORESISTOR_LEFT AN1 //might be the opposite (Eugene)
+#define PHOTORESISTOR_RIGHT AN2
+
+//#define LIGHT_THRESHOLD 150 //hard coded for now...calculate dynamically later
+#define LIGHT_THRESHOLD 210 //hard coded for now...calculate dynamically later
+
+void do_photovore (void);
+unsigned char get_light_status (unsigned char me);
+void set_light_status (unsigned char robot, unsigned char lightstatus);
+
+
+void sense_light (void);
+inline char light_threshold(void);
+
+
+//define an array of length MAX_ROBOTS that has
+//1 if robot at index i can see the light, and 0
+//if it cannot
+//unsigned char robot_enlightenment[MAX_ROBOTS];
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/lights.c	(revision 62)
@@ -0,0 +1,355 @@
+/*
+lights.c
+Controls led_user (small green LED) and the ORB (big light)
+
+author: CMU Robotics Club, Colony Project
+*/
+
+#include "lights.h"
+#include "firefly+_lib.h"
+
+// the below comment may not be correct
+// Initializes timer2 to count every 0.5 us, overflowing every 16.32 ms (because we set the counter to start at 0x8000)
+void orb_init() 
+{
+#ifndef FFPP
+	//enable the data direction register on the 3 orb LEDs
+	DDRE |= _BV(REDLED) | _BV(GREENLED) | _BV(BLUELED);
+	
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+	TCCR3B = 0x0C;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+
+// clear Output Compare Registers
+	OCR3AH=0x00;
+	OCR3AL=0x00;
+	OCR3BH=0x00;
+	OCR3BL=0x00;
+	OCR3CH=0x00;
+	OCR3CL=0x00;
+
+#else
+	tlc5940init();	
+#endif
+}
+
+// Sets the red, green and blue elements of the LED with 8-bit resolution
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+#ifdef FFPP
+	orbs[28]=blue_led<<4;
+	orbs[29]=green_led<<4;
+	orbs[30]=red_led<<4;
+	tlc_send();
+#else
+	OCR3AL = red_led;
+	OCR3BL = green_led;
+	OCR3CL = blue_led;
+#endif
+}
+
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+void orb_disable()
+{
+#ifndef FFPP
+	TCCR3A = 0x01;  // COM## disconnected, WGM 1:0 set to 1
+#endif
+}
+
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+#ifndef FFPP
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+#else
+	tlc5940init();
+#endif
+}
+
+
+/*
+This function turns each Orb element on or off
+Useful for using the Orb for debugging purposes without
+the overhead of the software PWM routine used for color fading.
+*/
+void orb_set_dio(int red, int green, int blue) 
+{
+#ifdef FFPP
+	orb_set(red*255, green*255, blue*255);
+#else
+	if(red == 0)
+		PORTE &= (0xFF - _BV(REDLED));
+	else
+		PORTE |= _BV(REDLED);
+	
+	
+	if(green == 0)
+		PORTE &= (0xFF - _BV(GREENLED));
+	else
+		PORTE |= _BV(GREENLED);
+		
+	
+	if(blue == 0)
+		PORTE &= (0xFF - _BV(BLUELED));
+	else
+		PORTE |= _BV(BLUELED);
+#endif
+}
+
+
+/////////////////////////////////////////
+///////////    user LED   ///////////////
+/////////////////////////////////////////
+void led_init( void )
+{
+#ifdef FFPP
+	tlc5940init();
+#else
+	DDRG |= _BV(USERLED);
+#endif
+}
+
+void led_user(int value) 
+{
+#ifdef FFPP
+	orbs[USERLED]=value*4095;
+	tlc_send();
+#else
+	if(value == 0) 
+		PORTG &= (0xFF - _BV(USERLED)); 
+	else
+		PORTG |= _BV(USERLED);
+#endif
+}
+
+
+
+
+
+#ifdef FFPP
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	int high = (num>4);
+	orbs[3*num+high]=blue_led<<4;
+	orbs[3*num+1+high]=green_led<<4;
+	orbs[3*num+2+high]=red_led<<4;
+}
+
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	orb_set_num_ns(num,red_led,green_led,blue_led);
+	tlc_send();
+}
+
+
+void orb_send(){
+	tlc_send();
+}
+
+void tlc_clock1(int data)
+{
+  PORTC &= ~0x02;
+  PORTC |= (data << 1)&0x02;
+  _delay_us(1);
+  PORTC |= 0x04;
+  _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_clock2(int data)
+{
+  PORTC &= ~0x01;
+  PORTC |= (data)&0x01;
+ // _delay_us(1);
+  PORTC |= 0x04;
+ // _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_send(void)
+{
+  int i,j;
+  for(j = 15; j >= 0; j--)
+  {
+    for(i = 11; i >= 0; i--)
+    {
+      PORTC &= ~0x03;
+      PORTC |= ((orbs[j]>>i)&0x01);
+      PORTC |= ((orbs[j+16]>>i)<<1)&0x02;
+      // _delay_us(1);
+      PORTC |= 0x04;
+      // _delay_us(1);
+      PORTC &= ~0x04;
+    }
+  }
+  PORTC |= 0x08;
+  PORTC &= ~(0x08);
+}
+/*
+void tlc_send2(int value)
+{
+  int i;
+  
+  for(i = 11; i >= 0; i--)
+  {
+    tlc_clock2(0x01 & (value >> i));
+  }
+}*/
+
+void tlc_latch(void)
+{
+  PORTC |= 0x08;
+//  _delay_us(1);
+  PORTC &= ~(0x08);
+}
+
+void tlc5940init(void)
+{
+  int i;
+  
+  // set PC0...5 to outputs
+  DDRC |= 0x3F;
+  DDRE |= 0x08;
+  DDRA |= 0x80;
+  // unblank buffer
+  PORTC &= ~0x10;
+ 
+  // set DC mode so we start in known state
+  PORTC |= 0x20;
+  delay_ms(2);
+  
+  // set DC to all 1's?  needed?
+/*  for(i = 0; i < 96; ++i)
+  {
+    tlc_clock1(1);
+  }
+  tlc_latch();
+  */
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  
+  delay_ms(2);
+
+  // set GS mode
+  PORTC &= ~0x20;
+
+  // clock in 0s to do init case
+/*  for(i = 0; i < 16; ++i)
+  {
+    tlc_send1(0);
+  }  
+  tlc_latch();*/
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  // extra clock needed after DC -> GS transition
+  tlc_clock1(0);
+  tlc_clock2(0); //probably not needed
+  
+  TCCR3A |=_BV(COM3A0);
+  TCCR3B |= _BV(CS30)|_BV(WGM32); //prescaler
+  OCR3A = 1;
+  TCNT3 = 0;
+ // ETIMSK |=_BV(OCIE3A);//interrupt
+
+
+  TCCR2 = 0x05; //prescaler
+  TIMSK |= _BV(OCIE2);//interrupt
+  OCR2 = 16;
+  TCNT2 = 0;
+  sei();
+  
+}
+
+//int blankcounter = 0;
+char status = 0;
+
+ISR(TIMER2_COMP_vect){
+//	int i = 0;
+	//status=!status;
+	//if(status){
+		PORTC |= 0x10;
+//		for(i=0;i<1;i++);
+		PORTC &= ~0x10;
+//	}
+	
+	TCNT2=0;
+	//chirp(250, 150);
+}
+
+void silly_clock(void)
+{
+ /* int i;
+  
+  DDRA |= 0x80;
+  
+  PORTC |= 0x10;
+  _delay_us(1);
+  
+  for(i = 0; i < 4095; ++i)
+  {
+    PORTA |= 0x80;
+    _delay_us(1);
+    PORTA &= ~(0x80);
+	_delay_us(1);
+  }
+  */
+//  delay_ms(1);
+}
+
+void tlc5940test()
+{
+  int j, k;
+  
+  tlc5940init();
+
+	// fade up
+	for(j = 0; j < 4096; ++j)
+	{
+		  
+	  //tlc_send1(j);
+
+	  for(k = 0; k < 8; ++k)
+	  {
+      orbs[2*k]=4096-j;
+      orbs[2*k+1]=j;     
+      orbs[2*k+16]=0;
+      orbs[2*k+17]=j;
+	  }
+	  tlc_send();
+	}
+	
+	delay_ms(1000);
+	
+	// fade down
+	for(j = 0; j < 4096; ++j)
+	{
+	
+	  //tlc_send(4095 - j);
+
+	  for(k = 0; k < 32; ++k)
+	  {
+      orbs[k]=4096-j;
+    }
+	  tlc_send();
+	}
+}
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/help.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/help.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/help.h	(revision 62)
@@ -0,0 +1,31 @@
+#include "serial.h"
+
+char helper(char c){
+	switch(c){
+		case 0x00: return '0';
+		case 0x01: return '1';
+		case 0x02: return '2';
+		case 0x03: return '3';
+		case 0x04: return '4';
+		case 0x05: return '5';
+		case 0x06: return '6';
+		case 0x07: return '7';
+		case 0x08: return '8';
+		case 0x09: return '9';
+		case 0x0A: return 'A';
+		case 0x0B: return 'B';
+		case 0x0C: return 'C';
+		case 0x0D: return 'D';
+		case 0x0E: return 'E';
+		case 0x0F: return 'F';
+		default: return '?';
+	}
+}
+
+void print_hex(char val){
+	char hgh = (val & 0xF0) >> 4;
+	char low = (val & 0x0F);
+	
+	serial1_putchar(helper(hgh));
+	serial1_putchar(helper(low));
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/wireless.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/wireless.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlRobot/wireless.c	(revision 62)
@@ -0,0 +1,248 @@
+/*
+Wireless
+Eugene Marinelli
+
+(See .h for details)
+*/
+
+/* Includes */
+#include <firefly+_lib.h>
+#include <string.h>
+#include <avr/interrupt.h>
+
+#include "wireless.h"
+
+/* Constants */
+#define PREFIX0 'R'
+#define PREFIX1 'C'
+
+//wl_buf positions
+#define WL_SRC_LOC 2
+#define WL_DEST_LOC 3
+#define WL_DATA_START 4
+
+#define WL_TIMEOUT 4
+#define WL_TIMEOUT_INITIAL 4
+
+/* Globals */
+static char wl_buf[WL_PACKET_MAX_LEN];
+static WL_Packet latest_packet;
+static WL_Packet tmp_packet;
+static char new_message;
+static char listener_addr;
+
+static int message_length;
+
+static unsigned int wl_index;
+static unsigned char wl_chksum;
+static unsigned char wl_to_flag;
+static unsigned int wl_to_count;
+
+static unsigned int wl_to_max;
+
+static char first_time;
+
+/* Internal function headers */
+static void wl_timeout_handler(void);
+
+/* External function definitions */
+int wl_init(int msg_len, char listener_address){
+  if(msg_len > WL_MSG_MAX_LEN){
+    printf("Error: %s: message length must be less than %d\n", __FUNCTION__, 
+	   WL_MSG_MAX_LEN);
+    return -1;
+  }
+
+  message_length = msg_len;
+
+  listener_addr = listener_address;
+
+  wl_index = 0;
+  wl_chksum = 1;
+  
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+  /* executes the function about every 1/4 sec */
+
+  wl_to_flag = 0;
+  wl_to_count = 0; 
+
+  first_time = 1;
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+  
+  sei();
+
+  new_message = 0;
+  memset(&latest_packet, 0, sizeof(WL_Packet));
+
+  return 0;
+}
+
+int wl_send(char* msg, char dest){
+  int i = 0;
+  WL_Packet packet;
+
+  if(strlen(msg) > WL_MSG_MAX_LEN){
+    printf("Error: %s: message is too long\n", __FUNCTION__);
+    return -1;
+  }
+
+  wl_create_packet(msg, listener_addr, dest, &packet);
+
+  serial_putchar(packet.prefix[0]);
+  serial_putchar(packet.prefix[1]);
+  serial_putchar(packet.src);
+  serial_putchar(packet.dest);
+
+  for(i = 0; i < message_length; i++){
+    serial_putchar(packet.msg[i]);
+  }
+
+  serial_putchar(packet.checksum);
+
+  //printf("%x %x %x %x", packet.prefix[0], packet.prefix[1], packet.src, 
+  //	 packet.dest);
+
+  return 0;
+}
+
+int wl_recv(char* msgbuf, char* src, char* dest){
+  if(!new_message){
+    return 0; //no new message
+  }
+
+  strcpy(msgbuf, latest_packet.msg);
+
+  *src = latest_packet.src;
+  *dest = latest_packet.dest;
+  
+  new_message = 0;
+
+  return strlen(msgbuf);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
+
+/* Internal function definitions */
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV){
+  char wl_input = UDR0;
+
+  /* LOCAL HACK!!! */
+  //orb_set_color(ORANGE);
+  //printf("%x ", wl_input);
+  lcd_putint(wl_input);
+
+  if(wl_index == 0){
+    //first packet? - check chksum to make sure we're not beginning
+    if(wl_input == PREFIX0) {
+      wl_to_count = 0; //at this point we're not timing out
+      wl_index = 1;
+    }
+  }else if(wl_index == 1){
+    if(wl_input != PREFIX1){
+      wl_index = 0;
+    }else{
+      wl_index = WL_SRC_LOC;
+    }
+  }else if(wl_index == WL_SRC_LOC){
+    tmp_packet.src = wl_input;
+    wl_index = WL_DEST_LOC;
+  }else if(wl_index == WL_DEST_LOC){
+    tmp_packet.dest = wl_input;
+    wl_index = WL_DATA_START;
+  }else if(wl_index < WL_DATA_START + message_length){
+    //getting the rest of the packet
+    tmp_packet.msg[wl_index-WL_DATA_START] = wl_input;
+    wl_index++;
+    
+    //printf("%d: %d; %d\n", wl_index, wl_input, wl_chksum);
+  }else if(wl_index == WL_DATA_START + message_length){
+    //we are at checksum location
+    tmp_packet.checksum = wl_input;
+    wl_chksum = wl_get_checksum(&tmp_packet);
+    
+    if(tmp_packet.checksum == wl_chksum) {
+      //checksum is correct
+      memcpy(&latest_packet, &tmp_packet, sizeof(WL_Packet));
+      new_message = 1;
+    } else { //chksum failed
+      serial1_putchar('F');
+      lcd_putchar('F');
+      
+      printf("checksum failed - was %d, should have been %d\n", wl_input, 
+	     wl_chksum);
+    }
+
+    wl_index = 0;
+  }
+}
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time one occurs.
+  In the case where a robot first turns on, it will wait for a long time before declaring itself the leader.
+  Otherwise, if enough time-outs occur in a row, wl_to_flag will be set to 1.  This will cause a timeout packet
+  to be sent next time around
+
+*/
+static void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  
+  static int wl_first_to_count =  0;
+  
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TIMEOUT_INITIAL) {
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+      
+      //you don't actually want to send out a packet 
+      //-- you would confuse other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+  } else {
+    //not the first time - regular time out routine
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT) {
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.java
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.java	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.java	(revision 62)
@@ -0,0 +1,103 @@
+
+import java.awt.*;
+import java.awt.event.*;
+import java.applet.*;
+import javax.swing.*;
+import java.net.*;
+import java.io.*;
+
+public class Colonet extends JApplet implements ActionListener {
+
+	JButton btnGo;
+	JButton btnLeft;
+	JButton btnRight;
+	JTextField txtHost;
+	JTextField txtPort;
+	JButton btnConnect;
+	JTextField txtStatus;
+	Socket socket;
+	OutputStreamWriter out;
+
+	public void init () {
+		Container content = getContentPane();
+		content.setLayout(new GridLayout(10,3));
+	
+		txtHost = new JTextField("localhost");
+		txtPort = new JTextField("5678");
+		btnConnect = new JButton("Connect");
+		txtStatus = new JTextField();
+		btnGo = new JButton("Forward");
+		btnLeft = new JButton("Left");
+		btnRight = new JButton("Right");
+		
+		content.add(new JLabel("Host"));
+		content.add(txtHost);
+		content.add(new JLabel("Port"));
+		content.add(txtPort);
+		content.add(btnConnect);
+		content.add(txtStatus);
+		content.add(btnGo);
+		content.add(btnLeft);
+		content.add(btnRight);
+		
+		btnGo.addActionListener(this);
+		btnLeft.addActionListener(this);
+		btnRight.addActionListener(this);
+		btnConnect.addActionListener(this);
+	
+	}
+	
+	
+	public void actionPerformed (ActionEvent event) {
+		Object source = event.getSource();
+		try {
+			if (source == btnGo) {
+				out.write('w');
+				out.flush();
+			} else if (source == btnLeft) {
+				out.write('a');
+				out.flush();
+			} else if (source == btnRight) {
+				out.write('d');
+				out.flush();
+			}
+		} catch (Exception e) {
+			txtStatus.setText("Could not send data");
+		}
+		if (source == btnConnect)
+			doSocket();
+	
+	}
+	
+	private void doSocket () {
+		txtStatus.setText("Connecting ...");
+		int port = 0;
+		try {
+			port = Integer.parseInt(txtPort.getText());
+		} catch (Exception e) {
+			txtStatus.setText("Invalid port");
+			return;
+		}
+		try {
+			socket = new Socket(txtHost.getText(), port);
+		} catch (UnknownHostException e) {
+			txtStatus.setText("Unknown Host Exception");
+			return;
+		} catch (IOException e) {
+			txtStatus.setText("IO Exception");
+			return;
+		}
+		txtStatus.setText("Connected.");
+		try {
+			out = new OutputStreamWriter(socket.getOutputStream());
+		} catch (IOException e) {
+			txtStatus.setText("Could not get OutputStream");
+		}
+	
+	}
+	
+	private void msg (String text) {
+		JOptionPane.showMessageDialog(null, text);
+	}
+
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.class
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.class
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.class	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.class	(revision 62)

Property changes on: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/Colonet.class
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/index.html
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/index.html	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/colonet_web_test/index.html	(revision 62)
@@ -0,0 +1,9 @@
+
+<html>
+<head>Test Applet for Colonet</head>
+<body>
+<APPLET CODE="Colonet.class" WIDTH=500 HEIGHT=500>
+     <P>Colonet<P>
+</APPLET>
+</body>
+</html>
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/wireless.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/wireless.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/wireless.h	(revision 62)
@@ -0,0 +1,38 @@
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+/*
+Wireless - wireless functions for Colony
+
+Eugene Marinelli
+7/22/06
+*/
+
+#define WL_MSG_MAX_LEN 16
+#define WL_PACKET_MAX_LEN (WL_MSG_MAX_LEN+5)
+
+#define GLOBAL_DEST 200
+
+typedef struct {
+  char prefix[2];
+  char src;
+  char dest;
+  char msg[WL_MSG_MAX_LEN];
+  char checksum;
+} WL_Packet;
+
+/* wl_init
+   msg_len (< WL_MSG_MAX_LEN) is the length of the messages sent 
+   in the packets.
+   listener_address is the address to listen on
+*/
+int wl_init(int msg_len, char listener_address);
+
+int wl_send(char* msg, char dest);
+int wl_recv(char* msgbuf, char* src, char* dest);
+// get most recent valid message - implement message queue later
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet);
+char wl_get_checksum(WL_Packet* packet);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/manualControlServer.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/manualControlServer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/manualControlServer.c	(revision 62)
@@ -0,0 +1,192 @@
+/* Colonet Server
+   Eugene Marinelli and Gregory Tress
+*/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <netdb.h>
+
+#include "wireless.h"
+
+#define SERIAL_PORT "/dev/ttyS0"  
+//#define SERIAL_PORT "/dev/ttyUSB0"
+#define SERVER_ID 213
+
+#define FORWARD 0xF0
+#define BACK 0xF1
+#define RIGHT 0xF2
+#define LEFT 0xF3
+#define STOP 0xF4
+
+#define message_length 3
+
+void send_command(char cmd, char dest);
+
+int mysocket;   //the socket that gets new connections
+int io_socket;  //the socket we use to communicate when a connection is initiated.
+
+int main (int argc, char **argv) {
+
+  unsigned int clientlen;
+  struct sockaddr_in clientaddr;
+  struct hostent *hp;
+  char *haddrp;
+  char newdata[100];
+  int newdatasize;
+  if (argc != 2) {
+    fprintf(stderr, "Usage: %s <port>\n", argv[0]);
+    return 0;
+  }
+   
+  //start server
+  printf("Starting server on port %i\n", atoi(argv[1]));
+  mysocket = open_listenfd(atoi(argv[1]));
+  if (mysocket < 0) {
+    fprintf(stderr, "Error listening on port.\n");
+    return -1;
+  } else {
+    printf("Server running, waiting for connection\n");
+  }
+			   
+  //accept connections
+  while (1) {
+    clientlen = sizeof(clientaddr);
+    io_socket = accept(mysocket, (struct sockaddr *) &clientaddr, &clientlen);
+     
+    //get client info
+    hp = gethostbyaddr((const char *) &clientaddr.sin_addr.s_addr, 
+		       sizeof(clientaddr.sin_addr.s_addr), AF_INET);
+    haddrp = inet_ntoa(clientaddr.sin_addr);
+    printf("Client connected: %s %s\n", hp->h_name, haddrp);
+	   
+    if (!fork()) { // this is the child process
+      close(mysocket); // child doesn't need the listener
+      newdata[0] = ' ';
+      while (newdata[0] != 'q') {
+	memset(newdata, '\0', strlen(newdata));
+	newdatasize = recv(io_socket, newdata, 99, 0);
+	//receive commands from clients and give them to robots
+	printf("Received: [%s]\n", newdata);
+	send_command(newdata[0], GLOBAL_DEST);
+      }
+      printf("\nClient has disconnected.\n");
+      close(io_socket);
+      return 0;
+    }
+    close(io_socket);
+  }
+								  
+  close(mysocket);
+  return 0;
+}
+
+//listen on port, as specified by 15-213 book.
+int open_listenfd(int port) {
+  int listenfd, optval=1;
+  struct sockaddr_in serveraddr;
+     
+  //create socket descriptor
+  if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+    return -1;
+							    
+  //prevent "address already in use" error
+  if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &optval, 
+		 sizeof(int)) < 0)
+    return -1;
+  
+  bzero((char *) &serveraddr, sizeof(serveraddr));
+  serveraddr.sin_family = AF_INET;
+  serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
+  serveraddr.sin_port = htons((unsigned short)port);
+  if (bind(listenfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
+    return -1;
+  
+  //start listening
+  if (listen(listenfd, 128) < 0)
+    return -1;
+  return listenfd;
+}
+
+void send_command(char cmd, char dest){
+  FILE* serial;
+  WL_Packet pkt;
+  int i;
+  char robot_cmd[message_length];
+
+  if(cmd != 'w' && cmd != 'a' && cmd != 's' && cmd != 'd' && cmd != ' '){
+    fprintf(stderr, "Invalid command\n");
+    return;
+  }
+
+  robot_cmd[0] = 0;
+  robot_cmd[1] = '\0';
+
+  switch(cmd){
+  case 'w':
+    robot_cmd[0] = FORWARD;
+    break;
+  case 'a':
+    robot_cmd[0] = LEFT;
+    break;
+  case 's':
+    robot_cmd[0] = BACK;
+    break;
+  case 'd':
+    robot_cmd[0] = RIGHT;
+    break;
+  case ' ':
+    robot_cmd[0] = STOP;
+    break;
+  }
+
+  wl_create_packet(robot_cmd, SERVER_ID, dest, &pkt);
+
+  serial = fopen(SERIAL_PORT, "w");
+
+  fprintf(stderr, "%i %i %i %i ", pkt.prefix[0], pkt.prefix[1], pkt.src, 
+	  pkt.dest);
+  fprintf(serial, "%c%c%c%c", pkt.prefix[0], pkt.prefix[1], pkt.src,  
+	  pkt.dest);
+
+  for(i = 0; i < message_length; i++){
+    fprintf(stderr, "%i ", pkt.msg[i]);
+    fprintf(serial, "%c", pkt.msg[i]);
+  }
+
+  fprintf(stderr, "%i", pkt.checksum);
+  fprintf(serial, "%c", pkt.checksum);
+
+  fclose(serial);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/sockserver_test.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/sockserver_test.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/sockserver_test.c	(revision 62)
@@ -0,0 +1,99 @@
+
+/* SERVER
+I am washing my socks.
+And hanging them out to dry.
+
+-Greg
+*/
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <stdio.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <netdb.h>
+
+int mysocket;   //the socket that gets new connections
+int io_socket;  //the socket we use to communicate when a connection is initiated.
+
+int main (int argc, char **argv) {
+
+	unsigned int clientlen;
+	struct sockaddr_in clientaddr;
+	struct hostent *hp;
+	char *haddrp;
+	char newdata[100];
+	int newdatasize;
+
+	if (argc != 2) {
+		fprintf(stderr, "Usage: %s <port>\n", argv[0]);
+		return 0;
+	}
+	
+	//start server
+	printf("Starting server on port %i\n", atoi(argv[1]));
+	mysocket = open_listenfd(atoi(argv[1]));
+	if (mysocket < 0) {
+		fprintf(stderr, "Error listening on port.\n");
+		return -1;
+	} else {
+		printf("Server running, waiting for connection\n");
+	}
+	
+	//accept connections
+	while (1) {
+		clientlen = sizeof(clientaddr);
+		io_socket = accept(mysocket, (struct sockaddr *) &clientaddr, &clientlen);
+		
+		//get client info
+		hp = gethostbyaddr((const char *) &clientaddr.sin_addr.s_addr, sizeof(clientaddr.sin_addr.s_addr), AF_INET);
+		haddrp = inet_ntoa(clientaddr.sin_addr);
+		printf("Client connected: %s %s\n", hp->h_name, haddrp);
+		
+		if (!fork()) { // this is the child process
+            close(mysocket); // child doesn't need the listener
+			newdata[0] = ' ';
+			while (newdata[0] != 'q') {
+				memset(newdata, '\0', strlen(newdata));
+				newdatasize = recv(io_socket, newdata, 99, 0);
+				printf("Received: %s\n", newdata);
+				//send_command(cmd0, GLOBAL_DEST);
+			}
+			printf("\nClient has disconnected.\n");
+            close(io_socket);
+            return 0;
+        }
+		close(io_socket);
+	}
+	
+	close(mysocket);
+	return 0;
+}
+
+//listen on port, as specified by 15-213 book.
+int open_listenfd(int port) {
+	int listenfd, optval=1;
+	struct sockaddr_in serveraddr;
+	
+	//create socket descriptor
+	if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+		return -1;
+	
+	//prevent "address already in use" error
+	if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (const void *) &optval, sizeof(int)) < 0)
+		return -1;
+		
+	bzero((char *) &serveraddr, sizeof(serveraddr));
+	serveraddr.sin_family = AF_INET;
+	serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
+	serveraddr.sin_port = htons((unsigned short)port);
+	if (bind(listenfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0)
+		return -1;
+	
+	//start listening
+	if (listen(listenfd, 128) < 0)
+		return -1;
+	return listenfd;
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/Makefile	(revision 62)
@@ -0,0 +1,9 @@
+# manualControlServer makefile
+
+all: manualControlServer
+
+manualControlServer: manualControlServer.c
+	gcc -I ../../wireless manualControlServer.c -o manualControlServer
+
+clean: 
+	rm -rf *o manualControlServer
\ No newline at end of file
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/wireless.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/wireless.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlServer/wireless.c	(revision 62)
@@ -0,0 +1,233 @@
+/*
+Wireless
+Eugene Marinelli
+
+(See .h for details)
+*/
+
+/* Includes */
+#include <firefly+_lib.h>
+#include <string.h>
+#include <avr/interrupt.h>
+
+#include "wireless.h"
+
+/* Constants */
+#define PREFIX0 'R'
+#define PREFIX1 'C'
+
+//wl_buf positions
+#define WL_SRC_LOC 2
+#define WL_DEST_LOC 3
+#define WL_DATA_START 4
+
+#define WL_TIMEOUT 4
+#define WL_TIMEOUT_INITIAL 4
+
+/* Globals */
+static WL_Packet latest_packet;
+static WL_Packet tmp_packet;
+static char new_message; //set to 1 if there is a new message, else 0
+static char listener_addr; //address that the robot is listening on
+
+static int message_length; //length of the messages sent/received
+
+//static unsigned char wl_to_flag;
+//static unsigned int wl_to_count;
+//static unsigned int wl_to_max;
+
+/* Internal function headers */
+static void wl_timeout_handler(void);
+
+/* External function definitions */
+int wl_init(int msg_len, char listener_address){
+  if(msg_len > WL_MSG_MAX_LEN){
+    printf("Error: %s: message length must be less than %d\n", __FUNCTION__, 
+	   WL_MSG_MAX_LEN);
+    return -1;
+  }
+
+  message_length = msg_len;
+
+  listener_addr = listener_address;
+
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+  /* executes the function about every 1/4 sec */
+
+  //wl_to_flag = 0;
+  //wl_to_count = 0; 
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+  
+  sei();
+
+  new_message = 0;
+  memset(&latest_packet, 0, sizeof(WL_Packet));
+
+  return 0;
+}
+
+int wl_send(char* msg, char dest){
+  int i = 0;
+  WL_Packet packet;
+
+  if(strlen(msg) > WL_MSG_MAX_LEN){
+    printf("Error: %s: message is too long\n", __FUNCTION__);
+    return -1;
+  }
+
+  wl_create_packet(msg, listener_addr, dest, &packet);
+
+  serial_putchar(packet.prefix[0]);
+  serial_putchar(packet.prefix[1]);
+  serial_putchar(packet.src);
+  serial_putchar(packet.dest);
+
+  for(i = 0; i < message_length; i++){
+    serial_putchar(packet.msg[i]);
+  }
+
+  serial_putchar(packet.checksum);
+
+  return 0;
+}
+
+int wl_recv(char* msgbuf, char* src, char* dest){
+  if(!new_message){
+    return 0; //no new message
+  }
+
+  strcpy(msgbuf, latest_packet.msg);
+
+  *src = latest_packet.src;
+  *dest = latest_packet.dest;
+  
+  new_message = 0;
+
+  return strlen(msgbuf);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
+
+/* Internal function definitions */
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV){
+  char wl_input = UDR0;
+  static unsigned int wl_index = 0;
+  static unsigned char wl_chksum = 0;
+
+  if(wl_index == 0){
+    //first packet? - check chksum to make sure we're not beginning
+    if(wl_input == PREFIX0) {
+      wl_to_count = 0; //at this point we're not timing out
+      wl_index = 1;
+    }
+  }else if(wl_index == 1){
+    if(wl_input != PREFIX1){
+      wl_index = 0;
+    }else{
+      wl_index = WL_SRC_LOC;
+    }
+  }else if(wl_index == WL_SRC_LOC){
+    tmp_packet.src = wl_input;
+    wl_index = WL_DEST_LOC;
+  }else if(wl_index == WL_DEST_LOC){
+    tmp_packet.dest = wl_input;
+    wl_index = WL_DATA_START;
+  }else if(wl_index < WL_DATA_START + message_length){
+    //getting the rest of the packet
+    tmp_packet.msg[wl_index-WL_DATA_START] = wl_input;
+    wl_index++;
+  }else if(wl_index == WL_DATA_START + message_length){
+    //we are at checksum location
+    tmp_packet.checksum = wl_input;
+    wl_chksum = wl_get_checksum(&tmp_packet);
+    
+    if(tmp_packet.checksum == wl_chksum) {
+      //checksum is correct
+      memcpy(&latest_packet, &tmp_packet, sizeof(WL_Packet));
+      new_message = 1;
+    } else { //chksum failed
+      serial1_putchar('F');
+      lcd_putchar('F');
+      
+      printf("checksum failed - was %d, should have been %d\n", wl_input, 
+	     wl_chksum);
+    }
+
+    wl_index = 0;
+  }
+}
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time 
+  one occurs. In the case where a robot first turns on, it will wait for a long
+  time before declaring itself the leader.  Otherwise, if enough time-outs 
+  occur in a row, wl_to_flag will be set to 1.  This will cause a timeout 
+  packet to be sent next time around
+
+*/
+static void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  
+  static int wl_first_to_count =  0;
+  static int first_time = 1;
+
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TIMEOUT_INITIAL) {
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+      
+      //you don't actually want to send out a packet 
+      //-- you would confuse other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+
+    first_time = 0;
+  } else {
+    //not the first time - regular time out routine
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT) {
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlClient/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlClient/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlClient/Makefile	(revision 62)
@@ -0,0 +1,9 @@
+# manualControlClient makefile
+
+all: manualControlClient
+
+manualControlClient: manualControlClient.c
+	gcc -I ../../wireless/ manualControlClient.c -o manualControlClient
+
+clean: 
+	rm -rf *o manualControlClient
Index: branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlClient/manualControlClient.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlClient/manualControlClient.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/manual_control/manualControlClient/manualControlClient.c	(revision 62)
@@ -0,0 +1,127 @@
+/* Eugene Marinelli
+ * 10/12/06
+ * manualControlClient - controls the robot over the xbee dongle
+ */
+
+#include <stdio.h>
+#include <string.h>
+
+#include <wireless.h>
+
+#define SERIAL_PORT "/dev/ttyS0" //usb
+//#define SERIAL_PORT "/dev/ttyUSB0" //serial
+#define SERVER_ID 213
+
+#define FORWARD 0xF0
+#define BACK 0xF1
+#define RIGHT 0xF2
+#define LEFT 0xF3
+#define STOP 0xF4
+
+#define message_length 3
+
+void send_command(char cmd, char dest);
+
+int main(int argc, char** argv){  
+  char cmd0, cmd1;
+
+  fprintf(stderr, "Manual Control Client\n");
+  fprintf(stderr, "Commands: ");
+  fprintf(stderr, "w - move forward | ");
+  fprintf(stderr, "a - turn left | ");
+  fprintf(stderr, "s - move back | ");
+  fprintf(stderr, "d - turn right\n");
+  fprintf(stderr, "          q - quit\n");
+
+  cmd0 = getc(stdin);
+  cmd1 = getc(stdin);
+
+  while(cmd0 != 'q'){
+    send_command(cmd0, GLOBAL_DEST);
+    cmd0 = getc(stdin);
+    cmd1 = getc(stdin);
+  }
+
+  send_command(' ', GLOBAL_DEST);
+
+  return 0;
+}
+
+void send_command(char cmd, char dest){
+  FILE* serial;
+  WL_Packet pkt;
+  int i;
+  char robot_cmd[message_length];
+
+  if(cmd != 'w' && cmd != 'a' && cmd != 's' && cmd != 'd' && cmd != ' '){
+    fprintf(stderr, "Invalid command\n");
+    return;
+  }
+
+  robot_cmd[0] = 0;
+  robot_cmd[1] = '\0';
+
+  switch(cmd){
+  case 'w':
+    robot_cmd[0] = FORWARD;
+    break;
+  case 'a':
+    robot_cmd[0] = LEFT;
+    break;
+  case 's':
+    robot_cmd[0] = BACK;
+    break;
+  case 'd':
+    robot_cmd[0] = RIGHT;
+    break;
+  case ' ':
+    robot_cmd[0] = STOP;
+    break;
+  }
+
+  wl_create_packet(robot_cmd, SERVER_ID, dest, &pkt);
+
+  serial = fopen(SERIAL_PORT, "w");
+
+  //fprintf(stderr, "%x %x %x %x ", pkt.prefix[0], pkt.prefix[1], pkt.src, 
+	//  pkt.dest);
+  fprintf(serial, "%c%c%c%c", pkt.prefix[0], pkt.prefix[1], pkt.src, pkt.dest);
+
+  for(i = 0; i < message_length; i++){
+    //fprintf(stderr, "%x ", pkt.msg[i]);
+    fprintf(serial, "%c", pkt.msg[i]);
+  }
+
+  //fprintf(stderr, "%x", pkt.checksum);
+  fprintf(serial, "%c", pkt.checksum);
+
+  fclose(serial);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/wireless/wireless.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/wireless/wireless.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/wireless/wireless.h	(revision 62)
@@ -0,0 +1,38 @@
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+/*
+Wireless - wireless functions for Colony
+
+Eugene Marinelli
+7/22/06
+*/
+
+#define WL_MSG_MAX_LEN 16
+#define WL_PACKET_MAX_LEN (WL_MSG_MAX_LEN+5)
+
+#define GLOBAL_DEST 200
+
+typedef struct {
+  char prefix[2];
+  char src;
+  char dest;
+  char msg[WL_MSG_MAX_LEN];
+  char checksum;
+} WL_Packet;
+
+/* wl_init
+   msg_len (< WL_MSG_MAX_LEN) is the length of the messages sent 
+   in the packets.
+   listener_address is the address to listen on
+*/
+int wl_init(int msg_len, char listener_address);
+
+int wl_send(char* msg, char dest);
+int wl_recv(char* msgbuf, char* src, char* dest);
+// get most recent valid message - implement message queue later
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet);
+char wl_get_checksum(WL_Packet* packet);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/wireless/wireless.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/wireless/wireless.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/wireless/wireless.c	(revision 62)
@@ -0,0 +1,233 @@
+/*
+Wireless
+Eugene Marinelli
+
+(See .h for details)
+*/
+
+/* Includes */
+#include <firefly+_lib.h>
+#include <string.h>
+#include <avr/interrupt.h>
+
+#include "wireless.h"
+
+/* Constants */
+#define PREFIX0 'R'
+#define PREFIX1 'C'
+
+//wl_buf positions
+#define WL_SRC_LOC 2
+#define WL_DEST_LOC 3
+#define WL_DATA_START 4
+
+#define WL_TIMEOUT 4
+#define WL_TIMEOUT_INITIAL 4
+
+/* Globals */
+static WL_Packet latest_packet;
+static WL_Packet tmp_packet;
+static char new_message; //set to 1 if there is a new message, else 0
+static char listener_addr; //address that the robot is listening on
+
+static int message_length; //length of the messages sent/received
+
+//static unsigned char wl_to_flag;
+//static unsigned int wl_to_count;
+//static unsigned int wl_to_max;
+
+/* Internal function headers */
+static void wl_timeout_handler(void);
+
+/* External function definitions */
+int wl_init(int msg_len, char listener_address){
+  if(msg_len > WL_MSG_MAX_LEN){
+    printf("Error: %s: message length must be less than %d\n", __FUNCTION__, 
+	   WL_MSG_MAX_LEN);
+    return -1;
+  }
+
+  message_length = msg_len;
+
+  listener_addr = listener_address;
+
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+  /* executes the function about every 1/4 sec */
+
+  //wl_to_flag = 0;
+  //wl_to_count = 0; 
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+  
+  sei();
+
+  new_message = 0;
+  memset(&latest_packet, 0, sizeof(WL_Packet));
+
+  return 0;
+}
+
+int wl_send(char* msg, char dest){
+  int i = 0;
+  WL_Packet packet;
+
+  if(strlen(msg) > WL_MSG_MAX_LEN){
+    printf("Error: %s: message is too long\n", __FUNCTION__);
+    return -1;
+  }
+
+  wl_create_packet(msg, listener_addr, dest, &packet);
+
+  serial_putchar(packet.prefix[0]);
+  serial_putchar(packet.prefix[1]);
+  serial_putchar(packet.src);
+  serial_putchar(packet.dest);
+
+  for(i = 0; i < message_length; i++){
+    serial_putchar(packet.msg[i]);
+  }
+
+  serial_putchar(packet.checksum);
+
+  return 0;
+}
+
+int wl_recv(char* msgbuf, char* src, char* dest){
+  if(!new_message){
+    return 0; //no new message
+  }
+
+  strcpy(msgbuf, latest_packet.msg);
+
+  *src = latest_packet.src;
+  *dest = latest_packet.dest;
+  
+  new_message = 0;
+
+  return strlen(msgbuf);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
+
+/* Internal function definitions */
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV){
+  char wl_input = UDR0;
+  static unsigned int wl_index = 0;
+  static unsigned char wl_chksum = 0;
+
+  if(wl_index == 0){
+    //first packet? - check chksum to make sure we're not beginning
+    if(wl_input == PREFIX0) {
+      wl_to_count = 0; //at this point we're not timing out
+      wl_index = 1;
+    }
+  }else if(wl_index == 1){
+    if(wl_input != PREFIX1){
+      wl_index = 0;
+    }else{
+      wl_index = WL_SRC_LOC;
+    }
+  }else if(wl_index == WL_SRC_LOC){
+    tmp_packet.src = wl_input;
+    wl_index = WL_DEST_LOC;
+  }else if(wl_index == WL_DEST_LOC){
+    tmp_packet.dest = wl_input;
+    wl_index = WL_DATA_START;
+  }else if(wl_index < WL_DATA_START + message_length){
+    //getting the rest of the packet
+    tmp_packet.msg[wl_index-WL_DATA_START] = wl_input;
+    wl_index++;
+  }else if(wl_index == WL_DATA_START + message_length){
+    //we are at checksum location
+    tmp_packet.checksum = wl_input;
+    wl_chksum = wl_get_checksum(&tmp_packet);
+    
+    if(tmp_packet.checksum == wl_chksum) {
+      //checksum is correct
+      memcpy(&latest_packet, &tmp_packet, sizeof(WL_Packet));
+      new_message = 1;
+    } else { //chksum failed
+      serial1_putchar('F');
+      lcd_putchar('F');
+      
+      printf("checksum failed - was %d, should have been %d\n", wl_input, 
+	     wl_chksum);
+    }
+
+    wl_index = 0;
+  }
+}
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time 
+  one occurs. In the case where a robot first turns on, it will wait for a long
+  time before declaring itself the leader.  Otherwise, if enough time-outs 
+  occur in a row, wl_to_flag will be set to 1.  This will cause a timeout 
+  packet to be sent next time around
+
+*/
+static void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  
+  static int wl_first_to_count =  0;
+  static int first_time = 1;
+
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TIMEOUT_INITIAL) {
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+      
+      //you don't actually want to send out a packet 
+      //-- you would confuse other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+
+    first_time = 0;
+  } else {
+    //not the first time - regular time out routine
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT) {
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lights.h	(revision 62)
@@ -0,0 +1,90 @@
+/*
+lights.h
+
+Contains function prototypes, variables, and pins used by the Orbs and PWM
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+Change Log:
+1.25.07 - KWoo
+	Removed FF+ code. Cleaned up and commented all variables.
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+/***** Port and Pin Definitions ****/
+
+//Orb Ports and Registers
+#define ORB_PORT	PORTC
+#define ORB_DDR		DDRC
+
+//Orb Pins
+#define ORB1_RED	0x00
+#define ORB1_GREEN	0x01
+#define ORB1_BLUE	0x02
+#define ORB2_RED 	0x04
+#define ORB2_GREEN 	0x05
+#define ORB2_BLUE 	0x06
+
+//ORB Colors
+#define RED       0xE0
+#define ORANGE    0xE4
+#define YELLOW    0xE8
+#define LIME      0x68
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0xA6 
+#define PURPLE    0x41
+#define MAGENTA   0xE3
+#define WHITE     0xFE
+#define ORB_OFF   0x00
+
+
+
+#include <avr/interrupt.h>
+
+
+#define ORB_RESET 1025
+
+#define ORBPORT PORTC
+
+#define ORBDDR DDRC
+
+#define ORBMASK 0x77
+
+
+
+/**** Function Prototypes ****/
+//Enables counter and PWM for use with the orb.
+void orb_init(void);
+
+//Sets both orbs to a specified color 
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led);
+//Sets Orb1 to the specified color
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led); 
+//Sets Orb2 to the specified color
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led);
+
+//Sets both orbs to the same color using a color name
+void orb_set_color(int col);
+//Sets orb1 to a color using a color name
+void orb1_set_color(int col);
+//Sets orb2 to a color using a color name
+void orb2_set_color(int col);
+
+//Turns off the PWM and thus the Orbs
+void orb_disable(void);
+//Turns on the PWM and thus the Orbs
+void orb_enable(void);
+
+//Runs through some colors
+void orb_tester(void);
+//Set just one channel
+void orb_set_angle(int servo, int angle);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/motor.c	(revision 62)
@@ -0,0 +1,102 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	PORTA &= 0x0F;
+	DDRA |= 0xF0;
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
+	TCCR1B = _BV(WGM12) | _BV(CS10);
+//	TCCR1A = 0xA1;
+//	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+
+	if(direction == 0) {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x10)
+		{
+		  OCR1A = 0;
+		}	
+		PORTA = (PORTA & 0xCF) | 0x10;
+//		PORTD |= 0x10;
+//		PORTD &= 0xBF;
+	}
+	else {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x20)
+		{
+		  OCR1A = 0;
+		}
+		PORTA = (PORTA & 0xCF) | 0x20;
+//		PORTD |= 0x40;
+//		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+
+
+}
+
+void motor2_set(int direction, int speed) {
+
+	if(direction == 0) {
+//		PORTD |= 0x20;
+//		PORTD &= 0x7F;
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x80)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x80;
+	}
+	else {
+//		PORTD |= 0x80;
+//		PORTD &= 0xDF;
+
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x40)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x40;
+	}
+	OCR1BL = speed;
+
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonflyWirelessRelay.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonflyWirelessRelay.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonflyWirelessRelay.c	(revision 62)
@@ -0,0 +1,40 @@
+/**
+ * Eugene Marinelli
+ * 4/5/07
+ *
+ * Robot wireless relay - dragonfly edition
+ */
+
+#include "dragonfly_lib.h"
+#include <stdio.h>
+#include <string.h>
+
+int main(void)
+{
+  orb_init();
+  orb_enable();
+  usb_init();
+  xbee_init();
+
+  // orb_set_color(GREEN);
+  orb_set_color(GREEN);
+
+  //UCSR0B |= _BV(RXCIE);
+  UCSR1B |= _BV(RXCIE);
+  sei();
+
+  while (1) {
+    xbee_putc(usb_getc());
+    orb_set_color(YELLOW);
+  }
+  
+  return 0;
+}
+
+ISR(USART1_RX_vect)
+{
+  //char buf = UDR1;
+
+  usb_putc(UDR1);
+  //orb_set_color(RED);
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/motor.h	(revision 62)
@@ -0,0 +1,22 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonfly_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonfly_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonfly_lib.c	(revision 62)
@@ -0,0 +1,729 @@
+#include <dragonfly_lib.h>
+
+/* init_dragonfly - Initializes functions based on configuration parameters
+   examples:
+
+   init_dragonfly (0, 0, 0); - just initialize the digital IO (buttons, potentiometer)
+
+   init_dragonfly (ANALOG | SERIAL | BUZZER, C0_C1_ANALOG, BAUD115200); 
+   Initialize ADC and set C0 and C1 as analog inputs.  Initialize serial and set baud rate
+   to 115200 bps.  Initialize the buzzer.
+   
+   init_dragonfly (MOTORS | ORB, 0, 0);
+   Initialize motor driving and the color fading abilities of the ORB. */
+   
+void dragonfly_init(int config) 
+{
+	// Set directionality of various IO pins
+	DDRG &= ~(_BV(PING0)|_BV(PING1));
+	PORTG |= _BV(PING0)|_BV(PING1);
+	
+	if(config & ANALOG) {
+		analog_init();
+	}
+	
+	if(config & COMM) {
+    //Defaults to 115200. Check serial.h for more information.
+    sei();
+    usb_init();
+    xbee_init();
+	}
+	
+	if(config & BUZZER) {
+    sei();
+		buzzer_init();
+	}
+	
+	if(config & ORB) {
+    sei();
+		orb_init();
+	}
+	
+	if(config & MOTORS) {
+		motors_init();
+	}
+	
+	if(config & SERVOS) {
+		sei();
+    //Servos not yet implemented
+    //servo_init();
+	}
+
+	if(config & LCD) {
+		lcd_init();
+	}
+	
+	if(config & (SERVOS | ORB)) {
+    sei();
+    orb_init();
+    //Servos not yet implemented
+	}
+	
+	// delay a bit for stability
+	_delay_ms(1);
+}
+
+void adc_gain_test(void);
+void analog_test(void);
+void batt_test(void);
+void button_test(void);
+void buzzer_test(void);
+void dio_test(void);
+void general_test(void);
+void i2c_test(void);
+void lcd_test(void);
+void motor_test(void);
+void orb_test(void);
+void pullup_test(void);
+void ranger_test(void);
+void reset_test(void);
+void ring_buffer_tester(void);
+void rtc_test(void);
+void rtc_test_pulse(void);
+void serial_test(void);
+void servo_orb_test(void);
+void wl_receive_test(void);
+void wl_send_test(void);
+void wl_send_packet_test(void);
+void move_test(void);
+
+void move_test(void){
+  range_init();
+  motors_init();
+  analog_init();
+  while(1){
+    move_avoid(200,0,50 );
+  }
+}  
+
+void general_test(){
+	int i;
+	dragonfly_init(MOTORS|BUZZER|ORB|USB);
+
+	while(1){
+		if(button1_read()){
+
+			for(i=0;i<17;i++){
+				buzzer_set_val(i);
+				delay_ms(100);
+			}
+			
+			buzzer_off();
+			
+			motor1_set(1, 255);
+			motor2_set(1, 255);
+			
+			delay_ms(3000);
+			
+			motor1_set(1, 200);
+			
+			delay_ms(1000);
+			motor1_set(0, 255);
+			motor2_set(0, 255);
+			
+			delay_ms(3000);
+			motors_off();
+		}
+		if(button2_read()){
+			orb_enable();
+			orb1_set_color(RED);
+			delay_ms(500);
+			orb2_set_color(GREEN);
+			delay_ms(500);
+			orb1_set_color(YELLOW);
+			delay_ms(500);
+			orb2_set_color(CYAN);
+			delay_ms(500);
+			orb1_set_color(WHITE);
+			delay_ms(500);
+			orb2_set_color(WHITE);
+			delay_ms(500);
+			orb_disable();
+			
+		}
+	
+	}
+}
+
+void reset_test() {
+
+    dragonfly_init(ORB|SERIAL);
+    
+    delay_ms(1000);
+    usb_puti((int)DDRE);
+    
+    orb_set_color(RED);
+    delay_ms(1000);
+    
+    orb_set_color(GREEN);
+    delay_ms(1000);
+    
+    DDRE |= 0x80;
+    
+    reset();
+    
+    /*
+    alternate implelmentation using external interrupts
+    maintains register values on reset
+    
+    sei();
+    EIMSK |= 0x80;
+    EICRB |= 0xC0;
+    DDRE |= 0x80;
+    PORTE &= 0x7F;
+    PORTE |= 0x80;
+    */
+    
+    /*
+    should not reach here
+    */
+    
+    orb_set_color(BLUE);
+    delay_ms(1000);
+}
+
+void ring_buffer_tester (void) {
+
+	dragonfly_init(ALL_ON & ~ORB);
+	orb_disable();
+
+	RING_BUFFER_NEW(ring_buffer, 12, int, buffer);
+	RING_BUFFER_INIT(buffer, 12);
+	RING_BUFFER_CLEAR(buffer);
+	
+	for(int i=0;i<10;i++)
+		RING_BUFFER_ADD(buffer, 0);
+	
+	int x;
+	for(int i = 0; i < 100; i++) {
+	
+		RING_BUFFER_REMOVE(buffer, x);
+		
+		RING_BUFFER_ADD(buffer, i);
+		
+		usb_puti(i-x);
+		usb_putc(' ');
+	
+	}
+	
+	usb_puts("\n\rfull? " );
+	usb_puti(RING_BUFFER_FULL(buffer));
+	
+	while(!RING_BUFFER_FULL(buffer))
+		RING_BUFFER_ADD(buffer, 0);
+	
+	usb_puts("\n\rfilling... full? " );
+	usb_puti(RING_BUFFER_FULL(buffer));
+	
+	usb_puts("\n\rempty? " );
+	usb_puti(RING_BUFFER_EMPTY(buffer));
+	usb_puts("\n\rclearing... empty? ");
+	RING_BUFFER_CLEAR(buffer);
+	usb_puti(RING_BUFFER_EMPTY(buffer));
+	
+	usb_puts("\n\r");
+	
+	
+}
+
+#define WL_BAUD BAUD115200
+//serial -- XBEE
+//serial1 -- USB
+
+void wl_send_test(void) {
+
+	int i;
+	
+	usb_init();		//WIRED
+	xbee_init();	//WIRELESS
+	
+	orb_init();
+	sei();
+	
+	while(1) {
+	
+		for(i = 32; i <= 126; i++) {
+			
+			if(i%4) {
+				orb1_set(255, 0, 0);
+			}
+			else {
+				orb1_set(0,0,0);
+			}
+			
+			usb_putc(i);		//wired
+			xbee_putc(i);		//wireless
+			delay_ms(100);
+	
+		}
+
+	}
+
+	return;
+}
+
+void wl_send_packet_test(void) {
+
+	int i;
+	
+	usb_init();		//WIRED
+	xbee_init();	//WIRELESS
+	
+	orb_init();
+	sei();
+	
+	while(1) {
+	
+		for(i = 65; i <= 122; i++) {
+			usb_putc(i);		//wired
+			xbee_putc(i);		//wireless
+      //delay_ms(100);
+		}
+    
+    delay_ms(1000);
+
+	}
+
+	return;
+}
+
+volatile char c;
+volatile char haveNew = 0;
+
+
+void wl_receive_test(void) {
+
+
+	usb_init();
+	xbee_init();
+	orb_init();
+	
+	
+	c = '.';
+	
+  xbee_putc('r');
+	
+	
+	UCSR1B |= _BV(RXCIE);
+	UCSR0B |= _BV(RXCIE);
+	sei();
+	
+	orb1_set(255, 0, 0);		//blue
+
+	
+	while(1)	 {
+	
+		if(haveNew) {
+			xbee_putc(c);
+			haveNew = 0;
+		}
+	}
+	
+	orb1_set(0, 0, 255);		//green
+	
+	while(1);
+
+}
+/*
+ISR(USART1_RX_vect) {
+	
+	c = UDR1;
+	haveNew = 1;
+}
+
+ISR(USART0_RX_vect) {
+	
+	c = UDR0;
+	haveNew = 1;
+}
+*/
+void buzzer_test(void)
+{
+	sei();
+	buzzer_init();
+	unsigned int i = 0;
+	
+	while(1) {
+		buzzer_set_val(i);
+		if (i == 20) {
+			i = 0;
+			delay_ms(250);
+		} else {
+			i++;
+		}
+		
+		delay_ms(100);
+	}
+}
+
+void adc_gain_test(void)
+{
+  analog_init();
+  lcd_init();
+  
+  while(1)
+  {
+    
+    lcd_putint(ADCH);
+    delay_ms(100);
+    lcd_clear_screen();
+  }
+  
+  
+
+}
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+
+void button_test ( void) 
+{
+    dragonfly_init(ALL_ON);
+    
+    
+    move(200,0);
+
+	while(1) {
+	
+	
+		if(button1_read()) {
+			//lcd_putchar('1');
+			usb_putc('1');
+		} else if(button2_read()) {
+			//lcd_putchar('2');
+			usb_putc('2');
+		}
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	//motor1_set(1, 255);
+	//motor2_set(1, 255);
+	move(200,0);
+	
+	delay_ms(5000);
+	
+	//motor1_set(0, 200);
+	move(200,100);
+	
+	delay_ms(5000);
+	
+	//motor2_set(0, 170);
+	move(200,0);
+	
+	delay_ms(5000);
+	motors_off();
+	//LED USER NO LONGER EXISTS
+	//led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+
+void orb_test( void ) {
+	int orbs[12] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	lcd_init();
+	orb_init();
+	sei();
+	orb2_set(254, 253, 252);
+	orb1_set(251, 250, 249);
+	while(1) {
+	
+		orb_set_color(orbs[orb_select]);
+		/*orb_set1(251, 250, 249);
+		delay_ms(2000);
+		orb_set1(255, 1,2);
+		delay_ms(1000);
+		orb_set1(1, 255, 2);
+		delay_ms(1000);
+		orb_set1(1, 2, 255);
+		*/
+		delay_ms(3000);
+		
+		orb_select++;
+		
+		
+		
+		if(orb_select == 13) {
+			orb_disable();
+			delay_ms(2000);
+			orb_enable();
+			orb_select = 0;
+		}
+	
+	/*
+		for (int i = 0; i < 256; i++) {
+			for (int j = 0; j < 256; j++) {
+				for (int k = 0; k < 256; k++) {
+					orb_set(i, j, k);
+				}
+			}
+		}
+	*/
+	}
+	return;
+
+}
+
+void servo_orb_test( void ) {
+//	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	sei();
+	orb_set_angle(1,250);
+	orb_set_angle(2,250);
+	orb_set_angle(4,0);
+	orb_set_angle(5,0);
+	orb_set_angle(6,0);
+
+	while(1) {
+	
+		//orb_set_color(orbs[orb_select]);
+		
+		orb_set_angle(0,orb_select+1);
+	//	orb_set_angle(1,orb_select+1);
+	//	orb_set_angle(2,orb_select+1);
+		delay_ms(50);
+		orb_select++;
+		
+		
+		
+		if(orb_select == 255) {
+			
+			orb_select = 0;
+		}
+	
+	/*
+		for (int i = 0; i < 256; i++) {
+			for (int j = 0; j < 256; j++) {
+				for (int k = 0; k < 256; k++) {
+					orb_set(i, j, k);
+				}
+			}
+		}
+	*/
+	}
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i, j;
+	lcd_init();
+	
+	for(i = 32,j = 1; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+        if(j > 50) {
+            lcd_clear_screen();
+            j = 0;
+        }
+        j++;
+	}
+	
+	
+	return;
+	
+}
+
+void serial_test( void ) {
+	int i;
+	
+	usb_init();
+
+	for(i = 32; i <= 126; i++) {
+		usb_putc(i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+  usb_init();
+
+	analog_init();
+
+	while(1){
+    usb_puti(battery8());
+    usb_putc(' ');
+		delay_ms(10000);
+	}
+}
+
+
+void analog_test(void){
+  //int i;
+  analog_init();
+  usb_init();
+  range_init();
+  usb_puts(" information:\n");
+  while(1){
+    printAllBoms();
+    /*for(i=0;i<16;i++){
+      digital_output(MONK0,i&1);
+      digital_output(MONK1, (i>>1)&1);
+      digital_output(MONK2, (i>>2)&1);
+      digital_output(MONK3, (i>>3)&1);
+      usb_puts("Bom ");
+      usb_puti(i);
+      usb_puts(": ");
+      usb_puti(analog8(MONKI));
+      usb_puts("\n\r");
+    }*/
+  
+    /*for(i=1;i<8;i++){
+      usb_puts("Analog Ext ");
+      usb_puti(i);
+      usb_puts(":  ");
+      usb_puti(analog8(i));
+      usb_puts("\n\r");
+    }
+    
+    usb_puts("IR1 val: ");
+    usb_puti(read_distance(IR1));
+    usb_puts("\n\rIR2 val: ");
+    usb_puti(read_distance(IR2));
+    usb_puts("\n\rIR3 val: ");
+    usb_puti(read_distance(IR3));
+    usb_puts("\n\rIR4 val: ");
+    usb_puti(read_distance(IR4));
+    usb_puts("\n\rIR5 val: ");
+    usb_puti(read_distance(IR5));
+    */
+    delay_ms(2000);
+  }
+}
+
+void dio_test()
+{
+	while(1)
+	{
+		digital_output(_PIN_E5,1);
+		delay_ms(1000);
+		digital_output(_PIN_E5,0);
+		delay_ms(1000);
+	}
+}
+
+void rtc_test_pulse() {
+	usb_putc('s');
+}
+
+void rtc_test() {
+	sei();
+	usb_init();
+	usb_putc('a');
+	rtc_init(HALF_SECOND, &rtc_test_pulse);
+}
+
+#define RECEIVE 1
+
+#define MY_ADDR (RECEIVE == 1 ? 0x01 : 0x02)
+#define TARGET_ADDR (RECEIVE == 1 ? 0x02 : 0x01)
+
+void i2c_test() {
+  char c = 0;
+  char i = 0;
+  
+  sei();
+  i2c_init(MY_ADDR);
+  usb_init();
+
+  usb_putc('5');
+  delay_ms(1000);
+  
+  while(1) {
+    if (RECEIVE) {
+      while(c != 'z') {
+        if(!i2c_getc(&c)) {
+          usb_putc(c);
+          usb_putc(' ');
+        }
+      }
+    } else {
+    while(i < 26) {
+      if(!i2c_putc(TARGET_ADDR, i + 0x61))
+        i++;
+      }
+    }
+  
+    delay_ms(1000);
+  
+    if (!RECEIVE) {
+      while(c != 'z') {
+        if(!i2c_getc(&c)) {
+          usb_putc(c);
+          usb_putc(' ');
+        }
+      }
+    } else {
+      while(i < 26) {
+        if(!i2c_putc(TARGET_ADDR, i + 0x61))
+          i++;
+      }
+    }
+    
+    c = 0;
+    i = 0;
+  }
+  while(1);
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/i2c.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/i2c.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/i2c.c	(revision 62)
@@ -0,0 +1,125 @@
+/* I2C.c
+
+*/
+
+#include <avr/interrupt.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+#include "ring_buffer.h"
+
+
+static int start_flag;
+RING_BUFFER_NEW(i2c_buffer, 64, char, i2c_write_buff, i2c_addr_buff, i2c_read_buff);
+
+void i2c_init(char address) {
+	// Enable I2C and turn on the interrupt
+  //TWCR = 0;
+  
+  /* initialize the buffers */
+  RING_BUFFER_CLEAR(i2c_write_buff);
+  RING_BUFFER_CLEAR(i2c_addr_buff);
+  RING_BUFFER_CLEAR(i2c_read_buff);
+  
+	TWCR =  (_BV(TWEA) | _BV(TWEN) | _BV(TWIE));
+
+  //Set bit rate 12 = 100kbit/s
+  TWBR = 0x0C;
+    
+	TWAR = (address << 1);	//0b0000001 address, 0 for global commands to be off
+	
+  //usb_putint(TWAR);
+  //i2cTXFlag = 0;
+  //i2cRXFlag = 0;
+}
+
+char i2c_putc(char dest, char data) {
+  if(RING_BUFFER_FULL(i2c_write_buff))
+    return -1;
+  
+  cli();
+  RING_BUFFER_ADD(i2c_write_buff, data);
+  RING_BUFFER_ADD(i2c_addr_buff, dest << 1);
+  sei();
+  
+	//Start bit
+  if(!start_flag) {
+    start_flag = 1;
+    TWCR |= _BV(TWSTA);
+    TWCR |= _BV(TWINT);
+  }
+  
+  return 0;
+}
+
+char i2c_getc(char * c) {
+  if(RING_BUFFER_EMPTY(i2c_read_buff))
+    return -1;
+  else
+    RING_BUFFER_REMOVE(i2c_read_buff, *c);
+  
+  return 0;
+}
+ 
+ISR(TWI_vect) {
+  static char data_to_send;
+  static char addr_to_send = -1;
+  char addr, statusCode;
+  
+    //Get status code (only upper 5 bits)
+    statusCode = (TWSR & 0xF8);
+  
+  switch (statusCode) {
+    //Start sent successfully
+    case TW_START:
+    case TW_REP_START:
+      //Send address and write
+      //ring_buffer will not be empty
+      RING_BUFFER_REMOVE(i2c_addr_buff, addr_to_send);
+      RING_BUFFER_REMOVE(i2c_write_buff, data_to_send);
+      
+      TWDR = addr_to_send; /* first send the address */
+      /* we will send the data next time around */
+      
+      //Turn off start bits
+      TWCR &= ~_BV(TWSTA);
+      break;
+    //Address sent successfully
+    case TW_MT_SLA_ACK:
+      //Send byte
+      TWDR = data_to_send;
+      break;
+    //Packet complete, close line
+    case TW_MT_DATA_ACK:
+      if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+        RING_BUFFER_PEEK(i2c_addr_buff, addr);
+        if(addr == addr_to_send) {
+          RING_BUFFER_REMOVE(i2c_addr_buff, addr);
+          RING_BUFFER_REMOVE(i2c_write_buff, TWDR);
+          break;
+        }
+        else { /* no more bytes to this addr, bytes to send to new addr */
+          /* doing the start signal again */
+          TWCR |= _BV(TWSTA);
+          break;
+        }
+      }
+      
+      /* there are no bytes to send */
+      TWCR |= _BV(TWSTO);
+      start_flag = 0;
+      
+      break;
+    case TW_SR_SLA_ACK:
+      break;
+    case TW_SR_DATA_ACK:
+      if(!RING_BUFFER_FULL(i2c_read_buff))
+        RING_BUFFER_ADD(i2c_read_buff, TWDR);
+      break;
+    case TW_SR_STOP:
+      break;
+  }
+      
+  TWCR |= _BV(TWINT);
+	
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/serial.c	(revision 62)
@@ -0,0 +1,190 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	authors: Robotics Club, Colony Project, pkv
+	much code taken from FWR's library, author: Tom Lauwers
+*/
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+/* usb_init() - sets up AVR for communication over the usb serial port */
+void usb_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (USB_BAUD == 115200)
+    UBRR0H = 0x00;
+    UBRR0L = 8;
+    UCSR0A |= _BV(U2X0);
+  #elif (USB_BAUD == 9600)
+    UBRR0H = 0x00;
+    UBRR0L = 107;
+    UCSR0A |= _BV(U2X0);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+  /*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    usb_fd = fdevopen(usb_putc, usb_getc);
+  #endif
+}
+
+/* xbee_init() - sets up AVR for communication over the xbee serial port */
+void xbee_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (XBEE_BAUD == 115200)
+    UBRR1H = 0x00;
+    UBRR1L = 8;
+    UCSR1A |= _BV(U2X1);
+  #elif (XBEE_BAUD == 9600)
+    UBRR1H = 0x00;
+    UBRR1L = 107;
+    UCSR1A |= _BV(U2X1);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+	//Enable receiver and transmitter
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	// Set frame format: 8data, 1stop bit, asynchronous normal mode
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    xbee_fd = fdevopen(xbee_putc, xbee_getc);
+  #endif
+}
+
+/* usb_putc(c) - waits until the usb serial tx buffer is clear, then 
+  puts the character c into the buffer */
+int usb_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR0A, UDRE0);
+	
+  // Load buffer with your character
+  UDR0 = c;
+  return 0;
+}
+
+/* xbee_putc(c) - waits until the xbee serial tx buffer is clear, then 
+  puts the character c into the buffer */
+int xbee_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR1A, UDRE1);
+	
+  // Load buffer with your character
+  UDR1 = c;
+  return 0;
+}
+
+/* usb_puts(c) - writes each character from the string to the usb */
+int usb_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		usb_putc(*t);
+		t++;
+	}
+  return 0;
+}
+
+
+/* usb_getc() - waits until the usb serial rx buffer is not empty, then 
+  returns the first character in the buffer */
+int usb_getc(void)
+{
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+	return UDR0;
+}
+
+/* xbee_getc() - waits until the xbee serial rx buffer is not empty, then 
+  returns the first character in the buffer */
+int xbee_getc(void)
+{
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+	return UDR1;
+}
+
+/* usb_getc_nb(*c) - checks if the usb serial rx buffer is empty or not:
+  -If it is empty, c is unchanged and -1 is returned.  
+  -If is not empty, the first character in the buffer is loaded into c,
+    and 0 is returned */
+int usb_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR0A & _BV(RXC0)) {
+    // Read the receive buffer
+    (*c) = UDR0;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+/* xbee_getc_nb(*c) - checks if the xbee serial rx buffer is empty or not:
+  -If it is empty, c is unchanged and -1 is returned.  
+  -If is not empty, the first character in the buffer is loaded into c,
+    and 0 is returned */
+int xbee_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR1A & _BV(RXC1)) {
+    // Read the receive buffer
+    (*c) = UDR1;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+
+/*
+prints an int to serial
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+uses usb_putc
+*/
+int usb_puti(int value ) {
+	unsigned char usb_data[6]={'0','0','0','0','0','0' }, position=sizeof(usb_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { usb_putc('-'); value=-value; }    
+        do { position--; *(usb_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(usb_data)-1);position++)
+          {
+            
+            usb_putc(usb_data[position]);
+          }
+
+	return 0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonfly_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonfly_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dragonfly_lib.h	(revision 62)
@@ -0,0 +1,54 @@
+/*
+dragonfly_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+
+// Configuration definitions
+#define ANALOG 0x01
+#define SERIAL 0x02
+#define USB    0x02
+#define COMM   0x02
+#define ORB    0x04
+#define MOTORS 0x08
+#define SERVOS 0x10
+#define I2C    0x20
+#define BUZZER 0x40
+#define LCD	   0x80
+#define ALL_ON 0xFF
+
+// initializes the board with the functions specified by config
+void dragonfly_init(int config);
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+#include <i2c.h>
+#include <ring_buffer.h>
+#include <reset.h>
+#include <math.h>
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/buzzer.c	(revision 62)
@@ -0,0 +1,73 @@
+/*
+  buzzer.c - Contains the functions necessary for running the buzzer
+  
+  author: Robotics Club, Colony Project
+  
+  much taken from FWR's firefly library (author: Tom Lauwers)
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+//NOTE: This is mostly handled by buzzer_Set_val for now
+	// Set pin B7 to output - B7 is buzzer pin
+//	DDRB |= _BV(DDB7);
+	
+		
+	//Fast PWM Mode, Clear OCR0 on compare match and set at bottom, clock/64
+//	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+	DDRB |= _BV(DDB7);
+  OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest 
+// buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0xBF;
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/i2c.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/i2c.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/i2c.h	(revision 62)
@@ -0,0 +1,8 @@
+#ifndef _I2C_H_
+#define _I2C_H_
+
+void i2c_init(char address);
+char i2c_putc(char dest, char data);
+char i2c_getc(char * c);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/serial.h	(revision 62)
@@ -0,0 +1,61 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+    usb_*() -> UART0
+    xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+    #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+#define USB_BAUD 115200
+#endif
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+#define XBEE_BAUD 115200
+#endif
+
+#include <stdio.h>
+FILE *usb_fd;  //For use with fprintf() and related stdio functions
+FILE *xbee_fd;  //For use with fprintf() and related stdio functions
+
+void usb_init(void);
+int usb_putc(char c);
+int usb_getc(void);
+int usb_getc_nb(char *c);
+int usb_puts(char *s);
+int usb_puti(int value);
+
+void xbee_init(void);
+int xbee_putc(char c);
+int xbee_getc(void);
+int xbee_getc_nb(char *c);
+int xbee_puts(char *s);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/buzzer.h	(revision 62)
@@ -0,0 +1,32 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/Makefile	(revision 62)
@@ -0,0 +1,520 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik RouleauF
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = dragonflyWirelessRelay
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+#DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB0
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/ttyUSB0
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/servo.c	(revision 62)
@@ -0,0 +1,213 @@
+#include "servo.h"
+
+
+#define SERVO_COUNT 16	//please dont change this, or bad things might happen
+
+
+
+struct SERVO_NODE {
+   uint8_t num;
+   uint16_t angle;
+};
+
+struct SERVO_CHANGE {
+   uint16_t port_val;
+   uint16_t split_time_period;
+};
+
+
+struct SERVO_STATUS_STRUCT {
+   struct SERVO_NODE servos[SERVO_COUNT];
+   uint16_t servo_angles[SERVO_COUNT];
+   struct SERVO_CHANGE changes[SERVO_COUNT+1];
+   uint8_t change_count;
+   uint16_t ms;
+   uint8_t new_angles;
+   uint8_t in_pulse;
+   uint8_t current_servo;
+
+} SERVO_STATUS;
+
+
+void servo_sort(void);
+void servo_setup_pulse(void);
+void servo_set_next_interrupt(uint16_t ticks, struct SERVO_CHANGE *sn);
+
+
+
+
+SIGNAL (SIG_OUTPUT_COMPARE3B){
+
+   if (SERVO_STATUS.in_pulse) {
+   
+		//pull the correct ones down
+      SERVOPORT1 &= (~SERVOMASK1)|SERVO_STATUS.changes[SERVO_STATUS.current_servo].port_val;
+      SERVOPORT2 &= (~SERVOMASK2)|(SERVO_STATUS.changes[SERVO_STATUS.current_servo].port_val >> 8);
+
+      ++SERVO_STATUS.current_servo; //now look at next servo
+
+      if (SERVO_STATUS.current_servo < SERVO_STATUS.change_count) { //if it isnt the end...
+	  
+			//setup timer for next pull down
+         OCR3B = SERVO_STATUS.changes[SERVO_STATUS.current_servo].split_time_period;
+		 TCNT3 = 0;
+     }
+      else { //we are done with these pulses
+//         SERVO_STATUS.in_pulse = 0;
+//         SERVO_STATUS.ms = 0;
+//         OCR3B += SERVO_MS; //NOTE--this might mean the negative width is a function of max pos width
+//		 TCNT3 = 0;
+		servo_setup_pulse();
+      }
+
+   }
+   else { //we are between pulses
+      ++SERVO_STATUS.ms;  //increment ms counter
+
+      if (SERVO_STATUS.ms >= SERVO_PERIOD) { //see how many ms have passed
+         servo_setup_pulse(); //Seems like we could do this while not on the clock, but who knows
+      }
+      else {
+         OCR3B = SERVO_MS;  //go another ms
+		 TCNT3 = 0;
+         
+      }
+   }
+}
+
+
+
+void servo_init(void) {
+   int i;
+   uint8_t mysreg;
+   
+   SERVODDR1 |= SERVOMASK1;	//all outputs
+   SERVODDR2 |= SERVOMASK2;
+
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+   for (i = 0; i < SERVO_COUNT; ++i) {
+      SERVO_STATUS.servos[i].num = i;
+      SERVO_STATUS.servos[i].angle = 127;
+      SERVO_STATUS.servo_angles[i] = 127;
+   }
+
+   SERVO_STATUS.ms = 0;
+   SERVO_STATUS.new_angles = 1;
+   SERVO_STATUS.in_pulse = 0;
+   SERVO_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C=0;
+	TCNT3=0;
+	ETIMSK |= _BV(OCIE3B);
+	OCR3B = SERVO_MS;
+
+	SREG=mysreg;
+}
+
+void servo_set_angle(int servo, int angle) {
+	uint8_t mysreg;
+	if(servo>=8){ //2nd port flipped (on avrxbee at least)
+		servo= 23-servo;
+	}
+   if (SERVO_STATUS.servo_angles[servo] != angle) {
+	  mysreg=SREG;
+	  cli();
+      SERVO_STATUS.servo_angles[servo] = angle;
+      SERVO_STATUS.new_angles = 1;
+	  SREG=mysreg;
+   }
+}
+
+
+void servo_sort(void) {
+   int done = 0, i;
+   
+   while (! done) {
+      done = 1;
+
+      for (i = 0; i < SERVO_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+         if (SERVO_STATUS.servos[i].angle > SERVO_STATUS.servos[i+1].angle) {
+            SERVO_STATUS.servos[i].angle ^= SERVO_STATUS.servos[i+1].angle;
+            SERVO_STATUS.servos[i+1].angle ^= SERVO_STATUS.servos[i].angle;
+            SERVO_STATUS.servos[i].angle ^= SERVO_STATUS.servos[i+1].angle;
+
+            SERVO_STATUS.servos[i].num ^= SERVO_STATUS.servos[i+1].num;
+            SERVO_STATUS.servos[i+1].num ^= SERVO_STATUS.servos[i].num;
+            SERVO_STATUS.servos[i].num ^= SERVO_STATUS.servos[i+1].num;
+
+            done = 0;
+         }
+      }
+   }
+}
+
+void servo_setup_pulse(void) {
+   int i;
+   uint16_t my_port;
+   uint16_t sum = 0;
+   uint16_t split_time;
+
+   my_port = 0xffff; //all on
+
+   if (SERVO_STATUS.new_angles) {
+
+      SERVO_STATUS.change_count = 0;
+
+      for (i = 0; i < SERVO_COUNT; ++i) {
+         SERVO_STATUS.servos[i].angle = SERVO_STATUS.servo_angles[SERVO_STATUS.servos[i].num];
+      }
+
+      servo_sort();
+      SERVO_STATUS.new_angles = 0;
+
+      for (i = 0; i < SERVO_COUNT; ++i) {
+         split_time = /*SERVO_MIN + ((((((long int)(SERVO_MAX-SERVO_MIN)) >> 3) ) *
+                                  SERVO_STATUS.servos[i].angle) >> 5) */SERVO_STATUS.servos[i].angle - sum;
+         my_port &= ~_BV(SERVO_STATUS.servos[i].num);
+         for (; i < SERVO_COUNT - 1 && SERVO_STATUS.servos[i].angle == SERVO_STATUS.servos[i+1].angle; ++i) {
+            my_port &= ~_BV(SERVO_STATUS.servos[i+1].num);
+         }
+		 
+         SERVO_STATUS.changes[SERVO_STATUS.change_count].port_val = my_port;
+         servo_set_next_interrupt(split_time, &SERVO_STATUS.changes[SERVO_STATUS.change_count]);
+         
+		 ++SERVO_STATUS.change_count;
+		 
+         sum += split_time;
+      }
+
+      SERVO_STATUS.changes[SERVO_STATUS.change_count].port_val = my_port;
+      servo_set_next_interrupt(SERVO_RESET - split_time, &SERVO_STATUS.changes[SERVO_STATUS.change_count]);
+
+      ++SERVO_STATUS.change_count;
+
+   }
+
+
+
+   SERVO_STATUS.current_servo = 0;
+   SERVO_STATUS.in_pulse = 1;
+
+
+   SERVOPORT1 |= SERVOMASK1;
+   SERVOPORT2 |= SERVOMASK2;
+
+	OCR3B = SERVO_STATUS.changes[0].split_time_period;
+	TCNT3=0;
+}
+
+void servo_set_next_interrupt(uint16_t ticks, struct SERVO_CHANGE *sn) { 
+	//this function is a holdover from when we used a worse clock. 
+
+      (*sn).split_time_period = ticks;
+
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/time.c	(revision 62)
@@ -0,0 +1,134 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+Change Log:
+	2.5.07 - Kevin
+		Aaron fixed the orb/servo code and made them use timer3 but compare registers B and C. He hard set the prescaler
+		to 8 so the RTC broke. Changed it so that we use a 8 prescaler which sets the compare match at 1/16th of a second.
+		You now count how many 16ths of a second you want until you trigger your actual interrupt. Works. Changed defines
+		for time so you can still call rtc_init with a scale but now it is defined in terms of actual time like second, quarter_second
+		etc. Read that section in the time.h file for more information. Tested and works, though the clock drifts more than
+		it used to
+	1.30.07 - Kevin
+		Modified the clock to run on timer3 on the Dragonfly. Works with decent accuracy. Using a prescaler of 256
+	the timer counts up to a precomputer value which will trigger an interrupt and reset the timer. Multiples of
+	256 change it by that multiple. Refer to the time.h file for all possible prescalers.
+		The interrupt will call a specified function _rtc_func every pulse.
+		All of it has been tested and it works.
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static volatile int _rtc_pulse = 0;
+static volatile int _rtc_scale = 32;	//Defaults to 1 Second per pulse
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/* 	Prescales defined in time.h. SECOND will give you 1 second.
+	More scales are defined in the time.h file.
+	rtc_func is the address to a function that you want called every clock tick. */
+void rtc_init(int prescale_opt, void (*rtc_func)(void)) {
+	
+	//Clear timer register for Timer 3
+	TCNT3 = 0;
+	
+	/* 	This sets the Waveform Generation Module to CTC (Clear Timer on Compare) Mode (100)
+		See page135 in Atmega128 Docs for more modes and explanations */
+	TCCR3B |= _BV(WGM32);
+	
+	/* 	This sets the prescaler for the system clock (8MHz) ie: divides the clock by some number.
+		Currently set to a prescaler of 8 because that is what the orb and servos use (they are on this timer as well)
+		See page137 in Atemga128 Docs for all the available prescalers */
+	TCCR3B |= _BV(CS31);
+	
+	/* 	Sets the two regsiters that we compare against. So the timer counts up to this number and
+		then resets back to 0 and calls the compare match interrupt.
+		8x10^6 / 8 = 1/16 Second. All values are based off of this number. Do not change it unless you
+		are l337*/
+		
+	OCR3A = 0xF424;	
+
+	/* 	Enable Output Compare A Interrupt. When OCR3A is met by the timer TCNT3 this interrupt will be
+		triggerd. (See page140 in Atmega128 Docs for more information */
+	ETIMSK |= _BV(OCIE3A);
+	
+	/*	Store the pointer to the function to be used in the interrupt */
+	_rtc_f = rtc_func;
+	
+	/*	Store how many 1/16ths of a second you want to let by before triggering an interrupt */
+	_rtc_scale = prescale_opt;
+}
+
+//Returns the real time clock counter to 0
+int rtc(void){
+	return _rtc_val;
+}
+
+//Resets the real time clock counter
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+/*	Called every pulse. Function in _rtc_f is called every _rtc_scale and also the counter is updated.
+	Bascially, since the pulse is hard set at 1/16s  you want to count how many 16ths of a second have passed
+	and when it reaches the amount of time you want, execute the code. */
+SIGNAL(TIMER3_COMPA_vect) {
+
+	if (_rtc_pulse ==  _rtc_scale) {
+		//Increment the real time clock counter
+		_rtc_val++;
+		
+		//Calls the function tied to the real time clock if defined
+		if(_rtc_f != 0)
+			_rtc_f();
+		
+		//Resets the pulse until the next scale is matched
+		_rtc_pulse = 0;
+	}	
+	
+	//Updates the amount of pulses seen since the last scale match
+	_rtc_pulse++;
+	
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/analog.c	(revision 62)
@@ -0,0 +1,133 @@
+/*
+ * analog.c - Contains the function implementations for manipulating the ADC
+ * on the firefly+ board
+ * 
+ * author:  CMU Robotics Club, Colony Project
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ */
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void set_adc_mux(int which)
+{
+  // FIX THIS IN NEXT REVISION
+  // ADDR2 ADDR1 ADDR0
+  // G2.G4.G3 set mux to port 0-7 via binary selection
+  // math would be much cleaner if it was G4.G3.G2
+  
+  // mask so only proper bits are possible.  
+  PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04);
+}
+
+void analog_init(void)
+{
+
+
+	// ADC Status Register A
+	// Bit 7 - ADEN is set (enables analog)
+	// Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+	// Bit 5 - Enable Auto Trigger (for free running mode)
+	// Bit 4 - ADC interrupt flag, 0
+	// Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+	// Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 8,000,000/128
+	ADCSRA |= 0xEF;
+
+	// ADC Status Register B
+	// Bit 7, 5-3 - Must be cleared
+	// Bit 2:0 - Set mode, currently cleared for free running operation
+	// Bit 6 - Analog comparator mode - cleared
+//	ADCSRB = 0x00;
+	
+	// ADMUX register
+	// Bit 7,6 - Set voltage reference to AVcc (0b01)
+	// Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+	// Bit 4 - X
+	// Bit 3:0 - Sets the current channel, set to ADC7 (the external mux)
+	ADMUX = 0x67;
+
+	// Set external mux lines to outputs
+	DDRG |= 0x1C;
+	set_adc_mux(0x07);
+
+
+}	
+
+
+
+unsigned int analog8(int which)
+{
+
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+	
+	_delay_ms(1); // need at least 130 us between conversions
+	return ADCH;
+	
+}
+
+
+
+
+unsigned int analog10(int which)
+{
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void)
+{
+	return analog8(WHEEL_PORT);
+}
+
+int battery8(void)
+{
+  return analog8(BATT_PORT);
+}
+
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+	return analog8(BATT_PORT) * 500 >>7;
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lcd.c	(revision 62)
@@ -0,0 +1,471 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void crazycircle (void) {
+/*  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+
+      delay_ms(10);
+  }
+*/
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  write_c(0x8e);    // clear window command
+  write_d(0);
+  write_d(0);
+  write_d(130);
+  write_d(130);
+
+  delay_ms(100);
+  
+  write_c(0x92);    // fill enable command
+  write_d(0x01); 
+  
+  delay_ms(10);
+
+  crazycircle();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+//**************************************Old shit below!*****************
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+
+
+	LCDDDR |= (SCE | SDI | SCK);
+	LCDRESETDDR |= (RST|D_C);
+
+	LCDPORT &= ~( SCE | SDI | SCK);
+	LCDRESETPORT &=~(D_C);
+  
+	SPCR |= 0x50; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDRESETPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+  LCDRESETPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDRESETPORT |= D_C;
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/servo.h	(revision 62)
@@ -0,0 +1,29 @@
+
+#ifndef SERVO_H
+#define SERVO_H
+
+#include <avr/interrupt.h>
+
+
+#define SERVO_MS 2000          // Number of ticks per ms
+#define SERVO_PERIOD 0          // Amount of time to wait between pulses
+#define SERVO_RESET 15000
+
+#define SERVO_MIN 1800            // Smallest pulse length (ticks)
+#define SERVO_MAX 4200           // Largest pulse length (ticks)
+
+#define SERVOPORT1 PORTA
+#define SERVOPORT2 PORTC	//note that this port will be "backwards", i.e. pin0 is servo 15
+
+#define SERVODDR1 DDRA
+#define SERVODDR2 DDRC
+
+#define SERVOMASK1 0x0F
+#define SERVOMASK2 0x77
+
+void servo_init(void);
+void servo_set_angle(int servo, int angle);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/time.h	(revision 62)
@@ -0,0 +1,59 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+#define SIXTEENTH_SECOND 1
+#define EIGTH_SECOND 2
+#define QUARTER_SECOND 4
+#define HALF_SECOND	8
+#define SECOND 16
+#define TWO_SECOND 32
+#define FOUR_SECOND 64
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/move.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/move.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/move.c	(revision 62)
@@ -0,0 +1,191 @@
+//Created 4/30/06 by James Kong
+
+#include "dragonfly_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+void move (int velocity, int omega) {
+  int vl = 0;
+  int vr = 0;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  //
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+/*@strength, the strength of the avoid behavior from 0 to 100,
+255 gives full control to avoid, 0 none. defines here for now*/
+
+void move_avoid(int velocity, int omega, int strength){
+  int pControl;
+  int vl = 0;
+  int vr = 0;
+  int temp;
+  
+  temp=read_distance(IR1);
+  d1 = (temp == -1) ? d1 : temp;
+  
+  temp=read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /* Avoid obstacles ahead
+  if(d2>170)
+    v*=-1;
+    
+  Naturally slow down if there is something in the way.
+  if(d2>150 || d1>180 || d3>180){
+    v>>=1;
+  */
+  
+  pControl= (((d3-d1) + (d4-d5))*strength)/100;
+  omega = (omega*(100-strength))/100 + pControl;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr) {
+	//omega: angle measure, positive couter-clockwise from front.
+	// -180 <= omega <= 180
+	//velocity: -255 <= velocity <= 255
+  
+  long int vltemp, vrtemp;
+  
+  //make sure values are in bounds
+  if (velocity < -255 || velocity >255 || omega < -255 || omega > 255) return;
+	
+  //compute
+	vrtemp = velocity + omega * 3;
+	vltemp = velocity - omega * 3;
+	
+	//check to see if max linear velocities have been exceeded.
+  if (vrtemp > 255) {
+    vltemp = 255 * vltemp / vrtemp;
+    vrtemp = 255;
+  }
+  if (vltemp > 255) {	   
+	vrtemp = 255 * vrtemp / vltemp;    
+	vltemp = 255;  
+  }
+  if (vrtemp < -255) {
+    vltemp = -255 * vltemp / vrtemp;
+    vrtemp = -255;
+  }
+  if (vltemp < -255) {
+    vrtemp = -255 * vrtemp / vltemp;
+    vltemp = -255;
+  }
+  
+  *vr = (int)vrtemp;
+  *vl = (int)vltemp;
+	
+
+}
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/analog.h	(revision 62)
@@ -0,0 +1,100 @@
+/*
+ * analog.h - Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7
+ * AN6 and AN7 are used for the wheel and battery
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog
+	
+ * author: CMU Robotics Club, Colony Project
+ * code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+#define AN8 0x08
+#define AN9 0x09
+#define AN10 0x0a
+#define AN11 0x0b
+#define AN12 0x0c
+#define AN13 0x0d
+#define AN14 0x0e
+#define AN15 0x0f
+
+#define ANALOG0 AN0
+#define ANALOG1 AN1
+#define ANALOG2 AN8
+#define ANALOG3 AN9
+#define ANALOG4 AN2
+#define ANALOG5 AN3
+#define ANALOG6 AN4
+#define ANALOG7 AN5
+#define ANALOG8 AN6
+
+#define EXT_MUX AN7
+#define WHEEL_PORT AN10
+#define BATT_PORT  AN11
+
+//Macros for Battery
+//Constants determined experimentally 2/9/2007 - James Kong
+//See Battery8_data.xls for experiment data
+#define NORMALV 6
+#define CHARGINGV 7.00
+#define LOWV 5.25
+
+#define BATT_NRMLV (int)(25.7*NORMALV)
+#define BATT_CHRGV (int)(25.7*CHARGINGV)
+#define BATT_LOWV (int)(25.7*LOWV)
+
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+/*
+  returns the current analog8 reading of the battery voltage
+  128 ~= 5 volts, higher value -> higher voltage
+  analog_init() must be called before a call to this function
+*/
+int battery8(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lcd.h	(revision 62)
@@ -0,0 +1,31 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+
+
+//////lcd defines
+#define RST _BV(4)  // pd4 (GPIO)
+#define SCE _BV(0)  // pb0 (~SS)
+#define D_C _BV(5)  // pd5 (GPIO?)
+#define SDI _BV(2)  // pb2 (MOSI)
+#define SCK _BV(1) // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTD
+#define LCDRESETDDR DDRD
+
+
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/pindefs_ff.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/pindefs_ff.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/pindefs_ff.h	(revision 62)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/move.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/move.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/move.h	(revision 62)
@@ -0,0 +1,46 @@
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+int d1,d2,d3,d4,d5;  /*Move avoid distance variables*/
+
+void move(int velocity, int omega);
+
+void move_avoid(int velocity, int omega, int strength);
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr);
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dio.c	(revision 62)
@@ -0,0 +1,324 @@
+/* 
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+the first 3 (abc in this example) are used to select the bank
+A = 001
+B = 010
+C = 011
+D = 100
+E = 101
+F = 110
+G = 111
+		
+the bank can be found by doing portpin >> 3
+		
+the next 3 (def in this example) are used to select the pin number
+the 3 bits are just the binary representation of the pin number
+0 = 000
+1 = 001
+2 = 010
+3 = 011
+4 = 100
+5 = 101
+6 = 110
+7 = 111
+		
+the pin number can be found by doing portping & 0b111
+*/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/*
+ * digital_input
+ * Reads the value on the selected portpin, returns it as 1 or 0
+ * see general description (above) for definition of portpin
+ */
+int digital_input(int portpin){
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3){
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4){
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/*
+  digital_pull_up
+  Enables pullup on a pin.  if pin is output, it will make it output 1.
+*/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/*
+  digital_output
+
+  sets portpin to the value
+  see general description above for explanation of portpin
+  val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  }else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+  return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING0);
+	PORTG|= _BV(PING0);
+    pin_val = PING;
+	return !((pin_val & _BV(PING0)));
+  
+}
+
+/* similar to button1_read, but hold program until the button is actually 
+ * pressed
+*/
+void button1_wait( void )
+{
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/* USER LED 
+  same as button1_wait
+  However, blink the led while waiting
+
+  IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+/*
+void button1_wait_led( void )
+{
+  int i = 0;
+  
+  while(!button1_read()){
+    if(i < 8){
+      led_user(1);
+    }else{
+      led_user(0);
+    }
+    //increment i, but restart when i = 15;
+    i = (i+1) & 0xF;
+    delay_ms(15);
+  }
+  
+  led_user(0);
+}
+*/
+//click waits until the button is realesed to return true
+//return false immediatley
+int button1_click()
+{
+  if(button1_read()){
+    while(button1_read());
+    return 1;
+  }else{
+    return 0;
+  }
+}
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING1);
+	PORTG|= _BV(PING1);
+    pin_val = PING;
+	return !((pin_val & _BV(PING1)));
+}
+
+void button2_wait( void )
+{
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+/*USER LED NO LONGER EXISTS
+void button2_wait_led(void)
+{
+  int i = 0;
+  
+  while(!button2_read()){
+    if(i < 8){
+			led_user(1);
+    }else{
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+*/
+int button2_click()
+{
+	if(button2_read()){
+    while(button2_read());
+    return 1;
+  }else{
+		return 0;
+  }
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/bom.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/bom.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/bom.c	(revision 62)
@@ -0,0 +1,107 @@
+#include <stdio.h>
+#include <dragonfly_lib.h>
+#include "bom.h"
+#include "dio.h"
+#include "analog.h"
+
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+int getMaxBom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+              
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+	printf("max_bom_temp = %d\n", max_bom_temp);
+	return max_bom_temp;
+}
+
+char bytetosymb(unsigned int c)
+{
+  c = 255 - c;
+
+  if (c < 32)
+    return ' ';
+  if (c < 64)
+    return '_';
+  if (c < 96)
+    return ',';
+  if (c < 128)
+    return '.';
+  if (c < 160)
+    return '-';
+  if (c < 192)
+    return '~';
+  if (c < 224)
+    return '\'';
+  return '`';
+}
+
+void bom_on(void)
+{
+  output_high(MONKL);
+
+}
+
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
+int printAllBoms(void){
+  int i,j;
+  for(i=0;i<16;i++){
+      j=lookup[i];
+      digital_output(MONK0,j&1);
+      digital_output(MONK1, (j>>1)&1);
+      digital_output(MONK2, (j>>2)&1);
+      digital_output(MONK3, (j>>3)&1);
+      usb_puts("Bom ");
+      usb_puti(i);
+      usb_puts(": ");
+      usb_puti(analog8(MONKI));
+      usb_puts("\n\r");
+    }
+    return 1;
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/dio.h	(revision 62)
@@ -0,0 +1,182 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+these are ALL the pins
+don't use unless you know what you're doing
+*/
+
+/*
+DIO pins on new dragonfly boards are shown below:
+-----------------------------------------------
+| _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+-----------------------------------------------
+| _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+-----------------------------------------------
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+#define _PIN_D1 33  // pin DIO7
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42  // pin DIO0
+#define _PIN_E3 43  // pin DIO1
+#define _PIN_E4 44  // pin DIO2
+#define _PIN_E5 45  // pin DIO3
+#define _PIN_E6 46  // pin DIO4
+#define _PIN_E7 47  // pin DIO5
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#define PIN_LED1 58
+
+
+/* Buttons */
+#define PIN_BTN PING
+#define BTN2 PING1
+#define BTN1 PING0
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+int button1_read( void );
+int button1_click( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+int button2_click( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/reset.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/reset.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/reset.c	(revision 62)
@@ -0,0 +1,27 @@
+/*
+reset.h - contains reset() function that resets the AVR
+author: James Kong
+
+Last Modified:
+
+3.7.2007 - James
+    created reset.c
+*/
+
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <reset.h>
+
+/*
+Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+to reset the AVR.  The reset clears all memory and resets all registers
+with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+and Status Register (MCUCSR).
+*/
+void reset(void)
+{
+    WDTCR &= 0xF8;
+    WDTCR |= 0x08;
+    _delay_ms(15);
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/bom.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/bom.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/bom.h	(revision 62)
@@ -0,0 +1,55 @@
+
+#ifndef _BOM_H
+#define _BOM_H
+
+
+/*
+
+
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+
+*/
+
+
+/*
+the analog pin definitions from dio.h DO NOT work here,
+so we must use PF0 from avrgcc (as opposed to _PIN_F0).
+BUT the dio pin definitions from dio.h must be used (no PE...).
+
+also, _PIN_E2 is initialized to high for some reason,
+which turns the BOM on when the robot is turned on.
+WORK-AROUND: call digital_output(_PIN_E2,0) at some point.
+
+*/
+
+#define MONKI PF0         //analog (yellow)
+//------------------------//
+#define MONKL _PIN_E2     //green
+#define MONK1 _PIN_E3     //blue
+#define MONK0 _PIN_E4     //white
+//------------------------//
+#define MONK3 _PIN_E6     //blue
+#define MONK2 _PIN_E7     //white 
+
+
+int getMaxBom( void );
+
+int printAllBoms(void);
+char bytetosymb(unsigned int c);
+
+void bom_on(void);
+void bom_off(void);
+
+void output_high(int which);
+void output_low(int which);
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/rangefinder.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/rangefinder.c	(revision 62)
@@ -0,0 +1,135 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "dragonfly_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+void range_init(void){
+  digital_output(_PIN_B4,0);
+}
+
+int read_distance (int range_id) {  
+  return analog8(range_id);
+}
+
+
+int linearize_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+
+
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+/*
+int linearize_distance (int reading) {
+
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+
+}*/
+
+
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+
+/*
+int log_distance(int distance) {
+
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+
+	return 0;
+
+*/
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/reset.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/reset.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/reset.h	(revision 62)
@@ -0,0 +1,12 @@
+/*
+reset.h - contains reset() function that resets the AVR
+*/
+
+
+/*
+Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+to reset the AVR.  The reset clears all memory and resets all registers
+with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+and Status Register (MCUCSR).
+*/
+void reset(void);
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/rangefinder.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/rangefinder.h	(revision 62)
@@ -0,0 +1,62 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+
+#define IR1 6
+#define IR2 5
+#define IR3 4
+#define IR4 3
+#define IR5 2
+
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+
+void range_init(void);
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/lights.c	(revision 62)
@@ -0,0 +1,310 @@
+/*
+  lights.c
+  Controls orb1 and orb2. Also contains the framework for a software PWM that may be used for servos in the future.
+
+  author: CMU Robotics Club, Colony Project
+
+  Change Log:
+  2.4.07 - Aaron
+	Revamped orb code so it works.  Need to check interaction with rtc, and tweak some colors.
+
+  2.1.07 - James
+	Modified sort_buffer() to prune for repeats.  PWM now uses orb_buf_size for the number of orb values in orb_time_arr[].
+  Changed sorting algorithm used in sort_buffer() to selection sort (faster). And it works now.
+
+  1.25.07 - KWoo
+	Deleted old FF+ code to make it cleaner. Commented code. This all works. Note however that if you ever plan to use the
+  software PWM (which is this) you will need to change the implementation of orb_enable() and orb_disable() to not
+  shutdown the PWM.
+
+*/
+
+#include "lights.h"
+#include "dragonfly_lib.h"
+
+#define ORB_COUNT 8	//please dont change this, or bad things might happen
+
+struct ORB_NODE {
+  uint8_t num;
+  uint16_t angle;
+};
+
+struct ORB_CHANGE {
+  uint16_t port_val;
+  uint16_t split_time_period;
+};
+
+
+struct ORB_STATUS_STRUCT {
+  struct ORB_NODE orbs[ORB_COUNT];
+  uint16_t orb_angles[ORB_COUNT];
+  struct ORB_CHANGE changes[ORB_COUNT+1];
+  uint8_t change_count;
+  uint8_t new_angles;
+  uint8_t current_orb;
+
+} ORB_STATUS;
+
+void orb_sort(void);
+void orb_setup_pulse(void);
+
+SIGNAL (SIG_OUTPUT_COMPARE3C){
+
+  //pull the correct ones down
+  ORBPORT &= (~ORBMASK)|(ORB_STATUS.changes[ORB_STATUS.current_orb].port_val);
+
+  ++ORB_STATUS.current_orb; //now look at next orb transition
+
+  if (ORB_STATUS.current_orb < ORB_STATUS.change_count) { //if it isnt the end...
+	  
+    //setup timer for next pull down
+    OCR3C = TCNT3+ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period;
+		 
+  }
+  else { //we are done with these pulses
+		orb_setup_pulse();
+  }
+
+}
+
+
+//sets a channel to a value
+void orb_set_angle(int orb, int angle) {
+	uint8_t mysreg;
+	
+	orb=orb&0x07; //only have 8
+	angle=angle&0xff; //only accept 0-255
+	angle=255-angle; //inverse intensity
+	angle=angle<<2; //scale up so that we dont run it too often
+	angle+=3; //0 values dont really work
+  if (ORB_STATUS.orb_angles[orb] != angle) { //if the angle has changed
+	  mysreg=SREG; 
+	  cli(); //disable interrupts
+    ORB_STATUS.orb_angles[orb] = angle; //update angle
+    ORB_STATUS.new_angles = 1;
+	  SREG=mysreg; //put interrupt status back
+  }
+}
+
+
+void orb_sort(void) {
+  int done = 0, i;
+   
+  while (! done) {
+    done = 1;
+
+    for (i = 0; i < ORB_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+      if (ORB_STATUS.orbs[i].angle > ORB_STATUS.orbs[i+1].angle) {
+        ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+        ORB_STATUS.orbs[i+1].angle ^= ORB_STATUS.orbs[i].angle;
+        ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+
+        ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+        ORB_STATUS.orbs[i+1].num ^= ORB_STATUS.orbs[i].num;
+        ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+
+        done = 0;
+      }
+    }
+  }
+}
+
+//calculate the split times
+void orb_setup_pulse(void) {
+  int i;
+  uint16_t my_port;
+  uint16_t sum = 0;
+  uint16_t split_time;
+
+  my_port = 0xff; //all on
+
+  if (ORB_STATUS.new_angles) {
+
+    ORB_STATUS.change_count = 0;
+	  for (i = 0; i < ORB_COUNT; ++i) { //get the new values
+      ORB_STATUS.orbs[i].angle = ORB_STATUS.orb_angles[ORB_STATUS.orbs[i].num];
+    }
+
+    orb_sort(); //sort them
+    ORB_STATUS.new_angles = 0;
+
+    for (i = 0; i < ORB_COUNT; ++i) { //calculate split times
+      split_time = ORB_STATUS.orbs[i].angle - sum;
+      my_port &= ~_BV(ORB_STATUS.orbs[i].num);
+		 
+      for (; i < ORB_COUNT - 1 && ORB_STATUS.orbs[i].angle == ORB_STATUS.orbs[i+1].angle; ++i) {
+        my_port &= ~_BV(ORB_STATUS.orbs[i+1].num); //look for doups
+      }
+		 
+      ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port; //which pins are low
+      ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = split_time;
+         
+      ++ORB_STATUS.change_count;
+		 
+      sum += split_time;
+    }
+
+    ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port;
+    ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = ORB_RESET - sum; //get a constant period
+
+    ++ORB_STATUS.change_count;
+
+  }
+
+
+
+  ORB_STATUS.current_orb = 0;
+
+  ORBPORT |= ORBMASK; //start with all high
+	OCR3C = TCNT3 + ORB_STATUS.changes[0].split_time_period; //wait for first split
+
+}
+
+
+//Initializes the PWM for Orb control. This must be called before the Orbs are used for them to function.
+void orb_init() 
+{	
+  int i;
+  uint8_t mysreg;
+   
+  ORBDDR |= ORBMASK;	//all outputs
+   
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+  for (i = 0; i < ORB_COUNT; ++i) {
+    ORB_STATUS.orbs[i].num = i;
+    ORB_STATUS.orbs[i].angle = 1023;	//127 is a pretty stupid start angle, but oh well
+    ORB_STATUS.orb_angles[i] = 1023;
+  }
+
+  ORB_STATUS.new_angles = 1;
+  ORB_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C = 0;
+	ETIMSK |= _BV(OCIE3C); //turn on oc3c interrupt
+	OCR3C = TCNT3+ORB_RESET;
+
+	SREG=mysreg;
+
+}
+
+//Set both Orbs (1 and 2) to the same color as specified
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb1_set(red_led,green_led,blue_led);
+	orb2_set(red_led,green_led,blue_led);
+
+}
+
+//Sets Orb1 to the specified color
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb_set_angle(0,red_led);
+	orb_set_angle(1,green_led);
+	orb_set_angle(2,blue_led);
+}
+
+//Sets Orb2 to the specified color
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {	
+	orb_set_angle(4,red_led);
+	orb_set_angle(5,green_led);
+	orb_set_angle(6,blue_led);
+}
+
+
+//Sets both orbs to the same color using the color defines
+void orb_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb_set(red, green, blue);
+}
+//Sets both orbs to the same color using the color defines
+void orb1_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb1_set(red, green, blue);
+}
+//Sets both orbs to the same color using the color defines
+void orb2_set_color(int col)
+{
+  int red, green, blue;
+
+  red = ((col & 0xE0) >> 5) * 36;
+  green = ((col & 0x1C) >> 2) * 36;
+  blue = (col & 0x03) * 85;
+
+  orb2_set(red, green, blue);
+}
+
+//DOES THIS WORK?
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+/* If we use the PWM for anything else besides the ORB, this implementation needs to be done better */
+void orb_disable()
+{
+	TCCR3B &= 0;  	//Turn off everything
+	ORB_PORT |= _BV(ORB1_RED);
+	ORB_PORT |= _BV(ORB1_GREEN);
+	ORB_PORT |= _BV(ORB1_BLUE);
+	ORB_PORT |= _BV(ORB2_RED);
+	ORB_PORT |= _BV(ORB2_GREEN);
+	ORB_PORT |= _BV(ORB2_BLUE);
+}
+
+//DOES THIS WORK?
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+//	TCCR0 |= _BV(COM01) | _BV(COM00)  | _BV(WGM00) | _BV(CS01);	//Toggle OC Pin on match, FAST PWM Mode, clock/8
+	TCCR3B =_BV(CS31);
+
+}
+
+void orb_tester()
+{
+	orb_init();
+	lcd_init();
+	sei();
+
+	while(1)
+	{
+		orb_set_color(RED);
+		//orb_set1(128,128,128);
+		//orb_set2(1,56,255);
+		delay_ms(100);
+		for (int i = 0; i < ORB_COUNT; i++) {
+			lcd_putint(ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period>>3);
+			lcd_putchar(' ');
+		}
+		
+		delay_ms(2000);
+		lcd_clear_screen();
+		orb_set_color(GREEN);
+		//orb_set1(128,128,128);
+		//orb_set2(128,128,128);
+		delay_ms(100);
+		for (int i = 0; i < ORB_COUNT; i++) {
+			lcd_putint(ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period>>3);
+			lcd_putchar(' ');
+		}
+		
+		delay_ms(2000);
+		lcd_clear_screen();
+	}
+}
Index: branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/ring_buffer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/ring_buffer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/dragonfly_wireless_relay/ring_buffer.h	(revision 62)
@@ -0,0 +1,115 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs Could not create buffer of non byte-sized elements due to modding with sizeof(queue).  
+ * 		  Fixed 3/2/07, Felix Duvallet and Brad Neuman
+ */
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+		uint8_t buffer_size;			\
+	} __VA_ARGS__
+
+
+/** @brief Initializes the ring buffer, setting its size to the correct value
+ *
+ *	@param buf The ring buffer to initialize.
+ *
+ *  @param size The size of the ring buffer (in array elements)
+ */
+#define RING_BUFFER_INIT(buf, size) 			\
+	do {										\
+		(buf).buffer_size = size;				\
+	} while(0)
+
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % (buf).buffer_size == (buf).start)
+
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % (buf).buffer_size;	\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % (buf).buffer_size;	\
+	} while (0)
+
+/** @brief Checks the value at the head of the ring buffer without removing it
+ *  and puts it into val_ret. Note that val_ret must be the same type used in
+ *  creating the ring buffer to prevent the compiler from spewing confusing
+ *  errors. Also, this assumes that the ring buffer is not empty.
+ *
+ *  @param buf The ring buffer to check from
+ *  @param val_ret where to put the value checked from the head of the ring
+ */
+ #define RING_BUFFER_PEEK(buf, val_ret)  \
+  do { \
+    (val_ret) = (buf).queue[(buf).start]; \
+  } while(0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonybfs.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonybfs.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonybfs.c	(revision 62)
@@ -0,0 +1,158 @@
+/*
+Colony BFS
+
+Felix Duvallet
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include <firefly+_lib.h>
+#include <ring_buffer.h>
+
+#include "colonybfs.h"
+
+
+
+#define NO_VAL 0
+
+
+RING_BUFFER_NEW(Queue, MAX_ROBOTS, char, q);
+
+/*
+colony_bfs_find_leader -- given an adjacency matrix, with a start and end
+    robots, this will tell you which robot to follow next.  If no path exists,
+    it will return -1 (which may or may not go to 255 on the unsigned side
+    of things -- be wary).
+
+    It does find the entire path, perhaps someday I will make two function,
+    where find_leader calls bfs(..) and only uses the first element.
+    
+    I ported this code from a MATLAB test file (also in the libs_general folder),
+    and this has been tested on September 15, 2006 by Felix
+
+    Todo: change NO_VAL to 255 and reflect those changes in the localization code
+    
+Author: Felix Duvallet
+        CMU Robotics Club, Colony Project
+
+*/
+char colony_bfs_find_leader ( unsigned char matrix[MAX_ROBOTS][MAX_ROBOTS], 
+                                unsigned char start, unsigned char end ) {
+
+
+/*
+//pseudocode for BFS
+
+procedure bfs(v)
+    q := make_queue()
+    enqueue(q,v)
+    mark v as visited
+    while q is not empty
+        v = dequeue(q)
+        process v
+        for all unvisited vertices v' adjacent to v
+            mark v' as visited
+            enqueue(q,v')
+*/
+
+    // keep track of which nodes you have visited.  Indexed by robot #
+    // 1 if visited, 0 if not
+    unsigned char visited_nodes[MAX_ROBOTS];
+    // keep track of the distance from the start robot to other robots
+    // also indexed by robot#
+    unsigned char node_distances[MAX_ROBOTS];
+    // this is the path you take
+    unsigned char path[MAX_ROBOTS];
+    
+    //variables you will need
+    unsigned char current_node;                 //current node
+    unsigned char current_neighbour_node;       //neighbor to the current node
+    unsigned char current_neighbour_val;        //value of that neighbour's sensors
+    unsigned char current_distance;              //keep track of current distance to the start
+    unsigned char i;                            //counter variable
+    
+    char large_number = 255;
+
+    //set visited nodes to all 0
+    memset(visited_nodes, 0, MAX_ROBOTS);
+    //set all the distances to a very large number
+    //this isn't technically necessary, but it's probably a good thing -- just in case
+    memset(node_distances, large_number, MAX_ROBOTS);
+    
+    //set the path to all LARGE_NUMBER as well
+    memset(path, large_number, MAX_ROBOTS);
+
+    RING_BUFFER_CLEAR(q);
+
+    //add the start node
+    RING_BUFFER_ADD(q, start);
+    visited_nodes[start] = 1;
+    node_distances[start] = 0;
+    
+    while(!RING_BUFFER_EMPTY(q)){
+        RING_BUFFER_REMOVE(q, current_node);
+        
+        //get the current distance from you to the start
+        current_distance = node_distances[current_node];
+        
+        //this node is on your 'path'
+        path[current_distance] = current_node;
+        //note: it's OK if this path leads nowhere -- the path will be
+        //overwritten by a node that does lead to the goal
+        //(if there is no path, we set path to null anyways)
+        
+        //from now on, all further nodes will be one further away -- increment
+        current_distance++;
+        
+        
+        //process node -- basically check if it's the goal
+        if(current_node == end) {
+            //you reach the goal
+            //return the first robot in the path, which is the one
+            //to follow
+            lcd_putchar('.');
+            lcd_putchar('.');
+            for(i = 0; i < MAX_ROBOTS; i++)
+                lcd_putchar(path[i] +48);           //print out the path for fun -- remove this later
+            lcd_putchar('.');
+            lcd_putchar('.');
+            return path[1];         //path[0] is you.  path[1] is who you want to follow
+        }
+        
+        // go through all nodes adjacent to current
+        // in effect, this means going through the current node's row in the matrix
+        for(i = 0; i < MAX_ROBOTS; i++) {
+            //the robot # is actually just the index
+            current_neighbour_node = i;
+            //the value is what is stored in the matrix (this is important)
+            current_neighbour_val = matrix[current_node][i];
+            
+            //check for connected-ness and that it was not visited
+            //            unconnected                           visited
+            if( (current_neighbour_val == NO_VAL) || (visited_nodes[current_neighbour_node]) ) {
+                //if it is either unconnected or previously visited, exit
+                continue;   //go to the next node
+            }
+            
+            //update the distance from the start node to this node
+            node_distances[current_neighbour_node] = current_distance;
+            //also mark it as visited
+            visited_nodes[current_neighbour_node] = 1;
+            
+            //also enqueue each neighbour
+            RING_BUFFER_ADD(q, current_neighbour_node);
+        
+        }
+    }
+    
+    //if we get to here, there is no path
+    memset(path, 0, MAX_ROBOTS);
+    return -1;
+
+
+
+}
+
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lights.h	(revision 62)
@@ -0,0 +1,90 @@
+/*
+lights.h
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+//user LED
+#ifdef FFPP
+
+#define USERLED 15
+#define USERLED1 15
+#define USERLED2 31
+
+#else
+
+#define USERLED PING2
+#define USERLED1 PING2
+#define USERLED2 PING2 //only have 1
+
+//LEDs are on bank E
+#define REDLED   PE3
+#define GREENLED PE4
+#define BLUELED  PE5
+
+#endif
+
+//ORB
+#define RED       0xE0
+#define ORANGE    0xE8
+#define YELLOW    0xFC
+#define LIME      0x7C
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0x63
+#define PURPLE    0x23
+#define MAGENTA   0xE3
+#define WHITE     0xFF
+#define ORB_OFF   0x00
+
+
+
+//?
+#define COUNT_START 0x8000
+
+
+//user LED
+void led_init( void );
+void led_user(int value);
+
+
+// For function descriptions see orb.c 
+void orb_init(void);
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led); 
+void orb_set_color(int col);
+void orb_disable(void);
+void orb_enable(void);
+
+void orb_set_dio(int red, int green, int blue);
+#ifdef FFPP
+int orbs[32];
+
+//send now
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//force send
+void orb_send(void);
+
+void tlc5940test(void);
+
+void tlc_clock1(int data);//may not need these 2
+void tlc_clock2(int data);
+
+void tlc_send(void);
+void tlc_latch(void);
+
+
+void tlc5940init(void);
+#endif
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/robotWirelessRelay.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/robotWirelessRelay.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/robotWirelessRelay.c	(revision 62)
@@ -0,0 +1,63 @@
+/* robotWirelessRelay
+ * 
+ * Eugene Marinelli
+ * 1/25/07
+ */
+
+/* Includes */
+#include <stdio.h>
+#include <string.h>
+ 
+#include <firefly+_lib.h>
+#include "pindefs_ff.h"
+//#include "wl_adhoc.h"
+
+void init_hardware(void);
+
+int main(void){
+  char wl_buf = 0;
+  char serial_buf = 0;
+
+  init_hardware();
+
+  orb_set_color(GREEN);
+  
+  UCSR0B |= _BV(RXCIE);
+  sei();
+
+  while (1) {
+	  /* Relay serial data to wireless */
+    serial_buf = serial1_getchar();
+    serial_putchar(serial_buf);
+    //lcd_putchar(serial_buf);
+    orb_set_color(YELLOW);
+	  //serial_buf = 0;
+  }
+  
+  return 0;
+}
+
+void init_hardware(){
+  motors_init();
+  orb_init();
+  led_init();
+  analog_init();
+  
+  serial_init(BAUD115200);
+  serial1_init(BAUD115200);
+  //serial1_init(BAUD9600);
+  lcd_init();
+
+  fdevopen(&serial1_putchar, &serial1_getchar);
+}
+
+ISR(USART0_RX_vect)
+{  
+  char wl_buf;
+  wl_buf = UDR0;
+  
+  /* Received wireless byte - relay to computer */
+  //printf("%c", wl_buf);
+  serial1_putchar(wl_buf);
+  orb_set_color(RED);
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/motor.c	(revision 62)
@@ -0,0 +1,107 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+#ifndef FFPP
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = 0xA1;
+	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+#else
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution at a frequency of
+	// PWM is mode 1, Freq = Clock I/O/1024. 
+	// OC1A and OC1B as pwm.
+	OCR1A = 0x00;
+	OCR1B = 0x00;
+	
+	PORTD &= 0x0F;
+	DDRD |= 0xF0;
+	DDRB |= 0x60;
+	
+	TCCR1A = 0xA1;
+	TCCR1B = 0x05;
+#endif
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x10;
+		PORTD &= 0xBF;
+	}
+	else {
+		PORTD |= 0x40;
+		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+#else
+
+	if(direction == FORWARD) {
+		PORTD = (PORTD & 0xCF) | 0x20;
+	}
+	else {
+		PORTD = (PORTD & 0xCF) | 0x10;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1A = speed;
+#endif
+
+}
+
+void motor2_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x20;
+		PORTD &= 0x7F;
+	}
+	else {
+		PORTD |= 0x80;
+		PORTD &= 0xDF;
+	}
+	OCR1BL = speed;
+#else
+
+	if(direction != FORWARD) {
+		PORTD = (PORTD & 0x3F) | 0x80;
+	}
+	else {
+		PORTD = (PORTD & 0x3F) | 0x40;
+	}
+	
+	OCR1B = speed;
+#endif
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonybfs.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonybfs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonybfs.h	(revision 62)
@@ -0,0 +1,13 @@
+#ifndef COLONYBFS_H
+#define COLONYBFS_H
+
+/*
+Colony BFS - Performs breadth-first search on a colony adjacency matrix
+
+Felix Duvallet
+*/
+#include "localization.h"
+
+char colony_bfs_find_leader ( unsigned char matrix[MAX_ROBOTS][MAX_ROBOTS], unsigned char start, unsigned char end );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/motor.h	(revision 62)
@@ -0,0 +1,38 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+#ifdef FFPP
+
+#define IN1A PD4
+#define IN1B PD5
+#define IN2A PD6
+#define IN2B PD7
+
+/* truth table for this robot (w/ 17529 and nand gates)
+PWM	!A	!B	M+	M-
+L	X	X   Z	Z  - coast
+H	0	0	Z	Z  - coast
+H	0	1	1	0  - forward
+H	1	0	0	1  - backward
+H	1	1	0	0  - fast brake
+
+*/
+#endif
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/serial.c	(revision 62)
@@ -0,0 +1,143 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	author: Robotics Club, Colony Project
+	
+	much code taken from FWR's library, author: Tom Lauwers
+	
+	
+	general note - serial -> uart
+				   serial1 -> uart1
+		this is done for clarity purposes
+*/
+
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+//setup uart0 (serial)
+void serial_init(unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR0H = 0x00;
+	UBRR0L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+}
+
+// uart_putchar - Low-level function which puts a value into the 
+// Tx buffer for transmission.  Automatically injects
+// a \r before all \n's
+int serial_putchar(char c)
+{
+
+    if (c == '\n')
+		putchar('\r');
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR0A, UDRE0);
+	// Load buffer with your character
+    UDR0 = c;
+    return 0;
+}
+
+// uart_getchar - Low-level function which waits for the Rx buffer
+// to be filled, and then reads one character out of it.
+// Note that this function blocks on read - it will wait until
+// something fills the Rx buffer.
+int serial_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+  c = UDR0;
+	return c;
+}
+
+// uart_getchar_nb - Low-level function which checks if the Rx buffer
+// is filled, and then reads one character out of it.
+// This is a non blocking version uart_getchar
+int serial_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+
+	if (UCSR0A & _BV(RXC0)){
+		// Read the receive buffer
+		c = UDR0;
+		return c;
+ 	}
+
+	return 0;
+}
+
+//setup uart1 (serial1)
+void serial1_init( unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR1H = 0x00;
+	UBRR1L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  /* For use with fprintf() and related functions */
+  serial1_stream = fdevopen(serial1_putchar, serial1_putchar);
+  
+  /* To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); 
+     This call to fdevopen() does give a compile warning
+  but works fine.
+  -Greg Tress
+  */
+}
+
+//put to uart1 (serial1)
+int serial1_putchar(char c)
+{
+
+    if (c == '\n')
+		serial1_putchar('\r'); //changed from putchar aj
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR1A, UDRE1);
+	// Load buffer with your character
+    UDR1 = c;
+    return 0;
+}
+
+//get from uart1 (serial1)
+int serial1_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+    c = UDR1;
+	return c;
+}
+
+//get from uart1 non-block
+int serial1_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR1A, RXC1);
+	if (UCSR1A & _BV(RXC1)){
+		// Read the receive buffer
+		c = UDR1;
+		return c;
+	}
+	return 0;
+		
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/buzzer.c	(revision 62)
@@ -0,0 +1,72 @@
+/*
+  buzzer.c - Contains the functions necessary for running the buzzer
+  
+  author: Robotics Club, Colony Project
+  
+  much taken from FWR's firefly library (author: Tom Lauwers)
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+  // Set pin D7 to output - D7 is buzzer pin
+  DDRB |= 0x80;
+  
+  // Set to Fast PWM mode, toggle the OC0A pin (D6) on output compare
+  // matches, and select a clock prescalar of 64 for the counter.
+  // Counter FREQ = 8000000/64 = 125000
+  //01011000
+  TCCR2 = 0x1B;
+  OCR2=100;
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+  OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest 
+// buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0x7F;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/serial.h	(revision 62)
@@ -0,0 +1,47 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// Tested baud rates
+#define BAUD9600    103
+#define BAUD115200  8  //Warning--3.5% error
+
+// Untested baud rates that might be right --aaron
+#define BAUD1M	     0
+#define BAUD500K     1
+#define BAUD250K     3
+#define BAUD230400   3   //Warning--8.5% error
+#define BAUD76800    12
+#define BAUD57600    16  //Warning--2.1% error
+#define BAUD38400    25
+#define BAUD28800    34
+#define BAUD19200    51
+#define BAUD14400    68
+#define BAUD4800     207
+#define BAUD2400     416  //Might not work, since it needs some high bits set
+
+#include <stdio.h>
+FILE *serial1_stream;  //For use with fprintf() and related functions
+
+  /* NOTE: To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); */
+
+// Function descriptions are available in serial.c
+
+//serial (serial0) is the ttl serial (wireless)
+void serial_init(unsigned int ubrr);
+int serial_putchar(char c);
+int serial_getchar(void);
+int serial_getchar_nb(void);
+
+//serial1 is the rs-232 port (db9 connector) (except on robot0 where both are serial0)
+void serial1_init( unsigned int ubrr);
+int serial1_putchar(char c);
+int serial1_getchar(void);
+int serial1_getchar_nb(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/buzzer.h	(revision 62)
@@ -0,0 +1,32 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/localization.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/localization.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/localization.c	(revision 62)
@@ -0,0 +1,84 @@
+#include "localization.h"
+
+#include "firefly+_lib.h"
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/Makefile	(revision 62)
@@ -0,0 +1,519 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = firefly+_lib
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 9600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/localization.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/localization.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/localization.h	(revision 62)
@@ -0,0 +1,24 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+typedef struct{
+  //actual row of sensor values -- need to be able to have up to
+  //max_robots
+  unsigned char row[MAX_ROBOTS];
+  //actual length of the row
+  unsigned char len;
+  //'index' value of the row -- which robot it's for
+  unsigned char row_num;
+  
+} SensorRow;
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, 
+			     int NUM_BOTS);
+ 
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/servo.c	(revision 62)
@@ -0,0 +1,132 @@
+/*  
+	servo.c - Contains functions and interrupts necessary to activate servos
+	author:  Tom Lauwers
+	
+	3/1/06 Iain
+		Man, I don't know what a servo is. 
+*/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <servo.h>
+#include <dio.h>
+#include <lights.h>
+#include <lcd.h>
+//1677.7216 c/ms
+//i dunno must be 2^k
+//250
+//9C40 ~ 20ms
+//#A000 ~ 20.48 but prolly wont work
+//div by 256: 6.55078125 c/ms 80 ~ 19.5ms
+#define SERVO_PERIOD 0x80
+//needs be 1ms
+//is 1.22ms
+#define SERVO_CONSTANT 0x8
+
+/* dirty dirty
+unsigned int servo_vals[4] = {0,0,0,0}; // Stores the set servo values
+int current_servo = 0;  // Stores which servo is current in the interrupt routine
+*/
+unsigned int servo_vals[8] = {0,0,0,0,0,0,0,0}; // Stores the set servo values
+int phase_time=0;
+int phase_base=0;
+int servos_on = 0;      // Stores which servos are enabled
+int servos_enabled=0; //which are high
+int servo_flag = 0;     // Stores whether or not servos are enabled
+
+/* Timer 1 output compare B interrupt.  Does the following:
+	Checks to see if the current servo is 4, in which case just need
+	to set low servo 3's signal and return.
+	Else, check to see if the current servo is enabled, and set it's signal high
+	Then, set the previous servo's signal low
+	Now, set the next output compare to occur for some time from now 
+	specified by the current servo's value
+*/
+SIGNAL (SIG_OUTPUT_COMPARE3B)
+{
+	lcd_putchar('i');
+	if(servo_flag == 0)
+		return;
+	
+	int i;
+	if(phase_time == 0){
+		lcd_putchar('p');
+		for(i=0;i<8;i++){
+			if(servos_on & _BV(i))
+				digital_output((_PORT_E << 3) +i,1);
+		}
+		servos_enabled = servos_on;
+		phase_base = OCR3B;
+	}
+
+	unsigned int min=~0;
+	for(i=0;i<8;i++){
+		if(_BV(i) & servos_enabled){
+			if(SERVO_CONSTANT*servo_vals[i] <= phase_time){
+				digital_output((_PORT_E << 3) + i,0);
+				servos_enabled &= ~_BV(i);
+			}
+			else if(SERVO_CONSTANT*servo_vals[i] < min) {
+				min = servo_vals[i];
+			}
+		}
+	}
+	if(!servos_enabled){
+		OCR3B = phase_base + SERVO_PERIOD;
+		phase_time = 0;
+	}
+	else {
+		OCR3B = phase_base + min;
+		phase_time = min;
+	}
+	
+}	
+
+void init_servo()
+{
+	//1010 1001
+	TCCR3A = 0; 
+	//0000 0100
+	TCCR3B = 0x4;  //prescaler to 256
+	TCCR3C=0;
+	lcd_init();
+	ETIMSK |= 0x08;
+	servo_flag = 1;
+	OCR3B = 0x0;
+	lcd_putchar('i');
+}
+
+// Enable a servo specified by config
+void enable_servo(int config)
+{
+	servos_on |= _BV(config);
+}
+
+// Disable a servo specified by config
+void disable_servo(int config)
+{
+	servos_on &= (0xFF-_BV(config));
+}
+
+// Disables the timer1 interrupt, disabling the servos
+void disable_servos()
+{
+	// Disables interrupts
+	ETIMSK &= ~0x08;
+	servo_flag=0;
+
+}
+
+// Enables the timer1 interrupt, enabling the servos
+void enable_servos()
+{
+	// Enable interrupts on output compare B
+	ETIMSK |= 0x08;
+	servo_flag=1;
+}
+// Set a servo to a value.  Automatically enables the servo.
+void set_servo(int servo, unsigned int value)
+{
+	enable_servo(servo);
+	servo_vals[servo] = value;
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/time.c	(revision 62)
@@ -0,0 +1,100 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <help.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/*
+void rtc_init(void)
+call this function to start the real time timer
+use rtc() to get the time value and rtc_resest() to reset
+
+requires global interrupts to be enabled for proper use
+(I bit of SREG register should be set)
+
+uses TIMER0 on asynchronous mode
+*/
+
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void)){
+	int mask = _BV(TCN0UB) + _BV(OCR0UB) + _BV(TCR0UB);
+	char tmp;
+	
+	TIMSK &= ~(_BV(OCIE0) + _BV(TOIE0)); //1. disable interrupts
+	ASSR |= _BV(AS0); //2. selecting clock source (external)
+	
+	//3. writing new values to TCCR, TCNT, OCR
+	TCNT0 = 0;
+	OCR0 = ocr_val;
+	TCCR0 = (0x01 << 3) + (prescale_opt & 0x07); //setting CTC mode, prescaler is lowest 3 bits
+	
+	//4. waiting for busy bits to clear
+	tmp = ASSR;
+	while( tmp & mask ){
+		tmp = ASSR;
+	}
+	
+	TIFR &= ~(_BV(OCF0) + _BV(TOV0)); //5. clearing the interrupt flags
+	TIMSK |= _BV(OCIE0); // + _BV(TOIE0); //6. enabling interrupts
+	
+	_rtc_f = rtc_func;
+}
+
+int rtc(void){
+	return _rtc_val;
+}
+
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+SIGNAL (SIG_OUTPUT_COMPARE0){
+	_rtc_val++;
+	
+	if(_rtc_f != 0)
+		_rtc_f();
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/analog.c	(revision 62)
@@ -0,0 +1,125 @@
+/*
+ * analog.c - Contains the function implementations for manipulating the ADC
+ * on the firefly+ board
+ * 
+ * author:  CMU Robotics Club, Colony Project
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ */
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void analog_init(void)
+{
+	/*
+   * ADC Status Register A
+   * Bit 7 - ADEN is set (enables analog)
+   * Bit 6 - Start conversion bit is set (must be done once for free-running 
+   * mode)
+   * Bit 5 - Enable Auto Trigger (for free running mode)
+   * Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+   * Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 
+   * 16,000,000/128
+   */
+	ADCSRA |= 0xEF;
+
+	/*
+   * ADMUX register
+   * Bit 7,6 - Set voltage reference to AVcc (0b01)
+   * Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+   * Bit 4 - X
+   * Bit 3:0 - Sets the current channel
+   */
+	ADMUX = 0x67;
+	
+#ifdef FFPP
+	DDRA |= 0x70;
+	set_adc_mux(0x07);
+#endif
+}	
+
+#ifdef FFPP
+void set_adc_mux(int which)
+{
+  // A4..A6 set mux to port 0-7 via binary selection
+  
+  // mask so only proper bits are possible.
+  which &= 0x07;
+  PORTA &= 0x8F;
+  PORTA |= which << 4;
+}
+
+void enable_analog(int analog_setting)	//why do we need this?
+{
+	// Digital input disable - don't disable any of them
+	// Set any of the lower six bits to a 1 to disable that bit
+	DDRF = 0x00; //ALL_ANALOG;
+}
+#endif
+
+unsigned int analog8(int which)
+{
+#ifdef FFPP
+	if(which < EXT_MUX){
+      ADMUX = 0x60 + which;
+  }else if(which == EXT_MUX){		//Why dont we combine this and the above?
+    return 0;
+  }else{
+    ADMUX = 0x60 + EXT_MUX;
+    set_adc_mux(which - 8);
+    _delay_ms(10);
+  }
+#else
+	ADMUX = 0x60 + which;
+#endif
+
+	_delay_ms(1); 
+  // need at least 130 us between conversions (for fwr robot, how much for 
+  //new avr?)
+	return ADCH;
+}
+
+unsigned int analog10(int which)
+{
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+
+#ifdef FFPP
+
+	if(which < EXT_MUX){
+    ADMUX = 0x60 + which;
+  }else if(which == EXT_MUX){		//Why dont we combine this and the above?
+    return 0;
+  }else{
+    ADMUX = 0x60 + EXT_MUX;
+    set_adc_mux(which - 8);
+    _delay_ms(10);
+  }
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void)
+{
+	return analog8(WHEEL_PORT);
+}
+
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+	return analog8(BATT_PORT) * 500 >>7;
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/firefly+_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/firefly+_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/firefly+_lib.c	(revision 62)
@@ -0,0 +1,178 @@
+#include <firefly+_lib.h>
+#include <rangefinder.h>
+
+void adc_gain_test(void);
+void button_test ( void);
+void motor_test (void);
+void serial_test( void );
+void lcd_test(void);
+void orb_test( void );
+void batt_test(void);
+void pullup_test(void);
+void ranger_test(void);
+
+void adc_gain_test(void)
+{
+  analog_init();
+  lcd_init();
+  
+  while(1)
+  {
+    
+    lcd_putint(ADCH);
+    delay_ms(100);
+    lcd_clear_screen();
+  }
+}
+
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+void button_test ( void) 
+{
+
+	lcd_init();
+	
+	while(1) {
+	
+	
+		if(button1_read())
+			lcd_putchar('1');
+		if(button2_read())
+			lcd_putchar('2');
+			
+		delay_ms(100);
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	motor1_set(1, 255);
+	motor2_set(1, 255);
+	
+	delay_ms(10000);
+	
+	motors_off();
+	led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+void orb_test( void ) {
+	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	
+	
+	while(1) {
+		orb_set_color(orbs[orb_select]);
+		delay_ms(1000);
+		orb_select++;
+		if(orb_select == 14)
+			orb_select = 0;
+	}
+
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i;
+	lcd_init();
+	
+	for(i = 32; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+	}
+	
+	
+	return;
+	
+}
+
+/*
+prints all printable characters to the serial
+
+baud rate is 115200
+*/
+void serial_test( void ) {
+	int i;
+	
+	serial1_init(BAUD115200);
+	//fdevopen(&serial1_putchar, &serial1_getchar);
+	for(i = 32; i <= 126; i++) {
+		printf("%d",i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+
+	analog_init();
+
+	while(1){
+		lcd_clear_screen();
+		lcd_putint(battery());
+		delay_ms(1000);
+	}
+}
+
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lcd.c	(revision 62)
@@ -0,0 +1,264 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+#include "oled.h"
+
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+	{ 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+#ifdef FFPP
+
+	OLED_init();
+
+#else
+
+	LCDDDR |= (D_C | SCE | SDI | SCK);
+	LCDRESETDDR |= RST;
+
+	LCDPORT &= ~(D_C | SCE | SDI | SCK);
+	
+  SPCR |= 0x50; //=0b01010000  no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+#endif
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+#ifdef FFPP
+	drawclear();
+#else
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+#endif
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+#ifndef FFPP
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+#endif
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+#ifndef FFPP
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+#endif
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+#ifndef FFPP
+  LCDPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDPORT |= D_C;
+#endif
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/servo.h	(revision 62)
@@ -0,0 +1,16 @@
+/*  
+	servo.h - Contains function prototypes for servo activation
+	author:  Tom Lauwers
+*/
+#ifndef _SERVO_H_
+#define _SERVO_H_
+
+// Information on functions available in servo.c
+void init_servo(void);
+void enable_servos(void);
+void enable_servo(int config);
+void set_servo(int servo, unsigned int value);
+void disable_servos(void);
+void disable_servo(int );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/time.h	(revision 62)
@@ -0,0 +1,58 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#define TIMER_OFF         0x00
+#define PRESCALE_NONE     0x01
+#define PRESCALE_DIV_8    0x02
+#define PRESCALE_DIV_32   0x03
+#define PRESCALE_DIV_64   0x04
+#define PRESCALE_DIV_128  0x05
+#define PRESCALE_DIV_256  0x06
+#define PRESCALE_DIV_1024 0x07
+
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void));
+
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/move.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/move.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/move.c	(revision 62)
@@ -0,0 +1,86 @@
+//Created 4/30/06 by James Kong
+
+#include "firefly+_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/analog.h	(revision 62)
@@ -0,0 +1,95 @@
+/*
+ * analog.h - Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7
+ * AN6 and AN7 are used for the wheel and battery
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog
+	
+ * author: CMU Robotics Club, Colony Project
+ * code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+
+#ifdef FFPP
+#define AN8 0x08
+#define AN9 0x09
+#define ANA 0x0A
+#define ANB 0x0B
+#define ANC 0x0C
+#define AND 0x0D
+#define ANE 0x0E
+#define ANF 0x0F
+
+#define EXT_MUX   0x07
+#define IR_READ   0x08
+#define IR1_READ  0x08
+#define IR2_READ  0x09
+#define IR3_READ  10
+#define IR4_READ  11
+#define IR5_READ  12
+#define ADC_BATT  13
+#define ADC_WHEEL 14
+#define ADC_3V3   15
+
+#define WHEEL_PORT ANE
+#define BATT_PORT AND
+
+#else
+
+#define WHEEL_PORT AN6
+#define BATT_PORT  AN7
+
+#endif
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+#ifdef FFPP
+ void enable_analog(int analog_setting);
+void set_adc_mux(int which);
+#endif
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/firefly+_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/firefly+_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/firefly+_lib.h	(revision 62)
@@ -0,0 +1,34 @@
+/*
+
+firefly+_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+#ifndef _FIREFLY_LIB_H_
+#define _FIREFLY_LIB_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+//#include <avr/signal.h>
+#include <avr/interrupt.h>
+//#include <avr/delay.h>
+#include <util/delay.h>
+
+//#include <adc_gain.h>
+#include <dio.h>
+
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+#include <analog.h>
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lcd.h	(revision 62)
@@ -0,0 +1,84 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+#ifndef FFPP
+
+//////lcd defines
+#define RST 0x04  // pe2 (GPIO)
+#define SCE 0x01  // pb0 (~SS)
+#define D_C 0x10  // pb4 (GPIO?)
+#define SDI 0x04  // pb2 (MOSI)
+#define SCK 0x02  // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTE
+#define LCDRESETDDR DDRE
+
+#else
+	
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow);
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+inline void drawclear(void);
+
+void drawscroll(char hoff, char srow, char rows, char speed);
+inline void drawscrollstart(void);
+inline void drawscrollstop(void);
+
+void drawIR(void);
+
+void crazycircle (void);
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+
+#endif
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/pindefs_ff.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/pindefs_ff.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/pindefs_ff.h	(revision 62)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonet_defs.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonet_defs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/colonet_defs.h	(revision 62)
@@ -0,0 +1,160 @@
+/* Eugene Marinelli, Fan
+ * 10/27/06
+ *
+ * Colonet Definitions - common definitions and structs used in all colonet 
+ * applications
+ */
+
+#ifndef COLONET_DEFS_H_
+#define COLONET_DEFS_H_
+
+//Message types
+#define COLONET_COMMAND 0x0D
+#define COLONET_REQUEST 0x0E
+
+//Packet properties
+#define PACKET_DATA_LEN 7
+#define PACKET_SIZE 16
+
+//Packet error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGESTATION 251  //Charging station response to ping
+#define WL_ERR_DEAD_LOC 5
+#define WL_ERROR_DEST 255
+
+typedef struct {
+  unsigned char prefix[2];
+  unsigned char token_src;
+  unsigned char token_dest;
+  unsigned char msg_dest;
+  unsigned char msg_type;
+  unsigned char msg_code;
+  unsigned char data[PACKET_DATA_LEN];
+  unsigned char num_robots;
+  unsigned char checksum;
+} ColonetPacket;
+
+#define SERIAL_PORT "/dev/ttyS0"
+#define USB_PORT "/dev/ttyUSB0"
+
+#define GLOBAL_DEST 200
+#define MAX_NUM_ROBOTS 7
+
+#define USER_DEFINED_MSG_ID_START 0xF0
+#define USER_DEFINED_MSG_ID_END 0xFF
+#define USER_DEFINED_MSG_TOTAL 0x0F
+
+/* Low level robot commands */
+//BUZZER
+#define BUZZER_INIT 0x00
+#define BUZZER_SET_VAL 0x01
+#define BUZZER_SET_FREQ 0x02
+#define BUZZER_CHIRP 0x03
+#define BUZZER_OFF 0x04
+
+//LCD
+#define LCD_INIT 0x05
+#define LCD_CLEAR_SCREEN 0x06
+#define LCD_PUTBYTE 0x07
+#define LCD_PUTCHAR 0x08
+#define LCD_PUTSTR 0x09
+#define LCD_GOTOXY 0x0A
+#define LCD_PUTINT 0x0B
+
+//ORB
+#define ORB_INIT 0x0C
+#define ORB_SET 0x0D
+#define ORB_SET_COLOR 0x0E
+#define ORB_DISABLE 0x0F
+#define ORB_ENABLE 0x10
+#define ORB_SET_DIO 0x11
+#define LED_INIT 0x12
+#define LED_USER 0x13
+#define ORB_SET_NUM_NS 0x14
+#define ORB_SET_NUM 0x15
+#define ORB_SEND 0x16
+
+//MOTORS
+#define MOTORS_INIT 0x17
+#define MOTOR1_SET 0x18
+#define MOTOR2_SET 0x19
+#define MOTORS_OFF 0x1A
+#define MOVE 0x1B
+
+//OLED
+#define DRAWCIRCLE 0x1C
+#define DRAWRECT 0x1D
+#define DRAWLINE 0x1E
+#define DRAWCOPY 0x1F
+#define DRAWFILL 0x20
+#define DRAWCLEAR 0x21
+#define DRAWSCROLL 0x22
+#define OLED_INIT 0x23
+
+//SHARP
+#define READ_DISTANCE 0x24
+#define LINEARIZE_DISTANCE 0x25
+#define LOG_DISTANCE 0x26
+#define ENABLE_IR 0x27
+#define DISABLE_IR 0x28
+
+//SERIAL
+#define SERIAL_INIT 0x29
+#define SERIAL_PUTCHAR 0x2A
+#define SERIAL_GETCHAR 0x2B
+#define SERIAL_GETCHAR_NB 0x2C
+#define SERIAL1_INIT 0x2D
+#define SERIAL1_PUTCHAR 0x2E
+#define SERIAL1_GETCHAR 0x2F
+#define SERIAL1_GETCHAR_NB 0x30
+
+//DELAY_MS
+#define DELAY_MS 0x31
+
+//ANALOG
+#define ANALOG_INIT 0x32
+#define SET_ADC_MUX 0x33
+#define ENABLE_ANALOG 0x34
+#define ANALOG8 0x35
+#define ANALOG10 0x36
+#define WHEEL 0x37
+#define BATTERY 0x38
+
+//BOM
+#define GETMAXBOM 0x39
+#define BOM_ON 0x3A
+#define BOM_OFF 0x3B
+#define OUTPUT_HIGH 0x3C
+#define OUTPUT_LOW 0x3D
+
+//DIO
+#define DIGITAL_INPUT 0x3E
+#define DIGITAL_OUTPUT 0x3F
+#define BUTTON1_READ 0x41
+#define BUTTON1_WAIT 0x42
+#define BUTTON1_WAIT_LED 0x43
+#define BUTTON2_READ 0x44
+#define BUTTON2_WAIT 0x45
+#define BUTTON2_WAIT_LED 0x46
+
+//WL 
+#define WL_INIT 0x47
+#define PARSE_BUFFER 0x48
+#define WL_SEND 0x49
+#define WL_CREATE_PACKET 0x4A
+#define WL_DEATH_HANDLER 0x4B
+#define WL_ERROR_HANDLER 0x4C
+#define WL_TIMEOUT_HANDLER 0x4D
+#define DISPLAY_DEBUG 0x4E
+#define BOM_TEST 0x4F
+
+//BUMPER
+#define DETECT_BUMP 0x50
+
+//Other
+#define PRINTF 0x51
+
+/* End low-level robot commands */
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/move.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/move.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/move.h	(revision 62)
@@ -0,0 +1,38 @@
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/dio.c	(revision 62)
@@ -0,0 +1,314 @@
+/* 
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+the first 3 (abc in this example) are used to select the bank
+A = 001
+B = 010
+C = 011
+D = 100
+E = 101
+F = 110
+G = 111
+		
+the bank can be found by doing portpin >> 3
+		
+the next 3 (def in this example) are used to select the pin number
+the 3 bits are just the binary representation of the pin number
+0 = 000
+1 = 001
+2 = 010
+3 = 011
+4 = 100
+5 = 101
+6 = 110
+7 = 111
+		
+the pin number can be found by doing portping & 0b111
+*/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/*
+ * digital_input
+ * Reads the value on the selected portpin, returns it as 1 or 0
+ * see general description (above) for definition of portpin
+ */
+int digital_input(int portpin){
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3){
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4){
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/*
+  digital_pull_up
+  Enables pullup on a pin.  if pin is output, it will make it output 1.
+*/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/*
+  digital_output
+
+  sets portpin to the value
+  see general description above for explanation of portpin
+  val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  }else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+  return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+  //return (BTN & (_BV(BTN1)) >> BTN1);
+  return (PIN_BTN >> BTN1) & 1;
+}
+
+/* similar to button1_read, but hold program until the button is actually 
+ * pressed
+*/
+void button1_wait( void )
+{
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/*
+  same as button1_wait
+  However, blink the led while waiting
+
+  IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+void button1_wait_led( void )
+{
+  int i = 0;
+  
+  while(!button1_read()){
+    if(i < 8){
+      led_user(1);
+    }else{
+      led_user(0);
+    }
+    //increment i, but restart when i = 15;
+    i = (i+1) & 0xF;
+    delay_ms(15);
+  }
+  
+  led_user(0);
+}
+
+//click waits until the button is realesed to return true
+//return false immediatley
+int button1_click()
+{
+  if(button1_read()){
+    while(button1_read());
+    return 1;
+  }else{
+    return 0;
+  }
+}
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+  return (PIN_BTN >> BTN2) & 1;
+}
+
+void button2_wait( void )
+{
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+void button2_wait_led(void)
+{
+  int i = 0;
+  
+  while(!button2_read()){
+    if(i < 8){
+			led_user(1);
+    }else{
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+int button2_click()
+{
+	if(button2_read()){
+    while(button2_read());
+    return 1;
+  }else{
+		return 0;
+  }
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/bom.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/bom.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/bom.c	(revision 62)
@@ -0,0 +1,66 @@
+#include "bom.h"
+
+
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+int getMaxBom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+	
+	return max_bom_temp;
+}
+
+void bom_on(void)
+{
+  output_high(MONKL);
+
+}
+
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/dio.h	(revision 62)
@@ -0,0 +1,175 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+these are ALL the pins
+don't use unless you know what you're doing
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32
+#define _PIN_D1 33
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42
+#define _PIN_E3 43
+#define _PIN_E4 44
+#define _PIN_E5 45
+#define _PIN_E6 46
+#define _PIN_E7 47
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#ifndef FFPP
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+#endif
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#ifndef FFPP
+#define PIN_LED1 58
+#endif
+
+/* Buttons */
+#define PIN_BTN PING
+#define BTN2 PING1
+#define BTN1 PING0
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+int button1_read( void );
+int button1_click( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+int button2_click( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/bom.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/bom.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/bom.h	(revision 62)
@@ -0,0 +1,44 @@
+
+#ifndef _BOM_H
+#define _BOM_H
+
+
+#include "firefly+_lib.h"
+
+/*
+
+
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+
+*/
+
+
+#define MONKI AN0         //analog
+//------------------------//
+#define MONKL PIN_C2      //green
+#define MONK1 PIN_C3      //blue
+#define MONK0 PIN_C4      //white
+//------------------------//
+#define MONK3 PIN_C5      //blue
+#define MONK2 PIN_C6      //white 
+
+
+
+int getMaxBom( void );
+
+void bom_on(void);
+void bom_off(void);
+
+void output_high(int which);
+void output_low(int which);
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/oled.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/oled.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/oled.c	(revision 62)
@@ -0,0 +1,394 @@
+#ifdef FFPP
+#include "firefly+_lib.h"
+/******************************************************************************/
+/*  OLED example.   8 bit mode                                           */
+/*      Spark Fun Electronics   5/3/06   OSO                                 */
+/******************************************************************************/
+/*                                                                            */
+/*    STOLEN and hacked to work with SPI, AVR     		                        */
+/******************************************************************************/
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor) {
+	write_c(0x86);
+	write_d(col);
+	write_d(row);
+	write_d(radius);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor) {
+	write_c(0x84);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor) {
+	write_c(0x83);
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+}
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) {
+	write_c(0x8A);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(ncol);
+	write_d(nrow);
+}
+
+void drawfill(char fill) {
+	write_c(0x92);    // fill enable command
+	write_d(0x01&fill); 
+}
+
+void drawclearwindow(char scol, char srow, char ecol, char erow) {
+	write_c(0x8e);    // clear window command
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+}
+
+inline void drawclear(void) {
+	drawclearwindow(0,0,130,130);
+}
+
+void drawscroll(char hoff, char srow, char rows, char speed) {
+	write_c(0x96);
+	write_d(hoff);
+	write_d(srow);
+	write_d((srow+rows>132)?132:rows);
+	write_d(0x00);
+	write_d(speed&0x3);
+	
+}
+
+inline void drawscrollstart(void) {
+	write_c(0x9F);
+}
+
+inline void drawscrollstop(void) {
+	write_c(0x9E);
+}
+
+#define ROBOSIZE 4
+
+#include "rangefinder.h"
+
+void drawIR(void) {
+/*	char d;
+	enable_IR();
+	drawclear();
+	delay_ms(500);
+	drawfill(1);
+	
+	delay_ms(10);
+
+	drawcircle(64,64-ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawcircle(64,64+ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawrect(64-ROBOSIZE,64-ROBOSIZE,64+ROBOSIZE,64+ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+
+	while(1){
+		
+		d=(convert_IR_distance(read_IR_val(1))-100)>>4;
+		if(d>63-ROBOSIZE*2){
+			d=0;//63-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(63, 0, 65, 63-ROBOSIZE*2);
+		drawline(64,63-ROBOSIZE*2-d,64,63-ROBOSIZE*2,C_RED);
+		delay_ms(5);
+		
+		
+		
+		
+
+		d=(convert_IR_distance(read_IR_val(0))-100)/11;
+		if(d>62-ROBOSIZE){
+			d=0;//64-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 0, 63-ROBOSIZE, 63-ROBOSIZE);
+		delay_ms(5);	
+		drawline(63-ROBOSIZE-d,63-ROBOSIZE-d,63-ROBOSIZE,63-ROBOSIZE,C_RED);
+		//delay_ms(25);	
+		delay_ms(5);
+		
+		
+
+//		d=(convert_IR_distance(read_IR_val(2))-100)/11;
+//		if(d>64){
+//			d=0;//64-ROBOSIZE*2;
+//		}
+//		delay_ms(100);	
+	
+//		drawclearwindow(65+ROBOSIZE,0, 128,128);
+//		delay_ms(5);	
+//		drawline(128-(65+ROBOSIZE+d),128-(65+ROBOSIZE-d),65+ROBOSIZE,(65-ROBOSIZE),C_RED);
+//		drawline(64,64-d,64+d,64,C_RED);
+		//delay_ms(25);	
+//		delay_ms(5);
+		
+		
+		
+		
+		
+		
+		d=(convert_IR_distance(read_IR_val(4))-100)>>4;
+		if(d>64-ROBOSIZE){
+			d=0;//64-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 63+ROBOSIZE, 63-ROBOSIZE, 65+ROBOSIZE);
+		drawline(64-ROBOSIZE-d,64+ROBOSIZE,63-ROBOSIZE,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+
+		d=(convert_IR_distance(read_IR_val(3))-100)>>4;
+		if(d>128-65-ROBOSIZE){
+			d=0;//128-65-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(65+ROBOSIZE, 63+ROBOSIZE, 127, 65+ROBOSIZE);
+		drawline(65+ROBOSIZE,64+ROBOSIZE,65+ROBOSIZE+d,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+		
+	}
+*/
+}
+
+void crazycircle (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+/*      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+	  */
+	  drawcircle(rand() % 130,rand() % 130,rand() %64, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void crazyrect (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+
+	  drawrect(rand() % 130,rand() % 130,rand() % 130,rand() % 130, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  drawclear();
+
+ delay_ms(100);
+  
+  drawfill(1);
+  
+  delay_ms(10);
+
+//  crazycircle();
+  
+//  delay_ms(500);
+  
+ // drawscroll(1,0,50,1);
+  //drawscrollstart();
+  //delay_ms(1000);
+  //drawscrollstop();
+  //drawcopy(0,0,100,100,50,50);
+ // delay_ms(100);
+//  drawfill(0);
+  //drawcircle(64,64,16,C_RED,C_GREEN);
+//  drawcircle(64,64,15,C_RED,C_GREEN);
+//  drawcircle(64,64,14,C_RED,C_GREEN);
+  
+  drawIR();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/rangefinder.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/rangefinder.c	(revision 62)
@@ -0,0 +1,183 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "firefly+_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+int read_distance (int range_id) {  
+#ifndef FFPP
+	int bitcount;
+	int current = 0;
+	digital_output(RANGE_CTRL, 0);						//set Vin Low
+	while(digital_input(range_id) == 0);				//waits until Vout reads high
+	digital_output(RANGE_CTRL, 1);						//first Vin clock high transition
+	
+	for(bitcount = 8; bitcount != 0; bitcount--){
+		digital_output(RANGE_CTRL, 0);					//Vin clock low transition
+		//clock delay (unnecessary)
+		current = current << 1;							//shifts current 8-bit value left
+		current |= digital_input(range_id);				//LSB set to Vout value
+		digital_output(RANGE_CTRL, 1);					//Vin clock high transition
+		//clock delay (unnecessary)
+	}													//repeats until all 8 bits are stored
+	return current;
+#else
+	enable_IR();
+	_delay_ms(5);										///////Figure out what this should be!!!!!!  Maybe if not enabled already?
+	return read_IR_val(range_id);
+#endif
+}
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+
+int linearize_distance (int reading) {
+#ifndef FFPP
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+#else
+	return convert_IR_distance(reading);
+#endif
+}
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+int log_distance(int distance) {
+#ifndef FFPP
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+#endif
+	return 0;
+}
+
+
+#ifdef FFPP
+
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+void enable_IR()
+{
+  // active low, so set enable to low to turn on IR
+  PORTC &= ~(_BV(IR_ENABLE));
+  DDRC |= _BV(IR_ENABLE);
+}
+
+void disable_IR()
+{
+  // active low, so set line high and turn to input for good measure (line has pull-up)
+  PORTC |= _BV(IR_ENABLE);
+  DDRC &= ~(_BV(IR_ENABLE));
+}
+
+int read_IR_val(int which)
+{
+  return analog8(IR_READ + which);
+}
+
+int convert_IR_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+int get_IR_distance(int which)
+{
+  return convert_IR_distance(read_IR_val(which));
+}
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/oled.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/oled.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/oled.h	(revision 62)
@@ -0,0 +1,70 @@
+#ifndef _OLED_H_
+#define _OLED_H_
+
+#ifdef FFPP
+
+#define C_BLUE 0x001f
+#define C_GREEN 0x07e0
+#define C_RED 0xf800 
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor, 
+              int fcolor);
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, 
+              char nrow);
+void drawfill(char fill);
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+inline void drawclear(void);
+void drawscroll(char hoff, char srow, char rows, char speed);
+inline void drawscrollstart(void);
+inline void drawscrollstop(void);
+void drawIR(void);
+
+void crazycircle (void);
+void crazyrect (void);
+void OLEDtest (void);
+void OLED_init(void);
+void Reset_SSD1339(void);
+
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat);
+
+void RES(char stat);
+void CS(char stat);
+
+// send to the LCD
+void LCD_out(unsigned char cmd);
+
+#endif
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/rangefinder.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/rangefinder.h	(revision 62)
@@ -0,0 +1,70 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+//old range_in0
+//#define RANGE_IN0 PIN_AN5
+
+/*  These do not exist yet.
+#define RANGE_IN1 PIN_??
+#define RANGE_IN2 PIN_
+#define RANGE_IN3 PIN_
+#define RANGE_IN4 PIN_
+#define RANGE_IN5 PIN_
+#define RANGE_IN6 PIN_
+#define RANGE_IN7 PIN_
+*/
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+#ifdef FFPP
+// IR range finders are indexed 0-4.
+// IR1 is front left, IR2 is front center, IR3 is front right, IR4 is rear right, IR5 is rear left.
+
+// active low
+#define IR_ENABLE PC7
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+
+void enable_IR(void);
+void disable_IR(void);
+int read_IR_val(int);
+int convert_IR_distance(int);
+int get_IR_distance(int);
+#endif
+
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/lights.c	(revision 62)
@@ -0,0 +1,352 @@
+/*
+lights.c
+Controls led_user (small green LED) and the ORB (big light)
+
+author: CMU Robotics Club, Colony Project
+*/
+
+#include "lights.h"
+#include "firefly+_lib.h"
+
+// the below comment may not be correct
+// Initializes timer2 to count every 0.5 us, overflowing every 16.32 ms (because we set the counter to start at 0x8000)
+void orb_init() 
+{
+#ifndef FFPP
+	//enable the data direction register on the 3 orb LEDs
+	DDRE |= _BV(REDLED) | _BV(GREENLED) | _BV(BLUELED);
+	
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+	TCCR3B = 0x0C;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+
+// clear Output Compare Registers
+	OCR3AH=0x00;
+	OCR3AL=0x00;
+	OCR3BH=0x00;
+	OCR3BL=0x00;
+	OCR3CH=0x00;
+	OCR3CL=0x00;
+
+#else
+	tlc5940init();	
+#endif
+}
+
+// Sets the red, green and blue elements of the LED with 8-bit resolution
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+#ifdef FFPP
+	orbs[28]=blue_led<<4;
+	orbs[29]=green_led<<4;
+	orbs[30]=red_led<<4;
+	tlc_send();
+#else
+	OCR3AL = red_led;
+	OCR3BL = green_led;
+	OCR3CL = blue_led;
+#endif
+}
+
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+void orb_disable()
+{
+#ifndef FFPP
+	TCCR3A = 0x01;  // COM## disconnected, WGM 1:0 set to 1
+#endif
+}
+
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+#ifndef FFPP
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+#else
+	tlc5940init();
+#endif
+}
+
+
+/*
+This function turns each Orb element on or off
+Useful for using the Orb for debugging purposes without
+the overhead of the software PWM routine used for color fading.
+*/
+void orb_set_dio(int red, int green, int blue) 
+{
+#ifdef FFPP
+	orb_set(red*255, green*255, blue*255);
+#else
+	if(red == 0)
+		PORTE &= (0xFF - _BV(REDLED));
+	else
+		PORTE |= _BV(REDLED);
+	
+	
+	if(green == 0)
+		PORTE &= (0xFF - _BV(GREENLED));
+	else
+		PORTE |= _BV(GREENLED);
+		
+	
+	if(blue == 0)
+		PORTE &= (0xFF - _BV(BLUELED));
+	else
+		PORTE |= _BV(BLUELED);
+#endif
+}
+
+
+/////////////////////////////////////////
+///////////    user LED   ///////////////
+/////////////////////////////////////////
+void led_init( void )
+{
+#ifdef FFPP
+	tlc5940init();
+#else
+	DDRG |= _BV(USERLED);
+#endif
+}
+
+void led_user(int value) 
+{
+#ifdef FFPP
+	orbs[USERLED]=value*4095;
+	tlc_send();
+#else
+	if(value == 0) 
+		PORTG &= (0xFF - _BV(USERLED)); 
+	else
+		PORTG |= _BV(USERLED);
+#endif
+}
+
+#ifdef FFPP
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, 
+                    unsigned int green_led, unsigned int blue_led)
+{	
+	int high = (num>4);
+	orbs[3*num+high]=blue_led<<4;
+	orbs[3*num+1+high]=green_led<<4;
+	orbs[3*num+2+high]=red_led<<4;
+}
+
+void orb_set_num(unsigned char num, unsigned int red_led, 
+                 unsigned int green_led, unsigned int blue_led)
+{	
+	orb_set_num_ns(num,red_led,green_led,blue_led);
+	tlc_send();
+}
+
+void orb_send(){
+	tlc_send();
+}
+652879
+void tlc_clock1(int data)
+{
+  PORTC &= ~0x02;
+  PORTC |= (data << 1)&0x02;
+  _delay_us(1);
+  PORTC |= 0x04;
+  _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_clock2(int data)
+{
+  PORTC &= ~0x01;
+  PORTC |= (data)&0x01;
+ // _delay_us(1);
+  PORTC |= 0x04;
+ // _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_send(void)
+{
+  int i,j;
+  for(j = 15; j >= 0; j--)
+  {
+    for(i = 11; i >= 0; i--)
+    {
+      PORTC &= ~0x03;
+      PORTC |= ((orbs[j]>>i)&0x01);
+      PORTC |= ((orbs[j+16]>>i)<<1)&0x02;
+      // _delay_us(1);
+      PORTC |= 0x04;
+      // _delay_us(1);
+      PORTC &= ~0x04;
+    }
+  }
+  PORTC |= 0x08;
+  PORTC &= ~(0x08);
+}
+/*
+void tlc_send2(int value)
+{
+  int i;
+  
+  for(i = 11; i >= 0; i--)
+  {
+    tlc_clock2(0x01 & (value >> i));
+  }
+}*/
+
+void tlc_latch(void)
+{
+  PORTC |= 0x08;
+//  _delay_us(1);
+  PORTC &= ~(0x08);
+}
+
+void tlc5940init(void)
+{
+  int i;
+  
+  // set PC0...5 to outputs
+  DDRC |= 0x3F;
+  DDRE |= 0x08;
+  DDRA |= 0x80;
+  // unblank buffer
+  PORTC &= ~0x10;
+ 
+  // set DC mode so we start in known state
+  PORTC |= 0x20;
+  delay_ms(2);
+  
+  // set DC to all 1's?  needed?
+/*  for(i = 0; i < 96; ++i)
+  {
+    tlc_clock1(1);
+  }
+  tlc_latch();
+  */
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  
+  delay_ms(2);
+
+  // set GS mode
+  PORTC &= ~0x20;
+
+  // clock in 0s to do init case
+/*  for(i = 0; i < 16; ++i)
+  {
+    tlc_send1(0);
+  }  
+  tlc_latch();*/
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  // extra clock needed after DC -> GS transition
+  tlc_clock1(0);
+  tlc_clock2(0); //probably not needed
+  
+  TCCR3A |=_BV(COM3A0);
+  TCCR3B |= _BV(CS30)|_BV(WGM32); //prescaler
+  OCR3A = 1;
+  TCNT3 = 0;
+ // ETIMSK |=_BV(OCIE3A);//interrupt
+
+
+  TCCR2 = 0x05; //prescaler
+  TIMSK |= _BV(OCIE2);//interrupt
+  OCR2 = 16;
+  TCNT2 = 0;
+  sei();
+  
+}
+
+//int blankcounter = 0;
+char status = 0;
+
+ISR(TIMER2_COMP_vect){
+//	int i = 0;
+	//status=!status;
+	//if(status){
+		PORTC |= 0x10;
+//		for(i=0;i<1;i++);
+		PORTC &= ~0x10;
+//	}
+	
+	TCNT2=0;
+	//chirp(250, 150);
+}
+
+void silly_clock(void)
+{
+ /* int i;
+  
+  DDRA |= 0x80;
+  
+  PORTC |= 0x10;
+  _delay_us(1);
+  
+  for(i = 0; i < 4095; ++i)
+  {
+    PORTA |= 0x80;
+    _delay_us(1);
+    PORTA &= ~(0x80);
+	_delay_us(1);
+  }
+  */
+//  delay_ms(1);
+}
+
+void tlc5940test()
+{
+  int j, k;
+  
+  tlc5940init();
+
+	// fade up
+	for(j = 0; j < 4096; ++j)
+	{
+		  
+	  //tlc_send1(j);
+
+	  for(k = 0; k < 8; ++k)
+	  {
+      orbs[2*k]=4096-j;
+      orbs[2*k+1]=j;     
+      orbs[2*k+16]=0;
+      orbs[2*k+17]=j;
+	  }
+	  tlc_send();
+	}
+	
+	delay_ms(1000);
+	
+	// fade down
+	for(j = 0; j < 4096; ++j)
+	{
+	
+	  //tlc_send(4095 - j);
+
+	  for(k = 0; k < 32; ++k)
+	  {
+      orbs[k]=4096-j;
+    }
+	  tlc_send();
+	}
+}
+
+#endif
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/ring_buffer.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/ring_buffer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/ring_buffer.h	(revision 62)
@@ -0,0 +1,118 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs None known.
+ */
+
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+	} __VA_ARGS__
+
+#define RING_BUFFER_BIT_NEW(struct_name, size, ...)	\
+	struct struct_name {	\
+		int8_t queue[(size / 8) + 1];	\
+		uint16_t start;	\
+		uint16_t end;	\
+	} __VA_ARGS__
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+#define RING_BUFFER_BIT_CLEAR(buf) RING_BUFFER_CLEAR(buf)
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+
+#define RING_BUFFER_BIT_EMPTY(buf) RING_BUFFER_EMPTY(buf)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % sizeof((buf).queue) == (buf).start)
+
+#define RING_BUFFER_BIT_FULL(buf) RING_BUFFER_FULL(buf)
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % sizeof((buf).queue);	\
+	} while (0)
+
+#define RING_BUFFER_BIT_ADD(buf, val)	\
+	do {								\
+		if (val) {						\
+			(buf).queue[((buf).end >> 3) & 0xff] |= _BV((buf).end & 0x7);	\
+		}								\
+		else {							\
+			(buf).queue[((buf).end >> 3) & 0xff] &= ~_BV((buf).end & 0x7);	\
+		}								\
+		(buf).end = ((buf).end + 1) % (sizeof((buf).queue) << 3);			\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % sizeof((buf).queue);	\
+	} while (0)
+
+#define RING_BUFFER_BIT_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = ((buf).queue[((buf).start >> 3) & 0xff] & _BV((buf).start & 0x7)) ? 1 : 0;	\
+		(buf).start = ((buf).start + 1) % (sizeof((buf).queue) << 3);	\
+	} while (0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/help.h
===================================================================
--- branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/help.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/utilities/robot_wireless_relay/help.h	(revision 62)
@@ -0,0 +1,31 @@
+#include "serial.h"
+
+char helper(char c){
+	switch(c){
+		case 0x00: return '0';
+		case 0x01: return '1';
+		case 0x02: return '2';
+		case 0x03: return '3';
+		case 0x04: return '4';
+		case 0x05: return '5';
+		case 0x06: return '6';
+		case 0x07: return '7';
+		case 0x08: return '8';
+		case 0x09: return '9';
+		case 0x0A: return 'A';
+		case 0x0B: return 'B';
+		case 0x0C: return 'C';
+		case 0x0D: return 'D';
+		case 0x0E: return 'E';
+		case 0x0F: return 'F';
+		default: return '?';
+	}
+}
+
+void print_hex(char val){
+	char hgh = (val & 0xF0) >> 4;
+	char low = (val & 0x0F);
+	
+	serial1_putchar(helper(hgh));
+	serial1_putchar(helper(low));
+}
Index: branches/charge_board/code/projects/colonet/testing/ftdi_test/ftdi_test.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/ftdi_test/ftdi_test.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/ftdi_test/ftdi_test.c	(revision 62)
@@ -0,0 +1,72 @@
+/* ftdi test
+ * Simple program to test the ftdi drivers with the dongle
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <usb.h>
+#include <ftdi.h>
+
+int main(int argc, char **argv)
+{
+  struct ftdi_context ftdic;
+  int f,i;
+
+  ftdi_init(&ftdic);
+
+  f = ftdi_usb_open(&ftdic, 0x0403, 0x6001); 
+
+  if(f < 0 && f != -5) {
+    fprintf(stderr, "unable to open ftdi device: %d\n",f);
+    exit(-1);
+  }
+
+  printf("ftdi open succeeded: %d\n",f);
+
+  printf("enabling bitbang mode\n");
+  ftdi_enable_bitbang(&ftdic, 0xFF);
+
+  char buf[1];
+
+  sleep(3);
+
+  buf[0] = 0x0;
+  printf("turning everything on\n");
+  f = ftdi_write_data(&ftdic, buf, 1);
+  if(f < 0) {
+    fprintf(stderr,"write failed for 0x%x, error %d\n",buf[0],f);
+  }
+
+  sleep(3);
+
+  buf[0] = 0xFF;
+  printf("turning everything off\n");
+  f = ftdi_write_data(&ftdic, buf, 1);
+  if(f < 0) {
+    fprintf(stderr,"write failed for 0x%x, error %d\n",buf[0],f);
+  }
+
+  sleep(3);
+
+  for(i = 0; i < 32; i++) {
+    buf[0] =  0 | (0xFF ^ 1 << (i % 8));
+    if( i > 0 && (i % 8) == 0) {
+      printf("\n");
+    }
+    printf("%02hhx ",buf[0]);
+    fflush(stdout);
+    f = ftdi_write_data(&ftdic, buf, 1);
+    if(f < 0) {
+      fprintf(stderr,"write failed for 0x%x, error %d\n",buf[0],f);
+    }
+    sleep(1);
+  }
+
+  printf("\n");
+  
+  printf("disabling bitbang mode\n");
+  ftdi_disable_bitbang(&ftdic);
+
+  ftdi_usb_close(&ftdic);
+  ftdi_deinit(&ftdic);
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonybfs.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonybfs.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonybfs.c	(revision 62)
@@ -0,0 +1,158 @@
+/*
+Colony BFS
+
+Felix Duvallet
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include <firefly+_lib.h>
+#include <ring_buffer.h>
+
+#include "colonybfs.h"
+
+
+
+#define NO_VAL 0
+
+
+RING_BUFFER_NEW(Queue, MAX_ROBOTS, char, q);
+
+/*
+colony_bfs_find_leader -- given an adjacency matrix, with a start and end
+    robots, this will tell you which robot to follow next.  If no path exists,
+    it will return -1 (which may or may not go to 255 on the unsigned side
+    of things -- be wary).
+
+    It does find the entire path, perhaps someday I will make two function,
+    where find_leader calls bfs(..) and only uses the first element.
+    
+    I ported this code from a MATLAB test file (also in the libs_general folder),
+    and this has been tested on September 15, 2006 by Felix
+
+    Todo: change NO_VAL to 255 and reflect those changes in the localization code
+    
+Author: Felix Duvallet
+        CMU Robotics Club, Colony Project
+
+*/
+char colony_bfs_find_leader ( unsigned char matrix[MAX_ROBOTS][MAX_ROBOTS], 
+                                unsigned char start, unsigned char end ) {
+
+
+/*
+//pseudocode for BFS
+
+procedure bfs(v)
+    q := make_queue()
+    enqueue(q,v)
+    mark v as visited
+    while q is not empty
+        v = dequeue(q)
+        process v
+        for all unvisited vertices v' adjacent to v
+            mark v' as visited
+            enqueue(q,v')
+*/
+
+    // keep track of which nodes you have visited.  Indexed by robot #
+    // 1 if visited, 0 if not
+    unsigned char visited_nodes[MAX_ROBOTS];
+    // keep track of the distance from the start robot to other robots
+    // also indexed by robot#
+    unsigned char node_distances[MAX_ROBOTS];
+    // this is the path you take
+    unsigned char path[MAX_ROBOTS];
+    
+    //variables you will need
+    unsigned char current_node;                 //current node
+    unsigned char current_neighbour_node;       //neighbor to the current node
+    unsigned char current_neighbour_val;        //value of that neighbour's sensors
+    unsigned char current_distance;              //keep track of current distance to the start
+    unsigned char i;                            //counter variable
+    
+    char large_number = 255;
+
+    //set visited nodes to all 0
+    memset(visited_nodes, 0, MAX_ROBOTS);
+    //set all the distances to a very large number
+    //this isn't technically necessary, but it's probably a good thing -- just in case
+    memset(node_distances, large_number, MAX_ROBOTS);
+    
+    //set the path to all LARGE_NUMBER as well
+    memset(path, large_number, MAX_ROBOTS);
+
+    RING_BUFFER_CLEAR(q);
+
+    //add the start node
+    RING_BUFFER_ADD(q, start);
+    visited_nodes[start] = 1;
+    node_distances[start] = 0;
+    
+    while(!RING_BUFFER_EMPTY(q)){
+        RING_BUFFER_REMOVE(q, current_node);
+        
+        //get the current distance from you to the start
+        current_distance = node_distances[current_node];
+        
+        //this node is on your 'path'
+        path[current_distance] = current_node;
+        //note: it's OK if this path leads nowhere -- the path will be
+        //overwritten by a node that does lead to the goal
+        //(if there is no path, we set path to null anyways)
+        
+        //from now on, all further nodes will be one further away -- increment
+        current_distance++;
+        
+        
+        //process node -- basically check if it's the goal
+        if(current_node == end) {
+            //you reach the goal
+            //return the first robot in the path, which is the one
+            //to follow
+            lcd_putchar('.');
+            lcd_putchar('.');
+            for(i = 0; i < MAX_ROBOTS; i++)
+                lcd_putchar(path[i] +48);           //print out the path for fun -- remove this later
+            lcd_putchar('.');
+            lcd_putchar('.');
+            return path[1];         //path[0] is you.  path[1] is who you want to follow
+        }
+        
+        // go through all nodes adjacent to current
+        // in effect, this means going through the current node's row in the matrix
+        for(i = 0; i < MAX_ROBOTS; i++) {
+            //the robot # is actually just the index
+            current_neighbour_node = i;
+            //the value is what is stored in the matrix (this is important)
+            current_neighbour_val = matrix[current_node][i];
+            
+            //check for connected-ness and that it was not visited
+            //            unconnected                           visited
+            if( (current_neighbour_val == NO_VAL) || (visited_nodes[current_neighbour_node]) ) {
+                //if it is either unconnected or previously visited, exit
+                continue;   //go to the next node
+            }
+            
+            //update the distance from the start node to this node
+            node_distances[current_neighbour_node] = current_distance;
+            //also mark it as visited
+            visited_nodes[current_neighbour_node] = 1;
+            
+            //also enqueue each neighbour
+            RING_BUFFER_ADD(q, current_neighbour_node);
+        
+        }
+    }
+    
+    //if we get to here, there is no path
+    memset(path, 0, MAX_ROBOTS);
+    return -1;
+
+
+
+}
+
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lights.h	(revision 62)
@@ -0,0 +1,53 @@
+/*
+lights.h
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+//user LED
+#define USERLED PING2
+
+//ORB
+#define RED       0xE0
+#define ORANGE    0xE8
+#define YELLOW    0xFC
+#define LIME      0x7C
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0x63
+#define PURPLE    0x23
+#define MAGENTA   0xE3
+#define WHITE     0xFF
+#define ORB_OFF   0x00
+
+//LEDs are on bank E
+#define REDLED   PE3
+#define GREENLED PE4
+#define BLUELED  PE5
+
+//?
+#define COUNT_START 0x8000
+
+
+//user LED
+void led_init( void );
+void led_user(int value);
+
+
+// For function descriptions see orb.c 
+void orb_init(void);
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led); 
+void orb_set_color(int col);
+void orb_disable(void);
+void orb_enable(void);
+
+void orb_set_dio(int red, int green, int blue);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/motor.c	(revision 62)
@@ -0,0 +1,65 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = 0xA1;
+	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+	if(direction == 0) {
+		PORTD |= 0x10;
+		PORTD &= 0xBF;
+	}
+	else {
+		PORTD |= 0x40;
+		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+}
+
+void motor2_set(int direction, int speed) {
+	if(direction == 0) {
+		PORTD |= 0x20;
+		PORTD &= 0x7F;
+	}
+	else {
+		PORTD |= 0x80;
+		PORTD &= 0xDF;
+	}
+	OCR1BL = speed;
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonybfs.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonybfs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonybfs.h	(revision 62)
@@ -0,0 +1,13 @@
+#ifndef COLONYBFS_H
+#define COLONYBFS_H
+
+/*
+Colony BFS - Performs breadth-first search on a colony adjacency matrix
+
+Felix Duvallet
+*/
+#include "localization.h"
+
+char colony_bfs_find_leader ( unsigned char matrix[MAX_ROBOTS][MAX_ROBOTS], unsigned char start, unsigned char end );
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/motor.h	(revision 62)
@@ -0,0 +1,18 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off( void );
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/serial.c	(revision 62)
@@ -0,0 +1,132 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	author: Robotics Club, Colony Project
+	
+	much code taken from FWR's library, author: Tom Lauwers
+	
+	
+	general note - serial -> uart
+				   serial1 -> uart1
+		this is done for clarity purposes
+*/
+
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+//setup uart0 (serial)
+void serial_init(unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR0H = 0x00;
+	UBRR0L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+}
+
+// uart_putchar - Low-level function which puts a value into the 
+// Tx buffer for transmission.  Automatically injects
+// a \r before all \n's
+int serial_putchar(char c)
+{
+
+    if (c == '\n')
+		putchar('\r');
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR0A, UDRE0);
+	// Load buffer with your character
+    UDR0 = c;
+    return 0;
+}
+
+// uart_getchar - Low-level function which waits for the Rx buffer
+// to be filled, and then reads one character out of it.
+// Note that this function blocks on read - it will wait until
+// something fills the Rx buffer.
+int serial_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+    c = UDR0;
+	return c;
+}
+
+// uart_getchar_nb - Low-level function which checks if the Rx buffer
+// is filled, and then reads one character out of it.
+// This is a non blocking version uart_getchar
+int serial_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR0A, RXC0);
+	if (UCSR0A & _BV(RXC0)){
+		// Read the receive buffer
+		c = UDR0;
+		return c;
+	}
+	return 0;
+		
+}
+
+//setup uart1 (serial1)
+void serial1_init( unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR1H = 0x00;
+	UBRR1L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+}
+
+//put to uart1 (serial1)
+int serial1_putchar(char c)
+{
+
+    if (c == '\n')
+		serial1_putchar('\r'); //changed from putchar aj
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR1A, UDRE1);
+	// Load buffer with your character
+    UDR1 = c;
+    return 0;
+}
+
+//get from uart1 (serial1)
+int serial1_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+    c = UDR1;
+	return c;
+}
+
+//get from uart1 non-block
+int serial1_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR1A, RXC1);
+	if (UCSR1A & _BV(RXC1)){
+		// Read the receive buffer
+		c = UDR1;
+		return c;
+	}
+	return 0;
+		
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/buzzer.c	(revision 62)
@@ -0,0 +1,76 @@
+/*
+	buzzer.c - Contains the functions necessary for running the buzzer
+	
+	author: Robotics Club, Colony Project
+	
+	much taken from FWR's firefly library (author: Tom Lauwers)
+
+*/
+
+#include <avr/io.h>
+#include "buzzer.h"
+#include "time.h"
+
+/*
+initializes buffer
+
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+	// Set pin D7 to output - D7 is buzzer pin
+	DDRB |= 0x80;
+	
+	// Set to Fast PWM mode, toggle the OC0A pin (D6) on output compare
+	// matches, and select a clock prescalar of 64 for the counter.
+	// Counter FREQ = 8000000/64 = 125000
+	//01011000
+	TCCR2 = 0x1B;
+	OCR2=100;
+	
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+	int buzz_value;
+	
+	buzz_value = 62500/buzz_freq - 1;
+
+	if(buzz_value > 255)
+		buzz_value = 255;
+	else if(buzz_value < 0)
+		buzz_value = 0;
+	
+	buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{	
+	buzzer_set_freq(buzz_freq);
+	
+	delay_ms(ms);
+		
+	buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off() 
+{
+	// Disable clock, to halt counter
+	TCCR2 &= 0xF8;
+	
+	// Set buzzer pin low in case it's high
+	PORTB &= 0x7F;
+}
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/serial.h	(revision 62)
@@ -0,0 +1,42 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// Tested baud rates
+#define BAUD9600    103
+#define BAUD115200  8  //Warning--3.5% error
+
+// Untested baud rates that might be right --aaron
+#define BAUD1M	     0
+#define BAUD500K     1
+#define BAUD250K     3
+#define BAUD230400   3   //Warning--8.5% error
+#define BAUD76800    12
+#define BAUD57600    16  //Warning--2.1% error
+#define BAUD38400    25
+#define BAUD28800    34
+#define BAUD19200    51
+#define BAUD14400    68
+#define BAUD4800     207
+#define BAUD2400     416  //Might not work, since it needs some high bits set
+
+// Function descriptions are available in serial.c
+
+//serial (serial0) is the main serial (DB9 connection)
+void serial_init( unsigned int ubrr);
+int serial_putchar(char c);
+int serial_getchar(void);
+int serial_getchar_nb(void);
+
+
+void serial1_init( unsigned int ubrr);
+int serial1_putchar(char c);
+int serial1_getchar(void);
+int serial1_getchar_nb(void);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/buzzer.h	(revision 62)
@@ -0,0 +1,33 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+	
+	
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/localization.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/localization.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/localization.c	(revision 62)
@@ -0,0 +1,84 @@
+#include "localization.h"
+
+#include "firefly+_lib.h"
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/Makefile	(revision 62)
@@ -0,0 +1,508 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = robot_routine_reg_test
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = c:/roboclub_repository/emarinel/code/colonet/lib c:/roboclub_repository/emarinel/code/firefly_plus_lib 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 9600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVE) .dep/*
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/localization.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/localization.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/localization.h	(revision 62)
@@ -0,0 +1,24 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+typedef struct{
+  //actual row of sensor values -- need to be able to have up to
+  //max_robots
+  unsigned char row[MAX_ROBOTS];
+  //actual length of the row
+  unsigned char len;
+  //'index' value of the row -- which robot it's for
+  unsigned char row_num;
+  
+} SensorRow;
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, 
+			     int NUM_BOTS);
+ 
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/time.c	(revision 62)
@@ -0,0 +1,102 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+*/
+#include <avr/interrupt.h>
+#include <avr/signal.h>
+#include <avr/delay.h>
+#include "time.h"
+//#include "help.h"
+#include "serial.h"
+
+
+static volatile int _rtc_val = 0;
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/*
+void rtc_init(void)
+call this function to start the real time timer
+use rtc() to get the time value and rtc_resest() to reset
+
+requires global interrupts to be enabled for proper use
+(I bit of SREG register should be set)
+
+uses TIMER0 on asynchronous mode
+*/
+
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void)){
+	int mask = _BV(TCN0UB) + _BV(OCR0UB) + _BV(TCR0UB);
+	char tmp;
+	
+	TIMSK &= ~(_BV(OCIE0) + _BV(TOIE0)); //1. disable interrupts
+	ASSR |= _BV(AS0); //2. selecting clock source (external)
+	
+	//3. writing new values to TCCR, TCNT, OCR
+	TCNT0 = 0;
+	OCR0 = ocr_val;
+	TCCR0 = (0x01 << 3) + (prescale_opt & 0x07); //setting CTC mode, prescaler is lowest 3 bits
+	
+	//4. waiting for busy bits to clear
+	tmp = ASSR;
+	while( tmp & mask ){
+		tmp = ASSR;
+	}
+	
+	TIFR &= ~(_BV(OCF0) + _BV(TOV0)); //5. clearing the interrupt flags
+	TIMSK |= _BV(OCIE0); // + _BV(TOIE0); //6. enabling interrupts
+	
+	_rtc_f = rtc_func;
+}
+
+int rtc(void){
+	return _rtc_val;
+}
+
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+SIGNAL (SIG_OUTPUT_COMPARE0){
+	_rtc_val++;
+	
+	if(_rtc_f != 0)
+		_rtc_f();
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/servo.c	(revision 62)
@@ -0,0 +1,131 @@
+/*  
+	servo.c - Contains functions and interrupts necessary to activate servos
+	author:  Tom Lauwers
+	
+	3/1/06 Iain
+		Man, I don't know what a servo is. 
+*/
+#include <avr/io.h>
+#include <avr/signal.h>
+#include "servo.h"
+#include "dio.h"
+#include "lights.h"
+#include "lcd.h"
+//16000 c/ms
+//i dunno must be 2^k
+//9C40 ~ 20ms
+//#A000 ~ 20.48 but prolly wont work
+#define SERVO_PERIOD 0xA000
+//needs be 1ms
+//is 1.024ms
+#define SERVO_CONSTANT 0x800
+
+/* dirty dirty
+unsigned int servo_vals[4] = {0,0,0,0}; // Stores the set servo values
+int current_servo = 0;  // Stores which servo is current in the interrupt routine
+*/
+unsigned int servo_vals[8] = {0,0,0,0,0,0,0,0}; // Stores the set servo values
+int phase_time=0;
+int phase_base=0;
+int servos_on = 0;      // Stores which servos are enabled
+int servos_enabled=0; //which are high
+int servo_flag = 0;     // Stores whether or not servos are enabled
+
+/* Timer 1 output compare B interrupt.  Does the following:
+	Checks to see if the current servo is 4, in which case just need
+	to set low servo 3's signal and return.
+	Else, check to see if the current servo is enabled, and set it's signal high
+	Then, set the previous servo's signal low
+	Now, set the next output compare to occur for some time from now 
+	specified by the current servo's value
+*/
+SIGNAL (SIG_OUTPUT_COMPARE3B)
+{
+	lcd_putchar('i');
+	if(servo_flag == 0)
+		return;
+	
+	int i;
+	if(phase_time == 0){
+		lcd_putchar('p');
+		for(i=0;i<8;i++){
+			if(servos_on & _BV(i))
+				digital_output((_PORT_E << 3) +i,1);
+		}
+		servos_enabled = servos_on;
+		phase_base = OCR3B;
+	}
+
+	unsigned int min=~0;
+	for(i=0;i<8;i++){
+		if(_BV(i) & servos_enabled){
+			if(SERVO_CONSTANT*servo_vals[i] <= phase_time){
+				digital_output((_PORT_E << 3) + i,0);
+				servos_enabled &= ~_BV(i);
+			}
+			else if(SERVO_CONSTANT*servo_vals[i] < min) {
+				min = servo_vals[i];
+			}
+		}
+	}
+	if(!servos_enabled){
+		OCR3B = phase_base + SERVO_PERIOD;
+		phase_time = 0;
+	}
+	else {
+		OCR3B = phase_base + min;
+		phase_time = min;
+	}
+	
+}	
+
+//currently the light must be initted b4
+void init_servo()
+{
+	//1010 1001
+	TCCR3A = 0;  // COM## set to noninvert, WGM 1:0 set to 1
+	//0000 1100
+	TCCR3B = 0x02;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+	
+	lcd_init();
+	ETIMSK |= 0x08;
+	servo_flag = 1;
+	OCR3B = 0x80;
+	lcd_putchar('i');
+}
+
+// Enable a servo specified by config
+void enable_servo(int config)
+{
+	servos_on |= _BV(config);
+}
+
+// Disable a servo specified by config
+void disable_servo(int config)
+{
+	servos_on &= (0xFF-_BV(config));
+}
+
+// Disables the timer1 interrupt, disabling the servos
+void disable_servos()
+{
+	// Disables interrupts
+	ETIMSK &= ~0x08;
+	servo_flag=0;
+
+}
+
+// Enables the timer1 interrupt, enabling the servos
+void enable_servos()
+{
+	// Enable interrupts on output compare B
+	ETIMSK |= 0x08;
+	servo_flag=1;
+}
+// Set a servo to a value.  Automatically enables the servo.
+void set_servo(int servo, int value)
+{
+	enable_servo(servo);
+	servo_vals[servo] = value;
+}
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/analog.c	(revision 62)
@@ -0,0 +1,66 @@
+/*
+	analog.c - Contains the function implementations for manipulating the ADC
+	on the firefly+ board
+	
+	author:  CMU Robotics Club, Colony Project
+	code mostly taken from fwr analog file (author: Tom Lauwers)
+*/
+
+#include <avr/delay.h>
+#include <avr/interrupt.h>
+#include <avr/signal.h>
+#include "analog.h"
+
+void analog_init(void){
+
+	/*
+		ADC Status Register A
+		Bit 7 - ADEN is set (enables analog)
+		Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+		Bit 5 - Enable Auto Trigger (for free running mode)
+		Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+		Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 16,000,000/128
+	*/
+	ADCSRA |= 0xEF;
+
+	/*
+		ADMUX register
+		Bit 7,6 - Set voltage reference to AVcc (0b01)
+		Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+		Bit 4 - X
+		Bit 3:0 - Sets the current channel
+	*/
+	ADMUX = 0x67;
+}	
+
+unsigned int analog8(int which){
+	ADMUX = 0x60 + which;
+	_delay_ms(1); // need at least 130 us between conversions (for fwr robot, how much for new avr?)
+	return ADCH;
+}
+
+unsigned int analog10(int which){
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+	
+	ADMUX = 0x60 + which;
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void){
+	return analog8(WHEEL_PORT);
+}
+
+int battery(void){
+	return analog8(BATT_PORT) * 500 / 255; /* 5 volts is the max, 255 is the max 8bit number */
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/firefly+_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/firefly+_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/firefly+_lib.c	(revision 62)
@@ -0,0 +1,71 @@
+#include "firefly+_lib.h"
+
+
+void serial_test( void );
+void lcd_test(void);
+void orb_test( void );
+
+
+
+void motor_test (void) {
+
+	
+
+
+
+}
+void orb_test( void ) {
+	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	
+	
+	while(1) {
+		orb_set_color(orbs[orb_select]);
+		delay_ms(1000);
+		orb_select++;
+		if(orb_select == 14)
+			orb_select = 0;
+	}
+
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i;
+	lcd_init();
+	
+	for(i = 32; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+	}
+	
+	
+	return;
+	
+}
+
+/*
+prints all printable characters to the serial
+
+baud rate is 115200
+*/
+void serial_test( void ) {
+	int i;
+	
+	serial_init(BAUD115200);
+	
+	for(i = 32; i <= 126; i++) {
+		serial_putchar(i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+
+
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lcd.c	(revision 62)
@@ -0,0 +1,239 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include "lcd.h"
+#include "time.h"
+
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+	{ 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+	LCDDDR |= (D_C | SCE | SDI | SCK);
+	LCDRESETDDR |= RST;
+
+	LCDPORT &= ~(D_C | SCE | SDI | SCK);
+	
+	SPCR |= 0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+	
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+  LCDPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDPORT |= D_C;
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+return;
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/time.h	(revision 62)
@@ -0,0 +1,61 @@
+/*
+time.h
+
+provisional (Suresh)
+
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#define TIMER_OFF         0x00
+#define PRESCALE_NONE     0x01
+#define PRESCALE_DIV_8    0x02
+#define PRESCALE_DIV_32   0x03
+#define PRESCALE_DIV_64   0x04
+#define PRESCALE_DIV_128  0x05
+#define PRESCALE_DIV_256  0x06
+#define PRESCALE_DIV_1024 0x07
+
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void));
+
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/servo.h	(revision 62)
@@ -0,0 +1,16 @@
+/*  
+	servo.h - Contains function prototypes for servo activation
+	author:  Tom Lauwers
+*/
+#ifndef _SERVO_H_
+#define _SERVO_H_
+
+// Information on functions available in servo.c
+void init_servo(void);
+void enable_servos(void);
+void enable_servo(int config);
+void set_servo(int servo, int value);
+void disable_servos(void);
+void disable_servo(int );
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet.c	(revision 62)
@@ -0,0 +1,335 @@
+/** @file colonet.c
+ * @brief Colonet library for colony robots
+
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ * 
+ * @bug Handler registration not tested
+ * @bug Request reponding not implemented - only accepts commands.
+ */
+
+#include <firefly+_lib.h>
+
+#include "colonet.h"
+
+typedef struct {
+  unsigned char msgId; //is this necessary?
+  void (*handler)(void);
+} UserHandler;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+/* Internal function prototypes */
+void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf);
+unsigned int two_bytes_to_int(char high, char low);
+
+/* Public functions */
+int colonet_handle_message(unsigned char robot_id, char* pkt_buf)
+{
+  ColonetPacket pkt;
+  unsigned char* args; //up to 7 char args
+  unsigned int int_args[3]; //up to 3 int (2-byte) args
+
+  packet_string_to_struct(&pkt, pkt_buf);
+
+  if(pkt.msg_dest != GLOBAL_DEST && pkt.msg_dest != robot_id){ 
+    //message not intended for us
+    return 1;
+  }
+
+  args = pkt.data;
+  
+  /* Hack - could be done more 1337ly with casting, but this way we don't have
+   * to worry about little/big endian stuff */
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if(pkt.msg_type == COLONET_REQUEST){
+    switch(pkt.msg_code){
+      //Sharp
+    case READ_DISTANCE:
+      break;
+    case LINEARIZE_DISTANCE:
+      break;
+    case LOG_DISTANCE:
+      break;
+
+      //Serial
+    case SERIAL_GETCHAR:
+      break;
+    case SERIAL_GETCHAR_NB:
+      break;
+    case SERIAL1_GETCHAR:
+      break;
+    case SERIAL1_GETCHAR_NB:
+      break;
+
+      //Analog
+    case ANALOG8:
+      break;
+    case ANALOG10:
+      break;
+    case WHEEL:
+      break;
+    case BATTERY:
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+      //Dio
+    case DIGITAL_INPUT:
+      break;
+    case BUTTON1_READ:
+      break;
+    case BUTTON2_READ:
+      break;
+
+      //Bumper
+    case DETECT_BUMP:
+      break;
+    }
+
+    /* TODO - send back data! */
+
+  }else if(pkt.msg_type == COLONET_COMMAND){
+    if(pkt.msg_code >= USER_DEFINED_MSG_ID_START && 
+       pkt.msg_code <= USER_DEFINED_MSG_ID_END){
+      if (user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler) {
+        /* Call the user's handler function if it the function's address
+         * is non-zero (has been set) */
+        user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler();
+      }
+
+      return 0;
+    }
+
+    switch(pkt.msg_code){
+    default:
+      printf("%s: Error - message code %d not implemented\n", __FUNCTION__,
+             pkt.msg_code);
+      return -1;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+      
+      //LCD
+    case LCD_INIT:
+      lcd_init();
+      break;
+    case LCD_CLEAR_SCREEN:
+      lcd_clear_screen();
+      break;
+    case LCD_PUTBYTE:
+      lcd_putbyte(args[0]);
+      break;
+    case LCD_PUTCHAR:
+      lcd_putchar((char)args[0]);
+      break;
+    case LCD_PUTSTR:
+      lcd_putstr((char*)args);
+      break;
+    case LCD_GOTOXY: 
+      lcd_gotoxy(int_args[0], int_args[1]);
+      break;
+    case LCD_PUTINT: 
+      lcd_putint(int_args[0]);
+      break;
+    case ORB_INIT:
+      orb_init();
+      break;
+      //Orb
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+    case ORB_SET_DIO:
+      orb_set_dio(int_args[0], int_args[1], int_args[2]);
+      break;
+    case LED_INIT:
+      led_init();
+      break;
+    case LED_USER:
+      led_user(int_args[0]);
+      break;
+    case ORB_SEND:
+      //orb_send();
+      break;
+      //Motors
+    case MOTORS_INIT:
+      motors_init();
+      break;
+    case MOTOR1_SET:
+      motor1_set(int_args[0], int_args[1]);
+      break;
+    case MOTOR2_SET:
+      motor2_set(int_args[0], int_args[1]);
+      break;
+    case MOTORS_OFF:
+      motors_off();
+      break;
+
+      /*
+    case MOVE:
+      
+      break;
+      */
+
+      //SERIAL
+    case SERIAL_INIT:
+      serial_init(int_args[0]);
+      break;
+    case SERIAL_PUTCHAR:
+      serial_putchar((char)args[0]);
+      break;
+    case SERIAL1_INIT:
+      serial1_init(int_args[0]);
+      break;
+    case SERIAL1_PUTCHAR:
+      serial1_putchar((char)args[0]);
+      break;
+    case PRINTF:
+      printf("%s", pkt.data);
+      break;
+    case KILL_ROBOT:
+      motors_off();
+      buzzer_off();
+      exit(0); //kill the robot
+      break;
+      //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      analog_init();
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+    case OUTPUT_HIGH:
+      output_high(int_args[0]);
+      break;
+    case OUTPUT_LOW:
+      output_low(int_args[0]);
+      break;
+
+      //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    case BUTTON1_WAIT:
+      button1_wait();
+      break;
+    case BUTTON1_WAIT_LED:
+      button1_wait_led();
+      break;
+    case BUTTON2_WAIT:
+      button2_wait();
+      break;
+    case BUTTON2_WAIT_LED:
+      button2_wait_led();
+      break;
+
+      //WL
+    case WL_INIT:
+      wl_init();
+      break;
+    case PARSE_BUFFER:
+      parse_buffer();
+      break;
+    case WL_SEND:
+      wl_send();
+      break;
+    }
+  }else{
+    printf("%s: Error: Invalid colonet message type", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void))
+{
+  if(msgId < USER_DEFINED_MSG_ID_START || msgId > USER_DEFINED_MSG_ID_END){
+    return -1;
+  }
+
+  /* Register this function in the array */
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+/* Private functions */
+static void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf)
+{
+  int i;
+  
+  printf("\npacket:");
+  for(i = 0; i < 16; i++){
+    printf("%d ", pkt_buf[i]);
+  }
+
+  printf("\n");
+
+  dest_pkt->prefix[0] = pkt_buf[0];
+  dest_pkt->prefix[1] = pkt_buf[1];
+  dest_pkt->token_src = pkt_buf[2];
+  dest_pkt->token_dest = pkt_buf[3];
+  dest_pkt->msg_dest = pkt_buf[4];
+  dest_pkt->msg_type = pkt_buf[5];
+  dest_pkt->msg_code = pkt_buf[6];
+  
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    dest_pkt->data[i] = pkt_buf[7+i];
+  }
+
+  dest_pkt->num_robots = pkt_buf[PACKET_SIZE-2];
+  dest_pkt->checksum = pkt_buf[PACKET_SIZE-1];
+}
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+static unsigned int two_bytes_to_int(char high, char low)
+{
+  return (((unsigned int)high)<<8) + (unsigned int)low;
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/analog.h	(revision 62)
@@ -0,0 +1,61 @@
+/*
+	analog.h - Contains definitions and function prototypes for using the
+	ADC to detect analog signals on pins AN0 - AN7
+	AN6 and AN7 are used for the wheel and battery
+	
+	The pins labeled E6 and E7 are external interrupt pins and are not related to analog
+	
+	author: CMU Robotics Club, Colony Project
+	code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+
+#define WHEEL_PORT AN6
+#define BATT_PORT  AN7
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/firefly+_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/firefly+_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/firefly+_lib.h	(revision 62)
@@ -0,0 +1,40 @@
+/*
+
+firefly+_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+#ifndef _FIREFLY_LIB_H_
+#define _FIREFLY_LIB_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+//#include <avr/delay.h>
+//#include <avr/signal.h>
+
+#include "analog.h"
+#include "dio.h"
+
+#include "lcd.h"
+#include "time.h"
+#include "lights.h"
+
+#include "motor.h"
+#include "serial.h"
+#include "buzzer.h"
+
+#include "servo.h"
+#include "bom.h"
+
+//wireless
+#include "wl_adhoc.h"
+
+//localization
+#include "localization.h"
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lcd.h	(revision 62)
@@ -0,0 +1,27 @@
+
+#ifndef _LCD_H_
+#define _LCD_H_
+
+
+//////lcd defines
+#define RST 0x04  // pe2 (GPIO)
+#define SCE 0x01  // pb0 (~SS)
+#define D_C 0x10  // pb4 (GPIO?)
+#define SDI 0x04  // pb2 (MOSI)
+#define SCK 0x02  // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTE
+#define LCDRESETDDR DDRE
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet.h	(revision 62)
@@ -0,0 +1,34 @@
+/** @file colonet.h
+ * @brief Colonet library for colony robots
+ * @author Eugene Marinelli
+ * @date 10/26/06
+ */
+
+#ifndef COLONET_H_
+#define COLONET_H_
+
+#include <colonet_defs.h>
+
+/** @brief Handles colonet packets.  Should be called by parse_buffer 
+ * when it is determined that a colonet message has been received.
+ *
+ * @param robot_id The robot id
+ * @param pkt_buf The packet buffer (e.g. wl_buf)
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_handle_message(unsigned char robot_id, char* packet);
+
+/** @brief Registers a new colonet message handler function.  If a message
+ * with msgId is received, then handler will be called.
+ * 
+ * @param msgId The message id of the handler to be registered.  Must be
+ * between USER_DEFINED_MSG_ID_START and USER_DEFINED_MSG_ID_END
+ * @param handler The function to be called if a colonet packet with message
+ * id msgId is received
+ * 
+ * @return -1 on error (invalid msgId), 0 on success
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet_defs.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet_defs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/colonet_defs.h	(revision 62)
@@ -0,0 +1,152 @@
+/* Eugene Marinelli, Fan
+ * 10/27/06
+ *
+ * Colonet Definitions - common definitions and structs used in all colonet 
+ * applications
+ */
+
+#ifndef COLONET_DEFS_H_
+#define COLONET_DEFS_H_
+
+//Message types
+#define COLONET_COMMAND 0x0D
+#define COLONET_REQUEST 0x0E
+
+//Packet properties
+#define PACKET_DATA_LEN 7
+#define PACKET_SIZE 16
+
+//Packet error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGESTATION 251  //Charging station response to ping
+#define WL_ERR_DEAD_LOC 5
+#define WL_ERROR_DEST 255
+#define WL_ERROR_LOC 4
+
+typedef struct {
+  unsigned char prefix[2];
+  unsigned char token_src;
+  unsigned char token_dest;
+  unsigned char msg_dest;
+  unsigned char msg_type;
+  unsigned char msg_code;
+  unsigned char data[PACKET_DATA_LEN];
+  unsigned char num_robots;
+  unsigned char checksum;
+} ColonetPacket;
+
+#define SERIAL_PORT "/dev/ttyS0"
+#define USB_PORT "/dev/ttyUSB0"
+
+#define GLOBAL_DEST 200
+#define MAX_NUM_ROBOTS 7
+
+#define USER_DEFINED_MSG_ID_START 0xF0
+#define USER_DEFINED_MSG_ID_END 0xFF
+#define USER_DEFINED_MSG_TOTAL 0x0F
+
+/* Low level robot commands */
+//BUZZER
+#define BUZZER_INIT 0x00
+#define BUZZER_SET_VAL 0x01
+#define BUZZER_SET_FREQ 0x02
+#define BUZZER_CHIRP 0x03
+#define BUZZER_OFF 0x04
+
+//LCD
+#define LCD_INIT 0x05
+#define LCD_CLEAR_SCREEN 0x06
+#define LCD_PUTBYTE 0x07
+#define LCD_PUTCHAR 0x08
+#define LCD_PUTSTR 0x09
+#define LCD_GOTOXY 0x0A
+#define LCD_PUTINT 0x0B
+
+//ORB
+#define ORB_INIT 0x0C
+#define ORB_SET 0x0D
+#define ORB_SET_COLOR 0x0E
+#define ORB_DISABLE 0x0F
+#define ORB_ENABLE 0x10
+#define ORB_SET_DIO 0x11
+#define LED_INIT 0x12
+#define LED_USER 0x13
+#define ORB_SET_NUM_NS 0x14
+#define ORB_SET_NUM 0x15
+#define ORB_SEND 0x16
+
+//MOTORS
+#define MOTORS_INIT 0x17
+#define MOTOR1_SET 0x18
+#define MOTOR2_SET 0x19
+#define MOTORS_OFF 0x1A
+#define MOVE 0x1B
+
+//SHARP
+#define READ_DISTANCE 0x24
+#define LINEARIZE_DISTANCE 0x25
+#define LOG_DISTANCE 0x26
+#define ENABLE_IR 0x27
+#define DISABLE_IR 0x28
+
+//SERIAL
+#define SERIAL_INIT 0x29
+#define SERIAL_PUTCHAR 0x2A
+#define SERIAL_GETCHAR 0x2B
+#define SERIAL_GETCHAR_NB 0x2C
+#define SERIAL1_INIT 0x2D
+#define SERIAL1_PUTCHAR 0x2E
+#define SERIAL1_GETCHAR 0x2F
+#define SERIAL1_GETCHAR_NB 0x30
+
+//DELAY_MS
+#define DELAY_MS 0x31
+
+//ANALOG
+#define ANALOG_INIT 0x32
+#define SET_ADC_MUX 0x33
+#define ENABLE_ANALOG 0x34
+#define ANALOG8 0x35
+#define ANALOG10 0x36
+#define WHEEL 0x37
+#define BATTERY 0x38
+
+//BOM
+#define GETMAXBOM 0x39
+#define BOM_ON 0x3A
+#define BOM_OFF 0x3B
+#define OUTPUT_HIGH 0x3C
+#define OUTPUT_LOW 0x3D
+
+//DIO
+#define DIGITAL_INPUT 0x3E
+#define DIGITAL_OUTPUT 0x3F
+#define BUTTON1_READ 0x41
+#define BUTTON1_WAIT 0x42
+#define BUTTON1_WAIT_LED 0x43
+#define BUTTON2_READ 0x44
+#define BUTTON2_WAIT 0x45
+#define BUTTON2_WAIT_LED 0x46
+
+//WL 
+#define WL_INIT 0x47
+#define PARSE_BUFFER 0x48
+#define WL_SEND 0x49
+#define WL_CREATE_PACKET 0x4A
+#define WL_DEATH_HANDLER 0x4B
+#define WL_ERROR_HANDLER 0x4C
+#define WL_TIMEOUT_HANDLER 0x4D
+#define DISPLAY_DEBUG 0x4E
+#define BOM_TEST 0x4F
+
+//BUMPER
+#define DETECT_BUMP 0x50
+
+//Other
+#define PRINTF 0x51
+#define KILL_ROBOT 0x52
+
+/* End low-level robot commands */
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/dio.c	(revision 62)
@@ -0,0 +1,278 @@
+/* 
+
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+	the first 3 (abc in this example) are used to select the bank
+		A = 001
+		B = 010
+		C = 011
+		D = 100
+		E = 101
+		F = 110
+		G = 111
+		
+		the bank can be found by doing portpin >> 3
+		
+	the next 3 (def in this example) are used to select the pin number
+	the 3 bits are just the binary representation of the pin number
+		0 = 000
+		1 = 001
+		2 = 010
+		3 = 011
+		4 = 100
+		5 = 101
+		6 = 110
+		7 = 111
+		
+		the pin number can be found by doing portping & 0b111
+		
+
+*/
+
+#include <avr/interrupt.h>
+
+#include "dio.h"
+#include "time.h"
+#include "lights.h"
+
+/*
+digital_input
+
+reads the value on the selected portpin, returns it as 1 or 0
+see general description (above) for definition of portpin
+
+*/
+int digital_input(int portpin){
+	int pin = portpin & 0b111;
+	int pin_val = 0;
+	
+	switch(portpin >> 3){
+		case _PORT_A:
+			DDRA &= ~_BV(pin);
+			pin_val = PINA;
+			return (pin_val >> pin) & 1;
+		case _PORT_B:
+			DDRB &= ~_BV(pin);
+			pin_val = PINB;
+			return (pin_val >> pin) & 1;
+		case _PORT_C:
+			DDRC &= ~_BV(pin);
+			pin_val = PINC;
+			return (pin_val >> pin) & 1;
+		case _PORT_D:
+			DDRD &= ~_BV(pin);
+			pin_val = PIND;
+			return (pin_val >> pin) & 1;
+		case _PORT_E:
+			DDRE &= ~_BV(pin);
+			pin_val = PINE;
+			return (pin_val >> pin) & 1;
+		case _PORT_F:
+			if(pin>=4){
+				MCUSR|=1<<7;
+				MCUSR|=1<<7;
+			}
+			DDRF &= ~_BV(pin);
+			pin_val = PINF;
+			return (pin_val >> pin) & 1;
+		case _PORT_G:
+			DDRG &= ~_BV(pin);
+			pin_val = PING;
+			return (pin_val >> pin) & 1;
+		default: break;
+	}
+	
+	return -1;
+}
+
+/*
+digital_output
+
+sets portpin to the value
+
+see general description above for explanation of portpin
+
+val can only be 1 or 0
+*/
+void digital_output(int portpin, int val) {
+	int pins = portpin & 0x07;
+	
+	/*
+	if you want to set to 0
+	*/
+	if(val == 0) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA &= (0XFF - _BV(pins));
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG &= (0XFF - _BV(pins));
+				break;
+		}
+	}
+	if( val == 1) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA |= _BV(pins);
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB |= _BV(pins);
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC |= _BV(pins);
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD |= _BV(pins);
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE |= _BV(pins);
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF |= _BV(pins);
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG |= _BV(pins);
+				break;
+		}
+	}
+}
+
+
+
+
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	//return (BTN & (_BV(BTN1)) >> BTN1);
+	return (PIN_BTN >> BTN1) & 1;
+}
+
+/*
+similar to button1_read, but hold program until the button is actually pressed
+*/
+void button1_wait( void )
+{
+	while(!button1_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+/*
+same as button1_wait
+However, blink the led while waiting
+
+IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+void button1_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button1_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	return (PIN_BTN >> BTN2) & 1;
+}
+
+void button2_wait( void )
+{
+	while(!button2_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+void button2_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button2_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+	putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/bom.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/bom.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/bom.c	(revision 62)
@@ -0,0 +1,66 @@
+#include "bom.h"
+
+
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+int getMaxBom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+	
+	return max_bom_temp;
+}
+
+void bom_on(void)
+{
+  output_high(MONKL);
+
+}
+
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/dio.h	(revision 62)
@@ -0,0 +1,176 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+
+/*
+
+these are ALL the pins
+don't use unless you know what you're doing
+
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32
+#define _PIN_D1 33
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42
+#define _PIN_E3 43
+#define _PIN_E4 44
+#define _PIN_E5 45
+#define _PIN_E6 46
+#define _PIN_E7 47
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_WHEEL 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+#define PIN_BATT 55
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+#define PIN_LED1 58
+
+int digital_input(int);
+void digital_output(int bit, int val);
+
+///////////////////////
+//////  BUTTONS  //////
+///////////////////////
+#define PIN_BTN PING
+
+#define BTN2 PING1
+#define BTN1 PING0
+
+int button1_read( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/wl_adhoc.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/wl_adhoc.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/wl_adhoc.c	(revision 62)
@@ -0,0 +1,845 @@
+/**
+   \file wl_adhoc.c
+   Wireless ad hoc networking.
+   NOW WITH SENSORS
+   Robots can come in and out of the ring.
+*/
+ 
+/*
+  Wireless ad hoc networking + sensors
+
+  If a robot is the first to turn on, it will set itself as the leader
+
+  The next robot will receive that packet and tokenize with it.
+  Each other robot turned on will receive packets, and join the ring.
+  All the robots will also change their network topology (num_bots)
+  
+  
+  2006-11-21: Felix
+              Fixed buzzer.c code (copied from a different dir).
+              Code still works on robots at this time 
+              
+              Felix used this code to figure out the robot resetting problem.  BOM sensor 10
+              needs to be taped up.
+              You may put this event in the history books.
+              
+  
+  2006-10-31 Kevin
+  Changed the boards to the 115200 Baud rate. Changed the pound define to reflect this.
+  The boards have been hardcoded to do this. They are labelled in case you do not know
+  which ones do this. It works.
+  
+  2006-10-13: Kevin
+  Made improvements to make the module more modular and general
+  so that you can just drag and drop it into any behavior.
+  Began the integration of autonomous charging. We're using the
+  error system that is built into wl_adhoc originally to ping the
+  charge stations. Do not know if it works, can't test it yet. But
+  wireless normally still works.
+
+  2006-08-07: Felix
+  Added the use of the sensor row that was being transmitted
+  Robots now share a common table of sensor 'positions'
+  Just add light sensing and you're good to go
+            
+  WARNING: Robots seem to reset randomly due to batteries, especially
+  when moving around.  Could be brownout detector kicking in.
+  Added a beep at startup to detect reset.
+
+  2006-08-03: Felix
+  Now added follow-the-leader code
+  Battery problem -- testing only really worked on power supply
+            
+  Robots follow the leader (theoretically).
+  They fill their own row of the sensors matrix, but do not get
+  the other robots' row -- not in the code.
+
+  2006-07-27: Felix
+  Created new directory for sensors use
+
+  2006-07-24: Felix
+  Added BOM.c/BOM.h
+  bom_test works -- gets max bom
+            
+  Added the get_maxbom each time you get a wireless packet
+  ---NEEDS TESTING
+            
+  Also, packet sent should contain your 'row'
+  Also, received packet should be stored in matrix
+
+  2006-07-13: Felix
+  Works for the most part
+  W00t
+			
+  Still a few kinds I imagine, but robot death & birth work
+*/
+
+#include "firefly+_lib.h"
+#include "wl_adhoc.h"
+#include <avr/interrupt.h>
+#include "colonet.h"
+#include "colonet_defs.h"
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b)  ((a) < (b) ? (a) : (b))
+
+unsigned char set_orb_wireless = 0;
+//unsigned char set_orb_wireless = 1;
+
+/*
+  int main( void ) 
+  {
+  wl_adhoc();
+  bom_test();
+
+  return 0;
+  }
+*/
+
+void bom_test (void)
+{
+  int maxb;
+
+  lcd_init();
+  analog_init();
+
+  while(1) {
+    if(button1_read()){
+      lcd_clear_screen();
+      bom_on();
+      delay_ms(100);
+    }
+    
+    if(button2_read()) {
+      lcd_clear_screen();
+      bom_off();
+      delay_ms(100);
+    }
+        
+    maxb = getMaxBom();
+        
+    lcd_putint(maxb);
+
+    delay_ms(50); 
+  }
+}
+
+void wl_adhoc()
+{
+  //initialize the serial modules
+  serial_init(WL_BAUD);       //XBee
+  serial1_init(BAUD115200);   //Serial port
+  
+  //lcd, orb, all that good stuff
+  lcd_init();
+  analog_init();
+  led_init();
+  orb_init();
+  motors_init();
+  buzzer_init();
+	
+  //init the wireless
+  wl_init();
+	
+  //int max_bom_to_follow;
+
+  while(1){
+    //this needs to happen continuously -- it handles the packet
+    parse_buffer();
+        
+    /*
+      if(SRC ==  0) {
+      //leader -- just drive
+      drive_forward();
+      }
+      else {
+      max_bom_to_follow = getSelfSensor(SRC, PREV, NUM_BOTS);
+      //lcd_putchar('f');
+      //lcd_putchar(max_bom_to_follow + 48);
+      //lcd_putchar(' ');
+      seek(max_bom_to_follow);
+      }
+    */
+		
+    //button1 prints debug information
+    if(button1_read()) {
+      //lcd_clear_screen();
+      display_debug();
+      delay_ms(10);
+    }
+		
+    /*
+    //button2 does nothing
+    if(button2_read()) {
+      //wl_create_packet();
+      //wl_send();
+      //delay_ms(10);
+    }
+    */
+  }
+
+  return;	
+}
+
+/**
+   \fn display_debug
+   \brief displays debug information
+
+   Prints out 4 numbers, in the following order
+   ( PREV | SRC | DEST | NUM_BOTS | wl_to_death_count )
+   where PREV is the previous robot before you
+   SRC is you
+   DEST is your destination
+   NUM_BOTS is the total number of robots in the ring
+   wl_do_death_count is the number of timeouts that will result in a death
+*/
+void display_debug()
+{
+  lcd_clear_screen();
+  lcd_putchar('(');
+  lcd_putchar(PREV+48);
+  lcd_putchar('|');
+  lcd_putchar(SRC+48);
+  lcd_putchar('|');
+  lcd_putchar(DEST+48);
+  lcd_putchar('|');
+  lcd_putchar(NUM_BOTS+48);	
+  lcd_putchar('|');
+  lcd_putint(wl_to_death_count);
+  lcd_putchar(')');
+    
+  //print table
+  int y = 1;
+  lcd_gotoxy(0, y);
+  int i, j;
+
+  for(i = 0; i < NUM_BOTS; i++) {
+    for(j = 0; j < NUM_BOTS; j++) {
+      lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+      lcd_putchar(' ');
+    }
+    y++;
+    lcd_gotoxy(0, y);
+  }
+}
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time 
+  one occurs.  In the case where a robot first turns on, it will wait for a 
+  long time before declaring itself the leader.  Otherwise, if enough 
+  time-outs occur in a row, wl_to_flag will be set to 1.  This will cause a 
+  timeout packet to be sent next time around
+
+*/
+void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  //lcd_putchar('w');
+	
+  static int wl_first_to_count =  0;
+	
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TO_INITIAL){
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+				
+      //lcd_putchar('Z');
+				
+      //you don't actually want to send out a packet -- you would confuse 
+      //other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+  }else{
+    //not the first time - regular time out routine
+
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT){
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+			
+      //increment the count for robot death
+      if(NUM_BOTS > 1) {
+        //only increase death count if there are robots that can die
+        //if numbots = 1, you are the only robot (no suicidal robots... yet)
+        wl_to_death_count++;
+      }
+      
+      //check for a robot death
+      if(wl_to_death_count > WL_TO_DEATH) {
+        //a robot has died :(
+        wl_to_death_flag = 1;
+        wl_death_handler();
+      }
+    }
+  }
+	
+  //take care of the case where you time out so much that you become the leader
+  if(wl_first_to_count > WL_TO_LEADER) {
+    //you are now the leader
+    //lcd_putchar('L');
+		
+    first_time = 0;
+				
+    NUM_BOTS = 1;			//there are (1) robot in the ring
+    SRC = 0;				//you are robot # 1
+    DEST = 1;				//you are 'speaking' to (nonexistent) robot #1
+		
+    lcd_putchar('[');
+    lcd_putchar(SRC+48);
+    lcd_putchar('|');
+    lcd_putchar(DEST+48);
+    lcd_putchar('|');
+    lcd_putchar(NUM_BOTS+48);	
+    lcd_putchar('|');
+    lcd_putint(wl_to_death_count);
+    lcd_putchar(']');
+		
+    //create a a packet and send it
+    wl_create_packet();
+    wl_send();
+		
+    //change the timeout count to 0
+    wl_to_count = 0;
+    wl_first_to_count = 0;
+  }
+}
+
+/**
+   \fn wl_error_handler(int errcode)
+   Handles error codes.
+   \param errcode The error code.
+   At the time, the only real error that happens is robot death.
+
+   Robot death requires that wl_buf have been set (either by receiving a
+   error packet or by calling wl_death_handler.
+
+   Robot death:
+   Number of robots will decrement.
+   Robots above the dead robot will decrement their ID and their source.
+   The loop remains closed.
+
+*/
+void wl_error_handler(unsigned char errcode)
+{
+  //which robot is dead
+  int dead_robot;
+
+  //print debug information
+  lcd_clear_screen();
+  lcd_gotoxy(0,0);
+  lcd_putstr("error handler    ");
+  lcd_putint(errcode);
+  lcd_gotoxy(0,1);
+
+  switch(errcode) {
+  case WL_ERRCODE_ROBOTDEATH:
+    lcd_putstr("  dead_robot: ");
+    lcd_putint(wl_buf[WL_ERR_DEAD_LOC]);
+    break;
+  case WL_ERRCODE_NEEDTOCHARGE:
+    lcd_putstr("   charge_robot: ");
+    lcd_putint(wl_buf[WL_SRC_LOC]);
+    break;
+  default:
+    break;
+  }
+
+  lcd_gotoxy(0,2);
+	
+  //set all the time-out counts and flags to 0
+  wl_to_count = 0;
+  wl_to_flag = 0;
+  wl_to_death_flag = 0;
+  wl_to_death_count = 0;
+		
+  //acknowledge receipt of the error packet by setting the errorcode in the 
+  //packet to 0
+  wl_buf[WL_ERROR_LOC] = 0;
+  //also set checksum to !0
+  wl_chksum = 1;
+	
+  //switch the error code
+  switch(errcode) {
+    //ROBOT DEATH
+  case WL_ERRCODE_ROBOTDEATH:
+    //get which robot has died
+    dead_robot = wl_buf[WL_ERR_DEAD_LOC];
+			
+    //decrement the total number of robots
+    NUM_BOTS--;
+			
+    //see if you are above the dead robot
+    if( SRC > dead_robot ) {
+      //if you are the last robot (since NUM_ROBOTS was decremented, 
+      //you can check that way) then decrement your number
+      //and set your destination to 0
+      if( SRC == NUM_BOTS) {
+        lcd_putchar('+');
+        lcd_putchar('1');
+        lcd_putchar('+');
+        SRC--;
+        DEST = 0;
+      } else {
+        //otherwise decrement both your ID and the destination by 1
+        lcd_putchar('+');
+        lcd_putchar('2');
+        lcd_putchar('+');
+        //decrement src and dest
+        SRC--;
+        DEST--;
+      }
+    }
+			
+    //ensure that the last robot talks to the 0th one
+    //this won't be set if the LAST robot dies (all robots are < dead)
+    if(SRC == (NUM_BOTS - 1) ) {
+      DEST = 0;
+    }
+    
+    //now your SRC and DEST have been set properly
+    //if you are the robot before the dead robot - send a message
+    if(SRC == dead_robot) {
+      lcd_putstr(" send packet ");
+      //you took the place of the dead robot
+      //you start the token ring again
+      wl_create_packet();
+      wl_send();
+    }
+    break;
+      
+  case WL_ERRCODE_NEEDTOCHARGE:
+    if (CHARGESTATION == 1) {
+      /*Turn on BOM for the length of time robots normally would have their 
+        BOM on. This is effectively telling everyone where the charging 
+        station is.  Assuming only one charging station at the moment.
+      */
+      bom_on();
+      delay_ms(WL_DELAY_BOM_PRE);
+      wl_create_error_packet(WL_ERRCODE_CHARGESTATION);
+      wl_send();
+      delay_ms(WL_DELAY_BOM_POST);
+      bom_off();
+    }
+    break;      //Do nothing about this, yet
+        
+  case WL_ERRCODE_CHARGESTATION:
+    // If the Charging Station responds, look for where it's comming from and 
+    //store that value for later
+    //wl_csloc = getMaxBOM();
+    break;
+      
+  default:
+    //do other stuff;
+    break;
+  }	
+}
+
+/**
+   \fn wl_death_handler
+
+   Handles robot death (for the one robot that detects death).
+
+   The robot that currently 'senses' robot death is the robot AFTER the dead
+   robot in the ring.  It knows that PREV (the robot right before it) is dead.
+   Robot creates a error packet and sends it. 
+
+   This will also call wl_error_handler since wl_buf was set with the current
+   dead robot
+*/
+void wl_death_handler( void ) 
+{
+  //set time out and death count/flags to 0
+  wl_to_count = 0;
+  wl_to_flag = 0;
+  wl_to_death_flag = 0;
+  wl_to_death_count = 0;
+
+  //create a packet with the error
+  wl_create_error_packet(WL_ERRCODE_ROBOTDEATH);
+  wl_buf[WL_ERR_DEAD_LOC] = PREV;   //PREV is the robot that is dead
+  wl_make_checksum();   //Recompute checksum after adding data
+	
+  //send the packet
+  wl_send();
+	
+  //handle the error yourself
+  wl_error_handler(wl_buf[WL_ERROR_LOC]);
+	
+  return;
+}
+
+/**
+   \fun parse_buffer
+   Parses the buffer in wl_buf.
+
+   Does nothing if the buffer isn't full.
+*/
+void parse_buffer(void) 
+{
+  //deal with timeout case
+  if( wl_to_flag ) {
+    wl_to_flag = 0;
+    wl_create_packet();
+    wl_send();
+    return;
+  }
+
+  //do nothing is packet is not complete
+  if( (wl_chksum != 0) || (wl_index != 0) ) {
+    return;
+  }
+  
+  //acknowledge you take the packet by changing the chksum to nonzero
+  wl_chksum = 1;
+
+  if(wl_buf[WL_DATA_DATA1] == COLONET_REQUEST || 
+     wl_buf[WL_DATA_DATA1] == COLONET_COMMAND){
+    printf("colonet message received: code %d\n", wl_buf[WL_DATA_DATA2]);
+    colonet_handle_message(SRC, wl_buf);
+  }else{
+    printf("\ndata1:%d\n", wl_buf[WL_DATA_DATA1]);
+  }
+	
+  if(first_time == 1) {
+    //you received a first packet from someone
+    first_time = 0;
+		
+    //get the current number of robots
+    NUM_BOTS = wl_buf[NUM_BOTS_LOC];
+		
+    //you are now the last robot in the line
+    SRC = NUM_BOTS;
+    //you are sending back to the first robot
+    DEST = 0;
+		
+    //since you've just added yourself, increase numbots
+    NUM_BOTS++;
+		
+    //figure out a way to send out a packet TODO
+    //wl_wait_for_turn = 1;
+		
+    //create and send a packet
+    wl_create_packet();
+    wl_send();
+  }
+  
+  //IS NOT CALLED FOR NOW
+  if(wl_wait_for_turn) {
+    if( wl_buf[WL_DEST_LOC] == (NUM_BOTS - 1) ) {
+      //you just got a packet from the 'old' last robot send yours
+      //lcd_putchar('S');
+      wl_create_packet();
+      wl_send();
+    }else{
+      //otherwise just exit out of parse
+      return;
+    }
+  }
+  
+  //check for error packet first
+  if(wl_buf[WL_DEST_LOC] == WL_PKT_ERROR){
+    //handle error packet
+    wl_error_handler( wl_buf[WL_ERROR_LOC] );
+    return;
+  }
+  
+  //see if there are more robots this turn around -- NUM_ROBOTS would have 
+  //increased
+  if(wl_buf[NUM_BOTS_LOC] > NUM_BOTS){
+    //if you are the last robot
+    if(DEST == 0){
+      //if you are the last robot in the ring
+      //change your dest to the new number (the last bot)
+      DEST = NUM_BOTS;
+      //lcd_putchar('j');
+    }
+
+    //increase the number of robots to what it is in the incoming packet
+    NUM_BOTS = wl_buf[NUM_BOTS_LOC];
+  }
+		
+  //make sure packet isn't your own (shouldn't really happen)
+  if(wl_buf[WL_SRC_LOC] == SRC) {
+    //lcd_putchar('d');
+    return;
+  }
+  
+  //get the data out of the sensor row
+  int i = 0;
+  int self = wl_buf[WL_SRC_LOC];
+  //13-4 = 9
+  int end = MIN(WL_DATA_ROW_END, NUM_BOTS+WL_DATA_ROW_START);
+  //lcd_putchar('s');
+  //lcd_putchar(self+48);
+  //lcd_putchar(':');
+  //lcd_putchar(end+48);
+  for(i = WL_DATA_ROW_START; i < end; i++){
+    addSensor(wl_buf[i], self, (i-WL_DATA_ROW_START), NUM_BOTS);
+  }
+  
+  //if you are the destination - respond
+  if(wl_buf[WL_DEST_LOC] == SRC) {
+    //you know that you got a message addressed to you -- previous robot must 
+    //not be dead
+    wl_to_death_count = 0;
+    //the robot previous to you is in wl_buf[WL_SRC_LOC]
+    PREV = wl_buf[WL_SRC_LOC];
+    
+    //create a packet
+    //lcd_putchar('s');
+    wl_create_packet();
+    wl_send();
+  }
+
+  return;
+}
+
+/**
+   \fun wl_init
+*/
+void wl_init(void)
+{
+  lcd_putchar('~');
+  lcd_putchar(SRC+48);
+  lcd_putchar('~');
+  lcd_putchar(DEST+48);
+  lcd_putchar('~');
+  lcd_putchar(NUM_BOTS+48);
+  lcd_putchar('~');
+    
+  buzzer_init();
+  buzzer_set_freq(C5);
+  delay_ms(800);
+  buzzer_off();
+	
+  wl_index = 0;
+  wl_chksum = 1;
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+	
+  /* executes the function about every 1/4 sec */
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+
+  wl_to_flag = 0;
+  wl_to_count = 0; 
+  wl_to_death_count = 0;
+  wl_to_death_flag = 0;
+	
+  wl_to_max = WL_TO_INITIAL;
+  first_time = 1;
+  wl_wait_for_turn = 0;
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+	
+  sei();
+}
+
+void wl_send ( void ) {
+  int i = 0;
+  
+  if(set_orb_wireless) {
+    orb_set_color(BLUE);
+  }
+  
+  led_user(1);
+  
+  if(SRC == (NUM_BOTS - 1) ) {
+    //if you are the last robot
+    //delay for some time
+    if(set_orb_wireless) {
+      orb_set_color(RED);
+    }
+    delay_ms(LAST_ROBOT_DELAY);
+    
+    //warning: delay is actually 0 -- adding the delay back causes issues.
+  }
+  
+  //this is where you would turn on the BOM
+  bom_on();
+  delay_ms(WL_DELAY_BOM_PRE);
+  for(i = 0; i < WL_PKT_LEN; i++) {
+    serial_putchar(wl_buf[i]);
+    serial1_putchar(wl_buf[i]);
+  }
+  
+  delay_ms(WL_DELAY_BOM_POST);
+  //this is where you would turn the BOM off
+  bom_off();
+  
+  led_user(0);
+  //sprintf(buf, "%d\n\r", wl_buf[WL_CHK_LOC]);
+  //put_string(buf);
+}
+
+void wl_create_packet() {
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  wl_buf[WL_SRC_LOC] = SRC;     //Where the packet came from
+  wl_buf[WL_DEST_LOC] = DEST;   //Who the packet is for
+  
+  //Behavior Specific Data goes here
+  wl_buf[WL_DATA_DATA0] = 0;
+  wl_buf[WL_DATA_DATA1] = 0;
+  wl_buf[WL_DATA_DATA2] = 0;
+  
+  //fill packet with data -- sensor row
+  for(int i = WL_DATA_ROW_START; i <= WL_DATA_ROW_END; i++) {
+    wl_buf[i] = sensors[SRC][i - WL_DATA_ROW_START];
+  }
+  
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Add custom data to the packets
+void wl_create_data_packet(unsigned char d0, unsigned char d1, 
+                           unsigned char d2)
+{
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+	
+  wl_buf[WL_SRC_LOC] = SRC;     //Where the packet came from
+  wl_buf[WL_DEST_LOC] = DEST;   //Who the packet is for
+    
+  //Behavior Specific Data goes here
+  wl_buf[WL_DATA_DATA0] = d0;
+  wl_buf[WL_DATA_DATA1] = d1;
+  wl_buf[WL_DATA_DATA2] = d2;
+	
+  //fill packet with data -- sensor row
+  for(int i = WL_DATA_ROW_START; i <= WL_DATA_ROW_END; i++) {
+    wl_buf[i] = sensors[SRC][i - WL_DATA_ROW_START];
+  }
+	
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Send an error packet
+void wl_create_error_packet(unsigned char errcode)
+{
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  //DEST is all robots
+  wl_buf[WL_SRC_LOC] = SRC;
+  wl_buf[WL_DEST_LOC] = WL_PKT_ERROR;
+  wl_buf[WL_ERROR_LOC] = errcode;
+	
+  //rest of the packet is just a bunch of 0s
+  for(int i = WL_ERR_DEAD_LOC + 1; i <= WL_DATA_END; i++) {
+    wl_buf[i] = 0;
+  }
+	
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+	
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Computes the checksum
+void wl_make_checksum() 
+{
+  char checksum = 0;
+
+  for(int i = WL_SRC_LOC; i < WL_CHK_LOC; i++) {
+    checksum -= wl_buf[i];
+  }
+
+  wl_buf[WL_CHK_LOC] = checksum;
+}
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV)
+{
+  int max_bom;
+  
+  wl_input = UDR0;
+  
+  //printf("%d ", wl_input);
+	
+  if((wl_index == 0) && (wl_chksum != 0)){
+    //first packet? - check chksum to make sure we're not beginning
+    if( wl_input == 'R' ) {
+      //got the first code
+      wl_index++;
+      
+      //if(set_orb_wireless) {
+      //  orb_set_color(GREEN);
+      //}
+      //lcd_putchar('R');
+      //serial1_putchar('R');
+			
+      wl_to_count = 0;  	 	//at this point we're not timing out, reset counter
+    }
+    return;
+  }else if( wl_index == 1 ){
+    if(wl_input == 'C') {
+      wl_index++;
+      wl_chksum = 0;
+      //lcd_putchar('C');
+      //serial1_putchar('C');
+    }else{
+      //incomplete packet header
+      wl_index = 0;
+    }
+    return;
+  }
+	
+  if( wl_index >= WL_SRC_LOC ) {
+    if( wl_index < WL_CHK_LOC ) {
+      //getting the rest of the packet
+      wl_buf[wl_index] = wl_input;
+      wl_chksum += wl_input;
+      wl_index++;
+    }else{
+      //we are at checksum location
+      wl_buf[wl_index] = 0;
+      wl_chksum += wl_input;
+      wl_index = 0;
+      if(!wl_chksum) {
+        //checksum is correct - equal to zero
+        //if(set_orb_wireless) {
+        //  orb_set_color(ORB_OFF);
+        //}
+        //lcd_putchar('p');
+                
+        //get the maximum BOM from the person who sent you the packet
+        max_bom = getMaxBom();
+        //lcd_putint(max_bom);
+        //lcd_putchar(' ');
+        //add to your own sensor the other robot's direction
+                
+        //        max_bom  you  them
+        addSensor(max_bom, SRC, wl_buf[WL_SRC_LOC], NUM_BOTS);
+                
+        //also set whether that robot can see the light or not
+        //set_light_status(wl_buf[WL_SRC_LOC], wl_buf[WL_DATA_LIGHT_LOC]);
+      }else{  
+        //chksum failed
+        //serial1_putchar('F');
+        //lcd_putchar('F');
+      }
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/bom.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/bom.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/bom.h	(revision 62)
@@ -0,0 +1,44 @@
+
+#ifndef _BOM_H
+#define _BOM_H
+
+
+#include "firefly+_lib.h"
+
+/*
+
+
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+
+*/
+
+
+#define MONKI AN0         //analog
+//------------------------//
+#define MONKL PIN_C2      //green
+#define MONK1 PIN_C3      //blue
+#define MONK0 PIN_C4      //white
+//------------------------//
+#define MONK3 PIN_C5      //blue
+#define MONK2 PIN_C6      //white 
+
+
+
+int getMaxBom( void );
+
+void bom_on(void);
+void bom_off(void);
+
+void output_high(int which);
+void output_low(int which);
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/wl_adhoc.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/wl_adhoc.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/wl_adhoc.h	(revision 62)
@@ -0,0 +1,125 @@
+#ifndef _WL_ADHOC_H_
+#define _WL_ADHOC_H_
+
+#include "localization.h"
+
+#define WL_BAUD BAUD115200
+
+/*
+ 0 - R
+ 1 - C
+ 2 - SRC
+ 3 - DEST
+ 4 - DATA0          Behavior specific Data
+ 5 - DATA1
+ 6 - DATA2
+ 7 - ROW[0]
+ 8 - ROW[1] 
+ 9 - ROW[2]
+10 - ROW[3]         make sure that you can fit MAX_ROBOTS bytes
+11 - ROW[4]
+12 - ROW[5]
+13 - ROW[6]
+14 - NUM_BOTS
+15 - CHK
+*/
+
+#define WL_PKT_LEN 16           //0...15
+
+#define WL_SRC_LOC 2   //SRC
+#define WL_DEST_LOC 3  //DEST
+
+#define WL_DATA_DATA0 4     //Behavior Specific Data
+#define WL_DATA_DATA1 5
+#define WL_DATA_DATA2 6
+
+#define WL_DATA_ROW_START 7     //start of sensor row (ROW[0])
+#define WL_DATA_ROW_END 13      //end (ROW[6] for now)
+
+//start of wireless data -- not necessarily anything in particular
+#define WL_DATA_START 4
+#define WL_DATA_END 13
+
+#define NUM_BOTS_LOC 14   //location of number of robots - sent in every packet
+#define WL_CHK_LOC 15    //check sum, negative of the sum of the rest of the 
+
+#define WL_TIMEOUT 4
+#define WL_TO_INITIAL 4
+#define WL_TO_LEADER 2
+#define WL_TO_DEATH 5
+//if a robot times out WL_TO_DEATH times, it will be considered dead
+
+#define LAST_ROBOT_DELAY 10   
+#define WL_DELAY_BOM_PRE 100
+//How much to delay between turning on BOM and sending a packet
+
+#define WL_DELAY_BOM_POST 100
+//How much to delay between completing a packet send and turning off BOM
+
+#define WL_PKT_ERROR 255
+#define WL_ERROR_LOC 4
+
+//error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGESTATION 251  //Charging station response to ping
+#define WL_ERR_DEAD_LOC 5
+
+char wl_buf[WL_PKT_LEN];
+int wl_csloc; //Stores where the last seen Charging Station was relative to you
+char wl_input;
+unsigned int wl_index;
+unsigned char wl_chksum;
+
+unsigned char wl_to_flag; 
+//Throws 1 if the time since last packet crosses a threshhold
+
+unsigned int wl_to_count;
+//Counts up for every time unit that you do not recieve 
+
+unsigned int PREV;            //Who's before you in the ring
+unsigned int SRC;             //Your ID in the ring
+unsigned int DEST;            //Who's after you in the ring
+unsigned int NUM_BOTS;        //How many robots are in the ring
+
+unsigned int CHARGESTATION;     //0 If robot, 1 if Charging Station
+
+unsigned int wl_to_max;         //Timeout maximum (threshold)
+
+//Counts how many times the robot before you times out
+unsigned int wl_to_death_count;
+unsigned char wl_to_death_flag;   //If the one before you times out too much
+
+char first_time;
+char wl_wait_for_turn;
+
+/* Functions */
+void bom_test(void);
+void wl_adhoc(void);
+
+void wl_init(void);
+
+void wl_send(void);
+void parse_buffer(void);
+void wl_timeout_handler(void);
+
+//Prints out debug information
+void display_debug(void);
+
+//Removes Dead robot from network
+void wl_death_handler( void );
+//Chooses an error and deals with it
+void wl_error_handler(unsigned char ecode);
+
+//Generic Packet
+void wl_create_packet(void);
+//Data Packet
+void wl_create_data_packet(unsigned char d0, unsigned char d1, 
+                           unsigned char d2);
+
+//Generic Error Packet
+void wl_create_error_packet(unsigned char errcode);
+//Compute the checksum and stores it for a packet
+void wl_make_checksum( void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/robot_routine_reg_test.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/robot_routine_reg_test.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/robot_routine_reg_test.c	(revision 62)
@@ -0,0 +1,54 @@
+/** @file robot_route_reg_test.c
+ * @author Eugene Marinelli
+ * @brief Tests function registration in the colonet.h robot library
+ */
+
+#include <firefly+_lib.h>
+
+#include <colonet_robot/colonet.h>
+#include <serial.h>
+
+#include "wl_adhoc.h"
+
+void f0_handler(void)
+{
+  static int color = 0;
+  color = !color;
+
+  if (color) {
+    orb_set(0,255,0);
+  } else {
+    orb_set(255,0,255);
+  }
+  
+  buzzer_init();
+  delay_ms(200);
+  buzzer_off();
+}
+
+int main(void) {  
+  analog_init();
+  led_init();
+  orb_init();
+  motors_init();
+  buzzer_init();
+  lcd_init();
+  wl_init();
+
+  serial_init(BAUD115200);
+  serial1_init(BAUD115200);
+  
+  fdevopen(&serial1_putchar, &serial1_getchar);
+
+  orb_set(255,0,0);
+  
+  colonet_add_message(0xF0, f0_handler);
+  
+  orb_set(0,0,255);
+
+  while(1){
+    parse_buffer();
+  }
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/lights.c	(revision 62)
@@ -0,0 +1,104 @@
+/*
+lights.c
+Controls led_user (small green LED) and the ORB (big light)
+
+author: CMU Robotics Club, Colony Project
+*/
+
+//#include "lights.h"
+#include "firefly+_lib.h"
+
+// the below comment may not be correct
+// Initializes timer2 to count every 0.5 us, overflowing every 16.32 ms (because we set the counter to start at 0x8000)
+void orb_init() 
+{
+
+	//enable the data direction register on the 3 orb LEDs
+	DDRE |= _BV(REDLED) | _BV(GREENLED) | _BV(BLUELED);
+	
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+	TCCR3B = 0x0C;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+
+// clear Output Compare Registers
+	OCR3AH=0x00;
+	OCR3AL=0x00;
+	OCR3BH=0x00;
+	OCR3BL=0x00;
+	OCR3CH=0x00;
+	OCR3CL=0x00;
+}
+
+// Sets the red, green and blue elements of the LED with 8-bit resolution
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	OCR3AL = red_led;
+	OCR3BL = green_led;
+	OCR3CL = blue_led;
+}
+
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+void orb_disable()
+{
+	TCCR3A = 0x01;  // COM## disconnected, WGM 1:0 set to 1
+}
+
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+}
+
+
+/*
+This function turns each Orb element on or off
+Useful for using the Orb for debugging purposes without
+the overhead of the software PWM routine used for color fading.
+*/
+void orb_set_dio(int red, int green, int blue) 
+{
+	if(red == 0)
+		PORTE &= (0xFF - _BV(REDLED));
+	else
+		PORTE |= _BV(REDLED);
+	
+	
+	if(green == 0)
+		PORTE &= (0xFF - _BV(GREENLED));
+	else
+		PORTE |= _BV(GREENLED);
+		
+	
+	if(blue == 0)
+		PORTE &= (0xFF - _BV(BLUELED));
+	else
+		PORTE |= _BV(BLUELED);
+}
+
+
+/////////////////////////////////////////
+///////////    user LED   ///////////////
+/////////////////////////////////////////
+void led_init( void )
+{
+	DDRG |= _BV(USERLED);
+}
+
+void led_user(int value) 
+{
+	if(value == 0) 
+		PORTG &= (0xFF - _BV(USERLED)); 
+	else
+		PORTG |= _BV(USERLED);
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/ring_buffer.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/ring_buffer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_routine_reg_test/ring_buffer.h	(revision 62)
@@ -0,0 +1,118 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs None known.
+ */
+
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+	} __VA_ARGS__
+
+#define RING_BUFFER_BIT_NEW(struct_name, size, ...)	\
+	struct struct_name {	\
+		int8_t queue[(size / 8) + 1];	\
+		uint16_t start;	\
+		uint16_t end;	\
+	} __VA_ARGS__
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+#define RING_BUFFER_BIT_CLEAR(buf) RING_BUFFER_CLEAR(buf)
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+
+#define RING_BUFFER_BIT_EMPTY(buf) RING_BUFFER_EMPTY(buf)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % sizeof((buf).queue) == (buf).start)
+
+#define RING_BUFFER_BIT_FULL(buf) RING_BUFFER_FULL(buf)
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % sizeof((buf).queue);	\
+	} while (0)
+
+#define RING_BUFFER_BIT_ADD(buf, val)	\
+	do {								\
+		if (val) {						\
+			(buf).queue[((buf).end >> 3) & 0xff] |= _BV((buf).end & 0x7);	\
+		}								\
+		else {							\
+			(buf).queue[((buf).end >> 3) & 0xff] &= ~_BV((buf).end & 0x7);	\
+		}								\
+		(buf).end = ((buf).end + 1) % (sizeof((buf).queue) << 3);			\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % sizeof((buf).queue);	\
+	} while (0)
+
+#define RING_BUFFER_BIT_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = ((buf).queue[((buf).start >> 3) & 0xff] & _BV((buf).start & 0x7)) ? 1 : 0;	\
+		(buf).start = ((buf).start + 1) % (sizeof((buf).queue) << 3);	\
+	} while (0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lights.h	(revision 62)
@@ -0,0 +1,91 @@
+/*
+lights.h
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+//user LED
+#ifdef FFPP
+
+#define USERLED 15
+#define USERLED1 15
+#define USERLED2 31
+
+#else
+
+#define USERLED PING2
+#define USERLED1 PING2
+#define USERLED2 PING2 //only have 1
+
+//LEDs are on bank E
+#define REDLED   PE3
+#define GREENLED PE4
+#define BLUELED  PE5
+
+#endif
+
+//ORB
+#define RED       0xE0
+#define ORANGE    0xE8
+#define YELLOW    0xFC
+#define LIME      0x7C
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0x63
+#define PURPLE    0x23
+#define MAGENTA   0xE3
+#define WHITE     0xFF
+#define ORB_OFF   0x00
+
+
+
+//?
+#define COUNT_START 0x8000
+
+
+//user LED
+void led_init( void );
+void led_user(int value);
+
+
+// For function descriptions see orb.c 
+void orb_init(void);
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led); 
+void orb_set_color(int col);
+void orb_disable(void);
+void orb_enable(void);
+
+void orb_set_dio(int red, int green, int blue);
+
+#ifdef FFPP
+int orbs[32];
+
+//send now
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led);
+
+//force send
+void orb_send(void);
+
+void tlc5940test(void);
+
+void tlc_clock1(int data);//may not need these 2
+void tlc_clock2(int data);
+
+void tlc_send(void);
+void tlc_latch(void);
+
+
+void tlc5940init(void);
+#endif
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/motor.c	(revision 62)
@@ -0,0 +1,107 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+#ifndef FFPP
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = 0xA1;
+	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+#else
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution at a frequency of
+	// PWM is mode 1, Freq = Clock I/O/1024. 
+	// OC1A and OC1B as pwm.
+	OCR1A = 0x00;
+	OCR1B = 0x00;
+	
+	PORTD &= 0x0F;
+	DDRD |= 0xF0;
+	DDRB |= 0x60;
+	
+	TCCR1A = 0xA1;
+	TCCR1B = 0x05;
+#endif
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x10;
+		PORTD &= 0xBF;
+	}
+	else {
+		PORTD |= 0x40;
+		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+#else
+
+	if(direction == FORWARD) {
+		PORTD = (PORTD & 0xCF) | 0x20;
+	}
+	else {
+		PORTD = (PORTD & 0xCF) | 0x10;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1A = speed;
+#endif
+
+}
+
+void motor2_set(int direction, int speed) {
+#ifndef FFPP
+	if(direction == 0) {
+		PORTD |= 0x20;
+		PORTD &= 0x7F;
+	}
+	else {
+		PORTD |= 0x80;
+		PORTD &= 0xDF;
+	}
+	OCR1BL = speed;
+#else
+
+	if(direction != FORWARD) {
+		PORTD = (PORTD & 0x3F) | 0x80;
+	}
+	else {
+		PORTD = (PORTD & 0x3F) | 0x40;
+	}
+	
+	OCR1B = speed;
+#endif
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/follow.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/follow.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/follow.c	(revision 62)
@@ -0,0 +1,47 @@
+
+#include "firefly+_lib.h"
+#include "follow.h"
+
+#define FWD 0
+#define BCK 1    
+
+#define TOTAL 16
+
+
+/*
+int find_max
+returns the index of the BOM with the highest reading
+* note: index, not value
+*/
+
+void seek(int relative_position) 
+{
+	int speed = 255;
+	
+	//MOTOR1 - left
+	//MOTOR2 - right
+	
+	if(relative_position < 5 || relative_position > 13)
+	{ //turn right
+		motor2_set(BCK, 0);
+		motor1_set(FWD, speed);
+	}
+	else if(relative_position > 5 && relative_position <= 13)
+	{ //turn left
+		motor2_set(FWD, speed);
+		motor1_set(BCK, 0);
+	}
+	else 
+	{ //go forward
+		//turn_off_motors();
+		motor1_set(FWD, speed);
+		motor2_set(FWD, speed);
+	}
+}
+
+void drive_forward (void)
+{
+    int speed = 255;
+    motor1_set(FWD, speed);
+    motor2_set(FWD, speed);
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/wireless.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/wireless.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/wireless.h	(revision 62)
@@ -0,0 +1,32 @@
+#ifndef WIRELESS_H
+#define WIRELESS_H
+
+/*
+Wireless - wireless functions for Colony
+
+Eugene Marinelli
+7/22/06
+*/
+
+#define WL_MSG_MAX_LEN 16
+#define WL_PACKET_MAX_LEN (WL_MSG_MAX_LEN+5)
+
+#define GLOBAL_DEST 200
+
+typedef struct {
+  char prefix[2];
+  char src;
+  char dest;
+  char msg[WL_MSG_MAX_LEN];
+  char checksum;
+} WL_Packet;
+
+int wl_init(int msg_len, char listener_address);
+int wl_send(char* msg, char dest);
+int wl_recv(char* msgbuf, char* src, char* dest);
+// get most recent valid message - implement message queue later
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet);
+char wl_get_checksum(WL_Packet* packet);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/motor.h	(revision 62)
@@ -0,0 +1,43 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+#define FORWARD 1
+#define BACKWARD 0
+
+#ifdef FFPP
+
+#define IN1A PD4
+#define IN1B PD5
+#define IN2A PD6
+#define IN2B PD7
+
+/* truth table for this robot (w/ 17529 and nand gates)
+PWM	!A	!B	M+	M-
+L	X	X   Z	Z  - coast
+H	0	0	Z	Z  - coast
+H	0	1	1	0  - forward
+H	1	0	0	1  - backward
+H	1	1	0	0  - fast brake
+
+*/
+
+
+
+
+#endif
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off( void );
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/follow.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/follow.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/follow.h	(revision 62)
@@ -0,0 +1,9 @@
+
+#ifndef _FOLLOW_H
+#define _FOLLOW_H
+
+
+void seek(int velocity);
+void drive_forward (void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/robot_receiver.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/robot_receiver.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/robot_receiver.c	(revision 62)
@@ -0,0 +1,55 @@
+/*
+Eugene Marinelli 
+7/22/06
+*/
+
+/* Includes */
+#include <stdio.h>
+#include <string.h>
+ 
+#include <firefly+_lib.h>
+#include "pindefs_ff.h"
+
+#include <wireless.h>
+
+void init_hardware(void);
+
+/* Main */
+int main(void){
+  char buf[80];
+  char src, dest;
+  
+  init_hardware();
+  wl_init(15,1);
+
+  orb_set_color(BLUE);
+
+  while(1){
+    if(wl_recv(buf, &src, &dest)){
+      printf("%s", buf);
+      orb_set_color(RED);
+    }else{
+      printf(".");
+      orb_set_color(BLUE);
+    }
+
+    wl_send("ABC", 200); 
+
+    delay_ms(500);
+  }
+  
+  return 0;
+}
+
+void init_hardware(){
+  motors_init();
+  orb_init();
+  led_init();
+  analog_init();
+  
+  serial_init(BAUD9600);
+  serial1_init(BAUD115200);
+  lcd_init();
+
+  fdevopen(&serial1_putchar, &serial1_getchar);
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/serial.c	(revision 62)
@@ -0,0 +1,143 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	author: Robotics Club, Colony Project
+	
+	much code taken from FWR's library, author: Tom Lauwers
+	
+	
+	general note - serial -> uart
+				   serial1 -> uart1
+		this is done for clarity purposes
+*/
+
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+//setup uart0 (serial)
+void serial_init(unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR0H = 0x00;
+	UBRR0L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+}
+
+// uart_putchar - Low-level function which puts a value into the 
+// Tx buffer for transmission.  Automatically injects
+// a \r before all \n's
+int serial_putchar(char c)
+{
+
+    if (c == '\n')
+		putchar('\r');
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR0A, UDRE0);
+	// Load buffer with your character
+    UDR0 = c;
+    return 0;
+}
+
+// uart_getchar - Low-level function which waits for the Rx buffer
+// to be filled, and then reads one character out of it.
+// Note that this function blocks on read - it will wait until
+// something fills the Rx buffer.
+int serial_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+    c = UDR0;
+	return c;
+}
+
+// uart_getchar_nb - Low-level function which checks if the Rx buffer
+// is filled, and then reads one character out of it.
+// This is a non blocking version uart_getchar
+int serial_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR0A, RXC0);
+	if (UCSR0A & _BV(RXC0)){
+		// Read the receive buffer
+		c = UDR0;
+		return c;
+	}
+	return 0;
+		
+}
+
+//setup uart1 (serial1)
+void serial1_init( unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR1H = 0x00;
+	UBRR1L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  /* For use with fprintf() and related functions */
+  serial1_stream = fdevopen(serial1_putchar, serial1_putchar);
+  
+  /* To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); 
+     This call to fdevopen() does give a compile warning
+  but works fine.
+  -Greg Tress
+  */
+}
+
+//put to uart1 (serial1)
+int serial1_putchar(char c)
+{
+
+    if (c == '\n')
+		serial1_putchar('\r'); //changed from putchar aj
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR1A, UDRE1);
+	// Load buffer with your character
+    UDR1 = c;
+    return 0;
+}
+
+//get from uart1 (serial1)
+int serial1_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+    c = UDR1;
+	return c;
+}
+
+//get from uart1 non-block
+int serial1_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR1A, RXC1);
+	if (UCSR1A & _BV(RXC1)){
+		// Read the receive buffer
+		c = UDR1;
+		return c;
+	}
+	return 0;
+		
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/buzzer.c	(revision 62)
@@ -0,0 +1,76 @@
+/*
+	buzzer.c - Contains the functions necessary for running the buzzer
+	
+	author: Robotics Club, Colony Project
+	
+	much taken from FWR's firefly library (author: Tom Lauwers)
+
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/*
+initializes buffer
+
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+	// Set pin D7 to output - D7 is buzzer pin
+	DDRB |= 0x80;
+	
+	// Set to Fast PWM mode, toggle the OC0A pin (D6) on output compare
+	// matches, and select a clock prescalar of 64 for the counter.
+	// Counter FREQ = 8000000/64 = 125000
+	//01011000
+	TCCR2 = 0x1B;
+	OCR2=100;
+	
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+	int buzz_value;
+	
+	buzz_value = 62500/buzz_freq - 1;
+
+	if(buzz_value > 255)
+		buzz_value = 255;
+	else if(buzz_value < 0)
+		buzz_value = 0;
+	
+	buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{	
+	buzzer_set_freq(buzz_freq);
+	
+	delay_ms(ms);
+		
+	buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off() 
+{
+	// Disable clock, to halt counter
+	TCCR2 &= 0xF8;
+	
+	// Set buzzer pin low in case it's high
+	PORTB &= 0x7F;
+}
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/serial.h	(revision 62)
@@ -0,0 +1,49 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// Tested baud rates
+#define BAUD9600    103
+#define BAUD115200  8  //Warning--3.5% error
+
+// Untested baud rates that might be right --aaron
+#define BAUD1M	     0
+#define BAUD500K     1
+#define BAUD250K     3
+#define BAUD230400   3   //Warning--8.5% error
+#define BAUD76800    12
+#define BAUD57600    16  //Warning--2.1% error
+#define BAUD38400    25
+#define BAUD28800    34
+#define BAUD19200    51
+#define BAUD14400    68
+#define BAUD4800     207
+#define BAUD2400     416  //Might not work, since it needs some high bits set
+
+#include <stdio.h>
+FILE *serial1_stream;  //For use with fprintf() and related functions
+
+  /* NOTE: To use fprintf():
+  After calling serial1_init(BAUD115200); 
+  use the command fprintf(serial1_stream, "Hello World"); */
+
+// Function descriptions are available in serial.c
+
+//serial (serial0) is the ttl serial (wireless)
+void serial_init( unsigned int ubrr);
+int serial_putchar(char c);
+int serial_getchar(void);
+int serial_getchar_nb(void);
+
+//serial1 is the rs-232 port (db9 connector) (except on robot0 where both are serial0)
+void serial1_init( unsigned int ubrr);
+int serial1_putchar(char c);
+int serial1_getchar(void);
+int serial1_getchar_nb(void);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/buzzer.h	(revision 62)
@@ -0,0 +1,33 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+	
+	
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/localization.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/localization.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/localization.c	(revision 62)
@@ -0,0 +1,84 @@
+#include "localization.h"
+
+#include "firefly+_lib.h"
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/Makefile	(revision 62)
@@ -0,0 +1,519 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = robot_receiver
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 9600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+#AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/localization.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/localization.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/localization.h	(revision 62)
@@ -0,0 +1,28 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+
+
+typedef struct{
+    //actual row of sensor values -- need to be able to have up to
+    //max_robots
+    unsigned char row[MAX_ROBOTS];
+    //actual length of the row
+    unsigned char len;
+    //'index' value of the row -- which robot it's for
+    unsigned char row_num;
+    
+ } SensorRow;
+ 
+ 
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS);
+ 
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/servo.c	(revision 62)
@@ -0,0 +1,132 @@
+/*  
+	servo.c - Contains functions and interrupts necessary to activate servos
+	author:  Tom Lauwers
+	
+	3/1/06 Iain
+		Man, I don't know what a servo is. 
+*/
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <servo.h>
+#include <dio.h>
+#include <lights.h>
+#include <lcd.h>
+//1677.7216 c/ms
+//i dunno must be 2^k
+//250
+//9C40 ~ 20ms
+//#A000 ~ 20.48 but prolly wont work
+//div by 256: 6.55078125 c/ms 80 ~ 19.5ms
+#define SERVO_PERIOD 0x80
+//needs be 1ms
+//is 1.22ms
+#define SERVO_CONSTANT 0x8
+
+/* dirty dirty
+unsigned int servo_vals[4] = {0,0,0,0}; // Stores the set servo values
+int current_servo = 0;  // Stores which servo is current in the interrupt routine
+*/
+unsigned int servo_vals[8] = {0,0,0,0,0,0,0,0}; // Stores the set servo values
+int phase_time=0;
+int phase_base=0;
+int servos_on = 0;      // Stores which servos are enabled
+int servos_enabled=0; //which are high
+int servo_flag = 0;     // Stores whether or not servos are enabled
+
+/* Timer 1 output compare B interrupt.  Does the following:
+	Checks to see if the current servo is 4, in which case just need
+	to set low servo 3's signal and return.
+	Else, check to see if the current servo is enabled, and set it's signal high
+	Then, set the previous servo's signal low
+	Now, set the next output compare to occur for some time from now 
+	specified by the current servo's value
+*/
+SIGNAL (SIG_OUTPUT_COMPARE3B)
+{
+	lcd_putchar('i');
+	if(servo_flag == 0)
+		return;
+	
+	int i;
+	if(phase_time == 0){
+		lcd_putchar('p');
+		for(i=0;i<8;i++){
+			if(servos_on & _BV(i))
+				digital_output((_PORT_E << 3) +i,1);
+		}
+		servos_enabled = servos_on;
+		phase_base = OCR3B;
+	}
+
+	unsigned int min=~0;
+	for(i=0;i<8;i++){
+		if(_BV(i) & servos_enabled){
+			if(SERVO_CONSTANT*servo_vals[i] <= phase_time){
+				digital_output((_PORT_E << 3) + i,0);
+				servos_enabled &= ~_BV(i);
+			}
+			else if(SERVO_CONSTANT*servo_vals[i] < min) {
+				min = servo_vals[i];
+			}
+		}
+	}
+	if(!servos_enabled){
+		OCR3B = phase_base + SERVO_PERIOD;
+		phase_time = 0;
+	}
+	else {
+		OCR3B = phase_base + min;
+		phase_time = min;
+	}
+	
+}	
+
+void init_servo()
+{
+	//1010 1001
+	TCCR3A = 0; 
+	//0000 0100
+	TCCR3B = 0x4;  //prescaler to 256
+	TCCR3C=0;
+	lcd_init();
+	ETIMSK |= 0x08;
+	servo_flag = 1;
+	OCR3B = 0x0;
+	lcd_putchar('i');
+}
+
+// Enable a servo specified by config
+void enable_servo(int config)
+{
+	servos_on |= _BV(config);
+}
+
+// Disable a servo specified by config
+void disable_servo(int config)
+{
+	servos_on &= (0xFF-_BV(config));
+}
+
+// Disables the timer1 interrupt, disabling the servos
+void disable_servos()
+{
+	// Disables interrupts
+	ETIMSK &= ~0x08;
+	servo_flag=0;
+
+}
+
+// Enables the timer1 interrupt, enabling the servos
+void enable_servos()
+{
+	// Enable interrupts on output compare B
+	ETIMSK |= 0x08;
+	servo_flag=1;
+}
+// Set a servo to a value.  Automatically enables the servo.
+void set_servo(int servo, unsigned int value)
+{
+	enable_servo(servo);
+	servo_vals[servo] = value;
+}
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/time.c	(revision 62)
@@ -0,0 +1,100 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <help.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/*
+void rtc_init(void)
+call this function to start the real time timer
+use rtc() to get the time value and rtc_resest() to reset
+
+requires global interrupts to be enabled for proper use
+(I bit of SREG register should be set)
+
+uses TIMER0 on asynchronous mode
+*/
+
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void)){
+	int mask = _BV(TCN0UB) + _BV(OCR0UB) + _BV(TCR0UB);
+	char tmp;
+	
+	TIMSK &= ~(_BV(OCIE0) + _BV(TOIE0)); //1. disable interrupts
+	ASSR |= _BV(AS0); //2. selecting clock source (external)
+	
+	//3. writing new values to TCCR, TCNT, OCR
+	TCNT0 = 0;
+	OCR0 = ocr_val;
+	TCCR0 = (0x01 << 3) + (prescale_opt & 0x07); //setting CTC mode, prescaler is lowest 3 bits
+	
+	//4. waiting for busy bits to clear
+	tmp = ASSR;
+	while( tmp & mask ){
+		tmp = ASSR;
+	}
+	
+	TIFR &= ~(_BV(OCF0) + _BV(TOV0)); //5. clearing the interrupt flags
+	TIMSK |= _BV(OCIE0); // + _BV(TOIE0); //6. enabling interrupts
+	
+	_rtc_f = rtc_func;
+}
+
+int rtc(void){
+	return _rtc_val;
+}
+
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+SIGNAL (SIG_OUTPUT_COMPARE0){
+	_rtc_val++;
+	
+	if(_rtc_f != 0)
+		_rtc_f();
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/analog.c	(revision 62)
@@ -0,0 +1,134 @@
+/*
+	analog.c - Contains the function implementations for manipulating the ADC
+	on the firefly+ board
+	
+	author:  CMU Robotics Club, Colony Project
+	code mostly taken from fwr analog file (author: Tom Lauwers)
+*/
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+void analog_init(void){
+
+	/*
+		ADC Status Register A
+		Bit 7 - ADEN is set (enables analog)
+		Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+		Bit 5 - Enable Auto Trigger (for free running mode)
+		Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+		Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 16,000,000/128
+	*/
+	ADCSRA |= 0xEF;
+
+	/*
+		ADMUX register
+		Bit 7,6 - Set voltage reference to AVcc (0b01)
+		Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+		Bit 4 - X
+		Bit 3:0 - Sets the current channel
+	*/
+	ADMUX = 0x67;
+	
+	#ifdef FFPP
+	DDRA |= 0x70;
+	set_adc_mux(0x07);
+	#endif
+	
+}	
+
+#ifdef FFPP
+void set_adc_mux(int which)
+{
+  // A4..A6 set mux to port 0-7 via binary selection
+  
+  // mask so only proper bits are possible.
+  which &= 0x07;
+  PORTA &= 0x8F;
+  PORTA |= which << 4;
+}
+
+void enable_analog(int analog_setting)	//why do we need this?
+{
+	// Digital input disable - don't disable any of them
+	// Set any of the lower six bits to a 1 to disable that bit
+	DDRF = 0x00; //ALL_ANALOG;
+}
+#endif
+
+unsigned int analog8(int which){
+
+#ifdef FFPP
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)		//Why dont we combine this and the above?
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(10);
+	}
+
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+
+	_delay_ms(1); // need at least 130 us between conversions (for fwr robot, how much for new avr?)
+	return ADCH;
+}
+
+unsigned int analog10(int which){
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+	
+
+
+#ifdef FFPP
+
+	if(which < EXT_MUX)
+	{
+		ADMUX = 0x60 + which;
+	}
+	else if(which == EXT_MUX)		//Why dont we combine this and the above?
+	{
+		return 0;
+	}
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(10);
+	}
+
+
+#else
+	ADMUX = 0x60 + which;
+#endif
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void){
+	return analog8(WHEEL_PORT);
+}
+
+int battery(void){
+	return analog8(BATT_PORT) * 500 >>7; /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/firefly+_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/firefly+_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/firefly+_lib.c	(revision 62)
@@ -0,0 +1,179 @@
+#include <firefly+_lib.h>
+#include <rangefinder.h>
+
+void button_test ( void);
+void motor_test (void);
+void serial_test( void );
+void lcd_test(void);
+void orb_test( void );
+void batt_test(void);
+void pullup_test(void);
+void ranger_test(void);
+
+/*
+int main( void ) {
+//	orb_init();
+	//motors_init();
+	tlc5940test();
+	//ranger_test();
+	//pullup_test();
+	//serial_test();
+	//lcd_test();
+	
+ orb_set_num(2, 255,0,0);
+	motor_test();
+ orb_set_num(3, 255,0,0);
+	return 0;
+}*/
+
+
+void ranger_test( void )
+{
+	lcd_init();
+	
+	while(1) {
+		lcd_clear_screen();
+		lcd_putint(linearize_distance(read_distance(PIN_C0)));
+		delay_ms(100);
+	
+	}
+
+}
+
+void button_test ( void) 
+{
+
+	lcd_init();
+	
+	while(1) {
+	
+	
+		if(button1_read())
+			lcd_putchar('1');
+		if(button2_read())
+			lcd_putchar('2');
+			
+		delay_ms(100);
+		
+	}
+
+
+
+}
+void motor_test (void) {
+
+	motors_init();
+	//led_init();
+	
+	motor1_set(1, 255);
+	motor2_set(1, 255);
+	
+	delay_ms(10000);
+	
+	motors_off();
+	led_user(1);
+	
+	
+	while(1);
+
+
+
+}
+void orb_test( void ) {
+	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	
+	
+	while(1) {
+		orb_set_color(orbs[orb_select]);
+		delay_ms(1000);
+		orb_select++;
+		if(orb_select == 14)
+			orb_select = 0;
+	}
+
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i;
+	lcd_init();
+	
+	for(i = 32; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+	}
+	
+	
+	return;
+	
+}
+
+/*
+prints all printable characters to the serial
+
+baud rate is 115200
+*/
+void serial_test( void ) {
+	int i;
+	
+	serial1_init(BAUD115200);
+	fdevopen(&serial1_putchar,&serial1_getchar);
+	for(i = 32; i <= 126; i++) {
+		printf("%d",i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+void pullup_test()
+{
+	lcd_init();
+	lcd_putstr("pullup test");
+	delay_ms(100);
+	
+	digital_pull_up(PIN_A4);
+	digital_pull_up(PIN_A5);
+	digital_pull_up(PIN_A6);
+	digital_pull_up(PIN_A7);
+	while(1){
+		lcd_clear_screen();
+		if(!digital_input(PIN_A4))
+			lcd_putchar('0');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A5))
+			lcd_putchar('1');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A6))
+			lcd_putchar('2');
+		else
+			lcd_putchar(' ');
+		if(!digital_input(PIN_A7))
+			lcd_putchar('3');
+		else
+			lcd_putchar(' ');
+		delay_ms(100);
+	}
+}
+
+void batt_test()
+{
+	lcd_init();
+
+	analog_init();
+
+	while(1){
+		lcd_clear_screen();
+		lcd_putint(battery());
+		delay_ms(1000);
+	}
+}
+
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lcd.c	(revision 62)
@@ -0,0 +1,264 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+#include "oled.h"
+
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+	{ 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+
+#ifdef FFPP
+
+	OLED_init();
+
+#else
+
+	LCDDDR |= (D_C | SCE | SDI | SCK);
+	LCDRESETDDR |= RST;
+
+	LCDPORT &= ~(D_C | SCE | SDI | SCK);
+	
+	SPCR |= 0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+#endif
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+
+#ifdef FFPP
+	drawclear();
+#else
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+#endif
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+
+#ifndef FFPP
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+#endif
+
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+
+#ifndef FFPP
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+#endif
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+
+#ifndef FFPP
+  LCDPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDPORT |= D_C;
+#endif
+
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+	return;
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/servo.h	(revision 62)
@@ -0,0 +1,16 @@
+/*  
+	servo.h - Contains function prototypes for servo activation
+	author:  Tom Lauwers
+*/
+#ifndef _SERVO_H_
+#define _SERVO_H_
+
+// Information on functions available in servo.c
+void init_servo(void);
+void enable_servos(void);
+void enable_servo(int config);
+void set_servo(int servo, unsigned int value);
+void disable_servos(void);
+void disable_servo(int );
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/time.h	(revision 62)
@@ -0,0 +1,58 @@
+/*
+time.h
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#define TIMER_OFF         0x00
+#define PRESCALE_NONE     0x01
+#define PRESCALE_DIV_8    0x02
+#define PRESCALE_DIV_32   0x03
+#define PRESCALE_DIV_64   0x04
+#define PRESCALE_DIV_128  0x05
+#define PRESCALE_DIV_256  0x06
+#define PRESCALE_DIV_1024 0x07
+
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void));
+
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/move.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/move.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/move.c	(revision 62)
@@ -0,0 +1,86 @@
+//Created 4/30/06 by James Kong
+
+#include "firefly+_lib.h"
+//#include "pindefs_ff.h"
+#include "move.h"
+
+/*
+Move and turn functions are overloaded so they can be called with or without the speed or time parameters.
+If called wihtout parameters, the defaults will be used.
+*/
+
+//Forward
+void moveForward(void) {
+	motor1_set(FWD, NRML_SPD);
+	motor2_set(FWD, NRML_SPD);
+	delay_ms(DELAY_F);
+}
+
+/*void moveForward(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_F);
+}
+
+void moveForward(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}
+*/
+//Back
+void moveBack(void) {
+	motor1_set(BCK, HALF_SPD);
+	motor2_set(BCK, HALF_SPD);
+	delay_ms(DELAY_B);
+}
+/*
+void moveBack(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_B);
+}
+
+void moveBack(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Left
+void turnLeft(void) {
+	motor1_set(FWD, NRML_TURN);
+	motor2_set(BCK, NRML_TURN);
+	delay_ms(DELAY_L);
+}
+/*
+void turnLeft(int speed) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(DELAY_L);
+}
+
+void turnLeft(int speed, int time) {
+	motor1_set(FWD, speed);
+	motor2_set(BCK, speed);
+	delay_ms(time);
+}
+*/
+//Turn Right
+void turnRight(void) {
+	motor1_set(BCK, NRML_TURN);
+	motor2_set(FWD, NRML_TURN);
+	delay_ms(DELAY_R);
+}
+/*
+void turnRight(int speed) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(DELAY_R);
+}
+
+void turnRight(int speed, int time) {
+	motor1_set(BCK, speed);
+	motor2_set(FWD, speed);
+	delay_ms(time);
+}*/
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/analog.h	(revision 62)
@@ -0,0 +1,95 @@
+/*
+	analog.h - Contains definitions and function prototypes for using the
+	ADC to detect analog signals on pins AN0 - AN7
+	AN6 and AN7 are used for the wheel and battery
+	
+	The pins labeled E6 and E7 are external interrupt pins and are not related to analog
+	
+	author: CMU Robotics Club, Colony Project
+	code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+
+#ifdef FFPP
+#define AN8 0x08
+#define AN9 0x09
+#define ANA 0x0A
+#define ANB 0x0B
+#define ANC 0x0C
+#define AND 0x0D
+#define ANE 0x0E
+#define ANF 0x0F
+
+#define EXT_MUX   0x07
+#define IR_READ   0x08
+#define IR1_READ  0x08
+#define IR2_READ  0x09
+#define IR3_READ  10
+#define IR4_READ  11
+#define IR5_READ  12
+#define ADC_BATT  13
+#define ADC_WHEEL 14
+#define ADC_3V3   15
+
+#define WHEEL_PORT ANE
+#define BATT_PORT AND
+
+#else
+
+#define WHEEL_PORT AN6
+#define BATT_PORT  AN7
+
+#endif
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+#ifdef FFPP
+ void enable_analog(int analog_setting);
+void set_adc_mux(int which);
+#endif
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/firefly+_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/firefly+_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/firefly+_lib.h	(revision 62)
@@ -0,0 +1,33 @@
+/*
+
+firefly+_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+#ifndef _FIREFLY_LIB_H_
+#define _FIREFLY_LIB_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+//#include <avr/signal.h>
+#include <avr/interrupt.h>
+//#include <avr/delay.h>
+#include <util/delay.h>
+
+#include <analog.h>
+#include <dio.h>
+
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <servo.h>
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lcd.h	(revision 62)
@@ -0,0 +1,84 @@
+#ifndef _LCD_H_
+#define _LCD_H_
+
+#ifndef FFPP
+
+//////lcd defines
+#define RST 0x04  // pe2 (GPIO)
+#define SCE 0x01  // pb0 (~SS)
+#define D_C 0x10  // pb4 (GPIO?)
+#define SDI 0x04  // pb2 (MOSI)
+#define SCK 0x02  // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTE
+#define LCDRESETDDR DDRE
+
+#else
+	
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow);
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+inline void drawclear(void);
+
+void drawscroll(char hoff, char srow, char rows, char speed);
+inline void drawscrollstart(void);
+inline void drawscrollstop(void);
+
+void drawIR(void);
+
+void crazycircle (void);
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+
+#endif
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/pindefs_ff.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/pindefs_ff.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/pindefs_ff.h	(revision 62)
@@ -0,0 +1,54 @@
+// Motors
+#define RIGHT 0 /* PIN_D0 output */
+#define LEFT  1 /* PIN_D1 output */
+
+// Sensors
+
+/// Monkey
+/* analog input */
+#define MONKI AN0 /* input */
+//#define MONKI 0x00 /* input */
+
+//white
+#define MONK0 PIN_C4 /*0b01100*/ /* output          A4           <-  */
+//blue
+#define MONK1 PIN_C3 /*0b01011*/ /* output          A3           <-  */
+//green - on/off
+#define MONKL PIN_C2 /*0b01010*/ /* output          A2           <-  */
+
+//white2
+#define MONK2 PIN_C6 /*0b01110*/ /* white output 		A6	*/
+//blue2
+#define MONK3 PIN_C5 /*0b01101*/ /* blue output		A5   */
+
+
+//old constants
+
+//data pin
+//#define MONKI 0 /* PIN_A5  input */
+
+//white
+//#define MONK0 3/* PIN_E0 output */
+//blue
+//#define MONK1 2/* PIN_E1 output */
+//white2
+//#define MONK2 5/* PIN_D2 white output */
+//blue2
+//#define MONK3 4/* PIN_D3 blue output */
+
+//green - on/off
+//#define MONKL 1/*PIN_E2 output */
+
+/// Bump
+//#define BMPBL PIN_D4 /* input */
+//#define BMPBR PIN_D5 /* input */
+//#define BMPFL PIN_D6 /* input */
+//#define BMPFR PIN_D7 /* input */
+
+/// Other Sensors
+//#define PYRO  0 /* PIN_A0 input */
+//#define RANGE 1 /* PIN_A1 input */
+
+// Wireless
+//#define RXPOW 2 /* PIN_A2 input */
+//#define TX_EN PIN_A3 /* output */ //// might be trouble
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/move.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/move.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/move.h	(revision 62)
@@ -0,0 +1,34 @@
+#define FWD 0
+#define BCK 1
+
+#define DELAY_F 250
+#define DELAY_B 750
+#define DELAY_R 500
+#define DELAY_L 500
+
+#define SLOW_SPD 96
+#define HALF_SPD 128
+#define NRML_SPD 160
+#define FAST_SPD 192
+#define FULL_SPD 255
+
+#define SLOW_TURN 64
+#define NRML_TURN 96
+#define FAST_TURN 128
+
+void moveForward(void);
+//void moveForward(int speed);
+//void moveForward(int speed, int time);
+
+void moveBack(void);
+//void moveBack(int speed);
+//void moveBack(int speed, int time);
+
+void turnLeft(void);
+//void turnLeft(int speed);
+//void turnLeft(int speed, int time);
+
+void turnRight(void);
+//void turnRight(int speed);
+//void turnRight(int speed, int time);
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/dio.c	(revision 62)
@@ -0,0 +1,312 @@
+/* 
+
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+	the first 3 (abc in this example) are used to select the bank
+		A = 001
+		B = 010
+		C = 011
+		D = 100
+		E = 101
+		F = 110
+		G = 111
+		
+		the bank can be found by doing portpin >> 3
+		
+	the next 3 (def in this example) are used to select the pin number
+	the 3 bits are just the binary representation of the pin number
+		0 = 000
+		1 = 001
+		2 = 010
+		3 = 011
+		4 = 100
+		5 = 101
+		6 = 110
+		7 = 111
+		
+		the pin number can be found by doing portping & 0b111
+		
+
+*/
+
+#include <avr/interrupt.h>
+
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+/*
+digital_input
+
+reads the value on the selected portpin, returns it as 1 or 0
+see general description (above) for definition of portpin
+
+*/
+int digital_input(int portpin){
+	int pin = portpin & 0x7;
+	int pin_val = 0;
+	
+	switch(portpin >> 3){
+		case _PORT_A:
+			DDRA &= ~_BV(pin);
+			pin_val = PINA;
+			return (pin_val >> pin) & 1;
+		case _PORT_B:
+			DDRB &= ~_BV(pin);
+			pin_val = PINB;
+			return (pin_val >> pin) & 1;
+		case _PORT_C:
+			DDRC &= ~_BV(pin);
+			pin_val = PINC;
+			return (pin_val >> pin) & 1;
+		case _PORT_D:
+			DDRD &= ~_BV(pin);
+			pin_val = PIND;
+			return (pin_val >> pin) & 1;
+		case _PORT_E:
+			DDRE &= ~_BV(pin);
+			pin_val = PINE;
+			return (pin_val >> pin) & 1;
+		case _PORT_F:
+			if(pin>=4){
+				MCUSR|=1<<7;
+				MCUSR|=1<<7;
+			}
+			DDRF &= ~_BV(pin);
+			pin_val = PINF;
+			return (pin_val >> pin) & 1;
+		case _PORT_G:
+			DDRG &= ~_BV(pin);
+			pin_val = PING;
+			return (pin_val >> pin) & 1;
+		default: break;
+	}
+	
+	return -1;
+}
+
+/*
+digital_pull_up
+Enables pullup on a pin.  if pin is output, it will make it output 1.
+
+*/
+void digital_pull_up(int portpin) {
+	int pins = portpin & 0x07;
+	
+
+	switch(portpin >> 3) {
+		case _PORT_A:
+			PORTA |= _BV(pins);
+			break;
+		case _PORT_B:
+			PORTB |= _BV(pins);
+			break;		
+		case _PORT_C:
+			PORTC |= _BV(pins);
+			break;		
+		case _PORT_D:
+			PORTD |= _BV(pins);
+			break;		
+		case _PORT_E:
+			PORTE |= _BV(pins);
+			break;		
+		case _PORT_F:
+			PORTF |= _BV(pins);
+			break;		
+		case _PORT_G:
+			PORTG |= _BV(pins);
+			break;
+	}
+	
+}
+
+/*
+digital_output
+
+sets portpin to the value
+
+see general description above for explanation of portpin
+
+val can only be 0 for off, nonzero for on
+*/
+void digital_output(int portpin, int val) {
+	int pins = portpin & 0x07;
+	
+	/*
+	if you want to set to 0
+	*/
+	if(val == 0) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA &= (0XFF - _BV(pins));
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG &= (0XFF - _BV(pins));
+				break;
+		}
+	}
+	else { /* ( val == 1) */ 
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA |= _BV(pins);
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB |= _BV(pins);
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC |= _BV(pins);
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD |= _BV(pins);
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE |= _BV(pins);
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF |= _BV(pins);
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG |= _BV(pins);
+				break;
+		}
+	}
+}
+
+
+
+
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	//return (BTN & (_BV(BTN1)) >> BTN1);
+	return (PIN_BTN >> BTN1) & 1;
+}
+
+/*
+similar to button1_read, but hold program until the button is actually pressed
+*/
+void button1_wait( void )
+{
+	while(!button1_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+/*
+same as button1_wait
+However, blink the led while waiting
+
+IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+void button1_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button1_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	return (PIN_BTN >> BTN2) & 1;
+}
+
+void button2_wait( void )
+{
+	while(!button2_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+void button2_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button2_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+	putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/dio.h	(revision 62)
@@ -0,0 +1,183 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+
+/*
+
+these are ALL the pins
+don't use unless you know what you're doing
+
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32
+#define _PIN_D1 33
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42
+#define _PIN_E3 43
+#define _PIN_E4 44
+#define _PIN_E5 45
+#define _PIN_E6 46
+#define _PIN_E7 47
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+
+#ifndef FFPP
+#define PIN_WHEEL 54
+#define PIN_BATT 55
+#endif
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+
+#ifndef FFPP
+#define PIN_LED1 58
+#endif
+
+int digital_input(int);
+void digital_output(int bit, int val);
+void digital_pull_up(int);
+
+///////////////////////
+//////  BUTTONS  //////
+///////////////////////
+#define PIN_BTN PING
+
+#define BTN2 PING1
+#define BTN1 PING0
+
+int button1_read( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/oled.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/oled.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/oled.c	(revision 62)
@@ -0,0 +1,394 @@
+#ifdef FFPP
+#include "firefly+_lib.h"
+/******************************************************************************/
+/*  OLED example.   8 bit mode                                           */
+/*      Spark Fun Electronics   5/3/06   OSO                                 */
+/******************************************************************************/
+/*                                                                            */
+/*    STOLEN and hacked to work with SPI, AVR     		                        */
+/******************************************************************************/
+
+// data bus for LCD, pins on port 0
+//#define D0 16
+//#define D1 17
+//#define D2 18
+//#define D3 19
+//#define D4 20
+//#define D5 21
+//#define D6 22
+//#define D7 23
+
+// OLED data port
+//#define LCD_DATA 0x00FF0000
+
+// other OLED pins
+//#define LCD_RW    0x00000080
+#define LCD_RS    PB4 // Command/Data
+//#define LCD_RD    0x00008000
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor) {
+	write_c(0x86);
+	write_d(col);
+	write_d(row);
+	write_d(radius);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor) {
+	write_c(0x84);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+	write_d(fcolor>>8);
+	write_d(fcolor&0xf);
+}
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor) {
+	write_c(0x83);
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+	write_d(lcolor>>8);
+	write_d(lcolor&0xf);
+}
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) {
+	write_c(0x8A);
+	write_d((ecol>scol)?scol:ecol);
+	write_d((erow>srow)?srow:erow);
+	write_d((ecol<scol)?scol:ecol);
+	write_d((erow<srow)?srow:erow);
+	write_d(ncol);
+	write_d(nrow);
+}
+
+void drawfill(char fill) {
+	write_c(0x92);    // fill enable command
+	write_d(0x01&fill); 
+}
+
+void drawclearwindow(char scol, char srow, char ecol, char erow) {
+	write_c(0x8e);    // clear window command
+	write_d(scol);
+	write_d(srow);
+	write_d(ecol);
+	write_d(erow);
+}
+
+inline void drawclear(void) {
+	drawclearwindow(0,0,130,130);
+}
+
+void drawscroll(char hoff, char srow, char rows, char speed) {
+	write_c(0x96);
+	write_d(hoff);
+	write_d(srow);
+	write_d((srow+rows>132)?132:rows);
+	write_d(0x00);
+	write_d(speed&0x3);
+	
+}
+
+inline void drawscrollstart(void) {
+	write_c(0x9F);
+}
+
+inline void drawscrollstop(void) {
+	write_c(0x9E);
+}
+
+#define ROBOSIZE 4
+
+#include "rangefinder.h"
+
+void drawIR(void) {
+/*	char d;
+	enable_IR();
+	drawclear();
+	delay_ms(500);
+	drawfill(1);
+	
+	delay_ms(10);
+
+	drawcircle(64,64-ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawcircle(64,64+ROBOSIZE,ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+	drawrect(64-ROBOSIZE,64-ROBOSIZE,64+ROBOSIZE,64+ROBOSIZE,C_BLUE,C_BLUE);
+	delay_ms(20);
+
+	while(1){
+		
+		d=(convert_IR_distance(read_IR_val(1))-100)>>4;
+		if(d>63-ROBOSIZE*2){
+			d=0;//63-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(63, 0, 65, 63-ROBOSIZE*2);
+		drawline(64,63-ROBOSIZE*2-d,64,63-ROBOSIZE*2,C_RED);
+		delay_ms(5);
+		
+		
+		
+		
+
+		d=(convert_IR_distance(read_IR_val(0))-100)/11;
+		if(d>62-ROBOSIZE){
+			d=0;//64-ROBOSIZE*2;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 0, 63-ROBOSIZE, 63-ROBOSIZE);
+		delay_ms(5);	
+		drawline(63-ROBOSIZE-d,63-ROBOSIZE-d,63-ROBOSIZE,63-ROBOSIZE,C_RED);
+		//delay_ms(25);	
+		delay_ms(5);
+		
+		
+
+//		d=(convert_IR_distance(read_IR_val(2))-100)/11;
+//		if(d>64){
+//			d=0;//64-ROBOSIZE*2;
+//		}
+//		delay_ms(100);	
+	
+//		drawclearwindow(65+ROBOSIZE,0, 128,128);
+//		delay_ms(5);	
+//		drawline(128-(65+ROBOSIZE+d),128-(65+ROBOSIZE-d),65+ROBOSIZE,(65-ROBOSIZE),C_RED);
+//		drawline(64,64-d,64+d,64,C_RED);
+		//delay_ms(25);	
+//		delay_ms(5);
+		
+		
+		
+		
+		
+		
+		d=(convert_IR_distance(read_IR_val(4))-100)>>4;
+		if(d>64-ROBOSIZE){
+			d=0;//64-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(0, 63+ROBOSIZE, 63-ROBOSIZE, 65+ROBOSIZE);
+		drawline(64-ROBOSIZE-d,64+ROBOSIZE,63-ROBOSIZE,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+
+		d=(convert_IR_distance(read_IR_val(3))-100)>>4;
+		if(d>128-65-ROBOSIZE){
+			d=0;//128-65-ROBOSIZE;
+		}
+//		delay_ms(100);	
+	
+		drawclearwindow(65+ROBOSIZE, 63+ROBOSIZE, 127, 65+ROBOSIZE);
+		drawline(65+ROBOSIZE,64+ROBOSIZE,65+ROBOSIZE+d,64+ROBOSIZE,C_RED);
+		delay_ms(5);
+		
+	}
+*/
+}
+
+void crazycircle (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+/*      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+	  */
+	  drawcircle(rand() % 130,rand() % 130,rand() %64, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void crazyrect (void) {
+  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+
+	  drawrect(rand() % 130,rand() % 130,rand() % 130,rand() % 130, rand(),rand());
+
+      delay_ms(10);
+  }
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  drawclear();
+
+ delay_ms(100);
+  
+  drawfill(1);
+  
+  delay_ms(10);
+
+//  crazycircle();
+  
+//  delay_ms(500);
+  
+ // drawscroll(1,0,50,1);
+  //drawscrollstart();
+  //delay_ms(1000);
+  //drawscrollstop();
+  //drawcopy(0,0,100,100,50,50);
+ // delay_ms(100);
+//  drawfill(0);
+  //drawcircle(64,64,16,C_RED,C_GREEN);
+//  drawcircle(64,64,15,C_RED,C_GREEN);
+//  drawcircle(64,64,14,C_RED,C_GREEN);
+  
+  drawIR();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/rangefinder.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/rangefinder.c	(revision 62)
@@ -0,0 +1,183 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "firefly+_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+int read_distance (int range_id) {  
+#ifndef FFPP
+	int bitcount;
+	int current = 0;
+	digital_output(RANGE_CTRL, 0);						//set Vin Low
+	while(digital_input(range_id) == 0);				//waits until Vout reads high
+	digital_output(RANGE_CTRL, 1);						//first Vin clock high transition
+	
+	for(bitcount = 8; bitcount != 0; bitcount--){
+		digital_output(RANGE_CTRL, 0);					//Vin clock low transition
+		//clock delay (unnecessary)
+		current = current << 1;							//shifts current 8-bit value left
+		current |= digital_input(range_id);				//LSB set to Vout value
+		digital_output(RANGE_CTRL, 1);					//Vin clock high transition
+		//clock delay (unnecessary)
+	}													//repeats until all 8 bits are stored
+	return current;
+#else
+	enable_IR();
+	_delay_ms(5);										///////Figure out what this should be!!!!!!  Maybe if not enabled already?
+	return read_IR_val(range_id);
+#endif
+}
+
+/*
+linearize_distance converts an 8-bit rangefinder reading to a centimeter measurement (truncated to an integer)
+parameters:
+reading - 8-bit rangefinder reading
+
+OFFSET, GAIN, and THRESHOLD are experimentally determined constants
+The conversion is a piecewise defined function with a continuity fix at reading = THRESHOLD3
+
+NOTE:
+This function is ugly, but it gets the job done without spending a huge amount processing.
+Ideally, you want to compare with the read_distance value directly.
+*/
+
+int linearize_distance (int reading) {
+#ifndef FFPP
+	int temp = reading;
+	if(reading >  THRESHOLD1){
+		temp = temp - OFFSET1;
+		return GAIN1 / temp;
+	}else if(reading > THRESHOLD2){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp + 1;
+	}else if(reading > THRESHOLD3){
+		temp = temp - OFFSET2;
+		return GAIN2 / temp;
+	}else if(reading == THRESHOLD3){
+		return CONTINUITY_FIX;
+	}else if(reading > THRESHOLD4){
+		temp = temp - OFFSET3;
+		return GAIN3 / temp;
+	}else{
+		return MAX_DIST;
+	}
+#else
+	return convert_IR_distance(reading);
+#endif
+}
+
+/*
+log_distance converts a centimeter value to a rangefinder comparable value
+parameters:
+distance - centimeter measurement
+
+NOTE:
+This is still incomplete, do not use it.
+*/
+int log_distance(int distance) {
+#ifndef FFPP
+	if(distance >= MAX_DIST){
+		return THRESHOLD4;
+	}
+	if(distance <= MIN_DIST){
+		return 255;
+	}	
+
+	switch(distance){			//Incomplete need to fill out table
+	case 60:				
+		return 56;
+	case 59:
+		return 89;
+	}
+#endif
+	return 0;
+}
+
+
+#ifdef FFPP
+
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+void enable_IR()
+{
+  // active low, so set enable to low to turn on IR
+  PORTC &= ~(_BV(IR_ENABLE));
+  DDRC |= _BV(IR_ENABLE);
+}
+
+void disable_IR()
+{
+  // active low, so set line high and turn to input for good measure (line has pull-up)
+  PORTC |= _BV(IR_ENABLE);
+  DDRC &= ~(_BV(IR_ENABLE));
+}
+
+int read_IR_val(int which)
+{
+  return analog8(IR_READ + which);
+}
+
+int convert_IR_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+int get_IR_distance(int which)
+{
+  return convert_IR_distance(read_IR_val(which));
+}
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/oled.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/oled.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/oled.h	(revision 62)
@@ -0,0 +1,82 @@
+#ifndef _OLED_H_
+#define _OLED_H_
+#ifdef FFPP
+
+#define C_BLUE 0x001f
+#define C_GREEN 0x07e0
+#define C_RED 0xf800 
+
+
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+//void RD(char stat);
+//void RW(char stat);
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+// a stupid delay
+//void delay_ms(int count);
+
+// LPC 2138 MCU initialization
+//void Initialize(void);
+//void feed(void);
+
+void drawcircle(char col, char row, char radius, int lcolor,  int fcolor);
+
+void drawrect(char scol, char srow, char ecol, char erow, int lcolor,  int fcolor);
+
+void drawline(char scol, char srow, char ecol, char erow, int lcolor);
+
+void drawcopy(char scol, char srow, char ecol, char erow, char ncol, char nrow) ;
+
+void drawfill(char fill);
+
+void drawclearwindow(char scol, char srow, char ecol, char erow);
+
+inline void drawclear(void) ;
+
+void drawscroll(char hoff, char srow, char rows, char speed) ;
+
+inline void drawscrollstart(void) ;
+inline void drawscrollstop(void) ;
+
+void drawIR(void);
+
+void crazycircle (void) ;
+
+void crazyrect (void) ;
+
+void OLEDtest (void) ;
+
+void OLED_init(void);
+
+void Reset_SSD1339(void);
+
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat);
+
+void RES(char stat);
+void CS(char stat);
+
+// send to the LCD
+void LCD_out(unsigned char cmd);
+
+
+#endif
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/rangefinder.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/rangefinder.h	(revision 62)
@@ -0,0 +1,70 @@
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+#define RANGE_IN0 PIN_C0
+//old range_in0
+//#define RANGE_IN0 PIN_AN5
+
+/*  These do not exist yet.
+#define RANGE_IN1 PIN_??
+#define RANGE_IN2 PIN_
+#define RANGE_IN3 PIN_
+#define RANGE_IN4 PIN_
+#define RANGE_IN5 PIN_
+#define RANGE_IN6 PIN_
+#define RANGE_IN7 PIN_
+*/
+
+#define RANGE_CTRL PIN_C1
+//old range_crtl
+//#define RANGE_CTRL PIN_A7
+
+#define THRESHOLD1 114
+#define THRESHOLD2 110
+#define THRESHOLD3 101
+#define THRESHOLD4 85
+#define OFFSET1 65
+#define OFFSET2 63
+#define OFFSET3 60
+#define GAIN1 1525
+#define GAIN2 1520
+#define GAIN3 1525
+#define CONTINUITY_FIX 39
+#define MAX_DIST 61
+
+#define MIN_DIST 8
+
+#ifdef FFPP
+// IR range finders are indexed 0-4.
+// IR1 is front left, IR2 is front center, IR3 is front right, IR4 is rear right, IR5 is rear left.
+
+// active low
+#define IR_ENABLE PC7
+
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+  
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+  
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+  
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+
+void enable_IR(void);
+void disable_IR(void);
+int read_IR_val(int);
+int convert_IR_distance(int);
+int get_IR_distance(int);
+#endif
+
+int read_distance(int range_id);
+int linearize_distance(int reading);
+int log_distance(int distance);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/photovore.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/photovore.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/photovore.h	(revision 62)
@@ -0,0 +1,25 @@
+#ifndef _PHOTOVORE_H_
+#define _PHOTOVORE_H_
+
+
+#define PHOTORESISTOR_LEFT AN1 //might be the opposite (Eugene)
+#define PHOTORESISTOR_RIGHT AN2
+
+//#define LIGHT_THRESHOLD 150 //hard coded for now...calculate dynamically later
+#define LIGHT_THRESHOLD 210 //hard coded for now...calculate dynamically later
+
+void do_photovore (void);
+unsigned char get_light_status (unsigned char me);
+void set_light_status (unsigned char robot, unsigned char lightstatus);
+
+
+void sense_light (void);
+inline char light_threshold(void);
+
+
+//define an array of length MAX_ROBOTS that has
+//1 if robot at index i can see the light, and 0
+//if it cannot
+//unsigned char robot_enlightenment[MAX_ROBOTS];
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/lights.c	(revision 62)
@@ -0,0 +1,355 @@
+/*
+lights.c
+Controls led_user (small green LED) and the ORB (big light)
+
+author: CMU Robotics Club, Colony Project
+*/
+
+#include "lights.h"
+#include "firefly+_lib.h"
+
+// the below comment may not be correct
+// Initializes timer2 to count every 0.5 us, overflowing every 16.32 ms (because we set the counter to start at 0x8000)
+void orb_init() 
+{
+#ifndef FFPP
+	//enable the data direction register on the 3 orb LEDs
+	DDRE |= _BV(REDLED) | _BV(GREENLED) | _BV(BLUELED);
+	
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+	TCCR3B = 0x0C;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+
+// clear Output Compare Registers
+	OCR3AH=0x00;
+	OCR3AL=0x00;
+	OCR3BH=0x00;
+	OCR3BL=0x00;
+	OCR3CH=0x00;
+	OCR3CL=0x00;
+
+#else
+	tlc5940init();	
+#endif
+}
+
+// Sets the red, green and blue elements of the LED with 8-bit resolution
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+#ifdef FFPP
+	orbs[28]=blue_led<<4;
+	orbs[29]=green_led<<4;
+	orbs[30]=red_led<<4;
+	tlc_send();
+#else
+	OCR3AL = red_led;
+	OCR3BL = green_led;
+	OCR3CL = blue_led;
+#endif
+}
+
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+void orb_disable()
+{
+#ifndef FFPP
+	TCCR3A = 0x01;  // COM## disconnected, WGM 1:0 set to 1
+#endif
+}
+
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+#ifndef FFPP
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+#else
+	tlc5940init();
+#endif
+}
+
+
+/*
+This function turns each Orb element on or off
+Useful for using the Orb for debugging purposes without
+the overhead of the software PWM routine used for color fading.
+*/
+void orb_set_dio(int red, int green, int blue) 
+{
+#ifdef FFPP
+	orb_set(red*255, green*255, blue*255);
+#else
+	if(red == 0)
+		PORTE &= (0xFF - _BV(REDLED));
+	else
+		PORTE |= _BV(REDLED);
+	
+	
+	if(green == 0)
+		PORTE &= (0xFF - _BV(GREENLED));
+	else
+		PORTE |= _BV(GREENLED);
+		
+	
+	if(blue == 0)
+		PORTE &= (0xFF - _BV(BLUELED));
+	else
+		PORTE |= _BV(BLUELED);
+#endif
+}
+
+
+/////////////////////////////////////////
+///////////    user LED   ///////////////
+/////////////////////////////////////////
+void led_init( void )
+{
+#ifdef FFPP
+	tlc5940init();
+#else
+	DDRG |= _BV(USERLED);
+#endif
+}
+
+void led_user(int value) 
+{
+#ifdef FFPP
+	orbs[USERLED]=value*4095;
+	tlc_send();
+#else
+	if(value == 0) 
+		PORTG &= (0xFF - _BV(USERLED)); 
+	else
+		PORTG |= _BV(USERLED);
+#endif
+}
+
+
+
+
+
+#ifdef FFPP
+//no send
+void orb_set_num_ns(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	int high = (num>4);
+	orbs[3*num+high]=blue_led<<4;
+	orbs[3*num+1+high]=green_led<<4;
+	orbs[3*num+2+high]=red_led<<4;
+}
+
+void orb_set_num(unsigned char num, unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	orb_set_num_ns(num,red_led,green_led,blue_led);
+	tlc_send();
+}
+
+
+void orb_send(){
+	tlc_send();
+}
+
+void tlc_clock1(int data)
+{
+  PORTC &= ~0x02;
+  PORTC |= (data << 1)&0x02;
+  _delay_us(1);
+  PORTC |= 0x04;
+  _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_clock2(int data)
+{
+  PORTC &= ~0x01;
+  PORTC |= (data)&0x01;
+ // _delay_us(1);
+  PORTC |= 0x04;
+ // _delay_us(1);
+  PORTC &= ~0x04;
+}
+
+void tlc_send(void)
+{
+  int i,j;
+  for(j = 15; j >= 0; j--)
+  {
+    for(i = 11; i >= 0; i--)
+    {
+      PORTC &= ~0x03;
+      PORTC |= ((orbs[j]>>i)&0x01);
+      PORTC |= ((orbs[j+16]>>i)<<1)&0x02;
+      // _delay_us(1);
+      PORTC |= 0x04;
+      // _delay_us(1);
+      PORTC &= ~0x04;
+    }
+  }
+  PORTC |= 0x08;
+  PORTC &= ~(0x08);
+}
+/*
+void tlc_send2(int value)
+{
+  int i;
+  
+  for(i = 11; i >= 0; i--)
+  {
+    tlc_clock2(0x01 & (value >> i));
+  }
+}*/
+
+void tlc_latch(void)
+{
+  PORTC |= 0x08;
+//  _delay_us(1);
+  PORTC &= ~(0x08);
+}
+
+void tlc5940init(void)
+{
+  int i;
+  
+  // set PC0...5 to outputs
+  DDRC |= 0x3F;
+  DDRE |= 0x08;
+  DDRA |= 0x80;
+  // unblank buffer
+  PORTC &= ~0x10;
+ 
+  // set DC mode so we start in known state
+  PORTC |= 0x20;
+  delay_ms(2);
+  
+  // set DC to all 1's?  needed?
+/*  for(i = 0; i < 96; ++i)
+  {
+    tlc_clock1(1);
+  }
+  tlc_latch();
+  */
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  
+  delay_ms(2);
+
+  // set GS mode
+  PORTC &= ~0x20;
+
+  // clock in 0s to do init case
+/*  for(i = 0; i < 16; ++i)
+  {
+    tlc_send1(0);
+  }  
+  tlc_latch();*/
+  for(i=0;i<32;i++)
+  {
+    orbs[i]=4095;
+  }
+  tlc_send();
+  // extra clock needed after DC -> GS transition
+  tlc_clock1(0);
+  tlc_clock2(0); //probably not needed
+  
+  TCCR3A |=_BV(COM3A0);
+  TCCR3B |= _BV(CS30)|_BV(WGM32); //prescaler
+  OCR3A = 1;
+  TCNT3 = 0;
+ // ETIMSK |=_BV(OCIE3A);//interrupt
+
+
+  TCCR2 = 0x05; //prescaler
+  TIMSK |= _BV(OCIE2);//interrupt
+  OCR2 = 16;
+  TCNT2 = 0;
+  sei();
+  
+}
+
+//int blankcounter = 0;
+char status = 0;
+
+ISR(TIMER2_COMP_vect){
+//	int i = 0;
+	//status=!status;
+	//if(status){
+		PORTC |= 0x10;
+//		for(i=0;i<1;i++);
+		PORTC &= ~0x10;
+//	}
+	
+	TCNT2=0;
+	//chirp(250, 150);
+}
+
+void silly_clock(void)
+{
+ /* int i;
+  
+  DDRA |= 0x80;
+  
+  PORTC |= 0x10;
+  _delay_us(1);
+  
+  for(i = 0; i < 4095; ++i)
+  {
+    PORTA |= 0x80;
+    _delay_us(1);
+    PORTA &= ~(0x80);
+	_delay_us(1);
+  }
+  */
+//  delay_ms(1);
+}
+
+void tlc5940test()
+{
+  int j, k;
+  
+  tlc5940init();
+
+	// fade up
+	for(j = 0; j < 4096; ++j)
+	{
+		  
+	  //tlc_send1(j);
+
+	  for(k = 0; k < 8; ++k)
+	  {
+      orbs[2*k]=4096-j;
+      orbs[2*k+1]=j;     
+      orbs[2*k+16]=0;
+      orbs[2*k+17]=j;
+	  }
+	  tlc_send();
+	}
+	
+	delay_ms(1000);
+	
+	// fade down
+	for(j = 0; j < 4096; ++j)
+	{
+	
+	  //tlc_send(4095 - j);
+
+	  for(k = 0; k < 32; ++k)
+	  {
+      orbs[k]=4096-j;
+    }
+	  tlc_send();
+	}
+}
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/help.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/help.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/help.h	(revision 62)
@@ -0,0 +1,31 @@
+#include "serial.h"
+
+char helper(char c){
+	switch(c){
+		case 0x00: return '0';
+		case 0x01: return '1';
+		case 0x02: return '2';
+		case 0x03: return '3';
+		case 0x04: return '4';
+		case 0x05: return '5';
+		case 0x06: return '6';
+		case 0x07: return '7';
+		case 0x08: return '8';
+		case 0x09: return '9';
+		case 0x0A: return 'A';
+		case 0x0B: return 'B';
+		case 0x0C: return 'C';
+		case 0x0D: return 'D';
+		case 0x0E: return 'E';
+		case 0x0F: return 'F';
+		default: return '?';
+	}
+}
+
+void print_hex(char val){
+	char hgh = (val & 0xF0) >> 4;
+	char low = (val & 0x0F);
+	
+	serial1_putchar(helper(hgh));
+	serial1_putchar(helper(low));
+}
Index: branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/wireless.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/wireless.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/dongle/robot_receiver/wireless.c	(revision 62)
@@ -0,0 +1,248 @@
+/*
+Wireless
+Eugene Marinelli
+
+(See .h for details)
+*/
+
+/* Includes */
+#include <firefly+_lib.h>
+#include <string.h>
+#include <avr/interrupt.h>
+
+#include "wireless.h"
+
+/* Constants */
+#define PREFIX0 'R'
+#define PREFIX1 'C'
+
+//wl_buf positions
+#define WL_SRC_LOC 2
+#define WL_DEST_LOC 3
+#define WL_DATA_START 4
+
+#define WL_TIMEOUT 4
+#define WL_TIMEOUT_INITIAL 4
+
+/* Globals */
+static char wl_buf[WL_PACKET_MAX_LEN];
+static WL_Packet latest_packet;
+static WL_Packet tmp_packet;
+static char new_message;
+static char listener_addr;
+
+static int message_length;
+
+static unsigned int wl_index;
+static unsigned char wl_chksum;
+static unsigned char wl_to_flag;
+static unsigned int wl_to_count;
+
+static unsigned int wl_to_max;
+
+static char first_time;
+
+/* Internal function headers */
+static void wl_timeout_handler(void);
+
+/* External function definitions */
+int wl_init(int msg_len, char listener_address){
+  if(msg_len > WL_MSG_MAX_LEN){
+    printf("Error: %s: message length must be less than %d\n", __FUNCTION__, 
+	   WL_MSG_MAX_LEN);
+    return -1;
+  }
+
+  message_length = msg_len;
+
+  listener_addr = listener_address;
+
+  wl_index = 0;
+  wl_chksum = 1;
+  
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+  /* executes the function about every 1/4 sec */
+
+  wl_to_flag = 0;
+  wl_to_count = 0; 
+
+  first_time = 1;
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+  
+  sei();
+
+  new_message = 0;
+  memset(&latest_packet, 0, sizeof(WL_Packet));
+
+  return 0;
+}
+
+int wl_send(char* msg, char dest){
+  int i = 0;
+  WL_Packet packet;
+
+  if(strlen(msg) > WL_MSG_MAX_LEN){
+    printf("Error: %s: message is too long\n", __FUNCTION__);
+    return -1;
+  }
+
+  wl_create_packet(msg, listener_addr, dest, &packet);
+
+  serial_putchar(packet.prefix[0]);
+  serial_putchar(packet.prefix[1]);
+  serial_putchar(packet.src);
+  serial_putchar(packet.dest);
+
+  for(i = 0; i < message_length; i++){
+    serial_putchar(packet.msg[i]);
+  }
+
+  serial_putchar(packet.checksum);
+
+  //printf("%x %x %x %x", packet.prefix[0], packet.prefix[1], packet.src, 
+  //	 packet.dest);
+
+  return 0;
+}
+
+int wl_recv(char* msgbuf, char* src, char* dest){
+  if(!new_message){
+    return 0; //no new message
+  }
+
+  strcpy(msgbuf, latest_packet.msg);
+
+  *src = latest_packet.src;
+  *dest = latest_packet.dest;
+  
+  new_message = 0;
+
+  return strlen(msgbuf);
+}
+
+char wl_get_checksum(WL_Packet* packet){
+  char checksum = 0;
+  int i;
+
+  checksum += packet->src;
+  checksum += packet->dest;
+  for(i = 0; i < message_length; i++) {
+    checksum += packet->msg[i];
+  }
+
+  return checksum;
+}
+
+int wl_create_packet(char* msg, char src, char dest, WL_Packet* packet){
+  packet->prefix[0] = 'R';
+  packet->prefix[1] = 'C';
+
+  packet->src = src;
+  packet->dest = dest;
+
+  memset(packet->msg, 0, message_length);
+  strcpy(packet->msg, msg);
+
+  packet->checksum = wl_get_checksum(packet);
+
+  return 0;
+}
+
+/* Internal function definitions */
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV){
+  char wl_input = UDR0;
+
+  /* LOCAL HACK!!! */
+  //orb_set_color(ORANGE);
+  //printf("%x ", wl_input);
+  lcd_putint(wl_input);
+
+  if(wl_index == 0){
+    //first packet? - check chksum to make sure we're not beginning
+    if(wl_input == PREFIX0) {
+      wl_to_count = 0; //at this point we're not timing out
+      wl_index = 1;
+    }
+  }else if(wl_index == 1){
+    if(wl_input != PREFIX1){
+      wl_index = 0;
+    }else{
+      wl_index = WL_SRC_LOC;
+    }
+  }else if(wl_index == WL_SRC_LOC){
+    tmp_packet.src = wl_input;
+    wl_index = WL_DEST_LOC;
+  }else if(wl_index == WL_DEST_LOC){
+    tmp_packet.dest = wl_input;
+    wl_index = WL_DATA_START;
+  }else if(wl_index < WL_DATA_START + message_length){
+    //getting the rest of the packet
+    tmp_packet.msg[wl_index-WL_DATA_START] = wl_input;
+    wl_index++;
+    
+    //printf("%d: %d; %d\n", wl_index, wl_input, wl_chksum);
+  }else if(wl_index == WL_DATA_START + message_length){
+    //we are at checksum location
+    tmp_packet.checksum = wl_input;
+    wl_chksum = wl_get_checksum(&tmp_packet);
+    
+    if(tmp_packet.checksum == wl_chksum) {
+      //checksum is correct
+      memcpy(&latest_packet, &tmp_packet, sizeof(WL_Packet));
+      new_message = 1;
+    } else { //chksum failed
+      serial1_putchar('F');
+      lcd_putchar('F');
+      
+      printf("checksum failed - was %d, should have been %d\n", wl_input, 
+	     wl_chksum);
+    }
+
+    wl_index = 0;
+  }
+}
+
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time one occurs.
+  In the case where a robot first turns on, it will wait for a long time before declaring itself the leader.
+  Otherwise, if enough time-outs occur in a row, wl_to_flag will be set to 1.  This will cause a timeout packet
+  to be sent next time around
+
+*/
+static void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  
+  static int wl_first_to_count =  0;
+  
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TIMEOUT_INITIAL) {
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+      
+      //you don't actually want to send out a packet 
+      //-- you would confuse other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+  } else {
+    //not the first time - regular time out routine
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT) {
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/testing/robot_dongle_test/robot_dongle_test.cpp
===================================================================
--- branches/charge_board/code/projects/colonet/testing/robot_dongle_test/robot_dongle_test.cpp	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/robot_dongle_test/robot_dongle_test.cpp	(revision 62)
@@ -0,0 +1,27 @@
+/**
+ * Eugene Marinelli
+ * 1/31/07
+ *
+ * robot_dongle_test - trying to figure out how to get bytes from the robot.
+ */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+int main()
+{
+  int fd = open("/dev/ttyS0", O_RDWR);
+  char buf[80];
+
+  while(1){
+    //write(fd, "0", 1);
+    if(read(fd, buf, 1)){
+      printf("%c\n", buf[0]);
+    }
+  }
+
+  close(fd);
+  
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonybfs.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonybfs.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonybfs.c	(revision 62)
@@ -0,0 +1,158 @@
+/*
+Colony BFS
+
+Felix Duvallet
+
+*/
+
+#include <stdio.h>
+#include <string.h>
+
+#include <firefly+_lib.h>
+#include <ring_buffer.h>
+
+#include "colonybfs.h"
+
+
+
+#define NO_VAL 0
+
+
+RING_BUFFER_NEW(Queue, MAX_ROBOTS, char, q);
+
+/*
+colony_bfs_find_leader -- given an adjacency matrix, with a start and end
+    robots, this will tell you which robot to follow next.  If no path exists,
+    it will return -1 (which may or may not go to 255 on the unsigned side
+    of things -- be wary).
+
+    It does find the entire path, perhaps someday I will make two function,
+    where find_leader calls bfs(..) and only uses the first element.
+    
+    I ported this code from a MATLAB test file (also in the libs_general folder),
+    and this has been tested on September 15, 2006 by Felix
+
+    Todo: change NO_VAL to 255 and reflect those changes in the localization code
+    
+Author: Felix Duvallet
+        CMU Robotics Club, Colony Project
+
+*/
+char colony_bfs_find_leader ( unsigned char matrix[MAX_ROBOTS][MAX_ROBOTS], 
+                                unsigned char start, unsigned char end ) {
+
+
+/*
+//pseudocode for BFS
+
+procedure bfs(v)
+    q := make_queue()
+    enqueue(q,v)
+    mark v as visited
+    while q is not empty
+        v = dequeue(q)
+        process v
+        for all unvisited vertices v' adjacent to v
+            mark v' as visited
+            enqueue(q,v')
+*/
+
+    // keep track of which nodes you have visited.  Indexed by robot #
+    // 1 if visited, 0 if not
+    unsigned char visited_nodes[MAX_ROBOTS];
+    // keep track of the distance from the start robot to other robots
+    // also indexed by robot#
+    unsigned char node_distances[MAX_ROBOTS];
+    // this is the path you take
+    unsigned char path[MAX_ROBOTS];
+    
+    //variables you will need
+    unsigned char current_node;                 //current node
+    unsigned char current_neighbour_node;       //neighbor to the current node
+    unsigned char current_neighbour_val;        //value of that neighbour's sensors
+    unsigned char current_distance;              //keep track of current distance to the start
+    unsigned char i;                            //counter variable
+    
+    char large_number = 255;
+
+    //set visited nodes to all 0
+    memset(visited_nodes, 0, MAX_ROBOTS);
+    //set all the distances to a very large number
+    //this isn't technically necessary, but it's probably a good thing -- just in case
+    memset(node_distances, large_number, MAX_ROBOTS);
+    
+    //set the path to all LARGE_NUMBER as well
+    memset(path, large_number, MAX_ROBOTS);
+
+    RING_BUFFER_CLEAR(q);
+
+    //add the start node
+    RING_BUFFER_ADD(q, start);
+    visited_nodes[start] = 1;
+    node_distances[start] = 0;
+    
+    while(!RING_BUFFER_EMPTY(q)){
+        RING_BUFFER_REMOVE(q, current_node);
+        
+        //get the current distance from you to the start
+        current_distance = node_distances[current_node];
+        
+        //this node is on your 'path'
+        path[current_distance] = current_node;
+        //note: it's OK if this path leads nowhere -- the path will be
+        //overwritten by a node that does lead to the goal
+        //(if there is no path, we set path to null anyways)
+        
+        //from now on, all further nodes will be one further away -- increment
+        current_distance++;
+        
+        
+        //process node -- basically check if it's the goal
+        if(current_node == end) {
+            //you reach the goal
+            //return the first robot in the path, which is the one
+            //to follow
+            lcd_putchar('.');
+            lcd_putchar('.');
+            for(i = 0; i < MAX_ROBOTS; i++)
+                lcd_putchar(path[i] +48);           //print out the path for fun -- remove this later
+            lcd_putchar('.');
+            lcd_putchar('.');
+            return path[1];         //path[0] is you.  path[1] is who you want to follow
+        }
+        
+        // go through all nodes adjacent to current
+        // in effect, this means going through the current node's row in the matrix
+        for(i = 0; i < MAX_ROBOTS; i++) {
+            //the robot # is actually just the index
+            current_neighbour_node = i;
+            //the value is what is stored in the matrix (this is important)
+            current_neighbour_val = matrix[current_node][i];
+            
+            //check for connected-ness and that it was not visited
+            //            unconnected                           visited
+            if( (current_neighbour_val == NO_VAL) || (visited_nodes[current_neighbour_node]) ) {
+                //if it is either unconnected or previously visited, exit
+                continue;   //go to the next node
+            }
+            
+            //update the distance from the start node to this node
+            node_distances[current_neighbour_node] = current_distance;
+            //also mark it as visited
+            visited_nodes[current_neighbour_node] = 1;
+            
+            //also enqueue each neighbour
+            RING_BUFFER_ADD(q, current_neighbour_node);
+        
+        }
+    }
+    
+    //if we get to here, there is no path
+    memset(path, 0, MAX_ROBOTS);
+    return -1;
+
+
+
+}
+
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lights.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lights.h	(revision 62)
@@ -0,0 +1,53 @@
+/*
+lights.h
+
+most of this is shamelessly copied from FWR's orb.h (Tom Lauwers and Steven Shamlian)
+
+author: CMU Robotics Club, Colony Project
+
+*/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+//user LED
+#define USERLED PING2
+
+//ORB
+#define RED       0xE0
+#define ORANGE    0xE8
+#define YELLOW    0xFC
+#define LIME      0x7C
+#define GREEN     0x1C
+#define CYAN      0x1F
+#define BLUE      0x03
+#define PINK      0x63
+#define PURPLE    0x23
+#define MAGENTA   0xE3
+#define WHITE     0xFF
+#define ORB_OFF   0x00
+
+//LEDs are on bank E
+#define REDLED   PE3
+#define GREENLED PE4
+#define BLUELED  PE5
+
+//?
+#define COUNT_START 0x8000
+
+
+//user LED
+void led_init( void );
+void led_user(int value);
+
+
+// For function descriptions see orb.c 
+void orb_init(void);
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led); 
+void orb_set_color(int col);
+void orb_disable(void);
+void orb_enable(void);
+
+void orb_set_dio(int red, int green, int blue);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/motor.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/motor.c	(revision 62)
@@ -0,0 +1,65 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/*
+motor initialization
+initializes both motors
+
+*/
+void motors_init( void ) {
+
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = 0xA1;
+	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+// The following functions set the motor direction and speed
+void motor1_set(int direction, int speed) {
+	if(direction == 0) {
+		PORTD |= 0x10;
+		PORTD &= 0xBF;
+	}
+	else {
+		PORTD |= 0x40;
+		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+}
+
+void motor2_set(int direction, int speed) {
+	if(direction == 0) {
+		PORTD |= 0x20;
+		PORTD &= 0x7F;
+	}
+	else {
+		PORTD |= 0x80;
+		PORTD &= 0xDF;
+	}
+	OCR1BL = speed;
+}
+
+// Just turns off both motors
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonybfs.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonybfs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonybfs.h	(revision 62)
@@ -0,0 +1,13 @@
+#ifndef COLONYBFS_H
+#define COLONYBFS_H
+
+/*
+Colony BFS - Performs breadth-first search on a colony adjacency matrix
+
+Felix Duvallet
+*/
+#include "localization.h"
+
+char colony_bfs_find_leader ( unsigned char matrix[MAX_ROBOTS][MAX_ROBOTS], unsigned char start, unsigned char end );
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/motor.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/motor.h	(revision 62)
@@ -0,0 +1,18 @@
+/*
+	motor.h - Contains the function prototypes for controlling motors
+	author:  Tom Lauwers
+*/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+
+// Function descriptions can be found in motor.c
+void motors_init(void);
+void motor1_set(int direction, int speed);
+void motor2_set(int direction, int speed);
+void motors_off( void );
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/serial.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/serial.c	(revision 62)
@@ -0,0 +1,132 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	author: Robotics Club, Colony Project
+	
+	much code taken from FWR's library, author: Tom Lauwers
+	
+	
+	general note - serial -> uart
+				   serial1 -> uart1
+		this is done for clarity purposes
+*/
+
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+//setup uart0 (serial)
+void serial_init(unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR0H = 0x00;
+	UBRR0L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+}
+
+// uart_putchar - Low-level function which puts a value into the 
+// Tx buffer for transmission.  Automatically injects
+// a \r before all \n's
+int serial_putchar(char c)
+{
+
+    if (c == '\n')
+		putchar('\r');
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR0A, UDRE0);
+	// Load buffer with your character
+    UDR0 = c;
+    return 0;
+}
+
+// uart_getchar - Low-level function which waits for the Rx buffer
+// to be filled, and then reads one character out of it.
+// Note that this function blocks on read - it will wait until
+// something fills the Rx buffer.
+int serial_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+    c = UDR0;
+	return c;
+}
+
+// uart_getchar_nb - Low-level function which checks if the Rx buffer
+// is filled, and then reads one character out of it.
+// This is a non blocking version uart_getchar
+int serial_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR0A, RXC0);
+	if (UCSR0A & _BV(RXC0)){
+		// Read the receive buffer
+		c = UDR0;
+		return c;
+	}
+	return 0;
+		
+}
+
+//setup uart1 (serial1)
+void serial1_init( unsigned int ubrr)
+{
+	/*Set baud rate - baud rates under 4800bps unsupported */
+	UBRR1H = 0x00;
+	UBRR1L = (unsigned char)ubrr;
+
+	/*Enable receiver and transmitter */
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+}
+
+//put to uart1 (serial1)
+int serial1_putchar(char c)
+{
+
+    if (c == '\n')
+		serial1_putchar('\r'); //changed from putchar aj
+	// Wait until buffer is clear for sending
+    loop_until_bit_is_set(UCSR1A, UDRE1);
+	// Load buffer with your character
+    UDR1 = c;
+    return 0;
+}
+
+//get from uart1 (serial1)
+int serial1_getchar(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+    c = UDR1;
+	return c;
+}
+
+//get from uart1 non-block
+int serial1_getchar_nb(void)
+{
+	char c;
+	// Wait for the receive buffer to be filled
+    //loop_until_bit_is_set(UCSR1A, RXC1);
+	if (UCSR1A & _BV(RXC1)){
+		// Read the receive buffer
+		c = UDR1;
+		return c;
+	}
+	return 0;
+		
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/buzzer.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/buzzer.c	(revision 62)
@@ -0,0 +1,76 @@
+/*
+	buzzer.c - Contains the functions necessary for running the buzzer
+	
+	author: Robotics Club, Colony Project
+	
+	much taken from FWR's firefly library (author: Tom Lauwers)
+
+*/
+
+#include <avr/io.h>
+#include "buzzer.h"
+#include "time.h"
+
+/*
+initializes buffer
+
+this function must be called before the buzzer can be used
+*/
+void buzzer_init( void )
+{
+	// Set pin D7 to output - D7 is buzzer pin
+	DDRB |= 0x80;
+	
+	// Set to Fast PWM mode, toggle the OC0A pin (D6) on output compare
+	// matches, and select a clock prescalar of 64 for the counter.
+	// Counter FREQ = 8000000/64 = 125000
+	//01011000
+	TCCR2 = 0x1B;
+	OCR2=100;
+	
+}
+
+// Set the buzzer value - takes a value from 0-255
+// Higher values are lower frequency.  Take a look at 
+// the buzzer frequency table to see how a given value
+// correlates to a frequency.
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	OCR2 = buzz_value;
+}
+
+// Set the buzzer frequency - takes any value and tries to find the nearest buzzer frequency
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+	int buzz_value;
+	
+	buzz_value = 62500/buzz_freq - 1;
+
+	if(buzz_value > 255)
+		buzz_value = 255;
+	else if(buzz_value < 0)
+		buzz_value = 0;
+	
+	buzzer_set_val(buzz_value);
+}
+
+// Chirps the buzzer for a number of milliseconds
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{	
+	buzzer_set_freq(buzz_freq);
+	
+	delay_ms(ms);
+		
+	buzzer_off();
+}
+
+// Disables timer0 clock counting, turning off the buzzer
+void buzzer_off() 
+{
+	// Disable clock, to halt counter
+	TCCR2 &= 0xF8;
+	
+	// Set buzzer pin low in case it's high
+	PORTB &= 0x7F;
+}
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/serial.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/serial.h	(revision 62)
@@ -0,0 +1,42 @@
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+// Tested baud rates
+#define BAUD9600    103
+#define BAUD115200  8  //Warning--3.5% error
+
+// Untested baud rates that might be right --aaron
+#define BAUD1M	     0
+#define BAUD500K     1
+#define BAUD250K     3
+#define BAUD230400   3   //Warning--8.5% error
+#define BAUD76800    12
+#define BAUD57600    16  //Warning--2.1% error
+#define BAUD38400    25
+#define BAUD28800    34
+#define BAUD19200    51
+#define BAUD14400    68
+#define BAUD4800     207
+#define BAUD2400     416  //Might not work, since it needs some high bits set
+
+// Function descriptions are available in serial.c
+
+//serial (serial0) is the main serial (DB9 connection)
+void serial_init( unsigned int ubrr);
+int serial_putchar(char c);
+int serial_getchar(void);
+int serial_getchar_nb(void);
+
+
+void serial1_init( unsigned int ubrr);
+int serial1_putchar(char c);
+int serial1_getchar(void);
+int serial1_getchar_nb(void);
+
+
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/buzzer.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/buzzer.h	(revision 62)
@@ -0,0 +1,33 @@
+/*
+	buzzer.h - Contains function prototypes for running the buzzer
+	
+	
+	author: Robotics Club, Colony Project
+*/
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+#define	C4	260 //Middle C
+#define	C4s	277 //C sharp
+#define	D4	294
+#define	D4s	311
+#define	E4	330
+#define	F4	349
+#define	F4s	370
+#define	G4	392
+#define	G4s	415
+#define	A4	440
+#define	A4s	466
+#define	B4	494
+#define	C5	523
+
+// Function descriptions can be found in buzzer.c
+void buzzer_init(void);
+void buzzer_set_val(unsigned int buzz_value);
+void buzzer_set_freq(unsigned int buzz_freq);
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+void buzzer_off(void); 
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/localization.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/localization.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/localization.c	(revision 62)
@@ -0,0 +1,84 @@
+#include "localization.h"
+
+#include "firefly+_lib.h"
+
+
+
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS)
+{
+    //make sure you don't add to the diagonal
+    if(self == other) {
+      //lcd_putchar('w');
+      return;
+    }
+    if(self >= NUM_BOTS || other >= NUM_BOTS)
+    {
+      // lcd_putchar('y');
+      return;
+    }
+    
+
+    //lcd_putchar('a');
+    //lcd_putchar(self+48);
+    //lcd_putchar(':');
+    //lcd_putchar(other+48);
+    //lcd_putchar('.');
+    //add this robot to your own row's sensor numbers
+    //row = your index
+    //column = robotNum (input)
+    sensors[self][other] = maxBom;
+
+}
+
+unsigned char getSelfSensor (unsigned char self, unsigned char other, int NUM_BOTS)
+{
+
+    if(other < NUM_BOTS){
+        return sensors[self][other];
+    }
+    else {
+        return 9;
+    }
+
+}
+
+/*
+void printSensorsMatrix (void)
+{
+
+
+    //print table
+    int y = 1;
+    lcd_gotoxy(0, y);
+    int i, j;
+    for(i = 0; i < NUM_BOTS; i++) {
+        for(j = 0; j < NUM_BOTS; j++) {
+            lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+            lcd_putchar(' ');
+        }
+        y++;
+        lcd_gotoxy(0, y);
+    }
+    
+    delay_ms(1000);
+    
+}
+*/
+
+/*
+SensorRow getSelfSensorRow (int self)
+{
+
+    SensorRow sr;
+    int i;
+    
+    sr.len = NUM_BOTS;
+    for(i = 0; i < NUM_BOTS; i++) {
+        sr.row[i] = sensors[
+
+
+
+}
+
+*/
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/Makefile
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/Makefile	(revision 62)
@@ -0,0 +1,509 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = wl_test
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = dwarf-2
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS = -DF_CPU=$(F_CPU)UL
+
+
+# Place -I options here
+CINCS =
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 9600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -F -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVE) .dep/*
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/localization.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/localization.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/localization.h	(revision 62)
@@ -0,0 +1,24 @@
+#ifndef _LOCALIZATION_H_
+#define _LOCALIZATION_H_
+
+// Max number of robots possible
+#define MAX_ROBOTS 4
+
+unsigned char sensors[MAX_ROBOTS][MAX_ROBOTS];
+
+typedef struct{
+  //actual row of sensor values -- need to be able to have up to
+  //max_robots
+  unsigned char row[MAX_ROBOTS];
+  //actual length of the row
+  unsigned char len;
+  //'index' value of the row -- which robot it's for
+  unsigned char row_num;
+  
+} SensorRow;
+
+void addSensor (int maxBom, int self, int other, int NUM_BOTS);
+unsigned char getSelfSensor (unsigned char self, unsigned char other, 
+			     int NUM_BOTS);
+ 
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/time.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/time.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/time.c	(revision 62)
@@ -0,0 +1,102 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+*/
+#include <avr/interrupt.h>
+#include <avr/signal.h>
+#include <avr/delay.h>
+#include "time.h"
+//#include "help.h"
+#include "serial.h"
+
+
+static volatile int _rtc_val = 0;
+static void (*_rtc_f)(void) = 0;
+
+/*
+delay_ms
+
+delays for ms milliseconds
+
+accuracy is unknown (off by tens of nanoseconds every 15 ms)
+*/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+void pause_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void pause(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep_ms(int ms)
+{
+	delay_ms(ms);
+}
+
+void sleep(int ms)
+{
+	delay_ms(ms);
+}
+
+/*
+void rtc_init(void)
+call this function to start the real time timer
+use rtc() to get the time value and rtc_resest() to reset
+
+requires global interrupts to be enabled for proper use
+(I bit of SREG register should be set)
+
+uses TIMER0 on asynchronous mode
+*/
+
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void)){
+	int mask = _BV(TCN0UB) + _BV(OCR0UB) + _BV(TCR0UB);
+	char tmp;
+	
+	TIMSK &= ~(_BV(OCIE0) + _BV(TOIE0)); //1. disable interrupts
+	ASSR |= _BV(AS0); //2. selecting clock source (external)
+	
+	//3. writing new values to TCCR, TCNT, OCR
+	TCNT0 = 0;
+	OCR0 = ocr_val;
+	TCCR0 = (0x01 << 3) + (prescale_opt & 0x07); //setting CTC mode, prescaler is lowest 3 bits
+	
+	//4. waiting for busy bits to clear
+	tmp = ASSR;
+	while( tmp & mask ){
+		tmp = ASSR;
+	}
+	
+	TIFR &= ~(_BV(OCF0) + _BV(TOV0)); //5. clearing the interrupt flags
+	TIMSK |= _BV(OCIE0); // + _BV(TOIE0); //6. enabling interrupts
+	
+	_rtc_f = rtc_func;
+}
+
+int rtc(void){
+	return _rtc_val;
+}
+
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+SIGNAL (SIG_OUTPUT_COMPARE0){
+	_rtc_val++;
+	
+	if(_rtc_f != 0)
+		_rtc_f();
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/servo.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/servo.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/servo.c	(revision 62)
@@ -0,0 +1,131 @@
+/*  
+	servo.c - Contains functions and interrupts necessary to activate servos
+	author:  Tom Lauwers
+	
+	3/1/06 Iain
+		Man, I don't know what a servo is. 
+*/
+#include <avr/io.h>
+#include <avr/signal.h>
+#include "servo.h"
+#include "dio.h"
+#include "lights.h"
+#include "lcd.h"
+//16000 c/ms
+//i dunno must be 2^k
+//9C40 ~ 20ms
+//#A000 ~ 20.48 but prolly wont work
+#define SERVO_PERIOD 0xA000
+//needs be 1ms
+//is 1.024ms
+#define SERVO_CONSTANT 0x800
+
+/* dirty dirty
+unsigned int servo_vals[4] = {0,0,0,0}; // Stores the set servo values
+int current_servo = 0;  // Stores which servo is current in the interrupt routine
+*/
+unsigned int servo_vals[8] = {0,0,0,0,0,0,0,0}; // Stores the set servo values
+int phase_time=0;
+int phase_base=0;
+int servos_on = 0;      // Stores which servos are enabled
+int servos_enabled=0; //which are high
+int servo_flag = 0;     // Stores whether or not servos are enabled
+
+/* Timer 1 output compare B interrupt.  Does the following:
+	Checks to see if the current servo is 4, in which case just need
+	to set low servo 3's signal and return.
+	Else, check to see if the current servo is enabled, and set it's signal high
+	Then, set the previous servo's signal low
+	Now, set the next output compare to occur for some time from now 
+	specified by the current servo's value
+*/
+SIGNAL (SIG_OUTPUT_COMPARE3B)
+{
+	lcd_putchar('i');
+	if(servo_flag == 0)
+		return;
+	
+	int i;
+	if(phase_time == 0){
+		lcd_putchar('p');
+		for(i=0;i<8;i++){
+			if(servos_on & _BV(i))
+				digital_output((_PORT_E << 3) +i,1);
+		}
+		servos_enabled = servos_on;
+		phase_base = OCR3B;
+	}
+
+	unsigned int min=~0;
+	for(i=0;i<8;i++){
+		if(_BV(i) & servos_enabled){
+			if(SERVO_CONSTANT*servo_vals[i] <= phase_time){
+				digital_output((_PORT_E << 3) + i,0);
+				servos_enabled &= ~_BV(i);
+			}
+			else if(SERVO_CONSTANT*servo_vals[i] < min) {
+				min = servo_vals[i];
+			}
+		}
+	}
+	if(!servos_enabled){
+		OCR3B = phase_base + SERVO_PERIOD;
+		phase_time = 0;
+	}
+	else {
+		OCR3B = phase_base + min;
+		phase_time = min;
+	}
+	
+}	
+
+//currently the light must be initted b4
+void init_servo()
+{
+	//1010 1001
+	TCCR3A = 0;  // COM## set to noninvert, WGM 1:0 set to 1
+	//0000 1100
+	TCCR3B = 0x02;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+	
+	lcd_init();
+	ETIMSK |= 0x08;
+	servo_flag = 1;
+	OCR3B = 0x80;
+	lcd_putchar('i');
+}
+
+// Enable a servo specified by config
+void enable_servo(int config)
+{
+	servos_on |= _BV(config);
+}
+
+// Disable a servo specified by config
+void disable_servo(int config)
+{
+	servos_on &= (0xFF-_BV(config));
+}
+
+// Disables the timer1 interrupt, disabling the servos
+void disable_servos()
+{
+	// Disables interrupts
+	ETIMSK &= ~0x08;
+	servo_flag=0;
+
+}
+
+// Enables the timer1 interrupt, enabling the servos
+void enable_servos()
+{
+	// Enable interrupts on output compare B
+	ETIMSK |= 0x08;
+	servo_flag=1;
+}
+// Set a servo to a value.  Automatically enables the servo.
+void set_servo(int servo, int value)
+{
+	enable_servo(servo);
+	servo_vals[servo] = value;
+}
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/analog.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/analog.c	(revision 62)
@@ -0,0 +1,66 @@
+/*
+	analog.c - Contains the function implementations for manipulating the ADC
+	on the firefly+ board
+	
+	author:  CMU Robotics Club, Colony Project
+	code mostly taken from fwr analog file (author: Tom Lauwers)
+*/
+
+#include <avr/delay.h>
+#include <avr/interrupt.h>
+#include <avr/signal.h>
+#include "analog.h"
+
+void analog_init(void){
+
+	/*
+		ADC Status Register A
+		Bit 7 - ADEN is set (enables analog)
+		Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+		Bit 5 - Enable Auto Trigger (for free running mode)
+		Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+		Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 16,000,000/128
+	*/
+	ADCSRA |= 0xEF;
+
+	/*
+		ADMUX register
+		Bit 7,6 - Set voltage reference to AVcc (0b01)
+		Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+		Bit 4 - X
+		Bit 3:0 - Sets the current channel
+	*/
+	ADMUX = 0x67;
+}	
+
+unsigned int analog8(int which){
+	ADMUX = 0x60 + which;
+	_delay_ms(1); // need at least 130 us between conversions (for fwr robot, how much for new avr?)
+	return ADCH;
+}
+
+unsigned int analog10(int which){
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+	
+	ADMUX = 0x60 + which;
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+int wheel(void){
+	return analog8(WHEEL_PORT);
+}
+
+int battery(void){
+	return analog8(BATT_PORT) * 500 / 255; /* 5 volts is the max, 255 is the max 8bit number */
+}
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/firefly+_lib.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/firefly+_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/firefly+_lib.c	(revision 62)
@@ -0,0 +1,71 @@
+#include "firefly+_lib.h"
+
+
+void serial_test( void );
+void lcd_test(void);
+void orb_test( void );
+
+
+
+void motor_test (void) {
+
+	
+
+
+
+}
+void orb_test( void ) {
+	int orbs[13] = { ORB_OFF, RED, ORANGE, YELLOW, LIME, GREEN, CYAN, BLUE, PURPLE, PINK, PURPLE, MAGENTA, WHITE };
+	int orb_select = 0;
+	
+	orb_init();
+	
+	
+	while(1) {
+		orb_set_color(orbs[orb_select]);
+		delay_ms(1000);
+		orb_select++;
+		if(orb_select == 14)
+			orb_select = 0;
+	}
+
+	return;
+
+}
+
+
+void lcd_test(void) {
+	int i;
+	lcd_init();
+	
+	for(i = 32; i <= 126; i++) {
+		lcd_putchar(i);
+		delay_ms(250);
+	}
+	
+	
+	return;
+	
+}
+
+/*
+prints all printable characters to the serial
+
+baud rate is 115200
+*/
+void serial_test( void ) {
+	int i;
+	
+	serial_init(BAUD115200);
+	
+	for(i = 32; i <= 126; i++) {
+		serial_putchar(i);
+		delay_ms(250);
+	}
+
+	return;
+}
+
+
+
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lcd.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lcd.c	(revision 62)
@@ -0,0 +1,239 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include "lcd.h"
+#include "time.h"
+
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+	{ 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/*
+initializes the LCD
+*/
+void lcd_init(void)
+{
+	LCDDDR |= (D_C | SCE | SDI | SCK);
+	LCDRESETDDR |= RST;
+
+	LCDPORT &= ~(D_C | SCE | SDI | SCK);
+	
+	SPCR |= 0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+	
+}
+
+/*
+clear the lcd screen
+*/
+void lcd_clear_screen( void ) {
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+
+}
+
+
+/*
+print a byte on the lcd screen
+*/
+void lcd_putbyte(unsigned char b)
+{
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+}
+
+/*
+print a character on the lcd
+*/
+void lcd_putchar(char c)
+{
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_putstr(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putchar(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+void lcd_gotoxy(int x, int y)
+{
+  LCDPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDPORT |= D_C;
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+void lcd_putint(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putchar('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putchar(lcd_data[position]);
+          }
+
+return;
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/time.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/time.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/time.h	(revision 62)
@@ -0,0 +1,61 @@
+/*
+time.h
+
+provisional (Suresh)
+
+*/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+#define TIMER_OFF         0x00
+#define PRESCALE_NONE     0x01
+#define PRESCALE_DIV_8    0x02
+#define PRESCALE_DIV_32   0x03
+#define PRESCALE_DIV_64   0x04
+#define PRESCALE_DIV_128  0x05
+#define PRESCALE_DIV_256  0x06
+#define PRESCALE_DIV_1024 0x07
+
+/*
+delay_ms(int ms)
+pause_ms(int ms)
+sleep_ms(int ms)
+pause(int ms)
+sleep(int ms)
+
+all have the same behavior
+pauses the calling process for the specified
+amount of time in milliseconds
+*/
+void delay_ms(int ms) ;
+void pause_ms(int ms);
+void pause(int ms);
+void sleep_ms(int ms);
+void sleep(int ms);
+
+/*
+void rtc_init(void)
+call this function to initialize the real time clock
+real time clock requires global interrupts to be enabled
+*/
+void rtc_init(int prescale_opt, unsigned char ocr_val, void (*rtc_func)(void));
+
+/*
+void rtc_reset(void)
+use this to reset the real time value
+rtc_init() should be called beforehand
+*/
+void rtc_reset(void);
+
+/*
+int rtc(void)
+returns the current value of the real time clock (in seconds)
+rtc_init() should be called beforehand
+
+the returned amount is the number of seconds that have past since the
+last call to rtc_init() or rtc_reset()
+*/
+int rtc(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/servo.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/servo.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/servo.h	(revision 62)
@@ -0,0 +1,16 @@
+/*  
+	servo.h - Contains function prototypes for servo activation
+	author:  Tom Lauwers
+*/
+#ifndef _SERVO_H_
+#define _SERVO_H_
+
+// Information on functions available in servo.c
+void init_servo(void);
+void enable_servos(void);
+void enable_servo(int config);
+void set_servo(int servo, int value);
+void disable_servos(void);
+void disable_servo(int );
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet.c	(revision 62)
@@ -0,0 +1,396 @@
+/* Eugene Marinelli, ...
+ * 10/26/06
+ * 
+ * colonet.c - Colonet library for colony robots
+ */
+
+#include <firefly+_lib.h>
+
+#include "colonet.h"
+
+typedef struct {
+  unsigned char msgId;
+  void (*handler)(void);
+} UserHandler;
+
+/* Globals (internal) */
+static UserHandler user_handlers[USER_DEFINED_MSG_TOTAL];
+
+/* Internal function prototypes */
+void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf);
+unsigned int two_bytes_to_int(char high, char low);
+
+/* Public functions */
+int colonet_handle_message(unsigned char robot_id, char* pkt_buf)
+{
+  ColonetPacket pkt;
+  unsigned char* args; //up to 7 char args
+  unsigned int int_args[3]; //up to 3 int (2-byte) args
+
+  packet_string_to_struct(&pkt, pkt_buf);
+
+  if(pkt.msg_dest != GLOBAL_DEST && pkt.msg_dest != robot_id){ 
+    //message not intended for us
+    return 1;
+  }
+
+  args = pkt.data;
+  
+  /* Hack - could be done more 1337ly with casting, but this way we don't have
+   * to worry about little/big endian stuff */
+  int_args[0] = two_bytes_to_int(args[0], args[1]);
+  int_args[1] = two_bytes_to_int(args[2], args[3]);
+  int_args[2] = two_bytes_to_int(args[4], args[5]);
+
+  if(pkt.msg_type == COLONET_REQUEST){
+    switch(pkt.msg_code){
+      //Sharp
+    case READ_DISTANCE:
+      break;
+    case LINEARIZE_DISTANCE:
+      break;
+    case LOG_DISTANCE:
+      break;
+
+      //Serial
+    case SERIAL_GETCHAR:
+      break;
+    case SERIAL_GETCHAR_NB:
+      break;
+    case SERIAL1_GETCHAR:
+      break;
+    case SERIAL1_GETCHAR_NB:
+      break;
+
+      //Analog
+    case ANALOG8:
+      break;
+    case ANALOG10:
+      break;
+    case WHEEL:
+      break;
+    case BATTERY:
+      break;
+
+      //BOM
+    case GETMAXBOM:
+      break;
+
+      //Dio
+    case DIGITAL_INPUT:
+      break;
+    case BUTTON1_READ:
+      break;
+    case BUTTON2_READ:
+      break;
+
+      //Bumper
+    case DETECT_BUMP:
+      break;
+    }
+
+    /* TODO - send back data! */
+
+  }else if(pkt.msg_type == COLONET_COMMAND){
+    if(pkt.msg_code >= USER_DEFINED_MSG_ID_START && 
+       pkt.msg_code <= USER_DEFINED_MSG_ID_END){
+      user_handlers[pkt.msg_code - USER_DEFINED_MSG_ID_START].handler();
+      return 0;
+    }
+
+    switch(pkt.msg_code){
+    default:
+      printf("%s: Error - message code %d not implemented\n", __FUNCTION__,
+             pkt.msg_code);
+      return -1;
+      break;
+
+      //Buzzer
+    case BUZZER_INIT:
+      buzzer_init();
+      break;
+    case BUZZER_SET_VAL:
+      buzzer_set_val(args[0]);
+      break;
+    case BUZZER_SET_FREQ:
+      buzzer_set_freq(args[0]);
+      break;
+    case BUZZER_CHIRP:
+      buzzer_chirp(int_args[0], int_args[1]);
+      break;
+    case BUZZER_OFF:
+      buzzer_off();
+      break;
+      
+      //LCD
+    case LCD_INIT:
+      lcd_init();
+      break;
+    case LCD_CLEAR_SCREEN:
+      lcd_clear_screen();
+      break;
+    case LCD_PUTBYTE:
+      lcd_putbyte(args[0]);
+      break;
+    case LCD_PUTCHAR:
+      lcd_putchar((char)args[0]);
+      break;
+    case LCD_PUTSTR:
+      lcd_putstr((char*)args);
+      break;
+    case LCD_GOTOXY: 
+      lcd_gotoxy(int_args[0], int_args[1]);
+      break;
+    case LCD_PUTINT: 
+      lcd_putint(int_args[0]);
+      break;
+    case ORB_INIT:
+      orb_init();
+      break;
+      //Orb
+    case ORB_SET:
+      orb_set(args[0], args[1], args[2]);
+      break;
+    case ORB_SET_COLOR:
+      orb_set_color(int_args[0]);
+      break;
+    case ORB_DISABLE:
+      orb_disable();
+      break;
+    case ORB_ENABLE:
+      orb_enable();
+      break;
+    case ORB_SET_DIO:
+      orb_set_dio(int_args[0], int_args[1], int_args[2]);
+      break;
+    case LED_INIT:
+      led_init();
+      break;
+    case LED_USER:
+      led_user(int_args[0]);
+      break;
+    case ORB_SET_NUM_NS:
+      //orb_set_num_ns(args[0], two_bytes_to_int(args[1],args[2]),
+      //               two_bytes_to_int(args[3],args[4]), 
+      //               two_bytes_to_int(args[5],args[6]));
+      break;
+    case ORB_SET_NUM:
+      //orb_set_num_ns(args[0], two_bytes_to_int(args[1],args[2]),
+      //               two_bytes_to_int(args[3],args[4]), 
+      //               two_bytes_to_int(args[5],args[6]));
+      break;
+    case ORB_SEND:
+      //orb_send();
+      break;
+      //Motors
+    case MOTORS_INIT:
+      motors_init();
+      break;
+    case MOTOR1_SET:
+      printf("motor1_set %d %d\n", int_args[0], int_args[1]);
+      motor1_set(int_args[0], int_args[1]);
+      break;
+    case MOTOR2_SET:
+      motor2_set(int_args[0], int_args[1]);
+      break;
+    case MOTORS_OFF:
+      motors_off();
+      break;
+
+      /*
+    case MOVE:
+      
+      break;
+      */
+
+      //OLED
+    case DRAWCIRCLE:
+      //drawcircle((char)args[0], (char)args[1], (char)args[2], 
+      //           (int)two_bytes_to_int(args[3], args[4]),
+      //           (int)two_bytes_to_int(args[5], args[6]));
+      break;
+      /*
+      //Packet isn't large enough for args of this function
+    case DRAWRECT:
+      break;
+      */
+    case DRAWLINE:
+      //drawline((char)args[0], (char)args[1], (char)args[2], (char)args[3], 
+      //         (int)int_args[2]);
+      break;
+    case DRAWCOPY:
+      //drawcopy((char)args[0], (char)args[1], (char)args[2], (char)args[3], 
+      //         (char)args[4], (char)args[5]);
+      break;
+    case DRAWFILL:
+      //drawfill((char)args[0]);
+      break;
+    case DRAWCLEAR:
+      //drawclear();
+      break;
+    case DRAWSCROLL:
+      //drawscroll((char)args[0], (char)args[1], (char)args[2], (char)args[3]);
+      break;
+    case OLED_INIT:
+      //OLED_init();
+      break;
+
+      //SHARP
+    case ENABLE_IR:
+      //enable_IR();
+      break;
+    case DISABLE_IR:
+      //disable_IR();
+      break;
+
+      //SERIAL
+    case SERIAL_INIT:
+      serial_init(int_args[0]);
+      break;
+    case SERIAL_PUTCHAR:
+      serial_putchar((char)args[0]);
+      break;
+    case SERIAL1_INIT:
+      //serial1_init();
+      break;
+    case SERIAL1_PUTCHAR:
+      serial1_putchar((char)args[0]);
+      break;
+    case PRINTF:
+      printf("%s", pkt.data);
+      break;
+
+      //Time
+    case DELAY_MS:
+      delay_ms(int_args[0]);
+      break;
+
+      //Analog
+    case ANALOG_INIT:
+      analog_init();
+      break;
+    case SET_ADC_MUX:
+      //set_adc_mux(int_args[0]);
+      break;
+    case ENABLE_ANALOG:
+      //enable_analog(int_args[0]);
+      break;
+
+      //BOM
+    case BOM_ON:
+      bom_on();
+      break;
+    case BOM_OFF:
+      bom_off();
+      break;
+    case OUTPUT_HIGH:
+      output_high(int_args[0]);
+      break;
+    case OUTPUT_LOW:
+      output_low(int_args[0]);
+      break;
+
+      //Dio
+    case DIGITAL_OUTPUT:
+      digital_output(int_args[0], int_args[1]);
+      break;
+    case BUTTON1_WAIT:
+      button1_wait();
+      break;
+    case BUTTON1_WAIT_LED:
+      button1_wait_led();
+      break;
+    case BUTTON2_WAIT:
+      button2_wait();
+      break;
+    case BUTTON2_WAIT_LED:
+      button2_wait_led();
+      break;
+
+      //WL
+    case WL_INIT:
+      wl_init();
+      break;
+    case PARSE_BUFFER:
+      parse_buffer();
+      break;
+    case WL_SEND:
+      wl_send();
+      break;
+    case WL_CREATE_PACKET:
+      wl_create_packet();
+      break;
+    case WL_DEATH_HANDLER:
+      wl_death_handler();
+      break;
+    case WL_ERROR_HANDLER:
+      //wl_error_handler();
+      break;
+    case WL_TIMEOUT_HANDLER:
+      wl_timeout_handler();
+      break;
+    case DISPLAY_DEBUG:
+      display_debug();
+      break;
+    case BOM_TEST:
+      bom_test();
+      break;
+    }
+  }else{
+    printf("%s: Error: Invalid colonet message type", __FUNCTION__);
+    return -1;
+  }
+
+  return 0;
+}
+
+/* colonet_add_message
+ * Adds a user-defined message
+ */
+int colonet_add_message(unsigned char msgId, void (*handler)(void))
+{
+  if(msgId < USER_DEFINED_MSG_ID_START || msgId > USER_DEFINED_MSG_ID_END){
+    return -1;
+  }
+
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].msgId = msgId;
+  user_handlers[msgId-USER_DEFINED_MSG_ID_START].handler = handler;
+
+  return 0;
+}
+
+/* Private functions */
+void packet_string_to_struct(ColonetPacket* dest_pkt, char* pkt_buf)
+{
+  int i;
+  
+  printf("\npacket:");
+  for(i = 0; i < 16; i++){
+    printf("%d ", pkt_buf[i]);
+  }
+
+  printf("\n");
+
+  dest_pkt->prefix[0] = pkt_buf[0];
+  dest_pkt->prefix[1] = pkt_buf[1];
+  dest_pkt->token_src = pkt_buf[2];
+  dest_pkt->token_dest = pkt_buf[3];
+  dest_pkt->msg_dest = pkt_buf[4];
+  dest_pkt->msg_type = pkt_buf[5];
+  dest_pkt->msg_code = pkt_buf[6];
+  
+  for(i = 0; i < PACKET_DATA_LEN; i++){
+    dest_pkt->data[i] = pkt_buf[7+i];
+  }
+
+  dest_pkt->num_robots = pkt_buf[PACKET_SIZE-2];
+  dest_pkt->checksum = pkt_buf[PACKET_SIZE-1];
+}
+
+/* two_bytes_to_int(char a, char b)
+ * Returns int of form [high][low]
+ */
+unsigned int two_bytes_to_int(char high, char low)
+{
+  return (((unsigned int)high)<<8) + (unsigned int)low;
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/analog.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/analog.h	(revision 62)
@@ -0,0 +1,61 @@
+/*
+	analog.h - Contains definitions and function prototypes for using the
+	ADC to detect analog signals on pins AN0 - AN7
+	AN6 and AN7 are used for the wheel and battery
+	
+	The pins labeled E6 and E7 are external interrupt pins and are not related to analog
+	
+	author: CMU Robotics Club, Colony Project
+	code taken from the fwr analog file (author:  Tom Lauwers)
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+#define AN0 0x00
+#define AN1 0x01
+#define AN2 0x02
+#define AN3 0x03
+#define AN4 0x04
+#define AN5 0x05
+#define AN6 0x06
+#define AN7 0x07
+
+#define WHEEL_PORT AN6
+#define BATT_PORT  AN7
+
+/*
+	Call this function before reading from the analog ports
+	turns on the ADC
+*/
+void analog_init(void);
+
+/*
+	returns an 8-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog8(int which);
+
+/*
+	returns a 10-bit number from the desired analog port
+	argument should be one of the constants AN0 - AN7
+	behavior is undefined otherwise
+	analog_init() must be called before a call to this function
+*/
+unsigned int analog10(int which);
+
+/*
+	returns the current value (0-255) of the wheel
+	analog_init() must be called before a call to this function
+*/
+int wheel(void);
+
+/*
+	returns the current voltage of the battery (deciVolts)
+	analog_init() must be called before a call to this function
+*/
+int battery(void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/firefly+_lib.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/firefly+_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/firefly+_lib.h	(revision 62)
@@ -0,0 +1,40 @@
+/*
+
+firefly+_lib.h
+
+author: CMU Robotics Club, Colony project
+much of this is adapted from the firefly library (author: Tom Lauwers)
+*/
+#ifndef _FIREFLY_LIB_H_
+#define _FIREFLY_LIB_H_
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+//#include <avr/delay.h>
+//#include <avr/signal.h>
+
+#include "analog.h"
+#include "dio.h"
+
+#include "lcd.h"
+#include "time.h"
+#include "lights.h"
+
+#include "motor.h"
+#include "serial.h"
+#include "buzzer.h"
+
+#include "servo.h"
+#include "bom.h"
+
+//wireless
+#include "wl_adhoc.h"
+
+//localization
+#include "localization.h"
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lcd.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lcd.h	(revision 62)
@@ -0,0 +1,27 @@
+
+#ifndef _LCD_H_
+#define _LCD_H_
+
+
+//////lcd defines
+#define RST 0x04  // pe2 (GPIO)
+#define SCE 0x01  // pb0 (~SS)
+#define D_C 0x10  // pb4 (GPIO?)
+#define SDI 0x04  // pb2 (MOSI)
+#define SCK 0x02  // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTE
+#define LCDRESETDDR DDRE
+
+void lcd_init(void);
+void lcd_clear_screen( void );
+void lcd_putbyte(unsigned char c);
+void lcd_putchar(char c);
+void lcd_putstr(char *s);
+void lcd_gotoxy(int x, int y);
+void lcd_putint(int value);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet.h	(revision 62)
@@ -0,0 +1,15 @@
+/* Eugene Marinelli
+ * 10/26/06
+ * 
+ * colonet.h - Colonet library for colony robots
+ */
+
+#ifndef COLONET_H_
+#define COLONET_H_
+
+#include <colonet_defs.h>
+
+int colonet_handle_message(unsigned char robot_id, char* packet);
+int colonet_add_message(unsigned char msgId, void (*handler)(void));
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet_defs.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet_defs.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/colonet_defs.h	(revision 62)
@@ -0,0 +1,160 @@
+/* Eugene Marinelli, Fan
+ * 10/27/06
+ *
+ * Colonet Definitions - common definitions and structs used in all colonet 
+ * applications
+ */
+
+#ifndef COLONET_DEFS_H_
+#define COLONET_DEFS_H_
+
+//Message types
+#define COLONET_COMMAND 0x0D
+#define COLONET_REQUEST 0x0E
+
+//Packet properties
+#define PACKET_DATA_LEN 7
+#define PACKET_SIZE 16
+
+//Packet error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGESTATION 251  //Charging station response to ping
+#define WL_ERR_DEAD_LOC 5
+#define WL_ERROR_DEST 255
+
+typedef struct {
+  unsigned char prefix[2];
+  unsigned char token_src;
+  unsigned char token_dest;
+  unsigned char msg_dest;
+  unsigned char msg_type;
+  unsigned char msg_code;
+  unsigned char data[PACKET_DATA_LEN];
+  unsigned char num_robots;
+  unsigned char checksum;
+} ColonetPacket;
+
+#define SERIAL_PORT "/dev/ttyS0"
+#define USB_PORT "/dev/ttyUSB0"
+
+#define GLOBAL_DEST 200
+#define MAX_NUM_ROBOTS 7
+
+#define USER_DEFINED_MSG_ID_START 0xF0
+#define USER_DEFINED_MSG_ID_END 0xFF
+#define USER_DEFINED_MSG_TOTAL 0x0F
+
+/* Low level robot commands */
+//BUZZER
+#define BUZZER_INIT 0x00
+#define BUZZER_SET_VAL 0x01
+#define BUZZER_SET_FREQ 0x02
+#define BUZZER_CHIRP 0x03
+#define BUZZER_OFF 0x04
+
+//LCD
+#define LCD_INIT 0x05
+#define LCD_CLEAR_SCREEN 0x06
+#define LCD_PUTBYTE 0x07
+#define LCD_PUTCHAR 0x08
+#define LCD_PUTSTR 0x09
+#define LCD_GOTOXY 0x0A
+#define LCD_PUTINT 0x0B
+
+//ORB
+#define ORB_INIT 0x0C
+#define ORB_SET 0x0D
+#define ORB_SET_COLOR 0x0E
+#define ORB_DISABLE 0x0F
+#define ORB_ENABLE 0x10
+#define ORB_SET_DIO 0x11
+#define LED_INIT 0x12
+#define LED_USER 0x13
+#define ORB_SET_NUM_NS 0x14
+#define ORB_SET_NUM 0x15
+#define ORB_SEND 0x16
+
+//MOTORS
+#define MOTORS_INIT 0x17
+#define MOTOR1_SET 0x18
+#define MOTOR2_SET 0x19
+#define MOTORS_OFF 0x1A
+#define MOVE 0x1B
+
+//OLED
+#define DRAWCIRCLE 0x1C
+#define DRAWRECT 0x1D
+#define DRAWLINE 0x1E
+#define DRAWCOPY 0x1F
+#define DRAWFILL 0x20
+#define DRAWCLEAR 0x21
+#define DRAWSCROLL 0x22
+#define OLED_INIT 0x23
+
+//SHARP
+#define READ_DISTANCE 0x24
+#define LINEARIZE_DISTANCE 0x25
+#define LOG_DISTANCE 0x26
+#define ENABLE_IR 0x27
+#define DISABLE_IR 0x28
+
+//SERIAL
+#define SERIAL_INIT 0x29
+#define SERIAL_PUTCHAR 0x2A
+#define SERIAL_GETCHAR 0x2B
+#define SERIAL_GETCHAR_NB 0x2C
+#define SERIAL1_INIT 0x2D
+#define SERIAL1_PUTCHAR 0x2E
+#define SERIAL1_GETCHAR 0x2F
+#define SERIAL1_GETCHAR_NB 0x30
+
+//DELAY_MS
+#define DELAY_MS 0x31
+
+//ANALOG
+#define ANALOG_INIT 0x32
+#define SET_ADC_MUX 0x33
+#define ENABLE_ANALOG 0x34
+#define ANALOG8 0x35
+#define ANALOG10 0x36
+#define WHEEL 0x37
+#define BATTERY 0x38
+
+//BOM
+#define GETMAXBOM 0x39
+#define BOM_ON 0x3A
+#define BOM_OFF 0x3B
+#define OUTPUT_HIGH 0x3C
+#define OUTPUT_LOW 0x3D
+
+//DIO
+#define DIGITAL_INPUT 0x3E
+#define DIGITAL_OUTPUT 0x3F
+#define BUTTON1_READ 0x41
+#define BUTTON1_WAIT 0x42
+#define BUTTON1_WAIT_LED 0x43
+#define BUTTON2_READ 0x44
+#define BUTTON2_WAIT 0x45
+#define BUTTON2_WAIT_LED 0x46
+
+//WL 
+#define WL_INIT 0x47
+#define PARSE_BUFFER 0x48
+#define WL_SEND 0x49
+#define WL_CREATE_PACKET 0x4A
+#define WL_DEATH_HANDLER 0x4B
+#define WL_ERROR_HANDLER 0x4C
+#define WL_TIMEOUT_HANDLER 0x4D
+#define DISPLAY_DEBUG 0x4E
+#define BOM_TEST 0x4F
+
+//BUMPER
+#define DETECT_BUMP 0x50
+
+//Other
+#define PRINTF 0x51
+
+/* End low-level robot commands */
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/dio.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/dio.c	(revision 62)
@@ -0,0 +1,278 @@
+/* 
+
+dio.c
+Controls digital input and output
+
+A general note on how this code works:
+portpin is used to select both the bank and which pin is selected
+6 bits are used (lower 6, ex: 0b00abcdef)
+	the first 3 (abc in this example) are used to select the bank
+		A = 001
+		B = 010
+		C = 011
+		D = 100
+		E = 101
+		F = 110
+		G = 111
+		
+		the bank can be found by doing portpin >> 3
+		
+	the next 3 (def in this example) are used to select the pin number
+	the 3 bits are just the binary representation of the pin number
+		0 = 000
+		1 = 001
+		2 = 010
+		3 = 011
+		4 = 100
+		5 = 101
+		6 = 110
+		7 = 111
+		
+		the pin number can be found by doing portping & 0b111
+		
+
+*/
+
+#include <avr/interrupt.h>
+
+#include "dio.h"
+#include "time.h"
+#include "lights.h"
+
+/*
+digital_input
+
+reads the value on the selected portpin, returns it as 1 or 0
+see general description (above) for definition of portpin
+
+*/
+int digital_input(int portpin){
+	int pin = portpin & 0b111;
+	int pin_val = 0;
+	
+	switch(portpin >> 3){
+		case _PORT_A:
+			DDRA &= ~_BV(pin);
+			pin_val = PINA;
+			return (pin_val >> pin) & 1;
+		case _PORT_B:
+			DDRB &= ~_BV(pin);
+			pin_val = PINB;
+			return (pin_val >> pin) & 1;
+		case _PORT_C:
+			DDRC &= ~_BV(pin);
+			pin_val = PINC;
+			return (pin_val >> pin) & 1;
+		case _PORT_D:
+			DDRD &= ~_BV(pin);
+			pin_val = PIND;
+			return (pin_val >> pin) & 1;
+		case _PORT_E:
+			DDRE &= ~_BV(pin);
+			pin_val = PINE;
+			return (pin_val >> pin) & 1;
+		case _PORT_F:
+			if(pin>=4){
+				MCUSR|=1<<7;
+				MCUSR|=1<<7;
+			}
+			DDRF &= ~_BV(pin);
+			pin_val = PINF;
+			return (pin_val >> pin) & 1;
+		case _PORT_G:
+			DDRG &= ~_BV(pin);
+			pin_val = PING;
+			return (pin_val >> pin) & 1;
+		default: break;
+	}
+	
+	return -1;
+}
+
+/*
+digital_output
+
+sets portpin to the value
+
+see general description above for explanation of portpin
+
+val can only be 1 or 0
+*/
+void digital_output(int portpin, int val) {
+	int pins = portpin & 0x07;
+	
+	/*
+	if you want to set to 0
+	*/
+	if(val == 0) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA &= (0XFF - _BV(pins));
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF &= (0XFF - _BV(pins));
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG &= (0XFF - _BV(pins));
+				break;
+		}
+	}
+	if( val == 1) {
+		switch(portpin >> 3) {
+			case _PORT_A:
+				DDRA |= _BV(pins);
+				PORTA |= _BV(pins);
+				break;
+			case _PORT_B:
+				DDRB |= _BV(pins);
+				PORTB |= _BV(pins);
+				break;		
+			case _PORT_C:
+				DDRC |= _BV(pins);
+				PORTC |= _BV(pins);
+				break;		
+			case _PORT_D:
+				DDRD |= _BV(pins);
+				PORTD |= _BV(pins);
+				break;		
+			case _PORT_E:
+				DDRE |= _BV(pins);
+				PORTE |= _BV(pins);
+				break;		
+			case _PORT_F:
+				DDRF |= _BV(pins);
+				PORTF |= _BV(pins);
+				break;		
+			case _PORT_G:
+				DDRG |= _BV(pins);
+				PORTG |= _BV(pins);
+				break;
+		}
+	}
+}
+
+
+
+
+
+//////////////////////////////////////
+////////////   button1  //////////////
+//////////////////////////////////////
+
+/*
+return 1 if button is pressed, 0 otherwise
+*/
+int button1_read( void )
+{
+	//return (BTN & (_BV(BTN1)) >> BTN1);
+	return (PIN_BTN >> BTN1) & 1;
+}
+
+/*
+similar to button1_read, but hold program until the button is actually pressed
+*/
+void button1_wait( void )
+{
+	while(!button1_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+/*
+same as button1_wait
+However, blink the led while waiting
+
+IMPORTANT: This requires that the LED has been initialized (  init_led  )
+*/
+void button1_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button1_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+
+//////////////////////////////////////
+////////////   button2  //////////////
+//////////////////////////////////////
+//see button1 functions for descriptions
+//same except for which button is used
+int button2_read( void )
+{
+	return (PIN_BTN >> BTN2) & 1;
+}
+
+void button2_wait( void )
+{
+	while(!button2_read() ) {
+		delay_ms(15);
+	}
+}
+
+
+void button2_wait_led( void )
+{
+	int i = 0;
+	
+	while(!button2_read() ) {
+		if( i < 8 )
+			led_user(1);
+		else {
+			led_user(0);
+		}
+		//increment i, but restart when i = 15;
+		i = (i+1) & 0xF;
+		delay_ms(15);
+	}
+	
+	led_user(0);
+}
+
+/*
+// EXTERNAL INTERRUPTS
+/// example code to be used by anyone in need
+/// this example has 2 bump sensors on PE6 and PE7
+
+// left touch sensor on PE6 
+SIGNAL (SIG_INTERRUPT6)
+{
+	putcharlcd('6');
+}
+
+// right touch sensor on PE7
+SIGNAL (SIG_INTERRUPT7)
+{
+	putcharlcd('7');
+}
+*/
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/bom.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/bom.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/bom.c	(revision 62)
@@ -0,0 +1,66 @@
+#include "bom.h"
+
+
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+int getMaxBom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+	
+	return max_bom_temp;
+}
+
+void bom_on(void)
+{
+  output_high(MONKL);
+
+}
+
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_adhoc.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_adhoc.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_adhoc.c	(revision 62)
@@ -0,0 +1,844 @@
+/**
+   \file wl_adhoc.c
+   Wireless ad hoc networking.
+   NOW WITH SENSORS
+   Robots can come in and out of the ring.
+*/
+ 
+/*
+  Wireless ad hoc networking + sensors
+
+  If a robot is the first to turn on, it will set itself as the leader
+
+  The next robot will receive that packet and tokenize with it.
+  Each other robot turned on will receive packets, and join the ring.
+  All the robots will also change their network topology (num_bots)
+  
+  
+  2006-11-21: Felix
+              Fixed buzzer.c code (copied from a different dir).
+              Code still works on robots at this time 
+              
+              Felix used this code to figure out the robot resetting problem.  BOM sensor 10
+              needs to be taped up.
+              You may put this event in the history books.
+              
+  
+  2006-10-31 Kevin
+  Changed the boards to the 115200 Baud rate. Changed the pound define to reflect this.
+  The boards have been hardcoded to do this. They are labelled in case you do not know
+  which ones do this. It works.
+  
+  2006-10-13: Kevin
+  Made improvements to make the module more modular and general
+  so that you can just drag and drop it into any behavior.
+  Began the integration of autonomous charging. We're using the
+  error system that is built into wl_adhoc originally to ping the
+  charge stations. Do not know if it works, can't test it yet. But
+  wireless normally still works.
+
+  2006-08-07: Felix
+  Added the use of the sensor row that was being transmitted
+  Robots now share a common table of sensor 'positions'
+  Just add light sensing and you're good to go
+            
+  WARNING: Robots seem to reset randomly due to batteries, especially
+  when moving around.  Could be brownout detector kicking in.
+  Added a beep at startup to detect reset.
+
+  2006-08-03: Felix
+  Now added follow-the-leader code
+  Battery problem -- testing only really worked on power supply
+            
+  Robots follow the leader (theoretically).
+  They fill their own row of the sensors matrix, but do not get
+  the other robots' row -- not in the code.
+
+  2006-07-27: Felix
+  Created new directory for sensors use
+
+  2006-07-24: Felix
+  Added BOM.c/BOM.h
+  bom_test works -- gets max bom
+            
+  Added the get_maxbom each time you get a wireless packet
+  ---NEEDS TESTING
+            
+  Also, packet sent should contain your 'row'
+  Also, received packet should be stored in matrix
+
+  2006-07-13: Felix
+  Works for the most part
+  W00t
+			
+  Still a few kinds I imagine, but robot death & birth work
+*/
+
+#include "firefly+_lib.h"
+#include "wl_adhoc.h"
+#include <avr/interrupt.h>
+#include <colonet.h>
+
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define MIN(a, b)  ((a) < (b) ? (a) : (b))
+
+unsigned char set_orb_wireless = 0;
+//unsigned char set_orb_wireless = 1;
+
+/*
+  int main( void ) 
+  {
+  wl_adhoc();
+  bom_test();
+
+  return 0;
+  }
+*/
+
+void bom_test (void)
+{
+  int maxb;
+
+  lcd_init();
+  analog_init();
+
+  while(1) {
+    if(button1_read()){
+      lcd_clear_screen();
+      bom_on();
+      delay_ms(100);
+    }
+    
+    if(button2_read()) {
+      lcd_clear_screen();
+      bom_off();
+      delay_ms(100);
+    }
+        
+    maxb = getMaxBom();
+        
+    lcd_putint(maxb);
+
+    delay_ms(50); 
+  }
+}
+
+void wl_adhoc()
+{
+  //initialize the serial modules
+  serial_init(WL_BAUD);       //XBee
+  serial1_init(BAUD115200);   //Serial port
+  
+  //lcd, orb, all that good stuff
+  lcd_init();
+  analog_init();
+  led_init();
+  orb_init();
+  motors_init();
+  buzzer_init();
+	
+  //init the wireless
+  wl_init();
+	
+  //int max_bom_to_follow;
+
+  while(1){
+    //this needs to happen continuously -- it handles the packet
+    parse_buffer();
+        
+    /*
+      if(SRC ==  0) {
+      //leader -- just drive
+      drive_forward();
+      }
+      else {
+      max_bom_to_follow = getSelfSensor(SRC, PREV, NUM_BOTS);
+      //lcd_putchar('f');
+      //lcd_putchar(max_bom_to_follow + 48);
+      //lcd_putchar(' ');
+      seek(max_bom_to_follow);
+      }
+    */
+		
+    //button1 prints debug information
+    if(button1_read()) {
+      //lcd_clear_screen();
+      display_debug();
+      delay_ms(10);
+    }
+		
+    /*
+    //button2 does nothing
+    if(button2_read()) {
+      //wl_create_packet();
+      //wl_send();
+      //delay_ms(10);
+    }
+    */
+  }
+
+  return;	
+}
+
+/**
+   \fn display_debug
+   \brief displays debug information
+
+   Prints out 4 numbers, in the following order
+   ( PREV | SRC | DEST | NUM_BOTS | wl_to_death_count )
+   where PREV is the previous robot before you
+   SRC is you
+   DEST is your destination
+   NUM_BOTS is the total number of robots in the ring
+   wl_do_death_count is the number of timeouts that will result in a death
+*/
+void display_debug()
+{
+  lcd_clear_screen();
+  lcd_putchar('(');
+  lcd_putchar(PREV+48);
+  lcd_putchar('|');
+  lcd_putchar(SRC+48);
+  lcd_putchar('|');
+  lcd_putchar(DEST+48);
+  lcd_putchar('|');
+  lcd_putchar(NUM_BOTS+48);	
+  lcd_putchar('|');
+  lcd_putint(wl_to_death_count);
+  lcd_putchar(')');
+    
+  //print table
+  int y = 1;
+  lcd_gotoxy(0, y);
+  int i, j;
+
+  for(i = 0; i < NUM_BOTS; i++) {
+    for(j = 0; j < NUM_BOTS; j++) {
+      lcd_putchar( getSelfSensor(i, j, NUM_BOTS) + 48);
+      lcd_putchar(' ');
+    }
+    y++;
+    lcd_gotoxy(0, y);
+  }
+}
+
+/*
+  \fn wl_timeout_handler
+  Handles the timeout case.
+
+  A time out occurs about every 1/4 second.  This function is called each time 
+  one occurs.  In the case where a robot first turns on, it will wait for a 
+  long time before declaring itself the leader.  Otherwise, if enough 
+  time-outs occur in a row, wl_to_flag will be set to 1.  This will cause a 
+  timeout packet to be sent next time around
+
+*/
+void wl_timeout_handler( void ) {
+  //increment the total number of wireless time-outs
+  wl_to_count++;
+  //lcd_putchar('w');
+	
+  static int wl_first_to_count =  0;
+	
+  //first time time out routine - listen for a long time
+  if(first_time) {
+    if(wl_to_count > WL_TO_INITIAL){
+      //increment the counter for first timeouts
+      wl_first_to_count++;
+				
+      //lcd_putchar('Z');
+				
+      //you don't actually want to send out a packet -- you would confuse 
+      //other robots
+      wl_to_flag = 0;
+      wl_to_count = 0;
+    }
+  }else{
+    //not the first time - regular time out routine
+
+    //if you have enough timeouts
+    if(wl_to_count > WL_TIMEOUT){
+      //lcd_putchar('z');
+			
+      //change the time-out flag to 1
+      wl_to_flag = 1;
+      wl_to_count = 0;
+			
+      //increment the count for robot death
+      if(NUM_BOTS > 1) {
+        //only increase death count if there are robots that can die
+        //if numbots = 1, you are the only robot (no suicidal robots... yet)
+        wl_to_death_count++;
+      }
+      
+      //check for a robot death
+      if(wl_to_death_count > WL_TO_DEATH) {
+        //a robot has died :(
+        wl_to_death_flag = 1;
+        wl_death_handler();
+      }
+    }
+  }
+	
+  //take care of the case where you time out so much that you become the leader
+  if(wl_first_to_count > WL_TO_LEADER) {
+    //you are now the leader
+    //lcd_putchar('L');
+		
+    first_time = 0;
+				
+    NUM_BOTS = 1;			//there are (1) robot in the ring
+    SRC = 0;				//you are robot # 1
+    DEST = 1;				//you are 'speaking' to (nonexistent) robot #1
+		
+    lcd_putchar('[');
+    lcd_putchar(SRC+48);
+    lcd_putchar('|');
+    lcd_putchar(DEST+48);
+    lcd_putchar('|');
+    lcd_putchar(NUM_BOTS+48);	
+    lcd_putchar('|');
+    lcd_putint(wl_to_death_count);
+    lcd_putchar(']');
+		
+    //create a a packet and send it
+    wl_create_packet();
+    wl_send();
+		
+    //change the timeout count to 0
+    wl_to_count = 0;
+    wl_first_to_count = 0;
+  }
+}
+
+/**
+   \fn wl_error_handler(int errcode)
+   Handles error codes.
+   \param errcode The error code.
+   At the time, the only real error that happens is robot death.
+
+   Robot death requires that wl_buf have been set (either by receiving a
+   error packet or by calling wl_death_handler.
+
+   Robot death:
+   Number of robots will decrement.
+   Robots above the dead robot will decrement their ID and their source.
+   The loop remains closed.
+
+*/
+void wl_error_handler(unsigned char errcode)
+{
+  //which robot is dead
+  int dead_robot;
+
+  //print debug information
+  lcd_clear_screen();
+  lcd_gotoxy(0,0);
+  lcd_putstr("error handler    ");
+  lcd_putint(errcode);
+  lcd_gotoxy(0,1);
+
+  switch(errcode) {
+  case WL_ERRCODE_ROBOTDEATH:
+    lcd_putstr("  dead_robot: ");
+    lcd_putint(wl_buf[WL_ERR_DEAD_LOC]);
+    break;
+  case WL_ERRCODE_NEEDTOCHARGE:
+    lcd_putstr("   charge_robot: ");
+    lcd_putint(wl_buf[WL_SRC_LOC]);
+    break;
+  default:
+    break;
+  }
+
+  lcd_gotoxy(0,2);
+	
+  //set all the time-out counts and flags to 0
+  wl_to_count = 0;
+  wl_to_flag = 0;
+  wl_to_death_flag = 0;
+  wl_to_death_count = 0;
+		
+  //acknowledge receipt of the error packet by setting the errorcode in the 
+  //packet to 0
+  wl_buf[WL_ERROR_LOC] = 0;
+  //also set checksum to !0
+  wl_chksum = 1;
+	
+  //switch the error code
+  switch(errcode) {
+    //ROBOT DEATH
+  case WL_ERRCODE_ROBOTDEATH:
+    //get which robot has died
+    dead_robot = wl_buf[WL_ERR_DEAD_LOC];
+			
+    //decrement the total number of robots
+    NUM_BOTS--;
+			
+    //see if you are above the dead robot
+    if( SRC > dead_robot ) {
+      //if you are the last robot (since NUM_ROBOTS was decremented, 
+      //you can check that way) then decrement your number
+      //and set your destination to 0
+      if( SRC == NUM_BOTS) {
+        lcd_putchar('+');
+        lcd_putchar('1');
+        lcd_putchar('+');
+        SRC--;
+        DEST = 0;
+      } else {
+        //otherwise decrement both your ID and the destination by 1
+        lcd_putchar('+');
+        lcd_putchar('2');
+        lcd_putchar('+');
+        //decrement src and dest
+        SRC--;
+        DEST--;
+      }
+    }
+			
+    //ensure that the last robot talks to the 0th one
+    //this won't be set if the LAST robot dies (all robots are < dead)
+    if(SRC == (NUM_BOTS - 1) ) {
+      DEST = 0;
+    }
+    
+    //now your SRC and DEST have been set properly
+    //if you are the robot before the dead robot - send a message
+    if(SRC == dead_robot) {
+      lcd_putstr(" send packet ");
+      //you took the place of the dead robot
+      //you start the token ring again
+      wl_create_packet();
+      wl_send();
+    }
+    break;
+      
+  case WL_ERRCODE_NEEDTOCHARGE:
+    if (CHARGESTATION == 1) {
+      /*Turn on BOM for the length of time robots normally would have their 
+        BOM on. This is effectively telling everyone where the charging 
+        station is.  Assuming only one charging station at the moment.
+      */
+      bom_on();
+      delay_ms(WL_DELAY_BOM_PRE);
+      wl_create_error_packet(WL_ERRCODE_CHARGESTATION);
+      wl_send();
+      delay_ms(WL_DELAY_BOM_POST);
+      bom_off();
+    }
+    break;      //Do nothing about this, yet
+        
+  case WL_ERRCODE_CHARGESTATION:
+    // If the Charging Station responds, look for where it's comming from and 
+    //store that value for later
+    //wl_csloc = getMaxBOM();
+    break;
+      
+  default:
+    //do other stuff;
+    break;
+  }	
+}
+
+/**
+   \fn wl_death_handler
+
+   Handles robot death (for the one robot that detects death).
+
+   The robot that currently 'senses' robot death is the robot AFTER the dead
+   robot in the ring.  It knows that PREV (the robot right before it) is dead.
+   Robot creates a error packet and sends it. 
+
+   This will also call wl_error_handler since wl_buf was set with the current
+   dead robot
+*/
+void wl_death_handler( void ) 
+{
+  //set time out and death count/flags to 0
+  wl_to_count = 0;
+  wl_to_flag = 0;
+  wl_to_death_flag = 0;
+  wl_to_death_count = 0;
+
+  //create a packet with the error
+  wl_create_error_packet(WL_ERRCODE_ROBOTDEATH);
+  wl_buf[WL_ERR_DEAD_LOC] = PREV;   //PREV is the robot that is dead
+  wl_make_checksum();   //Recompute checksum after adding data
+	
+  //send the packet
+  wl_send();
+	
+  //handle the error yourself
+  wl_error_handler(wl_buf[WL_ERROR_LOC]);
+	
+  return;
+}
+
+/**
+   \fun parse_buffer
+   Parses the buffer in wl_buf.
+
+   Does nothing if the buffer isn't full.
+*/
+void parse_buffer(void) 
+{
+  //deal with timeout case
+  if( wl_to_flag ) {
+    wl_to_flag = 0;
+    wl_create_packet();
+    wl_send();
+    return;
+  }
+
+  //do nothing is packet is not complete
+  if( (wl_chksum != 0) || (wl_index != 0) ) {
+    return;
+  }
+  
+  //acknowledge you take the packet by changing the chksum to nonzero
+  wl_chksum = 1;
+
+  if(wl_buf[WL_DATA_DATA1] == COLONET_REQUEST || 
+     wl_buf[WL_DATA_DATA1] == COLONET_COMMAND){
+    printf("colonet message received: code %d\n", wl_buf[WL_DATA_DATA2]);
+    colonet_handle_message(SRC, wl_buf);
+  }else{
+    printf("\ndata1:%d\n", wl_buf[WL_DATA_DATA1]);
+  }
+	
+  if(first_time == 1) {
+    //you received a first packet from someone
+    first_time = 0;
+		
+    //get the current number of robots
+    NUM_BOTS = wl_buf[NUM_BOTS_LOC];
+		
+    //you are now the last robot in the line
+    SRC = NUM_BOTS;
+    //you are sending back to the first robot
+    DEST = 0;
+		
+    //since you've just added yourself, increase numbots
+    NUM_BOTS++;
+		
+    //figure out a way to send out a packet TODO
+    //wl_wait_for_turn = 1;
+		
+    //create and send a packet
+    wl_create_packet();
+    wl_send();
+  }
+  
+  //IS NOT CALLED FOR NOW
+  if(wl_wait_for_turn) {
+    if( wl_buf[WL_DEST_LOC] == (NUM_BOTS - 1) ) {
+      //you just got a packet from the 'old' last robot send yours
+      //lcd_putchar('S');
+      wl_create_packet();
+      wl_send();
+    }else{
+      //otherwise just exit out of parse
+      return;
+    }
+  }
+  
+  //check for error packet first
+  if(wl_buf[WL_DEST_LOC] == WL_PKT_ERROR){
+    //handle error packet
+    wl_error_handler( wl_buf[WL_ERROR_LOC] );
+    return;
+  }
+  
+  //see if there are more robots this turn around -- NUM_ROBOTS would have 
+  //increased
+  if(wl_buf[NUM_BOTS_LOC] > NUM_BOTS){
+    //if you are the last robot
+    if(DEST == 0){
+      //if you are the last robot in the ring
+      //change your dest to the new number (the last bot)
+      DEST = NUM_BOTS;
+      //lcd_putchar('j');
+    }
+
+    //increase the number of robots to what it is in the incoming packet
+    NUM_BOTS = wl_buf[NUM_BOTS_LOC];
+  }
+		
+  //make sure packet isn't your own (shouldn't really happen)
+  if(wl_buf[WL_SRC_LOC] == SRC) {
+    //lcd_putchar('d');
+    return;
+  }
+  
+  //get the data out of the sensor row
+  int i = 0;
+  int self = wl_buf[WL_SRC_LOC];
+  //13-4 = 9
+  int end = MIN(WL_DATA_ROW_END, NUM_BOTS+WL_DATA_ROW_START);
+  //lcd_putchar('s');
+  //lcd_putchar(self+48);
+  //lcd_putchar(':');
+  //lcd_putchar(end+48);
+  for(i = WL_DATA_ROW_START; i < end; i++){
+    addSensor(wl_buf[i], self, (i-WL_DATA_ROW_START), NUM_BOTS);
+  }
+  
+  //if you are the destination - respond
+  if(wl_buf[WL_DEST_LOC] == SRC) {
+    //you know that you got a message addressed to you -- previous robot must 
+    //not be dead
+    wl_to_death_count = 0;
+    //the robot previous to you is in wl_buf[WL_SRC_LOC]
+    PREV = wl_buf[WL_SRC_LOC];
+    
+    //create a packet
+    //lcd_putchar('s');
+    wl_create_packet();
+    wl_send();
+  }
+
+  return;
+}
+
+/**
+   \fun wl_init
+*/
+void wl_init(void)
+{
+  lcd_putchar('~');
+  lcd_putchar(SRC+48);
+  lcd_putchar('~');
+  lcd_putchar(DEST+48);
+  lcd_putchar('~');
+  lcd_putchar(NUM_BOTS+48);
+  lcd_putchar('~');
+    
+  buzzer_init();
+  buzzer_set_freq(C5);
+  delay_ms(800);
+  buzzer_off();
+	
+  wl_index = 0;
+  wl_chksum = 1;
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+	
+  /* executes the function about every 1/4 sec */
+  rtc_init(PRESCALE_DIV_128, 64, &wl_timeout_handler); 
+
+  wl_to_flag = 0;
+  wl_to_count = 0; 
+  wl_to_death_count = 0;
+  wl_to_death_flag = 0;
+	
+  wl_to_max = WL_TO_INITIAL;
+  first_time = 1;
+  wl_wait_for_turn = 0;
+	
+  UCSR0B |= _BV(RXCIE) | _BV(RXEN);
+	
+  sei();
+}
+
+void wl_send ( void ) {
+  int i = 0;
+  
+  if(set_orb_wireless) {
+    orb_set_color(BLUE);
+  }
+  
+  led_user(1);
+  
+  if(SRC == (NUM_BOTS - 1) ) {
+    //if you are the last robot
+    //delay for some time
+    if(set_orb_wireless) {
+      orb_set_color(RED);
+    }
+    delay_ms(LAST_ROBOT_DELAY);
+    
+    //warning: delay is actually 0 -- adding the delay back causes issues.
+  }
+  
+  //this is where you would turn on the BOM
+  bom_on();
+  delay_ms(WL_DELAY_BOM_PRE);
+  for(i = 0; i < WL_PKT_LEN; i++) {
+    serial_putchar(wl_buf[i]);
+    serial1_putchar(wl_buf[i]);
+  }
+  
+  delay_ms(WL_DELAY_BOM_POST);
+  //this is where you would turn the BOM off
+  bom_off();
+  
+  led_user(0);
+  //sprintf(buf, "%d\n\r", wl_buf[WL_CHK_LOC]);
+  //put_string(buf);
+}
+
+void wl_create_packet() {
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  wl_buf[WL_SRC_LOC] = SRC;     //Where the packet came from
+  wl_buf[WL_DEST_LOC] = DEST;   //Who the packet is for
+  
+  //Behavior Specific Data goes here
+  wl_buf[WL_DATA_DATA0] = 0;
+  wl_buf[WL_DATA_DATA1] = 0;
+  wl_buf[WL_DATA_DATA2] = 0;
+  
+  //fill packet with data -- sensor row
+  for(int i = WL_DATA_ROW_START; i <= WL_DATA_ROW_END; i++) {
+    wl_buf[i] = sensors[SRC][i - WL_DATA_ROW_START];
+  }
+  
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Add custom data to the packets
+void wl_create_data_packet(unsigned char d0, unsigned char d1, 
+                           unsigned char d2)
+{
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+	
+  wl_buf[WL_SRC_LOC] = SRC;     //Where the packet came from
+  wl_buf[WL_DEST_LOC] = DEST;   //Who the packet is for
+    
+  //Behavior Specific Data goes here
+  wl_buf[WL_DATA_DATA0] = d0;
+  wl_buf[WL_DATA_DATA1] = d1;
+  wl_buf[WL_DATA_DATA2] = d2;
+	
+  //fill packet with data -- sensor row
+  for(int i = WL_DATA_ROW_START; i <= WL_DATA_ROW_END; i++) {
+    wl_buf[i] = sensors[SRC][i - WL_DATA_ROW_START];
+  }
+	
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+  
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Send an error packet
+void wl_create_error_packet(unsigned char errcode)
+{
+  //Header for Colony Project
+  wl_buf[0] = 'R';
+  wl_buf[1] = 'C';
+  
+  //DEST is all robots
+  wl_buf[WL_SRC_LOC] = SRC;
+  wl_buf[WL_DEST_LOC] = WL_PKT_ERROR;
+  wl_buf[WL_ERROR_LOC] = errcode;
+	
+  //rest of the packet is just a bunch of 0s
+  for(int i = WL_ERR_DEAD_LOC + 1; i <= WL_DATA_END; i++) {
+    wl_buf[i] = 0;
+  }
+	
+  //add the number of robots in there
+  wl_buf[NUM_BOTS_LOC] = NUM_BOTS;
+	
+  //create the checksum
+  wl_make_checksum();
+}
+
+//Computes the checksum
+void wl_make_checksum() 
+{
+  char checksum = 0;
+
+  for(int i = WL_SRC_LOC; i < WL_CHK_LOC; i++) {
+    checksum -= wl_buf[i];
+  }
+
+  wl_buf[WL_CHK_LOC] = checksum;
+}
+
+//use on new avr-libc
+//ISR(USART0_RX_vect)
+SIGNAL(SIG_USART0_RECV)
+{
+  int max_bom;
+  
+  wl_input = UDR0;
+  
+  //printf("%d ", wl_input);
+	
+  if((wl_index == 0) && (wl_chksum != 0)){
+    //first packet? - check chksum to make sure we're not beginning
+    if( wl_input == 'R' ) {
+      //got the first code
+      wl_index++;
+      
+      //if(set_orb_wireless) {
+      //  orb_set_color(GREEN);
+      //}
+      //lcd_putchar('R');
+      //serial1_putchar('R');
+			
+      wl_to_count = 0;  	 	//at this point we're not timing out, reset counter
+    }
+    return;
+  }else if( wl_index == 1 ){
+    if(wl_input == 'C') {
+      wl_index++;
+      wl_chksum = 0;
+      //lcd_putchar('C');
+      //serial1_putchar('C');
+    }else{
+      //incomplete packet header
+      wl_index = 0;
+    }
+    return;
+  }
+	
+  if( wl_index >= WL_SRC_LOC ) {
+    if( wl_index < WL_CHK_LOC ) {
+      //getting the rest of the packet
+      wl_buf[wl_index] = wl_input;
+      wl_chksum += wl_input;
+      wl_index++;
+    }else{
+      //we are at checksum location
+      wl_buf[wl_index] = 0;
+      wl_chksum += wl_input;
+      wl_index = 0;
+      if(!wl_chksum) {
+        //checksum is correct - equal to zero
+        //if(set_orb_wireless) {
+        //  orb_set_color(ORB_OFF);
+        //}
+        //lcd_putchar('p');
+                
+        //get the maximum BOM from the person who sent you the packet
+        max_bom = getMaxBom();
+        //lcd_putint(max_bom);
+        //lcd_putchar(' ');
+        //add to your own sensor the other robot's direction
+                
+        //        max_bom  you  them
+        addSensor(max_bom, SRC, wl_buf[WL_SRC_LOC], NUM_BOTS);
+                
+        //also set whether that robot can see the light or not
+        //set_light_status(wl_buf[WL_SRC_LOC], wl_buf[WL_DATA_LIGHT_LOC]);
+      }else{  
+        //chksum failed
+        //serial1_putchar('F');
+        //lcd_putchar('F');
+      }
+    }
+  }
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/dio.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/dio.h	(revision 62)
@@ -0,0 +1,176 @@
+#ifndef _DIO_H
+#define _DIO_H
+
+
+/*
+
+these are ALL the pins
+don't use unless you know what you're doing
+
+*/
+
+#define _PORT_A 1
+#define _PORT_B 2
+#define _PORT_C 3
+#define _PORT_D 4
+#define _PORT_E 5
+#define _PORT_F 6
+#define _PORT_G 7
+
+#define _PIN_A0 8
+#define _PIN_A1 9
+#define _PIN_A2 10
+#define _PIN_A3 11
+#define _PIN_A4 12
+#define _PIN_A5 13
+#define _PIN_A6 14 
+#define _PIN_A7 15
+
+#define _PIN_B0 16
+#define _PIN_B1 17
+#define _PIN_B2 18
+#define _PIN_B3 19
+#define _PIN_B4 20
+#define _PIN_B5 21
+#define _PIN_B6 22
+#define _PIN_B7 23
+
+#define _PIN_C0 24
+#define _PIN_C1 25
+#define _PIN_C2 26
+#define _PIN_C3 27
+#define _PIN_C4 28
+#define _PIN_C5 29
+#define _PIN_C6 30
+#define _PIN_C7 31
+
+#define _PIN_D0 32
+#define _PIN_D1 33
+#define _PIN_D2 34
+#define _PIN_D3 35
+#define _PIN_D4 36
+#define _PIN_D5 37
+#define _PIN_D6 38
+#define _PIN_D7 39
+
+#define _PIN_E0 40
+#define _PIN_E1 41
+#define _PIN_E2 42
+#define _PIN_E3 43
+#define _PIN_E4 44
+#define _PIN_E5 45
+#define _PIN_E6 46
+#define _PIN_E7 47
+
+#define _PIN_F0 48
+#define _PIN_F1 49
+#define _PIN_F2 50
+#define _PIN_F3 51
+#define _PIN_F4 52
+#define _PIN_F5 53
+#define _PIN_F6 54
+#define _PIN_F7 55
+
+#define _PIN_G0 56
+#define _PIN_WR 56
+#define _PIN_G1 57
+#define _PIN_RD 57
+#define _PIN_G2 58
+#define _PIN_ALE 58
+#define _PIN_G3 59
+#define _PIN_TOSC2 59
+#define _PIN_G4 60
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+
+*/
+#define PIN_A0 8
+#define PIN_A1 9
+#define PIN_A2 10
+#define PIN_A3 11
+#define PIN_A4 12
+#define PIN_A5 13
+#define PIN_A6 14 
+#define PIN_A7 15
+
+#define PIN_SS 16
+#define PIN_SCK 17
+#define PIN_MOSI 18
+#define PIN_MISO 19
+#define PIN_LCD_COMMAND 20
+
+#define PIN_C0 24
+#define PIN_C1 25
+#define PIN_C2 26
+#define PIN_C3 27
+#define PIN_C4 28
+#define PIN_C5 29
+#define PIN_C6 30
+#define PIN_C7 31
+
+#define PIN_SCL 32
+#define PIN_SDA 33
+
+#define PIN_RX0 40
+#define PIN_TX0 41
+#define PIN_LCD_RESET 42
+//#define PIN_LEDR 43
+//#define PIN_LEDG 44
+//#define PIN_LEDB 45
+#define PIN_E6 46
+#define PIN_EXT_DIO1 46
+#define PIN_E7 47
+#define PIN_EXT_DIO2 48
+
+#define PIN_AN0 48
+#define PIN_ADC0 48
+#define PIN_AN1 49
+#define PIN_ADC1 49
+#define PIN_AN2 50
+#define PIN_ADC2 50
+#define PIN_AN3 51
+#define PIN_ADC3 51
+#define PIN_AN4 52
+#define PIN_ADC4 52
+#define PIN_AN5 53
+#define PIN_ADC5 53
+#define PIN_AN6 54
+#define PIN_ADC6 54
+#define PIN_WHEEL 54
+#define PIN_AN7 55
+#define PIN_ADC7 55
+#define PIN_BATT 55
+
+#define PIN_BTN1 56
+#define PIN_BTN2 57
+#define PIN_LED1 58
+
+int digital_input(int);
+void digital_output(int bit, int val);
+
+///////////////////////
+//////  BUTTONS  //////
+///////////////////////
+#define PIN_BTN PING
+
+#define BTN2 PING1
+#define BTN1 PING0
+
+int button1_read( void );
+void button1_wait( void );
+void button1_wait_led( void );
+
+int button2_read( void );
+void button2_wait( void );
+void button2_wait_led( void );
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_test.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_test.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_test.c	(revision 62)
@@ -0,0 +1,37 @@
+#include "firefly+_lib.h"
+
+#include "wl_adhoc.h"
+
+int main(void) {  
+  analog_init();
+  led_init();
+  orb_init();
+  motors_init();
+  lcd_init();
+  wl_init();
+
+  serial_init(BAUD115200);
+  serial1_init(BAUD115200);
+  //lcd, orb, all that good stuff
+  
+  fdevopen(&serial1_putchar, &serial1_getchar);
+
+  orb_set(255,0,0);
+
+  while(1){
+    //this needs to happen continuously -- it handles the packet
+    parse_buffer();
+    
+    /*
+    serial_putchar('a');
+    serial_putchar('b');
+    serial_putchar('c');
+    serial_putchar('d');
+    serial_putchar('e');
+    serial_putchar('f');
+    serial_putchar('g');
+    */
+  }
+
+  return 0;
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/bom.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/bom.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/bom.h	(revision 62)
@@ -0,0 +1,44 @@
+
+#ifndef _BOM_H
+#define _BOM_H
+
+
+#include "firefly+_lib.h"
+
+/*
+
+
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+
+*/
+
+
+#define MONKI AN0         //analog
+//------------------------//
+#define MONKL PIN_C2      //green
+#define MONK1 PIN_C3      //blue
+#define MONK0 PIN_C4      //white
+//------------------------//
+#define MONK3 PIN_C5      //blue
+#define MONK2 PIN_C6      //white 
+
+
+
+int getMaxBom( void );
+
+void bom_on(void);
+void bom_off(void);
+
+void output_high(int which);
+void output_low(int which);
+
+
+#endif
+
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_adhoc.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_adhoc.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/wl_adhoc.h	(revision 62)
@@ -0,0 +1,125 @@
+#ifndef _WL_ADHOC_H_
+#define _WL_ADHOC_H_
+
+#include "localization.h"
+
+#define WL_BAUD BAUD115200
+
+/*
+ 0 - R
+ 1 - C
+ 2 - SRC
+ 3 - DEST
+ 4 - DATA0          Behavior specific Data
+ 5 - DATA1
+ 6 - DATA2
+ 7 - ROW[0]
+ 8 - ROW[1] 
+ 9 - ROW[2]
+10 - ROW[3]         make sure that you can fit MAX_ROBOTS bytes
+11 - ROW[4]
+12 - ROW[5]
+13 - ROW[6]
+14 - NUM_BOTS
+15 - CHK
+*/
+
+#define WL_PKT_LEN 16           //0...15
+
+#define WL_SRC_LOC 2   //SRC
+#define WL_DEST_LOC 3  //DEST
+
+#define WL_DATA_DATA0 4     //Behavior Specific Data
+#define WL_DATA_DATA1 5
+#define WL_DATA_DATA2 6
+
+#define WL_DATA_ROW_START 7     //start of sensor row (ROW[0])
+#define WL_DATA_ROW_END 13      //end (ROW[6] for now)
+
+//start of wireless data -- not necessarily anything in particular
+#define WL_DATA_START 4
+#define WL_DATA_END 13
+
+#define NUM_BOTS_LOC 14   //location of number of robots - sent in every packet
+#define WL_CHK_LOC 15    //check sum, negative of the sum of the rest of the 
+
+#define WL_TIMEOUT 4
+#define WL_TO_INITIAL 4
+#define WL_TO_LEADER 2
+#define WL_TO_DEATH 5
+//if a robot times out WL_TO_DEATH times, it will be considered dead
+
+#define LAST_ROBOT_DELAY 10   
+#define WL_DELAY_BOM_PRE 100
+//How much to delay between turning on BOM and sending a packet
+
+#define WL_DELAY_BOM_POST 100
+//How much to delay between completing a packet send and turning off BOM
+
+#define WL_PKT_ERROR 255
+#define WL_ERROR_LOC 4
+
+//error codes
+#define WL_ERRCODE_ROBOTDEATH 123     //For timeouts
+#define WL_ERRCODE_NEEDTOCHARGE 250   //For pinging charging station
+#define WL_ERRCODE_CHARGESTATION 251  //Charging station response to ping
+#define WL_ERR_DEAD_LOC 5
+
+char wl_buf[WL_PKT_LEN];
+int wl_csloc; //Stores where the last seen Charging Station was relative to you
+char wl_input;
+unsigned int wl_index;
+unsigned char wl_chksum;
+
+unsigned char wl_to_flag; 
+//Throws 1 if the time since last packet crosses a threshhold
+
+unsigned int wl_to_count;
+//Counts up for every time unit that you do not recieve 
+
+unsigned int PREV;            //Who's before you in the ring
+unsigned int SRC;             //Your ID in the ring
+unsigned int DEST;            //Who's after you in the ring
+unsigned int NUM_BOTS;        //How many robots are in the ring
+
+unsigned int CHARGESTATION;     //0 If robot, 1 if Charging Station
+
+unsigned int wl_to_max;         //Timeout maximum (threshold)
+
+//Counts how many times the robot before you times out
+unsigned int wl_to_death_count;
+unsigned char wl_to_death_flag;   //If the one before you times out too much
+
+char first_time;
+char wl_wait_for_turn;
+
+/* Functions */
+void bom_test(void);
+void wl_adhoc(void);
+
+void wl_init(void);
+
+void wl_send(void);
+void parse_buffer(void);
+void wl_timeout_handler(void);
+
+//Prints out debug information
+void display_debug(void);
+
+//Removes Dead robot from network
+void wl_death_handler( void );
+//Chooses an error and deals with it
+void wl_error_handler(unsigned char ecode);
+
+//Generic Packet
+void wl_create_packet(void);
+//Data Packet
+void wl_create_data_packet(unsigned char d0, unsigned char d1, 
+                           unsigned char d2);
+
+//Generic Error Packet
+void wl_create_error_packet(unsigned char errcode);
+//Compute the checksum and stores it for a packet
+void wl_make_checksum( void);
+
+#endif
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lights.c
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/lights.c	(revision 62)
@@ -0,0 +1,104 @@
+/*
+lights.c
+Controls led_user (small green LED) and the ORB (big light)
+
+author: CMU Robotics Club, Colony Project
+*/
+
+//#include "lights.h"
+#include "firefly+_lib.h"
+
+// the below comment may not be correct
+// Initializes timer2 to count every 0.5 us, overflowing every 16.32 ms (because we set the counter to start at 0x8000)
+void orb_init() 
+{
+
+	//enable the data direction register on the 3 orb LEDs
+	DDRE |= _BV(REDLED) | _BV(GREENLED) | _BV(BLUELED);
+	
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+	TCCR3B = 0x0C;  // High bits to 0, WGM 3:2 set to 1, prescaler to 8
+
+// clear Output Compare Registers
+	OCR3AH=0x00;
+	OCR3AL=0x00;
+	OCR3BH=0x00;
+	OCR3BL=0x00;
+	OCR3CH=0x00;
+	OCR3CL=0x00;
+}
+
+// Sets the red, green and blue elements of the LED with 8-bit resolution
+void orb_set(unsigned int red_led, unsigned int green_led, unsigned int blue_led)
+{	
+	OCR3AL = red_led;
+	OCR3BL = green_led;
+	OCR3CL = blue_led;
+}
+
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+void orb_disable()
+{
+	TCCR3A = 0x01;  // COM## disconnected, WGM 1:0 set to 1
+}
+
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+void orb_enable()
+{
+	TCCR3A = 0xA9;  // COM## set to noninvert, WGM 1:0 set to 1
+}
+
+
+/*
+This function turns each Orb element on or off
+Useful for using the Orb for debugging purposes without
+the overhead of the software PWM routine used for color fading.
+*/
+void orb_set_dio(int red, int green, int blue) 
+{
+	if(red == 0)
+		PORTE &= (0xFF - _BV(REDLED));
+	else
+		PORTE |= _BV(REDLED);
+	
+	
+	if(green == 0)
+		PORTE &= (0xFF - _BV(GREENLED));
+	else
+		PORTE |= _BV(GREENLED);
+		
+	
+	if(blue == 0)
+		PORTE &= (0xFF - _BV(BLUELED));
+	else
+		PORTE |= _BV(BLUELED);
+}
+
+
+/////////////////////////////////////////
+///////////    user LED   ///////////////
+/////////////////////////////////////////
+void led_init( void )
+{
+	DDRG |= _BV(USERLED);
+}
+
+void led_user(int value) 
+{
+	if(value == 0) 
+		PORTG &= (0xFF - _BV(USERLED)); 
+	else
+		PORTG |= _BV(USERLED);
+}
Index: branches/charge_board/code/projects/colonet/testing/wl_network_colonet/ring_buffer.h
===================================================================
--- branches/charge_board/code/projects/colonet/testing/wl_network_colonet/ring_buffer.h	(nonexistent)
+++ branches/charge_board/code/projects/colonet/testing/wl_network_colonet/ring_buffer.h	(revision 62)
@@ -0,0 +1,118 @@
+/** @file Include macros to create a ring buffer. Originally written for 15-410.
+ *  Modified for use in ATMega128 serial driver
+ *
+ *	@author Cornell Wright (cgwright)
+ *	@author Jason P. Winters (jpwinter)
+ *
+ *	@bugs None known.
+ */
+
+
+#ifndef _RING_BUFFER_H
+#define _RING_BUFFER_H
+
+/** @brief Creates the struct for a new ring buffer. This just expands to a
+ *	structure definition and thus should be invoked in the global context.
+ *
+ *	@param struct_name Name of the ring buffer struct.
+ *
+ *	@param size The size of the buffer to create.
+ *
+ *	@param type The type of object that the queue is to hold.
+ *
+ *	@param ... Name or names of the instance or instances of the ring buffer(s)
+ *	to be created.
+ */
+#define RING_BUFFER_NEW(struct_name, size, type, ...)	\
+	struct struct_name {	\
+		type queue[size];	\
+		uint8_t start;			\
+		uint8_t end;			\
+	} __VA_ARGS__
+
+#define RING_BUFFER_BIT_NEW(struct_name, size, ...)	\
+	struct struct_name {	\
+		int8_t queue[(size / 8) + 1];	\
+		uint16_t start;	\
+		uint16_t end;	\
+	} __VA_ARGS__
+
+/** @brief Sets the specified ring buffer to be empty.
+ *
+ *	@param buf The ring buffer to make empty.
+ */
+#define RING_BUFFER_CLEAR(buf)	\
+	do {						\
+		(buf).start = 0;		\
+		(buf).end = 0;			\
+	} while (0)
+
+#define RING_BUFFER_BIT_CLEAR(buf) RING_BUFFER_CLEAR(buf)
+/** @brief Returns true if the ring buffer specified is empty.
+ *
+ *	@param buf The buffer to check emptiness of.
+ */
+#define RING_BUFFER_EMPTY(buf) ((buf).start == (buf).end)
+
+
+
+#define RING_BUFFER_BIT_EMPTY(buf) RING_BUFFER_EMPTY(buf)
+
+
+/** @brief Returns true if the ring buffer specified is full.
+ *
+ *	@param buf The buffer to check fullness of.
+ */
+#define RING_BUFFER_FULL(buf)	\
+		(((buf).end + 1) % sizeof((buf).queue) == (buf).start)
+
+#define RING_BUFFER_BIT_FULL(buf) RING_BUFFER_FULL(buf)
+
+/** @brief Adds val to ring buffer buf. Note that val must be of the type
+ *	used in creating the ring buffer to prevent the compiler from spewing
+ *	confusing errors. Also, this assumes that the ring buffer is not full.
+ *
+ *	@param buf The ring buffer to add to.
+ *	@param val The value to add.
+ */
+#define RING_BUFFER_ADD(buf, val)		\
+	do {								\
+		(buf).queue[(buf).end] = val;	\
+		(buf).end = ((buf).end + 1) % sizeof((buf).queue);	\
+	} while (0)
+
+#define RING_BUFFER_BIT_ADD(buf, val)	\
+	do {								\
+		if (val) {						\
+			(buf).queue[((buf).end >> 3) & 0xff] |= _BV((buf).end & 0x7);	\
+		}								\
+		else {							\
+			(buf).queue[((buf).end >> 3) & 0xff] &= ~_BV((buf).end & 0x7);	\
+		}								\
+		(buf).end = ((buf).end + 1) % (sizeof((buf).queue) << 3);			\
+	} while (0)
+
+
+/** @brief Removes the value at the head of the ring buffer and puts it in
+ *	val_ret. Note that val_ret must be the same type used in creating the ring
+ *	buffer to prevent the compiler from spewing confusing errors. Also, this
+ *	assumes that the ring buffer is not empty.
+ *
+ *	@param buf The ring buffer to remove from.
+ *	@param val_ret Where to put the value removed from the head of the ring
+ *	buffer.
+ */
+#define RING_BUFFER_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = (buf).queue[(buf).start];	\
+		(buf).start = ((buf).start + 1) % sizeof((buf).queue);	\
+	} while (0)
+
+#define RING_BUFFER_BIT_REMOVE(buf, val_ret)	\
+	do {	\
+		(val_ret) = ((buf).queue[((buf).start >> 3) & 0xff] & _BV((buf).start & 0x7)) ? 1 : 0;	\
+		(buf).start = ((buf).start + 1) % (sizeof((buf).queue) << 3);	\
+	} while (0)
+
+#endif /* _RING_BUFFER_H */
+
Index: branches/charge_board/code/projects/libwireless/test/test.c
===================================================================
--- branches/charge_board/code/projects/libwireless/test/test.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/test/test.c	(revision 62)
@@ -0,0 +1,56 @@
+#include "stdlib.h"
+#include "stdio.h"
+
+#include "../lib/wireless.h"
+#include "../lib/wl_error_group.h"
+#include "../lib/wl_token_ring.h"
+//#include "../lib/xbee.h"
+
+#include <time.h>
+
+int main()
+{
+	/*unsigned char buffer[128];
+	xbee_lib_init(0x3331);
+	printf("%i\n", xbee_get_address());
+	struct timespec delay;
+	delay.tv_sec = 0;
+	delay.tv_nsec = 100000000;
+	while (1)
+	{
+		int len = xbee_get_packet(buffer);
+		if (len != -1)
+		{
+			int i;
+			for (i = 0; i < len; i++)
+				printf("%c", buffer[i]);
+			printf("\n\r");
+		}
+		nanosleep(&delay, 0);
+		wl_send_global_packet(1, 1, "CHECK", 3,
+					0);
+	}
+	xbee_terminate();*/
+	wl_init();
+	wl_set_channel(0x1A);
+	printf("Wireless initialized.\n");
+	wl_error_register();
+	wl_token_ring_register();
+	wl_token_ring_join();
+	printf("Packet groups initialized.\n");
+	
+	struct timespec delay;
+	delay.tv_sec = 0;
+	delay.tv_nsec = 100000000;
+	while (1)
+	{
+		//wl_error_send_string("s");
+		wl_do();
+		nanosleep(&delay, 0);
+	}
+	
+	wl_terminate();
+	
+	return 0;
+}
+
Index: branches/charge_board/code/projects/libwireless/test/Makefile
===================================================================
--- branches/charge_board/code/projects/libwireless/test/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/test/Makefile	(revision 62)
@@ -0,0 +1,11 @@
+CC = gcc
+CFLAGS = -Wall -g
+
+all: test
+
+test: *.c ../lib/*.c 
+	$(CC) $(CFLAGS) *.c -L../lib -o test -pthread -lrt -lwireless
+
+clean:
+	rm *.o test ../lib/*.o
+
Index: branches/charge_board/code/projects/libwireless/lib/wireless.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wireless.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wireless.h	(revision 62)
@@ -0,0 +1,128 @@
+/**
+ * @file wireless.h
+ * @brief Contains definitions for the wireless library.
+ *
+ * Contains functions for the wireless library.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+ 
+//Note: If this is raised above 16, we will need to do
+//something about frame numbers for TX Status packets.
+/**
+ * The maximum number of packet groups.
+ **/
+#define WL_MAX_PACKET_GROUPS 16
+
+/**
+ * @defgroup wireless Wireless
+ * @brief Wireless definitions.
+ *
+ * Contains functions and definitions for dealing with wireless functionality.<br><br>
+ *
+ * The wireless library provides a modular method for dealing with 
+ * wireless packets, by allowing packet groups to be registered.
+ * A packet group is a collection of packets which share a packet
+ * group code. Each packet in the group also has a type. A packet 
+ * group code and type are sent with each packet. When a packet
+ * with a group code registered in the wireless library is 
+ * received, the corresponding event handler is called. The
+ * event handler uses the packet type and other information
+ * stored in the packet to respond.<br><br>
+ *
+ * This architecture allows different wireless functionality to be
+ * defined and handled separately, making it simpler and more
+ * efficient to take advantage of the XBee's wireless functionality.
+ *
+ * @{
+ **/
+
+/**
+ * @struct PacketGroupHandler
+ * A PacketGroupHandler represents a packet group, and is used to 
+ * register a packet group with the wireless library. It contains
+ * handlers for various events which can occur related to a packet
+ * group.
+ **/
+typedef struct
+{
+	/**
+	 * The group code for this packet group. This number
+	 * must be unique. The maximum number of packet groups
+	 * is defined by WL_MAX_PACKET_GROUPS.
+	 **/
+	unsigned int groupCode;
+
+	/**
+	 * Called every half second (not in interrupt,
+	 * but in wl_do).
+	 **/
+	void (*timeout_handler) (void);
+	
+	/**
+	 * Called when a transmit status packet is received
+	 * from the XBee where the first four bits of the frame
+	 * are  the group code.
+	 *
+	 * @param frame the last four bits of the frame
+	 * @param received is true if we received an ack, 0 if
+	 * we did not.
+	 **/
+	void (*handle_response) (int frame, int received);
+	
+	/**
+	 * Called when we receive a packet from this group.
+	 *
+	 * @param type the packet type
+	 * @param source the 16-bit address of the XBee this
+	 * packet was sent from
+	 * @param packet the packet received
+	 * @param length the length of the packet
+	 **/
+	void (*handle_receive) (char type, int source, unsigned char* packet,
+							int length);
+	
+	/**
+	 * Called for any cleanup when the network is turned off.
+	 **/
+	void (*unregister) (void);
+	
+} PacketGroupHandler;
+
+/**@brief Initialize the wireless library **/
+void wl_init(void);
+/**@brief Uninitialize the wireless library **/
+void wl_terminate(void);
+/**@brief Perform wireless library functionality **/
+void wl_do(void);
+/**@brief Register a packet group with the wireless library **/
+void wl_register_packet_group(PacketGroupHandler* h);
+/**@brief Unregister a packet group with the wireless library **/
+void wl_unregister_packet_group(PacketGroupHandler* h);
+
+/**@brief Send a packet to a specific robot in any PAN **/
+void wl_send_robot_to_robot_global_packet(char group, char type,
+		char* data, int len, int dest, char frame);
+/**@brief Send a packet to a specific robot in our PAN **/
+void wl_send_robot_to_robot_packet(char group, char type,
+		char* data, int len, int dest, char frame);
+/**@brief Send a packet to all robots **/
+void wl_send_global_packet(char group, char type,
+		char* data, int len, char frame);
+/**@brief Send a packet to all robots in our PAN **/
+void wl_send_pan_packet(char group, char type,
+		char* data, int len, char frame);
+
+/**@brief Set the PAN we are using **/
+void wl_set_pan(int pan);
+/**@brief Get the PAN we are using **/
+int wl_get_pan(void);
+/**@brief Set the channel we are using **/
+void wl_set_channel(int channel);
+/**@brief Get the channel we are using **/
+int wl_get_channel(void);
+/**@brief Get the 16-bit address of the XBee module **/
+unsigned int wl_get_xbee_id(void);
+
+/** @} **/ // end defgroup
+
Index: branches/charge_board/code/projects/libwireless/lib/xbee.c
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/xbee.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/xbee.c	(revision 62)
@@ -0,0 +1,730 @@
+#include "xbee.h"
+#include "wl_defs.h"
+
+#ifndef ROBOT
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <errno.h>
+
+#else
+
+#include <serial.h>
+#include <avr/interrupt.h>
+
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <queue.h>
+
+#define XBEE_FRAME_START 0x7E
+
+/*Frame Types*/
+#define XBEE_FRAME_STATUS 0x8A
+#define XBEE_FRAME_AT_COMMAND 0x08
+#define XBEE_FRAME_AT_COMMAND_RESPONSE 0x88
+#define XBEE_FRAME_TX_REQUEST_64 0x00
+#define XBEE_FRAME_TX_REQUEST_16 0x01
+#define XBEE_FRAME_TX_STATUS XBEE_TX_STATUS
+#define XBEE_FRAME_RX_64 0x80
+#define XBEE_FRAME_RX_16 XBEE_RX
+
+/*Internal Function Prototypes*/
+
+/*I/O Functions*/
+void xbee_send(char* buf, int size);
+void xbee_send_string(char* c);
+
+#ifndef ROBOT
+void xbee_read(char* buf, int size);
+#endif
+
+/*Command Mode Functions
+ * Called during initialization.
+ */
+void xbee_enter_command_mode(void);
+void xbee_exit_command_mode(void);
+void xbee_enter_api_mode(void);
+void xbee_wait_for_string(char* s, int len);
+void xbee_wait_for_ok(void);
+
+/*API Mode Functions*/
+
+int xbee_handle_packet(char* packet, int len);
+void xbee_handle_at_command_response(char* command, char result,
+	char* extra, int extraLen);
+void xbee_handle_status(char status);
+int xbee_verify_checksum(char* packet, int len);
+char xbee_compute_checksum(char* packet, int len);
+void xbee_send_frame(char* buf, int len);
+void xbee_send_read_at_command(char* command);
+void xbee_send_modify_at_command(char* command, char* value);
+
+/*Global Variables*/
+
+#ifndef ROBOT
+int xbee_stream;
+pthread_t* xbee_listen_thread;
+#endif
+
+Queue* xbee_queue;
+
+//used to store packets as they are read
+char xbee_buf[128];
+int currentBufPos = 0;
+
+//XBee status
+unsigned int xbee_panID = XBEE_PAN_DEFAULT;
+unsigned int xbee_pending_panID = XBEE_PAN_DEFAULT;
+int xbee_channel = XBEE_CHANNEL_DEFAULT;
+int xbee_pending_channel = XBEE_CHANNEL_DEFAULT;
+unsigned int xbee_address = 0;
+
+/*Function Implementations*/
+
+#ifdef ROBOT
+
+/**
+ * Interrupt for the robot. Adds bytes received from the xbee
+ * to the queue.
+ **/
+ISR(USART1_RX_vect)
+{
+	char c = UDR1;
+	queue_add(xbee_queue, (void*)(int)c);
+}
+
+#else
+
+/**
+ * Thread that listens to the xbee.
+ **/
+void* listen_to_xbee(void* x)
+{
+	char c;
+	while (1)
+	{
+		xbee_read(&c, 1);
+		queue_add(xbee_queue, (void*)(int)c);
+	}
+	return 0;
+}
+
+#endif
+
+/**
+ * Initializes the XBee library so that other functions may be used.
+ *
+ * @param pan_id the PAN to join initially. Use XBEE_PAN_DEFAULT
+ * to leave the PAN as it is initially.
+ **/
+void xbee_lib_init(void)
+{
+	xbee_queue = queue_create();
+	
+	#ifdef ROBOT
+
+	//enable the receiving interrupt
+	UCSR1B |= _BV(RXCIE);
+	sei();
+	#else
+	xbee_stream = open("/dev/ttyUSB0", O_RDWR);
+	if (xbee_stream == -1 || lockf(xbee_stream, F_TEST, 0) != 0)
+		xbee_stream = open("/dev/ttyUSB1", O_RDWR);
+	if (xbee_stream == -1 || lockf(xbee_stream, F_TEST, 0) != 0)
+	{
+		printf("Failed to open connection to XBee.\r\n");
+		exit(0);
+	}
+	lockf(xbee_stream, F_LOCK, 0);
+	
+	xbee_listen_thread =
+		(pthread_t*)malloc(sizeof(pthread_t));
+	
+	int ret = pthread_create(xbee_listen_thread, NULL, 
+		listen_to_xbee, NULL);
+	if (ret)
+	{
+		printf("Failed to create listener thread.\r\n");
+		exit(0);
+	}
+	#endif
+	xbee_enter_command_mode();
+	xbee_enter_api_mode();
+	xbee_exit_command_mode();
+	xbee_send_read_at_command("MY");
+	
+	//wait to return until the address is set
+	while (xbee_address == 0) xbee_get_packet(NULL);
+}
+
+/**
+ * Call when finished using the XBee library. This releases
+ * all sued resources.
+ **/
+void xbee_terminate()
+{
+	#ifndef ROBOT
+	pthread_cancel(*xbee_listen_thread);
+	free(xbee_listen_thread);
+	lockf(xbee_stream, F_ULOCK, 0);
+	close(xbee_stream);
+	#endif
+	queue_destroy(xbee_queue);
+}
+
+/**
+ * Send a buffer buf of size bytes to the XBee.
+ * 
+ * @param buf the buffer of data to send
+ * @param size the number of bytes to send
+ **/
+void xbee_send(char* buf, int size)
+{
+	#ifdef ROBOT
+	int i;
+	for (i = 0; i < size; i++)
+		xbee_putc(buf[i]);
+	#else
+	int ret = write(xbee_stream, buf, size);
+	//success
+	if (ret == size)
+		return;
+	if (ret == -1)
+	{
+		//interrupted by system signal, probably timer interrupt.
+		//just try again
+		if (errno == 4)
+		{
+			xbee_send(buf, size);
+			return;
+		}
+		printf("Failed to write to xbee, error %i.\r\n", errno);
+		return;
+	}
+
+	//write was interrupted after writing ret bytes
+	xbee_send(buf + ret, size - ret);
+	#endif
+}
+
+/**
+ * Sends a string to the XBee.
+ *
+ * @param c the string to send to the XBEE
+ **/
+void xbee_send_string(char* c)
+{
+	xbee_send(c, strlen(c));
+}
+
+#ifndef ROBOT
+void xbee_read(char* buf, int size)
+{
+	if (read(xbee_stream, buf, size) == -1)
+		printf("Failed to read from xbee.\r\n");
+}
+#endif
+
+/**
+ * Enter into command mode.
+ **/
+void xbee_enter_command_mode()
+{
+	xbee_send_string("+++");
+	xbee_wait_for_ok();
+}
+
+/**
+ * Exit from command mode.
+ **/
+void xbee_exit_command_mode()
+{
+	xbee_send_string("ATCN\r");
+	xbee_wait_for_ok();
+}
+
+/**
+ * Enter API mode.
+ **/
+void xbee_enter_api_mode()
+{
+	xbee_send_string("ATAP 1\r");
+	xbee_wait_for_ok();
+}
+
+/**
+ * Wait until the string "OK\r" is received from the XBee.
+ **/
+void xbee_wait_for_ok()
+{
+	xbee_wait_for_string("OK\r", 3);
+}
+
+/**
+ * Delay until the specified string is received from
+ * the XBee. Discards all other XBee data.
+ *
+ * @param s the string to receive
+ * @param len the length of the string
+ **/
+void xbee_wait_for_string(char* s, int len)
+{
+	char* curr = s;
+	while (curr - s < len)
+	{
+		if (queue_is_empty(xbee_queue))
+			continue;
+		char c = (char)(int)queue_remove(xbee_queue);
+		if (c == *curr)
+			curr++;
+		else
+			curr = s;
+	}
+}
+
+/**
+ * Verifies that the packets checksum is correct.
+ * (If the checksum is correct, the sum of the bytes
+ * is 0xFF.)
+ *
+ * @param packet the packet received. This includes the first
+ * three bytes, which are header information from the XBee.
+ *
+ * @param len The length of the packet received from the XBee
+ *
+ * @return 0 if the checksum is incorrect, nonzero
+ * otherwise
+ **/
+int xbee_verify_checksum(char* packet, int len)
+{
+	unsigned char sum = 0;
+	int i;
+	for (i = 3; i < len; i++)
+		sum += (unsigned char)packet[i];
+	return sum == 0xFF;
+}
+
+/**
+ * Returns the checksum of the given packet.
+ *
+ * @param buf the data for the packet to send
+ * @param len the length of the packet in bytes
+ *
+ * @return the checksum of the packet, which will
+ * become the last byte sent in the packet
+ **/
+char xbee_compute_checksum(char* buf, int len)
+{
+	int i;
+	unsigned char sum = 0;
+	for (i = 0; i < len; i++)
+		sum += (unsigned char)buf[i];
+	return 0xFF - sum;
+}
+
+/**
+ * Adds header information and checksum to the given
+ * packet and sends it. Header information includes
+ * XBEE_FRAME_START and the packet length, as two bytes.
+ *
+ * @param buf the packet data
+ * @param len the size in bytes of the packet data
+ *
+ **/
+void xbee_send_frame(char* buf, int len)
+{
+	char prefix[3];
+	prefix[0] = XBEE_FRAME_START;
+	prefix[1] = (len & 0xFF00) >> 8;
+	prefix[2] = len & 0xFF;
+	char checksum = xbee_compute_checksum(buf, len);
+	xbee_send(prefix, 3);
+	xbee_send(buf, len);
+	xbee_send(&checksum, 1);
+}
+
+/**
+ * Sends an AT command to read a parameter.
+ *
+ * @param command the AT command to send. For exmaple,
+ * use ID to read the PAN ID and MY to return the XBee ID.
+ * See the XBee reference guide for a complete listing.
+ **/
+void xbee_send_read_at_command(char* command)
+{
+	xbee_send_modify_at_command(command, NULL);
+}
+
+/**
+ * Sends the given AT command.
+ *
+ * @param command the AT command to send (e.g., MY, ID)
+ * @param value the value to pass as a parameter
+ * (or NULL if there is no parameter)
+ **/
+void xbee_send_modify_at_command(char* command, char* value)
+{
+	char buf[16];
+	int i;
+	
+	buf[0] = XBEE_FRAME_AT_COMMAND;
+	buf[1] = 1;
+	buf[2] = command[0];
+	buf[3] = command[1];
+	int valueLen = 0;
+	if (value != NULL)
+	{
+		valueLen = strlen(value);
+		if (valueLen > 8)
+		{
+			WL_DEBUG_PRINT("AT Command too large.\r\n");
+			return;
+		}
+		for (i = 0; i < valueLen; i++)
+			buf[4 + i] = value[i];
+	}
+	xbee_send_frame(buf, 4 + valueLen);
+}
+
+/**
+ * Send the specified packet.
+ * 
+ * @param packet the packet data to send
+ * @param len the number of bytes in the packet
+ * 
+ * @param dest the ID of the XBee to send the packet to,
+ * or XBEE_BROADCAST to send the message to all robots
+ * in the PAN.
+ * 
+ * @param options a combination of the flags
+ * XBEE_OPTIONS_NONE, XBEE_OPTIONS_DISABLE_RESPONSE and 
+ * XBEE_OPTIONS_BROADCAST_ALL_PANS
+ *
+ * @param frame the frame number to associate this packet
+ * with. This will be used to identify the response when
+ * the XBee alerts us as to whether or not our message
+ * was received.
+ **/
+void xbee_send_packet(char* packet, int len, int dest,
+	char options, char frame)
+{
+	char buf[5];
+	char prefix[3];
+	int i;
+	unsigned char checksum = 0;
+
+	if (len > 100)
+	{
+		WL_DEBUG_PRINT("Packet is too large.\r\n");
+		return;
+	}
+
+	//data for sending request
+	buf[0] = XBEE_FRAME_TX_REQUEST_16;
+	buf[1] = frame;
+	buf[2] = (dest >> 8) & 0xFF;
+	buf[3] = dest & 0xFF;
+	buf[4] = options;
+
+	//packet prefix, do this here so we don't need an extra buffer
+	prefix[0] = XBEE_FRAME_START;
+	prefix[1] = ((5 + len) & 0xFF00) >> 8;
+	prefix[2] = (5 + len) & 0xFF;
+
+	for (i = 0; i < 5; i++)
+		checksum += (unsigned char)buf[i];
+	for (i = 0; i < len; i++)
+		checksum += (unsigned char)packet[i];
+	checksum = 0xFF - checksum;
+	xbee_send(prefix, 3);
+	xbee_send(buf, 5);
+	xbee_send(packet, len);
+	xbee_send((char*)&checksum, 1);
+}
+
+/**
+ * Reads a packet received from the XBee. This function
+ * is non-blocking. The resulting packet is stored in dest.
+ * Only returns transmission response packets and
+ * received packets. The returned packet does not include
+ * header information or the checksum. This method also
+ * handles special packets dealt with by the XBee library,
+ * and so should be called frequently while the XBee is in
+ * use.<br><br>
+ *
+ * The first byte of the packet will be either
+ * XBEE_TX_STATUS or XBEE_RX to indicated
+ * a response to a sent message or a received message, 
+ * respectively.<br><br>
+ *
+ * For a status response packet:<br>
+ * The first byte will be XBEE_TX_STATUS.<br>
+ * The second byte will be the frame number.<br>
+ * The third byte will be the result. 0 indicates success,
+ * and nonzero indicates that an error ocurred in 
+ * transmitting the packet.<br><br>
+ *
+ * For a received packet:<br>
+ * The first byte will be XBEE_RX.<br>
+ * The second and third bytes will be the 16-bit
+ * address of the packet's sender.<br>
+ * The fourth byte is the signal strength.<br>
+ * The fifth byte is 1 if the packet were sent to
+ * a specific address, and 2 if it is a broadcast packet.<br><br>
+ * 
+ * @param dest set to the packet data
+ * @return the length of the packet, or -1 if no packet
+ * is available
+ **/
+int xbee_get_packet(unsigned char* dest)
+{
+	//start reading a packet with XBEE_FRAME_START
+	if (currentBufPos == 0)
+	{
+		do
+			if (queue_is_empty(xbee_queue))
+				return -1;
+		while ((char)(int)queue_remove(xbee_queue) != XBEE_FRAME_START);
+		xbee_buf[0] = XBEE_FRAME_START;
+		currentBufPos++;
+	}
+
+	int len = -1;
+	if (currentBufPos >= 3)
+		len = (int)xbee_buf[2] + ((int)xbee_buf[1] << 8);
+		
+	while (len == -1 //packet length has not been read yet
+			|| currentBufPos < len + 4)
+	{
+		if (currentBufPos == 3)
+			len = (int)xbee_buf[2] + ((int)xbee_buf[1] << 8);
+		if (queue_is_empty(xbee_queue))
+			return -1;
+		xbee_buf[currentBufPos++] = (char)(int)queue_remove(xbee_queue);
+	}
+	
+	currentBufPos = 0;
+	
+	if (!xbee_verify_checksum(xbee_buf, len + 4))
+	{
+		WL_DEBUG_PRINT("XBee checksum failed.\r\n");
+		return -1;
+	}
+
+	//we will take care of the packet
+	if (xbee_handle_packet(xbee_buf + 3, len))
+		return -1;
+	
+	if (dest == NULL)
+		return -1;
+	
+	int i;
+	for (i = 3; i < len + 3; i++)
+		dest[i - 3] = xbee_buf[i];
+	return len;
+}
+
+/**
+ * Handles modem status packets.
+ *
+ * @param status the type of status packet received.
+ **/
+void xbee_handle_status(char status)
+{
+	switch (status)
+	{
+		case 0:
+			WL_DEBUG_PRINT("XBee hardware reset.\r\n");
+			break;
+		case 1:
+			WL_DEBUG_PRINT("Watchdog timer reset.\r\n");
+			break;
+		case 2:
+			WL_DEBUG_PRINT("Associated.\r\n");
+			break;
+		case 3:
+			WL_DEBUG_PRINT("Disassociated.\r\n");
+			break;
+		case 4:
+			WL_DEBUG_PRINT("Synchronization lost.\r\n");
+			break;
+		case 5:
+			WL_DEBUG_PRINT("Coordinator realignment.\r\n");
+			break;
+		case 6:
+			WL_DEBUG_PRINT("Coordinator started.\r\n");
+			break;
+	}
+}
+
+/**
+ * Handles AT command response packets.
+ * @param command the two character AT command, e.g. MY or ID
+ * @param result 0 for success, 1 for an error
+ * @param extra the hex value of the requested register
+ * @param extraLen the length in bytes of extra
+ **/
+void xbee_handle_at_command_response(char* command, char result,
+	char* extra, int extraLen)
+{
+	if (result == 1)
+	{
+		WL_DEBUG_PRINT("Error with AT");
+		WL_DEBUG_PRINT(command);
+		WL_DEBUG_PRINT(" packet.\r\n");
+	}
+	WL_DEBUG_PRINT("AT");
+	WL_DEBUG_PRINT(command);
+	WL_DEBUG_PRINT(" command was successful.\r\n");
+		
+	if (command[0] == 'I' && command[1] == 'D')
+	{
+		xbee_panID = xbee_pending_panID;
+		WL_DEBUG_PRINT("PAN ID set to ");
+		WL_DEBUG_PRINT_INT(xbee_panID);
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+
+	if (command[0] == 'C' && command[1] == 'H')
+	{
+		xbee_channel = xbee_pending_channel;
+		WL_DEBUG_PRINT("Channel set to ");
+		WL_DEBUG_PRINT_INT(xbee_channel);
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+	
+	if (command[0] == 'M' && command[1] == 'Y' && extraLen != 0)
+	{
+		xbee_address = 0;
+		int i;
+		for (i = 0; i < extraLen; i++)
+			xbee_address = (xbee_address << 8) + extra[i];
+
+		WL_DEBUG_PRINT("XBee address is ");
+		WL_DEBUG_PRINT_INT(xbee_address);
+		WL_DEBUG_PRINT(".\r\n");
+
+		if (xbee_address == 0)
+		{
+			WL_DEBUG_PRINT("XBee 16-bit address must be set using ATMY.\r\n");
+			exit(0);
+		}
+	}
+}
+
+/**
+ * Attempts to handle the packet if it is dealt with
+ * by the library.
+ * We will handle the following packet types:
+ *    Modem Status
+ *    AT Command Response
+ *
+ * @param packet the packet to handle
+ * @param len the length of the packet
+ * 
+ * @return 1 if we have handled the packet, 0 otherwise
+ */
+int xbee_handle_packet(char* packet, int len)
+{
+	char command[3] = {1, 2, 3};
+	if (len <= 0) //this should not happend
+	{
+		WL_DEBUG_PRINT("Non-positive packet length.\r\n");
+		return 0;
+	}
+	
+	switch ((unsigned char)packet[0]) //packet type
+	{
+		case XBEE_FRAME_STATUS:
+			xbee_handle_status(packet[1]);
+			return 1;
+		case XBEE_FRAME_AT_COMMAND_RESPONSE:
+			command[0] = packet[2];
+			command[1] = packet[3];
+			command[2] = 0;
+			xbee_handle_at_command_response(command,
+				packet[4], packet + 5, len - 5);
+			return 1;
+	}
+	return 0;
+}
+
+/**
+ * Sets the personal area network id.
+ *
+ * @param id the new personal area network (PAN) id
+ **/
+void xbee_set_pan_id(int id)
+{
+	char s[3];
+	s[0] = (id >> 8) & 0xFF;
+	s[1] = id & 0xFF;
+	s[2] = 0;
+	xbee_pending_panID = id;
+	xbee_send_modify_at_command("ID", s);
+}
+
+/**
+ * Get the PAN ID for the XBee.
+ * 
+ * @return the personal area network id, or
+ * XBEE_PAN_DEFAULT if it has not yet been set.
+ **/
+unsigned int xbee_get_pan_id()
+{
+	return xbee_panID;
+}
+
+/**
+ * Set the channel the XBee is using.
+ *
+ * @param channel the channel the XBee will not use, 
+ * between 0x0B and 0x1A
+ *
+ * @see xbee_get_channel
+ **/
+void xbee_set_channel(int channel)
+{
+	if (channel < 0x0B || channel > 0x1A)
+	{
+		WL_DEBUG_PRINT("Channel out of range.\r\n");
+		return;
+	}
+	char s[3];
+	s[0] = channel & 0xFF;
+	s[1] = 0;
+	xbee_pending_channel = channel;
+	xbee_send_modify_at_command("CH", s);
+}
+
+/**
+ * Returns the channel which the XBee is currently using.
+ *
+ * @return the channel the XBee is using
+ *
+ * @see xbee_set_channel
+ **/
+int xbee_get_channel(void)
+{
+	return xbee_channel;
+}
+
+/**
+ * Get the 16-bit address of the XBee.
+ * This is used to specify who to send messages to
+ * and who messages are from.
+ *
+ * @return the 16-bit address of the XBee.
+ **/
+unsigned int xbee_get_address()
+{
+	return xbee_address;
+}
+
Index: branches/charge_board/code/projects/libwireless/lib/wl_token_ring.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wl_token_ring.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wl_token_ring.h	(revision 62)
@@ -0,0 +1,58 @@
+/**
+ * @file wl_token_ring.h
+ * @brief Declarations for the token ring packet group
+ * 
+ * Contains declarations for the token ring packet group.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup tokenring Token Ring
+ * @brief Wireless library token ring implementation
+ *
+ * This packet group is used to form a token ring, which
+ * keeps track of the relative directions of the robots
+ * from one another.
+ *
+ * @{
+ **/
+
+/**@brief Register the token ring group with the wireless library.**/
+void wl_token_ring_register(void);
+/**@brief Unregister the token ring group with the wirelss library.**/
+void wl_token_ring_unregister(void);
+/**@brief Set the functions called to turn the bom on and off.**/
+void wl_token_ring_set_bom_functions(void (*on_function) (void), 
+		void (*off_function) (void), int (*max_bom_function) (void));
+
+/**@brief Join the token ring **/
+void wl_token_ring_join(void);
+/**@brief Leave the token ring **/
+void wl_token_ring_leave(void);
+/**@brief Request a BOM flash from the specified robot **/
+void wl_token_request(int robot);
+
+/**@brief Return the number of robots in the token ring **/
+int wl_token_get_robots_in_ring(void);
+/**@brief Return whether a given robot is in the token ring **/
+int wl_token_is_robot_in_ring(int robot);
+
+/**@brief Begin iterating through robots in the token ring **/
+void wl_token_iterator_begin(void);
+/**@brief Returns whether there are more robots to iterate through **/
+int wl_token_iterator_has_next(void);
+/**@brief Returns the ID of the next robot in the token ring **/
+int wl_token_iterator_next(void);
+
+/**@brief Return the latest BOM reading between two robots **/
+int wl_token_get_sensor_reading(int source, int dest);
+/**@brief Return the latest BOM reading between us and another robot **/
+int wl_token_get_my_sensor_reading(int dest);
+/**@brief Return the number of robots in the sensor matrix.*/
+int wl_token_get_num_robots(void);
+/**@brief Return the number of non-null elements in the sensor matrix*/
+int wl_token_get_matrix_size(void);
+
+/** @} **/ //end token ring group
+
Index: branches/charge_board/code/projects/libwireless/lib/xbee.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/xbee.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/xbee.h	(revision 62)
@@ -0,0 +1,61 @@
+/**
+ * @file xbee.h
+ * @brief Contains definitions for using the XBee
+ *
+ * Contains definitions for interfacing with the 
+ * XBee module, from either a robot or a computer.
+ * To use a robot, define ROBOT in wl_defs.h, and
+ * to use a computer, don't define ROBOT.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup xbee XBee
+ * @brief Interface with the XBee module
+ *
+ * Interface with the XBee module.
+ *
+ * @{
+ **/
+
+/*Definitions*/
+/**@brief Unset PAN, uses XBee default **/
+#define XBEE_PAN_DEFAULT 0xFFFF
+/**@brief Unset channel, uses XBee default **/
+#define XBEE_CHANNEL_DEFAULT 0
+/**@brief Broadcast to all robots in the PAN **/
+#define XBEE_BROADCAST 0xFFFF
+/**@brief No special options **/
+#define XBEE_OPTIONS_NONE 0x00
+/**@brief Do not receive a TX_STATUS message from this packet **/
+#define XBEE_OPTIONS_DISABLE_RESPONSE 0x01
+/**@brief Send the packet to all PANS **/
+#define XBEE_OPTIONS_BROADCAST_ALL_PANS 0x04
+/**@brief A transmit status packet **/
+#define XBEE_TX_STATUS 0x89
+/**@brief A packet received from another XBee **/
+#define XBEE_RX 0x81
+
+/**@brief Initialize the XBee library **/
+void xbee_lib_init(void);
+/**@brief Uninitialize the XBee library **/
+void xbee_terminate(void);
+/**@brief Get a packet from the XBee **/
+int xbee_get_packet(unsigned char* packet);
+/**@brief Send a packet to the XBee **/
+void xbee_send_packet(char* packet, int len, int dest,
+	char options, char frame);
+/**@brief Set the PAN ID for the XBee **/
+void xbee_set_pan_id(int id);
+/**@brief Get the XBee's PAN ID **/
+unsigned int xbee_get_pan_id(void);
+/**@brief Set the channel the XBee is currently using **/
+void xbee_set_channel(int channel);
+/**@brief Get the channel the XBee is currently using **/
+int xbee_get_channel(void);
+/**@brief Get the XBee's 16-bit address **/
+unsigned int xbee_get_address(void);
+
+/**@}**/ //end defgroup
+
Index: branches/charge_board/code/projects/libwireless/lib/wireless.c
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wireless.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wireless.c	(revision 62)
@@ -0,0 +1,390 @@
+#include "wireless.h"
+#include "xbee.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "wl_defs.h"
+
+#ifndef ROBOT
+#include <time.h>
+#include <signal.h>
+#else
+#include <time.h>
+#include <bom.h>
+#endif
+
+/*Function Prototypes*/
+
+void wl_do_timeout(void);
+
+//Note: the actual frame sent has group as the first four bits and
+//frame as the last four.
+void wl_send_packet(char group, char type, char* data, int len,
+					int dest, char options, char frame);
+
+/*Data Members*/
+
+//used to store incoming and outgoing packets
+unsigned char wl_buf[128];
+//1 if we have timed out since we last checked, 0 otherwise.
+int wl_timeout = 0;
+
+PacketGroupHandler* wl_packet_groups[WL_MAX_PACKET_GROUPS];
+
+#ifndef ROBOT
+timer_t wl_timeout_timer;
+
+//called when we time out, or receive interrupt
+void sig_handler(int signo)
+{
+	switch (signo)
+	{
+		case SIGALRM:
+			wl_timeout = 1;
+			break;
+		case SIGINT:
+			wl_terminate();
+			exit(1);
+			break;
+	}
+	return;
+}
+#endif
+
+/**
+ * Initializes the wireless library. Must be called before any
+ * other function.
+ **/
+void wl_init()
+{
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		wl_packet_groups[i] = NULL;
+
+	xbee_lib_init();
+	
+	//begin timeout timer
+	#ifdef ROBOT
+	rtc_init(HALF_SECOND, &wl_do_timeout); 
+	#else
+	//create a timer to trigger every half second
+	struct sigevent evp;
+	evp.sigev_signo = SIGALRM;
+	evp.sigev_notify = SIGEV_SIGNAL;
+	if (timer_create(CLOCK_REALTIME, &evp, &wl_timeout_timer) == -1)
+	{ 
+		WL_DEBUG_PRINT("Error creating a timer.\r\n"); 
+		exit(1); 
+	}
+	struct sigaction wl_sig_act;
+	wl_sig_act.sa_handler = (void *)sig_handler;
+	wl_sig_act.sa_flags = 0;
+	sigemptyset(&wl_sig_act.sa_mask);
+	sigaction(SIGALRM, &wl_sig_act, 0);
+	sigaction(SIGINT, &wl_sig_act, 0);
+	struct itimerspec wl_timeout_time;
+	wl_timeout_time.it_interval.tv_sec = 0;
+	wl_timeout_time.it_interval.tv_nsec = 500000000;
+	wl_timeout_time.it_value.tv_sec = 0;
+	wl_timeout_time.it_value.tv_nsec = 500000000;
+	timer_settime(wl_timeout_timer, 0,
+                        &wl_timeout_time, NULL);
+	#endif
+}
+
+/**
+ * Uninitializes the wireless library.
+ **/
+void wl_terminate()
+{
+	#ifndef ROBOT
+	timer_delete(wl_timeout_timer);
+	#endif
+	
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		if (wl_packet_groups[i] != NULL &&
+			wl_packet_groups[i]->unregister != NULL)
+			wl_packet_groups[i]->unregister();
+	
+	xbee_terminate();
+}
+
+/**
+ * Set the PAN for the XBee to join.
+ *
+ * @param pan the new PAN
+ *
+ * @see wl_get_pan
+ **/
+void wl_set_pan(int pan)
+{
+	xbee_set_pan_id(pan);
+}
+
+/**
+ * Get the PAN the XBee is currently part of.
+ *
+ * @return the PAN of the XBee
+ *
+ * @see wl_set_pan
+ **/
+int wl_get_pan(void)
+{
+	return xbee_get_pan_id();
+}
+
+/**
+ * Set the channel the XBee is listening to.
+ *
+ * @param channel the new channel to join
+ *
+ * @see wl_get_channel
+ **/
+void wl_set_channel(int channel)
+{
+	xbee_set_channel(channel);
+}
+
+/**
+ * Get the channel the XBee is part of.
+ *
+ * @return the channel the XBee is part of
+ *
+ * @see wl_set_channel
+ **/
+int wl_get_channel(void)
+{
+	return xbee_get_channel();
+}
+
+/**
+ * Returns the 16-bit address of the XBee module.
+ *
+ * @return the 16-bit address of the XBee module.
+ **/
+unsigned int wl_get_xbee_id()
+{
+	return xbee_get_address();
+}
+
+/**
+ * Send a packet to a specific XBee without specifying a PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the 16-bit address of the XBee to send the packet to
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_robot_to_robot_global_packet(char group, char type,
+		char* data, int len, int dest, char frame)
+{
+	wl_send_packet(group, type, data, len, dest,
+			XBEE_OPTIONS_BROADCAST_ALL_PANS, frame);
+}
+
+/**
+ * Send a packet to a specific XBee in the same PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the 16-bit address of the XBee to send the packet to
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_robot_to_robot_packet(char group, char type,
+		char* data, int len, int dest, char frame)
+{
+	wl_send_packet(group, type, data, len, dest, XBEE_OPTIONS_NONE,
+			frame);
+}
+
+/**
+ * Send a packet to all XBees in all PANs.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_global_packet(char group, char type,
+		char* data, int len, char frame)
+{
+	wl_send_packet(group, type, data, len, XBEE_BROADCAST,
+			XBEE_OPTIONS_BROADCAST_ALL_PANS, frame);
+}
+
+/**
+ * Send a packet to all XBee's in the same PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_pan_packet(char group, char type,
+		char* data, int len, char frame)
+{
+	wl_send_packet(group, type, data, len, XBEE_BROADCAST, 
+			XBEE_OPTIONS_NONE, frame);
+}
+
+/**
+ * Send a packet.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the destination of the packet
+ * @param options the options for sending the packet
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_packet(char group, char type, char* data, int len,
+					int dest, char options, char frame)
+{
+	char buf[128];
+	int i;
+	if (frame != 0)
+		frame = (frame & 0x0F) | ((group & 0x0F) << 4);
+	buf[0] = group;
+	buf[1] = type;
+	for (i = 0; i < len; i++)
+		buf[2 + i] = data[i];
+	xbee_send_packet(buf, len + 2, dest, options, frame);
+}
+
+/**
+ * Register a packet group with the wireless library. The event
+ * handlers in the packet group will be called whenever an
+ * event dealing with the packet group's group code occurs.
+ *
+ * @param h the PacketGroupHandler to register
+ **/
+void wl_register_packet_group(PacketGroupHandler* h)
+{
+	if (h->groupCode >= WL_MAX_PACKET_GROUPS)
+	{
+		WL_DEBUG_PRINT("Packet group code too large.\r\n");
+		return;
+	}
+	if (wl_packet_groups[h->groupCode] != NULL)
+	{
+		WL_DEBUG_PRINT("Packet group code already registered.\r\n");
+		return;
+	}
+	wl_packet_groups[h->groupCode] = h;
+}
+
+/**
+ * Unregister a packet group from the wireless library.
+ * 
+ * @param h the packet group to remove
+ **/
+void wl_unregister_packet_group(PacketGroupHandler* h)
+{
+	unsigned int groupCode = h->groupCode;
+	PacketGroupHandler* p = wl_packet_groups[groupCode];
+	if (p != NULL && p->unregister != NULL)
+		p->unregister();
+	wl_packet_groups[groupCode] = NULL;
+}
+
+/**
+ * Called when the timer is triggered. This calls the timeout
+ * handlers of all the registered packet groups.
+ **/
+void wl_do_timeout()
+{
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		if (wl_packet_groups[i] != NULL &&
+			wl_packet_groups[i]->timeout_handler != NULL)
+			wl_packet_groups[i]->timeout_handler();
+}
+
+/**
+ * Performs wireless library functionality. This function must
+ * be called frequently for wireless to perform effectively.
+ * This function will call timeout handlers, as well as
+ * received packet and transmit status handlers.
+ **/
+void wl_do()
+{
+	if (wl_timeout)
+	{
+		wl_do_timeout();
+		wl_timeout = 0;
+	}
+	
+	int len = xbee_get_packet(wl_buf);
+	if (len < 0)//no packet received
+		return;
+	
+	if (wl_buf[0] == XBEE_TX_STATUS)
+	{
+		if (len != 3)
+		{
+			WL_DEBUG_PRINT("Transmit Status packet should be of length 3.\r\n");
+			return;
+		}
+		
+		//the first four bits are the packet group
+		//this only works with under 16 groups
+		int group = (int)(wl_buf[1] >> 4);
+		int success = 0;
+		if (wl_buf[2] == 0)
+			success = 1;
+		else
+		{
+			WL_DEBUG_PRINT("No response received.\r\n");
+			if (wl_buf[2] == 2)
+				WL_DEBUG_PRINT("CCA Failure\r\n");
+			if (wl_buf[2] == 3)
+				WL_DEBUG_PRINT("Purged\r\n");
+		}
+		
+		if (wl_packet_groups[group] != NULL &&
+					wl_packet_groups[group]->handle_response != NULL)
+			wl_packet_groups[group]->handle_response(
+					(int)wl_buf[1] & 0x0F, success);
+		return;
+	}
+	
+	if (wl_buf[0] == XBEE_RX)
+	{
+		if (len < 7)
+		{
+			WL_DEBUG_PRINT("Packet is too small.\r\n");
+			return;
+		}
+		
+		int source = ((int)wl_buf[1] << 8) + ((int)wl_buf[2]);
+		
+		/*
+		//unused for now
+		int signalStrength = wl_buf[3];
+		//1 for Address broadcast, 2 for PAN broadcast
+		int options = wl_buf[4];
+		*/
+		
+		int group = wl_buf[5];
+		int type = wl_buf[6];
+		int packetLen = len - 7;
+		
+		if (wl_packet_groups[group] != NULL
+				&& wl_packet_groups[group]->handle_receive != NULL)
+			wl_packet_groups[group]->handle_receive(type, source, 
+				wl_buf + 7, packetLen);
+		return;
+	}
+	
+	WL_DEBUG_PRINT("Unexpected packet received from XBee.\r\n");
+	return;
+}
+
Index: branches/charge_board/code/projects/libwireless/lib/wl_token_ring.c
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wl_token_ring.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wl_token_ring.c	(revision 62)
@@ -0,0 +1,804 @@
+#include <wl_token_ring.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <wl_defs.h>
+#include <wireless.h>
+#include <sensor_matrix.h>
+#include <queue.h>
+
+#ifdef ROBOT
+#include <bom.h>
+#include <time.h>
+#endif
+
+#define DEFAULT_SENSOR_MATRIX_SIZE 20
+
+/*Ring States*/
+
+#define NONMEMBER 0
+#define MEMBER 1
+#define JOINING 2
+#define ACCEPTED 3
+#define LEAVING 4
+
+/*Frame Types*/
+#define TOKEN_JOIN_ACCEPT_FRAME 1
+
+/*Function Prototypes*/
+
+/*Wireless Library Prototypes*/
+void wl_token_ring_timeout_handler(void);
+void wl_token_ring_response_handler(int frame, int received);
+void wl_token_ring_receive_handler(char type, int source, unsigned char* packet,
+							int length);
+void wl_token_ring_cleanup(void);
+
+/*Helper Functions*/
+void wl_token_pass_token(void);
+int get_token_distance(int robot1, int robot2);
+void wl_token_get_token(void);
+
+/*Packet Handling Routines*/
+void wl_token_pass_receive(int source, char nextRobot, unsigned char* sensorData, int sensorDataLength);
+void wl_token_interrupt_request_receive(int source, int robot);
+void wl_token_interrupt_pass_receive(int source, int robot);
+void wl_token_bom_on_receive(int source);
+void wl_token_join_receive(int source);
+void wl_token_join_accept_receive(int source);
+
+/*Global Variables*/
+
+//the sensor matrix
+SensorMatrix* sensorMatrix;
+
+//the robot we are waiting to say it has received the token. -1 if unspecified
+int wl_token_next_robot = -1;
+
+//true if the robot should be in the token ring, 0 otherwise
+int ringState = NONMEMBER;
+//the id of the robot who accepted us into the token ring, only used in ACCEPTED state
+int acceptor = -1;
+//id of the robot we are accepting
+int accepted = -1;
+
+//the counter for when we assume a robot is dead
+int deathDelay = -1;
+//the counter for joining, before we form our own token ring
+int joinDelay = -1;
+//queue containing ids of interruption requests
+Queue* interrupting = NULL;
+
+//current robot to check in the iterator
+int iteratorCount = 0;
+
+#ifdef ROBOT
+void (*bom_on_function) (void) = bom_on;
+void (*bom_off_function) (void) = bom_off;
+int (*get_max_bom_function) (void) = get_max_bom;
+#else
+void do_nothing(void) {}
+int get_nothing(void) {return -1;}
+void (*bom_on_function) (void) = do_nothing;
+void (*bom_off_function) (void) = do_nothing;
+int (*get_max_bom_function) (void) = get_nothing;
+#endif
+
+PacketGroupHandler wl_token_ring_handler =
+		{WL_TOKEN_RING_GROUP, wl_token_ring_timeout_handler,
+		wl_token_ring_response_handler, wl_token_ring_receive_handler,
+		wl_token_ring_cleanup};
+
+/**
+ * Initialize the token ring packet group and register it with the
+ * wireless library. The robot will not join a token ring.
+ **/
+void wl_token_ring_register()
+{
+	if (wl_get_xbee_id() > 0xFF)
+	{
+		//Note: if this becomes an issue (unlikely), we could limit sensor information
+		//to half a byte and use 12 bits for the id
+		WL_DEBUG_PRINT("XBee ID must be single byte for token ring, is ");
+		WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+	
+	sensorMatrix = sensor_matrix_create();
+	interrupting = queue_create();
+	//add ourselves to the sensor matrix
+	sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 0);
+
+	wl_register_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Removes the packet group from the wireless library.
+ **/
+void wl_token_ring_unregister()
+{
+	wl_unregister_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Sets the functions that are called when the BOM ought to be
+ * turned on or off. This could be used for things such as 
+ * charging stations, which have multiple BOMs.
+ *
+ * @param on_function the function to be called when the BOM
+ * should be turned on
+ * @param off_function the function to be called when the BOM
+ * should be turned off
+ * @param max_bom_function the function to be called when a
+ * measurement of the maximum BOM reading is needed.
+ **/
+void wl_token_ring_set_bom_functions(void (*on_function) (void),
+	void (*off_function) (void), int (*max_bom_function) (void))
+{
+	bom_on_function = on_function;
+	bom_off_function = off_function;
+	get_max_bom_function = max_bom_function;
+}
+
+/**
+ * Called to cleanup the token ring packet group.
+ **/
+void wl_token_ring_cleanup()
+{
+	sensor_matrix_destroy(sensorMatrix);
+	queue_destroy(interrupting);
+}
+
+/**
+ * Called approximately every quarter second by the wireless library.
+ **/
+void wl_token_ring_timeout_handler()
+{
+	//someone is not responding, assume they are dead
+	if (deathDelay == 0)
+	{
+		//pass the token to the next robot if we think someone has died
+		//also, declare that person dead, as long as it isn't us
+		if (wl_token_next_robot != wl_get_xbee_id())
+		{
+			sensor_matrix_set_in_ring(sensorMatrix, wl_token_next_robot, 0);
+			WL_DEBUG_PRINT("Robot ");
+			WL_DEBUG_PRINT_INT(wl_token_next_robot);
+			WL_DEBUG_PRINT(" has died.\r\n");
+		}
+		
+		// we may have been dropped from the ring when this is received
+		if (ringState == MEMBER)
+			wl_token_pass_token();
+	}
+
+	//we must start our own token ring, no one is responding to us
+	if (joinDelay == 0)
+	{
+		if (sensor_matrix_get_joined(sensorMatrix) == 0)
+		{
+			WL_DEBUG_PRINT("Creating our own token ring, no robots seem to exist.\r\n");
+			sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 1);
+			ringState = MEMBER;
+			//this will make us pass the token to ourself
+			//repeatedly, and other robots when they join
+			deathDelay = DEATH_DELAY;
+			wl_token_next_robot = wl_get_xbee_id();
+		}
+		else
+		{
+			WL_DEBUG_PRINT("Attempting to join the token ring again.\r\n");
+			//attempt to rejoin with a random delay
+			wl_token_ring_join();
+			joinDelay = rand() / (RAND_MAX / JOIN_DELAY) + 1;
+		}
+	}
+
+	if (deathDelay >= 0)
+		deathDelay--;
+	if (joinDelay >= 0)
+		joinDelay--;
+}
+
+/**
+ * Called when the XBee tells us if a packet we sent has been received.
+ * 
+ * @param frame the frame number assigned when the packet was sent
+ * @param received 1 if the packet was received, 0 otherwise
+ **/
+void wl_token_ring_response_handler(int frame, int received)
+{
+	if (!received)
+	{
+		WL_DEBUG_PRINT("FAILED.\r\n");
+	}
+}
+
+/**
+ * Called when we recieve a token ring packet.
+ * @param type the type of the packet
+ * @param source the id of the robot who sent the packet
+ * @param packet the data in the packet
+ * @param length the length of the packet in bytes
+ **/
+void wl_token_ring_receive_handler(char type, int source, unsigned char* packet,
+							int length)
+{
+	switch (type)
+	{
+		case WL_TOKEN_PASS:
+			if (length < 1)
+			{
+				WL_DEBUG_PRINT("Malformed Token Pass packet received.\r\n");
+				return;
+			}
+			wl_token_pass_receive(source, packet[0], packet + 1, length - 1);
+			break;
+		case WL_TOKEN_BOM_ON:
+			//add the robot to the sensor matrix if it is not already there
+			wl_token_bom_on_receive(source);
+			break;
+		case WL_TOKEN_INTERRUPT_REQUEST:
+			wl_token_interrupt_request_receive(source, packet[0]);
+			break;
+		case WL_TOKEN_INTERRUPT_PASS:
+			wl_token_interrupt_pass_receive(source, packet[0]);
+			break;
+		case WL_TOKEN_JOIN:
+			wl_token_join_receive(source);
+			break;
+		case WL_TOKEN_JOIN_ACCEPT:
+			wl_token_join_accept_receive(source);
+			break;
+		default:
+			WL_DEBUG_PRINT("Unimplemented token ring packet received.\r\n");
+			break;
+	}
+}
+
+/**
+ * Causes the robot to join an existing token ring, or create one
+ * if no token ring exists. The token ring uses global and robot to robot
+ * packets, and does not rely on any PAN.
+ **/
+void wl_token_ring_join()
+{
+	WL_DEBUG_PRINT("Joining the token ring.\r\n");
+	ringState = JOINING;
+	joinDelay = JOIN_DELAY;
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_JOIN,
+		NULL, 0, 0);
+}
+
+/**
+ * Causes the robot to leave the token ring. The robot stops
+ * alerting others of its location, but continues storing the
+ * locations of other robots.
+ **/
+void wl_token_ring_leave()
+{
+	ringState = LEAVING;
+}
+
+/**
+ * Requests that the specified robot be given the token and
+ * allowed to flash its BOM. After its BOM is flashed, the
+ * token will return to the robot who sent it.
+ *
+ * @param robot the ID of the robot which should flash its BOM
+ **/
+void wl_token_request(int robot)
+{
+	char buf[1];
+	buf[0] = robot;
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_INTERRUPT_REQUEST,
+		buf, 1, 0);
+}
+
+/**
+ * Returns the BOM reading robot source has for robot dest.
+ *
+ * @param source the robot that made the BOM reading
+ * @param dest the robot whose relative location is returned
+ *
+ * @return a BOM reading from robot source to robot dest,
+ * in the range 0-15, or -1 if it is unknown
+ **/
+int wl_token_get_sensor_reading(int source, int dest)
+{
+	return sensor_matrix_get_reading(sensorMatrix, source, dest);
+}
+
+/**
+ * Returns the BOM reading we have for robot dest.
+ * 
+ * @param dest the robot whose relative location is returned
+ *
+ * @return a BOM reading from us to robot dest, in the range
+ * 0-15, or -1 if it is unkown
+ **/
+int wl_token_get_my_sensor_reading(int dest)
+{
+	return wl_token_get_sensor_reading(wl_get_xbee_id(), dest);
+}
+
+/**
+ * This method is called when we receive a token pass packet.
+ * @param source is the robot it came from
+ * @param nextRobot is the robot the token was passed to
+ * @param sensorData a char with an id followed by a char with the sensor
+ *		reading for that robot, repeated for sensorDataLength bytes
+ * @param sensorDataLength the length in bytes of sensorData
+ */
+void wl_token_pass_receive(int source, char nextRobot, unsigned char* sensorData, int sensorDataLength)
+{
+	int i, j;
+	deathDelay = -1;
+
+	WL_DEBUG_PRINT("Received the token, next robot is ");
+	WL_DEBUG_PRINT_INT((int)nextRobot);
+	WL_DEBUG_PRINT(" \r\n");
+	sensor_matrix_set_in_ring(sensorMatrix, source, 1);
+
+	//with this packet, we are passed the id of the next robot in the ring
+	//and the sensor matrix, a list of id and sensor reading pairs (two bytes for both)
+	j = 0;
+	for (i = 0; i < sensor_matrix_get_size(sensorMatrix); i++)
+	{
+		if (i == source)
+			continue;
+		
+		//set the sensor information we receive
+		if (j < sensorDataLength / 2 && sensorData[2 * j] == i)
+		{
+			//the robot we were going to accept has already been accepted
+			if (accepted == i)
+			{
+				accepted = -1;
+				WL_DEBUG_PRINT("Someone accepted the robot we did.\r\n");
+			}
+			sensor_matrix_set_reading(sensorMatrix, source, i,
+						sensorData[2 * j + 1]);
+			sensor_matrix_set_in_ring(sensorMatrix, i, 1);
+			j++;
+		}
+		else
+		{
+			if (sensor_matrix_get_in_ring(sensorMatrix, i))
+			{
+				WL_DEBUG_PRINT("Robot ");
+				WL_DEBUG_PRINT_INT(i);
+				WL_DEBUG_PRINT(" has been removed from the sensor matrix of robot ");
+				WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+				WL_DEBUG_PRINT(" due to a packet from robot ");
+				WL_DEBUG_PRINT_INT(source);
+				WL_DEBUG_PRINT(".\r\n");
+				sensor_matrix_set_in_ring(sensorMatrix, i, 0);
+			}
+
+			if (i == wl_get_xbee_id() && ringState == MEMBER)
+			{
+				ringState = NONMEMBER;
+				wl_token_ring_join();
+				
+				WL_DEBUG_PRINT("We have been removed from the ring ");
+				WL_DEBUG_PRINT("and are rejoining.\r\n");
+			}
+			
+			//the person who accepted us is dead... let's ask again
+			if (i == acceptor)
+			{
+				sensor_matrix_set_in_ring(sensorMatrix,
+						wl_get_xbee_id(), 1);
+				ringState = NONMEMBER;
+				acceptor = -1;
+				wl_token_ring_join();
+			}
+		}
+	}
+
+	wl_token_next_robot = nextRobot;
+	
+	deathDelay = get_token_distance(wl_get_xbee_id(), nextRobot) * DEATH_DELAY;
+	
+	//we have the token
+	if (wl_token_next_robot == wl_get_xbee_id())
+		wl_token_get_token();
+}
+
+/**
+ * Gets the distance in the token ring between two robots.
+ *
+ * @param robot1 the first robot
+ * @param robot2 the second robot
+ *
+ * @return the number of passes before the token is expected
+ * to reach robot2 from robot1
+ **/
+int get_token_distance(int robot1, int robot2)
+{
+	int curr = robot1 + 1;
+	int count = 1;
+	while (1)
+	{
+		if (curr == sensor_matrix_get_size(sensorMatrix))
+			curr = 0;
+		if (curr == robot2)
+			break;
+		if (sensor_matrix_get_in_ring(sensorMatrix, curr))
+			count++;
+		curr++;
+	}
+	return count;
+}
+
+/**
+ * Passes the token to the next robot in the token ring.
+ **/
+void wl_token_pass_token()
+{
+	char nextRobot;
+	int i = wl_get_xbee_id() + 1;
+	if (accepted == -1)
+	{
+		while (1)
+		{
+			if (i == sensor_matrix_get_size(sensorMatrix))
+				i = 0;
+			if (sensor_matrix_get_in_ring(sensorMatrix, i))
+			{
+				nextRobot = (char)i;
+				break;
+			}
+			i++;
+		}
+	}
+	else
+	{
+		WL_DEBUG_PRINT("Accepting new robot, sending it the token.\r\n");
+		//add a new robot to the token ring
+		sensor_matrix_set_in_ring(sensorMatrix, accepted, 1);
+		nextRobot = accepted;
+		accepted = -1;
+	}
+
+	//we don't include ourself
+	int packetSize = 1 + 2 * (sensor_matrix_get_joined(sensorMatrix) - 1);
+	char* buf = (char*)malloc(packetSize * sizeof(char));
+	if (!buf)
+	{
+		WL_DEBUG_PRINT_INT(packetSize);
+		WL_DEBUG_PRINT("Out of memory - pass token.\r\n");
+		return;
+	}
+	buf[0] = nextRobot;
+
+	int j = 0;
+	for (i = 0; i < sensor_matrix_get_size(sensorMatrix); i++)
+		if (sensor_matrix_get_in_ring(sensorMatrix, i) && i != wl_get_xbee_id())
+		{
+			buf[2*j + 1] = i;
+			buf[2*j + 2] = sensor_matrix_get_reading(sensorMatrix, wl_get_xbee_id(), i);
+			j++;
+		}
+	
+	WL_DEBUG_PRINT("Passing the token to robot ");
+	WL_DEBUG_PRINT_INT(buf[0]);
+	WL_DEBUG_PRINT(".\r\n");
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_PASS,
+		buf, packetSize, 3);
+
+	wl_token_next_robot = nextRobot;
+	deathDelay = DEATH_DELAY;
+	free(buf);
+}
+
+/**
+ * Called when a packet is received stating that another robot has turned
+ * its BOM on. Our BOM is then read, and the data is added to the sensor
+ * matrix.
+ *
+ * @param source the robot whose BOM is on
+ **/
+void wl_token_bom_on_receive(int source)
+{
+	WL_DEBUG_PRINT("Robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(" has flashed its bom.\r\n");
+	sensor_matrix_set_reading(sensorMatrix, wl_get_xbee_id(), 
+		source, get_max_bom_function());
+}
+
+/**
+ * This method is called when we receive the token. Upon receiving
+ * the token, we must send a BOM_ON packet, flash the BOM, and send
+ * the token to the next robot.
+ * 
+ * If there is a pending request for the token, this is processed first.
+ **/
+void wl_token_get_token()
+{
+	WL_DEBUG_PRINT("We have the token.\r\n");
+	if (ringState == ACCEPTED)
+	{
+		sensor_matrix_set_in_ring(sensorMatrix,
+			wl_get_xbee_id(), 1);
+		WL_DEBUG_PRINT("Now a member of the token ring.\r\n");
+		ringState = MEMBER;
+	}
+
+	if (ringState == LEAVING || ringState == NONMEMBER)
+	{
+		sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 0);
+		if (ringState == NONMEMBER)
+		{
+			WL_DEBUG_PRINT("We should have left the token ring, but didn't.\r\n");
+		}
+		return;
+	}
+	
+	//check for interruption requests
+	if (queue_size(interrupting) > 0)
+	{
+		char buf[1];
+		buf[0] = (char)(int)queue_remove(interrupting);
+		
+		//in case this robot has requested multiple times
+		queue_remove_all(interrupting, (void*)(int)buf[0]);
+
+		wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_INTERRUPT_PASS,
+			buf, 1, 0);
+
+		deathDelay = DEATH_DELAY;
+		wl_token_next_robot = buf[0];
+		return;
+	}
+
+	WL_DEBUG_PRINT("Our BOM has been flashed.\r\n");
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_BOM_ON,
+		NULL, 0, 0);
+
+	bom_on_function();
+	#ifdef ROBOT
+	delay_ms(BOM_DELAY);
+	#endif
+	bom_off_function();
+	
+	if (!sensor_matrix_get_in_ring(sensorMatrix, wl_get_xbee_id()))
+	{
+		WL_DEBUG_PRINT("Removed from sensor matrix while flashing BOM.\r\n");
+	}
+	
+	wl_token_pass_token();
+}
+
+/**
+ * Called when a request to join the token ring is received.
+ * If we are the robot preceding the requester in the ring,
+ * we respond with a JOIN_ACCEPT packet and pass the token to
+ * this robot when we receive the token.
+ *
+ * @param source the robot who requested to join
+ **/
+void wl_token_join_receive(int source)
+{
+	WL_DEBUG_PRINT("Received joining request from robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(".\r\n");
+
+	//we cannot accept the request if we are not a member
+	if (ringState != MEMBER)
+		return;
+	//if they didn't get our response, see if we should respond again
+	if (accepted == source)
+		accepted = -1;
+	//we can only accept one request at a time
+	if (accepted != -1)
+		return;
+	
+	//check if we are the preceding robot in the token ring
+	int i = source - 1;
+	while (1)
+	{
+		if (i < 0)
+			i = sensor_matrix_get_size(sensorMatrix) - 1;
+		//we must send a join acceptance
+		if (i == wl_get_xbee_id())
+			break;
+
+		//another robot will handle it
+		if (sensor_matrix_get_in_ring(sensorMatrix, i))
+			return;
+		i--;
+	}
+
+	accepted = source;
+	wl_send_robot_to_robot_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_JOIN_ACCEPT,
+		NULL, 0, source, TOKEN_JOIN_ACCEPT_FRAME);
+	
+	WL_DEBUG_PRINT("Accepting robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(" into the token ring.\r\n");
+
+	joinDelay = -1;
+	
+	// the token ring has not started yet
+	if (sensor_matrix_get_joined(sensorMatrix) == 1)
+		wl_token_pass_token();
+}
+
+/**
+ * Called when we receive a JOIN_ACCEPT packet in attempting to join
+ * the token ring.
+ * Our attempt to join the ring is stopped, and we wait for the token.
+ *
+ * @param source the robot who accepted us
+ **/
+void wl_token_join_accept_receive(int source)
+{
+	WL_DEBUG_PRINT("Accepted into the token ring by robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(".\r\n");
+	joinDelay = -1;
+	ringState = ACCEPTED;
+	acceptor = source;
+
+	//add ourselves to the token ring
+	sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 1);
+}
+
+/**
+ * Called when we receive a packet passing the token and interrupting
+ * the token ring.
+ * If the token has been passed to us, we flash our BOM
+ * and pass it back.
+ *
+ * @param source the robot who sent the interrupt packet
+ * @param robot the robot the token has been passed to
+ **/
+void wl_token_interrupt_pass_receive(int source, int robot)
+{
+	if (wl_get_xbee_id() != robot)
+	{
+		queue_remove_all(interrupting, (void*)robot);
+		wl_token_next_robot = robot;
+		deathDelay = DEATH_DELAY + rand() / (RAND_MAX / (2 * DEATH_DELAY));
+		return;
+	}
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_BOM_ON,
+		NULL, 0, 0);
+	
+	bom_on_function();
+	#ifdef ROBOT
+	delay_ms(BOM_DELAY);
+	#endif
+	bom_off_function();
+
+	//we don't include ourself, only if we are in the ring
+	int packetSize = 1 + 2 * (sensor_matrix_get_joined(sensorMatrix) - 1);
+	if (!sensor_matrix_get_in_ring(sensorMatrix, wl_get_xbee_id()))
+		packetSize += 2;
+	char* buf = (char*)malloc(packetSize * sizeof(char));
+	if (!buf)
+	{
+		WL_DEBUG_PRINT("Out of memory - pass_receive.\r\n");
+		return;
+	}
+	
+	//return the token to where we got it from
+	buf[0] = source;
+
+	int i = 0, j = 0;
+	for (i = 0; i < sensor_matrix_get_size(sensorMatrix); i++)
+		if (sensor_matrix_get_in_ring(sensorMatrix, i) && i != wl_get_xbee_id())
+		{
+			buf[2*j + 1] = i;
+			buf[2*j + 2] = sensor_matrix_get_reading(sensorMatrix, wl_get_xbee_id(), i);
+			j++;
+		}
+	
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_PASS,
+		buf, packetSize, 0);
+
+	wl_token_next_robot = source;
+	deathDelay = DEATH_DELAY;
+	free(buf);
+}
+
+/**
+ * Returns the number of robots in the token ring.
+ *
+ * @return the number of robots in the token ring
+ **/
+int wl_token_get_robots_in_ring(void)
+{
+	return sensor_matrix_get_joined(sensorMatrix);
+}
+
+/**
+ * Returns true if the specified robot is in the token ring, false
+ * otherwise.
+ *
+ * @param robot the robot to check for whether it is in the token ring
+ * @return nonzero if the robot is in the token ring, zero otherwise
+ **/
+int wl_token_is_robot_in_ring(int robot)
+{
+	return sensor_matrix_get_in_ring(sensorMatrix, robot);
+}
+
+/**
+ * Begins iterating through the robots in the token ring.
+ *
+ * @see wl_token_iterator_has_next, wl_token_iterator_next
+ **/
+void wl_token_iterator_begin(void)
+{
+	int i;
+	iteratorCount = 0;
+	while (!sensor_matrix_get_in_ring(sensorMatrix, i) &&
+			i < sensor_matrix_get_size(sensorMatrix))
+		i++;
+	if (i == sensor_matrix_get_size(sensorMatrix))
+		i = -1;
+}
+
+/**
+ * Returns true if there are more robots in the token ring
+ * to iterate through, and false otherwise.
+ *
+ * @return nonzero if there are more robots to iterate through,
+ * zero otherwise
+ *
+ * @see wl_token_iterator_begin, wl_token_iterator_next
+ **/
+int wl_token_iterator_has_next(void)
+{
+	return iteratorCount == -1;
+}
+
+/**
+ * Returns the next robot ID in the token ring.
+ *
+ * @return the next robot ID in the token ring, or -1 if none exists
+ *
+ * @see wl_token_iterator_begin, wl_token_iterator_has_next
+ **/
+int wl_token_iterator_next(void)
+{
+	int result = iteratorCount;
+	if (result < 0)
+		return result;
+
+	iteratorCount++;
+	while (!sensor_matrix_get_in_ring(sensorMatrix, iteratorCount) &&
+		iteratorCount < sensor_matrix_get_size(sensorMatrix))
+		iteratorCount++;
+	if (iteratorCount == sensor_matrix_get_size(sensorMatrix))
+		iteratorCount = -1;
+	return result;
+}
+
+/**
+ * Called when we receive a request to interrupt the token ring.
+ * We add the robot to our list of interrupt requests,
+ * and will send the token to this robot when we next receive the
+ * token, unless someone else does so first.
+ *
+ * @param source the robot requesting interruption
+ * @param robt the robot requested to interrupt the token ring
+ **/
+void wl_token_interrupt_request_receive(int source, int robot)
+{
+	queue_add(interrupting, (void*)robot);
+}
+
+int wl_token_get_num_robots(void){
+  return sensor_matrix_get_joined(sensorMatrix);
+}
+
+int wl_token_get_matrix_size(void){
+  return sensor_matrix_get_size(sensorMatrix);
+}
Index: branches/charge_board/code/projects/libwireless/lib/Makefile
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/Makefile	(revision 62)
@@ -0,0 +1,218 @@
+############################
+### Update this Section ####
+############################
+
+COLONYROOT = ../../../..
+
+# Target file name (without extension).
+TARGET = libwireless
+
+############################
+
+CDEFS = 
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+# dwarf-2
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DROBOT
+
+# Place -I options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly
+CINCS += -L$(COLONYROOT)/code/lib/bin
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+#CFLAGS += -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+AR = avr-ar
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+DOXYGEN = doxygen
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_COMPILING = Compiling:
+MSG_CLEANING = Cleaning project:
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = rcs
+
+# Default target.
+all: begin build end
+
+dist: all publish
+
+publish:
+	$(COPY) $(TARGET).a $(COLONYROOT)/code/lib/bin
+	$(COPY) *.c $(COLONYROOT)/code/lib/src/$(TARGET)
+	$(COPY) *.h $(COLONYROOT)/code/lib/include/$(TARGET)
+
+docs:
+	$(DOXYGEN)
+	$(COPY) docs/html/* $(COLONYROOT)/docs/$(TARGET)
+
+build: $(OBJ)
+	$(AR) $(ALL_ASFLAGS) $(TARGET).a $(OBJ)
+
+computer:
+	gcc *.c -g -I. -c
+	ar rcs $(TARGET).a $(OBJ)
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).a
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVE) -r docs
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
Index: branches/charge_board/code/projects/libwireless/lib/Doxyfile
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/Doxyfile	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/Doxyfile	(revision 62)
@@ -0,0 +1,1237 @@
+# Doxyfile 1.4.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = libwireless
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 1.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that a graph may be further truncated if the graph's 
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
Index: branches/charge_board/code/projects/libwireless/lib/sensor_matrix.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/sensor_matrix.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/sensor_matrix.h	(revision 62)
@@ -0,0 +1,69 @@
+/**
+ * @file sensor_matrix.h
+ * @brief Definitions for sensor matrices
+ *
+ * Contains functions and declarations for using sensor matrices.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup sensormatrix Sensor Matrix
+ * @brief the robot sensor matrix
+ *
+ * These functions and structures are used for localization
+ * to determine the relative directions of robots.
+ *
+ * @{
+ **/
+
+/**
+ * @struct SensorMatrix
+ *
+ * A sensor matrix.
+ **/
+typedef struct
+{
+	/**
+	 * The size of the sensor matrix.
+	**/
+	unsigned int size;
+	/**
+	 * The matrix. Each row represents the readings of one
+	 * robot.
+	 **/
+	int** matrix;
+	/**
+	 * The element representing a robot is true if that robot
+	 * is in the token ring and false otherwise.
+	 **/
+	int* joined;
+	/**
+	 * The number of robots in the token ring.
+	 **/
+	int numJoined;
+} SensorMatrix;
+
+/**@brief Create a sensor matrix **/
+SensorMatrix* sensor_matrix_create(void);
+/**@brief Destroy a sensor matrix **/
+void sensor_matrix_destroy(SensorMatrix* m);
+/**@brief Add a robot to a sensor matrix **/
+void sensor_matrix_add_robot(SensorMatrix* m, unsigned int id);
+/**@brief Remove a robot from a sensor matrix **/
+void sensor_matrix_remove_robot(SensorMatrix* m, unsigned int id);
+/**@brief Set a reading in a sensor matrix **/
+void sensor_matrix_set_reading(SensorMatrix* m, int observer, int robot, int reading);
+/**@brief Get a reading in a sensor matrix **/
+int sensor_matrix_get_reading(SensorMatrix* m, int observer, int robot);
+/**@brief Set whether the robot is in the token ring **/
+void sensor_matrix_set_in_ring(SensorMatrix* m, int robot, int in);
+/**@brief Get whether the robot is in the sensor ring **/
+int sensor_matrix_get_in_ring(SensorMatrix* m, int robot);
+/**@brief Get the size of the sensor matrix **/
+int sensor_matrix_get_size(SensorMatrix* m);
+/**@brief Get the number of robots which have joined the token ring **/
+int sensor_matrix_get_joined(SensorMatrix* m);
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/projects/libwireless/lib/queue.c
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/queue.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/queue.c	(revision 62)
@@ -0,0 +1,152 @@
+#include "queue.h"
+#include <wl_defs.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+/**
+ * @struct node_def
+ * A node in the queue.
+ **/
+typedef struct node_def
+{
+	/** The item at this point in the queue. **/
+	void* val;
+	/** The next node in the queue. **/
+	struct node_def* next;
+} Node;
+
+/**
+ * Create a queue.
+ *
+ * @return the newly created queue.
+ **/
+Queue* queue_create()
+{
+	Queue* q = (Queue*)malloc(sizeof(Queue));
+	q->head = NULL;
+	q->size = 0;
+	return q;
+}
+
+/**
+ * Destroys a queue, freeing memory.
+ *
+ * @param q the queue to destroy
+ **/
+void queue_destroy(Queue* q)
+{
+	Node* t = q->head;
+	while (t != NULL)
+	{
+		Node* t2 = t->next;
+		free(t);
+		t = t2;
+	}
+	free(q);
+}
+
+/**
+ * Add an element to a queue.
+ *
+ * @param q the queue to add an element to
+ * @param item the item to add to the queue
+ **/
+void queue_add(Queue* q, void* item)
+{
+	Node* n = (Node*)malloc(sizeof(Node));
+	n->val = item;
+	n->next = NULL;
+	
+	if (q->head == NULL)
+	{
+		q->head = n;
+		q->tail = n;
+	}
+	else
+	{
+		q->tail->next = n;
+		q->tail = n;
+	}
+	
+	q->size++;
+}
+
+/**
+ * Remove an element from the front of a queue.
+ *
+ * @param q the queue to remove the element from
+ *
+ * @return the element which was removed
+ **/
+void* queue_remove(Queue* q)
+{
+	Node* first = q->head;
+	if (first == NULL)
+	{
+		WL_DEBUG_PRINT("Attempting to remove item \
+			from empty queue.\r\n");
+		WL_DEBUG_PRINT_INT(queue_size(q));
+	}
+	void* ret = first->val;
+	q->head = first->next;
+	if (q->tail == first)
+		q->tail = NULL;
+	free(first);
+	q->size--;
+	return ret;
+}
+
+/**
+ * Remove all instances of a given element from a queue.
+ *
+ * @param q the queue to remove the elements from
+ * @param item the element to remove all instances of
+ **/
+void queue_remove_all(Queue* q, void* item)
+{
+	Node* curr = q->head;
+	Node* prev = NULL;
+	
+	while (curr != NULL)
+	{
+		Node* next = curr->next;
+		if (curr->val == item)
+		{
+			if (q->head == curr)
+				q->head = next;
+			if (q->tail == curr)
+				q->tail = prev;
+			if (prev != NULL)
+				prev->next = next;
+			free(curr);
+			q->size--;
+		}
+		else
+			prev = curr;
+		curr = next;
+	}
+}
+
+/**
+ * Get the number of elements in the queue.
+ *
+ * @param q the queue to get the size of
+ * @return the size of the queue
+ **/
+int queue_size(Queue* q)
+{
+	return q->size;
+}
+
+/**
+ * Check if the queue is empty.
+ * 
+ * @param q the queue to check
+ * @return nonzero if the queue is empty, 0 otherwise
+ **/
+int queue_is_empty(Queue* q)
+{
+	return q->size == 0;
+}
+
Index: branches/charge_board/code/projects/libwireless/lib/wl_error_group.c
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wl_error_group.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wl_error_group.c	(revision 62)
@@ -0,0 +1,88 @@
+#include "wl_error_group.h"
+
+#include <wireless.h>
+#include <wl_defs.h>
+#include <stdio.h>
+#include <string.h>
+
+
+void wl_error_response_receive(int frame, int received);
+void wl_error_handle_receive(char type, int source, unsigned char* packet,
+							int length);
+
+PacketGroupHandler wl_error_handler =
+		{WL_ERROR_GROUP, NULL,
+		wl_error_response_receive, wl_error_handle_receive, NULL};
+
+void wl_error_response_receive(int frame, int received)
+{
+	WL_DEBUG_PRINT("Response received.\r\n");
+	if (!received)
+	{
+		WL_DEBUG_PRINT("FAILED.\r\n");
+	}
+}
+/**
+ * Register this packet group with the wireless library.
+ * This function must be called before any other wl_error
+ * function.
+ **/
+void wl_error_register(void)
+{
+	wl_register_packet_group(&wl_error_handler);
+}
+
+/**
+ * Unregister this packet group with the wireless library.
+ * This function must be called after wl_error_register.
+ *
+ * @see wl_error_register
+ **/
+void wl_error_unregister(void)
+{
+	wl_unregister_packet_group(&wl_error_handler);
+}
+
+/**
+ * Handles receiving an error packet.
+ *
+ * @param type the packet type
+ * @param source the 16-bit address of the packet's sender
+ * @param packet the packet data
+ * @param length the length in bytes of the packet
+ **/
+void wl_error_handle_receive(char type, int source, unsigned char* packet,
+							int length)
+{
+	switch (type)
+	{
+		case WL_ERROR_STRING_TYPE:
+			if (packet[length - 1] != 0)
+			{
+				WL_DEBUG_PRINT(
+					"Error packet string should be null terminated.\r\n");
+				break;
+			}
+			WL_DEBUG_PRINT("Error packet received from robot ");
+			WL_DEBUG_PRINT_INT(source);
+			WL_DEBUG_PRINT(":\r\n");
+			WL_DEBUG_PRINT((char*)packet);
+			WL_DEBUG_PRINT("\r\n");
+			break;
+		default:
+			WL_DEBUG_PRINT("Error packet of unknown type received.\r\n");
+			break;
+	}
+}
+
+/**
+ * Send an error message as a string.
+ * 
+ * @param str the error message to send
+ **/
+void wl_error_send_string(char* str)
+{
+	wl_send_global_packet(WL_ERROR_GROUP, WL_ERROR_STRING_TYPE,
+		str, strlen(str) + 1, 1);
+}
+
Index: branches/charge_board/code/projects/libwireless/lib/wl_defs.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wl_defs.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wl_defs.h	(revision 62)
@@ -0,0 +1,65 @@
+//comment out this line if using a computer hooked up to an xbee
+//#define ROBOT
+
+//uncomment this line for debug information
+#define WL_DEBUG
+
+// Packet Groups and Types
+
+// Error group
+#define WL_ERROR_GROUP 1
+
+#define WL_ERROR_STRING_TYPE 1
+
+// Token Ring group
+#define WL_TOKEN_RING_GROUP 2
+
+#define WL_TOKEN_PASS 1
+#define WL_TOKEN_BOM_ON 2
+#define WL_TOKEN_INTERRUPT_REQUEST 3
+#define WL_TOKEN_INTERRUPT_PASS 4
+#define WL_TOKEN_JOIN 5
+#define WL_TOKEN_JOIN_ACCEPT 6
+
+// timing constants
+#define BOM_DELAY 100
+#define DEATH_DELAY 3
+#define JOIN_DELAY 8
+
+// Recharging group
+#define WL_RECHARGE_GROUP 3
+
+#define WL_RECHARGE_POLL_STATIONS 1
+#define WL_RECHARGE_STATION_AVAILABLE 2
+#define WL_RECHARGE_REQUEST 3
+#define WL_RECHARGE_REQUEST_ACCEPT 4
+#define WL_RECHARGE_VERIFY 5
+#define WL_RECHARGE_CANCEL 6
+#define WL_RECHARGE_SEEKING 7
+#define WL_RECHARGE_DOCKED 8
+
+#ifdef WL_DEBUG
+
+#ifdef ROBOT
+#include <serial.h>
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT( s ) usb_puts( s )
+#else
+#define WL_DEBUG_PRINT( s ) printf( s )
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT_INT( i ) usb_puti(i)
+#else
+#define WL_DEBUG_PRINT_INT( i ) printf("%i", i)
+#endif
+
+#else
+
+#define WL_DEBUG_PRINT( s )
+#define WL_DEBUG_PRINT_INT( i )
+
+#endif
+
Index: branches/charge_board/code/projects/libwireless/lib/queue.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/queue.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/queue.h	(revision 62)
@@ -0,0 +1,57 @@
+/**
+ * @file queue.h
+ * @brief A queue implementation
+ * 
+ * Implements a queue, a first in, first out data structure.
+ *
+ * @author Brian Coltin, Colony Project
+ **/
+
+struct node_def;
+
+/**
+ * @defgroup queue Queue
+ * @brief A queue implementation
+ * 
+ * A queue implementation.
+ *
+ * @{
+ **/
+
+/**
+ * @struct Queue
+ * Represents a queue, a first in, first out data structure.
+ **/
+typedef struct
+{
+	/**
+	 * The head of the queue, the next item to be removed.
+	 **/
+	struct node_def* head;
+	/**
+	 * The tail of the queue, the last item added.
+	 **/
+	struct node_def* tail;
+	/**
+	 * The number of elements in the queue.
+	 **/
+	int size;
+} Queue;
+
+/** @brief Create a new queue **/
+Queue* queue_create(void);
+/** @brief Destroy a queue **/
+void queue_destroy(Queue* q);
+/** @brief Add an element to a queue **/
+void queue_add(Queue* q, void* item);
+/** @brief Remove an element from a queue **/
+void* queue_remove(Queue* q);
+/** @brief Remove all instances of a given element from a queue **/
+void queue_remove_all(Queue* q, void* item);
+/** @brief Get the size of a queue **/
+int queue_size(Queue* q);
+/** @brief Check if the queue is empty **/
+int queue_is_empty(Queue* q);
+
+/** @} **/
+
Index: branches/charge_board/code/projects/libwireless/lib/wl_error_group.h
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/wl_error_group.h	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/wl_error_group.h	(revision 62)
@@ -0,0 +1,28 @@
+/**
+ * @file wl_error_group.h
+ * @brief A packet group for error messages.
+ *
+ * A packet group for sending and receiving error
+ * messages.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup wlerror Error Packets
+ * @brief Functions for sending and receiving error packets
+ * 
+ * Functions for sending and receiving error packets.
+ * 
+ * @{
+ **/
+
+/**@brief Register this packet group with the wireless library **/
+void wl_error_register(void);
+/**@brief Unregister this packet group with the wireless library **/
+void wl_error_unregister(void);
+/**@brief Send a string in an error packet **/
+void wl_error_send_string(char* str);
+
+/** @} **/ // end defgroup
+
Index: branches/charge_board/code/projects/libwireless/lib/sensor_matrix.c
===================================================================
--- branches/charge_board/code/projects/libwireless/lib/sensor_matrix.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/lib/sensor_matrix.c	(revision 62)
@@ -0,0 +1,267 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <wl_defs.h>
+
+#include "sensor_matrix.h"
+
+#define DEFAULT_SENSOR_MATRIX_SIZE 20
+
+/*Sensor Matrix Functions*/
+void sensor_matrix_expand(SensorMatrix* m, int nextSize);
+
+/**
+ * Initializes the sensor matrix.
+ *
+ * @return the newly created sensor matrix
+ **/
+SensorMatrix* sensor_matrix_create()
+{
+	SensorMatrix* m;
+	int i;
+	
+	m = malloc(sizeof(SensorMatrix));
+	if (!m)
+	{
+		WL_DEBUG_PRINT("Out of memory - create sensor matrix.\r\n");
+		return NULL;
+	}
+	m->size = DEFAULT_SENSOR_MATRIX_SIZE;
+	m->matrix = malloc(m->size * sizeof(int*));
+	m->joined = malloc(m->size * sizeof(int));
+	m->numJoined = 0;
+	if (!(m->matrix) || !(m->joined))
+	{
+		WL_DEBUG_PRINT("Out of memory - create sensor matrix 2.\r\n");
+		return NULL;
+	}
+	
+	for (i = 0; i < m->size; i++)
+	{
+		m->matrix[i] = NULL;
+		m->joined[i] = 0;
+	}
+	return m;
+}
+
+/**
+ * Deletes and frees memory from the sensor matrix.
+ *
+ * @param m the sensor matrix to delete
+ **/
+void sensor_matrix_destroy(SensorMatrix* m)
+{
+	int i;
+	for (i = 0; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+			free(m->matrix[i]);
+	free(m->matrix);
+	free(m->joined);
+	free(m);
+}
+
+/**
+ * Adds robot with XBee id id to the sensor matrix.
+ * 
+ * @param m the sensor matrix
+ * @param id the XBee ID of the robot to add
+ **/
+void sensor_matrix_add_robot(SensorMatrix* m, unsigned int id)
+{
+	int i;
+	if (id >= m->size)
+		sensor_matrix_expand(m, id + 1);
+	if (m->matrix[id] != NULL)
+		return;
+	
+	m->matrix[id] = malloc(m->size * sizeof(int));
+	if (!(m->matrix[id]))
+	{
+		WL_DEBUG_PRINT("Out of memory - add robot.\r\n");
+		return;
+	}
+
+	for (i = 0; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+			m->matrix[i][id] = -1;
+}
+
+/**
+ * Removes robot with id from the sensor matrix, and removes
+ * all sensor information regarding the robot.
+ *
+ * @param m the sensor matrix
+ * @param id the XBee ID of the robot to remove
+ **/
+void sensor_matrix_remove_robot(SensorMatrix* m, unsigned int id)
+{
+	int i;
+
+	if (id >= m->size || m->matrix[id] == NULL)
+	{
+		WL_DEBUG_PRINT("Removing robot not added to matrix.\r\n");
+		return;
+	}
+	
+	free(m->matrix[id]);
+	m->matrix[id] = NULL;
+	
+	for (i = 0 ; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+			m->matrix[i][id] = -1;
+	
+	m->joined[id] = 0;
+}
+
+/**
+ * Expands the size of the sensor matrix if an id number we attempt
+ * to add is too large.
+ *
+ * @param m the sensor matrix to expand
+ * @param size the new size of the sensor matrix
+ **/
+//Note: this has probably not been tested, hopefully it works
+void sensor_matrix_expand(SensorMatrix* m, int nextSize)
+{
+	int i, j;
+	WL_DEBUG_PRINT("Expanding sensor matrix.\r\n");
+	
+	int** tempMatrix = malloc(nextSize * sizeof(int*));
+	if (!tempMatrix)
+	{
+		WL_DEBUG_PRINT("Out of memory - expand matrix.\r\n");
+		return;
+	}
+	
+	for (i = 0; i < nextSize; i++)
+		tempMatrix[i] = NULL;
+	
+	//copy over old sensor data
+	for (i = 0; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+		{
+			tempMatrix[i] = malloc(nextSize * sizeof(int));
+			if (!tempMatrix[i])
+			{
+				WL_DEBUG_PRINT("Out of memory - expand matrix 2.\r\n");
+				return;
+			}
+			for (j = 0; j < m->size; j++)
+				tempMatrix[i][j] = m->matrix[i][j];
+			for (j = m->size; j < nextSize; j++)
+				tempMatrix[i][j] = -1;
+			
+			free(m->matrix[i]);
+		}
+	
+	free(m->matrix);
+	m->matrix = tempMatrix;
+	m->size = nextSize;
+
+	//expand the size of joined
+	int* tempJoined = malloc(nextSize * sizeof(int));
+	if (!tempJoined)
+	{
+		WL_DEBUG_PRINT("Out of memory - expand matrix 3.\r\n");
+		return;
+	}
+	
+	for (i = 0; i < m->size; i++)
+		tempJoined[i] = m->joined[i];
+	for (i = m->size; i < nextSize; i++)
+		tempJoined[i] = 0;
+	
+	free(m->joined);
+	m->joined = tempJoined;
+}
+
+/**
+ * Sets the sensor reading for robot robot to reading.
+ * 
+ * @param m the sensor matrix to set the reading for
+ * @param observer the id of the robot who made the reading
+ * @param robot the id of the robot who the reading is for
+ * @param reading the BOM reading from observer to robot
+ */
+void sensor_matrix_set_reading(SensorMatrix* m, int observer, int robot, int reading)
+{
+	if (robot >= m->size || observer >= m->size || m->matrix[observer] == NULL)
+		sensor_matrix_add_robot(m, observer);
+	m->matrix[observer][robot] = reading;
+}
+
+/**
+ * Gets the sensor reading for a robot to another robot.
+ *
+ * @param m the sensor matrix
+ * @param observer the robot whose reading we check
+ * @param robot the robot who we are checking the reading to
+ *
+ * @return the observer's BOM reading for robot
+ **/
+int sensor_matrix_get_reading(SensorMatrix* m, int observer, int robot)
+{
+	if (observer >= m->size || robot >= m->size)
+		return -1;
+	return m->matrix[observer][robot];
+}
+
+/**
+ * Sets whether or not the given robot is part of the token ring.
+ *
+ * @param m the sensor matrix
+ * @param robot the robot to set as a member / nonmember of the token ring
+ * @param in 1 if the robot is in the token ring, 0 otherwise
+ **/
+void sensor_matrix_set_in_ring(SensorMatrix* m, int robot, int in)
+{
+	if (robot >= m->size)
+		sensor_matrix_expand(m, robot + 1);
+	if (in == 1)
+		sensor_matrix_add_robot(m, robot);
+	if (in == 1 && m->joined[robot] == 0)
+		m->numJoined++;
+	if (in == 0 && m->joined[robot] == 1)
+		m->numJoined--;
+	m->joined[robot] = in;
+}
+
+/**
+ * Checks if the given robot is in the token ring.
+ * 
+ * @param m the sensor matrix
+ * @param robot the ID of the robot to check
+ *
+ * @return 1 if the robot is in the token ring, 0 otherwise
+ **/
+int sensor_matrix_get_in_ring(SensorMatrix* m, int robot)
+{
+	if (robot >= m->size)
+		return -1;
+	return m->joined[robot];
+}
+
+/**
+ * Returns the size of the sensor matrix.
+ *
+ * @param m the sensor matrix
+ * 
+ * @return the size of the sensor matrix
+ **/
+int sensor_matrix_get_size(SensorMatrix* m)
+{
+	return m->size;
+}
+
+/**
+ * Returns the number of robots which have joined the
+ * token ring.
+ *
+ * @param m the sensor matrix
+ *
+ * @return the number of robots in the token ring
+ **/
+int sensor_matrix_get_joined(SensorMatrix* m)
+{
+	return m->numJoined;
+}
+
Index: branches/charge_board/code/projects/libwireless/robotTest/Makefile
===================================================================
--- branches/charge_board/code/projects/libwireless/robotTest/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/robotTest/Makefile	(revision 62)
@@ -0,0 +1,523 @@
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+COLONYROOT = y:
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# Target file name (without extension).
+TARGET = main
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+#$(TARGET).c 
+
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = $(COLONYROOT)/code/firefly_plus_lib
+#C:\WinAVR\include\fwr
+
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+
+
+# Place -I options here
+CINCS = -I../lib -I../../../lib/include/libdragonfly -L../lib -L../../../lib/bin
+
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+CFLAGS += -DROBOT
+
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+
+MATH_LIB = -lm
+
+
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+LDFLAGS += -lwireless -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = /dev/ttyUSB1
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+AVRDUDE_FLAGS += -D
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/libwireless/robotTest/main.c
===================================================================
--- branches/charge_board/code/projects/libwireless/robotTest/main.c	(nonexistent)
+++ branches/charge_board/code/projects/libwireless/robotTest/main.c	(revision 62)
@@ -0,0 +1,15 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+
+int main(void)
+{
+	dragonfly_init(ALL_ON);
+	usb_puts("Start.\r\n");
+	wl_init();
+	usb_puts("Wireless initialized.\n");
+	wl_token_ring_register();
+	wl_token_ring_join();
+	while (1)
+		wl_do();
+}
Index: branches/charge_board/code/projects/slam/robot_main.c
===================================================================
--- branches/charge_board/code/projects/slam/robot_main.c	(nonexistent)
+++ branches/charge_board/code/projects/slam/robot_main.c	(revision 62)
@@ -0,0 +1,113 @@
+#include <dragonfly_lib.h>
+#include <wireless.h>
+#include <wl_token_ring.h>
+#include <smart_run_around_fsm.h>
+
+#define BOM_POST_DELAY 50
+#define SLAM_PACKET_GROUP 11
+#define CONTROL_PACKET_TYPE 'C'
+#define REQUEST_PACKET_TYPE 'R'
+#define ROBOT_RESPONSE 'I'
+
+//REQUEST_PACKET_ORGANIZATION
+#define REQUEST_PACKET_SIZE 50
+#define IR_1_LOC 0
+#define IR_2_LOC 1
+#define IR_3_LOC 2
+#define IR_4_LOC 3
+#define IR_5_LOC 4
+#define BOM_START_LOC 5
+
+void bom_pre(void);
+void bom_post(void);
+
+//Packet Handler Functions
+void timeout_handle(void);
+void response_handle(int frame, int received);
+void receive_handle(char type, int source, unsigned char* packet, int length);
+void unregister(void);
+
+char* make_request_packet(char* packet);
+
+int IR[5];
+
+int main(void)
+{
+
+  dragonfly_init(ALL_ON);
+  
+  wl_init();
+ 
+  wl_token_ring_register();
+  wl_token_ring_join();
+  wl_token_ring_set_bom_functions(bom_pre, bom_post, get_max_bom);
+
+  PacketGroupHandler packet_group_handler;
+  packet_group_handler.groupCode=SLAM_PACKET_GROUP;
+  packet_group_handler.timeout_handler=timeout_handle;
+  packet_group_handler.handle_response=response_handle;
+  packet_group_handler.handle_receive=receive_handle;
+  packet_group_handler.unregister=unregister;
+
+  wl_register_packet_group(&packet_group_handler);
+  
+  int i;
+  while(1){
+    wl_do();
+    run_around_FSM(); 
+    for(i=0;i<5;i++){
+      IR[i]=range_read_distance(i);
+    }
+  }
+
+  wl_unregister_packet_group(&packet_group_handler); 
+}
+
+void bom_pre(void){
+    bom_on();
+}
+
+void bom_post(void){
+    delay_ms(BOM_POST_DELAY);
+    bom_off();
+}
+
+void timeout_handle(void){
+    wl_token_ring_join();
+}
+
+void response_handle(int frame, int received){
+  
+}
+
+void receive_handle(char type, int source, unsigned char* packet, int length){
+  int i; 
+  if(type==REQUEST_PACKET_TYPE){
+    char packet[REQUEST_PACKET_SIZE]; 
+    //Send a message back to our computer overlord.
+    int len= make_request_packet(packet);
+   
+    wl_send_robot_to_robot_packet(SLAM_PACKET_GROUP, ROBOT_RESPONSE, packet, len, source , 0);
+  }
+  else if(type == CONTROL_PACKET_TYPE){
+    for(i=0;i<length;i++){
+
+    }
+  }
+}
+
+int make_request_packet(char* packet){
+  int size = wl_token_get_num_robots();
+  int i,j;
+  for(i=0;i<5;i++){
+      packet[i] = IR[i];
+  } 
+  for(i=0;i<size;i++){
+      for(j=0;j<size;j++){
+       // wl_token_get_sensor_reading(int source, int dest);
+      
+      }
+  }
+  return size;
+}
+
Index: branches/charge_board/code/projects/slam/computer_main.c
===================================================================
--- branches/charge_board/code/projects/slam/computer_main.c	(nonexistent)
+++ branches/charge_board/code/projects/slam/computer_main.c	(revision 62)
@@ -0,0 +1,8 @@
+#include <dragonfly_lib.h>
+
+int main(void)
+{
+	dragonfly_init(ALL_ON);
+	return 0;
+}
+
Index: branches/charge_board/code/projects/slam/.dep/robot_main.o.d
===================================================================
--- branches/charge_board/code/projects/slam/.dep/robot_main.o.d	(nonexistent)
+++ branches/charge_board/code/projects/slam/.dep/robot_main.o.d	(revision 62)
@@ -0,0 +1,88 @@
+robot_main.o: robot_main.c \
+  ../../../code/lib/include/libdragonfly/dragonfly_lib.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/inttypes.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/stdint.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/stdio.h \
+  /opt/local/lib/gcc/avr/4.0.2/include/stdarg.h \
+  /opt/local/lib/gcc/avr/4.0.2/include/stddef.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/stdlib.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/io.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/sfr_defs.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/iom128.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/portpins.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/version.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/interrupt.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/util/delay.h \
+  /opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/util/twi.h \
+  ../../../code/lib/include/libdragonfly/analog.h \
+  ../../../code/lib/include/libdragonfly/dio.h \
+  ../../../code/lib/include/libdragonfly/time.h \
+  ../../../code/lib/include/libdragonfly/lcd.h \
+  ../../../code/lib/include/libdragonfly/lights.h \
+  ../../../code/lib/include/libdragonfly/motor.h \
+  ../../../code/lib/include/libdragonfly/serial.h \
+  ../../../code/lib/include/libdragonfly/buzzer.h \
+  ../../../code/lib/include/libdragonfly/rangefinder.h \
+  ../../../code/lib/include/libdragonfly/bom.h \
+  ../../../code/lib/include/libdragonfly/move.h \
+  ../../../code/lib/include/libwireless/wireless.h \
+  ../../../code/lib/include/libwireless/wl_token_ring.h \
+  smart_run_around_fsm.h
+
+../../../code/lib/include/libdragonfly/dragonfly_lib.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/inttypes.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/stdint.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/stdio.h:
+
+/opt/local/lib/gcc/avr/4.0.2/include/stdarg.h:
+
+/opt/local/lib/gcc/avr/4.0.2/include/stddef.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/stdlib.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/io.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/sfr_defs.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/iom128.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/portpins.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/version.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/avr/interrupt.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/util/delay.h:
+
+/opt/local/lib/gcc/avr/4.0.2/../../../../avr/include/util/twi.h:
+
+../../../code/lib/include/libdragonfly/analog.h:
+
+../../../code/lib/include/libdragonfly/dio.h:
+
+../../../code/lib/include/libdragonfly/time.h:
+
+../../../code/lib/include/libdragonfly/lcd.h:
+
+../../../code/lib/include/libdragonfly/lights.h:
+
+../../../code/lib/include/libdragonfly/motor.h:
+
+../../../code/lib/include/libdragonfly/serial.h:
+
+../../../code/lib/include/libdragonfly/buzzer.h:
+
+../../../code/lib/include/libdragonfly/rangefinder.h:
+
+../../../code/lib/include/libdragonfly/bom.h:
+
+../../../code/lib/include/libdragonfly/move.h:
+
+../../../code/lib/include/libwireless/wireless.h:
+
+../../../code/lib/include/libwireless/wl_token_ring.h:
+
+smart_run_around_fsm.h:
Index: branches/charge_board/code/projects/slam/smart_run_around_fsm.c
===================================================================
--- branches/charge_board/code/projects/slam/smart_run_around_fsm.c	(nonexistent)
+++ branches/charge_board/code/projects/slam/smart_run_around_fsm.c	(revision 62)
@@ -0,0 +1,135 @@
+#include "dragonfly_lib.h"
+#include "smart_run_around_fsm.h"
+
+/*A simple behavior for navigating in an environment, i.e. avoiding walls and getting stuck.
+Could be better at not getting stuck.
+
+Latest revision only has two accessible states: move and reverse.
+*/
+
+
+void run_around_init(void)
+{
+  range_init();
+  analog_init();
+  motors_init();
+  orb_init();
+  orb_enable();
+  usb_init();
+ 
+  /*Start in the default state, MOVING*/ 
+  avoid_state=MOVING;
+  /*Set timers to their maximum values.*/
+  crazy_count=CRAZY_MAX;
+  backup_count=0; 
+  pControl=0;
+  
+  /*Initialize distances to zero.*/ 
+  d1=0; d2=0; d3=0; d4=0; d5=0;
+  
+  orb_set_color(GREEN);
+
+}
+
+/*The main function, call this to update states as frequently as possible.*/
+void run_around_FSM(void) {
+  /*Default to moving.*/ 
+  avoid_state=MOVING;
+  
+  /*The following lines ensure that undefined (-1) values
+  will not update the distances.*/ 
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1=(temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /*If the crazy count is in it's >>3 range, it acts crazy.*/
+  if(crazy_count<=(CRAZY_MAX>>3))
+  {
+    avoid_state=CRAZY;
+    crazy_count--;
+    
+    if(crazy_count<0) crazy_count=CRAZY_MAX;
+    
+    evaluate_state();
+    return;
+  }
+  
+  //Checks the forward distance to see if it should back up, if so...state backwards.
+  if((d2!=-1)&&(d2 >150)){
+      backup_count=BACKUP_MAX;
+      avoid_state=BACKWARDS;
+      evaluate_state();
+      return;
+  }
+ 
+  if(backup_count<BACKUP_MAX){
+    avoid_state=BACKWARDS; 
+    if(backup_count<0)
+      backup_count=BACKUP_MAX;
+    evaluate_state();
+    return;
+  }
+  
+  /*Should evaluate an expression from -255 to 255 to pass to move.*/
+  pControl= ((d3-d1) + (d4-d5)) >> TURN_CONSTANT;
+  
+  if(pControl>PCONTROL_CRAZY_LIMIT || pControl<-PCONTROL_CRAZY_LIMIT) crazy_count--;
+  /*i.e. if you really want to turn for an extended period of time...you're probably stuck.*/
+
+  /*Debug stuff:*/
+  /*usb_puts("pControl evaluating: ");
+  usb_puti(pControl);
+  usb_puts("\n\r");
+  usb_puts("IR1: ");
+  usb_puti(d1);
+  usb_puts(" IR2: ");
+  usb_puti(d2);
+  usb_puts(" IR3: ");
+  usb_puti(d3);
+  usb_puts(" IR4: ");
+  usb_puti(d4);
+  usb_puts(" IR5: ");
+  usb_puti(d5);
+  usb_puts("\n\r");*/
+  
+  evaluate_state();
+}
+
+
+//Acts on state change.
+void evaluate_state(){
+    switch(avoid_state){
+    case(MOVING): orb_set_color(GREEN);
+      move(STRAIT_SPEED,pControl);
+      break;
+    
+    case(BACKWARDS): orb_set_color(ORANGE);
+      move(-STRAIT_SPEED,0);
+      break;
+      
+    case(CRAZY): orb_set_color(RED);
+      /*TODO: Implement a crazy state.*/
+      move(STRAIT_SPEED,pControl);
+      break;
+      
+    default:
+      /*Should never get here, go strait.*/
+      move(100,0); orb_set_color(BLUE);
+      break;
+  }
+}
+
+
Index: branches/charge_board/code/projects/slam/Makefile
===================================================================
--- branches/charge_board/code/projects/slam/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/slam/Makefile	(revision 62)
@@ -0,0 +1,524 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+#ifndef COLONYROOT
+COLONYROOT = ../../..
+#endif
+
+# Target file name (without extension).
+TARGET = robot_main 
+
+# Uncomment this to use the wireless library
+USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com4
+
+robot: all
+	TARGET = robot_main
+	
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/slam/smart_run_around_fsm.h
===================================================================
--- branches/charge_board/code/projects/slam/smart_run_around_fsm.h	(nonexistent)
+++ branches/charge_board/code/projects/slam/smart_run_around_fsm.h	(revision 62)
@@ -0,0 +1,33 @@
+//Obstacle Avoid Numbers
+
+
+#ifndef _RUN_AROUND_FSM_H_
+#define _RUN_AROUND_FSM_H_
+
+//The States: 
+#define MOVING 12           //Move strait.
+#define BACKWARDS 15        //Move backwards. (Front close to wall.)
+#define STOP 16             //Stop.  The default state, (Something broke).
+#define CRAZY 40            //Erratic behavior that occurs more often when the robot is frequently trying to turn. (i.e. may be stuck.)
+
+#define LEFT 37             //Left
+#define RIGHT 39            //Right
+
+#define BACKUP_MAX 15
+#define CRAZY_MAX 200       //The number of counts between "crazy moments"
+#define STRAIT_SPEED 200    //The speed when going strait or backing up.
+#define TURN_CONSTANT 2
+#define PCONTROL_CRAZY_LIMIT 80
+
+int avoid_state;    /*State machine variable.*/
+int crazy_count;    /*Counter for a 'get unstuck' behavior.*/
+
+int backup_count;	/*Counter for backup duration.*/
+int pControl;		/*Proportional control variable, determines turn direction.*/
+int d1,d2,d3,d4,d5;	/*The five distances taken in by IR.*/
+
+void run_around_init(void);
+void run_around_FSM(void);
+void evaluate_state(void);
+
+#endif
Index: branches/charge_board/code/projects/template/Makefile
===================================================================
--- branches/charge_board/code/projects/template/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/template/Makefile	(revision 62)
@@ -0,0 +1,520 @@
+########Update This Section########
+#
+#
+
+# Relative path to the root directory (containing lib directory)
+ifndef COLONYROOT
+COLONYROOT = ../../..
+endif
+
+# Target file name (without extension).
+TARGET = template
+
+# Uncomment this to use the wireless library
+# USE_WIRELESS = 1
+
+# com1 = serial port. Use lpt1 to connect to parallel port.
+AVRDUDE_PORT = com4
+#
+#
+###################################
+
+# Hey Emacs, this is a -*- makefile -*-
+#----------------------------------------------------------------------------
+# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
+#
+# Released to the Public Domain
+#
+# Additional material for this makefile was written by:
+# Peter Fleury
+# Tim Henigan
+# Colin O'Flynn
+# Reiner Patommel
+# Markus Pfaff
+# Sander Pool
+# Frederik Rouleau
+#
+#----------------------------------------------------------------------------
+# On command line:
+#
+# make all = Make software.
+#
+# make clean = Clean out built project files.
+#
+# make coff = Convert ELF to AVR COFF.
+#
+# make extcoff = Convert ELF to AVR Extended COFF.
+#
+# make program = Download the hex file to the device, using avrdude.
+#                Please customize the avrdude settings below first!
+#
+# make debug = Start either simulavr or avarice as specified for debugging, 
+#              with avr-gdb or avr-insight as the front end for debugging.
+#
+# make filename.s = Just compile filename.c into the assembler code only.
+#
+# make filename.i = Create a preprocessed source file for use in submitting
+#                   bug reports to the GCC project.
+#
+# To rebuild project do "make clean" then "make all".
+#----------------------------------------------------------------------------
+
+#if you want your code to work on the Firefly++ and not Firefly+
+#then add the -DFFPP line to CDEFS
+CDEFS = 
+#-DFFPP
+
+# MCU name
+MCU = atmega128
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 8000000
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG =
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+CDEFS += -DFFP
+# for wireless library
+ifdef USE_WIRELESS
+	CDEFS += -DROBOT
+endif
+
+# Place -I, -L options here
+CINCS = -I$(COLONYROOT)/code/lib/include/libdragonfly 
+CINCS += -L$(COLONYROOT)/code/lib/bin
+ifdef USE_WIRELESS
+	CINCS += -I$(COLONYROOT)/code/lib/include/libwireless
+endif
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS =
+# CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(CSTANDARD)
+
+#---------------- Assembler Options ----------------
+#  -Wa,...:   tell GCC to pass this to the assembler.
+#  -ahlms:    create listing
+#  -gstabs:   have the assembler create line number information; note that
+#             for use in COFF files, additional information about filenames
+#             and function names needs to be present in the assembler source
+#             files -- see avr-libc docs [FIXME: not yet described there]
+ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#---------------- External Memory Options ----------------
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#---------------- Linker Options ----------------
+#  -Wl,...:     tell GCC to pass this to linker.
+#    -Map:      create map file
+#    --cref:    add cross reference to  map file
+LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS += $(EXTMEMOPTS)
+LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+ifdef USE_WIRELESS
+	LDFLAGS += -lwireless
+endif
+LDFLAGS += -ldragonfly
+
+
+
+#---------------- Programming Options (avrdude) ----------------
+
+# Programming hardware: alf avr910 avrisp bascom bsd 
+# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
+#
+# Type: avrdude -c ?
+# to get a full listing.
+#
+AVRDUDE_PROGRAMMER = avrisp
+
+# programmer connected to serial device
+
+AVRDUDE_WRITE_FLASH = -b 57600 -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
+AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
+AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
+
+#don't check for device signature
+AVRDUDE_FLAGS += -F
+
+
+
+#---------------- Debugging Options ----------------
+
+# For simulavr only - target MCU frequency.
+DEBUG_MFREQ = $(F_CPU)
+
+# Set the DEBUG_UI to either gdb or insight.
+# DEBUG_UI = gdb
+DEBUG_UI = insight
+
+# Set the debugging back-end to either avarice, simulavr.
+DEBUG_BACKEND = avarice
+#DEBUG_BACKEND = simulavr
+
+# GDB Init Filename.
+GDBINIT_FILE = __avr_gdbinit
+
+# When using avarice settings for the JTAG
+JTAG_DEV = /dev/com1
+
+# Debugging port used to communicate between GDB / avarice / simulavr.
+DEBUG_PORT = 4242
+
+# Debugging host used to communicate between GDB / avarice / simulavr, normally
+#     just set to localhost unless doing some sort of crazy debugging when 
+#     avarice is running on a different computer.
+DEBUG_HOST = localhost
+
+
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_SIZE_BEFORE = Size before: 
+MSG_SIZE_AFTER = Size after:
+MSG_COFF = Converting to AVR COFF:
+MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
+MSG_FLASH = Creating load file for Flash:
+MSG_EEPROM = Creating load file for EEPROM:
+MSG_EXTENDED_LISTING = Creating Extended Listing:
+MSG_SYMBOL_TABLE = Creating Symbol Table:
+MSG_LINKING = Linking:
+MSG_COMPILING = Compiling:
+MSG_ASSEMBLING = Assembling:
+MSG_CLEANING = Cleaning project:
+
+
+
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+
+
+
+# Default target.
+all: begin gccversion sizebefore build sizeafter end
+
+build: elf hex eep lss sym
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+
+# Display size of file.
+HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
+ELFSIZE = $(SIZE) -A $(TARGET).elf
+AVRMEM = avr-mem.sh $(TARGET).elf $(MCU)
+
+sizebefore:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+sizeafter:
+	@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
+	$(AVRMEM) 2>/dev/null; echo; fi
+
+
+
+# Display compiler version information.
+gccversion : 
+	@$(CC) --version
+
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+	$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+# Generate avr-gdb config/init file which does the following:
+#     define the reset signal, load the target file, connect to target, and set 
+#     a breakpoint at main().
+gdb-config: 
+	@$(REMOVE) $(GDBINIT_FILE)
+	@echo define reset >> $(GDBINIT_FILE)
+	@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
+	@echo end >> $(GDBINIT_FILE)
+	@echo file $(TARGET).elf >> $(GDBINIT_FILE)
+	@echo target remote $(DEBUG_HOST):$(DEBUG_PORT)  >> $(GDBINIT_FILE)
+ifeq ($(DEBUG_BACKEND),simulavr)
+	@echo load  >> $(GDBINIT_FILE)
+endif	
+	@echo break main >> $(GDBINIT_FILE)
+	
+debug: gdb-config $(TARGET).elf
+ifeq ($(DEBUG_BACKEND), avarice)
+	@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
+	@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
+	$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
+	@$(WINSHELL) /c pause
+	
+else
+	@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
+	$(DEBUG_MFREQ) --port $(DEBUG_PORT)
+endif
+	@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
+	
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+	@echo
+	@echo $(MSG_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+	@echo
+	@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
+	$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
+
+
+
+# Create final output files (.hex, .eep) from ELF output file.
+%.hex: %.elf
+	@echo
+	@echo $(MSG_FLASH) $@
+	$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+%.eep: %.elf
+	@echo
+	@echo $(MSG_EEPROM) $@
+	-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+	--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+%.lss: %.elf
+	@echo
+	@echo $(MSG_EXTENDED_LISTING) $@
+	$(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+%.sym: %.elf
+	@echo
+	@echo $(MSG_SYMBOL_TABLE) $@
+	$(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+.SECONDARY : $(TARGET).elf
+.PRECIOUS : $(OBJ)
+%.elf: $(OBJ)
+	@echo
+	@echo $(MSG_LINKING) $@
+	$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+%.s : %.c
+	$(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+%.o : %.S
+	@echo
+	@echo $(MSG_ASSEMBLING) $<
+	$(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+# Create preprocessed source for use in sending a bug report.
+%.i : %.c
+	$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).hex
+	$(REMOVE) $(TARGET).eep
+	$(REMOVE) $(TARGET).cof
+	$(REMOVE) $(TARGET).elf
+	$(REMOVE) $(TARGET).map
+	$(REMOVE) $(TARGET).sym
+	$(REMOVE) $(TARGET).lss
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
+
+# Listing of phony targets.
+.PHONY : all begin finish end sizebefore sizeafter gccversion \
+build elf hex eep lss sym coff extcoff \
+clean clean_list program debug gdb-config
+
Index: branches/charge_board/code/projects/template/main.c
===================================================================
--- branches/charge_board/code/projects/template/main.c	(nonexistent)
+++ branches/charge_board/code/projects/template/main.c	(revision 62)
@@ -0,0 +1,8 @@
+#include <dragonfly_lib.h>
+
+int main(void)
+{
+	dragonfly_init(ALL_ON);
+	return 0;
+}
+
Index: branches/charge_board/code/projects/libdragonfly/time.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/time.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/time.c	(revision 62)
@@ -0,0 +1,148 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+Change Log:
+	2.5.07 - Kevin
+		Aaron fixed the orb/servo code and made them use timer3 but compare registers B and C. He hard set the prescaler
+		to 8 so the RTC broke. Changed it so that we use a 8 prescaler which sets the compare match at 1/16th of a second.
+		You now count how many 16ths of a second you want until you trigger your actual interrupt. Works. Changed defines
+		for time so you can still call rtc_init with a scale but now it is defined in terms of actual time like second, quarter_second
+		etc. Read that section in the time.h file for more information. Tested and works, though the clock drifts more than
+		it used to
+	1.30.07 - Kevin
+		Modified the clock to run on timer3 on the Dragonfly. Works with decent accuracy. Using a prescaler of 256
+	the timer counts up to a precomputer value which will trigger an interrupt and reset the timer. Multiples of
+	256 change it by that multiple. Refer to the time.h file for all possible prescalers.
+		The interrupt will call a specified function _rtc_func every pulse.
+		All of it has been tested and it works.
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static volatile int _rtc_pulse = 0;
+static volatile int _rtc_scale = 32;	//Defaults to 1 Second per pulse
+static void (*_rtc_f)(void) = 0;
+
+/**
+ * @defgroup time Time
+ * @brief Time functions
+ * 
+ * Functions dealing with time.
+ * 
+ * @{
+ **/
+
+/**
+ * Delays for the specified number of milliseconds.
+ * The accuracy of this function is unknown.
+ *
+ * @param ms the number of milliseconds to delay for
+ **/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+
+/* 	Prescales defined in time.h. SECOND will give you 1 second.
+	More scales are defined in the time.h file.
+	rtc_func is the address to a function that you want called every clock tick. */
+/**
+ * Initializes the real time clock. Prescales are defined in time.h.
+ * For example, SECOND will give 1 second. The specified function is
+ * called every clock tick. For the real time clock to activate,
+ * interrupts must be enabled. (through sei() )
+ *
+ * @param prescale_opt the period with which the timer is triggered
+ * @param rtc_func the function called when the timer is triggered
+ *
+ * @see rtc_get, rtc_reset
+ *
+ **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void)) {
+	
+	//Clear timer register for Timer 3
+	TCNT3 = 0;
+	
+	/* 	This sets the Waveform Generation Module to CTC (Clear Timer on Compare) Mode (100)
+		See page135 in Atmega128 Docs for more modes and explanations */
+	TCCR3B |= _BV(WGM32);
+	
+	/* 	This sets the prescaler for the system clock (8MHz) ie: divides the clock by some number.
+		Currently set to a prescaler of 8 because that is what the orb and servos use (they are on this timer as well)
+		See page137 in Atemga128 Docs for all the available prescalers */
+	TCCR3B |= _BV(CS31);
+	
+	/* 	Sets the two regsiters that we compare against. So the timer counts up to this number and
+		then resets back to 0 and calls the compare match interrupt.
+		8x10^6 / 8 = 1/16 Second. All values are based off of this number. Do not change it unless you
+		are l337*/
+		
+	OCR3A = 0xF424;	
+
+	/* 	Enable Output Compare A Interrupt. When OCR3A is met by the timer TCNT3 this interrupt will be
+		triggerd. (See page140 in Atmega128 Docs for more information */
+	ETIMSK |= _BV(OCIE3A);
+	
+	/*	Store the pointer to the function to be used in the interrupt */
+	_rtc_f = rtc_func;
+	
+	/*	Store how many 1/16ths of a second you want to let by before triggering an interrupt */
+	_rtc_scale = prescale_opt;
+}
+
+/**
+ * Returns the time elapsed in seconds since the last call to
+ * rtc_init or rtc_reset.
+ *
+ * @return the number of seconds since the last call to rtc_init or rtc_reset
+ *
+ * @see rtc_init, rtc_reset
+ **/
+int rtc_get(void){
+	return _rtc_val;
+}
+
+/**
+ * Resets the real time clock counter to 0.
+ *
+ * @see rtc_init, rtc_get
+ **/
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+/** @} **/ //end defgroup
+
+/*	Called every pulse. Function in _rtc_f is called every _rtc_scale and also the counter is updated.
+	Bascially, since the pulse is hard set at 1/16s  you want to count how many 16ths of a second have passed
+	and when it reaches the amount of time you want, execute the code. */
+SIGNAL(TIMER3_COMPA_vect) {
+
+	if (_rtc_pulse ==  _rtc_scale) {
+		//Increment the real time clock counter
+		_rtc_val++;
+		
+		//Calls the function tied to the real time clock if defined
+		if(_rtc_f != 0)
+			_rtc_f();
+		
+		//Resets the pulse until the next scale is matched
+		_rtc_pulse = 0;
+	}	
+	
+	//Updates the amount of pulses seen since the last scale match
+	_rtc_pulse++;
+	
+}
+
Index: branches/charge_board/code/projects/libdragonfly/lights.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/lights.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/lights.h	(revision 62)
@@ -0,0 +1,73 @@
+/**
+ * @file lights.h
+ * @brief Contains declarations for managing the orbs.
+ *
+ * Contains declarations for using the orbs and PWM.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Firefly Library, by Tom Lauwers and Steven Shamlian
+ **/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+
+/**
+ * @addtogroup orbs
+ * @{
+ **/
+
+//ORB Colors
+/** @brief Red **/
+#define RED       0xE0
+/** @brief Orange **/
+#define ORANGE    0xE4
+/** @brief Yellow **/
+#define YELLOW    0xE8
+/** @brief Lime **/
+#define LIME      0x68
+/** @brief Green **/
+#define GREEN     0x1C
+/** @brief Cyan **/
+#define CYAN      0x1F
+/** @brief Blue **/
+#define BLUE      0x03
+/** @brief Pink **/
+#define PINK      0xA6 
+/** @brief Purple **/
+#define PURPLE    0x41
+/** @brief Magenta **/
+#define MAGENTA   0xE3
+/** @brief White **/
+#define WHITE     0xFE
+/** @brief Turn the orb off (White) **/
+#define ORB_OFF   0xFE      //ORB_OFF->WHITE
+
+/** @brief Enables the orbs **/
+void orb_init(void);
+/** @brief Set both orbs to a specified color **/
+void orb_set(unsigned char red_led, unsigned char green_led,
+	unsigned char blue_led);
+/** @brief Set orb1 to a specified color **/
+void orb1_set(unsigned char red_led, unsigned char green_led,
+	unsigned char blue_led); 
+/** @brief Set orb2 to a specified color **/
+void orb2_set(unsigned char red_led, unsigned char green_led,
+	unsigned char blue_led);
+
+/** @brief Set both orbs to a specified color **/
+void orb_set_color(int col);
+/** @brief Set orb1 to a specified color **/
+void orb1_set_color(int col);
+/** @brief Set orb2 to a specified color **/
+void orb2_set_color(int col);
+
+/** @brief Disable the orbs **/
+void orb_disable(void);
+/** @brief Enable the orbs **/
+void orb_enable(void);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/motor.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/motor.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/motor.c	(revision 62)
@@ -0,0 +1,128 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/**
+ * @defgroup motors Motors
+ * @brief Functions for controlling the motors.
+ * Functions for controlling the motors. Found in motor.h.
+ * @{
+ **/
+
+/**
+ * Initializes both motors so that they can be used with future
+ * calls to motor1_set and motor2_set.
+ *
+ * @see motors_off, motor1_set, motor2_set
+ **/
+void motors_init( void ) {
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	PORTA &= 0x0F;
+	DDRA |= 0xF0;
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
+	TCCR1B = _BV(WGM12) | _BV(CS10);
+//	TCCR1A = 0xA1;
+//	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+/**
+ * Sets the speed and direction of motor1.
+ * motors_init must be called before this function can be used.
+ *
+ * @param direction Either FORWARD or BACKWARD to set the direction of rotation.
+ * @param speed The speed the motor will run at, in the range 0-255.
+ * 
+ * @see motor2_set, motors_init
+ **/
+void motor1_set(int direction, int speed) {
+
+	if(direction == 0) {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x10)
+		{
+		  OCR1A = 0;
+		}	
+		PORTA = (PORTA & 0xCF) | 0x10;
+//		PORTD |= 0x10;
+//		PORTD &= 0xBF;
+	}
+	else {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x20)
+		{
+		  OCR1A = 0;
+		}
+		PORTA = (PORTA & 0xCF) | 0x20;
+//		PORTD |= 0x40;
+//		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+}
+
+/**
+ * Sets the speed and direction of motor2.
+ * motors_init must be called before this function can be used.
+ *
+ * @param direction Either FORWARD or BACKWARD to set the direction of rotation.
+ * @param speed The speed the motor will run at, in the range 0-255.
+ *
+ * @see motor1_set, motors_init
+ **/
+void motor2_set(int direction, int speed) {
+	if(direction == 0) {
+//		PORTD |= 0x20;
+//		PORTD &= 0x7F;
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x80)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x80;
+	}
+	else {
+//		PORTD |= 0x80;
+//		PORTD &= 0xDF;
+
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x40)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x40;
+	}
+	OCR1BL = speed;
+}
+
+/**
+ * Turns off both motors.
+ *
+ * @see motors_init
+ **/
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
+
+/**@}**///end defgroup
+
Index: branches/charge_board/code/projects/libdragonfly/analog.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/analog.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/analog.c	(revision 62)
@@ -0,0 +1,156 @@
+/*
+ * analog.c - Contains the function implementations for manipulating the ADC
+ * on the firefly+ board
+ * 
+ * author:  CMU Robotics Club, Colony Project
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ */
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+// Internal Function Prototypes
+void set_adc_mux(int which);
+
+/**
+ * @defgroup analog Analog
+ * Functions for manipulation the ADC on the dragonfly board.
+ * All definitions may be found in analog.h.
+ *
+ * @{
+ **/
+
+
+/**
+ * Initializes the ADC.
+ * Call analog_init before reading from the analog ports.
+ *
+ * @see analog8, analog10
+ **/
+void analog_init(void)
+{
+	// ADC Status Register A
+	// Bit 7 - ADEN is set (enables analog)
+	// Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+	// Bit 5 - Enable Auto Trigger (for free running mode)
+	// Bit 4 - ADC interrupt flag, 0
+	// Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+	// Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 8,000,000/128
+	ADCSRA |= 0xEF;
+
+	// ADC Status Register B
+	// Bit 7, 5-3 - Must be cleared
+	// Bit 2:0 - Set mode, currently cleared for free running operation
+	// Bit 6 - Analog comparator mode - cleared
+//	ADCSRB = 0x00;
+	
+	// ADMUX register
+	// Bit 7,6 - Set voltage reference to AVcc (0b01)
+	// Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+	// Bit 4 - X
+	// Bit 3:0 - Sets the current channel, set to ADC7 (the external mux)
+	ADMUX = 0x67;
+
+	// Set external mux lines to outputs
+	DDRG |= 0x1C;
+	set_adc_mux(0x07);
+}	
+
+
+/**
+ * Reads an eight bit number from an analog port.
+ * analog_init must be called before using this function.
+ * 
+ * @param which the analog port to read from. One of
+ * the constants AN0 - AN7.
+ *
+ * @return the eight bit input to the specified port
+ *
+ * @see analog_init, analog10
+ **/
+unsigned int analog8(int which)
+{
+	if(which < EXT_MUX)
+		ADMUX = 0x60 + which;
+	else if(which == EXT_MUX)
+		return 0;
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+	
+	_delay_ms(1); // need at least 130 us between conversions
+	return ADCH;
+}
+
+/**
+ * Reads a ten bit number from the specified port.
+ * analog_init must be called before using this function.
+ *
+ * @param which the analog port to read from. Typically
+ * a constant, one of AN0 - AN7.
+ *
+ * @return the ten bit number input to the specified port
+ * 
+ * @see analog_init, analog8
+ **/
+unsigned int analog10(int which)
+{
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+
+	if(which < EXT_MUX)
+		ADMUX = 0x60 + which;
+	else if(which == EXT_MUX)
+		return 0;
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+/**
+ * Returns the current position of the wheel, as an integer
+ * in the range 0 - 255.
+ * analog_init must be called before using this function.
+ *
+ * @return the orientation of the wheel, as an integer in
+ * the range 0 - 255.
+ *
+ * @see analog_init
+ **/
+int wheel(void)
+{
+	return analog8(WHEEL_PORT);
+}
+
+/**@}**/ //end defgroup
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
+
+void set_adc_mux(int which)
+{
+  // FIX THIS IN NEXT REVISION
+  // ADDR2 ADDR1 ADDR0
+  // G2.G4.G3 set mux to port 0-7 via binary selection
+  // math would be much cleaner if it was G4.G3.G2
+  
+  // mask so only proper bits are possible.  
+  PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04);
+}
+
Index: branches/charge_board/code/projects/libdragonfly/lcd.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/lcd.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/lcd.c	(revision 62)
@@ -0,0 +1,477 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+#define LCD_RS    PB4 // Command/Data
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+//////lcd defines
+#define RST _BV(4)  // pd4 (GPIO)
+#define SCE _BV(0)  // pb0 (~SS)
+#define D_C _BV(5)  // pd5 (GPIO?)
+#define SDI _BV(2)  // pb2 (MOSI)
+#define SCK _BV(1) // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTD
+#define LCDRESETDDR DDRD
+
+// Internal Function Prototypes
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+void lcd_putbyte(unsigned char b);
+
+void crazycircle (void) {
+/*  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+
+      delay_ms(10);
+  }
+*/
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  write_c(0x8e);    // clear window command
+  write_d(0);
+  write_d(0);
+  write_d(130);
+  write_d(130);
+
+  delay_ms(100);
+  
+  write_c(0x92);    // fill enable command
+  write_d(0x01); 
+  
+  delay_ms(10);
+
+  crazycircle();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+//**************************************Old shit below!*****************
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/**
+ * @defgroup lcd LCD
+ * @brief Functions for the LCD
+ * Functions for writing to the LCD.
+ * All functions may be found in lcd.h.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the LCD. Must be called before any other
+ * LCD functions.
+ **/
+void lcd_init(void)
+{
+	LCDDDR |= (SCE | SDI | SCK);
+	LCDRESETDDR |= (RST|D_C);
+
+	LCDPORT &= ~( SCE | SDI | SCK);
+	LCDRESETPORT &=~(D_C);
+  
+	SPCR |= 0x50;//0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDRESETPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+}
+
+/**
+ * Clears the LCD screen. lcd_init must be called first.
+ * 
+ * @see lcd_init
+ **/
+void lcd_clear_screen( void ) {
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+}
+
+/**
+ * Prints a character on the LCD screen. lcd_init
+ * must be called before this function may be used.
+ *
+ * @param c the character to print
+ *
+ * @see lcd_init
+ **/
+void lcd_putc(char c)
+{
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putc(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+/**
+ * Move the current cursor position to the one specified.
+ * lcd_init must be called before this function may be used.
+ * 
+ * @param x The x coordinate of the new position
+ * @param y The y coordinate of the new position
+ *
+ * @see lcd_init
+ **/
+void lcd_gotoxy(int x, int y)
+{
+  LCDRESETPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDRESETPORT |= D_C;
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+/**
+ * Print an integer to the LCD screen.
+ * lcd_init must be called before this function may be used.
+ * 
+ * @param value the integer to print
+ *
+ * @see lcd_init
+ **/
+void lcd_puti(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putc('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putc(lcd_data[position]);
+          }
+
+	return;
+}
+
+/** @} **/ //end defgroup
+
+void lcd_putbyte(unsigned char b)
+{
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+}
+
Index: branches/charge_board/code/projects/libdragonfly/Doxyfile
===================================================================
--- branches/charge_board/code/projects/libdragonfly/Doxyfile	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/Doxyfile	(revision 62)
@@ -0,0 +1,1252 @@
+# Doxyfile 1.4.7
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
+# by quotes) that should identify the project.
+
+PROJECT_NAME           = libdragonfly
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
+# This could be handy for archiving the generated documentation or 
+# if some version control system is used.
+
+PROJECT_NUMBER         = 1.0
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = docs
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, 
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, 
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, 
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, 
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# This tag can be used to specify the encoding used in the generated output. 
+# The encoding is not always determined by the language that is chosen, 
+# but also whether or not the output is meant for Windows or non-Windows users. 
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES 
+# forces the Windows encoding (this is the default for the Windows binary), 
+# whereas setting the tag to NO uses a Unix-style encoding (the default for 
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING   = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like the Qt-style comments (thus requiring an 
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen 
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member 
+# documentation.
+
+DETAILS_AT_TOP         = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for Java. 
+# For instance, namespaces will be presented as packages, qualified scopes 
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to 
+# include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from the 
+# version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = 
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS          = 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                = 
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = 
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = 
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default) 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default) 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
+# of all compounds will be generated. Enable this if the project 
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX     = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW      = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = 
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a call dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable call graphs for selected 
+# functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will 
+# generate a caller dependency graph for every global function or class method. 
+# Note that enabling this option will significantly increase the time of a run. 
+# So in most cases it will be better to enable caller graphs for selected 
+# functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_WIDTH    = 1024
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height 
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than 
+# this value, doxygen will try to truncate the graph, so that it fits within 
+# the specified constraint. Beware that most browsers cannot cope with very 
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT   = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that a graph may be further truncated if the graph's 
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH 
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), 
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, which results in a white background. 
+# Warning: Depending on the platform used, enabling this option may lead to 
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to 
+# read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
Index: branches/charge_board/code/projects/libdragonfly/time.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/time.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/time.h	(revision 62)
@@ -0,0 +1,49 @@
+/**
+ * @file time.h
+ * @brief Contains time-related functions and definitions
+ *
+ * Contains functions and definitions for dealing with time,
+ * namely delay_ms and the realtime clock.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+/**
+ * @addtogroup time
+ * @{
+ **/
+/** @brief A sixteenth of a second **/
+#define SIXTEENTH_SECOND 1
+/** @brief An eighth of a second **/
+#define EIGTH_SECOND 2
+/** @brief A quarter of a second **/
+#define QUARTER_SECOND 4
+/** @brief Half of a second **/
+#define HALF_SECOND	8
+/** @brief One second **/
+#define SECOND 16
+/** @brief Two seconds **/
+#define TWO_SECOND 32
+/** @brief Four seconds **/
+#define FOUR_SECOND 64
+
+/** @brief Delay execution for the specified time **/
+void delay_ms(int ms) ;
+/** @brief Enable the realtime clock **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/** @brief Reset the counter of the realtime clock **/
+void rtc_reset(void);
+/** @brief Get the value of the realtime clock. **/
+int rtc_get(void);
+
+/** @} **/
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/motor.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/motor.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/motor.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @file motor.h
+ * @brief Contains definitions for controlling the motors
+ *
+ * Contains definitions and functions for controlling
+ * the motors.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+/**
+ * @addtogroup motors
+ * @{
+ **/
+
+/** @brief make the motors go forwards **/
+#define FORWARD 1
+/** @brief make the motors go backwards **/
+#define BACKWARD 0
+
+/** @brief Initialize the motors **/
+void motors_init(void);
+/** @brief Set speed and direction of motor1 **/
+void motor1_set(int direction, int speed);
+/** @brief Set speed and direction of motor2 **/
+void motor2_set(int direction, int speed);
+/** @brief Turn the motors off **/
+void motors_off(void);
+
+/**@}**/ // end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/analog.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/analog.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/analog.h	(revision 62)
@@ -0,0 +1,76 @@
+/**
+ * 
+ * @file analog.h
+ * @brief Contains functions and definitions for using the ADC
+ * 
+ * Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7.
+ * AN6 and AN7 are used for the wheel and battery.
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog.
+	
+ * @author Colony Project, CMU Robotics Club, based on firefly
+ * code by Tom Lauwers
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+/**
+ * @addtogroup analog
+ * @{
+ **/
+
+/** @brief Analog port 0 **/
+#define AN0 0x00
+/** @brief Analog port 1 **/
+#define AN1 0x01
+/** @brief Analog port 2 **/
+#define AN2 0x02
+/** @brief Analog port 3 **/
+#define AN3 0x03
+/** @brief Analog port 4 **/
+#define AN4 0x04
+/** @brief Analog port 5 **/
+#define AN5 0x05
+/** @brief Analog port 6 **/
+#define AN6 0x06
+/** @brief Analog port 7 **/
+#define AN7 0x07
+/** @brief Analog port 8 **/
+#define AN8 0x08
+/** @brief Analog port 9 **/
+#define AN9 0x09
+/** @brief Analog port 10 **/
+#define AN10 0x0a
+/** @brief Analog port 11 **/
+#define AN11 0x0b
+/** @brief Analog port 12 **/
+#define AN12 0x0c
+/** @brief Analog port 13 **/
+#define AN13 0x0d
+/** @brief Analog port 14 **/
+#define AN14 0x0e
+/** @brief Analog port 15 **/
+#define AN15 0x0f
+
+/** @brief EXT_MUX analog port **/
+#define EXT_MUX AN7
+/** @brief Analog port for the wheel **/
+#define WHEEL_PORT AN10
+/** @brief Analog port for the battery voltage detector **/
+#define BATT_PORT  AN11
+
+/** @brief Initialize analog ports. **/
+void analog_init(void);
+/** @brief Read an 8-bit number from an analog port. **/
+unsigned int analog8(int which);
+/** @brief Read a 10-bit number from an analog port. **/
+unsigned int analog10(int which);
+/** @brief Read the position of the wheel. **/
+int wheel(void);
+
+/**@}**/ //end group
+
+#endif
Index: branches/charge_board/code/projects/libdragonfly/move.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/move.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/move.c	(revision 62)
@@ -0,0 +1,160 @@
+#include "dragonfly_lib.h"
+
+#include "move.h"
+#include "rangefinder.h"
+
+
+// Internal prototypes
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr);
+
+// global varaibles for move_avoid
+int d1, d2, d3, d4, d5;
+
+/**
+ * @defgroup move Movement
+ * @brief Functions fo controlling robot motion
+ * Higher level functions to control the movement of robots.
+ * 
+ * @{
+ **/
+
+
+/**
+ * Causes the robot to move with the given translation and rotational velocities.
+ * motors_init must be called before this function can be used.
+ *
+ * @param velocity the translational velocity of the robot, in the range -255 to 255.
+ * A positive value indicates forward motion, while a negative value indicates
+ * backwards motion.
+ * 
+ * @param omega the rotational velocity of the robot, in the range -255 to 255.
+ * A positive value indicates a counterclockwise velocity, while a negative
+ * value indicates a clockwise velocity.
+ *
+ * @see motors_init, motor1_set, motor2_set
+ **/
+void move (int velocity, int omega) {
+  int vl = 0;
+  int vr = 0;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  //
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+
+/**
+ * Moves the robot with the given translational and angular velocities
+ * while avoiding obstacles. To be effective, this function must be
+ * called repeatedly throughout the motion. It relies on the IR
+ * rangefinders to detect obstacles. Before calling this function,
+ * motors_init and range_init must be called.
+ *
+ * @param velocity the translational velocity of the robot, in the
+ * range -255 to 255. A positive value indicates forward motion.
+ *
+ * @param omega the rotational velocity of the robot, in the range
+ * -255 to 255. A positive value indicates a counterclockwise velocity.
+ *
+ * @param strength the strength of the avoid behavior, in the range
+ * 0 to 100.
+ *
+ * @see motors_init, range_init, move
+ **/
+void move_avoid(int velocity, int omega, int strength){
+  int pControl;
+  int vl = 0;
+  int vr = 0;
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1 = (temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /* Avoid obstacles ahead
+  if(d2>170)
+    v*=-1;
+    
+  Naturally slow down if there is something in the way.
+  if(d2>150 || d1>180 || d3>180){
+    v>>=1;
+  */
+  
+  //pControl= (((d3-d1) + (d4-d5))*strength)/100;
+  pControl= (((d5-d4))*strength)/100;
+  omega = (omega*(100-strength))/100 + pControl;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+/**@}**///end the motion group
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr) {
+	//omega: angle measure, positive couter-clockwise from front.
+	// -180 <= omega <= 180
+	//velocity: -255 <= velocity <= 255
+  
+  long int vltemp, vrtemp;
+  
+  //make sure values are in bounds
+  if (velocity < -255 || velocity >255 || omega < -255 || omega > 255) return;
+	
+  //compute
+	vrtemp = velocity + omega * 3;
+	vltemp = velocity - omega * 3;
+	
+	//check to see if max linear velocities have been exceeded.
+  if (vrtemp > 255) {
+    vltemp = 255 * vltemp / vrtemp;
+    vrtemp = 255;
+  }
+  if (vltemp > 255) {	   
+	vrtemp = 255 * vrtemp / vltemp;    
+	vltemp = 255;  
+  }
+  if (vrtemp < -255) {
+    vltemp = -255 * vltemp / vrtemp;
+    vrtemp = -255;
+  }
+  if (vltemp < -255) {
+    vrtemp = -255 * vrtemp / vltemp;
+    vltemp = -255;
+  }
+  
+  *vr = (int)vrtemp;
+  *vl = (int)vltemp;
+	
+
+}
+
+
Index: branches/charge_board/code/projects/libdragonfly/lcd.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/lcd.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/lcd.h	(revision 62)
@@ -0,0 +1,34 @@
+/**
+ * @file lcd.h
+ * @brief Contains definitions for dealing with the LCD screen.
+ * 
+ * Contains definitions and functions for dealing with the 
+ * LCD screen.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _LCD_H_
+#define _LCD_H_
+
+/**
+ * @addtogroup lcd
+ * @{
+ **/
+
+/** @brief Initialize the LCD screen **/
+void lcd_init(void);
+/** @brief Clear the LCD screen **/
+void lcd_clear_screen( void );
+/** @brief Print a char to the LCD screen **/
+void lcd_putc(char c);
+/** @brief Print a string to the LCD screen **/
+void lcd_puts(char *s);
+/** @brief Print an int to the LCD screen **/
+void lcd_puti(int value);
+/** @brief Set the current cursor position **/
+void lcd_gotoxy(int x, int y);
+
+/** @} **/
+
+#endif
Index: branches/charge_board/code/projects/libdragonfly/battery.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/battery.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/battery.c	(revision 62)
@@ -0,0 +1,119 @@
+#include "battery.h"
+#include "analog.h"
+
+//Constants for Battery
+//Constants determined experimentally 2/9/2007 - James Kong
+//See Battery8_data.xls for experiment data
+#define BATTERY_NEXT_READ_PRESCALAR 5
+#define MAX_LOW_COUNT 5
+
+//global variables
+int battery_low_count;
+
+/**
+ * @defgroup battery Battery
+ * @brief Functions for reading battery voltage.
+ * 
+ * Contains functions for checking the current
+ * voltage of the battery. Include battery.h to
+ * access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Returns the voltage of the battery as an analog8
+ * reading. 128 is approximately 5 volts. analog_init
+ * must be called before using this function.
+ *
+ * @return the voltage of the battery as an analog8
+ * reading
+ *
+ * @see analog_init, battery, analog8
+ **/
+int battery8(void)
+{
+  return analog8(BATT_PORT);
+}
+
+/**
+ * Returns the voltage of the battery in deciVolts.
+ * analog_init must be called before using this function.
+ *
+ * @return the voltage of the battery in deciVolts.
+ *
+ * @see analog_init, battery8
+ **/
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+        return analog8(BATT_PORT) * 500 >>7;
+}
+
+
+/**
+ * Checks if the battery is low. analog_init must be called before
+ * this function can be used. This function waits for several low
+ * battery readings in a row to avoid false positives.
+ *
+ * @return 1 if the battery is low, 0 otherwise
+ *
+ * @see analog_init
+ **/
+char battery_low(void)
+{
+  static char next_read = 0;
+  static char ret = 0;
+  
+  int batt_reading = battery8();
+
+  if(next_read == 0) {
+    if(batt_reading > BATTERY_LOWV)
+    {
+        ret = 0;
+        battery_low_count = 0;
+    }
+    else
+    {
+        battery_low_count++;
+        if( battery_low_count >= MAX_LOW_COUNT )
+        {
+            ret = 1;
+            battery_low_count = 0;
+        }
+    }
+    
+    next_read = BATTERY_NEXT_READ_PRESCALAR;
+  }
+  else next_read--;
+  
+  return ret;
+}
+
+/**
+ * Averages n_samples battery8 readings. This function may
+ * take a while to complete, and is only made available
+ * for convenience. analog_init must be called before this
+ * function may be used.
+ *
+ * @param n_samples The number of times to sample the battery voltage
+ *
+ * @return the average reading for the battery voltage, where 128
+ * is approximately 5 Volts.
+ *
+ * @see analog_init, battery
+ **/
+int battery8_avg(int n_samples)
+{
+  int i;
+  long int sum = 0;
+  
+  for(i = 0; i < n_samples; i++) {
+    sum += battery8();
+  }
+  
+  return (int)(sum / n_samples);
+}
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/projects/libdragonfly/dragonfly_lib.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/dragonfly_lib.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/dragonfly_lib.c	(revision 62)
@@ -0,0 +1,96 @@
+#include <dragonfly_lib.h>
+
+/* init_dragonfly - Initializes functions based on configuration parameters
+   examples:
+
+   init_dragonfly (0, 0, 0); - just initialize the digital IO (buttons, potentiometer)
+
+   init_dragonfly (ANALOG | SERIAL | BUZZER, C0_C1_ANALOG, BAUD115200); 
+   Initialize ADC and set C0 and C1 as analog inputs.  Initialize serial and set baud rate
+   to 115200 bps.  Initialize the buzzer.
+   
+   init_dragonfly (MOTORS | ORB, 0, 0);
+   Initialize motor driving and the color fading abilities of the ORB. */
+
+/**
+ * @defgroup dragonfly Dragonfly
+ * @brief General Dragonfly Functions
+ * General functions for the dragonfly. Include
+ * dragonfly_lib.h to access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the components specified by config.
+ * 
+ * @see analog_init, usb_init, xbee_init, buzzer_init,
+ * bom_init, orb_init, motors_init, lcd_init
+ **/
+void dragonfly_init(int config) 
+{
+	// Set directionality of various IO pins
+	DDRG &= ~(_BV(PING0)|_BV(PING1));
+	PORTG |= _BV(PING0)|_BV(PING1);
+	
+	if(config & ANALOG) {
+		analog_init();
+	}
+	
+	if(config & COMM) {
+    //Defaults to 115200. Check serial.h for more information.
+    sei();
+    usb_init();
+    xbee_init();
+	}
+	
+	if(config & BUZZER) {
+    sei();
+		buzzer_init();
+	}
+	
+	if(config & ORB) {
+    sei();
+		orb_init();
+	}
+	
+	if(config & MOTORS) {
+		motors_init();
+	}
+	
+	if(config & SERVOS) {
+		sei();
+    //Servos not yet implemented
+    //servo_init();
+	}
+
+	if(config & LCD) {
+		lcd_init();
+	}
+	
+	if(config & (SERVOS | ORB)) {
+    sei();
+    orb_init();
+    //Servos not yet implemented
+	}
+	
+	// delay a bit for stability
+	_delay_ms(1);
+}
+
+/**
+ * Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+ * to reset the AVR.  The reset clears all memory and resets all registers
+ * with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+ * and Status Register (MCUCSR).
+*/
+void reset(void)
+{
+    WDTCR &= 0xF8;
+    WDTCR |= 0x08;
+    _delay_ms(15);
+}
+
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/projects/libdragonfly/dio.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/dio.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/dio.c	(revision 62)
@@ -0,0 +1,294 @@
+/* 
+dio.c
+*/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/**
+ * @defgroup dio Digital Input / Output
+ * @brief Controls digital input and output
+ * 
+ * A general note on how port / pin numbers work:<br>
+ * The portpin is used to select both the bank and which pin is selected.
+ * 6 bits are used (lower 6, ex: 0b00abcdef).
+ * The first 3 (abc in this example) are used to select the bank.<br>
+ * A = 001<br>
+ * B = 010<br>
+ * C = 011<br>
+ * D = 100<br>
+ * E = 101<br>
+ * F = 110<br>
+ * G = 111<br><br>
+ * 		
+ * The bank can be found by doing portpin >> 3. <br>
+ * 		
+ * The next three (def in this example) are used to select the pin number.
+ * These three bits are just the binary representation of the pin number.<br>
+ * <br>
+ * The pin number can be found by doing portpin & 0b111.<br><br>
+ *
+ * Include dio.h to access these functions.
+ **/
+
+/**
+ * Reads the selected portpin.
+ * 
+ * @param portpin The portpin to be read. See the general description
+ * for a description of portpins.
+ *
+ * @return 1 or 0, depending on the value of the portpin.
+ **/
+int digital_input(int portpin){
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3){
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4){
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/**
+ * Enables pullup on a pin. If it is an output pin, the pin will output
+ * 1.
+ *
+ * @param portpin the pin to enable pullup on. See the general description
+ * for a discussion of portpins.
+ **/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/**
+ * Sets portpin to the given value.
+ * 
+ * @param portpin the portpin to output to. See the general
+ * description for a discussion of portpins.
+ *
+ * @param val the value to set the portpin to. 0 for off,
+ * nonzero for on.
+ **/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  }else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+/**
+ * Checks if button1 is currently pressed.
+ * 
+ * @return 1 if button1 is pressed, 0 otherwise
+ *
+ * @see button1_wait, button1_click
+ **/
+int button1_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING0);
+	PORTG|= _BV(PING0);
+    pin_val = PING;
+	return !((pin_val & _BV(PING0)));
+  
+}
+
+/**
+ * Delays execution until button1 is pressed.
+ *
+ * @see button1_read, button1_click
+ **/
+void button1_wait( void )
+{
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/**
+ * If button1 is pressed, waits until it is released before returning.
+ * Otherwise, the function returns immediately.
+ *
+ * @return 1 if button1 has been pressed, 0 otherwise
+ *
+ * @see button1_read, button1_wait
+ **/
+int button1_click()
+{
+  if(button1_read()){
+    while(button1_read());
+    return 1;
+  }else{
+    return 0;
+  }
+}
+
+/**
+ * Checks if button2 is currently pressed.
+ * 
+ * @return 1 if button2 is pressed, 0 otherwise
+ *
+ * @see button2_wait, button2_click
+ **/
+int button2_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING1);
+	PORTG|= _BV(PING1);
+    pin_val = PING;
+	return !((pin_val & _BV(PING1)));
+}
+
+/**
+ * Delays execution until button2 is pressed.
+ *
+ * @see button2_read, button2_click
+ **/
+void button2_wait( void )
+{
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+/**
+ * If button2 is pressed, waits until it is released before returning.
+ * Otherwise, the function returns immediately.
+ *
+ * @return 1 if button2 has been pressed, 0 otherwise
+ *
+ * @see button2_read, button2_wait
+ **/
+int button2_click()
+{
+	if(button2_read()){
+    while(button2_read());
+    return 1;
+  }else{
+		return 0;
+  }
+}
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/projects/libdragonfly/move.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/move.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/move.h	(revision 62)
@@ -0,0 +1,49 @@
+/**
+ * @file move.h
+ * @brief Contains definitions for controlling robot motion
+ * 
+ * This file offers higher-level functions for robot motion.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+/**
+ * @addtogroup move
+ * @{
+ **/
+
+/** @brief Move forwards **/
+#define FWD 0
+/** @brief Move backwards **/
+#define BCK 1
+
+/** @brief A slow speed **/
+#define SLOW_SPD 96
+/** @brief Half of the full speed **/
+#define HALF_SPD 128
+/** @brief A normal speed **/
+#define NRML_SPD 160
+/** @brief A fast speed **/
+#define FAST_SPD 192
+/** @brief The maximum speed **/
+#define FULL_SPD 255
+
+/** @brief A slow turning speed **/
+#define SLOW_TURN 64
+/** @brief A medium turning speed **/
+#define NRML_TURN 96
+/** @brief A high turning speed **/
+#define FAST_TURN 128
+
+/** @brief Move the robot at the specified velocity **/
+void move(int velocity, int omega);
+/** @brief Move the robot while avoiding obstacles **/
+void move_avoid(int velocity, int omega, int strength);
+
+/** @} **/
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/purgatory/i2c.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/purgatory/i2c.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/purgatory/i2c.h	(revision 62)
@@ -0,0 +1,76 @@
+/**
+ * @file i2c.h
+ * @brief Definitions for i2c.
+ * 
+ * Definitions for i2c. KEVIN - what is i2c?
+ *
+ * @author CMU Robotics Club
+ **/
+
+
+#ifndef _I2C_H_
+#define _I2C_H_
+
+#include <stddef.h>
+
+// for i2c_byte coming from charge board
+//I2C Message Codes
+#define I2C_MSG_ACKNOWLEDGE       'A'
+#define I2C_MSG_BATTERY_CHARGING  'C'
+#define I2C_MSG_DATA              'D'
+#define I2C_MSG_CONTACT_ERROR     'E'
+#define I2C_MSG_BATTERY_FULL      'F'
+#define I2C_MSG_NO_CONTACT        'N'
+#define I2C_MSG_REQUEST_DATA      'R'
+#define I2C_MSG_GO_TO_SLEEP       'Y'
+#define I2C_MSG_ENTERING_SLEEP    'Z'
+
+char i2c_prev_byte; //store first byte of i2c packet (255 if null)
+
+// for i2c_register (checked in charging FSM)
+#define I2C_REG_DEFAULT			0
+#define I2C_REG_CHARGING		1
+#define I2C_REG_CONTACT_ERROR	2
+#define I2C_REG_BATTERY_FULL	3
+#define I2C_REG_NO_CONTACT		4
+int i2c_register;
+
+/** @brief KEVIN **/
+typedef void (*fun_srecv_t)(char);
+
+/** @brief KEVIN **/
+typedef int (*fun_mrecv_t)(char);
+
+/** @brief KEVIN **/
+typedef char (*fun_send_t)(void);
+
+/** @brief KEVIN **/
+int i2c_init(char addr, fun_mrecv_t master_recv, fun_srecv_t slave_recv, fun_send_t slave_send);
+
+/** @brief KEVIN **/
+void i2c_clear(void);
+
+/** @brief A function for the master to send data to a slave. **/
+int i2c_send(char dest, char* data, size_t bytes);
+
+/** @brief KEVIN **/
+int i2c_request(char dest);
+
+/** @brief KEVIN **/
+void i2c_packet_rec (char i2c_byte);
+/** @brief KEVIN **/
+void i2c_packet_sniff(char data);
+
+
+
+unsigned char i2c_homing_sensor_data;
+unsigned char i2c_homing_sensor_data_dirty;
+//data dirty-ness
+//data is dirty if the user decides so (generally, after it is used and new data is required).
+//the bit set to 1 will mark the data with the same name as dirty.
+//each time a new sensor value is read, the dirty bit is set to fresh, indicating that new data was available.
+#define I2C_DATA_FRESH 0		//fresh = not dirty
+#define I2C_DATA_DIRTY 1		//dirty is true
+
+
+#endif
Index: branches/charge_board/code/projects/libdragonfly/purgatory/i2c.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/purgatory/i2c.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/purgatory/i2c.c	(revision 62)
@@ -0,0 +1,289 @@
+/* @file i2c.c
+ * @brief KEVIN
+ * In the case where you have master sends and then a master request to the same
+ * address, you will not give up control of the line because the send and
+ * request addresses are seen as different addresses. Inbetween it will send a
+ * restart but will not give up the line.
+ *
+ * @author CMU Robotics Club
+ * @bug Not tested.
+ */
+
+#include <avr/interrupt.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+#include "ring_buffer.h"
+#include "serial.h"
+
+/* Set bit rate 12 = 100kbit/s (max speed setting is 10 for an
+ * 8 MHz clock). It is a divider, so the lower the number the faster the speed.
+ */
+#define I2C_BIT_RATE_DIVIDER 0x0C
+
+static int start_flag;
+
+static fun_mrecv_t master_recv_function;
+static fun_srecv_t slave_recv_function;
+static fun_send_t slave_send_function;
+
+RING_BUFFER_NEW(i2c_buffer, 64, char, i2c_write_buff, i2c_addr_buff);
+
+/**
+ * KEVIN - description
+ * 
+ * @param addr KEVIN
+ * @param master_recv KEVIN
+ * @param slave_recv KEVIN
+ * @param slave_send KEVIN
+ * 
+ * @return KEVIN
+ *
+ **/
+int i2c_init(char addr, fun_mrecv_t master_recv, fun_srecv_t slave_recv, fun_send_t slave_send) {
+  master_recv_function = master_recv;
+  slave_recv_function = slave_recv;
+  slave_send_function = slave_send;
+
+  RING_BUFFER_CLEAR(i2c_write_buff);
+  RING_BUFFER_CLEAR(i2c_addr_buff);
+  
+  /* enables twi interrupt, automatic ack sending, and all twi hardware */
+  TWCR =  (_BV(TWEA) | _BV(TWEN) | _BV(TWIE));
+
+  /* sets the bit rate of data transmission */
+  TWBR = I2C_BIT_RATE_DIVIDER;
+
+  /* sets the address (it is stored in the 7 most significant bits) and allows
+   * global messages to be accepted */
+  TWAR = (addr << 1) | 1;
+  
+  
+  i2c_homing_sensor_data_dirty = I2C_DATA_DIRTY;
+  
+  return 0;
+}
+
+/**
+ * KEVIN - description
+ **/
+void i2c_clear(void)
+{
+  RING_BUFFER_CLEAR(i2c_write_buff);
+  RING_BUFFER_CLEAR(i2c_addr_buff);
+  i2c_register = I2C_REG_DEFAULT;
+}
+
+/**
+ * KEVIN - description
+ * 
+ * @param dest KEVIN
+ * @param data KEVIN
+ * @param bytes KEVIN
+ *
+ * @return KEVIN
+ **/
+int i2c_send(char dest, char *data, size_t bytes) {
+  int i;
+
+  /* adding data to be sent to ring buffers is not atomic,
+   * so disable interrupts */
+  cli();
+  for(i = 0; i < bytes; i++) {
+    if(RING_BUFFER_FULL(i2c_write_buff)) {
+      sei();
+      return -1;
+    }
+
+    RING_BUFFER_ADD(i2c_write_buff, data[i]);
+    RING_BUFFER_ADD(i2c_addr_buff, dest << 1);
+  }
+  sei();
+    
+	/* send the start bit, only if this device is not currently master */
+  if(!start_flag) {
+    start_flag = 1;
+    TWCR |= _BV(TWSTA);
+    TWCR |= _BV(TWINT);
+  }
+  
+  return 0;
+}
+
+/**
+ * KEVIN - description
+ *
+ * @param dest KEVIN
+ *
+ * @return KEVIN
+ **/
+int i2c_request(char dest) {
+  if(RING_BUFFER_FULL(i2c_write_buff))
+    return -1;
+  
+  RING_BUFFER_ADD(i2c_write_buff, 0);
+  RING_BUFFER_ADD(i2c_addr_buff, (dest << 1) | 1);
+  
+  if(!start_flag) {
+    start_flag = 1;
+    TWCR |= _BV(TWSTA);
+    TWCR |= _BV(TWINT);
+  }
+  
+  return 0;
+}
+ 
+ISR(TWI_vect) {
+  static char data_to_send;
+  static char addr_to_send = -1;
+  char addr, statusCode;
+  
+    //Get status code (only upper 5 bits)
+    statusCode = (TWSR & 0xF8);
+  
+  switch (statusCode) {
+    //Start sent successfully
+    case TW_START:
+    case TW_REP_START:
+      /* Send address and write
+       * ring_buffer will not be empty */
+      RING_BUFFER_REMOVE(i2c_addr_buff, addr_to_send);
+      RING_BUFFER_REMOVE(i2c_write_buff, data_to_send);
+      
+      /* first send the address */
+      TWDR = addr_to_send; 
+      
+      //Turn off start bits
+      TWCR &= ~_BV(TWSTA);
+      break;
+
+    //Master Transmit - Address sent succesfully
+    case TW_MT_SLA_ACK:
+      //Send byte
+      TWDR = data_to_send;
+      break;
+    //Master Transmit - Data sent succesfully
+    case TW_MT_DATA_ACK:
+      //If there is still data to send
+      if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+        RING_BUFFER_PEEK(i2c_addr_buff, addr);
+        
+        //Still data for this address
+        if(addr == addr_to_send) {
+          RING_BUFFER_REMOVE(i2c_addr_buff, addr);
+          RING_BUFFER_REMOVE(i2c_write_buff, TWDR);
+          break;
+        }
+        //No more data for this address, data for another address -> resend start
+        else {
+          TWCR |= _BV(TWSTA);
+          break;
+        }
+      }
+      
+      /* there are no bytes to send */
+      TWCR |= _BV(TWSTO);
+      start_flag = 0;
+      break;
+    
+    //Master Receive - Address sent succesfully
+    case TW_MR_SLA_ACK:
+      break;
+    //Master Receive - Data received succesfully
+    case TW_MR_DATA_ACK:
+      if(master_recv_function) {
+        if(!master_recv_function(TWDR)) {
+          TWCR &= ~_BV(TWEA);
+        }
+      }
+      break;
+    case TW_MR_DATA_NACK:
+      TWCR |= _BV(TWEA);
+      
+      //If there is still data to send
+      if(!RING_BUFFER_EMPTY(i2c_write_buff)) {
+        TWCR |= _BV(TWSTA);
+        break;
+      }
+      
+      /* there are no bytes to send */
+      TWCR |= _BV(TWSTO);
+      start_flag = 0;
+      break;
+    
+    //Slave Transmit - Address received
+    case TW_ST_SLA_ACK:
+      break;
+    //Slave Transmit - Nack received, no data requsted
+    case TW_ST_DATA_NACK:
+      break;
+    //Slave Transmit - Data requested, ack received
+    case TW_ST_DATA_ACK:
+      if (slave_send_function) {
+        TWDR = slave_send_function();
+      }
+      break;
+    
+    //Slave Receive - Address received  
+    case TW_SR_SLA_ACK:
+      break;
+    //Slave Receive - Data received, ack returned
+    case TW_SR_DATA_ACK:
+      if(slave_recv_function)
+        slave_recv_function(TWDR);
+      break;
+      
+    //Stop sent  
+    case TW_SR_STOP:
+      break;
+  }
+  
+  /* Toggle TWINT so that it resets and executes the commands */
+  TWCR |= _BV(TWINT);
+}
+
+/**
+ * KEVIN - description
+ * @param data KEVIN
+ **/
+void i2c_packet_sniff(char data) {
+  usb_putc(data);
+  usb_putc(' ');
+}
+
+/**
+ * KEVIN - description
+ *
+ * @param i2c_byte KEVIN
+ **/
+void i2c_packet_rec (char i2c_byte)
+{
+  if(i2c_prev_byte == 'H') {
+    usb_puti(i2c_byte);
+	i2c_homing_sensor_data = i2c_byte;
+	i2c_homing_sensor_data_dirty = I2C_DATA_FRESH;
+  }
+  else
+  	usb_putc(i2c_byte);
+  usb_putc(' ');
+  i2c_prev_byte = i2c_byte;
+  switch(i2c_byte)
+	{
+		case I2C_MSG_BATTERY_CHARGING:
+			i2c_register = I2C_REG_CHARGING;
+			break;
+		case I2C_MSG_CONTACT_ERROR:
+			i2c_register = I2C_REG_CONTACT_ERROR;
+			break;
+		case I2C_MSG_BATTERY_FULL:
+			i2c_register = I2C_REG_BATTERY_FULL;
+			break;
+		case I2C_MSG_NO_CONTACT:
+			i2c_register = I2C_REG_NO_CONTACT;
+			break;
+		default:
+			i2c_register = I2C_REG_DEFAULT;
+			break;
+	}
+}
+
Index: branches/charge_board/code/projects/libdragonfly/bom.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/bom.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/bom.c	(revision 62)
@@ -0,0 +1,157 @@
+#include <dragonfly_lib.h>
+#include "bom.h"
+#include "dio.h"
+#include "analog.h"
+
+//constants
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+// internal function prototypes
+void output_high(int which);
+void output_low(int which);
+
+/*
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+*/
+
+
+/*
+the analog pin definitions from dio.h DO NOT work here,
+so we must use PF0 from avrgcc (as opposed to _PIN_F0).
+BUT the dio pin definitions from dio.h must be used (no PE...).
+
+also, _PIN_E2 is initialized to high for some reason,
+which turns the BOM on when the robot is turned on.
+WORK-AROUND: call digital_output(_PIN_E2,0) at some point.
+
+*/
+
+#define MONKI PF0         //analog (yellow)
+//------------------------//
+#define MONKL _PIN_E2     //green
+#define MONK1 _PIN_E3     //blue
+#define MONK0 _PIN_E4     //white
+//------------------------//
+#define MONK3 _PIN_E6     //blue
+#define MONK2 _PIN_E7     //white
+
+#define BOM_VALUE_THRESHOLD 200
+
+
+/**
+ * @defgroup bom BOM (Bearing and Orientation Module)
+ * @brief Functions for dealing with the BOM.
+ *
+ * The Bearing and Orientation Module / Barrel of Monkeys / BOM
+ * is a custom sensor designed and built by the Colony Project.
+ * It consists of a ring of 16 IR emitters and 16 IR detectors.
+ * The BOM is most often use to determine the direction of other
+ * robots. This module contains functions for controlling the BOM.
+ *
+ * Include bom.h to access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Returns the direction of the maximum BOM reading,
+ * as an integer in the range 0-15. 0 indicates to the
+ * robot's right, while the rest of the sensors are
+ * numbered counterclockwise. This is useful for determining
+ * the direction of a robot flashing its BOM, of only one
+ * robot is currently doing so. analog_init must be called
+ * before this function can be used.
+ *
+ * @return the direction of the maximum BOM reading
+ *
+ * @see analog_init
+ **/
+int get_max_bom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+              
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+
+	//threshold on the bom analog value.
+	//defined in bom.h
+	// if the analog value read is above the threshold, we cannot see a robot
+	// (remember, low means higher intensity).
+	if(h < BOM_VALUE_THRESHOLD) {
+		return max_bom_temp;
+	}
+	else
+		return -1;
+}
+
+/**
+ * Flashes the BOM. analog_init must be called before this
+ * function can be used.
+ * 
+ * @see bom_off, analog_init
+ **/
+void bom_on(void)
+{
+  output_high(MONKL);
+}
+
+/**
+ * Stops flashing the BOM. analog_init must be called
+ * before this function can be used.
+ * 
+ * @see bom_on, analog_init
+ **/
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+/** @} **/ //end group
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
Index: branches/charge_board/code/projects/libdragonfly/battery.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/battery.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/battery.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @file battery.h
+ * @brief Definitions for checking battery voltage.
+ * 
+ * Contains definitions for checking the voltage of the 
+ * battery.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BATTERY_H_
+#define _BATTERY_H_
+
+/**
+ * @addtogroup battery
+ * @{
+ **/
+
+/** @brief Normal battery voltage. (6 V) **/
+#define BATTERY_NORMALV 154
+/** @brief Charging battery voltage. (7 V) **/
+#define BATTERY_CHARINGV 179
+/** @brief Low battery voltage. ( < 6 V) **/
+#define BATTERY_LOWV 152
+
+/** @brief Read the battery voltage. **/
+int battery8(void);
+/** @brief Read the battery voltage in deciVolts. **/
+int battery(void);
+/** @brief Check if the battery is low. **/
+char battery_low(void);
+/** @brief get an average battery voltage reading. **/
+int battery8_avg(int n_samples);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/serial.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/serial.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/serial.c	(revision 62)
@@ -0,0 +1,256 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	authors: Robotics Club, Colony Project, pkv
+	much code taken from FWR's library, author: Tom Lauwers
+*/
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+FILE *usb_fd;  //For use with fprintf() and related stdio functions
+FILE *xbee_fd;  //For use with fprintf() and related stdio functions
+
+/**
+ * Initializes communication over the USB serial port.
+ * This must be called before any other usb function
+ * may be used.
+ **/
+void usb_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (USB_BAUD == 115200)
+    UBRR0H = 0x00;
+    UBRR0L = 8;
+    UCSR0A |= _BV(U2X0);
+  #elif (USB_BAUD == 9600)
+    UBRR0H = 0x00;
+    UBRR0L = 103;
+    UCSR0A |= _BV(U2X0);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+  /*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    usb_fd = fdevopen(usb_putc, usb_getc);
+  #endif
+}
+
+/**
+ * Initializes communication over the XBee.
+ * This must be called before any other xbee function
+ * may be used.
+ **/
+void xbee_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (XBEE_BAUD == 115200)
+    UBRR1H = 0x00;
+    UBRR1L = 8;
+    UCSR1A |= _BV(U2X1);
+  #elif (XBEE_BAUD == 9600)
+    UBRR1H = 0x00;
+    UBRR1L = 103;
+    UCSR1A |= _BV(U2X1);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+	//Enable receiver and transmitter
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	// Set frame format: 8data, 1stop bit, asynchronous normal mode
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    xbee_fd = fdevopen(xbee_putc, xbee_getc);
+  #endif
+}
+
+/**
+ * Sends a character over USB.
+ *
+ * @param c the character to send
+ * @return 0 for success, nonzero for failure
+ **/
+int usb_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR0A, UDRE0);
+	
+  // Load buffer with your character
+  UDR0 = c;
+  return 0;
+}
+
+/**
+ * Sends a character to the XBee.
+ *
+ * @param c the character to send
+ * @return 0 for success, nonzero for failure
+ **/
+int xbee_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR1A, UDRE1);
+	
+  // Load buffer with your character
+  UDR1 = c;
+  return 0;
+}
+
+/**
+ * Sends a sequence of characters over USB.
+ *
+ * @param s the string to send
+ * @return 0 for success, nonzero for failure
+ **/
+int usb_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		usb_putc(*t);
+		t++;
+	}
+  return 0;
+}
+
+/**
+ * Returns the first character in the buffer received from USB.
+ * This function blocks execution until a character has been received.
+ * xbee_init must be called before this function may be used.
+ * 
+ * @return the first character in the usb buffer
+ *
+ * @see usb_init, usb_getc_nb
+ **/
+int usb_getc(void)
+{
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+	return UDR0;
+}
+
+/**
+ * Returns the first character in the buffer received from USB.
+ * This function blocks execution until a character has been
+ * received. xbee_init must be called before this function
+ * may be used.
+ * 
+ * @return the first character in the xbee buffer
+ * 
+ * @see xbee_init, xbee_getc_nb
+ **/
+int xbee_getc(void)
+{
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+	return UDR1;
+}
+
+/**
+ * Non blocking version of usb_getc. If a character is present in the buffer,
+ * it is returned, otherwise -1 is returned immediately. usb_init must be
+ * called before this function can be used.
+ *
+ * @param c the received character. This will be set if a character has
+ * been received.
+ * 
+ * @return -1 if no character is available, 0 otherwise
+ * 
+ * @see usb_init, usb_getc
+ **/
+int usb_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR0A & _BV(RXC0)) {
+    // Read the receive buffer
+    (*c) = UDR0;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+/**
+ * Non blocking version of xbee_getc. If a character is present in the buffer,
+ * it is returned, otherwise -1 is returned immediately. xbee_init
+ * must be called before this function can be used.
+ *
+ * @param c the received character. This will be set if a character has
+ * been received.
+ * 
+ * @return -1 if no character is available, 0 otherwise
+ *
+ * @see xbee_init, xbee_getc
+ **/
+int xbee_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR1A & _BV(RXC1)) {
+    // Read the receive buffer
+    (*c) = UDR1;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+
+/*
+prints an int to serial
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+uses usb_putc
+*/
+/**
+ * Prints an integer, converted to ASCII, to usb. usb_init must be called
+ * before this function can be used.
+ *
+ * @param value the integer to print
+ * 
+ * @return 0 if successful, nonzero otherwise
+ *
+ * @see usb_init, usb_putc
+ **/
+int usb_puti(int value ) {
+	unsigned char usb_data[6]={'0','0','0','0','0','0' }, position=sizeof(usb_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { usb_putc('-'); value=-value; }    
+        do { position--; *(usb_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(usb_data)-1);position++)
+          {
+            
+            usb_putc(usb_data[position]);
+          }
+
+	return 0;
+}
+
+
Index: branches/charge_board/code/projects/libdragonfly/dragonfly_lib.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/dragonfly_lib.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/dragonfly_lib.h	(revision 62)
@@ -0,0 +1,71 @@
+/**
+ * @file dragonfly_lib.h
+ * @brief Contains other include files
+ * 
+ * Include this file for all the functionality of libdragonfly.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+/**
+ * @addtogroup dragonfly
+ * @{
+ **/
+
+// Configuration definitions
+/** @brief Initialize analog **/
+#define ANALOG 0x01
+/** @brief Initialize serial communications **/
+#define SERIAL 0x02
+/** @brief Initialize USB communications **/
+#define USB    0x02
+/** @brief Initialize communications **/
+#define COMM   0x02
+/** @brief Initialize the orb **/
+#define ORB    0x04
+/** @brief Initialize the motors **/
+#define MOTORS 0x08
+/** @brief Initialize the servos **/
+#define SERVOS 0x10
+/** @brief Initialize I2C **/
+#define I2C    0x20
+/** @brief Initialize the buzzer **/
+#define BUZZER 0x40
+/** @brief Initialize the LCD screen **/
+#define LCD    0x80
+/** @brief Initialize everything **/
+#define ALL_ON 0xFF
+
+
+/** @brief Initialize the board **/
+void dragonfly_init(int config);
+/** @brief Reset the robot **/
+void reset(void);
+
+/** @} **/ //end addtogroup
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/dio.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/dio.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/dio.h	(revision 62)
@@ -0,0 +1,322 @@
+/**
+ * @file dio.h
+ * @brief Definitions for digital input / output
+ *
+ * This file contains definitions and functions for dealing
+ * with digital input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+these are ALL the pins
+don't use unless you know what you're doing
+*/
+
+/*
+DIO pins on new dragonfly boards are shown below:
+-----------------------------------------------
+| _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+-----------------------------------------------
+| _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+-----------------------------------------------
+*/
+
+/** @brief Port A **/
+#define _PORT_A 1
+/** @brief Port B **/
+#define _PORT_B 2
+/** @brief Port C **/
+#define _PORT_C 3
+/** @brief Port D **/
+#define _PORT_D 4
+/** @brief Port E **/
+#define _PORT_E 5
+/** @brief Port F **/
+#define _PORT_F 6
+/** @brief Port G **/
+#define _PORT_G 7
+
+/** @brief Pin A0 **/
+#define _PIN_A0 8
+/** @brief Pin A1 **/
+#define _PIN_A1 9
+/** @brief Pin A2 **/
+#define _PIN_A2 10
+/** @brief Pin A3 **/
+#define _PIN_A3 11
+/** @brief Pin A4 **/
+#define _PIN_A4 12
+/** @brief Pin A5 **/
+#define _PIN_A5 13
+/** @brief Pin A6 **/
+#define _PIN_A6 14 
+/** @brief Pin A7 **/
+#define _PIN_A7 15
+
+/** @brief Pin B0 **/
+#define _PIN_B0 16
+/** @brief Pin B1 **/
+#define _PIN_B1 17
+/** @brief Pin B2 **/
+#define _PIN_B2 18
+/** @brief Pin B3 **/
+#define _PIN_B3 19
+/** @brief Pin B4 **/
+#define _PIN_B4 20
+/** @brief Pin B5 **/
+#define _PIN_B5 21
+/** @brief Pin B6 **/
+#define _PIN_B6 22
+/** @brief Pin B7 **/
+#define _PIN_B7 23
+
+/** @brief Pin C0 **/
+#define _PIN_C0 24
+/** @brief Pin C1 **/
+#define _PIN_C1 25
+/** @brief Pin C2 **/
+#define _PIN_C2 26
+/** @brief Pin C3 **/
+#define _PIN_C3 27
+/** @brief Pin C4 **/
+#define _PIN_C4 28
+/** @brief Pin C5 **/
+#define _PIN_C5 29
+/** @brief Pin C6 **/
+#define _PIN_C6 30
+/** @brief Pin C7 **/
+#define _PIN_C7 31
+
+/** @brief Pin D0 **/
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+/** @brief Pin D1 **/
+#define _PIN_D1 33  // pin DIO7
+/** @brief Pin D2 **/
+#define _PIN_D2 34
+/** @brief Pin D3 **/
+#define _PIN_D3 35
+/** @brief Pin D4 **/
+#define _PIN_D4 36
+/** @brief Pin D5 **/
+#define _PIN_D5 37
+/** @brief Pin D6 **/
+#define _PIN_D6 38
+/** @brief Pin D7 **/
+#define _PIN_D7 39
+
+/** @brief Pin E0 **/
+#define _PIN_E0 40
+/** @brief Pin E1 **/
+#define _PIN_E1 41
+/** @brief Pin E2 **/
+#define _PIN_E2 42  // pin DIO0
+/** @brief Pin E3 **/
+#define _PIN_E3 43  // pin DIO1
+/** @brief Pin E4 **/
+#define _PIN_E4 44  // pin DIO2
+/** @brief Pin E5 **/
+#define _PIN_E5 45  // pin DIO3
+/** @brief Pin E6 **/
+#define _PIN_E6 46  // pin DIO4
+/** @brief Pin E7 **/
+#define _PIN_E7 47  // pin DIO5
+
+/** @brief Pin F0 **/
+#define _PIN_F0 48
+/** @brief Pin F1 **/
+#define _PIN_F1 49
+/** @brief Pin F2 **/
+#define _PIN_F2 50
+/** @brief Pin F3 **/
+#define _PIN_F3 51
+/** @brief Pin F4 **/
+#define _PIN_F4 52
+/** @brief Pin F5 **/
+#define _PIN_F5 53
+/** @brief Pin F6 **/
+#define _PIN_F6 54
+/** @brief Pin F7 **/
+#define _PIN_F7 55
+
+/** @brief Pin G0 **/
+#define _PIN_G0 56
+/** @brief Pin WR **/
+#define _PIN_WR 56
+/** @brief Pin G1 **/
+#define _PIN_G1 57
+/** @brief Pin RD **/
+#define _PIN_RD 57
+/** @brief Pin G2 **/
+#define _PIN_G2 58
+/** @brief Pin ALE **/
+#define _PIN_ALE 58
+/** @brief Pin G3 **/
+#define _PIN_G3 59
+/** @brief Pin TOSC2 **/
+#define _PIN_TOSC2 59
+/** @brief Pin G4 **/
+#define _PIN_G4 60
+/** @brief Pin TOSC1 **/
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+*/
+
+/**
+ * @addtogroup dio
+ * @{
+ **/
+/** @brief Pin A0 **/
+#define PIN_A0 8
+/** @brief Pin A1 **/
+#define PIN_A1 9
+/** @brief Pin A2 **/
+#define PIN_A2 10
+/** @brief Pin A3 **/
+#define PIN_A3 11
+/** @brief Pin A4 **/
+#define PIN_A4 12
+/** @brief Pin A5 **/
+#define PIN_A5 13
+/** @brief Pin A6 **/
+#define PIN_A6 14 
+/** @brief Pin A7 **/
+#define PIN_A7 15
+
+/** @brief Pin SS **/
+#define PIN_SS 16
+/** @brief Pin SCK **/
+#define PIN_SCK 17
+/** @brief Pin MOSI **/
+#define PIN_MOSI 18
+/** @brief Pin MISO **/
+#define PIN_MISO 19
+/** @brief LCD Command Pin **/
+#define PIN_LCD_COMMAND 20
+
+/** @brief Pin C0 **/
+#define PIN_C0 24
+/** @brief Pin C1 **/
+#define PIN_C1 25
+/** @brief Pin C2 **/
+#define PIN_C2 26
+/** @brief Pin C3 **/
+#define PIN_C3 27
+/** @brief Pin C4 **/
+#define PIN_C4 28
+/** @brief Pin C5 **/
+#define PIN_C5 29
+/** @brief Pin C6 **/
+#define PIN_C6 30
+/** @brief Pin C7 **/
+#define PIN_C7 31
+
+/** @brief Pin SCL **/
+#define PIN_SCL 32
+/** @brief Pin SDA **/
+#define PIN_SDA 33
+
+/** @brief Pin RX0 **/
+#define PIN_RX0 40
+/** @brief Pin TX0 **/
+#define PIN_TX0 41
+/** @brief LCD Reset Pin **/
+#define PIN_LCD_RESET 42
+/** @brief Pin E6 **/
+#define PIN_E6 46
+/** @brief Pin EXT_DIO1 **/
+#define PIN_EXT_DIO1 46
+/** @brief Pin E7 **/
+#define PIN_E7 47
+/** @brief Pin EXT_DIO2 **/
+#define PIN_EXT_DIO2 48
+
+/** @brief Pin AN0 **/
+#define PIN_AN0 48
+/** @brief Pin ADC0 **/
+#define PIN_ADC0 48
+/** @brief Pin AN1 **/
+#define PIN_AN1 49
+/** @brief Pin ADC1 **/
+#define PIN_ADC1 49
+/** @brief Pin AN2 **/
+#define PIN_AN2 50
+/** @brief Pin ADC2 **/
+#define PIN_ADC2 50
+/** @brief Pin AN3 **/
+#define PIN_AN3 51
+/** @brief Pin ADC3 **/
+#define PIN_ADC3 51
+/** @brief Pin AN4 **/
+#define PIN_AN4 52
+/** @brief Pin ADC4 **/
+#define PIN_ADC4 52
+/** @brief Pin AN5 **/
+#define PIN_AN5 53
+/** @brief Pin ADC5 **/
+#define PIN_ADC5 53
+/** @brief Pin AN6 **/
+#define PIN_AN6 54
+/** @brief Pin ADC6 **/
+#define PIN_ADC6 54
+/** @brief Pin AN7 **/
+#define PIN_AN7 55
+/** @brief Pin ADC7 **/
+#define PIN_ADC7 55
+
+/** @brief Wheel Pin **/
+#define PIN_WHEEL 54
+/** @brief Battery Voltage Monitor Pin **/
+#define PIN_BATT 55
+
+/** @brief button1 Pin **/
+#define PIN_BTN1 56
+/** @brief button2 Pin **/
+#define PIN_BTN2 57
+
+/** @brief LED1 Pin **/
+#define PIN_LED1 58
+
+/* Buttons */
+/** @brief Button Pin **/
+#define PIN_BTN PING
+/** @brief button2 Pin **/
+#define BTN2 PING1
+/** @brief button1 Pin **/
+#define BTN1 PING0
+
+/** @brief Read a portpin. **/
+int digital_input(int);
+/** @brief Output to a portpin. **/
+void digital_output(int bit, int val);
+/** @brief Pullup a portpin. **/
+void digital_pull_up(int);
+
+/** @brief Check if button1 is pressed. **/
+int button1_read( void );
+/** @brief Check if button1 is clicked. **/
+int button1_click( void );
+/** @brief Wait until button1 is pressed. **/
+void button1_wait( void );
+
+/** @brief Check if button2 is pressed. **/
+int button2_read( void );
+/** @brief Check if button2 is clicked. **/
+int button2_click( void );
+/** @brief Wait until button2 is pressed. **/
+void button2_wait( void );
+
+/** @} **/ // end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/buzzer.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/buzzer.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/buzzer.c	(revision 62)
@@ -0,0 +1,108 @@
+/*
+  buzzer.c - Contains the functions necessary for running the buzzer
+  
+  author: Robotics Club, Colony Project
+  
+  much taken from FWR's firefly library (author: Tom Lauwers)
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/**
+ * @defgroup buzzer Buzzer
+ * @brief Functions for controlling the buzzer.
+ * Functions for controlling the buzzer. Include
+ * buzzer.h to access these functions.
+ * @{
+ **/
+
+/**
+ * Initializes the buzzer. Must be called before any other buzzer
+ * function may be used.
+ **/
+void buzzer_init( void )
+{
+	//NOTE: This is mostly handled by buzzer_Set_val for now
+	// Set pin B7 to output - B7 is buzzer pin
+	//DDRB |= _BV(DDB7);
+	//Fast PWM Mode, Clear OCR0 on compare match and set at bottom, clock/64
+	//TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+}
+
+/**
+ * Sets the value of the buzzer's pitch.
+ * Higher values are lower frequencies.
+ *
+ * @param buzz_value the value to set the buzzer's frequency too,
+ * in the range 0-255
+ *
+ * @see buzzer_init, buzzer_set_freq, buzzer_off
+ **/
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+	DDRB |= _BV(DDB7);
+	OCR2 = buzz_value;
+}
+
+/**
+ * Sets the buzzer frequency. Usage of constants such as C4
+ * is highly recommended as input to this function.
+ * buzzer_init must be called before this function may
+ * be used.
+ *
+ * @param buzz_freq the frequency to set the buzzer to
+ *
+ * @see buzzer_init, buzzer_set_val, buzzer_off
+ **/
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+/**
+ * Plays the specified frequency for the specified
+ * amount of time. This function blocks execution
+ * until the time is completed. buzzer_init must be
+ * called before this function can be used.
+ *
+ * @param ms the time in milliseconds to play the frequency
+ * @param buzz_freq the frequency to play
+ *
+ * @see buzzer_init, buzzer_set_freq
+ **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+/**
+ * Turns off the buzzer by disabling the timer0 clock.
+ *
+ * @see buzzer_init
+ **/
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;//0b11111000;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0xBF;//0b10111111;
+}
+
+/** @} **/ // end buzzer group
+
Index: branches/charge_board/code/projects/libdragonfly/bom.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/bom.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/bom.h	(revision 62)
@@ -0,0 +1,30 @@
+/**
+ * @file bom.h
+ * @brief Definitions for using the BOM
+ * 
+ * This file contains definitions for using the Bearing and 
+ * Orientation Module (BOM).
+ *
+ * @author Colony Project, CMU Robotics Club
+ *
+ **/
+
+#ifndef _BOM_H
+#define _BOM_H
+
+/**
+ * @addtogroup bom
+ * @{
+ **/
+
+/** @brief Returns the location of the maximum BOM reading. **/
+int get_max_bom( void );
+/** @brief Turns the BOM on. **/
+void bom_on(void);
+/** @brief Turns the BOM off. **/
+void bom_off(void);
+
+/** @} **/
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/rangefinder.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/rangefinder.c	(revision 62)
@@ -0,0 +1,123 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "dragonfly_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+// constants
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+int linearize_distance(int value);
+
+/**
+ * @defgroup rangefinder Rangefinder
+ * @brief Functions for using the IR rangefinders
+ * 
+ * Functions for using the IR rangefinders.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the rangefinders. This must be called before
+ * range_read_distance.
+ *
+ * @see range_read_distance
+ **/
+void range_init(void){
+  digital_output(_PIN_B4,0);
+}
+
+/**
+ * Reads the distance measured by one of the rangefinders.
+ * This distance is in arbitrary units.
+ *
+ * @param range_id the rangefinder to use. This should be one
+ * of the constants IR1 - IR5.
+ *
+ * @return the distance measured by the rangefinder
+ *
+ * @see range_init
+ **/
+int range_read_distance (int range_id) {  
+  return linearize_distance(analog8(range_id));
+}
+
+/** @} **/ //end defgroup
+
+int linearize_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+
+
Index: branches/charge_board/code/projects/libdragonfly/serial.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/serial.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/serial.h	(revision 62)
@@ -0,0 +1,104 @@
+/**
+ * @file serial.h
+ * @brief Contains declarations for serial input and output
+ *
+ * Contains definitions for serial input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ *
+ **/
+
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+    usb_*() -> UART0
+    xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+    #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+/**
+ * @defgroup usb USB Input / Output
+ * @brief Functions for USB input / output
+ *
+ * Low level functions for USB input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+/** @brief the USB baud rate **/
+#define USB_BAUD 115200
+#endif
+
+/** @brief Initialize the USB **/
+void usb_init(void);
+/** @brief Print a character to USB **/
+int usb_putc(char c);
+/** @brief Read a character from USB **/
+int usb_getc(void);
+/** @brief Read a character from USB without blocking **/
+int usb_getc_nb(char *c);
+/** @brief Print a string to USB **/
+int usb_puts(char *s);
+/** @brief Print an integer to USB **/
+int usb_puti(int value);
+
+/** @} **/ //end addtogroup
+
+/**
+ * @defgroup xbee XBee Input / Output
+ * @brief Functions for XBee input / output
+ *
+ * Low level functions for XBee input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+/** @brief the XBee baud rate **/
+#define XBEE_BAUD 9600
+#endif
+
+/** @brief Initialize the XBee **/
+void xbee_init(void);
+/** @brief Print a character to the XBee **/
+int xbee_putc(char c);
+/** @brief Read a character from the XBee **/
+int xbee_getc(void);
+/** @brief Read a character from the XBee without blocking **/
+int xbee_getc_nb(char *c);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/buzzer.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/buzzer.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/buzzer.h	(revision 62)
@@ -0,0 +1,62 @@
+/**
+ * @file buzzer.h
+ * @brief Contains definitions for using the buzzer.
+ *
+ * Contains definitions for using the buzzer built into
+ * the colony robots.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+/**
+ * @addtogroup buzzer
+ * @{
+ **/
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+/** @brief Middle C **/
+#define	C4	260 //Middle C
+/** @brief C# **/
+#define	C4s	277 //C sharp
+/** @brief D **/
+#define	D4	294
+/** @brief D# **/
+#define	D4s	311
+/** @brief E **/
+#define	E4	330
+/** @brief F **/
+#define	F4	349
+/** @brief F# **/
+#define	F4s	370
+/** @brief G **/
+#define	G4	392
+/** @brief G# **/
+#define	G4s	415
+/** @brief A **/
+#define	A4	440
+/** @brief A# **/
+#define	A4s	466
+/** @brief B **/
+#define	B4	494
+/** @brief C **/
+#define	C5	523
+
+/** @brief Initialize the buzzer. **/
+void buzzer_init(void);
+/** @brief Set the value the buzzer plays. **/
+void buzzer_set_val(unsigned int buzz_value);
+/** @brief Set the frequency the buzzer plays. **/
+void buzzer_set_freq(unsigned int buzz_freq);
+/** @brief Play a frequency for a specified time. **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+/** @brief Turn the buzzer off. **/
+void buzzer_off(void); 
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/rangefinder.h
===================================================================
--- branches/charge_board/code/projects/libdragonfly/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/rangefinder.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @file rangefinder.h
+ * @brief Contains rangefinder declarations and functions
+ * 
+ * Contains functions and definitions for the use of
+ * IR rangefinders.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+/**
+ * @addtogroup rangefinder
+ * @{
+ **/
+
+/** @brief IR Rangefinder 1 **/
+#define IR1 6
+/** @brief IR Rangefinder 2 **/
+#define IR2 5
+/** @brief IR Rangefinder 3 **/
+#define IR3 4
+/** @brief IR Rangefinder 4 **/
+#define IR4 3
+/** @brief IR Rangefinder 5 **/
+#define IR5 2
+
+/** @brief Initialize the rangefinders **/
+void range_init(void);
+/** @brief Read the distance from a rangefinder **/
+int range_read_distance(int range_id);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/projects/libdragonfly/lights.c
===================================================================
--- branches/charge_board/code/projects/libdragonfly/lights.c	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/lights.c	(revision 62)
@@ -0,0 +1,383 @@
+/*
+lights.c
+Controls orb1 and orb2. Also contains the framework for a software PWM that may be used for servos in the future.
+
+author: CMU Robotics Club, Colony Project
+
+Change Log:
+2.4.07 - Aaron
+	Revamped orb code so it works.  Need to check interaction with rtc, and tweak some colors.
+
+2.1.07 - James
+	Modified sort_buffer() to prune for repeats.  PWM now uses orb_buf_size for the number of orb values in orb_time_arr[].
+		Changed sorting algorithm used in sort_buffer() to selection sort (faster). And it works now.
+
+1.25.07 - KWoo
+	Deleted old FF+ code to make it cleaner. Commented code. This all works. Note however that if you ever plan to use the
+		software PWM (which is this) you will need to change the implementation of orb_enable() and orb_disable() to not
+		shutdown the PWM.
+
+*/
+
+#include "lights.h"
+#include "dragonfly_lib.h"
+#include <avr/interrupt.h>
+
+
+#define ORB_RESET 1025
+
+#define ORBPORT PORTC
+
+#define ORBDDR DDRC
+
+#define ORBMASK 0x77
+
+
+/***** Port and Pin Definitions ****/
+
+//Orb Ports and Registers
+#define ORB_PORT        PORTC
+#define ORB_DDR         DDRC
+
+//Orb Pins
+#define ORB1_RED        0x00
+#define ORB1_GREEN      0x01
+#define ORB1_BLUE       0x02
+#define ORB2_RED        0x04
+#define ORB2_GREEN      0x05
+#define ORB2_BLUE       0x06
+
+
+#define ORB_COUNT 8	//please dont change this, or bad things might happen
+
+// an orb node
+struct ORB_NODE {
+   uint8_t num;
+   uint16_t angle;
+};
+
+//the change in an orb
+struct ORB_CHANGE {
+   uint16_t port_val;
+   uint16_t split_time_period;
+};
+
+// the status of an orb
+struct ORB_STATUS_STRUCT {
+   struct ORB_NODE orbs[ORB_COUNT];
+   uint16_t orb_angles[ORB_COUNT];
+   struct ORB_CHANGE changes[ORB_COUNT+1];
+   uint8_t change_count;
+   uint8_t new_angles;
+   uint8_t current_orb;
+
+} ORB_STATUS;
+
+void orb_sort(void);
+void orb_setup_pulse(void);
+
+SIGNAL (SIG_OUTPUT_COMPARE3C){
+
+		//pull the correct ones down
+      ORBPORT &= (~ORBMASK)|(ORB_STATUS.changes[ORB_STATUS.current_orb].port_val);
+
+      ++ORB_STATUS.current_orb; //now look at next orb transition
+
+      if (ORB_STATUS.current_orb < ORB_STATUS.change_count) { //if it isnt the end...
+	  
+			//setup timer for next pull down
+         OCR3C = TCNT3+ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period;
+		 
+     }
+      else { //we are done with these pulses
+		orb_setup_pulse();
+      }
+
+}
+
+
+//sets a channel to a value
+void orb_set_angle(int orb, int angle) {
+	uint8_t mysreg;
+	
+	orb=orb&0x07; //only have 8
+	angle=angle&0xff; //only accept 0-255
+	angle=255-angle; //inverse intensity
+	angle=angle<<2; //scale up so that we dont run it too often
+	angle+=3; //0 values dont really work
+   if (ORB_STATUS.orb_angles[orb] != angle) { //if the angle has changed
+	  mysreg=SREG; 
+	  cli(); //disable interrupts
+      ORB_STATUS.orb_angles[orb] = angle; //update angle
+      ORB_STATUS.new_angles = 1;
+	  SREG=mysreg; //put interrupt status back
+   }
+}
+
+
+void orb_sort(void) {
+   int done = 0, i;
+   
+   while (! done) {
+      done = 1;
+
+      for (i = 0; i < ORB_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+         if (ORB_STATUS.orbs[i].angle > ORB_STATUS.orbs[i+1].angle) {
+            ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+            ORB_STATUS.orbs[i+1].angle ^= ORB_STATUS.orbs[i].angle;
+            ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+
+            ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+            ORB_STATUS.orbs[i+1].num ^= ORB_STATUS.orbs[i].num;
+            ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+
+            done = 0;
+         }
+      }
+   }
+}
+
+//calculate the split times
+void orb_setup_pulse(void) {
+   int i;
+   uint16_t my_port;
+   uint16_t sum = 0;
+   uint16_t split_time;
+
+   my_port = 0xff; //all on
+
+   if (ORB_STATUS.new_angles) {
+
+      ORB_STATUS.change_count = 0;
+	  for (i = 0; i < ORB_COUNT; ++i) { //get the new values
+         ORB_STATUS.orbs[i].angle = ORB_STATUS.orb_angles[ORB_STATUS.orbs[i].num];
+      }
+
+      orb_sort(); //sort them
+      ORB_STATUS.new_angles = 0;
+
+      for (i = 0; i < ORB_COUNT; ++i) { //calculate split times
+         split_time = ORB_STATUS.orbs[i].angle - sum;
+         my_port &= ~_BV(ORB_STATUS.orbs[i].num);
+		 
+         for (; i < ORB_COUNT - 1 && ORB_STATUS.orbs[i].angle == ORB_STATUS.orbs[i+1].angle; ++i) {
+            my_port &= ~_BV(ORB_STATUS.orbs[i+1].num); //look for doups
+         }
+		 
+         ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port; //which pins are low
+         ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = split_time;
+         
+		 ++ORB_STATUS.change_count;
+		 
+         sum += split_time;
+      }
+
+      ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port;
+      ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = ORB_RESET - sum; //get a constant period
+
+      ++ORB_STATUS.change_count;
+
+   }
+
+
+
+   ORB_STATUS.current_orb = 0;
+
+    ORBPORT |= ORBMASK; //start with all high
+	OCR3C = TCNT3 + ORB_STATUS.changes[0].split_time_period; //wait for first split
+
+}
+
+/**
+ * @defgroup orbs Orbs
+ * @brief Functions for controlling the color of the orbs.
+ * 
+ * Functions for controlling the color and lighting of the orbs.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the PWM for Orb control. This must be called before 
+ * the orbs are used for them to function.
+ **/
+void orb_init() 
+{	
+   int i;
+   uint8_t mysreg;
+   
+   ORBDDR |= ORBMASK;	//all outputs
+   
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+   for (i = 0; i < ORB_COUNT; ++i) {
+      ORB_STATUS.orbs[i].num = i;
+      ORB_STATUS.orbs[i].angle = 1023;	//127 is a pretty stupid start angle, but oh well
+      ORB_STATUS.orb_angles[i] = 1023;
+   }
+
+   ORB_STATUS.new_angles = 1;
+   ORB_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C = 0;
+	ETIMSK |= _BV(OCIE3C); //turn on oc3c interrupt
+	OCR3C = TCNT3+ORB_RESET;
+
+	SREG=mysreg;
+}
+
+/**
+ * Set both orbs to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb1_set(red_led,green_led,blue_led);
+	orb2_set(red_led,green_led,blue_led);
+
+}
+
+/**
+ * Set orb1 to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb_set_angle(0,red_led);
+	orb_set_angle(1,green_led);
+	orb_set_angle(2,blue_led);
+}
+
+/**
+ * Set orb2 to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {	
+	orb_set_angle(4,red_led);
+	orb_set_angle(5,green_led);
+	orb_set_angle(6,blue_led);
+}
+
+/**
+ * Set both orbs to the specified color. This function
+ * is intended to be used with the predefined
+ * colors. orb_init must be called before this
+ * function may be used.
+ *
+ * @param col the color to set the orbs to
+ *
+ * @see orb_init
+ **/
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+/**
+ * Set orb1 to the specified color. This function
+ * is intended to be used with the predefined
+ * colors. orb_init must be called before this
+ * function may be used.
+ *
+ * @param col the color to set the orbs to
+ *
+ * @see orb_init
+ **/
+void orb1_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb1_set(red, green, blue);
+}
+
+/**
+ * Set orb2 to the specified color. This function
+ * is intended to be used with the predefined
+ * colors. orb_init must be called before this
+ * function may be used.
+ *
+ * @param col the color to set the orbs to
+ *
+ * @see orb_init
+ **/
+void orb2_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb2_set(red, green, blue);
+}
+
+//DOES THIS WORK?
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+/* If we use the PWM for anything else besides the ORB, this implementation needs to be done better */
+/**
+ * Disables the orb color fading capabilities
+ * by disabling the timer1 interrupt.
+ *
+ * @see orb_init
+ **/
+void orb_disable()
+{
+	TCCR3B &= 0;  	//Turn off everything
+	ORB_PORT |= _BV(ORB1_RED);
+	ORB_PORT |= _BV(ORB1_GREEN);
+	ORB_PORT |= _BV(ORB1_BLUE);
+	ORB_PORT |= _BV(ORB2_RED);
+	ORB_PORT |= _BV(ORB2_GREEN);
+	ORB_PORT |= _BV(ORB2_BLUE);
+}
+
+//DOES THIS WORK?
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+/**
+ * Enables the orb's color fading capabilities.
+ *
+ * @see orb_init
+ **/
+void orb_enable()
+{
+//	TCCR0 |= _BV(COM01) | _BV(COM00)  | _BV(WGM00) | _BV(CS01);	//Toggle OC Pin on match, FAST PWM Mode, clock/8
+	TCCR3B =_BV(CS31);
+}
+
+/** @} **/ //end group
+
Index: branches/charge_board/code/projects/libdragonfly/Makefile
===================================================================
--- branches/charge_board/code/projects/libdragonfly/Makefile	(nonexistent)
+++ branches/charge_board/code/projects/libdragonfly/Makefile	(revision 62)
@@ -0,0 +1,211 @@
+############################
+### Update this Section ####
+############################
+
+COLONYROOT = ../../..
+
+# Target file name (without extension).
+TARGET = libdragonfly
+
+############################
+
+CDEFS = 
+
+# MCU name
+MCU = atmega128
+
+
+# Processor frequency.
+#     This will define a symbol, F_CPU, in all source code files equal to the 
+#     processor frequency. You can then use this symbol in your source code to 
+#     calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+#     automatically to create a 32-bit value in your source code.
+F_CPU = 16000000
+
+
+# Output format. (can be srec, ihex, binary)
+FORMAT = ihex
+
+
+# List C source files here. (C dependencies are automatically generated.)
+SRC = $(wildcard *.c)
+
+# List Assembler source files here.
+#     Make them always end in a capital .S.  Files ending in a lowercase .s
+#     will not be considered source files but generated files (assembler
+#     output from the compiler), and will be deleted upon "make clean"!
+#     Even though the DOS/Win* filesystem matches both .s and .S the same,
+#     it will preserve the spelling of the filenames, and gcc itself does
+#     care about how the name is spelled on its command-line.
+ASRC = 
+
+# Optimization level, can be [0, 1, 2, 3, s]. 
+#     0 = turn off optimization. s = optimize for size.
+#     (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
+OPT = s
+
+# Debugging format.
+#     Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
+#     AVR Studio 4.10 requires dwarf-2.
+#     AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
+DEBUG = 
+# dwarf-2
+
+# List any extra directories to look for include files here.
+#     Each directory must be seperated by a space.
+#     Use forward slashes for directory separators.
+#     For a directory that has spaces, enclose it in quotes.
+EXTRAINCDIRS = 
+
+# Compiler flag to set the C Standard level.
+#     c89   = "ANSI" C
+#     gnu89 = c89 plus GCC extensions
+#     c99   = ISO C99 standard (not yet fully implemented)
+#     gnu99 = c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+
+# Place -D or -U options here
+CDEFS += -DF_CPU=$(F_CPU)UL 
+
+# Place -I options here
+CINCS =
+
+
+#---------------- Compiler Options ----------------
+#  -g*:          generate debugging information
+#  -O*:          optimization level
+#  -f...:        tuning, see GCC manual and avr-libc documentation
+#  -Wall...:     warning level
+#  -Wa,...:      tell GCC to pass this to the assembler.
+#    -adhlns...: create assembler listing
+CFLAGS = -g$(DEBUG)
+CFLAGS += $(CDEFS) $(CINCS)
+CFLAGS += -O$(OPT)
+CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
+CFLAGS += $(CSTANDARD)
+
+
+#---------------- Library Options ----------------
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+# If this is left blank, then it will use the Standard printf version.
+PRINTF_LIB = 
+#PRINTF_LIB = $(PRINTF_LIB_MIN)
+#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+# If this is left blank, then it will use the Standard scanf version.
+SCANF_LIB = 
+#SCANF_LIB = $(SCANF_LIB_MIN)
+#SCANF_LIB = $(SCANF_LIB_FLOAT)
+
+MATH_LIB = -lm
+
+#============================================================================
+
+
+# Define programs and commands.
+SHELL = sh
+CC = avr-gcc
+AR = avr-ar
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+REMOVEDIR = rm -rf
+COPY = cp
+DOXYGEN = doxygen
+WINSHELL = cmd
+
+
+# Define Messages
+# English
+MSG_ERRORS_NONE = Errors: none
+MSG_BEGIN = -------- begin --------
+MSG_END = --------  end  --------
+MSG_COMPILING = Compiling:
+MSG_CLEANING = Cleaning project:
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) 
+
+# Compiler flags to generate dependency files.
+GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
+ALL_ASFLAGS = rcs
+
+# Default target.
+all: begin build end
+
+dist: all publish
+
+publish:
+	$(COPY) $(TARGET).a $(COLONYROOT)/code/lib/bin
+	$(COPY) *.c $(COLONYROOT)/code/lib/src/$(TARGET)
+	$(COPY) *.h $(COLONYROOT)/code/lib/include/$(TARGET)
+
+docs:
+	$(DOXYGEN)
+	$(COPY) docs/html/* $(COLONYROOT)/docs/$(TARGET)
+
+
+build: $(OBJ)
+	$(AR) $(ALL_ASFLAGS) $(TARGET).a $(OBJ)
+
+# Eye candy.
+# AVR Studio 3.x does not check make's exit code but relies on
+# the following magic strings to be generated by the compile job.
+begin:
+	@echo
+	@echo $(MSG_BEGIN)
+
+end:
+	@echo $(MSG_END)
+	@echo
+
+# Compile: create object files from C source files.
+%.o : %.c
+	@echo
+	@echo $(MSG_COMPILING) $<
+	$(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Target: clean project.
+clean: begin clean_list end
+
+clean_list :
+	@echo
+	@echo $(MSG_CLEANING)
+	$(REMOVE) $(TARGET).a
+	$(REMOVE) $(OBJ)
+	$(REMOVE) $(LST)
+	$(REMOVE) $(SRC:.c=.s)
+	$(REMOVE) $(SRC:.c=.d)
+	$(REMOVEDIR) .dep
+
+
+
+# Include the dependency files.
+-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+
Index: branches/charge_board/code/lib/include/libwireless/wireless.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/wireless.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/wireless.h	(revision 62)
@@ -0,0 +1,128 @@
+/**
+ * @file wireless.h
+ * @brief Contains definitions for the wireless library.
+ *
+ * Contains functions for the wireless library.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+ 
+//Note: If this is raised above 16, we will need to do
+//something about frame numbers for TX Status packets.
+/**
+ * The maximum number of packet groups.
+ **/
+#define WL_MAX_PACKET_GROUPS 16
+
+/**
+ * @defgroup wireless Wireless
+ * @brief Wireless definitions.
+ *
+ * Contains functions and definitions for dealing with wireless functionality.<br><br>
+ *
+ * The wireless library provides a modular method for dealing with 
+ * wireless packets, by allowing packet groups to be registered.
+ * A packet group is a collection of packets which share a packet
+ * group code. Each packet in the group also has a type. A packet 
+ * group code and type are sent with each packet. When a packet
+ * with a group code registered in the wireless library is 
+ * received, the corresponding event handler is called. The
+ * event handler uses the packet type and other information
+ * stored in the packet to respond.<br><br>
+ *
+ * This architecture allows different wireless functionality to be
+ * defined and handled separately, making it simpler and more
+ * efficient to take advantage of the XBee's wireless functionality.
+ *
+ * @{
+ **/
+
+/**
+ * @struct PacketGroupHandler
+ * A PacketGroupHandler represents a packet group, and is used to 
+ * register a packet group with the wireless library. It contains
+ * handlers for various events which can occur related to a packet
+ * group.
+ **/
+typedef struct
+{
+	/**
+	 * The group code for this packet group. This number
+	 * must be unique. The maximum number of packet groups
+	 * is defined by WL_MAX_PACKET_GROUPS.
+	 **/
+	unsigned int groupCode;
+
+	/**
+	 * Called every half second (not in interrupt,
+	 * but in wl_do).
+	 **/
+	void (*timeout_handler) (void);
+	
+	/**
+	 * Called when a transmit status packet is received
+	 * from the XBee where the first four bits of the frame
+	 * are  the group code.
+	 *
+	 * @param frame the last four bits of the frame
+	 * @param received is true if we received an ack, 0 if
+	 * we did not.
+	 **/
+	void (*handle_response) (int frame, int received);
+	
+	/**
+	 * Called when we receive a packet from this group.
+	 *
+	 * @param type the packet type
+	 * @param source the 16-bit address of the XBee this
+	 * packet was sent from
+	 * @param packet the packet received
+	 * @param length the length of the packet
+	 **/
+	void (*handle_receive) (char type, int source, unsigned char* packet,
+							int length);
+	
+	/**
+	 * Called for any cleanup when the network is turned off.
+	 **/
+	void (*unregister) (void);
+	
+} PacketGroupHandler;
+
+/**@brief Initialize the wireless library **/
+void wl_init(void);
+/**@brief Uninitialize the wireless library **/
+void wl_terminate(void);
+/**@brief Perform wireless library functionality **/
+void wl_do(void);
+/**@brief Register a packet group with the wireless library **/
+void wl_register_packet_group(PacketGroupHandler* h);
+/**@brief Unregister a packet group with the wireless library **/
+void wl_unregister_packet_group(PacketGroupHandler* h);
+
+/**@brief Send a packet to a specific robot in any PAN **/
+void wl_send_robot_to_robot_global_packet(char group, char type,
+		char* data, int len, int dest, char frame);
+/**@brief Send a packet to a specific robot in our PAN **/
+void wl_send_robot_to_robot_packet(char group, char type,
+		char* data, int len, int dest, char frame);
+/**@brief Send a packet to all robots **/
+void wl_send_global_packet(char group, char type,
+		char* data, int len, char frame);
+/**@brief Send a packet to all robots in our PAN **/
+void wl_send_pan_packet(char group, char type,
+		char* data, int len, char frame);
+
+/**@brief Set the PAN we are using **/
+void wl_set_pan(int pan);
+/**@brief Get the PAN we are using **/
+int wl_get_pan(void);
+/**@brief Set the channel we are using **/
+void wl_set_channel(int channel);
+/**@brief Get the channel we are using **/
+int wl_get_channel(void);
+/**@brief Get the 16-bit address of the XBee module **/
+unsigned int wl_get_xbee_id(void);
+
+/** @} **/ // end defgroup
+
Index: branches/charge_board/code/lib/include/libwireless/wl_token_ring.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/wl_token_ring.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/wl_token_ring.h	(revision 62)
@@ -0,0 +1,58 @@
+/**
+ * @file wl_token_ring.h
+ * @brief Declarations for the token ring packet group
+ * 
+ * Contains declarations for the token ring packet group.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup tokenring Token Ring
+ * @brief Wireless library token ring implementation
+ *
+ * This packet group is used to form a token ring, which
+ * keeps track of the relative directions of the robots
+ * from one another.
+ *
+ * @{
+ **/
+
+/**@brief Register the token ring group with the wireless library.**/
+void wl_token_ring_register(void);
+/**@brief Unregister the token ring group with the wirelss library.**/
+void wl_token_ring_unregister(void);
+/**@brief Set the functions called to turn the bom on and off.**/
+void wl_token_ring_set_bom_functions(void (*on_function) (void), 
+		void (*off_function) (void), int (*max_bom_function) (void));
+
+/**@brief Join the token ring **/
+void wl_token_ring_join(void);
+/**@brief Leave the token ring **/
+void wl_token_ring_leave(void);
+/**@brief Request a BOM flash from the specified robot **/
+void wl_token_request(int robot);
+
+/**@brief Return the number of robots in the token ring **/
+int wl_token_get_robots_in_ring(void);
+/**@brief Return whether a given robot is in the token ring **/
+int wl_token_is_robot_in_ring(int robot);
+
+/**@brief Begin iterating through robots in the token ring **/
+void wl_token_iterator_begin(void);
+/**@brief Returns whether there are more robots to iterate through **/
+int wl_token_iterator_has_next(void);
+/**@brief Returns the ID of the next robot in the token ring **/
+int wl_token_iterator_next(void);
+
+/**@brief Return the latest BOM reading between two robots **/
+int wl_token_get_sensor_reading(int source, int dest);
+/**@brief Return the latest BOM reading between us and another robot **/
+int wl_token_get_my_sensor_reading(int dest);
+/**@brief Return the number of robots in the sensor matrix.*/
+int wl_token_get_num_robots(void);
+/**@brief Return the number of non-null elements in the sensor matrix*/
+int wl_token_get_matrix_size(void);
+
+/** @} **/ //end token ring group
+
Index: branches/charge_board/code/lib/include/libwireless/xbee.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/xbee.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/xbee.h	(revision 62)
@@ -0,0 +1,61 @@
+/**
+ * @file xbee.h
+ * @brief Contains definitions for using the XBee
+ *
+ * Contains definitions for interfacing with the 
+ * XBee module, from either a robot or a computer.
+ * To use a robot, define ROBOT in wl_defs.h, and
+ * to use a computer, don't define ROBOT.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup xbee XBee
+ * @brief Interface with the XBee module
+ *
+ * Interface with the XBee module.
+ *
+ * @{
+ **/
+
+/*Definitions*/
+/**@brief Unset PAN, uses XBee default **/
+#define XBEE_PAN_DEFAULT 0xFFFF
+/**@brief Unset channel, uses XBee default **/
+#define XBEE_CHANNEL_DEFAULT 0
+/**@brief Broadcast to all robots in the PAN **/
+#define XBEE_BROADCAST 0xFFFF
+/**@brief No special options **/
+#define XBEE_OPTIONS_NONE 0x00
+/**@brief Do not receive a TX_STATUS message from this packet **/
+#define XBEE_OPTIONS_DISABLE_RESPONSE 0x01
+/**@brief Send the packet to all PANS **/
+#define XBEE_OPTIONS_BROADCAST_ALL_PANS 0x04
+/**@brief A transmit status packet **/
+#define XBEE_TX_STATUS 0x89
+/**@brief A packet received from another XBee **/
+#define XBEE_RX 0x81
+
+/**@brief Initialize the XBee library **/
+void xbee_lib_init(void);
+/**@brief Uninitialize the XBee library **/
+void xbee_terminate(void);
+/**@brief Get a packet from the XBee **/
+int xbee_get_packet(unsigned char* packet);
+/**@brief Send a packet to the XBee **/
+void xbee_send_packet(char* packet, int len, int dest,
+	char options, char frame);
+/**@brief Set the PAN ID for the XBee **/
+void xbee_set_pan_id(int id);
+/**@brief Get the XBee's PAN ID **/
+unsigned int xbee_get_pan_id(void);
+/**@brief Set the channel the XBee is currently using **/
+void xbee_set_channel(int channel);
+/**@brief Get the channel the XBee is currently using **/
+int xbee_get_channel(void);
+/**@brief Get the XBee's 16-bit address **/
+unsigned int xbee_get_address(void);
+
+/**@}**/ //end defgroup
+
Index: branches/charge_board/code/lib/include/libwireless/sensor_matrix.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/sensor_matrix.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/sensor_matrix.h	(revision 62)
@@ -0,0 +1,69 @@
+/**
+ * @file sensor_matrix.h
+ * @brief Definitions for sensor matrices
+ *
+ * Contains functions and declarations for using sensor matrices.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup sensormatrix Sensor Matrix
+ * @brief the robot sensor matrix
+ *
+ * These functions and structures are used for localization
+ * to determine the relative directions of robots.
+ *
+ * @{
+ **/
+
+/**
+ * @struct SensorMatrix
+ *
+ * A sensor matrix.
+ **/
+typedef struct
+{
+	/**
+	 * The size of the sensor matrix.
+	**/
+	unsigned int size;
+	/**
+	 * The matrix. Each row represents the readings of one
+	 * robot.
+	 **/
+	int** matrix;
+	/**
+	 * The element representing a robot is true if that robot
+	 * is in the token ring and false otherwise.
+	 **/
+	int* joined;
+	/**
+	 * The number of robots in the token ring.
+	 **/
+	int numJoined;
+} SensorMatrix;
+
+/**@brief Create a sensor matrix **/
+SensorMatrix* sensor_matrix_create(void);
+/**@brief Destroy a sensor matrix **/
+void sensor_matrix_destroy(SensorMatrix* m);
+/**@brief Add a robot to a sensor matrix **/
+void sensor_matrix_add_robot(SensorMatrix* m, unsigned int id);
+/**@brief Remove a robot from a sensor matrix **/
+void sensor_matrix_remove_robot(SensorMatrix* m, unsigned int id);
+/**@brief Set a reading in a sensor matrix **/
+void sensor_matrix_set_reading(SensorMatrix* m, int observer, int robot, int reading);
+/**@brief Get a reading in a sensor matrix **/
+int sensor_matrix_get_reading(SensorMatrix* m, int observer, int robot);
+/**@brief Set whether the robot is in the token ring **/
+void sensor_matrix_set_in_ring(SensorMatrix* m, int robot, int in);
+/**@brief Get whether the robot is in the sensor ring **/
+int sensor_matrix_get_in_ring(SensorMatrix* m, int robot);
+/**@brief Get the size of the sensor matrix **/
+int sensor_matrix_get_size(SensorMatrix* m);
+/**@brief Get the number of robots which have joined the token ring **/
+int sensor_matrix_get_joined(SensorMatrix* m);
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/lib/include/libwireless/wl_defs.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/wl_defs.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/wl_defs.h	(revision 62)
@@ -0,0 +1,65 @@
+//comment out this line if using a computer hooked up to an xbee
+//#define ROBOT
+
+//uncomment this line for debug information
+#define WL_DEBUG
+
+// Packet Groups and Types
+
+// Error group
+#define WL_ERROR_GROUP 1
+
+#define WL_ERROR_STRING_TYPE 1
+
+// Token Ring group
+#define WL_TOKEN_RING_GROUP 2
+
+#define WL_TOKEN_PASS 1
+#define WL_TOKEN_BOM_ON 2
+#define WL_TOKEN_INTERRUPT_REQUEST 3
+#define WL_TOKEN_INTERRUPT_PASS 4
+#define WL_TOKEN_JOIN 5
+#define WL_TOKEN_JOIN_ACCEPT 6
+
+// timing constants
+#define BOM_DELAY 100
+#define DEATH_DELAY 3
+#define JOIN_DELAY 8
+
+// Recharging group
+#define WL_RECHARGE_GROUP 3
+
+#define WL_RECHARGE_POLL_STATIONS 1
+#define WL_RECHARGE_STATION_AVAILABLE 2
+#define WL_RECHARGE_REQUEST 3
+#define WL_RECHARGE_REQUEST_ACCEPT 4
+#define WL_RECHARGE_VERIFY 5
+#define WL_RECHARGE_CANCEL 6
+#define WL_RECHARGE_SEEKING 7
+#define WL_RECHARGE_DOCKED 8
+
+#ifdef WL_DEBUG
+
+#ifdef ROBOT
+#include <serial.h>
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT( s ) usb_puts( s )
+#else
+#define WL_DEBUG_PRINT( s ) printf( s )
+#endif
+
+#ifdef ROBOT
+#define WL_DEBUG_PRINT_INT( i ) usb_puti(i)
+#else
+#define WL_DEBUG_PRINT_INT( i ) printf("%i", i)
+#endif
+
+#else
+
+#define WL_DEBUG_PRINT( s )
+#define WL_DEBUG_PRINT_INT( i )
+
+#endif
+
Index: branches/charge_board/code/lib/include/libwireless/queue.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/queue.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/queue.h	(revision 62)
@@ -0,0 +1,57 @@
+/**
+ * @file queue.h
+ * @brief A queue implementation
+ * 
+ * Implements a queue, a first in, first out data structure.
+ *
+ * @author Brian Coltin, Colony Project
+ **/
+
+struct node_def;
+
+/**
+ * @defgroup queue Queue
+ * @brief A queue implementation
+ * 
+ * A queue implementation.
+ *
+ * @{
+ **/
+
+/**
+ * @struct Queue
+ * Represents a queue, a first in, first out data structure.
+ **/
+typedef struct
+{
+	/**
+	 * The head of the queue, the next item to be removed.
+	 **/
+	struct node_def* head;
+	/**
+	 * The tail of the queue, the last item added.
+	 **/
+	struct node_def* tail;
+	/**
+	 * The number of elements in the queue.
+	 **/
+	int size;
+} Queue;
+
+/** @brief Create a new queue **/
+Queue* queue_create(void);
+/** @brief Destroy a queue **/
+void queue_destroy(Queue* q);
+/** @brief Add an element to a queue **/
+void queue_add(Queue* q, void* item);
+/** @brief Remove an element from a queue **/
+void* queue_remove(Queue* q);
+/** @brief Remove all instances of a given element from a queue **/
+void queue_remove_all(Queue* q, void* item);
+/** @brief Get the size of a queue **/
+int queue_size(Queue* q);
+/** @brief Check if the queue is empty **/
+int queue_is_empty(Queue* q);
+
+/** @} **/
+
Index: branches/charge_board/code/lib/include/libwireless/wl_error_group.h
===================================================================
--- branches/charge_board/code/lib/include/libwireless/wl_error_group.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libwireless/wl_error_group.h	(revision 62)
@@ -0,0 +1,28 @@
+/**
+ * @file wl_error_group.h
+ * @brief A packet group for error messages.
+ *
+ * A packet group for sending and receiving error
+ * messages.
+ *
+ * @author Brian Coltin, Colony Project, CMU Robotics Club
+ **/
+
+/**
+ * @defgroup wlerror Error Packets
+ * @brief Functions for sending and receiving error packets
+ * 
+ * Functions for sending and receiving error packets.
+ * 
+ * @{
+ **/
+
+/**@brief Register this packet group with the wireless library **/
+void wl_error_register(void);
+/**@brief Unregister this packet group with the wireless library **/
+void wl_error_unregister(void);
+/**@brief Send a string in an error packet **/
+void wl_error_send_string(char* str);
+
+/** @} **/ // end defgroup
+
Index: branches/charge_board/code/lib/include/libdragonfly/battery.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/battery.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/battery.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @file battery.h
+ * @brief Definitions for checking battery voltage.
+ * 
+ * Contains definitions for checking the voltage of the 
+ * battery.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BATTERY_H_
+#define _BATTERY_H_
+
+/**
+ * @addtogroup battery
+ * @{
+ **/
+
+/** @brief Normal battery voltage. (6 V) **/
+#define BATTERY_NORMALV 154
+/** @brief Charging battery voltage. (7 V) **/
+#define BATTERY_CHARINGV 179
+/** @brief Low battery voltage. ( < 6 V) **/
+#define BATTERY_LOWV 152
+
+/** @brief Read the battery voltage. **/
+int battery8(void);
+/** @brief Read the battery voltage in deciVolts. **/
+int battery(void);
+/** @brief Check if the battery is low. **/
+char battery_low(void);
+/** @brief get an average battery voltage reading. **/
+int battery8_avg(int n_samples);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/lights.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/lights.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/lights.h	(revision 62)
@@ -0,0 +1,73 @@
+/**
+ * @file lights.h
+ * @brief Contains declarations for managing the orbs.
+ *
+ * Contains declarations for using the orbs and PWM.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Firefly Library, by Tom Lauwers and Steven Shamlian
+ **/
+
+#ifndef _LIGHTS_H_
+#define _LIGHTS_H_
+
+
+/**
+ * @addtogroup orbs
+ * @{
+ **/
+
+//ORB Colors
+/** @brief Red **/
+#define RED       0xE0
+/** @brief Orange **/
+#define ORANGE    0xE4
+/** @brief Yellow **/
+#define YELLOW    0xE8
+/** @brief Lime **/
+#define LIME      0x68
+/** @brief Green **/
+#define GREEN     0x1C
+/** @brief Cyan **/
+#define CYAN      0x1F
+/** @brief Blue **/
+#define BLUE      0x03
+/** @brief Pink **/
+#define PINK      0xA6 
+/** @brief Purple **/
+#define PURPLE    0x41
+/** @brief Magenta **/
+#define MAGENTA   0xE3
+/** @brief White **/
+#define WHITE     0xFE
+/** @brief Turn the orb off (White) **/
+#define ORB_OFF   0xFE      //ORB_OFF->WHITE
+
+/** @brief Enables the orbs **/
+void orb_init(void);
+/** @brief Set both orbs to a specified color **/
+void orb_set(unsigned char red_led, unsigned char green_led,
+	unsigned char blue_led);
+/** @brief Set orb1 to a specified color **/
+void orb1_set(unsigned char red_led, unsigned char green_led,
+	unsigned char blue_led); 
+/** @brief Set orb2 to a specified color **/
+void orb2_set(unsigned char red_led, unsigned char green_led,
+	unsigned char blue_led);
+
+/** @brief Set both orbs to a specified color **/
+void orb_set_color(int col);
+/** @brief Set orb1 to a specified color **/
+void orb1_set_color(int col);
+/** @brief Set orb2 to a specified color **/
+void orb2_set_color(int col);
+
+/** @brief Disable the orbs **/
+void orb_disable(void);
+/** @brief Enable the orbs **/
+void orb_enable(void);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/dio.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/dio.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/dio.h	(revision 62)
@@ -0,0 +1,322 @@
+/**
+ * @file dio.h
+ * @brief Definitions for digital input / output
+ *
+ * This file contains definitions and functions for dealing
+ * with digital input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _DIO_H
+#define _DIO_H
+
+/*
+these are ALL the pins
+don't use unless you know what you're doing
+*/
+
+/*
+DIO pins on new dragonfly boards are shown below:
+-----------------------------------------------
+| _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |
+-----------------------------------------------
+| _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |
+-----------------------------------------------
+*/
+
+/** @brief Port A **/
+#define _PORT_A 1
+/** @brief Port B **/
+#define _PORT_B 2
+/** @brief Port C **/
+#define _PORT_C 3
+/** @brief Port D **/
+#define _PORT_D 4
+/** @brief Port E **/
+#define _PORT_E 5
+/** @brief Port F **/
+#define _PORT_F 6
+/** @brief Port G **/
+#define _PORT_G 7
+
+/** @brief Pin A0 **/
+#define _PIN_A0 8
+/** @brief Pin A1 **/
+#define _PIN_A1 9
+/** @brief Pin A2 **/
+#define _PIN_A2 10
+/** @brief Pin A3 **/
+#define _PIN_A3 11
+/** @brief Pin A4 **/
+#define _PIN_A4 12
+/** @brief Pin A5 **/
+#define _PIN_A5 13
+/** @brief Pin A6 **/
+#define _PIN_A6 14 
+/** @brief Pin A7 **/
+#define _PIN_A7 15
+
+/** @brief Pin B0 **/
+#define _PIN_B0 16
+/** @brief Pin B1 **/
+#define _PIN_B1 17
+/** @brief Pin B2 **/
+#define _PIN_B2 18
+/** @brief Pin B3 **/
+#define _PIN_B3 19
+/** @brief Pin B4 **/
+#define _PIN_B4 20
+/** @brief Pin B5 **/
+#define _PIN_B5 21
+/** @brief Pin B6 **/
+#define _PIN_B6 22
+/** @brief Pin B7 **/
+#define _PIN_B7 23
+
+/** @brief Pin C0 **/
+#define _PIN_C0 24
+/** @brief Pin C1 **/
+#define _PIN_C1 25
+/** @brief Pin C2 **/
+#define _PIN_C2 26
+/** @brief Pin C3 **/
+#define _PIN_C3 27
+/** @brief Pin C4 **/
+#define _PIN_C4 28
+/** @brief Pin C5 **/
+#define _PIN_C5 29
+/** @brief Pin C6 **/
+#define _PIN_C6 30
+/** @brief Pin C7 **/
+#define _PIN_C7 31
+
+/** @brief Pin D0 **/
+#define _PIN_D0 32  // pin DIO6 on new dragonfly boards
+/** @brief Pin D1 **/
+#define _PIN_D1 33  // pin DIO7
+/** @brief Pin D2 **/
+#define _PIN_D2 34
+/** @brief Pin D3 **/
+#define _PIN_D3 35
+/** @brief Pin D4 **/
+#define _PIN_D4 36
+/** @brief Pin D5 **/
+#define _PIN_D5 37
+/** @brief Pin D6 **/
+#define _PIN_D6 38
+/** @brief Pin D7 **/
+#define _PIN_D7 39
+
+/** @brief Pin E0 **/
+#define _PIN_E0 40
+/** @brief Pin E1 **/
+#define _PIN_E1 41
+/** @brief Pin E2 **/
+#define _PIN_E2 42  // pin DIO0
+/** @brief Pin E3 **/
+#define _PIN_E3 43  // pin DIO1
+/** @brief Pin E4 **/
+#define _PIN_E4 44  // pin DIO2
+/** @brief Pin E5 **/
+#define _PIN_E5 45  // pin DIO3
+/** @brief Pin E6 **/
+#define _PIN_E6 46  // pin DIO4
+/** @brief Pin E7 **/
+#define _PIN_E7 47  // pin DIO5
+
+/** @brief Pin F0 **/
+#define _PIN_F0 48
+/** @brief Pin F1 **/
+#define _PIN_F1 49
+/** @brief Pin F2 **/
+#define _PIN_F2 50
+/** @brief Pin F3 **/
+#define _PIN_F3 51
+/** @brief Pin F4 **/
+#define _PIN_F4 52
+/** @brief Pin F5 **/
+#define _PIN_F5 53
+/** @brief Pin F6 **/
+#define _PIN_F6 54
+/** @brief Pin F7 **/
+#define _PIN_F7 55
+
+/** @brief Pin G0 **/
+#define _PIN_G0 56
+/** @brief Pin WR **/
+#define _PIN_WR 56
+/** @brief Pin G1 **/
+#define _PIN_G1 57
+/** @brief Pin RD **/
+#define _PIN_RD 57
+/** @brief Pin G2 **/
+#define _PIN_G2 58
+/** @brief Pin ALE **/
+#define _PIN_ALE 58
+/** @brief Pin G3 **/
+#define _PIN_G3 59
+/** @brief Pin TOSC2 **/
+#define _PIN_TOSC2 59
+/** @brief Pin G4 **/
+#define _PIN_G4 60
+/** @brief Pin TOSC1 **/
+#define _PIN_TOSC1 60
+//#define _PIN_G5 61
+//#define _PIN_G6 62
+//#define _PIN_G7 63
+
+/*
+These are the header pins (the ones you can connect things to)
+Feel free to use these
+*/
+
+/**
+ * @addtogroup dio
+ * @{
+ **/
+/** @brief Pin A0 **/
+#define PIN_A0 8
+/** @brief Pin A1 **/
+#define PIN_A1 9
+/** @brief Pin A2 **/
+#define PIN_A2 10
+/** @brief Pin A3 **/
+#define PIN_A3 11
+/** @brief Pin A4 **/
+#define PIN_A4 12
+/** @brief Pin A5 **/
+#define PIN_A5 13
+/** @brief Pin A6 **/
+#define PIN_A6 14 
+/** @brief Pin A7 **/
+#define PIN_A7 15
+
+/** @brief Pin SS **/
+#define PIN_SS 16
+/** @brief Pin SCK **/
+#define PIN_SCK 17
+/** @brief Pin MOSI **/
+#define PIN_MOSI 18
+/** @brief Pin MISO **/
+#define PIN_MISO 19
+/** @brief LCD Command Pin **/
+#define PIN_LCD_COMMAND 20
+
+/** @brief Pin C0 **/
+#define PIN_C0 24
+/** @brief Pin C1 **/
+#define PIN_C1 25
+/** @brief Pin C2 **/
+#define PIN_C2 26
+/** @brief Pin C3 **/
+#define PIN_C3 27
+/** @brief Pin C4 **/
+#define PIN_C4 28
+/** @brief Pin C5 **/
+#define PIN_C5 29
+/** @brief Pin C6 **/
+#define PIN_C6 30
+/** @brief Pin C7 **/
+#define PIN_C7 31
+
+/** @brief Pin SCL **/
+#define PIN_SCL 32
+/** @brief Pin SDA **/
+#define PIN_SDA 33
+
+/** @brief Pin RX0 **/
+#define PIN_RX0 40
+/** @brief Pin TX0 **/
+#define PIN_TX0 41
+/** @brief LCD Reset Pin **/
+#define PIN_LCD_RESET 42
+/** @brief Pin E6 **/
+#define PIN_E6 46
+/** @brief Pin EXT_DIO1 **/
+#define PIN_EXT_DIO1 46
+/** @brief Pin E7 **/
+#define PIN_E7 47
+/** @brief Pin EXT_DIO2 **/
+#define PIN_EXT_DIO2 48
+
+/** @brief Pin AN0 **/
+#define PIN_AN0 48
+/** @brief Pin ADC0 **/
+#define PIN_ADC0 48
+/** @brief Pin AN1 **/
+#define PIN_AN1 49
+/** @brief Pin ADC1 **/
+#define PIN_ADC1 49
+/** @brief Pin AN2 **/
+#define PIN_AN2 50
+/** @brief Pin ADC2 **/
+#define PIN_ADC2 50
+/** @brief Pin AN3 **/
+#define PIN_AN3 51
+/** @brief Pin ADC3 **/
+#define PIN_ADC3 51
+/** @brief Pin AN4 **/
+#define PIN_AN4 52
+/** @brief Pin ADC4 **/
+#define PIN_ADC4 52
+/** @brief Pin AN5 **/
+#define PIN_AN5 53
+/** @brief Pin ADC5 **/
+#define PIN_ADC5 53
+/** @brief Pin AN6 **/
+#define PIN_AN6 54
+/** @brief Pin ADC6 **/
+#define PIN_ADC6 54
+/** @brief Pin AN7 **/
+#define PIN_AN7 55
+/** @brief Pin ADC7 **/
+#define PIN_ADC7 55
+
+/** @brief Wheel Pin **/
+#define PIN_WHEEL 54
+/** @brief Battery Voltage Monitor Pin **/
+#define PIN_BATT 55
+
+/** @brief button1 Pin **/
+#define PIN_BTN1 56
+/** @brief button2 Pin **/
+#define PIN_BTN2 57
+
+/** @brief LED1 Pin **/
+#define PIN_LED1 58
+
+/* Buttons */
+/** @brief Button Pin **/
+#define PIN_BTN PING
+/** @brief button2 Pin **/
+#define BTN2 PING1
+/** @brief button1 Pin **/
+#define BTN1 PING0
+
+/** @brief Read a portpin. **/
+int digital_input(int);
+/** @brief Output to a portpin. **/
+void digital_output(int bit, int val);
+/** @brief Pullup a portpin. **/
+void digital_pull_up(int);
+
+/** @brief Check if button1 is pressed. **/
+int button1_read( void );
+/** @brief Check if button1 is clicked. **/
+int button1_click( void );
+/** @brief Wait until button1 is pressed. **/
+void button1_wait( void );
+
+/** @brief Check if button2 is pressed. **/
+int button2_read( void );
+/** @brief Check if button2 is clicked. **/
+int button2_click( void );
+/** @brief Wait until button2 is pressed. **/
+void button2_wait( void );
+
+/** @} **/ // end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/dragonfly_lib.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/dragonfly_lib.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/dragonfly_lib.h	(revision 62)
@@ -0,0 +1,71 @@
+/**
+ * @file dragonfly_lib.h
+ * @brief Contains other include files
+ * 
+ * Include this file for all the functionality of libdragonfly.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _DRAGONFLY_LIB_H_
+#define _DRAGONFLY_LIB_H_
+
+/**
+ * @addtogroup dragonfly
+ * @{
+ **/
+
+// Configuration definitions
+/** @brief Initialize analog **/
+#define ANALOG 0x01
+/** @brief Initialize serial communications **/
+#define SERIAL 0x02
+/** @brief Initialize USB communications **/
+#define USB    0x02
+/** @brief Initialize communications **/
+#define COMM   0x02
+/** @brief Initialize the orb **/
+#define ORB    0x04
+/** @brief Initialize the motors **/
+#define MOTORS 0x08
+/** @brief Initialize the servos **/
+#define SERVOS 0x10
+/** @brief Initialize I2C **/
+#define I2C    0x20
+/** @brief Initialize the buzzer **/
+#define BUZZER 0x40
+/** @brief Initialize the LCD screen **/
+#define LCD    0x80
+/** @brief Initialize everything **/
+#define ALL_ON 0xFF
+
+
+/** @brief Initialize the board **/
+void dragonfly_init(int config);
+/** @brief Reset the robot **/
+void reset(void);
+
+/** @} **/ //end addtogroup
+
+#include <inttypes.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <util/twi.h>
+
+#include <analog.h>
+#include <dio.h>
+#include <time.h>
+#include <lcd.h>
+#include <lights.h>
+#include <motor.h>
+#include <serial.h>
+#include <buzzer.h>
+#include <rangefinder.h>
+#include <bom.h>
+#include <move.h>
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/bom.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/bom.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/bom.h	(revision 62)
@@ -0,0 +1,30 @@
+/**
+ * @file bom.h
+ * @brief Definitions for using the BOM
+ * 
+ * This file contains definitions for using the Bearing and 
+ * Orientation Module (BOM).
+ *
+ * @author Colony Project, CMU Robotics Club
+ *
+ **/
+
+#ifndef _BOM_H
+#define _BOM_H
+
+/**
+ * @addtogroup bom
+ * @{
+ **/
+
+/** @brief Returns the location of the maximum BOM reading. **/
+int get_max_bom( void );
+/** @brief Turns the BOM on. **/
+void bom_on(void);
+/** @brief Turns the BOM off. **/
+void bom_off(void);
+
+/** @} **/
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/i2c.h
===================================================================
Index: branches/charge_board/code/lib/include/libdragonfly/time.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/time.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/time.h	(revision 62)
@@ -0,0 +1,49 @@
+/**
+ * @file time.h
+ * @brief Contains time-related functions and definitions
+ *
+ * Contains functions and definitions for dealing with time,
+ * namely delay_ms and the realtime clock.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/*	Predefined times for prescale_opt in time.c.
+	To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need
+	to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)
+*/
+/**
+ * @addtogroup time
+ * @{
+ **/
+/** @brief A sixteenth of a second **/
+#define SIXTEENTH_SECOND 1
+/** @brief An eighth of a second **/
+#define EIGTH_SECOND 2
+/** @brief A quarter of a second **/
+#define QUARTER_SECOND 4
+/** @brief Half of a second **/
+#define HALF_SECOND	8
+/** @brief One second **/
+#define SECOND 16
+/** @brief Two seconds **/
+#define TWO_SECOND 32
+/** @brief Four seconds **/
+#define FOUR_SECOND 64
+
+/** @brief Delay execution for the specified time **/
+void delay_ms(int ms) ;
+/** @brief Enable the realtime clock **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void));
+/** @brief Reset the counter of the realtime clock **/
+void rtc_reset(void);
+/** @brief Get the value of the realtime clock. **/
+int rtc_get(void);
+
+/** @} **/
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/serial.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/serial.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/serial.h	(revision 62)
@@ -0,0 +1,104 @@
+/**
+ * @file serial.h
+ * @brief Contains declarations for serial input and output
+ *
+ * Contains definitions for serial input and output.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ *
+ **/
+
+/*
+	serial.h - Contains definitions and function prototypes for the RS232 serial port
+  author(s): pkv
+  
+  Directions:
+  Call the initialization function for the serial port you wish to use.  Then, use
+  either the provided functions or the stdio functions (fprintf, etc) to read and
+  write characters to the serial ports.
+  
+  UART Mapping:
+    usb_*() -> UART0
+    xbee_*() -> UART1
+  
+  Options: (Add the following defines to your code to configure this library)
+    #define USB_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define XBEE_BAUD { 115200 | 9600 } <= pick ONE value from in here
+    #define USE_STDIO
+  
+  Note: If you enable USE_STDIO, the first init function that is called will 
+  automatically be linked to stdin, stdout, and stderr.  To use the baud rate 
+  commands, add something like the following to your code:
+  
+  #define FOO_BAUD 9600
+  
+  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**
+  Many, many other people use this file in their code.  If you change it, you will
+  probably break all of their nice code.  You should not need to change anything in
+  here, except to accomodate new hardware.
+*/
+
+#ifndef _SERIAL_H
+#define _SERIAL_H
+
+/**
+ * @defgroup usb USB Input / Output
+ * @brief Functions for USB input / output
+ *
+ * Low level functions for USB input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+#ifndef USB_BAUD
+/** @brief the USB baud rate **/
+#define USB_BAUD 115200
+#endif
+
+/** @brief Initialize the USB **/
+void usb_init(void);
+/** @brief Print a character to USB **/
+int usb_putc(char c);
+/** @brief Read a character from USB **/
+int usb_getc(void);
+/** @brief Read a character from USB without blocking **/
+int usb_getc_nb(char *c);
+/** @brief Print a string to USB **/
+int usb_puts(char *s);
+/** @brief Print an integer to USB **/
+int usb_puti(int value);
+
+/** @} **/ //end addtogroup
+
+/**
+ * @defgroup xbee XBee Input / Output
+ * @brief Functions for XBee input / output
+ *
+ * Low level functions for XBee input and output.
+ *
+ * @{
+ **/
+
+// if no baud rate is defined for usb, default is set here
+
+// if no baud rate is defined for xbee, default is set here
+#ifndef XBEE_BAUD
+/** @brief the XBee baud rate **/
+#define XBEE_BAUD 9600
+#endif
+
+/** @brief Initialize the XBee **/
+void xbee_init(void);
+/** @brief Print a character to the XBee **/
+int xbee_putc(char c);
+/** @brief Read a character from the XBee **/
+int xbee_getc(void);
+/** @brief Read a character from the XBee without blocking **/
+int xbee_getc_nb(char *c);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/motor.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/motor.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/motor.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @file motor.h
+ * @brief Contains definitions for controlling the motors
+ *
+ * Contains definitions and functions for controlling
+ * the motors.
+ *
+ * @author Colony Project, CMU Robotics Club
+ * Based on Tom Lauwer's Firefly Library
+ **/
+
+#ifndef _MOTOR_H
+#define _MOTOR_H
+
+#include <avr/io.h>
+/**
+ * @addtogroup motors
+ * @{
+ **/
+
+/** @brief make the motors go forwards **/
+#define FORWARD 1
+/** @brief make the motors go backwards **/
+#define BACKWARD 0
+
+/** @brief Initialize the motors **/
+void motors_init(void);
+/** @brief Set speed and direction of motor1 **/
+void motor1_set(int direction, int speed);
+/** @brief Set speed and direction of motor2 **/
+void motor2_set(int direction, int speed);
+/** @brief Turn the motors off **/
+void motors_off(void);
+
+/**@}**/ // end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/analog.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/analog.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/analog.h	(revision 62)
@@ -0,0 +1,76 @@
+/**
+ * 
+ * @file analog.h
+ * @brief Contains functions and definitions for using the ADC
+ * 
+ * Contains definitions and function prototypes for using the
+ * ADC to detect analog signals on pins AN0 - AN7.
+ * AN6 and AN7 are used for the wheel and battery.
+	
+ * The pins labeled E6 and E7 are external interrupt pins and are not related 
+ * to analog.
+	
+ * @author Colony Project, CMU Robotics Club, based on firefly
+ * code by Tom Lauwers
+*/
+
+#ifndef _ANALOG_H
+#define _ANALOG_H
+
+/**
+ * @addtogroup analog
+ * @{
+ **/
+
+/** @brief Analog port 0 **/
+#define AN0 0x00
+/** @brief Analog port 1 **/
+#define AN1 0x01
+/** @brief Analog port 2 **/
+#define AN2 0x02
+/** @brief Analog port 3 **/
+#define AN3 0x03
+/** @brief Analog port 4 **/
+#define AN4 0x04
+/** @brief Analog port 5 **/
+#define AN5 0x05
+/** @brief Analog port 6 **/
+#define AN6 0x06
+/** @brief Analog port 7 **/
+#define AN7 0x07
+/** @brief Analog port 8 **/
+#define AN8 0x08
+/** @brief Analog port 9 **/
+#define AN9 0x09
+/** @brief Analog port 10 **/
+#define AN10 0x0a
+/** @brief Analog port 11 **/
+#define AN11 0x0b
+/** @brief Analog port 12 **/
+#define AN12 0x0c
+/** @brief Analog port 13 **/
+#define AN13 0x0d
+/** @brief Analog port 14 **/
+#define AN14 0x0e
+/** @brief Analog port 15 **/
+#define AN15 0x0f
+
+/** @brief EXT_MUX analog port **/
+#define EXT_MUX AN7
+/** @brief Analog port for the wheel **/
+#define WHEEL_PORT AN10
+/** @brief Analog port for the battery voltage detector **/
+#define BATT_PORT  AN11
+
+/** @brief Initialize analog ports. **/
+void analog_init(void);
+/** @brief Read an 8-bit number from an analog port. **/
+unsigned int analog8(int which);
+/** @brief Read a 10-bit number from an analog port. **/
+unsigned int analog10(int which);
+/** @brief Read the position of the wheel. **/
+int wheel(void);
+
+/**@}**/ //end group
+
+#endif
Index: branches/charge_board/code/lib/include/libdragonfly/buzzer.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/buzzer.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/buzzer.h	(revision 62)
@@ -0,0 +1,62 @@
+/**
+ * @file buzzer.h
+ * @brief Contains definitions for using the buzzer.
+ *
+ * Contains definitions for using the buzzer built into
+ * the colony robots.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _BUZZER_H_
+#define _BUZZER_H_
+
+/**
+ * @addtogroup buzzer
+ * @{
+ **/
+
+//Musical note definitions
+//Source: http://www.answers.com/topic/piano-key-frequencies
+/** @brief Middle C **/
+#define	C4	260 //Middle C
+/** @brief C# **/
+#define	C4s	277 //C sharp
+/** @brief D **/
+#define	D4	294
+/** @brief D# **/
+#define	D4s	311
+/** @brief E **/
+#define	E4	330
+/** @brief F **/
+#define	F4	349
+/** @brief F# **/
+#define	F4s	370
+/** @brief G **/
+#define	G4	392
+/** @brief G# **/
+#define	G4s	415
+/** @brief A **/
+#define	A4	440
+/** @brief A# **/
+#define	A4s	466
+/** @brief B **/
+#define	B4	494
+/** @brief C **/
+#define	C5	523
+
+/** @brief Initialize the buzzer. **/
+void buzzer_init(void);
+/** @brief Set the value the buzzer plays. **/
+void buzzer_set_val(unsigned int buzz_value);
+/** @brief Set the frequency the buzzer plays. **/
+void buzzer_set_freq(unsigned int buzz_freq);
+/** @brief Play a frequency for a specified time. **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq);
+/** @brief Turn the buzzer off. **/
+void buzzer_off(void); 
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/lcd.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/lcd.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/lcd.h	(revision 62)
@@ -0,0 +1,34 @@
+/**
+ * @file lcd.h
+ * @brief Contains definitions for dealing with the LCD screen.
+ * 
+ * Contains definitions and functions for dealing with the 
+ * LCD screen.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _LCD_H_
+#define _LCD_H_
+
+/**
+ * @addtogroup lcd
+ * @{
+ **/
+
+/** @brief Initialize the LCD screen **/
+void lcd_init(void);
+/** @brief Clear the LCD screen **/
+void lcd_clear_screen( void );
+/** @brief Print a char to the LCD screen **/
+void lcd_putc(char c);
+/** @brief Print a string to the LCD screen **/
+void lcd_puts(char *s);
+/** @brief Print an int to the LCD screen **/
+void lcd_puti(int value);
+/** @brief Set the current cursor position **/
+void lcd_gotoxy(int x, int y);
+
+/** @} **/
+
+#endif
Index: branches/charge_board/code/lib/include/libdragonfly/rangefinder.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/rangefinder.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/rangefinder.h	(revision 62)
@@ -0,0 +1,38 @@
+/**
+ * @file rangefinder.h
+ * @brief Contains rangefinder declarations and functions
+ * 
+ * Contains functions and definitions for the use of
+ * IR rangefinders.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _RANGEFINDER_H_
+#define _RANGEFINDER_H_
+
+/**
+ * @addtogroup rangefinder
+ * @{
+ **/
+
+/** @brief IR Rangefinder 1 **/
+#define IR1 6
+/** @brief IR Rangefinder 2 **/
+#define IR2 5
+/** @brief IR Rangefinder 3 **/
+#define IR3 4
+/** @brief IR Rangefinder 4 **/
+#define IR4 3
+/** @brief IR Rangefinder 5 **/
+#define IR5 2
+
+/** @brief Initialize the rangefinders **/
+void range_init(void);
+/** @brief Read the distance from a rangefinder **/
+int range_read_distance(int range_id);
+
+/** @} **/ //end addtogroup
+
+#endif
+
Index: branches/charge_board/code/lib/include/libdragonfly/move.h
===================================================================
--- branches/charge_board/code/lib/include/libdragonfly/move.h	(nonexistent)
+++ branches/charge_board/code/lib/include/libdragonfly/move.h	(revision 62)
@@ -0,0 +1,49 @@
+/**
+ * @file move.h
+ * @brief Contains definitions for controlling robot motion
+ * 
+ * This file offers higher-level functions for robot motion.
+ *
+ * @author Colony Project, CMU Robotics Club
+ **/
+
+#ifndef _MOVE_H_
+#define _MOVE_H_
+
+/**
+ * @addtogroup move
+ * @{
+ **/
+
+/** @brief Move forwards **/
+#define FWD 0
+/** @brief Move backwards **/
+#define BCK 1
+
+/** @brief A slow speed **/
+#define SLOW_SPD 96
+/** @brief Half of the full speed **/
+#define HALF_SPD 128
+/** @brief A normal speed **/
+#define NRML_SPD 160
+/** @brief A fast speed **/
+#define FAST_SPD 192
+/** @brief The maximum speed **/
+#define FULL_SPD 255
+
+/** @brief A slow turning speed **/
+#define SLOW_TURN 64
+/** @brief A medium turning speed **/
+#define NRML_TURN 96
+/** @brief A high turning speed **/
+#define FAST_TURN 128
+
+/** @brief Move the robot at the specified velocity **/
+void move(int velocity, int omega);
+/** @brief Move the robot while avoiding obstacles **/
+void move_avoid(int velocity, int omega, int strength);
+
+/** @} **/
+
+#endif
+
Index: branches/charge_board/code/lib/src/libwireless/xbee.c
===================================================================
--- branches/charge_board/code/lib/src/libwireless/xbee.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libwireless/xbee.c	(revision 62)
@@ -0,0 +1,730 @@
+#include "xbee.h"
+#include "wl_defs.h"
+
+#ifndef ROBOT
+
+#include <fcntl.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <errno.h>
+
+#else
+
+#include <serial.h>
+#include <avr/interrupt.h>
+
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <queue.h>
+
+#define XBEE_FRAME_START 0x7E
+
+/*Frame Types*/
+#define XBEE_FRAME_STATUS 0x8A
+#define XBEE_FRAME_AT_COMMAND 0x08
+#define XBEE_FRAME_AT_COMMAND_RESPONSE 0x88
+#define XBEE_FRAME_TX_REQUEST_64 0x00
+#define XBEE_FRAME_TX_REQUEST_16 0x01
+#define XBEE_FRAME_TX_STATUS XBEE_TX_STATUS
+#define XBEE_FRAME_RX_64 0x80
+#define XBEE_FRAME_RX_16 XBEE_RX
+
+/*Internal Function Prototypes*/
+
+/*I/O Functions*/
+void xbee_send(char* buf, int size);
+void xbee_send_string(char* c);
+
+#ifndef ROBOT
+void xbee_read(char* buf, int size);
+#endif
+
+/*Command Mode Functions
+ * Called during initialization.
+ */
+void xbee_enter_command_mode(void);
+void xbee_exit_command_mode(void);
+void xbee_enter_api_mode(void);
+void xbee_wait_for_string(char* s, int len);
+void xbee_wait_for_ok(void);
+
+/*API Mode Functions*/
+
+int xbee_handle_packet(char* packet, int len);
+void xbee_handle_at_command_response(char* command, char result,
+	char* extra, int extraLen);
+void xbee_handle_status(char status);
+int xbee_verify_checksum(char* packet, int len);
+char xbee_compute_checksum(char* packet, int len);
+void xbee_send_frame(char* buf, int len);
+void xbee_send_read_at_command(char* command);
+void xbee_send_modify_at_command(char* command, char* value);
+
+/*Global Variables*/
+
+#ifndef ROBOT
+int xbee_stream;
+pthread_t* xbee_listen_thread;
+#endif
+
+Queue* xbee_queue;
+
+//used to store packets as they are read
+char xbee_buf[128];
+int currentBufPos = 0;
+
+//XBee status
+unsigned int xbee_panID = XBEE_PAN_DEFAULT;
+unsigned int xbee_pending_panID = XBEE_PAN_DEFAULT;
+int xbee_channel = XBEE_CHANNEL_DEFAULT;
+int xbee_pending_channel = XBEE_CHANNEL_DEFAULT;
+unsigned int xbee_address = 0;
+
+/*Function Implementations*/
+
+#ifdef ROBOT
+
+/**
+ * Interrupt for the robot. Adds bytes received from the xbee
+ * to the queue.
+ **/
+ISR(USART1_RX_vect)
+{
+	char c = UDR1;
+	queue_add(xbee_queue, (void*)(int)c);
+}
+
+#else
+
+/**
+ * Thread that listens to the xbee.
+ **/
+void* listen_to_xbee(void* x)
+{
+	char c;
+	while (1)
+	{
+		xbee_read(&c, 1);
+		queue_add(xbee_queue, (void*)(int)c);
+	}
+	return 0;
+}
+
+#endif
+
+/**
+ * Initializes the XBee library so that other functions may be used.
+ *
+ * @param pan_id the PAN to join initially. Use XBEE_PAN_DEFAULT
+ * to leave the PAN as it is initially.
+ **/
+void xbee_lib_init(void)
+{
+	xbee_queue = queue_create();
+	
+	#ifdef ROBOT
+
+	//enable the receiving interrupt
+	UCSR1B |= _BV(RXCIE);
+	sei();
+	#else
+	xbee_stream = open("/dev/ttyUSB0", O_RDWR);
+	if (xbee_stream == -1 || lockf(xbee_stream, F_TEST, 0) != 0)
+		xbee_stream = open("/dev/ttyUSB1", O_RDWR);
+	if (xbee_stream == -1 || lockf(xbee_stream, F_TEST, 0) != 0)
+	{
+		printf("Failed to open connection to XBee.\r\n");
+		exit(0);
+	}
+	lockf(xbee_stream, F_LOCK, 0);
+	
+	xbee_listen_thread =
+		(pthread_t*)malloc(sizeof(pthread_t));
+	
+	int ret = pthread_create(xbee_listen_thread, NULL, 
+		listen_to_xbee, NULL);
+	if (ret)
+	{
+		printf("Failed to create listener thread.\r\n");
+		exit(0);
+	}
+	#endif
+	xbee_enter_command_mode();
+	xbee_enter_api_mode();
+	xbee_exit_command_mode();
+	xbee_send_read_at_command("MY");
+	
+	//wait to return until the address is set
+	while (xbee_address == 0) xbee_get_packet(NULL);
+}
+
+/**
+ * Call when finished using the XBee library. This releases
+ * all sued resources.
+ **/
+void xbee_terminate()
+{
+	#ifndef ROBOT
+	pthread_cancel(*xbee_listen_thread);
+	free(xbee_listen_thread);
+	lockf(xbee_stream, F_ULOCK, 0);
+	close(xbee_stream);
+	#endif
+	queue_destroy(xbee_queue);
+}
+
+/**
+ * Send a buffer buf of size bytes to the XBee.
+ * 
+ * @param buf the buffer of data to send
+ * @param size the number of bytes to send
+ **/
+void xbee_send(char* buf, int size)
+{
+	#ifdef ROBOT
+	int i;
+	for (i = 0; i < size; i++)
+		xbee_putc(buf[i]);
+	#else
+	int ret = write(xbee_stream, buf, size);
+	//success
+	if (ret == size)
+		return;
+	if (ret == -1)
+	{
+		//interrupted by system signal, probably timer interrupt.
+		//just try again
+		if (errno == 4)
+		{
+			xbee_send(buf, size);
+			return;
+		}
+		printf("Failed to write to xbee, error %i.\r\n", errno);
+		return;
+	}
+
+	//write was interrupted after writing ret bytes
+	xbee_send(buf + ret, size - ret);
+	#endif
+}
+
+/**
+ * Sends a string to the XBee.
+ *
+ * @param c the string to send to the XBEE
+ **/
+void xbee_send_string(char* c)
+{
+	xbee_send(c, strlen(c));
+}
+
+#ifndef ROBOT
+void xbee_read(char* buf, int size)
+{
+	if (read(xbee_stream, buf, size) == -1)
+		printf("Failed to read from xbee.\r\n");
+}
+#endif
+
+/**
+ * Enter into command mode.
+ **/
+void xbee_enter_command_mode()
+{
+	xbee_send_string("+++");
+	xbee_wait_for_ok();
+}
+
+/**
+ * Exit from command mode.
+ **/
+void xbee_exit_command_mode()
+{
+	xbee_send_string("ATCN\r");
+	xbee_wait_for_ok();
+}
+
+/**
+ * Enter API mode.
+ **/
+void xbee_enter_api_mode()
+{
+	xbee_send_string("ATAP 1\r");
+	xbee_wait_for_ok();
+}
+
+/**
+ * Wait until the string "OK\r" is received from the XBee.
+ **/
+void xbee_wait_for_ok()
+{
+	xbee_wait_for_string("OK\r", 3);
+}
+
+/**
+ * Delay until the specified string is received from
+ * the XBee. Discards all other XBee data.
+ *
+ * @param s the string to receive
+ * @param len the length of the string
+ **/
+void xbee_wait_for_string(char* s, int len)
+{
+	char* curr = s;
+	while (curr - s < len)
+	{
+		if (queue_is_empty(xbee_queue))
+			continue;
+		char c = (char)(int)queue_remove(xbee_queue);
+		if (c == *curr)
+			curr++;
+		else
+			curr = s;
+	}
+}
+
+/**
+ * Verifies that the packets checksum is correct.
+ * (If the checksum is correct, the sum of the bytes
+ * is 0xFF.)
+ *
+ * @param packet the packet received. This includes the first
+ * three bytes, which are header information from the XBee.
+ *
+ * @param len The length of the packet received from the XBee
+ *
+ * @return 0 if the checksum is incorrect, nonzero
+ * otherwise
+ **/
+int xbee_verify_checksum(char* packet, int len)
+{
+	unsigned char sum = 0;
+	int i;
+	for (i = 3; i < len; i++)
+		sum += (unsigned char)packet[i];
+	return sum == 0xFF;
+}
+
+/**
+ * Returns the checksum of the given packet.
+ *
+ * @param buf the data for the packet to send
+ * @param len the length of the packet in bytes
+ *
+ * @return the checksum of the packet, which will
+ * become the last byte sent in the packet
+ **/
+char xbee_compute_checksum(char* buf, int len)
+{
+	int i;
+	unsigned char sum = 0;
+	for (i = 0; i < len; i++)
+		sum += (unsigned char)buf[i];
+	return 0xFF - sum;
+}
+
+/**
+ * Adds header information and checksum to the given
+ * packet and sends it. Header information includes
+ * XBEE_FRAME_START and the packet length, as two bytes.
+ *
+ * @param buf the packet data
+ * @param len the size in bytes of the packet data
+ *
+ **/
+void xbee_send_frame(char* buf, int len)
+{
+	char prefix[3];
+	prefix[0] = XBEE_FRAME_START;
+	prefix[1] = (len & 0xFF00) >> 8;
+	prefix[2] = len & 0xFF;
+	char checksum = xbee_compute_checksum(buf, len);
+	xbee_send(prefix, 3);
+	xbee_send(buf, len);
+	xbee_send(&checksum, 1);
+}
+
+/**
+ * Sends an AT command to read a parameter.
+ *
+ * @param command the AT command to send. For exmaple,
+ * use ID to read the PAN ID and MY to return the XBee ID.
+ * See the XBee reference guide for a complete listing.
+ **/
+void xbee_send_read_at_command(char* command)
+{
+	xbee_send_modify_at_command(command, NULL);
+}
+
+/**
+ * Sends the given AT command.
+ *
+ * @param command the AT command to send (e.g., MY, ID)
+ * @param value the value to pass as a parameter
+ * (or NULL if there is no parameter)
+ **/
+void xbee_send_modify_at_command(char* command, char* value)
+{
+	char buf[16];
+	int i;
+	
+	buf[0] = XBEE_FRAME_AT_COMMAND;
+	buf[1] = 1;
+	buf[2] = command[0];
+	buf[3] = command[1];
+	int valueLen = 0;
+	if (value != NULL)
+	{
+		valueLen = strlen(value);
+		if (valueLen > 8)
+		{
+			WL_DEBUG_PRINT("AT Command too large.\r\n");
+			return;
+		}
+		for (i = 0; i < valueLen; i++)
+			buf[4 + i] = value[i];
+	}
+	xbee_send_frame(buf, 4 + valueLen);
+}
+
+/**
+ * Send the specified packet.
+ * 
+ * @param packet the packet data to send
+ * @param len the number of bytes in the packet
+ * 
+ * @param dest the ID of the XBee to send the packet to,
+ * or XBEE_BROADCAST to send the message to all robots
+ * in the PAN.
+ * 
+ * @param options a combination of the flags
+ * XBEE_OPTIONS_NONE, XBEE_OPTIONS_DISABLE_RESPONSE and 
+ * XBEE_OPTIONS_BROADCAST_ALL_PANS
+ *
+ * @param frame the frame number to associate this packet
+ * with. This will be used to identify the response when
+ * the XBee alerts us as to whether or not our message
+ * was received.
+ **/
+void xbee_send_packet(char* packet, int len, int dest,
+	char options, char frame)
+{
+	char buf[5];
+	char prefix[3];
+	int i;
+	unsigned char checksum = 0;
+
+	if (len > 100)
+	{
+		WL_DEBUG_PRINT("Packet is too large.\r\n");
+		return;
+	}
+
+	//data for sending request
+	buf[0] = XBEE_FRAME_TX_REQUEST_16;
+	buf[1] = frame;
+	buf[2] = (dest >> 8) & 0xFF;
+	buf[3] = dest & 0xFF;
+	buf[4] = options;
+
+	//packet prefix, do this here so we don't need an extra buffer
+	prefix[0] = XBEE_FRAME_START;
+	prefix[1] = ((5 + len) & 0xFF00) >> 8;
+	prefix[2] = (5 + len) & 0xFF;
+
+	for (i = 0; i < 5; i++)
+		checksum += (unsigned char)buf[i];
+	for (i = 0; i < len; i++)
+		checksum += (unsigned char)packet[i];
+	checksum = 0xFF - checksum;
+	xbee_send(prefix, 3);
+	xbee_send(buf, 5);
+	xbee_send(packet, len);
+	xbee_send((char*)&checksum, 1);
+}
+
+/**
+ * Reads a packet received from the XBee. This function
+ * is non-blocking. The resulting packet is stored in dest.
+ * Only returns transmission response packets and
+ * received packets. The returned packet does not include
+ * header information or the checksum. This method also
+ * handles special packets dealt with by the XBee library,
+ * and so should be called frequently while the XBee is in
+ * use.<br><br>
+ *
+ * The first byte of the packet will be either
+ * XBEE_TX_STATUS or XBEE_RX to indicated
+ * a response to a sent message or a received message, 
+ * respectively.<br><br>
+ *
+ * For a status response packet:<br>
+ * The first byte will be XBEE_TX_STATUS.<br>
+ * The second byte will be the frame number.<br>
+ * The third byte will be the result. 0 indicates success,
+ * and nonzero indicates that an error ocurred in 
+ * transmitting the packet.<br><br>
+ *
+ * For a received packet:<br>
+ * The first byte will be XBEE_RX.<br>
+ * The second and third bytes will be the 16-bit
+ * address of the packet's sender.<br>
+ * The fourth byte is the signal strength.<br>
+ * The fifth byte is 1 if the packet were sent to
+ * a specific address, and 2 if it is a broadcast packet.<br><br>
+ * 
+ * @param dest set to the packet data
+ * @return the length of the packet, or -1 if no packet
+ * is available
+ **/
+int xbee_get_packet(unsigned char* dest)
+{
+	//start reading a packet with XBEE_FRAME_START
+	if (currentBufPos == 0)
+	{
+		do
+			if (queue_is_empty(xbee_queue))
+				return -1;
+		while ((char)(int)queue_remove(xbee_queue) != XBEE_FRAME_START);
+		xbee_buf[0] = XBEE_FRAME_START;
+		currentBufPos++;
+	}
+
+	int len = -1;
+	if (currentBufPos >= 3)
+		len = (int)xbee_buf[2] + ((int)xbee_buf[1] << 8);
+		
+	while (len == -1 //packet length has not been read yet
+			|| currentBufPos < len + 4)
+	{
+		if (currentBufPos == 3)
+			len = (int)xbee_buf[2] + ((int)xbee_buf[1] << 8);
+		if (queue_is_empty(xbee_queue))
+			return -1;
+		xbee_buf[currentBufPos++] = (char)(int)queue_remove(xbee_queue);
+	}
+	
+	currentBufPos = 0;
+	
+	if (!xbee_verify_checksum(xbee_buf, len + 4))
+	{
+		WL_DEBUG_PRINT("XBee checksum failed.\r\n");
+		return -1;
+	}
+
+	//we will take care of the packet
+	if (xbee_handle_packet(xbee_buf + 3, len))
+		return -1;
+	
+	if (dest == NULL)
+		return -1;
+	
+	int i;
+	for (i = 3; i < len + 3; i++)
+		dest[i - 3] = xbee_buf[i];
+	return len;
+}
+
+/**
+ * Handles modem status packets.
+ *
+ * @param status the type of status packet received.
+ **/
+void xbee_handle_status(char status)
+{
+	switch (status)
+	{
+		case 0:
+			WL_DEBUG_PRINT("XBee hardware reset.\r\n");
+			break;
+		case 1:
+			WL_DEBUG_PRINT("Watchdog timer reset.\r\n");
+			break;
+		case 2:
+			WL_DEBUG_PRINT("Associated.\r\n");
+			break;
+		case 3:
+			WL_DEBUG_PRINT("Disassociated.\r\n");
+			break;
+		case 4:
+			WL_DEBUG_PRINT("Synchronization lost.\r\n");
+			break;
+		case 5:
+			WL_DEBUG_PRINT("Coordinator realignment.\r\n");
+			break;
+		case 6:
+			WL_DEBUG_PRINT("Coordinator started.\r\n");
+			break;
+	}
+}
+
+/**
+ * Handles AT command response packets.
+ * @param command the two character AT command, e.g. MY or ID
+ * @param result 0 for success, 1 for an error
+ * @param extra the hex value of the requested register
+ * @param extraLen the length in bytes of extra
+ **/
+void xbee_handle_at_command_response(char* command, char result,
+	char* extra, int extraLen)
+{
+	if (result == 1)
+	{
+		WL_DEBUG_PRINT("Error with AT");
+		WL_DEBUG_PRINT(command);
+		WL_DEBUG_PRINT(" packet.\r\n");
+	}
+	WL_DEBUG_PRINT("AT");
+	WL_DEBUG_PRINT(command);
+	WL_DEBUG_PRINT(" command was successful.\r\n");
+		
+	if (command[0] == 'I' && command[1] == 'D')
+	{
+		xbee_panID = xbee_pending_panID;
+		WL_DEBUG_PRINT("PAN ID set to ");
+		WL_DEBUG_PRINT_INT(xbee_panID);
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+
+	if (command[0] == 'C' && command[1] == 'H')
+	{
+		xbee_channel = xbee_pending_channel;
+		WL_DEBUG_PRINT("Channel set to ");
+		WL_DEBUG_PRINT_INT(xbee_channel);
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+	
+	if (command[0] == 'M' && command[1] == 'Y' && extraLen != 0)
+	{
+		xbee_address = 0;
+		int i;
+		for (i = 0; i < extraLen; i++)
+			xbee_address = (xbee_address << 8) + extra[i];
+
+		WL_DEBUG_PRINT("XBee address is ");
+		WL_DEBUG_PRINT_INT(xbee_address);
+		WL_DEBUG_PRINT(".\r\n");
+
+		if (xbee_address == 0)
+		{
+			WL_DEBUG_PRINT("XBee 16-bit address must be set using ATMY.\r\n");
+			exit(0);
+		}
+	}
+}
+
+/**
+ * Attempts to handle the packet if it is dealt with
+ * by the library.
+ * We will handle the following packet types:
+ *    Modem Status
+ *    AT Command Response
+ *
+ * @param packet the packet to handle
+ * @param len the length of the packet
+ * 
+ * @return 1 if we have handled the packet, 0 otherwise
+ */
+int xbee_handle_packet(char* packet, int len)
+{
+	char command[3] = {1, 2, 3};
+	if (len <= 0) //this should not happend
+	{
+		WL_DEBUG_PRINT("Non-positive packet length.\r\n");
+		return 0;
+	}
+	
+	switch ((unsigned char)packet[0]) //packet type
+	{
+		case XBEE_FRAME_STATUS:
+			xbee_handle_status(packet[1]);
+			return 1;
+		case XBEE_FRAME_AT_COMMAND_RESPONSE:
+			command[0] = packet[2];
+			command[1] = packet[3];
+			command[2] = 0;
+			xbee_handle_at_command_response(command,
+				packet[4], packet + 5, len - 5);
+			return 1;
+	}
+	return 0;
+}
+
+/**
+ * Sets the personal area network id.
+ *
+ * @param id the new personal area network (PAN) id
+ **/
+void xbee_set_pan_id(int id)
+{
+	char s[3];
+	s[0] = (id >> 8) & 0xFF;
+	s[1] = id & 0xFF;
+	s[2] = 0;
+	xbee_pending_panID = id;
+	xbee_send_modify_at_command("ID", s);
+}
+
+/**
+ * Get the PAN ID for the XBee.
+ * 
+ * @return the personal area network id, or
+ * XBEE_PAN_DEFAULT if it has not yet been set.
+ **/
+unsigned int xbee_get_pan_id()
+{
+	return xbee_panID;
+}
+
+/**
+ * Set the channel the XBee is using.
+ *
+ * @param channel the channel the XBee will not use, 
+ * between 0x0B and 0x1A
+ *
+ * @see xbee_get_channel
+ **/
+void xbee_set_channel(int channel)
+{
+	if (channel < 0x0B || channel > 0x1A)
+	{
+		WL_DEBUG_PRINT("Channel out of range.\r\n");
+		return;
+	}
+	char s[3];
+	s[0] = channel & 0xFF;
+	s[1] = 0;
+	xbee_pending_channel = channel;
+	xbee_send_modify_at_command("CH", s);
+}
+
+/**
+ * Returns the channel which the XBee is currently using.
+ *
+ * @return the channel the XBee is using
+ *
+ * @see xbee_set_channel
+ **/
+int xbee_get_channel(void)
+{
+	return xbee_channel;
+}
+
+/**
+ * Get the 16-bit address of the XBee.
+ * This is used to specify who to send messages to
+ * and who messages are from.
+ *
+ * @return the 16-bit address of the XBee.
+ **/
+unsigned int xbee_get_address()
+{
+	return xbee_address;
+}
+
Index: branches/charge_board/code/lib/src/libwireless/wireless.c
===================================================================
--- branches/charge_board/code/lib/src/libwireless/wireless.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libwireless/wireless.c	(revision 62)
@@ -0,0 +1,390 @@
+#include "wireless.h"
+#include "xbee.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "wl_defs.h"
+
+#ifndef ROBOT
+#include <time.h>
+#include <signal.h>
+#else
+#include <time.h>
+#include <bom.h>
+#endif
+
+/*Function Prototypes*/
+
+void wl_do_timeout(void);
+
+//Note: the actual frame sent has group as the first four bits and
+//frame as the last four.
+void wl_send_packet(char group, char type, char* data, int len,
+					int dest, char options, char frame);
+
+/*Data Members*/
+
+//used to store incoming and outgoing packets
+unsigned char wl_buf[128];
+//1 if we have timed out since we last checked, 0 otherwise.
+int wl_timeout = 0;
+
+PacketGroupHandler* wl_packet_groups[WL_MAX_PACKET_GROUPS];
+
+#ifndef ROBOT
+timer_t wl_timeout_timer;
+
+//called when we time out, or receive interrupt
+void sig_handler(int signo)
+{
+	switch (signo)
+	{
+		case SIGALRM:
+			wl_timeout = 1;
+			break;
+		case SIGINT:
+			wl_terminate();
+			exit(1);
+			break;
+	}
+	return;
+}
+#endif
+
+/**
+ * Initializes the wireless library. Must be called before any
+ * other function.
+ **/
+void wl_init()
+{
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		wl_packet_groups[i] = NULL;
+
+	xbee_lib_init();
+	
+	//begin timeout timer
+	#ifdef ROBOT
+	rtc_init(HALF_SECOND, &wl_do_timeout); 
+	#else
+	//create a timer to trigger every half second
+	struct sigevent evp;
+	evp.sigev_signo = SIGALRM;
+	evp.sigev_notify = SIGEV_SIGNAL;
+	if (timer_create(CLOCK_REALTIME, &evp, &wl_timeout_timer) == -1)
+	{ 
+		WL_DEBUG_PRINT("Error creating a timer.\r\n"); 
+		exit(1); 
+	}
+	struct sigaction wl_sig_act;
+	wl_sig_act.sa_handler = (void *)sig_handler;
+	wl_sig_act.sa_flags = 0;
+	sigemptyset(&wl_sig_act.sa_mask);
+	sigaction(SIGALRM, &wl_sig_act, 0);
+	sigaction(SIGINT, &wl_sig_act, 0);
+	struct itimerspec wl_timeout_time;
+	wl_timeout_time.it_interval.tv_sec = 0;
+	wl_timeout_time.it_interval.tv_nsec = 500000000;
+	wl_timeout_time.it_value.tv_sec = 0;
+	wl_timeout_time.it_value.tv_nsec = 500000000;
+	timer_settime(wl_timeout_timer, 0,
+                        &wl_timeout_time, NULL);
+	#endif
+}
+
+/**
+ * Uninitializes the wireless library.
+ **/
+void wl_terminate()
+{
+	#ifndef ROBOT
+	timer_delete(wl_timeout_timer);
+	#endif
+	
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		if (wl_packet_groups[i] != NULL &&
+			wl_packet_groups[i]->unregister != NULL)
+			wl_packet_groups[i]->unregister();
+	
+	xbee_terminate();
+}
+
+/**
+ * Set the PAN for the XBee to join.
+ *
+ * @param pan the new PAN
+ *
+ * @see wl_get_pan
+ **/
+void wl_set_pan(int pan)
+{
+	xbee_set_pan_id(pan);
+}
+
+/**
+ * Get the PAN the XBee is currently part of.
+ *
+ * @return the PAN of the XBee
+ *
+ * @see wl_set_pan
+ **/
+int wl_get_pan(void)
+{
+	return xbee_get_pan_id();
+}
+
+/**
+ * Set the channel the XBee is listening to.
+ *
+ * @param channel the new channel to join
+ *
+ * @see wl_get_channel
+ **/
+void wl_set_channel(int channel)
+{
+	xbee_set_channel(channel);
+}
+
+/**
+ * Get the channel the XBee is part of.
+ *
+ * @return the channel the XBee is part of
+ *
+ * @see wl_set_channel
+ **/
+int wl_get_channel(void)
+{
+	return xbee_get_channel();
+}
+
+/**
+ * Returns the 16-bit address of the XBee module.
+ *
+ * @return the 16-bit address of the XBee module.
+ **/
+unsigned int wl_get_xbee_id()
+{
+	return xbee_get_address();
+}
+
+/**
+ * Send a packet to a specific XBee without specifying a PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the 16-bit address of the XBee to send the packet to
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_robot_to_robot_global_packet(char group, char type,
+		char* data, int len, int dest, char frame)
+{
+	wl_send_packet(group, type, data, len, dest,
+			XBEE_OPTIONS_BROADCAST_ALL_PANS, frame);
+}
+
+/**
+ * Send a packet to a specific XBee in the same PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the 16-bit address of the XBee to send the packet to
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_robot_to_robot_packet(char group, char type,
+		char* data, int len, int dest, char frame)
+{
+	wl_send_packet(group, type, data, len, dest, XBEE_OPTIONS_NONE,
+			frame);
+}
+
+/**
+ * Send a packet to all XBees in all PANs.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_global_packet(char group, char type,
+		char* data, int len, char frame)
+{
+	wl_send_packet(group, type, data, len, XBEE_BROADCAST,
+			XBEE_OPTIONS_BROADCAST_ALL_PANS, frame);
+}
+
+/**
+ * Send a packet to all XBee's in the same PAN.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_pan_packet(char group, char type,
+		char* data, int len, char frame)
+{
+	wl_send_packet(group, type, data, len, XBEE_BROADCAST, 
+			XBEE_OPTIONS_NONE, frame);
+}
+
+/**
+ * Send a packet.
+ *
+ * @param group the packet group
+ * @param type the packet type
+ * @param data the packet data
+ * @param len the packet length in bytes
+ * @param dest the destination of the packet
+ * @param options the options for sending the packet
+ * @param frame the frame number to see with a TX_STATUS response
+ **/
+void wl_send_packet(char group, char type, char* data, int len,
+					int dest, char options, char frame)
+{
+	char buf[128];
+	int i;
+	if (frame != 0)
+		frame = (frame & 0x0F) | ((group & 0x0F) << 4);
+	buf[0] = group;
+	buf[1] = type;
+	for (i = 0; i < len; i++)
+		buf[2 + i] = data[i];
+	xbee_send_packet(buf, len + 2, dest, options, frame);
+}
+
+/**
+ * Register a packet group with the wireless library. The event
+ * handlers in the packet group will be called whenever an
+ * event dealing with the packet group's group code occurs.
+ *
+ * @param h the PacketGroupHandler to register
+ **/
+void wl_register_packet_group(PacketGroupHandler* h)
+{
+	if (h->groupCode >= WL_MAX_PACKET_GROUPS)
+	{
+		WL_DEBUG_PRINT("Packet group code too large.\r\n");
+		return;
+	}
+	if (wl_packet_groups[h->groupCode] != NULL)
+	{
+		WL_DEBUG_PRINT("Packet group code already registered.\r\n");
+		return;
+	}
+	wl_packet_groups[h->groupCode] = h;
+}
+
+/**
+ * Unregister a packet group from the wireless library.
+ * 
+ * @param h the packet group to remove
+ **/
+void wl_unregister_packet_group(PacketGroupHandler* h)
+{
+	unsigned int groupCode = h->groupCode;
+	PacketGroupHandler* p = wl_packet_groups[groupCode];
+	if (p != NULL && p->unregister != NULL)
+		p->unregister();
+	wl_packet_groups[groupCode] = NULL;
+}
+
+/**
+ * Called when the timer is triggered. This calls the timeout
+ * handlers of all the registered packet groups.
+ **/
+void wl_do_timeout()
+{
+	int i;
+	for (i = 0; i < WL_MAX_PACKET_GROUPS; i++)
+		if (wl_packet_groups[i] != NULL &&
+			wl_packet_groups[i]->timeout_handler != NULL)
+			wl_packet_groups[i]->timeout_handler();
+}
+
+/**
+ * Performs wireless library functionality. This function must
+ * be called frequently for wireless to perform effectively.
+ * This function will call timeout handlers, as well as
+ * received packet and transmit status handlers.
+ **/
+void wl_do()
+{
+	if (wl_timeout)
+	{
+		wl_do_timeout();
+		wl_timeout = 0;
+	}
+	
+	int len = xbee_get_packet(wl_buf);
+	if (len < 0)//no packet received
+		return;
+	
+	if (wl_buf[0] == XBEE_TX_STATUS)
+	{
+		if (len != 3)
+		{
+			WL_DEBUG_PRINT("Transmit Status packet should be of length 3.\r\n");
+			return;
+		}
+		
+		//the first four bits are the packet group
+		//this only works with under 16 groups
+		int group = (int)(wl_buf[1] >> 4);
+		int success = 0;
+		if (wl_buf[2] == 0)
+			success = 1;
+		else
+		{
+			WL_DEBUG_PRINT("No response received.\r\n");
+			if (wl_buf[2] == 2)
+				WL_DEBUG_PRINT("CCA Failure\r\n");
+			if (wl_buf[2] == 3)
+				WL_DEBUG_PRINT("Purged\r\n");
+		}
+		
+		if (wl_packet_groups[group] != NULL &&
+					wl_packet_groups[group]->handle_response != NULL)
+			wl_packet_groups[group]->handle_response(
+					(int)wl_buf[1] & 0x0F, success);
+		return;
+	}
+	
+	if (wl_buf[0] == XBEE_RX)
+	{
+		if (len < 7)
+		{
+			WL_DEBUG_PRINT("Packet is too small.\r\n");
+			return;
+		}
+		
+		int source = ((int)wl_buf[1] << 8) + ((int)wl_buf[2]);
+		
+		/*
+		//unused for now
+		int signalStrength = wl_buf[3];
+		//1 for Address broadcast, 2 for PAN broadcast
+		int options = wl_buf[4];
+		*/
+		
+		int group = wl_buf[5];
+		int type = wl_buf[6];
+		int packetLen = len - 7;
+		
+		if (wl_packet_groups[group] != NULL
+				&& wl_packet_groups[group]->handle_receive != NULL)
+			wl_packet_groups[group]->handle_receive(type, source, 
+				wl_buf + 7, packetLen);
+		return;
+	}
+	
+	WL_DEBUG_PRINT("Unexpected packet received from XBee.\r\n");
+	return;
+}
+
Index: branches/charge_board/code/lib/src/libwireless/wl_token_ring.c
===================================================================
--- branches/charge_board/code/lib/src/libwireless/wl_token_ring.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libwireless/wl_token_ring.c	(revision 62)
@@ -0,0 +1,804 @@
+#include <wl_token_ring.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <wl_defs.h>
+#include <wireless.h>
+#include <sensor_matrix.h>
+#include <queue.h>
+
+#ifdef ROBOT
+#include <bom.h>
+#include <time.h>
+#endif
+
+#define DEFAULT_SENSOR_MATRIX_SIZE 20
+
+/*Ring States*/
+
+#define NONMEMBER 0
+#define MEMBER 1
+#define JOINING 2
+#define ACCEPTED 3
+#define LEAVING 4
+
+/*Frame Types*/
+#define TOKEN_JOIN_ACCEPT_FRAME 1
+
+/*Function Prototypes*/
+
+/*Wireless Library Prototypes*/
+void wl_token_ring_timeout_handler(void);
+void wl_token_ring_response_handler(int frame, int received);
+void wl_token_ring_receive_handler(char type, int source, unsigned char* packet,
+							int length);
+void wl_token_ring_cleanup(void);
+
+/*Helper Functions*/
+void wl_token_pass_token(void);
+int get_token_distance(int robot1, int robot2);
+void wl_token_get_token(void);
+
+/*Packet Handling Routines*/
+void wl_token_pass_receive(int source, char nextRobot, unsigned char* sensorData, int sensorDataLength);
+void wl_token_interrupt_request_receive(int source, int robot);
+void wl_token_interrupt_pass_receive(int source, int robot);
+void wl_token_bom_on_receive(int source);
+void wl_token_join_receive(int source);
+void wl_token_join_accept_receive(int source);
+
+/*Global Variables*/
+
+//the sensor matrix
+SensorMatrix* sensorMatrix;
+
+//the robot we are waiting to say it has received the token. -1 if unspecified
+int wl_token_next_robot = -1;
+
+//true if the robot should be in the token ring, 0 otherwise
+int ringState = NONMEMBER;
+//the id of the robot who accepted us into the token ring, only used in ACCEPTED state
+int acceptor = -1;
+//id of the robot we are accepting
+int accepted = -1;
+
+//the counter for when we assume a robot is dead
+int deathDelay = -1;
+//the counter for joining, before we form our own token ring
+int joinDelay = -1;
+//queue containing ids of interruption requests
+Queue* interrupting = NULL;
+
+//current robot to check in the iterator
+int iteratorCount = 0;
+
+#ifdef ROBOT
+void (*bom_on_function) (void) = bom_on;
+void (*bom_off_function) (void) = bom_off;
+int (*get_max_bom_function) (void) = get_max_bom;
+#else
+void do_nothing(void) {}
+int get_nothing(void) {return -1;}
+void (*bom_on_function) (void) = do_nothing;
+void (*bom_off_function) (void) = do_nothing;
+int (*get_max_bom_function) (void) = get_nothing;
+#endif
+
+PacketGroupHandler wl_token_ring_handler =
+		{WL_TOKEN_RING_GROUP, wl_token_ring_timeout_handler,
+		wl_token_ring_response_handler, wl_token_ring_receive_handler,
+		wl_token_ring_cleanup};
+
+/**
+ * Initialize the token ring packet group and register it with the
+ * wireless library. The robot will not join a token ring.
+ **/
+void wl_token_ring_register()
+{
+	if (wl_get_xbee_id() > 0xFF)
+	{
+		//Note: if this becomes an issue (unlikely), we could limit sensor information
+		//to half a byte and use 12 bits for the id
+		WL_DEBUG_PRINT("XBee ID must be single byte for token ring, is ");
+		WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+		WL_DEBUG_PRINT(".\r\n");
+		return;
+	}
+	
+	sensorMatrix = sensor_matrix_create();
+	interrupting = queue_create();
+	//add ourselves to the sensor matrix
+	sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 0);
+
+	wl_register_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Removes the packet group from the wireless library.
+ **/
+void wl_token_ring_unregister()
+{
+	wl_unregister_packet_group(&wl_token_ring_handler);
+}
+
+/**
+ * Sets the functions that are called when the BOM ought to be
+ * turned on or off. This could be used for things such as 
+ * charging stations, which have multiple BOMs.
+ *
+ * @param on_function the function to be called when the BOM
+ * should be turned on
+ * @param off_function the function to be called when the BOM
+ * should be turned off
+ * @param max_bom_function the function to be called when a
+ * measurement of the maximum BOM reading is needed.
+ **/
+void wl_token_ring_set_bom_functions(void (*on_function) (void),
+	void (*off_function) (void), int (*max_bom_function) (void))
+{
+	bom_on_function = on_function;
+	bom_off_function = off_function;
+	get_max_bom_function = max_bom_function;
+}
+
+/**
+ * Called to cleanup the token ring packet group.
+ **/
+void wl_token_ring_cleanup()
+{
+	sensor_matrix_destroy(sensorMatrix);
+	queue_destroy(interrupting);
+}
+
+/**
+ * Called approximately every quarter second by the wireless library.
+ **/
+void wl_token_ring_timeout_handler()
+{
+	//someone is not responding, assume they are dead
+	if (deathDelay == 0)
+	{
+		//pass the token to the next robot if we think someone has died
+		//also, declare that person dead, as long as it isn't us
+		if (wl_token_next_robot != wl_get_xbee_id())
+		{
+			sensor_matrix_set_in_ring(sensorMatrix, wl_token_next_robot, 0);
+			WL_DEBUG_PRINT("Robot ");
+			WL_DEBUG_PRINT_INT(wl_token_next_robot);
+			WL_DEBUG_PRINT(" has died.\r\n");
+		}
+		
+		// we may have been dropped from the ring when this is received
+		if (ringState == MEMBER)
+			wl_token_pass_token();
+	}
+
+	//we must start our own token ring, no one is responding to us
+	if (joinDelay == 0)
+	{
+		if (sensor_matrix_get_joined(sensorMatrix) == 0)
+		{
+			WL_DEBUG_PRINT("Creating our own token ring, no robots seem to exist.\r\n");
+			sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 1);
+			ringState = MEMBER;
+			//this will make us pass the token to ourself
+			//repeatedly, and other robots when they join
+			deathDelay = DEATH_DELAY;
+			wl_token_next_robot = wl_get_xbee_id();
+		}
+		else
+		{
+			WL_DEBUG_PRINT("Attempting to join the token ring again.\r\n");
+			//attempt to rejoin with a random delay
+			wl_token_ring_join();
+			joinDelay = rand() / (RAND_MAX / JOIN_DELAY) + 1;
+		}
+	}
+
+	if (deathDelay >= 0)
+		deathDelay--;
+	if (joinDelay >= 0)
+		joinDelay--;
+}
+
+/**
+ * Called when the XBee tells us if a packet we sent has been received.
+ * 
+ * @param frame the frame number assigned when the packet was sent
+ * @param received 1 if the packet was received, 0 otherwise
+ **/
+void wl_token_ring_response_handler(int frame, int received)
+{
+	if (!received)
+	{
+		WL_DEBUG_PRINT("FAILED.\r\n");
+	}
+}
+
+/**
+ * Called when we recieve a token ring packet.
+ * @param type the type of the packet
+ * @param source the id of the robot who sent the packet
+ * @param packet the data in the packet
+ * @param length the length of the packet in bytes
+ **/
+void wl_token_ring_receive_handler(char type, int source, unsigned char* packet,
+							int length)
+{
+	switch (type)
+	{
+		case WL_TOKEN_PASS:
+			if (length < 1)
+			{
+				WL_DEBUG_PRINT("Malformed Token Pass packet received.\r\n");
+				return;
+			}
+			wl_token_pass_receive(source, packet[0], packet + 1, length - 1);
+			break;
+		case WL_TOKEN_BOM_ON:
+			//add the robot to the sensor matrix if it is not already there
+			wl_token_bom_on_receive(source);
+			break;
+		case WL_TOKEN_INTERRUPT_REQUEST:
+			wl_token_interrupt_request_receive(source, packet[0]);
+			break;
+		case WL_TOKEN_INTERRUPT_PASS:
+			wl_token_interrupt_pass_receive(source, packet[0]);
+			break;
+		case WL_TOKEN_JOIN:
+			wl_token_join_receive(source);
+			break;
+		case WL_TOKEN_JOIN_ACCEPT:
+			wl_token_join_accept_receive(source);
+			break;
+		default:
+			WL_DEBUG_PRINT("Unimplemented token ring packet received.\r\n");
+			break;
+	}
+}
+
+/**
+ * Causes the robot to join an existing token ring, or create one
+ * if no token ring exists. The token ring uses global and robot to robot
+ * packets, and does not rely on any PAN.
+ **/
+void wl_token_ring_join()
+{
+	WL_DEBUG_PRINT("Joining the token ring.\r\n");
+	ringState = JOINING;
+	joinDelay = JOIN_DELAY;
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_JOIN,
+		NULL, 0, 0);
+}
+
+/**
+ * Causes the robot to leave the token ring. The robot stops
+ * alerting others of its location, but continues storing the
+ * locations of other robots.
+ **/
+void wl_token_ring_leave()
+{
+	ringState = LEAVING;
+}
+
+/**
+ * Requests that the specified robot be given the token and
+ * allowed to flash its BOM. After its BOM is flashed, the
+ * token will return to the robot who sent it.
+ *
+ * @param robot the ID of the robot which should flash its BOM
+ **/
+void wl_token_request(int robot)
+{
+	char buf[1];
+	buf[0] = robot;
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_INTERRUPT_REQUEST,
+		buf, 1, 0);
+}
+
+/**
+ * Returns the BOM reading robot source has for robot dest.
+ *
+ * @param source the robot that made the BOM reading
+ * @param dest the robot whose relative location is returned
+ *
+ * @return a BOM reading from robot source to robot dest,
+ * in the range 0-15, or -1 if it is unknown
+ **/
+int wl_token_get_sensor_reading(int source, int dest)
+{
+	return sensor_matrix_get_reading(sensorMatrix, source, dest);
+}
+
+/**
+ * Returns the BOM reading we have for robot dest.
+ * 
+ * @param dest the robot whose relative location is returned
+ *
+ * @return a BOM reading from us to robot dest, in the range
+ * 0-15, or -1 if it is unkown
+ **/
+int wl_token_get_my_sensor_reading(int dest)
+{
+	return wl_token_get_sensor_reading(wl_get_xbee_id(), dest);
+}
+
+/**
+ * This method is called when we receive a token pass packet.
+ * @param source is the robot it came from
+ * @param nextRobot is the robot the token was passed to
+ * @param sensorData a char with an id followed by a char with the sensor
+ *		reading for that robot, repeated for sensorDataLength bytes
+ * @param sensorDataLength the length in bytes of sensorData
+ */
+void wl_token_pass_receive(int source, char nextRobot, unsigned char* sensorData, int sensorDataLength)
+{
+	int i, j;
+	deathDelay = -1;
+
+	WL_DEBUG_PRINT("Received the token, next robot is ");
+	WL_DEBUG_PRINT_INT((int)nextRobot);
+	WL_DEBUG_PRINT(" \r\n");
+	sensor_matrix_set_in_ring(sensorMatrix, source, 1);
+
+	//with this packet, we are passed the id of the next robot in the ring
+	//and the sensor matrix, a list of id and sensor reading pairs (two bytes for both)
+	j = 0;
+	for (i = 0; i < sensor_matrix_get_size(sensorMatrix); i++)
+	{
+		if (i == source)
+			continue;
+		
+		//set the sensor information we receive
+		if (j < sensorDataLength / 2 && sensorData[2 * j] == i)
+		{
+			//the robot we were going to accept has already been accepted
+			if (accepted == i)
+			{
+				accepted = -1;
+				WL_DEBUG_PRINT("Someone accepted the robot we did.\r\n");
+			}
+			sensor_matrix_set_reading(sensorMatrix, source, i,
+						sensorData[2 * j + 1]);
+			sensor_matrix_set_in_ring(sensorMatrix, i, 1);
+			j++;
+		}
+		else
+		{
+			if (sensor_matrix_get_in_ring(sensorMatrix, i))
+			{
+				WL_DEBUG_PRINT("Robot ");
+				WL_DEBUG_PRINT_INT(i);
+				WL_DEBUG_PRINT(" has been removed from the sensor matrix of robot ");
+				WL_DEBUG_PRINT_INT(wl_get_xbee_id());
+				WL_DEBUG_PRINT(" due to a packet from robot ");
+				WL_DEBUG_PRINT_INT(source);
+				WL_DEBUG_PRINT(".\r\n");
+				sensor_matrix_set_in_ring(sensorMatrix, i, 0);
+			}
+
+			if (i == wl_get_xbee_id() && ringState == MEMBER)
+			{
+				ringState = NONMEMBER;
+				wl_token_ring_join();
+				
+				WL_DEBUG_PRINT("We have been removed from the ring ");
+				WL_DEBUG_PRINT("and are rejoining.\r\n");
+			}
+			
+			//the person who accepted us is dead... let's ask again
+			if (i == acceptor)
+			{
+				sensor_matrix_set_in_ring(sensorMatrix,
+						wl_get_xbee_id(), 1);
+				ringState = NONMEMBER;
+				acceptor = -1;
+				wl_token_ring_join();
+			}
+		}
+	}
+
+	wl_token_next_robot = nextRobot;
+	
+	deathDelay = get_token_distance(wl_get_xbee_id(), nextRobot) * DEATH_DELAY;
+	
+	//we have the token
+	if (wl_token_next_robot == wl_get_xbee_id())
+		wl_token_get_token();
+}
+
+/**
+ * Gets the distance in the token ring between two robots.
+ *
+ * @param robot1 the first robot
+ * @param robot2 the second robot
+ *
+ * @return the number of passes before the token is expected
+ * to reach robot2 from robot1
+ **/
+int get_token_distance(int robot1, int robot2)
+{
+	int curr = robot1 + 1;
+	int count = 1;
+	while (1)
+	{
+		if (curr == sensor_matrix_get_size(sensorMatrix))
+			curr = 0;
+		if (curr == robot2)
+			break;
+		if (sensor_matrix_get_in_ring(sensorMatrix, curr))
+			count++;
+		curr++;
+	}
+	return count;
+}
+
+/**
+ * Passes the token to the next robot in the token ring.
+ **/
+void wl_token_pass_token()
+{
+	char nextRobot;
+	int i = wl_get_xbee_id() + 1;
+	if (accepted == -1)
+	{
+		while (1)
+		{
+			if (i == sensor_matrix_get_size(sensorMatrix))
+				i = 0;
+			if (sensor_matrix_get_in_ring(sensorMatrix, i))
+			{
+				nextRobot = (char)i;
+				break;
+			}
+			i++;
+		}
+	}
+	else
+	{
+		WL_DEBUG_PRINT("Accepting new robot, sending it the token.\r\n");
+		//add a new robot to the token ring
+		sensor_matrix_set_in_ring(sensorMatrix, accepted, 1);
+		nextRobot = accepted;
+		accepted = -1;
+	}
+
+	//we don't include ourself
+	int packetSize = 1 + 2 * (sensor_matrix_get_joined(sensorMatrix) - 1);
+	char* buf = (char*)malloc(packetSize * sizeof(char));
+	if (!buf)
+	{
+		WL_DEBUG_PRINT_INT(packetSize);
+		WL_DEBUG_PRINT("Out of memory - pass token.\r\n");
+		return;
+	}
+	buf[0] = nextRobot;
+
+	int j = 0;
+	for (i = 0; i < sensor_matrix_get_size(sensorMatrix); i++)
+		if (sensor_matrix_get_in_ring(sensorMatrix, i) && i != wl_get_xbee_id())
+		{
+			buf[2*j + 1] = i;
+			buf[2*j + 2] = sensor_matrix_get_reading(sensorMatrix, wl_get_xbee_id(), i);
+			j++;
+		}
+	
+	WL_DEBUG_PRINT("Passing the token to robot ");
+	WL_DEBUG_PRINT_INT(buf[0]);
+	WL_DEBUG_PRINT(".\r\n");
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_PASS,
+		buf, packetSize, 3);
+
+	wl_token_next_robot = nextRobot;
+	deathDelay = DEATH_DELAY;
+	free(buf);
+}
+
+/**
+ * Called when a packet is received stating that another robot has turned
+ * its BOM on. Our BOM is then read, and the data is added to the sensor
+ * matrix.
+ *
+ * @param source the robot whose BOM is on
+ **/
+void wl_token_bom_on_receive(int source)
+{
+	WL_DEBUG_PRINT("Robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(" has flashed its bom.\r\n");
+	sensor_matrix_set_reading(sensorMatrix, wl_get_xbee_id(), 
+		source, get_max_bom_function());
+}
+
+/**
+ * This method is called when we receive the token. Upon receiving
+ * the token, we must send a BOM_ON packet, flash the BOM, and send
+ * the token to the next robot.
+ * 
+ * If there is a pending request for the token, this is processed first.
+ **/
+void wl_token_get_token()
+{
+	WL_DEBUG_PRINT("We have the token.\r\n");
+	if (ringState == ACCEPTED)
+	{
+		sensor_matrix_set_in_ring(sensorMatrix,
+			wl_get_xbee_id(), 1);
+		WL_DEBUG_PRINT("Now a member of the token ring.\r\n");
+		ringState = MEMBER;
+	}
+
+	if (ringState == LEAVING || ringState == NONMEMBER)
+	{
+		sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 0);
+		if (ringState == NONMEMBER)
+		{
+			WL_DEBUG_PRINT("We should have left the token ring, but didn't.\r\n");
+		}
+		return;
+	}
+	
+	//check for interruption requests
+	if (queue_size(interrupting) > 0)
+	{
+		char buf[1];
+		buf[0] = (char)(int)queue_remove(interrupting);
+		
+		//in case this robot has requested multiple times
+		queue_remove_all(interrupting, (void*)(int)buf[0]);
+
+		wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_INTERRUPT_PASS,
+			buf, 1, 0);
+
+		deathDelay = DEATH_DELAY;
+		wl_token_next_robot = buf[0];
+		return;
+	}
+
+	WL_DEBUG_PRINT("Our BOM has been flashed.\r\n");
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_BOM_ON,
+		NULL, 0, 0);
+
+	bom_on_function();
+	#ifdef ROBOT
+	delay_ms(BOM_DELAY);
+	#endif
+	bom_off_function();
+	
+	if (!sensor_matrix_get_in_ring(sensorMatrix, wl_get_xbee_id()))
+	{
+		WL_DEBUG_PRINT("Removed from sensor matrix while flashing BOM.\r\n");
+	}
+	
+	wl_token_pass_token();
+}
+
+/**
+ * Called when a request to join the token ring is received.
+ * If we are the robot preceding the requester in the ring,
+ * we respond with a JOIN_ACCEPT packet and pass the token to
+ * this robot when we receive the token.
+ *
+ * @param source the robot who requested to join
+ **/
+void wl_token_join_receive(int source)
+{
+	WL_DEBUG_PRINT("Received joining request from robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(".\r\n");
+
+	//we cannot accept the request if we are not a member
+	if (ringState != MEMBER)
+		return;
+	//if they didn't get our response, see if we should respond again
+	if (accepted == source)
+		accepted = -1;
+	//we can only accept one request at a time
+	if (accepted != -1)
+		return;
+	
+	//check if we are the preceding robot in the token ring
+	int i = source - 1;
+	while (1)
+	{
+		if (i < 0)
+			i = sensor_matrix_get_size(sensorMatrix) - 1;
+		//we must send a join acceptance
+		if (i == wl_get_xbee_id())
+			break;
+
+		//another robot will handle it
+		if (sensor_matrix_get_in_ring(sensorMatrix, i))
+			return;
+		i--;
+	}
+
+	accepted = source;
+	wl_send_robot_to_robot_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_JOIN_ACCEPT,
+		NULL, 0, source, TOKEN_JOIN_ACCEPT_FRAME);
+	
+	WL_DEBUG_PRINT("Accepting robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(" into the token ring.\r\n");
+
+	joinDelay = -1;
+	
+	// the token ring has not started yet
+	if (sensor_matrix_get_joined(sensorMatrix) == 1)
+		wl_token_pass_token();
+}
+
+/**
+ * Called when we receive a JOIN_ACCEPT packet in attempting to join
+ * the token ring.
+ * Our attempt to join the ring is stopped, and we wait for the token.
+ *
+ * @param source the robot who accepted us
+ **/
+void wl_token_join_accept_receive(int source)
+{
+	WL_DEBUG_PRINT("Accepted into the token ring by robot ");
+	WL_DEBUG_PRINT_INT(source);
+	WL_DEBUG_PRINT(".\r\n");
+	joinDelay = -1;
+	ringState = ACCEPTED;
+	acceptor = source;
+
+	//add ourselves to the token ring
+	sensor_matrix_set_in_ring(sensorMatrix, wl_get_xbee_id(), 1);
+}
+
+/**
+ * Called when we receive a packet passing the token and interrupting
+ * the token ring.
+ * If the token has been passed to us, we flash our BOM
+ * and pass it back.
+ *
+ * @param source the robot who sent the interrupt packet
+ * @param robot the robot the token has been passed to
+ **/
+void wl_token_interrupt_pass_receive(int source, int robot)
+{
+	if (wl_get_xbee_id() != robot)
+	{
+		queue_remove_all(interrupting, (void*)robot);
+		wl_token_next_robot = robot;
+		deathDelay = DEATH_DELAY + rand() / (RAND_MAX / (2 * DEATH_DELAY));
+		return;
+	}
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_BOM_ON,
+		NULL, 0, 0);
+	
+	bom_on_function();
+	#ifdef ROBOT
+	delay_ms(BOM_DELAY);
+	#endif
+	bom_off_function();
+
+	//we don't include ourself, only if we are in the ring
+	int packetSize = 1 + 2 * (sensor_matrix_get_joined(sensorMatrix) - 1);
+	if (!sensor_matrix_get_in_ring(sensorMatrix, wl_get_xbee_id()))
+		packetSize += 2;
+	char* buf = (char*)malloc(packetSize * sizeof(char));
+	if (!buf)
+	{
+		WL_DEBUG_PRINT("Out of memory - pass_receive.\r\n");
+		return;
+	}
+	
+	//return the token to where we got it from
+	buf[0] = source;
+
+	int i = 0, j = 0;
+	for (i = 0; i < sensor_matrix_get_size(sensorMatrix); i++)
+		if (sensor_matrix_get_in_ring(sensorMatrix, i) && i != wl_get_xbee_id())
+		{
+			buf[2*j + 1] = i;
+			buf[2*j + 2] = sensor_matrix_get_reading(sensorMatrix, wl_get_xbee_id(), i);
+			j++;
+		}
+	
+	wl_send_global_packet(WL_TOKEN_RING_GROUP, WL_TOKEN_PASS,
+		buf, packetSize, 0);
+
+	wl_token_next_robot = source;
+	deathDelay = DEATH_DELAY;
+	free(buf);
+}
+
+/**
+ * Returns the number of robots in the token ring.
+ *
+ * @return the number of robots in the token ring
+ **/
+int wl_token_get_robots_in_ring(void)
+{
+	return sensor_matrix_get_joined(sensorMatrix);
+}
+
+/**
+ * Returns true if the specified robot is in the token ring, false
+ * otherwise.
+ *
+ * @param robot the robot to check for whether it is in the token ring
+ * @return nonzero if the robot is in the token ring, zero otherwise
+ **/
+int wl_token_is_robot_in_ring(int robot)
+{
+	return sensor_matrix_get_in_ring(sensorMatrix, robot);
+}
+
+/**
+ * Begins iterating through the robots in the token ring.
+ *
+ * @see wl_token_iterator_has_next, wl_token_iterator_next
+ **/
+void wl_token_iterator_begin(void)
+{
+	int i;
+	iteratorCount = 0;
+	while (!sensor_matrix_get_in_ring(sensorMatrix, i) &&
+			i < sensor_matrix_get_size(sensorMatrix))
+		i++;
+	if (i == sensor_matrix_get_size(sensorMatrix))
+		i = -1;
+}
+
+/**
+ * Returns true if there are more robots in the token ring
+ * to iterate through, and false otherwise.
+ *
+ * @return nonzero if there are more robots to iterate through,
+ * zero otherwise
+ *
+ * @see wl_token_iterator_begin, wl_token_iterator_next
+ **/
+int wl_token_iterator_has_next(void)
+{
+	return iteratorCount == -1;
+}
+
+/**
+ * Returns the next robot ID in the token ring.
+ *
+ * @return the next robot ID in the token ring, or -1 if none exists
+ *
+ * @see wl_token_iterator_begin, wl_token_iterator_has_next
+ **/
+int wl_token_iterator_next(void)
+{
+	int result = iteratorCount;
+	if (result < 0)
+		return result;
+
+	iteratorCount++;
+	while (!sensor_matrix_get_in_ring(sensorMatrix, iteratorCount) &&
+		iteratorCount < sensor_matrix_get_size(sensorMatrix))
+		iteratorCount++;
+	if (iteratorCount == sensor_matrix_get_size(sensorMatrix))
+		iteratorCount = -1;
+	return result;
+}
+
+/**
+ * Called when we receive a request to interrupt the token ring.
+ * We add the robot to our list of interrupt requests,
+ * and will send the token to this robot when we next receive the
+ * token, unless someone else does so first.
+ *
+ * @param source the robot requesting interruption
+ * @param robt the robot requested to interrupt the token ring
+ **/
+void wl_token_interrupt_request_receive(int source, int robot)
+{
+	queue_add(interrupting, (void*)robot);
+}
+
+int wl_token_get_num_robots(void){
+  return sensor_matrix_get_joined(sensorMatrix);
+}
+
+int wl_token_get_matrix_size(void){
+  return sensor_matrix_get_size(sensorMatrix);
+}
Index: branches/charge_board/code/lib/src/libwireless/queue.c
===================================================================
--- branches/charge_board/code/lib/src/libwireless/queue.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libwireless/queue.c	(revision 62)
@@ -0,0 +1,152 @@
+#include "queue.h"
+#include <wl_defs.h>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+/**
+ * @struct node_def
+ * A node in the queue.
+ **/
+typedef struct node_def
+{
+	/** The item at this point in the queue. **/
+	void* val;
+	/** The next node in the queue. **/
+	struct node_def* next;
+} Node;
+
+/**
+ * Create a queue.
+ *
+ * @return the newly created queue.
+ **/
+Queue* queue_create()
+{
+	Queue* q = (Queue*)malloc(sizeof(Queue));
+	q->head = NULL;
+	q->size = 0;
+	return q;
+}
+
+/**
+ * Destroys a queue, freeing memory.
+ *
+ * @param q the queue to destroy
+ **/
+void queue_destroy(Queue* q)
+{
+	Node* t = q->head;
+	while (t != NULL)
+	{
+		Node* t2 = t->next;
+		free(t);
+		t = t2;
+	}
+	free(q);
+}
+
+/**
+ * Add an element to a queue.
+ *
+ * @param q the queue to add an element to
+ * @param item the item to add to the queue
+ **/
+void queue_add(Queue* q, void* item)
+{
+	Node* n = (Node*)malloc(sizeof(Node));
+	n->val = item;
+	n->next = NULL;
+	
+	if (q->head == NULL)
+	{
+		q->head = n;
+		q->tail = n;
+	}
+	else
+	{
+		q->tail->next = n;
+		q->tail = n;
+	}
+	
+	q->size++;
+}
+
+/**
+ * Remove an element from the front of a queue.
+ *
+ * @param q the queue to remove the element from
+ *
+ * @return the element which was removed
+ **/
+void* queue_remove(Queue* q)
+{
+	Node* first = q->head;
+	if (first == NULL)
+	{
+		WL_DEBUG_PRINT("Attempting to remove item \
+			from empty queue.\r\n");
+		WL_DEBUG_PRINT_INT(queue_size(q));
+	}
+	void* ret = first->val;
+	q->head = first->next;
+	if (q->tail == first)
+		q->tail = NULL;
+	free(first);
+	q->size--;
+	return ret;
+}
+
+/**
+ * Remove all instances of a given element from a queue.
+ *
+ * @param q the queue to remove the elements from
+ * @param item the element to remove all instances of
+ **/
+void queue_remove_all(Queue* q, void* item)
+{
+	Node* curr = q->head;
+	Node* prev = NULL;
+	
+	while (curr != NULL)
+	{
+		Node* next = curr->next;
+		if (curr->val == item)
+		{
+			if (q->head == curr)
+				q->head = next;
+			if (q->tail == curr)
+				q->tail = prev;
+			if (prev != NULL)
+				prev->next = next;
+			free(curr);
+			q->size--;
+		}
+		else
+			prev = curr;
+		curr = next;
+	}
+}
+
+/**
+ * Get the number of elements in the queue.
+ *
+ * @param q the queue to get the size of
+ * @return the size of the queue
+ **/
+int queue_size(Queue* q)
+{
+	return q->size;
+}
+
+/**
+ * Check if the queue is empty.
+ * 
+ * @param q the queue to check
+ * @return nonzero if the queue is empty, 0 otherwise
+ **/
+int queue_is_empty(Queue* q)
+{
+	return q->size == 0;
+}
+
Index: branches/charge_board/code/lib/src/libwireless/wl_error_group.c
===================================================================
--- branches/charge_board/code/lib/src/libwireless/wl_error_group.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libwireless/wl_error_group.c	(revision 62)
@@ -0,0 +1,88 @@
+#include "wl_error_group.h"
+
+#include <wireless.h>
+#include <wl_defs.h>
+#include <stdio.h>
+#include <string.h>
+
+
+void wl_error_response_receive(int frame, int received);
+void wl_error_handle_receive(char type, int source, unsigned char* packet,
+							int length);
+
+PacketGroupHandler wl_error_handler =
+		{WL_ERROR_GROUP, NULL,
+		wl_error_response_receive, wl_error_handle_receive, NULL};
+
+void wl_error_response_receive(int frame, int received)
+{
+	WL_DEBUG_PRINT("Response received.\r\n");
+	if (!received)
+	{
+		WL_DEBUG_PRINT("FAILED.\r\n");
+	}
+}
+/**
+ * Register this packet group with the wireless library.
+ * This function must be called before any other wl_error
+ * function.
+ **/
+void wl_error_register(void)
+{
+	wl_register_packet_group(&wl_error_handler);
+}
+
+/**
+ * Unregister this packet group with the wireless library.
+ * This function must be called after wl_error_register.
+ *
+ * @see wl_error_register
+ **/
+void wl_error_unregister(void)
+{
+	wl_unregister_packet_group(&wl_error_handler);
+}
+
+/**
+ * Handles receiving an error packet.
+ *
+ * @param type the packet type
+ * @param source the 16-bit address of the packet's sender
+ * @param packet the packet data
+ * @param length the length in bytes of the packet
+ **/
+void wl_error_handle_receive(char type, int source, unsigned char* packet,
+							int length)
+{
+	switch (type)
+	{
+		case WL_ERROR_STRING_TYPE:
+			if (packet[length - 1] != 0)
+			{
+				WL_DEBUG_PRINT(
+					"Error packet string should be null terminated.\r\n");
+				break;
+			}
+			WL_DEBUG_PRINT("Error packet received from robot ");
+			WL_DEBUG_PRINT_INT(source);
+			WL_DEBUG_PRINT(":\r\n");
+			WL_DEBUG_PRINT((char*)packet);
+			WL_DEBUG_PRINT("\r\n");
+			break;
+		default:
+			WL_DEBUG_PRINT("Error packet of unknown type received.\r\n");
+			break;
+	}
+}
+
+/**
+ * Send an error message as a string.
+ * 
+ * @param str the error message to send
+ **/
+void wl_error_send_string(char* str)
+{
+	wl_send_global_packet(WL_ERROR_GROUP, WL_ERROR_STRING_TYPE,
+		str, strlen(str) + 1, 1);
+}
+
Index: branches/charge_board/code/lib/src/libwireless/sensor_matrix.c
===================================================================
--- branches/charge_board/code/lib/src/libwireless/sensor_matrix.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libwireless/sensor_matrix.c	(revision 62)
@@ -0,0 +1,267 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <wl_defs.h>
+
+#include "sensor_matrix.h"
+
+#define DEFAULT_SENSOR_MATRIX_SIZE 20
+
+/*Sensor Matrix Functions*/
+void sensor_matrix_expand(SensorMatrix* m, int nextSize);
+
+/**
+ * Initializes the sensor matrix.
+ *
+ * @return the newly created sensor matrix
+ **/
+SensorMatrix* sensor_matrix_create()
+{
+	SensorMatrix* m;
+	int i;
+	
+	m = malloc(sizeof(SensorMatrix));
+	if (!m)
+	{
+		WL_DEBUG_PRINT("Out of memory - create sensor matrix.\r\n");
+		return NULL;
+	}
+	m->size = DEFAULT_SENSOR_MATRIX_SIZE;
+	m->matrix = malloc(m->size * sizeof(int*));
+	m->joined = malloc(m->size * sizeof(int));
+	m->numJoined = 0;
+	if (!(m->matrix) || !(m->joined))
+	{
+		WL_DEBUG_PRINT("Out of memory - create sensor matrix 2.\r\n");
+		return NULL;
+	}
+	
+	for (i = 0; i < m->size; i++)
+	{
+		m->matrix[i] = NULL;
+		m->joined[i] = 0;
+	}
+	return m;
+}
+
+/**
+ * Deletes and frees memory from the sensor matrix.
+ *
+ * @param m the sensor matrix to delete
+ **/
+void sensor_matrix_destroy(SensorMatrix* m)
+{
+	int i;
+	for (i = 0; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+			free(m->matrix[i]);
+	free(m->matrix);
+	free(m->joined);
+	free(m);
+}
+
+/**
+ * Adds robot with XBee id id to the sensor matrix.
+ * 
+ * @param m the sensor matrix
+ * @param id the XBee ID of the robot to add
+ **/
+void sensor_matrix_add_robot(SensorMatrix* m, unsigned int id)
+{
+	int i;
+	if (id >= m->size)
+		sensor_matrix_expand(m, id + 1);
+	if (m->matrix[id] != NULL)
+		return;
+	
+	m->matrix[id] = malloc(m->size * sizeof(int));
+	if (!(m->matrix[id]))
+	{
+		WL_DEBUG_PRINT("Out of memory - add robot.\r\n");
+		return;
+	}
+
+	for (i = 0; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+			m->matrix[i][id] = -1;
+}
+
+/**
+ * Removes robot with id from the sensor matrix, and removes
+ * all sensor information regarding the robot.
+ *
+ * @param m the sensor matrix
+ * @param id the XBee ID of the robot to remove
+ **/
+void sensor_matrix_remove_robot(SensorMatrix* m, unsigned int id)
+{
+	int i;
+
+	if (id >= m->size || m->matrix[id] == NULL)
+	{
+		WL_DEBUG_PRINT("Removing robot not added to matrix.\r\n");
+		return;
+	}
+	
+	free(m->matrix[id]);
+	m->matrix[id] = NULL;
+	
+	for (i = 0 ; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+			m->matrix[i][id] = -1;
+	
+	m->joined[id] = 0;
+}
+
+/**
+ * Expands the size of the sensor matrix if an id number we attempt
+ * to add is too large.
+ *
+ * @param m the sensor matrix to expand
+ * @param size the new size of the sensor matrix
+ **/
+//Note: this has probably not been tested, hopefully it works
+void sensor_matrix_expand(SensorMatrix* m, int nextSize)
+{
+	int i, j;
+	WL_DEBUG_PRINT("Expanding sensor matrix.\r\n");
+	
+	int** tempMatrix = malloc(nextSize * sizeof(int*));
+	if (!tempMatrix)
+	{
+		WL_DEBUG_PRINT("Out of memory - expand matrix.\r\n");
+		return;
+	}
+	
+	for (i = 0; i < nextSize; i++)
+		tempMatrix[i] = NULL;
+	
+	//copy over old sensor data
+	for (i = 0; i < m->size; i++)
+		if (m->matrix[i] != NULL)
+		{
+			tempMatrix[i] = malloc(nextSize * sizeof(int));
+			if (!tempMatrix[i])
+			{
+				WL_DEBUG_PRINT("Out of memory - expand matrix 2.\r\n");
+				return;
+			}
+			for (j = 0; j < m->size; j++)
+				tempMatrix[i][j] = m->matrix[i][j];
+			for (j = m->size; j < nextSize; j++)
+				tempMatrix[i][j] = -1;
+			
+			free(m->matrix[i]);
+		}
+	
+	free(m->matrix);
+	m->matrix = tempMatrix;
+	m->size = nextSize;
+
+	//expand the size of joined
+	int* tempJoined = malloc(nextSize * sizeof(int));
+	if (!tempJoined)
+	{
+		WL_DEBUG_PRINT("Out of memory - expand matrix 3.\r\n");
+		return;
+	}
+	
+	for (i = 0; i < m->size; i++)
+		tempJoined[i] = m->joined[i];
+	for (i = m->size; i < nextSize; i++)
+		tempJoined[i] = 0;
+	
+	free(m->joined);
+	m->joined = tempJoined;
+}
+
+/**
+ * Sets the sensor reading for robot robot to reading.
+ * 
+ * @param m the sensor matrix to set the reading for
+ * @param observer the id of the robot who made the reading
+ * @param robot the id of the robot who the reading is for
+ * @param reading the BOM reading from observer to robot
+ */
+void sensor_matrix_set_reading(SensorMatrix* m, int observer, int robot, int reading)
+{
+	if (robot >= m->size || observer >= m->size || m->matrix[observer] == NULL)
+		sensor_matrix_add_robot(m, observer);
+	m->matrix[observer][robot] = reading;
+}
+
+/**
+ * Gets the sensor reading for a robot to another robot.
+ *
+ * @param m the sensor matrix
+ * @param observer the robot whose reading we check
+ * @param robot the robot who we are checking the reading to
+ *
+ * @return the observer's BOM reading for robot
+ **/
+int sensor_matrix_get_reading(SensorMatrix* m, int observer, int robot)
+{
+	if (observer >= m->size || robot >= m->size)
+		return -1;
+	return m->matrix[observer][robot];
+}
+
+/**
+ * Sets whether or not the given robot is part of the token ring.
+ *
+ * @param m the sensor matrix
+ * @param robot the robot to set as a member / nonmember of the token ring
+ * @param in 1 if the robot is in the token ring, 0 otherwise
+ **/
+void sensor_matrix_set_in_ring(SensorMatrix* m, int robot, int in)
+{
+	if (robot >= m->size)
+		sensor_matrix_expand(m, robot + 1);
+	if (in == 1)
+		sensor_matrix_add_robot(m, robot);
+	if (in == 1 && m->joined[robot] == 0)
+		m->numJoined++;
+	if (in == 0 && m->joined[robot] == 1)
+		m->numJoined--;
+	m->joined[robot] = in;
+}
+
+/**
+ * Checks if the given robot is in the token ring.
+ * 
+ * @param m the sensor matrix
+ * @param robot the ID of the robot to check
+ *
+ * @return 1 if the robot is in the token ring, 0 otherwise
+ **/
+int sensor_matrix_get_in_ring(SensorMatrix* m, int robot)
+{
+	if (robot >= m->size)
+		return -1;
+	return m->joined[robot];
+}
+
+/**
+ * Returns the size of the sensor matrix.
+ *
+ * @param m the sensor matrix
+ * 
+ * @return the size of the sensor matrix
+ **/
+int sensor_matrix_get_size(SensorMatrix* m)
+{
+	return m->size;
+}
+
+/**
+ * Returns the number of robots which have joined the
+ * token ring.
+ *
+ * @param m the sensor matrix
+ *
+ * @return the number of robots in the token ring
+ **/
+int sensor_matrix_get_joined(SensorMatrix* m)
+{
+	return m->numJoined;
+}
+
Index: branches/charge_board/code/lib/src/libdragonfly/time.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/time.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/time.c	(revision 62)
@@ -0,0 +1,148 @@
+/*
+time.c
+anything that requires a delay
+mostly delay_ms
+
+author: Robotics Club, Colony Project
+
+Change Log:
+	2.5.07 - Kevin
+		Aaron fixed the orb/servo code and made them use timer3 but compare registers B and C. He hard set the prescaler
+		to 8 so the RTC broke. Changed it so that we use a 8 prescaler which sets the compare match at 1/16th of a second.
+		You now count how many 16ths of a second you want until you trigger your actual interrupt. Works. Changed defines
+		for time so you can still call rtc_init with a scale but now it is defined in terms of actual time like second, quarter_second
+		etc. Read that section in the time.h file for more information. Tested and works, though the clock drifts more than
+		it used to
+	1.30.07 - Kevin
+		Modified the clock to run on timer3 on the Dragonfly. Works with decent accuracy. Using a prescaler of 256
+	the timer counts up to a precomputer value which will trigger an interrupt and reset the timer. Multiples of
+	256 change it by that multiple. Refer to the time.h file for all possible prescalers.
+		The interrupt will call a specified function _rtc_func every pulse.
+		All of it has been tested and it works.
+
+*/
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <time.h>
+#include <serial.h>
+
+static volatile int _rtc_val = 0;
+static volatile int _rtc_pulse = 0;
+static volatile int _rtc_scale = 32;	//Defaults to 1 Second per pulse
+static void (*_rtc_f)(void) = 0;
+
+/**
+ * @defgroup time Time
+ * @brief Time functions
+ * 
+ * Functions dealing with time.
+ * 
+ * @{
+ **/
+
+/**
+ * Delays for the specified number of milliseconds.
+ * The accuracy of this function is unknown.
+ *
+ * @param ms the number of milliseconds to delay for
+ **/
+void delay_ms(int ms) 
+{
+	for(; ms > 15; ms-=15)
+		_delay_ms(15);
+	_delay_ms(ms);
+}
+
+
+/* 	Prescales defined in time.h. SECOND will give you 1 second.
+	More scales are defined in the time.h file.
+	rtc_func is the address to a function that you want called every clock tick. */
+/**
+ * Initializes the real time clock. Prescales are defined in time.h.
+ * For example, SECOND will give 1 second. The specified function is
+ * called every clock tick. For the real time clock to activate,
+ * interrupts must be enabled. (through sei() )
+ *
+ * @param prescale_opt the period with which the timer is triggered
+ * @param rtc_func the function called when the timer is triggered
+ *
+ * @see rtc_get, rtc_reset
+ *
+ **/
+void rtc_init(int prescale_opt, void (*rtc_func)(void)) {
+	
+	//Clear timer register for Timer 3
+	TCNT3 = 0;
+	
+	/* 	This sets the Waveform Generation Module to CTC (Clear Timer on Compare) Mode (100)
+		See page135 in Atmega128 Docs for more modes and explanations */
+	TCCR3B |= _BV(WGM32);
+	
+	/* 	This sets the prescaler for the system clock (8MHz) ie: divides the clock by some number.
+		Currently set to a prescaler of 8 because that is what the orb and servos use (they are on this timer as well)
+		See page137 in Atemga128 Docs for all the available prescalers */
+	TCCR3B |= _BV(CS31);
+	
+	/* 	Sets the two regsiters that we compare against. So the timer counts up to this number and
+		then resets back to 0 and calls the compare match interrupt.
+		8x10^6 / 8 = 1/16 Second. All values are based off of this number. Do not change it unless you
+		are l337*/
+		
+	OCR3A = 0xF424;	
+
+	/* 	Enable Output Compare A Interrupt. When OCR3A is met by the timer TCNT3 this interrupt will be
+		triggerd. (See page140 in Atmega128 Docs for more information */
+	ETIMSK |= _BV(OCIE3A);
+	
+	/*	Store the pointer to the function to be used in the interrupt */
+	_rtc_f = rtc_func;
+	
+	/*	Store how many 1/16ths of a second you want to let by before triggering an interrupt */
+	_rtc_scale = prescale_opt;
+}
+
+/**
+ * Returns the time elapsed in seconds since the last call to
+ * rtc_init or rtc_reset.
+ *
+ * @return the number of seconds since the last call to rtc_init or rtc_reset
+ *
+ * @see rtc_init, rtc_reset
+ **/
+int rtc_get(void){
+	return _rtc_val;
+}
+
+/**
+ * Resets the real time clock counter to 0.
+ *
+ * @see rtc_init, rtc_get
+ **/
+void rtc_reset(void){
+	_rtc_val = 0;
+}
+
+/** @} **/ //end defgroup
+
+/*	Called every pulse. Function in _rtc_f is called every _rtc_scale and also the counter is updated.
+	Bascially, since the pulse is hard set at 1/16s  you want to count how many 16ths of a second have passed
+	and when it reaches the amount of time you want, execute the code. */
+SIGNAL(TIMER3_COMPA_vect) {
+
+	if (_rtc_pulse ==  _rtc_scale) {
+		//Increment the real time clock counter
+		_rtc_val++;
+		
+		//Calls the function tied to the real time clock if defined
+		if(_rtc_f != 0)
+			_rtc_f();
+		
+		//Resets the pulse until the next scale is matched
+		_rtc_pulse = 0;
+	}	
+	
+	//Updates the amount of pulses seen since the last scale match
+	_rtc_pulse++;
+	
+}
+
Index: branches/charge_board/code/lib/src/libdragonfly/serial.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/serial.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/serial.c	(revision 62)
@@ -0,0 +1,256 @@
+/*
+	serial.c - Functions for using the RS232 serial port
+	
+	authors: Robotics Club, Colony Project, pkv
+	much code taken from FWR's library, author: Tom Lauwers
+*/
+
+#include <avr/io.h>
+#include <stdio.h>
+#include "serial.h"
+
+FILE *usb_fd;  //For use with fprintf() and related stdio functions
+FILE *xbee_fd;  //For use with fprintf() and related stdio functions
+
+/**
+ * Initializes communication over the USB serial port.
+ * This must be called before any other usb function
+ * may be used.
+ **/
+void usb_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (USB_BAUD == 115200)
+    UBRR0H = 0x00;
+    UBRR0L = 8;
+    UCSR0A |= _BV(U2X0);
+  #elif (USB_BAUD == 9600)
+    UBRR0H = 0x00;
+    UBRR0L = 103;
+    UCSR0A |= _BV(U2X0);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+  /*Enable receiver and transmitter */
+	UCSR0B |= (1<<RXEN0)|(1<<TXEN0);
+	
+	/* Set frame format: 8data, 1stop bit, asynchronous normal mode */
+	UCSR0C |= (1<<UCSZ00) | (1<<UCSZ01);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    usb_fd = fdevopen(usb_putc, usb_getc);
+  #endif
+}
+
+/**
+ * Initializes communication over the XBee.
+ * This must be called before any other xbee function
+ * may be used.
+ **/
+void xbee_init() {
+  //Set baud rate
+  // - 115200 (both wired and wireless) is UBRR=8, U2X=1
+  // - 9600 is U2X =1, UBRR = 107.
+	#if (XBEE_BAUD == 115200)
+    UBRR1H = 0x00;
+    UBRR1L = 8;
+    UCSR1A |= _BV(U2X1);
+  #elif (XBEE_BAUD == 9600)
+    UBRR1H = 0x00;
+    UBRR1L = 103;
+    UCSR1A |= _BV(U2X1);
+  #else //Baud rate is defined in the header file, we should not get here
+    return;
+  #endif
+
+	//Enable receiver and transmitter
+	UCSR1B |= (1<<RXEN1)|(1<<TXEN1);
+	
+	// Set frame format: 8data, 1stop bit, asynchronous normal mode
+	UCSR1C |= (1<<UCSZ10) | (1<<UCSZ11);
+  
+  // if we have enabled the stdio stuff, then we init it here
+  #ifdef USE_STDIO
+    /* Open the stdio stream corresponding to this port */
+    xbee_fd = fdevopen(xbee_putc, xbee_getc);
+  #endif
+}
+
+/**
+ * Sends a character over USB.
+ *
+ * @param c the character to send
+ * @return 0 for success, nonzero for failure
+ **/
+int usb_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR0A, UDRE0);
+	
+  // Load buffer with your character
+  UDR0 = c;
+  return 0;
+}
+
+/**
+ * Sends a character to the XBee.
+ *
+ * @param c the character to send
+ * @return 0 for success, nonzero for failure
+ **/
+int xbee_putc(char c) 
+{
+  // Wait until buffer is clear for sending
+  loop_until_bit_is_set(UCSR1A, UDRE1);
+	
+  // Load buffer with your character
+  UDR1 = c;
+  return 0;
+}
+
+/**
+ * Sends a sequence of characters over USB.
+ *
+ * @param s the string to send
+ * @return 0 for success, nonzero for failure
+ **/
+int usb_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		usb_putc(*t);
+		t++;
+	}
+  return 0;
+}
+
+/**
+ * Returns the first character in the buffer received from USB.
+ * This function blocks execution until a character has been received.
+ * xbee_init must be called before this function may be used.
+ * 
+ * @return the first character in the usb buffer
+ *
+ * @see usb_init, usb_getc_nb
+ **/
+int usb_getc(void)
+{
+  // Wait for the receive buffer to be filled
+  loop_until_bit_is_set(UCSR0A, RXC0);
+	
+	// Read the receive buffer
+	return UDR0;
+}
+
+/**
+ * Returns the first character in the buffer received from USB.
+ * This function blocks execution until a character has been
+ * received. xbee_init must be called before this function
+ * may be used.
+ * 
+ * @return the first character in the xbee buffer
+ * 
+ * @see xbee_init, xbee_getc_nb
+ **/
+int xbee_getc(void)
+{
+	// Wait for the receive buffer to be filled
+    loop_until_bit_is_set(UCSR1A, RXC1);
+	
+	// Read the receive buffer
+	return UDR1;
+}
+
+/**
+ * Non blocking version of usb_getc. If a character is present in the buffer,
+ * it is returned, otherwise -1 is returned immediately. usb_init must be
+ * called before this function can be used.
+ *
+ * @param c the received character. This will be set if a character has
+ * been received.
+ * 
+ * @return -1 if no character is available, 0 otherwise
+ * 
+ * @see usb_init, usb_getc
+ **/
+int usb_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR0A & _BV(RXC0)) {
+    // Read the receive buffer
+    (*c) = UDR0;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+/**
+ * Non blocking version of xbee_getc. If a character is present in the buffer,
+ * it is returned, otherwise -1 is returned immediately. xbee_init
+ * must be called before this function can be used.
+ *
+ * @param c the received character. This will be set if a character has
+ * been received.
+ * 
+ * @return -1 if no character is available, 0 otherwise
+ *
+ * @see xbee_init, xbee_getc
+ **/
+int xbee_getc_nb(char *c)
+{
+	// check if the receive buffer is filled
+  if (UCSR1A & _BV(RXC1)) {
+    // Read the receive buffer
+    (*c) = UDR1;
+    return 0;
+  }
+  else {
+    // Return empty
+    return -1;
+	}
+}
+
+
+/*
+prints an int to serial
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+uses usb_putc
+*/
+/**
+ * Prints an integer, converted to ASCII, to usb. usb_init must be called
+ * before this function can be used.
+ *
+ * @param value the integer to print
+ * 
+ * @return 0 if successful, nonzero otherwise
+ *
+ * @see usb_init, usb_putc
+ **/
+int usb_puti(int value ) {
+	unsigned char usb_data[6]={'0','0','0','0','0','0' }, position=sizeof(usb_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { usb_putc('-'); value=-value; }    
+        do { position--; *(usb_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(usb_data)-1);position++)
+          {
+            
+            usb_putc(usb_data[position]);
+          }
+
+	return 0;
+}
+
+
Index: branches/charge_board/code/lib/src/libdragonfly/motor.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/motor.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/motor.c	(revision 62)
@@ -0,0 +1,128 @@
+/*
+	motor.c - Contains functions necessary for activating and driving the 
+	H-bridge
+	
+	
+	author: Robotics Club, Colony project
+	
+	much of this is taken from FWR's library, author: Tom Lauwers
+	
+*/
+
+#include "motor.h"
+
+/**
+ * @defgroup motors Motors
+ * @brief Functions for controlling the motors.
+ * Functions for controlling the motors. Found in motor.h.
+ * @{
+ **/
+
+/**
+ * Initializes both motors so that they can be used with future
+ * calls to motor1_set and motor2_set.
+ *
+ * @see motors_off, motor1_set, motor2_set
+ **/
+void motors_init( void ) {
+	// Configure counter such that we use phase correct
+	// PWM with 8-bit resolution
+	PORTA &= 0x0F;
+	DDRA |= 0xF0;
+	DDRB |= 0x60;
+
+	//timer 1A and 1B
+	TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM10);
+	TCCR1B = _BV(WGM12) | _BV(CS10);
+//	TCCR1A = 0xA1;
+//	TCCR1B = 0x04;
+	OCR1AH=0;
+	OCR1AL=0;
+	OCR1BH=0;
+	OCR1BL=0;
+}
+
+/**
+ * Sets the speed and direction of motor1.
+ * motors_init must be called before this function can be used.
+ *
+ * @param direction Either FORWARD or BACKWARD to set the direction of rotation.
+ * @param speed The speed the motor will run at, in the range 0-255.
+ * 
+ * @see motor2_set, motors_init
+ **/
+void motor1_set(int direction, int speed) {
+
+	if(direction == 0) {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x10)
+		{
+		  OCR1A = 0;
+		}	
+		PORTA = (PORTA & 0xCF) | 0x10;
+//		PORTD |= 0x10;
+//		PORTD &= 0xBF;
+	}
+	else {
+	    // turn off PWM first if switching directions
+		if((PORTA & 0x30) != 0x20)
+		{
+		  OCR1A = 0;
+		}
+		PORTA = (PORTA & 0xCF) | 0x20;
+//		PORTD |= 0x40;
+//		PORTD &= 0xEF;
+	}
+	
+	// Set the timer to count up to speed, an 8-bit value
+	OCR1AL = speed;
+}
+
+/**
+ * Sets the speed and direction of motor2.
+ * motors_init must be called before this function can be used.
+ *
+ * @param direction Either FORWARD or BACKWARD to set the direction of rotation.
+ * @param speed The speed the motor will run at, in the range 0-255.
+ *
+ * @see motor1_set, motors_init
+ **/
+void motor2_set(int direction, int speed) {
+	if(direction == 0) {
+//		PORTD |= 0x20;
+//		PORTD &= 0x7F;
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x80)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x80;
+	}
+	else {
+//		PORTD |= 0x80;
+//		PORTD &= 0xDF;
+
+	    // turn off PWM first if switching directions
+		if((PORTA & 0xC0) != 0x40)
+		{
+		  OCR1B = 0;
+		}		
+		
+		PORTA = (PORTA & 0x3F) | 0x40;
+	}
+	OCR1BL = speed;
+}
+
+/**
+ * Turns off both motors.
+ *
+ * @see motors_init
+ **/
+void motors_off( void ) {
+	OCR1AL = 0x0;
+	OCR1BL = 0x0;
+}
+
+/**@}**///end defgroup
+
Index: branches/charge_board/code/lib/src/libdragonfly/analog.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/analog.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/analog.c	(revision 62)
@@ -0,0 +1,156 @@
+/*
+ * analog.c - Contains the function implementations for manipulating the ADC
+ * on the firefly+ board
+ * 
+ * author:  CMU Robotics Club, Colony Project
+ * code mostly taken from fwr analog file (author: Tom Lauwers)
+ */
+
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "analog.h"
+
+// Internal Function Prototypes
+void set_adc_mux(int which);
+
+/**
+ * @defgroup analog Analog
+ * Functions for manipulation the ADC on the dragonfly board.
+ * All definitions may be found in analog.h.
+ *
+ * @{
+ **/
+
+
+/**
+ * Initializes the ADC.
+ * Call analog_init before reading from the analog ports.
+ *
+ * @see analog8, analog10
+ **/
+void analog_init(void)
+{
+	// ADC Status Register A
+	// Bit 7 - ADEN is set (enables analog)
+	// Bit 6 - Start conversion bit is set (must be done once for free-running mode)
+	// Bit 5 - Enable Auto Trigger (for free running mode)
+	// Bit 4 - ADC interrupt flag, 0
+	// Bit 3 - Enable ADC Interrupt (required to run free-running mode)
+	// Bits 2-0 - Set to create a clock divisor of 128, to make ADC clock = 8,000,000/128
+	ADCSRA |= 0xEF;
+
+	// ADC Status Register B
+	// Bit 7, 5-3 - Must be cleared
+	// Bit 2:0 - Set mode, currently cleared for free running operation
+	// Bit 6 - Analog comparator mode - cleared
+//	ADCSRB = 0x00;
+	
+	// ADMUX register
+	// Bit 7,6 - Set voltage reference to AVcc (0b01)
+	// Bit 5 - Set ADLAR bit for left adjust to do simple 8-bit reads
+	// Bit 4 - X
+	// Bit 3:0 - Sets the current channel, set to ADC7 (the external mux)
+	ADMUX = 0x67;
+
+	// Set external mux lines to outputs
+	DDRG |= 0x1C;
+	set_adc_mux(0x07);
+}	
+
+
+/**
+ * Reads an eight bit number from an analog port.
+ * analog_init must be called before using this function.
+ * 
+ * @param which the analog port to read from. One of
+ * the constants AN0 - AN7.
+ *
+ * @return the eight bit input to the specified port
+ *
+ * @see analog_init, analog10
+ **/
+unsigned int analog8(int which)
+{
+	if(which < EXT_MUX)
+		ADMUX = 0x60 + which;
+	else if(which == EXT_MUX)
+		return 0;
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+	
+	_delay_ms(1); // need at least 130 us between conversions
+	return ADCH;
+}
+
+/**
+ * Reads a ten bit number from the specified port.
+ * analog_init must be called before using this function.
+ *
+ * @param which the analog port to read from. Typically
+ * a constant, one of AN0 - AN7.
+ *
+ * @return the ten bit number input to the specified port
+ * 
+ * @see analog_init, analog8
+ **/
+unsigned int analog10(int which)
+{
+	unsigned int adc_h = 0;
+	unsigned int adc_l = 0;
+
+	if(which < EXT_MUX)
+		ADMUX = 0x60 + which;
+	else if(which == EXT_MUX)
+		return 0;
+	else
+	{
+		ADMUX = 0x60 + EXT_MUX;
+		set_adc_mux(which - 8);
+		_delay_ms(1);
+	}
+
+	_delay_ms(1);
+	adc_l = ADCL; /* highest 2 bits of ADCL -> least 2 bits of analog val */
+	adc_h = ADCH; /* ADCH -> 8 highest bits of analog val */
+	
+	return (adc_h << 2) | (adc_l >> 6);
+}
+
+/**
+ * Returns the current position of the wheel, as an integer
+ * in the range 0 - 255.
+ * analog_init must be called before using this function.
+ *
+ * @return the orientation of the wheel, as an integer in
+ * the range 0 - 255.
+ *
+ * @see analog_init
+ **/
+int wheel(void)
+{
+	return analog8(WHEEL_PORT);
+}
+
+/**@}**/ //end defgroup
+
+SIGNAL (SIG_ADC)
+{
+	// This is just here to catch ADC interrupts because ADC is free running.  
+	// No code needs to be in here.
+}
+
+void set_adc_mux(int which)
+{
+  // FIX THIS IN NEXT REVISION
+  // ADDR2 ADDR1 ADDR0
+  // G2.G4.G3 set mux to port 0-7 via binary selection
+  // math would be much cleaner if it was G4.G3.G2
+  
+  // mask so only proper bits are possible.  
+  PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04);
+}
+
Index: branches/charge_board/code/lib/src/libdragonfly/buzzer.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/buzzer.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/buzzer.c	(revision 62)
@@ -0,0 +1,108 @@
+/*
+  buzzer.c - Contains the functions necessary for running the buzzer
+  
+  author: Robotics Club, Colony Project
+  
+  much taken from FWR's firefly library (author: Tom Lauwers)
+*/
+
+#include <avr/io.h>
+#include <buzzer.h>
+#include <time.h>
+
+/**
+ * @defgroup buzzer Buzzer
+ * @brief Functions for controlling the buzzer.
+ * Functions for controlling the buzzer. Include
+ * buzzer.h to access these functions.
+ * @{
+ **/
+
+/**
+ * Initializes the buzzer. Must be called before any other buzzer
+ * function may be used.
+ **/
+void buzzer_init( void )
+{
+	//NOTE: This is mostly handled by buzzer_Set_val for now
+	// Set pin B7 to output - B7 is buzzer pin
+	//DDRB |= _BV(DDB7);
+	//Fast PWM Mode, Clear OCR0 on compare match and set at bottom, clock/64
+	//TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+}
+
+/**
+ * Sets the value of the buzzer's pitch.
+ * Higher values are lower frequencies.
+ *
+ * @param buzz_value the value to set the buzzer's frequency too,
+ * in the range 0-255
+ *
+ * @see buzzer_init, buzzer_set_freq, buzzer_off
+ **/
+void buzzer_set_val(unsigned int buzz_value)
+{ 
+	TCCR2 = _BV(COM20) | _BV(WGM21)  | _BV(CS22);
+	DDRB |= _BV(DDB7);
+	OCR2 = buzz_value;
+}
+
+/**
+ * Sets the buzzer frequency. Usage of constants such as C4
+ * is highly recommended as input to this function.
+ * buzzer_init must be called before this function may
+ * be used.
+ *
+ * @param buzz_freq the frequency to set the buzzer to
+ *
+ * @see buzzer_init, buzzer_set_val, buzzer_off
+ **/
+void buzzer_set_freq(unsigned int buzz_freq)
+{
+  int buzz_value;
+  
+  buzz_value = 62500/buzz_freq - 1;
+
+  if(buzz_value > 255){
+    buzz_value = 255;
+  }else if(buzz_value < 0){
+    buzz_value = 0;
+  }
+  
+  buzzer_set_val(buzz_value);
+}
+
+/**
+ * Plays the specified frequency for the specified
+ * amount of time. This function blocks execution
+ * until the time is completed. buzzer_init must be
+ * called before this function can be used.
+ *
+ * @param ms the time in milliseconds to play the frequency
+ * @param buzz_freq the frequency to play
+ *
+ * @see buzzer_init, buzzer_set_freq
+ **/
+void buzzer_chirp(unsigned int ms, unsigned int buzz_freq) 
+{ 
+  buzzer_set_freq(buzz_freq);
+  delay_ms(ms);
+  buzzer_off();
+}
+
+/**
+ * Turns off the buzzer by disabling the timer0 clock.
+ *
+ * @see buzzer_init
+ **/
+void buzzer_off()
+{
+  // Disable clock, to halt counter
+  TCCR2 &= 0xF8;//0b11111000;
+  
+  // Set buzzer pin low in case it's high
+  PORTB &= 0xBF;//0b10111111;
+}
+
+/** @} **/ // end buzzer group
+
Index: branches/charge_board/code/lib/src/libdragonfly/lcd.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/lcd.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/lcd.c	(revision 62)
@@ -0,0 +1,477 @@
+/*
+
+lcd-ar2.c - implementation for lcd functions
+
+Author: CMU Robotics Club, Colony Project
+
+This uses SPI.
+
+lcd_init MUST be called before anything can be used.
+
+*/
+
+#include <avr/io.h>
+#include <lcd.h>
+#include <time.h>
+
+#define LCD_RS    PB4 // Command/Data
+#define LCD_RSTB  PE2 // reset line
+#define LCD_CS    PB0
+
+//////lcd defines
+#define RST _BV(4)  // pd4 (GPIO)
+#define SCE _BV(0)  // pb0 (~SS)
+#define D_C _BV(5)  // pd5 (GPIO?)
+#define SDI _BV(2)  // pb2 (MOSI)
+#define SCK _BV(1) // pb1 (SCK)
+
+#define LCDPORT PORTB
+#define LCDDDR DDRB
+
+#define LCDRESETPORT PORTD
+#define LCDRESETDDR DDRD
+
+// Internal Function Prototypes
+// inialize OLED and SPI
+void OLED_init(void);
+
+// reset Controller
+void Reset_SSD1339(void);
+
+// write command or data
+void write_c(unsigned char out_command);
+void write_d(unsigned char out_data);
+
+// these write data to the OLED on 8 bit data bus,  depends on MCU
+void LCD_out(unsigned char cmd);
+
+// these functions set / clear pins for OLED control lines.  they accecpt a 0 or 1 
+void DC(char stat);
+void RES(char stat);
+void CS(char stat);
+
+void lcd_putbyte(unsigned char b);
+
+void crazycircle (void) {
+/*  int i;
+  // draw 100 random circles
+  for(i = 0;i < 100;i++){
+      write_c(0x86);    // draw circle command
+      write_d(rand() % 130);
+      write_d(rand() % 130);
+      write_d(rand() % 64);
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+      write_d(rand());
+
+      delay_ms(10);
+  }
+*/
+}
+
+void OLEDtest (void) {
+  //int   i = 0;
+
+  // Initialize
+  //Initialize();
+  OLED_init();
+
+  delay_ms(120);
+
+  write_c(0x8e);    // clear window command
+  write_d(0);
+  write_d(0);
+  write_d(130);
+  write_d(130);
+
+  delay_ms(100);
+  
+  write_c(0x92);    // fill enable command
+  write_d(0x01); 
+  
+  delay_ms(10);
+
+  crazycircle();
+/*
+  // write directly to ram,  this fills up bottom 1/3 of display with color pattern
+  write_c(0x5c);
+  for (i = 0; i < 2000; i++){
+  write_c(0x5c);  
+   write_d(i);
+   write_d(i);
+   write_d(i);
+  }
+  */
+} 
+
+/**********************************************************
+                      Initialize
+**********************************************************/
+
+void OLED_init(void)
+{
+  // Setup SPI here
+  SPCR = 0x5D; //  enable SPI, master, SPI mode 3
+  DDRB |= 0x06; // enable MOSI and SCK as outputs
+
+  LCD_out(0);
+  DC(0);
+  CS(0);
+  Reset_SSD1339();
+  write_c(0xa0); // Set Re-map / Color Depth
+  write_d(0x34);//0xb4); // 262K 8bit R->G->B
+  write_c(0xa1); // Set display start line
+  write_d(0x00); // 00h start
+  //write_c(0xa2); // Set display offset
+  //write_d(0x80); // 80h start
+  write_c(0xA6); // Normal display
+  write_c(0xad); // Set Master Configuration
+  write_d(0x8e); // DC-DC off & external VcomH voltage & external pre-charge voltage
+  write_c(0xb0); // Power saving mode
+  write_d(0x05);
+  write_c(0xb1); // Set pre & dis_charge
+  write_d(0x11); // pre=1h dis=1h
+  write_c(0xb3); // clock & frequency
+  write_d(0xf0); // clock=Divser+1 frequency=fh
+  write_c(0xbb); // Set pre-charge voltage of color A B C
+  write_d(0xff); // color A  was 1c
+  write_d(0xff); // color B  was 1c
+  write_d(0xff); // color C  was 1c
+  write_c(0xbe); // Set VcomH
+  write_d(0x1f); //
+  write_c(0xc1); // Set contrast current for A B C
+  write_d(0xCa); // Color A was AA
+  write_d(0xD4); // Color B was B4
+  write_d(0xF8); // Color C was C8
+  write_c(0xc7); // Set master contrast
+  write_d(0x0f); // no change
+  write_c(0xca); // Duty
+  write_d(0x7f); // 127+1
+  write_c(0xaf); // Display on
+}
+
+void Reset_SSD1339(void)
+{
+  RES(0);
+  delay_ms(100);
+  RES(1);
+}
+void write_c(unsigned char out_command)
+{
+  DC(0);CS(0);
+  //delay_ms(1);
+  
+  LCD_out(out_command);
+ // delay_ms(1);
+  
+  DC(1);
+  // potentially add NOP
+  CS(1);
+
+}
+
+void write_d(unsigned char out_data)
+{
+  DC(1);CS(0);
+ // delay_ms(1);
+ 
+  LCD_out(out_data);
+ // delay_ms(1);
+  DC(1);
+  //potentially add NOP
+  CS(1);
+}
+
+// these functions set / clear pins for LCD control lines.  they accecpt a 0 or 1 
+void DC(char stat)
+{
+	DDRB |= _BV(LCD_RS);				// RS is P0.30, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_RS);
+	else
+		PORTB &= ~(_BV(LCD_RS));
+}
+
+void RES(char stat)
+{
+	DDRE |= _BV(LCD_RSTB);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTE |= _BV(LCD_RSTB);
+	else
+		PORTE &= ~(_BV(LCD_RSTB));
+}
+
+void CS(char stat)
+{
+	DDRB |= _BV(LCD_CS);				// RSTB is P0.7, set to output
+	if (stat)	
+		PORTB |= _BV(LCD_CS);
+	else
+		PORTB &= ~(_BV(LCD_CS));
+}
+
+// send to the LCD
+void LCD_out(unsigned char cmd)
+{
+	SPDR = cmd;
+    // could also do this via interrupts
+	loop_until_bit_is_set(SPSR, SPIF);
+}
+
+
+//**************************************Old shit below!*****************
+/*
+FontLookup - a lookup table for all characters
+*/
+static const unsigned char FontLookup [][5] =
+{
+    { 0x00, 0x00, 0x00, 0x00, 0x00 },  // sp
+    { 0x00, 0x00, 0x5f, 0x00, 0x00 },   // !
+    { 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
+    { 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
+    { 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
+    { 0x23, 0x13, 0x08, 0x64, 0x62 },   // %
+    { 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
+    { 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
+    { 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
+    { 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
+    { 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
+    { 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
+    { 0x00, 0x00, 0x50, 0x30, 0x00 },   // ,
+    { 0x10, 0x10, 0x10, 0x10, 0x10 },   // -
+    { 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
+    { 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
+    { 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
+    { 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
+    { 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
+    { 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
+    { 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
+    { 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
+    { 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
+    { 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
+    { 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
+    { 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
+    { 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
+    { 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
+    { 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
+    { 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
+    { 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
+    { 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
+    { 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
+    { 0x7E, 0x11, 0x11, 0x11, 0x7E },   // A
+    { 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
+    { 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
+    { 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
+    { 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
+    { 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
+    { 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
+    { 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
+    { 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
+    { 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
+    { 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
+    { 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
+    { 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
+    { 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
+    { 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
+    { 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
+    { 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
+    { 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
+    { 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
+    { 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
+    { 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
+    { 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
+    { 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
+    { 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
+    { 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
+    { 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
+    { 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
+    { 0x02, 0x04, 0x08, 0x10, 0x20 },   // backslash
+    { 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
+    { 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
+    { 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
+    { 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
+    { 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
+    { 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
+    { 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
+    { 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
+    { 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
+    { 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
+    { 0x0C, 0x52, 0x52, 0x52, 0x3E },   // g
+    { 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
+    { 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
+    { 0x20, 0x40, 0x44, 0x3D, 0x00 },   // j
+    { 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
+    { 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
+    { 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
+    { 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
+    { 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
+    { 0x7C, 0x14, 0x14, 0x14, 0x08 },   // p
+    { 0x08, 0x14, 0x14, 0x18, 0x7C },   // q
+    { 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
+    { 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
+    { 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
+    { 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
+    { 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
+    { 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
+    { 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
+    { 0x0C, 0x50, 0x50, 0x50, 0x3C },   // y
+    { 0x44, 0x64, 0x54, 0x4C, 0x44 },    // z
+    { 0x00, 0x08, 0x36, 0x41, 0x41 },   // {
+    { 0x00, 0x00, 0x7F, 0x00, 0x00 },   // |
+    { 0x41, 0x41, 0x36, 0x08, 0x00 },   // }
+    { 0x02, 0x01, 0x01, 0x02, 0x01 },   // ~
+    { 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // del
+};
+
+
+/**
+ * @defgroup lcd LCD
+ * @brief Functions for the LCD
+ * Functions for writing to the LCD.
+ * All functions may be found in lcd.h.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the LCD. Must be called before any other
+ * LCD functions.
+ **/
+void lcd_init(void)
+{
+	LCDDDR |= (SCE | SDI | SCK);
+	LCDRESETDDR |= (RST|D_C);
+
+	LCDPORT &= ~( SCE | SDI | SCK);
+	LCDRESETPORT &=~(D_C);
+  
+	SPCR |= 0x50;//0b01010000; // no SPI int, SPI en, Master, sample on rising edge, fosc/2
+	SPSR |= 0x01;       // a continuation of the above
+
+	LCDRESETPORT |= RST;
+	delay_ms(10);
+	LCDRESETPORT &= (~RST);
+	delay_ms(100);
+	LCDRESETPORT |= RST;
+	
+    lcd_putbyte( 0x21 );  // LCD Extended Commands.
+    lcd_putbyte( 0xC8 );  // Set LCD Vop (Contrast).
+    lcd_putbyte( 0x06 );  // Set Temp coefficent.
+    lcd_putbyte( 0x13 );  // LCD bias mode 1:48.
+    lcd_putbyte( 0x20 );  // LCD Standard Commands, Horizontal addressing mode.
+    lcd_putbyte( 0x0C );  // LCD in normal mode.
+	
+	LCDRESETPORT |= D_C;		//put it in init instead of main
+	
+	lcd_clear_screen();
+}
+
+/**
+ * Clears the LCD screen. lcd_init must be called first.
+ * 
+ * @see lcd_init
+ **/
+void lcd_clear_screen( void ) {
+	int i;
+	for (i = 0; i < 504; i++)
+			lcd_putbyte(0x0);
+	
+	lcd_gotoxy(0,0);
+}
+
+/**
+ * Prints a character on the LCD screen. lcd_init
+ * must be called before this function may be used.
+ *
+ * @param c the character to print
+ *
+ * @see lcd_init
+ **/
+void lcd_putc(char c)
+{
+	int i;
+	
+	for (i = 0; i < 5; i++)
+		lcd_putbyte(FontLookup[c-32][i]);
+	lcd_putbyte(0);
+}
+
+/*
+print an entire string to the lcd
+*/
+void lcd_puts(char *s)
+{
+	char *t = s;
+	while (*t != 0)
+	{
+		lcd_putc(*t);
+		t++;
+	}
+}
+
+/*
+go to coordinate x, y
+y: vertically - 1 char
+x: horizontally - 1 pixel
+
+multiply x by 6 if want to move 1 entire character
+
+origin (0,0) is at top left corner of lcd screen
+*/
+/**
+ * Move the current cursor position to the one specified.
+ * lcd_init must be called before this function may be used.
+ * 
+ * @param x The x coordinate of the new position
+ * @param y The y coordinate of the new position
+ *
+ * @see lcd_init
+ **/
+void lcd_gotoxy(int x, int y)
+{
+  LCDRESETPORT &= ~(D_C);
+  lcd_putbyte(0x40 | (y & 0x07));
+  lcd_putbyte(0x80 | (x & 0x7f));
+  LCDRESETPORT |= D_C;
+}
+
+/*
+prints an int to the lcd
+
+code adapted from Chris Efstathiou's code (hendrix@otenet.gr)
+*/
+/**
+ * Print an integer to the LCD screen.
+ * lcd_init must be called before this function may be used.
+ * 
+ * @param value the integer to print
+ *
+ * @see lcd_init
+ **/
+void lcd_puti(int value ) {
+	unsigned char lcd_data[6]={'0','0','0','0','0','0' }, position=sizeof(lcd_data), radix=10; 
+
+        /* convert int to ascii  */ 
+        if(value<0) { lcd_putc('-'); value=-value; }    
+        do { position--; *(lcd_data+position)=(value%radix)+'0'; value/=radix;  } while(value); 
+
+    
+        /* start displaying the number */
+        for(;position<=(sizeof(lcd_data)-1);position++)
+          {
+            
+            lcd_putc(lcd_data[position]);
+          }
+
+	return;
+}
+
+/** @} **/ //end defgroup
+
+void lcd_putbyte(unsigned char b)
+{
+	SPDR = b;
+	while (!(SPSR & 0x80)); /* Wait until SPI transaction is complete */
+}
+
Index: branches/charge_board/code/lib/src/libdragonfly/rangefinder.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/rangefinder.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/rangefinder.c	(revision 62)
@@ -0,0 +1,123 @@
+/*
+Authors: James Kong and Greg Tress
+
+Last Modified: 4/30/06 by James
+-Started log_distance conversion function !!!NOT COMPLETE!!!
+-Cleaning up comments
+
+-----------------
+rangefinder.c
+Using Sharp GP2D02 IR Rangefinder
+
+Vin is the input to the rangefinder, designated RANGE_CTRL.
+Vout is the output from the rangefinder, designated RANGE_IN# where # is the rangefinder you are reading from
+
+Expected Initial Conditions:
+Vin is high and Vout should read high.
+
+Usage:
+1.) Set Vin low. Vout should read low.
+2.) Wait for high on Vout.
+3.) Begin clocking Vin and reading 8 bits from Vout (MSB first).
+4.) Set Vin high for 2ms or more to turn off rangefinder
+
+*/
+
+#include "dragonfly_lib.h"
+#include "rangefinder.h"
+
+/*
+read_distance returns the 8-bit reading from the rangefinder
+parameters:
+range_id - dio pin set as the rangefinder Vout [i.e. RANGE_IN0]
+
+NOTE:
+The Sharp GD2D02 returns values on a decreasing logrithmic scale.
+So higher values correspond to closer distances.  Use linearize_distance to convert to normal centimeter scale.
+Also, when reading distances closer than 8cm, the Sharp GD2D02 will return lower values than the values at 8cm.
+At this point, we are only reading from one rangefinder [RANGE_IN0].
+*/
+
+// constants
+/* Nasty IR approximation table
+  I'm using this for the heck of it.  We can do whatever.
+
+  Note the minimum value is .4V (20), and the maximum is 2.6V (133).
+  Gives distance in mm.
+
+  excel formula(valid for inputs 20-133):  ROUND(2353.6*(E2^(-1.1146))*10,0)
+
+  This is only valid for the GP2D12, with objects directly ahead and more than
+  10cm from the detector.  See the datasheet for more information.
+*/
+
+#define MIN_IR_ADC8 20
+#define MAX_IR_ADC8 133
+
+static int IR_dist_conversion[114] = {
+800,791,751,714,681,651,623,597,574,552,531,512,494,478,462,447
+,434,421,408,397,386,375,365,356,347,338,330,322,315,307,301,294
+,288,282,276,270,265,260,255,250,245,241,237,232,228,224,221,217
+,213,210,207,203,200,197,194,191,189,186,183,181,178,176,173,171
+,169,166,164,162,160,158,156,154,152,151,149,147,145,144,142,140
+,139,137,136,134,133,131,130,129,127,126,125,124,122,121,120,119
+,118,117,115,114,113,112,111,110,109,108,107,106,105,105,104,103
+,102,101
+};
+
+int linearize_distance(int value);
+
+/**
+ * @defgroup rangefinder Rangefinder
+ * @brief Functions for using the IR rangefinders
+ * 
+ * Functions for using the IR rangefinders.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the rangefinders. This must be called before
+ * range_read_distance.
+ *
+ * @see range_read_distance
+ **/
+void range_init(void){
+  digital_output(_PIN_B4,0);
+}
+
+/**
+ * Reads the distance measured by one of the rangefinders.
+ * This distance is in arbitrary units.
+ *
+ * @param range_id the rangefinder to use. This should be one
+ * of the constants IR1 - IR5.
+ *
+ * @return the distance measured by the rangefinder
+ *
+ * @see range_init
+ **/
+int range_read_distance (int range_id) {  
+  return linearize_distance(analog8(range_id));
+}
+
+/** @} **/ //end defgroup
+
+int linearize_distance(int value)
+{
+  if(value < MIN_IR_ADC8)
+  {
+    return -1;
+  }
+  else if(value > MAX_IR_ADC8)
+  {
+    return -1;
+  }
+  else
+  {
+    return IR_dist_conversion[value - MIN_IR_ADC8];
+  }
+}
+
+
+
Index: branches/charge_board/code/lib/src/libdragonfly/move.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/move.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/move.c	(revision 62)
@@ -0,0 +1,160 @@
+#include "dragonfly_lib.h"
+
+#include "move.h"
+#include "rangefinder.h"
+
+
+// Internal prototypes
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr);
+
+// global varaibles for move_avoid
+int d1, d2, d3, d4, d5;
+
+/**
+ * @defgroup move Movement
+ * @brief Functions fo controlling robot motion
+ * Higher level functions to control the movement of robots.
+ * 
+ * @{
+ **/
+
+
+/**
+ * Causes the robot to move with the given translation and rotational velocities.
+ * motors_init must be called before this function can be used.
+ *
+ * @param velocity the translational velocity of the robot, in the range -255 to 255.
+ * A positive value indicates forward motion, while a negative value indicates
+ * backwards motion.
+ * 
+ * @param omega the rotational velocity of the robot, in the range -255 to 255.
+ * A positive value indicates a counterclockwise velocity, while a negative
+ * value indicates a clockwise velocity.
+ *
+ * @see motors_init, motor1_set, motor2_set
+ **/
+void move (int velocity, int omega) {
+  int vl = 0;
+  int vr = 0;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  //
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+
+/**
+ * Moves the robot with the given translational and angular velocities
+ * while avoiding obstacles. To be effective, this function must be
+ * called repeatedly throughout the motion. It relies on the IR
+ * rangefinders to detect obstacles. Before calling this function,
+ * motors_init and range_init must be called.
+ *
+ * @param velocity the translational velocity of the robot, in the
+ * range -255 to 255. A positive value indicates forward motion.
+ *
+ * @param omega the rotational velocity of the robot, in the range
+ * -255 to 255. A positive value indicates a counterclockwise velocity.
+ *
+ * @param strength the strength of the avoid behavior, in the range
+ * 0 to 100.
+ *
+ * @see motors_init, range_init, move
+ **/
+void move_avoid(int velocity, int omega, int strength){
+  int pControl;
+  int vl = 0;
+  int vr = 0;
+  int temp;
+  
+  temp=range_read_distance(IR1);
+  d1 = (temp == -1) ? d1 : temp;
+  
+  temp=range_read_distance(IR2);
+  d2=(temp == -1) ? d2 : temp;
+  
+  temp=range_read_distance(IR3);
+  d3=(temp == -1) ? d3 : temp;
+  
+  temp=range_read_distance(IR4);
+  d4=(temp == -1) ? d4 : temp;
+  
+  temp=range_read_distance(IR5);
+  d5=(temp == -1) ? d5 : temp;
+  
+  /* Avoid obstacles ahead
+  if(d2>170)
+    v*=-1;
+    
+  Naturally slow down if there is something in the way.
+  if(d2>150 || d1>180 || d3>180){
+    v>>=1;
+  */
+  
+  //pControl= (((d3-d1) + (d4-d5))*strength)/100;
+  pControl= (((d5-d4))*strength)/100;
+  omega = (omega*(100-strength))/100 + pControl;
+  translateAngulartoLinear(velocity, omega, &vl , &vr );
+  
+  if (vl < 0) {
+    motor1_set(BACKWARD, -vl);
+  } else {
+    motor1_set(FORWARD, vl);
+  }
+  if (vr < 0) {
+    motor2_set(BACKWARD, -vr);
+  } else {
+    motor2_set(FORWARD, vr);
+  }
+}
+
+/**@}**///end the motion group
+
+void translateAngulartoLinear (int velocity, int omega, int* vl, int* vr) {
+	//omega: angle measure, positive couter-clockwise from front.
+	// -180 <= omega <= 180
+	//velocity: -255 <= velocity <= 255
+  
+  long int vltemp, vrtemp;
+  
+  //make sure values are in bounds
+  if (velocity < -255 || velocity >255 || omega < -255 || omega > 255) return;
+	
+  //compute
+	vrtemp = velocity + omega * 3;
+	vltemp = velocity - omega * 3;
+	
+	//check to see if max linear velocities have been exceeded.
+  if (vrtemp > 255) {
+    vltemp = 255 * vltemp / vrtemp;
+    vrtemp = 255;
+  }
+  if (vltemp > 255) {	   
+	vrtemp = 255 * vrtemp / vltemp;    
+	vltemp = 255;  
+  }
+  if (vrtemp < -255) {
+    vltemp = -255 * vltemp / vrtemp;
+    vrtemp = -255;
+  }
+  if (vltemp < -255) {
+    vrtemp = -255 * vrtemp / vltemp;
+    vltemp = -255;
+  }
+  
+  *vr = (int)vrtemp;
+  *vl = (int)vltemp;
+	
+
+}
+
+
Index: branches/charge_board/code/lib/src/libdragonfly/battery.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/battery.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/battery.c	(revision 62)
@@ -0,0 +1,119 @@
+#include "battery.h"
+#include "analog.h"
+
+//Constants for Battery
+//Constants determined experimentally 2/9/2007 - James Kong
+//See Battery8_data.xls for experiment data
+#define BATTERY_NEXT_READ_PRESCALAR 5
+#define MAX_LOW_COUNT 5
+
+//global variables
+int battery_low_count;
+
+/**
+ * @defgroup battery Battery
+ * @brief Functions for reading battery voltage.
+ * 
+ * Contains functions for checking the current
+ * voltage of the battery. Include battery.h to
+ * access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Returns the voltage of the battery as an analog8
+ * reading. 128 is approximately 5 volts. analog_init
+ * must be called before using this function.
+ *
+ * @return the voltage of the battery as an analog8
+ * reading
+ *
+ * @see analog_init, battery, analog8
+ **/
+int battery8(void)
+{
+  return analog8(BATT_PORT);
+}
+
+/**
+ * Returns the voltage of the battery in deciVolts.
+ * analog_init must be called before using this function.
+ *
+ * @return the voltage of the battery in deciVolts.
+ *
+ * @see analog_init, battery8
+ **/
+int battery(void)
+{
+  /* 5 volts is the max, 255 is the max 8bit number , *2 for the divider */
+        return analog8(BATT_PORT) * 500 >>7;
+}
+
+
+/**
+ * Checks if the battery is low. analog_init must be called before
+ * this function can be used. This function waits for several low
+ * battery readings in a row to avoid false positives.
+ *
+ * @return 1 if the battery is low, 0 otherwise
+ *
+ * @see analog_init
+ **/
+char battery_low(void)
+{
+  static char next_read = 0;
+  static char ret = 0;
+  
+  int batt_reading = battery8();
+
+  if(next_read == 0) {
+    if(batt_reading > BATTERY_LOWV)
+    {
+        ret = 0;
+        battery_low_count = 0;
+    }
+    else
+    {
+        battery_low_count++;
+        if( battery_low_count >= MAX_LOW_COUNT )
+        {
+            ret = 1;
+            battery_low_count = 0;
+        }
+    }
+    
+    next_read = BATTERY_NEXT_READ_PRESCALAR;
+  }
+  else next_read--;
+  
+  return ret;
+}
+
+/**
+ * Averages n_samples battery8 readings. This function may
+ * take a while to complete, and is only made available
+ * for convenience. analog_init must be called before this
+ * function may be used.
+ *
+ * @param n_samples The number of times to sample the battery voltage
+ *
+ * @return the average reading for the battery voltage, where 128
+ * is approximately 5 Volts.
+ *
+ * @see analog_init, battery
+ **/
+int battery8_avg(int n_samples)
+{
+  int i;
+  long int sum = 0;
+  
+  for(i = 0; i < n_samples; i++) {
+    sum += battery8();
+  }
+  
+  return (int)(sum / n_samples);
+}
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/lib/src/libdragonfly/lights.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/lights.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/lights.c	(revision 62)
@@ -0,0 +1,383 @@
+/*
+lights.c
+Controls orb1 and orb2. Also contains the framework for a software PWM that may be used for servos in the future.
+
+author: CMU Robotics Club, Colony Project
+
+Change Log:
+2.4.07 - Aaron
+	Revamped orb code so it works.  Need to check interaction with rtc, and tweak some colors.
+
+2.1.07 - James
+	Modified sort_buffer() to prune for repeats.  PWM now uses orb_buf_size for the number of orb values in orb_time_arr[].
+		Changed sorting algorithm used in sort_buffer() to selection sort (faster). And it works now.
+
+1.25.07 - KWoo
+	Deleted old FF+ code to make it cleaner. Commented code. This all works. Note however that if you ever plan to use the
+		software PWM (which is this) you will need to change the implementation of orb_enable() and orb_disable() to not
+		shutdown the PWM.
+
+*/
+
+#include "lights.h"
+#include "dragonfly_lib.h"
+#include <avr/interrupt.h>
+
+
+#define ORB_RESET 1025
+
+#define ORBPORT PORTC
+
+#define ORBDDR DDRC
+
+#define ORBMASK 0x77
+
+
+/***** Port and Pin Definitions ****/
+
+//Orb Ports and Registers
+#define ORB_PORT        PORTC
+#define ORB_DDR         DDRC
+
+//Orb Pins
+#define ORB1_RED        0x00
+#define ORB1_GREEN      0x01
+#define ORB1_BLUE       0x02
+#define ORB2_RED        0x04
+#define ORB2_GREEN      0x05
+#define ORB2_BLUE       0x06
+
+
+#define ORB_COUNT 8	//please dont change this, or bad things might happen
+
+// an orb node
+struct ORB_NODE {
+   uint8_t num;
+   uint16_t angle;
+};
+
+//the change in an orb
+struct ORB_CHANGE {
+   uint16_t port_val;
+   uint16_t split_time_period;
+};
+
+// the status of an orb
+struct ORB_STATUS_STRUCT {
+   struct ORB_NODE orbs[ORB_COUNT];
+   uint16_t orb_angles[ORB_COUNT];
+   struct ORB_CHANGE changes[ORB_COUNT+1];
+   uint8_t change_count;
+   uint8_t new_angles;
+   uint8_t current_orb;
+
+} ORB_STATUS;
+
+void orb_sort(void);
+void orb_setup_pulse(void);
+
+SIGNAL (SIG_OUTPUT_COMPARE3C){
+
+		//pull the correct ones down
+      ORBPORT &= (~ORBMASK)|(ORB_STATUS.changes[ORB_STATUS.current_orb].port_val);
+
+      ++ORB_STATUS.current_orb; //now look at next orb transition
+
+      if (ORB_STATUS.current_orb < ORB_STATUS.change_count) { //if it isnt the end...
+	  
+			//setup timer for next pull down
+         OCR3C = TCNT3+ORB_STATUS.changes[ORB_STATUS.current_orb].split_time_period;
+		 
+     }
+      else { //we are done with these pulses
+		orb_setup_pulse();
+      }
+
+}
+
+
+//sets a channel to a value
+void orb_set_angle(int orb, int angle) {
+	uint8_t mysreg;
+	
+	orb=orb&0x07; //only have 8
+	angle=angle&0xff; //only accept 0-255
+	angle=255-angle; //inverse intensity
+	angle=angle<<2; //scale up so that we dont run it too often
+	angle+=3; //0 values dont really work
+   if (ORB_STATUS.orb_angles[orb] != angle) { //if the angle has changed
+	  mysreg=SREG; 
+	  cli(); //disable interrupts
+      ORB_STATUS.orb_angles[orb] = angle; //update angle
+      ORB_STATUS.new_angles = 1;
+	  SREG=mysreg; //put interrupt status back
+   }
+}
+
+
+void orb_sort(void) {
+   int done = 0, i;
+   
+   while (! done) {
+      done = 1;
+
+      for (i = 0; i < ORB_COUNT - 1; ++i) {  //loop through all
+	  
+			//if they are out of order, swap them
+         if (ORB_STATUS.orbs[i].angle > ORB_STATUS.orbs[i+1].angle) {
+            ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+            ORB_STATUS.orbs[i+1].angle ^= ORB_STATUS.orbs[i].angle;
+            ORB_STATUS.orbs[i].angle ^= ORB_STATUS.orbs[i+1].angle;
+
+            ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+            ORB_STATUS.orbs[i+1].num ^= ORB_STATUS.orbs[i].num;
+            ORB_STATUS.orbs[i].num ^= ORB_STATUS.orbs[i+1].num;
+
+            done = 0;
+         }
+      }
+   }
+}
+
+//calculate the split times
+void orb_setup_pulse(void) {
+   int i;
+   uint16_t my_port;
+   uint16_t sum = 0;
+   uint16_t split_time;
+
+   my_port = 0xff; //all on
+
+   if (ORB_STATUS.new_angles) {
+
+      ORB_STATUS.change_count = 0;
+	  for (i = 0; i < ORB_COUNT; ++i) { //get the new values
+         ORB_STATUS.orbs[i].angle = ORB_STATUS.orb_angles[ORB_STATUS.orbs[i].num];
+      }
+
+      orb_sort(); //sort them
+      ORB_STATUS.new_angles = 0;
+
+      for (i = 0; i < ORB_COUNT; ++i) { //calculate split times
+         split_time = ORB_STATUS.orbs[i].angle - sum;
+         my_port &= ~_BV(ORB_STATUS.orbs[i].num);
+		 
+         for (; i < ORB_COUNT - 1 && ORB_STATUS.orbs[i].angle == ORB_STATUS.orbs[i+1].angle; ++i) {
+            my_port &= ~_BV(ORB_STATUS.orbs[i+1].num); //look for doups
+         }
+		 
+         ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port; //which pins are low
+         ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = split_time;
+         
+		 ++ORB_STATUS.change_count;
+		 
+         sum += split_time;
+      }
+
+      ORB_STATUS.changes[ORB_STATUS.change_count].port_val = my_port;
+      ORB_STATUS.changes[ORB_STATUS.change_count].split_time_period = ORB_RESET - sum; //get a constant period
+
+      ++ORB_STATUS.change_count;
+
+   }
+
+
+
+   ORB_STATUS.current_orb = 0;
+
+    ORBPORT |= ORBMASK; //start with all high
+	OCR3C = TCNT3 + ORB_STATUS.changes[0].split_time_period; //wait for first split
+
+}
+
+/**
+ * @defgroup orbs Orbs
+ * @brief Functions for controlling the color of the orbs.
+ * 
+ * Functions for controlling the color and lighting of the orbs.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the PWM for Orb control. This must be called before 
+ * the orbs are used for them to function.
+ **/
+void orb_init() 
+{	
+   int i;
+   uint8_t mysreg;
+   
+   ORBDDR |= ORBMASK;	//all outputs
+   
+	mysreg=SREG;
+	cli(); //turn off interrupts for now
+
+	//init everything
+
+   for (i = 0; i < ORB_COUNT; ++i) {
+      ORB_STATUS.orbs[i].num = i;
+      ORB_STATUS.orbs[i].angle = 1023;	//127 is a pretty stupid start angle, but oh well
+      ORB_STATUS.orb_angles[i] = 1023;
+   }
+
+   ORB_STATUS.new_angles = 1;
+   ORB_STATUS.change_count = 0;
+
+	//init timer3
+	TCCR3A = 0; 
+	TCCR3B = _BV(CS31); //prescale = 8
+	TCCR3C = 0;
+	ETIMSK |= _BV(OCIE3C); //turn on oc3c interrupt
+	OCR3C = TCNT3+ORB_RESET;
+
+	SREG=mysreg;
+}
+
+/**
+ * Set both orbs to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb1_set(red_led,green_led,blue_led);
+	orb2_set(red_led,green_led,blue_led);
+
+}
+
+/**
+ * Set orb1 to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb1_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {
+	orb_set_angle(0,red_led);
+	orb_set_angle(1,green_led);
+	orb_set_angle(2,blue_led);
+}
+
+/**
+ * Set orb2 to the color specified. orb_init must
+ * be called before this function may be used.
+ *
+ * @param red_led the red component of the color
+ * @param green_led the green component of the color
+ * @param blue_led the blue component of the color
+ *
+ * @see orb_init
+ **/
+void orb2_set(unsigned char red_led, unsigned char green_led, unsigned char blue_led) {	
+	orb_set_angle(4,red_led);
+	orb_set_angle(5,green_led);
+	orb_set_angle(6,blue_led);
+}
+
+/**
+ * Set both orbs to the specified color. This function
+ * is intended to be used with the predefined
+ * colors. orb_init must be called before this
+ * function may be used.
+ *
+ * @param col the color to set the orbs to
+ *
+ * @see orb_init
+ **/
+void orb_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb_set(red, green, blue);
+}
+
+/**
+ * Set orb1 to the specified color. This function
+ * is intended to be used with the predefined
+ * colors. orb_init must be called before this
+ * function may be used.
+ *
+ * @param col the color to set the orbs to
+ *
+ * @see orb_init
+ **/
+void orb1_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb1_set(red, green, blue);
+}
+
+/**
+ * Set orb2 to the specified color. This function
+ * is intended to be used with the predefined
+ * colors. orb_init must be called before this
+ * function may be used.
+ *
+ * @param col the color to set the orbs to
+ *
+ * @see orb_init
+ **/
+void orb2_set_color(int col)
+{
+ int red, green, blue;
+
+ red = ((col & 0xE0) >> 5) * 36;
+ green = ((col & 0x1C) >> 2) * 36;
+ blue = (col & 0x03) * 85;
+
+ orb2_set(red, green, blue);
+}
+
+//DOES THIS WORK?
+// Disables the timer1 interrupt, disabling the Orb's color fading capabilities
+// You can still turn the red, green, and blue leds on and off with set_orb_dio
+/* If we use the PWM for anything else besides the ORB, this implementation needs to be done better */
+/**
+ * Disables the orb color fading capabilities
+ * by disabling the timer1 interrupt.
+ *
+ * @see orb_init
+ **/
+void orb_disable()
+{
+	TCCR3B &= 0;  	//Turn off everything
+	ORB_PORT |= _BV(ORB1_RED);
+	ORB_PORT |= _BV(ORB1_GREEN);
+	ORB_PORT |= _BV(ORB1_BLUE);
+	ORB_PORT |= _BV(ORB2_RED);
+	ORB_PORT |= _BV(ORB2_GREEN);
+	ORB_PORT |= _BV(ORB2_BLUE);
+}
+
+//DOES THIS WORK?
+// Enables the timer1 interrupt, enabling the Orb's color fading capabilities
+/**
+ * Enables the orb's color fading capabilities.
+ *
+ * @see orb_init
+ **/
+void orb_enable()
+{
+//	TCCR0 |= _BV(COM01) | _BV(COM00)  | _BV(WGM00) | _BV(CS01);	//Toggle OC Pin on match, FAST PWM Mode, clock/8
+	TCCR3B =_BV(CS31);
+}
+
+/** @} **/ //end group
+
Index: branches/charge_board/code/lib/src/libdragonfly/dio.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/dio.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/dio.c	(revision 62)
@@ -0,0 +1,294 @@
+/* 
+dio.c
+*/
+
+#include <avr/interrupt.h>
+#include <dio.h>
+#include <time.h>
+#include <lights.h>
+
+/**
+ * @defgroup dio Digital Input / Output
+ * @brief Controls digital input and output
+ * 
+ * A general note on how port / pin numbers work:<br>
+ * The portpin is used to select both the bank and which pin is selected.
+ * 6 bits are used (lower 6, ex: 0b00abcdef).
+ * The first 3 (abc in this example) are used to select the bank.<br>
+ * A = 001<br>
+ * B = 010<br>
+ * C = 011<br>
+ * D = 100<br>
+ * E = 101<br>
+ * F = 110<br>
+ * G = 111<br><br>
+ * 		
+ * The bank can be found by doing portpin >> 3. <br>
+ * 		
+ * The next three (def in this example) are used to select the pin number.
+ * These three bits are just the binary representation of the pin number.<br>
+ * <br>
+ * The pin number can be found by doing portpin & 0b111.<br><br>
+ *
+ * Include dio.h to access these functions.
+ **/
+
+/**
+ * Reads the selected portpin.
+ * 
+ * @param portpin The portpin to be read. See the general description
+ * for a description of portpins.
+ *
+ * @return 1 or 0, depending on the value of the portpin.
+ **/
+int digital_input(int portpin){
+  int pin = portpin & 0x7;
+  int pin_val = 0;
+  
+  switch(portpin >> 3){
+  case _PORT_A:
+    DDRA &= ~_BV(pin);
+    pin_val = PINA;
+    return (pin_val >> pin) & 1;
+  case _PORT_B:
+    DDRB &= ~_BV(pin);
+    pin_val = PINB;
+    return (pin_val >> pin) & 1;
+  case _PORT_C:
+    DDRC &= ~_BV(pin);
+    pin_val = PINC;
+    return (pin_val >> pin) & 1;
+  case _PORT_D:
+    DDRD &= ~_BV(pin);
+    pin_val = PIND;
+    return (pin_val >> pin) & 1;
+  case _PORT_E:
+    DDRE &= ~_BV(pin);
+    pin_val = PINE;
+    return (pin_val >> pin) & 1;
+  case _PORT_F:
+    if(pin>=4){
+      MCUSR|=1<<7;
+      MCUSR|=1<<7;
+    }
+    DDRF &= ~_BV(pin);
+    pin_val = PINF;
+    return (pin_val >> pin) & 1;
+  case _PORT_G:
+    DDRG &= ~_BV(pin);
+    pin_val = PING;
+    return (pin_val >> pin) & 1;
+  default: break;
+  }
+  
+  return -1;
+}
+
+/**
+ * Enables pullup on a pin. If it is an output pin, the pin will output
+ * 1.
+ *
+ * @param portpin the pin to enable pullup on. See the general description
+ * for a discussion of portpins.
+ **/
+void digital_pull_up(int portpin) {
+  int pins = portpin & 0x07;
+
+  switch(portpin >> 3) {
+  case _PORT_A:
+    PORTA |= _BV(pins);
+    break;
+  case _PORT_B:
+    PORTB |= _BV(pins);
+    break;    
+  case _PORT_C:
+    PORTC |= _BV(pins);
+    break;    
+  case _PORT_D:
+    PORTD |= _BV(pins);
+    break;    
+  case _PORT_E:
+    PORTE |= _BV(pins);
+    break;    
+  case _PORT_F:
+    PORTF |= _BV(pins);
+    break;    
+  case _PORT_G:
+    PORTG |= _BV(pins);
+    break;
+  }
+}
+
+/**
+ * Sets portpin to the given value.
+ * 
+ * @param portpin the portpin to output to. See the general
+ * description for a discussion of portpins.
+ *
+ * @param val the value to set the portpin to. 0 for off,
+ * nonzero for on.
+ **/
+void digital_output(int portpin, int val) {
+  int pins = portpin & 0x07;
+  
+  /* if you want to set to 0... */
+  if(val == 0) {
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA &= (0XFF - _BV(pins));
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF &= (0XFF - _BV(pins));
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG &= (0XFF - _BV(pins));
+      break;
+    }
+  }else { /* ( val == 1) */ 
+    switch(portpin >> 3) {
+    case _PORT_A:
+      DDRA |= _BV(pins);
+      PORTA |= _BV(pins);
+      break;
+    case _PORT_B:
+      DDRB |= _BV(pins);
+      PORTB |= _BV(pins);
+      break;    
+    case _PORT_C:
+      DDRC |= _BV(pins);
+      PORTC |= _BV(pins);
+      break;    
+    case _PORT_D:
+      DDRD |= _BV(pins);
+      PORTD |= _BV(pins);
+      break;    
+    case _PORT_E:
+      DDRE |= _BV(pins);
+      PORTE |= _BV(pins);
+      break;    
+    case _PORT_F:
+      DDRF |= _BV(pins);
+      PORTF |= _BV(pins);
+      break;    
+    case _PORT_G:
+      DDRG |= _BV(pins);
+      PORTG |= _BV(pins);
+      break;
+    }
+  }
+}
+
+/**
+ * Checks if button1 is currently pressed.
+ * 
+ * @return 1 if button1 is pressed, 0 otherwise
+ *
+ * @see button1_wait, button1_click
+ **/
+int button1_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING0);
+	PORTG|= _BV(PING0);
+    pin_val = PING;
+	return !((pin_val & _BV(PING0)));
+  
+}
+
+/**
+ * Delays execution until button1 is pressed.
+ *
+ * @see button1_read, button1_click
+ **/
+void button1_wait( void )
+{
+  while(!button1_read() ) {
+    delay_ms(15);
+  }
+}
+
+/**
+ * If button1 is pressed, waits until it is released before returning.
+ * Otherwise, the function returns immediately.
+ *
+ * @return 1 if button1 has been pressed, 0 otherwise
+ *
+ * @see button1_read, button1_wait
+ **/
+int button1_click()
+{
+  if(button1_read()){
+    while(button1_read());
+    return 1;
+  }else{
+    return 0;
+  }
+}
+
+/**
+ * Checks if button2 is currently pressed.
+ * 
+ * @return 1 if button2 is pressed, 0 otherwise
+ *
+ * @see button2_wait, button2_click
+ **/
+int button2_read( void )
+{
+	int pin_val;
+	DDRG &= ~_BV(PING1);
+	PORTG|= _BV(PING1);
+    pin_val = PING;
+	return !((pin_val & _BV(PING1)));
+}
+
+/**
+ * Delays execution until button2 is pressed.
+ *
+ * @see button2_read, button2_click
+ **/
+void button2_wait( void )
+{
+  while(!button2_read()){
+    delay_ms(15);
+  }
+}
+
+/**
+ * If button2 is pressed, waits until it is released before returning.
+ * Otherwise, the function returns immediately.
+ *
+ * @return 1 if button2 has been pressed, 0 otherwise
+ *
+ * @see button2_read, button2_wait
+ **/
+int button2_click()
+{
+	if(button2_read()){
+    while(button2_read());
+    return 1;
+  }else{
+		return 0;
+  }
+}
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/lib/src/libdragonfly/dragonfly_lib.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/dragonfly_lib.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/dragonfly_lib.c	(revision 62)
@@ -0,0 +1,96 @@
+#include <dragonfly_lib.h>
+
+/* init_dragonfly - Initializes functions based on configuration parameters
+   examples:
+
+   init_dragonfly (0, 0, 0); - just initialize the digital IO (buttons, potentiometer)
+
+   init_dragonfly (ANALOG | SERIAL | BUZZER, C0_C1_ANALOG, BAUD115200); 
+   Initialize ADC and set C0 and C1 as analog inputs.  Initialize serial and set baud rate
+   to 115200 bps.  Initialize the buzzer.
+   
+   init_dragonfly (MOTORS | ORB, 0, 0);
+   Initialize motor driving and the color fading abilities of the ORB. */
+
+/**
+ * @defgroup dragonfly Dragonfly
+ * @brief General Dragonfly Functions
+ * General functions for the dragonfly. Include
+ * dragonfly_lib.h to access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Initializes the components specified by config.
+ * 
+ * @see analog_init, usb_init, xbee_init, buzzer_init,
+ * bom_init, orb_init, motors_init, lcd_init
+ **/
+void dragonfly_init(int config) 
+{
+	// Set directionality of various IO pins
+	DDRG &= ~(_BV(PING0)|_BV(PING1));
+	PORTG |= _BV(PING0)|_BV(PING1);
+	
+	if(config & ANALOG) {
+		analog_init();
+	}
+	
+	if(config & COMM) {
+    //Defaults to 115200. Check serial.h for more information.
+    sei();
+    usb_init();
+    xbee_init();
+	}
+	
+	if(config & BUZZER) {
+    sei();
+		buzzer_init();
+	}
+	
+	if(config & ORB) {
+    sei();
+		orb_init();
+	}
+	
+	if(config & MOTORS) {
+		motors_init();
+	}
+	
+	if(config & SERVOS) {
+		sei();
+    //Servos not yet implemented
+    //servo_init();
+	}
+
+	if(config & LCD) {
+		lcd_init();
+	}
+	
+	if(config & (SERVOS | ORB)) {
+    sei();
+    orb_init();
+    //Servos not yet implemented
+	}
+	
+	// delay a bit for stability
+	_delay_ms(1);
+}
+
+/**
+ * Resets the AVR when called.  Sets the watchdog timer and lets it overflow
+ * to reset the AVR.  The reset clears all memory and resets all registers
+ * with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control
+ * and Status Register (MCUCSR).
+*/
+void reset(void)
+{
+    WDTCR &= 0xF8;
+    WDTCR |= 0x08;
+    _delay_ms(15);
+}
+
+
+/** @} **/ //end defgroup
+
Index: branches/charge_board/code/lib/src/libdragonfly/bom.c
===================================================================
--- branches/charge_board/code/lib/src/libdragonfly/bom.c	(nonexistent)
+++ branches/charge_board/code/lib/src/libdragonfly/bom.c	(revision 62)
@@ -0,0 +1,157 @@
+#include <dragonfly_lib.h>
+#include "bom.h"
+#include "dio.h"
+#include "analog.h"
+
+//constants
+const int lookup[16] = {7,6,5,0xe,1,4,3,2,0xf,0,0xd,8,0xc,0xb,9,0xa};
+
+// internal function prototypes
+void output_high(int which);
+void output_low(int which);
+
+/*
+ Bk R Y (Analog)
+---------
+ Green
+ Blue
+ White
+---------
+ Blue
+ White
+*/
+
+
+/*
+the analog pin definitions from dio.h DO NOT work here,
+so we must use PF0 from avrgcc (as opposed to _PIN_F0).
+BUT the dio pin definitions from dio.h must be used (no PE...).
+
+also, _PIN_E2 is initialized to high for some reason,
+which turns the BOM on when the robot is turned on.
+WORK-AROUND: call digital_output(_PIN_E2,0) at some point.
+
+*/
+
+#define MONKI PF0         //analog (yellow)
+//------------------------//
+#define MONKL _PIN_E2     //green
+#define MONK1 _PIN_E3     //blue
+#define MONK0 _PIN_E4     //white
+//------------------------//
+#define MONK3 _PIN_E6     //blue
+#define MONK2 _PIN_E7     //white
+
+#define BOM_VALUE_THRESHOLD 200
+
+
+/**
+ * @defgroup bom BOM (Bearing and Orientation Module)
+ * @brief Functions for dealing with the BOM.
+ *
+ * The Bearing and Orientation Module / Barrel of Monkeys / BOM
+ * is a custom sensor designed and built by the Colony Project.
+ * It consists of a ring of 16 IR emitters and 16 IR detectors.
+ * The BOM is most often use to determine the direction of other
+ * robots. This module contains functions for controlling the BOM.
+ *
+ * Include bom.h to access these functions.
+ *
+ * @{
+ **/
+
+/**
+ * Returns the direction of the maximum BOM reading,
+ * as an integer in the range 0-15. 0 indicates to the
+ * robot's right, while the rest of the sensors are
+ * numbered counterclockwise. This is useful for determining
+ * the direction of a robot flashing its BOM, of only one
+ * robot is currently doing so. analog_init must be called
+ * before this function can be used.
+ *
+ * @return the direction of the maximum BOM reading
+ *
+ * @see analog_init
+ **/
+int get_max_bom(void) {
+	int max_bom_temp = 0;
+	int a, i, j, h;
+    h = 255;
+
+    for (j = 0; j < 16; j++)
+    {
+      i = lookup[j];
+
+      if (i&8)
+        output_high(MONK3);
+      else
+        output_low(MONK3);
+
+      if (i&4)
+        output_high(MONK2);
+      else
+        output_low(MONK2);
+
+      if (i&2)
+        output_high(MONK1);
+      else
+        output_low(MONK1);
+
+      if (i&1)
+        output_high(MONK0);
+      else
+        output_low(MONK0);
+
+      a = analog8(MONKI);
+              
+      if (a < h)
+      {
+        h = a;
+        max_bom_temp = j;
+      }
+
+    }
+
+	//threshold on the bom analog value.
+	//defined in bom.h
+	// if the analog value read is above the threshold, we cannot see a robot
+	// (remember, low means higher intensity).
+	if(h < BOM_VALUE_THRESHOLD) {
+		return max_bom_temp;
+	}
+	else
+		return -1;
+}
+
+/**
+ * Flashes the BOM. analog_init must be called before this
+ * function can be used.
+ * 
+ * @see bom_off, analog_init
+ **/
+void bom_on(void)
+{
+  output_high(MONKL);
+}
+
+/**
+ * Stops flashing the BOM. analog_init must be called
+ * before this function can be used.
+ * 
+ * @see bom_on, analog_init
+ **/
+void bom_off(void)
+{
+  output_low(MONKL);
+}
+
+/** @} **/ //end group
+
+void output_high(int which) {
+	digital_output(which, 1);
+}
+
+void output_low(int which) {
+	digital_output(which, 0);
+}
+
Index: branches/charge_board/code/lib/src/libdragonfly/i2c.c
===================================================================
Index: branches/charge_board/code/lib/bin/libwireless.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/lib/bin/libwireless.a
===================================================================
--- branches/charge_board/code/lib/bin/libwireless.a	(nonexistent)
+++ branches/charge_board/code/lib/bin/libwireless.a	(revision 62)

Property changes on: branches/charge_board/code/lib/bin/libwireless.a
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/lib/bin/libdragonfly.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/code/lib/bin/libdragonfly.a
===================================================================
--- branches/charge_board/code/lib/bin/libdragonfly.a	(nonexistent)
+++ branches/charge_board/code/lib/bin/libdragonfly.a	(revision 62)

Property changes on: branches/charge_board/code/lib/bin/libdragonfly.a
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/code/behaviors/template/template.c
===================================================================
Index: branches/charge_board/docs/libwireless/hierarchy.html
===================================================================
--- branches/charge_board/docs/libwireless/hierarchy.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/hierarchy.html	(revision 62)
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Hierarchical Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<h1>libwireless Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="structnode__def.html">node_def</a>
+<li><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a>
+<li><a class="el" href="structQueue.html">Queue</a>
+<li><a class="el" href="structSensorMatrix.html">SensorMatrix</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wl__defs_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/wl__defs_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wl__defs_8h-source.html	(revision 62)
@@ -0,0 +1,89 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wl_defs.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wl_defs.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//comment out this line if using a computer hooked up to an xbee</span>
+<a name="l00002"></a>00002 <span class="comment">//#define ROBOT</span>
+<a name="l00003"></a>00003 
+<a name="l00004"></a>00004 <span class="comment">//uncomment this line for debug information</span>
+<a name="l00005"></a>00005 <span class="preprocessor">#define WL_DEBUG</span>
+<a name="l00006"></a>00006 <span class="preprocessor"></span>
+<a name="l00007"></a>00007 <span class="comment">// Packet Groups and Types</span>
+<a name="l00008"></a>00008 
+<a name="l00009"></a>00009 <span class="comment">// Error group</span>
+<a name="l00010"></a>00010 <span class="preprocessor">#define WL_ERROR_GROUP 1</span>
+<a name="l00011"></a>00011 <span class="preprocessor"></span>
+<a name="l00012"></a>00012 <span class="preprocessor">#define WL_ERROR_STRING_TYPE 1</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00014"></a>00014 <span class="comment">// Token Ring group</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#define WL_TOKEN_RING_GROUP 2</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00017"></a>00017 <span class="preprocessor">#define WL_TOKEN_PASS 1</span>
+<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define WL_TOKEN_BOM_ON 2</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define WL_TOKEN_INTERRUPT_REQUEST 3</span>
+<a name="l00020"></a>00020 <span class="preprocessor"></span><span class="preprocessor">#define WL_TOKEN_INTERRUPT_PASS 4</span>
+<a name="l00021"></a>00021 <span class="preprocessor"></span><span class="preprocessor">#define WL_TOKEN_JOIN 5</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span><span class="preprocessor">#define WL_TOKEN_JOIN_ACCEPT 6</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a>00024 <span class="comment">// timing constants</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#define BOM_DELAY 100</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span><span class="preprocessor">#define DEATH_DELAY 3</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span><span class="preprocessor">#define JOIN_DELAY 8</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a>00029 <span class="comment">// Recharging group</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#define WL_RECHARGE_GROUP 3</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a>00032 <span class="preprocessor">#define WL_RECHARGE_POLL_STATIONS 1</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_STATION_AVAILABLE 2</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_REQUEST 3</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_REQUEST_ACCEPT 4</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_VERIFY 5</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_CANCEL 6</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_SEEKING 7</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span><span class="preprocessor">#define WL_RECHARGE_DOCKED 8</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="preprocessor">#ifdef WL_DEBUG</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span>
+<a name="l00043"></a>00043 <span class="preprocessor">#ifdef ROBOT</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">#include &lt;serial.h&gt;</span>
+<a name="l00045"></a>00045 <span class="preprocessor">#endif</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="preprocessor">#ifdef ROBOT</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span><span class="preprocessor">#define WL_DEBUG_PRINT( s ) usb_puts( s )</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#define WL_DEBUG_PRINT( s ) printf( s )</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a>00053 <span class="preprocessor">#ifdef ROBOT</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span><span class="preprocessor">#define WL_DEBUG_PRINT_INT( i ) usb_puti(i)</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#else</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">#define WL_DEBUG_PRINT_INT( i ) printf("%i", i)</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>
+<a name="l00059"></a>00059 <span class="preprocessor">#else</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00061"></a>00061 <span class="preprocessor">#define WL_DEBUG_PRINT( s )</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span><span class="preprocessor">#define WL_DEBUG_PRINT_INT( i )</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a>00064 <span class="preprocessor">#endif</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/queue_8h.html
===================================================================
--- branches/charge_board/docs/libwireless/queue_8h.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/queue_8h.html	(revision 62)
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: queue.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>queue.h File Reference</h1>A queue implementation. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="queue_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structQueue.html">Queue</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gd79af6a8d562cb911d93f35b8825e148">queue_create</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new queue.  <a href="group__queue.html#gd79af6a8d562cb911d93f35b8825e148"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gd21ee75924298937673e2b8d66665466">queue_destroy</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy a queue.  <a href="group__queue.html#gd21ee75924298937673e2b8d66665466"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gcdb01f4d0c861c4981829920d3973b77">queue_add</a> (<a class="el" href="structQueue.html">Queue</a> *q, void *item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add an element to a queue.  <a href="group__queue.html#gcdb01f4d0c861c4981829920d3973b77"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gef91e5f119b77101f6c2e23eb1803059">queue_remove</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove an element from a queue.  <a href="group__queue.html#gef91e5f119b77101f6c2e23eb1803059"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gbfe7f6f65eaffa1ee166811f259807e4">queue_remove_all</a> (<a class="el" href="structQueue.html">Queue</a> *q, void *item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove all instances of a given element from a queue.  <a href="group__queue.html#gbfe7f6f65eaffa1ee166811f259807e4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#g97ae0b085c41d49c8a24e1e506967f9b">queue_size</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the size of a queue.  <a href="group__queue.html#g97ae0b085c41d49c8a24e1e506967f9b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#ga67a7f9940e9bbf21320a6f41e60998e">queue_is_empty</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if the queue is empty.  <a href="group__queue.html#ga67a7f9940e9bbf21320a6f41e60998e"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A queue implementation. 
+<p>
+Implements a queue, a first in, first out data structure.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Brian Coltin, Colony Project </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/globals_defs.html
===================================================================
--- branches/charge_board/docs/libwireless/globals_defs.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/globals_defs.html	(revision 62)
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>WL_MAX_PACKET_GROUPS
+: <a class="el" href="wireless_8h.html#f083cc95511287866eeb4337fdc75eeb">wireless.h</a><li>XBEE_BROADCAST
+: <a class="el" href="group__xbee.html#g93bbd21f7965e1697350f950cedff5c4">xbee.h</a><li>XBEE_CHANNEL_DEFAULT
+: <a class="el" href="group__xbee.html#g35f8b9d8e01e788f1e29928cba29f215">xbee.h</a><li>XBEE_OPTIONS_BROADCAST_ALL_PANS
+: <a class="el" href="group__xbee.html#g57382f888360b5b19f0de3b6f1f7c5a3">xbee.h</a><li>XBEE_OPTIONS_DISABLE_RESPONSE
+: <a class="el" href="group__xbee.html#gcf9509013302590dca5ce3db63c64609">xbee.h</a><li>XBEE_OPTIONS_NONE
+: <a class="el" href="group__xbee.html#gbca7356c2b8183fd41b5ca9a82dd962b">xbee.h</a><li>XBEE_PAN_DEFAULT
+: <a class="el" href="group__xbee.html#ge6bb9bb274d6750f954762454807a5a7">xbee.h</a><li>XBEE_RX
+: <a class="el" href="group__xbee.html#gc2b1262a3a1eb4a9f7ead366af71c32c">xbee.h</a><li>XBEE_TX_STATUS
+: <a class="el" href="group__xbee.html#g7840d8b64c8bec12d8b8d32e845a638a">xbee.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/structPacketGroupHandler.html
===================================================================
--- branches/charge_board/docs/libwireless/structPacketGroupHandler.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/structPacketGroupHandler.html	(revision 62)
@@ -0,0 +1,181 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: PacketGroupHandler Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<h1>PacketGroupHandler Struct Reference<br>
+<small>
+[<a class="el" href="group__wireless.html">Wireless</a>,&nbsp;<a class="el" href="group__wireless.html">Wireless</a>]</small>
+</h1><!-- doxytag: class="PacketGroupHandler" --><code>#include &lt;<a class="el" href="wireless_8h-source.html">wireless.h</a>&gt;</code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html#f0849c643f1b1e257ccfe96110109950">groupCode</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html#952b4b63982db13f55c02e17c55ab5ac">timeout_handler</a> )(void)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html#045939030c6e2f2dd0d53b5718d9f902">handle_response</a> )(int frame, int received)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html#5c01636d72de2ddafc734ab754d93104">handle_receive</a> )(char type, int source, unsigned char *packet, int length)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void(*&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html#c03247d5c07e97e35b1f557c0937b0eb">unregister</a> )(void)</td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A <a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> represents a packet group, and is used to register a packet group with the wireless library. It contains handlers for various events which can occur related to a packet group. 
+<p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="f0849c643f1b1e257ccfe96110109950"></a><!-- doxytag: member="PacketGroupHandler::groupCode" ref="f0849c643f1b1e257ccfe96110109950" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int <a class="el" href="structPacketGroupHandler.html#f0849c643f1b1e257ccfe96110109950">PacketGroupHandler::groupCode</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The group code for this packet group. This number must be unique. The maximum number of packet groups is defined by WL_MAX_PACKET_GROUPS.     </td>
+  </tr>
+</table>
+<a class="anchor" name="5c01636d72de2ddafc734ab754d93104"></a><!-- doxytag: member="PacketGroupHandler::handle_receive" ref="5c01636d72de2ddafc734ab754d93104" args=")(char type, int source, unsigned char *packet, int length)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void(* <a class="el" href="structPacketGroupHandler.html#5c01636d72de2ddafc734ab754d93104">PacketGroupHandler::handle_receive</a>)(char type, int source, unsigned char *packet, int length)          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Called when we receive a packet from this group.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>the packet type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td>the 16-bit address of the XBee this packet was sent from </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>packet</em>&nbsp;</td><td>the packet received </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>length</em>&nbsp;</td><td>the length of the packet </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="045939030c6e2f2dd0d53b5718d9f902"></a><!-- doxytag: member="PacketGroupHandler::handle_response" ref="045939030c6e2f2dd0d53b5718d9f902" args=")(int frame, int received)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void(* <a class="el" href="structPacketGroupHandler.html#045939030c6e2f2dd0d53b5718d9f902">PacketGroupHandler::handle_response</a>)(int frame, int received)          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Called when a transmit status packet is received from the XBee where the first four bits of the frame are the group code.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>frame</em>&nbsp;</td><td>the last four bits of the frame </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>received</em>&nbsp;</td><td>is true if we received an ack, 0 if we did not. </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="952b4b63982db13f55c02e17c55ab5ac"></a><!-- doxytag: member="PacketGroupHandler::timeout_handler" ref="952b4b63982db13f55c02e17c55ab5ac" args=")(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void(* <a class="el" href="structPacketGroupHandler.html#952b4b63982db13f55c02e17c55ab5ac">PacketGroupHandler::timeout_handler</a>)(void)          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Called every half second (not in interrupt, but in wl_do).     </td>
+  </tr>
+</table>
+<a class="anchor" name="c03247d5c07e97e35b1f557c0937b0eb"></a><!-- doxytag: member="PacketGroupHandler::unregister" ref="c03247d5c07e97e35b1f557c0937b0eb" args=")(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void(* <a class="el" href="structPacketGroupHandler.html#c03247d5c07e97e35b1f557c0937b0eb">PacketGroupHandler::unregister</a>)(void)          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Called for any cleanup when the network is turned off.     </td>
+  </tr>
+</table>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="wireless_8h-source.html">wireless.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/structQueue.html
===================================================================
--- branches/charge_board/docs/libwireless/structQueue.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/structQueue.html	(revision 62)
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Queue Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<h1>Queue Struct Reference<br>
+<small>
+[<a class="el" href="group__queue.html">Queue</a>,&nbsp;<a class="el" href="group__queue.html">Queue</a>]</small>
+</h1><!-- doxytag: class="Queue" --><code>#include &lt;<a class="el" href="queue_8h-source.html">queue.h</a>&gt;</code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structnode__def.html">node_def</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structQueue.html#773cee3afdf5fbe12a225c48123b1e39">head</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structnode__def.html">node_def</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structQueue.html#85703d406e92d3aa92c3e9dbfd0e3007">tail</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structQueue.html#c7d9701d244e3ba255ef8556e0562dc6">size</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Represents a queue, a first in, first out data structure. 
+<p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="773cee3afdf5fbe12a225c48123b1e39"></a><!-- doxytag: member="Queue::head" ref="773cee3afdf5fbe12a225c48123b1e39" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">struct <a class="el" href="structnode__def.html">node_def</a>* <a class="el" href="structQueue.html#773cee3afdf5fbe12a225c48123b1e39">Queue::head</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The head of the queue, the next item to be removed.     </td>
+  </tr>
+</table>
+<a class="anchor" name="c7d9701d244e3ba255ef8556e0562dc6"></a><!-- doxytag: member="Queue::size" ref="c7d9701d244e3ba255ef8556e0562dc6" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int <a class="el" href="structQueue.html#c7d9701d244e3ba255ef8556e0562dc6">Queue::size</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The number of elements in the queue.     </td>
+  </tr>
+</table>
+<a class="anchor" name="85703d406e92d3aa92c3e9dbfd0e3007"></a><!-- doxytag: member="Queue::tail" ref="85703d406e92d3aa92c3e9dbfd0e3007" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">struct <a class="el" href="structnode__def.html">node_def</a>* <a class="el" href="structQueue.html#85703d406e92d3aa92c3e9dbfd0e3007">Queue::tail</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The tail of the queue, the last item added.     </td>
+  </tr>
+</table>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="queue_8h-source.html">queue.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/sensor__matrix_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/sensor__matrix_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/sensor__matrix_8h-source.html	(revision 62)
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: sensor_matrix.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>sensor_matrix.h</h1><a href="sensor__matrix_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00025"></a><a class="code" href="structSensorMatrix.html">00025</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>
+<a name="l00026"></a>00026 <span class="keyword"></span>{
+<a name="l00030"></a><a class="code" href="structSensorMatrix.html#0e5b475c074fee8b4a88f05357b310bb">00030</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size;
+<a name="l00035"></a><a class="code" href="structSensorMatrix.html#447a6b27943ac53530de1eb44db3b5e6">00035</a>         <span class="keywordtype">int</span>** matrix;
+<a name="l00040"></a><a class="code" href="structSensorMatrix.html#9596130da4ab9251db7c0df33b8053d2">00040</a>         <span class="keywordtype">int</span>* joined;
+<a name="l00044"></a><a class="code" href="structSensorMatrix.html#888d68ace5ba04bfc741241718bc297c">00044</a>         <span class="keywordtype">int</span> numJoined;
+<a name="l00045"></a>00045 } <a class="code" href="structSensorMatrix.html">SensorMatrix</a>;
+<a name="l00046"></a>00046 
+<a name="l00048"></a>00048 <a class="code" href="structSensorMatrix.html">SensorMatrix</a>* <a class="code" href="group__sensormatrix.html#gdac971de8e0df3ed469c1e00b5d68ec3">sensor_matrix_create</a>(<span class="keywordtype">void</span>);
+<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="group__sensormatrix.html#g6125c1926243c789c9a22c7b7ca915f7">sensor_matrix_destroy</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m);
+<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="group__sensormatrix.html#g4a8cea8d7401802b8ef4f24768671cdb">sensor_matrix_add_robot</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>);
+<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="group__sensormatrix.html#g616455f4c0801504984cc7f7cf49d980">sensor_matrix_remove_robot</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <span class="keywordtype">id</span>);
+<a name="l00056"></a>00056 <span class="keywordtype">void</span> <a class="code" href="group__sensormatrix.html#g06977570b0c7b9628caeb5de012bbf22">sensor_matrix_set_reading</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m, <span class="keywordtype">int</span> observer, <span class="keywordtype">int</span> robot, <span class="keywordtype">int</span> reading);
+<a name="l00058"></a>00058 <span class="keywordtype">int</span> <a class="code" href="group__sensormatrix.html#gf8f7401b00608998b4cca34e3e5690b6">sensor_matrix_get_reading</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m, <span class="keywordtype">int</span> observer, <span class="keywordtype">int</span> robot);
+<a name="l00060"></a>00060 <span class="keywordtype">void</span> <a class="code" href="group__sensormatrix.html#ga2039902278b82d75157f5ce30ba24a3">sensor_matrix_set_in_ring</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m, <span class="keywordtype">int</span> robot, <span class="keywordtype">int</span> in);
+<a name="l00062"></a>00062 <span class="keywordtype">int</span> <a class="code" href="group__sensormatrix.html#g44d31428ed9c7a0c98e2ecfc74a55469">sensor_matrix_get_in_ring</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m, <span class="keywordtype">int</span> robot);
+<a name="l00064"></a>00064 <span class="keywordtype">int</span> <a class="code" href="group__sensormatrix.html#g1d799b72ee6274e5064e12e8dd17d493">sensor_matrix_get_size</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m);
+<a name="l00066"></a>00066 <span class="keywordtype">int</span> <a class="code" href="group__sensormatrix.html#g48353450a17126cffa44bd894f087621">sensor_matrix_get_joined</a>(<a class="code" href="structSensorMatrix.html">SensorMatrix</a>* m);
+<a name="l00067"></a>00067  <span class="comment">//end defgroup</span>
+<a name="l00069"></a>00069 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wireless_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/wireless_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wireless_8h-source.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wireless.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wireless.h</h1><a href="wireless_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00010"></a>00010 <span class="comment">//Note: If this is raised above 16, we will need to do</span>
+<a name="l00011"></a>00011 <span class="comment">//something about frame numbers for TX Status packets.</span>
+<a name="l00015"></a><a class="code" href="wireless_8h.html#f083cc95511287866eeb4337fdc75eeb">00015</a> <span class="comment"></span><span class="preprocessor">#define WL_MAX_PACKET_GROUPS 16</span>
+<a name="l00016"></a>00016 <span class="preprocessor"></span>
+<a name="l00047"></a><a class="code" href="structPacketGroupHandler.html">00047</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>
+<a name="l00048"></a>00048 <span class="keyword"></span>{
+<a name="l00054"></a><a class="code" href="structPacketGroupHandler.html#f0849c643f1b1e257ccfe96110109950">00054</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> groupCode;
+<a name="l00055"></a>00055 
+<a name="l00060"></a>00060         void (*timeout_handler) (void);
+<a name="l00061"></a>00061         
+<a name="l00071"></a>00071         void (*handle_response) (<span class="keywordtype">int</span> frame, <span class="keywordtype">int</span> received);
+<a name="l00072"></a>00072         
+<a name="l00082"></a>00082         void (*handle_receive) (<span class="keywordtype">char</span> type, <span class="keywordtype">int</span> source, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* packet,
+<a name="l00083"></a>00083                                                         <span class="keywordtype">int</span> length);
+<a name="l00084"></a>00084         
+<a name="l00088"></a>00088         void (*unregister) (void);
+<a name="l00089"></a>00089         
+<a name="l00090"></a>00090 } <a class="code" href="structPacketGroupHandler.html">PacketGroupHandler</a>;
+<a name="l00091"></a>00091 
+<a name="l00093"></a>00093 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g629ceefdf83847af356d90e2df27041c">wl_init</a>(<span class="keywordtype">void</span>);
+<a name="l00095"></a>00095 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g66075ff87a1c9f2c0d7938a26c7830f2">wl_terminate</a>(<span class="keywordtype">void</span>);
+<a name="l00097"></a>00097 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g5c1f1a0e20fc718e59edc29246afd703">wl_do</a>(<span class="keywordtype">void</span>);
+<a name="l00099"></a>00099 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g183343ed0594ec1c2b79bb4085d57107">wl_register_packet_group</a>(<a class="code" href="structPacketGroupHandler.html">PacketGroupHandler</a>* h);
+<a name="l00101"></a>00101 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#gcdbedf6465798abc7af3bf5fea3d4dd7">wl_unregister_packet_group</a>(<a class="code" href="structPacketGroupHandler.html">PacketGroupHandler</a>* h);
+<a name="l00102"></a>00102 
+<a name="l00104"></a>00104 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#ga7175b13dbfc0b11b341fbe0ad7c637c">wl_send_robot_to_robot_global_packet</a>(<span class="keywordtype">char</span> group, <span class="keywordtype">char</span> type,
+<a name="l00105"></a>00105                 <span class="keywordtype">char</span>* data, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> dest, <span class="keywordtype">char</span> frame);
+<a name="l00107"></a>00107 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#gafaca74445d215cef2b2e0ae1a1c72ba">wl_send_robot_to_robot_packet</a>(<span class="keywordtype">char</span> group, <span class="keywordtype">char</span> type,
+<a name="l00108"></a>00108                 <span class="keywordtype">char</span>* data, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> dest, <span class="keywordtype">char</span> frame);
+<a name="l00110"></a>00110 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#gdd534c99c49d5207fe09f02af304c1ad">wl_send_global_packet</a>(<span class="keywordtype">char</span> group, <span class="keywordtype">char</span> type,
+<a name="l00111"></a>00111                 <span class="keywordtype">char</span>* data, <span class="keywordtype">int</span> len, <span class="keywordtype">char</span> frame);
+<a name="l00113"></a>00113 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g0a1a0e4d885f0e0dde87160a16daa0aa">wl_send_pan_packet</a>(<span class="keywordtype">char</span> group, <span class="keywordtype">char</span> type,
+<a name="l00114"></a>00114                 <span class="keywordtype">char</span>* data, <span class="keywordtype">int</span> len, <span class="keywordtype">char</span> frame);
+<a name="l00115"></a>00115 
+<a name="l00117"></a>00117 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g211ccf907dce4493813573e20264e542">wl_set_pan</a>(<span class="keywordtype">int</span> pan);
+<a name="l00119"></a>00119 <span class="keywordtype">int</span> <a class="code" href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7">wl_get_pan</a>(<span class="keywordtype">void</span>);
+<a name="l00121"></a>00121 <span class="keywordtype">void</span> <a class="code" href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba">wl_set_channel</a>(<span class="keywordtype">int</span> channel);
+<a name="l00123"></a>00123 <span class="keywordtype">int</span> <a class="code" href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b">wl_get_channel</a>(<span class="keywordtype">void</span>);
+<a name="l00125"></a>00125 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="group__wireless.html#g90cb41c855ac3da028e8f1278bd49f4f">wl_get_xbee_id</a>(<span class="keywordtype">void</span>);
+<a name="l00126"></a>00126  <span class="comment">// end defgroup</span>
+<a name="l00128"></a>00128 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wireless_8h.html
===================================================================
--- branches/charge_board/docs/libwireless/wireless_8h.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wireless_8h.html	(revision 62)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wireless.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wireless.h File Reference</h1>Contains definitions for the wireless library. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="wireless_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="wireless_8h.html#f083cc95511287866eeb4337fdc75eeb">WL_MAX_PACKET_GROUPS</a>&nbsp;&nbsp;&nbsp;16</td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g629ceefdf83847af356d90e2df27041c">wl_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the wireless library.  <a href="group__wireless.html#g629ceefdf83847af356d90e2df27041c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g66075ff87a1c9f2c0d7938a26c7830f2">wl_terminate</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Uninitialize the wireless library.  <a href="group__wireless.html#g66075ff87a1c9f2c0d7938a26c7830f2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g5c1f1a0e20fc718e59edc29246afd703">wl_do</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Perform wireless library functionality.  <a href="group__wireless.html#g5c1f1a0e20fc718e59edc29246afd703"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g183343ed0594ec1c2b79bb4085d57107">wl_register_packet_group</a> (<a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> *h)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register a packet group with the wireless library.  <a href="group__wireless.html#g183343ed0594ec1c2b79bb4085d57107"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#gcdbedf6465798abc7af3bf5fea3d4dd7">wl_unregister_packet_group</a> (<a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> *h)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unregister a packet group with the wireless library.  <a href="group__wireless.html#gcdbedf6465798abc7af3bf5fea3d4dd7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#ga7175b13dbfc0b11b341fbe0ad7c637c">wl_send_robot_to_robot_global_packet</a> (char group, char type, char *data, int len, int dest, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to a specific robot in any PAN.  <a href="group__wireless.html#ga7175b13dbfc0b11b341fbe0ad7c637c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#gafaca74445d215cef2b2e0ae1a1c72ba">wl_send_robot_to_robot_packet</a> (char group, char type, char *data, int len, int dest, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to a specific robot in our PAN.  <a href="group__wireless.html#gafaca74445d215cef2b2e0ae1a1c72ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#gdd534c99c49d5207fe09f02af304c1ad">wl_send_global_packet</a> (char group, char type, char *data, int len, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to all robots.  <a href="group__wireless.html#gdd534c99c49d5207fe09f02af304c1ad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g0a1a0e4d885f0e0dde87160a16daa0aa">wl_send_pan_packet</a> (char group, char type, char *data, int len, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to all robots in our PAN.  <a href="group__wireless.html#g0a1a0e4d885f0e0dde87160a16daa0aa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g211ccf907dce4493813573e20264e542">wl_set_pan</a> (int pan)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the PAN we are using.  <a href="group__wireless.html#g211ccf907dce4493813573e20264e542"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7">wl_get_pan</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the PAN we are using.  <a href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba">wl_set_channel</a> (int channel)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the channel we are using.  <a href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b">wl_get_channel</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the channel we are using.  <a href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g90cb41c855ac3da028e8f1278bd49f4f">wl_get_xbee_id</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the 16-bit address of the XBee module.  <a href="group__wireless.html#g90cb41c855ac3da028e8f1278bd49f4f"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains definitions for the wireless library. 
+<p>
+Contains functions for the wireless library.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Brian Coltin, Colony Project, CMU Robotics Club </dd></dl>
+<hr><h2>Define Documentation</h2>
+<a class="anchor" name="f083cc95511287866eeb4337fdc75eeb"></a><!-- doxytag: member="wireless.h::WL_MAX_PACKET_GROUPS" ref="f083cc95511287866eeb4337fdc75eeb" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">#define WL_MAX_PACKET_GROUPS&nbsp;&nbsp;&nbsp;16          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The maximum number of packet groups.     </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wl__token__ring_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/wl__token__ring_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wl__token__ring_8h-source.html	(revision 62)
@@ -0,0 +1,47 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wl_token_ring.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wl_token_ring.h</h1><a href="wl__token__ring_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00022"></a>00022 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#g7bfd97ec1f89b442b278bbcddc6b6ee1">wl_token_ring_register</a>(<span class="keywordtype">void</span>);
+<a name="l00024"></a>00024 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#gde3dd682b6a757bab6ce4cbc9c518f8e">wl_token_ring_unregister</a>(<span class="keywordtype">void</span>);
+<a name="l00026"></a>00026 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#g0c407d5c215a97d58c67006bcc6e53ce">wl_token_ring_set_bom_functions</a>(<span class="keywordtype">void</span> (*on_function) (<span class="keywordtype">void</span>), 
+<a name="l00027"></a>00027                 <span class="keywordtype">void</span> (*off_function) (<span class="keywordtype">void</span>), <span class="keywordtype">int</span> (*max_bom_function) (<span class="keywordtype">void</span>));
+<a name="l00028"></a>00028 
+<a name="l00030"></a>00030 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#gbdb1e2258d1c69086692d2d31e02fb27">wl_token_ring_join</a>(<span class="keywordtype">void</span>);
+<a name="l00032"></a>00032 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#g6c2dd8742e100f63d4fb002707d1e85a">wl_token_ring_leave</a>(<span class="keywordtype">void</span>);
+<a name="l00034"></a>00034 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#g23b4e34098b6fc32dc55ccab7fe17b5b">wl_token_request</a>(<span class="keywordtype">int</span> robot);
+<a name="l00035"></a>00035 
+<a name="l00037"></a>00037 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#g0c61bb8892aa5513706e00cd8ce5ca8b">wl_token_get_robots_in_ring</a>(<span class="keywordtype">void</span>);
+<a name="l00039"></a>00039 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#g14e005f0b9582eca7e3585f247c4cd72">wl_token_is_robot_in_ring</a>(<span class="keywordtype">int</span> robot);
+<a name="l00040"></a>00040 
+<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_iterator_begin</a>(<span class="keywordtype">void</span>);
+<a name="l00044"></a>00044 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_iterator_has_next</a>(<span class="keywordtype">void</span>);
+<a name="l00046"></a>00046 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_iterator_next</a>(<span class="keywordtype">void</span>);
+<a name="l00047"></a>00047 
+<a name="l00049"></a>00049 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#gb4afd4b8e034d22d415f3c4a42a652fc">wl_token_get_sensor_reading</a>(<span class="keywordtype">int</span> source, <span class="keywordtype">int</span> dest);
+<a name="l00051"></a>00051 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#g1938c1d79dd9438dcd413d6d26372877">wl_token_get_my_sensor_reading</a>(<span class="keywordtype">int</span> dest);
+<a name="l00053"></a>00053 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#gf0d311d4feae71afc8bcb0b8c8e6ba57">wl_token_get_num_robots</a>(<span class="keywordtype">void</span>);
+<a name="l00055"></a>00055 <span class="keywordtype">int</span> <a class="code" href="group__tokenring.html#g5fe1508968d450a970b0d5417a06431d">wl_token_get_matrix_size</a>(<span class="keywordtype">void</span>);
+<a name="l00056"></a>00056  <span class="comment">//end token ring group</span>
+<a name="l00058"></a>00058 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/group__xbee.html
===================================================================
--- branches/charge_board/docs/libwireless/group__xbee.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/group__xbee.html	(revision 62)
@@ -0,0 +1,446 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: XBee</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>XBee</h1>Interface with the XBee module.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge6bb9bb274d6750f954762454807a5a7"></a><!-- doxytag: member="xbee::XBEE_PAN_DEFAULT" ref="ge6bb9bb274d6750f954762454807a5a7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#ge6bb9bb274d6750f954762454807a5a7">XBEE_PAN_DEFAULT</a>&nbsp;&nbsp;&nbsp;0xFFFF</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unset PAN, uses XBee default. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g35f8b9d8e01e788f1e29928cba29f215"></a><!-- doxytag: member="xbee::XBEE_CHANNEL_DEFAULT" ref="g35f8b9d8e01e788f1e29928cba29f215" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g35f8b9d8e01e788f1e29928cba29f215">XBEE_CHANNEL_DEFAULT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unset channel, uses XBee default. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g93bbd21f7965e1697350f950cedff5c4"></a><!-- doxytag: member="xbee::XBEE_BROADCAST" ref="g93bbd21f7965e1697350f950cedff5c4" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g93bbd21f7965e1697350f950cedff5c4">XBEE_BROADCAST</a>&nbsp;&nbsp;&nbsp;0xFFFF</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Broadcast to all robots in the PAN. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbca7356c2b8183fd41b5ca9a82dd962b"></a><!-- doxytag: member="xbee::XBEE_OPTIONS_NONE" ref="gbca7356c2b8183fd41b5ca9a82dd962b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gbca7356c2b8183fd41b5ca9a82dd962b">XBEE_OPTIONS_NONE</a>&nbsp;&nbsp;&nbsp;0x00</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">No special options. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcf9509013302590dca5ce3db63c64609"></a><!-- doxytag: member="xbee::XBEE_OPTIONS_DISABLE_RESPONSE" ref="gcf9509013302590dca5ce3db63c64609" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gcf9509013302590dca5ce3db63c64609">XBEE_OPTIONS_DISABLE_RESPONSE</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Do not receive a TX_STATUS message from this packet. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g57382f888360b5b19f0de3b6f1f7c5a3"></a><!-- doxytag: member="xbee::XBEE_OPTIONS_BROADCAST_ALL_PANS" ref="g57382f888360b5b19f0de3b6f1f7c5a3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g57382f888360b5b19f0de3b6f1f7c5a3">XBEE_OPTIONS_BROADCAST_ALL_PANS</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send the packet to all PANS. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7840d8b64c8bec12d8b8d32e845a638a"></a><!-- doxytag: member="xbee::XBEE_TX_STATUS" ref="g7840d8b64c8bec12d8b8d32e845a638a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7840d8b64c8bec12d8b8d32e845a638a">XBEE_TX_STATUS</a>&nbsp;&nbsp;&nbsp;0x89</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A transmit status packet. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc2b1262a3a1eb4a9f7ead366af71c32c"></a><!-- doxytag: member="xbee::XBEE_RX" ref="gc2b1262a3a1eb4a9f7ead366af71c32c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gc2b1262a3a1eb4a9f7ead366af71c32c">XBEE_RX</a>&nbsp;&nbsp;&nbsp;0x81</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A packet received from another XBee. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g334a723b79eccec83b17e25cde2e10f1">xbee_lib_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the XBee library.  <a href="#g334a723b79eccec83b17e25cde2e10f1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g9334ac71dca1ddd697b1a35a361ade6a">xbee_terminate</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Uninitialize the XBee library.  <a href="#g9334ac71dca1ddd697b1a35a361ade6a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g00fbdd9d849171588df736f8b608589d">xbee_get_packet</a> (unsigned char *packet)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a packet from the XBee.  <a href="#g00fbdd9d849171588df736f8b608589d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g3a3b8ce040002ab2b1a0923950b2f3c4">xbee_send_packet</a> (char *packet, int len, int dest, char options, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to the XBee.  <a href="#g3a3b8ce040002ab2b1a0923950b2f3c4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g832f07915e1ffa8afefcd378deead1cd">xbee_set_pan_id</a> (int id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the PAN ID for the XBee.  <a href="#g832f07915e1ffa8afefcd378deead1cd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7755cd8db87703c9e9943153660b8052">xbee_get_pan_id</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the XBee's PAN ID.  <a href="#g7755cd8db87703c9e9943153660b8052"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623">xbee_set_channel</a> (int channel)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the channel the XBee is currently using.  <a href="#g33f2b13a8f46ee08f14bce90160a5623"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a">xbee_get_channel</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the channel the XBee is currently using.  <a href="#g133706db81f69ba0a3c169b7a3f42d2a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7c53e8a8492494a61ca306875d633309">xbee_get_address</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the XBee's 16-bit address.  <a href="#g7c53e8a8492494a61ca306875d633309"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Interface with the XBee module. 
+<p>
+Interface with the XBee module. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g7c53e8a8492494a61ca306875d633309"></a><!-- doxytag: member="xbee.h::xbee_get_address" ref="g7c53e8a8492494a61ca306875d633309" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int xbee_get_address           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the XBee's 16-bit address. 
+<p>
+Get the 16-bit address of the XBee. This is used to specify who to send messages to and who messages are from.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the 16-bit address of the XBee. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g133706db81f69ba0a3c169b7a3f42d2a"></a><!-- doxytag: member="xbee.h::xbee_get_channel" ref="g133706db81f69ba0a3c169b7a3f42d2a" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int xbee_get_channel           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the channel the XBee is currently using. 
+<p>
+Returns the channel which the XBee is currently using.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the channel the XBee is using</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623">xbee_set_channel</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g00fbdd9d849171588df736f8b608589d"></a><!-- doxytag: member="xbee.h::xbee_get_packet" ref="g00fbdd9d849171588df736f8b608589d" args="(unsigned char *packet)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int xbee_get_packet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dest</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get a packet from the XBee. 
+<p>
+Reads a packet received from the XBee. This function is non-blocking. The resulting packet is stored in dest. Only returns transmission response packets and received packets. The returned packet does not include header information or the checksum. This method also handles special packets dealt with by the XBee library, and so should be called frequently while the XBee is in use.<br>
+<br>
+<p>
+The first byte of the packet will be either XBEE_TX_STATUS or XBEE_RX to indicated a response to a sent message or a received message, respectively.<br>
+<br>
+<p>
+For a status response packet:<br>
+ The first byte will be XBEE_TX_STATUS.<br>
+ The second byte will be the frame number.<br>
+ The third byte will be the result. 0 indicates success, and nonzero indicates that an error ocurred in transmitting the packet.<br>
+<br>
+<p>
+For a received packet:<br>
+ The first byte will be XBEE_RX.<br>
+ The second and third bytes will be the 16-bit address of the packet's sender.<br>
+ The fourth byte is the signal strength.<br>
+ The fifth byte is 1 if the packet were sent to a specific address, and 2 if it is a broadcast packet.<br>
+<br>
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>set to the packet data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the length of the packet, or -1 if no packet is available </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g7755cd8db87703c9e9943153660b8052"></a><!-- doxytag: member="xbee.h::xbee_get_pan_id" ref="g7755cd8db87703c9e9943153660b8052" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int xbee_get_pan_id           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the XBee's PAN ID. 
+<p>
+Get the PAN ID for the XBee.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the personal area network id, or XBEE_PAN_DEFAULT if it has not yet been set. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g334a723b79eccec83b17e25cde2e10f1"></a><!-- doxytag: member="xbee.h::xbee_lib_init" ref="g334a723b79eccec83b17e25cde2e10f1" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void xbee_lib_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the XBee library. 
+<p>
+Initializes the XBee library so that other functions may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pan_id</em>&nbsp;</td><td>the PAN to join initially. Use XBEE_PAN_DEFAULT to leave the PAN as it is initially. </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g3a3b8ce040002ab2b1a0923950b2f3c4"></a><!-- doxytag: member="xbee.h::xbee_send_packet" ref="g3a3b8ce040002ab2b1a0923950b2f3c4" args="(char *packet, int len, int dest, char options, char frame)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void xbee_send_packet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>packet</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>options</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>frame</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Send a packet to the XBee. 
+<p>
+Send the specified packet.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>packet</em>&nbsp;</td><td>the packet data to send </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>the number of bytes in the packet</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>the ID of the XBee to send the packet to, or XBEE_BROADCAST to send the message to all robots in the PAN.</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>options</em>&nbsp;</td><td>a combination of the flags XBEE_OPTIONS_NONE, XBEE_OPTIONS_DISABLE_RESPONSE and XBEE_OPTIONS_BROADCAST_ALL_PANS</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>frame</em>&nbsp;</td><td>the frame number to associate this packet with. This will be used to identify the response when the XBee alerts us as to whether or not our message was received. </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g33f2b13a8f46ee08f14bce90160a5623"></a><!-- doxytag: member="xbee.h::xbee_set_channel" ref="g33f2b13a8f46ee08f14bce90160a5623" args="(int channel)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void xbee_set_channel           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>channel</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the channel the XBee is currently using. 
+<p>
+Set the channel the XBee is using.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>the channel the XBee will not use, between 0x0B and 0x1A</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a">xbee_get_channel</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g832f07915e1ffa8afefcd378deead1cd"></a><!-- doxytag: member="xbee.h::xbee_set_pan_id" ref="g832f07915e1ffa8afefcd378deead1cd" args="(int id)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void xbee_set_pan_id           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the PAN ID for the XBee. 
+<p>
+Sets the personal area network id.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>id</em>&nbsp;</td><td>the new personal area network (PAN) id </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g9334ac71dca1ddd697b1a35a361ade6a"></a><!-- doxytag: member="xbee.h::xbee_terminate" ref="g9334ac71dca1ddd697b1a35a361ade6a" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void xbee_terminate           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Uninitialize the XBee library. 
+<p>
+Call when finished using the XBee library. This releases all sued resources.     </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wl__token__ring_8h.html
===================================================================
--- branches/charge_board/docs/libwireless/wl__token__ring_8h.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wl__token__ring_8h.html	(revision 62)
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wl_token_ring.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wl_token_ring.h File Reference</h1>Declarations for the token ring packet group. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="wl__token__ring_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g7bfd97ec1f89b442b278bbcddc6b6ee1">wl_token_ring_register</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register the token ring group with the wireless library.  <a href="group__tokenring.html#g7bfd97ec1f89b442b278bbcddc6b6ee1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gde3dd682b6a757bab6ce4cbc9c518f8e">wl_token_ring_unregister</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unregister the token ring group with the wirelss library.  <a href="group__tokenring.html#gde3dd682b6a757bab6ce4cbc9c518f8e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g0c407d5c215a97d58c67006bcc6e53ce">wl_token_ring_set_bom_functions</a> (void(*on_function)(void), void(*off_function)(void), int(*max_bom_function)(void))</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the functions called to turn the bom on and off.  <a href="group__tokenring.html#g0c407d5c215a97d58c67006bcc6e53ce"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gbdb1e2258d1c69086692d2d31e02fb27">wl_token_ring_join</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Join the token ring.  <a href="group__tokenring.html#gbdb1e2258d1c69086692d2d31e02fb27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g6c2dd8742e100f63d4fb002707d1e85a">wl_token_ring_leave</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Leave the token ring.  <a href="group__tokenring.html#g6c2dd8742e100f63d4fb002707d1e85a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g23b4e34098b6fc32dc55ccab7fe17b5b">wl_token_request</a> (int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request a BOM flash from the specified robot.  <a href="group__tokenring.html#g23b4e34098b6fc32dc55ccab7fe17b5b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g0c61bb8892aa5513706e00cd8ce5ca8b">wl_token_get_robots_in_ring</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of robots in the token ring.  <a href="group__tokenring.html#g0c61bb8892aa5513706e00cd8ce5ca8b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g14e005f0b9582eca7e3585f247c4cd72">wl_token_is_robot_in_ring</a> (int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return whether a given robot is in the token ring.  <a href="group__tokenring.html#g14e005f0b9582eca7e3585f247c4cd72"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_iterator_begin</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Begin iterating through robots in the token ring.  <a href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_iterator_has_next</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns whether there are more robots to iterate through.  <a href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_iterator_next</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the ID of the next robot in the token ring.  <a href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gb4afd4b8e034d22d415f3c4a42a652fc">wl_token_get_sensor_reading</a> (int source, int dest)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the latest BOM reading between two robots.  <a href="group__tokenring.html#gb4afd4b8e034d22d415f3c4a42a652fc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g1938c1d79dd9438dcd413d6d26372877">wl_token_get_my_sensor_reading</a> (int dest)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the latest BOM reading between us and another robot.  <a href="group__tokenring.html#g1938c1d79dd9438dcd413d6d26372877"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf0d311d4feae71afc8bcb0b8c8e6ba57"></a><!-- doxytag: member="wl_token_ring.h::wl_token_get_num_robots" ref="gf0d311d4feae71afc8bcb0b8c8e6ba57" args="(void)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gf0d311d4feae71afc8bcb0b8c8e6ba57">wl_token_get_num_robots</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of robots in the sensor matrix. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5fe1508968d450a970b0d5417a06431d"></a><!-- doxytag: member="wl_token_ring.h::wl_token_get_matrix_size" ref="g5fe1508968d450a970b0d5417a06431d" args="(void)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g5fe1508968d450a970b0d5417a06431d">wl_token_get_matrix_size</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of non-null elements in the sensor matrix. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Declarations for the token ring packet group. 
+<p>
+Contains declarations for the token ring packet group.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Brian Coltin, Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/globals_func.html
===================================================================
--- branches/charge_board/docs/libwireless/globals_func.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/globals_func.html	(revision 62)
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li id="current"><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="#index_q"><span>q</span></a></li>
+    <li><a href="#index_s"><span>s</span></a></li>
+    <li><a href="#index_w"><span>w</span></a></li>
+    <li><a href="#index_x"><span>x</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>queue_add()
+: <a class="el" href="group__queue.html#gcdb01f4d0c861c4981829920d3973b77">queue.h</a><li>queue_create()
+: <a class="el" href="group__queue.html#gd79af6a8d562cb911d93f35b8825e148">queue.h</a><li>queue_destroy()
+: <a class="el" href="group__queue.html#gd21ee75924298937673e2b8d66665466">queue.h</a><li>queue_is_empty()
+: <a class="el" href="group__queue.html#ga67a7f9940e9bbf21320a6f41e60998e">queue.h</a><li>queue_remove()
+: <a class="el" href="group__queue.html#gef91e5f119b77101f6c2e23eb1803059">queue.h</a><li>queue_remove_all()
+: <a class="el" href="group__queue.html#gbfe7f6f65eaffa1ee166811f259807e4">queue.h</a><li>queue_size()
+: <a class="el" href="group__queue.html#g97ae0b085c41d49c8a24e1e506967f9b">queue.h</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sensor_matrix_add_robot()
+: <a class="el" href="group__sensormatrix.html#g4a8cea8d7401802b8ef4f24768671cdb">sensor_matrix.h</a><li>sensor_matrix_create()
+: <a class="el" href="group__sensormatrix.html#gdac971de8e0df3ed469c1e00b5d68ec3">sensor_matrix.h</a><li>sensor_matrix_destroy()
+: <a class="el" href="group__sensormatrix.html#g6125c1926243c789c9a22c7b7ca915f7">sensor_matrix.h</a><li>sensor_matrix_get_in_ring()
+: <a class="el" href="group__sensormatrix.html#g44d31428ed9c7a0c98e2ecfc74a55469">sensor_matrix.h</a><li>sensor_matrix_get_joined()
+: <a class="el" href="group__sensormatrix.html#g48353450a17126cffa44bd894f087621">sensor_matrix.h</a><li>sensor_matrix_get_reading()
+: <a class="el" href="group__sensormatrix.html#gf8f7401b00608998b4cca34e3e5690b6">sensor_matrix.h</a><li>sensor_matrix_get_size()
+: <a class="el" href="group__sensormatrix.html#g1d799b72ee6274e5064e12e8dd17d493">sensor_matrix.h</a><li>sensor_matrix_remove_robot()
+: <a class="el" href="group__sensormatrix.html#g616455f4c0801504984cc7f7cf49d980">sensor_matrix.h</a><li>sensor_matrix_set_in_ring()
+: <a class="el" href="group__sensormatrix.html#ga2039902278b82d75157f5ce30ba24a3">sensor_matrix.h</a><li>sensor_matrix_set_reading()
+: <a class="el" href="group__sensormatrix.html#g06977570b0c7b9628caeb5de012bbf22">sensor_matrix.h</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wl_do()
+: <a class="el" href="group__wireless.html#g5c1f1a0e20fc718e59edc29246afd703">wireless.h</a><li>wl_error_register()
+: <a class="el" href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354">wl_error_group.h</a><li>wl_error_send_string()
+: <a class="el" href="group__wlerror.html#g01c7382a758876fce52c18a3e6c81534">wl_error_group.h</a><li>wl_error_unregister()
+: <a class="el" href="group__wlerror.html#g4c737d93fefc9aa8d4f87c9296bfa8a0">wl_error_group.h</a><li>wl_get_channel()
+: <a class="el" href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b">wireless.h</a><li>wl_get_pan()
+: <a class="el" href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7">wireless.h</a><li>wl_get_xbee_id()
+: <a class="el" href="group__wireless.html#g90cb41c855ac3da028e8f1278bd49f4f">wireless.h</a><li>wl_init()
+: <a class="el" href="group__wireless.html#g629ceefdf83847af356d90e2df27041c">wireless.h</a><li>wl_register_packet_group()
+: <a class="el" href="group__wireless.html#g183343ed0594ec1c2b79bb4085d57107">wireless.h</a><li>wl_send_global_packet()
+: <a class="el" href="group__wireless.html#gdd534c99c49d5207fe09f02af304c1ad">wireless.h</a><li>wl_send_pan_packet()
+: <a class="el" href="group__wireless.html#g0a1a0e4d885f0e0dde87160a16daa0aa">wireless.h</a><li>wl_send_robot_to_robot_global_packet()
+: <a class="el" href="group__wireless.html#ga7175b13dbfc0b11b341fbe0ad7c637c">wireless.h</a><li>wl_send_robot_to_robot_packet()
+: <a class="el" href="group__wireless.html#gafaca74445d215cef2b2e0ae1a1c72ba">wireless.h</a><li>wl_set_channel()
+: <a class="el" href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba">wireless.h</a><li>wl_set_pan()
+: <a class="el" href="group__wireless.html#g211ccf907dce4493813573e20264e542">wireless.h</a><li>wl_terminate()
+: <a class="el" href="group__wireless.html#g66075ff87a1c9f2c0d7938a26c7830f2">wireless.h</a><li>wl_token_get_matrix_size()
+: <a class="el" href="group__tokenring.html#g5fe1508968d450a970b0d5417a06431d">wl_token_ring.h</a><li>wl_token_get_my_sensor_reading()
+: <a class="el" href="group__tokenring.html#g1938c1d79dd9438dcd413d6d26372877">wl_token_ring.h</a><li>wl_token_get_num_robots()
+: <a class="el" href="group__tokenring.html#gf0d311d4feae71afc8bcb0b8c8e6ba57">wl_token_ring.h</a><li>wl_token_get_robots_in_ring()
+: <a class="el" href="group__tokenring.html#g0c61bb8892aa5513706e00cd8ce5ca8b">wl_token_ring.h</a><li>wl_token_get_sensor_reading()
+: <a class="el" href="group__tokenring.html#gb4afd4b8e034d22d415f3c4a42a652fc">wl_token_ring.h</a><li>wl_token_is_robot_in_ring()
+: <a class="el" href="group__tokenring.html#g14e005f0b9582eca7e3585f247c4cd72">wl_token_ring.h</a><li>wl_token_iterator_begin()
+: <a class="el" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_ring.h</a><li>wl_token_iterator_has_next()
+: <a class="el" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_ring.h</a><li>wl_token_iterator_next()
+: <a class="el" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_ring.h</a><li>wl_token_request()
+: <a class="el" href="group__tokenring.html#g23b4e34098b6fc32dc55ccab7fe17b5b">wl_token_ring.h</a><li>wl_token_ring_join()
+: <a class="el" href="group__tokenring.html#gbdb1e2258d1c69086692d2d31e02fb27">wl_token_ring.h</a><li>wl_token_ring_leave()
+: <a class="el" href="group__tokenring.html#g6c2dd8742e100f63d4fb002707d1e85a">wl_token_ring.h</a><li>wl_token_ring_register()
+: <a class="el" href="group__tokenring.html#g7bfd97ec1f89b442b278bbcddc6b6ee1">wl_token_ring.h</a><li>wl_token_ring_set_bom_functions()
+: <a class="el" href="group__tokenring.html#g0c407d5c215a97d58c67006bcc6e53ce">wl_token_ring.h</a><li>wl_token_ring_unregister()
+: <a class="el" href="group__tokenring.html#gde3dd682b6a757bab6ce4cbc9c518f8e">wl_token_ring.h</a><li>wl_unregister_packet_group()
+: <a class="el" href="group__wireless.html#gcdbedf6465798abc7af3bf5fea3d4dd7">wireless.h</a></ul>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>xbee_get_address()
+: <a class="el" href="group__xbee.html#g7c53e8a8492494a61ca306875d633309">xbee.h</a><li>xbee_get_channel()
+: <a class="el" href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a">xbee.h</a><li>xbee_get_packet()
+: <a class="el" href="group__xbee.html#g00fbdd9d849171588df736f8b608589d">xbee.h</a><li>xbee_get_pan_id()
+: <a class="el" href="group__xbee.html#g7755cd8db87703c9e9943153660b8052">xbee.h</a><li>xbee_lib_init()
+: <a class="el" href="group__xbee.html#g334a723b79eccec83b17e25cde2e10f1">xbee.h</a><li>xbee_send_packet()
+: <a class="el" href="group__xbee.html#g3a3b8ce040002ab2b1a0923950b2f3c4">xbee.h</a><li>xbee_set_channel()
+: <a class="el" href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623">xbee.h</a><li>xbee_set_pan_id()
+: <a class="el" href="group__xbee.html#g832f07915e1ffa8afefcd378deead1cd">xbee.h</a><li>xbee_terminate()
+: <a class="el" href="group__xbee.html#g9334ac71dca1ddd697b1a35a361ade6a">xbee.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/structSensorMatrix.html
===================================================================
--- branches/charge_board/docs/libwireless/structSensorMatrix.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/structSensorMatrix.html	(revision 62)
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: SensorMatrix Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<h1>SensorMatrix Struct Reference<br>
+<small>
+[<a class="el" href="group__sensormatrix.html">Sensor Matrix</a>,&nbsp;<a class="el" href="group__sensormatrix.html">Sensor Matrix</a>]</small>
+</h1><!-- doxytag: class="SensorMatrix" --><code>#include &lt;<a class="el" href="sensor__matrix_8h-source.html">sensor_matrix.h</a>&gt;</code>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html#0e5b475c074fee8b4a88f05357b310bb">size</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int **&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html#447a6b27943ac53530de1eb44db3b5e6">matrix</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html#9596130da4ab9251db7c0df33b8053d2">joined</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html#888d68ace5ba04bfc741241718bc297c">numJoined</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A sensor matrix. 
+<p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="9596130da4ab9251db7c0df33b8053d2"></a><!-- doxytag: member="SensorMatrix::joined" ref="9596130da4ab9251db7c0df33b8053d2" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int* <a class="el" href="structSensorMatrix.html#9596130da4ab9251db7c0df33b8053d2">SensorMatrix::joined</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The element representing a robot is true if that robot is in the token ring and false otherwise.     </td>
+  </tr>
+</table>
+<a class="anchor" name="447a6b27943ac53530de1eb44db3b5e6"></a><!-- doxytag: member="SensorMatrix::matrix" ref="447a6b27943ac53530de1eb44db3b5e6" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int** <a class="el" href="structSensorMatrix.html#447a6b27943ac53530de1eb44db3b5e6">SensorMatrix::matrix</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The matrix. Each row represents the readings of one robot.     </td>
+  </tr>
+</table>
+<a class="anchor" name="888d68ace5ba04bfc741241718bc297c"></a><!-- doxytag: member="SensorMatrix::numJoined" ref="888d68ace5ba04bfc741241718bc297c" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int <a class="el" href="structSensorMatrix.html#888d68ace5ba04bfc741241718bc297c">SensorMatrix::numJoined</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The number of robots in the token ring.     </td>
+  </tr>
+</table>
+<a class="anchor" name="0e5b475c074fee8b4a88f05357b310bb"></a><!-- doxytag: member="SensorMatrix::size" ref="0e5b475c074fee8b4a88f05357b310bb" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int <a class="el" href="structSensorMatrix.html#0e5b475c074fee8b4a88f05357b310bb">SensorMatrix::size</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The size of the sensor matrix.     </td>
+  </tr>
+</table>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li><a class="el" href="sensor__matrix_8h-source.html">sensor_matrix.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/structnode__def.html
===================================================================
--- branches/charge_board/docs/libwireless/structnode__def.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/structnode__def.html	(revision 62)
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: node_def Struct Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<h1>node_def Struct Reference</h1><!-- doxytag: class="node_def" --><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Fields</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnode__def.html#ee93810ffd33d69d464b1f6a33d9ffab">val</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structnode__def.html">node_def</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structnode__def.html#993cc38f96e8df93ed247e88a754641b">next</a></td></tr>
+
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A node in the queue. 
+<p>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="993cc38f96e8df93ed247e88a754641b"></a><!-- doxytag: member="node_def::next" ref="993cc38f96e8df93ed247e88a754641b" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">struct <a class="el" href="structnode__def.html">node_def</a>* <a class="el" href="structnode__def.html#993cc38f96e8df93ed247e88a754641b">node_def::next</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The next node in the queue.     </td>
+  </tr>
+</table>
+<a class="anchor" name="ee93810ffd33d69d464b1f6a33d9ffab"></a><!-- doxytag: member="node_def::val" ref="ee93810ffd33d69d464b1f6a33d9ffab" args="" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void* <a class="el" href="structnode__def.html#ee93810ffd33d69d464b1f6a33d9ffab">node_def::val</a>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+The item at this point in the queue.     </td>
+  </tr>
+</table>
+<hr>The documentation for this struct was generated from the following file:<ul>
+<li>queue.c</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/functions.html
===================================================================
--- branches/charge_board/docs/libwireless/functions.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/functions.html	(revision 62)
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="functions.html"><span>All</span></a></li>
+    <li><a href="functions_vars.html"><span>Variables</span></a></li>
+  </ul>
+</div>
+Here is a list of all documented struct and union fields with links to the struct/union documentation for each field:
+<p>
+<ul>
+<li>groupCode
+: <a class="el" href="structPacketGroupHandler.html#f0849c643f1b1e257ccfe96110109950">PacketGroupHandler</a><li>handle_receive
+: <a class="el" href="structPacketGroupHandler.html#5c01636d72de2ddafc734ab754d93104">PacketGroupHandler</a><li>handle_response
+: <a class="el" href="structPacketGroupHandler.html#045939030c6e2f2dd0d53b5718d9f902">PacketGroupHandler</a><li>head
+: <a class="el" href="structQueue.html#773cee3afdf5fbe12a225c48123b1e39">Queue</a><li>joined
+: <a class="el" href="structSensorMatrix.html#9596130da4ab9251db7c0df33b8053d2">SensorMatrix</a><li>matrix
+: <a class="el" href="structSensorMatrix.html#447a6b27943ac53530de1eb44db3b5e6">SensorMatrix</a><li>next
+: <a class="el" href="structnode__def.html#993cc38f96e8df93ed247e88a754641b">node_def</a><li>numJoined
+: <a class="el" href="structSensorMatrix.html#888d68ace5ba04bfc741241718bc297c">SensorMatrix</a><li>size
+: <a class="el" href="structSensorMatrix.html#0e5b475c074fee8b4a88f05357b310bb">SensorMatrix</a>, <a class="el" href="structQueue.html#c7d9701d244e3ba255ef8556e0562dc6">Queue</a><li>tail
+: <a class="el" href="structQueue.html#85703d406e92d3aa92c3e9dbfd0e3007">Queue</a><li>timeout_handler
+: <a class="el" href="structPacketGroupHandler.html#952b4b63982db13f55c02e17c55ab5ac">PacketGroupHandler</a><li>unregister
+: <a class="el" href="structPacketGroupHandler.html#c03247d5c07e97e35b1f557c0937b0eb">PacketGroupHandler</a><li>val
+: <a class="el" href="structnode__def.html#ee93810ffd33d69d464b1f6a33d9ffab">node_def</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/group__sensormatrix.html
===================================================================
--- branches/charge_board/docs/libwireless/group__sensormatrix.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/group__sensormatrix.html	(revision 62)
@@ -0,0 +1,511 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Sensor Matrix</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Sensor Matrix</h1>the robot sensor matrix  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html">SensorMatrix</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html">SensorMatrix</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#gdac971de8e0df3ed469c1e00b5d68ec3">sensor_matrix_create</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a sensor matrix.  <a href="#gdac971de8e0df3ed469c1e00b5d68ec3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g6125c1926243c789c9a22c7b7ca915f7">sensor_matrix_destroy</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy a sensor matrix.  <a href="#g6125c1926243c789c9a22c7b7ca915f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g4a8cea8d7401802b8ef4f24768671cdb">sensor_matrix_add_robot</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, unsigned int id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a robot to a sensor matrix.  <a href="#g4a8cea8d7401802b8ef4f24768671cdb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g616455f4c0801504984cc7f7cf49d980">sensor_matrix_remove_robot</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, unsigned int id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove a robot from a sensor matrix.  <a href="#g616455f4c0801504984cc7f7cf49d980"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g06977570b0c7b9628caeb5de012bbf22">sensor_matrix_set_reading</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int observer, int robot, int reading)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set a reading in a sensor matrix.  <a href="#g06977570b0c7b9628caeb5de012bbf22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#gf8f7401b00608998b4cca34e3e5690b6">sensor_matrix_get_reading</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int observer, int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a reading in a sensor matrix.  <a href="#gf8f7401b00608998b4cca34e3e5690b6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#ga2039902278b82d75157f5ce30ba24a3">sensor_matrix_set_in_ring</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int robot, int in)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set whether the robot is in the token ring.  <a href="#ga2039902278b82d75157f5ce30ba24a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g44d31428ed9c7a0c98e2ecfc74a55469">sensor_matrix_get_in_ring</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get whether the robot is in the sensor ring.  <a href="#g44d31428ed9c7a0c98e2ecfc74a55469"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g1d799b72ee6274e5064e12e8dd17d493">sensor_matrix_get_size</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the size of the sensor matrix.  <a href="#g1d799b72ee6274e5064e12e8dd17d493"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g48353450a17126cffa44bd894f087621">sensor_matrix_get_joined</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of robots which have joined the token ring.  <a href="#g48353450a17126cffa44bd894f087621"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+the robot sensor matrix 
+<p>
+These functions and structures are used for localization to determine the relative directions of robots. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g4a8cea8d7401802b8ef4f24768671cdb"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_add_robot" ref="g4a8cea8d7401802b8ef4f24768671cdb" args="(SensorMatrix *m, unsigned int id)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void sensor_matrix_add_robot           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>id</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Add a robot to a sensor matrix. 
+<p>
+Adds robot with XBee id id to the sensor matrix.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>id</em>&nbsp;</td><td>the XBee ID of the robot to add </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gdac971de8e0df3ed469c1e00b5d68ec3"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_create" ref="gdac971de8e0df3ed469c1e00b5d68ec3" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a>* sensor_matrix_create           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Create a sensor matrix. 
+<p>
+Initializes the sensor matrix.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the newly created sensor matrix </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g6125c1926243c789c9a22c7b7ca915f7"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_destroy" ref="g6125c1926243c789c9a22c7b7ca915f7" args="(SensorMatrix *m)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void sensor_matrix_destroy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>m</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Destroy a sensor matrix. 
+<p>
+Deletes and frees memory from the sensor matrix.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix to delete </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g44d31428ed9c7a0c98e2ecfc74a55469"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_get_in_ring" ref="g44d31428ed9c7a0c98e2ecfc74a55469" args="(SensorMatrix *m, int robot)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int sensor_matrix_get_in_ring           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>robot</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get whether the robot is in the sensor ring. 
+<p>
+Checks if the given robot is in the token ring.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>robot</em>&nbsp;</td><td>the ID of the robot to check</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>1 if the robot is in the token ring, 0 otherwise </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g48353450a17126cffa44bd894f087621"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_get_joined" ref="g48353450a17126cffa44bd894f087621" args="(SensorMatrix *m)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int sensor_matrix_get_joined           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>m</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the number of robots which have joined the token ring. 
+<p>
+Returns the number of robots which have joined the token ring.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the number of robots in the token ring </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gf8f7401b00608998b4cca34e3e5690b6"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_get_reading" ref="gf8f7401b00608998b4cca34e3e5690b6" args="(SensorMatrix *m, int observer, int robot)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int sensor_matrix_get_reading           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>observer</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>robot</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get a reading in a sensor matrix. 
+<p>
+Gets the sensor reading for a robot to another robot.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>observer</em>&nbsp;</td><td>the robot whose reading we check </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>robot</em>&nbsp;</td><td>the robot who we are checking the reading to</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the observer's BOM reading for robot </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g1d799b72ee6274e5064e12e8dd17d493"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_get_size" ref="g1d799b72ee6274e5064e12e8dd17d493" args="(SensorMatrix *m)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int sensor_matrix_get_size           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>m</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the size of the sensor matrix. 
+<p>
+Returns the size of the sensor matrix.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the size of the sensor matrix </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g616455f4c0801504984cc7f7cf49d980"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_remove_robot" ref="g616455f4c0801504984cc7f7cf49d980" args="(SensorMatrix *m, unsigned int id)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void sensor_matrix_remove_robot           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>id</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Remove a robot from a sensor matrix. 
+<p>
+Removes robot with id from the sensor matrix, and removes all sensor information regarding the robot.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>id</em>&nbsp;</td><td>the XBee ID of the robot to remove </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="ga2039902278b82d75157f5ce30ba24a3"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_set_in_ring" ref="ga2039902278b82d75157f5ce30ba24a3" args="(SensorMatrix *m, int robot, int in)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void sensor_matrix_set_in_ring           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>robot</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>in</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set whether the robot is in the token ring. 
+<p>
+Sets whether or not the given robot is part of the token ring.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>robot</em>&nbsp;</td><td>the robot to set as a member / nonmember of the token ring </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>in</em>&nbsp;</td><td>1 if the robot is in the token ring, 0 otherwise </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g06977570b0c7b9628caeb5de012bbf22"></a><!-- doxytag: member="sensor_matrix.h::sensor_matrix_set_reading" ref="g06977570b0c7b9628caeb5de012bbf22" args="(SensorMatrix *m, int observer, int robot, int reading)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void sensor_matrix_set_reading           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>observer</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>robot</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>reading</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set a reading in a sensor matrix. 
+<p>
+Sets the sensor reading for robot robot to reading.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>m</em>&nbsp;</td><td>the sensor matrix to set the reading for </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>observer</em>&nbsp;</td><td>the id of the robot who made the reading </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>robot</em>&nbsp;</td><td>the id of the robot who the reading is for </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>reading</em>&nbsp;</td><td>the BOM reading from observer to robot </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/group__tokenring.html
===================================================================
--- branches/charge_board/docs/libwireless/group__tokenring.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/group__tokenring.html	(revision 62)
@@ -0,0 +1,535 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Token Ring</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Token Ring</h1>Wireless library token ring implementation.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g7bfd97ec1f89b442b278bbcddc6b6ee1">wl_token_ring_register</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register the token ring group with the wireless library.  <a href="#g7bfd97ec1f89b442b278bbcddc6b6ee1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gde3dd682b6a757bab6ce4cbc9c518f8e">wl_token_ring_unregister</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unregister the token ring group with the wirelss library.  <a href="#gde3dd682b6a757bab6ce4cbc9c518f8e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g0c407d5c215a97d58c67006bcc6e53ce">wl_token_ring_set_bom_functions</a> (void(*on_function)(void), void(*off_function)(void), int(*max_bom_function)(void))</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the functions called to turn the bom on and off.  <a href="#g0c407d5c215a97d58c67006bcc6e53ce"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gbdb1e2258d1c69086692d2d31e02fb27">wl_token_ring_join</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Join the token ring.  <a href="#gbdb1e2258d1c69086692d2d31e02fb27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g6c2dd8742e100f63d4fb002707d1e85a">wl_token_ring_leave</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Leave the token ring.  <a href="#g6c2dd8742e100f63d4fb002707d1e85a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g23b4e34098b6fc32dc55ccab7fe17b5b">wl_token_request</a> (int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Request a BOM flash from the specified robot.  <a href="#g23b4e34098b6fc32dc55ccab7fe17b5b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g0c61bb8892aa5513706e00cd8ce5ca8b">wl_token_get_robots_in_ring</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of robots in the token ring.  <a href="#g0c61bb8892aa5513706e00cd8ce5ca8b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g14e005f0b9582eca7e3585f247c4cd72">wl_token_is_robot_in_ring</a> (int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return whether a given robot is in the token ring.  <a href="#g14e005f0b9582eca7e3585f247c4cd72"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_iterator_begin</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Begin iterating through robots in the token ring.  <a href="#g37ab9fb00e9eef273b4d0fcda81a2620"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_iterator_has_next</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns whether there are more robots to iterate through.  <a href="#gbd7dc40ee796a67e1160b2b2b8e7d02f"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_iterator_next</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the ID of the next robot in the token ring.  <a href="#gd9196324178877770d8ffc91d40893c3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gb4afd4b8e034d22d415f3c4a42a652fc">wl_token_get_sensor_reading</a> (int source, int dest)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the latest BOM reading between two robots.  <a href="#gb4afd4b8e034d22d415f3c4a42a652fc"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g1938c1d79dd9438dcd413d6d26372877">wl_token_get_my_sensor_reading</a> (int dest)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the latest BOM reading between us and another robot.  <a href="#g1938c1d79dd9438dcd413d6d26372877"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf0d311d4feae71afc8bcb0b8c8e6ba57"></a><!-- doxytag: member="tokenring::wl_token_get_num_robots" ref="gf0d311d4feae71afc8bcb0b8c8e6ba57" args="(void)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#gf0d311d4feae71afc8bcb0b8c8e6ba57">wl_token_get_num_robots</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of robots in the sensor matrix. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5fe1508968d450a970b0d5417a06431d"></a><!-- doxytag: member="tokenring::wl_token_get_matrix_size" ref="g5fe1508968d450a970b0d5417a06431d" args="(void)" -->
+int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__tokenring.html#g5fe1508968d450a970b0d5417a06431d">wl_token_get_matrix_size</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the number of non-null elements in the sensor matrix. <br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Wireless library token ring implementation. 
+<p>
+This packet group is used to form a token ring, which keeps track of the relative directions of the robots from one another. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g1938c1d79dd9438dcd413d6d26372877"></a><!-- doxytag: member="wl_token_ring.h::wl_token_get_my_sensor_reading" ref="g1938c1d79dd9438dcd413d6d26372877" args="(int dest)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_token_get_my_sensor_reading           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dest</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Return the latest BOM reading between us and another robot. 
+<p>
+Returns the BOM reading we have for robot dest.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>the robot whose relative location is returned</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>a BOM reading from us to robot dest, in the range 0-15, or -1 if it is unkown </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g0c61bb8892aa5513706e00cd8ce5ca8b"></a><!-- doxytag: member="wl_token_ring.h::wl_token_get_robots_in_ring" ref="g0c61bb8892aa5513706e00cd8ce5ca8b" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_token_get_robots_in_ring           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Return the number of robots in the token ring. 
+<p>
+Returns the number of robots in the token ring.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the number of robots in the token ring </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gb4afd4b8e034d22d415f3c4a42a652fc"></a><!-- doxytag: member="wl_token_ring.h::wl_token_get_sensor_reading" ref="gb4afd4b8e034d22d415f3c4a42a652fc" args="(int source, int dest)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_token_get_sensor_reading           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>source</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Return the latest BOM reading between two robots. 
+<p>
+Returns the BOM reading robot source has for robot dest.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>source</em>&nbsp;</td><td>the robot that made the BOM reading </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>the robot whose relative location is returned</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>a BOM reading from robot source to robot dest, in the range 0-15, or -1 if it is unknown </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g14e005f0b9582eca7e3585f247c4cd72"></a><!-- doxytag: member="wl_token_ring.h::wl_token_is_robot_in_ring" ref="g14e005f0b9582eca7e3585f247c4cd72" args="(int robot)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_token_is_robot_in_ring           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>robot</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Return whether a given robot is in the token ring. 
+<p>
+Returns true if the specified robot is in the token ring, false otherwise.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>robot</em>&nbsp;</td><td>the robot to check for whether it is in the token ring </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>nonzero if the robot is in the token ring, zero otherwise </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g37ab9fb00e9eef273b4d0fcda81a2620"></a><!-- doxytag: member="wl_token_ring.h::wl_token_iterator_begin" ref="g37ab9fb00e9eef273b4d0fcda81a2620" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_iterator_begin           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Begin iterating through robots in the token ring. 
+<p>
+Begins iterating through the robots in the token ring.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_iterator_has_next</a>, <a class="el" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_iterator_next</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gbd7dc40ee796a67e1160b2b2b8e7d02f"></a><!-- doxytag: member="wl_token_ring.h::wl_token_iterator_has_next" ref="gbd7dc40ee796a67e1160b2b2b8e7d02f" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_token_iterator_has_next           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns whether there are more robots to iterate through. 
+<p>
+Returns true if there are more robots in the token ring to iterate through, and false otherwise.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>nonzero if there are more robots to iterate through, zero otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_iterator_begin</a>, <a class="el" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_iterator_next</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gd9196324178877770d8ffc91d40893c3"></a><!-- doxytag: member="wl_token_ring.h::wl_token_iterator_next" ref="gd9196324178877770d8ffc91d40893c3" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_token_iterator_next           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the ID of the next robot in the token ring. 
+<p>
+Returns the next robot ID in the token ring.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the next robot ID in the token ring, or -1 if none exists</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_iterator_begin</a>, <a class="el" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_iterator_has_next</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g23b4e34098b6fc32dc55ccab7fe17b5b"></a><!-- doxytag: member="wl_token_ring.h::wl_token_request" ref="g23b4e34098b6fc32dc55ccab7fe17b5b" args="(int robot)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_request           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>robot</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Request a BOM flash from the specified robot. 
+<p>
+Requests that the specified robot be given the token and allowed to flash its BOM. After its BOM is flashed, the token will return to the robot who sent it.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>robot</em>&nbsp;</td><td>the ID of the robot which should flash its BOM </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gbdb1e2258d1c69086692d2d31e02fb27"></a><!-- doxytag: member="wl_token_ring.h::wl_token_ring_join" ref="gbdb1e2258d1c69086692d2d31e02fb27" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_ring_join           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Join the token ring. 
+<p>
+Causes the robot to join an existing token ring, or create one if no token ring exists. The token ring uses global and robot to robot packets, and does not rely on any PAN.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g6c2dd8742e100f63d4fb002707d1e85a"></a><!-- doxytag: member="wl_token_ring.h::wl_token_ring_leave" ref="g6c2dd8742e100f63d4fb002707d1e85a" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_ring_leave           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Leave the token ring. 
+<p>
+Causes the robot to leave the token ring. The robot stops alerting others of its location, but continues storing the locations of other robots.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g7bfd97ec1f89b442b278bbcddc6b6ee1"></a><!-- doxytag: member="wl_token_ring.h::wl_token_ring_register" ref="g7bfd97ec1f89b442b278bbcddc6b6ee1" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_ring_register           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Register the token ring group with the wireless library. 
+<p>
+Initialize the token ring packet group and register it with the wireless library. The robot will not join a token ring.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g0c407d5c215a97d58c67006bcc6e53ce"></a><!-- doxytag: member="wl_token_ring.h::wl_token_ring_set_bom_functions" ref="g0c407d5c215a97d58c67006bcc6e53ce" args="(void(*on_function)(void), void(*off_function)(void), int(*max_bom_function)(void))" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_ring_set_bom_functions           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void(*)(void)&nbsp;</td>
+          <td class="mdname" nowrap> <em>on_function</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void(*)(void)&nbsp;</td>
+          <td class="mdname" nowrap> <em>off_function</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int(*)(void)&nbsp;</td>
+          <td class="mdname" nowrap> <em>max_bom_function</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the functions called to turn the bom on and off. 
+<p>
+Sets the functions that are called when the BOM ought to be turned on or off. This could be used for things such as charging stations, which have multiple BOMs.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>on_function</em>&nbsp;</td><td>the function to be called when the BOM should be turned on </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>off_function</em>&nbsp;</td><td>the function to be called when the BOM should be turned off </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>max_bom_function</em>&nbsp;</td><td>the function to be called when a measurement of the maximum BOM reading is needed. </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gde3dd682b6a757bab6ce4cbc9c518f8e"></a><!-- doxytag: member="wl_token_ring.h::wl_token_ring_unregister" ref="gde3dd682b6a757bab6ce4cbc9c518f8e" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_token_ring_unregister           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Unregister the token ring group with the wirelss library. 
+<p>
+Removes the packet group from the wireless library.     </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/annotated.html
===================================================================
--- branches/charge_board/docs/libwireless/annotated.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/annotated.html	(revision 62)
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Data Structures</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<h1>libwireless Data Structures</h1>Here are the data structures with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="structnode__def.html">node_def</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structQueue.html">Queue</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="structSensorMatrix.html">SensorMatrix</a></td><td class="indexvalue"></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/xbee_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/xbee_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/xbee_8h-source.html	(revision 62)
@@ -0,0 +1,54 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: xbee.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>xbee.h</h1><a href="xbee_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00022"></a>00022 <span class="comment">/*Definitions*/</span>
+<a name="l00024"></a><a class="code" href="group__xbee.html#ge6bb9bb274d6750f954762454807a5a7">00024</a> <span class="preprocessor">#define XBEE_PAN_DEFAULT 0xFFFF</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__xbee.html#g35f8b9d8e01e788f1e29928cba29f215">00026</a> <span class="preprocessor">#define XBEE_CHANNEL_DEFAULT 0</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__xbee.html#g93bbd21f7965e1697350f950cedff5c4">00028</a> <span class="preprocessor">#define XBEE_BROADCAST 0xFFFF</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="group__xbee.html#gbca7356c2b8183fd41b5ca9a82dd962b">00030</a> <span class="preprocessor">#define XBEE_OPTIONS_NONE 0x00</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="group__xbee.html#gcf9509013302590dca5ce3db63c64609">00032</a> <span class="preprocessor">#define XBEE_OPTIONS_DISABLE_RESPONSE 0x01</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a><a class="code" href="group__xbee.html#g57382f888360b5b19f0de3b6f1f7c5a3">00034</a> <span class="preprocessor">#define XBEE_OPTIONS_BROADCAST_ALL_PANS 0x04</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a><a class="code" href="group__xbee.html#g7840d8b64c8bec12d8b8d32e845a638a">00036</a> <span class="preprocessor">#define XBEE_TX_STATUS 0x89</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="group__xbee.html#gc2b1262a3a1eb4a9f7ead366af71c32c">00038</a> <span class="preprocessor">#define XBEE_RX 0x81</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00041"></a>00041 <span class="keywordtype">void</span> <a class="code" href="group__xbee.html#g334a723b79eccec83b17e25cde2e10f1">xbee_lib_init</a>(<span class="keywordtype">void</span>);
+<a name="l00043"></a>00043 <span class="keywordtype">void</span> <a class="code" href="group__xbee.html#g9334ac71dca1ddd697b1a35a361ade6a">xbee_terminate</a>(<span class="keywordtype">void</span>);
+<a name="l00045"></a>00045 <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#g00fbdd9d849171588df736f8b608589d">xbee_get_packet</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* packet);
+<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="group__xbee.html#g3a3b8ce040002ab2b1a0923950b2f3c4">xbee_send_packet</a>(<span class="keywordtype">char</span>* packet, <span class="keywordtype">int</span> len, <span class="keywordtype">int</span> dest,
+<a name="l00048"></a>00048         <span class="keywordtype">char</span> options, <span class="keywordtype">char</span> frame);
+<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="group__xbee.html#g832f07915e1ffa8afefcd378deead1cd">xbee_set_pan_id</a>(<span class="keywordtype">int</span> <span class="keywordtype">id</span>);
+<a name="l00052"></a>00052 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#g7755cd8db87703c9e9943153660b8052">xbee_get_pan_id</a>(<span class="keywordtype">void</span>);
+<a name="l00054"></a>00054 <span class="keywordtype">void</span> <a class="code" href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623">xbee_set_channel</a>(<span class="keywordtype">int</span> channel);
+<a name="l00056"></a>00056 <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a">xbee_get_channel</a>(<span class="keywordtype">void</span>);
+<a name="l00058"></a>00058 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#g7c53e8a8492494a61ca306875d633309">xbee_get_address</a>(<span class="keywordtype">void</span>);
+<a name="l00059"></a>00059  <span class="comment">//end defgroup</span>
+<a name="l00061"></a>00061 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/queue_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/queue_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/queue_8h-source.html	(revision 62)
@@ -0,0 +1,42 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: queue.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>queue.h</h1><a href="queue_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00010"></a>00010 <span class="keyword">struct </span><a class="code" href="structnode__def.html">node_def</a>;
+<a name="l00011"></a>00011 
+<a name="l00025"></a><a class="code" href="structQueue.html">00025</a> <span class="keyword">typedef</span> <span class="keyword">struct</span>
+<a name="l00026"></a>00026 <span class="keyword"></span>{
+<a name="l00030"></a><a class="code" href="structQueue.html#773cee3afdf5fbe12a225c48123b1e39">00030</a>         <span class="keyword">struct </span><a class="code" href="structnode__def.html">node_def</a>* head;
+<a name="l00034"></a><a class="code" href="structQueue.html#85703d406e92d3aa92c3e9dbfd0e3007">00034</a>         <span class="keyword">struct </span><a class="code" href="structnode__def.html">node_def</a>* tail;
+<a name="l00038"></a><a class="code" href="structQueue.html#c7d9701d244e3ba255ef8556e0562dc6">00038</a>         <span class="keywordtype">int</span> size;
+<a name="l00039"></a>00039 } <a class="code" href="structQueue.html">Queue</a>;
+<a name="l00040"></a>00040 
+<a name="l00042"></a>00042 <a class="code" href="structQueue.html">Queue</a>* <a class="code" href="group__queue.html#gd79af6a8d562cb911d93f35b8825e148">queue_create</a>(<span class="keywordtype">void</span>);
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="group__queue.html#gd21ee75924298937673e2b8d66665466">queue_destroy</a>(<a class="code" href="structQueue.html">Queue</a>* q);
+<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="group__queue.html#gcdb01f4d0c861c4981829920d3973b77">queue_add</a>(<a class="code" href="structQueue.html">Queue</a>* q, <span class="keywordtype">void</span>* item);
+<a name="l00048"></a>00048 <span class="keywordtype">void</span>* <a class="code" href="group__queue.html#gef91e5f119b77101f6c2e23eb1803059">queue_remove</a>(<a class="code" href="structQueue.html">Queue</a>* q);
+<a name="l00050"></a>00050 <span class="keywordtype">void</span> <a class="code" href="group__queue.html#gbfe7f6f65eaffa1ee166811f259807e4">queue_remove_all</a>(<a class="code" href="structQueue.html">Queue</a>* q, <span class="keywordtype">void</span>* item);
+<a name="l00052"></a>00052 <span class="keywordtype">int</span> <a class="code" href="group__queue.html#g97ae0b085c41d49c8a24e1e506967f9b">queue_size</a>(<a class="code" href="structQueue.html">Queue</a>* q);
+<a name="l00054"></a>00054 <span class="keywordtype">int</span> <a class="code" href="group__queue.html#ga67a7f9940e9bbf21320a6f41e60998e">queue_is_empty</a>(<a class="code" href="structQueue.html">Queue</a>* q);
+<a name="l00055"></a>00055 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/xbee_8h.html
===================================================================
--- branches/charge_board/docs/libwireless/xbee_8h.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/xbee_8h.html	(revision 62)
@@ -0,0 +1,97 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: xbee.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>xbee.h File Reference</h1>Contains definitions for using the XBee. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="xbee_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge6bb9bb274d6750f954762454807a5a7"></a><!-- doxytag: member="xbee.h::XBEE_PAN_DEFAULT" ref="ge6bb9bb274d6750f954762454807a5a7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#ge6bb9bb274d6750f954762454807a5a7">XBEE_PAN_DEFAULT</a>&nbsp;&nbsp;&nbsp;0xFFFF</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unset PAN, uses XBee default. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g35f8b9d8e01e788f1e29928cba29f215"></a><!-- doxytag: member="xbee.h::XBEE_CHANNEL_DEFAULT" ref="g35f8b9d8e01e788f1e29928cba29f215" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g35f8b9d8e01e788f1e29928cba29f215">XBEE_CHANNEL_DEFAULT</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unset channel, uses XBee default. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g93bbd21f7965e1697350f950cedff5c4"></a><!-- doxytag: member="xbee.h::XBEE_BROADCAST" ref="g93bbd21f7965e1697350f950cedff5c4" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g93bbd21f7965e1697350f950cedff5c4">XBEE_BROADCAST</a>&nbsp;&nbsp;&nbsp;0xFFFF</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Broadcast to all robots in the PAN. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbca7356c2b8183fd41b5ca9a82dd962b"></a><!-- doxytag: member="xbee.h::XBEE_OPTIONS_NONE" ref="gbca7356c2b8183fd41b5ca9a82dd962b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gbca7356c2b8183fd41b5ca9a82dd962b">XBEE_OPTIONS_NONE</a>&nbsp;&nbsp;&nbsp;0x00</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">No special options. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcf9509013302590dca5ce3db63c64609"></a><!-- doxytag: member="xbee.h::XBEE_OPTIONS_DISABLE_RESPONSE" ref="gcf9509013302590dca5ce3db63c64609" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gcf9509013302590dca5ce3db63c64609">XBEE_OPTIONS_DISABLE_RESPONSE</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Do not receive a TX_STATUS message from this packet. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g57382f888360b5b19f0de3b6f1f7c5a3"></a><!-- doxytag: member="xbee.h::XBEE_OPTIONS_BROADCAST_ALL_PANS" ref="g57382f888360b5b19f0de3b6f1f7c5a3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g57382f888360b5b19f0de3b6f1f7c5a3">XBEE_OPTIONS_BROADCAST_ALL_PANS</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send the packet to all PANS. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7840d8b64c8bec12d8b8d32e845a638a"></a><!-- doxytag: member="xbee.h::XBEE_TX_STATUS" ref="g7840d8b64c8bec12d8b8d32e845a638a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7840d8b64c8bec12d8b8d32e845a638a">XBEE_TX_STATUS</a>&nbsp;&nbsp;&nbsp;0x89</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A transmit status packet. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc2b1262a3a1eb4a9f7ead366af71c32c"></a><!-- doxytag: member="xbee.h::XBEE_RX" ref="gc2b1262a3a1eb4a9f7ead366af71c32c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gc2b1262a3a1eb4a9f7ead366af71c32c">XBEE_RX</a>&nbsp;&nbsp;&nbsp;0x81</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A packet received from another XBee. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g334a723b79eccec83b17e25cde2e10f1">xbee_lib_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the XBee library.  <a href="group__xbee.html#g334a723b79eccec83b17e25cde2e10f1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g9334ac71dca1ddd697b1a35a361ade6a">xbee_terminate</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Uninitialize the XBee library.  <a href="group__xbee.html#g9334ac71dca1ddd697b1a35a361ade6a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g00fbdd9d849171588df736f8b608589d">xbee_get_packet</a> (unsigned char *packet)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a packet from the XBee.  <a href="group__xbee.html#g00fbdd9d849171588df736f8b608589d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g3a3b8ce040002ab2b1a0923950b2f3c4">xbee_send_packet</a> (char *packet, int len, int dest, char options, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to the XBee.  <a href="group__xbee.html#g3a3b8ce040002ab2b1a0923950b2f3c4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g832f07915e1ffa8afefcd378deead1cd">xbee_set_pan_id</a> (int id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the PAN ID for the XBee.  <a href="group__xbee.html#g832f07915e1ffa8afefcd378deead1cd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7755cd8db87703c9e9943153660b8052">xbee_get_pan_id</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the XBee's PAN ID.  <a href="group__xbee.html#g7755cd8db87703c9e9943153660b8052"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623">xbee_set_channel</a> (int channel)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the channel the XBee is currently using.  <a href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a">xbee_get_channel</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the channel the XBee is currently using.  <a href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7c53e8a8492494a61ca306875d633309">xbee_get_address</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the XBee's 16-bit address.  <a href="group__xbee.html#g7c53e8a8492494a61ca306875d633309"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains definitions for using the XBee. 
+<p>
+Contains definitions for interfacing with the XBee module, from either a robot or a computer. To use a robot, define ROBOT in <a class="el" href="wl__defs_8h-source.html">wl_defs.h</a>, and to use a computer, don't define ROBOT.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Brian Coltin, Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/globals.html
===================================================================
--- branches/charge_board/docs/libwireless/globals.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/globals.html	(revision 62)
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="#index_q"><span>q</span></a></li>
+    <li><a href="#index_s"><span>s</span></a></li>
+    <li><a href="#index_w"><span>w</span></a></li>
+    <li><a href="#index_x"><span>x</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>queue_add()
+: <a class="el" href="group__queue.html#gcdb01f4d0c861c4981829920d3973b77">queue.h</a><li>queue_create()
+: <a class="el" href="group__queue.html#gd79af6a8d562cb911d93f35b8825e148">queue.h</a><li>queue_destroy()
+: <a class="el" href="group__queue.html#gd21ee75924298937673e2b8d66665466">queue.h</a><li>queue_is_empty()
+: <a class="el" href="group__queue.html#ga67a7f9940e9bbf21320a6f41e60998e">queue.h</a><li>queue_remove()
+: <a class="el" href="group__queue.html#gef91e5f119b77101f6c2e23eb1803059">queue.h</a><li>queue_remove_all()
+: <a class="el" href="group__queue.html#gbfe7f6f65eaffa1ee166811f259807e4">queue.h</a><li>queue_size()
+: <a class="el" href="group__queue.html#g97ae0b085c41d49c8a24e1e506967f9b">queue.h</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>sensor_matrix_add_robot()
+: <a class="el" href="group__sensormatrix.html#g4a8cea8d7401802b8ef4f24768671cdb">sensor_matrix.h</a><li>sensor_matrix_create()
+: <a class="el" href="group__sensormatrix.html#gdac971de8e0df3ed469c1e00b5d68ec3">sensor_matrix.h</a><li>sensor_matrix_destroy()
+: <a class="el" href="group__sensormatrix.html#g6125c1926243c789c9a22c7b7ca915f7">sensor_matrix.h</a><li>sensor_matrix_get_in_ring()
+: <a class="el" href="group__sensormatrix.html#g44d31428ed9c7a0c98e2ecfc74a55469">sensor_matrix.h</a><li>sensor_matrix_get_joined()
+: <a class="el" href="group__sensormatrix.html#g48353450a17126cffa44bd894f087621">sensor_matrix.h</a><li>sensor_matrix_get_reading()
+: <a class="el" href="group__sensormatrix.html#gf8f7401b00608998b4cca34e3e5690b6">sensor_matrix.h</a><li>sensor_matrix_get_size()
+: <a class="el" href="group__sensormatrix.html#g1d799b72ee6274e5064e12e8dd17d493">sensor_matrix.h</a><li>sensor_matrix_remove_robot()
+: <a class="el" href="group__sensormatrix.html#g616455f4c0801504984cc7f7cf49d980">sensor_matrix.h</a><li>sensor_matrix_set_in_ring()
+: <a class="el" href="group__sensormatrix.html#ga2039902278b82d75157f5ce30ba24a3">sensor_matrix.h</a><li>sensor_matrix_set_reading()
+: <a class="el" href="group__sensormatrix.html#g06977570b0c7b9628caeb5de012bbf22">sensor_matrix.h</a></ul>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>wl_do()
+: <a class="el" href="group__wireless.html#g5c1f1a0e20fc718e59edc29246afd703">wireless.h</a><li>wl_error_register()
+: <a class="el" href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354">wl_error_group.h</a><li>wl_error_send_string()
+: <a class="el" href="group__wlerror.html#g01c7382a758876fce52c18a3e6c81534">wl_error_group.h</a><li>wl_error_unregister()
+: <a class="el" href="group__wlerror.html#g4c737d93fefc9aa8d4f87c9296bfa8a0">wl_error_group.h</a><li>wl_get_channel()
+: <a class="el" href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b">wireless.h</a><li>wl_get_pan()
+: <a class="el" href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7">wireless.h</a><li>wl_get_xbee_id()
+: <a class="el" href="group__wireless.html#g90cb41c855ac3da028e8f1278bd49f4f">wireless.h</a><li>wl_init()
+: <a class="el" href="group__wireless.html#g629ceefdf83847af356d90e2df27041c">wireless.h</a><li>WL_MAX_PACKET_GROUPS
+: <a class="el" href="wireless_8h.html#f083cc95511287866eeb4337fdc75eeb">wireless.h</a><li>wl_register_packet_group()
+: <a class="el" href="group__wireless.html#g183343ed0594ec1c2b79bb4085d57107">wireless.h</a><li>wl_send_global_packet()
+: <a class="el" href="group__wireless.html#gdd534c99c49d5207fe09f02af304c1ad">wireless.h</a><li>wl_send_pan_packet()
+: <a class="el" href="group__wireless.html#g0a1a0e4d885f0e0dde87160a16daa0aa">wireless.h</a><li>wl_send_robot_to_robot_global_packet()
+: <a class="el" href="group__wireless.html#ga7175b13dbfc0b11b341fbe0ad7c637c">wireless.h</a><li>wl_send_robot_to_robot_packet()
+: <a class="el" href="group__wireless.html#gafaca74445d215cef2b2e0ae1a1c72ba">wireless.h</a><li>wl_set_channel()
+: <a class="el" href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba">wireless.h</a><li>wl_set_pan()
+: <a class="el" href="group__wireless.html#g211ccf907dce4493813573e20264e542">wireless.h</a><li>wl_terminate()
+: <a class="el" href="group__wireless.html#g66075ff87a1c9f2c0d7938a26c7830f2">wireless.h</a><li>wl_token_get_matrix_size()
+: <a class="el" href="group__tokenring.html#g5fe1508968d450a970b0d5417a06431d">wl_token_ring.h</a><li>wl_token_get_my_sensor_reading()
+: <a class="el" href="group__tokenring.html#g1938c1d79dd9438dcd413d6d26372877">wl_token_ring.h</a><li>wl_token_get_num_robots()
+: <a class="el" href="group__tokenring.html#gf0d311d4feae71afc8bcb0b8c8e6ba57">wl_token_ring.h</a><li>wl_token_get_robots_in_ring()
+: <a class="el" href="group__tokenring.html#g0c61bb8892aa5513706e00cd8ce5ca8b">wl_token_ring.h</a><li>wl_token_get_sensor_reading()
+: <a class="el" href="group__tokenring.html#gb4afd4b8e034d22d415f3c4a42a652fc">wl_token_ring.h</a><li>wl_token_is_robot_in_ring()
+: <a class="el" href="group__tokenring.html#g14e005f0b9582eca7e3585f247c4cd72">wl_token_ring.h</a><li>wl_token_iterator_begin()
+: <a class="el" href="group__tokenring.html#g37ab9fb00e9eef273b4d0fcda81a2620">wl_token_ring.h</a><li>wl_token_iterator_has_next()
+: <a class="el" href="group__tokenring.html#gbd7dc40ee796a67e1160b2b2b8e7d02f">wl_token_ring.h</a><li>wl_token_iterator_next()
+: <a class="el" href="group__tokenring.html#gd9196324178877770d8ffc91d40893c3">wl_token_ring.h</a><li>wl_token_request()
+: <a class="el" href="group__tokenring.html#g23b4e34098b6fc32dc55ccab7fe17b5b">wl_token_ring.h</a><li>wl_token_ring_join()
+: <a class="el" href="group__tokenring.html#gbdb1e2258d1c69086692d2d31e02fb27">wl_token_ring.h</a><li>wl_token_ring_leave()
+: <a class="el" href="group__tokenring.html#g6c2dd8742e100f63d4fb002707d1e85a">wl_token_ring.h</a><li>wl_token_ring_register()
+: <a class="el" href="group__tokenring.html#g7bfd97ec1f89b442b278bbcddc6b6ee1">wl_token_ring.h</a><li>wl_token_ring_set_bom_functions()
+: <a class="el" href="group__tokenring.html#g0c407d5c215a97d58c67006bcc6e53ce">wl_token_ring.h</a><li>wl_token_ring_unregister()
+: <a class="el" href="group__tokenring.html#gde3dd682b6a757bab6ce4cbc9c518f8e">wl_token_ring.h</a><li>wl_unregister_packet_group()
+: <a class="el" href="group__wireless.html#gcdbedf6465798abc7af3bf5fea3d4dd7">wireless.h</a></ul>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>XBEE_BROADCAST
+: <a class="el" href="group__xbee.html#g93bbd21f7965e1697350f950cedff5c4">xbee.h</a><li>XBEE_CHANNEL_DEFAULT
+: <a class="el" href="group__xbee.html#g35f8b9d8e01e788f1e29928cba29f215">xbee.h</a><li>xbee_get_address()
+: <a class="el" href="group__xbee.html#g7c53e8a8492494a61ca306875d633309">xbee.h</a><li>xbee_get_channel()
+: <a class="el" href="group__xbee.html#g133706db81f69ba0a3c169b7a3f42d2a">xbee.h</a><li>xbee_get_packet()
+: <a class="el" href="group__xbee.html#g00fbdd9d849171588df736f8b608589d">xbee.h</a><li>xbee_get_pan_id()
+: <a class="el" href="group__xbee.html#g7755cd8db87703c9e9943153660b8052">xbee.h</a><li>xbee_lib_init()
+: <a class="el" href="group__xbee.html#g334a723b79eccec83b17e25cde2e10f1">xbee.h</a><li>XBEE_OPTIONS_BROADCAST_ALL_PANS
+: <a class="el" href="group__xbee.html#g57382f888360b5b19f0de3b6f1f7c5a3">xbee.h</a><li>XBEE_OPTIONS_DISABLE_RESPONSE
+: <a class="el" href="group__xbee.html#gcf9509013302590dca5ce3db63c64609">xbee.h</a><li>XBEE_OPTIONS_NONE
+: <a class="el" href="group__xbee.html#gbca7356c2b8183fd41b5ca9a82dd962b">xbee.h</a><li>XBEE_PAN_DEFAULT
+: <a class="el" href="group__xbee.html#ge6bb9bb274d6750f954762454807a5a7">xbee.h</a><li>XBEE_RX
+: <a class="el" href="group__xbee.html#gc2b1262a3a1eb4a9f7ead366af71c32c">xbee.h</a><li>xbee_send_packet()
+: <a class="el" href="group__xbee.html#g3a3b8ce040002ab2b1a0923950b2f3c4">xbee.h</a><li>xbee_set_channel()
+: <a class="el" href="group__xbee.html#g33f2b13a8f46ee08f14bce90160a5623">xbee.h</a><li>xbee_set_pan_id()
+: <a class="el" href="group__xbee.html#g832f07915e1ffa8afefcd378deead1cd">xbee.h</a><li>xbee_terminate()
+: <a class="el" href="group__xbee.html#g9334ac71dca1ddd697b1a35a361ade6a">xbee.h</a><li>XBEE_TX_STATUS
+: <a class="el" href="group__xbee.html#g7840d8b64c8bec12d8b8d32e845a638a">xbee.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/sensor__matrix_8h.html
===================================================================
--- branches/charge_board/docs/libwireless/sensor__matrix_8h.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/sensor__matrix_8h.html	(revision 62)
@@ -0,0 +1,70 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: sensor_matrix.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>sensor_matrix.h File Reference</h1>Definitions for sensor matrices. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="sensor__matrix_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structSensorMatrix.html">SensorMatrix</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structSensorMatrix.html">SensorMatrix</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#gdac971de8e0df3ed469c1e00b5d68ec3">sensor_matrix_create</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a sensor matrix.  <a href="group__sensormatrix.html#gdac971de8e0df3ed469c1e00b5d68ec3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g6125c1926243c789c9a22c7b7ca915f7">sensor_matrix_destroy</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy a sensor matrix.  <a href="group__sensormatrix.html#g6125c1926243c789c9a22c7b7ca915f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g4a8cea8d7401802b8ef4f24768671cdb">sensor_matrix_add_robot</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, unsigned int id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a robot to a sensor matrix.  <a href="group__sensormatrix.html#g4a8cea8d7401802b8ef4f24768671cdb"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g616455f4c0801504984cc7f7cf49d980">sensor_matrix_remove_robot</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, unsigned int id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove a robot from a sensor matrix.  <a href="group__sensormatrix.html#g616455f4c0801504984cc7f7cf49d980"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g06977570b0c7b9628caeb5de012bbf22">sensor_matrix_set_reading</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int observer, int robot, int reading)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set a reading in a sensor matrix.  <a href="group__sensormatrix.html#g06977570b0c7b9628caeb5de012bbf22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#gf8f7401b00608998b4cca34e3e5690b6">sensor_matrix_get_reading</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int observer, int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a reading in a sensor matrix.  <a href="group__sensormatrix.html#gf8f7401b00608998b4cca34e3e5690b6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#ga2039902278b82d75157f5ce30ba24a3">sensor_matrix_set_in_ring</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int robot, int in)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set whether the robot is in the token ring.  <a href="group__sensormatrix.html#ga2039902278b82d75157f5ce30ba24a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g44d31428ed9c7a0c98e2ecfc74a55469">sensor_matrix_get_in_ring</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m, int robot)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get whether the robot is in the sensor ring.  <a href="group__sensormatrix.html#g44d31428ed9c7a0c98e2ecfc74a55469"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g1d799b72ee6274e5064e12e8dd17d493">sensor_matrix_get_size</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the size of the sensor matrix.  <a href="group__sensormatrix.html#g1d799b72ee6274e5064e12e8dd17d493"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__sensormatrix.html#g48353450a17126cffa44bd894f087621">sensor_matrix_get_joined</a> (<a class="el" href="structSensorMatrix.html">SensorMatrix</a> *m)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of robots which have joined the token ring.  <a href="group__sensormatrix.html#g48353450a17126cffa44bd894f087621"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Definitions for sensor matrices. 
+<p>
+Contains functions and declarations for using sensor matrices.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Brian Coltin, Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/group__queue.html
===================================================================
--- branches/charge_board/docs/libwireless/group__queue.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/group__queue.html	(revision 62)
@@ -0,0 +1,325 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Queue</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Queue</h1>A queue implementation.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structQueue.html">Queue</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structQueue.html">Queue</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gd79af6a8d562cb911d93f35b8825e148">queue_create</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Create a new queue.  <a href="#gd79af6a8d562cb911d93f35b8825e148"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gd21ee75924298937673e2b8d66665466">queue_destroy</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destroy a queue.  <a href="#gd21ee75924298937673e2b8d66665466"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gcdb01f4d0c861c4981829920d3973b77">queue_add</a> (<a class="el" href="structQueue.html">Queue</a> *q, void *item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add an element to a queue.  <a href="#gcdb01f4d0c861c4981829920d3973b77"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gef91e5f119b77101f6c2e23eb1803059">queue_remove</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove an element from a queue.  <a href="#gef91e5f119b77101f6c2e23eb1803059"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#gbfe7f6f65eaffa1ee166811f259807e4">queue_remove_all</a> (<a class="el" href="structQueue.html">Queue</a> *q, void *item)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Remove all instances of a given element from a queue.  <a href="#gbfe7f6f65eaffa1ee166811f259807e4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#g97ae0b085c41d49c8a24e1e506967f9b">queue_size</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the size of a queue.  <a href="#g97ae0b085c41d49c8a24e1e506967f9b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__queue.html#ga67a7f9940e9bbf21320a6f41e60998e">queue_is_empty</a> (<a class="el" href="structQueue.html">Queue</a> *q)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if the queue is empty.  <a href="#ga67a7f9940e9bbf21320a6f41e60998e"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A queue implementation. 
+<p>
+A queue implementation. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="gcdb01f4d0c861c4981829920d3973b77"></a><!-- doxytag: member="queue.h::queue_add" ref="gcdb01f4d0c861c4981829920d3973b77" args="(Queue *q, void *item)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void queue_add           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>item</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Add an element to a queue. 
+<p>
+Add an element to a queue.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>q</em>&nbsp;</td><td>the queue to add an element to </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>item</em>&nbsp;</td><td>the item to add to the queue </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gd79af6a8d562cb911d93f35b8825e148"></a><!-- doxytag: member="queue.h::queue_create" ref="gd79af6a8d562cb911d93f35b8825e148" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a>* queue_create           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Create a new queue. 
+<p>
+Create a queue.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the newly created queue. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gd21ee75924298937673e2b8d66665466"></a><!-- doxytag: member="queue.h::queue_destroy" ref="gd21ee75924298937673e2b8d66665466" args="(Queue *q)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void queue_destroy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>q</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Destroy a queue. 
+<p>
+Destroys a queue, freeing memory.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>q</em>&nbsp;</td><td>the queue to destroy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="ga67a7f9940e9bbf21320a6f41e60998e"></a><!-- doxytag: member="queue.h::queue_is_empty" ref="ga67a7f9940e9bbf21320a6f41e60998e" args="(Queue *q)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int queue_is_empty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>q</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if the queue is empty. 
+<p>
+Check if the queue is empty.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>q</em>&nbsp;</td><td>the queue to check </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>nonzero if the queue is empty, 0 otherwise </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gef91e5f119b77101f6c2e23eb1803059"></a><!-- doxytag: member="queue.h::queue_remove" ref="gef91e5f119b77101f6c2e23eb1803059" args="(Queue *q)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void* queue_remove           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>q</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Remove an element from a queue. 
+<p>
+Remove an element from the front of a queue.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>q</em>&nbsp;</td><td>the queue to remove the element from</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the element which was removed </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gbfe7f6f65eaffa1ee166811f259807e4"></a><!-- doxytag: member="queue.h::queue_remove_all" ref="gbfe7f6f65eaffa1ee166811f259807e4" args="(Queue *q, void *item)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void queue_remove_all           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td>
+          <td class="mdname" nowrap> <em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>item</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Remove all instances of a given element from a queue. 
+<p>
+Remove all instances of a given element from a queue.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>q</em>&nbsp;</td><td>the queue to remove the elements from </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>item</em>&nbsp;</td><td>the element to remove all instances of </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g97ae0b085c41d49c8a24e1e506967f9b"></a><!-- doxytag: member="queue.h::queue_size" ref="g97ae0b085c41d49c8a24e1e506967f9b" args="(Queue *q)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int queue_size           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structQueue.html">Queue</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>q</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the size of a queue. 
+<p>
+Get the number of elements in the queue.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>q</em>&nbsp;</td><td>the queue to get the size of </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the size of the queue </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/files.html
===================================================================
--- branches/charge_board/docs/libwireless/files.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/files.html	(revision 62)
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>libwireless File List</h1>Here is a list of all documented files with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="queue_8h.html">queue.h</a> <a href="queue_8h-source.html">[code]</a></td><td class="indexvalue">A queue implementation </td></tr>
+  <tr><td class="indexkey"><a class="el" href="sensor__matrix_8h.html">sensor_matrix.h</a> <a href="sensor__matrix_8h-source.html">[code]</a></td><td class="indexvalue">Definitions for sensor matrices </td></tr>
+  <tr><td class="indexkey"><a class="el" href="wireless_8h.html">wireless.h</a> <a href="wireless_8h-source.html">[code]</a></td><td class="indexvalue">Contains definitions for the wireless library </td></tr>
+  <tr><td class="indexkey"><b>wl_defs.h</b> <a href="wl__defs_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="wl__error__group_8h.html">wl_error_group.h</a> <a href="wl__error__group_8h-source.html">[code]</a></td><td class="indexvalue">A packet group for error messages </td></tr>
+  <tr><td class="indexkey"><a class="el" href="wl__token__ring_8h.html">wl_token_ring.h</a> <a href="wl__token__ring_8h-source.html">[code]</a></td><td class="indexvalue">Declarations for the token ring packet group </td></tr>
+  <tr><td class="indexkey"><a class="el" href="xbee_8h.html">xbee.h</a> <a href="xbee_8h-source.html">[code]</a></td><td class="indexvalue">Contains definitions for using the XBee </td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wl__error__group_8h-source.html
===================================================================
--- branches/charge_board/docs/libwireless/wl__error__group_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wl__error__group_8h-source.html	(revision 62)
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wl_error_group.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wl_error_group.h</h1><a href="wl__error__group_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00021"></a>00021 <span class="keywordtype">void</span> <a class="code" href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354">wl_error_register</a>(<span class="keywordtype">void</span>);
+<a name="l00023"></a>00023 <span class="keywordtype">void</span> <a class="code" href="group__wlerror.html#g4c737d93fefc9aa8d4f87c9296bfa8a0">wl_error_unregister</a>(<span class="keywordtype">void</span>);
+<a name="l00025"></a>00025 <span class="keywordtype">void</span> <a class="code" href="group__wlerror.html#g01c7382a758876fce52c18a3e6c81534">wl_error_send_string</a>(<span class="keywordtype">char</span>* str);
+<a name="l00026"></a>00026  <span class="comment">// end defgroup</span>
+<a name="l00028"></a>00028 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/functions_vars.html
===================================================================
--- branches/charge_board/docs/libwireless/functions_vars.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/functions_vars.html	(revision 62)
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Data Fields - Variables</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
+    <li id="current"><a href="functions.html"><span>Data&nbsp;Fields</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="functions.html"><span>All</span></a></li>
+    <li id="current"><a href="functions_vars.html"><span>Variables</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>groupCode
+: <a class="el" href="structPacketGroupHandler.html#f0849c643f1b1e257ccfe96110109950">PacketGroupHandler</a><li>handle_receive
+: <a class="el" href="structPacketGroupHandler.html#5c01636d72de2ddafc734ab754d93104">PacketGroupHandler</a><li>handle_response
+: <a class="el" href="structPacketGroupHandler.html#045939030c6e2f2dd0d53b5718d9f902">PacketGroupHandler</a><li>head
+: <a class="el" href="structQueue.html#773cee3afdf5fbe12a225c48123b1e39">Queue</a><li>joined
+: <a class="el" href="structSensorMatrix.html#9596130da4ab9251db7c0df33b8053d2">SensorMatrix</a><li>matrix
+: <a class="el" href="structSensorMatrix.html#447a6b27943ac53530de1eb44db3b5e6">SensorMatrix</a><li>next
+: <a class="el" href="structnode__def.html#993cc38f96e8df93ed247e88a754641b">node_def</a><li>numJoined
+: <a class="el" href="structSensorMatrix.html#888d68ace5ba04bfc741241718bc297c">SensorMatrix</a><li>size
+: <a class="el" href="structSensorMatrix.html#0e5b475c074fee8b4a88f05357b310bb">SensorMatrix</a>, <a class="el" href="structQueue.html#c7d9701d244e3ba255ef8556e0562dc6">Queue</a><li>tail
+: <a class="el" href="structQueue.html#85703d406e92d3aa92c3e9dbfd0e3007">Queue</a><li>timeout_handler
+: <a class="el" href="structPacketGroupHandler.html#952b4b63982db13f55c02e17c55ab5ac">PacketGroupHandler</a><li>unregister
+: <a class="el" href="structPacketGroupHandler.html#c03247d5c07e97e35b1f557c0937b0eb">PacketGroupHandler</a><li>val
+: <a class="el" href="structnode__def.html#ee93810ffd33d69d464b1f6a33d9ffab">node_def</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/wl__error__group_8h.html
===================================================================
--- branches/charge_board/docs/libwireless/wl__error__group_8h.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/wl__error__group_8h.html	(revision 62)
@@ -0,0 +1,46 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: wl_error_group.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>wl_error_group.h File Reference</h1>A packet group for error messages. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="wl__error__group_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354">wl_error_register</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register this packet group with the wireless library.  <a href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wlerror.html#g4c737d93fefc9aa8d4f87c9296bfa8a0">wl_error_unregister</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unregister this packet group with the wireless library.  <a href="group__wlerror.html#g4c737d93fefc9aa8d4f87c9296bfa8a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wlerror.html#g01c7382a758876fce52c18a3e6c81534">wl_error_send_string</a> (char *str)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a string in an error packet.  <a href="group__wlerror.html#g01c7382a758876fce52c18a3e6c81534"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+A packet group for error messages. 
+<p>
+A packet group for sending and receiving error messages.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Brian Coltin, Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/index.html
===================================================================
--- branches/charge_board/docs/libwireless/index.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/index.html	(revision 62)
@@ -0,0 +1,21 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Main Page</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>libwireless Documentation</h1>
+<p>
+<h3 align="center">1.0 </h3><hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:30 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/group__wlerror.html
===================================================================
--- branches/charge_board/docs/libwireless/group__wlerror.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/group__wlerror.html	(revision 62)
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Error Packets</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Error Packets</h1>Functions for sending and receiving error packets.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354">wl_error_register</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register this packet group with the wireless library.  <a href="#g3217351e71b892a90ed3ba79ed36e354"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wlerror.html#g4c737d93fefc9aa8d4f87c9296bfa8a0">wl_error_unregister</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unregister this packet group with the wireless library.  <a href="#g4c737d93fefc9aa8d4f87c9296bfa8a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wlerror.html#g01c7382a758876fce52c18a3e6c81534">wl_error_send_string</a> (char *str)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a string in an error packet.  <a href="#g01c7382a758876fce52c18a3e6c81534"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for sending and receiving error packets. 
+<p>
+Functions for sending and receiving error packets. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g3217351e71b892a90ed3ba79ed36e354"></a><!-- doxytag: member="wl_error_group.h::wl_error_register" ref="g3217351e71b892a90ed3ba79ed36e354" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_error_register           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Register this packet group with the wireless library. 
+<p>
+Register this packet group with the wireless library. This function must be called before any other wl_error function.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g01c7382a758876fce52c18a3e6c81534"></a><!-- doxytag: member="wl_error_group.h::wl_error_send_string" ref="g01c7382a758876fce52c18a3e6c81534" args="(char *str)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_error_send_string           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>str</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Send a string in an error packet. 
+<p>
+Send an error message as a string.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>str</em>&nbsp;</td><td>the error message to send </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g4c737d93fefc9aa8d4f87c9296bfa8a0"></a><!-- doxytag: member="wl_error_group.h::wl_error_unregister" ref="g4c737d93fefc9aa8d4f87c9296bfa8a0" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_error_unregister           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Unregister this packet group with the wireless library. 
+<p>
+Unregister this packet group with the wireless library. This function must be called after wl_error_register.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__wlerror.html#g3217351e71b892a90ed3ba79ed36e354">wl_error_register</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/modules.html
===================================================================
--- branches/charge_board/docs/libwireless/modules.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/modules.html	(revision 62)
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Module Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li id="current"><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>libwireless Modules</h1>Here is a list of all modules:<ul>
+<li><a class="el" href="group__queue.html">Queue</a>
+<li><a class="el" href="group__sensormatrix.html">Sensor Matrix</a>
+<li><a class="el" href="group__wireless.html">Wireless</a>
+<li><a class="el" href="group__wlerror.html">Error Packets</a>
+<li><a class="el" href="group__tokenring.html">Token Ring</a>
+<li><a class="el" href="group__xbee.html">XBee</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/group__wireless.html
===================================================================
--- branches/charge_board/docs/libwireless/group__wireless.html	(nonexistent)
+++ branches/charge_board/docs/libwireless/group__wireless.html	(revision 62)
@@ -0,0 +1,697 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libwireless: Wireless</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Wireless</h1>Wireless definitions.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a></td></tr>
+
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g629ceefdf83847af356d90e2df27041c">wl_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the wireless library.  <a href="#g629ceefdf83847af356d90e2df27041c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g66075ff87a1c9f2c0d7938a26c7830f2">wl_terminate</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Uninitialize the wireless library.  <a href="#g66075ff87a1c9f2c0d7938a26c7830f2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g5c1f1a0e20fc718e59edc29246afd703">wl_do</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Perform wireless library functionality.  <a href="#g5c1f1a0e20fc718e59edc29246afd703"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g183343ed0594ec1c2b79bb4085d57107">wl_register_packet_group</a> (<a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> *h)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Register a packet group with the wireless library.  <a href="#g183343ed0594ec1c2b79bb4085d57107"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#gcdbedf6465798abc7af3bf5fea3d4dd7">wl_unregister_packet_group</a> (<a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> *h)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unregister a packet group with the wireless library.  <a href="#gcdbedf6465798abc7af3bf5fea3d4dd7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#ga7175b13dbfc0b11b341fbe0ad7c637c">wl_send_robot_to_robot_global_packet</a> (char group, char type, char *data, int len, int dest, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to a specific robot in any PAN.  <a href="#ga7175b13dbfc0b11b341fbe0ad7c637c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#gafaca74445d215cef2b2e0ae1a1c72ba">wl_send_robot_to_robot_packet</a> (char group, char type, char *data, int len, int dest, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to a specific robot in our PAN.  <a href="#gafaca74445d215cef2b2e0ae1a1c72ba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#gdd534c99c49d5207fe09f02af304c1ad">wl_send_global_packet</a> (char group, char type, char *data, int len, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to all robots.  <a href="#gdd534c99c49d5207fe09f02af304c1ad"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g0a1a0e4d885f0e0dde87160a16daa0aa">wl_send_pan_packet</a> (char group, char type, char *data, int len, char frame)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Send a packet to all robots in our PAN.  <a href="#g0a1a0e4d885f0e0dde87160a16daa0aa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g211ccf907dce4493813573e20264e542">wl_set_pan</a> (int pan)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the PAN we are using.  <a href="#g211ccf907dce4493813573e20264e542"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7">wl_get_pan</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the PAN we are using.  <a href="#g4e6b5c97d40a8e7557a1b4b90a7d34f7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba">wl_set_channel</a> (int channel)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the channel we are using.  <a href="#g9aac809e57c9eb93a2905ed544c93aba"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b">wl_get_channel</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the channel we are using.  <a href="#g2d65d3e35b193da4213755c4bf61ab6b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__wireless.html#g90cb41c855ac3da028e8f1278bd49f4f">wl_get_xbee_id</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the 16-bit address of the XBee module.  <a href="#g90cb41c855ac3da028e8f1278bd49f4f"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Wireless definitions. 
+<p>
+Contains functions and definitions for dealing with wireless functionality.<br>
+<br>
+<p>
+The wireless library provides a modular method for dealing with wireless packets, by allowing packet groups to be registered. A packet group is a collection of packets which share a packet group code. Each packet in the group also has a type. A packet group code and type are sent with each packet. When a packet with a group code registered in the wireless library is received, the corresponding event handler is called. The event handler uses the packet type and other information stored in the packet to respond.<br>
+<br>
+<p>
+This architecture allows different wireless functionality to be defined and handled separately, making it simpler and more efficient to take advantage of the XBee's wireless functionality. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g5c1f1a0e20fc718e59edc29246afd703"></a><!-- doxytag: member="wireless.h::wl_do" ref="g5c1f1a0e20fc718e59edc29246afd703" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_do           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Perform wireless library functionality. 
+<p>
+Performs wireless library functionality. This function must be called frequently for wireless to perform effectively. This function will call timeout handlers, as well as received packet and transmit status handlers.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g2d65d3e35b193da4213755c4bf61ab6b"></a><!-- doxytag: member="wireless.h::wl_get_channel" ref="g2d65d3e35b193da4213755c4bf61ab6b" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_get_channel           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the channel we are using. 
+<p>
+Get the channel the XBee is part of.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the channel the XBee is part of</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__wireless.html#g9aac809e57c9eb93a2905ed544c93aba">wl_set_channel</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g4e6b5c97d40a8e7557a1b4b90a7d34f7"></a><!-- doxytag: member="wireless.h::wl_get_pan" ref="g4e6b5c97d40a8e7557a1b4b90a7d34f7" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wl_get_pan           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the PAN we are using. 
+<p>
+Get the PAN the XBee is currently part of.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the PAN of the XBee</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__wireless.html#g211ccf907dce4493813573e20264e542">wl_set_pan</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g90cb41c855ac3da028e8f1278bd49f4f"></a><!-- doxytag: member="wireless.h::wl_get_xbee_id" ref="g90cb41c855ac3da028e8f1278bd49f4f" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int wl_get_xbee_id           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the 16-bit address of the XBee module. 
+<p>
+Returns the 16-bit address of the XBee module.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the 16-bit address of the XBee module. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g629ceefdf83847af356d90e2df27041c"></a><!-- doxytag: member="wireless.h::wl_init" ref="g629ceefdf83847af356d90e2df27041c" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the wireless library. 
+<p>
+Initializes the wireless library. Must be called before any other function.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g183343ed0594ec1c2b79bb4085d57107"></a><!-- doxytag: member="wireless.h::wl_register_packet_group" ref="g183343ed0594ec1c2b79bb4085d57107" args="(PacketGroupHandler *h)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_register_packet_group           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>h</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Register a packet group with the wireless library. 
+<p>
+Register a packet group with the wireless library. The event handlers in the packet group will be called whenever an event dealing with the packet group's group code occurs.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>h</em>&nbsp;</td><td>the <a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> to register </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gdd534c99c49d5207fe09f02af304c1ad"></a><!-- doxytag: member="wireless.h::wl_send_global_packet" ref="gdd534c99c49d5207fe09f02af304c1ad" args="(char group, char type, char *data, int len, char frame)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_send_global_packet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname" nowrap> <em>group</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>frame</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Send a packet to all robots. 
+<p>
+Send a packet to all XBees in all PANs.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>group</em>&nbsp;</td><td>the packet group </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>the packet type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>the packet data </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>the packet length in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>frame</em>&nbsp;</td><td>the frame number to see with a TX_STATUS response </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g0a1a0e4d885f0e0dde87160a16daa0aa"></a><!-- doxytag: member="wireless.h::wl_send_pan_packet" ref="g0a1a0e4d885f0e0dde87160a16daa0aa" args="(char group, char type, char *data, int len, char frame)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_send_pan_packet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname" nowrap> <em>group</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>frame</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Send a packet to all robots in our PAN. 
+<p>
+Send a packet to all XBee's in the same PAN.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>group</em>&nbsp;</td><td>the packet group </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>the packet type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>the packet data </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>the packet length in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>frame</em>&nbsp;</td><td>the frame number to see with a TX_STATUS response </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="ga7175b13dbfc0b11b341fbe0ad7c637c"></a><!-- doxytag: member="wireless.h::wl_send_robot_to_robot_global_packet" ref="ga7175b13dbfc0b11b341fbe0ad7c637c" args="(char group, char type, char *data, int len, int dest, char frame)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_send_robot_to_robot_global_packet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname" nowrap> <em>group</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>frame</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Send a packet to a specific robot in any PAN. 
+<p>
+Send a packet to a specific XBee without specifying a PAN.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>group</em>&nbsp;</td><td>the packet group </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>the packet type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>the packet data </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>the packet length in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>the 16-bit address of the XBee to send the packet to </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>frame</em>&nbsp;</td><td>the frame number to see with a TX_STATUS response </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gafaca74445d215cef2b2e0ae1a1c72ba"></a><!-- doxytag: member="wireless.h::wl_send_robot_to_robot_packet" ref="gafaca74445d215cef2b2e0ae1a1c72ba" args="(char group, char type, char *data, int len, int dest, char frame)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_send_robot_to_robot_packet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname" nowrap> <em>group</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>data</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>frame</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Send a packet to a specific robot in our PAN. 
+<p>
+Send a packet to a specific XBee in the same PAN.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>group</em>&nbsp;</td><td>the packet group </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>the packet type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>the packet data </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>len</em>&nbsp;</td><td>the packet length in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>the 16-bit address of the XBee to send the packet to </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>frame</em>&nbsp;</td><td>the frame number to see with a TX_STATUS response </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g9aac809e57c9eb93a2905ed544c93aba"></a><!-- doxytag: member="wireless.h::wl_set_channel" ref="g9aac809e57c9eb93a2905ed544c93aba" args="(int channel)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_set_channel           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>channel</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the channel we are using. 
+<p>
+Set the channel the XBee is listening to.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>channel</em>&nbsp;</td><td>the new channel to join</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__wireless.html#g2d65d3e35b193da4213755c4bf61ab6b">wl_get_channel</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g211ccf907dce4493813573e20264e542"></a><!-- doxytag: member="wireless.h::wl_set_pan" ref="g211ccf907dce4493813573e20264e542" args="(int pan)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_set_pan           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>pan</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the PAN we are using. 
+<p>
+Set the PAN for the XBee to join.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pan</em>&nbsp;</td><td>the new PAN</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__wireless.html#g4e6b5c97d40a8e7557a1b4b90a7d34f7">wl_get_pan</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g66075ff87a1c9f2c0d7938a26c7830f2"></a><!-- doxytag: member="wireless.h::wl_terminate" ref="g66075ff87a1c9f2c0d7938a26c7830f2" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_terminate           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Uninitialize the wireless library. 
+<p>
+Uninitializes the wireless library.     </td>
+  </tr>
+</table>
+<a class="anchor" name="gcdbedf6465798abc7af3bf5fea3d4dd7"></a><!-- doxytag: member="wireless.h::wl_unregister_packet_group" ref="gcdbedf6465798abc7af3bf5fea3d4dd7" args="(PacketGroupHandler *h)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void wl_unregister_packet_group           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="structPacketGroupHandler.html">PacketGroupHandler</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>h</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Unregister a packet group with the wireless library. 
+<p>
+Unregister a packet group from the wireless library.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>h</em>&nbsp;</td><td>the packet group to remove </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Sep 24 14:12:31 2007 for libwireless by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libwireless/tabs.css
===================================================================
--- branches/charge_board/docs/libwireless/tabs.css	(nonexistent)
+++ branches/charge_board/docs/libwireless/tabs.css	(revision 62)
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+   float            : left;
+   width            : 100%;
+   background       : url("tab_b.gif") repeat-x bottom;
+   margin-bottom    : 4px;
+}
+
+DIV.tabs UL
+{
+   margin           : 0px;
+   padding-left     : 10px;
+   list-style       : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+   display          : inline;
+   margin           : 0px;
+   padding          : 0px;
+}
+
+DIV.tabs FORM
+{
+   float            : right;
+}
+
+DIV.tabs A
+{
+   float            : left;
+   background       : url("tab_r.gif") no-repeat right top;
+   border-bottom    : 1px solid #84B0C7;
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+DIV.tabs A:hover
+{
+   background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+       color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+   float            : left;
+   display          : block;
+   background       : url("tab_l.gif") no-repeat left top;
+   padding          : 5px 9px;
+   white-space      : nowrap;
+}
+
+DIV.tabs INPUT
+{
+   float            : right;
+   display          : inline;
+   font-size        : 1em;
+}
+
+DIV.tabs TD
+{
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+   background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+   background-position: 100% -150px;
+   border-width     : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+   background-position: 0% -150px;
+   padding-bottom   : 6px;
+}
+
+DIV.nav
+{
+   background       : none;
+   border           : none;
+   border-bottom    : 1px solid #84B0C7;
+}
Index: branches/charge_board/docs/libwireless/tab_l.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libwireless/tab_l.gif
===================================================================
--- branches/charge_board/docs/libwireless/tab_l.gif	(nonexistent)
+++ branches/charge_board/docs/libwireless/tab_l.gif	(revision 62)

Property changes on: branches/charge_board/docs/libwireless/tab_l.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libwireless/tab_r.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libwireless/tab_r.gif
===================================================================
--- branches/charge_board/docs/libwireless/tab_r.gif	(nonexistent)
+++ branches/charge_board/docs/libwireless/tab_r.gif	(revision 62)

Property changes on: branches/charge_board/docs/libwireless/tab_r.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libwireless/doxygen.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libwireless/doxygen.png
===================================================================
--- branches/charge_board/docs/libwireless/doxygen.png	(nonexistent)
+++ branches/charge_board/docs/libwireless/doxygen.png	(revision 62)

Property changes on: branches/charge_board/docs/libwireless/doxygen.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libwireless/doxygen.css
===================================================================
--- branches/charge_board/docs/libwireless/doxygen.css	(nonexistent)
+++ branches/charge_board/docs/libwireless/doxygen.css	(revision 62)
@@ -0,0 +1,310 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+       font-size: 90%;
+}
+H1 {
+	text-align: center;
+       font-size: 160%;
+}
+H2 {
+       font-size: 120%;
+}
+H3 {
+       font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.nav {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navtab {
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+}
+A.qindex:hover {
+	text-decoration: none;
+	background-color: #ddddff;
+}
+A.qindexHL {
+	text-decoration: none;
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+	text-decoration: none;
+	background-color: #6666cc;
+	color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: Fixed, monospace;
+       font-size: 95%;
+}
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+       background-color: #F4F4FB;
+       color: #606060;
+	font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #e8eef2;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+	background-color: #e8eef2;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplParams {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+       color: #606060;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #e8eef2;
+}
+TD.tiny      { font-size: 75%;
+}
+a {
+	color: #1A41A8;
+}
+a:visited {
+	color: #2A3798;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+            font-weight: bold;
+}
+HR { height: 1px;
+     border: none;
+     border-top: 1px solid black;
+}
+
Index: branches/charge_board/docs/libwireless/tab_b.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libwireless/tab_b.gif
===================================================================
--- branches/charge_board/docs/libwireless/tab_b.gif	(nonexistent)
+++ branches/charge_board/docs/libwireless/tab_b.gif	(revision 62)

Property changes on: branches/charge_board/docs/libwireless/tab_b.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libdragonfly/tabs.css
===================================================================
--- branches/charge_board/docs/libdragonfly/tabs.css	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/tabs.css	(revision 62)
@@ -0,0 +1,102 @@
+/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */
+
+DIV.tabs
+{
+   float            : left;
+   width            : 100%;
+   background       : url("tab_b.gif") repeat-x bottom;
+   margin-bottom    : 4px;
+}
+
+DIV.tabs UL
+{
+   margin           : 0px;
+   padding-left     : 10px;
+   list-style       : none;
+}
+
+DIV.tabs LI, DIV.tabs FORM
+{
+   display          : inline;
+   margin           : 0px;
+   padding          : 0px;
+}
+
+DIV.tabs FORM
+{
+   float            : right;
+}
+
+DIV.tabs A
+{
+   float            : left;
+   background       : url("tab_r.gif") no-repeat right top;
+   border-bottom    : 1px solid #84B0C7;
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+DIV.tabs A:hover
+{
+   background-position: 100% -150px;
+}
+
+DIV.tabs A:link, DIV.tabs A:visited,
+DIV.tabs A:active, DIV.tabs A:hover
+{
+       color: #1A419D;
+}
+
+DIV.tabs SPAN
+{
+   float            : left;
+   display          : block;
+   background       : url("tab_l.gif") no-repeat left top;
+   padding          : 5px 9px;
+   white-space      : nowrap;
+}
+
+DIV.tabs INPUT
+{
+   float            : right;
+   display          : inline;
+   font-size        : 1em;
+}
+
+DIV.tabs TD
+{
+   font-size        : x-small;
+   font-weight      : bold;
+   text-decoration  : none;
+}
+
+
+
+/* Commented Backslash Hack hides rule from IE5-Mac \*/
+DIV.tabs SPAN {float : none;}
+/* End IE5-Mac hack */
+
+DIV.tabs A:hover SPAN
+{
+   background-position: 0% -150px;
+}
+
+DIV.tabs LI#current A
+{
+   background-position: 100% -150px;
+   border-width     : 0px;
+}
+
+DIV.tabs LI#current SPAN
+{
+   background-position: 0% -150px;
+   padding-bottom   : 6px;
+}
+
+DIV.nav
+{
+   background       : none;
+   border           : none;
+   border-bottom    : 1px solid #84B0C7;
+}
Index: branches/charge_board/docs/libdragonfly/group__move.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__move.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__move.html	(revision 62)
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Movement</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Movement</h1>Functions fo controlling robot motion Higher level functions to control the movement of robots.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga02f16883c5ce325e2dbb8c3835aa9a1"></a><!-- doxytag: member="move::FWD" ref="ga02f16883c5ce325e2dbb8c3835aa9a1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#ga02f16883c5ce325e2dbb8c3835aa9a1">FWD</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move forwards. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb8d9d2e1ff6a03ce3b45a32e0002a405"></a><!-- doxytag: member="move::BCK" ref="gb8d9d2e1ff6a03ce3b45a32e0002a405" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gb8d9d2e1ff6a03ce3b45a32e0002a405">BCK</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move backwards. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gff79b776dbd665d08a0cfcb4c2931c98"></a><!-- doxytag: member="move::SLOW_SPD" ref="gff79b776dbd665d08a0cfcb4c2931c98" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gff79b776dbd665d08a0cfcb4c2931c98">SLOW_SPD</a>&nbsp;&nbsp;&nbsp;96</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A slow speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga0dd7c6a61a43fb8a3698988c414a9bf"></a><!-- doxytag: member="move::HALF_SPD" ref="ga0dd7c6a61a43fb8a3698988c414a9bf" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#ga0dd7c6a61a43fb8a3698988c414a9bf">HALF_SPD</a>&nbsp;&nbsp;&nbsp;128</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Half of the full speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gab20a9de15efe0d1b5599a3dd2ae9fea"></a><!-- doxytag: member="move::NRML_SPD" ref="gab20a9de15efe0d1b5599a3dd2ae9fea" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gab20a9de15efe0d1b5599a3dd2ae9fea">NRML_SPD</a>&nbsp;&nbsp;&nbsp;160</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A normal speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga1f2e117ff854d46ca84f16a1eb8419a"></a><!-- doxytag: member="move::FAST_SPD" ref="ga1f2e117ff854d46ca84f16a1eb8419a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#ga1f2e117ff854d46ca84f16a1eb8419a">FAST_SPD</a>&nbsp;&nbsp;&nbsp;192</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A fast speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g35819c1d24f97763dab51cd367514443"></a><!-- doxytag: member="move::FULL_SPD" ref="g35819c1d24f97763dab51cd367514443" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g35819c1d24f97763dab51cd367514443">FULL_SPD</a>&nbsp;&nbsp;&nbsp;255</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The maximum speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4e9e38cfcdb9bfd0f80c69a574301731"></a><!-- doxytag: member="move::SLOW_TURN" ref="g4e9e38cfcdb9bfd0f80c69a574301731" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g4e9e38cfcdb9bfd0f80c69a574301731">SLOW_TURN</a>&nbsp;&nbsp;&nbsp;64</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A slow turning speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdfc67eeed7b52f97b8483af04e27a9ce"></a><!-- doxytag: member="move::NRML_TURN" ref="gdfc67eeed7b52f97b8483af04e27a9ce" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gdfc67eeed7b52f97b8483af04e27a9ce">NRML_TURN</a>&nbsp;&nbsp;&nbsp;96</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A medium turning speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb900792066abf52697bd19cc5240ae24"></a><!-- doxytag: member="move::FAST_TURN" ref="gb900792066abf52697bd19cc5240ae24" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gb900792066abf52697bd19cc5240ae24">FAST_TURN</a>&nbsp;&nbsp;&nbsp;128</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high turning speed. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g4e27eab618b1d874ff25fd2b2a65493b">move</a> (int velocity, int omega)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move the robot at the specified velocity.  <a href="#g4e27eab618b1d874ff25fd2b2a65493b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g8e79749d6af4a0aa12aceee41ad62ebd">move_avoid</a> (int velocity, int omega, int strength)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move the robot while avoiding obstacles.  <a href="#g8e79749d6af4a0aa12aceee41ad62ebd"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions fo controlling robot motion Higher level functions to control the movement of robots. 
+<p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g4e27eab618b1d874ff25fd2b2a65493b"></a><!-- doxytag: member="move.c::move" ref="g4e27eab618b1d874ff25fd2b2a65493b" args="(int velocity, int omega)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void move           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>velocity</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>omega</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Move the robot at the specified velocity. 
+<p>
+Causes the robot to move with the given translation and rotational velocities. motors_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>velocity</em>&nbsp;</td><td>the translational velocity of the robot, in the range -255 to 255. A positive value indicates forward motion, while a negative value indicates backwards motion.</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>omega</em>&nbsp;</td><td>the rotational velocity of the robot, in the range -255 to 255. A positive value indicates a counterclockwise velocity, while a negative value indicates a clockwise velocity.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a>, <a class="el" href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee">motor1_set</a>, <a class="el" href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0">motor2_set</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g8e79749d6af4a0aa12aceee41ad62ebd"></a><!-- doxytag: member="move.c::move_avoid" ref="g8e79749d6af4a0aa12aceee41ad62ebd" args="(int velocity, int omega, int strength)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void move_avoid           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>velocity</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>omega</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>strength</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Move the robot while avoiding obstacles. 
+<p>
+Moves the robot with the given translational and angular velocities while avoiding obstacles. To be effective, this function must be called repeatedly throughout the motion. It relies on the IR rangefinders to detect obstacles. Before calling this function, motors_init and range_init must be called.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>velocity</em>&nbsp;</td><td>the translational velocity of the robot, in the range -255 to 255. A positive value indicates forward motion.</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>omega</em>&nbsp;</td><td>the rotational velocity of the robot, in the range -255 to 255. A positive value indicates a counterclockwise velocity.</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>strength</em>&nbsp;</td><td>the strength of the avoid behavior, in the range 0 to 100.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a>, <a class="el" href="group__rangefinder.html#g52d0666b725e6d3a14b5bddc28190e59">range_init</a>, <a class="el" href="group__move.html#g4e27eab618b1d874ff25fd2b2a65493b">move</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x6c.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x6c.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x6c.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li id="current"><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LCD
+: <a class="el" href="group__dragonfly.html#gbf2d80992dcfabfd1668184c3dff2733">dragonfly_lib.h</a><li>LIME
+: <a class="el" href="group__orbs.html#g46019a1f2c10603a54b6cbb19cbf3c21">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x6e.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x6e.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x6e.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li id="current"><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>NRML_SPD
+: <a class="el" href="group__move.html#gab20a9de15efe0d1b5599a3dd2ae9fea">move.h</a><li>NRML_TURN
+: <a class="el" href="group__move.html#gdfc67eeed7b52f97b8483af04e27a9ce">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__dio.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__dio.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__dio.html	(revision 62)
@@ -0,0 +1,604 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Digital Input / Output</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Digital Input / Output</h1>Controls digital input and output.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd3a64360b1623d5314cbb8999cb86f99"></a><!-- doxytag: member="dio::PIN_A0" ref="gd3a64360b1623d5314cbb8999cb86f99" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gd3a64360b1623d5314cbb8999cb86f99">PIN_A0</a>&nbsp;&nbsp;&nbsp;8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gceb8d227e063cc486808d5d41735a050"></a><!-- doxytag: member="dio::PIN_A1" ref="gceb8d227e063cc486808d5d41735a050" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gceb8d227e063cc486808d5d41735a050">PIN_A1</a>&nbsp;&nbsp;&nbsp;9</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga181f8521480dfcc1eb2688075701a4c"></a><!-- doxytag: member="dio::PIN_A2" ref="ga181f8521480dfcc1eb2688075701a4c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#ga181f8521480dfcc1eb2688075701a4c">PIN_A2</a>&nbsp;&nbsp;&nbsp;10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g933cca5ab119d5e74639e7ac5d120d8a"></a><!-- doxytag: member="dio::PIN_A3" ref="g933cca5ab119d5e74639e7ac5d120d8a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g933cca5ab119d5e74639e7ac5d120d8a">PIN_A3</a>&nbsp;&nbsp;&nbsp;11</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gea5f553ed9a6c4dac77e9c77d0cd0391"></a><!-- doxytag: member="dio::PIN_A4" ref="gea5f553ed9a6c4dac77e9c77d0cd0391" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gea5f553ed9a6c4dac77e9c77d0cd0391">PIN_A4</a>&nbsp;&nbsp;&nbsp;12</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb78a92a8cba92ec5664599083bcb2f52"></a><!-- doxytag: member="dio::PIN_A5" ref="gb78a92a8cba92ec5664599083bcb2f52" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb78a92a8cba92ec5664599083bcb2f52">PIN_A5</a>&nbsp;&nbsp;&nbsp;13</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfc06e9c4314680dcb8900c88079a954f"></a><!-- doxytag: member="dio::PIN_A6" ref="gfc06e9c4314680dcb8900c88079a954f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gfc06e9c4314680dcb8900c88079a954f">PIN_A6</a>&nbsp;&nbsp;&nbsp;14</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g027cabbaecdcdfdc68fbd92f8e1922ac"></a><!-- doxytag: member="dio::PIN_A7" ref="g027cabbaecdcdfdc68fbd92f8e1922ac" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g027cabbaecdcdfdc68fbd92f8e1922ac">PIN_A7</a>&nbsp;&nbsp;&nbsp;15</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4b553591a495409d4f7cec4b6c3e754"></a><!-- doxytag: member="dio::PIN_SS" ref="gb4b553591a495409d4f7cec4b6c3e754" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb4b553591a495409d4f7cec4b6c3e754">PIN_SS</a>&nbsp;&nbsp;&nbsp;16</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SS. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6a1a3e97267377d1b18bb9073192fdf1"></a><!-- doxytag: member="dio::PIN_SCK" ref="g6a1a3e97267377d1b18bb9073192fdf1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6a1a3e97267377d1b18bb9073192fdf1">PIN_SCK</a>&nbsp;&nbsp;&nbsp;17</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SCK. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbaeddda4b992af7165ed898ab8b2b4ac"></a><!-- doxytag: member="dio::PIN_MOSI" ref="gbaeddda4b992af7165ed898ab8b2b4ac" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gbaeddda4b992af7165ed898ab8b2b4ac">PIN_MOSI</a>&nbsp;&nbsp;&nbsp;18</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin MOSI. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g46bdd417480dec5cb9cf196af3c7489c"></a><!-- doxytag: member="dio::PIN_MISO" ref="g46bdd417480dec5cb9cf196af3c7489c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g46bdd417480dec5cb9cf196af3c7489c">PIN_MISO</a>&nbsp;&nbsp;&nbsp;19</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin MISO. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9ad67c3da2c24b47f9926a7dfddea60a"></a><!-- doxytag: member="dio::PIN_LCD_COMMAND" ref="g9ad67c3da2c24b47f9926a7dfddea60a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g9ad67c3da2c24b47f9926a7dfddea60a">PIN_LCD_COMMAND</a>&nbsp;&nbsp;&nbsp;20</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LCD Command Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5d6c3aa4f6f299e8a82d4d1295ae322b"></a><!-- doxytag: member="dio::PIN_C0" ref="g5d6c3aa4f6f299e8a82d4d1295ae322b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5d6c3aa4f6f299e8a82d4d1295ae322b">PIN_C0</a>&nbsp;&nbsp;&nbsp;24</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3f39d54f92d708a3c807377eed1a2043"></a><!-- doxytag: member="dio::PIN_C1" ref="g3f39d54f92d708a3c807377eed1a2043" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g3f39d54f92d708a3c807377eed1a2043">PIN_C1</a>&nbsp;&nbsp;&nbsp;25</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g30f4452c1e3af3c0e210cd0208615399"></a><!-- doxytag: member="dio::PIN_C2" ref="g30f4452c1e3af3c0e210cd0208615399" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g30f4452c1e3af3c0e210cd0208615399">PIN_C2</a>&nbsp;&nbsp;&nbsp;26</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gce4355a55f5fca3452924c22e5133012"></a><!-- doxytag: member="dio::PIN_C3" ref="gce4355a55f5fca3452924c22e5133012" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gce4355a55f5fca3452924c22e5133012">PIN_C3</a>&nbsp;&nbsp;&nbsp;27</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gad1780e5368e328729b4bff24e98d30c"></a><!-- doxytag: member="dio::PIN_C4" ref="gad1780e5368e328729b4bff24e98d30c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gad1780e5368e328729b4bff24e98d30c">PIN_C4</a>&nbsp;&nbsp;&nbsp;28</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc3a295212fbf34fdd35d2a984bf75b80"></a><!-- doxytag: member="dio::PIN_C5" ref="gc3a295212fbf34fdd35d2a984bf75b80" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gc3a295212fbf34fdd35d2a984bf75b80">PIN_C5</a>&nbsp;&nbsp;&nbsp;29</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1c5e268dfd2543c2d4099c51876fcc9b"></a><!-- doxytag: member="dio::PIN_C6" ref="g1c5e268dfd2543c2d4099c51876fcc9b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g1c5e268dfd2543c2d4099c51876fcc9b">PIN_C6</a>&nbsp;&nbsp;&nbsp;30</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0762e408c09c5c4a9d0f02e34b2b96d3"></a><!-- doxytag: member="dio::PIN_C7" ref="g0762e408c09c5c4a9d0f02e34b2b96d3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g0762e408c09c5c4a9d0f02e34b2b96d3">PIN_C7</a>&nbsp;&nbsp;&nbsp;31</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4874028097ae0777b42cef20ffc913d"></a><!-- doxytag: member="dio::PIN_SCL" ref="gb4874028097ae0777b42cef20ffc913d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb4874028097ae0777b42cef20ffc913d">PIN_SCL</a>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SCL. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5dfb6a7d75a520f42d21ec9a9f640342"></a><!-- doxytag: member="dio::PIN_SDA" ref="g5dfb6a7d75a520f42d21ec9a9f640342" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5dfb6a7d75a520f42d21ec9a9f640342">PIN_SDA</a>&nbsp;&nbsp;&nbsp;33</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SDA. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6844ffe71c9cb20c6b4fe67289b58f40"></a><!-- doxytag: member="dio::PIN_RX0" ref="g6844ffe71c9cb20c6b4fe67289b58f40" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6844ffe71c9cb20c6b4fe67289b58f40">PIN_RX0</a>&nbsp;&nbsp;&nbsp;40</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin RX0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6c8efa60d2db765b46d88aa2a6df0318"></a><!-- doxytag: member="dio::PIN_TX0" ref="g6c8efa60d2db765b46d88aa2a6df0318" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6c8efa60d2db765b46d88aa2a6df0318">PIN_TX0</a>&nbsp;&nbsp;&nbsp;41</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin TX0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfbde03bd88d54597e008f40b8fea2f41"></a><!-- doxytag: member="dio::PIN_LCD_RESET" ref="gfbde03bd88d54597e008f40b8fea2f41" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gfbde03bd88d54597e008f40b8fea2f41">PIN_LCD_RESET</a>&nbsp;&nbsp;&nbsp;42</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LCD Reset Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7e1867ce517711f7d73d13969dc007af"></a><!-- doxytag: member="dio::PIN_E6" ref="g7e1867ce517711f7d73d13969dc007af" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g7e1867ce517711f7d73d13969dc007af">PIN_E6</a>&nbsp;&nbsp;&nbsp;46</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g22e4023e324755fd5666592588fc3c7b"></a><!-- doxytag: member="dio::PIN_EXT_DIO1" ref="g22e4023e324755fd5666592588fc3c7b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g22e4023e324755fd5666592588fc3c7b">PIN_EXT_DIO1</a>&nbsp;&nbsp;&nbsp;46</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin EXT_DIO1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf152e5be854f0ea205b0ea10bcc2217c"></a><!-- doxytag: member="dio::PIN_E7" ref="gf152e5be854f0ea205b0ea10bcc2217c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gf152e5be854f0ea205b0ea10bcc2217c">PIN_E7</a>&nbsp;&nbsp;&nbsp;47</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf8dcfd33ece84d61943c4024504cb5e1"></a><!-- doxytag: member="dio::PIN_EXT_DIO2" ref="gf8dcfd33ece84d61943c4024504cb5e1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gf8dcfd33ece84d61943c4024504cb5e1">PIN_EXT_DIO2</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin EXT_DIO2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb6451bdf35a387a5db4323fa5d36be41"></a><!-- doxytag: member="dio::PIN_AN0" ref="gb6451bdf35a387a5db4323fa5d36be41" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb6451bdf35a387a5db4323fa5d36be41">PIN_AN0</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g44007fefe4c74b325caa7f43e3a6e716"></a><!-- doxytag: member="dio::PIN_ADC0" ref="g44007fefe4c74b325caa7f43e3a6e716" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g44007fefe4c74b325caa7f43e3a6e716">PIN_ADC0</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge5bf915d1d529da9379de10836283554"></a><!-- doxytag: member="dio::PIN_AN1" ref="ge5bf915d1d529da9379de10836283554" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#ge5bf915d1d529da9379de10836283554">PIN_AN1</a>&nbsp;&nbsp;&nbsp;49</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5b86225ba7ed79b2224a3c561c5f3aa6"></a><!-- doxytag: member="dio::PIN_ADC1" ref="g5b86225ba7ed79b2224a3c561c5f3aa6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5b86225ba7ed79b2224a3c561c5f3aa6">PIN_ADC1</a>&nbsp;&nbsp;&nbsp;49</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3349fe5af4b9deab28132c4e5e75529b"></a><!-- doxytag: member="dio::PIN_AN2" ref="g3349fe5af4b9deab28132c4e5e75529b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g3349fe5af4b9deab28132c4e5e75529b">PIN_AN2</a>&nbsp;&nbsp;&nbsp;50</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd4248fc02c8ddeaae385536349eb0cb7"></a><!-- doxytag: member="dio::PIN_ADC2" ref="gd4248fc02c8ddeaae385536349eb0cb7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gd4248fc02c8ddeaae385536349eb0cb7">PIN_ADC2</a>&nbsp;&nbsp;&nbsp;50</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g14a8708f056d5e595556c262adbbc09f"></a><!-- doxytag: member="dio::PIN_AN3" ref="g14a8708f056d5e595556c262adbbc09f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g14a8708f056d5e595556c262adbbc09f">PIN_AN3</a>&nbsp;&nbsp;&nbsp;51</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbce7e56320e6301cf256a0ce26c56c0b"></a><!-- doxytag: member="dio::PIN_ADC3" ref="gbce7e56320e6301cf256a0ce26c56c0b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gbce7e56320e6301cf256a0ce26c56c0b">PIN_ADC3</a>&nbsp;&nbsp;&nbsp;51</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a33e134b96d4b5186aabc96edc52ee3"></a><!-- doxytag: member="dio::PIN_AN4" ref="g2a33e134b96d4b5186aabc96edc52ee3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g2a33e134b96d4b5186aabc96edc52ee3">PIN_AN4</a>&nbsp;&nbsp;&nbsp;52</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfc66b57b212407fc255f69fd6ead6404"></a><!-- doxytag: member="dio::PIN_ADC4" ref="gfc66b57b212407fc255f69fd6ead6404" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gfc66b57b212407fc255f69fd6ead6404">PIN_ADC4</a>&nbsp;&nbsp;&nbsp;52</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g92a11eaeaf053774343b9a677bb4d5e1"></a><!-- doxytag: member="dio::PIN_AN5" ref="g92a11eaeaf053774343b9a677bb4d5e1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g92a11eaeaf053774343b9a677bb4d5e1">PIN_AN5</a>&nbsp;&nbsp;&nbsp;53</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g701f2be23f28d8187d44159ada343be9"></a><!-- doxytag: member="dio::PIN_ADC5" ref="g701f2be23f28d8187d44159ada343be9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g701f2be23f28d8187d44159ada343be9">PIN_ADC5</a>&nbsp;&nbsp;&nbsp;53</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9a09b3ad4931ca28bf25d72c759f578d"></a><!-- doxytag: member="dio::PIN_AN6" ref="g9a09b3ad4931ca28bf25d72c759f578d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g9a09b3ad4931ca28bf25d72c759f578d">PIN_AN6</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g45f972962752d572ed471d052a35982f"></a><!-- doxytag: member="dio::PIN_ADC6" ref="g45f972962752d572ed471d052a35982f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g45f972962752d572ed471d052a35982f">PIN_ADC6</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7a5a85c782c9687ded37a870bce57102"></a><!-- doxytag: member="dio::PIN_AN7" ref="g7a5a85c782c9687ded37a870bce57102" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g7a5a85c782c9687ded37a870bce57102">PIN_AN7</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g254abf6fa8c8f85b3d1b927ee35a22b4"></a><!-- doxytag: member="dio::PIN_ADC7" ref="g254abf6fa8c8f85b3d1b927ee35a22b4" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g254abf6fa8c8f85b3d1b927ee35a22b4">PIN_ADC7</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5bec113a8dc799a771a2b1d3ab256128"></a><!-- doxytag: member="dio::PIN_WHEEL" ref="g5bec113a8dc799a771a2b1d3ab256128" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5bec113a8dc799a771a2b1d3ab256128">PIN_WHEEL</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wheel Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g05fa96c4c8bfa63445224dfd27741aee"></a><!-- doxytag: member="dio::PIN_BATT" ref="g05fa96c4c8bfa63445224dfd27741aee" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g05fa96c4c8bfa63445224dfd27741aee">PIN_BATT</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Battery Voltage Monitor Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb2909d57039bab16e3d67f3432e5364d"></a><!-- doxytag: member="dio::PIN_BTN1" ref="gb2909d57039bab16e3d67f3432e5364d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb2909d57039bab16e3d67f3432e5364d">PIN_BTN1</a>&nbsp;&nbsp;&nbsp;56</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button1 Pin <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g055e63d10caa23d102dd471ec4b1145d"></a><!-- doxytag: member="dio::PIN_BTN2" ref="g055e63d10caa23d102dd471ec4b1145d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g055e63d10caa23d102dd471ec4b1145d">PIN_BTN2</a>&nbsp;&nbsp;&nbsp;57</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button2 Pin <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ee291f6ef730418abd5997176fe6b4c"></a><!-- doxytag: member="dio::PIN_LED1" ref="g1ee291f6ef730418abd5997176fe6b4c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g1ee291f6ef730418abd5997176fe6b4c">PIN_LED1</a>&nbsp;&nbsp;&nbsp;58</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LED1 Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g92fdab197e388c3c44586db0b10a5eb9"></a><!-- doxytag: member="dio::PIN_BTN" ref="g92fdab197e388c3c44586db0b10a5eb9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g92fdab197e388c3c44586db0b10a5eb9">PIN_BTN</a>&nbsp;&nbsp;&nbsp;PING</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Button Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9dc19cdd6944e087c077044296a1ad8e"></a><!-- doxytag: member="dio::BTN2" ref="g9dc19cdd6944e087c077044296a1ad8e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g9dc19cdd6944e087c077044296a1ad8e">BTN2</a>&nbsp;&nbsp;&nbsp;PING1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button2 Pin <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3a4cc5e218cef7de139625a519e29ff3"></a><!-- doxytag: member="dio::BTN1" ref="g3a4cc5e218cef7de139625a519e29ff3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g3a4cc5e218cef7de139625a519e29ff3">BTN1</a>&nbsp;&nbsp;&nbsp;PING0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button1 Pin <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6202143ed6d0f809095c21bfac32acdd">digital_input</a> (int)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a portpin.  <a href="#g6202143ed6d0f809095c21bfac32acdd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g67967857dcc26aeea8cdd0a53a9e138d">digital_output</a> (int bit, int val)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output to a portpin.  <a href="#g67967857dcc26aeea8cdd0a53a9e138d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6bcadb9200f988ae733a51aa70467978">digital_pull_up</a> (int)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pullup a portpin.  <a href="#g6bcadb9200f988ae733a51aa70467978"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">button1_read</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button1 is pressed.  <a href="#gedac5cd2a11710ab4294de2ae4efe989"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">button1_click</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button1 is clicked.  <a href="#g1f8648caa59384d58fc157d8933f4be5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">button1_wait</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait until button1 is pressed.  <a href="#g63755dc896b16e09d5223cada174d87b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">button2_read</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button2 is pressed.  <a href="#g65e4c13e999fdfa9da3394d0175f17aa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">button2_click</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button2 is clicked.  <a href="#g4147c347b473bd41c0a0f02af4dd39f2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">button2_wait</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait until button2 is pressed.  <a href="#g4971f4473e759bcff2e2758e75bcdbe8"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Controls digital input and output. 
+<p>
+A general note on how port / pin numbers work:<br>
+ The portpin is used to select both the bank and which pin is selected. 6 bits are used (lower 6, ex: 0b00abcdef). The first 3 (abc in this example) are used to select the bank.<br>
+ A = 001<br>
+ B = 010<br>
+ C = 011<br>
+ D = 100<br>
+ E = 101<br>
+ F = 110<br>
+ G = 111<br>
+<br>
+<p>
+The bank can be found by doing portpin &gt;&gt; 3. <br>
+<p>
+The next three (def in this example) are used to select the pin number. These three bits are just the binary representation of the pin number.<br>
+ <br>
+ The pin number can be found by doing portpin &amp; 0b111.<br>
+<br>
+<p>
+Include <a class="el" href="dio_8h.html">dio.h</a> to access these functions. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g1f8648caa59384d58fc157d8933f4be5"></a><!-- doxytag: member="dio.h::button1_click" ref="g1f8648caa59384d58fc157d8933f4be5" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int button1_click           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if button1 is clicked. 
+<p>
+If button1 is pressed, waits until it is released before returning. Otherwise, the function returns immediately.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>1 if button1 has been pressed, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">button1_read</a>, <a class="el" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">button1_wait</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gedac5cd2a11710ab4294de2ae4efe989"></a><!-- doxytag: member="dio.h::button1_read" ref="gedac5cd2a11710ab4294de2ae4efe989" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int button1_read           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if button1 is pressed. 
+<p>
+Checks if button1 is currently pressed.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>1 if button1 is pressed, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">button1_wait</a>, <a class="el" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">button1_click</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g63755dc896b16e09d5223cada174d87b"></a><!-- doxytag: member="dio.h::button1_wait" ref="g63755dc896b16e09d5223cada174d87b" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void button1_wait           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Wait until button1 is pressed. 
+<p>
+Delays execution until button1 is pressed.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">button1_read</a>, <a class="el" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">button1_click</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g4147c347b473bd41c0a0f02af4dd39f2"></a><!-- doxytag: member="dio.h::button2_click" ref="g4147c347b473bd41c0a0f02af4dd39f2" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int button2_click           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if button2 is clicked. 
+<p>
+If button2 is pressed, waits until it is released before returning. Otherwise, the function returns immediately.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>1 if button2 has been pressed, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">button2_read</a>, <a class="el" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">button2_wait</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g65e4c13e999fdfa9da3394d0175f17aa"></a><!-- doxytag: member="dio.h::button2_read" ref="g65e4c13e999fdfa9da3394d0175f17aa" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int button2_read           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if button2 is pressed. 
+<p>
+Checks if button2 is currently pressed.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>1 if button2 is pressed, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">button2_wait</a>, <a class="el" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">button2_click</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g4971f4473e759bcff2e2758e75bcdbe8"></a><!-- doxytag: member="dio.h::button2_wait" ref="g4971f4473e759bcff2e2758e75bcdbe8" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void button2_wait           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Wait until button2 is pressed. 
+<p>
+Delays execution until button2 is pressed.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">button2_read</a>, <a class="el" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">button2_click</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g6202143ed6d0f809095c21bfac32acdd"></a><!-- doxytag: member="dio.h::digital_input" ref="g6202143ed6d0f809095c21bfac32acdd" args="(int)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int digital_input           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>portpin</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read a portpin. 
+<p>
+Reads the selected portpin.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>portpin</em>&nbsp;</td><td>The portpin to be read. See the general description for a description of portpins.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>1 or 0, depending on the value of the portpin. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g67967857dcc26aeea8cdd0a53a9e138d"></a><!-- doxytag: member="dio.h::digital_output" ref="g67967857dcc26aeea8cdd0a53a9e138d" args="(int bit, int val)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void digital_output           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>portpin</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>val</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Output to a portpin. 
+<p>
+Sets portpin to the given value.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>portpin</em>&nbsp;</td><td>the portpin to output to. See the general description for a discussion of portpins.</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>val</em>&nbsp;</td><td>the value to set the portpin to. 0 for off, nonzero for on. </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g6bcadb9200f988ae733a51aa70467978"></a><!-- doxytag: member="dio.h::digital_pull_up" ref="g6bcadb9200f988ae733a51aa70467978" args="(int)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void digital_pull_up           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>portpin</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Pullup a portpin. 
+<p>
+Enables pullup on a pin. If it is an output pin, the pin will output 1.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>portpin</em>&nbsp;</td><td>the pin to enable pullup on. See the general description for a discussion of portpins. </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__bom.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__bom.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__bom.html	(revision 62)
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: BOM (Bearing and Orientation Module)</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>BOM (Bearing and Orientation Module)</h1>Functions for dealing with the BOM.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bom.html#g86753fe7440cd64e60c58ad31c62264a">get_max_bom</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the location of the maximum BOM reading.  <a href="#g86753fe7440cd64e60c58ad31c62264a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bom.html#g93b665ff81fc6b58503c6ba5ba01c1bf">bom_on</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turns the BOM on.  <a href="#g93b665ff81fc6b58503c6ba5ba01c1bf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bom.html#g61a66e53cdee8bce139c707153143b30">bom_off</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turns the BOM off.  <a href="#g61a66e53cdee8bce139c707153143b30"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for dealing with the BOM. 
+<p>
+The Bearing and Orientation Module / Barrel of Monkeys / BOM is a custom sensor designed and built by the Colony Project. It consists of a ring of 16 IR emitters and 16 IR detectors. The BOM is most often use to determine the direction of other robots. This module contains functions for controlling the BOM.<p>
+Include <a class="el" href="bom_8h.html">bom.h</a> to access these functions. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g61a66e53cdee8bce139c707153143b30"></a><!-- doxytag: member="bom.c::bom_off" ref="g61a66e53cdee8bce139c707153143b30" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void bom_off           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Turns the BOM off. 
+<p>
+Stops flashing the BOM. analog_init must be called before this function can be used.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__bom.html#g93b665ff81fc6b58503c6ba5ba01c1bf">bom_on</a>, <a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g93b665ff81fc6b58503c6ba5ba01c1bf"></a><!-- doxytag: member="bom.c::bom_on" ref="g93b665ff81fc6b58503c6ba5ba01c1bf" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void bom_on           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Turns the BOM on. 
+<p>
+Flashes the BOM. analog_init must be called before this function can be used.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__bom.html#g61a66e53cdee8bce139c707153143b30">bom_off</a>, <a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g86753fe7440cd64e60c58ad31c62264a"></a><!-- doxytag: member="bom.c::get_max_bom" ref="g86753fe7440cd64e60c58ad31c62264a" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int get_max_bom           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the location of the maximum BOM reading. 
+<p>
+Returns the direction of the maximum BOM reading, as an integer in the range 0-15. 0 indicates to the robot's right, while the rest of the sensors are numbered counterclockwise. This is useful for determining the direction of a robot flashing its BOM, of only one robot is currently doing so. analog_init must be called before this function can be used.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the direction of the maximum BOM reading</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/doxygen.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libdragonfly/doxygen.png
===================================================================
--- branches/charge_board/docs/libdragonfly/doxygen.png	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/doxygen.png	(revision 62)

Property changes on: branches/charge_board/docs/libdragonfly/doxygen.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libdragonfly/group__motors.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__motors.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__motors.html	(revision 62)
@@ -0,0 +1,206 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Motors</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Motors</h1>Functions for controlling the motors. Functions for controlling the motors. Found in <a class="el" href="motor_8h.html">motor.h</a>.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6ddfdda7a062d10cff4a72b76b44aeb8"></a><!-- doxytag: member="motors::FORWARD" ref="g6ddfdda7a062d10cff4a72b76b44aeb8" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g6ddfdda7a062d10cff4a72b76b44aeb8">FORWARD</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">make the motors go forwards <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdf445abfe1b77fa63f89e315ccc2f7f2"></a><!-- doxytag: member="motors::BACKWARD" ref="gdf445abfe1b77fa63f89e315ccc2f7f2" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#gdf445abfe1b77fa63f89e315ccc2f7f2">BACKWARD</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">make the motors go backwards <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the motors.  <a href="#gbad32bfc46c9f31ba81955775611bd21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee">motor1_set</a> (int direction, int speed)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set speed and direction of motor1.  <a href="#g751a431c19cdb52bbbc8127455bd41ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0">motor2_set</a> (int direction, int speed)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set speed and direction of motor2.  <a href="#g23940fd8408c23fcf312b1d5937f0ab0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g3c7ada13bc7d8ed5e819910da74bf9cd">motors_off</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turn the motors off.  <a href="#g3c7ada13bc7d8ed5e819910da74bf9cd"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for controlling the motors. Functions for controlling the motors. Found in <a class="el" href="motor_8h.html">motor.h</a>. 
+<p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g751a431c19cdb52bbbc8127455bd41ee"></a><!-- doxytag: member="motor.c::motor1_set" ref="g751a431c19cdb52bbbc8127455bd41ee" args="(int direction, int speed)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void motor1_set           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>direction</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>speed</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set speed and direction of motor1. 
+<p>
+Sets the speed and direction of motor1. motors_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>direction</em>&nbsp;</td><td>Either FORWARD or BACKWARD to set the direction of rotation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>speed</em>&nbsp;</td><td>The speed the motor will run at, in the range 0-255.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0">motor2_set</a>, <a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g23940fd8408c23fcf312b1d5937f0ab0"></a><!-- doxytag: member="motor.c::motor2_set" ref="g23940fd8408c23fcf312b1d5937f0ab0" args="(int direction, int speed)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void motor2_set           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>direction</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>speed</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set speed and direction of motor2. 
+<p>
+Sets the speed and direction of motor2. motors_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>direction</em>&nbsp;</td><td>Either FORWARD or BACKWARD to set the direction of rotation. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>speed</em>&nbsp;</td><td>The speed the motor will run at, in the range 0-255.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee">motor1_set</a>, <a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gbad32bfc46c9f31ba81955775611bd21"></a><!-- doxytag: member="motor.c::motors_init" ref="gbad32bfc46c9f31ba81955775611bd21" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void motors_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the motors. 
+<p>
+Initializes both motors so that they can be used with future calls to motor1_set and motor2_set.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__motors.html#g3c7ada13bc7d8ed5e819910da74bf9cd">motors_off</a>, <a class="el" href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee">motor1_set</a>, <a class="el" href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0">motor2_set</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g3c7ada13bc7d8ed5e819910da74bf9cd"></a><!-- doxytag: member="motor.c::motors_off" ref="g3c7ada13bc7d8ed5e819910da74bf9cd" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void motors_off           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Turn the motors off. 
+<p>
+Turns off both motors.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__dragonfly.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__dragonfly.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__dragonfly.html	(revision 62)
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Dragonfly</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Dragonfly</h1>General Dragonfly Functions General functions for the dragonfly. Include <a class="el" href="dragonfly__lib_8h.html">dragonfly_lib.h</a> to access these functions.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd42aa2404559d4a465d5d45e857f2881"></a><!-- doxytag: member="dragonfly::ANALOG" ref="gd42aa2404559d4a465d5d45e857f2881" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#gd42aa2404559d4a465d5d45e857f2881">ANALOG</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize analog. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gae3f0b4211ba45d265973d40ccbb5fd1"></a><!-- doxytag: member="dragonfly::SERIAL" ref="gae3f0b4211ba45d265973d40ccbb5fd1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#gae3f0b4211ba45d265973d40ccbb5fd1">SERIAL</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize serial communications. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g779bf099075a999d1074357fccbd466b"></a><!-- doxytag: member="dragonfly::USB" ref="g779bf099075a999d1074357fccbd466b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g779bf099075a999d1074357fccbd466b">USB</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize USB communications. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g46fff4184b5d787de1ed367b97cb6091"></a><!-- doxytag: member="dragonfly::COMM" ref="g46fff4184b5d787de1ed367b97cb6091" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g46fff4184b5d787de1ed367b97cb6091">COMM</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize communications. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g24a9b050b733edb162cbeb44b1a417b1"></a><!-- doxytag: member="dragonfly::ORB" ref="g24a9b050b733edb162cbeb44b1a417b1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g24a9b050b733edb162cbeb44b1a417b1">ORB</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the orb. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9bb31bba359fbb679910df0a6efde5a3"></a><!-- doxytag: member="dragonfly::MOTORS" ref="g9bb31bba359fbb679910df0a6efde5a3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g9bb31bba359fbb679910df0a6efde5a3">MOTORS</a>&nbsp;&nbsp;&nbsp;0x08</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the motors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7baed4559391f95790fea2b456a22b68"></a><!-- doxytag: member="dragonfly::SERVOS" ref="g7baed4559391f95790fea2b456a22b68" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g7baed4559391f95790fea2b456a22b68">SERVOS</a>&nbsp;&nbsp;&nbsp;0x10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the servos. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g457a9aa93dbb216459873a30bdb4d84a"></a><!-- doxytag: member="dragonfly::I2C" ref="g457a9aa93dbb216459873a30bdb4d84a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g457a9aa93dbb216459873a30bdb4d84a">I2C</a>&nbsp;&nbsp;&nbsp;0x20</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize I2C. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g145103118f6d9d1129aa4509cf214a13"></a><!-- doxytag: member="dragonfly::BUZZER" ref="g145103118f6d9d1129aa4509cf214a13" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g145103118f6d9d1129aa4509cf214a13">BUZZER</a>&nbsp;&nbsp;&nbsp;0x40</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the buzzer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbf2d80992dcfabfd1668184c3dff2733"></a><!-- doxytag: member="dragonfly::LCD" ref="gbf2d80992dcfabfd1668184c3dff2733" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#gbf2d80992dcfabfd1668184c3dff2733">LCD</a>&nbsp;&nbsp;&nbsp;0x80</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the LCD screen. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1252cf7a07df96ed2561ae605eaca197"></a><!-- doxytag: member="dragonfly::ALL_ON" ref="g1252cf7a07df96ed2561ae605eaca197" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g1252cf7a07df96ed2561ae605eaca197">ALL_ON</a>&nbsp;&nbsp;&nbsp;0xFF</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize everything. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g8124e2c32bf25208586d500e45ba5fe3">dragonfly_init</a> (int config)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the board.  <a href="#g8124e2c32bf25208586d500e45ba5fe3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g3aea9deb2a0bfea9ff05a898f4822e31">reset</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reset the robot.  <a href="#g3aea9deb2a0bfea9ff05a898f4822e31"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+General Dragonfly Functions General functions for the dragonfly. Include <a class="el" href="dragonfly__lib_8h.html">dragonfly_lib.h</a> to access these functions. 
+<p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="g8124e2c32bf25208586d500e45ba5fe3"></a><!-- doxytag: member="dragonfly_lib.c::dragonfly_init" ref="g8124e2c32bf25208586d500e45ba5fe3" args="(int config)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void dragonfly_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>config</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the board. 
+<p>
+Initializes the components specified by config.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>, <a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a>, <a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">xbee_init</a>, <a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a>, bom_init, <a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a>, <a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a>, <a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g3aea9deb2a0bfea9ff05a898f4822e31"></a><!-- doxytag: member="dragonfly_lib.c::reset" ref="g3aea9deb2a0bfea9ff05a898f4822e31" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void reset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reset the robot. 
+<p>
+Resets the AVR when called. Sets the watchdog timer and lets it overflow to reset the AVR. The reset clears all memory and resets all registers with the exception of the Watchdog Reset Flag (WDRF) in the MCU Control and Status Register (MCUCSR).     </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x61.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x61.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x61.html	(revision 62)
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li id="current"><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>A4
+: <a class="el" href="group__buzzer.html#ga0a03ad95ca0cb887a11e321fa1c9519">buzzer.h</a><li>A4s
+: <a class="el" href="group__buzzer.html#g7063c01bf1877119a8aca7049e02a8cb">buzzer.h</a><li>ALL_ON
+: <a class="el" href="group__dragonfly.html#g1252cf7a07df96ed2561ae605eaca197">dragonfly_lib.h</a><li>AN0
+: <a class="el" href="group__analog.html#g099995994c74b5fff8f7de4ff3eac550">analog.h</a><li>AN1
+: <a class="el" href="group__analog.html#g4903de2a52966c8dc2c20faf565d451d">analog.h</a><li>AN10
+: <a class="el" href="group__analog.html#gc63caaf5f7a06a02522cb7f90d6c1959">analog.h</a><li>AN11
+: <a class="el" href="group__analog.html#gdfeb79b00aaef4734408a910838f7872">analog.h</a><li>AN12
+: <a class="el" href="group__analog.html#g7a50a07e69f38b6674b0494dfbc653f9">analog.h</a><li>AN13
+: <a class="el" href="group__analog.html#gbf80851ae45ddfe4bfdfc10541c255ad">analog.h</a><li>AN14
+: <a class="el" href="group__analog.html#g817772a1db513b734dfe4475c3616061">analog.h</a><li>AN15
+: <a class="el" href="group__analog.html#g797adbadae057ff7aa766d84b4f180f9">analog.h</a><li>AN2
+: <a class="el" href="group__analog.html#g9b0754e893d69a1e69e856853f70da1f">analog.h</a><li>AN3
+: <a class="el" href="group__analog.html#g9f593faa38f1023698d74f03a457abe3">analog.h</a><li>AN4
+: <a class="el" href="group__analog.html#gdc95f1e9cdc00268d7bca5885052171f">analog.h</a><li>AN5
+: <a class="el" href="group__analog.html#g99ed455a0d536be03f12eba18ccff71b">analog.h</a><li>AN6
+: <a class="el" href="group__analog.html#gd63d6861c3fa5e606de5c18ada3b4d10">analog.h</a><li>AN7
+: <a class="el" href="group__analog.html#g277d706ee82bd70459b63e85489c7074">analog.h</a><li>AN8
+: <a class="el" href="group__analog.html#g28b64348820dbb25c903d24f2e38a8a7">analog.h</a><li>AN9
+: <a class="el" href="group__analog.html#g2fb7e4f4e0ea1f172eef79ed1f92e15f">analog.h</a><li>ANALOG
+: <a class="el" href="group__dragonfly.html#gd42aa2404559d4a465d5d45e857f2881">dragonfly_lib.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x71.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x71.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x71.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li id="current"><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>QUARTER_SECOND
+: <a class="el" href="group__time.html#g0b2a348d9afca1f1182bc2bb2aa6a3d1">time.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x63.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x63.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x63.html	(revision 62)
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li id="current"><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>C4
+: <a class="el" href="group__buzzer.html#gcc39015f57b2efb8810b603f188bdf15">buzzer.h</a><li>C4s
+: <a class="el" href="group__buzzer.html#g879790f58417f0986370ddbcda404ed0">buzzer.h</a><li>C5
+: <a class="el" href="group__buzzer.html#g3b69b61d9deb37b13911faf2cf5cf1d5">buzzer.h</a><li>COMM
+: <a class="el" href="group__dragonfly.html#g46fff4184b5d787de1ed367b97cb6091">dragonfly_lib.h</a><li>CYAN
+: <a class="el" href="group__orbs.html#gd243f93c16bc4c1d3e0a13b84421d760">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x73.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x73.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x73.html	(revision 62)
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li id="current"><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SECOND
+: <a class="el" href="group__time.html#g94212be2394d2d37d9dfd33d07d82dba">time.h</a><li>SERIAL
+: <a class="el" href="group__dragonfly.html#gae3f0b4211ba45d265973d40ccbb5fd1">dragonfly_lib.h</a><li>SERVOS
+: <a class="el" href="group__dragonfly.html#g7baed4559391f95790fea2b456a22b68">dragonfly_lib.h</a><li>SIXTEENTH_SECOND
+: <a class="el" href="group__time.html#gd271145628da4e0e85e3e2486d117713">time.h</a><li>SLOW_SPD
+: <a class="el" href="group__move.html#gff79b776dbd665d08a0cfcb4c2931c98">move.h</a><li>SLOW_TURN
+: <a class="el" href="group__move.html#g4e9e38cfcdb9bfd0f80c69a574301731">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x65.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x65.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x65.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li id="current"><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>E4
+: <a class="el" href="group__buzzer.html#g4c819074c856b4e67fad4875a92cb2e9">buzzer.h</a><li>EIGTH_SECOND
+: <a class="el" href="group__time.html#g7bdae984203001070e9abeb3190f844a">time.h</a><li>EXT_MUX
+: <a class="el" href="group__analog.html#g3434ce39eaea22b46a0100b7fd3a6f47">analog.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x75.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x75.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x75.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li id="current"><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>USB
+: <a class="el" href="group__dragonfly.html#g779bf099075a999d1074357fccbd466b">dragonfly_lib.h</a><li>USB_BAUD
+: <a class="el" href="group__usb.html#g378065b4d75b008228ee41cc335474a7">serial.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/dragonfly__lib_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/dragonfly__lib_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/dragonfly__lib_8h-source.html	(revision 62)
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: dragonfly_lib.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>dragonfly_lib.h</h1><a href="dragonfly__lib_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00010"></a>00010 <span class="preprocessor">#ifndef _DRAGONFLY_LIB_H_</span>
+<a name="l00011"></a>00011 <span class="preprocessor"></span><span class="preprocessor">#define _DRAGONFLY_LIB_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span>
+<a name="l00018"></a>00018 <span class="comment">// Configuration definitions</span>
+<a name="l00020"></a><a class="code" href="group__dragonfly.html#gd42aa2404559d4a465d5d45e857f2881">00020</a> <span class="comment"></span><span class="preprocessor">#define ANALOG 0x01</span>
+<a name="l00021"></a>00021 <span class="preprocessor"></span>
+<a name="l00022"></a><a class="code" href="group__dragonfly.html#gae3f0b4211ba45d265973d40ccbb5fd1">00022</a> <span class="preprocessor">#define SERIAL 0x02</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__dragonfly.html#g779bf099075a999d1074357fccbd466b">00024</a> <span class="preprocessor">#define USB    0x02</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__dragonfly.html#g46fff4184b5d787de1ed367b97cb6091">00026</a> <span class="preprocessor">#define COMM   0x02</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__dragonfly.html#g24a9b050b733edb162cbeb44b1a417b1">00028</a> <span class="preprocessor">#define ORB    0x04</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="group__dragonfly.html#g9bb31bba359fbb679910df0a6efde5a3">00030</a> <span class="preprocessor">#define MOTORS 0x08</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="group__dragonfly.html#g7baed4559391f95790fea2b456a22b68">00032</a> <span class="preprocessor">#define SERVOS 0x10</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a><a class="code" href="group__dragonfly.html#g457a9aa93dbb216459873a30bdb4d84a">00034</a> <span class="preprocessor">#define I2C    0x20</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a><a class="code" href="group__dragonfly.html#g145103118f6d9d1129aa4509cf214a13">00036</a> <span class="preprocessor">#define BUZZER 0x40</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="group__dragonfly.html#gbf2d80992dcfabfd1668184c3dff2733">00038</a> <span class="preprocessor">#define LCD    0x80</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="group__dragonfly.html#g1252cf7a07df96ed2561ae605eaca197">00040</a> <span class="preprocessor">#define ALL_ON 0xFF</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="group__dragonfly.html#g8124e2c32bf25208586d500e45ba5fe3">dragonfly_init</a>(<span class="keywordtype">int</span> config);
+<a name="l00046"></a>00046 <span class="keywordtype">void</span> <a class="code" href="group__dragonfly.html#g3aea9deb2a0bfea9ff05a898f4822e31">reset</a>(<span class="keywordtype">void</span>);
+<a name="l00047"></a>00047  <span class="comment">//end addtogroup</span>
+<a name="l00049"></a>00049 
+<a name="l00050"></a>00050 <span class="preprocessor">#include &lt;inttypes.h&gt;</span>
+<a name="l00051"></a>00051 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
+<a name="l00052"></a>00052 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
+<a name="l00053"></a>00053 <span class="preprocessor">#include &lt;avr/io.h&gt;</span>
+<a name="l00054"></a>00054 <span class="preprocessor">#include &lt;avr/interrupt.h&gt;</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#include &lt;util/delay.h&gt;</span>
+<a name="l00056"></a>00056 <span class="preprocessor">#include &lt;util/twi.h&gt;</span>
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058 <span class="preprocessor">#include &lt;<a class="code" href="analog_8h.html">analog.h</a>&gt;</span>
+<a name="l00059"></a>00059 <span class="preprocessor">#include &lt;<a class="code" href="dio_8h.html">dio.h</a>&gt;</span>
+<a name="l00060"></a>00060 <span class="preprocessor">#include &lt;<a class="code" href="time_8h.html">time.h</a>&gt;</span>
+<a name="l00061"></a>00061 <span class="preprocessor">#include &lt;<a class="code" href="lcd_8h.html">lcd.h</a>&gt;</span>
+<a name="l00062"></a>00062 <span class="preprocessor">#include &lt;<a class="code" href="lights_8h.html">lights.h</a>&gt;</span>
+<a name="l00063"></a>00063 <span class="preprocessor">#include &lt;<a class="code" href="motor_8h.html">motor.h</a>&gt;</span>
+<a name="l00064"></a>00064 <span class="preprocessor">#include &lt;<a class="code" href="serial_8h.html">serial.h</a>&gt;</span>
+<a name="l00065"></a>00065 <span class="preprocessor">#include &lt;<a class="code" href="buzzer_8h.html">buzzer.h</a>&gt;</span>
+<a name="l00066"></a>00066 <span class="preprocessor">#include &lt;<a class="code" href="rangefinder_8h.html">rangefinder.h</a>&gt;</span>
+<a name="l00067"></a>00067 <span class="preprocessor">#include &lt;<a class="code" href="bom_8h.html">bom.h</a>&gt;</span>
+<a name="l00068"></a>00068 <span class="preprocessor">#include &lt;<a class="code" href="move_8h.html">move.h</a>&gt;</span>
+<a name="l00069"></a>00069 
+<a name="l00070"></a>00070 <span class="preprocessor">#endif</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x67.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x67.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x67.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li id="current"><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>G4
+: <a class="el" href="group__buzzer.html#g6f984a8b01aafc34122cc8bc0d9d5691">buzzer.h</a><li>G4s
+: <a class="el" href="group__buzzer.html#gaf8daa589f172256505e028dab2954b2">buzzer.h</a><li>GREEN
+: <a class="el" href="group__orbs.html#gcfbc006ea433ad708fdee3e82996e721">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x77.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x77.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x77.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li id="current"><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>WHEEL_PORT
+: <a class="el" href="group__analog.html#ga6538d2deb002b8441891dc4e15cd104">analog.h</a><li>WHITE
+: <a class="el" href="group__orbs.html#g87b537f5fa5c109d3c05c13d6b18f382">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x69.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x69.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x69.html	(revision 62)
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li id="current"><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>I2C
+: <a class="el" href="group__dragonfly.html#g457a9aa93dbb216459873a30bdb4d84a">dragonfly_lib.h</a><li>IR1
+: <a class="el" href="group__rangefinder.html#g7b2b32709f9770a283701ffcf3723497">rangefinder.h</a><li>IR2
+: <a class="el" href="group__rangefinder.html#g5a08e4f5cb3582e623cc14a6c92d48de">rangefinder.h</a><li>IR3
+: <a class="el" href="group__rangefinder.html#g26c72d21cca0ec21af4bd9b20ba3ad51">rangefinder.h</a><li>IR4
+: <a class="el" href="group__rangefinder.html#g20f2f5908baa0eeba04b9ceaf718cea0">rangefinder.h</a><li>IR5
+: <a class="el" href="group__rangefinder.html#g23554754d5334bdc35df623e1e012ede">rangefinder.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x79.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x79.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x79.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li id="current"><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_y">- y -</a></h3><ul>
+<li>YELLOW
+: <a class="el" href="group__orbs.html#gbf681265909adf3d3e8116c93c0ba179">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/serial_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/serial_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/serial_8h-source.html	(revision 62)
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: serial.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>serial.h</h1><a href="serial_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00012"></a>00012 <span class="comment">/*</span>
+<a name="l00013"></a>00013 <span class="comment">        serial.h - Contains definitions and function prototypes for the RS232 serial port</span>
+<a name="l00014"></a>00014 <span class="comment">  author(s): pkv</span>
+<a name="l00015"></a>00015 <span class="comment">  </span>
+<a name="l00016"></a>00016 <span class="comment">  Directions:</span>
+<a name="l00017"></a>00017 <span class="comment">  Call the initialization function for the serial port you wish to use.  Then, use</span>
+<a name="l00018"></a>00018 <span class="comment">  either the provided functions or the stdio functions (fprintf, etc) to read and</span>
+<a name="l00019"></a>00019 <span class="comment">  write characters to the serial ports.</span>
+<a name="l00020"></a>00020 <span class="comment">  </span>
+<a name="l00021"></a>00021 <span class="comment">  UART Mapping:</span>
+<a name="l00022"></a>00022 <span class="comment">    usb_*() -&gt; UART0</span>
+<a name="l00023"></a>00023 <span class="comment">    xbee_*() -&gt; UART1</span>
+<a name="l00024"></a>00024 <span class="comment">  </span>
+<a name="l00025"></a>00025 <span class="comment">  Options: (Add the following defines to your code to configure this library)</span>
+<a name="l00026"></a>00026 <span class="comment">    #define USB_BAUD { 115200 | 9600 } &lt;= pick ONE value from in here</span>
+<a name="l00027"></a>00027 <span class="comment">    #define XBEE_BAUD { 115200 | 9600 } &lt;= pick ONE value from in here</span>
+<a name="l00028"></a>00028 <span class="comment">    #define USE_STDIO</span>
+<a name="l00029"></a>00029 <span class="comment">  </span>
+<a name="l00030"></a>00030 <span class="comment">  Note: If you enable USE_STDIO, the first init function that is called will </span>
+<a name="l00031"></a>00031 <span class="comment">  automatically be linked to stdin, stdout, and stderr.  To use the baud rate </span>
+<a name="l00032"></a>00032 <span class="comment">  commands, add something like the following to your code:</span>
+<a name="l00033"></a>00033 <span class="comment">  </span>
+<a name="l00034"></a>00034 <span class="comment">  #define FOO_BAUD 9600</span>
+<a name="l00035"></a>00035 <span class="comment">  </span>
+<a name="l00036"></a>00036 <span class="comment">  **UNLESS YOU KNOW WHAT YOU ARE DOING, PLEASE DO NOT CHANGE THIS FILE**</span>
+<a name="l00037"></a>00037 <span class="comment">  Many, many other people use this file in their code.  If you change it, you will</span>
+<a name="l00038"></a>00038 <span class="comment">  probably break all of their nice code.  You should not need to change anything in</span>
+<a name="l00039"></a>00039 <span class="comment">  here, except to accomodate new hardware.</span>
+<a name="l00040"></a>00040 <span class="comment">*/</span>
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042 <span class="preprocessor">#ifndef _SERIAL_H</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#define _SERIAL_H</span>
+<a name="l00044"></a>00044 <span class="preprocessor"></span>
+<a name="l00054"></a>00054 <span class="comment">// if no baud rate is defined for usb, default is set here</span>
+<a name="l00055"></a>00055 <span class="preprocessor">#ifndef USB_BAUD</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>
+<a name="l00057"></a><a class="code" href="group__usb.html#g378065b4d75b008228ee41cc335474a7">00057</a> <span class="preprocessor">#define USB_BAUD 115200</span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00059"></a>00059 <span class="preprocessor"></span>
+<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a>(<span class="keywordtype">void</span>);
+<a name="l00063"></a>00063 <span class="keywordtype">int</span> <a class="code" href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946">usb_putc</a>(<span class="keywordtype">char</span> c);
+<a name="l00065"></a>00065 <span class="keywordtype">int</span> <a class="code" href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae">usb_getc</a>(<span class="keywordtype">void</span>);
+<a name="l00067"></a>00067 <span class="keywordtype">int</span> <a class="code" href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c">usb_getc_nb</a>(<span class="keywordtype">char</span> *c);
+<a name="l00069"></a>00069 <span class="keywordtype">int</span> <a class="code" href="group__usb.html#g6e101f68856f272f67923c4fb35a99e0">usb_puts</a>(<span class="keywordtype">char</span> *s);
+<a name="l00071"></a>00071 <span class="keywordtype">int</span> <a class="code" href="group__usb.html#gcd371dedbff10f0c52dca4b3b7af9e3d">usb_puti</a>(<span class="keywordtype">int</span> value);
+<a name="l00072"></a>00072  <span class="comment">//end addtogroup</span>
+<a name="l00074"></a>00074 
+<a name="l00084"></a>00084 <span class="comment">// if no baud rate is defined for usb, default is set here</span>
+<a name="l00085"></a>00085 
+<a name="l00086"></a>00086 <span class="comment">// if no baud rate is defined for xbee, default is set here</span>
+<a name="l00087"></a>00087 <span class="preprocessor">#ifndef XBEE_BAUD</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span>
+<a name="l00089"></a><a class="code" href="group__xbee.html#g7125fc8f3df24a2db8e074983206b054">00089</a> <span class="preprocessor">#define XBEE_BAUD 9600</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+<a name="l00091"></a>00091 <span class="preprocessor"></span>
+<a name="l00093"></a>00093 <span class="keywordtype">void</span> <a class="code" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">xbee_init</a>(<span class="keywordtype">void</span>);
+<a name="l00095"></a>00095 <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#g70c6b231330312d4f69b9a8afb5af989">xbee_putc</a>(<span class="keywordtype">char</span> c);
+<a name="l00097"></a>00097 <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88">xbee_getc</a>(<span class="keywordtype">void</span>);
+<a name="l00099"></a>00099 <span class="keywordtype">int</span> <a class="code" href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2">xbee_getc_nb</a>(<span class="keywordtype">char</span> *c);
+<a name="l00100"></a>00100  <span class="comment">//end addtogroup</span>
+<a name="l00102"></a>00102 
+<a name="l00103"></a>00103 <span class="preprocessor">#endif</span>
+<a name="l00104"></a>00104 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__lcd.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__lcd.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__lcd.html	(revision 62)
@@ -0,0 +1,229 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: LCD</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>LCD</h1>Functions for the LCD Functions for writing to the LCD. All functions may be found in <a class="el" href="lcd_8h.html">lcd.h</a>.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the LCD screen.  <a href="#g6842775ba83d166f02b8fef8bb63b1e6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#ge4dc23fdf26f3b8b0db253f431fe950d">lcd_clear_screen</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear the LCD screen.  <a href="#ge4dc23fdf26f3b8b0db253f431fe950d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#gfa7e36b95c43d603f510273ad077cbbe">lcd_putc</a> (char c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a char to the LCD screen.  <a href="#gfa7e36b95c43d603f510273ad077cbbe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g58a42336a344165c54e8dd4a0d3f0e1c"></a><!-- doxytag: member="lcd::lcd_puts" ref="g58a42336a344165c54e8dd4a0d3f0e1c" args="(char *s)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#g58a42336a344165c54e8dd4a0d3f0e1c">lcd_puts</a> (char *s)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a string to the LCD screen. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#gac280d714190003871937d3d92af3a29">lcd_gotoxy</a> (int x, int y)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the current cursor position.  <a href="#gac280d714190003871937d3d92af3a29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#g0150085af3123e80303a3445821acb40">lcd_puti</a> (int value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print an int to the LCD screen.  <a href="#g0150085af3123e80303a3445821acb40"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for the LCD Functions for writing to the LCD. All functions may be found in <a class="el" href="lcd_8h.html">lcd.h</a>. 
+<p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ge4dc23fdf26f3b8b0db253f431fe950d"></a><!-- doxytag: member="lcd.c::lcd_clear_screen" ref="ge4dc23fdf26f3b8b0db253f431fe950d" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void lcd_clear_screen           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Clear the LCD screen. 
+<p>
+Clears the LCD screen. lcd_init must be called first.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gac280d714190003871937d3d92af3a29"></a><!-- doxytag: member="lcd.c::lcd_gotoxy" ref="gac280d714190003871937d3d92af3a29" args="(int x, int y)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void lcd_gotoxy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>y</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the current cursor position. 
+<p>
+Move the current cursor position to the one specified. lcd_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>x</em>&nbsp;</td><td>The x coordinate of the new position </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>y</em>&nbsp;</td><td>The y coordinate of the new position</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g6842775ba83d166f02b8fef8bb63b1e6"></a><!-- doxytag: member="lcd.c::lcd_init" ref="g6842775ba83d166f02b8fef8bb63b1e6" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void lcd_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the LCD screen. 
+<p>
+Initializes the LCD. Must be called before any other LCD functions.     </td>
+  </tr>
+</table>
+<a class="anchor" name="gfa7e36b95c43d603f510273ad077cbbe"></a><!-- doxytag: member="lcd.c::lcd_putc" ref="gfa7e36b95c43d603f510273ad077cbbe" args="(char c)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void lcd_putc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>c</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Print a char to the LCD screen. 
+<p>
+Prints a character on the LCD screen. lcd_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>the character to print</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g0150085af3123e80303a3445821acb40"></a><!-- doxytag: member="lcd.c::lcd_puti" ref="g0150085af3123e80303a3445821acb40" args="(int value)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void lcd_puti           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>value</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Print an int to the LCD screen. 
+<p>
+Print an integer to the LCD screen. lcd_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>the integer to print</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/buzzer_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/buzzer_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/buzzer_8h-source.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: buzzer.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>buzzer.h</h1><a href="buzzer_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef _BUZZER_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define _BUZZER_H_</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00019"></a>00019 <span class="comment">//Musical note definitions</span>
+<a name="l00020"></a>00020 <span class="comment">//Source: http://www.answers.com/topic/piano-key-frequencies</span>
+<a name="l00022"></a><a class="code" href="group__buzzer.html#gcc39015f57b2efb8810b603f188bdf15">00022</a> <span class="comment"></span><span class="preprocessor">#define C4      260 //Middle C</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__buzzer.html#g879790f58417f0986370ddbcda404ed0">00024</a> <span class="preprocessor">#define C4s     277 //C sharp</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__buzzer.html#g3d9bb178282c3cb69740c94ba1e48fed">00026</a> <span class="preprocessor">#define D4      294</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__buzzer.html#g33eb0561dd16dd44c7c23519dd22540a">00028</a> <span class="preprocessor">#define D4s     311</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="group__buzzer.html#g4c819074c856b4e67fad4875a92cb2e9">00030</a> <span class="preprocessor">#define E4      330</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="group__buzzer.html#g7fd7918aa90b0ce1dc7ca9fe7a00e9fb">00032</a> <span class="preprocessor">#define F4      349</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a><a class="code" href="group__buzzer.html#g93ff98890b28a2833f1152cc95c3e628">00034</a> <span class="preprocessor">#define F4s     370</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a><a class="code" href="group__buzzer.html#g6f984a8b01aafc34122cc8bc0d9d5691">00036</a> <span class="preprocessor">#define G4      392</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="group__buzzer.html#gaf8daa589f172256505e028dab2954b2">00038</a> <span class="preprocessor">#define G4s     415</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="group__buzzer.html#ga0a03ad95ca0cb887a11e321fa1c9519">00040</a> <span class="preprocessor">#define A4      440</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a><a class="code" href="group__buzzer.html#g7063c01bf1877119a8aca7049e02a8cb">00042</a> <span class="preprocessor">#define A4s     466</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a><a class="code" href="group__buzzer.html#g0bf59f84e29fb57d27314583365a88d6">00044</a> <span class="preprocessor">#define B4      494</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a><a class="code" href="group__buzzer.html#g3b69b61d9deb37b13911faf2cf5cf1d5">00046</a> <span class="preprocessor">#define C5      523</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>
+<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a>(<span class="keywordtype">void</span>);
+<a name="l00051"></a>00051 <span class="keywordtype">void</span> <a class="code" href="group__buzzer.html#g9872f05325dd86a89728d47c8e9158ab">buzzer_set_val</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> buzz_value);
+<a name="l00053"></a>00053 <span class="keywordtype">void</span> <a class="code" href="group__buzzer.html#ga0aba85b0044cb1a44bb28c675d7c193">buzzer_set_freq</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> buzz_freq);
+<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="group__buzzer.html#ga78239c1255dfea31992f435659df1d7">buzzer_chirp</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> ms, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> buzz_freq);
+<a name="l00057"></a>00057 <span class="keywordtype">void</span> <a class="code" href="group__buzzer.html#g93d07c81691fec7a85ea85117d6eca4f">buzzer_off</a>(<span class="keywordtype">void</span>); 
+<a name="l00058"></a>00058  <span class="comment">//end addtogroup</span>
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061 <span class="preprocessor">#endif</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/serial_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/serial_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/serial_8h.html	(revision 62)
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: serial.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>serial.h File Reference</h1>Contains declarations for serial input and output. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="serial_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g378065b4d75b008228ee41cc335474a7"></a><!-- doxytag: member="serial.h::USB_BAUD" ref="g378065b4d75b008228ee41cc335474a7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g378065b4d75b008228ee41cc335474a7">USB_BAUD</a>&nbsp;&nbsp;&nbsp;115200</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the USB baud rate <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7125fc8f3df24a2db8e074983206b054"></a><!-- doxytag: member="serial.h::XBEE_BAUD" ref="g7125fc8f3df24a2db8e074983206b054" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7125fc8f3df24a2db8e074983206b054">XBEE_BAUD</a>&nbsp;&nbsp;&nbsp;9600</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the XBee baud rate <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the USB.  <a href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946">usb_putc</a> (char c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a character to USB.  <a href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae">usb_getc</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from USB.  <a href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c">usb_getc_nb</a> (char *c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from USB without blocking.  <a href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g6e101f68856f272f67923c4fb35a99e0">usb_puts</a> (char *s)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a string to USB.  <a href="group__usb.html#g6e101f68856f272f67923c4fb35a99e0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#gcd371dedbff10f0c52dca4b3b7af9e3d">usb_puti</a> (int value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print an integer to USB.  <a href="group__usb.html#gcd371dedbff10f0c52dca4b3b7af9e3d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">xbee_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the XBee.  <a href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g70c6b231330312d4f69b9a8afb5af989">xbee_putc</a> (char c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a character to the XBee.  <a href="group__xbee.html#g70c6b231330312d4f69b9a8afb5af989"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88">xbee_getc</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from the XBee.  <a href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2">xbee_getc_nb</a> (char *c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from the XBee without blocking.  <a href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains declarations for serial input and output. 
+<p>
+Contains definitions for serial input and output.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club Based on Tom Lauwer's Firefly Library </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/rangefinder_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/rangefinder_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/rangefinder_8h-source.html	(revision 62)
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: rangefinder.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>rangefinder.h</h1><a href="rangefinder_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef _RANGEFINDER_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define _RANGEFINDER_H_</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00020"></a><a class="code" href="group__rangefinder.html#g7b2b32709f9770a283701ffcf3723497">00020</a> <span class="preprocessor">#define IR1 6</span>
+<a name="l00021"></a>00021 <span class="preprocessor"></span>
+<a name="l00022"></a><a class="code" href="group__rangefinder.html#g5a08e4f5cb3582e623cc14a6c92d48de">00022</a> <span class="preprocessor">#define IR2 5</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__rangefinder.html#g26c72d21cca0ec21af4bd9b20ba3ad51">00024</a> <span class="preprocessor">#define IR3 4</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__rangefinder.html#g20f2f5908baa0eeba04b9ceaf718cea0">00026</a> <span class="preprocessor">#define IR4 3</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__rangefinder.html#g23554754d5334bdc35df623e1e012ede">00028</a> <span class="preprocessor">#define IR5 2</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="group__rangefinder.html#g52d0666b725e6d3a14b5bddc28190e59">range_init</a>(<span class="keywordtype">void</span>);
+<a name="l00033"></a>00033 <span class="keywordtype">int</span> <a class="code" href="group__rangefinder.html#g22bd0717784e34cb3a0762d78554dcf2">range_read_distance</a>(<span class="keywordtype">int</span> range_id);
+<a name="l00034"></a>00034  <span class="comment">//end addtogroup</span>
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals.html	(revision 62)
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>_PIN_A0
+: <a class="el" href="dio_8h.html#51f04ff9f4fb24a6be30c56ce6f40693">dio.h</a><li>_PIN_A1
+: <a class="el" href="dio_8h.html#4eb14fd2e59584018694829c303f917d">dio.h</a><li>_PIN_A2
+: <a class="el" href="dio_8h.html#8addc957193d67ec0456ca4b91e6348a">dio.h</a><li>_PIN_A3
+: <a class="el" href="dio_8h.html#d542d3d032328a77644041b683263b60">dio.h</a><li>_PIN_A4
+: <a class="el" href="dio_8h.html#939eb745c1abd8ad357cbc7949071391">dio.h</a><li>_PIN_A5
+: <a class="el" href="dio_8h.html#92c23c5ef5f0909f7252d46dee64f556">dio.h</a><li>_PIN_A6
+: <a class="el" href="dio_8h.html#6b3bddc004c965e7425d85bf26b749dc">dio.h</a><li>_PIN_A7
+: <a class="el" href="dio_8h.html#c446f59a98dfb4a0668306f57bd1ecca">dio.h</a><li>_PIN_ALE
+: <a class="el" href="dio_8h.html#b01e62102c2ea92ef5e6ddd4c8b10e7d">dio.h</a><li>_PIN_B0
+: <a class="el" href="dio_8h.html#b4f305294f28e717999cef139b7caab0">dio.h</a><li>_PIN_B1
+: <a class="el" href="dio_8h.html#bfe495b8eb044c08d0847c7d4043ea4f">dio.h</a><li>_PIN_B2
+: <a class="el" href="dio_8h.html#fbe373570755ea8d3180703632224896">dio.h</a><li>_PIN_B3
+: <a class="el" href="dio_8h.html#a760d7cb45c90094702c296999558f65">dio.h</a><li>_PIN_B4
+: <a class="el" href="dio_8h.html#76ae9cc1b2c74f451ab638371285f18d">dio.h</a><li>_PIN_B5
+: <a class="el" href="dio_8h.html#0fae583ff609c0543c9d8c1dab7e378d">dio.h</a><li>_PIN_B6
+: <a class="el" href="dio_8h.html#4c2e6bdc02d9672de3795f3bbb3670b9">dio.h</a><li>_PIN_B7
+: <a class="el" href="dio_8h.html#8415309f27a757e7c551906194c28e80">dio.h</a><li>_PIN_C0
+: <a class="el" href="dio_8h.html#8b117e9361a991638bd82eea83ff001a">dio.h</a><li>_PIN_C1
+: <a class="el" href="dio_8h.html#0c45f79d733ffbbbd7de2056893d6eb1">dio.h</a><li>_PIN_C2
+: <a class="el" href="dio_8h.html#c01a3878ceb5a63e961bf3a305e74a06">dio.h</a><li>_PIN_C3
+: <a class="el" href="dio_8h.html#bd8e9c9599a4c5f2c1571298b29d44bf">dio.h</a><li>_PIN_C4
+: <a class="el" href="dio_8h.html#888ab2bc04575f1902e75398fb2843b4">dio.h</a><li>_PIN_C5
+: <a class="el" href="dio_8h.html#e2c922d0d623cce421470e501b5cd01d">dio.h</a><li>_PIN_C6
+: <a class="el" href="dio_8h.html#de6c0b894acec113cc6e83ddf1c6f4ad">dio.h</a><li>_PIN_C7
+: <a class="el" href="dio_8h.html#94fc1c3551e878d00670be18dd98b01e">dio.h</a><li>_PIN_D0
+: <a class="el" href="dio_8h.html#4b95d04e9712921644d2c9daca838ae1">dio.h</a><li>_PIN_D1
+: <a class="el" href="dio_8h.html#e284f5774e84fe78764b3475a1ab7df3">dio.h</a><li>_PIN_D2
+: <a class="el" href="dio_8h.html#bb9448fbe6bc6dcd64e35d7ffa00ca6d">dio.h</a><li>_PIN_D3
+: <a class="el" href="dio_8h.html#e0acf61952e589ddc79359cc418eec17">dio.h</a><li>_PIN_D4
+: <a class="el" href="dio_8h.html#2b237cd474a817c15832fd87146e6daa">dio.h</a><li>_PIN_D5
+: <a class="el" href="dio_8h.html#70a748f97c4d4e751f2edd0fcbac4a7c">dio.h</a><li>_PIN_D6
+: <a class="el" href="dio_8h.html#8a2da262330ccf12ac69a1822d3c091c">dio.h</a><li>_PIN_D7
+: <a class="el" href="dio_8h.html#fc098c404f6e3003aef2ec0e0bc35acd">dio.h</a><li>_PIN_E0
+: <a class="el" href="dio_8h.html#badf190bc1c23be12590868584135c22">dio.h</a><li>_PIN_E1
+: <a class="el" href="dio_8h.html#e88599fd3bd196eacb91052ea05e18f3">dio.h</a><li>_PIN_E2
+: <a class="el" href="dio_8h.html#62122fe3a2b5d08d964a2178e4015e79">dio.h</a><li>_PIN_E3
+: <a class="el" href="dio_8h.html#e93d87d0523dfbb446a5909254f0ef2c">dio.h</a><li>_PIN_E4
+: <a class="el" href="dio_8h.html#6859b74122e7d105fe3dd380b6763aca">dio.h</a><li>_PIN_E5
+: <a class="el" href="dio_8h.html#19a858b324d285b261caa831df84d32f">dio.h</a><li>_PIN_E6
+: <a class="el" href="dio_8h.html#04723017fa82410249e3e6393bca65af">dio.h</a><li>_PIN_E7
+: <a class="el" href="dio_8h.html#5eb34c0e8ea6af1b8bbd3cbd8a92a600">dio.h</a><li>_PIN_F0
+: <a class="el" href="dio_8h.html#da61cdc73ca993fd5f450183862fcef1">dio.h</a><li>_PIN_F1
+: <a class="el" href="dio_8h.html#c0d7ed715f7b6982b94a0f791d62915b">dio.h</a><li>_PIN_F2
+: <a class="el" href="dio_8h.html#91e39e9f2da5ec9515e7d961a058e069">dio.h</a><li>_PIN_F3
+: <a class="el" href="dio_8h.html#847601cd0a3a8830bc38a9eef0b0d6a5">dio.h</a><li>_PIN_F4
+: <a class="el" href="dio_8h.html#81722f76eb8b39d3f3f5678526e918c6">dio.h</a><li>_PIN_F5
+: <a class="el" href="dio_8h.html#6655e7450006cec34ac55a0e7d63f0cd">dio.h</a><li>_PIN_F6
+: <a class="el" href="dio_8h.html#6b042b1d986784315b7d1780af4e6325">dio.h</a><li>_PIN_F7
+: <a class="el" href="dio_8h.html#cd2cf9c19a99cb3b883d44ddb8841aa6">dio.h</a><li>_PIN_G0
+: <a class="el" href="dio_8h.html#67a762a16abd40507f84d45a1cc8fc60">dio.h</a><li>_PIN_G1
+: <a class="el" href="dio_8h.html#cd22478361f403160ac78b6673bc1cc8">dio.h</a><li>_PIN_G2
+: <a class="el" href="dio_8h.html#d15640b2580aa575af9b4b3afb66d69e">dio.h</a><li>_PIN_G3
+: <a class="el" href="dio_8h.html#b68ee88c80780acce271541468b57b01">dio.h</a><li>_PIN_G4
+: <a class="el" href="dio_8h.html#8098eb56320b9f65520da4f3034168d8">dio.h</a><li>_PIN_RD
+: <a class="el" href="dio_8h.html#35b975ca202c33953772138fbe9987a1">dio.h</a><li>_PIN_TOSC1
+: <a class="el" href="dio_8h.html#4658177abc8db29571f67e68f50d5591">dio.h</a><li>_PIN_TOSC2
+: <a class="el" href="dio_8h.html#1a989f2be615fdbb5d539c803ae85052">dio.h</a><li>_PIN_WR
+: <a class="el" href="dio_8h.html#1457bcf9a22d249b4907d0bdc6661e6f">dio.h</a><li>_PORT_A
+: <a class="el" href="dio_8h.html#c03b8868a83d44a9b97de1cc0d7fe8e8">dio.h</a><li>_PORT_B
+: <a class="el" href="dio_8h.html#da0ad7242f65b61351de29531659aaf3">dio.h</a><li>_PORT_C
+: <a class="el" href="dio_8h.html#2f5cd37fd5831a67953d155ec3624187">dio.h</a><li>_PORT_D
+: <a class="el" href="dio_8h.html#881c4ea9fdae76401a4005981f40887e">dio.h</a><li>_PORT_E
+: <a class="el" href="dio_8h.html#48bd3d9b9db9d872bbdf4579864a6cba">dio.h</a><li>_PORT_F
+: <a class="el" href="dio_8h.html#7f0278fc6e55e8e8a6f63c944e9779bd">dio.h</a><li>_PORT_G
+: <a class="el" href="dio_8h.html#7c0f589b48ebb00d7a998ac3daaac11a">dio.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x6d.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x6d.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x6d.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li id="current"><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MAGENTA
+: <a class="el" href="group__orbs.html#g6f699060902f800f12aaae150f3a708e">lights.h</a><li>MOTORS
+: <a class="el" href="group__dragonfly.html#g9bb31bba359fbb679910df0a6efde5a3">dragonfly_lib.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__battery.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__battery.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__battery.html	(revision 62)
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Battery</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Battery</h1>Functions for reading battery voltage.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8d3e83b7f2ff00064ba16519d1589cfd"></a><!-- doxytag: member="battery::BATTERY_NORMALV" ref="g8d3e83b7f2ff00064ba16519d1589cfd" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g8d3e83b7f2ff00064ba16519d1589cfd">BATTERY_NORMALV</a>&nbsp;&nbsp;&nbsp;154</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Normal battery voltage. (6 V). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc955a8295474a62e5faeaf28abf89c6b"></a><!-- doxytag: member="battery::BATTERY_CHARINGV" ref="gc955a8295474a62e5faeaf28abf89c6b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#gc955a8295474a62e5faeaf28abf89c6b">BATTERY_CHARINGV</a>&nbsp;&nbsp;&nbsp;179</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Charging battery voltage. (7 V). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb23d2e4155f65f05628d1b48430c6b18"></a><!-- doxytag: member="battery::BATTERY_LOWV" ref="gb23d2e4155f65f05628d1b48430c6b18" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#gb23d2e4155f65f05628d1b48430c6b18">BATTERY_LOWV</a>&nbsp;&nbsp;&nbsp;152</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Low battery voltage. ( &lt; 6 V). <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#ga17c87ea3dd1f7539005ac596efe1b32">battery8</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the battery voltage.  <a href="#ga17c87ea3dd1f7539005ac596efe1b32"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g538631dcf134d98d7301d800a744e4d9">battery</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the battery voltage in deciVolts.  <a href="#g538631dcf134d98d7301d800a744e4d9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g4febf636fecb12a276edb51f5b9cc61e">battery_low</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if the battery is low.  <a href="#g4febf636fecb12a276edb51f5b9cc61e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g431bfea596da03bdeead863b16e0c37a">battery8_avg</a> (int n_samples)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get an average battery voltage reading.  <a href="#g431bfea596da03bdeead863b16e0c37a"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for reading battery voltage. 
+<p>
+Contains functions for checking the current voltage of the battery. Include <a class="el" href="battery_8h.html">battery.h</a> to access these functions. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g538631dcf134d98d7301d800a744e4d9"></a><!-- doxytag: member="battery.c::battery" ref="g538631dcf134d98d7301d800a744e4d9" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int battery           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read the battery voltage in deciVolts. 
+<p>
+Returns the voltage of the battery in deciVolts. analog_init must be called before using this function.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the voltage of the battery in deciVolts.</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>, <a class="el" href="group__battery.html#ga17c87ea3dd1f7539005ac596efe1b32">battery8</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="ga17c87ea3dd1f7539005ac596efe1b32"></a><!-- doxytag: member="battery.c::battery8" ref="ga17c87ea3dd1f7539005ac596efe1b32" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int battery8           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read the battery voltage. 
+<p>
+Returns the voltage of the battery as an analog8 reading. 128 is approximately 5 volts. analog_init must be called before using this function.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the voltage of the battery as an analog8 reading</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>, <a class="el" href="group__battery.html#g538631dcf134d98d7301d800a744e4d9">battery</a>, <a class="el" href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27">analog8</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g431bfea596da03bdeead863b16e0c37a"></a><!-- doxytag: member="battery.c::battery8_avg" ref="g431bfea596da03bdeead863b16e0c37a" args="(int n_samples)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int battery8_avg           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>n_samples</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+get an average battery voltage reading. 
+<p>
+Averages n_samples battery8 readings. This function may take a while to complete, and is only made available for convenience. analog_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>n_samples</em>&nbsp;</td><td>The number of times to sample the battery voltage</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the average reading for the battery voltage, where 128 is approximately 5 Volts.</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>, <a class="el" href="group__battery.html#g538631dcf134d98d7301d800a744e4d9">battery</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g4febf636fecb12a276edb51f5b9cc61e"></a><!-- doxytag: member="battery.c::battery_low" ref="g4febf636fecb12a276edb51f5b9cc61e" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">char battery_low           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if the battery is low. 
+<p>
+Checks if the battery is low. analog_init must be called before this function can be used. This function waits for several low battery readings in a row to avoid false positives.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>1 if the battery is low, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x6f.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x6f.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x6f.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li id="current"><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>ORANGE
+: <a class="el" href="group__orbs.html#gc5b6e19bf06822021f35602c59658de3">lights.h</a><li>ORB
+: <a class="el" href="group__dragonfly.html#g24a9b050b733edb162cbeb44b1a417b1">dragonfly_lib.h</a><li>ORB_OFF
+: <a class="el" href="group__orbs.html#gcf2f6da92d895ef5e594223f1e39e4b1">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/motor_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/motor_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/motor_8h-source.html	(revision 62)
@@ -0,0 +1,40 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: motor.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>motor.h</h1><a href="motor_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00012"></a>00012 <span class="preprocessor">#ifndef _MOTOR_H</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define _MOTOR_H</span>
+<a name="l00014"></a>00014 <span class="preprocessor"></span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include &lt;avr/io.h&gt;</span>
+<a name="l00022"></a><a class="code" href="group__motors.html#g6ddfdda7a062d10cff4a72b76b44aeb8">00022</a> <span class="preprocessor">#define FORWARD 1</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__motors.html#gdf445abfe1b77fa63f89e315ccc2f7f2">00024</a> <span class="preprocessor">#define BACKWARD 0</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="keywordtype">void</span> <a class="code" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a>(<span class="keywordtype">void</span>);
+<a name="l00029"></a>00029 <span class="keywordtype">void</span> <a class="code" href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee">motor1_set</a>(<span class="keywordtype">int</span> direction, <span class="keywordtype">int</span> speed);
+<a name="l00031"></a>00031 <span class="keywordtype">void</span> <a class="code" href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0">motor2_set</a>(<span class="keywordtype">int</span> direction, <span class="keywordtype">int</span> speed);
+<a name="l00033"></a>00033 <span class="keywordtype">void</span> <a class="code" href="group__motors.html#g3c7ada13bc7d8ed5e819910da74bf9cd">motors_off</a>(<span class="keywordtype">void</span>);
+<a name="l00034"></a>00034  <span class="comment">// end addtogroup</span>
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/time_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/time_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/time_8h.html	(revision 62)
@@ -0,0 +1,77 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: time.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>time.h File Reference</h1>Contains time-related functions and definitions. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="time_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd271145628da4e0e85e3e2486d117713"></a><!-- doxytag: member="time.h::SIXTEENTH_SECOND" ref="gd271145628da4e0e85e3e2486d117713" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#gd271145628da4e0e85e3e2486d117713">SIXTEENTH_SECOND</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A sixteenth of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7bdae984203001070e9abeb3190f844a"></a><!-- doxytag: member="time.h::EIGTH_SECOND" ref="g7bdae984203001070e9abeb3190f844a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g7bdae984203001070e9abeb3190f844a">EIGTH_SECOND</a>&nbsp;&nbsp;&nbsp;2</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An eighth of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0b2a348d9afca1f1182bc2bb2aa6a3d1"></a><!-- doxytag: member="time.h::QUARTER_SECOND" ref="g0b2a348d9afca1f1182bc2bb2aa6a3d1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g0b2a348d9afca1f1182bc2bb2aa6a3d1">QUARTER_SECOND</a>&nbsp;&nbsp;&nbsp;4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A quarter of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf95f27544f39827250d6bef6fa5fe18e"></a><!-- doxytag: member="time.h::HALF_SECOND" ref="gf95f27544f39827250d6bef6fa5fe18e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#gf95f27544f39827250d6bef6fa5fe18e">HALF_SECOND</a>&nbsp;&nbsp;&nbsp;8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Half of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g94212be2394d2d37d9dfd33d07d82dba"></a><!-- doxytag: member="time.h::SECOND" ref="g94212be2394d2d37d9dfd33d07d82dba" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g94212be2394d2d37d9dfd33d07d82dba">SECOND</a>&nbsp;&nbsp;&nbsp;16</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">One second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4c2dc0c899e1571596205f29fcc35cd6"></a><!-- doxytag: member="time.h::TWO_SECOND" ref="g4c2dc0c899e1571596205f29fcc35cd6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g4c2dc0c899e1571596205f29fcc35cd6">TWO_SECOND</a>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Two seconds. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g335312d1eed285bbc48a7f383ad78d97"></a><!-- doxytag: member="time.h::FOUR_SECOND" ref="g335312d1eed285bbc48a7f383ad78d97" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g335312d1eed285bbc48a7f383ad78d97">FOUR_SECOND</a>&nbsp;&nbsp;&nbsp;64</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Four seconds. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g8aa473f8ae9a91df4bc9ea700983c72d">delay_ms</a> (int ms)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delay execution for the specified time.  <a href="group__time.html#g8aa473f8ae9a91df4bc9ea700983c72d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g4b8a034dd8e994f4a1af612806f7c553">rtc_init</a> (int prescale_opt, void(*rtc_func)(void))</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enable the realtime clock.  <a href="group__time.html#g4b8a034dd8e994f4a1af612806f7c553"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g83ae542199d1c0e964aff89537d686a3">rtc_reset</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reset the counter of the realtime clock.  <a href="group__time.html#g83ae542199d1c0e964aff89537d686a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g5c7f2bf39314463dd5f4913e05ca991d">rtc_get</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the value of the realtime clock.  <a href="group__time.html#g5c7f2bf39314463dd5f4913e05ca991d"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains time-related functions and definitions. 
+<p>
+Contains functions and definitions for dealing with time, namely delay_ms and the realtime clock.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/analog_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/analog_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/analog_8h-source.html	(revision 62)
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: analog.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>analog.h</h1><a href="analog_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00017"></a>00017 <span class="preprocessor">#ifndef _ANALOG_H</span>
+<a name="l00018"></a>00018 <span class="preprocessor"></span><span class="preprocessor">#define _ANALOG_H</span>
+<a name="l00019"></a>00019 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__analog.html#g099995994c74b5fff8f7de4ff3eac550">00026</a> <span class="preprocessor">#define AN0 0x00</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__analog.html#g4903de2a52966c8dc2c20faf565d451d">00028</a> <span class="preprocessor">#define AN1 0x01</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="group__analog.html#g9b0754e893d69a1e69e856853f70da1f">00030</a> <span class="preprocessor">#define AN2 0x02</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="group__analog.html#g9f593faa38f1023698d74f03a457abe3">00032</a> <span class="preprocessor">#define AN3 0x03</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a><a class="code" href="group__analog.html#gdc95f1e9cdc00268d7bca5885052171f">00034</a> <span class="preprocessor">#define AN4 0x04</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a><a class="code" href="group__analog.html#g99ed455a0d536be03f12eba18ccff71b">00036</a> <span class="preprocessor">#define AN5 0x05</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="group__analog.html#gd63d6861c3fa5e606de5c18ada3b4d10">00038</a> <span class="preprocessor">#define AN6 0x06</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="group__analog.html#g277d706ee82bd70459b63e85489c7074">00040</a> <span class="preprocessor">#define AN7 0x07</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a><a class="code" href="group__analog.html#g28b64348820dbb25c903d24f2e38a8a7">00042</a> <span class="preprocessor">#define AN8 0x08</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a><a class="code" href="group__analog.html#g2fb7e4f4e0ea1f172eef79ed1f92e15f">00044</a> <span class="preprocessor">#define AN9 0x09</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00046"></a><a class="code" href="group__analog.html#gc63caaf5f7a06a02522cb7f90d6c1959">00046</a> <span class="preprocessor">#define AN10 0x0a</span>
+<a name="l00047"></a>00047 <span class="preprocessor"></span>
+<a name="l00048"></a><a class="code" href="group__analog.html#gdfeb79b00aaef4734408a910838f7872">00048</a> <span class="preprocessor">#define AN11 0x0b</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+<a name="l00050"></a><a class="code" href="group__analog.html#g7a50a07e69f38b6674b0494dfbc653f9">00050</a> <span class="preprocessor">#define AN12 0x0c</span>
+<a name="l00051"></a>00051 <span class="preprocessor"></span>
+<a name="l00052"></a><a class="code" href="group__analog.html#gbf80851ae45ddfe4bfdfc10541c255ad">00052</a> <span class="preprocessor">#define AN13 0x0d</span>
+<a name="l00053"></a>00053 <span class="preprocessor"></span>
+<a name="l00054"></a><a class="code" href="group__analog.html#g817772a1db513b734dfe4475c3616061">00054</a> <span class="preprocessor">#define AN14 0x0e</span>
+<a name="l00055"></a>00055 <span class="preprocessor"></span>
+<a name="l00056"></a><a class="code" href="group__analog.html#g797adbadae057ff7aa766d84b4f180f9">00056</a> <span class="preprocessor">#define AN15 0x0f</span>
+<a name="l00057"></a>00057 <span class="preprocessor"></span>
+<a name="l00059"></a><a class="code" href="group__analog.html#g3434ce39eaea22b46a0100b7fd3a6f47">00059</a> <span class="preprocessor">#define EXT_MUX AN7</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00061"></a><a class="code" href="group__analog.html#ga6538d2deb002b8441891dc4e15cd104">00061</a> <span class="preprocessor">#define WHEEL_PORT AN10</span>
+<a name="l00062"></a>00062 <span class="preprocessor"></span>
+<a name="l00063"></a><a class="code" href="group__analog.html#gadcd026a2c91fe96c8134619c87bb72a">00063</a> <span class="preprocessor">#define BATT_PORT  AN11</span>
+<a name="l00064"></a>00064 <span class="preprocessor"></span>
+<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>(<span class="keywordtype">void</span>);
+<a name="l00068"></a>00068 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27">analog8</a>(<span class="keywordtype">int</span> which);
+<a name="l00070"></a>00070 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="group__analog.html#g875bf8cb165a3a288eb1aa2ac06be4f3">analog10</a>(<span class="keywordtype">int</span> which);
+<a name="l00072"></a>00072 <span class="keywordtype">int</span> <a class="code" href="group__analog.html#g973e63eb508819a37efe3231b6a39550">wheel</a>(<span class="keywordtype">void</span>);
+<a name="l00073"></a>00073  <span class="comment">//end group</span>
+<a name="l00075"></a>00075 
+<a name="l00076"></a>00076 <span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x70.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x70.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x70.html	(revision 62)
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li id="current"><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PIN_A0
+: <a class="el" href="group__dio.html#gd3a64360b1623d5314cbb8999cb86f99">dio.h</a><li>PIN_A1
+: <a class="el" href="group__dio.html#gceb8d227e063cc486808d5d41735a050">dio.h</a><li>PIN_A2
+: <a class="el" href="group__dio.html#ga181f8521480dfcc1eb2688075701a4c">dio.h</a><li>PIN_A3
+: <a class="el" href="group__dio.html#g933cca5ab119d5e74639e7ac5d120d8a">dio.h</a><li>PIN_A4
+: <a class="el" href="group__dio.html#gea5f553ed9a6c4dac77e9c77d0cd0391">dio.h</a><li>PIN_A5
+: <a class="el" href="group__dio.html#gb78a92a8cba92ec5664599083bcb2f52">dio.h</a><li>PIN_A6
+: <a class="el" href="group__dio.html#gfc06e9c4314680dcb8900c88079a954f">dio.h</a><li>PIN_A7
+: <a class="el" href="group__dio.html#g027cabbaecdcdfdc68fbd92f8e1922ac">dio.h</a><li>PIN_ADC0
+: <a class="el" href="group__dio.html#g44007fefe4c74b325caa7f43e3a6e716">dio.h</a><li>PIN_ADC1
+: <a class="el" href="group__dio.html#g5b86225ba7ed79b2224a3c561c5f3aa6">dio.h</a><li>PIN_ADC2
+: <a class="el" href="group__dio.html#gd4248fc02c8ddeaae385536349eb0cb7">dio.h</a><li>PIN_ADC3
+: <a class="el" href="group__dio.html#gbce7e56320e6301cf256a0ce26c56c0b">dio.h</a><li>PIN_ADC4
+: <a class="el" href="group__dio.html#gfc66b57b212407fc255f69fd6ead6404">dio.h</a><li>PIN_ADC5
+: <a class="el" href="group__dio.html#g701f2be23f28d8187d44159ada343be9">dio.h</a><li>PIN_ADC6
+: <a class="el" href="group__dio.html#g45f972962752d572ed471d052a35982f">dio.h</a><li>PIN_ADC7
+: <a class="el" href="group__dio.html#g254abf6fa8c8f85b3d1b927ee35a22b4">dio.h</a><li>PIN_AN0
+: <a class="el" href="group__dio.html#gb6451bdf35a387a5db4323fa5d36be41">dio.h</a><li>PIN_AN1
+: <a class="el" href="group__dio.html#ge5bf915d1d529da9379de10836283554">dio.h</a><li>PIN_AN2
+: <a class="el" href="group__dio.html#g3349fe5af4b9deab28132c4e5e75529b">dio.h</a><li>PIN_AN3
+: <a class="el" href="group__dio.html#g14a8708f056d5e595556c262adbbc09f">dio.h</a><li>PIN_AN4
+: <a class="el" href="group__dio.html#g2a33e134b96d4b5186aabc96edc52ee3">dio.h</a><li>PIN_AN5
+: <a class="el" href="group__dio.html#g92a11eaeaf053774343b9a677bb4d5e1">dio.h</a><li>PIN_AN6
+: <a class="el" href="group__dio.html#g9a09b3ad4931ca28bf25d72c759f578d">dio.h</a><li>PIN_AN7
+: <a class="el" href="group__dio.html#g7a5a85c782c9687ded37a870bce57102">dio.h</a><li>PIN_BATT
+: <a class="el" href="group__dio.html#g05fa96c4c8bfa63445224dfd27741aee">dio.h</a><li>PIN_BTN
+: <a class="el" href="group__dio.html#g92fdab197e388c3c44586db0b10a5eb9">dio.h</a><li>PIN_BTN1
+: <a class="el" href="group__dio.html#gb2909d57039bab16e3d67f3432e5364d">dio.h</a><li>PIN_BTN2
+: <a class="el" href="group__dio.html#g055e63d10caa23d102dd471ec4b1145d">dio.h</a><li>PIN_C0
+: <a class="el" href="group__dio.html#g5d6c3aa4f6f299e8a82d4d1295ae322b">dio.h</a><li>PIN_C1
+: <a class="el" href="group__dio.html#g3f39d54f92d708a3c807377eed1a2043">dio.h</a><li>PIN_C2
+: <a class="el" href="group__dio.html#g30f4452c1e3af3c0e210cd0208615399">dio.h</a><li>PIN_C3
+: <a class="el" href="group__dio.html#gce4355a55f5fca3452924c22e5133012">dio.h</a><li>PIN_C4
+: <a class="el" href="group__dio.html#gad1780e5368e328729b4bff24e98d30c">dio.h</a><li>PIN_C5
+: <a class="el" href="group__dio.html#gc3a295212fbf34fdd35d2a984bf75b80">dio.h</a><li>PIN_C6
+: <a class="el" href="group__dio.html#g1c5e268dfd2543c2d4099c51876fcc9b">dio.h</a><li>PIN_C7
+: <a class="el" href="group__dio.html#g0762e408c09c5c4a9d0f02e34b2b96d3">dio.h</a><li>PIN_E6
+: <a class="el" href="group__dio.html#g7e1867ce517711f7d73d13969dc007af">dio.h</a><li>PIN_E7
+: <a class="el" href="group__dio.html#gf152e5be854f0ea205b0ea10bcc2217c">dio.h</a><li>PIN_EXT_DIO1
+: <a class="el" href="group__dio.html#g22e4023e324755fd5666592588fc3c7b">dio.h</a><li>PIN_EXT_DIO2
+: <a class="el" href="group__dio.html#gf8dcfd33ece84d61943c4024504cb5e1">dio.h</a><li>PIN_LCD_COMMAND
+: <a class="el" href="group__dio.html#g9ad67c3da2c24b47f9926a7dfddea60a">dio.h</a><li>PIN_LCD_RESET
+: <a class="el" href="group__dio.html#gfbde03bd88d54597e008f40b8fea2f41">dio.h</a><li>PIN_LED1
+: <a class="el" href="group__dio.html#g1ee291f6ef730418abd5997176fe6b4c">dio.h</a><li>PIN_MISO
+: <a class="el" href="group__dio.html#g46bdd417480dec5cb9cf196af3c7489c">dio.h</a><li>PIN_MOSI
+: <a class="el" href="group__dio.html#gbaeddda4b992af7165ed898ab8b2b4ac">dio.h</a><li>PIN_RX0
+: <a class="el" href="group__dio.html#g6844ffe71c9cb20c6b4fe67289b58f40">dio.h</a><li>PIN_SCK
+: <a class="el" href="group__dio.html#g6a1a3e97267377d1b18bb9073192fdf1">dio.h</a><li>PIN_SCL
+: <a class="el" href="group__dio.html#gb4874028097ae0777b42cef20ffc913d">dio.h</a><li>PIN_SDA
+: <a class="el" href="group__dio.html#g5dfb6a7d75a520f42d21ec9a9f640342">dio.h</a><li>PIN_SS
+: <a class="el" href="group__dio.html#gb4b553591a495409d4f7cec4b6c3e754">dio.h</a><li>PIN_TX0
+: <a class="el" href="group__dio.html#g6c8efa60d2db765b46d88aa2a6df0318">dio.h</a><li>PIN_WHEEL
+: <a class="el" href="group__dio.html#g5bec113a8dc799a771a2b1d3ab256128">dio.h</a><li>PINK
+: <a class="el" href="group__orbs.html#gda419fe3b48fcf19daed7cc57ccf1174">lights.h</a><li>PURPLE
+: <a class="el" href="group__orbs.html#g0bb0b009e7a7390473ace4d98bd843c0">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/lcd_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/lcd_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/lcd_8h.html	(revision 62)
@@ -0,0 +1,55 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: lcd.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>lcd.h File Reference</h1>Contains definitions for dealing with the LCD screen. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="lcd_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the LCD screen.  <a href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#ge4dc23fdf26f3b8b0db253f431fe950d">lcd_clear_screen</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clear the LCD screen.  <a href="group__lcd.html#ge4dc23fdf26f3b8b0db253f431fe950d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#gfa7e36b95c43d603f510273ad077cbbe">lcd_putc</a> (char c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a char to the LCD screen.  <a href="group__lcd.html#gfa7e36b95c43d603f510273ad077cbbe"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g58a42336a344165c54e8dd4a0d3f0e1c"></a><!-- doxytag: member="lcd.h::lcd_puts" ref="g58a42336a344165c54e8dd4a0d3f0e1c" args="(char *s)" -->
+void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#g58a42336a344165c54e8dd4a0d3f0e1c">lcd_puts</a> (char *s)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a string to the LCD screen. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#g0150085af3123e80303a3445821acb40">lcd_puti</a> (int value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print an int to the LCD screen.  <a href="group__lcd.html#g0150085af3123e80303a3445821acb40"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__lcd.html#gac280d714190003871937d3d92af3a29">lcd_gotoxy</a> (int x, int y)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the current cursor position.  <a href="group__lcd.html#gac280d714190003871937d3d92af3a29"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains definitions for dealing with the LCD screen. 
+<p>
+Contains definitions and functions for dealing with the LCD screen.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x62.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x62.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x62.html	(revision 62)
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li id="current"><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>B4
+: <a class="el" href="group__buzzer.html#g0bf59f84e29fb57d27314583365a88d6">buzzer.h</a><li>BACKWARD
+: <a class="el" href="group__motors.html#gdf445abfe1b77fa63f89e315ccc2f7f2">motor.h</a><li>BATT_PORT
+: <a class="el" href="group__analog.html#gadcd026a2c91fe96c8134619c87bb72a">analog.h</a><li>BATTERY_CHARINGV
+: <a class="el" href="group__battery.html#gc955a8295474a62e5faeaf28abf89c6b">battery.h</a><li>BATTERY_LOWV
+: <a class="el" href="group__battery.html#gb23d2e4155f65f05628d1b48430c6b18">battery.h</a><li>BATTERY_NORMALV
+: <a class="el" href="group__battery.html#g8d3e83b7f2ff00064ba16519d1589cfd">battery.h</a><li>BCK
+: <a class="el" href="group__move.html#gb8d9d2e1ff6a03ce3b45a32e0002a405">move.h</a><li>BLUE
+: <a class="el" href="group__orbs.html#g79d10e672abb49ad63eeaa8aaef57c38">lights.h</a><li>BTN1
+: <a class="el" href="group__dio.html#g3a4cc5e218cef7de139625a519e29ff3">dio.h</a><li>BTN2
+: <a class="el" href="group__dio.html#g9dc19cdd6944e087c077044296a1ad8e">dio.h</a><li>button1_click()
+: <a class="el" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">dio.h</a><li>button1_read()
+: <a class="el" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">dio.h</a><li>button1_wait()
+: <a class="el" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">dio.h</a><li>button2_click()
+: <a class="el" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">dio.h</a><li>button2_read()
+: <a class="el" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">dio.h</a><li>button2_wait()
+: <a class="el" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">dio.h</a><li>BUZZER
+: <a class="el" href="group__dragonfly.html#g145103118f6d9d1129aa4509cf214a13">dragonfly_lib.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x72.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x72.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x72.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li id="current"><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>RED
+: <a class="el" href="group__orbs.html#g8d23feea868a983c8c2b661e1e16972f">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x64.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x64.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x64.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li id="current"><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>D4
+: <a class="el" href="group__buzzer.html#g3d9bb178282c3cb69740c94ba1e48fed">buzzer.h</a><li>D4s
+: <a class="el" href="group__buzzer.html#g33eb0561dd16dd44c7c23519dd22540a">buzzer.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x74.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x74.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x74.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li id="current"><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>TWO_SECOND
+: <a class="el" href="group__time.html#g4c2dc0c899e1571596205f29fcc35cd6">time.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/move_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/move_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/move_8h.html	(revision 62)
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: move.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>move.h File Reference</h1>Contains definitions for controlling robot motion. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="move_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga02f16883c5ce325e2dbb8c3835aa9a1"></a><!-- doxytag: member="move.h::FWD" ref="ga02f16883c5ce325e2dbb8c3835aa9a1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#ga02f16883c5ce325e2dbb8c3835aa9a1">FWD</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move forwards. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb8d9d2e1ff6a03ce3b45a32e0002a405"></a><!-- doxytag: member="move.h::BCK" ref="gb8d9d2e1ff6a03ce3b45a32e0002a405" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gb8d9d2e1ff6a03ce3b45a32e0002a405">BCK</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move backwards. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gff79b776dbd665d08a0cfcb4c2931c98"></a><!-- doxytag: member="move.h::SLOW_SPD" ref="gff79b776dbd665d08a0cfcb4c2931c98" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gff79b776dbd665d08a0cfcb4c2931c98">SLOW_SPD</a>&nbsp;&nbsp;&nbsp;96</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A slow speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga0dd7c6a61a43fb8a3698988c414a9bf"></a><!-- doxytag: member="move.h::HALF_SPD" ref="ga0dd7c6a61a43fb8a3698988c414a9bf" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#ga0dd7c6a61a43fb8a3698988c414a9bf">HALF_SPD</a>&nbsp;&nbsp;&nbsp;128</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Half of the full speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gab20a9de15efe0d1b5599a3dd2ae9fea"></a><!-- doxytag: member="move.h::NRML_SPD" ref="gab20a9de15efe0d1b5599a3dd2ae9fea" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gab20a9de15efe0d1b5599a3dd2ae9fea">NRML_SPD</a>&nbsp;&nbsp;&nbsp;160</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A normal speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga1f2e117ff854d46ca84f16a1eb8419a"></a><!-- doxytag: member="move.h::FAST_SPD" ref="ga1f2e117ff854d46ca84f16a1eb8419a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#ga1f2e117ff854d46ca84f16a1eb8419a">FAST_SPD</a>&nbsp;&nbsp;&nbsp;192</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A fast speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g35819c1d24f97763dab51cd367514443"></a><!-- doxytag: member="move.h::FULL_SPD" ref="g35819c1d24f97763dab51cd367514443" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g35819c1d24f97763dab51cd367514443">FULL_SPD</a>&nbsp;&nbsp;&nbsp;255</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">The maximum speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4e9e38cfcdb9bfd0f80c69a574301731"></a><!-- doxytag: member="move.h::SLOW_TURN" ref="g4e9e38cfcdb9bfd0f80c69a574301731" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g4e9e38cfcdb9bfd0f80c69a574301731">SLOW_TURN</a>&nbsp;&nbsp;&nbsp;64</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A slow turning speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdfc67eeed7b52f97b8483af04e27a9ce"></a><!-- doxytag: member="move.h::NRML_TURN" ref="gdfc67eeed7b52f97b8483af04e27a9ce" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gdfc67eeed7b52f97b8483af04e27a9ce">NRML_TURN</a>&nbsp;&nbsp;&nbsp;96</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A medium turning speed. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb900792066abf52697bd19cc5240ae24"></a><!-- doxytag: member="move.h::FAST_TURN" ref="gb900792066abf52697bd19cc5240ae24" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#gb900792066abf52697bd19cc5240ae24">FAST_TURN</a>&nbsp;&nbsp;&nbsp;128</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A high turning speed. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g4e27eab618b1d874ff25fd2b2a65493b">move</a> (int velocity, int omega)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move the robot at the specified velocity.  <a href="group__move.html#g4e27eab618b1d874ff25fd2b2a65493b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__move.html#g8e79749d6af4a0aa12aceee41ad62ebd">move_avoid</a> (int velocity, int omega, int strength)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Move the robot while avoiding obstacles.  <a href="group__move.html#g8e79749d6af4a0aa12aceee41ad62ebd"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains definitions for controlling robot motion. 
+<p>
+This file offers higher-level functions for robot motion.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x66.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x66.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x66.html	(revision 62)
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li id="current"><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>F4
+: <a class="el" href="group__buzzer.html#g7fd7918aa90b0ce1dc7ca9fe7a00e9fb">buzzer.h</a><li>F4s
+: <a class="el" href="group__buzzer.html#g93ff98890b28a2833f1152cc95c3e628">buzzer.h</a><li>FAST_SPD
+: <a class="el" href="group__move.html#ga1f2e117ff854d46ca84f16a1eb8419a">move.h</a><li>FAST_TURN
+: <a class="el" href="group__move.html#gb900792066abf52697bd19cc5240ae24">move.h</a><li>FORWARD
+: <a class="el" href="group__motors.html#g6ddfdda7a062d10cff4a72b76b44aeb8">motor.h</a><li>FOUR_SECOND
+: <a class="el" href="group__time.html#g335312d1eed285bbc48a7f383ad78d97">time.h</a><li>FULL_SPD
+: <a class="el" href="group__move.html#g35819c1d24f97763dab51cd367514443">move.h</a><li>FWD
+: <a class="el" href="group__move.html#ga02f16883c5ce325e2dbb8c3835aa9a1">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/modules.html
===================================================================
--- branches/charge_board/docs/libdragonfly/modules.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/modules.html	(revision 62)
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Module Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li id="current"><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>libdragonfly Modules</h1>Here is a list of all modules:<ul>
+<li><a class="el" href="group__analog.html">Analog</a>
+<li><a class="el" href="group__battery.html">Battery</a>
+<li><a class="el" href="group__bom.html">BOM (Bearing and Orientation Module)</a>
+<li><a class="el" href="group__buzzer.html">Buzzer</a>
+<li><a class="el" href="group__dio.html">Digital Input / Output</a>
+<li><a class="el" href="group__dragonfly.html">Dragonfly</a>
+<li><a class="el" href="group__lcd.html">LCD</a>
+<li><a class="el" href="group__orbs.html">Orbs</a>
+<li><a class="el" href="group__motors.html">Motors</a>
+<li><a class="el" href="group__move.html">Movement</a>
+<li><a class="el" href="group__rangefinder.html">Rangefinder</a>
+<li><a class="el" href="group__usb.html">USB Input / Output</a>
+<li><a class="el" href="group__xbee.html">XBee Input / Output</a>
+<li><a class="el" href="group__time.html">Time</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/tab_b.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libdragonfly/tab_b.gif
===================================================================
--- branches/charge_board/docs/libdragonfly/tab_b.gif	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/tab_b.gif	(revision 62)

Property changes on: branches/charge_board/docs/libdragonfly/tab_b.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x68.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x68.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x68.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li id="current"><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>HALF_SECOND
+: <a class="el" href="group__time.html#gf95f27544f39827250d6bef6fa5fe18e">time.h</a><li>HALF_SPD
+: <a class="el" href="group__move.html#ga0dd7c6a61a43fb8a3698988c414a9bf">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x78.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x78.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x78.html	(revision 62)
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li id="current"><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>XBEE_BAUD
+: <a class="el" href="group__xbee.html#g7125fc8f3df24a2db8e074983206b054">serial.h</a><li>xbee_getc()
+: <a class="el" href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88">serial.h</a><li>xbee_getc_nb()
+: <a class="el" href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2">serial.h</a><li>xbee_init()
+: <a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">serial.h</a><li>xbee_putc()
+: <a class="el" href="group__xbee.html#g70c6b231330312d4f69b9a8afb5af989">serial.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/battery_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/battery_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/battery_8h.html	(revision 62)
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: battery.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>battery.h File Reference</h1>Definitions for checking battery voltage. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="battery_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8d3e83b7f2ff00064ba16519d1589cfd"></a><!-- doxytag: member="battery.h::BATTERY_NORMALV" ref="g8d3e83b7f2ff00064ba16519d1589cfd" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g8d3e83b7f2ff00064ba16519d1589cfd">BATTERY_NORMALV</a>&nbsp;&nbsp;&nbsp;154</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Normal battery voltage. (6 V). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc955a8295474a62e5faeaf28abf89c6b"></a><!-- doxytag: member="battery.h::BATTERY_CHARINGV" ref="gc955a8295474a62e5faeaf28abf89c6b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#gc955a8295474a62e5faeaf28abf89c6b">BATTERY_CHARINGV</a>&nbsp;&nbsp;&nbsp;179</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Charging battery voltage. (7 V). <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb23d2e4155f65f05628d1b48430c6b18"></a><!-- doxytag: member="battery.h::BATTERY_LOWV" ref="gb23d2e4155f65f05628d1b48430c6b18" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#gb23d2e4155f65f05628d1b48430c6b18">BATTERY_LOWV</a>&nbsp;&nbsp;&nbsp;152</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Low battery voltage. ( &lt; 6 V). <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#ga17c87ea3dd1f7539005ac596efe1b32">battery8</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the battery voltage.  <a href="group__battery.html#ga17c87ea3dd1f7539005ac596efe1b32"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g538631dcf134d98d7301d800a744e4d9">battery</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the battery voltage in deciVolts.  <a href="group__battery.html#g538631dcf134d98d7301d800a744e4d9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">char&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g4febf636fecb12a276edb51f5b9cc61e">battery_low</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if the battery is low.  <a href="group__battery.html#g4febf636fecb12a276edb51f5b9cc61e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__battery.html#g431bfea596da03bdeead863b16e0c37a">battery8_avg</a> (int n_samples)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">get an average battery voltage reading.  <a href="group__battery.html#g431bfea596da03bdeead863b16e0c37a"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Definitions for checking battery voltage. 
+<p>
+Contains definitions for checking the voltage of the battery.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/bom_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/bom_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/bom_8h.html	(revision 62)
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: bom.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>bom.h File Reference</h1>Definitions for using the BOM. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="bom_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bom.html#g86753fe7440cd64e60c58ad31c62264a">get_max_bom</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the location of the maximum BOM reading.  <a href="group__bom.html#g86753fe7440cd64e60c58ad31c62264a"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bom.html#g93b665ff81fc6b58503c6ba5ba01c1bf">bom_on</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turns the BOM on.  <a href="group__bom.html#g93b665ff81fc6b58503c6ba5ba01c1bf"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__bom.html#g61a66e53cdee8bce139c707153143b30">bom_off</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turns the BOM off.  <a href="group__bom.html#g61a66e53cdee8bce139c707153143b30"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Definitions for using the BOM. 
+<p>
+This file contains definitions for using the Bearing and Orientation Module (BOM).<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/tab_l.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libdragonfly/tab_l.gif
===================================================================
--- branches/charge_board/docs/libdragonfly/tab_l.gif	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/tab_l.gif	(revision 62)

Property changes on: branches/charge_board/docs/libdragonfly/tab_l.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libdragonfly/rangefinder_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/rangefinder_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/rangefinder_8h.html	(revision 62)
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: rangefinder.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>rangefinder.h File Reference</h1>Contains rangefinder declarations and functions. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="rangefinder_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7b2b32709f9770a283701ffcf3723497"></a><!-- doxytag: member="rangefinder.h::IR1" ref="g7b2b32709f9770a283701ffcf3723497" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g7b2b32709f9770a283701ffcf3723497">IR1</a>&nbsp;&nbsp;&nbsp;6</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5a08e4f5cb3582e623cc14a6c92d48de"></a><!-- doxytag: member="rangefinder.h::IR2" ref="g5a08e4f5cb3582e623cc14a6c92d48de" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g5a08e4f5cb3582e623cc14a6c92d48de">IR2</a>&nbsp;&nbsp;&nbsp;5</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g26c72d21cca0ec21af4bd9b20ba3ad51"></a><!-- doxytag: member="rangefinder.h::IR3" ref="g26c72d21cca0ec21af4bd9b20ba3ad51" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g26c72d21cca0ec21af4bd9b20ba3ad51">IR3</a>&nbsp;&nbsp;&nbsp;4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20f2f5908baa0eeba04b9ceaf718cea0"></a><!-- doxytag: member="rangefinder.h::IR4" ref="g20f2f5908baa0eeba04b9ceaf718cea0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g20f2f5908baa0eeba04b9ceaf718cea0">IR4</a>&nbsp;&nbsp;&nbsp;3</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g23554754d5334bdc35df623e1e012ede"></a><!-- doxytag: member="rangefinder.h::IR5" ref="g23554754d5334bdc35df623e1e012ede" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g23554754d5334bdc35df623e1e012ede">IR5</a>&nbsp;&nbsp;&nbsp;2</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 5. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g52d0666b725e6d3a14b5bddc28190e59">range_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the rangefinders.  <a href="group__rangefinder.html#g52d0666b725e6d3a14b5bddc28190e59"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g22bd0717784e34cb3a0762d78554dcf2">range_read_distance</a> (int range_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the distance from a rangefinder.  <a href="group__rangefinder.html#g22bd0717784e34cb3a0762d78554dcf2"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains rangefinder declarations and functions. 
+<p>
+Contains functions and definitions for the use of IR rangefinders.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x6c.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x6c.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x6c.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li id="current"><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LCD
+: <a class="el" href="group__dragonfly.html#gbf2d80992dcfabfd1668184c3dff2733">dragonfly_lib.h</a><li>LIME
+: <a class="el" href="group__orbs.html#g46019a1f2c10603a54b6cbb19cbf3c21">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs.html	(revision 62)
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index__">- _ -</a></h3><ul>
+<li>_PIN_A0
+: <a class="el" href="dio_8h.html#51f04ff9f4fb24a6be30c56ce6f40693">dio.h</a><li>_PIN_A1
+: <a class="el" href="dio_8h.html#4eb14fd2e59584018694829c303f917d">dio.h</a><li>_PIN_A2
+: <a class="el" href="dio_8h.html#8addc957193d67ec0456ca4b91e6348a">dio.h</a><li>_PIN_A3
+: <a class="el" href="dio_8h.html#d542d3d032328a77644041b683263b60">dio.h</a><li>_PIN_A4
+: <a class="el" href="dio_8h.html#939eb745c1abd8ad357cbc7949071391">dio.h</a><li>_PIN_A5
+: <a class="el" href="dio_8h.html#92c23c5ef5f0909f7252d46dee64f556">dio.h</a><li>_PIN_A6
+: <a class="el" href="dio_8h.html#6b3bddc004c965e7425d85bf26b749dc">dio.h</a><li>_PIN_A7
+: <a class="el" href="dio_8h.html#c446f59a98dfb4a0668306f57bd1ecca">dio.h</a><li>_PIN_ALE
+: <a class="el" href="dio_8h.html#b01e62102c2ea92ef5e6ddd4c8b10e7d">dio.h</a><li>_PIN_B0
+: <a class="el" href="dio_8h.html#b4f305294f28e717999cef139b7caab0">dio.h</a><li>_PIN_B1
+: <a class="el" href="dio_8h.html#bfe495b8eb044c08d0847c7d4043ea4f">dio.h</a><li>_PIN_B2
+: <a class="el" href="dio_8h.html#fbe373570755ea8d3180703632224896">dio.h</a><li>_PIN_B3
+: <a class="el" href="dio_8h.html#a760d7cb45c90094702c296999558f65">dio.h</a><li>_PIN_B4
+: <a class="el" href="dio_8h.html#76ae9cc1b2c74f451ab638371285f18d">dio.h</a><li>_PIN_B5
+: <a class="el" href="dio_8h.html#0fae583ff609c0543c9d8c1dab7e378d">dio.h</a><li>_PIN_B6
+: <a class="el" href="dio_8h.html#4c2e6bdc02d9672de3795f3bbb3670b9">dio.h</a><li>_PIN_B7
+: <a class="el" href="dio_8h.html#8415309f27a757e7c551906194c28e80">dio.h</a><li>_PIN_C0
+: <a class="el" href="dio_8h.html#8b117e9361a991638bd82eea83ff001a">dio.h</a><li>_PIN_C1
+: <a class="el" href="dio_8h.html#0c45f79d733ffbbbd7de2056893d6eb1">dio.h</a><li>_PIN_C2
+: <a class="el" href="dio_8h.html#c01a3878ceb5a63e961bf3a305e74a06">dio.h</a><li>_PIN_C3
+: <a class="el" href="dio_8h.html#bd8e9c9599a4c5f2c1571298b29d44bf">dio.h</a><li>_PIN_C4
+: <a class="el" href="dio_8h.html#888ab2bc04575f1902e75398fb2843b4">dio.h</a><li>_PIN_C5
+: <a class="el" href="dio_8h.html#e2c922d0d623cce421470e501b5cd01d">dio.h</a><li>_PIN_C6
+: <a class="el" href="dio_8h.html#de6c0b894acec113cc6e83ddf1c6f4ad">dio.h</a><li>_PIN_C7
+: <a class="el" href="dio_8h.html#94fc1c3551e878d00670be18dd98b01e">dio.h</a><li>_PIN_D0
+: <a class="el" href="dio_8h.html#4b95d04e9712921644d2c9daca838ae1">dio.h</a><li>_PIN_D1
+: <a class="el" href="dio_8h.html#e284f5774e84fe78764b3475a1ab7df3">dio.h</a><li>_PIN_D2
+: <a class="el" href="dio_8h.html#bb9448fbe6bc6dcd64e35d7ffa00ca6d">dio.h</a><li>_PIN_D3
+: <a class="el" href="dio_8h.html#e0acf61952e589ddc79359cc418eec17">dio.h</a><li>_PIN_D4
+: <a class="el" href="dio_8h.html#2b237cd474a817c15832fd87146e6daa">dio.h</a><li>_PIN_D5
+: <a class="el" href="dio_8h.html#70a748f97c4d4e751f2edd0fcbac4a7c">dio.h</a><li>_PIN_D6
+: <a class="el" href="dio_8h.html#8a2da262330ccf12ac69a1822d3c091c">dio.h</a><li>_PIN_D7
+: <a class="el" href="dio_8h.html#fc098c404f6e3003aef2ec0e0bc35acd">dio.h</a><li>_PIN_E0
+: <a class="el" href="dio_8h.html#badf190bc1c23be12590868584135c22">dio.h</a><li>_PIN_E1
+: <a class="el" href="dio_8h.html#e88599fd3bd196eacb91052ea05e18f3">dio.h</a><li>_PIN_E2
+: <a class="el" href="dio_8h.html#62122fe3a2b5d08d964a2178e4015e79">dio.h</a><li>_PIN_E3
+: <a class="el" href="dio_8h.html#e93d87d0523dfbb446a5909254f0ef2c">dio.h</a><li>_PIN_E4
+: <a class="el" href="dio_8h.html#6859b74122e7d105fe3dd380b6763aca">dio.h</a><li>_PIN_E5
+: <a class="el" href="dio_8h.html#19a858b324d285b261caa831df84d32f">dio.h</a><li>_PIN_E6
+: <a class="el" href="dio_8h.html#04723017fa82410249e3e6393bca65af">dio.h</a><li>_PIN_E7
+: <a class="el" href="dio_8h.html#5eb34c0e8ea6af1b8bbd3cbd8a92a600">dio.h</a><li>_PIN_F0
+: <a class="el" href="dio_8h.html#da61cdc73ca993fd5f450183862fcef1">dio.h</a><li>_PIN_F1
+: <a class="el" href="dio_8h.html#c0d7ed715f7b6982b94a0f791d62915b">dio.h</a><li>_PIN_F2
+: <a class="el" href="dio_8h.html#91e39e9f2da5ec9515e7d961a058e069">dio.h</a><li>_PIN_F3
+: <a class="el" href="dio_8h.html#847601cd0a3a8830bc38a9eef0b0d6a5">dio.h</a><li>_PIN_F4
+: <a class="el" href="dio_8h.html#81722f76eb8b39d3f3f5678526e918c6">dio.h</a><li>_PIN_F5
+: <a class="el" href="dio_8h.html#6655e7450006cec34ac55a0e7d63f0cd">dio.h</a><li>_PIN_F6
+: <a class="el" href="dio_8h.html#6b042b1d986784315b7d1780af4e6325">dio.h</a><li>_PIN_F7
+: <a class="el" href="dio_8h.html#cd2cf9c19a99cb3b883d44ddb8841aa6">dio.h</a><li>_PIN_G0
+: <a class="el" href="dio_8h.html#67a762a16abd40507f84d45a1cc8fc60">dio.h</a><li>_PIN_G1
+: <a class="el" href="dio_8h.html#cd22478361f403160ac78b6673bc1cc8">dio.h</a><li>_PIN_G2
+: <a class="el" href="dio_8h.html#d15640b2580aa575af9b4b3afb66d69e">dio.h</a><li>_PIN_G3
+: <a class="el" href="dio_8h.html#b68ee88c80780acce271541468b57b01">dio.h</a><li>_PIN_G4
+: <a class="el" href="dio_8h.html#8098eb56320b9f65520da4f3034168d8">dio.h</a><li>_PIN_RD
+: <a class="el" href="dio_8h.html#35b975ca202c33953772138fbe9987a1">dio.h</a><li>_PIN_TOSC1
+: <a class="el" href="dio_8h.html#4658177abc8db29571f67e68f50d5591">dio.h</a><li>_PIN_TOSC2
+: <a class="el" href="dio_8h.html#1a989f2be615fdbb5d539c803ae85052">dio.h</a><li>_PIN_WR
+: <a class="el" href="dio_8h.html#1457bcf9a22d249b4907d0bdc6661e6f">dio.h</a><li>_PORT_A
+: <a class="el" href="dio_8h.html#c03b8868a83d44a9b97de1cc0d7fe8e8">dio.h</a><li>_PORT_B
+: <a class="el" href="dio_8h.html#da0ad7242f65b61351de29531659aaf3">dio.h</a><li>_PORT_C
+: <a class="el" href="dio_8h.html#2f5cd37fd5831a67953d155ec3624187">dio.h</a><li>_PORT_D
+: <a class="el" href="dio_8h.html#881c4ea9fdae76401a4005981f40887e">dio.h</a><li>_PORT_E
+: <a class="el" href="dio_8h.html#48bd3d9b9db9d872bbdf4579864a6cba">dio.h</a><li>_PORT_F
+: <a class="el" href="dio_8h.html#7f0278fc6e55e8e8a6f63c944e9779bd">dio.h</a><li>_PORT_G
+: <a class="el" href="dio_8h.html#7c0f589b48ebb00d7a998ac3daaac11a">dio.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x6e.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x6e.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x6e.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li id="current"><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>NRML_SPD
+: <a class="el" href="group__move.html#gab20a9de15efe0d1b5599a3dd2ae9fea">move.h</a><li>NRML_TURN
+: <a class="el" href="group__move.html#gdfc67eeed7b52f97b8483af04e27a9ce">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/tab_r.gif
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/libdragonfly/tab_r.gif
===================================================================
--- branches/charge_board/docs/libdragonfly/tab_r.gif	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/tab_r.gif	(revision 62)

Property changes on: branches/charge_board/docs/libdragonfly/tab_r.gif
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/libdragonfly/lights_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/lights_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/lights_8h.html	(revision 62)
@@ -0,0 +1,112 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: lights.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>lights.h File Reference</h1>Contains declarations for managing the orbs. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="lights_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8d23feea868a983c8c2b661e1e16972f"></a><!-- doxytag: member="lights.h::RED" ref="g8d23feea868a983c8c2b661e1e16972f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g8d23feea868a983c8c2b661e1e16972f">RED</a>&nbsp;&nbsp;&nbsp;0xE0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Red. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc5b6e19bf06822021f35602c59658de3"></a><!-- doxytag: member="lights.h::ORANGE" ref="gc5b6e19bf06822021f35602c59658de3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gc5b6e19bf06822021f35602c59658de3">ORANGE</a>&nbsp;&nbsp;&nbsp;0xE4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Orange. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbf681265909adf3d3e8116c93c0ba179"></a><!-- doxytag: member="lights.h::YELLOW" ref="gbf681265909adf3d3e8116c93c0ba179" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gbf681265909adf3d3e8116c93c0ba179">YELLOW</a>&nbsp;&nbsp;&nbsp;0xE8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Yellow. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g46019a1f2c10603a54b6cbb19cbf3c21"></a><!-- doxytag: member="lights.h::LIME" ref="g46019a1f2c10603a54b6cbb19cbf3c21" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g46019a1f2c10603a54b6cbb19cbf3c21">LIME</a>&nbsp;&nbsp;&nbsp;0x68</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lime. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcfbc006ea433ad708fdee3e82996e721"></a><!-- doxytag: member="lights.h::GREEN" ref="gcfbc006ea433ad708fdee3e82996e721" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gcfbc006ea433ad708fdee3e82996e721">GREEN</a>&nbsp;&nbsp;&nbsp;0x1C</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Green. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd243f93c16bc4c1d3e0a13b84421d760"></a><!-- doxytag: member="lights.h::CYAN" ref="gd243f93c16bc4c1d3e0a13b84421d760" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gd243f93c16bc4c1d3e0a13b84421d760">CYAN</a>&nbsp;&nbsp;&nbsp;0x1F</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cyan. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g79d10e672abb49ad63eeaa8aaef57c38"></a><!-- doxytag: member="lights.h::BLUE" ref="g79d10e672abb49ad63eeaa8aaef57c38" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g79d10e672abb49ad63eeaa8aaef57c38">BLUE</a>&nbsp;&nbsp;&nbsp;0x03</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Blue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gda419fe3b48fcf19daed7cc57ccf1174"></a><!-- doxytag: member="lights.h::PINK" ref="gda419fe3b48fcf19daed7cc57ccf1174" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gda419fe3b48fcf19daed7cc57ccf1174">PINK</a>&nbsp;&nbsp;&nbsp;0xA6</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pink. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0bb0b009e7a7390473ace4d98bd843c0"></a><!-- doxytag: member="lights.h::PURPLE" ref="g0bb0b009e7a7390473ace4d98bd843c0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g0bb0b009e7a7390473ace4d98bd843c0">PURPLE</a>&nbsp;&nbsp;&nbsp;0x41</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Purple. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6f699060902f800f12aaae150f3a708e"></a><!-- doxytag: member="lights.h::MAGENTA" ref="g6f699060902f800f12aaae150f3a708e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g6f699060902f800f12aaae150f3a708e">MAGENTA</a>&nbsp;&nbsp;&nbsp;0xE3</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Magenta. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g87b537f5fa5c109d3c05c13d6b18f382"></a><!-- doxytag: member="lights.h::WHITE" ref="g87b537f5fa5c109d3c05c13d6b18f382" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g87b537f5fa5c109d3c05c13d6b18f382">WHITE</a>&nbsp;&nbsp;&nbsp;0xFE</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">White. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcf2f6da92d895ef5e594223f1e39e4b1"></a><!-- doxytag: member="lights.h::ORB_OFF" ref="gcf2f6da92d895ef5e594223f1e39e4b1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gcf2f6da92d895ef5e594223f1e39e4b1">ORB_OFF</a>&nbsp;&nbsp;&nbsp;0xFE</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turn the orb off (White). <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables the orbs.  <a href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#ga75385bd1398949615ee1fe78a535cff">orb_set</a> (unsigned char red_led, unsigned char green_led, unsigned char blue_led)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set both orbs to a specified color.  <a href="group__orbs.html#ga75385bd1398949615ee1fe78a535cff"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g2df1397345a557295b12e50451f8592e">orb1_set</a> (unsigned char red_led, unsigned char green_led, unsigned char blue_led)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb1 to a specified color.  <a href="group__orbs.html#g2df1397345a557295b12e50451f8592e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gb19679987f51d6ed35461d581ca8972b">orb2_set</a> (unsigned char red_led, unsigned char green_led, unsigned char blue_led)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb2 to a specified color.  <a href="group__orbs.html#gb19679987f51d6ed35461d581ca8972b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g123d2880d20bf6d0bb387024c8f6da81">orb_set_color</a> (int col)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set both orbs to a specified color.  <a href="group__orbs.html#g123d2880d20bf6d0bb387024c8f6da81"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g131d9bf3e32cf5530f4cc671ea496609">orb1_set_color</a> (int col)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb1 to a specified color.  <a href="group__orbs.html#g131d9bf3e32cf5530f4cc671ea496609"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g3125d9c661a33b3fdeb4eca75ca00cab">orb2_set_color</a> (int col)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb2 to a specified color.  <a href="group__orbs.html#g3125d9c661a33b3fdeb4eca75ca00cab"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g1ea1b363a0592f80798f6a1e260a70e9">orb_disable</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disable the orbs.  <a href="group__orbs.html#g1ea1b363a0592f80798f6a1e260a70e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g5911e3fa322de2e760a92a44d5a6a547">orb_enable</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enable the orbs.  <a href="group__orbs.html#g5911e3fa322de2e760a92a44d5a6a547"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains declarations for managing the orbs. 
+<p>
+Contains declarations for using the orbs and PWM.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club Based on Firefly Library, by Tom Lauwers and Steven Shamlian </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/time_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/time_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/time_8h-source.html	(revision 62)
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: time.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>time.h</h1><a href="time_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef _TIME_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define _TIME_H_</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00014"></a>00014 <span class="comment">/*      Predefined times for prescale_opt in time.c.</span>
+<a name="l00015"></a>00015 <span class="comment">        To make you own, know that a pulse is 1/16th of a second. You cannot get less than this. To get more, you need</span>
+<a name="l00016"></a>00016 <span class="comment">        to know how many 16ths of a second are in the time you want. (Time_desired * 16 = prescaler_opt)</span>
+<a name="l00017"></a>00017 <span class="comment">*/</span>
+<a name="l00023"></a><a class="code" href="group__time.html#gd271145628da4e0e85e3e2486d117713">00023</a> <span class="preprocessor">#define SIXTEENTH_SECOND 1</span>
+<a name="l00024"></a>00024 <span class="preprocessor"></span>
+<a name="l00025"></a><a class="code" href="group__time.html#g7bdae984203001070e9abeb3190f844a">00025</a> <span class="preprocessor">#define EIGTH_SECOND 2</span>
+<a name="l00026"></a>00026 <span class="preprocessor"></span>
+<a name="l00027"></a><a class="code" href="group__time.html#g0b2a348d9afca1f1182bc2bb2aa6a3d1">00027</a> <span class="preprocessor">#define QUARTER_SECOND 4</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a><a class="code" href="group__time.html#gf95f27544f39827250d6bef6fa5fe18e">00029</a> <span class="preprocessor">#define HALF_SECOND     8</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span>
+<a name="l00031"></a><a class="code" href="group__time.html#g94212be2394d2d37d9dfd33d07d82dba">00031</a> <span class="preprocessor">#define SECOND 16</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span>
+<a name="l00033"></a><a class="code" href="group__time.html#g4c2dc0c899e1571596205f29fcc35cd6">00033</a> <span class="preprocessor">#define TWO_SECOND 32</span>
+<a name="l00034"></a>00034 <span class="preprocessor"></span>
+<a name="l00035"></a><a class="code" href="group__time.html#g335312d1eed285bbc48a7f383ad78d97">00035</a> <span class="preprocessor">#define FOUR_SECOND 64</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00038"></a>00038 <span class="keywordtype">void</span> <a class="code" href="group__time.html#g8aa473f8ae9a91df4bc9ea700983c72d">delay_ms</a>(<span class="keywordtype">int</span> ms) ;
+<a name="l00040"></a>00040 <span class="keywordtype">void</span> <a class="code" href="group__time.html#g4b8a034dd8e994f4a1af612806f7c553">rtc_init</a>(<span class="keywordtype">int</span> prescale_opt, <span class="keywordtype">void</span> (*rtc_func)(<span class="keywordtype">void</span>));
+<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="group__time.html#g83ae542199d1c0e964aff89537d686a3">rtc_reset</a>(<span class="keywordtype">void</span>);
+<a name="l00044"></a>00044 <span class="keywordtype">int</span> <a class="code" href="group__time.html#g5c7f2bf39314463dd5f4913e05ca991d">rtc_get</a>(<span class="keywordtype">void</span>);
+<a name="l00045"></a>00045 
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__buzzer.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__buzzer.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__buzzer.html	(revision 62)
@@ -0,0 +1,278 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Buzzer</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Buzzer</h1>Functions for controlling the buzzer. Functions for controlling the buzzer. Include <a class="el" href="buzzer_8h.html">buzzer.h</a> to access these functions.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcc39015f57b2efb8810b603f188bdf15"></a><!-- doxytag: member="buzzer::C4" ref="gcc39015f57b2efb8810b603f188bdf15" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#gcc39015f57b2efb8810b603f188bdf15">C4</a>&nbsp;&nbsp;&nbsp;260</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Middle C. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g879790f58417f0986370ddbcda404ed0"></a><!-- doxytag: member="buzzer::C4s" ref="g879790f58417f0986370ddbcda404ed0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g879790f58417f0986370ddbcda404ed0">C4s</a>&nbsp;&nbsp;&nbsp;277</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">C#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3d9bb178282c3cb69740c94ba1e48fed"></a><!-- doxytag: member="buzzer::D4" ref="g3d9bb178282c3cb69740c94ba1e48fed" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g3d9bb178282c3cb69740c94ba1e48fed">D4</a>&nbsp;&nbsp;&nbsp;294</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">D. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g33eb0561dd16dd44c7c23519dd22540a"></a><!-- doxytag: member="buzzer::D4s" ref="g33eb0561dd16dd44c7c23519dd22540a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g33eb0561dd16dd44c7c23519dd22540a">D4s</a>&nbsp;&nbsp;&nbsp;311</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">D#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4c819074c856b4e67fad4875a92cb2e9"></a><!-- doxytag: member="buzzer::E4" ref="g4c819074c856b4e67fad4875a92cb2e9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g4c819074c856b4e67fad4875a92cb2e9">E4</a>&nbsp;&nbsp;&nbsp;330</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">E. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7fd7918aa90b0ce1dc7ca9fe7a00e9fb"></a><!-- doxytag: member="buzzer::F4" ref="g7fd7918aa90b0ce1dc7ca9fe7a00e9fb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g7fd7918aa90b0ce1dc7ca9fe7a00e9fb">F4</a>&nbsp;&nbsp;&nbsp;349</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">F. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g93ff98890b28a2833f1152cc95c3e628"></a><!-- doxytag: member="buzzer::F4s" ref="g93ff98890b28a2833f1152cc95c3e628" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g93ff98890b28a2833f1152cc95c3e628">F4s</a>&nbsp;&nbsp;&nbsp;370</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">F#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6f984a8b01aafc34122cc8bc0d9d5691"></a><!-- doxytag: member="buzzer::G4" ref="g6f984a8b01aafc34122cc8bc0d9d5691" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g6f984a8b01aafc34122cc8bc0d9d5691">G4</a>&nbsp;&nbsp;&nbsp;392</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">G. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gaf8daa589f172256505e028dab2954b2"></a><!-- doxytag: member="buzzer::G4s" ref="gaf8daa589f172256505e028dab2954b2" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#gaf8daa589f172256505e028dab2954b2">G4s</a>&nbsp;&nbsp;&nbsp;415</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">G#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga0a03ad95ca0cb887a11e321fa1c9519"></a><!-- doxytag: member="buzzer::A4" ref="ga0a03ad95ca0cb887a11e321fa1c9519" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#ga0a03ad95ca0cb887a11e321fa1c9519">A4</a>&nbsp;&nbsp;&nbsp;440</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7063c01bf1877119a8aca7049e02a8cb"></a><!-- doxytag: member="buzzer::A4s" ref="g7063c01bf1877119a8aca7049e02a8cb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g7063c01bf1877119a8aca7049e02a8cb">A4s</a>&nbsp;&nbsp;&nbsp;466</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0bf59f84e29fb57d27314583365a88d6"></a><!-- doxytag: member="buzzer::B4" ref="g0bf59f84e29fb57d27314583365a88d6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g0bf59f84e29fb57d27314583365a88d6">B4</a>&nbsp;&nbsp;&nbsp;494</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">B. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3b69b61d9deb37b13911faf2cf5cf1d5"></a><!-- doxytag: member="buzzer::C5" ref="g3b69b61d9deb37b13911faf2cf5cf1d5" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g3b69b61d9deb37b13911faf2cf5cf1d5">C5</a>&nbsp;&nbsp;&nbsp;523</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">C. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the buzzer.  <a href="#g0cead532fdd0c0de5fa1c1de0f6556bd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g9872f05325dd86a89728d47c8e9158ab">buzzer_set_val</a> (unsigned int buzz_value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the value the buzzer plays.  <a href="#g9872f05325dd86a89728d47c8e9158ab"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#ga0aba85b0044cb1a44bb28c675d7c193">buzzer_set_freq</a> (unsigned int buzz_freq)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the frequency the buzzer plays.  <a href="#ga0aba85b0044cb1a44bb28c675d7c193"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#ga78239c1255dfea31992f435659df1d7">buzzer_chirp</a> (unsigned int ms, unsigned int buzz_freq)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Play a frequency for a specified time.  <a href="#ga78239c1255dfea31992f435659df1d7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g93d07c81691fec7a85ea85117d6eca4f">buzzer_off</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turn the buzzer off.  <a href="#g93d07c81691fec7a85ea85117d6eca4f"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for controlling the buzzer. Functions for controlling the buzzer. Include <a class="el" href="buzzer_8h.html">buzzer.h</a> to access these functions. 
+<p>
+<hr><h2>Function Documentation</h2>
+<a class="anchor" name="ga78239c1255dfea31992f435659df1d7"></a><!-- doxytag: member="buzzer.c::buzzer_chirp" ref="ga78239c1255dfea31992f435659df1d7" args="(unsigned int ms, unsigned int buzz_freq)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void buzzer_chirp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>ms</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>buzz_freq</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Play a frequency for a specified time. 
+<p>
+Plays the specified frequency for the specified amount of time. This function blocks execution until the time is completed. buzzer_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ms</em>&nbsp;</td><td>the time in milliseconds to play the frequency </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buzz_freq</em>&nbsp;</td><td>the frequency to play</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a>, <a class="el" href="group__buzzer.html#ga0aba85b0044cb1a44bb28c675d7c193">buzzer_set_freq</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g0cead532fdd0c0de5fa1c1de0f6556bd"></a><!-- doxytag: member="buzzer.c::buzzer_init" ref="g0cead532fdd0c0de5fa1c1de0f6556bd" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void buzzer_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the buzzer. 
+<p>
+Initializes the buzzer. Must be called before any other buzzer function may be used.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g93d07c81691fec7a85ea85117d6eca4f"></a><!-- doxytag: member="buzzer.c::buzzer_off" ref="g93d07c81691fec7a85ea85117d6eca4f" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void buzzer_off           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Turn the buzzer off. 
+<p>
+Turns off the buzzer by disabling the timer0 clock.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="ga0aba85b0044cb1a44bb28c675d7c193"></a><!-- doxytag: member="buzzer.c::buzzer_set_freq" ref="ga0aba85b0044cb1a44bb28c675d7c193" args="(unsigned int buzz_freq)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void buzzer_set_freq           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>buzz_freq</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the frequency the buzzer plays. 
+<p>
+Sets the buzzer frequency. Usage of constants such as C4 is highly recommended as input to this function. buzzer_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buzz_freq</em>&nbsp;</td><td>the frequency to set the buzzer to</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a>, <a class="el" href="group__buzzer.html#g9872f05325dd86a89728d47c8e9158ab">buzzer_set_val</a>, <a class="el" href="group__buzzer.html#g93d07c81691fec7a85ea85117d6eca4f">buzzer_off</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g9872f05325dd86a89728d47c8e9158ab"></a><!-- doxytag: member="buzzer.c::buzzer_set_val" ref="g9872f05325dd86a89728d47c8e9158ab" args="(unsigned int buzz_value)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void buzzer_set_val           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>buzz_value</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set the value the buzzer plays. 
+<p>
+Sets the value of the buzzer's pitch. Higher values are lower frequencies.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buzz_value</em>&nbsp;</td><td>the value to set the buzzer's frequency too, in the range 0-255</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a>, <a class="el" href="group__buzzer.html#ga0aba85b0044cb1a44bb28c675d7c193">buzzer_set_freq</a>, <a class="el" href="group__buzzer.html#g93d07c81691fec7a85ea85117d6eca4f">buzzer_off</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_func.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_func.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_func.html	(revision 62)
@@ -0,0 +1,53 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li id="current"><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+&nbsp;
+<p>
+<ul>
+<li>button1_click()
+: <a class="el" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">dio.h</a><li>button1_read()
+: <a class="el" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">dio.h</a><li>button1_wait()
+: <a class="el" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">dio.h</a><li>button2_click()
+: <a class="el" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">dio.h</a><li>button2_read()
+: <a class="el" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">dio.h</a><li>button2_wait()
+: <a class="el" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">dio.h</a><li>digital_input()
+: <a class="el" href="group__dio.html#g6202143ed6d0f809095c21bfac32acdd">dio.h</a><li>digital_output()
+: <a class="el" href="group__dio.html#g67967857dcc26aeea8cdd0a53a9e138d">dio.h</a><li>digital_pull_up()
+: <a class="el" href="group__dio.html#g6bcadb9200f988ae733a51aa70467978">dio.h</a><li>usb_getc()
+: <a class="el" href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae">serial.h</a><li>usb_getc_nb()
+: <a class="el" href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c">serial.h</a><li>usb_init()
+: <a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">serial.h</a><li>usb_putc()
+: <a class="el" href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946">serial.h</a><li>usb_puti()
+: <a class="el" href="group__usb.html#gcd371dedbff10f0c52dca4b3b7af9e3d">serial.h</a><li>usb_puts()
+: <a class="el" href="group__usb.html#g6e101f68856f272f67923c4fb35a99e0">serial.h</a><li>xbee_getc()
+: <a class="el" href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88">serial.h</a><li>xbee_getc_nb()
+: <a class="el" href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2">serial.h</a><li>xbee_init()
+: <a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">serial.h</a><li>xbee_putc()
+: <a class="el" href="group__xbee.html#g70c6b231330312d4f69b9a8afb5af989">serial.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__xbee.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__xbee.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__xbee.html	(revision 62)
@@ -0,0 +1,182 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: XBee Input / Output</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>XBee Input / Output</h1>Functions for XBee input / output.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7125fc8f3df24a2db8e074983206b054"></a><!-- doxytag: member="xbee::XBEE_BAUD" ref="g7125fc8f3df24a2db8e074983206b054" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g7125fc8f3df24a2db8e074983206b054">XBEE_BAUD</a>&nbsp;&nbsp;&nbsp;9600</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the XBee baud rate <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">xbee_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the XBee.  <a href="#g964a1e8461e9c1187e5d69f521e5e107"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g70c6b231330312d4f69b9a8afb5af989">xbee_putc</a> (char c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a character to the XBee.  <a href="#g70c6b231330312d4f69b9a8afb5af989"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88">xbee_getc</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from the XBee.  <a href="#g1f468ae159ba5d97bdfb3f4855d15d88"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2">xbee_getc_nb</a> (char *c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from the XBee without blocking.  <a href="#gfb7bd5dd535e8251bfff78854c6c15f2"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for XBee input / output. 
+<p>
+Low level functions for XBee input and output. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g1f468ae159ba5d97bdfb3f4855d15d88"></a><!-- doxytag: member="serial.h::xbee_getc" ref="g1f468ae159ba5d97bdfb3f4855d15d88" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int xbee_getc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read a character from the XBee. 
+<p>
+Returns the first character in the buffer received from USB. This function blocks execution until a character has been received. xbee_init must be called before this function may be used.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the first character in the xbee buffer</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">xbee_init</a>, <a class="el" href="group__xbee.html#gfb7bd5dd535e8251bfff78854c6c15f2">xbee_getc_nb</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gfb7bd5dd535e8251bfff78854c6c15f2"></a><!-- doxytag: member="serial.h::xbee_getc_nb" ref="gfb7bd5dd535e8251bfff78854c6c15f2" args="(char *c)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int xbee_getc_nb           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>c</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read a character from the XBee without blocking. 
+<p>
+Non blocking version of xbee_getc. If a character is present in the buffer, it is returned, otherwise -1 is returned immediately. xbee_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>the received character. This will be set if a character has been received.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>-1 if no character is available, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__xbee.html#g964a1e8461e9c1187e5d69f521e5e107">xbee_init</a>, <a class="el" href="group__xbee.html#g1f468ae159ba5d97bdfb3f4855d15d88">xbee_getc</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g964a1e8461e9c1187e5d69f521e5e107"></a><!-- doxytag: member="serial.h::xbee_init" ref="g964a1e8461e9c1187e5d69f521e5e107" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void xbee_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the XBee. 
+<p>
+Initializes communication over the XBee. This must be called before any other xbee function may be used.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g70c6b231330312d4f69b9a8afb5af989"></a><!-- doxytag: member="serial.h::xbee_putc" ref="g70c6b231330312d4f69b9a8afb5af989" args="(char c)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int xbee_putc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>c</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Print a character to the XBee. 
+<p>
+Sends a character to the XBee.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>the character to send </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>0 for success, nonzero for failure </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/lcd_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/lcd_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/lcd_8h-source.html	(revision 62)
@@ -0,0 +1,35 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: lcd.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>lcd.h</h1><a href="lcd_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef _LCD_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define _LCD_H_</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00020"></a>00020 <span class="keywordtype">void</span> <a class="code" href="group__lcd.html#g6842775ba83d166f02b8fef8bb63b1e6">lcd_init</a>(<span class="keywordtype">void</span>);
+<a name="l00022"></a>00022 <span class="keywordtype">void</span> <a class="code" href="group__lcd.html#ge4dc23fdf26f3b8b0db253f431fe950d">lcd_clear_screen</a>( <span class="keywordtype">void</span> );
+<a name="l00024"></a>00024 <span class="keywordtype">void</span> <a class="code" href="group__lcd.html#gfa7e36b95c43d603f510273ad077cbbe">lcd_putc</a>(<span class="keywordtype">char</span> c);
+<a name="l00026"></a>00026 <span class="keywordtype">void</span> <a class="code" href="group__lcd.html#g58a42336a344165c54e8dd4a0d3f0e1c">lcd_puts</a>(<span class="keywordtype">char</span> *s);
+<a name="l00028"></a>00028 <span class="keywordtype">void</span> <a class="code" href="group__lcd.html#g0150085af3123e80303a3445821acb40">lcd_puti</a>(<span class="keywordtype">int</span> value);
+<a name="l00030"></a>00030 <span class="keywordtype">void</span> <a class="code" href="group__lcd.html#gac280d714190003871937d3d92af3a29">lcd_gotoxy</a>(<span class="keywordtype">int</span> x, <span class="keywordtype">int</span> y);
+<a name="l00031"></a>00031 
+<a name="l00034"></a>00034 <span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/motor_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/motor_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/motor_8h.html	(revision 62)
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: motor.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>motor.h File Reference</h1>Contains definitions for controlling the motors. <a href="#_details">More...</a>
+<p>
+<code>#include &lt;avr/io.h&gt;</code><br>
+
+<p>
+<a href="motor_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6ddfdda7a062d10cff4a72b76b44aeb8"></a><!-- doxytag: member="motor.h::FORWARD" ref="g6ddfdda7a062d10cff4a72b76b44aeb8" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g6ddfdda7a062d10cff4a72b76b44aeb8">FORWARD</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">make the motors go forwards <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdf445abfe1b77fa63f89e315ccc2f7f2"></a><!-- doxytag: member="motor.h::BACKWARD" ref="gdf445abfe1b77fa63f89e315ccc2f7f2" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#gdf445abfe1b77fa63f89e315ccc2f7f2">BACKWARD</a>&nbsp;&nbsp;&nbsp;0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">make the motors go backwards <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21">motors_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the motors.  <a href="group__motors.html#gbad32bfc46c9f31ba81955775611bd21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee">motor1_set</a> (int direction, int speed)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set speed and direction of motor1.  <a href="group__motors.html#g751a431c19cdb52bbbc8127455bd41ee"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0">motor2_set</a> (int direction, int speed)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set speed and direction of motor2.  <a href="group__motors.html#g23940fd8408c23fcf312b1d5937f0ab0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__motors.html#g3c7ada13bc7d8ed5e819910da74bf9cd">motors_off</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turn the motors off.  <a href="group__motors.html#g3c7ada13bc7d8ed5e819910da74bf9cd"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains definitions for controlling the motors. 
+<p>
+Contains definitions and functions for controlling the motors.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club Based on Tom Lauwer's Firefly Library </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x61.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x61.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x61.html	(revision 62)
@@ -0,0 +1,83 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li id="current"><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>A4
+: <a class="el" href="group__buzzer.html#ga0a03ad95ca0cb887a11e321fa1c9519">buzzer.h</a><li>A4s
+: <a class="el" href="group__buzzer.html#g7063c01bf1877119a8aca7049e02a8cb">buzzer.h</a><li>ALL_ON
+: <a class="el" href="group__dragonfly.html#g1252cf7a07df96ed2561ae605eaca197">dragonfly_lib.h</a><li>AN0
+: <a class="el" href="group__analog.html#g099995994c74b5fff8f7de4ff3eac550">analog.h</a><li>AN1
+: <a class="el" href="group__analog.html#g4903de2a52966c8dc2c20faf565d451d">analog.h</a><li>AN10
+: <a class="el" href="group__analog.html#gc63caaf5f7a06a02522cb7f90d6c1959">analog.h</a><li>AN11
+: <a class="el" href="group__analog.html#gdfeb79b00aaef4734408a910838f7872">analog.h</a><li>AN12
+: <a class="el" href="group__analog.html#g7a50a07e69f38b6674b0494dfbc653f9">analog.h</a><li>AN13
+: <a class="el" href="group__analog.html#gbf80851ae45ddfe4bfdfc10541c255ad">analog.h</a><li>AN14
+: <a class="el" href="group__analog.html#g817772a1db513b734dfe4475c3616061">analog.h</a><li>AN15
+: <a class="el" href="group__analog.html#g797adbadae057ff7aa766d84b4f180f9">analog.h</a><li>AN2
+: <a class="el" href="group__analog.html#g9b0754e893d69a1e69e856853f70da1f">analog.h</a><li>AN3
+: <a class="el" href="group__analog.html#g9f593faa38f1023698d74f03a457abe3">analog.h</a><li>AN4
+: <a class="el" href="group__analog.html#gdc95f1e9cdc00268d7bca5885052171f">analog.h</a><li>AN5
+: <a class="el" href="group__analog.html#g99ed455a0d536be03f12eba18ccff71b">analog.h</a><li>AN6
+: <a class="el" href="group__analog.html#gd63d6861c3fa5e606de5c18ada3b4d10">analog.h</a><li>AN7
+: <a class="el" href="group__analog.html#g277d706ee82bd70459b63e85489c7074">analog.h</a><li>AN8
+: <a class="el" href="group__analog.html#g28b64348820dbb25c903d24f2e38a8a7">analog.h</a><li>AN9
+: <a class="el" href="group__analog.html#g2fb7e4f4e0ea1f172eef79ed1f92e15f">analog.h</a><li>ANALOG
+: <a class="el" href="group__dragonfly.html#gd42aa2404559d4a465d5d45e857f2881">dragonfly_lib.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x71.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x71.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x71.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li id="current"><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_q">- q -</a></h3><ul>
+<li>QUARTER_SECOND
+: <a class="el" href="group__time.html#g0b2a348d9afca1f1182bc2bb2aa6a3d1">time.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x63.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x63.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x63.html	(revision 62)
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li id="current"><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>C4
+: <a class="el" href="group__buzzer.html#gcc39015f57b2efb8810b603f188bdf15">buzzer.h</a><li>C4s
+: <a class="el" href="group__buzzer.html#g879790f58417f0986370ddbcda404ed0">buzzer.h</a><li>C5
+: <a class="el" href="group__buzzer.html#g3b69b61d9deb37b13911faf2cf5cf1d5">buzzer.h</a><li>COMM
+: <a class="el" href="group__dragonfly.html#g46fff4184b5d787de1ed367b97cb6091">dragonfly_lib.h</a><li>CYAN
+: <a class="el" href="group__orbs.html#gd243f93c16bc4c1d3e0a13b84421d760">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/move_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/move_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/move_8h-source.html	(revision 62)
@@ -0,0 +1,52 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: move.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>move.h</h1><a href="move_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00010"></a>00010 <span class="preprocessor">#ifndef _MOVE_H_</span>
+<a name="l00011"></a>00011 <span class="preprocessor"></span><span class="preprocessor">#define _MOVE_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span>
+<a name="l00019"></a><a class="code" href="group__move.html#ga02f16883c5ce325e2dbb8c3835aa9a1">00019</a> <span class="preprocessor">#define FWD 0</span>
+<a name="l00020"></a>00020 <span class="preprocessor"></span>
+<a name="l00021"></a><a class="code" href="group__move.html#gb8d9d2e1ff6a03ce3b45a32e0002a405">00021</a> <span class="preprocessor">#define BCK 1</span>
+<a name="l00022"></a>00022 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__move.html#gff79b776dbd665d08a0cfcb4c2931c98">00024</a> <span class="preprocessor">#define SLOW_SPD 96</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__move.html#ga0dd7c6a61a43fb8a3698988c414a9bf">00026</a> <span class="preprocessor">#define HALF_SPD 128</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__move.html#gab20a9de15efe0d1b5599a3dd2ae9fea">00028</a> <span class="preprocessor">#define NRML_SPD 160</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="group__move.html#ga1f2e117ff854d46ca84f16a1eb8419a">00030</a> <span class="preprocessor">#define FAST_SPD 192</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="group__move.html#g35819c1d24f97763dab51cd367514443">00032</a> <span class="preprocessor">#define FULL_SPD 255</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00035"></a><a class="code" href="group__move.html#g4e9e38cfcdb9bfd0f80c69a574301731">00035</a> <span class="preprocessor">#define SLOW_TURN 64</span>
+<a name="l00036"></a>00036 <span class="preprocessor"></span>
+<a name="l00037"></a><a class="code" href="group__move.html#gdfc67eeed7b52f97b8483af04e27a9ce">00037</a> <span class="preprocessor">#define NRML_TURN 96</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+<a name="l00039"></a><a class="code" href="group__move.html#gb900792066abf52697bd19cc5240ae24">00039</a> <span class="preprocessor">#define FAST_TURN 128</span>
+<a name="l00040"></a>00040 <span class="preprocessor"></span>
+<a name="l00042"></a>00042 <span class="keywordtype">void</span> <a class="code" href="group__move.html#g4e27eab618b1d874ff25fd2b2a65493b">move</a>(<span class="keywordtype">int</span> velocity, <span class="keywordtype">int</span> omega);
+<a name="l00044"></a>00044 <span class="keywordtype">void</span> <a class="code" href="group__move.html#g8e79749d6af4a0aa12aceee41ad62ebd">move_avoid</a>(<span class="keywordtype">int</span> velocity, <span class="keywordtype">int</span> omega, <span class="keywordtype">int</span> strength);
+<a name="l00045"></a>00045 
+<a name="l00048"></a>00048 <span class="preprocessor">#endif</span>
+<a name="l00049"></a>00049 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__usb.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__usb.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__usb.html	(revision 62)
@@ -0,0 +1,263 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: USB Input / Output</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>USB Input / Output</h1>Functions for USB input / output.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g378065b4d75b008228ee41cc335474a7"></a><!-- doxytag: member="usb::USB_BAUD" ref="g378065b4d75b008228ee41cc335474a7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g378065b4d75b008228ee41cc335474a7">USB_BAUD</a>&nbsp;&nbsp;&nbsp;115200</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">the USB baud rate <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the USB.  <a href="#gddfbdb66f507ffcd08b4496531ed0a3d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946">usb_putc</a> (char c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a character to USB.  <a href="#g3ee898cfe59d05c428c56021c2ccf946"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae">usb_getc</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from USB.  <a href="#g053a5d887edfe8e8be543ec53a3f60ae"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c">usb_getc_nb</a> (char *c)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a character from USB without blocking.  <a href="#g6b1209b19e7fd2bbedc7407e0218453c"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#g6e101f68856f272f67923c4fb35a99e0">usb_puts</a> (char *s)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print a string to USB.  <a href="#g6e101f68856f272f67923c4fb35a99e0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__usb.html#gcd371dedbff10f0c52dca4b3b7af9e3d">usb_puti</a> (int value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Print an integer to USB.  <a href="#gcd371dedbff10f0c52dca4b3b7af9e3d"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for USB input / output. 
+<p>
+Low level functions for USB input and output. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g053a5d887edfe8e8be543ec53a3f60ae"></a><!-- doxytag: member="serial.h::usb_getc" ref="g053a5d887edfe8e8be543ec53a3f60ae" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int usb_getc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read a character from USB. 
+<p>
+Returns the first character in the buffer received from USB. This function blocks execution until a character has been received. xbee_init must be called before this function may be used.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the first character in the usb buffer</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a>, <a class="el" href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c">usb_getc_nb</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g6b1209b19e7fd2bbedc7407e0218453c"></a><!-- doxytag: member="serial.h::usb_getc_nb" ref="g6b1209b19e7fd2bbedc7407e0218453c" args="(char *c)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int usb_getc_nb           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>c</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read a character from USB without blocking. 
+<p>
+Non blocking version of usb_getc. If a character is present in the buffer, it is returned, otherwise -1 is returned immediately. usb_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>the received character. This will be set if a character has been received.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>-1 if no character is available, 0 otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a>, <a class="el" href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae">usb_getc</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gddfbdb66f507ffcd08b4496531ed0a3d"></a><!-- doxytag: member="serial.h::usb_init" ref="gddfbdb66f507ffcd08b4496531ed0a3d" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void usb_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the USB. 
+<p>
+Initializes communication over the USB serial port. This must be called before any other usb function may be used.     </td>
+  </tr>
+</table>
+<a class="anchor" name="g3ee898cfe59d05c428c56021c2ccf946"></a><!-- doxytag: member="serial.h::usb_putc" ref="g3ee898cfe59d05c428c56021c2ccf946" args="(char c)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int usb_putc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>c</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Print a character to USB. 
+<p>
+Sends a character over USB.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>c</em>&nbsp;</td><td>the character to send </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>0 for success, nonzero for failure </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gcd371dedbff10f0c52dca4b3b7af9e3d"></a><!-- doxytag: member="serial.h::usb_puti" ref="gcd371dedbff10f0c52dca4b3b7af9e3d" args="(int value)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int usb_puti           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>value</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Print an integer to USB. 
+<p>
+Prints an integer, converted to ASCII, to usb. usb_init must be called before this function can be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>the integer to print</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>0 if successful, nonzero otherwise</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">usb_init</a>, <a class="el" href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946">usb_putc</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g6e101f68856f272f67923c4fb35a99e0"></a><!-- doxytag: member="serial.h::usb_puts" ref="g6e101f68856f272f67923c4fb35a99e0" args="(char *s)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int usb_puts           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>s</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Print a string to USB. 
+<p>
+Sends a sequence of characters over USB.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>s</em>&nbsp;</td><td>the string to send </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>0 for success, nonzero for failure </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x73.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x73.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x73.html	(revision 62)
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li id="current"><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>SECOND
+: <a class="el" href="group__time.html#g94212be2394d2d37d9dfd33d07d82dba">time.h</a><li>SERIAL
+: <a class="el" href="group__dragonfly.html#gae3f0b4211ba45d265973d40ccbb5fd1">dragonfly_lib.h</a><li>SERVOS
+: <a class="el" href="group__dragonfly.html#g7baed4559391f95790fea2b456a22b68">dragonfly_lib.h</a><li>SIXTEENTH_SECOND
+: <a class="el" href="group__time.html#gd271145628da4e0e85e3e2486d117713">time.h</a><li>SLOW_SPD
+: <a class="el" href="group__move.html#gff79b776dbd665d08a0cfcb4c2931c98">move.h</a><li>SLOW_TURN
+: <a class="el" href="group__move.html#g4e9e38cfcdb9bfd0f80c69a574301731">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x65.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x65.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x65.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li id="current"><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>E4
+: <a class="el" href="group__buzzer.html#g4c819074c856b4e67fad4875a92cb2e9">buzzer.h</a><li>EIGTH_SECOND
+: <a class="el" href="group__time.html#g7bdae984203001070e9abeb3190f844a">time.h</a><li>EXT_MUX
+: <a class="el" href="group__analog.html#g3434ce39eaea22b46a0100b7fd3a6f47">analog.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x75.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x75.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x75.html	(revision 62)
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li id="current"><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>USB
+: <a class="el" href="group__dragonfly.html#g779bf099075a999d1074357fccbd466b">dragonfly_lib.h</a><li>USB_BAUD
+: <a class="el" href="group__usb.html#g378065b4d75b008228ee41cc335474a7">serial.h</a><li>usb_getc()
+: <a class="el" href="group__usb.html#g053a5d887edfe8e8be543ec53a3f60ae">serial.h</a><li>usb_getc_nb()
+: <a class="el" href="group__usb.html#g6b1209b19e7fd2bbedc7407e0218453c">serial.h</a><li>usb_init()
+: <a class="el" href="group__usb.html#gddfbdb66f507ffcd08b4496531ed0a3d">serial.h</a><li>usb_putc()
+: <a class="el" href="group__usb.html#g3ee898cfe59d05c428c56021c2ccf946">serial.h</a><li>usb_puti()
+: <a class="el" href="group__usb.html#gcd371dedbff10f0c52dca4b3b7af9e3d">serial.h</a><li>usb_puts()
+: <a class="el" href="group__usb.html#g6e101f68856f272f67923c4fb35a99e0">serial.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/battery_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/battery_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/battery_8h-source.html	(revision 62)
@@ -0,0 +1,41 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: battery.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>battery.h</h1><a href="battery_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef _BATTERY_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define _BATTERY_H_</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00020"></a><a class="code" href="group__battery.html#g8d3e83b7f2ff00064ba16519d1589cfd">00020</a> <span class="preprocessor">#define BATTERY_NORMALV 154</span>
+<a name="l00021"></a>00021 <span class="preprocessor"></span>
+<a name="l00022"></a><a class="code" href="group__battery.html#gc955a8295474a62e5faeaf28abf89c6b">00022</a> <span class="preprocessor">#define BATTERY_CHARINGV 179</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__battery.html#gb23d2e4155f65f05628d1b48430c6b18">00024</a> <span class="preprocessor">#define BATTERY_LOWV 152</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00027"></a>00027 <span class="keywordtype">int</span> <a class="code" href="group__battery.html#ga17c87ea3dd1f7539005ac596efe1b32">battery8</a>(<span class="keywordtype">void</span>);
+<a name="l00029"></a>00029 <span class="keywordtype">int</span> <a class="code" href="group__battery.html#g538631dcf134d98d7301d800a744e4d9">battery</a>(<span class="keywordtype">void</span>);
+<a name="l00031"></a>00031 <span class="keywordtype">char</span> <a class="code" href="group__battery.html#g4febf636fecb12a276edb51f5b9cc61e">battery_low</a>(<span class="keywordtype">void</span>);
+<a name="l00033"></a>00033 <span class="keywordtype">int</span> <a class="code" href="group__battery.html#g431bfea596da03bdeead863b16e0c37a">battery8_avg</a>(<span class="keywordtype">int</span> n_samples);
+<a name="l00034"></a>00034  <span class="comment">//end addtogroup</span>
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 <span class="preprocessor">#endif</span>
+<a name="l00038"></a>00038 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x67.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x67.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x67.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li id="current"><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>G4
+: <a class="el" href="group__buzzer.html#g6f984a8b01aafc34122cc8bc0d9d5691">buzzer.h</a><li>G4s
+: <a class="el" href="group__buzzer.html#gaf8daa589f172256505e028dab2954b2">buzzer.h</a><li>GREEN
+: <a class="el" href="group__orbs.html#gcfbc006ea433ad708fdee3e82996e721">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x77.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x77.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x77.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li id="current"><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>WHEEL_PORT
+: <a class="el" href="group__analog.html#ga6538d2deb002b8441891dc4e15cd104">analog.h</a><li>WHITE
+: <a class="el" href="group__orbs.html#g87b537f5fa5c109d3c05c13d6b18f382">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x69.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x69.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x69.html	(revision 62)
@@ -0,0 +1,69 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li id="current"><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>I2C
+: <a class="el" href="group__dragonfly.html#g457a9aa93dbb216459873a30bdb4d84a">dragonfly_lib.h</a><li>IR1
+: <a class="el" href="group__rangefinder.html#g7b2b32709f9770a283701ffcf3723497">rangefinder.h</a><li>IR2
+: <a class="el" href="group__rangefinder.html#g5a08e4f5cb3582e623cc14a6c92d48de">rangefinder.h</a><li>IR3
+: <a class="el" href="group__rangefinder.html#g26c72d21cca0ec21af4bd9b20ba3ad51">rangefinder.h</a><li>IR4
+: <a class="el" href="group__rangefinder.html#g20f2f5908baa0eeba04b9ceaf718cea0">rangefinder.h</a><li>IR5
+: <a class="el" href="group__rangefinder.html#g23554754d5334bdc35df623e1e012ede">rangefinder.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x79.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x79.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x79.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li id="current"><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_y">- y -</a></h3><ul>
+<li>YELLOW
+: <a class="el" href="group__orbs.html#gbf681265909adf3d3e8116c93c0ba179">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__analog.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__analog.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__analog.html	(revision 62)
@@ -0,0 +1,254 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Analog</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Analog</h1><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g099995994c74b5fff8f7de4ff3eac550"></a><!-- doxytag: member="analog::AN0" ref="g099995994c74b5fff8f7de4ff3eac550" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g099995994c74b5fff8f7de4ff3eac550">AN0</a>&nbsp;&nbsp;&nbsp;0x00</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4903de2a52966c8dc2c20faf565d451d"></a><!-- doxytag: member="analog::AN1" ref="g4903de2a52966c8dc2c20faf565d451d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g4903de2a52966c8dc2c20faf565d451d">AN1</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9b0754e893d69a1e69e856853f70da1f"></a><!-- doxytag: member="analog::AN2" ref="g9b0754e893d69a1e69e856853f70da1f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g9b0754e893d69a1e69e856853f70da1f">AN2</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9f593faa38f1023698d74f03a457abe3"></a><!-- doxytag: member="analog::AN3" ref="g9f593faa38f1023698d74f03a457abe3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g9f593faa38f1023698d74f03a457abe3">AN3</a>&nbsp;&nbsp;&nbsp;0x03</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdc95f1e9cdc00268d7bca5885052171f"></a><!-- doxytag: member="analog::AN4" ref="gdc95f1e9cdc00268d7bca5885052171f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gdc95f1e9cdc00268d7bca5885052171f">AN4</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g99ed455a0d536be03f12eba18ccff71b"></a><!-- doxytag: member="analog::AN5" ref="g99ed455a0d536be03f12eba18ccff71b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g99ed455a0d536be03f12eba18ccff71b">AN5</a>&nbsp;&nbsp;&nbsp;0x05</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd63d6861c3fa5e606de5c18ada3b4d10"></a><!-- doxytag: member="analog::AN6" ref="gd63d6861c3fa5e606de5c18ada3b4d10" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gd63d6861c3fa5e606de5c18ada3b4d10">AN6</a>&nbsp;&nbsp;&nbsp;0x06</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g277d706ee82bd70459b63e85489c7074"></a><!-- doxytag: member="analog::AN7" ref="g277d706ee82bd70459b63e85489c7074" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g277d706ee82bd70459b63e85489c7074">AN7</a>&nbsp;&nbsp;&nbsp;0x07</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g28b64348820dbb25c903d24f2e38a8a7"></a><!-- doxytag: member="analog::AN8" ref="g28b64348820dbb25c903d24f2e38a8a7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g28b64348820dbb25c903d24f2e38a8a7">AN8</a>&nbsp;&nbsp;&nbsp;0x08</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 8. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2fb7e4f4e0ea1f172eef79ed1f92e15f"></a><!-- doxytag: member="analog::AN9" ref="g2fb7e4f4e0ea1f172eef79ed1f92e15f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g2fb7e4f4e0ea1f172eef79ed1f92e15f">AN9</a>&nbsp;&nbsp;&nbsp;0x09</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 9. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc63caaf5f7a06a02522cb7f90d6c1959"></a><!-- doxytag: member="analog::AN10" ref="gc63caaf5f7a06a02522cb7f90d6c1959" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gc63caaf5f7a06a02522cb7f90d6c1959">AN10</a>&nbsp;&nbsp;&nbsp;0x0a</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 10. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdfeb79b00aaef4734408a910838f7872"></a><!-- doxytag: member="analog::AN11" ref="gdfeb79b00aaef4734408a910838f7872" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gdfeb79b00aaef4734408a910838f7872">AN11</a>&nbsp;&nbsp;&nbsp;0x0b</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 11. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7a50a07e69f38b6674b0494dfbc653f9"></a><!-- doxytag: member="analog::AN12" ref="g7a50a07e69f38b6674b0494dfbc653f9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g7a50a07e69f38b6674b0494dfbc653f9">AN12</a>&nbsp;&nbsp;&nbsp;0x0c</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 12. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbf80851ae45ddfe4bfdfc10541c255ad"></a><!-- doxytag: member="analog::AN13" ref="gbf80851ae45ddfe4bfdfc10541c255ad" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gbf80851ae45ddfe4bfdfc10541c255ad">AN13</a>&nbsp;&nbsp;&nbsp;0x0d</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 13. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g817772a1db513b734dfe4475c3616061"></a><!-- doxytag: member="analog::AN14" ref="g817772a1db513b734dfe4475c3616061" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g817772a1db513b734dfe4475c3616061">AN14</a>&nbsp;&nbsp;&nbsp;0x0e</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 14. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g797adbadae057ff7aa766d84b4f180f9"></a><!-- doxytag: member="analog::AN15" ref="g797adbadae057ff7aa766d84b4f180f9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g797adbadae057ff7aa766d84b4f180f9">AN15</a>&nbsp;&nbsp;&nbsp;0x0f</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 15. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3434ce39eaea22b46a0100b7fd3a6f47"></a><!-- doxytag: member="analog::EXT_MUX" ref="g3434ce39eaea22b46a0100b7fd3a6f47" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g3434ce39eaea22b46a0100b7fd3a6f47">EXT_MUX</a>&nbsp;&nbsp;&nbsp;AN7</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">EXT_MUX analog port. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga6538d2deb002b8441891dc4e15cd104"></a><!-- doxytag: member="analog::WHEEL_PORT" ref="ga6538d2deb002b8441891dc4e15cd104" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#ga6538d2deb002b8441891dc4e15cd104">WHEEL_PORT</a>&nbsp;&nbsp;&nbsp;AN10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port for the wheel. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gadcd026a2c91fe96c8134619c87bb72a"></a><!-- doxytag: member="analog::BATT_PORT" ref="gadcd026a2c91fe96c8134619c87bb72a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gadcd026a2c91fe96c8134619c87bb72a">BATT_PORT</a>&nbsp;&nbsp;&nbsp;AN11</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port for the battery voltage detector. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize analog ports.  <a href="#g55f66ff6f3449ef81d97b7e47f041918"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27">analog8</a> (int which)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an 8-bit number from an analog port.  <a href="#gf1211040ce2c54f12f98df7d47a4eb27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g875bf8cb165a3a288eb1aa2ac06be4f3">analog10</a> (int which)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a 10-bit number from an analog port.  <a href="#g875bf8cb165a3a288eb1aa2ac06be4f3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g973e63eb508819a37efe3231b6a39550">wheel</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the position of the wheel.  <a href="#g973e63eb508819a37efe3231b6a39550"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for manipulation the ADC on the dragonfly board. All definitions may be found in <a class="el" href="analog_8h.html">analog.h</a>. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g875bf8cb165a3a288eb1aa2ac06be4f3"></a><!-- doxytag: member="analog.c::analog10" ref="g875bf8cb165a3a288eb1aa2ac06be4f3" args="(int which)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int analog10           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>which</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read a 10-bit number from an analog port. 
+<p>
+Reads a ten bit number from the specified port. analog_init must be called before using this function.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>which</em>&nbsp;</td><td>the analog port to read from. Typically a constant, one of AN0 - AN7.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the ten bit number input to the specified port</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>, <a class="el" href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27">analog8</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gf1211040ce2c54f12f98df7d47a4eb27"></a><!-- doxytag: member="analog.c::analog8" ref="gf1211040ce2c54f12f98df7d47a4eb27" args="(int which)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned int analog8           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>which</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read an 8-bit number from an analog port. 
+<p>
+Reads an eight bit number from an analog port. analog_init must be called before using this function.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>which</em>&nbsp;</td><td>the analog port to read from. One of the constants AN0 - AN7.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the eight bit input to the specified port</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a>, <a class="el" href="group__analog.html#g875bf8cb165a3a288eb1aa2ac06be4f3">analog10</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g55f66ff6f3449ef81d97b7e47f041918"></a><!-- doxytag: member="analog.c::analog_init" ref="g55f66ff6f3449ef81d97b7e47f041918" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void analog_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize analog ports. 
+<p>
+Initializes the ADC. Call analog_init before reading from the analog ports.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27">analog8</a>, <a class="el" href="group__analog.html#g875bf8cb165a3a288eb1aa2ac06be4f3">analog10</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g973e63eb508819a37efe3231b6a39550"></a><!-- doxytag: member="analog.c::wheel" ref="g973e63eb508819a37efe3231b6a39550" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int wheel           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read the position of the wheel. 
+<p>
+Returns the current position of the wheel, as an integer in the range 0 - 255. analog_init must be called before using this function.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the orientation of the wheel, as an integer in the range 0 - 255.</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/buzzer_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/buzzer_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/buzzer_8h.html	(revision 62)
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: buzzer.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>buzzer.h File Reference</h1>Contains definitions for using the buzzer. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="buzzer_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcc39015f57b2efb8810b603f188bdf15"></a><!-- doxytag: member="buzzer.h::C4" ref="gcc39015f57b2efb8810b603f188bdf15" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#gcc39015f57b2efb8810b603f188bdf15">C4</a>&nbsp;&nbsp;&nbsp;260</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Middle C. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g879790f58417f0986370ddbcda404ed0"></a><!-- doxytag: member="buzzer.h::C4s" ref="g879790f58417f0986370ddbcda404ed0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g879790f58417f0986370ddbcda404ed0">C4s</a>&nbsp;&nbsp;&nbsp;277</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">C#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3d9bb178282c3cb69740c94ba1e48fed"></a><!-- doxytag: member="buzzer.h::D4" ref="g3d9bb178282c3cb69740c94ba1e48fed" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g3d9bb178282c3cb69740c94ba1e48fed">D4</a>&nbsp;&nbsp;&nbsp;294</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">D. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g33eb0561dd16dd44c7c23519dd22540a"></a><!-- doxytag: member="buzzer.h::D4s" ref="g33eb0561dd16dd44c7c23519dd22540a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g33eb0561dd16dd44c7c23519dd22540a">D4s</a>&nbsp;&nbsp;&nbsp;311</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">D#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4c819074c856b4e67fad4875a92cb2e9"></a><!-- doxytag: member="buzzer.h::E4" ref="g4c819074c856b4e67fad4875a92cb2e9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g4c819074c856b4e67fad4875a92cb2e9">E4</a>&nbsp;&nbsp;&nbsp;330</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">E. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7fd7918aa90b0ce1dc7ca9fe7a00e9fb"></a><!-- doxytag: member="buzzer.h::F4" ref="g7fd7918aa90b0ce1dc7ca9fe7a00e9fb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g7fd7918aa90b0ce1dc7ca9fe7a00e9fb">F4</a>&nbsp;&nbsp;&nbsp;349</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">F. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g93ff98890b28a2833f1152cc95c3e628"></a><!-- doxytag: member="buzzer.h::F4s" ref="g93ff98890b28a2833f1152cc95c3e628" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g93ff98890b28a2833f1152cc95c3e628">F4s</a>&nbsp;&nbsp;&nbsp;370</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">F#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6f984a8b01aafc34122cc8bc0d9d5691"></a><!-- doxytag: member="buzzer.h::G4" ref="g6f984a8b01aafc34122cc8bc0d9d5691" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g6f984a8b01aafc34122cc8bc0d9d5691">G4</a>&nbsp;&nbsp;&nbsp;392</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">G. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gaf8daa589f172256505e028dab2954b2"></a><!-- doxytag: member="buzzer.h::G4s" ref="gaf8daa589f172256505e028dab2954b2" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#gaf8daa589f172256505e028dab2954b2">G4s</a>&nbsp;&nbsp;&nbsp;415</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">G#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga0a03ad95ca0cb887a11e321fa1c9519"></a><!-- doxytag: member="buzzer.h::A4" ref="ga0a03ad95ca0cb887a11e321fa1c9519" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#ga0a03ad95ca0cb887a11e321fa1c9519">A4</a>&nbsp;&nbsp;&nbsp;440</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7063c01bf1877119a8aca7049e02a8cb"></a><!-- doxytag: member="buzzer.h::A4s" ref="g7063c01bf1877119a8aca7049e02a8cb" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g7063c01bf1877119a8aca7049e02a8cb">A4s</a>&nbsp;&nbsp;&nbsp;466</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A#. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0bf59f84e29fb57d27314583365a88d6"></a><!-- doxytag: member="buzzer.h::B4" ref="g0bf59f84e29fb57d27314583365a88d6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g0bf59f84e29fb57d27314583365a88d6">B4</a>&nbsp;&nbsp;&nbsp;494</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">B. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3b69b61d9deb37b13911faf2cf5cf1d5"></a><!-- doxytag: member="buzzer.h::C5" ref="g3b69b61d9deb37b13911faf2cf5cf1d5" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g3b69b61d9deb37b13911faf2cf5cf1d5">C5</a>&nbsp;&nbsp;&nbsp;523</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">C. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd">buzzer_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the buzzer.  <a href="group__buzzer.html#g0cead532fdd0c0de5fa1c1de0f6556bd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g9872f05325dd86a89728d47c8e9158ab">buzzer_set_val</a> (unsigned int buzz_value)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the value the buzzer plays.  <a href="group__buzzer.html#g9872f05325dd86a89728d47c8e9158ab"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#ga0aba85b0044cb1a44bb28c675d7c193">buzzer_set_freq</a> (unsigned int buzz_freq)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set the frequency the buzzer plays.  <a href="group__buzzer.html#ga0aba85b0044cb1a44bb28c675d7c193"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#ga78239c1255dfea31992f435659df1d7">buzzer_chirp</a> (unsigned int ms, unsigned int buzz_freq)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Play a frequency for a specified time.  <a href="group__buzzer.html#ga78239c1255dfea31992f435659df1d7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__buzzer.html#g93d07c81691fec7a85ea85117d6eca4f">buzzer_off</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turn the buzzer off.  <a href="group__buzzer.html#g93d07c81691fec7a85ea85117d6eca4f"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains definitions for using the buzzer. 
+<p>
+Contains definitions for using the buzzer built into the colony robots.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__orbs.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__orbs.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__orbs.html	(revision 62)
@@ -0,0 +1,470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Orbs</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Orbs</h1>Functions for controlling the color of the orbs.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g8d23feea868a983c8c2b661e1e16972f"></a><!-- doxytag: member="orbs::RED" ref="g8d23feea868a983c8c2b661e1e16972f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g8d23feea868a983c8c2b661e1e16972f">RED</a>&nbsp;&nbsp;&nbsp;0xE0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Red. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc5b6e19bf06822021f35602c59658de3"></a><!-- doxytag: member="orbs::ORANGE" ref="gc5b6e19bf06822021f35602c59658de3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gc5b6e19bf06822021f35602c59658de3">ORANGE</a>&nbsp;&nbsp;&nbsp;0xE4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Orange. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbf681265909adf3d3e8116c93c0ba179"></a><!-- doxytag: member="orbs::YELLOW" ref="gbf681265909adf3d3e8116c93c0ba179" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gbf681265909adf3d3e8116c93c0ba179">YELLOW</a>&nbsp;&nbsp;&nbsp;0xE8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Yellow. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g46019a1f2c10603a54b6cbb19cbf3c21"></a><!-- doxytag: member="orbs::LIME" ref="g46019a1f2c10603a54b6cbb19cbf3c21" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g46019a1f2c10603a54b6cbb19cbf3c21">LIME</a>&nbsp;&nbsp;&nbsp;0x68</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lime. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcfbc006ea433ad708fdee3e82996e721"></a><!-- doxytag: member="orbs::GREEN" ref="gcfbc006ea433ad708fdee3e82996e721" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gcfbc006ea433ad708fdee3e82996e721">GREEN</a>&nbsp;&nbsp;&nbsp;0x1C</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Green. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd243f93c16bc4c1d3e0a13b84421d760"></a><!-- doxytag: member="orbs::CYAN" ref="gd243f93c16bc4c1d3e0a13b84421d760" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gd243f93c16bc4c1d3e0a13b84421d760">CYAN</a>&nbsp;&nbsp;&nbsp;0x1F</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cyan. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g79d10e672abb49ad63eeaa8aaef57c38"></a><!-- doxytag: member="orbs::BLUE" ref="g79d10e672abb49ad63eeaa8aaef57c38" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g79d10e672abb49ad63eeaa8aaef57c38">BLUE</a>&nbsp;&nbsp;&nbsp;0x03</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Blue. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gda419fe3b48fcf19daed7cc57ccf1174"></a><!-- doxytag: member="orbs::PINK" ref="gda419fe3b48fcf19daed7cc57ccf1174" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gda419fe3b48fcf19daed7cc57ccf1174">PINK</a>&nbsp;&nbsp;&nbsp;0xA6</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pink. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0bb0b009e7a7390473ace4d98bd843c0"></a><!-- doxytag: member="orbs::PURPLE" ref="g0bb0b009e7a7390473ace4d98bd843c0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g0bb0b009e7a7390473ace4d98bd843c0">PURPLE</a>&nbsp;&nbsp;&nbsp;0x41</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Purple. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6f699060902f800f12aaae150f3a708e"></a><!-- doxytag: member="orbs::MAGENTA" ref="g6f699060902f800f12aaae150f3a708e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g6f699060902f800f12aaae150f3a708e">MAGENTA</a>&nbsp;&nbsp;&nbsp;0xE3</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Magenta. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g87b537f5fa5c109d3c05c13d6b18f382"></a><!-- doxytag: member="orbs::WHITE" ref="g87b537f5fa5c109d3c05c13d6b18f382" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g87b537f5fa5c109d3c05c13d6b18f382">WHITE</a>&nbsp;&nbsp;&nbsp;0xFE</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">White. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gcf2f6da92d895ef5e594223f1e39e4b1"></a><!-- doxytag: member="orbs::ORB_OFF" ref="gcf2f6da92d895ef5e594223f1e39e4b1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gcf2f6da92d895ef5e594223f1e39e4b1">ORB_OFF</a>&nbsp;&nbsp;&nbsp;0xFE</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turn the orb off (White). <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables the orbs.  <a href="#g13069271f9d636674e9b4a8a355099b9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#ga75385bd1398949615ee1fe78a535cff">orb_set</a> (unsigned char red_led, unsigned char green_led, unsigned char blue_led)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set both orbs to a specified color.  <a href="#ga75385bd1398949615ee1fe78a535cff"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g2df1397345a557295b12e50451f8592e">orb1_set</a> (unsigned char red_led, unsigned char green_led, unsigned char blue_led)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb1 to a specified color.  <a href="#g2df1397345a557295b12e50451f8592e"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#gb19679987f51d6ed35461d581ca8972b">orb2_set</a> (unsigned char red_led, unsigned char green_led, unsigned char blue_led)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb2 to a specified color.  <a href="#gb19679987f51d6ed35461d581ca8972b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g123d2880d20bf6d0bb387024c8f6da81">orb_set_color</a> (int col)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set both orbs to a specified color.  <a href="#g123d2880d20bf6d0bb387024c8f6da81"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g131d9bf3e32cf5530f4cc671ea496609">orb1_set_color</a> (int col)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb1 to a specified color.  <a href="#g131d9bf3e32cf5530f4cc671ea496609"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g3125d9c661a33b3fdeb4eca75ca00cab">orb2_set_color</a> (int col)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set orb2 to a specified color.  <a href="#g3125d9c661a33b3fdeb4eca75ca00cab"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g1ea1b363a0592f80798f6a1e260a70e9">orb_disable</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Disable the orbs.  <a href="#g1ea1b363a0592f80798f6a1e260a70e9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__orbs.html#g5911e3fa322de2e760a92a44d5a6a547">orb_enable</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enable the orbs.  <a href="#g5911e3fa322de2e760a92a44d5a6a547"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for controlling the color of the orbs. 
+<p>
+Functions for controlling the color and lighting of the orbs. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g2df1397345a557295b12e50451f8592e"></a><!-- doxytag: member="lights.c::orb1_set" ref="g2df1397345a557295b12e50451f8592e" args="(unsigned char red_led, unsigned char green_led, unsigned char blue_led)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb1_set           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>green_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>blue_led</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set orb1 to a specified color. 
+<p>
+Set orb1 to the color specified. orb_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>red_led</em>&nbsp;</td><td>the red component of the color </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>green_led</em>&nbsp;</td><td>the green component of the color </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>blue_led</em>&nbsp;</td><td>the blue component of the color</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g131d9bf3e32cf5530f4cc671ea496609"></a><!-- doxytag: member="lights.c::orb1_set_color" ref="g131d9bf3e32cf5530f4cc671ea496609" args="(int col)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb1_set_color           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>col</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set orb1 to a specified color. 
+<p>
+Set orb1 to the specified color. This function is intended to be used with the predefined colors. orb_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>col</em>&nbsp;</td><td>the color to set the orbs to</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="gb19679987f51d6ed35461d581ca8972b"></a><!-- doxytag: member="lights.c::orb2_set" ref="gb19679987f51d6ed35461d581ca8972b" args="(unsigned char red_led, unsigned char green_led, unsigned char blue_led)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb2_set           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>green_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>blue_led</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set orb2 to a specified color. 
+<p>
+Set orb2 to the color specified. orb_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>red_led</em>&nbsp;</td><td>the red component of the color </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>green_led</em>&nbsp;</td><td>the green component of the color </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>blue_led</em>&nbsp;</td><td>the blue component of the color</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g3125d9c661a33b3fdeb4eca75ca00cab"></a><!-- doxytag: member="lights.c::orb2_set_color" ref="g3125d9c661a33b3fdeb4eca75ca00cab" args="(int col)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb2_set_color           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>col</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set orb2 to a specified color. 
+<p>
+Set orb2 to the specified color. This function is intended to be used with the predefined colors. orb_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>col</em>&nbsp;</td><td>the color to set the orbs to</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g1ea1b363a0592f80798f6a1e260a70e9"></a><!-- doxytag: member="lights.c::orb_disable" ref="g1ea1b363a0592f80798f6a1e260a70e9" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb_disable           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Disable the orbs. 
+<p>
+Disables the orb color fading capabilities by disabling the timer1 interrupt.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g5911e3fa322de2e760a92a44d5a6a547"></a><!-- doxytag: member="lights.c::orb_enable" ref="g5911e3fa322de2e760a92a44d5a6a547" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb_enable           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Enable the orbs. 
+<p>
+Enables the orb's color fading capabilities.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g13069271f9d636674e9b4a8a355099b9"></a><!-- doxytag: member="lights.c::orb_init" ref="g13069271f9d636674e9b4a8a355099b9" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Enables the orbs. 
+<p>
+Initializes the PWM for Orb control. This must be called before the orbs are used for them to function.     </td>
+  </tr>
+</table>
+<a class="anchor" name="ga75385bd1398949615ee1fe78a535cff"></a><!-- doxytag: member="lights.c::orb_set" ref="ga75385bd1398949615ee1fe78a535cff" args="(unsigned char red_led, unsigned char green_led, unsigned char blue_led)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb_set           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>red_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>green_led</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned char&nbsp;</td>
+          <td class="mdname" nowrap> <em>blue_led</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set both orbs to a specified color. 
+<p>
+Set both orbs to the color specified. orb_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>red_led</em>&nbsp;</td><td>the red component of the color </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>green_led</em>&nbsp;</td><td>the green component of the color </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>blue_led</em>&nbsp;</td><td>the blue component of the color</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g123d2880d20bf6d0bb387024c8f6da81"></a><!-- doxytag: member="lights.c::orb_set_color" ref="g123d2880d20bf6d0bb387024c8f6da81" args="(int col)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void orb_set_color           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>col</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set both orbs to a specified color. 
+<p>
+Set both orbs to the specified color. This function is intended to be used with the predefined colors. orb_init must be called before this function may be used.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>col</em>&nbsp;</td><td>the color to set the orbs to</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x6d.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x6d.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x6d.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li id="current"><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MAGENTA
+: <a class="el" href="group__orbs.html#g6f699060902f800f12aaae150f3a708e">lights.h</a><li>MOTORS
+: <a class="el" href="group__dragonfly.html#g9bb31bba359fbb679910df0a6efde5a3">dragonfly_lib.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x6f.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x6f.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x6f.html	(revision 62)
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li id="current"><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>ORANGE
+: <a class="el" href="group__orbs.html#gc5b6e19bf06822021f35602c59658de3">lights.h</a><li>ORB
+: <a class="el" href="group__dragonfly.html#g24a9b050b733edb162cbeb44b1a417b1">dragonfly_lib.h</a><li>ORB_OFF
+: <a class="el" href="group__orbs.html#gcf2f6da92d895ef5e594223f1e39e4b1">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/lights_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/lights_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/lights_8h-source.html	(revision 62)
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: lights.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>lights.h</h1><a href="lights_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00011"></a>00011 <span class="preprocessor">#ifndef _LIGHTS_H_</span>
+<a name="l00012"></a>00012 <span class="preprocessor"></span><span class="preprocessor">#define _LIGHTS_H_</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span>
+<a name="l00014"></a>00014 
+<a name="l00020"></a>00020 <span class="comment">//ORB Colors</span>
+<a name="l00022"></a><a class="code" href="group__orbs.html#g8d23feea868a983c8c2b661e1e16972f">00022</a> <span class="comment"></span><span class="preprocessor">#define RED       0xE0</span>
+<a name="l00023"></a>00023 <span class="preprocessor"></span>
+<a name="l00024"></a><a class="code" href="group__orbs.html#gc5b6e19bf06822021f35602c59658de3">00024</a> <span class="preprocessor">#define ORANGE    0xE4</span>
+<a name="l00025"></a>00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="group__orbs.html#gbf681265909adf3d3e8116c93c0ba179">00026</a> <span class="preprocessor">#define YELLOW    0xE8</span>
+<a name="l00027"></a>00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="group__orbs.html#g46019a1f2c10603a54b6cbb19cbf3c21">00028</a> <span class="preprocessor">#define LIME      0x68</span>
+<a name="l00029"></a>00029 <span class="preprocessor"></span>
+<a name="l00030"></a><a class="code" href="group__orbs.html#gcfbc006ea433ad708fdee3e82996e721">00030</a> <span class="preprocessor">#define GREEN     0x1C</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="group__orbs.html#gd243f93c16bc4c1d3e0a13b84421d760">00032</a> <span class="preprocessor">#define CYAN      0x1F</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a><a class="code" href="group__orbs.html#g79d10e672abb49ad63eeaa8aaef57c38">00034</a> <span class="preprocessor">#define BLUE      0x03</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a><a class="code" href="group__orbs.html#gda419fe3b48fcf19daed7cc57ccf1174">00036</a> <span class="preprocessor">#define PINK      0xA6 </span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="group__orbs.html#g0bb0b009e7a7390473ace4d98bd843c0">00038</a> <span class="preprocessor">#define PURPLE    0x41</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="group__orbs.html#g6f699060902f800f12aaae150f3a708e">00040</a> <span class="preprocessor">#define MAGENTA   0xE3</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a><a class="code" href="group__orbs.html#g87b537f5fa5c109d3c05c13d6b18f382">00042</a> <span class="preprocessor">#define WHITE     0xFE</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00044"></a><a class="code" href="group__orbs.html#gcf2f6da92d895ef5e594223f1e39e4b1">00044</a> <span class="preprocessor">#define ORB_OFF   0xFE      //ORB_OFF-&gt;WHITE</span>
+<a name="l00045"></a>00045 <span class="preprocessor"></span>
+<a name="l00047"></a>00047 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g13069271f9d636674e9b4a8a355099b9">orb_init</a>(<span class="keywordtype">void</span>);
+<a name="l00049"></a>00049 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#ga75385bd1398949615ee1fe78a535cff">orb_set</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> red_led, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> green_led,
+<a name="l00050"></a>00050         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> blue_led);
+<a name="l00052"></a>00052 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g2df1397345a557295b12e50451f8592e">orb1_set</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> red_led, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> green_led,
+<a name="l00053"></a>00053         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> blue_led); 
+<a name="l00055"></a>00055 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#gb19679987f51d6ed35461d581ca8972b">orb2_set</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> red_led, <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> green_led,
+<a name="l00056"></a>00056         <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> blue_led);
+<a name="l00057"></a>00057 
+<a name="l00059"></a>00059 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g123d2880d20bf6d0bb387024c8f6da81">orb_set_color</a>(<span class="keywordtype">int</span> col);
+<a name="l00061"></a>00061 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g131d9bf3e32cf5530f4cc671ea496609">orb1_set_color</a>(<span class="keywordtype">int</span> col);
+<a name="l00063"></a>00063 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g3125d9c661a33b3fdeb4eca75ca00cab">orb2_set_color</a>(<span class="keywordtype">int</span> col);
+<a name="l00064"></a>00064 
+<a name="l00066"></a>00066 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g1ea1b363a0592f80798f6a1e260a70e9">orb_disable</a>(<span class="keywordtype">void</span>);
+<a name="l00068"></a>00068 <span class="keywordtype">void</span> <a class="code" href="group__orbs.html#g5911e3fa322de2e760a92a44d5a6a547">orb_enable</a>(<span class="keywordtype">void</span>);
+<a name="l00069"></a>00069  <span class="comment">//end addtogroup</span>
+<a name="l00071"></a>00071 
+<a name="l00072"></a>00072 <span class="preprocessor">#endif</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__rangefinder.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__rangefinder.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__rangefinder.html	(revision 62)
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Rangefinder</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Rangefinder</h1>Functions for using the IR rangefinders.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7b2b32709f9770a283701ffcf3723497"></a><!-- doxytag: member="rangefinder::IR1" ref="g7b2b32709f9770a283701ffcf3723497" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g7b2b32709f9770a283701ffcf3723497">IR1</a>&nbsp;&nbsp;&nbsp;6</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5a08e4f5cb3582e623cc14a6c92d48de"></a><!-- doxytag: member="rangefinder::IR2" ref="g5a08e4f5cb3582e623cc14a6c92d48de" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g5a08e4f5cb3582e623cc14a6c92d48de">IR2</a>&nbsp;&nbsp;&nbsp;5</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g26c72d21cca0ec21af4bd9b20ba3ad51"></a><!-- doxytag: member="rangefinder::IR3" ref="g26c72d21cca0ec21af4bd9b20ba3ad51" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g26c72d21cca0ec21af4bd9b20ba3ad51">IR3</a>&nbsp;&nbsp;&nbsp;4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g20f2f5908baa0eeba04b9ceaf718cea0"></a><!-- doxytag: member="rangefinder::IR4" ref="g20f2f5908baa0eeba04b9ceaf718cea0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g20f2f5908baa0eeba04b9ceaf718cea0">IR4</a>&nbsp;&nbsp;&nbsp;3</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g23554754d5334bdc35df623e1e012ede"></a><!-- doxytag: member="rangefinder::IR5" ref="g23554754d5334bdc35df623e1e012ede" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g23554754d5334bdc35df623e1e012ede">IR5</a>&nbsp;&nbsp;&nbsp;2</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">IR Rangefinder 5. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g52d0666b725e6d3a14b5bddc28190e59">range_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the rangefinders.  <a href="#g52d0666b725e6d3a14b5bddc28190e59"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__rangefinder.html#g22bd0717784e34cb3a0762d78554dcf2">range_read_distance</a> (int range_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the distance from a rangefinder.  <a href="#g22bd0717784e34cb3a0762d78554dcf2"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Functions for using the IR rangefinders. 
+<p>
+Functions for using the IR rangefinders. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g52d0666b725e6d3a14b5bddc28190e59"></a><!-- doxytag: member="rangefinder.c::range_init" ref="g52d0666b725e6d3a14b5bddc28190e59" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void range_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initialize the rangefinders. 
+<p>
+Initializes the rangefinders. This must be called before range_read_distance.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__rangefinder.html#g22bd0717784e34cb3a0762d78554dcf2">range_read_distance</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g22bd0717784e34cb3a0762d78554dcf2"></a><!-- doxytag: member="rangefinder.c::range_read_distance" ref="g22bd0717784e34cb3a0762d78554dcf2" args="(int range_id)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int range_read_distance           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>range_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Read the distance from a rangefinder. 
+<p>
+Reads the distance measured by one of the rangefinders. This distance is in arbitrary units.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>range_id</em>&nbsp;</td><td>the rangefinder to use. This should be one of the constants IR1 - IR5.</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>the distance measured by the rangefinder</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__rangefinder.html#g52d0666b725e6d3a14b5bddc28190e59">range_init</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/analog_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/analog_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/analog_8h.html	(revision 62)
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: analog.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>analog.h File Reference</h1>Contains functions and definitions for using the ADC. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="analog_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g099995994c74b5fff8f7de4ff3eac550"></a><!-- doxytag: member="analog.h::AN0" ref="g099995994c74b5fff8f7de4ff3eac550" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g099995994c74b5fff8f7de4ff3eac550">AN0</a>&nbsp;&nbsp;&nbsp;0x00</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4903de2a52966c8dc2c20faf565d451d"></a><!-- doxytag: member="analog.h::AN1" ref="g4903de2a52966c8dc2c20faf565d451d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g4903de2a52966c8dc2c20faf565d451d">AN1</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9b0754e893d69a1e69e856853f70da1f"></a><!-- doxytag: member="analog.h::AN2" ref="g9b0754e893d69a1e69e856853f70da1f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g9b0754e893d69a1e69e856853f70da1f">AN2</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9f593faa38f1023698d74f03a457abe3"></a><!-- doxytag: member="analog.h::AN3" ref="g9f593faa38f1023698d74f03a457abe3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g9f593faa38f1023698d74f03a457abe3">AN3</a>&nbsp;&nbsp;&nbsp;0x03</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdc95f1e9cdc00268d7bca5885052171f"></a><!-- doxytag: member="analog.h::AN4" ref="gdc95f1e9cdc00268d7bca5885052171f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gdc95f1e9cdc00268d7bca5885052171f">AN4</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g99ed455a0d536be03f12eba18ccff71b"></a><!-- doxytag: member="analog.h::AN5" ref="g99ed455a0d536be03f12eba18ccff71b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g99ed455a0d536be03f12eba18ccff71b">AN5</a>&nbsp;&nbsp;&nbsp;0x05</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd63d6861c3fa5e606de5c18ada3b4d10"></a><!-- doxytag: member="analog.h::AN6" ref="gd63d6861c3fa5e606de5c18ada3b4d10" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gd63d6861c3fa5e606de5c18ada3b4d10">AN6</a>&nbsp;&nbsp;&nbsp;0x06</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g277d706ee82bd70459b63e85489c7074"></a><!-- doxytag: member="analog.h::AN7" ref="g277d706ee82bd70459b63e85489c7074" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g277d706ee82bd70459b63e85489c7074">AN7</a>&nbsp;&nbsp;&nbsp;0x07</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g28b64348820dbb25c903d24f2e38a8a7"></a><!-- doxytag: member="analog.h::AN8" ref="g28b64348820dbb25c903d24f2e38a8a7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g28b64348820dbb25c903d24f2e38a8a7">AN8</a>&nbsp;&nbsp;&nbsp;0x08</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 8. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2fb7e4f4e0ea1f172eef79ed1f92e15f"></a><!-- doxytag: member="analog.h::AN9" ref="g2fb7e4f4e0ea1f172eef79ed1f92e15f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g2fb7e4f4e0ea1f172eef79ed1f92e15f">AN9</a>&nbsp;&nbsp;&nbsp;0x09</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 9. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc63caaf5f7a06a02522cb7f90d6c1959"></a><!-- doxytag: member="analog.h::AN10" ref="gc63caaf5f7a06a02522cb7f90d6c1959" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gc63caaf5f7a06a02522cb7f90d6c1959">AN10</a>&nbsp;&nbsp;&nbsp;0x0a</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 10. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gdfeb79b00aaef4734408a910838f7872"></a><!-- doxytag: member="analog.h::AN11" ref="gdfeb79b00aaef4734408a910838f7872" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gdfeb79b00aaef4734408a910838f7872">AN11</a>&nbsp;&nbsp;&nbsp;0x0b</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 11. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7a50a07e69f38b6674b0494dfbc653f9"></a><!-- doxytag: member="analog.h::AN12" ref="g7a50a07e69f38b6674b0494dfbc653f9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g7a50a07e69f38b6674b0494dfbc653f9">AN12</a>&nbsp;&nbsp;&nbsp;0x0c</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 12. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbf80851ae45ddfe4bfdfc10541c255ad"></a><!-- doxytag: member="analog.h::AN13" ref="gbf80851ae45ddfe4bfdfc10541c255ad" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gbf80851ae45ddfe4bfdfc10541c255ad">AN13</a>&nbsp;&nbsp;&nbsp;0x0d</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 13. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g817772a1db513b734dfe4475c3616061"></a><!-- doxytag: member="analog.h::AN14" ref="g817772a1db513b734dfe4475c3616061" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g817772a1db513b734dfe4475c3616061">AN14</a>&nbsp;&nbsp;&nbsp;0x0e</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 14. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g797adbadae057ff7aa766d84b4f180f9"></a><!-- doxytag: member="analog.h::AN15" ref="g797adbadae057ff7aa766d84b4f180f9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g797adbadae057ff7aa766d84b4f180f9">AN15</a>&nbsp;&nbsp;&nbsp;0x0f</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port 15. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3434ce39eaea22b46a0100b7fd3a6f47"></a><!-- doxytag: member="analog.h::EXT_MUX" ref="g3434ce39eaea22b46a0100b7fd3a6f47" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g3434ce39eaea22b46a0100b7fd3a6f47">EXT_MUX</a>&nbsp;&nbsp;&nbsp;AN7</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">EXT_MUX analog port. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga6538d2deb002b8441891dc4e15cd104"></a><!-- doxytag: member="analog.h::WHEEL_PORT" ref="ga6538d2deb002b8441891dc4e15cd104" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#ga6538d2deb002b8441891dc4e15cd104">WHEEL_PORT</a>&nbsp;&nbsp;&nbsp;AN10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port for the wheel. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gadcd026a2c91fe96c8134619c87bb72a"></a><!-- doxytag: member="analog.h::BATT_PORT" ref="gadcd026a2c91fe96c8134619c87bb72a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gadcd026a2c91fe96c8134619c87bb72a">BATT_PORT</a>&nbsp;&nbsp;&nbsp;AN11</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Analog port for the battery voltage detector. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918">analog_init</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize analog ports.  <a href="group__analog.html#g55f66ff6f3449ef81d97b7e47f041918"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27">analog8</a> (int which)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an 8-bit number from an analog port.  <a href="group__analog.html#gf1211040ce2c54f12f98df7d47a4eb27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g875bf8cb165a3a288eb1aa2ac06be4f3">analog10</a> (int which)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a 10-bit number from an analog port.  <a href="group__analog.html#g875bf8cb165a3a288eb1aa2ac06be4f3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__analog.html#g973e63eb508819a37efe3231b6a39550">wheel</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read the position of the wheel.  <a href="group__analog.html#g973e63eb508819a37efe3231b6a39550"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains functions and definitions for using the ADC. 
+<p>
+Contains definitions and function prototypes for using the ADC to detect analog signals on pins AN0 - AN7. AN6 and AN7 are used for the wheel and battery.<p>
+The pins labeled E6 and E7 are external interrupt pins and are not related to analog.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club, based on firefly code by Tom Lauwers </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/doxygen.css
===================================================================
--- branches/charge_board/docs/libdragonfly/doxygen.css	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/doxygen.css	(revision 62)
@@ -0,0 +1,310 @@
+BODY,H1,H2,H3,H4,H5,H6,P,CENTER,TD,TH,UL,DL,DIV {
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+BODY,TD {
+       font-size: 90%;
+}
+H1 {
+	text-align: center;
+       font-size: 160%;
+}
+H2 {
+       font-size: 120%;
+}
+H3 {
+       font-size: 100%;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.nav {
+	width: 100%;
+	background-color: #e8eef2;
+	border: 1px solid #84b0c7;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 140%;
+}
+DIV.navtab {
+       background-color: #e8eef2;
+       border: 1px solid #84b0c7;
+       text-align: center;
+       margin: 2px;
+       margin-right: 15px;
+       padding: 2px;
+}
+TD.navtab {
+       font-size: 70%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+}
+A.qindex:hover {
+	text-decoration: none;
+	background-color: #ddddff;
+}
+A.qindexHL {
+	text-decoration: none;
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+	text-decoration: none;
+	background-color: #6666cc;
+	color: #ffffff;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code:link { text-decoration: none; font-weight: normal; color: #0000FF}
+A.code:visited { text-decoration: none; font-weight: normal; color: #0000FF}
+A.codeRef:link { font-weight: normal; color: #0000FF}
+A.codeRef:visited { font-weight: normal; color: #0000FF}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+.fragment {
+       font-family: Fixed, monospace;
+       font-size: 95%;
+}
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdPrefix {
+       background-color: #F4F4FB;
+       color: #606060;
+	font-size: 80%;
+}
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 90% }
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #e8eef2;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+	background-color: #e8eef2;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 80%;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: none;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.memTemplParams {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-top-style: solid;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+       color: #606060;
+	background-color: #FAFAFA;
+	font-size: 80%;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #e8eef2;
+}
+TD.tiny      { font-size: 75%;
+}
+a {
+	color: #1A41A8;
+}
+a:visited {
+	color: #2A3798;
+}
+.dirtab { padding: 4px;
+          border-collapse: collapse;
+          border: 1px solid #84b0c7;
+}
+TH.dirtab { background: #e8eef2;
+            font-weight: bold;
+}
+HR { height: 1px;
+     border: none;
+     border-top: 1px solid black;
+}
+
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x70.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x70.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x70.html	(revision 62)
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li id="current"><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>PIN_A0
+: <a class="el" href="group__dio.html#gd3a64360b1623d5314cbb8999cb86f99">dio.h</a><li>PIN_A1
+: <a class="el" href="group__dio.html#gceb8d227e063cc486808d5d41735a050">dio.h</a><li>PIN_A2
+: <a class="el" href="group__dio.html#ga181f8521480dfcc1eb2688075701a4c">dio.h</a><li>PIN_A3
+: <a class="el" href="group__dio.html#g933cca5ab119d5e74639e7ac5d120d8a">dio.h</a><li>PIN_A4
+: <a class="el" href="group__dio.html#gea5f553ed9a6c4dac77e9c77d0cd0391">dio.h</a><li>PIN_A5
+: <a class="el" href="group__dio.html#gb78a92a8cba92ec5664599083bcb2f52">dio.h</a><li>PIN_A6
+: <a class="el" href="group__dio.html#gfc06e9c4314680dcb8900c88079a954f">dio.h</a><li>PIN_A7
+: <a class="el" href="group__dio.html#g027cabbaecdcdfdc68fbd92f8e1922ac">dio.h</a><li>PIN_ADC0
+: <a class="el" href="group__dio.html#g44007fefe4c74b325caa7f43e3a6e716">dio.h</a><li>PIN_ADC1
+: <a class="el" href="group__dio.html#g5b86225ba7ed79b2224a3c561c5f3aa6">dio.h</a><li>PIN_ADC2
+: <a class="el" href="group__dio.html#gd4248fc02c8ddeaae385536349eb0cb7">dio.h</a><li>PIN_ADC3
+: <a class="el" href="group__dio.html#gbce7e56320e6301cf256a0ce26c56c0b">dio.h</a><li>PIN_ADC4
+: <a class="el" href="group__dio.html#gfc66b57b212407fc255f69fd6ead6404">dio.h</a><li>PIN_ADC5
+: <a class="el" href="group__dio.html#g701f2be23f28d8187d44159ada343be9">dio.h</a><li>PIN_ADC6
+: <a class="el" href="group__dio.html#g45f972962752d572ed471d052a35982f">dio.h</a><li>PIN_ADC7
+: <a class="el" href="group__dio.html#g254abf6fa8c8f85b3d1b927ee35a22b4">dio.h</a><li>PIN_AN0
+: <a class="el" href="group__dio.html#gb6451bdf35a387a5db4323fa5d36be41">dio.h</a><li>PIN_AN1
+: <a class="el" href="group__dio.html#ge5bf915d1d529da9379de10836283554">dio.h</a><li>PIN_AN2
+: <a class="el" href="group__dio.html#g3349fe5af4b9deab28132c4e5e75529b">dio.h</a><li>PIN_AN3
+: <a class="el" href="group__dio.html#g14a8708f056d5e595556c262adbbc09f">dio.h</a><li>PIN_AN4
+: <a class="el" href="group__dio.html#g2a33e134b96d4b5186aabc96edc52ee3">dio.h</a><li>PIN_AN5
+: <a class="el" href="group__dio.html#g92a11eaeaf053774343b9a677bb4d5e1">dio.h</a><li>PIN_AN6
+: <a class="el" href="group__dio.html#g9a09b3ad4931ca28bf25d72c759f578d">dio.h</a><li>PIN_AN7
+: <a class="el" href="group__dio.html#g7a5a85c782c9687ded37a870bce57102">dio.h</a><li>PIN_BATT
+: <a class="el" href="group__dio.html#g05fa96c4c8bfa63445224dfd27741aee">dio.h</a><li>PIN_BTN
+: <a class="el" href="group__dio.html#g92fdab197e388c3c44586db0b10a5eb9">dio.h</a><li>PIN_BTN1
+: <a class="el" href="group__dio.html#gb2909d57039bab16e3d67f3432e5364d">dio.h</a><li>PIN_BTN2
+: <a class="el" href="group__dio.html#g055e63d10caa23d102dd471ec4b1145d">dio.h</a><li>PIN_C0
+: <a class="el" href="group__dio.html#g5d6c3aa4f6f299e8a82d4d1295ae322b">dio.h</a><li>PIN_C1
+: <a class="el" href="group__dio.html#g3f39d54f92d708a3c807377eed1a2043">dio.h</a><li>PIN_C2
+: <a class="el" href="group__dio.html#g30f4452c1e3af3c0e210cd0208615399">dio.h</a><li>PIN_C3
+: <a class="el" href="group__dio.html#gce4355a55f5fca3452924c22e5133012">dio.h</a><li>PIN_C4
+: <a class="el" href="group__dio.html#gad1780e5368e328729b4bff24e98d30c">dio.h</a><li>PIN_C5
+: <a class="el" href="group__dio.html#gc3a295212fbf34fdd35d2a984bf75b80">dio.h</a><li>PIN_C6
+: <a class="el" href="group__dio.html#g1c5e268dfd2543c2d4099c51876fcc9b">dio.h</a><li>PIN_C7
+: <a class="el" href="group__dio.html#g0762e408c09c5c4a9d0f02e34b2b96d3">dio.h</a><li>PIN_E6
+: <a class="el" href="group__dio.html#g7e1867ce517711f7d73d13969dc007af">dio.h</a><li>PIN_E7
+: <a class="el" href="group__dio.html#gf152e5be854f0ea205b0ea10bcc2217c">dio.h</a><li>PIN_EXT_DIO1
+: <a class="el" href="group__dio.html#g22e4023e324755fd5666592588fc3c7b">dio.h</a><li>PIN_EXT_DIO2
+: <a class="el" href="group__dio.html#gf8dcfd33ece84d61943c4024504cb5e1">dio.h</a><li>PIN_LCD_COMMAND
+: <a class="el" href="group__dio.html#g9ad67c3da2c24b47f9926a7dfddea60a">dio.h</a><li>PIN_LCD_RESET
+: <a class="el" href="group__dio.html#gfbde03bd88d54597e008f40b8fea2f41">dio.h</a><li>PIN_LED1
+: <a class="el" href="group__dio.html#g1ee291f6ef730418abd5997176fe6b4c">dio.h</a><li>PIN_MISO
+: <a class="el" href="group__dio.html#g46bdd417480dec5cb9cf196af3c7489c">dio.h</a><li>PIN_MOSI
+: <a class="el" href="group__dio.html#gbaeddda4b992af7165ed898ab8b2b4ac">dio.h</a><li>PIN_RX0
+: <a class="el" href="group__dio.html#g6844ffe71c9cb20c6b4fe67289b58f40">dio.h</a><li>PIN_SCK
+: <a class="el" href="group__dio.html#g6a1a3e97267377d1b18bb9073192fdf1">dio.h</a><li>PIN_SCL
+: <a class="el" href="group__dio.html#gb4874028097ae0777b42cef20ffc913d">dio.h</a><li>PIN_SDA
+: <a class="el" href="group__dio.html#g5dfb6a7d75a520f42d21ec9a9f640342">dio.h</a><li>PIN_SS
+: <a class="el" href="group__dio.html#gb4b553591a495409d4f7cec4b6c3e754">dio.h</a><li>PIN_TX0
+: <a class="el" href="group__dio.html#g6c8efa60d2db765b46d88aa2a6df0318">dio.h</a><li>PIN_WHEEL
+: <a class="el" href="group__dio.html#g5bec113a8dc799a771a2b1d3ab256128">dio.h</a><li>PINK
+: <a class="el" href="group__orbs.html#gda419fe3b48fcf19daed7cc57ccf1174">lights.h</a><li>PURPLE
+: <a class="el" href="group__orbs.html#g0bb0b009e7a7390473ace4d98bd843c0">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/files.html
===================================================================
--- branches/charge_board/docs/libdragonfly/files.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/files.html	(revision 62)
@@ -0,0 +1,38 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: File Index</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>libdragonfly File List</h1>Here is a list of all documented files with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="analog_8h.html">analog.h</a> <a href="analog_8h-source.html">[code]</a></td><td class="indexvalue">Contains functions and definitions for using the ADC </td></tr>
+  <tr><td class="indexkey"><a class="el" href="battery_8h.html">battery.h</a> <a href="battery_8h-source.html">[code]</a></td><td class="indexvalue">Definitions for checking battery voltage </td></tr>
+  <tr><td class="indexkey"><a class="el" href="bom_8h.html">bom.h</a> <a href="bom_8h-source.html">[code]</a></td><td class="indexvalue">Definitions for using the BOM </td></tr>
+  <tr><td class="indexkey"><a class="el" href="buzzer_8h.html">buzzer.h</a> <a href="buzzer_8h-source.html">[code]</a></td><td class="indexvalue">Contains definitions for using the buzzer </td></tr>
+  <tr><td class="indexkey"><a class="el" href="dio_8h.html">dio.h</a> <a href="dio_8h-source.html">[code]</a></td><td class="indexvalue">Definitions for digital input / output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="dragonfly__lib_8h.html">dragonfly_lib.h</a> <a href="dragonfly__lib_8h-source.html">[code]</a></td><td class="indexvalue">Contains other include files </td></tr>
+  <tr><td class="indexkey"><a class="el" href="lcd_8h.html">lcd.h</a> <a href="lcd_8h-source.html">[code]</a></td><td class="indexvalue">Contains definitions for dealing with the LCD screen </td></tr>
+  <tr><td class="indexkey"><a class="el" href="lights_8h.html">lights.h</a> <a href="lights_8h-source.html">[code]</a></td><td class="indexvalue">Contains declarations for managing the orbs </td></tr>
+  <tr><td class="indexkey"><a class="el" href="motor_8h.html">motor.h</a> <a href="motor_8h-source.html">[code]</a></td><td class="indexvalue">Contains definitions for controlling the motors </td></tr>
+  <tr><td class="indexkey"><a class="el" href="move_8h.html">move.h</a> <a href="move_8h-source.html">[code]</a></td><td class="indexvalue">Contains definitions for controlling robot motion </td></tr>
+  <tr><td class="indexkey"><a class="el" href="rangefinder_8h.html">rangefinder.h</a> <a href="rangefinder_8h-source.html">[code]</a></td><td class="indexvalue">Contains rangefinder declarations and functions </td></tr>
+  <tr><td class="indexkey"><a class="el" href="serial_8h.html">serial.h</a> <a href="serial_8h-source.html">[code]</a></td><td class="indexvalue">Contains declarations for serial input and output </td></tr>
+  <tr><td class="indexkey"><a class="el" href="time_8h.html">time.h</a> <a href="time_8h-source.html">[code]</a></td><td class="indexvalue">Contains time-related functions and definitions </td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x62.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x62.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x62.html	(revision 62)
@@ -0,0 +1,74 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li id="current"><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_b">- b -</a></h3><ul>
+<li>B4
+: <a class="el" href="group__buzzer.html#g0bf59f84e29fb57d27314583365a88d6">buzzer.h</a><li>BACKWARD
+: <a class="el" href="group__motors.html#gdf445abfe1b77fa63f89e315ccc2f7f2">motor.h</a><li>BATT_PORT
+: <a class="el" href="group__analog.html#gadcd026a2c91fe96c8134619c87bb72a">analog.h</a><li>BATTERY_CHARINGV
+: <a class="el" href="group__battery.html#gc955a8295474a62e5faeaf28abf89c6b">battery.h</a><li>BATTERY_LOWV
+: <a class="el" href="group__battery.html#gb23d2e4155f65f05628d1b48430c6b18">battery.h</a><li>BATTERY_NORMALV
+: <a class="el" href="group__battery.html#g8d3e83b7f2ff00064ba16519d1589cfd">battery.h</a><li>BCK
+: <a class="el" href="group__move.html#gb8d9d2e1ff6a03ce3b45a32e0002a405">move.h</a><li>BLUE
+: <a class="el" href="group__orbs.html#g79d10e672abb49ad63eeaa8aaef57c38">lights.h</a><li>BTN1
+: <a class="el" href="group__dio.html#g3a4cc5e218cef7de139625a519e29ff3">dio.h</a><li>BTN2
+: <a class="el" href="group__dio.html#g9dc19cdd6944e087c077044296a1ad8e">dio.h</a><li>BUZZER
+: <a class="el" href="group__dragonfly.html#g145103118f6d9d1129aa4509cf214a13">dragonfly_lib.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x72.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x72.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x72.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li id="current"><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>RED
+: <a class="el" href="group__orbs.html#g8d23feea868a983c8c2b661e1e16972f">lights.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x64.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x64.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x64.html	(revision 62)
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li id="current"><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>D4
+: <a class="el" href="group__buzzer.html#g3d9bb178282c3cb69740c94ba1e48fed">buzzer.h</a><li>D4s
+: <a class="el" href="group__buzzer.html#g33eb0561dd16dd44c7c23519dd22540a">buzzer.h</a><li>digital_input()
+: <a class="el" href="group__dio.html#g6202143ed6d0f809095c21bfac32acdd">dio.h</a><li>digital_output()
+: <a class="el" href="group__dio.html#g67967857dcc26aeea8cdd0a53a9e138d">dio.h</a><li>digital_pull_up()
+: <a class="el" href="group__dio.html#g6bcadb9200f988ae733a51aa70467978">dio.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x74.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x74.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x74.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li id="current"><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>TWO_SECOND
+: <a class="el" href="group__time.html#g4c2dc0c899e1571596205f29fcc35cd6">time.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x66.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x66.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x66.html	(revision 62)
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li id="current"><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>F4
+: <a class="el" href="group__buzzer.html#g7fd7918aa90b0ce1dc7ca9fe7a00e9fb">buzzer.h</a><li>F4s
+: <a class="el" href="group__buzzer.html#g93ff98890b28a2833f1152cc95c3e628">buzzer.h</a><li>FAST_SPD
+: <a class="el" href="group__move.html#ga1f2e117ff854d46ca84f16a1eb8419a">move.h</a><li>FAST_TURN
+: <a class="el" href="group__move.html#gb900792066abf52697bd19cc5240ae24">move.h</a><li>FORWARD
+: <a class="el" href="group__motors.html#g6ddfdda7a062d10cff4a72b76b44aeb8">motor.h</a><li>FOUR_SECOND
+: <a class="el" href="group__time.html#g335312d1eed285bbc48a7f383ad78d97">time.h</a><li>FULL_SPD
+: <a class="el" href="group__move.html#g35819c1d24f97763dab51cd367514443">move.h</a><li>FWD
+: <a class="el" href="group__move.html#ga02f16883c5ce325e2dbb8c3835aa9a1">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/index.html
===================================================================
--- branches/charge_board/docs/libdragonfly/index.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/index.html	(revision 62)
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Main Page</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>libdragonfly Documentation</h1>
+<p>
+<h3 align="center">1.0 </h3><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/dio_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/dio_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/dio_8h-source.html	(revision 62)
@@ -0,0 +1,303 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: dio.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>dio.h</h1><a href="dio_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00012"></a>00012 <span class="preprocessor">#ifndef _DIO_H</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define _DIO_H</span>
+<a name="l00014"></a>00014 <span class="preprocessor"></span>
+<a name="l00015"></a>00015 <span class="comment">/*</span>
+<a name="l00016"></a>00016 <span class="comment">these are ALL the pins</span>
+<a name="l00017"></a>00017 <span class="comment">don't use unless you know what you're doing</span>
+<a name="l00018"></a>00018 <span class="comment">*/</span>
+<a name="l00019"></a>00019 
+<a name="l00020"></a>00020 <span class="comment">/*</span>
+<a name="l00021"></a>00021 <span class="comment">DIO pins on new dragonfly boards are shown below:</span>
+<a name="l00022"></a>00022 <span class="comment">-----------------------------------------------</span>
+<a name="l00023"></a>00023 <span class="comment">| _PIN_E6 | _PIN_E7 | _PIN_D2 | _PIN_D3 | VCC |</span>
+<a name="l00024"></a>00024 <span class="comment">-----------------------------------------------</span>
+<a name="l00025"></a>00025 <span class="comment">| _PIN_E2 | _PIN_E3 | _PIN_E4 | _PIN_E5 | GND |</span>
+<a name="l00026"></a>00026 <span class="comment">-----------------------------------------------</span>
+<a name="l00027"></a>00027 <span class="comment">*/</span>
+<a name="l00028"></a>00028 
+<a name="l00030"></a><a class="code" href="dio_8h.html#c03b8868a83d44a9b97de1cc0d7fe8e8">00030</a> <span class="preprocessor">#define _PORT_A 1</span>
+<a name="l00031"></a>00031 <span class="preprocessor"></span>
+<a name="l00032"></a><a class="code" href="dio_8h.html#da0ad7242f65b61351de29531659aaf3">00032</a> <span class="preprocessor">#define _PORT_B 2</span>
+<a name="l00033"></a>00033 <span class="preprocessor"></span>
+<a name="l00034"></a><a class="code" href="dio_8h.html#2f5cd37fd5831a67953d155ec3624187">00034</a> <span class="preprocessor">#define _PORT_C 3</span>
+<a name="l00035"></a>00035 <span class="preprocessor"></span>
+<a name="l00036"></a><a class="code" href="dio_8h.html#881c4ea9fdae76401a4005981f40887e">00036</a> <span class="preprocessor">#define _PORT_D 4</span>
+<a name="l00037"></a>00037 <span class="preprocessor"></span>
+<a name="l00038"></a><a class="code" href="dio_8h.html#48bd3d9b9db9d872bbdf4579864a6cba">00038</a> <span class="preprocessor">#define _PORT_E 5</span>
+<a name="l00039"></a>00039 <span class="preprocessor"></span>
+<a name="l00040"></a><a class="code" href="dio_8h.html#7f0278fc6e55e8e8a6f63c944e9779bd">00040</a> <span class="preprocessor">#define _PORT_F 6</span>
+<a name="l00041"></a>00041 <span class="preprocessor"></span>
+<a name="l00042"></a><a class="code" href="dio_8h.html#7c0f589b48ebb00d7a998ac3daaac11a">00042</a> <span class="preprocessor">#define _PORT_G 7</span>
+<a name="l00043"></a>00043 <span class="preprocessor"></span>
+<a name="l00045"></a><a class="code" href="dio_8h.html#51f04ff9f4fb24a6be30c56ce6f40693">00045</a> <span class="preprocessor">#define _PIN_A0 8</span>
+<a name="l00046"></a>00046 <span class="preprocessor"></span>
+<a name="l00047"></a><a class="code" href="dio_8h.html#4eb14fd2e59584018694829c303f917d">00047</a> <span class="preprocessor">#define _PIN_A1 9</span>
+<a name="l00048"></a>00048 <span class="preprocessor"></span>
+<a name="l00049"></a><a class="code" href="dio_8h.html#8addc957193d67ec0456ca4b91e6348a">00049</a> <span class="preprocessor">#define _PIN_A2 10</span>
+<a name="l00050"></a>00050 <span class="preprocessor"></span>
+<a name="l00051"></a><a class="code" href="dio_8h.html#d542d3d032328a77644041b683263b60">00051</a> <span class="preprocessor">#define _PIN_A3 11</span>
+<a name="l00052"></a>00052 <span class="preprocessor"></span>
+<a name="l00053"></a><a class="code" href="dio_8h.html#939eb745c1abd8ad357cbc7949071391">00053</a> <span class="preprocessor">#define _PIN_A4 12</span>
+<a name="l00054"></a>00054 <span class="preprocessor"></span>
+<a name="l00055"></a><a class="code" href="dio_8h.html#92c23c5ef5f0909f7252d46dee64f556">00055</a> <span class="preprocessor">#define _PIN_A5 13</span>
+<a name="l00056"></a>00056 <span class="preprocessor"></span>
+<a name="l00057"></a><a class="code" href="dio_8h.html#6b3bddc004c965e7425d85bf26b749dc">00057</a> <span class="preprocessor">#define _PIN_A6 14 </span>
+<a name="l00058"></a>00058 <span class="preprocessor"></span>
+<a name="l00059"></a><a class="code" href="dio_8h.html#c446f59a98dfb4a0668306f57bd1ecca">00059</a> <span class="preprocessor">#define _PIN_A7 15</span>
+<a name="l00060"></a>00060 <span class="preprocessor"></span>
+<a name="l00062"></a><a class="code" href="dio_8h.html#b4f305294f28e717999cef139b7caab0">00062</a> <span class="preprocessor">#define _PIN_B0 16</span>
+<a name="l00063"></a>00063 <span class="preprocessor"></span>
+<a name="l00064"></a><a class="code" href="dio_8h.html#bfe495b8eb044c08d0847c7d4043ea4f">00064</a> <span class="preprocessor">#define _PIN_B1 17</span>
+<a name="l00065"></a>00065 <span class="preprocessor"></span>
+<a name="l00066"></a><a class="code" href="dio_8h.html#fbe373570755ea8d3180703632224896">00066</a> <span class="preprocessor">#define _PIN_B2 18</span>
+<a name="l00067"></a>00067 <span class="preprocessor"></span>
+<a name="l00068"></a><a class="code" href="dio_8h.html#a760d7cb45c90094702c296999558f65">00068</a> <span class="preprocessor">#define _PIN_B3 19</span>
+<a name="l00069"></a>00069 <span class="preprocessor"></span>
+<a name="l00070"></a><a class="code" href="dio_8h.html#76ae9cc1b2c74f451ab638371285f18d">00070</a> <span class="preprocessor">#define _PIN_B4 20</span>
+<a name="l00071"></a>00071 <span class="preprocessor"></span>
+<a name="l00072"></a><a class="code" href="dio_8h.html#0fae583ff609c0543c9d8c1dab7e378d">00072</a> <span class="preprocessor">#define _PIN_B5 21</span>
+<a name="l00073"></a>00073 <span class="preprocessor"></span>
+<a name="l00074"></a><a class="code" href="dio_8h.html#4c2e6bdc02d9672de3795f3bbb3670b9">00074</a> <span class="preprocessor">#define _PIN_B6 22</span>
+<a name="l00075"></a>00075 <span class="preprocessor"></span>
+<a name="l00076"></a><a class="code" href="dio_8h.html#8415309f27a757e7c551906194c28e80">00076</a> <span class="preprocessor">#define _PIN_B7 23</span>
+<a name="l00077"></a>00077 <span class="preprocessor"></span>
+<a name="l00079"></a><a class="code" href="dio_8h.html#8b117e9361a991638bd82eea83ff001a">00079</a> <span class="preprocessor">#define _PIN_C0 24</span>
+<a name="l00080"></a>00080 <span class="preprocessor"></span>
+<a name="l00081"></a><a class="code" href="dio_8h.html#0c45f79d733ffbbbd7de2056893d6eb1">00081</a> <span class="preprocessor">#define _PIN_C1 25</span>
+<a name="l00082"></a>00082 <span class="preprocessor"></span>
+<a name="l00083"></a><a class="code" href="dio_8h.html#c01a3878ceb5a63e961bf3a305e74a06">00083</a> <span class="preprocessor">#define _PIN_C2 26</span>
+<a name="l00084"></a>00084 <span class="preprocessor"></span>
+<a name="l00085"></a><a class="code" href="dio_8h.html#bd8e9c9599a4c5f2c1571298b29d44bf">00085</a> <span class="preprocessor">#define _PIN_C3 27</span>
+<a name="l00086"></a>00086 <span class="preprocessor"></span>
+<a name="l00087"></a><a class="code" href="dio_8h.html#888ab2bc04575f1902e75398fb2843b4">00087</a> <span class="preprocessor">#define _PIN_C4 28</span>
+<a name="l00088"></a>00088 <span class="preprocessor"></span>
+<a name="l00089"></a><a class="code" href="dio_8h.html#e2c922d0d623cce421470e501b5cd01d">00089</a> <span class="preprocessor">#define _PIN_C5 29</span>
+<a name="l00090"></a>00090 <span class="preprocessor"></span>
+<a name="l00091"></a><a class="code" href="dio_8h.html#de6c0b894acec113cc6e83ddf1c6f4ad">00091</a> <span class="preprocessor">#define _PIN_C6 30</span>
+<a name="l00092"></a>00092 <span class="preprocessor"></span>
+<a name="l00093"></a><a class="code" href="dio_8h.html#94fc1c3551e878d00670be18dd98b01e">00093</a> <span class="preprocessor">#define _PIN_C7 31</span>
+<a name="l00094"></a>00094 <span class="preprocessor"></span>
+<a name="l00096"></a><a class="code" href="dio_8h.html#4b95d04e9712921644d2c9daca838ae1">00096</a> <span class="preprocessor">#define _PIN_D0 32  // pin DIO6 on new dragonfly boards</span>
+<a name="l00097"></a>00097 <span class="preprocessor"></span>
+<a name="l00098"></a><a class="code" href="dio_8h.html#e284f5774e84fe78764b3475a1ab7df3">00098</a> <span class="preprocessor">#define _PIN_D1 33  // pin DIO7</span>
+<a name="l00099"></a>00099 <span class="preprocessor"></span>
+<a name="l00100"></a><a class="code" href="dio_8h.html#bb9448fbe6bc6dcd64e35d7ffa00ca6d">00100</a> <span class="preprocessor">#define _PIN_D2 34</span>
+<a name="l00101"></a>00101 <span class="preprocessor"></span>
+<a name="l00102"></a><a class="code" href="dio_8h.html#e0acf61952e589ddc79359cc418eec17">00102</a> <span class="preprocessor">#define _PIN_D3 35</span>
+<a name="l00103"></a>00103 <span class="preprocessor"></span>
+<a name="l00104"></a><a class="code" href="dio_8h.html#2b237cd474a817c15832fd87146e6daa">00104</a> <span class="preprocessor">#define _PIN_D4 36</span>
+<a name="l00105"></a>00105 <span class="preprocessor"></span>
+<a name="l00106"></a><a class="code" href="dio_8h.html#70a748f97c4d4e751f2edd0fcbac4a7c">00106</a> <span class="preprocessor">#define _PIN_D5 37</span>
+<a name="l00107"></a>00107 <span class="preprocessor"></span>
+<a name="l00108"></a><a class="code" href="dio_8h.html#8a2da262330ccf12ac69a1822d3c091c">00108</a> <span class="preprocessor">#define _PIN_D6 38</span>
+<a name="l00109"></a>00109 <span class="preprocessor"></span>
+<a name="l00110"></a><a class="code" href="dio_8h.html#fc098c404f6e3003aef2ec0e0bc35acd">00110</a> <span class="preprocessor">#define _PIN_D7 39</span>
+<a name="l00111"></a>00111 <span class="preprocessor"></span>
+<a name="l00113"></a><a class="code" href="dio_8h.html#badf190bc1c23be12590868584135c22">00113</a> <span class="preprocessor">#define _PIN_E0 40</span>
+<a name="l00114"></a>00114 <span class="preprocessor"></span>
+<a name="l00115"></a><a class="code" href="dio_8h.html#e88599fd3bd196eacb91052ea05e18f3">00115</a> <span class="preprocessor">#define _PIN_E1 41</span>
+<a name="l00116"></a>00116 <span class="preprocessor"></span>
+<a name="l00117"></a><a class="code" href="dio_8h.html#62122fe3a2b5d08d964a2178e4015e79">00117</a> <span class="preprocessor">#define _PIN_E2 42  // pin DIO0</span>
+<a name="l00118"></a>00118 <span class="preprocessor"></span>
+<a name="l00119"></a><a class="code" href="dio_8h.html#e93d87d0523dfbb446a5909254f0ef2c">00119</a> <span class="preprocessor">#define _PIN_E3 43  // pin DIO1</span>
+<a name="l00120"></a>00120 <span class="preprocessor"></span>
+<a name="l00121"></a><a class="code" href="dio_8h.html#6859b74122e7d105fe3dd380b6763aca">00121</a> <span class="preprocessor">#define _PIN_E4 44  // pin DIO2</span>
+<a name="l00122"></a>00122 <span class="preprocessor"></span>
+<a name="l00123"></a><a class="code" href="dio_8h.html#19a858b324d285b261caa831df84d32f">00123</a> <span class="preprocessor">#define _PIN_E5 45  // pin DIO3</span>
+<a name="l00124"></a>00124 <span class="preprocessor"></span>
+<a name="l00125"></a><a class="code" href="dio_8h.html#04723017fa82410249e3e6393bca65af">00125</a> <span class="preprocessor">#define _PIN_E6 46  // pin DIO4</span>
+<a name="l00126"></a>00126 <span class="preprocessor"></span>
+<a name="l00127"></a><a class="code" href="dio_8h.html#5eb34c0e8ea6af1b8bbd3cbd8a92a600">00127</a> <span class="preprocessor">#define _PIN_E7 47  // pin DIO5</span>
+<a name="l00128"></a>00128 <span class="preprocessor"></span>
+<a name="l00130"></a><a class="code" href="dio_8h.html#da61cdc73ca993fd5f450183862fcef1">00130</a> <span class="preprocessor">#define _PIN_F0 48</span>
+<a name="l00131"></a>00131 <span class="preprocessor"></span>
+<a name="l00132"></a><a class="code" href="dio_8h.html#c0d7ed715f7b6982b94a0f791d62915b">00132</a> <span class="preprocessor">#define _PIN_F1 49</span>
+<a name="l00133"></a>00133 <span class="preprocessor"></span>
+<a name="l00134"></a><a class="code" href="dio_8h.html#91e39e9f2da5ec9515e7d961a058e069">00134</a> <span class="preprocessor">#define _PIN_F2 50</span>
+<a name="l00135"></a>00135 <span class="preprocessor"></span>
+<a name="l00136"></a><a class="code" href="dio_8h.html#847601cd0a3a8830bc38a9eef0b0d6a5">00136</a> <span class="preprocessor">#define _PIN_F3 51</span>
+<a name="l00137"></a>00137 <span class="preprocessor"></span>
+<a name="l00138"></a><a class="code" href="dio_8h.html#81722f76eb8b39d3f3f5678526e918c6">00138</a> <span class="preprocessor">#define _PIN_F4 52</span>
+<a name="l00139"></a>00139 <span class="preprocessor"></span>
+<a name="l00140"></a><a class="code" href="dio_8h.html#6655e7450006cec34ac55a0e7d63f0cd">00140</a> <span class="preprocessor">#define _PIN_F5 53</span>
+<a name="l00141"></a>00141 <span class="preprocessor"></span>
+<a name="l00142"></a><a class="code" href="dio_8h.html#6b042b1d986784315b7d1780af4e6325">00142</a> <span class="preprocessor">#define _PIN_F6 54</span>
+<a name="l00143"></a>00143 <span class="preprocessor"></span>
+<a name="l00144"></a><a class="code" href="dio_8h.html#cd2cf9c19a99cb3b883d44ddb8841aa6">00144</a> <span class="preprocessor">#define _PIN_F7 55</span>
+<a name="l00145"></a>00145 <span class="preprocessor"></span>
+<a name="l00147"></a><a class="code" href="dio_8h.html#67a762a16abd40507f84d45a1cc8fc60">00147</a> <span class="preprocessor">#define _PIN_G0 56</span>
+<a name="l00148"></a>00148 <span class="preprocessor"></span>
+<a name="l00149"></a><a class="code" href="dio_8h.html#1457bcf9a22d249b4907d0bdc6661e6f">00149</a> <span class="preprocessor">#define _PIN_WR 56</span>
+<a name="l00150"></a>00150 <span class="preprocessor"></span>
+<a name="l00151"></a><a class="code" href="dio_8h.html#cd22478361f403160ac78b6673bc1cc8">00151</a> <span class="preprocessor">#define _PIN_G1 57</span>
+<a name="l00152"></a>00152 <span class="preprocessor"></span>
+<a name="l00153"></a><a class="code" href="dio_8h.html#35b975ca202c33953772138fbe9987a1">00153</a> <span class="preprocessor">#define _PIN_RD 57</span>
+<a name="l00154"></a>00154 <span class="preprocessor"></span>
+<a name="l00155"></a><a class="code" href="dio_8h.html#d15640b2580aa575af9b4b3afb66d69e">00155</a> <span class="preprocessor">#define _PIN_G2 58</span>
+<a name="l00156"></a>00156 <span class="preprocessor"></span>
+<a name="l00157"></a><a class="code" href="dio_8h.html#b01e62102c2ea92ef5e6ddd4c8b10e7d">00157</a> <span class="preprocessor">#define _PIN_ALE 58</span>
+<a name="l00158"></a>00158 <span class="preprocessor"></span>
+<a name="l00159"></a><a class="code" href="dio_8h.html#b68ee88c80780acce271541468b57b01">00159</a> <span class="preprocessor">#define _PIN_G3 59</span>
+<a name="l00160"></a>00160 <span class="preprocessor"></span>
+<a name="l00161"></a><a class="code" href="dio_8h.html#1a989f2be615fdbb5d539c803ae85052">00161</a> <span class="preprocessor">#define _PIN_TOSC2 59</span>
+<a name="l00162"></a>00162 <span class="preprocessor"></span>
+<a name="l00163"></a><a class="code" href="dio_8h.html#8098eb56320b9f65520da4f3034168d8">00163</a> <span class="preprocessor">#define _PIN_G4 60</span>
+<a name="l00164"></a>00164 <span class="preprocessor"></span>
+<a name="l00165"></a><a class="code" href="dio_8h.html#4658177abc8db29571f67e68f50d5591">00165</a> <span class="preprocessor">#define _PIN_TOSC1 60</span>
+<a name="l00166"></a>00166 <span class="preprocessor"></span><span class="comment">//#define _PIN_G5 61</span>
+<a name="l00167"></a>00167 <span class="comment">//#define _PIN_G6 62</span>
+<a name="l00168"></a>00168 <span class="comment">//#define _PIN_G7 63</span>
+<a name="l00169"></a>00169 
+<a name="l00170"></a>00170 <span class="comment">/*</span>
+<a name="l00171"></a>00171 <span class="comment">These are the header pins (the ones you can connect things to)</span>
+<a name="l00172"></a>00172 <span class="comment">Feel free to use these</span>
+<a name="l00173"></a>00173 <span class="comment">*/</span>
+<a name="l00174"></a>00174 
+<a name="l00180"></a><a class="code" href="group__dio.html#gd3a64360b1623d5314cbb8999cb86f99">00180</a> <span class="preprocessor">#define PIN_A0 8</span>
+<a name="l00181"></a>00181 <span class="preprocessor"></span>
+<a name="l00182"></a><a class="code" href="group__dio.html#gceb8d227e063cc486808d5d41735a050">00182</a> <span class="preprocessor">#define PIN_A1 9</span>
+<a name="l00183"></a>00183 <span class="preprocessor"></span>
+<a name="l00184"></a><a class="code" href="group__dio.html#ga181f8521480dfcc1eb2688075701a4c">00184</a> <span class="preprocessor">#define PIN_A2 10</span>
+<a name="l00185"></a>00185 <span class="preprocessor"></span>
+<a name="l00186"></a><a class="code" href="group__dio.html#g933cca5ab119d5e74639e7ac5d120d8a">00186</a> <span class="preprocessor">#define PIN_A3 11</span>
+<a name="l00187"></a>00187 <span class="preprocessor"></span>
+<a name="l00188"></a><a class="code" href="group__dio.html#gea5f553ed9a6c4dac77e9c77d0cd0391">00188</a> <span class="preprocessor">#define PIN_A4 12</span>
+<a name="l00189"></a>00189 <span class="preprocessor"></span>
+<a name="l00190"></a><a class="code" href="group__dio.html#gb78a92a8cba92ec5664599083bcb2f52">00190</a> <span class="preprocessor">#define PIN_A5 13</span>
+<a name="l00191"></a>00191 <span class="preprocessor"></span>
+<a name="l00192"></a><a class="code" href="group__dio.html#gfc06e9c4314680dcb8900c88079a954f">00192</a> <span class="preprocessor">#define PIN_A6 14 </span>
+<a name="l00193"></a>00193 <span class="preprocessor"></span>
+<a name="l00194"></a><a class="code" href="group__dio.html#g027cabbaecdcdfdc68fbd92f8e1922ac">00194</a> <span class="preprocessor">#define PIN_A7 15</span>
+<a name="l00195"></a>00195 <span class="preprocessor"></span>
+<a name="l00197"></a><a class="code" href="group__dio.html#gb4b553591a495409d4f7cec4b6c3e754">00197</a> <span class="preprocessor">#define PIN_SS 16</span>
+<a name="l00198"></a>00198 <span class="preprocessor"></span>
+<a name="l00199"></a><a class="code" href="group__dio.html#g6a1a3e97267377d1b18bb9073192fdf1">00199</a> <span class="preprocessor">#define PIN_SCK 17</span>
+<a name="l00200"></a>00200 <span class="preprocessor"></span>
+<a name="l00201"></a><a class="code" href="group__dio.html#gbaeddda4b992af7165ed898ab8b2b4ac">00201</a> <span class="preprocessor">#define PIN_MOSI 18</span>
+<a name="l00202"></a>00202 <span class="preprocessor"></span>
+<a name="l00203"></a><a class="code" href="group__dio.html#g46bdd417480dec5cb9cf196af3c7489c">00203</a> <span class="preprocessor">#define PIN_MISO 19</span>
+<a name="l00204"></a>00204 <span class="preprocessor"></span>
+<a name="l00205"></a><a class="code" href="group__dio.html#g9ad67c3da2c24b47f9926a7dfddea60a">00205</a> <span class="preprocessor">#define PIN_LCD_COMMAND 20</span>
+<a name="l00206"></a>00206 <span class="preprocessor"></span>
+<a name="l00208"></a><a class="code" href="group__dio.html#g5d6c3aa4f6f299e8a82d4d1295ae322b">00208</a> <span class="preprocessor">#define PIN_C0 24</span>
+<a name="l00209"></a>00209 <span class="preprocessor"></span>
+<a name="l00210"></a><a class="code" href="group__dio.html#g3f39d54f92d708a3c807377eed1a2043">00210</a> <span class="preprocessor">#define PIN_C1 25</span>
+<a name="l00211"></a>00211 <span class="preprocessor"></span>
+<a name="l00212"></a><a class="code" href="group__dio.html#g30f4452c1e3af3c0e210cd0208615399">00212</a> <span class="preprocessor">#define PIN_C2 26</span>
+<a name="l00213"></a>00213 <span class="preprocessor"></span>
+<a name="l00214"></a><a class="code" href="group__dio.html#gce4355a55f5fca3452924c22e5133012">00214</a> <span class="preprocessor">#define PIN_C3 27</span>
+<a name="l00215"></a>00215 <span class="preprocessor"></span>
+<a name="l00216"></a><a class="code" href="group__dio.html#gad1780e5368e328729b4bff24e98d30c">00216</a> <span class="preprocessor">#define PIN_C4 28</span>
+<a name="l00217"></a>00217 <span class="preprocessor"></span>
+<a name="l00218"></a><a class="code" href="group__dio.html#gc3a295212fbf34fdd35d2a984bf75b80">00218</a> <span class="preprocessor">#define PIN_C5 29</span>
+<a name="l00219"></a>00219 <span class="preprocessor"></span>
+<a name="l00220"></a><a class="code" href="group__dio.html#g1c5e268dfd2543c2d4099c51876fcc9b">00220</a> <span class="preprocessor">#define PIN_C6 30</span>
+<a name="l00221"></a>00221 <span class="preprocessor"></span>
+<a name="l00222"></a><a class="code" href="group__dio.html#g0762e408c09c5c4a9d0f02e34b2b96d3">00222</a> <span class="preprocessor">#define PIN_C7 31</span>
+<a name="l00223"></a>00223 <span class="preprocessor"></span>
+<a name="l00225"></a><a class="code" href="group__dio.html#gb4874028097ae0777b42cef20ffc913d">00225</a> <span class="preprocessor">#define PIN_SCL 32</span>
+<a name="l00226"></a>00226 <span class="preprocessor"></span>
+<a name="l00227"></a><a class="code" href="group__dio.html#g5dfb6a7d75a520f42d21ec9a9f640342">00227</a> <span class="preprocessor">#define PIN_SDA 33</span>
+<a name="l00228"></a>00228 <span class="preprocessor"></span>
+<a name="l00230"></a><a class="code" href="group__dio.html#g6844ffe71c9cb20c6b4fe67289b58f40">00230</a> <span class="preprocessor">#define PIN_RX0 40</span>
+<a name="l00231"></a>00231 <span class="preprocessor"></span>
+<a name="l00232"></a><a class="code" href="group__dio.html#g6c8efa60d2db765b46d88aa2a6df0318">00232</a> <span class="preprocessor">#define PIN_TX0 41</span>
+<a name="l00233"></a>00233 <span class="preprocessor"></span>
+<a name="l00234"></a><a class="code" href="group__dio.html#gfbde03bd88d54597e008f40b8fea2f41">00234</a> <span class="preprocessor">#define PIN_LCD_RESET 42</span>
+<a name="l00235"></a>00235 <span class="preprocessor"></span>
+<a name="l00236"></a><a class="code" href="group__dio.html#g7e1867ce517711f7d73d13969dc007af">00236</a> <span class="preprocessor">#define PIN_E6 46</span>
+<a name="l00237"></a>00237 <span class="preprocessor"></span>
+<a name="l00238"></a><a class="code" href="group__dio.html#g22e4023e324755fd5666592588fc3c7b">00238</a> <span class="preprocessor">#define PIN_EXT_DIO1 46</span>
+<a name="l00239"></a>00239 <span class="preprocessor"></span>
+<a name="l00240"></a><a class="code" href="group__dio.html#gf152e5be854f0ea205b0ea10bcc2217c">00240</a> <span class="preprocessor">#define PIN_E7 47</span>
+<a name="l00241"></a>00241 <span class="preprocessor"></span>
+<a name="l00242"></a><a class="code" href="group__dio.html#gf8dcfd33ece84d61943c4024504cb5e1">00242</a> <span class="preprocessor">#define PIN_EXT_DIO2 48</span>
+<a name="l00243"></a>00243 <span class="preprocessor"></span>
+<a name="l00245"></a><a class="code" href="group__dio.html#gb6451bdf35a387a5db4323fa5d36be41">00245</a> <span class="preprocessor">#define PIN_AN0 48</span>
+<a name="l00246"></a>00246 <span class="preprocessor"></span>
+<a name="l00247"></a><a class="code" href="group__dio.html#g44007fefe4c74b325caa7f43e3a6e716">00247</a> <span class="preprocessor">#define PIN_ADC0 48</span>
+<a name="l00248"></a>00248 <span class="preprocessor"></span>
+<a name="l00249"></a><a class="code" href="group__dio.html#ge5bf915d1d529da9379de10836283554">00249</a> <span class="preprocessor">#define PIN_AN1 49</span>
+<a name="l00250"></a>00250 <span class="preprocessor"></span>
+<a name="l00251"></a><a class="code" href="group__dio.html#g5b86225ba7ed79b2224a3c561c5f3aa6">00251</a> <span class="preprocessor">#define PIN_ADC1 49</span>
+<a name="l00252"></a>00252 <span class="preprocessor"></span>
+<a name="l00253"></a><a class="code" href="group__dio.html#g3349fe5af4b9deab28132c4e5e75529b">00253</a> <span class="preprocessor">#define PIN_AN2 50</span>
+<a name="l00254"></a>00254 <span class="preprocessor"></span>
+<a name="l00255"></a><a class="code" href="group__dio.html#gd4248fc02c8ddeaae385536349eb0cb7">00255</a> <span class="preprocessor">#define PIN_ADC2 50</span>
+<a name="l00256"></a>00256 <span class="preprocessor"></span>
+<a name="l00257"></a><a class="code" href="group__dio.html#g14a8708f056d5e595556c262adbbc09f">00257</a> <span class="preprocessor">#define PIN_AN3 51</span>
+<a name="l00258"></a>00258 <span class="preprocessor"></span>
+<a name="l00259"></a><a class="code" href="group__dio.html#gbce7e56320e6301cf256a0ce26c56c0b">00259</a> <span class="preprocessor">#define PIN_ADC3 51</span>
+<a name="l00260"></a>00260 <span class="preprocessor"></span>
+<a name="l00261"></a><a class="code" href="group__dio.html#g2a33e134b96d4b5186aabc96edc52ee3">00261</a> <span class="preprocessor">#define PIN_AN4 52</span>
+<a name="l00262"></a>00262 <span class="preprocessor"></span>
+<a name="l00263"></a><a class="code" href="group__dio.html#gfc66b57b212407fc255f69fd6ead6404">00263</a> <span class="preprocessor">#define PIN_ADC4 52</span>
+<a name="l00264"></a>00264 <span class="preprocessor"></span>
+<a name="l00265"></a><a class="code" href="group__dio.html#g92a11eaeaf053774343b9a677bb4d5e1">00265</a> <span class="preprocessor">#define PIN_AN5 53</span>
+<a name="l00266"></a>00266 <span class="preprocessor"></span>
+<a name="l00267"></a><a class="code" href="group__dio.html#g701f2be23f28d8187d44159ada343be9">00267</a> <span class="preprocessor">#define PIN_ADC5 53</span>
+<a name="l00268"></a>00268 <span class="preprocessor"></span>
+<a name="l00269"></a><a class="code" href="group__dio.html#g9a09b3ad4931ca28bf25d72c759f578d">00269</a> <span class="preprocessor">#define PIN_AN6 54</span>
+<a name="l00270"></a>00270 <span class="preprocessor"></span>
+<a name="l00271"></a><a class="code" href="group__dio.html#g45f972962752d572ed471d052a35982f">00271</a> <span class="preprocessor">#define PIN_ADC6 54</span>
+<a name="l00272"></a>00272 <span class="preprocessor"></span>
+<a name="l00273"></a><a class="code" href="group__dio.html#g7a5a85c782c9687ded37a870bce57102">00273</a> <span class="preprocessor">#define PIN_AN7 55</span>
+<a name="l00274"></a>00274 <span class="preprocessor"></span>
+<a name="l00275"></a><a class="code" href="group__dio.html#g254abf6fa8c8f85b3d1b927ee35a22b4">00275</a> <span class="preprocessor">#define PIN_ADC7 55</span>
+<a name="l00276"></a>00276 <span class="preprocessor"></span>
+<a name="l00278"></a><a class="code" href="group__dio.html#g5bec113a8dc799a771a2b1d3ab256128">00278</a> <span class="preprocessor">#define PIN_WHEEL 54</span>
+<a name="l00279"></a>00279 <span class="preprocessor"></span>
+<a name="l00280"></a><a class="code" href="group__dio.html#g05fa96c4c8bfa63445224dfd27741aee">00280</a> <span class="preprocessor">#define PIN_BATT 55</span>
+<a name="l00281"></a>00281 <span class="preprocessor"></span>
+<a name="l00283"></a><a class="code" href="group__dio.html#gb2909d57039bab16e3d67f3432e5364d">00283</a> <span class="preprocessor">#define PIN_BTN1 56</span>
+<a name="l00284"></a>00284 <span class="preprocessor"></span>
+<a name="l00285"></a><a class="code" href="group__dio.html#g055e63d10caa23d102dd471ec4b1145d">00285</a> <span class="preprocessor">#define PIN_BTN2 57</span>
+<a name="l00286"></a>00286 <span class="preprocessor"></span>
+<a name="l00288"></a><a class="code" href="group__dio.html#g1ee291f6ef730418abd5997176fe6b4c">00288</a> <span class="preprocessor">#define PIN_LED1 58</span>
+<a name="l00289"></a>00289 <span class="preprocessor"></span>
+<a name="l00290"></a>00290 <span class="comment">/* Buttons */</span>
+<a name="l00292"></a><a class="code" href="group__dio.html#g92fdab197e388c3c44586db0b10a5eb9">00292</a> <span class="preprocessor">#define PIN_BTN PING</span>
+<a name="l00293"></a>00293 <span class="preprocessor"></span>
+<a name="l00294"></a><a class="code" href="group__dio.html#g9dc19cdd6944e087c077044296a1ad8e">00294</a> <span class="preprocessor">#define BTN2 PING1</span>
+<a name="l00295"></a>00295 <span class="preprocessor"></span>
+<a name="l00296"></a><a class="code" href="group__dio.html#g3a4cc5e218cef7de139625a519e29ff3">00296</a> <span class="preprocessor">#define BTN1 PING0</span>
+<a name="l00297"></a>00297 <span class="preprocessor"></span>
+<a name="l00299"></a>00299 <span class="keywordtype">int</span> <a class="code" href="group__dio.html#g6202143ed6d0f809095c21bfac32acdd">digital_input</a>(<span class="keywordtype">int</span>);
+<a name="l00301"></a>00301 <span class="keywordtype">void</span> <a class="code" href="group__dio.html#g67967857dcc26aeea8cdd0a53a9e138d">digital_output</a>(<span class="keywordtype">int</span> bit, <span class="keywordtype">int</span> val);
+<a name="l00303"></a>00303 <span class="keywordtype">void</span> <a class="code" href="group__dio.html#g6bcadb9200f988ae733a51aa70467978">digital_pull_up</a>(<span class="keywordtype">int</span>);
+<a name="l00304"></a>00304 
+<a name="l00306"></a>00306 <span class="keywordtype">int</span> <a class="code" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">button1_read</a>( <span class="keywordtype">void</span> );
+<a name="l00308"></a>00308 <span class="keywordtype">int</span> <a class="code" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">button1_click</a>( <span class="keywordtype">void</span> );
+<a name="l00310"></a>00310 <span class="keywordtype">void</span> <a class="code" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">button1_wait</a>( <span class="keywordtype">void</span> );
+<a name="l00311"></a>00311 
+<a name="l00313"></a>00313 <span class="keywordtype">int</span> <a class="code" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">button2_read</a>( <span class="keywordtype">void</span> );
+<a name="l00315"></a>00315 <span class="keywordtype">int</span> <a class="code" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">button2_click</a>( <span class="keywordtype">void</span> );
+<a name="l00317"></a>00317 <span class="keywordtype">void</span> <a class="code" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">button2_wait</a>( <span class="keywordtype">void</span> );
+<a name="l00318"></a>00318  <span class="comment">// end addtogroup</span>
+<a name="l00320"></a>00320 
+<a name="l00321"></a>00321 <span class="preprocessor">#endif</span>
+<a name="l00322"></a>00322 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_0x68.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_0x68.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_0x68.html	(revision 62)
@@ -0,0 +1,65 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li id="current"><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html#index__"><span>_</span></a></li>
+    <li><a href="globals_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_0x67.html#index_g"><span>g</span></a></li>
+    <li id="current"><a href="globals_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_0x77.html#index_w"><span>w</span></a></li>
+    <li><a href="globals_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>HALF_SECOND
+: <a class="el" href="group__time.html#gf95f27544f39827250d6bef6fa5fe18e">time.h</a><li>HALF_SPD
+: <a class="el" href="group__move.html#ga0dd7c6a61a43fb8a3698988c414a9bf">move.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/dragonfly__lib_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/dragonfly__lib_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/dragonfly__lib_8h.html	(revision 62)
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: dragonfly_lib.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>dragonfly_lib.h File Reference</h1>Contains other include files. <a href="#_details">More...</a>
+<p>
+<code>#include &lt;inttypes.h&gt;</code><br>
+<code>#include &lt;stdio.h&gt;</code><br>
+<code>#include &lt;stdlib.h&gt;</code><br>
+<code>#include &lt;avr/io.h&gt;</code><br>
+<code>#include &lt;avr/interrupt.h&gt;</code><br>
+<code>#include &lt;util/delay.h&gt;</code><br>
+<code>#include &lt;util/twi.h&gt;</code><br>
+<code>#include &lt;<a class="el" href="analog_8h-source.html">analog.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="dio_8h-source.html">dio.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="time_8h-source.html">time.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="lcd_8h-source.html">lcd.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="lights_8h-source.html">lights.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="motor_8h-source.html">motor.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="serial_8h-source.html">serial.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="buzzer_8h-source.html">buzzer.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="rangefinder_8h-source.html">rangefinder.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="bom_8h-source.html">bom.h</a>&gt;</code><br>
+<code>#include &lt;<a class="el" href="move_8h-source.html">move.h</a>&gt;</code><br>
+
+<p>
+<a href="dragonfly__lib_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd42aa2404559d4a465d5d45e857f2881"></a><!-- doxytag: member="dragonfly_lib.h::ANALOG" ref="gd42aa2404559d4a465d5d45e857f2881" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#gd42aa2404559d4a465d5d45e857f2881">ANALOG</a>&nbsp;&nbsp;&nbsp;0x01</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize analog. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gae3f0b4211ba45d265973d40ccbb5fd1"></a><!-- doxytag: member="dragonfly_lib.h::SERIAL" ref="gae3f0b4211ba45d265973d40ccbb5fd1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#gae3f0b4211ba45d265973d40ccbb5fd1">SERIAL</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize serial communications. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g779bf099075a999d1074357fccbd466b"></a><!-- doxytag: member="dragonfly_lib.h::USB" ref="g779bf099075a999d1074357fccbd466b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g779bf099075a999d1074357fccbd466b">USB</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize USB communications. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g46fff4184b5d787de1ed367b97cb6091"></a><!-- doxytag: member="dragonfly_lib.h::COMM" ref="g46fff4184b5d787de1ed367b97cb6091" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g46fff4184b5d787de1ed367b97cb6091">COMM</a>&nbsp;&nbsp;&nbsp;0x02</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize communications. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g24a9b050b733edb162cbeb44b1a417b1"></a><!-- doxytag: member="dragonfly_lib.h::ORB" ref="g24a9b050b733edb162cbeb44b1a417b1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g24a9b050b733edb162cbeb44b1a417b1">ORB</a>&nbsp;&nbsp;&nbsp;0x04</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the orb. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9bb31bba359fbb679910df0a6efde5a3"></a><!-- doxytag: member="dragonfly_lib.h::MOTORS" ref="g9bb31bba359fbb679910df0a6efde5a3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g9bb31bba359fbb679910df0a6efde5a3">MOTORS</a>&nbsp;&nbsp;&nbsp;0x08</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the motors. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7baed4559391f95790fea2b456a22b68"></a><!-- doxytag: member="dragonfly_lib.h::SERVOS" ref="g7baed4559391f95790fea2b456a22b68" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g7baed4559391f95790fea2b456a22b68">SERVOS</a>&nbsp;&nbsp;&nbsp;0x10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the servos. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g457a9aa93dbb216459873a30bdb4d84a"></a><!-- doxytag: member="dragonfly_lib.h::I2C" ref="g457a9aa93dbb216459873a30bdb4d84a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g457a9aa93dbb216459873a30bdb4d84a">I2C</a>&nbsp;&nbsp;&nbsp;0x20</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize I2C. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g145103118f6d9d1129aa4509cf214a13"></a><!-- doxytag: member="dragonfly_lib.h::BUZZER" ref="g145103118f6d9d1129aa4509cf214a13" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g145103118f6d9d1129aa4509cf214a13">BUZZER</a>&nbsp;&nbsp;&nbsp;0x40</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the buzzer. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbf2d80992dcfabfd1668184c3dff2733"></a><!-- doxytag: member="dragonfly_lib.h::LCD" ref="gbf2d80992dcfabfd1668184c3dff2733" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#gbf2d80992dcfabfd1668184c3dff2733">LCD</a>&nbsp;&nbsp;&nbsp;0x80</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the LCD screen. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1252cf7a07df96ed2561ae605eaca197"></a><!-- doxytag: member="dragonfly_lib.h::ALL_ON" ref="g1252cf7a07df96ed2561ae605eaca197" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g1252cf7a07df96ed2561ae605eaca197">ALL_ON</a>&nbsp;&nbsp;&nbsp;0xFF</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize everything. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g8124e2c32bf25208586d500e45ba5fe3">dragonfly_init</a> (int config)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the board.  <a href="group__dragonfly.html#g8124e2c32bf25208586d500e45ba5fe3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dragonfly.html#g3aea9deb2a0bfea9ff05a898f4822e31">reset</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reset the robot.  <a href="group__dragonfly.html#g3aea9deb2a0bfea9ff05a898f4822e31"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Contains other include files. 
+<p>
+Include this file for all the functionality of libdragonfly.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/group__time.html
===================================================================
--- branches/charge_board/docs/libdragonfly/group__time.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/group__time.html	(revision 62)
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Time</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<h1>Time</h1>Time functions.  
+<a href="#_details">More...</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd271145628da4e0e85e3e2486d117713"></a><!-- doxytag: member="time::SIXTEENTH_SECOND" ref="gd271145628da4e0e85e3e2486d117713" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#gd271145628da4e0e85e3e2486d117713">SIXTEENTH_SECOND</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A sixteenth of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7bdae984203001070e9abeb3190f844a"></a><!-- doxytag: member="time::EIGTH_SECOND" ref="g7bdae984203001070e9abeb3190f844a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g7bdae984203001070e9abeb3190f844a">EIGTH_SECOND</a>&nbsp;&nbsp;&nbsp;2</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">An eighth of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0b2a348d9afca1f1182bc2bb2aa6a3d1"></a><!-- doxytag: member="time::QUARTER_SECOND" ref="g0b2a348d9afca1f1182bc2bb2aa6a3d1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g0b2a348d9afca1f1182bc2bb2aa6a3d1">QUARTER_SECOND</a>&nbsp;&nbsp;&nbsp;4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">A quarter of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf95f27544f39827250d6bef6fa5fe18e"></a><!-- doxytag: member="time::HALF_SECOND" ref="gf95f27544f39827250d6bef6fa5fe18e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#gf95f27544f39827250d6bef6fa5fe18e">HALF_SECOND</a>&nbsp;&nbsp;&nbsp;8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Half of a second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g94212be2394d2d37d9dfd33d07d82dba"></a><!-- doxytag: member="time::SECOND" ref="g94212be2394d2d37d9dfd33d07d82dba" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g94212be2394d2d37d9dfd33d07d82dba">SECOND</a>&nbsp;&nbsp;&nbsp;16</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">One second. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4c2dc0c899e1571596205f29fcc35cd6"></a><!-- doxytag: member="time::TWO_SECOND" ref="g4c2dc0c899e1571596205f29fcc35cd6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g4c2dc0c899e1571596205f29fcc35cd6">TWO_SECOND</a>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Two seconds. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g335312d1eed285bbc48a7f383ad78d97"></a><!-- doxytag: member="time::FOUR_SECOND" ref="g335312d1eed285bbc48a7f383ad78d97" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g335312d1eed285bbc48a7f383ad78d97">FOUR_SECOND</a>&nbsp;&nbsp;&nbsp;64</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Four seconds. <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g8aa473f8ae9a91df4bc9ea700983c72d">delay_ms</a> (int ms)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delay execution for the specified time.  <a href="#g8aa473f8ae9a91df4bc9ea700983c72d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g4b8a034dd8e994f4a1af612806f7c553">rtc_init</a> (int prescale_opt, void(*rtc_func)(void))</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enable the realtime clock.  <a href="#g4b8a034dd8e994f4a1af612806f7c553"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g5c7f2bf39314463dd5f4913e05ca991d">rtc_get</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the value of the realtime clock.  <a href="#g5c7f2bf39314463dd5f4913e05ca991d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__time.html#g83ae542199d1c0e964aff89537d686a3">rtc_reset</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reset the counter of the realtime clock.  <a href="#g83ae542199d1c0e964aff89537d686a3"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Time functions. 
+<p>
+Functions dealing with time. <hr><h2>Function Documentation</h2>
+<a class="anchor" name="g8aa473f8ae9a91df4bc9ea700983c72d"></a><!-- doxytag: member="time.c::delay_ms" ref="g8aa473f8ae9a91df4bc9ea700983c72d" args="(int ms)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void delay_ms           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>ms</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Delay execution for the specified time. 
+<p>
+Delays for the specified number of milliseconds. The accuracy of this function is unknown.<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ms</em>&nbsp;</td><td>the number of milliseconds to delay for </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g5c7f2bf39314463dd5f4913e05ca991d"></a><!-- doxytag: member="time.c::rtc_get" ref="g5c7f2bf39314463dd5f4913e05ca991d" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int rtc_get           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get the value of the realtime clock. 
+<p>
+Returns the time elapsed in seconds since the last call to rtc_init or rtc_reset.<p>
+<dl compact><dt><b>Returns:</b></dt><dd>the number of seconds since the last call to rtc_init or rtc_reset</dd></dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__time.html#g4b8a034dd8e994f4a1af612806f7c553">rtc_init</a>, <a class="el" href="group__time.html#g83ae542199d1c0e964aff89537d686a3">rtc_reset</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g4b8a034dd8e994f4a1af612806f7c553"></a><!-- doxytag: member="time.c::rtc_init" ref="g4b8a034dd8e994f4a1af612806f7c553" args="(int prescale_opt, void(*rtc_func)(void))" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void rtc_init           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>prescale_opt</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void(*)(void)&nbsp;</td>
+          <td class="mdname" nowrap> <em>rtc_func</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Enable the realtime clock. 
+<p>
+Initializes the real time clock. Prescales are defined in <a class="el" href="time_8h.html">time.h</a>. For example, SECOND will give 1 second. The specified function is called every clock tick. For the real time clock to activate, interrupts must be enabled. (through sei() )<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>prescale_opt</em>&nbsp;</td><td>the period with which the timer is triggered </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rtc_func</em>&nbsp;</td><td>the function called when the timer is triggered</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__time.html#g5c7f2bf39314463dd5f4913e05ca991d">rtc_get</a>, <a class="el" href="group__time.html#g83ae542199d1c0e964aff89537d686a3">rtc_reset</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="g83ae542199d1c0e964aff89537d686a3"></a><!-- doxytag: member="time.c::rtc_reset" ref="g83ae542199d1c0e964aff89537d686a3" args="(void)" --><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void rtc_reset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reset the counter of the realtime clock. 
+<p>
+Resets the real time clock counter to 0.<p>
+<dl compact><dt><b>See also:</b></dt><dd><a class="el" href="group__time.html#g4b8a034dd8e994f4a1af612806f7c553">rtc_init</a>, <a class="el" href="group__time.html#g5c7f2bf39314463dd5f4913e05ca991d">rtc_get</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/globals_defs_0x78.html
===================================================================
--- branches/charge_board/docs/libdragonfly/globals_defs_0x78.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/globals_defs_0x78.html	(revision 62)
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: Data Fields</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li id="current"><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals.html"><span>All</span></a></li>
+    <li><a href="globals_func.html"><span>Functions</span></a></li>
+    <li id="current"><a href="globals_defs.html"><span>Defines</span></a></li>
+  </ul>
+</div>
+<div class="tabs">
+  <ul>
+    <li><a href="globals_defs.html#index__"><span>_</span></a></li>
+    <li><a href="globals_defs_0x61.html#index_a"><span>a</span></a></li>
+    <li><a href="globals_defs_0x62.html#index_b"><span>b</span></a></li>
+    <li><a href="globals_defs_0x63.html#index_c"><span>c</span></a></li>
+    <li><a href="globals_defs_0x64.html#index_d"><span>d</span></a></li>
+    <li><a href="globals_defs_0x65.html#index_e"><span>e</span></a></li>
+    <li><a href="globals_defs_0x66.html#index_f"><span>f</span></a></li>
+    <li><a href="globals_defs_0x67.html#index_g"><span>g</span></a></li>
+    <li><a href="globals_defs_0x68.html#index_h"><span>h</span></a></li>
+    <li><a href="globals_defs_0x69.html#index_i"><span>i</span></a></li>
+    <li><a href="globals_defs_0x6c.html#index_l"><span>l</span></a></li>
+    <li><a href="globals_defs_0x6d.html#index_m"><span>m</span></a></li>
+    <li><a href="globals_defs_0x6e.html#index_n"><span>n</span></a></li>
+    <li><a href="globals_defs_0x6f.html#index_o"><span>o</span></a></li>
+    <li><a href="globals_defs_0x70.html#index_p"><span>p</span></a></li>
+    <li><a href="globals_defs_0x71.html#index_q"><span>q</span></a></li>
+    <li><a href="globals_defs_0x72.html#index_r"><span>r</span></a></li>
+    <li><a href="globals_defs_0x73.html#index_s"><span>s</span></a></li>
+    <li><a href="globals_defs_0x74.html#index_t"><span>t</span></a></li>
+    <li><a href="globals_defs_0x75.html#index_u"><span>u</span></a></li>
+    <li><a href="globals_defs_0x77.html#index_w"><span>w</span></a></li>
+    <li id="current"><a href="globals_defs_0x78.html#index_x"><span>x</span></a></li>
+    <li><a href="globals_defs_0x79.html#index_y"><span>y</span></a></li>
+  </ul>
+</div>
+
+<p>
+&nbsp;
+<p>
+<h3><a class="anchor" name="index_x">- x -</a></h3><ul>
+<li>XBEE_BAUD
+: <a class="el" href="group__xbee.html#g7125fc8f3df24a2db8e074983206b054">serial.h</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/dio_8h.html
===================================================================
--- branches/charge_board/docs/libdragonfly/dio_8h.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/dio_8h.html	(revision 62)
@@ -0,0 +1,540 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: dio.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>dio.h File Reference</h1>Definitions for digital input / output. <a href="#_details">More...</a>
+<p>
+
+<p>
+<a href="dio_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c03b8868a83d44a9b97de1cc0d7fe8e8"></a><!-- doxytag: member="dio.h::_PORT_A" ref="c03b8868a83d44a9b97de1cc0d7fe8e8" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#c03b8868a83d44a9b97de1cc0d7fe8e8">_PORT_A</a>&nbsp;&nbsp;&nbsp;1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port A. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da0ad7242f65b61351de29531659aaf3"></a><!-- doxytag: member="dio.h::_PORT_B" ref="da0ad7242f65b61351de29531659aaf3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#da0ad7242f65b61351de29531659aaf3">_PORT_B</a>&nbsp;&nbsp;&nbsp;2</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port B. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2f5cd37fd5831a67953d155ec3624187"></a><!-- doxytag: member="dio.h::_PORT_C" ref="2f5cd37fd5831a67953d155ec3624187" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#2f5cd37fd5831a67953d155ec3624187">_PORT_C</a>&nbsp;&nbsp;&nbsp;3</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port C. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="881c4ea9fdae76401a4005981f40887e"></a><!-- doxytag: member="dio.h::_PORT_D" ref="881c4ea9fdae76401a4005981f40887e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#881c4ea9fdae76401a4005981f40887e">_PORT_D</a>&nbsp;&nbsp;&nbsp;4</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port D. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="48bd3d9b9db9d872bbdf4579864a6cba"></a><!-- doxytag: member="dio.h::_PORT_E" ref="48bd3d9b9db9d872bbdf4579864a6cba" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#48bd3d9b9db9d872bbdf4579864a6cba">_PORT_E</a>&nbsp;&nbsp;&nbsp;5</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port E. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7f0278fc6e55e8e8a6f63c944e9779bd"></a><!-- doxytag: member="dio.h::_PORT_F" ref="7f0278fc6e55e8e8a6f63c944e9779bd" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#7f0278fc6e55e8e8a6f63c944e9779bd">_PORT_F</a>&nbsp;&nbsp;&nbsp;6</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port F. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="7c0f589b48ebb00d7a998ac3daaac11a"></a><!-- doxytag: member="dio.h::_PORT_G" ref="7c0f589b48ebb00d7a998ac3daaac11a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#7c0f589b48ebb00d7a998ac3daaac11a">_PORT_G</a>&nbsp;&nbsp;&nbsp;7</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Port G. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="51f04ff9f4fb24a6be30c56ce6f40693"></a><!-- doxytag: member="dio.h::_PIN_A0" ref="51f04ff9f4fb24a6be30c56ce6f40693" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#51f04ff9f4fb24a6be30c56ce6f40693">_PIN_A0</a>&nbsp;&nbsp;&nbsp;8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4eb14fd2e59584018694829c303f917d"></a><!-- doxytag: member="dio.h::_PIN_A1" ref="4eb14fd2e59584018694829c303f917d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#4eb14fd2e59584018694829c303f917d">_PIN_A1</a>&nbsp;&nbsp;&nbsp;9</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8addc957193d67ec0456ca4b91e6348a"></a><!-- doxytag: member="dio.h::_PIN_A2" ref="8addc957193d67ec0456ca4b91e6348a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#8addc957193d67ec0456ca4b91e6348a">_PIN_A2</a>&nbsp;&nbsp;&nbsp;10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d542d3d032328a77644041b683263b60"></a><!-- doxytag: member="dio.h::_PIN_A3" ref="d542d3d032328a77644041b683263b60" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#d542d3d032328a77644041b683263b60">_PIN_A3</a>&nbsp;&nbsp;&nbsp;11</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="939eb745c1abd8ad357cbc7949071391"></a><!-- doxytag: member="dio.h::_PIN_A4" ref="939eb745c1abd8ad357cbc7949071391" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#939eb745c1abd8ad357cbc7949071391">_PIN_A4</a>&nbsp;&nbsp;&nbsp;12</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="92c23c5ef5f0909f7252d46dee64f556"></a><!-- doxytag: member="dio.h::_PIN_A5" ref="92c23c5ef5f0909f7252d46dee64f556" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#92c23c5ef5f0909f7252d46dee64f556">_PIN_A5</a>&nbsp;&nbsp;&nbsp;13</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b3bddc004c965e7425d85bf26b749dc"></a><!-- doxytag: member="dio.h::_PIN_A6" ref="6b3bddc004c965e7425d85bf26b749dc" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#6b3bddc004c965e7425d85bf26b749dc">_PIN_A6</a>&nbsp;&nbsp;&nbsp;14</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c446f59a98dfb4a0668306f57bd1ecca"></a><!-- doxytag: member="dio.h::_PIN_A7" ref="c446f59a98dfb4a0668306f57bd1ecca" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#c446f59a98dfb4a0668306f57bd1ecca">_PIN_A7</a>&nbsp;&nbsp;&nbsp;15</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b4f305294f28e717999cef139b7caab0"></a><!-- doxytag: member="dio.h::_PIN_B0" ref="b4f305294f28e717999cef139b7caab0" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#b4f305294f28e717999cef139b7caab0">_PIN_B0</a>&nbsp;&nbsp;&nbsp;16</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bfe495b8eb044c08d0847c7d4043ea4f"></a><!-- doxytag: member="dio.h::_PIN_B1" ref="bfe495b8eb044c08d0847c7d4043ea4f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#bfe495b8eb044c08d0847c7d4043ea4f">_PIN_B1</a>&nbsp;&nbsp;&nbsp;17</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fbe373570755ea8d3180703632224896"></a><!-- doxytag: member="dio.h::_PIN_B2" ref="fbe373570755ea8d3180703632224896" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#fbe373570755ea8d3180703632224896">_PIN_B2</a>&nbsp;&nbsp;&nbsp;18</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a760d7cb45c90094702c296999558f65"></a><!-- doxytag: member="dio.h::_PIN_B3" ref="a760d7cb45c90094702c296999558f65" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#a760d7cb45c90094702c296999558f65">_PIN_B3</a>&nbsp;&nbsp;&nbsp;19</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="76ae9cc1b2c74f451ab638371285f18d"></a><!-- doxytag: member="dio.h::_PIN_B4" ref="76ae9cc1b2c74f451ab638371285f18d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#76ae9cc1b2c74f451ab638371285f18d">_PIN_B4</a>&nbsp;&nbsp;&nbsp;20</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0fae583ff609c0543c9d8c1dab7e378d"></a><!-- doxytag: member="dio.h::_PIN_B5" ref="0fae583ff609c0543c9d8c1dab7e378d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#0fae583ff609c0543c9d8c1dab7e378d">_PIN_B5</a>&nbsp;&nbsp;&nbsp;21</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4c2e6bdc02d9672de3795f3bbb3670b9"></a><!-- doxytag: member="dio.h::_PIN_B6" ref="4c2e6bdc02d9672de3795f3bbb3670b9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#4c2e6bdc02d9672de3795f3bbb3670b9">_PIN_B6</a>&nbsp;&nbsp;&nbsp;22</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8415309f27a757e7c551906194c28e80"></a><!-- doxytag: member="dio.h::_PIN_B7" ref="8415309f27a757e7c551906194c28e80" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#8415309f27a757e7c551906194c28e80">_PIN_B7</a>&nbsp;&nbsp;&nbsp;23</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin B7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8b117e9361a991638bd82eea83ff001a"></a><!-- doxytag: member="dio.h::_PIN_C0" ref="8b117e9361a991638bd82eea83ff001a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#8b117e9361a991638bd82eea83ff001a">_PIN_C0</a>&nbsp;&nbsp;&nbsp;24</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="0c45f79d733ffbbbd7de2056893d6eb1"></a><!-- doxytag: member="dio.h::_PIN_C1" ref="0c45f79d733ffbbbd7de2056893d6eb1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#0c45f79d733ffbbbd7de2056893d6eb1">_PIN_C1</a>&nbsp;&nbsp;&nbsp;25</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c01a3878ceb5a63e961bf3a305e74a06"></a><!-- doxytag: member="dio.h::_PIN_C2" ref="c01a3878ceb5a63e961bf3a305e74a06" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#c01a3878ceb5a63e961bf3a305e74a06">_PIN_C2</a>&nbsp;&nbsp;&nbsp;26</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bd8e9c9599a4c5f2c1571298b29d44bf"></a><!-- doxytag: member="dio.h::_PIN_C3" ref="bd8e9c9599a4c5f2c1571298b29d44bf" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#bd8e9c9599a4c5f2c1571298b29d44bf">_PIN_C3</a>&nbsp;&nbsp;&nbsp;27</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="888ab2bc04575f1902e75398fb2843b4"></a><!-- doxytag: member="dio.h::_PIN_C4" ref="888ab2bc04575f1902e75398fb2843b4" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#888ab2bc04575f1902e75398fb2843b4">_PIN_C4</a>&nbsp;&nbsp;&nbsp;28</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e2c922d0d623cce421470e501b5cd01d"></a><!-- doxytag: member="dio.h::_PIN_C5" ref="e2c922d0d623cce421470e501b5cd01d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#e2c922d0d623cce421470e501b5cd01d">_PIN_C5</a>&nbsp;&nbsp;&nbsp;29</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="de6c0b894acec113cc6e83ddf1c6f4ad"></a><!-- doxytag: member="dio.h::_PIN_C6" ref="de6c0b894acec113cc6e83ddf1c6f4ad" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#de6c0b894acec113cc6e83ddf1c6f4ad">_PIN_C6</a>&nbsp;&nbsp;&nbsp;30</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="94fc1c3551e878d00670be18dd98b01e"></a><!-- doxytag: member="dio.h::_PIN_C7" ref="94fc1c3551e878d00670be18dd98b01e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#94fc1c3551e878d00670be18dd98b01e">_PIN_C7</a>&nbsp;&nbsp;&nbsp;31</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4b95d04e9712921644d2c9daca838ae1"></a><!-- doxytag: member="dio.h::_PIN_D0" ref="4b95d04e9712921644d2c9daca838ae1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#4b95d04e9712921644d2c9daca838ae1">_PIN_D0</a>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e284f5774e84fe78764b3475a1ab7df3"></a><!-- doxytag: member="dio.h::_PIN_D1" ref="e284f5774e84fe78764b3475a1ab7df3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#e284f5774e84fe78764b3475a1ab7df3">_PIN_D1</a>&nbsp;&nbsp;&nbsp;33</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="bb9448fbe6bc6dcd64e35d7ffa00ca6d"></a><!-- doxytag: member="dio.h::_PIN_D2" ref="bb9448fbe6bc6dcd64e35d7ffa00ca6d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#bb9448fbe6bc6dcd64e35d7ffa00ca6d">_PIN_D2</a>&nbsp;&nbsp;&nbsp;34</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e0acf61952e589ddc79359cc418eec17"></a><!-- doxytag: member="dio.h::_PIN_D3" ref="e0acf61952e589ddc79359cc418eec17" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#e0acf61952e589ddc79359cc418eec17">_PIN_D3</a>&nbsp;&nbsp;&nbsp;35</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="2b237cd474a817c15832fd87146e6daa"></a><!-- doxytag: member="dio.h::_PIN_D4" ref="2b237cd474a817c15832fd87146e6daa" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#2b237cd474a817c15832fd87146e6daa">_PIN_D4</a>&nbsp;&nbsp;&nbsp;36</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="70a748f97c4d4e751f2edd0fcbac4a7c"></a><!-- doxytag: member="dio.h::_PIN_D5" ref="70a748f97c4d4e751f2edd0fcbac4a7c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#70a748f97c4d4e751f2edd0fcbac4a7c">_PIN_D5</a>&nbsp;&nbsp;&nbsp;37</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8a2da262330ccf12ac69a1822d3c091c"></a><!-- doxytag: member="dio.h::_PIN_D6" ref="8a2da262330ccf12ac69a1822d3c091c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#8a2da262330ccf12ac69a1822d3c091c">_PIN_D6</a>&nbsp;&nbsp;&nbsp;38</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="fc098c404f6e3003aef2ec0e0bc35acd"></a><!-- doxytag: member="dio.h::_PIN_D7" ref="fc098c404f6e3003aef2ec0e0bc35acd" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#fc098c404f6e3003aef2ec0e0bc35acd">_PIN_D7</a>&nbsp;&nbsp;&nbsp;39</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin D7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="badf190bc1c23be12590868584135c22"></a><!-- doxytag: member="dio.h::_PIN_E0" ref="badf190bc1c23be12590868584135c22" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#badf190bc1c23be12590868584135c22">_PIN_E0</a>&nbsp;&nbsp;&nbsp;40</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e88599fd3bd196eacb91052ea05e18f3"></a><!-- doxytag: member="dio.h::_PIN_E1" ref="e88599fd3bd196eacb91052ea05e18f3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#e88599fd3bd196eacb91052ea05e18f3">_PIN_E1</a>&nbsp;&nbsp;&nbsp;41</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="62122fe3a2b5d08d964a2178e4015e79"></a><!-- doxytag: member="dio.h::_PIN_E2" ref="62122fe3a2b5d08d964a2178e4015e79" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#62122fe3a2b5d08d964a2178e4015e79">_PIN_E2</a>&nbsp;&nbsp;&nbsp;42</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e93d87d0523dfbb446a5909254f0ef2c"></a><!-- doxytag: member="dio.h::_PIN_E3" ref="e93d87d0523dfbb446a5909254f0ef2c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#e93d87d0523dfbb446a5909254f0ef2c">_PIN_E3</a>&nbsp;&nbsp;&nbsp;43</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6859b74122e7d105fe3dd380b6763aca"></a><!-- doxytag: member="dio.h::_PIN_E4" ref="6859b74122e7d105fe3dd380b6763aca" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#6859b74122e7d105fe3dd380b6763aca">_PIN_E4</a>&nbsp;&nbsp;&nbsp;44</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="19a858b324d285b261caa831df84d32f"></a><!-- doxytag: member="dio.h::_PIN_E5" ref="19a858b324d285b261caa831df84d32f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#19a858b324d285b261caa831df84d32f">_PIN_E5</a>&nbsp;&nbsp;&nbsp;45</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="04723017fa82410249e3e6393bca65af"></a><!-- doxytag: member="dio.h::_PIN_E6" ref="04723017fa82410249e3e6393bca65af" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#04723017fa82410249e3e6393bca65af">_PIN_E6</a>&nbsp;&nbsp;&nbsp;46</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5eb34c0e8ea6af1b8bbd3cbd8a92a600"></a><!-- doxytag: member="dio.h::_PIN_E7" ref="5eb34c0e8ea6af1b8bbd3cbd8a92a600" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#5eb34c0e8ea6af1b8bbd3cbd8a92a600">_PIN_E7</a>&nbsp;&nbsp;&nbsp;47</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="da61cdc73ca993fd5f450183862fcef1"></a><!-- doxytag: member="dio.h::_PIN_F0" ref="da61cdc73ca993fd5f450183862fcef1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#da61cdc73ca993fd5f450183862fcef1">_PIN_F0</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="c0d7ed715f7b6982b94a0f791d62915b"></a><!-- doxytag: member="dio.h::_PIN_F1" ref="c0d7ed715f7b6982b94a0f791d62915b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#c0d7ed715f7b6982b94a0f791d62915b">_PIN_F1</a>&nbsp;&nbsp;&nbsp;49</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="91e39e9f2da5ec9515e7d961a058e069"></a><!-- doxytag: member="dio.h::_PIN_F2" ref="91e39e9f2da5ec9515e7d961a058e069" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#91e39e9f2da5ec9515e7d961a058e069">_PIN_F2</a>&nbsp;&nbsp;&nbsp;50</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="847601cd0a3a8830bc38a9eef0b0d6a5"></a><!-- doxytag: member="dio.h::_PIN_F3" ref="847601cd0a3a8830bc38a9eef0b0d6a5" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#847601cd0a3a8830bc38a9eef0b0d6a5">_PIN_F3</a>&nbsp;&nbsp;&nbsp;51</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="81722f76eb8b39d3f3f5678526e918c6"></a><!-- doxytag: member="dio.h::_PIN_F4" ref="81722f76eb8b39d3f3f5678526e918c6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#81722f76eb8b39d3f3f5678526e918c6">_PIN_F4</a>&nbsp;&nbsp;&nbsp;52</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6655e7450006cec34ac55a0e7d63f0cd"></a><!-- doxytag: member="dio.h::_PIN_F5" ref="6655e7450006cec34ac55a0e7d63f0cd" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#6655e7450006cec34ac55a0e7d63f0cd">_PIN_F5</a>&nbsp;&nbsp;&nbsp;53</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="6b042b1d986784315b7d1780af4e6325"></a><!-- doxytag: member="dio.h::_PIN_F6" ref="6b042b1d986784315b7d1780af4e6325" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#6b042b1d986784315b7d1780af4e6325">_PIN_F6</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cd2cf9c19a99cb3b883d44ddb8841aa6"></a><!-- doxytag: member="dio.h::_PIN_F7" ref="cd2cf9c19a99cb3b883d44ddb8841aa6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#cd2cf9c19a99cb3b883d44ddb8841aa6">_PIN_F7</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin F7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="67a762a16abd40507f84d45a1cc8fc60"></a><!-- doxytag: member="dio.h::_PIN_G0" ref="67a762a16abd40507f84d45a1cc8fc60" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#67a762a16abd40507f84d45a1cc8fc60">_PIN_G0</a>&nbsp;&nbsp;&nbsp;56</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin G0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1457bcf9a22d249b4907d0bdc6661e6f"></a><!-- doxytag: member="dio.h::_PIN_WR" ref="1457bcf9a22d249b4907d0bdc6661e6f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#1457bcf9a22d249b4907d0bdc6661e6f">_PIN_WR</a>&nbsp;&nbsp;&nbsp;56</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin WR. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cd22478361f403160ac78b6673bc1cc8"></a><!-- doxytag: member="dio.h::_PIN_G1" ref="cd22478361f403160ac78b6673bc1cc8" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#cd22478361f403160ac78b6673bc1cc8">_PIN_G1</a>&nbsp;&nbsp;&nbsp;57</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin G1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="35b975ca202c33953772138fbe9987a1"></a><!-- doxytag: member="dio.h::_PIN_RD" ref="35b975ca202c33953772138fbe9987a1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#35b975ca202c33953772138fbe9987a1">_PIN_RD</a>&nbsp;&nbsp;&nbsp;57</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin RD. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="d15640b2580aa575af9b4b3afb66d69e"></a><!-- doxytag: member="dio.h::_PIN_G2" ref="d15640b2580aa575af9b4b3afb66d69e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#d15640b2580aa575af9b4b3afb66d69e">_PIN_G2</a>&nbsp;&nbsp;&nbsp;58</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin G2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b01e62102c2ea92ef5e6ddd4c8b10e7d"></a><!-- doxytag: member="dio.h::_PIN_ALE" ref="b01e62102c2ea92ef5e6ddd4c8b10e7d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#b01e62102c2ea92ef5e6ddd4c8b10e7d">_PIN_ALE</a>&nbsp;&nbsp;&nbsp;58</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ALE. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b68ee88c80780acce271541468b57b01"></a><!-- doxytag: member="dio.h::_PIN_G3" ref="b68ee88c80780acce271541468b57b01" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#b68ee88c80780acce271541468b57b01">_PIN_G3</a>&nbsp;&nbsp;&nbsp;59</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin G3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="1a989f2be615fdbb5d539c803ae85052"></a><!-- doxytag: member="dio.h::_PIN_TOSC2" ref="1a989f2be615fdbb5d539c803ae85052" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#1a989f2be615fdbb5d539c803ae85052">_PIN_TOSC2</a>&nbsp;&nbsp;&nbsp;59</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin TOSC2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="8098eb56320b9f65520da4f3034168d8"></a><!-- doxytag: member="dio.h::_PIN_G4" ref="8098eb56320b9f65520da4f3034168d8" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#8098eb56320b9f65520da4f3034168d8">_PIN_G4</a>&nbsp;&nbsp;&nbsp;60</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin G4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="4658177abc8db29571f67e68f50d5591"></a><!-- doxytag: member="dio.h::_PIN_TOSC1" ref="4658177abc8db29571f67e68f50d5591" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="dio_8h.html#4658177abc8db29571f67e68f50d5591">_PIN_TOSC1</a>&nbsp;&nbsp;&nbsp;60</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin TOSC1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd3a64360b1623d5314cbb8999cb86f99"></a><!-- doxytag: member="dio.h::PIN_A0" ref="gd3a64360b1623d5314cbb8999cb86f99" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gd3a64360b1623d5314cbb8999cb86f99">PIN_A0</a>&nbsp;&nbsp;&nbsp;8</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gceb8d227e063cc486808d5d41735a050"></a><!-- doxytag: member="dio.h::PIN_A1" ref="gceb8d227e063cc486808d5d41735a050" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gceb8d227e063cc486808d5d41735a050">PIN_A1</a>&nbsp;&nbsp;&nbsp;9</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ga181f8521480dfcc1eb2688075701a4c"></a><!-- doxytag: member="dio.h::PIN_A2" ref="ga181f8521480dfcc1eb2688075701a4c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#ga181f8521480dfcc1eb2688075701a4c">PIN_A2</a>&nbsp;&nbsp;&nbsp;10</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g933cca5ab119d5e74639e7ac5d120d8a"></a><!-- doxytag: member="dio.h::PIN_A3" ref="g933cca5ab119d5e74639e7ac5d120d8a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g933cca5ab119d5e74639e7ac5d120d8a">PIN_A3</a>&nbsp;&nbsp;&nbsp;11</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gea5f553ed9a6c4dac77e9c77d0cd0391"></a><!-- doxytag: member="dio.h::PIN_A4" ref="gea5f553ed9a6c4dac77e9c77d0cd0391" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gea5f553ed9a6c4dac77e9c77d0cd0391">PIN_A4</a>&nbsp;&nbsp;&nbsp;12</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb78a92a8cba92ec5664599083bcb2f52"></a><!-- doxytag: member="dio.h::PIN_A5" ref="gb78a92a8cba92ec5664599083bcb2f52" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb78a92a8cba92ec5664599083bcb2f52">PIN_A5</a>&nbsp;&nbsp;&nbsp;13</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfc06e9c4314680dcb8900c88079a954f"></a><!-- doxytag: member="dio.h::PIN_A6" ref="gfc06e9c4314680dcb8900c88079a954f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gfc06e9c4314680dcb8900c88079a954f">PIN_A6</a>&nbsp;&nbsp;&nbsp;14</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g027cabbaecdcdfdc68fbd92f8e1922ac"></a><!-- doxytag: member="dio.h::PIN_A7" ref="g027cabbaecdcdfdc68fbd92f8e1922ac" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g027cabbaecdcdfdc68fbd92f8e1922ac">PIN_A7</a>&nbsp;&nbsp;&nbsp;15</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin A7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4b553591a495409d4f7cec4b6c3e754"></a><!-- doxytag: member="dio.h::PIN_SS" ref="gb4b553591a495409d4f7cec4b6c3e754" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb4b553591a495409d4f7cec4b6c3e754">PIN_SS</a>&nbsp;&nbsp;&nbsp;16</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SS. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6a1a3e97267377d1b18bb9073192fdf1"></a><!-- doxytag: member="dio.h::PIN_SCK" ref="g6a1a3e97267377d1b18bb9073192fdf1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6a1a3e97267377d1b18bb9073192fdf1">PIN_SCK</a>&nbsp;&nbsp;&nbsp;17</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SCK. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbaeddda4b992af7165ed898ab8b2b4ac"></a><!-- doxytag: member="dio.h::PIN_MOSI" ref="gbaeddda4b992af7165ed898ab8b2b4ac" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gbaeddda4b992af7165ed898ab8b2b4ac">PIN_MOSI</a>&nbsp;&nbsp;&nbsp;18</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin MOSI. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g46bdd417480dec5cb9cf196af3c7489c"></a><!-- doxytag: member="dio.h::PIN_MISO" ref="g46bdd417480dec5cb9cf196af3c7489c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g46bdd417480dec5cb9cf196af3c7489c">PIN_MISO</a>&nbsp;&nbsp;&nbsp;19</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin MISO. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9ad67c3da2c24b47f9926a7dfddea60a"></a><!-- doxytag: member="dio.h::PIN_LCD_COMMAND" ref="g9ad67c3da2c24b47f9926a7dfddea60a" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g9ad67c3da2c24b47f9926a7dfddea60a">PIN_LCD_COMMAND</a>&nbsp;&nbsp;&nbsp;20</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LCD Command Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5d6c3aa4f6f299e8a82d4d1295ae322b"></a><!-- doxytag: member="dio.h::PIN_C0" ref="g5d6c3aa4f6f299e8a82d4d1295ae322b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5d6c3aa4f6f299e8a82d4d1295ae322b">PIN_C0</a>&nbsp;&nbsp;&nbsp;24</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3f39d54f92d708a3c807377eed1a2043"></a><!-- doxytag: member="dio.h::PIN_C1" ref="g3f39d54f92d708a3c807377eed1a2043" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g3f39d54f92d708a3c807377eed1a2043">PIN_C1</a>&nbsp;&nbsp;&nbsp;25</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g30f4452c1e3af3c0e210cd0208615399"></a><!-- doxytag: member="dio.h::PIN_C2" ref="g30f4452c1e3af3c0e210cd0208615399" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g30f4452c1e3af3c0e210cd0208615399">PIN_C2</a>&nbsp;&nbsp;&nbsp;26</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gce4355a55f5fca3452924c22e5133012"></a><!-- doxytag: member="dio.h::PIN_C3" ref="gce4355a55f5fca3452924c22e5133012" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gce4355a55f5fca3452924c22e5133012">PIN_C3</a>&nbsp;&nbsp;&nbsp;27</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gad1780e5368e328729b4bff24e98d30c"></a><!-- doxytag: member="dio.h::PIN_C4" ref="gad1780e5368e328729b4bff24e98d30c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gad1780e5368e328729b4bff24e98d30c">PIN_C4</a>&nbsp;&nbsp;&nbsp;28</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gc3a295212fbf34fdd35d2a984bf75b80"></a><!-- doxytag: member="dio.h::PIN_C5" ref="gc3a295212fbf34fdd35d2a984bf75b80" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gc3a295212fbf34fdd35d2a984bf75b80">PIN_C5</a>&nbsp;&nbsp;&nbsp;29</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1c5e268dfd2543c2d4099c51876fcc9b"></a><!-- doxytag: member="dio.h::PIN_C6" ref="g1c5e268dfd2543c2d4099c51876fcc9b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g1c5e268dfd2543c2d4099c51876fcc9b">PIN_C6</a>&nbsp;&nbsp;&nbsp;30</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g0762e408c09c5c4a9d0f02e34b2b96d3"></a><!-- doxytag: member="dio.h::PIN_C7" ref="g0762e408c09c5c4a9d0f02e34b2b96d3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g0762e408c09c5c4a9d0f02e34b2b96d3">PIN_C7</a>&nbsp;&nbsp;&nbsp;31</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin C7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb4874028097ae0777b42cef20ffc913d"></a><!-- doxytag: member="dio.h::PIN_SCL" ref="gb4874028097ae0777b42cef20ffc913d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb4874028097ae0777b42cef20ffc913d">PIN_SCL</a>&nbsp;&nbsp;&nbsp;32</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SCL. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5dfb6a7d75a520f42d21ec9a9f640342"></a><!-- doxytag: member="dio.h::PIN_SDA" ref="g5dfb6a7d75a520f42d21ec9a9f640342" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5dfb6a7d75a520f42d21ec9a9f640342">PIN_SDA</a>&nbsp;&nbsp;&nbsp;33</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin SDA. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6844ffe71c9cb20c6b4fe67289b58f40"></a><!-- doxytag: member="dio.h::PIN_RX0" ref="g6844ffe71c9cb20c6b4fe67289b58f40" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6844ffe71c9cb20c6b4fe67289b58f40">PIN_RX0</a>&nbsp;&nbsp;&nbsp;40</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin RX0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g6c8efa60d2db765b46d88aa2a6df0318"></a><!-- doxytag: member="dio.h::PIN_TX0" ref="g6c8efa60d2db765b46d88aa2a6df0318" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6c8efa60d2db765b46d88aa2a6df0318">PIN_TX0</a>&nbsp;&nbsp;&nbsp;41</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin TX0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfbde03bd88d54597e008f40b8fea2f41"></a><!-- doxytag: member="dio.h::PIN_LCD_RESET" ref="gfbde03bd88d54597e008f40b8fea2f41" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gfbde03bd88d54597e008f40b8fea2f41">PIN_LCD_RESET</a>&nbsp;&nbsp;&nbsp;42</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LCD Reset Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7e1867ce517711f7d73d13969dc007af"></a><!-- doxytag: member="dio.h::PIN_E6" ref="g7e1867ce517711f7d73d13969dc007af" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g7e1867ce517711f7d73d13969dc007af">PIN_E6</a>&nbsp;&nbsp;&nbsp;46</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g22e4023e324755fd5666592588fc3c7b"></a><!-- doxytag: member="dio.h::PIN_EXT_DIO1" ref="g22e4023e324755fd5666592588fc3c7b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g22e4023e324755fd5666592588fc3c7b">PIN_EXT_DIO1</a>&nbsp;&nbsp;&nbsp;46</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin EXT_DIO1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf152e5be854f0ea205b0ea10bcc2217c"></a><!-- doxytag: member="dio.h::PIN_E7" ref="gf152e5be854f0ea205b0ea10bcc2217c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gf152e5be854f0ea205b0ea10bcc2217c">PIN_E7</a>&nbsp;&nbsp;&nbsp;47</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin E7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gf8dcfd33ece84d61943c4024504cb5e1"></a><!-- doxytag: member="dio.h::PIN_EXT_DIO2" ref="gf8dcfd33ece84d61943c4024504cb5e1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gf8dcfd33ece84d61943c4024504cb5e1">PIN_EXT_DIO2</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin EXT_DIO2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb6451bdf35a387a5db4323fa5d36be41"></a><!-- doxytag: member="dio.h::PIN_AN0" ref="gb6451bdf35a387a5db4323fa5d36be41" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb6451bdf35a387a5db4323fa5d36be41">PIN_AN0</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g44007fefe4c74b325caa7f43e3a6e716"></a><!-- doxytag: member="dio.h::PIN_ADC0" ref="g44007fefe4c74b325caa7f43e3a6e716" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g44007fefe4c74b325caa7f43e3a6e716">PIN_ADC0</a>&nbsp;&nbsp;&nbsp;48</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC0. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="ge5bf915d1d529da9379de10836283554"></a><!-- doxytag: member="dio.h::PIN_AN1" ref="ge5bf915d1d529da9379de10836283554" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#ge5bf915d1d529da9379de10836283554">PIN_AN1</a>&nbsp;&nbsp;&nbsp;49</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5b86225ba7ed79b2224a3c561c5f3aa6"></a><!-- doxytag: member="dio.h::PIN_ADC1" ref="g5b86225ba7ed79b2224a3c561c5f3aa6" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5b86225ba7ed79b2224a3c561c5f3aa6">PIN_ADC1</a>&nbsp;&nbsp;&nbsp;49</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC1. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3349fe5af4b9deab28132c4e5e75529b"></a><!-- doxytag: member="dio.h::PIN_AN2" ref="g3349fe5af4b9deab28132c4e5e75529b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g3349fe5af4b9deab28132c4e5e75529b">PIN_AN2</a>&nbsp;&nbsp;&nbsp;50</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gd4248fc02c8ddeaae385536349eb0cb7"></a><!-- doxytag: member="dio.h::PIN_ADC2" ref="gd4248fc02c8ddeaae385536349eb0cb7" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gd4248fc02c8ddeaae385536349eb0cb7">PIN_ADC2</a>&nbsp;&nbsp;&nbsp;50</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC2. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g14a8708f056d5e595556c262adbbc09f"></a><!-- doxytag: member="dio.h::PIN_AN3" ref="g14a8708f056d5e595556c262adbbc09f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g14a8708f056d5e595556c262adbbc09f">PIN_AN3</a>&nbsp;&nbsp;&nbsp;51</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gbce7e56320e6301cf256a0ce26c56c0b"></a><!-- doxytag: member="dio.h::PIN_ADC3" ref="gbce7e56320e6301cf256a0ce26c56c0b" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gbce7e56320e6301cf256a0ce26c56c0b">PIN_ADC3</a>&nbsp;&nbsp;&nbsp;51</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC3. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g2a33e134b96d4b5186aabc96edc52ee3"></a><!-- doxytag: member="dio.h::PIN_AN4" ref="g2a33e134b96d4b5186aabc96edc52ee3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g2a33e134b96d4b5186aabc96edc52ee3">PIN_AN4</a>&nbsp;&nbsp;&nbsp;52</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gfc66b57b212407fc255f69fd6ead6404"></a><!-- doxytag: member="dio.h::PIN_ADC4" ref="gfc66b57b212407fc255f69fd6ead6404" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gfc66b57b212407fc255f69fd6ead6404">PIN_ADC4</a>&nbsp;&nbsp;&nbsp;52</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC4. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g92a11eaeaf053774343b9a677bb4d5e1"></a><!-- doxytag: member="dio.h::PIN_AN5" ref="g92a11eaeaf053774343b9a677bb4d5e1" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g92a11eaeaf053774343b9a677bb4d5e1">PIN_AN5</a>&nbsp;&nbsp;&nbsp;53</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g701f2be23f28d8187d44159ada343be9"></a><!-- doxytag: member="dio.h::PIN_ADC5" ref="g701f2be23f28d8187d44159ada343be9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g701f2be23f28d8187d44159ada343be9">PIN_ADC5</a>&nbsp;&nbsp;&nbsp;53</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC5. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9a09b3ad4931ca28bf25d72c759f578d"></a><!-- doxytag: member="dio.h::PIN_AN6" ref="g9a09b3ad4931ca28bf25d72c759f578d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g9a09b3ad4931ca28bf25d72c759f578d">PIN_AN6</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g45f972962752d572ed471d052a35982f"></a><!-- doxytag: member="dio.h::PIN_ADC6" ref="g45f972962752d572ed471d052a35982f" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g45f972962752d572ed471d052a35982f">PIN_ADC6</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC6. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g7a5a85c782c9687ded37a870bce57102"></a><!-- doxytag: member="dio.h::PIN_AN7" ref="g7a5a85c782c9687ded37a870bce57102" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g7a5a85c782c9687ded37a870bce57102">PIN_AN7</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin AN7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g254abf6fa8c8f85b3d1b927ee35a22b4"></a><!-- doxytag: member="dio.h::PIN_ADC7" ref="g254abf6fa8c8f85b3d1b927ee35a22b4" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g254abf6fa8c8f85b3d1b927ee35a22b4">PIN_ADC7</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pin ADC7. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g5bec113a8dc799a771a2b1d3ab256128"></a><!-- doxytag: member="dio.h::PIN_WHEEL" ref="g5bec113a8dc799a771a2b1d3ab256128" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g5bec113a8dc799a771a2b1d3ab256128">PIN_WHEEL</a>&nbsp;&nbsp;&nbsp;54</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wheel Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g05fa96c4c8bfa63445224dfd27741aee"></a><!-- doxytag: member="dio.h::PIN_BATT" ref="g05fa96c4c8bfa63445224dfd27741aee" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g05fa96c4c8bfa63445224dfd27741aee">PIN_BATT</a>&nbsp;&nbsp;&nbsp;55</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Battery Voltage Monitor Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gb2909d57039bab16e3d67f3432e5364d"></a><!-- doxytag: member="dio.h::PIN_BTN1" ref="gb2909d57039bab16e3d67f3432e5364d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gb2909d57039bab16e3d67f3432e5364d">PIN_BTN1</a>&nbsp;&nbsp;&nbsp;56</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button1 Pin <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g055e63d10caa23d102dd471ec4b1145d"></a><!-- doxytag: member="dio.h::PIN_BTN2" ref="g055e63d10caa23d102dd471ec4b1145d" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g055e63d10caa23d102dd471ec4b1145d">PIN_BTN2</a>&nbsp;&nbsp;&nbsp;57</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button2 Pin <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g1ee291f6ef730418abd5997176fe6b4c"></a><!-- doxytag: member="dio.h::PIN_LED1" ref="g1ee291f6ef730418abd5997176fe6b4c" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g1ee291f6ef730418abd5997176fe6b4c">PIN_LED1</a>&nbsp;&nbsp;&nbsp;58</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">LED1 Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g92fdab197e388c3c44586db0b10a5eb9"></a><!-- doxytag: member="dio.h::PIN_BTN" ref="g92fdab197e388c3c44586db0b10a5eb9" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g92fdab197e388c3c44586db0b10a5eb9">PIN_BTN</a>&nbsp;&nbsp;&nbsp;PING</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Button Pin. <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g9dc19cdd6944e087c077044296a1ad8e"></a><!-- doxytag: member="dio.h::BTN2" ref="g9dc19cdd6944e087c077044296a1ad8e" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g9dc19cdd6944e087c077044296a1ad8e">BTN2</a>&nbsp;&nbsp;&nbsp;PING1</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button2 Pin <br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3a4cc5e218cef7de139625a519e29ff3"></a><!-- doxytag: member="dio.h::BTN1" ref="g3a4cc5e218cef7de139625a519e29ff3" args="" -->
+#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g3a4cc5e218cef7de139625a519e29ff3">BTN1</a>&nbsp;&nbsp;&nbsp;PING0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">button1 Pin <br></td></tr>
+<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6202143ed6d0f809095c21bfac32acdd">digital_input</a> (int)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a portpin.  <a href="group__dio.html#g6202143ed6d0f809095c21bfac32acdd"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g67967857dcc26aeea8cdd0a53a9e138d">digital_output</a> (int bit, int val)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Output to a portpin.  <a href="group__dio.html#g67967857dcc26aeea8cdd0a53a9e138d"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g6bcadb9200f988ae733a51aa70467978">digital_pull_up</a> (int)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Pullup a portpin.  <a href="group__dio.html#g6bcadb9200f988ae733a51aa70467978"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989">button1_read</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button1 is pressed.  <a href="group__dio.html#gedac5cd2a11710ab4294de2ae4efe989"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5">button1_click</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button1 is clicked.  <a href="group__dio.html#g1f8648caa59384d58fc157d8933f4be5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g63755dc896b16e09d5223cada174d87b">button1_wait</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait until button1 is pressed.  <a href="group__dio.html#g63755dc896b16e09d5223cada174d87b"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa">button2_read</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button2 is pressed.  <a href="group__dio.html#g65e4c13e999fdfa9da3394d0175f17aa"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2">button2_click</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if button2 is clicked.  <a href="group__dio.html#g4147c347b473bd41c0a0f02af4dd39f2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8">button2_wait</a> (void)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Wait until button2 is pressed.  <a href="group__dio.html#g4971f4473e759bcff2e2758e75bcdbe8"></a><br></td></tr>
+</table>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Definitions for digital input / output. 
+<p>
+This file contains definitions and functions for dealing with digital input and output.<p>
+<dl compact><dt><b>Author:</b></dt><dd>Colony Project, CMU Robotics Club Based on Tom Lauwer's Firefly Library </dd></dl>
+<hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:18 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/libdragonfly/bom_8h-source.html
===================================================================
--- branches/charge_board/docs/libdragonfly/bom_8h-source.html	(nonexistent)
+++ branches/charge_board/docs/libdragonfly/bom_8h-source.html	(revision 62)
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>libdragonfly: bom.h Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+<link href="tabs.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.4.6 -->
+<div class="tabs">
+  <ul>
+    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
+    <li><a href="modules.html"><span>Modules</span></a></li>
+    <li id="current"><a href="files.html"><span>Files</span></a></li>
+  </ul></div>
+<div class="tabs">
+  <ul>
+    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
+    <li><a href="globals.html"><span>Globals</span></a></li>
+  </ul></div>
+<h1>bom.h</h1><a href="bom_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
+<a name="l00012"></a>00012 <span class="preprocessor">#ifndef _BOM_H</span>
+<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define _BOM_H</span>
+<a name="l00014"></a>00014 <span class="preprocessor"></span>
+<a name="l00021"></a>00021 <span class="keywordtype">int</span> <a class="code" href="group__bom.html#g86753fe7440cd64e60c58ad31c62264a">get_max_bom</a>( <span class="keywordtype">void</span> );
+<a name="l00023"></a>00023 <span class="keywordtype">void</span> <a class="code" href="group__bom.html#g93b665ff81fc6b58503c6ba5ba01c1bf">bom_on</a>(<span class="keywordtype">void</span>);
+<a name="l00025"></a>00025 <span class="keywordtype">void</span> <a class="code" href="group__bom.html#g61a66e53cdee8bce139c707153143b30">bom_off</a>(<span class="keywordtype">void</span>);
+<a name="l00026"></a>00026 
+<a name="l00029"></a>00029 <span class="preprocessor">#endif</span>
+<a name="l00030"></a>00030 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Sep 14 15:36:17 2007 for libdragonfly by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.6 </small></address>
+</body>
+</html>
Index: branches/charge_board/docs/projects/colonet/colonet_diagram.dia
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/projects/colonet/colonet_diagram.dia
===================================================================
--- branches/charge_board/docs/projects/colonet/colonet_diagram.dia	(nonexistent)
+++ branches/charge_board/docs/projects/colonet/colonet_diagram.dia	(revision 62)

Property changes on: branches/charge_board/docs/projects/colonet/colonet_diagram.dia
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.png
===================================================================
--- branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.png	(nonexistent)
+++ branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.png	(revision 62)

Property changes on: branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/projects/colonet/colonet_server.txt
===================================================================
--- branches/charge_board/docs/projects/colonet/colonet_server.txt	(nonexistent)
+++ branches/charge_board/docs/projects/colonet/colonet_server.txt	(revision 62)
@@ -0,0 +1,25 @@
+server:
+	-use select to handle the multiple connections to eliminate race conditions/simplify things
+
+	server->client
+		-formal language between server and client
+		-formal language of responses to requests from client
+		-client must be able to give commands to robot and request information
+		-use header file of robot behaviors as numeric commands
+
+	server->db ?
+		-use mysql (its free)
+		-find library to do mysql in C
+		-store client requests?
+
+	server->robot
+		-send commands/requests to robot
+		-use header file of defined robot behaviors
+
+	logging:
+		-log client requests/commands
+		-log commands sent to robot
+		-log responses
+
+
+
Index: branches/charge_board/docs/projects/colonet/colonet_diagram.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/projects/colonet/colonet_diagram.png
===================================================================
--- branches/charge_board/docs/projects/colonet/colonet_diagram.png	(nonexistent)
+++ branches/charge_board/docs/projects/colonet/colonet_diagram.png	(revision 62)

Property changes on: branches/charge_board/docs/projects/colonet/colonet_diagram.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.dia
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.dia
===================================================================
--- branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.dia	(nonexistent)
+++ branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.dia	(revision 62)

Property changes on: branches/charge_board/docs/projects/colonet/colonet_diagram_reduced.dia
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/pub/presentations/Colony_MoM_poster_07.ppt
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/pub/presentations/Colony_MoM_poster_07.ppt
===================================================================
--- branches/charge_board/pub/presentations/Colony_MoM_poster_07.ppt	(nonexistent)
+++ branches/charge_board/pub/presentations/Colony_MoM_poster_07.ppt	(revision 62)

Property changes on: branches/charge_board/pub/presentations/Colony_MoM_poster_07.ppt
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/pub/papers/2007_AAAI/formatting-instructions.pdf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/pub/papers/2007_AAAI/formatting-instructions.pdf
===================================================================
--- branches/charge_board/pub/papers/2007_AAAI/formatting-instructions.pdf	(nonexistent)
+++ branches/charge_board/pub/papers/2007_AAAI/formatting-instructions.pdf	(revision 62)

Property changes on: branches/charge_board/pub/papers/2007_AAAI/formatting-instructions.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.doc
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.doc
===================================================================
--- branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.doc	(nonexistent)
+++ branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.doc	(revision 62)

Property changes on: branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.doc
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_pictures+captions.doc
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_pictures+captions.doc
===================================================================
--- branches/charge_board/pub/papers/2007_AAAI/aaai_pictures+captions.doc	(nonexistent)
+++ branches/charge_board/pub/papers/2007_AAAI/aaai_pictures+captions.doc	(revision 62)

Property changes on: branches/charge_board/pub/papers/2007_AAAI/aaai_pictures+captions.doc
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.pdf
===================================================================
--- branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.pdf	(nonexistent)
+++ branches/charge_board/pub/papers/2007_AAAI/aaai_low-cost-colony.pdf	(revision 62)
@@ -0,0 +1,4794 @@
+%PDF-1.4
+%âãÏÓ
+61 0 obj<</H[936 340]/Linearized 1/E 143899/L 625157/N 6/O 65/T 623890>>
+endobj
+                  
+xref
+61 32
+0000000016 00000 n
+0000001276 00000 n
+0000000936 00000 n
+0000001369 00000 n
+0000001410 00000 n
+0000001589 00000 n
+0000001717 00000 n
+0000002157 00000 n
+0000002881 00000 n
+0000003332 00000 n
+0000003601 00000 n
+0000003864 00000 n
+0000004143 00000 n
+0000004244 00000 n
+0000005378 00000 n
+0000006425 00000 n
+0000007441 00000 n
+0000007571 00000 n
+0000007971 00000 n
+0000008216 00000 n
+0000009253 00000 n
+0000010237 00000 n
+0000011233 00000 n
+0000012268 00000 n
+0000013133 00000 n
+0000042796 00000 n
+0000087435 00000 n
+0000113403 00000 n
+0000136130 00000 n
+0000143200 00000 n
+0000143429 00000 n
+0000143613 00000 n
+trailer
+<</Size 93/Prev 623879/Root 62 0 R/Info 60 0 R/ID[<32b7987c8ae84bfbf1cb72bbc9cc39d0><bad6ca74ba589e42b1c15a6a706f1785>]>>
+startxref
+0
+%%EOF
+            
+63 0 obj<</Length 253/Filter/FlateDecode/B 276/L 260/S 165>>stream
+xÚb```f``ae`e`à:Ç Ä€B@16Ž‡0tÔªºê>ûãÄÝÀÀP´PlB!c³Œ«jèt	Ã#6�â+C#Ëd%ŒÜj÷—¶^)ä·˜Ä*aÛxD5¨�Ù¸£Hq€&Õ0‡Ù(4ZP	Èå@µ89¹€´,+‚E4€dC8c?ÓjÆYOî1¼c°aqe~Ç|ž!’1�áóæõÌ»™1[o[g–ê1Oº”aC?Ã×(†KŒ“}a^0eà,^	r
+[±	g:È‡ŒÀ`dàa`¸Ðpp@€¾pAÙ
+endstream
+endobj
+62 0 obj<</Pages 55 0 R/Type/Catalog/Names 64 0 R/PageLabels 53 0 R/Metadata 59 0 R>>
+endobj
+64 0 obj<</EmbeddedFiles 56 0 R>>
+endobj
+65 0 obj<</Contents[74 0 R 75 0 R 76 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R]/Type/Page/Parent 55 0 R/Rotate 0/MediaBox[0 0 612 792]/CropBox[0 0 612 792]/Resources 66 0 R>>
+endobj
+66 0 obj<</Font<</TT2 67 0 R/TT4 68 0 R/TT6 69 0 R/TT7 77 0 R/TT9 78 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 73 0 R>>>>
+endobj
+67 0 obj<</Type/Font/Encoding/WinAnsiEncoding/BaseFont/MILPCB+TimesNewRomanPS-BoldMT/FirstChar 32/LastChar 121/Subtype/TrueType/FontDescriptor 70 0 R/Widths[250 0 0 0 0 0 0 0 0 0 0 0 250 333 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 722 667 722 722 667 611 0 0 389 500 778 667 944 722 778 611 0 722 556 667 0 0 1000 0 0 0 0 0 0 0 0 0 500 556 444 556 444 333 500 556 278 333 556 278 833 556 500 556 0 444 389 333 556 500 722 500 500]>>
+endobj
+68 0 obj<</Type/Font/Encoding/WinAnsiEncoding/BaseFont/MILPMD+TimesNewRomanPSMT/FirstChar 32/LastChar 237/Subtype/TrueType/FontDescriptor 71 0 R/Widths[250 0 0 0 500 0 778 180 333 333 0 0 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 0 0 0 0 0 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 0 667 556 611 722 722 944 722 0 0 0 0 0 0 0 0 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 760 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278]>>
+endobj
+69 0 obj<</Type/Font/Encoding/WinAnsiEncoding/BaseFont/MIMADO+TimesNewRomanPS-ItalicMT/FirstChar 32/LastChar 125/Subtype/TrueType/FontDescriptor 72 0 R/Widths[250 0 0 0 0 0 0 0 333 333 0 0 250 333 250 0 0 500 500 500 0 0 0 0 0 0 0 0 0 0 0 0 920 611 611 667 0 611 0 0 0 0 0 0 0 833 667 722 0 0 611 500 556 0 0 0 0 0 0 0 0 0 0 0 0 500 500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 0 389 389 278 500 444 667 444 444 389 400 0 400]>>
+endobj
+70 0 obj<</Type/FontDescriptor/FontFile2 85 0 R/FontBBox[-558 -307 2000 1026]/FontName/MILPCB+TimesNewRomanPS-BoldMT/Flags 34/StemV 136/CapHeight 656/XHeight 0/Ascent 891/Descent -216/ItalicAngle 0/FontFamily(Times New Roman)/FontStretch/Normal/FontWeight 700>>
+endobj
+71 0 obj<</Type/FontDescriptor/FontFile2 86 0 R/FontBBox[-568 -307 2000 1007]/FontName/MILPMD+TimesNewRomanPSMT/Flags 34/StemV 82/CapHeight 656/XHeight 0/Ascent 891/Descent -216/ItalicAngle 0/FontFamily(Times New Roman)/FontStretch/Normal/FontWeight 400>>
+endobj
+72 0 obj<</Type/FontDescriptor/FontFile2 87 0 R/FontBBox[-498 -307 1120 1023]/FontName/MIMADO+TimesNewRomanPS-ItalicMT/Flags 98/StemV 71.742004/CapHeight 656/XHeight 0/Ascent 891/Descent -216/ItalicAngle -15/FontFamily(Times New Roman)/FontStretch/Normal/FontWeight 400>>
+endobj
+73 0 obj<</Type/ExtGState/SA false/OP false/SM 0.02/op false/OPM 1/UCR2/Default/BG2/Default>>
+endobj
+74 0 obj<</Length 1064/Filter/FlateDecode>>stream
+H‰tUMoÜ6½ï¯˜#UhQßºÕM�¤	‚FAF\-½b¬%·µŽSô¿w†¤Üµ�Ø€MR£á›÷ÞŒÞüþ™ÃaÞ\w›7]—‡î~Ã«$Í Å_¿âu�ðjÞ$
+tÇM
+‡Í6MÒ4-¡ëÃ²€îqsÇnåYŽQž´ÌDÛ,)ØI¹�>€€?ÌãöÆÌþ4»¨LøcáÆŒF»£'Ñ_Ý»
+0CY$MU›zë½¼¢{Ù[9ªïp»œÅ8JÃ;q”3¼7úCÔ}ÃDIF¹ºÛ—S†u…	~[RKø &¥å8ªÞË³ÒðÕŸaËó¤)aË“¬¤4BêÞ½Zf‹¡×K?Ãõ¤„¦Šð0†›aR³5§AN”�‹ý½™öðQ.G¤äÈ}á¹o]Á-ä)[!T.óÊ¤âyNrüy®%«ÖZÊÖ‹p#".Ø¤¥_ˆÔŠ©°…a1ŽÑyeFÃ­üúìcCÄD»–Íá¡EyÚ$_åIŠâŽã3_ÑäŽœ�à­™v¨ÇÕYêEúbÒ„U}ùöû¤¬�wËtbøt<ªY™ñÜ_†Už#DÐ4/ßu7·ëÍY0ã?÷d‹}ßžb�Ë!ª]eER³�q1ˆÝâV^@_[žÔ”<ý_lª)÷™w}�·?’¦»¨Â”:J™Óô_øðó—Dî—ç‚È<}n0·rb§Alï)GRJ%ò¶®[�ºtË±]Òº¹ŒqQØ;vµ›±¦œÙ¹nÙ$ú¨Áþ
+Û×�VßU*«’þ"¶åûf»c�xPØÐJÏ'5¡HÂ*tÐýdŽ …]&Ã£„Aœ%ìi˜")ÈR"Øã$è]¿óÛ=Eæ<_.¿P4t)OÛàlsó{<†gIO³d2;cçà«3#©Š Û…+0÷9` k7›„#²Ÿ¤°’p¹dª‡�˜#Ô†#fÎŸÇÑÖç&”)úo%|�%¼ü<ª@ÍÈ�ü~’«oØŒs[¯z‹U£Â�W±Ø³:ºõ)ÂÔl”0K=›iF/nÉGOäÙçä f°ƒËç�~Â/=¦¼-3�©'±Cd/¶
+ƒ&ù·;ZðÞ’©	9°p:1 Ü½ŠEqOÄ\Æ�ìÎ¸0g9õ†Â¥‡Òýò‚”²ÈV&Ô¸Xçáð�0ºSEbpæC”�˜ÉFk3¦ÄxúzÊ”E¾ŠúÂmÞk%z­ÇáŒ¾ú…<¯\}V«ÏÿN*1Ì¤ìp$ê…©Å%r-oˆÄáIóSAš`’¬¹à£Âþô­zô`ì¾�hnd·DÍÐ#ôôG¸nÂo+íÉºÌª³‹’t5-Àh2—ß¸>/~v\ÛÇÄ/†ížîaFús¢‰3ÖXÚ=óãþ`…	
+endstream
+endobj
+75 0 obj<</Length 978/Filter/FlateDecode>>stream
+H‰lUM�ã6½Ï¯àQ.×òg|,Z è½¥ØCÑƒâ(±»¶ØòL§¿¾�”<›.ödQ&?I�?½œxÉÒ,Ë*:w8é²ÅéíåOeç×aqódgOfqI“æj›¯ä{;¥D¬É_çO/:O›¶((£ó/¨üªÐ0ßÙhµ4»aMÚ´VïÉ±NEA²É1OK5¯nYÉÌW¸ÒŠþ¸ãuª³ºÙ½è&xÉêS¼¬I‰‡ä˜¥•š’Â#Ñi£FK£ëÌHË6ÊµM*¨ýCàZq|Ô¹ÑÍÉ	‘ ¼
+Ô°6A�½õPÃ._ ˆ†P'¾èj_íè‚2È$t�öÅÐóº�¡OnaïÓc´ÿÐ}t{±=ÊP*ÃµÑêupKÒ¨õ@ë0
+£YÈ;-*–ìd—;xJ´NÛè7òª#¯y®O;Þ¢j`‚@sÕYr7N¦VRƒÁ"IECøK³ñ›œÞ?£zS¦™ÀÇ]�!uv�Bºm¡7·|	¦Ox"/+"yM]†˜bÙÐ)H-k¿y7»Ém+-îâ¸gJå#OMh¢rç	�iF6wI†È–Á÷ÓJ7·|—­ëX|{»
+ÝÀM¦-4æ<tÆn>„Öþ5¡Ù‹´®‘Gö-—:Ïc³³•°r`âjNæ*Ñ{¦Ô0�Üô­JCÙ(ÑyöÑìÿ9Ôà ¨¸|ìà³Ež«£~¸÷’9xì=-¶ãPH¹´{¼Eõ<œzG«"Š>É8ÀxEC/YtùIÍ‰VÜè"0µÈ¬x
+VÀ¿!7�uý9°”
+Ogê�ˆj/'ðîÈh“‹�î1š¤ÁÕ�çsNý†mƒ\2ÂG—˜ó<CSà¢–ä‚÷ßf¿¸ëÖ�$T#“T VpZÊ³*msÀÔÃÈïü÷w}æšzw©h×‹� 3‹ªrªJ*š*å±ê¸ó²ŠÍòu˜�–•-4&êìPm,ÃwùP�n¼Öx²kµ Ÿ‹‹ü�‚sŒ£pT«Þ¬4¡½pi^";¦¹Ê÷Õˆó9Ø™;&Yè
+._¨](¨añˆÞ,ïÏ[Aš³¬5è‡£¤}Úg¤Ð!í0ÌÜSåwY÷[¸ýðˆ'tÅ=±¦‚öJvƒ»ùý†L×E¨Iž’ÝkúØàÐG=oÖ/+å!9~­¼·Ëá[J
+<Ïãš:éø$ÞØ¸â�¬ù�q¸8È«…–ÅÊã8ø9)þ·Á{ \_¶ð]ýøÎ[\3GƒRcŠ«ÀGÿ{.B8¢zè†Výý¸í�¼OaFé?%¾ò
+endstream
+endobj
+76 0 obj<</Length 947/Filter/FlateDecode>>stream
+H‰tUM�ã6½Ï¯ÐQZÄ†%Çv|îb±Ø¢è¡¹5=(Ž6q'’3ýõ}$•i¦Ø=X2%Šz$©í·‡J¶¬úf£¶Ÿª²ªœÚôcm£¶/êé»iÊN«a2�¦o6…Õ!úÅ¬Ëµy¼`ý¨L«#iìYZ¢’Œ-{­NÞl`è9�Þ•È†§çÀëµ[A�O’Î>¨d:½ÒÊÀZCHI]Ïl\eêÉØ³7ŽŒ½)ó×öÛÃö;E¾�W®î³W‹©a˜”�N�i¥F^¸à¦²ÑÃÙôtïaäù‚àŸì)9zâµ)…w™w½Hêeâ}€$ñ�Ý‘MÙ’ap‡ÕYÈ�ÀÀ^Õ÷)ÒQ/Þp²le9Y;Ö‹cÖõVK#|XÃÄQ¦³©`5($†å}žµä?Ê,ÿ<ÁYN/ŸK(MÑShÕo¦h(¼±ŒEœþ3“ÞÒLÑ¯Hê${ž<rúY¤ ’ÚCF{çà=«Zük—ýóó|Ã¡$:¥<iaì*Òp¢˜F«Ó11ß�,+Ÿ$ÞZ³(ŸÃ«JK¼Ë5†�¤éäî~ÓmòÝ)¦™Å�´ÖÄA«ß0ÄN
+Çñ%ÁIÿcd�Ë‘U˜«ø_ÆVìì8½Ö+$!«DÎµŽÇÀæ
+ƒ„·Ìš·Óø7�E$VX~À‘{ŠTu“¹ÿ„¢ªÙ|«/„¯Ö3WS­¹˜j-‹Ó…àî4 µzkœŽa?R�Öºø]ôebÊ¬s­HÅÂÄžò¢X*WU¬àV�+G/AksÐ~Å�ÍÍü7þ„'·\¹MçÄÉQv?ŠòAR“ž¢HÙ«èËNà<rV&Ù¼ˆrê¿ÜIˆÛ;2]$—ó|cƒâ¨®õcsJ_Å®DÌæˆYDìFÉâ®;»nÓg7©2Q'4íÌJ%*(Ô`n4uYb»âå�ýz¡¢C§�4×•<üûÚ-ùßý»Ú#É€F¨
+b);¹X¯LQSO£>°#èr¢øYko­¹mÅ¥HV^ZJ77¨V:I/J˜¨yªP(°´òÒË��t³ÖR†O(ÐoQ
+½ªÞQTö†¢É}†©ê(¤i\<ê-3úáqDúØLq³ó2æ×Æö]v	��1_¹ççGæÀÂoLô:ýHéç÷ÃË;@(X
+�¦igJ¥¾ Ùm„£HïÂOÔ)ÄüŽL1¬”XÍoRˆ�Ï«”_³£¼nÔW5^õ¯ÎÛ«
+endstream
+endobj
+77 0 obj<</Type/Font/Encoding/Identity-H/BaseFont/MIMAHL+SymbolMT/Subtype/Type0/DescendantFonts[91 0 R]/ToUnicode 92 0 R>>
+endobj
+78 0 obj<</Type/Font/Encoding/WinAnsiEncoding/BaseFont/MIMBEP+ArialMT/FirstChar 32/LastChar 121/Subtype/TrueType/FontDescriptor 79 0 R/Widths[278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 556 0 0 0 0 0 0 0 278 0 0 0 0 0 0 667 667 722 0 0 611 0 0 278 0 0 0 833 0 0 667 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0 0 556 556 500 556 556 0 556 556 222 0 500 222 833 556 556 0 0 333 500 278 556 500 0 0 500]>>
+endobj
+79 0 obj<</Type/FontDescriptor/FontFile2 88 0 R/FontBBox[-665 -325 2000 1006]/FontName/MIMBEP+ArialMT/Flags 32/StemV 88/CapHeight 718/XHeight 515/Ascent 905/Descent -211/ItalicAngle 0/FontFamily(Arial)/FontStretch/Normal/FontWeight 400>>
+endobj
+80 0 obj<</Length 968/Filter/FlateDecode>>stream
+H‰”UÍŽã6¾û)x”Š‰áÇÇn[ XtOÍ­Óƒb+‰ºŽXJ2éõ-KŠò4ØÁšC,Rù‰üHí>g»²vcVäEY·°»gˆÑ�eYæ�¸ÈM-fý‹Û»£²°×²Ë{ãb.—YO ÿÜ}ÎÊ*oº²tõs¶A_EU­^Ûž½jåÍü€½Ü´y%²È·&–”Ü”y+ÎêÈ²f‚cÈNxcÓþ¬9îf
+ŒæeQnßÃ=‡/·¤Œ—ZL0£š!Þ®À;\œÕ6¼@8iPè‘Õ¨63jî€QGÔ;ÖÏÎ>b
+d›bÒÇ…M¼™ð¤Ú$âhŽ¶H8ðØ¨eŸ—âp�1úÆ’•›*ï˜;™›‘[LÐtUs\€:"X�@Éx¡üub3¯öX‹—�Îâî*EˆTp–êÓôMÃÀNÎƒ‰Õöfg#:AAs€ßÝYSF(WT‚A¤}G¾@ <4üuµ÷x7½Æ,>Ô‡–‘E]sxtÔ £EÒÅŽ,(Ù `Y0ÈäÀYôÁ$±¬
+×õ,~J&OIP’â¶:èðd4jÿ€;‰F/ñùš,m€Qà˜¼¸ë…•˜��ÅfÖ•©ÚÃPñ­¾("�£dÔÂYä²ýb*cO%ñ¤›^»©k«þ©›ŠúÝqªVJ4Çd0“&k‚H­‹
+ksnVßÂ­ºT„~í{*-ÖôÂ_o>Ì-i@�Á$3ËOèÅœ#ÙÒ¦`Ó2Ä;*¦ìžu³D8bI¯‚ƒ}Á2×büíš‚å}�¬ÆUQðªy•lÊNió{”KŒ¯ú*çUüêîj™˜ `³õ¸Ì9i»W™Ã§ØTWÖbÎýÄ5L'Õº=¦²Š
+“=è·u˜¼ó¼ß#®·C‹öZ-#ÂéÄ‰ò^w<Å±Sõ¢ãÖÎÂÉ¬dª·uõL¦”ˆz q&�æÇÆ_ôhÔlþŽƒäíBƒ¾Ö›¯þ#Sô÷
+Ö²MÙmûôŠ,»·Å‚Ó¿ã�d�µò’—¸Ç&Dîo17ä–ÁTV4×d…š	Ø<�Å'çýBu[?_¨[cÝúÖMÓÛÅ¡N
+/ì
+Ì¼_,<_~ÚJêšŠš÷œCò"àþäî¯ì—]Öy‡­8³â\XtvÈ>íž—XÔçÈ":èsT“E\�¯M"2êØøœÄK7inþä.¬/L4õ	²êà¢pÿ‚ºZÀ�Þ;¬-v®…ƒcCÌü+À��ìk
+endstream
+endobj
+81 0 obj<</Length 915/Filter/FlateDecode>>stream
+H‰´U;¯ë6Þó+8JÅ±*ùí¢(pÐ.½K—z;8¶’¸uì@V’žûëKŠrèE§v1%‘úH‘éí§�ÉUšë4lÚh¥µ©aÛmZflo›ß„?Zxï¯íÔÙ“4©ª„�<Ì{�I¥
+ñîd.ü°º¡Aþ¾ý´IVØÄ(Sè|×é<5þóäí8‹èðYÜSÜÂWµm;¨Ù>K™Ê°�Q…©ëGÄºx€æ
+ïãHÁåÜp8ÊÄhU¿€³‹uWÛG(¼“"�^¥ºQy	�Q
+zÚhÖ)@nÿ û¦N!¯U™Öù^M dŒÝÛI&9fÆÎŽ0ón/S•
+X†Ó™FûËI6ªí8¾Á¯Ù¿¢�•	Å=-Ã5€,…›wÑ/Šó­)Ñº)ê{cH¦¬b¹HºâB
+ZYc(Žá»#,’reíŸx™a<èÓ, ·ÁòjÇxLghÁñr7³=tóÂÇÓGp‚–mŽóeç,{xz‡	Œï¨îµ%îÐCÎn@p#�ŠŠÖ‘¯JÀanÇ X¤Q¥øNbµLÄýv»­	·ßU5eþ’®{‘¿×ºªÀ:£yÃæù`s�9€º|…Ê²"có y±ä`ÇP©FÜ’.®O¹Ë]”^–˜‰E&”†¤üGÌÉÿôÚ11æ²á˜�sHm-æƒÅš1ÙYÈ�ñ¥Ä@k•	˜†mÄ¡e*J-¾´>HÞÍÓ¿<å^æÿ,ÿOÓ%��Ø‹wÃîâmËÇâ-M’‚¸cÔK¶“LMZ?ç8y™”å1=¿Z¤õ8´/5~ÌÉýèÂ}K±ãýòów¦F¼_.Ãeý¸|`mÜÃ|�p..ØÜÞhûcT"¹¢›ù9.~äönª,Î«ªŽ-EÝ]‰Ö±§Î„‹³nŽíÕ†Y'A%Øælû ß�µ€!¨&êìJtlxé×S2<°.Z²?êWš‹v¢1”ŠÙ-ôj2ï�MŽ|Í~eJ$Ï/JËuó,ÍÄÞµÈ€o:�Œˆ;Ò9ÌÔÛ‘Ï†..'òÌËÛB>*,üÏW}ôDeÅ—ù92#§Ï Ë‹Ý€vFt-q\ˆ¯ŒðêºŒ£oåBc¬n×ŽÃ«€"Db2�V.Lt:¬ss	‰?ÚÅ^­Ã¿õ]þÁë=O]’Q`ð·I{ê¨
+endstream
+endobj
+82 0 obj<</Length 927/Filter/FlateDecode>>stream
+H‰tUK�£F¾ûWÔ±;oÃyvÙC"EH9D9`ÜØÁ0ê†8þùÅ©ã�UV–U]�þêÑUEûåÐþtHâ$ÉRh{<eQB{;üiÎ£-âÒ„•‰îdË85›�’¸1¢q6‹ksfœœ­‘º¿G›&¨]|°µ‰mW¬üÿ°Q…Æb
+ƒ ¿0À È‹>(Äx¹Õ»Y7TÍÂFþU¢n¶iJœý«ýrH B&Ikh?"Ê8Ï$ã¤Ù3¾v¯Y†ŽÑ¢Fæ^„À3£.ÂMË|o£’r$ókÃ5X#PÂjçl”!é±èT¬øª…nS€eV¨+¦üŽ«Ú`£<ÎÍtÂ
+ LeuÜáÉ±ªÆi"Yým-’¦|Ô"­¤y�äR‡Éxµ;	�¬ƒV¢âš‹fQÓ»MãÂÀªrpÿ¨}¿ÉaµTêÂ«Hf»ÛÏJ¯¶A+eô&f›¢ÇéUx¬Éþ¶ØÂ’…öpV’ÄÄÆØ	/B�§¢œ…Ù0ÜÆøn%�T¼dæ	:¨%WÒ�r£=báƒ$…—–ã(ïCü´üêÖŒzX�¿t½ûŸnäÐ	=-òZb?¹ÕæX|BÜqº3ˆl @+#BtŸËk�lbƒg£0ó�	ÅBôŒ·›onSZ¿Ì‚HCŒó£s#zÑÄ¦¶Þ�¢ _æ~bÄí¬ÒÛÈwö(Ùû�Z®ÔñÛ;.pK~ÿ†¦�š…æ�ÝŠ´©S.éPœÂMèª�Šóo^A¿Ò `ûõß—Ýróî½!hÝÐêñh3ê­YHŒ³¦yüÜ¶`›]i	þ�ä
+¦VC^gq‚;åÊI%¼]¢ýx;˜ß6¿/§e…ç…·‡m¿^¡x	ÝfH>åi—�WEÌ˜R³ã{ƒWR4}æhq:Sy”Ð�<“{¿KÃÖÊ],n‰pí¦é‰“Kst\`ûeÕî¯Ô	4R´RnQ¯§°‚×ãI)º 7 c·Bçµë#uð]ïcíÄKS¤âeX®6Íh¦^Î>„[¸¥6Ú‘™¼;µZFy’æne~c;ïb€ÏXl™~€7
+¹\àJ|ï£Qäú 6f×»:öîùKsWO?êgÍ"©òLZv(~l!b¼¬ÜÛ½J¨µ+ó&Ì&dåf§�XEêh4qÇÐ~9‹è#8Û‡#ãô”&ô�z”ùAÓi\G‡¥�ðLþ`±vâî
+endstream
+endobj
+83 0 obj<</Length 966/Filter/FlateDecode>>stream
+H‰tUK�Û6¾ûWÌ¡*X+ÔÃ²tL7-š  z)z %ÆR!‹†H¯âßyp]ï¶…aŠÎã›á7£öã¦}³ÙêTë¬„¶ÛÐ.o ]7¨qN¶eZª`ÓXÇ0@,¬NäË”ìU/{0’J­všâ6*…$Sƒlm‚�öj�ÅDr§ãSHþl?nÞ¶m´ß7™N›4þdWdMºƒBWií‰‘êš1\õÍ\ÀÈí_ä£¼ùÐù³Ü‰�¼ÉÓ3&7œ{SÏ÷¥¤þˆÈvjr3=®�0³C˜Å‚?%
+"7ÊÒJMÀ§O´˜d›¥…š’
+5¶”b¡üÀ'gZmO+z¤Ç?^ùì¼¸ô£ÿ€EÛ³3�¯W6ä:iÀ ™Î°ï¹Y#Idû&—$²
+ºS’hSB(Ü|“ÔxîéŽ2”6ª$¼˜âMyY»·€¸IÅñºÒîÔc‚å,Ô
+Möi®ÄèxaU,‘8O8@;X|eé]ºÙq|:&¡Ë²�$|0ˆÕÜ%@M˜»d[a´AÀbƒŒs3„ÕÁ:X;a%“]Z¸#¡-[�4~¸�åˆ»k:~Ï­n|¨*A!·_bÜ£‡³ì]’¡ñjÛ‹ò¼òFö3gž”(šÑ«J´~'„Öb‡8¿ŒŸƒƒ	ˆòšübº!ú¼�ýï«¿ço]7{ÁÛ1«<“•·,âO´)�Ì;ÚhÜ¤t/LÉ×l¼°}²¥:Y˜X¼F.?;ÿ�KäêU‚&¯šØM'œÈÕ-®#&UÂj|œ"22TÑŸhRà�8°¢E³`‘�‘<YÆ‹R/¼1µ‹ÛÛ;òN¡-ÞvÁ¾á]û-vQtƒ,g/5¯7&Ü÷Ô>Ëó[*h!TÇtÎ„QvÖ{<©c£,Ð1Ù/Ò >H÷ÅþÚöÖÇ:ÎÒýë–Â4ÏFœ‹ñl‰0Hð3�[Ù‹Æðº³^P$‹Ó¡Ô1“Ÿ‰T*,cçáÓ§Ç”üÁùXHâ3�v5†Ñ‰08`ÉB´Å<ñ1b*+E‹Ä]äMàOgóþ¸dè«Àëâþ‡Dz[°©jÁK_žƒ3–jÆ&ùn°æñ›„%l(dN7KÁžÌ2²Ð]˜1ÞÎž§±[°#dö]�D4¶ª86ë‡·lñõ%ž'�ÖqõöiL¨m)ü„C:r´Æø‡÷-
+%>ä{ì6Ksì4ÑöRx�Þ‚xž£?ñ~é9%Ñ^é·ÁEd²Š×™8’)šs{!ü-Àxîà·
+endstream
+endobj
+84 0 obj<</Length 796/Filter/FlateDecode>>stream
+H‰dTÉnÛ0½û+æH– jµ�u)´hT @Ñƒ"Ñ¶
+Y4´ÄI¾¾³Ðnš^4#r8ïÍZ~^D˜ÐDfåõ"
+£(2PÖ¨¥išAyZüTG7Y�‡+Õë ×jjÝAfÊê�';,a:9øöi:Ww7×#Š¥FÏ©‚
+Ž­}uð8¿¾ž-õ¯ÒCGëìí‘£Uš²ík§SÕX]„…Æ%T¬õ
+álÛ'·ßHªívÈO‰í–ÀÕ2rEÑ(;#%+AêcÆˆ9üÈ³N1ÊaÚ³´:&Øê¥#„LyP&�9éåªê_îø+1g.ïC/„‘Y©0ªúß
+Æ¥QÏò‡´9Ø‰˜ø[!·Tu¬Ã‘M�¤`ƒÓ’#Á�â¤ª<U¬ˆ“î�“Gù±°uìg€š-gñ7NÚ OE=�Úþ¬ÙÇÁž07‰zSß¿­erãCm?r•Ü r‰}„¯¨ˆ˜Å†Ó˜IcwWLè3ßÌqÀZÑ�18Ã™š�ìà(ÿpi2NSÌ%ÌTÃßpI'ú8v,+6ya¹V;ÏæÿÖ
+xlÎ-•ek‰r²Ï4í`ë©{×Ã´·Ü«îÑMØe%¦*W{$Ô[ÀÇPW8i‰9Ï¥Éèöp x×jîÛºš,<µ•ð(?ÈÌæ|�þýa³„[¶ÉÃt…­+Iº
+“L‚ƒò€‘ÐKz¤b]þ^ N³¹hIfB4�‹0&sŽÕ\àV>Ö«%/H1 ¾ÞÂÑÉß0ÑÐŽp²]GGIÎÝ,ÊNÓ’ð§'Ðze²»#nüô`ù#dÿ~e%Â'NÏáÿØX'Ì}gÇ‘3	:È¯­‚ÈbîÝÜO²!Üwk¿!‚}çe„~pQE°W±ž¶ª÷¾línôš&ËÏ¹÷ø¾OÌÙož{¿5g‚Ë‰r�ƒÎÿ×U×¾"}LG…»W{@³äh«îåÀÂÆVCÛïü=­Ñ¾­õ¯p„iÜß8+x·ø–
+ÞìHáxÏ†89³HJ[ß”ø#À_r
+
+endstream
+endobj
+85 0 obj<</Length 29578/Filter/FlateDecode/Length1 51612>>stream
+H‰ÔV{<”éÞ™1¹SC¯Ûæ2xf
+¹Ë]aäÕÓ`0fš¹™9è¶EB«U„rÉIE[¡¶V
+¥ä´iÛv	])g¥-Úw¢Ý­sÎîçò<Ÿçó¾Ïïöþ~Ïïûû½@J àA”{��WîhXFy¹ŒdIWß	hoÃh¡,.“ß§Ùö3ç© "Öf%Æø÷�“‹áÇrOzséŒ s;61-æ¨R¦;!­¬q�c37^ÛdÅ k#fÏ:#¨Ô¦0éÀö†q\Qjäs’¶Çl’�y,&2ëÔ@
+Æ&S¹ÌT¾R«:f¯[MbrÙe-áÞ\Àô‰9|žP„Å��R>_Àæ'¬¹€ûT�c4äÝ”>9{j€wƒœ%ät¢¼ižwÞKEDW!!'`¤X‚Ð”à¢Ü'#`‘dFDˆÄ‡*a¤þŽB©ÔÍ¦‡w“¢�ð@"`¶œ¤¢Ú#¨(uy)$M�ÈöûØÞ¯FÛ+$­P‚“.#œÊªÅ7V|&YK9¼^ø©æú»UPñW?æŽø m	Ô!âC$õ…¡l'ˆ›„’…"ÔŸ-Já	h‹ ¦T@A]é½õIbYÐ¨ÐtŽað›&‡ËFƒDL.Ÿ“‹±›9,6Èã‰hË!}NÚÌŸ�úú¬tõñõ	^‹®tsóöp§¢Æ,[ôÃo@ÝEŠ¶6ÐŠF‡ïFÄ"E¸Ò 
+}™•­•mÄÿ~âòßŸ9"ðâ]Ø¹oÇ‰Åà¦:—I5·SNOÖ(œVU»t;y¨k™éÉþ)ùÈå“få\ÔŽøªgtjÛ‰[�ÿ%\EŸzu“æÌ7áS&GÃ7”fÌ£UÃÅ”+›Šné‡[ÞêÖ�É±>[Tßì·êá3{ý¿…–fé•%æu¬òÚß|ÄúÖyó›Í¶_àð ?‚ó‹¢ä”ÑY¨–¥ª²[¿»¿IÝ,rÌ}X!õ`uÖd�¬@÷ÇµãÝ9CÛ‹|ý™ãMÕ¯=–+”óC§v›nYÔû€ÕžÆ‘Z/6ÞñÓÓúºë{HWTäó{›�K.¦™äÞ}{6ÖÕûH�Êp;sº,èÁÞ>¡óôÌFNCHßŒ*‹%”à*ð8‡S‘Kç®ãEïeœ½8ãöƒ†Ö�ÿGc˜¥ÓW|bë_A\ñÞ?Ò?ù7™Â¿�ÌÚÎ	ÐƒÙ®åÅ ÉB6Ê¡q"_hgi™’’b±SbÊ,×RÀgJ…4ÚRh$UÆ«ëþqôP‚èŒc	¢0:	'AÐ‘ÎÜúød
+ž¥mFfÞË>­©S±³À±eiaŽ†íãÜ^“BbŒw5ž±kŒQ3Ñ¸¡Ïrqçžç§fìÑë}øvÈâMcqø–ùÈî)­þî€¯Ÿ–´¸¶�¹†Lå¾ Žî,¥Ð&ñÊý¾e†¦wµµó%“ÇÇkü†4jîçtÆ]`†×	ú§¡7ã[KývûIÆ…Õ­Æ—Äq£#—O»ŠWÎÖ=¾-Á®éìŒÙœáN¯à†¯Ÿdw’_^\&w™¿Þ²Ánk�Æ`·Eò‹ñ„Çº¨6W¤žQYë¬O+WÓ|%<¤+ÙI0{ä‰óåæ/	°(^mšJÌ9îÉ§zÑÞ•R•øŸ‚.D9¬£ËÈÈbðÄáû=Dò¥IÁrÂc	ù&EJ±Š˜¢d!”Ç’¢£Ž€îÒW”à¥yVˆÊóFò¦=Ì44…Æï
+ã�…”?Ê6T—Z1",€¤÷*x9¨ %*x±ã_tóI+Šªuç'CåÀ¦�›Zcs/<Í÷T¼Fök›ÌLG!]+nga½tbï{MâÒ'Tëæ¨“.}þÀ%ì’ŒÑXc£j|Ýû«
+¦ŠLÖ»„L:pÙÚÎ–-'VÓo46´wÊ8¼õxòõØÃ¾^Ö1ùš×?jÍ¬$Å—`]@
+û‹ý<×”Áy°ÓÁa›jŸÓëÉ÷.7>ÍšÌ‚¾�Ÿ&àÄÆ‰¤(Gi¶XEúqXž�#BÝx¾MRæ„5?äðL‡—DÓƒKæ
+Cë7¾´ +“Eq<G”6ÿk¢Ñ ´™¯j:¤Ñ—Ñæ·ÿ�þ¬HëpçÎóGì_øk—ïKÝUÖí2útz¶Ø·êôì�JÔ)sMå•ùQô„>×�iÏ6wßyñ¸,�’_žÓt)!=Ú`@Çáž2R8Vr±Ý<fÿþ¸OJ¯ÛQÛœ
+ÿä¼ç(ÉiE	µÎØ¶ö‰Ï_]‡r”[ö'†0$™‡¢ÌS|–6o´ß@¡Éj”×�î1Óqüœ¥.Ã.×±	Üú²f¼÷�öÍö�¦íÙívO‚‹ü�ÍÔ¤sEþ�ZÝ%òÆz ¬ ŠcÓ²ZMÖ!ômäëê’Ü‘âÐ°ñ/í7,§îLµË.ž=Þ³e †,Xçp¥uB®J6s»šÐõÜïç‹´ŠCq¥ýA¼Š÷e«D^ç�s
+ÖdiœôÛýöê!Á>’?Á8^šÃâ1…Ž]“û´¬žžAo§¨N®‹¢—T¸ê$³g[~—ÝˆÞ‹‰°½ÔS^—£Çßü½ÛÞ>¢Î:˜3kÈuîê®¿'“ùm—c¹
+?¾eV�¡ÅéxsÝmH5e<ŠÎh¬_|ÙÌÆÈ¼�}Hm‡‘2«êe0å•^×€æd`C’]vF²húAl¢âš©sÏ;Ï�^„oPšü6�b²ß-ÜáçÙ÷ñÍ‘ÿ8ñÝå°glŸÎÀà/›ñÆjo&äò³Îì»tÔ†:œ>\›2´¹\�w>ÃzÇý•jµVñÚñƒV?ôSÃµ„ËËV$ùQ£O“*?»y+ØÙ³‡r„?¨f·uoryÍ�
+¬+tawƒówƒx…RF¸WÿõeÕÞÇñ3‹!»,
+Ch,YçXj¸öÁX‡2ciÓdÄ\1ÛCnÌÜ¢eŠ6¯T–QY¢•‘z¹ŠkP7Ý"ŠÊš’èÞyÎÐâ¶¼žÿžçéüóÛÏùýÎïó}¿_…{íöÇ‹júÿ/°Â€±@üèì- `ç› §’š<£ˆ¤ùBŠ ‚¨!¡(éO�ƒ}nüyPVÔ)®(¾&„ÁŠd|Ü™ä÷vö½cŠç¯Ž‰µç�¡¶p„û}ØiˆÜ¾É¦†Ö×4‘ÑDbŽ&ù;•}Û¥@Yó£³V¸ºq“í«ð^ãwy}3fn"Í5uúø]Ô;�1ä’NÓ¥ÕÄ×;.—ó¬ÈKJ$µ’¶Š˜jiúœÄ�/lïp×³Ü¦g>u‹hÊ´},v{´€¶êœÉ¦–º#ß�ê.‡½âÑq8\KŽe”·]{TQ"�í]ýÖêlyïâî‹^Þš�YJ·ŒƒåÔ`^í~øÄõ�I1<e“Az³áØÎãYçŠ:%£¶ß7wÈ8seKÃzœÆ)3ÙT”šÝ±ŒÊætI=ý­eY©kb¸¡ìfÝ2.rÆö˜¸‡Òk„ËŒ2ÐC~èÝ+Ö›¢‹D NqËáÿ¡ó-ÿŠú1#�Yô!ýTFÀ‘˜‹75dÑ*h%ƒõWq-f#×ryÛ×D¨—1_ª~Z „DK/•|�X8U%
+„(7Ã ³h1ß‚™sÀÓãÉÓÙµ®ññçyýª7ýËÕªË¯!ùÎ?[N^Õ?¹Â+g:¿—¸—ÈXæØ}ÕÄðö•û˜¦aÃÚµ]I�«%lÞ,k»w#b7GÙ)ˆñ+£¾øˆñÞÎŒUîrWïÑÓãâžtèÎêì<ºíG=ÂW·²å^9“ÆSçy$	ÜÞm4eZiRÏÅzu3@ëN†›ÓÔT½ºã¶þ<ç‘p ·Ô±ºJ¡Ì¯wêÏ|CN»&%ŸV£ŸU�¿7KÝË½Îñ(à_Ú’X¼¤Pˆ¹A.(‚”}mÑµ³Ñ®]ûôIÓÁƒ#:iëjVþ1ýeÚ±±;!±
+,e¦ºOñjqû©� WL†ÙÛy˜IÒÅH€è1_ø³ÄD)Î�
+ýLAS´°0'ŠègÃÏNwDM�ÃÿoÄô{f„úÎËþcu6«Ú²«ÿÆÈFÊÓ.)žP(üÁ“©³ŠypXÐ“ça¸±ÕÙûx‚Ák·f5ò­NÂv±Öml$¨­§)ó:øø}@£¾é�]ÔÁÑƒò×Æ�jTûP'¤R5Æ/Zò*g¤4¬£õJý�šò•3¸ÊOãOÙ¯AíË®‹ªÒ2ÿ{Üâ…öëÄC°Bë±?F°Öó8P8Ö]P­LÞ¦ª‹¿+d�PMèþyÝë8±ƒéßüšÒ�$vÑö
+å\<hB^f¼{Ú`±¦aVf(Ì?˜ýÓ¿œtÛÔ
+ìÂ
+ýIÒ3Lx´sY¨Îï&wÌŸõO­vK­´¾£tÿEŠžVfß0ñÕ[l>Œâ"ìá?b=wUr";ŸO$¾‰ÂÏL	o¼µZk´Ü¤-¯â|òF½Ë•ik@N±h�æðANNÊ7¹Ã�9ý¿àå×†»h«šhèÚåÙäý”jù!¥fo%D||Ï\æÎõšD±YŒØà˜h‘¹ˆ¬¶<ð…•Ï!Ñ?£H�ê}$­”ø®°¬u¦Ðª±ªoàoÔ”ogaVqÞ‰•'QÃ\²ºvµ’p Ô~QƒÊA$­•äXÞ‚ÛpqÜm³¸O£P¼0ýÔgZ.óèAæè#â¸ëžWQöW:´”¨zBÅò.I®léY¢ë†JÌžCö[#ovM%U£-É3±¼,lÝ–†RÖ‹ý¥’Œ8cT ¼¼gkÐL›q=«YfÖzLÁ9fl&ûˆu#�]¬a¤rÁïUˆÿy(å�·dH®ñ®{Sòò¡qTóvJ¦2’'ý~óRÇÉÃIù%’9wðòç½¶ëdéÕ„½+°ËÅ7f_Kƒ¸b‹†H8Ãå~ðýÞÒ‰ùkEÂ·šÇ™•>ùÌåH_5<OäI?Üþ"$�‘ü0‰@Ã»ÿÜ’‚dÁ…£Ê°j?-DC‹Ñòô'»,ÎÆöH.c
+’ý—AÎîó¥¡Dð_y”O€
+0� ˆ´
+\ÆÃå€÷Ñ�H¸î×·¸æ×"�¸æÏcÃ+˜s=Z€@@äë¥è|Ð}||üº�Iˆb…²éQa	_F�h.Ø^“^×èól}ø¤bO¸z-GfÀµîtºÆ;>!"awwƒŠ—±|®^ê­ÂüÓôàc	ÎÏ)näêë.ÞU+´(ÿk½šÎ£å“dÌŠ÷3*ìà÷w;±ÞNî¼…7–n�=t¡ÈÀá\ëTG0;TÜ¦ô€Œvö±Œ»,šºœOSš®QèÓ'¹òT^ÆÞà¤‡›’�ÕâSÚ)Ä$¶O]6kXi�çJc¶v–nm›‘×‰%¥/±�IÒNÞîÍ²
+²§ß·?¸œ:½#cßZí¥ùÖNPÆÒòÑÇ™X}Ÿ¡Ël{—,íx9sUJñ Nö`±/oŠ‹�ô•åîÞ…Ó¹ÍMÔ;Êç"=A.Òõó%b .Òî²˜}Ì@Hs™°€UüBØL‘Ð´¨ìØè-JHL<‹-•ç,ûq‚±–[d02
+çðŸW2#`±ÆÐ#¢Djõ
+aÇ1ƒCæH™ƒ¦ó³�(ÞZžnŽnžnÔ@-ÉÙ‡êìd,²
+˜¬ÿüR^"1b=kóaïªúÒ%lö’±µ-õ©!Ž€¥ýiD’…M!h•9œ})íá‹Íûm.1WÚë#™ßÐ/kJ·[ŒZâ´á`÷¹
+ZÝù\K‰A?IQXDÈf&-W
+[gÈ~sé´SoUXŸ÷àÊ QÛfáÿPEÉïD½¨•¹ÖXá>„*î}�DjBèÇÎå$¥H{jdGnÊ ^ŽøÙ‰[¸}’áþ™µ-­ÉuUd'Â~eÛ¿¹®¨(¯+üÝ÷þ7¨ˆ7@Q@q‹Ì "(žc\*ŠjÜ¢Ç(¸¢&ŠZI4îi5¢Iƒ'ŒuÃÝª�6A‘­U«ˆhPD==Q[#ózsš¤sÏoþÿ¾ûîòÝïþ“zÔ1,(7/¦6ç¡
+,²Lù!®hôÞ+'“ÏîMùÝãú{µ/*Ÿ/»áY]]ýÏ¯öäÖ©øãßwËœÝ4îAÀÊá³£z_h6àòÊš•+ôº²½Íl»f-|>Ãkw…gøŽIQykõÇ3Ÿ~þî«¾ç†¦ÈÙå¥/LM°¦DÄŒÙú "ã›v­½ –¹˜JHNÇ¡µUEñ×à×ÿåL-I	á!ÍŠç¶ä~¸ÄÍRðhü“:cúnj‹~¥¦º)ÊHÇl ­uãSõ{tT)î«½Ü€v€¾ÃW
+_µ®äÆ=°º¦è*ÙŠÏz}ýü	Ær¡q
+™øVH8èMŒ„AþhA½0ˆ|àE^…ƒ�_$ãÿÂ,A7<¤D,¥`Ávtb²j�8|„4@?ÀRTÒdóî/È†ÎH¡$}C‘¦ó@lÂVòFG~âEV}‹-ÌÆ‡8Š«ÐHÇfµƒ­¤1õM×‡‘�
+J§Ñº=2Á-ÂfìÄ	ÔÐJ:m(�…þqó·…Ê|ýbÕ5Ïƒúœ¾ÖßÉV‰0#Q?†
+µé&÷VL“Qüô3ÂMò§™oDóY™X€Ê>&aÇv”ò¨Dzë"Ž¦'²±U4�N‹@uM=Õ¹hÉñE³§(â_ngQÇÖi˜œæê¯ƒ¸ŠapðIËñ¾âÌ�a9GÍ)�²å¿Ð-º#§ËûlùsÔã9þM¡4™‰þ"_uoXª"„#´±��Áä¿—BÈF£yïvñ¾X$ËCò¦j<Ñ±ú,LˆdÝ||Éq]B%þÎõJ¤Tº*Éýê�ÇþF"‡£XŽÝ8‚g¤È“šÒd¡(êÉ‘åÑiº#:«)ÇÉµFÏ×kÈXÉäA“ƒ)X†8ŒrT£õÔ–wFòÎþ”Fki�år„Ì�
+›±Ñ(6Î¯TuÆUáªâ¬7Úy©,™˜ˆ\Îu)ËY\'Ií(€-õ£d¶4†&Ò*¤Ohí¡Ctž.ÓzBÿþb�Ø Ž‰¿ŠrqYv�]¥]þQ–�Æuã'óØ†®S®'º‰ÓQºPo×7t½»
+íñý‘ÀèšŠ%}!>Á§œó¸ˆ+Œ»Ûn©ÁS®ÁOdb4µa�:‘•:S8G7‚FÒûT@ë©ˆ¾¦;TC¯DSÑ‰¥«è!’E†È�Ä+é%­2NÎ“›äwò¥1_ug)VÕSS�9Ø£ìÕ¶†[.¸&»6º¶éÆ¢‰‘×Š{.šÇ{wØð³XÞÃ\~ÈeYÆ8,aù3ŽáÊ8÷å¸�›nåWâG4ÀE‚ë©Èƒåµïoqe-Y4�kûZò(ŸVÑf–môÚÉù­ ï¨’nÓ]zÆ1ADˆ81€#J£E&Ë‘-–ŠÕâË%qUÜÕâ¥ô‘-dGÙY:ä$¹RH§< ¿—WŒ#ÎH2¦ç�
+Ž<I
+TcT¶Z­vª]êŒúFÕ(mZoúÌTjª5{™{˜ÓÌÃÌ«Ì23ß4k�ÎŒ§Tö¾~ù¬§ÑF¤($-J9î“bŽüVl â_i@°ã1F”ÊâÓ…²Zîù€aw?îÇ,V†ã(S•†¯ªÅyÑ�™7È±â¤Ø"ü©‡ìc¬0Ê˜uæ³Ÿ»Äma%¬QÇÕƒw¨
+þeÇÎ¹*àœ&Š[T,¾ÉŒäk(Ç°;0�z²wãq/ñ‘:Ä¸[ŒËx„ª_¼5"âE“¿˜kêÍ:BCõyÑE×q×ß¡¸!_2ö‡Ó`ŠÄÜåª_¡hêh¸Œv¨`æÀ6FíØÏ=ø�ÄôGd4Ò�*®ydÃß\v5G.£ç"ŽËéçfî!�lÌ¼™¹ª‘G½QÂH`qwt.R'Îb¥é:¶bŽJ_ËÝb‰Ðò‚aÁÇ¨’)|êBæ§öÍ–¦ñ'‹¾ï*bS‹XGé°ó“$èiìùæ"›ÎÐ[Ô(†K”B¾8ÅìåÏYÜ¨<]õ¬y€ûð’h5ö»Æã4Ï
+¦îŒ¦z5Wª/ÕuR]4uÃ<îÚm\ÅjüÈSÃBÙœ‹‡xÁX�çî	çþ‰c/’x†½+FÉH ¶˜ÉÊ¼Ï9HçJÎf+ùXÃý´›gÈ%<%ÊÀI\ãÎñã>Ïæó=ØÎ ¼ÃUŸ�=ÌŽËh?ß�tå<½$oŠsø¼FžÝÈ<{š}º‰ûÌÚíW8õ!;W//{™Oè�4ÚÇ3ùzñ¤´Ë2ÜCO×xîÑ"Þ—ÅØðFôRwI Ü5XÇŠÉòµæièÍ¨Æ“½Íb/šs
+ð¥!ˆq
+`kÅÌeij·-n˜­ÿÛýúöéÝ+¶gLt¿±E¾ÖµKhç�à k§@KÇ€íÛµmãï×Ú÷�V-[ø4÷nÖ´‰—§‡Ù¤)ákb–Å’å4B¬II�ß­cùÆØ_ÝÈrZøVâouœ–,·šå·š6Öœøš¶×š¶ÿi’�¥/úF„[V‹ó¢Ýj)¥ô¡#y½ÖneqÖ»×©îu¡{ÝŒ×��¼ÁâðÏ±[œ”eq8çæ8²ìln_¯kÂ¯ˆpìójÂË&¼rúYgî#¿·É½~ŽÞû<š±SÎ¶V»ÃÙÆjoôÀ)ƒcÇ;Ó†ŽtØÛŽŠwRB¶uœÖxgó0·
+þËzµGU^ñs{wC²	†Gä.K’Ýò0/)I’ðÊÜMi»y@�š�–Ri´0„K¨§ŠÊ ãÔ>B+7ÑÑÀP&3ÚþÁô�N«•8U; €ÚÑNÇŽ¹ý�oïÝlBZh§™ür¾ïœïq¾óý¾snÄ6¦ViºÅ6úv>
+ÕûBƒFÏ€�ZãAo{ ½esÔTZb¼GFûV™Ó¿ÿþŒÑ.Ï¬ŒNµæ(FõŒí:w
+ã°nž®�¦Zýü7Ã˜+çEâF[÷ ˆu�:v“Å¢¦t[ê|>Uâ|[Õ¬‰ïÐÍ´ÀÊÀ6cGW“m˜Ô°ÏßŸ�>g½KÙÕºÑ
+øÍå9�XKUnß=d4ì{ifXŸ9ÖRêóe$Û7%Ýnx'§6¶$m¢%†s«®!Y‰=
+Ô€¦Þ¦Ã“hg*å?[JÉh+Å0üÄ$Ì2Ûq#ÛÍ´Ê¸á+g=Ï7]y¾€n|N`@àæ�±š[£åù>'n2O’TƒÝi›Á YTÄqWâNáãWEiqhï€ü\`—O‡@øhbÛ+_€ðûý|ÁGÂÔŠŽÙUMôujÍé§ð‚`Ì”ãlt,YÙÒåX’Óã0ùe|že™žüäoºoÚÔêmå¦4í?˜·$ìu��ºúæ¨^mÄíØÖ5�é%ì¥I›Ý2§VF•ÙnÉ9Š°‚”›“ƒ¹õšj~5Aêö·¬I�˜¾øêÄßØ$¿ÿ.'
+XŸð,!F§ÙnšåÁ±ýŠ1ý1îy
+«ùr]S³aLc‹ F$ GŒ¸Ñ2`uµt_À8‡Ï•cWuÜ¹ÑëüÑ3ÒÃ!¶Iå`«L+ûRw}_XênlŽžóéÝMÑ~Y’+ã+c}sa‹žÓ‰ÂB+'µÜÓ¹‡œÀô~Ù#L9çÂD]Âª
+…è·
+H$tG'QÛ€œÐù„?Å|÷nÿH5=è£É‡3�ùÑ­LÊå–ì —Îª»ÉÄ¿’ó€õø7òÇZ/5ÈeÔ#³ì¥™ÐG}ŒæaüJôA6Ã.C_~`1P
+¬±åj`9ïœÀ…¼Ž�D»wÓf×äsm¢ d=�ƒv¡úÍ×Ê¨*³ÄØihÏ‡-ß}Œ
+1nú0n	KôóÕNÚ{-ÚyMœ#r
+�	½û_aŸ!+ÕŸÓ*Y7ÑÎÇÚ›17¨£u�ë!×C¿úµèG0§HîµÞ@»
+í b³†õâì�T¬Ãœ:øY/Öë¤å°MÅ¾�€Ø³”zAºDÏA~M-$¯87Æˆso=ä*áÓ`Ù¿T°Or™õ)ððží[Ím`¿RAÔ¦,¦
+È. ÀëË—qæ’`/w}AY_â\ïÓÔvJGÿ:ü¬w½LK¹LàïÔ“ðé3Z[P{’æC¿D¾ÛJóåŸQ©–Gi8_3ÆV�‚{Ì…vjÂ}X�“Õ(¶¹@>îð¬'Ç}¾_œÏú~ÜÀ˜z ‘¹%øÕN>ìÏ1ç»Ï�6�€›ÖuØ¾|çªî‡ýÛàpLÌÁ|¬[aó°0)æ^
+æ±øž$8BYÀ=6
+€KÀAàq`°•Ç`Ý"Œgžt`Íjôç0?˜X‹ï¡ÖæNø](8–x3Ï ŽµÀ ]ÃÛ²1c³ø½0gÅ{Á[`>2·˜3Žd~ÞŸ‘^åsò�§È×UjdÄÙÁ­™Ï<c©R‘�E4�9Ë|s¤x“	ÿóùM82éÞ'¿–j�òø­2“ï”c‘”Ó©k®Õž‡ïß¥ÕªU:h…ÚL5Š‰ü3ÂûY7Õ!zQþÝƒ‚38#==Nò=ŸpI;\ƒô
+b™§^¦§!ê�<G’\®3Öu×ù@N;UŽ‡4˜°±d¤Úþ[ýÿùŠëmEûC×ÞÎÇYÉý‘´Ð	}?Ðy‚Ò	O‡4àÞˆ÷Dôð�Æ[S‰:ˆœ�EaÄ)ú�ÚOÁ¹*ÀÚ_Êazí7‘ûJÂûÄ^òä€×‡\›Â£1œ›€KB:|�@m.	É|F^{Ë–oÛòdœ,àÚÀù™ëçh`u’¯/(Yçðs<Om~®³ùy;/GåbÈJ»¶pîÎäwŠ½Üö›ÝÌù‘sçHÎsœãœñãer~/=…3¼)òðeÌM¼ëÙ@Á¾ÏÎ#ÈÃÖA‘Û­=îˆµG-¶öheV·öä6k¯¼ßÚ™¬©*Ýgç2¿SKE½@iNuuP§�Ó¸î.qU 6%ê¨¨ŸÚ2ø±MÔ·úÓøŠ7x”2åýˆkMRKh«r‘eê&ôj1r2ÛvÓ\ååªG�ëž°n(�Ó2Q7WÓ%Ne<Wé§t×#äwý	µl¿õ‰X�ë$ëØm+­à\àÚ)jï;‡øî=y=*ˆ1—‘›†)“Ï"bPKsDxî#D¼–û:ÍVËDt†˜ówòr<8Fcb‘¨ÍµbÍa‘Ï¦ˆµ‡±çïiC›Mµî·‘3y¯�O“9/Z×ìš]ƒzZ£<�ï /‘àÿeò*%”ƒZ±±J}1ïÄØ“öwKä}Qïo!W�#®#Ô ¾'Øö#|÷¼F«j/ÍÕ–#?V ÷ï¡\mbÔDÁë5‰½¡¯ß'\§ø;�ßË2òjqÌÇ»>p½áµElkÀÑžI¨-­”.÷J¸—+¾ýzqï½G=–‚ŸØºÜ„”üò5Q_ÙvK¾(Ÿ•/Z¢Þ—PHù5êãÇÈñ¯‚3i™ÜF¥²A¥j¾Í@ûTªü
+8Žì·†ÕéÈáUÐ?Æ¼?"žé°}Š1¿bî½h¿C•Ê+Têzý<põuÈaà˜÷êQ^¤ÍG‡ä6ë¸XŸ±äo^�çÉ¾:˜Ðç_�wB«FýLú8�¼¯+æñ˜k˜Èú3�—�#õò1:œ–ßÂÜA: =i�—pOÒÀI¿¡ÕBöõ¸ÃR7°PÕt
+²òC`8	\n©K‹côäKþU`È)Êö€ßW[*x¯‰ô©Pÿj�Oí»QCYç·�?EKÔï!×.´Î3”½È€6ïÖƒ¼ÿè7aÞ¸¾k=¥>D÷ÞÉŸ;Aú-1L |7g¼[ð7×çÿ×zwÜï�o‰øŸ¦ù‚C×ðMî¶.IèÒ»ÖÊIÒ‰>e‹xžB]²ï	ún¡wàÊýJ)ãõh?ÀpúãïõN}¬»=¸Q˜¡^Åx`|ßÓEa†ÆÝÞOîûïÐDK§ˆÚ_þÅ}µÆ6y�ásqœ8Îg;	.ŸkÁî—”°LK>siY7C@‘VÖŠäG©íF2&m*£µé4m“P±Dµ.aƒ´tƒuÝçë†!Íð��vCUR4)¡íã²–®M2Ö´ã–ì9Çvš²Œný3YÏû¼ï9ï¹øœó�÷=go´q‡„$Xì¡þ¯ÈC€	»ñ£1}>%°¶~	¬õQ	vïQ€o@Ýå_'1i]ï“ëÊS²­j¯ö'{Îs÷m‰íwˆ/ç‰zy.OœïÌ}ñ±3¿>}Þ'ly—\Èñùè›øèÛÀ·2UŸÿOÀ·óGàeàø§:Î9%8«€P9êfäª›ð]¼Jê	¹#äê1B®¥ _÷�;#ÊÁ¿B(û!x%x6ðê>DAÊ>Öb+'OgòJÔ�­ƒß“@2ÝÏXôJôÿ7`ð”_Z/ ýîÍ`êßL·ûøû°¯€¿	œ@Ùø<ýàèCÀ?�=@(ÝßUø]=,ó‘›¼Cÿ·<Åûã?åô{ƒ³œû†¸%Þ<=ç¾9²û?gß7aµ™wÓÛ“Þ>S½q>Æ8?ŽÉ@.íGNé“y´Ìeeþ,óÇ,«wîƒÌø¥“Ø%óW™;Ëü¬ÞwyIÖyùÄ¼²qdÒÝÊ–�¯eàÞ#+ásgm„ nz`|4�ƒ’„Œm*Ž˜ï	°wî1úÒø(øUØóËÙ˜–½[o¸coŒiŸª}«1òÄÔu<”ƒlyK¹õ¡|¹±øV1]ìþÄ±|Š=9Nÿ·v6Îg1]^š›LgO×ß­Ú¹yÇ$û�Ä¿©Wvn^’µsqCý�g/�Ï”ã{Ë"ç»»Uà;]ak?•ý^³sÈùŽ'¾·Œm�‘UÀê,ãþ¨À=²Ø‘ywù¡#ž�oo,¸FŒ‚_6bìøoä�Þ(ëÀ;è‹È¥eav>îbé{_§;Ï¹çVæç*?Äš©¹'°ï“ðY 8|mb¯ñöÄØ¯ñä€xçòóã£èktª\p*Æ;o‹|ïÁvÃv%�ã)·V¯6Ì$xñRÅ¢b‘qDVˆò¹F��³vrÑQ@EÙUCÄŠeÙò´b+�ÁH!®÷a€Ùˆ�bÑU+«b©1r6åc¸¨©,å×,ÏŒÆ¯[îRÃŒxøeÄˆË„‘.~ˆ¤FZù(‰îEå�r ~Ð*tø/8é„¤Ê6é?l•–ÉîßîbÕnP„«ÓŠå™m4Dfð71Ÿ?ð“ÄOt~<ü2xø8…hjžÏYn�Çxûà¾�?J¡ú§|+N€ÎðÇÉåvJ¸ÒãœA#RÈ÷ómÊåüë¤üUþˆ0to735ù»–Ã)ç÷®ðÌ4zøEþ™¯óðš¥»{øfä?IZÍHDŠx3‰eÑ1GJö*iò“a¼Ÿó8)C]/ßNf‚ŸçOˆ™zª›¨Ü>�½`¼gEA•$Ks©ˆQžbÅ/aÅ/©ÑÞ·.7Hd!ßAÂÃ¢žƒvš‡AÂ6
+ak†°5C˜Å2[ÂßCÍ{ð	ñÓ¤�¿AÀ^è6tù¨À
+QJ Â8ÂãÛ°žn¬Eéã–Ã%g¶M””*·mV‘Ë¨ïáýHÌúÑ§É¬Y³�Önþ¤ú+	köÙàOÂQ„¥ûvz/Ðp«ÜƒçO¨•Ø®V ë·0)qóï¨ÆãVQ±Ãî7Âl…Ü	ôÃ€
+n�ø�¤	àpo°\nÃÝÍ¿¬^¸ªô¾}�Z­5b¦OÍùÊúnþ’u|­xPÇ×4–µk­åµF¸›¯Ux­ÐýébQz›RîŽôáYiËáV)ÇÅ¢À¥Šg¾;´fÌ2tÆZõ—ª 	¯ÁÕ`ýkð1T©7,O	ŽøƒÜPÓ6H3Ð	t6l¤wi�3ªÄÍ—á?-Ã3bþväÀP~'©vÇ€3@ž*mÊÃ¡20ô‚í�4�f t)`È'½¼ãTÂ;º€AÀ†
+Y‚y,A]	÷’ë„è$ÆÚÍZ#1c1³ÅòbžXq�y×‚%†ù°K¥¨€¨iv´9âv˜Ž÷8¼–O‰üÚ*�Yb¯­z=úNôJ”—Ô$ì‰|Ö)¢Åd8é¥XXó{¼·n°n¸Ž÷F£ÃQÞ{zðôðiÞ[9X9\ÉÍèœZ£¦‰¶ÒÝIm:
+ÑzºŽÚšx+�ñ�Ü¦ó¯ÇY°5;Ûœq';Mgƒ“{œ^'K8;�]Î”³Ï™×eOÙûìgì#ö¼{³½Í·'ì�v»žÊ¯Ï7í¶‘ÈJöµ²`$™PšGÕ¤ û”�Pv3d›²MÈ¥ù!ÃRüèëuøÅ!€ô“¶2,má‘�BYd`ì”9×˜æ	xŒèH€öÎXW `©H-P³À,Ô,Ðr@�=€~¡~Ì¶_ùõÃ¯_ùõÃOj7+k†lSš	Ù 4?dXj¬_økÜ‘Yl7zl‚ÜéÜnR´*K—l7¤É:¬;–ñ$ëq‚|išŸ¦¹Š¬ÛÊ�¦ˆ›u ËtÙ�N¤¥õÒO±v±Jú¶‹Ï¥©¶j0RƒP)§ÒNw;z�Z²^i•�{Âî‚<£´6ÈÎ‰vMJÓ!³m9ëÀ¯š›mEéVÓÉHYÒ’’â‚’$;**Ñ“ìEQáYi’"¥Œcí5:¤ä¯”Ü«äSJ~II·éôk—ýÚïýÚ~¿)d÷’ŠG”¼¨äÃ¦+ ½ÐŽ´}íÙ€ÖMÏ*n7Ë}ÚŸögŸvØ§=ïÓvù´|ÚzŸöEŸìª‚x‰ÆæII7)9×œåÕ®yµ¿xµ^í¯öŒWÛèÕj½p§—45úc%ŸVò®ÃÕš^­Í«ÖŽ2ÜLô~á&ŽnÆèýDã…"X§'¹C»]D€æŠh4GD7€ÊEt¨TDwésÓCÈHtæ¢‡
+$‰àvT;ÓT ‚›@y"ø=IÇDÐº*Zæ�®ˆ–ù DK5hTÒKôxU¡úwÑ²ÝÓwH…ì–¾E²_€“"ZïÃéÑ‘PÖÑ(H¥Û"ˆÉÑ"XÚ/‚ÐÏÒ´OuÐ3¢e)h�hÙúÉ¿ˆ¯¶à&®3|Îê²+ÉH+Ù–dd{µZk-´–,lŒ­"ËB–TYC0P‰ZÔ6±0—®lw`¦0qÃÐ´ÍL
+é”æ-LÚÕ:C!OÉL§™0õLÛ§f\?8iië§º4)úŸ•“žúÒcŸóŸ=ß÷_Îmõ¯ZXñ¦8Fì]EÍÎ$j²¨Ê€ÇU™X8©Ê­ N¨rˆ£jü>ˆÃj|‘¨Â%'PP‹tX-þÖêDò( Áƒ¨C³¼M•É’ô#[×áôêDR¸—$v8‰Kš•„Œ-®EÝ••‹©	D—€5Æ�jà¬ÜæUÈþÜÅM1$¨Á@âÔÂ�j!
+ÂC4!¨êU¯ø!d»$,V
+z¹_a*hÍHÄoÞâVÀî£xïS¹ÿ$ÊV¹@Üâþ!�p—Ë�Örƒ+|ã÷g ÎÇ¡›°p¹?|Ü‡A`$<ÜoƒaîžxŠ+ÞãfäF®�)…îÍÂÏEPS¹ë�2…Aû­ÂÜ• ÄýX,“~äÄšžâÎ‹ç¸I8
+òE®làNpGÄ‘‹;ÜÍ�ÁD�Îhá7|�êÐ">¼Ï
+thsÈ´íˆkÀöÂn®" ‡Á8—m îx�¬
+áÞ™ûÜÞÎ»ü
+ã³P¿“ÓïÓgèz�„ß›fÚOót#]Ã8–±2UŒ™a#£g(1ˆª)?]HHÞ^5F–£ž´z­ÏR¤…†ä$f(ôu¤Të2Tf ©tJ™2ýt·Ò%ez×7³%Œ¿ŸÃeö ÊŒx•‡B›_Ü¯„$V”Ù“tY¡^-c´'[ÆO‰Æ´Gqôfo#Œ[¦/{ˆì›¾œË!çT�»Ç·GûRÏi†VÛtJZ+nIúÊSƒòFf «¼Ó�SÚHçiC.£lðfoSÇ¨#éÔmê(¹ìm<FKï&ãx,•Ú�†âÔQ !™ Qƒ(Nh0>ø
+—`8UŠÇ+¤�¸DHpivj¤ýRï³$Ý%Ü«‘zu—4ÒµŠÃ ÄDÍp5‡AÃ1�æ&´’(‚¥‚H(¥6%±Mƒ_\ƒøf¾Ià2Ækx‡X‰6€DÍƒH€#ýËhòPÂ3ÝSÇ³éQ!=$¤G¡)—¦ÆÜÊÙ¯·t|Š^E'�#rxT™FSÊq!å-ugŸg	Ü-¤J(›Þ“-e£)µ;Ñ�†S¹™þs]ã_ñuñK_]çžcì1ÖE|õ�?'p?ñ5N|�_ý‰~ÍWfwgveKJæz+r†²˜á¶yø\ÒÉžŒkWgï>ã¹£Gø:²H9¥JH*ë (´5´•@p¥	d…aÛ*ä>³…÷ÜÁ×W!†íBM¸Ó‡Sð_„211	Ö¸X¬¬µ»LHi
+Âô&´Lè“ZÔFWñ	4¹V$©ÂEE©7[’å´ûpÊIüÉ»¥\IRÅ¡$!ð	³Ö}§–è[ŒÎö?ÊŸÈÿ’u³Z†?uAËðg!»Ÿƒº~£n6>_ˆëfå9y¸ósóóºÙÐ\h!¤ë\�€¸ÊaˆpíoR*N’a	k³Õæ
+�RQ"Sþb
+àI"£dU TÆ5=	¬H_êJk�bœÔT*£ÅµïÕz„õøêƒ/©ä»¾g¤Ë:&Q�ú{:d¦õ÷0ªcŒ†{”î.ÞŠLØ�÷!·Ä>Œ­ÄúÙå˜¼C=ÐgC³1ÂÛy»\¯G�½ºÙÇ	z„¼úYòO>¹ŠßÇíÈ…:öÏ)L›ôø×è#ÇŽ*³>S9@Â‚Û9¶muß¼>–óË+K¨giy	Û£Ñ�œ¯îØ¼¹cS³(øh£à;6mnosÖÖ‡iš6V5H[¾ñÒ¶}§o>¹ÚÒö³»‰¡íƒñäKÓ¯Í“Úð	ê‡Ù®OTÁ§ZoÀuzâ¬Ÿ]d?E­ò¸á;xêÔÊmj>ñ;¢µÿé_ðÛx² ß»h‡Ñ¢+ãê„ÅkŠ˜(S]Õ‰‹Dûq^&¡‚¶P%8Œú†GÒéáa¼Iéô"ŸY°æŠañðÕI¼îc-Žž;Å~W¸À¾"¼³î—,ýÆº™un(äÞlµ4˜]¼»Áe1aÅ4˜œöÚ'n2#Ÿ³(ØX¯€x–§x�âCv¶ÆngJà©€ÕVcµÚ¨)+¶šOÛ1ogmz§ÀÛ­”»›¯)óÃx‘M°6�Ëé4›MŒÍ‰�wðy$àpBðšë"âIñ¬ø–8'.ˆF?+zÅ„¸F~ *"ýÚ·aòãl~¹n½¼²”Gîž=±õìJN„=jw¸¢˜4yG4½`
+KÌ÷Ø@ºI'ÿ�[ÿnÄ.av¶ÒæŸ} ÙXŒŽÁÙByœÇæicm�Ëéªåá0tâvì¬<´·ujg£¹Y§ÓíyÂGëÃž#OºwHãOªñƒ¾�/¾rÒ³Óë4RõG>œÃç_NJQËøý–ƒ?ÑíÑõk8ƒßïdÕ¦ä?ñïŸ„àœ@zb°^@øZÙˆ÷&~xÅ…£ž)j*ò¶ûFË�Æ;-Ñ‡>o5pÞŽwxöR9Ï(õ
+õrä:þMËZ>mü«ïaãg¾Ï"öíŒè¯ojj¶zL>ŸÍÛPã"þF]
+{#ƒÈßØ÷ÑTSöûM5MáÚÚ*fƒ¼¬—òÎ×ýÔ¡_ßÞ´ÑÖÌ5SÍ!›µ®­½Œõ3|w2�~ró‹ýìC¹7{…Ù0–ä=¥°¼”[†Ý�ÍY"Õîˆ¶.Õ‘ª¶ˆìPöŒÐ¬5FV»÷T¢M
+ñ‚Óm ]~ŸèòÅ¿àô¶bi$:ÜŠywiB†`+Bƒ×Ø/˜sPÈ¶Áë4á8y¢Ä)ý/ÛUÛÄyÆï}Ï¾³Ï>ß�ã;^lŸ}—�óG'©íÄ-ßíBÈ Éâf°�¯H(MéÖteDaa	ˆØ@]¡T•
+UJ1k7(k‹*þ@SaÝþØÒiRSmi­ÍÞ÷lÚ´›-?ïó¼¶¬{žßó{>”þØ¾Øïi
+Õ�BPtÑT8ÜÖ‚ø-´jZ¤-Ü"a"™ñ
+º �vI©ªEN¿³jdÏ‘ò­RÏ‹ýþ%¸ÿïWF”n˜\±|ï!Ðž^=¹bÝ¼ÏógÇ¾3®Fm'G¶w(êšS…
+Çœù]OfAéx¹»%Ý¾|rÍÐ‘,fzïýÛæ>ó0â¥|‘�îOÌZ™Ö@±rRÕ“Eg¾)vŸÕŸ®éöí“~â›öO,ÃÂ°s\wN	/SgØSî«îk~†’m±ôp`Bú±{Ÿoà‚é­Z&©mî¦ÆØ1ÿ¾š_qt»CpFebÊ�+�Ôð+‚ÓaÞ*“Ž­¢% øF4 9ÕíA�KÎâuy+ÇÈt{½w0Ð³m¾_¸[èþ+*H]óˆ\£
+Ê£2Jð47=¶füõ‚7*(ÖŽ€µXi+¤ü+1*A�°y*aõ™UP³C	
+£DaÔÀ„‘Ba*:1*í"…j^¶µ:£©·qeî«‹ýãè³7š»ß=>qslç½S,Ÿ½p
+ô_™>1è
+%ióp¹±øî¡±#ß,ß<62õýÝÃ¯�eÅ+`ðrg4™ÂµÒ�ø7jðO¶ü o>‚�…ŽÅ¦šÍžMêLC±Þ¼IØ‚Œ#ÂQé¥êÛ:$Šb	É%Hp¨´ùý„ÅprP†r§¥‰«i@ÿ –;�Cz§0Š)”íÆÁå	�× ÖM¸xW“‹t¥QHQ�ßÔº›\À°æû«”š×õJ`ŸÀ�}4¢ó>g�P©úº†ºÆ:’úÂ‚”$ºE�èMTTÕyM�XD|HÔÕ°ÐÑ�®ŠŠº€N�øUa6Sm8ÄU²`¶¸%§èr@ÔIÁ%aÚÓ�Ê¡æ�gº8«´¸#‡þuøü[ƒ‡.íÏ=?À×øS/¯{êëo\¡ª!qùÌæÖ:õ‘Þrñúô?>ä³›îúçµÃíœK€ùøÓ± bHA˜þƒðh«òó’Ék…¡TSj$u0uÆý‘ë#÷œûžÛ:ÎìŸIL‘‡\æ)æ(y”yA<Cža¨�k©˜O­N�“f†d˜Ê»ì]‡MÇ­/™^³žv™í€ {íök™…d�¢è½ÍÍ·c²NõpÍ,Sá�Ü DEØi–yŠ’î%ÒM»¥YgÂÓ\ßv»§z,ÍÑ=4ìBbš>K_§ÿBS½ƒ†tKê¬~I‡I½KïÑ‡ôú³ú´~B·èÏóÒˆtP"%_>…æŽ
+²�í‡¼-Õô0’£J®Â(ª™…Ñ�I4uá‚Ê£÷|¶Úï:
+‚QXuD¼�	¾T=˜$o®¶4}´€^Ä(0 )!’€ ”2L²Ò× 1–jÌ=¤Á„ÿ¹]¼¦Ù»7®¯i}¨÷7kQsŸ~/ž‰ú63ã×‰›vhò–o-š1•Kxñ¥‡vN•4Ò:÷F¹WŠg#ùÌ AIWÞñÂD­á›@øžFøÆ@8ßM›¬LŒTl�ÚÌ”™bHÍ¤1šM³÷�Ë˜ÛFfŒÙÇ8žn8˜8o:Ï¼ozŸ™3Í1wÍwÆa´79$‹Š¢õÆbEXŸßZ'kœX0ÈVÙB êõBx�’éÚ�U"šÖ ½‡E{¬vIªï\$ÀrŽ ::eŽ¢šÐY[+{ã.1V…õ ÞÎ²Q—CîÀ*Q¯F¡h‰'Þ
+X9@£Z©#„²Ÿì�,îzÙyÃ¢ü|Ï*Ù
+®ÈžãçŒU±úwá+'æ:®…ÈÌ0+ ‰Ó¾Wªn`g�=©ye¸Î�ÈXÊT ÂÄ4=Õàxr[öEÔ‡é‰m¥¾wö”×c:>@	ëå=S{ý\…ƒð„Q�ØŸ�‡óí�.&$CEñ…d§¢øC2êÆ¶�,(§!°ø8Ðý�6/3že‘®[hbòÌs™1
+!o(Œ¿ôûåÖ[a0¾†Má|x(<>‡*7†€²OåHD@Å¯+‹‹Š*Wÿã¹ˆÇtÔ"ŒÈÀO:ßÃ:gC�P¿ädEÿl/Ò‘§ÒýÛääi#Ñ—g*NjÈ½"¼‘÷DD‘ƒ†Û8«F¨¼
+ÕNæ„
+ØŠ`ÃlL–=E°qÖÙ£O_·Œ…e¾#É#|�çF%!l<øÂÇ¤.4eÌ™©ÏG�¿‹e£^Î¶êêO_ýð�¹5´©Ý§åôEnä‡ùÁÃ—6ÿöõÝol[Ö·ª# 2½‚¯&+Ü€7±K†Q«‘O°þ"‘C¨RßšÃ±?Î­À°¶¤-³¬d·³cÄ$1fØ“¹"øµ½È^ÈœË}F8O¢¬N¸ÐÉ®I®Íl›Â‘Ép—I$’qÑŠµœ’%’µA¥=³Hn§ª¡<bä`$’U%Â¥A:Ù&§¯&A2ñ^$ê¹Œý ´¥@"î`ÑÁ4ô\žE‰“Áº+IÔOY@XrüçªÔžÖT(‰4e¡|ùÈÅ9>ÈC¾3x²Ôz³¹·áZƒ“^Â˜VG”Ó9”IÙ,þ<XtÝ2Ù�Ð´+˜&Ñ®`h…ê–€:à‚¡jxKÖ’5ÆW£°Ž¢_<Z¦ŒM­€62ñÿ$j5@e�@E“�ƒ?}we[¦Ô¹¸n°üA‹gÉc¥µ2ø—KQÛÁ½-ºÔ…å½‡È¥¥W©*U+5î“�å[[¿’Ý.GØ»©<Ž<žÒ$©ªæ†1”šrX”*1�Oo»ÁžÈH�é`ä`ôt”ü‚Ü_S*´ŽFÒÿ_¾«56ŠëŒÞ{÷áYfvgvö1»³3»óðìzwð®ïâ�µ�Ø­Bx„-�RžÁV‹SRÒBL’J5MƒA$-­-jÕ!dIŠ*Ô 4jmEZE)Š�¨ªXâ‡…’‚×ýîì¦)ªG¾÷›‡,ë;÷œï³Ñc¿ËÚg·V_pMï"ÀyÌÆº‚^¢üÊMþ�þé|OÁ-/øh\x°ÞžgSSÓ �`d¦û§êý@ûo·—ïÿÑZòÆX½ð¼ÛËïêÍŸzìN™é
+Ã��o«à÷›�ŸÁòã[�Hhù+Ç[šÖ±:PÃƒîHV`Å6‹CÙ'³¤§oim¨ï§è
+XJ
+�¢QeT}�)cêQõgê¿Ô«Ü®¾k}$'æb¹¸Ð)X^äc|"›ªïÇò5o´»˜[@)PÑÔªa6fº‹‘ªhpò»”L\Q2¨VC¨[ÍÆU5‹pMU|9,£Z4'o©Šešß—d,/šõ.û–°r¥GHÉözÿPM
+¡D²·/›ëª”é»(}W¾V&o–/C:KÏïkà‡ ¾í¹š}€’¢î‰+°Â±é8€¼¤–ò8ÒbI;­1ce;´`(Aha§Z±‹Î§úµëh8p¯ß}þ±‰£ q-N$kw£ì»Œw‘®–Þ%—8³§û[õôÇ©é›�ðªz³'Òý`Kà¥MJøO¾oªzê«w¾}×àš¼mûß¹³t“4wÀ²p®·Â>â[»e^Á¢J¨BÚšÌu<|Vaþ||6ìÐÍåAQxAQU>¼@e¼©&Y vftm¹‰tA':ø]P$Ì«ê"„ãðgÕŒ�¢|cUÒ0ˆHI†aÒáÃx}‡÷�–Ñ.eðP£Ìã@�½†7â„©áú`u^EÍ°.Ññ¬�gìÆ"e{Ì¿÷"‚‡©OUÉ¶Ç„þ½Ç„‹˜¢°xõ„fN»v¬Šx�Ÿ�F´]ú>mŸ~�óãÚ¸~�ÓÃ~Í¯—üÖˆ•ä Ð˜yäl¬
+ÛI7&Vý	q,ãø¸rZ8­0ˆªHÛšÅëV¿&0ñÌ|zÍ
+‰©ÄDb¨1s³}ÇÇøÆÌ�WáØÿ~6"
+xIÂF¶½cj(;€Í’ˆÒcÐ:tØÀ°Tq“¼löã7^¨wvìXª5s»V«ö}‹Ëï¼N–í±ËbÍÁ
+·'üÛîüäë_€×>æûmgÍ ÌŽ!@÷f`
+£,þ¹;o«°5vdÖUñjú=ù=åªzCu¤:²Iq’,)¡+Ä»äYYé$º$€>¯ÂÎ·÷p{g(­6A¤_aºˆø09<Êæ&Â'ÉIî­À[¡?¨WñÕp˜ø;˜`(8KÂ‘8)œTC›Ó›•'£Üîônu‚?Ÿ:¯^ÍÜdØ‡#‘*ò%«!‘Mçv®öŽÃ
+H‚i”àˆ¬p}Ø'W´�h¼˜‰y�ºÆaš]þžÄ“­W4$NL¶òái>ìÇYÁRóñ|È
+äÓrJ&A>,ZÐ§Œ…TRª(±pX!°âØ¬¤…d?,¶ÝW+zh>��åu8ç˜ è3S.+:$%:ü’ÆÌ?ÏF®1ólzvBpw&ì »ý³ZÁÑÂ�(*t]+ä£
+€rD…Vœ«$	Òà‹—š/4¿é‡øî{cãàž•G·,]ýè¦c�õ\sgóJ³y±yçã‹8ŒËø…å¿{©ù~óÄÉ¯ÍuqúCxÆî‹z!iœöË Óï^@°Ÿs4Êþu¬3˜Ç©[Ò-íÃ_b„9
+˜o`M
+f˜J¹™)‹¨¬(Á˜¡—t¬°!¹/ù#ˆoÏUò8ŸáqÜFœÀ‘!nG¸½Vþž\@åÖ“X�í+&ëž¥m…9èF;¥dÙœ—SRZ"A3®WpN†ÅHtV°&e+:	-,=ý4™ôæS£ñ_óXÕ5ð” Â¾(µ”Õ^HÅÌÒuÓƒ_^œÉ,©Câél¾2¾ñ†Ý³ÿwÈææÁ�ŽaYfßNß.Z]~iÿoŒ92}ž:2ñ]ÚAêþ4Q7~ÂX)�ÈG>ÆL™ÈË”eÆFå+F‡ˆ((„ ¿§²%3š5šïdþh^®0G“‘?IÝNß–†k�¿žózì´ÍP¸m5C�Ý¦7Mã)óy“˜¨¤è™}ÆucÊð	Æ�qÙð]6°!•ÃÌ[åLèJ&˜ÝÎîr@Ò®èºa€±b jà€âPI(‘ÒRÃGÜ$×iÁPhcÆqCT§ËŸ»àyEêÛiF£,LÓ¼F³‡w7éù/ÓMÓlGõyx¤îD©F×©H{Î1åMER+ÌŽË	+�ï²fÇK\�a±“Ý\Lå+HÎýv‹]vMÊ¬¨Ž%Ë96Ã9J*–X„["Z‡/>ê¹I/?tP÷)%tìó‚¢‡¹XO¡�ùî[×Ç[úM|¿›)Öš+›¬qžnðÐ�Éöæþ{Ñ_òú“‡]”kV×$s>‹l'G§9ïÀŽc? stûÌ5¿Jëàn×Iõ¬*Žê¾`‡ø;Ø“â%»›·…b´bhvçìZ©fo)>[|¶tª·Qz£7æ¨h-Q1nàÏ»	´–¯åj¤vj¸žµššÓr8×€Óuv-’™È§E›gò<Ëó
+«ðþÝüîâ1þû{‘ÚEžõ›�êŸYM„ñzü8~
+ð*”ò$ßÀ‚å….î]È390ªðè\nN9½ ��3mÍ½>	ºjßB^¯{ê	–´>L±u$|TŸš¬carj²U{å™ YüÐjWó±>žXÅ¼½�ÝÆïa¿Á?S<`¿Èÿ‚ý5û6û6Fõá5ÔÚƒ·�™—áÅ¼Ö•ˆû!èÃ3:/Ù¦j¾P&^,”¼'ó}¿g‹ÿ!»\ƒ›¸®8~ïj¥Ý•léJ¶Ø‡,­dy%­d![+?d	i16`°AnB´*îÂc–’¸ÒÄ¤˜’ôÁ£ )�B™)ÐÂ„Ö˜´)™t†)þÒ	ý@K‹›™Ð@ÊH§`»geÚÒÉŒ½÷ìÕµ=¾çüÏùý½7FÖ|ÍíÕÇn?ñ¹©O/ëå§šd©Ã¥(�vnÓÖŽœ=´üö¯:s‰íÉWmÞ0•=veã‚x01;ðäk×~óØ=©¡6¢Rèê�ÍýM+ûç~~Ë�Wš UsýsŒ¬.uW�ºýèÄYTöK�RõCfˆ+å¯×Arëé&(|�aB¿—Ô×s~¯èöš$=ôyeFŠ ?E,ÄF’£z=Ð�ÌQ\N$öa—`üDÆ~¹ Ë»dZ>‡£H ~q:`Arÿn±”%ðm˜…b¶Ò#'³pë!2	j™	:+–Ë	—
+7ülV 4è4W5ø—t…V­æçuÄ';â§ðå×sËù�¹wj÷ð¦€ëÁÍÿ!$=«£/ÞdÜˆkú/Ìm¸‘fÊ¢ŸÞÉýS¥z„uâÏ„1á=ñCñC•I˜iäÁEµ¢¥ÉUÉ‚¶((I4]+hƒÚm—vP;¥q¿ÁW’7Ð'h:i~Ž{N|>²�Û*DGÝ§Ð;ˆD…#	-�züó›Ë¨Œ9D<$¿aNŽ³Š¢ I¬
+y ÿ�Æ^ÓI9y—×é�‘"‚I•ÃKd	î¿9ÚämÖi•F¶±é‘Ó‚Í
+3î%}�Ê2~	±ÀÆÕH­ªFª��€‹°Å¾VxÎÊ±Öˆ B,Z&¢FáP”¯²Yi‘DŽe,‚eYGÕ¨
+ï_”cköË0¶)›•e8�ç%4×Šß†"R©,Ò!©yˆÉôÅQâL1©�QÏœìÜø_û“Ä¾II˜”ÄIaI÷ê®*¶cÆz€åÀ®t9
+b„p{ßì˜ÑZÍ†û`ÿÀNñ±`³Ò”Ó’€*�üø³øÙ—{Åí„Í²Bgq16#ê3Q?W�òG0ÀïŠŠ·)–J¨¨â†qm6ˆáË€Öl€šq
+Öpªð©ñ^SSé¾áæv(UkIO-O�šÚ¡LuvµêTï‚D3¶þ¡}vrnžÚÝísñO¯IûRs¯bjPªv>ø‰iýÃ½ôGç[…
+{C/M>KQ»†–B‡ÆV&àæ‡&_¡ºWvÖ©	@_¨Š/Lbú“éÔŒ²Ô"Ým!$MûI:©g»Rßnù>³¿Å”3¤ü¥Å-£iü
+s$~"{&þnüjàýøÕ–â\ÓÍ,ªYÄ÷´<Í¯a÷ ý-‡ñ(e«4oÉ½Aÿ0þ£få
+¹¯ÌÈ•ù½î“øpÇ|=gegrÏgLYÊírSã¯ü–OœÁI�…’‰5Fb�J¬QÍjÇµóš‰Öæh}ÚËÚwµÚÏµ·µßk×´[šmPÃZ¦–
+°«ÙXšb3l/»™}�=ÀaßcÿÈr6ÖÃ²¦ZkªCr~£º&‘YH%÷¡b"A	ºK9YX%l'…ógá#á!ôA·“”@Ées4Ê�‰Æ|#ÝØ¥Îs(²B)7Jpyn˜»ÀÑ~X(ÄèVcø¼NôÜ–¥çrTîM7v{Œÿ.Rˆä§=ØCm¤�jKšõ ’ÚÖƒj2ëæ‚yÀL›Å9íË Ä›·Ó¥XŠõÝ*Ý-Å~]„¦v·pqß˜4yW:–€Ï,î’É»dfö”]ÆÃ9cÓäw,ÉÚ³Y(H\ž)Ò_V	^�BÅÌH¶wÔ­ÄD;ôŠ-”Ù}Nªòs>\ì0µù©«öak=<ÚéŒÏ`H?ÑÇ«¯b¨ñJ�—b¨{Š¦"Å˜IF;5&PåÌ.Ì'c„Uún²�·Ûa§eæ”–¤zŽ¿VX?†[x=27*Õ…z2ùeåËÏnÛÏÛ­µÕ’Ç—ÜÐUXi}1ˆñä·ö­[ºáøŽ/®oS½.Á-Ç"ÍÝ½ÚÂ­óK�Ñ}S{ôQ„EóïÁéý­m³ƒ£îcÓ´:4�Â¸_w¸æ³ˆ'<…ÑÙ ócø¶î	†FLŒ/d³ÙË±ñ F�‘\*dó­Å-Æ¢·gæ¤
+ê¸J5©ºZPÕƒê)õ¢Ê¨v;rˆ²H‰Q§K'¸‰è¤@.’q \1²¤TaÅRÙ É�y2fŒNe}‹—ó†Ý1Y:AŠåX¬rT�9ª>:ª>vôþ#O@&‰™ì$�i&Ç’BW›•†�GªÇ…üŠB×‡±·Jô¡j»l…8h	…±Tíó¡ëÿ_Ž£FŽÁ\_6rƒþá†½ìQóöÍ~ƒÝÆQÃô°uXVöš÷5X*ov)6^I-ÌÒTØèz€ 3`MÎ`|rè;Ç6_ÞÚ;”Þ_ÏXc±X{3ZOsk¸ó)sïääæÒøkoükkSëjúpM�‡R&:50Ìôtœ¸þ~¡Ã˜·K¦'L« ‹Ñ}ã=nàð
+îˆïu)xßÄ¥+‹©híry
+÷Œ<Ä
+YË¾}5'jNÔŽQçjG}ç‚—|W'Âîd²×�£ëP#ãø:¦h\œ¨q¢ð'vþ]Ù˜ÀBÚæ°c{‰HŠycÕ=œ3åÀø >?!�T>†á¨“ë¨º$óèœ±ŽFb©q!X{ŠÚwTh2TÒg%X<PQßD¹‚”·J$zv‚®ÓZò jc¸ÀMƒî”Š~€úÚŒ;ŸÑX¸B††žf‚j5érç¥Mç¯¯yéêîãÝí™>ÎÂórS}êÉž¶ÅÍOß¾þ"–Þ½°ûä÷V¦»–|5/ŠZß�‘;™ØlC+KA+Ý ¸·ÍzðÕoVŸ­>3‹v¹ÚXä#>Š—ã+’}ÿ¦ºj`›8Ïð}wñÙNÎ¾³Ï¿qâó�ÿâß³“sþ±?’%Í(�T¬”Ÿºí€¢´¡ÍÏ ”¡
+H[þ:$61‰N
+�4¦NYC»À4‘iê&&¤šNB]ÑD¥¡i«”–i€&µ{¿Ï†n‘ü¾ß}¹û|~ß÷yÞçý ,š�,Í€Ÿèm^�ÅÖ_[R¯
+‚¥	ÄùÓØïÝ§Æ\f8Š©)
+Po’�õ%ií!­Gì<Àf½†2âdÄcÄkL¯èì”>§³ºC1Lð‚ÝäÑ(«H
+’?Û}È÷�DILC©{µ«åš61xY–î.…î–k�yš6-i“#Ñp”å�±¶x"Îòö¨&ÇâLÒ&êPã(.¦(TEI’¢DŸ²MÉSÚTr^_Òù)ûçKÞá©ÄþÌaïñÌ�m§=gÒ?óü"})m?(s°$‹åÍÝz
+ÝzÝzÝäôÍt~ðxÝ¦Ixü!‘Rl…2Íøƒ”wqñ–L÷ÊžG&‡Æ¿5þÞøàxŸUÈ
+Y3õEu#ãmÛ´Î´öË«/¸ÔPƒ:úÃ�Å¹Ùßžþâ»ÆjÔ<áimIV¿áRÞ<û«wbòñZpeÀ˜›	¡ÞÄ;u•]“®q÷³¾}.s´ñûöŠã{�ûØö±ûßÜl�ÜÀ—²ÛØÈíä&µ½Üíî°ý3Û?ÜÖ¤å¾Y¬Ö)ƒ�…³”M!ƒ†=‹¨íB &›M‹(¸ 4Y=$»M�]ök†ç9† ˆ$`OâÔd7ˆÇ>G�iÖµ’ö´ö…Ö …"R†íRyÔ�5Ë´j(§
+h`¿ZG`™ðÝhµ|‹`0•"Å’JõSÞ©ö“f[¾…¤+Ó´B M¶F}^¿—å[œJ�ivy‚(è‘×
+¦VÉÔ!�‡$ÉÓH­¡±ÖñH��?³ñ¬n®\½oÝ2ôíþmÝÚÚÅ}•‰�ÕwÞ¸öy8êjº{i×†Á'<gÍºürÿóí³/+ÎŽÍgÂŠ†áL€Ð~ëˆ—•+òŒYá%sC2Å ”pH6Apá§$Qˆ(æ4QxÀl@	”Üy�&í±Y7ÊØ_IÃ-Ð�uìµ—D]ÑoêœùHØrþ€á&4^;™Ð?¹™A™ë“¨=)TD$^¯C^·Ùœ	�Ä"ë‰v#$T$†�
+'…9�gIx†.+ÂmÁ,øCzNg³úŸÔKhâ$c`y†Ð"ô¸é[Ó …èêïÒ½Ô�ßAöÈ¡.Ñ!`´
+ø^&4*�ü`›‰¯[qT
+R]0ùY˜ú
+…¸ñ5‰F­µ)Þíuw¸ÑMWhcõ/¥‚ëèQôçû÷®Ye¬âÉÛg�sCÕ½Où@†GP ·–=¶mH?¹ôdwf Sµ¶8Dw£˜+œß»
+ÒÄŒ®s7I9f³]Å�E¥&±”Ž±ÍœJ¼×pÑúnâýìíÈÝo46vX|ßZg²lÖ„Ò­Œ(?°¼–<c=—97Ø„G"ª-á“®×q6] Š½Š½ˆ�=E‹ETÀ¸}F®ˆÈ¿œ>£¸È5`·ËE êjí:-­:Ëa=op‹\ ‚ó§uóP¬U¡Ps–ˆÇ�ð¶¡42âë]¼_¡ÔkëE½í¾3‹f3ÒIwãxœH`xŒXÒ�8 °#ªD6%º)!QR$VZäLØ3rpk ÑPÖÀj,•&ß§Àn·%Œ4Ìbz2}"Í�¥+i6½wä2UR€Û[ý$ßÒrP\·ÕòôWP#ËtF<
+äþjª´±¾L4t]»°¢©ÍË)Êõqî"S„Ÿ…ð&nUàa"ªé Xóäãè¡Õ
+8…TwØã­Ÿ¸FØ¸£«�n˜IMÒîªb;ÚÍµ{Úi¥qµ–]¿Š±?A}yÙ7yy
+?“YÕUüåGë§Ç?ôóïW¶=5ûüw¿üé|yMïØúÎþ±LhÏNµç¥Ÿ¾þ–x�{óÅ|[gßŽSL}‰H–Íâ×]ÍçŸÈe¿éÇ3C³¹üÜsÇ®÷,þhòÅ·Vç¾ü—C)tlX3èw=DQ
+3LC7ôü4ºy‘áïß~·©'KÑûhÁ0
+³ìX¶’eÍ&ïác|ƒhc4&­Ø$MJóÎóöËv6€9¢ØÙØ¡Å#ŠÖ¬Å·Du‘ýo·E”t8Œð(ãÛÙ`ÖTÕn·5Z+²&]2VW—d<ôˆ!ãUÂ§§.ry0ñ60©-ª[Æ’ÃøPF¢ŒBò‡2+ÉH&£˜s)‹”ì|–Õ³S$Åù!põpõp õpõé,õØàÈ25—l‹Ó-x±Ûq¤Ç—â•8G¶ºz
+ê;ÔÃKÑ[­­ª÷gÖÕ¤©,¨Pà¦r¿TŸž€Ò`°#¼öð�ˆ~`1è6@a%"ýè6G¨•©RP	‚›J*ý—P²ƒ2ª]É\ÙÚ±_�JvR½ª«ôàüÍ„þPyj6%ëè¬‰uÇ¼@…�Àz:µñfB�ÿ³þ÷£‡6}/Ñ¶j%Öîw:S�¶µiQî[‰õùñ"èõ¿=6¸ãÈÜÊ©‰‚91«ÍÏ¢³»ûÔ®¡•¦~Í‰ð!Ï÷þó†%
+š"	ò2lÚÅ41-Ì
+ì	txK¢ƒq2-ŠCrJ-¼7¢8‰˜ÔlÅAa_Diù
+ú¤>¿ÖatçyÄc	-¼ÓÑh%1h�]Æ*YY+æ‚ ÚkKú¼Ž÷’`ôˆ[…
+êe/õXÏäŒy/:áEtôîÇÁ± «Ÿ	Îçƒ
+z°<‹¥à§A¾uÝ$î^™’O-mÒ�åz*-S&¡¡N¡¯{J§üÿq†˜ÆVoÙŠñ–-W³ƒ+æbÐ•0í¢o]é«¶w5D"¬æÝÎj°„¸ÝÿãÊ0ªB·obòÌ_Éy=>ƒé@;s;ó»s»óÇ]³¹Ùü|nþ¿„—}lçÀï½³ïŸí÷õåœ}gûÎ¾Ø—³p¦>KÌGB´QÖP¥¥+ MeZë:@]‚Ú•nÒ­ÛØŸEÝûø§¡%�º‘Š²¶Ó$Ð¦R:Mj¤eT‹¶?¢jêwÏ{v€B¥YÑ=çûx#?ïóþÞßÓ·¸qi£¸Ñµ�P¸Âô‘>¶ÇÐúh‹Òcf*á¾O“Ï\„ÌÑdF8Î‘…(i¥Wq”1å 2©Ì(Ê'Ìç-ËÍsôóòüa�Eï…C¤ÅuÉZ²XÆ"k½Î^g6°w7sâfívÆÈrsjàlMÐÄ­´³61ÅÜ›9�oŸ»»4¥et—¦pÓyÈ?P«ÿc8þ““§žÜZÈ÷ –�x4Ãû‡¬/zŸ¯ÑìÖÆ›ÕO6?_äØ¡ážºmHÄ§‡ÃÝ9yë7¢+ì¶J­,ä€…;€…ÏKèŸÎv6|�ýmè{‹ý8èMu$Ä|2›ÍêÉƒ‡‚ÇƒO…g‚?P~<‹Ï’_&Î/àä&‘YÌ‘ŽDBê–¼­ÍÅÉ µX�½e¤¦°'ç³µ#üx9šÍiF—á§X»råJmíJm…ö}î®S^«*ÎqÆ`JÄ ¥^Ý‹1I¥’ªBˆ…£æ‰š¿+Õº
+†fwY5Bd-¢š®ëEC+é:ç}ƒW[„·†Ô�/ŒI%eÕT’à‹|½Sbü|è#?ŸzXCwb†¡wEüôþ«—�îE½ †‘~ô—Ž49_ð#ÿzù|èù
+1©NWr§´›zJU5Ìhtí‹Z(Y.,®–
+žB¼Üû:â˜3Š–©ô�ó/a‡ûhbymyuubídu”Êì¸Tõâ#du5¶¶L—¢iò�)Y¡§É›ž3¥˜5AÏ&˜ð`ŒZ"‹Œ{¼ûœøª¾ê÷­”<`Ø•%•‰ð¼ tvµ`è–'Dî]Æo¼¿=Óã ŸU<sä¯ß…f¥™J§Š¯U»h¦ÚtüäÙwë_PÃ—Ëqg5÷f,k;Š>€ð–_¸Ì¼�P{Ò€Ú#`M¢|<(¡9	a/Ã3Dóž^�w)	>ïu)	zOè
+ïÒáMÞëgÖÅ\¤[¤aÞ®TÄ6itt€áœˆfEÄˆDdÅSštNš“¸²T“f¥EiIòJôù¾J…ÆWíR%ì¢�neŸa¡‹ÁuÂutøæïoÏ¿usÜÛ_¥˜ƒ_¿‡aø'Á”‡ØQGf‘$iŽ_ðáN¦Êi�°EñhÓ@ÜÐäö½YÛÐºáÄ‘³uC«êYlh�ºî˜(khæ{ã¢îlA†¶Î�¢¾ÍÐ†t]ÈÚ›2ò¨Õ
+G<ê¿ß#0C|uK·)wúØ§«½ªÙ
+Ó8×˜k,6<
+¨øÆfq1A‰Sy1~)~5Î9ñÙ8¿•ÉK6Ü²Ý[ö%ûªÍ9ö¬ÍÚ·< 
+°ÅmuWÕSÙÊÁúR�=WŸ«/Ö¹2®Õ¹z|¸±À~y>CõÁju?®;¸º[][�ÕÖj ~[¥šø²Bn3ƒNý»cnk”û””ôò½ùd¾Ï[R/¤Ä„ŠÁ2¿AEJ@mµ±¤j:•§áÃìÜwÂ‘´´¯#íSM¯Ö‘1™tÆ' ê+à§OoÈ16–,0•€Ó¸.z÷z÷úF;öŠ‹
+ïfv/¿7ð1ï¡ØÔ±qWhPR])7Ñó$Rƒ½è?ó 4nÑ�Îñß·c8ØºÑýŽÅÖwÜ¾OÚïA¤ß-2wä
+�ÿÀ?Ž¸ÒýÿêC;C÷’@¯ÝSÀïŒ<3zàdfìGc�·MXçƒŠ$[)ë!;­7“¦�å²Ò�)÷Ã=Õe÷óSû¶ïÛ`lü{g›§�VÀˆ¼¦òzáé™Z­é?œÈÑU ÷}	½0ímwÓÿx�w±p”%.Zv>ëÂb=ÔÎo¾"vðÈ¦µ´ywÿ˜�¼`æ9ž{Ÿ½Î½›à"|?8;w} °]--D2Äz_Â>¤$eCÃ-SÏƒ�ëY?˜»kêijêüÝÒõL:�qÈ?âå<‚²€�¿†Zøôg¬�`‹÷»î‰ÈTÞe¨},£´|Ufe*ò2H¼L%^vú7ÁÜ[¦kC¦:/S“—©ÉËÔä‰ŒdªïX³çl¶lOÂ²w·ÛîîFÄn;¼Ývv»íòvÛåÝœ`px;ÙÞvL3[âó¨œ_Ì_Ësù¶ÄçÛŸoÉ»QÉÇ{îÈ»ëîä.y‡+«wjË]Ž¤mï«ÖÈ{u¥%ò÷|ºeðéuƒÇÔàÓë�©Ácjð˜<¾×à¡á<'H¼ÅYÛÕü9…|Í^n<»çáoËJÒì�ÉJìßeö7Ívyž>¼{ð¥æ��ºŸ‹?ŽÎ¯fN5Å¯m>S†�Ì]Ÿ.s¡ƒLísbo%�@ÒW|¡|1B4/tøÄ”ãqó
+õ8y«‚=È“ÐéÚÝï†áV¨¹a~pk…FÇè¶*‹ú5�etG?¨ÓS¯£¿¨³:–4‰•œk"r7.×�04�¯B1ž…1f.˜ý›§(9[“7²21JÖ;­�`ªFV˜ÖUW\î@’csššVY^îŒt²<ŸW’‰d<Éñ8(™ð+S*êê�T&&¤L„L¤r!uú£*“ôFM¦ÍË*ZÅ"`Ø×�ÑN´“œx'ùéÀ4™ŒÏð³�Y2›ý½æŸ&ƒ“x:6+ÌgðlÌ‡À?¦ÆAC¥x®žeû+R4Ë»ÆÊ;Jç3�š'ÿôõÃ'ßûóò­«wFCb£d«fPÎçÜåïÜüþ[Ï½„º/¿ƒ¬á‘¿ýá‰‰á]ñìÖGQæWÓ©�A³¹Ë2Y¦Œ¾éÄ¥²óŒÀ„5ž$Ìw–uè¬M 2!R¿à¯èí^ÌQtûÙ¨– ïâsyMä…) ‚£$¤¾ÖüÒ0¿ekåT—
+lgÇß÷|wþ8çîõù|çÏ;Ûw¶c;‰íôÒÄýÀ×ukWF“”�ÐhxíèÇª–�¤DÛ•@[(ˆÑ–‰–ubŒiU'¡Žd´Ù„D*�R#1Ä—4*>Ô6c£YÙ„’ð¼gw”DzŸ{íç^¿wÏûüŸßC­S…,®ÍÖ˜jÍ©
+×ÆjlMncI‡ìq5è‡ƒ3ÁÙ ŒUÇÝ.aÜM– ,ËP5Ÿ™Š¦];©4FÝòGš4ª®k­åZk»Öîq½'€BÉ|«?£	)Z/Ûå0�ïŠê±\9ŸÊr]ÑbçuJñîîLæ
+µC[n¹Õ–ÓØh›t˜ˆNèù‰.ösÊDl,õ„9V˜(UyÒ<£|7zV?›=g½ \È¾h]R~jÉ÷G0‚Ø6a½Ñ$¨ºâÞÍDàÒ-K
+ív ³qãM{Èg|Q«nX¼éRþzmÅ¦‘Ç.l}øG{7¯ïíùäJÓ®ç�]ë¶-=ÿ Íå˜Œ¶Ýó'Ú5z0]9ò×c'nÊÆŸ?Xÿè­�®~Š2ÖCy>' ˆN@ÈuA	’VJ� ƒýûTÂ°ËmæûåI£Ï�¦ôÖÇq­SPT›”ñáT™b![J!�ÑI‘ÇUÓPö9CwQU»j¤\T5-£HOSÊôJŽ¾/Ùß�£Ey=�š(ð*Þ†X¼íò)ï¬÷º×çñUG@EI34F+™ÙÖyËºÕÀ¶]›H»ÖQdÕžÉâ±,FY’e²,
+~ìnÚBUè)æçÉœ¬T
+Êez8¼îá gÚÐ6×b•ïÊm«/-´Ð€�D4š™®ÖÒ@ò. 4Ÿ\7°~]Oß 7Ð‘Š#iì
+V–¼kË¾@¾ê9ÿú··=ÐXÿÁûY^Í6ýüïê$óÔ2Ü°šŒs´ÞoYžc^‡õ2Ç�OÕi°¤£¨�T‘åU¹š»šÿ¹AÞ#Þ"É•ÈÊÒqá´yÚº üÐœ^6.ÈuøŠ‘àFá¡ ïN�‘{
+tŽ10¦u;‚Üø>-æø'ŒÎÉøÀ®Ü.G�Ø¹„�Sa—SqŸÆû3vN½-Ë\¾ì•õ¼,´óØ‘#6~XF’a2ôÕ‚d·fY‘Î{@¬
+‹qÉÆ{ÈÞfÖž°/Ú¼-K>ÃÇø¸¡u•�;é¯ÂR'îtË$H{glÕt*éãåÍsóÍ2UˆŸøÒP%}ÔIƒ|Ž’iøÖDLÔLaëíÂI+À�ý ýí3ix|ØëuÇ+d�»éÎ§`×Â®…e¨�|¥òèœ»‚ÃNgÞ`2IÀ j0t¨-ÇQÔ˜§?¤ëºÔÐ§—ÿ2TZ<¨�w×Ñõ{qÀS2ør:8r:xqÊ]rk6ŽÉüÂ<"·¨à9RÅ	„Ç/ÁÏBÝ¨SË‹þr®¶y<;Õ²ð¨À¹n ˜ýÆñÃE® #7½üöh%Ø¹ËTf“ ¤ÿCçQ4©@u„‡M—“i9bßW*HÓ³‚Ö'�+H�B¾Ï†TÑèýÌw¤ìÚ£ëŠ«”4Î7OŒ¬Ó…Œš!Ùîïm¨®]³çl÷}§¿õ¡�‰�¬F=W–®œØÓo%bÅ_|sdðÌpIèÅÃÇŽ­.U7lÜ;ðáŸº˜“$(N(¿|›9Ã.¢zÚO
+'ƒŒ;A›Æ— <¬¢x"GÌ§…ªàa¿—(0ži,:)N¸Œ'0Ë"‰38†+…ÕÈE	;ðòÃô<èÍ*á™ðlØŽÅ©rÀÙƒ× ¸à²ÀÝ �ÒSÔXœk6 1£È·°“_Aç;ŽÆqhEÄtu¾·_k‰F_È�èÇÓo¼!åÉºUú–K£‡B�ƒ_úñ}ìâÒ‹;¶¥’Ú¡ÎìX›=ƒß3G_;@µº±<ÇÖ<çQ?õ
+²`w/í[³ã&‚¥à¦ [>“¼�œN²ÿô¾éc²ŽÐagè q(lp$ÌþÙ‹—½
+9gš’e„MS·Œ¬ir<ˆíòe³ðxÄ—ÚÕYç)¼ó@ó<<Ož§ìÎSlç)¶ó”âyÊî<e÷k<–xœæ¯ñâ	Ïðäí	,`x«ÍðV›Ý­6»S;Yj}
++[m„§Ö‰<ÌXØ°^²˜Š5f1–bDp¤$Q]™‚…Å6Á‹m‚[‹¹²�KÄqFœ=bÌl#}[Ô×l¦H—éßBóÞ-ó.ÓÃ¿KŒ.Ï7Çim psb·Q›¦B>ß®åí¨¯ìw§ž_w®]:ºþk:T*|Vªs€r÷¢µ€ûðð¦G�<‡§€½ø•�«ôp|/´»¾0Ðö›ý$>æÄe1XF2f«ú¨6Ö/¯ëoé^�VèŽ>�>x>iØ
+uHá=^ÑgxY
+k‰¨¡µ¢‚9ƒWIÄP§—¿áì•P2�H&7HD‘$‚zDáJLŠ±<Iƒ@*–Uâ†$4)A$sI(z^/Ï'‘�ø79P•iXòHMñvà·¼¤ñ³˜¡‡éöàaº³©5C¶»Ã„Y°u§C²‰¾]V¿®³DÇ/Ás0)àÏTæ
+d\¹�…qÈ»ÅØBs!:ïÖjY«ã�\¯ÃWpy¼§,&¯çz¢îE9ŠÈ<&3­±ùÿÆ
+^“¶cND§›ÕéfJ60àì\ŸTê®‰Póî¤ 5ð]9ä0U8À5¨ÿ ƒá°«y0çyH°›K?¯§µnüv%ízæP_w÷v
+,ý2Éüö¨÷çr!UÏí^ú®Yi˜\Ž_yl1K³<´<ÇMBœ»˜�¿,£î‚_vÎËŠ�<ˆTA#ˆxë­(µ¢5”†ÚÐ†”!uHÛÊm•GôOs»;…=ò>uŸ¶Sßm|�”«Oh�ëÒ_,œìyºü{þèoâ�®wÑ;�w„;âºò|€x‘%\ˆÕ�žáží=~ŒY…Ã(@#hlDÙ.”;�ò?ãg}†_§agÿe¿êc›º®ø¹ïù3Éó³;þHìw!þØï½8u1N1äBH‰ùfµˆóA�8q”‰©•ÆJÙ*­¢S?˜6è&­TŠ˜ZÖ.¥Lš4þh·ý1mÓÖIÓ¨ÔjÒ˜˜ºŠÁ¶6ÉÎ{6�:¦všöÇ»ÖïÞsÏ½÷¼û®÷¼sjëWˆ…Pj~éðË`&;›š J#Ñh�@‚@kÁ��ý‚»~kf	»ßfuØlVô3ÀôØì(Û­:–Ñ™£þZ;ƒ­š’?Ñ)C#a!BÔÚ¬:R
+‡Ü®*³!Ê2P-)œ�¶JªXW[ºBmSn�7.¥ª-qÀwb¾'Éåò†Qažˆ¯¥²MÛÛD
+fœíTâ
+ó£æ%3ÛlN™Í¬Ù#JóÌN•‰ó$úeÌ'Çáõ ×ðº¼ž÷@w®ë™²ÃPRJÅI`Y¦æJ6$g¿1!)õ'��3–»%•±ï�œ�Ü“ºåú„Õ”4%•OL&ƒNH�üKï\ÀÅ:¿Üþ
+ãƒö:“£Ý… ·¨Ë6²·Ø[&¯¯*Ü½‹Êì{KðaüïkÃžÈÛÍzòx•_”É•µ~ßñG¼¡5Ä)µEÿÑÀœ_b¾û
+™Z‚Á»mÇâÓdÒÝ·Ê²W]v7{Ã2½õØ‚GaºŒ¹Çdz‚¹œêûžoƒ5ÁØ_ô“÷Hóë	Önq!áóŒåtì-r%iÂ´ÔduYÝ:·ËdLaè"�ïcF`4xâ­¡ 5@5\å×Ú
+«õ¬?Ýv±�‘D"ûü'û,—àA$	ÞÈ¡côø¼‚' …@[b�ÐvÑ@TïèÆüÂÝ(¬[å¸Ð*ù-è
+ÕºÑsFž“™}ò“ò%™•}Ïòs‰K	v_âÉÄMžÝÅŸàÏ$X_Ÿ@š>"±°}3õ8ÉïŠdX|Lœ)êDbçšð
+é‰“I‘'ú“Ü�…››¾$<-œtßá~ÇÝàØ¯’çÉ„ý-Æéû9ÁÁqB"eo\Ïžãe>¡ˆÀ	²�Ð%dQðñ1–%O[k Ñàq
+Ug“?J2IÜÒx[<‰—A9£×0âÄÏ¶á"±!þWä§|?$~™#°’LÏ…(Žøúµý¨„�d–¹®2ÝÕ>39aA’g”2Q	I�ˆø/…�.±Ü:šÊ-ïWÛW0Ö*óù�TF#xÐ„Ú›bñ1W~gM2Ÿ4ÂcÉD^60�éÝ)‡Ï]e‰óJeQ*¿R©áí¼CxQ#_”3îdò÷I”�É™ˆEvg@ýDx[#Ýæ LT�ùJ/’9aŽ¾.ü”û#W…ÙáÜD†ÔÖ¹ne€ñpXM•ï?j0þ]Ã–¯˜Qý\Ô¹\kî¸eÌÔ·Ó±zyáf‡�nï–
+¦ÚÑÅS]3ùþ¶
+43†ú¸IÏzzCƒ�"éë8¸‘éXüÙƒ™b]mCò¹\7W‹då�¾3E²úÔF¼fÄn´òV£üDÛTÔéÓƒÌ¦Qõû²ØÃ^Ã['“¯òœÀ15JRp¾Öù Ž8ÈØÂmöîñî­ß-ô¬—NÖÏ×¿Yoiªmr¬…µÞèáÆcÆ±šçäspÎû‡V9™«‘-†£`pzê§UOôD'`îR+8V;ÃM�ˆE–{¼‡×ë©á87&6Ü~ àÆ­�½WFgX†€"½Þ¸yÊÏ®ú�Ì0ô/T?{'ö~Œ�)÷šs4ÅcH`Þ);'†)—~Õ*Ž‡»Âlø­ÐÿczOsìv(�Î»ÿúBæ=ÝË,..‡ýÖkë¯]Sè† Jko?a’"å�ÂRqÐPl¿WdQ®�&kÙ/+n9ƒaÂ'yVÆ¨„ŠjŠ¤§(’ÑµA"‰5µœ�\{�´K‰®Å¿æbÝãÃc›â-„˜L¼»¾©-Ä¼úÍÍèm™•îÐôâ)Rÿìº`#	}ÇË}‹%ÓŸïLlMu†ª«}«Ÿ�JÉüÿè¢ôßKôÃYS3`¬PýýÛ¨ùWà°>`?àØP÷×¥2<—êO4ÌÝ†°ó?ÃÊ€@@í…XåXýq
+@þ@¬ Çâ7Z¯´cÝ×:píúÝe¤>èrtë61›¯ôáÚm[¶wiÐ Aƒ
+4hÐ Aƒ
+4hÐ Aƒ
+4ü  °ŠD¼Ü·°wÈ¼Õv÷„@0nZ%¹9Öò´¶­H,�wu÷lÚÜ»¥okÿÀ¶ÁíCÃ°cç®Ý{ö~nßýŸý?):Ø�µ¬øªP� !
+»`Ž.-á…(l€^B]ŠKKKï~üW9Ù-ì=µwœ_ž·¸¼Æocï–ÍGÉ¯+2>fGEÖ¡\¬È”¿V‘��gæ”XgVl²îŠL ª««ÈXt+2	Ý`EÖ¡ü•Šl@ùrEÆýèñDŽâ‰ä`Ïà¶^B¤a\•û¡SˆRe…NìQVê,ê'Ô5y\/¡Ô¥ê³ŸÑ’¼¼3
+Ã8’‡CËsfQ×‹mùy1hÇ_3ˆ©EÕnÀyl‡pÍî¡¤®B{³ˆ"ÆzŸ1“ªŽÂ¶GÔ9ÔeÑþyuÿÊîFpLÑáaÔð´>ý›QÔæpOøÔ’ºe'ûÊœRÅê|kŠŒUÖS©ÏëÇz>{T}Ce‡ÊºZ�U÷>^±&¥�NçF³rô%šÏÑþÂT¡„*ÚY(NŠÙÒDaŠNçH´+[ÊÞg’¬£Ã…ü!E3K{§p]¬½½YÄªE¢òy:416^š¥C¹Ù\ñpn¤¿wë`çÆHzb27;�;2T˜ÌN
+‹ù‘þô§TµÕTÕŸ£ébv$7™->L£ÿöh1761[Ês#tbŠ–pêŽa:˜-ÑM÷Óm££ÍN�Ð\~6wd§IÿÜÏ¾@s|€©Ï™Á‰A)—@ò"‡ÝNÍ¥@SAùƒ�º@5 €ì�Ã4ÿƒj
+¶.†O6@›Ù€5ƒ0Ý„«‘vÁ
+àú�R'„Rˆç·ùÊ!É®f=6uÑ;¯nõüÝù·G€�ÃÈÕ3àzqêÒ
+
+endstream
+endobj
+86 0 obj<</Length 44554/Filter/FlateDecode/Length1 71368>>stream
+H‰ÔV{<Tyÿ�™1nÉ½ÄÐq+—Áo¦�»ˆR1.Q­1
+FÆÌÎŒ\·Ì$*ZV™¤\Ö›Š6›Š®R´HÞ–¶m—P)Ê®ôöL´»õ¾ïîïåü>çó;Ïõ÷<çù>Ï9ÌiÂWx­~¸SˆqFÐÎ¥XQU£è¤b¼ &‡ÁóÄKt¢4RÂÜ&DÇÉ½"LÞ
+€ìõH^çÊq]Ì£a	DJTlR¤wÅ’< ’ŒhcË·aº;² óg�1ÔFÕ&0íÀh£hŽ0ñ”Û‚›ý3v¾I,—ÉÀ¿(*`¼£ÉF"O	Q9�Ùó0}4ŽÁaÅxÙeDY‚�×Îã
+„XXhÊiR9�Ïâ
+¬ÈÇìW‘PV—JÞ-é´S°]¼»´P¬Í%Ê›e¬Éx¥„Èâ$bípŒµ‡ ”ùpQnV‚“‘0œ¨`NDˆØ‡$þÐ’ÿÀ!•é¥‘€ã»E@¸ °€»�¥¢ú#¨<X$ø¬¿ºƒž�d=o‹bKÄç¡'½�q*ku­ø\¼�tl“àÍM÷�B¥ßâDX8¢Ã”ÅP—ˆ$(¨/bñÙì¨8”Î�Q_–0�ËßJY5¥
+Šêóß+�Q¯8¦%…Íf†¿[²9,4@ÈàðØqQh‹¿�Íd¡þ\®�²RgµÍ}i¨·×J7/o/út¥»»‡Ýc5ašÚÙ¢žõ*ÙÙBk
+¾»B*Áå�m©Ë¬í¬íBÿ÷•þñ�#2/Ú‡½÷=8‘Ü±DÇ¢SÉ–"Ò)âé
+Å³ªJÁ½÷âû[—™�îž�[>þ8wZ~^GŸNè7íC»OjÎ4~úYˆŠ &ñÖ§šS×C&L¿
+Ù\H˜²ˆP
+‘n~š× Äên›†LºÍ¹üêzŸµ�Ÿ;ü-¨h»~IlFóÚÕcê�ÛÜ}+oq§ÞîKôG�Àcq1ç;§´ä©mWUÉ6hë®S7^5 ˜x¸|ûx…,_ï§
+£méý{ò½û|£uåo<�ü–+–ò‚&²Ív,¼ýˆÙ”Ä–Xž,0ÙûË³êª®Mí
+7Uäsn×Õš^M2MÏ»?s.ÊmÍñ\•�&ÆdIÀ£�—É©C´ôšÀÎ)U&Š	8(Æo•àq§"—ÌÙÈ�8@;wuÊýG
+­Cÿ� Æ0K¥®øÄ6¿�Xò>>…Šo.3Å›™´›U ÒY|ŽåF¢ñÊ¢ÑB!O`oe•��`¹
+3`Æ–L.ÇŠÏcH…ÊRh,5Æ«ëýyöPŒ|Œc1¢0¾NŒ  9™‘ùôtž©c®Íx�vVSW’•ëÔ¸4/]Ãîé®Û¦yÄÈ5åxÚ¾aZÅXíæN«E-û_œ9œ²_ÿöã™~ß±·µ!
+L‹Áì	S­v^¶ß•g…�®}�‡Ý{&v½$e‘(ãxånï#³û::9âñ“£>ýszZ¢/3BªøÝ“p
+í;+.ýnÏMqÊåuçM®‰¢‡Å®5žö’×.6íÞ�t·ÐdVÊtú@ËjzÍ7N#i-Ú¯®.‰ZÍ
+ÞìØlŸ™«Ñ×fÿrtë SUøE7¤šVVéb@)UÓ|-8¢'Î"˜?ñÄysrûY¬3K$¦�öç�WSÞµÒQQ��®D9l¢ËÈÈbðÄá{"FÒ¢`5á2¼‹"åX	„a¼ÊcEÑUÇšÀUÒG”à¥uVÏXƒdLz ˜khMÞ;Æ!HVm¨.õbL˜Þ›àå ¢”©L àqÄæ1,ÆiÌp²Vï/FÊþuóžÖ��ÚuÙðYŽ§Ò·Ú>ÇS“QHÕŠÎÊk¤�hpÐ$.MqÆA¹~^ººÂµ/¹_“1®­U�©zäpë±áD¾é&×Àñc‡nØØÛ±ä‚rjWmMS‹ŒãŒÇÈ•á^£ÎÛÌòo~ÒéŸZ©SˆM5ì+ö�Ù) .�,GÇÝª�ÎÌ‘\?<Š94�mw./‰ÏŽŠJQŽRì°Žôa3ù\7Rˆºsù<KŠ$Í*k~(áòB67Ž¢Ï6†Öïré@WÆ£¹|¶0iîÓD¡@h;×ÕTH¡.£Ì‘ÿ…ˆþªI«p.ñ^úê˜”LÜŸ”Uí3þdrºÀûèÙéCe¨sêú²/ËrÂ©[;Ý¶$=¯ÙÖJï}ù´$ƒ”SšYwmkr„a�®ãe$o¸ðj“Edqqô’¢{rÓ¼3!K.y)8¯($W™ØUŽxítëOWn,Ž
+dÔˆS�„[$x?.ªßâPìG¢Èi”V
+í7×tú‚©"Ã*ÕµõÏ|U1š�»®s§)Ð£nOZ“ý=ß÷ÄTE2Gè[«ÕV(o¢‚sÃÙ¶�ëÔdƒfÂÞ”G*Èï�~í°y�(�Ð;qñDZÁôÉö=Úü�Ž7Ï�É5€uÄ]­uh‚ú®æš´ŠŽAQ™ýATEÓTÂ:x£lþaÃõÛ5NûdÏÜ:ÂÿÏ×OüÇKkX0¬Ø¼oü –õ³Äè^‚êøÆpjéaÅ[Î2ûwç´Úê¿>@>#Y}#bôíßÛB«lèìi#ŽKk[õ™Ôï)ûœJUx1�Ój4-vóÛ÷~ÕP”ö$"¥¶zÑ
+s[c‹‹¬#j{�•™G_ÑI¯õ[{4ÇýkâÜ©²Sâ…“�¢b•ÖO\xáßraè*|‹Räwë˜jûÜÕÅ{‘ö_öó©ïo?gyµøÓ¿®Ç›¨ÍäöŒÉålo8xí+[ò@ò@eBÿ6	èˆq¹Ôe³÷áJµJë�˜>ë»I„�JÂ�Ðe+â|HJgÊ>¿s—îâÙN
+<ÎëS³Ï<_ZÑ%Á¦B+öopjîß F±ˆÖT«vßs-þ•úr�‡jkãøÜiÜËH1�hð²÷ ˜ÜÇ]H)ÅdÄ1./Ic*Ê™>è¢\3:È‰¦È¥ŽˆÓärÒ…C‘ƒè‚èœröÐÅéòyÿ{ß·ýÏÞk=kí½Ö^¿çû<Ï¹º¡ÿ, ,~ö %°M ¾”˜<
+³áî.äD
+ñeXOzD sÙÐwdiQ§Ø2±ÍþŒ`VãÃÊ°ßZÙ·¶)Jœ¿Ø&P]ØÆÊÅ÷¡ !
+û›¨5_ÒDJDñyšäÄ¹uJÒú'ç(Jõ“º{ƒ×�&ïðg/Î6"ôUÔšù=´çq¶íùnòyW’áË¸²
+ÅV`äB«%)ÁÓ--ÂMYJ
+;»ÔÍ�Âä´~û‰àÎ‘4ÓGè¶ñ÷õ%º¾-º%ßžæ £xÅ±ëx:°Õv£¢£úáåó’Ù.•)?W$òJ—:¹¨8Ë	ô8½RËªI¿ÖáxfMþ
+šèìKJ¾­9q0#½ä\76tï}}‹”ü+»š¼•ðgõ¤3iÈ•f§S*o?1A±©ÊÉ¯�†Ê‹íb‚4¥wÂéF‘!³¦§Åå_Âmfq°>Ûß]Ðœ58ò,¾új_‹¯Èï1²˜%ïËOÊà°ù|/�R@É“¼«”.·è�Vçxí{=xK§AJ-°âãyJræÛ•ªT˜Å¢„nÈÌç0pø
+
+ ¡Û×`f½¥?ÃbÿLö5»¨¨¼®¡�ž+k+ª||ëŒ¼ÞTidýË)g&oÀ0É�±Ú²·JW³íÊ}Ì­gš×úVŠív7yµºãîõàÃñ8+ÆFCÑ	í¤î”õ2W†ïÒ“##w­™S;xò(Êƒv‚¯L1åÖŒæ'ò”yŽÑ>û·;ÈLŠ
+­d�S/ã	`ÜÍ°·šžnP¶Ê5±
+‚�)¶¬½*Wî10}/O3¾SÅ9Ï½N#9´ o·Ò-‰[ïXÀ¿´+¦hy¡sÝöYAùˆs3ÑD]›‹°ëùQƒ:ã7<ª–¸­nÝoÃàŸä®½Ñ1W�bf‚Ã4OîšÒQšÀEË@0{½3,]LŽ
+]ú‹ZTâ|/ÐÑ��
+ÀÀ@ßPD?=~P¹#jñüÿöFÈßr#ä7^öÓ¨ŸÓk�Î)j¼Ò2‘Øh¥S(üÆ“ª§°ôå:šyíhµvÉˆ&½´¿½ÒvÔ½^Üt)aÊ}bÔ§£ïVZ
+ðèÝ–f
+rû!Úðxªlõ¤VÝŠAd¦D~²ÔˆW9+�7ŽP/öÔºEÊÃ¥pqýQgÍ7#Ì®½ª2¢ÿ×¤Á1g÷S¿—	�<1‚­–˜G^Â‰Þ‚ZœmØŠ5Ä;BVæŠèÞ¶½ŒDG“fnxÜJ¶?äž$l–±qtòÒ¢‡‹,0MsR#�ž~á7˜žÔ62èQ¹GU×Œ~w²{u€Ú¯ºíúM»Ú'T·¯ñ¹ÿ<IO,
+4ošêGµ¡Ò(.Üú#ÆóG…—ùùB!ñU~bJPóMWÂx…nGîåûw¨—U&n&ñE";Ïâs8_åŸýÓÿ‚—_&¢¥ª ¨€`–k’»!Áè}Iç¾['øÃ{æ+¯Ð ¦¨W74œÅØãÇŽÐ¹‹È[ OÑ�Ÿyù<
+ˆ³Ëh3#=ã%åcÞ–·ÎRš¯>ù9íÖ]˜^”›¹.ùŒk«¬Z+/|`¾¤I!áÞJµ¬hQÚ^:IF™,ÄŠ&Ÿ�³v�TJ;™Êh8iwd,ÔüJ·À�sÙ sym–+ÝDý#Æn{%æÈ1óÝ!�=ScuªXž.Eð¢°5,1�ø¸|@q_¥-<_«a‹°ìÈnŸÙíV%±LjÎxBÎš=±“®ø�u=®¸¯¥pÑcÌ_�ÿ4Àù•#÷üˆLüm¯ïþ]¶Û…Ú¡·÷:wa*Cx’ïv®²|s<6ï<6§�({Ái¯F*K½.ðm�Ùâ³æìêD�‹&BXTA@n¼à»ß?à-‰_8Vtª¹ñã€üÇ˜¹Š!¡£†Æ‰"éûÓ_‚%1Ø÷Cp´úO-	PXlÅAªý8.EÉNcJW5�^`ªNËNÝà€@Ü¢á’`(’kÅ±„Ñ`LX0Ì#Àœ¡{tßcA}tXôl=‡ÀØÐ“d
+‡Æ1ç{0=˜€|uŽÚ{±GEE}&vvt(+ œýyÚˆâÂatûÄ\Û¶>~µÉÒñ}<¬×ÉÌ8¢ŠåJK¯Ô›‹–×fbIªC‚Ì±?ó½Æ¸‡£ý�”¤%�Ê½‰ùÊB�w‚M“•«JTM¬‹'r�SÓ
+”åCeS1G¼û“àv°ÕA	ïìx})mÏ;˜AžæOk�/–ŒùUŽ^è‹ŒiGŸêÒáÎue<S
+¹�ßÛÛ»Û÷°IMTöQ�¼ôÙhê¿ýwMª–Ý"8•ÛŽÎhÝÖdÒ±þPÝO:g*ñ²—Zí3÷Mæ�•âhæ‡!	E§2_ÿÜ—Ý—ŠÉ+¡�é	sK¹;×x?¡g6Öù›ôâ\}ÝÙ�qê¯;ø\ÄF€‹°ûtr�‹0‚ºæ•^�T™ç$¤Zÿp¦H]Zøž6ÁÙŸÅ
+—¸ÙJ M°ñÓµÍñÓLf0¤P6=8T$Q7ÿðH¦Ÿÿ<Þ@}€¼0ZËÙ…°ÑÞÂÒ~£=Í‹`A¥Zo¢Y[i‹\Âé?¿���	öfí<îrµa–úX^1û3�{Š‹-ñ±!‡ôüÑ‚eD9€†d\OÖÛú…žOõØ¶tÿRæëPÉQ«VËúŠžì(¤!Ü«þò·>Õum
+l]WÒÚ‡ï8ÔWÝdzSá›k;þ4ñ)K�NÚ™úü±¯Ç:›az¬[Õq'÷ùÍ°€(ÝwÉ¾W¬†ãSÅYb¼,[eèbæéQ,ã’µuÛ/÷ªéiãÍ°é¦ÜGgÆ68Åqž¬qÕ{j„7ÝªX‚vN•KsR�2s]-à5]Yø_{Ÿso­WD1r“+y4A¼BI%7BÄû‘*Q�Ch™Rmhª|‰÷¨ÇŒçøâ•7Z�Žð•TQâ5%´Ô£C�Ñ~fÂÝóç¶3_;÷ÿÎ¹ëœ³öÙÿZ{��3bäÜ”u+›ÿ. ´øÆ£ÇGlœØÔ7b{ÿ¯:^
+òuÙ›™ØòÛ)q®�ÇJ«¿ûäbåÂ‘�Ö•¯ÉØŸphÝîò]‡:]Ûây3sêüÛ“½�ÌkUÐº}Zàô…%}§'Þ­WybÔÔ�™Æî[Ýþ«µX–[Õ/äÛç¢ÛËRØ€ý{»Ãü×1N5[)‡¶-öj˜5Ž_™P³Ë˜2y
+’à2Oí…¾Tiç•IcLÍU{1·>áÖ\¯@3ÀÜàv“Û_oŽ™·o‚¹®ÒùO?m@8VbZâ¡´ÁT 7¶àeôÇ
+ôÄiìÂs˜)'aÁ�lC¸„@Qo‚¹škp#¨6·p‘HÇ5iÀûx��ÆèlîrŸŽf½ù‘±ûe’Bí4#Ñœy‰©@0"Í)s‰GëpKZš2¤ÑúõÑ
+X†˜€æ)™¶äÇÊV™-wŠl[	V‘™ˆ.ØƒJI§•�™ö¥Z{0‰£6K°T˜*s¶„šX€w°€Œw£B½¨“í�ÔÆ¼D5ÍáÕ7qYJ�dZ™f
+ÏnÅ#­Ži'yD£Fa61pßKmi/ë¤”8+ìKä–ÎO©Y˜Cæ[8öì“6ÒF«`f+­1„×– „óˆ3’.YR!‡u‰ïën™ s›k…L2ÜÀï¼›x,ñôá:L¿nµ°^·Û>›ËÇ`-Îà,y\cÞ¿Ç‰"n¨·U�f¶™[þZ	A'Àpö€ìäªÁ§ø‡T«Zô<mµgÙÍræ6=È½½ñÞÅ\¥Ý('.0Êúâb�¤¯”ñ²DVJ¹\–ËÊ¡BÕTuO{õIý¥ÕÁ¶M"ïÔ-8¯Ã�Ëx›Ù^Îx·á(ŽK�DH,#ºÀñ?¨.*…Ø¬N«kzž^b=µßó]÷}ë«6Ep²Êz2Ó±ƒYøN“Ck™ ¯É×d¾T}¤ŸÓõ´[·×/ëÁ:K/Ð+ô_õçÖ4«Ôºb÷²sìRgŽo²ï¬I7ï2yµBÐ‘õ3ŽÕ4‘üò‰i˜�¹(ÂbÖËrlD)ã>„ã¨ÄUü�+	%ç<ÎþVÝ<YL¬‘ä°•ãrC~¨�
+#"UÕ]%«T5^Í#V¨3ê‚º£›ëWu�žC¬×{õe–e»-‘fÛ['�‘Î4çè€ÏžÞõ,ëÙ5|M}¿ö­ôöÝ6CÍLòG,{ølÌ'Ë5¬Áb+q/Žá3\ôs}$JlV|q³b¸jÝ¥§ô"2d1„&Ã‰-¹D�Ì‘w¤PÞ•Eò¾«[‰l—½ÄÇ²Ÿ¨”*ùFîÉ#Å"VšÕ®Z©8Õ™‘&«žªŸHŒWSˆ|5MÍà
+mUª}ê‚n¨Ãu¬ÎÑSõ½SÑçõ¿,eÅXqVWk¨5Þ*´N[g­KVµb{ì\{½}ÄÑÌ‘àâ˜àXíØå¸ãxêt8û;G;g;Ï;M@8Õê/Œ{~þ‹sœ–×ìFÖªŠÏE�oÏ—!Ì˜C
+Ö“ôbý…=Nj—\‘"�§'šÍ:U=ÑSd¨:$a:ÄNÔã°FJÕ
+õXÝ¶‚d°º+‘Ö2ùXMÑÉÊá×ÕsV�UhßÔE$ª·¤BÕ…ºÐ|‚D{½TÙëÕY¸¬ëª!ªøTÏW«8ès•§Š‘i%ØÕÈcÞ·Ûo0ßÝÔ‰Òç­õ¸¥ÝêŸòPVR5NIo«¥zEu–R*î3i�û2ùò>’ä€\•rˆlÓ[¥�ªÃÕòªºÒQ€S:TÎë@dÕp”$ýÕC5DtœaªÄ˜%ZâY;ÿýùøN8+T+jš‡jrNÚ¢	VQïûÖ(¶}É.f�mÒ1|¿ŒÇHu‰|6n™xm±Ÿ5¸ñj5f›92†ºŸAýT(—	ˆ“ÚTË`r+`¿h¬Â¨…£8ëêÿ	ª~º<ÀoÅÅ'«‘VÍ•…–‡Ê”Mý-&Æ`$�Öb¹c�}ý$°\¾õ¬ò/ñ
+{Î×œ¿)º’ßpl²bÈÚEežÊk}iì‹IdxRÞ"çn|Îû[iTÞ•f#Ìc�êÃžxyf’¹vM¡)Æ(³ÉŒÀx2Û¨¿3ÌntÀ|;K
+µ£­jìqù”ýèoRLÝNÃêQ¸4Á=b'ùw³ ÈºHíìnšJ1aÌÐhvÑ›|;À¼¥é
+´óõUe&Uç³CUa€ÙjB$¹f•÷ Jœ6µgZØ%¬]$õ28©{·—ºvIìÜ©c‡ö	íøÊ÷blLtTëÈVá-Ýa¡®�¿jÞ¬éM‚7jØ ~½çŸ«[§v`­§Ã¶´ÄxÜ©Ù.oD¶×Šp§¥ÅÖ»sx"çg'²½.žJý¥�×•íwsýÒ3‰žãþÏ3éGÏ¤ÿyJ=WWt��qyÜ.ï©·«\†È¤½(Å�åòÞ÷Û~{©ß®K;4”\ž&¹).¯d»<ÞÔ¹EžìÞ®¬v`²;yl`lÊkÓ¬MËìÎ/“ànâ7T°'±L! .Iy›ºS<ÞÜ)5¼:Ü“3ÆÛ@¦'¥YhhVlŒW’_u�öÂÝÃû|´ßÉþi¼Žd¯Ó?�+¯&»Êb*Š–×Ãèìè:cÜcrFdzõX¯Ø(®#<ûvoïB0>ÿðç3äŽålùóS~ÎsÁ¾‹Á4ÄØ˜;×iÎ`"ÀmBÅOD£ˆŸ¡-iDBmŠpÖ&im*!£
+¡´¢iU”„¶)	miˆ´‚HÞ~óöö8´ÐªˆÏófæÍ{óæÍ¼ÙëˆóyØ·Þÿ��'Üa±x~]lW¦Ö§&#Öù™M&wùÍÃM±Lm€ÿÆãXÃÁh"ÅÆ/#„�Í~ì%vÄc¦²úù|&ûtkŒKëýæCÆ"cmr}S”4iùÖ@_QQxÀú�Š"þdKÌ˜}F¼£¾¸·�’Ë·ž˜öO©©ªìõæÙaí“›ŒÎÉ¬IëäHNçQãòt\öÈXŒt0ý«ýð$fàLóøÏšy”\=Óð/®ÀÊìÄ}¬3ªK$½5�{ÙÞt½†?y“pÿÆ§ŸŒ”t¤$zÐ{“xÈY’N4è�±YQa–—s‚¸ëp£ð±Vò³«*·ôÓØàõƒ |ôbÛ¯©Fð¾Þ=ýaZÆìnŠÙ¼ŸVùú(\]7E‚5ƒŽfì
+Öt;š´yÂ@¿…~M4Öô”¤ÿçzÇDÖÖ˜Ê¸ÿ ^cë›�Æ¦¶˜?’L¤bÛØ2‚³õóÒºÔH±¸©©ÅRoy[Œøï
+F�ÈºDJ
+>šu1Õ'âöHøT¹ò·=½23±Ñ¼–Ôeþwö»=H`)QüQÓ›h°ÿÆGhÔo}ÆV’Ü1K�É¬©ÉÏÁ�potR…ÃZ‰hliK&G�ÐEñX%“QÃM&’ýV÷*Ãï5’jL�%7DÎõ÷['÷øÌèËqb­RƒÔ´¨×Pv7õ†•ÝÍm±/‘wK¬O(¢.±(Þ;ºØ€ï³”
+–²�?3èo¨Š>á‘ó}a¢n©Õ¤@ò«û’2�#Shu¿°e^G& ÓlYXÊø¿u-±Ì�…¯’DîÀp„VzéóMÃ%^)Éü§'õ�RÌ#á_Øj=íÀÏÌ ðUý5è!œâëÔ]0
+ò}Ú‹ÄügÀ7ƒî!âŸ¦K€Ï€J ð«€°xhÂ\ø¯á@ÝKíî¯P‡ë,y]­4X‚±¡}DåÚF
+`ÜÀ<ö›¥N¢rŒ§@Wæž„¹g­Ë¬Ç¼)r^+ì6R7ôµàòÝ{Éš@^„uŽ²Ï �êi>«u
+ã-ðc1ÆŸƒFák=èRÈ—a¼È�ÍEÈZ�qÆ›<ŒGØÝbÌÏ���Ð‚<ûæ€úx.Ö,S/(>å¾©.P¯ÖB…Ð�‘À¹ùÌÎ™Øöéß ÊþeÂöO‚}w|»"kÔYò®¶§ÎzPœ£
+êaë:Æ†^H†ûMÆù>BZ'MtO²þ
+»Þ¢Ùà=À	^ó íToPº
+ýUäM'ÕŠPÌ¶n‹oÒ$=H�á¼ˆ7•Â÷8çra*æ5KûNš¬]¦"ŒÃÑŸÓqBlp÷� uˆûUYŸb�:ÖNÃ~<ö¯æð½+­Ã=˜{ºç€�È‘‰Àxè÷È†
+ÛcŸGyûÈ+sàÜf:HÝ�ƒ‡Èø“Œæ¼ï«ÀÏ�Ç�ïñ¬;ó'Ã�8g879?87dþ#ŸdÎò=nDl8Çìšù¡xšv…@%~”ìL¡se½ð=²Ï\¼6ççŒC¡/±ó^¹ÆçäœÊ †«Rî-k�s+ƒ–qî3UÃòeb�æpÎÚ±v¨ô!ÂõÈ5áPÇ®OY# jpìøÞêÄ"MSº¥®÷è1m­TÏ ÿÛ1~t.âsHÖà5íûô±ØAÂ=H•¸K®Ý×²è~†{HY�õËí½&é�˜¢
+).W�uÅÕ#^°áŒ3i6”A[Ç”‘©ûoåÿÄyW=�ñß\C–¥
+Ñ+8+¹ÿ®Lü…¼èÊ=Ê~O—Òï^A^äÍ
+àY-Œß¯aš«
+ÒBm¬¬» ä+°vµÖEóa§â—ÚKê
+:¢÷ÐÔ!Ü#öçéE¯º!�GÙ9ww.Iêäë=(×@ŽCeM…¬?Èº
+Y”5²†mJ!î
+ü>Ëþ@òmÎsò5�—¯S‰z3#?³ò4#?çÃÎ›�—tÓToÉqê6ã¸×ðùåûØ*ëI¾sÐõ9ó³iÚþõ‹cÖò>GmN]3€ ô¿H½#x‡qßÜ3÷ZíúsV»ºÄjÇ9ªï½n�¥Voº§ifê-+rz)ÇÉuŽŠÓ}4HËRïY�û©v=Üî£²þ…&¸®Ë·m¦ô—ë�k°ï^)úø?¬ÛZ>=£¾D¤¢.YŽib�æ¡±êŸðæ.¡Mê!ëwê>ùEÔaŠ«¨aØ"f\‚Š]õÔ’ëñP–±ÿº†üä· <îÊy—ùîõÛ””º®â=jÅœcò¬AùŽï§©i»}k¹+(_T‘š”6_Ã÷‚ŒÞÀŒX¤zs-¯©/—9›+mfY·=ùb¸Þ 9Ø?(÷j OˆJ\­ÖUù]‘O�«giºÚ@�`\$ó~zTúeú# ~#7½6/{µ¤Ö-Ùï·É~>ÚUM+å÷ëtš¬—Ñ4†f@— *õ
+¬ó,òê6ÆoZ–ü>ø=åñÞ�GSß'ü� d½üvïP×û û
+ûsùö.=Â=Ñ}1Å5¨(ˆwqªæƒ ßÎÀwR²b›*ñµJ]}(N‰ãâ”ÕÅß�êûô”úÜßq
+¨mèßgÐç£‡/A¬~C1õ×O�ü°ß~›(WË¥NõæÍ„nìÎa�#Ð3vÂæ"è›´@ý%­Sñ}p‰¿( m}¨§:åÇÔ%nQ—>=y¾õº\Ÿ±Éú²ÄôÍK)Û¤¯îåóV|ÛÝÃ_ék¦Ÿìã=üã5x]i‡9šF¹DÖE hÓá&±—z€Ãâ}ÌýmUŽZ'•ƒU.Sø	5HÚ4¡Æf+ÏÓ´Ùô3`;Æ• §€ã6O€€Xû4è	?bò²CÀ~àWŽ.¼×½ä™pù¬“#ø·ÑkåÎpc¤Nî¹�æ`¿9Úë$C½‚èÛ¨Ð½…
+ÕRÈ'Ã.‹wùðÎ½MSïçÏý ¼KÓem„äŒ
+®]îÏÿ¯õ¸ßmÀ“Ò‡«x�eÑå¼u´U9�¾½o)¾
+|�Oçž ÿ®”gÝr…T²þ™-Ïæ³ïõ~¼8AOeÂÉƒt>¼Bµm!æÙ¼çªeèg ;s7¯ýè>hÃ7Êö	9Xz7¯/£R†˜
+_‹Ø5ü‹ûjŽêªÃçÜs÷î.ËÍ.K ’NÂf!!Ki(¬ænJó˜&òˆ3]äQf L‚ Ç¤-&,,I‘hÇ$f¹KèòP2ãØN;-àŒ£Ž3BPÿpÓ8hBüÎÙ{CXÊ¤©õgçû}ç÷8�=÷<~gT¿Œs±²¾Žû�{PNã.Fý‹pæcæõ1¯ìhÊoû»¤ŒÏP/õÈg/‘ðJpÔæÑõm�÷¬ù©õ>ª‹³ä/i1w÷ÄÝ½�½ò 6ÿŸ€½óððúÿº/J°V sÔ¥d™¶¹çj‚çêðÛ„e‚§â^ÀÎ@ù7(oŠP~
+¶#à}`5Cw`Á=ÂÀÇÕ,äï„ìÐÆ�ÆTÝá[À³©6†Ïòïß[Ø•ª?ô<ð8|ÈÌ†N¯?*PÇnçûÐw€	}yª­!”‡¯ßª�Ã)ú ünôñ;‘�|È;ôå½?>*[ïŒˆÍ÷½!&ÂK?ßóæ°¿ÿxl¿%>„å<Xã×ÆŒçAoœ{ëÇ=È¥"§y´ÈeÈŸEþ8ÊâÝö„ä©V;6{Å(rg‘¿:"gN½óŠÆ¼—Ù÷ÆØ³•~@Ž> Ûâmˆ¹�·Î%ÜM^œ©7ñÿN
+È»MÜkÆ{Yú;rQÄ€ß�ž¾ißiöÙzß;Î�öIë½#?Æ�¶KÃƒì6[¨H¿‹'Šñîî�}—?àŽ{Oÿ·º}ÏÛ//½/G¯½‰êéyÇ„õ´¼ÄÖÓqŸ?}íÙùLÉEÚ¾›(ÄÛBí»›ûÛcHßÇ£ûÍ~#´àNœ¸³
+�8/J€À¼Ûs®!võ�0ô>àlo>p;=€ÃíÖÈ0ô¯C÷©ïÈØµ6�·žÓ×­ÈÏe~ˆ9“ç`›?)–~à°ÝþÖâí‰¾ÿª\ D¼sÕú‘›ê% -—‘@t/tï9²j¤Ÿ]O,[6’à¢‡%›…á³ÂafÍÿœ]WºÉ\Âa¸fNÏ–ž«fy¹Uxdqª�˜7?|-:‰]%ÿv•]Ã¤ËZ‰‚‡ÃƒQÊžÃIM	'ì�$(Ä`HäÏ	·_doÃÿ{“l’ÕÞ4õ)a4ø{�ø	ggXŸåéKdL	“èN\)”ôC^€A@%
+ì'¤hz•x!9PÔ
+ëb]g'ê{!‹� PÉ*öSØ·	É^e[ÉlÔ}ž"ÓÀße%Ÿg�OÀ>ü
+tÁí–~,üG-ûKÐ§ƒ�X|ölð‹ÐÿÀÒ¿‚e-êí²¸ƒí4gq_tü¹@	ÀP:„Ò!LÝ!h’²o°gdO§ÀaðöcºšÍ¼€üFÍ‰‡f„;0¥Í˜úfÌ\3f®™¨p5Ù1M©˜ù¬	1MˆiBLf¥„íD;E²ér†yß‰yö8d?pEÚ¿	Ùt�=‹y,Ä¨ö³­fÇ"Û’xÔ—�gOcª
+ötbFN¸õ®æž$"8Ãb¯ˆÝ,½›îÉÂº9‘•“bDm‹f°�äk€‚£q#É>
+T*ÛhæósìI²ÝEŒÞ¢´°µÅ¡–TPÿE&uÈ¤9ñ³ù$‚€B‹ÐÒõîF÷n7ó¹sÝ%nÃ]çv4°ÖÊgÅ¬ŒÕ²s$GúMç’… c¹¶da›§Ã÷ô{®xq­_»¢
+hƒš#W+Ñ­N[¯5j»µ6­Cs·imNe½§Ñ³ÛÃ|ž\O‰ÇðÔyÜI;¢{ÙüMé�6@ÅÇ`ÏeO1|�¦â)Ø	$�æ® <v@ó"Î‹8/¬^X½°Há©Ö�–WõØuDü ðx°X30·�ƒ¢TAÓ¡éÐtD]Q†0Bd.P0i°j m_‰å_hÒ?(clŸ!ê*CÆçöÒx!í(¤m…Ôˆ”EÃÆl¿ßÄ‚±‚X§Úh64tªµ�Ú`mAm§Z(–”uªÅ�â`qAq§Ê<Èx§ÚZÓ[s±ær�«i¨i©a¥øt	³¨$,yvPpŸ9#+\ê�.Uzñwb�íÀ5€Y”
+€ªôBr¥ÖX{H-¨Ñ#ŽHnù„½]úDIø•{ü¼Û\²°6Z…#7´mwÃß-£S¥^i�CH{­ß!íÒ®ÃpÀÕËc®Û¯ž”1 p�Ël
+¹ eH4½€Êêñ[ÃÖ(=øu+Ý,dè¦q2}:!Ä?Åå‹ú”ÉX:.W!�H¹_Ê2)ó�Œ*ýV•þ‹*ý[Uú\”…ã�”y†'ªŸŽêµQ½0ª£µ‡HÑ•iRjBÒ¿Iù¤”!#3O¿�§¿Ÿ§¿›§¿œ§ïÈÓ?“'êÍÄÞÕ•L)=BÒ¥¬’rŽááúë\_ÃõR®Guzœ¢wR.å,)³…¤ï�öVx‰û<}�T %jF
+yR!’èˆ‰‚î˜‘å a3rô/3r�_ ·©¼Òè-3ÿ�N£ÐJUèï[ü.­$]àAðð�I„Á'ÍÈÿ#Ô?
+ý™íñ¯�:Y¯�VJûËV½š¡
+èõ˜ú*z=JB²×Ãfè¬ÍÐ~ÐfèP«ÜjFæñèº…ä+"v#	*b$5V�O ågÀËS•—™!Q«Bt�¤�™� ¹b”h€ÔÉî¸�2‡d3I@:›%gP¯¼NfKv™�=hE;¼Áÿ9/þ8¹I½æqþçø«¡þ‰Vš]ü×gÅt™ür(Iƒgø¥Àyþ«ü$]mòþPÒÇÅPR¡}ü&9ŽX…žá½¡-¼' ½�xñ©Û#óù±@=)Ýä{BÄ0ÈvüãÕp¯}–×DºøãÁ$…Ûˆ 3c_øæÅIZ™èâò“b(%h£ëŸ‡çäP>_zNYDœôËFÈ¹Ë¹Á¹Ú¹Â¹Ô¹Ð9ß™ëÌqÎtfºü.Ÿ+Ã5Ù5Éåri.Õ¥¸ˆ+392`ìÂLÍ'HS…TeÙ§	!N}…ºì�øTV­T¯,§q5©^U/-ªN:G>_\TwÕ}aí)J¿·Z\Ù—¤dÕZ,PaÚ›÷?¶ö,¡´xï�lÁM{¬[G«ãýIõ†Üø­•ø“VÔÇ�òOý‡õª�iëºâ÷¾g?Ç˜gŒ?°Ÿc0c°‚°óåÀ’ÀVAb¾òÑ|§#$…,[·�f$­ÂèÔ•ªÍH×,ÃÙâ$]è²~­Ò”µ[¦­Š´6«¦©j¦¡LkƒÙ¹ÏQÒjùgÒ®Þ9çÞ{~¾çêžß}ïéÔk³j4U«ƒ�PÑûÚù°�_lÆ¼øD¸¹5þj^$î!�¥¼H8¾¦ÙÜÖz™ê§zCÁËT1‘ÖËø ÕÚLæñÁ`äñTÀP€›E<�!ÏŠ°
+"hÊ‡‚	žOƒ®ãuô¹.‚v¤×Z!`­�ÄŒÊGËÅµ–Sù|H/–ùÅÅTgŠ‹eª�¸˜‰€6@Jl’ðÛ�°ùE÷¹‡n«-½�²‰ql8"ÆÁø!¦0�ÜÇPËãü¶žúÿŒg;nuw…z¬¡¨5Ô�?°Óí4›Ý·ˆÃ§íÑÎ®�ÄvôÄoY{‚ñnkÐœèèz„»‹¸;¬Áê
+µ´&º„žà…¡#díFf§GÂ_ŠuìA¬†‘G,6Bk ±¦Ã�p‡‰{šÄ
+“XakZ˜c…7×ãðÆÖÄ2TihKÛYJ©€ûÍµDêõl_�x9ª-Æ's¯H|¶”ÎH\e­�g€—«ÎUG\p;‰K
+Ó™÷]Æ'«-¹Wð+÷],Lk¬õÈ‰Œ¡]ÁÏÀÀÀ ‘XÌ	z0fçáÒZšÃñÕ›¶´Æñ@(.DƒLÒ»ßZv.p#@õFã�©ÀL@‹E`:kŽ¿ÁSÛø^~„ç§øž!Ž¶ÖŸ	�)þSžŽ›ð ´PPŒÆHC`$Îs6´Öñ¨ª]•¹iA¬  Í RôKÐ¿ù3È?A$è(ègA^™%3´‹v…Œ»‚$bÄI^:FÚ3ëözV$ÁvlOÛæ-ijJÛ@�ÇöBm…¢.
+oŒ®€~ä�O@>‘ÒÚ#.K³62€œ¶�`0HÔ€s;¡ƒÉq8�ˆ!8d NüeÞ#<Cp�0gÈÏbÄ>Â;Ø„�ÔDªe$C�	
+_¥®A™*£æ. ©$I]»H#…Œt~Š·Œ‘Î�ŸB4.Br¼oEF'{7°hb�‹T}ö¨r·EcÑØ@a“Ý3Ó¯ß¤èsd–¼±ö,uÓÏI¯!*A^<ž0ù“ø´Ñîò9rÊüß1<]vÌ-]Y®ÜV¹½dÈp€‹•py�I'òÎ3çe3Ù3º_T¼åý·ô3¯VÁaa™Ã.•H,^g”˜õ:�Í%ñÚ9©kõ:£Ê¡žÃ§�ŽâP&Rã)äÀ]33URüþ1’@¥`ÁÏ]äù‚|Ÿ€�“Ÿ˜�ÉÆÙI|RÐ{n¿hÂ¦äÇf¿à�ú?ôKüjs’vòd‰Zú,´%Ie](¾-OâO‹Ìhêq¾+ø4F'œN{ãÂüB»xRíýwÛa0ÏÎÃy±ÏÏƒ^„ÑÇš¬ª¬ª*��hL2H0TC�Ž[º3+Ïª´'—îÐ‘² ¼D!‘8åî†!¡¸´¼°(/_¡t——•SLi¾§*‹;Qyž«å”ºŠ˜r(Uˆ
+°§¨€AÅG ¡þvÜîÔVèõ�Ýa÷VúüÞ
+�ÞC«ÝîÐèõºlF¦³za€5£ËÖk}~ŸÏ[iwì)QNœþ(ì½ôª°yEÞËŽŒãÇï�¿wEØúR'îìîh=.\Q÷•à¦cÏ¨©µÇwoØ;œÔ¶µIÕ²šÔÍ©gÕ)Iüì¡±÷ÙÑQ‰µ�ÎÁï©v4­¹w2Ãhíêì!
+/}$ý\º•£UhŽvþ0L±aÌ¨å¹J³^�kæê˜5Å½¹ð7©¢·þ`.#ñà0ùÇ“­¯$V(QgU	w¸ÁÑ)‹š¢EQOÏª>ÏàªÌ*U†SËÔxêŠLªª˜a’xƒÀ×˜²kjL´¤¤Ôå.“á
+S1Sâ¬ÑÖÉåå“ˆš„'éMW¬¶Òò$5"(Ù57ôzVY·+‰Ý³(dg~…n
+~q¨ˆzë’©¶ l0äd$ñQAËØ±ýHÔ‹½W«½}”�.!7ØÆõr#Ü87ÅÍpsÜ
+îOÜ§œ‚ãÖÃW÷è¬¥eT(Mi&Á³Ÿ]l
+õÿÒÈ.Ì“ç.\DrY Víü‚h�OäÛêRçaö
+Â0
+áû«r7dÞ)`?¶è†’éõŸßÀ0VÞî5a„´ßWá¹ 7@òv‡M$�•)a'hèÀ¯%:|æ±æø¾ÈÓkBÑl›íÌÞÍ?ê>ôvÿ¯ÿäNÿdçá'&N%GÆâùú¢Ô7
+Gê‹ð¿þæöU_‹ÕÆè]6YmêúØÎæðºÜOEß÷ÕøÁ¡Ùù­Uç¶¬>±ãñ·Ý~íý“¥Ës¥Êê‰¶µ[‡V–-r§‡CÓ»_ò�BsmÅ9ÀÚ$ä*Ô£ù;|Jc±·RµTRùŽòÊ¿*%*”Ä-—Z
+‰‘CB½‚B¥’ï¥G3ZÎ�wÜ|UÙ|KÕ6’×ÞwNK“�BF¿à3Tº\Õ9>X8ìVV»m§R${hI­§I¿‹´h¥`�ÐœÕPO©Ži(Å¤\ƒ&±ªa…ü5¿‘ÁÌhvËV°}~1 f²WîF�¬ƒ+IyYä'ÉÑeò)êÐ÷zN>�=w‡_h²ä¬?œêµmØ~
+�ýûðÒ¾âàßSoþ~fìì÷a¥°‡¯‰{¨–IŠ—­•Ò\›ÐBõ,WÀÌŒ›šÕµžùïMàv­ÞY:É¼>_$¾”*�ì>uã_ÃS�.|HÚ]ÞþLê‰›©wSxŸ-ô7¼ûÍ›ñ±i²ƒ}©sx½ƒ¨YpD¨ˆá
+=-7D¹ßpÿaºÚc›ºÎøùÎ}ùÆ�ë·}�Ø¹7ŽM''%‘KN Ðò*¬¨åÑf	jÒÒ�
+:”€ ”›ÊØ#îZPL2‚	“ØP÷@ýƒJÛ4UÛDÔ¥]­š@Œ•˜}ç&}ü‘ããëèžï÷ø~Ÿ QDQ³yÉˆ—9ìb‹(ô„@jp”Ñ:4ªéáoO{éd;ZçÄ¸—»d¨™¿ä|�MãÊ4S§(º±;§*Š=áõ7´,iš×=P<;³b`…Ï©úÕ–Ù
+·ttqŒVB?]MCè2­Ì Rt}SŸ|\¹ „ºatÂÈÃ £°3—H¿ÈEˆJkç5ª›ÀÕR‘Ï˜+©4ù9
+ã'ÿá8l"×‰�¤Xa²]`*kiTYkc‡
+ƒêy•ªû/îägå�Vün
+õ	ëí§n¤Žµ¥Ómm×­5]Çø¹ÂÃq:ÈSL%ÒûåÝM$oMN*ø)Å×F²#³Ë™ßê…Na³�ÆY¸
+?§ï‹Ø4tËb÷^Ðlkv¿dYCC}
+ tn1°>•ÿïéžE?¼-\–zˆ›T’Ñ‹ëlN»%)À?œÎH4æU#$É’”%;“ùäXRLzøcï‰}d€ä1sé‰Qˆ}Õ'¬ž¸lbšfØÅ–Be¼²¢’Ê ²’(+�–ÆJÙ—ÔödXéT6EO)—#]àwá.èÀ]%]PjÃÅët½kàK�õWS³Û—ñr=~Šž‘|Ä²¬®ÉÃ½Ì¢]|pëÚÎß=þÚº®ï~ù½Í¹¦­±t}esuËc�OdèÉÛ°ü©¶ÁßÏÿ«8rôã_ß+Þ:º®÷4ß>¾¥Þ|teñbô¶-+$Ç˜Ÿ…;ÃùðXX$a¦ÛÉ«„ºÚ|ð´ašÊ“
+ÌU|oÃ}þ/ÑàÄ'þÃ\ iT¥ ©6È(ÜÃŸ/b^—KcžÆz­O;¢å5QÓC£´Æ§‹›Ê.Ã`au‚Ö¬‡¦™Ü�xwS)ËUrí¾Äl�~ÀlœKyøý?ƒÅ¦/û\‘vÎ	–(‰Hbžø»7?ßß;'F	mØIÿúF�+ç<œ‰w<‹wŒAÛ£„íÍ¡pÙ£™0ÃEç‹«•¬²HyW‘™ñ¬¸Öölhmxƒm«g«÷„ý§®{ÎÙÏ¹nH7B¿ú0<fÜï‡ˆŠºTÐƒz(VÔ�=l�fôÇõ¡C	ë”†"ºC—�‚N%9â.ì±­ö0Ue~Gk¿
+jA˜�¡LŠèÀ)ÕG…ÙX¸CÃ@±bN"´Ü×áÛäëó‰¾(ÌÇðRb0£ß:�¼A
+ý*ÜG�9�1ÝDûè½FoÒ[ôßÔFõòQ8üŸÇ³Ó)ï‹�71ÙžË¶Næ¦¢Üå®©7UJÚskRãÜÂ,d°S÷ÔO~±K?¤ãÿ×¸²ûÝÒ®÷\(IÈõ¶#b<¸§@0	™ê¸J¼iºÉ
+UÌYMM�g;ŒÁ:0Nn\?˜Lè7�Ÿú[ýâÓ÷çB×K«F@*~ž€yð£wwŸÞ–»òÛ?éîþÙ¥âgsÜ
+|PZ‰*ñœK¯�’‡cÍ*�NYGs›º d¡}I…xS…êê9Õ,Ó™¹™ËÜ+QHÚÔ¾øÎô™Ê+•£éé[ñ[‰¿¤ÿYñIÂ±ÈV]€ƒÃUUnR ãÃÔC}AÈ\$w‚¼e©ºL´ó‡ÝÎêª«ÐCüD¥göˆ=ba€H_p€ƒÇrûŠÚþZz¤6_Kkñù¥¥ï^ ³–�|æWšAß›{™ù®ù¨OŸÍ
+çö—YèL´çîðeg´žÔDoëDû„½åAMéºX²Då
+3nVš	S”¥„+™,As©k» ¦áÎ´cš.QÓr}”;£Üm¦òtê‹HÍ5ÖKrš,ÏAœ‚Xæt“
+¡ø¸ûX9
+Åç:äÈ*=-C{ßZ5otWÿæ?=ð­:S�x¾JÔ<,)OýðIcùà»;�÷ˆ‹}qùÚ7N6Œ¼ra÷;�ÍˆÎ´I­²ýäKË—Ì‰VµÅJ¾¹wywßiîáªõ
+¢[BœäÏ¬*è�,p2M`Ô8   á‚ J2ˆ»“ˆ§(;œ¨ª2æUl~E±ÙQ‘6‚“ó*œÀyÑƒÌ)�¬ÚdÙ&‰‡x¡^lð<³«ª&À p^ Bî±0´ZòÒ ýjL4™) è®¯i(—µÊ¢€pû7Ÿ,[›ëø¬‚9v²7ëiöX‚ÙŸN‰ÓQVÓ4t´^J¹^Ä=q�Ù³ñ„+#§&¯ÓmO+áÎáâOàù~aÏƒƒôÍÉî_]È÷ÒRclþÛ"x×Ä^ˆõI}r_ô x(ª4ÒFóiáic•¹¡l»´£l?}=òzÙ[Â;j>>×H4·ÇëÃ9ÉæÇÎ+ðRy[®h˜‘Ò2A	‹>6Ó7ŠN|k
+ú‘iâ¬8
+sI)<~©_ÉsÃ]äqX¼3Nã(�û#nš7Áä‡0Õ`î¼›ºõ
+>_~bUl¼mÞÝÎ«cQ{üËäo]Ÿ»Ì~[:%a¹ÿ2e4ÌÙ½´×Ø{èCFÇáFƒ>3ÿ¹ÕÌ¾AÜä]Û,mŽJík0d)¦"rËò×2Ö4y‘»3@Øñd±g
+¨Ç÷­Úû�-;vnJÇ#3ê–,Û6tò{/ÿDié™‘'_+léŸñÈÊYe)·™ê{åO-µ
+Õ8;W#CÈÎ0©"XÍ6u{É·]{ÔŸ$dY€]ÂNqgp_HÌÚªdIˆëUº,6°¡wŒ8J%5g‡†ÃDâádXs—qŒ˜×!5ìÿdWkp×½wÒ®¥Õ®ÞÒ®´²d­Ö²Œ%¼–À‚	‹‡B›¡<E˜	&†6¼
+ØàVq\l­Ý¤¥&¥�K�djc
+‚RRf€B:}Ì€¡MÇ¡.àg:SÿNmzweJ2ÕøÞïê®¬¹ú¾sÏwN¦–eÊreƒeD™·�wôØ9{±=aWíÝöœÝh÷FŸJ”ÿ Á94©Qtª@„Ž²Š<—f¨žæò´É 0=…ˆ?Ê}móûDf°JLD¢KCpB=ZÐ*\©‡>[q=™Ñžh�4tÊ€Nn|ÂëšF±VÙÂ)j¾êIÆùã‡ÚŽý|S¸ûGn4ì½q`ÝÅW!ûù¦ñ¶ys•ùË;;Z"ËÉ�Sû³ßw®ì=qðÄê~è?Ÿ�X1>§}IæãšøÛ‡OŽ£[°ðñÞƒn�	\:ˆÇƒývá2ÿxP�¡…—‚$^F×•É09æ:|€Ø ƒR
+M0*ƒc$�åk*�cÇœ!ÕyIò.4 `¸ÌóðÈ™œ	š¼fò<öàØ}ÕŽP‰:"G�Äì0Oæ]sC:]�j4Æ�Ä
+ú´ÝÒry¼ôr‡¡�l3“ÀErÊ#RàH¾‘Œ3ÊÀnMÌÜ2q`kâëŠŸ\»H\*2&D„`/ÂÛ~„7/ˆ6«çW"+¤”2ù%¥9”5eÍY>+´JÙÈ~å¸§‡?&õ›Oóg#¿‘¯]1Ýb\FP
+ÆÓ²‹qó#YÀƒðæû–ãÀ2¤á°Î/]¿!¯VA#|kˆ4Ê•=p¯¼³|¯ÒEt‘Yc–jµ¶Úº]®ÃÄ!êÇÖC¶£®_DÞ•ßUòÄjØô‰yØ2,WF�-§A5œ^IÎ¡€™—	}âÜº7�S´`gü³iÄë4B¾6hÍ!.æ@RMbj2“Ì%“D²äz€£;P†î@QÂ­º»Ý¸Û[u~6I,š<ÕIedh´ Ð5ÀCÍu!�WÆâbÈê"(§$K�7úëa¹£¬TØPG¨EŠš�¹¦Ôƒ¸uJê“X×ú£F6[µªEžZ6£Ë]ð>²¶'¥&±®!ßnÐÂd·„�o­¹qüík›OöV/¼Ówió²&8u·ºsÃ†lrjjIÝ¾µ¹52;Ù–[ÖöÞ©mßÜÔ±hÃÖ®šÖm_ÕwssKí‹»vÖVmŒOÜŸÛ“yùhóòg«-F7á—n C³ªì‘o“·B·eb#ÑD¶PÍô.ón¦É¾«øõŠ½ˆ¦º¢ØŠ”=AÙCâ¢D#y®¨ž–ëPgCÌ¤Òqé%	)g jå±�ˆ£žv»ãÑˆ‡ìY`ãlÅ6Ü–‡/ 6ŠªÑlW£™h.:%¢Pã° ú˜Zô^Vä-ýŠž)šñëÏš$'n•Jç}]Zêõ*Â”Õá$_¤$`‚õÀÏj¶‰B«b“ˆ¼“M!Zú2%i…Ò{‚;™JÙ¦˜Ú¤˜Á;A­@…
+éÔ´¹uðOÑ7¾×ucÃž«Çv½ú÷«o]Ä[MÓó+÷­œ½¶â»>	ûÿê…�Îž:p|ÿÉ/îN4½Üˆ�k]´îãÝ¹7ÿ²kY9ªBïã!Ø�÷">rƒš>Ü›‡’êgRÝÞ2*0š¡³ªWéªngÎ‰9/@	õ�?CP`�Q]{ë–®‰ÁÊ¤4DÙ¿´†ÁŠÙ³+Ð(�Ï®Ñ"Þ«¿EcÜ^SXÕh�é‡'aïCç)ëU!(]²6¤®²—C˜™ìNŽ6Ÿñ˜µs9òø"5 ª’Tt€Æè”À¥Ù` ˜
+âÁk‚7ÜØ¬îùqd�³ÆÑ)ãÜ�^'½TpëWŒ'S:à5cú¿¾‹žB~òðßlØJ�&Éæ˜š^�ªièÂûÔÂÙÕ±±òPW��¡tZ™:wûÚ†>ôk8È^rð�æéÃt6µÁ€ˆ‰~€zð ê\Ž‹ø]àFÃˆF~WuS˜OÄYÊçòƒÀ˜…„‹Q >KÝ‡ü0×Ç�Œ|öÆ/®¥ýòe�©	A(Ë2\‘Hê‚'kçx+/>�ßD&ã””ÔBbE•cz<-lG
+Û¼XØvëÛ§œzPÊÙ«Ö„¾¼š}Ž�ËÍkƒ+ÙåÜRÇ
+±‘mà6Š;¹,ÑnÙÏ¶sí¶N±#p”=Ê±Ï±ç¸ßòçÄØëÜ5ÿuñ¯ì÷)û€{ >b?çù‰å4»@À¨7¡$¿(úhK‘@»|nÁEaF�rZ‚s·ÈrÅœèó…¬œÃºÅ
+­k±ä±÷U+&:0Lø{($.­š)ŽÅ�.EÑ”/ÇTšEÿƒõXTkKô×ŠPÌcUK±j©³üË‚[ŽoÚ¯£ÛË#ôxxMðiS“ÆhEp|f»¥ óÚ×X*<±väcÀ�@îwÿ?·s-—gg¢?]øÅž¼à6¤ø‚F�t�ÁdjZjT «ðF£	Ã��ÿ{uhFýÄÒ¥^åøQ	¨^³d|xqué·ï=„WoÖÊ�¸Q’XOâ5bõ‡;“’DTË×B�ÿMë¿!ˆ{Huˆ ¦c-jbX%v‚±S9Â¿!¿Ã¿#óŸÈ÷ãæé YnR^¯<¢ô„O(ü€<PZD¤óØý~¶!•ÖPáUiQý‡Ó]¥¨Ár4yÅªJµ¤M‚¿jNxŽÔÉß†7Ãw”JF"%¦’Ã��wˆ®°«Ô™¨¨üZø¹ªåp…w•|³r€K/…«Â™ô–t6�KS|‚¯¬8gäÃb©7N0\t‹µJGøõðmÅXœVÓuéõØz<Cfc&±Ó°�ß.lw„·ËÍ¥m†}Â>±KÉ¦¯ÇïÄ?
+�…½+)6 ÐÁ\Á%p¢$c�0ú/ÙåÅu…ñ¹3»3ûðîÎŽ½ÏÙÝÙÙÙÙ{öeöÁ#‹=†€yì¦¶¢Z”òHÛPá5ï¦©Ýª�”ÈV"¤ŠKD"ÑÊQhÀ°@C	•*Ñ”¶šª­Z\‰ PpKª‚×=÷Ú$Týcî�½3YçwÎù¾Ó¸ •g21­X´z5ŸÏKg4œ)#àsqÚ/*’m	Þ�·¶ðÏãK—“Ýh€óÏ­![$¢CÝ&]Z�jÆøeEÁ¿ES°L˜>´9ÜÊ„¢&&î²¡¦Øúzº;UçráÕá€5¹ìâénWÿt�.\ôSt™’©
+ÈW_;¥ëå5“�;Ó½½·²ôÉÓT3“¾%’mr�Î—Ë8Cû'I‚õÏŠ\n<¢@ÓÀ�Ã=k¨u�ÈU[¶ hþâ‚b@¤Y6Í'4"�²\s)‘Dž) æ<“ó(gÎä)5ËS‘yL1>’/ëåG„Ûk³Þ
+êïï§ú+Ÿš
+ä
+ÍÚV‘‹ùyóKE7î¸JQ�ÃçªkÛ¬áÜs«Ç¼ûòò
+ƒ×>šÌw«¾prMž^õæÆ£ßš~V]¿ð•W×^8³©sGeü\Ï…á–'EúDdÉ—¾¿ùt·ZRú™­ß–Sª?~j÷–7\×úÝ5»�zïo�ìéx¥ËdÆóéª™¿š]Ð«ãˆ6–X#Y”¥³LV:à:9â:"œt�ì–ü÷0=ëÙã}™Ùç}�9cÎ2Ö:Æi¢Ã+˜uŒ9káÝqL¸yœ:CU™Õ'£¯™µƒªôµq·~ŒG|•ivüÐA;ªLÖÈ6Xé1
+!4�{Ç�$w«›v
+H@k9êG.¿ä§ý$=ü+ÕM‰®é½ýk&a^ºÛ_óXÁúV™ê�ºÑ:y{
+Zö“	Þ¨Gdë85˜°'¼*+ZÓT�KÀœF6Ÿ#�=zÔ�ôÃ\T¯� Óž3˜ïcMJE!Ž	&7ßtY’Zn¼1ôÇçvMüÞ/÷J[jwÎÖÞ9½ï$j}ïÕá&AlÚÍÏÔò¿9ùbíêµjíŸ#•£
+ãGÿsæÁ¨ëì
+o½˜Ãš¯€Jî…îäïÅëì¢=ü<¿ŸÿoÞÅïjâÖò\/†¯ò¿[hGÎƒ†‚/DhÍÂJ"ˆ$:dÅ'$ÍétÐÍë¥,¡r‡€f
+_N0³P�ùËICa¥‚k±¥µh((ª >å°2¡0Šì#Õè#Õè#áö�¨ã¡YrÈñ!;Û0Ç×â4YÁöëw	”ÏJnáÃ#.¯6$"®P
+z`	»¥$Öz†�¤P1½•üÿFÔ$xxŽ•“u
+z%Ô…’ï‰{C¸4”C‹ß{¿¶óO=7Ñ¼Ú¯ï<µ]�/og¶DSê¾Ú¹+µ�Î]ýJ-G>@�‡q®7�œ€ˆçQÉh5ŠO‡v‡~�û‘,w67Q´ôúØ>nÀ2`d¹aË°Õ—Ä°S%Q—‹�b‘�NÉ*Z8JŸp2MK¬È…x‘F
+ø�pžzKÏPi>M§«ô�Š”	õVX¼
+…-Ö1‹…kå8šâx®ƒcà[7ŒNò­]™±”.¥³ð§[ƒcQp4×DFüBg±†*¦HñO¨ðSãUœÆ	ªøhaâ4"Vc"¬ fz'§z¯O®ÞÉ2O€ÝE‡­F¤ZeyºŒ�"?y›âÿ¥£¹ã„Ö‹Ü2®€¼[I$¡Pdw´-\'pÆÌ6¶ÏâZ‚;4†šv$¬ª:�ÂÝµymÁ�í_Íµ´i;ïœËéQ_0Þ•3y\IO~ž¶ÙLOßT2;jÚÆ�¢ÕÚžJú¢Ù–çjcª�762•ïD4µöûg:=.LT¢M£¦ŸhÙ*ŠóÕM%«Éj;–eêgô_è`®è·L·l÷M÷mÖ>s;ŒÍƒì00¶p6kÍÉuuU”0‘K¢OŽ±Ÿ4šEÖI´3"‰	YÑSšÍRg2Ó€ÂïKSJ‚Òx�Ö0i5™LÐ^Ÿ%©kcT#¢s0jõÁ„5Â²‡:8ô32²�ÊIH:	4'!éŒEÂ„d˜†	ÉðhæÿŠn
+j®.­Bf2 ÷·ÞOá‘¡ŒÌdú½é‡; „ê‰Ü@ÌÐŠâ†©
+[Þóˆ.=äÏÑ‘{ÝUEÉe�ßsØ¢©\óô™\WÂï°I�Ì?JpÙæ¯´�Wo«;V©µž§å€àWÕæè7™­³÷µ×¯Ó0¯ 6?µ) ^£ËfZž¡É Fó~>@GKFéË¥=–>_`OÓˆ$pÌ,`OgwÙ‡ìŒ¿”	v–úJ/™Þ6M”LuÌóöó%f…¸ø?‰	˜šR úsœè:pµ±´ùµ”Ïï�±ZŠqj1+Ò¥HŽ|„9Ââ Gbnw§0"Ð.¡C qïf“`Â4h ×O�Z¥ÿmØmåÎr%¤
+FèŽÁãÏ$xü<±²¸iß+hˆPgY� "Ô®“qSâ*Õ\—,DuŽ·¨Z²1Ù”dØ:0".ÙýŠJ¼›ÓmiÊ¡ÀÂG��QÖ$›FvÕ™¦f­væØxÌJ˜Nj[,d@1Š-ö¬’¹±�(Ê<åyÜàCˆ¬AáâiÏG^1Ýì]{ÏÕ¦‡*>\ýR›Ôöí¬
+7lŸx±¶ûW‡z¶¼»ÿƒU{·-¨¯�¸®ÃŸßyéí¿_¨�ßŸPÑ[ZåD¢ ~£¶¡eÑƒ÷îóç_û¢¿Ñ£ä�<V»×¡R—¡Ý³á©v�R«3wÇ1µP�y`ø¶@r¿@êá£×£a#õ«ÎÜ4HÁÄÈ‹±`“d®\Y¸2T¬V¸Zá*ÃŒi_LÅã™Åt&d£©Ö,™,/Á@yû6YPKÒùK:Þÿ¬ŸoÎé¢Qék?ÜþÛö‰vS}ûhÈ(uÂ-
+g—c1IÉ±‚$fäØ2Il‘c´$Úäÿ^5°M\wü½wþ8;±}¾8¾w¹ß�ãØÎ×='àÄ!BH7Ú	
+
+Ôƒ¨ÙÆZ*’(êi«PÓmTZ?ÆÚeˆ­ÕÐÐ–ò5C+H¥¶j§eÒF×
+‰L‚®ƒ¡!”vàdï='$T«&ÇwïÝ�­ø÷ÿÿÑ²ˆ¦Q*
+F´9¢µQŠ@´ºZ[ÑÞ^RâE�
+
+••š(—™È6áeê&1ÍÃæ¤9eºÌ<Òí
+©gkÏD� ÷Àžî˜ÙÜ›ÞšFé±Õý—pÝCÒô0%ƒ¬44ÌÉ �]HiôU¤‚yWJ£W®²Àµ0Û¼
+h|~ø�/¦ƒ¹�À×ÐnÊu„ Uœ¼)ÔRx‹¬«Q£üÖÒÂ›sAï n
+"5rÂïn+ƒ"uÜ}q�%àOf[ÄO,zŒqF5K{hçDÀÛöƒ«°Á[Ç°ÍªÑh#2LÑdÃT#4¢žˆ4¢r�µˆUÄºFY—¨öQÕôŠ#â”(ÌŠ�ˆ½âVQØ"Nˆ“¢ :Øc"ï@1?ûï“ì³t1c/á _4FŒ)C F¯±Õ&ŒI±¢|…V‚Ó4ú¡á9®æ]¬;Æ¾×ùJ =ŸƒŽ‚Ê!�ÝÇ§l}÷¾æ¾fö¯B�"·Ûºe¸¥lK
+(ƒÊ3¥¿LÄœ2†$fÇP…Xj	‡(Œ+¥°Š "!;„zC0”¼§Ô„Ï³¤2?{›ÿnº˜>Éð`Û`˜Tšmñ øSñ×¢ó¼xYœ¥¨¡9˜®Ù!S˜ãW»L]ÿTu,�–ž0¦Ž°$w%ÇMInˆºÇ9ŒnÜÈ
+udy<»ç¥
+Í[ZQZÙK¼Z‰Ú¨Že9Ï
+Ó85T¶€%3“sÙ<“Í£ûwý|çW·«F½ÞWª5‹ãéŒsß<tîû¹ìR5R»¹eåzaì¦&å«?QL»Ð¸�ßï?çGÛü6Ø…öûw“½ÍûZÎ{ÏúÄ'”Ý�´[ÐÃèkh=k?�Ù'|'ýg›ÎvýÑ÷aÊ'—@Á�\È™zH��cð°ÿ÷)±„&€œ¥O•¯Ä åéð¬õ|¼—þÜJ<%j	�Í¨É^i÷v¿†^³O£ÓÞñ•¿—À$üº(\×áMø©÷fé-7…ÓéI¯‡‡À¾—R/¦=o¸ÓÚ†0«²UÝ«ÊA9A~„8«va1Y£ÅÛâˆÑGá]~ÊJfˆÂ*d5;ãò¹5SYÃ´"ZÂ0³�íZÖéphÎWÝHD‹Ñ¶t«Ö0ý¾
+#�äÑ{=I‡IèKw:»	èL;Z}•–x=n·ÐÞ�ü5n‡Û«Çp¶­-‘ˆ··¶&“5ÇâXQ\.g9Åì~B,Çˆ:¡3�–Û¥¶¯×‡F|pÜ}yô»Þ
+pGàZà
+0©Ø³nœ{>ÓUc«ºß‚Yjû¡
+XC.²VÔT
+hg2•¨bwHÅe!+-¼ŠŠPÎ¢XÑ?Hßü�uOKïÐfg$ªñT¡Ùé¾M%dwÀÐp×#¶Çjjè´V6t9r}¹º®G±½-8ìëðê¡L*?;uZÊØ’?©Ö÷g½rœï&ŽKl7ñ=ižº�>c©Çƒá°B‰†Bº&ÿ/¥[–�eìY~Í�Ü.7€Óûµ±°¿µ©¬y¦ž�LcáÜ"jZÙhÕGphL®ÐjSx«þ�m†O¡›3�ý}ÔìÇ1®IÃßÍ¬¹Ï
+š¸ÈìöÀLÙv(mNT)Qê.Ã«CgèÔ%©Ÿÿ
+�:ŒÛš$¨ÚæFô
+ôÕéGõ3z)4óðv“ åaôh¢\/fx™l7½M2¢zDØ@«J¨2Š‘ŽÝv”GïØVø^�ÇË[ÅË¯zy«xÇŒþÜ‚ù.²Õô4N,è^É1²bú:Lõ*‚q‚-¯™“Xž‘Z/;ï|Ü´!VÎ#ì×·oÔ¥ÒÔw{õ[ÛàSî™çcËõ�Â,¾Æ`­½÷î±u‘òPã®"¹nQT¼`ÀÐDÅ¯ú�d ÖAÜr;l·úð¸
+?iíÅ/Ã[ïã?ãOàuìóaèU\d5ZpéÁB˜Äq
+\ØIE¨Iºk­J7«Í¤#µ6µ
+ì»ñ^u'ÏâgÈ!ð29
+^'‡Sã©”x"uIùO¦n(×ð5u*õ¸­ü‹Ä€_RV[›`Ÿ²Áz\Ù£¾‡ß%ñEr_%~ÊÃÔ#Z…a6r¡>I4¢ÏVgfÓ¬¨bÌèc±B+ÄÂ´èÿ®T¨ª‚<¢!ñ„H6So Z�¦®‡�qƒiñ”á2ÆìLAÄ¾Â'ô@�rÁØR.Ò´–Ì9=$å>Ë±Uk†tn¸‹ŠŽt0s@l¬s²‘éH³^ðSTá‡èçØÀj–*í€Åƒ”Á8˜Á’œ"Î(ùÙÉSJF!¡Ï:P|÷A*`ŸËû§’t9‚E·¡°º0­ÅzÉL‚l¨‡ükÖÁøxŽX«Ã•±^«0A6FÃ…O»îî~:R‹¥õaa÷¦Ä’xìÎ_|{wôÞ�Ñ;ÏQ�›½:{�&²A¾m¯•¡|Bd¯m>ˆ ¼Á8j([^¶§ìGè2šEî2Ó”%æpMƒ9\S`u�†X]£²„™²’e“Nè;?½DZ…({^�Ry]0¨KD²%A¢tv2H‹#ÍÛ¶8ÍFOKRv³¥Žf;	õ$<œœJ¢dYˆ}E¹aN˜4
+p÷Ï#˜ÉÂ˜—ç5Ñd~j‹.ƒ•{h¸ŽÛºþ˜ùåŽb­oÜ8P,3�30ÃKì–²K	È1zNxdUNÂ�‘×‚/Ë[À&yx\Þ'¿�Â7á)ù}xÊÿD�%¯>0T‡hKœhö'ªäDÃ‰ÿò]ý±M\wü½w¶ÏŽíóÙŽÛgßÙ¾óùì‹ÏNüì@rãGXèQˆâ…ŠŠRA›àÊ�¡Ba
+´UWúc0þ(TSJ[h;ªu?TöCZZ&ÑJÓÔªÍ Úœ½wI¦M³ä÷¾>Û'ûûý¼ÏÌæ8B~zƒJ—I96»qÆv!XÆ•”“ºËSöø=eÄúð3XÆÑgrÌ^Æ·¹>³ýó|céî9Î'¤o<ª@•Â *|ÍUŠ÷£L&ÔÏÁAj!Aœ$X’î>ÃÉÝXHmÛ"mæåwiŠ™ƒÊWLß¸û³ÿgtq³×X6ý‰y›y#pœÕ[yFèS
+§XÓSp;=÷Ó¦EV§(Ÿb±T–B€b©(•£tÊLuFÈ|CÅhD� ˆ{k‹Ú�Ë&Ø�­3üÈ:c€ÕÚŠ©ìfõï¤À6±cÊ°†­�s%ìrHöÊŒÃ�d`#�+¿Wlƒ3ƒ/«/šLxùïf©{ðÆÊâfAŒ¬óJM¸Yn–xG�›MÊh
+ZáÞúŽúçõOë{ÿ<ñ�Oxññsÿ:ð½õ?Ö]ß_„à¢ßœí©_©ÿäÜ~˜†À¾Óû1%Æ6©Ffi†Û.
+ÿÕW*Å¬¶%0Ä
+…¿«j¯…éí�‹Òeåw#ü‘d	&YM‘Ë‰r²MÉi½ÉÇ’ƒÚnÍþ€¡p*ÜþSðgQà¯¤›>’>LN*ŸK–°.F+C¨4ŽŽ‰˜h}1D¢ÍéˆÒ!v‹Hi_Zñû}ÈJ[= Ä†r!=42‡:52‚öŽ"Ð ®½¥¡£ÚUíºFiÍÐHhH!4Æ]ŒqÚã"cè#ózF‡O�‹=¼î>5{Þª+áÃ S™Ï8c›Zcä!v
+›§lu
+{LÏŒ‚â¡†¥TS8�PäT“œ‡R/É`:œ˜³ÃÛ³töàhÀcúÛLq>Ú†G(HH‚=†ªÁ9Žêÿ`Xr4Zq/IdHú�°PÀ¼§áñ°¼¢pï§XŸ9¬ÏðË¿éÆ/[j¿ÙphÙ¾žüJ´³¾e·€õy¾0Dm"U×ØŽ“×™¥
+
+oì^}¨Ë‹'/âÜ°O^„ô1)@Ú•0š6‡žïÉ×ÄkªSúQ„&m½DÙ -!'–‚Õp
+H;áNô¤ðdtk|[â98=œ9
+O'.ÊW2Ó’ÏÝ_�ö%�H'àqtRÍLd&s·2Ó§øay<Ý–ŠVÉ­—Ë6¤­(†>�sÅâ ¡pç?'?�ÇD5'$)Ž`#BP:ƒ¢ˆN§NÐMäçÒ,½’^KS/ÑÇhDîL¸0ê®V%	#ÃàøbõÄˆ]]$›¾¸»b£1Ô�ÅÅÎ³%¨—K×KT©`5e5ú`5e�û}¢|ÆEŸ�(ßëÅ‡/¶|Îtpb«µ;ÕÍªJÐ”�ASvM³¢=5Åb8UkY•¸ó`ˆ�šsâÐSf­·:Ìšwý¢% xË´ð¢�ÈˆÙ<láñ¢Å›ó@”rÑÖ<*Æ4kS5Cê/�ößâ¿o�5–âÏ
+¢Æåíól9Çº05ÃFÆ2¯ª±4 öÿ H¿[gÁˆ±hÞPÿA½˜�:y6,// 4L#üÛäo¿ÿæiXûÜÀÝ…Þ°í�kG÷VÖ¡ÂúÖ¯C³ãÔ–]ãr}ç³«èU8òÌÓG½$×îžþÄdÆ¬==¤=¯5Ct!;\&¤Ìj7ìF6we.Ñ¯—æ—BgêôûCýœÅì43 }µb²9‡˜­®A~PÌæXŸµ;‡™}®auÄ4’g=Î¼³à,Fò‘B¤ˆ­Ê˜¢|TH¥2ùvØŽ:L¹`ŽÏ	¹ØÂÂÂâ2ç²t�}•ó!vUj• €¸¼PäJ=�ž`OhMk_¾¯ÐWì+õÎc(»=åµs)Ñ­´¥r•š§æ= ¦g˜É^UÞN¿§^­Ü®4~Ë:Ÿˆ…@Ÿ†^ãT—î,i	s‘�ãùËr¥<Ò˜Æs0�£:ÒŒI¶›E„÷°óVZ(Qi´¡3PçãÊãPÔÙ¬{Â�nºaÔ=ê¾é¦Üãhø¢p†WY|¢É„£œÐniÓ˜Rõ¥E]û¿ €Õr˜hMÚ¸”á˜�{µªnÆ2W»3u�¤ÐZ9«ÎhžÁ—Ä’ÎÆLf&_~qCz
+§RU!»×“–¤íUd{³-R.B¦^¼Ð9ü²!ãÈ»£YM²˜Z]L*�ð`zµf-óªA£Æ2£•ýûU’S×Ù×;e×©$§BÌí`30Ü¯Ãp•M9W9Ÿs¶d
+t‹ãÉ�<2¸–xÛ¸…ÝyÍÀ<)K²\,”ò­DvKó¨Ó	OõLß†ýjûg?¾ëÖ•¶‚ðn(¡‰Ðêó›vœWIÖ�¿²üãoÚ>¿)kÀJ¬ûÎÓ¶ç»v­üÕ�Ü´™;ø,üÝË×îëm]ßÌ¿;ôBÏË(…,A~;Öä·MþR¯ôÂ^Ôéå7Â�hcd#oÍÆ:bÝ±ÃæCÜˆù$G#áý$KÆm„=E: ±.kl]Õ½6¨½‰éð¸ðíV‚Q`ãHÑCV›Ás6ƒÒlÏÙâM~Aå	?2ä€gù~þoâ/#ø§¿Ðí„ýÿùñÝÏEÁ¡“ÅfõN•�	Ö^$7³»
+¸Áê_Ø3QÔ˜ÐíEüœ{ë¯†ÄÞ[€%“}Ÿ}Ÿ¤¬†^Q&3ïã!âñX¼¦7\²Ý+<Ú3��`öÞÛÄ¾Ù¯¾IË¬yyý�©2ï«;sÐä`¼›ú`;éª}úcóYÜU
+î½rØî¦³…±½QÉØõ¸ X*–å–í.SBL$[ÅÖäbqqòD’N%ËI´òßŒWlç¾ï|?}Ž}¾³/¶Ï‰ïÎñùÇ¾3ÄàŸ¬”Ð6¬HÄ°tH#Uh»cP@Û(¥šT¶þPaÚÔý4hêøÕ4…ICšØ*�IlR%´?¦01ŠTUÊ4V�BÂÞïB¦iÒÎò÷~÷Þùäû¾÷yŸçqv	û"Çó¿ÎÿËd–‡�¢HÝÈdÔ¤ntgT¤gåŒšÐ³`	�§ÈœÕÆwƒ7øû¼j0¹å‚W°€‚Èóœr9ä%çp$¶Â‹Æb˜{|bð�qvÂ'¤”ÿOWÕ«¢ƒF�w�3Î”C9ÍßLÍßLÍßLÍ�¤2Ú.#Ùç.9Œ¯É�øšœ´ï<òØgø›ôH!ßy‡|aä'1®}êjÊþõ{Ï.åº¦n£†žÕI&’ËçºÂZ‰£f¨PBBPs%ÂrXÍ"¨ðãnŒQÀ"±CÍ+ÿãóŽ	\³ÐÄ|üÍ1Pà�hjñ@1¾þó«¹åh«Ÿ\L®íÝÐ•ìX÷úÈ¡?=	ŒCçs¹•™3¾zãçÇ¿×ü')�=•ËU»vÎœ}úêÎµ»>¸Næh=P¸�÷1ºHéB0ÂdÈ³$¹rÃàuŠm“�¿~Î�
+!a×%·.Î\»vÙGG(êHáw\A¾šHøjâüâj¯{l?zß×²½ÿ�îe¦õÀÅö�—Rgô»,=žüEêWôó6ö3ÎžŽŸRèŸ°G#G¥ãÊQ�ÞßÚ¾‹Ú<¨Ó›”�íú0³�¥7³MnsðÙp3N{ú±!°‘~†¡5½—ªÅ¿J<¦sL�µ8+n)4HLÝÑ·è×tú,ƒ_ÊKa]*)¥[	(l~E5<Îr™0‰ñ7$Î\¹rTîtm×U½A#•ˆÄE5æàæL{§š™|pØ‹*,£q,j(j€f\ÀU¥ÎÚ3�YÉ2ü½vÔþ©£xÊQeZ¡”ÛNÜ‹ÄÏÄ§ã´ß�ŒSñIò³	M[áµnCÉ;C7‡ˆÄœÓ]~˜nqÄ„?)‹`YôßcÚÆŽ¡G‡¯h@QïÄ-Ÿ&$7âI.…Ý«èrœì‚l¼>!»AKÆÙëg#îC·Õ„âË“E¸	å¡Ìµˆ _¥ß_“«fó¹Y*/&ŸXAv?[+£&òì¾Õtˆ^—kÓ+Ã÷öS?ÚËdé\Ž/w-zþþßÑ]¥ŽªMw"õÁ
+v*Ð
+t¶jo‚Gµ‚‹BõyÉ%ódšwTJ�H�#l(Ãv·îâ|)&y¦�
+qAž
+Æe¥pBvCðUq!r|/Äƒ8¦!z·a²„¯Úkù&5ÈŸâ“)r=‚²d+UP»­|e	ã¦z�Ç™Ul¿°FÝÀ²ƒ\38L
+:*Û˜­ì‹ÂHjD}añnj7³›ÝÜ#ìíKíQÇÒ{´ïØ‡¨r¯¥_µ_uŽT~ÌÞ�ßHK½£¾i½e¿é¼Ç�æO§Sï©ãéÓ§ìóìyîÃàdê‚ó;ç.wW¸ßqW[;b;#•#<US_ìÜžùv‰f‡¹>ÐÏ¯Ë¬±úmª©n´×;�v€Û$(–‚ÌJ+vwº�©°®ÀÏU}!-ëS>M	ÑÖÊªÇ
+HàÜ¼„Ëê~¹_ø¸ô}Á‚K¿‡O§9ž¦Awuvr@�S1U¶ì‚jI!xJ¾ÓTón¥¦º“FÏ«BP›|°Ý‹9«…ÁPán5•NwòÁ FG\MC"mwpœáØ1Ç±+Ëâ+i§§YÊ[˜K‚‚AŽcùe?cNT`ÏÎyÕ
+n1}~ðÌ’ÓëTVŽVOW¾QÙRõO¦*Ó®r›û”ÿš ~�.’‘B_z‚]B§ú–M’ÏŸoí‹¡Ïo&Å›	qæŽoRŠ3·æ}‰ZÈ;k!ïÑ„[€Åÿ
+Æ…#+†—sðaÅå£ñ	ýš?Vm 1ËRÚê�xÐ2	I¨û7`SÒDqcŽsˆlÑƒI9Ÿ7[ŸÉ9œf«ìXõ+�±âì+ÖìïgÿÐ5û­R(¶zú"Q­õ á†¥�‹““I¹@Š]µÞ¢ÙÓ¡˜�‚ÍÞìî]
+|óþO©çö·›¹\Î1²ûgXòðÎÍ‹L¹MâH˜É�Ÿ½ì´[\ØGu„ è_ªë�ž9F‰RlBL_`ú–Z9nÑŒêD™2“5Ò$“Ãu8p	ú4#ÞŸ¸¸7ŠÚ’¼Ù‡ößÕi	Zð”Ž¸¶sÅ†Wô�.Œ×3ÙÞÝÄžèKÆhñ¥ÒqãXö$:)ŽëãÆxödiÜ¾”½”»d^¬MÔ?¯¨W´�ÝË�O¤O´»Ât#-Ù¢&ZWÑ*Ûöc¢#9Ú2}IÞ)>N´IDCk8�k
+ê·%´«ô²}¨xÄ¦V›¡¦à³É¬²¢ÞèO­Ì3R¬ŒºÊÃú	ýD™šC A¥^!j–É(¡—)5‡—BM1)/…jÖLC‚s/ÂCê/k6*éš-QÑ�ê*IuFdU&¥ÁSò%@XïS]Q*�”jÒ4ðSí¥j­dˆ¢�J1„JÐ9%¶šÓ4»¬G	Ê�áÖjP@d*™dš©£z‘@`15ä ¯£-h�A—ÑšFA4I~éEViÏh[µ€¶ˆ0Þ5Hc’üÍ„×xû!°î�
+{'<ú�¥e„|$…ç õÁgá�0D�Š>+ÀÀPB;VNØ¨`Ø+àu°ÂÞ¦o-n··4°÷,>Ê"Ïå·ÕÈî,+¶¹$�¡'‡ÜlBpËðÍ®Q\ÓQpþò„â–‚™qêœâÆ LnB”ðÅiO�Ü'¹†&¹5xÈ¹ˆ›o	˜‚Ö
+ÅVXñŸô:þè¿ù2ÉR{ õò„9w>·¡L,Ë­»Zl	«þÍuõÆ¶Qžñ÷½³ïlß99ÿ;_“³}çÜ$gû’ØNrŽ[_IJšþÍh“¶€‹¢V›Ö»¢Zwm©Ú
+Èch¦ŽM ­¥¤¥6ÍÛ*:¶EêP?ðaÝ”!ó¤!A’=ï%ìÃ>øÞ?~Þ»{ïýý~ÏïÁñC�Þ¿p%/‡ZÝl÷‡‹s)ßæÅXF[;µ[‹w÷¿¸‡:06Ø}ãÓ®ßœÞ€ÿf¶÷ÝõŸÅ­3“�£1çÖá°o?¸ø|~uHé¢5Í)´ìz?��ŸÞ#:-k#‹ïâž¾ŽPHù0L5‡·~!
+�.5èôYÔ‹ÖÐ£ËÌ·”¢EŒvÑ"¶<ÔÊ¦5ÇQãšmÍ5Äg–¿¦ŸÏˆ$ÆµË„ñÿ!bÕ3vlÆdí–M¥	Û7,IgPÔÑ™ìÎò–nÊ[‘¹úà/þÒÒM+J‚xÞñ¤„%{V²#$A‹²…¤�bT¼ä7
+r³ÆaÝM}0°§^¿¥ë×„›³=ÝºÞj=ÂÉ'3”{ö+1³Vü¹û¢‡öëþ'Ð™§Ð)îTŽ‰øÅ¼P¬ny³s3³^Yß¶9oOD\ž&VAm£x“g”ÍmêÊ�®ÙÉíãŽ¹�zŽrÍ;Ä#"+N©²+ƒ²…tg*{/�x€£Ûä;8“'{oÉçÈjImežVìæ ïàÍêäÌmÒ¤ôˆDÒ“%}/&`²ãî‚U `ÛS©ZŠJåà»]¢ïµ|.]OáTYC/Ïg³ðá¿„`Æ3Wñ>ÔŽ4òÄ&i1­¦MkK›×¨š†5�iW©!Ä¢$è˜º„÷YÑVÃìa­&SaÇØK,žgñ8í¡µCß¶‹­R¥ZÕ·4î4t(­` ô•´+|V‚JëÎÂ\IhTŠ�*ˆ‰î3IŒ®Ë’zžæ1Ð¥gEŽ«§Š°‘Ü wúú(Æíò¸(FmSÚ(&Ç™
+òE2òšc^·Å�¦Œ\Yç²œ_dÜÔ—<S�	!I…‡õ•Z­«ŠµÃ¸Š+P¬UªˆèNÑo3VGÄYÏôÀNÓD$»¹Ødö+M„ÿ�çIsÛâ@7ÎÃO&hoáÀssfi=Ðz uCë6Ñÿ	ÄnØ§ä†²0—%IÝ.
+ÃÁå¹¾LoX‹P$Šb¦·¿¯?d—�>" ™^jäéö¾5“ß�vþñ_;·µe$4ãÜéÇ¶Ê~O¸YàC…©½=yü£ä¶á‰�ÍG÷ûV}ÿ›C=Ãß™h?±·­-™O÷fSÓ�±{ôc‹ï²ÞÂÀÃÏáRaU²ln˜æ/}±4G_v>ƒDÔŽß[fþ›Q'a°@¸ìòHòöJàgÑy32ewÏyï%ñ</…‘ƒrˆSð-7„C¨Ussên(G‹ÀÛâ-½aç›§·ôºð�ÃJÞMÀ-h¸¬#kÈÚ¨Ó™Ð�2ÂŒKA/y�ÏgÈ:ÿ~›Lñ|BóÙ‚Ä¯“ÞìÊófÉãˆ#9$$ðæ"s�ý8æp&†¼¥>%ñ(}Ðñ}Üñý†‹aqÞ\í]ˆ‡¥0�­"Tü¿7é‰9§�TÙY£D;?áE„¤vž¼cÞ)ï´×QƒË9/�¼‚WñvC·î½áe½Àþ·9oYûí&›H„<…-Â!ÎB©Ú°ß´Zô…Í»�/ñ]›«šc
+Up‹G’Ñ*‰ãeŒbUÁ«¸VE˜VðàÜë‡àã%\…j`µ.»Œ­l‚`pµ–ñùèúV0‰�ýøé÷~rê�±ŸN4+’ÜÕ„©Ì~ó�—_~8—ë >»üéŸïü°–ÏÓ^ÚÐ"Ä§:þÒ›ùý¯Ïýª5®ñ^ÀÐFÈ*¾{ÞåÀ_åª…á	&ž`„±s#jÍn¶¬N©”
+ŸäÁ“ÅŸ	©qèüá"É(‘$ä[/¯5l Ì^#ñÇ‰ŒèJeQœœ^Ø»ÓIÉ�ŽíÎíÌvWë.™Ýç<è¬¡š:Vñ†rýÃéîÇ#xB—'ãe©,”ªòIÿ3�iß´ô>C��¿…ƒ¯³×WýÓ5'¬ÜÁCmôïôŸŠ�Rjñù8ëSð/—n#~1AD€»eµ¦RHTESÉ¾¦ÕWÔsj]½¡ÞVçU¯º7òA3n¾.jn6B<EÐ$�5à7a“œú§�·ñÏòo¨Y¨Œ¦Ð4:‡êè6r“	
+½~ åH5Ö‚O·à–K˜·üóFŒÀ(L7c1Nf¨mè2õd«ZÙÒ(U+•Ò\Å†•®�Š-ÝsþŠy¶GöDDèç" Ç•ÝÀ���<€+%Tµ+›$Hf+èÞÅ€é“ZN ÊXSX<¬Ä*`vâmT.‹l¬AŸx›eµ.k½Q{ÿÈKa<sü=ÉÁ¨�‹Ç×>¼æk¯žxhk?xáw˜ùà}Üôì–„‘ŒE7>ôê™/†Ò‡`÷ÃKs'(T¥¨M+ØJAV'#Ù r-ÌR"¢-X"§Yò<)<šbGÃìç–
+IE"+ù
+ýw!‰F‘˜ß.r–»‰‘—LÒ¶ã ÊeÀ¯8Œ[à/ê68Ác|%_÷ùaR8š&Kå©¶"å‰qpN´5LtÁ‚7’Vq47Ã•"ÿ‹ßiÇØ›cÆÆHÛª6«/‹›^ŸÿI^¦Tš-6@Ù@à€—‘±Tkd$kŠÜ£§³eãqÇãÎ“ŽšqÖ¨¬eÔ
+bWHwŽ»vè/°ì+F¿gÄ3áyÑñ³®W¶nÌë”¢ E½hç ®/(Û”¯+{=ßRSN£ÓÊëìeö�..á
+¬æ×ù£�áPdµ¸NŽF†c°Œs$CöW‹%q2£¹âT^!Ã*‹5ñ¬HÇÄi‘?éü/ÕÕÛÄuÇß»gß�ç|>Ûç8vüƒäŒ“‹§±C¾á¨Cš@²’ày‰©ë´)±Uº®RE6Êº´•1µ]ÐFØÖv[ûGÓŠ©DI7úÖ¬Ñ61ÊD¡ê¤u™Ø†P%ºï{e=ûîûÞ»÷îÞ{÷ý~>Ÿo?s=mJP{j[’Ï4e–ñTÆj1ß¹ÚIÈIW(<Ê‘|&«#ºI\¯EÄúÒMp‰
+Z7˜0â2$æÛ©‡ƒp±�~v.±Dœ¼‡Œe:ö˜k“Ž&îKæÞËLdŸ¿öùï¿ßY­WbGÌV}±Š;7šøÎ}ÍC[ssßÉ=Ô½éö;ïàm½¿ý9ÊÛW~±Íï¨-œÇ—ºÆS}ßzÿÂ_Á£w^�9äB5ä‰5�ŽŠ*ð�Í.ˆ$f$˜’;n hà’áÅ°’‡Ã%TáÓd�èm:Z`è
+ýÈƒ.²P¸pŠFƒ©¥¢‚UÐàAÔ« cn
+tÜ¼´x�ŒkÜè8À	1t"åI”ß(Ò—uÔ…e!$Ì		£ �&áˆé—¦y¡¯`i4#Ô�]®`ÖI‹°Zp{ºZ0’J›$)ø*…ëKË”Åóçòyý>6W˜)uwÃ«ŒTå½£hÔu‘˜½!?È4J5ü© �•5“MˆAJAæbÑkhhJøx¯eÈùMuÄ³§*W-`bá‹h3»ïç'¹gù§lOË‡k~Å½ZuÒùî#ûeù&÷_âTF…QqV7iy[xß~C¦*Ÿäˆ…Æ	q’m³tsÛ,}ÁAnÐ²—+r“ÎIïŒóEË‹Ö’xÒ2g}�û;wÍvÓê—Œ„e�+PK÷n6mNà…'L.WÝtªN%¥Œ¸ºgÝWÝ&·Û÷g†/¸b¢ÕIÍ%c»’¢{ü
+¦_Dø@T£¾”]ÅcêAuJ%êM—kBÄqqZäââ”xU$²hˆ°qN¼&òâ+’Û„&©_‘FC‰K†Ô/$ÉRH"7$,Ñ™X`/¥L ³¦\ è]-PÙRÈƒY�/S¢)R—Ò‹øD µÇÜ µ!=èæêŠÁyÔÞŽ
+yœZàæ¸Â0KèÁùi$ÀÛ*jS6#–ª„S¤ŒM	eC1bÞW®ùÊ÷ÖjÖrÍZ®YXÍ�,)·ìMyCŽT%œ
+¾¢Ò‡‡‡�¼‡ê 
+ž5S(ƒia`/€þ2Þ¿ÿ©=‡cA÷…Ÿ¾ôÙ¿ß8úîêSø7fÙ»¯mà·ñƒGÙ÷˜kòŒ?úx¥c¨®Ýøè¡>„Èãæg‘Î‰kÑ­Å_ÅJ;1ƒ¶OÇ²ÄcQªÇ"­cöú†BTRXè3’’xJOà$«X§<Ùëí%ì›Wx5§WåÅôÒŠ¼R&¥E*§ÏÉïÒß9šøÞ¥¥ÓÈÎÆ jÔÔóuð$±³@Ä<�@Ìt5›Æ%£‚E#k‡úe¦¯%)Öx—‚®Ð¼~i‰êVŽ›Ÿ	Í¸g"¤‹tÙ¶{“Ã6óQnŽOóÓÂ¬8k9&sÌÅ,285Ò0¢s~QZˆGÖá…€P"¢¬
+ÌÎ¸€£Nó`½_Ær¼¡^qð¢`•ÁÁKx×‰)HxKÜ­yÜ —°lTFë±bwÈGìv\G�õÄèh‚ÙŽŽ²M§Ë¶®…YCõ‡Ó¦.>"�K‹Ò²ÄKÞÆ7	O„²‚Ê—�²w\—e¶�`>Í_/¥�ŒV‹�éUÈla#ÿ(Úz—ÑÜM�úÑzW�¯±¥'ˆ$‡<­ÕN‚»µ%µÉVHYÈSY0Aæçnuã—ýÚæ�Õ+õÑ-Þùù¡“…‡‡:Ok6Œ4þ’«/O¬k¬«‹víåölïœ|ë@W¬=�×élyèâ–íà~hÓ�nò7ÐäÑýh˜¼`üPQû_ˆÌ´“sÜ£
+�p¨�oâw=2¥7ôåÆ6ˆŒç¦LSæCž'«¦’Oo>´uªçG}Ïyž«šé+™N›<Uçç{sË¹k¹9_uÈÝ*']mÁœù×b¶-íC*ig}È›Q²]ª´UX-§Óe'4¬h¥/>^P€‡4ú9\¶4µF…R‘žÕ^ÓÎjD+ác'‡ô	H¶ «QIû*³á×ÂgÃ$¼6†Y†¾FÕtg
+hÍÐ”m¤¡“íwaW	‹†sLÄE(8à1b’ŸÉàL‰´6oÖÚìÅýÞ	/ç=Ãý	ñ\½¨nYyÁ»ïll´÷¾EâÀw¸¦P/‰A9ŽÇâSñÙ8‰WQ~�ÛhHÄ“©&21ˆéÚ*!Z¡paAv±ÂÇ´nÖJ¤A-ÅQæƒžêÄT÷EÇ£‹Ñå¨)*Ñžpëæ
+y(üËP(`D„rñœ‘;{nÎÑ¡þ
+["'M=ß�»e:¨»%¤b»:®~`_úâ?†ƒŽSmT¨lŽj‰;c8gÒ8Ý'ý„ë'™p„n¥·&Á,<•Ð×S™L§èÉÃ{roâÇ ¯³¾>Y¥ë·hX–¯WYaE/^—õÂ-VÑ‹ýõ‚|´$´òÊ)¬~J)"-¯iÖ›CûCg`‰…ÃWÃðDñæ
+ˆ2�¶hW5h)ÒÀs€¸Ä¡'¦þ,âïÙÝ±µ.é¯ñTasD»¯¥µ%ÑBø¯Eú"MZCäAmÐ�ý~Ô“ì
+¡-8B›Ìi?ê�õúÑ.}0„»ªºýøëëwûñƒ»k:|ÐÝ·íhÉ†pO6Ùfp™àøfS§?Ð¼Ó�êw†ÐVOÆ�ƒÈ�:�ÞÝ‹ö/�|zàbž’]�Q›am’ÁG“²’j‡x]aùÓ0Ž€¥(¼C‘@ª]Ë¡xª<=ìÇîÐ´*™€dªm…×AF_ÉÄúæÿ¿õäàž¥ã‡F§K„7»þ½ös/umk†ãþñ?nÊ�}ûg·ß>ÜSáH
+#	=…ÝÙý]‰þ{·¶Þù¼9Þ±ÿÌÂ«­‰£Ÿàê2üãs†™·xª­f~ûøÄ®HÊå	&b¶TŽïú×UÛ¶u…y)‰²(J$EÛ"%K$-Z²ÅŠrë‡‰RÓŽ“¶é’xM'Ûœ¸
+¶û‹m`Ã�n«»—¼‰Ú¡Ð³�E±§4uÛ0£0‚=Ì]ö°lÖ!è†lYb,ØÒ<‰²s.¥6¨aÞ{t®Hê’ßw¾ï,œ|mf¤ªª‘“ú6=wœ=óíÓ?›™X<½ü…‰¯l?:0l=ùòÓ£½½A}&ÅéÐÍUÙsmmÌÔ=$®ÄË<B^µð³šÂ*4k”Üðh‡§Æ¤jÕRÇDÞ­JÄ
+;mÒk˜%¯QZ{ôñ*f!¸¿Š¥Ç ¸ã‰T”éõJº°q¤6Çƒp˜Q^±âEàÜJ•)È™'‚a€u¹Œ½ ¨î�;Êv?HM«´quDÚ°ýÌ&4ˆ�õ†GGHÉ
+áŽ…Q¸(^R.ðT~y*¹<•e^¥)•¦TšRÕz�˜4mÒ´IÓ&ìæ.­6üw xp×J¥z­­ÚT´Ûñ&š.Ø´‘›2å€8í•ë^±Â×çÀ7‹b~©Þ¬/Ô×ë×ê›#Sõ¹ú<¦¼:1ºÔ¡¬¼=¹¿4”-ìëç‡²Ò¾œ9”Í¯âž“«œñÑle’…*Cw	¶J–%^S­H“'x"òóü2ÿ{>Èc‘(1¦åè¥©Ò\i¾\*5Kì…Å*­—®•‚¥¹Ú›ÐJ÷ÑP¢³|èÏ ËÈDØKCv]ÚâÃ§¥¢;ÕêâÒù¾�ÖGÂ]©påHKza‘™%P¼l”hÔc¤!juo[«k Ö´9äÂ´5„ìH­ÚIBÇHöŸúÁø�ù´ç‡½Ö“=ÞÐ'‡·}u_�»·µcW®[õTO9N¡³_8½çÈ—¼_´~5c¨}–UÈKÈä��—G¶úŽ;ºe)|ýH`—ß=2`Ë0„�/Q¦Ÿ}ÆgÌÆ!È œ1
+÷˜©"’M‘m*j 
+Bk97(ð#Øâ2ï_ÂoGbj§âCðáj›n7:t»þ.e›±H4O™/ƒ÷ŸÏq„£Nùe¼×Ï)à¯CQßœ•>ð[I™?% fÚˆ±bå€IG¼Îê³Ï¶ƒñq?ð´Z�›ö8Âp+‹7eÃì+¸½û^ž‰X¹åCŒEØÇ(pg>T$>åd.û²r�qÀï1á·°9¶9Kû‘6´¦Eæ¬y«i­Xw­�aMY¬‡ƒ…‚922Jçú.
+ûsn€Îž£¥F� Ê¾þØP6´(hãFÖœ4AiÂV\†éÂJ‚oFHÄE
+¾¸»‚“'ŽU_„˜³TÏvUÌ¥ª;F›*™RÉœ:¯6Õõ®R/æ.þœÒör¤wË·© ¼°5©Mº%ø¨Ï’EÀúHÛv‚Ž(ŸàšÂºÐÁõPqçÎb±±óûÚ¶ñÖîÝN:Î¦úã¤;tÅâÎ–ùÐ8â�S�iòüëOšhÍ3ì£“­½ä\è vˆl´ë|tP¡M�¢ãû»·ŠšmxÞèÀóÏžâãÓÇ6�é˜¾ö¨EO�à=‚¿ÒSt<%‚§è7T@¼
+ƒ�û4Ô›~_bÊ[›e¬Ö×7Û°´í0í«Ð»\úiŠp±ñI�Õ*1û"”?Ïž²›ö[ñ·2+6gÀ‡%; AæšHu
+ŒñBvpRÃ-qÓJ*RÔÒÆ�î]#q/&1Œ†;‹Ë
+QÖÈ‹^£è¿fï©JÀ±“É¼_µAŠÚ.ŠZK×›
+2g¬w�€aàWŒµGAÇ_0.í?˜øÎí÷¨kì—ÐŠ5H{¾<ysÿ=xû`¶@ŸÆÆ|ž]à6Ó«o[‹Ç$(�®L­TÂvŠ
+Z$¥¾l\Ìô‰zÉÆÓèrH§™€æ3€iGØ¾ônÿníFÃx,ývå‹G·™©´ü¼©:½Ÿ¢ç].Ú�–ñà+·ÿ1‘Ë�ÄÂ33¯²?ü‰mRFf˜ u¯øM?vŠÊ¿FGC@Èt$t„" Gðÿ¢ÁÀ³}“P-8:iÛƒ -”5Õ§Áåt|‚Óñ	VR¼-O¢)‰Èz0Ï'SƒôFhÙ	n!ÏT{‰*uÕ“×úÓ€ä¥ˆ£ð|ø6ÏÁ²·ì¶‰xh¯¯¯£Õ}ÌFØëW¡j>�ºŒO]¬IWDWwÙ'øÿQäu¾m
+çÅ7äó‰7ôe÷žw57uB:!ŸÐ¿.�’OéçÙÈíì–Î.E^‰_
+\o±·Ä-ù?‰®1yLÓëÆ˜»W\ä¿%v•Ù¢dù²['u)Ü#M“ç¤ÃF0'Í�ñ¦ô‘zF~Z/òÿw>”ŒôJzF×÷°"•E%–2b6®s‡ÓÁC¡cÒaù°Âib&“Õ±ÁvÙ/WUŠi"øBžÑw"¼Üà9­ pë¶»¨»�‡~“Öq4Í´ŽCð1­ãŽãÖ?õ5ÔÖ ŸÙ¢–&I-MÚ›–DÂÊ	E‘4=•Õ°*…~ž�dyt*…\µP¯d«“L™‰BÝ±½Û ¬¡ƒ7&l7!,1CWH°ÀŠ¼$©|�a’käŽ÷9Uø]4Ês€|MSùè°°$°wrM¸!°óÂºÀ
+ådrY%jJw‰Ö†±ÊeÆ‘œÎºsÍ	M9dÉi:¬3Ww×ÈwÞ1ßü&¥öÂâ,Üåiñ>†÷fÁñ|bs¸4ÖÐpËØp¤FãLÜQíø÷¤�3]í€�/¨m�¶ˆ´î�gpm#>Ïgqqaa–™]$³ô�Y` Y¹ÂH@›nèWôAè¼àÈx¼AÑeQ§¢n'Ùý)âOLoCuA°v {Œ@é�±g©Œæ³‡ãÂa…ö4¨8UlVêOÒ÷UµÇ�ÕÁ[û„.3OÎ>÷�ñÛ·_è¶´'[»óéÁÖ?5gËÙ›ë‰Šq#ÕS”‰:û`þ�“	AèÎ°†Á:;ÿÒúÓKf9Î[éQ’ÛÉ‹­kÇê*±,9š4?˜X~*-ç°Òì‡%B¥é!¯vüUìõWÝGÂ„ÖBk¡5ƒh³±l@ðoÚa% ÑÂ‚ÁßÞÅs„Ð¯¡8tÁf(Q¥›Vˆîÿ³]u±m[W˜—¤%š¢%Ê’II¶$êÏ2CÕ–dÓª#o¦šÄN"©ñÚÈ±R¸ó€Ùšs2$iÓ45ŠµC»¢0ö²‡MöìiˆS¤�[¬›ÑmÁ
+¬h€í¥{èS�µ]ÒC�µ[bïœCÉI°	âåáý9ºÔýÎw¾3He,$X·b°°fP¯ßS5äC¤’ÂaÊ5°Œã¼Œ„£`a”DpS®èQ\ò"Ã=Š¢k÷	ÿˆWçüjMßÔ¿ÐÕËÌìÞ�ÝSÕ	¦¿Þwlr^gŽ>¯/ë+úš~	&z3á=˜ffÂ“Ï„ó}µP"¼¶äõÈËö)7
+É»:±¦°y…-++ÊšrIùBéQ^×î‘-®|Ÿ™¾+T–ØI†lG:å~mÒEÆ3Ñ‰¹­™™Ñ˜?‰�Y°çÕÿÔŒ“œŸÍ¹ê™²ˆ§(\áŽîd½MÕfÛÁ³Òƒt´ÁV£Øåû"(ö8<ã¢E³¬Re¶;k¶;{œÎš­ÍÕh^�€R# ÔaüµFw]£›_]`üÛ‰âÜ†Œn-·h¹U�t|ØQQq<ÿÅñáºÊ:†çÏœ$N­ð4Î£�J�|ÉGÐÀH>Œ"%Ê�íw]Æ.ôÏu|8Õà;ã·£àÇÐ¢cå}ûQPs‡[Îk±C­ï·žk	­Ï\)’+ø¼Ó…/jŽ[c˜Ñ––@XÝÙÄO7¡í(®ûÌÔ¡¼[t¿NU‚µƒüipÞ}ÞïáÖ‚7Ršâƒ†HiÄò Ì-ê³*5zªÑS­ïñ�ß0áúŠBƒœÆ?i´RYl`ŽÇÎF7‚ÀøŠF�öb'p‚;­
+;§^�£w~fIÐ»ÞW?¼ø[nvûn\cp·?y#‰F"‘ÝO{ÐšðÞhÿCVâíe�›V[k3C2ÌDdƒ¿}-]1%0_ºa&æ¦ƒfBßü×2–™(n}×2531†óÍL+ß¬N´öJf¥éL™#çÍÍ-ÁƒÉÙçõˆ=Þ¹ÙR1¢ËmPŸj0›*lÅX7xcƒÙN bŽZÙ‹¶RY¯ðìÓšGjÙF#Ùœoò«Íµ&Ï5Õ&ß„¸~3¬M4—ÛüQÈYÏE6Ø±H’v)Ô!`ÜùØ½M?ŒÚ‚?3ômR#É.×‰}‹j/�£átV	ôå2ÃY%5Äü�´?7” N[®(å–,š´Í _€Õt·Õ‚aÝ¥‹ñn.Éc@ÊÑïòÈN·×ãýÿ•Ï8›?ÖÿÀwÇÎµ~àdJë“'¿±5ª¦tYÌ/Ø'<?°{v«Ô˜òõ¤
+‡&íGˆ–ê[Õ™rŒtn>ÀÂóX`x×±o?U¯·vŸß:³`hÉlVW3ÁyöòÊ¨cï÷Y[õÇG¡²Ò#ÐWrâ…ÊÖÀÑÉÁlv°Úb�ÿ´ÐÕÃ
+Ç	ÿ&çw˜Ì&&+’.Që—Z)aŸ2ñ¬)%IÄñ�¤eq™ÃMÁ8×ºôÆGÄJ`|îãt�‹Óâ89Š“‹¸A&	g³+�MW¢‘á’œ‰Ü&ã
+“â³E$’ÞUf¥rßo !ªp¥áÊáH6�-{cž¸dlrâÍ›*d€ÈýÒøþP‘@°AÖØ¡�ÇÇ4Œbük<­Ù´�’ë?�•({JÄ±†¤ñØ¥Q—&a—¦Ù\œfÆ©#NƒqzQì5»ta"™àÓ´'îŠRW•îäÜ1x-T¦S¤LQÎï¶�]¶dcüíy{Ù^±×ìžDæ�½
+Oë¶gÝ¾aóë6[†ŽM[ˆKš™l'˜6ÍDö`Z2þƒ™¸™ÈA8£™R~W­˜(íâ2åqzãl&øe]Ëz×$¶.±€´"]”>�DiƒÇ4ÇãÙ]IsÞ\6WLqÕ\3×M�3U“71�÷BÀ›Ëê�¶)Ê!Æï¸÷®*Å€žšÚ	e
+äþHTðˆ¹¨ ±O¤'Ö
+cˆâ¥“ðå–hŒäÿ	àŽ„ˆ¼·ó®gõŸÿ¤þ¤¡ù}¥‡¶ª!g\kÍ³g|~Äðl)�ìÆá­wëÓç·ž>’Œe³ùáÀ!vöÙ“ÏoÅ—´8DÚÜ1vøòþÆ¤ý±ðÄY€‹óJ'Ò†@’¢SHÎ¹5�êóA1vp
+'„�"MõœäSsœ›	¿ïpAwuqÚ‹ã8/†‹S11Lˆ+*)8•ä›H:MQL(J2�À¢T„à‚\D?Ž�}ý«ìÚ›ÚØ{½¿�Øëéÿ›Ìö÷îÓŽ¼À^é})ðá 7é”m1¹`w1É®¼ã�$; uwÓ/â¡[ ÿEvÛyqY\×ÄuÑ#ÞTt”‹PâìIì©G¬‡Õ/OYÍ[K¨éêë#�Ö×ç¿uôª’8p5)xäèâ;œ²½É‰p%·71îYü5ÊœÈ……ò§ê§ƒ÷<Bvhw^@4Éâý9ÿ0Ÿ–sžá` lpq3˜ÖVÄV¨O5Ø Í€O7¸h4n²ó�´ÁPoêØžE'xš?í9'ŸóŸëJ;9=$-µ¡‚âÇéRƒSƒp
+ÀŸ~Õ7…žÚÑ2à3ìñdÒùa{brRO{<á~Ä$dž»qáÄ™žûàÜñgÿô¨}â¡‹ÏçÂ÷æ„+¯ýèÊ3·W/ÿø—¾>[›yíü·>ºô»/_Y†¢cûë­ƒÂÛ€µ<7Å§;X3«²jYÞ…7ÙƒP’#¡(gfˆ88dh$Î€\¯uõñ®� ê#a'ŒXý¢ß{¸UÇ’äÇhÎ?ÙöxóÄÂ±0Ç�À° ÜnáRJs‰vsS½Ä:FˆíRë[\yûöÄ²Œ˜Œ )ËÕÝ°;Âmˆ82d¸9Àƒ›úÜ$±fÀ¬�?Ï±¨6ãÃÝàð¤gT—™Ë˜@ž7\ò|ßBT_�«ˆÖ)õ€ú˜úRP|±Àª…™j½ðXá‰à…HOŸ.üPºìýTúº·¯X]oO<9!:U6&	#fdUôÅtÄU>ÃåS‡ò	n/ßo�â¨:Ép'¼÷�øË¥¤¼&óËòª|Eä¿|hƒw
+c>µ’âWSŒK©©õÔfêFª'µ¼ûÝz§˜™V‰OÝÂ‚æ¼Ö© >¥vQð«¨ÑÆ˜ý_¾Ë>Æm³ŽãþÙqÞ;vœ³�Äv./Nâ¼Ü%}s;�¾­íºë4´öFÓ»µe¬ì^
+ÚªQîì�·;Q´î¸iWš¦!è8mô
+êzu·T†@‚í�ªj¡ac*ZuWžçI®eB"’ý<òËó<±¿þþ>_OÈ›]•æz²«=5ª!´«ûÖÐ¨uSºÈ(GÇÔhI�ÉÖ%L:X‡¢Cs`ê±µ·Û6L„@«; CƒšÛ2Ùÿ�=£O�¼´mM¾Öeo_6”µ¦(ñiMÎÂ*_ø÷¸ýž=Îîžj†±ÇÞ>üÀÁ¯_hÍŒK\yùÊÞº–ÍB,Ð{€Ù7Ð#‡Ç—_N¯ß}÷ƒ§~?z·, -S—·¹(¤å$eÁ…Ž–Õ±ÊœÃ�ä�DÂÆ™$‚!"L8$L8}—x)êüûU,é0‹ìEŠå=I7§	é¬ì.O¸­$DÞ­,ZD±mÑ,Ä‹ØBãE¬ÃxkPåTí>ž�2AnC6w–i§<QþQþxÙÕ£ö¤úŠë¬~ÞQ�TñNk7·SÐv¦î/ZÃü>u_j¸øe~T×FSãÖãê·­ç¸gÔç´gRÏŸ·^Œ½ þ8ñëTì5´‚?[W­ëVÑ(ÊÊOŠÇÄcÑ…²ç^º½á‚æ1»¡ ¹Ít\æ4�I«À+�MÊ�;�SºÆ²«R:L=pðâÏõòÒN‰>#�“Þ“‰ÇG¥
+¥
+ãÄ‰­Ñ±­%«�Ë3þˆ°okõ-a=
+v§6Ë™¼Ø•éÊT^D»l,m€-míaÌF~ˆÄ·Î¢Æ°ÂM­ÕˆÖ°"#¤¯eÚÚCŽˆ„·†yH®o[®‰ë’Qù3Om}üwý•=”[¿úkæ�¾‘ã?<ô‰=Ì‰ëî®%²Y>`#ô=ØÿÁÙ+�5ŒDf©
+?Eõúµ×O-Ô)D¾!$¯“HYyxµ£«|‘x¤[ïŠ˜NMY‡QÖÇ’¯¾Âµú
+‘êØ�"Xbz«O'«“ÄK.ž‘cÊ/‘èd*‡dî7‡Íq“1ó9È ³ZÄ	·…òíÿP)ßüõ
+‰®Ô÷4.‡îö�ûh@v£•£Œ�‹×ø1JÔù	¡¸sŸÓõbáL¢ñ©jßâbã&CÆ�aß¸]ãÚá¾êò8E,‚Ž]ŽäÅ'Ò¦iÜ‘ÓÌ�”?PŒD
+\ò„|6„àÃP”Ýà¸Á]Ñ‹P¤"]×
+˜0¦š2x”Œók^x˜ˆëfÆ»8:F”Å·ÆZ�H;ËÙÔŠá!ÆC|‡
+§„á•N¤—NêêðÜJHëÜuèðÚ;WeÒ»$A*÷ˆ¡OÝ¾lmîVül(­ê¦$æÄ[om(™k6E{—·Þe"xËÄHžÚü“	pH/n\¤ÿ€ôÒëZÕÑ‹Y'z©;˜Îh�ñû¿oàâª×âãfŠ[±Ò>Ïõz¼&—r	‡Y8È›­@Ñ£<¢Á~
+´¬¡Â�:¢Òª úš�b *jQÓ@Å´Kqßâ…EþB»’ÞTG-Å™^W1¦	–.özÚÃ(Âvbci6[ôlÔà€öE�Ö²Bð
+?pT¬Ž«×To˜¤SÀ�iÖk�ŠÙl·MÄP�Þøf³ÑÇ7�@‹ÂÒ)øJJ‰„Š°Kù€-G‚÷çføïeX¿ÇŸ÷†ê#õ‰º›«Ïƒá<‰ìòlèl¸™ifÿ˜~;ó§Ò%×¥ô¥Ì•R@è+5J—�”&a’žd&¤	u">‘xº<Y	qÀÑ~Æt'ü¥7º›ö&˜XTHÄ’J!^šöMûgŒ£é£™€`…ò¥m¥þú`ýÑÂ£¥'Â/¦OÔ/3—Á‚·W£NÓèPæÁš£NWæAu"EYSNÇ5UW�W
+ôäðIåtŸì„L:pq&iX
+~CUªÅ^ŠÂUýŠ¢ÈóÌf'«âK¿)çRï¤ÞK1©y&êF8âF¸)Žáæa�£˜ªRÑ½à-Íš0dŽ˜&c˜=&mþªÆÏ¶¯|;Zc×H8ZjlØ=w#�»Š¸rî .bƒÖEt•.›.òmäÂ;D¥~”Ó2¡@4
+<®Xá#|s@¦ø«×Z�1à[×Zí>é¶EôJÅð…VQÖñôD¾ |ÄíÑ#©¸Þú„µåÉ³	X1vœ½Ð\¾ëžù#×ó®ÆŒQèSE•Y˜¥g™ÙÀ÷CSÒ”:ŸJLwKÏ–ƒ�-Å¥]¨¦«™o–f23%¶1€¡9’7Û—Wlpü6�¶8Šs~[ÅIBñÛt¨D6Ÿä5¡/làBÈ¹¸MÅÎ (˜ít»	¢æç¢]’ÅöXB{,N@Sh
+Á.¾ç}‡ãÐeœÍð!4Oð¾#„Ð<!t
+ÚäÙ(ëÿýÐ³ vIw*YW¬««í[„¢Ò‘:¦*U¹‰˜ÄpN¥§R¹Göl¾ÏÐ¿{öô—>}0%u…R©Äóû6íz`ù¯åòÌckvÔ#¼dN,¿qôóÛÊëò…Ê–ý?82­ùUØò­ïÜcoÚ;µÞÞ5úl–‘‡Eoü“¾Íõ:‡¥Ž‡e“Ž€<,é`ƒ
+e\½‚’¬Hº")d"â&RðD\ùHXÀÏ"ˆïÞ‹ºæ!>G�U²¥ó‹ÕV³SÃþ‚h¿úqRº‚¸ÅÈ^ú¯>z—_!8µÒQ0ÏEqo$.Òç¢°5
+d:IÍˆKÂëÅeŽ%U�Eü¯”Ô?Ôùè$‰b2q«þYçq&\:ßh,ð‹|³�
+Y9z­ñST-àŽ =ƒ4Ý—œŽL+g¤3±yå²â™MÂÓ*ôûCƒÁÁÐ¿dÖ-K²)31IVTð.?ŒÔÓY-ÓCÓà®Æ‹Ž�“Þ!ŒõÙhüM*0W�’�Šg¥š|9I')—‹ÍDwŠ0!%òâËâ‚x^|Wt‹C‰ÿ°]ý±m\uüžÝ»w‰}w¶ã»³s>Ç¾_Ø±ÓÆNb+š]ÖÉÖÒhhÝRµP*Q$¤&¨›&µŠùƒ%•@TþØ¥ªB@¦é¢mî¨ÿd«­¶J
+ƒ‰zU™&­Îø¾;§�“{ß÷Þ=ß¿Ï÷óý|~urÓth¶�3@;´�'Æ™zg�–N¡
+§Ö”OÆUg[†@ì»š.OÁ8ÏŠ®¦v—Y³•¨›£è©Û·‡íÌ¢•mn/>ÿ…Ž~{0á®oüqgç7ÓO8ö×
+8äûF¦ïÈ„y˜VFßçëþŽÿ4cø†º¨ê³=¸+ËyÝ¦Cý‘Òµ®Ã\oD]c©ºU)E×I›p“6½(t\¡¥Ü¦õËFˆ×Ãr¨¿æY9|…ZOL˜ÒÝüì¨'áïy8\Ë»¡u7ÿ¸ŽzŽmàƒø(öcÂë¼Î	¸ªwI¾«‰	ÅrA…t5@Gª+±TBçT	cSw‘§‡\cª›ð´÷]ìITÒS´ãbO’,³‹=‘¶Ðk0p›b@è
+1Ðƒk´¢V�E]…nÑúpÞ
+”ùÑtMŸHOèAG÷Rç™Ù«V[h«áí:oôã´£%Œa@I¢ï&<áùŒNµ˜9�PEKè]@+¾7†¤¨9IšŠþ êkBs>ê§ Ó»°Ð™oÏÿ·NƒRðô1ouˆmúä�””!™Šˆ©ˆšb1)ô§ÀÆ	ãP-ÀÌ¸@Œ¹–2ÌV6qº�­dºè„‘UñŠdúÒVxã£ÁŽïØ3[H�N mÓõü·ž®î÷ŸîÜZÚ•³³o7¿8ý½&zeÛÖ$2:?iN�ìö±_õ€Q0ÚŒê¾ëF—9ŽQ¥PìMÀ“‡‡Ïÿ—PX»}ï^½¡ÐÅÊ™pIÌqøë£û‹†D×ÿ‰RÈçÎ@~ënG§×YËÿç_ruléîšp×ÝVNú2y^þŠâŽ{ï"_ Uè«ñJL‰©Yn€dD]ÊÉº¢«5®JjRU®(5õ)<Ém';äÊ¤zÿ¿ÂýL}5¹4ðKæ5üsî¬rV}-ù&¾Â-“eùªòººšl
+Ü’?!ŸÈŸ©ƒK¢w¹´õ`Ù�ù-^Ô/îÚåEËòb6ëEQtc£¡¤Ê‘�ãÌšó
+×¿ü®xj€«á2)ËÕäB­Ì{*»HNÊŠTš�}Q9¦E™¤®15È‚—NUtYQ†8ã8’TÕ‡¡‡ÙP0À É¢È&&¤*¼¼‚ < H 9²D–ÉŸH�œà’ÄB#T:ƒ¯áw {OpÊ1u%�áày#R™£Ï­ô»ñâÖ
+
+W{*×»´‚ÞZPsÀû5`�Ë‘h9C‰Uò`tÌP¾P;ò
+`^~ ¶iœ“Ûž5q±NÙuÁ“SÁ¢ìvò «ÚHh=ÞBEÕ>»©\èçÑè›+Dïë­yýý*D.zÌ¨¡A¢U¬ƒL�y‰Š‰ééh&î	‰hTƒ²¢’‰‡À¡,2MË´DôÛ”åÄoÝN`~ ŒòåX6µ±êl\ë³ÓâVÿiÃÔ³C!_ïX˜‹ð†µ�?òGJ‡![z?_^†l)ø×ºÙbf41ì+¬Pæe8SÆÛH‡"!
+óz½TJT…ÎMø´Ë™kŒ	Õs;å=9åZ
+·Ÿ	‚½V6¹c»©€
+Ì1ü1Ù¼wõBa0“)ÒÔ®¤÷ªÏÔg„»3îÍD×u¸¿jò‚T¤ MÕ+}LÑ°ôâ�âîhñCãCûSãS»‡.¸­¸ën$ÓåL±è|}¤_QÒÉ¬P³ß,˜UóÙÄ¹Ä9ùœ‰yc47jíev£=ì$Þ•Ûií±÷8‹lShŠß7íE§Y|U8M«Â5ãšýVñ†qÃ~ßxß¾YL3ÁŠœÁZœr*‰'…'Å©à3ì>ùç$JX”O*'³‹Æ¢Ù,&¸—¦¿—›F/
+/ŠÈ	ØMÃ ˆ…¬¢&èÙŒ¦3NAc"$¬EÒŠ¦¥!©.aÛ‚bz¢Ñ��œŽYÌ±9ÇŽ9Ž
+h0¬!ÌÅ0æ@�(ñ1b„Ù\nHVb²¬8fV‘ò�À>¬¢{�Dºw)�""	L´	TAAH§u�ñÑIÄ`	$©¼Š¾ÉF¿hDì<l.góúÃÈažêÂåsØÉ® Üˆ7’¥)�QÐÊ»ÊŸ�õ~”+Az'¯ê	°é4ùž²±ŠÆdâ�á=
+R:`¢†Ù4}&¤ËÜ	«„_‡4Ç §ˆÎØ¨ilûlZûá«ö–CrÊAM1ŽàèNÃ9ï´œ›ë|¤šÚò3³ŠÚî¬ƒé™íæ6L©0§åu¤=h²ÓTW©žª�S‰5ÞýóúmÏgAö{,À›t€ŸÉÿ?bøß–ð8w	cÍSÌQ1“§\a
+±ž:5&— F)OôW�…
+_LT
+âîèBÜ£úñ˜#ä‡EyÂ£�M"éŽQÖïñH/jBþÝïË²Õ7Ž.Oh1|ózÌª¢ÌsÎÆ;Î_7þelÜé>	h©t¡óOôë…ñDØoþ„��Å;÷Ñg#zTóFï‘‡ÿðMv®ú}“Ã½T3&Æÿ7`˜1ÿý®fì1‰\6ƒ\ª<sy0*øÆ ³Ìj¢G4¥e™–Û¸—’McAÚAÐ©ÞSáSâ‚¹P¾ÍßNÜ±îs‘¢I>×3GŽñleSµbdÿH XÖ…º8fÖíjy¨6ÉïöŠ;µIs·ýt¹QÛ§ì3¦jÇØy~^˜çûæ?f—„%ñœ¼jjá`Dˆˆ‘BZH‹é‚CœD©F„Ú³Üþ‘©Z «rðÜ/�¡1ú"/”P©h–e`Šô´bµX¬U7	­Tª×é›¸ŒÖòZúNgMÈÍD_ŸU.WßÓ3òƒe³\)ÿ›îr��âºâø½óðîìÎîÌÎ>fg×kï{mÏ¾ggÍPÃ
+êG�©â´[¨Ò£D€‘	�Ö‚ªMIµTªÒ¢J•ûR"ååÄ¬e¢Õ‘š´H|€ŠV�h+“ò·(rQxÝsgMS*eV÷žsïî<vî¹¿ó?šž’N
+ìÑA–øÈ¤2Ü�;
+©½‰£	*q"�J*Ÿ7´ÜGÝÝmÞö¤Žu–µ¥›-©§|ºžâ™LQã}šÆÃÊ9^Ö2)Å¹¦�:h¾bÓ…vÜÞ	+QÈ“e€îñ�¬œgr8—ëèˆ8x�˜oî
+à@>ÕÀîé¨‚ÂU^ÔMå¼òGåžÂ�	’�•9ªŠ4dÃ».êùð`iX›£ÞAZK
+LÇ®ÂÖTï×—Åeµ®Ž/B=ÓÚ{õ‡Ù¤¦Õ‰}u"¤¬Â†l=w^=îžlm4âà dL‚wÅ…:yÇÖ‹–Œz¡3¢5¿z<›]ìs÷w‹}“óóÄÌÛçm`ì0;
+;p½NRõ8‡Í7‹œ°§†J“Kœ!G;¤øw¦ÁúI‘Êµ{j.3,Ö‚dÄš^Ù]cMÉY³¡«o-‘"`»»rµ{3‚‘Š
+$áß¼(6²‘£fÆ_¸¬S�Œt”4ÌyÈy -‘pQjOK2„]†/ÀM6%CÃ-kú
+o‹
+�–‘H*ô!™^¿Qµû�®¢Ïè†æ±ÎºXÀè6=ÐüF™4¸³Lî�œ~Áó1[=Ðÿ�ñ#_X²ôK@–{	xê›7�ý1½Lf3‚&kLÊÒ^¢sÂø\w,álØº%žÆÕR²´}rad‹ÑÎ)^ó›ßÝ˜Ë5o$Ãé§®œ}ü‰u¦v9XãccO‡üÀR0¾ÿµfãp‰N&}nY®ÏÏÞÌPÉ$ë‹\yð|/ì¾ÙO/™ÊT|•L NÕÊàL*† )D}LËõ—²\Š¸eË-7ê¢z>µÂÕúCd­’¢ƒSQÄç¡Ž”qI€‡ÄrÁçÓªhÿ=Ôç¡.´Ø@ê«Rñ¼¸uäÉ·PxåHY¹‡Bz‡¸ŽÑ°y†!¼Üê«Ý”·’|¹úuöÅ6ŠãXÉ®ØCœê¥¹¤”¥Õ5¸*éáÍÒ7æØ­<z:<–=d?ì8¬M„e_v¼¬œD'¹ï‡¾§Î¡k•Ûm	Ð$ªšíéq`K©+DÞgË«ò>m�*¡P±ÇáƒdUÕöjœÒâ‡=V¥aO¬Jü†ž6SH¡"Ë!…¨…ð	¾å¸ç v:ö9þæ “5nˆÛÁÑÜ$¶n3¢þVˆb!:¥¢'vdq![ËRYE«œŽýªTu”úÀB}|ay©¾™typÓ3?Dµ�åµ…²>ìÿ“¹Á´|b¢þ89ãq‚õ“¤¸¥Å­rV¯Tµ²lU²½8m%]Ÿñçr±[W=6{\Å=©® §4_©ž{âSŸí-ÆŒ.GÇæä†æ%!¦ˆ²1œ‰d65Ëø_Ý]çt�XÆÜµ{^|ic¶GëG§¨éÎ|‚yˆÞnÈ«ÏCôúñi³ Ù™ 3ÅL¹¦Ü§™c›’±K>à*U‡Ñ“Â°Ÿ3²Û+|‘Ù&Üb®	¶Õ¨ìÂ´ ÊÍò[Yü³;YŠ-òm<!àÂ^�Š”Õ–’VGˆÜªp
+(mÑ}QÜàï@ÎNše–}ÃÑádÜ‚�¤M3´“bÌ»e¹3Ìb¶èâÛÄŠ˜rsÔzäFµÞÌÒ8?+?ìÂE—éÚç¢]¡‚\“‡dZæóNQ˜Rò�[)dpi|`iaP¬ß‡Xª/ˆð�<²¼¿Ïê>#yLhP»ŸœbqdîßW�…~´_…"Íâ¾{åšÉåé"t	X8‚IFÉ€!4Vþ00˜.qoÎøfŸDÜïÌHô÷ÎŒ\Ár/�Bˆ8Šé˜Žcq5‰Þ˜ÇÊxôœnR;›×¿Ôç
+3]m4ZþÜ½U�Xiþ%I÷(‰òãÍÔƒë‰ltZYA}Q6v•F7@bµ¡o½…PÜtâ¡>:¢BÀþ?¿±EÅX™¥~¡`®�ëˆF›VþÄ^cŸCêDpÁL½ ½ --ÑÙÍåÑ®íÙÑ5»»žÍí^sÀ¿¯¸¯ôbÁ9d/6èÇL¾´£´·t´D—m}ƒþœé‹Æc1mC´’C†hD�¢Á
+zÄÅ~Dçû­S+h5�Ñ¬É`¿�+ž,U£ÕøIÃ±Î™aF½ T;«…j­ÊT?äÛûÄœg®0÷†iÐ	ÓåëæwòìÓ#OYš~q¹r½Õˆl'Âê–ú¢}VÞ¯JÅÇ›kq§”r§©TG:±-JyßêÄíXæÀSlày]âŽÐÐù�Á	f¡{$™‘ãk€�:.3’ßG1‰x’Ò+RRŽ3”ß'1Z9)é*){²¾$¡iå^Ð€ô
+ÒÊ�hÇ4yûról£Ñ<wùm<rñ§Í÷ÏžÁ•S§°~ælóý9_&ùÃ=ÛŽuwtÍ¼úË©W–~Õü'þ>¿nPáÅ€“}îRóÌl£yvnokÌâí—Ö�j¾wúTó7¯¿W9�{O]iÞ9x`£¡~{èú{?ñþÓ³W°À‡ìžv¢Çï2~Jg÷@,¦›
+0yƒbÉ¨�—ß¤¿A)Û ¸éØíŸY;m`i«…�Åz‹Š8á¥ôæïâ»Ù=Í×ð(\wå¯ø]ÆC¹áº‘YDÑÓ�PˆÅ»˜Í[`ånŠ÷ÉùpvL�1žÀ$ð»Ÿ�[¿C?ƒ?‚ˆ¡!3Â)�-X‘ó¡—é£Ûá¡Øµ‚Ü)
+4pÏ´¨„Û/ãûûUÛT†ŸÛv½tk·uÝ]÷ÁÉØÆ¶²î{°1„¹ñ±±ŽÚµƒ)Ä]¶Û­¡kGÛm
+âÔ š…(‰Ðø!" Fã/cüaÄ&þh1„ˆ1*Ì÷Ü^pACüº§yÎyïsÞóžçœœ¯âKa9RòhIÜ8öµ³‰«ÌáÏ	~V/,SGô:£�¹ÑüýH™k¾5s~¶+«â¾U­[–•šåMåMl61½­º¾°|[`R^I
+ÕÝf<
+§À´ƒ³Î‘m·›ƒ¹jîtä:Å4‹E²™ƒQÊœ6åôpç9½¾Np–ŒOð
+Î¼Ïë¬V)�ßÿ´ÆN²²QÓàÎjXñÕI;
+Âí.8>-	?ŽòëëÇ¥£Ò%ÉÈ$ŸdXIÙ 4-™xíñ¥­�jY]›*–©åÊ²|W£µ²Xì.*‹ÍÝse´;Šs;3D'DÑ<B†PjUã7·6N[ŸU˜¶^²­ã´óŽå{MÝy›·ÅÝéB¥Svmµ+®¸ÝªDþÇuÛf·²NgØ577e©×d‰¸¨LxÄU×~­£ÃS�.»
++2‡ñèUÖßRXZêj
+òó‹Y¾­t³iòÎ0IÁtH¾Ì‘iá‰Ã„�‹HæuV�q°™û4è%äPÈ\â�/yU„Ÿn×. èu`A1À¨mÉ 4(·«�ÊQ ŠúóÔ5k�:òmøšžv?Í?¤ÐòÐö,°ü°â;àþ(°štu·Í�ÞfÀ·ðŸ‚‡��=À¦L`ðM`è4ÚŒ~Œ-b4žõ=Eº¶Ý	ì¤v�[€ÝŸO•{>ž!Mûú�ý—€h>_:|qáÞáÀ7)¼ï†É[ñ²ô÷á•'tèÐ¡C‡:tèÐ¡C‡:tèÐ¡C‡Ž`€ž0rKpÌ˜3	"ÒçÍ·6{VvŽ#×™'å»
+
+‹ŠU‡Ò²òE•UîÅÕžšÚºú45/YÚÒºìz€ÎU«×¬íê^×ãí]ï{ÀßöoØ8ðàC›6ß¡Ç÷ïÜJ?=·Ö9Sò6œ	»(/„�†jC)*±>lÄìÃ~ÂE–ÃògfÈ‹×–c1Úá‡üûÚ™ó7ÿÈ¯`æÜÌ“gž= Íû�“qNÝ6|8ëwm¶�ˆ3ôu=úcÂiÍ6B25ÛDö˜f›ÉÞ­Ù""†|%˜ÒyLcºf¨5‰šm@¦i‰f‰_¥Ù&²'4ÛLöšMzL§¸mãñCio#€í‡‚ÍÖ•Œæ‹;ªÚ^Ä%$5/†úŠ“Ís™ø°êÁˆ‰P{Y�*/ÿÅH5³Êú¨&‚‰YŸq]T¦ú«CýjQ­Yõ*ÛN-"Tú©ÍiHª­ü/Aˆc’òaê#Œ1•cè¥rJõ‰'Sü#ª~®n˜ê8ÇVâb4[~dŒX…4…©×¤ª…+aôÍ}’ZÔ �šÑçí­hÞŸ—òõÔwH!WÈÛ)5¡jÕ¢yÛÇ•�<¤°C,0ª0o,KÅ:bññX\N†cQ6ò°N9)ÏáTÃƒ±¾Xd‚3	Ö¥vu--µÕ”Õ{X{$Âüá‘Ñd‚ù•„ŸT†½]=>o§;S½Ê”?6&G}}ÞÀÝò*Áˆa*õÄåaeLŽoe±ÐŠfqe$œH*qe˜…£,I®Á>æ““¬œ¼l}(äart˜)‘„25JnžÿùFðRœZn^Rí¾i[¤6Å�-á#
+^ª÷«Kx‚"óMq·­ïµÿt[Ó,¤FÉWÂÕò¯úZƒ
+Úh¸î0�F¡™šPkRªÖ’½Š"†±Ní?¥ ¥©\›�-4W1ê…Ý@æ=¸Œ6Z"Ý2vZ†ý@Úg¶º=Rïºß>ití~ØÖvÅ’oQ¯¬WÏ}ÌËN½[ñKòê^;,™ôÉï,õNûmç
+
+endstream
+endobj
+87 0 obj<</Length 25883/Filter/FlateDecode/Length1 41244>>stream
+H‰¼V{TW¿3yaxfCx)8>`žtI” Ï$àcëJH˜6/g& µnI\Q+Š‹¨X« •jÕ‚žbu-Ÿ×÷©�nå¨ÅG·è®µuïÀ"¢ÇÓýc×Ü3gr¿ïw¿ùÝû½.@^ p@žZ§™’VNtCÉ]$-™ºHy�tY~; ,×h1Øï˜š¨)©03Ø3õ¦5øsÌ-°Z�™û«ù^{¡¹´ànuã	&v0õfa0ñ­v ÎAlxÌPŒNƒóÑEf®hMžþµCR»Í6£á¤°¤
+Î÷Xsín—=²àúÃ�Y
+â«àO>–À_m·ÑÌ³‡P>ö`õvŠ°—Mi 
+@ßéìHàÛôþ$q—d=È¸ò”òGžˆ­sI–CÑG(‚È¼p¾[ŸåñžÇŽç#\Ä‡"Ü:-ž…K_�ÛR6$öŽL�h`f@>“Ø�cƒíq}jvÕ=ž�þI øû~gÜxZçò9�»Ð$Ü…4 >œc•qßU…^OÜô¹ëq¡îùœ'‚B:™÷æsr¸±›ÆÊ”•`dþ¸„	Å^¹EêÈB«ÓX�²(\Æ*ÜÅãú˜Êf±”‘4˜1�­€)1P–åÈ7“tAÑ˜J‰‡ø{*bñh\�÷þfú{Â‰�“GÅ(b3ßgí‹ûFx€ã\pçÔé­gIB‹Të·‡ÍhÒçQ/JNM8ô§Kg//+_vÉãg¿OÚÞkk¬,¦«ŽÉß’x/„çø‡˜}ÓÏÕ¬$igs~†,äÌÓwæ¯øzçž)Ùwm§L1è…ù…¼’*/g_|²&ðÀ¤‹%Î£ª«ÝW¯»yÁÒ“Êo&ŽLIÙˆr`P½ääµ÷ÀnÇ»K6•ÿÕ4·u«ÜA‰>‹úçái7R¢÷iS³Ê~Õ…Ï;/«8B¬U*#»wß¿M¯•¬þþReÇò	íñÑêGO×œÃÎÀxÿ˜Ô�G&ÉoŽhæµ¬üû±øw.=ZoZqOêÛ³g;fÿÄ]w
+u]]öEkf}û“,1wq:á“^ÇA�§ŸÖ×J½[öqj¢†ÎÓëƒ_¤Ì…‘äÜ Ž÷9Íï¹oô”ƒf°‚)±Qïõ{Õý¯Jñq}ŠQ+I�éƒÅNZ1A“FÓÚlŒ,—÷¡ÇgdbiåÛš4�~¦T©’³ôÉj)jSÄaƒ¿Ñ‡
+™L;8cûãÐÙøú¨ûÏÎÜ_»³É¸º0±¤¤$¢‚hŠ0Ú,‘°ŽØh’±Q¥‘Ú,%kÏFÙ#°üRLKDHYþiz5Ë9^Ë´Ã�ù�ƒP)1Ý4Lò‘/‡¶ñP.D]ÎÕÜ.¬úÆ"jú¬gëéããäG»ºÛ¤[þÆ«
+ú°îÖÁÈÌÙßwm¦N7$‹•w#[“NVÝ…W®NÏ_S¿k?2Šw.©þjpÐùÝ›9–óåO2/ÌöÑ\û²Sè—Ax$�{V[&JpÆUMîØ³nú¨<mû£&ïÆÓÅBûâQ†}‹Ú]i<eÿ‚#¿ñŸ"áíêÄ¢Æ¸!GuR^Øªu_W¤Èycy»vH£de¤¦â•ùõPÉÂ�®ñSæ¬½¯ºæ™œÝþP^ÿÓÍ
+O>ÙsY¾²¶ä_x÷¾…UÚ‹uE×­=’å‡*£n.YV�·vÆ&4WôvÏ˜»·D5¿:+k¯“ôf×fç"Üùg\O6x×òÝ`Ååñ7<“bÜœõ {^y
+RÞ“Œ�Á£úq(â÷VÃØé	‘‘¿áßÞR,æºá|y†"wgÞ\.å·¼”4lžÐµþAõ_T›G|õÝƒòó¦sK<nœjþ}›`Ä/¶Æœ\¹øa¶ê^xƒtãœcÇördc~<!z2ZòýÃå´Ö)O.��pïÎÖU™yÆòÓµÐ¡ÔÎÙÓ—‹:[Ð¥dÎ—�¡ÑÛvÉ³Îý!1ùáø
+ýä%mÇ·}Z_ÐFgŒå1¸KX·¾<÷qt/ïÙö¤Ë"Ò®ñ]5•xçå43
+æg4ÏU†GËž72ëÿNâ–Ð“ðÄ>;1j²�dà5jLe6Ð4……cé¤‘²Ñ�Â�\ƒ™4ÒfÅŠå2w|»ž/Fst21.b'nbá4]Ëc³Ê|p¯¾£h	“Åf5ÉBða½EÄW2`^9Ú¨^³ýz÷×èqçúWÚåRXà±íò¼æÇgùkÇÆçïØžSµjÿ!í¦ �¿lWO¾ñ»+Qëg&y$f•47yÝß·Õ›Vçì½xtOÓú‘�=Ó«kunŒ×)ùºlÌÐëûû¶¼Å´¯�ÙvØ#%|V£bRlÒÊÏ+®tÌÈn°vËfÆ[fùXŸN²íNÂ‚ìYÛQ„³Ù%€A Èí=˜j(þb’ñêpg5;C¸Î
+ØãË|æ­î<£ú¥¨æA|›5¡ÛÝµÑø¢ØõêÕkËŠ«×÷ÅÙ‹áÀÅÏ�ƒ
+Ê<vrù8[-àŽûFÈ.uqGAñðº°²ÿª"©²t]œf§‹³G_DÒ˜‘ ²€4#{—u:A³ÑKEX�„3XMÉÐ˜ƒ†0£Š42æR!íÈ—02c“bL�
+œÇs»lÜfQ#Ãv)Ø¶ÂBX,2	Bš4`ûf(6�fC¾™e2ØÚÀ03Aøº�&°¬“Ã-ÐÄaðá1ÇAÐ�4g£„Úì^)&�QDA�`?WP�nsXd•K%R¶×*`9Šæè”g/¥ÈÂ"†½eÈŠØ—Ìa˜ÒlÆ´,‚†�†ýš0E`ªd­^©ÉNSjµÊ½&Y‡©5:UšR“þoÞ«¬©+Ÿû^h`@¤
+VFyˆ
+b”Å=„‡C“ ¸Ð1È„ Tq�*ZQ°®­EÔªÅ}™J]Û‘Vë´Îˆ"úU,Z…±Žu)æõ$ˆ :ß×~Óors¿÷î»çÜ{î9ÿùï½\(+U†v8È(ä‘r<Çø-ÒJ¹rÌPVÎ±QZŽU…á«\kN&—Iu‹M­N#—éYmTH'Ó±:•EE8žÓÈñ^¦ì /W)YµF*ÓÉeêá‘œR‡f[¦�kµQ8+�Ò…«4h‹°ÍHmÛ
+Xy¤Z!n3­ÖpZ-Û¾*t‚R¦ˆ
+µŒÒþUˆvGrY86ÛV©Ò°ar�Ò¢†ïRV-EeQ
+©†UGiÔ*-çm�d‚\¡`•*�0„³:IÁYd*¥–…ÆË¥
+oTQÊuòñÏuÚŒUáª4l¨4R:†Óú°ZŽZÖ‰P±ŽÊ¡”B‹ž–‘R1dÆ¸ÎXœ‘��a˜Î¦S-°ŠK0L×¶&‚Ô„™1-HhÈF}+¸gé“3
+lF¼q�j4±Ól¬»¦[Ñg°úØØÌôÖŒ3¦§XsF8«•öQ‘j±@.õnXàÿ{Ò¼í{²q†ÑgFB^Ý,TBò(6ºcuÀ*|ùˆ“GžˆòÈ¶?�Øÿ‘:²¦<û_�Â$íÙ?!íYKÚëÉ>¬—„õô—¼=�
+�
+ò¿Ìì¦öõt`qò«tPê`cß!zdÓËmJŒ·(‘çïÜX±¨ÃÖâúü¼Šÿ×Q¥u¢"'×÷?c›z»ôþ*Ã#�:U›pY_^2ðI½¨¦¥äðã’ÚO—¦Š®Uoß5Gh³1ÛÏ°7zlý¤õŸ¤ÆÅ…¶TÕÅL�.âk–+«Fy‰®úóW&ÖŽ{�ò`¸è¨BÕ#"óã;y-ßujxêb{èzÈZw×%YålÈšÇW]Ëb$y‚‘¸é
+¥²™ÿ‡½û5§`{›.­N¡Js¿¿õÂK]iIÇ�\€‡«ö–�¤Ó>/vkWHººõë»ºÁ«¿OøìžÓ®TÞ»ÛSœÖAÜ^2M<µ4hAè RÀÀ‚ŸYøÔ€¿é!ßå`Â·d”ŠÅVö¤‚iSß},xx‡”¶Óž¦ôLƒé½4Ã�N‡=Aî‚mÉ«œgÑÝ¸Á�·WÍêí5qÔµàï|?R2¢ùñÏ]ÅŠ��ëbÎ..;¸uiþ£ŸÆ_rLïéäšÕdÒ‘üaóè÷Þ?µãBK±×Í³Ü¢íeŒâ7âCùÐãqÃ±=^ù›gWê<W›ª÷;«o4òÙ2tâ
+¨'á÷ŸÜX÷—™M—7åQ‘ÈVòvWÙHò¨¡ø)À‚�ÜƒâÜ�7q¯Ö�‹^DV—ž‰É¬4˜²ŒéIm˜°{˜'­íš	)VNJIÃS5«Å,µ�”Æh4IüÅ¾­Ò^JU‡¬”ÊdœÓÒÛ’ùÁ��Òžr‚–-[?ñv<QAäç:G§ëÕ	CÅ=:BÈîEÃ– ‚^ô0Gëu(È×_âçàë;é)þ½"lÊQI'Ê‹Š6h¢;Ç3�À†¢IçÓc"5õq³öçæˆêÎëw×uçšf6ž*žµo<â¾ìûðæ;Þ±[³Ä3È¾<hòÂ'ª�Û¹Á�çç»}Süì^úé¤²/ïlŠ×¸õÝwÓœè^]•ZßmïÀ±´ÐaÏIC‹ÖÉŸþ…ûŽ!ú,-º•39·~Þ�ôÌ¯Í­h^x9<aêÅÆ“++Cö�;¼´þ?—EÄz¹¸V©ù„‹c¦ÄˆªÞŒ©.»œ=uåÃÏÓ2¶ÅÇ¨[œØ˜�I]Ž77�¿¾}[yâ£ûlíÖç“Òš–\-U‡©'ÇOiéÓ3îÚÆÑ
+kšožYúnÃŽˆK›sîø[‡Ó<kîz?ütÿîLÀ¡É
+`˜Æ¼I?ëSA—BÕ�0ÅÐŒ€éJ„‹¡Ã/Ò˜j,ßÂšÃˆŸ­;92HåÕG–^¦«Ü°þ•ž	=økXoYª9u’ÀÃÏÿH�Dá5Ïkë¯l‡Bbs!8ð…-p’ 
+ÆÁwÉE”Ê‚�0ž�ˆè!Œb«\øÓØ3™o¤~
+Š!îC&\Àì?6PBü /Á·0‚ŸÎL-@>¬á/ƒ­À¶B-…7C8”A-N´ôf$L€Ù�ËˆD‚HôG²áœ ºu=ö‰¼£ƒh˜çd@
+{H
+-Ã™¢¡€¼MNð;‘{ú¡æ`�’Ê‹ÿzÃ ð‡a0
+Ájø.2‚–*À×¤‡
+â@D¤©ä7€–H˜‚–.ƒµðœ�3Ä�è¨!ôTf‡ù8 «å ·
+ îáuhÉ¦Ó»Ì£øDþÿjâ<¡�vÏ…u¸ºmð78Uè“ZÒ‹¨É:rG`b|ŸåšÏ™ëyÑÖ(ˆG¶œ`l6ÂI¨ƒëð¸q"')1UG;62.<ð\°0¤è­lXK°T Æß	K<‰1‘”åH%Só¨rê6ý½�nÜäeüvþKôy#Ø‚–þÈÝYhc.aìvÂn8‡ákh‚»ð=™H
+È>rˆ<¢Þ vQ5‚¦–¹ËÌ·€z»xÞyÁ=8™Z_‚‘úÎÂx
+O‰+	&óÈb²”’5d-¹J~¡ò©ï¨èµôz/ýµ€|‰LSo3ÎVo^k.áÇâêœqlÄÍHô¡±˜�˜Ø€~ÜŸC%Úö~E¿8ãjû’aDC²IÉ%E¤”\¢Â©DÊH¥Ñ„îE{Ðè%7A¹àœ Ž™Í˜û›'ò>`Á�Ñ0íŽÆò.îTI8ÇlŒi1¢þ(F«QÛˆhn†_q6Ëµ×Ž¼IÜÉÂa‰Â¨G“wˆžÄ“¹d3)'uäÕ�êAõ¡Š¨ÕÔfêŸÔMz&½Š^O ÿE›<c÷ãUÜÄuÆ¿÷ÞîJøqúÂ°ÊÚlCÀ6—bIÆÔ¥`ãPÉqùé”Bb·LœÒi`ÁåHË„@šðGCÆ$em.A&Ô“ÐH)$2-…!0´Ä�’’Òb´ýíúÀngÚhõé}ç{ßõÞ[ÉOâ)‘CˆwŸ|OyFÙè(tT;ö:÷(óÑÉGW¢qÑ‘ÑqÑ…ÑGß3ƒæZóys�¹×|×Üo¶Û;U wSÑ_*žq4;§„¾I‹áÿ
+Z…žÔi+mÃ³1 ƒtwŽÎÓú3ž›t•½mÇtŸºS"ÓØdôË4VÉªÙ¶’5ÚÏ�Ø«l'ÛÅökÖÎN³ì"»Ä®âùŠýƒ=àÃøpžÃ§q?ŸÃçó2^ÃëøJþ"•ïâoñ#üÿ
+ªü~‘ßàQ1•ˆbñ±i/‰=âˆøX|".‰kâr#¡FnI“Ò¥i©´^º*�Gžjååòx>Pb•åÊ~å€ò‘rË¡8Æ;Šo9Ú&vÊ~ÚŽ]ÚïƒŽ{›MàÏÂKÁ>äÙ+ìo“:ù`b�‚¸GÊF�Ï£›|£Hg³Ä,û¸™ær�æ¯ó9ènëS†]œ‹>,—/H#Ù^"þV�óæ,ú§:è¥›—h(m3WÐ!–€UgîÄ^hb%¬{h)_Åÿ*u	:ôš¸Œ¾¹‰½ÿÛ¡|D•<Ý6“Þ Q”�z^¡¦ò‰TA;ÅTÚMI”)='ãg÷Dµð|#?hžâDŸãÜ«�æ0’®âÜÏ¤±ì6ý
+¾�æøFvHRØ6>ŒNôG¥ñ×©N¬aoâ_J—è2Ïç"›Ý“&AP§õb·™“Þa;øæ¦Ÿ³&DƒÝæ7ðN÷%3ù#±…×³“¬ƒ�âY¬PL¢(¿ÆªáMÝ‘˜“OÃ>RÐW7y‹XÂvÑùñGiž8L;Î¦ñ.¡r?›'òÌNJWˆøè'¦�üÜ4·K±�î";«è²yBx¤*é=<ËØvñ]9hÞ‹®“×óY´Dþ‹c&5pNˆ³¸‹öS&»Ë“‘÷±à S	ÒÖ‡y)¥ò/Ø}z�mÁîHC$å89öÓRö6teÜM³qü‹ïÃ©9O¬Á9s˜N Ûˆ³}8¯Á=SÏÊˆã–�ìûà5tÃß¤eÔ@M¨ÿû¸M÷#ÿÒût¹wö¬™3¦äçM›òTî““'åLôdgeN?.#=M{Â­Ž“::%9)1aÔÈÃ‡
+u
+3ÈéPdIpFÙ­(¬aCÊÐŠ‹=­U�QÕ�6T°ŠêjØVSjz¡¹ä?4½ÝšÞ>MæRgÐO¶ÐTãŒ_S#¬¢4¼Ù¯…T£ÓÆçÙøV�îvÃ@
+$ÖûUƒ…Õ€Q´¶^„ý˜®56Æ§ùêb<ÙÔ4˜‘ ­le	³˜�ð„@A+'g<œ2’5ÀHÒü–†HTÕJƒŠÛòdÌW£U¤C²lòÙËŠÏpØË¨Ë¬hh“ÚšÝ®oŽ¸¨:œW«ÕVU
+Q²Öš…uýFBãg‰�IL>Ì|¹¿4Eè�ÄeªEêúËªñfi°¿Ômý†B˜¶<½(¬aéÍVsàˆå¾JwPuZÀâ„—«Æ ­P«×—‡Q�dÝ ²w[r²÷¨y•’ª^ÔÜÆì-TåÝ:‚ô²†I^5i Ä“ÝêÚ�ÍÖÁCz�¸øþH]ŸÌÆlu+)ëK'³<Òæ¢µF…'A
+�äY?uy¤×äA
+Ÿƒ•Q‹2,3ùÂº«Àâ[ö†œîÒTý>¡ìZçç9U=%ÝuŸ,ÔjŽ¾þ‚¼7²²ŒÌL«/>>Î²é)žìµ~G[éR1 }´ ³PArîv[UÝñR5£©4ØM«T�ÒFÞœ¬�ÁÃ–¤½W2òKÒÔ+é3khßƒ¸ý‰FÎŒ¾ï×¨á�úƒ�úâºnyÉB­¤´"¨ôpOnKÊPÝò¼>Yf÷E
+ïÁxŠ°¥èÄÊ>e‹ÆR:¾ŠÝÉµ‡­hs˜Zd¸ÂÅÝ¿¡·ûkEÌ/,+{xlÖã¦Q�5�ž>€à^œ.à°”ÁKÊ+t=f€¬ÇŽ®ij‘Ö«"fSµ¦º4ý(Þñ}e Ü[ÑˆylSŠQ´9„ êYº•Sa«Æ6”¶zÙ†…Á£.¼Ùn(¶qÆ}áÂPkdÁ£*‘×æò>®E©E%�ÞÆ�¶(å¨—¨É–J6Ã¦k"Œlž³—Ç¨&Â»y.›‡�Ç~} r¸£ú¶sE—Üu~…ÿRŽþïâ%Ÿ�¶0Þ-ôš¨døËö
+`‘ÒB[•|ªf‡Y<d›y‹é–ˆ=!/¡ãœÌÛàM…]€ç›ïA¿° ü/`.à%À-À·ÓaÓHÃ;'­üß:*©Jºnîœ“‘.w˜?ø½ÜA?}ë·‹fó˜¼È<%­6�+-æûÀ; o„ÞYŒÖç0ß`i5mý©t�âø'øÏƒ�]—H¥xžOŸŠT3W„)O"ó.oaõ°›˜*š-�ÃèåùÑ]�Ÿ=6AÐo‚?ø|Ì¯Yz€ÐƒÑƒ¹31o'äåºÙˆGƒß@%d"—šy.uŠ\s©TN#zâþ…·soL¶ÿÝ>ý`^knoèöï1<öíÿÂŸàÓÇ¿˜ŒXºøzWÊ¡ç$ŠQFÐ&Q÷¶'ÕR’#Õü|,–ÒÐ,TÀþž´Û</þN^È²”´üb>=6…Úøè3%�žE¼¬'[}‚¼mµ{¡ÖÎÇ8FºažnÑéŽTÓ“§ÝVnÍä�ýT¬u~tJ«™XßÚÛ,°~rFÝ�°EÑ}˜g(zïû€‰ˆk]7˜×ÑÃÛÀ{zcœD/ö¬s¾ßxþß´WpÕþÏžÝ›²&FB$Ñì%qoBÐ„ì^Læiî¥E‘‚QK¨"šÖQ†4>f|´Å `t0EŠÖ!hpƒp1‚”¨Ó"µNtÆØŽ3VkQÁÓï?woB;Ug:;ßùÎžÇûŸï?Ë¾7á÷ÉâÍ,ôÞoÄ�r#
+Ÿa.1`°ýÞ×¡üBð%ðÅ´÷Ù_á‡3¾©žbß€¿ÿå
+<w½ø7ûXæÜˆŸóéw@°4B´.Ä]h£Ïû,Ï3´}�}‹}&Ë¡oì1ºp�çu²_…¬ÏÞ~ªÒsÀÚÙ·†çŽ}_ó8ÓÌ+éöY¶9Ä/j=˜Âçß66Äá|ø|B7ÞÑüÍ	}}J–Ã½Ø=Ä÷¨­¨[)¡5¦ßOãTÑXyôöð:šÁçØ\IwÓ˜œ�¨ß²¶Á«9ƒâZØëÇ~˜{é!ð*sÐ¨0…eu©Ìƒ¢ßê2îàüÉ<Ù¶ÌŒáuß´üÛÀxÝêÂ?E—úÐTÊ¤°VÊùHL¢YFy,jr'ŠU¹í"�ÓJ…ð›O�3I	+	Ÿë§f³Xë·‹òÖaÿ}ß|”nýÂ–­"é¢…²gc¯ÓÛß0äG_Kdù$_
+9ë¯#ø%Ö|ÖÝ,ë³]
+ùÒÞçØÀúÌñ�5š‘ñWµ~È/@yëßþy¢ŸªÏ‡ùçƒ°Y?Ò/‡ñ~fŽ-¬ï[0þ•
+l=Îë×ú�c�d�Ã™Ÿ•m?’‡úoÏC¶iÞKs³çàsþwÔÍu:L[´vÐ‘9t™l YZ�¦Ó•Ö>ŠêÆT3P¿×Z†ó”�¥:ŽªåCqôLu$£gj�Ö›]j;ŸO7?­ÇÄiÖËT¦uåfÚ¡Ï!ŸÁ£”ÀX­r4÷˜ºeõ²	Ú‹rù1ÍÕuo�#oE?S­à˜(¯#WÇÇ7T‡l¦fÝ÷n•4�"n?�XÚÓmÀÖJø$î‘Ñ.­sÙGè”¬ó·ÏiW½9Wª"WÓ€uÖsýkÙ«÷ ­ô>pßuïEÎluŸüL}…6Òà>íj»ÞìÑð½Ð±™ï°é •z?¸Ïz?÷RõÃZ@·D¾À8ËjB,™ªú¬©ê~­­Ä¸Û±N±-ŸšØïsnTJ:ê•l–}äÊEêq«LmÀÞMË«X÷ùNÂ÷
+¾CXOsìWiÝçUÜÓò(É0«à—í4_n~IÖÜEÒj©¾+Rµ4ÕF¹÷›Ìý„ï­ú¼t¨'¬€jøŒé9`>ûø»¡¥s %©œß¨'Mƒ<øÜdìwp
+0-|!ÄîÄ¾La ~¶ñO:ˆü<äÛŒ>ùs£�ø(_Sƒ²Sí1îWwÈÒóòõªqí4r1�?¨/äkt™8Dr1í’àÞt½(_RïÉÝj¿1šfSÔùµË%j¯¼‰Zäõ°wí‘¿U‡å½j¹\	ý½ ÿ¨î6i§9¶öÓ€ø­6>¡Õ‘™TˆñRÚþbZûc5–ÀOÐo8ô\³8yÎW.å‡ó�{Â|y®Ùyfç˜�ß½ˆeáüxÝlW÷Cs:Í Ron†¿ºßd.ëºÖ¬iÐž\hÑ4õ¥DÇ�[�¿m?ÞCþ6`ò¿¾Ö×£Ý§03pð~¾YJ·…:Ó�öQ¶@¿ãÁ{9ò�ÈïÆ{|#ÐŒüçÊ�Y!Z�ôA;ÅcÕ‡e‡ÐþàMä×��);Öƒ¼òsÀ
+à`’¾¿Ž¸—üø?Æ£¯Ë#âPýÈ˜ò�xÚ×âbPöûÿ/cË¼“8Ü‡ì:†Íç¿Å¼þÓ7¬­¬o¬«¬m¬§¬'CMÕºÆñ? VXKYÏXKYÏ¬%:ÞWYË¡÷PYv^ÏÑl}oÏ´i^2
+žX«9¨žàm×¥1oqê4ÙKk�n`À#õ"øô’!{�nª"�·cËt¯t0uj˜9·1“é©9Ç;�ÊÃó`È´ÜNÕ™^=ÕµÞáÔh˜ÝF�8“ŽÜ*ïNAªDöP¡(
+\Ü¼D0™:`R‘|2øÛ¯�>¹V´‹‡ad=˜+’ùN§Ùi�F§4Úz�Í$T¿(	ÆÍ÷Òª¿çšÒù˜æbq3</—Š_°;¨÷“iP­¦l‹æXU†Ç»>#ª9¨Ì´ç?¶Û²x×è~V&åø	èHO"Öäí�wñC‰\zÖIºóüò4Ö9ïj4ø¸Ç­õÇà•¿ÃOúä�Ø’e:=…Ëê¼B®»ør/ŸùÂ‹½
+æógy§°‰óü<PrTì|¯Èýî¥ºQàùÜ'¨ñ‹¸iC“WÔƒMä«O“Ån“º;ùr¯Ð�Å½ˆ[ãçcü´ú*y–{ŽŸŸ¨ó½‡Ü�îsîË®i¹ç¢ÖkôÆ%&$òt··T»�®¹CÞÉ¹¹”,t
+ž¼s›cŒv&ùXÕ'=Ž^öb~ÈA£b§¡-§;Çh‹tGŒŠMh?jS~;™·É©ð**'^ÂKê&øš*xS:ƒò(¬½¿­|¢ï•c3Ø±:·Îlñ¼ØÙ~*O},;	¿~ê(x"øCtIøQôìi>Ï+g®KxEl©Ö×¯pJm?æ›üzÁŒ836RÓxÿtP2ÿL¿"6Éó*b~#Æ?šÌ‹aðQ±²ñÞ²>%d'?ÃÂj�'RiŽÈµF·±ÓØg˜ke·Ü)÷I³­–KéÈ:Ù,[d›´
+R“�ƒø¸mH×IuH›�ýÖ
+Ô‚É@m7j9×Ì^¬kÚFÔðù2��qÏf<°’,m4I$…!�åRI	$¦èÔÜdj´ñ3£’âd‹&�6è´,Y·—Çí¥q{AÜ¾,nÏŽÛÓãöÙq»:n§
+�É%Û(ãTÓén�^¤Ó³“¥QûpÔî‹Ú+¢öíQûÚ¨ýã¨Ýµ¿µS¶øŽh$›št:I§gr*Žo)˜U@£vŠã4‹lù¶¶˜£8ˆÅ�´1&ˆ5ƒrƒò^'5ÎˆàJ(Pk]€²$ÇärAõ¬âKªsÀO±'-žÊPÛL‹')Æ½ÄãT.\ðêÒïë©^óº�×•Ñí¦Ô(±ÿøz�[‚X-ªõ79©SE;Æäât–n6
+.ÂÜv«Êuvü‹õª�iëºâ÷Üçç÷ü~6þâóÅ›�ÆÂ ±1˜hñòI>p³tÍg»L¡@ÐÖ�”F¬
+kÒµSS)Ú2uÕX
+Ug $†$iÑ¶NJµMùc“¦nk\”µ±"M„eMlï¼gÒì£ÚþÙµß½ïžó;çžwî9ïžRBå)¹èþ¦˜By×¤ø™/ÎÃ¤ø÷²8Ÿo»ã€³�‘wnRLxqÐ‰·¼	ñ#ï)ñ·î8…Kâ¯Ý7Ä®¸
+�—½
+ð]·¢ä�$"þ¼·[|Ã}^ü^V÷H™:‰Îä‰/à#õ;âT³×ù¬Ø�Uu*l[Pf�h}
+qƒ[Vœ'®õ;Üãb›÷†¸ÆÙ-~IDú%±©,!6:•µª�ŠxU	>ZRéË½ãâ¶Æ«ðsÂÁ^R š;Áõp‡¸ý\˜p«¹ÎÃ•rÎÌ›x�Ïåõ¼–çy5¯â±˜åÍñÌŸXV1«yP«ä^¥ÜTî±“�
+<ÅÂ/–Ç„i¸3k”Âq.³%¶Z
+Ç4›vuMœ‰@86ÿ	mEl©Óíæ�1Ö„˜)LÂ[ƒvÇèKq [»â�‘%†c¦¶.<³ 0|ºP#Ã§#b=ê·ûMkŒMí_ÐíYî¥ÇÍ.ýk³ÇÎ†;»bcÅ‘X�|“)Ž„ck;Wìîš¡ƒô¹Pû=&‘®è ƒ¡-2:Ú#ŸÃ0 Ž!ƒúXv‚”È0Œî
+¬;Qa.y�aˆ¨ÀD¸ Ã0ÌdÜÄ¸jŸE£:BÆÌ¸êHãR0ÿ„a² `XAYÎ¦@ÊÊâ-“!¥e˜(+UØ›³�Yö`–=¨°¿ñ˜íË²Ç²ì1dKÿ§¶/ø¿¡C�AoêšàI0Ò¶;;Z…#k”80N?ñ|á,1¿':)Ó:ƒ1�3Hü~»$´@MT­�©‘Æá%Ã›öã…³*‚.—áz$ç,³<­žV™…á,³r‘lXfÙ�7;p‘Ë,ÉF\ã¸ºãò™P¬jÎö±‡µãyèÅÖßßßÛÛ×/7pw†cOlÞÙ5áv‡bù{Ú#RÈ~¨½ï¿<?	ÇªPÈ/q\(@¡Þ^I‘“¤þì
+ê–oÿ½õei
+”H½ŸÓAÖÛ+k‘]Ï|8UR¤œºÓ’Ïî–|3øU74aòÉàôöÉÒ¨+«¡7«UÎpùx^rÄ‘Â}5§ûy„UÝgˆ–SÝ’Ï«ÙûXyÂº)Í�þ€û²Ô’jÙ ,¶¬Oµ?Þ±óÖ:Œ£;|™�‡+˜ù‡–< +Tóø2y9½ŽaÏ�´\æx€<�Ñ‡¡)…8„¦Xm³&Û§
+ml¾18Cb—p‰õÉTBH%…o-D�s—»W	�&°©95µ˜a¨t ¾âõËpÎ>ÓÿÚlz§pëÝ—F ˜�ÕPá<5v3uaé*Ö¬Žô:**ë·]ÖàúFMžñÖh
+mVd)[€æÝžØ$[±ý3­6«Eà(”746˜VÕCUé€¯òõxú€bû\ÞGhFúZ:ý‹ôïÄ‘·oÒš�v|šÎ€@.3©	è‰Ù|×Ÿ'r!×8}DE§/“5º|Ëá{Ù§¿“H’šhORxß[ËáJ«êËÝ²ê|uV‹YÍYÂ5ejU-Ã5WTú_þsi}…Ëdàk5F«´&X¹T‡¾o€oÑ}�Á=.š"')Äã%–æ«Ÿ‘WI¬¤&…�Å9é¾ÊÔg•�F¹Pæ/hëÑ‘’Œ�W'Õ:‚¾iM¾þ‘�Xp¡d£bŒ³T6lLjn©ªjnžj–{¼ä£dÅw°I!ùU €+€íô=Jû˜k9,žH‚
+loÀ
+X=Ås nÕa=Ã‘x¤\üÜÉÇy¤0,0„¯†<À° ËŸ…ERÀä4……„å9=�+LîsÕM‰0Ä™ò€N€"¤�
+Š´³´natáëE’Z$a¤¥h¢åžÊþa1ùbnµ4(\—Œ&[“�÷’ÒC¸G„$óÙ^Ž€(éP[ÌVz­Aùå)äv–rå.fGú½"_·6•ÊÝRPeq”Þ¶PÆí(hÌ�ÍìÁ?|j¥«œs¹¨ÎTR=À¸¾¬3ç9+ôeÝè«è«yôU1™8^á¿­û>Vû?®ŸãgõðØµw™OTŸZïÚT:}ñ5ôQ>úg€Áê€¥˜±ÙUV#�1©›Êª]œÒ€^3n`óí¸zýµaêÿ�”5QÅ”Nš
+ÄYX‚»JÖ-­O$…¥úCHµøS	ôÈÎÀuòR ¼?¡¦m[»£S‰L¡JE¢o-‰BÔáXEò9¢!¨&+8ê}ôg©(U�®~ÿé]Nßõg‡bbíÐõôlÝò´­Â×N<ù¢0ôÊÄñ®pÿ«¦ÿØÞ$ÇP{æ6ó&ú¥šÜ˜!æÌ| ÃXä�z{úÜƒž3žsžkß¶ÿÔs…^á¦µ3ö9On7ù*Ð}æ~3e©Æ ¯dÔŒ•)3ÿÀ3æyÏsÏÂ©Ìf35Ï2gPýâ@né,ƒÑ†ehaŽî*¼A´‹}œæ²’\mÚ˜Â‚ãRÀ5F0ÎÁyRK´~:Æ@€Ú¦jD¯2QRC~Éì&ò‹2º¸ˆ®Ä^”3e1áO&MM5ÉDTöUOôD%Xõ8nåµUî1£–sÝVB}u2È
+MØ¾wí‘®ú·ž<úÚ©Ÿ|ú»FŽ·J>WA�0ØáÚÙ¿qŒ~\ìzæ+‡6øŽ®oàô×w�µIoö>8µ²¤ÂYÇ³¶ßÝs6ŠeÞ“én%¾ƒd+lô�’ÑÖ;­g±YŽZÌýŠk›nZo“OZ—Bì°é¤uÔ2j�«�ó^óq�Æ-Å�¡mkwmÚ+ìµüƒê*nâ:Ãï½]–lkµ’,icí!	¯.[2’ÇZÉ¸ÆÛR(ÁQiÀZ‚Ç@Ò�&�íB¦)LIH!C)WRšñ)Œ
+I2“É4Mš¤é1’Ô˜ÐšNMÊXî[‰& •ö½÷ëíÎÎþÿwü‰V8©åŽ²Åe­†u`
+êâûù#°\OéL&šKk2iH3ÉTw¤£ˆlbÁ:ÑÇ 	�*ƒ2–:?ì—Cg†Ý€…lº}– OÁìÐÎ'úðBcƒLKÇñ-Hô÷áššeËÍ8^�rþçUÊ‚¯e–'eKëöÖ_¶­ãèoÀ†Î�Z(¸—-ŸDô:š.ZQÚg4¦Ï^.RþÌe+ÎÕì�š™ÅYœ�ÎRR©ËTöêì
+�NjÞD½ÙG•cÄéÔ>‰Î-$ô=à´ay@’(�”4­¶(ABu
+¢µ$í°£"wÆõÅ‘ŽkeàŒc�qS¼I±FtÛ·¤9¥ªõ{Žæß½˜ß|ñ-¸é}h€›ëWæ½ùw¯ä×}z
+ž½þGØvòð�Ÿ,i£>¸°eãä�žÎ¦{)Ïï·uß}GK ~û3U‰VâL¾ûãG¤ªÀ¸hðö_ÍÇ®Mçû_ƒ´ä¯ä_þ¾x
+á›žÈ��Ë¿pdQ:Ñ9´þÉõ»áºî{š›7Ú:6ŸûÙŠTÇŠ±û®Î´cG1wò{º
+@2Ü­î  ‚t£`õ’¡T„a1%vˆ«Ä‡Ä'ÄŸŠ¿O‹«¾ª2ë<:Q'E<Q!"5óÍÂ2á‡üja­´Õ¾Eøµð¾ãÏ‡âŸ%›WˆØ#Žžœl˜ó¤Ou×Ç¼ª­>f“EÚ.‰"æ[¡ÊD›yïñä«Þ%x*y¾ùÎÁòœèpˆÁîñ"-:èÊ¢”H²]m¶<Ç™L%FB°
+H¢Ça—HÚq@GnîÕ!s}Ì‘#2câ‚êfcÂÍ˜�#G€7# 3jT©ú˜†a$°ø¶�xw‰¨'V�!šÉ*3Šò•¢ÌL+Ù›5•Õè©�0ðD“%#Ö%<ºO\·j>¿øze(§:ª¡ÁÐ •¥¢àªšdieé°;+*¢X¶¢µÝŠ{ú¯•lA?£‡œ×e´ØÒmæÙš�éù<e6QùÇv†]±sþ!ó]Ý›ˆêÃù‡á2Ý†ëû:Ü~ÏÉ2gÌëyùt*îª
+!Y&²ûÈöüÐì%@Ì½‹kâ”n	ð€ˆÃýêV&D")9éˆtÆÖG·E7%Ÿ‰ì5½è?9b:9ÿDdˆ1MÈg#¶å�×I$ÄƒÁ€�±ó6È‚ÁJ†µ3[R'…C¶êŒ‡)Z
+Ïâœ	6ˆlF!2	?ËP%%¾`-¶ÇC©RX:3À‡­²^µÒ1½–+Ê…GèI&ƒÿ`sD³ZN3Z&_a^eÞao±ÖEÈä`Ïh¢„q2	Ó8ì�Žÿ[‰v-�Y¥Ië|KÎšÒ®ò:µqû�ßUX�ñZµ&•¢3o›š�Ât£(m—fº/¹5ÆÑî†]	ž&�+•Â‘,¶ž…Çútwr[ò
+T!ÍÙÅ¯øq£±7ƒ1·œ›»˜HÜ‹»qpDò‹~ÁŸÀQ˜ÅÏ©–FG²Vð$}øWxìl=µ·H�A/~ão
+*e«(JÖ+xË4\§=»jàì¶Íë÷,=™·”µs~«ËÿŸyñ6ëDšç­Çú¥DþW?¸óÀ¿÷«
+é|ò’þ%[&ƒ¡}�krk]V•Y9o?Q·®ZVfßF#ý]=¥×;Ë'mÛIh`çÜ'ºC˜Y|àYU’¨&suŸ¾Ë¼Ù´Õüpe/õuŒ‚áÒ²cô4Ò[ ÊÁ6µÄ(í1F}U„#‡lcÖÕ® ¡˜¨DýØùg}ýZ‡íI0SŽD¥9µeqŒSíÉƒäÖø×<î*æ§hVÁª0…¡9;•j¸ü5U�qüÖÑ"Ä[ø:Õ“¢ il.aý.„t‡ÖH¤NZ´±i¨÷ÄýwOçvý5Þ˜Ÿ9}lô^�ß{pÛ—KªÖmÈ·nløn³ï�Ç§&^;÷ùc;~{t×�ÝÁ#_†íö0î"þ„»6ÆS¨ÇT÷°=íÞë>ê&ú¸^ßsÜóÁãìñàir„áÆ‚¦.n+×�ÅniuQ•M’8ïnÁæhdXhÁÞÅBQÀ(/_eä
+¼„©2‹ÇÏ„ù�~B÷ëx=ûc§óK†gÉÈ
+U‰éR’äx(€Bå‹#€œ!Þ(%ü²DéªH§ÂhàXÕéŠ±ø�ñ-1vOhOÏÕ
+†‹þ+ˆ‚L½„Ëç%Ëx�' �‰æaÚ"AIÛg¶;cÆËvm]€žä”ŠÐ«¿
+zJwzRz’9=é&ô´Qƒž¤ºn…ÞÌôÌ´¦öJÛÌ
+E™
+g•©"ü@ê²†¼:�xuß@.[ðÀWámCáŸâ´À»}x?Ôº6Ì½EòÅ5R(B,ø8Q,q´¼cbÜSØæÃ½žˆžßÿdÿ£y—Ÿï|`ÇS6·uá#¿ÿ<+o¿þYY;ë§Yù
+W×æ(%Þþ¶l`„tä7:bö³{6åí�%æÎ§Òc/ßy"ß'£Rš›ÿQû`Ì«ÈùS¡yuRÈEk}é$†Õ¸¢j7äFj¯¾Á^šZWV"Z0Öñ-ì·øÜwø.0ìù�ÿ/oòqoðh-ßË�ò„—‡A�²6‚>Uj³›
+‚ÏˆÖ²|M)ä`5”+IX$"¼Õ.ùx/ákl¼×HÔ Bó…û�sø{îœ¦�X“dÕï×ñN¢„üåeÛÄ}ÆñûÝ]üvgç|ovÎ>ÛwÎ�Ÿ_â—†*š@	„v„·V¼ŒV…‚€
+ÉÆK“V…ŠŽ•2ªRÆºvJ—AˆÐ˜ºMü±ný‡vª@cRù#Úº¢M‰Ùïwv›&M‹¥{~w÷óY¹çû|ŸÏ#VÐ“ðË¬Ë+³Z¸VÖ0Brˆ—.‡œ.W¥/À"ðÁ` •LFÃ!>±Ô5M–ƒŽ,F@ºÇå  ¤°”ƒ="f\£àì0rgË±ŸøiÁrp¿\°ÎC³¬óó|ƒd)Óã-D¤é4lWñ×°<|�K°$ØaRa“ñÂ&í.„+Wˆ¢é…O
+ïÏI¾°O
+ç\Å.KÇPÈÌ¤¥Íñ»– ­¥� 
+6_Ó40•Ò¦A	¡ jŠ¬+ŽÊ•ÿÄ„ÿzì˜VªÕªƒ~˜{Y…P½`pTY8 Ðälö)ùV8JD	bŠ#,´º›�÷whý.§Ìˆ<úr¿sòW®Àâx8›¼=q/Þó·pc'UšG6$#QSŠË\U‹\!çkv»û©®‰³­FŒ—5Md:Þ&ØçÈ¥—¶jZÌ®i¹Ú—ˆoT¿]C
+þäá›*¸¬7wÚ9çÙYúì[ìB¡ßƒŸõS+¸]þa?qŠ¥eÊ²º:-.×¹p§ì
+Š
+‘˜x�çÎHBËsãX­¶6
+;"ìŠuår!å8xÎ)r‰8Ë	"2Ä?“çÍÁfÞÌÕ4›ü6¾—?Í“ü(‘rbo#ÿ2)mÑ‰‰kBa¨.U°¢\kE³Fjh—Š=âQqP¬÷'œœOôqbJtÇ¹S‚1¦…ÆïÐÇPº;-«¨šÿ](ŽÿSå:§§€¨áhf B1H�:j{vÓé/›Y9ÿ­àÇ
+Òn
+Óó•Œ/¢”®×–æ|È®q•žñ´êx¹¸cë(˜ø[„´¾QƒV¡�jAÉì|p†|ibè¹¼ŽýKNî'‹)æÇöB"¸‰€�ÓÆÏG"jˆmö�>üÒ\…šYÁYêüšEÁVuþmO;ÿ´°J^Ú$l	n	ïâö_â�ÈoÙ~À�
+ž”‡…1ùj(`÷88Ü›Ç)ïpúxiÈ´¹¦�6n,Ð›¢tÕOšÊ¼fÒ¢ð°¦�D÷H³¦�„yalV›Öø
+fíß­äÜC„gÜCMeÜaž,ÌÂ!$èk}ªí= ¡Q'¾~åw»&K�Ÿ¿ó‡MK Ò»qìJëšco­|v÷™cU[wþyßç%eâµ»[¯�ÿ<ln¸sáö'G¾XõB?øp´ïS8‹!î>kBÇ²àU³Û!:cÅÄ"lq¢ÅX…mÁöa»Ã{R?´�Lý,qÉ7–K{ß·
+Ûq[Pö§"–Í’4ç–iŠtÉ”Ä×È’®j²ž%ÉÇóÇÃA+„ÖŸê2i©.
+ç(	×iš¢0‡ªŒLr¹8Ï1ÉËD‚
+�§
+!¤ô`¨9?Œè�åA>û‰€Ç¹Îd©f®ÒÅQ4�°�sfuÍ\Îš®X{/ÂžÎÍó7¡kØ&z·uþ
+Wùëü•^pˆ r°”¸Ücu4�þ*XneoÉ½
+�³�ü�deŸ*+Ïÿª¦W˜b÷�Jõ(„-VöÏGÅbÕ“Ñ7‚oN„·Ãk¢ýÖâ¶�>Y\ïœü†j‘ê¸HtÜßº€—¿¼ñ›ÁƒõÏm¥&Wš¹�_wwG’ø›€)}§mFÂÏ:à F{åÌn"¿<•6�öAÿ�[riÇ±•6
+ÿÂ9v¤k—±µçáòXI³ÁÓæ¡CÉïeðuîužuÕ[Ü]ž®ê.¦ÛÝãé©ÞÇô¦zÓ§ÜïxNU3q,á.¤V¤6+S/;öy¶§û‡‡S?¢OzN2Çó`ÑƒžÁêæ'é3—À5úŠgŒJ_ÈÜO‡Äô2ª�nw¯N­ÈØl¼�o¡yZ˜ƒi[uÊ�&íq"ºéŠo¢Q�À?iÃšàE¯=_(`NÆ`]‘úúz¼n‰ö©‘>ýHX¹­àJÙ[Q‚cŠf@�2J³Ò«Š4Ç`Ít{Ž³­I`ä]ì6ôªp#fú°Ë +‚ÆsåöÇ%waÞïã3NŸ¯ER@Ú€#Á8
+p�¥{;X‹½^ôqùJm—±.‹¾
+èóFU´
+³f/h
+1”|Ï6Õ>øú�¾pææ†`ú³÷gæÂËgÙ<^9Ô;Uòô�Îï·cå7÷;·Ç¤ÙJüãÉúþ�÷žŸ?³ýÓ�ÙeG~KÙTN„²¥¹EmÏÉ½mzJwÞ[½ùúÑ¨nƒù?
+'Št
+f”@µçV™¦7°€‹¥ kU}x¤OÁ`àcÂ�¹0a�·Ia°zlzw„ÃdŒ‹¢*æº£à”Éc¸r`¸‹c’0ÔïY‹­`*­h¤Ë1ZWŽ¡H¡Y~©Ð#½+
+BÈÅCU§ä“T×æKDËý—Sa\F$ÒŠi¾¦òóXëô"ËÍ•PÏ­°ÿ¸Q†ü¢Ñ\œ€ØY,§0ßØËüu-ðg´º
+3
+ˆòãÌdÓãå]™ø§G£ÀJï#QäçQ�$m]:—R_ßZºŸ7—¥éÉó”ôTBÎ$@Í²�GWµªÅ¥Kç>©'Vý¢NÏjZ�·ã
+â—ÅíÏÃ7Zÿð+â:Ñ¼Ü2ýÎˆCiÁÁÄqp"ðfâDz Á êQÓóÑ|óYñloL´DpZ­i =j¼àA÷šà¢Ù·Ô÷¬�˜ShžÒ°Y]oé_éÀIƒŽ£éº@»ÅX&§k"™’yY%Ž›«UUÌÇH2,è¼ è™Ñ‡‚]63J¤M·$1”Ð×Æý*}<�‘8�	°Cõ�îP2=Q­€	ŒP/o^ê=ßÞ \Å�ÿ‹ïª�mâ<ã÷Þ�}ö9gŸ}þŠ/¶±}ö�ã$Î‡íàÄ±�|°|¾„�Á(d�mh·ŽQZP…¢BE5hV•U¤¬k÷Áh!)•m¡%�„¦iüQmZ7�MÊ¤Be1©tÚWÌž÷l—vÌò{ÏÝùÞó«÷÷ü~Ïï!ê¨#„�ð`
+‰„?ëŠÈ	ïáuÉYï]/émN9\ŽÛ|½„yY¯µ†OZ­äð¤yX‹îò5g-ZÊ÷a!ZJ×]éŠâ�Ý¾ŸŠÅîÒ/Tš@àr¬¢ñ1wŽÀÜ^DÖ4ðÝš†/�›þÆ4þÝ)Ä/,àÌ @ök†š¸P»nàBÛšÍ›®Éû	ÊýOùþ'ËáS¶ÕS²ÓØ6»4æ'­­à´3[+H…ÓÕÊ=©©H+Ö
+êýëNŠ5TqyE°çd6s:žÙ7<Ø7yõÔckÒ‡jïÄlwÝÞÃç:©g—6�qF¾ÊÈ{ÇÜ»öÆ¢M«Îu7˜œEß˜\¯öï¯ÉŒç¦»‡Ïþö/#ƒØ]¥pîéN.BB:•‘�EŒq
+±Qw¥†Ž”Ë+Ž*øÕ„UvYr»	W�ùŽâlt
+¹9ð 3A(Üuû9³�ãÌÉ—È4Ã-z$“‰+fŽ÷å©#ª…¼Ÿg~Ã�~1ÛÝï@¹�DpðGµ�	ÓZIj!¢ü÷œ¦ð÷×¸›Üß8ŠË£öKaÎÅ…Ù<é¿XN˜ŠF,–ÆÇc·+ðÀ�iøJø"›†¨-ýy!öô9à™Ñª6šÂP¤T
+#Qòm2*Q?È$),á¶’|3äð‡Ûž_µï¹|ñÎô‹³¨1Ä»ê±èŽÁMïËŽÏEt'–†vôŸ<t¶øþÜí:àðp6&ò¯´AÍ/oÙ5sô8{¿x¯ N]	µÈœSð¡úË˜Ü d‰,jÓeå¬òy<ð¬|Žü‘tÉ?/ñ~p_ºZç‘ýŠþh}W>&¿ œ:T‹÷ÍšÔ‚SÀÇä¬ò¦B*€WmÍ#ú-¯Ä2aPŒy‘ÏAü£ô¥Ã2e"nØ­–9(Îå¸an+G[8?GržÚ ÆÎ§‡ŸrúaýVý#zú°þýý5ýM½N_�mÐÊ'°kèö*¾ˆc¡°»‹6<Íß/u S˜1`L0æ
+á¦ø0SFqÃerØ$
+‡2A²d	‰šw}ôí³çPàøÞ=‘š¨?j‰³‚7¹ýZ÷ÚÇw½øõ�}ë•é—�ry¬3[T|Â²z»Éa¶{úôé‰'†vBþEéõ�ÿqpE¨g²«-9'Ã¤¦2	LîD2aR›[à²9™Y�i7»Ût‹ý“IŸs;¶:FZèÓ‚m‰T²Ï××>Ò0�ü>ú�ý´ãuâm”g/yßJÌ'Íë	Aè³$ªrÃ£,~^›Ô¡†“jH‚“š¤ÝîI‘ˆ°‡E¬)^ŒäÑgjDihŒ…ì-éÆˆØ–
+Ù)s�"â”_ˆ€_�´HË˜tþþÇs¾t+·Éí6›„Œx(ÞÔ|äMÁ„3ƒMÁ:›Ï$LÇX\=S°ò®3	ðÌ]*K-Æg�H¡$àÂ/@ÀS�fr@„EŠ*´±b‰®8¨VPõ»"«3`½3ló�¿ÊJ�Þ©Å%0ÛÜÐ~E|s…/Ó§Š
+‹/fi™¤�:O
+QKj>5>Ž58¶í¯<ïR‰þ¿+¤Z�Ó™Ð¦ôúâOj¬FÎ\ì=¥ë|ò÷žX;08õÞË¿™ZÙnbª ]u%ÅþôSÅ»�
+»€ž'þ½c›�µqîmŽO6Ö¥·=ùç
+íÓ�Ï µ“#u-hKØ©xf+^zL]UÜöÞÀ0úë®
+ÜŸî{ˆ0QTSÞvóî0Mxi[gXc$cmx¹±Ý×ËôúŒ½ì˜a#?>Eÿ�~M˜£ßó2ÞöŽHÒ¬±æAðs£Á¨	ƒÑ±Œ8&ª6Ë‰^1.R¢h
+I6F'›LËÚ,¿ƒtxd¢�Ä´v™RóaeuÎ¬Â‹fÍÈ\‰]wW*ðÐ?±*h­-´Eã±B%ÂŠi]‚´S«ÕFXŠŒ•ÍÊ‘ÁÑX•Å×sK·JB…Ï®ÿ¡=£—ª²c¾Ç<µ¹÷è3ŽÂïN¾�GÎS“�úèÂã&›&þŠ4Fµïô~šd-?¿¡}ÝàCQ�5ÚúROmâ÷Ðÿg‹+©Àõ.4q™ `9›ësÞCa$–Ó«®®Î4AÛzT%šáûžêôpèÊ÷¨Nnf>Ñƒ�—¼¨'»ÖoR«4ÝÓ�B*¼'”G«¼$ú–™©žàgDÉh!rK‹ø64–Á›ÿµ¨ÆAYöSdW'’h?Ù%w‚÷òËv0­4ÿKoð[ñÛüÝŠìçSmÐ|äÉâœ«‰Ë“”Ê7
+*ö|·ßåïf›ÿPæß½ñ¥ÂRáÂJk€Åð‹×ƒ°Ï@§ÌÓ:~Áœý‚geFÃ~ÁBHì4E8¡ƒ_ŽT3ö\0X¿9À‡U¨˜­QÍ:3!Šd4ú•{!
+×’ÿœjB­¥“rÍ-e@…ž0“!²�Ü××¿ûÀ–-™ZKX;xÆ(Ä¶öÌo¼a^×ÙZ×žêµwpKƒä—=F®:×Ü•{©©Îâ@ñÖ™[#+¤jeY<èt
+fÆ¨cRï¬ý”|­Óµbô;�££Cõ¡F©š�Ì«$§Úï@jÜ(®¤cÀÎ8ÑA"VMŸì:kû™pÎùj×ù¯]°]õ]ñÏw±¶I~rà`àôÀÏôV‹ÅŸí·g³ýk¶ŸÎÜ‘ô1Cžj™«#€g§Tü—-RÓ#¹-6«½—ŒÓ†Hc*¨
+¡º·Éþ.ÕLÔ�à’iªI5F«ÚB{¢+ÚjÞ{ÒKDAkk“Qœ˜–ˆ’à£èfE/ýjÐ�Uv
+kl�ÇÞö6¿#ª�RÐØ{¯è€¹iWº‚>î`q_5äœ9¦i%Zø,�é
+±Œ) Z¦¦V…]ÿe»Z`Û¶®(Ÿ(Y±HJI‰¢e“ú‘"õ±e[”-Ò°™ÄN¬*ÎÇr�Ú‰òÙÖåÿk’&NÚ
+Ùº6N×´@±bX›E¶ËÖeMbOk€!²Ý:l@‡Ã€­ÀŒ´Ckd²ju�¤dÃ=^½'Š"ß¹÷œsÍÎ¶ÑÆš¸A ­ 5ÐfÝÍn··gÐZšÐÃ’NJÎtÇ›ôñ¿9¨2‰Ò¯ßÈ÷Îüó…§Þ¬˜­sÛ7�^øìå=Ù±©Ñ/ïZ¯~yX®G·U&ôâïÊ‡u´¼¿ÐõÌ¾}X$Cú™¨?+åÕ‘ñ‹cúWÔt•§7&Òòt!pyûåùÈ•­;ÿq~ìKÚW__:-žê_—Ü;–ÜÄ¡S ÿ2Bl1ŽPîIåª‚h9Ðzˆ?œœi�áÏKç“k*È!ÉQQMg ÒpàH¥3„f
+#�Ó²š+Œ�xt"ˆÇ…p„	‡#H)d„l'“ÍvÆ»�îlÆÂÂ}r$Ü™%™K4TÙ›¸[ŒÔ@â.†MyÍ8Ð…²¦ç…V7k7¸VhW­Uè
+¬˜Ê[Ñ 4õ~d¹¾0›eÃ}žžgí’o·ÉÝr˜V·Ó`€¡(¸.[pa„Ò0"Ë¾¸)¸Ï‘Þ§ïÂ~Çâ(µåŸ÷@ÇV€ŽííH¬¦L£„ðb'ÐAümžf™˜ÍSP�rGWÙë°™¶9ÝN#·;ú¬©[uLÕ?š¿š3ÚÏ±~Œðû…ØÌö˜Ø?ä˜qx*t16^¥xZ Ä€ëòç* n­ë[·«^Ý´ÆK™Í´úõî.1s¼TN3¡`ê	á¯*¿wž}ªMnA“¦ö>öÅÇŽNWÁ$Œ${TSƒOj*•6(5mpáü¸8²ÊHtZ–sÊŽo©¡¯m¸[Æ}¸âø(ÃóÑ0Æ§ä(O²—‚Ð[¾Öã(^o {|5ÿ…r˜â�°Ê› izžo€gF£¢ÉBÄžÑt0Ÿã_ä<—âY>å9ÓÀrJs¿1ÞThÞ àÁ¼X�°b£Ç�[XZ¸G6Ð¶°^e¬�‡‹d\³Û©Z—œc
+œ",øŠ,DÏü8ç+²†¯Ø rÈã«¨™^…gÓX-ª‚ß¦4]Qt­ï]†&|�¢Þ9<¨ä¹oD„ppÄÔRŠ®+)­~riýF/É�Ù
+»£Ú-Š“àÎÑö`;fbTÿA}ƒcÐ€å��æ©ÃGæ{ÌG'­htênb·¸CÚ‘|9çjS@nDš–»r¹e°¢¸'ð!ˆ#ŠR°K�>>—Ø-K"	±²ú£”ú
+t+ê@·÷à54}s‹ ÕþþœÄ/ÐZ[
+U
+Lú¤[dÅîå#>4)¶ºhµ<�íN›*ßÜqXQËÞØnB†€wà5ïie§Wo3hØWXE¬­šlÐrI+Å£‚¿¤t=‡V_ù÷·‡ÖvG:‚çu 8¾ídöÃh:Jø	Î°N‚£~êóÿú“&]´�n£1·ËéÜ÷=9�‡$ö»Ð%!!È‰Ÿ@NìsF�1EÕ |yÕ¨ªAªÌƒ‡0G¾åÿ!éîc‡Ô
+ì$ë‹œÔ–E†HIØ“ÈlÉ ”‰qÊxO®wAðÙÃ 	
+
+ýgÑO±EËIv}Úk†°‘„wá4Ã„ @$’~œI9é—^ üÞ�;±Þ[O×@»�­K2¡���˜DBN€8M£ÔãO2~$áãI #f‡Ôo'Í(JšÀ[ÙÃ§-ÃÒ
+I´©ü%¡~9ZHÔ˜éWhÌÀÙ�"ipûFÏŠÅÉá¼b“±5…QiÔ³%ÉMU¸¼ÂZ}¬Úý.,Ý{	xiq3yf	24fºÀ¡�&ÛÄ™×ÖãeN6…9„4ò!¬fëH¾ç^C¬xÎ<>mú5/y÷î”•bSÐg58’�÷EÝ-ÅM¡^i‹’êF!í6ËÖ±¹¾ðÄí~
+�gâ˜ó”�ô>™F
+4ÍøÙ¼?r*—båêì¾×À¦v—g{ õ*{_ßÄ­¤G’œI©Ü±iôÂŸeÙ/U¸ÙíQ¼r¦~Åyz/G‡"+³¶@ÞÝ3«(Æ#­ F›:�L´ß>c�ž–Ãl+æÄ:FÓr{®¦ìm;P�
+0ða/(råÄÃžwÀmxÉ„�£"…PàõGÊAÕ€nxøVŠ¥xÏ™M
+]4]’ef)ë¢,"îá†(Cf¬ÙM1h¯Òñ\�ÂUÃ<Ñ Ãö÷>®ñ+/W	ûì¹P‘2‚MëÛ4À‹>­þ/C¼›˜VM®¦Á	‹Ù1ó<æ@~;^l.ðè,ã¶·~�£½P<Šüî­º*õF€/*ÉllL§§ãW&…gU)KG¯�ô‡·‘ˆñ±ë(ô·Çˆñµº?¦Zwà»‰íÌÎþªVÕw
+<:¾Ÿ><˜™Ág‚ç2gfÑç3ÏÌ®¿‚¾ê}µpeý›à'Ä}?î¿^¼®]×6pmøêÈ\ÿ¼6?**ìï;8ŒŽ#SÃããèláâðwGÐÇ‹ç
+§µóÃOŽ^-¶È@,&7v=zlÂ�Uêe³ž'äñ\e!47(­%<@Êùn¿m·Û]yq3'(9XÀ9�¦	ú £ëƒÈ(RJe¦T*KXitR¡G™€’=¨—KdìRÔôY#æjf‚p¢bxÕ=Êß‡Rsäç�iàº4³y
+èF\Õ�p{þ˜ô­àßÒßw�Qz«üÖø{%Û�Y!®ZA°ÂMø#kÊÙÓTÆšlW>¬t¿ä(q
+«³%V™Xñh«”Ý¤‰Å«$ôð‹Õp}•gk$�õihÙ·¹±ÊÀ-�ÐÝ/š„ê·½|¯–üªõ²óÍO@×6Ã‹�ÀX0ŸÀWôY~¿è´b/VìÀ6L^,F¯Îõ)¤
+P«‡³
+ßù.ûØ&Î;Ž?Ï�í‹_rv|öù|—øÎ/±�ø%Ž_’Øqð…÷YB@I´¥-Ja !t*`%+£ƒ¥Œ	”Tª•VX×�±	ÊÆ¤iH›öÇ´?öG¶Žiýè^g¿»!l‘ž{rçs"ý~ßç÷ý~({ý¼èçz&ûÕÏÇ;ÿœ�(’~æÉH
+áonhÚÜ“É%»V¼²£-Þhß0L&w6éuôý5U½"Aš-ÖêšÁo´-;}©œµy+ó?K»7}ï:G…ÅÒF#y¬Ø4ÜþFƒ$'kÛŠ¸vÿÒÂâ\sqÿM›(&ºÒ~;™ð'¾‹›wX°N:2ðçÓ'ú^ò
+<šA»ë‹¿'ÞZÇY¿E99!pÇ189uø„–~c³éW>;KjX$B�®ƒZk\ëé�öâý±cž‹¡óá	b"hÞˆ7†?Åd�±ÇÓ#©°±Í£¡†a}uG¦?çf!jDTÒˆi¤�°?ŠQlØ�+tˆš‡T£1G4‹FžàF,úÜPú¹1#ŒCW3wc
+`FÀì¢ªÀ£Ú‡ê–S7Åã¢³Õ,0ªÎHÀ”QU$ú?$Ò:59ù0ò,ƒ<‡@@¼»ð¬tm8äÿ`ˆ˜â{äsˆã™„ªÙáœê@g·�üô“Íûœ6£¥,Sû:sñÊ¨ïë,Ï”‡V�t×ˆÉw"ùy‹'h9e±ëG‹3ù—‹½-6š)­^ÏÉ†bÁÄn|ruµÃÍÅ~ó^×+ˆ];]¬WgoäA3×@3¥È�ÆäæÂHLäyæ27"\µ_eÎz¹n÷æmnˆ9Ç]°SuLÎ½‚iqo(Yo_ÇP&‹¥,`¦H½ÞÐ™ãä!ÙN\Ý™¦.Éœ †)‚ró´ò8„A2|†ä%$'ay2I�£e4‚ôè–¹ÅA‡kj½¯5«õ>*L)#F¹hÃJë€P¨ÔÏ€ÒRJÉµ¶vòÚpqòè±±báðáK{Wžúò…–ã_íïÿ0zåÛ§pxôòò¾-ÅÞ{›·â÷!OÍxŠ«È_Bü(‰;åÕ]ø¸åœeÌr£TŸu®FËéåÎ•Õ]†WèÝô^~4|½äFÕõê»<½Ä×ŽÖÓd¥}2"qi 6IÓˆå]	ÖI;Nÿ2a Óa_ÂßŠ¸&ˆ‘P3N—}Êñ#ùi‘</&3|ËÊc>x[t‚<„(t<C)º®Ò¶�ºÉN)CÉb¦�Â2ÕN}�¡nRzj‚l„Dù±à÷�óðÚ'É/{ìåwÙ^7BEú�wŠwñ)Ó8™ûhý,4h‡bß_¹ÛÔ´¦ÚÈ}-!ì„	_˜š�k³£\9Ùçä@ˆ}yøùæí¹^Qušþt,¤ž6Eyëëž"C†�Ö-"Õ…?[öú¥îîÅü#Ùšha]éVc±ÊÔ×˜v‰REzû¢¯¦û·®mn©íÿm-yì/_=¾ó�Å,[^,®q±bYe¥®a€ìït*4Í¬ÊíúÕ–ö®^T²^Š”…nW¡ÉÍÌH/¬ÜEn2n2­­ú�µ~È]à�Gø!~&BÓ�ÑQÄh™÷oáªjÅ„C"D{kJq)Ð˜ìsT˜
+cxI%¯C’¼’h
+{%[Â(Û�¤q‚�8ÂÕª»’Ò�¸++Éé¦´$G3’€åƒ%Jð ¼"�$Œ¤aéSéžô@š‘0ßú8"¹’jZ|8ÛžHdrzRMqOG–Öx¬Zíüqõ-Å’kÊL‚V3•äœ*c(œ³½§SH}´w¿såDGÊôq1—WGP%æ2+Ÿé|±ÚSm�Î\—¬¯³�ìh(ò8²gi¨rq>æCI	-¿tvqç.×âõþ¸Ýb3Bõg¦ iÕO Oä@c—O°JÌ:+gvZs!}Øì·ž!É\Àmx3pÓ8ÖÉ¦ø” ô�*Ê=ì—vÞá\æŠ@™™Dw°l7Ú1ÆwéÜ=éOÒ9 �€úÝ”tÒHI.8Äºïpª-¤3œœ€åõ¥G¸›Á½Q;�—â—±=RŽÀC°ƒ‡}}Óp&§`ìò“SÚµOUsDIþ ¢RP1p¯Ó¡BTÊÏ¤@ÖI¥pq"“†êº”ûzâó¦Jýk­‹Z*jß\3vxå&¯=æªlª4ìÚ²¦ÛV~-u|‡ÄÓ[Ë"0Â}tßÒ„7_÷�wä×ÞóYâxé÷t-
+ûò¿Û–yñ¨žÕ€‚7@
+_ÕBl¸Žô`ð;!ÉÖìyýâ?4Ù%¢Ç˜TäP/MZ¥
+‰!D[±NOQ¨¢Ü#`¾¼ÂÃéÝ:\3ËíÖéÈSh„ÀÆÖ-²n8¤nV»YÑb%E’˜!1Ù/¡+”u�žÀQN-vV®Ë¦o²÷X‚UÉF4BYÄdQb�•UH†•ËËàSI…ˆéÇS¶IEÑ“Ú¬Q¦Œ^³\¨ù´š,AÊ.-3f³ªŠõù<¶ÝÕr#�eŸb°)Êÿ\oõ+C†p}å\ÙÙÑr›Ù]Åuz7®mÈF¤N›¶ŸìÑ*~Q˜¾º¹¼Ìîwlu­ÖGêvKBž=§”i¡8ämÐkŸ–—äÜ9Âž©]Q».¿�ÝëÜÇŽ:?Cÿv»âë·ÉÕÎu¨ÇIÖ¡¼“ð†«²Ä%#Îá¶ðæð#çcöQ–r4æóŒÑ5ds¬KŸræ™`HhŠ§R³Y)Bå‘‘¤Èä“çh³À4AZÊ36Ó ñRA!?Æ€‡22çN3²3#2mÌfæ3Ìè Ù’ªä8ŽWJCvAKKÊv
+^Ww‡SÛ£iu—Ýþp:!ÈÂˆ@
+î&£àb\ðOM{n©=\€ÐÊ�Ùo/¨Nž²ÄjLØª�Â”ú&`Ã\¨Ra^gó*r*�T¦”‚Ð`¥¡Šqh3j§ÊŠl8'gÎ:gi V–Ö–…ó¨5~~ß¡çÓ•�
+ÕÕ/a‹ˆúzòöåP©ù¿TW{l[W¾çžëçõµ¯Ÿ÷a;¾×ïØ®‰;/û¤ï<Ö”uJV¯e¥¯Qm¤£0MªÚH@%°¶µ…Ò©£th#iJM4Ô
+¦Lm7µHü3*M’ŠI�¢ÓÌç\§+ÈºçøúÚ×öïû}ßïûì­[Z†·Ûc)Ž¼¸øt¥F»Ù�>�:"™øS1É­>3ý|ŸŽ×ùrÈaì^êŽ¦BÁÒÀ§�ÿˆrƒ§@á9¯ÅÞ²Ãóµb2éønã·GCNaõ_ßyˆtR
+wÒ$î¤(õÔw€8âqdÁ‡µ0Fo…¿fÞW™V_·¯Ÿ†¥ 0šÌÀÂY
+¢Á”0Ö9706àÈ8*èÀsçŠ-&OE¤m&QÐÎ-|$.‹´""ñ�8%Þu¢L*T”\·¸
+•èpt{ôj”‰¾C„Ä”BZ!�Wš÷ÑÎ£xá›oV)SÊY,¥JVA
+Tj´ïR¬í‘[k‰%Lð~iÓÊùcxúÇÐó`IÂÐf3u\»HU�,ø¡¥2-RiR©
+"-uÑš˜¦€pzíFëKâQ—Ê±ÕöPñò±Ÿ¸nDÄ!©KJÃÁòÀcã§6}6©^
+â-^ymBi[×ÞžºSþ@ãL»	W=´ü7Ý ®z<‡XÑ-yi£Ûä¥$Å,\yTÞ’Ø%ïHÜ•u	wÆÛãÙèÝîÝ–xÖ»?°/y>6›d«H§g»òdÇ~lU³LÚÐ¶K-Í‹(+øòrâ:"œŒÌ'£Ql
+>¯W’D–†ŒN¯³KÞ¤ì°¶ÂB£xYwØfö,"X”&ÅÃrr’Z”kô1döNú"Ãáía:\ƒ™™Ä¢�|–Q²Ï$dC¶tGÞ‡ÔBÖ‡|›}Ð7‡QMÁÒt¢„°e«×—x|Ô« &ï°¬V4‰m®+€-ˆ™i=½æ‰­ˆµH�¨7•ÐQÕ1-è¬hÀ¬SPÀEœ±wâÆûà²½SÚ4RŽaÇ—Ä£85|C
+aƒžÆB
+ÈÌ…ˆÇépä\÷ÆÞ^3Sô¤Ã­�¶–Ñgþ\Œô5v¦a[Hj÷¯�‡ž§àDÝñî¥}�ÝŠ¸ÉÞöüª‘ï¼Úø°DÏÖ‡ÀëŸìQ}xÍÏ¯	ÒÄí-¿…Ywã¿ÑNŽXeHP½ ì¢<8]†À€wLH¯‚_Hzß¬ð11ya§ú¼z]º©êL!Kâñd$Y¦‰d•{P\
+Ò²ˆ#W<ŽÊ	<<í…Õ“ëç)Œã	pw™Í”¡0ßK§£,“�ÊêäOƒ·‚tð:G/¬›(„ã®|8Nì£_Z(£îÁ|ùåò…CÜ÷¹79†“7¶IjÀE Ü„çä½*†‡äVìQî-aE^"8ëÚÂ?X"¨~.¯üuƒ‘ï1bñåßÖ„µ
+’Â?2À÷çôüï�E!ÝÜWÜ¹ÖQÄÈiÐ�=9ÉÑº5ôå¨èO¶Û|a7¢ZyÜ)sn_1ª|©-©îÕ§ŸêíŒ«bJQÂ²ÕâÌœ“Ê:a`£Ð'òùð��fGysZ�Z%ïËŸh\éÇ›R•hmücS›ßQSŠÀG?+ýÓÚ×A‡	²;ëá·0²%àDOžÊ�œØU0I²Ô*õJ¯Ñ³ôœ<¯µÍÃyæ†tCæú½cÞ}^Èä²™ŒÎŸl‘s²�ÉfÒ«’qŸ×¨ætz–\Öb˜ÂdiÞEÂ×“±›Z×P1gG¬#o³ì´=n9(iœÎ
+ôfá�ð+*B¿…þ®RÿÕ"¨‡‹Û‹°Xƒ!Ä1‹9âzrÄõäc,®S¹³¹�rpsîPŽVrÙÊÁ‘ÖÎ‡ÒZm·Jì>Ñ¬þU©ß'Êªy¢æÑI9Èª9#æíž¦K€Ç#8?ÙGÔSXgµÑØ4¨MTñj¨ÆÀ`PæR=Š_È±zkw,N•÷7Þ½ó£æ™¾¨‹3:�:ƒÞVìß‘.YK«Ý&8ÑµëxÃµñôÐ‘Í
+og­Îvµµ­
+ßllûôõ±L †LºŒQg<]¦¿yf­>Bðû=Îa!8N¹À±iW[þr»òBQØ‚ŸqzµkË÷QB-tÐ7Á-ú&üü7Ô§`7ìç¶Z¶rûèÝðëôðŒåwžþäV„‹3¹<n‹bòÈÒµå»HÀÏiŽ‚¬ùw›£osà.oØhUÞ«Ž¨¼‡+˜$‡æH¼Ècj0Ì}cÖäZgµÞwf]œÃ è��	;_=ã€>»dfÍ8†�ÕT£A¿Çuj¿Ÿ¼d±°È«ä+,`_q_ÆÀÖ«Éž%<.ô�xÑs¯Žµô7ÄªŽ-Ô¼™¥¹k·Y¾v«=DvW¹iwˆTßãÉ§�ÛJl˜áXÉ—Z‰¿¶’ÁðèÝ ½tŸâ?^ÙÆ´9üPÂ‘âÌ‘?T†ÈMWS¿�ª¨m˜éíP-5Hsèý"ØÈÞRÆ­¤gwŸtúŠþ(—êY>¿¶ñw?}[§oï&^çnc=Ð£ÂÔËH˜p#4Š"œç™i·tP‚n�“�ƒç)3<?«ø|ÀUƒoÌ8)
+oˆ6ŸÁÆK"Ã:kXµmàd0°xÍ'ƒ‹L7[ƒgÌ'#5Ÿ~WôÁIlX
+ìB'fNkKÖIyiC©ÑJCw¼»�˜&|¼h~ƒÆ	q4¶„´“=òÊ©ÑËžã-.þÙO~`ÿžâ±m¸z|÷ÞÓC�}!ç¹¯îáN´ÍÒÊí_—îÛ�!yÿ`¾Q?w>“œmÜYÓ÷EÜÛs�õô¿ðÿ�PSH2@¼ÁÃ1é+Ò‹ü6?!çÿ¿~ÿJl+ ü¸r³¿C<Po‘ÿÏ€“!\3.Áe`ivX¨(Ü5ý1©Dõ¿ìWMhUÿíWºÆØ®!ÕÚ–î“˜Ô˜d»‰¤1K“nÓnã$ë~¤µUë¸;ûAfw–ÝIC±P^Ô<x�Š`KéAT¼(‚ èÑƒô¢¥((h©=ÕÄß¼}›äbAg†ß{ÿù½ÿûí{óvnÜpÎ’ñË_pÁažáæ|ï]f Á‰|¹+š<_´ž_xëÄL[~!Ü²n*.Â{?“df;Û/T‹ß6Éˆ,þä�±kvrÈã›8õnô¡×fŽ{ºÆÇO¢y7�¹ˆª«ðàÝMäWà{ð_‹›G0	´2GÛeà®�×GûW@Ç§ÀöïV°ƒú�Ä®·7�=œOøMà~ö�@óìzv½! ï ¢¯ƒíÀ?"†Ï�¼<j7ðØuàñýÀ�ÀÁŸ�ñç�11
+¹Ä¯Ç&¯¹páÂ….\¸páÂ…‹µ/<ò»µ>Gòð»ÌÓ‚
+/Ÿêïl¶…îfüö{VÛ;èêÆƒê!:À/¾¡ýÃ«b‡'Ž�›|B›šN<™L!3süÄS'O=ýÌ³xnãñÿñË�*ÛqªAô ‚‡q‡1�4m/àÅ¥%zÎ²8H‹†$tÔËÒ÷kÝŠëµ/RºôÛº5mÅ4©_lÆ`®ò©™ù%Ï7Jö!ìÍ(ÙOÙVrå7”¼¦÷}ç—÷ßáäôíQ²}þÝJöb«ÿ¨’}8àŸQ²Ÿò‚’[(­dÖ‘£³dÉ@žŒdÙ\$Ò(JYƒ…
+a+/Af-2W•­N}IzjLÆG(Å¤^¿ÍLû–+HÑbbnÙ§N]œ}c¼ŒðŽ¢_IƒR;Æ“}’1Ö`Ë¨$óÕ‰Î°ÍqŒÊR'0Å~^úXÔéÌEÖïT—£­,×Ì,uÙúû3Ô¬©ÄQmY‹S‰à³ãc«¬ÎZ !ãºåxÛiŽ�—3t*tâf­ËÚ‹*[$}¶jäõ¬!.ŠtÑšU±lªÄ!«Vµjº]²*¢jf#"¦ÛúNûœd"e™sŽ¦.âÆ
+ŒŒDûÙFÄ˜iŠd©P´ë"iÔ�Ú#§Åµ±ØtoºT6êSÆ|Ò*ë•Dª?nëf)«¥oÏ,õ‚!-ï‰tMÏe½6+¬üº35£PªÛFÍÈ‰REØtÍ¤DB·E·Hkb:Ÿ�½’†Y7æ‹t‹üÏw‡Æ<}c\u½«öJc§¬ì“kHÊ5=Ç¬Î.ÙLd?}FLze•þW£ÿ£ož<I|—q£ÔxZ„¸Š2<rÎ·~Î¡ñÿÂ{­púÜ¯m§·�þ¼/(�žwÂâô~y©çVà�Wƒ7ƒQ>:g�<›þ`&t
+
+endstream
+endobj
+88 0 obj<</Length 22642/Filter/FlateDecode/Length1 43192>>stream
+H‰ÔV{<Tyÿ�™1î¹—uÜÊÝoFÈ]äV1.ÑÅ˜ƒ1³3ãî-3¯tÛ"¡ØŠ¤\Ö¦¢­ME­V
+!¼•¶ÚÈ¥å]iï™hwë}ßÝÿÞËï÷9ŸsžëïyÎó}žsX2„¯ðòÐsx;„qFÐH§˜SäQbÐŒÆxA6�;{û€’�:F¢-0êJÄä�a$7ŠÝš²¾íqŒŽ�ŠK‰ï»
+€O5+§¢™ô-í‡–åP‘�ù³ŠÆÊÊ³„c´^4[�¼`Eˆ3FgbçÄqt„yO@VF›°éÉ\Y¹
+Ì^¬�ÆÓÙLEAÀBJ1¹D=—Ã`y`«4S,çò˜\ÿ™¦\°óe°sòa‹ï@#
+»«‚Kc3i„¥�²<³ÞÈ#’¸‘†7ÆòÄ!y”#JÍIp†eŒ‰YãB‰?ôƒ&¿ã�J—d�€ý‡M€8 0�»Å¢Ÿú#(–¹µ]:4°Óý—oÆ¦hOÂuKDª— '¾ôqŠkw­üR´žtb#³ÚÆÇ¡ü¯q",áQòR¨EÄdT1y¬VT<Jã%ð¨/S�ÄáÅ’A5±‚¬Ê‚�
+&¨W<ÃŒl�æº¿Y²ØL4@@gsYñQh“—Èb0QG@^)sÚÆ¾TÔÛk•‹—·m=ºÊÕÕÍ�æ¶Ú5`ÚX£Ÿž—,’·±†–d
+ü°BÉÃ�­)–6–6¡ÿû	‹ÿÎ	€îÅÞû.œPî˜¡ãÑé&¦fBÒâÙrÙóJòÁ÷î&ô·X�íž”[11’3#-×Ñ§ú]ÛÐäÎ3Gwè?ÿKˆ"?&ùÖjÓ?„L~²©€0m¡"$Ýü"¯G'Ä¼§UU"Óêb^U�Ïš‘—v:ßnÕ>—Õ¸Æã`LÝI«ž÷Ò¦wêl¾Âá1@	<=p�cZs®òV%Å}:­Ýµ*ÆaÃ«d“�–m�(—ä-y²~¬5³WžwŸ/}¬¶ì�»ƒß
+ÙbnÐä>£m‹ÚŸ2RX’|³Óù»~QUÙµ±Mæ¦¢tv{m�AASŠafîƒÙ‹Q.ž'sèS‡žèä;MM¡fVvN+1PDÀA>¶�Cp8E©TöNÄêÅ¦i×ŸTÕ�ü?‚Ã,…²òS[ý
+â’�ñÉüS|ó™ÉþÛÌì Íœ…Æä±ù('Mà3Qº�¸|[só¤¤$³DÌ˜�›18ls—.’ÉË¡¾Ø¯²ä�³‡"Dçs‹€ñep"�©ôÏÏ–ãšÆô‡çÕ´Jöä8Ô/ÏÍTµy¾½Ý0—éY†§î¦–�×lê4_Ü¼ÿÕ¹£iûµÛGfû}Çß×ä‡\`˜î›4ToãîóûþEA½sßýa—ÀÞÉí¯‰C{
+Iä	¼B·÷a=£ššÙ¢‰Ócå>ýªå�³{›£¯ÑC*yÝSÐ“zÏœÃ@ïíº)J»¶ö’ÁuaôÐ È¹ÚÝ¶ä­“U›w=Í%4•™6“9ÐìA«þÎa4£YãM“…PØb”ÿnÛ&Û9ª}­f	¯Çb*Ã¯¸ UÔª°
+'r±²Ú[þ±%¢=ãgî8ovöR?³üµFÉÄL�Ãþlò‡V:.¼…ç 3Q
+›è’<1À@ø‘†H–ž¸(XM8>÷Ó¢ˆ9æ|]�À‡ÒXQ´T°&pµø%8@q�eÃ³<‘¬)7s
+� ÁGÇ8d!é�ª
+UÄ^ô	rPæ£	^
+ÊŠ™
+GlüSÀt‚Ê7Q¿ÿ³ž‚­ÜóÚKQÛ¯é¾Èv—¿­áse"=…õè=¹õ”ÂñìÔˆËÓqDP¦�›©"sýÐSçàëúÃ55J1•Oín�èNæntœ8pä†•­
+SŠÏ/£tÕT74KØÏº�~?|_¯³�qJºüÝÍþéU21ØPÆ¾b¿ÌMpì±·ß©Ôé8É}äüùà’�¡á\#è¸r¸)<VT´@Œr”lƒu¤‹Áãð9‘Ô•Ããš‘—@Òœ²Ú§�.`qâÉÚpé\c¨ÿ&OtU‚ šÃc	Ræ?Md2„Öó]M�dŠyžü/DôgMZ‰»|•;h÷ÚWÓ ø`ò&ø¬´r¯þæ©™|ïãçgŽ”¢ŽéëJ¿*Í§ÄvºlIyY�ØB»ÿúùá,RvqfdíõØÔÝ^-û‡
+HîpASƒidQQô²Â[“¹s!Ë®ºÉ8®,0©4°©õú«K¦B}Q\ ½Z”~,Ü4É{¤°n‹]‘‰,¥§Z\9´ßX}ÐáC5<D‚Y¬eí¿ãMùXîÍ;
+�nµ»2lGiy¾§¦ËSÙßõÖimœÎ²®_«,i4ö®,RFêd—0(xì[»M…I„û“WNeäÏœnÛÖ[®ÁÛ`óÒ¸ÔqXKÜÞR‹&©l4ß¤Px
+KÅèGÂ"(<˜¡ÖÁcñŽê®ÛªzÖgßì­c¼ÿ|ýD‚q¼¸†ùÃ²�{'ª[¾¸€èÝMRšØN)>*{ËQbÿÎìÛAí×ãÁLÎ•xÜˆ{ÿ·V;»ÐJ+kF�íÔÒZõP"ýGò^‡bEnLýŒ2U�Õø¾Ãµ_)¥>‹H«©Z|ÃØZßô
+ó˜òn}Æñ74Ò[í–^µ	ÿêxWŠä´hÑÔÓ¨8ùu“—_ù7_j‚ïQ²ôN­|C
+Ÿ-Ü‰W�ñua?óã�à—L¯fÚ·uxåÙœÞq©ì­^ÿÚÚd u "©?±tÄ8]í²Úýx•r…eŒfLŸåOÝ$Â@…áF¨ÅÊx’|Äy™Ò/ïôÐœÜÛH�'¹}Ê¶;$—w•`S¡û783ÿo#[Hm«”ºï:ýƒú2�‡jïãø™•Æ¾LY£Fdy8g�1È24vÊŒ¥”diŒ\tËLEÜéâŠBd)Òª	•”.)7-D”²¥u•%Ï™Ñâ¶¼žÿžçiþ9óû}¿s~Ëçûþ~¿Çkûþ/°Â€±@úì
+!N`çš §�•AÒÝ PŠß–Áyø†À1—
+Gçw
+É­ñg0YÁŒO+Ãýhe?Ú&?qþf›pÉÜ6æ[pÜ‡ƒ?ì»R,aj¨~K1>M„4ÉßƒwkÅ
+ÒfÉŠuãz1L#‚Óø]^ïÌÙ™ëHµ†Þ¼NÚË�H6õdÑs¡ìjMÒë�çËxdj¹±s0­%3§š››\+ž)jk·W7/¿Þ””Þc7ÆlL_Ù…¹3ZH7:­·±9Ö×*ÏŽf/!WáÐžš®¥†3ÊZ/=¾pR4Û¥2ÌDŽ|¢,žW²¯ÄÉEÅYª\?¶[ŒÌ`Y7ÔØ§fU*¿Çœ7j&ÝÒÛ“™qúx.$æ��eò±ŠÍ
+ÞŠÊúâY4”‚ù¡äÊ[ýfh6E)iÂ¸¯ô”mt�–ø&„¯qDðÌÊCB²¯«fðÀê#—ç˜ç±Ë�T±>µïÅWÔÏ�Iì‚�å'g@�o*‹£¢e5½/*^hÖ¾”ãõëDo£n½˜ÁrPþóY$Zt1pÂáR•XÎK(«@	Aƒ@Ì¢1 
+~|f6ž=™–»¦³/ÛFFžáµ÷É_÷(S¨)»èƒÌ³Ùjìõþ¢Æá9åLç?'%’K­º/êiÝ©x€mÒºüDaïŽŽÕÂfo–¶Þ»ÂÜÇÁ[û0v3ê‹è$v$ÙKTÜóMŠˆxÚ¾lVmOÚ~´;í@žy%·zøX<O‰çåSn7¹�HV¡�wêfôƒ¦;ë©©z%«í}¹f6ÃAÀ‘SV5UR¥îÏ§îçkqÚTœóéµI!…ùÛgi‰ÜjŽCaÞ¹ÍÑÅ‹Šš°W¨C…¥ƒÞÍL}y6Ì¶ó7
+Ê´ßÀ°ZüºÚ
+@o‰íº£¢«ÀS�qöS<©ËŠûi^ #Ãlbf8_!)
+ÀÿÌ?,¿ÄùY Á§4$‚ ¡¡‰O?}~†p¹Ão‚œ¼ÿöFˆ?r#Ô^öÓ¨5ÆÇå4Þh›‰8šïˆÔ-j*ÿ‹'VGf?L-’ë`îµá¶�Kf”æk»[
+Ôaz�ðJiÕwô±aŸÖ'�éÕ`×Ï›Ä–½´�ÑÉKãÚµò½¨,‘8åñc^åŒˆ²i˜ú)íFÍ||2ßY`±õ[v]H•Ê Áßã†8Ów¿{^PíòÀ–¯µÂvy5�uÖà©Ûå—î6±²ä£º·®{�‰Òœ¾æÞ˜d-¼—žØtSb•½‰—i?Pl‰m˜ðð½èQF¹C$ƒ�Šƒ÷)êZQÒ:–nQûS¯ÅàYßÔj»¸JÓ–e>^æ |ã‹,Þõ úî`æÒ(.Â>SÁU)Kðý|®�ø.
+¿0%èæ�Õª£ez­¹ÎìÚ ~¾2~�&È)æÛ	hNÈÉ‰ý.wòØGÿ¼ü6Á°ç/UM-Aó\³\“8ã�%�_è6]æ§÷*¯� @~¯^H(‹îÇÓã»ß[`OÑ…
+_y¹‰†„Úô`çècQÙèÉ¢ÒÛ3Eä›U½ý£¦Ü:Š2Šs³VF
+q©JKjd›ú·X,hX˜‚¤ß¦X•5+®/'¢Í¤{•‹„Š’
+vÚÐ#ÓÓRG“ÆmFB,*:Êé±WPõº–wâ¸â
+”gÑ¶ë+±	Xl¾Þù.sD¤v	Ž§G.Ut{{|áiés¹_+©ˆcÚõžMç¶ùÌ´êÔ³*	çÅfMÇ¤lØc°r�YWârÒÊÚÏº�øëç½ØâüÆ�{rP¢1Ù½q×fêú&��[1ÎíØÊ`žè‡M‹­Þ§îÈ?‰Ëi!HžqŠÑHa©×Lš!ÝÌ¾	�ˆAÂ.§ü§ß?à-Šž»V$|«¹œNPösÌ\Ž€„PðUÃãø‘ôãí/@A¢XÜÇ!H^ý—–$Î·âaÕ~žˆ†¤Ñ’k…Ð§[×
+Û�–¹÷ÛjãZÀ­ó†‹BÞàÚ\0V°B�@ÀØ¨«°áî€?Ü[ø=ª€> €˜§«öQØ‘‘‘_	›ÂÚêõuŠˆæ"g£E=
+F^"Ôr}â‹|@ˆ³Í=P“¡¼ñªõlE’	3~t÷Á´˜×h5a·[ÌÆ†y‹m—†êƒg”È�vDÞã„ÿî½Ô4ChMâ‡g%[úÅ¿y¥ËN]•(�îh+"6ës-ÑäÅ¥îuÂ8ïÙQ§ÁÕTZ5÷¾Z/çEÍÕŠsu¸¨ÐtÆé±ÍÜÉ·@œÒÈýc…„4³%'2ÇÏ;š>uM?¸wÂ5ãá>¼ù¡Oi«G´è=YG‰+¬¯œœ(ÈÆ/š çº™z¾º¡õ&ó×fÐŠ‡ÁÞ½Ñ«˜9ò–ØÒšÐ]}$|ÿí¬¨MÚ“²Ú2¥Gõ0çyMN]Ÿ,i�Îã"A.ÒöË-a!.Òî2¨º†¤"`"¬Ð…îþ¡�|%©ÒBÃÃØªÎþìHVh´ÄÏITüÓU»`?]HÔš3¾ÌdÂjdû2Cørtó�ôó 2‰s£µ�]Tí,­ìíh^ª–Š�+ÍÆZ‡/{�ÿüRR8šéÍÚ”êRU?Cy*+—ý•¦½@¹ùâùÜBÀÚýlÁ@ü|!‚Œô
+Ö~£]ÑÀ)…
+†²É)a„ðÇ±>ßÑSaÐ2“ÚÝ³ýFI).©¹´�ð¸s=è_H-ƒµ]8sžå¡O÷·-ëÖ.%õÑý#š]‹÷Y°¶&[uKÇHŸ«Ú.{|¨¨@<!l[–~M²·ï™~DÖ£þ�Ì—$<tuæå’­	´i×Ö›ö“0›G!=ã¨ý®­CL©l›ÂíIpL7g¶eïõ5ù7×ÅUU•ÝûœsïC~¢‰Àó>®0ÉEGTŸÀCSQ>š}$Ø$â/5üeˆ=?™KMÐtS1Í.„†¦3TÖ4ËKûX3þªQ›ÆµÌÉÏ;³ïC�»×½gŸýßûì³ßz±5)ïÍ~m‡Ã¶½}’vOy'÷ê·Ûùî¨ûF�(
+­]Çîj7²Nmˆžß©jÎ–Ì¶E;ö7˜[°¿yí�_o¾;àéü‹[nµï5`Ôä�·/Î‰ª»Þ�%ÝÕÔë7*2�œ¹>àfø›Ó³®Ýž5ùJ\
+€R«$Ò6²cåŸÁ3¬«ŸÂTÁÌG,¬^ê›Bàg~2Ëg”ƒ4yG9íÍÆDK
+68¥”&W9ôZ•=!b!@^¦÷Š¹zËä“o®ìGnº÷ÔÁ[XoÁ_àl'­·á04Â'é°*aTƒ
+“ˆò2ä(Dß€²úÂ}; …d'Âb8Ý1\^…%PÅO“VA4Í©,šEkpŒœùp^,‡A0†fÓL\*]r­\/ß€]p˜"ïBX¡ˆ Eþ¬|-ÿ	¤±jà<®ït�2ŸKIòušpµ¼@ œ&oQ6xžb�	-ØÌìd½.c8Vò4²²Sò8IEA”B-Á�8‚Ù”|™)[ ;ù˜OVk 4Á1ø•vù†l‡ˆ‡')ŸF8‰ÍÜ{w™w˜YhªRoLœrø3üN¡Žï³r%Pé¯8”…òtƒ~0�¢ÝCšÿÄ›l1Áþ±È�©LuyÕ¬6|ÑŠ}q>Åz³r¶�Ï¢sŽ'Ý~PLüeØLÖÏ¡±@ÖÊwŠ}â¶ÚÃ{AÓ‰ÄÂxÞÇ ÊTÃÙø"~‰ß±46…ma—ø±W|n)¤¬'Ãs°öÁMìŠI˜�Oc)Vb5¾Š5Ø‚§ð
+ÎÆ³gY/åü˜H%È³Åre…²J½âuy�{?óÞ”ýå
+È¦~XFÑo„m”Ùah…³çá*€ÁÚp¾@°×àŸ°÷b#y9…—ð*^Çx›�Ê"™�Eèl{žm`[Y+Á)öû•‡ñhnçy2ÏãåU5_Gp�_VÑ*$Õ¹¿²IÙ®Ô)û””v5Ðò¢ø}zgçÝ¸»ç¼à]éÝämð6Ê‹Jgh¥*ô„dŠ¾�`:�÷&ê¸·á4Rí¬‡)8†*3§cÎ§J¾„µ¸Ëû<JUú
+Û(æ å‹¹MþT6Ž`2+al[ÏÙ—ì·ðÞ™‡ò8>‚ð>‡/à›¸Á?åÿà—ø/ü�þ¢§ˆ±Â.Fˆ)b®Ø&.‹ËJ¾rBùAõWŸSW¨Mê¿-¿³¤X²,Ù–Ë+–C–3~nêÎá ¼=x�/ãN~Ö²DÁN²“ÔÏS ˜g2êTV‡+Ù"ld½”ùêP6ÇB»ˆ¥ZÌ¶³_ØPž‰£1¦³~ÖÔnâMZ’Å‡pM¥ÜN’åùj .fmj 4 °Áäó#þ[aç'à~-b|+ü1¯±=<‹ºà˜HQ\`ã[á¯ÀEp�9üoû­¦>‹oÒ\�ýñ?\gc©‹ñï`9<Ë¾†kt�WÂkX,¦ÁZHÄJ¸»éVôVf¨qj(þ�•	{�‰½”Ý`ì…\é/a¯UÛØY˜­ÂÎñý}+;À3E»’ƒ¥tÁ
+¨�Ë`�âŸã4àøÄˆ4Ý*ya£u	M•|ši‡èv¡90œg%œ:gõÅšµ›iNê 2ºãiŠ�„Fu<k‚iJ0ÒÔ'¼90Iî†9
+fÈõ�@ó ZV’Å:ø^�:¬ò¾3áqº9çpŒ’ÁZ•™À<ì,Ëe›=_ªv†Ã�h“¢¼ñäÂ0¹Z~AÝýMØ˜
+£à{Êògò0’7C¢w,«—|&å{²åÙý¡TþÆÁQØeQ Ðbw¤M?Ü1,å÷ÉC‡N4p@"ý´÷í“o�ëýÄobczéÑ6­çã=¢"­áaÝC»=ÖµKHçà ÀÿN~U¡?ˆñN=Ã­±nCÄê#G&˜{½�…Ü†F¤ŒGeÍíÓ•t�ä3ÿ'éè�t<�Ä-’â5§®-éºÖ„“²]„¯I×ó4ãšÏôáë|xá6)hÎðÒtÍ@·æ42æ•zœît2WàŸ¦§•ø'ÄC½¡„aúÌzKAÂÂœCêøQP†UOwzº�Ácœ…ÅFV¶Ë™i³å%Ä˜V¤O5@O5:Û}"�æsc¨i†ÅçF+3³�UZ}|³guSLuÛ‹õâÂ|—ÁóL]ìä7Ý[ø}øÿ¶d¼kš«úan$÷8ÃË4sëñTkÆ³]smæ7/�l�.‹Ép{2Èõj*âè\�¼±ª<—�UäR331³êÈ¯Dwš÷tÍè¤§ê¥žén:«Ç€œ¶«ÕqX^«SóŒwé6cX¤žW˜Uß
+<9Þ‰ph�râëCºt¶>¸ó=$0èa¤äÏ‡ùÄMltÎƒÊ¢‘þ$5„¡i‰K§œ’ÌOIxŠ’HŒž<$-£˜N¤Ìè”æö„1é¦¾¡Ä„èšçPè×~z”Rx�¢Æ„Ü5ûäA«ÿ>nØíF\œÙ"–4:SŠ1Å·˜?¯‰éúÌ�*dQmó†ô¥òÛlæ¯jrÀTÚK³]{
+¦F6€£¯=Ï`n“Ó|Ÿ:Áä,½Ïy îÖ©“ÿË}µWU]áï<ï¡\¡BIO!`xáJ @RÐ�w¤%<j©‘J¥ZÛA	�p!�Ö&Ò$ÅB:Ü`¬IÆV`FSì(S§Á¶Ò‡�ÌTÓiÕA;‚äô[ûœs¹¹aµíŸfî—o¯µ_k¯½ÖÞû´@ã��
+Ž�ý†„F$-Ý4?ª�ø”ê¯¸õ¹ùé¹ye%©K#åžoszInýÜX�WŠ&e•)ºWÒSUË \k,BÉ ¨9Ž?[õÆÖ@�Q©4Zjv4T¾Üý_:0-í;µ:ïI/E×ºyfFçOî-¡—ÜË¼AƒóÌ-(‹Döªc¨¹®ðˆ�‚’´Ô¬(
+™™ãøkuNÏ”¦DÃtY–4`ü¹*OìÕ0Å+—òO¢3cJ6ºH$;=5;RY×êT®OO
+¥GÚô³úÙÈ–¥å~à´:í{S¢ÙûJé«MÚ|&…ŽÅÍéZu^sX«Î/+i©Õ%§tMÏ*_\Ú<–u%m©@XiuÑŠR„T�«q‘§ô jŸÒ*U­©JÞÐªAé‚¾NÃ†VÝÕ…|�N�éêÂJ'rÆd”ÄG�JÉÒ¹Ê€ÀÂžUÈ
+áòÉžñ!¥‰ÿ³#¶§’w†‡¨þ¾lnE2±"0ß²ŠP¢íF™Þˆmc4Âæ	<À¶�”ï ·K_¶/$þL, ŠˆQžn%±ŽÈ™mÛ¤/ÇØ"ã(ÞŠ²àÜo9W9ß«÷GXn0ßÂq{6S>Ê~Ïó3mŽ´aŸv#j©?Ìú
+Ô!—P®gy
+ûezå�~«‘	›úIg¯·Þ	ÆÌ6·:op-¥3‡ØÅ9î"g¹l“D^LìÖ:P­u8
+¬'£Šóï=±Äãåg'ë±ßXÊU,�¢6y‘FLÔO`ž>Ï‘§qýÅîº‰l’5ÇÖDû=›úÂµ17œóDº>Ïé"ˆ³-U	XaÌD%¹‚H!òô—±Ùü"4úë	«† ˆŸþDÜnnÄ*ÊíÌ·ZpPdb¥ÂVçªyuÆ%ÌeÝwì\ÇFú›/_ý#LÓÿ†{¶3¾–püÄŽùWQÀù§’gš]*†vû8×?|?‰o(ïà¾®æ\Ÿ%†‘O,ã¾T÷‰=œšø\ö]+ê™Ç¶o³ÍõŸWàÚ%&¥�ôçXã¼8l¸Æh`›úõ/d“H|¨8óÀº9ÎHÂ&FS‰.¢�¨ æÏ978¯¡â•1#±©âƒ±auÐ‡´MÅ¬»†#j?Ýœ©÷Æ’yÒì¨ð�&cJ¾HÌÒ–flÉ)‰ŸU|WHÜkïË:%¦bÌÜ3»±LlP9ÈØòYòŽ6K>ÐQM>È8®’˜û|¿H¬)Ÿ0'<^·ÖL•#dH÷b½Êgß1Þ„£³Ü^Ï3¥ËÍoòíý}¬7ßÃc¦Z™Ôq=lÕ»±:Èw9÷òNÊO$p­ Ð©Ýk�æ:›èÏN<IŸ~ÃìÔo5;5ËjrÞ± �³šôGU¹'B;íÖ	âëþ]ýg�~Ájâ™Ùä¼ku:×ó¸äD [Ë$R}¦þQIÜœ¬Õ+´Ö@!B6p‰¸ßc¾Æó4÷'™ç<s�úBë
+<oÔ`�Ùéü^«D¥Þ‰]�d¬ã÷Ó™K¿€*�ŒOÞG½b.1–|öã5‘åÌ÷bjÙfþ½âám2Ž~¬¹sÌ‘óYÝ<£‰]n¼:—cñyO‘÷úñ™§	ñ9(1.YÝ-<ßý<¥{üõËù(gœœ‘rÎÉ9ã·Oä¸þ½‘q,çðË(óòúV9´ñM/÷ys¿‹ÇÎvŽÙ-Îqc˜sÜžÁòïË9Æu?»SKœï>�äß¥®7ù÷¨5›½óì¨:o>ÀÕ=Z¤ì`ŸÄvë
+÷�g ²·ÎËAú“vW˜åôùAìã:F»™�ÔkÄ'j/€›å^�;ÑØO?Ë]Tƒ*ãu¾¤ïLU÷Å"ÓösJÇ;UXtV1ìnÌ0yÖžÆFÙ+Y‡Ø#{|ƒƒÉ<':1Ýü)Û$c ÛÕ)„qLÅ…ô­Ä�
+0fW±�ŒW¯ú„1ÌóÇQåÕŸo‰/ñÇ´“±Z½'ºñ#«ÅÌ¡ú@%êíBæ\2ŽsŒ§Ø¯Pla¿Qê¾Þ�»™_Õ<›ªyæ@Å™sÅhâzæ¹N•ôQn¶*éÃ
+µö%¦{Æî–ü11^bÄÞÏsXÞû1'c©]�êj,ž“œw/u�13™»{ØŒwnƒsï¡^ú.’·Œ¼$_a$Ù•êeƒ¼S8¿ñê�T3Žïî§v"ƒ÷…ÆØ»…˜îBÉ�zØçBéB.kiF�(ýL¼ª771nåm3wàkffÓ1ÒŠó7ÌÕ�qÈ‚µæK8d¶bŸÈf&|¥-|[Šþ<î½þ*åZ”™Ø¿_7×b«ÑÌØû-š÷p¯ÙÏú.ãd,ûÀq=ho¡Ì(bníbùcç„´Ss´8Ås92T¿8([}$Ø¬çÒo9ÜSÚ+å^öÒÖ˜�¾�×±O­SÆe?icÂÀ¹HŒs¹'O¯AQ§ÿYÆJ|[;î´k‡‘­u‡=üË7y¼ãgiÛˆ©æ,<Kì`y
+ù—ÄIWæÛm^'vrì3ä§å»@ /ÆlaêŽµÄ¯ýºxÈ\×ÓÇÃJqÚ{ÉÏð®!´K\Ã¥ÞujÎ|—Ï"nwÚŒÅ�½Ãa¸1�ú[Ø/A¶R˜OÏ`löôí<2•]„ã×èïyÄ
+àb§
+{wÃdßg÷w;ñ%åß¿#Ù�!|N»à\$i2d”3('ùþô÷‰ú(}Âþ1V`Àùg¢>QNÜ×þdýi¬�‡±xxæ"¶'åà9,Ø/°î…¾²y¬”á6ã ØÄœÐW¶ïÄ�>–¶Ž’>Ì9"&ŸçAH[Õ0–	Tîz¿×ˆXý,,Äùu¶øÕ8èÖûûãïKâþÐ¾°ù
+V�Ç“ç‘óÉ9>ÇâÛ;/zÅ|žï1YÎ’®„6×râZnœ—»æúcþ?�¹óÑA¼ø¿žKc•öE¾CñÙÉ÷ÉÝ¨®ò,ùdñžCä×¨ãíÝ3‰ÌòPê¾J~¸ò!ËPßéÂÑÍÔyïÊ‘ÔýÜëôÆËwû_ùpùqÒí¥‘¸—å÷‰GXþ#ù¹–íße¿ÇÈgÝú«k)?D<G¹›ò}D	Ëß#'“§IÄ0ö? �÷HŸïÐÿ:_ÿûãF™o–
+´s¹�¼-ñâ†ÙßÏ~8ñ[ÃßÿþØò¾%ú²ë~3½Éw_4þÛçÓ¾q|æ~öÄÃ,t®òM9HÞÑò–•÷³z?z¬¾ßþÅzÕÀ6qÝñ÷Þ9¶0þ $)q|—/SbJ¨�…�Ÿƒ½@­)�fg�„�H:ÁäR¥Â1
+u¨… &Ñ�I
+BÓ´®Bœí6»�JÉ”®]³ÕÊ˜F[J»I£ÒhJíØX½ß{¶PF7Ÿÿ�÷ÿ½�{÷îýß‰s,ú%¤0§1ž|~~ågg~~…æí?kÎãYƒqu‹qeóÆ�{+½N^@iVoç&›“>‹ÜdÇžzgÍŸsˆÜÆó€uNÄ/¤‡9úü2è¹œ–Û[ïÙc§Èiÿoÿasä×È©þ,º&áAå9,Éb%Çä\ü°˜*wí\þ€}gžþ_ý\žÏaªsé=ç€)ü©Ú{Xò¹ã¡ýIç’œ?÷Ä'¯½Üyf6™=�IïÝÃ‚[˜^½}öÏ�aò{<ñ¾å¾ö’ð�À>ðh6‡žÀ~±(�£ÒGP¶Çz‹ø­'‰þ«òæWW¡7ót?=Hû"ýoø?€ï0�Üh›§ZÏ“×-?Ÿ‹ó!æLìƒ‡ùøI-Ð¸€ð½Ü³æß�èûÏY—çš:Ò7Lg�IgÀ)õbò}à$|;|{¢Ý¬�ŠÉ8�$"CÖ-@ÐôfbÏ–löÃÀg"¢JÅÉ#Uê9¡R[ŸòwCÆí\'ÜÔ·cý­UZ™¡-ÍÐ_”)žß”Ñsæe´«Ú¯q]`ó�‹¤"òÀÈHÊ^ÇÎO‰LŽK³ˆ0Éœ-Q%WªÊëï–L„JL¢d3‘Ó#MÚœþ`K³qâBÎÿ”]ÍDØÕÔ§¿?ø$û˜œ†‰}Œë#ö>°.ãìæ€ýÀ0pÌì2®q]b—ˆ�}@j�ÐôÃÀ8`a@:Øûü{SHnÆÞ‡t°÷p[ïAÚÙEXÙEíÝd]½P¾Ú¬!Wg�âÒ¬á*òìÉ›seƒý%¥øäãÁì<Ñ†ÎÎ£ñóDZ�n``†uÖ¢‡�ã€˜Q_Ž€ÂÆ€·�d ­€•½“D7;—ô6ÉÁ"v–½IŠ1©gØï„~›½!ôïÙo…~Ú=ÆÞHzdœ†8A´ºñ<ö›T•KN�lÓ#CÖ èú3fÉÍ²�‘1re–$ŸýrÂJÔ­²ê]Ž5¦pá]ú,ˆ~¥ßËTïÑŸÂåÂ{è,.¼?|Þ§÷ÁâÂûÔ.X\x7o…Å…·£Þ–vX{ñ×Usäº–mT	ÚÙnÌÒnÌÒnÌÒnbb»ùEnšøØ~–¬©ÁŒS}skdí4Õ^£Újª� ZÕöPmÕ©¶žj>ª¹©æ¡šJµ!ºS¡Qõ•»Üzµ„jcT;Iµ8Õ¼T«¦ZÕZ§¬<¹r¡Pa¡RAþ^A?±ÌoÇË1£åXÖåxí‡!Ïiá© )ò#®+R5�Œ?©{pEÅQ<†Qò!`ÂÅ2E#£hÀº€`Hf°+0ð>!í�µ@èöã€Yg`d{vˆ§ÄÀj³ƒnáÅU�«œ•«e·ÃçX!õ¹©ÝC[<i«#EE„—Óê4¨màKÛ?¾´‘ü`>;ÄúHÄá¬îKÞ,“
+ú“¤wHÎ¢/�	«ŽÖ/­†^BâÂ_LÜV®7{ÚŸt¯E5{Ò;O>MgðZòM÷_åOÜƒyÅ=$ÿI1L4)ÿ%/ÈçÝä·j
++J^óê´"¨ƒî%òÉ1AÝ‡À±¤¼‡«ùw³¼Í-=™Àú8<Õ.¯övÈ+Ð^È½QVãhs@¸×Ë�Öb^g@^€!ø2f
+;×-:­ôˆ×Ôt‹:ÏrÔµ´X¾añ[æYÊ-²¥ÌRj)´º¬ëëtk�Õj5[MVf%ÖB#}Yõ<ºB³ƒ+þñA‰IØÆ%„Ø×¨•‘'‰>SŠ°H[�è#›Hd£¢ÑViÐ‚Uz^eÕ]ioÒ—ø"†%½Z¯óEtKëw¢	JÅPª³”´G
+šæEûKu×òè ¡Ô¹ÿ`)×�î?‹‘’¢]�’€k™³þ›¡ûˆî¬ôÝþ•Üe—éG#mQýWe1ÝÏ�tY,¢ÿ¸MéŒÒÏégáÐ ½ÆU,:(-£Ÿ‡WóriY(‹t­à…^+æšàY=Dá<¢X=Þ±¯õÁ«â
+¼ü|R-xÕùù‚g¢œ—ˆW…C‰ª*Á)VH\pâÅÊ�œ±jpª«§H#c‚3V¤qŽ¾LPÜnP<nA¡³‰[PÜt¶ ¬½M©ÍRLPˆž$z›ãÎpl—sÛep|ÿí¯§Éç£©†Ø¦ÎpOe¸»2ÜtëÏíÚR¢k%±)ÆŠ.y»7nÚÂõ†=VÙÒ7U†”DCç}Â�<ÜPJ�Îp{4Ñ©ö„’
+jC¸rC(–jn]TwW_&úZÔzŸÆZyc‹x_Íu÷	×ñp3ï«Ž÷UÇûjV›E_D¬ñÖhÂJšbË;3:Å¦`½v—–ÇšŠ;–‰ÅÛP^²§ô4$¿$Ó|1}ze“nxè±àcAÂ;ÅC3PlÏ†Jö4”—â´ž
+9Pì¬l"¾Þ�ñ�¤$üÝPæÇE½;ù„g¤/þ ba]ÝŠ÷ÑkÚ"z`UG4a± ´›ß’¾4W6mZØH�d
+ç£p)/”¤	"/käeùùYâ½ÏgV/ço�Æ†RTõÐ^�Iº'ÒÎ°´wà^;;¢§q\âé!Ã
+Æ©�Æsmˆa“ŒMøýæÐ»3keç¡7«3µP%ž›Ž‰Ÿ%¾Oa¿ÊÃ…äb!¤ÜYî¬†ÀžFn)ÒÈ-5�ü‹(¦±©¥ÿÆêóÞ³m�HéKÉÂzf¤/©JaýeR¿t
+§Ì]„‚�†%R ]!ì
+5èKøª0¥ž.ñ9×¯:®’@c ñÙ¼ù¾uÏ8^|]çóÍ¢)}éðWÑGòþþOÞiDKÞñÐ7f¶¼=ªæ;¶’™3ÍklFúú+N§0>UóXžÂ<�‘¾¢s‚ÇÃ£÷D<Óm6Hƒ
+©ÓYAq±";þCyµÀFq]Ñ÷Þ|wç³3ãµ½^{×³,¬?ñg�í�7õ´‰œË‰…°Ã6PQ-Mƒ¡¥mP‹É“�TÄO-n#‹Ÿ!Ø¦Å¡VSJ-H¡DQ�Z›–*n@ÂxÝûfl‚”JUwgî»óÙ÷Þ½÷Ü{îê„˜ùº/¹2Hå *¡>©¥r ¼¬4÷y° lÄ^Ðryt2½ÎuK22HSÐKïÑ¹�ÃÔ°|·$‘&P>³TEí¿¬�:ëÑÕìÅ¬Ê®†ïãÎò}Â‡âù<ažœ”¨«äo©//g¼aœ1†ýÃ¹£~ù¬ô~ÉªhA�ÿÍä(&¯#F×ä¨åº5‘çÿ�ç÷æåùÅ<?DEôç1JP;M�xVÇÐøNR�í&²{möeð¶
+Wà>²™HÃÕ–¬Ÿ¬%KÈKdaI/™	t¿õØˆßX
+â7¥a„ N$jG&RCº‘ÇT´«�DU)\ÄËJQ5|0(…Sk’ÉY™¡HUe%s+"á¼PPY+ÏÊôò¼+Ü¯"Ù³ÞÝ}«s×úWöâžŒ»]{êð¹ƒ‹ƒ]]_O,ëÿéÀpËªí{ßÌ¸øÉ¿ºþêÌ¡Íß,Êí6±ÃÕ–Érˆ\„O°Ló¬›$JP-"&`ê€x`'Xq'Õ
+Û¯$Ò�Æá(+Í˜Ëdàìd’ƒƒ÷"BÿórI®fVñŠSXõh¤	`ÿE÷”r·›¢‹P|$e™orÉTr¶,ÑJµâJ×Rm3Ó¡�ç~Ç÷k£š$rIÜLµ•ÒQí¶|[¹­ºX™UX•‘Ü.ŽeeEyA�AyY€Ìƒe,�,“&d
+²†¡÷2é=Æde/üÊä81È3üi²Úr!Q¾iLH/– S�,C6Ñr�™ßÈ^d¯±L‹Yè†,©Qî®ÉL‡Œez­y„‹Ù ´	DØî¹ú±ã­8áð�Çü9ÚÈòÕ&ü#µC	mšÉQ{û#>{´�ªÇãíÚÀ€:0ÐÎ9#$zýQ	jeje7ëaD¡ ‹&ïRŒ$ñšÖ”S›ÂPÂLˆÉ1‘^`Hì#²ðÓ÷&öøÿ{WÝŒ¼×{¯ŸI?AžÇ;z~øöZ¿v@½¸	‘Ò¡©-Æ=ˆ…˜<)I|ËÖ…›Ã-áµ®×\ü·ý?àV»ÖJ¯r¯J|A–‹ñ³.W†,..*By� ø-J}^Ö ÐüéÉVÌãÍ yÍóÔó¼HgçíXó^Š~Á¬ˆœG!»é{2ÅE&}KöÏMLAhÒçÓ±n:¡­ÐwA¹×mÙQxªŒZn:/JEkÓôs”‚Ì{Æ¾h¹3UÐ§òN¨1	m"/ÑãyIK,LÓCåY4Ý*UÆ¡r'#a¨úåU_#Ž¾ƒD:/¬mYñúÖçÚ>x+½?¶±úéúºWö¥ÿ‚_|!òøó�.øÙ[é.®7Ù³ü…_Ä
+Î´­8¶´Œ™¯gµ4Ì{©h|¿ W¯ª›ÿã2ZÇ[&ÿÁ­Þ Ë'—‘ïvê¤mß?­%T3Q¹²­Fß´¡×h7÷ós¥‡éV>T.¡¡Àí€®=`ŠùB½8ÏÌRiö>—Ùœ³’[Xol1v3»ÔÝy�øéÔÿ¬f /òk^ÍÏRŠ:^‡5û­9…qÍƒ0››”™Ü ëÒ"ž§QÄÄûó³#¦ˆE™îFÌ	.o?£Ý‰¦FÀÑ i½©ÑmgBR­àÐ(^ƒ³y6<c&8Î˜+g³…­l$ÓkdÅÊ+Ùîs�¥;<’þxÏüø¹¿âÙ5gcç¶ÿòï‹_¼±éÝ¿Rvküü½?
+ã¦c×/ÌÙ¿í`úÖ;}é›ož¡žëD¿ˆv¡·­(ÏEq«€1,E(…½&1%BüëúŸÐ²$[ò”ãÓ_A˜»fÊæiŒ5Ø K5A©t`•¢¸*+e†ì³“ùôþ09:ÑÈõv¥íšh�=œ…­o„]3è�'é.	¾?QýX…=Æ*œqN©39cx–3‚ÎèóÛ£U¬h&×ÁáÆ„R¸íGG[‚,Ôˆ®¡QÄ&Üì@Œýºd›ë›rÃgÓnø|Ú
+c–æÔQÛ
+Ù«É‡²
+z³ãmP,SÉÖ5‰‰Ôt«”û©Ñ1ýì9ZxÀÆ�ñ°Q#CN«Ð,<æ¸XTÝ¦XŽ¶(…T“
+ú˜óÈŒ$Ñ%©Ht·ÄÓÝJÝ¡�:Eß’4Øì�î);îNÛqß±zˆè -`kýýÚ¥Ký”~£Q›Q”;Õ0å¶�¼-[²¶äl)�YaªO1AÔ/yÌmKašæDJ:ùT‹pX6ÝF…ÇœÌ ¬JH1qSÃél¶bOÒGš‘¾j¶”)üñSàs¦E˜Úr§ gw†	Ç˜”c�ÓîÚ2×Ú€ˆGô’\‘]'o’®”çÉó<L;K™­.d±ë”©íŠ(NŒ+•ê³¤žyB°Äåª{'ÙÅìvˆ�Ìa�7ˆGUK9âå8"B�XÊ‰ Šò|Ï|lqŠ¢Ë-žTU£qZj´Äè%�HÁeÇ9S<�Ë,·ìr›–¼AÂR/©b	ž�Ó@·.d£gµ†¡÷j~ßä–rm@”tžÐks9ÀªwR	ßDÂaTÐý.†RÀ¯àí¡¯X—òlûOlš…¬/éô×Hž^…–åªÍ¦õGexVÏz�2y÷˜ê¦wí¿Êä•S¡¸:;‡¾öÊ©ª¸Z^e«'çÀÝ9qÇåIàcÔ
+�[2		�³²+«pHë8Œõ�x&^Tš•3/Á\_ºùHz!×;þÅ;O5îaîß«c/ŒÏe¯�›Ð›íƒ6™¢ :nÍ^®¯ò’z­Þ»H[äe%91@Ù>§žÑfMQ›Bç+—Eô›~‡ß§ü¿eî«Dšó0‘N1ikÊáÒ….AËåLJ™ÙA(ç$ÒA§dY¹�mkøî¶äçéóéÍxý/÷à&®+ŒïÝÕ®$kßÖjWoYZ­,Å6’'Þ$6Æ`^¬æ�AhL&
+Á` M¦Ó@Ò¤I(3m¡¥�š8.0SÚz&I›2éLÚÐ&M©CÒ¦L Ó°Ü{¯$p§ÿÔöî=Þ]éîîýÎw~çü+ÙŽÚ§óƒôY^îÞt.?>þS
+zª{�ÂÁ.‹8
+)–KøÂàŽY!;x ×û–WÛ6aÂ¹…÷V¼×¡•aÀ�
+ØRà(òÈÄå!Ù“†ãõ¡p,-¡ÿý±´X…âÏÿqÈoÎÃëÅâˆÎ›í0ˆò³|³BÝ¾M¾­öÇù~aoÙ~áw\>ç?Dè!IpJ’ 	¬]ö’W#£ÞˆÖìv—êqTd¾nôÒU•¨ãõÔ4Aàmƒ™AÓSi©ÔB…1D1œ²!}‹¾K§ô°öÿ®1S\ã•Öøß¥5ŽLÿñÿ”2¯qÂ=¦!RB)U\ë<a	÷0…†¾Û•Nú!ŠÂ,³™BF§Iò4”% ‡sŠŸøØô¸3RØ�‘áÆ›¾ŒvÂ-7¥˜R‰®I¦ºÔòu	åÁÒÂ]QÅQòÀè»;ûû9•�7ÝÙ»8Y1û¯àèÞÃs�Ë×Ðgç½Ýÿòþ¨>w{>jŸ>Ôè°Žo§R
+ýmk5tO|fùòV
+©˜±•ÔJKµÍb‰Æê¨ŒïaªÝÚáo
+¶è3b©.k·qå`9A
+
+zßz)ˆ–£ÄJA/EáâB-F)ˆ¡J;E•œ¡“:‹ÖéHK´µziè‘Hgt£c=·�_íìÑú;¹�Â“âv½/:@pr„gÄ½úžèw¸ÃÂa%P¬eÉ
+Cö»AÄ=²ej­AôÀäâ’ýÞA/é�º¸d QÚE#ï(tb�¤=pQ˜Þ�‡³p+YÜ´V_+üzÍdTç9];¯ÍÊX(’Q=�Aøò&=&’Ý³Ð‡®¹ˆ$&J\ÑEóÁr°<0N›åI4%šÞñ,»AÄA|dâ‹3<OvÆÑ­qèsqÏTøLÀ�¨ SrIäòÝ†O^„rÁ]»r4„1„úâ5Lÿ÷°T„´2†v7ÑA£‘¬ÙÜ=ƒl®¼!@¦
+j‹zÌ0êÒõõ)¨Ê"»*NÕeQ±HH¶F÷›Ü£o?¹ùÄÂùÝÓó¬[ó­¯¾{ìÖ}V8yüôÑL#øpÉ®�·¿ÿVþÆ‹àbï3‹êki]QW$ŽõlþÕªuïîæ~{÷²y©Ô†ÊéoìØ~±oÛß‘Rk`m8]ÑJšMà‡PËÐûÙ7*t¨o2!@VS€‚ñ[jØlEoøªÔ8].™Ä�’)äˆ�¾Ñ6üâä
+¾NÈ³cÙ+È
+Ö_[¹¶‘-Yž÷[ä½4wòä×7ÐÝº	Âºy8ø“iÄ	CŠË†–!ê¥Œ\¯µmR»Ü¦-!KKäÅšø‚í�,J7%�;¡¤é4ÛB·°³•Eô"v™²Š^ÅnP¶ÑÛØ'�VCÉ6øH¤
+¹g3úA«‰TšÉxÍe�¤ÂXm6º �ã�u–Ë²âR5M™h¢	-„FV–Ðh.UlöA“$$g'„FÛlEs*Š&³v{@‘a(K¬ „DÉ)Š’lgmšB’È$¼%šÒDA°Ûm6Þ“&Ë’DØ<ªê´ƒDˆ`á^�›IÐ`ÁpµRn÷8øzÁ€³÷œq6ã÷¸6·µ§åÊ]ï-�
+ò]ø|RiËdöÍ™Œ9ÿ=À…ÛÇ‹££p×4ZŠ&ï ÷�{$È=?—Ë4˜QŠÂƒU†ˆ‰�]Etâá‘!Ö¤MxL°5[RåuRå2ÊSwŒcà•üoýE÷4–õ‹÷çE|É+¿É÷žËÿ.fU�ùwè³wš�<ÿ¥N}<îÉ_½qðõ3ÈAÙC¡ž¶ÛÇ IÍšøÜâ³<@T
+dÒœbçìUnÎSçªª ¦*
+ÞiUíUY.[µž[Wµ¼æ7ÿžë%ÏqN©DÅ•ºÒ=®±?tŸ¨vŸ«u_¬|_ù¨ÒÖâä+½,cãÃöW‡êl'Š‚jPKL©Jg,™)í–™S±u%VÛÖ%v°ûØwØ[Ü­„Ô�æ�E¬ÖÓêÔ
+§öh|sœŒûªùfþYþU~‚§_åOñÿà)žEYÇ#CCIÈ£‰Qd:y¥ÏÜó>J!OkÏ;}>+�.òà”l�•MõQŽø
+qÁàl�VèÈ‹èj¡‰Ó-(¥áÿcðáqp¿üe?ŒðDz)×õr™ÉÇLÂ��Qcœ2èâ(ä¬°0}0ŒƒZtÌä‘tMæB†|-2*º·Ñ7ªQ-\­ÿ’¹È�A¦™!C‹‰EÃ´Â¢›a0^2<&MÎÔ6ÞcÊ´å„myôµ…$šÆŸ~Šìz,Ñ|m|LBìQ¼>W(J\��ec¯ÎÁ�ÈE‘
+c“nÀ¿ué²ikì»¶KQœ.5bPŒ•‡ ê‚Þ/¢šVýbý©óm}3ë6\ZR­ûŸê÷ŸÖzßÜb¾hWÃç}êc£›»§nZ·ö†OçŒŸì�»{®“ç<z´¬7yWNËœm®˜ußã×oï½¿|Té+çTÏ\¾lÞýß„Š€ŠB?	?Øe¾hVÐé:º•¦›ƒ§ƒd0ö¥|ù¶Ÿ2ÓÊ›\MžW‡'kËrK„¬ëžõ¶�ÜZ¡×Õë¹ü�½¤^r_.¿ª^uÿÍÿIp"èÑÕBµ³†nLºC˜O¯¦/ùÿiùZdE…·0$áõÁ¤,S|¼CÓßsÑa:–;v9,A­–kÔ¡á•Õ";_ÇÂ�ÄƒO°xÐ³­§c�RaÁ¥#EEIò€Õý5p\– hóPqA¢…ÁÓ�ä°T€ˆ>
+d$€¥P«‹†/u¡©�†æN4pÚ&+VÅÖ¦9â8<û½ƒ¸ÞÃ?	é)Vô­D®""¥$XÅa«"‘pŒ‚E<…»(�üÑ™­¯?v*gæÿÃuõGQÝñ}»o÷ÝÛ½½Ý½ìí&—
+—#9Ü�\�07²˜Õ	?‚„ñ4¢m!) ¨H¬XQigt´¶%ŒÈPŠ’„h�Ò’†?,L°fŠò£c˜‚6ÀPŒ
+$é÷½Ì8Éîû±ooßû~¾Ÿï÷ó½öçKÄtÝ/WîzoÅÊ]òþ¾¯^¯yýãŸõ_é?õ[ôæÁºWŽýýø‘c�íj.J=¯¢h^›È³X:´Ö@††|¡VX&H{É÷°†B`§'üô$ÈNOLvzÂ=üØ‰#9•r8;–]cFúSiÅ¼ª¼*wVÞ,·!¯Á}G|Gúµ¾ÍÜ
+ôu±ø”´X^\¦7ëÛƒÒ�ÔƒA'¸>ø¹(…†>f,5Ö’� Äø«GlS
+°­ÍB‹p^¸*PÁ04á»=z°õÒP€Ç§¡…p¾R-ƒŒùÊçù�qL¢“¼HiA12‘ˆ$Ä•-"<¼’1…éÃ·Õ ’#¶©zVI5Ï2ˆe™ž¦ëÉž&~v »Uy�™í†®É·zä2nV:ÌØ]ýÅ�“2mEW>8ÝÿuÓ¥—ßÿ,¶»`í¼�;·­[üzÉýc*Bê.$¾°{ká’úç©¿ýœU™S³sÀHYçoSE¬'ô´þC]®°+¼‡ÅÙêL{–÷¤ø¸¼�.°¼ÎØ	ùdÞ™‚yì+î—8óœX,et­Ž2î’Qb©>Ê™ VèÕâd}Šý€÷°:GR¿ üÇ¹�®‡L‘Bši#5b	@IIË/GBÂ2¦yÜB¦å[
+V³Ôd>‘#¨fÌ±xÒbTµæA',Ì^ƒ¥`q+Ä,ãËœ¥ÓÅ÷3t¬åáÒƒ¤‹œ#3ˆjˆD†p—ãqšÉ¹"‡�§%Â³)’®Ä´lã´ž¾Á¤Ë˜ ¦3Ý³»¾ãYchVÁb1ã`À9dÇ3iüÂÃkO®X|âÅ†7ïÙÓW¼kÅÊ÷v<»jëúßmºùî$ýbÆ$1tcŠ>úñ_�œ>z˜aV
+Qtð,˜ÍòÝ˜àEÄ:)+gi�¶PZ"/¥µ@„eA~lèø3Y¯Èc÷²ð¿ävo�	O(ãM
+O‹Nòf„)˜éÍÿ$:ß[¥¬ŠôŠ½ù¦à CwÝZ§ÁYæHŽgl6[LÑ4q¡§a¿¸“yì�hÖ	l»›ÀŽ7ò€=®¯CÖåÒZgX°Oë,ÿ3“êl=-™nÕ‘�ÁhObXšµþ$–fc(æ”›¥Ä/™¾ƒTñ ¤<ŽTŽ`ÇÈáxRƒcb69­¯{º	µL/¯g¦±HO²›“+›ékÌp¥ÌàBYžBQcÓŠ™BùXÁ²IÜax¡ø0žD¥G÷§.ï»ÔÙŸ�D!të¢ÚþÒ‚M}§ÅÁñs^~î÷hŽûnŠA°¢áýgû¿5‹wï_„ÞX_µh; wÿé@oˆ0-õ4M¶SZÂ~H›l+´¨ (¥
+³S%•Ú8ûAmŠ=‡ÌÕi7Ô¯"¡Q%©²ûJî+{¨lsª%EÆÅÇ�˜˜š¢M‰O1;>{ÄSdA|Áˆ†TsêtÙÅøå’+e–ë(‘½b[Çp/�ð¨gCÅb^³Ð)‡"j¯¸Æ+{ž¡NêU'Rž(WùùÇ]dº¾Ûà6»8åk`ó§ Ë)èÞ¥ Ë)è:ü ›£ [¥°qŽ‚.K`2€ÜåJCc¥�.ãœ1`à˜1Ñ¨� ÌÑ5¢]c(û5Ãc¿dpœ‡FA2µ<Î¨˜œ>ˆŠ×{Ìï±±¯»j³žn†u7k3ÝF ®ë¸9±S‹9Nºå¯[‡å
+"æ»µ±UË×lÌ¡•­Ÿ^ýé'¯xfûÂO[þòÅÛÛ×<·ãýgVí˜�‘ûø¼{[_A™3o!´é­æ[‹¿éZõiä'��:rˆÕ€AºÖFó÷	xzÄMKLbs)˜ÀÒdi¿ŽùÔ· í¬ eK2O&¶¦Ô/— ¨“"‡ÇCÇg0Ðáün3(Á3å:„FÙ:˜íÍABm	eÁPcß¥*ìùGÌ¶tºÃÈç¦Ç¥[�«Ž¸ÌiqZ�;¢�@§7ìá*œ*¸ã�/1LÞàägße›¸-�ìÓfŸåÏ¸vD®äE.�¦G¦ÖÞN„·Q¥›aòw�šáÓÀØLNº°’oÌèªÕ~H	‘DH	"=`"!‰’É ;J–ç�ãD¬‹Ã¨D¬
+Ïw®ü ºcÅ’ÚW3 _®ý*»í7}�‰[7<;ëµ5}Nn à("ó¥ãØ	jèfÚB[i'=G¯R"Ð]F›é–ÛSçéUcôÁ¢Déy$(²‚U…$doÁ-¸wâóXéÄW±(àb|Fçt�X‡ïÚ
+s»a•}ÛÌn8W)ñN?��˜‘He6ÄÓß·^XO˜È,ÅÃ»˜Ë75&ó*Ê#XecGGþ²«ëf»yšù%œYúÎ¬‰óýB%—ï”9Ê<*úÿä^E¢A¶K…é^¶=õN‡ÞéH¬¸4Ù‹uÒÓªVŠóâéæ=á²4eÂÚ°Ì'â|Â_3
+Æ2Vî¥S±œP~ ÎUŸ–V¨§¥Ï²]A%Ê0’T*ãéD½F¯ÇõÊ\RO×àÕòÛôˆò|JéV.‘¯•o‘°ªÊ’„EE!”`@�QlB	ã„¬Ú²¬ª 0¿¬�x¦ â½Èð©ŒyÅ;4ÀFñb®ØxYF¢›!)i	AL€~ÐD¡<`ðÇp7yýÉåºÀÂÜÓ¹Ä¸\
+‚ú¿ãSŸ©X`š:¡ÒQo2a‹»¶	[Ær+7È£’x�yÚüd:Äd‰ßÛ®§õjŠbt�$Ò|ÝJƒÏ7ÖÎU�ÌõUš*ª¤�¢¢v¶½¨šíÅ¼i‹Wò-ÔƒM"$“ðÆ>Aèl�Wˆ�íkÎ¶›•J®á£ oÚ´ÜËÉz {ÑŸÁ(`;ð5ÛÎð¼ÕÛžÏ^þo[an9ÊÖç*Rè5r^¢r„JOD;/õ/FÏöo]+ï¿uàÿt—
+lçÇï=ß÷�í;Û¹;ÆŸ©�B>RBJLK:JR>Ê(Ø€XÒŠ�tI`Œ˜È
+eÕZJaˆuêÆGQ»±I@bP@«M…‰–©™´Ní¦	ªf¬j•
+Uê¶šì}Þ³ƒ�
+…»×—»÷œ÷yÿÿÿïAgnoËwÑUß¿½öåóøÐD´øÉy–‘>hz(EÎ©Fû\[gŸCQrNG±­ºÙ*ö({�e:ñá&ë¨bûÙÝì4Ë`×’h‡md01´²†ÆÔQ
+�aô§K]í«;®VQâjv­‰:)¤I¥‰Ó$è¨�RÌÝ‘&“¶LI
+Ú—aežÏ±ÿý�BVp1Ìaô‡”Ë¦F¬ ÓKeg*ÊL0âÇÆ?‚ìì­ mÁ°h‚¢Ã®,çÊ :yÄ…ý–*�GÑ�è±(5¿+z@CC(Ú$
+©!ŠöÁ©�¢
+øC5š°´BXš×Àï‹D] K”M+fô@Èt�™éd:üù‹´ÓHH3-‘
+(01þü5™8óéÝŽ¢q
+A_FWQ ?Ñ_Å}úSHMôBÒ|�+”e*í#‘c—ÂeK2EÛGfµ—òCÁ<1%ª%W&KB(›ïhë^tcwd---Øb‰ˆ±\Áh‹�¤ø¼1Ÿ¢�ÇYV¤Nâú–Í%à;–HÇVPÇëßìÙv¤êïþâÔH8³ ÿ'¹Õ]�53±Ãë7®¾xú|>Nÿ¼w}óá“ù#ôðöíOüìÕüGE¶¸�÷‹Žv¥½¬ƒóÒ¿TGÕOÿôÞtÜòrXnÞ0Ï©è§ê¸yÝœ6™ àsùtfÄéNÉéR\“ð„IØB&T!ª�g¨B&"�CäXaB2¡
+üù_vAeB2P±C™€‹Œð�Üa‚èü@æM“î7�™gÌ1“1tC™N´y+§i¶òþ7XH÷€…VLA‰ciÏ½ Òa¨·²wjŠU8E`ã®«øß$vcà�ÖÉ;´¡sš(	/985†;ÎrKžB‘C€•x‘*ww•xß‰ïþ}Ãñ'T)—Ø¼xË[LìÈé¶þ¥õ»ò[èží[xðjþ·ÐÏ-Âý\WÑIYhóù2þ/V"™$¹Fù…‡—,¥�[,¬âžžá6	BJmö4ë�f›ºÄ³Do33lF\®f=Y}¹ÙÇö‰]jŸ§Oï2¿‡ÊDŽu®u¬dWJk•^G7Û-õ*’QÎð¶_$@?@¶4OŸ7I·¥®ÞÌ‘¶„`u  Po$šªåÅ«|7ou×°GÀõÇ ½ÃcW„R\nO"g…Ô·œÔ—´uÕÿ¡tRá4žì€¦êüÐæá¢Þ©nò²·²Ù’Zâ u[íN=ˆ-q»BÜÈnÈ&¸Å«6á¢Qeþ©Rø_tòÅKCúŽÏ|íöä…á}/�ìÝ7L{Q|ÿ¶ÛçÿøùQ%r^}ïêŸ.½÷.Þj{q/ã
+jÔ•ôü9^¤2(Ì¤˜G™ÌÓÌV†5AD§W�”C@r9Ø3%‰Õ$„‚^ä¥CÚÿçì™Dú*­•È�#Ëu—ïÙ¨Í• H‡§ý�ûP{BÍN
+Nà(‚�ŽÑš¸Ù<J½²Ïµë�ºZ*;ˆ²Eç2xXoç½'lj]»nÁ#�Ì_ç«dbÇ7¿ooÝ0˜ÿ3¸Qëô§Ž³xjFzò…šÅoŠ‹"«BÝ¡�â~qOäMï¯k~ïpŠ†ß4j—ÔüÅ`ô“4­Ö#ÉÌ1#eäŒ’qö=b�Ô#÷(=Î\,wÇc‘xä�¹‘5ÒSrW¬«zkxkdwä�ôºr°úHÍáÚ“Ò¯”7â'«Gb—bzu1/CÅA¸8ˆÕ6Ãî�A¸8ˆ˜~ÒžÊyk„xT‘0VÆÈ³+ü£ô©tÈª�Å¯²Z­Nk½uÚzßâÜV•õëšÅTY¯X´õ6®MÞ§(„«êƒÛU”F´ŠÆ1Ž"ÑhÄ§§)»KK!4;SÑ[AW”—ñ|
+ÒŒNß(¶7Ò^(0S>[®ò#ÄJ{ÍT=<>”j™ö$eé°G¬ <iá)‹à­¥/¥×ó‘~ô\ù¼ñJÀ[à‰LCð|vJøÉ«fÅ©
+õcõtkýîzº^EE(ÓNe²å‚ö*ÓO’|¤-øÁˆ›‰›|=wnsƒ—á�n¼ÐMšwèZ¾­:Ð{‡:•XZÈæIü_Å§Ábäpi ¹´$¹'qbÃM­“žyslþšPóä„7;þÁ{Þ°=>°2ÌújbšêQ½ªƒ9ƒJ¬æˆ}*}øã,W8@…ÂNEx@
+ ê¸(qI&@U©�I yûœœL$‡††¨Ê€n,ëmÒm“‰Çâ³éÆÔÜ¦¹vlðvbøœ F%m[R¬uØýâŽ�Û£‡.¿Ö¹ð¡Ä«+v½½F;£lÙ´³G×çöüîÈªM—w½ÿz¸|ó`÷¢‡Ãf´þ±¡Žöçª«’‹w<c.Ï,o
+—Wx¥HÃÂ�™5G¿õÐidúK:Á¾FÔ‡(	ïÁpº³±ôB<ØmáŽVqJÈAéª˜tKœ^î�Ýjˆ
+!§'ª i^hÛ6ðýünþÏPØß�ñgø1~œç°õA¼Š‡Ê“ð�þ2žÅÛÔX@ñy;çíäHË$C¸B€ØÙÇ_¤{(Í=ûô=(=5¡NâW'¦ZÀæñPÃ0¦54¨W®“É¨ëkÔÂ�
+Zv²°æƒ¥§Uÿã-{köì9wÎ›¬®<~T]Ð}‚þöKˆï½ýòKùCKkü¤Á^v�‰á·w^ üxmDÜ_ÐA¯žrÃ·mðøRI/Š^]A^]Æf®áe¢ô¨iôø	Q„¥,€AàVÀ ömÌP”A(Ê{'e,6€¢œ°Ó3�Ñá']”ÿ¦Ÿî÷óŸñOû¿g‚CD”ÇÅë"#ƒCœ	‘¼Y”à­"ÌOòB$%Ò¤Çè°îj\°¸&ïG%œ °î­-vrùÕåt;iŽ8�0.1J€r
+Z€XJ$†¨,HcV#)M§AÃ1ÆŽÖ�¬{£S•s²öì²eûçç^Ï-îëlÜBÌ�¼\×¾lÅ+?¢çýç¯¸:¸DŽOqu$ôÙYš~tåê´Á
+ÿe¿êbÛ¦¢ð±�ûÆ©'-i’±»°¶Ù²%ÝÖµTÔ¬ŒÐ®ÍÊ‚(#¬I5kJšµ
+(L¼ð6Hˆ'&¡
+´¡‚ø+H¼ !­Ò&DyÚøUÎuM´B`[ß½ß½>÷ïœããc ¢�³°J¢•ã­«™ûYc‘©I×Ô$ºûÚ±­Îl¶rrÇ	‹ïNw\Âd¸Ad�‘îÖœQöÃ%]»ªÂX–‰Iø¿	UX`ësí¡p´(Š¼ÂR-‰Ãf²n!Ý\7Ÿ÷HY.ËçÄœt?Œr£ü˜x¿4JÆ¹qþ	á)û“âaé8"=C^�—È›pÆþùÞ%ŸÃgäk¸H~‚+d‡ø Š„¡–4‘vÐˆdÕÔª+ºJÃk6ýìž‡s)…™‘€C™.XŸªÿG¢Vô^Þj•h¶ØTuƒ˜ŒLF ÖÒ¢›2 5»(ÖHÄ+IžÇÄÄËq¸‚)‹(ò<g³IÎ“99$jš&’xé,8¥YYy+2M¢¼Æ…_}Ê¼iÆ_=Û3Ûã÷ÍL÷°Tƒe-Í,\¶à«;n�FÆœ�úX•Â$Á¼í×©9ô¤Vq›<øÕäÙÄqÇæòoM×¬ôE¾>77h©�}¬¯�áŸDç@ïX5·Kø½ÃÏ}gxÇ
+âU‡¬VT›ÃæÑT…:4™*ú÷R©ŽEüS~ß¤¿ÚÅ*=-Ò?
+�J�S˜›ìÆÃÞnå84§¦ð
+
+×7¸Xa—%µÊéSëur�³Qntn®xÖí«aÏŽª”šò¤*sjÎ“«³�8ÇÜx¨|ÜyØý´ú´ç)ïò²ã
+×y÷ëÞ¯È%ïUç¬ëo9x­jØµÊã,Ê6å1EPª¶?Ÿ¶©ñ=iCs)Šìr«*ÚªÚëñÔ¨Ä‹
+EVÜr�ƒ`âA<*þ�9llº‚|,x!ÈÏò-§Ô…æ=Ë'5G‹ª©ü^õ‚Ê«g¹­§.Û„=Òµ¥Q¹^n—…¹,ó2Jœˆ)¨¾åd€ÄøŒÊ›½?Ðhb¤3>×•éj×tÏ}3~ŸkFgàc¡šÙœÙ[|Ð5�µ/R�ð$ã®æfqbç«];_õíºsÏy�Ë—ÁQ¾ÌmÙ’B§à0‹?Þò§›â$Ô¯À÷ñTeÜªŒ3I±è5˜Þ{êXTib÷¢Ó`‹‘çaï
+ëšw\ã®µ:æö¿3	­Œ\<9—o]]°»a®ï¨+¼:0 ¬°„gŸ=ðÈÁ~à§÷�oMu�q­ý›ðÜ"ø‰¥!Ðß‡åCÛ½öç!v.Bjü-ä{áÌÎCù@=àY»ˆÊþ?ßõ~@àc€‡VÞ8�UQ€Î{Ý{ó¨½ îN€5‡ñcÐ°^]DÇox`ã4@Ã£�/.bË÷&L˜0aÂ„	&L˜0aÂ„	&L˜0aÂ„	ÿ°Ëcœaƒe/á·M Ò +æ«Õ5µkÖ!¯Ø››®_±mûÍ·ì€[wÞ··wìêØÝ}ÇžÀ]Ë¯ý�\8‚e(2ËlÄÝß7C$ ’pd �±re‘i]�éD™4ôÁ™LùâÒ·a‰å.aY‰
+8¶ 7·0ÆØúe�‡¹w.@ßjpòvƒÛ�÷Ü÷òÌC,›“Ÿ48Aá#ƒóP!\2¸€ýW
+n� ÅmpòõÇýXÚP�c0„šÌ¢¦öaMá("	ý:O ~%CŠ¢
+¨Í!½LcN— Ø“ÇñQdÛôþô_œ)¶°3
+]ø$d†±¯
+ëùõ6@ïzXo°�zo+ŽÈcÝ‰cúp%}T'Î7Œ(¢×d ¥Šø<�’Çô½²�ôâ“ýXÑo(®—ý§ Ø›Áõs¸jI_—­J±ÍdJÆ¬»ñ„ý•�§P«¯—À²×Îê§I£<—ÁYÙþGõ‘l¶hrl(“MïËÐ£4ÙŸ¡‰Â`¡„]ô¦Bq¨PL—r…A:”ß¥ÛÒ¥ô2B16í*ä°žaÚ6ˆã6Äãõë±Ø¥­ù<íÌõõ—†igf8SÉô&Ú[·wDZ‹¹t>‘\ª¥W/Ód1Ý›ÙŸ.ÐBvÉÍÐb¦/7\Ê3½47HK(º»‹v¤K´–&´=›�Òô`/Íä‡3£ý(ýŸ;sB{[a;ºRäW®�ÀÕ;u7<€-æØKIþÙgÿ�W	X´µÆ¢UjÇˆêBÓucXv’2FÍùo5ÆòþOF¾Ü«4_¢ž_ºX·–Õç>;ùí�Çgû\ ÊØdñY�ß?Ò&¯‘
+
+endstream
+endobj
+89 0 obj<</Length 6986/Filter/FlateDecode/Length1 11040>>stream
+H‰ÜWTgž<�D^MP×¥úE’0ƒòÐBÀq!Á$D´Ö5	Í‹ÌRTHT­–*â“ŠÚŠŠÔGñ±=[�®*_]_+ëVë£Z_U@÷¨‚¶îž³çìž=;sþ3sïÿÝûÿïÍ� Aú!%›¤ÅR.6O‚šã"ªµ‘Qóî_wÂ÷+P§7åS üPÇ|	… v¶#Çú=”‹ ƒ ì›c)ÌÞ:¿þ‚„Òø]fÜ�õçú)8‚„_‡rŒ*|Å,‚I…ò;f+5³ e‚0;-v“a`Â@èkh%‚0ÜVÃL“Å©…öG!ØVœ³~ªA†„øÏNÜ1Ç÷ôlAä�0ºoú‰ºàSˆt_‚‡¨[p�ë^:®ô±7ÃƒYã\…ªKLCêƒöãzöÌ09�ÆåEpl†{$“Á®Ñ é¨¨�&pÃà’@$¡ûV#F„DìˆÁ
+Ž1ô�‚Wý±ý–Ö-¸ÖÌë\–p.¥îY‚üP�Û÷]ÔÍl„#Œ)”7œXx½öÐW²#k—5
+iÒê?F½_re°!%×'Ò!èÛ\V›'è¯Ç�„–È±�3�¤€
+§
+ìÎÒh
+à|^D³™$RÞ3ÒkIXq ¥VaËZÜ™O˜p ±Û)é4ª¡RƒTLžˆ¥bºI@®P(ÓuÊ$n
+‹	^]<À;v$*“F¡#QxM†b¬4*Zú³ø¿¿×º¾gÎà ,×bxîåL—9%wÍ³Db‰+p'wW-¯¿÷ÄóÚ¶¼öcÑá»N?òzoÄýÏ¼úµþå·“ÿÐüÝ£²�Õ�BoÎÎô#§Ïü:7 ëpæ£°ºÌ©Uì.±Ñ?ÓØ”[y&83òÌq!g^Ì—•[ÒÆß¸\¯_5'h­¥´q|ÊŠé
+›bÎtz‰O5Ä®a²`R¿–,È+Îí|Î˜“7J:ŠÎly°­°“Ó¹|tnÈ–ˆá—?àåÏDM^mlò¯-y°w¿pï	ýªžFåá
+Ÿ�—s‚/9ÅìRNí,¯þË„Š»�û§}ë±d�Ÿ%óO¶¢©|Ýe¶cmølÃ’×ù¹«7É6&Ž^^µ2¸|áÓ,Ïwž|
+ó·Žfò•ÿêóŠÛAÉ™óÊ›’Ë*Bï§ýÿ%ñ6é04´ÇñàNãÅNùoÜé¿EñÅùð~q>þ¨/=á!ðÄlî´áêªþEJ/‚QX@§t�ávCýâŠ”Š
+þS‰¼bcWÚÜò¼ìãä³X\å�ÓÜw«ë7Ìœ|ëI§I©ÞÇ·¡?lˆ©{]¾gVç=aG¦.nÑ©[÷ŠÛø­‹÷M}¾§¤µ½ª¡8Kô³œZ¹ƒ¡ßxðÉº¸Å›37�
+Æ¯}X7síÏ¥$šßÏîÚÍd°~%¡­Ó:VýþSâ‹SEŽcÈà$0a{HÀŠùûqØ )ÛJsež�>ºtewÕõEµ¿k'�ŽóªÞq~Ñù€¥M¬k^¡zîwªOS>;11ùô(ýÃ æƒCãÅ¡Q-k®þilÊ÷mÖ”ük�èFß’–â¶ø95O–‡K#žÞ¾¸ãF†Ü‘,ÍAÝ^›àð­a1L¦_av•mîŽÖ=Œ·lÕ�
+xn_ÆL˜Ð†_9õ7G(•ö<üeF(ìV+î4ÐÚ³©ƒéyFAšq'	òî”…Ž�Æ èË”¤Å¨hY¬,v2êf¼ÿ'!MF“zŒFHò¡!	
+%&»5v`;IPvga¤"]K¯aw:$ÀX4x¶DDçµ$U—DçrŒtšÐãG–Dä\K
+‹�$A4ƒ4Âä´“�B/½ÁBd(ÂnùQR>êEÛsÌ­T€úÓ‚§€7Ñ@šaéQv›Ôõé9
+
+žeµÛ²¤ƒÑ@ZÃôºW@Žvg·Ûóü7ÌÃ¯W‘›á�@½'ÓÍ` 
+'‡nÎúûÍ€ƒÏ­Er5ï‰=<·E2P»)*æÊió_e]Ø[mU�ø7Z!ØÏ>öÁÃckå­ã_lGWGeÎÚ³eFhÎªÆ«ßs®ýÐ^õ¸žÿ›MŸ'Ìs\ýÉ>E=Ûî«Q.8‹_ˆœöÑë-+â|ø¡‚ÛA_ƒ%±çrŽ…êÔTo«N­:› Êí.ºã%Óï67&*7ÄK7v´-ïÈ8"Ú¼ñ`˜ºåÁ²»¬!E÷â¶ü´5}.Çj¼»HP6ê\{ y€;öËáo6/Í=²?{×z]ð·üœY?-(,ß–ÍÛ:ái—3¨³ôýÃÆûÜÊ4„¤µîŒËº"ødêÑùÖÔþÛG{ÀBÞèæ\DÝœsÝÑy[Àf¢Ê§_}Ùl“SƒºÊh‰Áv• sJüŠªþvBÑe^yÔq[ü�|÷zÓ¡�Üfü*Dƒh&lã9{*Dé/¿Þ/»þ,¦G	£
+!<6…ä¹cQ7;¦†G›ºÙ!P=¤&¬d˜™¢d\dä¿(ŒõnÖ>—›Õ 3$0áNŠÈ&L
+DwÁÐÉ†“tÕ8ñlÜ‰ÛL¸lY€ H�GB	HÊI˜(K!�Ì3NÇM ì"@™qÐ{/ýÒõ’î4˜(º!ÂÖDáVÜF�á�IÒ$i€T‚ÂEò
+„Å`´ÐL^õÖ»` âxoÚh<ÍZ)¶B7à
+b'ž›‡“9öUœÝÉƒÐÀWc*Q²ØhFì�ò|*Òìy6ÊYé	¼@CbG #¢yZ9Ä9
+�DŽ™¢›¤466æ5wÈ- ¡$ü!"aOÆ³$@¡Ôèä˜Š7Q®ÑÈU:L©I˜V‘*ÇÒ”I@®JêÓ‡S±4¶a	�F«0UJÐ�S‚­¨“á+¦ív‡%c
+¹N	 ¨Õi0….uÐf$ŽW*t@§¦Mxz¥ƒ¬T}ð˜ZÒ5r…S(¡t�¦Té mz	L«Í€ëýƒù*‹âÈâ¯ªºgpPQ0ÚŠ¨a<P"ÇpÈ)#(¢.Ã)
+ŒrÌ8¢¨ž	¢ˆçŒBM!+êŠ«+Æ5DMD—U?’x¦ó\v÷ûö¯ý¶ßôÌTu½ª÷û½£ª§Ày~h‹¬ËHeÁÓÇßÛó­ÍŠþ
+¥RèA…$øºxºêgéé•¡Ý>Šlv¡ôÜ<çùêÕÝð¿“àï„6ºz;þ�þ~JÅ„ÎEæ{z{¾~ódÎŠN’¼�
+.~¾JÅÜ@4ÞÓÉ{ªøzÎóz«Óe¬¢
+\�|œÜJ[A©PÈô8õû…~WŽòV"Ó.jÌýxt™:ªw,FÇ$bYˆŒâÕñú°ŠŠ‰ŒP¾I§$ÌŒ°dL Yd*êwwŠ*69RH\ªÂ8ˆW'	a‘B¸EtN¢JTááÉ	o20J�×™3²”7Û
+ŽÀHÕ[àéd+Ûg¯™üß¤yW¬:Zm%_sT_InÍ!¹F®‘†®÷ ë_(ˆ”ì°–`Uáy¬ ƒ‡ÿÇù‘$yX÷H*’›îUåxX!f³º:­;™�éÙ‰»kŠ£
+³b“0þùt	�—|ð;•Îœ3�K°Úá§×¹GRÛæ½7-°)iÑËºƒB{lõéné»KV�\)ñ05ŽlXlób®CÎÊÊ'ƒ¦¥6å1ÔØ,öØq¦É”5³§Š¹&Vqà>ù¹‡·mÂÏõ�«;\Õ£óÿº¹äîÖG­"\¨{œ0ü»b¬6<}bª«Ãîu¹¯³ÖOµ¶m=8mªãÉ_ÑZØi¹ÑXƒG tyòÿ`ÿø7‡Á¾ƒ7¤Pž‡=kË‡u³Ô‡Ù½»±pxÆèiÚõÚvä#{9;cnÿ‡Ä‰
+>ÕÛžŽ?×ï˜Üÿ�á}íœå³÷Õ%¤A„�bA€(ü�‡¤Ò1šÑúhzLq]‡šÎhJJHŽLJ[ù»^GNK`á9“sËZwå¨~<9âQA…¬ªØÜña©Ó·¨Èú¼ók�k;çç>,¸4ëÇ9ë>_5ìèOÅ‡Ù«àÓÅqw“®47¹üa]“úÒoÙ–!Ç}ú]º—¶iùgv�^*ýaÐ°´œ1Á�¬²Â,†¥&SnZ‰×l³š¿)‚­}‡Jß·Š_8nÛß½JßõeÂˆÌ²CÏ”w>mÙ¨mÌ)©µÊ¨¹ívÌ‚ÐIE^ô´Ç§ïÏ^ÿÀá¶ÎoçÕÖ¦sÍ±ã®�
+ýª~éµ"+•õùÌFÕ½Â Ë¦±Æž¡÷Hœg¢É'»BMî°h\UŸ.T›¬:8T„”œ†–Â;ƒóšµ3/äÊÖ]<™~Ò�ñÖ¥ZrOu
+=¾�ØiÉ)ì:¡²5Õÿ÷ï¯ÔN
+,jry4êµÛ‚¬œ?»eX>Ú+PƒåCß�SÃî†”`˜v?áíŒô¯vr|×�ÛM™4yá¿„i[aA¿k{e•«·ˆÏM¶yõª5Eúê¸�¸)Îé)ßÝ¿±â¥é@¯Âàë
+™µb´ŸcâÓŒ›QS¤Ë#ƒú›ÃGâ«SEe6Å)-Uiâ‘™™ß/Úöä±&±d`Y³Ì
+FeM\3¨öò}!«©mbvHÚ�¢yÙÖBGmnˆåæ[ûžÊ��KW�öËêãñëIû�_ÚèÛ²±<Q_Ôw‰Àñ“°iùæ—í�(jÜ—ñ<¡D*¡¼z]>êx5ÌnÚE~£Î�L20$ušî§üb°ã½a$ÞÃÙV0ï¼½ïé‚ÅGür°Ð-oZáà/ßÞo.XÂ°�9PípšŒ8#^�pX@?„÷±?ŽÃ¸
+®ÌHb1l„±°öÀtÎL¬ox``ƒaÌ j�€)DÃnr<ÁçpwÈ�üž‹ýÏÉ4|B@‹qõ­°NÃ_à†3ÚÂutýsñ+pÁŠépnóÎü0�B8eP÷‰-ÙOÚØc±Jlÿ�Z6`ö‚Õ'6C)Ž;©Û'š‰éâÅó0­/GÔµp×zFDÂéA–¦{%Æ‹åÈC_´­GqB4¾�päuxMú h©@? áº�â�ÂH¬pãÑ¾@¬x«!6!Š"(�£ð€|@–’Kä1íG5´†÷—úJ}ûÔt|+º‹Ïp�¾0
+­�Ë!57ÃØŽš¥¸ÖŸPÚ¡ƒØâH<IÉ'ëÉò‚Ž§ßÓ×¬?3bX0e¬™½4à;üt;tWD1¹$È¹=é‚8çÁ"X‰ð!d€­ËC)@öÊQ*�Ï”oàÜEi�ðcŽGŒ22EŽâ@f“9$�üžD“D²ƒ#Õä49KÚÈ:™ÚÓéÔ�Ðhº‚&ÑZA+i
+½GA+g0Kd±rVÇÎ³«¬‰n§âb¸dn+WÁ}ËµsO8¼Š-¯â÷tìÕyéBÄ±¢ƒ&nP Ç#ÍX°B<þèÕpÜQ¢Õ
+X‰’†Ü­CDÛa7r§gïTÃ×¥uèßz¸Mˆï4Ãsx‰äèñ™’Qä}b‡üÎ"î(ÑO)$ƒhH)Bž+IÊrQêa
+¦Kh
+Í ›èº“ž gèuô„È$è‰¡Ì�y±ù,„-aIl;û˜}Âv³VÍÎ°zŽr38.�[Ëp{¹£Ü9®‘»ÉËy>¥‚¯âOñ-c‰¹d²D)©–JÒZ
+tðœƒJ¨ê�û$› •ðieÓÐº€ÒëDË]&Vè�™ø<ÜmFß#WéT2Ÿ…“…ÈŸ–D‘ØÅ†³½l4ðñDÉüI(¹ð+ÿ
+¨ø\ú9£|.ë /i9,…<º¼£L&ýAIöÓƒ1™0l83¸N§s'ˆ%µ¡5Ò#¤¥6�Í00ÂÖ~vÍT‘6P±ßÈ¯¶à&®3üŸÝÕîZ¾ cËF+É±eÙØ\|SmÉ’AØ±-Cµ@Z],j3{ ãRRZ†’ŠàQ&3�éešé0iâdÚ#9“R¿µ/ybÆí”>@¸´¥d2„NSŒúŸ•lì”iûØ™®ô�ÿ~þÏeÏîÇ¸náÞæÞÆgÂ=òGé¬n‘ÿúœ„nréI9¼kÐ¸(YÏ]"»O/þžÿaî'¤šû`±|ÑÇùqÅíÉÍp×à\|òwá&\ãnÀ|j$ô�ó)î½oà“f/<æJq?…ñ92éíééþ’§«³£½mÛÖ-­-›››Ü�®†úçêœŽMêF»bÛP»ÞZSm©ª\W±Ö\nZSVZRl,’%Ñ à[+4Õ¾¨B�Q*8Õ�;ÝLVc¨ˆ­PD©‚ª¾Õ>T‰ênÊjO/zü‚§7ïé]ö$&Åw£TúQ@U²dßPùóUSè}�ï×yÁ©¥(Øí¡-c…’¨¤}ÇÇRÁhûËýª?it7BÆXŒl1r´J�Ì�ªn¢3\U°3Ã�\ŠUÑ5¤Õj€•@yG06J‡"Á€Õn×Ü�”øjœ‚ÚK×¸tðëi¨è§’žFg·ç”Lã|êµ¬	âQWÉ¨:;¡|Lc9Ê]˜7@«¾yÇòTÄÎÍþÈÙ•V+Ÿ
+ZÆ&¦RgúÖPd¥ÕÎZMÃ>0–sôES}˜ú5ÅPXÁlÜ-BÉL©°;aw•¿¿¤dšè!…©½êXêPç¦&EaxÊ>[Sã�ËÝ„š ’‰¨vÚcUµX`}¦RÃS—«½Jõj‹»1c*Ïl¦lM�))]É$—m:§»3.4¼<²„U¤>�+‚*	+‰¨xOí¬I¶C*ÑŽnxi£è(ÎÈ8-òGS¦N¦gñÔà0©Jê3À ÞÿËjM¬ ¦Ï€±l�,¯5´/ñÔå¢
+
+l‰H~œS¬±[—·¹�g9Ÿ:iR�àðÁ ŽmLëlÆá·ÛÙŸËz!Ž=5ÉË
+Ä­³àmvi”‹2Ëü’eÝf9µdY�ª¸’¯àù°ŽÊÎåÿSåÚàX'%•ÿÆœÌÛCa54´/¢SÑÂØ†FVIy{û²­ÀÑµþoå
+gåu+.ÊËÎLˆ”PÁ�Q_Ô£YIÆU©kˆÒGMÑ�ùV3ÚíÿeP6÷	‹ÒÉÓ°B™´ÓµZîZ%¯*¯$ÅcÁ‚“�ìK¥Œ+mÀM.~Ò�íÞ'ï=n’�êÃ¸òº&|„§*»>|µCÌÀÃˆ	a†ÄØ!vÀNþ4t¢máFÛëhs ÿ‘}�ëÈåP¿ñ	¢F(ˆ8BCìF|1ÄuÀûˆsëañŒòç!ÂxÃo Â°6"5w¡F¸
+u¢v
+×AE�óo1”ÀòÃI¨�jYLîÏ(ïèóW¬áep
+B;ÆvÎ@%Ö¾mí†zè`¾ÛP‰ýüLü9„t—!€:È=€ÿö=‚uL!úø‡ÄØçìàwáý]7÷Sð#
+¢}¢EøÞ“žCžÕß†¼†t}0Ö…ö8ž>¬u�ÿö#mÆ~÷ó¿ƒëäp	éúoÁZò¹ž×Cp¶0f;Žˆ"Ì‰"ÙŒôoˆGò^¨—îBûq‰ò[à ;<áÇc:…ñ1��ÿ9*Œ1Ã&–K¸'\ç:dÈ�Ç{WÄ8ç'Á�cóé.ù.ŽÕ€ŽCÚÏ€ýµ#Ú]t®#¢ía”w‰Ã�`�lÐŠ±M˜k„­
+´mÆ:uêß]¨_§Xg3Ž«o)^Ü
+ãâÍ^XÆC|ßxˆß9:%—0æÆws-øt’{;ðóæÜ¼™{1OAEþ;:ÅXr	ÖûÖ�™«ÃŸ“sÂ©ÄÝñU½}Ao{ô¶™µ\ól³Í–åšfßb¤q¶¶É&oñ­[K�Ùæ©cr•·ëp½íæLµíâ½ºVÛ«žVÛiD3â8ÊÌ¯n¦Þ6Q7ñõ‰ïMœÚ ²gÙ\.{³äö/÷TUµ¥³ä×Þ)ý+)}YJMJ�Jé/Ké>)½]J7Ii—”vHéMR…l–Mr™\"eYeAæd�+²¹›^Ûü¢‰Q`­ ó&Žµl£ã“€#2‡_wt-âBá^Úî
+e¥Ü0ms…¨4¸?’!dZC-å^Í‰dIŽ©ÎXÙ©=„äÎœ·¨¦‘�O@(®ÐGa5KŒø 2¨½„šCéµ@åñK�¹»¼£/ðŒ&Zh]O/‹kåœúläûø"G/K¶7$¦
+£6­kÓL›Öµ–Zz!ŽÐ™Z�¶2&W«‘Ë¾«Þì= ª“ˆ(=w|ÌBOÅ%ã½ZxApFã‰1FcIzUM¨W
+(ß‰g˜O0³O
+dàDp$’9áMf}^_P�´9 ñLÃôªtß_J7
+$þ¯=fIœuÙÀ2L?#ã43°ŒÓ,ã4Ë8àÐ3ÇÃ½$4ÉÈÐ«áá£ÓË\±§*jµk½•¦Én}Þºì–W¬@Þ�b<‹Kð½®ÁLnŸÛÇL¸`˜©Œ½òL–WºìÖÈ;“	Õåj/¸Ž¹¾p½Ì.°ÇXÉ\nž;5k¶µº4vÎpìÂ¯?ÜÆ8i]Þ
+¢”@�AHð`
+	žçjŠ$!A Z®o·¸L=ý‹žÓ#O¿iÑ=žECËf{¹½Ü�
+®mx¬ðó�½øž8óú)w�»�Ï¾b°ÏO®xËŠ$¨)«KJØY·®�;¦{ÐÓ¿e3©Õ�Îm[·oi­än,\|saáÍ‹œ/OôÓ±õÿì§ý�ýØe„W–ß_¾�‚[EkPÊóòÓ^DþÇh¡¥'ð~�'°�ÌxÊÈo<�ú…/ ÿ°À‹°�3�LM&ÆIå]ed,©ôO™8Š*Å?ñÒäÄK±£ãG”ÉÃ‰&%;ûNÍ¬3%<qøÓü³TªgMŠ¢A8Ø? ¼]´ê,¥¡ò o‰ÙKÔ4
+O-y©�­ÿ¥]ºvvè�h@§NŽ]kOž£î×¹ç¾s×9ç\×u;-º^[xZ‹pšNr#ÂÄ$Ù2+©<?hŠÙp¡Ut¼D„�Hð€#F�7Z„‰Í˜ÓòKà–UÆ¼ô1ñ©e"šómfw�Ï|éò°™À€�§Ç“Œ[½.\~´vYÏ¢'4cÈ™”;äv*ä{†–aI?æV’æÁG€&u
+Ì0´jŠú%;¥®æ~Ù	î9Ýíu~P«j¯±‚þÿ
+³uµn‘²_yÆ×J¾Þ×¯~�†cáÕ/ã{ðù½Ùü];?N�emùÿŠ�2Ì
+
+endstream
+endobj
+90 0 obj<</Type/FontDescriptor/FontFile2 89 0 R/FontBBox[0 -220 1113 1005]/FontName/MIMAHL+SymbolMT/Flags 4/StemV 0/CapHeight 0/Ascent 1005/Descent -219/ItalicAngle 0/FontFamily(Symbol)/FontStretch/Normal/FontWeight 400>>
+endobj
+91 0 obj<</W[120[459]]/Type/Font/BaseFont/MIMAHL+SymbolMT/Subtype/CIDFontType2/CIDSystemInfo<</Ordering(Identity)/Registry(Adobe)/Supplement 0>>/FontDescriptor 90 0 R/DW 1000>>
+endobj
+92 0 obj<</Length 217/Filter/FlateDecode>>stream
+H‰TP=OÄ0Ýó+<‚’‹�Ž¡êr,ø-ì¹Ä-‘¨¹éÐOµ‡lËÏ~zÏ–—î¹#Ÿ@¾s°=&=9Æ%¬l®8y‚“çmÚ»šíl"ÈLî·%áÜÑ i„üÈÃ%ñwÃp~P÷ ßØ!{š2ò¨?¿2Ò¯1þàŒ”@AÛ‚ÃQÈË‹‰¯fF�•ø[DÐµ?íÚÁá�E64!4J�ŸÚ£ ¹ÿóƒuí·aqlk¥u+òöŽ^¹éæÃ®ÌÙb=¼)<áí71Ä¢VBü
+0êRj”
+
+endstream
+endobj
+1 0 obj<</Contents 3 0 R/Type/Page/Parent 55 0 R/Rotate 0/MediaBox[0 0 612 792]/CropBox[0 0 612 792]/Resources 2 0 R>>
+endobj
+2 0 obj<</Font<</TT2 67 0 R/TT4 68 0 R/TT6 69 0 R>>/XObject<</Im1 4 0 R/Im2 5 0 R/Im3 6 0 R>>/ProcSet[/PDF/Text/ImageC]/ExtGState<</GS1 73 0 R>>>>
+endobj
+3 0 obj<</Length 5151/Filter/FlateDecode>>stream
+H‰„WYoäÆ~Ÿ_Ñ�d á²›·ß¼vl€Í"ö~Èæ�šéÒ¢È5IIP~}¾:zy…@Ð°�êªêª¯ŽþccMo6Užd¹)ê2ijãÒ"iœ±EšXgf¿ùÍŒ›ÿÕšÓ²ùcãÒ*É¬­mfRüÙÂ&y]™*Kò¼J�e6i]§ Ø?n>|z´æçió/ü&w›»]n¬Ù7�Á|œquš¸2¨±{Ü¤æ„ÿÝž~^6‘‰w¿o¦n@Ïê•KjÇÄIš¦%Scä*>ò·þô4{c £�YŠÌ,)spÙý¼Ùò1ŽÁ
+8öïÈüh–~<
+Þü4
+Ó—I½Æ[—4‘™§ûi�ÿ³ûÇÕ%š¢™á[}ÿºƒÍlÕÀÀ�ãÎ6kª¦iJ“åyÒÐ¨»9¨®fsb6ëb¢Â�=•ò­o�’å™®¨lR—ÿÏ(î]£ð©ü|ªQ›|ôíÜ�q•ØèdÚñ`¾Ì½×–WÖ~âïh>O‡'îk«UÑG²š�¾|þ¿±™-“Â}ßh6¥ëñ�yTàÊEžÔõåÊàã„Oj¶6Éð
+þ„¡X÷<#‘îP=Þæ‰‹æEßÊüút^¤;Èˆn’˜?+îÊ¦¸Pyèø»Î«¹ÄR¤ñ6œƒº6µu°´mä°³…m¡O?G>®�»qåI+Ù™ bÛÔ»è€å&z’É §NÃ‰ÒÁX®#ø¡ õ¸T^K´Àfÿ´¬D
+ö�±ÍðÝü"D§Q”9˜EµZànˆŸ•™ˆ=‘6…^ÍÚNÿìeý-0Æ£¨l¦ëÌæOÙ[¹ÚáYöÔB¾˜È/‚D™e	ÒôGq¹˜OÉåøÁxY5­˜,AòKÞû'Æ|R{ÈõvY¡‘±G†ÈÁ–,™CA¡Ž×«±™ŽddÜÅÁ
+ï´<cQ;8¾Á2P÷LG(ˆÚÒ|úäp’‡c(	‰ŒUbK„�»�ïåÏÂÒëÞ^¾ÛÊÙ™y/wñ�ó®q@m«¼�{.Ýô2š~4!ƒ°‰¹5!š[f­+ª?§0ª„Ñêb³¾L&Þ–.Eœ€¶`¢{ßÂ¢¢Õ6p»Aœx–VCœ-ÃL8âZ²àLÈ±ÑÞ÷l¾g?›YBæÓHÉ¤�{¡à•;³òáŽ,ZF^ÀJsjó'!ï!‘÷8‚	ŒŒŠ‚âXÈ£vôgŸpìp0¤-:p‚˜2êèÇ¦‚LAE<ÿ›Ïäo97±šE$—Åÿ¯´:î=C^ÎÌ,rb	TÚÀ}yŠ}ks½St{ø:ù‘°€#4É
+ÀÆŒÌU«Œd×d×é38Ó
+�~í€2M‹*ÂY"£Dpg�Ixe&ìWÑ«”ãe}W¨®k×®¦GÎöCO6/Hï#Ÿ‡[ó¬ºVL	X”Z™~éOÝ
+6Ã€þèzöfåHîHOAÆqà…vé‚ þ8Ã\P¿@|ÆTm•ûâçøKkµÊ@b)æF7gH\�T”±Ç·iTw”vúuÑ,RŸQzãÛíµs³¬ÊD ^n^Ì:™ƒ_ýüH6{éú}õ´²ÍU¨g�E©9£3]»°b]éUtêü/Œ«—~}½„9sº²Áö¶
+±MÐ©Èë‰Ó¡š5"Xtà|è÷-e¸a=Ó¤*òëŠ}Nâ©^Õk˜µ5@dâÎk'càfždx¯ß5	ª+ó«.„%¨)ÒZ‹à®£,TqÜ#«SA™¸ðÍ–Ãó$4ÏP3TïËÖ(õXêVX‚ì*Bê�BXE3'±Šš"2ä¶ûÐD²ñ"¥Ò{Î‚R*‘Æ
+ˆvGÑî»!t/6³4R\ïùWózÕi°ÃîŸÖpÙ©8på±åj¯MŒY¯êý¹- º>=óDô"H:¯BJé_X�'i .-�6Gá£½ƒö<oû¬vùNs³½®A®)³�`ÈSHŠ=p”…I>R“†¾½—9z"J‹í+aí$k-•¸LOâþU¤l{ªš2<*GÒ:�Bëšyæ8ëÂ#eø›²T‡œ–iN{ùê”C¸C|"Ó;1„‹üÁ|â¦éL-
+‰ùç¤;Èa&<áòx>ÄnÕÆÆIsW‡Þ›ëj�ïxiÝÐ¸Üò‘ó‹ŠBe”Ñ¨ô�¤Ö{¯„á{éÍe©…æ&t”TùZ©ìÃ“L9�ê�6Éä^¿È¥�èÒl¤ôÈf{Ýšæƒú8¥á†ÿêÉË¸
+µNA…™R¯&ý»¨«BŠ­‹p’“*RÍ?R².j ãÊf§4¼f xeÚô�ô`[”�¦½JµS²°‰•ƒä<±ÎO2Ý¯ýsà·
+/H¶¼¦ðžïˆþÕÏ4p”`
+T&0‘ÉÖ	„ˆt/3xz¿’%¥[âŒÞ4<¾‹ÉÐÔx	ÐBˆèØ”Ã…lW6d¯‡qzcq‘a'Û^…ƒa8 î‚âïaí\^ª¼¹u
+‡	E…˜ÕùŒ»þ~%¦H–þ h™B)ºÔ¡0ô¯fßŽºïu‹JŽ¡º-K½n…ª&²”±
+ò¢	�âÔ¹€º¢*.¹®`_ãÑRÌ
+�YÁ0ÛòË	Ðâ²u”�8XÍì”
+Mb‡bû ¸¨È0(P½nè"%T´3½V¹DtÐ=ª(2|�EìY»$ÚÐÐñ…è/=²_
+k7Lûvèÿ’ª“ ¤¦´qõŽ�ÉÏKDµvv;g¬Ù©ï@ïŸâOFEn\í$¢Ç›STù4*ãý
+Þ%AÜŸ9ægŽ8£1"Že•4¸1½yÙ¦	�‡7?I ©ŽMž.\/Q#^Ð=È3	á/åwÄ÷bF/O "™¨øÚèÁ„°pesÝ2‡‚³=½RîÐ± ÑÜ´æø4¯[<ôF¼VPdÎ} 3|Óe¨Û²2<;H%RûEJøÌ|àîyC¶»˜_X2™<CqÜ2õ,„cL±²ý4á#œº×ÊI™Ñ6Q›eßñSŽ*}LmVBˆþ^ÆfÝÏ-la¯•'{²ê%Û³ç¥üßö°åånÚs©¹<¡X¨¥Á=ÿN¾2Z¯Ï"+˜ß'z$&Ü%�Aå˜È3¿öY+~Ö¦ü¬ýžR,ã¦{ž°�Sp!g çâ8·„-Š‚-5[øù�‚¾‡Z¤"µ`¥ñšÂ“¢yÞwçg„­¯»óðôiòóƒÐsTÐu&5T§CR-)“ïu8êJ?*ý„ª�G:Y¤A^ÑP„»mU�·­mHÝš´øÖR¢0
+Ò»è�Þ»M„>q–†÷I;úå®”®Ë:™ISÑó’��d#¡
+³C� ,eu†Ô3\s2rìˆG
+�^¤%š˜û¥÷®¹wa"<¨›ºéèoÞ�6¼;3½6ú¯ƒa÷R©àšµ´'D1PuÚ;zâõ\|>~ùl¸Ny³´�\€åcä2½C2¼¾ÉÏUˆ•Æ]·Ô\fþÇxÕ47ŽÑ»n+UÙñC"™ÛÌÎN•SS‰}Û¹À%1–I…¤ìñþút¿× (ÇJR®²h€@÷û02Š÷Z‡·ºîiä`#ž‚LY
+Ùïíýkµ‚§U‘¹>iAm‘‰¡2ÄúKf(TGjž¯Å‰lö8ußï¯=Ü‚ú÷E®o9ûÁëûN‘mäéþð%rÁ.�&
+=åSÅ(š÷È86½%Voi1&]oYµæo÷uïî¾¢ì¯/2<ÊætÊü1®äÑT[ÆØåÝW×nÜiäÐ>�²NÓ¨aë7º?'‚¥>°«FŒÊÈ%‡M�\ââ½È~„)×¦LµÇs•ÁŸ[ŸÀMY¬O¯”`…*È¾Ñ³ToòÈþ�ÇÏ‹j1³—&Û®ÝÞz1W4š*êaÒ¹¶?�±Wnq-˜"”R>õ¥#JÁÅÔ°“U>L¼8WC£4†Ð8HéJOì©È?Ç}5vLhTØÙ¶ã+ö½aBo_ø¤$©+C"ÂÙwòs¶úšá‡žV�¼V[Ê3’J¨úK	7ÁŸ4h´a>nÏ%_¬4EX”q°uI¹¦äÖ1^)¢U<U'A-
+#a)ça§îª¹š”?Ðª§À;Qb¾ÍÈÌ¥@€×³P¨bOÀRÂ>5È÷ÿØï7c�êx©r
+0ÕÁñŒokü±1�»•—›*¨�#Èo
+ê{£ÎpŠ¬³´dôýš}Ë®­ÚÒ¶&g‚©Xè��/9|¸tf3@Ñ„žB]¯ØÂ†][þÈ¾”~vsnkÇÞh¸µVÕs�S6©›¡² odÃ›œ’_‡©:4,"4E«Ûÿ�àÂ]Å‹ÂÔäïFè8^ª/ÓÌÂ•~z2Rã7ªÊpœn’×™AAü×ùTU
+Õxé:ûˆÜØ‹$T¸„â=X\»Üf’*gðV˜JN‚é<t”Ç��Ì·ýœ·£¢"6™]~JqNß¼T�ßBCÊz[Ù.žv!d2`,ÃsF³
+ƒð9íïÜãIŠˆ³=ã$…@t�ï(ñÉnÔrðeøäxu›J	§é-HwâFò_l‚§˜+ôžŒB%�¥k²R@V�h4Ý;;p!Æí|ñ12ßLIg±\Ù­©#Ëe5ÍÒ4� ±È¬,!þO¤scÝ><©üT$‡)
+‚7êÊ~YØ~°x�Ê*ÁWD{Â3
+¶‰œ4áÕ£½±ð¯Ues/U”Áj%‰¹‚`+ÞL%y€©�Jûù8ž¥é"Þs¢¤sÏ©�2˜f]õ,ËÓ@=�‚ÁRíÙÙ�à¨8qšýàE%å³ :oB¬÷Ÿ“@¬‚> ’ÖH€	@òÎg[Ç¾\Åw&JO£äd˜ï�#I	}/ù=ÓÏ‰W©©”
+4'"®Du¼îª€wZÕ›�®_¨ÛÅ—Ë‘åÎÂïÔj Ú8]XföïBAŽ¦¢�*;`á
+µ}XºY9Íÿé.y�@›IM¸¾J>ä´åÓ”Ob€ùRAŠêÝr™ìü,ó,M&g™�.;�e¬ÙÔ(í‹×òLåÎ2S7âG&šrºh;àÈSÑ…ã�b�÷Òe˜ËÜ–Uj¸¿uŸûIÕ…}:+¶Ph¢o|ôÐ[}O³‚l¶™ÇÆº®ÕÔ¸°Ð|AÇ0‰Ú¹}Ý¡ŠkŒ�¼Y!i H“Ý‰Y=¹
+É%ÜO­âÃ5¤
+Ë“]´íêRÒ—­¹&a}Ð_ëÓ!#Ê¥”ÉK™M×Z&ÈmÊEjFên°i�w×ŒÐ‘$Ëiz€1/ä¸_ýÛµnXé™cb«pd²í_§Ý!Ö$InŸZO0Í��£¡ï@Ðó[OÜ«skâ¦Gžæ¢¶=_;¨
+A/¶þü|�¤]˜Vçû˜ÔR¡I‡ïÔåÔžDÇ ›1ÊãLâ2K£‰ôPâ×ä}a*Â¢iCQí�µåë|–Îxœ›­a\�­Q ¬fa.,aàÄ(19R„÷íšßºaØÎÖdëÐîU�HsË %öà`�žK&%"°ð[÷¨<è¾ú/ú�”Nn•ƒc‹ôéá!vrD›+YXªk!|J¢âvé’BŽäÐó$?±žÑ?€¹¿·ÍÐµ{÷¹+wµ*ì£êø½°J:®²ˆÃ*òd«är¥¹®rs¶L’öÇ±˜)ç+æ�îŸëÈ
+›¶#ëN„U‡P[Ë"Î? e‰:‚á^qÍ»½«:)t.‘p‰ô´ÄXbù¾Ä¦KãÇ¾ÆÕGH0*Ü·˜Ú…G,�df­[P>m£™—B™ i¥š”íEu÷|³¶¹�Ãåw‚ñ?g÷\òl»¡á*.¤5«¿·::^ ,ÿÇŒòsŽUBÆé>\æB¥EFÚÑ*bGêÓª¼P;¥%-*oWõ|o¢L ú¥bëš—¼
+(‰%vR…Eu%fy(ï†BÑU¿*v9¨Æÿ³·ÎãUÃ(o<ÆoÂG
+èÿ‡CYßW]‘€8ZŸå‚gý{-§(˜øº3·&¯vP}²ˆõmOf#›ÝÐ ©…z17ÅÊD˜.T³#fi<.ªø)%›XW=w°mwfÇF¢Ê­¨|)ÐÐô
+Ìr9’ø±ªß?õØêº*…ÇPK‰”êTáÆQ•¥¯ü-z¥`‰¶fÓ©[Ð‡ÁÞã¬KÓ’1™I¢m‘tþT|ÜÃ4ûŒÙâÀ»šÇAùRDrã
+dÎ!©0 ”ŽV=h	 /o{{¶'…S£ä}=ˆ-1`@-_Äâ_«|u‘
+¾qp9zÒ�|€g#…Ü([v6ü$wãYg�{îX7;ê2Dõ€ÜI¸¡ê'K-Haˆl¿�Ü5U[|ž-ñøKKúÖ(ŒÄØ¹»Ohÿ�DAÏKMò!%‡ú�ÖLÙ‘LèîÙò#PãF'@²k•Y¦Vî»©º‘�ú9ûvÿ½ÿ9GjqaJá<Â4^T‘‹Èì…ÈíÒ˜`Ûn;•9’ŸL%ÉOìPEÅt‡4d,ã’FÎQ�1×Ô“ãËÛi[}¢=˜ôý`#D»Þ†MÛSà]¾ìáŸW<\ýë*Ê%ÀÅ]
+‚EE¡|�
+sÉc–¹(Y`Ð*uåóÕ§»çÄ}m¯þ~õåá*2ò�Ý2Á’G+÷r™
+—$™Ê€(’>	€p5:ÑÙ·z«™ü
+s…çWäyáó"1eûçì^LaçáÛöÎ´û¡ê„¹Ÿ‘:µV~¤²¯}”c)÷•ãèjù
+µöMY½—R¤ãzÜ¿�Áñ=
+
+endstream
+endobj
+4 0 obj<</Length 50900/Filter/DCTDecode/Width 442/Height 323/BitsPerComponent 8/ColorSpace/DeviceRGB/Type/XObject/Subtype/Image>>stream
+ÿØÿîAdobed€ÿÛ„		
+
+				
+	
+ÿÀCºÿÄ¢	
+	
+s!1AQa"q�2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ	
+„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q�‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“	
+&6E'dtU7ò£³Ã()Óãó„”¤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ?è!EFù¢vjƒ¨ÅUQóÅQ¯ëÓ"ª©Ó_SŠ¢T'lUQ:bÉ�1UPƒ¨ÅU“¡ÅUS¡ÅUlAÅUQ{âªô'¶Øª¢¨ïŠª/Ù8ª¢N¸ªüUUS®*¿n‡Ãp£lU~*ãŠ©�|2j§Ó®*„š•ëßc´¼ð¡Åjßþp\zÞk°Cƒô¾sºÁy¿îÓDq~;Ÿ`y58ùwN$S÷	×ØW7} $²ä•¦Þ9“@°W@iÓ¢¦,ÔíŠª�h6Å\>ÐívñUÞ¥@#pIûŽ£èÁÂÜúû]1áUØUuGˆÅVÐøb­Pø`WdUÒnÏqè2jáŠ\Ið8²wN*â‡qŠ©â®Å‚À”$â–±dìU‚
+È¦-J€�±U@†*ˆ^‡ªÆ2*®Tbª¡QŠ«²~X«iÓH”�1Utb«ãê|)Š¢‘E1Uô>ª¢
+
+ñTBý“Šº‡ÃTN”=ñUP‚£çŠ«q4ßm§LUPQ¶*¿Ó±Z.ôßåŠÓªÜ�B+_~˜ ši÷Ün:WðÉXT;õùnrTR–Ë4LíÊ†@MP0¨ú0¹¨À|Ï«Øé–í%õì6kZ	d•cßµ	=|2?P5»1eòf»gå
+wÌ&}Í6¾V‚æAõ-Vâ™mñ1i#³»Šfƒ<€Éê5ý®\rJP¨ïîO4ßÌ÷òÎ»–ôÿ5èß˜Z[\*Å{¦Ár�F€ž@­°Í„sC„T‡Í§˜¾ GÁô^Ÿæ½ùVHîÄ- SÆE*+áS„j„O¨�ñQz2H/"˜rI‘À¡%XCÓ¦fãÊ&66ÆRš0Hj¾â£ÜxäÀ¾LA’§3Zw„{ã/O=“KË�¡»5xŸ:Ó¡ŠùÓÌykC{è„fIeXai:Uö©Øì+¾ÙL¬Ä$zˆi¿šÞ}Šæ{«-_·3HÒj¶ú™‚gŒ�”Û,]WÀ‘_£ÇG	{Ÿ“<Ã?˜´h5)íÆs#Å-· Ût™(ä$¢™…+Q—¡o
+oá¹8i[ä§ö‡ß�.¨ ÐŒULœŠ=*ì’¸ô8¥È@œ,š}ÎÛâ«(|1Wb‡bÅÛxâ—´;ŒY)â¬1‹R¶*ª�1U@†*‰ŒbªØU:dUP
+ü±UPƒ¨ßJè(7ÅQöN*¨ Pî1UXÁðÅUÇQŠ¯ÅUWìœUQ:bª�QÛT¡=*¨‚ƒ|UPu<š»Ô�âýâŽ®j6'cV>wò~¥tÖ6kÒ®î�Ñà‚ò	|Õ\œx‘žlòÞ«-õ–�¯Xj·ö	)¸²´¸ŠyTÅ@ÊÉ3
+1Ôu4ÄÁFméˆ_yÞûO’ZÇ¢Ðï{jŠAû?‚0r">süÿÿœ†óW”4o.êK‡ê–Z‰¸Ú”±s>¤2Hx°#âÒ¹~<`‘|­ÆÍ³Æ%ÿç%?7õoÌí#FóÖ§fþYÕ\ßZ8 ôRxÛÈ§ÓSÅš€Ôôß2ré±ÿDr¾Ùó_ç7åþ“g¿œ4©õ(ÁŠ;X®CŸQ…¸mú×5™Xš¥´e|¢ŸžÚ5½ô¼Ç,z’\O5ÕíÔËõkˆ@©T*>Ï�l«.ò‡_µÌÇ››?¼úÞx¸¾w�£¹Ò4k(VÉ3#êÏ$ª~e»
+¤Ô�JT�“ìü®�_“�©0‘Ù=ü�ó'‘ôû=5Üy‚÷]¹TƒJ¼·+-´Ôèª¬ÏUbiZf“ÚA/Håïór´9øãÉéÚçæåï–g¸²†ýF¡ÒZzÖ‘nŒ‹È°’25Ú õ÷Êû³òÄG/—“‘¨ÕqdPþhyNòY­ô�BÒy´ô»Ó´««É…Ã&#¬Ÿ·U,)í™ú­	”¿©Ž< Ç:¦³ù¯¯kÞf{o8µÃè–ò\Þ[ÛÞ¬0}^*¹Ž‹÷œToÆ¹´Ñ`Ž8r­·pszäûoò?Íþm·òeŒº® ÷I<ï.™¤¼ž‰Žõä
+3šíMv£zÃu}/¼÷s•ƒ\ƒó;Qº¶yâ0*¤JÜ�”VF'àÜÓ‘QZxf÷G)æÂe›ê®½õæä§—ù§þr†ßÈìvÞcÓÛ]³º"YB,@Æ¥9-%,Sp<rx“�”3¿ùÈÉÌŸ-Xi¶þaÿjº�Â©ëVÒ¨ŽPE[ˆÿvµ=I=7Ëré½$±†¬òe¶¿’~l·U[;[W†e
+
+Ð¸,Œ®+ð¥+Ð×|ÖK²–GÐÞDò]Î‡¡Ã¥êéò–.ÜGúÙ~3[5îÍæò�„¨
+¶=›ªýù;�JS7“îS{{˜Ü~È ŠûTâ2NÒ‘Ýh´5&ÖInÆ?ˆP|²î$ÚO$rÀxÉFNÔ`GëÇ‰mhî?,x˜´˜€ ±&€
+ÍqVú ¯ A]Ç*í±¡ßç“ «¹6à‚8ý¯mé¾4®É+ºb­s8«u8«�CŠ¬¡ðÅZ¦*ê�U„/C‹E‡lUQ6íŠ«¡ëŠ¢ü'ª);âª¨
+:dU½*«>²VÅUP¦*ª«LU]:bª€UP
+ü±TB¨¡ßTU;âª‹Ðâªˆ(7ÁaWö¯bÙ�úH¦HäŽ —jÿYN¦låŽÞìÙÌm.&4�$ôÛƒ±þPw9>ÜŽ8÷¼úò-GMKùu	,­gµ6Zµ—35¥ËÈZ:«¡øy�@ßÇÃ�Ã1¹|£ù»ùuåè¼»u¨þ^é2éóiztVñØÁªÝ^µÆ ¯¹�!˜(�=:ñ(Nãmó*‚äÇOœ¿%?1n¿*<ÏæüµMCTK»KœH$Œ<�µ'³1âx‘ôâ@pˆ#wªþqÿÎTèšÆ¶“y#M”Ù]X"]­ØU•n~ÏÀèiÀzhHë¹ÈÆ
+±Ì_5k�¾tÖ´Ý_C»»k½Suy­'Uxª½£Qñ ürã�möj™œ�"À.uÏ5kZÜKu5Íþ›V¶÷EIx¢µR#T€øo1fcæ‘„÷¢èŸ–þnóN‡qÊúÞÇP"K+-NNêå$Zòæä¤«š½GiBï_ÚØ0“²E¨~M~`i“úw:+‰w:0‘$¯Rkôe‘íœ|+ñæŸÊ�‰±ü“óŽ¡:ÁéÛ[›ˆË¹º¸TŽÜ@r*IÚ™V>ÛÇH¿éü§RYæƒù}iùSwiæ:Ü^Y]é¥gÑa·‰3HMx»}Ûze'[ù½«cøý)ááy}ôZ¯«êŒ—²;^Þ\Ü$nå@á—©ïÛ6ºsáÃ‡‡¥rq§/RÇÆ–IEk™$üÊî2^óüDÚÚñ4è/CÛÚÈ·Ñ:_ýb%—€e#÷OÈ8Øîr&Ãß²xºµ§y«BÔáÑ´‰<Ë©y:ÏË¶÷'ôÄÜ}až@æ!v?§,Ã:hb�˜ñoÝl¡¨!ŒMçß5ùNiôm'Y’óJŽXîmeš0�(¢;$
+×¡9šqÃ%VÁÔNöyùÇ¬k^b²ó¹×¢ÓGm¢’ZÂ‰‰ ‘@ä	®Ç/Q³LóN\ÁWòf�¦ëº„z¦²ÖAî‡¥ÃÊï#ÔŽ@ñD ñæ§!�Å»bH²£–šRyËsÝIçY Óô»WŽ8á¬œâˆµµ²Â’g	;wÛ1#d„{ÂÈŸó�5ÚÉ¯jv¶öÁÄRÙßB°r©øeŽX‰Z¨ÜÓ)Ë‡(“îÖ@}kåùÉï!y©yZÜAtñ•õå±ž+® šU”·!÷fÕåÇýäL}à�½ _'°i¿˜~OÕx˜5˜!w ¹+çjDdáÚXI£(ß¼~µ ³. ¸E–ÞxæŒô–6¿x¨Ì¸åŒ¹XÑî-ÍN	’5”ûj(rÍÑi5Æ…¥Ü|RÙ¤f• ­=ñ£ÜÉŠkž\·°Ó5ëi�;X%™ aPå°R}È¦DÊ–Ãá�GÍÿ›kÄÓu�Qs$jpÝzÑ,«Å¶R¥Yˆ'½2¿/Rò™<Ñ«k×–:›Y]Zf–¨,¾Š8`[ÑYÀu›òëÛ%¤�¯b>¨­Q…7;fe„,æ	¡4=hzÓuE
+
+pªÀÆ£lU3Š»ÔÅZç]¼qUµ8«
+@iÓ*éÓ_×lUYSc�UACN„äU\ ê;b¨„èqUDâ¨„é‹%@	"ƒD  ßT¡ðÅUPtÅUÔ±UE‡lUQ§LUPQ¶*ª ÔmßU,‰RìSw5ãAóí��ÝäøÿóëÎŸœß§tÍòžh¬4•°[�OÌ1˜ÍÔ²ÉGÊb	@ˆ†ª+Ri¾daÕ\FŸ.ùÚ?ÏGò¦¨ÚßžõÏ0$q:jú-“<vÒ�XD>dä‚@#2	ftâ*~Vüãÿ	~Ui?—>aÐmäýi5wŒÅ¨B·3»‰–X^8ø«Ëðª†æ+Ë¾@BË3O–¼áù—­ëkmaqq%í¾•4¿R‘À‹€ë†µ'/¡m92åÉø,7NÐ<Íæ‰ã[iï=Zó•¤KËj6Ûõë”åí6I«6ýky7ºùcòÏjçÌnr¯g©ˆ€cï·Ï9ì½¾'“Ð+áû\¸iéšhŸ—ÿ•vóÁepM¾±hî—
+|„ñ(i×`£j÷Ì]F»U"×Þ\¡ŠƒÐâÑu­I?EXiWþ_šC%¬b$c í	º~9‡›W9!ugåËù
+ÿ˜-“J¿à#ŒôÖ±ˆ£P¤Sr+Je&B7Hæ™OúOIÒm�øŠÈM(’iîŒÂ-©Åi^'°å–óƒ91ùŸœL¶—öš-ö�4OnŽC¸�0¢©§^Ýrzhzeî-,GÍž\Ó;�/kzùKø&Š{;Nv³ˆ“ÿYŠ‘V=HÛŽm;>^ãÜÂxíâ>wò–ô]
+d‚êÖã]ç^]Ä×6¥Fôbâ¼ýó
+M�Iá¡oŠì©6‘
+îXšÞƒÃ3<@ãZ´×·—
+=Y^HÇCR*2B–Ë(ò¤ƒGóœÒÇ¡$ @ÖÈVD¬ÄM*9
+æ²b6Cv(’ú~/ÊÏ/kW~Ÿqew—îmíî.%ÒÞ•$Ä��lÑÏ^cËñö»â°•y“þq®ÎÆÍ®#†êÖ¯Á'I�¹ð6?AÇnd‰©~>Ö£‚ß5ê¾_ó”/�ž'€$£Ó¹BJÑNÁ»syƒQ‡S$_ÁªZ~û™?—üýp‚ÛO½†[½2)¤šMýéÀ¯)«W­vÛ&qF;‡S%˜ù'òµ<ß¨ZyƒVÔôæÒCòŸIX¸·Â‹qI¢Ö¹LµFnN!aî?—Cò÷”¼Ù«ùÌqËêZzŸ•a*“ZIHÔ<ªÓ“@QÏÙß4]©“.XÔ‡ßææaˆ¢b»�¹Ü±AV¯P<xš~9Çä€�¾®YÃºs§y“[Ò˜IeqlÀ†duvøRª7ñÛ-ÃÚÅøý¬N+zVƒùÇçHæXqz£oô�Î¾Ûfd{o%�úÿ[T´ý^Ë¥~gßÜ:®„‘(Ô¸¶�Tä¡ÜfÇjÌŸWãíh–$ÏPó�–u�:kYuVÒ_PŽH¹\DÅwRµ>y²†¿…^çÝúÚ¼:/¾üšóÛ-Å�î“ªZMÉígõ$Z£w=²qlÃÈ_–º¯•¯eÔ5;ø"�-ÄKm¢îwø›¨|6Vy¬ù²ÂÖÝí,£MBë‹ <@Ub(!Ö‡-Œ‹“É2™f¢Îû·€xeÑ’µëñ ¶^ªž½zUÞµ{þ8ªïSkÕ÷bª~·Ë®*Ç“a¾,U*¨:ŒU€Ó¦D'C‘UTPâªê wÅWâª¨(7Å’&>Øª·b{§¶*ª›Š
+Ë
+¨ñ8ª¢tâ£åãŠ¢¦)¥@
+FØh¡Pá€ìª”'`	'�<“KÔÐ·!Ð°ƒº-…~`y‹Ëú–µUÖ|Ëcå¶¼¶˜XÝ_=ÔâT7>¤Š¬EBOA¾Š(&ù?5|Ýùõ®k÷¨¾QÒ#ŸV±“ÓÔo´äžâdŠ´nëHcaÓ—|ºsb#+°ó&¯ù‰¢ùiTÕÜÚ‹¦·KGXíc‘)é8z	‹³¨4¦ý2P<\“’rê0^\Þê×ðh:]�ïd‘­í­P„.dëWBÕÆƒ}²s�Ç"j…¸Û’úÊŸ’±ivI¬y‚Ìj‘suv�z; !g#�éâ<s›Ôö‘Êºü{ÝŽ(Š²Ÿ êþQâ¶sÙ]èh°¬	@"‘Éà@¨ê
+~œÒ130@7WÏÊ™ñYØ}ˆñ£ù³Cšéì|Åý¤
+è˜ªÒFˆ ¡#‹|D1ß¶	êqäÉé�|êÎÓMn÷ÊÂ{{=]ílµ{»[yåv‚áåœ†z™d¨,kAÀw4Ç><¶$Ã¥”B}/_³¶µ½ò®¥m&›é�A
+;¨©4'"2HŸ¤ü˜ nu;«æóÍ­š\Zº¥­À’1+¯u1†gã„åQ7]Ê
+wä{]
+äÕ¬<¯'é›ý|Â¶ò¤Ó»‡IÔ•HP‘°æ?f¸ÇO“†ŒMû‹#8÷©Åç‹½öâ[�OFÞSÖæOQX«<B�„‚ß¦eé1pXž×ß³Q/7üÂ}'ó#UµóŽ£mkw$QEsg%9(XÎà¶eˆF<˜q–Käï"éº=Êkú†©¦›[s¨¥Ê¤°•eÙœ1âÏ&	
+wÇÿ05/ùÇëæƒË�Ýê·n¡¯4´{3cC"…ªIâë—ÇQ!Í§Áœ<³ùM}æ�m`{ˆü»£OrVÒöøD%…®ÝˆÛ¾[-lDNû×zFo¡´ïÊ{?ËÇÑµxôø<×c§]“ãî²��3ø‚¯‰Í>}d²sr(ŽLÚ[ÿ.yÊÆDŸÊúÉ¹k‹kÈ¹"£Ÿ…UƒP€Ù†e&Å³¹ºE®¡ =¢êg6š·¹©ŒÅ&ÒÄÐ0VÛ*eòQ*æÊ<Áù~ní.Åìv—¶0PM=·U¤‡z—	¸ÞÞöËŒ…X|¡ç¿Ë
+/A/­iÃÒ`$¶âÇ¨S±ÍÎƒ´¥�ðËcçÏ§›‰—N-ÐÞTó$Zc^D,dÕ¯Œ,‰õfgš8éÅØ½	
+•ø”-;fã,#Å/{T™«ùuù¯¢Ç'›4M2ö÷BhšîêM.wy­‚Ñ˜9ŠâÐ¹½0³GÕ@yÐlÉ)�¤/&~wù«J×4ë]MfÔÄÓÅiqcw	õÈá+"EÉ”üÿÖÍ?hö6Žy!(ì	ØŽ€žæXµlÈ¾ù6Ñ¸W�j¤ƒ°Ø†Ncî9æ™µNÎ2Q‰$·”<tF¨§c\qf—ÕGmÛy„|:† üÕ.§"ä™C
+‡M½ó2:ã3\¿ö©@l»Bòþ«ª,)tdKwâfs¸©£}#6:m>S8Ëz°z¸òˆ¢öyüù¢yKK¶±{µv³�Q*EX×pw>ÙÖâ®®50wó­ÿšïâ·‡œvÓHu,	¡Ë,q;ÐYòä°×ÓVÅXš�þyœ1†
+M¤ÞFíP69h€T1²¾�~ãŠ¬1Ý§ìŸ»ZZuÜ§OlUoÖdUX|ñUŸ\Ü‚§|U¯¬/ƒ}Øª‡Ã*±ŒU\(¨ßW^‡U�DUPbªª
+FÝð*¶E’ªS§ZöÄSÉ�ù‹Î¾Uò•¿ÖüÅ®ÚiHRp$4î¼›èðË<"ÕÆù·Ì?ó—_±ºŽÛË¾^¼×­ácêßLËl
+×s{rÄb^7´~]~uù+óÚv³º5ý´þ�Òµ	Q%aÆ¡¢Aa]�)A1›ÙbeaU`Â�ª
+vë_»)”H´M•FS<Ñv¨¤j@§Zåâ7õrR6µ³Ï´M5Ì©*¥šIU $“�É—!Ì}Œc"XN¯ù‹¢X “T�Aá=¾1SO–iµ=­ŠA{¿[‘<OÏßÏmn+Ï>¿š|Á¢7˜¿IYFºšî �mö•LmAÉÎþùn‹´§™ü|ÔààbÞLÿœ„]KÖìN�¨hVT·³éHQêTFè}þ-³oáÞÃ«QÏÀÂü×çM]{M`yj=
+âheÖo"Y•Š˜cç�¤tqFViZŠW.Ž)b
+Êr1ÿ-ù:ÂóRÖ¢¸åo­Ç"[©O…”'Æ?sJTwÍN³<÷±Áì
+½×”u+$Ô<Çz| ™lõ.
+‚K…¯V£þÄf–Bs$D`É¯½HšÝít(õ�:ðþêòÂXëðÆÁ�BNêTe1 O!îN–2œd#Î�1kÛ«ÿ¬Msåo0\À¶(&»Ño™ÚU�¶¬i*…øzÔV™lc‚YèïbtˆzäÛú’ÛŸ7i'IŠzÚíf&o^æY+ÐET|³ft&F=Û~95œàìz0K�9ÞF­g¡ÇúÖSñbdbvÜ¶ßvfÇ³ñ�ÿWêhË–‚†�åÛŸ2¯oõ?«Ú-]¤¹oQä§^]ë‘–|x6ýN«?hpXü}êiÐµ_(ÛcN›ë²ÛÑÑ¡âÕEßÔ†X›‹¥YA®W‡V2ä¢Z°k¸ÿµwå·œ|×u®É¥ëAu=V6hí®Qînmå†!reŽU‘ÝžDze{æf¯LmÜâ<BßJj¾Yò§>�¨»Ï§Ç$-%Á¸
+¨Mk,O*ÇÀ9Ž2²CN_´ÃöM5'b@Ÿ–O{dl§Ô¯<·muÏåã<Öþ�&…êåyöUj�æÈT:ù-ï´m{KÑ­5·f¹‘–R³™Yà`†´àÔ$vï‘–¤Éšqq¡ù¦;+4y´=ec’C!õbY>Ë'B•4!Cm˜òŸUÑ\Ò"òýå‹êÚ…åÆ…H�b&‘¤—e)Hë×¸ÊLí°Â™š\Ž‹õ�W²º¾6Kpñ+ÑÖ)Š?-™‚ïLÄƒ:4Å¡óÃ]µî‘©ùZÒx¦T‚)–ùÆª±«½Ó‘¡¥{å¹+$ÊIn™£êv—ÒÏ£kR‹#xîö�ŒÊÉ($IÄ•*B5ÌÍJög@/2é·7ž]Ô¤}.KÄ6’ýhÃ•š î¢” ¨Üì2í”µG¿ô…ªò–·gäÍ&âþ),ì|Ã#³$·$Ò}\,�wû¸ñªî3²Ôãñ£îprÌ‚˜yOóÒóOÓuËi4¹/íï%™¬B˜á{c;z²r*Å™K;îÂ‚ƒ*É£—‡Â?,5$=;Fó*ù¦çGGòq’êI¡¸µÕ. ‚haTqW-
+�{ç7¨„ðBb\ˆ.n)ñSè´¼Y‚UÙˆ~'`BÐSÛ8mF3ès6¯Fò®§ªƒ/¤b‡bdjŠÜ“Òè³™F‰ÿ©‰È"-3ó½ùiùU¦Íªù¿[³·hééÃ=Ù€¯À€Õ�°ë�ggû9âä²?<œú»|ácÿ9a7æO™.¼¹äëÒô‹k9gý%qO^Cê…ø#¨¡‡|è5Z¥ˆü~€Óöi‘ÚC}rf¼’[™$<ŒŽIßý^Ù¯Œí¾O¡.ôÒÚæŽl·K±ïB3'Ô=íEõ±Ò"eÒvm˜!ÛB…ëX€¯¶*….D`b¨	¼±tŒ|éŠ Ê‰¿À*—Íå kHûu¦*–Iå¢n=±T7øN_åïáŠ¼ÿ*¨(7ÅUQóÅUñBªxwðÀ¶
+((v>¯BÄÐøb‹D§B{§…çbØ�ÀÈ²b¾{’ú#ùÊm2i-õ(´=Eôûˆ¿¼Žu¶�ÆÉî„dà=CÞÆI~ë>wó-äë$ú”—×2“êÞNï$�F®ÕªÐûfËÃpxÑ–¾q¾Ž5ý!jgvhöc€À'‰4´ómÅì…-,E}Y$hÀì´ÈJ*&ûCò·þrîÃòÿËz?”üå¦_kVrÍêëPÊD’Ê­ˆÍ]¸%FcÊƒp‘/¶ü³ù©åŸ5yrÏÌöw²Ã§ß,àzôý¥‘:¡=«š�Vº8ÆÕøø¶À”ê¿˜ÒE#.‹d`ìnîO'5î@|3�ÔöìÅ�øû\ÈBö`WúÖ£ªËêßÝË9&¡	4vÙÏj»O$úý§õ¹CO ƒžÕ�…z}9¬ñg3¹û[@I¯ôÔ˜+2×Ñ%­¤9FFæœ�ýYµìýd°Ìül×”[ó–öÿóÌ>q¸òü4Ó5hæsqq<0"ÛÄ’|+úhêi½T×¸ß=?A¨Æpø†C•�xgW“‰ä÷OËÏÉÿËøõ†ºüÜ¾Õ|ý©^*Ã§EÜÖöžµw—sG#Hìª¥é\�òŒ§È~>m˜p¯IüÅ¸òZz
+àhw^Xõî4Éíßë3Ú’Ê9!ýêrb(M{er�Ë±‰ßÉ·%DlðeüÛÓîc.yàþ”Ò¤¹õ~½j‚9�Óá�¸QÔŒÅŸdHt?�ƒŠsX¢�Ü-Î•™wå=Jêþ•…Š,�Ôr/QQÓjæ¿7gš þ>Ç¡ìyâ€â‘7«Iw›¼õæÐ55¢·»Ž!ŒadpT€y
+T˜:>Íðò�W_Óîz-~³M) .¼»‹Ê´�ó,·��“.¯|³I#ëpÅÒ$%ZB¢¿ ‚ÙØØ£!|¹‡ÎaŠS”Í´�ÿˆ5Ç[M"Á¦¼gUu–Vm‚Ðt'°Ë!˜o!ók0�z� ?/¦¹ÿi’µiç‹Ôõ”¬ˆ½+QZŠíœ�jÂQÉ±ØÒ^o]\\ÿ³!j·w6±^ôUÔ•‡1ð‚W�îbir‘;4rˆ•Xù½SËzG‘´;›Ëo)}ZÞâÁá–»¦2	]¦•í’"µiYØG1hÏ¤ÞœÑ²ŒÜçÖHÆž·O|)6µ¬Xèº•Î“ç,Eruù§MONf›ABÁO°+ö‰ú3Œu.@‰<”VóÎ6MúWË:«^ùNó�…œz‡'h~®¼
+"¸£†åÈx�^˜D`w°ž:"ãÓ"Ñ5è¡“Ì‘ZXkñF÷©4—¨ÍYd�”›³FTµZ›ü+\ŒjÁJ'XÓxi©}£^Ã|%š_B{fC3¯rXêI_Ã1nÍ-ÒYþ4Õuwc®y~9šêTýr"Hä´…c‰€�ÛVFqï“Ÿz†B\H(|¡mÜ—&§7¦\«<UÓ+‡sZ¬ÊuqÓ?«&ºµŽÓÔ›]’ÞÎV@³Ž 1	Z¦•û&¿#�ÅùåôHü#(Än_*kÿž7ÖºÍêùZK]"Æi"h&…@™Äƒ÷‚JûWléô½�p¹
+5øèëòêèÐ/¬?,¿64+Ý?AÑâ½·0O5¬×:?˜aôã»-(<ä;Hù-u3qötqFúþ<›ñfêò¯ÎËËßÌ?8\yƒòñdò½¼×?WÖt„Ÿë÷WDRChÍð'ö	ùäNyBÍrýÎ!2ù�Ì”ÞpòÛÜM¤ŸÒöÖlUî-�=Â×öL]
+;”©ðÉi»^•Oo/½ÄÔiå°{Ïüâç•<ûæ1ê…t«‹?-¥«¥ø‘dKo¬z€©S nä˜·<yãÃŽ�í¶üï¹–žR‰Ü?D´Ï.è^[’5»¦¡¨˜ÞQd#H—›²¨Ý¸�SLÐi;Dïøû¹æ=~lÎ]y†kMJÓòßDýia¿�›Hý6ðmË‹|<s§ÒèñÆ¬�q'–Gmßž¾fÔüåæ)áó™ï.õKÝbI+»¹^Gb
+Fê*hT
+vÍÎ)C½4ádî/dÿœj´dóþ¦’£G4Zlž¼N+ñÄ7q¸Íldâ…ŸÇ6ÜpýÒ-Ð²ÑM)Ö™Ëâ“±/ ¼�j·¦*Dõÿ�¥~ìÙàæ=íeõ2Ð¥A¨KÀ1 'æzfÔìÖ+ø¯Ž)·p\m[)ÃÛ
+¡é§òáVÌCðŒUÖÊOØb«~¨Ÿï±Š¾RGÏ*ýzb­Ž£çŠ¢=iµ@®{Ðzž«¦h–sjZÅüe…°-=ÝË*"ÐWöˆ©öêpÆ6ÄÊ“æ}wþr£Ëí6�ùyå�SóWŒ•ai¬FãärÿS—¸ büÙÿœŽ¸îÛò^5²o‰m¤–A7t2øe\!|Ià?&SäßùÉM>÷W¶ò×æ•ïüƒ®LxRñXÛÈäÐfˆ'¹éƒ…Fy4üŸN}jÕaK£:,”NìÎá¹¨|pQgÆ£qõMcK½†ˆ®m¯-ä…¦�ÕÓŒªSíG|"Ác9ÜKùö¾·xï½ ”6“I'páÜ|Å3c†váÆ*¢g+ÌÄ}(Øp*ðùäç\ÛDQ1ßÄœ\¨*ÜÁdI¢8ì¾üüŽü®òm§–|½æ+Ý;ôÞ±ªÁåî¡9Pº–xÕu¥†pÝ­Ú²Å“„rºûüÝž…õdwÚEŒ‘Ão§Å…º¼UI'öB
+¾œÓO]~?kt1¥ZŽ¯ks
+É{B’ò"´âWúæIB`¹1…1Åš§T'ejžÙ®É€h¨È§*ì
+	ÌC
+«Hªà@1éN¸lÄ«Í<ÙåÓ‘¸¦›s#†:•¼J'OrNo»?´¸ežV?Gš±O¹ü¯×x¦×¼Ë¨êâÅ‰¶†:ÁÕIe¦ãØæþ}±Ž¨»õµø41æËá¡—ÐŠÅ¦
+^À¥ç©	yIrXú¦i¹õñø
+çCÙÚ™f_ŽŽ»PH·ÏGëú†¤l`©^3úVpB‹†4UjÀžÙ½”‰c)—Û¿óŽÚU–‡uuå<ÝI£¨F.t}I^ÜÆ�ÙAæ|¶=juå)y;LáË;“å´¾½†$¹ÔtéÖ+ë;R#_H‘‹—èdV;û'®Pt òü}Ž|õ»üw<—Hü÷Ö<´�Á¥´ÚŸ—´ûá-¾�XÈ­n‚OEâ8×“êi^¹Wò_Qøûf-MœiŸ›Ÿ–¿˜Ë¢ù›ÉšW•µ=SÓÍ(•‰.ê$xÆÜ‡¾ØN—$ö§6§ÄõÑìÆµ©¶‡ecg¢[\Kê[Å0ŠÐ¿¨æGŒ«2¢óo„³R”«°øsE¬Å–r£ú^SÙç!¿ÇÜ¡~üio>’l.&^q´ŽdAJ25@ ÔoZ{æ¼ÂX
+êã¢8òüO¹ç]gNÖ´Óç3>¡¤Ï¦•Ó`gHÖÇ;han`…ªƒFû_nôXNj·­Å“‡y~†#ä¯Ì]Í:ªè­«OÅä±Ãfš»Æa‘¹P$bM^�Žù“¨ìÎáøù6aÔÓß!¶×Þ}+IÒ®m^Ö;™uK=1ÞG·œÃ*ŠG!¹Ph~ÏÑšÙéAO�Ä£®¤Z¦‹ae­Ø¢¾§«XDé=µÌ"@#‰@äÇ“-T
+îq–bÓz[>óžtoËÈ&mXœë*��`†@R@Ä3Iê
+rR*Ë÷æwgöhœÅò¿Õäãä�ò/(~yùÃM×R=^ëôÅ‡6–ïO¹¤m sSéJ¢ Ó¥3g«ì<RÞ?£õ8¸õ$Ü“ÞyÓ|û¥I¤¶ú
+œ¯rñÞ	ÓŠ(Tñ–ydŒaº•ß°ß0aÙs�áéøòvÔ‚ÿÎI�>â×O›EµÔaÕôkÉl5ÍJkcœª¥ÌWò1èGÊ”4Í›m6š8�˜>:Ñ¼­æKéÈÓ’\,¦…crÇ¨$Žþ'—´#¿�›PÒØ¶O—?0c¸‹D6iâw&¶WŽ.dí'î—Òäüˆ¯ùY�>ÒÆEßãæÏ
+/¼<—ä+‹=:-7Ë—Ïs§…yg·œ¥£\qÔ‘[rÅ³&®®tj"Þ·eåß*ùJÞãÌ˜WÑiË&9¹ªAP”b*Ç¶k§¥ã,'¨´ÿÉßó�‘Kþ‡yçOÑp±*¶–öìAZÎ]üIÍŽŸBoñ÷8²Ëoš¿7?1c—òãÈú®�æe“V]sÌâK¨¥ãê�r
+°u z5¥zŒÈ†cÆù¢ïÎ7ÒycBò³´oe
+ô×�}5ƒR˜õE(ÈàÙ"{±
+rò[(-àSt–ÏlÞ¼àŠi[Ö�­;c§…I†YÛ4ÿœw¸k¯Ì¿2]ÊÅÚ[z
+P„âOÏ1»cèÅÍú;¢xµEíœÖ75<üÀó&£å?Ëß2ù—G¹6Z†�n/¬.;¤«*Ò£Â´Í¦”\ãï2}'Üú‹òGóFËógÈz?šm”E¨2moO$µ½E¤ ¯^.»­{æï60ââäõì®49so¸Á@²_Ö´ß¬øY/=*§‹b¯�ÇQŠ-‡lTo² �©`J�:â§cG›Ëÿ46¼·ùU£½ö¯7Öµ+ FèÑ8ÈÀUvZ°Zõ`6ë„H_§©Øy“ÜùúÃWüÅ¹�ÎŸ>c“ÊþWPn4/ËëBb¼x~Ò3DŽ6f“â#¦JR‘stÝ‘”Ÿ\H÷ƒúž¿åŸ5kFÊ=ò_òÂ-D@=Rxý8^›d™×‘nû ç—'u�³t¸GçÑ"ÍtªeàÎ�÷¾aüÁ�GºÚX´ŸîB†£Ù‡ÌcÆ{““´4cøÊ?­æ¿š“µ¾‡-÷˜ÿ4m¯c°‰æµý4âÌŠX$fiµH¥e˜ø¥ (óuú�~šXä#tzÖøÌ?™^o×UtÝsÍWÚ•…€ZØM;5´K|&4Ré¶ç6Ÿ—7ÆÉ%ÿ:µË;èWp^ÝÛùrk¨Ç˜4 ÕK‹Y$
+ê�†tåÆ´$òi‘8bÄJ•§–µo>ù¯S¶ò7•5�5__^M-½�´LÂ(ÝËŽl´
+7êHã"%ŽcæÈD¾Âü»ÿœüÀó¶Ô¿05K/$BÀs°�…þ Q¿dÓÒ�ña#1²gÞ›cÜ>@ÿœBü•òÁsþ_5kñc©kD\?¨»†HÈH}éÄŸò³.rRÉíú‡�ü±l¶cMŽÂ(€‘[(	ïðØœÓçì¸j}R"ÿM°Ì@§™k?“!•ÛM¸µ%Žù¨Ôö'Ûñö7Ã-<c[ü½ó�Î$·y" …c÷mšú°²"vò?©ÉŽx�¬1µš
+­Ìœ:±RÌrHø7XRPUJE&Ìj9þa{�•_REj0´£ýrÃ¡4WýrÓd™LC¹a±úr——ð­²Çi*’ˆ“)d�¾œÁ8›6Ø!àÿ™ß”šž�¤÷mqmwd
+[_ÁD%í#!ÜûÞèý Ë¤ }—ú\<Úq"Ã<³ùc£ùNí"²ÑMÌÆ6UÔ§£QÈ f®ÃÞi½£2>£_�{,ZH†9æOË�qotÍE¼ÄuÓP¾™2KëBÅ¹qn` ¡é¾mlb�ú£ó­a@ÓÉ|×å¿Ì+Û{ˆZÂmw#=ßÔ£àò–q iA<‹:Œ¿hâ?Ä>aÇœO‡O6þW·½Ñ5»Y!¾¿¬Ìµ%�‡�ñÍ¾ñ–ãpë#ŽBöbÌoæÙàY!šµµØ©&¿	
+k–dÍ	rcJùéo�|Ñ­yÈ—õm2êïH×m|ÀösÄò�ÖWv³{xÉâ…q#Â´ø³_<"{ðýŽÛOŽ'ê|áùÃù±wæcm£"Í•wZ\Ëñ0†Ó÷b¡?œ¨ wÊ“±Oy>_©ÀÖi‡‰qý¯%ó·˜<Áq©>™¯”´6²Ësè»ù3”­+ûÂ?ËÃ§†/¦�¹¢q�cLL­–ŸíÑº¸–�_OÕ‰»QÕ¨Ýs0Ä»_]žÿÿ8ïç­B8ÝÃ2jæµÚh¶¶ÊD³M$ëèª'…>É*;æ}0'`çéú>�üÆó'æo•$�A×ì òî¥¥ùÃOÕMÆ—,ö÷–wÑM™ƒÑ]H,„2‘F_˜ùpøqÜS•’&¹>óÞ•æ¯3jÂâÚöñµ-B{¸TÉ+·¨î^nLÕ¯"AË4šŒQ‰õ·xýŽ±Ìš£òKáO4iPÅ§M¦µÄlÁ£2^µÙÓ¿LÈŽ»ßŒ|ÿk\´²‘ù=›È^OóD&µƒ‘~‰õªÇ'9 �ú’ §:ÈT÷ÍV~Ýˆ˜¿Ÿà»=6
+¾«¿¹òF¯ä«MçËš�‡˜`†+©Vú�6æ„ñÉ-L’•ôˆ˜­~>ù^nÔ™ñý¬²a¦+ä¿ËûýfìØùvÁaˆ8Tºš�w4ëšÉäžS[î˜Ðrµü¸Ñ.g¿žõ·Ž…ÕÈ)âWs½|[
+ºþ>Æ£1Ñ©ÎGh-y™åm+êz0“jf0¡éµ>´ÿ+3a¡­ïñòh–CÉ¿›~I¼‚u›½ŽíÂ<-˜s&€°m€ùí—O6®òÎ½;òNòu÷™ÓÊpÜê§ÓŽÚ=>Si!w=ø†‡®eáÊL€˜Èó¤kFK�AäwT¹‰âŒ+šãPvé±#®lü0ãx‹¡ÕŒvÖL·%¥‚wfbkÁi×Æ{”eÍ�ù{ÎÖ>^¹óGéo,[yŽÏ_Ò®,m­îXƒo5ÜL±]ÄÝ9CZ�ã‘Ç
++)Yfó�ŒWÎÚÃÿºÍ�øk°å0+ñw¦jûgx
+ór°�ß¥:"/Ç9¼ne!¿=%6ÿ’¾rœSã´�*z|W0PfÓLjq÷†>“î]ÿ8=ä<ùCB¿ó6­«Ii¤ù²Ú$°òÜ ì‘¿%¹<·Ý>Y¶Ôe‹‹gè:Ã3¯6º£�N`œÅ™æãqsiFbYrO€ÉC1êÊŠumr—‰Š÷ï™q�„Ò'‘ðÉ%¢EøªÌX»|‡‹j¨*JR­J”&›{øb€ôæò/ÍÍ‹Ëë!aeêþoÕ†� Š0ãB={…¢¡ßz2Dp·aÁ“Q.}½ñW•|­ç¿Ìo:KægI<ÇæF”:j—!EŽ›Fªâ¨Ì‡uãÒ›ä%—jz­'e`ÑÃ�RA�\y—O¨Ì[¾Óòäf‡¤É«æ›™<Õ®7¥’qKhÜÕ`BTý“Zûe\.«¶8v�µîÖÖÐ[ªCI­(Uc^?×c¸tÓŸ�ê/ƒ¿ç!>0<¡çMWÉ:£—tØmí%�QµCõ§ñHß¼ �»‘QÐæ~<<NY>2Ôu‹­víïõ]Z}nöfç%ÅÌ¯pkÖ´&ŸpÌŽ}Ì"l=‡È?ó„?œŸ˜rE®²iþTòÞ¢c{mJþáH’üJRÞßœ•+º‰‡¾ÙDõ¥F'Ý?–óïoÊ¿*Ëm¨y¾ú÷Îú¬|d–Ð·Ô,9©xÐ¼®	ëV
+{­3z³-›F:}ÁåÏ*ygÊ:tZO–ô;
+Â-’ÒÊ�+Ø•ŒmþQl©“!*1<•}2¥qQCMöÅRíGSÓ´›G¼Õ/íôëHÁ2\ÜH± ÿ3‰¼ØIüÌü½”‹oñ5”¦CÐ’ÈËÞŽv�ëL�å£-ŠDhÚ>o-y?ÍpÞZÅmwktÛÞZ²ÈŒTnC! Ó¾aj;#‡ö~§"9iç:¿ä�¬üæÒ®x=ké¾Ã4:ŽÀ†äsüy6�M<«Yü±ó’ýYÝjJº«ôfŸ'de�O¿õ7cÔÛÉõ]7S´–E‘%äµä²
+Ç!yqs¾.v9	1K«�F*qFJ«SL²yAsñâ‰N!º¸Žâ(&a:É*µ§�lÇ&$µæÀ%5�m_ûÈÞÜŽ¬hWé8f)×ª.Æ‹ÓŽuîô2ƒ”ƒ²žIEç–´éù€
+‚>¿�É�VHýmB<O;óåž“­Ê’jLW­¤R²|`ò€ß68{$6?§õ²:`C�ò–Î¦Cg~›R éRú3a�Ú
+ëøùµ	¥§’<Ú;kíbKûÚ2(èªá‹×r8 Ç3G´Þš¿ÇÍ·ÀÙ#‡ò#D†óô�Ôdk•c"Ìä±bwnKÛÛ5Ù½¡Èv¿ÇÍ‡€…óä¦�«Ê·Wví-ÔjJ>J:
+ûe˜=¡ÉÏñóD´àŠ,&×þqïOŠíæs5Än~wÙWéï™2ö§!øûÚá Æ?õ3ýòŠß@Ôm5mN¿³e’Îår��†¨ Š�·Êáí$ÄÁ'¨üsr£¥Ç©ë:Å¾¿æ»å»Öíí “êqYÝµ¿7’ïÓ�?Ö%‘åaÍœG†[«ö‹Äëøù£…,›òòÚå)sú`}¶¡jxW­3O=‘øûSÂ–ÿ…ìtÆÃn­N‹E5û÷ÈCY<ˆ4ž™ä0kI±±{kWEÃ§îµ3/d#f“0–<—ùkùu¤
+ÏÚÕ¼0Ä*Ò\ºG!¹ b9|†ù¹Òöt¯—ãäãåÔ,~aÎaùgL–âÊ�&å©…5‹¸Jª…Û”Qu÷:,�Âü}Î¶z»4ò+/9ùËóÖ={]Õ’g¾f÷,IJtãCÄc¾K6.ÌRCêLñ�tö7N´2J0¿k¦ÙTf"eÉ-oqy!Ñ4ŒˆdMq¨FIñ—‘&æDÓ5Èc´¹ÔMªÊÕá#—<†À€Ûænœ‹r@Œžgyùy|Š_K¹[ÈÜü ìs(j@kžž!'o&y’ˆa]2iÌ”+éš‚~t¦Lë	ÝÃœwîzŽ‰ùkõQc/šî–Ô8>´Êªì�û.ÌiÓ®k²vˆ¿kƒ“YÂö¯Ë­3HòÖ§#iþ_¸õï_”zËH„e_Óêu~ "Ùbí2ãõ¾ÂòÆ¡mxì‘=$�‡«¾Ë˜8ÝÖ›Wâ²??h²y»ÉwÀe[ëÝ+ëÑ�ÊÚGynnábsaŒÕ9rú3Ë—¶Öv¶Ð[D–ÖÐ¤qÃe"D
+¡}ë¹Ì‰d¶ž Ûj�:¨õ5©Êït€�–õ6ü¨
+-Û~_¸/uuÝ(s7	Ù“.=dµ©â®¨ñÅ“ª<qWÈª’…øXŸ„ÓñÀÓ	7ÓŸ“ó÷�ì|�¤sI {û¥-`—Ãšy©¹
+wãß ÀeNÛK¡žj @âþæMP¡¿¹àþQü©¿óõä¾`ó—VÚüÂké.ª/õb
+WÔåC+û u"]Äõ¸{><ˆ”¿œ>\ìbßZèº>— XA¦èö1XZÀœ(#ù�ÏÚ9.¯9©ÖeÍ.)Êû…Ÿ¹;^‡Í1Æ2o"¨�)Ðž•ÅOîöËÿùÍ]=mÿ2tmI,z¶ƒÈ<Z+‰a§Ï‡ÏÒKmÜ<¶øâ2S�BR½ëü]”Ù®ö¸ÊŸj~XÿÎfy³Éú~“£kÚZj¶ºLQÛÅyc+A7¥”œzr'¡4=öÌyé¢Þ&ûËòãþsòëÎqÛÁúf;+Ö*�¥êÁ­g21 Xùñ�‰;„æ,ôÀnÚ2lú{Ló†�©Â“Cx°ú”â	5é½rƒ9 y2{yã¸^PºËNèCoôdIJ±s¸ðê<2µQiBƒS·}ðÒ¾Cÿœ—d»}&Úúîôû‹9âžÒ)šK¾ÍÉAÜ
+ö#)˜ÆRyCòîÚîÓV�FÕ%»°Žz#øÆâœ”›ö4®Rs—(DSî_ùÆ]Vëü+­-û\J$Ô>²yµU$“àà¿Êª»ûœ"dµJú…'�¨kÆ»€ÛW,á¡m&$š
+
+ªi_[m>MJÑ¯-‹È†EVèJPË+„¹†ØâÉá?"—j^VÐ5¨˜]éÐHÚ‘FÚ»f6]2ì?Çs?Íly¼—]üˆÑ/½I4ÉšÒBºn€ž™«Ôv�ãö9ØuÒükË5ŸÉO2i�êÇ^Çä’ÇV!Fý³S›²2D“[ò?©¾ZÞ-¯Ÿã½�^h•„�Õ“©ZìÊ@Ûæ3Y,yG8‘ð,xãÞ‘��ÆNÇ}‡Ë1d+rÈoÉr½Ò“é¸uj2Üy¹…ªD%Ú½X¸°ý 69˜ã.H9O%_RÝÏƒ—òÐf<°Lt)‰TU�H‘
+Ø¶bJ'Í¶ö^ÒB„‡TR	
+
+‘ô¸²þò-f@sZâÙ€åÐ¬=ÇQóÁ)äˆÞ'äR=\�Í
+™ ¬h¿vUçªœD*RÝp´ùeÞ6ÌxKkr¾œT¯Ù Çä>�ýÛ²$]£~_kºéa6Öä�ßÈ
+ÐxŠÒ´Íæ�³óL�Á*>Gõ0–H�Ì'º·—<�ù{bu¯2êps€–k¦UAÀr<CÈíÐuÎ�MÙpŒª[Ç“®Ë¨«âÿÍÏùÎ%†�òÇF‡(Ó_¾‹ÓHø‚+Tûê4Ý™Ž5uö~§yäy?<¼Ûço7ùóU}SÍ:õÖ³q!ªúÎÊ#Êˆ9·Žž0åN9™<Ø²¤²È‘ÇHÌvŠ7cà0™Æ µ˜Ç™!ô×’,`´Ð,â½³o­ /5»<ôf§Ùö'4ú­DO"	jc´‡Í’;3Eoõéb�/\˜-Hâ‰½ÿ”j%–N¯>²DÐBÃ«§Öµ˜­Å!µ‘QOŒûuÄL†Œyäuòv™¦jYù¶Yëðú¶w
+ÔPI©;l79`ÔO�~=qgñóz[�.é7YJÞ”‚8¹‡‡NA¿|2Ë&Ì½¡|�ãæÖ‘&¥=ô‘iZsiäT†õXAïÔöÞ�ó& �ŽÎ³&¶D×ãïeºw—‘–y¼Ñ"j,dãxP2ƒáÄæ¿.Ry4NäšO{mio0D¼€!€;•Ãˆ¶C§¢þW«¯Ò÷þ"MÜW2qÄ÷=eCñò}X,.¦w<Ú*
+xFf�¢î2
+2]Q&(ENÀeQ™bÏí5
+‡Å—šMÆ ¼~Ý}«„�Õ—ùVö3urY•C(
+Iff�Ì©äÏ–Pä`Å¶Ö¹™ÇðÔÝj*7´#Û®Ln«1dìUñ¦µ¬Xèzeî±~Ô‚Æ2Ò/  š|)_$;’22äËG¦ñ²L8Ÿ´¾uòf�wù¥æ«ÿ8ù”™t]*ä‹N‘Ü\)‰^œ#s•õz\ºŸÈé|ÿÕ^]ÝÏ©Ñ0‘¢*Fª«H(ª ¦\ó²ËÄ‹N˜>¨„é‘U@x�{ƒ°'�ãÛ4¯Šÿç1?.u/4èú_›tË‹v>G°º}fÞf“™…ÄFˆiBWƒ6déó×8Ûó
+&Y$`ëZøf}‚âË r§%¶$Û`°XÝ5Ÿoá+ÈÃb¤Ä5Aúpðƒ6CåïÍŸÌ?%j‘Çå¿8j:u¡–>VBv’Ü¨aQèLeŠž!TesÁa¿NCîÿ#Îmy‹ËÑCþ1ÓIÚDmBÉ�–�Ù¢�¸l;,€“šéà¢çø@‹}‡äoùÌ/ÊÏ6z6çÌ–¶wlúŽ¥[)=—Ô+¤ã-;‰’O¤´¿9hÄpÉ
+âRjX2�Àô#}ów™@ìÂ¿0¿-“ÎqÁ5Ž´-%„7tõc`z‚vñÊL["ñ“ù©Dd—PÖìÅ¬C“M!B¨Ü–A@<r®Û¢	Øse>L¿òW“b»·Ðõk�3\Èßé2Ø�Y×~QXTm¸S\˜ä
+<‡Ô§æ�ÌÍcê³ÇlÒèÐ*;­žž�%Ë€	ädMÁöS_º$E™ð /¨÷>
+óOüåÏ–üÙéÁäÝKHÒy%Õî/CG{rÔ¤eP¬`|[‚îÇØæt4¸¤/o±×j5y�ÑËâú_Éó’6Zž�mækWÔ!òýÅãX=ÌÑ)Uš5åFŽ¼š‡©ƒ©È0š�7óøb+!]9sø›æ÷Ÿ(Î@y{ÌŠÓQ²ÕJµ'ô%Et+üéÊ£äqÁ�.qdµ·ªÞÓ¦ù§HÔ¸0HEY
+�ùã—ñžÉ·ŒØ)œöF¬œfµ·½V¨áS_f>m<ƒû?S9d%çÚ×å'•õ?ŽÙ
+…Ã6Á7öÍ>~Á„�#ŸãÉ¿ Åäúïävµj$—J‘/ÔÔúe¸¹ö4™»$ÃïýNLu6ò-[Êzî‘#%þŸ=¸r¡ãôšf«.“6=À;{Ü� XÙˆ£íUNî2˜äÏü`ý©!f�’ÞxÃz’�Ü>î˜qã„²DË¼}í’•DÒ{¦è_’úÄRKyùàš^³è‰!Ó5]4¶Ÿo3ü2$È¡œÓ¹âvìs¾ìýšqÞ¾Ï'Ošy	þ×�ÝXÙy_Ì–š'ž¬|àÑp]KQ°•Œ2*¡Y
+"¤AU«Ñ†k»_K‚—
+]ï6í>L‘«z=¬�v””ïœLt’‘äì%™ê>Xü¼×5¿NoHÙÚ3
+\J¤m^«P*sq¦ìž:uüSL³ÐzKØyÈv¿\Õ.#’íAg¸šŒ¤/R¿ÈgM£ìL…Æ¾ÏÔãœüO-óçqÕŒÚ?”Ú€1Åuv¤'Ä(®±Šƒ®`ë»W&ˆún‡¿¥ùŽæ<O‹ÿ1t¿7^j�sç©õ'˜ó´žwgƒ�_Ýqø@ö9´ì¾ÙÒêáÅ"<O‡=¼ÉæZ²i8ž)ªùCM•$iàRÇª…ñþ¹ºÅª�>®]?CD¢1‚òÝCòþÚK¹`±¹ú¬«�†Üá™ƒ´6ü~·Y—0–é>DÒ´�§Áx±µåÝgõz·�]iû$ôÌ-F°Èërê.Ã+½¼^µ–›jò<¬öQ¬`·û¯àäÃ $Ò¹¯ˆpš¶ÓžïT²Òõ«–Ó¥�Q ‚AÅI1±jTWl³¢¨[ê][jžS’Êu!!~¥N¾CU,OóìŽG„Vòþ‘¬ù¥$Ñõ8$ºP3i÷7
+ÊG-��î:LÄw;†w­~_^Må‹viVã_Ñ¹3º‚}x€¯º�:f4u7‘a	ä«»Ä½Š%–D?]Ež2ÄÁ øešÌ\Q¶3ƒÛ¥¸H–âNšš÷' ¯¾jà,BúîV™â
+c‹‚åî½Æž•ÚÌüƒ­ùÇEÒnmü³¦Ãt«sÎÿS�¨©®æ»ßÃ3qrwÝ˜Hü{žÇ¤þdÍ¬Ëi`tÙŒ—öÊn.!jB……‡Š×%7u’»Ü4)�¥ý†UµÅ�ÚMEÛ-´&‹p©"ƒsŠ§zuãÂXÇ±=°Žh<™
+j²âÒ˜š‚¬­ök°9`•¦¤ê‡P‰’^1ÝÛ€·QøÙ {æÇM©SsµØ�ÀËUØ«òÏþr+ÌçH´ò>Ždôà×õ�%ÙgŽø >ÆY#û±1$låvvQf 9\oý0»zgäíÍƒù2ÊWE–ÒIÒýE*dwõÈÿ)§Ë);ÝÏ´ºyÏ4L1¡¸åÌ÷mÉê£­{*|2ç›0#¢°aØ‚q¢ÇŒòVF#~Ã©ÈÑeÂ{‘('•ŒP*™ßjô'!#±C	ó—“®56òÕ˜\G}Ç$2¯4de*á×¸¡ØwÌd�úYp¾óä]½´wbßËñZ¡—‹Ü[Ä©Pæ†•é×-Å«˜4m>§Î~`ü¡Ô¬þ£#LbjGm8 €•ºftu5Ì´KèóMCDÖ´Y=FÆxTTâJûÔÓ31çä\9ÄÄGÔµ½CÐÒ¬.5	¶+hÚFñâ
+>œÍ‡-ÚüQÍì:/åŸ˜†“jþ`¼MÒVâ­ë[òVý”�–ýÙ=7ÌøòX‰?æC]2?ÚÁ|Ýå(|·«Ai§ëöºìWKÉî-¦Ygù^XØ©÷æN,3#xŸ“AÍý$q}eù)ç)y+K°GüÕÕ®õ‹ÐY´8Òå,¢ãû;‚�Ó1u:Ys£òn�®o¯<¹ùçæ‹[n.$‡V€HBOT(S‰„ŠŠæ²q®nDH,òçþrMÕtùa¿†[kˆ€&"	>Ï!¶ý2‹ßð.íÞ/§~gêZÿ™4]*ÖÊ=3Fšâ8®m–‘rðÇo™¦Ü�¡,�+ñï{ìïöéb]0JàÆÈW™á¹R[p+Üš‡âH\¶¾÷šþb_yGLÓ£>gŽÓSŽð
+	¢�äôþÏ.KÔ{åSÔJðÁß»¯w'UÚ½«
+ðãDž]nìwŽçÈš¦—.»czúÕ¿’|¶¤›;B®L—,	.b7¨3}¢ìl¹Lre‰°I �[£“Îþ^Z¬ƒ$�	ð“Dï|¾/{ü€ü¤Õ®tv¹òµ©Ó´[·'Yóþµ¢ÞH	°ª0y€¡§�óo©žŸN=‰÷ôXÈsÙïzß™¿,?&ôÙ/µ¿Ì­OXÔ&4‚hZÏÖ^‹F)$;ö¸ÎwQ›Åºó2iw‘?;¦óµýõ¯–ôëýFK"¾�·�‘çõ>Í…)¿S°ï˜Q‰]‰Ð˜P#Þ?cê«MjÿÊúSë~×m´{€C¦ÈÁ�k×”íFb?ßk±é—D×W691øÿç ?*&b¶¾i‚ä-~(—�xõ¤jK7úª*{ažHË˜ûaaéš.µ y»Mý!¤^Zë:qn
+$d°G§Ùxˆ,‡Ù³é!3¸ûŒòk[ü°ò~¸I´¯©ÜµkqR§ÇˆÌ-_eã—Ò>ïÔÜ3—‡y«þqÚþD’_.j±\©·KÅ†Ý
+üóQ.Áþ.ïÇshÔw¾aó/ä¿šôÛ‰½å	&D5Žî8„Ð�;ÖÓéÊeƒQ‡h‰|-·Æ�îM|£ù#æ]rxÚ×Iý¦ÆÊÏyt
+Ð¹E »W'�G›1`üoô©ËÙõ�åo&þ_Ú¤÷“&«©@9K,ÅBFê+Ðí·†laÙ°—ãäâÊeó'çOüæF�å	ÿ@hÚž§"Y#*¶Ñ¡øC]�†o4ýŸïüw4Ë!êø¿Rÿœ€¿ó2KëÊÏ©H Ûsõz–û!‰¥rRÑx;_ÚÆ¾[¦^Uó®µ}sm£¦4&¤×KP[‘øH>0söVLH‘AîýM§/7Ñž[óÎ‰ªü­æ	b»·»¬p4ªÀì
+IÞ¦†ƒ¾y÷iv.^ÎËâá$�½ORzÜ¡«‡ò7ŽyóË×>]ó
+Æ•yÅticúÕ�üRd'eß¨ìi�?bv—ò†*‘©Dn9æ{Ýjj'ÈÑåö¼…µ8J½{t
+}zâ9#+ÊJÄÔ
+ƒ©§*fî#›¡ñç.v«m¥êö­,ës61Î±Ú�™«BT}	×+cWº”z>¥åùí4»?ªùŠÁMÂbZn
+ûÕ©`Ã9¦ÖGc¬~aÚ#GûÍËãƒ*â¹03’0ê¯TÑ¼�mso¤êZìO˜tý¥xXê†ª~Ž¹‡<ýM=1=$øÉà‚…o‡Ä÷ÌIf$ Ý.šô'«&£‘;Š{åâñ,~7D‡0ùËM†/ñåÄjJ§±
+6�òŽôÍÌäN?‡èa9zdÖª¶ó-ÑK™à�²LàŸ‹ªn6Øæº”òKíô][W•ZÎÑš5 5Ë#_zÒ›fTc³›‹Ì‡¤Õ÷>‡òG–îô-
+[Y.Uc»™¥¸�Óvøv_“tÌœBžƒO‹�Ÿ]^Ïeft£¥kY(â¼*œh‡�ÐV„õÉIÎ34ÉôiBGä7C7·Ÿàê2Í©´bÝ…Ýˆnji•¡"ó¥«Úi_[Ó[Œv÷q4ò0=˜'Øô¦¥ézV­!µÑ
+ÔNeÕ!‰Æ´@ìÀÕùà‘-lÖÝå²š+È¹³Û|3¨ú‘·_L¿è‹W££¤ÉÐ·8äŽ9c~ £€v>á‡ß›! y!W$¯ÊùÊþ,ysÍÚTF{Ÿ%jbæX)_ÝÉûÁ_­’NÃ.Å*?Óæÿ¥¥é7÷ú~Ÿù“ùI|×\….ït._»$FŠ€§¾cg�›zí>¸k 1™UíwU{]Ùª¶W¦þwÅg"ØùËDºÑuþ¥
+Ûñý¢”­>YOˆBäöt£0—ù×ú…§þeyTTx|Çi	b§q#Dj{|tüpŒæÝ~^ÃÕÄß�ÔÊíõíqX5[IÇùÆÃðlœò¸ìýT> ~ßÔÎ´‹_NÛëRŠËsºWù{f$²^Î1Œ wFÜF&ªÈ#¥QÔ(ÜŸm°Àp§Ä,úm%¢ÓPˆÊ—edyã¶i£EâMd‘AUøÀZ“×�›A�¼sÍ_—Ú¯kªØAé]GÉ£–èzP‚²±çAÆ‚¿,°cã,8¸CåÝjÞÂÎ×Ôi¬µ»;]R+{¥¹e’¤7î[áFæ‡¦ltºr$=áÂÍê¶MäŸ7þZywK‚Ñü¿io4…§¹½…`‘eïÅ¥WO· sm=‹€q[üËüìò]í»iš^�«:RXîL13*ÙçZ§by1ùåøómL#§C‹—WÎ²é7>pko2jžN?—ï%ðjZD1ìI ÊßhöEr¬Ùå:ñã5Ñúuï“<§ä¹"‚;™µÍEøÈgkW€©§ ’Å,´FQûJŽù­ž®ggi¦ÑäÌFÛ_›ßÿ-µ;ÌzóYÛ›Xa�¢XO@DpÔý5­ÕNÜüÚ/ñû»­7ª¡hZ Ö—�Ø�ìwzLZ…’“yeËn:Uã—rW¸ñ<»â*E«èó�º}©´‡Y³"Iì^æùlî�8IMTxçXþ6Tqv­EÍœtµ1Ð_Ëv™šyç�44Ý[ÎzTŸ£N±auz�ooêpi!J2,Àìª§¯ˆÊ»+³?3«Oûà{¼ÞW	ju&Ì?îMþ—ª~GyWLüÞóÅí¶ â_+yUPó�·sNå£‰ÀÝŠr§·ì»s´¿-ˆaE}„w½&
+!ŸÌÓøÝôî¥ù“kç{�SAòS¹Ð<µpt•²ÓáhÃ´1†
+…«š�¹Ï?Ï"KÔi4¸²îBNÿœZ“óOÌZGš¿2>·¦ùkDô”‹ñžV¨&I˜Óˆ4èwÉáÌ@§.rÇ¦7cñäûoËžQòÏ“4èôÏ-èÖúe¢ WôQT°_æ¯ÄXøŒ”�~«µræüÖù›þrn85	4;{è¤¿Ó§‚æ+�<Ja»QHaÞ�2»§œŽï�l¿*¼ŠB¶ºµÍ´ê%œ÷0újÌjBJÌ~Ù\²îäKíoùÇe=ßš…%xõ1Ë#éÆ¤Ù‚²×Æ™~<»5Jú¶9¢˜W—ž&
+Áyü·Áhcß˜´½&k‹�¬0½àÔ¦ýò¹
+Hóoæ§ú-Ø²+0Æå•€U «.À{å<FÛ©ùµç/Ío3ë¦kÏ3ëK‘/ééIX¸ŽE~#±?ù|q’Q)¾róF™¤yÂkylu�¬ãúº <Iò¬jEse„˜‰-“-ËzN‘céjÌ’ú,hü²�NN&1�Ä”ºŒ„‘eÂËK±¶všCöÜ…$S¹¦kx·uZ­}žÿÇzO&¦šLú@†åf½žî7kŠÑÀa(Vê–^}8ž9“Ü~ç6¨ÆP¼>‘üÄvó?äö�®ÜG2^X¼"Y“ûÏ«McZo@Fp]‹#ƒ´2c‰ê~ðï»N>&–=Ãî/œoÎ� èº^½åéšúÞ+‘úF9(üqÊ�JÐß¾zä}O0‡ÔKë6Þmòí»©DHµkKP\Ç:BN	âÝÎ[û 7«ø!é'åük¨é¾gõNšeá5ö—ÆªdRšÿ•MÆ`eÔØbõè,,-§Óíâ·õ¿¿t@…«Ö¹¯–K);©Õ&_HT‘BF|AL„’çá=�lä‰J…ªªq˜:ÖŸ«26ÇÌËÏ4ŸËß7Éç¿‹Fš[«Ù$†ò78²ì_ÁsiÅòsá£3}GåßÉØ®äsæK€ÒÎÃcéCâG\„4ôåâÐp~?c×aò®‘amŸfˆZ1Ám"P žƒ‘9•tì±Ç‡dNŸä«©«qui
+‚ÕHÚ¥—�C¶&)f±åsu=Å¬nçP”’3ö�ØôÿŽÔŠ+
+gJ”E5´¯
+í‘TòÖîæ€ýZN5ÜÐâ©ªý~jˆ­˜
+nX‡‰Éª¢Â‘‹˜n£”·î­5›|Q…S¿OlUév‚Â[ê�2R8âèµ ¯|U–Z:úf	™!küËÞ¾ø«!òÜÆM4Û3VM:æKVÿR?îÿá
+í™Ø90Oê<s)__ÙZj¶WZn¥]Ù^FÑ^ÙºòŽDpT�½ŽDJ–Ž\W"ý��§òÿæ'üãæ³¨êžQ²ŸÎŸ—:¤íu} Ô¼ÖÌwvj+ÕÕÝ€p®dD	sqðÊxÉþÚÃþrWòsÌ°%¯š’]&ê?†âÇW±k˜ãn”Y�>|Wæ1žš.V=fl\¥!ï%
+wæùÆ-Mqæ6Áä;›k›«z×ü…VéŠtû»]¿¬…z¢cÔ\‰#º­GÉºoä_™|ç¡éRó}þ§ª‰ÒêÞÆ’É§†�;<KM†G.#m™½ –a\|?kíß1y—AòŽ–u
+kQ‡I²P�üTÝ£Q*TÐT�˜DuSËâ—’y¢ú?ÌM*[]?Ì÷Z&“!ý
+QÒ+~ÑpÈÊ)àÃæ2œ¹H(à"ÔncòU“Úyg[…nt¸žãS–¹‘¡2#XÄ�
+–¥YÞ2ÝÁË1HË’8CóGç5Ï™|¡ªiÚm´Ú˜Ôã	¬K$Ñ,¿jDKvs!aT�ÀëÛ7<{ú…8yÉèùJóN¹²žhî­Î{+�¤!I#›íS�xèà~ÐùŽ¹½ŒaÜ8àË|™ ëºÿ˜,m$ÄwWú¥´W‘ÇG2e˜	ª«SÄ;f>¢c¡f ™ù�ùcùmå×°Ñ¬xÜjº˜Ü^ÈçÐŽŸ¼âÜH-ö>üÁŽwÉÊÇ£–]€;ìòit,èÊ-í&mVRIXÞe>™áÉšA^Å€=×1µ]¡ÅËÇ½ê{'Ù^-çøåý9«jðýc…ÝÀ2ÈÅØFÇ‡Æ8	*<rŒyŒ†áèÎ‡–†ßgêÏrüŒžÜišÅ�¼œâK°Õ§ó*ù•˜¹ÉyŽÛÉôŸÆïjž4.vÛÇ1Æáç±›€ùŽú~¥
+)f–ÞUP:’È@¦d‰Sn.[¾×KÛiÒ½â›7K´U$�PÂÊEiÖ‡:})¼|2ê+ìpuRé ƒÍêQ^L‹pÖ¡á‰‰Ø#-9fn”�7Óøû»�t´‘…ü\þ<íõOäÿç×•¿,¿+üñheœyÃÌ·S\ÛJ `=!Q[Æ›ðvv§†`ö„eªÈ$z×ïïvZi#°Ç¿’+þqëóæÊ¯+j:–©,¯úoÌ2‡¸â$¬©IVS¿Jf<ô€¶Ã)Å°?kïŸËïùÎË]xZÙjúªé7²Wá¿¼8ÎÄ ùk\Ä–”ƒ°drx›“ö¾´Ñüñå�1ZÁ-ž¥‹t¾¬2#V_b	e2„»ŠÜCüÓòT~b‚Öa©ÛÛKnˆÏD‰�§6 L¤†qÌA >Ç…iß”äò?Õ¯-�Qd�Ä«×ÅIT±–Ó‘îÿ—ß—×^XšæâK¦¸¸¹_Þ‚QO¶5õÝrÇIŒ-Ìÿ¾Q^@Ãå�š)ó'æ—üä¶‡å.›c1ÔuEãJ³ µ@¨õf�¿lß%ßyßóÇÏú¦£k©ê^cMI·æë¤D>n6?7¸Û2aˆÏ£)J#«Áü×ùÉ­ê‹=¥­ýÝÌÀ‰î_`|QW¿2c¢êGãäÒf;ÞI=Íö£#=ÕÄ—›‘,ÇˆÌÜZxõk$ªXÚË5ä`$�A�I¹Êõ0Œ`hô-3™—¢=¬qEÞ¢„ŽTj°=�ÌfŒL‘»¬Ë¨œ»Óí;@¹ÔíÛL±ÔÕ‘JsŸv£
+SožbÌÔ�èë2ƒÌ¢-¬àÑ<Ñg¡êÚ<Z…åÌb+iªjY¾Ôì;žÙ^|äa™j?sŸ¦Òøæ¯“Û¿7¼Ñmå�ÊžC‚"±]ÂdÕíFübqé"ñ£3—ö{GÇŸ.¢]	¯=Áýë¶æ1à†8›åuî!æþMüºÔì5ibÔáŽóË×PºHåëÍjƒ�µzçS“Z&6Ùåéêz—4¯+¬¶Úd<!¹rn‡—Ä~Í=†aOŠfÌ¾Õ¤þâ{xÊ‚Þ®Ô å�!‚Vn&e`­Å+ö}²³V”r§rMûán¾¢?‰ûw>9.v¦qÇ)£»Ð|³ùu¯ùŽh§�?K–•–Z‡pzñSÚ™‘‹NG0ìôú"/³ö>›Ðü³i¦Co/¨`P�Uêseî,"!—ÃkR©ÍvåNƒÃ
+³æˆ‡L¶V3Pÿv#î'û—…;··�3/zm_§„k[¬´w„?
+Ô¨ðåß-–®ž\iayxÑNåYCP{äxOrØK'Ð$Pæ[(ÌèÁ|x�úTxœ<%m#Ö “Oú¥ž�WZ•Ù�è¼TìHñ¾²K=ê‚¥#IŠ+JV‡sÔáŠ¦­l@Á’JV5ÔžÔª"’rŠD¸Ùd�wøOZ�ßN¼ªü¥ó*�ÄZš(>æÊÜÓî3°r`Ê³)_ óìM+ßˆ
+qŠâèh`l+¹ù©¿LÝÍ´
+Ý„ëžEò.¾ZMkÊÚn O[™bùx–X|ÆùNML±}LxBñíkòÓòBÇÔ?àë+›ª’±¬·KÔõ?vaåíxˆšú«oÍÌÇ¡_ãîdß“ÞSòÎƒç[
+wIò�¯–ìÖ9âŠô1ÙÔ…P_Äíšì}§›)õßÛúØÏ	7üåg˜î-´ß/Øé÷:ƒ^Ùj&å/Þ6�Q=#ð¶Ûo²œÝiåŠ@_?ƒˆEÉ_ò·|Í™sgªHú’ñ/ò8·½B‚ zðÖ«ìFO.’2)”‹Æ|Éù�æízÞKkÍIíì`Qd!¾(]™‡v&½é™z},qŽ.æ“'©y=ÜþRê>�õåž¹åë™µí
+HXÃ	óêW‹5l”s^OÇ{	0�3óŸQ’k]~Æ
+ZÆïWMwT��†ââHJ–…î·à�h
+<l2‹««Ñ4:y_Ì7rÛÞê>OŸ[óO¨eÓì4†)C$Í*7ÄišÙDãjy¤íæýnRò+TƒU±[™Úéâ(ZÞ¼T™%ýãrëB6ÌIá°C¹Òj|0‡Õ5	
+$Yc¶’MÞ%Bãå¶S
+%;í&L�ûÿ[	¼Ö¡~±¤œzÊÈÀý9•=8Ç¶§¨˜2åcñÍï‘ºîš÷:…¼76ð¼Æ"–Ñ¸Rä	jB“RFaêp’�flsüÒSÊM}óVD¢]|N1É‰j¿I_°À©nÛŠuÊ1æ#(üu[°üÛ×¡»+;Ï4³úf®Ä’´V`7ö;gU†\B'Üë³Gv ¯ö«às9©ÓÊæ2¥¹$"¨¾¬²9Iò^a–?11Ð=³~š­’Um;·qÕAr?Ü}(óg>YüÔóßåýÄ3ùOÌw:J1¬ÖŠÜíXÿ•„­Oó�8l6»õkòcóËÍú÷“¼»«kE.æÕ-‹]<@Æ]¹˜Ü2€TÒ†£çš}F>9¸�¥ôî‰ù©g¬f¢s»¤‘Ò¾ÀŠo”’¨¿7þhT6úkpB‚N0PÊÄ�Âø|ò¢oeº~xy—óÓÍÞ{žöÎÆåt
+9ž'Ó+Ïu¹µ 
+ÓlÈð«ã¹vòIãtârÓfPyqâ¬M{ôÌlÔ¤[æÿ1èž`úõÝÝÇ¯(ä}30g_`)°®n0dh0a²}föæ½j¾9™â‚Œi|7HÆ‰%
+õéóÃS&A¡]3ßÃaB­MúŒÅÔÇÒ}ÅÆÍ#Â}Åé�¨!iR#4Räê†jN-ËÇ:KqVDÛâŠÓ(˜°CFK›Ù´»kO3­†·¥˜t^1€Ê´ ‚Ã¯\Ôk L{Ü�>²ZqL‡ô<z”jÚúÃ«k	'&¸d5UáU>Ù
+FÈr°Cú³›rš;boVŠT*i²ô÷Ë\~ “Ku=Âq§ �ª$ct¶…
+±c]¾y;aJ¡Bõ<Ojíúò@l HšdÚ”õ¯2N±éöOõz�%ãµ#ëFé™ÒÓ°Á¥$¾Šò‡å†“¡ ¸ÔÕuBÓÌ>öBž¿<Ê†.Ý¾-oÜõËh¥)ð
+A@«ò‘ÄK–6Bêî›¢@.ub·Œž+_�«¾Àøä£K#“bÆ4?Í­@Ù]ykUxæ�%�õœiw€š
+¤<ŠæPÁM1È÷èV)‘D2¯£¯uþÙa…Ú&´ÙÛÈÄB¬Î,£ì€v½‡¾cS$£Ì~gò¯�,¡½×µ[»‰:ÙG;›¹d4H¡�«UˆliY|ö±ù—CšÖfº´·Ömž>jþ�Ô>¤d¤*à�Å2JÆôßËû½Nµ±Ñ|á¬Ç-¬>‘“S�jK,…ªL‰t
+|2àG\’§:n‰¬›—Mitë˜�ª_XÆðÍ^áâ‘ePù/ò9S$UÝ½½£¤KsÊg`¥iSJR„Œ,ž©JªÄJË-jä¨©í¶E’°
+ŠO
+îvlU-òU×Ö,5
+H!Ôµ+¹íØ~Ò¬¾”F½Ç¥}ó;&ÓëGÄfR¾C’åE{˜¹2FÄµŸ8iú_Ã$Þ¤£ýÒ)R|)šÌÝ¥_Ä,t½þ÷ a‘è^~u7ùÎf·ÒmžÖÛ•Õ íášìšÜÚ£B2ùÖ{ÛñÂ0z×•?(lìø]ë’µíÊÑý2ÕºÓ|ËÒöI‘žÝwþÆ¼Ú®@zG˜|—§kúè)+X[rW´xÔU{7J�jæÖZ8VÁÃŒŸ~rÊ?,ntŸ,ùÃÌ1j:6º’�#ô„fh©$l^‚:s ÔTf·&“4eÅMoµ§Š=Hxu×”¼¥æãkk¥Ò-î¦£mþ‘lî*vðËa«Ëª${ÁgÃÈ½kÉ‘>_Õ.4«�Pé^eŠÍ
+4öî‘ì»ÆNäu¡Ì¨öŽÕ�›\ñÐe¿œ~MòG–ÿ/<×7¡§è··vAl¢FÏ$OÉ#ˆò-Nƒ,ÓK%Ñü¿0ãµ³´—×x„ŒŒY}CEßÛ¸ÎŽUÂé/™¥†4‚9fxâG
+²AËÞ›äiJ^Þo½„ÔµÔ‚F<�É(òD7ž%¸‹…ÃÈª6õúF<)9·
+ÅŽ¥ðÇt€�É;ý=ðS>
+ƒrXÜYÌ²Ã'c#Ñ¹…Ø6þèpŒBCt€eÌý¯Qò¿ç/œ¼°b·Õù‹IŠœa¸`.ÕGP“}šS¥s6Š'ñûW_µô�ùƒ y¾¬é—B;åBÓØÍðÜ!§Ùâ~Ð÷4ôrŽ[?/7&2ù3ÌhM–£l‚¿R’í.$±Njk›­9 òhÊ-ä¯BÊêUÔTŠPiî3dâ¡Þ¾›;|J²KGfòF£ëv�<	÷üUäÍiýÌ>Õ®	Ø
+y²)ã°Sñ�¤Ò¾>Ký;§{~žÿÎ5 ºü«ò”Æ„Ä÷1�úJ¸þ¹£×O×_Ž®n+§Òï§HxlÃzuÌIÔ-ýŒŠœøúŽ Ó™4§�È@ú‡½Œ¹äŸ•nõM'óZÓmžQd·÷p\[±"5X¥+·/bss1jq¡o|�S²¸¸–Þ)Ä-/¨­J8?h)ùf® ÆË—Î;+K‹w1•x®Crb¡©AØøåRÏ vIˆ_ùÁá@èó<p�ÇaÈ¹ÚŸ,»¦]ZŒCÌõ/ËX§.,]}hÏ/Fd*vßá~•ÌüZŽöb6~MÖt­RÍÜ¼VÑ’Ò†5;ÓäpåÎHòq³ã÷¢B›tT�í3}‘óÍIƒÃ2;}ù}ÿ8÷ù�ù�
+_Úé‡NÒŠŽ–¢LA�ÿ¾â 1î2;‡3–G˜?'Ñ:/üâG›tY ¹�ÍºkËÄ-ÝŸ¥?¦Á¼
+(NcfÂe“–ßµÊ=œ&7�’Mç?Ëo9y-âóLúÅŠFŽ%÷*7_§1µxe8Auz�ñŸLM{¿cÈe.ÌÌjÎvzôÊ	®n�=”='­:“Ñqù&7.[¦Z^™yªÝ­¦•—Œ �¤šnÔ §‰ÉÃ™ƒäw‰ù=ãÊ”vˆïÌS™ªl£„kñWrÞý37¢íñhãÕïÖU�¼ÅkpÛÆ¼8×ˆªXu9•îs#ˆE^çêV=ÕÕÌvÖñSÔžR
+“A¿†É¸N…<›Í_™-rÚéôâ\,åÕ»ËlíÛÓ`¬µù×å™0À×"V-..u[KŸ6\´WwÍŠïLš·¦9cvè†Œâ¬ÔàjØÓ2£ˆm&[Óì?$hÞ\Ót‹K½Âsõ´ \j6ï
+ôåFí$nAài¿l‰˜èÝ -¼�é4çêÑANG~Ÿß•’ØyÖ±ç­BÛÏZoåÖ‡ci§Mw¦›ÕÖµVd´fäíìâ�ã72¥A`Ž8÷+×°Š#jÑÞjZÛ[ygÌ¦©VãQ±Ÿ”È÷i<“Ý´HFÄp ûäH[$Áåï3Üy¢ÇIµÕ<�æ?(ß-†»c¥Ü‡´IØWœ³Ú¸aÔ4`ø®A/jÒ­.ô«`Ôõ&Ô¦‡‘{¹(¤u=9$$|±<•B÷Ry9%­UiBÿÓ*f“”±1rû™ô>8’¨
+7RÈe6óÛ°sowÕ»ÁY£?Ñó’·r6È�Ù$¾yÖŽ‘¤½µ»ðÔõwú¦š¬hTH8± ïQZŒ�°/u<™>�fºf•§é‘ì-íÑHÿ+í±úscŠ&<ÚÁ2«6dXKó¢moÌžg™môËv†ÞB:T9
+¶r�~\æ±]|AvÒÂ1½Ë”M/ï0LÒ3}j|i¾di»$eY~¯Óñ
+Õp‚ñ¥èºf“[ØZ$VœÀ©?No4šO
+ÂžkM•)Û3eÜâÊvUÓå_l¬Š-±äüçÿŸ‡é¡¼µùq«
+å²½½·‘Çí}iÀ¯Ê s7û8ùŸš~Zó·£H[J½’Ýú‘56þ`ûSå‡S¡FÜ/qòßç†±§Î–·Ú9úÑ^_µ•¡�•èZ¦™«=Ž±øûåŸˆ$póÏ™<ëz.üÁ«O¨$?
+�´�ðD½‡±#Ç6š]/†ÑÄÂ%t@LÌ?eO�Ë2f7A*hèhUiOòi…‚¡1±£)'Ä�LU6�g>ò"’{�¿›ª]Ó,ö’²ûV˜Öúž¥¥“À/Ú¤±÷È«(µ¾°ÔáâÀ	màO¾*9 ä³¹´�o4ÙÚÊò2ˆI�Ç·\ÇmÜK#Õše½ƒWr—3E 3�XJÅHÜ��9�àÔ�DŽÉ×[˜®on–8qô™CW¹\ÉqÐrýY¬¥pwE¶Œ
+¯ÿNÍQÚkSÉzì!Šjús¼ÀoE	ùí•KûÆHkÕáå+,D‡‰$ÔÓ,ÏÑ#›9ò«@—Zˆ¥ÌŠì‚a·-'©­ã1ròr ý*ÿœy€§’­axøKû¨£åCÉj²ôïhµS•Ô‰l¬¨J—}²™IšP·_OeÞ›Tmôå|[ ò~wj¾N±»Ö¼É6Ÿl°©Þ,ó(î^YàÇõæ^<­k-¼‡¨[ú~“¥Ô€šÞåMx�´9�l†L–¬¶ÏËWpÊ.f†8ÅÂúv~‘*ª£b¼ZøåjÝÎŸx€òB„|+È\n•ÖŸtŠÑÛŽ>*eÉ‹kÚÁ´’âD…Uˆzb2Û‹œ\$<‹Õ?ç?)bó�š'Ö<ÅlÃGòÄª¢ÞE4žê¡Ðz€iÈxe–ái0¿\ô˜lmm¡·ŠÕR(ÑU.*ª«Óa�»p)="ÂEãÀ!;r#§¾E)&¥i«4rÛ­ÄCŒ°·�Ö”!�éQ€‹”x…w¿=9¿.ÊÚô7z-¼—:V¾ÎÖ6±©,&ï§J�†ksi¸‹¢Övwü~¤«Ë“úŽ«ÝëO.Ÿo*Ñ-Ðüb½›¸Ë0iè3Óh8Gãõ>�Ð¼µ§èVðYÙÙ¬j€+Ïð—sÒ§¾dŒtì±ãád Œ3Ê=8ÓýÛû üúe‘‰;3”z¼ÿÌÿ™'—$X#I&Ë¨znÖa¼ˆ¬+ì*}³&)¯�æW³ë>f�u+«øo´É#ŠhV9­¹ò¯´�$‘Ýzü<?Ö^£*¤ì¯ ùÌZŒ­iä›OÐÕZêúÍÇ«@!¤J©1”[™fIa–££.È1¹=çÊß—–=io­j/#I&¡u¼~«q’qÁÂˆÂ5Ùšƒ1ç¨Ú›Æ¯XÓ¯-m)‹ÑaÒm‰À0`>‘L¢2^œy‡Ë^iÕ<Ïq®\ÝÃæ�)Û¨M7Ê÷Rh†?i¦âYoö3H€vB2è•áy…�¸úÇ™ïÿ0?KùcI¼�[é~Jµ²—[¶Eµ%AmìfâIG€;n2ÉI�Ôÿ+ü›©jºÕÏ�­/ôèf¼‘ü¿h×÷�Ü6šE"7¶ðNÑE;´"JìÉÛ)‘LFïg±°Ðü­eõ-ÂÛNEs#[Y§e�Qärj�êÎy.ùU·©I<×'”¯Dý•ý°•‘QiQâz|ò�Å‹TÇ³»Ÿ³ô˜�{*�ÕÝ®‘gq¨ÞJ±Ån…¦™þÊ�+A^§ÀwÌlÙ¼3A"6üÍÿœ–üî¸7ÑiÚMáµ¿oJH"Jó³‚æ•ïÎR(kÐf^�HrÈd=
+þ–¼’¨�ý%ò~¶žiò¯–¼Éã×ôËKèÐìÊ·,Ô#å%3m•£&QÀø»(nx^…å]'E‰E½º‰@âÓ°Ý‡Ë¶bé;>-«‹íý¹¶Z¹I”ZQ@36Pñ�Ú¾<·VU¾[ÆÇ…~¹Ý<±±´§|EáßŸß“ßž>P·òëêÿ n´û¤¾Óï8–^h†>/Æ¤ôí’„øwiœL‹ò¿ÏŸó‰¿œ—r\ÝÃ¢Iæ-. Ìš–�þ’üW~RGBê)×lÍÃ©âæãå�‰§‹ZÛÞB®oÄ«z®bh™hÊGU îï—ÊWÉ1·AÞj	
+PÎ6 55È	žæ([nr·©1ä§ì/�Ë°© e�‡Ó�d´íQÜvÅVra½JÃ+ÖcJöÅi{,W)Æhƒ-7ùdU�ÝésY¿Ö,‰
+> €×¦øÑTÏNÖRu×•IÅ‡\�Tv¡k‰?%^>–Ûµzáµb“ÛÉ	,AôÎÃÃ+}–ï±­0Žig–Ö¨ß“sN°+\EæôŠîéOÛ�¬Y¡_z?3L¨ƒÇl˜M¡ãZ•…H#Þ™fmê”szGåíÝä:�ÔV·0[M{l©˜ªó$Ð/°cÛ1rìˆ?G?çRâ+_Á<òÝLºÄìÒ»«Šb¯»S4:ƒ»•×Q
+Æ<
+­3ÉšQZG°,@4ÐŸ`rš'Å³Íoæ=}V½¥ôÎŽ‘´py\Pr=kJŒÍÇ´E†§o<ÓÃp‹c$WCÁ£¸"ŸJägL¯E¬1Å;Ço-Ä-ÆÇÕæªßÝŠŽŸ24¬–ÞÒv†u
+¤²¨,±»”ßÙ†ø
+£Ãö z–ÿvÜNC„$¡G’RIî¤úÔio->­DÁÒ�y1Ø×ÛQúòwN‹ËúK[†IîæáÕx–vE~Y;nÇŒÑvZ�TQã†ÙH&é~Œ7 }9$(OxÎ¥Fô˜	HæÁ|ÕmäP Ž_Ffh——
+· ö®G›¢ú1tŒCU‘D|?Ý})M÷	®L"iŽù¯Í¶^QÓšòöÖêíœN;xYÀÛbìâ<IË1YærÌôxZyÇUüÏ¿M"ÚÓSÓå¯],ÇqV4åHdPk¿=¼vÍŒ1
+¶‘<ÞËåOÉ¥A5Þ¯ªÆnJ“²¶ñ
+Ž—"›Üq*{‚2$Óo†›éß–zeµ¬¶ñ´ó3ú‡÷�oHe$×Ÿ¦XÇ·ÀªOl®YhÞŠ–Ä/¢Äƒ�‰FËððUP@Pð$æ)ÊKpÆôƒn‡ wgÅ² ¶Z†ä»­vÜtê@üF ±|·æ¿0þi$2ÞÜùX¾ó½ñ>YÐ´étÛxájÇq5ÊqV$€xÔ{*Ÿ‹-Œ–žáå	|Ð>¹¬k·MÆ¯I®ô`¨lí\³ÊB£I¨¯ì©ø²Ã0Æž�6­r«#sXf^ Ëû;ô{W*””#/›,­õ{
+6(Õ¬.Tˆo�-2Í ¬QðêÊÊ%ß³U¯lªÙ2àÜ‚’YCý…=qÔ*€ÄŽdQwÜüÆ 
+^ì‰š†¥¨Øèö³_jWgkn9I#8ÐTZoà;äsLc‰'fB&C`ø_þróþÒOD�#r]GW™©´ò­kE;æ&Ÿµ2¾m±¨�VÏËÝKX½Öu½GR¹k›ËùL—.æ¼jvUöØèñÇ"Û~‡]©˜'bþ‚ÿ*-þ«ùcùu^/+iC±¨²‡�§·|ÅÊœ;½ÔÊ)¾‹ËQ—µ**7ÅUQŠªTxâ®Å›«Mü7ñÀy Ë„_süÁónŸä_(kžb¿¹Žôëidµ.T›‹�‘Cu«)‡,xaÆ_‚þcÕ¤ž}CR¹”Éq{<Òú†•23—Uè)¶m1òpsÎ¥Âx…î.�;ò!ˆË2X—Š:âª³Ë´&YZ€
+Ï£ßc·c+EµŒkñ?p:ãW²¡“_¸šTŒšŠ õÄâcâæËSŠëáACé—’½(M2T‘4Â7Y?»s‚2f‰I¿bQ·MòÛÙRëí(H={J†_‰•w&�…2¶*šN¨¿ïð”Ñ$;SÀU>¸Ó–N1*EÆÑñÝ¶¦*Âu+G´‘Ö‡á¨aN˜ª®›¬¼µy JÏYõHoÖ?ØªE4UùÑ±T$#VriÄ×­:{œTszÏå_ÖW¿žÒÕîÍ½ºHR§­HbA¯Èf¤ìäAúùñ~�Ö#<|õ4–—[˜wD­H œþs»•ÖöÏXa¦ûÄf‡ÔP¼|x–æ
+ñëÛæƒÉð™tûë/=ù²mÊú–±ªÝµÖ¥=×Ö=/U`Y(ÍðQ$®ÝxœÍÅ&´ªÚþY55êºL$…—T²´@ì±;qTàÜ‹–? ®NEYw’í¦Öã[ˆ./4q+™­{YQHARb˜ÜUH#¤‘í‘*Ï«q¤^ÛØjvðê2>³w§’Ý	ûw¸N*æŽÛt*’³ë8ã¸ˆÏk'¬Š@n4P¤ô‡
+¦qÛ¤€wR+Ç}É ­<p€¯Hò�ô£ 5)î:äÙÅêöÓì›öÅ´rLÒ}«\X/,H­{¸
+±/2ëZV‘§¾¡ªÞÁg§!_^òåÂB�Ï]‰„í×|–1l'‘#òŸœ¼¯æ±:kÝjßK1°»·_¬Ù•E�¯f$·Cñ<Ü6ãlÍ†œÎÊ_æïÍ(h÷VD1[ëšÆ¨ÀAn\ÃfëÈ-úP!/Rºå‡‹.¡h±höV0ÞYi#J–íCMhÈ¦píüò¨¡_¬åáLFèÉdžá�\„ìƒ(ž{oZ‘ª§îÌS2J¢Ò?ôdÕ­(;â«HJn¦‡üöÅTàŽ5^ÀâªKnÃ¢ŠwSµ}«Š±ß3yrïÌqYÁª~�D%§“ÑŽNl>È,ì
+>XÝ*Mò\zLi‘sõ(ƒMÈ5[“%HäÂ¥{ÓêK7¶‚+xýË57yXÕØøì0�¤%xz±ÿ1ù»JòÄ]?ÖoÝO¡¦¡ÜÓ`ÀnèNaêõØ4q©,Ÿ¿ÌaÈÇ€dÜ¾
+üìÿœ‚]9Œ-8¿ÖØ7èí Ù¦¡ê½�Ì}“QÚRã�ˆ
+÷±¶ÇÌr)É�`�ºÞ½¨ù“T¼Õµ[£wyy!ýá
+JÙU?c‡‡|ìôZXö~§]“)ÈÊ¼Ÿùiùƒç{ïü§åmO[µ¶œÛÉ{i¼k(UnUHä©ãÖ„xåÙçŒòi~ÿè6�§èº6žÊbú…•µ©V!È0D#4+ØñÌ)roÂ8Sš�­ÉãyÇ“qÜ
+ñUø«·ÓäÞ³ˆ2åºòþßO´žþòaoikO=Á"‹KoòÈ“³fŸ��B;ïF·ëOÊßÏÿÌ?2~e
+OX±…­ü�åË¨´Ø¨äEëHIÙvuÓ­2xA/A¬Á�K§"À•rÚùwmÜø[]�ŒÐ[û’ÃÂ¹´€4ñ½r‘–Üé¦'9ÈÝM2lÙ¨øb©~·�bïIF
+ÄuøwÅU|™ä;¯9=ìvZ…¼7–kÎÞÖqG”R­Àÿƒ##@•«eƒò?Í«ê:Ä/äˆ’ÒÅ‡¬z’7/òsóVËÂa‘ù7TÓgyu{­.6f]=î¢’?ZŸk�`S½2|\A|$é|«©M–É€ß	<¶ð $Ë„÷ ==FÒCo�‡BÀ«} å¢c½%à%¨b}²L–›ê�¬[3¨¨§Føâ¨­Yb•ÃRxX�íB:
+ûà°¨½^ÈÊ‡ÔÙœ¹ÆÕ�ÏlÐÉÔÐÎEXÙOuðÛ#Ï ` '~ÕðÈJqr�	}CùAùkæÃªýröÁ-ì%U<¬U�[ºÐ­h<kubFÄ9º¼�§]is]ÛÍ:Im/aÆèÊíÊj|+š<ÖK“úÅ�¡Ë(fÖ¨ëõr_‰N'�b@¥7©ýØ ¾nóé¿óz¿é�nY9ý_R•¾¨ˆ±ÇCq¥>Ëù“ˆµ¤qizd>¦±æKEÓuià’Ý´M2cxó pÉÂR‡z­i×,'tZm¥Zù�T%`ÔSNÓJeÓDž�Ë�^Bî+ÉU¸Èoï;dŠS„½Ò<¡nS5Œœ½kŸ-Ù…½º$r<øD<ø7ÄP°¡øª2²åZ¿Ÿ5Ÿ2Á9òeÖŸ&›m(’÷Ë(&·¾îÝK' 
+C.ý«’¥f~Oò=ü:­Ì¶7z�—¥µŠT¼Ñ¢¸–âÈÜÉxXú¼¢t.G>ò´JíŠ¾¦òäoVY#’f5fˆq@Bï×Ç"Î/B‚J ßÐ�I½ñ`¸ÊH"»�…M0€Çµ‹ÆŒ[¢”hn$1\zª­AýÚ”`z7za‰ác8žï@Òuô�o7–me�ÌÍåùšÆOR­F/n±s‰U~`Óu#lÈŽ ‡ãÝ'ò7å¿—¼”³I¦ZEst¦íbhbI§@#ãÊ(8É¤KV1ò$ŸŠ¸'¨%¶ž�ÊµäKNrS©dØÇ2%i«QP)]ñád˜G½	ëá‡„*·%ÀŒUifsûº1ñì>x«B:–äýéöq¤Ò RvµúpZ�iÅj;q88‡zi×ˆ uï‰ ¢’ýOWÓt[cyªßGcn °y(+AZ*šr>Ãs”OQCÕ ™¦Ìxäz�ùïóª×O±»’Ââ=K´×šÝë*ì6<P�T×a^ù§Ï©Í9~èÝV~ç �«gæ÷æ?üä‰ÕÿKòeÌÜÙØ^yŠpÍ#Wcè�
+fç³;ŠC6¨YçG~ãÈ�VœÚ‘�h›÷<SË^óœu‹;˜ôë�fÚæò#ªHÌf&3 õ©Z/ÔgQ>Ä8òáº÷8!Êw~�é?—>B°šÚá¼™¥Jax˜G-º¼mÄAêhkÐƒ˜2Êù¹8ð‡Úß–‰å(4&‹Êz-——`/ËTÓìbHÜE.È¤ý¥UFYŠBÉa(�*z)<iNý2d£ ®NäÞ°<›'Txâ­Ž£^zR9©‡zm×¹.,‡Ï�ý¯”¿ç$üÝ|É£~[ùx<šÇšn#úÄQ“È¬ÇÓŠMÀc×Ú¹LžŸ°ô# ÷÷K»ô¼;þrKKÐ?.ÿ)|¥ùk§N.5¸µT½ÖnTÞÜYRêiîÍ"ª)ýŸˆm™šWŸí�o�“ñÞ|ß™Z¤¾¦¡põ…§¶lú:‚9"ôqTfñ;äY'ü)Äö;©ñ¦*ÝZ¤›¥>!Þ�ñT¦85}'P‡PÑ®>¯,'÷l‚„ô`:�Œ…‚ ÓÕôïÍ:ir}vÊkK[÷µhq«ö¤VÚ oC˜_—²Ùâ–
+æ=[Í^fôäÖ|Ãq©ýQ˜ÙA0#/Ô¢P*pvÌ¼x¸E/ŠR�?]ó6‡0ô®œÄ<@a‘–%ñJa¯ù¢ãÌ–Åµ#»ZF`/%;¶V1QAÉhKåŽÝE+û$‚IúröøØ“Féû#©>¯bbt¼´Mjàã¾C…S­.ý5k&†gT¹µRÁØ�È(­|quÒ«¸%*¯Âj¥¾ÍGŽNf‚Ë›ì¯Éo.yKSÑ­õí'LAyˆ¯í’YIî7¯¨zW4ºœ†ÜŒ/©,$¹ô„aR‘
+/Pð4Ìäp§–3­(hø0¦àP¦|’Ö¬.WÑŒós\£…±~ÅíZ�G� �¥wF +Ä¼ÉåkÍVö[Ý)-m®šzËt«4S8QÐMo,&§ .Wª·L¶-räÇeÑbòªE¨ZØI§jW×.'’Y™XQˆ’„±nËMúeÍ]XµçûÏ0Ý]hº$¶F£ìémªÇqku$bEªGÉV•¥kÐuÅ±ÚOåî§æ©ôm_UÐï<·¯ýfXSS°¹–ä\½“D.”«Qî¦^<ˆ›sŠ½ÂÇÉ¶:Ež£w­Y½ÍÔN‚-pÃ$²úk:˜Ìrr2„¨‘€ôøW|U“5 �4««mZÅ•Rå˜˜˜Ê7äªj)¶*Ì|ª°ZÙÃ´Ñ/&ˆ±ä"Uþ>à@÷È³‹?ŠcÄ~¼
+¡“ôßVÞzoQ�ª_%œZ“,NjñUS­xï¸°"Iý½™EEª¨ê¢‹ôƒ‹QLÐõà�ÁéødÕ�@ÂŒzÔâ¨ˆáöû=}±US-nEîÞÃq�ùÏ¥ì Ý±Wp!zq@>:Ÿž*ÚE)óÄÆKÄJ%#®ÀWÛ+à¾f‚xIä’ë>dÐ¼½}cQŠÖP,¼¤
+ê©û²Œù0áÄÄqÃ2ñÝoóvîoR
+ÈZFM#ÔîÿxÄ�ƒ$K¸>ÍF^Ý€<Žça·^�[ã§�Ü¼[Í^eƒM³»ó/›µŠœÜ\Ê¥‰PX"
+ñ¥õÉéô9u²`ý¿¤öñ”D?-6¿1îÿ1|Ë5Í�Ýðòüq[Ç¥éwDp²D‚áø¯Úç"ñÎß³û/Ÿ!o/s¨Õgâ“Îí‘mG9ÝTu>Àfg	q§’<Ã¨èZþ›®iÖë;ZM«fYÂ¿SmÈ¦ùGbÊ<ÃôsÉžr“ÌÚ–­uh4éî*.-�¨ <IH#5¹9øÍ½“Êj}Q†ñš!omÆá–¿h2P“ÇwÖö—^ZÛÝÛH$†ê5–AëB:äÐŠ¡ðÅXFñ¯¶M‚Ð­ü§îÅWtÅZ,hvÅ’ÏP¡
+^$‚}°Ë“pÅÆaÞHÛ«â#ÜÚùÃóÃÍ¾yÔ—ÖÒ|ž„X¬§’³ÍX¬À÷ôÒFùå%ê{CQù],qÇœ€uÜ{»˜üåF�æ›ï&i^nÔô{»]RÕ-Å…üÑ7¦ÎðKTVãÔz;ï¶eid«xyÀ™Ù~_Þ/®� šŒÚôjÎhŠòMôoîÏ�kLŠPš�Ô£QŽ‘•ae¢Ž„¾*ŸC8gT¨q©îpXTÅ.»by&—Ð/Ja‚xCºûäe#{/ZñFÀr]»ŒLŠð„¢ëL01ü"¹]›ä¼!kÐ@a–OR†¨kÐxdÐ«CÛ¯lUX2_rÃ�ß’V!*Ï¤^úÈO¦Î*)ï‰PÊ'‘. Žoµi@¯¶,n²dß—¿˜ZÏåö°×:lê¶:‘ê6³Ñ¸&•*:m˜z�01$w7á s}ÕäßÏ
+RH ×ìŸM‘Ôq»·¬?µÁwë¾h§bœá¿'Ñºž�æ[e»Ðu;kô§?^ÚE¨#~2Ozæ9�=Ypæao¤ëpð‡êe”Pò(G±é�b�:Mô�½Õ 7Íñà*6®&4‚Bqƒ
+¹UŒæ½ÛZÉOU]"ÂÌË©ÃK\$“êÍscÙ‚ƒO×—0á,Sô7“µ¹^úÛF½¾	õ�2E[#„Ñ‘@™£�)%xüC¨Å’w¦YýËž^Ö¼§m§¤k:}�å„×±–{{ˆ–E�´Á[˜s‚~ñÂ¨ëo'Ïm:Þò¹„È©õ‹�K÷f£¾Ý°%út°+ ŒªnÊ@«ÒÑôHRÎ`JÛˆ9èÜP† ÷«Õ¾œ‹0Ê!Õ"`¨_ƒ–*#cBYEH§ˆï€òlòšQÁ”¡­j¼‡Þ¢¿,¢Ò¥s©ÅJ³æ‹ÄU�ú£¹öÉU¶—²[0šýM»Ìámì‰âJ“ýã“Ò�MrÎ‚^�¤ÞMyM¹·@hâ#Ç7k ²8“j²Î	w/àX�dAýàÚ¼{õöÁEA.Ò¬5;Tº†ûSý-êKêZ\˜R!n•¯kñS:/MiÄ´W?ng5
+ò¦D�9¦Õxl
+“öIèN!Þ Ú[¨jšN‘›XÔmìR„¯«"¯OÄTûe�B&G�ßäÌ@ž�2Õ¿8ü½f¯—úÄêh9)Š/ Ÿ´>Y«ËÚâ_AÝ¿Ü[ã‚¹¼Ïó�‡K†I5ß3Xy^Ü†ô¬`“ý!–�Bd©íÄWÃ|À9µš“áÃÇ×D{]ùsoýÜEØ|yæ_ùÊ]^´Ÿ%Ð‘Ç©«j,9'í,hIú^‡3t¾ËçÞÌŸ‰?xi–¶#•1KïùÉEÓ§�GêkwsØÎ‘Ý£w„D¬ƒr¡ˆ­;gE¦ì4(Ê;�!úœ|�¤H ÇÍàtüÂó_æEÚÜù—R’áSˆ´´�”pGÇ¥#O¹ÍÄ1cÅô‡æ‘bPÃYdõýOÁ‰§R:Ó'ÂdnØ‘{¥«4ÓÞEÛÔ•c_I¦YLY>­#Á'¥¦ËèÙZ\}^Y£1Uå±ð®	
+–‹ïßÊ/Xþ]ùvi(Ï,r±'í'r+ó«ÏN^ôñ,ÁÔ‚Sm©˜ñ;¹2>§üœó)Ô4éô{¦--ƒz–µ?î§â>Gs™Ý…ó¯Q¼ZÅx›qS¶*«Ê7´ÅTŠÇCG5íŠ¤e¸:—õ»þcý
+Âæa½7Ž&a¿Ñ‚\œÍ½^/|Ý>ü‘·7zg™gšw†ÖM\}g†ï7¥kïÔ+;á\¨óvþÐíœ{‡ÞUç#£–S*ÆR;ËK¡ÄU¸ü^©­0aþóñÞóyy?,5øé^±=o¥ô‡\ÑÚCb¿~Q™ 2[%á)i$ð­Ëô¤eÀc÷`<•=—Lh¯žâÑ‰³FCý®5Ê¢�™§Lµ°rmŠ€K7çÀab—M«Câ«+Ü¸CO¿RMfÞS@	5û±TÊ;„•*¤7j�ð*ïá×"­j@¦çÛQŽT.x:³.ô¶MTµ+E½´,?¼Zšø‘�RMðÆÒXNÁ’´Zžç"¨»È‚šŠ:¸>˜¯Zb†Gåíoêh¨f‘fB6åP{öÍ~«MÆå`ÏÂú7ÉžcÕ£–Û)ßëH-æ�$�L€oÐ	ˆÍ.}¡G0ã“œ5[>¸ò‡ç_štÁ
+¦¬c×!Û•µÌbÞî€ÐÖeÈìGÄ�lf¦9³Gê¿µ™¾‚Ð?7|£¬Ži¤Ðîœqhn€Š=ö§­Cõ¨<s&èr—ãík8­èÉõ{¸Òx'ŽX$IT‡FÔ¨9o��§èAÃÂÃõoËK=iç–o2y�K†ô�^×NÖ/,íÝ{ƒNˆj;“ˆœ·˜y'šo‘tM2%Ž.î–Gâinî'rÿeäq4�^«Û¿LŸcÂÍ4Ý>×L´¶²±±‡M´¶ŒAoel‹Q*…%!#ˆ
+ª¿N<A4›"ÄEZ›v=ñâ	^ÖÖ²€x§!ÐTcj‘êzdÚY~«ê•ª¡RÌ@Ø/¹í�^y?•uI­ã³k$¶¿[˜¢šçÖA$^™˜ze¨J@~¸´­·òŽ¬Ú½³�§ÅÚ[Ë<-<’3,”Yž06<K-J�‡IñÐ?AÁS¤Q­¨ä€²ÐüÁuåƒ’Í,·òý¬R™f?Z•Å•HP~U8nE„ILã±µIRQÌIP4 
+{L<<Ží¶i9@XÁÛüšñ0Ê>©ý¥&H{ÍWKÓcY5mRÒÚ%éÒ¤t§‰b+�ñ"9Ì_½�Ó[
+Ô?6<“`¦5Ô$¿‘OÁ
+¤%Ö½‚¿ÙûÍ36¼bþ+øßélŽ”¨þz°YWDòûF ‘õ«ÉŠïØ•†¹®—mÙ¨À“Óký-žÞç/ùÉH4Ñ/éï<ÚhÏ¸m?Mdõ¸ÓpÞ‘iOÒ¸�­Õí|%×ÞŽPüËžeÿœ±òäRÌ4
+&÷_»$òÔ/¤0ÄO�.ÃÚ™“ƒØí~YqeÔ±â‘±Ö4En6DµP€4ð/2~þay•e†-Xhv²’©o§ªÄ
+¶ÜZ@Kšÿ•›ý'³xp }ÿ°
+Zó/ÇíxÅæ§qqq,÷r^\=L³HìÎOû#J|³‹M�Ù¢Yx�Ð£ÎüœìNÃ$Ò˜¼0*ŠÑ8îIÚ¸$…HãyéHÁOQÐ°öÊã|JÏwi¥¨RÂîøÿwì¯‡#—F(2Ù	 2ùš1ENWpÕü#‘ïí\‘ Ô$Y¦•gqæÚ;Q<ï0-`~C»påÇ©§^™�’`Ü
+¾õò=¼Ú—t]2pÐúÀ4<�*IÜ×4ùgnD3É5k[b�1* }¢´9"[3/ËO4ÅeæÝ-crÐÜ‘o3Ö‚²°POÊ¹d\lœßjÕü[ì×§› iÐž¹�•…Eøª‘r»Pâª-3NûQ.L/Ï÷Oþ
+ójš©ýv7¡ô¶6sû3}^/ó~ðüþü¯üØòW•¬u/ùŽæ{öÕ&™nŒ
+4E
+F8}’iA\¬DË�v~ÓH
+L}Ãï“Ò|÷ªy_Îß—~kµÐ5Ë-RO¨¼ÉFÓ£7¬ Ä°¯8±Ldº?/7œÈCò»YF‡Ueu’ ûÍÜŽÁÁ—5-:B“?‡\
+§¬Ô_,ª*ß	_r0JôI"ºšÕn–>’¦›2 ��N™m¶›í
+oLXª“U
+GphF6©}î‘ivœ•}9i³.Ô>8ØV=ÎçJœ$Õ$}‘Ø¯õÅÈíîâ"à€FÌ+Ò¾9¡õI´™ãø\P;áV×76Ó¤É!Þ‡‰èrHzŸwÌÌ´`ã„£°'lUŒjÖ­eyêÂäyÚ¹¦QÞ‰áŽBª}(Ú0?ÊaLJ„Rºêþ+Ò‡l0ÜnÆBŽÏPò_œî<³~’½%Š6Sé·^ ƒÓ)ËŒ�ØåO¢|ÑùŠÚÞ…ow£ØGo{"¼BènÌ 7¾êOÓšœúhO˜¯±ÊŽRXn…ç¯6èÁ"šñu{v©–Þõ*½£+¸ö®jòöF9ú„€¯?Øß÷½ÏÉÿ�¢ÉÑÅíç—.¶ƒêÀÇÀ«íOÕê4¹1�Ÿvíâ@¾¯ò‡ç‚ÏkªÁo©Z¸êlžŒ»ÿ:¯%ú28{O$=2‰© þ´˜D�7¼ènò®½Æ;È£º;µ¥È1ÍO›èÌØê±K”¢~!«Â—qù3eŠÝz¬j{V¹x²,rb`{—þè¼@×oLx%ÜÛj0o5í¼4þwEýdcÄ‚]Èi¼ÅåU‹Ó»×´ôZÕ¿ÒbaSû^œÐä>iðåÜRKÍ¿–îŠ·šÆŸ0�¿wÂ³üJ+Cé“•�fÎqù„ŒRî)7ü­/Ë½!Ùâ¾y„h¶¶ÖöÖR XÔ–+WÔLõøzN?1úÙþ^]Å�j�~U[ë;Û;
+ræ{E!m•à‚ÞU~†ZšýÛøeÖG˜ üWÁ#˜IµÏ›Éê4ÿ-ÃlQMÄí%	ñoòÊ%Ú?†$üëf1Ä<ß[üÿÕmy‹ß3hÞ_
+	((ØPxHÃ):Ýd�G÷þŒ¿[01õ#æA{ÿ9¢êWOc?æL·ÓÜ$Ž�Ó¸å
+Pý&™1¥í£q!þ™7ˆr�ù„•¿6¼‹õ‘úÚÎÎG9}S%kà9YfõyyÌ�‰ýKãDr!ížT“Ê~fÓþ»¥Ü
+A)ñP†ø7åƒÙ¼˜¥ë�üIûÃšù>	ÿœ�ó.¡iæýGC·ÔîcÓ­ÕDV±¹ôÃ0ì×ïÎ›³û;M=#‹¡¡Ïo'6r"CäK·g�¼§Ôg­\€O^'rk×lÝ&;\C©2™ê²¡˜”7Ù‡BFÄüòèŠWÚ×ÂI~ÔÆKV´UC/0ã’°§!d·x`uC¤+^Dr-áƒ€÷­R6.(h×¶£ílg»f’VÃÞf#~§¾
+T.©ª}Y
+žœƒQ5ÏVjì@ðÆ!�±HŒ…ÃT³»€AïSÒ¹aØZƒfŸDi¿•7š•í®­­më$Ím*U•C«r¿M³&cNLqÔ~Oòžƒåø„¶ÖÑÉ¨H¿é„voòGl×O4‹lq‡ ,±¯i2A©ÛoÆ6z6R2K‹9TE:©ì	"™~1¶ëkô¦µ´Ôlîà^ˆÙU¿eÁœK	‡Üßâ»Ÿ÷Áû>§OÙþ¹64V3ôÌ…w3Š©3œUîkÒ¾Þ8žH<ž+ùáæû*ùùe˜­ö½éé:\«z¿ÎGú„ï’þ;³åZ¼_æýáùæ$¦³©<¨á‚í¿#ï–hú¹þÓFõ>Cï’B_ÑexÉ‰�ŠïVß3^rLCÌ1ŠCt�D«´Ioˆi)<.RE#ö†M‚®¬ž¢E!ZÖˆAéC¶ôÀ¬‚ÓVÔ5;{c}<“A§À±E$Œ±ÃSöBŠT�ã�áfš
+éMú¿W/ÚßjáUòžW¹4Äøb«K Ü	ãÊ�èv®LÀTo,£¾ƒ�¡™wY?†L¸:±›iÎâŒ	ŠCÁÇ�p±d²ÇðÚ®¤¤b‡Ÿß#r•
+ŽPšïí’bšùrà¤�fÆ¨â ö
+Ûdz­°¼²v÷°V£¾ÙlON“ƒ=³õÝ–¾Ø:TrCRàÐŒŠ£bœ4pÊýI+xãŠ½÷È�u=d�]¡¶n	OCíšÍwãírp2ÇÒ'Ô+“§]jR
+ÂÚ˜�Ý6Pv5Ít‚µ¿-?0$‰®WÊw°Û(,ZuKj*v—Ž_žLi¼Á®yJÊòÖÊæM;VŽPÈ!–Ÿš€ü*Œ+Ôesììy¶ïüw eáß¹�ùgþrk^±?Tóf™«	½³¬7+Ø“R¡©á\Öê½™Û÷&�Ëî
+Ã]o]‹þrŸÈ)':ëµ�”…ùqCš£ìçktÈDzú§ËåÜÌj2‡—þr³òðUEkw*v5†Ÿ&¹§ß‡ý
+k¿Õ�úi~¦ÏÌãüRç)|“<Í
+—–u�(‚*‘Óû¹ô7®ø¤ÿ�/Ô¿™ÇÓô=Cüã·ó–¼Ãæ
+;A`4[®ÒÉ¥«HÑÉÃˆ>ë‚=ƒª&§/´þ¤~e�êžj×ò¶ÏÏ:f‹Ö¯¡·•tyÑŸ‹Ï/¦ãá¡ª©©öÌ¨{/{Ê[Çr%©5²—“µ9yŸòç]×/,£Ó¼Ø«yú&G²ˆ[Ñ,­!Û�;eßÈZpz}Ÿ©ª:¬•ý¯Ÿ><ÙçŸ(éþ@³‹W¹ÓuMFÆéµÉ-ˆÞ„`Ôlsi¦ìm8�ù~€Ñ“U’ß*ßù¯Íz¡?¤<Ã¨]¬›’ê@;TR£Û6X»/9F#ñæ×<ö’IÈ‚e˜»7SË•>ö'3#¦„�,–º"U)2Çàâ â#i�6Cb¦ea'©3ƒFMþ!ôxàâ£M½½ùQù—©~[ùŽÛRõžëF»"
+bÙ‹n„€]Tôh×p;œ§6"Û‹5œ~iy“üIù•æ‘0»µ[Ùþ¬õøZGQ×brÌX8#}Î6lœR}äŸËÝ	<«ZŽž“\Þ[Ç>£+/&Q/ï!ù€bäÈfYÇÏ’¼ã¢Ã ùŸXÒmåEm(ôÞ ŠJvEs7-Ü|�¢–ú�"F%ý‘ÅIË•º”Þ›øª¤Lgåöy-~Xªc®ÞO{`Ë.x*£�7÷Ä òb>“L@¤‘ö
+¢¦§µ1•E„,½Aòbó†÷VPNÍº·a¿Ä;f<ótr#‡«Ý´]E­5JÆZü*zfâäFONÓõ™‚$@ß|Å�Ý´Lº„N´ŒYˆé×RQö÷(QšF§Â§­{m€ÉY_—àÚÎ�åWš0Š:ä6Ájû³êù“ûªu<~Yb´dÌ¦¥3&ÇS2b¨v}ðK“ä�ùË)¡O(yv±¤�_Ö¶�ÐE	fîÉ×¡¿G.V)…Ç~œß�^r‰“U$»\À�Ó®ÀŸÖ2Í/¦ïg{í8¦&9póé×«
+"N´-î7ÌËyI�9¥š­²Ë§º�ÊUè7Ü
+á
+|$‹…«±Pz0<hzäÚÓ¶�ë¶3(þò }ÈÁaXË<ª¡ŠDÄ¡¶$e”Éžé·âÖ	SEojt®D¦“û@ö¯\­Q–é�{Ëú[N-âÔï2LÔ¢	 c]»÷ÈÎ\1%”ÈaçËH4}'üGå½j]_O�Ù®lç�"e
+xþèÖ®¼3«‹›““ž}gv'Š9”qR
+Ð÷lÎŽáÃ”ÍÒO®AéÌ’ ã�‹Ã‘Â”v›7«Ý—áùb„ƒÌÜ&Žê1Å&ødµrVI¼�o::<X3{Ð×=2Ý–HÃ}¥™A4Þ¾9l"ò3a©H§}êŸêž¸ÃœuC@»!ìyxdP‡µ”ÖKfÜ‘„}!ùCÉ|©æ9™�U¸ABH¦ànFýÆk5Àþ>.Vû'RüéÑ¼™ä_+[Hé>«&™oÆÍT$"q'Šòê;æ,f[S·‚yƒþrÌ�½ÌP[ÃkopŽŽKEXh½FÇ2†@íøûd>Uó»u{s,Õ£¿2@5?,Ù`ÓðÑ=IIÚD¹E˜%Ô©>'¦[”Ê_NÍuH·_÷å=öÁe­ç·u”qÈì§è'ûÿîû�ØŸú_jàÉ.ŽU†Å‡‡ŽÁ[l£Žˆ7ö¾¦ü�óîƒå
+7Í7^d¸XmÈ %KÜ”1TF;’jµ8³HúOÞåñ÷¾Áÿ9MùCi£ÚÆÏy3²ƒ%’Y?4*Õ¥M¿HÇƒ1ú§öŸÔƒ06;ªÎcù@YÜYhžZÔ¤‘•„SH#Š0H 3)­<)–Ë@{ÿ%Ž >UüÝüÜ—ó>ÿB”iƒN:$3FòÈËõ†ævö#20éL7¶Œ¹¬òywj�jFdüZ[£°Üœ‰�šh/�C²�vnãß,ÇU» w}?ùS•¨èiq*êeøê³?bZ¾Ÿê¡¯ÓšíLˆ–ÍÑÝCó7ÊÖº~¥¡[hÖÌ/µu1ýR0Yå•Ïû“¶Ùg=TÇ¹„~`þVkžFÖgÚ½Í»À—"ñO!Y¤Tv^ù�51>›ù°8Ï:@éšÞpÒt$Ò-c·0ÙÅÆ-JxÜÉ¹ñéUê+“áÞ%!Ì<­¤¸Õ¯§½Ô/Ü]¹kË—`É;qÃ-rqç3hëÃj$¶”º¢Q¶êrÅC·Ä„.ûÓ|U¸Tz­ßâZ‘ÆÓKÞÊëRÔï#…‰	3ƒ3�jÂ‚½:de Dl³ÍHÓôÅ¿)ï:ò#áü“Ó1NB[Æ ;]BÈÞÍc$üS»sr}€é�á²ÊöM-}j«ñb�PÓïÆaˆ¶ac;”¥)BCf1Ží±,ºÒc#(õ Ø×¾Fa¶Ã+³o„Çšî	ïLÄ7jöŸÊ­1µ2ÙÜ´DC`í3× **+ó#l°¯µ}xüG÷tê:xeŠ”;ï™MK9œUIŸÃzdUóâ¾Ø ‹ùþrß“ùgÊ>š1¦;›•BñG°”,xƒã÷å¸Ë\òz£Ð‡ÈŸš?—÷ž[³ÑÏ«o5²Ïkl>V€w¯‚ bO¨=´ñ�f†£õF?h�Ç½àwì?¦‘�X}ŠR í™‘ ¼T°ø_Þ�ÿí´qZÂ«w"¤“š*	 ûeÑ�WYdv‡/Ñðyõä
+ky=»Õy·$cµ+Ðd‰¶´f�1�ø3rxš{åuº¥—¶íÌ±ñ%Ö1ãËÃ2#-’/Ü2É-³KAôÙkó9FC»he¼ª §ÆiÈSzÓ–‘Lr@Ê·–l²Ú¹ûÔòÓµFøx…w²�0ö}/óÉéä¿8i­ezšî½±E¥ÈyÚBÎ8,‘WqF<©˜²Òp–ÙÎÞmÕãà€ž,Não‹Ã2±Š)æ»VA5ŒÌz äú¢¹bRÝªf4Ày(æŠÖaõl¦4©BõwÈE”˜ê§±;»£_Vw£OêÙÃñPÇU>Õé‘d†óÜÝ øÐŠžÆ˜¡	nÏul8V
+ð Oa‹šQ%µÔgphÕñºW½~U]?ÔüÑb¬L%‘cñ>®ÆŸ$5ºÉYr1%`½¸½Öåõ&2Å`±ÛAôâ±røON¤d´ðô’Ù.iæ“ä}_Xµk¸¤†&ZÀ–ôßµ|Nž‘'™jÖréZ­ÎŸ©ÀVåƒõ
+°49|%ÄÒRëˆÖ@ÄÆ(TŸ~´ËX¨ú@fm¿XÅ]é êNAWz1žÄýâ«E¼f&
+Øü#qO£J?UŒÔFç
+¯ŽÝT€¶ëðä˜§EIBOÄòÇ¨;»qo:[Æ9;-vÞ¹\¶—\y<l‚•äE©©ðÁÂ£š¼6²HGtµ@[šºšS¾Õé�Ë.o£$¼•ç�1K­Éå�FÆÆ;±ßËx$“—ª~„Â7M38¦üO¬<«ùgå�%êQù³Ï^j¶ÖüË•‚êöD·µµkrºõ1/‰¸œþlþfùvâò{o/2kR¯Â&à¢·NB¿lŽ»m‚:}í°Iòf®‘_æºµDy‰.aÿ’:fd	îÁ.´{'$ÄÍí¶ÿveFN)Çe.ƒNž+¨L On$^G¡ã]ëôd¸“á&×zuœì
+º4L¦ ƒµqâ_	š}±�%&MËŽ›`”–1Oø¡ä!G%Ø¤/S•Ú*Ô�‰[z
+ŽEQpš5hH†)O fPbPïOdÈìd¢�þYQVg¥5YymR6?<ªh‹Ó, �„f�FÄôÌcÌ7>ªü¶ÑŽ‘¤¥ä©Âæõ…C
+7Û¹^Áëù'\UðvèOC™
+H¡•I£T{b©s¼Š@í]ò*¢÷MY€¦ç¿á€ª[¨%ž¡k%¥äÞZÊ¤Im4i$L¬(AWñ(c¦Æ%)mÎ­âÞsüªòÖ»¡Üi6JtàÌd¶Œ3L‘žôYTË_–Bdóv}‹ÚSÃšPŸÓ¿>\Ç�r|qç.y�CµºÒüÁåˆu!mlÑhšÄA#x:ðf¸XAœ¹ñ+Û'�,º»­f�K®G$cñõ÷¾\Ó<‡ç7ë-i¦ZKz°¹3_Ê¶„WŒ
+<+¾gG0­ËÈêñþR\@íc.b»—~bù.ÿÊW±ZÞ<rÏHï< ˆäº“Ôl²“‡ÂX@1\Dh»=òãT„}ìkuh³HÇÄ¾ xÓz`‰H{çå¿”ÞhÑ‡”üõ¦&›æ]7Ô-ùšÚ¶ÆXæBOéW™F5þœªwm€‡œN«
+Ìðú�Ö]6G>Ÿßß$ªKPÕéMëL#b¤ºh­æ£:üC£®ÇîÁ9ÂËjªŠT�|”ÉBj
+�Åv¢7_–K´˜Š­hAa_£Pš^/+yWù‘‡Þ2 $¼ÙÔ­ùKeŒN‚IEòaôdI¤Úy­¦ÈŒ	e©ÛuÄM1M=Þ’ÃÄ–ZðùöÅ‚…ÔrÆÌò7”;œ#r¯lü™Ssqæ˜û®›Í~jkµ°¢äaN¼ÝåÍ/Ì^“K¡ëÑJZpT¸Žq¦_ %TÙ…pß6Ùõ[ÝFÆóE´ó'—5K}VÔuapÊ‹$
+”ôFài×·\®Q6Ä¾\üÀó~aó×ðÀöªcTŽÙˆ’ìÍâEzxæÓOÁ¿sIc¶�ü}F4àJŸxab�ŽÞfX‚(CgØ{ŠãHµ7·~AZxFû‚ÃõW#E+?ÑÑïc¨;²oLiBk„,¨Âc(mÍvÛå‹4JXÙïQ_oQIuÝÈ°`-í"`v«V¹&4YHª¦€-;|]iŠÒI+Æúœ±×å“¥JRÔf¼†úÊP‰i!ô•—šÕ
+A)Ñ€¦ã
+ËÈ¥†hî˜¤W/Îâ(Ñ@ÜÔ¶Ço–
+©e»Ó4�[SƒMImoî,ä½¿HQdâ@]Ë}ù…˜[‘…]oïUêÓI ûE¦%ëNÂ¬i˜ÑÆ“*E
+]Æï$t©ËƒMî‡¹Õå‘
+*¬jÀ©Q¾Ç'Lí$-É‰=°n¤
+SæjÙ6®"¹XŽØÚÙGÀ9P‘€–@'	D¨!ƒv²¦}
+°sE4=ÀÉ0GÀ@mÍ7ï†Õ=¶¯Œ“#´”²€>#Üß*!²Âe§§|W0V/ ?-|¹'˜µÞ`ÂÇMKÖ¡â5âO@XtŒbm¹õuˆRð„R4á}¨½>œµY7ýSÅS×ë™
+HwôÅPÏzÕE1T®æÑÐ)ß¾*�]Øºò*ô±V©â%kZö8¤<óVv™ãõ‘ê¯œB;ñv8³â)í-l ’+xmQÛ“G
+ßÆ£®'’	x7ç–¢×ty/¡ˆ=Å�y
+�VôxŸ†ƒ}ºåØ'N<Ãá¦€ÛKqfûŽ\‘»
+šÇ3�·Cu{9ý&hÝy”ñÉ!šdqÜ,ö—@P‡õíZ�1V@¥ª¤žmO‰�sï‹5PÌ{WÇj wßuk³|*v-à1Tà–øÇmRk4�°!{WGD±ÆŠŠ(Pq¯Ž*¶àþééÖ†Ÿv*óªr$Ÿÿìkö¾XG42=2\0*ET�Qá×P
+ˆ2Â¼â‘;2�~‘•ÇfÎŒÍŠ_ºPÕ¹‚½7^ƒ~¡l$/
+�¾*í¶Í“×¿çãK�0ùšbèJ‹ââæÝ)óã)?,ÃÖrnÓ¿Eüƒ¤è:Ÿ�SF×¬àÔ4õ’à%]é#Óán¢£¡¥º�>na�×äŸä¤rK5—£­ÉíÞùÕï¶Ù|õtS[<ócò[ÉŒ¶ZŸ�ïíô¹m¡áªhu–Håe5C¤R¾ÕËðëIÙÇÉ‹wÌ
+¢Kl.ù§Õýø"Zp;ýùŸ…„±±�bÞY"³T™‹˜(«Zn†]´˜%ÖÖz¤ªÉ
+�å«ÌÁª=÷ËPº;'�Ùd¡vÞRz{Óä©èÔÒ4DFˆ›^"‡—W)·Jô9x„Jñ¢òîI95FÇ#(€¼E“^âè�©(éJíß)2ÝxŠ�½¤±Ïj÷*ÕâàšTô®K�<%):]í´Íõ~F>d¨ÓâÄÍxQ–ú<×$É1"Bx�ûl|+”ÊIŒYTqý^ˆ*‚œ}ür™�›¢7^døFùL[¥Éì|2ØµjÇÃ$•�‰ ±ëŠ«”ß_éûb”}° ßl‹$Ú!¶ãjo�Q± %H4F¥¨f©Ú½*œÅ4í\X&vdFzÐž¾#zG’üµ«y·WµÒ´ÛjÊã•ÝÑ„q×vcÐPo¾U)2‹î-MÓ¼¹§YùIbÑÛqúõáÒž Ÿ•ÝÑ�éÈO˜ÀÅ‘PøvÅS†cQ¶d0Rw;âªš‡lU
+#»b©Tô –ð=qVªDŽXÓéÅ^}©Ù	Ž•Ú¿<Qeˆ^é2)!Mzâ °MSG¸t’3nuXlAñÈ‚ALÃá�Ío&M ê’Me-§gžÉÂ�ª“â§zfÇÅn\YÅä!Ë™TƒÅ7ùåí)Ý•Ï!¹ªn�Q‹&¢v’ám¡
+$òšG
+‚Y‰Ûeœ	UäQ�|qš8=T�@õZ]Î£²ÛWÇ%E¸2€@qWbªWCÔ‚T–FuÜb•Ë­;DÕ|áa£y–V²Óõú¬·e�ÁýÑ,v
+Xîr¼Ò"#�Ä‹¥5*|·ä]
+ÛTÒdºžæšIk4Ú‹á¶`i³N_P-Ò§‚D*öß6Ú‹áÇZuèLÒ½qb™j1Ë%hx2“Ê›WÃæƒÉè‘wŸUüÀŽ
+Ñu+˜$ùIæPÌM`4Oã«v�÷žÎlQ"•ÖŒ|ŠŠ“PsA3ÎœÂ—j8Yn%Xã‰KHò=T’ÄÐ}9\!)žLã‘óž8’9®4¯+�+ÆZ9õi(×bwùæßO¤ª%ÆÉ“w–Øëjš{¥Ü…îÙ	wéS\Øˆƒ2Çïg¸„ÙziW^J	 ž›e€Dukâ%­«ÜH]oRBv�H¡SOLNXd|ÓÂ{™�äŸ<ë…~£åíSQ@å.á«ÛeÞ¹Ÿ}Cær'‘zŸùù«¨ñùBòÝ\q­ÀŽ+¶âJf<µ¤>mß—=ÌÎÃþqKóuðØé£ö–YÁÛåAùf9×�×íý«ùsÜóïÌÊ‰¿.õ=7MÔïÒþêöËë­-»?¦¿½™5ý�–cÕøœ�£ÁarI%OøSˆAòÌ›Ûtx`(ú“×“½|†Cˆ¯
+ÿVb7”�}±â^ñ»>"
+vÀJˆ¢Õ‰§"IñÊ¥m¡T�Ž>díã–²Ó$–Äu#GC¦*­èŒUUP®äR›ï‘dŽ…úbU<µU~ƒ|‚¦â2l*;b´®ŠÀ¨`A$P�°z‘<‰­ùÛR†ËK„¥»Þên–»ž]*ôÈ™
+æ¯¶ôM'Eò6’|½åØÖKÇPu=lŽR;ÓâU=�ÌrY€Y6—4r9r>>9^öÚÎtèÏÂ@=FXÅ>¡ðíŠ£ÝÍröwcáŠ©—48ªGØâ©MÛž5ÅX]ü¬mMúb¬Né¹6øªW2r©ïÛJg‰AäÈ¤�Æ*òÿ?ù&ÇÍÚÎ›Áð“M˜Šq’†ŠO`NJ&‹‹ù±æóCÕ.í/-Ú­¥d�+Ðìhi×¶lqNÜ.
+I#›‹UM9d�ž[\ò'¡á¿:6¯k¨’dk9ã™Wù•X1†FBÁ£Ì>†Ô4mÍ–êvÒˆ.5a{#ì•wês
+‡*Q·™j~\Õ4ÉHxñuIã‰43&9ú5œIfFâà« ìr|l8xT°F+N´Û4ð) ôÜoL<v¦(Y!’ÓX"¥¨nD)ð=±"ÃUnÌO�|Ý¬y~ËËÞaÕ£c§L³Ù,ŸmKFP†s×ŽT#M‰t=éË°Æ¯éòiþï4û±b�Ô€XÏï	f;!=>X¢\“ÏÊ™?>è3-B™$õOŠz&§+Õï�ñÜÙ§Ùö6«ù…¡yGC�õžW%Ó²Œ†��§b½sC‡MÅ"Éä ù+Îß™^dó¤¯Žtý,¹6öµ	£;Õ›L:Q‰Ä9^r–¬¤ž&Œjh“ï™&MvIGÃÇR¥•› Ó#ÄÙÂY…Íµ-9.Ud‹ë1	#‘9†^bªAêL†ITIòLc¸~ÄiþZòÞ–°‹/é¶;Mâ·ü#“–ØRzW9üÙÉsã�8y €QbEt
+�ö*2��–Ñ
+BMrHQ
+ÐW¯Ë²ž$—\T–ÜÑ±8Éâ|#ÿ9B¿ó´ynEû-¥Üø1¹sÄûÐÖ™±ÐÃ�¦eó)€ÐíøfÐ›qŒwSô·Š|ñV˜5xÐqñVÄ}À®EUÓa¾)T¡;SNáŠª"
+zøbª¨›tÅQ	U Wt8…UÙÁÜWÃ,á,x�"…wQÔü±áA–É�­Ë#…îz×…’ÚIë*µh	¢¿jå Ú'o¢ÿ/¿&5o3ˆµ0/è?.F�¥$•ä€ÔØŽùA�§…ôš]i:5„^^ò¥¢ØiöëÆâõW÷³‡|¬¤
+Ñv¥ˆ.Åƒn_½}ð¶³Í>Ø* ¦ÄŒ*Ìla*½IŠiéŸØª%ã>-`†�Š¡Ø
+AéŠ ¤ÃJîþÉöëŠ°ÍKrÔßcŠ±;’9uÅPRb¨9Ó�Û|U#¹‚¤ì~c¯›ÿ:,ÿNØÍ¯éVàj¶ˆß]…¾¬@XÔ�™yµN/„/md³‘âu¥�¥zýÙ�Ä‡.ka™���*+ŠQ²¢^F�IFë/Z\y¨4™ywÍz¯•å6ò&œî	µ&£¯ÛÇÛ+Éˆtm×4ÿ1Újñ‰m§,z¼-N@ø˜¦MÂaXÌœÙÌHÄöu\<EžËÍüBIim”PâdVƒÖ,í&…®­c1Ê†®€vpã•°”X�cMé™�
+&›G;xá *clæ�O•º’Ä¡q&±, †´�^Ôã·Þp°°¾íç»”*¡¥vo�K#ü¼ŠH¼É ÎŠÎ²\ˆPZ¡ã¡¥:ý¬k‚‹f Q>o²”ù‹UŒR…‹1žœ{f6šYLí*‡OFþf\�Ìczi£ùOÝ•ƒ¶íÂºp tß!i¤mœOkqÈBM¼‰(
+o„†Ú»WlŒ÷‰	‹ï9?ç&ü·Xm¼¿y+qFšS hËoPkCâ3W=5¹eŒjŸó�šµéwÓôM:$ ¨»¸¿×å“Ž”Ùâl–CùÁæ;»
+Jiî­ì'ƒà€Af÷Á#«!Þñûÿ?yÂð–¹ó5ò¨f<RâHÒ#f\0EC½ŒyƒÍºä/î�ö®@XuðJJ¨:£P’Õ÷`‡&»a/	“§’
+ãÞ”Ël5©˜…L­¬dƒ�UB�÷>8ª&8U…{àdª!Ü5ï¶*´ÁV%v®*¬–íµqµVô…{l*ÿGüºûd£Í’ÈãW•c.›äM®Õ®dPiµ8’A'hcåD=Xàw‘[­½KÈŸ–¾nóýÐƒËú[O2­Æ¤j-Ò¦”cMþ]s.`˜À>Ëòoå”?-R-OÌÞŸ˜¼ËOJ#Ôp‹¨ ÷#0'’G“tbn§æ
+C\u‰GÕ­÷vÉJ*¯@BôÈêÚˆÓ¬ÂHää�ºå «>ÓìÈEªl)\6¶Ìtû:QŽã°ðÂM2{x¸€É0FðÃEiV£Çç–0Sp¦´ª
+ÐtÅPrB#¹ÅRÉìÉ¨ë^¸«Ô4¶<ŠöÓ`÷ö“#}žžI¥M>ûb¨f"‡~ØªÐ6çÉR«˜	­vþ^Cîï‘†Ìg»ãŸÎŸÊ6F¹ó&ƒiÊÑÉ“TÓâŠ¸õ“ˆ;§2ñä¢âË¾A¹…à”.áI!OcÇ­3/ŽØpSqÌAxáB<<§V­M›
+¨%µÍ£úöS2yT5§·|’C&ÓüÕ©@;Ø>² ŠIÑ³…¶%™Ùßýx#AÈÎ@e;®ø[c%—óÇ
+KŒa@}±„)3�° å‹�h+™1äâžkÁ½0¥Ž ·–S±Z’(<˜¶”œ¡¼»sOTÅvÜ¶F\˜F)œ1KêñŠ&šN$…PIü2»£m¢/sü·òœ¢Î	·¹±»ŠîÚ:n!fM@ú3U“ˆ¹¢ÃüÇlÍ¯ß�IBd(v;uÊ±å¦rxl@�×qï–x��
+i
+‘"…EÇ�Rð«}ET�M‰ß*â¸U>¨ªhüé�H
+ÂØ=¶Èqk´Å)ÓñÂD¹'1Éè_ ÙaZš ®Ø$¢Ùƒ_\Í,’EZF­@GñÌŒTÆctQñ<ˆ-Ë½2Él•yPo”î¨WŒ“Nç$«~¬þøª¢Ã·Lš»ÑöÀ¨˜¡o±í‘THO„íÛTŽŒGMþìU|‘’	_‡Ã´
+åÉI)ö¶éóÂ1Ó_A•�7¥H¥vñ¦[°AžÏQòOäçŸ|ù*~€ÐäŽÅÈVÕ.yÃæ•äFôð]ü2¹f¦1¹>ºò¿üãW�<‘Z¯æ6¬šÝÜJtHURÜ¸Þ�Aõ$$íñ
+ù�=aääãÀ	ŠóWæÖ»¦Û®‘ä?)&‹£[¡åŒÌí÷T*
+{×0re2sãƒâžmiù‘pò³ë4ÂIï'G5$ÿ’ÛÓ!æ<Û%ƒ	®¢hÞnòÅï¦d¿ú”�EXîã1¯#°F Ëÿ5áø{“¤é–×N
+×”nSÇbrqÍŒ‘¡N	³»*hXŠßå™X�ÓúŒi”Û[ú`‚(iZe|3'nL|CÉ4…j
+7â*i‡†A6B¥GŽZ8Êžà¶Ý¶ËÐ³‘èF*¤ýqT4˜ªËo±ÅRÉøšó#äqT–âÒ	jxŠ�¶*Ço4¨Þ».ýñV9s¤p$®ätÅRö°’„JŒUjØ¬b¬¤‘Ó"Æ’�FÂÞHŒo26ò9
+w¨ïˆ‘—|7ùÇù3õ)o5ï-Û—°™ŒºŽš –GëêÆüGSLËÇ;jœ_&][=»·Z)£t#¨ÌÈ‘N¹©G%(Ã±ÃIGGuÓ~ý0Z)dV Ó¾Ù@£ã»š0BJÉì¸D[8¶S2ÈÄ³3;7rr\!…–Ñ»b”TC™
+:“L*‡Õ.XÛÇk¤³·ëÐb‹
+ñ@°[Ç_†œœx¶FLãa¡iæÞ#q"––O±·@r‰Ú"õ¿.yº÷D`�W0¢€ª}þ*O˜ó€-ø…=®¿%üê%MZÝ´=jò5¨E[R²J³Ý�÷ÜÓ1eg ñ/2è“®]Xè²ëÚ|T)z±4@åßíŸò—l�¥aDè¸l¥kŠÐ�–[4¶Ê¼�†U�up*¶Ì<6=ò£�¡�T>SÔ¦$,–ØR¸ø±ïE:µòv£~jYrOb7Ê%Ÿ~m�ŠNÞHH©FN_‹¸ûÆ_�RæÆq,G]Ñ†�â5Þ™|3qµÓ_ùs$@Rµ»+¨*C°#|iôÅißÃØlD:íAÔäÖÃ~�ä½Åw¦´r[FEHaMêFE*ÿUÇâû>ø­®ô¸•©û#Æ˜8‡z,'š7”üÑæk•´òþ…©Í#),êynÔâ¹4ñÇˆw¯7ÐžTÿœGó¾³$>mÔ-¼µ§ÆJ¨ÂîcíÅ©0ñ®Ø%•Ý´oÊ¯ÈÿËsÓWÍºäDkƒõ’wAð&þIÊTce‡æ.¯yÙè¶i¡ØÆ=(‚ªz¾™ØÑ�PmÛ®VdKpÆ–Ë™
+ÍÔ¯;¶ìò7*ý¦VqÛ.-—EeÍ”ªA[m�Ó¶]­ËÅÞ�AåÛ;°ÆòÆ+’Ãrê	ÿ…Ê'¦Ólfc½£ÿåVySVAÎ’"¯©âAñ ¯†C&€Gñòmüéîü|ÓKOÊhÑtÝRêÍÑ‡¦ÏBG‡Ä§ožaËK>–¿œ½©�§–|ó¥Æ•æ­ð´S±pGqF5÷ÈeÇÈó_IæBq«ç­5T_è�ß¢®ò@Z#·üc~üŸòŽxmáËä[!‹xEEù‡kEÕ4MFÆJŠÈ‰ê=Éû{’+á†§/â~=èž!Ñ2ÿ•“åOùi»éÿ,×?kÃì~wòœ|¿Ÿ÷3†JæÙÇPdÜmŠ©:
+â¨wNØª�@:ŒU.žsºš|±T–êÐïÁÈÅR9á–:ïÈ�ÛH®~U+°êÅRéç
+Pûâ¨I«¶ÿ,U"ŸŸ3^˜ªWym
+Ê²º/B#�û»ü°Ãf3Ýò¿æäBê-s¬y^%¶ºž}4
+¤Æ•,)ÐŸÊ†JqL7|c«yz÷K½¸¶¸·{+¸	YmäRµ§R¦dx¶ƒˆ¬Ð .(€¬zTûáÚ«uT•éPÕ¦I’&;—âV#¹¦*­õ€zû±f‰ŠIåÙcâ«ö™…6ÅBb$[t.ç¨ú~Œ™Ôm ’k�¬È¼çm ˆô§br'%0àÝìNò*êßé:�ÇÕ _Š8¿h¸Ül{f<ó[“³K¯&¼6×2®Ê†€ýÙŒge´/©©ÑŸÐºeI˜
+CÕ¾-ÅG]òR“4ÊÍâ)âZ”')™Øªhöê„Wíž§1¢¨9—�Û ï–…A¿":øURÉW×�žËÍy|«‘—"˜ó{¾–ÖZ‡RŽx¯P3U”#„+K}eª°Ái‘„IZ@K¨ÅpxIqÆ>žšn[ØŸ|³ÁcÄÔÚ„QDa‰�ž'à (ŸÍÜáwA/ó‹­Ó‚¢Œ»Ÿ|ÙéñST¹<ïÓu!•¸5ñ˜@
+%<³ftá4ksRÀ�"Ÿv	M,†Òö?ÜÊÐÈÃì–µÊø÷^¾ãË×ÖjD‹êDOÂTTþ.0¼-Øù~ûP”[ØØÏy3�¢(bi
+NÝ8ö^­ywòó7^›_,Kc	"“Ý•µñèÆžÛå^+.¶ùþqQª]yÇÌÖšU®Æxì£JP}¡êÌ@�ññm";½>ËòÛòÈÒÇ%ÁdÔìÈ1}bS{R7Þ¤C~Õ¦A·Â	Ý×æÅµ¬Tò�—`°‚!ÅDUP<DH8� â¾<Ë_óG™<ÄLZ¦©pöÄÔZ#qˆ{›â©ž�1éV*š—RÆ§ÀòÅYö™b‘Fžg¿,U8Þ¡¢ô<1TêÇL-Çá¨ÛfVI ªwßl*Ë-4õŒ
+¶É1N¡�W`½qTrEÃp*øª.5'ân$vF,RÝ*kŠ‰­â”6Ì.àõÌii1Ëð!–�á­þ­pý¾]ºå?É¸ÿú›ÿ0™ztêm\OlUéŠ¡ÝqT3õÅPò%Aùb©\ÑÔÒ˜ª[4
+½TS¾*“]Bµ? 
+éŠ±»»TsP)NØªI=´Š~ÇçŠ¥ÒÄàü@7�1T+F•Žý±cHi äh|pq˜‡™ùËòÓË~s·h5{%K‘_JúÜt=š½é×-„ÚL_!yÃòÌúÜ]i(uëHY!gXÇPñVð•	Žö£Üð{�Hf’ÖâÙ­§‰©"0*Ãæùp˜=XQC}B%41>%¢®–h¤1
+¶ô#ÃHµ$}�»EÛZKy ÆÒ=Ev%FW’@6žç¢i>[àK8õ&aZ�P¹‡<žmÂ,ÎÝ$Bª„Ž#j52ºìÀOí./R�fe©Ø�ððŽöÁTúVÓÊ¿“_šZn™ð¯–<×1C5Ü
+õc,¢2¡ÚLoñS¿/l¬”0ß0þ@ù·ËÉw¥ðó–µhä³R'T]Ë:ïÈØeRµxõí¥Ý¬�ð:I¤ˆÊC)÷m•I¦
+]ÔÓ¾Ù`*„ûgˆØv9%_j�E7éŽÅn“Èu+”Œ"3q·Ê²a‰OˆW}rêRxsr:Ð‘†Ä+£MZbDV·Øq��Iù·€'‰5·òÏœ¯h¶Þ_Ô®š¶Ò·]¿–˜˜Š[FÉÍM]ÿÑü›¨pcEy„p
+ý¤¦Kéšh_óŠÿ˜×«_éÖÖ¨EJKrÐDUFJY]nôÛùÄ�L%æ±a§«
+H#g’€õØì~G+$³¦Siÿ8åùs ¸—]ó«˜�r–%0CR7 Õ¹âFWei’[XþAy[‡¤£Y–"Y¹Üî»ŠuSôíã’â(EIùÑå],2ycÉ«_„IÅ-ËÀ)Æí,WQüåó¦ JØÅo¤Æ~Ë[ y÷y)øaàe³¼ÔµýnBÚž©ut[sÎB¿%ë�
+ªÚi�µ«Z×[áOiõ&ŒqEN+Æº
+5¤`\;â„þ×KQÇˆ®ý±VSg¥3Ö½«Š²{-˜TuéŠ²»]-P�Ý�·†O-íá…Sh¡\“rD)\UV˜ª¸FÈÆ¯eD"Žû`ð«ªð…j'ó¿š)q‚§¥GŽ^Åc[ÛCÉj7Øâ¨7µö8ªíhkÄíí‘T+ÛÔì8ŽãAMm¿êÉ*]5³oÖ”ßJ'¶ë·lU$¸µjý‘NøªKqm¾Â§"©LÖÇ}…;â©TÖô5GL’¥Ï£*k×C¼jÛ1¥zâ¨fµ¥L{Ó¹§ñÄ ò`þ`ò•üÌ¦sEµº-ÒáW„€žä¯\a�†®‰ëó�-Ã<š.§q§£†	ÿ{ùÜžeG=/Ìï¿ç¼Ûkê5½Å½ähO§é·¦ÆžÍ‡ó,xˆ¿&¼ÉhÕ¼Ò®e»4g� ëZ1iÝ”Xù:öÉDGL’
+tªõùí•NvÞŸÛùZá¨ZŒŽ‚‡1�5L×Ê“P„“Ú˜UTynå?ãÝ©ôâ¨åÓ'„ÿvÑŽ4ª’	úFø³zO–?0|ãå~1A%õ‚�¬®‰uP;#
+�|É^½aù¯äëäY¼Åå$’õÇ	xÁÊÕØ’d¡Ê¸U0ÿ~M7÷þJŽ¾P‚Ÿ¯Uó¿äQ`_Éq#µ,!ë÷â«óò2"òR;”Óáê>œUiüÙüž·þãÈ`‘ÐýJÜüë¶,•Só»òâ&ÓÈd0?oêöøª£ÿÎAè±ÔXù/nÀÈ±ÿÂ¢�qb€ŸþrSaþƒå›;qØHÜ¿õâ©EÏç×žn>Xl,Ç`±9§ü•?«H.¿5¿1ïª¹-¿-ˆ¶P�}éQ…C¼Ö¼Ï¨’·ÚÝõÀqVå<”ùP>ü“e¥¢Åå!¥‘äa½\W§½q(%šXƒï�á`›Á¤“@Tì(1SË]CAÃæi“VKm¢pà�©#·ãŠ§Á#@aÔâ­&š\’ûmŠ¦öšC=?wøb¬¢ËCû5�jŠíŠ²{m)”C÷b©å½’%>ŒU3ŽØm�Tb[ôaTRD)’UuO±TJB)\U]SÇ_ÃÃ¯lUwþQŠ¢TŠòÖ
+Ž£i�OU¦¶SÇçŠ©½˜5 Èª[9
+†*ƒšÂMöÉ*]-‰©¦*•Of7Û¶*“Ïe±¢ž›mŠ¤³Y�~ÈId²û_	ë¶*•ÏhwøFù%K$³±Tªk/qT·uÛQkPH$n7¦ŠZa5ZPx#4ß> ÖÉQUw8£„6m-ÏXÕƒmVUÁeN�jAVŠ‡¯Â0«i¤Ym[dïLU¶Ñ,Iþå}ñW?–´ù~éE{âÉ.ŸÉpH	Š@ÔÅR›�&Kþí9S¸À”’ãË“ÅË’±ìq*“I rmÁÛ~™Z¨>€ôé¾*‡}ˆOÑ�“—F`§lU�J|¿,X£ãÒaéõöÅQ±èÍQû¾þh¡ŠÛT|im‹R6®ù%´Î-Óû¿Ã
+Úom ôø?;%=¶ÐÃXøïÖ˜« M[„¢v§LŠ¦é­±)Y›rHØŠ·‘$¯R»W}±TòÛDAJ¯~„b©õ¾™Sàªo’( \U
+¯JŒU–ÂŸ,U]"™WôñUTN›d•XÇ±ÛV^‹ôbªáI#cLUPG¸ÅWðª˜ê2Ö
+ƒ¨ÅUQŠª£^zŠ¨7^ßN*¤Ô¯ìý5ÅP74Ûû¯¦¸ªU5+þêüqTªzoý×ãŠ¤w4¯û«ñÅRy©¿÷_Ž*’ÜÒ§û¿ÇJ&ïö1TÓîÿU.š›ÿwøâ©sR½¿UÝqUëû=rJ¥%)û?Ž*´ô^�r*¬>ÉéÓU_²:b«¶öüqTRý‘ÓéÅU×§lU½§n½1f…ºãÅëõN‡ír¯Ol
+Ã¯½>cýâÿaêWéÈªK7
+ÿº?ØóÅPß
+G÷=ÊÈ*ôãÏþ=ºÿ•Š¦	Çþ]ÿá±T\|j?Þ~¿åaÐ�N?òï×ü¬µŠ18íþóõïËL ã·ûÍÿ
+‹4Ö.4ÿtÃ`TâÛŽßÜÃdU‘Øqä?Þ~¢œ¹~ª²Së^5¯íÖ¿E6ÅQMOø«é®*�µ§Ãý×^ÕÈ*o6þï¨ñÅQÉOø¯ñÅQIÛìáTb}%E/CÓp¥GN¾øª R£§ãŠª£§\U[\:Ž�qTZtÅWâ®Å_ÿÙ
+
+endstream
+endobj
+5 0 obj<</Length 66717/Filter/DCTDecode/Width 485/Height 411/BitsPerComponent 8/ColorSpace/DeviceRGB/Type/XObject/Subtype/Image>>stream
+ÿØÿàJFIFddÿìDucky<ÿîAdobedÀÿÛ„		
+
+
+
+
+
+ÿÀ›åÿÄ½	!1A"Qaq�2‘¡±BR#ÁÑb‚’3ðár²C$ñ¢ÂSc4TÒsƒ“dt%5'âD&6³ÃE7!1AQa"2q�‘¡BRð±bÁáñ#3ÑrCÿÚ?×Y‚Š�¿]B³7†€@ô;i@Î¨®ãR@MGAã¥ �t€¥6Ñw�ÏL‡¿I-~:c;ÊzèÔÐSn›hªGòét¿¢@ãú4ÀáQ×M„�_�t‚N¡ðÓ~T¦ˆ)M&
+€Û@×LØøé‚½zèÔßå ?4LŽW�·7Ó¥¼U g4©øâuhÜk² SÜŽ×g!'%|[‰­eCøíØ±Ù^[]Û­Å´‹,2
+£©¨:¶¶Ob"ûS®˜=ÍÜ¸¾ÛÄM”ÈÈVÞ*UüNçð¢�‰Ômh@Ìr_øœ
+vV<PŽÚ´\³ÓãÐ
+gyØµ4®Æ÷Üô‰@Žå“ÔŒWg_ˆþ]YL³£#«`º _žç@ãüº;Ðè€®ÚºZˆ6ÚZ€4©þMwC§ Á¿Ë¡ˆhm08�Èt’–•þ]|Û¡4ÓlÛïÒ@pÐS}0�~Z@»ÓÃL@Öº@q>`éñÐÍÔôøh@w
+ÿ“LP4PI«nN¢ÆVƒL`MQåûÎ�Î ¯Ë@OÀm¦�èÐñÒ@uh—LG}ÚvÀôßHƒ÷h
+ø%!¥kù´ÀÚ¿f”1÷è¯S¦€/Ë ¥:nt ¬wë¡„ƒJõñÑ Dg;«·paFS!
+£°ªÆíç#ãÄo¨ÚéÈCÞ·–q…ìr»~_³GÊ˜ä�XÛ¯†¦¢6Ø�¥Ón´:p	é?ÃDFîü{Ë—È°ikŽ-f‡�­Ñ‡ÀÓôêKlºµ„wnöLxÎÙÝBÈ ¹�šŒx:ñ]ú‚8êTÇWRÖ'í½†S”ÌaîT‹t]Új\§?-<<Ý5š´ñ³Kb‹¨eô£R”ÕÐV`_ñ=še|^!Ž(óÈ¿7n+ù”ë>w¤�ñª§í1Üüµ�f½ìq¸9œ0ŒšýD›ÿCŽú²‹TcÔ¢0ÀùuºÐNH]FÝ>#C@'CÓ@²¼V:‚öê8Knªì?v¡k¥¸	Ù÷òEŽ…28å­9
+Ò«ñÒY*À”ZÓç©0$Ö½t1†ñÑ 
+
+vêt‚N¦ÿ=H¿n�Mô;éjWLSÔ
+ý<4`t SzéHAðÓ¨|wÓ[ÛxéSÓç¦ GO†’õÓˆ4ÐÃc†Ç}ÕÑ 5û7ùéÛ¦úa
+ôüº]F<F��+±Ó@m´†« P
+ù´HÎ§ùôÀ
+©¹Ò6:@p'Ã@GˆÓØaJW@ D!iøtÀXtøiHA]qùèl ütë§ÐùÆ³Ç]]ñäm¡’P¿
+ZŸ›JÏ÷>w#˜Ì]_^LÒË+–f&½u†îXà_´3Óãò‘~õ‘…qqø[òèC=‡Ù]ÅwæÂáwtŸ³*lß—®¶c¼ e…[VUZ½¥Q‹)o¦˜ÿu\´™¬ë;V–/Øe£R[þEôØ›·È4ØX¼¶ð¢Ýw^GîójÊ¤”®£cÉ»kŽá¾‘ÍOÑY $�T~�giyÜ¸ËBIý“+g‘â'*·¾áÝÄ‡’Y¤VãíE«Î:Ã�ê$fn­ªž¡kùF¨c7Ÿø}ÇòËZÉM­­žVûd<GéÕØ~ kCÑŠÀPõá­ .œXlkòÓ+º26X\=ÆJ_öb‘ÅZs‘¶UÔnÒR4¥˜•ÞlÝ²Þ^LÒeòÓñ°W~ˆ�§6ä@ó¶ËS@5•`VRÍZ%ó��yÛØ8.~®C‘‰V£yc1Ž^CÖ€yOÇR¿Â¤,§CYí¤Ù.ÛÇ_N)-Ä*Ïöô?£RÃfêfˆ&vÕ¡!–ž:‹Ôðv˜ÁÑÐ@i08Ð€Ô|ô"½i §Ë}&ÀáöiÈWH~ÍÚ`uh~Z`5Ð˜wË ùiÈŽ­OË@_Ê?>�±ðÓ¶üú fª4
+€>G@RvÒ€8/_ž€8¨ðÐ)öè�8Pxï¡ËöéN )á¢@]þÝP�äÐw®˜AÜwÒ�9€Lðí×H#D€iã§#d²˜ë9/.ßÓ†1æoO@Äê.ÉjÄŠÞë$—;[EôÁüNõoÈ6Ö[rµØ¿áe“·;²Ãµ³ÆmîÕy„?†D­FÞ4=~¿Ub«V±BÉ2Ö'R®§ÅXP�É«È´x¿ÜÞÒ›µ{ÂÿÕ6êþ¥³þÔ2y�ýÃcóÅš±a¢¦U”‡¿f«rö;¾~Ÿ!­Ä”†÷Œ×¢Ì¿Ý¿õ†ÇVc´0�E+£ZÄ(Ž@øüu eéJƒ fq˜½³¹ï,¼7¡Óñ¤¼MG@ÝFüªäž4Þº‹¶¨ÑM“'³8üf;Ïk“Ÿ',�¦â3¼0¤\G—3žµ:iÙt„N[A
+íýúÏÝ9…=â±´B•­YPëuÕU´Ø§.å—¼;ÏÚxÏâyS!·iJ°¨f,jz>²ö…%Ðñ·wæÿŽ÷5öMãwq$ª§¯j�ù5Žö–4FLdžçˆJ3QU]µ¨#Òßðÿ`R,•ÉýE†Ýª*F­Àµc{#e�øýž:Ö˜…†ûÆh~™o¸—÷}Á›‹
+W�zä.@<U�ãm¾Ê5NJÚÎñWIöä+šîzÑ4V6´,
+Ò4Ú¡û9_Žº“‘nãõûŽñ±VaI¹o¤IMMš™�iÐ’œkðQÍfô ÜjMwßvcý¹í8ˆK8Qo�·&�™Wvoè¯Sªì¼C<õuïÿÏxf7j±ýÂ¢ªSá¶úÌîÙ5ÏjýØ¹Í][Yäe¼ªÂÿ¬²/T:UËIõhl@É­’3¿@ÐÀ+µ:tÐk¹Ð!Â�¨4“äm¶€GÍ gSI nº`ë¢á¾˜�è4H ‘óÓ�:„itÂûtãÐhCŽ˜ŽÛ@ÊíñÒ¡ÓX}ÿ
+E€Ñ0µðÒ‡š¾€9”øtÒ‘†
+tH@,§á¶‰8ƒÇa¸Ñ Ÿòh�›|ôHÔéHòéÈMö?—®œ�Æ£I�Ô¨Ól
+§¸V‘ÜYX­ÐvÇ­Êý_@
+ÃˆbG‚“£Å4OåS�Æ[.GÖÅoƒk)"�	cJV¤O†¦°×Tj™D^+&3+åšÑØÛò®Å¶qOé�Msi“Æþ$oYFÙa™³Èãâ¼¶a$s-E<ˆûµÒYFFŒ‡þ#{?ø·mÇŸ·Ž·x�§§�«�Ïõƒöª²¯$#ÌbQè´L£¯Zo]dÎ-.6s"D�–¤P�Ãmâ�ž®ö—Ü»¯ÉsIí£J¸èÛq$üê5£FÜ1µ¤šññn¯‘;†[Øñ2X©{°•‰T¨bj*m†Ú<ƒIÔÌn±™é±—›)½yŒÙçŒ2š-]zŠèu	ÐÕH4~ìîL]æ:Ó9-…ßð‹hV7�„K¯‘_™Ç›q¨ÑF•uþ‘�GìŽ>æšñAi=²Æè]jd§•IûµNòŠò4ö,�ï†ìþã°üÔ¾±·-$VÖòÒs%8ÑcRK7€jm§¡RßC%îeû?Üœeœ÷ö×w>¤—Öù$‰ZÚ‹";‰WyrßÃÃTYUFŸ¹&–¥{¼ýš‹
+e>71C�«ÁÁ­¢§‘‰žSÅ_†àÓK-#]PÝR6ïjqc‡¼
+,SMqtÒ±…ƒ(VŽãSÀˆ²ôÿ6¯Hînü¾´î$ÃãÂ*ÂæWüAÈäx|Ô†¢í¬ÖŠ%…íû§¸î&ÅöÄ
+stay3óº­´‘ª­PTdbÄTê6¾°ÿRæºì†½Ã.'í‹µ›;ÕÜ4òGN¨¨<«ÃâIÕ­´ºRÇ^Ò[<ñI™¹�ŠÓÐ²ÿEv-÷êœVòm²œ�X1/ø‘ï%Ì÷³ãàzÚâéV† É^R·ö�»Uç¼²³!RIè5D�´{ƒ½»Ìã˜
+CÍrOÁPåÔòºô%3Ô`õðùë¡$B½HÓZ™©4®Ú6c@6ñÒ�FÛ®�4¨Þ£DŒ€4¤@Wç§#0+óÒ‘µ­4å
+¯Ä.Ÿ’µÇNP�~#KÈÔøþ}9@q‘)ø‡Û]Hæ‡n@~M?!n„öéùqó`<4
+F�OÙ¤ÉAU÷#�Æ[Kg3C#ÊC2lH
+N±òò:ÖSÕÁ@^ôîƒ·×KùGókŽù—îX±¡Ü9þó˜ÅÁ¡ þQ©¬ÙžÃñBOÝ�Õp–òtoÙm¿HÕwåe®ãð@¯x÷þ:_Ê?›U>vNäþ$wwpž·ÒþQüÚƒçäî/�v�ÙÜÿß¥û*?›Kùù;‡Æ»ÿw	ÿ÷ò×íÍ£ùù;’øÑßâ¬ÿþ:_Ê?›Kùù;ƒÆ�ÿg÷ÿ~“o˜þm?çäî/Î=Ó�ÿÆÉO´6šçäî÷Nv¿÷é?(þmÏÉÜ>4»³<×Ò¼j_ÎÉÜ>4÷nÆúOÍüÚ?�wÔ_;ü[Ÿ¥>º_Ê?›Rþ}û‹Áÿç©ÿ}“ó6…ÎÉÜ>4'qÜ™[ˆÚ«†žÝÅ$‰èU—ÄY�îM9„osB8,Ó“…©ã£ý¥¹B~køOÌk¿lóEIÖdN|™l®nØ²Ùc`Iä”)àf’E�bv-V$ÓÀk&\?×û%Ðgpf1‹èZ\Éo“!E>RÍ¹?~¨åe¶8kfSz'¨Ë¸»Û¸F÷�Ì—Q4N²[±uaFn”:£*ö²RWj$a¸üfC#z ´·y¦}Ò(Ô“×o°|Îº	6T]ðÝCp—’e&q,(]lìâ2¸aQWoÂª�N[Ó~º•<lÚ�PŸ”JDÅ§veûNÊ(±Q=¼C�u‘80O)«/*°ñÕ+ÓÜ±Ù3KìÉ=ÈîüQÊadšæÙ\ÄïêF¼d¾b¾o¨¯–w&«X)îÝ÷n2þÛÝOp	•H%9¸Œ·Ãm[O(÷Ù$ô\ûÁ+Û,Ojãne�ÏÏÖ¸$§¥,¼–>-º‘Ö£RMlÂv>ùZ\v4�£Ÿ±|…œŽ¢9=WŒG ¢ª¯ì¶þjè­�CÉÎ†h3°âò
+6(º¼lBJI€ùzÿ.‹9“}‹ßÑvït[÷‹Ö¼·‘å+'››:°$±?Óò±¦cÜ\®[1q•»VòéËK&ëPMh7Ø|´ï'=‡±jî�y¦înÅL6bÚ;››)až˜YQX:¯™H¦…xQÐ“°ÃÛèî	2Ë…ÄóK‹ß,ÂBÔ¨­± N³äò™¨&º–îéï~õíÌ‚ã®¥”ß”YZZ2}6$
+–¼N�k“«uèX°‘,¶‘g»Ë$ƒ%n“ÚÜ›¨ÒþQŠ	„ ÕÕœ…÷kF6éVíiô'äÒ„9ÄIpØ�ã¸¹#ú»+sÒ,wœjJyƒH7Þš³"·R‰;FŒªßfä¾1Åé4~�u–IMd~dyXõ xWYy¼–”.¥Ú„ÈwÖGˆ“é¯
+²[GHmãn;øQ~dë<÷µ’ègiu0;Û™n®^YIy‹»“RK’Nº¬5�¤—71Ã«ÊÁòÓPµ’R¡»f7ÃZÄ–L`‘#´‰³Žãç®/òí¼—ø¢}sÙsÖî_íÌ¿pTAÿ�eÞêSýc¨ÿ2ýÃÁs9/üLŸÚ:?™“¸üÃ1�¨êJ|9Ì¿qüi|�M.d¥vóšƒåß¸¼`ÿÅr4ÿ¼ÉO‡#¡ó/Ü~o}�ÍËkÙ#’ †æ|:�æ_«4q~:Ún¥úìÛ]Äíy ‰PúŠ€/_…t6Þ;–ëXÚ�tþÃÁ’¿ÿÄI¿ôŽ¢ù—îÌž(âWßø‰?´t—2ýØ¼QßÄ/¿ëßûGCå_»¿¼ß÷ïý£¡r¯Ü<PFÈ^Pþùÿ´u/å_¸¼PC‘ºñ�ÿ´u5Ê¿pñoîOY˜�ôŽ�äß¸¼ ¼¸§÷�ùNšä^wßbd/eï›«i&v·K`ëT1q®Ïö³Ô«"ˆ5®©X4Ñê5¥+öi¦û¤+‹³öÍ_ìk›÷ •>¢¡†Â˜DWw´>qÏtT¼�:Ÿ€Ö.?!½ËmnÅ·Ú¹»•3–ŠÞnp‰ùÉ)¡*
+ª|†º”ÁÜƒ„D÷&úÞd³Ê,bÞNmÉR­MÉCJ£�=F³ò0&¡ì:¾¨¨ÏjÐ\I
+yp$Wâ>:óyñøÙ£M5G*ž´Øj‡b@ôÒL 
+èr–ÔÒ‘¯€é¢F�Ÿ9lBläi§"+ùîðÅb§på¦ÿªMÈûu»�Ã¶U;"»Ý!¶½ñI=(˜Ç/‚>Õû¥Èáß�ÐVé“ë?ÎºÉ$Ã‰|tÐ æ“c¦‚_!yo$ÛHb¸¶~pÈ»[b+ð×gíÜ…ô[ò4^Ùîøûƒ(ý±Þw¯$@²ZÁú+4•L¦5ä~#Â£]K?tKIZØ«wÕ…œ¸…š=Ï£tBeVBR"¤³l9TùjÅ_�Ý°º”;Œ•šþêYW+);oµ¸•Å}àƒµd_ÛüÏnÚå¯ìnæ›asm,Yf)'¨‡’ r’<Úëñªë­œÉží5ë¹oñëu�´»v·¸AÀxÉ¿0†§p
+¬Ñ9DVÄ<¹{©-~›•#@XSÇ–ÍZŸðÒ`Z;½sø™���äð[L@)Œ‹ÏÀÑuFo¥¾¥”on€wü×™šÜ]K#»§&•êÅ�JT�õ6I¨dZ•'…Õ?`£`5¢Húrv5PÚ)ñréœ
+ß•z•|4¼€¶}�HÛ§]}+€Ç‰*8ŽTý­·~<yš
+ÀÒ�‚K
+u-�¼²¡)#ùVO ïM²5É]ýrÏÌ‰jC±¡%[ñ~/ˆÔÅ”Ýá“¹š	&a(¶UŽzž*†«JŸ-‚é55k¸#Qö·¹qw_Úæ1™8¥Id!ZæÚh#2Û´Tó­d¢Òœ[SÄ•-‰W#’œõ#™ï‡ÑÝæåUaûU×+“†ÊßÝØ¹d’±qÚ}ÓÜ×w—Øû9/‘[f¶ã&Æœh òã¸¦Úèññûa^Ú”æ¶™X­98$ñ¨Ô€´ûu�KœÚÊâ«j¾¡ÛnGeßXy×ŠGrxÖ¦Åt×šémAƒWðÐ�$À¹‘b�$æ¼Ü°X¿Zƒõ�ÈëV>?·ÊÄ•Hé.¯#nlÙù|µu°Õ­TðÚ],Ð†W¨×:ëÅÁ é[UÈ$ºR�Ò‘°Àèm€5Óò:¿(�	Žf—ˆ'å«*ä~ØÄÞwôñBþ�µµ=Yúîz®¿‡[îW’þ$¯pöŽC	j/#qwj‡÷îW@v©]ÁñÓÈûjUn¤ky#!—’×ã®$4É�½½?þ@½ÿåýw¾Üõ(ÍÐÖ@®Úì¦V
+6Ó §�Ý¨�2›î‡ÿl²ÿ×7úšæýÅû1ýDHš(í­C0hXŒ:zjÀ±?v£‰¨D—Õ©¥¬ÈR«¸#bÇÇ]DVW;ÎKQ�ŒJ9Le€ñ­/ùº£‘:†H“xÞNU©!EN¼¯Üd5ãØK•h	§Ï\÷bme ÿ.–À´ßDˆÕm9�Æ)]A¶ÔÁ‰HÛèLQ&ÜòÜIšº752zŽ¿G^³JŠ6ƒ
+·#c–[yH˜†‚5sB4^Óïe¹	izÜf$‡¡ùž¸Ü¾�º›v4S'ræ—zøëœõ-aŒµ}4;÷˜ÇÊ&âèAÛÆšÙÄ²­å‰n]»WeÜÝ§”Ë=Ü§3iXm-¬ãæAUR$œŽ‘³5Ú�uè”äQ±]¬«ê@Û{·‚^Û|?tãdÈK‰S7²<PúÁÏ'¸12–+Ð|µV'j¯¯©U²N¨Ê»»+†¹ºk¼MºÛ+�Q»I
+=*üžb:Rº“´•"±õ,ÌVGó
+3r;ŠÖ‡å¨ŒPÀò?7†ó|*~Z%läÅŠäšÒO£’oB8š8ó*>4‹p¤q¬¿m»Sù¤“¹æ–Ï”6ê¯ “õ°QãÔë%¹8Û†]LlÔ²½�ì¥åºúùœ‹©_N$?*Ó}K|5Ø±Ñ¾Ä4Ü{ë‚r™Ž ÔŠuèi«-ÊÅ~?Eú‹d;Øùçõ)”¨%!ˆ)§äÔiÉÂ–„¯Mv_¨®?°=�·•e�-”
+¸óÅÛÇÀè¿#B®8ÖÚOo}�iŽ\&¡bˆùô+BT×a–CØ¸++»ÖŽkÓ‘ˆÃuw‘�	Š6Ù–ó0Û™Ü~¯ÇUfåÑ/fà©¯¡LNÏÃž°Ÿí·óë'òïÜ—Ä‹jöf¹±«ici¯s[Â!¶�|±^$jNËøRpúÿéuÛ‡‘ò%VâË÷ô+½UL›#ÛY;i^;›f	@ØhGÄSWW"n:•:´E¶*écãè0õ+$r� ÛS­ÓØ‹GD·�?£?¥3‘QR�Åw_§_ž¬…½ýÍ¹dußÏèEkÐé¬¿º=»iÙØŒM…½�ùä/oÄ|ïÈÜ–X¤*_)Þ½5jÈÒ‰$Þ„‡·ø.Ëî|,ý»
+ü)•É{užÐ·E
+P\†õì8íÆ§q¨á~3=H½_b;ÛüjcÚòÎÿ0`Ê$Ž“ÛGnÒ2˜‰^%‹(müWms¹”¤û›Óô,­šÑ"ä¶Øv“•�~úb+O‘}aðÃÞÅÒû
+Oid–îÒé§	2Å*<^ŸêÌ„nÕ¯]+àÇàíFôînuC).–(ýGèMGRÀVƒùuµ�j,€ø¬¶IUT5wbß…Pu'ä·`Æò\ž•&;°ášK\~FËq¹k‰Xþ.>š5)×JWp¯©
+¤¶o$©ŽXÜ¬ˆz«.ÌØuÃä¨È×b6î8MgBj7�n–‰�‚H$êéÈ˜í¢@ix	CMY�ê:–hrÐ>C!	<®&ˆŸÖP�ökÒð2-Œù¾¢÷Ü²ÛE�¾kŠŒ¤Â€™:édºUm•×s#´bP|5ämdìÿA+ííGÝ×ÆÐÑ×oíÛ”æ[Ø§ùõÚ*‰ëùô¤@hO÷8Ž²§ýkíý]r¾æý…˜¾¢¡ŠËR¥�Â�8Äì<´ðì×;�Ë�méÔ›±î<åœ)€PùR¡eEAV§Ë]Zr“#³™¤t¸È;9âˆ
+¼wØWaZ|õG#”ª¥²T¯DWæ�î'y^œœÔÓ^k>G{I©V ‘@H?×T1†
+6ãáñÔªÂ$M�:$‹8'�ÃCc€IÛQ6}I“µu4()íÙÿÄC_Y
+^Y#ð�ý-ux\¿m¾’Œ¸ú£1£Dæ9‚
+ �Ž»IÉ˜=6
+¯ÀôÓÝ�ï™áh­.ÔÉÊf¯˜8çrx)Í«£.¦^Œ½­Ú7üB«¿Q®U*ÍÐ`®òXËÛ¶”Ycà‰ÃßJ�—�–(øîò1=§S¶·q°Ëò¶•D28©Qì_vó=�g—°µAéæ"h.	&±š®€mÈT�vS‡&G-AI72ÈîI>£š–ØIüÚHmN„Q�KòÛQ‘’ö¿=ÓzqÎ¦8é ¦ã—JmªræUÜ�i%Û´½²‚â¹nàšK~ß¶~7D?y4”¨·€ž²7‰è£s¥\©¯-ªOÂ?Å˜É6RX¢Š³ÆY¯¥�ÇGS|;³7Vc¹:çryoÐ²µ�ÄFp kœ‘ÈSù|5mF%M?)‚.G¦Ÿ˜Å*SIØAŒu®—�0�(	èÓÃMX7y£‡RU”‚¤A¨"šu´,—‘ÚwŒ*J,]Ø>TŽý@Øž€\¯öë£[¬É'¥úú¡žæ»ynü’ó‚hIZ®Ì¤lT�´j¬ymŠÑjù›žÎ¾‘Ê4ªcoÅ/CýŸŽ¶.mcmJ¾%f÷Ñ\H’ê£IÛ³Zëy*jrBèì+°š”ˆ{ˆÎä1³z¶òeÝiàA¨#Ç¯ÃLP[;rôä/ÒöUHÝj"�y1Qâ±&�¹¦³sœâdñ}EÙ.UWÌ@ñÜë‰¡¥Žìò7³H16ÉX¯$‰¤œ×�P?§ë~Íoâq^Jµ;’…»,¸,í»¾ÆÆú·Ï)�-�R=‰b 1=w×_V8ªBuv®„Çya"í,l–8Ûë#�ÝšE•ÍóŽMÆ3ª¨¦‡qZj9ÕR~>Ûv%G:¿ük½º-Ño÷£SÅBÿoìþ]rrßâZýoö˜rã­uÊd`¦÷o¸ÖØyÍ�ª‰îÔ~ðŸÀ‡á·S­¼nÈ¦Ú"«ä‚+îÓMx�daTŠCÄJ›q'ã«sý²*Ý¤k—¹§C(u
+TŠƒñ×3@¸:@õ”@]Î'LP„äJí©&d†X¤Y!c©ª‘µÄkV.E©°4žãË‹¼¥ñA{s$éè®ÞP~4Õ™yw¾�èF�(´Îœ±!ÿ`×ÿ0'ùÚ ×íÛ¢œÝ
+iFÚí”ƒQñÑ4
+~ý6H§ûš´°±¯_UÿÕãýÓèE˜¾£6aZëÌÙ›C4±Ÿ#²ølHÓ®F´‘xÈÐÌÇñwñ5ÐÛ{–$8‰ëªZ€bàêÔ7_»®’b�§2Sm!17=OÃRZƒ"Íì’ÉHEWã®�8©C{’K¸æú‚I}7U¬B•ÕZþ®Õ5Ó|j¹��`JOv#mfñ�È”®ñí8ïUï,Ô-ÚÔÈƒ¤€Ò×G‰Ëñ~6Ø£&9ÕÜHÜÊ,GPO
+vQ˜×½¦ö›ÝØ«ÐÓûˆIc±ïåSk$Ìäù‚Š†@*:è¥éfèÜ2j�GÐ�÷C‡ÃdÞ×™{Û«"m¯T!…‡•–#Z²Ö¢¾:Kh¡vmŒp=åÜWö–]¿'¯ojäY[%X«LÛÑ«31ûuŸ/ÏoÐ·Ha»ÃÛnéÃÍ.B÷
+{idôwžX$HÐ“B‘EßWc­ÕuDn”Šb=¡÷#SÃÛ·ÆÎB¥fky0>+P	ÛRµmZ–¤ö_¸Ã=¿ÄuŒÃ/ÉMduÏªÐ°á½¸–Ç�×qÅ.l*ÆHŠK;øCn�Ç“7‰è£sªŽ×»&Å’£A¶w3.Rá#[Lm¨)�ÇÇýÜ1“ÿ9Û«¹ÝŽ²få;ÿüŠµ�F‘Ç¬nÄÅ‘)¨y
+Òlp)§VQöh‘‡á¥"Øhw €ÓMŒ/¦5)È]	WRXA¨ êU¼
+K<½Û†½6c·íïòi5ð–HR:;¬~Rß´|uÐ¯=5îª±Ñ�eÎvuTžÓ€ÐÕ‡Õ\PüºêuçSû*CÆÛI{qÙwQ²ÏÚ6®KÜ\T? Ôá¾¬¯Üvªcž¥[;…í‡íÛ‹^
+;|„’¤±_½Ä²ÈŠ„òŒòñjêtç(Õø´3›ŒCêcµ{Y=i„JªIf=Ó®µS"¶ÎJ­X$q¶ØÉ?u2Ç1‰¦"CÅB*“¿*^|t¬•Ô[i¤b™Éf¸¶7ÎÌÅ&4åXÞ€Ž&•Õµ­k²"Û=	ØwÞÚv¯e¼y;á›º¾‘Æ=Tó·¢Hb0¿â7”°øêjÕ¤Ù-K1Ý–/nrI‚íl§pÛCêÜ]ÈÖÓ^Õdk2!’DŸwótéã§Çµr/'¡¢Ú¸ìQówVÇ6ñ3As!µÔÖ¤2OêswbçÖng"˜œ­lÂ³»k‡‘ÚG5v5b(ÜMyëÝÙËÝ’’µÞ½ÝËÒ…�¾™O¦?azs?ôuŒòZ_ÒŠò^ŒO<“ÌÒ¹,ÌI$š“]wÒKC+b––òOqQ)i€P7êt­d”±£Ñ˜x¤‡m†²G+} ¯#kKlÙ]‰%ùê±†¨Ð�bƒ©¡1IÜGß©¦0Ê½4Ó"ÅTji€÷°AÿÌ	ùOäï}µêŒùzÕ>v»¥RuçñÓÑOOŽ†Á”ßskôV?9ýQ®7Ý~„[‰{ŒàëÌÜÖJ[bñÒÿ	Žt›•ùs$ˆê *HÉäR­½Ç]>
+5YRìFÖj[Ù÷V¶£
+ì"Ei'–/MÈaÆ4FÅÈ:Ž\uuNª5‚ÊÙÌ>ÃüŒ8[;Ókj“Mèq[‰duNrçâª§ŠWðïZhÎ°ÒÞ>-¿ÄŠnÚ­„¯mÒÞã‚ràÉŠ$`$@ô?g-båað¼-´'W"UÖm†htÁœÞ?—ND%*òVGåÓ®�HˆÌ]ÇÐ^FÒD®±º»G ª·øOÅN»˜ò4Õº2Ê“9x`È«ä,‘cf%æ¶�x¬{þ¨ý�jÍ�e^UÜŠq¡ê—[Êâ¥Yªá¬ßÇyÿRýÅjŒ.ˆ–)"bWš”jlEE5Š©ÖÞ²A®„câ0øìµÉwky‡·’­G4>™`»ù^„�v±r¼š…¯S+Å×»Y,�owŒ¿Ã¯Ñ�ÒýCÞZûÝéGMÂž¾:Ó|xÝ¼’+­šMN†_5ô÷34ŽÅ¤bIfÜ’w©Ó"KöäY¯á¹²‘áº�ƒ¤ÊJ²Úä7§.ETYJË4ÉsyÛÛv·»¿¸ž@Å$®ÈÔ5ó+ûë•nE»š‰~àî(ÕBäîÀZPzÒmOëj¯šÑ¸˜ñ;»ºm•»ø}'óê=»€Î÷-”¿à·—s\¬u(%vp	ëNDõÑ|ö¶ì˜Ü6¨ž€,£PlŒŠ�¤Ç!‡OÓ i€ãmI†:hha¾Þº‹#@á¢@êtÑÐR4ÆÔÐi€“®ÕÔ«¸%Ü AMJ@JX…zjH Uàž;ˆ˜¤Ð²É‹³+©ª°?©ÖÍlE©DÇqãW½ì|e¤0÷M²´÷�(âoÂîd…•« —Qð×o�š¹¢t¿û•Ù8ƒ	Èbg‰ä™*$W!£¡WS]ÏÃ®´þ;™ÚÛÜßc¯<Üáž¤‘¸ ‚êÀÿ.†“PÂ`ÙÇrXŸkíf*¶sZÞ¬"Kr){Ò™¤k…±‚EcÒº3Rq:­ô‚Ìy5Ôg�èœá§<ÕÖ¿
+yì¶µŸ»tjl­÷/¸2coÍ­œ0‡iÙê<ÿO†µ`àyVlà¢Ù!ègL�ÖJòK›‡/,¦¬Oæä<5Ô¥T"–äj«_äÔ„iþÛv�¦/xŸ¼oû²Ÿû_Í®/ÜyRü+ù—â¯ViÑŠ�:ä—ô@ój"�Ãã¤:i'¡ÕmIe5Ó,:o©Ôˆó°¶÷þv‡ô
+wþÛº(Ì¶5¿›|5ÝEPÇmJh¯æÐÆS}ÍÚÒÄ|$“ýQ®?Ý¾„Y‡s9yfõ6öç'c‡ú»;õWš™­Â“$P‰.Ë!BìTƒNºéà­«ŽkmHÚ¡­ŒíÞV[ˆñ÷òþ[xQª/š­N!A%º±Üê¼Ö»·�žÄè“Õu$²8¨cÊ=‚ßýeý”g‡�ºxjO&àªG"7¦®ÉŠ­ÂmÞ«òÐ‡›Z¥¡}‘¼È]Éyy)šæcÊI©4§æåeÉk¹{–x¥¢åªÆqm÷:PÄÎå¶¤�µÆºp!µí¸¸Œ|È<Œ|Z}šÙƒ<{_ÓþÁ:‹ön9–Ê5�‰�^!Ê_Y¸§ï_–»\LmÚz³Q©|Ïûqjq–6˜9S#q‡ú©³—QùÑÁdô…+R¼O7Ö÷DÞšC*—«{ösÓ³h§S'¡4fGõT(J +
+˜¾°ò°&ÓZY‡œL”\ÿpÇwŠdemÞ¢”ý:—Žñ·¬™²dò!~¦B�*\@í¾µ•ØL-Áh¤škiMj¥:r¨éMU•Å[E”Z—,v:pV$ &¤�Î¹92»¨ ˜…UGMe°ßqÊøjA‰ðˆ-A]´5Ajèè4.§QhL8:^:ÁÇM �¦´u;
+!Xj-ÁÁÒrºÀ¨Ð‚@2
+N_ŸJ;‰….<u$´G“jè€�Q¦Áœâº’cNº˜	™­æŽx$h¦‰ƒG"¬¬
+An5~;@$Mä0xîü°ºº¶‹Óï$_RkHø¤Wâ1¼¨6¤ê7*›¨×g_™%1eû•|iqã§Žýä•Yy€\1,Ü©BX¶û�_èghkmžÊÛ¨‰&+°ÉJWãF}ôÓ�A v¾B[¸qâ8‚Û\L-	Ü�Ð+±M÷>çäàLÙ2êåîhžáûKíæÎàd.'¾ÏÏj.#žØ¨„\QQ+^oOÄOJí­µTÃ�Üôù=9^öþRÞÒ+¹í$‚ÞwuŠáÁÅ ŸÙ>:’R§¡Të‡càâËfÊunÈ‡õ‡Jk;;ÇM7e”¬³nµ…QT À
+yækˆ& 	‹šŒ SH#M¦‰ñÑ¶V3Þ4É~´±ÂÒˆÁ!(X�QZ-M¶pè­nî4S°®:xHœÍj³Gè¹äpGô¨(zêìY›VKÆºøê	ñÖ4{Ø»{€Ôêmè×í¯TQ™h�fµ×uƒAJiŒf	é¦À¦û™Cmañç'èâýÙûvÌñÀß^bÛ›$œíÜ—§-¬lÖr2‰-îÒVVF[ƒ•òšÈã¶ºü<þÔ¼”ú¢·£’µš¸’ã+y4²‰å’gg™T v$’B�
+×áMbÉ.þ²[E¦„Á›3�¹¿·–ÚÝ¯¥Ck=Ûñi‚°£•äÔVuÙ›�/¿]|••íüt’¥jÄjFd,¦°¹6Ó”2G&6´u%¨Ø6úäçÅàâd¶F¦Jj¶zÃã¥–º~"8¿ŽˆÜ#ÀÐTº±.Â�"Øù¾©$ô˜&@iå>å®§ÛùN¶ñÝ2.ªÊnÁYæ Åw×gäH8¾ºÉˆ"¥KÈ·”É@J­+J�
+v²W­>¢É­´‘ßão{ŽÎÚú•‚âã{˜¬-BÂ’¼aAVoÄÍqãB¥:R‹Vëî^â¬‰+LÉ�gŽ:ç#w66¥³yá…›‘Tf<P¹ ÔžåŒOo¸+ÈŠòÇë"†iZQ¸Ÿ)èwÖ|Ù<“¥|�#²2vàš6‰o¬/PE’²—dš*ƒE?¨àŠ«�ÁÖË~^†�‰Dy®ßŽÖÚ,¶-ÚçtÜ!�©êC-*mîü2/�èãÌ>Yp¦¼«ªÿaÕ·£,6Xïoò¡Ùö
+~ÝÄTþ' ln F•“ééÏƒ*•zkbáÑ¨�{•¼½¶*+!q> ìAøq²cum2êŠª˜äg‘¸¾HØYFEV’F4òÆ”äiQ]kãq•æH^ð‹O·ý‹Ý}×Š{øÜEú~£L©Èñ
+øjHÙ¼u¥ý½NŒŠÈ£Rå²}Þ@òÛù†ß¾_ä‹ûwªËP“{-Þ}-ëàê5/ñßòAò"­8‹Ì…¿o[ãç·ÊK,–é‘šà’x[Óp`àGÏn\êú¶Ü*%â÷î/7ùÓìŸw„RVÞ¦›zÃùF©nõ%òÔ9öS»€Ü[�æÍ¨ÿŽõ@òT¢{�Û}ÉÙël·		k€ÏÉÔ
+¨@<€¥+ËmI}½'«ÓÐ�²v 0™««^WQˆåV¡§FAùk+ÇhL•-(—·Ý]ddÂ×“*V…ˆ”ÓVc¢nNsÚd×‰È\^åã²žâiºõà«DéøÓ÷@Ò•¡¥uÚ·Ûé:ù|½^ÅM k‰jC†_Hâ‡BB »ƒ/ui‹~!Žå˜TZRŸ=lã`Wz�½šZ
+vÖZ|…‡«qŽEr¦�
+<~Z‡+
+¥´Øt³h›-Q¬Ä†Ò«»*F9;�¨£Å‰ —Vã«lX¹ÉglóOe�·HJLmå€nÈÊÅMXTT®�øµªpõ)Y“¶·Á*M�±�É"¬¬
+An±ÖÞ;±nö|/rý=ÜÖmiš&™+›r¢�û~‰Yõ˜á­ÿÎ”“Z÷*x”—p`íaÜc½y!¶r—FU…Z‰æM�~`o­´·’“=«[\­Æ(›6aq
+¿¬r·¦Y£ +·�;íòÓ!ê[°½Ão-ŒÒHîx·&ˆže
+Êò5â5‡“Ç¾KÊØ¿ÕQ9—Â]_à-,ÞòâLUô�uk<”©D<|[õU� ©âkòÔù<‡Ž•uÙô#LrÜŽp=¿�ÄBc´J¡yÕ˜�MÎ¸¼Œ¶ÈåškT–„üdk+zŽµŠ©Ò]´š]!òèÔ§Û¦ öÞ˜‘¥”3C"£b¼‚�Ãñkg‰ÛðR7hØRKx£æÑ9)ëÉhßˆÆ‡ÊÄ�¼i·Ž¬äñÕeúÿÐŠ´‚£md¨‡}ŽH÷|íôk»öÕª)Í²5À*5ß)
+Méã  `:ø|5&;ÜÃû‹ý)æ]q>î½¨»ÕùëøëÌ?Cb:;[I¸+ÝzR9"�*:Ò¬�Ù­œ|xÜ'f¬+7]`g’i§Ê\É+ršI˜»”ôêÅ·%áû<4doÏ]ä–8…ÎC‰9kü|âK‹hæi/§j³Í—�´`lŽT€KW¥u¯&:ZÎ°å-È7h•·b©–È.?=á^B%¨^•c°—\üX�î«Ü/hRcÙ.íÍÝÝ4­të¿•P•Qö¯G�‰Žª1;²_
+î6FßŒW£ê"éÈìà}¾?~²gûm-­}¬¶¹ÚÜ½b{Ÿ’QôóPÿ²j®¹yx·§Ô�º¶Ä ž£T¤0­1•Ûá©TC;¦I‘ÅTõWRÎ®P5 ‡dû‡h÷µœ—JÇð¾‰hÅÃ
+r*z…¯Þ5ÞâJ^mêÌÙn›†V½ßî\/rw®C)…µŽÒÆV‰x†·¨Àtgêuªöò3Ô€Åá$º�çfjÆ?v�KsoÙ¨é·Ž¨¾E]Ë.8L2ÚFÔ˜yˆðù
+r³æv~†ŠÒ	‘medÛ$°Ç>i¹Â·˜Ë´ô²8ùjcš/‡ô]QÆàë_-¨ôI­G
+Ü7ØÁuƒ’{bæHã¿™kv-[‡šP<¬¢09.äTt×BÙQR…Xz¥Ä+{Ûˆ8{ª(ë4K°ÉÈ€
+€™_¨ßY¬ÖuK¯Ü¶<ö+M©*A¦ŒÄµ×9ãiÃZ“‰Sø…©x–oJT‘¡f
+U� Ÿ�é­UjÛB!-EíZ[+©âµ&yA1¥‰Ý«yÞOÔ1C©1[*ª)<‚ƒj1Ûóê†îM$‚\dòeIiä;~ÑÓV¿¨à=ôÙ«û[;×„G=Œf!r‘qšT`v•ÆîhiSá®ƒvxá½LÎÑ`aÍf¥…?Þf*:Çms½ÒiNE$Ìf)F¹�Ÿ
+±Ô¿`dEÐ½ÉÝ�PË<‘‘¹C ;�M)­œo%«+ÉÛA…œ2[“nêÊéâÊV¾ók?&�ØtØ’Jë#Æàœ	MP+^›éÓ�'W%Ü�%žd^Ä·¸õÁxƒŒÇ©¤’*ÕÍ
+	bj5Û^~)6eó¬’m�ìÈ,’ÞcòSŠÞ[Ø$&ÜËZÔ ¯>¥~:Í“&;?z÷!Â€�mí�MorÜFã÷VßúZ®0vb÷=ÇaÙÓðþ×—R£?ÔäAFB�£SPÆ»ëN�kTÊî­°çkí¥½œ0É&V+ÅUú”�-ý0äy¸âÄré]õ¯û“d«>ƒê{oÿ_–¡ðãmP?.¨ÿÑý¶ýI{½·
+í¸‰ÊÉ–iJ°„nª$#ÈÌT“N]@ÕµX^‰26VK¡˜í±=šä®%/z¨e(Iò�«Fßí;ëK¬¯†e•I#gŒìì­³GŠ—!ìpúì.cŽhÊÇOT(„úŸ„òš§Y-â““KmjõžÓ¸\Ýö>ââ$¶Æ=/²¾ŠÇQFPG&-_*RµÔmÅjít]CäN³Ü†ï…¶¿ÿvíø•„*¨c4çvÉ_ß\�Áv¯Nƒ¦§ü´¡/¤‹Çßs4ËöíÍš4®Q!PÃeåM‡ŽþZ±eWØ¦Õ€˜äØV¸�Gý\
+™³-HóÆÝ=¾#W'mIvíÜåÕýÄvëv×Xû(D0#¯L)¯î×ÁXšï¾¹œú¯úšp¾…¦&¡ä²ñÜoJj¶„.²j
+B¨õñÒ‰æâ4wS×­?&­¦'`Iˆ=üiNuøü5+ñl”¦IÕÀò)€*j§¡Öbz�³Co7¤ìÜ�IRªc!MM:Ôµnž6è’ËXÁ6—¶·-ukr
+ò��R9ñºŽŸŠ ø�mäªÚŠõsÑÈª†KÐë1ßdŸÿ §ÎÕ¿F»ßlÝeØ×@"„ô×| 5wùtÓ€�ÒšrH¦{™Q?ÄVJþE×îïÚ‹pýF~Úó-šÑ#ÉñÿWqvèâ¹ô£�—¬É˜�ÄÌO— =tðqhê�›ŸA;>ˆ�Ë5ØÈÝýS‰.½Wõä?¬ü�&Ûâu›-Z»VÔ�tZx«ã=½å’ÞL†kW/û¸ÿyôèe³×ŸÃã­ÕÈ¯WTí±Uª÷*ÙÛÈb®-Ñä_!ðä
+E~ñ¬|¾V%’² Å/ñ÷VwC,EYIäŒ(F½=.¬¥3P3â	Ûcâ¤ ñM4,©‚6Ñ	�fíüþjÞq$ÓI4¦IêëÇ éR†²fáRëE²™Z/Ç%³{·,�Æ+#•j/Èí×\¿áåþÖióPD·tâÞCÕâM
+³Š_™þ][ü<‰Iš²@ç0÷Ê÷¶’ë»%jiNª~Zèq²éâÔ2Œ”ëÐgm‡ÉH„Ë,`z†¢…¼�]jv‚µSDì+Øpó-æ"Ó*n)Á/Œ!¥NµßX-ÊJt“]hÒÜ¹ÇÝøZ]¥Š'j�.GOý®©þgükú®›±dï*Š„±gã_¨;}òè|ÉþšþƒI÷d~k¼1Scg·¶í\e½Ã¡H®PÎ®Œv»P�˜:¶œ¤ÿ¥
+ØÝ”&äBúû {2Â2ÑµËIr×zç‚�ÝˆÊ±]Ëk«Ö|q£*·é¯k,Xoñ×F+üsXÃ–XVîSÔ$|à
+rVñS¿]UðRÎU ºZèhvow(á=÷j]Ì»Ëpè=W>%‰P1Ü�k¥œëb:tLÎýÁº’î…Å¥�ê,Ñ±«Ä¾f4’”óýžÓËj·¹MÛ]É?jšK¬µíÇ£Œµ¤*ËEÅ¸³’}%¨ÜSÍ÷j5jtd±=5’ëÞÝÓoIcôØ{	î7cö¨’¡�¸r¢±_ªüµ,ùT¢tRTï}Ö�¬fŒ`1•teÁ°¨ èu�s/Ô—Æ½J$sgF,¡’×‹y¨~´øê=_Ð¥ñ¬ŸýÑ{Àû¡-®*ÖØà1Ìa�SšÃJ�)SSã¨Ó•m�¨îou¦¯/àî”Þ—Q·.ý„±¯R•šÍß÷pýbAea"ÆÐÃªMiÕßS§)?«r»ñíg5ýÚv—t_à/¯DÖ6™PVxšP�K~R…k]õòáûIW«¥‹I÷VèŸ6Gì›Uñûõæß¢$¨—q;¿v2Dêpø½ÃÊÕM3¥üÛöUêSß4–œ…ÍÌd€ÞšÜ>G�jß’Ý‘›Â�ÿbk	ß×Ö»k!‹ÆJ-âX}Y­#y†Ü¤oÖcâuŸù·R’4xJÑŽÜ‹ô�Ôâ±&¢‚¶Qyw¯†�çdcñ^¤ýÑÜ7¹)o,íl"rx(úxºýÔJw¡ë«±òeM™M¸öoÚ†˜NçÏc/.½k{’Qì‹t(„‘O]j½|:ê¹^?A:àuú”/ßù�7î,©øÈ³·›~–©\ÜƒX�Ë%Þ¹kØ¤Iâ±"XÌ.ÿIž
+Ÿ0PE9u55ÌÉ1 ñToy‡Á®(kAû,ÒIBÀx7:×W+Ý­ÑR¥<¶´
+»O�.·vw
+a=UçÉ+è)Øqa¹vèª7?euN*ÚÖvÛ»-µÕRÐ{—ÊÇyéZY£A‹¶,`‰Û”ŽìjÓLÃñHþ?°Ôy\Ÿ-È+HÕýDqŠ¿]b’h…î×F$ˆÒdþ^´:ÕÇÏã¾Åv¬”Åí‹Ùî?IÒ48nƒãBuÑþUcrŸ�És°ŽÏf=ycŠ€sExuÍÍ’Ùm¢/­UPUïl5_Òg™!¡•ÕNÀšTB@ñÓ¯#SÔ‹Ê¤�‡#¶É5»‡i–°-wrzPu:ËL.×ñ‚ÔÓ$0–¦ê	.ò7«aVXPx™»m¿QÄø�uÆãñ÷hOw)mc5Î&ÿ(×`[Y(ò*�äfUUûËjTàãtnš´CÉ«D
+-ÑšŒOåð×>´/d­ìv#¤¥î!<|h©¢Ñ«æä5¯#¯†›Š©ˆâyp:Çˆùk‰ž<ÜØ’]T&ƒ#D¥ŒªXq!hÜhÇ¡èköjÌvIê¤O]…‰‡è`)ÌHe�2–ª
+´`((ji­Y<^9KÇQ&ú‚�>:È�±×eÿA‹ÿ–oÐuÝûnê
+3šø=<uè
+YÜw¦œ€Ívðû´0)žæÃ·ŒŸôuÄû¿Ò‹°îgïã¯0Íh”€å¬ÂùW1Kú÷Z5D��•z©Ìx÷ë­‚¹(•“Z®¤|Ôµ¬�™[+òéyté$÷îîDnŽüª*X!<yØW“´¶í²ÊïåÍ¬ã’±šïm~"	(·‚WnJ¾x]ÕK+Ÿ��5£+TN¾IZ:"?‹E\�©®B'èFåp˜ü”E.áY<ú0û®¯ÅšÔ~ÖBÔLÏóþÝ]ÀLÖ
+õî}3´ƒÿK]|?q«ÒÚ35°µ±PôeŠçÑ•d>tm¿ätSOTR_»0fqú7vÂ;LªEpÒšz¦Õd��ªò_)QË›áRÑ,TV·à]{£ÝLž>Kë<2$,ŠáD°%¤kÀ"­8‡ß‘qæ®õÔ0ò-’ÎÓ¡<µ…Ç2÷’´n‹ÄÑ@¯ê	Õì¤µ{qÝ²à¯jØûl§Ô/§7¨&‰`Y¸Ö Ø×Täqî-£èk{‹'¢ˆ;{éÆ|‰ô@¨ù[X¯÷—¬i
+æ3U»{	¿JY(ý
+¨>u»~Ä•ÒwòP�ðî}ÿî~?ÚÒ_ps²ýøú‹/¸q©¯øsv§ýÓÿÕ§^sìƒÇÕ‘ù¯qÖ:âÖ>ÝÃÁ$¨Q'Ž×Œˆ|X6ÇV×šßD
+õebNî½›¬‘@nL’!qjË_Ãå¥~ýI¶«=(v�wê^ñžé[Em/Û8v1"¯/§¡<E*wêuZæ¸Ùºú²AýØ³âiÛ‘ÿ°ÿ>�çú�VU{�¿­29Ø.mj¼0¶¤B	�üo§ò,»­Pë{Uif‹¶y8){s>2É10"¾È:Á¹(‘Ðÿy'‚øýÚÓ‡Ûøòo{Oá¡ªMÝÞÛHªÒOa)
+ÖÌ±
+6Wá«~|bjÏ¿êø“ÚÙ-Ÿ”˜àYH$ÚÔ~Í4|ØÄü½S¼Í–[x¯TyÝ-î}âÜI^þ´u¦É¤íý"u£¶Æë…ÎûeoŠ³¶’[	eŽY$újr` j¤Ô�N¹ñÁ&­:HònàöÅWñã¿þ7ýIçÇÔQo_ÔÉ=ÂÌØÅÜ�ÝvÅí¹Žx˜5­½Ÿ¨Aò³ÍÇpGŽ¡kÖïÚ(QªŸÌ�öç#ÚÖ63]÷FÒç!<¦)-®qæI!XII-å$Ÿ0¦£\´£jÓ%•®š(üËsw¶ü	q”ç¸þ½õ¿>§ü¼daúþ£Îáö×Ð”	±•v§ÿh-±ùso“�Vù2<Þ/eúLFIŽê`å]dRÅÃãÝÊ;«STÝU&Úp9´Á¥b3~ÞãqpXÃ{g8¶…bI§Ã•øþ³±“ÌÇÇEyX–�àÿÓ7vö)!�Í€òÑ‡ð$?ÿ“®šåã­¿Ó(ÝÅÜ–ÇÖ\<Ö2[<(¦1hl8ä!’¤
+ÃQwW~Þ…w­w´þCŸm&\ÆBí&–Û!pïn‰X¥çî¹•’EP€ŒãŸÕÜôÕ¸cÉ¦="Ri~"y^õ»¶¾¹Ç¶' ¶�ã2ÇeWôÜ��ìšWYsr-[4¢?ÅIîG_w|·vÓA.'«8`Ì–h¬/)o–ªþmý?A:Këú•Û»ÛIm­ìc¶´ô8xøUÐŠ-f­á«^Oyu+JÎÑ,‘¼Î^ßZ[ÙŠÞÎÙ@KkhÄ(Ì£ˆ‘Âþ7¦ÜŽúË|ö²‡±uj–½D"QA¬¬b oöêØ£M#¯jˆYH­ã««©.†U–¼¹¼‘ä™˜¿2H&´è>C]ÜtUPŒv³c®Ü¸ÅXä’[ôú¸T�ZÝ\Æ$Phc+øµj äÔ­;£–šéìû~Ó
+¬°®:+`ß¹Xœ9>¡óHdV®ÃÃY¹ß‰Ä'(¾”V$ó0Ýd.+�Smc�šI£ôPú>ª
+¿_/áÒÆï•M—´Ñ[$¡îçí«;–´Äã�ÄÝ[%¾_ìP4‘VH¥5ujQ¹|u¡äøí_ˆÒp›z•�R).$‚O§åXDÌ@ƒ2€üé®G*�ZvE³¡#²˜ßÕ’¦ØŽ£ìÖKgKE¨�‡P Z(†±Yê@p½+¨¤!ÍŒnï+râ‘Äï+x‘øš
+ëO­ÛM#R6R s�‚ÖŒW>©Y%‚HŠñ(P‚´"ªÁ‘�Ö®e=²›qßÕH«¦ƒuÁQÈç²©ÿ˜píÖÙ¿A×sí¿R(Í±°P}ÿwÊN¦ß›R’õÐÆRýÌ#ÿ§ÐïûÏú:áýßd[‡vP\xkÌÛsdˆÜË+ª+¹e�xÆ	$*Ôš€©Ô¼›õHBÊüÙÎÌbÁ(	<,JóU`ãÌ7R®µ`Îñ½¡ÕÆbÂòêòæ|}nnÚY}A3€�),ZP…'¡Õ™sÖÍ¿YU­'B?–Ûë'PêIA•A®§ê¹û*æêú[ÛWfjÉž4$Scð×W�ÍUª«èf¶Þ…»
+‹·Ì_ÛÇŸÈ¥­ÛD‘t<Ä�T:¨ü
+@	ûõ}y´Ê�-°é‚5ES½n®±M–Ä³¼‚WŠ8/á¤µHÛŸ©•ª‡èvÜm­80,z'2Q“#¶å€Ä
+Ô�Ï†õÕÄKlbnãê&�€UýÝzÔøþMsùyWŒ"üukRç¢Ó\Û>:„²Bã¦«b�­ÓRH3© ÓWÐdX«ï«Uçþì²™”Wõˆ¡Û[ÞzøGR…G2XâŽŠ5Ïl´Q«B5fRÆIÌoHÍPAS¶µqòª²7RnÙ]ØZÍ’šO'ªñ‚xÔT-|	êyóù=6:Á8²?Äë$²L_ŒÉå¯bÇcãi¯.O‘zÖ�wèÜ�]…;±ù,‡ð|eõÚ½Ò^úv/Ž‹¨Î�LaXÝ•ÊˆˆYAq"žGóë©“‘J¨ýŠ¼d­#¸^§®¸ÞEÂ†VâMM5Ž¬.,žÆëw1¶2Á*Üˆý@¾‰rCqã(¯0GÔo­œ\Õ®�©t;¹/¬¯ó×–|Ú'ŽÌò²LðB±4òMR¼Žÿnú\ÌÊíG@JhÙQfbªÔ’O@ñÖE-Âl—ÙØk	,û‘n§ÏH¥ž7E[PG–9T<XoÇ§]t•qâQ}[#-þ6Vï·®æÊßîK˜D¼{Æ¥m“’lÌGÀ!âc¡?-õe¹xÚÓ¶ÂI§,‡\{2À³Ô©*$ÆRöÎnâÖNá¶ãž<ˆ½iF^IM=8køÜ.äƒ].2j­½ˆdZ¤Hvn`öþ&|qÇÙÞz·&åg‘d'%âÑ¤‘´oÁ—ªôÒ|Ç[JýÁSMÙ0ÝÓ`Üøöî-‡“¦�6ZÉåéá¨¾k]+úâq»¼îEšÚò±6ë|†9(O$¥a,Íé·Íuæ>É~BðŽ¬¥.âáp.‘’çˆ §:›Ë÷jÌ¹ªéŠ£ò’f!¬
+š!§Uì YÀÒ"Ø›ÎŸµùôÔ¼•[±•ÌÊiC¿Q©T•lšÐÏû£=½ÅÅäHÚVä”·â|+Ó]¬•’]J/X+±ÐnhT„Ó–µšGbÙ÷FM#L5ƒÞÛÁ–ÿŠª¬4îÜP)þ‘ÕxjïÉ}Dé‘ìZ3—sÜ´Ö8Î6Ø¦’9þšÞ¾‚]z@Lñ¯”½FÝuüº«Äí¹£
+t–µ
+¼ó„kÉ…U
+ŠO
+ÏOs³óï}�Y§BFÝ#ˆ@ùk�{6õcÔ]®!‰yÈáuf Êuº=½Ü/(¤Yö”†›QkP‘Òµ@ßHí¡žg‘c>šÙ¦�Ô(�iÊ´ëöjìíg¦‚³�íóK,^…¡�ä!ªñ‘i^jÛÕ–„k_)»Q9N¿¦¢­zˆ.°¡1×fÿ!Á_gý]¿¶èÑFg¢6
+ëÐ¢ w®˜ˆõŸ†˜ÑK÷/ñX}’&¸?xÑ"ì²†þ:óLÖ´=¦(ZZ<·25Å×&xãQÆæQy>bx“AÐS}nÇ‡UN|¬çBúÒK{¹mZ�,R4MÇpYX®ßxÕVÆÕ¼z’«”˜Úx¦¶žXfCð±I#;ÊhÊ~Ã¦±¿/¸L�â3KÍ‰ä¨È5º¸¾(ŸŠz¼E)öê6ÇVõP/²8 •;¹>k„ì¦ŽH43¸c`ûAýÍz:½P ŠÉÈ~–UB9²µ4#ã«øéy.Åw^Ó7¼¼U	ojÞ‰óÈwå°iÒ€×]öäÄ6…U˜ºŽ4¥ÏÇQlhÙ»s².fòfqk$ˆ¬É%Ú‡^[…aMˆñÖ,˜+g>Ikf–Ì±CØrÓ7ˆØ�Cz¿Íª¿ßRÇ+£GØS2³Ã€§¡½JŸ³mEñ÷ÔŒ¾Ì?øâ´þ9†€ÿßW¡ûµ/à¯î_¸KìÅÛÉZœ³ØP´©o¬ŸpZé.½ÝÙ�¶3(Å„«ï�)ý]X¸Õ_Ô†›ìÇ	í$‡Ì½Á†juãrM>Ú&¤¸u{[öOxa“Úö~áÃu¦×uûÿ©·“õ¢2ãf,}©rüGpáÉø}QÿÑÔ—‹ú�O£ ;§²ò…¦’«;‘[këVõ �¯âPÔeñ¯7ÑJÕ	[õ L%6+JïB)¬ö¥–ä �Ãâ/ò×ðØXBgºœñŽ1Aó$“°x�<X�Ü!L<ÎFÃ¶lfÁàæßÌ8eó“ç§[{sú±Ön­öknK¬KÆ»õ`»”àjÛÒ§Xµcb¡�òê0Ð’XÏµ216‹~šj¬Iô—ªD±7©!4ây1c@ñ©Õ¯¦!Ž\¯fBYdîÙVŽÂŒ¸õaøWÀÜ5w?©á¾µª¬+MnÿbRô*SÉ+LÍ?/Y‰gç^D�êk¾úÃ’¶™dàE€¥u_”*I½:üôü\H>Üíë{¸%Ìf$kNß´4šu ’y@ªÛÛòüR7‰è£s­||	û­¥EäGw'qOš¹…Dkk�´_K�‹û¸#øÚcÕœîÇF\Îú-‰¤E:˜ÍxŸ�:¢Ôkql
+AÔ ’ÚƒÃUõ"ÄšDRwÕ•
+®	Ñ4“¬Q–&”ÔHÞÐ#K8õ¥Ù:ª|¼+¨¶yÿ¸}ÅÕx×p’½?Üh<ýìÛ–änÓ¡%NJ(ùƒ¦µ.ãòoG5ew»-ç6ñª¹1«r¯ÅH¦ÿèëÚÁêpr¾lsÕnR¦UBIZíAò5ñ×U2Å±9‰ÌßÜZKŠŽæKt‘T„�ÙRFW¯�kM—ôhq®�CC+K+$šîuXè“¨cO
+W^z¸íg	›„Mâò}£?m½Ê¥„’4ÂÓÔÜ9‰‚:-]yÕ‚°zëvmW[}RCË¯B‹›÷nÓørÚâl
+^¬ŒÍ�™‰å(=/ÃåaPÕñÔéÀ^1ný<½Šîc;˜‘¤žinßˆ­ÿDl¶ãÁZý(ª×l[¶{ƒ#‰ÊÅ$nÜy–2v`z‚5W'�\”i…lÑè+Y}H‘Çë(×—HÖOãïfžÏøzÙ-ÓB²¸*Ì’œ©‘<¿‹uxë¡ÅÍhðI=ÿîFÈ ²ÈKmko“Æ&™½ó3Ë%)åSû SFZÙÓÅV5}dD++`U—b§À�ci§q±ÇgŸÿ!ÚŸ�»ÌÚíý¹{‘NhƒaZ�z�~^`1P´é¾›`ŠO¹ƒ÷–2~‘®Þ6EØ7e
+õæšF´KvÌyG¿�ìÖÖIb<ìÄBzjòUUÈ=T‘ùuÖáù´¡×M»Šö„Ù�¶È-ÔRÈ+-Û	a”0evg¥C-GãëðÕÕÔ½Ù)ÓNƒ®âã-ÅôwSÛá4¾¼±[º–•\òó:°øk}òÒ¶i¹ÿ%Xêá5?©ŒÉdp7¬¡xÍˆ+éÈ¡¸²¸èÊGÝ§L¶Åi4¸jÝÏÚ¹Xœä±iovÔ¥Å™ôÔŸQš�ÉMk\œw^ôUáe³à»6×-‚Ê\cï#y,¦€â$eôÙçœR[Y9Ð04ZPš·ZkÇ¯ŠñÐ<å¤ÿÒî:îÏií#³e[Q&Vöâ(l%µs¹Œ9)øx—¢
+ÿ&®x«eª–A>Ïýt1þûì<þâãMˆ@Æw~m=(]ã)ÍJªŸÄM:ë.7Æ›¶ìÍžòámÌ~œ¬?’x° ‚+ñÕ…eÇ±q�y¿Ç.o"»WåV‘ÆëÀÄÆFCø¼†ª¾E]ÉV�ìhöV„#ó^dÁåÓéà#�þ÷®±äx=MÎ:ö½ƒæõo²`WÊVÞ”ñ¬º§ÿGü�yu‚K
+/¶¶™4¸{ËÙ%-l·°EôÆ`8FvôÃPì>Ýµ£
+°+i!ghoAk¾å½îo2ynàžÙæ’ôG…‡Š¬ñÈŒž·¦RŸ»ô�
+v­5³;«£’¼z4PRfÛ}é®�¡Šêæd‚ÝY¥`‘Å,ÌÌh�Ô�]Š¶³„†K÷6G¾{'Ž"Ã+ô<cŽ[õ±t,/–ôçqæ%(=|uÕ­<Tu3^í½vèGK’{™DìÈf•ç1©ê²ƒ%þ�káðÛ\®C÷h[YH7Ô½Õ)´H°[û��Çãnmä†œ~‚%�½Ò+G�ŠE*-)É?çxëo�ÓIìBÝúˆã{§¾;âX;~ò$Ë]NRkK·UWñ€ÉÅV6§Ÿ–ÂšÛ•y/ÿ±
+~…—)wgÛÉ0x6õ²7
+S/™@@z5½¹ÿ«ñ0üGTd_ñ®ýË:úkˆ¥+Ê‡~µÁàäl˜íëË;FÄÌ�ÙÌÿWL¢Ü g	ê¡ˆ±�±Ö=ë^^êñ¼|4ß©VMõ4ëÌO³w×·1ä$„;éÀ¤DCÀzgc×K"ÆÞ¤«ä�H°>ÐFÇ–FéÇÔPWî�®ªŒIìKÝè!a´øüÞ>{K‹‰îÖAé¥È_C™4^dªÐ�Õ=+×SÆ±L¢6Vw'»"âÏ$d´··îlmãZâÉPóÃ)ÊJ‚8­ÏZ3ßÁz‘ªOð1Ë«Ì‹\,ðO$wœÃúëV—•jH=y|õÏÅ­Ü’ºÐÐpøÜ—wv|‹w~—}Ñe;Écm?/­{$Œsˆ3?ï$RIë­™1«×Ç¯B5´/B�:ÉQ”«‚AR(Aqï�«C-’¥$YQ—yŒÒ%‘Rxªxyj´<uÒÅjü{hgiÉ|îæ¸ÍKô£´³µA��¸+KúÅâíæ'X³fvŽÈ½(³˜à„,¶ðÜ2J,¤»…nJ	jì<ôâNÀÐ�[ÄñVMŽéÄ"ÉMÜ÷øæÏEbÊðG†žTi# ‡Ib7p…ÂÐµ~:èf¥ño~¥uo¢*™œ6C
+‘ŸŠîÝ¸È�GJ‚êÜrrát´2Ôça±`ºÍˆ�Ï^dîV;?TÇglKÀ‘ª­]Ørg U�@+á®¯¯(É)—;?nû×ÓŒ½Šò(®k=½hÀoýæ«|[= ’Ì’Ôg˜íŒÅ‰�/U-äšC©–3² z’¬@—S¬×Äêá˜ùY»šÛÓYPðbµSPxšluŠú3Ér›y±³²šr·s›xø1¹ä”P|N¬Âªß¹èªžì†»EÁz‡K®„ãIlÚýììFò\ËèÄ¤ñqâçe3­S™Gsìö‡iÚ
+§}Á2÷öS¬	6;ýÊE·XÕC±§¥Emú·Ž»u•£;-%°Û´,nfÎZúr-»G >´›(û~#mL‹g¨O°¯–ì,…ÌyD77«-Ý™†D[8ç ¸@Ì	†Ûñl4,Ty<º–Ñ¶¡ž]·ìÞä¾¹†{WMp-#º”ˆí„­Z+Nüb_Âz¶§ñ²Ð{wÛ½§„NY,ˆË^ñÚÓi
+?ë,³¸óSþÌ~:›¥k¾¥oË¡_“1uéKkfL³‘êÁ![�@Ç«ST»ñ[“½ŸØÙL•ôW7´6JÁ™ØS•<ºçò¹µ¥ZNl[J6mÐF0£¢ì5ç�d†:9ZiŠHÑ¢A#ÎPUŒJ*Ê>gZ8ËÝ2-wäñÙF%¶¸ysz¬€W($VR¤Ô2Ÿ¸êþN
+Ö³Vÿò*±’�ÿN°¡Ž{>Ÿù…e¿XýV×síßR3æØØ—ì×¡EA´Å(b€Öº"‘îiµ€x=(×ï/D]‡vQ­uæ¬jB%™
+T•mÅA¡¡Ø�*¸Ø–âÏä�#$Æ*|¤š’>êÅfmWbÎy3±&¤“ÔÔèo¨Ó:jÌÅæ&V Ïæ4ƒs¿M]L¶®©ˆas�R¤ÄJ·‡ˆÖªrS~äÅZlˆÇÅ·å8ô„MÄÆÿµÇùv×rœœyª’pSãâånÛqn;_&q9.i‰’9ÚF
+,»n#ÆFžfûõ}ég_½Gk¤Õš1/t{Ã¸óY;x²òòžÎMH ýÔ¾qø<¼\?-ºƒ¨*Ù(¶æK´Ûh¡GdW�v�‰xí,\ª­rñ°iØþã÷ë.¶z$ÍÔ)-±@á	q×=â»èË½Ü'åC¨¬7}0¶Žæ?­oF-÷f‚G…[Zøø~äÑV[šþõ«6ð\šÐªºÉZŠ�‡›miÏŽk¡7ÖXãîî®"¶‚–iˆXâE%™‰ ºÇ\ocAz¹{Oo¬Ú(JÏÞWVyÁ˜ôq¼qÓc1‰ÿW ×Fk†½ì'«ô(ö÷½¼b’l�àŽñ¹&Rµz�>ý*ÖuÔÍ’îZè2‰­ÞF6’	`åäpÁþt¨×?‘H±v7(wÄï¶©H™Ñ@$¹�Š+0«ÏÇWaSb7qRÃ’�†+¬^EàžþÛ÷Æ>
+ÍŒU’ªAâÜuÑz)(Çxq�eî�iÿ‡l-/q‡#<*ÚJ‘,Vå'î˜-X9·ß}/ä×Çbß	z±³û‹ØA*ý£5_ý%É]‰x>åë{Vî†C‚X�5µ°iRV5PH¥jßõ2»9-}«ß}—e†‚Ö~Ý†îXƒ/Õ–V2y‰äISª¾t´ƒMk+rUýÅì£R½«Ú›•þEÔmÉ]xz�ÙÞöí\…ƒØÚvÍµ­ÌÊQnéê4uêÊ .ÿ
+ôñæMÄ!_Û¬�ÖÑâ»w)i‘¿µ‡)l‘+Kfñ…V¯”V„r^^#R³�J±Ý7ÆÝÜÝŽÍX’é™gÃqv’ÞE‹ÇéîÑ·‡ÃEU/¯Rwvª .3ö�äìî1O,Æáá�¬Ñº•ZÔsØC:ñ¬¢¯.v¾KNþ±këA¿x@•º²Z*ß¢
+å‹ ø—õµ’MÅÿÜ½'_À§[aqÏ�–Ydc2ñÊ�ªA?nÔÕ«(èg¶MHˆHUÜóÒ§j€~_rïí³FšÚT�ö�ÜÅ%Û¬ps³7SÓ}õv
+Í…šÍ"ºÛo§ÓÝ$Ó¼1O%^CÕðJ‘¶·f¤TÏŠÎK+-Žî¼\x<Û¤hW†3!¦ãðÛÜµ*c?ªÇðêœYkzøßoö44Ö¥C/�¾ÅÝÍg{Aqnæ9Q‡FèvßYrqíFçnäêäpíæ¶sus˜×�i‘H ôãCO¿[pQ*£&K¹#`{w–O¦RÜ9Üƒôëæ=dÏí´b³u,xžÝ›/ƒÉKl¾¤ø’·’F –{iŠbñ�Êÿf–<Nú#/+´ÀI?wêÀdŽW‚‰+Äy#må•Å$Züu�%<\k™Æs(ŒŸjÓU¤s“dmÂ–;õÔ’'Z»8¶ÎäHEEjÊ9g°ûoâ¦¿S*}Áƒ¸—2>�7
+_rjŠKUŽÝ]ž6I¯àhÈµ+¼‘J¯2�B§pjµIY°{;—Ìdr¶VÉy<sÆÞ•²$†5<öaÈ†ºUG”ÔíMô¼[kX,­šÐ?üHw2>JË„ÈÉqÛRZÄðX€V¦Ž¨ü@¢»r-JÖº¶×Ò:­ÂÉ~fq†öÿ3’e’ãýÞÜõwêGÉuÎÍÎ¥6Õ‚ÆÙ¡à{	�
+Â¨›¯©(
+¿Ètäfæä¿¢ô/®4‹TQ‚”Ö2ÁÊŠ
+En(DåÁŠòR�ÄÒªÝAùN®6C»Ü¥ÆAÕæXÓˆ‘ @HP¼š�X…êì¼‹]$ö#Z$zj„&8í2G¸V4ÿ©ÐÚî}¹êŠsllkZü¾ô%!è~;è"0U#ïÔÙ$Š7¹tØï¿¦ûXk�÷Ž…ø7eúÓ^qš‘Ñ¯ërÞ¢>ëµ9jükZ§äÎƒÞáÃØcrpcâ¸ygQä	¬s9’6P9ñ¯Ç¦´çÁJÞµSê´…—¶ç‡4ö†X}Y"Iª•Ø•Gp[`
+Ž |õ?à5v›öþ$+•5+r2þÊ{¹m.8‰¡n/Áƒ©ù†]ˆ#XòÓÂÐËMHÎOŽ „ØÂöš2ŒHSâ>Z¿ü\ [w¿uvi…°—L
+Äª—*â±:/šŽµëó×_‰™ÞíÌhUžúGC>ï~ä´Îæ$¼†��R­#4”Üè>Ï†ºNÓ¹Šª½¯’¿Åe-ò$Ø›ýÝ™C€Çjñ`Êzø�Wg¡:›e¯¸½òaE9YŠQBD§Â‰®M¹9'viXÖÐ<OpûÑU”e$£73ä‹©þ®«\¼½ÃÂ½…Ü®ø©oâ²TžGÉ_ìi×—“»¥_@½ÃÜ1‹ÄÜgó-yre™Å¬�Db†žOÄL„oÓð‘®…mkcŸ'$¶•’;–íÌ?wZ^	�­hÒú�.(Ù<’d¦ûõÛQ­Ý5m´M%áë±¢AîÇoG,l²æŠˆÌu2Zæ¨" kóW.jíþäV$ŸOÐ®É•öŽy=K¼nZY\––F¹Œ’OØt¾Z7>$Ò}ÊÄ™>ÖŠK¡bnb³Í2*<Š•ŒhŸ
+SzËÑ´«þÚ¿Ä˜íïk=ŽZÒúæõ¦oÞÂV	µWŽÚ’u_R–
+?Jú	/½™ÔÆä¸Ôq>ªôûÎŸÉ�IÜcÜûCsŒ–}¥Ü7®SÑ’åùD¤5[�åâµÓY1ôPÈ´ÿ³s�í8§Ç\]w·å”ƒiZ.u!
+|¬w¥F¡çn®PëEý¶F•kuìË¢ðÆÞ�/Bæµùùõ:Þ‘ô�RÝÃ]Oìèˆ“‹½#�ê¹ÿoOÊŸÚKÂÝÊñRYHT\Gp‘Ç-¸šñ<|@ñ:©ÑOR.®v«/X{�gÆ&ØÉew%Ç¦=cZUÿXìÀué«U©Õj
+¶èÐín½Ÿá×gcPXÿéèv§`jÝÑWîù=²¸±Š<U¤Ö×Þ oRîR!à+PhÕ©ðÒòQíPÈø)÷j½±n&RÎã1›ŒÜCk3úŒ
+Ðl[¡4:U½ºÃD|*ŸµZ}C÷6cÛ±%¹íümô3™˜*¦3@)æb(uø[D‹1ÖÓºüÈ|Í¼ù)™llï%Ü¥–^.Ñˆ’Š\üX
+ê�ä½£òèÝ"-å¿ï#/©ºº¬§âÜk?Ãdô@HXÚ`N*VŽk2;ˆê°<C1=NúÕ9?»ö"ñÓû-ú’?m2yuµÅµþ28.¼k%ÜhÁCCV…¸�êÚÇF5Îv›öÊZ_å/ìå‚Y½%ŽÊxî¥T�Ì€.Ýt×_/Ð*Ý¿§õ÷.C�Écq8ÛÔú‰b´·�¦A!‚Ü¥dBšøêË¦ãV
+Ž¿ÒˆÁƒ¸þ>ØXï-XÝ“ë=u[SÄT‘+qðÕ=ÐÛ‚ý™‹!yÚ…7¸énPÛ¥Ô²ä uÿvZ$–à€Á�HW«Rƒ]Œ¢)¹Ûö(ösâñ‚òÒ[�R{OPÝ=šG$cƒÄHñmC¾±|/o'ùUÿ…2;›Yî&–ÖC$EÍ—�­Uk.TÓ%ù%øØì®Kæk—¶˜‚¥ÐÒªv*ß´§ÄF·kb«Ôˆ¹k´¸õ­Ç¤Õ>Eü"½BÿGú'I´Þ¦ñ¤•íx.²}Çec$	p·,f7�ÛÆÄô
+"†*	ëAöjÌt«kC?øú·-	d0×öy9í/�E42Ke4 ®çí:§‘�ÂÐÍx8´£”�0Ž=5ZfÐÝÃ‡�Ûw7Ù¹d.í‹âì�TV`>¦aà8×ÓSøºô×S��R·};JÓc¸�j¬( š¹¥u½.Àî¸pŒ—Û%hY±þ¸j$Ò©ªðüF2¢œŽÝu4D°öÌÍ–ÇÃqnž¼$ª3 óÝZ»Ÿq¾ãk+Äš±j‹L1�MrÙrÆºƒ`8AÓQ{Šu=)H-þ¢oLË;2JÜWaZV‡sá©ã§“‰€�¡ÇÈcgY¡ePYèû¨
+�¾'Z?ŠÞÖ©}vg
+g[Œ_µÿ�qßŠýÍ®×Û¾¤S›cf§Ý¯BŠÛîÓ‘PÖ»ï¦ÆŠ¹•v[íé7úÚàýál_ƒ©E�økÎ³PüY¤6Öi<ÖÉ-ús�,Š²9XÌ�ú¼ÏJVƒ®ºøè«ZËSoB«ò…?¨Ê|•ô×öqÉ_QbÉ1ª*‚c“Ê¯OÅFÛ
+e¶KÛ"Ÿ©2Ê%Ð}‘ÄZ¾c./2P¬–�®'xbyæg´q¨¦Ñ»P±4¦úÓn-o{y[Uþ™ýª™²8Ü”ö-(”Â@( 0e
+M›Xù~;Àëo%${É]P”‰ê6™Å:êÈh{gaÜÃgˆ¿V{;³"Ê¨Ü‹¸£}«®�%’He^Öf7ý¤C±·“�^‘��å×B¼ª½ô3<lšì‹;œFfß'5�µÈ·RÖí=h‰eãVM«Jí¿]U—”«ôî[Ž‘«5({öOMAÁahþ?ôµ�ó¯¶„ü|ÉË�ÂaúÖŸD”ý:‡óíÙ~‚ð^¢£Ü'TaüCðKüúšû…û"^+Ô‹Í÷ÅæNÛè Áã"º�‘ ’ÒÍR~E…[¦ú¿&÷q¡EI|"(ð’÷6
+Ö×9(VŽã{f’J�<¦8ç�b;·$£
+Ë[|S]Ê×gþãË~ëî:ª‚,4&àxê—“2Þ¤Û¯ÜqwwH�}‰bëBy\žo
+êÚß/Z‡µë?¹[î{‡ºÈØÞ^Û/odîUU¬ì-=0,Ã±k™£”Ò¾Wâ„�¹é©;6¢Û�tMÂ-ë‘îîÝ‰=¥a’KBœrQX¼âà0²ú›Ô¸5ùtÑ‹TNµ¯Wýý„µËàíîñx)-òí9ya´³¸‹Ó�—ðNx™9þÏ†Œø]«¶¡W®å;í·q]_¤WöSXY õn¯.aqQ ,ÎÕì6'Y1ñlš%+¹9ií¯oä®ïòå nÞÄÊ‚æôÃéÍÄ¯3é($þ_j¾*ìW[YnK[û·‡Æ¸´Æ`-…¸ôíÞE¬Å‹·Äõ:Êù^.+±cIîÜ‹¿½Ðˆ×ÿ¡YÕkPWo»á¤¹Œ<Wvf=ÇÞ6¹íµË¦6!~×qŸáËå´•B…E1ŸÖfüF»êêewR·*´&hV>øó…IÀØ
+¸¨XøÐt§SÓU[“dõ,­]GïBl�XmZ~ïQ|Æ…àŠßxû“k%ƒà1à;)‰â„úªá…8�|zjuäÚú	¨ÖJ†¹—Ÿ¶È¶.Òc°‰$Fx™€ààÕ·(NÚ�ýšŠ·³Ñ²Íœë¸lÆãÁÝÁ«•¶m’¿„Ëj«ÔV�—ç^•Ó¬d}­þä¬Ò]Ë7dg1Ì]ˆ7öé}x\[äž[;¢¢¶÷Dï,´ótVUø©HšKEØeÝ>ä{“ƒÉÜØÞ¼6÷
+ÒÞŒ‡uxØ©ä§TfÉz½ÇU]Ì¶Ní•!»Cc”¢ª _Þ™n#o
+
+:Uºë¹[ÜºwÜF|/le¬­’;ÆEk$Ð(	õ³úˆÁ
+Ž½uBòª²è[IE:Þ¦íÍè,@É$þ(ˆ*ÄW©§A¬ØªÝ •â5Ék•ËÚIqÉw5¥ÂZÍb#>ªzÈZ	(µåên�>ýkË†Ö^ÒŠZµbg·û€-[v8ž
+X%cÐ/]d|[ÎÅß%w�íÛ=ÊŸý&ó÷&’ÖÞO)õ¼»j_ÆÈú
+å§rÿ%—ÆOy‹všÉíã¬Öì8îTÒ›2·]hÃ‰ÕjSxnV¥›5c�8<&w8ò1¼7pLüÝnm¸«¸¨ŒŠCoÐíªyN¾}v-£Ò§cM`‘±;—`†††›VŸpÔé
+ê((.ì
+•Ç®g[ÎLiå1”Z²Ö©OTB³&•gwkÞ–‘Ù_ºCÜ°¢¥†AÏ¹UNköý‡J¹k‘x[òdæˆ- À\ÌÙkV|¥¹KŽ”yÁþòàx¨ýT‹ìë…aÖûô_õås3,Ù	î..ÜË-Ë3JÍ½Kuëá¬Ï-­o'¹(Qg’í[«sI;vjz‰¹íQ×]lYëgÙ™ïF‡˜ˆ!ð¬8Ö’^ì)¸ýo5¥ÈÈ¼t²LT®»¶j$Š\oUCŒ²â¥tþMsþá­hÿãÿRüZ/ÍˆÄÝ+Ðë”ËQ°¯ÏP	!­4§-´¶`<ê³z†=öŠœúmN[}º³&ÐKb^�Ž²»´¹³�-ïˆ6ï2*²¼fªÊÃÄó„³]'Jâ«V­¢ËÐ­¹r `žf¹‰_¶þ¿Å|
+=#k±öÿ©ólm
+×^ˆ¨ê•5!HÁXW}1”/sIúÛ?‡¤ÔÖ×ïðõ(²�yæjD¦öZÆ[˜¬®n-ÈŽÉn¥‘8•cé,ˆ€‡Û’×Ãc¶ºü{JMºÊÛ¹õ{•ÛÉîúidn7+³ºšR@ä’)ý-`½ì®Ûú¤�b4Íî®Ê,¬2¬/�É©ŠkÄÅÍf» 2§]<_#Mª$íÔ­^©Cd6oÜüK#5óÈcixÕ±‚�ÿWUgâåÉo("¯TGžúíóZ\ì�T¸9WAüµ[wî:îv�ƒÄƒ¤ŽEàtøêçöû¥2EfD&['ÜÐ^¾W\+è<e¢òž„Ej]u1`­+¢3Úí²:Ã)~·je•Ÿ‰äªÄ�IË§z+ ­¡—üMÁ¸†9Šñ,:u×#5|\Õ¥ñô-fblXµ�…nŸv„ƒp–™Ì^N×%hBÜÚH²ÂÌ¡—’üTìGÄk^:¹e†÷Ü›�nñvæ:.Ü’wç=”�êÌGáRæ…Qjh£åðÖëòídT©©þ9ï2Êç7}ÍWŠ·ÔKP>‹Yž[¾¤ôì
+{ƒßáœ¾6QõÐWä[R®K¾¡s�ï¹^î;®â±þ?<�¼÷J’$–ŽFCYc%¿ì7øëM9^ ãð¼÷O¾îî$”e.-ãgæ�@íiNŠŠ§e
+FÙ¬Ø(HR?s»ñyõ‹³Ì‚Õ‘ŽãáðÔ^[!Âì;êwÃÊkù'„Ñf·—Í‰J2ºt£
+Ž�9Z‘º«Qó]ëc>á08uÃÙÌâ[Ð²<Í+'àßÌjh5f^K²Ø�kZ8å4òŸ³\ö‡ž))B§G‹
+ˆ‹ì*]\,�Í]7R¤�¿Z±åtQ-DÉ+ki•hpÛTÞ[,Ö9¥ªñlLLIuoqÍ»® u–Ut<•…~jxÛ«’-hMv/h/vgå‹#tðª#JÆ¹½^@§
+
+S“òr:
+t*þG�kKL^ÏfñÙ©–kH¥hi4ËV�¶e–ªìÉ«+‰UÊ°Þ«c¯ý¬Ì_9‚®�¸ÚâìçàÛ­¹µ?XüºhÊ•ôò#]5†#�¿Ç^['jwª*‚^~Aö¹±‘M8»5?wËªžšÎ¯âü-±cÕiÿ’3¾=™¹ÂácÎ[]G“Ç…™`ä’*0ÈÖ¨½jÞ:ÑáöêCGb3±{Ôb£¹Çß@¹íúÆCO—©ýWk<ž;mÔ½ÖEò=©6>K\ö+�º‘’Ý]y³
+Ã[ÜF»«”ø} ê÷‹úé·û•Ô–ìŒ¥¦s¸"°–Üâ­îKþëvðKsp¤F¬÷R³;z0×„c¯Û«iŸËG¡]«^„~¯wvçpÝã†ZþkÂæÖá§—Œ°šq“—*'ÊOÇUrªå=k
+�w'tÝ$œówkI¤{™8ÐìyµŸK7¸íEßÝ­‚²ž�#.G'<³E�šdhX=¿0äÌ^7
+ås×[³[ãªÔ¢‹ËP÷Æ‚íXRHÚ8Íä
+F ¥CV®Âž§_–±å²t«õeøë¸šâŠÜŒ`/"Ò¢´ª•¨`|ë¬–¤1Ùj7’+f½H}9eŽ›ˆÇ"HÛ}Æ•l“ÚK°`ù'Ü«ø�r¶–‘Ù¡[YêT°â•(A¥ýu{Í+ZÌš—ÛV¿û+ú�q·aŠAU$¾ÄkpÎ}Ô8ì_í®¬;ºÅ,r2¬Å
+„°ÈI@·
+–Þvý¯söoÅ’¹káÉ�U�ŠVKwes-­Ü/ÄGŒ±H8²Ÿ�Y²bµX™Pî¼¬øøcX1`_ÄNšÑÆÄ¬Üô!’ÐQgÎæDÜ…Ü«¿@Æšé,ìŒþl¼vÎG½2›‰ážúÊÂ8Öâãƒ:Ã
+)6Qåª¹<_’¾ß©l:eÖ$×S\Å
+¬U•KÇ.üWñ0n”S×X±ýµÙKÑšÓD¼ßQbU/—Ñ�¨o/™hÄ�B>`êŒ¿nË[BR�GAXïañ4#¨ ƒ¬Ï�u£Z�Õ‹‰ãh‹‡R€*MpM@øm¥ü{À*±Î7"–ÒO OXKo4ø}T)Ë¡ü5Ô¸÷t¶Ú‘µf	l†^ÞâÖK8æKo:±ULVÂ^$±%��ËZ3ò+jx©mÇì%3¨Á)A¬BÝ¶ißøŠíåÐuØà?r)Íô›R�÷kÑÁ@…~UÓ€ªŠž¤Ù#?÷7þÿf?ì�úÚóÿyè]ƒ©E›^}­MdŸnb˜:ååÇ\^ÛY‘;ˆ¤�"ä¬L~£²¯ +ã®¯ñV‰üÊÞX�b•î"e,13]M¤÷Å¤R¬¤g<©Äšy�x0·™;u–G-¢°Œ2GgbÌÛ�vL€Ò¿iÐð¡º³v;vÌ9ËVî4y1¬%õ$õ‘^1‚9!§-úí¦š[ŠBéîÆ[·¯m°+�ºž{¨í}€’5Š?ÝÑb*þª ¾ûh®JÚª	ä¬9îgXøZIŒ€ˆÊ»nw­6ûµÈþ
+{{í¶!s�¶¾¾¸ºº‚i%’t,°ðeä—Þjœ·­i1&�“oÜýºˆöÅ›�å‹î·¢í'A¬?É¯öÔ�iêÇQ÷l¥kÚV-½Efº4ùy¥üªÿm@Uõ÷§lùëÚ6¾µÐŸûM?å¯í¨D÷“½{Uˆ�{7ZB9Ot'müúÑ��¬ãÅ~€ê»±ïnÜF öF-˜ŠßÜ‘¶ÇbÇ[žÿÐ¥fMu$q½É†¼»‚ÚÄÆÉ4�€_^àt$–jSíÓøZþßÐ*n†Îw.-¢å{¹FxŠÏ)ä§íSòéºÆÑúÊ½F1û�Ùj�±õ©,’ÉSðÔ|méúä]Ø¨÷?²"B±¬Cò©¤‡ô×N©®Âó^¢{ßíô×Ù;ÉG	ÉœÐxoAú4y?OÐ’º�Ù©aÿÁ×ø³’=³Ž<jè‘–$-7­BþEßFßøõÑ±Ì³ç”¥¿kÙ9UäGBwbj4	ÛÔ’LdÃ/9°Øþ;0–•ª~Tã¤è¤<½IÚìÜ�³´8K5•I^¤kàGËD©é2g¹ÎéìŒzë'kYÜ~#ÖJ¨nKSE<ü~z§.eGJªVåÿ€íëìD–x{Í"+Kªª	:QÊQ¼¬+MZž“¡žìa{ÛqBñòíŒ*£Y¤¸OÊ¢ºIµØí$7uÙb{kK)ÚØ¿¢yaâw‘¹0$
+yk°Ôoå§èS´•{_r;6ØKwŠí»(^Ñ91gh¦frÊ«
+–¦Å÷WUW”µj4'àúŒÓ½{W+‘�eíxYÛŒBßÖvšG4U<dˆ’HÒ¯+Ët�Ö6e'».Qr“]YYÿËEM%#4­I‘™¹òë¿]JõV«q©_›ò‚ï%™lÒf®šKˆî''ÖœrY$ˆ+MúÕñ
+Sš�ãWê~áÇm÷†S%œ½L†b[HmÖê{R€”Ž@Œé ÙCŸ'Ù©µ³ÚIVÏTTì¯ÊÅrDÆP‡ÊÌ)O/JDêqWÍ
+–pÉ¬w¸]Ë‹í»ˆ,22A²£»G@y#
+:žª@øiÕxå…ô°óö�×·÷ÆÆÎH¾ªw0 I ß`7Õx¨ž[&ïÆInäïîDã-²7LñØ[‹[x–€qF­W¯N¾:³ò«O ZÑ1¼»ežic^iÂßfZ†Õe4mþZª¸—ÆôÔv»òJG8ñww™–Ù®‘c��<œB…Fn¶ûP€£õ¶ñÔíŠq©ÑŠ¶~Px‹:K“H!wõLª‚?Q$$zuåþÏ�y/],´IVK6ÚeƒqÜYF.ãŸ×ž(çµ2¾¥»+T«1QÄzUù�G›�¸„K…æo¢¿�¡?Z�€W„5ÕC?”kW…œ{�<|~vIµ_Ä”Ïd�qq2ãîË.ä)ò+Z
+À ñÕ¯+…íz�ð*ªã%DDP>XŽC,Ä6ÝF¤”
+kKËð²LfVdµÏ@¢<vRCE™FËÃ¨ÿqÖìyJª_ò}¿ìA¨z`o-ï…¦@ýÚYÄÊÞV¥@<kø©@u£7ŽÎ¶#‘6¤Î$–~|¡&4RJV•óŠ_³[Œåï°»ƒ¸¬f2XÍ$6ò¯”0�Ç?¼PhûxQŸ�±¯ùt(Ùy¶¾º‹Žµ‚ÙÒd__~užŠÕsáòÔpòr_uª$¦bØL½Ïˆ\ÕÒÝZÏ;Â‘—¨•ôªNÔ.AÑLv¥Õ¬æ¬2´Ó…±™–KœîBYcX®$
+n»zeX§6¡òëÜ)ÿ´¾�AÅ†>9­.å2ªuFT'wäáH_²µÕX°¦˜úŽ;JL„Yk�g
+ÜÊmn�èGäB�C:/Ž¡JÛäNªm©VD›Ü”Æ®i¥ôaµU‘Ÿ�s)V¡5æWÊÕKçoe?‚*n“¿î!Ž”Û\û'/¹8íãNüÃüÃ~ƒ®¿Ûþ¤Q›cjâ5èÊ$¾ï†€S¾¤ÆgÞæ‘õöƒþÄÿ¯®Þ:àêQ¥ð×ñ5"ÑcpÿÆúXäXT½Å¹–8Úô\ŽGnD.ªR=¶ ¦»Xk“Áh¼WNär4·ÿÁžå,­¯­æ¶âD’VQZ®ûn5ÏYrMz
+×ÉAŸå½¥î;eú…ˆ‹w5ŽIâ
+QQBËÆ¤|õÚ\˜¬Ú®¦W…§3vp¯û?c®—óq÷Åa	»7?
+—kcEš;_Ž§^^7ÔN–D�¶—=¹mÝ–OÜ�™qLZ9€ŒKFu¤g� ìýi¾´yF¤�_ºNÅ³±Æ]vþir9ÒC‘€/¨àŠ8®ãq¿ËV7V½ª	^­2…³ÚÜ@kC<K0Aø”5hçµu[DS6µ’i=¡ív¡’I2Y€
+’i½N¨ÏGáÓ¯ÿ’½q,¶S´7*Öó¡£G'‘ÇÈ†ß\×‚ë å>£»vc!šÎÎiá5âè¤©§Zšuâ]ô¢^ÓÛþ÷»$C‰Ÿ§â~(:W«•—ðï°•ÓêFw�·½é†°[ì–5àµ�Ç«!xÛ‰cÅj˜îN¶ñ¸Î­¶S“"èRËÇ‘&”'b>ým’”+ÝÌ.$ŽGGñesËqÒ è‘×MƒË{sršg‘«@]‹QNô®�=w	êJ
+È¯B*iâ:i½�;P–5-Ó©?Ë¤
+•¬/Ÿ=l‡£\*šüÚšƒ$�]â±¯cakmê'#Œä Õ¨Ž§R‰
+ÛÝÈœ#2¯^¡˜0bØ¨ã©"hë©-Ãò…x£ «´Ó}%!äL`{†{g§.sqjPšíÌÒ§®“¬‚¼#>ÍûoÝ=ÅÝùk¼U²Ën¾€’Rè‹ê˜êê90­<i¬Ùð»YjN¶…$’ûuîÈÇÁ�!Í�¹&qsE'sJ>¡ðÚ"I¬¥ï»;›´»žþ<…­«ÏdÜdÇÝD·ÄT+U¸¯B?ŸWV°Gå41
+Ýþ×_ÜXÛ­¢[]Œ¬åÌHmƒÏdWÊ[ð6é©:y¦‡æÓ“¸[û¬•œ6±ð20„*
+rjÒ„øõêb ¯ÉÉ¥[û+ßü’WÇ¨âAp.`w­+ÌÑµ•q^ò‹¼Ãw¿·½ÏÕöBî{;C¥x‰q<I#22 =Fð¡,vÖÖ½±Ü¢:‘6}½Ü·¸©í¯oq‚Âï­’·v¤,—q2¼Œñ—TŒž=~º<^-‰9ÕISÆöçð»4ÍÏyg=®DÏhœ$‘Ô
+±FâÃfØ�EÓhè4àeqÚ�ã1ñK6BK-Ëlð²½8ÈQ„«PËºí¨ºËžÄ•¡7>Þ[[v£Á6_¹n –Äéêe…HŠ�yà	ä5%Tß‘áAÙž®NÓµÖòÍ/í¯ÎKƒ2z.¨�Á¯E©©:Š¤? ³�‰„‡1–‹ÝœvQËzŽ66êÄ¸’¼w	·ÄÓQÇV›�™&Jå{RÈå®/l367�µ·¿¼Xdâ¨á”46ï!>«&Æ½?&¬xÕkIËÔF÷j×yNâ\¼(nc’Tgápò^r©¡üEyˆÛP´ºÃJGxf
+Ö3¹\•µÎ®gw°õ„7SJ¨
+¢�È©£õèhwÔ•’ž�
+2ÉÙ3ÜŒùÜæ>ûy‹ocy+»-¼ñôxÆ¥ÑÉ<£­4B³×nÄœµ¡›ú±›¸›
+µ°¹u°7Šè=.G‚±4Ü'†±dÅÿ±¸j¥¸ÉèË÷EÎÙYÇôÖÏã+µ]šW~KýVu;4Ò]‹ZI2*+;ïAdúi}2ôÞ”aPkJo¬�wÑ™ü�akÌºÌöo¿æÓþ=û0w¯pÍëCPèÑ°ß‹§óê/«º�¦žÄº=ï“ÍYb±·¡ìÑÇÖS÷Ò¦ÁRVý`”òë§Æ½­X}
+òi¡™ˆ®KsJq<ˆ­¢uë­fvÍÛÞÛ|…ëBÙ{<lvÈf•îÜùÔÅí×Ê5”£�-5U¶]KîbD³lv2Ña³k¦»[n#’rsÄ+¢F ùIÝÃ^¬X¡k¸T–äÇÜ7§æˆXºuøuÕyíýDÖ„•Õîc1{%ýø-w"¢Ë)
+/ÍÆ•j
+ÏŽ±òs+4ü‹+d”Ámp±¹æ§—Äïáª–D§ÜDŽÂàÝÈa�ÄÞŒÍ4ƒ¯¢±“/ÚJWUã½²dJ®ä�8ØŽ9¯í¦ss-¼�È(ãš³#¦„+Q:;U½;�SÔIÃXÖ Å0[wÞímÿ.»îE¦
+¯Ã^’
+�ñ®�@ïá©Ï}Î ä­@è!ÿ¦uçþóÐ¿R‹-uÀLÒ™eÂ^]\OÞâîç²Ùý:[©"VÇà¡› w>bµ§Ã]Î=ÜM–‘§ä,™*´Ð«Z^[Ç˜†òhÿp—K4Ñ�H–‡®Õëž²F_"Ê$‹~Kº,r�»s5ÞGœî—�®>BÌï5ÅÐšxþX¢
+]ŽÃ]krU±¹ß]?‡VŸéûng¥Äk‹µ�åŒSBB‰ ŸŠŠa<V¨’©äŽµ|÷zN„<b‘ÜÅû,Rz•,Îê’zW]œ6nªL—I1¶,s¹.X4Á—„l	]ˆ¨é¶¬bFåo=í—´�¹}Œ•’K�úKs©¶’ácôÏ#^hx1û·Ôëª.³j#­L·1i’¯÷‰šy%¬½Aå¹jê-¦m^Ú÷ïlâ;NožBðM!’8Ô0¨m¸5¦”õ-Vè[l}âìù®¾žK©Ò	›‘¸–	ÝJÕÉÔ+È¬’T•»àv�ÿl\bñwæþòð£ú‘Æñ á n'˜ñZí««z½™^Jµa¬E6ÜŸ|tÊS1a·ÙJü¼t‰mPwëÓã AýRw ;ýÇCEnQòèkZ�0pW°D´'÷”ÿ_U²uÜõýýƒä~Ÿ«©­‘*hÄ>­DÇÕ%§•©1Š¼Œw<EM<h6ÐÈÚ[p>¶Á÷NC“AŠXaú2]L±³Ÿ’F%#úÚš”I$%oK•µ²Ê[›»ž_EÌ‰ ™À'ŠI@¼©¿£xé4�D™·~drîø¿ŽžÚCHãfUü&„
+ºõÖ.ci¢xíØiWº'ˆ¼ƒj«±ßî:Ç_+yÁ·‘ÚÞ‹©Ñ]O'f_PùOÄ‚µãÐêü~Kð ã©¡öO¸÷ø¹}OÓ²…Iºµ<BIñ…;~¨ ?N­®f÷èIÕlYí»§ØËåk¸Gðû™d¢ˆx”cM…ZTVºÕ\ê5Eo™L5ôþÛš8»šk`¯GXâ“
+¹
+.ÿhÕnøßBIXÈûÏ¶»o7ÜW¿E‘¸ÈÛÛ%¼pÝÒŒYÃ³òxRšÑŠµhÏ’Í=Êó{iˆß�ÌÞ�zm]õkÀŠ¾KD
+¤öç†ârj6ÛáRt¾?'ùy‹~f#pÊ?
+HkÓ¥5‰
+Y¾¢oíÝ’ŽK3²Àá¼½iâ+×MaPGälf;Í¤eV‘ÙA&„l>'OàCù½Ç¶þ“„)21PÃŸ”Pîµ'ãá£àOa<ŒjÝ•h)ç�ƒÑ�Fþ"‡Äj+
+ÈÆòv� »(?:Ð|zi|D¼ØŒ�·g¤dyÌÁ#HüÎXì‰Ô%,¶áûc‚¾Ãæ$º¸Vƒ#oä$¬3@M:º™©¬ƒ¥ˆÑj¯lËFk¸2W¹™lí³·3áRêGµk¢e ‘•s³Põ×3&TîÒn
+ÕîIg®,¤Ä@–Ó-½Äq‘u3RA+oBÐ.Ôé¨-w’‚Ç¹û’ÚÂ+tÉÜ¤q¢¢¢Èê &Êƒµ<¨yîžŒÌë^Â¿âìø†â{®àº¶�U£…CI!’E^j¬ÁT5§-é­Üz»)vz•]W²,»žÅw&/øGrMèÜ•®/5!,Ð3Pú3­�áÔVYö_UþÅõªKC2÷·îp—­R7q!Xâf 0cU–6_Æ¾ ô:ž,oš{wîW’¦lÅŒ„>õÜü*wÖ¢‚ñÚVÆfŠîY‡$x~±ø³k;#Uñ�Ë0­d¹ØßYNÄA<r²îÁ5>Úk�tÖú4%#aZôÕL”QÀ4è|F£iê
+‹«ƒ¨Hñ7²ÙÞÇ<R,DT3²ú‹Å…Y7ä¬6#Va»¥ÓNdHO6)¤·ž7²ŠáQÒ8Ú"d‘]‘›—Z*>×•ycm=ê ‚zì2NšÀ†ÁÃÔwÆ
+¼90:ëð7EY~“mËökÒ”0wã_Ï Mµ6g~æWø�¨ÿáëOë�yï¼=Q~¥BÒ[î�ÞÆÓ[�áÕ
+B†ãð±
+Oq°:«{¶4µ¤!îr[–BÒÌªYZÚÁo²Ç8XÌq¨’ŠªHRü›]‘x‹l�7/Bö°ålžê�kÌ-=jTÆ²)z�‡u�K"$‡]Ùš[ûÆ´¸Y´©,hWÒg&¨
+í·CJ�®“Éug1â¬-åîŒëÆX­¤;±w´·g%ÍI,c©ßZ<²xÄ~ÅŸvÿô.7˜ÎGvÖ¶pNÖ Msoq$þ�Ø¼hTr¾`Ý£9RêˆÙGàJØ{ce™Æ]e$žîqa-í¤ÐÃÄRAâÍÐSá­+‹ŽÉ8Ü…•ªºäË³^Ë÷+‘Íç¢{+h)­ÕJ?ª.\ªT©n?„š]ñ¤´1äM8õ(|76?@®Ò¤JnƒA§äÄ…xŠj²Öý¦nû"I,ño†Ê–ƒ)or†<|‘&Ìe”Ž1úA¿îºU­“”h­“PÅ39~ÆÆÝ‹	;bÊêT5Ô9Ò¤Wð)p?-4�û"ª9Ý¿Ø²v÷hâ2–SiÙˆ¦vtS�¼%#C½@)âun�lI(êÿb_)ìÔ{«?ápÁ�EONíæºGríIÊC~B5VL~ƒóH©w·³wX,¹_â±Ý%²—h–&GÚA
+I óV¿
+°øÉ]¯&`áùJŸÖÀÒº´Š	>½Ìq-™_…tÒÔb8› þ‹[‰˜EÇ?7"7b+O
+^è‘_™4Úg�‰<X©¦Ûk=”hNd2P(*M*~cÇ@Ú+ØrzÛÿ™_Ÿëê¶In{èEé¤€U‚%Ü¯Süš’&Ü’]’¶VÝ»œîëõ
+¶ÆxmÚaåZ
+1^>oÞKÊ´ëA¦·Éoq{×ßYÜ×x«‰míP‘š*ðTÐºT¾ûŸ»ÃQz½²4jþÏ÷ƒû�Ûù\uG÷Üd†D�beVD‰ÆœdŽMÃ
+ÎIZ!5¡‘w,—ÍÝù;l‹ú÷øæ[›“ÖSlYB6¡uë3tE‚Fc%+ˆR’OI,�ÈRd�©’B‘Gáÿ—UxZÉV¥•…-”LÎ/+iy}‰¼µVž0¶ñ’OîÚ7©Á‚Ñ÷©5¯]l¥|4ìU“Ró·™‹>É·ÉÇqøì…‰õX­¼‘þù!j¯VŠžŸvú)Õ
+8Ð¡-ü©j ‰”¤®@<�ä|OÙ«*´!¬’§•ôËœ�Ôñ#¯èÕ»ò$»rÓŒH�
+\RØpG&-))ò§]nÁWÌ¹[™SQB¤‘Ð
+þbu¡¢2,®±;RªÔ`6+Z‚Ž¢Û6Ñ{pŽ[ÓjFÝGá? E~{èRKËA°y@Œ=H?áJj]H­Ò	•�†?¼¥9¹éöôÕžHè/I6¤‚WŠ’A)^,:ïááÓDNÄmÜŽ¸�P
+2‘ø¨<~ßŽ¢�¸·2r4¡#e)×¯ô¼4:É$á—V²È¼˜å�ƒÃ*ìÊFêGÏTZ½	È�ÓÞãsp×I<O$¯Õ¸Ž mµgÌ½¬�¤Ô’$6æCºª’GŽÛë‹ZK6¶?›=Œ¼Äa¡‡€¹¤†æ„—-_(`vGJjüÔ~0*Ú@åä:È—BH“Äaâ½·–Y-íäà�$�<œHDø]u8õŠ›±`£IÛ©	),è
+•F¢˜Û’Ò•¥u‡�’¶†lÕñ´"«îc%}cÜï<v–â+U�×‚fâ¿Ñ®¶q¬Ý#ÔÇ••|ZX=ìbï›FÌªPu?kE,õokû1í¾W¶ ÊãòS[I,ŠG‹’H «)À0üšwð²ñ²'‰9“Êv™kü5ÍÉ³”Æå‚1 `B“ñÕ9øô»‹kŸ¡#?¹]á/Ó½ÚÙPDZ"±aÑwÝŽú®ÜLm$ÖÀ²0¹/rûÏ'}5íÖAÞæsÊWUD©¥+Exh·œµ#y¾Üœõ­âÉÚæÝ˜G¡"¿Ôk>o·ã²öèÁef×�¼·•"¹hýky��‘BC
+·5Ã¯¶Þå±¡jI}z½¿ÒÁ¡8–EæÏÉ”•¯ì†:»&eãPžâI S¦³§ Ãb7ïŒ?‡›k¯öýÑV_¥›e5é‘@?*í£AG*tßM¢FuîY)o^¾€¯öÛ^{ï¢ìr‘2þ}pzšÑuÄä0ðËet.-‘²O�°žKÇko§yêÔqD�…ßõ‡ß®þ<”ÑÊÖ¦To/öÓó3Ë…àîc;#xPí®MÜd•ÜšDtwRÁûÂµ`A#æº_&ÖDê�?zrñZÅÐÙ2Ä‹-š…®·.s¥[ÿ¸Ò/v&˜²Ïggmqo�Â-áTg2¯1ðQZëVGšflµñpº‹Áï7sŒ5ö"L}¸´’1f%à±«T2ª£S}ô+Y¹h›ñ·âT=Ú¸÷n×·­,ó7&L–ÑÊ"’/¢ÄzBGD¨ß¥Zº+K¥-™³Ý;Djb0Ž3R¤žUE«h­—·]Íia}
+¶Ræé»rå%µÈB’8â“Š4�AüJôm·ÛUVñmKZn°Š¶C·îms“@—ñ_ÛÆÍè^$„ÆÉÊ¨þ`ã¨"£S½é:2µ[-Íw±=ÄÉví„ø«ˆñÓÅa–ýdy¦”Hœ…¼q¦Õ®ÌZ�~ÝEd]Ë|'H-yÎþËvâa.rÏ/kõ9+/4r õX"£7"¥”©ÓË•Ñ&?�K]
+o¸žî[æqRã±¸×³‚ñV9Úy}VX5câö|u,yüÜd¦«S*•¨Ùˆ4oã«zˆG3#óM™X}š	Y»ƒêhÏ…ò�M•¨j
+t®­ù4 ªÑ¼¿¼Ü±&¿Ûª™4.•yU@ü5ÑÐ\Åq¸>"é'=VÉTöâ±B©@‚8øƒB»]¿>¤‰'NÉ‚Ó)Ù×�»zõóÆ6cÉfWûH�ïñŽGn�mÈ{)î{°¸¹¦µI�ÄtpÈ¤€þBNãNØõÐQ&Áì_¶·§cqÝy¹M¤—1§Ê
+�žZïSÆ xiF¾¤›…'ÜWÜwŽW#(âÙ9>½õÎîÑ×çÂšÅËPÑ*—^Ç÷L­Æ6{xîl®ÔÄüÅ”V!€­)áª°gud¡2¡ÞÝés6g#Ž\ƒ\ÙB«h’�§Ö‚ÕÏ (ßâ®½-y‡ ¼×RC±½ÔÌöäLÐ‘{c,b3ipKF¡IaEð!˜ë=2_ ›†µ,‰ÿÙtŒ2ãñöîïHÂÂÜ�©Æô4øëzµú•¿e½îì}—nÚ_äsKh×*…gX¢˜JJ†.‘¨bÃÍ¸ñÕÊÉ-Eàûßuæpù¾äÎßÚ]A’¥ÉA,«  ¥O³Z0Þv3e™Ð€�KÛð, &Þ¢¢†cñjêØ ´Ô�ÈâòS_NÐž6Å_Tì‘W‚üƒxê›ÑÉdÂÔ�¸¶»Žh¦Œ‰'s-À]Í*O
+Ž“˜©X.…äsÄ[‹2¹—Ìj£t¥x’ÔÓµ­P¢†õ´¾¬Ë3]3+±5Œ¨ý­:Õ‚´	"\CeÕÄR€cD4pñs¥6-¸ÔTÆ²›ÐJÚL‰hÈª�zÐ@	§�†•|´†?´FšÞ ÿ¼�€zT
+òŒüöòêú=ewJDï,é*î˜ ÔPîµøŽ”
+­É
+|-¤¾´ŠWh i¢¨åÅLžf
+)Zu¦³gkÅ—Qj�\¶&§¹/d¦Øúµßc']sõ.æ´¯ÖKîßì›yvíåíþEÙcŽ-–$¡ýzós¹Ø+¨ryÕcYgC‡öËå÷JUî/†¶íÉ–x²ù	ì®á�GÂÂ0ñn\Ó§çÕ8ž7¼ÉW/�|9<th›ÅXXú·pb.Ý¯4°p•Ô¨.
+ÔÞ¾:Ò±ÝëKE%V5äµýˆÌu—n´×C%{=£‰j‰°u(TnjéCÊºŽLtOÞÜœþ\ùèŠ¿¸’ö�­§Òb/n.ïî™ÌÖéDSTªíâ	ÖŒ
+©{dÃ‘>°fÐ’e%v¯‡‰:¾
+�EûCí¾;%ˆ±Ìg²C�»çm3";K,û:ñ	O/Z×QÉEe«Ø·ki2~éïÝ l»_YÜËêF‚wŽU
+b
+ü¥5ZùÅ<u}î¶]d¢M­H8;ÊÖÞ	¢‹
+bþ±'œ¶êì•ðBNÀxhy{"¯�ñNõº�&XllÐNb-¢,§á%I_Ãá¨y²~(Š¶·»ÊäÕaˆ™faUQA÷5^Kª©c=�ÅÜ­�­Œjd�#
+|J­O_³^_\–muf´Õk©9-ëz_I'ª)ä§›qÈPxÔn5e¸™'`ó@'MöÕ­8`ÁÅmÞ˜áêùNº¿o^äU—é6ïÑ¯LŠ ¦˜†
+E4÷3¿rhrÐûþ³kÎýãt_ƒ©J”lÃ\&Íha"ŸPêiŽG8›5½ÉØÙ=x\ÜÃÓö^EVüÇW`ªwK !ÕÿoÛEumyj�{ˆžãÓ†º0zixƒÅÈü-J7Qâ5ÐX|l­]i$+-CÜ}�¾›s†úk)¢ÇË$É%œ£*±»p©juÔ¹ûÑø­�ª“RWå»RC;@kË’ÂªzS�E<¿-f_pÈž„”DY7ÈÞK`©”-yT¶Ûëf¸¿êd<ue}îï˜p7}§wô÷xé"[jÏiV(ÍP	ñðå]tqä•(ÍšÊÍÊ3·™o¦³Š[”H"biçrìÕƒÍA_Ë§%Dæ:»x³ÄEÓKéŸËçcO1=)ãª-Y´«Edcc’šÎë#$¬ìŸ…Ñ�Àu‚ÖŒ>&•ÔÞ|“lþÛö‡m“mÜ–¶òÍÂ“CetVxÐ�Ä—*#U¼ãËðÐ¨–¥ŠÍLöêËº3o’Íò=‰ê˜Íððâ6xtÕ�
+[ÔJÚŸv½§í\/jÜäq–sE5¯§Âo]¦Œ—p¤5h+JôÔ–:×mÊokI�J(¦‡æ
+ÊºrDC†ô“ñÐU¶*	ùSHp£'b)ãù+¦ˆ¨*—âOê¯€§Qã¦(’«aAœŽ›©ÿÞj¶M¿Ç¸–W;£CÆÃ©&1Z�:²M¢qei#µ1_Ik><±·•|œ$zEVHØ�Ñö?ŸVJØ�-�—¿s0D@ÅGtáII–I\@x29Zõ§#öê
+*C^e3ÙèYib¶²gZYZ†<Œg˜/#y�vÝx�¡T—C÷*�ß·n@F{h¦*ßÑ¬|Þ�Ž¤ ñ�ÄŽ´×="Ô6Ê`bYo›’TÆÝ2"ÇuHç‘òñ§0îºóQWx!j¶ôCà,àÀÃŒhBämækŸ«ÛŒÊè !¦á@Z­‰ÕY.ŸBIAØWõ­å•D”‚´%ƒíû5us(’¯
+M¾nÂïœYÆáì×Ü¥m!2†rñòoá¶§�"¾Œ�—Y“<ÃØßáò9Û;˜¤‚ò'…^†Ž
+jGÝNºèqèÒ†eÉ¸¼mp{B|ôbÃ©Çož§Ô†›òÊóX˜ ãÎZ«×rh+á¢ÓÐ&Û‹$È™�@$5©%R”^Kå?Wàä�¬ o&>ôFÂ*DÍ3¸`T€¦.P»“ðÔ¼¥u	-ŒÊ%"`I`Ô´a8… y«½t•;‰Þ6cæô¢�Ö
+ÜÙž�ED4€ýb>‚~hp-§†ñãcæy]?*E<jŽH+¦¤Q%
+ ÂÉ¸?ª~íI64Äò3ú²ÔŒæ¥@Ûq]†œÉùaŽâÞY#çÍK
+JòPãËÈn+ÒºÏÈúYv=K Îö§Ó¸ÿ
+F+"2Ÿ«žªªÁ™>Ç_):ä×5µußB7¶ò1XÝ\dàˆ+•�¬Ô’Þ“J
+¡©êcVÛæ5ÈÍŸÇ+²[ç‡Çœ¯x‘¦\P»½lŒ3ÌžA‚EŒ†ÌX²½j5«‹j*¯%'�ûÛvÏ£-Ùì*Éim‰†\¦’5Ä·³«ñVpÄQ7åEû5ÕÇzÙBNbÍj(nFö×½µ5¢K{iy.FEå<±ÏDXÐÑPÆÅ@éøµ’Ù¨÷Ewwµ¦c7ï«hß0×VVÓEcÅZVçQVó¿£[0ºøé¢(¾ðVqW
+ôJŠ`'ªÄr!kæ |@ÕÈ­šµ‡yfsÒÃŒŸÓLV"/÷!ˆD¡¥<™Ú›—qÖºÁ÷BJzš1Xe¶ø,’Èf‘¥bÄ
+šíA¬oŸ~�?‰uCí×lÿj[ý'cª_;+ê5‰aì^ØŽ„XF~ÚŸÒuËÉÜIl~dKZZÅBQ@?—Tß%¯»‘ª¤IA-*,îc‡õÝW‘ø.ÝtbI½\"RË—ØµÌc²hòÄ°,>¥«¥]~˜UGò«
+v¦úèd½&¶r¼zÙ6 ‹ä]™�VbÇï5×?-ü®ßvM��¯øÇãY¿”k¥öö¼‘Fo¥›xÚ¿zr�*zi€ÅAã óÜ�‹Ãÿ¨Ziµç>òµFŒJT½5ÁlÒJXãñPXÇ�x3rêÌøø˜¤pnU}r¿½jõ@Ò×S*yG›íØ�­¬lDà¡¼Ÿ5c
+”¾…Ü·%¼ÛžÎ¾Õ>S¾³à«yZzT�‡ø~&âß'ŒÈß:úž�ýÔB ÑÎùš&©âßŽ2ÇåPuÖT¥u«·©Rvp´×b3mqi—½µ¹“Öž	¤ŽIwó²1·ß}ryñ»Dèåî?&¨Llg8ÔªDƒ¹ÎöÖ"'Ëã“(Z	ãŠÑÏ4±4i!;ÓƒCì×g€ìõèU‘¨×r¡ŽkR#i 
+“1á!4Z¿Zò+n™UdØì/°Ý÷ˆ¶ÆÞm{ºÆ$LFP‘WqÀ)´û…õ)²9ëÐèÇ•=-º,½gÜ¿A‚ûwîll#è�»KÏéžH6pkæ_Sq«µ}¿S<¯ô™?Û}¿ïÎ[%	f>‘K«tT2nT!�®«i½£õ-£_é
+b÷Üœ6MãŸ'så«§‚à+Q“b®¬7¦°ß6J8}«ã$D÷Ï¸ýçÜÚÞÜ+ÚQ%´Q¤Q¶õ«qÄu®®ãò�­*ËUº3éd‹‘$`€8�QSóøk£±�n)gh÷W(ˆ§›“°R›ütµ]á®ì
+}BÑgÆ~JhOÛ]4¤j)ÉÀð §N•èi Ð?�ê®=AÄ’»:øüôôŸbWøÊ;��Àßæ_T¶I±Ãä ¹Åc®­Hd’¸U@ ý„jtz.9[,ÅÒ^ÃV�‘­y—ñæ©§ËD=†Ò™!Yãô@NA�5¯Š�)ù)§ÐD÷mbÚüZ—¬ü…H#¦“aâ¢LOÜÛ)a÷ù¿»·†"¤ÔÕY·?/†°ó^ˆž2¼é@¹É–¤CM=Ì†æ@[`•Rêò`£Š±ÝW¦¶bãU©d]ÚdÅ„SÞöûÝ´Ld²•b¡?¨ÈÍÇãÕ6ûtÞ>�‡$YÍB«g–öwWK¤�ƒkåàœ/M[üzµ®å~eªÇ	žH!È[[NŒq"#ŠÑ�ï®˜îµ'1°þNà»»Éä¦î+ä‚þX-‘ÞáDmHÄ�]‡øV‚¿=tñY¤¤Ï’³°™ŸÐþ5ncB9•e*¶ýQZkErT§ÆËd5”`bW—øÕ¡BÅóZR •ßOÎ¯¨Õ_a0¸h½—)l#qÌ9u£Ôª“Ö�
+4y©Ü®Õ³yñ1†å–¶I¡‘Ã b¨Ä#DZœ‘”‚§ÇMdOr@H0Æo¥|”"BT™‚½OáOŽ’È»ƒ¥˜›/oIqôðß¯¬AWŽ¡¹R¥‡—¡ ßRwDk[uI±eC‘…Š2¸`ÞB’v;PuÔ]’£�†Ï.-ÃÊ™ž8Â,Ìe¨â*@ñð®¢²T’«kŒR©™o"xÁ	Ï—•O‚×ìÒù�Ð3ÍOa-œN“Å$’IˆFI¨Y*máãª3Y:2X«îØrñþå©â<5ÃêtRµä¶aÅVŒ>cc®FegÐøŽq/ÀK‰ÛâäWì×BŠ!z+î6œÖ%Rw\mÎ<Ûú±ÜÏ
+ÃÈ¬È„ôKQr®Þ:èáäVµ‡¡Ì½gT:ÄÝu¬p›{{ƒ i£å·Zuýú¥ò­$?�ýÓÝx»¸Ò[+E{i9o�×­C9'�£tÖœWÉeÑ~D/â#knä �#´¶
+ÄJ¤HÀmæÜüú
+U“6Z¨aLu4¦.ÒÏÛÆÞàY±ª[€¹K‰—“Ÿ@7ÕÛM(ß©e+!í®]‰QÚ…˜ôTLÐj(¸Y­`ÉÃ-Ëp‰yRR¼‚9BÊï^CkOõ®Dí°¬œh9¸¹’,\öWQÞJÓÇ$‰¸ð$`ÿª�ÛÇZòdŒvNÞS°£Ý(d�5Í@ÎÇÿýa�ð>¿_¼k«Àú‘V_¤Üõ®½B3ÀJšÓR†DR~Ý
+ŒÎ½Éÿï1WÜ-?´ÚóŸxú—à_ƒ©J—¦¸F²c!„¸ÅfíçÅÜñD†Úáe7Ã8õ¢G�-J•>r£¦ºÏ�ádêô…Ô‡Éºÿ Ê÷aÜV¶8û¸î.g’'ÇÜÁ*4�û¾L¤„uoÅ¿Ï¦£n;®TªæIQ¸ÕlLÛ³âî-®×!�šköekÑdÓFf.9Ç+l¾W¿ô€¦º.iª¶úlUE.ü¤©e…òeo y_,Ò¦$12†!ÍFÇÍ®&tÕÚoRÊ5]õK@2žM¨5eDe½Ë(»ÍÜÐ‚¤!»”ØškÐñ©ãDc»–1´–H™ÑMŠ
+þ}^FIþÖ½,ïlÇ¯™—Y9
+5.Åbßr£XV^˜¢FÀ‚<]EdiÌ�Êæ:k~ñµ‹‘‘bîHTG‹ÉH@*»-­Ã~×„R°ëerW-|m¿FVëÕ[ëÌmóCqCwk'žV…]´`~Íciã¾¡VšÐ{'v^É+;Û+3·7bõ%�Úºë/º×ª3ÿ]ìû§'k‘úØ¡Œp©ŽùjAù~z…¾çGÑ¡¬7ï¬þO»S³Ä–âÁx«–äÎÕå²¥6ðÔ-Ï«ÚI,:ÉV^ß¹ÿ®§Ê­ª_5¡ü@žÝœ�4¦¿Öþ}Ír„�™sJz€†§�©õR|¸Ä^ð=ïs†ÆÙâ‚0ÆIù2ßzSW1D—.7·É2ùØÝë6ròó+[ØßÏoÃ0Í%kéÈçuåACñÕøs«îFÜV«äˆÜïvw6.ö[KœL×1ä’´¤ô§�ü„uÔ2ò¨‚¢hžìÿzòvI�Þ2Ô$’%Ôm"�¬@,ÊCrâ<]T¹i½Ix&Eû½…ÊÍÝïœ–Þ8ì/ D¶ž2¤Ê†«'"‰âÛ®Žg¹(Ø…j‘E’¹…ˆ�|,
+9�íËñ<~#ç­8ùªº›mã{O»;~Ûil¶9Œlh7eT¾T©e—ˆ·˜ÑŽâº×�*º‡¹+R­ŒÃ'Ú¸Îàu–;˜Ú`V)B™P£TrŠ±üÇQ¾gWWáÔ¾Aï{³¥ºÞ(ˆ$xã­?i¨´Ô+ÉrOÛÙq;×-mÜ]Å—PÝÉg„�é‡YÕJ1ô™B…¥kR>ZØÛ�ÊjÔêˆ<·wä-³Ù¬=â|~VúÞpY*· ¥9tß‹ã¨^Î<�Q­šaò™½�Çl_8{;{”‰ÑjæäÅÅS™ƒË§iýG+°Ì÷Ord±¸»‰ŠÁˆ¶ž;w‹0”—«±¡4c·ÃJÖukÔ=¯ ÿ#ÝÙ\Çn‹Ùçÿ¶†H}4
+=+I!Tv§WpÌ½F¥äÕ¢Eí‰„)ÝýÓs‘ƒ¼‘ÝÝß[ÎþšR)$³»B€oÇ�MB¾NÍ~Cm@[ŽîîWqÙwD2®�î%e+XK\ ,
+¨=]µ›rÁÄì*™ÎäÀÜÞÚÆô‹-`-®’o81ÜH²�Õo']FŽÎ�¶Ï-„loï¬¯r½±�ì²íjo�*pd^,<*ÆºŠ•IL–’lÆfÓ˜í%4ÄIz×nxT³§D/OÀ
+5,­ÕOx"G©Þùx¡ÁØL°IkÛÍ;ÚVsÊz–õ9Þ:Y³<i@©TÞÅ¤û‡ž3-Á¶ÇR¼OÐÛ�¿Ø£Y™y,x©;¹J¸[Ãy-ÂžrM)”Ô¥�‹15ù�cËJÝù=ÎßîöÅOÅ­Ÿ¤¤x±,Ç¦çs¢§/.G{;=ØãÓ Ó’¶†™	Ì²ÍBDjZŸ`Õ´SÆg}É¼îk$®Yëðë¿ß®ÅT#e‡´{[¸oOñX‹r9ªQËmÁðøêÈ¼EçÒ?ŒæçÆbcÎÚ&·„ÚØš2™£Y¤%ˆoƒ³.ß
+syœ{4’Õ#e’cØM	b6?n¸Ö¬hvž®,µ¦£ù´µ#ÛñZÉ–….xún²"ó*ÔhÙc©o(ó‘¹Ö¾ªÊ�¶…š,mÈ¸HÖë×‰bä©Ì-êÐSðô¯†¶¼–­-å¿Mˆ:¦ýT“RGSSöë—2õ&ÐK?ÿ«pTëë�Ò5Ôà¿r)Ëô›x®ÿzdg÷iŒaðÔ˜ÌçÜrr1ÿ`Ÿ¥µæþñõ"ü2—(4¦¸F”+Ü0DÎà_­ô·èó•12LDß5UÙš«FŸ�«×AŽ1ïcÈZ½�?X³FmiB}NC‡]ºé`vWQ¹dNå«·6¹åŽÊÆKxnb‚ò)î˜Ú=ÓkvJV¼]>ÊÐë±ŽÏ]ú•V»Dúw*½Å5ûg2!Ä_}D¢ë�áõC�ôùr×+’­æü·8ñÐ®e3¸Üzrº�c4ü«±FúŽ,¾È’Ü ÷{Ïz¾Ž9žÞ0|ÒWÎÀý�5ÖãðU5¶¬Ï“,ìi¾Èv>#+i7væ²6fÃ÷¸ì´w`!¶'$�$b9HÁ<œE~:êaJ¨©ÕÚToÔÊ;ºßgÜWÖø›Ÿ­°ŠyÚõT¨–:ù[‹P�Bñ:ª}B`òPÙJZHË±Ø=FÀüµ›67e¹mZ4;I(jÔ0~Â6×!¨4¡è^Ÿ†«‘Ž#hGÛ¨«@"ëksmÞ¶ÑãrR$ÉÆäd<VéTQm®íþÄ‡ì:écÉ\Õñ·ÔEÖu_š)·ØÛ»¹m.âxnab’ÂâŒ¬:‚5�.+Qê4çaTLŠNôÇM=F
+ Þš Ìž:.‘øêrIìK5’DrH)R)¡^4,¦_×qÍ�¿ÓÝ}Le„•5zSSYZ„7™øªö5¼vKî6<FYÖß¸íÓŽ? Û	Àÿe'ô¾äzX²×%|,Qjoeú\ŸnäqWòZ]BÑÏQ�þ‘¬y°º=D™uìîåŠ[Û}Â†l<çŒr‘W·cÑÐü+«pg…é%jù~#NáöÃ1evVÖ#yhã•½Ì+ÉYCå­¥~.²µEu}:�rvFy&ÆýÛ6ªþ=»Ós¬»¸¬§ŽêkˆÝ’H¨â…O�ÃSX-¹%h4±‰·ïÌRÇ�„Ùw%º€/^2©2®Ô}ºÓ[]ÔYjBÊ5[ù=‘Ê-Â§ñ!SøLŒ¬~Tããªß	w+V}˜Ï1ÿY‹Û„ºŸ+f."Ä¨YÂ•�h*H­FÛSZ/l6[”˜ÚãØèdÒÞZÉq_Ry}RÐšÐp,Æ”é¦ð{|D“Þ=¯í5ôY»Ì…Ä¦Ý…dF¹‘½ŒR’OîÑ™ƒ¿/îÏ^‡MãÕ!/Üd=¤µKƒß¢[³ÃÆæh HL†Y#F¯¨h 6¦ØÕ®Ÿn„ü|tîW±�¤íoK$†ÆéÛ‹Ä•U˜5R#È§"}0M¡uT·.›ÇH-Øïe3M‚pÉòF¯%½­³—’;²8z2¨‹æ¤)ëE1µfû…«¤{—Ú\ÍŽÊ(Ö[¼‘©¾·†32Û#„	’)?¼`£jtûµKV®¶
+§èFZv¥–k¹-¬¯æþ
+¶°É¼ÔÉÀÛ‡‘µ«,A~Ó¬ø/+ã²�ºìÑÚ÷–Yt€Âët©ëLÕª:2�¯©*Ðút!õùU|i~cI7äOä{#mmk;˜$½y‡ª%xÌk%Òóôî¤
+¢8áý�‰¡ÖËâo�ÐU$Äð¾Ö\D­tr¸¸#”ð0\]Æ’ò³x•!º+ªî•âZP:U®’<›ÛûÐK.WU›`·ñmSÓztÖ[q—÷!»>Ìåöîì€‹áë^Ÿ_t¿Œ¿¹
+_fsö
+â×ŽWÊ
+9è€?ei¨¾/üª4ÛèÄdìkåj–-ˆ”¾†›ýþ—ñä…ò>Ïô+Ù|«vffÃÓüÆBUwknBæPùUÙ”ð2lÔR†µqøê®fH^újš1ûÆ†LŒÞ�ª™‰=H®¶=Ê[=ÿ=ÕŠíõ½{ûpa¹@�0J¸¹ ñ_Úû4­g^Œ�1ù2ï˜înÇ¸Îd¥Èc)f-ß†!ÁK1~N£pÌÛŽ>WyD6hTÑC*÷=—–ÇYG~SÔÄ:	#/F4V~5 WnšäæûjiÚ�BU²n:ˆ5�Ôz¬œíêÜÆCÄký5Ûî:åäâ^ŠZÐp‘¬�A$ù5‘2GŒ9¤^2–òÖ…Š©`ƒæÄqÖž&*ß"«Ø�›AÅ�¬¸›«‡ƒéo-ç�R…¨ÂBCÅÅ«æJWôë]è�/5ñuØ’Ühºç bvÛw^ÿñ~u×S‚½È§/Òn*6:õÏ r¦˜ºuë¡’3�qIþ8ƒá~–×›ûÆ·_�£RŸ%hi×Ã\4¢æ¶’Í}ocŒX ´¸†#�¿‹ÓdY–eó©!¤ä�ÔôÛmwÕ¶ª�Ñúú•ºÅŸ÷E{9p¸Üæ>ëÓŠL…¤PÉ“�H1µÒ±,¤Çå¯<¸xüõ“.E\•¶�­ÉÕnº—YîÙÅc.�”W<¦–&{–N0Åo ”,|?1y7‡Û«iž¯J­lÅäÒ×¡‘÷§¹·yL½üö
+m`¹¸–Uß””‘Ë[å_
+t–·•µfE•¥1RþþBÆ­âÎço½Žµ*ÆÅm‹<¶N¬ì³HŒ¬c�¨jTž»ôÔ¶—ÎÅÈöžk»­l3³¶	8hÃØ…
+®íUõNG�Uç¹vjÍJ%DÔ¤õe£Þlû¶°wØ¬Å­åÕÄ²†ÑýAèõBÄ³“óbueüZÓB>¯Ôc\ÔàO¿YØÍµæ�ñ°úÂ…T'ÅAØë“ÊIXÕFà°©Øk»oQ`E*v§ÇPŽll¤¹29¹‚Ò(EL÷/é¡jTF”Ìän=iÁ…Û`–µF­n½·šÀÄ½×-«f-ìå+•úŽ/$A´’>[šš©=E:ìªVÔ‹êFÕs(ÉYG¨B�G†¸wÄçA­‹°³Ù˜â–
+º\?§iõ2¬Fv}%;µ>=5§×Õè&à„¿Ç^coe³½‰ ¹…ŠIŠ#TæÂèá’V‘*5™¡
+çu�K± :±)³ÈC;ñZƒáÈR¿f¬¾'PMh¤IŽm¦’	VD<]H!†Äã]YKCÐ’fýÚãû»ksÜv±µÊ1‚ÖåØ#N­ µÚëá~u÷"»¨Ö¿Ÿ 'Úû—¶¹€Ãq’6#ïÒ¿ÇG
+®;½SD…Ÿ¸½‘cl¶ðO"ÃàR¤Ð|N�yZ"ÃfõhéýÝì¸T»ÜIÄ
+“Ã§çÔ—&¬OŽû¡’{åØrIéÇ<ÌÀV�9Õ–Ê’–GáõB‡ÞNÐð{“ýEþ}VùtÅøî}èí@|­{·Š,Cô“¥üÊöÇøá}Øí<¥×Ò­üÖ³íé¥ÓE±€#òÓWS2·@uôD~÷|â¡þ)‡¼õqE¸ME–ÚOØ’Švßfÿ6–GoéèÇf†§)ŠÍvDyŽæÈ\Í%²ú�m¥Š
+ÎÌTÂ°®å—ˆó:øÔm©VÓ]EtÑþßn¯ó‘62Û-
+ô`Î×�sI
+§Y^C²�_äÕ5ñoaíÖ!ßxØvYüvF+K„ZÝX\ÆÖò°/Pxú”ëJW®§šÉ)k@¬÷Þ{‰Ø×V–ö³OžH-"MdÐR®P)f§‹Tê—É«Ò	¤ú4¿"KšìÛŒ}Ö7w“õïIgÃÉy
+ÞNiÑ—veß�:‘«±ÇEzÿ¤V-óžØZÝ	â´Ì%Äu
+Æ[z© ©Ø¯]cy1ÖÛjKÅ÷&pýÁØÑZ`1Ø|¤÷HÏô3¬±âõi±!~]Ã jì9km"ÓÞIq%À$�Üv™I,UÙ –Î{6�fŒ�é¨óÐ~·‡M_šëÇU QtZ~E
+òÕJÈÏo›sÑ‹OnM‡áÖ;_fKÆÝÿa�æWÚ{e“2µ4 ÉmÓíã¥U�í_Ü‹V]Wè)mwí¤è%…2ìŒj¤ÉmÓçå:®öÄ´ñ¨{»¯Ðg·7w?NÒäìÒO,WRz"1ýi@%G�4Qán!�«.¤söýö
+ý­.À`ÀIo<g”sDß†HØuVŽ|ÓZ½™$äÉ{žyàÊÎáù³Q£+¸U¥(iðÖÞ7ÐŠ2nBã³_D.T˜˜€JšÃæu¨©ž•í_u0Øüdv�³ƒa,"�
+ÝôJfŽþrU¥!FfzôÛE³4Ò_™~,U‰''|CL~kú[.Á$$Ž-V]ê£aN�5f\ÑYz–ªjšÐ¸çç¶ï/O
+†Î¥†9!�Ž2Hý%™JòŒ‰yŠÓËµ>…«[V;†6ëÐ¡d;g»;JàÈV[t&žªù¡’ŸªÃäÃXíÆ¾=jå«+"
+L´’Ý“$i/Ä#^
+Æƒa÷k�Ê£¼¸†7QôD“Qùu‚JÛZ	æ(ÒU…™€Y�¸*þ"Þ|uf4Û‰óÅÄ³É’õ¥�”Ä¬³3µŽF½7®·Z´jÓváh-ga¤kQZ€5‚¨ŒdéÁS§Ô�öù—]>åY_µ›�Ûa÷ëÔ#4AÓSÑKTo¡�›û�ÿßÇþ¡?KkÍ}ßë_�§Ž´e=Á®šSHO©©+A=Ne$èòÔEo¼m&—r"²ÑÚŸ²¦§[x9Ê¤§2ö˜Ð¤R“ ©§Ï^ŒÄ8_]A�‚Æ€ŸÌ4¬áj	xÞÂËÝ÷4¶ŒïçÝÿ²5�':•ÛRÚál“¹ì �µœ­ïY÷5ø€5U9ýÑ'�ô#»�ö(¥®½Bä„‚Ãvë­Xy'B»Õ®¤-J7@'Ù­of.a½Ž)%-ù8±é^‡Y9S¬õ-Çg%ú9@$ýºäB4ùÕG–›öüÎ¢÷ÊîÞÊVG¸IÃFXzÐU¨¬†ŠTL.ãç®�gØ«3ìõ,�¿ß9,�¶3±½­¼|yÞÛÇ#úŽÅä*®€,Ô§ÃS¿.Õn	Ö©©z“±{¯ÜÈUš+(¼Elà˜Zê¿çä%ñ×°ýõ‡î¬Æã¸˜ØÛã•á¼¸³*9§.kÂ1R¦¢‡ókn,êÕ×q*Å½£øîNãî‹¼¥�&Úv‰=Jª…ï\îV_;
+RÂÒjT)Öe�¾ƒ�†RÎY"hÂ·"6
+*ká¶®ÃGå±5Õ€q˜ñ›™1K:ØDWé’åxÊCF¼Ééòé­\­á-Èãüd�‹sOÀuƒâ·bÀÍŽ¹ìÏÏRXíØ7$­»£�Š‹".æ ú~œl})!õPÛy–Uw=6#],9=‰4?n‡ÝÑÜÉÝYÛŒ•�»C	â=3ø¶P*ßn³òµ¶¼TMg~E87äÕ
+–ô#rÐN–ì·E}ªÛ~�YJº´'±	d¥oŠ+¡”©/QâENµg»jÅT«ê‹
+Z\‘P¦šÂèËvžÒzt �*Õˆ‹*ë3),k´ˆ]Áþ±]5¡C!däÝ°²=þ-2½ƒ*Å8†82xK—WPB£Žg‰4uz~Z­,NÍìõBœ½âá%,ìœj´›Îý:käîˆ¿úÜ¢{“�ï{lbb»ŽÖÕ>´s´{a�4L*ÌmùíCN$P×â4;Ù}Z¢.‰ý*ÚuïŒ#µûrßÐ·Á¢K’º½”EÂIT‡eY‘Œ0fÛò
+BÞõ›¯Ž»‘÷žØâáXÌý×��gþéäŽuVüJÅ@#çÓP·UjÂ-Û÷)öÑâ±�ÑüÒ	­ìov6ò²úG¬nÂ¡]”6ûÓSyN7+ð´úžàìÊ\ÿíØ[òeT2Æ’A#¼N$`v'cðÕÀ²û«ù¢V·ŽâçìL´]Á�²ág0JÉ4ÔŸÊ¼3VªÖ‡F,vÇiqˆy+.¤\<ÆgsÚ¶6bI2Ç(]æˆ¢É,7 9V›jüÍÞUz‚¼jçô´öË»¦e2ÛGkÍ%ÌóÀ±¤~.ÔrH^¦‚º£ø–êÐW:¶ŠB¸ð�¼Ùf‡÷ÖKkéÉu7UîoÞFH‹SfÞšº¾Ø…ÓK]ÆxÈÒÞ
+€
+“USP¤øW\ÌÎm©eVƒðÔ×ìÕBÁëïË¨û>^ß¹�.RF®>w¯«jICÕuØ©ÛÇ]%ÞÏTC$Dõ1Û¹å�ðhÑ¿ç®‚2±Þ’î9®Õ¾œ0€×Ìx“÷hºq &n—yŒD¤í¾Û€Ùöü%d”°{¹‡ûyú‘ýý_·\¬ü¹Ò¦¼tU^¬cAäæXƒSóüF­AóÕTç^¯]Q=÷$íñwò:¶:©dO, ð‘@«¨Çê­>uÉ�^À²$õ'±žá÷6ÚK–3[¸)%­Êò;FÜjuåßÕ¹/mJ“¬7—¢>~Š;\ÔW üšÊíVÝž„›&b¨@>[�q‘Xÿ=¥¾JÞkÈMÍª5e€upAwù�_Ç²®DÞ¨‹ØY¢’ÚÝ„˜Ö�$�ZOP‘Ä†àPN¾4ÖÌ¾Ôý�˜”w�“</341ú11ªÅÈ¿ðäw:Åf›m(¢w6�üRÿ¬ºèp_¸¯/ÒÍÌ
+÷øëÕ#0G/äÓ‘ÀÒ:–ÐÀÍ}Å§ø„ïZCòëÌ}áûÿ#N
+ŸâTœ:á³HÕÔrÔªJ§]&2(`A5Ô–â‚±{Ø½s9˜ÂÑÔÕ’6âµû<5¶¿pÊ”IKÃY$l08Ëgn‘œ€ó}í×U_5ïõ6IQ-‡@Gˆë¡K$MíüÂ8‹ÈÇˆc´j~.ý:èqøW»—¢q«#û�ÚnåÉäÅ®1`ÊÍo¼õ-&FFµ"­Å›�X|´®ºø¸ê�Å3>]uzÏv;3ü/“±·TXíîí!¹¶U‰G�K “Ï™jÔjü•ƒ<4ÚìSl½6ºˆJþœ}Køíök=¶Ð•w4¬}ì7«ÂüÓ§!ò×%pÍ©¦J)uO‰µ;ul.î-�¬Ìä>¬Â:¨Œ¹4?]oãÕº¨ ôê1±’Þyf’Þ4�9�Æ72) u«}º§‘¥¿"uzH=¡ÖQ´)�xÆñ£µ´çÄ¾šÚK$�Ë�ªµ(xÓÍCã®µhÚ’§e¿ÔÐ=µìË$Æ'sw%-0ÑqÂëé›–ð�ük×òjÃ
+ÚÛ.ËrRóÝËhî˜X`1Éj¦‘…Kñ
+‘M+sÜÂZ	ã¯YeG»ûñ3·VKuaib°—1›R-™Ù©³1>~›
+Jœ—“H+µRr¿ýÂwTx>ëú˜ìb–XÖD{k–Y‘j@4Œ¡�ò<zÀè“ßRþ¾òÊiL5ˆú¿óé=¢N•õ½åœÿ±;l=?óè|ûvi__Ô£d;�'œî[›¸à\|&&?î±Ä±‘ÃÌyr�ùkJTï¶¬­¾EäÜä½SˆÿrW±½É¿ÁY\ZMŽ‚viKz—(¾¨Ø¤ÆhWáªß!ãq¹*ªÙ"Ñÿ�2ÔWf	Ø·üú9�ã¯Y+=ñî}Öw–kŠµ
+ê£+G«-E'S¯*×ö‘²¥uÔ«Øw>Kž±¼—HqŽâÍV2BÒ¤«6ÿË©d³ª™Ø†;Q¸ÿ©¡/½E)ü"À¿ÝŸU>k-xëê%/¼wGÿôøâ+]à¯òé:Ý‡ãO_Ô¥]÷%ÖW/–È½¤6| f�b°gŽB¯¤Œ‡«xëEºòe6½Ÿõö?¸×˜<uÅ½¶6É–âVgimŠ¿@¼Hb
+<½©·*ÔpYFžº¿Ì°ËïRµL^4
+q#éÁ¨üº=“Ó×õ)ýÏÞÙlÆBÚu·‚ÇÑŒ£}£fŒ9V²<•¯È
+Y\¯/äU‘ÕtŸÜeÛýã”Åf%¹hm¯ùÅÀ-ç¡}�òãÄí¥l�Ð1Ù>‘û>ú÷w"ÊÆ3µw¸v‘Ìß½e§�üû¼4dæy¨CñKR»s—ÌÉ€Žk-­#;Ú'
+2ó/.@
+uÔ•t‰*W¤íû“‹Ø1åÃR5R \µ	>Éµ5Ç_Þ‹}ë£#{‡¶mñ©zù\VQVEO¥…å¸sÎ£��‘ãMôëÇKé²aåhÖWæ†7VV.à³Æ[>:ÚIëš)­"R TÈè«P|Ÿn§lO«�,�›oñ&·òyÏaÏ:ŸûâÐS}êºƒã¯ïD¼¯K#`²Çcr·¸é¦ÆÜÉ»ÉõpÇ=Ò9hùz~¢!^GðêuÂÓ‰PEä�Û_šÛë”ú‹˜o1öëzB	ÜÚ¶Ê¾oM×�õÖ{à�ì�•›Ù6LËÙÆ�LÎ$…^/›ÂƒmGø‹û‘$íý¬ÉûêòÖ;ÛŒrËóYHWêá`ð’[ÓoÖÕ‡Žè÷”W’ÒQÔž|”�CT†¿l(=Eì‹ö×·×–=Ì¶¯w«/ÓÜOœb0èRWy†„ƒ©Ó%v�ÉÓ™ƒÎ©Ü³'s=ë¼‹JK¢6ì€ùWá°Ö^G®Žµü‰y¿#LÃw> [Ü/©°ôŸÊÿ�ë…—
+éõ#Jºe†Ú£Ë]ÇWW^4¾˜âŒæ¬x|5e¹7j�NAkgš(v'ÆšÏ{·¸Hè
+j´"O·.íí3¶WW,e#0,4ÓÆ·�Ó}ÆÐ¶?!
+â²ö³ÉV¹I5Z²¤ –ù7ÛëMs¤¯?Ô‚ËQ’�aDØšwÿñKþ²ë§ÂÝ~%y>–nÆ”ý:õHÌþí0! ‚
+41™Ÿ¸†½Âßú¨ëù¼ÇÞþÅøplU¡¦¸LÒ4�ùµ)% ‡òiHI:œ†áÊí¤…K$%�# þì±ýªŸ–¶áÂš÷¨”«+y@§È
+�kÇVŸ´’P]0á…=Ô2]Øæ1ª·V7ÒîA$
+(*
+(uØÃ‰µ/r«Ý/TÿT0Í÷�fA”=�Î;'e¥õ†f
+2¹#pKÿx|ÄŠWa©_"j+¸šs«”T»óØŽéxòY±}Cé-b¾¹¸F&6Ž^Fªîy¹âµ&”Õ”ÇíM¹f·sª1N!© Ómºj¶�´¯$
+ùr§Ìk.’¤¿
+º¸¤¬zå4^Î±¼´†îq>Fk>]vé.Üv£I©Öþ=’¢3ß¶º	XÊ³K3ýD—*X~öXÖ#°èí¬ü·6PYŽ®ªæ¨¦àôÖt‹DEhæö×* ½³	äŽ¨Jãök«WeU¢)xS×É/È”Ë—Èâ¬m.¦�ÚÙÇéZ[ÈÜŒq×`NÕ?3¬9ó6ã¢.˜Cv's¬¾RÂF­*­ä%®Øn9É�k·�é­¼k$ÙVZ;l+,RfZHr)�,ÌÍ*ÚˆÁývj“¹øêîM“®„qRÉË_¹!#®sL½Š˜›ùôx±"±·7ózø˜îÙÔñ™�•ºPt?«®�íU"»Ò»¶ÐLtF# [u¶Œ¿–5$ƒñmþ:ÍÉ´Ø�j’ÑÈñêWY‡uù¢¥ak€V%vŽ¾¥w¦´à´X�’kqå·L�´pâ^ÍÂ«4ž³µ(<Ä­H¡ð®¶r,ü•ÖµÝ6É%5ûi®REª;7é§1œ&Ú8/\eÌ�]®`¼’0°<¸M×jk©†íÕlSjV~¯Ø68i"†bÁfs$€Úc×X3Úm(²ªœìuY!¢Ã$¹m!¸'£LªåEw
+ËR5³�hÐ…Õ7´€¶“æÞì¢ŽV>š%¼j™›Ê‡€�Ý«3¦áz…UÓ±bŸÛÞõ²œómÄ¨†AR|9·Û¨.Dæù§ÔŽ¼íëµ„cW¶î†TÉét–A7"ˆ<«ã­~ù‚4þâJoûÕQU°wÁ”G¡!¦ßf²'bÏ’½Èl¾3'‰½Ž,…µí¤ÊCzqÖ	¨G”ù…x�J”¶7î@ÒºÝ²—òßB–ã(ª(ÜogõR�hÄŠšžk/ �1CÑ¦/eey{u¥¤M=Ììc™˜ô
+f¥œ"Öàwa1>.êòöîTNS
+Ÿ÷	#.ñÖŸ‰f¦ß
+mñðöÂe6Å.eV{¢"ÖEiætúŽÝnŸœ•‡†±òØ�k
+7#,Ég3Â¼å
+Æ5I¦Ú«÷jI³'¾w2��Í\ø“®åL¯r[³ûjlÖJh]$æÃ’’€(Zœ©R†¦™' =×»ö»¶ûøUªEqÜqzVþµ½V2
+òjº_)ñ®”Ñ¸iJÔ¾¸íZË{žlº†ß#tËlËò¬HZ½jvé©¥äá7;¼~FÅÕˆ%jJÈ‡�ØÓ¨é¥|mn´“8op³øÒ¥ú˜GXæó}Áº�`ËÁÇGè\²³Sí.ï²ÏÀLcÒ¸@�“]¾ ë‰ÉãÛ‡ªî_[«ˆÆ²²bÀi&)%»VêÂÏ¸lno€6‘Ê¥…@S·">U®¯ãdUºo¸=T7m‰L]æ66�žÖÕ$åëêwh¤µ`z|>Zêå¾?VSÑþ³ ¼}ÒVWa®*¬†™ì>iþ²ë©ÂÖÅY~–nÆ¾5ê–Ú™ºËzx|tÂFjGO6Ì½Â?ÿ"”Qþ�y�»ÿôü�86üÊ¬‡ÊuÃÐÔ fìIn¤‰ ÿn£ŠøïðÔ›ƒéšu¦ÚKq	bžÁg·–ì· Ž¦~/é�Ÿ�|uÞÆª¡±©c»ŒÍ­›È¶1‚+û¹˜ôcò:¾ùëWík;�—Y,¤ÆfŒ¿)Ô#¸ýšÖ‡ïÔðòügËfW“qyžú;YF�#ñü*”4 Õuû…&Âñ*}ÅwM¬W7Ûý'¶9PŠj‰4ãòÕ˜ùÔ¶î
+²ù(1w(Fd­8Ò¤ŸÃZºI˜°Ø-–"EI™ŒÎ¼™ˆ†ß=eËW}k±}Žåƒ•¶»‰½"y)ÝNÇ\ü˜�th¹Y4.™˜±Ù{9&ŒËlü…Â(óP©¦ççC­Lh«.£ŒCÍpµaWc¹5Ö|Õ÷WcYì~Æ±
+Ü}ËX0vã’Fvk†ªž<~:ÑƒKÊÛ
+·0·)ä{‰}˜ÌÜÆ`Žxµô±P
+
+ÙÔ~×”Š|õ­YYIMâtÝ¸÷•í¡’AÅÝAeù‘®6ZEš.Zê;'mTª1Ö.ÊÖ{²×«#ZÃ²˜âwxãfH×ý'ko•’},·vN¶»£yw*áÆê(’íÇ$q2o	5ˆ(X|+ð×BØª×¸¯kmK¼^×öZ²…î˜q¯D©ùþ=Uü|]Ë#'ö²V×ÚþÎn<rk-Ev)¿çÔ—r>õÐC3Ù6–˜Øl0Qß=ôª'Éš; ©GM”q¨?núÓLIWÚFÛÅ”�p}¾ÿäÏÑ£œl»Û3Dmºý®w/®«aÑÊ)�m!$©Ö%FË”†â+i‡¶ß««qÓÜ¤�´I•¾Ée£šXÑ·Š)h#Tx½7ùëW!+Vz¢ªnIªÐWå®k©l(d<ToáMN•Ô5dß-Ú’Çî)y„WKz, 1*=1¸FSÄïZë©‹Š‡»*vMÏbï/´Yûâ·Ø»Xíín!Žâ;'S,LèÃæó/P¼¼5ð•œ¦KäôeþÆæÊâK{˜Ú)¢%d�ÅHê:çäÆèá“Ð{ÛØáwNé!73cí}x`
+Är2¤eÍb#W/AðßmkáãMëº#}‹ÌÙ„íh{½ñigÝ™[™áK–%‚«ïp‘5B¿›Ó
+oÉeZùF¥t^_�B“¸óåK�Ñ$–?¾“¯Ç®¹?=Û™/Ve¯�ÅMßxÞÞ¸Žâú±›ñpßP.§¶RÓ¤ˆkÁ7|7×^«EÔ¡¸sÔ…Î\÷V#+u�¹¾¼I`‘“Ï,€²ƒån¾+¾¹Ü�:Ú'B÷fIÚ÷L9œ$¸žà³lœöËuŒ»õ}9”B†W�¤£W	Aã«xùü½–Ô¯$=VŒkiaaÝ}§y‘µ³ôó–—¶–�G	b'Yáéª‚Á�¾Ûîk­91+×oÀX«€9[‹NÎµ|N6E“¹¤R™l’‹uaF¶·oÚð‘ÇØ5SuÄ¡}E‹»ü†ØÛ/¢í›\Í®5²7WwSAqsFeµ„(�bÓ™ãð]µ>>5jÎìªí7¨—¹½ Ý�~Ò¬SŒ;¤F¹V¡¥xÃI )Ë�vÕ\ž.³U¹*ZQœ¯xØóÉ­M
+Ž©|+D¡|ˆ°�o0YÍ¿îXKØ¯ †˜L®îH>>A«øÙš£vþ’91ÎÅ^Ì¹žYe™…²<�¸Ç»ý
+ºYyõþ�H×%ó}�mš†y¤ƒé×Œa(VŸ5:Á‹”ñÏRëÒJ¦WÛ½¹2X°¹Aº…<\}Çù5»Ü(þ­
+^6ŠÌë—ÆÌÑNŽ„Ò@AÖÚÝ=™SBS]Û\DÜãã95åáùµ),þÔEpÝÊ:úkz§Â‡§ç×3î­|_š-Çõ„c¦¼ù¤ZŸ“IŒ	*F˜& yjS ØätÔªˆ@ÖcÇ5…oþ-?Jë£ÂÝdúYº“Z€w×¬[º_É¦US_·ÃC˜û‚þG'ÄGÿ›¯1÷þŸ‘§Ð«=huÃnM+ÔhTWç§$à1®ÚA…Q¹ÐÄŽß)€ËŽV‘�§-ÊøWZ±rZPÅ-
+Ggn‘(áYV¥ä$�jvòøSV¾n‰%L3Ç¬öÈÞà7’!¾ÚI‰¡œñ
+[[esËÙÏs•³µ‚wž7µž„©0£,ƒÄxýÚêp²ÙÚ$§"ª[{esw%xHÇÍ¹ºÓ]h3m.ž)¢’á! ]¾ÿ–¡–©¢TnK¤_Mvâ"É+Š»W\¸u4Âf³í×bc“ýÉÜ-ô¸;máˆùZå×~	_Õð'ÇZ1âÓÊûì·ï~ü»î;¥UQoŽ€pµ³M‘l6é¬¼žG“ô&´PŠdÖ�ÎG«¿Éy
+Ðüµš¹í]™T(±ñ5[°Ð0æì±W	-Æ=29¤PÎX@râ2ŽÍOÂ¡€øëg³–+]-ÍK·{ÛµpÝ¯vÏ-³Y#<V±‚^ý
+FÒBd«…bÝ*w®úÝ“%q©KPI[Fô3û¼¾Fì*Opï
+;IU¢+=9£jšu×3&wmÙ=´Aí.e3FœÈBÔŸ‰¦ŒvÔ•loxHûVúúïµW$WV1–íÅ¨BúŠzù«PuÜ­QV»KÉ?ÈËÇx÷m_Þãì/
+D³2²ìÀ²ž<…kMs­™ÓDË]§u%«µýÅÇäíÝg×¶�“Ó
+²7Î›ý‡SÃË[[b6¢z­1‡¶¶p]f,ã|¢Ù„Y`üJ¦ŠÄ
+|5¯1ÛZ•:Ù=tgý·í¬Ý¥½ý·Q�”p�EG–¢‡QÉ†¶×`«iµ¹YƒÙŒ°#5hV¼xïO‡›U¯{÷k
+sìþ@ižµFrb¡~ÿ>Ÿñ1÷åÙ•ÞÒ1ã»êßÚî8f#ø´Å‹ùoY°��²-:~]]�¬4´*w^¥3)Ü¹»ì¼ùodk©$äeSMÐ�œ~GMs3f·›/iv³ÈÞÛL'IœH�~Fµ­k_·U|Ö]Iù´<÷'Ü)ó¶–RKay8§=ôu
+2ìšôÛã­tºÍ¶ýÊ¬ÕvûsÞé†²¿º~®y�£aw ýÜ10e‘Âö�8×ÃóÙçL[jÈ×Ý¸\–[)“•eÈ]Iu"€ˆdbÜTtá¬93Zû²kh7á­ 4^Ýí+f‘°ÝÅ%¯sÍl_è8RØò7¡ë~:ñ µ6¯Ç]¬|xªMîU-9Óþ¥–ñp9;E‡¹¯°¹<¥šzI|·²ÀåAü2pŒó*|u(¬xÝ§�,õI¯ÐmüÛ`á‚â(\¥È!‡�÷Z+\K°*Yÿwì9¼—¸ø¢Àå0Ø»ÑÆ—¯5ÃÄ’x!
+TvñÅMYl•�qµµ[ý
+V+Û++ÌŒQIŸ³¾I	õ-ñŽg»?Du@@êÆ½+×YW­ëikÄµ�ýˆ.æ»Ëû}�ÉbqÙ—Ž]9ÏqçÄNJ+ç^[�W’®–Š°Z­V…¸ûû+&2÷×�wg‘dšT™‹ð™Ic"ƒÒCû]i­<wm|Šò\©c°Ù,™hñ¶ò]\ i8Áfà “Eš
+õ¡U·¡žÖKrÛÙÍœ†Òï¶Ù€ÆÜº\Ï-XK
+B•n«ø·:ÅÍ~4~¦Œ6Ö\qTW\9.H{CUÚÒI¡ÀˆS§MBDÄo1VW±® I�þ«€të–ÕÕ8¢e^óÚŽÜ¹—Ô�Õ·¯TB
+ýÜ…u²ŸrÈ–°ÊÞÐ±v÷kâð–æ(éÏy$mÝ©ñ:ÇŸ=²9³'JA8ƒÃTb¤±ØŽºÇX‹ïò––RÉéGq*DòmåÔ®ûjìVºOI!k4´¤øÔÈKnØ¥(_ÒUõ% 
+M·§?µzøkcµü|ð«JdO+d–9K»8ßÔKyž%sÔ…jiªy8•2:­�?R"ël¦ ÿñiúFµp·+É³7j€´øîuêÑ™©­<>:˜	)'`?.¢É3-ïóÿò9¾Iú£^[îïÿoähÁ·æUäñãA¥ÉÔ‰¡BvÕ{±HU�Hbê6€Žã_
+q0ÐÇùÆ¦¬"Óù54à‹OJMn(3îûÎú3G`ˆ’!§­ƒ½|Ž»oÅ§‘›5ºþÑ_o/½žÉG•¸gìfiq¶±ÊÉ(âª+Q4'ñ94+®Ç�Uu)xçTfcrpçžÚXVEÄò#*´dUXr©5„šØ’Âß-žB+¶hHÑ‘PÔÜ)*Þ?-Wj&‰Òþ.MS/î.o»Œw—Ô‚8ÛØÅå‚]‚Æ¿v¹œœ–n5Ñ¨Ðb’7!]`²©¨®«Ö@1Ýt€B;«Ì„QÛÃ$†7Gò*žDñää×C†£ÜŠï
+C€îBiÁ86Ñ¤P	Ô%"ZñUPhùxï×K™>SÜš´®Ÿ�íu‰Œ	$ôÐ¿^ šo§PEŠÓ¼{ XG}
+Ýò\EÒEµDI`´&¥Añ®»#ñ‚¿8´ÍJìws\ŸZZó3rÜÔõ®¹wz–·:Ž’FmAØ‚–wù¡v`°v�&P—&ôT©`hßQ]oâÚ5­ž[»û¢úá`ÉÜ™á	Y
+
+º(—G+#pÉS&šø2Šÿxß”ë¸y1ï§eó;SíÑò1y1¥ÎK¼¯ð±Ã3úV­û‚d„<—ˆ¡¯=zWá®¶;5XoB¦ëå>D}‡¬Ñ:zr‚UÐ@ Ó¨×3&–h³ÊGœv4ÕBŽÞK›ám¼ò±‹Âˆf¨ó3l5·ˆœùv!u*Ho¥í¥Ô–÷Í�X‹²³
+
+xê<šø¹C«í¨ô�€ÖY&‚Lþš=i¿MöÔé¾‚lžµïÞàŽxóñØr¿Xþš;ß¥jÔGéó©z¾žÜµÚ¯"Ê±Ø®Õ›NŸ©_·rè$$ž^múï®FK7fÞäôbi¹Õhi	3m©"P$.¥‚Txå0È
+UÔ• üˆßVU„”ìîLÜ%ùºu•ú~nj|ü_Šy9­jH Ç]n=Næl—oBµ{a4ªÌA=IV*w4qU$xÓZ ¥9.žÖ5ö?¹1¹„‘í£·¸Fyã#�Œ7œq¯FSUäËZnJ´lÚ½äí|Ž^ö$2æâ7W6ÑŽ%M	ˆýU“–ÿ=WÉãÛ2Mt/Â¡k	LÑÔ¯0>\ÕñpËÚ%`Ž�užìªtÔ˜pƒQ‘	¾†ÆWH…ñÒ€a¸èãk
+ÖFÖÚi}¦•#’sJ"±¶ûm«pÕZÉ=í õTæ¾9¸Åâ·!+	Œ•_(<‚éóÖçZùOžÂ´ö\­¸º”[»Knˆ¤qFe®Ä�Ž²ä�7PKêFßÔ_âOÂí?HÖîåy6fëÆ W®½Z2�ÀRš�"ïRwýV–wùâ[€:Oõ¼·Ý¿úplVÇ\n¦‘¡Œƒ¦É°äm]$‚BÆ-c¨ÛPß=@tÐ!7éMKA
+¥"ššOïì‡·€†¾q°ý€|OÏá®—ˆò?'ô•dÉ}.¯&y\ó-æv&»üõè`ÈÙ Ù¥ƒé½ÕZÙ«Ä€A¡ó+~ÒŸ†›ÔF“ÜÞëã3=‹ü:Ë®NüÇüFî¡Êz#€úu¡1U«|”SV[#h<w¬Õ¢ìG_»U3e“ºã¥#¯¥æ	Z�¸j«à­–ÄÖF‹†#2·±î8Ì›:ÿ.¹9°º?CU,™=Õ@ÖG¸Þâ¥¶:Š®¢�­¶V<gqZ^Hö¦8$k{¹¤�‹t1 n@ø×]>tŸR»Ú6A1�ÎNeK¨'eTy¤TRNïÌÕ�2ŠW¨Rí¢Mþ]`j é#4¥…^£‚1nâÆW½¶òRi¿P¯Ë]Šã•ÔÎò>ß²c(öÑ2�À¨£-H?1]õÌ½ZlÑ2‰?A¨v:­ ‘‹úåíÞr(ªIŒÀóò«O!u»‡Måe»¨…Š!¾˜¡­@4<ó&º9”Õ8+;nKÚ�5Ïh°Fe`:WNBCIg} º·XíÈ2«GvÌœäâ9<7&›k±‹µ8fke²p¶ü‡Xh¿Ü"ãæQ_7•óÕ;�¿\ÜÕ‹¿Ä¾®RcãP×U@×r¤7¶Ï,ðÁ4c<’Æ(‹ñ7Û­|M[D/v¶"Ú&zà[\$ÑiH¥R5Wœ’©à5g7%©evpÇÇp5�"äeýÓoCC¸ÓªÔLN)/ßï-ÑúŸP�ïÓ‡§Àù¼‹ø¹~­5ÖX”ngy?ãû	Ú°úxÈ5òƒ^¾æYj^ƒ3×J	@…Ìë/+U³S®Ú•¸Ê.s-3È$v"V ‰H!Tþ×Àë±‡ª3_#ev[™¥“œ‡—ÌõßZ‚©/=�Ü6‹o7ngñm’ÀäJD`%Í¼Ê<³ÛÊFÔTùOˆÓùV5/aª¦Í³¶1~Üdì†…ºŽöXqÒÇ!k›ƒ)¬“Î@ ��hvÕu½3¦£Ú‹þ?)Ž»ÏÛ¾ãík¥ÈX³åq¬
+3IŠ0<¢O³õi·åÕ�ê¦�:ÖêÊåBu‚Õ–Úky#¿yI³’7^@Pî®§m¶¦¹?páÚ]×RÊººúŽcJu×é¢"êºƒôø
+D@…ÛH!¦€[ƒC¤€
+8ƒœMŠ_e¬¬¤ü3ÇïO+¸°êü4ò²]ØYÂp;ÉIr­qoü*+hQØ	®ªoÞ6ÿ
+õ·‘æ¦ªº~…;ëøŒ…6ëñÖ!ŽKk¼a>qþ�t8ewúY¼)øõ×¬[QÔ?~œŽ€ƒ¡ŒÊûì×¸îvéÀÍòßuÿèjÁô•Æ4:ã3BJçìßR$	5QóÔS£ &H]w‰¾?›@�~�:±‰¾šÔEW½;�p¶@GCy0>�=
+¹Ÿä×C…Åùm¯ÒŠrßÄÇ.'¹½¹yœ™$v«1Üšø�zZÕUB1¶(×8¾ž§ñ°Ó‘A`íÎÎ{´ú‹àVÝ…Q:3|þZÃÈæ*¸®åôÅ:²ËcÛVäeŒz…÷/%	û5’ü›_Ð¶¸’C;.Ú·¿îû(¯\C�½œG%Àü+µ(iÐ×]n<ø©F{ÑÎ„_sá3·˜—‘´–ÂæfKi—‹'bŠšué«­_Tœ…Äef†9dzÒ°#¥>Í—¾åµ¼n;¨ÄnxÌ£qñ®V|.�Ð¾¶’v#Í©]Î³¥©=Ë‡rö©ík>ÜÉØÝFùª,ÒEs´hMa	ëø¨A×S5Z(z²«R²ü”¤³ñ½›p·÷^^h²!� ¶ˆza‰~&¤Ÿ
+7ñ½/º§Z¨-cìú¾Ù{Æ¢
+©¨µ‚Ix_Ðqq‰öoÒÊÝ
+Šì7ÿûzm`ÇC7Ì_bí/ï¬;~öŒLmžYùÐì*T’6Ô¬ô•0TñÕ8jYÄá½žÆN^íå  PXõØ&Ú‡þ—¾åßÒ�2â=£�÷ö"›ù�ÔÓ¾<„wµ{JîÖY»NúñïíŠ3*
+Ä—âv*´§Û÷jêS“U©jýI1|wcvæ:É'ï»¸²–*ŸíÄªµIë×Eé�/xª¥{`{'Ú*þ¡7ÞýÎ×¹5Žþ„uæ+Ùðµl¥Ðß~+_úÀô(Í>Ï%ô½±�ž\iXþ©&@$Œ³Ð€h9š±º½k±U]Ò–h8¬7³écÅò×3Èwy¥ò¹cÔÐ&‡lV5Žý $ØŸg½F)uJTQvü¼5¸âxíèR»Ò.Á²Å½ßoå®×'‚¢â1Éó
+ñªŸè«Ä´¬È,}m
+ý´¸\¦Zâã¼s· ÆWÐŽÒ%trË»³xSm¸è¿†×’)'ô¥RÎø¿i©Q˜ÈËþ¡Ú„`õ'ánõŸíG®o Tì[-iMúéxàõ…£zþæz.ç†ÞòÚu—ÓÅ(ô®µ+4­‡†¯vpÚ~Ò·Lsäºv¶ÛYRÆ;Ü­É¼(¦ky"ö†jWÒ3l‘òÛ•:j4X›S¹?GOú‘~æ'jbs/üUk5…xã�Í\óŠ)ãQµ£ÉÇWd¨5)je9å½v›€å
+SÊ ž"§ç«±qRÜ¦ÙJòÝ<¬WˆQ!«ŸÖ'ºÖŠYuÖdÛ±cîµŒÅjÓ‹hËRBNí×j—ËV:{[í¨”·Î*† 2	&EÍEwÜŸË¯9šîÍ¾æÚÖgíŒ–S
+}s&4	[%ÒÍ±CF#tj¨Söí­œ.o‹Udü´ü
+'µ=×’¯nf†ÞÀ}£l=XØVØUÏ*“ðêy¯’Âøü’]gQŸwö—q]ÚEž†ý²öRÒs"*©†OàžñÓäÒÙÕíÐ(ÒpÔ2.÷)gœ¶ú©Áœ„Rñ@
+·*÷£þÔ~°ýa¸ß\~N5–³ýuýË-XDR�iMþá2P
+Šj-ˆ0$`�¨ 
+M10œˆ_l÷9+Kt
+Êi£AÄño3å>Wb^ä�¸Zd±¼lÄrGr‰c’,ow#rôäTàõ5¯Û®´ÕÚÕkdúöZîW<ŒìQx!>U'•ÚuÊq:!1†XS|EÔzßÃÑ•_fnéB �¶£^±lfAª~ý9’lkOË ¯¾É^ã»oTÿPkËýÓL†¬§'ã®+4�d5=+©-	 H¡ ðÒ`ƒªžºƒ`*‚ƒQ`Cbü¶Ò[ƒãS2÷WrïozŠZ›ú¬�þÚë»öœª^æ<õÔÏ}gQ8žŒ~:ì”—>Ðì†�%þA(ŸŠXnßÒaðùk•ÌæÇ¶Ÿ›/ÇŠueïéÔP@:}šæ¦ibñ¶w™(#¾�C�.«s!`„©ýU'Äþmu8a«[b-é¡;Ûaý|£vñ‡�äm-f•½EXiÈÆärVåÅÔÒ¤V›k³m=Å—¤¹E/¸ûW¹;³+�È_]´¯“cmJò_Ý�HyC³Ÿ _ãá¬Ø|ÚnÛå~è[”ÎíÁÙöïp\bí20eE¯kûR}&”P·úÀtÕ­A^½E°$—Bñÿu"®äÑI¦±òõ¬ue¸´r\bÉÛA$|åZIFZíó§Ms«†ÛÁ©Y#^ï¾ÛÉw×döÝïm“|,mÒÚæ8MeŠT¦ükò×_fª:em7ê3ìïg2Wû›|¡|vqhövó­xÀ<Ï*þ.Z…øÉ½w"­¤­Š®[wŒ¼’ÖårÄÅ]¡k“—«†ZFK3x›ê´nßqÕd!¸³2¿‡˜×¦·_:uÐ®´rYm™Â‚6×>ÏRáÛO/@vÑ#’ßØ¹\t–YFúLbdZŽõ7@ÐòòHüX7åßÄÎ«)õmi¹?î‡sâ§Çãp˜û³~lf¼&¡��_¼õi$/¥½Ùœ›ã®c`Æ·.Ì¤x�J–	 ¤Á´—ò^ÏÝÈÌíÔ¹,iÖ”?#­Ë�¼bZ�ë$äÁ(	Û¦±ZÄ¶ìÆ»è‘L‘Û)ï,Þß‹0"Ÿv:»E[K!dÚ$½°ìKÌ¥Õí¤¹ŽøÂÒX[°¢Í*‘û Õ¢ùkMm³®g2M)ÈØ]Ù\ImsE<GŒ‘¸!•‡�X¯ŠÔ´2Õa„œ©¿C¤ªä$RnÔî+ŽÝ7ñÞÃkˆ¹•ä¹v�}C%°c�7!Zýn[k±‚•t*·—B³qÜ–vŸ¹�—�HW�Fê|kökñìÉù¤fxîðïqlK<Up)SÒ‡mK�5¼XWsR‹fP�•�ðZšŠ}§]334h=—Î[â¬s·3[µ¾I9á¬âVâîB*‘¤HýºšªkrOxÐ™Îû“•ìþÞºìÌ•ˆ™íž)ìc‘ÖX­®iÌ‚4”Q÷B|­¾ªÃòR|ËìêÒƒ0ì{«©û…\ÜÌœ‹«ú•ßˆý:ÇÏKãÛþÃÆÛ±¯Û-@×ÈÐLâ;vÓ(Ó[¤Þ†MèÖjä¥qÖ&cø]¿Pô®Ç®·ñ²«¯8ìM8Ôµö_¸×½·êc/ /9Y­ÞªÈÃfëÐüF·cÏàümÐ�ñÖÈ«w‹b¿ˆËs‹‘šÒFæ�Ç^[ñ?fªæº»yW¨&úˆX?©n„ï^‡^2‹4Šì‡ª6ùê±&š‹šÁ¦ÚÂé´6
+³+RCPÃb¤‚G—Œ�Â:M9e–ž®ÀãÓ™ûÎ´[‘{(lŽƒeøxj´
+Œ3;#ðºŒë¡ÄúŠï³7hÏîÁùÑ¯Y]Œ¨êP1¼d£IŒÈûéÏø–óý%ëþ€×—û¢œŒÓƒb´KE“µ¹?eòÚ]"™$…•§&
+ýú¹àºÕ óAiBzRëÜ’a×â6®©mE4 $]$
+o£Ð‘¦)Ü[E<M¨²FÛ20¨?—V+4ô"Òj�¥€†oZ+4
+êA �$�j|¼–PìÈ¬U˜€)ªS$7�¡|íÓ[°âoRH}ˆ†’G¼Æ[dcŒr“×•â�)ßÉÅÔx
+v¸Ñ>õ"ºmJŸÈO»r7í<³�’\eº¤–p»Õ’92¨ñ%U©ökVJ¶á?i_›z¿¨‰†žVæ,œïô÷sGÓ³�Øš!sð«u‡Ë^Œ<elWóþÜÉ�Ï^ZÜ2Âm®]Ù	u‚Šíæe 'zk&^W‹ˆÔÏ\s¨Û5kkm��Ý©>N;
+�÷ûµ-ÝîÛ%‘B„B-ãŠx¢—æ±‚@V?²Ä�nÐ ·a=Íî±E‘šÜ¯¨¨Ü—aºñÔnŸBüyš4Ÿz3y+<:AŸQˆFi/#c$ŽKS›xŽš«%.Ö�Vz+Orù˜ïtñ†x8Y÷E’~ò"8­ÊR �Ãü¶Ô-U‘Cú‚Õ�u~Ÿö3kÞÜËZ¼©-´±˜‰W,Œ#âi¬98ö]¡èqcÈoóÖk¼`
+UmÀSb5	�ã±û5$À0jøéàòë¤�	HÕ­u$9â(?Nœ‹ÐR3¨¶„í¤!6RLi{-œéq˜å‰ƒ#¯PA¨#VVÍj4Ë•ÿºl‚E.g·mr9P’Ý³¼fN= ­5Ñ¯2VªEá_R¹–÷W±íâ*½›e,¦£‡ÔN)OC­Xí:Â#eEÖÅ»ó.öÆãjrsJM½à’hý0âC•ä
+ÓuñÔV­+b?*ˆÔ¡4ÒLí"33ÈK»±«–=~uÖ£8÷·r¿C’V™�ÓH8H>Þ�C¬Üœ^UÓtO¡švGÚì%×fEÜ–÷ov÷ÆÒH)ˆ¡‡ÔWÁ«÷j¬|†±y=Zdí‹R·—Çfñ˜xÎ"æA-¯ï9+’¿´„->Z«!ZþïÈ“N«C<k»‰Ý¡ºrd‘‰wsÈÕºõøë§-™ØÜì.E~2)äŒ:Š´­DÔ1¦lÝ“Ü�æl±î è?Ö#¯7ÉÀñÚ?§¡®–•ê[á'jen	LÉ‰ï]g‘¹\P)�þ&§NGÄüÎµ.K´yt$­‘m�½¸”,¬Ö5ó°
+å%¶¬~dÔ,Qª(¢¨ Àõ .”„†m&
+4€í@Ë©9IˆÔ¹ø_Ñ«i�ÛD&Ð´¶ð…i u9)é«íÆºÝ	Y15:ª�Î%§Êæ?åÖþ&ä-³7x¨cOôGè×«[#2¢”Ô  j	Òc2nî„Ýw�Å¸4õ$U¯Àp×žæãóÍømíKv‚ßej×·”0¥¿‰™�AóÖÊ`Ix¤%îrÁÈöv0{ÔŠ‘·k{yäYhƒ7îÉûµñ›Ü_%f5ÿ^„Ö/s—Ók{ˆ‰[ˆ\nIøƒ(Ø0ùluËåñ%JÑ–ÒðF®Ô×õÔÐ(:ji@� ŸB 
+4-È„aâ6øjHÊ‚wüú”ˆoså‰�äý¿
+NÐ9&mñFéÒÝÕÈ´fWiÈ¹`X€h£^ŸÔSÔ®äç
+=ÅNàŸŽ²æ»Z"P1K)^Q4ì]ø…5¢�@>á¶²fåÛÇÅ2.$�í+b{›8íõ�tØÓÕ]UÇ~ôÜWÜ$“¼3Lôon6ÿÚ¶¯ä¦ò2º=
+6÷V
+qT4dšn:þm<ð´½ˆä¬¢ÉÙ^Üvgtö½¾2¢XwZÜJóÝLyÛ2*òHè§”7Ëç®Í-FPñ[tfl-Õ¾M­’6˜1Ã$JÌ²iä4óWÃM×]=7$¹±•šØ¥àcåæ ^\¸ÓË¾Ýuœ%ûs¿2x»¯¨·žHn¹¤êw6¯ÇU<IÚK«™ÔÞ{7ßËë×µµîJòÒì´201(]¥JrRö´ÛiUÒÚDžæâ;öylMìRcràÉm!ê%)ÉX|“\îVUØ—¹8e.9Ôî
+GÇ\÷PõwÔ`@£–é¾¤ª1ÚÙÜ2ò
+ueq1‰¼R�©÷hxXˆä$í¾�‰ö£�/MEÑ€’ÊŸ=/	Ã#€[¨øéüdS]ä ·BÒ¸E$ÓN¸çD†ˆl®{…´OfVW”ÑwØm÷kF?“×B´)*7ÙËÔºä÷¬«BmT6Ûot«ÇªQO#dTÙ	î%nljÆ­ó:¶´KDA±Iq‚®'[k‚Vˆ<X©¡ô¨øjÏ2[}«ì\Žk½qØÉcz’zª³Ž+*EG’5'j´|ˆÐš˜`Óhž÷'°1X¯rï Ã¼_Á„‘Î±«sXšAÉ R+^
+¶ú‡*Ð´ZÁu13BŠ}¯	Æ�3«|Aµ;}Ô×+ÿð‰rßò+_LH¦¹þdŒÓ¿»-íXå,“÷k2Ôcãöuø|¯/kÜÏ’‘©Mä.£ûMÛæ>ß%Bý¿œ»Âäã»�¿	£§ƒ/ˆ:§>’¾,�mô!JÂËsX¦PÃâ> ýšó«­�^èÔšdª.ªqÐ!@ i0
+Çá¥ 
+>zQ¨±ûtäéH/4«
+³š
+]ŠžM!;F¤ÏÖA‡1�–Y<‰<ŽMcüšôX±×„T«2Þˆœ\Op3r`hå>s3r�W­AÀŸ–¶,M© ¬™\½ˆ\Ä×1F(-ê"•%hX¡ü§f]sy|iR–¨�m­çOî-Ïˆ¸Œþ�eâ-BÛÄÜÅóUýõ4Z#*â?—Vh¬¤�MEŒÊ3îƒ¾o9'ŸÉý¢Š¸ÙûãúK/hÞÛ¹†XT^Ml²-ËS›ò´hª…5f¡Þ¿-nÀõÖ¿™t©§CðÖ×±Q�÷=Å„™«óÆ�'ð¬Šµcó4`5Ìåµ©eV…uäòjÍ¨Pt:¡ ™h	@è©]8o :„+©!6%,AÑ•†ÇVQ´Ð	^Íq/âßºFêw|þzí.mn”èÇ0Äã�YY¤RÓ^´hj8ï½|k¬ÙùIÊ_¨¤1ˆ|5Œˆ¥­ÄÖwpÝ@xÍ¬‘Ÿƒ)äæÔévœ ZlZî}Øî	$iÖÁÝ·vkXØ“ñ$�o\û‹Çö”os½Ùî	»yñ~�„K{T”GkHc$+U®Õ¦úÙÅÏl“+BœŠ«e]„îl–5Î&i@ãë!tI#Tb8º»y•‹=>ým’ºÙ¦ivýÜÜ_ÙæòAi–°ŒEd#¶T…Ëš1<E6]÷éá¢×j¤Ó¬è‘RÌc2¬­æNâD7²<òN£fy*…§^ƒY_6­I�ò!lpF|¼x”�I0ˆ\5bJ“@Ç—E?=j “{n9Ïà³Ý©––Âý•œ¦#â	J5U‡âR øéÚ‚LÈä®Ùä¹oYÑK<lÁò5%Õ#å¨ø"NÏ¹+Ûù(Í�ˆãQ›PŽ´û5ÎåáˆiRÒ‰�ro¶×öÖ¶ñ�²M+¹ü+É¶û4¸ü?/¨nÝ	ŽÛŽÂ.äµ‡3�µ\w ÓÍ,JR¾]†íÐkOðêµ;¶ö6Nâ÷K³0ó‹<%¶*êÒ8•DÒq©rH4 y€ñ5ë­J‘°{WÕ3èÊ³ûåŒ†vi°˜yÇ¦ÇÊ¨¤*EMkZ|5'Ð=“³"_ÞÈb”Í7`‘ê�›Tz|>:Ÿˆ–JkýEä÷ßØùVLçÙÞ’Š3+Þ‘`´Õ}vÐÆÔÃýJœ~ëÜÄK5®@|Å‡ÄSzttÞ5þ‘zÎµýÙqýö´ØÔ•{o%š3û£./R?•hv­+ÓU;YN…ž8½SËæ º¸»šPò\HÅ 
+BÅ&©hM@5eh¦`¦öl…’{ƒ
+êvÀ/ˆûôÕH—ŽÁö³'Ý˜lžUdŽÏŽBÒßÍ^>®Üb¯ZýÚº”–EÏB³ûû¹³ÿÁíf†Þñ}C ¸q§¥±íåÜì5Uš[’I½µ5»É÷„·íË¬†2|L—‹ô8ôž™~¦BW”@nµäj|:êUÑûYw…£Ý]¡§f½±�­S1w4i1öA#KQå‰ ©Q#)³r¥AÕ•ÅKZ_Ô:B…Te�‰ƒ9uigg7­y<†?S�¦®ËºÒ¾%¶Ô2û”-ËZ‰/ùL[â½º‡u-¹»lˆ˜E©#ð0�Kq'¡Û\¬µðÂÓjdPæZ)b*ŠS\vÁ„žÊ)¢x¥@ñ¸*ÈFÄ£Bm9¤Æ{ß²®p×ßSj	²�’�û'öOÙ®ÿ�²WþFkV
+“‘4‹Å<çª�­dMçÛ¬eÝ�lÛEp¥dnR=B±¨×™æÙ[+kcF=‹r¦ÃÃY	ŠC€Áu&
+4@Î¥tÒ:›éœF€cŒS¬y™‡Ä¶›kw
+¥‘Il;íù­®{îÊkŠ$„½¨=9òýúîÓÿ¥gb9u¢F®u×Q#;Ë•kÑ"#y"½
+ÿ»ƒ/ÝÏóë#Y,zAFÏÝ"ÿ×Æ9×�õkCvµÿ»Eþ‚ÿ«¯Q]ŒÈ>ú²@h:êF;ÞÒ¼}Û}"š”~N#\m�rIv% kYå¸’9ì™ÏõxdÛ‘JìU¼AÖ¬9•” —VX[;Üó[zfô@¤P¸‰D¤tüD•îÖ�™�Ú½RÉKmx!óJÞYe­|µäT[v>:äsyéDè›ÕŒ@ùk�mË¤=]EÔçÒñ`ÓGˆ¤êhU 
+šü´üDw]KÄR%tãPaUÓ†ÒÓB;Óû´àLMãÛSH$m2lu$€Æ{Ç0rY‰
+7îc>œ?è¯S÷�wøØü(g»–A±+@	ßÃW‘,ø>ÍÈe-¢�§ámZ*=kÇÇ�†úÏ›�©§QªÉ¤[cÖc†0hŠ~í†¹J[/Ü³vwbXdî±—s/òr\4°âf"hà'ÈòŽŒåI
+v:ôxqªÑH:-ûÝÙØøL÷{›LšA‡´ŽÔ$
+,òJ-çHÕ•]‰–n8ôðÑj¿)zÔ®ø�¾�ÿÜÏýÔÇvÍ¶[…íû%áaŒ�ìzÂâéÀçé±òÑKlë¥{N…VÇâýHìg¶]×æVóq
+Ö>ÌÜË¯ŽSIÐÐôÕ+fÒD«Ü¢ÙFêeâ¥¨ztÕ�@¹Íí—|¿l¯q}©‰kcr·*Ñ¨®ÅŠƒËb~šÇ+q'!†ìnÃîÞçY?„[™Í¤e¤õ`ª	ò€õßm¨ZÐT2ð]Aq%¼€™!vF Ú �z|Æ£e’’´»w+ÜYhñ’Ã÷¨H’s!+³¸òô=7:_-”’]áíwv¶Sg“…=l™ãf!q f/ÐPÕÇ]7T¶`wÿµýÕÙ«hù„Tú•>šDÁ×aSV¨>t‘&W{k-ô3Û:2$ ºMCNq‘Mþýõ—>_e•R3Ëá®ì®Lœ?e€ò7ú'VRêÊQ™°v–ÙþêÃA…ÃÙ\¯z_[´a.¤¥²Od³…‰+]õ¡]uH•±J”ÿ!¶½³Èçû_¹Ökë1Ê¶6ò~æKÈ€d>¢°<[Ñ¨cv«×nä£Hm£;Â÷Y¾îéžÎÏé¬¯gšAmäcYºòjT„­*u‹›DêíÔtpÍÑž;¨.ÌRÁ*KÀWƒ)¨j´ÖYl™j³5Ìtçnò7˜Œ´�ÛZÚ$·ù«ÈÑ¨‘Pùò“’ïJšë¾ïîIv,Ým®ËÐ¡÷€[‹Ã™ÅXOŠ³¸”Ía0UXËø£
+v"�4ó4«$)hz=„)š8n¤5úÅ2ƒãË‘_Ÿ-þýyîfG=,JÖ–
+¦Úçº�˜ºP760\ÄÐÏËìÈÂ£N–urœ
+$‹´ì~Û¶¸0ØÆ²ƒPMNÿ~´_™–Ê$ŠÇRÁ`xl5“Ä¶{
+€uHjm](
+“CMÔGm¥gxiÀ¤ãÆ”tãA…•Ã®ÅH#í•4r!Ý¶6§åÍ‰ýhþ8�'ñN[�á®þÕÈ½Jœ¢ÚÙÞâ{A’5"‹-Â)2ñòƒóÖÕ•Ä"3UÐ¯Þ¸ÆµŠO_ÔCFsÈ§3V$ž¬ÕÖ>N_áêÆµrÊžk8Ï€š?Òu‹‰õ¶ÆéjÝa#©�vþ¨×¨¦ÈÊ¶©¯]õ(ÈÃCœwgç²]Áu4ß¸šJ¤¬Ê�ýk®?'‡kÞIS"JñûoÜ±¸(bR:0’‡ôj…öû­™/—ÐVNÀîéJŽ>S©>G»Ê»Ú÷=!?>æÕOívÊ*=¸îiH·þmCü]É|È9öã¸GE„Ô€hÿ´iŠ¿pY�'ÛžáŽ1mý=¿F—ø›z	f@ÿåÖþÇûæÓ_j¿q¬ÀŸn³ÿkáçÿ6…ö«@<¾€åÞ~»·þm'ö›w”ïüºÏGõÿÍ©Š·q<Þ€åÖ~¿ì·þmâ¯ÝË=>Ýç¼}íÿ›Oü]»‡Ëèþ]gOŒ??9þm5ö»wAóz}¹ÎÓ¬?Úéù´‹·q|¾‚míÆw}áþÑþmI}²ÝÅòzuq9ÖíÓ=Ä‘‰/˜ÛÀ¨IoÃWnž«+ö÷[&Ãå�>“ÍÙÏù
+m ?íÜDÙ|´6¨�¼Çà£®˜™Å{CžŽÆ£~š•�˜†QM�uÖwÀµœÎãù# ?oòøÃkë<L×Rzh#%ˆý§"Ÿ„jÜnu´¶Oå—ŽÑ°ÄØdaúäùktÅ�•9¡sUnr³�mµ²õ×¬ª¸ÚWîg™–ÊÝw.bó0£ø„¼Ì 7îâXÿ\¨`«Äxé¤Ó×¡Ô×a,?¶ÅuWæ8ãõ€–"íB£b¦”Øøë.\ÉÔªùu,-Ø½òd¸œß«Mv‹Ã¼¬åÑ
+¿ Cð:‡ño3;ÎÚj7"göÇ¸1øë©BY<QFÓ:º‡oÜ£)+±¦¬Åƒ%zîRÚìS{ßµÅ[_c$ÁG‘2Bç÷Hx²±n¼¼ÚŸ›’ÚºÄ9„:íŸøƒ=•�Ëâ!Ä­Íôò:‹¹‡€^  7›ñi?kŽÁKU©dgdr}Õ}ôÊ¨YQ¨ 5ãÏ¯á®©È­w¹–º$ß
+ËÛ[eî‘	vXH¯¸+°%¹|5»ijè¢VŒÑ½ÀÀ´öx\ïÔÍé”Ï+ˆxU•Ó®ü˜�ÉøiV•m§º.ªmÁG÷K#˜Ì}½åû´HÇjBù[`Ä¸c¶£–¾5Ð-ZÙ9DWmûm–½Ã[ÜØ¬QÚ:‘9!…
+:Sã®já;êÙOœh<»ö‡;u‚xíå‰º©m¶ûµ:ðmW)ƒ¿¡A÷OÛnëí\|9;.0cÃ§ô�"¨äxWq­Áz§.H+ë¡‘¼ó]Û”o<‘îd&¦•Ñ«}InÄË-†r™¸[Î})H§#³SÆšÍÉÇå_À�§ ð™”Ìc£¿³15¼œ¸òj5A¦ãzjŒ|u)ŽÙ!‹wkg°¶+s;R9O¡?¦Ä‚†Œ¡¾\—Z-‚øñþø³6ýIþÕ‰;“Ý½;ÒXÍgµOk"�»¦µñšµ|m±+Ø�¹±‚ÂÃ)‰½vâOÕX0Z—†FÜÊGÚŸ7Œ­�×¶¨¥w;Ú¹<¥„WÖ�
+¼À•%¨v4ß\J}ºÖRˆ<�ÇÃ°óõüÿoRj¿qü¨ïð~¿ÝÇý±¥þ.þ‚yPeìløÛÓM¿¦4—Úî5•ÿç€þé>ÎcGø«‡Ê�ÿg‡û$¯úCQÿpùP'²sû~é´4¿Å_Ð>Twø#?ÓÒ_‘ä4?µdžƒùQßàœÿýRÿhhjÉè*üŸÿ©_í
+â²Ê�=“žìTÿXhÿ�>Tö^§¢?´4ŠÈ/•þÏÓû€¬5/ñ™æ@Íî$¬ÒŽ§_¶äO@y�¿øw»‚¸�@9Ž‡ÃW>&~ä~D6=ŸÜÖß�!ª¿Æä{‡Ê˜Ë'Ø�Åwn±$
+¤:½K
+yu£õz‰äPj–ñ²[B�ø•OÚ]šhŠ–Âµi©‘…w
+!$#zôðÒhaƒ’zü4 ßJNõv§�ÇN�Ð}»é@m÷é@õ‡Ãòè€“½Zý¾^ ÈAß}8‚»“öÓJ@õ4Å'	Ñ!=B~z@îòh	–ÚpoŽ€2ÿûG!Ü=§øøÚiñÒ4�
+Š±�ÖŒTxñ Òµ%·O'›¿SÑ7©Z¡­u“Å–I¹ûí­×ÖG”¿€¤1#r«
+Ñ?.çVS°“Òp]• qÈ~}k�’«Ü7÷WäV;$0Û%FíúÝ>/ú5¢ª¨´+ö¸¶k	MÏá(nåpH"AR†£Æ»éZ�¥“{‘}³�Éw^PKy)+rUîi·(!5ÿ¦@Â“±Ú%#aX•c*¨SÀ
+hH¢äŽ„S¦ˆŒˆã‹
+«yH;‚]"6ZÌ,«Ý7I�n\#'”ƒê)Æ”Ö;ýD¶CÔ™2“«¹’EvÍæ©©5­un	Ê=Iì6"Übîçúd,‘p SÉ_
+_Ç[ƒ®Äçy[EsÞ–-w0ZZ\Sv«�«÷µ´5±m¢Ã4½¹sØØËÌš\\È³IjÏP†Tä†8^�|„ñC]õ
+§äôÑ–¿'-¹œà‘o{£ÚÉ9’æRÌìÍä�G”×U]j‘»<¶±F"…Dh¿…FÀjø3@-(FšC"»ŸožÀßaî¿º¼‰¢äwâÝU‡ú,Ð+Ìã.°yË‹¤1¼<S!Ú”<N°Þ¾.jˆÓÊ’ÝMU¿8:�$z»þ;�^ã�œŒ)2ú‘Šô‘<²/òê|}¶ªMƒ-�Ç_âç±º^qÎ…h:†§•�ù6úÖÔ¨"™„-Öw·²ü¡soylJj¦£j�‘Ö	xÜ+yÕj'�îÞG .®�^AnÖ´EÞErøš�NÙíb7pk^ßâîq½­ior
+ÊyHÊzŽf jÜj¦Få²Ìÿ—W0~Q¥!€ÃD ×ïÒhÞ:P	‚N˜k±©ÛC@nt@¯Ù¥Â“VÓ©½tàjt#@€¨®€�¦€Lï©@¤
+)  Óåâ4Á…ÚŸ*éÈ†$1ßq¶ÃHròh«OçÐ9;‘=t@�¿3¢sTué¥ *�t@H<ˆè€� ×å¢UÒ��Ìþ]1ã½t†!¢-wÓ$þ]$î@ñÑ;ž�×cþm‚2~Ùíéî>¢\u»\ö¾’'âM4š+øÐþ¢…q � U“M"h3sàÁvbó:pO•îlzµ…‹IÁíÜµÜMU>¢%½|NŸÎ¶fÚ.¤ÿug­d°ŽÉ%†Îl£V�U¶·ÌXŠš*
+}ºys/‘4Yý¼³¶‡·�2]ª˜ã}™aQH×í¦ú…#¡žÌ²ÈÔûõi&"šˆ„Áó/Ìè±àþæ¬]×~õ§©øí!Ö¿PÑ4¾¶NiEhò1øê3¨#ØþÇ"ŒÁø4_š1­8	Xšî‰ûŽWà†ÅW—Jògc¿Ý­i£Ðé
+ºûC¢·¸" u$ï¨Q5{º¦Û"{^Ö¯íH‚ùàÇË4ŸR3oùµ]“”W“cCuA°f¬)û4@	ºk¤ÄÏ4Ä÷d\�¿rÚ§îoÇ¢?ëãOúIOÉª3SI#W¬S�%ºÉúéäo³ÃY	šg²ù|…�úI)uâ^¡‡Þ49Z’O¡ëåøŸ·]ˆrX<NH®µIÈÙY‡˜‘é:§¸~k>ÓÀÚÊ²Cj ¯á®ôüº�‚ì.º“#aO
+Hbœ…5�Ë€Ð�˜$×DÀøèz<�;þMÿ“DN¨ëã ×íÒbl RwM43¼>z ®ÛýÚ &ša ßá¦)
+M: –`ÎÐWÃR	C[–¢&Áê*7:+TèC`t1æÐ±;WDÒµÐ Ûqß®€
+�O†ˆçÖºØÛI ;a¿]1£�$õÐ.§<t€lOŽ„
+šiƒ8|t8ºi�°Ó¿=tköè+Ëíÿoç¤3ÜFa»4-<[¦Þ`v:…ñÖÛ‚³[qž×àìÙ=Wkˆãnb&èÍ·âø�ºj5Ä‘'–ÏFË²qPŠ°§†®BYš”ê>N`õAé¶‰j9áQ Lð¿}ÂÐw†MhVæQB<}C¬y—¸uØ„„3^q®í@ý~ÍTHõß±²Ý¦ô½Bý@D¯ô­<~¡fOåïÐfr1Ëä�Z+£ËÅ…GØuª—Öe„
+çt¤ÞÙßZÆQRH�Sø¤��¢T6\Ð·fåšç¼šT5¾3QÓ™¡;ÿ[TyM—¡žïCGúÂFã®­’°Ë0øhlk�^š]ßÛXÞèÁ\b2
+}ÅVEüQºþZé8dl»qÊÃvÃ|Ëguo=™5YjU€ù¡Îðë¡‘ö4Ïm=›NÞ’¯˜9·oQSö¤ý¦û<4Öä“lÖëMúüµy0UÁë¤ Â‡ÂŸ=
+|4ÚPƒ¢0múèñvê|tÛ¾�3«¾�¦û4€0a×ÇJîUÓØ®ÚN�Ëj	êÒ§RB
+NÕÐøu:h éã @WsñÓ€�ëò¦ˆ—”ýšŒ%6Ÿv€GZýÃDáÄu?n›ÝkáO
+A…>$h€€Ä´§†�Ñ“@QM:¬:é
+@Þ´ñùiÈä
+y©½40@íÔm¤ *€ššcwÛÃå L8¯NšC;qÓïÐÂ@;ž¿vœƒ½>_ŸHG
+†�€w:mÃóhÁ›@ààt€ôßå¤4p$i LÈýÐö*Ûºr2eñWg�›{ˆ¤Ó‘ºr~|vÔo�X†µÛb«ÚÿðÝ•³½IòQ3!òðÜ/Ï~§U,æßCvÀ`ìð¸È±ö¢‘Ä:ž¬Ç«™Õµ¬"b}ÅÛ8Üí¨Šì2I})ãÙ×—Q_~vª{‚mjŠjûBUL?ÄžK@Áý^C¡+Z5WÃêYó_báÛ]³�ÁZ´6À™$<§™·gož­­+KYdÈmH‚M
+t@IÌz»Q§å¦…†…tàè7Ò@é¦÷¨#¦�IÄøéàÕÐ	‚)S¤ j7øé�ÕÛJ!‡ÏBgRŸ=6ÛhblêèCLê�'Wã¦}ºB8R”é `øPéÀŽ¦Ú žŸ1§~:b
+z�:›h€mEÿ#¨‚oš}Dèc:Žš×ÇI
+ÝÙ÷~mK¨¤$•4ß­¡áø´‘¸+ø¿›L�S¤ÿ-ôÃ¨Vêt1¿„ýšt¿Ëá¤†t?äu uŽð:ï
+DÓ@ÇÇGa ÇÃLGxŸò:Hg|4„
+ÿ•4ØÀüºB9¾íIŒ2tÐÆÁñÒbê€
+ßv›Ž� Ú�:3›ÃLgò¦¢Dá¦ÁŠ!‚zÿ>„Žº`ë¡;Hg
+
+ã¤€ÐétíÔ†ÇI
+ñÓu0­×@ |5$ºÒë¦�º]s—ÇLg¿R`øé+ôÐ†�ÓÿÙ
+
+endstream
+endobj
+6 0 obj<</Length 27937/Filter/DCTDecode/Width 376/Height 310/BitsPerComponent 8/ColorSpace/DeviceRGB/Type/XObject/Subtype/Image>>stream
+ÿØÿîAdobed€ÿÛ„		
+
+				
+	
+ÿÀ6xÿÄ¢	
+	
+s!1AQa"q�2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ	
+„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q�‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“	
+&6E'dtU7ò£³Ã()Óãó„”¤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ?çÈhVŸNsîÁZ§MzÄì:t8ªœ«È+9FG—¾	 °7éBê|3üq7�^£éË1di!åv£Ó‘�ŠPñ?1™‘–ÊË¬V¼j6ñÀwZf6‹À¨)V4NÛž˜ÌãŒ’úÈ_•šÞ¸±jš«
+CAê4³/	$ã½•¯ŽceÍ·Ç=Ö}KIÐmbÓ¼³†Hþ‹µ¸îkß5™5„–èÅ�Ë,—.f¸bîýY·®cJFM€)š=²º¦aJIhFÝ02¥#0ñ¦6´¦&¯°þnøñ!“Ò„ìü±âV9«ê`0
+Õ¡Þ™\‹d"óØ¼¦—zŒ×-væ+‰ûXc' z
+¾›§éj%hÒ(áZ±(x“°É,e•å>küÄV’m7Ëj³Ìj¯¨õŠ:ìx�Ú#Ç21â²áåÊò«xœó¸»‘î/doß^LÅÝý€ì360áqÄí{:‚A=däÉDˆoÔ…íˆ`°¾*²¨NûàÝTž»ž£ùp€®†ÞæåøÅ=
+2Á²+}é(Ó)¡Éð0)ÄV+Ð¯NùY$h›R™QJ§ëÆ›dx.$¥�íäç™MU”ï•K¯7Ñ|åq$éë ÙgGÌf<ðèMè¶·Ö·‰ê@áÚ• uFbÏ
+œAY…wÊHd¢Ê;l|r%˜C³pÙÏ,Y!$`ÍHO)GE]ÏÜ1W¥y7òö}]Ž£¯™-,rHNÒÎôé†€W¥kwÑ|§gúË–±àµ‚†4aûr8ý¡×!)¤x�æ©¨ësÜ]^Nò0Æô›€+¶VgL¸ºžªÚžš±–uúŸç,Â§¨ã•ß%à{•?6oÆÊ]AÆ¥c*,‘ßGñHÇÂÀ¿,ÉÁ–Pjœ2?(¿)ÿ>ô…]J´Õá«Xk/é]A#ÚHo‘\ÝéûC†­Æž'åïç‡üá÷ægå­µÖ§¤Û7›üµ	/%þœ¥Þ5XSâîÁ@Íö
+d2
+XM¾'In¬fõ4d}¥=ôÌÁy5˜�É­µ„ŸŒsü2uÛ®	FšI~¡ÆG~ù¢så&¸©mâ~x±T …º¸µ¤¯R„ÜBðRœEb'ÇaÂÄ‡ŒjñÃ¨0_„ÎK:wCøª33¶Pç“t+ýR¶²±ÓæÔËìaˆuätÃ)ˆ·Â°<±ùiå¿'úZ¾·éjºê-c¶S[xü>Õ—Ç5ú�XèäÂ,†ÿ^Ôu†,çÓ·ˆ| à<3S9™êU^¦¤åt‚²šìN6ÁkÒ¾ØÛ †v��˜A9Ðš`%$.R¡MMi‚ÑH»·p/‰•2 ’&C‚XŠšäI´Ú[ªy“HòôO5ÜàÏJCnŒ=F>V¹v<DµäÉAä:Ï™µ�49KÉ>§§û»‰‡Œ�ü3;'
+Yl¤ËIö>]•LÉŒ@G®pÜ®ç¶N�‚ú‡“lFôÄ…^c‘TÚ£nØ@d¦õ¥FX „ûJÑ.uLd#C–FI§©é¾Y†Á²GRrÊcÆ›Ég	^ƒli‰’Cyh¨	Q‘1Gb·15IðÈp¯I¥¦£e/‘
+Æ@¦ÔãŠ‡—JxãÍ#"øu‹I«Û%:ºž¾ÔÌ|¸í¶9¦�æõ%c½�nŸX_øÛ0ç€·‰²ô¾YÖ¨á‘Fä§|Ä–2c$M¥•Þ¡u½¬-<ò!Ô×#É°FÞÝ y3Jòí§é­}á7vÿq5=8Øn*NÄ�¦Rf6c¾iüÂm@5ž†¦uø^`(î?ÉðÈq¤Eç‘+Hß¼$´»¹>ø@oQŽæ-3Q­ÆO«JboJŸ¿"Cm%ÞQ)ªyfÊ;óõÏRÝË&áÃ‚Z¿NÐbC&³°ƒM�,ì‘a²†1Q/@´ë–	5�­£{¦Ê³éò´S)ø]OL—k˜z¯—4”v¾d…gCÿ°ž'nÒ!;ŒW<gf“óïÍoùÅOÉ¿Îè.u=*ò§šgF’{J�8É)ýjU‘|8È™¿ÐöÁS‹—
+¿)¿8ç¿4ÿ%ÖkíkM]kË(çÐó>œ…­ÂþÏª»zl|	4Î�²ÆÎºxKí |3Lä­äÔâÈ"žØ³áo‰$T÷ÄšRÛ€Š9^¹€ÉFKÁh?+þEj^a×¦ÕgTÐ¼±,Æâæò`ñ¼�ÃqiªŽgzœ3ËŽiŽ=ßUi�h^PÓãÑü­§Åjª¸º@}IHý§fÞ¾Ã5™µFNHƒ�ä�ýIIîwï×1,”!ZêyQUC1âŠÆ•4­'f\H‚¥{ôÈ”•PÀ
+Í01CÍ:®ÀâÌ¾KŸåë�%’KÈjÆ”ÈÚZõ˜Æ¢µÀSjrªÃ<‡ˆI4ûž˜D	a)€òo2yÝ`f°ÐéstO/HýÄóQ#lÉÅ€µ¯1pe™®®ØÝ]É»ÜHy?ÈvòÌøcÇÉ’Ûy¶ Û,¦†”õùdƒ UÈ„ä™Z‹ÈHÜPv§ñÅmB"Á‰bhÝ<)µaÎâ8”»± P7Ë#‚ôÏ/y2iÖ9ï#1¨¡àÙ‘1âz\:e­š*ÄŠ
+÷ÉU5ÊN‘ÖJ]8(Æ‘iÄ¥ª¹i<Ñr­FA ¤óÚT%'’Ù“ïÊ¤hiU<†T<ìÍAµzá»gâ(ËB¬
+�Ùêq�D·’<µ¯j×Á-%}7NW-} "2§ºƒÔ�lÁÌcæãÇo¨aÖü¡ä],ˆÊÜ]°‰he™ÿ˜1û9«É1Ñ¼FžM«ù§SóD’Iv6ˆõµ²-ð(´@ûM”nYˆ¥öà)ÂÒl»ÐŒR­qCm$}DªP�þVØ³âIô�5tKq§Ã/©"‰'²Ž™Y4Å27lN"I¥1(bjrÁ0¦íN€ŸS"$%Í¡¥kš¦�?¯¦Þ4ÿ{ôaî­·Ý–¶É«{W–¿6lo�èï0Ãõ#p¾”×ŠKC"�ˆtàÝ|:eú}L°žmRÃoŠ�Ò”':Rë[Œ�‡rp]$GPEw­ï’¶fVÕ¤Rê71ÙX!»»�¸C?MN›÷Àhn˜DÛÝ<µùq¦yybÕ¼ÊÉy8µcˆõßùŽ`æÏÜä†Iy«KzÅbFÙ6ŽÙh;Pf1¹2A"�Ï|ª•c·]½òPæ‚ùóÍRêv~o²šæwôtë´žÌð”+Àƒã@Nfœ[5Y{¤7Ñ\¤71¬±‡·Å×0òŠm�®{“Û|Ç
+€(Ò‹|-€.-qáB±Ž£aM÷È�‚i�ë:½�— kýBâ8"CÅynY»*¯r{“†3&™Má^fó–­æBÉoÏNÒ‹SÓSûéÿ×ðŸ‹4JvÅÖ¡¢ eTÐòùæPˆ
+ª×m°Ò…Ù«×Ceš�)… ©PhA®jœë¶HD’©æ• Ýjr*ÆŒWù©¶^1”=«Ë¾I·ÓUn'@óÓ•N+ÄÍB)N1�@ËË\Š
+H)ÔålPNnÇaŠ¥w½'�Ù8ªK,I=p¨g�X‡ BBYq­pRXýÓÆµß!(¤¥•n	¦C…�Ýq`Ü—ÓBÌÌ…$“µ2™Ë…»2KÕü§äe’;�]v¼4ŽÈ·§ƒW¥s]ŸSÜì±i€O¼Ýæ¯Ñ®�åèÕg„…ãJDœv5näf¯&C'(˜é6÷—r5ÝíÃOrïY‰ oÛ!’ÍšªÙo
+%nÛÓ"‚�@*)‹LR*¯Ž$"ÐÏ*iÛ(�d”N4è2È!�Ã½zä�YF×-ÇjäÁ`q«	TœXp¸°Ÿ™¯L’�òÖRß²›±ì>y×—IÂVÍ,V©ÊbªE@WÛ‘SB>óL„?”¬¼Áù˜Á<™�&h/¼ÙrÔUÐÒX£)C#¯O…ºä$D[aúGÐ´$Úm)
+Þ©*¯êóQ¦r;UG
+xQ+âÃ®bfÏcg(CeîòÝ±’I	nÂ»S1#º)Â:mÓ&M2™‚Š¹YT$²(ûF€õ9**†K?/^êKªÂ²,2¥EG"6Û-üÁQ‡º’™#Óá[[5'Ó…w¨sí”Ï'gH¥ %)¹ï‘Ù9ŠÐuÆ”•qQÉ¶©ðÉ�mfo=ó_Ÿ¬4Hå³ÓBÞêÌ¾Ïó1ðt0ÛT²<2îæóW¹7šµÇ×/x–¡¯ä/LË†!ƒ+QEa™Š§|4Ä¡™¾*
+�zœ4«y¯Ž,	$¬V;Pxe±‚½ËJº¿>½ÒHÐ�ôå±…ÛÞtÝÇM�Q€ß/!�¦~ v«Eï�áÝª˜R08IëL‘aj-
+R2 +ÔmÙ‘½1Ðí“V4…ÑÏ T¸äHU·p±O‡¨È*FÌÑ–VýŽŸNDªOw#µFÛ�y5¡8$ Z3GÒ.u�BÛLÓmÞæk–¢Æ€šý# ñ9�9p¹ñ’ú:Ûòº%Ø
+_Ì·×i2¸'öBƒÖž9¨Ôj-Û`€ ×¼ÈÚŒÒC`­²’¡º3ÕÊD—2­‰Ý,Ò¤i+z’'Mº�|r6Æ“­FQJ0rèL—Ñã×·l°µ/Š=ëØe$#‰8·tJ–;�].£À…ˆìN)H<Ÿ5ËÛOõ©Ìò	ä©nÃ—O£ bÉ�^Ûòø—¿L�¤’µS×¯Ñƒ…˜(0üY«Ó
+¯(=i‹	*­çR´vññ,²1`ùËÌŸ™:f�s�¥Ãs¯ù’SÆ×E±Fº¸-Ø‚” ØG	æèýräôÿ!~Ck¾c‰<Çù×xaÓ¤¤ö_––¬%�Ú”ŠMBj§7Ž¼=5RRà
+åóÆ;9¸°€.O¦nuŽÞÛMÓ K;NHàÓ �xÇqíÆ(è¾�§j† šœÖO!-Û;“ÈŸ­L•­p5ª— ÜÓ
+BYÕzK¤˜½@$Š«¢´ó•Š÷=¨F4Ä‘ë~gÑ4I-b¾ºX.%‘R(Wâv© &˜-D™RVH£*jy¡=xœ�Ò™IJæòßO�§žt‰í3�Ë xœidxo™1u
+EåÓô?RÒØ|2j&œ˜wô×·Ó™xðµJo4Ž6Œ•¡oQ¹I!ûLÞ/Z’ÊŽ Ú4�…pÒW%0…tÎm×$ X”¼8©'®<…nu90×ÚØ]]¿¥LÜö¨lb¶öO*ymãiV;ñ9tUëÖPEB8ÔFJeŒ	EÐ7]ÆX®HÐ�±J©…‡l,ì8ý¯ˆwÁI´ŽôJüŒ'ŠŽ ä­�,yøVŽAl®FØÊIuÕÒÆ§l‹"’™~L{dK RkÊu4†h–ZÐŸˆxƒóÈLÐnÅÍô×å——|�ygÁpSY˜s$¡RåHè°²6ÃÜfŸU˜—e
+	·æ'’üÜ–Yê×:î‹Åõ)+Ê#Ú£—Çó9ª È¶ÄîùÚ-<™¤VÍ‹Px€>ñ„ã·$dWýhJ
+=HÚµí‘ðé<i½”pÚîªjÛe S	I#‰X÷ÀZ‰Q’híÕƒš/sá�(´¹n%™ˆ$ðÝ‘ß*”©x�zŽ©ŸlòÜ1â£`»–>-ÇŒÍ> cžSóTV¯q
+ô&4–y$ŠZ}ž}ËN˜……æ}/N±:•ÍÚEf
+‡¸&«ñôåRÄBFEqmy¹²”KÀæ�u`Â´û²&›D�mt"„äRJÒZ’jü:€{ûå‘ƒodü¸ü°2M£¬«ÚèÐŸ´À©—ü‘íï—1™á`–ß“þEüœ²/¤Ù&§æ{·åªy’ï÷×’?ø;T*“›¼ºÉK`â€1{=Ä÷
+êÌûTü=óDžlLÌ”	
+Ó*äÂÊà)ö°­¬i8ŠÖƒÊAË9m—¥ŠGÝ«LXÚ)cPÒ§Ç¹*ç2H �ˆ
+Í=°DSù÷óƒÊs½3Ì¶ÈK¡[kåŽ#âGûæf:�aÄÈ´¯Ì�>?-E#9›T€›t´¡h)Sí„à¶3›Íõ]wTóí-ì”ŒÝÛÆh‹ýNNn‚m‹ÄP£/�ß Hh°ñÂÈ3!£ ÂªO8n»dÄŠ
+€£ƒS’X–U¢ùnëV‘@VHÎüé–±{žƒå‹}64
+¼ŸÎrÁ%™,aT*ŠS$-uu™4"­ãzw®L-áTnr°¡$ÑqøGN¸)ŠIpâ¤Æ>û8U&¸w(ûoá‘*Äîj¥œŠPá
+‘L=m�L�cH>×­2 n—ÜÆÄx`lIfFPÄ
+Ÿ®{³ÇÍ“éS[CmqopÐËU]6eaÓçš}V7a	>‹ògæÈ�A¦ù¡‚£‰ß•zsQÓçš½ÁlÝ™y‹ÈzG˜a“QÒÞk—Rc’:“ÀÔeÀ¶q>yÕ4ýýí¯m˜qÙ%¥U«ÝNm°IHÂ‘Fd`^§v��F9çh`"Nâ+½2i	tÅ¥á&ÀíLjH	>£¨¦‘ñÍ'÷h=ürÜz~"Õ90é§{²÷úÒE?aG€9²Ç„D8’‘c·2Ô´kPìÃ'Â	@šS-ÕÚÙ\Y‡-or­ÐËñÇÏª:ŽÄòG-‚i÷å~¯>Žú®�ªÜziqu–JÆ©ÄBŠh{nÙ‡ŸO\œˆMô$f+äÄ
+»�ž`øe¼JÞ¹äÊÓ­¬>`Öá{]#ÔAjêVIä�¡*@!rQ�1%ë>kó�Ÿ–ì×N±1®!!…(Rú;ä¤Ze#'„ËW<˜òoæËí¦FÔý&~ýÅp(VH½#RpH{‰¶4ÆÕ+wfêÔ¥¤�VŠ¥€ý¬„Š�ŽŽBÙ¥zŒ‹_C!Q|p…äª^Z4ÎWâfc@‰öË¶¹Iã¾ró�®¡#èúlQ]Û;qzäðJØ+™Xq–™Iã×ˆnåøB«ÝÐfpÖJª€ ÐõÅYñT;Ê¦HR3�…[Ä“÷áˆ²�²$’æ`‘ŽU9|`—§ùoÉf[›¥ø:Ðå¢
+eìº}•µŒ~”(Ô¨Æ‘iº#Ž&›bÂÑ‘†.9
+²AJ3ˆ"´ÂˆóX²ÔMéá‘gKä•×�/„a‰SyÃÐƒM²tÅhÂ•RùäN@H)íêFVJ±Û¯Jge�h¢´SÔ|ªFðŽEGL­°q‰Š°ñÅ9•ß~íxÔž	rd6v�;.ÕªòŸ§5úˆÛ•ŽL�Ô–¢�è«œ¹�yKÏÚ×•åókÍ-Íe±}éþ­zed2ô}®¡å¿=éÊÓ‘¤4F‚X›¸!È¶GwÏš~Dó.›«¡‡¾Ò™Ï­:Ž1àÀvÉláyö‰¥�*ÎI%<îYk)=‰ñÈ˜Ûi•¬ùš8&‘l_×™¶gQU_–]‹pg‘ˆ´óN}I\´�¼²ÈjkàgBÃŠ×¼¡�¼2àµ“ÕmªIì0€…«€(|;å�VÅ;¬€0äT¯z÷FþÕÈÌØD—Ûÿ’“ú�¼æ/8;I¦´E´ÿ,MI¤zò[–j(£zp©¯ÚÛ12åÆB!ëÞzóõ®�iv.’ê.¼PÒ8¥¸Ì9I¬ÎËç	nnµ†’iLŽæ²9=ür’m²!•A¾d¸Vã Nø²)çb7n ÷ÀK4¹ænˆ9žÎp*¢v5sÈø˜iQðÄm»Ù|pšŽ`€{`á,	¤6©­éúqy:Âª>±b|÷91Õ9¾|ó7�õ1´�[±Ókµ¸Ù¥™ÈéòÌŒXÚ­‡'ÂT–éØtÍ†8ÓVÜÈ‡¿Ž[HB,�B+]öÈ˜ªÆfWUIßîÉR¬ ‘ÐãJšiš=Î¥(H�ÐwËa{O—|™of#šà”ïC—„[ÕmìbXÕPPm¶c"‹ŽØtP9.â¾Ø�ØXC;U‡U=^KS]²A%yœFÝ(hq%cÍ——ø¬{ì]ªi‚Ù$—³H	gàÉ×ÍzJJn¾I+L€Ô`)¤²YKTxí•IRÆj9Uø«Ö�²%˜Š
+æ0d&¹IEØ¨¯~ç)ÎêÞØ¤Ì¡QœþÈ­zäIdþ^žÆúúæÉï
+I±`k×13ø2[»ÑðEÉAâPHÚ#5³HE¥X+ôcö²™I�Ž¡¤Ü­Þ�rÐÌ»ÕOÂOùC¸È³�ÝôG“ÿ2­5xFŸ¬<všƒ/N@†]½öß+;9F’ïÌOÊ!æM2[ï)^%�ÃŽwv<¨&=O:W¶]ˆŽ®,É|%«èÚ–‡w&�©ØÍaulMa•J±;õ²ÅÂZe©gzÐÜå¤5R´ÒUA§¾FÕË)‰Dƒv�…QÑFÓ­}3'¯ð2€I«t�ü0ñS8FßgþKþB­…Õ¿›¼ÝkòÔM¥éê -V[…èÄv~cåÊäGg«~`~d[é"}#E�\jS
+\Þˆ SŠ··`3yXËrùšYæº–Iç,ò±5vÜ·.ç*&Ü˜c˜ÚÀT)¥}Qñøíˆ	ªdŒÙ�]zI€4Üœ‹8„#!�üLÀbÙJ«ÀJÂÜu¦ÃrrV¨®	rj(=9lLnÆE�y‹Ï–zIm
+nõ$(~^œŽdC¸Ò›Àµ
+fÿ[ºkÍNcq!'…áŒv{æHÆ%$1“ˆð÷ËcŒ6 ÒV´`kï–�J
+““BNJq5I©ÀUdò@ýð­yB
+ûe‚*ÉtO.Ýj§ªŒ±TN]†&OnÒ4[==F ¸ï“!�/„
+-;d-m;CÅhÃˆ?dô®6‚W
+†PzžƒckÌ�kã�Çš	ç!«ÜãÄÎAiš¢­ÐwÂ7k6Û‰9ØôÉ†•¶Q‡)V¨®,‚lÜc`
+àÝx”&’ §p1ÅlfþëŠ1FGB2!œBÖOÝ‰IøŸ¨ï•’ÚÜìxž>PRK‰GCôŒ6ŠI¯YòéþN±=FrÃŠ’õ¦D”€–yÒ‡W�˜ð/©cµ	ñÌl›·Aé†ÒbWuõ9j®Ù��9¦Ž"ƒcÐæ9M·JöÀ�¢Èe¸¸=)€‹gÄ^£äïÌËÍ
+£±Ô�îlÎÕçñ#(˜#“dwz×™¼¡å/Ì½&ÞY)¤àZ×S€�Yyçø3Jvf!ñæ'å_˜ü‰!’xMæ•#«jp/%#°�
+Ñ©Ö¹¸†a âäƒÊÃŸ„1¡>9lbãð”ÊÎÖ[ù£µŠ&–KƒéÄˆ	f'²�Ôå¶eû§ò_ò-+O5yº.-Š]éV5=�8¸˜¬£zvÌÙC•
+�6sù‡ù™¨}Bqê)-Êt #0[YïÉóÛ™f•šfç$Ÿ¹ÜýùY°­o³'"ñí’ˆoâM¸¢F1Åˆ»a(%|³îEË/.õ$mš€öÈ·Eo¢¸ÒSHáÛq�13¥—7vöq™%u
+‚­S·Óí’k–G†ùËóâåŸMÑøˆA¤×DîuLÊÅ�¦yK3™œJä´Œ~'=OÏ3cqíL©dé
+rOAB+“Š©Ç2Ó,ˆDHá–ƒ¾Ø
+Ðªý¢=ðp²ŠÐHê¹øDVž…¡èpm-Å(»…É€Ä½.ÅmáU¡@—Q)ºL¢„nI zá%#tTZ‚QÌD;'Û~5ñ¦VwS³»üÛò&™¬I¢ë^oÓô›‹~+õ‰•}@È(H Œ´@Öá¯ˆÐ^pÑ4,XùV{o2[êsë–BïÒFøŒN¼ÒEÔ®õÀDC.…½ò_™¬­%¾—Nª[[­Ô÷Á¸Fã’“N•S]ððŽˆ&ž,ÿ˜þNú¬ú™ó‰²µœ[Ixn#‰‰â#äZœ‰§\®Ã(ž&N—¿Z†)"Ý'NqÐÒœ¹|©¾YF*°Â’,æ€mï–aHÄÄ¡\; ŠYïR%fcE^¹Y-X�öª&W0�‡L‰, 
+¡-Ökˆêjk•�äÒ4~à=Ol�P©$ÀFK#¹8�\€ç’ŒU ½ÿ$S|Rií_‡!¹ï‘¦IdqzwPHWeaË*˜m�z�³†@¾#§¿Ž`ä
+ ¦«°ôÈøÙ³¤(”e$~ÎD†À¦é·¸é�-4bEÛ·o|®A²%2ÑüÏ­yjxäÓåãjMjßÝ°ï_|¢q¶Ñ'ÒZœ¼¿çM:;¥‹ëGáºÓn€<ûlO\¯Ì$¤[Á?3ÿ"Ò;™õ?(@ÒHK4ú"Š�EIø�ºfë¦ÚN7²þO~Ii¾G²ƒÌÞlŠ9<Ã"«ZéíºY9oþS93×%…_óó.Iä:V�ÿ»YåCµzmL×È™±�âxbFò9šf<ÜÕ˜îkôàà¦Q	å¬Ê8²7¦½f$_–d•ê7vúsül8ð¯·ŽE6˜Y½�nàS¸jâÉN?�r7Ì‡\P’jzbY„å"T@z„a)$ÿ™´ýÔÉs(õ(xÄÇÀeÑÇn<¤ù§Ì¾rÕ5ÙÙ9´`’–àþ$ŒÈ†³&&®;µO|ÉŽ:j%WÕ¨¥2ÊB¿/ÝšÓTÑË²�ðä€TµäJ/^ùhQ‘³°Î+kin(�¶’Ê´ý:;z3NM‹*‚E@ôÄTÎ’X.O�‚m,í2L-ãŸ�)Ú´Ž6n&B ­v,(¤_šÞPüÅòï˜[LŠm&=	zšœW2¤‹8eAÍ}>Ž¤(H'cJ®yñb)ðÉæ^ymå+
+fÇÌ÷XƒT™­„Óê� µFu†KG.Í-@Ù‚‘¸Û|¢z¹eÌ8à
+³6ó¯æ~�›ªÞi6—±é�K-Úé�ê\ÈYL¶iÊPD
+Ô‘Èm¶cœsæKfZèÁÿ3ÿ0ôÏ;&“ä]vçGòñŽ9<Å-‚ÈÖ÷3X²Ë"reªJÓÀæ\%(ÁÀðìóeOä¿<yGÈw~Dü¤j^Yóœú|Þ`ÓH…îîf±_ôY`¸2��ê"×•z«HÎ^§7{§•´�7h~RòÝ¯Ÿ4!¢ùˆ-Ô7–Ñ8”Dmn$v“�uHëO›	p�¥r
+e÷hÀƒ•ÙiE¼¥Ð±Øá‰%fîï‘(ÇoÚ8dÅ+X£�©qï¶AšqA
+†ù&ÂRkÉÈ­©ß§qÎ{WA^ANVÍ)Uxaßío×åŠ Þ2à3
+“Š¨ÉÏÂJž�ßÚY%´n*câ@4¾BqM¨iw·šmÌÐ\¹x¤pÑ7€=³,[â^¡at—Q¯
+òÍyØ¶„.¡$–ò©*BJäId
+×~JXbÍbI¶Æ‡ÃñRö<”ƒ¿Ë"b�{g[‹iˆˆh¤:‘¸;uÊeÙ½£É_œéÚŠMæukÐ¶ñ/Ö€ÄæGW’�ÈA!°”ûóó>MHýW@¹V“{‹Ùç'!°xd�%®žC
+–eg%��&¯ŽXié³\…?g’±ùd“iÔ·PÛÄRÔnÇßcL½Ø¹¸%`|26�ÉUàµ€Cn=8bûÝXŒI­�J&ÞÜÔUi—4Ú2Cºv
+rNØ@¶&Tó_3þaÚiâ[}>Q=ß ¯ÙNÕ¯zeÐÆKD¦ðKÝRãQ�î/Y¤’Bi!<†þÝ³3‰´ªJiß2#(
+�L¶˜ª,‹Üà¤9ää(
+G†4¨)˜ÑW£²î<H¡v4êrÀ„êÎÕÑ”° Ä¤2Ë~­ìŠ}ù&¸Ç%jŒYB�Ž6„ÂÙØËÍE@èSí—âßš)ïŸ“–7?˜²ß	/FŸiawpëRD�´c½v®Ù¹Òéã>n>}\0SÿœžÑ�¾�¡ùjÑç†åBéÚ¶£[†‘ãRd‚xZ0SˆZ«ó?´¾#0»C±@5èûF�­âzß’´íSJ‹@Uv¢Cm;Ä…­ÔðáÂ­ÊŸ]ûÔg;Ç¸@v\;¤�¬$ÑÆŒés^ZGÓíno¤Dúð´c‡ ~?QøÓÚ™fXºŽ)l‘êŸ”þ`ó_‘˜íÒñ5M*åÚ
+e�ÊÛ³%*E¥yu9fÃé):Is/¡?!¼¹ç»½/B’¬Û½ƒ+Ël±Å%¼tSêM!7
+QTøågHL¬7pðŽoH?š~tó�™´}gA‡ËÞRòàº“Ë—²´òÍvÐÛ™žæHv–AÈqþ|ØãÁÃÜI›,+¹"–häâ�1ô5C•�©„7�"ñðìqŠjÒ›ˆ'žäª¡!‡P2RcKÒh9*=IûT9D¤ÀsSe�†B|r ³*–ð¸WÞ¬G!\™*ýú°»7|ƒ5	 Ð¶*¢ÑŠWaLU
+qÈ€Ðñ�|UŠ"åkAP0czªKs‡&´ï¶S(ÛlJBó%Æ—:ÚÞQ³÷<ÀÉ…¸JÞ šœ:„Jj·|Å”HlUøxÛìøŒƒcd£E.PÞ4j5Ù<r$2
+Z%ÝÅ¸Õ-Ð¼áHøI5Üõ²",íQ.í­`´úäè’Êx[† 3š NÀœ˜ŠY5¬ªÌ¬VŠ"¹%FÝ?ïK'í(éŠ¢ìlŒÿ„ñ¡Æ•4‰
+PNØ9 –!¨Þ³£,mã–Ã¶™N™µö­i§[´×$H¢¥‰ÓÛ�°2xo›<ós¨+ÛXr†Õª¦QÕ³'7ry<¤“V5'½s6ÀjA�]þymS%�.‚TÚm¶ÂÅìMMqW%éˆãZìNY¦n]ÎI‰N- àAo´<rASBâ›`,º"£s‚­Šc²§JãÂ¨„”‘¾ÔÉªcox"eêZ»¾ý¿¿Ý�~€þB-¬_—Ö…¹ÿI¾–âPcj±Hö«Qà¦"~œßhåÍÕëô>0ÝçßŸÚ	ó†�{i–Ý5ÚydŒ
+Ëm-T¢
+X;{fÃWª‰�³K£Ž	Ø/‹®?-üÑ<·?áÏ7Gu¢_ÞÇy¡Åql…F�8vHÕvj˜ˆ<ŽÜºgžêÈ	ëðpÊ—�ù�¼©ùw¨ê²êo7�5™¤¤[°Xle†0VCÅ+´¢§©÷ÁˆeÏé­‘Æ!É÷wüãG�ü±7åæ£ç?Ì­.ÝE$UPzWZUäLð¥¸—‡"®œ\�Ý7ÜWc‹Eà›,rj‰ö�.óAÓ¬oµÄÑú
+3KÌV(ª*NàPT™<AÅ9‰üØüîÐ®?7?(<™¡j’Mg¦\�{Ì÷öµH—œR-�¬ÍÓ“”BÊe�èF@Ì5ãÜ¼£Zº�QóŸ™ÞÐ ·Kù8,d¡ÛÇ®BMä'È:°®ûõÊÇ4‚Œ‰ý2ÍåðÖ¸'%)bFüÝ•¾Ù«¹M!
+pB@T
+Ž)&–PíûâÃÒ"ÊðÝNÛ'ÏTKF“Ô`ß:ÓÛJ®/¢‚gŠE �JœJ®Vy‘NËÌU‰)Ò¹C0dbÁ	T¶ñ#+E;äYÄ®tõ��k¾FT[`WÙÍw¦8hØ˜�QÚ™‰“†ñ&q§êp]
+øÓíƒÚ¹�<|-€§±
+Ÿlª’�„˜U¦ä)Q‰æ ¯Ó5;­6ø´Uäñ½8:÷§¨÷Ë"›GyŸË¶²¶‘{$|$œRÄW`£Ð¸R xo–€™Ž1P;åRæÊÓt²
+ˆò
+ð€‹t·bÄ5—ÌL˜­þ gc7ÃþüñöË1ãâÝªsJXô^¤ft!MVñÍoÍŽµ;M<¿ºÿuZVˆ£ÄûàÇ‰¬É(ø™9»ˆv÷þ™
+1Q’XÛ¯c“±.’Mè;äÙ!\·}†H1h)`[$‡-µ0Ò«ÇhQ_|(%2‚N˜±´ÉV½±4®"QCL6ÉEh2$ÓÅ>1ðäxÕc©SC¶LMiL³ð?#÷oÖ�Øý,„È)ª}•ÿ8Ùæ»{ß,ÜùE¤[[­vx#v¼Ô˜ž_Íê¼§Žgã™²‘ÙôÒù*ÛÌw)o¨ZÇV•·•ÓÞ }9²Å(äÙÑë²Çô7y§Èv¾YÓ|ÿå+ë¨t¯0ùŠÕ¤òG™T;<P 70Å:T½+B8ÑJ�ò�·Y¥íèñ˜æiÓ%ò¿™Ãkæ½¬]M,ß[ž)åº,RR`cûÁÄräÄp,7f«6§ž=½Á¨–Séz«qçÀö÷�[içË Åy¨j3Kyv€"•Žt‚	~O…ˆQJ�³šÔûCŒÝÚGI9nQ^tüÔüãó'“{o2Ù�ÅÔ6ÚÿøZ)m.}–&�'çé8 )vùeš~×ŽCG›^M7|ý{©iV~s¾—ó\Íå¨¦·“J–óƒÜ…hÕi&5/ÌU�zS7øŒd-£‚úkòâyL7:„¾µÕã™[zñ¯Mò!ÉzÇ¨f¢Ô*tvöÊ‹uäÒ¨‚‰åÇq�Žå¥Âê`„‚„íŒ‘jÞ¢¸RiÅ¶âz“ã�d
+E»ÍÁ9z›�zjâ›N`‡”a[Ó·Š‘JïŠ¡LðÚ(Ýê¼ÛK.þ¨Î‰"+šÔV”5÷ÀU×21‘>ª±«
+ˆöé�!bÛ<ÉY�90àr%•!®4þõÀ©,–¥‰d	V£ÓÚb!ý£ÐV™q“RØ­¡I™ÊÎÿ°‡o‡¥r¹ââlL4íyÖÏè�Û1g†›D™„2+¨<ƒ×¸9‰D2D€Û�9mözœt¤º“Ü[ÞióÄ„Ç4¾�Ò��O†žÕÂ-˜{[j>[ºòÜ2Ï]CTfQkjµ_«½¹p%R+hR4,ìI?ð¦@ó[[syÆï‚Ø°�FýÙŠ©>ùd!Äwa)%	1-@wð9�Ž<.<�££j�IùåÌ)ó§2¦²
+ÇL°
+b­{~Ò¤J€êGË
+	KD„�ÎL(¨‚9<�Ë
+%|Ð CÄ×l!d8š�òaQ	
+>,’ª€MX¦6ÖÄîÝ°ŠG”Tè02¹‡èÆÒ Èå�ë�SyJ2†ïŠ¢&~N´ßqúòAVH:“Ð
+î*>ã’�Sÿ"k�åíWR–=I´{�RÔ®�¨¨ZÃq7¢Þ“�Ç">=Ù‘	’ÀÊž±åÿùÏÏ+ykX—Ë¿™ºþ™wo1‡ü]¥D^Òdõfš›˜fw6íL»Ä”77Úšiæ>”Çó3þs¯òRÓ´«ÍS½ó¾»ê³Ñm4ùmœI(t,º„1ðU¯cÔŒ¸êç8O1¥ìlÃSg“Ëm|õ©~cè:·›ôxm|«¬Þzš.Ÿw0·õ4Ë$�4®'ŒPÒPìMjËN=sÍ;{Va-î»ŸQì½‡z=•å¯—´ý?MÒlÃB±æÔÑÃ9>'2Š—æÆ¥�Ažgžyg2n�ñ
+˜.±yò§æšu+]3Êéeõkëm6©{,fØLSÓW�<‡”MR*Â£:nÆãŒ€&Ïãð{¹Ü,£½ñ×‘<—uu½Î¼‘[ÄY�a_´hj¼Áø…v¨9êÚR|7_(v})¤·Õ"ô-m•U—ˆxÅ~ï—,ÂÚâW€ƒU  ““­•|÷R1Ž2	®Ãß 6E*�*Kµ#J}€i_lNìE
+$„ž« ‹ì4
+~}ò%*âÖ`ŒZ±+ŠæAÉ˜x(mS€”Ý3PX®Ôþ8¦ÒMFîŠB�kFµ‰M f¶W1H�É…9ƒÛå•’ªÆßpzœm*Ì#ô9(P€FD–JÂÙ*Ö£¶D•K&…!S%6å±È*\ê\úÑ7× Fì�'4,êÍ&ä±É…Idµ´Ù£4ýl®q¶è�“-;TšÌˆÜ–‹§#Øæ4ñ¶Ä³Ë;èå
+UÇMÛ(”i‘DÏ¥ÜjßTú¼È'¶˜JŠæ…€êïˆÙ)Í”#Lµ˜ß�AÕ‡'}¸ò4
+©)¥ÅÜ˜ýèû#á‡ P¶§ª$†#VÛ|·;D¥I©U«lÃ¹ï™‚8ÄÛQÒcêteë–€ÅŽ*ùÉ¥/—5)½h	ú1B�Å]¾Œ˜*ˆBAmQª¥…<q
+¯J»Ð×&Ú‡îÂªÊ¢µª)KÓa�Z.Äï¶*¸V “Q�S;`’ŠwÅQ
+=±VŠS$Qd^4;‘…HJõhnmåx¹�”ÐƒZ‚2@µ˜¾jóf‰!�’ú?]‘‹-Áø‰¡¨2 of¹@<ºëËð	–h-¢fŠ¤ƒäFd‰\pt÷ÊÏÍ8¼‘m/–µmmÊº’¿×RÖJO8!¸•V=Ôß9.Øì?Ìî9»,:ŽÔ^Póïå
+”h|£å-nI™•Š_Í%¿¨ØÉr“­=Â�£8ü¾ËgÉ;™rÆ²ù <àÚÏŸZCTdµÓ4ÙYôí
+Í;)Nb2YÝÊ¤– Â®t}ŸØ�Óq²d2bÊßOOQdxÃûs Ç.œVI£ †¼2òØü¦^Êí={¦�V6X¥#“øƒ–ž[X¤¼R±’°"÷Û+ZY%úG!‡Ò©=&¿Fc ä’ûí3§¦ÿbkAãóÀP«24ª
+Å×¤l �ð ¥²Ý)Sm¬Àu'¦,,¥[QÃWs€²‰GÃ w›ee¶‘|�+è[§¶+Jk%³0ª×žÿv@²U›™ „ñR(Ï!Õ!f¥l%¶„#…ôþ‰ï†’ÃåµÔ#vŽC­F4ª?é»¬¨@ñÅ*-×pzàl”Ú"
+8Ö£"`�iJ;—±nhÄ€~Çl¢xÙñ2k-SÖ’ÞH\‰MGô>Ù�ÀÏ‰�_$š¶–×7×$±Š*/@}6WîÈQE¥7sÇÍÌ$s^¦ žY[. ”�IäXß3!
+•­*¯±É°rÅÀÔž™n£$Áó—Lºš[¤)0ˆª²ñ§A’¥n›Ô *!I§Lµ«&4¯^˜¥“Zië<€± qÛ+UxàH§™s¦Ø.•[oMƒ(»cÆ©TÊ	ÛðÇŠÕ|JH¥1@Lmà1|}Î)WŒ³3ÛTÚH¬Å	É+¤�PTu¦CúeÀÞ¢£ÇcZ–“opÄË5ëQŒdXÓ¼ò–ŽCJm…;í±ËDŠACÁ£é–ì¾Œ
+².ÉAÓ™HÝ“i
+áÐü?f™�3lÆÏK7–v&9£dJ^GjÙ\@	â¶;§Z�Fp’ÄÏ.$ãC¹®Ã$"-¦éš­‹êV‡‰5fË”²äÓf²´,åbvTŠÞÛ©ä:ï� šk{GÓÖv¸›Öš_ˆÐÔlXq5bÖÍ,óN@$ dPM¥“Ï}�Ì¦þHP”\^*P‘½(7*mqÁ¶ZrïŠU“rô#KRjÏ#XÉ§íxä
+D–¥Ì×,>+×l�mŠv‘Æ#Øi¹ÈS2 ÅÚ€mNø¨TRŒØª•MrqU	±ø€¦,’»¤ÐtÅIBG~¢ƒZŒ¶!É¯|‰ÄètÿIƒÆÜMT×+ðÙ‰'Kªjn,åoÜ„QAß|%$";¡*^ž`€l¢ÖBkMüFK…AAµË«ítú0S%D»v4âGzà[G,¡©¿^Ù&%ó·ÖÚ™’Ò[VåóÉ##^›bªÔöÂ9 ªq*+ã–…2Å7‡¶4È2�éâ“‡§Â¿NT©�¶”Ê]/3¾Uí§,©Î�T`àU¿VeRHÇ†•¸ÑÁ¸ &@A]‰è1dc·aVu •Å$ $â’©Pw;áS)#»êr` •±(UzîÛolI­Ze4 ·ŽD$¤—ºl¼1ªå�@bÂØÇ)%zl£"C Yn™¦0´7ð|SGPì¾ù\‚-�ê×úíµ´­|€-D¬Ý#{d‰’i6öÖ6–ÌcÿLôëë¡ª±9ÕÉŽižØ\‹so4òBQˆ.¤r§Ì±%
+sqyyëFãÓYÕ›÷j*)U®E‰)Uíß¤=1"ÉÏâg»øaˆ	RÝ“^=HÉ¥yšøäITÂ•do‘eH‘™(ÛRdx�GÝ€–@#,xLÀ8Üxä	g†EéFª9ÎÂÕkMñ¦$¨ú€T�°R-×Öñ_)]¦B �C�%j?.§BÌµ'lY()^ƒ´ÕÓ^‘óˆ®*¨±n(>œ•+m	'|i‰+ã‚›ô÷ÃHµaø	biZî02âVGÄü#¦Ä¡õz²”�
+	|Üs@7ËÚÊ2$¡é’ZFÄ•>ª¿r<0¢šcµã¹÷ÃÄQH9k¶6R�i¯Ð~8VD&+Jž‡l
+Ô2³JäîMjrTURWpÃô`*«§#É0^ n£²xìÌJXF¬‘ž'—oqŠ f•jÁžª:Š¤·-<¢9Ýõáï„+’à: âA®ç$Ä¦
+C.Ø«H	n”ñÂJ´±óZp$¾Ù$ZIycñ"3Éw­2% &ú|ÑÃ§Ïi$4Šeû@oS×èÈ‘ö–6†È.Š_Rñí‹ÿM·¶2«9žŸÝ?Aï’dVšÞB% ^Ã¶ÏëYè£
+‚œ§Äî2*‚ø€ä;aV„îÇj0$Œá�QÅwéŠQ¡æ‰8Æ¿»"§¡ÑŒÒ€Ô¦@³5‚ãjäSHàAÈ±[!W¶Xî—Èq´…%‹‘éÉ�¯èµzà,Õ.ÝFA
+ÆÁI¥M1J
+bbÕ ŒUèrA’µEGoN£s’ðÑÆªb
+µ¦Ýñ1¤qÚoÕj2Já’@5#®*´‚6ÁJ«ƒaWÌ1†Z;!^];dÕ’
+€M6ªÁÉû,IöÉ „\BÕj�>Ö,Q$¦ƒA@I@r`!bßNØéäe¡ï�&“û:Y]B¥Cì¨{W¾J–“7ÐçŠá�íÐ{ŸªDÂ-´Ée¨å9vå•¦”uþQ�‡í
+‘Š;gGzÈvÅQ>¢ÄïÄ|-„*ˆ�\—ˆðÉ€ÅY¯ÂI4­Ós’TU³’Ä°zœŒŠ«Ïn’SŽäekh«º8Ÿl,Në¡ck"‚(Šâ´Êù…¦R¦)×^¯ÂÛ°èqM øÎX¨­0.àB�ßIÈª¤0+ÕäáP‹ŽÎ‡î�c�’‰µXÚ»3×¦>ƒ˜Àu(u8ªYidY$çPÙZjÀÅNþ9
+M®€šñ#§|…òô¦F•C€aÓæ�PÁÒ½<0¥ñ(ZmÓ¦$¥	V-B6ñÈª£F¦”ÉR¶-CšôÅQ‘Û"�ß
+¢šxÀùöÂ$QA)øHÇšÐK‚7-ð¡â(wïŠ´ÀFBÝOŽ*¥PqVëMñWÏñjjÑë/Gâ®MZ6¶È
+d'‰ø¹ìÚÅS½.ÂÚé”)¥{ä•Rî¬½HTìeñ8±))É$ËÔŒ•°’ûY
+½	?ÍÓ`ômG-Ì%ãiG`¢«‹G§ýVãnéÉE(G¶"L,¤W2¼R³‚#¨ÚCã‘”�XÕüÒLâfVøvïL…ªY!�þ÷¨#¥<1´ Ò¡†ýð"Ñ¼K’Ñm	=1ÄôËC(•e“¸É2*Ü‹\�TW;(ØwÈ¡0…ÕKbªR]~ð{b«£…/%�“ø‡\U•¦Žn"°	0&å]Ú:ýž=+‘“ ¡-ˆ·wŒ|B
+¹¨®ù•A€êÄ•¥w,½˜¸ÑÈb>Œ2
+¨°­J)mªqM6êðV7ÈÜI,¢�XéúqÈí’4€•-ÐW®ÊMêÐÌ¯ÆIV„P*ö¦JšÂKJ•Í|26"bøª¡wÈª°B¤|ò%W²rõÛ!ÄÊ—[ÂX�)F„âiJdm]Ä¡éßUílxŠo’
+±­ÕÆ§$B- ¦•ÈÚÛ¹‘×
+[gªï†�ƒu¨ðÉ1C‘ÛñÈ«C¨Ú¸-Td‘‰ÛzeŠ¥ÎBhE|UW|Í‰¦0‘~6;{å”©ª]ÙÜU�	“¨©Ú¸Ò²�úÊ'ŸÅâÆ”ùaU
+Rõn^ Š.Ãß%!ihzä‚µnÕ÷Â‰rDÙÆæxÈ$ýŸV/ 4
+ÛK·Žå¤Y%uFÛÀÜ
+‡]†Œ$S\3Mêr2Ôx`V%­Ý«ÊÑÄßâ:×Çƒ	;V �¼~Yb±�4ÃJZ¡Ç…Š*9
+€éÂ¬p®jù`	
+ˆ­@|;aRS¼¶PŒ1¢Ö´ªƒ­~ÉëŠ®Žk$‡¢¨§½:â¨7g2·_³Š¦z}õÔR+s;l7ÈI!:¹½`…Éß¸ùä5*R1AÓ§Ó–ôChàü9Ò$R¦êÄP
+šôÂÄ'6ŒŠ‘¤LYØ�\‚¯Ï$ÊNÔÏ9¨Œ
+¨ |X€†ŽÜÉê8�`<FD–h¯«´AŸ‰úÇûCÂ¹D-¤®„³
+ºøäeÉ\!h‡§N»W+,‘¶Ñ9
+µT¸Dµ¡8R€©¨¦þ9!J´dS‰
+ã“˜©ÈëÓ$«y (cpÒmÊÄìp„ÚÞ,ûâP‡˜ñR{åd*	QØì*|¨´€íASß,VÝ(x÷ÅPïX÷#|™<ì>Ù­Ol¾˜2="Õ%Q4Ä¢¡{Sß"ÊÛ/ûÂªJ"“@½ÏÚ"Y�Å:!êQ„1%*ŸØeÂ!Q–à†pE(Ã¶BT´Ê!Öõ¨
+Ác¢€v¦Tn’6OÌ3˜Ü§9
+�­ôd"HA’P²µÄœÝMI®Z
+„Ré~(1ˆJšÑþ’bJ·Õ˜
+øâª
+ð7wÅ\ “ÒƒÇ$ê€
+Áè2%Wógûò*¯Ð!=ß
+ª¢Ì¼8Üþ8Ú­›�¾†*¨%Ž:
+°…\Òz¥wªãJ™ Œ‹ ª°ªï]ñUJÐŒUP†j�TBC+ 1)$õ Â¨v†jï±®äâ©–‘pö�MëF_›rU]»ûåe�T’s%Ù•FÓ­dWê)ï�-G¼M±N/T5ð9¨—šP~"aÓ"UR9�
+uÊïuD˜EWpB·Bzdí6Ð�"¨úä�B›n£BM#Pí„  Õ™�Ðö8Xªs¸âU‚€2)U@JŸR7¨(6÷Å(WFmˆ¯¶DÁUßs�
+ª‡HÅ©8Ò¡š&dm�Â nåN<|vß
++ãkb÷ “×,¶Â>pÂ¢‡"«‚ nO|RénÒÂHð®)´ÖÒ@ÑrJ8ñÓ`B¡f$—„Z=@ZÐãIL!”«Æ¢¤W"¥:�øtÈ€Æ•"�!î{dí’«?¨)Û‚µ)TÛáB!çfB;Ó`1T Á5Ütùâ /^TßdŽ�—`N(‚Cl1!Q-ã|Š¯"¢˜LD<7Å\ca¾*‡ô$vë¶L*qikÄ|_@ÅS¡Mlƒ%LUªoááŠ¶ÊÆ€ÓzôÂ
+¦º|ª‡Ð�ÙŠ7&¾ømQWnª)já�e"¿æp¨(•ö,j¥2d!íôà´¸¨£Ré‘UÑ´<YH£SbqUxÕ@�Qã×#[ªè/e•Þ"ô?°ã~cåÛ'Â®cñTôÇ…VðÃJ†‘ºí‹ÕºÕêzaBbÈ´Ú•Àb¨^
+ÈÓïÈÓ ¢œ‹œ�	^ª:Ó
+¸š‚ÃïŠ¡èÈI±ðÅZ{�*zŠlHëòÂºl,Æc$ŒFüIÛ	WÆ6
+AÉzŒU7Êô”“S°\QHˆœŠž¬7Å"áŠ;•¬£`z�Bchc†ˆ›Ô`*ˆ*E:ôÂZï‡|*›EPÊÔ¨ðN^H+·¾ETëûÀGÓŠ¢Ãª�’ŠÞ`ôûð«Eˆ+Nøª´`Ò¤S®eÉ}Øí�‰*lþžõÂ6Tm‹‰^‡	�TñâE69%Cqjø•‘TB%qUÌ*0…j*)ß
+ªeÌ…
+à%4®APº¹ºòN*´QŠ¢c¾*®¬ƒ�øâªÓN¨†Q×AÛ^fSÑßN©ªO-A®VÈ ä»’i\ŠPk$’¿0vì1TævPkP:œ�TK=>ÔwÉª™~[W¦6«•w©ïÓ%d©Zb‡D¡N¨•+ÜáVäQJ®Æ�±¦A.5­\R«B8UÑ¡mûcJ‹…cVAQ]²¨)Ö ŽÊ´ÇëÆÕÐ¿!Äí^™+WÂq—·uzÔ?ÙQŒej�Ç1uV#�¶ISiP
+ÔTý¬PQQ¸w!7É(€
+·±ðÆEQQ#=Bžø…L•‘à*:{ãjŸ[zt,zS¡ë‰*‰ä?˜*S©Èª’/©?ªîµäƒí
+nj:�±æš(¦bkP
+Fýwi‡Àx×
+�hˆØ1ßr:d‚y"QS¾øÚÈ
+ãLP.ÄÖ»déU4ùÄn2&!•2t”H65§\�
+)u'½;dPª:S¶*ç¢¯Ë@zŒZ£öN,‚ueó•†$2JwDñ®*ÊD�âsypmn#ø„$R¸ªêt.‘Ê‡ñUÅGN˜ªÎÌvS¿|UT1¦ëOUcŽB•ÅPï	áü1U=:fCIŽà0¶VE$Õ&mú‚m4ŽÁ8|;µÀ•ÜÕUÙFÔ÷ñÉCŸXŸµóÉ‹UXÙjHê0 •Q@«ËáñÂ…)&ŒÛ¯LU®`�…ºâ«‚=w>ôÉZ¢T=6=†)
+=~(×|Y5è×‰'pEqTJÒ8É¦áqT,JÓ%\ñâr*¶^&¢Ÿì?ŽF•MJªô¥2A_8þe~ZÝùU7	Îë@Ô¤¨Ü´eŽñ¸ê=³OšÃd£O6†'?ü1}¥#3`l°µhœ(�Jõ'.áaIµ³,L	Sîk‘*S(¡2He(Ü:†í•”#‚7%*FøÚ«°‹hiãì2ØT1ó‘i{gaw¨Ák=ùSg²*«p71J±×©µÌ�†ÂÕ¾‰Ê{ýÎÆ÷Ï`Ó<�m{p–èš¬Æv/'Ù�¾¬²ú…¿ÊaNäegÜœZ9H[Òçÿœ\¹‡ÉúÆ´¾}¶Òî’ÎK�ãQt·²å–õç™È›lÇ¦ecÇòÑ|#§yÛO‹Q}ïí.£µŽêÞNJ$&ŒC7ÚR+OžC&*i3fÿ¤c¹�^)Õ�ÂÊA
+f!*kmÅx�ÕÊ¥:gIÒ:‘±ÉDÛ‘*A®Ù6)tÊMB·|ªÑÌ”ý¾ç²šÍƒ*Ðîç£FRŒAÚ½0 «¥E˜¡¹£<v®dÑ%¸µT´ë„N´Ûû�4	m˜«¢š³Q�>]p…j÷V¹»pó9,ßµÓ_lÂŸ	;Ôá¥G‘_ïüGÄiNF‹÷�†4¨N�A‘TX‹z“QßTôQö±T4Ç‡ÁLU-»Œ"úƒjõ¦i <Ev"¹Y	OÅÂ…?Ázd%ëp$;Ù ©Œ1±`HÿZ½¾xX¢n‚P
+øâ„½Ÿ’�Ç—¿†ª"ný2ÀQ£l*;âB¢w r{ÿŠ¢aä&´p‚¨…!ˆ5¸R
+ù'Š!ñ}£Ú˜²QYD§¥TdZxWCÆ!V´c¾ã¸È«Õµ�Hó¦‚Öš„kqc}o¿¿H­üÃ®sÑ&‹•8ÛóïÏIÔ<‘­M¥ß;Ë•ý{CÂhAØm°+ß7zl€¸ÒX”QŠxv-™¶„Á#(Q•êvä	bSû)Ë7@S«1r´'vvlÅÖIœêWj�¶8@µN¿$mt?ÌŸ3K�5M1Ëj:lSç¸PiÆ"Üôé™p…2 Î|ñùMù%oæï!j?˜:ÍÏ’u‹½<™<»k x§:w¡4aä•]ÒRÕo…Åhh»¼åáL¸y(þjÿÎAyÍú·–šÊÒ-VÖÂäÉ> ë;KfRåêÅJmÄW4š¹NgbåâÕÈ—Süæ?˜~F×?-Çœ¥òÖƒæ¦ÒläŠ[y'�\GôšÈêŒÄ¯!�((N:\’�Xf�Ë»àï:þWy÷ò«Q¶å´¶Úmì®š.¾ªÆÒò‹ZC)Ø••ê;æþŒÃ‰à˜=çE�ÎþPò×—<ÇæÝêÇË~pD]Rž'D‘å…¦‹ƒ°
+Þ¤j]@;¯Ä6ß*É§I4ô›FíÄ¨á•ºüs&6bIýœÞ¡5È�H$'mºQH	“~¼
+B¬V•¡-·†(
+ªž˜²Om"õIy?dT‹Û°Š
+�ŠBâôRÃ"”5Z£–šS¸¹A.A-UëAN•ç’¥c¾iÐ´Æ+¨êpDcÞHä•©Üq&µ§l�„�F<A(Ó?4|‰4Ð7š´Ý>(Á!¯.c€0 ñPÌGÚí—G�Dx�ëXÔÓÌ^IÕüéeyú™æò¼—1¸�ÉsPÌ@ÜÆË:€Þ!¼0Ë£Í”O%8ï©*ÊKƒÆ£±®QÀSHµ»�¨ƒ^›äH¥¥U“â©ÜŒV•_�Ú¾8–Ü“c¸ðÅPëðIJÕS±öÀBQÌ¼^•%r¢#mmApÂŸNU=Q QÉ@¹ú2LJá«Ó¶(PJáPŽ…I¡ë–*"6¦ÇÃ®*�†$ezüØöÈ•LÁ�‰ø€ûâ¨%š8˜³¡ôßdSšHž„nk’¶n©.€
+±µE’26«+\”UÙxäç„zA>Só=ÙkbîÚ^¡)äb mWª±ÛÛ1µz`wlg³×¿0£_<Y}^dp«™,À ¸”ªIêV„fž&2Ý®p½ß&ë6³åËç±Öìæµ¸QÌ	T¯%ý–¡ìsh2‚ãH‡,üõ}6tb]ÃÔjì	í’X?œ|Õs¢B¦3ˆèÅÌòKrŠ¢²ô±v8YgÉìŸó‰·’u?Ì‹Ï1¾Ÿ‡-­“^\Ù‚Ïo,‘§#r—1«txÊ»æÀ�ºaô¯ó§˜ üâóBjWö6Ñh>WžîÚ8æ¸2É%ì¬†dzP#Z¯RE�³K¨Ô-“ƒ&ÊSÓe¿Ò¯­<³wcek	�,ØúQKB¬â+ªŽýNUqórd"91Ë}SC�NóV­&—mæˆž5Ct…-ˆA$”VnIPK¶�qd²|¥æ->ÓË—�™í4ý{Ê*°Ý]i÷\¾¥y(<©®�O²x{ôÊpÏ žÍ:ÌñŒRóåÝ?þs7ËúÞ§¬­ÿ’4Ÿ,ëwàÝf‘a�+3$­lÅVhÇ«é°ªƒV"Š3¤ÇÆc»ÎKY./'Ëš×’|íùKæŸðgŸ-ÐI$~¶�ªÆÎ-¯`V( 
+±R­L¢xÝŽÂlÓMuØrî+˜òåÇ²>«×*(]!ð*a/OlV›PUQSÈÓ¬•¡Š+|ejÙE%d¨v>ÇE!gŸ‘Â›Wå‚‹h�BúROÉÑy­	èHÄÓ2aöÞ�´çôŸ!Ÿ(^k>f±²’îÚñ$´¾»^E"Ø �@êÄ€k™¢X ,–©ÄÓáùÊ_ÈÝCóó‹Ì^kÐ<Õ Ûyjõ­þ %¼–I Ž8•$d€B¡w­’»Šùv–œrpÄ
+¼SHÿœjÑ.åÓu-Có6ÚóLžçê�
+¥‚z×Ee¥=I.«¸Š¡5ìNQ“¶áÉÉŽCïßÉÿÊ¯+ù{ò·]ò
+Û_Ë¡\ù¬yž­t«;É%¼1$<Ö!ð
+x‚OZ`ÃÚØõ˜gÏ
+4I}m«Î6ùPò”Imnºn·<BawjBð‘Áä*]wn£°Í´tÀÆÝíÎ"_ùÿÉšçåž®º^¯lW…òéN�6>#¸ÍF¢2w:MW‰bö÷Êåy0PÛûe]Ó+DúèÁèv´9�±½1U&V¨eÜ×¯†*šÚ#1MýŽ@²–Ú$j
+ûåiDÍTZu©É1%&™•˜ð?|�PèMW˜ÉSãŠ´Š9(cAMÆ*˜Ïr‘E´mA!
+HÞ•îpª—¾•¤PF'æÆ„ÓTžk‡š€
+?dxxãJ¾$-G/‡¾j·k×ª
+v
+
+ÕmÈ®Ã¾P
+±`kòÂÉù“<2‰V¼”òøzÔeæ<Ac:/º?çüç£yŽöÌW¿
+¸É¦?èîƒ¢Pî_Ã5Ú¬fg3­ïÿš_—Þ{Ò¨�¤Öœ¼íf?iJnÉQöƒSèÍvÄKv9`üøÔtû�R½Óo¢»·sñ8¦çj�žo1HL8|�UpA ìÂ {Ó/ŒIPô›ÈŸ/~i~^k:½ÕÄ–Úõ¥Ï
+æ&û&/SÖB£®ë¹§Ã™0‰ŽìŒADùwò»Rü­ò7˜t­I'»¿Öâ×š=”Æ)�«,�Ä)<A4Þ§lÖë52âæäDD“ZC­þ‚¿Ð<¹jöúÃês%Å‹ÌŠéïËš3qzm˜Ü`‹(”{ž‘åO&š<ÓÜI«Åu"kBá[ÔŠesÈñ¸%}ÔS#ãDòiàóFù•´»}N+Õô›è<¬Ñßyª)�eIP¢IèÛˆÒ�)å@jŠv9n<RžáÇÍ©Ž-­<Ó,¼×ùÉ©è�YAõ,hÒ2ÙùfÍM±!˜C�MxŠWzf×M¦[¼×ik'!è~Á~]èºV…ä;Ë“èÖü­!ás‰d©nüÖ•"µ9ÑB0á§‘Ë®Ï½¿5ÿç=µCkù¹ù;åÈœ‹ëM/P»¾¡$%½ÍÓÅ“NÍýÙ�ž=O`ê'�zž¤:30©5?Ûšœƒw¯„éšÅÈMmöÊJ’‹XÙ6™#",¿kpØª‹¹õ€zŒSÓsÎ(V€ZŸ¾B­(9—á?äÕ®ùtqÛpˆCÙXÏ{mioËq,‹0¨$ósAËéË m÷'—'|¿£ùI´íF&¸Ö5C¨ßÂì’#P7¦ŒŒñ‘áìÂYCÂ¿8|Ç¤þ\é}•µõ½¥õ½¤±èÐ_8žYVº¬tyž„€i¿¾hõ˜äÖ2ñ>óÆ»æmKO²óÖ»ky§^Kmè.iRÎ—Ün=9îmÐÈ:�
+‚B�­ñeZm,:–";¦ÞRò½®½e§ë)­åûÈ'õí-Vié;´‹!Šg¤�ËŒ›€O^ùvaó7Â6õŸ+ù¿ÎzdZ÷•õ-Vón»wxšêy‚#ÓãÓm�¨“HR©fj"îß<»E�1Þ¶´Ç$HûåËøï,#)p5ø-ƒ0<•�1Ä÷Ù«¶u˜òŽ/‹C–*ö`?›¾G³üÀò=õ‹D²ßÚ“L˜}¨æE,¼Oùu¡9­Ï€öÚ!(D?,m–HgšÒãà–	9Fßn3FöÍ|ãNöÂjŒ­Ó ï•3EEfZ¾à{b©�£R¼G}ñTâ‡Þø�¨´_E�
+B2²­5Ét ‘NøBO&õËB¨ÄÇ˜»SH–�€M+LUD‚T½hqT8.Î�ÜÔýØª"yËûåä½
+|+Š§’ÚEñI�_ÝüéŠÒ[¢�|pT¨Ao‡³uÀ«1ž�|
+­ÄþÉÈ°ZÎ±¯#Û©ðÉAùÛ{n¯ãQ™¡§u+
+NÿJ¼·¾±•í®-\<2¡ø�‚)•åÇÆ)ÈÁ"ôëòCózËóLƒMÕ$ŽÓÍzt$Ì……'Q±q^¦�FhóéŒM‡:Á?:ÿ(£óžžu½ƒÌv
+^Pƒýì�wâÃ³x`Óç0•&'ç¶¡°™íeŒ$ŠÆˆ¥<B±êöØæÿA'š}cÿ8çù«ä½;ôw—<Îc²’ÚfmöITCëM9øeZ÷çÕ¶Ìøã$4Ï-<£þrSþr–×Vó~Ÿ¤yGJ’
++Ë¢Hu‹ùàá=ô¼¸”Ž´øÝN`êû<Kv8òÈ–%å<½ù�Ÿ¬iWï¥_YÝ¼ú‘‰½+•iGÎßkašÐ8ö­�œ@”wzøW¸Ó5o2yÃÍ’iñÚjçV¿óÎ«%Ä†á%TrÔKy9Nìõ€åzyÀžMRÄ!ÂtÏ(k¿™žsŠêãCM;OŠA�¡iÐ'ÄQä),²,g™rç°	µNtzP)æ5Qœå³ô¿ò¿ÊšWåÔV:TI×™µ(’kÙ*–P ýç}‘Å@jõ=3a[5ãÒõ/¤Î±gof÷Ít‰c
+Èe¸jqýÚ™–PXø
+ð”ãgìñ3°~~oþbj›ßŸfó‡ªEéÌ4�³-mjµ%+Ô4¢V¿/|”¥aÙöv“€=+É±}b	nx€¯!
+=³(§zvI€úNwH4Ìf´ND¤*äm+Ümßª¡zo„%+‚ñïöMzøa²¶Â|Ç¬þxù{[ÐuÏÉï-^ê_V™RãS²±:˜ŠgÜ@ËÂePà°U*7æ´®eá…³¤úæ$?¢<�£yë]Òt/ÌmrÒ!qå#2$ïs%AŠ8™‹1c±ù•(�âf‰%ò/üäÎ›5÷™<ž÷ÐÚ>–uh£Šî@¦öênD1ÓáUJUÇ_Š�³V=)Ä)å>g×ÛÊÚþ·mÊm fã‚hh>Û¸§¾jpK•�ÒWä4ˆ4m?ÌHÛTBöæZ–a˜veØ�ÀtË5LƒÌ
+™¦Ç]ó~‹¤ØE®Zj6EÔ†m7Ôú©“÷¥èUøPp.9}ù
+N98º˜‰ný
+ò˜nŸòûÉÚÝ“š}fÀ$u?ÝÊ¢RÃ¹Y¾ñ�.9]:3§›Ý¡’ìËª©©·�ãžÎ26HÊ©)ïñW-Ë.®…ÃŸ—?šzT?æ_œ,í£ãnš“¼qô#ÖTs··\Õe¹¸ŽÉ¬�À‘4¤Í@Nã(o�3WÓõV¸S†ú³úN)C^´Ø¥�Å°ÅQN´5ÛR¸œüT5«ªI#1«
+*²Ô�‰KEh¢›œÉ^B�ÀÄ8€ H<OŽUlqó¨ðÅ\bá(¨ØUk$Î¡õªcÄÖãÐAÊêNDª›/·FÀ«†øU¶Zâ«�Ú½0R)?ªö;)~|´oÈ—5–PQ¸‹˜¤d+þÉ>8ÀH—	L|»¯ê>]Õí5-.g¶¸¶‘\J§‰<Nê}ŽU’"aÈÇ’ß§–Ÿ™Ö>|Ñmn=SúB©[¡ýäl£ª�¾hõX
+‡65!O#ÿœ‚ü§“]´ŸÏZ�N­lÚî�¢Íë*�û@þ¿lÈÑêkg.*~vO,Ö¯,¤~îDo¥MýtùÔigÇA×f†ÌWWµ½×ãmJ;™5'µ�”sjÈ8Š…f5;Sj�³x4Q1·B%Eï¿óŽ¿•Zü÷?˜Þj¸o-þ[èm"êú‹«z·w¸1As%»Ó4š½$I"ž�O:}�ùsä}[óë^{­[O—Dò6˜­úÊU½A¡…ô§‰ÉÛÃèÌvlFà;aÙñœw/¬¼µù[£ùëI§£
+Ffáôé_@ïßèË¸7M©ìáŒšgVº,x™ Bîw^ÞNÃœâ”	!==‡Nø º£oÏßùËÿùÉÈã´—òoòëP…õßô_7ê’,°Z[ìà*wrÛ1þRGL�&{¸ñ�Éñ¾“¢Ãeeo©7Æ8V,zŸ¶R çF</¢|·jºv�½8•_‹ç˜y%i²YDnªÕ¨ÊU]f°ë¾Ùª“°=¿#�dˆ,´#�­:WCÈvØB Ùˆ�xÒµ 5ãøÐÓçL�³ˆdLÿœ’ü¼òd2ykÎ�ªZªz�M§i«{ê=³0×ií»ß*f~�I!öl^Sò—�oôÏÌÝ#Ëö�ýÍ¬Xy’äð�Q@ô�Œ«*ven2Ôu“’Tãñ[ä¯Î{�;Îb¾ò5ž—usù“åÝ1µ#{tŒ¶�A+ðgŠàÈÀŸ‡ì•�×5zÌ 
+Û1c2/Ö4Ÿ2	õ�)k2j6vÖ"V¼©‡ëX�ÛðOÚ¬„Ò»ð>50ÖcÃÀ$%~_ÓµÓ|¨žRò·
+	æúˆ¸–H/­¿~Vwu`Áj>/–	v†¨4þP“eõçä¯�-¼©w{$ºÄÚÙÖ�¤&âPÞƒÝq’‹ðÔŽ#5øµ†yE0Õc„!vúßò;É—±~^é^[Ô,ä–m<,Þ¤`‡/lêñrc±¥Ûi"eš†aÄ^ý-»ÛpúÊix¬’«ì(
+_ò¶Ì‰@õg
+`&‹ñ‡Îllóßž5X'I­.õù^ÎD5`±GaOÓÂÔ
+v˜�„æÊÆ+Ûdõº¯Ùß0\€iå¸íï…Þœ~©ÌÒP:’;ÓÛ4UŒG¦Ì$áI•…|F*¢ÕRéßCHÅž‘ýžÿ<Uoý¸ªk·?| "ZÃpÛ"Y"‚¨ÜvÄ*Ï«Çm]ëÏ®JÕ3¨I˜õe!~ŒmTíT“–ÔïóÆÕ| ×n�°*Ñ½1V€ ÔbªéCRp€¨y˜
+…;*„¡=é€«àû„-öE2ö”	…ûŠà«b†1{ýù!
+3!ùóQò½gªÙ³Ir­Û‚xÈ�Á,ÇÔaf»¿L¼¥æÍ7Ìú4ö”EÕ•ê�­Ú=9DPÄê|OŽsÙ1œSsH|mÿ9'ùºK\~`y>ÔÉ jÖì!„²žO÷xQ¿åñ(û<«û9ºÐëjœ,ØÙÜj
+ä³[ƒé1&xJóª*Ã�}ºŒì´zà@ÖæÃÂ_H~Lþgèúo˜t½Í:¤–þHÔt1|WXÎMA6äT£÷u¯™:Ìq”l9:=O†w~±ù5­<¹2kþ_hÎx¦…½XÚÓ—"Cô]÷=óQãðŠzí>¯¨y÷óóòËÉó^ù§Î:VŸ+þö-:Êssw#à#·àíû`ûæ¿.C"ë»CUô¿7ÿ:¿ç1üãù�k}å_Êûk�+yvö±Ü_±Q:‰^,ë�Âü�uÁ[ÌÊr²ùoÊ^T‡LyõmfP×âC.ó4�±NåÛõæDOl1ð½ïÊúkzËªß§e¥•»ºÐþÑ'(Í;r9½NŠt¦Â¹ŠdÅ2Š~N6é•Ú£½Zí°®*à¤ïÄ�:âÅ¡µÝ«R}¼1Uÿ3_|!!,¼c\0Ø†ëM–¤ýù""^K'‘n¼ãúKò·å¼¿˜¾{»†âï@ŒÏn#HžZâ–²0g‘QâÕ³'ˆe9
+y¿åOüäÇæoåv±—àÕuï/i²]YÅåKç–k)gyœmÑ
+«C3É¹UÜfÀG�¢8øŸ¤¿—~b×¿:î4¸-ôË
+MÔUoSõU¥¸a!Yc ’5QÅ€}�,À×vd³Fƒl‡ÕGþryŸòÈšV¿2Gæ-kT¿ŠÃN²Z­.^)î%’GqÈXÏÙî3@=�É{�›2køFÏÍ™ç!3µßWÓ¼¿c+ÓK�©'vªÒ­<xæv?g1Grë§­É3Í(òÿæ'çG˜õCúSÕ¼ÁuHž+)åµ¶rìT1þé­wø½³3eaÅ+¥•Î$ôAù;æ‹ûÛ[”–¬}bæHà†d1ÉÍH‰šm@XSÇ7šy@lò:ÿð¼Ÿþrÿþr×ò›ò÷P‡M{ç�=¬š7–´Ò§ÕS*42Ý8¢D¼˜7NK™Y%NÎñ²ËwäÏ‘4ë»´øf¨–uç n¥º±>õÍ.¦¯g¾Ób1ˆ·Ñúzz0 ;*s\[î“%aÈWZ Ö»
+»âÉ¢J+	Å[µ´Û›usS\ITêeÛ¦FÕmÇÊ¸²ê/|R…šà(;ïŠ¥2ÎZ»íŠÚWs-×Ç#"‹V†ehÂ±ß·Ï¥¿¬1>™øˆÉ*ôjŸ×…UqT<³ðØb¨PZF¨;{â­ÊP
+ñWÅÆÐŠTeíHYáUØ•†4–ý^¤í‚ÓJ&ÖŒ:ž§'iž±ùEù‘}ä=f33Ño.¥hÍQ·íÌvœì0d~ŽhZ¦“¬XG*µmW‹�Õ³0häŽA¸=�Ó9Î)b“•8‚�ó�¿‘3yQ_3è5Ï‘õÙHD¥O—•V	<-POÚ­;gE¢ÖqVî»6|›>“5¡iV/Q
+[Ò]ëáO˜Î‹¬‘EÁ8©&©ùƒ©é©zýþ›ml=8ìbšHÓ€Ú´æ´Ê²pÈ²�i§”5ÜÝjwE„U-4òÕ�¾äšý9Xˆ	·£èo
+·´‹C©L(¦U=êr<@2Þ�¤yyŒé¨jì’N§”6©ýÔgÄç(ž]ÛHíZ”$pür‰JØ’›#ËÕ~ ÙÊÉC$²«¢HT "¤
+˜Òƒ¾1„Ž4¯Q�"•=%Æ–š1-*>Œ@Pþ¤…ÕÃ!eòQß$)•1í^Ö¼™æ}?Ìºóé×ö�ÄqH`’>hñ5%+U�€GN¹“Œ€Öy¾§ü±üµÿœ{ó¥µþ­£yJÆïó «_ù£N¼¾¹»¿k›·™ÞäC4ÁLR3¿âT·!û'31å¤JD)ù»ÌzŸå?šž¿//#ó&©å$š-kH¶šEŽÖÚãÒ2Ü,V³¢×”\xž›í™Ôq‰å”¶|mùÓÿ9Aç/ÏÈãò×˜4}_*Új1ê¶6övóÄË$hÉÒO,²‘Hîl@c‡!‘äÃÂÉ|éç-'ÉÚÅ¼�azf¢8ñd«F¡Fä/Ä~dä1ãË-©�cÉô?üãï�ÿ.¿/¬¤O3Ës¨ÉrÓÛMŽ8Ö1j)„š†RFýòy0Î#p×“5�ŸRjÿóž–^]Ž[Ÿ%~W5ÆœÉ»K¨Ýú+3°©qn¦$2’ÄxŒÇ!Àž”ææüðóOægŸ8¿1®üùæù¦¸Ô&tŠÚè¶¶ÁvŽ…
+q,Õ$Ÿ|@#›²Ñè† úÉš|³[Ç}q^H{/ó}9…šnÞSÔ"U¯×1‹L®ÓáäÀàTÈÅÁ@#ª› b+ÐbJ«0!A”é�UDüBï¿|Uq¼ ÅTEÛ‡q—žäïŠmpßÃŠ¥Ô.üM|i‘!´´(^¸)š(B¥(TîÞ4ËUuU>=p¢Ô'�D®}�0%Q»NÕÀ�ŽŽ0½kŠUb¯‹‡’-
+Ò¾kR“€Ýi_øª�R€b¨WŒƒSôä„©Rù×�¢’7í‘˜âg	ð½ûò[óRO*ßG j×$èúƒÓÔsýÃôR+ÑsS¬Ó‚6v²[ïh¢Ò<Ñ£Ï£k6ñêz&³Ûf§ï"qNq“ÐÐìsUƒ$±I¶p±³ó£ósòkPüº×ÞØ¡»òö¦š¢GXÁ'Ór6zé4ú® ëçH|·dìÜ«B6âi\ËñšQyOF�„†Ù¤uø‰‘Éû°Éá®È[[�AÄø�•™ªOà<�-Jö J§‹Ç®ã²p´ù�Š²pT€:�’Uhü<1TZ&½N*Œ
+QZ}«G—
+€w­1T<Ðúˆ;“×bú­ˆ0Hª¼ØôéÖžûa²žyUæ¡­ùwS‡Ì:ìÚO˜´‚ñXj6Ü"� vu@«V£s°Ìœgf"ómó_ój÷R×®oµûÕMn‘êBDm*–zï^»æ^Ÿ‘pgÏng¹¾`Ë3ÃnÎÔF4>†æ4näŠ.tºM;—Q�„|6šx·‘%Œ9dª¿.§Ãß7ø°ãˆÚ.®y'{%.=ÂÌK,ŽÎA¤Iâ<:d2éÁÜ†ÜYI;–Yå»'Ôo™&­"BKd<�EP*3˜×cŒ	wšpOG·yGòþYnáœZM9XI+¾Ï9ì…ì3C—5»!úÖÜAHãôã�@T`eŠq
+*E|r)õ<]xšwÄ²¤Tó×�´#l‹¦Ó R@©ðÅPvºÜ7†XXˆç„ñ1w§Ë«4”èvÅ*);´ÜnÀÑ�¦"•ÐnÇl![vG_€TáU(Ô4äõN*�ä 8¦Öñ5Åmp`N(Knœ¸+ØãJÕ’ 4­Q€¤&M
+ùç%•éŠ¾7ôÃTŠe­J/
+:ŒUOÓ­I¦�òÆ8‘íŠR·€ƒË§Žø±A4kËqSû ÿf&Üs§×_‘œk?%yžì¥SBÔç5X‰41÷ìOLÕë4•¸v8gaöV¥ hÞxÐ/¼¯®Ä­ctÅ¡b9IŸ²Ñý"¹«†iBIÉ_›Þü¿Õ/uû­PGxTò±¾âxÏc^•®o0æáE„‡&E  |»fTwkLÓâ!FÀo\%Šcf=:‚§Ög`Pä•?…iS·Ã¹ÜcHM �Q®*˜Dà×DSß|U²S®*®ªh:S\®*–Í"õ©Û,­ˆjš
+^³,‘šÁ¦Hbw`7þT¸‰%†;XçW¨†û÷ÌŒYŒM£ÂaCò¢ùÿº1fŒž4¯`OLé4½¶1�Ý~}$óMüœnAÞ;hêé»�Prú3qjðÄ}.ì£|ÙM¿å–YæáÞ$5xBò§bzÐæ¿Wí9Èˆr0vl"l½Hò¾�¥EVvÂ ÿ.ÿ~sYõ³Êwv±;mj‰Éx¯Cì3Ù,‰Lh‚´;
+†(Z’ñ­<zdR¸¹'"K%µbÛí�*( ô44®ôÂŠy†¹oªÚùžÖïMGôf+õ–AÉHî0$¤p°+ÉFÞø	JäaÈoß¢‡c„1!°Á¶ê{Œ°!µ˜ÆJ�·|Uµ,T•jp«f]©O‹Ç¬i©LUR²•öÅV<mÄü8¦’ò²@øIèqH
+ÆÓ.í! vÈ�”l{•cŠ¾Iƒ«WÃ-i^`{ï‹ ´¦Ô¥1RP2E¹Åm,tb‚–´a_ ªú°8xËz¨AGSCPvß¶3�nÅ–ŸuþD~qG®Akå�1\ð×¬£ÂñÍhÀ‰cÕ€ñÍ6«O»Ÿ	ÛèÏ=ùJüËòìºuòªêÊZÂð
+20í_ÄÅ3IÉŽßš~dòÎ³åMr÷DÕ¬ÚíÒB>cìÊsuƒ(�p§
+CÛ€H4Øå¤µRy
+"ŽCAMmÙ)N;Ó®HZiféñS©’q]�®VU”jW¯l!Q‘“·Ë
+¢kNU=öÅU‹JÒ™WªqÜî:bªu¨Üxá
+…’ŽÔïÛ$¡ZÜs«k�2µqFvìr@1-¡uû=êÂi�D¨ ƒØàb«üzâÈlÜŽ´Åš§ªã¶ÿFATÒY}MÖ€žµÅ(ðõßµ�!’˜’T<ˆ®ûSÃ¨µ”È
+E7Ä•lPWa\Š¨½y
+�Ž*â)¾*ßPq
+‡’gˆ;n´ë–â™Üo_‹¿
+¢cb*+¶MU\‰
+Œ�ØuÀ•WaSŠÒ�—’•"‡ALÄI
+ñT+Âä€E(wÅTŒ•)ôãJù]xþÎù6¥éÆ»øâ«¤¥vÅP’S¾*€—�1H@IOWd¼)×|�G¹ÚYÔ—R³:2»êUú¢Å³s®Ôéß(Ì#ÕÊÃÄýJü«¿óÅÎ‹gœô7Óu(‘@œÍ‚U¦Äˆäb>‘š=H�ì]ˆåºIùýiù{£D5ÝZÌ	ÓÇ,²eaHxŸ|žœÏ¹ÇÊádj�’@¦‰2lÜC÷ŒÚÄž®ªÑ±Ö›tËƒŒŠ»äšÓ+nU­1,“„é•ª":ò­{â¨èË×a‡uWêy
+±6ªÑô?<
+ª1UCö2J°q¡éÊ¹-ÕN‰Ë®õÄ+rqÅV­;}”Zqâ*qÝ†ËÈO)Ñ–ÞžôëLY´ßkéþ9Uj*ÛW|Rh¶üM¿cý0HÈÄ<Nâ´;
+áéñ=>ŒŠ¡�ÛØÔ`U²b«ExüCoUµØ?¨g­G-†X*¥h<0ªºÿ·’UÝöÀU4·Û•
+zuÈ²§çGà*{b•¶Ô¡õh$ðÅUM+¿ÑŠ´Ý;SBž<ºŒUÿÙ
+
+endstream
+endobj
+7 0 obj<</Contents 9 0 R/Type/Page/Parent 55 0 R/Rotate 0/MediaBox[0 0 612 792]/CropBox[0 0 612 792]/Resources 8 0 R>>
+endobj
+8 0 obj<</Font<</TT2 67 0 R/TT4 68 0 R/TT6 69 0 R/TT9 78 0 R/TT11 50 0 R>>/XObject<</Im4 10 0 R>>/ProcSet[/PDF/Text/ImageC]/ExtGState<</GS1 73 0 R>>>>
+endobj
+9 0 obj<</Length 10227/Filter/FlateDecode>>stream
+H‰ÔWK�ÛF¾ëWô‘4,šÍ7�›ìn°‚`c-öàä@Q”D›CÊ$5Êä×ïW�æPÏ9ŒºúQ]]�¯>¾ûáƒ5§ióÝnón·‹Œ5»ãÆF&Ä~lqaò(3»‡MhN›0Ã02»z³uÃÛæ£÷ó°fó]s®ümÞc;Œ“ñÝ½'½‰êÅ	UÍ£41yX¶-©g…6&Ýa�¦q.ªºŽ¦©ÆîÉŒÍ„A}¦+bÏø™wkç•ôý ãnèeðäÛ ÷ÌãdbžÌQ‡õU~§æ †^ÍÖa™f÷wyo!6…6R›:’z¾�‚ÈkÆSÓÏfßø9&áú´½¹�Ûú,š­
+Š¬ˆáhÿÅN5Ü,ª+ìÙ�U=“†CãgAâ]7Âëbz\Âj·N/ì¶¡-í6í¶À"kçGGÞäckìµýId3µxKˆÑE&ºÆøÛÌë$šƒLÖUgÆ«Û0™YçÕ§‘7ªS™S<þ£^¨…w~Ó“µžÔ�E²ÂÛÞÚƒÈ��Ç¥Þ+‘±‰<0*l*ÜS
+"§à?fÓxlôá�ÒŒÙ�y¢‘GØq!_ÐSi{ãG8;Í,˜áh¦+Â�È’Êÿ£ÎàÉ³(«TA]õf/²byÆî�¯i…±FçÐÀ¦¯z˜À%õ)écgL+îœ$³§™”ºmzºåÍý	ÏEUü«÷)†FT°�n‹jÁ&u¥­\0Œ~
+ñ-J¯æ$%Ï¬
+é©¡~Ì]ê….2yîRoBÊ´Èè±BÇ°¯áß£¿�`åùHnät‹á2#ûEÚƒöÓ\Õ”z¿ nóÏöt‘©)"ÿâÆ�ò”N¾’-®Ø2²iw¦Xæì®–81rIŒœ#§øy|?K0BfMõ8È¡üç‘«-�Jªäì³˜‚„‘KÞ—kë—X¢93ÈeFô"ÍËÕð½·uÉÃ&(¢ÇdqTÊcæR:ÇuE£‡/§²·VôÒl[Ws«;tÊT:8(TEAr#X"º\ê…”ÝM5µÀ¡	ØÐ‚ãá:;TR«ÔX×,4Z—ö§u-I•¤’¤Öz^?Q¦^ÊC‹´¡ÿƒìµ–«¾¯&£¢[mÌ¨»I
+å.)�€Ó€ý
+ËzåAêü|%�ÄéšAeRªþF0¯ù!ÿ‡«¬GØšº>%»da$!CXÉ$ó¤ÑŠ)Z%6H´b	M¼ŠÖ2¥ÑŠ­½ÐEm‹¢±nßi+“ƒÊ/>±±÷X¤Áµy™ÈÃ:˜§þ�	ùYlùÿïGNBÛÔÕ»#7Ÿ.¤ÂÊæ;‚Úüä'Š9ãÀC
+�£Ú—=¢À\(È
+ŠtâÉæ‘Çˆœ¥.#76„™ÎÊ1­?m_�'mŒaäúF×~†‹PÐ{þáËÎ4¬ÄšG·Ü~)0DÊ•+!æÝmÍ?„šg·2ò®MT&³–®ãž™z]7Ü$˜¢væÎb_<w~~-+ÃLƒ;Ú�|®Ú^zÀO}ã8Å�Ë‘ý§ÞÕ¹-m&u.z”Ö1`7Ý‘jj>^ãÍ]Sª�D¿{®xVöGðFq¨Í`ºî•~Ñ+Ñ¿(k8ÀÊß�gX.ò°ž~¦rìD˜Çž¢‰…îq|˜ÜGG
+g£«GI<QxO¶ÓW:ÕE¨‰‚×êùùD­6ûµùçêQµ±¥Ã¨T	vPBTç—9P��ÿ‘ HÕ´óX�„«LÀJ÷p¡kÐâ8pÕr¶÷w¾$Ú²Äƒõ¯û ö
+z;rn¯ükžs×^\…DI®¹ðã@8ÚÔDu7çŠÃ �áKÂ…6»¨§Ž6×àÊG`F×<6cuj¹?õ'SûÔ'™
+€>=¿€•¾`¶šòY‘æëîG`‡îW]dXí»vnÑk‰ÓÎºÍ\s×�:Ï®)=‚b°&:!C·Ü GL#ñ:ô5]×žT—›CM^c!¹ÃžÒ¹ep»HÅ+ì‘Y™wµ�ºA)çY«˜9R7Ë¼ÀgRfþ3)²â“ù+h~Ð‰
+”ÙtÌÜUÇB­Ð”Ø»Ï[¸°K•d®J—#Å{uœW²0�ío2ÿÖ|Ï0£Î×Ï„Œ?E×%îóíæxlê¹}Ô«ˆœ4Íg½†©bEß å«Ô5²ú›k/œ«‘›9Z�@J*…g|R|Y½[Ò�ô¡V¹IÆŒõêÂ·ÒÄê%ß²äPI“þ‘>5éC•ÐŽ¬jÑÉ
+ô&ï¹hX×öâ4&¹²—“p>43o¸Êø¢|pP>BÕÎæ,nÁWƒp"¦�G �J(¯òÒœ¾¶ˆ »+¤¥!9=0©Òá&Ž˜–;ñu¦ÇjÝsGVÜ·E®O•�M(ŠB@„`½—¶ÜÖŒ‘gi€S¨ÏÑÂK({F¬hQ¬‘'rxéªZ`‹Ú*k½öŸûáÖ#g£ÅéªìÅ‡�uŽj4ý#YŠÖ>ô>3=ÂTBŒÛ0~fDÙ†À©:Næ¦‹Ñ°¢¨p
+ã	�„³›3Àœ†ªsý¾nX‹,¨…zøEZ¨�e/Í�»­£,k4)q‘(k6#`'ž­º·+ê£y]äI¼Êk[Ò}=iÖ¥6ë’š5ðE0»36ºr”Eo9¶t/M*t”«¤ç‹^p�d�£t
+G	e™Ž†qn¦ÙtÂ°²dpÆÞvjOºÔCG"`EiÌiFÛ|âwG5;öB¼ÑrkPñI¨ñx±×»õ]	ÑÛ¯1ÄK‹w¢>D«¡§Áez˜›êUÎFûõ ·¯#ª-
+“õ�Âc¨u/T8N¼¯}	i$“ŠÝ§Í»Ý®4HúãMÒ–”¬¡Á0Œ"cC´’ÂD¾¿"ªŒ
+R$9ñaF–Ñ•Õ8óMÿØm¬¡¿ñ´)±™8�Ò”2"“¦A
+6²9n¾`ck°É$a‰æŠ ÒT�9ò6£Mÿ}cúMÈöüü¶¿Çà“	ƒpx3…ùÑ|ü54‡M­€$,èÂ­^µuw‰ºú°™ ò=,ü„×A2¾À÷áóºÊqp*L·ù°ù÷³î¨3‚Uˆü›¢û&.Ê KH™Êâ„îåz�À,2]öåÏ]QTV«çH~5øn
+×ä «
+ˆ!2ž÷r€ÀÙ¤$ƒþ�l{Ø”ðDäÄš`pÉÞqBN—Õ'fFŽÄe™Q}*ÕÐì}^éå3n¤ÊœÈÉ5áÞ¾zs|#É�ôÍ“oÎþ‰,Lq]6MYœ,–)§#%}€�d¯Hyd™ÑCˆ4T©B°±ÊÌ‰d‹ÍÜ1'©ÊE”ëäœ²6’½þ-š=�F”“QI¢6l.»Y{r’R.@'áã‹"µÈH™YNðT'Û…G<Ù ,–ýNrÚœ,w¹cjÇÊHIñoÐlrvÄ@„(ÄxÖ:ÁäŠŒÆ®$ÐG¨Š`6¤–NÅë‹B–èm1Ø²ÊF-ÇTR�N”ÝA1æÎNuø·i:œæäÿýÑ¨é°hÃ„ZMœsÁ8)+©•ü�ýªç‘ëÈ�ùü
+…R õë�y©qÎÎšìpÁaÛ0vËÿWÅ"Ù=+-¼0.ð@AÒ«a“Í&»É"}w¼?Ôý](®~LYâZ{‰)Õ©CÓQÚŽ]¥éMÎ*ð7ì>Øöì­¼{ù?k=WöqKêÊÆ}^X”Ð<Ð�ŸK¤ué†%Ý|>{ß ™¨Ý»ÔÁ¢'ŒÚQ›°�ëµ¯²›x>sÝ7ô«I¹}ÆíÕO›ãÖ­“s}± ¤óX¿�£u2ú8ù�Z�”ÛC¿2Þ¨•›·£ð¦OÎáçá{Ó+ÓÉ(®ë8y²,Ì$·ÀMúØ0¯À�í#1á^$.Ü�¼úñp§ï©ÿ6Sÿùå<TÒÆ/ç¡7ŒB×ÓO>ílË^|\ÊÁç_6¿„‰œtbAàR˜�1¬´Ê<ç0ã'øŠÜ‡á§BÂ~àÒ¹ÍSL%ÿt,aê`¾c²ånÈ4#m°à_˜Â]@VØeGñv¸<4Tv×j¯E˜âRTö:¤‡Ý…Ðt”fûžÒto&O¿2ŸÜêAp™7ñ�z¦%–F
+6A¢N­DÎ¼¶ÍP\¬£†YC\ºZ©Ý×ÓwÚô
+]Ë�™]Un×{„Ôd�|1NçQ$˜(a¾ýNdå,Qp�Àd“©ØYÙÒ¬!.EÕOá¶Ÿ’^€0Ø·”ž{3ûªØß°ûþ¡J‹tØÍ9ø"–Ã^Û6!§ã‰Wô)×kÖÃ¨Wn,œ)ÝúžzÒ¨cßRŠáÎì«‚ÃîO´²UìÑ ÐP0�³aUÌAlýeáéÝi&ñÆšËŠWf
+påªÛ&Ùfý?Ô¥QáØRŠáÎì¬¥á¦ýÓd£z«þ3hÉÞ>Ñ(`±@§Y ë:Ñ0à¤e,¸${ûDã ßûDó¬Q
+8ÄF‡¶8ä°.Ž9vMïœ£¦÷¢°y8g¸:ü#¶“2Â2Ç3ÙçÍ['yÎ5+aé;H•Óg­ñ×qðä\˜+nC[qMã÷ÜÜó’ÎyÞÒùÈ«Î6
+6÷ÌS™g5èÇŽyïåÿ?ýàSF‡³d»W}÷ùt]Øž¾$àVEìIrð¢]´lõÖµtóË†Ók6û|ºî_œ*^`�Ô¿:€ñhtþ•i¬Â�íÕiÌ¥1�¹½—#Y®
+|nGcÛ:ïãÉt¦¯È5’9Î‘,í>oŠ–iÂO×ƒKm–ÊŠ£ØÀW+ÞAÀÊ¿ûÁ$ëséB‹±ï•îùòÝâ¶„°•ž†Y¬©ÈMÔf®è^\¹øxú«»YÜ¬¹=ÛFë¸¶B&RA·MÛQc&¹“c<Üw©Xä“›5Ä¥g¾§”"©§ï´)èº–;3»jÎw{•ìÔœÇ+¦š°?ùŠÔ&´zs¬‡f'+³]ŒoOÎe*è¡(ŒÖ–¡èîÌÎ*öžä¦�+n€AÝŒÊªO<ø¸0Ûa»hù¶Û&nKh\˜�êN¸bÜ7P›ÅM“W.*æ…5À3És°’ffw‹ªÚ2Â±ê;Þ´“4¼…�]¡Çh)ml¡(ì:ö]]Ó=ºò÷mDM‘Én]Q&Ö©[3sW°èÔÑ5øJ—©«Ô½ó ÙuønÛÔ”¸¾NÝšò}êi“œÝkR·Ž8™·Ž9m¯@¤{ê¸Ã}ëÇãtj×:|JqeŽI÷©Ï¶�ëÔ­íqÎ¾£[ó]—ùdYø8xbLŠ·¡­¸¦q�{nîyIç<oé¼çÕÏ6xÚ=ñßTâ?Ÿ¾¿œ¾»\
+)Ðåç¢]pÒ|.0q}ì‹àË38É/§�ØcA»<žÞ—‡—ßPQJCùˆapiÛöîò�Óû*‰~¬k±›ýˆmˆKw,PÄéë™+Ì6šlÿûý§?>|Äì¹½ÿïï|øÏåÇÓ?//éZ;[íþktíë­ƒzÂò+Í¥dhä±FÊBmçb)wÜV'²ŸŒÑýøn�9‘±ž²öAÖüDO_ÊEÖÓàé.½rÜ@=š;uõÓ³s¼±	Ù–3Žðå²P–…m¥ã¿……ã°ûéðØx©Ûa°q³ÇSÀõ�Tˆ;ž¾Ûsôût(…•Ï1¾ÜX@ÛH*îÂµ�,uWœõÖüÿLAŸÈÊÆ[v)g»r¸(çð8é¯
+²+!Ó0å°ð`iqH_8mI-�›L¨í¤çŽÌNZÔoÑíÏ§RŽ:³òIâm”M«
+—²rLjì:j¬ØØ&peAOMT/·i¾pŒ(ÕúH¬Ök¯Ps?&'uÅoÐm»Z!Bš<´%En_íÁ”	�màKØÙí¥ÕXºÓ`ÓYJãK©9•jŽÜf@mŠræÊOømºŽ /ãŸÕÍ€MÇ`Y:[MÛìÁZmŒ£ïŽmrÅÕ�)«B\k/1¥:uh:J»Â±«4Ý¡ÉYþ†ÝË$fI]#GóxX±c"—>ˆqÝ1´¾Qql(wç>ˆeG-l}ðN®¯ƒ–R¼×ÁZ‡˜œvR6Ê;·W?mn”y8'J=œ7Â�G÷“i�ÑÀ•ÛC¿2Þ¨•›·£ð¦OÎáçá;h'RžŒâºŽ“'ËòÀLrÜ¤ï�
+ó
+üØ>îEâÂýÈ«oÌb÷Ôc©ÿ|nîÃÍ}¸¹µ)á>ÜÜ‡›ûpó7tý>ÜÜ‡›;Ãý;1ÜûpóÍ¦þ‹á¦"¤�ÿÇá¦�mÙ+Ã�K9Ü¼V|š‰�KaÆ°Ò*óœÃŒŸà+rf„Ÿr	û�Kç6O1•üÓ±„©ƒùÞ¬#ÓŒ´Á‚a
+wY
+`—ÅÛáòÐPÙ]«¼aRˆKQÙë�vBÓQšuì{JÓ½™<ýÊ|r«ÁeÞÄCê™–8X)t\Ø‰:µ9óN\Ø6Cq±Žf
+qéjE ¤vO\OßiSÐ7t-wfvUY¸]ïzP“òÅ8	œG‘`¢„ùö;‘•³DÁu“M¦bgeK³†¸U?…Ûb|JzÂh`ßRzîÍì«bÃî#ø‡*-^Ða7çà‹pX{9|lÛ„œŽ'^Ñ§\¯Y/£B\¹±p¦tè{ê9H£Ž}K)†;³¯
+þ
+»?uÐÊV±GƒBCÁtÎ†U1±õ—…T ¤w§™Ä{Ph.+^e˜5À•«n›d›õÿPs”F…cK)†;³³–†›öÿM“�<è­úÏ I${ûD£€Å�f�ü­ëDÃ€“–±à’ìí�ƒ|ïÍ³F5XàIÚâ�Ãº8æØ]4½sŽšÞ‹ÂæáœáêðCŒØNÊxËlÏdŸ7o�äi8×¬„¥ï UNŸu´Æ_ÇÁ“sy`R¬¸
+mÅ5�{ÜssÏK:çyKç#¯:Û4ØÜ3ÿMežÕ ;æ½—ÿÿôƒOÎ’í^õÝçÓua{ú’€[±'ÉÁ‹vÑ²Õ[×ÒÍ/N¯Ùìóéºqªx9€ARÿêÆ?8 ÑùW¦±
+¶W§1—Æ4æö^Žd¹*ð¹i�lë¼�c$Ó™¾"×Hæ8G²´ø¼)Zb¤	?].µY*+Žb_­x+ÿî“¬Ï
+¤-Æ¾WºçËw‹KØÂ:\TzRd±¦b 7P›¹¢{qåâãéW¬îfq³æöl­{àÚ
+™HÝ6mG�™äNŽñpß¥b‘OnÖ—žùžRŠ<¤ž¾Ó¦ oèZîÌìª9ßíUT²Ss¯˜jÂþä+^P›ÐêÍ=°Rš�¬ Ìv1¼u<9—© ‡Z 0X[†¢»3;«Ø{’›®¸u3*¨>ñàãÂl‡í¢åÛn›¸-¡qaBª;áŠqCÜd@m7M^\¹¨˜ÖÏ$/ÌÁJš™Ý-.¨jË@Çª[ìxÓNÒDðf@v…£¤´±Y„f °ëØwuM÷èÊß·5E&»uE™X§nÍhÌ]Á¢SG×à+]¦®R÷Îƒf×á»mSSâú:ukÊ÷©§Mrv¯IÝ:âdÞ:æ´½‘î©ã÷­�Ó©]ëð)Å•9&]Ü§>Û®S·¶Ç9û|ŒnÍw]æ“mdáãàYˆ=0)VÜ†¶âšÆ=î¹¹ç%�ó¼¥óžW?Ûài÷ÄS‰ÿ|úþrúîr)¤@—ŸOˆvÁYH;ð¹ÀÄaô±/F€/Ïà$¿œ>b�eìòxz_>\~CE)
+å#†Áÿ^-;ŽãVtß_Á%”¥·Õ»Ng™Á�ÊèÎ‚¶iKhY4$ÙçCò½9÷A•Ë©Æ,ªLRä}ñÞsŸòº6Ïø`3ù"‹Y•òbÎ‹ÐXˆB´3RF]­dN•�@FM$ßÐþ†75¦”þ—áqË;`ÆSJÛh„‹~~ù`îçÑ›â£QM•hB{mòb`;ðT,'k:ùÕ~áäG7woŽî?ÞL¡¿tÃáÑ$ÕcSþõü§ð&Í£ –“/rDLú-‘ý_Â&Ì“ÙøC7˜9$µ5£váØ_EÖ*E>Ö¶‚Ð¢ª‘u	Äf™“÷ßÅŠ¹õ	²ÞšCpý£1´Að¯ƒ7#éKpqÖì»hlS¾1vq:kDò°›Á$3AþÙþÁÀPãz¨j,)Ìì˜dÃŸj>èHl>©Q%‡Ù»ãÑÍ~Šñû	Âí¶;a"©vò­ï¿
+ûÕÔÚÙœÜÜÊ:Yq5"Ñ*Ux¯rñj­ºÃ‹!žœ‚:8•Ù� VìŒ5‡(Y3�ÂLŸ¬€}v‡4	_‚–Eé©zæMëJÛ%0(³dòÄ—Î#ÿn=®am£ãy²~¬-.
+¬ÈšglYÛ6É Çs'Gä„ºÙ<Vé;iqŸiÛÐ‡ájÂ^B:%
+%ëÜºÁlÃ€€_üx@ü(ýDèM÷�¬ì¦éí&^³"®§XFÙ}Á¦xŒé�…'ÊÑ~:ÏaÇpžÌ¿mÝˆ¼?˜»‚g|b<Â#-áJ3*d)é4æèºÑýK@ˆ
+ûâGsL�tkë�Œ©ÜÁ#¦©=Âç5BÈ‹s’S$;þ™’”\F4t>�‘ŽO�¾çµ+K7n·ãÁˆ›H­Ÿ&¿ÓCC‚›À=ªò°‘e9�ôÀëÍÜ=>5€l½3´v°Ÿ‰3càûßðÿ@’3;s…uü/J‹¢ÁEÚ?Êæ!GK;>ÀSºBÞÚÊi9GžÖtûv#{·ö‚Ùr\ Ñ|÷W–fNä"²uÓóI¯ûŒDª‘�Ž�>)‚ÅÕçß	ŽFŸš&ÉŠ6�0¨AIÈì$?T'©¥”…¡’µÆOúÕo;×Q‰<“_Æn¦#/4�Ë}oôL�Ÿ¹]Y?èLäŒª|“3´˜¦6Æ+W”â'f;ÝŒ$~#ùˆ²ªâäÝX‘sä•Ý‡Ñøëa?ìÔ—�A7é‚N	e£�=ý 
+s'²‘B„º¦SÅ´U�uìÖ4»èó{¹–0²#°Ê(õ§¹ë	gdí"?$µFøu•¬¨mÜ3Sî}	2Ù„¸hÂI†Ü"‡ƒLøNº9ª<ënÓžoE;8h‡xb1>åäÑ~~#yTZöt&?^däãJtd(øÎôA¦bVC‹[0Éª²2>Ë·i6Gø�Òu:G ædUr¯1#pL†@³·‡fýà;ŸñGÐˆ[eY•âÖÆQõæVþSq¢:™ !žç$%˜Ü{)bLÏSÏ{®¼N­Åþ2ðÉwêõñÀK WI5#·näò‚ÕIÔ!³3"<Y¿Ö:7B%[àjzEÒCÕ.½�õ—¤J¸„(X=·¸³LfžtÒ0³çÆtGƒ’ÁgÆâ7çeÏpåŸóâMËC‚¨5úœ™Dô(²2×Ô×oNÿ0û"ŠeµâtDƒ®ï@Ýd¤Vuy«¨DHÊ/(ÐMT!fŠp$¨F\¯® µûÑMs„¨íL´ÕM?J£<†>Õ*?N‡i¢f„BíùÇKßø²ž™,lBãÎ¼ûÀ-Œj}–í`! s7Á’Ù‚Å”t¡)œ¤*m0ÓUTêYêºX}ÞyMÍþ,ÓìŸÛÑC…ë$�R<¥|êüÖPr…Ø�ÇQUâýB²sjÛxàDc‡&âõÎÍrÎ.¤)6`b&~ ,!T*).”gä!e’u5g]-Y[sÖp¦4	ÃÇ$¢_Ê@îžPdp¬!;iSÔÂ'L´MRß¢8jÞ/–<š¥€Ù£†¦rW ©]´©bpå+¼*@„~ƒƒ¬"…ä¹�¶|ÊUîíÃ®“„!(ÛpC"9«rxJŸ˜¹+–E#DcT–Áq¦­‡È+hù ì‚ßR 'ü†BQÚyºYª2Pv/oè6Ù½¬Ñ7Òç–ß.D;UM£¾¿òlù.ÊP*eÑŠÁÜqbz�7o�…œj Ÿ[Jfb“­�D'ô6PË¡À
+uò#ÌQøìð`(Úy<ª,—ên¸cžˆÖÏ²ràMgYGi@[cK}7¨µw%�êó(«Á¶õá00&ÆlS£ãùfloÚSÌÖÖÈ§V 5|’‘|Œ.
+bp•7*W*­œÂà¹´Uð‘�D“,€Õ8Þ0òvGþAÀ'æ3¢TÙÞø{m6«"=I}ñÜG3I[;�bM¥�ó¬•Î§�Y_dYšóN&"�.Ž˜tT2Ò}Ð4ãÿ—\ãz©¢"m±±8~1�ù·äzyò5iµ°ð¡Îƒ6;†Qj’éÃ<†¾‡!›Ød^Öv²¡]6®¨Í>©Ïã¡™SŽÑj·u3À—Èã-e4·Šë}%|fü’˜ýmšÇ÷ˆë¤µâw·iRô|›Œ0ŠT2«y­$>ñ `TŒNN*B÷)Á¦o{¥hd®F©&úzÐšÚ8Î�"¾ÿ?±V·¤'-ó<¶0"‰”-f¤æ�ÀM¦¥™­8É¤½N*½Cv² ›¶d@a¿ËlyÕŠ¢dfwæYg(µ ;¼*¤ïÓù¤Š ay,Ï2Íœ4/ÊW³™dš­°gêë”c�gãòJS•~"XØq'3Ãíøz’YÇ *>¢�ËâHù^OÈ£Ê¦n-xµ…ñk=<ÿ(ÛjÍ¶¢Vþã‡÷V¶Ÿ;9·´”¹
+Ñ-ê¤~TO{þOIVH1*ds@8å
+ŸBú•0äZ²%—l¡9%îF¤Å�*æNªß<‹�˜%Š±-Kñ?‚1}eyS¼qSœ¬ÄIq‘û#òÇüíDš¥ôà›çý‡–Öè:µ
+rö‹½ªÄ«"z%pFxí³ñüüt´™œ-­lYÝ¾"]Î‹t!UÚu…GëÎ¸ Ñ´¼ÌZé²H3i÷HÚ-dÛ »„5hGîy©¿åf£ÝƒS€Œîˆò~[Ó
+Z^Ôo«ÿÍ»à)¢\šë“ç'·<å®‘#ŠÄ8Ðè™]©w\º�Ÿ–D‚ÑÓ´Y¿Ã#ÒL#¸‚�ßßÃª7ˆè?šÒ¶£p±ñvmŸO4ê!D}­³V@YxC4ï65›¢y¥Íì'Ðcv[ Ý˜<SùQ^ÑÙ,C&?½F1vgÁ(ç~7môw¦Î†>äûž~ç]5•…ßÎSãg×í÷d„ü3rÛÁzm�Ý{·ÅÛnFÏ‡|@k´½(ËTlÿ
+ ¿kå½|†÷¸^¼Q&<³>
+æ—/\ß¯¦ñÙ[èŠ��ZAX, ëºhà€œÝ±ëÝHñ$ubÇÓcUf7ÄSüjÏMVðÏÜm(á¤èÐ¿{­§Ñ®á€·�8� ˜o¤ä-V-÷(¤`›¦¹²ŽÿòƒDï¸1þ�îjYŽÔ‚w}EÇj
+
+ƒ�+{#öf‡áË^ƒ,´<¤Ð�ø{�õhFR(bD¿ª»««²2}ýjDƒ‹rö
+�:µ‚gLò3ÕÏ…@)G¸ðÝþ‘ÁØ[ì�³`n!Æ*¦8x`�YAS’é‘«�Â™è”‡­NMÕk<ÀëV¥,€¨Ü8ŠÊšçJ3ÿ2ù8§žu‰‚\Yí‰È¸K$¿Çªá!RLø“Ëä!"aj®þðEÿ‚—®g”ªzàú“Ây'ßDU•Ï^þM;òíiAÓ:íÔÁ«Å�n%õùQ
+Ð……0ÙÅS;†Z$Ó´õY¥‹Qê1¡½0È¤bâf#�w„èøÆ§”ÎzfâB’þØíWû,ê�ýIÆqŠûoþ¸¿ùyÛt�Š*c-,$XÏf¨nþùÅt˜E6ËóC‚
+�Gyž[CëÓ˜Gbôf6SkÊóÍ¯ßÏ‰ù½¿ù_ï�$²Òç€ÚX¬óÍýYÏ“óô'9íns„eJ‰~ÞbZ[¾Ä·¦FV÷¯†HME¤Ïs�ÓVXÁŠ;Ù#P®éK)úˆáË°Õ ì<Ñ”®‘=³‰˜�ðôiê1èÊ—ÈýPoÈ_ðÎÞHÌ½³r…ÀŸÒŠ¹íÓPXÏ¬5e¿îˆ‹Kªæ’·ÈvV”È·;N¶ÓŽ”hM&!–xãb¤ç„nê4W7ƒÍ$ÎVj9Jn/eìš¡Hè©9m€?és¦Ÿ†U‘pù©×DCa]áaV·»Nç)z¤œ¶œGŠú< ŠCnŽ¹c:—S½ûáNö�#¨¡íæ‘PÌŠPušºjO»ÊžwÒ+ku¬å.Ä�ŒÉ/!%XÔ¯BzQ¶º’=Ÿ3UqBUÜGà¶aa¢Ö|nj¶1SÁŠ(—q‘Œ»~ì˜w¢ÒþÝsÇãôZàÅSšÅzp…ûÓ¤#Ox-d}¯Çb“\Sqr^y’>5#$•1ãšó±þóÅÐfV_‰Q5TÍH©:ÊÈC‚ÊYÐ“—9D÷Kí†ª“/�VM¼*¼
+dÂLãçèç,X¬=ø­o!9'$Ç{ýúàJs=ö¥íXA°äJfÕpn::0bžÙG´Ï“0ZÑÕÔ[óå•�…j/§¿Òý©âØL½QÙqäB
+'E±*¨¿Kzðnïê¡JØ$Íók	û²Ñ¨íTÔ:Â¤áëÕ�Þå—Ì=øÓ‹SÌ›æçlš¯Y«[ö×z|&Ê“S²3cŠ‰ð˜ÄÝ½à§@!JÒŒK§g…l÷³¸BjhFÜ}#ÿêôØíÑ€¹”ÇÜ©óF…ÌÂ¯>"jÚêe½ÖÌ›ESÓB+.!:¬¢õEÍ{¿ªÓkªµ¨(�#ÿ@CL”šN�{KP¡úYx©÷Ü°¸>´Éª~%Þ®Uj@š«0ÏUñÄÔ™òš«/Øæn4±óþ&cï„\äë!¿œµBÚèó±¾Á¿·²­4šKO‰bÆŒ”1ƒj
+æ=ô¾7JäEK’�È–Ýr¼í«+Ç‹B§.[d(ÝqÃ×J®€O“ª4Pr÷¶#m«��¨�ØÉ7k}Uâƒ„—jú¼Œ_ì�Mí©]k?“/¼yör¯j(«O’ÕD›‰µÁ%}ö–Pu.0cÕ�x>)Ñ©0~ÄêÌ-’ŽÉx,eàá�‡€�€›e©Dq SÓ†º›_VÈº=ž	¡kî±iÆ²7
+ªOª”Gœ8ô”„žù@›Èq2*¡gc®ÐY0wBF=_Å+ÊÇIæËè(�DgùtòI	…ê¥k@óòˆy­„Ë/ºÍ¨³äß<~Æ¬5ÄâÈËˆêE$˜åsÐD$B™ðù¤@TK·Ó¸à‹›�<“óiR½SÑ�xa}ë$-Ò<é¡Ÿd‘™ÇÍ×ó¿ó}@©Ì+ùÃ%Ðô(Nö
+ç5
+µÑPç`ëÖ
+6šx"3ÔwLHom,ŒëÚmtrÏÆžÉ/P[äo$%9
+­–[{	('§O9de|å$xàß^†d¹Ë“L"!›SBæ™ç±oÁÑJGŽ¡œy®‡•±íèÄ(=gèdÝî³Ðv‹çÀ3ûNèäÐ+í“æI8œð¥ƒ›…e~È÷„JßQ1†¾Ï¬1tEÍWužq–]þK�ž¡¯”VIž½p‹vû,€T`
+
+endstream
+endobj
+10 0 obj<</Length 76884/Filter/DCTDecode/Width 1395/Height 661/BitsPerComponent 8/ColorSpace/DeviceRGB/Type/XObject/Subtype/Image>>stream
+ÿØÿàJFIF––ÿÛC
+
+
+
+
+
+#%$""!&+7/&)4)!"0A149;>>>%.DIC<H7=>;ÿÛC
+
+;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ÿÀ•s"ÿÄ	
+ÿÄµ}!1AQa"q2�‘¡#B±ÁRÑð$3br‚	
+%&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ	
+ÿÄµw!1AQaq"2�B‘¡±Á	#3RðbrÑ
+$4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ×ØÙÚâãäåæçèéêòóôõö÷øùúÿÚ?êcÿT¼§SbÿTŸîŠufhéhÅ&=(h¤4Í ¡¢Š(£<ÑE¢‚(4dö¥ÎhäP(æŠ(ü(È¢–’€´b—�zÐß­(P8PÒQENh4¢‚3@	F=¨£š>´QŠ(úÐ9£š?
+Z1ž´™ã¥.h(ïGäih¬ê3KŒ(çÒŽhæ”f“ñ£ß4¤QŠ	¢€
+(¤Éõ š_nsGZ(¢‚hÐEf€æ=¨Ïµò¥ ŸZAÏQF}¨ Š( Š( Š(éÖ€ÔqG4PÒ—#Ò“<ÑŠ84¼ÒQL>´¹¤È£>”€Z)2i
+( ÑÆ9â€
+)žtC�5ãN¤{Ž”“L¥¤Á¥@­t¤'š3KF(¤EsLŠ(¤Eb€
+)x¤ ùÑGãGã@qíE0QŒQE 
+J9ö¥ã½%ix¤"€ã­Ò—œ
+)h ?Z3FE!è(£¥QÆ8¢€Òâ�ÂŠ))h<Pb—¥âŽ´”t¥Å””´s@J1Eõí@ãIÉ4´t æŽ)zÑ�jJ3GJ9 �J(¢€”QGz(¢Œf€ŽA£ñ£ð¤æ“¿Qøb˜IF{ö£­ 
+(¢˜%-€Æ“½-�‰Å/áIÓ½.µ'Z?
+1·š3@ƒð¥è8¤£õ¤0ëES<Q‘ERÔBJ?Z9¦`QE/ã@ÄëF=ii3@ƒ€)1ëKE£š3íGÐPQJyã”QÍ-'ãŠ�i~” P!1EŠJ(£¥
+(âŠX¿Õ§û¢Ÿ�Šd|DŸîŠviˆ1íJ
+%- 
+(È=(¦Eb€
+(¢�.))hÇQEQEŸ­u¢€šB)qéEô4QÇ­)€QøPh¤š\ÑI@}¨¥ ‘šO­(Áö¢’€Ç4´”`P~´}(À¥ÇµÏ4„ã­.zÒtê(â—™¥`w£¥ŽÔQHiGJ(QÍQÖ�ŸJ(¢Š:ÒRÒPKIÒŠZN=hü(Ç¶(¢Š(¢Ž”PF(¢€QšAK�Z3ô£ñ£”×–8�´„"ŽäÑpF}«
+÷ÅÚ]™+æyŒ=*ˆø�`[&ÅG:«¢²tïéº‰&
+ÇøXã5­ÏqT�À\óÒŒÐ
+ÀLÖwˆnÚËB¸™N´»W7ã¹|½Ë™2Ø<·îÞa¸s“Ó5ÓøwÅMbâÞð–�¿ˆŸ»\ŠÇ(�ßQOoœã§4(¤´&úžÓ‰,k,gr0È4ñX
+½ûf‰‚Ù0¾ÌVþj‘AEPEPGáG|Q@¢Š>´gÔQF=ø¦Ÿj(éG½ 
+(¢€ÔQF)€~Râ“€(ïý(£ò ý(Íö¢˜	“F}éhÇµ 
+LÒÑ@jOÂ—µ £Ô´PcÚŠ( Š( ŒÑõ£­QŠ(Í&hÎ)G=E%w¥<
+J(£<â€Æ�ÆŽ(¤GÒ�IÖ˜�ZLQF(("—Š(){Rw¥4”QEœÒÐ(Ç½%-PRñE¤QKÖŒS(ëKŽ( ÒfŠ(8¥4(ëE¼PQ�z_Â“4J?
+Z3@„íÒŠ\
+N(£4¸¤ãµ!…dzþ”SZ^(£µñ£­zRâ�Äýh¢–˜	“KIF(RsëKGZ&qÖŒš\bŠJ>”RœPbŒQÅ„'áE/4Qp¿Õ'û¢�Iú¤ÿtS©€Aõ¥£½¢Š)€QE€ZJ\Š
+ÚŠ1G>€PÅqß­( ¢ƒJ(PyéE š:Ph¥¤íE-”½hÈ¤&–ŠLÑKF'zZ?AKúÐQE Š( ¯µ 4¿�h¢Šh¢Š(¢ƒGá@(¢Š(ëESL‘ƒƒ"ƒèM;8=«ÍõÍZvÕ.ŒrŒVs“M$†�HëÈý(ÅyÍ‡Œ56ñ;‚›‚Ÿ¥wßm¶*­ç.Î=*¹´»?z1U›R³^³/Ö£mbÅzËG<Erî*»·I|¦”þïz«ý¹d~ãÇzÎ‡ìÍªKxì7Ë÷IéQ)ö)+›oå˜Œu4¶—Ð^Æd�ƒ*œÉÔ¯ [/r³9ŠÍÓ5k]3T¹·n")�­J¨î6’G`i3ž‚±_Ä"Y5(z`Ô?ð’HOÜµhæEÑ¢ººIy-¬q³<_xö¢çRkd,a,¥d[êQ@Zfé!ùˆ¦Üëp»¢¦Dyå�eÌìj’±·¦jK©ÂdT(ËÕOj½ƒŽ•ÀØkÆÛQ¿T?#A©.®¿eó£¾.Øûž•jvFm¤tw·�éör\ÎÀ"ýkËõÏ]jÓ¶Ö)p=j_jÓÜD–ï))Ô�S\áäóM.w©7qfä“õ¤'­éÐÁqt±Ìû}h¿·†Ó/½•i ¬W�Ý2¹V Šô�ø‘o,ZÞöLOŸâçXt«ú²_1N^}êZìVGª�VÍzÊ3Q¶·d½\×%ÑG@{ÖÔ}B%•¦	=j¤LfßC`ø‚Ïøw¥r¾:ÕVöxaÉ§<)a¨›D˜JrXv5ƒ¯Ëæ]…V{Ó�äìÁIÞÆJ,‚^[#½M2®;sQ ØíónªhÎÖfÇÝS[Xgmðç>MéÏ
+&@®Ï5Çü;ˆ­„Ò€Í‘]…J,Z?•~(£4u ŠZCÇ4RñIK@ô4œzšZ(¢Š1IKEQFh(ÅëK@	G”Q@Q@Oz)@â“½(ÏµüèÏ­.j;PQEûPF(¢€ñKÖŠ9  ý)qõ£Ÿz	Š)ªžHSL7ƒÌƒéSÌ�ìIEWkëqüTßíqß4sÇ¸Y–±IU¿´mýMÚâÇÖ§�™dœu£­B·�ž�OÄßÆµJH,ÇÑI¹OÝaùÒÓ¸€Phü¨Qp
+){R
+`QƒëEPRÑGÒ�…7œõ§QøÐ!8¥àQ�š?ZCŠ)qíE&h£>”¼R)Zq¤š`Ph¤RÑE0R~¸÷ ýh ÑÚŒPu£ŸAKŠJQGn´(4
+)ƒ­/bŠ%´PQšZB9 ŽhæŒ}i€gÚŒûQÍu ÑHE
+9¥ëE%Òÿ:LÐŠ8 Ñš¤¥=)(¢ŒQ@êÓ¯Ýúlê“?Ýïë@‚Š( aEP Ïµ/�;RÐGëF( çÒ–ƒGj)EŠ(=(ühzš8õ£ëA#ýj(¢ŒæŠ^)(—´f�¥!¥:PE…çš(úqE}héíEÐEÑ@~4PEw¢€
+(úÑÅ´QŠJ1GáFh¢�aGJ?:?)žt@ýñJèvy/‘e4‡øPšò;¹Z_1‡Þ‘ŽzO‰îÒ-r†p:DhÕmaa‘œ°Åf½é�¡JÞÚmêDMùWS¤Á-ÌOæzdë!µ…F|¤üªuT_»�Âµ´nEŽ=­.DÌ‚eñÅ#XÜÜc#ð®Ì?…*eÜž~E^1òŒf¡Æ=ˆöhâ%Tò¢`Kº:ÖLºÿÙ®&‚x‰e8Æ~íXÕuF‡^š+@Fz�ZçïÁ¹»yœåØå�©©ŒcRåØ»'ˆK@ÑþcÑ³Ri‹6 '¸S�œÏ5�ä'§5zÂI-&Yb$;¾µ|‘Bælß�Ö0$Þ²gîžÕ4
+ÙÚd�§æ'½dÝêÓ^MæÊltQå2›#éPÕÁE�6·wK° 9üj)5{¹bØÍòõÀ$6‚æøD5+i�^k°ñÁ­b�Üš,éq¤öŒÂLNçOCW®¬å°�&“nà`Õ-:ÊIn8Q™±�¥j­”—CaBÛpÕœš¸“o¡�zÊ$cœô¬óÉÀ×I%‰¹£ÆO_JÒÓü=kh¡¥cŽç¥hšCŠ¹ÇÇeu!\oÏ §¶›y,Ñ0> W¡¬1Æ¸TQô¥(¤r.diÊy¤‚Eá�QZZZ¿ŠNu7ú-­èÉEW†Ï­´–Ó´L1°ñEÌª-ïjÅpì?>”
+Fòòv
+=)¤™"*XƒÚª*¼s� úZÏFÎw¦ˆ·°s+’\õç5ÎjÅÿ´œàŸÊº{P'‘ù,x®c[]·„õ'“ZBÆ‘Ð­$f…MÜÖ…Üki3C»!ã®k:b]c`9Æ*íô†âFãxOô­^ˆÑ‘àHLZ'©jé*Çð²tœ1ÖÆEB,
+£>ôPÀ)h£;ÑÅP(ü(Ížh£S)~´b€@¤G>¢Ž´q@	KGC“Aö �GëGoð Š(ö QEQEŸ�Z^ÔcÞ“4´P0ÅSZDA–l
+M¥¸Xuž Æ¨OªGvšÎ¸Õ¥lüØ¢�¹.!Œ|îÐÕIuˆSîŒû×;5þG-š§%éìqPå'°ìŽŽMi‰ù[mU“Tr9�ý+ŸkÏöª¼?…·Ü.‘ºú‘'ï~µj=kÜ–éŸÀS‡žãŸÀÓäAsY¯Ï­4ßc½fý’úO¹nä{Š�iZ“-Ú…—¾Þsœð([óžZ¨�#Tþ=ÛºnªŸvÙ¨åˆ{Æ¸Ô0qž*A~}kœxµŽZÝþµ	¿’6Ñ—ê(åB»:øõ­GªÈ£ïõ®)5až_«±j��ßÚŽD.c²‹X€5n=N8'Æ¦¢ŒGüjÒ\ÆßvOÎ�¤¶ÑØ¬±¿Ý|Ó°Er±Ý:rñéWmõy
+È÷¤¦Öák›´}j¤œ2ðÇi«JUù
+h¤˜¬/4RÒ“T £�ØÒâŠ@%¥¢˜	E�RâŒRÒƒ@ÀÒRõ£ôÄ¥%.)@¤18¤úñKŠ8ï@ƒŸ/¥�ÛsÍHbn¸¥qØŽŽô§ƒ‚(¦u¢–ŠJ¥}h>”RóÚŠ8¤¥¤ ŒRâŠ'4cÞŠ9 bQô¥£9÷¦QJ~”{Ð Å'éM%ŽÂ“½/”w¤¥Å&(Ç4c½/œÒÎh¥4œS”QE<ùIþè§sIú¥çøE-1ÇZ\{ÑÇz@˜¢Š(þtséG”~€~�=©hü(¥£Å÷£šhä}(Ï4´™éEc¥ŒÐFih4ƒé�jZAK@z(£ñ Š:RÐQ‚hÅ-&(¥¢€~´”(£½f—éIúPEZSÍÒ�Ò�Š
+%Q@æh£"ŒÐ†•ó´üÍ�AU.|B%ù-,!@§
+Jò}é÷WJO0?r<©¬‹BŽƒ“ï\ur±´V†_‹µ)ç°Ž¶‚ÍÐb¨øF7Uy"4â›â‰Cê)?*.Mix.äÜLz3mé[PîDŽŽòí,,d»—îÆ2G­7LÔ`ÕmEÅ»eO¢©øƒ2Ãggÿ=ç\�aÍGii~+šÎ%Û
+Ì;ÕGMÝêú‰l\›Z·¶ÕSO—r¼ƒäb8'Ò­ÈÁX“Øf³uÛx¥6ƒhûGœ¥|ÍXÕ%û=�Üäð‘Î—F&y|’3k7w]s#Tl»×p¯Z,•df$’Ùü+nk½0E†Ü� n÷5QiDÎÉ³C&w8õ«àCÈ;�nêo·ŒÁXÊdýk"oÝÛE€iÞámJÇ>´ �M,3œŠBêQŠ:™-�
+u+ö±«ÃZlr@pÀØÃ™¥ì9$d³Ž1ÔV¶¼û`‚(ÈÍ&ìKÔ¯¡’I®Rqˆ˜\÷ÏZÑ€¶$”ÝÀd(þ/jÎ´[Am3\3ù½¯J±éë¦Nÿ9Ÿ#cv¬�®l•¢lØÅˆ»pÒrjØ*G[DÊsòŒýjÀªV(ßjÖ–3¤1ó «yCã5Ú}µÍÊÏ,Aä^„ö«ÀzR'<Žµ�©þÒéœš¶g•!Œ»0+˜[Ïµ_LìI¢^FsÕÎP9)ÛŽþµ	Éà�úT²q™×?tUh´½Jáw%´˜4ÔY„`ÛÔ‘Ýà„ç£.Es7“o”³dŸS[×v7ðOŠr8¬™£S"ŽÙæ´‚±§-Š;É\b§¶mÒ aÀ5³Ÿ€JØäóJ°Aç(Eàž*äÑ)êzŒ¥tÈ†zŠÒŠ§`›,áOöE\QKBÇ‚iÀúÓGÒœ8 c�¥ó¤¥\zõ¢ŠG*ƒ.B�ÜÒhæ³îuË`wJ�JÊŸÆ–Ñœ$`žÜÕ(Éô!Î(éhæ¹EñÄe¹€¹oâû	Gï£4Ý9.€§oñéEeEâ].FÛçì>õ¥ÐÌ»¡‘\àÔ_¹Wš9¥ Ð0ô”QŠ(Í.( À<ÑHî¨2ÜPûFb¢eÏÖ§™-ÆËô£š@ÊÃ*A´î ¢ŒPp3’=MÏ½Ú!Î<Õcè)²]"s‘Q*‘E$Éÿ:†[˜á3ŒúVmÎ«Ù+çPËÌsQí/°ùM›�cü¢²®5Ç%ÿZÉžø‘×Iï3üT¬Þá{’ß{Õ9¯˜ç'�%Éc€2j,»žMh C‘jKÎzÕv»-Ó4ß+'“NX”™«QH\Ã¢•X�1ˆ©m.•åày
+g¢F:Šž7…GAS%Øi›°êz\xÛe�¨«‹­ZcÛ�Ê¹äº‰x TŸj‹Ÿ+î_1¼Ú¸#÷aG¶+2ï\ÔPâ%éUÒâÝ‡-‚j@!n’�B§Ü9‘›sâ=]ú·5�/Šu íêk¢hTŽMW’ÆÕòEWÔæŸÄ—î1¼œÔj×¬LþÒ6“nIÂ(ü*1¥Æ(ïÅ.o![]ÎYîKœíÇáH—Ž�‘Ív)¦éÌ1,8Í5ü7¥Ï�ŽSÛ5”±0Ž�©7³9ÈõV³°7à’=+Bow‚äAYóøsPƒ9ˆ8õÖ"”¶btäjC©’Íš¹ ëÍbArm¡ò.lË(èÝ§€’€m&çº½/h™\�WœõýkFÛSxñ‡?JãòXdÈËïZú€'ƒUek¡_¹Ý[ê‘J~Ú¯‚A\DyÇ5«k¨É0Ä�JJm¯±Ñ
+Z©m}ãíj·Ôõ­ÓL�‚Š1FGz«O§Z^´QHaŠ(£­Rž)(¢�KÞ�	A4êF#¥0+´ª'QžsWóœuªFÙ¦`ÀŽ:UÀzŠÅÞå�Ê0Ùõ¦ã5,‘–Á\Tdm8=jÓ¢”ŒÒvéT =:ÒqÞ—µ%zÑGÖ—ŸQ@	Š:ÑŠSÒ€ƒš( @>”QÍ�(¥ëILaF;w¢�¥
+1F(ÍRw¥æŽÔ”˜æ–�ãÒ�‚Š( aIKAúÓœÑG>‚ŠZ#ÿTŸîŠ´ÄÿV§ý‘OïL@(£ð¢€
+;ÑÒ—?JOj(¥€–Š:PÒŒƒGÒŠ(¢ŒPçéIŸz3ƒK@"�Š^}h ¥¢ŽôQKšJZ?*N”´˜£½=è ¥£õ¤ ÅQ@qG€Ö—Q@hàQ@)h ã4QÞŽ}¨ ¤çÖ—Þ�Ðt¤'4êaèÞÂ“v'V�Ãnì<ó/°¨­guªW2O©Å‘,A-Ù‡ÌÜ“C]ÜÛ©Ì‘’'i®-Û:ˆåµy¼ÝVæ@~U;k²ðÄF‹	#gÌàåÝ,�ë3ãó5éÚ}°‡N„nbŠì¦­nVº¶’ã\³—oî`V9ÿj¢ñ›svð^X8K»vÊ“üC¸5¯š7cÞ‹!:m…ã\íN@ó*átZ§ãŸ³xfãŸõ‡mtM–C�\OÄ)™,ímpxù'Ö”¶g+¦�ˆ	êEmÃl¯	—`ÇÒ±íFÐ:léqÏæEl2#až”7¥ŒVã.>x‚1z
+ÅÔwHáðµnýæKç€’*±V'•$ÓŠ*Ì `—nâN),z“šÐŠžx©m-V{ ²H#áˆàÖ—+I*TV]ÀÙ»ÝI½×§Ýö¨_OŠÒáV)|Òã<U¸|¡ÆñXIÜ—Ìgµì–Ö¦ÛÈwgwz#Ôe¸µ6âU'$â·m4¼ƒÏšD†.Ù9$T�á¨Œè—ˆò�­Æjoýûvwífáè=+j+ûiVL{æ¥¬Q�
+ÃÐÓA=�k]h
+o©Ö˜±÷Ö«Í¨Fƒ	ób°ãfÇZœçhªTû‡8_K%ßp½p
+f`ùÆ8Y¸Z»"’ŒÇ½XðÔI©œüÞHÉúÓi!'vtZ‡â²µCt|ÙÏ'wD­õÚ =ª¬rÔ¢N:T5ØÒãäŽ9‰2žÄk‰ñO†#Xþß`€Î^1ÜzŠìKûÕiJ°*Ã*ÃR»A¹Ä\[¤6	†Þ
+ƒŸCTí£ÝsØV®ºL@[¨?{§µSÓãÎ©n½³EîsÉ{Ç B1aSTHG¦\zV¦£Å8fš)Ã�HbŽœqC2 ÜÄ*Ž¤Õ;ýV×NŒ´®Š+‘¿×/uG"3åÄ=x«Œˆ”ÔNƒSñ=µ�+	ó±õ®fïVÔ5“!�©ÅQ-M„IIÆO5rÛH¼¾`Ò±Uô®•N0ÜÉÉËb„‹ûîÒ@iRÍÜe-¿]-¾•ef>b½’i5-^×F‰Km»¾èîj'ˆŒvhJF'öEãB]Bç²ã­S’ÏQŒá¬Û Vôž)0éæöHÖ ßêÐõÂ¥Ñ5Ëíh—ŠÐ¬]ÝúíYýiš{ŽRRü¬Ð²àw¤²Ô¯ô¹¶·—9*MvÓKï.îÕNî3ŠÍ»ðå�ÚlÊ~»zƒTå	üD8J;Þñõ© ¹_¾�þµ±Ûšò˜žóÃú²Üùl’ÄÙqÙÖ½M]eÓà¿³Q$rcrõÛ\ò‹‰¬]Ñ¥F3š¯m{
+Êådö©™‚)' õ¤¤šº,R@&©^êÐY€	%�@:Õk�C/µzž€T¶öI.%‘FþäÔ6ÞÃE@.uFß9h¡ìƒ©úÓ¥ðü2Œª²PkQÚ(¼Ù\"Žç­rZÏŽb‡|VÙR:æ¥Ùn;›Vt…‘nnCxÉä
+¥¨xÞÆ×"%ÞÀã¯Zá–M[ZŸpfÚ{“[v´·Ä—mæÉÜÕRZ!Úå±â½WQ�­•¹Úz1à
+µ­Ü 6¡vÎÇ�ŠjXð$R<ëù[êk;9nVˆ´%KuÂ¿�S¸¾ë–ýj„÷Ø<Ö|÷DŽNj•1sX¹=ñ'ƒYòÝdš¡q|áNMRye�÷Á­£¹\¿%Ñ'ån*<`òõ],å“«v«1é Œ¶kK¨ÏµÆG4¢ïÑM\M:$ëS-¼+ÔQqXÍûT��Ð&”œ”5©¶è)h½åEÐìeyÒg­'Ú+BE…¿„
+�ãN£ò¡XZ�}¡ñÒœ.©§h¥qÚ�¢ˆ·Lz”]°äQeO<Q¹æ•¢;²ÊÞ°?xÔ«zßÞª{—¶(g¥;+ìh¥óŒñR­Ø5šr
+8ùXÊ9úRäìÆ¢Ü£ðiëåãšÇóJwâ¤K¢Z‰Fû”™¶‘�÷$"¥rœÝXéwÓ“šµñù«št ÷FŠe¶ž;n-Çâ)‡FÒ®þhÿtç¡SR%Ôr�¬ÓkdÄæ6íƒ\²ÃÍ|ÕM2¼Ú%Ô*vº‡Ðõ¬Ù4ÄL;áqü
+ZÆîöÀî`dAÝzÕ˜u{;á²u»ç­B­Z—Ä®)œß�=«m˜cßµhZ_ƒƒ»ŠÖ—IµºB°È6ŸájÁ½Ð¯ld2ChýuCN~¦nœ‘½ÐoºÜÖ½¦¨Sj>®Öü©²§¸5µot²Ík¯Az�¤w	"äc&23\Å½ÓÄ~R~•©m©8fÇ±¨uåi ä¾Æ¥'ZjJ®2Zxæºã8É^,Í«	ÓÞŒfŒÞ—óTc´~PJ))zPB8¥ëÞ—Í)É}öfÆ:úš„ëK�»X-Õ–ÂXÒGëžÕ•¤ê¿o,¼4|ÒÜ/c¯mm™ˆQ�V­'{�¹ë†:å”vòyŽßhS€uúÌWzdrÄÛ³×Ú¡ÙI Næ¯j(§5 Æû�GÖ–Žh”RûB=èbƒžÔ´”L}héKô¥í@ÆÑKGJ(Å aH)hï@hæ–Š`%QŠ@Å:Òýi
+'áE-%~PsLŠNh¤;
+˜òÓýÑN¦Ä?t�>è§Ó$J1íKš
+%( u¢€AàÑÞŠ(¢–ŒPu RãPEPŠ(Æ9þtvÍ¨íE/å@	ÚŒ{Òþ´b€GQÚ€½híKA  s@â‚(¢Œ{Òâ€Š\zÒPGÖŠ(AõŸLÒÑ@	ÅRâ�Æ€�Â—õ¤ Š( È¤&—ð¦šBiŽIR=E9�Öšx¢Àq³i­Èªì ±8ÍAuÛYJÛ‹¸ºVÜ– 8îs!’H4®Œ·$ŠÅÆÅó?Ù¦�úímØ®”ü@XY
+ÚÃf¸§�ÈÃ=©ÏkÉtgÌÎÙþ ¾ÍËh5Uþ"\l�GÖ¹	&;­A»“OÙ¢y™Û'Ä)Ù±,�aYÞ$×—^kTTØ"çšæ²XàjÔQmÎ0})òX‹ªÛTóŽ*{DÙ[I±Ê¹9%O&³‹3œ(ëQ„s" à³Ï¥)-.L7Ðë”KyWÍcî÷Ç­g[Þ¾ù.…°+&WØWI-�¦›l–s—‘|°I
+ÁÏ¥`0�CÄ[²¢¹c]^Ç£;©©NÑÙI�X»d7¥H×jµŠ�U£#-ëM��ÆiGÜ<b©Ö¿C¡`—qÿo�êKp°*˜×”ØõGK»‰ÜàŒb£ç®HÝK·ž¤ÓöžDýE7£&µÕg{	md¤œ© §Ýj˜ÓaòC$ÉÆìÕ|\†ü��§ïbœenŒka½œorAròeÏÌÇïëBËŒ8=ê[}:wXäA�ËÍHö2˜[W ð}+ER1<çÂ‘Ï4ç»@„Ži�ÛËm²2dšI[o8Åû³Þ´U–„µb¤÷o!Ú¼f¶<6ëm,�‹cæ=êŒVQLZv8@3Å8NJæ1±zÖr•ÙÓ
+NÜÍ�š_À:ÈãV#½‰ÇÊêàÄw“ò§h÷¤–
+NÌ‚RqÔBlM.‡zóg�x¨S×šá-|GylÃÌË ûÙ®ªÎþûa4MÁ�JMÜi[r†¼ ÞÄøûÕ_MLë0àtæ¯jñ’§œU}|Í\ŸîŠˆ^ö0’÷Ž½	â§RxªÉ×¦\ê0XÆLŽ	Ãšé³e^Åòêˆ^F
+£¹5�ªø˜G˜,ò\ñ‘ÔÖEö±wª1HHH�å�LU9-ˆŠØ&oâêOÿZ·�.¬ÊSè‡ÎÅ‰šúL¶r#ÿ ·»Ôßl(R!ß·áWl4—:ƒaO!*Þ©ªÇ¤Ù�$aV‰UQÑ`Þá�†�›pà�9'©­6þ1_"Ü��c«BÑ§ÕîTÕwy
+sGø½
+t××ðiño•€ÀùPw®*•[Üê§O¢u5¦•l×08«ó­KVû}û]]�û~êvÇj—Ä ’öbKpÊ;-]ð·ƒeÔÜ_jÑÚƒ�‡¬‡ü+(ÅËVuÊÔÕº‰¡x~ãÄ7#QÔ‰[Uû‰Ð°ì>•ÞÅpF±B‚8ÀÀUèJ#H”G`(é@PxÈ¦ÝÎr	­ÒxÊ0÷ÅrÚ�ËiP‹fÏ�ß2ÔWspèñïÞM¹¨Ø’|¿;8ÏJ¸èˆz³·¼´�ZÓ�²ùsÃ£Ï"²<4éâ™´ù\ùb|¿áÍtÌ¶Úf—08%~¼VU¼+iñ	�m[‹vüêÜ®‰JÌèo4Á7íå:ó×ƒUWžîÔÅå±�qšÑÔ„²Ûœ�zVR;¯BšÉØ¢î™¦¸o:s¹ÏAýÚÑ¹ºŠÆvïnÊ;Ö?ÛåH„BL(ïëTå¼ï¸±úÒNÈmZÂxƒY™²Rsò®î•RÃÂkï½•donk]¯2:ÔMpç¦juc.$)aaD¡"b|É:zYæisÔÒ­ÄÀç&�‡rä÷!¥eÜ]’pNZ7A‰¢Þª\XG:"m�èý(JÂfmÅàNüúU&3Ü7
+¾4y¢;¥½Ç5'É­UŒÚe(tÜ
+Í×Þ¬¤P áFi&”¢`pi-Ä·EÖÉEÜGµ>`Hœ:¯@5®êEe4÷rƒåDØx¡týJá€ ¨5“©Ô«>ÅÙ/‘ˆ~u^MM3€Ù­]'ÃÖÏ­ÞçqÎjòøbÆ.cN}ê£(½Ør³›[Ç¹Â¦ŽÉvú×J4}€l�¥!ÓnGE\V·¦CS0—O�¾ñ©”OY
+k›;•<¦i­êÕšjTÉå™˜4|�óšS¤Æú¾ISÈaøQç)8ÈÈ«ä‹&í?²@ãu!Ò3Ñ«@J�ÜFðÝ¥ì¢ÅÎÌã¤gu4éNÖ¦~” úŠ¥I9ŽÚdëÈ5ZÜ'UÍnî¤8>õ^Í æ9óæ/
+!oPEo“w5YÄÇîõ£Ù¡s™!È‘n
+à~µbM<sƒŠ¬ö’Ær0Efé2”Ñj;ŸFæ­ExÈÃœæ±NTüÀ©©Rr½óXÊÑHé!¼ÁÇãQ\éÖ×yt\‡ø–²b¹ÏCW`» ã<VN=¬dVyu)¹Ì±Ž„v«¶>+‰ÀINÓÜ5[IÑÆ=+3Qðô`ÉÉ'\
+æ–ò4çhÚxô­LxÔ?÷”ÕgÐçƒ÷–²yˆ?„õ®0Ë¨é3bøÏJÝÒüY†1*}s\ò¡^Ž±w@§£5¡¸em’¬;¸¯»©ÁìiñÝXê‘�0)?ß^¢¢žÎkBúÈ›£ÕPÄ)û³Ðn=‹Vú“ÛHRqë[–÷i(çÐ×1…¸ˆ£~tËKété¼©²c'åoJN2£.j{”ŽÐ{s@÷ªVw‰*€HÁèjíz4kFªº0’qz‹ùÒsE/ã[A�z{
+^”u ç¾©º
+‚VsMóŸ²I©\ïEù«/G>TsÝ»aBâ¬øŽlê×gÛ•Æë³Ž9ozµ¹2)ù…åwë½‰¯Pðe»Úhi¸ó!Ý�jàôm3í÷€cäœW©YÅå@‘(Â À¬å¬®º­‘Oš¢�À¦P´}(Ï½š@¨Á¥éïE%QE&(¥£¥
+Oj)q@„¢Š^´N(Æh ÐP)h¦!2}(¥"“ô�èæ”�zAÅ!…¹ö¤ AÖ“šZ9õ¦1(¥¢€¸D?vŸîŠu63û¤ÿtS»P âƒGŒPS©?�( Å¥£ð QIÏ¥-•`QŸZZ1E˜ü~´¤àQA Ž´½)æ–€ÒŠ( Ž”¿ZOj_ÂŠNih)sGLPGQÅúÑEQF
+Q@úRâ„­qEQ×µPRRÑ@	M4ãëM4ÓLl
+y5b#n˜5‘â5½Ñ.!Ú2‘ZŽØª·,Rû¡N*¨Œ¸Hä%T¶úUëbŸPû)�ÉÃâªO´Í+ôÎ)Öß$¢E<ŠièK«†áÐs‚yìj!i+¥^¹žI¢#vzÕuÜƒ99¢â¤[	õ�ÀEÜkzËF}ZRR?—<¹àVV“*]MÜ�¢»ŸßÙa­«ºÇqÏ?ÅZ^Ñ¹6MêÌ¹|!%œfx™d*:U+xmç¸*TEË}k±¹Õì­ k‡tg+…Eõ®	�f’UQ¹Ü¶=D�ã©¤¤’/Þ]´åðˆ0¹5@çwZWfyKâ¤9‘�^nÍŸE(¤†±¥nqÆO4«Œò)¬2ç èiš=…eä`äÒôzÒ)'¿J\•íùÒlQI!UFàs“Tõ7W‘þS¿ Å\\3�ëTçlÝ8#€x5½7¡çã•Òfí¤åmbPyÚ*}ÀŒõÍWµ’1§���½Þ„~þÕÍR-Hã�¬Ktá4‰ÉèÜUI%DÑ„%ŽX�ÍI©¶4•ÕŸ‘Y7nûmÜd/9¥tQNÇ=Wïâ’1Úï¸ª>x‚ìÛ±ÀSò“ÜTM±:rSD�
+Ú„“!‡ñwoGs²µ¡m™ÐÛIæAãÒ­äcŒü§5ÊÃ%í—Ì¯æÇØŽµz=y
+”`ã½jš9çNpz£
+[�²J¨,E;MÔ§³s±	)…Wš&3;'Ý-‘Š�d€ƒƒ×Š®TfäÛ=)gU´F8#hªº�oî%-µ Öt7êö(� -TmGh0Ûg©5TèÝÝ³)Í#§Ô¼B�,xëÍ`É+Ü-ä‡oP™þuE&Ž¿Í4ž¾•fÞKO0K~ÍŽ¡;WUá¦V”ÙfÞ­M–+qåÅÝˆâº2ÛNQµ“¤òMfÂSc,VÑ£Ó½KŠ<µc™ÞGß�×%LGc®žOdhêW°éVþ}ã/TˆÆÒ´¹u»¯ímXùvÀåñ»ÿ­Y7R5íÏ�u)šBryJÕ[=sUDŽ%¸W3mêŽµ‡åÖlÕÔ¼Moj›-¶’£ì>•ÇÜßêÕÏ•n�4ŒxµtÖ¾Y$
+rÒýÄàWY§évZ\Am`Xð>ðëDiÝóHr«+@å¼7à$¶u½ÕÈšQÊÇØ}k¯‘ÀPŠ0«ÑGPóÀ&£¹«”ï¢9¬Þ¬Eš¨ê’®A?wŒV´qíã¬KÉ~ÑrÄó´íË‰÷)šÒÖZ…µÄ»ÁÞqõ¯3ñGÏâönI~sô¯H‰`àžõç^%�“Ä·p¦d,F8É5–·ÔºÖ[¿¨:økMURÒ§Ñ¦»Ôu;]Rx|¸ R‹"™e¢™­¬ßR¼„ù!íøÖ´’íP
+Lv®Í“F-§fZ¸¼y	,pLU	.Àâ šãs`¬í�y¥¸‰d�›¡ÍBÌsè)‚\’ jfŽ>e�/¶y¦•„ÙgÍDSàtæ©èùAaP�EmòÍ1^æ€Ÿ'¡4ñ(‘YÉ¨@ ƒVbžxGçÒ„ÇbÆñŽ
+Á<Š�oNi3ŽÕZ2u-,åx
+Ç¡¦Moou�1J�s”â¡R	Í?qíG ù‰õhþÙ§˜âÈSÂ(µnãq´ù!¸©•ÈcÚ¬AqåÊeÚ¥Êí-ŽqéQ(ßr“0Oˆ!Œ�®A#¥Bþ$˜Ÿ‘{Ñuá©<Öx%ßvž¢£D†Gc•Á©Ž½ÉöŽçS¡n–ÄNÇ-!äÖ¨�áyš8Ýü2ZÅ˜>â¡h¬i¾¤€sR¨ÏZ�XšÈ‡k°ZHG§Jh_QH&Œô`p‘sÔRw¦5a‚ þY@ßz!Ï^*ÆáHO<Õ)1hQ“Jµpuƒê+šÔtÉ ‘ÞÖWÀþk³<ŠÊ¸�÷ÍÖ©M¡8¦q_Úwp¾×gR?¼*hõÙÇR§ë]
+Å„¼jO®+:o
+ÂË”8bkO¬(ndé_b(õÒOÏü*Ôzµ»}ì¯áUÛÂ„E¹%ùª¼Þ¿·Œ8u`Þ´ã�¦ú‹ØË±®·�¿I¤­È ŠæšÊþ&!¡Î;ƒLó.â<¤ªEn±}L�6u$þT…AÕÍ¦­uSŸb*ÜZò‘‰Sò­#R,—iÉl’g#ôªRé£–BséV`Ô­¦ƒïVU•¹´Ñ“vŒ7G‰°ÊG½:)Êg¸­‡‰dá”TgÓŽwÄOÒ±�.Æ±˜øn}ëB¼w¬Z7ÃpEYŠr=ë–Q7R7e‚ÛQˆ¤¨	=Ís§‡&²&X2ñú
+×‚å”ŒÔ‚åd]ŽÖ¡IÄ¦®qvó[HnQ‡U'­v:7ˆ’qäÌcÁVïYºç‡’PnmFÖ^p;×1ËÇ YWSÖ°­‡�Uxî5'
+ÏK¸³]¿h´ÉSË%T–5¹„ŒgëT|=¯ˆg`IèOzÛ»¶EÔ¡ûØ®JS•9rL×}Q‘§êo§]ý’áŽÃ÷	5ÙY],±�˜ô5ÆêúzÞ[�‰*GcPxkÄ
+ßc»m¬§=«~GIûHlC÷‘è”TPL&@{ûT¸¯B3RWF-X(úÑF?°ôª—<!$ñŠ¶Ü•Bü�o!?Ý¦·äÚÔ�&¡rÿíâ¨Bvjþ ¬LÌT€\óYÈvsÖ“i’÷;¯Ú„±‘ó1ë]¤#
++�ð¤XÑ`>£šéqIl4‰V�Ö˜)àÓ´´™¥†QŠ(¢Œ
+9Æ(÷£­S£QH9£ê(¥Å'4�
+-JR3IŠ(ühÅ•03IKIÞ�ã½©qIøÐIKE&bŠ`ŸÝ'û¢œ$`yIþè¥Ç4Ä.=èÞŠ)`QF)h(æ—b€š(ühÀ £( KIK@(ÅPRâŠ?�&=ixv¢€ÑKŠAÖ€
+QF(â€3F(¢€RRý(4A (1õ£´PÆ(â—˜ bb—sEñ£š1é@½E&iMPSþ´Ò=è6ÍDÀóSšaÀªÀæ²õ›„ƒM¸ËaÊzÝ
+3ï\½t“ë‚ÿ*¸¬ç6¬‘P�39ˆœ�„9ëQÅ«ü·™âõ\Ó|ØFrËITiXÑÐ]ÌG‘£8t954Ér¹�	Å.¡‰î0­Àã"¶ì#[[
+ÝsëMÏC'
+lV€Ci`ñÌvÈíœTö58R¸«Z•´·¢=�³0@¬)bh¤(ëµ—¨­!&ÕŒ¦¬Í/¶£¶çaV-¤ŽYË</$
+ÁÉ­=*<FÒóÏZsøMpé:ˆÑ¾Hü)¤£'œÓ²JŒŠnqÆzWž÷>ŽÉÁ@IäTFEr®LŠ”“õ¤®xÏ4&'®ÁÛÅÐAÈÈâŽFAü)$
+ƒ/ëŠ§'ï.[¯j¼˜Hä�Ÿº*�¶7A<Ù+#ÍÅM=–êÃ'•uxCëU¢íVWž+îÎE ÝXŠÚ@Ï5�]RVù�#ŒÕÝ^Cö ›ðQ8¬ˆÕ�†Cyã­uÓ‹å9*ÊÌ·Ÿ)‹q*NpiÅ&œ¶ÒÈø�
+/ûUu#x×k2ûÖêŒŸBUD�îSÈ‹”r*7pçlÐ†ÛšÓ)nd›Úš¢Ù›÷¼¯Ú­a_VtGÖ›™FÒÕÏÊ$CÜÔ}†!Òå‡ÔVêh—×?2Ûyc¹5z×ÃÑFsxø¨¥*1Šø�£Š„·�Êý‰@ÿ�£ƒÏ¢Ê2@7,GÒº»ÆÑmW�¯¤´‚ÝÓÌòWžƒÏ-÷4Ui!ÌÅcl­†–vçøEXþÍI[ö“Kßt•Õ1µ¶O2]ˆ£ÔV5æ¹=û›=-2¨äÔó6Þ+h˜¯#[ÈcX�>q�Ï>ÕÐé>’îŸPvMÜˆÇZ»¢xv;"..ñ-Éîy]
+18¥t¼ÚìAc¡ØÙ€ÑÛ®áüG­^,	Ú8‘šœ¨ÍÐS¿cÛÝ“)D´Æ�±âž°â©Dh;S³$�a$óSª§p;QT¢�›bŽµÏÜô¹¾\
+üc½t¹Ù�7a¹ÝÒ¸ñŠé#j.ÌEÂ¶ìô¬˜t¨WV¸Ô¥æ•¾Lò{V‹¹'h?Zce-Ö£IÅjUI\G~I'“T§~8Ïj|²óš§$ƒœž}+©23(ÜGëL»`àgÖ –r2Q7àòs÷÷àÝHÁäQÓi=
+h•È–†ƒÞ^ßM5¶�ýÙÃ1<šÊ‰5‹‰"�I#?69ÅAevÖí#,¬ŒÞ‡­I§j[K4©1Y©ëNTgÍqR[Ã+D"ftûÊ"“í’*b;»Žâ�c©Ïou=Â¸ß/Þ'½:ÇS–-Nk²ˆîüÃ"ŽP»ý¡‚AB¥X´Õc·�\×ž:ÔV÷èuin¥�71ÅFÊ—wrN"	à*ôœPÓf½¾¦'Ô£·@Q$o½[oŠì€õï\�¬_d¼Šg|ªã5¸úì—­`,OLÖ2´MV»–Êàñ�}¥Àá¸¢=7Äzš ò�îã¡má�RÿKž\gŽH¬¾µN=Féßb˜pâœ§°¦ÜY½»�G#Ò£ËÁ­£R3ØÍÅÄ�7§ŸZ‘¶È¸uZ…=ê@yÅ_-ÇÌ[Ó¢†ßzDûCœí>µuÆ$_CY ûšž;¶R7’Àwô¬;lZ•ÍQ�Æ)¢$‘Ï˜€ýi`ÿIMÑÇÓ<ÔFî(.Ä¬ˆ[€ÄqšÉÍ-Ë±)³ƒpQýžÂž~µfxr¸'@�µhCdgŠ‰X7\f¤‰
+d3–Ï­9"ýöõmÜcšY1ÍC`NÞÜTR\F˜9>ÔðâTÊÕw½ö¨(a–éqBýŸw$ŒúÔ 94…†6Š§®â@ …þëÎ‡µ1¿ð4ÃvúRùr'+!úÍÓƒèc^Èãƒ@µ(X´*ÀŽ¥>9%.€ÁjF$îéYº{2¹ŒçÓí˜6ÕrNsŠÏ“D³}Ù‡i'ŒVú\)õ§	Œð£Ø¾’dÎVO
+ÄA1HTöÍDúeý“/—0lôõ®±ãŠ@F0}ET¹ŒDUò�j¸ºñÛR\`÷1£¸¹ˆ…¹�‡¾*är$ƒ*Uƒp²}áùÒ2DÉ•7µl±ubí8˜º1{2¤öqÎ¿tgÖ³'�íß
+’½�k±xÈíšRHñ"ü§½t*ôªé{2y%%e=x«ÐOÜµÅ™ˆ“(jº“qS(–™ÑÛ]]¬sõ¬­AK„7zKkŽ˜ê+^	¼ðŸÂ²IÅš+4ppM%¬Û\*kÐ<3¬%ôdœŒ‘ŒÖ°uýFdUÁëšÁ³ºšÊéX«!È¨¯EU�Öâ‹å~G¢ÏÙ®ÝÇËÕ}ë”×ôÙ!¸¶Êxûàw®™5(õ�2;€GÚ"ûãÔS‡PH×éYÑm.V[³Õ	á?¬Û-ælÂ“]§¯,Õ¬…¨Å}lOÙ'9W xT]WNV
+™S†½5Èìg-M2)1ïJ1Ú—ÑrF‘‘Tu„�:xV…W¸\¡úP-u¤ÛM¥I�I¯|×œ\Ú½«¼dž:W®Å3It¯>ñ=¡‚÷f=kŠ”¹g(³Y«ÇC¶ð´
+‡n©\ŠÞTÀ¬_
+?› [6yQŒÖð×î˜ˆ�·Nª¡x¥Å/åF(”qF(â€
+(£Ò€
+LS±ïI@	Å¥Å&(Ç½¼Q�JJ(¢€ÒÑÎh<Ð!1E9£”¢“Š1ï@Ã=è9 æ—0’–““é@fŠÝ§û¢�Ò›ú¤ÿtSé€”´Q@ÂŒÑ@ë@‚Š^ôP}¤Q@QøQ@QÎhQKŠN(Qõ¥úP@ aÖŒb�ïE!}¨¥æ�ñLŠ.(¤¥¢€RÚ–Žô˜æŠZ(9£�ZrŒ¸®mo$2\y2±¹Ÿ“<VW::
+U°¾‹P¶ób<©ÚãÐÕ—u�wHÊƒÕŽ*®–ãåw°~4rj¹Ô¬AÇÚV¢:Å€m¢RHô©sˆr²í5˜u¸‹þî"Tzõªók¥¢‘m��—“¨­ ¬mnRpè4?Â¹=ò,aü×óGSé]Ÿ+\iñÊç$Ž[Öœ%rS'¦šyÇ¨üéï‘O™a>´ÃO v9Â*�
+-†ÍywŒck_ÌÂÊ7€+¾ñª4]?íEw1m W›x‡W}fæ9Ú0…oÖ¡ûÎÀ�µ3ŸSM,}j2IëÖ›œµ¢ˆ¹™b&>jwù€Åtë�$%¶“Žk›°�Ì»Aès]éò+QIÂ·¦+)½KŽÄ³�AK†6Ò3Y×ú|rBò£æEnsÞ¬*X<û‰’w¥{­2ØÇ²ÄzlsU'ufbEbóËQ´§´áÓ®a½’ÃÍUh†IíT¥šO0ÜÀžPN@^ÕNMRåæ24„¹zµNä&ÖÆÜQÏ-¼ÄHD}~õO¦[Ízí�òõÀì+˜[ùPáºã½u>	ÕÖÒîq&J£,{Rå]�UYõfÌ^–X‰wXÎ{ÖÛÌ—ïlYTŒŽz}k±ºÖlÒÌÉïdè3Ö¼ßYÔ¤»Ô¤¼FÚdë·µB�úí¤¶fÍ�¼÷×�j…L©Ï\zÖÚøYÜ{…Gc\fƒ¨MmªÇp§-Ñ³ÜW §ˆ-<Ï|ƒVâí¢¶ovs³Y®‘|ö×L0ã©<YÑ¤~cùC÷lÙQíWõH®5Ý@M°•^WÒ´l<4ÎÊ%�D¥sÓš�c}[#ÚqÆG\ÔÊê¥y$ƒœšß:V•k‚ò™?6MImqcnÎ°À$Ëda3�B§M	É³˜šÉï®Œëg#ç�‘Vbðöªà´�ö�t©%É@©*†Ü3ÅL÷r/Í#íúšé�WdŒœÕœÔ~¼p­-Ú fÛ�Ï5nÓÂ�4�ö‹¦8=»Õ™õ�:Ñ2î§<zÖ]×Œ©G…ÄGZ—ˆ’³‰²Ú‘j�•§<î<TW:Ö“¥‡1GèC\¬þ!{”ýæöÓŠÍšhšÖCå1ÝÐ“ÐÖ.s™i%±ÐÝøýßÁQÐšçn5ëë»à“LÆ"ØÚ=*­Œ$¸0—b­Ûé‚Þc$Ì¬ßÂƒ“UËÜNH}€ÅýÌDñÔd×C&·µº¤$<ÛqŠçâ‡í[÷nx>µÛi>²´U‘ÓÌ�Œå©r¦;³
+'S×&]³G~™®³LÑâÓ¡ÙJv#“Z	¶1Ç”Î[„¨i#D4!N§šš4ÝŽ84‘ÂOÌÇ5iT/AR W0$H"¥7áÒ®Éqh¤¥Å0
+(â—éøPô®rY	ž@¿&¯kº‹Z ¶ƒâOáÏ**Œ1-¼[¤9n¼Ö´™qÑXÒ$2Ë×°õª7Sä§aR\Ndl’p+úspLQŸcŠÊòÝIqzòµ›¨êÃÎû<
+œ™ê=Rý,bk[c™X|Ì;V\6ÄÀd$�SëUÉq)Y–"ÔçY\Å’O�qò3Èñ’Xç¥X‰eF-
+»o<Í•�ôÏ­h­KnLÁ*ÃªŸÊ¤†ÖY¹^©®•í•a,bB=êŠÝÐþìçÔRsÅ_SêÐÛíÃîÏqU×vp¹ÏµnËkÝæ‘c©ëT­ìÞîäAcHÙè)©¤½áJ)¿t¯[>g<žÕ±¦iZ–ªÂ;vòóË‘€+§Ñükhú³yÒõ�º+ šö+Xö¦ÈcQ€¯:¶;¥5sHRîaXøÒßjw-4ƒª'·¡[
+=vÚÚÅÇ\dþuÍê>.··b‘eßÛ¥e¾½ö“ûÉÈö¹}•zÚÈÒñŽ‡g>µšQŸLÕ3­ù‡ÆÎOtÍs	yCëW"»C‚’€Êr+X`ÔwtkÞ
+@[4²Yäœgæ…`¥ñšê;s–ÎÁ~n1[°ø’X�›•YQG'½^†M]�d�È¿0ã
+uFœ ½Â9¯¹Ÿ©è7šZÅ$ª9>ë)þ•@HAÁé^ƒy-Ž¡¦Û¬·«i4Ì\†úÖlþ±¿P!½´Iü´IÝøVŠ£NÌN	êŽP6zãRjš=æ‘*¤áîHŒÊ©¤™Æk¢é™YÅ–ã‘¢`ÈÅXwf}JImÙ.0ê:tªjAíHü�,\â°©‡Œ‹U:Fo;M…ñÕ5VÖçDÅY—gŠ|ÇÈ´H‰ÀD×3ý³5�-2„±Ã/aXbcR1\…E§¹ÐÉ©:ìO—¹’|H›sÅU²×mnÐyr©ÏlÕòñË×Þ¸£‰œt¨�yWBµ¼~RÓeá×žõhÆ@ùNG¥BÈ	íŸzë§VÙ’Ñ"šÙ*]‡Ò§«bn5NG4{g4`:Šç¡¥¨ÅfœÜ®)¡yÎE2Y6¡9É§¨Œá9YŒwÚG­M‰ÆX
+Æªêh°Ä²¡ÀÏ"´ºD´N.1Þ› {½±¡Ç9§ÇgÐ$€‘¸f‹C7F%;›®}*ogp°Ia"¨?Ê«I®zŠèÑ²�Ø\¦ o"nƒ¯zëUbÖ¦N
+Ü²\ÁÈ_1;Š!Õ-çKþí‡Un+rksÀ Ö.¡£,ù8ù½k9á©ÔÛF5QÇqÏ½��OaéU'‡glg‘YÞ~¡¤9V&Hýý+F
+NÖý¹Øæ¹fªÒvz£Dã"lŽ+BÖã8àŠ¬ñ?7ài¨Lm¸v­®¤´Ñ�„]Ú•nIæ¸½VÍ¡‘ð¼ŽžõÔYÏ‚äƒ\±ó F¼�Sgf[ÔÁÒ5¶pÊÝ>ðõÕZN³Ã¸µ«“6Ÿg‰n”~í›
+Š×Ñ';å€œ…9J™%}Ö†åÅ²êš%Öœã,«¾3ïXÖ$Óï‘eb9Øêk~Ú_*ñ	?+pk—×m>Á«¼¨0²7íD¥¥‡cÖÃ+W�Ã"�XÞÔ¡¢ÆXåâùMl[AÝ‹QÊSRâšßw¥WP1î[Éq ê§šæüsg•·½�~FÀjêîÓ®j†£l/ôI¡#,£"¸+®IóÁÝX©àiCé/<#WRÅ|?b°ÝÄy*ø5Û/Jë¦ýÓ+1GJ1KŽ)?
+ÔAŠ\Q�Z:u 4ihéÖ€t¥Å„fŒQJ ˜Å)<Ñõü¨:ô¢—�é 
+N;Šâ€E�.=è(¢Š1IKI�lPƒëG>ÔcÖŒPRN£ð æŠ?E01˜“ýÑNæ’1û¤ãøE:�RwÅ/z&)húQøPAúQÏj8õ ü(£¸¤ £¥”Š`7­.(Å.((¥Çj1@œÒÑõ¤F(¢€Rt¥£š`Q@¤EÑL�š)h(¥íIƒ@
+Ð[Ðf¸KÑ%­´z’!cw#‚WŒs]�ÝÜÙÜ°•w,gŒ×)¨N—>Ó-í\™"%¤¾OJÂRF‘Ž¤:n¥6�a+ÄBù‡%MQŸQÕu9¶ÅÓPÚ�ZÈêcpç5Ôi:¥�žž–þHFN	ÇÞ÷¤œ[÷Ž‹¨-ÙÉÇo¬Z2âÊO$}â:Šr›„˜É?0àë/õˆî4éâ*ÊÌ¸\æ–R\dÖS”y´%ÍÏt[Óîî¬.…Ôb)øå$—’ÜêÓO$IKÉDQô©"†yAòFp2EB£™7(~ñ=©ó½Œg¥ÿ´¶Úcqº¥ƒP”Ø}œÊSiÂã©¦	íþÆcù6“’ùé\Ö§­B—É¼ ì?1
+
+>†tÞº�³£Yß#®
+0ÜLG7.}³XÖš´�>ÝêÌÜ”ëšÖ“Êx#¸Uò÷­ê§ü*-mŽ†‰›]½‚ ±*¸^Ç­EŒÔÊÑÍ
+«/¯Æ!Wj¤¶–ó’e…Y±ÁÅ8TwÜ»BÚ¡|WvÚÕ•´vÈ>C¸‚sšä®,®ïÄÃê*ýÍ­å¼ÛâGTž•¥§[êwV¢g’0ýÙG5Ó%¨rR‘Ç¼ä�([`Fsšìÿ±^xÝ.lãf'*ñ·j«ÿÒ¹+)°däôªö¨Íá×Fbi1ì«[Ò@.T,ŽU ½3IÒLÎ÷;¶%GSØU¸\ÛFJ«¶øË0eèÞ•œ¤›'‘ÄÉŽÈ<ò«œ,gªÜEåNñ†ÊŽ†·#+jÛãÆxËJs±û
+Ä—t[¤¹�”ÉÓŒsB•ÉqdnŒmf	÷@äÖ_zé™ŒZaf8ÇzÂšØÁÁŽ¹­)O™ÙŽ­%š*í$ð*îœå$)UwÔV¦…¢_êw
+öñ/¼‡¥t&sîIæ0Ê?ŸJÍ™YG­z¿„¬á;ï'.{…8««‡ìNDêy¦æº—¹Àhº5ÝÜ�Ò&Ú¥vºw‡d=Ìløèƒ¥ZéÖjDAÐ(¬éürŸv5ÍKœºÈè
+¤Ãã�@ÆMDúrã7WÄ�î©Åq·0Ô'“lXE¨T¸”nžá³õ5‹”�)Ú¢Úp®Þ¬sLo[¢?Ù PIéŠâ~Þ€÷cïKý¦Â9Qc;\mÍfåU°n&…ç�¯g%a­cÜj×·2LïžÙªè¡}M?zç°µª‡vbçØ�lÎÁäR}©„-÷ä žËéL–o¼@Íwl¦÷4ùQ:—#¹Ø¡6¡ü(•öZy�ò‹~´Â«ý¨Fp*­ùd€D²\äŠz-‡gÔ‘ofrR1µ@ÉÛÅE`òË¨ÄÈsƒ’¥An› ’q!£îúŠ±¢ÅK,¥ÊÉÊ�Z.RŠ/éd\ëR¹\aø®ùnFÐ¨Epþ�Î¼�í?<„×€`sJÍ— E’œ¶@«‘@«Ú„ã¥L¸¢Ã¸ bž)§�L9—ëF)ÀqHb
+P(â—"€*½íÜvÍq!Çe¦¬IÌê-©jJ¾Yû,ç<1¨“°ã©
+œ&—P»;æ”ü¹ì)ÓÌXäŠt�»8à•Fêp‹“P�îW¼¹*6Ž¦±/®þÃ
+	•�åWÎçrÇœþ•RúÑ^2vóëQ*±‹±j›g+ y&Ë‚Y›­kN…
+Ä8UQŸ­ZþÏ�
+ÙËÓÒ™y%ˆlSöœÁììb£Jgd…Kô4¿j•_k'Ì;w§ÚÝÉ¥ß4È~aÒ‹mO:ÃÞÎªÅùÚGÐ­cÇ�YÌ^Sgnj[mM"Ëm$TQ^ÛË­›»‹ehsàUýCêJˆ`±VËoAïYÎP‚»nö§éwÞ&½&1åÛ©ùÜýÑÿ×®óO°²Ð­¼«D±†”�™�;ýOµöÈ"…CßÜ×'­x”¼âÎÕÔ36Cü5äÊu1åŽÇJåŠ»65?Gm”C¾_LÖæ¥
+Í„‹ �Ü7 ƒòŠÀÔm$µ»HÅâÎe?yMÖ7ºaˆNÀ‰FW
+œ×¡K	
+z™:­•®”¤ÜúsUÆIàÔ×2eóÓŠ�æÈë]‘VF-Ý�ëÑˆ§¤ó.J³qQ%ºUèL`�GJm ¹µa\hÞ{9,x'5ZÎâKyáx™�ï ûÖýÅ­½¥¢Å‘@Äg½rRÜ®
+öV~uÌÕÙ¶Èô}kT:Mà³ºBèñW ƒØÕK+Û©vÂ‘nìC\×®uÁíŒF�…À~µ‰ž9VU�Nr´%® ü�A’¥µÄqÇ^r
+`ßZ­»nC”éô¦é¾+Fº—‘‘€ÙïWoV+Œ´RoCè+kAìey_S$OåœüëCH_´\‹†»„ñŸâ5\Y[6V_˜Î®}¦;xV(†ôQ{n
+2Æ§tXæÒ³v
+žYR9Ã3<…ÜrjUpzu¤ÕõÌ-CDdc=‰ØÝJƒÖ¢±ñ5í‹yWº¯PÝEtf³u-"ôfû’öjÊTá%i#DßCgLñ
+¥ðdÚÝÔõ­Fòîž¾£µyLö÷€ÙV†­mi)š×Ý21ÀnõçUÀÊ>õ#HÔOIuÄrºzŽÕWÎ}ß|ý*ý–£ÜAãpÀõ—VB@d‹‡ôìiRÄ¸¾Zˆn+¡@Ìç�Æ“Î~Ìj¤·-…`yµ½çîñ^Œm%tdÛEÿ5ñ÷�ÉêMP7Üp´}´‘÷j¬+š1H+Ü´ÛÐ³C¶@}±U¡›žô]ÎžE>E`æ±vÖ\Z =…V…vêaÁáúÓ£p° ö¨!“}èç…š—S/_;=«¬móT–±±�v7
+¥q)ž´ëy6Ú€;óRà>k›Ñ°’0x&£x�ê+6ŒCëV’å�ñgëZÆ¥•˜œo±Z÷MŽt*ÊÈjš,¶Œd‡;G\v®èÍÔ²cÜT3ÇÈOÊkuR2Z™òIt8;}^X€Žl²ûÖÔ,²D²)0æ�/‡`¸¸2UsÑ{ÕØ´Ø`Azšä” ž†Ñ„š �Œr`çž†¶àÛsjÑ·qŠË{C€U°G­_°V�€lcÚ¡Ê;—fŒù4Ð4«›e}Ù^+'MY-utI~]É‚}kª‘³;¶0;{Ö^ ©Ð¹1n*†|ïšÖ.ÉŒ¿ÂsU5Ûo¶éòHY6~•l#H¾Æ¤‰~Ók+nwœÔÎý
+‘[áíþÛÙmXãÌ\�­wã­yv�e{§ë—&/Ý»}EzT�ÜJc�²ãµmMî™œ¢Y¤<Žô´b¶ib•ÒðqTm¸¸’#ÒEéZwK„,xµ”²p
+á²{çÅ[Ù—
+™á;sm¨êq»æäWZ¼
+ÅÓ`êwŒ?Œƒ[kÒž·M6L÷IÍ-ÐH”´´b˜4QßÚ�h¥ã4S:ÒcêNô�h>æ–ŠNhÉ¥£4 �­-!ëLíÍ´b€¯J1K€))b’–ŠOÆ’—õ¢€�Ò—ð¤ ¢—Pú¤Ç÷E?Øù‰?ÝþÔÀ@
+Z1GµbŒZQÒ�	FO¥-Rži@¢€ÖŽh¢�¹¤#Þ˜éGZ\zÑ�jN”´u£ð �ÖŠ;P�E´€(Å.(Ç4”Ê—r?@	Œw¥ëÖ˜dAÕ€üj)¯í så±Àõ©”’WM’Ë*CyÕ5�6½6 Lt!À³ŒbªÞ_Ëtí¹ŽÞËXz¨Ö·">TäVTç¿x¾Fµ4e—`1\¦E'ëíQÄÊB|»Aì;Qq$…Äß+9"N€Uf½-u¹#¤r«Òª¢‚VEÆïsI�Ë€õ¨ž�ÊiexO²ÌÒ©\¾á�­éïL0ÍqÎ×4HpŒ�ó1tElû§Ö�3I4Pª’ò(,åí&6ó®Üò
+iNž—ÂèÜÔUk«4ºÈwo|qVÒáÈéÈãëN,¤nQ�j‰èÄeC£E
+:,ŒÉ'U¿áµYbüöÏZÚfõQGš‹‡•¿v¿¥:sm‡*o¥ÚÚG¹Pn3ŠeÄ
+p78Ï´ÄÖrAû‰‚º®Jºýáìjš6ó¹¯jÖµÓÊ�°êhòH=FjR&ài…F3\©ë©¡%¥Œ×÷+¼^k·eì*•RòHm¥,d£ÁEHÎÐÆ^ÞFGÆ2§³¬îÅ·˜„…‰,�Þ»!Ë$E�Ë�zÊJ¬ç9â¨ÿiÆÐyk†gùßU¦–Y7L­°†À_jdš¥á¶X|ã±z¢ªL‰JHØº‘-c
+irî gdƒùTÁüÄV#ï.q\öžZæ÷çbH_ZÝNJÂ¦ŒÚ­Gç'ƒâ{ˆä°àn
+µ£¨_%µ³HHÚ?S\ÚÎºŠ·špÛ²¥*q“eróhTÝ&Å\ò¼ŠŠrÓd¿,zÖŒ«ç� '�é³CÛF#,+®6G%Nm™‡t&Ö5/.E"¹‘‡jí/µ›}.1gh�J€p*(C¦xrkØº8,ùW-Ã½¬—E‹<„œ“Þ·K™™7c¤…u
+UâY¼«u,+úx„$ÎªpžµÐ]·—àÐ¶F2Gë\‹:Bcµk¶2™LG4Í¹ÜÔéH¨ÙÎÁ´àµñžXÖm»Ž×.åAœ“éW"·GÁ “ïYðM“ùÖ”wöÀ}ñXMË¡¤bº–c·Œlý)u°é'
+vàÒ¥ô~Yq‚=@ª÷Év¢$û ÖSoSI8¤SVãéB©à‘Í"Æ¤ã­J°+60N:âºR9›a�Ý�;TêÊ*€ÍéMXÐ’¨Ø¢8d$¸rh°›}	£ŽßÞNß—Ú³æl1šØ¹�wnHö³ŽsY·0ÄÊ­¼îþ*¥¨”�õ'‡û5ð1.zúŠ±§lçËÄƒî¿µC2tÈÑ“nNå8ûÂ®ªÉ†¶Ì�UùFõ Ùjiø:"Î¯êNkºA\—„!ÛDçë]r)Ç`dÈ*e*e2‡:âž4
+j–0Ç­½¨Ïµ&))sHÌ¨�#ð¨2ilÎÕîLq-º¬—ƒì+0€ˆ#^‹úÐn
+Ü¯vNw©ô¤#8¬÷w)Œ‘°¦²/Èà€ô«÷²íLg¨Áw2Âþµ3Ÿ$n8G™ˆ"1¯ûMM¹ÖÛvŒ
+•þn¢™"©�ƒÏ¥y.£r»;’²±Q�¬9	òúžÕ^ãh„ü™$u­	Y ¬I¨ÅR¹"3†àc€EuSfsG!tK†I#Ò«€K`u®ÁVdi|¸‰+ó`Vf«gÚmâ´„ý¦á×|jœ²¥Ô‡EÑäÕï–Ö.Nf�ôQ^�‹o§Y-¥°	c™>µ[IÓ!ÐtÁn¼ÌãtÌ;ŸJç<S­ºƒglNæûäv¯.¤Þ"§*ØÒ+’%?ø�¦vµ´l(8f®q#f;Éæ˜ÈÇ“š•$Ú0kÕ¥J4ãdsÊNL
+;8�žGz–ƒ-Ú™Ø°Q€	Î*3 ëL�-.ìqœV„+‰wóÌØéž*¾©¦VW#µM§ÂgºTØdÏðŽôÓCeA‘Í\°.óªžsW™-„…%´‘8ãµ9 HfgµÈ¡=©7 %©rêöîàHöŒ(c÷×>O7?y�&´§-”„ñ»ƒïPh¶ÿhÕ N 6MJjÅksr(Ú(�ÃœÔÐÅ,ð4‘.à88­ñ”œÂ¤téXé÷šy’HœªnÝÁ¬ÝÞÆËC$Û\Å¨–2¹õ­»MYì²»w/¡¬Ä¾¸¹¹ýënUÆ)Í"·'ƒBDIšZ¸¹‘[1ÇËQ±ÿ=?ZÎ} eO5O~)5Í¸&l¥Úƒ†lûÕ”“€Êr¥sÙ9ëRÁs$
+•n;ƒN-¡5s£ICu§‘šÎ¶ºIÀ á»ƒVÒnp{V›¢5C.ìá»„Å*qëŽ•Ëj:LÖ.JåâìØé]˜Ãw¦<JÀ«TðE$ì;&qz~£qa.øÉ+Üz×o¤ëÑ_F8|r	®_TÐÌ$Íl	SÕ}+*	¤‚]ÈÅXvé\õ°Ð¬¯Ô¨ÉÅêz]íœWÐà�}×ÌÜE%´Æ)©¿z·¡ø�na�€�q“Þ¶ní!¾@dpû¦¸iÔ�	òËcg5¡Ë†çŠvê×m3„b*&ÐäqÆkÔS‹WG;MPµ(ò¤BXá»
+si7A¸Ó¯4é-J¬`ÈJä‘Ú‹¡¨²0Ä�Ï)R‰ŒˆîëŠlWS‡Ú¹5¥¢º›‘\ç=ÅL¦ÑjÜ£$N§
+@¢‰u·NÍÓVÙcøS¢¹X{e�µ”j¶ì[¦’1¡eÓ¢Îª­�÷cMgOâ’ö8¬ãÀ<`÷ªúÒ_^k’\É(�ˆƒv­Am§Gm!’9DÏ�˜�ŒVÒŠµî:6r³ØÒ¸¼¹‘„»c×µ^Óìå„—‘Œ®Ã±àT6l·7&í³ Â jÞí…ÈFÌlÈ<V.œ–­ujÇá‰u®íÜqùQå•Éà�Z`“Ìù‡~Ôõ†H?…sÊ6f…-‚9§ˆAÀ­
+™UWs±Ú u'Ò¯\iZ�”^eÍ«Â¤w þ~•q§)ì‰m'b˜ãq?QMdGûÈ§¥HÿpüÞ´ªÀŽ•CN.Á¡Ì)ˆ¨¦pKNX`ã¸©œ`â–åÈ2Z.ïa‘¤
+–C°ýÑéR4Ž²$É1GN„qRH¬A‘ˆÛõ¨†Ò‡ƒZÊ-!^æ­¾¾élVH·Ê:7j¢uÝX}¡‘�Ïú¥Ú1P3d`€qÞ¤Œdm
+=�¥DjKfÃ•
+›Qºy¢’Y]‘“÷ªxÁö¦]HÖ³ÄñÎƒÍ®>µ,qý©š0œ/Þ$t÷¨¯ôû$–) ¸ß�ƒ¹p¦·pºÔHÒÓ5™å2º‡^¯J×‹P´bJ2}kŠ…dŽõšÒêãŠzš±%Û[·úD@ÛÅLyâ¬‘-E³¹Æ%fhz¤z� Ã2ð§ÔV§Òº!%$ek	õâŽôij€1E.)9ö ­£šNi€¼Rj^”„RÅ`ÑŽô”RÐ(@%ô¿•Àm¥£“íI€”„sNÅ'Ö€Š_§4}J`'JJZ(1A¥=)1@	E/Pú¤ÿtSé±Ý'û¢��éÿ× ¥RÓ(¥ zÐQŠ\ÑÖ�ZJ^”P�z(Å-%{RóE Œz
+_ÂŽ””RÑ@¼Š\{š`%¸Í…!‰øÒ�F
+(^öV†Ü²ðIÀ5Cíÿx“øÕ½OBÙéY¥phå¸^Å�êÃ¦kòén'!±ˆø­Øªo¦ÂY›�XäÖS¥)lÊ„Òz”›È=fª&•§™L�#«r+Sû6/SùÒfFˆÒ�	®¦Ž¬L¹´ËYœ´—r3cœúS“J³ØÎßZÐ}%HùI¬Ô¶»º™â¶GA’½Í'NHJ¢}K0ÙAÿÇÉ>Æ¦0BN¸JßNÕæfV·)´u"ªJomî3FêëÛV\žF—ó4æ‹b‡Ž\È½àŠ�¦˜<²=K1ÍPk‹¥]åH®EW}Y‡¯½ZL9’:ç"qƒÞ—Êä~ôW2/ÞSÃ�øÕˆîçQÄ€�ïQ(7Ð.»�¶Ýÿ-€¨.,·ÂÈe¸¬¸ïî$|`cÖœ.åï®{MS]ƒ›Ì²P®ÅSÂŒ
+·mˆ¤<ƒ=±Ú²|ùÝ¸D'ØÓ�ÔñŒ4x'Þœ£~�Ìl‡‚‡�˜sÅb‹ésÈñ¦¾¢AÆÞÞµŸ³¸s#uJ¸l�aUe´. ©Qê	¬Øï¥ê#È­->)u(Œàù{N1ë[B›z"\ÒÖä_Ù²:�sQÉ¦Jlü°PIœäV§öl€cÌÁ i×¬­S¨¶%ÎsÇO{kƒ#6I5~Iv.’x<šuÓte=–˜b2fÞGAéSì&ß¼S­h6×CŠéKØüÎrö­%Òì
+­¤@¿/Z�N#5n©$bê³+QÐ´Å�§`Ðíî•Èjvq[Jéþ`dÈo­zªº•`#¡®7Ç6É–2D<°AV u¢TÒ'Ú6cË¯3xy4 ¤àŸjÆóXD!þY8cÉ#Ö™š¸èK4ÿ¶§:7öYŒw¬íí³Ëä¤4¢©LsÖ¡eùÈÅX5åáLB,n¿9_–¥Š2§Ì #ò¦§šð¹”^¦¦ˆ;ZÈê2¨0i~Þú±[0 ¶N[j¬vÛä
+N2jx^[y&Oùe‚ÂžeFÜçÖ¥¢Yz«:0ÉÜw«IuÐKi‰œÖjBòg“ŒœÔ¶0ù’²†*@ëIÅ1óYX[-gVeùGZ×’æËÌÜ£»Ö£¶Ó¡–HQXâG‰î*{Û(Òõ£€*Æ¤ly¨i2 ÚEMU¢šíZÝv \mô5WìÆ@@8­MoMmìÂeš-Û—×Ò©Äáb(ZKYõ)m>r?w•_¥KspÓxvÑ³†+T¦”<e	=r(Šfh’ÔŽ7‚*’¹´]ŽïÂÑm·'ÀÁ®‘8‹áØÊÙœúþu¸ƒ¦jÖ€ÉS§Z‘N)ª;Ô€T”(Í8�NÅš2híÖŽ)V?ˆïVeµÎ<Ó†>‚µÝ–5g=f¸Û©STÔ$W“<ýÊ‰v,ÛCåDd,ƒî“éO–@«�Úœ E�~èNêL3Oa^å9·Þß¤1K0
+·,e&êp}êï†,·I&¡"ôùc´Ýj5Žû��Ã&¹1K÷w7¤ýë†=Í·8÷§‹daÃ‚})§©‘Þªý�ÿ‚b0Ùíí^}>^§S¿Bä�å6½eê¸Œ†=š¶—%FîHÏ­W¹´ó‰%�=ªÔ¬ì…êr«Æ¬ÅˆOá[ÞÓšidÖî×æÎØþuSRÓ^[›]2.^éþb;(êk­—Ê²´X¢G
+mP_zÖµ[SQîdÖ¥SPŽT’M¡Û÷õÎê‚&¼R¥?òÑF7�z±u×ÓyÇæ\áET’ÖTÂ¸ç4°éF âîV–Ú?%ÀQ“ß+žtd'¯_Îºã•T†YínY±´àµÛN­·2�;”`ŒÉ"®:šØjÇjXG4û{(ˆR¤«ƒÐô­ˆ¢�ÉØÒe�ðŠ'Rû)¤ŽJùB°*iÞÚa$NU‡B+fóLÝ6ÀWÓ5Léo#<ŠÚ5"ÖæNœ“ûbä“¹ÁÏ\Žµ~ÂòÒd�\±ˆ…ÊàpÆ³ÛIœ9¦›;€6ˆÎ*ï±6’èI¨ÝG DÛ�“V|2‡ûA_8¬Æ¶•O1‘[¾O.â2À�ž¢VŠM½NòÖ,FN95©gæéó0BÖŒ[Lc§J'@ö²¯ªµð‡SÎ,¢rGAŠt�Ó¥>ÍUìÄT‡æ4’ÐRfs¦ÓÒ£9ÍhI#¥UxäRhi‘QN¹=éL2~6Æ‡d;•Š·¨­;MA%ÂKò¿¯cYlŒ½©½6ž”lN’•ãõ«
+w
+À³Ô6þîc•ìÞ•­œ�_Z´Ó&Íw�¤dW=«èàæxæ‘ë]°#?¥# pA¹¶Øw¹À+¼O¸Ž+°ðþ½ö”[iØy£€OzÏÖ4� 2B0Ãõ¬y ˜0%$CYV£Ñ³Üpg¨“¹C)íÒ£óÁ5‘ ë+{ŽFÄ«ÔÔV�Äd$c žEpQr§>I6šº'Zp”µZ·Ómš5bä±«kl‘ýÀ•è834ÌÁ @Fç­A+ðc^¿{µm<
+ã
+j©=œ{D)Rã¡iêgÆ3ÅVÔ3ö	H$mjxŽdhØá‡Z}Å‹Ïnñ€NáŒŠæJÌÚæ™­Ýió	cËÆ1*äUKíJkûÆ’UD,Ù;VŒ~»�ˆÛòŽ™ªsè·bS•ú×jšP9ÔeÌoøsV�O1�:žk7T¸kÍhÝªÞùÇ@2
+*ê8ñ°ñÞ­¦—4ÐŸÝàV~ÝÉZÆü‰j\½»±{¨ Ó"xàþñÜä³÷Çµ,Rˆã‘<—J¯ag=¬„¤K!
+FµÞò7Ø@,kžnOÞ@’ØÐÑåHuXä‘°0B“Ù«©½°�­åÅÉ¸I#-#nÜp··¸ÜH]¾�jòjºÌ–&Ñ&HbqµÈ.=Ítáë8+4g:ww¹J)ò#Œœ±gùU¥È`R]ÎU‘ÔléÍ^!¢¸‚Øæ¹ªÝ»Ø»­“2•~Nz�¦òäAŽ	æžÌd~O4Ë­:åÈ“ÌTLRI·t¤s‰9ù‡`zR-ê5Ù„)QÓÚ¥]>P™J¢£†Òv���Ï¥k+ÛR—){pXðÝúTÈbùÁÃ/=id†ñ27.O·J¬úl¤3¼»�qšç´¯°+w&K¦¹�Øne=ª®§(†óÊF$uAV,ô™e’@=»ÓãÓ³r’ÈÊæ>Fk®mZDuÐ¨-ÃHÍç42Ä»ÁJçîïnnØÉ4²;üMšëg†v…ãÞŠ%9n9ª-á˜ÙwI#ô­\â•‘7d¾™í´ÈI¤‘ï]ÅµÜW6Ë0p3÷�=
+r0Yx|©SÛÜ¬3¢àmsŒgõ®X7ÒhëUÑ¾ë«}
+)½c}¢4<7åN‰Ll,k©7ØÈ×¥ªö7-u	vqV*€:Ðh£ÒƒAµ%‡ëKGò¦ERÔÆy£½-'µ4Œ(£ñ ¢—õ¤4˜ÏáE-ô ëÍ%.(Å'ãIŠZ?
+LQE±«O÷E?Ø¿Õ'Â)üv ¢–ŠN
+1éKF(Z9¢Š&)x4½èÅ'z)hô¢Ãô£éE/4OçE/ŒPQŠ\ö ~´´P1(ïKŠ1@€
+01Í¥À§¨•àsž+1¸5¯|�­=¹�ßv„& ¥ü)pÒå«BÓ”fŒ“ÇôÈíLCÂçò¬+‘§kæiØÎC5tªRéó9‘‰Üj%•cE5;ÏÉvŸð#Š~ëyCÂç×‚k´+~£ùÓ?°Ôt$~5—³fœèÛ’Ú	Ð¤‘ÆÊzô¬{ïéwÀ”F…�t5	Ò�>ë?àÔ}‚ä}Ùfð:\Œ®dA€-P|×7¡ƒàv
+„¼8÷Õ•²¿'›ïR;õçÏ˜Ÿ÷©òÈ\Èu¿ƒ­a Í4²ØqWáÓ;Û1úš¤¶Ú—üüËùÒ›}HÿËÌ¿�.I24#Ñ¬¢å,Æ}MU½ðõ­Ón¢oözU±ê$óu7ýõJtëæëu/ýõKÙÈ9‘�'…nV\BêÉØš–Æ¬éËôZ´t›Æëu'ýõMþÂ¹n·Oÿ}=“tqºÄWÚ~©<†)œ§Ò»_ÛÉ‡ i”	\’Â˜<6doÞÎ}ÍlEÁB¹*ƒ5Ñò£)»�2�iXeT%1Þµ3h§/N)<q@Ð”�ér)*FW¼»ŽÎ6VÇ õ®/^¸žö¸¸LA»äÐx‰7˜Oð‘ÇÖ³uÐÂ6Çr`	¨š÷K§«8©fÊ‚éL#ŒU¶],0Æûyo¡ª„ñ‘R˜¤¬Ø~¼zRgŒúRqžÕh‘ÜS%-.~\Ñ�éÓ­0-Ø‡‹JžfÅ(ÙøŠ~œ�•qtÃtRf2=
+?I"m6òÍºãr}E.‘ ’ÎîÍ¿‰7¨÷,béP”Ò®nò
+gc¯õ¬ûPZäEŒŠÓÐeo,d8Y£ãê*•”l÷;?ˆR4·€Ä.ŒÒéªI$Üã÷¡QÊ2ˆþ¤RAÍ2ÅäŸÓÞ“w0”‹þdv“E8x˜å™O)ô©n^‹Ñ:Î¡×ètëq¹y™×©'ŠjYZ]»[Â¦�2«Ô—å©´¶«]Cu{¾Ù6@sž{Õ„­N–Ò
+ê@ÍíRF�:â§”Ë™É˜YKæ� ž´±ÛK‚y*x®æÇK‰-‘Ú Åþl‘šÏÔílÁy–AæîQG\ý…ZçK¢)]:,ŽHÉ­dëÒ³´õÙkö«èy­,Z,© ¨V¤Ú¥¢‘ ÇjpÅ4{RóHc²(È<RQÞ€35Û£
+Ÿ”„–�tÍsš<D$“Ì€J\ã=qRøŽw½½+¨q‘SÀ‚8”w¢*ìÂÈÇÖ³äWžt�3ºFÀÅ[™êÏ†íD×’^0ÊÅò§Ö¯q#zÞÝ--£¶A…A�Æ²5{™î¼ô“n1[„Ôr&åÅgR
+jÌ¸·tqÓ#Âx…~µ[íÖÛö¬ªOqšßÖm”ç Œf¼¿T� ÖŒq’2ã×›*UŸies·±¯ÞÓ–þÇCX—ÈÈªÊNvŒÖb››¨à‰Ø4ŒŠ©aùu¸ãRèëôˆ…Ö¡sª°à&ö©§ßºÍp ß„&¯yQØYÇ,Kó{žõÈÏw%Ü²Éà‚@®4�I\f¿ÙbE O¡¥[p§s6ãêk�“[»‚S‰†^µ$Zì’r?ìöµÐ½¤ofÍÝJ5l¿ZÌml÷¥’I‚Àš•&=Óó¡BKrùâKkg½Ž8Í\k‹�Äý*¼m">¾µi5DÆ?Î“R¢«DË&ð¤öéLndó6àûÖˆ¿¶n
+Jf´~Õò†Tã#ƒíV-a7„¯næ­<VÌ§TÛ…l£ô­#9DŒ�—VXŒ‰Qwõ¬9Ðôæ¦h�ÈË±r;5
+cå÷¡Ôrd8$ŽŽß˜TúÔøÈ#Ôb«Ø¶èTûUœƒ^¤5GV“8™ôK˜'—jä3–Èïš‹ì#þXšî(ÜäŠCk)4ú·S†6³¯X›ò¦�z¡Q]Ù³ˆŒSŸúŠ^ðìŽaÆÅ8é]³éP·ð¡ü*ÐíÛþY©úQyv‘ÅI ñU$‹¡®é¼?þøTá¨‰àIù‚V8mœœg5vÆíá"7ËFJè›ÂÑ–åÈJ¹o¢Ú[�û Äw5v-+™åpsÁéV‘Ãµ£u`“Çò€¬½¬cæA.ÆàŽµ¤f™6'xƒ¡ÏCX:¦�³!xÆ&N‡?µo,›€ôHŠËš{}ÎÞâKIÄˆJºœ
+wÚ­¢Š|ã†ZçumÌLöà	GÞQüCüjoÿ„–ç[rô¬§J5}Bî(ôµ<c4™ÁïMû’“œÐzQÖºìf˜ðùÉ»˜ðI¦
+áE�\§qlÂq<@3c�I88òÆ~µq‡Ñœâ£ÙEê>v†,³‚EÍT»¼†WA€;V€Ž)Þ^TŒE7J;¨ÌK	®µ�¶-¥©?cC$Å¤�ŽÕ��í|½†ÞM¿ßÎ*�þœÂöå­ï^	‘"n 0÷®rëN¸…ÊŒ2¯B£ŠËÙEš¹³±¶ñ|d0A$¥Hö¨$ñµ³Ê%8ö®FÚyìÄ¡bío¥W*ÃŽqOØ¢=£;I|që´[2þ=j!ã?%J¥¾à{7jä0Àdõ£çëÉ£Ø«Ü=£ØìÆs­¹+…Îy5\øÒf?êó®kÌ�Æcþ‹Ÿ²ˆ¹ÙÕ¯ŒævÞ<ƒR7ŽîÁâqŽã½r84äfVÏZ(­�Í�£øÖæÚD…IË¨ãü'-™Ønÿhñ\°Žk™UgcÐ[úo�õ;ÒE[xÏñHÃ§Ò¦P‚Ü¥&Z“Æò]^‡»Öž‘q®k’,qÚ¬VÙù¦qÀÞµ©¤ø3FÓH–vK‰÷Ž·šöÎÞ-¢x‘¢)À¬ZMèZmn`jEô‡ŽÞ+¯9åàñŠ}µœä«‰rÉ‹w<·z÷Ú¤ Ç÷Sž•Ö[G²î3ZÓ‚{¢g6¶3åÓ¥�“ö‚¿AR„•P!™Ž_ZÐ*1PË«eNŸ<ŠÈ
+™[ó¤M9VE•�‰^™«H3RÅ.Hö3c@'aMšqïô§m��$cŸV5v©éCm‚ýM\íY-�ŠZL
+1A€(éLúQŽ:RâŠH¤Å.=è¦ÀLQÅ-% ŠJZ3é@	HM;>Ô”ÀN½i:RÑõ ¯ZJZ:ŠJ
+PQKš(cÿTœÿ§b›ú´ÿtSúÐbŒRÒâ€G´¢–˜	ŠJR=è¤ î
+-}((üiØ£€†ŒR÷¢€“K�z1@=óGãšèÀõ Š;ÑŠ(Å.¢€Rô£˜\ÛÉ‘ž+ò=kzQ˜˜{Á<
+Kq0:ÑM§V¤õšiëÒ˜Å(&€sGzíÒž9¦c4ñÅP¸ÐzÒt sŠJ3‘Å¨~4cÞŽôPŽœQõ¤¥Æ
+0œãµ/Ò“ ó@„ç=iZ_jiô bž)Œ3KE0#û§š^iÌ¹ƒ¥¤ý)M!4€ËÖ­d¸‰]Oúµ<w®wW¼VÐÉ”‚²ŸZíHéšÃñM¬GC’@Š[ ÔOcH|G�Gqä}¡6äIÁ¡<SŠ�‘ÜÓ–#œR�¬)=Y§˜©–ßæäõ©
+Þ¨ÍÉ1ŒR§kìà14y~zÓ1Z'xå%	ð}èFe”•8>Þ•kÉa8ëO0)mÛEæUY$Ÿ+8«ºd{îÚ}iº“œsV¡A ¤Ñ.zdq.úŠ]$¢Ï"¸ž2ûÕdcÔ�
+àªœý*,Î{»–-c”“³E´òëVm-ÒÚëíîÄG;C}æ?áU…ÕØïzŠi736dVoJ¯zÖH·+ê*~û|®ûYØñOTy¡™ºƒÓÕ¶”ð"4áe9ÿ–gñ¨Q�“³¹½«`�ªy„]¸­fÎºl¡Š+†a³*¨Òî[ø1W-4k�2;œÔªm;�JnJÇKl¥aEôQVÒ¡‰pÇj±úÖ¥"UéOZh_LÔŠ
+K,Q�NÈèÛŠ1íÏ­!…A{8·±–\à��Sàæ±õérc¶¯,)Iè;m#Í¨>t#¨ô5¨ÇQ[[$NJ.7ri÷@ªJÈ–õ±FîB3Ž¤à}k©ÒíVËMŠ/â#sýk�Ó`ûf¯”Œïjë	“H¤(ö¤n9ý)â£w÷¤~°¡í²;ó�vÜlÛHÀôkçSîû f¸½IP’¯!NTŠá¨ùj©E^6#º�o*Ü¯JµáÍ5[Uk–¤òýk2Y7¾sœ×U¡@môe-÷åù‰¥Š�£ A4&­3l)Ÿ™«Ÿ]= —ÌEÂ“óZÑ¾�½Ö3Àý*Q:È�\œV4iÚ^Ì¡£Ùê6 F6J
+\�Ý�Å„þ\±•=Aìk¸Ù‡[�jñŽÓU€[ÞGÆ8lr(�YÑvz¢¥-N;L‘%ŒÉ·	WQðÍÞ�7Ú¬ÇÚ-»�Ô
+µo*ÍºpäzW§‡�:»³RˆãmèÆ£kRz?éSŽ”¢º}”CVE&²s÷Xf£6WÐý
+i€*E#½K£Õi"Öèõ©CøZ¶Sm<mÏ¥C¡±J´Œ…·œŽâ¦[IÈ“…kÆAíS®Ü}ÑY<<KU_Ql2!ý9«y5OÍÇN*3rÂ·Œl¬fÞ·4CZPãÖ²þÔÿÞâ™ö—÷ª°®kù‹ÜÒ™�ZÅ7
+Óq¦™ŸÖ—(œ�£rƒÒšo#Íb™XÒnäÕr˜Ûûjv4áv„u¬/1�êië+Ö—(ù�¯1v¨dµP[�z•gu¨”.R™! U;ËeºLŒ*i$R½yªïp¹Ü\^†ªI™ ´R#u¦VÈÏcN»+1Þ>÷µV�°Ø'ð­bîµ3’³ ç*yíRiztkqêp.TR³&8zaäU�)ö¢ý9¦“¸¯¡¾H&—ŒqLrCsNZÔ�Â�M§væ˜	Ú›´ÖŸŠP´!1È /½!È\S€ö â†Æ¹Ñ-ç�¥ în§5ðå»w$zÞÀ£ž¸¤Ñ\Ç6Þ´$å
+D|-iœ®§äÏ^iJƒJÃæ9SáKn›5¼#_õCÔ²ä�FN1Ž(åóo#Œ“Ãp¬…@°§ÇáMü‹uÅuÉ
+†$üßZ•[t£—Ì9¼ŽHxIæÜSÇ„á˜º°æœy£—Ì.sxr8Žc‹aõ9Ð¤½#ýKß'šBÕ<ˆ9Œ/øG—¹?÷Õ(ðì`ç�Æ¶÷ÐM>D×1ÿ°¢kX(‚”ý)AâªÉ
+àzt¦0ÊâœyÃšˆJí4TŒ8¦
+Ö£¹I?vûNy5&8ïHFÔ½†·7tÜ
+>>sVøª-¶ÍZ²$5‡24±-éMVÍ:ªàRŽ)­ô)1LbÒ
+€))h ¢ƒïGJ)
+-! ’–ŽÝi€œPx£éGÖ€½”ÒP`ÑKE 'ÐS¸¤Œ~é1ýÑKŠ`RÑøPQ�N)x¥Ç¥7‘ïGÔRÑ@‚Ž
+¸£ñ aJh¥æ€Í-/4˜ �Î—Ú�¡ B~RÑŠ1@Q@ QŠ(v£"€(ï@Ýõ°†aÓ×B=:{VÃÈ=ÍrY>´¢‚(­H4õ¨Á÷§­0:ÓÁÍ3ñ§
+u/áIJ(tÚqæ›“œPÔÒäSW—Š\QŠ3I“@KÇ­%À_Æ�õ¥¤éÖ�i´¦’€½äÑž1FE'i;S‰ô¤ÏÓŠNÔ0¢€#–U…;€ÍsZÅÔúž™rðü¶±dˆÖ¶¾Ó·‚AÖ²íFÿ_@ý)-·8€™�Â­ÛZ‡Á=êØÒ¥@ì*í®›*cåÍD	EîE•(8?�L4›~»MjEjÊ£+O0·÷k¥8ØÅ¦eeÛÿtÓÆ›núºÑò[û´Éìh÷I³(
+>»8Y@?€~UwËcü&”D})è&™TZEýÁùT‹kèŠ?
+ŸcÐÓ‚šZ•�¬(:(üªQé´~Tô{TÈê;RºRÏÝ§‰<)üªÏš€v§$‰ŠW‰YPŽÜTŠ§½Kæ/lR†µ"¹DU«QEB¸5f!Ò¥³X¢Ê•:Žj%è*dæ³fˆ™EH˜µ 4Š
+1J(¤18ïÒ¹{¹MÍô²vÎÑøWA¨N-ìe|óŒ­s€=y4­v'¢¹¥i‹g•È•3ç$šÐ¹‘Ý"E ãæ÷¬›‚OÈ¿yÎÑZH„mxj[MtÝe8_¥kšm¬ÖÎð(üéÌF*
+œûÕyÞ§�ûUY¤ÆS¾lÛJ¾¨k�°›íw’ßë‘�Zì.0ÊW±®#JIÄ‘[¨8iJ¿Ò¹ªÁNÆ‘v,®#•c’RÌ0Hí]«�ª è‹RLÃpˆ�í‘Ó^ù¸Uë¸€Eqb/Ì¢\v¹ÎÝ$‘ÈÓõV<æ¡,‰•oÖº9ô¨§O)$ 0Ç"¸»�ö’ÁŸ¸ØÏ­z*)E$ewsNœ7ZÓ�Ã(ßÁõ�mz�€ÜÒ†`@ Ôû4÷+œÛŠêXqƒ½}
+6[K+–/Ø%nO`
+ÎŽr¼îÅX[…aó}ëaÊï
+ù“Vd3ÛMnØuÈ=t¨±šÐYÆ
+†%}"«É~d#µvÒ¯%¤Ì'Inˆ÷©£û§b¤R	ûÕÓÍ±�+[’!=*UÈ÷¨�©£olÐ4M>•8RFi‘µXV8éRÊ e>•©'¥\vöªÎÄ8éLaR–ÍFÇÚ©7¤4nqLLZ^=i™ö¥ÈBÇsNGz�?ZLýjl2`Rœz¯š	Å–·FG5« S:Ž´˜ÈçšN)”¤A ‰;Õi^#÷¬ÍaÀÍP–ÈíXÊÕ)+jOçƒÖ¯i|jî+)ç&µ4fß~¿îš"ÉfÛ¶iËÈ¦ž®~´ñœV„Š´ñQƒž”ñ‘Þ˜‡RÒ­8}h@õæƒE!9=—`Ç<Òf”PvŒúRô ŒšN(fšÏZP0iÄc‘@Ã8Zh÷¥=($Ó˜æƒõ¤É£4†�šLœÒàR4¹¤4Pæ“§S@8¤È=èI¦š&}¨†™‘N9ÀrM)9¤b“Hx¤</52ØksnÐ¢F:qS
+Ž¶û´õë\†äËO¦(§ö­,\Ò(¥ª”QF}hçÖ’—#µ'á@`Qõ ‘IJqIBqE! “Ô´Pfƒ×Š2h ýi3A4Sh¤çÖŠ’/õIþè§RD”ŸîŠv}¨(Ç­-&(Ç­/”gÚŽ´QøRãÒŽhƒëùÒâ�íE”fŠ(£ñ£b€¥´cÞ€
+(£"€
+1Fh Š(ü¨£ñKŽ:Òb€óÍa]]Kõ­Þ‡9æ±uVñÇ¯4u%ìWíIŠ1ëM÷­Hu§©¨Ç5 ˜xéLx œ)3J(qëIŽsKI@Ôî´Ó@È ïÁ¢�ëE-¤ÑœSw¥#Ö“½.3@
+<):
+qŸ…6“½8ÓqLíM#Ö”Ò@!¤>Ô§éHxé@Ü[¥ÌF)WržqX—<°H­’›²sé]ÍAs�	ÉãIì5¹ŽmþcÀü*Ì6ÞÔ¸æ¬ÂµÏ©³Z
+–ÿ-;ì¸©Ó¥:º.dÑ[ìÀö¥û8ÃV3øQ•¢ì,ˆ<…ê8D¾‚¦=©23Å"1tRù1ž¨)ü
+MØïKQY	äEýÁGÙa?À)ÀäRƒL,†ýŽî
+Qe¥<dšpÜ;RÔ9QØaô£ì0ú�1œ�BÈ`²ˆt&¥KdÍóÚ¤Væ•Æ�á´õŒQ‘NV©Ô±Ê5 ¨Á§ƒHÝÒ—§4™¥'€1¼E7É
+¶O'q•èjmZaq«JGÝ�å
+Ñ¨¤,òêzSt¨>Õ¬ÄÊÅó·µG1àûV—…á.nÛøÛ`>Â©��Ë*'â¦&¡�ÔÜey
+UrqV%`Z«#¨j%©H§pr�£YãÅ×‘û±`O­lÌAÏ½-ŒA$’\uþUWeIYÜž¡™È,O Ó¤“2õ,Cµ•(½lb¤ÃîžÜ×­F%¹i€ç­v7ryV’9ô®BåLÊ@úÐÒB8w¨m¼ÕˆÇòÑk&A�À*WŒŸxRHvd«?¯Z™'ã­VUÞ È¦<r/(piXw4ÒbAâ†“xÆp=«ÞÉýàÈ•<ZŒpÐÒµ·Ü¿–Ü<zÔà+dU(æ£øÔªøäJÈ© Ûjz‰ö5QnOcùÔ‰pqÉª\È,‹±Ü(ûÝªÊ\FxÜ?Ëó”õ•!px§Ï0å‰ªí»;H5Goá¬Ð[1a&‘GÕJ£ìO-Ë	ðTm�6z_Ê?‹?QS-óðNÓøSö¢ä¹PÛË×a¤6²á5|j?4jEH·éžaö§í�½™™öY»GÙ$í5­ý¡oŽbaøS…å©ìGáMVAÈdI	èiÂÎAØÖÀºµ?Ä?*wŸjG´ý¥Ã�Æû‡Ö—ì
+œœÖÈxOGOÎœ#üIùÒçSìi³Ÿkg÷}Šþt &:Š= r˜£M>½i’hä÷­ì)tœ®5–“Ee$ƒÍ3IFƒXh˜`…®šDO¯Ò¨ËlŸjK…Àu>õŠšç±n>é'�Öœ8¦Ó‡©®“ÀsO½4ëN"˜‡
+QH>‚—Ò€‘MïJy£Š`šw"›Ò”PœSp)Øâšh#¤ç4´ÏJ@ãÖ“§zÐF1‰Ö“¥-'z@éih€¤¤-Î)hKH:Qš3�ëHbMÎM47"ŒšvsÅF­ó(ÏçMSœæ�ÈëCE4cëNô¦¦[
+nnÇÄH?Ù§-"œªý)Ê­rõ7%SOÅ§â¶‰,SIGj)ˆ){SO´€J?(â€
+(¢€Ræ�ûÐAæŽ´PE™ QúQÅ0ŒsE-% ñQøQL	£Ï”ŸîŠ~)‘å'û¢Ÿ@(ÅQpQõ¢�Â€
+(¢€E.3F'zZ( Š( Š( Š3F(æ—žô˜½h1@Å/ÖŠ(¢Š?*ÅÔÔ‹òOB8­¬ûVN¬ÚW¾VŽ¢eÓ1šv'zÕ‡z�zf9Í=x¦…;p¤ â€$:Ð*NxéRnÜP"JLb�šC×“@)éIFx •zÒ�H§ž”þ”�OJ_~´u ¿ZZhëKšb
+(Í€i0M8Ž) zÐŠN´¬qIÓš`Zi§i´€ŽâE‚™¾êšæšêçVÔU•¶AÌ¦Eoj`ÿfÎ'm`éCl·kž|ŒŒö¤ÖƒF± œÕˆ¸Ç5JÉÍÅœSuÜ:Õø£5ÏÍÞÄÉ�:Òæœª@éA�½ndÆ’)	§£Ê4nî0
+âž">”¢#é@àÒìldTË4ï)»f‹ŒƒËj]’Õeb=êA7Š;d€i7IÐƒZY¥ò³ÚŸ0XÍÜsŽhßŠÐ0ü4†ÕOU¢áb¢¿*>zÔ¿d©E¶Þ‚‹…††©¹¤pˆÒðÔài¡4à„ÔŒviö£>~è&—A'µcjWä±
+ŒžÔ›è8c$’9?y‰©sÅD˜R±÷«JÄ2+‡ÄlÃ¨Óèðm"ÝqË.ãõ5Ë¼fib„dpµÜìòÀ�G
+©e$@Aô¨\7¥[j……&2„ªÞ•JDsž+VAU™yéXÉØÑM’x5b!åÁŽ˜«†3ŽRš@ô«‚&oBI|Õ…oÂ«‡U^•"J¸×A‰KÄW;8£SÌ�Í`+‘É¾-Õš
+r“˜Ò<¸úÓmî`½RÑ“ÕsÈ¬iÜÖÉ¢´Ãyñ�­$wÊŸÎ´ã€0*W Ö}å‹Ú¹e\©ôíV•ÕÑ7±8*~d9©W=ë69JäƒƒV “Í�xàŽ¢§aÜ–[D‘OcX×ºs),™µoÇ"¸éÈíRY×©K¸š8¦ºº¶8ÉïV!×®¾jÝ½Ñ’a� ×={£ËnK %iû¬�Q£ˆTœ:â¯[êðL~Fô5ÈüÀá©UÊTàúÒqì;÷;”¹VïŠzÎ§½röZÜÐ² ‘kPÝÙj)û©M´¸ã=3X9J/TZI›"q‘ƒR-Æ;×%5Þ¡e&Ù>aü,9œšìË÷¢?•ktCÑØëÖàgµIç¡ê¿­ri¯äóþU:ëˆÇ£Â‹ :S4G€i t5‚šÄg×ò©F«w?•.h�\Ø3óH.9çŠËÊOZQv¤œž(÷YW’5EÚçÁ�òØ,3X’–_0¹ëJÈ¯(rã�ëK–"æ}M±w?xKöØ¼¤ýk8£I†$ƒNH£Rä_ô¡E˜ÛK¸œeHüéÂàvcùÖJÈˆ Ô¿h�.T;š¢ðþ³õ¦¶¢ªøiÖ:ùk»“ÉÎ)¯.Û˜’~´ùC˜Û7êgšr{f¦µ}Ó±9¬å©Ü:ŽäÖŽ“0–í†s�J4Ò•ì)OK4 ûR
+Zë1=©GÑô§v C†iig¾){â�‡ZP0(—™¥àÒRŒt¦!OÓÒœO¥0ó@� äÒâ�pi§$Ò\óšF&�ˆ=èïH)8ã ’—8¤Æh�žý)¥#'šL�Æ)u7ÝâŽ‡ŠCœ’Mzb“§½šLó@zÔc½HÔÁÞ�^Pr]1ýáKŽ”¨¥¦Aœ|Â¢{;›¤tx§­7½9z×7SrUÍ?4Õ¥­Q^h¤úÒÓ(¢ƒÇj`}i?
+2iX4QE4œQE0
+;QA É£šLûÒÒ¢“¼t¦IÖŠ:PQGãE0&‹ýZº)ôÈ¿Õ§û¢ŸHô£½zÒÒ°	š(¢˜;ÑG4¢Š( š(¢€
+JZ1@£4}1Gá@øQšLÑJÀ¥éIG>”îÎy¥ãÖ“4f€4R
+^”™¬Í\~ö#íZ~µ�¬t…±í@™šÜTyæžÄóÅGžkDfH)â¢žÕ"ôªùâš0Ç<ñKž(Ï4wâ¤\cšŽœ§š�0õ¤$Ú®¬qã”Å/‘ëª°Š#Ž”¸5wÈ‡?r—É‹û´¬iA­o	þO³C�¸(°÷PXzŠ¸-¡Ïú±OKxsÄkE„gƒGjsŒHÃ
+7é@4¹ Ph'ŠNÔdÐM5¹¤àÒœÒ~´îw¦æ�ŠOÂ�‘VEeq•aÍs÷ZmÔ/,�mÛ´ž½«¡=}*©#ŽÚC!
+¬É¡ì/âm+Ë#˜Ú¶’9®wÃˆ¯3÷%½u`t®n¦ÑwCBt  ô©qAZÑ1Ç¥;Ë”ìRþî°
+]ƒ¸§â�Já`TíNÙJ:S…
+‚žR
+p4†¥Ø1Fx£>æ€`£`4¹üizžiÝ‚�‚ŸÅ&i€Ý‹JzRÒæ€°R„¹£4ÉPyë´×'y7›@­v+ÎG¨5Â�RiPÿ„T½À:t¦±4êkÕ§C>¥�/´ëð¡äF¥ÍvX$ž_Zä¼9sog6¡{pÀyH)êk6ïWÕu»Ï*ÌJÄ…NŠÆS³ÐÓc¼a·’85â¹	êú“jW6WqJÐÃò»?ü³oJèäÔ­•Â<¡sÐ“Å.k¢‘$˜¨qè)îÚâB�Ü$Œ:ªšxéÍNåKòBì{
+Å˜”~5¯~ûmHî8¬™@ßŒô­¢ŒäÈÛ8Å:<ÈéLo¼9¥<®ÑüG£!âð½®°²^^£o‘°…OEÌø³K‹Ãú­¸±fE–<òy½'bÇD¼\q\–³lº�ÉYðÛšÆ«P�Ùp÷�‘‹¥ø�>Xï3übºUX.íÉFI½9®FÿÃ×6ãÌ„y‰íTmo®ôéG–ì˜ê§¡§J¬Z÷X§·7¯ôÇ¶bÑ‚Rª¤Æ3Å_³ñ%½âˆ¯Ër>÷j[½0Hžm³+)çåæ¶qMhf�ŠÆçl{×ïU«kµ‘yûÕ˜á�ípA dƒôÅbâÑ¢g@’`{S¤·ŠqÐ+&â ,¹ÈïZÌ­Ê¶j:”f_øz9~d\jÄ¸Ðå‹�r+·IÉnE
+RŒ�úUs4+\óæ³�ÝÏµ3k¯U ý+¶ºÒ#”| «z�Ysé“Fq·põ­—QrØÃK‰XàtÏ8«�_²Œº$‚žöŠs¹6ŸzjéˆÝ¯¾8©”bÅv‹K©Âï-@>Â¦[û@òÔwÍSþÎ½Œe12Ó‰IvÎžê;Ö�9=ÇÌ×CU.¬™r‚=©ÑÜZÊ­ˆÏËÏÝëXM'&)ºvn
+:)æ·èíÇu¡á¼ÇÎt�MÊE¹9ÿf¥2eþM<·¾+fté;¨«ðë—¹”0÷©T$¶+™ÚêäX¬d~´ôÑ'uù€CùÔ#Ä `Í
+¯j
+Ñ‚š¯bï¨s¤^‹Ã£ ¼ŽÞÀTí¡Û�ónëX¯«ju¸qô¨æîCóÎç>õ§³¨�¹4«å§Ú?ÞV[}6.·djÊe$üÄŸ­ ‰{ÓT‰ç-LÖ+þ®yý*œ“1oÝç´ÿ-G8§ª;Uò¡s\�¬2ÏŠØðìdjK“òô¬³ b´ü9 }BL‹MFÌWgJ)A¦õö§qõ­I)ÔÑO�
+)iæ�LgšQG|Ð{ZR0sH(O4„qNâ‘ºP1 ôÍ.p)¹ü))	éFsIœö  ô£ŸJOJ@' Òçš
+ï@9¦âžzSqÅ!8¦œÒž´Ó@ÂšO=)I¨òA 5"ŠCÀëBÒç¨§@7]Gîi§’)ö™ûbw¨ŸÂTw6Øó�JzçÒ˜zšzs\ÈØ™ii¢–¶DIAç­¹œÒQš`/ãE&h4QœRfŠ^´QšC@u¢€Fi(àPGRPÒfŒÒ~4¼zQGãEh¿Õ'û¢Ÿšd_êÓýÑN¢à¢’ŠZLóG¸QƒEÐFyëEQ×½~4¼þqÚ“èis@ì)3øQ@ÎzQE&hh¤¥íJÀQAâ˜}éx¤Ïµ¥PÖû<gÑªÿÖ©jÜÙqÐ5LÇnj&84÷Ï<S§5ªØÌzœ­H
+B:T€æ˜Í4ÚQ@‡Žhš=héBJ?¸¿J“õ_ê×éRâ¨@)ÔÜâ”�½HÜÐãð¢“§ZQ@áƒŒR~«ÔSP¸¸qïQ÷©¯†Ùøî*‘R\ñEƒ@¦š^=i(Öâ“ñ§ö¤(°Æâ“SÈ¦àzÓ‡
+�@3\¼ÓË­_ù;ŠD3´
+éäæ7ªk˜Ó•ªÇ¸àäšrKÈí<—Þ7E.Ò^µß’Ü3Íy,ÊRþéHù'väÿg"½'@¿þÒÑ-®	ýâ®ÉG£+žK[šÂ65±Å%(éF)¡�äRâ—müi€œúþ” ­'ÚœP
+8P�¶�;4˜¥P(ïF9â—­/P?:3øPi(¢€úÐ>´¢Ž{ÐŸJ_­%!`¿y€Ï©Å=	+‹¾O/Vº^Ûó]-ö¢-~HŠ´ŸÊ¹iein¥™ùf<š›]‰�ãéM“§Q»=E2c…'Ú´oBQ•q+ •¢�ˆU×µwzM”zŒ€àÜ:‡•û–=«˜Ó­"xÒiq‡…M®xØGp-¤ÓäŒ¡Ï^Vjl¬;YÖ’Áã�!$¼”o#¸îMs:µß™©ý’ÑÞc#„MÇ¯½gjº‹jZ�»q…_ºž”í6øXj#Ph„ŒŠvØžôák²&îì_ò.t/ÙX	Ä²ï]û=�z[¦$lŠòm+T6zÏöœÑ‹—·ÎˆÖ�ñ–£ã]’�‡îãÒ“‹F‰&ŽÛS$2/µf9ÁäÕÉ¥kÅ†ä)U’0zq“X7úÍ­¼ÏnI!ù«DìŒä[žjxH2®îÇ5ÈO«;O˜g?/½nAâm>ÚÕVkiè/Î@hælHéå•E›H\GšÁÔ.mìôñ#�Ò9Âk�Õuùo�V c�z.zV$“I'Êò±9ã&”×´Vb‹ågW¦ëé4�±å�sƒVo4kMN*»‡\W96£lËnmíVb]®ÀýÿsSé¾!{‚'æÞCÈTûWŸS
+(ëLëæ‹Ž¥+íòÉ²ªdNØªÖÚ�Õ“b7eõVé^‡‘M¾ådq•ïš§y i÷Ã-FþòñDq“¦íQ:Iìs‰¬ÚÝ®Û¨ö7÷“¥9¡ã}¼‹"{u©nü*e­g=Vsèº­™Ï”àèz×l1t¥ÔÉÒ’,îò"¤I#¹ý*�ÚnãžÞäs@½�…”{Ö¼Ð}IÔÚ†ýK�>µu%>S‘í\üW1È8aSÇ#ÆwDüÆ—/a¦t	)S‹#ðWñ¬xµ§l«�qWb¸I`jmÜ«“MaËÐ¡.”é“'ØÕñ'¦jQ6zÓMô#‹‹n|³Ÿj–;Ø$!.äV»,r*	l"‘pUMe:j]
+ÿØzeê‚ŽžàÕi¼(­ç;ÔÿÙ¾IÝ¼CV"¸¾€ÿ¬Þ+’J¼>ih=ÎrãÃú¤-qê9ª-Ì
+ó£§á]üz´€"uëR‹ë9F%�?¤±u£¤¢”YÁE"p@aî9«)¨ÄÃæR¦»?²è³Œ¼Qƒì*7Ñ4gåcü«E�ï=�ËÈ±�Âšo#Ú[<
+é[Ã:Kç†CI†ôø‰ÚÄ�zÚ0¶ÁìiïœÒ¤+ò!?…uË£ÚB©ü)ãO€t>¢³yŠèŠög¶î@6!Ï~*aixÊ1÷Íu†Ð¨ú
+­6”gÈkÂ ¬Ö9É�R±ÌÉk"ÞÌ©íZ~ò¿´.b©«á˜­Ë©§i}¾›«K]£ãÒ»(WŒåk‘:m+�8iRž@¯@ç´ñQ¡ùsO€ŸJZAŠQ@Í¯ZzQÒ˜ÉÕô§sIÒ€¾*u³£.j{ÕåÎÑÍ1Í‘ÿžŸ¥0Ù>x‘M]èi=¨‹ÙLS
+éšE±™G,¦¯ýiç=¨°M¤Þ«ùÒýŽluZ¹KJÀQûŸÞZ_²Iýå«t„ÑaÜÎ‘|·*[$zTc4ùH2³g'5n)1¡^´Ây§ôÏÂ�ÄcQç9§°÷æ˜«“É sBœbšÆœ¹,)üäÔ–?5òÔTF¦Ó¹¾Â¢	QÜÙÏ&¤B*!Š™9èk�nlö$íE§4V¤R}(r=(àÒQš`QEw¢�õ ¢“4@ž)9¤ëÔÑ@MQŠ\Ò~4‚Žô´™ôbŠ^}¨¦Ñ@Åþ©?Ýúdxò“ýÑNÅöÍ-bŒÐ Ïµ(Í�…/n´”{æ€ŠLæŠZ
+%S@
+x¤É£�­(úP QE¢’–€
+Zm-ÞŠ( bÒdÑš3@‚«j@5ƒçÖ¬æ ½²”cµ‚ÞÆ˜ßtRƒÀúPyªØÌARïQ‚=Hô¦Ž)F(¥ïÅ{Šqæš3Þ”ô 
+OîWéR
+ŠØþáH©¸Ç"¨E=Zÿû3I¸½À>RîkLÐî5[$¿Ôo&ßp7¢¡ÀLôsÇ!�ƒï6tgéšÕÓB�*ÓgO%•(î3ÚîûÃúå¾—}/ÚmoN-æ=TúêqƒŠåü|ž^•g¨/ZÜ£)ük¦Fßoýä
+ùŠïNÐ~†”¡2® xÎ:Š§Þ®êGäˆ�Æ©Rq£µö£LÒã�úS…;iÏ¥'NÔ¸¤>Ô†›ÔÓ�½4Ð[Ž1Ö²¯t‘#™b}‡ÐV·¥1ð‰8çšXæ¼U¤¬ÇrªL3 Âã½3Àº¡¶¿}:áÀK¾SÙÅvk¡¥ý–`7N¡õ¯2Ôì®´MU‘Ë,‘¶èäÆ2;\¼ýÕm.zòõÅ:²|;­E®éir§ Û2ç¡ë\zÕ¢˜£õ©	õâŽhìR�MÍ8g×ð ŽsÒŠ2)¹¢Ž>´SE™4¼õæ€¥˜>ô`ú~´}(ü(Áô¸>Ô®€J_ÊŒ}?:8Ä {°¢è
+××ði¶âyÉÁ8P;×/uzúÆ¢¬ÎV4ä 8ÅhxÎDL%]Y„À`šÆÒÇÏ&G$zWDå¹�G.t�&ryïYàåÛÔš¼x¬ÒÛfpzæ°¾¦„�ê‚JRª÷I
+:šØ‘~ÓåµEÇjÊñ\
+.œ·Ö3†Ï\VÌ`,j:`UMiš5Â–eàRjÈ¥«8e¨çŠ^ª=)*@ äSÒ�Á eUáiŽÔžÔîí¼+­êò¦Ÿ.Æ¶�F2¼ãë\ïŠ¸ñ=â(0§ô©ôItòòc;†µfê·&óS–å†€*SVZ•£• ™3†^AÅÏ%Äí<‡.ÝHi”„Õ,ÙïMlÝ)E©¡	ž3ŠIe�k6Þ3øÓ³Ú¤¶µûuÊ[+„g8Rhç†õßìù–¡Ÿ²¹á�T>¿JîÞXÕd�¼ÈØeXt#Ö¸MGF½ÓN.à,�œŠÔð×‰[JÿCºc-‹p¡ºÅô53‚z4‘Ñ‹†^T‚éOdV�´·»…f·u‘d5Jm9×î×$°Tg¶†Š¤‘}š_¾ˆ
+�ôë	Wæ�™%´ŠNä¨2½
+Ïû9¯†CöýÐæÐ4æ9ãéMþÂ³\Ü9õ¨É•z;R˜�õ¬
+R®¶�{xuC›D‡±ïQ®‹m¸>•¢è�–áÅV–=Lò·¬GåWõLGVOµ¦k‹"ÿ
+‰ãxÏ5‡$:±?ñöÇñ¨ÓTaþ½�ÔÖÐÃÖOQ:�gB$ÏÓÄÄZæ’ËS‰÷,‡5£o& œK°ë§ÙÈ—$l‰”ýà?
+’5ŠNŒ=�eý /ßB¿…9.bcÄƒ5<¶Ü®kšmjsž£Ú¡kPzŠ…'oáoÖ¥OÎOéš‡±Ý¡�dðþµY6Ôû².²9}¡OÖ³t`úÎÊFÒ`~[‰�Ãx:\±úŠ¿ç�Gœ¤v©t!Ø9Ù˜É©ÿ
+Èü©§û[þz­iù©Ü
+]ÑžÂ—Õéö;2IÕÿçªS[ûdŽe\Ö¾ä…ã?Â)*û;0î$Õ-ai¤�B¨üê_Ë%Ö£{q#nr gÒ³|E©™…´8òã?1Äk{ÂQÃ»E	ì7HG­tBœbôFrmõ:5éR‘Q.:
+�tÅtØÈxÇJZŒzpúÑ`)AÉë@Î(üh°�Šh9ïN€µ4�ÖŸÚ˜Æ€ÇëE@Ø½ø¬ðqŒ¼V·ÙÿvyÅ4&CÅæF_¼´Ü}iˆN
+�ZFePK0w'W5âoÅ£,1X˜înd�+.rO|Ð4t¹”FKDŒÃ–Pp)Øö¤€n3íM<zSŽ;SMf9ýãgÖ£cíNaËýi„ûÔ²�…±×Ši4Œ¤�Ô¤ŒRÂçŠjõ§ìi ü´�ŒõÆhSóuÍ!¡GÏÏJ@IÆ*}/›ÂÇ²Õr~Z³¤€n_Ùj*l\75‡Zš:…O>õ2šçŽæ¬“ñ¢�RšÚÄ:ž)µ-&y ô œP:PA¤4PæŒRAÏj(íIFh{QIž(S&ŽhÍ% �õëGÖŠ8õ¢ŠJZ(¢€&�ýRvùE:›ú¤ÿtS¸ô —4”~Z3E!"€>ô{ÑEŸ ¢�ÆŠZJ8ô¢�/ÚQ@IÖ”f�ÐÑP]ÝÛØÁçÜ¾Äõ5œ|W¤ƒ3Â§™\vfÇáøÑY#ÅAûEFÞ/Ñ¹Äç�jnH,mR\÷ü&ú0Èf®+FÏ]Ó/Æèn—>ŒqG2C>ô¿Žj4–9b‘\²r>¨BŠŽç›YÝ©)²Ã =ÔñI�Ì©GZp<sP&@ú*@x­VÆbÓ‡Ö˜:Ó×Ž´À�)qïH=)Øâ�
+R
+S@íañV*µ‘ìÕc5B(x‚Ìßø~öØrZ"@µ„ï¾ßá‹9z¼i±Ç¡J×ÆA¼W>Þ¼Óï$¹Ñ.1ËË[¿+ŸQIh2ˆ.?áX-4è wë],
+RÖ=V5¥sñx~öúþ+ÍfáfòŽR >P}k£¦�J))zt¦&WÔ‡ú:6z•DqÞ´/kfÏ®k;Š�C‡4ð1Ú™Úœ
+Š3J(¦!‡Š
+):
+6‚E/JC×�@î4õë\Æµ¨Mu;ØB|°3êk§=ErZ„RA¨K)Œ€®Y[± Ôíl�u²¹åP)ªzæ‹¹fb“‰—ý\�Áô«:ait«i%—œUÕBÕÅ%©Òž‡–i×‡„µÂ²)V‡îÊµéún¥k«Y­Õ«åOÞ\ò‡ÐŠ¥¬è–ºÅ¿“s}Éù—èk�¹‹VðV¢»&ùd?$€�¬=½TeÐ¹êŸZ3\µ‡Ž`š^A¶\q³ø�-Ç‹¦9ÖÊ=©MDºtgSá:œg¥Êƒ-"¯Ô×qâ=bb~}Š{/¬¹nõ\ù²»z|Æ²u{ÁO©éSjÚ|ënÓŽÀæ¨ËâÍ&,…v“é^rÑÞ1,?V¨Íµé;°?O�½�V-Îú_Ù¦Dp}ÍS“Ç®>ä§ßšäáÒ‹¦û‹•@zàgÓ[x#IxRYu�ÁÆp§.gÔ™Â•=Ñž9¾ m(¹ôVOêñöœVÒø_Âvã÷·Åñë%U¿Ó—m½›^KŽž(äó2öÐ_dÈê
+œÞ6=�BÞ)¾o½y'×5^üÃrIŽÒ+e=yªb]°®§Óo5J�}j�oøI/:ý®OûèÑÿ	ß_µIÿ}ŽÏÁÚ¥÷1BÁ{3
+Þ³øl
+¨_ãÕSŠ~Ä>¶»¿ð�Ý1ÿ�©?ï³V-§ÕõˆâL÷çÕC¤xcELù)#¯yi'ñ\.ÊÜ`6ŒKÙÅu%âû#Oê°Ù½åÙEXùÚ[$ÒéìÁ¼í¬“ÜUÁ{{¬+‰Ü-¿tMI2¬0¨j0+¡MF6GFêMM’ç# ñQ\Z-Ì!�m•?QQÛÍä·—'ÝÏÒ¯.Â2§9¬î3¢˜¥zw©míT1’_™¿‡Ú´ü¥fæ†D^¸ù…fV<U+×Þ
+ƒ�ƒ&¬Ý\¤hV3’{Õ„©ûÏÖ¢Nè¨èQ¼ÐÍå¢Ü@TKŒàwú×;$oÝHaÔï­Ñ�éÅW»Ò­®/`»t#Él¸ï
+"û�œ5/AÉàU�y!}FäY·îÏ#>ŸZßñ]æ�¨øRÍ¬[f©nŠžLqíoZ¦Ð¬bÇo%¾Ñ"
+ËžâªÞßœW¤ÛiÖZŸ‡,xÃâ¨ù�ãÖ¹{}+/
+bXþÏ4ðÈÍ€ÄVq•Þ¥É\åðEFjk¥K]M–&ó¢†qƒžsü«OÅ±Ø�M&Óä„¤ñîe‡îÆkK¢,b�Šcœ)5ºÓé²ø!-å•WP…ÉH•~fç¹¨¼3>™×ßÚÒII"d\üþ”œ’bå2"�æ�Glîz"‚Äþ¬é¢ÕanÐÄ€å
+;@ÕfÐu¸u8ï‹rò3òŸëI­]C¨ê“]ÛÂcóyeþów4ÛºÐ,v-­Ek"Û]´wÒÝËÔïéP]øcLÕÍa0‚CÎÑ÷s\|3b?*UeÇfUëKË‹RÚb?Ù'Šú2uS_ðÄ¹g–9ÊüÈEniÞ8µ¸Â_Åå·gNGâ*?ÅJÃÊ¼AÏ# Ôòè:¬¥àq�ÎèÏ•U“Ø=
+èe³¿@ÖóÇ(=�çò¤’Â3Õ1Ÿjãæð®³§“-Œ¿hAÈØpi-üS«iÍå]ÆØVUþ´{Èw]NžM-3ÇYô¬}ÓQZxÊÎux	êW‘Z�jºmÐÌW(	ìÜSR
+–Ó�zT-dàò¹®˜D��¸aìk›¿Ôo%…HTS·ŠÖ
+É™ÎÑW!kgÃMò˜V‘.š]Ï¹GQëZÐEÝºÜF>VéZJñÜÎ
+Kc §<Ž(Åj½‰Áâ kFªy‹åfyPzŒÓŸª
+ºÐ0êµˆ÷WDØ¢Ökü9_¡£É™zHqîjéQHS=
++'¸îÊy¸|­ŠO>QÃBOÐÕ²žÔÒœñPéÅ•Ï"¹ºÇXÜ}E*Ý'ûCð©¶JO,zhöH9ÙÚãÇ-úR­ÒËŠVDA–Úîj�Î¡o	*€;}8>Íw)M—¾Ò‡’Ã—«jâ(Ì6ì‘ËƒÒ³îõY&]Š¡µg€\òI•ŠúqÌÝøëï]�AÍÞGVF�¢<Áf�v§eîk­ÐãX^EU
+ qŠÓ””ÍUçÖž9¨óÏZx4Í=E4sÅ=sÞ€c×§4ƒ@4ã@ 4ïlSE8zq¦µ.p)¬3Þ€F]ki�”£8¬h—÷ÉëšÝTÛß4Ð™]Ë0éŠˆƒV¤ÄT½³ŽúÍífÝå¿
+´ãÀxÇÃV,:|öeüÉn‘qÎFkÒ0EqßÁa¢D?ŠõM'±Hëö€z(ÓOãR8ËqÓ›ƒBØCqM=)Øõ �´ã° v2v‚[ëMaÛïâ?Zm@È˜{SjB)â�‘:äuæ�à€¥aÏJB98ÜR�–;©	ûÓ�<ç¥ °Š³£äË+{U9	ÛÇ{Eé1¬êl\75“S¦*ÔÉXDÑ�¢ŠA[-…ëIÍŒæŠJ_zOÖŒúÿúèúÑž(úÒc4S@¤ïGã@£ñÍ†˜…¤Í¢�z(Î{ÑÒ€
+
+“žô”RÑ@Çþ©þè§Sc8�:}ÑN bÑÒ�Ræ€ÑE&Gj/åAü);RÐ0äQIœw£Š^”�hÍQJ)(ïLëÅGss�»O;íEÏ­O´-4Ì5äšóÍ[›YºÂ±KT?*tÝïYJZÙ
+!ºÆ³6³xe,Eºœ$}¾µžïÛù
+‰Ÿ_j‰™³÷©¨Øw$ip=Ò£.XôÓ¹ºE9TŽâ­$H¢5`xëQî�Lœ ëŠŸ(¿xâ¡2	T`RêmðúRRú%¶A&ºÿÇ5Áxc¥z‡£(5Ý#†ŒUÊÝÐú9*ÀzQKR#’ 	\»�8g ¤˜m»—ýóJ¹­c±›qŠxÍ74ð9ÄHŸJ“ŒThNzqO #4½)hÆi�jÄðëèsVê•‘FäŠ¼î!G4¹¤ö¥JJ_Ò�æŽ}3Bb—ŠLæ�LÑÅ³ñž+0Ækbh·[ÈqÀ¬ž½ªA
+}©ã¥ ^(éÞ€qA¤$fŠbÓiÍŒS(=)¤Ó‰¦šktæ¢x–O•Ô0=ˆ©�4Ð#©^êö7R­»²Ú«a==ª˜ñ²²~´ï¡óuy£4¬1�Ú¬Á¡ÞJ7’>½k�'rÜ»+â
+u—i‘ÿ§r×—ƒý%Lœñ¼çØG ÚÆ ÜÝì*ÌVÚdG÷ví!úfšŽº‡¼Ï=‚Òæ€ê‡óžÂ´¬	Á®ÞTi­Þm?æe Æ+ÍgÔÉñ$lCTNÍÙž
+¢„Z‘¥ö†êzÒ}«Ú²›ULÓ¤µ>ÎçÖaÑ›ïð
+'ÛFk$_©õ¦Å<€E?d'Š‚êk›ÅcƒÀ<qP[Xë¦Ø¡}™;Nî¬ã(u#‘šêâñDú^‡!=OñUB1Žç*¿:÷YN
+kWçsZÖÞœ�ô‹Ýƒ¾*_
+kšŸ‰o¥‡x·†%Ë²õ>ÕÐÉ¡‰dÔç#Ðbµn)hp{Ïs.	èVxk™Ävf«‹¨hzbâÚÔ�A“Hþ°ë%ÍÄ¾Å¨OéIÿ,ýÙ«9TaÊÊ·^2%qX×:íýßYX)þè®®-/O‹îYÆ1ëV1/HcEÅG´aÈÎVæs•‚YXúƒVâÐµ‹ž"=Øâ»`Û~ïÀR}j9ŠTÑ‡e§I¥Ú‹i¤Y�Å…-×1”=êåñ>àU)Æøˆè}kN„½
+=F×<¯zQ,‘õÈ÷1,tqúÓwàœU­‰&ûT¸ûÆ¢iäv*3ŸZc�sGšª9#4ì‚âìÚw9ËÊ›‘µÜçp}éFùF>êþ´„oe�~èäÒ•†™£hGØÓØsEË¶‘‡e¦Z·î0=h»oôI:tæ¡è‡Ôà®¾[¹ÞÍDs‚jmI
+_·¸Í7bùýGëTžƒêt:^³qc
+yLJ`|¤ä­âýZ-fæÉã‹cD„8>µEeòìÐž tõª
+;N°Æ:VQZš½„Ç¸¤àt½xÇZ1Ž+tb4‘FIäÒãŠæž¢iñLÐJ“ÆG™¹çÿ×Ln{qKmk˜£s„y±ô­'p[›qxÆê^n,íe=ÉŒ
+KŸXÞ.&ÒÑ³Dpkzoé`ÿ£ê%23Ë*”žLüš¬8÷Åcus­r5©Í°Œe;g­\¶¼18h%d>™­_øAfbV;è€ÎäÐ|
+zƒåž"~´)$c*P{Ùø–îßÀqê5¹ˆtÛõÞEõ-sðŠj°Ž<·ú=4èÚ¤@ï´ÏÐæ­T1p’:9|1 j$½¹0?\£qY×½�/ewã<+Ì{jÀˆç�è*õ¾½“w³µ8²Öèƒì~ Òß&”âC‘QÅæI+´¥‹¡†k¡¶ñtª�>¸æ²¯õ5¾Ô$¸)•nº°êïC›$¢g]9Œ�$âºM3^ÓmôØ •ÙWæxÍTÑm4Ûöœß’vœ Ý‚+M¼-¢ÉÌw2 =‰Í*íÞÅáÖ—$Þ’ÿòö¿ˆ4ïí-)ÿåî2*›øN~WPeÿ€Ôð€ZÿÐPãÝEsêuh_7šKËä�4Ë¤·ü¾ÅùÖt>ß»ÌÔBá¾RQJÿÛ©©Àù“OÞ…Â4¦é}çIö==þíô_÷ÕeÉà­‘m¾\·úÎŸ'Ò²ï4±¥_5œî²:ò©s”M©QUeduÙVÏ÷nã?�T¹·µ´$=Ò–”f¹ñ"§Ýàýiwäg9úšÍÖ—cÐ†]äË“\¦wÏ¹ª¯4¤°ÇµBd<ŠŒ¹~%9½Î•ƒ£†~§tâáP3mÇL÷ªLääàzÖÄºUÝàiíÓrÆ>|u¢_Nx®®,w‘�›×ƒõ®„Ý�ª–Ct¿jª¬»<¨›øÞº‹[Y�îþlƒ¹è*²øÚhÔ+Ù(t ñÊ7ÞµÇãG5Ž{Í¤Æ2Yÿ!I²ÀìPç#šÈÃ'ü°aøÕÝ#R]N9]cdœsÞ’m°²4ÞéRŽ¼ÔK×&¥©,vµ.1ÐÒbœ9 B¨Ï9§sëH8¥<Q`éJ|Ò)Ô‡púÓsÍ(ô£8í@Ûd]FG\ô­´%�cX€÷`~kf1Ž*‘,l õ]‡5<µ¡‚GÉxÊ).5�6p—;œ�Â×\i¥Aê ã¹¤1[—>˜¤"�zh„â˜üFIô§ãé“qé@ÌœPÃŠv9¦0dÔ°yã4ÓJÞ¦™Ï­ 8É¨ÇRiç¯4Âxë@Æž´½©¹ö£4Ù¥¢®!•½ë-ùÖ®�Ÿ²9Ú±«±pÜÒJ™*©×¥gF-t¢µ 3IÖ ¼¼·°·k‹©<¸—‚Ø¬ãâÝËáÿ¾M!›f±Ç‹43ÏÛ?ñÓO'ÑOKáøƒEÀÔ¥<{Ögü$š7üÿ/åGü$š7üÿ¥B4…NÓWÓï¥0ZÜ‰Å[þªI¦1h¤ã´À2i
+ô¢€ö£éH*0ýT)~œÒQœv¦G�éiqE%<_ê“ýÑO¦Eþ©3ýÑOÍPNiÖ�Š~´u¤?ZQÒ€Ç4g"�õ¢�Í&)i:Š.h¤éÍ.h’È�ÄÒHÁQFI43¢#;°UQ’Mp&ñê’›[f"ÕN	ÆÂ³”º
+	â-}õiÌ11[T8ãuaI&;Õ[‹ÁÉŒš¬×€Œ±çÒª¶ârE·—æ�6z“Íg5Ùêµ5¥ËHû^­¦MËÈ>˜©rÎDÓ²Ê¡q·½Ç,¾}éŒö
+rœ1¨-ðºˆaÎA«eÈ¶Î‡Á qýøëÐbú×šø^Mž&µÀÃf½*3š]M/¥ïÁ¤ãÒ”i�r÷©¶þqŸâ¦.@«‚ãS›?Z„b´ŽÆlQ“O‹ÅHb¸§-5E8u 
+ZL{RŠLðiÃ~Ö0üh¢�2Ž’µdý<æÅ(éM y³Ž’“IçÎúæ¤Á„f�ÀÚ'Ï2Q<¤ÿ­j�©ÁsEÄ<Ë)<ÈØ=Fi@¦¨çš”b€ ¦šu4õéM”™£ škphâxâ�jBp(Š	ö¦1Å?4Æ9ÿëÐsHÃ4½)¤÷¡�ªÜ	e0@ãþ±ªÐ²¸—›‹¢¾ÑÔšy>C�F«Ds\“”®tF(ªš}¬7—¼ÿyŽMX\(Â€>ƒ´ÉàVweÙ"Ž³©
+'Išì·Ï‚±Œ÷5ä³Fd•¤fÜÎI$×Uã
+aoï…œ-˜mú‘Ý«š+“ÍiN:Ü™»èU0Òy&­ìÏ4›}+c+¼¦Éâ€¤U�¹â‚»E+�”…sµŽ:t«—òl,ž€æ’XÄV@‘Ëu¥½‰“MÓ›A£qluß.�w7y6æºýÜrk�øw'üK.âî’ò>µÙF›«^æËa7f‚{T¾@ÇSG�½É£•‡2!Ï¨¥ÝSWÞœ#QÚŽFÅ|Ô7·&ÒÊ[�2cÁ«ø_AYþ #ûDo`(p°s|æ¹�fq´ºä�Q\�oSÈ<ÔƒåD QAQ$l‡¸­ÐÍîgÈFD«÷[·¥5¶È3�ÆŸ34Æ�#89íO»±6ØfXó´S¸™T’8§* 9ùÔožý©V"À6þoJkQyáy' ŒLQäœ»uö lO»×ÔÓPy²�Ô“E€¹n6B™ÎqI|ßè�ïŠ”éUµþŠîje°Öæ
+î”×³‡IQ09ÝÞ£_Ïäü·èMkW“Á~^¤S–$ßŒî¸¬Ô�yLÐ/“,l¿ït©N�0·‰#1†ÞKu­¢˜ÜW�OCLØZRéC�íÐÃ:
+æý£Ë?ð:C êBÄGûõ¿·’924)2yNq´MDbOûî›ý‹ª)É·\½]#H1‡æ•Ø©é‘UÌÐr£˜:F¤¬CAÉà`ñDº&¨‘‡H3ž¼õúWN¼ƒÚ§&B6îùW¶z}(ö�Èa¾ŠÂÕO�1”¦vîê})l¼=q=§™4�„ýÒýEl°)ÉÈô¦Y1ÏLš‡"’±„,î4ÏKç“äMÜ³g5Ø±Œó¯ç\—˜H\uj[†“*ô�S`:mªFAúÒ÷®{Ln ÈÒ9 
+£<WUä7 ¡E±¶UhóÔgëPKgÀ‰ FÚ´;SLMýÚ,ÂèÄ—@´“în„ÿ²k”»…í.¤‰ƒ
+�€H¯E1‘ÔTrÚÁ0ýì*ÿQ[Ñ¬éõhF¢±ÂýŽX¬ÖyíÈ•IàT;¨Ìwr�økÐŒ(SiQ³ÚzW5®xEnÜégË”ra=Ò“¬å+•:µ®c%ýð?-ûý:ÔƒPÔ:ý½Ía´Yß¤ðUÇ•wú§§kpùfŠ+µ<@}ÇµK¨\°Ò�S�kÝA‡ƒçÓ	Ôu¥#;öA®ôZÛ�ù`€�öE8[Ä:F£è)ûWc5I÷8hu]A•¼ãv1ÝW¥e^_ý¦å¥3<½•Ÿƒ^¢° ÏÊ9Šñ�R‹T»E$•±T§Í¹­/ÝK˜¿çç«QçïÖ/ï?¼ÔìJw®S©c|�‘(?ÅSG(ë2õÜiÁæìÆŽBþ¼»†™ª\éåþÎ¬œ8vÆkQ¼@Ó K½9dEämæ¼ìË;&7kÐ<9áËOÃ¶×R<é3d3+õ4Ô”7<úÍÔ—4K-«h·*âÍ£úÇT'²Ò§Ÿ÷˜tnÕ£'ƒT�ÜêSgªrø.óþYÞDÞ›…/igìä·3gÒíUåvôNkKÃP%¼7+¾`fÎOj©/„µt+ÄøìŒÕïYÝXÃ<w‘˜ägÈ�8´Þ„r´ÍaS#qPw©S>•°Ó‡4ÐyäR�s@£/¥/jiØ¤ôüq@
+ b�tÇ4¼Ž1KHÚ(ûR“Î+j.+ÞU†mÌN1Ú´£Ô-HÿXÖš'–¡4�wlzJ*?´ÀO-6y4®j1<¤«ùÒù±ÏEüé\c©)<Øÿç¢Òy±vu�ÔsœBßJ_>.òQO4f"¡Á' ¤2ƒ”sQ÷â¤aÅ3€ŒŒS	1ˆ¨™i)‡5#pj6ç¡ b�NŠLqÖ•EFøÅjèüØœá«-Å`>»u¢x’Fˆ—·(<Ø»§½eU6®Š‹ÔôD©Áâ¨é·Öú•š]ÚÈ6ëŽª}
+^À÷¬á± ¹¤ÏëEäb´$âü4†kxŸ,),ŸÖ¸vàÿ…u^%»ûO‰.#aòÄ¡@®fxš à)<b†ÆÑ7µ rxéR|¤t¨¤\(!Ž9¡px¨÷;óJ§#¥iiW’iš„7‘˜Ûæø…zÕ½Ìwv±ÜÄAI#�x²ÈAÚø\"FÒço‘þh³ØúVOÝw-jw?JCJF8ïšJÑ
+ZAÅÄ§´™¢�Rf–˜	Ji?
+(`úÑE€š/õIþè§SbÿT�>è§b€4u£ôcÞ€”¹õ¤¢€E�(ïE bçšBÃ‰ÀIíA ÌpSé\?‰üL×.ö6ˆW‰wö¬ç+l|MâC|ïchvÛ©Ã°?x×0Ï€@ééHÏ�À¨™‰§[p!¸‰däžM@,A?|þUg¾sOÆkDI]l#õ&­Gq|ªÖ”1ŽõËŒ¨¦#ãÒ«M&9ÆiY�Z…ßæìi!2ÌL«$2/SÁ«|+=zÕh�‹TŒ'Þ¦c’µ&Æ¶5<.á|Qh[�CkÓc?1¯+Ð¤ò¼AdãŸœŽkÕ”
+äŸZF�aüzÓ¸Í7ŒâŒÓ{`j �MÏªŠ®*æµ…¾SýäªJAïZCb  ¦/"¤QÅQ#À§íÅ0˜§‚i€`ö¥éÖ‚y @ŠNI¥=(½æ—ny£SNÅ3ž•'˜9â€É4ð;žÔõ¸ ­.x£õ¤#4BO­õ¦“ƒíFH¦„ÅïM=hæ‚xé@Ãš3ÖŒÒf�
+~”ÓÒ”œ
+BM0M5˜¤bœr3ŠÎÕ-'º1ˆd(£ïb€5tÖ,ÅX­Ž+A#Üy8¬_Z›(.b.\–
+“[±šåkÞ:Âˆ”Ÿ�dø«V6Œå1çÎ6Æ;ó[cËp$“Ú¼«Åz¹Õõ×d9‚ßå�ÓÞ¦K¢‘’Ü±äûš€»‚rjÉÆ)6ß5ªÑX†› y@\IçŠ°bCÔRˆ“û¢�ÐXj†Ûórjh#ó$U=;ÓBúœb¯ÙX$g?ÂjFU½]Ç`úUÍZØ�
+ÚUý�Æ~†¡Ž35ÂƒÈÍu¨Ú]Ù0Îø>½©¦
+~™m¼Eue¸l¸‹ÌO¨¯A„s^9£^½Ž¹cq!ÃC'”ßLâ½�ëÏçQ×BúÇ4b�¶—DŒÅ}©ø£m;€Â=«'Ä¹ªŽZA[8¬o0ÂÈS“íQ' ÑLöæœ�ƒüê´g(ÿ�©Xœò=*·D½ËÑ*DŒàžIªÆæå¥<€p*ÄÓnÓãDûÍÁ¦C•^sJÚ�*ÚÃ+‚è+ô$ƒÄ£òt
+e�>†°¯K~“žqGP±£Hx¹«pB#^:÷4ìp)W9­,@ï­UÔF @V«[€äôª7íæm=”ñYËbã¹Y¸uúTËÊôÁ¨¤$ö©‘C`ƒžõƒÜÕlFãœsùÐ<Õ+(=:Šh“ÜÓ¬§ê}*9	X‡bÝj^C×éJÿ2íÀ w¦!2£qÈ§…Ã†9 STeÀê§¸ù°8Ï4Æfo»ÆM[9éÒŒÇ§HI”ârM#ƒò†ïOdÊ®F)ò˜•éJÀ5÷£=zžD!ÀGãI,ËeokåÀgº¹p‘§÷˜ô¬êéªØýžÏW°‚Õ®3öyÁËá$wªQ“WD¹$õ
+*%þÕGü+®ÎkŽÐYšì³ü¬ŸÂOzì7Qš¨„…Ö�¥'Z\Õ+!U=…Fñ)è
+KŠL{Ñd;•0x£c@5sõ¤ÆEG!\Ç;®xzßX‡r�*í~ìƒø½�p{.t»ï)÷As	Ê°ã?â+Öž#�XÚî�µÙ0—ÌrÈ5�ŽŠ5’ÑìE ëÉ«ÇåË„»Q–QÑÇ¨­päŠòæzeÿ•&`º€å×ßé^‹áÝz=rÔ¤Š±^Â?}þ/qJ:èÇZšKš;0rNÓÒ¼ŸZŒm^1‰3^­ªê¶º5°šì‘¿åP½I¯-ÕdŽçRžâFÜ+X«3•ìe»“�jA#4ù£rx¨ƒ:7äVÚ¶(ŒŒöúÒˆñÞ˜åämÜŠ’-ÿÇE‚âªr8¯Dð»ü8ÉŸõs�JóàHïÅvß$ÿE¾ƒ=uaW£.Zy¤ü*t�XfœmÇcP¢Ë¹TŠ§x?x¤÷¨ÖçÖ³u1ÌˆÞ™ÍiM5"*;¢ Ôª*,aêEãÖºÎbQNšb“Ou.M�j_Æ—ŠANP�Ö“"—rô ¯€n£Ò�·ŠiœÐ1¸ýÚ6Œô§žÔìzÒØaK…þè§ã4˜Á CqNÚ=„Ñq†Õô¦6;S³Å4š'Znisê1IŒŽ´Æçš�—½HÃŠa ˜dô¨Èö©ÈÍFG4ëNQÅ¼R¨8¤Ú±|Aá™®mF±§$À~öüCÔVÛðF+VÇÒ<qÆzTN\¦�W<ËÃ¾"ŸD½ÆI…›B{ÿõëÖl¯mµ+4¼´�4N?ö®Æ#ÌÕôÈðÃ™áƒî+ÂÞ)“A½ËÖ’œMíî+§¼‡k·õ4ªpÀÓ"š+˜âE ¬:QÉ¹­"îœø†'Å¯œî«>æ5’1ÏPkGÅ,dñò',g.BùM÷Ô|ÕÜ¦´2Ê1ÜzÓx`A©ny�·‘Uer‹‘Z#6.9çŠ^sUÄï�Xæ¤{•+÷y¦Ð‰zš‡†d–2DˆÀ®=jšJ§îž{æ¦
+š™+«
+=ObÑuDÖ4¨nÑ¾|bE�^¯1ð~·ý—©¬37ú=ÇÊÙþë^�žxäv¬àú2ØQFri+AbŠ@£ô¢ŒÐIŠ\úQÖ˜
+ü
+¼úÑHdñÿªO÷E?4È�î“ýÑN £ŠN´Pæ“&Š(¹ö£µ&Nh <PHPIãhïí\w‹<N¡L°|1âIôö©œ¹U�ÑŠ|Ne-§éïòõ’×Ú¹ÀÆi»ÂŽµ0cÖ”#mX7Øs7¹¦f“w8 u­	3J	��Îi$� ÏJâ<…W<æ¡Þ
+ç½#H_¯ÝÔXWn)­(Fw)�!¯$'ËŒòAïajÇÂÀ[*2íqúÔ¨xÁ¥hüÅVü©²DËÐæ³”™ÓJ�ËºzD’ù¦@2¡®ŠÏÇmÙ[ÈÕ£<oZããLÈŠÍ·{¿¬x:âÂÌ]A'Ú@uÇ T¶Ö§Cöwå=
+ÒîÞú¸¶�:NÕ7=8Åy‰¯]h—"XX´Düñõêf§m«Y-Ý«eHù‡÷MhšhÂ­'VÅ
+}qu	õZ£¡â°wÅg'J¸lr²u=©ÿJ�zT�JÐ’E9§ƒŠ�M;žÔârh¤¥éíHã©4á‚(Ú¥Ž1LÏiØõ¤(Í)¡E1 Ó±LPUý�I@
+4b‚4Ò9æ›Ç­<ûÓ L?
+F{S»RSŸ…­)¤�Å!Ï­)4ÎGJ`£bsþòO~k\»šÞ(Ö7ž£¨ F¾“,ou:£î* °«j<\ƒC‹ÛÙdÈgA×½v²¢—~æ>ÕÍ-ÓŒoêÿÙZ)†2<û¯‘}…yxÊü£œu&µ|G«gY–pÄÂ‡lCÚ²öŒcÒˆ­nÉa»'¥(Æ)§dìÇj²PÜÒàúÒcžiyíÒ�’E´¿Í’;ÔðÍ™ŒDpFV‹uQ;t"’ã÷sC ^ˆsS}JEë³&{Šê|<vjIŽ2¼×§\œ–,;WY¡¿ú|yà²p)Hhâ|_§7Ä×°¢á%>t~ÀÿõëÔ<7}ý¥áû+¬åŠm\Ž+•ø›gƒ¦êj9É…Ï­]øuu»M»´ÎD2_`jS(ìù¥Å5r@§{U¢ŒQE!ÏøžCæÅ“÷rq]	®cÄ²ÕF2¨3Q1£?ß<U•‘¼¡Î
+¬~à?Ž*XÿÕæ­Ë6¬!ýx>•pü˜ ç›	ÁaêjÈÉäS¸ ¸•ÝÎNk:è0‰™z¯ Õ×ä“ëPL¹R=EK^+§uõa&cÖ³à;ISÎ
+\CÅ_Bl:VfnJ¯r3=�NùÍCqÌG5ö+Ì2¼ô"§‰
+ÄôÅA'P3Ú­A
+Í+2gû¤óX4l�WŒäsÔS	Ç/Ù¤ö#ÔCÊ¹(6Ž¼Ó^`ÆªàƒŽM1€SœÕƒy8¨2Ëž£Ú€&qÓ­;j&Em¤víOf[=2âþTfH†v¯V«ºŽ‹«èº"k“ya!Y­”È­ïÜÕ¨6®‰sIÙ™€)'9>”¬£oz±<B;ˆŠ`$Ë¼CéQ˜Îì³üj6(k–Ê¯`*¼£
+Ê:·Jºñ«ÙàqÅA:!;w{Ð‹]·‰j¶Ì©}dêñùƒø�Î?Øñ·®¡e{¬¬vv– ¸·-’ÎŠ¹»g	«`UN0Þõ?ˆäidòÕÌÍ�†Ïº"Ÿ)ƒk˜½¦4×××�˜¡ÀdÜyúûÖîNzšåìÁ@õnÅu'ô®}™½îJ‡ÜÔÃ§Z†>MN8­,(Í�õ«$(Åh ¥1Ð7QO£<ô¢Á{ÿˆ¼?±j@ùn¢£p9úWŸÚÞÜØ^%Ô,c¹�Š“ëŽ ×¯2äƒé^uã-6;=gÌ‰v¥ÊîltVR��ÎªU.¹YCT×.õÇIo|£äUà
+Íb:Ô²¡QéÍG2…@ê3ZDå‘j�©éN9ëššÐ‘„qƒI‚xíO$gz@Ðô®«áóíÕnãÏÞ‹"¹p­ßJ!ñ4C?ë”ÖUV‰Ž'¥ÄzTõ^>ýjqDJaŒÖN¬OÚ#ôZõ�«“ö´¦ÚÖ‘-Šcžø§ÏZoN†”ry­Œ‰Uª@y¨­J
+%ëGCH§"Žýy cÁ4¸ïMðs@	µOZpÅ!ô¥Ž”€6Òlæž3Þ—�Þ�‘í#¥.=iÆšhf’ƒŠLûP04ÂAëNcŽÕ<ÒK`SÐM&3ÍG˜&—8ãPŽ1ªCÍ1¨„ûÔx©¤Ç
+@8§0¦ô€#�å[œœt­›Q‹h¸ãmaÈré[¶Øñ�E®z»šÀ›a#ÔÈ=ëÍüiá–Óæ:•Š£HzƒþYŸQí^šƒŒÔw6ñÍÅ*�ÆHê(‰MÜóø­´©E�Ó±�ðzùGÔ{W¦G4RFf‚E’<d2œ×’ø‹@ja—æ³”æ7±­x‘ô½ERV/g8ÚÊ?‡Þ�…’,ò«ë×—r·ø9ö¬«™‡Û¥šÇqý*}ZEûuÄPÿ«iõÍf´�ÀãŽiÛQ¶$nyx¨Ýy!‡–ü¹>õ$èG9æ™•Ú<Šg”£¹©0OÖšIWBT6áÖž¼t¦†õ¤'ž
+ &ßé¾
+ÖÆ­¥‹y_76ß)ÿhz×—zf´ô-ZMUŠåËœ8õ²šÖè¸³×é)±Ê“D“FCG"åH§~5iÜ4¹¤êh 4QFE0
+(Í!4€\ÑIš(<g§û¢�ž)‘ógŸ”Só@ii¹ü¨¦²(¦Ñ@øÑ�:Ð'ÈøËÄ‘Ái–lZá¾ó©û•œ§m‹<T-Õôí=ÿzÖJ:/ÿ^¸g~:òzŸZˆÈG,I'’OsL.	ã4¡;±6<µ4•õ4Óõ¥ã­maïNzœÓ7riÀ‚»‰È C˜í³UÙËœšY¹ëÀíQŸ¥$Zi<RçzSX“F GË8dç¥tÚe‘¸RÅ†È×&²-!]»Èæµí�’0C`‘ÍD‹‹À ›ùU{¥ê¥›.Ý‡aZ®¯s†$ñÍd^Lgº‘�/Ò¡sÙXfì<LOIþµëÑfXc#�P�+Ç¤»'=ÅzÞ‘)—KµsÎb¥“V&úŸŠ<-å;_Ø 
+y’?Oq\þ�¬Üèw¾|9h�úÈ½Ez»À‚2\×â_žKëÈ<É�œ‘ÑJ­×$ŽƒPÔ-µM6ÖêÖ@ÊÍÈî8ª‘ŽrþvK™aÉÚFvžÆº…é]qµ®ŽJ±Q•‘2Š�*$Î*Lü´Ì‰qNÆ›#§ð
+.3ÒŒóJ=©qžiˆäSÕ8,NriTŠ‚XÞ?QŠC1“Z\ºE	Ø§›ŒÖ•¼Ëq
+ËÊšçç²–Þv„©ö Vž‰ÛYì~í‘Sú–Ò±£ŠUÑ‘J9«3±œÖtÚÜÝ}•Q¤~û{V‘k”»³0ÝHY]e$üàpE+j5c¥·¹Šê ñ>à:Ô¹ã­ex~ÞX­\È¤)û¹âµ†éM€œL v©N1Ò£#4Ä4ÓNiÆšy CN}i3Ji´c)Ç“HiˆŒ“PÉHAd
+Ž™íSQ7Àf™*>¶bQ†Š<“Ò“Æ»Xéb�€šç¯ª­Ë•÷Ú\¡ö5ÅjÚ£êº„—/Ó%QOa\³M»ÁèQ�ŒqKƒŽis�À¥ê9ªÙX[�÷¥íŠ^;QÔqÖ€Î=iÑ¡vr;ÒqÞ®ÙÃ�dí@/ÉÅã¢–à<äe€Å>ì-¾•@9Æ0qžjFÝ‰íä1N²`ñ]–‹sšŒz€Aö®3Ëe@AÈ<ÕØ/¥Óå†þÙ±"ðsÎhc‹:Ïˆû[Â�®2æåvzûÖwÃµ1Þ_Œðõ¬G[¿Ö�ÃJ‘à~ÚxSL“LÓZI†%¸;ˆîM¬Uîu“´sOÎ*�ËRV‰c÷RgÞ›œÑ@&¹
+q¼ýnpÝW\X}k‹ÔŸÍÔîBð7õ=ë9Ž! @¨#àcŸ1‘Ž†¡Æ;Ô¶ùÃsÅi¡2$ˆáÈ«*xª±ñ «=‹	yÇÕƒ‚sS„÷ëQH84˜ÌÖ.XŒóVSŸÂ¡¸\J­R©ÀéÍTId�œQMÌMŽMJ~è5‡1·&R)à¼€w¢
+˜`ÌGÍéN·¯<¦¢ˆ�òÜnéY"â,`�®E<:dƒ!¨TŽçR2 îÉ4šaœ�*“éH‰�qéUÑs.Ñ×<¬³mÆÜŽqI%µå½¯™k¨.m.úÂ2ô5­¨\Çu¥[i×š”oaŠ‡2>:+{W7vÓ C†·*Ã!«eåÓíô�=µ¡,¼‚ÖÐŽ›™NZìfÍ;ÝÜ´É•Gb)ì*d
+IV³íDËùîY¥mÍš·#hì+9+3E©,‘º“·I¤h˜�˜/Ö‘Û$;Òzô©(|0ª¶\wõ«nœíNv5\s�OZSŒå	>ùªædò¢{e†	üë”`€í,Ç�jÞ�O9è}k‘Ôe])wg`0OA[¾ºkÍ'rIO”ŸQQöŠ6#7JŠ>µ-k6Š?
+Ò¬AEÑ@Q@	\¯Ž­¼Õ±”˜1Zê�\Ö/‹�Î=cn)1§©ç— )pOÝâ¡œ�*6­:V,¬½Y�6±†tb„'¹PíhÀÇ4`wæŒ{Uˆi+ž”‡ìg­7<SÐ‘p1ÔgÒ¯h’5ë:~ôTyb¥…ü›ˆdÏÜ‘H?�D×ºTw=‡¤‡ëS)â«FÛÑ®å¬¯JÎ%±kWÿ�Õçøk`ôô¬}\Ÿµ¯ûµ¼73–Å>‚Š"�Á­ŒE^MH¥1@ÏZ”RË‘N?Z¯¥ç4ð)ÀRÚœ(c4{RæŒsHbç¹ ¦ç¦iG®q@#�JaÅ; ô¤<QpjÃHÓÁ§íL&�Nj<äšV'8Ì‘ÐÐ1Øâ“=…)½ PòzñKÏ`MãÚšNŠiéJHÅ4‘@
+ÀÍ'94ìúSµ4õ4Ò8¥9Í5�€!qÇã[ð
+± ö¬û½{Šßˆ|Š=sÔÜÖ•éKŽ(Sòô¥Í4
+ON·Ô¬¥´¹MÑ¸ü�­yV«£]h‡“(-s�˜zW±ŠËÖ´è/´Ù’e*–V#�hç––ùw–ïPÜc?QAcÌ¤ñL”î¦“"Agó;Uùaß�+>Ç‰�j¡Ï/q­Œƒ�ÄSW.ãØsŽ
+Râ´$Nô`AÔR£Öž	8¦Ú”œP3Ð<­ù��&gù—-'¨ô®ÈŽkÅmn¤±»Šê!â;†+Ø4ÍB-WM†ò�ëóCXÇÝveîZéE'4µ¨I£ëA£8íJàqIÖ—8ë@	Å´S4ê—ýÑNæ›ýÚº)Ô€(¢–�	I“KÉíÖ¹�ø�tè��›féúœýÁQ)[A•üOãlßaÓ˜3�wÈÝö®
+I³;1fc–'¹¦î$–bK’O­5¤ÎA§õbl]ùïšMØ¤8Å'#ÜV„±ÝóF}i…‚òx¦›�­÷s@‰ˆ\dž=)ŒàŒíP™É»§µI·ŒÕˆ)
+:�Š�œiˆrâœØÅZ²°yeIqç&š@hÚÁûµ5<¸Œ€˜É§;¦ÜGÒ«d³Ú±z”´7dœÉ»AÍPc¹Øö'"§¼—`òÔõëUúŠj#l�Œ£}+Õ<8þo‡ì›þ™Œ×•†È u#W¦xfE·ðý¬Rœ/OJ¾…-�¾”Ž¡†dÕÚc=Í(ž3ÜÔ»0±ÏÞh0ÚßBÜl$|àt4å<
+Ø»xÞÎQžvð1X±”g½\;+õ'SÅ.N
+)ûsV@±Šœ("¢@0*eÀ@0iüÔ„P:ÒÀc¥9X©Í5iøÈ¦!åÑùdúÔ{GaFÜRýhÄ"€y¥ÇÁÖ€ië"0Ä‘+c¡5¤ CäpÜ(} 8¦ã"œ¢€¸¸Í1†üÓ[šFzÓ{âœx¦ž´ÉñïL<Ô†˜y C{ÒiØ¦ž}©€Æg5+{Ô/Â±î"‹ØG?â{Ñ-’ríË‘ØW5‘Ó­X»’Iï%’CóAªÀ`ÖW»¹ªØRH"”jB;Ð
+KlhQAõ¤Áõ¤oNhÔcÔo “[)Ž%P0qYö1eüÃÆ:
+Ó'"“*_[±öªP…›OÎ9R~µrý¿pAôª6÷eOÐ2ìy–ÊNzSôý9µ+t„6Õ3mÝÞœX‹a�£$V†‚¦{NÇÌç5 µ:-3Ãúv–Ûü¡4£øØV®|ÆÍ4F]Ž8©ãˆ)É©Õ•±".1N¦ŠvEhHvë@¤ã4qëLC×ƒžÀW
+(sw3ã¬‡ÚÈÛ!‘³Ñ	ý+‹…Ë&î¹$œÖSÜ¸ˆÉæ¦·nXJ�zÈIû§Ú›1ÉÇ¥8=	’Ô�\yê£©« ¬è—ƒÔÖŠôæ¬‘pHü9¨Û‘õ7qÇz�¸8Ž(”èúÓ”�ƒÀõ«N€•©5ˆ�}iÅƒC‹eFFT€{Px\f›¿ž¨¿ü|{)ªñ\ã’jÌ#Èqü¤°…Xeù$ñY¢±Ü8Î
+;q,zUÛ»��Iã<U<sÏµ&2Ä6çï÷<`SÞî2ÚæiÎLcƒÉ4Ä$2—;sÅgx©V(%Tq"–\¿¥VøI¥ÞmbÛÝKÕØ<Ok÷d´d©^k’ò²çœóÖ§yIÏÒ·å±�5Î¶-JÂlyR�ÙÎÇ5pš2z6®"ÙÙ®á`—}3^£¦Ø-Í…Â<¨‰1»uúVN:–™™*€àâéL#oÍNÑH*êN:*=»¬ƒ‘Yš $às®p`§ qO.X§zfk¡ÓJ�!ÁvU?JØðƒƒ§Hƒø
+ÈÖ€n{—wÂr³œïŠ«Ö¡&jœRqÍMæß¬V„6MŸ|ÑšƒÌ£Ìüj¬MÉóFx¨<Ú<Ê,'Ü(ÝUÌ”y”X	ò+žñ±c£Æ§™Ímy•OW‰nô‰ân~\�jMh4Ï5–#»'µÿÇšŒ\]¾SïwŒÕK‚¢2ô-Å(‰îS#šIúÒsš5BažÀR`Žô¼¯JCž3Þ˜€»š{ŒÆqÁ^i€àæœNå<piKa§©ëyÚm¬�	‰jú?kœÐîö¨'îŒfµ¢›"±†æ�bþáÍdj¤ÁÏE«¾o™|w]~Ó©Œ¶"§�¥0TƒÒµ3BŽ£Š•zT`sR�HïN9â›�OŠQN Jzñ@Å)qžiïNÞ� ƒ\Ï‰µ;˜.ã³…Š)\±Mujž¡¢Ûêà1}’¨Æà)Kb¢ìršn§q©QÊÏ‡1é]©éÓ5Ÿeáx4ùDòIæºýÓŽh:QVÜrwCS:T¹âšA'¯Jd�0 dŽs7W³Ü¼¸‘‘Uö�¾•ÖÚ³[Ão$ìðH¾Sœ�zŠ™l\Zê&�,·6­Çs/Fõx‚;TÑZC¦[mC–ïPÈ¡"z‹ŠLcÒ�Z �ëMÀïRb˜Ãæ œ
+ŒñÐÔŒ*<@ç4�Ó4ÿÂšý4	Á*9"ºÏÌsÜ	W=2+v&%«
+›šCbà4šfìQº˜Ç†ö¨/Æí:ägþYŸåO$ŠŠï-i2“Õ
+4ñë˜J£©4Öˆ„Åj]D"”½j&ŒJ¸h¾¶&HÍµenkF,ã5Ÿl—­Æ+Adu©`…š5–2ðÖK©Rr+drx<V}àòäâœv*àšfR'š2sL‚>sÒ�ÉíOÍ� C]g�õŸìûãa;bŽ„ŸºÕÊÇjp�«S†^A÷¨œo©iØö²8ÍúV'…õµÖ4µÞÊëëï[Y§t1hÅ&hÍ;´†ŒÑ×½0RþPÑÿ«O÷E?éL�ýRº)Ù¤1Ni9¢Ž(Å:ËèzAš4Ý$§b“ÐòÙ%–âW–Gó$s–cÞ½7Æößjð�ÀQ“+ÉTž¼ÖtÕäî'±;6n¦´ˆ0pM'^M1Îk¦Æw¸ÉÈZkLì3Š`À<Ó›¨°\c1nI¥•ÉéH~í>7YVü(SÈãc9ÕíŠœ‚P!(õ¥àÔOÆÑÉö¥¸ÂGÉÚµ«k3Ûé’y‡;†ÛÞ²ì­�ÄÊ‹Ë1«Ú„©Ø¶Lá±ÜÓ{XÒâP ÍL/b«cŒô£ àš‹Ç»îlž´ÂØçµ4äóéVì,öA�D}Í4†[Ñ-âãÎuÄkÓ>µÝX“åv¬‹KU† ˆ6¨µ`?rGLPÊEµ'®
+HéLvS³Û›(W9�—®Eg íWØ’
+Rr1WL‰’&1Ò¥ŠbŠ”+RARŠbŒÓÆ}(Â”ŒÐ(Í(¹ü);2=hühãÖ–€ÓiýM!oj)
+8b€ð§EÃ@ AŒ
+iæ�‘š) dl9éMÛÏZy¦s@„n)§éN>ô‡¥1Í5ýjJc¥ÈXZŠO¸ßCS0ªZœ­¡u8'ŠŽè�´Êßí‹)ÝÀ>•>¡—!aÎîMPny¬Ñ©`úŸ¥ ô¨72ò¤Ò‹‡^I€&ñŠr®÷&«‹†<mjÎMÒã>õ-Ñ…Djª:â§$Ž¥D»O^´ì’=êJL¯yÌ|õ#¥T†Aå*.µ\i­Ùç1ÌQü˜éŸz¡nªìRwsšv&úšá›û£“W •|ÛhW9YÈôªQ§’�zÕ½!·M1Î�SbÓ;¤¿·è	©òëX‘b¬©ìi…ÍAw©ZQu~õg)ÇJxÅ�|\ÂŠ—í~¨=)vŠWa¡fîâ/±N<ÎYúW8¶¥ Ž5elÎµ/¶%Œ¡—ïqY1ˆ§æ”õeÆÖÚ¾xÇ¾)¥Nì7‚g2“»“úÒžX±êzÓƒ‘%¨ýÿ°efUbŽqïQÚ¦»
+Lð£vãÞ¶HÉ²L‚	0i“Id‚Ã$dZƒìÈSÏlÓ…¼\`d�z|¢¸‘±’]øÀÇ
+jrÆ®"F¼…9ÇÕI”“Ž*Z°ÐÂ¾õãç}*rxéU·¤zT”:3µ¥ìÕK;ÙbbUTóÔö«G‡sÜ­gÅòð={ÔkrÖÆªjW%vª&=H¥+%ÉÌ�A^ãŠ¬
+Žø>Õn<²üZLhŠx™X6å#àÖ« —JwÏp+ ‘<¢ˆ*Ã‚+šÔÆÝ(üWŠ¸¤K0÷¹“uéS2nÆ=ý*1"‡È'¾)Ò©e ~5­®dO§€ueÉ9™y¯G²»)©_YnýÓ�Äw¯<Ñãÿ‰­š÷¦ì‘]¼G1@JÆ¤µc7fk‰ù(Pž<ž¸¨¹ÈÏLu©åp7òyÍFÈ8>Õƒ<²XÜ�¢c7NH¤YÀ‚8ÍHÒ2˜Á$èh�­o]<dc÷ƒïW<4µ˜ôÀÍWÖá’á`†0Yž^=‡­mXÚ¥•š@£$rÇÔÕ]Ò‹vÑŽ˜©0jºÊÀp´á;tV©‘bnhÍCç°rƒpßÜ§p±.M.j<ÿr�ÎHáqõ£˜V%æ—'�‡Qš
+Ðÿžf�ÐX›ŸZNä„`Ô?k}ÃMkÕî†‹¡Xäõ­1­%�T~î_™¡¬{Èü½.Ü“–Wc­Í
+Íƒ#!Ê}+˜Ö#ò,í�ÿ>Õ=FÑŽ1Í&Ojq}2i¼Œ?:¢D<žzÑ’)2 òÔ4ˆ\Ó³jHynNqÚ«ÜxéVm¹nƒ1¾’Äé�qÚµ¡cØþu“¥JƒLƒ'µ¥Ä`òsX$ù�º2qTî3ç“VÜ<pÕZVÊ]zWD¹Œ�‚ž3HÖ¥UÀÍjd*ÓñÍ5T“éNÏ­!Ž• úÓ´áÏ4ðiF
+4t§
+8p)içáHb¤û§#ƒNühÚ1ÍÒ;ŒÒ›�ÜSˆ¥4äšLg¥!ÀŠM=s@Æi<çCÁ§‘“ÍDëÎi’9nM%!^iØãŠzÒõ Š\qÅ!Í38ÉÎhs€iƒîÐM0Šu!ÂqQÈpj\sQJÊŠ]ŽëLÔfdÏ­mÃÉéX°°’hÎ~Rr+nUêGâkž¬v&£œg­&ôþòþt›£ìãó¦1Üõ¨/˜¥„î;!©|Õèf³õÛÈ­´{‡wê1M08 <èÎzç5RUxX•<Õ­Ë´m?JBåºš›ƒW+¤
+-�Ÿgï£oœz¯­;i¬Xºý¯Êþ†Ò
+DCG$�H0ñ¶?
+Hp*�ø±“VÔç*;UKÒ
+®MR)*†äu©R"A tëQÆÀo#°§Ç,g«àÓ±ey9¤ïÅYtR2¤ëP‘H`:u¥ã±¤íJ	õ 
+Ÿj§IÖÑ˜�&|Fù÷ï^¢ppAÊžAëÅ¹+ïÚ½+Áº©Ôôm’’f·;Xž¤v¬þ¶7þ¦Š8¢´¢�E4Q‘ëEX�ýRÿº)ß…62<¥ç°§~”†…ŒÑL/-#¾±šÒRvJ»I½ëÍõ\é‡vÓ4=�G?�z=é®€~¢³q³ºâÒÙèOª¶qÉ8¯OÖ<5i|HG‘6:¯Bk„¿Ò¯­Ç4‘ÝA Ðªôbä0ž6i6â­Mor¼ù2ë´Õ|:ç(F}«e$ÉµˆÛÚ”`®{Ñæí#4ÍÀ8ª$™~•`r¢©£â¬<ÛbÈëÚ†wR©æ¢†&‘ÕK8Å"©fÏS[°E�cöÙ—÷òÝ!ëõ¢öÉ$‹@‡
+CÞH½?»YvèîÆy–sÞš‰%äís7ÌIÏ5oØ¼ØzR­;©M �YŽ(ÖÖæâe^ƒ½vi
+±€V Òôd¶‹ç˜àÖÌû	Çö§q‰\+BÑéÏµD‰Í]³^N*
+CÄNÜž=±O	SÇ<šNx©°ÈJût¬Ù˜¤Ì½Ï Ö¬¬qùU7‹ÌÉ#9¦®„Ñ0Ç=jU ÷¨M»/BE"™—‚2=Eir+Šv~µUgÚ~aŠ�eVèÂ˜‰³Iži»¹ÿ
+w§ô¦ƒ>˜¥ëLw§ï@…4ri3Í/A@¥jn{Ò¯4Œ3H¸ÏZq¦Ž” )i.i°b¼Òd�Ó"‚}©¤œP„8ã¦÷çš\ñMÏ<S=i)N)¹ AïL`=)Kã©�G$È½\SaÅfëH?³€û¤¶nÔð?APÜîº�áÙ€ã5-‚Lá¯#¹5Dc8<W¯”G+ÃÝ9ëY²åFåØ|ˆlÔxO5“8=Å&óÛ¿Z`L>•fÏ"éqùÕ,œry©#•—œšC7”óO/åÆÎ„f«A2Ë�yÇ5ü§bÀ§æ~µ¡‚å�:º¨i¤?½þ"=*Å†Õµ@0+*ÿæ–+Hº úÖ¼	å@©Üj‰Aq6Å$ÖÞ”ª–hGVæ±¡‹í7‘ÆFUNMtpÅ…{Qb®[F#auÅVŒcŠœóúÒe8T ñP.H†J§š]ÜÔaðiÛ¹Ï†WÕe¦zå‡˜«ŽUHõÍ^ÕNèQ3�›9¨LiÉž˜ïXËrÖÅ} š’(²rF@íëHTõcÓµL¬ÛÒœ!àzt§=ñIÒŠÚæA¸‘Ò€O¶h?J01š.“ŠoQÈâŠæ‹Ü
+ï	rò=*‰#Ï'½jÈÞXÉ¬©&-êj³)	9#?J£ÝWny$�Èª°¥L–¥-‹+Ðqš´ù*sëL·L¶8ëš�˜9%!èp9©(®ìDlG9¬h�¦B=g5ÐÎBÂØÈïØ×7­óaj¼½ŽkDK2HFN@è)$vLQÏzh‹0X‘÷ªFuQóþ±‘s@Ý'ˆ,r@"nµÙØ’5mA�R¤WáÑæx†Çaþ2k®²G{‹ÆI
+\ÓÜÚ
+…Û­ `�ž¾µ=ÂG�ÉUÉ>µ`©�ƒó©H«�VÌ§úÔª%�€vH$€=Aõ«Ÿ(88ã £`$Hš;»møË«*ú�š§Äs+óàžÕe$Í4µ'RþÏ'Š�ÒÄ†)8àS�£$ÓƒéKŽôãIE„0ñÚ™øTÛ*aéNÁr&ü*'<qÍLÝ
+DÀm¢Â2õ1ºÑÇzÁñC“cdU¹ºKµ65Íë…Æ5=ŸòªA¹Í31=M7¤rŸJŒÌû¼U™†NzS‡µ4J§ø)w¨éÁ 	|¤úU«aŠ«æ©
+·f}…&ê´æÿAˆ{V„dVF�?�lSa‡úVªd‚±¶¦·±aNz–>µXgÒ¬A’:V”÷"{½*AéL&¤­ÌG-;½
+(ÁÎi\bþ zqIƒJÍ=iüS@4ìqHv�¥;µ!”P)ÂŠ;ÐšM¾‚žzRsÖ€" çš½*CLÆNhÎGjgáSmé˜Å "*qœR{ÔÇ¥FAÈô ��HO¦šqŽh‚Ý)¼ûS˜`Ð @
+(óJ@¦ŸJ8ÍG,hêU†A§šG9Zb#·Qö¨“nx¦6úUEÍÊç°­0£µa=Íc±éMàÔ»y¤+ÇJ›BAô¬ý^Ý.4ù¡aÃ
+Ó*}ê† …íÙA š´žÆÍß!×ŒTá»÷©µËO"t¸+`7Öª.qô¤É�.ccÙ�ÏãW|D‰m¯¤‘«¸Œìk9È 0êqWµÙc¹±±»@¶mažF(ŠÔ*·:UKÃÂŠ’<û|ƒ†TW½Ö¨›”ÆîHw¨óSÆØ7P1ËœÕ(‘Àá±N[‡èÜŠŒŒRv¢ÁrÒÎ¸ÉúTê#˜Œô'ž¿ZpÏ$QeÔ.Ë¾[‡§½jè7òhúœ&M�±Û(ÏÞ°1h‰€™<À\dqïš‰År•©î
+ÊêU†E;ðªš|»ì­ÁÈ;n?
+·ô¬àî‹h£Žô§ð«1EQ@Æ?v‡ý‘Oâ™ú¥ÿtSøqJãÆƒGzÖ€�+¹Úˆî}”š\úQ,×ÆÜ[ÛÝˆ"ïµyoÆ©[¨ˆÚÚæLùvÒ6Þ¸*¿”Òõeÿà9¨d�T‰Êº�ƒÔëTžëW¶rÑDÌ{¨ïY¸Eõ3"Õn @öæêvŠãµKˆ0U"L{[‡Š&+Ý)£�òA9¬ÛŸi’ÉóiŸ'¨jT-ÔNLåçÚÍÂÕGZéfÖtydiáTuõ4Æ¾ðó1?feÏé[sXÈç#Šz!'8'Ú·eO¼�äIIõ¦ÂºE¬âo7ÍAÎÊ|È	ôÍ6+_í-@…EHÏV5‘wu6³|f“"1÷W°íFþ}bè�Ä@>êôÀ§E‰�Mk¨Ç(U^‚‚yëAâ‚O¥0ÌŒ“ÐWQ¢i?g�Í”fFçéUt=$’.¥1û ŠêR?¥ (ÀÅXUŠ8éR�Æpi1Š«éV`n•]àö«1}êE"ÐÁÒ3§cŠ‚F,ÝpHÆ6dlÒùdb¥…9Üy �ŸšhLŒ% {T€
+]¹íL–Aöpz�QE'¥]FÚ`Rû3ò±Z_.QÜ¸WŠ6f‹ˆ¤£ªÒùŽ¼Ú®l”lõ‘œŽ¨*Ar£ûß•\1Ø~TžX¿J.o´.zÒùã?xTþJŸá•'�§ªƒøQp±™?¼)>Ño¾*_!`?
+CgîƒNâ°Ï´Ä?Ž“íqž‡&¥òPü¨òWû¢‹±Ø¬÷j;ôÃw�1ŸÂ®yiéI°Qv*ùÌå™¦n¹-ÂvÍ^Ø=©6Qp±KMüJ?
+O&s�ÒŸÂ®•¦•úÑp±Kì„ýæ'ñ ZFÝüêé^)ÏjAb¨€ÀÅ#&Y#J‰ÙG~”Çkºd³êÅ­SqdËÖ
+ö™unCI×£HÈ’.ìn‡k™ñÐgòÐçTÞÃ±Ç”ÆxÎ) œŒþUtÁ3çdn}ÂÔ±h:­Òæ
+:y¨J®eblg9‰(GÛÆ3WfÑµW3X\ ÌgQ¡e(Ãê1K™w4\²›Ë“$ðjD“Ì¹–áøDULñÍX¼&$�OÏ)ÉúQa‹¥Ä×/rÝ3Åi–Ç5¤?g·HÀç5&Ã$‹çqÅ1š<$FÒ°ÆãÁ­¨ÇåPZÂ#�P‚®"úP×Ž• 'Š‡ÒœúRC)Êù�HëNÛŽE!Š^�3ÐÒÈéL*E!Ü«}&ù¡@:riÆE †#îŸJdªZïØ/4âŠWžµÏ%©ªØ@K)Ê“ŽôFzc=qHY‘p¥±íKg–\bˆî)lMÈÒž•"Ç‘ŸZ_+Þºh©Lf“Ê'ÛÀ��ÇlÔâ(òyê(¤à˜Áô5BQóôíZóÀE»¶3�JÊ˜g-Ž¤ríˆ=_…¦«Ä»Pf‹Á›¨\àô*öR:ÔÞú–•‹��gi^õ"� °8ïQ³a@éúR9` ž¥îm’³m#;…rúÄ› ·Ò6|þuÒø&>¢³`Óc¾y-ço,—È|t­¦r9‘+±PWå5$‘îÚÜä8â½xÃ‘"Ë'ˆÝc#•)†ÏziÐü"¬«b.îÂýã#	ö­ž†W9¦ÏÛ?L–oÂºí04s^o\�Â¨ÞÃo²B±–àb´4és$³H?–®kšiÜÞA²«un£½AŸ›©SüëIg [©ôÏ5×N|˜Æ=ª
++¢ê­À'“V%'*0Lìw(UÚ¥‘åò”ï:b†1—“†¹GóÌO†`q“T¥vv�ÍëRÄ+Dº’Í%™}jO8
+¤£Öž2:Ö¶3.	G­/˜z©“J	 .Yó@=h2¨9ÍWÜi	ÉõúÐ�0wSL¢ É¤$Ñ`$i85IÅ1³Ú£sLLŽæ@PŠäµ™TÆQŽ6¶EtÓç"¹»Û1u<‰œ‘ƒ�lÐ"´~×n­£¸·Óä’9A^ôßøDµÍ¼Ø¸`pTžEtCÅ¶˜Ÿg³¿x¡.Ðªð�j
+í#\³3œ’yÍR¿Pv1/´-ZÄµYL™û§nA¬ÆÜ­†cÖ»HüQ¨.7°�pÜÓÿ¶¬/•–÷O„“üJ¼Ó$ãUYT9èjÍ¬Å_œc¿µt_Ø:N ßè²y'¸Ýš¥/‡ä³ºòÙ÷BÜ$Øãèi7 #LƒlÈÊéÅi¤|tªšrIœi#†eàméZIÇjÉ+³B?(�Í"³DÄ�H>•dGJU]ÝEj‰{’#t#èjPEFÖÈÃ ¨þÎê~I=
+]È±uOåKŽj˜{„¨jr]°?<l)Ý
+ÅÏÇåéÅW[¨IÁ8úÔË,L>W D¢–“#ÎE(9QGN(ÇhëH£‚”Š`-™Åæ€¾”œŽ¢”šiýi3M>Ôìfš@ cHõ¤ SÈã­!Ç­D'öÞ¹ÅHÊ)£ŠC#+žhÇéD�ŽsQ4ñ�â�qÚ˜x¨žñú
+ŒË4‡äB©¥t,ÔR:¯SMÎß}ñì*Uµ^ù?ZNAal	y@8VˆÏSPÚG· U¬1Y½MÞ½
+!ü`ð(Å!‘`�U/OîñïWÊš¥xƒo4ÒžÕl…Ýœ‘‘ÈÐ×-äa‡Ws$a—¥rÚÅ§ÙïÀa%ãèj„QeÈ÷íM²nÒ®l_"{fÞŸíRMTyŽ›©Åz¹òØí“é@™VÎv‚àFÿtðjÕ÷¸_Z5ëo8–,ù3
+èÕ[Ï2Ú¦óó/¨’"qœw¨%©ï0U#]¥Éô –=éx•òOZRÄqLDÁ°x©å@j°'uH™ŠL(»¸ï[Þðïö•ÚÍ&~ÏËŸSY:m¤÷·‘ÛÂ¥�ÏQü#Ö½KO°‹M±ŽÚ,aycŽ¦¹ªI·Ê�cÔ
+°Æ±¦B¯@OJ¶¤‘Uâ¬Fr(†šÑ'ãJ3E©!ÅfŠ@Oú¤ÿtS»Óc?ºN?„S¨R­S¤4Q@ƒ'Ö³µ�j-Í¥s™Â&zš“SÔ ÒíZâfÆ:/÷�yž«©Í©ÝµÌçŽŠ¹à
+ÉË™Ù†úþ[Û‡¹¹rÎç?AéYWƒÓë‹ŽNyúU'rNkXÆÈ–Ä‘òx¨º÷§gši5¡Ý)bF‘€(U'qWà‰@
+Š’DJ8üiýOZRÔÒß… F95­¢éFêE¸”~ì}ÑëPé:[_L‡îÇë]�µºÄ�P`ÐSØ	 ‡jŒ«H�1M�jd¤Æ(*¨<Ò(ðµ-ŒP=ªXˆ
+Í0/5"ðsŠM+€¸šŽ5Ü�înõ<K�šC«´u¨Ü|ÜT S|ÝhKŠ\Râ¨Cqž” QÒ�Šb˜§â—g4Àf8£ JvÃé@ˆ±è)
+ŸJ›oµ5”ç¥C�IŠ›m3€Š0}©ÿ�6€„sN¤ãÒ€G ¤ÁïNÀ7ÜSÍ6€Ši>ÔóÒ˜Oµ šyö§RaúÓCr@§qš��fê!b¾^â�
+bÍ©¤D�"<ú‘šÚÖ'ŠÓMžw��îkÏ%º•ŽY‰'š¸úÌç€UWý•=·‹uK6V‚í“oNrÍpàzÒ™ÝòÂ0 4ì+³º‹â^¾¿~x¥�¤»ñ£k~\:•¤%²6(×÷‡¸úP—˜9æŽH�™šwvÁu¹£P6;ÔvQU�}·Tgþ»T÷œ2Ø‰w¤íÛŒv¥ÓbÚî#ç~I¤¶NFO«zDBk‡“²qTd`«Î}«{K´öêù˜dšÍ^zÔèµ(«(½)Œ‘TS¶TŠ¥R¬yG³šR;b¦dÊàuõ¦ rrh¸ì3Tl
+OÇÖ£a†'¥+…Šd/žìTp:Ô[¾pÙâ­Ü[±‘cUå×5ZXŒ<JÁOaX=ÍD‘ÂŒõÎ¡óÁpž¾•bêÖâ[Ë="Ý£Žâï™%“îÆ£úÕ]KJ»Ðõè,n®åfMÑÈ‹·QÚ®4Ý®KšZ–çÌ…MJ©bç§‚­ŽjÖ}Æ+u±“¸¤#¥€íI¸c¥1R1KŸ¥3=óAzbÀ4n¾«Ò°Ü`cÒ¶³¸ñÞ±æL;�zÎ{:çoÛWq „ÀÅOËŽ•ÊæüÙE[ˆ
+™õ¬z[RQ‚Æ›!rW>†ž£d~¤Ò6Æ=)&1¿f3Û4�¶Fêj Á®|™¤adÇb)J¦ÝÄJd°Å"àž=H­£%c'h'‡m.-žæMF0•½Pµ•Õ¼yŒŒcøk3ìÉ%eÛþ'8­í3Qk©äŽ6í£éOž$8JæZÜyåFc»1Á«új½¬R¼ÀcÅh\êR]¾òT¸QŠ�˜<M“Ö²m3X«—Î²œuã¥
+4¤rAÏ¨ *«à74¥S©rsY³AŠ.Ò0GB*n$Š%<¸bª¬ªç=iûp·Z.)cÙpU†TÑ
+d¼Ü1'':r+hÈ‘FÖ¥UúS@Î*D½Èo©Bþ´ãŽŸ­(úÑa�ÙG–*QÀ¤Æ{PE4©=qSci¤@ÊúTnœš´Tb¡aM¥2py¬ë°ÛÈÂÇŸQ]Àã¥qž%Ê<l¤ƒ’2)ØViwH}Í@fÁÆsT¾IÜi¦Gõ5DK6?Žƒ8ÖX‘óÖœd\Ðš©$‹‚­øƒ[z>¶±æÖø‰!�ãq©®Ee‘zT‰+žY²3I�3Óá¶òF§rýå>¢®"qTôã›(âAŒšÐA‘Ö ¡U*UJE^*EÁíŒU	€O¥(Žœ)ÃžÔÄ3ËéIä©þSb—¢àVkT?Â)¦Ê3ü?•[�ƒ@EžÓò;
+p†uÿ–œ{Š¹´Rí§p±Oý q•4o¸ÀÒ®c¶(ÛEÅbŸ�/t"ƒq þjÞÕÎ	§‡ §p±Kí-ýÃJnG÷MZ1JCéŠWab°¹èß•5®†>ãÂ­ùXý¨¸X¨·@Œ„`}é~ÐHá	«>Xþª6”]…ŠÆf="jay�Hñõ«…1HTzR¸ìQe¹n2¦ýžB>i}ªþÑéI´zQv(}„7Þf?�*ØÆ?†¯m„R²Û ãü(Ú¬b�ŠDR�-JFi¤Pà1©ˆçšŽ3ëR0%H±©e!zRdb™J£ç”1õ”dõR)79âªÞ`�ƒV±Unq‘NÀPqÅeê–ÂêÑ�G*}ë]Ôõ^dr?
+h“‰ƒÔŽâ!qjñàãÚ¯ê–ÞEñ+Â?5X9i€š,Ñêº{è÷GÅÌ•c\E-»É®N–ýÎñ.¡;[;ƒÆ·'�5ûÔ`˜
+³Æ½sëObNX’úôÍ¦·×Ã“œ<ò%ºžîjdÓô;Qþ“u$ÍýÔ mc&¬Åjeã'ò­Ó©hvüA§y‡±’ˆüJ¶á„0(=3IÝì£€ò€ÊÍŽÿ-mé[Æa$Ò) ëTO‹5¥C"§¢­:ßÅú´o˜nŒgÔ
+ÎQ‘w‰Úh¾Mä–/6fn7léZ¥°v±Á�Zç4/ëO•ö¼®sŒw­è¼ÉI–ãíÉ>•ŠŒ{—rpjXÎi©NqS*`U lx¥¤í@­z-Q@É£ÿV¿îŠu6/õIþè§P ¤£4RU{ëètëV¸�€USV?•yï�¯¦´Ö"·F&"›¶ž™¬äÞÈÝgYŸV»2ÌO–Èž‚±§”À¦µë³d¨Í5fÜNõPi|¨—"¹…ä9QHÖ’c$�VL¥ŽÕà{T’ç’kS;‘ˆQ~ósí@XÀåsJi?
+=˜00YˆþïS<U˜›1Ò`8äÔÖ–Ïyp°¨ë×Ú çp
+2IâºíL�oeýäœ±ô”ÐìlÒÚ�õ­\v¦Fž¢¬"dI±Ž@1OQÏJqÐT¨§½!Š¢ž(œ!ˆiãš6ûÓ•y¤‘rjÀÀÄP?Àpæ˜ãšxíMzAKMáLL)x÷¦’ç¥Rõ§�MñLC‡°Å8SE8ëL"šiÆšh°†¥Dÿ(ãŠ”š‰þí&1›¸£<R
+P=8©´”b—�(1Å>´¦“ši”ãõ¤"€i¦�M4ÓHÇ4É#ŠCí@
+lTLE=°*'éÅ1>.g(UÜø>ÕÂHy®ÿÄƒ~—Œñ»µpÒ[8$'ÏŽõ(PŒóé@˜¨ÇjG#Â3V!·�Æ™ŠyQëIÅKk	šuLdw®„@ŠÏÒáÆÒ­Ó5}˜’x¤1ÖÑ}¦þ8óòƒ“]Dh• Ãˆ$™€Ì�ÆGA[j¸ë@Ç ©Ó �LP§¯Z±#`÷¤Œã)€~5b%P3Š�’1ÚšSÚ�Óµ�ÈÊÔ.88«¥CÞ“»™¢h‚a_hëÔÕ+ø'¸@ïÒ?ˆUë«ÈaËÊ£¯¥g=ä³•.ØÏlô¬/©µ´&i`Õ­mÒfû>¥g"˜åîqØŽàÕ­Z¨ú–¥t“Ü˜€Dˆp¿ýzÂ™žPÎStoÇ=ªþ­26–Eª³`|îz.k¦1|»˜JJä3yÌÒcg;M^Ï@®H¸1¼û¯Ù«dOådCÿªZû“äwjC�z�ÍCÿ-þ"�ëýõüê„H:qJô¨–hÀåÔ}M(ž.¾bßB€&\)�v?Òý®jÑ¹‡?ëSþú�ªêBÁƒ«’8U©–ÃKR±]÷,Üð1šœFÈ¨¬wH¾cð[“V™�zô®c¡ORà�xÅ&N94n8ë�LB€T:zÓ]€@ŽH©¬‘À9ª—’0Œî©ŠI05Öµí=u(m:O•³ÈzV$Óàµñ½Å¾Ÿf°Ä‘¥FQA~5'†õ§x	 Žñî’ä¥×õI`¶¸Ùk”srì^_LšÕ©rÚÄiÍ{™«µe“
+˜÷�§Ú¦;Be³´úu¦(…-í¶ *cµ]gxíSr ŠFùr9¬5êhC€sƒŒpH¨®Ë…vòÜMrþ\Ç×>§Ú¬™
+òŽF3QÛÆº¦˜ˆ—_g¿´”t3Óòª�¯¨¥±VâÆûHÔììõÈÒ3y‘Âå€#±>µqU„ïo&�ôîEjê±6£©Ù^Ü(‚ÞÑHIËõÏ¥P¹»†mHKl¡¶ü¾g¯¨§>TôÞÚ™ó*‹·P1Š�â¢”†¼”ç½Y…AÖ´‹ÐÍî9W5*©§*sÒ¤	T"Û@ô§�sŒÓ”zSWäsHséRtÏ4Ž¼ý*l'&šG­<Ò})�T,*r dæ¢çMRlb¸Ÿ°e]¼þð×k.qšä|P˜‡#Œ>i’rç­ ]Æ”¯9Í'@*‰mÛÜ´Ó	’AúR‰~i¬Äð8€{Ô±ò
+F0*HóŸAÚ—@=3A]ú=£òNÜ{ÖÌiþEcøL»xz'¤ãé[©Yš
+©KÏ®iëŠ��Nj�‡‚:SóQâ�ÍP‰/ZjÓ�¸§
+niE8Rô¤Í-'4¢ŽÔg)Àq@§t Bb��ÐS¸¥Æ}(˜é6úT»y¥
+=(´m©ŠsÒ�¡¨)1Sm¦•ö qIŠ�€)¤P1„SH4ò)¸æ�
+4˜Ïzyæšs@+ïM#ÜÔ„RchÐŽÍIM‹œSÏJ’„ëßœ{:ôÍ7g€VdôªW
+—úU³ëÈª“æL
+íP¸ã¥Jc
+IÉ9÷¨ÎV$ÆÖm¼ëbÀ|ÉózçAÏnÙ®ÎTÊ‘Œƒ\•Ô&Þñã €yJ¥w¹³eÇÌEbÛÞÝX»%hÉá°zýk¡ˆ0{ÂÔ­ü«–#î“š{ˆŠãRº¸?½�›µ	žB:Ó¥Rç¥0®íï@v5!Ÿjáü©ŒÁ¹èh$dž3Wô«¾¿Ki$Øø…f¡æ®ÛÌðºÊ‡‡ Ös½´)Zúž“¢ø~=9²g3Ù+y"×‡¢jÑjV‘²œHæõ¬·:
+ç…ºšú—5]$‘»TÊOzÙ4M‡ƒïJ
+3#µ.i€üÑLÍì˜ÿÕ'û¢–›<¤ÿtS¸©QøÑÅÄÖ¼çâT,šÅ¬ä|­ÑŠôS\Ä¨Uô‹i‡ÞI:ÖSÑ¦�¹ˆ<Tg©ô§IçšG<q]FC×šÄŽqBwæšìIÅ3œñFM.F1ƒšN�éáÓšžùvš…An>Â·4}{©RI”¬cœw4± iFyEÔÊv¯Ý×CëkE�T`�VÖ1I²¬1#©TÐT‹J�!ô¤1Š¼sRÀ§§ìâ�Nžb”- Þœ½E;m9Wš`<
+xâœ'Zk-IŒSX�¥¶õ œœMVäÕ!
+¼å¸þ�¨è:SrsŠb$\{ÓÆ3Žj� ç­3|ÒpÁúÓl²�¼À}M4ÜÀ½dZ©ä¤–úšp‰;Ÿ¥;œÞAýÿÒ�]BOßÇáQy~ÔmäT"o1î¸&¢�à�ëL1!(¤Á9¨cCÇµ(4§½C-	Š1@4à2( ÒRm¤Á¦"<SH©HÅ4¯µ #Å4Š��jM¤ÐGŽÙ¦‘RM"šàúÔ/ëÚ¤•dÜ6œù¦2œS‹â˜}›5Å3mn	»M| “Ž¦¸¹pš•¸1�Èù”UÌiž˜©™²¤v¨Ï#¥X†›u`0Ô‰j€å ÍHœJõ 
+UT.�ºVXPà¹À¥~*Ö�¸ÔK°8ˆp}êFt‘yVñ¡ÆUqW�8˜‹‘È©ÑiŒzæ¤…ðhTã·Z°£¢P
+J­Ž¦¤c©¼ÖœXcŠnH†5Î8¨—‰n™§7ùÍÂ“ÏáS!”/åI%�ª€qTPä€sŒzU¦Â;†]Æ¢ŠWó6ãåÇJçO©©¼’¢¼sÆæùIô­]7YŽÈÊ“XÇu•£"’px¨ÈÇ¨ªSvH©©•w‘ÖŒHÅ‚¯Eö®vrW#$sØ×Ksô<ç5‰slCEme#)¤pÙß÷Ñ K 9Üÿ÷Ñ«Mm†àf�B»Ílf6FùT	†9É¨K018ÿz¬ÆV‘ ô^hÊÊÀ·9>ù«Ÿ¿4å·;‡Ë×Ö­ÛÛ“0ù~‚¢[™³b¤F£Ú§lsDa‹‘óÞ”ð�ëlˆy"‘þl
+”¦HÇj5!„i¸€Ã"˜ÖÅ�ÈÈÏÔÅG€¤‘ßëEÅ`Ñ­g°ºia\êJµ¬[\js#\UGÝ*%yT‚àv ´¥q¿ÐVž×KÉ­ÀBp òŒsN++€„’#$¯µI#º
+xlƒY²)‡çÈ³`›ËÖJÜ)¿G­)£#?Ê‘-íÙÑž=ÛMTORf›Z<PÉe¦Å*JÒÊW)Íeé!ãÓâ†Loß¸Ÿ­lêk{´+4Cæ�ôªQC†ùW'<W9Eè‰Škr«|·Rz½mÓÚ¨MÔ„ã9Á«öÜ'Z¨«!H´ ŠxéÖ¢V'Ž´ì‘LäÒ�Ç¥&}éF=h£§Z2hï‘G&�Œ+Í!�Þ�È¥ë@ì^qV[�ÅV˜öª)ÉŒc5Ëø¡ØËc�âº™`xˆGö2%åsÐP#ˆ#šBµrXUÎS
+*N~•D•ösI�Jµä¡èMqŠ…bfíÇ­Z†A¹¾b;SzŠžÏ#ŒR;ÿ
+ó¡Àã©&¶�ñÒ±¼1�ì(9îkeG~•š(•zt¦Ó�ÀÍ ç¥ZÀã4ðGj@9§ÏJbbœ1H—4€p4¸¤�@éK@¢€
+(Î)qžÔÒäŠL{ÒŠ`)“©zÔ#­L¦�J úS¸ôª´„
+p¤4ì#+šŒÆÎMMÒ˜E!�Ÿu¦žjGsPnço4€Zi§Lf�Ä=)¤yQMÇj@7ÚšÃ½IŒRc&�Š™ÆiÜõ4Š0¸ ð95#ãÖšH¦´£·5HOJ•½ª¤ÜµHd`zŠ�¹ç½4"*#S²ç¸¨ÊŠb)±bî…
+ckvždeÎäþUÐ:Ž¦©Ï²•# ñLANGZ¥}“rš¿$mËÄË�§Š§s€äã© imš>{‡<Ö‹œ±â‘Œo×@b´Ï“ŠP1Á«¿cŒ�Q³‘Q}Ž\ð¼}h%àÕ˜ÉÎ=j!¤à!©2žA¤ÐG„5³¿û$ÀŸî±=
+zÀ«ß?JñÔrŸ2’ŒW¥xOTþÑÒÂ°Ä�ü¬3×Þ°²ŒŠLÝ\
+péMÚ—ñ­PÅÅ/4”´#ÒŠJ(f?õIþè§f›ú´ÿtS©(¤ÍÐ!ë\ß�Má¹ˆÞXmº<Ö/ˆtÈµX¢�÷
+‡<VU{äh23èidH®ÝünAV9àÔ‘x:ÌæeÈ÷­Ô´!£ƒ_ZQÈ~TcôèÑxbÅ9ò>õrÚ¹
+�Â�ÂÇ›Á£ßO��0ÏsZ–žº—™›`Ïã]úZ*Ž
+•`µþ�á‹K<…œ­¨íÕ0þ•hF;SÂ{R¸ìD±Tª‚ž©ÁihAN�‘NU§{P§…¥S€¤Bâ”RãZpÓæ¥=(TîiøçŠnÚ\SŽZi$Ÿ”qëL�¼šaS'°§íOZBsô B
+0)¦œ}j65B“Üf˜Ï·ŒsíHò`íNM$iƒ–äšv«ÎæäÓÂ“N4ð¥1
+“Öœ!÷§dƒíFsÚ‹ŽÃ|�ýãG�=M?4sêh¸¬Baï“Ld*Àšœçƒ¡¤Øì*�A^(_­?µAD[M<)§€z1Ž´ÜQŠv( I¶ŸIÁ ÈÅ!T„sM P""¼t¦•õ©±L*BÊ
+A*õ«ej'LÓÔgÄ±7öx�n}ë‹—ïç^›yj“BÑºåX`ŠàµM"k+‚QKÅê;RZ13+qÛM'œËƒ·g»ˆLr*UûÄã¡¨¹ž¤‡qL
+b>£Šé4‹/³Ú¨þ7˜Ö&�]_D¡r±Œ¿µvDÆ0J‘Š¨}*uRhŽ3Œž•*¯¥F:Ô€fœÚž©Í7n;Šrí=iÅsÚ“n*F@a=±Rg#è)Žh2íO…£bf*˜<¨É Ž3QË¸ÛÊUG“éQ=†· x!f-çýîäsQ¼«2BË#…ÎqPæA�Ÿå÷­[X´Ë»3µ´Šx}¼0®tµ6fT]ÄJáð:|Âƒl‘*àvÏ5-ç“nÂ+)H£ãsMVI¦-�Ãžzuª°‰Ñ�Ì
+ûš…ìãf<>•8w<œgéRF‹Éé[EXÊFsØÄ: …!ÓáÆJƒZ¤žM0‚½ldgfE»îŒT‰¥ÁÝE\eäS€L,T]¾xP)VÆ8ä€d¹«ãŒñP·ÞÀ¨�Š‰#	'­*ÄG8Î}êF�o*~¢¢ÛÔ�¥s3tŸ¹ŒR”}Ü%;ä„Ü[¹&Ÿ¼rh'WS¤N2J¶>”¯#·4‚I:aFƒ€Sø±@D<Ò¬Ž£ïJ•ù¸ëH �¹
+Ò��†{R„%\}(?¿Í3fS¸¥�‡ õ(„ôó"X³«<÷ñZB«¸HFwîÐ•Ø7b›y¦iñnV=ê+x®Å¼rÜ®ß7•#œ�ZµeX¥ml@ÝLG ¹­mªh™šB;±­”¨Šé[=ÇŒô¤e“ø�z”ŠpO­1í!AÎOz�@¥ÛŽiIì`zÒ�H=)Äâ�Æ04˜ã¥8šaÓ°†»
+­.j³å�âÀÍÊR
+ç¼H3cŒsž•ÒÈ™¬ÄM‰#œ¢˜ŽAø¨O"¥“¯ZŒqœÕ3œQÖ”œhœÒÀçŠ–‡ÔÔy=M=3øÿ:@�Cð±ÎƒÍmÆµ�á¨Ú=ÝHÚÇ$ƒ[h09ã5±H¡E<(ÇÏj¡œ8-8) Ú”
+pÖ”(ëš
+—m8Ú—Ò€}(ÀÍ;Ôb€§j\RŒcšLóÆi€˜¤lúSˆÀÍF[µ�Ý*e=±ôªìáy&™ºyz0EªB/n÷°>¦�: Ö§çT>ÏŸ¼ÌßSJ-£þà«±-—Äðž<Ôüéû”ôu?CY¿e�û‚�³ è1ô4Íšaæ¨…–?¹3cÍH·2¯úÄyhÉ˜ÔMÈ÷§ïWSMëPÊíÞ�´¤wh_›ëHhLRc5&Þ(ÛHdX¤ÅK·›3HV!,GSX1ëSy[ºÓ„a{f�ÊþY=Å)ˆo¥O·ØPSªðñ‘Ò¢*])íš�ãäÓ¡‰AÈž´Æ_j´Sñ¨Ù0h¸ŠŽ™8ªïŠ¾È1Þ¡x×šw“×­ü¹cœwùZ¹û“’Gq]Æ¥d.­d^àdô®àîfò§ëLL¨ýzSºTŒrÕœ5Š¿•#3„þtªqŽ(fÜi€ªî��Ø©Vc±�æ '&•zŽhQ".ÏÇ5×xB÷×ð¨œ
+ãÁB6Šë¼Òññè+®ÖeDîÔäf”T0¶@>)ÅÝ8Qži)i€´RQ@£ÿTŸîŠu6>"O÷E-!‡áHMö¦1ÏzFoJ‰�jP¦”¡Å-À§åàúÒùC<Tû1Ú‚£=)ˆ€GN=*PžÂ—eE²—mI¶—h¦`})ÁiÛiÛx m§§õ¥Æ(¸§Jµ8
+f=©Û}©qNÛÅ Zr®M*�SŠ' §bnbŒätÅ8SIšv‰·=y¥Ç Å!?…6�‚à~´ÓKœö¨¤•Pã©¦!Y€ð*s!Ú€ãÖ�‡�å¸• à`q@ˆÜúÓÀ¤á@ŒÓ…4S€ à
+&1Nâ€ìi´ãIšB3Ö¢“¥Hx¦?"“è
+;�ZbSÁ9©¼b—·4gÒ�š?
+ÒŠ:ñ@	AéF(1@	Ú“µ8Šn)‡ÛŠB)qF=E0#"˜TžÕ1Â)ÜV ‘*œ¶É"�ÊúVƒ/AH,s·~²¸÷e[ÕMcÜx=°L3~+¸ÙíM1ÔP<â_j	Ê qê
+W—H¿†&g¶o“’G¥zo�½1Ç¥/ÙÃ`cÒªâ±ÍøkN1X	ÝO™0éè+z809«)Q€0*E�¨�õ�Ú¦	éŠ“Ë½+ˆéÁ*/Ú�£<
+,!qÅ @3SíËu¥*¹^ô„°PaCJÃ¹]³B¤Ïâ4,¤aªFOz¯"Êc‘—ØR’ºØŽ;	n€‰üÅ|½EFm®v€`—¨*jF¸»S•šE>ÍIöëî‚y?ïªÏÙ_©^ÐŽ[+¥
+æ&Áç Uv�ÖLùo�M¦®®¥©GÂÎøúæ•µMDŽgcõš¢Åí
+á§ †î
+šr
+§<ý1K.»yˆž@Aû‚£:Ô¤¬_ûäUÆ�Ç„çô¨ÛsšqÖådÚ5÷Ø)‹«:²°–"WŸ™*ùQ7XœÔõÁâ�ý®K³0…‹õù(:©(«²—§ì+±Å}yüj&7ŠzjÌZv‡4ßíS½‰³¶<qÉæ¥ÂãRÔ2³�"˜‘|à1#=êA¨Û±_7N‹¯8z¶šž™Ïý‘—„ÇšÉÒfŠdßlfE^=Oz�×Ôu­ÔtÙGüƒÝ3ü"Z�®´Ös‹	Bc¯›Ö£ÙH|è¨ÈÊxäý)æ6s¾Õ§­¥´!e´ºÜFR1P<ºSÝsÎHSör:*"ðNÑI’u«Hú9“
+qyúùy¡ÛHßµ.çlá£Æi{9:+ÄÌ&ÁÕ!#yÉÛŠ³Ñ÷’ßËhÃ¢y{²=jG¶ÒePðë+†þô$Qìæè¤ÊdvýjÍ…ûÚÃ%¹†9à”å£�dgÚž,lš?3ûj¯EòÏ4èml‰ûZÞ6nu8½œƒ�\ÝKrèdÂ¤clh£…%¹ùö�\ºœg¥Ntx€ÁñœÞ¤ý
+DÐ-ž][Ê¡IP�š9&>dÌ¸óž¹5y3�š‚sÇ>•eSÛ¶Fmê=M<j})á1\oZ6Ô¡=¨	ÍP\ˆ'µ)JŸa£aÅ+È6Òmö«=i
+
+r¹ToÏj¶TÒ¢hý(”¤Œc W?âUÛ¥±ÎáÍuÆ1X~$³’}%Ò$,ùÅ1w&KqÎ{Ð·ío—oP{Õé4Ë€pñH…ÙëO‹C¾¼ÄM–û¥¸§q²SòT}	ý+¤‡Á×’a¦‘c=Ö…·ƒ-Ð�6F“×ŠM�ÇGÊÛQK1ìtz'†äiV{ÅÚ•N¤×Oi¢ÚÚs*¾øæ´#�G T²’o–¸ÇN«¸,x*FJýhàA¥Í}ª@8¡�ix=©@§­1XnÑœâœô¥ã½�Ã‚€)Ý{R�@
+—¸¥<POJAOÇ¤ 2úTDsSdžE!çµBøb£0Œô)‘aœ�:U‘V™,ŒDÆ”@õ04gÚªäò�ù2Â“ËJ±‘ô¤ÍŠãžô˜úÕ“ƒL zÑph­´)È§ŽFiÅF) í<ô4˜Ó>”¥Aç¡ö¤áRÆ4c;IÁ¥ÀìhdÜzþ43´‘‘H¤hÛŠvz1Hí8Í)S€ Ž)fßjM¾õ&)0OJŒ­Fê*|zÓXÚ€*”Á¦”©È¤#ŠªÑqQ4|*écÂžÔ™$#+‰ñ.’ÖÓÈcýÓœ6C^ˆññÒªÍl²©¡”õSL!<ž
+1óžEwZ§„!¸v–Ôù2w�rwúUåŒ¥f…°?ˆ
+UÉh¤4Òrj@xÁ¦2á²($UÆiÊi¨T6[¥?p
+òþ´Ä62¾i8í]Ï‚íš:YÎ@•¾_Â¸`2¤Ž¤â½7D‡ÈÑí¢Æ>\×=gªF�FÄŒÕŒÔ1-J*ã°Ø´¢’”Sh¤¢€.F?tŸîŠ\Pƒ÷i�îŠ\zÔÜcÖšÖž@ j` ¥x§})q@í¥ÛO
+ivZb#ÛÏJ]´üQÞ€š]¾ÔïÂ—ë@	ëK¶ž�´ÜQ·5&ßZLó…RM;€QŠ~Æ=p¿ZxŒ§4r=iËîjnƒ�HOµU‚ãB�JMi´Ä)âšh=¹¦3åŽ;vM5ÙPeŽ*&�›å�àFš#ÉË6æ÷ ågâ0@õ4ÑäçÞ¤úPTšLqJ8%(Zh¡sÖŸ²�¶•Ça€c¥8S‚Ñ¶•ÂÀ)i1K¶‹…‚šiØ£m0iŒ=ªB§Ò˜E #‘i„`æ•O4äŸËÖ—‘Ú�ŽôtúP€
+¥ãJÀ7b�GÖ€ŠJqÅÀ b›�z“ô˜÷ IŠ“�Š,"+ÅFV§"˜ÈZ‹m&ÑÒ§��HV€"	ëN	OÅ9'Ú�Ä1SÖžt©01ŠNƒŽ)�y|ãøzÔ±•np)§¦:úÓãU©¤"L/ ¤ v”ò1Å3�=(`.Ñè)�¥<)sš�–˜AÏJ™ñŠˆäRÆP{TON•YÅ7Ëç9¥p±FXˆBTdŠ�@*+éŠÑ1æšc¦˜¬SÄxéL`�ª÷–1ŒRy+ýÐió1XÄ’ÛÍ˜¿QÒ™ö/jÛ0�ØƒoÞ‹ŒÂ6#=)¿aøJÞû8<ÓE¾iÜFØ}©¦ÃÐb·þÎ=)
+°ö¢è,sæÆ“ìÞº³})
+·µbaÜþtŸcnÄ�Æºj?»Hm}¨¸d�ÿRý–QÒF­ï²{QöOa@?g˜4¦q÷Íný“ØQö?a@Œ%Šu?ë	§Ÿ×ó­¿²cµ/Ù3Ú‹ŒÄQ0=JxVÇØûb�²{Qp2˜2F{JaKƒ÷¢��½m‹Aè)ÂÔÒ•Æb,21k¯
+HðÏ(P`Lg¯¥lp;SÄ8æ“m�Z(€PÀ«ñ
+J¨jFF©R„”à¢ŸÀ§p°À™<qNÛíOL7J�(¦J£½;híÏáR�Ç@)Ø¦"/=�/jž“µ±†˜a«d
+a©Qâö¨šOJ¸Ãžj<R“[©$”ßÓn1€ U²¼æ�Šb§�éKäŠ²Ú�¼ÒÄ~ÔàƒÒ¦‘@Z£)ûG¥Å9p{æ��ÅsOÅJa\ãð~õIŒQLCLjÝFi@ÇjpÍ- Ï¥;ô¼QøPQÒ—ÑÇ­%7<Rä“ŒR€h	Û�j¼�€O¥JÇŠ®Ç|�GAÖ€%�v®{š˜SìÕ"GKøSE8
+`-ãšdcÓ�KšnhÒ˜ÜŒbžE4æš­´àô5(úTL20E	!FØÝCI¡“Œ´2#HäPisùÒ°A^@ÍƒOQI´7 4¬4Ãh¥Å!;G9úÐFAÈ¤PqšOÆ�IÍ SxÅ?ŠiàÐ,:ÓqÅLëLÁöÅ3oÒµ!Ü}(229¦4`ö©ˆçü)
+þU¡VêªòÙ¤€‡PÃÐŠÑÛŠa^hŸ“Ãzs’~È™>Õ›sàÛ)	)¹3ØWa³ž”Ó4^Âhà&ðC|›Ž}ª/áJ3ò„¡¯K1)†è)]‡*<âÓÂ÷ÆéÑl@Ù'5ÞZ£mE#FY0Œcª»J‡»±­	W�Nš1N­@\š\“Ö›NÉô¤E%½§û¢�šjªO÷E:�
+cš�J‡�M	�p:ñO#4áƒÁ¤-P®¢”Ž)<ˆúóŸ­gSÝ¿:±6ŸJ6þtñdþu"ÄÇ&�…rc½G¦jÀ�?»NÆQ`¹[iô£O9ëE”Iùš¤(À§RLð9¤<w šC@¤¥çÒ¢yãC‚Ù>‚€øÓÕ\â¢i$~˜AïÖšg',}h^Vsˆ×ñ4Ý™9c¸ÓÏ4ª¦€8éÅrqÍH
+xSé@ˆéá=©áx¢¥±Ø@ƒ¸ö¥ïFh>”¸úRFi?(ÏÒŠZ;u¤¥ ô¿… 4S¸¬!æ˜Àš“”Â(&S¦#Ž•ã­0§µH
+··5 4êQõ¤SÍ;è£ŒûqKÏqJÀ%§cÚ“Çq1F3N#Ž”¸©˜¤Ç=*LqIŽiˆŒ®i6›‡dž(°\ƒmF*\g…�ž´¬!Ûž(P§©J…Ö¢'šibçŠCGï?‰®¢S�–>Â®ÄÜ—ç¥H§Ž•LÜN~ìJ¿^hó.�ü´QôZieó‘Î3LªoºÿŸƒÿ|Ò†¸ùÙú­;
+å²:S§J€Mr:„aùRùã?2²ûõ¥`¸÷8äþ”ÈòËš‚89úS¢RsY²Ð Q€zÓÀ¥ÀÍ!‘�ç­g§µI´Ö€ä€~´®20¹î)|±ê3JÇØ
+CžÔî!cÜ }h1
+¹ÞŸ�úSH§p°¾_ûI�LÓJ�j\f“î+	�êÒ�¾Ãó¤øQ°R¸XVB½Ôý
+7iö žFi…ƒfzâ—gÒ”/µ(®²�€SñïK¶•ÂÃ6óFÊ~
+zÓ¸ì7gùÍpx§qž)Å
+iBg®)ÀqÇ4 
+.åŸjdýÑšqmÎi\,4Æ{�FÒ8§dgb‹…ˆÀôð(Ç4ìR”)#ŒÐzŽóéšb,ŒSñÅD§Š�*É)ÀÓA¥ªÅÍ`ã¥!¦œS9ïNü©¦“.Z”š…ÉÞ2;T±ˆFOj6Ò�íKŒTfH£hÏLSûzQŒ�ZGŠ]¦¤Ç½y§`G"€¸©
+÷Í&=iAøÒö¥Ñ�é@	Š1ïNÆh°®4Ô´¸ô¥‹ÄíGŽëÍ(ŸJ`7�ÒŒg’)ÛBûšBh¤ã¥FÇÞœ[œT2ÈsßÒ“²I´`u=(‰Hn¦›d¶çåªlsM	Š(úf€)@ª
+½ ìq@”¸¢€“¥"ŽÝ(„RbŸŠ;PeMFËž©ÈïIŒÓB Ñp~dýEXV2EFW­F7Fr�?»@©ÜzÔ)*Éßká5.}i\ŠM¼ex>”¿…(¥aÜ`=�Ò�ŠRëHÊs”oÀÒ°\LzÒb”gŒP0O†4�Þ˜Gjš˜Â�‘b“úB)Ò)1Šv)(…M4Žj^i0h,{RëRãš6çµE´SJÔ¥i6ñ@¤"¦"šV€!�C‚h#4&H æ“©íNÀ(¢Š¼Ÿê“ýÑKô¢5ýÒvùE8ƒR29>é¦ÆÝ*B*gØÕ-Ë
+sR
+�Á©TÕ�KšQô¦gÞ”ÜÓH	?u3è)~´Àwò¤8Í…?…&IHsÚšÎª9`>”€vij36~ê}M1Œ�Ã6ßaE€‘�W«~ULOúµÝîi(ê9õ£ð 2Èä|îŠP tý´»Â3Jž¢¤K·Ö†Á!�1Úœšu(éSr¬0(§cÒ—Þ’•Æ4¦�Òd÷¤æ“ð£=©	 BÒQG½£ñ¤Æy¥ÿ=)€RÒp)Nq@G~i.}èx �J3FsLãŠc/!”\EvZUnÇ­JËžµ'µ03N<…\Ž¤Rë@‰F)¾H'*ÄR®=iËŒóL•X“&Tô§m”¼
+?½-0%Ï ~ ^1‘šQéJúÐvóAR=)Ý(Í3kw<Q±}ÏÖžO™8¢À4þT��Jq?�4šcôªÒ0PI©Ü÷Î?­�ížÝ¨2�!ÉÇ¥=cÂŠ�/=*@§*¯blD#=†)DMßŸz“i§4sÄ^WûGò§y_í~U.Æ"›±¨¸¹Qˆõšc>Æ¦Ú{Ò`÷æ‹‡*+2ã�1RÆxëÖ•ù‘í#T2Ñ/ãF)›¶`•ì}*J›1Ç4„Ô¹ Q‚E0Žô�ºSˆ¤#Š`çµ)ëÖ”u¢€Ži§ÒŸÅ&3Úš1Å74üQƒØ
+iQŒÓ¨Å&)qHN00NiØ¤b—qKŽ)ƒ‚¥ÏáIøæ˜
+ïÈ¥4½ûÒšANàöÍ4
+p1Ç¥4úS¸ô¢�
+Ç sÍ.)@ç¥;Ò0x¥Ç¸ç­!9à~tXW#qŸ”~4ƒƒÅ9ÀPqß½BÌG
+2MpdÆTŒe�0Þ9ÿW™©©;�Ìj_-½+[r#-Ûsæ*�ašLNÇ›‡ü*À…úô¥òÔS[d¿óñ'çK›•ä\·â*Ç�¼(0°ïEÀ€\]¼© ÷àÓÖíO#'½)�…0§¨ DÛƒ‚ö¦˜à÷¨vl9N=»T¨I9üêZ)0òÝål§§¥<QÍ;ÅH0"¥"ˆ±K·Ú¤Ø;dTxqœ¯CÐQ`¸m¥µ
+AûÈWëOg4ÄÅ4�LT˜mö¥`¹>€Ò�ê)Øæ—±¢Áq¸õÑNÅ&Òzà~ìI­ &Ÿ�Gj,Ç4„ãŒR)8€M'Û4Ô/6~Xùjqe� ç»b£H‹ïÏµ9"Ç.rÆ¤÷ L -8
+p@=©Ái@æœ ¥Æ;u§RS*Â`Q�ØÒõìhÀ ,&=©§qŠ(	·Ú�¾”Rõ¤!¥yéHT•&(íL
+Ÿþ½0¯­X#Ú˜Vš]�78 Žâœ“2q ãÖžWÚ˜Gµ1dŠp8ª»Yä8ö©pN$ô dôRŽii¢�®ÄPI4¸¥`†_ö‡¨¤$O#ëR
+sE‡rf“ó9F#ÔPTƒÍ‘þÜS°;QƒI¡Ün)1íO#Ö�û)X.3Ô˜§ãëHEq¸õ¦‘éRv£í@\ˆƒL#ÔT¥x¦x¢Ã"lméÍG9©ž0“ÅU�^Æ¥è2`¼ô§cÚ—iô£o4Äˆ¢ŒQ@ãÏ”¼¥¢#û¤ÿtSºÐ1›j7Lö©ÈíMÇµESrGÒ¥Wp;Â¥Àô›V­2Z$l}ÚrÊGT4�zš] §q²Ôá6?€ÓûÔxæ�À“ÍnÉ�©¤2IŽª?
+n©£°Í+…„9o¼äÒmP8_ÎŸ�AK�j.‚}¨Øj@(Úh¸X`JpP)Ø¥éSr¬7Ô½{Qš3Í+€bŠL�z(¸šLÒg4gÒ€’�­†`}híE'ÒŽ(ïGã@&){óIÞ€úQøš(¦ ÷´”´QH)Eêm€Å'µ­/zn)µ?ð£ÓˆY3ØS)ß"¬ƒM)š¡ŒzTƒž*"ŸZ0'#õ 	Á÷§½Jˆ?Á§†ÞÀxëJ1éL¾¢�¸zŠ`;�JByàRdâÖ‘ûÇ4vE&áMÞ§ cïMÞÝ—ó4€yéž‚¢yq�Ùì)KubhÚA@¶då²÷E*§µH¸¤1€b�Î)ø¥ÛHvŽ{Ó€¥Å-jNiÜw4œv ,4“ÒšEHG¤ê(¸8â¡�åã¥Xj®ÿ+ýhAƒÁ �œƒÇ¥"°5 Åq¨êùœSøúRäpE7qç•+ÇàwÞ}§J1E‡q„ä}(9=éä})1@\f;ÑŠ~)6÷4
+ã1ÏqF9§�hÛL.3 ¯4ìRãªBäx¥Å8Š§aÜLQ�jpSFÓJÁq¸â“5&7™¦+€GJ8=jEòÈäœÒa{,##Ò€
+<Œô¤
+GZ,;†8¥Ò—œôXWæÏ"”�GzP£©æ€¸Ý¤÷âŒ8óŠ��0ä}j%—>”é4B„.ãÔÒ[�*ÓÅ"Š�
+«ˆh&—æô§ãéGçEÀgÌ†ƒ»°©;Rf€#Áô4ÖRzŠ—êi
+Z`P¯ŸZ°GÒ£eÍ‡/½?-Ÿj‰_<Ï¥<tï@Ççµ;¥4p ê:Rçðü( uª°Ë¹xàúâš!ïdŸ­KIùÒ›û Q�éN<R{Ò°	Hh¤4Ó�ZCÞŒý)¬ê£,q@G#ªrOçL2³ñãÞ‘aÁÜß1õ4�æMþÊS–0½¿�(Æi€R�J8
+L{S€ 
+\P0£·J2hÍ+ŽÁéE‡€›ô¥âŠ.(£µ ¢à.ii´¢€–š1ëK@X^)¤S»QÅ¶˜ËSïM ÓÚFPFÍM·<Ó
+Õ
+ÄKº3”l�CR%Ào•ÿv}úRïHWpÃþ€±ž(ª <|Æüz‘n@â@Túö dô
+A†C‘@È `wÍvýi)h*‡·ä)†%÷ëRŽ):ö ü“žŠCƒ£©úŠ›µ_d€ýÐ~”Ð’çªãÐŠ±Þ’€"1·\Š<¬Žµ-4Ð^Pô„À§Ÿ\Óâ•‡rƒ„5^ù}ª[ŽSëM‰p£ƒP÷+ êp4”sLâŠOÂŠ¹i�îŠ~j8³å'û¢ŸR1ÜQšoz2AéLŒzRü§µ0QœóLVµ;ŠO-=)3J
+.Ä£búQš7S»)p£¥74¹ $
+?nhÍ šLûÒf“4\IœÒgÖ“4†;4„ÒfŒÐÒfƒIÍ.MœñIF(M�£üõ ¡¤£ð¥ ¢‚i3@E ¥?J`-”s@…ÎzÑIG4¿�-7š^ƒŽh¥£?Z?PxéKŸÂ›ŒÒÐÒç›š\â�Žü(Å 4gñ @}Å&ÑéN—)Ü,Gµ}H¥Ú{5;o­UÉ°ÜcÒ�½°)Û­Rã4î€;-/n ~¾XÿëÑå®{Ò¸Xo´p}iÛE
+úRÓ°=(Çµ!¡ QKHx4‡`ð¥ýi¤Òf‹€ìÒæ›‘Fi\æ“9¦äÑži€ìúÒõéH
+&h0¨d\ýj~´ÖRi�]HÔðùâ’X‰äõ¦£Ãiˆœ}iÃ£qšxÅ)PÂ€„t9¥Í8Pe_û ÒnÇÞR¿J›�J1@—AÁ8÷"”`ôaR•¨Í4ÄŸÝü¨›}(Úi|”í‘IäƒÝ¿:,F:ÒmÍ9bÙÐÓ¶rM=¼ÒâŸ°úñFÖçE‚ã1Ú—m?i£iõ•ÌR`v§íqÓ›¶_P)XCp(Å;kg“�ÂžªGri�=�.	<}j\b“>ÔÐ¼`Ò)ùö¦ö dsŠ	úQŸjiúÐj7`£$Ðî«Æî}Z�is—éØPB™y‚§QH©Í<
+(§Š@?È¥� —4”™ všJLæ�­
+1ï@Îx<RÒ
+*=é¤TŸ‰¦‘LD.¹ö÷¤ÜéÉù¾•>)¥jbdFïƒéR“ÁÏÒ¢+ê´�ò¤©ª°\°=)F@QÑÃ}E;Ì�™ý(pA œÔsö‹õ ÌãþXþ´ÄKšBj/6SÈˆ~&�´ÇŸ•~”¬2L’x¦I"¨ùÛ�AQ•vûÒJ9ÆO©¤1�#Èq•¦�EÎ\–5.8¥Áô¤BñØQŠv
+.?¥4ëF=iØæ—‡aâ—}(©c°qE£4ÂÁGÒ’�¥sM4cgÚ•À3E’€ƒÚ“ð¤¢�‹ùQÅgÚ€Ÿj^)¹üýiE ÒŠJ9¢à:Šh¥§p°¤SHö§g=è De1—Ò§Ç§‡éUqX€©�zŒÔÄ
+iZwˆ<°P²AÒœ'‘8‘r=VœA¤æ€%IQþë§J“¯QULJÃ$ú÷ yÉ÷$'ØÑa–þ´UarÀâH¿§­Ô$òå}�0'w¦¬ˆÝ:SÏ9\Ð!	öÅ†’�Å¦ ºŽøÔmq
+ç2@
+MFíŽµ—ƒ¤hO½Wo:cóœ/¥MÀWs+àt2Œ´ÈÐ(À§ã56*âÒRÑŠ(¥çÒŠYˆ~éÝïz(© æ’Š(ìÑEWA-P@ëEÐ…£4QI€„ÒfŠ(zRfŠ(4šŠ)
+%PÐh¢€íÁõ¢Š(¢Š)”QE0
+J( R‘EÀ:ÑE(¢Š\ÑEQE¹£4Q@áJ(¢€ô´Q@M8t¢Šh¢Š)ˆ3KE†¤Ï4QLÍ!4Q@„Í-R%4œQEbu¢Š)Qžh¢€u ðh¢˜4ìÑEæ–Š)€Q´`ÑE1à©Æsšq8íEÀ�p4Q@4´QLLö¥ö¢Š/J4Q@Ð¤RtéE\w4QEÑŠ( "“nA¢Š&{RÑE!ãš@sÓŠ(¡€„SMT€œž3P929Bp=¨¢€cTû£ñ<Ó€Q@¢Š)qâ“v{QE À¤Î(¢�†h&Š)‰&”(¤6.isEgšN”Q@˜~lQNà'–=è	Î2h¢­.Æþù¤
+OñQE/—Ç$Òw¢ŠM v£�ÚŠ)ÒhQHbõ8£�J(¤À\ÑEŠAIE˜%S¤ÍPM'>´QHíIÚŠ(¤¢Š¿�Pš(¢�^)EPÑE¸¤ïŠ(¦!ih¢˜ÜsE„bš@4QMn)(¢¬L3ž)¥º€
+( Ho‘í�¥4Û®2‡ãE˜ÄòüõÎ�³çƒ#þtQHTÇ$Ÿ©¥ñ��´Q@ÅØp)4QH`)ØïE„&3Þ—¢Š’…ÅQ@ÿÙ
+
+endstream
+endobj
+11 0 obj<</Contents 13 0 R/Type/Page/Parent 55 0 R/Rotate 0/MediaBox[0 0 612 792]/CropBox[0 0 612 792]/Resources 12 0 R>>
+endobj
+12 0 obj<</Font<</TT2 67 0 R/TT4 68 0 R/TT6 69 0 R/TT9 78 0 R/TT11 50 0 R/TT13 51 0 R>>/XObject<</Im5 16 0 R/Im6 17 0 R/Im7 18 0 R/Im8 19 0 R/Im9 20 0 R/Im10 21 0 R/Im11 22 0 R/Im12 23 0 R/Im13 24 0 R/Im14 25 0 R/Im15 26 0 R/Im16 27 0 R/Im17 28 0 R/Im18 29 0 R/Im19 30 0 R/Im20 31 0 R/Im21 32 0 R/Im22 33 0 R/Im23 34 0 R/Im24 35 0 R/Im25 36 0 R/Im26 37 0 R/Im27 38 0 R/Im28 39 0 R/Im29 40 0 R/Im31 41 0 R>>/ProcSet[/PDF/Text/ImageB/ImageC]/ExtGState<</GS1 73 0 R>>>>
+endobj
+13 0 obj<</Length 29577/Filter/FlateDecode>>stream
+H‰”WM“Û6½óWàH¦,š¿ÀÜÖëlÊ©ÚÚŠ£*’(
+õaS’Mr<Q~ý¾î$xlWÈš ð�Æë~à§H«£Šj�•*­M+e´N+«tÑ¤…ºè�:G/þM«ý}ŠŒ6i^dMaT†?]fi]M£j4š&+˜©ÓÆèÌhµ=E/ßœJõúýŠ?oæÕ:z¹^J«õ.ÒÎ’QÆæ©.œëS”©=þ×[úyŠb•¬ßG
+On¦f˜ZWimynšeYÅ“Ñ25#þsÜ?�ª~$$V¬dÅ<­
+Y¿TI¨ßcõö²¹L*©Ò*~¸l?Ïû¤NM¬žŽÓAZ­Œní°Ç°§v:^Î2ÈC›öšü¹þ%Ü^�æn±g[ùi�xrøó*O
+vÓàA‘7iƒGÞÐÃ�fEšUyYæ¯B§yV×e©òÊ¤en­¶0aÒJÂ(±¯|ìó{¤Ë¬J�ñ"|_¶ÒÆ,ÓÂGWûèæ&Œný£z^ÛänÏ+FZ�,4#ÿí¸¹´Ã¡5F�wÜ*°4–	<x¼{€WWUTµZéÔV&§eosŒ;„ŒBéÌ£U"Ø¹MÍmo7‰CO`Ãº?¨ß¶‡îá1Y•i÷Ý ÚóƒzÕ^UR¦eü¯¾¿lùüÕó#¶ZÍ *~5]ºÕlneµ·	†ãŽˆÛ&Þñ¢‰ÏI�…ö	vVÆJÞ�	BBl‹[µ½œäc”)=Ïè©‰{-÷°™ÐäçKŸ€]ñço­s“=î|å!ÕnÅšÌ¿œGX'n'	AFg 3ðÐçV.;5uåâ::5P¢�jÛ&u|VÝ_Ý�Ç©KE¶‰ßØvVÔMÀ#ÝxkÖÅ­;'«df¯Ëø"ý'1´‘^K3ñ4uÃU�Ç½µ½:ŽâøÊ­…yYSÚûŠ¾¢4¶‘[!Æoâ©ÛN�{õB¡LÈ v(­�{N("}¯F”’­›¤v~Ò	‘´8^„än�Ž`×>J¿ŸÔ>:àtñ
+Ä’Ý_ÿàÜu4FApá:YÏÆÈ8i¹P�¥³O(27ë»É¥	�Äí¡#+‰£Ž�g?î“[á¤’Ø©G72ûï0Š]Õu^‹«ŽüZÈo™”…�{=´ Lb1|‘7Ì|+Ì¯˜ù–™¯ã)h?€So\‚b¾nê*¨üÚûPÞÉy+î“êÆW¬�<¸±…-tù6ÛÇîü0‚œ7£Cªz¤ßqR—ÏÝà]kŒÕaÍ¼q½v\ÇY@hJiß�#³€r‘ƒÏi¯¶®ÅG-ÙJ	}v½»ó¼Öw¹^jç<«›pí,�”,é1ÝlOH¥ãXVaéŒÎÐõnJ)=ðdç©Ý+·Äà¼<î@Ayå³Œµñá‹ÌhU:Ÿ`>•¿`ÚY‘•µqT{zCç‰Ú_U‹‘¬jìïôÑÓ×§‰K:Ë…÷Áµ·àºžý�ºGÌúãùn<¡ªs>v£ºC†î“s¦Ã*òêV÷ªÆ
+	Ñ”@]r
+%%YE+&=Ç	Ëå8ú%æ!·(¢äÑ™^«'V2*õ•›)$2ð}Óí0ü£ù–ßîÅ™Ö½flŠÓ#Á‚÷·BÁú‚r…v$ÿÌÆZ"�¾`WÊ¸{Áû•Ý±LPäÄ?4BÜŽ#µö‰p–~¯Ø®s,rŽE%±�«ô‚9Œpäñ•Ûê‘
+Š©½¢ötsJmZöãú�ÌËp’ƒÃ¥Á‘çkª´ýþ2=7¤ærÆåñ7˜ñeÒjŸµë[Zn\JJÂ€ßníê¾ö-±imŸs#ïÆM� HNmR—»Ã�É]N7µ:~t­¯œ@1ž‹–c7î¶.HNŸ�–O¨$tïÊÝ�ýÙx”C·³°”r�Â»�î
+àî:Ð³A0
+úÖöãÅ_!�þ´Ù2þèlŒT
+šø»§[ûkœS0©5nPR7jÐrEL#³5—Ä:þ»ã˜ijwª?~�™]<Hëâ¸Ké¨¹Š¸÷»z½u�¾?ŽG×vKŽDrWwåÕ@’›°¿›<8hèß³Yy^!=ßdaˆ¼ÖŽ„§„Ê(%Rÿu„T“jPQÐñßò �å'eŽP<ÈÀ(¯Ûó¶ó)Y³˜sæaäIßµo‡^}ó:w^tÝ™Iºƒ1ø4ÁŠWW¯ƒÎÂó”ÂwÛ)òÂ%:Mº•Oâ½—vçßA8(7N­{ÑÊ-ÚM£˜–Aêù;µ/òØòúÃ7góöC£WBœ0(¹o²/¬ü<o¸­[‘%éìY‹¿wóÛmêÜë>.P”Ñü8ò/jë¶¥*·py¡Ëé®Û†3>ïºž{W™Ê—4Î~>óv/X¾®tEë¦‰!:+ìüüèÞnºAèOw"Ðß#¢¿ÐUFûûïxaÖ<òï _[®?úš®-?p=ãÜ/)ìíUÈ˜èø�$‘K.¼+ùƒGKlJ©Šìf‰`º‘à‘4à6€Kž›>Èž6�Œ>9Îw¼ôY>æBaô7S¹'ÓFzmw‹‘aC±C-Ôeç>©Öù>üú°Ù$YÃèú}ôÓ:ÒŠþ†}TÚ´ÀÇ«nRc•1Mš¥“âÂ4tÑ.ú„©G•p·P9‹29ª]�œO{÷ƒ:G÷¾ý€_Ðx¯à@¡Õ“²ê¿ê÷?3õ[fÔÊ­µº/&®Ðà)£_�AøÈ˜.VJÐ]‹¦ÎÈ%×ï¹Ÿ£ËŽÞº6'ãÔÕ¼Ïç}L7<Ý[wýCD—h,!t¸žÅ7ÀÑ[?ÜK¤²&Í>›	DëJL€^@æ9×ÂaY9ÇX]§(6ÛH—Øƒ_d^W%9ª+Áàm£ ô´UM;#šü²Æ*°CÄi1rJãØÈ¡Ò�4ˆX[^›£ «‚ %üÀþñ[U,D°º ±lW´u •6¹oa{ôÚO¤%t�>µ|ˆÐàËƒ�sÅ-�Ù´)›·ZŠNÞ—FmOÑË7§Z½¾àô¿Æ@8m
+Ìü¢)—` ;˜b	‘È�1K0ø¬,—mÇ XÓ~ª%(F³p;'ªnÇ€:ùÂíØ¼k¬]€AíÉ\¼`–ìYÚÐÞ9U¦6_x.È©º\HÍéüó”	ZfQ¦�*ÄÀ.9Ì¢Ä½iáÁp
+dÍ[€A¡æœ^€A=£#m–øV¢°ë…çS–i–/<Ÿ²Z^	¡”K+a•q%\”k¤fáñ@Q¸.ò­’J¸È7»¼’p.-…�ùÅ¥‚¸´†z±µÀôp6$ÐÃÙ˜@gc=œ�¹ëá\H¨‡³1�ÎÆz8s×ÃÙ�@çbB=œ�Y²�Pgc=œ�	ôp6&ÐÃ¹˜Pgc=œ�	ôp6&ÐÃÙ˜@çbB=œ�	ôp6&ÐÃÙ˜jy%ôp.$ÔÃÙ˜@gc=œ�	ôp6Æ./…¡ÎÆ˜å¥0ÐÃ¹�PË´FRà#u¾Î†z8èálL ‡³1w=œ	õp6&ÐÃÙ˜@gcîz8èá\L¨‡³1KöêálÌÿ)¯cäº±+Š¢¹F¡ØÁ/ú¡‘x8±xþ�Auïn—m®«H%iI|àÇÙzé!›ô�Mz¨¦=d“²IÙ¤‡lÒC5í!›ô�MzÈæÜ/az¨¤=d“²IÙ¤‡l®ý¶‡lŽý¦‡JÚÃ�ëy›÷E™¤‡lÒC6é!›é¡’ö�MzÈ&=d3=d’ªiÙlÎÑ²IÙ¤‡lÒC5í!›ô�MzÈ&=d“ªiÙ¤‡lÒC6ç~	ÓC%í!›ô�MzÈ&=dsí§°=dsì§0=TÒ~üÊËËóË;ezÈ$=d“²IÙL•´‡lÒC6é!›é!“ôPM{ÈfsŽö�MzÈ&=d“ªiÙ¤‡lÒC6é!›ôPM{È&=d“²9÷K˜*iÙ¤‡lÒC6é!›k?…í!›c?…é¡’öð^¸ûÇóË;ezÈ$=d“²IÙL•´‡lÒC6é!›é!“ôPM{ÈfsŽö�MzÈ&=d“ªiÙ¤‡lÒC6é!›ôPM{È&=d“²9÷K˜*iÙ¤‡lÒC6é!›k?…í!›c?…é¡’ôðýz¼\·¹¼‡N¦‡n¦‡n¦‡n>{È$=t3=t3=tóÙC'ÓC6é¡›Í9ÒC7ÓC7ÓC7ÓC6é¡›é¡›é¡›é¡›é!›ôÐÍôÐÍôÐÍ¹_Âé!“ôÐÍôÐÍôÐÍôÐÍµŸÂôÐÍ±ŸÂé!“öð|Üß­—çÏE™¤‡lÒC6é!›é¡’ö�MzÈ&=d3=d’ªiÙlÎÑ²IÙ¤‡lÒC5í!›ô�MzÈ&=d“ªiÙ¤‡lÒC6ç~	ÓC%í!›ô�MzÈ&=dsí§°=dsì§0=TÒÞúùòòöºè!“ô�MzÈ&=d3=TÒ²IÙ¤‡l¦‡LÒC5í!›Í9ÚC6é!›ô�Mz¨¦=d“²IÙ¤‡lÒC5í!›ô�MzÈæÜ/az¨¤=d“²IÙ¤‡l®ý¶‡lŽý¦‡JÚÃû_¼ŸúÛ�E™¤‡lÒC6é!›é¡’ö�MzÈ&=d3=d’ªiÙlÎÑ²IÙ¤‡lÒC5í!›ô�MzÈ&=d“ªiÙ¤‡lÒC6ç~	ÓC%í!›ô�MzÈ&=dsí§°=dsì§0=TÒÞ#?ô··E™¤‡lÒC6é!›é¡’ö�MzÈ&=d3=d’ªiÙlÎÑ²IÙ¤‡lÒC5í!›ô�MzÈ&=d“ªiÙ¤‡lÒC6ç~	ÓC%í!›ô�MzÈ&=dsí§°=dsì§0=T’~œìºÍ»÷ÐÉôÐÍôÐÍôÐÍg™¤‡n¦‡n¦‡n>{èdzÈ&=t³9GzèfzèfzèfzÈ&=t3=t3=t3=t3=d“º™º™º9÷K8=d’º™º™º™º¹öS˜º9öS8=dÒÞOã~)ž_Þ)ÓC&é!›ô�MzÈfz¨¤=d“²IÙL™¤‡jÚC6›s´‡lÒC6é!›ôPM{È&=d“²IÙ¤‡jÚC6é!›ô�Í¹_ÂôPI{È&=d“²IÙ\û)lÙû)L•´‡÷¼/•Ï/ï”é!“ô�MzÈ&=d3=TÒ²IÙ¤‡l¦‡LÒC5í!›Í9ÚC6é!›ô�Mz¨¦=d“²IÙ¤‡lÒC5í!›ô�MzÈæÜ/az¨¤=d“²IÙ¤‡l®ý¶‡lŽý¦‡JÚÃßŸúóË;ezÈ$=d“²IÙL•´‡lÒC6é!›é!“ôPM{ÈfsŽö�MzÈ&=d“ªiÙ¤‡lÒC6é!›ôPM{È&=d“²9÷K˜*iÙ¤‡lÒC6é!›k?…í!›c?…é¡’öðÎÜýÐŸ?=d’²IÙ¤‡l¦‡JÚC6é!›ô�Íô�Iz¨¦=d³9G{È&=d“²IÕ´‡lÒC6é!›ô�Mz¨¦=d“²IÙœû%L•´‡lÒC6é!›ô�ÍµŸÂö�Í±ŸÂôPIzøñÍ½ÑÛ«÷ÐÉôÐÍôÐÍôÐÍg™¤‡n¦‡n¦‡n>{èdzÈ&=t³9GzèfzèfzèfzÈ&=t3=t3=t3=t3=d“º™º™º9÷K8=d’º™º™º™º¹öS˜º9öS8=dÒÞˆû¥x;=d’²IÙ¤‡l¦‡JÚC6é!›ô�Íô�Iz¨¦=d³9G{È&=d“²IÕ´‡lÒC6é!›ô�Mz¨¦=d“²IÙœû%L•´‡lÒC6é!›ô�ÍµŸÂö�Í±ŸÂôPI{xˆž·y.zÈ$=d“²IÙL•´‡lÒC6é!›é!“ôPM{ÈfsŽö�MzÈ&=d“ªiÙ¤‡lÒC6é!›ôPM{È&=d“²9÷K˜*iÙ¤‡lÒC6é!›k?…í!›c?…é¡’öðþàÝOýí\ô�IzÈ&=d“²™*iÙ¤‡lÒC6ÓC&é¡šö�Íæí!›ô�MzÈ&=TÓ²IÙ¤‡lÒC6é¡šö�MzÈ&=dsî—0=TÒ²IÙ¤‡lÒC6×~
+ÛC6Ç~
+ÓC%íáëãã¡?,zÈ$=d“²IÙL•´‡lÒC6é!›é!“ôPM{ÈfsŽö�MzÈ&=d“ªiÙ¤‡lÒC6é!›ôPM{È&=d“²9÷K˜*iÙ¤‡lÒC6é!›k?…í!›c?…é¡’ôðã~ÝæÍ{èdzèfzèfzèæ³‡LÒC7ÓC7ÓC7Ÿ=t2=d“ºÙœ#=t3=t3=t3=d“º™º™º™º™²IÝLÝLÝœû%œ2IÝLÝLÝLÝ\û)LÝû)œ2i)ž_Þ)ÓC&é!›ô�MzÈfz¨¤=d“²IÙL™¤‡jÚC6›s´‡lÒC6é!›ôPM{È&=d“²IÙ¤‡jÚC6é!›ô�Í¹_ÂôPI{È&=d“²IÙ\û)lÙû)L•´‡÷‹ô¼Íµè!“ô�MzÈ&=d3=TÒ²IÙ¤‡l¦‡LÒC5í!›Í9ÚC6é!›ô�Mz¨¦=d“²IÙ¤‡lÒC5í!›ô�MzÈæÜ/az¨¤=d“²IÙ¤‡l®ý¶‡lŽý¦‡JÚÃûå»Ÿú—WÊäPEj¨$1T’*™¢h	•$„JÒA%“A© ’FPÉâM ’PI¨$ýCÒü)Iý”$~JÒ>%I’–OIÂ§$ÝSr®/ÕCÑè)Ió”$yJR<%×zñÚ;%ÇzñR;�Ýëãã%x;µc’Ü±IïØ$xl¦xJš<6i›D�ÍT�I²§¦Ýc³9GËÇ&éc“ö±IüÔ´~l’?6é›�M
+¨¦	d“²IÙœû%L•´ƒlB6)!›¤�ÍµŸÂÆ�Í±ŸÂäPIzøñ’_·yz�LÝLÝLÝ|ö�Izèfzèfzèæ³‡N¦‡lÒC7›s¤‡n¦‡n¦‡n¦‡lÒC7ÓC7ÓC7ÓC7ÓC6é¡›é¡›é¡›s¿„ÓC&é¡›é¡›é¡›é¡›k?…é¡›c?…ÓC ÷÷å?zxÃýR¼�˜ë™ô�IzÈ&=d“²™*iÙ¤‡lÒC6ÓC&é¡šö�Íæí!›ô�MzÈ&=TÓ²IÙ¤‡lÒC6é¡šö�MzÈ&=dsî—0=TÒ²IÙ¤‡lÒC6×~
+ÛC6Ç~
+ÓÃÿN~¡—Ÿ�—û_/�×ëû?¾}4äõ>Íõóñöü5C³u]�Ï?^”û/~<¯ï¿}{}{>>žÖû}ýüþ÷o¯Ï—ÇÇ¡®ãñ¼ÿÔñãñ~ÿæõãqž¿§éùëkºÿ†ß¾ýõ/ßÿùíÎÈý9ýõ5ÿñ³ýíÿ_Zï¯êOÝŸ__Z�L¤ÝL¤ÝL¤Ý|FšI"íf"íf"íæ3ÒN&Òli7›s$Òn&Òn&Òn&Òli7i7i7i7i6‰´›‰4›®ÚûŸ¯+²jL²jl²jl²jlfÕ”tÕØdÕØdÕØÌª1Éª©éª±Ùœ£«Æ&«Æ&«Æ&«¦¦«Æ&«Æ&«Æ&«Æ&«¦¦«Æ&«¦¦«ööçÿtÊª1Éª±Éª±Éªý›óº×m½Â(Üû*T§ øó‘âwH‘¤H1˜*IŠiæö³Ik/É°fmM3ö±‰¤©wÉÚäªYÂUÓ«¦
+VM›\5M°jÖpÕ´©œWM¬š6X5m°jÖpÕ´ÁªiƒUÓ«¦
+VÍ®š6X5k¸jË°·0×Âªi‚UÓ«¦
+VM›\5K¸jÚ`Õ´Áªi“«¦	VÍ®š6•óàªiƒUÓ«¦
+VÍ®š6X5m°jÚ`Õ´ÁªYÃUÓ«f
+Wíø—ql•¿@5ÁªiƒUÓ«¦M®š%\5m°jÚ`Õ´ÉUÓ«f
+WM›ÊypÕ´ÁªiƒUÓ«f
+WM¬š6X5m°jÚ`Õ¬áªiƒU³†«÷iü×*�j‚UÓ«¦
+VM›\5K¸jÚ`Õ´Áªi“«¦	VÍ®š6•óàªiƒUÓ«¦
+VÍ®š6X5m°jÚ`Õ´ÁªYÃUÓ«f
+Víºãf÷«æI®š7¹jÞäªys_5M°jÞäªy“«æÍ}Õ<ÉUÓ«æMå<°jÞäªy“«æM®š6X5orÕ¼ÉUó&WÍ›\5m°jÞäªiÃUÛ†)N­õÂªi‚UÓ«¦
+VM›\5K¸jÚ`Õ´Áªi“«¦	VÍ®š6•óàªiƒUÓ«¦
+VÍ®š6X5m°jÚ`Õ´ÁªYÃUÓ«f
+W­
+sÇu*¬š&X5m°jÚ`Õ´ÉU³„«¦
+VM¬š6¹jš`Õ¬áªiS9®š6X5m°jÚ`Õ¬áªiƒUÓ«¦
+VM¬š5\5m°jÆŒûãªÅÛn³ü0ÓôÂ¬yƒ]óÃæ–Í£œ6m¸maÜ<Âºy”óæ
+öM#œG¥sáÄy„�ó#çVN#ÎœGØ9�0taé<ÂÔiÄ­óc÷
+úóÇxŠ¿ü1¾ø)¾ø÷%^©M—ß.ûåO—Ÿ/ÿø˜Æ>Œq/îã0í—ÿ~ó1Å³÷amç�wÜ©û>,íÇ5‰¼m¿üýcZÛpÞ’Ó°]þó1mëp�o7ÿÚÏ“[Ž‡Œ·'˜†½òøØyÞlí„Ëp=^l?¾Y¯ç­óqÇc9o¿�xòãûvÐ5Žc�Û.^.ÞçÛùBãíSCb¼B<÷Ï¹‡Ž÷õòùÕ±Ž-ö¯Ç“ˆó�{½½7·ÛQ�Ž»nþò=~-qÎËy™â'‡Þ�ƒ›—óâµèÄí³ÙvÛ£ëí]¹ž—`êç…ŽKÒÎóŠ7n¡küoœ£`qrÓí»eØ·óÏWîç«\ãý}ÀÈÑºŸßÎç›®Ÿt<¯î4¿®ãHÛçããçu¾5æ<Öív¬q[[öa»]Åm8®tLÜr»óí»v{‚ã¼â±ñÇÃÇßþpùßGÉ8ÅàÄm÷ã«_ÿùµÔqøãòc.âŽ??¶Ï{wü¦î½g¨­™Æéjo–µGk†Ú£k†Ú£~µ6Ç
+ðj�–µGk†Ú£ë=ÔÞô3ÔµSš§3ÔµSŠ,Çe¨�R¼åÏ^—îÖˆ{¯=Ú³×ÅøÞk�æìµG-{íÑ–½öhÏ^k}ïµGsöÚ£–½öh«åÊúRFuÊK58È¾—Ð‘×ê¯i]oKY;¼ëm)k‡×ß˜Ê(m}*�OI¿;•ã‘l¢õÛ©œ¿'bE´0{%¶Ö0¶Þ ¶!¶!¶elµal=Bl=Bl=ÊØzƒØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz´Õ‡ò!¶õúR2¶!¶!¶!¶õ7¦’±õhSù"¶ÏÆÄvÆ¸ök¥µ’0µš ´Ú ´Ú ³Údf-aeµAdµAcµÉÄj‚ÂZÃÀjƒ¾jƒ¼jƒºjƒ¸ZÃ¶jƒ´jƒ²jƒ°jƒ®ZÃ¬jƒªjƒ¨j³•÷ð!©Úôò 2¨Ú §Ú §Ú ¦Úôú"²¥Ú,¿¿ˆ/JúDLHÇaŠk¾Î•’ZÃ”zƒ–z„˜z„šz”9Õ†=õAõEõ(“ê
+šª£êªê²êºêÂªËêÒêÚêâêêªóêúêëÑVÊ‡ÄzÔëKÉÈz„Êz„Ìz„ÎzÔß˜J–Ö£ELå‹Ö>Ûm¦=L+ÄVÄ¶`2¶”±- ŒmÝcë
+b[@ÛÊØÐ=¶“±õ±- Œmel(c[@[�ÛÊØPÆ¶€2¶”±õ±- Œmelh«%c[@½¾”ˆmel(c[@ÛêoL%b[@‹˜ÊïcûÅ˜ØnÃo‘u«ÄÖÆÖÄÖ#ÄÖ#ÄÖ£Œ­6Œ­Gˆ­Gˆ­G[o[�[�[�[�[�[�[�[�[�[�[�[�[�[�¶úP>ÄÖ£^_JÆÖ#ÄÖ#ÄÖ#ÄÖ£þÆT2¶-b*_ÄöÙ˜Ø¶aiãØæJl­al½Al=Bl=Bl=ÊØjÃØz„Øz„Øz”±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õh«åCl=êõ¥dl=Bl=Bl=Bl=êoL%cëÑ"¦òElŸ�‰í<´¸ö­Ubk
+cë
+bëbëbëQÆVÆÖ#ÄÖ#ÄÖ£Œ­7ˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­G[}(bëQ¯/%cëbëbëbëQc*[�1•/bûlLlÇa�Kß¶Jl­al½Al=Bl=Bl=ÊØjÃØz„Øz„Øz”±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õh«åCl=êõ¥dl=Bl=Bl=Bl=êoL%cëÑ"¦òElŸ�ˆíºëf/ÄVÄ¶`2¶”±- ŒmÝcë
+b[@ÛÊØÐ=¶“±õ±- Œmel(c[@[�ÛÊØPÆ¶€2¶”±õ±- Œmelh«%c[@½¾”ˆmel(c[@ÛêoL%b[@‹˜ÊïcûÅ˜ØnÃo‘Ö+±µ†±õ±õ±õ±õ(c«
+cëbëbëQÆÖÄV#ÆÖ#ÄÖ#ÄÖ#ÄÖ#ÄV#ÆÖ#ÄÖ#ÄÖ#ÄÖ#ÄV#ÆÖ#ÄÖ#ÄÖ£­>”±õ¨×—’±õ±õ±õ±õ¨¿1•Œ­G‹˜Ê±}6&¶m¸¶q\§Jl­al½Al=Bl=Bl=ÊØjÃØz„Øz„Øz”±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õh«åCl=êõ¥dl=Bl=Bl=Bl=êoL%cëÑ"¦òElŸ�‰í<ìqí×¥[k[o[�[�[�2¶Ú0¶!¶!¶el½Al5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=ÚêCù[�z})[�[�[�[�úSÉØz´ˆ©|Ûgcb;=.ýºVbk
+cë
+bëbëbëQÆVÆÖ#ÄÖ#ÄÖ£Œ­7ˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­G[}(bëQ¯/%cëbëbëbëQc*[�1•/bûlDlÛ>ô}Û\ˆ­6ˆmÁdl(c[@ÛºÇÖÄ¶€2¶”±- {l&cëb[@ÛÊØPÆ¶€2¶!¶”±- Œmel(cëb[@ÛÊØÐVJÆ¶€z})ÛÊØPÆ¶€2¶Ôß˜JÄ¶€1•ßÇö‹1±½c¼EÚR‰­5Œ­7ˆ­Gˆ­Gˆ­G[m[�[�[�2¶Þ ¶1¶!¶!¶!¶!¶1¶!¶!¶!¶!¶1¶!¶!¶mõ¡|ˆ­G½¾”Œ­Gˆ­Gˆ­Gˆ­Gý�©dl=ZÄT¾ˆí³1±]‡¸ãÇ¶Vbk
+cë
+bëbëbëQÆVÆÖ#ÄÖ#ÄÖ£Œ­7ˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­G[}(bëQ¯/%cëbëbëbëQc*[�1•/bûlLl—aŽkß®•ØZÃØzƒØz„Øz„Øz”±Õ†±õ±õ±õ(cûöë¦·�ó£ðž¿BK)€'óý±lšnºk+ ‹¢‹@pì¢qÚ:)Šüû>ï­÷ˆ6™ó]ve1âEr†3÷Q¼Al5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=šóCù"¶mù¥dl=Bl=Bl=Bl=Ú^1•Œ­Gƒ˜Ê±½4&¶ñ9ãÔ�[&¶Ö0¶Þ ¶!¶!¶ÕØjÃØz„Øz„ØzTcë
+b«cëbëbëbëb«cëbëbëbëb«cëbëbëÑœÊ±õhË/%cëbëbëbëÑöŠ©dl=ÄTÞˆí¥±¶fXÛvê±Õ±M˜Ûª±M ÛzŽ­7ˆmÕØ&P�m=Ç6ajl=Bl¨Æ6�jl¨Æ6�jl=Bl¨Æ6�jl¨Æ6�jl=Bl¨Æ6�jlhÎ%c›@[~)Ûª±M Ûª±M íS‰Ø&Ð ¦òzl?3&¶K3Æ-2õ™ØZÃØzƒØz„Øz„ØzTc«
+cëbëbëQ�­7ˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gs~(_ÄÖ£-¿”Œ­Gˆ­Gˆ­Gˆ­GÛ+¦’±õhSy#¶—ÆÄvj¦1Ì˜‰­5Œ­7ˆ­Gˆ­Gˆ­G5¶Ú0¶!¶!¶ÕØzƒØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz4ç‡òEl=ÚòKÉØz„Øz„Øz„Øz´½b*[�1•7b{iLl‡fŽs?v™ØZÃØzƒØz„Øz„ØzTc«
+cëbëbëQ�­7ˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gs~(_ÄÖ£-¿”Œ­Gˆ­Gˆ­Gˆ­GÛ+¦’±õhSy#¶—ÆÄ6¾°8õã�‰­5Œ­7ˆ­Gˆ­Gˆ­G5¶Ú0¶!¶!¶ÕØzƒØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz4ç‡òEl=ÚòKÉØz„Øz„Øz„Øz´½b*[�1•7b{iDlû­YÖ0S"¶Ú ¶	Sc›@5¶	Tc›@Ï±õ±M Ûª±M çØ&L�­GˆmÕØ&P�mÕØ&P�­GˆmÕØ&P�mÕØ&P�­GˆmÕØ&P�mÍù¡dlhË/%b›@5¶	Tc›@5¶	´½b*ÛÄT^�ígÆÄviÖ¸EÆ9[k[o[�[�[�jlµal=Bl=Bl=ª±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õhÎå‹Øz´å—’±õ±õ±õ±õh{ÅT2¶
+b*oÄöÒ˜ØNÍ6†Y3±µ†±õ±õ±õ±õ¨ÆVÆÖ#ÄÖ#ÄÖ£[o[�[�[�[�[�[�[�[�[�[�[�[�[�[�æüP¾ˆ­G[~)[�[�[�[�¶WL%cëÑ ¦òFl/ÍbÛ6ëø"¶cÓÆ¹Ÿ>‘áAk%aj5AiµAhµAgµ©™µ„•Õ‘Õ�Õ¦&VÖVôUäUÔUÄÕ¶U¤U”U„UtÕfUTUDU›9½‡/’ªÍ–DUôTäTÔT›-¿ˆl©6Ã¯/b-éÙL×q<ÈþFñ¬¸N†!žq÷áÔMkSÎóÐLÇE¾ï8¯û¼,ñÏ0•ß=�öùŒã#
+ýÝ§òý¼¯ÃÿLûÇéú­ü¶œÛòq§mAÿüÕÝ�åãÆUºåù§�ï¾ü¿Aíy8Ê;­ñAÿé8¦[ÿt^ŽŠ™Ž[-�Æf�Ž{-�âL.écZ›ù¼•©î²ÇT¶zÈSŒõ8e�)Öz8$aÖ¦?OˆGe®Ë1§PìõyD(îµóŠ$Pü©{ž‘Zšõ¼#	›}�ÊjÉó«=OÙ¯)f{ZŽz'Pìvêù1I]ö*£=d¿¡Xí~úµ»ïÿÔ-Wî¾åÚ;a%‡ø»>þš‡ÌJ&P]Éª+™@u%¨®¤GXÉª+™@u%èy%¦®¤GXÉª+™@u%¨®dÕ•L º’Õ•L˜º’	TW2�ö•L<¿®¤GXÉª+yÝXÉÏ�ZÉøƒt4¥VÒ#¬¤GXI�°’a%5âJz„•ô+éQ]Io°’q%=ÂJz„•ô+éVÒ#¬¤FXIo°’a%=:VÒ?+©WÒ#¬äUtk%/‘ZÉ©Yú@Kj%=ÂJz„•ô+éVR#®¤GXI�°’Õ•ô+©WÒ#¬¤GXI�°’a%=ÂJj„•ô+éVÒ£c%ýó±’q%=ÂJ^E·Vò©•šµ
+´¥VÒ#¬¤GXI�°’a%5âJz„•ô+éQ]Io°’q%=ÂJz„•ô+éVÒ#¬¤FXIo°’a%=:VÒ?+©WÒ#¬äUtk%/‘ZÉ®YCM]j%=ÂJz„•ô+éVR#®¤GXI�°’Õ•ô+©WÒ#¬¤GXI�°’a%=ÂJj„•ô+éVÒ£c%ýó±’q%=ÂJ^E·Vò™•ì·f›õ™•L º’	TW2�êJ&P]I�°’	TW2�êJ&ÐóJ&L]I�°’	TW2�êJ&P]Éª+™@u%=ª+™0u%¨®dí+™x~]I�°’	TWò:º±’Ÿ!µ’kÓŽ�ÆÔJz„•ô+éVÒ#¬¤F\I�°’a%=ª+é
+VR#®¤GXI�°’a%=ÂJz„•Ô+é
+VÒ#¬¤GÇJúçc%5âJz„•¼Šn­ä%R+97]ß¶ã–ZI�°’a%=ÂJz„•Ôˆ+éVÒ#¬¤Gu%½ÁJjÄ•ô+éVÒ#¬¤GXI�°’a%½ÁJz„•ôèXIÿ|¬¤F\I�°’WÑ­•¼D_\Év}¹’c¦�>™ùšáHjƒ�Ô©
+R¤5ÜGm0�Ú`µ©ã¨	¶ÑN£6XFm0ŒÚ`µÁ,jƒU´£¨	6QL¢6Ç"ê§c­ájƒ9¼f¸†»Á^˜í08•'Åï‡¡iû»§nZ›rŸ
+MüyY.ïõøZçó®”ûd*¿{:•ÝŒ÷îÆ®û»N]»6Ã¼_KüÓöM?îÇº?šr“,]yÊÓiÛße™šµÀ®m¦uØÏûãåmÇýqW¬|ÒñÓóãå›Úç{<>ë||Ö!f¿™çòFe¦yßªáˆq<�˜�?"qzqDq2ú¶üPNÃ8ï›¿„¶ýyù>:}óxúúñ±‹Ãº{üþ4GR¦ãœ÷'Nñ_â5Ö8}OùpjïÞ�ÞÄ‘´qFŸN¹ÿíûï>¾{xÓE&îß>üõñ÷å×ý4måûì¶9Ô·§¢i;øãÃÚLñÔöþ_qnîÿýÐÅ—yÿö§Ÿç).˜ùîM9qqÆ‚ïoØOõ
+Þ,Mwÿîü~]™À‘ïw|Âå¿yzx|ÿôöŸ??”W½ÿ:>oÒý·oŒŸ†û_ö×‰ó{ww|‘ó¸Ô7Þ?xù©�ÿøŸxÅoÿñô÷ò¶û¿ýøîî›ïŽŸùi™ß=žÚý~|wêc6ã"éã»™û»øbºýSŽwßžú¹/?•§Äµö!OåK/ÏmËóé÷ñÍ
+å‚ú>^mˆ«~±u}ù¡�Ó·�;èÊ¥^÷ûÄ+�Çë•+ý}<a(¿é»ýü°?Ùwåe‹�+ºß}{¼a|‘wqÅÅÇÒ�k¹úy-+®³˜ê¸:ûeÞo i×~]÷«~éîúm¿3âj^¶ýu·ÝÇ�°uå¤íX>F_þ™÷GûÁDžãÁ~	?�Îuˆ±Û)~Ý•—Ë{–—šÊ•\·åqßçlÛo«òûøpëñzñ©Öýª.�Ê½·Ÿ¿<w-3NßZŽ`Ûoú)¶'n;îƒå8Ôý^z:}ÿUœšnnãl—;4~ÿ®íã÷?=QñýÄ3·ý˜JJÖ8´µ-_ç>Ñÿ¿Ÿç³ñþâ˜âd,ë~0ñ¸Liœ“%Ä’~ö6zyÕ—#\ŽÓ¾ŸÕÿ²_>=rãF¿Ï§ÐQ½@ÏŠ¤DJ¹m6²Œ ¶ŸÇÖãÝži¬g|Ø�ï�÷ª(©¦Û—¹Èˆ›#½Y$ë÷*¢žâ:Æ"¬ÁÕixíÅi’/p^2]ÍbDˆ¥"Â„ÛØËò$74j×Ðó¦ÊÅƒËÑ¢1Åzøò 4ÀXg?D¹µ²• —äŸ�8;`¥ î8ðEØ#Únw¯2îzì
+÷„—¾ÓÐ3ƒ�üÛÈwKþæaÿŸå'vƒ$�k�2žvä©?›Îÿ÷äöd)8à¨LÆ¼¼pÉK§ŸìŸ±-K-é‘:áè›O;Â¹o? ðJ{øðÀcû°Ãµn›×ÇßT2Ô¾Fdñ�Bôå'¡plïw¸zíÇž0Ùø�‡¬Œ½ü;uZXG9Ò^6¥ç9AR±Á é¯W¡ùgs±69ÃmÞëKûå­9‚>¾»zøj&&ñŠ4•ùi&‚8ùÙ%]…ºØµö#½À+XšÜÂfàx´7|0Î£OGÍ
+üÖ¤v‹ÆeÀÒð¸ƒ¯>)æå#¨‰ò8øûöÏæ§Ãî)¶G¿»yü¤Ãûæ…¾r/ÿgÄ?;§Øõ¤ç‡~J¼5Y³äô�+û¾I°w8‚p 8~ûú6ÞxóCsÅRÌ
+Š�Þk„ýBÃó“
+ãÞ­«£\Ð'Zx|K”£®Ã¬¨¡û]4g<»uØM<ØUÕn[�¨˜uýy4ÉU¬¢:˜Ö¡~LE:‹'3TÂ6¿¡'h^4ßßìÐS1hÊXÛ³[AÙLaþ&i–äwÇNTÞ@fdó!±êï¡f²Q©Oµ_Yý©Ñê€QÁüñ'SÓT?³}øF—N“Ý³˜ŸôPa\ëI¿ÔV�‚»AûQjd@»”XaÿzÔjÓ·ïwû»Ì&f_ÔÖ?ßÈ{�÷¿v{°³¶6¶'Á‘A]‰Q»Iš�¥%	�ò2
+6�u\ûAÛ(¸¬�ÃÈ†“
+‚®|z¦{„�äbDuœ—Ý-hÙ½þí
+˜X—ð?ZÄ	›ÐI©‰¨k½¦«�|ó<z/vpŽÞþÌ·Ì> CìºIø‰±¡‘Î‚Á±†fæ‡´ÖÛZÔ_²¾Ží[ýç5vl›î¤zÃŒØXÆ®C@À¢6ÙëLü©èý¼CJK{»Ü´ýç3ÿ˜�2]Ú{E!g4¢éˆ¢ì.íh¬míáãñs=ŸêDAãÔÞÞ‰å"è8¬ÓªNƒª_½«0¿ýðþ~¢3l;rp„ü_$
+
+KêÂù$Ö“›&]Úë›‡ßyæJÛÜÜ¿¯â.¦|&O3Ây-8*­Â’°w§Â±èäÿþJf\ÚëñýÉu ›-*+]¿6¼¨£¼¸¥H3Ò©7¥çà»r�Ã8iîkÅ[Z²ž¶Mo1F,,£¶9úéæÛ`9ä;DA7Fv2‘Ãú8?½BÏ�y8 ©?­aÙþ£ð¯L~ó�ã�äÛ1¶¯v!cwqºXîoP@…vIÉ5ƒØiL®HE”rç4HE�Äë«O’6U*9ÕŽ-ïÿ<’¾M_}'
+5ÝÜª¤wãËíÖ4i»ˆkÑU©Øä8š­£ÿhãu§¤xE�}–Z5Œë„c,´ßè5²*1�0?žz%²–ûÄö�ÊQ”0‘“î¤ÔFv
+2á,Ÿ
+’xJR9=Ïú¯˜�¸nØµÜ¤Ìu%ñû‹§íà:FšŽˆNuàãÂÖc¯/ï—·5R}J·SÒ¶(p9sl
+ÌÆ
+ÎW›ÏÖXHtõ™DBÖx¯òÀ-äËÑDêes&y¶×‡s¤ªÓg)H{7Lv½57r8Ê£“)U™>c ÅH²•’f0ÖÓÛ§y0çv”4ÔARƒU‡¹È¦RƒŽŽ§¾†ÓÞ4T}:d¹
+UVGKÌy¬¬Ê:—'Ó<±“ßéäþ`CêÛ¼OOÔÝV#Ç6.Üh¹‡2BuÌêdFrLæ˜:â*õrÖ§iÐfC•u4G�‡úÅ*œ'c§*ðÏ^Lç¹‘
+ÄéÍŽk±ŠÐJë—hTÑ8ÂâˆyTÓÙ�Še	CueÃ¤æKDA�qu6k£Š»Y£Ò‘"&]èÛããhŸÚ&IÔ¯M7Ëµž0ëNãª¥XÍEYÙž~‹ä¶Åý ~|fÖ#Œ˜Ô±i\b›àaZƒsÞ>¶uðHJmÓÏ¶/$E4Ìo*jYñ³ ^‘º…v¢ËsrÊ±Ô
+j8™Åõþôåñx¼;~yhèWg˜§§ŠÙöauj©ú¼/˜
+ÈÇ‰áâµPÃçÍ#Æ©Žiþ$öSMWìÃ.®ëîf›ûáÝ-3Úê½^ýI	kðøÇchÕHÎsìQØOæ8/ÉŒkÐ93Ñ‚À•1æÝbÖžÇa.BlÌ½ Ö'öJƒÂž�9°jíˆË‹s}*Ø©IëÓ°s4|õñ¹húÔD££ž
+¦~æ¹`úÔƒÝ|vfÕv=¬>e°Å†²ˆDõ™QìU™(ªãÃ‰8å�!×q|–÷ÃÀÊq'ÖèlŒ+ Ã åét¸Dë„5A,”F/ãù¸c‰�q�}ßŠ_Ÿ$ËÑ€hb'DÖ=yznª;fNšÁÚvB¿¥¬NqõÕ¦=ý¯§4KJuÉ)T×9�ÅÁ®)[ÇšRŒÃhÆ}ä?ëûw}}Î‡‰/­):'±£kŠ×±nÁúõ:–ÙKJçùtâÝçœ¯Ó«�{Òí f´Z.ø4œ·tK�BP‹ÖË–SûÇÕPhšÛZeëÑÔóxãÍÍýUÄ�ÇŸïo�±_ƒè'R½¾ÿ6»çqæqÓ¼øTkP¨{™À2ëž™úé¸/5«sô:Öƒ²(‚ýÞÕƒ‡|×ÇY|@kÓEm¥“YCL´M�îšO…äüŠ5[Ó^ºÐ¡ç‰˜ÃØL4dÕà¯S†À¥²×•Aû“PðDG &˜ 9	ØNf.hÔÈCÀoK,<¤8ëÇÿç,YÀ‡(C
+J´2Œ�¹tÞµÓüËãŸç×dw»ëxÍÜµú{‡Ô°!äNîåWèÆëi˜¦)Hv2Ð„òüîîêÇ_î�º¿±óç¢@l@´Iƒ™B2
+›D¸É(®S¿I„l$ˆâ&¬Æ°qI¨}=×”7‰ÐÚN[—±³aë’àŠcÚº$”<¤a·ˆP^:äa,›D›Ö‚+;1ÛæT¦­ûƒ+V†­çm`æIH[D¨üÐ¶«úHÄ¸iWûáºO[7HêbÇ¦`‹Õ[®ùª÷vÚ4½õ>lÝ§v&mÝ§!_P"�ÏÍ%2wR"·]>’$nÝ&àFJä¶ée-‘Û¦7^P#	ÖÍ5>`{�27×H‹Lðx„¨ß‚L¿Æ Ó/2Èô‹2ý¢™n�E¦_d�édúE+2ýƒL·È"Ó/Ú´‹L¿È Ó/2Èô‹2Ý"‹L¿È Ó/2Èô‹2ý"ƒL·È"Ó/2Èô‹2ý¢|A‰4Ètk,2ý"ƒL¿È Ó/2Èô‹Æj¤E¦_/¨‘™n�Eæp]pGÐên@¦_c�édúE™~ÑŠL·Æ"Ó/2Èô‹2ý¢™~�A¦[d‘émZ‹E¦_d�édúE™n‘E¦_d�édúE™~‘A¦[d‘édúE™~Q¾ Ddº5™~‘A¦_d�édúEã5Ò"Ó/ŠÔHƒL·Æ"3]�=De2ýƒL¿È Ó/2Èô‹Vdº5™~‘A¦_d�é­Èôk2Ý"‹L¿hÓZ,2ý"ƒL¿È Ó/2Èt‹,2ý"ƒL¿È Ó/2Èô‹2Ý"‹L¿È Ó/2Èô‹ò%Ò Ó­±Èô‹2ý"ƒL¿È Ó//¨‘™~Q¼ Fdº5™üK×õßnM
+2ýƒL¿È Ó/2Èô‹Vdº5™~‘A¦_d�é­Èôk2Ý"‹L¿hÓZ,2ý"ƒL¿È Ó/2Èt‹,2ý"ƒL¿È Ó/2Èô‹2Ý"‹L¿È Ó/2Èô‹ò%Ò Ó­±Èô‹2ý"ƒL¿È Ó//¨‘™~Q¼ Fdº5™¨|ø¯ÿvkj�é×dúE™~‘A¦_´"Ó­±Èô‹2ý"ƒL¿hE¦_c�éYdúE›Öb‘édúE™~‘A¦[d‘éý—ó:Frã¼¢(œÏ*;@az=?Wâ(pb;ðþÿ iÜ#•YsîS¤’øQóšÀ=j$Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó£k0‘H¦6L¦GH¦GH¦GH¦Gk°‘L¦GÇ`#‘Lm�ÌÏu»¯�V‘ÌÂ$™J2”dè•Lo�Ì%™J2ôJfa’L��ÌU· ™J2”d(ÉôÉ,P’Y $³@If�’L��Ì%™J2t
+&2ÉôÉ,P’Y $³@If�Ö`#‘Ìƒ�L2½a2¯ÛþS»Ÿß›dzƒdz„dz„dz”djÃdz„dz„dz”dzƒdjÄdzTÝÂdz„dz„dz„djÄdz„dz„dz„dz„djÄdz„dz„dzt
+&ÉÔ†ÉôÉôÉôÉôh
+6’Éôèl$’©
+“¹ùy¿?Þ›dzƒdz„dz„dz”djÃdz„dz„dz”dzƒdjÄdzTÝÂdz„dz„dz„djÄdz„dz„dz„dz„djÄdz„dz„dzt
+&ÉÔ†ÉôÉôÉôÉôh
+6’Éôèl$’©
+“¹ÿ›ûá?>šdzƒdz„dz„dz”djÃdz„dz„dz”dzƒdjÄdzTÝÂdz„dz„dz„djÄdz„dz„dz„dz„djÄdz„dz„dzt
+&ÉÔ†ÉôÉôÉôÉôh
+6’Éôèl$’©
+“¹°ŸýãÑ$Ó$Ó#$Ó#$Ó£$S&Ó#$Ó#$Ó£$Ó$S#&Ó£ê&Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó£k0‘H¦6L¦GH¦GH¦GH¦Gk°‘L¦GÇ`#‘Lm�Ìçuk£Ï"™…I2”d(É,Ð+™Þ ™J2”dè•ÌÂ$™!™ªnA2”d(É,P’é’Y $³@If�’Ì%™!™J2”dèLd’é
+’Y $³@If�’Ì­ÁF"™:™dzÃdîG²¿#ç×¯¦H¦7H¦GH¦GH¦GI¦6L¦GH¦GH¦GI¦7H¦FL¦GÕ-L¦GH¦GH¦GH¦FL¦GH¦GH¦GH¦GH¦FL¦GH¦GH¦G×`"‘Lm˜L��L��L��L�Ö`#™L�ŽÁF"™Ú0™û9îwÓóëWS$Ó$Ó#$Ó#$Ó£$S&Ó#$Ó#$Ó£$Ó$S#&Ó£ê&Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó£k0‘H¦6L¦GH¦GH¦GH¦Gk°‘L¦GÇ`#‘Lm˜ÌŸÿüúÕÉôÉôÉôÉô(ÉÔ†ÉôÉôÉô(ÉôÉÔˆÉô¨º…ÉôÉôÉôÉÔˆÉôÉôÉôÉôÉÔˆÉôÉôÉôèL$’©
+“é’é’é’éÑl$“éÑ1ØH$S&s‡p?ûó{“Lo�L��L��L�’Lm˜L��L��L�’Lo�L�˜L�ª[˜L��L��L��L�˜L��L��L��L��L�˜L��L��L�®ÁD"™Ú0™!™!™!™­ÁF2™ƒ�D2µA2ŸÊ[=Þ‹d&É,P’Y $³@¯dzƒd(É,P’Y W2“dz„d¨ºÉ,P’Y $³@I¦GHf�’Ì%™J2”dz„d(É,P’Y k0‘I¦7Hf�’Ì%™J2´‰dèld’é
+“¹?û;ò8šdzƒdz„dz„dz”djÃdz„dz„dz”dzƒdjÄdzTÝÂdz„dz„dz„djÄdz„dz„dz„dz„djÄdz„dz„dzt
+&ÉÔ†ÉôÉôÉôÉôh
+6’Éôèl$’©
+“¹?OçFg“Lo�L��L��L�’Lm˜L��L��L�’Lo�L�˜L�ª[˜L��L��L��L�˜L��L��L��L��L�˜L��L��L�®ÁD"™Ú0™!™!™!™­ÁF2™ƒ�D2µa2÷‡p?üÇÕ$Ó$Ó#$Ó#$Ó£$S&Ó#$Ó#$Ó£$Ó$S#&Ó£ê&Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó#$Ó#$S#&Ó#$Ó#$Ó£k0‘H¦6L¦GH¦GH¦GH¦Gk°‘L¦GÇ`#‘Lm˜Ì÷ÛóÙŸM2½A2=B2=B2=J2µa2=B2=B2=J2½A25b2=ªna2=B2=B2=B25b2=B2=B2=B2=B25b2=B2=B2=º‰djÃdz„dz„dz„dz´Édzt6ÉÔÉ|~Ü×F�"™…I2”d(É,Ð+™Þ ™J2”dè•ÌÂ$™!™ªnA2”d(É,P’é’Y $³@If�’Ì%™!™J2”dèLd’é
+’Y $³@If�’Ì­ÁF"™:™dzÃdþüŽœ_¿š"™Þ ™!™!™%™Ú0™!™!™%™Þ ™1™U·0™!™!™!™1™!™!™!™!™1™!™!™]ƒ‰D2µa2=B2=B2=B2=Zƒ�d2=:‰djÃdî/Ö¹Ñj’é
+’é’é’éQ’©
+“é’é’éQ’é
+’©“éQu“é’é’é’©“é’é’é’é’©“é’é’éÑ5˜H$S&Ó#$Ó#$Ó#$Ó£5ØH&Ó£c°‘H¦6Læþ6î‡ÿõ›)Š©	‚©
+z©
+r©Mji	c©
+Z©
+R©MJ©	Bi
+;©Ms+©
+"©
+©
+i
+©
+©
+ú¨
+ò¨
+êh
+ã¨
+Ú¨
+Ò¨ÍÕ/!Âh	»¨
+²¨
+ª¨
+¢¨Íê§�IÔæè§A´„=|¿=¿�£	¢7(¢GH¢Gh¢G‰¢6¬¢GÈ¢Gè¢G	£7(£FL£GÕ-Œ£G¨£GÈ£Gè£F¤G(¤GH¤Gh¤Gˆ¤F¬¤GÈ¤Gè¤G×`"QJm˜J�ÐJ�K�PK�Ö`#ÙK�ŽÁF¢˜Ú ™ÏïýÚè,’Y˜$³@If�’Ì½’é
+’Y $³@If�^É,L’é’Y ê$³@If�’Ì%™!™J2”d(É,P’é’Y $³@If�®ÁD&™Þ ™J2”d(É,Ðl$’Y c°‘I¦1ûÏç/ÉÜc±¿#�ë:î¿CH¦7H¦GH¦GH¦GI¦6L¦GH¦GH¦GI¦7H¦FL¦GÕ-L¦GH¦GH¦GH¦FL¦GH¦GH¦GH¦GH¦FL¦GH¦GH¦G×`"‘Lm˜L��L��L��L�Ö`#™L�ŽÁF"™¿1?Ôýûí¾õºßvIÿõöLÌû¾h}¿=Îãô\³µnç¯ïÍþ�?oçúöÇÛûã¼=Ùç~‹ýöÏ·÷ó~{ÞµŽÛ¹ÕñqûÜÿr}Ü®ëg¹Î?Ôþþxûûß¾ýûm7fdüÐ¿þî?ÿø?íGÇ÷OõüÞ>Žÿ]òþÛ÷ÄWÇ“Ž(/P:^ WÇ½AÇ”Ž(/Ð«ã…IÇ=BÇTÝ‚Ž(/P:^ tÜ#t¼@éx�Òñ¥ãJÇ=BÇ”Ž{Äµûüó«ŽZ;o°vaí<ÂÚy”µÓ†kçÖÎ#¬�GY;o°vqí<ªnáÚy„µókçÖN#®�GX;�°vaí<ÂÚiÄµók§×îñ—ÿK5kç
+ÖÎ#¬�GX;�²vÚpí<ÂÚy„µó(kç
+ÖN#®�GÕ-\;�°vaí<ÂÚiÄµókçÖÎ#¬�GX;�¸vaí4âÚ}ÜÖ¹Ñg³vÞ`í<ÂÚy„µó(k§
+×Î#¬�GX;�²vÞ`í4âÚyTÝÂµókçÖÎ#¬�F\;�°vaí<ÂÚy„µÓˆkçÖN#®ÝóŸÜïgõ&ë
+ÖÎ#¬�GX;�²vÚpí<ÂÚy„µó(kç
+ÖN#®�GÕ-\;�°vaí<ÂÚiÄµókçÖÎ#¬�GX;�¸vaí4âÚííþë¬Þd½ÁÚy„µókçQÖN®�GX;�°veí¼ÁÚiÄµó¨º…kçÖÎ#¬�GX;�¸vaí<ÂÚy„µók§×Î#¬�FX»Ïu»¯�V±v…ÉÚ(kW ¬]�^kç
+Ö®@Y»eí
+ôZ»Âdí<ÂÚ¨ºkW ¬Ý9¯{,Ç­+ŠÂy�¢bXñC¼)8ÓR 8°K�çøìâÝd­¢öa¤.5?@g³Tk Z;�°vªµP­]€jíTkçÖ.@µvqí¶aê§·´dí¼ÁÚy„µókçQ­�6\;�°vaí<ªµók§×Î£è\¸vaí<ÂÚy„µÓˆkçÖÎ#¬�GX;�°vqí<ÂÚiÄµ[†Ë2Žë”¬�7X;�°vaí<ªµÓ†kçÖÎ#¬�GµvÞ`í4âÚy�×Î#¬�GX;�°vqí<ÂÚy„µókçÖN#®�GX;…ÆýqíúsxéhþBóOkç
+ÖÎ#¬�GX;�jí´áÚy„µókçQ­�7X;�¸vEçÂµókçÖÎ#¬�F\;�°vaí<ÂÚy„µÓˆkçÖîôÛÇøùÏÏ�ilÃØï¶}¦ýóÏ�c ¦~OìmX—óÖ:îÅ}æå×Y÷·¼Ëþù¯�i]†ó¦›†íó¿Ó¶×þâífúÿmçáÏÇKÆÛLÃ¾òøÆyÞNË	çáz|Ø~ü°^ÏZ/ÇqÙ·ñvÅû›?/]ûq¬ýÆê×Ÿäíü ñö¡bÿ„þÞ[Ï½ëþäÎ_:öo©—ýçñ$úù÷Kw½=}Ûí(ŽW÷ûêòí#~?.|?çù¼Lýo½w™Ï‹·ôÜ¾�m·Å¹Þž»õ¼S;/t¿$Ëy^=6ÇÅí7Éµÿg¼ôHõ“›n?ÍÃ¾�Çx~r;?åÚŸàöà¬ûùãå¼`Óõ‹ŽçÕ�¦ãŸë8Òåëõý/Îë|«Èy¬ÛíXû�s|AÙ‡ív·á¸Ò}ÄæÛ¸Ü~ZnopœWmÿ½áã�|þõÑ�dœú¤ô[ñ×Ÿþ÷ïï1î‡?Î¿¡ŸÃñ›Çöuw^~xk•bk¦qº§Ø›¹RìÑZ)öèZ)ö¨ÝS¬Íq|¥Ø£¹RìÑZ)öèzO±7íLqvJ—éLqvJý+Éq²Sê�üYäèníq/²G{Y£þß‹ìÑ¥ŠìÑREöh«"{´W‘5ê}/²G—*²GKÙ£-Ê#”ùRöêÄKÙkp�}�Ð‘×ôŸi]oK™Þõ¶”Ùáµ7¦²—6ŸÊã[ÒßNåx$›hýq*—ŸÂ‰Øößú/¾Çw7[k[o[�[�[�*¶Ú0¶!¶!¶Ul½Al5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Úò¡|ˆ­G-_JÆÖ#ÄÖ#ÄÖ#ÄÖ£öÆT2¶Íb*_ÄöÙ˜Ø^†±_û5i­$L­&(­6­6è¬6•YKXYmYmÐXm*±š °Ö0°Ú ¯Ú ¯Ú ®Ú ®Ö°­Ú ­Ú ¬Ú ¬Ú «Ö0«Ú ªÚ ªÚlñ>$U›"ƒª
+zª
+rª
+jªMË‘-ÕfþûE|QÒ'bB:S¿æë%)©5L©7h©Gˆ©G¨©G•SmØS�T�PT�*©Þ ©1ª¡ª!«¡«!¬±¬!­¡­!®¡®1¯¡¯!°mùP>$Ö£–/%#ë*ë2ë:ëQ{c*YZ�f1•/ZûlDl·}˜ön– ¶Ú ¶�©Ø¨b Šm€î±õ±
+PÅ6@ÛÝc˜Š­Gˆm€*¶ªØ¨b Š­Gˆm€*¶ªØ¨b Š­Gˆm€*¶ªØhË‡’±
+PË—±
+PÅ6@ÛUlÔÞ˜JÄ6@³˜ÊŸcûÍ˜ØnÃ¥?"ë–ÄÖÆÖÄÖ#ÄÖ#ÄÖ£Š­6Œ­Gˆ­Gˆ­G[o[�[�[�[�[�[�[�[�[�[�[�[�[�[�¶|(bëQË—’±õ±õ±õ±õ¨½1•Œ­G³˜Ê±}6&¶Ë0/ã¸\’ØZÃØzƒØz„Øz„ØzT±Õ†±õ±õ±õ¨bë
+b«cëbëbëbëb«cëbëbëbëb«cëbëbëÑ–åCl=jùR2¶!¶!¶!¶µ7¦’±õhSù"¶ÏÆÄö2,ýÚ/K[k[o[�[�[�*¶Ú0¶!¶!¶Ul½Al5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Úò¡|ˆ­G-_JÆÖ#ÄÖ#ÄÖ#ÄÖ£öÆT2¶Íb*_ÄöÙ˜ØŽÃÚ/ý²%±µ†±õ±õ±õ±õ¨b«
+cëbëbëQÅÖÄV#ÆÖ#ÄÖ#ÄÖ#ÄÖ#ÄV#ÆÖ#ÄÖ#ÄÖ#ÄÖ#ÄV#ÆÖ#ÄÖ#ÄÖ£-Ê‡ØzÔò¥dl=Bl=Bl=Bl=joL%cëÑ,¦òElŸ�ˆíºëÞÍÄVÄ60ÛUlT±
+Ð=¶Þ ¶ªØ¨b {lS±õ±
+PÅ6@ÛUlT±õ±
+PÅ6@ÛUlT±õ±
+PÅ6@ÛmùP2¶jùR"¶ªØ¨b Šm€ÚS‰ØhSùsl¿ÛmØú#²´$¶Ö0¶Þ ¶!¶!¶Ulµal=Bl=Bl=ªØzƒØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz„Øz„ØjÄØz„Øz„Øz´åCù[�Z¾”Œ­Gˆ­Gˆ­Gˆ­Gí�©dl=šÅT¾ˆí³1±]†ë2Žë”ÄÖÆÖÄÖ#ÄÖ#ÄÖ£Š­6Œ­Gˆ­Gˆ­G[o[�[�[�[�[�[�[�[�[�[�[�[�[�[�¶|(bëQË—’±õ±õ±õ±õ¨½1•Œ­G³˜Ê±}6&¶—aï×~�“ØZÃØzƒØz„Øz„ØzT±Õ†±õ±õ±õ¨bë
+b«cëbëbëbëb«cëbëbëbëb«cëbëbëÑ–åCl=jùR2¶!¶!¶!¶µ7¦’±õhSù"¶ÏÆÄvZ¿ôëšÄÖÆÖÄÖ#ÄÖ#ÄÖ£Š­6Œ­Gˆ­Gˆ­G[o[�[�[�[�[�[�[�[�[�[�[�[�[�[�¶|(bëQË—’±õ±õ±õ±õ¨½1•Œ­G³˜Ê±}6"¶Ë>´}—K[mÛÀTlT±
+PÅ6@÷ØzƒØ¨b Šm€î±
+LÅÖ#Ä6@ÛUlT±
+PÅÖ#Ä6@ÛUlT±
+PÅÖ#Ä6@ÛUl´åCÉØ¨åK‰Ø¨b Šm€*¶joL%b YLåÏ±ýfLl¯ÃØ‘eNbk
+cë
+bëbëbëQÅVÆÖ#ÄÖ#ÄÖ£Š­7ˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­Gˆ­Gˆ­FŒ­Gˆ­Gˆ­G[>”±õ¨åKÉØz„Øz„Øz„ØzÔÞ˜JÆÖ£YLå‹Ø>Ûuèwü¸¬Il­al½Al=Bl=Bl=ªØjÃØz„Øz„ØzT±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õhË‡ò!¶µ|)[�[�[�[�ÚSÉØz4‹©|Ûgcb;—~í—k[k[o[�[�[�*¶Ú0¶!¶!¶Ul½Al5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Bl=Bl5bl=Bl=Bl=Úò¡|ˆ­G-_JÆÖ#ÄÖ#ÄÖ#ÄÖ£öÆT2¶Íb*_ÄöÙ˜Øöãì—~iIl­al½Al=Bl=Bl=ªØjÃØz„Øz„ØzT±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õ±õ±Õˆ±õ±õ±õhË‡ò!¶µ|)[�[�[�[�ÚSÉØz4‹©|Ûg#b;·aÞÇq�‚ØjƒØ¦b Šm€*¶ºÇÖÄ6@ÛUlt�m`*¶!¶ªØ¨b Šm€*¶!¶ªØ¨b Šm€*¶!¶ªØ¨b -JÆ6@-_JÄ6@ÛUlT±
+P{c*ÛÍb*Ží7cb{–þˆ¬—$¶Ö0¶Þ ¶!¶!¶Ulµal=Bl=Bl=ªØzƒØjÄØz„Øz„Øz„Øz„ØjôöË¥7Žã
+£ûþ³`»»ú½Œãl¼‹EÀ‹ � (Á¢”HÿûÜ[5d}3âŒÎe¼I m8­éÓ�êªs¦5¶’ØrHbË!‰-‡$¶ÒØrHbË!‰-‡æ¸(�bË¡-nJ�-‡$¶’ØrHbË¡íªÔØrhª¼ÛS†Ävj§Ñ˜1[Êhl9#±å�Ä–C[ÕØbFcË!‰-‡$¶ª±åŒÄC[Il9$±å�Ä–C[il9$±å�Ä–C[Il1¤±å�Ä–C[ÍqQÅ–C[Ü”[Il9$±å�Ä–CÛT©±åÐTy!¶§‰íÐÎ6öc‰-e4¶œ‘ØrHbË!‰-‡jl1£±å�Ä–C[ÕØrFb‹!�-‡$¶’ØrHbË!‰-†4¶’ØrHbË!‰-‡$¶ÒØrHbË!‰-‡æ¸(�bË¡-nJ�-‡$¶’ØrHbË¡íªÔØrhª¼ÛS†ÄÖ˜
+ý8DbK�-g$¶’ØrHbË¡[Ìhl9$±å�Ä–C5¶œ‘ØbHcË!‰-‡$¶’ØrHb‹!�-‡$¶’ØrHbË!‰-†4¶’ØrHbË¡9.Ê£Ørh‹›RcË!‰-‡$¶’Ørh{�*5¶€*/Äö”±M[»¬ÆL�ØbFb`jlP�mª±
+@O±åŒÄ6ÕØ ÛôÛScË!‰mª±
+@5¶¨Æ6ÕØrHb€jlP�mª±
+@5¶’Ø ÛTc€æ¸(5¶h‹›Rb€jlP�mª±
+@ÛT)±
+@PåùØ~Á�Ø.íjKdœ#±¥ŒÆ–3[Il9$±åP�-f4¶’ØrHbË¡[ÎHl1¤±å�Ä–C[Il9$±Å�Æ–C[Il9$±å�ÄC[Il9$±åÐåQl9´ÅM©±å�Ä–C[Il9´½@•[
+@•b{Ê�ØNí6³FbK�-g$¶’ØrHbË¡[Ìhl9$±å�Ä–C5¶œ‘ØbHcË!‰-‡$¶’ØrHb‹!�-‡$¶’ØrHbË!‰-†4¶’ØrHbË¡9.Ê£Ørh‹›RcË!‰-‡$¶’Ørh{�*5¶€*/Äö”y&¶]»ŽG±ÛÎÆ~zD¦sˆ´"šZŒHi1#¡ÅŒt35³ÑÊbF"‹i,fjb1"…¥Œ3ÒWÌH^1#uÅŒÄ•2ÚVÌHZ1#eÅŒ„3ÒUÊhV1#UÅŒD3sØ‡GIÅÌ¢3ÒSÌHN1#5ÅÌ7¢¶3Ã×�XKz`¦sFœ’Od{Ù<Ûc÷ÐôÓÚú8íT&ùZÎ8¯Y/‹ý&ÿî¶Éú´û-
+i÷¾ñcØ‘Ý“ý™òåôióo}lý¶Ò6Cùn÷Á/×fi¾ËÃ§O÷Ï¿uqø™VûA�ïc¹ôt0G2Me© ±]§²Ö��ä¾§µ�öà�«º�Þ“»zˆÞ“Ézœ¢÷d¶ŠAÌÚ¦ƒB8äºö	1‡ óõA"ÈÖÚÁ"È~ê4€–v=x$™³"á�[{ŽƒY{ž¢�É´=-¥ÞÈ¼Úß”ÔGŸ�K{ˆ>!³vš¾¶úžyê—3«o;w&±ä`¿ëí×Ì8D,€ª%Pµdª–@Õ’K jÉT-€ž,`ª%9$–@Õ’¨Z2UK jÉT-É¡jÉS-€ª%P¶d`ÿjI‰%Pµäyè‚%¿€�%íéhÐ²$‡Ä’KrH,É!±$†Ô’KrH,É¡jIÎˆ%1¤–ä�X’CbI‰%9$–ä�XCbIÎˆ%9$–äP±$ß_,‰!µ$‡Ä’g¡K–<…�%§vI-!KrH,É!±$‡Ä’KbH-É!±$‡Ä’ª–äŒXCjI‰%9$–ä�X’CbI‰%1$–äŒX’CbIKòýÅ’RKrH,yºdÉSYrh×Î -dI‰%9$–ä�X’CbI©%9$–ä�X’CÕ’œKbH-É!±$‡Ä’KrH,É!±$†Ä’œKrH,É¡bI¾¿XCjI‰%ÏB—,y
+!KöíjÔÔ‡,É!±$‡Ä’KrH,‰!µ$‡Ä’Kr¨Z’3bI©%9$–ä�X’CbI‰%9$–Ä�X’3bI‰%9T,É÷KbH-É!±äYè’%O!bÉ´µÛlPŠX2UK jÉT-€ª%9$–@Õ’¨Z2=Y2ÀTKrH,€ª%Pµdª–@Õ’¨Z’CÕ’¦Z2UK lÉÀþÕ’K jÉóÐK~!K®m74†,É!±$‡Ä’KrH,‰!µ$‡Ä’Kr¨Z’3bI©%9$–ä�X’CbI‰%9$–Ä�X’3bI‰%9T,É÷KbH-É!±äYè’%O!dÉ¹íS×�[È’KrH,É!±$‡Ä’RKrH,É!±$‡ª%9#–Ä�Z’CbI‰%9$–ä�X’CbI‰%9#–ä�X’CÅ’|±$†Ô’Kž….YòzÖ’ÝzlÉ±5¦›™õ£’ÄŒ83¢HÌˆ!1#‚¤Œú3¢GÌˆ1Såˆq#eT�˜3bFÄˆñ"fD‹˜+RF¤ˆq"fD‰˜)FÄ»‹)£>ÄŒèð£6ÌŒØð˜úÂüµñ�ìûah»´{húim}�
+­ý¼ôé½–Ç:¼âëdòïn÷fo·0öí˜vï›¾[ÛaÎóa±?]jÓ˜ï5o
+­/’¥÷]n›-Ÿe™ÚÕÁ¾k§5o¦9o/�h7æíÞoÌ¯t|Üß¾ð'•õ=–k�Ëµ¦ý¼˜g?‘‹`š³«†ãT¶Ær€¹,|‹DóöäŽl0Rç|Æ9;1jØò9>Ï«æ‡›f¶ŽLå©ÍùÛÉþÇÀÕî:uýîæ¡év÷Íµ]~gÃpsÛümÿç·¯?Ý_]÷Ö†ýÝÕßo~ò¯Ó4mþûm6êÇÆY~¾ZÛÉvíöÿ¼²Ùÿëª·'¸¿ûü[¡mpl–Ì»k-&Ãó	ÓTOxu½´ýþþp¾Þ½7êùÊ.øÓíÕµÝåþöî¿]ùQ÷ßÛõÚ-í¼û`Ÿ†ýïù86x&[Òöôæq©'ÎîŸ:ûÏÛüxû«_Â¶÷á~÷Ãëòù÷Ïù0¹iº<„Ÿî›d®´™‘ì�ÌigO£ÏW9î>Ý5iNþÉw±	ö`Û“?iß·óYòø½=®ÁgÑ;Ú`S=lÍ@òÉ†o3Ðûüöí”`GËñ|z¿µÿ&õyÞ=äm#Sï‡uÞ¦qÊ|WNhrgSg×û½ôãêK Í«_–M.ó³MÉ´ÌyÕLù¬i]óT_ú]Úòr°)¼lù¸[æmúo½ÊÐ�~ÉÿÌy+ßŒ5Ù6ò¼½m—:Øêëó-Ù×½jôsú¡&Ÿ¾¾ÝùvêÊ˜my-ù÷vqk9ž]Õšgµoù‚[Êõû¾«_¦
+ßêw°å•>™pìæ¶²–r«yÝ6o¾³¡éçÎFÛ—¥}m×n0ãý¡eÏÇöÜò=y?V»µµóÇùÌ}{>O£ñöäžl0–5ßŒm»?mLÛ0}~qšWÇ³Þïp)ÃžG5™Dm9¦%Æ–ÎÎ—�—pÛòüºòå–QLSíVí›­Æ1_À¼e!Ø
+MåUaô•šž¡v;E[:LßyÊ	°írõSÊ«6?JKVÿÊ¯ÎZ²Øq×Éw´ßDþÛÆ÷X0ê©[ü™ø¢ïŠFÁ.ÿ§=Fßw™¿:Ùÿ°ñIÝ”Áï=åëñÙnã4~q9ßžÉÛ“[±	n–ð³m_¾à|+ïtzšWßÄþMìÿ“Ïç›Ø¿‰ýÿú™ü·bî%ÎNº<
+¢¾ÂÙÐå¤_Þ]ù[×¸ÿtço2ËþýÝgÿ°î?_Ù²Þïn>þjoJþrc¯3Ós¯Zùe°+oG?¿Ë¯WiÿáÊ–Þþþé­¨]ûç“lYÇüwëŠX×<)ú4Ú£XFŸ'6¨ö€í5éMÓï~Ú5iÊ/ª½�™­æë²ÓõÓ^�G(_?4ŸŸ	.÷�êx$úüŠ—?vC¹‹òš9Û«ê½¿ä½²wÕyoï�6=ö¯ý‹õqëÝÇ26ßßÜØËãîæM~#�ìÖìëÿ°_5½mIô®_ÑÇ™ÀÔNwÏgnN‚`s0Œ�ä�ÓˆQ´©¡—ÙÐØÿ½ïUÕÌ�”™
+²‡X°!@ìšîª®®�WUYSÓJbîrº˜(—`t¬pÃ“{½Ù¤@°d+ô²ÖJöî�éå‹‘—¿»ÿ×¦ÅœxŸ÷úÀ¯Ú²È§¨™8i"ñ¨˜eÿ}A@É]ôE(DÈ)‘/z'~ûÎõ,r¬MH¡…JXL"T<·h÷]ÐäR±j�¾k¦óÃED”,µˆã¶8¾áùå…‘YCÈ0®ÌÓm&Q‰å‘g¤9c2bh¤^¦LªÅ‘†Ú»¸wÎgî�{yÚï/|ôÒZå](ŠÔJ{`
+Rôã
+¡Žr¢ë¬rvÚ£�“eÎ¡Å0íÏC©l¶TiFðe/?RMMýr´ý_pR†Ë†š³LfþOêOò	Oˆr¨7¬>>é@¡vý°U´É“ÛtB†š�ü”¢ãLìs+çVÛþn“.Ð•$OˆFÈ<„pÌìX®¥æ‚”™v"A
+2¬Ž´/$ØjiDlÛ£wgŸ|g/oÎà(:d´!ÇggSiM~I¯ß] (ˆKøcóÝÀ	™@M®åj®$ðäsé¹4Ú£ôäGž:ðCu	aÀ24�ãˆRJƒQ›hZ¾ˆ3Þ¨ÿJ|­“ý€±uâ²ôFËUÃ±”_\z�•6x°^v ošÛ‰S˜´JîSO§µú³ãÇ$…¥«¤×&ƒÕ¡Ðö°;¶'@^it^oVÛ�…ÇÚEŸ“ûá\D¶JÖfæŽ…r_-­Mºïn±Œ(#›”um“gûô½H°D¼å™säÆFŸvÝîß3æªÄµý­1g!–Ï˜ý±E¨G‘ ŽJ5Æ*Âw§Œu¥Êÿ|%WÉ›ýÞè«XâQ²9Y9OEIUà(·ªdÌË´ë®ešãYIc_7ŠÀ¹!N]qèc³›³!Ö,E`©u€Ô{d³Ë£û�-Îf�‚9—0E6óvyœBg{{$æ§èá'p)�ÂÛ74¾ûçöAl	wÔÉUêKxÑEhè[ ªB2™Ž•%¨%
+T \%ˆ(pF3¢62oèÑ#£5ÖÞ‹MMµäÿH5ìùõèR.õfnº* Ž­8œq°*ÕLÂJÊŒU€Ãì:NV$õ”€WPíKÁª¢ž¡â`ƒ)®TNè¯
+óò˜kEV¸�Õ¥^Z'úÉF=)ØÈyL.å:Tƒ(£$VGáñw…åM‡?™/-Ú¿šûŠ2ûo¹ôêÆ¹a|�ÚEébIcb6€‰eœó(’†˜š3L¨
+^aÎ’3¨^L§U’írx1J{Ã.'L²Up(yø˜ÉÞ,K	Ÿí‰$X�¸TW’r‰ˆFöº9J2>ÝSIž÷†¢9|¯I*jÚ°–­•ŒM÷(hšKC^‰pš©y‰Ñ¶µ˜Áˆ¨óš‘e%N%O%ÃMœR8W¨(Û-JÉ|c3j’9Òz¡qš.GjžL§/ô
+{É8ÄN3ŸŽ¸C¼$QH†‘<
+Õ¥Ô�C4’0e*ÅWjrÚn,$9�Ó¨QêHê�Æ8*s¨ª8àk/3ìó�&
+o5Õ¸iÑŽÜšÿ_ÓEw‹‰I&šAgXç¥ê¡+_Ø�W4Œ-Ay/Œ¡Ó TÎRÃ(•.dr¨½Ù)&…&qQ¤~NÝRÒº�Ö™ÊÕ	ežUªiÀ[Pá\P&F2LA~8£u�¹Np¬©'ÙÂ}3§Þ^'FlCŠÄåÓÀò1ü~Ãï/ó
+ßðû~%øý�ëk8×wõ¥�U”k°¬ ¯Üj*ààhœªxêÊ®lxeÆË’×�Ã¶ß>l÷.½~'â™X6(Yžƒÿ'{º(ú;9ÒÆ%*†ÄKÀ�.ª‘¢*xp%ü‰q	?!÷³¸0¿›&�wwË{ZÒ'ínµîWîê	’û¡CxÉƒŠ6sû‰Ž˜è&c†Yè(Ž–ÉSšÁg�ùð'JaYI5�ëêÚI)óyV
+s`¡ôD­…Äéà(Dw¥ìØ—(ÃÖ©ØQ.>ž“¦»‡Ò>¯ä¡›o€g…!k-ç„éî¡°ºº<«oÊÏ
+³Ý/[³L’™ÑèV†Œ8Ç‚P5d2zsAøe?“9Ó^šžÍtÞ„5Ò7žÓ!½€ú)9IË¤BƒÆ�J¯êçtF`Ú´7ú^º¼@t–ò2"«…ìn`7”âœWœËh9OðÂOh€OÒ3TAŠQ3Ö–˜ÞþCPc†Ï&Õ'GO]f:§¤Ùd3­&íë:ü™ÏƒÎrÛ÷ÏÉÈC³‰Nit¸E}`â™VÌ·-Ú‹IG}À(ÏQ›ÏêÙvÎž`6j®6EÊÓ.ž­,:×Ç©T'R9Ò8ØƒÏò£šËÕRVQ7ùy½zÜu®þ^˜qU©W¡h±ÄêªËÞÛ�Ý.�(,¥Xã“tŸÜöNVn¸ïdÃ½~LaÕ„…K‰SÎ‚­º±Ää*XªÛTRä_²J¥¸zšÊÀ�Qd‚Qys$És¸e&“Uô�¢ð„;X$±"Šb—5ðàX—² :Å||k¿ì\ëÒ2Ù¡ç€Ëný±Û»555]D¾T4cCT3�Š+&qV:Ûå²û0´”úÐí÷íªsw;fíwP÷’V…-Fi*ŽåR¬3+œ4WÊ:¿ZÃ+%t‚ça8ÖóÄíùØê�žØÊ‰Þ}RR·î�÷Ó‹7í“œrí~¯ÇV=ÔD¸&]¯¯R<2Âß‡ü�Se¶JÞˆ#ô »éàÚYÝ=4Úœ‰Ö;€@«7»Æâ×ûÒL‰s2å‰˜/ÇÕ�î†ÿŸR(·Þí·ïº÷ü¤Û+9�~Z"ÃéOç~xûæÒqçZ>¬áåÍFnø´gT¨v5Þ"9xS�±¢½×à[Qî­.;¾mh·{•øI•�Õj<•Ãý!±k7Îd¬‘E‚pÖÛ~¾a{w hi+¤Ó!S¿Ïó9×ßYŸgö­Æ†V,’–ªÆäÉµý-iø
+U†¶/ò·>À�â‹˜Àå’·É§v'¼{·Ô¾¿¿èZ0fÄ`Ì£/7²Þ³Qõ�çVçÃ¢œpÍ«Þ�˜¦x\éâþ.F°oÌx%õc¾
+°ž™ßÜÃÚ¶w)/nMÎêˆ‡êÿò«»ßêW¾¼»š«¦ón¿^Ùxí“Ý²^Úâ\,eÕ±Ð÷Œº„½{Ü#Z¶Pò¸kÑqö KAMù,öD‹ÊÍ“»Ý.ß�¡/=õÜ:&ætF¨öyn²V¢ÂJXÁøÖ«wß"ViÅe'8îôà½ùT@‚)Ï2Ây�›NðBS�½÷Ù¥ðn{»liçä²<’zz‡rÙê�+åëåâ•ü?Y#Ò6Á<ñ�®Ì	¦ÑíþnD)H„ŸŽŠÝ��ãO–‡aÌC–L²õJ¬R…½‰w+�4ê÷a·^ŸNW;-HýV?ë»õ²(ÙŸ‹¬ñ9ecåV³ó0¹Ð<L	¨S²Ã|ƒ€+²rØ=òw90�-ÃQe¶dqŠkDÄ)DÇµÝ%ó£Úc>sŒG#¨fu5’U5EDƒC5Uûh¨+ÅÙR%2‹ska@¸¼+ý“{-3>¯Fpž1x{Š©v˜™‘÷fÔQ/•(Íÿ(àê1àF(Sÿ‹ÔÚp�%½SI4­}ÞêŸ^&#Ëù®–%Å� x÷Wè("fðè�¾Ù„{ql„×7_4± ±jÁß»*³¤ÙÁ‡aÔ¯êîêªÌ,Ý?‘€Ñp™NMI òÁWÖ/áòE?NÂX™ìú†$ï>	¾‰ˆ,ƒˆD®Ëú‹È«+´†ÄÛ¶—OâÎ‘Ð•…´¢×€Ûbþ;¢UXåÒ©¸0-¬„•i´Ç_�ïmå}~ÚÚžhò÷f»L£ÓäHšWI�aêŠ$F‚d5ÊOâ¹¢�Ñ—ø}«°‘‘Qry�Á–º 3Ù¢]ã£ƒÛÓfRa¢Ž×ßÙ²WJ@’„D	½<ÖÏ’dJ>!Ç\šäRÛPÈ¨ïeÂ‰¯JÃ‚ŸÉ›æê0ËÅ¾Âµ—Ë,âïê¥\3ä #{ùk¸?ð{æ¨v«�ñNÐ]ºVlƒ}§«‚€™å|¹<x6VFÐ9/trß†m&ëfI¦x"ØìñŠ‰\‹UÞûóXQRá*ÒyƒrÄøa¦»4òt�‡´lU$I‹I’DBÏ>ÈKáïû‘$Œp�ý½ò z‘kè{â^×Ð×GÈéFe=¾.Òj²dÚ<£­ç\còŽ“¹Òáùd²‹NŽü�‹hÑ™©y*­ôcù™'å\ð8ËR-|Cm™?Ê¯ewèþrC(*G¥ÚÏõX&�Äzl"åÒº0Â]šÊ¢IÕã­AT¡êyÛ¬
+j’Nà¯Š¯p¸éKŠ»¥”ñÝÿ›©^3t�8<óÓ«ËØõ^÷áùÞ°3DË»¾óØ‰Ã—V�H‰[ƒ¾oÝ¤6Q†2í–¥µÕ�pÄ"8"PµÄÕVà$�ÏÔVPB5t—^s�]jàUß0%’DZ¿�1´†¸s¤}^Ã	>æIf¨�¿Ù9XêàÅ\sù5C
+ª&íµåà‚ T%k´�G�¤
+úëUqì-Ö'ÅwdË�œ«ŒœµÓyI»-ûûÙßO5w…ç’Baï°z`t?%ÖPŸ…gW^"Î/ãê¨‰¨î\®‚ßæÊºP�
+QP½)„{ÝçÇ|/æÓ&Á‚g·?™ª	ÝNœZ=G®ÑIaDºí'¥È(äÃÀÊþ37,¢CÞ4ÌÒH¤N1¶£8MOÓŠÖ:ÆÓä<MÌy¯ê]Ap¥ÏØ³LíEøI¼5îë�Ì· Q’Ø&ð±nÑ·å×_¿|µc“ý	»Þ¦¹>:÷Ýü^ß-2K®™0ïç¡“á’,Ìß½®�HDÁªL¹öÂO	 %+|·Gu&hU¤ÖE„Ôò~£-äW’U4®Ð 7ÐóËÉè–�&™$F«ÜÚÀR9WdxJ“û)�Òn¤USAº›wônMçji¥Ým€ƒbžTbé§à³ó¦Už�*grÞ‹WùÙHg÷Ì,…º<kÄ¥µ�ä£[ŒY·1[R§
+P&±Ù‹ûK°­wu¶rÝ§!fœ$,•––(Îm<
+(MMaTÐñ¹Ý‹«=£YKµ
+DÎæñéè¥’»5CBï÷«ƒ‹®z{sE|:(«Û—àKšz¦õ“:¯Ç\WY:hµ}õ‘Iqdn­\dÎ®TnƒwrÂcM�4öû° �B½Jˆõt&•|£¥æÿ*ú¬,3^€j¹¡¬~w5ú™êÙýÊ9u¾r”)~Ì]u”æd§ê‡ccr~Jv¡ ‰×›¸§€oM«(®´ß‘Ñ7Y•�QIî±¨ƒè�µ¦3K\ªÄñ2#ÍR]Öz­CJˆÙ4f7¿#Xmïh¡wHéS¿G/®QŠt¼Í˜-¯Eèë6gnçüoÜhbˆU—.²³
+8Â3äRA¹¾«L<Ð~ÕË¾/À•”¸"ÒDÐL¦�ó‚8^¨ul#8ŽüØÑ¿P\c¢—ßõ¿³ùè4Y½H?*FP@º’¦ƒ^áÛYFÊf…!NÓÀJY¯É^pYm�'í¸à}Çaq½8¶À
+7�Öì�eNûqæ˜ç9|4Œ“�å>ëgü¼žUõ(.))E³	,ø»ƒ5˜7ŒŒî²ßí›äÍFÐ“ƒ¡&ŠÙš¯ö¥’
+ªÄÛ®�°)†ü,Ÿè<XÿX÷™>*ªÔp}-UEIxVî�œeügKvUl~�:ìqQO�q—
+ê)]—H
+1fuŽ¦Â~uã¹P]¨k…¤ÇÛãÝ€žMT—P‰)Äy	XLæŸ
+¦±^Ê²Åøj¸¯ÅK¡4íôBâMT’Vh>ÊKÅ¤Œ¡CDÐÄE’j­e´‘×å'Ÿe¥éÇ(ì­ JDÈC)7ñƒ6ÔÔô6YÈä}{¯~ÜpÕB*xçøðdLIRW£Â"è„¬0Ð"TYdj¢�zUSÿµ?«KýµGÞ-â“Z"�­-:Ï:6�PÃÞ?_ŽP›KÎT`7a*)MÑæY‚S;¶TÈ¥Ô7™¸);D|ööùUØ7Ç#%DmC=ÝôA´D6¥Q&¨ûË°Ý“xzH¶ÚâIµ„.¾Hxðuø>�å¡¢Ë¾‘Îþþ#
+aòVeÕ8NÒ»U{áS×‘™¾~‡]ÔXô¼zûóÛ/ÿ
+
+	³
+
+endstream
+endobj
+14 0 obj<</Length 10243/Filter/FlateDecode/Length1 18716>>stream
+H‰¼V{TW¿3y€„,„—‚ã³ &áA—4‰&–gP»²ÂÓæåÌD·[+ÊúÀx\¨T«-ê)¬Ö*ZQ`Õª§*]eÕâ£-º+GmÝ;°èñtÿØuî™3ç~ßï~ó»÷{]€†ƒÀÙJ�fºOküb(¹€hwª.Bª~Q9ß*(Ë4š
+¶ŽæÝPÎùÄXÈ`™£óÂ þG8ïÎ³å›¨ŽÀ¿Þ‘|Sq^fTa§ð¨* ¹­é¨¡Ä@�scÞçã
+ÌÌ|Ë?ôkàœÅ?6Y�†»;Ü`J6üçfÃ|¿
+5Áõ' ³ÌÄJe³€ipŠ³Yiî>ªïX½�"l7^o@|Î0(Czû"øàzÑ
+Ü)*ã›Xª.}â�¸ 5NÑ(*DD2wç»öiPàÙ|Á$>ÂEœ±(Â­Ñâi¸x�dä–à’‘ ¡w¤‚@+00ð�Êj�ë5bmÒWe‹‚ÚÚÏw4¹È²jœ^­¸MÄ�HêÅi.�ý¶"¤#á`àgÎ§ù^¸ÇKž
+é$BÜ“ÏÉàºx»j,AYFâ‡‹X‘À{x&A‘:2ß"Æ4c¸$—°
+7ï‰ý
+La5›	ÊHL˜ÎšÇ(K³ç˜Hº€ hL!Çƒý<d1x.Ã{Ÿ÷ý<àD‚ÇJ#£eÑ²÷ßGõà}#<Àq¬¸£u8@Ó’Ð"«õ»BNåøïÓgœT.QÍˆ?þÇ+.Ÿ.)]qÅý'ß¿´|XZ_^HWœ>™³=áA0Ïþ£70ù$_¬Zår˜¤
+9)’àöçgÜï}´êÈžýÓÓï[ÏçF£ß|”Ï+ºY~5ýò³u‡¦^.rœR\ï¾ÞñõÖEËÎÊ�M£Vo@90¨^qò:pèsûe[J¿Ê�ß´Cj§„ŸN@ý²ñ¤[ê¨€FíŒtÿ’_ta/I–Ÿ$ÖËåÝ{ŒîÒëE«G-X&o[9¹í\\”²ÍÞÓ5ï„# Î/zÆž“S¥·G7ðŽVþ½9nÎ•'•q¹«èÏ}áBÛÜ¸n ÎëKC¿hJ­=7/W’�€;9�ðM®á Š
+ÁómµÕbÏ£�œªÈõú Á”¹0’›$£ð >§ù¾ô�ž²Ó–B0EVêÃ~¯º½æU1>±O1v`%i&0c0ÛHK>¦#¨BÒH`Z«•‘DáÒ>ô¤”T,I#W“¤ÑÏÆä
+…*M¯RŠ±c¨,ú�Þ8”I$’˜¡qÓ‡Žú7GÝvæöÆ�MÃ•}€)EEEá…DCP¸ÑjŽ€uÄJ“Œ•*ŽÐ¦ÉY{VÊŽåcZ"/\ÌòOÒ+YÎq’pX Ž÷ø_9…ÓÍ”À$ójh;OåÔ‰ àbÕÝüŠcfá¾O{v´žž(=ÕÕÝ"Þþ7^uàÇ5wG¤Îý®mDåßZ§ò–ßˆhJ<[q[V¾69g]íÞ‘üˆHÞÅÄÚëA�—>ÜÀ1_*}–úÍ\/Í�/;¾)„»j¬ ùEuE¨0Þ[1­mÿ†Yc³µçžìó¬o-Ø–Ž54.9wüZýyÛü[9õÿ
+îª©3Kêc‡�Ò‰y¡k6Y®ö—ò&ðöîG-JK™1/Ï©Ý„ŠwMš>oýC]à
+Uú¹ÇÒÚnozþÓÙž«ÒÊê¢áÝ�‹+´—k4²®;ûE+�—GÞ.[±:{ýì-h¦ðÝžñ÷ï«~q”W-Ý êÍ®­Ž%¸ãÜžlÐx®;.à»ÂŠËã¹p\ñTVˆqÕ8ëA·ìR5RÚ£B\�Æ#ûq(âûNÃØèÉ¿âßÞRäÍuÅùòEîÆ
+<¹\Ê?úJÒ°yþ‡®��VÿY±uô_¿}Túhá,nñRÿ§õï™~Ûâ2ú÷—›¢ÏV.}œ®xV'Þ<¯¹ùG2þû3ÂgãD¢o^MjšþÌîtñîíX“š�g,UçÞAí™;k¥°ó(ºŒÌø2 $j—ÿ^iÚÅß%¨OZ®ŸVÖrzç¶ÚZÿ:e�Á�‚jøºöå¹—½{eÏÎg]f¡v�Ïš÷ˆ9¯¦ùÛi0?£àx™¨<Jò²a8‘¬ÿ;‰ÿYBOÅúìD+É|’�?Ô(1…É@ÓX$†%“FÊJC
+<2
+&2×À�VV(•¸áÃØõ|o4C'ñÆ…ìÄÕ[0Ó@ÀrÀX-/|xßQ¸h‰\³Õ’+	ÆGöÑ€yäh¥zÍöëÝÞ Ç_k—Ë`�_Â¶ËKšï_æ¯Ÿ—³{WFÅšƒÇµ[7ÿ¼K9íÖo®En0´×ÊOtOH+jØ7üaãOZ™qàá‰q=û6Žéì™µº:_çÊ?/}D—ŒÑqð©ÏÑw˜¦QåÂö�'ÜÕaYõ²©1‰•Ÿ-¿Ö6;½Î|Â5�™d©Ëò²<Ÿ<lç½øEéY)»P„³ÕéƒÀ%³÷d`ª¡øà$ãÕàŽÕìá:–Ã_âµpmg»âç‚ªGq-–øn7çfã[ˆbçëW¯Ñ,+.¬
+\?Üg/†?_êRà±Cˆ€ËÇÙj¯pÜ˜A»ÔÉÅ£jBKþ«Š¤HÓmvrNÎ~}IcF‚bÈ<Òh`Œì
+\ÖéÍF/Eäa1bÌ`ÉÅH†Æì4„ÑÍP¤‘1h{Î„‘Á«c
+là<^Úeã6�2¶KÁ¶ÅfÂÂ`!�I¨Ò¤YÛç0C¡�4rL,“¡Ö6€˜É‚7m4že­
+3C3‡Á?„QÄ<;A3tâPœ•@h?p¨{Å˜4Z	=j€ý\^H@A²Õna�U&I‰Ù^+ƒå(R�¡“Cœ­˜"óö–!‘Éb^1‡ar“	Ó²ök"7S¨´z¹&E0S®ÕÊSô•SjtŠ$¹&Y¥Ää)ÊA™ó^$ÀM×Ý/Y6²_ø@Ø^ñ1ØÈ	Ç˜L°,}�#}ƒÄ	K¾Àst‚m†#2ÇLi:iÀ\�¡óU c'…LS¦4¥Baâ˜p(PÎ0à¾ÿ%ù
+�†	Ó/íþ÷vß{ûö]»ß 7êá3FÊS›ô¦Â<ÂNfH±•!f€z« N¯ÓkÔ,Cµ²½†5Ø‰µ¸`
+£a	kæY¤Ó‹¾ËL½èõf)²¨5¬^Ã02&Ôæ—Ð[­Å°Q³“ÍÐETÒÜÑ‹ú€ÎŒ­ÈÂX­¤gW`“ÆP¬å¥ôŒJAo#cÑL4¸K³…èô¬‰g×¬&EjÐQSlP[HQ±¥Èle2„Efè
+b2³ÒF0’�4f“•™VÊëÕ†`1éYýôOPY3ìÊB´j£º�±Ž!V†‘òû„Pdh 2XÁÒ”�jp™§´,–U,†
+áv‘jO5V¥n—ÕŸêZÈŒyu�@R÷Rà‚{‰sA�›,.wBT{jÉ<7)ñÀ”Kâ\Lœ%%u5þ,õÔT	9#]â/û@‘Êk W�‘îÊiÈþ)i_à)óŒ)«(…À¾”ˆÄMT ÑÐA“ö½â4ágqMxï[¨ägV†ÞÕRžü×Mñ›¤=yiOø´gÝÆ…Š¤e«Æ§“	9ªÌÜÜ,eßj@Þ¸�×—ÞÈ?.-ƒ$½¼‡wôÅ)%|EÅ¥ýÄS�(ãz-²À}þ¯¹¢ª/ÅmŠ’­ÚOn'Ç'ÿa1½�úãÅŠËÎ“¥“·¦?ëˆ;ÿbkëÓëª‹Ÿz«ã®œÜw`…T²mi–›³Mí˜ùñöêÒRí‹—æ¸l›ºÎo0�È™¤ˆû~œgÍ/+/N{TõèÝ¸6ƒ9aJÝ'÷š^|Ýuõy|è‘k¿–ËÖÕÿ–|ôô{ÙÎ9ª&ñh8ôFR²uÿ‡³û5·àI˜ß(THjilU&v[i€HÕû$ÃåªWõ;ç•)=ŒbU´8òÊû×ËmœÕ!º¸+ûÛ/³MÊÙ½È#T&¥¡eDÃp4¹Q
+r!'ª†FPò €¤¨Õî*Þ÷×Wov‚ïkkêÜµËºÇö»Ø‰$é0ciñÁ“µÅk\ùþ_E›¾^44´�I�«½5)áÖé¤Á‡ØÜ!ËN�ý.ã¶úÔW›«ëŸmˆy0ù«Îá_Œ?‹ÖM´mÿ!ý¥{·mðïÖÞ\³«�ÔÉW6Üž}«,6ûåóÐ�ùŸ'ÎIr××}°¦ qô�¹­÷—wˆél]}´}Ö™C;š(#T&}�Y$ª&*†rx7V6nS¥(“üî�ëö"[S‰kr×Ö{jæýþ#ÿCNø'èÎŠ*¡þT-„4±BFòÉâñÔª²•ãüÔ
+“¹Wª5¦R0ƒÏò	ïôKq*
+½Ø½g{ÆàãGE[²d+X6©_¼Ø•	½Ã%¼	Å-Ý3!ªÁü§�J¥Rªr²²²à[§´ä9WÖØîŠçW~›s*!ª�íïÏ&Œ"O4>›¦Ý¿áŽqU‹#nžäþ“qW>ÿçf­åXSç²úÓÏÛcËäŠ™e¹tG‚bÀ¡Ý³Ò²w®Èýì¥éÂì{Ûn\8¹®½}×“§ïÏï8².~ãÒá/þrý_øFŠ®þæn·äaËÖ3ÃÇÎ?šÈMiŽ±úŒ¹-+¶o¹¤K÷ÍHªÿ¨ó›¯êÙP9â¼¶uÙÆ××g‰=~ RUn±:&Î{²¨Ê–u�^]g4J÷£M	ß]4¼"íÂÒ‰Ža'Nüùò¤‚y¸=m[|›yïŠ�×ö)¶´Í
+ÿðÌ¨s3±üæJÅ�Ï£Œ�ÆÔ}ÍíŽä´ññÖ¢ÕWß‹x¼¶jÈ�ýÓž;7íØÃ¬Õ{÷ŸBð`q3Õ†B
+Ù’hªÿ-jAßˆBÂ&…ˆÅ”!j-êõÀ=‡@N‘NJ’üÊŽN‡…ãƒáíþYI,’‚Ì³(%Ø÷~Ä%ˆæß]W„þ» üÊÕõ½¥',ÐÞäÁg©ôŸ».Þ„×àÌâz\…ëpÎÇ%Øý*À<è @´ÝÂ'âA‹4ŽÂ¡¨§â$ƒÅH
+ø y,P~"ô�qzD	ÖBÍÐ~�Î¡kè.z…¡/àW¿ýh²!NÆ£ð<ÝéÃ€v+ò¡£@s
+x.£è>Ã3ñìÅ¿¢R…ÔL KÀü!e¤:Å#P(®§¢q™è~Œ%x�Ž¡?¡K"®ë&nA¢LêZŠèœ�óE{D£E)ÔYjBùylî;9ã³³Æ©”cÇdf(F§§�™:‚.')ÉIÃdCâã†ÄÆDGE40"\: ,Tpe`.Acó%†*dr¹ÜžÀ‡öÅ9QjäC9‡¢ûÉú1
+ë‡'õÃ“»q‡b9­Ñò‚}HwƒC1Žå¿
+Ž1ÂJ&ÆUI3\¢Æåp‡–Ž$œîþØ€*‚l_¸TCkÜÒÌä“†Ð.ôaÝ{X(“ç£PØÀÌ.ZÁQ©ß*¹üf´$ÁLLÏLk×ñõ½§°¡?„9‰†Ö%\¾“CÍÄ—qÜ»¾5Ís("\´Ë9,ç}H”Ê”³¼¾9Ê	'áB'ƒÂ”/Í›ƒ)w@Ok�ëµã0<@c[+?.ã¢áÍpQ
+®(
+—_“‰¼LBáQ¯w-áZ¦ÙzÏÊùÞn·'€Â^†� Œ©,€­$ŒÍÌðï)`—£’_³ÒÉëÉTo³[Ðu½ ƒ@Ê”ƒcœÿ‹Êëe\4ãrº
+üÒ5\>+¼;Ó&lL§µ†0#fZ»Üoì©›†WŒvje~·w�8#0À'	¯�p¤„pÈb£�4—ïÜ¹È[’+�ÜŽ�«¨‡‹I�¤‰÷	â°ƒ¾{§ïˆ30"I�|‚xPGë^¯Ž&:¯Ãëlíj˜G“HÚë›:Õ»�qÀªE6àjí:Ö,ãtëí\¤£ç�íùÐYl“dò({-
+¢B
++\ØXþúÀ¬ŒX›œ€¡ŠmvØÉÆÃ,Àþ7H¸¹àãÿ°_íAQ]gü»�s÷î
+ì‚AAÔ»5ÂV±¾‚63nQ§MiM4ÖçèhS±¢ÆX]Œ˜€6±FÔÄêŒñÁ´ñÂš
+U‘h}%Z�S�vÆ™f*¦FG­1ÕšN¶¿ïìÝ�ÁÒôÿæ¿ý�û�{îùÞçâ¸�}4£ ážáÎ0;›³suc�¦âÆ®ŠÝûijVóˆÇdži‰Ï¤ÿ˜g*â3‰å“s°ËRÐîÒm³WâÏëëÔqä¬¡¶Òé¿LÏˆÍÛ‡‡´,µ$6R³4y¨ô'ìÎŒ{V!grl_À¡–¬'Jü¾TtŽÞ¸œ¢1¥!ÿÈU‰,ˆIK9�ê9Sf­rJ‰“­ °>G©STªÆ•†š|Dþªñ¡UQ‡O.,©ï�¹P“­UJÕ„”ïü|GEœ€
+ª)§²š‚DrV—y?­Q!)3ã2…¦5ª1™OÊpõ!ö�Ùá‹±D)ÑÙŸÿ4y§ôØ—¶ÔtDøf�Ð
+è}=B;Œ[´NØô¢§½j\¡ÅêNÚ¡—Ð»ÀvÈObþÏêeÊÑ>¤Ÿ�÷ŠJZy™°¸	ø%0ØÆïÞ¦³°ÇGÀ�ð~Ï?�ëúMZëú­1S†‘AÍâ=šil/R³±÷jÖ'Ñ}åÈ3©ÙµsG�S4S\Š±Qˆ¹Ýô¬(§\#L»Œ®”ávQ!³h%·¨¦RØq:ÅþG„½ÝŠ=%j©N‡BàRQL!m
+ä8BuðÑmHô¨˜$Çuæ"ªc¹X&Ÿ¯ãç´ûX�~¢½…uÚŠï¯î®óÔG”R1ˆºëG¥_jõeøöSÚ
+°ÝlsÜ&Ö_êô u,þ* Ó,uô>ðp#¡[[°^Â¦Ûˆûð~`#°¸¼$öPbó¼ƒWà§Vàqè}ßl!zÎ0Ÿ£zÎ‰8°n 8‚½mú…x�¦w(Wü†ú(Ø¶§°ÑBƒÌž°ú þeœ{X{à|Þlüœ5NÒEã¤ÒËœN{ã~bß¸Ói¦¹¶Ø´_† `	rÕ,qt™Ã>ç¸k•Ñž%Äü"|ßKœE|.°�skaý ”ä<Ç‚ãà0CæÞ$šçðŸ88Ïp^À?]€nÀ÷€§„­Z`øUiF-@–È¡õö@¾rÎÈÜD~pn ÿ»Š¹ô´ÌY¶á#è�ãz1ðÕ§W:Ã�W€¿¸Ë)êaÏ®ÎEÖ3ñnä–Ì™8sN#ïÙvi'r*Á¨=—‡J¥l?çWœQw°q1³Þ¶2—C/ä,ç[‚¹&[®G®	‡g'ôA}Êan¢€Ìuäbœã¾Hpf¬&\›é©;çÍÛ4Aüü}ò¸Æp. Ž· ‡§ÍžƒtÀôÂþ³´ÅØmUÏÒý-@O[£“W?G5êyZÁÀ¸\·ÿ!_µõ�Ãq??ÄÇÎE¢ÿÁñ€ïú8ÜÕá-ÜÓ¸¯È¾†Þ"óóÀvýúUÿÎlë×¶þlËÜe_ròK=„w;ös]smrmóÜ³ãÏ·åÄzÔ]¬�¢ü‹–;9Yìö`~K,ÿÕL<sÌ˜½f�^3Õè5±-zÍu¨G¯ÁWoÆÏîÒßÕ1¿ÊÚÄj3ÞÿE#UË:d¿ãÏÑ,öëÆ}ßušVs¿‘õÀúrmpîÄzúV±�~-öÁçÜŸgÄäb#-’µ<IÊ;É~†^®¿ëYòœƒym:	Wmv=FdßeÙ²ØËX×“Ð17�X9}„cï>Fiî½xf)Î,Î�Vò°-Ò>pFì¼3öQ¿Ë¼Nib�2þƒýq˜Ò¤?"ÎÙ÷Ÿ)1_x¸vØè©ÍÆi…{45»ç`ßBÊ5+ óIý&º_Ãx"¥ÊZXKóÅØ„ýUÔ“óÞõrx}W†ì°ã£ßR&úE�8äœ9‡äyX§ŸˆÕ'ûÖõ{Ô-Ÿƒç0·˜ÊM�3´Æ·¡[ÜÏ_¤§]w0.GÜ‹åY•Ë{ëðä7×û˜ëÅÌ¤L³·<ƒs�8u—ûrOÂœ'=¥°	2ô„íÀE
+èŸÉÔÎåíÔÖÔÊMÚŠ¯£¾€…�ª…@k¬¿Gm§Ïw‰õøÐ÷Õ¾à	À3m�ûP¯MpôSŠÎnþãözÕ—½‹£›Ú›wzR]¼7µç£o®o®ÿ·ë¡³÷K&–E×·7ï'_Ç�ÕNÿù:N|#¶Ç8ïÐ·Ð—hWÐ=þo÷°>¾’j5F[‚ÓÏ'ù/*Ö¤Z§€“ÀûÀ{À	à]`×¦ÖÀÆM~kÃ¦ÞÖ¦š,ëïµéÖŽÚLk}mžõzmOkÆÁZ¥�{o+¿ªÉ´ÖÖ¬55ÙÕ(¼ÑÄš¾ÁÞýÖþüýZþ>…š|MªÿË¾£øï…ï©¾»þ»Á»Zø3ÅwÇGõß(¾¡æ_v}ôu­ß¹²sj¤¡·ÕIµò#Ã"“í2»ìO¢õrë¯@þeÞ r†ðFÑ=œ
+÷µ>Î„ýÖépªÕ^mŽ6«ÞJô€R¿;Õ*Û­øvúwª««ûY«ªó­êð«ª2Ãz	x±òIkeeªµ¢r¨U‰×Ì­ÛRg×ÝÂA¸UñMôONÔ>Å_gXËÃ?°*ÀË°ãR 8<9\Ö|Þl«Szžå2²­ÌŒ<K×²­ŽiyÖ·úxó)½s½½KéÑÓûhNŠ?ÛÛÝJÉêÚ-9#³Krz§ÎÉiIöúR“’’S’ÜžI†ËLÒt‘DŠšäóVxÕ Qa¨A­BS½4ŒFS˜t/åcì67é4EÉÌúŽiy‡š–6Ä´¨À´Š(vZ�/´;*àq…ö€@Q£Icíþ�"Û]<!T¯(¯”@j«UÏx[¯jTAiÃK'„•Lž^™…[~°Q©XùòËY‰QII ›=½h\È.ëVb÷çÁkÝJ(€k~ùüùóí\õnÞ}úØÂú«úÈœ‘³¦ØWsFÔr•Ç“íOrF(ÎÒß�!^š¸‹ý=pQ`�”—?´�\Ä­*øq‘A¤�Ùk¨:1òO]:%¾Ý/;5;µ'~<u¿BÐçÌ„VSzBwñÖzèíàXCu»=¦ª,‡ÀíÑô„07
+\EÆ×c¼ëYcªk™1ÿZ©¦ª­-ó(ò¸Ýeˆç
+ÅÐ„¢j:"íö¸…‡„P©1úoN«=¶‰ûŽÿ~ç;Û—8¾GÎ�ØNÎg_üÈ9øÇqib‡$d!„…„P¸’�’
+%âP™PÕ,�•ñP+–-“¦UëHÃKaLRŠª®Ýºtt5SUÄ?‹/û�
+ˆiûcšïôµïNò}?�ïãË[@Ç	@ 0ðHe&*%If-	Lª_A9“H4lØ”"Û@1Æ\î†ò):;??Ÿ‹úyôø£$ÙFb@î
+: PˆiË”ý;²;”1Ì¯K³³°Ry@Ü_Ú‹™³ß¨(o#”›J#àÁhªÃ@Ûè]K·Ñ[è®’vÛzÀv”.dèãOEù~?¯áMú‰$óCæ(£aN7aÒPÜ‡(Æ¼ƒ£(Á)¤LÏå~ë¤Ÿd#Q�M$‚YÁh2ÃªˆØ„A5{(Ã*�w” �TÇë  I#DÌ–2hâ´:®¨ñîl:spË‘
+_9öŠ")»?TN`éôíÎ
+}?9‹“5íZ§ìc�|ëR5æÊ~AÜ/‹D.¿yõ“&ÁÞå¯‰â[7ç€kùXÊXDÇõÇP ÊHcuË¯R«Ñ�B«ÝZ
+_²7Á5öõÑ~ò 9Rü¦åPØ ÅWŒMÂK5ID¬P>QŠ;u!Ý�N£ÓNhŠ�Ò˜�sÚ€Ú¦HôWÄ´³Uôßt)‘È3¨~3Ñ œUÕ³—8é%&&­aš¤¦Kdú¥·˜’AîVÕI	“»Ã!Y’ :9 ¸D/5ãy¢b9ÞÐ«B·0n�èviuFÄšÊ:‰åŒ2?§dÞ¬8½§ÝÃb ÑÙ¾áFÇÍ«p–O@~—¿GùçéÐÖ€·¦g¬ãü+¿ü~ú¹’©�Àþ­#[7sn{íýŸ@]BR~ñƒ×ŠXªÖ»2icœŽš;ª�6.…Ïâã€!0�j¦¬D ÄÚB´8º‰nÇ ±‹t,öUÁïx^2{SETÜëuOKtÑ´Ùâa(¼	F åã}˜Ï§K—ÜÓOT¶dÕCT™d6”dŸ¢ÆŒð9RÄ‡%wévybUÕñj1ŽÈQ¹p3ÕbÔ‰›AÓÑ2¨N¬–Tcõ¾ŠÒ�žØpã•…×û·Cßå©wß
+	�Ã(d”°ü­ÉÈÔÇÜŽ+¼m®c­–ß¿÷ÖO++=¤VnN2�¢ü·îfqä¯Mýø	à§Sî�&I®,	ÛSš&|­~-¹¶¤ÑÞÊoæù#N£Çi ãÜÇËƒÌgüxùÏ)ºA§H:¢!M[Îè¤EÕF<º)Š¥ç�™"-5bÐE¯ÚÆµ7|ôãL®WÈÑœµ¤¼·¤pu@™pyr¾PmE…Ä¸sFAŒ Âòî‰G#Ä¾Ÿø¾§{Û®W7?:¶ÿw¢¦•’[ý;.¿Û¸WtU™£]se«[Z¾˜¼¸ØÚ¼*âSî±!‹¹töâû?çM\À¤Üó‘þ*KøI`ðzªSÄ¤‚(örAÖF´4×Ò=Äæ‚.û.í ÙËõZ`£äãŽƒß9†’i–zZß©ïÓï×z=>e0“¤9
+n–Ë ¦©¥¹F‚ GŸÒ39ùshÜNÀÐ@@±<‡U‡/-ýA?÷ÑðÃ:ßá…qåWÊì‚~ÈBNyO³{hçI=üGúGAåËp†`	4Ã&åïÊR×Ã{!\=J7þ)ëA½£+U³Î¼®r]T6ËÑ]æÝÑ1ýaÃˆûp´Ð$Z¥óí¡Âç¬ÆóZIÚE¯)
+®ÇVŒÛoT!#Ó�‘‰QÊ@5q0“TóO ôË9mÞ¶¨®ó@ê`-Tïæ¹zq2/ˆ‡?êY¿þëwFþÚXu»uû˜À;ê/½öí2X×¼êNÿæÉÚ"(+S|�xöìè¡ê�Ç/-ÔÖÅ,±Iå.çöÕ¦XbÕuænëêu’'²´³EÔï¾Ì…VI0Áj9`5)74›^f†L8¤‹ô“Å´AË²öZ1º0]4gÉ+ó$ƒ*ô(?dr­I•@íäL†‰`•sF†kk
+÷¯DJììýpÏµ{Xeã)'JË½´¨å²ZÛ?} v”+(8Pêô§âÐÒZ§V£ñ‹ M\�†l'{É!Rƒê`1»¨æ #W „8z1Æªï)PÒðÞw2Oñé"M}àÕT=nÖ8LŸuÚü3û¬ùš]ï™´ÑŒ…Çp#9ÉÑe,Kó3˜Æ˜¢´q`4†>~Pªh¯ªÀeµÉH\:“xü”K"™s&þo4˜òjæÉxá!þX9§gÙ–U±í>5_yfÇ¾™Ðž?n»vK9§c™5
+•5Ž¥E,Ü±_Éº´ˆ÷iéèëÝ¼ó³{Ùr,Ü9ŒîóÏÕCèþ»zÔÿ£žéS¥”Oí"<¨7R¬iŠ¤…)�™7Ëí¨u‰¹zÈ BVy‚ùŠÍEøl¨½8Æ�ã	�rKù·`tA¬WšÜnÑéì©ªZ_.x]‚³;îÆÂ¨xïÀ$4A¬Sæ³ŸI£ƒ}'}~—£Â{zÇ–S~¯(<eI³€ï,¨™…†!®ö\ÚÅðIŠ*¤H=\�ƒ]šœ+~¶Æ€d2™•"AU]÷«YpZ\mUzýzMqˆÕôzÎš¥ñ¾«
+¦¾{ëò_ðÃH¡8‘¢#ÁkspŽŽÚGÜ:^	‚-&NV2È±6Ú:ÚÑÖ¡	´zL—Ò:5Õbt©Ó§5fÁ7ncÆ›.·}ä¶�ÈPêÔ]2(±/ìR~R¨ˆ¬
+r¸ð´÷ä™~a§…§ƒ#ßxòþ/ö«74Ž"Š¿™½Ù½?M.ç5MÉ%í^âIbš¤á¼üÑb/Mcì5G›4ÿ$&²ÜÞå.½Üž{×Ú\k‹Rª~h)K‚(Ñ‹VDD?*AÅ*øADAü D¡{¾Ùl‹ÕêY?Ýü˜™ß¾y»3óæÍì›‚ñ�ñÓ¹µˆß7Ôß{fd>±c¬å©ÞKøßtÿ¾ëþÕÔä#ÝjÏ‰ð™'‰úúç½M¤ÅÛ^_çïìh
+xµî–•ã/~l4¾ëÜ¾­åÎZWmMày´K[éá[DÂÛœÌÇ¨Û•uQWM•tÑåtû|u8×ê0jB£»‘Ø«jN:íšÄ§â¡Ê'Ëÿ…Hw1bîœáÇëzHàiÍ…ò{®¹TOP8r÷ã³Ÿ®.-‘$1.SwõÐî†éÛ¶8ÝžW?¦Ukèdï­ú=SÍÍ­›�Øï¥o˜ÃÃ½uo¸Õ)Ö‹ÃÞioÚ{B*x%ZËnÏ³lÙH¯o1×I;ßa?š!ŒÁ\Ûa!k\¿�ÇÏÆyõåÜ;’y×Fot°#{IÞwåúÕÕÏÆššüBŽd‹¡²:‰§Ã;í,Â¦„XB`(`"³]"oãÉø(,KE‰J§D&º‰mBëæÙQzH(°¼è¢ü"Òìp÷ˆ~,(°�8(RÑÍl>J�Ž}x§À£—Š‰™;€_Jø,0"åw�™÷ÍÂŽ 3ŒÝý^â§/ úÕ³FáMc/)�ÓôÊ¯„,Û¦ñnµõ?ÂÓå@)þ5hQ¤E¡	ñœðµmƒ…£¶wYµ‰aö¥Ø*f,|TATPAÿÀï5½`â÷d¤³e“PNáö?
+BÝ7<î†ûà~ˆìF¾d`|br
+ùƒåûþ_’
+’Xn‚œª2ôÃP qH�‡`±TÂv.µäs°:——¾ý3,+ß,•5%l€s×ß°¸^|"Öh½0aqyÊâtÂ1¾²6>�‚K'Ð@º,N¡šD-.ÀdÚâ6ä�Y\D~ÑâÌ’Õ±Ål<¡Äâ²’QeUÉ+òŠÜÕ××-GS1]Ëi‰¼< éYMWò)-Ó!÷§Óòhj.™ÏÉ£ñ\\?W£{¢‘�¡¶‰¸®*¥}—–þ‡"‹Ë©œ¬Èy]QãŠ~PÖ7ïÆ`²¸@	k¡d¬3 b­"Ëc–asô!º‘EÑ€1\L
+r˜¨#£©5”dÍ’¿ÅÝ ¦¤2:B
+� ‰m9ó)Žuµc©â7÷`Žàw† 
+‹·¨æHSw�*�\ÿ[ÍvØ…ý¦Ë|ïVµn”Ë8�œi%çÂg«bû‚9¶ƒ(ã¹­{¬ð(Ì¢ï$�¡ÇQÃ8>o‘˜yî�uéòÏ<äÞñ3øì¦û¾–>ð¯‹ÛBiÞ˜¬zÅÎ5¹Ïšé·êÐæ”
+
+endstream
+endobj
+15 0 obj<</Type/FontDescriptor/FontFile2 14 0 R/FontBBox[-73 -208 1707 1000]/FontName/MIMJCG+Verdana-Bold/Flags 32/StemV 176/CapHeight 734/XHeight 546/Ascent 1005/Descent -209/ItalicAngle 0/FontFamily(Verdana)/FontStretch/Normal/FontWeight 700>>
+endobj
+16 0 obj<</Length 81203/Filter/DCTDecode/Width 618/Height 440/BitsPerComponent 8/ColorSpace/DeviceRGB/Type/XObject/Subtype/Image>>stream
+ÿØÿîAdobed€ÿÛ„		
+
+				
+	
+ÿÀ¸jÿÄ¢	
+	
+s!1AQa"q�2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ	
+„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q�‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“	
+&6E'dtU7ò£³Ã()Óãó„”¤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ?ë!kCžD÷¨äM²%VÒ„
+ˆ9 vdW‹9þd9\¤”U¤)³¤o�bQîÁVƒ éŠ•®ù	2eZÄNU$£­"§¶J<•k()Qö·ÈÉP¼Jîv-×*,ƒA81?ä	EÄj+ì?V,J©è>Ç*ŽƒAÀQdoæ¦)\#¢Ó+—5Câk�TÉ©®*Ùj#òOëÅQñúGü‘“•	9¬Ò/ùYV£ØðjšÛŠE öË§ÉPªµ„ø³+�%E@GÏ$®…©$cçúòAU%5–Cþ}*¯jÔâ<ä‚ Uþã1ýxUWŸÃôŸ×‘*«ü-Š¢£}²æÖy¥—çã‚Oä4ûÎP["®‚€ü«÷äãÉJáÛüûáTA<E›$¨Å
+0ªh�H˜{b©:š³Ÿ|UwqŠ«œU]$¦LrTºå=_ùŽW%^†¤2ÈrUNí’T¾ŽD_å9Lùª*àSÒ>ÙP-E­>Ö[²©Q‚¸?k%j£8@£îFGª§‘–1)Jüy8ª‡îÒDoæ®M‰VeŽ•Å ZÊ‹í’
+‰•Aeëß~øUÉÊ8‡>»“ôœ�WEYÐ­8‘ö_@¼S†1×“·SòéŠ gYU¹Ë×¢ýb¨y%gZMÓör%Tà’%%d~h~ÔÊ{b­Êæ	¯�öí�*[2²Ä³ª‰S�
+ªg<ÝÂŽHM\²<• Ž9D‘Ó›�ÎžÂ˜U©­Ö[9Âõ'|‰U¶F8¢¿¬àTIK9 ¨Y
+I_?PÂ©%Ô\eGþlY,‹Á	÷Å([¸Vh�U¡_»¹*ÞNkÆO¶�r¸sU;Í£YSö6l²\Õ/é×"­óÅYòššåÍ*á©Q‘*¢L…ªŸì°*¹<EyÓÛ"K è#3?"j¾9TŠSxÀ ÄrbW8£+{d�§©cï�“ Ô¿eÿÕ?¯*’QÖ£”`’2Qä«[à|22TÉÅ‹øm•Ao.;}?~ø‰ˆÔ¡ùâÄ«/ÚÅ
+ã¡Å�i±±÷Å+ž>BŸË•Ëš¡I©+�TÜP�Šª*rV_÷åÝŠ£íþßú«ú²c’ ›÷’Hþ'õm••]|Iôþ¼qª`‡…³ÿŸ|º|•F&åé7�YÊãÉU$<KæC’W@)"a’
+ºSÆYO
+òN¸ª½š~ò-©ð²AP#ýÚž^ERˆ¶Dª¬`e±Uhú¶B|ÚÏ4 )o”È¯ˆrUo2qä¥X
+8U'Tùd‚º1@íï…QSsô™ÇB1TºÜ“O]ÿ^*¼µøªªšÔûb¨»n�ôäÇ%Pº_R'_å9\•n)Èx²•=ÂxW$¨(“�Ë¿ûéOã”Ïš£®>ÔKþHür*¡Æ¥—…}ðÚ¡'˜@\ÙÿwO
+ïüqµjE>�¹B2AS¸4jƒ-Š¨ÜFB–=vÉ±+ú ùb†ã.80é‡ÉL²'#ÕÉ?y®CD¡^Ef¨?a>Œ�UðÄÑ:�ÜY«û¯
+ñVî©WeÜâ©TìŽx¯×èÛKnR¿cý—Ñ‘*§*ì¼z€kŠ¢cŒÊ
+KöR¼~ü˜*ãô\±¨¶<Õ0ÒªÜBg…¯@4ùáT–[y¬iþíþbª‹o$~¤RõŽ•úEr%P�w¹kQö½?SîÀª~ >™	V"µÉSôË¯&$�¾œ*�ºˆ}¥Å�JÞœ>?µß ‰Uj¿÷><ä©8Â²¥`byÕ•Ãš£]cxÙ£>ôýYd¹ªFáUH=B~ó‘T/îÿäž*ô"$ì²æ•bôÛ"aÕ�ZeãI?“øå2Ÿ
+UT†¥To\\[±)ÄˆÅ +‰2%ZcQ\
+°R›}®ø µëFå×�ýy\’ŒÓÿºêá�%lÇÍ›
+¡d‹ˆeð9DÆêçO³ôd)U€¢¨ÉEÆµâ¨ž.*¹™€õªú‚	0²	|È>ÐûDåE*f´^]r³ÍW×‰ù²À¨á'£÷Ëš¥BJ±>8]MMqTSµ §Ž*ÜkÆƒÛõä‚ªŸ±&Z�Sýl‰U jî¿ä·ë90©…¿ÁÃýL±‰@Gñ£¿ùGõâ…W–„æúdJ¢bû8÷ëÉKéGT«P5X×ßøæ<y¶EtB‘¨Ë”ª¡âõþlUU…Œ‰UXºž[T¹~?ùI‚\ÕF×û¿ö#"­¦Øª´MÊ£FÛ/'Û.�&³ÍrAŽR>Õr¹6EmZ%zÐå‘ä¥§ûMóÊä«íÖ¯!ù~¬ˆ±(Ù“þÕ–Ll„	`Ô#—/ol¡�BÌ	�4•ø(½wË¢–æŒ¬l^û÷ÃÕS6ãn€dURbM	û9hbVŽ<O¸PÒ�±9´Ý1Tu¸f¶To´®+ôïŠ®¥'¯‡Ç÷m’
+¥p®H�tc\U¹"&sÔ×$$­Ñ‡Ú¯ÞrRù”Rz÷Æ<•d19•Hé…Q©iÒ½OÁ÷ï’‰LLN<ù¡OKù·Ë¢²Gõ-Õxñô/
+°�È1»¸›Ð”¯TbåE({;†¸7ÿhŒý*Jf‰"ÔÉÞ:/Ñ·ðÅQ‡h’O
+±UÄj£¢î>�ñT+UÈ¯Zd‚¤ÒlíPý¿žQáñümÉ)ð®A�J.¡sqèÄ‘ô¦A+­›�»0þú”!¶J<•:¡`SìÓñïøä•/áÿÅYÀ%@$ÔÓ®\Ò¸ÈÅj©Sã”Ï%dà·ixÈâ�Ü|Žc‘iN’4c×,ˆ¡LJ!i]’£Ç$…qû[SÛ"UEÍvÀ­ ¢�€²
+rý“ðWß+’U4óÄt§*íôá�%GÒ…†Q~‡ Fê¤¼+¿\ª”†@óTÂPNTå@ÃB°vd#¦ÿ¯UT<Mzád€¦ÙQJ›¯ÔëþëÊÏ5^§Õt4è2ÀªsÊEõ&�Œ¹ªƒÓû0*ûTwe£Ð
+íôâ«¥&2¤¾òÉú¶þª%dr9ƒZ“¿ÈÓ$s±ôƒ¯ ü6Â­©Hž§«W"UD\‘Ðœ˜TR»¬nÃ¤cõåŒJÞ¼½I¯ãŠ'¢äJ¢cZ›£•x„ÉKéGT‚åù\"!ÌxólŠ=MbN\¥L}±Š¢®Dª"ƒüûå±U÷|½#NŸµ‚\ÕJ.?³AO»"ªKö±TlKP*Œ„RJ{eÑäÖy¡gûær¹6E­HÀùå‘ä¥AŸ�fþl®J¯`µbþ9(%2aÈ�ìrÙ��’È¬®Àt1O6AD#jÝ2È¥uØ%§=U4¶ZÂ‡ü‘–EW°¢óËC¥ä®?—
+ˆ¾¢“à1U¶Ò*ÊO²v\UQè“§�’
+‰©YOÙ=1UÊÉ±£½¿À>y ©uÊPÔs4?IÈ@q•n”~ìcÉPÊ’G1cöv¦L ž(-ö�ýeÐ1,€(�âtT,~�ÿŽ^íÊOƒöê¡ÈÏ› “ÌdÞ¬ƒ™~AGòï”¥«%¥È�ÿÝÐÕdÀ©f e2Û’yõúqTÙ±À_ÀñûÎ*±Ôª¹=qTŽh>Ÿ×’
+—]ÇÂ’&ß~KXvcö^Ÿ«dA«2þÃ
+¿ŽU(¥*€4sKnº*LI©üp+w(x+´†Øª¿®˜«3ŽÑÛ‰“¾-v™‹P8Ó È�¶�H‚ì>ÐÇ…mY�í^¸¡zŠ51Bã×"UMúŒ
+¹V¦¸ çø?ÙerJ�©ãq ð§êÊŠ¦N•ürØª‹²¯¶F\ÕEâ?<
+‹á�lƒx×ˆ'¶FT�;SÔ?
+°å^ßÁ9$hrø5OP#²goc¨\ºtì¤{p=$ù¹Óv/‹Ïñö´KT8ü»vÍK�FÚÝ{¤YÇüôwe?ð²‡aF~>÷zâ
+ÇØŽ_+i$Öêòâü—p±�ÿHêŸ‚æf>ÎŒ?µ¢ZÙÇìEÇå¿.G×Oµ»>3Iõ‚>m7Æ~ŸÕ“8xM¿ÏrŠ—(?Ü.šÞâÚ,²1GÏÐ~Xg1þ‚ÓÇUÑrÉ�¶ÓùOË’ìt;kz÷�=ÿ‚‹|ÄÉm/’tjŸ«K}`Ýœ]Ë(?ì&fð™ÈŒ‘³øûSù“A'¼ò>¢w²ÖREb+»v,~o~ˆÇÓÔáeìHÏñû\¨k¤?±&¸Òµý::]éq
+}««ôÈ€ë^RsïÄPtÍn^Åá;~>×&:Î!ºX—v÷!‚D—Ó?¾C^jzïËqò=:fô‡tr˜ÆKòv©ô…7ùm˜ó™ˆ¦ÑÝF?ï¾yT$¼•d—Ó‚qâ§õååjQ:zB½h¿«Vwé¶Dª)(éï–ÅQÀô_å\¯+ ÇänW|NQiGŽƒ.*×*<c®gÙþc"X”d/²e±Bµãþé¿ÔÁ.l‚#Tü‘ú²)[ûg$”l="`j;Œ=BèÕårT¦ÝÒŒ‡¨Ä2
+R–$ªôíŠS
+80?Mÿ^H1)Œ´õ�;aBQ/ûÒ?ãýyÈ(#Q˜�p%¹Mc¯ù8±)½º£DÞ+–Å
+:ÕåßÂ­Â>0ŸÎ+÷d!ÍUC(J�´	ô¸ª‘päqåÅzS¦D…Ýë@ã�}±bQÓhÑ‡ÚY>,P–Ü•“Ô+Ô7Å‘,‚Çrñ¢§ÙA¶)R)ê(þ~øC¤±VA†´ýŸžùhBièA@täxSç¾\åÍ>œ¤^„\x! ú0¡‹Ï†š$<–2úk€¶G“™�]zºœ¤¥'¸�¹¤“tŒ/¤W+<ÙC@.y
+u<þŒ°%ZEM”dË®HªRÄH)SðÏíWzâ©|bˆËP]j
+=»dJ¨ú~¢H’~Þëô`T”ÕC¡ëÅ�S’JoüÀb”²tD‘e=_ý¬‰V‘VXÞ3öMJàT¢’Ãðú1W¨¤`PƒÈPo‹‹j£íd€[UÛ·Úï�-¹I,ÊÝr›1ÉQS®©”ß"UÆ>TË�UGìà,ƒ¥$ÿŸL®IB#RxÛýùû¿¿**�3qE_åÛ-Š©ÈÜ–™sT*Š`TDk-Ã‹kHMÅÓn!�}BG‹ÙÌìn0�“%d¶~]–UfÔn½Çû¦ÙdgÛ¨icü:fãgøý®õ4Èm,´Ë
+í£X¥Øzì‡›WÅÛs›¬8qãˆ‰�{‡<†FÙ'èëÅª–W†/ã™
+òh”�ãC»[Á~S2ÀÐ"úÕƒâ5ø ï&ûIØm‡‚CbÃÆbˆú•ê€¢ÝÇÔÔ
+ê{àðd[cš%kZÝ�CÔuøkøáð«š“ge	`¸8eÜ_ÓY—ÝòëeRŠ-å÷ºG›žèê6rik¨Ç¦ÖµC~e½OqA÷È„[ÒíchÒ�–R	ÙE¯Â@ùS¶Ä¢D‚›�óÛèÀqžŒ¼Hõ^¯¾VL‚<x¯/¾HNÅqÞá*ÔtMYàu==.d„~êt·(|b–Þ'Èm˜ÓÒ	¶GPbÃu(êÖK+i7¥à}ÿG^âž€v¸_Ý?Ë¿Ëa®ÔöX{™�[µ~>æ#orYlî!žÎþ,ÚmÂ•‘wþðƒØ†¤¸$ntY4ÜÍ†N$m×§õß«´€±ñ>?NcÈnÝKc5õËõ
+æW%é‘*�G#‚£-Š£$ýÝeþE¦W•�HcÛÕþy+”CšQñõož\UßîÌ
+©(¢»|¿VD±*Ð·$äå±B:qêÃ!ð�¹²k~‰þ®E+SûÏ¿$”d ¯¹ýxPª��záè«®$tÊä©# æüº~ÏÝˆdÈ¸Œ¼Çê¥=�9³’OëÉ%©>ÛŸl(P‘Pñ'­2%�K„`HÌ:WUæZÀçÜdâÄ¦Ö‹[0?”e±CNùwð«PL‹�Õ�‡5E°¤íwËŠ¡ÑIV-Ö»àTh„qF/D?Þ~Ø±*R¹†Eõ
+UÅâ„¢f0™�j$¤>Œ‰d}{�ª<r}š†ûñJ:3êD…
+�ªÄõßb[‰¢)É�Ö�2Ð„Åd{}ÂóÞeÁ®\×Ê’Moï>ÃÖž;áB	Üó”¸“±dy1}V±ñâÜMjË””¥³ÒXJƒPÉZü²³Í�T·¹õ"Dÿ–eïß,	Bµå.}÷çôÉZJCž¨ôü1T9¢	)Ñ˜þ¼‰T4Ÿl¯°üFJîÓÓc/†Ø²	>Ï§ïß¡Üÿ£:Ö¼?cç¾Dª„$”£‰?h|¶À­ú‘þ?Ž*ÎFH¸‹×®D6G’·ì·ÑŠU©Qí‘*Ð|U²Ü•ÇËu)¶S%\»úpŽJÜ�>�ú²T#ú|�~Ø<ÏÑ¶DñÖÉÂŽIòû÷Ç�<Ô~†j€v¢õ'¶NN_K\òìÈôß+Ïr{÷kHOÄ"SIWnoû»Œßè{$âßñ×Í×eÕS5¶´²´·1ZÄ±[·X£y=_éïß:òpe>3jsÊEA%6Uj;m’B
+)	º·!¤â$V�†j|,¦„7ÀK�†ž�ìá„,±,ò»VóŸ›£ÑüÊÞl»imu««O<ù^òÊ´¨à„ÝB#Ò¯#³Šk…K„„,«s$n¼™¸’Tgx{5«yÛÌ—úy6ÓN1ï3y’ÏI“×J‘nï/Àÿ‹E½»ôÂ1	ç™<çæ?2ëú‘äÒt›)}V
+{_Õìîoù^MwŸU†ÖÞæÌ–÷4’´‡‰•~RÄ,ÿ9<Áuy¥yF//iùõõ
+_KÕ#»ÕÏFiIjíõK¤³�˜Í
+üB†=•¤5oO‘�…µžiî�ù‰{ªywÎ†½£ZiwPÖ¦ÒfƒK»}JÚãÐµ·¸Y 2YØ²ó{�D‚ƒ‰B»Ó‘§6=›"‘Ýþbè×-c4Éoª[_Ûi·º%Û¦z·KÊr~A›‡~�˜ÀPdôKv/Rµ"«½zÕ…M~“Ó!&À©'ÚFVYEè>5Åj~ü
+¿ãìP�SðÉTNf€p W”†�Jý•�‡O|*‡²¾ƒR·[Ë'Û»ÉpJUâv�þ
+EOlFJÙ�*Z¦�§ëvÂßS±úÀŽ¿Wœ1õb'zÃ øÑëÙ6ñÊscâmåÚîƒ«è	ZFÖ4(Ï?®¢�­[{\Æäµë&äw
+~,Ðjû8È“øûÜ¼9øv@Ã2Kr#I%u5R�©¨úOÌõÍñEÚÇ ˜E1«òÉÆ\BÐE+ö1’B#R~çÜÔ2¼Š“ÀÔEç×)‡5Lþ–KšµÏvùŒŠ¯¸5 ûÕŠ«BÔˆŒU[’ öÅPöâ„õ¿^*×û±¾xª=ù²è«„Ug>£u»:dŠ«NÉdA#¿\¦J’Æ ÈÄt8)�nX�i èzcIL,°¡ë„1*“/ÇÇ
+åŽž˜ö8ª^â�LUROî›èÂ2±5�WØþ¼²*ª¨”zõËB¨*…*GJŸ×…QdÖU>ßÃ$•75W_|P«é—…ý‘¸ûò$*‹?ÖxÇJ"|Hÿêíü1áU×zdŽ±;ž\�*~œ)´ŠçO¸T”*T¨øŽ<)´Ê40EéÇñN¡-ˆÙˆ£[\¸†UU@ÉRw·OA«Ê«I
+>Yly5Ëš3š´˜XIéž­]ëôd��Þ¬Š÷V¼äS÷¨?†BMÐäÅ.Ëõƒ/ÙsUú2’É,>œÈžP…>4'"%’ÖþÃ‚J´è¦*¤�PÖO‡‰“îÉFÉ$�TƒCS×q…Tä�ÓŠ&â ~1Ó©ÅP*()^[�þœUJé¢âz¾ëôbÈ1æ&¬²õ¬¥-¢½�—ÙpFô«Q³Iôþ;äaÍQ”þ¹�¬éC²€:vÊËˆ©d^ùÙM‘M±J¢t9®ïö{b«’Ÿ•ªó”ÉZ§-¿—äª3Ì±FÒ7D¾‘°ÈIR»tu‰în%™¹3û³øS"NÌ¼;Êlâ’íãŠÝ=y˜-ü¢™™£Óx…ÆžNy§hÐio’sy/û¾N‰ì¹Õi»8@	~>÷WŸQr,¹ž–8È5‘�<ºæÚ2SŠcÄÁõ}DÛÉ2Ã7¤h@Êd(ÒcIm�ì—0–ñ.$¼¿š=…ùõÈ²FZ]$WqI)ã%Ëò<@J¨äíü¼�>œ0�%ä_$yoÊ·ZT°y‹Q¾³òå¤š_–4[ùb[}2ÑÞ&–;uŽ(Œ„$+¼Ò¿­Þ&ÍE¿3ùZó˜4}zÌÙôÑ _É©èšDÚ}•Ýµ¤¯gqa(~h’¹ÝËñùmL Û¨|¡ç;YÕuŸ(ùÇF²›Í‚Ö6Yk\·ö³_ÃkŸÖ º…¡‹œVñ‡FwO…Jðna”±M[òRáÓË—²iwšÄê÷aÓ<ãl×6šž£¬Km4º“¤q:EqƒÒŒ¤,©²­!:k<Ó?*þ_'•|™7•u{:Ýµ=WYÕï´íœV6Í¨êÞÛÛÚqî±ÁHÔí^5ï”æÉ³dT�åg�O™-üÝ>‚·žb´>¤ÅÝÕÍÔ«Çá’Ü8“ˆ
+ö�³ž‹ê¹$–Þ¦•ß~Ìßurl
+ø²²È«øp*ˆ‹$¯û™¾Ï÷Ruÿc…Q�@÷2�)@{tÈˆY¶7ºc=›Æœ¿—íe“Ø6D¤�w71µgŒÁ{T}¶ýY^Ò“|ÞEªù~í&¾Ô¼¿dÖíÔ—Ci9Ey^æÔÔz.	5Z�P×uêÚmnˆKñîórpjí:æ¸ýXÉà-q`UŠ�ËAÄ‚(Vƒ‰Ú‚”Î&?\.Þâ™Dêåê•U?È2TÔ˜µ²’(|2¼Š”GÐý«)‡5F3QT{e’æ«ã5©ÈªåûoŠ¢¢jFÃßMÖ4?äœUõOsúñUÜ©ÌxŠ¢ì¿}òèª*Ëâ¥)Û$U
+rèìõM²™+½ Ðî>œœFÌ‚‘�*Jû!éÉO« y±)Œé¹ùœC0¡#K®~	¿˜â¨ÊPÙ¦ª–n!‘�tn™dU01ñ<9ÓÕÞ™hT4ª*T²wÂ­Äæ©^»þ¼�bW	y‡1û#ùqB&a†5mþ“’Táx¦!ö‘�âk�+*U�¡’Ý¾Ñ�€úwþ9lc³wB2Hm¥‹áýä~�¯]¶Ép¢ÒØlGVtÑ”-Fc’”öì..‚þî9•÷øñáJxÊ’4êG‘�¾Œ�k—4¦é$U—Ò“âáŠžÊhV%7r4ë#( ”“ô��â2n‡&=+ŸL!êQ‡âr’É+K*À²ÿ¾¤	ÿ¿ñÈ…KõOŠŒŸnâøªÄà“Fò~ÚŠ}Ù ¨âiÉÿ“øáT$­Å@ú~ýñT)<O>Uçû†*°–ãí‹ ”_'	¿™ëÊÊRÙáFôå=c¥~œ#éTÍéÝ+~ÃO¸daÍQÜãÌ…gj(i”¸ˆ€x´gù«’
+çEäk× Uiq¦VÙM7ÚF)V&¿D«_Øj„T¹**‡1G Ò´û'éÁÆ¨ë-2ãT�-a_M=Y¿”fÇGƒŽ¤Ã.nÓÔ´ë].Ùm UW?jSÕÍs­Óbà›&k(]nìA… —ªÓn¹lÉ»9ÜÛºó‚„ÒñhÁr?š”["s©ù¬\JH’ ��ËlÄË©”¦K"´ý`ýjÚd}È1·Òrèd‘i,Ú�3ìT�ÜõË	'š|M©—é…ZD)äx‚~ÈzíøeØy°”éèöSiwöêÐ$w+³,|�‘GÆkìAÍ†8ukñ^p?5?*�˜¶±l¢=B}2Idµ“àº¶OVEæ#`v÷Ë¦,#‰„ùçó‹@Ò—Ê§Ê�—_ôó´ÓMª’‘„š+“cè«5¡’I.í8äßÃ+Ø™ÓÕ7üè&¹]@òÎ·ïª¯—¤šÅ%å½„vâ9�ItËÍ›ëRºüU8òZr{£§´x‰ä?šz«_]zþ_Ñ•lÐ;Þ~”‚Ò8­ïµ´‚A"]Êí¨8Š¬£áSÓQG?òŸ�ôO1K$:�¬ºiÚuÍµÄú�¢¬³jVÑO%²Cê#�	>.<»ä.Ý”Ï¡X¹»6pkvÓ]V[t¸��Yv+Ä–èGŽU-%•9X§›uø|·©YèöÞY×<Å=×èõž[+V{t�Q¾úŸÇ*FV�ÓÕrÁðôåÉäÑâ1ÿ!ùÎ=Å¨Ü.k^Xk:ÞúHu¸Œóº3”�¢eB…–Ôâ)\ÓPH6Êu;£m¦^Üpv�}”µâ>ƒ¶`ðð–Ð‰Ð5¸E¼|œƒé‚Aê+Û-ãÙHÝ0¹× Xd>§Ú\²È‡œjzµä–÷Ði2ÛG¨OIo(�_ŠQáÛ1næYHlÇ<³­ê7ú…ÌwÑIis	¸Ký>õxz¨’Ä¿X¶_Qr\6ËåÉ®Ó�_ËÒÞI&±¢Æ£Y·¶uðAÇ‰%Š«€RMQ^ƒƒ&»WƒŽ6åbÍÃ*bpj‘‹¬nÍÁÐ‚¥OB¬/
+ÐŠŠPïœŽl&w0ŸLo®À�iÑÍ~üªïvUHd5¡öª(µF*¾7Üâ«‰®þª"y#œU5ŒÖ>Çøä‚¡`5%}ÏëÂ«�x½r%QKGŸhe±Te±%�=hrERû–¡aþVS%E©¬5ùe�äªrt\’¡ÐºÜÆGL¦|Õ;”�‘ï×,Š¥®
+ý–ITnjÑqV£øâ?äœUt¨¿@zˆñTÙÀ’’‘å‘äªR§O|’­¡
+û=±U!f%zSE@õ…öçê·òïL�bQVö†Ü¼Š9ô,ßF(Mc¸¨g¥PSèË¡É®\ÓDw[uzz¬3"(C»*?Ô´i(yYzäeÍU/­ãŠF`4‘+0n¿T~¼
+—ÌÑÁ|X;Üp{ŠáµS¶êYÌNi…5ÿ[µc×ÖíëB�¼¡Éø·‘¦Q!»dy%ÏnmÕCÉdm¥ñ=ã‚’—¨e‚å�ä]�Ï|—FA,º·&ÝÜõf®VR—IÄO
+ Õ�
+šp¨1Gû{¶Z5:
+±—5A´dQ�ÙÀ­¨Ù‚TxâÈ ï~8[àû'¤çãQÛ�l‰T¾óâD“ýôi�P¾¨ü+Š½;ÃZ�FH*â·@ª™¹[dy9V¢SòýX¥|i°È•D2|+�TJ¹f¦ÔÉwº¨˜d®>²¿.Ïi¥Á¨jÇio¦“O+SûÖà�ÙgEÙxÇøþ—]ªú‹,¿¿ƒOµ¹»¹�ªÛ'¤#—Û~¹¼Ï.ºÃÞq«y·Kº�].U\(ýÙI:·ÙÛ~¹�Ð�ÇØØÈ<Ár³#\BüÍM!¯ü6ùDõÑ?�ØÚÏ^kÈX¹·¹sÕGÇØÝ~>æ3æÏ|’Ëuë_ê7dÑÊ`Xen/ñ "£ß6xu‘h/B:šZÁ#[K²Â "V3°åo™˜žá�ÉGWÕu_2~YùÚßË—Ri>e—GÔíô»«bë$w&ÙÄO'ÃÏ‘2Ü<Û3â ùsþp{ósÌS·œü‹¬ë’ÝÜð�ÌMµÓ™‰T/ã^[«3µ¼ÍîÇ3øê.!o®´ß-h>V{ë}%fšúú{»•Žyª^æøåSö6‹�ää!šË™6üëÿœÊŠÆ0yFê9ë¨]ysZ’÷KY#sn†I$�V6Ýyƒ#W¿
+÷ÌŽ6ŒØªEöÇ’?,ôi<�ä
+Qukèþ¡å™cŠF’"�©m$·cìn
+=©•ËYÀÕá¢î¿-,n×NÑ-5è§Ñ5»x-®¯½X‰å¢ÐÅ"ÿ,)ÊßäðÄj¸…¶ÇÏ+üÃóOå¯åW™ü¹›¼Íx5«‹{Ë»++H§Ö­Z|ðúÐ€¨y3P»Õ¶Œ�ðþa®P§±ù_ò¡ôo5éþn“^[ñi©^j¿Q[`†š’*
+l¼h*¨£*–®Šc�gÔrù–ÞhfŠKiš9yG!ŽF, nGîÚ6è?›çxo2ò�¶¹¢G¯G­ù²óÌðjVš=¶™os¢Ú2ÀGu"Ë%Ë³ýnpóî{Sµ6"¼Å}ke¢]Ou+-¼we’­A@Ü0ß¯\Áââ-¡äâØ˜¤Öss·z˜›‰Nûü-¿\£,ªTÙHfó‹ËHýO´i˜òÈÚ*
+Yù[¢šËq:¢b2X�£#)[HîoRá‘EÌ
+BNz­
+)™räÓoDÒ$c"©%%
+8ŸÙm·ÈÇqK8ïlGÎ¾^�$d³MÕ”k±ôr *ËüZªoò)š~ÑÒŠüy9ºlä1Ù}y-ãä8~ÉTSÛÃ9yÇ„Ó·Œ¸…ª—¦Þ}Ù«+þí±UxßíSÃøb«#nE†*�·Ø”ðÅS5ˆ�žH*Õ˜4�Oßµ…WH¬¡·6©«|ÎDªeØú2Øª¬&²…ùäŠ¡nQÖMº1Êd«Â•£,‡%\E’¡ëYÊgÍSÀk¯¶Y@7N>%C° ¦*èz¶*§þìûâzâ©ÔSs…6§íôå‘äªRJZ¤ý“ÓèÉ+�ƒ‘ÓQ#‘¦*ˆµþðÅôäƒŒ’íBÎ§©PèÅ	„2H©nIá°ä|rèrk—6HY~­êÃ'ÀÏ™BSq$`<f`®Ê*ÚÛlŒ¹ªW<âŠTgg�v?ê¦I5Fo®Š¹B`õ ¹Q;ªq¦ÝDVt�y1J;fLªUƒšZ¬KYhJ'ùuÛðÊòGÔÙI2ÉÌ^Tü>7ã\‡
+RÙ¨"¼Eþî%>`
+þ8 ’^Ü£FÞ2¢”ªr*>×¦?V@**)YšØµÇâËB¬•˜1öL‚˜Ëš ™
+]OT$ýûàU(ßc‹ ¦O¨$\R�„àî¾"UKfiân�ö~ì
+“ñø~?F*õUOŠ#â+÷äÜEçàs·ÚÅ[%”ÐtÊÊ®�‹\ˆl�&ÔQ˜aJ!>Ãüò%®\Ñ%¨)�³­·–¼·æo0¥ª]Ëgl‘ÛÀühYœyðõlé{`ã«¯×¿O™¼‡ù÷ù‹¨jV§™`´mX·)¦*$„Ã!þð<pq‰ÇØ�Ô5vé�$²úœoÜžY¼·Õ¡7(xe�$…»�Ê's¹ï¿\Ê‰ÝÇ�$‹óQÄ^Lº‰"X§Ô%ŽÝ8õãzÇþ!šÖ�Ç“™§|ß$zU„¿X†îVoHÅ5«=Anÿ¹ý¬å²êÀã›ž©�¾R04ë·Ë°öùg'<Þ§ �—¥@Üê8…Ù{§-ù}9F«W’„bËÃ¸ÈžsüîóÇ‘ÿ2¯-µ{X¥òœ-‰¤Å1²”*›¸¦ÚGt—�ÜíJväžƒ¡ì
+6«GÅ~¿�ó�˜ƒ¯”øÝm?2´it´óvŸs£¦Y	.ÚbTÛT²H¦›Õ
+vëœïdisé5G
+îê	óïoŽj�ã¹âß™_ó’š-ìRéö¨uI­,Ò×œ	6SG'À7&zÀ²85N ç£ÿ'ñz�ãípsk|]¿sã�]›EÔ.O�ô©Öþk+Hmu8>µ&¡o4�«qÐ4\–gœFÍß®fä¸7;¸C„¶{ô˜ÿžöW6Z�´M4&;‹›;¥w³{fŽU•šˆB©ø$%ºæ®:¼<þ÷4F`<Ö÷Róæ¹=­ï˜|©/š50DPêZ¬2ÝL°8Kng¢4—~§©í›Zì$Õýî,ñÌÊÞ…¢Î@þpùOF[U�hš{ÜC¦Ú¸•"¶�íäKkpŸîè <ý�ÛÌYGIóûÙDÎ/TÑç&o5«{->Þý´}IÒd¸]~ö’éë{24²¤F'“û¸Ó`$gés¦[—N8ª<œ‰ç&‹èOš<ùù›¢kß™:œzŸ¨‘y‚ëU 4:™†âK(ßÓP!H�[²@ª�]B¨E=¥¨:lD�ø±úÚ4¸x¥oÒÍ3ó;Ì2Ä„ÜE<Ž ‹u�@ ðá¶Ý3ŒÓvÆ²üH�Iþ¯»¹ØÏ
+J™]§æ&«s
+IëÛºšŽ-*H �Qzá˜yý¡Õ–Gw¹œtÖ˜=j4¹¶ozH?fŽfCÚyqqKŸãú+-=l¥yç[›«?ªÜAi#9’HØ†W�:6ûV˜àö€êrWã—¹¦Zw�ÞêÞ_ÿEå¹µ];E×|Ã¥¿˜`³»»XŒ²LI¶¶å.ßX¹U¬q¯Úåï�6c)bŽ­?D©�yKòòëÍ:L:Å¿˜íár±HŒ3QÃ
+†ß¹êrÝ€dŽÿ�µ²y(=—Ë”w:z‹™µ{mJï€T¸ã*¬t –4ƒ¤r7²dò­’·6®+PÊÄ]ÿk|>/ikåë»IcŽy 3JÜa!öõ;~‹« ^cùÍ¬Ï¡~YùëR‚e†ûJÓe™YMTÉ€®O³
+f¿S‡‰´€þQyæ÷óÉözþ©Vš‹³Úê0Áö=xÉ!‡úëF>ç9}f3	�íôòŽoSl¦µ,ªÄû�	ÍW2Ûá¯l¿ëŒ‘�)]dª9÷?¯%�Ó$	¯#ï—ESRÄF£üœŒ¹ªÜÕ	ÿ(þ¼
+ŒÙú2%Q(QT×¾[DBÑ³×Ç$Xk¯)½:Te2l‹«SOaú²ÈrRªWŠ×ù²HAÎ¼üò¹sTÖµ…�°ýX/“í£,�%S™jáUE^*H*èr
+ÞU6Ó\¼;ýš}ø«l –Pô†*¥
+Í�PÊ
+°oø×$	ov·Kr¦ÚXE¼¢šã£mû8U4¶R„9­kMý¶Éƒ³¯pRYT/÷Œµ£
+¡0b²r¿j:þ2Ø�š¤7L´ûµ6’¼Ï@€F&4‡¸x¶uÈïÌõÇ‰º<�r–’Ý‰up$Bõé�R�F”$â"ÒÄ7Vê<1<•g—®gÑ@~Üë) Lqªwqé˜¹"3(övþtØlP¤‘\s@ªY› ÊdÎ(ŒRXÚOL4_½2,Ò'RYë×Ó§Ý••CK—þ.Œþ˜Ç’­…©ŠRŒ?£
+®ûl›sâ[âúN*†˜Ô¾Ôé¶*‚_�ƒ5qU�¨æqT¢á	˜º÷CË"Y:€Ñ°%¿GÛßgéÑ¾g&â69véŠ­Þ­^¹YUÐ¹äQ¿ºo"#É¿i©Ó¶«FÔ$dK\¹¯.)·Úï�·KÒXòÎ©grœ¢¼”FÍài��ba¼1>ÿ¼º­yü|žüãû¯˜–éõ.v
+ÄoÁßñ®mL=mG¥õ–ô‰tÈ¬!E°EB‚Š/á™’&œr7`Ÿœ“ú6z
+™¥Zw¸Û§îGù�œ§mN‡ãÉÉÓ¾KÔ�Eç#ÕóS¨ðÎ.s&Îvã� ¨èwë^¹¤ËÜ¢6AÄ°\êk%Ü�,aS%Ër¤€ÅÆAÀxm¾t>ÏaÇš|2üskñ6§Îó�Öš	ž8o%¸—FÒµf»ÓÊ´’ÚHZ¨“âA"©Bõg]¢ì]N‹Rf>‚+§w>wÍÕjão’¬u­nçP·Ðü¯2[é²MÚÛÛ[‡¶‘MéüS3¤‰÷Î—¶5|dæå~þ”LY‡ã½ëZGäæ„òKwsß5ÅxEpÅ’:š€„øg#“ÚC8Ôc³ÅÙ z¿{Úü»äË
+<zvÖ±¡â ‘×áåõ:ìÙwîýNTx h³Øt&*„ñC³?�ðÌ<8³d<þæÉæ€»HüªÔu9„KhKãV w?>¹Ói;/7†%w½Â:¨]1ÍSÉööæh0’ŽP7ÑšMNLØrsû»™Œ�“ç8þMiw¯4–HºeÜªyÜ/F^¹¼ÒûFpÄF\Çã¹ŽM0�â:ÐïuOË�4YÜùÛQÔ.|¿-¯Ôá¸ÓÐOqèÚ·Ö#Ž/
+ffDY$à=Fzç_‡,;G~9ü;œ1/¾øÕÿ8<¸t�=>xÞO¯¥¨µ‚ÖßN´ÔaŽx­f*‰)`’Š³,~$,…Xè;JÑÀ`€åúhù÷¹�ËÇ'�y›þrË^[‚OÑñÇ­ÇiÉnî"ž8mcä*±,Ì
+Í%R4F÷ Ôf“³Ú�do—ËõŽæÕð½çËÞf‹Ìz>•­Á�Å¬ÚÃ|‘J]EÂ	(CE9`éœ¦§K-&¢ZyýQ¯´q~—;O]éÅÛÉé3D~ ¡£í€Dÿ(†åôaÒä|—øä’XeÆ¯u§ùÊÛÌº“ô›+ÄÐŽ�¨Ïû7Sµ‘ÓÎ¢ß¸¾xèßÞ½ºgwß�Ãûþÿsƒ<W"_LþSYOaåÿ-ÙHåþ6NmÕ©#
+õ=~y¿ìÌ§<vüsqóAõ
+µ»FHŠµnJÕû=k›~G›†
+>ÿœ¥ó/šo|È|½¹q h–60Ï¶ÈÕ•DåÇð?Çé‚_p9Ó1§:^&ù-ç½^î×^Ó¥žçVÒôëØ…yy_\ErÌœ½­:xmƒ�Ól�N7c·Õü‹y¦^;Eo­L°\Ð#N„� œÄââ-Ñ/�|ƒ-Ÿ”àO/Zº6�nZ8®OÛ$÷åÍž>>ÿ×ïlÃ¨"|/fYy�Õ­@Ü÷Î,8eNøOdR>ÇX›¨\ú2cIn'Üd5Lá–ŽGùõå±Tê¼­Áñ\Œ¹ªÙ¨@÷?¯¢\‘7.t.8¨ö¦ùªÖÓE:ú�šÇR û¡â–ÅQöÿhüòE�æºäP†ÊdÙÑ}J²”¢	ª�á’B„±V"|W.j¯o )Ä}ª`T$ŠI�žµdy+˜Qi…VGÕ²A[u¯¦ËÂªÚ|‚2ytYH_§V•ŠÜ”=k_¿ãŠ©¬¢7`ÝÙÉm¤%OZáUXØèÝ?gbTç™Òíz3ÅéÓç¾<HEÚÝ²£Fæ¬¢„å‘;"‘0\²Ã*ƒPÇÔdùm’µ¥CPW†T�B™#¬!ºz�±´¥6÷×R[EÄ‹ëEýäiÒµí�ªym:ÎÎ“
+G,iÈ{ƒOá“è«,âŠFy
+T¡hÔü÷¯5EIqÂÕP¿’éªßÉE N]6›¸�²•XÿxÿnOlS&q@E",±<›òj)ùm‘f’ßóúÐaÑÕÿâG+*ƒtoJ%nŸÔãJ¨êª/P0ª^®@äÝP‘÷šâ­—]ÔüþýñTªZt®Øª›Š>XªðQdK –©Jz§ªí�-òOò±V~½MÄTi¿\[#ÉIéÈÓ¦VR©|ˆUß¶pª¢}¦Èã�ˆkÏ8…9å†Ú‹›‡X!·ŒË<²tXÇW_—L–	K6_~6µ9D1×ã›Õ.îíõŸ*YjVœ¾­{$¯7VLñrÿeÆ¹èš=å1]×ö›óïy¹óf¯
++3”©;×2X£-Àh™€ =J¯�ÿ:n«¬é–ŸòÉbeÿ‘îêŽp¿+ŸãÉÎÓ>j½~,cøËü€9�DÌp�gõ»AüùÒüÕ©yzÊëË—×i–f—X°±™¡¸’7Tá4f=ÜÄËö¯/Ù{1ª:\ž]¸¹rég-ù¸¬/òŸç^¯®Xjš.¾“êwze¯Ö'óeš#£'Úõ.Ôü™�]ó¯Ô{/
+>ªRÆvÛ¿»Ì´cÔð@cîþ×‘]ZyƒóÌ2ÝK=-¯çU†$C*¢ª(�cø@
+ wÍ†mXÓB‘>!}+ä iº=­Ú}V(ãµÓ®gõ½ò¢€	oÚ&™¤Žª9çÄK—|…è~R¶µ¾6w
+êFY$’DˆÄXWoÝ—øiû­ùï^›f¿>Êl‘>UŸëFÎ9¦}A9FŠ-P{ñÛÃl¢zZÈkñ³7L4ýUç¾¹‰[œ)vñÚ5P°�©iU:Û1Æ
+š)èÚæž·a©k6O$ªÍ,V·7§(ÕØFhñ–S¸=naœ@˜wkQÃr¶#s¯5Æ­«E%ÊOè^MéKÑŠ(âü›ý`sC¬Óx³r xR½eáIlai"’KË1/§¼�@sNkòËgPü~µ:Š“Ì¿0¼±c¨éš}¬È—·:»LÖöÈ(T¤±-Üv~?þ<ÙN|aóžœ·þAÖ§ÐõËK9´mzá-µ½Jò7–E³!‘Òýêú‘,ž¤|`y9/îÃüHzìŽhðõ¿4¦
+te?–ÞCÐ5ÍM¼Å;ëú5­É�Ê–“…º±Xšâþ”¨éZµMMkœÏ´·–Á‡?ì=ÎF�OŸSî-&x¢ô­Ï§@TŒ
+°ØS<ã&†@\¹þ<Ý´ñˆÉ˜r,”$N£¦bÆ4X :NªjŽ8Ÿq›M0Ø5d}iä+ ¿á˜@
+ÑÛú„u¯ñÏMì¡û¿ÇyuYÞåKFcU|1_ã›8òqƒÇ<ÿùc¥ùÎb÷±q`ÕåÆ3ÐS«o’U?-ùMò~�%µŒu
+=iä §:l»d:–pæñ¯ÎK¹ òn”ÖëÊio"*}Œœ×ÇûÏÇslù>Z°¹ŸŸÚâäò+ï›Ìy8fZDz½—ËZï×¡Ïñ]C·æ�¹ú3‹íÍ)œø¿¦“'7Wë½E6ùx}ÎLQv¼\[ª¤œTŸëÈªªÏPÇß"YÒÎJ’}²ØµI5G<7û;Ó#.l£ÉÐ<|Î¢Ë€êÀÔ
+™2%Q6ü#^1Ž(	 |ÍOëËb©…«ümŒ•|ÍÉ€÷Ê ª”ôÕOóeê¯J¨o
+ñU*úŠßçÓPµªHb?fMñUy”Fá)ú±T<†¢¸ªŠ}‘’
+æj
+6Y
+•‘£?eÈ8ªitÊeëAøU.v,¨OSŠ¬twœQèéôb«£wI¿¼ßâöÁj·S¹Ss¡ä¥68Ú·ëˆ™nÁäÌ ù
+`dwÖO¼�Ùx­Â20ùœ<T•Iîãš7hš¨JÑ~@øá»bZ½c²Ëã ˜Å´�Rcu?û¸Q~�²qbY<eá3uÛ€}òà„žèÏ$³¸à�ê-ƒol‘TE½^5S'ÃÆ©½zï×BÜ+Å$JÆ²°}±T$ê ýOˆ}b¨I"‰c«nÕn?yÈ–A¨y‡=N¡Häî=ñU!dEn€8ªV�^µ?¯CRWj@­!êƒáýx²	DE�¾Ð­~ü¬¥	éÿÄòµz
+šÄ§Û2Eœ˜l:bÙKÁ$TõÊÊU‘©A‘
+¾µzáUejdsËÀ€ŸèÙ•È‡€~wyÉ­!ƒÊ–Szrß¯«©·ù4>œ_ìŽùèžÊû?ÑüÁü}Qïý)ÚšÓ•øéäû_òÇOm/ò÷É¶Lž›Ç¤Û<‰àÒ ‘‡ÞÙ·í		g‘_pcŠ\Q�ŸîÛ0Û#ûü‘‰Ø+å/ÍK£?š5RzYÃkþÊ4oãžqÛ2¼ŸŽàçiŸ>ß‰gyËNŠƒÒn‡ã9«ÁP—¹f'[*ÉiåË.Þ>¥y
+µô�4Öñ,�}>,Šü��‡Ä‚»šoü¼ó©ÁÙñí‘âcçÓ·Sæµæ“òûÍÒéŽ­—<±§Y½¢Ý³Xê6jZW¨‘ËHB“Fb7Î«M¨”4Ñú·ûöû$±ÞBŸAþ^yEt­S‡$³_Vy\Õ‹JLF§ÛÔÎ_´¤rŸÇ“µÇ.ô››.mÒ ’N~¯o9§Á§�–É2âÝœ¦ÎKh¦
+¾ƒr”5
+
+žßðßìr3„„Õ»M&8¬8«5¼+½d“šð!…Ee¼2 ¤E•‚ÚCõHaê‘(1Ü-~f•9¯–¢¦škK±m:]á`}HØu%œš¯Ê¹wR}ßrßE¶Q]ýfs=Ì÷óÎe/urjÍW%j¿äŠì2'?ÑÁi]ÅÞ¯s¨Í6«zuF�„3$tDªD>�s<ê­e§ÚÖÞËË›In.åš-66M9d<Ò Ä–T�ö7'õäN¢šá±cþjò�¦££ÝG{nÞ�ìLF‰�Š¦ÿëc¦í	bÊOCú½Ì³jaÃÕ&ÿœjó]‡—£Ö4ÿ1þ‰Ó­-g[;kÙ‘.µ)î#�®$[[[·žÙW÷J’Kõj¢µ~>_W—EŽPñ¤>ÿs‡ˆ™�ŸJj^a³ó½w¬ÁÛ
+FoRé’¶G‘è]’ÝÕš¥B±¦p=±©Ž\’œyûƒ·„LEl¶Òzÿ¨Èmœ¬™¦‹³ƒâOê¹Á¦¬�±|�€jz‰§Gø 9é�”?uøï.«;ÕL´4ðÌ÷5ð¿ÄzœUŒù¤Ãi¢ë�­lìå™xõýÔRIü2K8s|Gù›®ÀbòN‹|Ì#×ocÓàÔ>£+B6ÿžù¯�÷ŸŽæÙòxdZ¶•¦]Þéò!–qÉ	&ª4ë›ÙãØIÁžZ4É<©2IªZ<nÒPŸÝIš¾ÕÄ</Ç0ì´‡‰íV·e…ÔÔïôçœñqnï`(#‡ï>ŒY)»üK‘,‚ik79vËbÕ$ûŸî—zûäeÍ”y,¶’²•À”Àõ¨øZ›e±T\/´›S·Œ•©,kZñr¨*¼�^«Ó¢ü±U4ý¯§P_÷¤b¨¶ûoþ}†*„n­Š¨/ØožH+|k >ØUL~è¬œéBE>œU3kw¸†€Ô+ÌWJ‡0¡?‘›õœUt³±J–Wå¶*–Íp‘Õˆ¡nÙTŽê—]\	!B‚#°ùšämS¸Ž;EÿhŽ9húY¨NªÈY¹Gáús$’™Áp�jðQNá—b7Ä¦7zðÒµyßä(?VX…$<='åÅã"«ãLœX–`57	
+º‚c¥]¶Ë‚¯ØIoÊ�y¢rQìÔÉBX™á„QRQ!£P¼Œ´ÂX“„%�Ì×CúoV“ö—|U-¸dTš¯©ö2%�I¤œ-ÔJÉ4N®uøˆý‰
+F*…™£.’&Øª˜
+�Ó¯ß¾*£Ïh·*ŒY–á½9XxÿL¬¥gûyZ³4g#£e­*Ž ¹«�EÅ[ý¿»W�«b«¦š;;«é¾Åº4²«åúòÌŽ\‚#ñ³VCáƒ'ÁÖ²Þ`ó¥¬j-¼w3½Y?»Ž1QêKþ@Œ÷®ÈÁái(þ=EòÍV^=Uþ9?Z|£¨Zê^_Ó®,¥ZÐZÌ¿eãAÁYÉ T{g+ª¼?Ž�YbÙ@<¶÷?¯(d¯Óâ?`Y?áNSš<ãXU¾%óíürëzýä¤*ÉÌ�^ ˜Æ9’çšvˆüÎZürß^ù÷^ó·“4ËK‹Û¯1éP¤;ÊîAìmþÛTøæ<û7ÓcáúÛa«�ÑyæŸ˜om|¯ú[CÔM¬zªEl—­fÓØÜÛ\†­¬¯$3Bª¬ÃŸpÛ7ý‡ÙÒÅ/WãŸ›V¨C |ïùkå'–Q¬j1"\Ïº
+©3]©µQNÙºí}`ÆN1Óö!GÝêvÚV…s¤[‹‡Ô5‹›HÔDª`ô¡c+z¦]ºÇû9©ÀLâÝTŠ½×fµÐ§ÑáÓç3j>ŒY‰š.GÉÍQ·”WîËxOJÖ:í�—ôë‰ïåËJ”@­mõÁêÜ[�¿¨¾žÄvÊ £†Ñú³meesu­=»Â¶7Q€¶ÿY<žc_ÜúÞßF97Ýxò]õ…›YO©Ì-ìíÖRŒÂEèÂÎ¢Š’PÜ�28¥ºð$š~±ciåk¥I`‹PŠîÞ;(Ó×õd·S’ªS�:í—ÊF×�7Õ5ËªyvÊÊð'©jÓk„�®òŽFVD]¾ x3}ûd|%àoRÔì50ê6zk£é�"E§ÞB²ñˆªI$ajA?gïêi8½MÐ<!¯2ÞÁe¨ØØ[MÑ.ŸNcžk1wo÷GÇßöÿVG$6kÍê	õ÷™ü¿wä‰c»ˆÍ2[IðÆÁ]d¢ˆùï”G$ã°äé!¦?˜‘÷}Ï‰fÒaµó›á1Á§êsi:Ž�¬O{õD³’Þ3,üO£7«,‹ªÇðÔðÎß@c<^¯ÆåÏÈ*LkIÓ8|ïq[ß^EdÎ¥#¹¼’ecÈƒéƒM‡A‘ž}>‰;ûŠF�Î|OÑ�"Zjºo•´K
+^ýõëkHÖæø×â4­-è …,ò×˜É«2‡/ØÆ8pªiJf¹DIK¢1?59²Ò,×øäŒÆÃí(F§xà×Ñ¶U¯É©ž‘¤‡M“›ÐÁbîGBs(5¯¦ý{áV'çµŽ_'y¢	%ô’çK»¶i<ÐH€~9LÆí˜ŽïÊ�ùÊ]rúÏSü¶ŽÉ�¼ðjòß$Ë×Œ)þ4ÌžÈ‡ïÅÅí·ãÉãZ‘DMÙeªÑÛ©4‰ús³É†õ‘øÿ¹t€Ö1øêÏ?.üò-<û ùdCë®ÚßËs,¿ä°ñúD¹ÌûQ¦#E“áþê.ç±ò\¿o«awä$ÐkâùãÀVÏhSÈe!hz÷Â…Œç‰cöIÈ–A3¶�tí–ÅªIÙÝŸòGðÈË›(ò[¦¿©#?‰ý[`Ju'Û\!QÈÔöË"¨ûî¹x×õá’«ÚG—ŽWGÒ›c>j×ŽETÔñ(š¿¯BÊxÏ÷þ8ª>Gø×å–G’ œ'%cÕ«ý0ª‡»•8ªðÔ
+?ËªÒÀ8cö*}O�vÉL–i];
+SîÂ¨…x™äþj~¬R‰f4Ž©SÏ®W%cw—¼­)F;}9Ql�$;^ú‘2ÿ.¢’džËÒ=MIûòØ�šä7bºŒœ%OMéM˜|²,âÛ]�A¨¯_§–IÌ·‰b¢…Ò…òè”&‘H¡`,9ÄàU½ðõbYU¼O[vqA ¨ÀÐfV6™2eµ[˜o‘Ò?«‰"æàåOâ2Â1èÕ�Ã–OMM(¾`¥Vtýë‡�¢
+õÜW$
+:¼rE �G‚¢�
+68«½šHÜ§DÌW+—6A(iîÏT’Ÿ~¢\„—ˆéR~ýñTŽ•5ëŠ¡Ë ˜ªÙŠ.Ç®*ƒ2€´2%�Jo(]º³”É(?ROÇðÈ+Ñ£€Ë™
+-Êj¤ûŒ‰VÇAòÅUâïŠª¯ÚÅ^wùµ¬ÉZƒÆÔ›Pgÿ)š¯ÿ�O²Ú1ŸQ¿ãi:^ÝÔxX6ünXLÉ¬hqÄV}RÍaŽ/ï
+‰Ô?oK•sÚûB?—ÃCñ¸|×³��–Ïãbýzò„VÐù{LŽÎÝ-mÄhRè¤îßI$“ïžw’\R%î"(S,_µôÿƒ%òËèA5Çûáy~+˜úÉÞ:üslÅõ?7?1Jêž]Öt÷™­Æ¥m=ºÉ©“•Â2Š+ü-ö¾~Yç1ýÞ¢ÿ�Æ<Añ�šü§ùƒ<WÖy‡I–ÞîÝc†í%¨
+ð3EqèÑ§ÇÐüUÎ³ná�î¤9{ýýß¥¯'eÊ^±øû^kù«Vå}!<µ{¡Ë£hvÐóšîK”›÷h²¼f[dp®ñ–
+[áˆØÚa�Í¼]~]<£³Úÿ-ü²RÚ=>i¬´¿¨Ú@ ‹S—Ò,
+Q¹ñÍGhèŒò’6Ìr1€‰yËÍšÖ›æ}cDÓ`ÒõKM2X€¹‚I¥Y�¤†�êª%Šì;fÓGÙ CñúÚgžž]¨ùïÎîiu&±V(1•¿^dãìàGãõ´
+Fï¨!|©}ù¥¡úšåóZHœš;•FŽÜA"Ñ~n•Ì}Ggþ?k•¶ôÌ XyA[öÕÆ¤²M´vÂÛûÈXÔ/û
+óÍN]57‰¼À­›E<bö6(­+/÷lÑcõxöûy†0îž4£ô¯–ìI¨êkd'’¡³iãg ‚DénãöŽÃìñæ9Ó3ñâ!®Y7R·Õ¼±tÖˆšœ1ÃqÎÔ‰ƒÈ~(Z�×f<åE)SWeÜõË< ÇÅF<úSÂ’Å{§Kxó<—�,ŒÑ4$K'«Æ6ŒÄê‘VnŒ™QÄ-—É•Úh«ãi³NÑ	‡uÖ)#U’QÈÊì¤ò5+]ºf¢äaõ'þmÓl|½ªùmtÄ¸-¨iÍªG1ªÜ,ß¼gãÅv«>`ËUDG¨rc¦d¾qüÞÑ´‡Ôü»us$�é·×&ÞW²‹Ôu€ìÊ!21gåJq‘ví�'fFYaéün]N¤TßLè~@“AòÄ:ÈyÉ±³Iîíoì%°¸b$†´S€êO«Zž½A ƒšNØìLÜFw±®ï/7i¦—¤3ý&àOu%ª*³rp• ¯Ñ¶rÑøfääÌ½'Ê‹º¶ž‘’Q®" ‘ÄÔ6û|ó7FD²Øülãäú_lù5—Z“ýöÊ?á³ÒtƒÐê2sg¨Ì?Ê'ï5ËË[U®ø…~bJ‘y3_‘¥¬vàÈìx�¶½òn°>§ãŸüä¦·m©ù×Bµ´™o"·´‘Õ‘¹�ëÌÑ7}Ó6½‰Ëøî.'h¿O6¶/%}¦Ùä¡¯ˆ÷ÿ¹tS—îGãª]ä»©­ÿ?ü—t²G·ÿ‘ÐK'ümœÿµ 
+O‡û¨»ÂÉsüy¿D¡jqg…“eô4Ê7é�W±.Þ™û/ü2%�Mí¨:
+†[©&Ëé†(r2æÊ<•t¶pU‡B6À–Bò) ·Úï„*2
+Tt¡Ë"¨ÈÚ‘(ùþ³†J�³5r¸ªb¤ŸlgÍVR€ŒŠ¬N‡éÅPÓ
+|^øª,šÐûÕ–G’¡äûk…Pã·ÓŠ©Ä9Ë\UVAÊ5o
+ä‚ªÛ?6OòAÂª7¯ê8
+¥Ž�iÒ‡+’±]EX‚ì•�ÿ¨¶G“5ýïEÚƒèÀ”\7ÆÑ¬
+pÚÓ¿½Én„ü9\‹dB”7-I\žýÙñÆLeÍ“µÔW¶ðqôb¤£ß.Šw`çÑŽôØ{uËbÄ³ûÜGfÑ—I­‹�'ì°¦eãi“/²”ýXN’oDéþ°¯ñÌ€6PÇ¤€ú±Ê§ÊHýöüpÒ©]{i Uà>×ºì�<Õ-šã�ºšòôJ­~@`T‚ý�Oµ%NW.l‚OdÂT�Éö�šýQnâ@Ž ŠWå¶*—Ö¬ëJS¶* ŒŠqU)Ô$øb¨Wê2%�A^§4Oò\~¬¦IK>Ÿ÷e2
+ôHÍhs!¥s}¬‰Ubkðâ®AF#$åÍÛ#Š8~~ên‡¤/Ø
+%Ü¿HôÇêÏIö	1”½ßïž7ÚyúHüÄ,![ÏÍ�ËÛ"Åix÷³FÝ¥€ºLôh2£÷Aæ;>¯Ç›õÖÞ[Qm`¸ŠW·LÔ(jg
+›%È½¡Šgm0ŸáZÑzT×ñÊ­xRŸ7ÜýGÊ¾a¹çOKN¸4ÿŒˆñæ·µ
+aüw†x>·æÿ›äwÖ µš^Ýf·%=o«s�™’`“ãm‡'^‰œF‹QÃ“ñÜ^³n(½gó+Ê+åí3ÊwZšd6WÞ¦µœÓß,Þ•cåß´ˆZ5,ÊËâ†¹ÓeíH�Gãîq²hæeøûß›˜W>·žu8­�ù’[ä·‰®øýbKxHŒ;p’QV]›¿Eû#y¤”go;ŸGÕ—Ö×sén�èZ^¯Ê=[M~â5»Œ¤Q�Â9Fp¦Y9¾vÖ|È¶~tÖ¥“J·_CY¸3XÆãÐ�–B¼SŽÔÍŽŸ”9–#ù…©Í©[jË‘Î®ŸòÙékïJå‘Æc@�}cä	R/ËýF–â]:ÌYGu«ßBòÛ³[ó¹·14±n*b]³,¤ì[ |çæMOWÒÖÂž]ëZrZÊþ­e¸K{Ç¹ô}oŒñb€“Ô‚FÙ¬Ö›…ŸÇ'&#uÖ/rb·ž™lïm#úÅ…ØZÑÓ”³%xËöÒ~‹üsMô¶Llù[óq®›ÍÖšt Û½••œI
+rè“í7BÄuûºfóE€üwº¼¦¤^S&Ÿ2ì%å@>/³bq
+kµŸTžÌ}
+Fû²™e”GäÙQ;žlóòóX“JÖà¿0M<¶Ë1…!—„®Æ"‘‚þ›Ps“¥wÊµ¦>ÿ�×I	žŸÆÏ»on×ÍþqÓeÓ4«=ÖòÖ1Æ±Fê�	YU_�N¦›�ûç›žñäôã†BO?ØùïóV´¿ó/•"Ñ5iô	­žhâÖ’)¦p^>(`Ž?ß–-°+¿ò|YÓvf>~<Ý&¸úÿKSóîÿÊ—zÇ–<ÇªêÞiŽÇT½ŽâüÝ\ÿ§H³?+·K¿Þ1ýá|`Ÿ�â®Weêõ$˜Hp\¿·špöŒ±úOíî}ùwù�£ù¯@»Ô,¡–e4QKmEä^E8:ì~+ïž}¯ì‰érÞCøåÞîôòžWÑ—®$ó†��¹–h£„ò¡ôe,üë\¿³@–¤˜òý…ÎÖéˆÓ‹ünûÃÈëÆÎúCOŽàVŸ,ïâ)å+„3Gåó9d¹µÇ’˜é�/0üØÕ~©åKë5«…
+3²‘†Zýù^Lw[°s~&~oj‹ªþg^F–ÄZ"¯JZZý<«�7²>œRø}òt�¡õþ<–è0=Ì³;ÿº£w?x9ÒvO«$¿ôº}t¨Gãú·‘î÷çÆƒv:>®Ê?çšÿ�sQÛ0ÿ[ó›þè9ºsûØü~çé4f«ÇÙPÏÂ(>Ÿ—ê(Òx¨_–ekiq˜áSËFå·òåÑUKÉ¥OZäeÍS
+>PÒƒ§Ë*1¡ëß,�%GÄÀ-L*ŠWýÊý?¯©¶žkŸë9L•2�¨HÄ*æ5ZáU«^/_³–G’©JAŽ`½UVå«AÜ-xòÇêÅTÛí*xWõâ«`.1UìµU??×’
+‡Ò•ÏóS�Ý…\Í+ö¿Î™A*º—Ó8ó~ãÃ)!,[S’E(=Nß¯*-‘äÄî%v‘Ç©û©^"±¶~<¹ƒñ}'"M+¾»ef,œ%9|ò©NÕ}”‚T@ G\"T)YÆ�jKFOÙ¤åøaÄZËÓm´¬¿NfŒtZK#†–Ë#£Žð&ŸÃ2 ›ZÅµ–^]ê¤�s\™æ©óHÒ(©ãÂõÀ¨S+@toØþ\‰TŽTvçê�U±T–ü9
+ßb™È%|f7˜HôVû#ç�*Ôô’Y=N‡õâ¨'‡ªš®ÒŠ©ÊÁÜÓ¦ÇïÈ–AE›�®©R%õTþ9âU‚.-šAÐï“Ÿ%J>žÔÌuz5Ì†•dÿR¾ùªÿE=±UéöÓà¯¾H5Ëš&6¢°¥:íŠ~xÞúžsµƒþYí"�þ³ö/`ðƒ¤âüs“çþÔdýä‡»î‹üžÓ¯ï|Ûæ-GN…^]DŠÞ;ƒö­å¿œRUù}]WéÍ¯µ9+H?báv?4çÊÚÏ˜|“¬}]Öî.<ãuÉu¤IéúöS·«êD¾”M'¦¿º'™ý�¶¦pç%—®�ÝúSä=BóR´Žöî?JâHQî#ÚFP^”
+:×¶dã6Æ—~h\ý_Éz˜ÿ–·‚¾xÎj»fUŽ¿á�ªßyÂk+U}CS-?DF½žíLd¢[$�/ÂÛý…ÎCŒË/ã¹Û�W|OçÏÎý
+ÞãR}­þ¬Å•®.U—ˆ\!ˆHvñf‹éêzèö	ÌFCÈÿgèqcÚÔLsüÇÔ&Y¼¥æ­	b²±ÔtÛK¤žmNÚæy®§IEÇ+Xù4t(@_`7»‡gK?Ç½ÖäÔx™?Ì¿Ë¶özËÉuyGý1v¾
+(bh$€'àÐþ¡Ó9ÝN¨ã4z;Å¼ÿ\ü«Ô_žòÞp¶2•ìšIV¼”Czm±­Fý3a§í^�ÔãONÇµ?Ë¿5Þ¤±$Ñ=�ôL¥Èì90SøeØûv" ~>æŸÉÞï¯ÿ+¼égåmÇJÖ¼¯ªê—ÖöéÉfÖ�	Ÿ�–Uo³JÔuÈKµc/ÇìlŽ>W�uû:¯–ÛFÐu
+2ÓGS]¥òZ¢¬ï¤T1I!û>§ìæ»UÅŽMÐR+­>y´ïRÚYn&·†K{«	e-ŽN :ƒ4` >ÃâXÿx:f6›Qén˜Ùâþiü¤Õ|É«Ëæ#¨O:j
+\Ö(Ë83ÙZ+ÒFjÂä·û#ýâï4Zº€üwºùâ³o7ŸòÏÌ~ŸÖ^k¨�Ú‰cs«íä¸ý™@ÿuøfÄêöcà)ÍùMæY§{^s:µÑ·^vòI¸ž*¬Ãv·UëûY(v„hDóüy5�‰â¿i×“¼£?–õ+SU‘šÕÞ2X$°‚�mesö¢åXî»flDÏßŽNß±a—ÕøØ½þó_Ô¬5ñæ
+Q–¤÷Oet	uX�šÌúÐRŸÝšm¸ßzç5 �†ž\÷ûÝçjeU:å·Ü7«ÃæDóe¥ç’®ÚmWËÈ‘Þj1[¬‚ÎI�u2FÁ«³©Øm�N	ðãüw¼¾Xqäüw3}ò»EÕ'¹ÔüÉfšÎ±©J×Z¥õÁ™ž{‰�9˜…©,I&™Êö‡lkðä1Åôê÷y‹æì!¡ˆ6^é¡ùCMÐôØ-4�6->Þ+ƒs,0©%€^$ü[þÖrÓÕçÖe¬§îîò®çs§ÍOjü¥ÓÖÏÍÖ2Ù¤’ÙXÇ$qÐQ�+õwçþÉŽt™€bÎcøäYv–¬O#ñ¸~ƒù Ñƒ¿½•þÏM�Ã;i�¾ ËrE?ä�ÀS	k�$,ŒFÄQGíâ—’þt\Ekùw®N¿hˆ¿yãFÈqóæìß„:í÷×¿05‹‡<¸Ý<ŠãjŸó7:ÿe±Þ|>ù:NÐúÿO@Ñ¥xô[û¿çdOùWþjÎ‡±!¼>?¥ç»FTGã¹„þ\[¿9tHÏXu™—î’LÖvÔÖìßæÿºÓGýì~?sô–0PÃímøgÏ0©fúŠ.f+#ÔSõ9Z–ÄÅ¥Œðæ8TòÖ€µ:.][sqÍá?×‘—5M¬š�\
+�$Ý2ÈòTÂC
+7OÙÂ¨îDB€õßõœJ§šq­°>ÿÄå2TÌ˜õ4ýX…Wr
+©)…Tßìªÿ>ÿvYJ¤Û‚ŸÏü6Â­[ÉUãáQøâ®‘Q‰S×AÈ¡j£ ÅT”¢šž­Šª’¨?g¶H*ã‹·(~Ð¦X·+ÅÂÕ€!Îd»“@íJ95#ç•È%‡jœž"ÍË‘û4é˜ÒæÙL9£œEs#¡4^§®¦-½Ñ-7W¡_¤ŒÉðo?Žj‘ëž_–ÞÖI¾)#x‰zt¶bãÅeX÷”–f6NåÄ,‰÷Ü~¼³&
+*õ»žÕºð@¢@¹<'…¬½“Lo^É?yýðVü3gÄ-¤¨‡ Ü†ËqðÉòÃHV†üG°ÿzÊÌííBqTÆí‰ûÈ›wä×CÜ+Èdæ¼§ÃíAL‰U†4­?˜~¡Š¤Z„ƒ÷ª:^D²p'«(§Ý�(Y¾«2¿Ú®øªËuáŠ¤²�BâãÜ¯êÈ+V±×ÇP…¨÷Èª>ñ7ùC'>J’}Wþ%\ÇV~©°Ì†•@()‘*¨:bªÑöÈÉ�Utj1åÕ–aFWÄ?œ�O?j�ü‘À>øÓ=ÇØÏñ,çº“æ¾ÑÔKá÷­Î(h­tß™ƒÚ ¾¹Ó´ç”­BˆVii_ú8É{C+?�''±áQüy¾™ƒòkÊ-­
+kô@úÏ?TF¯@KP×‡lå1ý!ÝË›Ø-ßF†Â@³L±"Ä�6èß,šçEÈ]M´–ù¤
+}˜\tú3›öŠu†¿Ã~œzŸùžÊ×T�P°¾S=•Ú<SÂçˆn]Õ³Î4z�VîˆÙó½—äåþŸv«k¡Á5ÍÜá"¹¾‘¤@í°�H©Î�¶Ý3©Óv¶³<è�Ãõ8ãT¿ó—òNÃÉ~^6Ö:u¾¡q¦Ë
+­­ËËmecj§“]/)K,’c®þ�9ú›ñÎ§A‹QÇr?w›‹¨/0ü¥¸œ:T„I<7U1ÆŸ	+éW–õøZ§1»g¿5"|¾àÝƒ/î€üszÝ•õ¾¡wwÐ}_KÓšíìL‚’Ôz·Ê5¦iÌm€­Ðl~·�¹qK‚#’1%X+Ž-¿ÍUS-É–�]Ktð–HÌ®¶æµ<C´rœŸZ§s×w"Â5c’=RF5ŠIÒ„â¿ÈßåW/ãˆ–ì;Ýy»ŽÖö;;ã¸š;X�Ã4tZ¼jÄ/°­¶d�¤xH¹55·�L†Xï.9JÝx2ð™Y�7(¨O¦�Zµ+~Å3' €×(ÑJ/ šÑì/‡ÖµFÔ½D‡B’~0µºÇ$,
+ñZ*ÄÁ)O²[¯\ÉŽ¥�.[‰ŸP»±žÎK©!·šÞÛÓ’(¥u7q¸fÜ‘;ÞõÉ‘&Êð±™­`ÖCik§¬zn‘ê…¹š^;xíå�ºÈ þîÕ;drÉ¶&˜Þ¿{¥i:'«k:™híìm!I®g”ðFP¥†íï•é1bñhóø÷#,b·äOœ´O%ù“ÌVÞiÒ|Ó£ù­ãú¾«­Ú_ú2ª³’¶òéïJÑI!RyÊäð¨ <F÷Y›_ëòjÁå4÷;Û½U×®®tm8ÚØÈPÂaBÑÌx(w–"^§Ã¸Û<ÿ´²G<ŽHò?°;QˆbôŽŒºÒÍN”ùæ‹	©+Ö?,ôxc×.o•+!±™	åOïdˆtÿa�_dËøî,2ËgÙÞX�WE´,)%Ê´„V¿i‰ëôçm‘ÒäæÃ¿:<Á¬ysÈz•Ö‚Å5Iø[Á/tV’?T¯ûŒçH�*<Á®ùkR{«½kVÔ<Íªù‚5Õã»�Ãe%³Dž¬`ŽI=nTdÙ;ý¬ªúŸóë\uü¨Õ§W•ÌU€R¼‹¥GÙ¥iÇ¨èwI°�ê/Ãë9�Ç˜5	‰©ss¿É¡Ã;ÎÇƒñÞ]hŸãÉëzTž—–`Þ¢[¾,ŸìPfÿ³Ï£ñæè5bµÿÎû›ò½�Õ;tˆ"^(.Ý€ÿ^Ð±ýyÌv¯übeÿ7þš‡þ4ãø_¡V‘,OZšýùáƒ“é
+tÔsí˜óBûi8¼gù†B
+�BÔ¾[%A³r”ŽTâzcJ™ÛËFåê}¯á¶ISˆáu­}ñTÖ)}8Èñ¦*˜rä±U”YŠ@*ŽSUeùb¨–Gà)Ò˜ªš‚×XÿoèÅPöMÊVOä¯õÅW³/&¯ZâªlA1T#}¬U
+(õl!\yoöc-Š©²\W­2ªîßÕ*=ðR¬›@[˜E>Ðûxøv�Xî½åÉ¤ÉiýàP|&Ø–ciª¶Š#”ú‚9åiÏûè 4ûÀ®O-Úç:(ŸËß1Yy–
+JÚ·FÆCØ��ã™GÌ<FYåß-[Y_ë7[žæŠ¬:P¨ÁÃA7iíî—,¾ƒQL`ïMÿÆ˜TÿGY-Ò89ý²?VYŒzX”Âc4–ê ÕRVäÙ�!FÊ5�ÎÔª7Áôå‘5Ë›qÇ!’Þ>8‚õù4†®íÙx†!‡¨
+‘ö·ßdy$åf[Ç]è~×.½1JW¨Z©’pz$FEú?·"YÀçÐ*Ÿ¼ŠT§U(ŠŸdtÈ•Sâhª~Êð*CªPL%€}Ã*<Ù1½Oˆ¯á–¨HÔ`,JÒëéµzàBÞiÿŠ²°µ`q`Œ	¹È•\‚€�ž*³öÎFLz¢¸…>ùfe|ùË=|÷ª¯ùÿÉ´ÏoöCüCùßî¤ù·ooªŸÃî³ÿçô£iùg¬^¿]oÌ77ÿÆ8"¶…¿9GnJåøòv]™‡ãÍõ€PÕaöI%~UÛ4äìh£‘Ud�eô¿xµê)’Wƒ~r]ò¸Ðm¶Ú+™vÿZ,â½£Ëê1÷~‡3L7|¹uûÊ¿ûòAú³ƒ¶·u[1{Í)¥œBé,²†Û‰ùfN—´2éÅGô~¦0;SÎü÷¶¯ÂÏÌú›ÜÉ«JlíÚúáVYüiO&ÊÜ“÷l¿µ·\Ýögië5Y*?ïS�Ÿåt kúž�gkÅ½µÐ·¼»14P‰B†QmÙ‘Õ[ö€
+ÐçyŸI3ŒK'Õ×çä]P—ø_@h‘ÚC¥É”‹<×Q\xd’4�&eEÙþ?VrY§Ã'gìÊà°ú­²ík^f'C?¤ÉËvÜnÇö_±�Ç.)‚»LÓÒÇNÀª[ ò4`Ò(ä˜Ð6ãáGÛ+Éõª:ÃL–K{™âWš9½Id™ÙÒ,ìO¨­ðuéíL¯.šSÊHülž*Kôí:î{ËËŽ]MpÑ…–P‹Ä"*t�á¦ÛS¶LèçKÆ°é�s«°Sõ™¬áŽ8‚-^­#±Ÿ
+�òÌQ0¹nR}FÂXµ-:iZ(ÆÑâú½²È³+»;7ªË¶èAÌˆ”R2ÎÎHõ»ÛÉÌHõæ„¹UF‚	¾ßâŠîSðþÞHã”·	ác“ÜyZÏÍ7z·Ò1CyÌipú’Éè¿úBìÛ¹ø?k¯|ËÓé¥&™xÇé¨5=ZÊþO/ÿŠ´m.Þ’yvk‡±ŒÜ<e˜ÇûÒ­ö‡ìuÍæ§Ó�Þ}]yþ�œYã–SA€Égç_.Þ]ù‚ÚAÒ[™%¸¹sõÒag%^F?¼
+Ë|³&§Iªôþ¿ØÊ:Y`Ýö§å&±¨ù£Ë~³©X6�7¯$pª†T˜)eo¸9æÞÐNmD±cä+íÞítùH	¹ÃU)4Þ‚™ Òåâ“sÜ?-¡á¦ôðÅùE�ñÎÛ±¼üwS-Ëë!zNšƒí,	ú³¸ÈënÊÍ<æ˜Ö7q‰F¡§ÚÈÎÉáz/ä~�£kO¬COr´
+ÝUjÃ¿ç*Xé”Ò+(S5Îê½2¼ßU2Å=VÿQ“ù‹þ°ÏCìÁZÇyy�Q¼ŸŽç«X\+é–¶¤©/© *zþÓÆ¹·ìÏîÇã©túñþ�ã÷cä@º—ç—µâ·+O}?9¾ÕÿŒL¿æÿÓ@ïpÿÆ€üîÀJª(zÓç¾x`äúA@Ý7))Î�6ú3hDÛŠ0úd ©œ‡Œ@Ö¾ùl•­È3xœaÉSE<Bl’¦ÖÍÊ�ãŠ¦±ÿv?Ï¾*�y(#û_» mÓ}ñVikð@½~ :ûâ©‚
+Øª"NÿçÛCâ®=WBZ½AÅWøäoqU´ä½~Î*†‘ÏÃ_³ŠºVÂW¡é„* ÊJ,‹Õvl¶*à®Y]©ÉR¯d�#í)5ûñ¥S–ùâEíTÀ�Ò»›÷ºŽh�*ÛPûS6È–7tâ+‹k»©*­Ð¹ë–c–è0³i?�ü¹§yvkÙí­c²ý-({•=OÚûÍs$Ïdxo[ŠÞKÔFâ¼ißÃÜZj’²ÒH‹Œ±Ÿ�¿Wá˜ó
+šY]Ñë^—Ý¶Kô±)âÛq�cçNnf¦O…ô›2Ï-Áz¬O'îÿ›á­rØ�šåÍMåK+rDwùïO£%HAO+ÈñÈ:FâŸHÊ¥Í²<’™e3ÈßkÔ}#"”¢öFŠñClÈÄ�å©È–A+r ¯*÷Å(+��Ï"UUš¸þhë÷`T†î³Äì~È û…2£Í�@ÃJ­:Sl°%"ú„¯òœ‰X‹PWÃú«0WßîÅ‚$HŠ*z¶*ß061UÊjk‘<Ô­™øÿ(e�¦O�?;æ>xÔ§˜ðI`·˜æŽÁ?ˆ9ì>Éçìücúßî¤ð½©€Ë[3îÿr¢ÿóŒ+~Iù.ê!ÄêwwOg¹™‡às´çÅ?Ç“°ÓÇ„=í@
+´îûÅs¼•AÓ+(|½ùÍ¨'ø�Òg¢ÙÙ[Ç ÷’FqÿÎÚ8Îs�_¡ÍÓmO�¾³ÎB•¨ÐûW8ñ’x£EÛÆVjsKËÄ�®d³�§ŽÞ!ÊW*?»Qàzæ.+ÔÈc—/Áa›'£…ù»®j?˜?�~i¹‚Ö9l´Ý6FŽk…ýÔhÙ 5Ü�ñ“ZmžÇ Ã‡³t×uçßñït£OÆ_JÿÊ«óO›ü·¡æ­Fo0�ÞKMÒÝý¬Ýˆ„v1ý\,ƒ‹4j0YWnõÈvfqž^1þ/ÑcËîrOò—š�•u3 yƒP¶}6õã¸Šqº‡âg…™|_­TÕZŒÌn×Ñøò±øäÂ„½ækÙ'Õ4t}ì­mžS(¸äŒ·LZ¡}Ö&Í¯G!‚1î¿½·Ä²ŠÖ%y$ÓaFf…f’IHXJVÑ6?Þ»{ä±c„pT¿¹0‡k«ÝM�¡ºÏ4qÉ<(~õ£ûUÿ'–`èqÌ	F¶ý(‘”M×ÓÉk¥Ýˆáwž[I /
+|@·%¾™0öfŸ/«áÝæÇŽh»ŸL´�PYJKkÓ%ÉŠi
+ð�Õ"�ýŸöYN<#ˆñsLE›)~‚ ¶v¡uéË¼‘;Ï;¬p3.Ãœ¯ðƒ·L³IãžÈÉ»½óx°Ñcó¥t¶öóF‚&�R(E…V8£ôþe@¡zõÍŸ|ÙNßwsL2xaáú…åþ±yåmcÎº%óùGÌ†hô¥\Àe‚â8îžSé�òÆ›´s6ÊÈà #—m§+?�ÝxýþJür}gç_!yMÒ4ÝNÃS‚æêÆÒËLÒµ	dY®µ›äi­ç¼–ÙPˆÒX£2•ñôè)šÑÎ2BÇã“¼†/ðw!tO/GP"â«@ƒŠ®Ã¥Uv�sÍµYjnYäõ8D@LÖÌñL–#’u"Æ¢Ý]+I›!®Osü¿^:mü´¥nSþ1ÐÿÆùÛv6ñÕ×ê9¾¤¶�Ò†¿ßQ¢À€?†v;ºÃÍW’Ó,f¥èâ¯‚ÿç>|ÃúòÿÊ¶	©&³«ú2å�#g2}2£‹Ä•.L•~8ùNã˜’ZÔ:£)ñi(~‘¾w:(Vüs.�.]Þ�åéÌú¦�jZ«=ìkÃéLÚb�Œ�ÇÔêg¾¦'ß÷=ãòÚÆ!ù‘åÙV-�Üœ¿èÜÅÿç7íAÿZ¿Ï‹·ì�þ¸ŸÇð—Øò/ïeÞ¾™ãÿ¶x„>�úT¾väk”MœUíšŠFF<™¦3?îÍ<0ª…³þí~ŸÖrØòTjËCNt¯lŒ•5´û,µ¯×ç¾òTòºaTA•ÚX€é\¦|ÕŸØ“é¢ž´Ë"¨â¼Z3óÈËš¹ßáOëÀ«€‡Ú8Bº&-Í›©ë–EPJx\«øm„ª.AÅÈú~ýð*ßûÅð#õd‚¬~úÓ
+©
+PÓ¦H+qž1ƒÎŸL*¥êJZªj¼�Ó�ŠV•ª*<rÐ¶…”}¨¨Ã—a€…´šD%œ¯:¦Ø8VÐbÊ`á™	zž¹ ”E¼CàZPø‡Ó…YSºG"B‚‰ÄQþb¹`;1*Q’…›‘#ìä$P¥deñº¯¦îL’«¾ÃéÉÀì×.l±½�4¤!e¢¨é¶Àý9p(FéëE1*òf‘ä�¼@L‘bX»Ì�JóÒ†»ŒªM±C\Ý«„âÔ.ãl‹$½ÊDÒ’k%jN*”j­ê�SØ~#>L‚M¨ÊÀ½¨»})‡4«jã
+G1¿Ñ–Kšº'Û‡
+Ðð*XS˜m©N[}9©2J‹Q.tÌBGBF*´R¦Ÿj˜ªÏÞb¬ÅØ°qøœUTïŠ¯2'š”5ÓQT{°4Éðüå}”¶šÇ”®ÙÂGæ�öiMIÝ,ÝL²�à¢jÿ±Ï@ö{Pc§ˆ÷ýåÑj°‰f‘÷}ÏÕÉ‹+=?ò«òò×O…mì—A²{x�Ô–%“¯‰åSï™º™ñI£ áPÈl`v^¡�Â:;(o¾¹Qdüöüø¾óÄžaó^³å	l¡…u;möîêÞIä±Šk'¸7qHÿ¸ƒŸÕØ¼›~÷àøóòðË�ßãg/Ñ!ó£¢\y“I‹Ë¶«¯øwDmjÚ/z›YD×´fÝ· ’w'®p}»Š§_ŽŽvžV‰ôÝíÀ§"È=F4ßñÎ_'¨Ôy¹ÇrbZžœ«,Ps
+ö—Äøý‘¢Ëž2©¾lãŒ™µ6ÛhOåø¯"[FšgŽãÒO]Ê*<+?÷‚2«SlNç:,½­ùhÇ§ã¹Œ¡eóWœl¼�äívÊÿÌº"jZEø»7pCÅ¤±zÜP€})ž9@Øü;–?u��©üÔ,þ9û»�v¤p°ÿ)\êò]Å�u»�WN±Ò.¯5¬/£gõ‹8¥¼–R‚�OaWâh:fÓ&ÏÐàÂ}Y¦‡ù—¥˜ì[_²½Ñ®šÄ]Û#GÍdS!
+Ö�ÝYãà>YÏjû
+y
+Gñö¹pÔS+ÿ•£åbªnmõSo/ÕïL¶ò¶uÛ„œv®Ûf—Ù�^9Ê1å·óâœ�¬U¯?4¼žÉ({ë‹n.¨}kyTîkáJSÛ*Òv&¶_æþ´þr*Ú×æW•4»yl§5Åé·Kd.Î³pò,A^D×í§^‡!Ù�‰šGŠ|þ}Å«&pw>çÍ>oó^¹¨ywË†‡}gi!»Ò/îÐ]»	ëAêËom'©GävÚ¹ÕáìÈc—«ñö¸£Qe"×ü—ç/júÞ±Õ¢¶úß–§¿Ž`”Ê¥/ah—j	bxöëÂ¹‘ªÕáÓï{~(x²§šù†O0ÛêÖ×7ÑÚÚØØr—EµÓ Y$‘ÃsKm
+íÎd…D£¶ïßæ†ª?s�––�¾¢ü¼Õ!óG—ãk60Ím3ZJµä-æJ¬Ð+~Òš§¸¡Îµe-4Î#å_ŸÞí0gñ‡{ßt{1Æ»$hªŸê�Aøg¨õs�&[\Vž(„iˆä¨¨x„«)ë›L!®OxòivªE
+Íûªˆ?†wýƒÝDûþòëõßQ{xm÷m›ù“¬<Ý™³XzàWå÷üü³Qô|·ù{cþü¹Ô.äJÛÿÍY-¯PGã‘kË‹ò£@V†hÿ�Õ�~,œ2§C–½Ës•ÕôY™©]«8÷ŒrÍÎm°Ká÷¸@Vxü~çÕÿ–q}kó
+Öpj„óÿnÄŸñ¶ržÔõ«ñüø»žÇë‰ü	}6)ÀQèÝÆxž/ =ä¾¤3Ì5=ÎU6QFF¼J¯†F<™«\¿�ùTÂ«"þé¾Œ¶<•Z&¡#%O,å�º³†<•:�YhG_ÚÂ¨�Á®¡¦S>jÏtþÉá–ESgÈËš¨àVÇía
+¦:¶YCIýäNª¡7fçJöÀ¨Fþõ÷¯ÀwÉZÍ^#ù@ýXUq.G0•¿Ë$A‰*I,hFGÃP€ý‘�ªGtyýŽÙhche™ù&ß~Lµ'áº_‹hÔíÓv®´%ÄÍR²‚ëZ=r%¶<’ë[iî'‘x!Œ”_
+œ“Å„ÝJb‘è¾™*1¶%,*#Ø©(¤1>Ù\Ší>é>+Ëˆ”òãÓ®Jf¹se6÷±$ÈkÁ�Ç/‰Beg1ißâ¤ÑŠ%·ó+\¸˜”“SWŠRd_X1¬)ü¾?�r¹6Å-oL»/.(@“�…ã‘d‚iÕä‹Écèß<U+»oT�JR¦™òd(Ú�8ðaú†SiL.G?«{°ýYd¹ªØ×Ó¹ôÿß�ü0*÷b¾·ëÈ•IYøM*ü[1éÓ­}Ô>ûøõÅTÃP–ñÅVzø«0Wß
+„Ôƒ‹\¹¢OEÅ
+7\dv¦Àh-HRW>«ú6Ñ-ÜëÚ%�7ûÊÑã²×(ñ?)?ç#üù�ÿ8md‚ø®�åÛg¤¤B�1Ú&ÿ)îNzbi(	~:ºl¹|Òø}Ï§|«ÿ9åiä?'èz¥ùu5Ô>^¶ƒOKË[åV‘-ÐF�éÉx�_Þ£¦mµ�ŸÇ+ü}î³7iøÓ¯ÇÜõïË¿ùÏŸ'þak�åë#k–7±[K|÷KhÖé<IæA?ÍãšÜØx	
+ TŸD�ÏmÆf-ûgX–°‘Z¨¨ãµ)˜S“‘.O—¼ÝæÿË¿9?™ËP×aý#{,Z°ˆ…¶>“–h¤³||sY¨ÐŒ²2ü}í˜²Ôi�hÉä+uú–©¨Cl’kÆˆwžÃ5y{Kñû\ˆæOÌ¾EjÌW0ÙFÜ$y-$5`xõ]ºŒ×ÏÙØßãõ³üÂ÷ŸËˆ�˜ãâÀ2rµ”Q¶Cý�Çö§ó9¬tI~%×í�HÜ<2 ¨é¾cçì*¿je¨¸¾"üÔü¿ó‡�?4-ô[hY<¿,�*y”TX¥¿£ß6ë"7­Aï�ÏgÇÀÓÑün\8‹êO#é>TòdRèºµ�Ôú~¡–Ètå¶"–ñ7¥¯q¸YXp”¯û­›1qo;	áˆ
+üÌü±‚âóÍ^o–Þ(^[Û‘¢U„ÙDkM¸¢QNÃ#¦™Œë§ìqõ¼ÈþNóŸumGH´Õn“MÒ¢³»Õ´ÿ^�ÏpæV�”~¢ò!%"¼[:ºƒ³…�›}áù“¢ùsXò=Þ� Y$ZÏ™-l¢2GmêÜÛÙXQÌ÷>…¿0ÎŠ‹zPo×5z�t‡ãö;Žƒæû�Ëÿ1h6/ú?FMB–ÖñO§ßÙ-ÄR¼`YÞ9U ¶­3OÚr”¸s^\WùYæ½_AüÉ±óåÌ÷šÖ¢WÓº›•Ãˆa[y-¾ì=_Úìf×>IF6ãéeÁ'Õ>dÕd×µ.Âk]<[hlöm¼jÈÖð›‰'uõbÞOŠèîÝs•×ä–@eøèî@ŒÏzM/“4}bÊ[FÙ.le§(þÇãùËÇ_¨Á+ˆû¿S9Æ3(ù7Fò®�™¡ÙÇefd2z�ËHX°ø¤ø»÷Ê5zœÚ©œ’æ}ÝÂBƒÔmbU·Úý¯Ÿqš¼‘Ëø¦v
+gosÍ½14ˆ�/‚¸ûòíg)ð‘øÝåLÏNò§©}s+ë/oqoÍÓJcðVTˆ¿j WÔíZvÎçg@FÏãípx¸KÔÿ/àçŒ•Rž»H¥� v7~™¹Ðaˆ®_ÚÑœƒ»è¶§&§JœÞHìàŒÜ%¬ª0ÚÛ8ÇÔ]Î›d¸™x¢{?'?çåF{›ïË‹8þÂØêwý‹B?†diO×ðhÉAù�åè¾±jòx²ŸÃ7°ÿŽ®·+>òàHµKrÿ²—L¿E¼ƒ:,ƒ‹¿ïux�l‡Ý÷>·üž‚žd¹ùgÑà_ùªÿñ¶rÞßäáÀãœÿeq™f'Ý÷Iô²17¶x¼
+DÑ�˜0èze©„@²€z®}(ê¡xÿc!&Ø·ü?F!J"�¾XP�Ûš°8Ó�Û}¦ÈÙ	â¥Xx}n*õ®ù!Ý7oAÓéÇn�²\•4F¡¦D«™y1>8«DR6dy*šÿx>_Ã
+ î�‡ßo¿U’m—åŠ¡J1oæ¦H+C ÿ\aVÙ©ƒÜä‚¡‘þ%Â©ÚPº�b]5Â0#ö?c Ð–/êä�T{F#E‘’¢HÈ¯ÈÓøaT4Öb_ÝÄ(:‘Š«[@D�û4ôÎX7–X”N?†9?›ÇñÉ•IµZ* rj­¹ýyITŸOÓ„)rK•E4‘ORGL
+ræÉô°’)†Kuq®â£,U¹�lïÖ.,²;QzR™"©mË‘k*p&%w(OZ–$þ8Œ†i˜�Àòl6G’ À8Å5äµÁIIî#ôª|dð¦,‚^,Ãœ}©TŸ¸Óøb•€C[ƒÔ2%WI9xŒ
+‡aÉXø×"U ¹¸A�W3Q)óÅPÅ¹1U.«2Väkã‹~DP³‹\¹«±„tÅçñqð¦D�ÖGg“þzyÉ<—ùq¨¼2pÔ5÷6–Å>ØTãêöa×þ7½™ŽÏãÍ¿K"øòGÈ)æ�gó2÷ÍZh�SÓÔi°Gsö¬¥»Y•ØÆª>œßæíÊøû…Ú/4¾póxÇš4;¨$Õ4kÈLwVm,r¡ìÈÄì»;Wãb³øÜ¼>£Gàd¿Ç&yÿ8§åÈµ]sÏÏyh—PŸ/¶“qµ9}rQD§ºFÇ5úÍ÷ütv˜eÅ»î�jóÌzF�$š&�ìÑÀ¿T°aDä!»qéÏ·NÙÎ™nåË“Ï¬ìüÇ©,Rë>_·Ñ§Šä]B°¿!$Æ%ÁÝ”,©Ëü¬³Ã'v°´™oÞMWO½ÒJ‡M•m4›ÙgW[È‚��Šüi\¨‚bZÍ¸Ðhöövo`ìÍ+¥Ã9D¬ßïÔœDIÝHÝ˜B–adŽ‘€¢5’¤SE6,fŽââcqêA,KéÚ¯
+5ÇÞ§|‡¾Ï‡Ò®mhÀéñô­¬å³ÂÂ¢€›Oç%’ÑßÕšGô½o…h==“·ÛÉÂ&›Äì¨_è–ºõ�æ�x„Ûjð›k®
+Fáp8U~\³í‘r›a¾Cü´Ò<‡ªÚ\÷—×:Ó¤÷ww�J+q‚!Ê&;@ß6Õh£	 ô9â•Ë¼Ó)Ž6o©HÀsKzì¥Ô(4
+²ŒÒŒƒ|òP@RYe¸a
+ßÞ¹ä	?ÝïîrŒX£[_‰qyeßäö•'œl<åÝí¬öw1ß~‡�ãH^ò.GÕRÛïË|Ë:Øä?�¹ÇÝžYÇ~À]Ínö7îÜf‰ÜI/�©—cÎœ¾œÂ–™ÑÉðåÃaUnu­/Ñ†[ÝK[úýìŠ&oµn¦¼VOø­ENX°@n>ö¸Fd«K©kQÝˆb½
+pt2IwâÛÐvöÌQ¤Åš\@l}ìæL6yæ¿æïÌ,ê-ª¥Ùó–d©½²Ð,Ö£ýøŒ±3¸<Úàì,y:}ÿ­Ãž´Çñû]ómµu’Hõ[Fh™~¯j�"¸áAS$.�ëÛ~½óSØPÃ2GãílÇ«2�°Ÿ>~~ùûÊ÷ö¶†îÎþˆš{c=¯1±ôÀåŠOO{.Z“Cñö¸Z�IŠ3Ëßóšß›Þ\ŽÖÞÓJò¼‹j¼`ZÝ‡"µ5­Ò÷öÍ”t“éúwý.&=a�gÿÏÅ?6#<®¼§å«¦ý¯J;¨ëÿ%Ûõá»wM/ŠÈ4ïùøçžÙéwùo¤J�ý+¹£'þ	$?ðÇ!<œ"�îŸ°ŽiWãïfÖ?óðûùVi/?,á·KXyJjd’A }¨k‡M2ŽÒöté£Žžoš¿=;çüö¾f}-/ùnú/¨¥×«/úD†1#ì¿ïÍ¶é™ØáÁ,ƒú¯,AwÉ^Nd’ÞX¤ ú2¬;Ž‡éÍÌ?ÅGã«�•˜iƒž©cÿn�ÝÎŸN8ŒG½Óç<&GÜû?òQc–ó^¾“ºÙÄ¿@§ðÎþ	y8h{ÿÞ='±8ø£#îÿ|úŠë@>ìòRhÓØÀì¤„*:`«d��àå�PGTºânr¢ÿ.U&Ø«FyPâ£í–¯\(d– )-Ú1VÃÍ)ä”]ëÞ‚M/?BÚx·ó‘ý¹´Á¤ãqrI¯%yšMuÔÝEè¼²·ÕÛù‚1_á�ÏƒÃ‘‹v#qt±OÜ3R›š�‘#0f)±4ƒìåAZ™ø+ûœ*¹MS�¶YJƒ+ÆPpª
+î®V¿eNØ«¥xý£Ó~˜ª‹¸ç
+E:ä‚©<•<|WÝd‚¨ÆÜ^¿äŸ×…Sg–6€Û ®H1(Y¹Ñ)Ó-`Oï?†H*-Ì¡7jz.6ö"£
+£¢$�š“ROÓŠªþúB$äügÂ›e�WK<p¯VzêÇ¨=ÿ™T«\yE“ÊQ‹’´‘z@ÊJ¥öèâÜz5)ÉH'­Hþ8åÍ4Óª^âû¹$;Ë–5=´�ÜKûÓ9%x±û#a’*‰¸Šà¤BWšoÇ À©/Õ¾'ø¹ñ#âÉ�³dy7(å+ŽØoô4”ŽõU\+
+zeRæÈ,BªÒ”û-Ø�êFª±øøï‘*­zq·úËÿAƒ±r:r%Xþ¢¥dˆž¸êWáÅV·LUGeÊI5?g¶,	JíÓVÅW+ì¨y}ùÇŽ‚ƒ±ø>Oüæž_0þn~Zym•›J´o­Éèâõ™?äÒ¯û,éôžŒUøææöYýÄ¾yb‘®tŸ>kŒ—ß�59Kž§ãŒÕ˜�£>Äwú¤Òïˆ|~ö;ù¹ùm6ªËæo/Âú%_ÒVcíJB‰Ø€Ñ™ý‹Úcüyù8z½!š?þq£ÈÖëeçË»Ë6¬ÜÚ[J�ÑZÒ)¿O­\èrë†Wã¹ÁÇ¦à�>�ó/åÎ�æ»/ÑsÜ\ÚÛÉ*ÜJ¶súÈ
+_µnù®0²ÎøVi^G·òÚGoku-Å±–Içk“Æ^oF‚1ì¶â§¿\´cÙ>Iî#cÞžþ�£¸ T^þ9\±6�>_æý¡§Ó*ÄàáÚ˜(Ë€Šy�æ4Zµ�š&“m<×7hñY‹8½y�Â+:ü>Œü@—ìýœ8ñn³¡ä­;PÕ|‰ êZî…n<Å5±k­<¤hLÈì«Þ¥@'ARk‰±iÚèvº–—ëO`Út§‰+d©,ñÈ“ÒE_N&jq�Ç ”d=�ìzMÔ0ËÆ]9®¡�–hX¤íAU¡ú2%�PÓ4Í6ú[˜í®¦”YÌm'0ÜËÊ)cŒ8
+ûÅì|1J¬z<²Ènf‚&øY½BÜ™þ#»=OŽD¶G’.ëË+uo<Ë=¬éèÜBÞ›‡C¿
+4lwë×RoðÅ»Æ¶2Rk8@hlä‚ ˆcb
+8¯B<0òk—5-FÝìbúÅö§Û�õ©®"ÄÔÜTJ£¯¶$qSƒZÑ/¦‰-<Í¤^É3*%´/Éßƒrâ©ë|g½{d†ÏãJÞ^òeö‘&µv5›�lk—¦ìE{7ª–õý‹täÜèwë’âk€Ý^îÒæÒîúâá-¡€4…·Re~¯é7_žzYóyï�üÒ<¯hº„ðÁ
+…£ÆúÍÂŸT}ZoÝ'ûã¬’/ófN8q4‹ßj>Mó<‹vš:}Zñ¤–-@á‹Š¹QÌ3ÆAÛo‡ïês1ëum¡È{¿S�=?©ˆùóÊ–ú=‘Öt™›MÒžKI¢÷ŒŸ‰K)Jo›|·«Ë·êýN&L$1«(|‘ªÚ6›g«\Ýj÷w�aÂä¡k¨’ØFüà¶ÈÒ¹øñøê�N|9rÌÊ\Ï¹¾9†<@uý¬óHü¹Ôõ9µ‹�% ‘¯Ù­_Kå*E¦ –)ÃE-ÄžŠEd¤�#S�B�ðÇDÔâãí™ã;~>Æç.ßù$j‘ÞÚMo{b9›[¹Èe4!Æ‘CREÖo´a“B'Ë—ãÍÝvµ:˜ä røyÿE!½²·�Ë�©7›tË¶‘-^ïB¶1›™¾¶Ì’D¼§¯î‚©?»øõÉi»3„ßãï^Ôíí^cýž^LãJ…aòÿ˜m¥bn,ü´MÔsF8¤·7v…Y]@¸`Çn§+ÔÀC1�»îp±Ny1‰Oê?Ž�"òü«m{{¯ã›Ó”V»®Ý~ŒÊÃ(z‘I5Ë^Œ·„|¾®ÙÓö|8eˆÿ[ôºmnâ¿kþG[…Ð¯îY*.uãþÀqþæ¿ðJÎ%Úøú`õ>ÎÄÄ~<Þã,¤
+BÛèÏ9zÙKˆÚ„.ÿ„ŒSF�˜Á/CN˜dxE§…-sYã5¯¾SÆ“`&+ó(DÍS³¯ã™#C1Ëñöµ�O	¦Eg¤j%�ÎEô§á–ÇC?Çö£ókuÔ»Óì’	#0½ü‚AêIûð¹‘‡BD¬þ>Ö¼šž-žmæ¹­á€ZWÓ€DÑºxÄ3c8Ði€²òO(ù¦í|ç£ ”®ŸÊÇ¹j**Ð~4®cJ7Ú%R~ˆéÎ“Ä6®	
+Fç}þy¤Ë
+-æ|A3�xÑ|?®�™@lçÅ�ê¹+d¡€ü# qO»
+¯_æqT¶õœAÓ$XË!ëñß
+¨ÈÛ+6ßvØª�^,*Šõ¸p÷ «`‘„ÅÇDSËé8U3»U’/Ù`û²A‰B¤¡½@Ý8|8¡2•#,´Ñ’
+±hÓÈD•§*˜¨�}�×€ä§ý]¿†H*»JG$únÛÇ/òƒ¾BË^š,r~ùkêIÆ¼�k×Ju9�­g‹Ó ‰<)×~™YV´K„’+s*ñ)ÈÿcŒy5Ëšk
+I¥$ŸE/ïðŠe¡ÈLòß`«µK/ñ¦ÿ,±Q´7!Àu’ˆ£lhvú1V9$(å¿xj
+Mz×QF ½k^ÿ,UŽj/ÎEôÿdŽY\¹¶G’âUJõm¾ì	CH9Hž§‡úwþ8²
+K#™[¢Ð}Â˜¥BV€t2%�æ•êH�"ô!ßNT["’ÄãÓJŠuÆ<”¯&¬‡ç…oëŠ³PÁ…LX+ÄxÔxbªªjê~xªSšx4ûùíÅ'‚ÖW…¿ÊŒs�þ24ãÌGã‘k'êø>G×¯£›Ÿ–Ù“�ž£¥oÞ}>3ûäÍîoA§/²ÏîeðûËüƒ­·–üÇ¡ÊÜu/ùžþÒò?ò½HÚ¿H5ÌÕ†ÃÌÐêô;ã¼½ŠRJµEq÷f«1‹“�Š@i>fÖýmGEÐ|½tK¼†ãUÖÇ§Ââ#ÌaNR)ýž:œê;2ÎßŸÞ]FiúÊ•—æÛ_y“KòêØÞiiîd™®a¥† QLN¥�Á=g6r<-|J^hüØÔ4Jm.Úà"Ä}W’Eb^$r]¶-LÃžªž×²=ˆÇ¯ÓC9ËÂe{p“È‘Ïˆww19¿<|À*cÐ¬€s+
+½ò“«vÑÿ�Î/õöþ-¡~qù«Y×4�1´})#Ô/m­C”�eSÄú‹þüðÁ�QÄXký‘Ž‡"\^u]GN#ÞúÿËƒR’Æåo.´û‹f‚îØ âÅÔR.ÒH·Ý‰Í¤g³ær^NÇ$ª/ÃoõMÚiÞÞÞÐ'ïeURR1fˆ·g®ÂžS!#fÙÊ“«-9c‚Þâ$HCL³oñ>í¿Ú'®EŠù´÷’ñŠÅ#E¼!
+j¾¡w§Ã‘,‚ÃLôÖå½:ŒTSŽôßož)A>‡k}ÎÞþÎ›nQH#™kñÂ}hÊŸõ“"[#É�½šRJŸˆ’_jQ¿hSØí�,sQ†{îìtæÕ®‰+‚4qK*ÕA	#n}²1<˜Ið?üå�Ø°Ö|¿§hÒK¦ý{ëWºÌ1ó¶ÊñB%˜§ÂÄÀ¨ë™º8qr§ÌþFÔ5�æŸ/mFáe—P·4i	
+Yš+oC›NÂ,¿Yü–áôý'Nž)�äöopnZ°ã#
+ç]„›mq¾sÒ>§>¶No48/¡Ô`–G³ŽiÓ”�+ªº¤1HI�Z7	SÅ‡.¤å¢»QæùïóËï›-µOòÅ‹¼È�m5�çÕäX ¹K¤¶º†òâ@â6^
+êÍEzBœÎV9ðµ”jz£äO è×ryIu/3EªB“i6ÓI2Ü5ÜüÕY›×UâÛ~ãˆ'‰?9h–\††Ãà�–¶zE®™·i<šTš•²\ë‘A§Îö�—·�y7Ø'‰5ÜŠíÓ+ãÔ`ßõ'ƒ�òæ7åeç–oæÔ4ØçD¸p¿f²Zò,Jù�³¡ìîÙÆþ­þóäê5Ø‘#—ö>§òO™­¼’.¬uÍ:æîVõ.>¯7îá•Ásû“Zõ;æv|G0¸º¬z˜c;¼ó·P‹Ìö×7¶¯�ckè_Ô”ñž8MXm¹c@6Ã)ÀN(ða¶.\Æxþ“Ë—uuyÏ�(õ¯2Ímsyi46’ÒH­G÷òƒÜ{ÇÖv‡„?©ÙâÅ¨œÿ±õ/žÿ.´ÿ"~Lkw�Û Ô5{›RÉÓà™Ø˜|ç¿<sLÏ¿ñÜíçŽPÚ\ßió4¥ÿ.�+¼ÔæëKšÜ¡é~Q˜I­hü)$¸’ÖÝ?âËˆÙüK7ŸœðÆ/ó�vL<e÷ïåÕ‹é^UÑ#+Æ{˜Öi‡¼¤ÈâYä>ÛjÎ^Óü2/eÙšn�7£ÌüÏàsG”Tˆvqä«nµ!r´¦^”„ˆãïö³+O‹Æ<-92Q¤ÒÇG†9²Gê¸öÎ›bŒbÿ{‡=M3k(‘x�Ï€„Y8�²«$©
+U‚£ûR§.Œ Ç‰åþhÔQó"Vz$µÿ‹Xrþ9«ÕL†¿6ã¼'SŠO1ê:…ª�ÚÛ­&n‚[“Àø\Â‘ânœøM/òûXMZÚïÑŽ·—Õ‘Õ¨§#Ãµ4ø·»êïË�Mœê¶É ž=8Á,Î
+}3#2õÍf®æiçoWIÉôÐŠq§ËlÔÛ°ZÏ·ÒqµQpcþV[JÜ’´^¿µ’TºZhÇ}òAPpÈ’¯UÛîÛ
+¨™*kû±T<Ž+ðôÅUÁ&5'ìóÉnÝ€–@:Pþ¼*Éúž’ÿ,cõdƒÇ#�­ËªõòûñB{êFPŸeýC$”·÷d£§ÐÔþU5ž:ËrìFþª~¼�T9ã1I�}H�~ò/ô8U1oNé`nN‹ê!öðú:b©MÁõ­J‘ÌÈ•÷"¹YU
+5ín/	E¯€PðÆ<šåÍ5Òî¤“S¸s+l�-Oá–„&«ra½jJçÔ˜þ¯Ã,TT×ÑÛY]1j¡qÍ?Ö¯b³¹™ÀBP½U­øª*$SÎ‘‹5Uºõ8ªAu^f¼k·^¹\¹¶G’Q¨ÉÂ}¿w éÓq�*^K7÷HÿÓ¾,‚ÙGsÉ~Ë�–)R¹®õëÀäKÍ8V€×©^x®T["ÆUÌlÑþÂì1�%(„!’£¡®(ÿ\U˜Ö®Ç�ˆíôäØ+ªÔ×"U1�U$¡•Bú•±8#ˆ_ø&®8Ï‡>&¹‹|Cù³ ^èéo¤¥âØK¥jsä-zmíåô$å"_÷\È”Œ§í ¾tz}`Ì)óp<šÿÌ~qòÏ›nÿ04.CÏ\·Eó¿—Öò©ÞÍoF7ÏÉž!�¦fþZ9£áK�þ×Q¨âÈJŒœ?›Ö?ÃþIò=¾ŒÏû©õ©žõmâË‡*‘ÑÄŠëRÛŠäqöFÏõƒ÷þ’{ÚH2{¾�æÏ3yÅ´/0=»]ß–ÇV’æúÔ�Ž[€é*3¸bA4nƒ,ƒ¨ýáëýŽ6M¥L#ÉÖº—˜?0ûô\¶RYhK
+$�K¿é2ÕÑÔ(<ºôÛ¦Z
+gù¯o5‡™®U!k™M•�HÁ�Jÿ£Å_‰·ëš�_÷²ø}Ï³û!ÿø¿Îÿu'–HŒm'y­š¬d14�‹�iÕvÛ+U—“4üªŽ;ß:ùe"U@×¨á	©�i¿ãLÌÒ}o=í,ë³â=ÿîƒô;u*ZV�…:n+›)}O„ñ]±-nk†{ˆ­íyD�a»¬ÞQ0
+=6õ 
+ŽÙ|ÜxòO,´Øì­ã´†4Š;xÕq¯ü<š†½wë”I*6–ñúºƒü<ÒáAôþÞð¯ÚÉJ£qi|º]ÓißVúñSõo¬zž—Ú_S—«Ç+1µE[[“,…hUK­n[ÓÃ-€¨«×üååÍLºÕ5-E ±´®¥HÜ@’8¹ÕvÙÝFBJÇæ�£�OË¶·~a¸0ÙÝÛé6Ñ´2Kku/£ë«Ü|#Õ<—Ç:«Ã?:¿'´¿9ëZ$�}jïRÔ$k
+>e“ÒŽÌÒ´ß»mÜ|rèê8U…Áÿ8Ý£y[Îž]†ßëk©ÞÞ[ÜZZ‰£’Ù-£
+t²3*“Al'QÄ´û“LÑ’ÊÒÞÆ(‘HÑ‚1à	+·A”JM€Ó{Ý?PžvÓoþ±o¤kÛù†M;‘á,Q"4R«*£|yèÙ2O�¿?u'VÕot=k»ˆo.íäŸë0›9­¢V~B«%áàG¦\BÅI [W“§ìÿþ?Zaåï5ùWCÓ¼½	»Ö5»–Òbµ×�Í…ª$2á–ôÙ}@©ÁË–BÄð+Q•OYÅ'#/dÊ;þ>÷¥Xþd~UivÚEïœ5ÿ«éWv-õk‘n`WQ1‰ÖX­UY)Åß�6­*zœˆ7U˜OÎüß«y^Ô|½å`²¿µÕ¬ç¸ó~™ÖÒ¼[‘wJo{\#%?�eY#Ã*a	™*¶³o¤Ý\Zé7º�ì1Ã#iÑºM<\£–Xùs¶�©yc?ûYJº–|Ã¬[C&¿¤Þèb¶{�6ùà•¡q-Àc’¿�yPPabFïEò�˜¼£g¨y†ÒK¢©¦êUŽE‚DxÚã7­ ·PÕ¡4n›Ò¹QlˆyïüäOœô0~F\…ÔXkÃê—6f5OÝ]L‘V2« øV£~£lÉÃMøô�‘â'wçŒ³I$n)+KBdŠ’:ï™�ÖxMš�¦=?�µôå7‘®u]Z+�FÜ6›Ç5´Á¨Év­Hvù†ÌÒíñÁÁøéäãé»:Xùþ>×Ýöê¨¼�•54móÎ§—Å�½pØ).	û;`Ê8™Y´rÊ¢Xí çt4¹—¢ÂsšüuiÍ:eV6¤ERyª}ûçg¥Áàcîývé²›‘NqjxS2Ó«SÇ‰ÿ>¹(•Mnµ(ôí2îþG¢[ÆZžôÊ³Ø¼
+]M¿A_êsH·ò¿>ÓF\ŒÕO›hy ºŽ™ª<vwcNÔ%œC0‘„ÊÊ~ÎËð‘�UÍ{ÍwéÔ¢·yGï”Hò ä2|GßŸC·L¦|Ùt}ÿ8Õ5«]yŠÀÜ5ÓMl²<íÆ¬Áˆ?gmŽÙ“§Çmr}«ÚK§9šî¤5Ç5]«ÙÇÄ–Núý½ÎÓN¢N·¾»ú|éÓlæ|K4ìîÃrDabë'qËîËD(±	ŠËŽU­@ßèÌ¨j’V†²í”y%–Â“È1J™é'Ïøä%–¶AŠœ…Ô1	Q¶ø1ÌÚØ
+èò;¥b¢Óíå²Êm|;Ý°¬²’�â~§ÈŠ¤ÎYI·ÃÄª�‹$
+±èî¸ÜZò8PžÇ%}cÎ•N˜B§vRÒSÓs×-
+œM#Ä‚e§'»§€Øä‰T¨ÜµyGö‹‡ S%mã C;=ú¤� à—%cš{z¥kñõÊ¡ÍShbtK…	9d¹©EèÑIm1uz”òìL4ÉWÐžëS—Ðuøà¬•ë°§ðÉtg²ÍJÍ>«#ÜãB×¢€r'“4®âÌˆ!ž.UY–‰¶]<ëe[,É4€-c§'"†¤Óær&3Šø©&§ªúŠyÞ¿«#Äz²�â6Å®Ä’Gq'
+ú+×+2·(ÂÔ"�É¨¡P®GÈ@k�q+‰-d;}'
+Q— …5ê@?x®HrTµÚ‘ ñl¬«#Ó¹º-ü2U™¨¥<ëß ®*ôªEO\›Èˆ2%W¯ÚÀª…©Q‘—«ds,KÌVz­¼ö…�¾¡eqÚNž¼Mÿ!î|OC€Û¸vx|¿’–8™¼§y5ª\Ì!$Å>¿
+{ÇÓ×2çÛ&C†<ÿM1ÒØ¶Yo¤iz-šXhú}¾•coJÚÖ!
+s¥hO}·;åÍ˜›™ÛàŸ…›®�¡kºTzÌq‹}JÞÕtÉ§‘}CžHvQû<¸×:]$„±<þ÷S©?¼?ŽŒÞÇÊú}•ô—ÐÇ,†æÞÞÎüÅ`f”•üë™¡ŒKåÎÛe‡Ïr©nE¬­5qÇì ^ŸFj5ÞËá÷>×ìyÿ[±�þêO¹
+.In½8˜†D¢±’ÔoÿðYXz¼¼ž•ÿ8û§½Ïžôß]Ä"ÆÊk…‡œkìíûy™¤úÞCÚ©ÖˆÇÕßV28R‡&aQOÃ6RúŸÇ+¶¨À%¶‘‘�kÛøíUJÆü‡ü7¾kOAŠÓŠÔÆ8z�ìtÛ—½:eK»º±Ñ´›ÍGY¹ú•²d–k¶¡UYO
+
+½±
+ò£ùãù`g•aó¾�%¿kŸFáX³}aÏó ^'ýŽ]jõ=ößPÒ¡Ô À·šÞâWýÐh
+ÿ’ÝG¶2¬ÎñkñhU±¸òÃ_Iþò¾¨a6«/(ø<…¿{OOÔ_‡nL¹L•w”l<Ímeö£aåÙ'ålÚ•ý›G3M¬|Þ±ü-[–—ÓïÃ�w®HrVnš,wz=ù–xdÑL¿Q³µ–H­’UI’ÚCÂ•>9T±Ú£ÛK’}NÎùõ=AÅ…¼¶–šH�›Cë4nòzOñ
+úKöj5ÃtÚÈ}mJ×Jµ>g»°º×-ÔÏ©Ë¦‰cˆÇê·¦QføÛàãZ÷­6¦[Si‡jžaHìnäŽØÎ}yÌ¯,^™hš­ž�íTŸN¾Ù	"‘*üÎüëüË†}v½îÎñàµ6º®™Ïƒ[É™dú«Ë‰zR›tË#¥âr´ý¡áŸÇêxŠ~hj?Åd„�ê‹Ça·J·ëË?“úþ>÷c.Ý�pŸÇØúOÈ:‰çO)hz�ÜKum&¯!½¶!gx}ExÑJ,ŠñÑ‡©Zw®îÝn}Tr¾�òÿåç•ü©lgÓýK=VH, ¹Õ–âiLŒ®Š­»1Ü„Ú»tÊg.#n&Ýýí´6\šîÓÏ–þNií+qªÝ"Dâ8£’äç'ÄÄIr rø+Â¹"|¿·‰,Ú§Ÿt¿=[´J-µ#Y�ÜHÒ"ôø£¸‡¦ß»Ûl,€Iü¡ù‡å«?.j1Ï¤\ÝÞ¥ÅÔrB°o¦'›qÚ�ZeÊ‹lCãOÏëøÓò‹Êágõ¡›_s|8p�-bŸÓ¯ùRJ[éÌÝ&æœlâp<]'ÙùºÞÑš),¤øEÓ~t î{fV]s´=²1š—ãŸ“ë¿Ê¯ÍÏ,Ûé
+%ô2Ã-‹z­èÅÌpz�Ùéœ¯höYâ?Žï7¤c¨‡Š9Ñ³ì»_LpQ#Zü Qåe‡Â“Ž!e1y„1Ë3µRßâáï‘‰ñrpþ91�á4�yvÖI^Ü%^ãâUþQZÃ;^ÍÐŒ"ÿ|Ýv¦tÏ#ˆ¨©<�:æÓ$¸¤K¯×§\‚Q�5™ÝRß3\¡°ÒëXîeiî“þ+…wÿ‰e9ŽÍ±xç›™K
+Ôð†Øeö^Ÿ†k¥Í´<§Ì³)–in¬[Q¶Z;4aÙ¡�"ªŸÝ~õvüxäU�#èº–•¤è¶	6©¨ÝCÜ×W7š‡ôêŸlz?N™TÇV]½.Íü§­Kaì-,P$–æÉBz$(%J�Qƒ£„µÉö?”¯d×ü§¦ÝßÈežá^9¤=IWu_ÀÛLŒøãªâ�J˜<ÖóYjo-d nÙÄjô~­Üã•†K:|ÁåP7ú2ˆú…·³R9¾JéªKšBOörØreHUoNå�ì0û†I(Ë[Y¯„CÑŽ¿ß6ÿæ3;M£@=î>L”i>M/Hò‘‹mR3oÊøýnõ4Üº ¢z3*6SÔåY;0
+ÿ{f-^ÔÆ¦ŽkK’fŠ‚£ŽjséøØK‰3••à�˜P¸5#LÇ™E‰pÝ9QO=ºaC#„Šžu¤Â«^¸B¦z¾‘«ÑIôÀùœ´*S»h�ŒK'Â&PÙ�Õ0ŽeY&Xÿy$­XÇëÈñ+s‰&p’EÆ'hãAîNÿŽYü*•[G¿éH�NVW
+~Ðäyo÷åpæ®Ò/Úá®‹’‘Äy…9d¹©d:<Ñ}náöjH>�2a¦I�ÕõŽ—†NRÏtác�?½•›¤iì{åÐÇÄS{3ÍÈr[ÙG©kÀ­ÌäIm§?÷q)ÝDžô¦oôº1',Õî¡X_‚¯Üì>^Ù³à†?Os@ÊXýÍ¼rÃ,n·ÝO¾W,0’|RóÍ{B%LÖŠÂEËÑ‡sší^„Wü}®FÛ¼ÑåEŠæ2ejzƒÜ}ùÌÎ<2v±É²”%ÊHknvß†JÖíw¦²¤az§õÅVÍ!,ªÉR\�ä¨N ßˆúr²© ¼d‰ÿm¿Ìd
+©n€òêÝp*‡ë®*ÏƒPWù±`êSl‰dR§Ç¨;ìØ±)óíŠ'�èÅR;ÓU'ßDùw^—ËÚ”whyÁ*ñ¼‡Æ2hNghópŒØ¸·}'k%½í¼7v�ê[Î�¢oo£¦uxòŒ‘uR�|?ÿ95Ûù¶Ù…—Ö…Î‘Ú_V”iÇÂŸFjõ1¬„~9>­ì¶ªEŒéº“Áã¶–÷O‚ÚH!É–$’?E„dUª�·&™E=Þé¤=Gï{Çä% µó­¢(¢®Ÿ:¨ö eúxz­äý²ü¼ôü<½ýñ}´Ñ²Ç)ˆ–„*·Móu{>'1µÒõhÚž1OsêÍ>�$¡Û—­íü¹PjÆIŽìÅ­˜€q…›ÔÇ«F¿kéÅ›æ_ùÈëÄ³ü©º¸â.l'¸F
+Ïýí!Îý÷lp�Þ~;š²?# ‚Iîa¶©c$«l¥zõEþ9ÐÈÔZbýü•²¹ºò4RÍl·âköºX'~:É±÷õ+š¼’rÝKókôu²é¶zÇ‘õ
+BÝdŠ—–·²'÷‘|N¶Ò1ÓaÈý¬×eL4òM–‘kåñ%Žƒ«4-}¨ÞH—Œ^IfV6BRÌ‘’$Ž0àñ‡¨°Ÿ7¥ÚÚAm$Q´JŠ#n¡W`>ì›i";9U‰™Y„lª¯±,[u§e—Gƒy—Î^VÖ&‹PÓ<ßå‰×VitkO^dyn^qÂ{häŽh÷ ¾.?o2a…®S§Šë˜Ž4×Âh/q¦³èQ]ZêS+Û\¸Vânf‡—
+ïÆ¸|#ÄÀÍùy9S-Ä’•âÓÊhI*>3ðüAH§JSlÚaâÏu(ÖÎFýÒFIûDtË¥Ì¢/ª?ç'Ô,¦óèùQa6Çý‡(šj¯¥#¯ˆ<†kµ.L\ésM%ç˜®’Éîf‘¢YÜÉZÉ�(bmÇO¿|Ö·½Ì‘Ï—¢�ÿ*ÛÏ
+ÖÞ¢ZÀÄO­kÆ3Æ&ŠŠ(ÿ¯îñVEå
+3G¹†ÖÒ'Käîukí=¦“‚¢ÚDÞ�eˆ/î$sè� |2 ÿ•#å±®µ-ÚâïT¸›ÔW¶†‰oAâª�y:–âÃá¯šTÕ!m±•>-ÿœÈÑtŸ+yoòÿÊ¶ñZéúŒ3^ÞßX[z1²ðGÉmÿv9'·Žû×34xÌM¸º©[óêÖÊ9îÖÞY½f(ÓZS Íø–Î¢1Ý�yFæK-Væ³ˆáh§…™º5@?V`ö†Ÿ‹
+þ9‡w¢Öøg‡ñÕû¦ÊÍo¥}5§JM³ÊuC†oOž Kõi�Æ¡£èðõÔîÕÿŒq|g2»3b‹^cP§·é±ªÆ�~Æü~UÛ;˜
+/;=äœªuËçÍ*ÜI_œZ¹	A‹ê÷¡µ9ÙºAB¿ìþ/ã˜KtX(/¯µ�VàðŠÍà²„øÉ)fòg1%6Ù{0�_H¬·nàs_s¹ÊIj�¶[˜îmôq¦¤Å:¥~¾¿Þ»Pþ¬¦f› 6RÐlà™dÔæ•ÚaUú
+�ÏÓ×3»'ÔŸ”š­½ÿ•n¢Š`ñØjÄzU¢F?‰ÍÞp.Aê)�™ãUxîTÔ©ôëšnÒÆkñäìt’¤²ÊôÍo"“ÀÃµ|sš§dM–í˜#IÈqGóÅéˆ
+DŸ´ü2ü2¦=R;'M[Wxð·µQõ·þs@DHÌÍˆäËÅøä|Ü\ò§¢CÆ5@ƒŠ(WÀx}Ú˜ðìê¤l£’JÐâÅ
+@98ØjWvQ^ÁéJ9“RƒÃ0õšo9P•0»˜ç¶¹H¥,@Ú<3•ÔéŽ9ítù} %·$& h¤â=z
+æO	r&l"‰¬±»·$1ü-òË	³mQä˜BLŒÁ?d_pËTuXš+YÇÚ€~ü*Œº'Œ	=6?:Šâ¨»‰øB’þØâüLrV×Çy©œ¤v‘Ý?ŸáMþ�••M4h¸ßjÆ#Tkv”'‡ˆÈÄ ¦–ñþ�I59©ÂQ'FR?géËF>&²iê¿”žJMRëüc¯Û´°Bü´=º¢ôõ~ñ›Í�Ðã«…–v^Ñæ>|dø¸¡ÝG±ÍäEO)¾�¯¾[MiÏ³aBCrÕJö
+FÊæ-¶'gŠù¢ÑloZæ1Î	êd¦s�¡Ž¿çc¦(t*}"(Œ_ýY§‡':\ÔK\7Z?vÙ$)L@Ÿï7¯ß·á‹…e�Š÷Å	6¡Xõ$e3æÈ%û"†iºþ¬ŠT¿{ø×g�· Çúä˜*ž¹È.1J”ÿ`âÄ¤kQ\P”H›œU&¿Ž‹ËH_ì>L
+Ž=é›y7Î�åÉÍ�ìŒú=Ã0ý¨ýù·Žmt“uøêâgÃon¾ò×•üÆ`Ô¯ô�?Waú5åÄQÉÆ'Þ 6õ5ßß7§ˆxš1vœ°tý;÷*[ùOËÖE~«¢iÐqƒ-œHiÛ|–e—´µ2ä~ïÔœÇmc„qD´èª@]²qÅÂáœšŒâ¤~ä›\¹–ÊÎ?F‘É-ÊÇPµ wËC‡G¢èõM5ïLúï;Õµµ§¥0ª+Òrû¶Ày¶’	ÙquPÏqPaŠ)&bÔph*
+�0!ò�üåÝ¦¡oùg­•¤ÓÛÂ,-¤šÚ9SŒÊ7¶]§¶¬�Ì/-i—2yŸËðµ»¬‰}jáxýµ¿lÛå>–˜¿b?)<·i§yKËñÞÝßXj-j-b’oC„n��$a¹3 ¨þlÔHîÌ�Ø¿æf«¥ÇçO-hP~h]y{PÔÕMŽŠm/§*Ì®;yV!CQ·*¤‹r ^Éå�3R.èó\yª]jy­y�E¾¯ªÆOPîÛ'.~ƒÊ\ÙbÆc�°r¢…À§"?jžýqbò/ÎÍv}òÓÎw¶³{Á¥ÜGi2µ–X™"ÿ_'„\ÐNÏÂýSP•gh£º”[%Ë½¢;íê…ø�Ò»æôaÙÀË5=6æW/IY­Ú7�ªš�±¶øÇÌ#=’k’bÓ¨À‚Ûï×}ÇëÃTžnÒ��ö ~¬YÙó�ÆKx5½Bá¾­–¡\µÌ}Ùæ¥Éƒì;/ÖÚk½8½µþ¤ »Ô&¶-þ‘"§ŒòøqLÖ·½†çÉ¾|Õ¼»¦Åå¿9ÍåKÉml�äãÒ¼ky·-Ä?îXMýÙ=GvÅY®ƒ¡yŽÖæ;�0k1j>Œ&:B]ÑJA™8>ìd�=”’Àc?¥˜äòÏ�Î­ò§OžâÂI/üé»µž˜¯û¨Ù†óKáJÔ†ÄZå'âœüÝæ8ùŠïÌ~a¿ý!¨ê,f2òä©]€Ø›üX€ˆ.YÜ© ‡O»¼ç-¼ÖASEâ)O•°á}ùù?/œ®˜õèM¿–´ù\F÷—SÂTúkÿÔ^õÍlv—ƒwýe¢Ñxž·è¬ �PFŠßkÑWöT|†Ùæ³ÍâMê!�ÃsËî—ß˜W¬òÇ&ÈOøÌiüs¨ìl[þ<ÜLö}e¦tà8Óå¶uYJ7’f–ÃÍ.¸jm�q2Æ‡íFy¯Ð2œ…�`Ww>œ77R}²^A÷šf»!nŠI%¿Ë;û©Õ5/\0û_»bŸñ®X#û ÐNï×/õ»´E¼™"bƒ€jWãðÍ`;¶D[Ò¸Å<«Æ§‘©ßß*Ï±eLXžu½±XædB�T
+@~#•ã;«ìùÇ‰iå-e8•¦¬ÛS½¼g®oô[�øïq²szÖ¾=[Y‡ò±Ê»W§ñäß§•0m5ÊMé¢µvÎ&cwoa=ÌhèÕ­d¿-²,×ê:ˆ´Ó®n€ ‚9[ŸûAAJ,æK�;ô<¤¿¹‘œüª¿Ã;>ÈÃâüs.¯W*z‚8ÚžµãÝÀ‰°‹�þ,)Lc~™!²Wç’ãG /­£»‰ãu£°ª7Ë0µZQ1ÅÞÝ‡)ºyµÄWQ^5¬«É‘yÇ'ˆÉêpp—yŒØMEcEä
+�ýûþ9ŠJm§ƒ#qV¯ðË‚¯ë"˜ÖŠH?Mpª[¨O+=„MÕ”~b¨Á9xæŠN\b„ºÓØäÇ%K}5—Ô-XÁET�õnJñÊÊ¢<¿H~¼îŠÀ8ƒ‘íPHHb>¤_–t»¿?yª=?=K�K©?ì»%)ùæÏC�ˆþ<Ú5FƒíM1Ú/«Çn"ŽXã U(út@Œc…Óx–€óÙ
+Ç•G_£9q6ÄÛÈµvrpü9“T‰sct!dÔï¾,R[¯²~g”ÛË¼íÀiÌÇ¨a\Óv®:�'a¦,FÕ½k8›âàFÔöÛ9ˆrvJ’ŠeW¯Á^¹%s0Ò›bÄ¡%‘�zâ„¢ÿ’¤¡¾Ó¥OÑ”Ï› “+úŠ¿ä€2)oÖ÷öÅYÔtõ
+:vÉ0E"Ô‘,ƒAxïŠVÊû'ÈäK’N9r>'öM²ARËÈª„áV3$tgªOr:§:s ÓzG“¼í?—Z;[¦k�!·š?Ú‹~±ûw9·ÑkF8ˆþ:ù8Ùðñnú*ÆöÓS¶ŽïN¸Y­æÑÓ¥;�˜;|ßã˜ÊL `UYŠt(XQ‡?%IúÂ6<-S=_™¿ó’ó˜SÚjº‡’?, �¿C\úz—šå¤¥.b<XZÂ~Åª¥œ’ÄzæÓr·Çßó‘?›öú¬z´¾v»¾¼…È‚;�’F@”ÊÃ„‘³GR~Ê”ãÐJfQÅµ5�Ÿq~HÿÎK\ùÚÓYÓ5‹˜tÏ0.îá2=É…VHX†A$¬„:–£±ÙiA@1'‚œ¨JßrZ=ç™t[[ùÖÓ�õ¬›I-C…•©ëÂE¨ëCN™‰!E‘æÝ—’´¸¦#HÒša7+y…¯¤ðÆ:8~Múò,SK¨^‰çËðÂÐ¼ÑGõ©¨ò5O¦ñ�M©Zü�Ü\‰V;®~Zùc^¾�]Ö<¡§_ë�C
+Új°MÂUdVON-£Cöª9×� 
+Ä/¿<ÿ*<�~þNÔuÛ}*ëDw´m6Øz°ÚÇ
+	HgTmF?NÙ8éø·@ŽöÅµùÊ¿É½>8Ï› …åVmI}"¯…˜ZÄÁCŠ0¡èwß/Žš™Ë5‘þzþjùsÍß”R\ù_Vöš‹Ä«8·xy•í"«
+Fã<U“ñÜÓ,–”ééÍ©Çñ«únA×¦nÄ¸bãDYLlãÚkEÅ §û#‘½Ñ1EŒj!ÚÞ9QcSðôû áb¡iê´E…h†�\±­ß¤_óŠ6‘I¡ÜðJ…�–cîÓ¹¯5z²çb®„|¤+Ç‡â�
+3V!^·,CgÐ–(°Ù["5¯¨•âñ¬Ù”åÙ•>Rüíÿœ’´òž›w¦ù¢Õ5oRHX�¹Ãnè©ê›¼�^™8iˆk—7çG�SVÔ�™ïo®ÿP].k‰®$êx°¾â)”ÚàÃN$ß,É™UR’£Ã�@½¿Ï‡£w ³Ocü¿ò
+ÿšHÐK�oÄj·ßïÒME´~Än}óUÚ�¦1�Ç—“²Ðilþ<ß¡¾SÒíôÝÊÂÒ%‚ÞÔ*E
+tP;|Ç|ó�^_)Éßú©éqÇ‡fu
+¢r%èT­GÓ˜ÜE¾Xì1/Ë¸¦›Ï~u¿)X[[Ç'�&$þ9ÔöL	ÅïûË«ÔzM>“¶<jkÇjü¶ÎŸÁÖÊ"K„�ëß-æÅL~öí#�=²¹/A{z~¯2FjóŠ}©¾cå•Žå€ù†ø­›ÇZz+ô¨¯ãš™n\’6dšûÅåô6KÒ­ÏÒßüNd]cŽ­;¾sÖT6©¦¨J‡u5ù=3U�Ym‰z4�HØR”$Sé9�(îÜÌX5»²??×–D&ßXÎ?\¤~[×�½Õoú6‹7Z¤~;ÜlâÞí9K”qZòüòÝn.1øòc¦Ø¼ù£–ÞìFÉRŠçªÀ!�ßãgyñ]yët
+A§Ñ˜dEÈŽ&9æ›ÇO*ë7)'‡ÓAã!4ý#|pz²pÆÌsK†4È¼…¥Í¢ycK´¸fXyÈŸÊec%>ŽTÎóA§ð…þ:ºÒ²ÍÖjØÊ\fÚm0‚JÐäix“ßs“˜”Do±ÂªO%vÈvm•ì“jv‚xKªVUþìûf·]§â�'/O6;‰}8ké¸©>æ§9|°8äC·Ç4}¤ÄLC$Så�ñS—vBÌ
+	P !_,g$ÑBT3|@c›ùwé’J}m’+†xèÑÃ^½Ò2ØÂÂ¡.¬D�Æ¼X4¥vðÈK±½kPmÆþ;`ÂÿTe†Ö1ÙÍ\Œ1ú™T_KþZy.?&ùVÒ[µ1êš°7’žªÌI†u(Püyº¼Ó·§Ç"A­NeMTxÔ×63.0	Nµu,¼X¯Ñ‡)‚¼šùÍ^½s$1,ngßèÂ¬zwÜ|të¶DGÕjó¿7ƒ&›2U2_�ÍoiH‘øòsôØí�é2/è×áÔKO¸‘œ½kÀ"ˆ¼sXê•>8E„q¨Ïn²¼2HÒ*Óá4ƒþ.Ù	6…’<hÁj;Tâ[äU
+r"	Aö©¾D²~'>›©û Ÿ×�+éáŠ³´’ œX8>D²
+€ÔW¬•þ<+NùÄ¤÷
+Åª†)ð=úä‚¡.¢ª“…XôöõqV3yoÄƒïŠ¯„R5åŒ¨‚
+¤Ù�y{Í‡—¯=Ky�ÕÒæÜý–®n4zÃ>zæ�æ
+é¿”^{×ôË”µÕmô+ù4©¨¦_«²$Š?Évÿ„ÎŸH<_W{¥ÔG„?¤õ§exÃ3;#J	«�€±ø×:º˜ÊË0ó?•ô]KÐî´ï2ÃæK­N¸¼²·XLq	`‰Ö }Y^¥›‰¬Iºž½MpÉrnÉ°eÿ’	$ß™z°ýÿ6ŸëkB=A2LÍBOR‡¦TM+/ÜmX±Ò¼«mw/¡6S^ÊŸËehÁe J£5Þîtù«ikòÜÍ7èyXµiÍì²R’Í: qðíºñö8#®5ýT¼�L[éâÔl®æKki§†A-¤Ì’A)‹wŒ95Fë‘*ÏŸ�IÙG2Æí%rªêIqØ§n˜üü~ekÏyçß;^<‚úM[TšGpNBS! mö'7:XÞ!ñûÚ2åáÙãú«5æ§‡á[¹#`Éû
+[|œ¶h„¸Ëê/:ZiÚ?å•eòÞ±ú^ÆÖòñµ›/Fc$M6ÅËÿviÚ™�Çûâ?œÿÐæµÞgtµ¹GRQ›méµvñë›q(ºéO„©ýzÉc�l‹Ç%È+'­Þ§ör"5²ñqn­_P*ýZvàª9­h<pªá°-ä¥BŸ·ñSðÊ¤weý.ÿœS±Uò”ï
+½¼%Ÿ‡ÅËÑ^_�sU«.~ ÷¯6y×Ê—–_¥|Û¬Eb±°x¬Ùés+°�;W5Ø§Æx?í²ŸãOÌŸùÊï6þi™´/)#ù[Éñ°„ÈŸÕü€‚¿äý¬è4½˜¿ÇÞáäÎCÐmôÝNÆúÖ88Å’/í£Pýf«¥ÁçûfP²Iþ³(Èê"#��Ç&ìrâˆ,÷ôm«ù'óU‘ÊkÞ@žÎˆI¡¿´¼�€ðAe"�–Ji›å�Ë¿Ë+Ÿ:j†êOVÓCŒñšì}©¨ÛÇìî_·LräÙª1¹?A|·ä«/NŠÇN²[x!Œ,P¯juß¹'r{�ó‘í<G'ãÜï4³àf–VAoI#§€>œå²càô»lgˆq"ÍµÜç„víÍ‡PtæV�Kâµ,£Ë%¾�jöð’^yL×Sž¬k_Ã¦vzM0ÇçO›/´ÛÌZËizUíÔ‹4Ví$úz �?ËžÁÇ�|äŸ™þy¿‚îàÞX¡¶TŽ±’*d¶ùŠs³‘áÚU'æš¦y+|•$õH²©jÂd¾KÖµÍcTdÔ.„–ð©‘€
+½—lªy,&1¢©æ}@¬ËïG,ÇÃz�Ã1AÝÉ#dŽãÌZ¥ÊÅkw|ÒZ»(ô‡j
+ºGÒÒb‹³²’æê‰irj–ò?A¿LÂ­Údix¾h·õ-ßÊïu!<`xg�öÝŠ¶ã|LÄìˆ,ê:T-¨[Ãi¨ú¼¡…X9Ü—c”ÈS+@èwwZ|Ð¦§sc2\°’Ò�<Fä.Ù“§ÍÃ³»êÊíRK�.Z‰nLòE;r”’I­OVßn™¸„øÂ+…éÚÁpÑË øÐlÿ<×ë; åõŽ¿ÙÞäãÕP>˜ì¤	ƒZ×4?Èò¿Çër#¬K‰d&Ž[Óõ¦‡÷‘Ãû(G‡ëÍ¶—±¼?_ãïa—7´ÌÞ¨c!ª‰ìiZý7ø·êå+/(?Ÿß”Öº„Ú]Ï�,íníæ6÷1N&Œ	ñ#Ôâ©×ÁòÎ˜’õÝ+[ÓukT¼Òµ5IÇ(®-¤ÄÃ§ÂáœŽýq¥¶CÐ PP`HD,õ©À•¦J€pñR%ÉS‘`²ÊÏ©qÎ‹ÖíÞ)#¹‡ìKðOœïi`dû¿C¶Á=�V3#HþÎßvhc
+ÜÒvdàH‹À•kgd=k™$VÍJX@Žx…£
+Óm±Tö9\.mÞŒX	ÑL¶3 ª�'Gªž2™\ž»d%‘XÇ�4qùƒù¤�*¥h„ÜÎGNK™:HñJÜmDè>×ÖE¤A)ÿ'·á�N8PuP�•�²FŸ°Š)ôŠäïfÙ
+Ò
+bŒ¾¬OFQF\¼¯QL‚µÞµùæHbXmì¯r0«ÌüÑç]ËVó^kú½ž“n�Zî_Oµh‹ûG%ÖÖøßÏó•zÌPùwImSM†QkW2­²H@ú´*²¼€‚h»ƒóÊói|Fì:ŽÌ:çüäoæ¶'°Ñ¯ËmH0Z*™Ü
+ªf•™Á=v;{tÈcìpc�½sö…ü}Ï£ç<×«y‹ÉúÉÖµk½fúÇXqÎ¡u%Ë¤FÉ¥ø�]«Ðl6Íié!øòoÑæñèÇ¸æìÑ¹OÃQC÷g?NÚBŠ
+Y›—Äj<rL[5‘²\S"Y•ù$ò«tVs‹ñÅ^„ÓÛ¥q`¼tÅ�qÔ¢åRJœ•z×ªá�%C2ú‚¾%P+ZX”=Ìe�ìâ„šxRLU!¹·­N*ƒ†>$r¼Þøä‚‘jW¶ºj½ÍôñZÚ©ã%Äæ5ž�Ko—ˆx“j3áFiúÅ´š^££ê6±k¾V×àšÛVÒ&"H¦‚tàï.ÁÂî?ÕÍ¦
+Vm>_rîëiÔTáoÉ?;ySPòO™õ?,Þ¿úE„åa¹ŽOTK�$OÏ¹d`O�Û;}>o;¼¾HðÉ"�àÉ�žwcP935|3$€ÉŒ/wÜ?óŠ“ZÝÞ­/œ5klà·�¡ÓVhøóä»˜ÇÎ¹ƒ—%9xãOÒí6æ}ëÉZÄ2ÜK©%ÝµïÖß÷ÐZðšñeDìK5‹éÌn?Ql,¦MAÓDºˆÐôûY"Žg·Ô †4¸E�k#,�°Zï‡‚(|ÕäMJ=cÌ÷Þf’òê;­Zøj÷þ[ŽäK
+£j‘™Ú"ŠªDIBôû<°Km‚²ß/ÎDê:œ~gŸ^ü¼ºò.�¢[ýb-W\ÔDZµ2¤Hñƒ•šh�¦ò{S¦8ðÙk/Æ+Ç’æâ{²ÅÞíÌŽä’O3]êMý+AÐm›œ¸b\�Ž�<ßù‹I²EjÏ4P­:1rËÿ30fŸaö�æ…q ~Hh–²é²ÛI3úsÈµIK„vãþÁ€Í@1–ROãg8ñìøI­$´¶‘Z²)<go•3r!	ñÈ½{òÊæ�CPI­ùdSÅúlÙ‹›'ár´`ã™·Ôß–“:n³¯êsêÉ§Ä¦ÞÝãèÒ<ëôf—&]Û²ã2�²MWÊŸ•A³»¸ó¬ÚVˆñ\H¶ºtoÎå­ÕÏéö%h~œºÌâ,“¢ò¯0ÿÎSAäŸ/.�ùAåÅÒìï'—Ò×ocá4ŒAÝbýª@9“‡IeÇ–`ùFß[óWæ»%ö¿©Üj“�e½½ºnk¡W·Ë7ÚNÍ¬µøåÞàfÏr!ì>K—êºíˆý×úC~æãNàÈ."“íÑH¤úm—ƒ
+ÙTæGhj†Hðþ:7iãonÒtM;Ë¯ÞÞiö60¤©n·Ú‰[D¬“Eu<B2Ì
+ÊR3ÌtÎxF¢"åðÔ­&ó›t›Ï/Ëå[2šO—çE²Ö<Ãu Y.-QÌ¯(?»YÈÀˆƒVø‰ÈÃrš7Ê™_—Dö:5µä�=E…ÞÛ„hýÁ=÷­N˜÷iö‘$2Ã±°hä^HËÜÁÊ%*”[ðÈÒeÍðcHlH´é“Š%Éæß˜š“C¢_q¥DOÓíSŽ¨ÇÍóm´òèöšÕ½ì—	2q¸Ò¾§ ôÔ“Rýunþõ_÷|¾/ösGfúõ"É†ÊÂyÊ»­¢qäð1¯ÂÄªGN”!Ó1@rI ô¿!ÛIi§Ï¨ÜK­u4�#Þ%?f>}ù-éÊ³sbÌWÌ7Oqtb­Ë©5§µ}ºf<9¥/·c,”•¹•]›Ç|É½˜—¤E<6	u å;¨ôÓÄ��ü3e	Tžk×ÉjL`;ÃèÊYH5ýB{˜$¼�®d�‡£Ë ñJO.¦Ÿâv‚)é­'Á4k_«h•Ø×þ,,W31ý„ŸK~Z³YX5³#FÑÎ+
+ä€ñ#Ú´Ìí;LžËçÂ>CõfLÆíe|·¼Tc‘¥aúŽ¯éž\©Æ»aè±æù[þróTÓ¼ª±iZ¥Æ�%ÄÎ—Û7	Jœ(Y`rë–áæÛ>O€¯ZI/§šf/4¢7�ÉäYÊ)bOrMjsbƒ>l÷Èß˜^gü¿ÔÓWòÖ¥%¬‹O­Ù±ÿF¹Nñ\GûjG|4Åú©ùIù³£þiyxjÖµ¿²d·Ö´–nM‡ùOò‘B£²�34wn„¶zü3ƒÊ›Hö4Ê (·E{IZ”¹©æ¯î¹"'‰fFB•2/Â~YF¨qB›°š,
+ÚciªÉ±ïÄŒãµLdî±ä°Í¢F=1NCâ<©’W<¡±G´r
+¿ÌW+*›é’7Ö!pÜãJÔ-I'24ÅŽo¤-ó†£úJ7±0xç$L>×¨E2œÃŠm�5¬ÿÎ6y}´ß.ÏªÍ_¬ëRú�^¼*ßˆÎŸC
+Ä¿ï.�9¹’÷íX(Teû<��'6�4Ò–4ƒ‹�êb;¸Èî¬rW2[#™Hn�6$`W•y†ê+_^YŸáŒWðË`6bFï’¿36£òæ•¨jqËéÛX«pÿ‹ZŸcïËâ#*~KyÛÏßæ7˜ä¹ÖoåšÂ0%¸ˆÿv±–ªÚ�õ…eC“�”ÜŠKss$Þ¬’ª¤HxÙZ/H�lè$ÖÆ9˜®TÔË½q¦¹¾»ÿœYÕCæËIž•Õ”ÔÿYgOáœ¿m
+¿NË³ùþ<ßezá"DY6AÇîÛ9LK¾—4ÏR
+kï“bŠŽWxŠÄs£¹#ª[rn@õ+¿\®Ûb¿÷ŸÏ™ž�û-ôe-(„e…èi¸Å�hR¥�¨=ò©%Ò¿L1ä«y1>9%Zñò?êâÄ¨H¨[~´ß%2Æ:)4ÅR©¢äâ©TvÜÚ_l€Ø sx7çãÉå×˜8qýãÚFÕ÷¸�6Ý‘<¿ŽâëµÓá�'çý®¯«éÜ�/V»ÒÌ�‘žÒi!×¿›=
+ZlQ4FÿL5Æ¸rI«y³^¸¿ž÷Ì-˜öÕ4û©nP—0¡å·°~Ãl#?K�9q1$ÔZÏXV<Mð:-j~.äýúá®“	P}ùuÿ9Cù±ùt!‹OÖbÖ´xè±éš´BTôÁÙRTýðÿa¶Ttüiñ©ö'–?ç8¼‰­êV`ó÷–ïü½¯é›+dÒLw–·6òÎY¿Þˆ¤©â€~ËI\ÇžˆôrqËŠ6õÛ�ùËŸÉŸ2éóéV~c›ImN)l–þh"ß×šËÅ¾' =Sý–õÌ9é$§ÿ•:MçÕ.lüãc1ºõ{qsfd³Wã"DM·ÆÜ]iGéÓ�ŒhªïùÉ_#y‹ó?ÊšœŸ¥4ýoÍ+éË§\\Ç»k„•á3
+”±COž<Ü%¬¿%õ¿$yïË×’ØjÞIÖm¦�Œk$v�4_ÕYÓáaàFmqg°Ó ”épHº•¹Ôtë¨~®K˜¦R’–£à­¸²9‡\cwè$ÞTòü»òÝ®­®ØiÆ{y¯ažû�HÃ¸0z«ÄÕ�múæ“.š\d‡8ê#ˆ—Ï^jOÉ]&Ê[.k:}ö©xZÞHí½BIÓK
+Û‰ë–ÃÄÓ³a�)üy¼£ÊŸšúwålÞbµ°òÂ^jZ„ž„óK,i°Z$\j­›a3Æ	ünàöÔL€òû‚)ÿ>ÿ0/í=#¬/•4™Ü¬‘iÑ˜ú‡“€ÇvÜœÆ:Amø`%�‹ñÍåža×lo)^j:•¨y&yïÏ’@Ÿ¤<8í™Øpp€yîRx´Ë�4ÞÜ_(^…hÅ
+ÔÆ±Aè#÷a¹÷'7º-(?�{¬ËšžËù[£Øy¢ûXÒ´®Z–¬×S¼¼”Ök‰=híÐÆ;·«*Ð~Èøðö†³Á'wì-úl> {„Ú~�£Å–ký>ÈØZGlæ;hšxäŽ[‹É‡Ç;2HéÅ6n§9Yå$Û·ŽÀ<×u.‡§G¨k×-{=¿(4}=éQÔšÄ��³zŽµë¾[Ž\Ef=6ùÒÿP¿Õnþµw3Ìàþê0(ˆ?•}— Ìñ�gÏtãËŸñÓ·Þ¼	�‘í•ËÌ�Ýú½åyhš[xÙÛŸù&¹�–.L6Gé•³r¿<4ªsOÁWäph—'�yöfšÆp®�¸·B)¾¨ÇÍãÖv�
+9l¢‡ŒJ=4µ72´íËécšü…ÍˆÝ*ó}ÝÎ—åýRö¢–PŒÑÇöã
+¼ƒÇ!eM=7È³^ÛyBŸP—Ö»¸±‚I_�
+�PÀ)eŸ¨£ô†3$ßYº�|1aÍ±N(¸_Û?ò3½rÙ%‘ÍýÝ¿úµÌI” ÏAóþ8#É�qêÕÂ•*ÑâKÐì&‰Z4¥	'31ý„Ÿ@~YNKûz“þóÈIñÕÌí;LžßÏÂ>_¯3ˆÝ¬­¸¸¤e½Ž
+W‘yƒTô�Ç:P²¹,y¾)üòÔ¥ºÓ U5QrÕ?óÉòÌ<ÛgÉó]ôâ+·#£$ñÍ´Îù¡Þö@´ýŽÙ*b÷OùÆ?=^ùkówËÖ)3.•æÉF‘¬Z“	<è™W*ËšøªO×ûiËÌIfž½CÈúÙ¯#w;<MöplåÍêTWÜ`bœFÜ…=†<6›¦-®Æ¶²CyðÑÈŽJõ¯lÑv–øòsôÙ-ÃŠÊôä‘·áøg<9;$ÜÈmXó¥Mi�*œhÔp�«583}òÌ%†NL?ó*ëë—Ú‡Òk‡cý�½=¾ì·âÉøîe˜Ö?Ç{í�"X.—¢éÖ0€ÒÝcn=*:þ9×c‡içÁ±iö©(+AÑrV”¡g-
+ªž’øä‚±Õ™£°–ã¬ÏBzîÄÿ*ù»óSX’KE”!5‘¥
+@ßGá™8ÆÁùÿ93®N4í.Á$ýÍåß)w¯ã™
+R“ä5hÓÖeä/ewFñô˜ÇÿåÃ“]Ú*ÖY)CŠ=[ÓÜŽK¤únŠ3£ç­A9dFÍs}ÿ8Çt«æMzÕˆbtø®	?s:'üÍÎc¶†ß�'eÙüÿoºpEGJÕœ„9;ésCË)
+Xýšä˜¦–²«/%5$}ŒäŽ¨y©ê«MÐý˜ò¸smŠÏR?÷ÏÃ23á%QŽc´¢‚ „«xâÈ7Ì�ˆ¡ðÊd—V»åt«—®[­ºöÿ~o÷e�‰Z­Ékô}ÛaB
+EžIQû'J®B†£
+n1Tªr’˜…õl�æ£›æ/ùÉ	}!êKêWÕ¸´JüälÝv÷ßŽâêûC—ãÉùÝ-Ã± �ð×å¶z>O¨¼ì¹ îB½»#}©'èÊØ±1m3	eŒs‚I,f<TY†‡©iñÚ,WÖr…WÝÑ9Š_ˆ}9�2åBl ]hS‹E²²²št¦úich„q×qñ|ât™ç(ý?2KÒu‹O%ë:RÞGå›kBu´[ÛK…+/¬ 	¢¨ýßçï˜Dø'Ôäeá§ƒjBM>úA.!‰ä-
+�…£~<¹?Ùé×6r�Go{¯ñxv˜<×æqƒ_ÔbTÙBÜIA÷m�žžxþÖØçt¾lóL †ó£pª(ª×2Ó™=~�‘„vá¯‹jMÐgöz
+ëú=ýÜ~vº’êÎ×Ôž&yf@ß
+C.U,±�ðý¬ã9ªiÚÞ—R·¼‡•f·˜¹c³ß'ÂBø«Ê¿K¢IzØ9t7¨hÊŠÓ$î¿±l²�eÓè÷š¬)-Í˜’xT*ÝBÔ‘¨(9þéº
+ºå|@KÕË»ö»iå�•?&ê“ÜÛ½Úk«úÍÉzíÅx¯êÌüZc¨Ûhûïïu’1%:Ô<½§É©[µØšùaON×C³Š·1Ü|>Í®ŸHt€Æç×ôr$r.&\|RÙ•AùWùƒç«Ç=„>YÑ  ¶°˜´D'ÝG¹$îywÌ.Óö€‘ÃÇ/&xt…ï—ÿ’°y>;†kéïç»hžY}%†4ô¹]‡Úúzç?Ç0â"�¤!À)é_á›k(„k
+*mþH¹T™>;üî¿i¼Ñ”�H4‹5
+„’ŸV_ù&É™Ú 8y~¢ò€ÁÅ«|Ï\Ê‹[*òÒ¡Ô”øC7üš“+Ÿ6q~¢ù%ƒy{G#¡²ƒþMŒÃÈåA�‡ Û(-…]á€¿—Œlp„žO#óT‚[YCVŸ_³ö²¬Ë�›(°üJà+€é×5ÀzœÆç‹_Ò�Yiž¡j>½¼ ý“êÛÊŸñ"¹’gJõÝJhìô¨a‰q¤JGN™­Ène²<žw ŸZóY÷Ü‘þ1®[¹/»½‡O½³iÂ¤o(
+9ê¤ô)ÊåAH´*Ã�#¡02…BªÔW!L‚×M�Ë
+QšU·'þ,?¬åÐä�õÿËçôµ+ˆ¿ß�·ë9²ÓsjÍÉíIU!›7<�·ÒÖ)GòŒY<Î7ÜY—�(ßFceæÊ/‹?6îý]9ÅkIFùvhÉÉá×­ÍâoWð6ÐäáKš¾ÏÑü2LY¿å4ž‡æ§åÕÇûïÌšhûîbÆJ:¿ní¦ÝOŽÿ~ù«—7&	¨’¼N@·#c‰p*}ü+Œ>¥Cj‘}bÒEáZo_–aöŒ8‡ãÉËÓËvk3I*ñ<Xç¦ÙÇå‡	§o	XY<s›ä–/EãsVñßoÃ1äZuå{‰gµ)ðñFo¾¹?àG6?d‰¯~jÂ¤Z{Œ{¨üscÙ±³øóq5œŸxyiBÚÂ;sßé9ÔU:˜òLüÀ�<r˜Õ�Ù9�q\RÂa¥�LŸ
+°ŸM…2AZÕZÞÚÑÝŠ–«W§SÓ
+¾,üÝ›ÓÔßþ0©ûès"ÒEù›ÿ9þ®�cqþø¾q÷Äù‘„î×™ó³U´]¿ežî¹½_ã™2æá…;h’/ÅÀÊÌ)þQ-üp%+¯7ãZÔõë×	&'w¯ÿÎ;ß<{¸ƒþ[tËˆÿäYÆ™«íaû¯ÇxnÑÞ~;‹ïñ +	ýª~pPäõ9>¥+†Q%u»×®M‚#O”´À
+Ó¨é‘(êˆ¸`%tQmŠŸüK+dôh‰*	54ý&Ò‰åF§°ýX²»‡ñÊd•f*hO\bz¬eÔ‡£Sq—D+\>&Þ¾ø�Ä¨NC ¥$€§ìâ¨+”\/FLULÆ�@•êiú²šŽoŒ¿ç'îD^O1“êp'Þn»ûïÇqu}¡Ëñäüô³ìû¶ÏGÉõ�—4bCê<^í•±VÑ´�y{­FÐz¢=6òu>ŒM/üi‰,£Ž÷d?—V-5Æ ìj®¸xT×1f\¨b{BùvÊàJ^ÙY‰!ÉZž¾9z�LeQú>ÛÍ3Ò¸@·åÊK‹;)ZK“ÊæÕOäïÓ7Xõz`?|>ÿÐáÏO69/äÕÜ´X&š.ËûjË“Ä3*:�>Aû©Ôz
+'ïqeŒÄÑMôÏÈë5·�õÛ�iœÿw.—h¤õŒž‚þ9Ùç6ã/ûÚÎ1F?äÏ�A‹—œõ[iñ$útRqùú7rŸÃ#ü�ÚlcŠ=¤}„ß4œ¢Šs£~]ùcJ´Öôë>Á5¶§
+ÿ¥I¥Þ¤ñ�iðªÄ@,®]ƒÚ’þ¶­¶:øÇñû÷å¥Ž�,_QóM§™DÓ~ú(­®­š!_ï	–8Ã?ÊÉÿ¡þÖÎO>ë¾lOhÄšü}ÉÂù;GbZÔ/¤R+Â(¢��7!Ì³Äs}™§Çþ3>�—û“îra¨‰dÐh÷¶ÐÁkk¥8®¤XVi\HüÏJ°TîÊ#¯ì­,¸1OŽC­N?x#‘m–”qEìšåš˜¦Ô¤{É)S
+Ž	Ë½[ö²YûkS�TEx?¡Æ	øýoYÒ¼�¦Ø™×N·³i©õ†·‡�4�Èf¢zŒ³Ø›ù9˜ôÜY—àP§Ó_„Ô}ùT1ˆï&Ùú<é‹l>6Ì‹—&—¶­EèÔÒŸO£)“'ç7æ˜çù�¯IüÏáoÌí?Ð<¿QyÃ}¬Ê‹[-ò¹ÿrvßä‰â\ù³‹ôëÈÏË:3xÚGø
+fG*ÿ�(=†P[
+ª¿Ã�	«?Øxa	<ž[æçk+xðÿ‰eY—6:~Áû={õë˜›˜‡—Jý#«ùzVâ±�¤p:ÇYPTãÌ—%ø¤l9ìJñ®ª9öYƒv[#ÉŽiZ5Ö�¨y§N»x¤ú¥øŒ\ÀÜÑè££{t>ù“¹1ß5ŠÚ]EQ"}
+—VÊ•Ç¦iüÖÑøQ˜9BªúUß(d(ŒÞÇ®Ñ›�»·
+úlÂ¿69t9$=Érúzõ©¥9¬‰Oš×6ZnmY¹=ÎØ{(p¦lÜHòBÞ?Ã'ËO›üó?	¥ÿ>Ù�—›(¾/üÌ—Õ°™¼$vhÉÉä“ÉU·?äÕ›hrp¥Í@š­~y&)Ÿ–odÓ|ÏåëøÿãÏRµ¸?óÆTáŒþ”u~êZÏËÕå÷œÕË›“Ù_¦@·# �²+WøWüûàÙtEÊK©¯ÙPGßŽHq.9QyÍÊ›-Q¿TÅò øœä»B9¤=ßpweqÂ°O�öë_³\×J-–²ÁVÞ{›˜]‰°ËLŒ¹3‡6'ùH>¹ç
+Vþ ÐÈj:}¢3uÙQ³øóquœŸoù~åP£¼�é”ø£9Ñä"êcÉ5½¾ym®DÊV:üzÓ+Kc äKªs”ñ"«üÙ ©4CI[T-0BY$væMIoµí\*øóórV{Õ‘…ƒ>[°™EùÉùûÖ|·{/ü³ËýÄeøK^gËI9“KÓã?d\^½mÏñÌ×"m” ^ƒ¥wÓÔñâ­IÄzôË€ô†»õ¡þH]Ì­’8Íõ¨Â‚¶òf¯µ‡î¿á»Dyøî/Ñ8Uâ®ß@Ï?ž¶\Û•¹F£²¸ÂÅWJ–—þb‘(êŽ¼™[Ç*-±CzŸ¯+dôT©ºŽ¸°EÆÜÚž9 ¨Ä^SAó·¿|*ªÉé³�åb>ã‹Ø}±B‰´ÀÿÇ·í|ðÞÊ¶Và¡=?ïÒ|²²UZƒ½}ðA
+ëÏ„ÎkøáJ¥Ü!•<YPÕ°HìÖy¾ÿœš�“Ë±—Öjñü?ËH$Ôv	õ~<ÝWhrüy>w�ŸZÓ¾wræó©­£�Å‡Dj}ùdÞRƒ�×˜ßù´
+XÿÓ¬¹Iú›`Éÿ*ì½K�Q¿ßF÷³eœ¸>„°Ó(ªÜ+Q×0Kroe@)í”ÉSËKr+Ö¹81/TÑt¡è
+-E:åñBß1yAó"EúkI‚ý­‡ú4®´hë¹«`žIAîùÃóÈÐèW6pé1}NÎHÛ÷Q·%ë½¹Ífm|±þ?c�¦Ä�ü¿Ò—ë­o}‘�ÏUßoëš�V·Äøû� �=|y|,�BÔ
+Q>ŒçÎ]Ö“òï¯¨h¶þ—Ü´´ÿUiü3gÙž¬¤þ9¼²¡Oi²Òx€=>ƒ:ú¢érsNàÓ¸ÑiJvËËh²@Ô)SãŠ¨][V  §L^=æ€·ùMü2¹+ó‡óTSÏºèÿ*ú‡�6zoîÇã«ƒ›ë/6u«×/ježY*—Ñréñ~¬Œ›`ý2üº‘O–4¢�>®)÷œÄÈåÁŸ—ÊaoŸÀp!‰ë2Ð�“ Àõ›ˆ#Ón®.K,VËÏœe•�ð¤W)’XM­ä×<“iº…•™
+�_\ÙÜÛ[Ì²$Hä“grÒG˜ù Ë´ZÈÆFØñ«
+A¦à�Üt>ù�‘º,WÌ·2#;DÞœÈÁÒZr¥()L†.m‡“&{©®-a�×ƒ¼HXqáÑ@¯Õë™ýaÍ�ëÐIum4j˜¡ èS­~ŒDm”ƒË¯?3¼Õåô�OV‚îÞÜzp¢äBõŸjå£GÄÓ,Ü,ëIó¶§©ùlë3ßEgwiÜ÷ÛÇYDÝFU·Ü¶Vt|3!—‹q·’Ù~nyîæ÷Ðžþ¡Ê…´IöM
+×Ú”Ì‰iè0†MßIh77·�¯¾±§[C$üî4v�þ³%²3¥Ä±º|;3xª.@6^•äë´mWH¸=d½I¯0
+jÛï\¯=Ñ•ôFÕzt©Í°T²õÇQö€8Uó_ŸØ‰å¯öÆËÍÈÅÉñÏæÇcwìrìØæy[ÇjÈ«6ÐäëÊŸ*->y$5ž�Õ¼¿ï¹#¹éŒþ–³Íû¥¥KÎ(_ùãS÷Šæ®\ÜìL�¦@¶lñàVKhÿ}?¯$2#’×Ç
+°�4¶’"Ô“ñg5Û8ì“øèìô²ô„ÎÚe’Î7QB[§ËlÐã<›e˜¤7•êÑM_ø§,ý 'ÉäŠñ“PŸùÜ§âs§ì‰T?n¶V?O®t«õP!=e û¶þ¼&Åº˜rOõ)SÑ1ÅuÊàÉ‰Ç{ê¬�~ÃO dåÍRg™ã—Ñú±Ú÷À¯•9$Ko0`ÜA>_F_…G7çÏç·–µ´ÿŠD¿sëFNOŒ-_žžù.Oü@fÎ\ÜB�²võZ‡�à> `BOu)È%S_´zå—°XË/ü²»6Þò´Ä‚­
+:~ô´?ñ¾kûV7‹ñÞ€þóñÜý%�™¢–8ºFÔ?FyÙõPä«;þìüté·Ñ‹%}>JÜ"Ö´qGTÒóíÇþ¸ýYYmŠþªålž–¾¯¬µû4ÛØ¸×oµ]òAQÈÅZ2Ã‘GqùaUyäõ¥y8ðækÇ%D5˜¡{>ÙUMI9TŠ¬`@ä~ÎN<™íÐ;—I({ù8Ôÿ1§á•d-g›à¿ùÉâÍ¡XÂ:6¬„ÿÈ©s§ì¿ãÍÕv‡/Ç“á·†.mNƒo»;ç�n4Do‡ö¾Ö*Îü™5îµ1¬€ùX&½Gú™Iú›`Ï¿%­ýS©��ï¡{2ŒÎ\IÚØñŽ#þHýY‚[“xm·L•;±´«ƒî2pb^Å¢Yÿ£�–_2ceÉ)í–±‹1'�þdèX·¶—…}'ëšÓœkñäçé¦òmMú¶¿eTøOÞ|ûg1)q;A»ÛãÒë+Oâ$ÿfbÏi1Òô²úø$PÁgÓæäæï±c¿ãÍÖj¥R!êPÙü#:¼ƒwYÌ¢~«Nù`SÍ³˜P–ßGH˜{^!æDÞO§+’¿7¿7—�Ÿõ³ïmÿPÑfÏMýØüups}eåŽjõËÚ™W–ÛŽ¡hßÊëÿddÛé?å}Ç«äý¼`ýNÃ129pz9zm”ÂµŸál`ºÕÅ§�ÈI�af„Þè•²Y'‰c:
+–Ç)’PšÞ­¯kC`÷R\Y\j"ñØµþíOOÃ1ò6A:ÒWêÖ“¿NMØ×ñÌ�Ñc¶Áo5³ÍÇ±�ž¹\Û$êè±Cé¥JÏèãlveºº)5Ÿ–:,¤^AæO&Ü_¼²$mö‰zf~-E4ËƒÊÚÔP=¬3<1Iö—ÄWf¹ËÂ¨Ò/Oò%Ð¸ˆ…'‘þôõQß+Éž˜Cï~Ñ¼»i–úds5¥ª[Ï ~Ù¸~gñ‹<· 
+/OÒšÖÛQÓÊœ±(O\†›£+è†qÉ˜V…‰ßç›`l8©F¢y#Ÿ…_1~`µ&qþ}3/7#'Èþv5°¿?ä»69žTÿÜAþ¢þ¬ÛC“¯*e+¾Ii#£�òê?áKÆ¸Ïék<ß¸>U½úÖƒ¡]ËM…´ßðq+ÕË›�‰˜Ç%hr°¦ïñ
+Ê4óZ�TñæÂ©N½¥½õ¢´_ÞÄõ_–k{Oã¿ÇG'© ÓÅ
+Æz‰o�Ms“� íã¸QÖ%K}?P*y\ÍCÍÈõüsCˆDÔY?åž‡6…¢†¸šé¹8ð©4ü3²ìÜ5�ñæê5·´i—b6£tg6T\QÉ¨ê2µû4Û!±¥¿(O¡$òNN\Õux¨gc&Ì¸`WÎ?šŽg‚"MH®ù~ß
+þdÅêèzÌ~6ÒŸ¹p­9>´l$À?äœ¹³—7¦É¼‰bX€|°!%¼”z­D(+±9+kÔS?-^½¦¹£ÝƒÈ[_ÚË_øÅ'?á•ö€ý×ãÉï?ÏÔg5p^„TSå¶y®QR/_�é¥¨ÄÕG|­šûFfºFG¢ö£ªyvxˆ
+jü÷9YmŠ×—þJålž¬¥ˆUo´:äØ#‘:dJ¢¨~­ö°*£LUGv*¾>­Š©LQœõ˜: ¯<c·wPC²çìï¿ñË"×$žA(‰„Ä3q$•é¾ã*ÊAðoüäÛ¤éñ�¨1ÿ’/�G`
+ÿnŸ´câ‰½“ÙˆûŽwg›Ï†Ñj¬}ð+=òKú7ºÁÿ~ywY�ï°¸Èm°zÇäl5‡Yÿ˜•p‡¨ràúfv3úó<›‘±Ãñdd©îŸïÌc{6‡îGË.‹Ye©oQ_l¶téa¾nÑÞ÷O�TshÇ«ÿª(sSÚ˜øÇãÉ¿Hh¾{ô–B	�îÊ8<q¢bL]ü'aíVrÛ´1³MÅŠ‚Ç+Ç„–\Lƒ@Ódk»›æ^"z$Øâ3®ìÍ1Á÷ýåÖjeë,õ ¥òì~�³)ð‡_�Ú¡‡|¢&ÚÂÆŽ‚™tR“j	ð?Ë•á^fO�éâr©+óóœz~~Õ�ó$õlôßÝ�ÇW7Ö^D}>CùûåíL§Ë>™Õ-VY$�K‚¾’Ö¬S‘ÿ[ŽFLâýüž¹VòN’ìÁxó‰@øL¯Ço•3#“«;€Ä
+Àï”ô<òÒ7Øçz¼ßùæ&¡³Ô•\¼gM›š¼Á·à‹R´÷ËÁáÆ×1Å6þaÓ,Â¼�ÞŸH·:ˆÂÖ”
+*ŸÃ0=2€·'À Û7K•m&)ÕYVXUÔ5+Fß‰aøæ¶Xâ•�ä7ß˜ÚW•5+¸®¬./î¯ ’DÔ¥°ôÛõæÇK§ŒâV|”iÿœÚtõSå]JCû?½§áõFýyžt‘§e¯kù“kqÍ¤ò† ¤v
+ÅÝõ<ÄÏÂ4ÙH��·?™S©HÛÊ3Æ†¡[î%·î=ýY‘ˆDÁ¶p‘BÊÁýÒÂžQ†9¥z¼¯}Ê¾íí•Äé„@Ÿ?ŠÇOq‹±óãÆÔ›ËÚp@O2ÎÇ¯‚J«÷¢rÒ~8›1i™}¿æ4HˆWJ°‰¿ÈK­ÿä¶cK4ô}.AÓ½kòþ}WÎ‘Í}§èúJÃar�Ì÷fñX2�+M_°k20K�Æœ8_I“XÃmN!”)$q"¢„³žù³…8ÄÛ¾�$æªôuú0¡ógæ#ƒ+P×ßèÊ'Í²“¼Ú}K;ÕþUøŽO5ÊòGÿxí?ãþ¬ÙÁÁš—*2è´É#Ò­þûO¹“Úº¿hÿ,®~±ä#Müú›øZÆ3]•ÎÄô¨ä­RÓv£Š²­5÷ ¬–#Z*‹FQPÝŽ2ŠÞÐòéV32NP£ïYW©Í^~ÍŒÿµÊÇ¨àu¶ƒ¥Ã)¸–6¹’µGŸ ÿW#‡³ü>_�µ”²ñîžúüwø@zæÇ†ƒ‰�Ú½½ï'o£¦4Æ<‘�4{tÓ$•¦äOó¯\�
+–Ý\žO^»WîÃJñŸÌ_ÞØú¿ï·þgð±ßùêVÊý?ž_¼9ÈC›dù??4ÕÿGÕSýóMÿpƒøfÇª.ù­”“sY=2c%½ë’»b–Ý*<ü#ÚiAò¦ý!Œ–ZH š2½ jý#�?Žbj£xÿë‰úy§\4–öôj	¡F§ûž}ª�þ:=V‡û˜ü~òš•ây
+ÆÆO–c¹k »+2”<·ë‘,4úâîVô˜¥Ir™6E
+õ—þNùOh.”^)ÁÿnOæË˜"Pol‰V–^NFW/CLU®x«@Õ«Š®~£S¢4ñƒÕpuAAëóÝGe,–�A”{Ë"×$³ë¼O3KX¤Bd^TßÆÌ ø'þrRD6ú"¦Ïõùyo]½1MþYÔößñæé»Gñö>85ýž”«;yótZ:ðjõÈ«=òoûÑ®|tÿp:¦ßôi&@ómƒØ?"V¶ÚÉ­Ó:ÿ°‡¨ràúnøýQ˜qäÜ˜FŸg#%O,“÷ƒæ1Š½�COÜ'ËøåÑk,Ò$ø~ŒEˆQžèÁ’¡»ã“m‰¦¬ùJÕåõd…’`Aõcj1  ÍnNÊ<_�½¾:š­7ÉövKÁ½[‚~È˜ÔŠxœŽ>Íü~ÔþiœÛZúJ€¡E(½3cc…Çž^#i˜M†J¸˜ÛL›d8xM*ƒ'ÂrØªI~Ÿ¹o‘Á%x/™E%�{ŸÕ•I_œ?�Ã�Ÿ5oø¶ÞßðŠ1›=7÷cñÕÁÍõ—‹µËÜ�»/jdþ\vý)§Ó§Öþ$¹3‹ôòRwo'Ù,ŸbX/ÓSüs#“°r"€õ ýYAoBÝ¿î_å�^c«¿ïÏ12ýM¸ÃJÔ²�«Ã÷M¿ŽOPxq~;Ñ„qdüw<¾K«Up·)2H#BV§|âÎyœ„¡É„p[ÑõXCP£€¢�A²øfÆ:yL:ÈýO‰<ýæK£¯j–‘ê7QCo"·…6RQNÏÞµ®t}Ÿ¤#øýçÍÕë¦FB=ßpakº¤ªC_ê’D´ãKAJxfÐé%_�Öë]Ù^…¯­nä–9Ç¢»ÈÜ·jœÓë422wÚLñÅþ7Iï<Õ{4ÊâÙ'	º1ìqúó7OÙÒ0ü~¶Y»F1�Ô¦¾eÕ¡1Ä+S =zíøaþKÄG«ŸÇõ¸¿ÊBÿr"ßÍË1¨TeDZÑ©@kòÌyö^ø?­8õÛþ?SÒ›WòÄvšU­–µ¨Þù‘Ö)¯­�¿tfPh²úûìEv7ñë˜yôBÓÉÏÇªâ/¸ÿçæi<±­–§#©±4<…M¼}è?VGE—ãÍu;‡ÐÒšó\Ûä§_I
+Ê"V®Ãã?FA“æïÌp„Mú}Dù¶Aòwš÷w)üñÈárxy®W�…gÓ-åÿuÆ´�sgmB‚Y¨HéíÛ.‹L�rnÂ:×‘a_ø‚m]_°?’—Zü¯ò$¿ö§¶Où¼?ã\×es±=~'ß)
+éµ»üCdú{üY ¬’'ØaTX}†Dá2Ý*É/>‚<;T3‚j>×|°Ë†4XŽËBEO\®â+jFPƒíe†4Y/­L»¥;`¤­k†añMÝ²@*[ræ‡ˆ¡ý¡†•åžy1›'>Ø%ÉˆæùÍà5µÅ:tH®Wm“äø*ÂÝâO5Þ¯P‰­ãªÔÐ¹'|¼J‹ƒ>lz	Ä¿SçJÐPm·O£2 X õGë*ûté“ÉÉŒ�°rbˆyñ2Sðfÿ�r9ãxÿë‰ú9å[ñså¯+ÝŠÒóLµa^¿¼‰[øçœëãÃžCÝ÷ªÐÿs�ÞY9*NýFßvÙ†å®JTS¥r%�æÉŸÜÄ£™eø‡†S&È®äŸïßÚãôød=F[‡
+LŒ˜Å^)µörQ;)D#ä­•}ò@ªòjk†Õp}¸äJ»n@·EªûN2rtû$š}bÄ®œ'BÕç³&(bº%¯¨ï­œI�GC¶øp}rø$>ÿœšŽ(aÐ‘î®}w=I&uÈ}GáþùÓv�ãì|~æ¤oË~¹ÚCJñ’J©û8¥èPš+|ßxÝ!òýÊ/ýKŸüÏÊåÍœ^·ù8Øjkü·ª>èÀÌMC•Óöÿa>Y€“(°ªwfY\¬ã�÷#ö·ë–Á^Ï¡‚öñ±R¤¨øOQ—E¬³ {K¨Ý1Uß Fì‚å4ÁID‡ ¦T¢¸«y Ä©Iß
+MKû·ùdº2Ÿ¼ÌÔ–Aþ}3i~t~x¥|õrþ6Öÿ«3tßHq2ó/
+çö?Õ«3Ï'Iþ‰)]NÀŸ³ë%?à—+èÊÐ¿ÉICy6	ø‚æ4Ü¨=ŽC^GÜæ9oK®ÿºo–S%y¦ªjà)ÌIýLñ�ÖJÞ®�|?–	Rã®‹ñÞ`5“ñÜñK·½�[ÒÚÆFu¼Œ+ø{Œæ4^’ïõ"àÚuòË‘öÅKû±bIúNgTÜH‹à=zF—ZÕdo´×R×èb3³ÑŠÄ¿ïyÍY¼§á÷$Åž!‰7¨é¶d¸É¤ZÅÎ� ëñ$mÖmÒÖÞFZ†)23ïþ®U,7+r¡*€	%œR½�¥ÄqR;€�ÆÜ¸¯2*»|²Àxgº¤�È=F>™hä·ÇÞ›þ8®VÄý(»\¬“<I£#Ü+üfXýEe¡a¿Ké,ãSÒÅ¯æ=ñÑšâëC_NY”GÆ;I&‰d(ÿe·¶kõi€<ÿk°Á;ÔÈû¾çßßóŽ-O,k@Š¹c]©ÿÑncö|¸GãÍ·´%ÄO£eµó?¯3§.#n1Q	é¨'Û"Øù¿ó'¨ÿ>Ù�“™nÆù_^A ’?÷áàßNK4åyF ˆMÊCöí¤H£úTøœÚãätù¥Šô=EAùŒ¾-2P•}bSùÊ�Á°É�GêïüãÍÇ¯ù?ä‡ð¶¸Oø©“øf¿+vºG-™@s
+ko7Ä0«&Ó®(ôÉ%“%Êm^¸P¯õ´a­•x¼J}ª{erŠø”¨/c#�©“Œ6^+Ýx¸ª¸b[�èE*NK�6—YkÚUíËXÙÞ­Åâ³)…z5
+
+>]2ÖÌ�Mxs
+]Šõ8m6Ç5]{LÑ¤µŽúïÐ{¾b}?W˜Œrõ~‰Êaé
+a{¦LRh ¼¶RÚî%–Ù«_Ýº‚Ÿ�.Rj2áy_�P‹9«ÕjrRà¤Ç%¾CóCsæZ~'(ÃÅÝ—ÆQiOéy”¡¢\\NÓIü¼]€M3*S¹nÓü>ç“[Ü*QPÃ1_Äïôæf)p¸z™\”u7�&î°¡ß™ï–ß¶'d´ñJG£IW‘QNƒác‘È6E¿Aÿ.%7¿—þX˜ÉR,‘OûWøgŸö¿øÔþpz^Íþê?¼³å…R Ðuk5%ÚžKÐREndoÐõÈ†°ÉíæáÃýÙÈ}ÙT’©Ïþ-ýºÿfE^�ße~Ÿ×Œ“xe+E?ddmJeªÔ×B°b‡®HnµzáµVQÈ0þS“•¹å¤dxÓ
+«ZÄÑ¤¥kY€;ý�…1bTç,P§.†�6Å	MËˆá™û*Xp}rø$?<?ç$î’ãü6ñýƒqwO ÂêÎ£Ù¨ü?ß:nÑü}��Ûi#ùÕ� t1ä‹„ÔñÅ,ÇDôSIóŸ«ö›F_CýÒ6?ñ¯,®\ÙÅî_‘Q°Óõf“ûÃ|=Oõ½1ËñÌMC•ÓöëUCì37&q§Å…Sý8QÔ{å°W±èÿÜ/Ë.‹YeHÔöÄ±´ÅTéP½í„AuÔÓŸL4•DÔ#45¯¾Vyª1/ƒP˜_×®ù Ä­i¶Â„“R’±¹ÿ'%Ñ�|ÿæ‰@y@§-øòéÓ1¦—ççƒHÞs&^<Í„ãÓûÆ§á™ºo¤8™y—ˆq«Wå™ç“�$ÃOp—Q ˜°ør¾Œ ýü•b<©"àEÄ•_š)Ìi¹P{#ìïþ±ýyŽ[Ô.?¹o–S%y®¬))oü3+‘ˆlè¸Ée2·FB~ì9G?Ç{N3Y?Ï·+/™4èÓì›�¾ƒLåÀá™K”^ñûÞ¥æ7ýËÿ�Ä}ÊÙ•¥ß#®¿Kà+ë™%º‘ÿb>q�¥‰Îç¨œÔ}e
+n¦"/ß²‹QÆ
+5Wr)îNZÒ•jÑ™,�Mjç‘©¯Ó\°“ÅK4Ó[8½�q#+”my£@ª’~À4o™ÈðÒù"9­¥ �(ô¯WàxùÚø— E¶�K&½üÔ×µ	<Æ®Él¾hž	µ¨ �Ò�Ú ±)	ÛáA_¾Q¨ÁÅ=íºiþðŸÇ'èoüãd¡¼¥¬µK©­	ëOªC˜81T\Ìòâ“èùvùœ°rERQxkSí…_;~c­U�ùôÌlœËv7ËZØ ¸?f«Oø,–iÊò­JðÆÚ�’F¼f¸õž»3k��uÓæÅæº[dø“Õ+ûÇ)Ôeñi’Œö—±¿¤ìü}wß|2cÑú‹ÿ8Ï}ÏòƒBBkõyõëþµÌ�üs_•»èe¼Ü�GÝ”0«¥ê+Ô½†Mìõxc~FMûäƒš~ŸVÝwSÐáB“ëNõ¨<2‰åá4€w¤²ûÌéÖÍy¥�¯Ç+HÔ¯ú£Òo×”ÎV=?´o?ùkT€Ïm«Û�øÉ,óñ+_EýYAÕ˜šftü;&kç�®ÍœWp±jG$ÑÉÊ>5øÈ?êõÁùÓøþÄx,E¾´Óµr·…£Óµ—“HÔkXÊ\´ŠÑþ¤¹‘œQâd0§š·æœ–œbÓu+icä¾Ïì*Ûì2‰ê¸Sà°ß0ùžËX×tMjy¾¹y£ÙÈ–“DXå¹p¡vûäc®gñö6ÇÔÏt�Í
+Hòþ‹¦ÊÑºé¶PZò�¿§_á’þUŒ±�ÒÛó‡Ÿü¹©éÒÃc+5ó/«¯³Ô×	íx‘øýM˜ôB¿­óŽ§¦”—p_(½šib–ÎaC'5ýs}±þ?c|t_�Á|õæo+ë¾VÒõ}HÉo,3ÜË!àjxÊÅÇÃòlŽ
+�’ÇãìS¡“øûß)HÑ›ö$sK‡-,TãÄ×Ã:Ü1â‹ËêãÃ“ñÜ‘ù‚Öögº¹ïªÆ>Õ:Ó¶_ÓVCê@hí'Öÿ™Š
+ëÔ×®�…¿Dÿ%g2þ_èäµM¥ÅÌE?ÖšCüsÎ»gün¸=Oeÿs�Þ^‘9‘Ô!÷§Èf »sÉy2/5þu?†ÙÖÛ:É#Ê¤·M…2©%0áþ¿ÙÈ«Ö]jBøc$ÅÊ‡“"õQ
+Q0…¿yßBh@et9dU¤eñU�Ùg 'â$­^Jc-Í\‘Äþ¼ªJ›Æÿº_
+üûä£ÉPWªÏ#%Kg ÀêÝ
+VW�œ¾	~vÿÎL…Ž_/[§C& GÓõs�·±ßL¾ï�i~>ÇÈWQ[±-×¡Î³Òv<‘3Ãpü—¯íe�ñe6W¾‚jÖ¶ñúŸ¤l=3íéOßñ¦@ç14ÛÑôOäJ“¤ëºýz@~„LÅÏ36ì3á}AÚéSÇïÌ¯Io”¸�£Ô@=pðR{¦[ÞÜzÏglÓEõ%aÐˆ|;z¶’dq]H¾ŒA93¿O|¶z±¾±óž!šâ+¨Þ;„…jsk„�ãõ2’�3[Ôu�B{°F‘ú±Lí
+W-ž¬¾2ò-AI:<a;§ÆwöÈG[7`D®‚AsõŽ#Ñ½�¾”±ñ¥}²©k Ù3A¤ºÌf¦A"øA÷e˜§„2w>ÿrN#Õšíõ¹HéN¹gžñj8é6ƒÍHXz¿»-Ôåâ}è	ä:´SK/%=.Œ˜-õÈ’6£ìAÄ–á>h–’H+Z¿Ñ˜³nÏ¯Ï&§œb“ùì!ü%q™Z~AÅËÌ¼$ÊQd~GýíÁû+]ÀÌóÉÇ’:Âå\¤©J©ªqéóÊK(>øü�ó
+µæ†ÚcÏÃSµ‘îeƒùâj§ê‹‘ÊƒßŠ…*£¢…äÙS’dZÆÇÛ)’^{­£ó4é\ÇŸ6A‰#YÏTw’2ŸP~~m“Š¾vòÿ˜µ;3éZ-êÜX=ÕÄ"îÁº3
+ïôõÌ
+D	™>ç7j/s×h@ýžúW5x6ËøîlË'ÂZž‘qik¡^�×]¸™>.±ú §ÓJçg§“�¬ìxÇMAþ+û
+wþ‡¤~CþW¿æ—�¼™¥_\T¸¿ŸYº…T˜lôØÄ­-dø~9
+ÅþË2sÏ„<æ”JgÒ�yÛË:N�åÍgY±¸�ã›Í÷¶:$R„ôû'`¤ˆþ‡¶k°jø³€}¡¶ZÌNXÏ8×Û»Ït°ºòÏšmL>¦¡nmÞÆà58GÏãÿW3óC†\OOØºxë4ÓÍ¯´Ÿws0ü³ü¿ºüÆó%�—´èÙÏ™5kM2Ö¶°AOVæfñ\*Í–K?†8Ïã£ÇKOÅ�Óõ>›üù>Yµógæ¯™ì-mtí
+ÎÖ?&ùj¢ãêÍf)ä§ùÌ¿FsƒRu9¢}ýƒõ9}«Qò¿ÐøÞÊÇC¹–ÛÑ½–âY´©}š1ã÷ŠÚêe,ps°ú²ÇGé_üã;ò~¢M»ÚSV+ûÁF!b·‘ïLÅÓÊÃnHÔŸI7N”ËgÍ+½Z­}°±|ùù�Ÿ»?çÛ(ÈwlÅÍòÏ˜>K‰?ßJ\že»<¶xeôÜîþ`ÄFl éfl¨}SO¼³½¶¾¿{D±\YËèúÑ1PÃÒå$ŠŒ¾,ž›o*Éê4oÄ€G>½?W‡¶N\�_§_ó‹Wœÿ,Ä\¸ýWZ¹N?ëˆ›øæ¿+no~›TEV}‘@û†UNicë®Ýj-oaÈ
+�%Àý�L®Hfšu±�UŒ†YíHz“‘µev…P)t«w9\‹`y/æ¢Ñë”–B°Ai¶çÑV`á~jµÎG¶µ–CŒt¯¸}Ùò¨�Ç{ÎdÓçóM�´£WÓôÛ{øÙôý.úóÑº¿ZŸ†ï”è{:q�ã¯›lõœ3Jü£¥Å`u9.®g’ðÏ˜þæ×’’ÑþÜ‰N*|ÍŽM08…óý­™3ñË‰‘Z¬N¼ÇE“—/PSc_áÛ¦sãMÉ¯ÄY.­qfa¶·žH­`•ˆEjü|=ó,ê=#£¹´Oh¨>RHß»’Í¹ßæs&{m‰¤ ÖdDÆ­ºxTW'õa,\FÐÉ¨,«)–:ÆƒéÌ|™­”}+dÔ#™}'“Ñªñõ<7­3+G©ß…2•£µ?0h)kö§mw{qs7èmMÓ–8Ý¥‚žiå‘·wT§µtðÒø±q'›�‰kšjùïFºÑ4­B(¯éw74Dº‰bI
+íË‹}ó?RcÝ_s�gÇ€Ç7Å^rò'˜¼‰®Iaæ{),frËŒ9G=?j9;Œîtù‡Êg�©ˆê‘Ap±—,hÆ§mºæT
+‡b‚$Š)öŽIÇßj~D]úžFž:×ê:œßúñ«â}¡‡ïIï¯Ðô}’7²‰H™Ø¯&´Î{ô»ŒÃÔ©ê†Üt9Øeg/$dðÊd”×Ó÷ýšäUì¬ƒŠ×ì»1“¢ CA_ó±e)’*�T}¯ÚÃHCÉ€™Sì·Lz« •\ž_k¾[V’! t$¨iEcÃúåRTÝ#
+â2Qä¨)�H9*é©�òW�œ¾	~tÎJžZ——ùW?ñ(³¶ö;é—Ãýó¡í/ÇØøþöÔ	Rjs.Ëþ®ßÃ:Ì_HyØòU°EI®.xDéP¿¯ñËâÌ´MBÜÜ‡™
+En	õW½PåþÇ*Í”B+\éö§äÿåÖ¥¥h‚êKËFƒZ¸[Ý9`i¬&1Çš®ßf™Ëj{j8Í~>çq�MaïZCé7å<µ
+5Ö¥,Âxî¯
+‚,m¹ø�øûtÌXkücÇßøîsqé},ßVòÖŸ¡ÞZ>å¼Â.¢õo¤¼�Ñú¬Ë´°KúàÐþÐ£wÁ©íøýL¿,º+é¾(‚x'Œ§Ó€öÃ1±v™”Aü}ËàÒ•ÍÌÒÛÃ¦£3ÚÁýÓ3r=jj~dæ&«\Ø¾QyžŽŠÌ^:±ZÒ�N¿Faiõ¤Ëñú™H¢ÑØ§Ö4û—‡P3Êofg¤mÆ‹íB$<ØjudE>_yªëvðIÜHæiŒ±ÌE©]¶ùf¢:‰Ì·bŒAÝ„]ëÒi‡P¾ó±?Õ^'{óŸH•
+4IÙãvüss¦ÓO#v£4 vž}³¹K{[
+bâåÖK‹;ë9SÒ{gUY#Hßö�¼¿Ê®cvÆ“6b@íðï¿e<]ìó@™ï—Q‘É<¤V,E	4¨Í¯`êÅrünZõxÀ››eø¸õ®o¡›Œq:ÈòIÚòm9êŠ?š/øÛ/`S|Ð$Cò† 4#2bl05ó¥’¹þò§îÌy·Ãÿ�’—óM«W’¨ç³æVŸ�qró/2³¾…cŠæ°†æ9?¼BƒÒúùžy8ònÂ#¨rcP?d·á”–P}?ù$^O8èþ„¼
+ÇqëÄ2WñÌ\ŽTm9”Ž”~TÛ*rB-MP¯€Êd–%«CÏ—ù9�>lƒqþ�:x¡?vN*óírè¿è¢®ÀÃ<a€éöòŒ±Ü¶cŽìÇTâ‘Á$çþ,ªf–eüw9Ftùˆ"hÚ=¹ÿ¥V·«Bÿ"îÙÕ`Ÿ¬ûƒ³í|r—cb�þ—ûº{å/šâü»ü·Õu{ÚO6ùâ!åŸ(Ã÷±ÚI"\j7kíUHþŒž¾DGñäò�‹8áÇÅ/Æåå˜Üæ´Ñt;¡]/H·(ê�B&f.j<jwÍofc¹§™ý®ãE£üÁ–¨rÉ_ìn?�ƒÄ¬n¥Ðîçb¿Ì&+¨É¯$5¯ëÎ‡‹Äp4¹'Ù’”{ëìù÷¾Ùÿœ]¼·ò®ƒù™çÈT5ï•´µÐXý”¸ÕÜ¡oõÀ‰ýVlÖvÌŒ!Áøè×Ù88²H•÷‚þjkÓjvðéªÇêš*Fí}©R;”Ä’}Îaö>›„q÷þÖ1€É#})�ù)a�YâËW·»…á>Î4ÿ‡ÌþÐ$âÛ»ô‚Ã³�ÿoÓÿÈZ'•ï¸ŠÔ[oú7�5zØüy»M\h½òCÄ‘ï›âh“P±ÅüÇZÂOÏ0òŸQnÄø“ó/R6V1Ù§ü~L}ff”[V®[<‚YÄ×8èVŸð;Ï—7T
+…tÖ^Yµ<€€£íwÉH/·ÿçu‘u¨]¨ÐëŽHùÁlŽ`emÃÍ™ùƒÏV±jvúmÍÜv‘H¡½[ƒÅÃì¶UNiz†‡ªèÖö‘K¥½i”4�nÜÎûüG+’Õ–¹§ºó2ðT Sâ{þ9TŠ³M>¯’3Â¯ŽS"Ø	ùµeéêú”7šÊÝªŸ¬g9Ú1Êd ìø\ã½â>[ó
+ß–ï¥¾¼ÒbÔµ)4y4ŠîÚÚîmÈ4SB'þâå$jÅpŸ¼�ƒSfÍž“´ q×ãŸ¹§>žæ§i¯]ês]jR3[Ý^4—–¬¡
+<Î]‡Ú­µw§]óM®Ï)L×/ìrF.™8Õ#‚Ö4çNDFj<)¾UúV;Æv´>«FH)á€á7E˜�¶âòýgŽÕ&ú²J+ssÊžšŸÙ§¾dãÓ[TŠA¯Û=´·VÖybj×’×á5÷Æzp	
+'QF™tmËÛÜM,ÆÖ%ûVªôÚ•È~VÛ#>&/õû(§ay:©‹ˆHˆ¢µ[®[ƒKR·+>&9kk©Üj:üöWkw¡]Ü§×lå†­’P‹È}o²T=>èãªð¢ËS¡±øýoEòÌdjVŒÃÖ%Ô÷ýå{ŠöðÍ\³x™ŒûÿSŠaÁ„GñÍôÿ˜ü£åÿ9ù|èþaÓ#Ôì¦‰+Þ!®ÍŸ°ãÃ:].mž{$}OÉÿÎo$éžEó†£ iZ¸ÕlâQ"²¯bCˆ$#–ç¿\ßéÍÀ8Z�EåLXšµ(½è=¾Œ¹Ãß[Î;\Gq ëÖþ§÷‚?øÏ�þ4ÎS·ãrø~§{ÙgÕøó{Ó�]zg-Aèd,¹¦à8xåœ†éŽšü••I	—õ®E^é(âJ¿H?vJLH~ÊíM¾ÞJ<˜”X(‰<�Ž4ò†�(2©
+Ù4±	HûC#IRå<nGìšSîÀ¨ˆ¢Ry·S×E»”L˜ä©t¯Ó+’¡nŸý_ŸðÇ9|üêÿœ”÷+åÏú:ÿ‰Å�·±ßL¾ï�i~>ÇÊ²šÈ§Ûøg]„ú ‡%Ð
+!ocúðH²®'£þSþXù¿óKX‹Gò¦Ÿë0’·š”¿»´µP^²O/cFØf.izK•Ž4ôRòqÐt
+'ÉZ†³qo�moe©êÖ)éÎRQ
+øÈ=Å|ólšá�WŽOEŠ7�ñÞÂ®#:}ß—áò¥Æ«y§ùj{ƒíÈãp‘^OZö1�ÉŸ±Û6�¡Úƒ$Ïã òFu÷{=RIÁšYLÆ_‰˜žE‰Ü±näõ'¾s™5[·p)ÝÝs£Çû;ü2‰OˆÚð"-n!Ù
+½OL�¯=ÙØr�)ñqé™8Ìxw^›PXáY5õÉðÄ¯ºÔJÆÂœÕÀ<2³«à—éý¬rNPÂú¿ûrxŸµ�F
+B›+¾3Þ£z.9#à´ãôæ÷Aœ�Ç½êðö0Í§ãÍ±ýµÐû“+¤š�Õî¥r‘G;ÌÒImn¼
+†2Õ—µyW0ý¡Ô\O=‡Ç�Är¬*£Œj
+T™$JHžÝ3#Ù¼·Ç›«íêüy3ß1ùgY¯t1éHµiìÛìµ?—:inm×ÓÁ5BÐ™b»SŽ¾ —öi“Žnð8ž)­yçH´¸úž›$º¦ ÄªÛÀ(ŸK{eâq�²Èiëf9>£vÊZùB3oÅO +Ú¾Ù\¸[c�óGæÔ¢m~Å¼mŸD�›&b"äëõY$cÃËÍã$RƒØ~¬ÚñÈ‡^#w�Ú‰¶<]O¾Q<W¹m„'�˜ÃéÚ¿ù½÷òkS{_9è¬¹g{GùÎ¿ónaÌð½_bi0ÇO!?.þòûÁ®0sûÐw‹)on—OŠ0€äŒŽm²<vÝt—Þ¯ª„øä&im�µ·Âÿ">üªh¡âp¹]àÛ\BÇ…'‚@Ô2jß‰9�—SûÂ=ßs™‹AzOëéö—qV†™jk±D4ù2~óñÜÙáSã_Ì;iô½^ãM’F"çT¸½Ÿe& §g$š{gU —ru:ˆGIbþû^Þc]&ÆÎD·?¦Í“Zi¢z¢ÖÞ5äÕOÙ.jÇÜ“ƒ>�Î^]^?Gx·øäÆõk£y¢Ú^Ë#¤²ðy.<™…NÝ²±xyLCèÙ¡h1ý/÷L.úØº$Ë:úÊ„3í¸6£(!æ{CÌ|CéïÉ-WKµºó‘õ‰RÃEüÃÓ—Lúé5ŽÞù6€¹þR$oö\sU¨õnÝ©ìòr~9{Ø‡ž<›¦j:†‰¯qÒõå‰P‰Ç{’ÓÛÉü¤PŒ§O—€ßG]žG§�ØùkÌV©nóY]$w!¹�ýU��rýÁÍ†]de}ZÊžïÒÏÉä‡Ë7
+Ñ<%¯æh_ö[„(§ñ§ÃšäîN\SŸ½îü¹'*Rµ$Îœ®VãÌwôþ;Ðswùd�EfüSÂ1?ºo§õa3âÉ¿MØ¥Çßîèø/ó5º÷—¢ 4O2ó
+Óûä—Ørá„�òûË‰­ŽxNûýÞLU·HõiÔª§¦Û*tƒ.ÓíŒ8¹ç#ŸPçøri*é—ð‰5x˜ +õ©LÔaáj†³€½ï¥?!57·Ð<Ñlƒë°ÉOøÏÅÿf¿TmËÒŒ¾%Çôw'žb–=A§IÿyÊBSÛ4ò—	§ É,ü_Ø–é÷³ÙRœ©8IQ¾ì#çðÌ^|½·UWÖ¤´fV+‡ð=Ï"'ê´³þìóÚúÿò³óCLóM¤MÔ�ØëVÊª-ÙÿwpFOö4¯¾dœ–e¤”wa?™º–•¨yºúÊÆùn¯llmÆ¡Oñ@K³ß0AÍvÁü|�ŸfÆÍþ:¼ŽâÞ?P~óÔEBÙ¢òêç÷•ÿ…ÿeš½>0ì3š’½Ï“u;«A4\Ña%ç½
+m0©[–ÿi³#ƒ„ðµË&ì'X‚]>;ýV¸’Â}!·–®$‘\â—b¥rèb£tÇÄjÂk¨.¢ŽÊ8ç¹šä"	G!*—.¯‰S†8÷G´£^óN§s¬[<ÖÖþ¥Õë´°ÁÈf-G+ZfIÁaÂÔ`âLdüØÑ¥»_/ÙÛN÷öDÉÎCépaÿÙdt0;ÿî—Œ�D�»îDÛ_ëÍÀ—SÕ%á"³ÇCÁvr0Ÿ§w|%çzÍäRÜ_[4³ÚIâ^ù–¨,Ýë™ø‡Îúþ"×÷û‘ÞF¸½Ñ#Xì§ÔnY®YÛÓ—êè"”qjŽûåz¬ ‡X#âIëÚt’A*<F³DkÉLÐJW:nË† Â5¿ùË{ë-ÜhºN›'øŠõ8µ7jG�ÄÉþp6Þöv�ø�7™Ôeá/ŒõKË»Ù¥»¾¸k«Ë©[‹‡5gg$’OŽûæ×xb¨Ë.)•sËßLÿÎ;\|Ûh~Ì‘ZÈ?ØúÃ9�hÇîÿáÜvQõþ<ßJÏÄ™=n™ÉivƒÑå\Î”ÜÔÓ®T
+†È�‘–
+”W$¦¼¿^A^î³±•KtÛ5'ÂE11?gn(òbVz¤)®ØP‰2T¡öÁL‚�*|^øÒUdÞ½{åRæ«aÌÓ¦EUe<¨|rc’¡Ý�
+¹\•/½ôi©Ó‰Ç9|üæÿœ’’º¶€¿ñMÇü�‹;oc¾™|?ß:Òü}�˜ížu0>�èGÐ�/Zé—ºÎ›i¬Þ>�£Ü]Fš­ìKÎHà$	$Tî#_ˆœ-ºaÄ_½•ÞQò“<›¥iß—Ñ[·—g‹×‡T€ú²_Uu�åî^¼©û5ãÛ5™òz¤=ÎÇ$8^5çÔOñ¦¬DÓ~ñA®å¼sÈ»`˜ê6ül‡E(~<Þ¨ÚL°^Çh¤î Äåd1¼\Ï«êÚ¾Ÿ*e‘™‘Ý´c¤¹/®ì§dä†Ú5�âQT’$½I¶þ�2Ùb°¼
+iæEV´Kxê÷a^Á#’6ibˆT<E·¥ "b+¹xEæx%Hä7�4-p¶Vî®(ÓsxŒ_Õ¬f¹"$:yü…BëÍwK{?¡/§i½ØOQ¥
+D�DøœR„¦Ã¾ø#‚S;u÷/ËÏ3ÈÓ›il¯eF�Õ#æ¤t†;™îÎþ9‘
+,ˆ^žj¿˜vpéo}4ØÆÁYD‡„ä²Ö�f�í›]dqÎÏãŸ›¿ì}tgó™~™~‹�K<Ïsçß>ÞëÌÐiÍ¨]'#nzËç�ú¤õ>ùÔÿ%Œqü~·KÛÞÑ~N;Ø;Àî/xü­ÔõÝJÊêo0i°Ø]´È>±¬³Ä£ˆçò£8ïiqÆDØ¯Ôãèa!´¹¾‰Ò?1ü»ù{«è·c»†ÃGÕ%x$»v …“âW¦fû/GãúNhÇÕøò};­y×Ëz_—¿ÅrßÃq¥<"îÖu}îC­TGìzŸ|êg´©Àá~ey×óGLó¯˜uK«ï4ÚévÓÌ	¶&âeTU
+ª°¤L®@ÐõÉGø¼(}Ì_”º8iWÌf{©Çtlî¸ƒíûœ¼hdE�ÇÚÑ-Nèm[Î¾K¹wúžµVœWÐš>ßå*�þY	h%øþÖqÔ¾vüÅ'\ÖôôÒPjUµàdšUÏóo›)b"y†ºÖæ™ð£qé¼K�ÉÞh–Wh7%ƒQìi™r×Æ?�Øì£ì¯jêˆý°ÿŠO¬ÿ-üë')ÛJ’
+úœä–8èC.ßÿ³˜ÒÖ‰n­?°ý£†2É“n_Í÷t“ê(Î6ùÒÊÑî'k/.k¶wA4Ë«›äx$‰O§ûÖ�™¢ø�iðo×1'“‰Äì=V<3–<¾]þg£éo+y/Î”mo©k>V¼¸G¡³Ôë$•Ý~¢‹±ò¹íZ‘ŒÌøON§~l‹Pò‡™ô%fÔôyâ…+Æâ%Kˆ•GR6uAÌ|R²ë¦Xm¾¥¥jM<6Z…½äðšL�MÎE#¨q™ÓÅbÖed�æqHò3ì¢5¯.ßg07dÅüíä
+Ã¯çmvßÉšzBÑú—ÏË"ÔžPÚ€gs]¾qî0CGÇ2YÇYÁéîbÚeÎ—{§*è³]Üéq¯§es{£<‰ÁÍ£© b*µýšT™ªÖààŸãÉË†n'ÎÿšÞ_’-~Ï[†Ù®þ³l â2ÆÕ_‹åLÚvnr#Ãøê‰ö,õgŒr?ŽñÜòI|½©ê0Ý]¤Q¸y=S4ÜþØå°ùÙËT!ÎÒû;¿Çû§×Ÿ”Ÿó‰Z÷æ‡‘tÿ1ÛkVVÚMôÓÛ[Á"È^¶îêÜøì¿š{f&|¿½2�™v¾C „tçøoí©y÷÷§·ó…·–~\ó>£{æm6ý
+ÒmF×N°ctòˆ¢�NÛÇÓ¦Dg.²’�Åñ”p^[öîŒ2pÛ¯%?<�ñ=†lÅõ?’¼÷a­y.=ó47Y[<ÑØéÚíÈ³º†5U
+!¼�÷ªiÓuQÃFÃËêt"gñúÖÛÜÿÎ=Yj/zg�ô¤ýO¼µÕ,‰¯g†âèÓÃžþ4é’–œÊ6ãG°8÷�µèºGœÿ*ôOLÙ^~aê!GÃk<ºmºôUšæ ÃÂ\ü^ÄeÏËôÅ3x?;<µn+¦ù&îìŽú×˜¢†¿@é—æGØ�^!À9êÿÅ)Íÿ9¦†áqùanÈÄl¼Â'j{‰�ûòè”ÿ ýoã‡þ)ã~züÉ²ó�ÄKåÝ
+ÿÊÂÆð]]Ct·Sû±îy�²Ýs­ì=ÍŒÈþ7>oívogN‡KþoôOŸ{ç/4ËkæÛ½6ëH°»°kGõ—‰ÕÇmæ0…¯Ï4˜£àå”}ßs¶Övn¯&8K¾ÿ›úÖižSžëXiüËgkú7P!>±
+ý³É” 4†ê^ÀvÊ²eàƒØvG³8³jåÃÕµóî5ÊUÉ›�Êo,HO¥ª]
+è�ž›u Ã5‘í"ãõ=N£Ø�‰_ñ_ñH…ü£òÂg¾žp½T¾Y“´I?�Ôæbö'³ã�Æ½CúÝßÖdzN©å¿ËK˜tŸË)|ë6 â{«ã¨\[}ûˆÙSá5fc¶]ƒ'‹Íã=£ö_&	~çôywËÞÆuŸÎùJ½½¯å•¦”%¼çu¦Ô%þ#O|ºz@M¼Œ{;[ïÏüßÖÀî6<Ç/(bÑ-´€ýeµ´�dõø›|‡äƒ�<:Èþ"‡³™uß^æÙÖúú:ŸPaPÔýˆWf§ŽcäÃÀZ5,ò}_Žä}‹jú,ï®_êºš]ØŸVÙ,¥ôJ€)ÈMû
+)B1„ØØöìrmøûž¡ùCæ	µËŸ0ÝLm"úÂ‡ú¥¼žµÓÛÏ;þÑ'|Ôvîœ_ã˜v½�¨ã–ßŽlóÍ1Ãê¤ÓXÏ(‰ÛQ¶~´+ßß4=œkñïw9!ÄV[jJHä�PÑ¼Âóz²=+êW“’Kz×2òz²â©HM¼×w/£Ù¶Ÿm"/Õ^ö_X«…‰�rMiíL†|Ü‡†¥¨y{Q¼¼‚{y-â¶HÑ.Ù>	~²O>J¿´VŸìr½6q1}XJ\;$3ëKy­Ï7™ôù¤ÕRK®ßY¯ú=ÜÅ$/+Cé7'©®ç~ù·.#ÄXÖ“ þX]ù†öîÏÌWÖŸ\†oU®}7ôÏ8BŠ2© <ÈÛ¢æQÍ/@�˜ð”ü>æa¦jòé–75Ô‘Ü\@á˜ÅXŠúqüB�3âà6¥›Ògº€ÞM%�Ž¤59½Kiîáj§b=ö;dç’Å¹RÓ›d¶éut¯ëÚEclŽ•KH¸’Cw>ù¯Ë–Û"8�e‡Ôy½ƒ»ÐÕ¸…~ð¹�yÉÍ–àüþ¾6òß^ÉhZ™]­ÃuàIã_£=SI#{óÙãµ{”Iê?Ë—@Øu«Qúä•ôüãµÉdÖ-ÏÙ{7ü‰™?æ¬ç½¡�îoñÌ;>Ë—ï+ñÈ¾«•kSQ…áþ®ÙÄ`>‡¬�²„IýD&¼)_‡éÈcúC"z{‘˜±ïòÛ#$'¼È+ßQùÍþ­1“Rt²UkˆUˆøª¸tøk×¾K¢«’
+Héý™\•›bÊ¼5,®EU”òZøäUÜ)ºTï¾*�¼§Õ¦  âvÉbç/ƒ<|ßœó’ñÜÐÿãŸñ#�·±ßL¾ïžk´þ¿Ç“æI
+HÖcú¨Ÿ5X×ˆsÄ¯N.½r2l‹èÏÊ_ùÈÿ=þShzž‰dF¯£Ü¬�akvÒ²��>¤v5$’�Îù�<|VæãËÃXù/Ì—Þfònƒæ=FrÚ† âi�]}Qs"ý“¸¨;tÏíÜ:“øè—M–ñþ;Õu�KB·ƒY†X„
+rÆæîÜÙz�Ë*qa+¯r4Ì�4ý?Ž«a�CækGëëÖÿY1ËD^S2$—)Hþ›~ì"�«·©NÙ™›CáFÿ{4ÿN™®£±™à‚8ø·ÖIy=ke*´K~1ÇýšüŽkŒÃSmu¡šÙ.þ»YÕV�¬Ì’PñOÞ•¥vëÜõ4Î¯dð/žÙé~Vê+u¶ÿq×^›–´_Câ–tyQ\¡«ƒÉ)àz›#D_‹üw±Êc3/áºø¼—óÌ_¡ÉÇI€Ù„P>°I¬¢d$%›TüÎn{+Igñæô=‘§ýôµY9
+¯‘�OÔðo(YCçŸ1Ú6\ß~…¾• ÓììC5Ã”‘V„lcßâ>9ÖÊcàê¯´OhÈç<åú==Ã»¹í~FÓt;E¡µüµÔµŽvÐ›yD )šÚÒEFönRÿÁæ“[7(²­%MJxM‘Ò×÷n¶©ëúlWG/ƒá|åûK?Çxv@îÊüÅå]#ÍZu•¶¯h.#�Ì‘Àpøf™—ìôÌy~9ºýtl~<˜.¡ùw§ÛhÖöy«SÓ|½¥»ÞCc5Ý,áy†F‡¾äœìüi]R4|Qâ|ó®ë^\Óï"Ò|±y/œuO³èÁ¤À7a+üAkÜæ^,ÉÏg,8&­ù�çM
+èÚ¥–�¤M*‰Ñ¶µº™x¼mFM¨w¾ûfÇœF4×»1	0|ït.üÓrž¬jŽ±¹�Lt¢Äª£è’1†¹H–OåÌ=nÖhàÔ¼Ís6Ž‹/©¤Mq;$œcGSÅ¾µå:Œ\Q§¦öK>›Oª92sø÷Htzœ›~W³äª–è‹ð¡ZVƒaÓÛ4ŸÉ’¾_�›ëÙ½¬ÐFC÷_ñ([¿ÍŸ,ÜÅp«s$3Kô¥A°n€°vi2ü~¶¾×öËO©ÓP;|{Áþk±ó¡|—/¥èw³[”0=ÛÛ#²˜ƒ[‹˜ÏOåQ™Éô6ü}¯€ö†š2ÊeøäOž<·n=)ü¿¼ÊœyY¼²*±Üñ`n#={`ÒéN,„þ9:­^œÈlÍü³ù÷æ›KØ4O/Þ^C¥Ü“Ç9®Â,2F#qÂ³ŒT×ªŸ|Üö^žRÔøäYjõ^š�ãtm¯æžµù{ªêÃ@Ô,tÿÒQÇ‹ˆ,^gú½˜ÚöÚHÎïû,OŽù¼öÇê#ßþõÔû?¨&ûÿJ_ÿœ…óÌ±:ŸÌ«H˜xôqenÃ±W:x¶mýÁÎk4e,qÿ½é³å$¼Ly†÷ÌÚ‹z¦©©NÕkÝRèÈ+Ð7/N.;;`ž¸°	Kˆõ}9ù_£yƒD°¾}oTÓnäÔ&I-ma¾´¼u(·Á?€ù í�ßaÇz5æ�¥j×ÑêÖqÝY‰+LIÆçÛ5Ú|7$föG'”<½mËêºeœ$ÅãŽ>•ÛãmÎlxr³VmãðNÿÎ=\Áe.¥§Mp‹pÎmãv#äŸIWnU’¹?q�n‰êNôåë�4k¶š—™tmC^ó$WºN…eie2]Ã-ur†VT$««µ"JMú˜Bä[ðæà/ÇR×VÐæ‘.&ãnKäIDhié	û=¸Í„tbbÞŸKÛY1a2®}¹èš^¹ùO¦h–RyŸU¿ÕõÖFk›]7É‰�9²¢(T�®BZøþÖŒ¾Ôê¡Ê_`ÿ‰j5ùsWg¶ògå~­®Î†‘‹Ë«Ù9Wz˜l$SÝÏÑÓ%8€§
+^ÒvžMã-½ÐýLßKòæ6®±<ß—–zE´�ñGu*[&ý>�¯^
+�ŽJÄ\\�±Ú³þ/²©0oùÇ?2j/×umA%äVK½¼‘Ã
+€ÅÚ%4Ÿdc‚$ÉÅÍ›[˜zå¿º(KÿùÆ;˜mZå¿2"Öt]7ÑÑüC²í6qŸ%~91ž]VžÅö•Ø%­ž˜-F§"]Kç|}n,Ä|=Ú=Å:õnÍì¼cGÆ£æð«Ú£˜fç}pÌ+SÖu­"DµóO—ÕâjýZwŒ0t;«)n7Ï'LrÌhï·síOlÌ´±Çž7Ï¯�ôŠ•ž¯å«éR[nZTöî$?»¡¨ÛâÊrcÉŒp�ÃµÐžÊË/”Ï?¬ò±îäÉ&ÔµKŠ�7W±pÛ…¤€ý m˜ÐŒ¯p~Ç«üÆ£‡ü%š?ß|R©fó¯"#¼´#³#ðmó&0÷û>mGlñ)ßÂ	†“Ô²O'šäŸº"ÎYÊ=}Äg–C6nN¯Q¥Õfþò`A]yÿY™FésXÃPDòHí·¹“âûòíC×ãîyìý˜#"	¿Ç½“éÿ”ö`)Õï$ºz|Q«P}
+˜Ù;VGñû	ö\Oãö²ý+òçËrú‘éä²¼“sü3}£)~?c áØ~>× ·—tYb¾�k$dÑºm”t¿Ø¿’?�íEùoËÚ.‡¨Ï.—aoc%Ô%Ò@Íojj%“'ñ¸v:L~—Ëj.Ìe£wh(¨©Â”ßŸ«áš-&§€;L†ÂFÖÇlò&—s)[Ž‰RerÒFL±òÞ‹Z}Ÿù®-ÜA
+—�Á¢¹ym×ý>4ƒQv3GÄGÀ�Ø¨š®‰ð“[°¶[ñã)É“öV›úÙ(“¿76IDð„ìº9?HÒ]rI-tIï™ø³Êœhêgóy<½£~•‚°ªZ	8HÊ›ð;åÇPe¹s¡3�qW“`°Îñ¬�4S€ÒŸèãn™‡9[xTºÓã©pŽ5¡²Öµ<NQÅ»e«ÁÌ¬±®ÜY…
+}ýr9l…âW–/U$Œ€Ë2z`V™áËŽE9ãÅ‹ñÞø6ëÊúäÉþã¦tx¼c•Gm³Ó4úèˆì^7>Œ™%I£ê©êóÓn…OÃX\ø]³::ÈVä:üši‰PFÁå2\Ÿô}òjý’�Ë•K[ŒuLtÓzÿäï—<É¡yµ¯oô{Í>Ùì¦ŽI§Œ€kOæß4½µ­†L îìôzY]—Ô×2Õ¸¨eäjÀPuðÎ'ÚžšöA=Ü`éá„xM6AWN»`ìÊ(½†K'&9ý ù†Öú)	#ö®JLXeå¶![gôù{‘Š¢DœÐ?VK¢¯i=A_®J eR®KÐ©é•’ª2_ô Ó£*‘TlRUkã’�%h;Õ©Ó
+ ïGµ™<Ébç/ƒ<|ß�ó“Abó€©°’¿ò5³¶ö;é—ÃýóÍvŸ×øò|Ä@�Ò¹Öcú¨Ÿ7WˆcþOñÈÉ²(©RK‹gXûÄ}H—¨�s`Ð?ÊYK~Yy`q©HîO*oõ™{g”{E*ÔÇ@õz8^?Ç{!Õå†;-~Õ,#¸½‚"×Wóz®Ðs�YR ŸÊC|[ï’ÑÏ„	wþÖÈŠm,/–FÒ¤Ñííd¹å/Öbµ£¤o{r8r;ú‹êñßmó?6³ÅÉšØè—¶–z$“Z\�L6šÃaÊBÅê/"L¨:~ÖjÎ=ÊÝ}Â¥¶Ÿ4çM¥¤×ðÞ´rŽtž{�/¬§“wn•Û¦X1»‡¬Ôøaqþãï/DÝÜêÎ—$Ç7T„ªÇ36ýQìÃ""Dêù:-&¦]¡šx£þN¯üá~]Þo™¿6ÅêZ‰d^—xÞ4qÁiñxí@#Î«²À�{è}©ªñ»:1ÇÏ{ÿL;Þ—ùi¤jZ~‘¥_éwCwoIrñ™
+,\X·»Wd¯¾k{[Zcª˜÷}Áç±bâ :3ÄòÇ™í¤¼ôuéÖc&™|V¥½¼1B‹2~ßÂ€ØS5Y{J«ñúˆÆ™E¯—Å¥À¹y‡	"C,n‡Ÿ¯ê¿¯qÉ·ø“ŠØmšÍn«�?Ža¶t§Ïþr�È>]‡YºÓeÔ}[ˆm£´I}0¦Xåb_Ø¡†”Í×³Xøÿö�\v|�«k¿˜?�×ÒZh–†ßG³¯$õ½;XØïñÉûrxg|#|Ý9Ôðz;™F‡ÿ8Ì�éIæ5Ã ,ÐXÆ²µNäs‘™Añø:äiÆ�ØÔaâ=&Ûþqßò–Ù+toõ9TPú÷ª¢£n–ê”úU.ÔâÜ~>Æ“IuÉ?ËË¥®�T¯F[¹Øôñ}ò™v©�ØÛükæïÍŸ"é^V¹Ó‘ÁÜl]dbõ¡§ÚmÎl4ZÏnâê°bÁê<þ/e*x˜‘iµ×7œ"­Õœ˜òuûÑí*°)Æ5aÄ•M÷9O"�Üy>ˆòåÆ‹æ¹}ZæøÃ�7¦
+MwÍV¯´¼?Çìv¸4rËÍî¶_”¿–6†�¡µÃ¯Wšyä¾á$Uû†i³{@1Çñú�†>ÍðžŸŽôš|«å}
+ÚÊëË:E¶•#ËÂîé#f>Ÿ‡,ßyÎçÙ.ÓŽi_ãø¼žCÚ/áŽLOË~TÐ<á«]7›4·¸Ó,­ÊÁs©¾°¼6]…cå›nûPB �?÷¾MÍö¢?ÓæÊ$ü‘ü§¸@ßSÔajSÒ¸-ñÓâ¡hØõ¯|óŒþÑˆÄ~?CÚÏ³?�Ö�?‘”ŒHç¯Fã©I£ÿ�¡®Z}£þ?RË³HåøûSŸ.þQyËš¬:Æƒ©ëñêŠþŒsIVwVy�Ÿ¶DÅ~>äcÑÊÙíÄ^Yµ»Æ;”h¥RI¯$Ü©*¦»øf,†GŒr?ØÏ&ž	?üãî�4Ouc¯Î"‘X´RAÏ�,våê­wöÍ‘íøa¯ÇØÓ
+{7å‹æŸÊ½TÑ4ÝZÊúÇ\¸ýbÚJ‰Zqš�)˜:ŽÜ†cÆ9~<œÜzNK50~eX]Í&�çÐ&»‡�Â¥„3nÊdõY™vñ?†cC¶ãøýMÓÐíøýo�ò#Ê×Ój:ÅÖ­©Þ^LóÞ°xàYe‘‹;‰'ûÃôtÌ™{Eµøù8'°ñä<r•_—íz�ùmù¡ñ{O%XJâ…¤½^5GCY	ïÊ%í	?�ØÛÊÒÃê—Ø[Õ-õ‰­mcŽ×M‚Ö(Ö‘AUEö	°ñÊeÛ¦Gñú›Ggâç	mî?­
+ÞdÕš["ŽÍ‘þU2ü~ÄþN#ø¾Ä4ºî¬*Þ”MAð’µüpÃ´Œ¤cøû™OK§”·÷žk^yó$.öÂÞÑ¢™JJ®’V‡ùxÊ£ðË´úóƒ%þ9{–z.£q}‡õ¼]<»%Ü×,¦KxžE¸’µØ31üs²Ó{_�ÆX‡!]Þÿæ¼öOct±œslo¡÷9èŽ–u;_ªÞÙÇsi*ph$Z�¶NqznÑŸ‹){¾ïsÑkèãÃç×Üzü^¬þGÛÜÜ»éZ‘±`¥„r'Âk½3q¥ö‚< OŸÇõ8zÎÃËâOi|ÜXáü›Ö!æï}hž�•Ó®ÛfyíÜuý¿©ÇÇÙæ÷É_æþÔj~Rë|>-lJÐz´ÊlÂFÀü|œÏÉë =¸tÚ?§~lƒÊÞNÔ|­{qtú“]}b]¾/ò·ÌMWiÆC—ãää`‰ÞOìýLºê[ÐX,òÐ1�Nþ­üÈ–îiýÂ
+Úí�<•>/¾>,QáÈ¯µ[¹9¯¨ç�z×%âÅ7Ã³qCq$è¥ÞµÊåš+ÆÌ|ºSMÔŒ×,DRFRV+S¿¾ak}pŽæC½ž
+wLƒëé�G	kN›æ·“ÒÝh«}NÆã‘+r!ß‘"5áá³o¿\—åøbÂRá4—ê:…­”7:“&¢öb%„ØÄ‘?¦ä½.@ön›Ì|G�[þjùnK¸4wšx]ãßêˆ•Ávž™¹ÏÎGÄéøópå¨�ˆGã“&Ð¯?Ä·7ÊT¸·TƒÔW+P<6Û@Ž˜nåˆ@†f<µr¤{¥ÊQ‚­Mk¾ù¨– d<C«`ŠKmÌ
+%,a »0¡Ûn˜ñ[`cºÇÖ,¡�äL¦^\kJšõË±bâÝ$îÄe¿ÕW™7<’vå!¥>[fYÓØE¡¦¾Õ¥~-tÊª t ŒqéÄw_jY§éåeõYªAë—Ë1ˆqçˆ«éÒzQ¤+Ès¯Ël×eÏ>-˜ÀsGÈiSJsí˜ç>Nÿ¹¶"
+Ÿ-±Á–Y&bTÄaJk~1“�É>•øäÌdHßºøfT�­´	––œ*ÔçË·†G'&²™ñÿ‹{×û3
+­ô�(ÖH…8ÿ“’‘`šÆP­pƒ²´HSQÓ
+ªå’¨ç+‘Ý�TG4ßìöÈÚP“ÊúkÐtÈj·ÓA"ô+¹ªêŒ¦§ÇåŠ¢I's×¾*€½çÁ©Ò™U¢Gj|‘ù±ùM©~bë–°êqé–úm£Fò:s
+ÊBz}9Ôögjÿü�V})›ÍSþq‚ùÜ¡ó=ªoÔZÈ?â;fß'´Ôh~?Ø¸Ã²·?�µZOùÅK÷^-æûajY-	o¼Ê§ðÊ´Ç»ñòOò4Ú›YÎ=hv¢ßj×:ª¬gÖ!}b:PrjPm×0õ½)òü}ŽF-†+ñ÷½÷ÊÚ6•¢è:~™h´o(…NDfsSîXçÚ§œßã£±ÅWxúO¥þ�¹ú³}YØÕ¸§!õrÜé¶`âÓm’6Xõî©¢i¦+Ù/]l-IõR8™¿xdB’‚…š€S¾gið1y¦¡ù‹ä™Lþbžâh™Lj«wê)
+Ô¡éñ"·ûÙþSSuv;ø€`sðì†´üÆü¶Yôj»ŽHÚ:‡ÕÛNËÖOü—û(þ´~e8ÿ•¡ùm¼aõë&âJªüú’j¢ûå1ìmpMyzOéjÔêªûÞ[ç?7ùkU±ºýoo¯ú-®£kwéÞGCÌ´U>·ðÎ›²´9ñŸWèóówš]Wæ0pþ9±�"~|h>TÑ—LÕ´ËŸ¬�ýÄ
+¦4«¡}G�©B:¯ß×25þÌêuyŽXN�®ƒ ®ÿ'Ÿña¦ýÑ�‘æzîÌî?ç+<¾o+ß_T(å~¥ö$è6ûG0±š³þP|‡ë_Ìc—ð}¥d?ó’:†±s:/å¤÷7!}yMàõ~3_Lq†”©Êò{+b²Ìqu4AîrpDPœþ^Õ?2´‹+O?iQhö1]Gy�c?7&WŒÏEáýïJf9
+Ï†~5ý­ÙáÄm§–ô}&ÂÆ×N°‚ÆÖT†—Š¨}¼IÜžç|ÄÔf9²ž­8£Ã`Ócá%0äw<¥±Z}9W‡ØãÿÉ¬&HÙ/¥EYdbÓ—D«Ìÿ1.ÿÆ�c<º«Ø-„3F!HùzœŠž¾ªøøfÛEÛN8*ëû{œ=GgÇ‹¿ñÞó¸?çtéçnZÝÍA5¬)ãîÌÜKÚ3ÃËñòu§±@?�Ö›YÎ:y}Á[�nü½¬"%¦äÑ‡¾Q/iÍU~>M°ìî
+‡ãí{>‘å{=M‡N±@‹	Tõ^ž£Ó¹ã¶sú®Ò–_ÇìvØ!ÀÈa³o¬«4hÈû�3[Å{–ù(ÿÑ‘zZ=Ÿ|´!&Óâ3,
+�¾Œš¥Ö¦>´¥	ÛMšH�Õ*hä	ÝZ·H~±º|+·ß‚Õoõ[¾ RŠÇÑ¿ã›]&O@¢;Ú­™h^Kfû7Kû¿øÈ6êãÄé�O
+³¢Çêurù÷üsT#Â)ØHÙEÅg÷R¢
+þŒ®HMÅ‚QxÇ½,Š¬ý9  ^ØªódH	Qã–G’ ÿG VP×¦QžÅà1Õçzæ˜�ùp¯¾ec’±‹Kõ‰(›S,2¶%š¾š�µSqOÕ”’„š]<z¬àP!"™(KfA!»Óx‰¿ÊRrøÉ+cÓibÃØ`2ÝR›«*ž~¬²2TžK
+²á-™'Ô7O§«YÙP¸ÃÄ¨¨lÿyôåRš¦/gñ£õdD•VÞÖŽF%OìáØ¯†cd>¦%6µ´b
+jER~È¨úr¬'Yü°ò¾¯p.ä°kk–nS˜ÚœˆÚ´÷3±ö¬°À@tüw6Ã',Ð¼¿aåûcm¥[úJ\9yMY©Ö§5ÙõòŸãö'&^&V‚X€¥÷â=óK‹v¨ò@\C¹Å,WY¶õ�'òæf	Pƒ’ÀñzþÖl¸ö`PYô	Q¶øa%�$ÂÎÔ 8 CErKd³KhÈ@ÐÒ´ùæ²fÊ·'Pµ­;äU§^;ó§¶ª‡sUµë¾YIçZ½~Y`dÖKÄ“…(ïSõâ¯¡Ë8‡M³_"ã£ã•ØÝ)ðâÊ‰V Ò^¿³†Õ[‘m�\®GvANI=%ãã‘´¡Õ‰çOl�TQ5ªÖ¾øª¥˜#˜?f¸ªuÈ„<1T®ü3DåþÑá�³MræÂDTb˜åòÂix©rÁIÐe@VÅ�³º&Uâ¬¾9hˆZ,~âÛvÂDCYÉF�-dŽ¤½ò,C0m-k2:a±!a%-²öXáÆi	mç•ômM×ëúUµíGÛš%‘¾†_�s7heÆxc:¥ú'‹ˆÚC/å—”Ø±]>hŸ³ÝÈ§m€•i÷fQíœàyþÄ~¦>™ü¤òz˜'¸´»œ­h¯yuN¿ñ›)>Ñfúnüö¡#MâzSË/Ëo&Ù·8|¿”ŽJ÷®	ÅÙ˜}'1åÚ:¹ý?ïS‘‚?–)MÏä¿‘ï¯LóiL¢CÈ’¢¤oL1í
+TE�}ÁÌžiÈØ��zoiùCä}>hô8¤e?jWf'æ­ðesíAþ?°1üÞHÿÚmŽ�¦iÊ°iÖqX-�«ÄªvþfM²£©Í.·òižc#ÄEEi� šÖ Ôo•­'-£."ª¡Áv�vY¿ÿ›¢&·¬>yV{dâç�ZŽ|¶%VIeêÛ°¥Q“¡Í‡â¥–6Ž²D¾
+ñcÄdã*GCl¾½S¡fAô’NV`	´BT7F›D!ëÔ}ÛcÅ¤—qFGB6Ê'+‘¤†§cAóýg%”‘r|Wøeñ;+„I®a›l*Ì,—Ô¾Ãõe;«š×Ó�6BÕ5³_[Ín?¾_ÞÚ®¿ífNŸ%c–HT4Ð?¿�«'úÀïøæðÇˆ:¸Ê‹=Ñ®>½f÷/ÆI-×ŒÑŸÙ¦ÃðÍ> TÈvxÍÅ1³ŠU�¤js�×n”íøf$™¦qÅ3ûN*ÙEÃ
+¼j65ëŠ©Ë”ó6 :e‘ä¨/N9võ>Ît–èbµ÷Éa:Ý¨g éOáƒŠ•ƒ‹B—JWª·Å–Æ[1,ÔD%Ž3UŠüGå¶BE	9ƒŒ¤R„V£"$È%ó[‰=UnŠ§-KŒ
+-È_²SîÀgº±Çƒ—üµýydf©aƒœŒ8×~¹pžÌƒfÔ�¡¶ØõÉq«V–äË*·
+Ð~¬L•]m
+°&œkµ:eR’£]#
+¹%tkú‡åú±âTÒÜÂA%¨@é•HîÄ¦–²£DÇÔø	Ûè8-Qâ¯î¤ø¿k H¶2~²©ð©RI•©ûñŠâ�dY‚†n ýŒŒˆ'féG„ÒƒÊPRžÉ¶EŠM~„¤„ý�©µ;xe˜åE�cæ EGLÏãÙ�@Í\1’Ç’¤1¬žš²o÷rËd§¼}«¼²ôlÆµnj+¹g5ûñT5)¶ª§!âµá_|²*•<•”SÛ,‚ëYÈÊ:vÂ”Ò’xb¯~šo�~Œ×Hµ&–ç•ˆd91(ø–µ9$+B£ç‚cfA/�¨\ý“˜ n”D^Ÿ—*·$†*­jèND±)³
+-2Ø¡-»5F_‘—5c%>&ÀªqÇÉØ.YJºQA_æÛøaT¶Xzeræ¨ic ¦Jf�‘¦*¢bâiáŠ­ræÞb«Œ|�O�?
+±TÉáýÁÊÈÝ�[:§J²%(¤Œ¸V/BIÛäp•Fqá†µé¾A¨äêÞ9¨˜cåêå9lUÊN_ÛŽF\Õ¨Á€õþÜ
+‹r†'RjiºâÄ±‹ˆ£1
+¸îvúqB#ÝÀèØª�¬ì�ã¾*Š6ê²�y�Ô1d2%fbÌxŸ„t]ñJé¾Ü¿Â>&ëÓ+—5Kî“š'O†NØªûz�vðËàvV2ñÓ‘­jÇ§%jŸéò•hÂõâÈ•M˜+Ç#/W¯ôÊ¤©e²É‚Y(§ÄÿŽW{¤ u»E´–=BåÇý-”ôþºÑe¯Ç½ÅÔGd�©É§ßLá]í&P'OÙ5’õFÙ—«‡ˆ-ÄÅ>OQµPR6e”0#¸" ý9ÌÏÆ]¤}aV§Ž&\[¯ËãM<1TCÂd¯Qö²AP.Ÿºn?R(=5£Ðxd‚±�R4.Tš—¯ÑŠ°‡Aõ‡aÒ”û¶Ë%f1Vöá¯·3ôerT©£:€(õj�¤â,�(¸!Õ‹¹1W,h‰B)Øõß|œU$š¼<~,¶*–K­
+õËdô$u
+ã†Õ2$ÍþU?V6¨¶�Å1µ[,d\�*èb«¹ù~¬mQQÅ^K‘%QÖ‘‰Áû àµD€tÈ’®åM½ÆTÐ>Ãä2‰ód³×÷Ž~É§êÈ¥,¸`Êôé·êÌŒgfc’^é™-e$t^\kï–±ä²/ØÚ›ôúpÚSI¿¹zo•lJaÈ&Ôã“ŠËy³ÛÈ);‡‰QØâ”¬‡@dy2
+ñWÔß®¦8«Ý]Ç$AÐÔÈ¸éÔ-JÈÅô†%âÉ¡­NL�K ¥:3ýž«˜Àn”"³‡¤�ºä�5Dz•!cúp*knPGL‰bW»å±B
+y*Œ¹sTŒ’£áêØ^Ú&PÎßiúå‘äªSlxžøU	 ¥GùôÊåÍRÙ–¬¶K^2
+OÙcŠ®ô/LUO‚*«©P~“Šª‡BAÅSD‚¿ï±O¿
+2	`Iý…Ü};åR4”ÂÍW%²£Qx«¯ˆÉ*(‚s$òaT�”ÏëÈ•I“U–m\iöñzÐ%÷?Èh+–ÅYb„aNà¹sT$11fôe&£¢Â©@T´�Ï]¶Å‰InGtø|:mŠ¨ZÝëÕPþ¼UBÜÖD>ßÃ^çŒ’ø±PÅ�w¬þ¼¡¤ýÛ'Á)jrêÖñÒœÖ´ÊåÍP2Ì}6¨4üp*ÀyG!áZŽ¹ U�žß3ð}8mQÖâ•jðÿ'&9*eo+ˆXPÇ¯Ó•ÉU„n8·ŽU%Ñ»�ÌhäˆÇp‡©S½³R$l0¹ìšÊéôû‚d‰Ð›yW£ÃÔÀôú3 Òäã€ÖäÇFÙ—•ï‰ÿqw2’ÐŽv’¬½‡ÑÓ1µÚq_�&ü(³TþôP·AóÍ³˜M›VŠÝ›�ûáB¸1¢“Àâ2APRIp}<*…gnÄQw ÉcW`±©êkŠ°Ù‘Ò~`Prûy`ä¬†ÚáÂ‘^\†ç+’ ®¹¬ÑÓí6!V:²²—û]ñT<4/%†oÛ=rqTÄ=Èé–ÅR“	“» ØG¡§NØ-P¨’zÉ�ª-á;±êqµQà$Qö—"JµdH¤õhÍ~ü¨±¶D•E[GÉeÿ&˜-Ze­D•m“áúFTÅSá_�È–AFDø×RÙE‡ùõå‘;3�Ó-E}‡êËâZÊ#ÐÓ§l�¬y(ªB½pÚQs«,5^¸:±(7‘”!o´ÝrØ¡§J±>4ýX–Ae)QŠRù;å‘äÈ:CË
+Q¼ñWº«üC5ÇMàu¦ýrqä¨”uýž¸Už_Ð÷ Ä¢‰©µ÷Â…F�î•&›âª‘D‹QJS¶*­Pªè2`ì¨i\¼n‹+DGÚ�tØmP®h@;õùý9T¹²	|Q™¤~ÍvÈ¥5p è2A‰@Lµ5Â„«Å‰ÿ>˜ªCZœU/›¨Éƒ²º5¯†Õ]ãæÆ.­
+~Œ�æ­ÉJqÚ˜npôdósIE:®It
+Ên•?¯©Š�Jj(~ULç Ä·ÛªŠAnZ8þ&?˜ª>JQL˜;*ýØÿ7é†ÕF@áÕ�¨ñÆÕI>©=qµACöÙ¿üG yª2ÊÊGJÕ�WÈÅ§rzž?¨dJ¶eôå#…j�qU·®Ñø
+|CApç‰þZŽÇñÅULÒ¥¬”êÃâû²A‰c²¿Â¿?ãŠ£íH+VéO‡],ÒÇãÔU0Óîäe¤¾à,‚(�egQT°‚úÙ�Ô00î;ÇôõÌ�&~L3bâ�¤v“Ìü. &;›SÍëÍM8ý¦oò.®'€½>ÃQ‡Q´KŽ`¸ˆ} àÑ¾ò3C›Nc2ìqä½Ód“Ô¢½@_°¯¶Vgº£Èª	n­×aI[°ƒ¥vÅ“LjTûd�T–ïû³öºž�1âV!y"[}ˆë×"U§«PÓ¦*£3F“ŸØ#A©Lf�Ç•@ø¼qU¦ é’Tg‹�NZ
+¥�^K_³L•«Qq¡ã××�ªÁ2	
+TÅßç�ª`yÃjTtÆÕEÒŒ)ûc§Ž@óU.	êERXøœ
+‹	™ªÐ#óvtµÚ½r%�iE›åŠQÁþùbªnj üñT²jóŠ¿gc“¥ Ž#§l¶-eéðåñä±ä�*’Ý*8áJbÍ#"�l ª],D¼dõmUJú‘ƒá_×‹ÍÔ¦ßk¾À€˜4=rA‘tkÀ®*�õ?V*ö»VFnG©ÍYqÓ QErqäªˆñîøUláút\�bS(æØaB¸›âÅQJ›S�È»£¨þ`zäIUR»ÔqÓU'~£ù°2
+–ëÄñÿ=ñJ£³Š�Ó$”ÌXz¯\(K¤’¢¸ªW,«,z¶* Z7_žD•r�:cjŒY­O^øB©!‰0ªdŸdaèÈ nÅ$�²¹%´ îŒ{b{šŸUÒ¯ïÔ¿7û±VÙÃÒŸiqUE’CS€•A;?#×ª‘f2	ÑV¡6¨I9r•_vàI?=ñµYlcXYl
+òARàãÔ^~ü~üU¸ëêÈÅ*O£"U+»:¡ÔlM�Õ¾£¿é$¸õ=Z×oGŽÝ?"¨ß5D]Ÿß!¡^'`kZ²ß £<õâqU’KÊ6íß$”•˜ˆè@^ƒ§\UBj½h1VîAÿÆAŠ·m,‘—oæÀYêÅ�ÃSí¹QUuyx�J˜êÌ~œ¤lmŸ¦’mNØX]­ôC�µÁãwò–ÜfûC–ÿ÷[›¤s=Ÿ)bv[Y‡úJŽƒ°“èfv¯"Ú±ÙœZÎÌ‘$©E£â�~ž¹ÎžnÄn¥Íy¸O5$–€7:{`Jåå"µkQ×"J n
+wö8Ú±k–q"Ó|![x¨z×|*¶uâ¤xSõbÈ*'½i¾*„*«2È½dø2º·,Dƒ^½>í²Ø•K%·&…§öŽU†
+Úˆ;cj£sTzTcjŒT2Dz°«}Ú¨D#�J9SŽÔùa
+²E
+ÊA¨ìpª&µß"Utf®Ë�Wº=E:vÈ–Ao¦Cz÷Å(´û#ã§¶*²aE
+Zûâ©l£“†ñÅ˜äÜ¢”lZÊ^™|y,y ÛL)G?Ø,�;ª]/«×«hUA'ì·L¶<˜hIQjxýžÙ&À„(Õ4é’ŠÐbO\UWž*ö‹IøÆóWõæ½¥ÉØ€:bÄ¢D…Ôbªë6ÿnžÙ0vT|3mÖ¾ømQ	pA¢ÿ²ÆÕ®ÅÉ^�±µTõ	ÜõÈjîTø°*èÐÈìçìöÅW´‚¦�;bª.ýr`ì¨	ßa†Õ-žZTs§¶DÉ�J&/!¨^@tl¦[«•ÍE†#“ˆWýØúrJ¨…Ï:oúòØ�•tjKz×|6¨°J,œMNß$ª•Ái"Bã‹£*‘U%„ev¨Ø_áçß,‰Uò¾Ëþ¸ýYeì­Œþ$þ¼®EWÆü�Güõ?qÄKeBÜpõV½Fßv%A´�+N™\¹²34u•ÿl�þì
+�Šzó<é×l�U‘ÉVµýàßèÂ«ÖTL\‰V¤šm^¸q0ähì#á°1T+É°5%'¯L°+^°Kv§C’%Rò\«‘Þ”ÁÄª–Á£oQš¡ÿcðÇ‰W\Î9Æ¡x�x•^¢«{×•Ëš®·›âúOëÀ©¤¡œ©jª>Œ�ÇfÒBs,+4�¹Çp8H<2Ñ“…ªAŒÛ©Ón~¥vko!¥¼ž?íßhµ#&1Þ\ Úyepleú´í[y�îeþ_÷ä5º.Žžm˜sp²&™c	¨ìŸÇéÍ™‰§0äâÝ×…@££*Ô�ÑãÄõqªfyU’ƒ�Wí×cwS�ÒžšÒ”ürÈòU°ÌštÉ*¤§àuðÅ[ŒQq¯¾*µÅZ”öÅUd——Ž*�`àPtÉQàNç®*¥4”7
+Ó¾*Š¶�œ=)×o§PôŠš/P~,‰dpƒ†Ý*1JºŠ"–*²”¸SüÔýXª1¢â+�ª‡Ž<JºÉ)óýy­<tŽA�P
+ ­qªƒ—ET�>´*Y*ñzÿ�qUy
+cSþHÁÕ�æ–Ü}¥ËbØPSÈ¡››–§A�P„’I=rÈòU£‡#^¸UWàü1WÿÙ
+
+endstream
+endobj
+17 0 obj<</Length 72493/Filter/DCTDecode/Width 398/Height 419/BitsPerComponent 8/ColorSpace/DeviceRGB/Type/XObject/Subtype/Image>>stream
+ÿØÿîAdobed€ÿÛ„		
+
+				
+	
+ÿÀ£ŽÿÄ¢	
+	
+s!1AQa"q�2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ	
+„”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q�‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“	
+&6E'dtU7ò£³Ã()Óãó„”¤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ?ú :n7ñÎ=Ø6z“‹æ^ã+/Aµ1Uê*qWbÔ ¦*¬ª:÷ÅU;Sk Û^;Us/qŠ¬RzV˜ªò7êN*ã½*¯A@w©ÅVáŠ«!-áŠªðÜoŠ«bqVÀî	Å\]�UË|Uz¨v\æ„AÅZS½IDlÄTýØ«mÁ|UM“ZmŠ£9mŠ­[s·Ë\
+*¯QŠ´[Ãhšâ­‚*¼0¥qdËÔì)\EqbV�ŽØ¡ RwÅV¹‡…1W|§ßŠ¨I±	4ñÅWò$r­=‡LY•Û~ÿ<RÑFaÈxâÄ·À¨ß®(iMv9 È,!@ß
+[¢Ò½±Wžr$äÚÿ³îAÞ¸Ddy* ¥>3ÃØÒ¿‰ÄŠbmP�±<j¿×!Ä�S”Ðÿhþ¸ñ'Ô©°>$‘ü+�ú—£Tø�qâ_R ¡­ÛÚ¸ñ.ëZ½:uoà<IÝÅ‚‘¸úHñ"<KºÿXtªÓæ¿óV<K»\“¨q·‰Àœx�Ii¥ZìéôŸíÇ‰\²·$ÿ‚%µþ¯=ª¢›r£ðÇ‰6Ø4ë·Î¿LkkÑÖ»¸#ý˜8ÖÕ=X«ýå)Þ¢Ÿ�1ãZ'’ š:TÊ¤5WþjÇ�<2l]Û¨ ™Nþ+ýqñb9 ‰y.k›jƒê¨Û©eÇèõy.10b“ÆÊ;†®ÿ@l#$O"�$¹n` 3H´éÔŸÖ0ž*µÍºîfŒTmVõœxÂÄv•ü¬Ð¶þ´}˜¿à±ãñaæ‹õmÔ'Jwø—úãÆsCÍcÝZ¸¢Ì›÷õxÂøÐó^×vÊ£÷ÉZxà9`9•ñ¡æä½· �2t¯\>>ÿ¹|hyª¥å­&ûš±þ
+qññ÷ýËãCÍÆêßíÑEiZš~ cããïû—Æ‡šñwl)ÎtŠƒ\#6>ÿ¹|hy¶·¶¿gM…Fø|\}ÿrøÐóio­˜~Ÿ~>.>ÿ¹"\[Çí^.­‰¡�kí�‹�¿î_W“FîÕAaí€æÇß÷'×äÒ\ÛÖ†uéƒÇÇß÷-ÏÉ\][½Âã„d‰äWÕÖ�õˆ'ÖCá¾0š*MsoÔÎ€øW0´]õ«Q±š3QZ’kø�Z*msj"xë_æoù§0´T~µlÛ5Ì+þÌø•1ãEX\ÛA<L<D‰ýqãRòp¸µ ¼`“ÓÔ_ë�O«É³wl¤¯Ö#ã^¼—úãÆRm®mÈÿz#öø—úãÆŠÔž
+ÿ~•íñ/õÁãB; ×5¥ÑÃ•~a>ÐJ1c“`yFC£¿yÀ¯ÃÊ•å]¾Ù‡ˆ1³O?¨¦U,@­@)¸ò93qÙI¡o�|ûùÙæ-7Ìš¾—§j±iðXJbQ7äK†=é¶hók²qPý?­Ôê{ZyŸÇÍæÓÎ@yÝI_ñdiN€GüÑ•�NSßöºÿôGˆõgë@?üä�«ÿ)‚�ùçüÑ�æ2ùý«þˆ±÷�³õ¨?ç÷�~Éó“oü¢%ýH1üÆ_?µÑ>ñö~´3~|yÈî|ç9=>üÌeóûWýcïgëPÿ•ëçSþ5¹S^ŸôÇó|þÖ'Ú}ÿwëS?ž>o}ÛÎ×uÿ%ŠþªcùŒ¾j?Ñ;ÿ5üíómiþ8¿Úg¨Œ1—Ïí_ôAÿÇÍM¿:<ÒÇ<j'mÏÖ%þ
+�æ2ùý«þˆ!ßøù¬?œþhŠùçT©ßk¹Çêq�æ2ùý¬O´ïü|Ôåqy‰�2yïWõ;(»¸;ÈÌ1—ÏíGú ‡ãæ†oÍ½~I9Kç}dPPwp6ÿ‘™!›)ïûXKÚ(¿�šÿ5õž@¿œµi7 çq;~%ÉÃãeóûQþˆ¡ßøù·/æ¾¯"ñÿjl�(g—þkÈœÙ|þÕÿDPïü|ÔãüÎ¾Š6ÿ�¯SÄŸïæ§üO�—Ïí_ôEÿÇÍß™W²’Òy—Q™ºf—§‡ÚÇÆËçö°—´Â<�ãý2™üÇºƒ¯ê|ÒÿÍXøÙ|þÖ?è£Ïñþ™GþV<µ<uÝ@¹ýô½à²@ä–çô ûQçøÿLˆ?™Uî I#Õ�ÿÆØÔÑþŠ<ÿé–EçòÌ}Mjô×þ,súÎBRËµý¨ÿE>�ôÍ7žÔÈ+«]QAV$þ'#âgóûWýùþ?Ó+Ì&Uáµ|«Z�²:Šü�ø™üþÔ¢üpÚBÏÃþ)2Èâ[Ôy…ÜzÒSðl|Lþjÿ£,ÍûüRÑù�ÄúÞ¢X�¿}/Oø,|Lþkí–æýƒþ)Kü|­')5É)É¥bá‰8ø™üþÔ£,ÍûüRŒ¾~¶`O×®v4Ý‰ýTÇ÷²ÜßÚ¿èËó~ÁÿÚyòÙv[Û’Ì½Ë\xryý«þŒ°7ìñJ±yîÁeÔ.Õ«Õ]‡á\xryý«þŒ°7ìñMÉçä•×Õ¿¼™xþÛN¸ðäóûWý`þoØ?â”äóå±_];1'ŽO?µÑ–æýƒþ)ÃÏ¶ Së×<Èñ4§ß‡‡'ŸÚ¿èËó~Áÿäóå¼t-¨Ý*øŽ<9<þÕÿE°–ñØ~?¤­þ>ŒÈ¥u+šq­*zcÃ“Ïí_ôUçøÿL¾_ÌyŒz�Ú‘öªk¾žjÿ¢¯?Çúe5óê©µ+’i¶ç¦žjÿ¢¯?Çúg7Ÿ£d'ô�Ð ö',ÑØ_ÚÄûS}éš_>ÆÃ}JëÛsýqñ3ùý«þŠãý2‘óì5K�¹ÇÄÏçö¯ú(=ÿ�ôËÿÇÈÖ.Ç. 3ø|Lþjÿ¢ƒßøÿL°ùüo]bócüïýqñ3ùý«þŠãý2Ÿü¬ÉÜåê”Y$©±ñ3ùý«þŠãý2ºþbÊ¼Ôk×ÁWqûÙæ¬|Lþkd=©ÛŸãý2º~cÈ¼[ôýþçýû'üÕ�‰ŸÏíeþŠ|ÿé–Ì«ŽL£ÌwèVž¬„ÿÄ±ñ3ùý¬O´÷×ñþ™\þg](Jy’ôïOï$ÿš±ñ3ùý¨ÿDÇñÿI&Vß™òó*Þb¾;V¢I:ÿÁcYe¹¿µ²>Ò'ñó{ä§æýßæ?—-mõk»¡},‘M’9FA½
+“â¹vžSº.ÃAÛ<ªÿy¿Lx¢½{õÍ¸€½EúoÉçClºÐ¹Š•©�"¿ê÷Èäú
+2€qþ;Ÿ‘ŸŸ/¦þby¦6ª“tÆ�é@Fj£Š2žáòÏk'<3=HûxŸ.Iæ{©å—Ò†gÅIET|ÈÍˆÁ6º�“3êˆ'~§»nJ#[ÔY�m®iþ¢ÿÍY!ŠÈžŠ í3óý‹[ZÔkðÚÎG‰?ãlŒ±Àƒ/ÉcÿT?1ú”Ÿ\ÔÀ ´Ÿ—ûù«%0=40þyùþÄ9Öµjƒõy—Ú«ý¹#‹üþWv3—Ì8kÚÈ4ïOwàðñ~)/ƒùòù…�æ
+kqõcÿ1ðqžCîOåð>_0³ôö¹J-©#Ä¸þ˜øîbp`Ç/˜rëšè<þ¬Aè¨?¦>;‘àéºÎ_0´ëšÛM¥O�©��åð4¿ÏŸÌ4u­põ¶'þzä†(Ÿr
+/óåó
+6µ®ªôßûÏíÉxpîû˜þ_Küù|Ã¿LëÝ­v¯ûó‡‹¯èOåô¿Ï—Ì8ë:éØÛ{VBŽ<?�ËéŸ/˜YúK^;ú@{z´Àa‡ñL†/ó¥ó¿Jkõ¯¢„w¬¸81~)>—ùÒù…ÇUÖ¨i
+ì{€â�äƒ‡Küé|Â¢k:ÂZ›~÷¶+ài�/˜Sý)®O¦€“_ï²C4>”ÿ¾awé-y˜IiNÒür|¿ÂX4£ø¥ó
+þ‘×†áW¿ïi¾>>áö2†
+)’~N]W\W¯­?ß•ÇÃ‡peùm'âš]W\ç_LùëL|<}Á-£ïýŠ»jÚó�h¢ŸïÜ|<}Á/¡ï?ìTÎ©®ñ§úÿ¿rÅ‘¦Ñyÿ±UM[]R?t‡n¢JÿòÚ?ö+U×Mr
+Oûðÿ\|(1–ŸD;ÿØ¸êšöÇÓjSÔ?×
+
+^’ÿ±iÔuö"�_÷áþ¸øPgàhÇ;ÿb¿ô–½‚’GyõÃáÁ�Ïý‹¤5Ù±U­zz‡úãáÁ“¼�qkýxÆ5¨Ô=>ü|8/�¤þt¾ajjzò‚=555¯¨®Dâ‚
+'ó¥óŽ«¯“SØSûÃýpxPbpi�/˜Zu-zŸc¿OPÿ\²áLÆ
+-}Rù†ÿIëà�Àtÿ~d¼8wG˜Ÿª_0³ô†¾Êß»šÞë�‡àß-6�ª_0ï¯k£�ctýçöãáÃ¸4x:kú¥ó
+�C]=bò3Á™ÓéGñKæC]1±¯÷˜øpîû—ÀÒÿ:_0¨5]t)¬b§þ,È˜Bù�>�Ÿª_0¤u]l€¦=�Û÷ŸÛ’Ž8Ÿsä´uõKæþ�ÖØÔ%=½LÇy5>š<¥/˜D%þ½ðÒ0~.ïƒ‚ÁŒ±éÇñ˜TmcZµõe1ü1«<‡ÔðÇÃŒ�
+l¸ô¸2È)nk˜}}ÿ8�©Mª~py$5JÒærÿfÙÈú+˜ù0G¶v��5“Æ	¨Ý|$ïÛ>kPh)NT÷ëúó+§Áõý×ù¿¡æb½ò,šqT`Å‡Ðiý0Oè,&¨?.ÿç.´v°üÄšðGDÕí¢˜0
+G4j}
+3]�ë|ûÛL&Ì¾|!fþ�ÍänªJLiP	Þ™µ«�W§ž\Xç@@g¹«¿3iÖ3µ¼¨y¯^1‚0ø$²Ñv£Q!/´þ¢‚o6éD’cp´Ù½*ï‡òÒ£ìî¨“êëß/Ô¾1Z]H‘[YOq;�†(`æÄàƒÂ!ËÇì¾¨ÿÛ/ÔËm¼©ç[Ø„ö~QÔŒOº»@£’ä£„K›”=›Ë
+¦lüHJõ-#ÍÚLf{ÿ+jvÑ.Í#[’”ñä…Èû²_—�zÐü¿ØÂ¥ó?e6ò‚6 €7ÿ?„iû˜K°å¿rÄólT ÀÄƒC¾´K±¥øþÆÛÍ°ÿË3|˜v³øû‹a}U�Ï³ÿCþ�“_ã‡K6?,?–%‰öÏñòlyÊ±´#Ø�?†?•,ÐÿŸãäïñŒM¸³¯û0?†¡âÜþ>Äÿ¡ÿ?ÇÉkyÊ1°³æÀáþNü~ÿ yþ>KÆkÿ,ßðÃ$;<Çì_ô?çøù;üf?å–¿ì”?��ì_ô?çøù,>p'¥­úÊ†¤áä¿È�“‡›Çí[n=ÇôÇòÅ�<ÿ$ûF×£ÔU11î¡Ìlúrv·²Ž@ôüte_Y„Pp^]öÃ5Þ«§SùYV•ÞjpÄ/rPEwùÈ„M9Xô2üc4Ó¼£q{¡éÚõÎµ¢éPj¾§èè/n’�DüXŠÓ 9>ì°öT¥øýˆ¨ü£jY•<ëå²åÈŒ%â¸ uU#	r'Øv,þ>ÄCù2Þ9;yhS 7Tÿ�1á.4{Í_ãä°ù>ÈT·�¼¹ACÅnÁ-Zôø;S‰r‡`ùþ>MGä-RmBÒÆ-SK’+­:}J=Q&ÿFô-Ü«’x×¦¿È>�“mäËUBÇ^W«5#P]ÁÜT2¡xJO³ö.ÿ&ÿÁQ–#ügåž#`N¡ÿŽ<% v ‰çøù4|–ª?å4òÅ+¹ý!Þç|xKiì!=Áü|—¿“-øo:ydžÔÔ# �xKäHÇ¯ãä°y6?å5òÈ©ÿ«„cÎ=‚'¸?�’1|†.¸Giç.Ý\¿Á
+¼7‹#;‘UŸ,xK/ô;çøù1ý;Ê—W¶‘ß]ëšN�k4ò[Ä×·<G‹P;W¦H@²Î__ÇÉ<_ Û15üÀòÈ§ûÖæœ<?È�_ÇÉ{~^Û
+ù‰å�ß{£ÿ4ä„Yì8“ÏñòS?—ñ<ýå‡fÿM§ük‡€¶�gÀëøù)ËóWTóÏ–6ÝA¿A_ø ¸ð¹ö(º¿ÇÉLù
+äÿ;‡–ŸmøêŸøØcÀ[#ìôyßãäÚþ_ß¶ëæ¯-²ž‡ôŒþ7Ç€¢]‰µþ>M7åõøm¼ÑåÖâ*ÀjP~¾xð 	r?�’è¿.5i¡21ùsáe:¥¸4ÿ‚Â1Ëýˆõü|�Ïù¨F…ß_ÐET�NÜ�ø–Ç±AÚÿ%}+Èz­íÂÚ[ßé—20ô †ú)J,-zBQ-®Ä0?bT‘Æ²˜JR&+ 0¨ØÐ�ã˜ó$<¾§	Ç*´³X…#´»uØ²0(vËtÆË
+Ï�;ÇÞû+þp–ÇÖüÜÐÜ­E–“s5vØ•H·Û¥$?M0ê> õ>ÍD�~R{¥þè?ex‡s´uÿ„®YÓàú¡þìWô<ô
+õú2,(¦µî¤}økˆRã•äéû_ÿÎhé…­¼­ª¬bŠ·0I%wåEà?š¹þï%Æïíž/ÑÄü·¾ÿGÖî€ÈŒ€øƒOÔ3qŽ<@ŒÏMÌŽ[àÂüÊŸé‘É¡‘|	©®gâÙé}�‘ðÈ2?? šyÈú�žu¨ôË)¯¯‰<bŠ½Om÷Ëg+wš|Dñnyž¯½üŸùå¯&ÙÇ™a—j?}¨H9JZ€S·oÃÉ7g‹OÍ�'=‡"@ìI9MÛ�cñU%×£¨£PÒ£ÀãC¼±#Éå¾tü¤òoœ­¥úÅŒzf¦kÃV¶QR~É�U…kÚ¾ùn<¦
+Ú2b6_	ùëÈ:ï�õoÑº´~¤R“õ
+A"�jhAíZt9™Ž|\ÜøÄy0VR>ÐâÃªx{¸€áÄ’¢MpPe»U=‰8Êº+u>5ùáñ<‚+Í®½‡Ý€ÊÖ¼Ýþ}"µæêŸóÝkÍÝz€~��kÍÀ‘Óo d�¤EcNÇèx—tÏMºú´¬ÄñW$mÓ*ËêÙÖëñq‹üuMïuÙ�/]¶;×õæÒD›u¸;>2Üßãà¡¢eF–Cñ
+îwëCü18w ÎxLÌšËYÔõË
+*îcq£è>¼¶Ð††à¨“�)V¯{d²bŒE½?cèã˜z¯áðz–±ä«[¯%k>bÓtùôÙ|»
+\´«h2«ÁØÔ†ñÌÌÊt9;=ofB1Øž_¯Éàz]úêZ¤Vs”HÚ^3»Ó÷j>Ñ-MÍ)Ó63ÁÂÝ&›@%’‰?ƒî{'–/5/6>¡ga£e¶†K�>ö±Ä²BŠìe«±ÛŠíšã;w¹{+£.^_©æö~ó¥Ì<:ƒF-lçÑTqCÂ	²Ž\zsäG·ŽgcÁBË¥ð�‹ÃÒÿJ8[]X˜YtŸ®A=QgoQƒHT”£â@ùtÊcQ¾vîÿ’áÁÌò¿ÆÌW[»ŸL¿žÊA$f	]}7'’©bQI¨€EM:æF=<%Ýçµ:"2P'ð}É¤WRÚiñ_›CxC/©saFØT)¶ùTqãº%Úé;2<4L·üw%Úº$þµ»”ŽZ–µÑuUß¶]ùlu±.·AÂhø¿&cå}3ôÍ¼WHææîêFŽÚÁ¹oE
+Ë•iJš˜yÀÆiÙv_eÂX‰‘•ß�òMüÅ¡_yBÇJótj¶ÒÁp~¬2cžD¨ýÛö­zäpŽ3Lõzâ#¥jÚ�š€²º“Õ²Óe3Æ¥h¢IØ’�Äh)™yqd&�’'‹½4ý
+sug­Ïú3ê¯£@ÓË!<@¿åQ×Ã#$ÙªìèˆÝŸÇÁ�Z_½ýÜVjÞ«·#E¡V©ÿ…?~\q-ÔáÒ™N¬§óAs¼Ž˜`´%ãBT‡#¬nX’7¯†Wh»‰öp»?�ƒý!2È¶Þ¡A#…§SÇ±ß¦dK8l:c¦'(ŸÁ}äïÊ-{Î×°ùrÂmföÎÐMp"G˜¨,h¤ïôß5òÉF¶wØû6gñðx·�4Í[ÉzíÞ�¬ZK§ßZSÕµ‘ªÈNô4÷Û2°Ã�Óêô|9@òý(ÿ,èú¶±šËM}JU$«Èªª“Eâ—;
+eyH„©Øét#rüã¢k]¸³¹¾ÒgÑ-õR%”·
+ìÆ3]Ç Wæ2üq�“vŒCé'—ëK<¡¥Üù‹Q0#(b±Æ^ š€M9
+– œ†®ÆÓ¢ÐŒ†äOâ¼ŸAk”žxüµµ>½›é+¢Ão}d×`©’ÀÈ¯?Þ<`	Ü«£•®ÑBMyýÇÉ…yP’é$švå$…Œ†”¡&¦ŸMr½D@;>CÚàŒ¤yþ’íjä}QÕMjÀPÿ”hpá€ˆ°Ç³0ƒ3#Î"þTû÷þp>7æn£!_÷�ËòŽÅå�WHñ/[ìœLÙrw!öÄ¿\¸°øv«/Ã†Ùôkô|?CÎi°éŠ»AõS´­òÇüåž…¡ùs¤Tt›èäzqee5úHÌ
+Ljvê= Óø˜¼¿A~9ùŽ6‡S±z¬dŸa¿ã\Øiåé|ÛMêÇ8ÿHýÌ7Ì†ŠÚRhÛ‘ïM¿·3á'wØù8%Ãøèû?ò'Ë1è¾I¶Ô)y®ši6«AËŒkÓ¥¿3ƒ.J/m‡FûÞÛBhÄÔO•PM¹RæêÚÆ)..î¡µ‚1S,ÒÔSÜõùˆ‰a“7	¤.�¯hº¾úf¯g©q�[L²2�FÊANT�4t­@§Âj:ûäy�Ëó×“¬|óåÛ½ù¤u'Oº4
+ÉäA 4¦_”Ñ›‡æF­¦]é•þ•¨Fb¼Ó§k{…;|Hi_§3qOˆ[ªœxM%FZÁ¢)ŠµŠ»o‰" �ìqV€bi±÷«·Þ¸«±Alb…áˆ ;äHiÎ‚�ÔÄ 8ð°ÒÄRµ½ÇîJø÷Â´eÆþlóòÂëO�ÌÚrj“¬måì6×í0-DÌ‰ø‚üd–¥öÌMgÒô=ŒDGãÉúKÿ9æ}/Süµó'å§å®‡¦A¤ù2)52kš
+Á¹µ¼³½?[Š™”s1£P+NÙ«ÒKÕ¿{µÔÌHå–I]^;„E2@L�
+	P¤‡pÍñt_lÝj7Ç·ãg[¦ˆ/ñÍúÇ¤yŸË-ä�/Ë~Oò·•õmsóCF±¸»’Òi¦¸ÓOY¤¹nejŸZR#1ƒÑv¡5Í$ïwä
+{Ÿ“Þkµm;Íz½Œ(`KmBx¢Z2Ž!›à�!NŸ<Üàþïàè'3çú_¦_”>hÒ|·ùGåf’ÛËžk¾}VîÁ/®âv¿Žúé$½n%Hô’%(Y¸Ô·Áš=Dä'AèEsóÃó€^·æGšì¢Í=ÿ©;D)y7¢_„5GÑ›­%ŒEœÄeß¿ô¾Üü“UÓü±æÈõ½æòìš&­o jÐK%Æ·Ubm hÀ ã÷€Q€=sUšgÅÛñ»¸ÅÂhŽçÎ_ó“°ytyØ\ygËv¾SŠ·ÚŽƒc+M´·Íã�™T…©ØÐlI9²Á#[º¾ÐÉËñæ�Î3Ýé§\Óô_1
+:+
+^-F+KýOÖ[Ë%·nP‚AäTŠ÷…­Ì/Öæö~A(XïýLÃþr‡]—UòÖƒm¦éöºw•,õ˜ôkke�)ÈÈ&V�ò<‚�Ó¶Y¡Ú[þ9#[�ïøæù£ò¦ûôG™ô[ë”C§Ç©[6¤'I^ÜF²+ �OÂ´¯Žfv„…‚;¿[‰Ùó‰»ÿSïŸùÈMb
+CÉ¾kÒ|¿¢è�gao
+Æ³æÝ29Ïõ©žaEÈB•¨*O¿†·k“�¬�à~oyJë�~;k×†9Ú�Âf*µ6ë›L²¬véô†<é÷”u;Hü•¡¾�cåÿ0j`Òa:ÔrÛ+ýGê°Ò`Rx=|kšXd2žÏE�ÇÃüw?/5H�Ç˜µ‰iõÙ‰`¯Ç+tPNÔÍÐ±�ÆÏ;*ñ¿ïÒùÅ_Î�cò£É^bÕ<½—qæwŠëM÷i?Ö.a¹Ž%Š¬µRÔ²ÐZÖ£lÔÊ^§zà|'ù¿s¬jÞuÕµ=m¤:¥Û‰.bbä¡¥8’ê¤Ò›mÓß6Ú9I©Ë/ÒúþqsÌ“ykÌñ~‘ý§£ØÉqåýSY¶šdKÈŠ¼~—¦
+3’”£Ž4>'5šùúöïvø€áÙOþrûÍžgó§šô=sÌ1[Zþ”qk§ØÀm­`<� ±0ªòbÍö�^½³;A“•þ98z¬‚¨¼CòsÌå�6éZÇÕ!¹±ŽùRùna3D`Qù¨*H4¡0v‘¿Ç½žˆ¸ç&2üçç�/yoHÕµ+kÿ,ùWK]?G¼ÓâXÐÁEôÉûG’*¨«Mþ�fãÓÚ+¾?q|‘å¸½;FpVJø1©ürÍW7Ç»S –cïYª¯#vi£|ÎKÒßÙ‚Ìÿ¨Cô×þpÈ·š<õÆ­o¥ÙÂ`ÒNX§ÒÁ'©ö:;å÷Ëýëõ: ·:š‡çíN\² ×§àóuÛl+JÁEwéˆÛŠ�¼£ó·F×å‡œ-Jágë%zƒä)÷eˆ»‰Ú�K!ä~âü(óz81LFÑLÎ=ƒŸ*×%¦‘1ø¾S„xy'ùö°½YQôéKŠ˜èWäÁƒWåQ›eØèäcœ1÷¾þü½xßÉVh©Ãôt*ñUâƒ(²ú@5×pfKÝ¨J %‡ÐiøŒ šGá�ùÈ_1jW>p“@iÝ4Ý&8™-�!ZY›9¡ßfèÌ½?ª6{Ýf¶DL{¿[Ãt}WRÑo Ô4›¹,¯b‘LsFÅjÕ$�†Û‚3#€4cÔJß¥—Þk>qòŽ“æ	[«Ä+zzš3Á˜
+íZ™‰ž­�®€ÆË6<YiU¥C0,hv={vÌsa´�y¾ÿœ�Ð¾¥çÈïí£%uÛ1s'Ì™Ý€ƒz€µÌ½.R÷[ªÆ8¶î|èß°#f­ØŽÝób(‡ì´šäP
+´vÂ­Jb®�ñTDAêMqUÍbZ»UE	 µŠÌžƒ›a’QR,—Ö…ŽäGþo†RÇÃƒ@*1Ž¼Sà${\§ŒHìÛ—ãµyªiZÃh‹Þ}]f†D1H®H`²^IA¹¯a‡.11»�ÙùŒ
+~:=²Ï­CË_ó—åûHfµóŽ‡.‘©¤–ó…~›å ˆsÇˆØ�ë˜˜´P»?cµÏ“mž-å­^ÿDÔWQ´UBÊñ:º‡øY
+íMèÄæÂP4àbÔÉœéž{Ö<»¨6¡¥]Ëg*L·%[ƒ*•UZ�MGOlÃü¤{±žªão<óµs®kwúåÊ¡ÔõK©.¦X"‰_vj*¨­wÌ˜ÀF<.´dâ�—´h›:½œ——šeÔZê/>vþ¢D× …3!øHçÜÓ03hÁ•þ§uõŠÿž]w¨É¯êúÅó´¯q/5g§&	P¼¾¾ù—ˆpÇ…æ5å,—çúY.‘æ½CN{YšH¯d‚1áKÈˆ»ÐpãAï\¦ZHq^îÛC¬�Ú\¿±/»ÔeóíÝæ¡;Ïu;—–æB¼›` *�@(:dèDlê{g12ôoø=Ì¯ËZ¶‹§[=�ý�˜3Ò+Š•tV§"¬„EÓÛ13D’ÝÙ:ì¸£Á077×ËÍ6üÁóªù£MÒ´;kµ³±sé¯.Lh©µ6êK×ð–}«®Ú£øçæÅ¼±{�-ÈžÜIi|‚)¤•9(ZÑ©CCÓ/ÔŽ?“®ìþÒ–#Ã (›û½ÏFóOæ%�×—gòæŽÒ5�ÏèƒŒN	j>y¯Å‹†Víõ�©ˆãØïðî÷¼†ÃO{9#¼†àÛ\Ð~õNû³3rNR=olpdÜuüuf³yÇÌPØÉ`·�ÛXÜ�×T
+œ�Ù’�ß½)•áÓF2âÝè%Û�8úþ½çëkûÈ¯&«:Ì$“�¥HbÀá½37,Ì£³§þT”²ÜFÞ~ÿ{è¯!ùãÊÞ]’}bú’éa)AA
+ÝA‚6=3Vq“'}Ò&×ãâñ?;k¯ç1j:ËF±=ìœ™©A@ØvØfvcQ¨Ôqfß¥œùcÎz^—§ÛA5”S]éA~©u#
+ìkñ!Ù…s.’V]¾›´Èkññb>zómÏœ¯PË3Ü­¹%‡…ˆ¨]ø�@(™˜qFâ½Ã‹¯ÔñFçûSïËöÑà·ŸMÕâU¶’o^+Þ}6­Hª‘±ï\ÅÔä3,ô¦1DŒÛ}�Ýåé>tóu¶¡¡Cå­>o­ÚÛR“pâ
+TíA”@W««¬ínÙŒ�"«õù±M6
+‹¤§à(2¼™8Îïšêò‰å%-¿¼±Nœ§RGú»�×—Àú]ŽŠ~)Ìs¢>ÇêÿüûúÍÅ·æF¢|Si‘ƒÚ±-Ä”úyo•—µö*Xrd<É?tKô{ŠúE|V•ïÓ$÷$ú~6R+×«–JPšwÂåúÝjÎ-OFÕ¬$£Åwi,2!ðe5#ß*ÏÉ«$8ôäy¹øù‡g5¤úÝŒ¨{IdF@£cP2_¤ûß-Õcðõd~9¼Æb³ÙH¯ÒHhiâÀ¿àse�ž/NxŸ1÷¾ÒüŽ¿]CòãG<¹=“KÃÂ�ÊŸðØ2s}ø±Äù¹ëªHÇ©øH=7Ûøæ<›_
+ÎKéíkç‹[À´[ý6Ëùš)ÿÀÓ3tŸI÷ºídn_ÎÄô¡¡¨~L@?vdºðh½Ë?š^xò¦›�¡ë&ËMY‹˜ŒQ¸
+"Ò¼�Z•**1”AåcÈy>�ºÿ•ýgåãæUó†�5´VQ0,P—1}FØDsbiÊ”ˆÀ?+1õß5þghâ»èµ9½ÝžœÒÁT.¼À§¤ÓÇè°ã­Ãsâ‰·ŒþfZAeçÿ7ZÛD°[ÁªÝ,0 
+¨¾«=ÍrÜwÉÅÍäÁ¦dðÓLAÚ¡;vÅ“l�Ôt¦*· þ¸«u¡î:âª«ÈVŒH>8«½6bMÍJŒPTÈ Ò„|ñBô·ÕfãÕErqÇ¹šþ^Eg–¥¬ÜÇÄú|>¤V×ˆÝ€äˆ4"µëA˜z˜švÚ<'tÛUóOø¼�:*Xè”ŒÜzÖi åD›´®çâØS1ðƒ·»—ªÓFBÀèÀŒpz±–�ÔA*vP
+Y‡á­(O†g�ÃÏÎ<Ùêþró_“µÿ%yGDÓ<«
+†¥£%Ä`£HÆÑZC!
+ÅÉj³·ËE&ý4^R `émM÷?Fùt¹8³&ì3×<¯ú!l[ÉV£RX½!¬¥Üªå÷>¡@J÷ðÊ¢‘’TÃT’†`¦­Rßs2Lƒo_òWœ<™¢ù[Ìš^³åd¿Ôoí#KnR87l.­ÈŒñÙÍË½iÛ*œ,Û™äc!ä’‘ä0 Ž.¨Ë¨`9+@)ˆëä.VÊ¼¹¨è©4:×•“ÌM+)F7�méö»Ó­r9
+"sñ×ö'Wzu„×wSÚigOµ�ƒCg$¥Ö0x/¦³‘ñRµ­3Æ³N‚óä—�‹wŠ6gXØ"¨4`W‰¨#sÔûS2à‹›†Y%*"‹Ù<Á¯y_Ìvšt73Z<v³JZÏO–ÞŽ˜K+2J¤s½Fc˜ï³~]C O$³Î¾`òn©m¡Ûyb	lãÓ½awfÐ¬kÄ¡#åAñHH%š¼NÔ&"O6�^”+�<Ð]ÄYÂY@-ABÄ€IÉx5»�
+æwäÔWk#…3˜Õ¨)AÄŠÖ¤~Ír;(è¡Œ‹ðýŒËD›Ê+£êÉ¨ÝC¼â¶¢î)&_OŠÑc<t~\º×jm�>LÁÇË‡ì*IbgHýY?ÙätìEAZÐÒ¹d6Ø¤iAQ½þ¯àn	ÜU(:w=ˆË|!Í¨ñ]9ô„›¿�nõÇ‡dœrÑ†+uZ—íZ|é˜Ü;µ1Éèÿ“úg’uÌ.éþz�tï,Ï3%ÕÜ­Â.a/6¡Ø�+†v³ì°N,œ¿hïgŸ›Ÿà];Í—«ùhæçËVïk,*Ì®ìŠ†Ôà\•£¶buÝ=½Ùÿ˜ß//�p`ú4ñÉp8xÐŠþô­kOŽc\»ž´påÁé7ËÏÍ�Ç%¿	3÷y“"fÆ.¢Yu}18Š´„Ÿ�™ŒÜ]þ›üZ~ã÷?^¿ç¬Êy+Î·Š¥c¸ÖÒ!ïèÛ!òtå]^óØñIûÏÝÝüÇÿb¿Oå�Üý?Ðñu½ØÓç�ãeJË{QÔWüýðÆJcÄ(®7}›£¤ö¡ ?�9^c³ŽŽOÅ¯ùÈ(éÿ™>t¶áÆ9ïne…@ý™‰qø†–[×›æ>ÑCÀÕÆQê?ëÌv 4h�Û�aþ¯LØ	@q2K„ÆcÉõüã}è“Aó’Æ�m|Žu*€âfNX
+Éï´3¼Q÷¸>“åQP¨>Y†FîÇ…òoüåŸÎ)jôÚæÖWÚ”L¯ÓNY•‡Ò)×jÍKàùy.&ŽWœ³8DA¹äÆƒos™}pˆ%ê^XüŸów˜5›ÝXCÔ­-ý­µ"�ä†^(Ã»PþT²mNV<[ìúÊÛGüÛƒÊãËb,ÉéÿPi½K¿TÇÅ“~+J•>‹+·2P&4ùÖïò·Í•Ú—–|×xÖÚŠ�jÖ5´³’S7)]ä ¢ìB�3$Ï hø^wù¨·oç¿0^Þi—šCê“ýv+èÄr¢N9
+ÐšŽ»í—aæÓ’TóŽ¹‘�ÙqøÌ•S¯\ƒ0-rz²Î–öðµÄÒc…Øµ:ý…r)òßèÈ™ÍÈ†œÈXZJ;zl9Ö ÆÊP’ôö÷ë„jž#±¯Ü1;4Y´@pª¢‡“µû#ç‚Û#zÆ�äEÔ,í †ÚóUó¡¯c§Úñ0<nÁŒ›q!ƒTÔÌ|¹Ì%MãLd,1¿5ùÌ¾RK�sG¹Ò­µDXK*óY;2Ô†Œß-Ç”IÇž9E�Í(¤Jz‹ö*�Ór;æLH­˜
+·dD×âòÎ¢Í}¦Á®i74Z¦…x²½½Ì'âE†Hœñ‘QÁV*+Q¶Q–Våéõ„f>ió¶‘­AÑôHü¹'Õý+—·¸ÊÌIr†€ïZR»S1|#{9¹;DOxüuy]ÄímñÑ”,Eù×®fÂ2§S—8”Ð+ªÆÍÁ#d,
+‘âï„À�Ë|ñC‡ˆÉ¬lÞæŒ€ÇPEž4÷¨Ê2f�tú�xÄkñ÷§pùvY�(Î;Q@{Ò™�ù’Gùj�øù¯›ËÂ5+#ÊŸg©ÛÂµÁY'§ãâ�åœ¦T">Gõ¤WU¸ô¹¸äÔ4b>�³'Æì†|¾¡óîdv¾Y†áI–W
+)Ê‡®ß*£(ž¤ŽTêåÚòŒ«Óøø½÷FòEŽ™ùwu©[èö÷ZŒÖÓ]ýriŸÕµX‘�5á§‘F$×)–yHnçaÉ“WÚ®¶¿ÛÞË?#uÿÉýÌÚ.©ù—,Þ_¸I"Ö,ã¶{®4Štª+¨âVcSJuØöÆ„nVõ]Ÿ‡[€}õÜ-~fOjþwóMÖœ=]5õ{Ç°•Á�
+£·¤`P|<E3g�ép2ÏÏÇËÝ\Þûùcæ_&h°Ø¿˜|Ñg¨Lt£ŽâÝn	J-‚È¥E9­*6ßc\s"»'LVy×—såï2ÜAqæ-rk
+­'¾�­–¼D•m@6ÊÄ‡y}DNL›r}©S"ÇäÒšUf§}È¨ðËl›cŽQªþ_ê¶�MF;‹ýKT‚(Öá¥XA£ROÅ¹Øæ¢$d<«ô»]c(09õîô?�ï,õ/Ì[ùã�, kÄ�-ím„+dªŽÔüT5592%aÍ:<z ÷ÿÌ}còçFü¶¿òo–|“¤Ûù†K«[‹ï7Í(›R�DzT*äK/ûå0œç-Ã‹¨ÇŒŠ½ÔøÅ§-<+ÌOñ)ñtPu'|ÚŽÝ$°˜Êâ&”Hà‰Ôž!€QáB{×!È˜”¾¡EzLdô€n¢§ÛsŒ°�»QÆ‘å{?/\A©Í®j-a*B‘iÌ82¹#“#‘ð§r<zæ<ÏFœ²6G¹éŸ•Ú„>X×®,5‰¡ºòíüñÚë6¥’X$¶GŽz”FgJ0
+·c×0òÄ�ÃÐöQˆÇG~ýÞ?ç$µŸ(êŸ˜:{ùËFÓ¼¥e¤ØÃåÈt(M¼Þ8¸·¨¬Îåý@à–<©LÅ22¼�´øñŒÛ7ôÉá­râ%#¡ë•G%àgŠ<lhNÒk¶f£÷1»™eQ_¼æ\b#�´cÁ£2ÌŒ~/ÛùÁ«cäýÕÃ/w¯]J§ù„qÃÿˆœ£«èžÈéã‹Gbý[üãÙÞ”uáû4¥{ôË:=i«Éó(»&”&žýs‰·…^;ŠoË|‰�'b¬nËTðª±b<)Oã†fÂgÌïùË=)`üÂ]B5øu;8æÛìž!£
+œ¯«%~9¾yívœeä?ß>
+aº»Œìcž {ëÍ´ö º^,1>ï¹íßó�Â×ÍÞdÓØüÖ©<c¿8\
+½¨æ¿Fd\^Ë²'Å„ymö×ñÔ SŽßw_Ç1º»Þ�ÿœ‹°úß�áGÅ§jLO‚²:û|YdeE×ê…—ÂI$2¬±9ŽHÙ]$]ˆaC×Ù«LØ@Xu„Ñ}ùæÝgXüÌ†mwQ—Sº¹Òæ³Y®bcAê*ôý’»|Îcg�stó¶iÄ”�¦Jr Rxí¿<3^IÚÀIùé­ùm«Ý[Hñ\iW—Öò+«Ç:'%ë¸eøåeÆÏ|æß0ÏæmXêw×šŒ†Þ^êý‘¦/*Õ“�]«JTž¹¶ÇéòJÍ1qEß¶QŠ«#HAU¨¹­1nŒ^Ñùæ�Fó9·ó=üš^„«=ä÷p…-ÌòaÎ…¨ò?¾÷¡Zˆ“!]Î×I(Ç¿ô :üÛ§ùëÍ«®éöööVVj¶štpÄckVY—áfáJšWÇ.Âq53‰äñÃ»ŠƒBMHÌ‚-ÖÕ•³J%£q*¤p?´<#^áÿ8ùçíË^hµÿ:¥<z‚�Ò˜½HŠ¬Š †øNãzW0µXL�Žçk¦”c=ï¯¿ç&5Ë‹ÿÊ=QÒ|Ñm­ë�Ì1éöð|&+R�,¼ãÜ©€�rŒQ•ÓF¬F­ù«@¼hx¯ :n9m÷æÊ ÄnéÌ½%è_—¶zmÞ¿meªèókP]«%½¥ª—œL¥]Lh
+WíS¥AÊrI×ñ-™›4˜Ç™£Ó.tòö mäKËI!ŽúÈžRB3­�ÓâS¶cœÆ<œìl‚ÿ²oÍoÈSäŸ!iÞi·Öm5[ÛÉ¡š=©šYa‚xÕÖáÜBb™x™¨;PŒ–\‰¯ÇÞì²öp�ÇÜù9 –9š’@2.àNU´ß3ÎkæÕ›ŽÑåL²_5O¥›x �=9¢­±;‘ü2‰cãpÇcÇÕøûD~L„¼åg}/œ"—N‚˜mlïìÞI%LH¥è(juÍn§�§*>Îi¡õ~ñú™_æß’|±¢Üè
+ä;©µ{}JÆ{™£™’;¨„'‹—Ž¼G/Ù«±Ìh]º­F‹O‡'¤�³¿ÜÈ¯õ¿É7ü—òî‘¤ùyÇÑÊW»thÜ€Ïê;HÕŠ… Jùt¸­ØdÕh¡ƒƒ'ÕÒ¸yUuó|ãjqrÖàq©V/P§tc¾N1x¬ß•9/ÕWåÞÊ?Jépù~ÏOº}TË$wqk‘^ð´‘¤@ 8Æ¥�úrÃçi¦ÕÆG<>}ÿo’´‰5[ÝG²¶·h54µ·�|`¥'&zpW,Ô"‡äM@9
+Þã@\>®ïÐ	ç	ä·ó&µ¤Åq$–Öú�Ìk+—J¸“�9¡„S¦m1CÐàåÒÂ3Ø½òóÉpjÚ×—m<Á¾•ªjYÞ_ZH¢v†á˜2Å$Õ‹’ó¨¯Jæ<ãeÚaÅŠ¯ñO-×lŽ‘¯ßi—6òÁ­óÀ�Ì­ËŠKJ0ÚŸ	©¡#/„­Ž(ÆDy½ÎÒhVš4–6:Þ›¬ÙßÛAy§Aol#šÊgrV~¬DE»Tô#n_i‚YhW"ÇLÕa²¸ž+ù%ŠMZÝÅo:
+ž1�
+ò®ùd z¬EnI
+ßé&úÕÌ’¼rÿ¤\òbJ)]ö%·è;Œ&"©|B^•æk+;µ»vÒïtëÛ7ŠïMÔ..Vcqk/Ä®TÃÖçíM°CC^HÆ¼�ž§æ«;KëÛKgºIÚÂmBDKSxýXNY€
+\­{aÉu³q�îŽó–¦÷l³_.œ5Å•…äúXˆ@üIPA‡àm€Ü‘Ä)†ª2ÜÅ4ùK\#¨'l²|�fAOXòSypÏtÞfŠõ­ý6¯i Œ	<ªÕ
+¶krš“¬Ï(ñ€R–Ó5kS·¼³‚{‰�Üz|øÎRª"FxÂ½›o‘–PÔvtaá]þ(=:ËBÔ4Ë}.DÊu&·K›Øå~l¯5\¯J€ 5ù§}<žÚÝ@Ž¤‡ôÉ>šÙÄJ8)•B[¼drñI‹ÙÀí®9þêÕ>!ê?Vfƒéwr?àUý?÷¯ÞùÃË©þDy_žÆî}FfaáõÙ‘áPf?WÔ=™�hcîîbúžõíN¿†YÑß^Ï“Ê�ë˜6æR§ÖW�k¾D€M±0jðÔŽÜH t£d­•>.ÿœ°±[ùT
+@-¼­áÀrJ|Ëå@ðä~7xïl4Àé¸Ç0D‹ó«QOOU¸§Ù–4dùô?«70—ˆ¼v	¥ÿ±›~QÝ‹/Í
+4œ!ÔR[ivëÍ¥;íá™>�žŸ°r�„÷þ€û²®»:ÑÉ,ãqBÄ¶Ü€=ó¥oG<¢;<ïófÄj_—>l„¡"+.KÄÒØ�R+EñËI�iÎ"coÍ–ª’¤
+Ô–¦ä×ÄøæË é¥¼™Çå®¯y£yßË÷Ö†þén
+ºYz‚/TÜ©�G6øG~¹†Ü¬`Eö�™ÿ4<Çåµ={òîk[5ºÒI©m9Y_“V%v¥ïÇéÌ)âl3ÐI|ïæ?6kÿ—úäcòúDÓõ}"K˜uÒvn"„F³ú¦0y×eÛ�lŒ!R\¹n/�¥j1,Å�?»*¬Ü«¿B›�ÏŽm#”Ñu2ÙæèŽB/†¼CXàH ®VrÀ·.2u÷´—,ÇÓ�úl6jW.ô‘²xeatQp“Ô¡4 ‚O¸?Ã |ÖY#LÑ¥©¶…cöŸr~òN6ã
+0—ì�ØŠ–äv_„MiÚ¸Œ -�Å#É4W> †ÚY€«,nG�­‘ò l·Š5³“rÚ´Ð5¦”I…á`OH¥¡¨§PƒÇ Š(Ÿ;'ï¦ù€ÅèOgzh «I�@Q°êW 1Dc9NbŠèô­RÒk�:æ(+é¬¦&P]·PKÐt¾Ò\F5Í•ykêVúÆ�6­4öVQ¿6žÞFIC¯ˆ©@XÑø×ˆ;xæ§eÄÓaœ�È2<®�?™­î¼««¶¡5êýbðú²\?¨Òõ´Ô¿*°7®©Øà<9€�/Ú—éÖ¿¨ùkósCó
+íÅÜPi>–.P”GªÚ#¦éÐ· !ÜênCv	ä»Ë=JÖfò+{¢$u”†â&„l
+:e¹ãdÜÇŒ!G¿ªMù‡ªiÚ†¾òØzml‘Å^’p�rÄñ»o–éÁê‰sÙžþTéºýæ‘~ú]¼’ÛÃsÕS°jøV‡âB”1˜�§2wé.“´4úœ¹G†MWŸ“Ð¼Å¥ùžÎ=5X®bƒR³[�.êë›ÆmÜ•ÂÎO%fFùn)Q\Ö�\žo[ƒ6	^B~ß>ö6Úh^2µýÃjz¥�V¥FÊU¸€
+:t&rûœS«œä8amÔZ™´„Qês±ãÅÿx‚œGp(H§p>+�#šBÎ¥)}Í‡©j¤Þ\LíÌ�Žâ»vÉ–£,ñGÁ,ºó7˜ô0iúÕæž¨8Çqm!†P ÒHø°¨$m™x±ƒ»Òvn¾s…ï‡›½K�Fk«Éï
+ÕÌÒ=ÄÆF-$Ï#j»SRNõ9Ÿ
+œÁ;6yªZÝyšÝ¡¹°¸½„Xq™nm¹VŒ!£„a–<|Éo‰œcAByn5žçPwšæåšy5¥o‰ù´¡¨[âzW®ÛäDÀÚ<šøÜóH® hœÄà#Ç@´5 SP÷ùm™#šDåÉËu8_N9JUÞ@ªv·49oÉ¾2¡OOÑo-_ËºTÂëIy4Û÷mRÎòží¡tAÉdu-À�Gz‚{æ.oDèrý¬è
+ÐÞWŠÓP¼ÔãºÔàµ†]|¾ÚŒ§ê¨ê6nrSUJG\¶Q�»™‰‚7Ku6C«Øú²Ûþ�ÇTxLÑ0
+áq¡Ú”¦"÷q²C¹Šˆæ
+¯*°¨¯ï9PøÔ
+-+B2ÑÑ# Ý
+Êêîì-­¬³È¨HUFn½>Àcøe9�
+œ|˜‰�“Ñô´Š;wŽd*Û‰¡qBØ‚ûÕd$›yÐ2â³ÌmðÝè¾CÑ<ÿ¨_K«y+K¸š-0³_j)©a¨y±Ø+˜yw½fxóÓJC˜¿¸2ÿ¯ÝêwRÝjDK|UašZO¦¡AÛjí˜gÓ³ç=»›6MEe·^V{Ûº‰T3.ßŽF6é±’&Ät¸å}jüû+€ç§õÌøHð½åZxÇ¾cíß¿ùÆë§þFþ\ÀÂ�>–nZŸòñ4“ÆùX6_ZìXøZlpˆ�Ú{ÀŠ�öË©Üôó|P/;n=óWÄìx[kÕx—…g×�	ýXñ/Àÿç!­†£ä9f³ØN%QJìv5öÊŒ½aÒvþŸÅÒÈ{þâüÂ××ÒÔ-YMR¥Iö;þ³›�<¶|Ë³Çž>ëû(1Ûùî¬e²¿³™í¯-Ÿ”®‡}Ã
+ûæÃ…S´ì¼†2�î‘ý–óÿž ó†³°Ÿ®Ï½?Ÿ2<!ÍÞåÌl!®¼íçÈ&¶»óF«uo<mÐKw3£#Ž,¥KA™Ëd³)ˆ{÷=O�¹ÌŠ Ñ[Ú¬3Ío,s[ÈÐMI£%0èC­SµUÍ‘´ßQó?™5x×Uó§©Z±ê×wsÎ€Ž„,®Ô¥NHc¶q‘^<Óæƒkõñ.«õ[­Ÿ×gô„L¥
+çÆ”4¥2¹c©&yËòƒÊZWœ<ý¡iž`,t››‚—Q†¡�…,±×~¤SéÌMlŒ#³™Ù±&/ñÉú;çOÊ/-j~Q>‡¤YéWŠOÄ¿‹	ø©±'9Ã­�–çñó{8éqˆ�Aùßæÿ"˜%½²¹²:~§fÌ²Ä@R
+ï¶Û×7Z=w7W®Ñ
+°?ù<Y	„´-"Wé¸âÝæ³@ÀÑT�£’…¨åó»Õ…«l¾†ò˜|�©èùB].KŸ2kp¬0ÙË¥ÚÝÂ÷¨_Ñú½Ð’;¨ËF§r½Á­s_ªŒŽ@Gwéwú,qðÍ÷þ‡’ùÏW�LÖ!³¶¼Ón,ôˆV%°·�}PY¤"äÂIi¹R\ó š™¸a*Ý–HÇ¢E7œD±ÇÀÃlUiH¢uîËÌ‘ã—ÿŠ®Û÷cPœ#ÊWä®7ÃÀQá‡¼~QË¦ëwÓi¾ió‚iz,m
+ç-@Ç%»É0#cw,qGÏ•93
+ö­)˜Z›àÓ—dÞdüËòV�q«Øy;ÈÖÖVWºM¾•<“Á
+Ü�{3uw
+Ôèj_ˆE‡ŽÃ©ë˜q�%L!ášçû5É©Mg©Å{hÒƒm0hÈr²¤q©èvQú³,b4ë4`Ç!¾ÿÒÊu¯9Ã¬ýbi´çŽòôƒ{+MDu¨?cæ<pBg¨Ô
+ƒÌµy‘ÔEj°±B>Ëà^s¿LÍ€¾mFw¸H~«ywp±YÛµÜÅBÁ+;Q@QÓ.Èä§Ò¿•þj“ÊžLó•î<¸ËªÎ‰{|ñ¹ŽÍ&I½&WJ¢±‰O!JÔŒÔëçÇ0|œ|Ý©ù|€VÕú}éÞ¥æË¯1&™fÖ¿RµÒ”.ŸcÄª@§í(RM*äµÕ'lÂyÎ××ÃVhsþß3ÞúKþq¿òÇó-n|Ùç3#ùfÎåí´í"&ôd¿¸ˆ+HE‚C¡�š|%Ø{?Ø¢XÌä?‹ô'è„”•¶ºèø¼‡¡›R�úª3<%jÉìjÙWŠö±Ð`àªgê|Mÿ9%ÿ8½¥h^Ô0?.¢{Km/÷úÿ–jdAå§·'u
+Ä	?FY�.îƒµ{D~7ò~jy‘VJ’A„kM»þ¼ÜéM¼î’'ˆM?-4­7W»Öí.ü¹æ”µ3iÂÎØÝ, !Lª³DÁÙ95~Çl¼œÝÖ¯Š7FÕü¿aç-WëÿXò¾›-´){l�¸Ž"#rR1$ƒ� JT“Äï\§,fFÎÓuzüäN·ù þXÙþ_jñ^Ø[
+J{ù"µhf72Ê‘<•mÙ	„ªÕ¨(vêL´���2ïýHÔW¹âÖþ\ªÁcsq%¾±yj·Ö‹,J-xL¾°V¸vŒr£tƒÇ/ñ|:kÊÞPÖ<Ë©Eem>™§ó‘Q.ïdoÊG¦�ÔDèÆ¬wÛé†Lã¶ÌX¸÷M|çùsæ/&Ùi—×²i”WÒH;)á=)LBF’"Ð²°àX0 baWÆoS<˜ˆ	&—å˜§]2ûÌòÜÛÙêwOmb--Öê²!fêÊª?“žR%A¢05in‡ccsæ{};Ts%»ÊËr¼Ê³²©ôÃ"† T”æÉ1±îh¾çüÎò÷äpÿœ[ÐüÅå_*5—æÞ�æF²×õKg¹0Ãarf¸ŽID“:(-Xã$€Ó*Òç”�âïoÏˆÛäŸ/ë–ÖÚå“I{¦k‘j6÷Qê–±˜‹F§‰YÙdV�-GPk™M‡Äˆ�%ãj7×W‹ ¹f,7
+Z�Úµ5=w'0e@SÈö”c9Øüs}ùmùÁæŸ!ù_Ì>RÐÖÙ,¼ÊG×f‘$i‡©ÀÅdU‹wS¸­Î/’áís¤Âb;¿G¼w%–‰4¬g"ž³šûö®käHxnÑÔ�Vc3øÜŸ>ôuÈ*„ö@ë’Ã¹ux÷È=ÿ¥ŽyqCjZœ§r&Q_e¡þ9°ª‹¾ÕâÒ‹úü�³ú—åGå½£‚²Aå­-]|ê‘òük•G›ì�•Üb?Ñ�Ü“ét©ù½Ú«âüñmE©×èÍ7v¼!Lß ô®<E‰¬/Á Šï�CóôQòŽ½köËÚ3¨÷MöÊ¥-íÅ×ãÓÏÜ~âü¬óLL¿WœR
+ûf÷F¡gñÉò
+|=VQç/½‰j„ËhÍOî˜O
+¹“‹ŸÅÍÐž²Ò?xc/Z“›��æ^ŠU=1Ù$]2)’2´µ‘•Ù1*H4½C‘™³myI!œùââ-^&ÓoÎŸªÁ4Wzdþ2ÛÁý®U„Pæ¤x‚‹—Ù¹9ßã£ôÛò¯óoKóþœ!¹Œi~d³A­¦»Uehè+¢‡§\æ5º.\oñ~OkƒU”IE~iþ^ù{Í5Æ©qþ�{kHšÏ*
+þøÓq¹¡Ê´~(•WÞßªž1sò^xF·~¶²}f®Ybœ
+
+iQí�–”o­"y6jêT‘"à„ý�Â½×ð9‘M0ˆrü²ºò™,¼½ä½SË—1yšv’7óDr„X½.l…T¯Ú^d©¥}©‡©™Ç¸§i¤õìñ¯Ìï*hþKó%æ�£jÍ®ZØH[¦ /(ÚffÙœÇ2´zƒ�nf¢<gœ¸¡<*+¿™ÂM$8­c&§á5ëß)î–—z\�úT¹]6ÛZ–ÒõF¾®ž¨%À¡b¢”~4Øæ¨Kà‰GŠ4úÖëóÃò#É’ytþ^~TØjói=Æ™¯ê:±mE.¯ø*Ã©Z‰^8á1KWþå×âû$ï˜Àp´\/„îæ™§¸y4³;<Ìâ]˜—eT
+±&�@ð•�!!ÄËØCädš�âôÃMSfÊ]sdÒRvé’²Û	ðŠfÿ–×zN…¯Ë>¯}>™åœöñj–êe–Þf£qÚ•S¾C$‰S _JGçÿ"êÚ§›à·ó[i:Æ�e¥Áqwi!žòt·‰
+Ï4BQy¡ä+ïµs..®·_‰�îýo&â=`RNHƒbBÈ ÍCPÐ‘Zí˜$�^@m—Õßú_©_ó‰:½ž£ùOm¦Ù¼]Ð¯.£Õ"&¬yÎÒÔ¨Ü ˜ÚˆÙ¿'Ô=žÕFZS_Wè¨c¹sö£ô”Juâ?d×˜VmÜŒ3ˆ0?ÎM~×@ü¥óÕþ¡´hwÖüáVk‹y#Šõg4{fF!»^¿SéŒeW¿Ü_�¾b¥v¥M
+
+J€?É/Ñ›í#Áb˜–C]ÿ¥ùo'•lu{Ûß2ë÷xX\ÚÍ,³°Y´6÷LÀFX…)Æ´­zftîÅ;|E�®�¦ëº¶¿gåËâ`_Hi²ÈWÖ£,fœÂý¥ŽÞLÈ�Ž¥ê›?—º•|�ùU¨Áæ{+ÛëÍ6âÌi!T´)<²½êO,«¸­\†<²•Šê¹ÀÇsÂæóºÖvúTú•ÃÚYF!³¶yˆ#°D¯JWîÌ‘‚'wÆ‘Ù?ü¿Ö/tÝbK�>ÙÓˆ–IcWEåTŽµíÍ«CôS15x#(Q%ÌÓLÇ`Î¿7¼Ïªù‡Fò.�©}P>‚Ú…¾›s¤0þîíÒuñÆ¼Èi$¡bXwÚ˜4XÆ8íe–|ÄÙ+²Óu{==¼»c©ÜO<¶1ëi¦²Ã-¬|¢è²I%DŠ¬ÈZr”é–Dú®˜’h<ûF°¼½×m©.¡¦V¥‘¯¨
+ªÓ¯Ž[“%Æ¨4Â#ŠßC„µËÏ(Ý6™-ÂyjmEÓµŸ­;ˆX»\ª4õeyº‘¾ÜN`	QØ9YMÇ…3üßÑí´?-ùmMáYÑúµ¡¶žPñ9£—º¹‘„f> 5bÀü[X$O7E«‡4ñë}]!¶* ¼„ª’û©"§sQAÐ§& K ž’Y7ÞÞ«ùwäÏ<ùòBþSòõÞ¸-m®u	ãµ
+X[YŽRÈjÕP6Ž¬3xƒ^^ÆË,d×ßÝîdºUîék-D°1V®Ûõ ‚*$©ùf·Sˆ³ÇktÇÈ"�ö¦÷òU%é°ûÀþ9N©Ôiáy‡¿ô¤TŒÊ÷ÒŠVâöTêªÐïUŸ’[ÓÐgÄ2jpâ<ª2øÝ?¤/+Z¥�–¼¿b>§§[CNãÓ‰VŸ†F!öNÎ8 @Èö ‚+Ðìr×:÷·æä„@(3Hî^í�öÈHÒÕ®.ª6Ó¡¦G‰xV\ªÜÛ\Û²’³Ã$L}�HûöÁ3é¶¼�âŒ£ýü¶óÍ“[]ëÏýä¸§ú®…3qÙ¹.5øèøþ§ƒ®˜ó?îži)çi òA_£60çñc†\9ÿìfµ=¶Í„y;é¥…G\!¹DŠáBÒ)ŠµŠ­n¸iH°ÒË-±Ià•ãš'’)£:{}N@ã¶›BÓÿ45Ûia¸(�{z‘êþêPô—ÂBÖ€vÊ2i�¹Ø5S�VKç/ùÈÌ6yy<±=ßÔtÂ]9	gýøÅÈ§È«’1•Ó‘›[9F¯ñóxTHL…ØqEØ.lH“¯ŒÉæ½™~*( ïÞ˜·FO~üˆó�or|¹©h©v÷rËs¤ë$Uà¹H�½>!P*7ß5ÚïÇÚí»<ßãÜóÍíKÑ¼Éq—tn¥@õÑUBïÉ�~*«B
+kÜfGgŸOãÉ¿YÍåEUhG'lÇ¡÷Í�h=¦2»‚ÌjÈaCÐ<˜Ú{ÜC­}ú?Mž/Jòp•nÑˆVš!ÜeY@«HçOÓ_%ù¿òoÉÿ�çRÓÿ$íîµ.¬z~µæ[µƒêz„Óè¡G£\ˆ½@EW,ÂéœñÐ·æ×œ.®/¼ÙæíCI“@¸¼Ô..F•J½²Í!‘"!‚µX(,e¨µ ËÄA:ŒÿRK=bXèA*>YcR¹5±ÉÄlÕ>kCB:‚±¨u÷ÈJ,wmÆ'ÃÅJƒÔÐŠµë€T¦¥Ëô�hrX§ 58ú›î(­OQ˜:�?PóúÞÏ ñÇ?'¸~Z~hy›ò¿W}ËGûôô5>bL7Q6u¦£¨ ŒÖÏwCÚY4sáÞ®úùyŽçÛgüç´p ¾ò=××@2Å4O²®Ôb+ÿX6aø{½Œ}ªˆÇW½~�ë>Püâüöó·æêmVaaåèîÄöÚ]/Ø289_`[Â]hvÔµÑüoæùsÌêU�zîkï¹ÍÞ‘«³de¹üryÜŸi…8û
+Ç_Q¿LÙmnö`-/¥fÓú’©V†LÒJŠjMwÚ™)Õ9p‘<‘’êpÌ–Ú™¸Y-h‘AwÍ8–
+hUÖ µ7}9`U¶y××�-¶ÍrXÝ:Y7$îUj+°9`Ê9/
+nÉü‘y§ió]Új±^8ÔÚ(­íìaY¥–P[ˆPÎ† ï@·ù4©ÆÕƒ!³n J™ž¼Águe iÖšJÙZé‘\È//-„7Sú²„egVQÓ!S‘U<¿j¹-.ÑÝuŠIEÍÿæòúo¯×B´·‘Ø,å^Lê±ÃÌF.\�·&jPm‰ ËfR¸�l{Ë–÷¯=ô7ÑipØÆ~½©Ürà« â¿BG={)Á>La-Þ‰æ�<y¬Aoå=RþßXòü7‘_ýR$V×<©]¨ÀÔS(„ovYóp|�Ú¿›ì|Áa-…¯•¬<¼²_›¸.¬Õ‹ðôVI#É!]‰ãÊ�é¹©ªuY³	¤1Û %^q°�'€fâ^ÃÛ¶BNËádÏ²ç?ç 5oÊäó1Ð´Ë.M{ËÏ¢jwâ0×WšhVO@³,@
+ÐŽC§lÀÍ*wy;[Ó‘µ×—w½‚ú³ßkê�§é	Lê$7Ç¹$
+µè3]–VùOkêF|Ä�ÆåzôY~_ÓþÖUƒêtØEeÿÒ¯ùibÚ�î“eÞÿSXG‰õ¥¦ßOLÍÉÌ{ž†‹]‹ú±ÿtþŽ AªŠÄPƒjSðÃØtb°ÇÜ>å`>5ï’o½Ÿœw+éJÊA¶ie³º‰´?#JA×);¶RõbÀCï‚•{‚ÔPxÐ†ö¨é\ŒÎÔÇ‘'ÉùåùÑ£�;Î:ìD~îy©OòÇõÍ—fÊ�~:>QíVf9“úKçh…"xúÐ•5Íñˆ‰ë€ýìeä>ö6ãŒ’/ƒfD&]þ0%TØöË7lâïQjƒ¶;¯Xkß'Þ¼Aa4ÃAxƒD×Ù µøûaeÄ´Q
+BŠü±>¤ZÇ%ˆ¯Ï"#I2[ÔûäÓj]I*)‹tbÏ“0î|‘i­ÙC¥ÚßÇ«¬,—3‚e·–Å$�•—‹|[Ôí˜ÙðŒ…Øirxa%óç™´Ÿ6ÞzÞÉ¬µKÀ³µc–Z’ÒPÔŠ‚;åº|~ äÏ É¹yäÔô‹ÂZ‚œ#" £3"XšQDnld%8©âõÛ$À�×“‡–¦»°O5]½®ŠyÿH”‘€ €Œ©ÓñÌ|öEŒâ7/e²üß_-½å‡—-å¾òä×�qkg{1�U�CÐ… ƒÐŽ”Ígåx¥d–9u{VÏ+ó.½qæŸ0k^aÕd’MC\»žööi¤õ¤’k‰Wf�üF¬Çí}ó;.AÖÎ`›If�zq(`Þ˜¥~ü²š%:ä‡Þ»÷ß$
+0â‘lÓ¶'vVì�V+h)F;ã!a3<bˆeV´ÐþêrNÿu4ðÞ£03àÝÒë;>2õoøø=Îhî‹ûÄ,h'æ@®kgˆD¼æ\f«*“TÚ…"´o‡Û~™A7$	VÌÌ°_}€œÛi§N÷³²‘°ür`iöÚµßo–gœ–]ävÝ7òì¶v_Õ¸D½¶x¡½´Pg‚P	��Ô«R§%ÅnnÀlˆ»Õû[Ñ¦ºk�qôÖ†)¥š²M7¦ä¢–%˜=­IÈc°nË–&CÜ�óDñ3j:LWóÛGròY[êJÉqjŒb1½Le•"´ïßíe—e_ËFÒ,ü×cyæ)Í¾—f�$�èÇ/©$`”Ó[\¤`5>2ŒT° ®Ëj-È.í“~qjöú¿›í5-X—X�­Ç¨MVJOô[U#�*}-šªI ãB›'¨­Ø–«®Újr5õ¦Œlu;Ë8­µW2ú±Lñª)û5P6ñ©ï€H:Ó>t“hw×š*^ÁVwº„FËk«X.Ž¼”J�Á‡ó-\h†#PC¯¤—Ski¤±D#‰NüUI¥+Søå@ðìsf9è‹+•âª�r©Lºü·
+Ã1Ót¸%ŠjÜÛÅqéÕ"º‘#�©¹âY”òÊ¥2S9…Hol¯Ë>VÕ&SpÑE£¤’À†2ŠU)È
+
+OÝšÌò%ž³±³&Q¾^}Þç¡ÚM„pB¥y$“ûGÇq˜2/›kqdÓÏ×Îüù!µ¸êj>åc“ÁÄ×„^xŽúûÙ×ä%‰¼óÇå�¨^_Yó˜däµÜE¿s3$w÷DLûB ô¡þÈ?¡(E@®ÄSï"§ñ'ÙöLC‡G�ûšß�;a¶îO„5}6ªÄ&çzæ«$]–90ÉTÂBšÔœÇ�§ ñÐ·ò)FŽýÙ	±Žó¯'Å¿ó’:wÕ¼Ãgz�×íªÞÕœmôS2ôR©~<Ÿ?ö§OÃ’ÿäøÙ�Šâê=ˆVä¿HÑÆVÌÇr“ºG3ÈjK ì¶ôµ$æDÎžV)Ê*Ž*b’¼êÔ¦ÈMQZfGD V•`:s#bÇâ¥z°§ß�GR`¬Ä ‡	ju-AJu Ç‰x
+Ÿ‚Ä2@©Är'‰&µ;vðŒf»)UýªÓnÕ4Ãi–²ñd›Õ˜“J¨ðùöÅ+{‚@ïÉH¥{uß$gcð+Ù&”›ìo^††¾U§GBS��Øôî
+þ›â�iAª¿+í\[c$
+Ï¨BÐ
+± öÉÄ
+nŒŠ\ñ¿ ÁSÇ•	Ó¨©5ÇˆØÈ­¥Í%äˆ)¢ +/aQ¿†6~%*Çm4®>àš|=¨I>"¸xš¥•3ôDPµøJƒµ>#N�v¦Aq²e‘;"!%Ñ[ˆGri¹®W: FRdãÊºØ·[£e+Åû¶¬q3$$ÔPS|®:˜�™þ^GtŽòÖX%Ê)#B€E@$t Ó'â	rj–3hrvm’	‰+@åÑ�AN¤ákˆâ)¦“¡kZó¤i¯sn†rê€øP1©Êç”@Ó™¤/ñ÷)j:^£¤]=–©i%�ä{Éi €ïÅ�!‡¸ÉC(-sÀ`‚Z© š0j~…2Ò¢Ñ8ƒ¾ƒvUAy	â(*sS©Ã|žc[¥Ü×ã›2ŽT’­Z�~œ×ø\%Ô$%š¥�Ö½Bâ(2èO…ÌÓfðË›E1ÂµSRNecËaÜG\­/]>–Í!Œ«ñ Pñ`@'­6ñËã‘a«$®Ò¬¯¬® ¿±�Á{bÉ5�ÊªòG�¹«R”$ävÃ,¢ÙäÖ -Río5;»«ýFáîoîäy®®$5y%‘‹»zÔ’rQÊÆªÂc }wDº{ë2©t±ÊªÒ"H•m@ê@øX�Ç¨«.K-'UR¦¯õSÌ–òê·?YšÖi�+é	@cñHÛàŽFã©°•¾œ"iX¨Jl�¿VJÌ‹d%-Ž/�™ˆ%AÛ2hÓ‘*'’KÄx¦ÿ3€E²ˆE-ËBìÊCR›¦Ýò‹_ÛtoÊ¯0ê~C¸üÃ:®™ied°Ék¥ÍpÂâVFAÁ•?g|ÃÊjTçitB>³ÐþÞä¶ËXEžâ[mJîÞDáÖ"Bb•Q�d°-^„e9qínohvÌ0éÌE]~ƒæôƒs{-ÉˆB³Ža*M9oMÉÍV]‹ã]­ª:™ñÿKô”.°ülî› ^d|ÂÐ~¼³ÔÑ§¿‡Ãï{¿üâÎŸõŸÍÊ¸(X¦¥Ì=­Ñ¦'þffNoAÙp¾ÐÏýð~îƒÇâñ©ÿ‚<�âr±‘Xãîse‡¨¾oóÃÑ�íð|�wj$ä„R f¢æ@ÓËµ[&‰ÙøŽÙ‡–4\¼fÂX��¿}‰Êm’¸‘ªƒã¸¦BìÒ1í’ü¿Kç/ùÉ
+1§ÐôMM‘OÕ®ž'4ìéUüF]‚\3äý©ÅÄ8¿Äü÷ÔPÇ~XIãSô÷Î–€xl‹—PHûÔýõTÐÊ8³²9+�ÏÊ¹•í4>®ŽOn×¦¾¿Ð4û½ãCÿÃ¢éïu§K-šÏÍ²!–8ÕŠÍÍš:Ô
+i¾N{»6O«ù£Ê×Þi…t]Ùtë½]ƒV·U�¯£i­ÌˆU�Wh¥!‚(û<�-°:hvZG•5ùR}:e—Í-yå»›y¡•î¬¦Ž~T©UTÐžçÛ’
+);1�Ê‹‹7ÆºƒÛÛA6Ÿ¨[-íÌi$qJ–ÌÐÈPáŠ²ÝÎdJ c^“ªù{Êšîµ ™¯-õ¹.¼¿q1¾±htôÕ5y$ôáøÃ,NW�*®â”¦S	È†ÉB6­gäŸ,BÞdÐSC“V¹ºÒô½Voí~·i?Ö}+‹U»)é’ƒìŸg²Hte0=Rh.<¬ú—˜¬ †ÿ_º°k³Ð¬ï­a¸Xïai¥å$¨QÚD!i¾1Í.äËR‘]ùKÊVzæ&›kêzß–58FÔâ¹
+ïbìc�D>›) SŸÅ½T­(k/L|(²-oÈ6º�›îæÕ£Ôçúß—l5-JSkíÓ¤P[Ël®©Àµ±ª·Ë7¶’HðcæÆü·ùs¦jþc×4­WB×ô	ì­a–ÏDºÓ+ÈBÒâæ+)8ƒØ‹cÒ¸|I2âWæï/�ÌzÎ‡è˜ÎŸ;DG2Ð*ê¨	ß¯ò‘‹Õ,e.AèžZòýÕÿ”4«Ÿ.ùBÛÍÓßÝZy…Z&šXc0Dm‰âÃÓFrÿPùT·,ã”¯Ó<�o«ùSË³jqÒaƒÍcFÔõ˜â`ÚtZ38$	(uä	ùàâ0Ø2'‰�ù;ò¦;]KLo4i·a.<ÂtA§\Cé¤°½¤Ò$ñe/É×à¦ß<,˜À|ùä›=FÒu;Ò6Qj’Ü[�/W€Ew„#¬…Tï,€â1™2@€·›ÙQRÙý7,¬FvbC•QôÓ.Ô@p[v9Ô„iú}ÿ8àß–gÌZÿ“5/ã´òî¹kl¶K;Er¬óÀ«,.¡ã1eêiµ3L(�Ë·”b+¹áÿóš¶ÿ–öšW°~Y@–š
+£GVàêc‰TïS³È×¹ÌÌwQ©‹ãB‡‘ç÷ï™¤Ñ×Ñäƒ¾*�J7$¡¢÷$@>ù)š§3I€]¾©òßåþ¿ç]+ËšG‘ôk‹ëÛ›nÄv‘zœ#ôÙ®¹2÷UZŠ�‰ÍFl¦^£Ì=& )#ÿœ„òÉò]ÿ�ü½<3G©iö7pß•¤‰G DäR¤“Z�Ï^Âý$¸Ã«ÖÄ~>/Ÿå_µÐŸlÜ36��!;Òõ)-*±P™ÉËHÝ¯.’Y&Ÿæ)³žµ»f&M(–áÕê40Œzþ>ÎÃRIË3IQJuÌºyNžzaDî»RºŽ8Ø‚Û�÷±Òãã4ošCÌÚÎZ)¡?ã™ S°8†#²w£Ùêz“M—¥Ï¨5¢~õmÔ;("ªJò��He9Níÿ“–r$;—ùƒAÔôt³—TÓæÓ$¿„]Y¬ËÁ¤ˆ’9„~Æª@`¦¾ÆÒt¹a.ûÐºvŸ¬_X½;F½Ô˜\YÍº—Ô�IU}@Mzßª÷r’ç2¾_Ž‰~«¦jÞZÔåÓuÝ.ïGÕmÈV7°½¼ñ–â‰6=[×“K“¸kïKô]3Wó§št+i¡®_ÃceëH±GÎwHìB–­:õØæEq¾®ÇK¡;ßãàõ?ÿÎ6~gþ[þ^hŸšZÌ6WžXÖ¥’%±¹Žgµe’HÐÜFJ²áÈÉhGÄMinÜaÎü¨€x�¶¥®ê:n“¦Û	ïoÌKa¸©w S™Ø[cÛÄ¢:ê¾dü‡üËò¯“íÿ05M!¥òuÔ“C³oûÈŒöÓˆ$‰ˆ
+Ä†&µíCÐåQËšgù1
+Å¼æ7ù•¬`Ð!Ô§ŠÀPZ#�‹@íR	ßcƒ6œq	æÈÊDx}ÿØ÷/ÉÏ=é^Kµóõí¼0XÜ_ÃÓŠÎ×5¹Ré1	GÄ…=\ö§\Lù#T'jöiŒ�þ/É=Ñî„¤+�§€íÔï½	¦Ç4¹o‹wÎµhÊf=ÛüT<ÀÜ4éÖ ³§ý–Ç-Ãí«C<ÄŸáýõ·üá½‡Ö:|”ÅIu®¡p@éµ„ˆµúXfL�½³×—´hòýð~ÓìÊê<2/°�ÄxO@¢Aä«^»ƒ‡£X‘6<éó�Ì¹®ù�(¹q“Ö4ïZ2±®þ'1²BÛá:y´örC+«ƒðýšT
+æANDejÈ¼Uy(
+NßÛ”Ç›9l-å�:cê^@ÕY›XKor²åøD« üuu³§ñ4Ò—‘û‹ó_CÅ´Š fâ=�Žu%ÅùvXòéŸ¹Œ]¡ã•¨«+�Ôò~U4ÌØ;.Î—ãäÏ-4�<­åëæòýÞ¹w¯Ý^Á;[O"46âaF‘´bœÉ<ëQQ¶Ç-“¶gùx×:~™:ki¯«Z]ên˜ÑË´V†Q ’qû¸Ü‹vøX}’<FE*ÿà«=vo'Í££ÛëzÅÝÓ;<Ê²i’KÂÀ¿'Ó„P
+÷÷Ä
+í�;Ò/Ë‹AšŒ¾gŠßBM(jöú‡Õ®�¸ú³E%³ªÉ=Ný\°ÊÅ6F5ºU¬~_]é:}î©
+ü:�¥‘°{yãG&k{ñ"¥Â%	P­WïÓ|Œ
+A,_Ì:Ç—u«½&êxç’ÏÓvžÝØ+Ç*,‘8o…‡Á  ß¾Y@±²µåŸ!húÆ�¡ßÜÙÝ4ÚÚÝþ“óÞAV2Ú—eyb’:¸ ¡ø\7^ÔÈÊ¢Ê7&{ä‡°Ñ´­ZãX°y5øIÒ´ôõdšDi^Ýƒq�Â
+r¹ãïƒˆ2á(ï0yRÐ-u+Ó¬Yj'E¹ŠÏZ¶¶–U{+‰		Ïà_Q«×�#ÞµÁÆ„²M7ò§]ó-ÔŸ þ¯¥ÚC¥éSH«%Ä¬ß]…hÃÑ‰œ‘0Ri_ˆ¦0¼%‡Kùw¨YRmwVÓ<¾šf¤tÛ‰®]¸OrÔn1x¤ìÃzS±Ü¶=; Ç½|»%¿”n¼×m¯ÀÐÅª.“6™:I#8f&6M
+£uµ)Þ16Xòa¢{•€Ú©Øšµ½J¡$R•û@TÔì7ËÌ-"-õ}Uýú•ÔŸV�KliÓubQ’¬J•€Gløˆ[«ÛíEAÔ/®oÌP´Q½Ä¯!E¦ìOJaŽ=Ûpž)%VÓºCŠÈêåÐŸäûý d³om˜á˜/µäÔ<™ªùGÊÓ¦ŸX6v²Åé7¦­qonÒ%ÝXµUTPP’j)¡ÏŒ‰líc�<ŸóZÖ(íô›èÙc¸¿‹Òh½IBYä�¹žEºžõ•¤Ýf¦aâ‘­‰7_˜þ³Ÿ1îp£ RmR><™³TŒï¸Wož»›§È}-ùgæ¿.éÚ7—ïáÕ5}#YÒl¤´½‚Ê…o�û—�Qi!
+ÈCµkµzbA!ÚÛ1ßÎ¯77œu-ê3ÜÄòZA-¯¡ÐÉõ9íJÔ±ø×-Ðc1þ98©Øxãîæ‡’¶àüü34suP±irjš…½”'Œ³ü*ÄTlpä•78ö}äÈ�/Í]›½ZóN»Òe¼µo«�Z"Êœ õˆg…V#nÆ«­É¬8Í9òìØÎþ>ÇÐŸœó‡v’÷Mi{çiu)§ˆ5 ´…!!�ŸÒš`ÅDŠGÄ«È
+¨Ç*:³.Ž^Ç‡?�¹ñº³[4ú}ÃRÖG�È?ÊÄÃ.Äxão;Ç”�øÝ	¦[òŠF€@Á#MÑÂl»Ëwzž™­Ðåú¾§8ôáœ¹�Bñ%�º«š:ƒµ;|ŒcÅ»»ì\€ã6:þ€ú/WüÂ×üùùƒå­CÌwqÍæ»!Öu dOF‚[$’¤jâ•(ýZîR)¿ZjVãt‡HüÁ°Ó3¿Mëkz#Ò¯ì%xô_\Ï<pb]¹<…� Ÿ†žå3�”¬9ú·
+Çãg•~ùÞ=þhy§Ì¶sÞÏkvÍk-ûú—?ØæÌÌÄÐ�µ¿µ)™¸ G7[¯ÉëØ~7xÆ�y²It[êîàN€	={eúˆ
+œ­,î;½oÏŸ˜wzž�7–ÖþãY³ºµ²ŽÛë3rŽÕ-ËÈ"�6UPd&”¦ùV–œ™‘OÒõ(´íf+¢]âQ¤�ÐTVŒ
+]²N½s �Ý‘ÖÊ0dˆÐþióö�iä™|¾—o­êš¬?è¶Ç„°Ã2±g%¤òC²�{÷®``ÓÎ9,òoÉ–4ù²ÑÑ'ŽRBôô›‘d”éÈ€ÿg�Í¦¦@Æ¼œHdˆÊOÚûÒãó?NË�ËP_ëZ°’%]R=RÚÒë¢ÕZ·¹™Œj,Aëð÷<¼ñÌNÏ&=µ­Å,$
+ååÜ|Þi¢[‡‚f‘Dk»DªT°©²­ACÜù.y�˜û�Þ£¯�ôXcƒ4i^æ§¾Y‰¯³È&}ÿx}áÿ89ffüÙ¸¸uøtÿ-^Êí!–Þ%Ø†9t�ÿ²Qã×Ê^gýÔ_®µvëS_�wÀúÔOïüsCžU
+ïL=¹þ·éxœÖn+°§¾@†ði-¹Ó"x÷ê[®U’!²Ø½¢©Fh×tßl×fƒ“	ÓÏeª1`i˜ ¹Ç,ÍVCRòÖ¹b	­ÍŒÊÅ‚ÕpF"R¶žÐ¦”{Áû‹ò“ÍVí’£â·’Œ;T|'õgG¢—kñÑòYaŽ9Nï"~l2éI¶`»q †vßøæp�J›4ò8çC“&òm—œo-5òÞ¯.™hZnÏÖš$yî¬QGãÔzÒµ'jeä0�_s¾ 
+14ŸÌýNón�æ£c¦ùkÕ0Û¥Ì‚$æµz/?‹”dn7ãJ“€g¯ÜÂ\A�èú�›õ{›
+/OÔî?Üs]ZÖ^+gQ$ïë-
+Šuß~XOF Hîž^éß™¾—qæ;­]ï–m(Ïu_«\®˜$ c	*xrRÄø«di³ŠUMiãÎú
+³yžÛTƒQÓ4H­­µ;{øf‘-Œ¤Å±U�9‚H¢½pð	n˜ÌÄ0o6ù’çÍÞaÔ5ë»Xì¥¾âŸU‡ŸHÑ"EÀ­06ÉˆÒ­e«ëZÒØùzÔ\ÞÆÓ»éÚljò)š`¢Nª²“Á(ÅˆræÎ�²aæ;M{I¸Óì5è%†m5tðÁJ-¿7˜úP­9±Ý)½FR*Ùñ]Ç�<Ë¬XÅ¦jW­yf¯ÜB«M4ŠOVDNnÄ’5pÊ^"ÏüÕyç¿,H×PhðhÚ=­½¶‹-„ÒZêÉðókqxœfPô$†1¨û PƒƒÃŠñšižnÖ´TºŽ×ê·V×r›››[ËyàI6£úSDÊÔMöùl#bdT,ï¼Ç¨Å®iÖ14–ZªÝWN†Ý@ôíjï" QéøªW³e‘ŒCY±¤“û¶äHSÕ˜²Ô‘^‚§Øå¾#\¢Vº2ü5ÓûÕ�…v¡ú1ñð• q�…Aäâ�öìN7#á(8ØÄêµ<$ |¨ñÁ#nTÏì»AÖµo.JÓé—BØ²•«Ç¼jkDõQø|Ö‡ß)––©j¤6£¬kzž·}%þ­x÷—/OMš�P
+¨Š(âäãNf|ÒžmB<Mk–Û\E5ÉMC*µGqˆgòn	%±v’ÂªÈà‡PªAÜ©?ŽKˆQr¦^Kg•ç˜O4¦y¸iÀí@:£#G&3ÌeÍ`&¢»€À"í „®îâX.b–&tx�<f�@wxžØÌXÝËÓJ@ìúÊ_�RùX	¯ùe|Ë¦Ã§yô�Ae3¼*¹?¡ 
+)³q5™�ùXä6ìòê&#ºµ×çÏš5ý:]2âÂÚ) ¸–kk˜8"¯®ÎXªzf2X*…€’:N³­Í¯ÉÀE}ÿ­€ÚhRù’êâ[ýnËI’PÓÜßê.Ñ£ÈìBˆÕ³³:à�1è±f”‰‘çh«ÿ/ÝybïUÒu	¢[½:åáš4pãá40 `Fõ Á �©!ÝåuÑnuR5½bmÀ:©@²4‘¹ªþÇ„«Šåw(
+�Ÿdd†-�êg¾xÖ¼©©\ySô%�·˜ô½L“MoX<m)Ye9eô¤¯£âfé”ø²'uíNÔŒ'B¿æÂtDV6†ãOÒ®Ñ¤-ªLj�À7Û*	ß-ñLy9zÔÁá\�KáÜ<Ð>hÐ»æ‘aåˆ×Riã�![gU’0>ÈvÌŒy�ZiÉ˜g•Æ’/#ùÇÍ~Ñ¼¥®k‘y[O½ÔVÏUÕæEµA´ÒZzŒ‹R«Ï  Œ»&z�;
+.9JB2ÛÜÎ¿<ÿ*tŸ!Þéßá{Ö“G}?M]DÜO·"üÛ »¯¢8ª´ ”MÊ¡UffŒtÚƒtiÊÕâŽ!±y/�¼­kæï6ùËz–µ—týnþ;½jUå¤o G�’¢ª��"»ï—j¤1Ž ãéqG!«/MüÈü”ƒÉ:V�©éþg·ÖýT’ãP²RkZIHHVqûÅ–7ö4¥Er�6¶Yv�z¼RÅ|™äH<Ø-­lõåÌ‚Ó•
+HÆV�±“WéÈ|°jrðšpà†Q±/¢õ�ùÇmcÈ¾O�ÌúÍôiª&¥sdº_ú4ÁÏŠÈÒÈ“<ÊÇ²ˆŠ÷äj@×dÏÇ±Óö¾€Â$Ùü_’I£{iÔ° @U…(k¸§ö�òÍnqSù¯h\&%þ½-ÖªdÓâ;˜¿™8ã²èÙ$z	~‡è÷üà…�«æÿ:ê¶Ú<6å‡o^ä7ê„åœÞ§ØØÔÎQÌËþ$¿PûüGæßüN4ú©'�©uEpÓ-¯Í�Ëj¬¼Ôžùä¢{MhË^â™\Ã(šc7öK"»¹*zf4ñÛtdñ�0éïi(”!*ÇãöÜæ&\täB[1©R(Œ.ÎÜj| ×1A¢ËR8ð‘åú˜™CXjúîŸÓÒ¹–§¾îÌ?›m]ëñÑò®ÔÆaª¯/Ò^:±K-³Ä·”=zfÏ$ª@¸â|3’yÎ3ù2]Z9,^ê×W�#ŸÓtŠxd‹Ÿ§<4S"ºsj§®dÈ‰Ñ'£»Ž®4UóÞ�s¯ùƒYÔômDÚjº{iñé¶÷@Û‹c#—BÈ«JríM²Q„{Ùþb%…nÛOÑµ�IÓåµM^áêöi8±J8µ%Uvw$¿ˆ
+)½ É˜Íq£þkÛXy^Û@½Ò®%Ôml¯4ÖžŽ8®âºŠXÒ;£Ã›*[ˆV^Þõ)ñ¢ó�kÌÏ}¥éº…»iÚVŸoqn¦â÷ˆÏ+-9’@¶é“�&˜<˜ŠR�wèªª7öP2Lx™w’¼ÂžWó%†ºÑú‚ÌH0/ÍA¨‰ í•Î$¶ã˜¦_çMÍÞ_¶ó}­ÝÄZ3j*ói±ÛÛÖ	!„["ªÆq‘Xš/| @Û>0ó4s|Áã«ÆÄp!¹ªò
+CPiBzå’ÆWŒ=óÌ?š^[¹µº{k‡½Ô/´Ë¯ªµ�¶žŠm¾)½k˜Ÿ”àÔ€»ä|2¼a$O7ùÄ
+BÎÍE¯<Çk«~�¸´…VÚ$õÄ±£�� �‡m¼d BÂœ{Ó´ín-^/0ßë‰õ
+R&´}>g·k»FŽ0^'+"—e¾\<%a¥ù»Ë—z§•u4Gr/´èoaÔ¯í-¢S/ªÅ­LŠ*¿4û5Û®<%x‚oæo>ùQ›[¹ò½¨µ½Ô4Ë£¹k(«õ˜'�ÜYŠ4TßÇ¼Aä¾m¿ÓuMbMCK·KX¯--$ºŠ4¨º6ñýcŠ�€õ+L·Ù‰�%h/Sµ\š},l96Fb­AÅÇ»R¦õ<Ž*¼S½F*´�Z‚qWTŽŸ~+m~¾Ø¯åÓv!«°Â&9·�mq«é‹yqèZK ç ø�Ô
+øå9¥±§c¤�wÜ>CüšòoŸ´Ý~çÍïaæûk8µo/ßz­éêÇsmhÑH!¤ã‰#s·lÕþfX¥NâP„ñÙülú7ÍŸó�_ó‰¾V“OÐ4
+GW×ï.­ÙµO0¸gÈÀÊ–‘4–‚6�H¤’Hê“mï:¹àÏMŒÀþÇÄ¿•¾Hó§ç
+I<³i¥jhü¢„k\„\™¬±º§5‰›~|wñéQÏµ—Q�F	<=ÿŽŒ«Yü€—Ò¿Ö¯<íå�=%’G’ÒÚ[Ë˜â*jÑ‰sš'Ù]öhæ<u`šNnÏ ]~>O&ó’õ¿ËŸ;>�q&Ÿ¨ßÃËëoõÛYVhù	$Œìªv&›öÌøe‰‹‰‡KSBÏ7¯©@Ò\YŸ­Â½¼"Þ&…X¸¯ðWÃ|ÅÎ@Ü:¾Ðìó“0ŽgÉì±þ@ùÎòÈ_\\iVÜ[™#[‹Øã”–Q@"¯&ïÛ0°FT\Ÿô?�ð‘uC¿õ1©¿*¼ßä{7üÀÔ´¹òö—ock}Êâ¤¹x¤•HhÑj„DÀ‚Ù±Ž`ca¶xrhãgôþÎç’ðhµÙµ˜´ô’+™^qf_naË€ÇºÔ�Žû|ëT³ÞÌ´]´½GìóMüÃ-î­§›â·²´-�godTQ±5=®y¸M·k»XK¯ã6£é­¦j–’´Ip©*ÎÖí°fN\kZŠF£-Ôjx±µèûHc˜$þ>o@ó«qw¦ÝÚXéVšp×6ÔÚ%™b~b0ÌÆŠH÷ØPŒÅÒæáäöŸlÃ  wþß65 h·Ö“C}`),Râß‹Y�ãBã|–]O­ÑöÀÁ*‘ç¿ãwÑW>iÖuÝ6ÇKÔ>±fWšX¤¹–ámÛí³ÈÖ£0|mÛ;_·1eÄ@"ëË¸ù¥Vú|VV³„U<Žôè{S!9qL>o©ËDþ¨ÅïÐ>«¥GÄÐNZ£Ä
+³?&ý!_êÉú‰ÿ8jb´üÈ½ ˜ép#û§×ÀúdÃ×{Žñý?ÑèX`jkþ}¿_JÈv¾KÓ¾(¯KXù­r-Ë$·…IûÅN
+T’ëL%Y–„w®ÈH†¬èY‰ã*ÀöÌ\øí»N…â–•&Ÿ<±8Ü†àOJ¾ý³W’.T¥p§Ážº/¡ç-M’Þ«yIUØA_á™:,€nyßê|×ÚHË¨6áy|¶,¯-êF>$ÓÜW7,e¹. OHÙ;ü&–äº�Gí~êtË"c=í8%âAK¤’å…}²zÿ—F0ï?7.1?Î4¶s9<�²‚
+v~uËà@Î(Çb~E)’9d«¦Ä›Ôƒ_˜¦Ùh ³‡yù¡'Š I¥|IcúòW\› ElT='î¿Ž<E•¸DÀ†û,>Ëw,<f©�+½*„øR Sz
+ø×"	M·è†R¬j¥�à~ÎÛýž™g(âiaàK+2HÕç$d¡jø… Ûå�ñ¶PÖ¡ˆ­Wâ­>uë�	IkFÅ*ÉÅª	Þ›’>êãÄ‹-päY˜|NIs@+áZÝ°‚¼d:…h4+Ú”54§�|6¾!YÂµë¹®OE<Ú l´8.LÎB³�Q¸;ãrXÉh{ÓÛ“.'zlw®K)t¦Â±#
+¢òy}ª¼4®6ÂG'—Úª!SÔäLÈk3Ê;¾ÕQoEHñß*&Í¦9rWOµ§Š7
+ÚŒÕMm¶9òÇ•}¬ûË˜žròÍÂ^iÔ±\EoõHšB$!"L‰ØÑãVï”KO-ÿ�ÌEmöþµhüùçÉbž×¯V×Ó˜Æô™2|�R10ˆk:ÌÕ[}¨Ï%ù²O)jÖ•½´Z™°¹K‡µ»�Ÿ"
+#’
+’¬zÃ0óââhÅÚ“ÓK†�½ÿ¾†ó§ço”µ�æÏË>T¾ÒŒòÝ}{©´íK´!Ô
+â¼‰U­íÖ¸_”7eÊÍÛ²1úGËö¾xÔ.gÕ.gÕoeúÕÅÏ¸¹(.d[aLÊÇNœö®IKŠ1ûëC”��.YP2óB¬bž™¡_zí†p$R!Ú3”Ä¥³ö¾¿Õ?<¼ƒ{åøÛJÖ#ó
+ÂÛOuû¸þ§
+Ï¤¾ ˆ8fNÛ×çšÌº)‰Yü|ü= ”b.#o/ÚðkÏ8}sDÖl
+¿!æ¸o&ŽG2A¶æUV…|¬„¾ÔÌÌp”E:®Ðí£œb>ßæÄD–¼x5$ãµNõ%@'ðí¶'·˜ qñ_b²]AÑˆÓn>˜x
+dL�™}ª­›#)�zÐ¨Øþ¼„ñÌŠ˜O,�Ø„Ð6Ÿ$Kâ
+Š)”e€ >÷s‘•ñ}©�“XÁŠ.S¡¦õñùä82÷}î6¯$òH…l�ÛÞZ‚ªÒ/Ä*{Tøä<Ÿ‹p$&yËíEIyha‘Ðàqòq
+¾÷bÈ‰¾w³aëk:yR'¨ô"€WïÍž<r§a‚pÅ	Uú…‹õ—þp’ÄÁä/6Ý*ñ3kÒCSÜEk
+?äñÉU>‡ìV(~VR�ýgŸº/¶—€äIp·>¦ê(qgä“C"8"¤PÐd[j@4c×mÔºÔïóÅRë‹™xñ¿!×16
+¼ÏÍžV{»y
+CûÄRQ—©¯l×gÃÄÝ�7Bø/ó³É:�õÅ¶±mf_êÑú7ˆv?cP)àsÀ”e³¤íýÔGˆsªûß&Ýi“2µlxõ¨¡'®fÇéá!Ù¬ó¯�êc’é2�hÃè¯ðËq‰D)ì]L� �>?©-›F”š}H±#¯LÈ�d{Yüãó—êKfòíÄ•Æ›xÓ2!�ÄnÝÊÔCiÙ?Ô“ËåkÊ0ú‰=ê
+rèån�geóûR\|«x*
+‹ïà*2Ñ™´irÃj?jO*Þ©ÿx^”þ_íÃãø»�Ú¢|·wÐYIÿý¸øÁ�Á›¸ý­§•oÜÑlä?ìqñ‚|ÝÇíWPÔúþ�›nÜ:ãù€�6sÐý­Ÿ)ê§¦™p?Øcù��Êçî?j›yOS¶›qÿ�æC!¦ÍÜ~Õ/ðÝøM„Ã¾éL2ùlÝÇíSo.Þ®Íi(ÿc„jB›7qûTÏ—î�üzËÿ‡ó!–ÍÜ~Ö×Ë—�öm%?ìrqÕ�6nãö®ÿj-ÒÂsî¸5þ[7qûV·•u5Ù¬.7þìãù¨¯åówµþ¿ø«c0÷MñüÔWÀÍÜ~Õ¿áÛºïi0·‘–¤0”3Ç`ÚµtùPÚÍó(r?™kQÜ~E_ô† ”1~ìáüÈAŽ£¸üŠ!|¾ärÈ;P¡Tµ!ªQÔw‘D§—ÛjÂÕ>(ÿÁNVuAˆ†¤ô?"‰�Ë+Z½³p’Í8?4ÃÔ÷‘U_/Û†§ÕØõ[ø��æ‚˜êGCò(±¡A‡Z ;zd8'ße9\µAªQÔ÷‘_þ�Èg‰»0z9QÔxˆÔÄ†³,±>¨ð*Éå‹j�Ò”´µ §Ñ�–¦,gždW†~KŸÊñƒã1¶åÉJøá†ª4ÓLá·†Ò®O*[€(¬"„³mOÀäeª‹	êr�Æ3þ”®>V·\–J0%ƒ±&„šTÖƒ~ƒ"5PF=VY
+ñŸô¥{ùV'*Þ¼¼’±óäÖß-ŽªŽiuÆ~K?Â©Pyùàr3ÔÆÚ¥ªÉ£Ž?çDÚ)| ¬µÈ±×!ù˜±üæ_õ,éJ#ü ”és/°uk(Ðk–«)ÿ%�ý)EEäÚ•ã8^§ãC¿ÝˆÕßF™jrÿ©cÿJS|™'ÆWQ¸#¹üà9ÉèÓ-NOõ,éJcmäÉÜ©]RäPRƒ…?8<cÜÕ-NOõ,éJa’.d¨ý/sN[ÐGüTd†SWMFRžçÿ6;'úo‘M­É½’ò{†ˆÔT õTü"µðÁù™taë;xgý+õOþq2ÂM;ò®¤OKôž©ysMúj«×ÒË±ÈÈY}#Øø˜é%q¯Yé]"úl^ç&õñW¨ã]þX²ê‘ÆMìE±¥ÏS{€Z£iäéP?Z	Ú—0VZ8åCßk¦+­èZ=ôG5„ej¯\|0M±ÈlQy¿–>W’g¡-G&¥
+ýúe£n� ˆŠ|”åüžòŒ¤‡Ðí‰ìB�·Ý„DÚx~	lŸ‘ÞK”’Ú<º
+‡ôÉˆ€�+©@Mù	ä“»h°ò¥<>ìŒ -ºî—Kÿ8óä—Sþã+Ø)?«+¸$sÎ8y1‰ÊŸ Ã	€=é±Ü>It¿óŒ¾Q‘Hq'Ç–y¢ÇóGÉ)›þqkË`IXàOñÂ1Žò‘!üÑòAÐ«èÂ�È¤šuþÌ>ï)ãÍ$ßóŒèO¥q5¿ödNž¥�Ë_Â>H1ÿ8Òõ#ë3=ÏôÇÀ�yO�ýü”äÿœi›�ãs Þ›Ôä%„t´Œ€óˆù%³Î2]Ðñ¹s^åkü0x>ôñÇ¸|’[�ùÆ]L‚åªOuþÌ|&&qî$Š_ùÆÝn6`'­7S‡Ã(ã�pù ‡üãÎ¾„üjÄ¶#"q6q”;‡Éä7˜¢Jõ4¨ßïÁáòËŠÃäÜÿ“>eˆ!€Ÿ§!(Þ‚`z)yù?æÖffSvÁÃ$z;‚Mÿ*Í±±Àšï·LDdÎ>pùçò“Ìá
+tÂOŽ’kóGÈ%'òÃÌð»WJ�…Þ¿æ2B2¤Œ~A8²ü¼×¨¾¦“']ÇßÃ(ŸQGøGÈ2Eò^¯jš\Š:�#þ™Aã-°ÇŠ¾‘ò¿ðö¦¨Gèé¹¨pT™pbþhù=u¢jQ¹/`ãýh�4úAÉÉN<GøGÈ:ÓGº•�k�¦ñÓõ•Ê2`paþhùW•2ñF³�x¼jXÊ�d0`¯¢'Þj4ËtPZÂ>}�…)Oø‰Gåp2? ®šu»nÖ
+Å+ý250Ê:=9Üã�È*þ‹°zÓmßµLJ?†&[—LExpÿJ+Mm2Þž%þ™	y°ü–›ýN?éGêBÉ¥if¼ô«Wð&j}4Â#6³ôÇø#ò©&™¤"Qt‹mÏ_«Çý2@K«Yìí(ÿ'ïˆýI[iÚs3)Òíhx�Õ†¤�äý/ú”?Ò�Ô¢lô¨þ¥ÚšxB‡øaù?Kþ¥ô£õ#,¿EÇ*“¢ÚH Ð†·L˜É!Ð1=›¤?ä¡þ–?©êÚ^Pº’4“ËºcÈæ…d´…�ü2“™8²7£'fi/û¨¥©ô–|§äÞQ±ò~ŠÊe¬-Íá3.a¢]™¥ÿR‡úQúžÉiùwä	‘%ÿh5aSþã­ŽÿLg.MÉúa°Çô£õ&ò¯ü‰Ä¾IÐTñ*)¦ÚŠV›ÔGZŠm€B#¢a¡ÓÄß‡ô£õ2+-6Ñ,ôûH,mb'Òµ·�"�jjh¨ÜäÎî\#ŠŒDG�¤Ö5f|]pS`’¯ï*¹ï�2âÚÒÁ×+oE-)¾*…¸N%JV§b1UxYTo¿%l¥7*O½qBuŒ­H©Â‘iI²ÜÔw¯Ó…ªQV[~–'$¤‹Á@÷Ç‰xP†'=R½ñâ^tP‚(ôcâ1â^žÐx ®<KÂ†[EåGJÔõÇ‰xUßO· øIùœ�’ð¬}:"T¨âjœ<KÂ¤Út{øŸ�ð©
+1IïÇ‰xZkvS¾J2%ª4ãÒƒéÉq<%	6—! …�)�bbPß£1å$ûcÄÂTdÑ”°q�¨j0ìYUâÑa
+kn¤“^˜ìËu’hV†¥­”ýA]Òöòîœä�ª/Ñƒ€.ê?á]1�ÿF¯·ôÇ€"ÈYþÓ7¬!É#û1àÄT?Ád„‘�Fý?¦HDS#m§’tÀ"ÐÒ”þ™Œq‘tžF°bh‹A·†Vp†Á2 |…fßî”"˜<¾!Jî¿.l¤©ôÂ”õŒ�Â)|B†‡òÒÍzA_ý2ÂÄ(£ùogJ›XØö4Ó+8l2ÐC¿åÆž~´�—ú¸ø—Š£ÿ*ÖÏ§Ôã#Æ™€$g¥	?,ì÷ÿBŒý<Ÿ'å•Ÿü±'Ñ�€ÇAMùa`Trµ“L|¾:M?åFžÄÿ£}“·\‰Ó„Ö–IùQ§Õ�Õzüð~Y*W'å%ƒ±"ØÓÚ¸þY|Uü¢±XJ’:@ÇòËâ²M#òªÎÎå&âT©¯Zÿ”pÒííºFŠ–ÁT…<rÀ)®Rz…‡î E#q×,.Ñ®y* rè1djÇmèG†)D:x�‹!É*€Wz“¶Tßj…ÛjS|VÚ«1¦Ø­¶Ä©;Nø¡Ijê{
+âªG·SÓA*1±�+¾'uCò§Ïe¬O(({ãH´(J’1¥´BUXPvÆ–Ñ'âÜcKjl¦µí�-®�ŒŸØŒ#eµCMŽ6¶£$taÇÃ¦6¶á:ü[PíLmmŠxñ mß[T¨jÒ¿<VÕ„*v§¾…&·JôÆ•£njPd�¤1‡‰¦<EÑˆ5ñ´ HÇˆ­¨4G•zcÄPE®X˜œxŠ8B% ¨£<E!LZñq@h
+wñÃâ€¬ÖÁ¤©SñÄÌ”¬ôý»0qSú· GVê+„Lª¢À
+¯Åßç€È•UôÁZÒ›âšÿnÔüp­+„ýà¢”ØäJ)cÆ»ü�°-)Ò†¨½|0€´¡$4¡´ôÃAiE¡C_€o¹Øaä¥HÛBª~CúchCýF«W}‡ôÆÕci–ÒìP3�ÚÛ§†6¨•´�TŒ»SÈ|6È4!«¶§thp­B(NûtÁT R¿3Ož*Ú6Å�Tî)áŠU)½qd9%’GÃJeMÊjÎç|Ups^¸ª¸`Fçj¼M+ðøâ­3§bP¡·ØÓÛ
+~ÖõÅ„¹´vÛ+
+|Ux €qUë" §~¸«Uõ§jmLUÊ>-¶Û¨ÅWz„5w8ª®ÄƒßV_
+UZ€
+ŒUYT*º´;�U¤áU6&»bÄ©ð©5®(R5ÜSlU`ŒPŒUèÅUÒ%Š«…zb«‚¨ûñV›ˆb­0R â¨Ia-Á£'cñbª¬»â­0!Ewßå’
+¦Å‰§Eí…WP¹5ý•Ú™«€,7MW}ûmUY©¡L`t®H>ØŒ’V
+AMqU6�U~·ÅVˆ†ÄöÅ!”ã¶)^“¸ß"Uc7@*0*äøƒ1¨#¶,‚¤g•	Å(ŠšÓ¶,‡$°ÔˆŸ©¹J»B>y(Äª&AÈTû`"•SÖU 5FÅ«ì´¯ëÇjµ€”§]*Þ!æ¿Ïï)ùO]Ô<½¨XêÝi®æke‰““(p>9ô#¶bË=I›¶qáÌqÈŠ÷×{_ùÊ_Ë 
+Ëg¬'ùBüÏÉÃS
+ÝÇÿDXˆóòým'üåå™$ŸÒ¨µûFÕ
+?à%aøä¿3�¿îg.ÞÁ[~�Ö˜Cÿ9;ùXâ‚öýwÜµœ›Àòýy8ê1¿r1öÞ‹2Þ@ý(ñÿ9#ùHÔæ	âjt{;�ú�áññwýÌÿ•ð>?1úÕ?èb¿'ä ‹òín‡êˆãâã<ŠGlé‡9î#õ¢¢üþü¢røÖÔxÐ?òg‹ôÿ-é?�ö�ÖŽOÎïÊ¹2yÊÄqÜ™=XÅ?ÙÆ§ðÇÅ�{(öÖ‹¬ÀøÇõ£mÿ9,¦)ÇÎú0*?ÒU~þeOá�‹ôÿ,èÕúhþ´Õ?4.	§øóARÛ€×öêá¤! y3�ii§¼rF¼ä?Z./Ì/ J	�ÎúÔöÔmOâ$É2üöõH¦­�<šçáófŒäôá¨ZŸÃÔÀmœux¥Êq>âXüÍå©(SÌZkž€-Ì'ñ0Á»/Ìãþpù„zjúd«É5išÑ¸ûÃS$)àyJ?4bÞÛš�½8²0ûÃ<+âÇùÑù¢Að�ñ1 *Q8i�œOñGææ]ƒ:²òÙETü‰ÆŠx£üèüÖ‚Hà�?
+œh¯>DsA¹•Ì)ýpð•¢°ŽÖ´&µãAúñá’ØÚ	ø5îâ¤àHS�—Š=èIj[áâ~DŸøÔcÁ%â�z!"¨=ÍÿÖ˜ðIx£Þ‰)QU<¾@ŸÄWÍŸ¦”ÝB�ÌE@$×LYsòPpß/pTÿ²ðÈî\ªpõzÿžç”paZž††¸E¯‡>”°6bh;ãº<9ù.R(ËØá²ž	k¸
+€û uï�•á+QJ­8œ<ÑÁ.Ž¢¸ÒøsX@­FAŒ‚ðRZR›aä¼2*~ŸÅLl¯�CáÓ$$:¯
+sXêNÛŒ<pZ
+â7Ýkô×8'eHÅ¯}Æ<p]–ò<¶ùaKp­ðb{årŸJ²!]Ï,�–Q«¬ ¹ì1¶\!\E'JQ«²×¨ÆÓIH~«áÓ Ø¢O"kÓÛ4©>§{”^¡&¹	I^e­~a
+)�ð2+”
+ô"¿~båÍÃ³l%Â$|‹ó?ó+Î’ê^hó.±+’âîY-CÆ6á@
+{šòLÎÏ’ë¯œo©ÿt^O©y¦+KÉ-náäŒ(¬r(ÝÔ:�³àÙ‘�NHÝgÙúlDø²É|ý$U|G4øÒÇ«Ax±0øG$,;ü4ê2•káìñÎY¾qXžpÓù­ØnÀð4_ðàü¡ïlŽ�E—xä˜Ò1¿ìU_6Ù‡ä.î@#ìúOÖ1ü¡ïeü›¥ÿU?é‡êm|ß`kþ™p¢»ÿ£Ô~ã°AìüCè��xýK¿Åšs6¦È?Ê…”ÿÄÛ…4~B?Îûb°óNšÀ©Õ#
+‹«Š�q¾>×ù>ùJçþåEó-‡««ÙÐïN%ã\|)¯òqþv/ŸìW_2Û<u{-º(v_ø×ïa°¿µ³³ñ�ï?©x×án-õÛG¨ëêüYk�‰—ÏíGòv§ùøþgõ*�r#N2ÛüË*¯êÉ¹|þÖ2Ñê£°˜ÿ4šþÕAªÍ!eVö–à£v|\Ÿ‹GåµÏ?2Žmbá£–$ë"7âXããä‚ÄãÖCa3ó“—Z»Hø™{ü2àN>>Nï½­þyùÉkæ
+R LWW‰¿E•©ø0ÈËS�~
+kWÔå?Õâ#ûS+_9ùŠ		]WUAØ$ò�ó ~¹ÌäüZÖ«»?Ú�OÌ�9ÀÔ‡Í:ý¸­xÇwp ûÑd¹d5Y+ûWÅÖÃa,Ãã ‹ÿ•¿ù…(O<ù�+F¾¹‡&É~o'âÑù�wóó|äŽ_Ï?Ìt¡˜ZÚÐëƒøä†²c›8öž¯ÄÌÿ[ˆŸ½üäærßò°56¡¡w™žƒýšãùé~?µ?Ë:¯?·õ£¢ÿœ�üÒ‰‹/Ÿî¤Pv."?®<=/Çö¯òÎ«Ïíýh¸¿ç'?5DÊËçyT}‡ŠÝ…~l€ãùé~?µ–u^oëL“þr“óqX7ø¢·Ù{KGüJ×']óghuXö£öþ´î?ùË/Í(ÀS«éî|Ò2ƒ%ù�Ûiu]Çíýhøç.ÿ38·3¤\ñ?oêûºA‡ÇÈ‡´yÈõ_ÛúÑÐÎb~b€¢K
+Ôïû™—ðY±ñƒ/ôG—ÏíýhÈ¿ç1üì²RM@‘;°[•?ò$3†qö›,yþŸø¤{Îey“¬žVÒÝ@ûQ´ËôTÈr^8eþŠ2~/þ)üæN®ˆ’MäÛWØîÙw÷­qñÃ8ûM#Ïñö¦ÑÎeIÄüŠ¬ƒí¯ˆ5öýËŒ|pŸôH{ÿ4ÊÛþs#N™ÂOäyáE‹~�^Ÿì FpÝ�Újþ?Ù&‘ÿÎ`ùm–&—Ê±¬†ŠÑÝE'ëDÃã†èœ~?é$wý
+ï‘ˆæòþ²�ûE_øiþøá»´p�²4Ú/ùË_ËEêØëQïè@iÿ%ññÃ?ôC�¼}Ÿ­3_ùÊÊÙnzª)êÍj¦Ÿð°üqñ�m‡´ˆç÷~´T_ó“Ÿ”²�õ‹˜�s-¤¢ŸBŽ>(eü¿‹¿îýhÛoùÉÉÛ‡1¯›‘e¯Ø{K ~ÝœL%¹-‘í¬3Hû?ZjŸžÿ”Ò�ÎÖa�ì´s'üMõdªì¿•°ÿ8|ÇëL"üáü²”‚¾tÒ¨z�Wþ&TþÔ;ÙGµpw�˜ýhäüÌü¾˜��tb[ 7��øÛ‡{/å\ãæ?ZcœüŸ!¬~lÑ¤ [ûrHÃ`Î=©ƒ‡˜ù�ÖžAæn&-fÂz²ŽÝBZ……NÎÃ¡Äe8µØ¦jÇÙúÙ"Æc»€9PnÛsQ¿\Û²�‰–���”x
+`dÐŒ…+ÈîkZïŠ±ÑÔ³ò,Úw 4ðÇ¢-ƒy™Ù ZTôDË0-ó×œå+Ê^‹oÌOº©a_¤f³PIŸÁ9'áâŸ¸ýÏÌ¿0_ýsRV4i.®•©Ø™däÀû|Y~žñøÃÅí	ÊÏ3ËúÉ®•®ù"ÒÃ_ƒÌ©i.­s¨ñ†G†Wž8 â¨ce`‚¤½s2@ôz½6
+>XäÞVk—/ŽüØÜz)Õ¢¶·Ô£±°¼™½+«åhÒ4?v1úŒFôÙrPÅ"ëóö4ÌýîýAžhþNòY¿ŽëRüÉò¦µ¤ZZûJ·¹¾†êX¿–5žÊ?‹câ2ï@låÃÙÝ‡ ùb¦¥å'yŸP¸¹ò½¢hš<–þbÔã³`jvYfŽ5=»S+ÈO/½Ž_gÄF×øø%‘þS^Èëõ7yö yÜGmæ�)Ÿ€ûA­ÉšŸäå§ÀØ4áì)ÈïÄ—ö#5/ËÝU{k?Ë½E5«Ø÷Õí¯ol zR)£Vk¦B"dîÉËÍìücŒ§~ÿØ…OÉ/Ì¶Vô´{ŽÁ-õm:Mú‘ð]À§l²p�äv.ÇÊeFëãú“
+Oò¦ÒK;+/+ÞÝë¾s¯å…ú–ò
+ÈVYa¸Üe ä¾Cä\ì�„#ßãÉ&oÈïÎ�˜þ[y‰ÁRÆvRGP5u?~_Ã 9“«—ŸŠ·?Ô¡©~UkÚ~ŸkqýsW�ý¼©3þ’·�nVHÚ:WqÑ¾Œ¬JWô�““.ÆÊ#w/·õ$’~_ùæ LÞEóf‡‰}2åA`E@"2I¡ì)ï“œM]“‹üŸ©�"~ßÔÉ´Ê»ýCEÕõKÛÃ Ýé>«>“¨ZÌ“JªªÉÂª7!ºS1¸çHù9QìÌæW/·õ<ðéšçarŸÌ}Çö‘HË…Và:ùiµ@|üÙw“ü�ªùÆæú×MÔ-ôù4ø…Ã­ôæÕdŒW�F`¶Ù :7àÑjf,ßÛú˜ÄâæÂê{i®eŽH$h™D„¯%=˜R›Œ@Œ·!«&-V9pƒ!î%=ò¶�®y³Y¶Ð´{øÖúíˆˆOt°¡*
+@iT’JÐWÇ!!Ñ”1ê�9ÏæPÚ¼öƒ©]iZ•Ä¶÷ÖN#¸·Y•ø–PàEx°é\á=³Ë>3DÈŸ;kMŸWÔnã°¶ÕJOq"Ã´¿îéA¡$¯ÚaL•AŽÍe4?Jiæ;8ùFú=?[�í.g‚;˜UfŠd)(¨<Ã
+Ð‚
+Q�‡ŒóýN¦0m8ƒ*½Á)"kzÔŽ°‹ÇwvT
+d,MIê>@w®>/Å8xrgÉ*ãþ”²{Nó×–bÓ¥×´é´Èµ8ÞM6iR3¤Gãd£ÃÀŒ'#T2àŽð�û‹:æ¨æ¡â‘Ôô‘ê­:ý2CM¨˜“(FýÍjü•&Hê?v¿Ã´xå½Ÿ±¦Á+¸ÇŸr¹óô+%´A›ìN5ö4=2Cóøø7�DzF?%'óÏŠÖhþE¢‡¥?#GòÆY!-ä÷C¯][pŽ[hƒ‘Ë÷s9ü›%ùH÷”^>ï¹³æGknjÆµ¿ñ'åBQÃ†\ÿB¤^eá{y˜ž„NQÇò£Í|<Š^|ÈÃgŠä>f_¿ìà:QæÄéðK©û?ÄÈÔ.6ÛvFüJerÀGzþSMüé|Âªù‘9/ï.TÃ�?á@Æ8$y èôßÎ—Ì*‰Ñ€SswDÙk
+=>“C‡òóGä´ßÎ—Ì~¥Qæ„P»¸­wýÀþ„i¦Äè0Ÿ¦Rù�ÔŠ_6QÊõ…6â þpþZhþOÇüé|ÇêWO5©^-©PW¼dÿ£³d{>¶J÷Ëö;üN 0�Q�úºåÕWŽ°: ?Êôß±_üHÖÏû½BØ–,=D;ö!”„±Jö´ä.cþ›ö/O3ÈIu¹·&»ŸPõÿeˆÇ.ò×ÏÎO÷±ÿLR)|Ñq(â×Ä	—…æ[�fêGÓ’?é�êLaó$ßI-+JÐÌƒþ$Àäyb{?Wþ©ôÇõ2-3Ìž¤ö±ÝË�qw7	"HÈ¬ê€RÕ¢’i\�	G…—¦s²šMWÇ«Ó…í¤7÷‹§^=æ˜q¤jŒ¥}xSš«ŠûŠ|òØ‰,õY4Ó€‰&Èç}~]ÏÖß-ÝýBÑnú­Í…´�€ <¡N™‘­ßQìý°@Ýñ~`&îŸƒ·ZäÜð×ÇB»WTÅK<r)RivÞ›ãÑ›ó-Õ
+®Ýsm‘|µù¥«=ž‰æ•+[{)½:ÖœÈâ ïÜ¶kò�S�ÚáÓÌù¸¿6f»F×,bPYáE{ÑH¡ü33_5ìœ~&§$¿­÷‡”ë:Ãú÷œ]¤–F”¨äT4‡‘Ú¾'6˜1‰;
+%=Q=«í	f‰æ»Ií®4½bàÉèÍeËàhåP©Zu÷Í¬tÀ{™dà6Ý¯i÷ú,ª\èÉý^~\÷;ƒS_»qÇ“Oæ%“r9$úO˜á&Ýu:Í€·K@µæh)·|³òñf¾aªÁwa-×ÕîZ{8ÑžÎ\Ò”ZÓ­Æ›|XÆ5[¡tÏ1"Z¬q¬å¸úŒµ«Óß·\Œ´ñæq9¸Ù:¸³–Îq4rC%˜ˆË
+Ú"ãO‡ãµXÅNHÉ[¤ú˜ØG$·:Ý¾é4˜ÐF
+2�É§C\—åâ7qøÍî6d·º¾›4Oiyqè4_\<¡™MY~0õö#+8¢vlâ�7I~�ç¿0Åsm¨¶³tY\Ô	¤åBxó¯*’êI8*í‡$Hªf—_˜ß˜v7¥�æ˜c‚æ'h¦‹U½Pñ¸#b&Ú†½)ƒÀ¦Q�
+Ò¤_œzï™µkWÎÚÝÍÄú&–t½ÿ“™X*Ð;IËÔrYÉ%˜ýimÅ(˜HëÏÎÌù¤²™¼ñ¬Þ4ÑÒÚIn]¹ M9– Ž=$%ÍÃ–8ð�º¤ß›¾×,á±¾óEóÚXNA‡Õ3µ*Ä¨;»eŸÉð?�ØÛ§äÏíÿç!?7¬ì4ã™¡–Ó�£3iºdÄ,{Î[W½²¹ö|¯ÇÜÔpcÈI#îJµ�ùÈ/?ùªÝ4Í^îÚ!�D·6zu�¥Í@#k›X"”
+ë@Ýr#³b±˜ÓbØŸéßž~m¶Òmb“Fò®¿mú½½Þ§åí2êñ¸Ä“ÉªåT�ËdeÙÑ�Ø‰öfÞ£WðýH¯5~yé:¶Ÿ¤A£yBÑ<Óc¥j>l¿K­-ä¹ºoôY¬`·)ÆX�)åÅIÚ”¤“ãøþÆ¸i1à>‘÷1o'~pÝé@°Õ|™åß:%´Åcº×­çšâ%uA°ÜÃð‡ÂµÝŽ?Éãñý�™48µcŽUcnŸ¨÷²[ŸÏ-Ä^	¿$< º„ÍÊ&Õc1ó…ý ÊvñäáøþÇ
+:a—¤~>IW“?4z%Í�›ü±où™¤Û],ÚE½åýõ¯èÆ¹äcšÝÐ
+�lk×#='"z,zŸ¨oË§êe^cóå®¯åíÿAòtþQó—“Á­Ù-åÍìbŽ&‚â	.Y™ƒ3:²°PÝó.3Ÿ×vn<G„~�?&1u¥jöY\ÜX]5ž¬={ÿE„BÒzjðÈÝH4r¨Ê�&~Ê<ãËñä�^Ï5«zW´2ÆJ¼D0“Ô@=DT©Ú‡/€·9ƒE/±ŸQÕšf²´7il)+ý•$î Üa�§g‹²øãgñö"ÒÇÌ?déRO*-]aá#ôNæžùßäqøþÅV´×ÿŽ5Þà>‘5T
+ÓcÒ¹ Cv?ãðîºÌgŒº-âž¡¾®ý>t8xƒäÇà(Íq	Uºµš#ài�§Ññ†ÃvI�Ø‡œb„Ò�¸^„|ðˆÑ.Í#ñû—V†•âGmÎB@ÄÐgŸÇö4š­±çÌ0¨ýÝ(G/zƒ‘¹w/òqücCQ€€þÕë“‰—s!£0ÙWô�²¨¡wù}n]Éü´‘ºÖõ¬�2Ù®VÐ�Aì{ï°ùšdEYLty$v�—¸ú>Oó¥Äbko+Ý\C e‰y)¼Jû˜˜�9G²rÕø2ÿJR,ùKÍKñIå›èT§|UeÃ?MÈ|g£ØÚ‰‹Ž9ýSú�×žYó&�g&£©ysS²Óá’8¦Ô'´’;diY„kë>ÌdâBÐR äø¹8ù{/S�ø%ò?©'Š[_ˆÕZµ¡ é^ŸGC‘–*q—)ú¥(žë!6‚K~	Àñ'¸4ýYT±¸Ù4ÓåúdÑÀ�b¸��«$&¤vïóÈp€ãa1"wÍ¾–Òðw‘œ˜é—@–îRæMòÈÓ“ÚQ£ŒùÇô¿X?+ïþ±ù}ä¹©/£Ùôö‰FH¾›ÙSâÓCú£îñXó%w'µ‹tÁäkÖ�±fÁd¸·¶E•!$ºZT‚wÈ“Ñ‰¼Û_»\Ó�öæ6iS~8øßóÏQú¿•µ£Ès4PÓå4niô˜1—@ãwYÛ’ðôÒ­ýÅùñ5ð´Ô>´iXIÂ©öküsm��</cÇÃ3�æoô<®ú6º´–1!N@t4$fÓDHsô3àÉ":Èýá„ê±[r‚U/…š„µOSZõÍ¨�Åêá—Ž6i½CV»kEÓ§¹{«Fe*¬j(ßFFv~,j¨(É=�ÂÄJ%eqh>’rr=ès
+¢êâÖÉ­e/õ7ªú|�tÛ+Ž(�ì²á�3Í¹'±–°Æ…¥6>ŽXMlÈO‹jã¼ºµ³{i¤•-$Q�ª¨ÑOn½ò®Ý‰Æ#º£¾—4(�Ä¸_ˆ7"+ZÐ½pHÉ|[P_m¬_ØÚ5›LÂFFYA;å?†Ž¬xxÊ½œ¶�ŒÇ*ÆPIÌTîI4§zå†VÄ’WZj—0E
+±›Ô…ÑVAýÚï@§nø#±nŸÓHh­áô#—ë,r«¦äûÔm–LìÃ#dãO×.í"Žkx¶üÄ§UVjüês"Ë9Æ… má†h•–í}Ify%Pv�\¾¨s,1í²i¤ëO§@mç‰n¡äü#mÊ1ý¥ßl®ø‹#Š¹%1£ÉêJ.x)Ÿ�;ÐJo—ˆÐæÕÂIO|½®¦—Ö÷¶QÝÚ´ÆhEub(J–­Êeê<Ó,Dn	@¼wwrj²$"á�Xê¼Õ@P‘·L& _%}"úžÖîØM’«V$£"‘Z×¿"O¾@qVÌ«zÜ{‘×w:Xži¤¶º2M!–9BÔ"…Ã|œ¯vÊß›^_Ô-mF¥kw²A¨¼n€2ŸîªUO0GRk¶Xx�*k¾)qrèÊÏ˜¡6ƒOýqçm2IX‰P¤­`Ào˜Ù4¦|Ü-N‚‰\Œ¾ö=«Êÿó‘Zo•¸òËk7:\PG¢E4îövŠ²ÖÚÚ£vcÍªÄ¦ÃzãK³�íøû,1Ç€Y|ØßŸü«®ù“WóœìuMkôÅê_]ªH-:·©(.¼”^Uâé’ŽŽA è1“{ýŸ©&ÖüÝå}Bo«èmuå¿-+òO/¬>»(byƒ9`I­i^ÔÆZI—"xDVìûÈÞqÿœyòþŸæ[O7y>ÿÎW×²ÚËå»ë«ë›U±6é7¬Ò%£ÄX3Iëü0~N�ìeáCÍ,ƒÏ–TùFE?µ£¯ÆvÚ¿ïd¢»wÈ�Ïãö3Žg�ý‰œ~qü­pò›B:o¯êiOù£är~?±>.óö+MæŸÊ;«Yìî¼½¨Oô 1hÈý¤i4¶ üÉ	hó·éAÒâ—Sö$Ò7äô„ôívFá|Çbx�Ô…}!	ùWÓgÚ×.ÏÀzËìýL�Î~Rü“‡CÓgòæUÄúóÈ_WÓ5÷DŠ8J)TŠX-—“ò®çjSl˜â†ÓŽþç}�ŒI?gêx‹éÚŒjI–Ù�U¹-Ì$]ŠÖE$Pu¦7ìh–†»ÿÍ­ãG)¶øú(º·©÷þ÷,Ž\cêäÃòn}#Xdc²¸éðO~*äd¼l]Çì_É½ÃòÌºWå÷›¥ó7œ<�š¬tÛ)ËF¸™Ò«ª�ÎPˆÝžL¬~ìÂÕÔþ‹ªvzB‡ê}‡æ_ÎÿÌß4ýJ).|¯—ƒ è:5ÎŸ„)ö„kon«*…­)+šS¦—îîN¦\5²kž¯åÑ¾¥wå«cm,ÂK˜ìnRá€efvd4§ÃËç×-àœH¢9¤vº÷3[‹+?ù?'ÚîgXóŸ—5{íELQ-®�ow:…ÔÅ€‹�ª]	o´H!wÛi¢zºÞÐÅ9GiKçï~\y•të/0ë–ÚUé»Ò£½š=.õ”§­ÈxHPª‘ÍENÛ1§lÈËÄ=Ï3< ñno®è§•Le�Ö øå3Æq2i bM3îK[ÇSÖ•ûÆaÎ—œÏ
+Ìq{éÝ"JùÈÒrQÆËRP;í+øœ4åö ¸c?Õý/ÓÏÉK¦ŸòÏÉ’
+·
+:8«ÿ¾ø®L¿ì9“¥�Ãîi‚E‘7‡¶ï"UºŸS°ê0[e¼Õ¤VÜàlA\KÅ�òæÄóyV»-^bXµ5ï˜¹ù98ßÎBÝƒ ÙÛrÞëQôëÁcuo»�Ì?Þ�ÇWžö—%a#ËôÃW–Írº¤¢¼m-ªÿìœ'ë9¼�0ò}”=>ÿÐÁ^2"õ	URG
+üéú©™÷Tœ*gÞ‘jÚ\Kt]�I´b½Í|]�5ìôõ¢æÒÞFŠ+�†Ä;sbj@¦ã2<Jg�)žèàXØÈb3ºrGN$¥:¯Ë�¹˜òW4öo-j·zó——ï_DID7¡Œ´~£Ó€E‘ð;Sß:ÙrÎù!µ/)k¾[×:î�5œ7`¬2µ©
+$¡pJâêJ“_lxíqd¢§ú6}NÞoÑºmæ¨¶}cQ‘#‘ã‚ 9rrŠÃp
+2BtÝ›-ü•bò–»›™gòõûh �úJ8Y O>³ªÆ¿Ú¦´í’Ä7A]ÍförGëMw,ß
+Tƒ`>QQ±Ür€VPÃñÝ1cn•éŠ²mÕªØÃ(´úþk	´ïCëízóµRÝaTâKué‚è·Ï(ItûH�Äoñ-²°X‡Äß
+­FãP„U¶éßIl×¢Ùv»=ŒÚrÂš…ŒÒúcÐ·¶�–VfãNLÍÓâ­iâ;e;¶äÊU¬p¥ä1	øÚ#�]…ˆ«PTš�È”¶j†QlÓÌV¶�éË:ÞiHhi$†Iîy#)#b28·ožQL/L„Ëwon%•k0nAI?åqÉä•�”[7ÔìV¬e³µµ�Pñ¼ŠngØq 9�–[Ž@CÏ­®.Ö(ný%•ÿxäußµs0
+1˜¶ik`EõŸ­lcYX˜:·5ñ FIJ"ƒ™ŒB\ÞÙ”¿/¯¡Š[ï1Åetâ†/L·àiï\ÔeÍ’öý.pÃŒ�ìD¯åßå™,¯çÛT5ª‚@>ñ\Œuy£µµˆÁ‹ñH7ò’�ý8¼õaÀl	/B=þ—ç³÷·õ²ð1~)lŸ–>STiSÎÚl´"‹¸ëìA†?ŸÍÝ÷þ¶'OˆþÆü­Ð%ª¯›´”R�)Øõ8÷;ÓÏåîûÿZ?-�ñJoù;g;“›ôiÝ¾"ßYQR}Š�ødã®ËÝ÷þ¶2ÒãüR™ü›™J˜üÁ£’„ìKÈ‚â©ZÐvÃùì½ßëGå1þ)D~Lê’µ#Õ´ë‡ 
+ ¼‰¹)SF¥vÉ
+~Nï¿õ°:XtRÉ�1áÅ«Pncºˆ/Üçòw}ÿ­–ŠOÉ¿4ÐX¥¨xÏÿ�²C´f9�ÇÍœt±BËù;æÀh- 4XØoßíÒ¸”eÝøù§ò±PoÊo9Dj,&éñuø¶¦á\xa©õÆÏ»ö°–ÄÒ,<Ù…£Ó%·Ú¢
+°÷¡¡É+aþoØ?Zþ\Cùqæå×Aš6íð4¯ü?Ê%ü?`ýlN”%òyÍ±±y¬®Cx0¦ÞÞØ?;ƒù¿`Gåƒ­|­æKK»k¦µ¸H¢“ý •¨)PhONÙ›O¤ROO_«¼5kXÙÃ1R—âÛÐµ*7'l—…n<§ÑsqQáƒÔ˜¯ÁcS±¥<pp(ušTÚÆ
+ÅÄÏrjL¾£û<I*7¥h7 £l•É™"B‹Ð<»¡iëåÌMWê‘Isa¥[5œ¥+é±Ô-`OíPO�9\Žî«]€pØüsy
+33“×ùž½MOZ‘ÉÉçä=$3¨-àªM?XÌ9syÍL?z=ÿ¥õ&„OË¿$9§Ã¤�¾SÇÿ5dSÚÆ¡�áú_¥ó�s?*|¨9òáõ´¨ÿ&î`Ý’yìù½,~p}¡’IÈÉßÅÃjö¦ã"96ty¬AØvÅµ.¹zFÄ×a�’)åšë#ÇpÃ~¦¹¯Ï�¹Xƒà¯ùÈ[•hV|¨
+\K ïF*ÿ…ÊôÐñuyk²pÔGQÿùA˜¦•æijªöÐ-}îD‡ð�7÷§ŸÓËÀÀz÷ù†±'¦&¸�ä‰hª‹@¬å@ASÒ”©9•Æ	¢Ã‚CÕ»£4ÿ-k>lY-t=2ãR¸Häœ-´m<‹
+^R‘ÇS"…S½V˜HBtîôš|¹a¿éJü»¯Ûè6Úî™n–¯­F°Eª4&K›V·”JDjiÅš�Z¼‡Q×3�NB¹S›ƒ…q—zG«�6þf½Ò¶ðÄ!µ[IÁYd¤ui‚ñS R§Q„‘MòÇÜô¸üã¬Oi/’$²„iöÚ,G£·e¸It&ž0Q\1	ñ÷¯�g1A¾‹jŠÎþe³ÒSNòÎƒ¢¤cÊ×š‰½mUtÛè
+ÅÊ¢Œq„)ÇÕaÉª?eJ"=ëÀÈ<›ù—7’ßÒ¹Ò4ûk·ó$?âË{+{vŠK·,¤@+ÌÅ»ˆ#“°¥ƒêº·ÔtCå_/i«$Rùºî~/{y<ÈÒz» Vª(­wäk€BA€ƒ	—CT¸½¶¸Š{;ØØhÂ³9?dF<OZdÇ’eBµ¡±šâ'‚òÆäqÚ´?¼ô7®7?&#w«<z’[©/xª­¤°$28?²œ›•Oaã�H²1·¬h^`Ô¬¿-|Ë Ûj�Ï{«iOu¦0‘Lv�ÈžbDi'(©VíZŠd%Ä�
+zô¾oü¾½Ôµ¨Õt»[/.ê×WPy†ÃMˆÉwko§ßÅÄž³ª93Éoq¯æŸ!²’LEõeÃÄw|íæÙü¿æ¿2iQÙêJFŽ=GÌZ¥ªX¤·œÏw2ÙúÉ	Å-D“L¬GŽ;´Já*Oüùùo èRòíö�æÏ/É›%Î¥sÝÃI«ÒâDI-VT?	‡Ü˜ÆDAÈ˜ØoÑ„þ^èÚv¨úÑÔ]L¶–èúe„×ÑY¬ÌeâÊáÂ’ñÈæ‘¦#+Ív¶ZTöâTŽöÒ+‰-–î;á±`PMªŸ³Ð}ùNç½fd6<’k›€UJ4Æ‹M…{u®f”Œ`’ôAäÛ�+@‡ÌhfÙÈÂõ%™Z?Þ*ˆLk@A-Êµ'jtÈK9º æÇ;ÙasÝ\<ò7&äs]ëAZÓÞ¸F8�é·qÔ´/nkF•èwãÉ€û�F8÷’8�yU—m3SÜœ>{‡Éx�y^—·[ •êw¨cýr'OAòOï-=õÛÕDî¢¿äNÿMpxî^3ÞV‹»¥û$ŸòºŸ¼×$1Dt$x’\/¯TÔJè|ˆýDaðãÜ>KâÉyÕ/9i]œ
+$“O
+ÎŠ=Ãä¾,—®µ|§iÜ|�1ð£Ü¾,‘i®ê72-
+vcýrÓÀôO�%qæ]UOûÙ5Ö?×#ùXw/�%Eóf´§á¿œ²?×Ñã<ÇØÅ3·ó–´¡™õ‚ý½F¨Œ%‹ù£ä¤…íç=x­­xà�ÐÊÔ¯ß�äñ÷}�N¦G _›õ¶¢¶¡9Øþ²pþSwØó¸&Pù¿XŽX`}BF‚á€’v5 ¿€®U=,±³	g'fW·1Êé
+@¤‘¯REOã�É¦XÇ4X�?zÍö‘ASJI÷®90D¡^¥xíB<{×
+#…éW€?å÷æÜÈ¤µ®‰o"’Û÷!iµ2‹‹«•Bžõ™@­Ä€£ ÷íóÊå»ÎäO	¬1µéó�(šÔ“Æ›ê_)Äó~\y/“�Ë«¯ä¬–ä~¼¬†ÎÔÆ%Šù}Åú9ÿ8ã8—ò¿C@¡}	ïQ€ñ2ã†"ÃÙû:Á@ür£­Ù¾÷ädŽ	Ÿ>Ÿ,�6¼ÀFû$üð6%šœa-å4¥»ä&€}Tñ=qÊ[\¶Õ$Óî?Ó5™Ü£éüóüý»Ž4Ú[r?èºr+ØÈÌç%¥åñ|ûÚì÷8�!þùó�ÓÐæRµúÞ«¯ù¼¾îc6¸œ?Áb}ßrQ¡jÖú6©aªÏb·ðØÆÕÙ]Ý8­K£€ŠšƒQP(wÌ¨ã•”ã”½ y=;Êþ~¾ò†­©y�Êïƒæ-5&Ô,-gX²²ÏBQ¸HŠÍé©$©÷Ê2ãˆ˜Ýìû4˜â²:~€Ä>5?'ù³U°Õü§¦É¤ë:™—PóÖˆ„Gg¡z¢hÅ‚É"6AÁÜžA�|Ú`ˆ±îqsË�-�Æéåf¹ä?-è¾z_9ÙÞj·Ú�Œ#Ëv0 xúÄ}aËP­ÐŠuï�Ôã&BœÌQÛtg�µOË«É¼å¬þi,·‡ÔùGK€Fže�^U â ßjß|Ç!^æfKòÛþUÎ«ªy¯VüÒ¸60ÁcêùIF‘½k”%bW‘*(R;µwß„‘á¦_—Vÿ–þlÖüÝ©þfê	¢iÖ!X³‰™šâæÙV;{dp	E%š•$�ð™N;18ÒŸË?,yÎ~ró1ó®µþ
+òå¾˜÷š4“ÉÊâY ’‚3 »DÌÄ�ºÐNI#ÃF~[ùwË?˜¿˜šÚù�ÌŸà.[é&K-[R¸†	ä6W¶Š1$ôF‘Ágn4'Øa9%HðÕ¿/|©¡~l~cÝé—jO'è:N“+éZþ¯46ï7¡:¬cÖšE�åoXšÙ\NIÒøjß–>QoÌ?Î(4?.ë±ùnMOw›¯]	©3<7	$ôYœñŽÛôÀrN“á§þRÓüÁù­ÿ9y¤èþ`´»Öš6Qæ»TšÚïô4Ò–[^&&8�”©4Û­a,“¥ðÑz^�¯yóþroMÐlÛMó¯a}im1Ó ]*ÊûôbiCEiX½Uµo°ª+þ° â2…•„=tò¿ùÈfâóó{ÎWQGe¦J×Mism¥B–ÑB±‚Ø¬aAhTÝ¨2–ï™z_¥ÆÕÃ†OÕµ]SU‡KµÔ/dº·ÐíMž‘šˆ!.dâ¿ì˜�ürÜ@oïi3åîg•1[[j7×÷K©˜‹E%��½Ä3\ÈÅà[©g’"ˆ	ãäÞ †y€œbÒÏ=Í9óäš©v¹�×Ô?RŽÄÁh<Š)Ò¡Û�Þ½²Œ>±c½œâ
+õlˆ?½âµ¨P‚;Œ·€µF@Mö¹wu
+[¶šÌqç#Ä²t¨¯l�©ÍŒì1Ù.Ø1SC¹÷ë¾fÆ;1”šmÔ�ýðˆ°âlÞW®ß,<+ÄØ¼§F+�
+ñ/[ßÇ…x›7hwN<+núÒÿ1Ç….úØþc�
+»ë�yœxUP]P}¼xUxºûXðª¢ÝæÇ…¨.Ã9P
+öÇ…x—ýl~.¦¸ð¯¨¾ð#lxW‰´ÔOÉWÈ’ÓÅV¼”|ÁÊ3@•wè”ú'åœ-Œ:#
+XxÁ´¶$YxÐs4èX¿ÕÈ[åÉóî§ÙO=´ÒÃ�Hbvb[âCBÛ¸Ëqòh#gaûå
+Çìñ5x�±,ÛC‘“Éÿ˜È	âú:‰•­Û°¨ù®FN³éx]©‹€«±5©;×|¦O?—é,Æ V‡Zñ¯üÊdó™ÅŸ‹ê¯)|_•¾Q”S÷WºÂ×é¶9L™v¦Øaðû‹ôþq†_Sòè-kèê—‹ò©W#þ%O]ìÙ½(÷þ€ú’Ø
+FOQ_Ãï¶ÕÈ6uy“³ŠžD
+í�±&Öd"Ñþ#B(NFCkeŠ"S£Üñ?0·7§“€>æþ¹©Îwn�¯ˆ—ö?58o£¸óÆ¸WâH^(=G——ÜÕÌ��Åó.Ý>>¯Ã—!Ýýb!¨\´M%JÔËuu'Ð%Ç6¸¢d8„/ÙH/ë7ÞSÖôÿ3éÉl÷Táâ†ê4š9G#TxÜ`@§Ó¶Z©–Ÿ'G&{ ~`éº�ç™õO:y[ËºÔš»I:E¡èÄÅ©-Æ8¨%B¸m²À%1¹ù½nƒSÅŽ¨~|ß¬ê¶Úî©u©È‰¥½ÅÌ�ŸkV>GÓ
+y”l3cgpï·V5%xè…YQ
+)BUI" Ð’+Û¥ràL�—,[/FôÐ�‚D£Œ ]ùq  TW¾[2åc³,‡É^sú¬qùG\ú”ÑÄñ]¥…ËÇ"”ûJÈ¥7jl{}ù@ËE6€—Ëþe·-ëèš…¬¯A;Ëi)§äÔR†€FÄuÉx¢ù$2F’Ü£­I"`*&¨ÀŠ©*F[é®Jª¯"
+òz“V<�NÄúŠ×µ26;•¨žŽ­ÉÄŸ,Xò<»–ûUÜŽ½ðØîUtqâýpÅh«Cãð­*{}lw]Ðq
+Q@*Bö$mA^¦™G¢¢#š[wYí%ki¢±<_	U”ŽAHt?®FX£ ŽFÒ
+l3¥ÅãžrÉ7Äí¹f $Ÿ äñÇ€Pqu'�›ñïá÷aˆÞœ)_–üÏq¢£iË§[êP]^AsÏ%Ä
+ÄaãY£–Ú{v¨IH/J�ò:Œ Ç™mÓæ$ÑO<õaoª­Íý�´‘�/EmÛBŒ-XpŠ;rd—�P)W˜¹ïâq4Ó8ý;Q?;0cÈ‰4#~»7³h*­×õOm®ôöÐï¬d·	©¬¢âÎìmû°•[ä#çß(«•¹x¤@c^±mÉ¯�=ÁÜ»2ÀÌ›h½zÓ(X\ÀýU®`öF*¹\ÄFžç^"–ŸÜ“þ¯L²‚=hao¼á„ì¬ øjc`küÃúddHä­ý]j*Y6éZÿ�U	bâ>lÕ’¡`ZŽ1µÝxù™}ŽøAZ-W‰¨s÷(á+Á
+¹–‡Â‡!zÒ´õ…>G+¨�Ô‡÷â€ÕöìJ�¾üªdÅ¥Ûj÷züšáw‚6vôÕ\ª�:W±Üf¾q‰,Ì‰f÷pgõHiÜ©w YÀ± õùef r`¾ø¥yG¨<9¥@=€Áº^ƒå×2yKó
+A¡:8?c—I‘¿ZŒiÃÕ‹‹Â-þ'ŸSSQÇ|ªAÐe’ÌmÜ4qT×ì�øa”Mçu;oæú‡Ê'þAG—”=
+êšº¨'µ-ŽQ%í!Å§‰>_q~€Î,Ë_!êÈ§Ÿ¡­Ü=êÐÛ±ÿ‰c³Ô{3#ùjóý}_nÿdTtíÛ	zØòGr+âk\�'‰æÒ=E<2
+ìc^�Bµ÷®U�Ðeƒûß‡éxw™®
+$ �æGú¬k2-£ÓÆ|‹òãÏ·ßZó˜nvoVúá«î¨>Y›¥‹åzéñk�¼ÿº/3×dãm¡@Ûp´i(<e‘�ÿˆŒÙcr³ò	“rˆÀÌiÈÈ……EWsúòèýMQ“k'ÚÜéºÎ­%É¶×d¹Óô8­ãI§„DÓHêwž=€©å·Ù9	Î¦ôýœ‡øòyMÖ—yg¬_i²DÏq¥É$w‹JÄaa©ØS•;ÚÂ`Ä[w‡#4è1@Ü£Ûß
+ƒÉØã�w©~TùRÇÌÞcyµ‰hš
+³ê:¥¯¬#’å"eákâ†v Tƒ°Û# idûÁõ/[È,âÖ`‚;%»[kª:ãW»…ãr�@`Œ/±=úbQ´%âj#I¾.ë”úˆ²Õît†:­ÄÁ¦‰Þ4òÝ²ÂDb8õž*6¯Î]BöûR¼½Ô5Þ}BöwšúâVæÍ+žNkR>Ñ=3&�+'òŸ�õ�8[ÞM§ÞÙÙ¬Gij×�"ýföt‘áµ„GŽl±1«•]©Ê¤dA¥Lo?*|Ói–&X–{ß4ˆßOÒ„weŠeæ²;˜}
+*�Xz»W~4j<J¶_ËO0ó8[�1¥ò�ÌöúÄ&úth\D9²Y$!R„¾ÛcÄ©Oš|›­ù>â}V;wúÈ‘a–Òæ+„çêí`"½«ÐŒx•�«©¡@YXTûP¯õ9dÊFÉ>°¬Ê¡kÄ\ÈBžô“­ÔN’ˆÓ~¤ï‚è¸>%¬tetmê›¥
+> ­ã†R°ÙŽ\&ÓmCÌþ`Ôô»}RÖonô»SÊ
+:IÝ¡}’Pš;W)Ž>nL³q.à³T‚]¶w>;íô»�jj‰²¦Ê@ ˆ*vÜØŠ}8
+­Ë‰ ½,­å‰™%paQÈ2ÐSØcâ2âRšÚÕ);Ÿ®HIx�ÍŽ2ž›ÔS|<KÄåHÅIÔõ¦Ù8•â^ñúm´ëOIx‘15Á"8&Y‰*6ýx�‘%dý"ÍÂ5) *�~‘¸Êe*O´‹«G7ÕžÓrP¸nÃßä�R7Wq’³F±²—YD²­79.0É#_Á'£sd°ÌÀ7¥!àÔaQ±Â
+¯
+În­™ìã`ã’ñ`Û—Ëã
+qÏ$Æ‰`Äöâ¸	^0ªÂ`9>�*PÐÕvûðq/Q76àÓêÌ<Iñû±âbM¹§µ4ýÙ÷§êé×$*[¬3ÝÁ¦OªáxÓpwû°JÈdBÄ‚(à…#<BŽžûæ�´ª˜ÃºžO	Z¨àhw§ZÔd„U¨„¶óJÓL“z†¢£  ¥7Û
+½Ëò¿æ±&Žà84ø•”ÓñÈ�âjþ—ˆÄfYh•;u­~œ¦Nƒ/ÒYLQ¬QÃÆ´'}ëÐ¯‡Ï1æóš®_ÓÞPQ'ån€Š�¥MsS‡^þ#(’uÿâñø}Å÷·üâ¡?á1§«W]iÈ#·;{pGá‚/KìÏø·ÇôEõµ¯À7?&¿«ødž¾<‘õ?j»àê£“Í™Á=SnCóŒ Ølv59FSf¼—áŸ÷<+Í—1Ã’¦‘Á+1'§ÂÄ~+šÌ“1�7j½¥1Ìƒ÷?)<ÅróKw3®÷3Í&Þ,Ìÿ¬æ×¨‡Ê²Ç‹VeçúXŸ™¤öÒ6Ö�-?Ö¡¯ÒÙ›�ÍÏTõÍÈ�(•ÇÂXUyw�ëJm™¡¹j‰6y=ÉþbÅ¢_Ýù[_Ñ4Ý<ÌbdÔî,{y8/ï"—xMœÅ+ß ÈdŒ	»zmIF5_�’Aå½WÊzžuj÷O–]^-l°Þ<Î÷	3˜Þ6v5(*ÌIÜ��Èd@Ïê€ü»òryËÌ°é7ROŸo·:¬öŠUŠÁ¤JÕ–!jM*{ôÍ‡	Œl7ø…éšpò¿š§°óo˜¼½¨i^a>_‘4õN7;Á'1UXyTŽþÈcÍ9` zù‡ÍždÔ¼·mù¹æ)-´ímfþy´˜%â«f—«�¯O3é®ãj+”¤:/Y­iß™Zžƒ§¦£ç‹%Ò|Ûk¦ZÁ0±·Vi5t’D�¤@xÆI~}6Æ3‘Ü†$SÈ¦üœÖÒÇÌ÷qjRÃå>i©ˆÖfQs"k˜T� Þ˜2Jž£‚«C—xÒîeú–?1|‹u”ô¸4«­__·—W‚+¨®M.æÎÞN7	$ðÇ’8åuç}÷*8ÂÌ•�ÙþjùÒþë@Òt;/ÒnÂÐ,q‰5{qb_­I"09Cé,F~µÆ•�Þ/æ5î­æ©4>kÕÖlüÓ«ÝYÜÚúh°´ÖpÛH&á2ªPBœüDWTæd~uó€Ñõkí[+HmfžÚµ¨]ˆdIµ–DgV�DR)	Áh­I$´Uâ×–7ZeÏÔï-ÚÖá£G0“ºÇ/Œ‘ABPƒO|»&C}’›¥õ"R	b&”“Æ D3˜ˆtºÙT¨~9²ÝòßPÔì×Q½˜iVRÔÄò��ÿÕN¤f»6¸ÄÐ¤`Ò‰‹6Ö©ùq,1—Óï~¸Ê*Ñ¼f2iØW#‹\IÞ¿ùi^iqc42Im$L“‡¨EhHjTü×60Ê%p§Å	p‡¬yGò¯Ný¾{üÅ¿ýäÑ!M62Ãëw¬çˆ0¥Ê(I¦aäÔÈ€²ì0`Y¶1ù›ùeuä‹»+«IŽ«å-yV.ë±o‘X£SpÁAÌ�&¦Y"Eo»táÈi®ùÈžT²Ð­uHõ‘ªkZE®¨òÄñ4`\@  UNÄý9�
+Nyå”hP¾þöÎ5¹?cÍü×ä–Ó!Òµ]0Ëw¢ù„SHšPúŠxº8mµfaÔHØ�‰h—Dì¥¨ùJòãÅaæ�u´½jEInlR �%^mãMé–œ²?Hn¡[’�ê~T¼ÓµM:ÄJ'µÕÊ6•{J’?b£pIS¶dC)³Í¦B<tÉ>¯§I¥ê7šlÄ´–³´NiO³Pj>Œ”3qDÅTÔ|¿{§ÞØØ„3]^CÑ$`òå?ØP>�ñ†~ }ìÌh€Ïm¼«©#¶Ÿ/š´ØuNœì=EzW‡0¦µé˜óÈOFßW6."¹Óµ…‚ýM­Ä)ë™	¨n•©¨À.šÍŽMjzoÔ¾·Ô­Yæœ·.D
+ÎÅö#jaèVDîï8úÒÞÛ^M¨Új’É
+E<ÐL	µê8ŽÄeÚsctæ…²>ßfTVŸENeŠh¤Ê.ve–JôR½²º‰XN@uGÇq}Ïk‰KC·/Â£*â�µñË¢¤³jGïé]¸º%OÜ2G‡£l' 7C%Çuïcfw�VÚE]Á©ÜS£”’ë6
+pŸU¸x§�T³H7«0RÛÐŒ¦b69 ŽO|¶òµ“ˆc‡ó2)å
+yqˆ�ÀŸÃ5³Ï;äx1È-5Áwyoþ+¶²ú´€G5ÒL±Í]ª®�ÈS»�=òg?¦Ï6®´�ù¿Ë~ò†�g­]êvWºEùC¡i<wžu#âŽ l§zäôùNm“0€³i¯å¿™o¡³ó•¾µ«Z¬WšÒZÛšÜ+¢…÷­K%^Î«QœOaÉŽFÅœÇ'á$SçØf<�.c@†UMB¨U¨¯z²õÊd-Ðë#@{ßJùÉü·Ó¨P®¹¨
+¼Pæ4öGhŠÓGá÷ÝóŠ�ÇEóE½ES‰ê:‘$1ŠŸƒ#³¿ö^dà¯?ÑØÍUV'~ã·ŽMìL¸h&¦Ýº`êÛ[<ÔrXîr†ææy¨TuíCó9FO«à˜�ß9þdß}SA×îT…6ú|î½iÉQÈÍVoïãªöŒ«N}ß ¿.õ—%aŒ9?âO]ØøÛ7˜Ä>eVb|ÏÞÆ|Å?©­_§(ÊDjF�à37\œØÌˆß-ézæ¥f|Ãvöº9jÞ¤`ú“Sì¢2×ˆvÛqÓ%–¬;}‚ãgñËÉèiÖVosåŸ8h&ØÉ¢,ô€ƒÒ©¡c%»³‘_ˆ³|iLÆÇM;ˆéøÅµx¬õo5HÚÛS±¾K[èí‘ã·˜4nñËN”ejm¶ÔÍž\5m¸ù%–ºåæ™$¿P»¹³YÔG#@Ük1"«S¨ä¡é›#F4ØË´»¯6ùÚñ<·kw.£>»©%Û¥Ãì÷	EžidäBÄ�‹1è»ôÌCQ4Î<“i¼Ùç+y›Ì‰~,äÖî´Í]îì­æªDž�Fh¡GuØÕIÐ,”äüÑól�ØZË|’Ûéº�ž«mn`ŒF., [h PF´ ¥w=wÃá†æ­§~hù�NÑõ=.Ý-žKùo§:›£ˆ_RP—f>±ÖUZÈÄuZ6øølSóùÍ{u«Yëz�–´›»‹î¾­1¢\^€·7-À`Ò*à7*€’Hà¥a¶žzÔ`ý¦Ýò¼ò¾Ÿz·qùMæaˆ²4‹z äÀü€=zQáVtŸœh.µ‹Èô7+sÿ–•o
+:ê;I,‘ÈX€+R~íEX
+©¶<*�ÿ•£å«›K+�õ,FßÚ^]¸¦¹†;˜#·6öRÉ	uBØz¦B	ØÓlxUæþmÖ“Ì>hÕu¨ {Xnä�-íeø™"…(ÕˆØ�‘¯L Òn‘~AÐ ó/š<­¥¹­¾©©Æ“‘Zo7Ä)ôæ&¦ÈÙÐê�Jóý/Ñ]wò†XïR�ÓEKxÉ&À(í½Nù¦œO2í0�ÆüÇå8íVHäŒm¿ÓÒ¿†bñ˜—,€CäÏÌ][ÞZM•æ²¬…w'€ªš
+Ú;æãI�Ë÷þ‡S©dïÒúSÏÞmò÷�¼¡ù=¤jŸ—º7œ�Ç“¬¯Ò}EKnhŠÖ6ûd1#Ä×	ÝÂ!„þnë6÷ä7‘5}ËVžP´¾ó%Â[è–%Uô!‘I^J”Ë}»e¸á’»Åý®F3±â=¯ù�ù?¤y¯Ì^WÒÏ�týÌù{M¶‡D¹ˆ¼Ž±+²±pÁW�zSÛ1tù¤3Ënÿ½£ ‰ä^Iæÿ/éVúï•+ôï^gòš^
+JúDô½YÚ?X*FGÙ^5
+Þ´í—bÊfd¤Z/€ÓÅÿç"ìþ¥ùÁæÛ~méÚ­˜WaÆ¤XÛ®à�‡ {Øâ�¦ÉH�Å?/´»Ùÿ1<‡cw«-Î©bÐ	½OŠ&–¥“šª²õ¡dòJài«"{½cÏzOä·øÏÌ‘jÚ¯™4ý^=Nhµ!
+µ¼�‰™È`•!‚ƒÒ å8‰ámÉ/PK¿5æ‡É?š^Z¿³·Žî-3IÓå† ™—ƒ
+¥~&N£éÛLO½¶rÜ{”“Ê“þq×amÏ·~\Ôu›€öú]Õ›¼v÷R~&áJü"M�÷8ÈŽmÜ[<³Ì–Zç–<Õ«ù{Îl[V²™"¹žRd©8H¦„”upËí—Ð—'$ä9)
+-P@è¬
+}–
+ñŽë^¾L¢àTâR}KE%%¸Š"M½`ªZ‰P¤ÑCPU†õÉã•läbÎrnRk[C!
+ˆJ®ÔüûÓÇ2%=“š\!é^Pò5ïšõ[mÐõ‰{‰¸šG`´•õèÌ,¹h88ærIìñù6ßKQŽ�¶É…YncW™ÈfbÂ›ž”¬ž ‚î1á¡eˆêº¬Î!º³ŽÝÝˆúÄJ‡±4ü2ìZ¢Zò�ÑåzžšmÞheâLLB¸èGb3g‚\N •¤þL~_éw¹×íõ/0Øy}ôÍ>âöÚ]BæX§xZè,—Š]Ôµ=²:¹J<»�†œÆBËè$þGG¬™®,µ»:ÆI+oI"ž@$¨
++¾ç|çóg˜.ÃÄÅ¹c,óå½½Œ[ê¼Ísk(¨±˜	ü.b‚9€;n²žCÆ”£»åÃ#Ì}�|Ôü¯ùy¥Î!þlL¾Sk/3Ëk ÝiLò=Ìmº¶‚é iÃº‘$ÒUK›øíô1<øèâë#‹òÞÆÚÔÄí1“ëŸYŠuŠ$0Ù\ÊI,�±þ;[Ôº!}éÅ·"±6Å¨»÷è+Zß*“¯ÎËã�”�ä�ZûšÿªN“[È{ÿ[èŸ!IÏòÖÔ:F½8¨ÿ‹b�—ÝÇlÄÈÇ´ÿÅ£ðû‹î¯ùÅ"�oæøÉâkGz4sýè0C“»ö[û¯�è‹ì˜W`®Ûþ¬›ÙÏ˜EÓá> ì0uo<¾<�ôÊ^mæf¤ Wü÷ÌlÆ·lÆ/”ÿ9¯„>MóK=¿ üdu�¿9€ ';.lO‡	»ôæýì¾¥Í¢0?n:Óç_á›Ý<}/žéãë‘ó,'Sº{­SQ¸ –v ›m¶gB!Ùb70íÎú�›F¨ÞŠ3È¬J�·© òß2ôÓÕ`ôÄŸj×²Mok+Gër•î"¾’@ì(8ñ¨ÛáéL†(+mÉ-ž'ev&›QŒ?<ÌÒŠŠ1ý�3>P¸ñ4À¦À¡gezz›´j*öÃH¶ÐÐ<™æ­Ëv>`µÔôk»ö×-–ÈßZÜ¥´ñ[³4HÏ€, qsJ•ØSzãN@–\”¼ûæ}7Íºå¶¥¦iSi¦+(-oŒ÷	s$í”Y™Ò8ÅxSµ~�ÎY‡‹+ÄÁ”:’hA=ÃPwSêX³P�©Zd¬¢ƒt xÐlOS�´’pj,¦¼· ö4# «Ì¨
+UEçaZ�ïO|‰-NU$Ó›9BÛò§oö°n´Ñ:Ç·&ä¬ÌRµ:ïøä$
+¢\™7“õ»�,Þèzí’±ŸHºŠè¢õ`’ó#*™ïy­FaßÒý‰òïæ’¼ñå+M{I»Žyd…EÝžÂH¥
+£)=Ek˜y`ÙÛC ˜w>uüÇ¾ÓRGusm»4‰ÅTTõjæ§&	91ÉCwÁ¾|Ö-õ}ac³“�¶ž+)Ù¤byŠWjfÇGBæêµÙbrÓô”§Î¾}×¼ïú¼ÁsËùcJ·Ñ´~ªˆímjPCRjjOá›ph”’Ý[ó\Ô|•åß Ì–£BòÍåÅþ˜#„,¾¥Ï.|ßz�ÈÓa™xã;<é»QŽ<&þNÔ?1üÁù�©Iç
+n+kMM?GFñ¢¥¤H"!C3Tê[¯¶ku>,„Ç¯»½ÇË©„7L·_ó¾©ç"·ú´Eªù{Ë:Ì'ZD+qpÉ§Üz/pÀŠ²1h½r!Œ_=ÍôêÃº36oññc/ÿ9¡ë©¢Üþ`þTèþtó�·4\Oõiæ[v")@vÌñƒs?0ìá©Ç]XF¡ùÇ«ëŸ™šæ»e
+Åž�q±òõ»z0Cgb°BÞ*XššõÉG¨ÙâÂGˆ<ÿÍZÔžeó^·æO¨›&Öõ;�A´àÜDFyLªž ëð�²qÇÂ)�&Ùÿ›ÿ7·ù“¢~aèZCZþ…µ²´ŠÂü¥×«¬B)•�P(ÛûûáŒ8"@S�’ÎÎÿó�‹«'›G�<Á·µä:TS'èï­7ÅöHžô©è7ÊxdK‘’ò¯2ùÌù÷UóœüÅ¢ÙÝëzÅô+ŽfOªGolÈ‘§	»Uµè2Ð86r j5A&Š±i-Í”–¶¶ž¯Áh@u�%gjEêK#ñ Tà$™`Œ™?—u‹ÿÞh²GdðjÐýOR™yÛ¼°³Å+F³Q£F¬bŒT€	äETäHØ‰Ùê¿˜ß“þCò�å·“<ëå‹Û‹Ù<×,Ä’0ƒÒo­G<)‘$‚X$·Õb	«/ÂËJüYN6´Tvüseÿó‰ö7ß˜¢fÚ÷YÒî ±-ðs�(”ñ
+ZÑcl«(“�¡�}ÿ©öOæOå­œ]Åò@‚uQ%BÓ¶àŽÛƒšÌ°zXÈ¾óD0,“Æ¡Jò¥î0bÅÉ"^æFº`8�éŠ�S¶n´Ò§S)ž&Eo+¼‘4è¡ŠGda!R‘žAOí8Ú¹•9ñ äÈò}ùqa©/—ßÐYLÖ736¥l¬Q�3Ñ[v^|ˆØ-Oˆ™¥í"vhÏƒPG¦þ×¦#ÍñÆ–óA×Y;"Ü%s)ýß(ýE'q¹@ûÆS;Nj¡*•ý©ßüäG’üíåmòj:ÛIo{¨yfãS°³•I�¬oog¹¶õ	^¨<Ù#zæëNrB4û]œŒø}O—xr�KÍfãQ¤+TWªµ:T·zä·êáñžI”MV22ñäßg°ØtÊd\\ñ’ÝBÊ7Ú l¦EÐö†Ñwþ·Ñ¾AþY3ò!àó½ˆ{nF¿Jæ&B�pâÒDŸ/¸¾ÛÿœT“ŒÞx€ÏéiÎ	ù\ŒqòvžËä#yþˆ¾Û·*6‰è4þcÝH]"�=@{`êÜy|pÍÜöÊ^Wæ{•7$Ù}ç1u±š“âïÏ›â¾PÕ"V§Ö¯c‹ï!Ïü@f/©×vÜ¿t}ß ¾¸$ênH�õB×7š~O£ÜŸy`a™îj“#5IìIÌø;,QýàüuNtë¸í®d–y'·
+)ÎÝ¨O±�Ã2€°õr?QÔc»€µ¬÷ÛÚ[š‰Àø*NÃˆ]·ÁîÏ''�i¶·Ú•ôVv(óÝ^Î°ÁñPÆF¢Ñ‰ó.R…8Ñ4Ÿy‹Ë>cò¶¼þ[ÔmÝuh�#h•Ô¯9iÀT7zä1e%º2kÌz/›<£¬~„Õ­¦µÕZ(Ù,Ã‡$J*•¡¦ç9FP>ôÊKuý;ÍYÔÃ[°¹Ó®ÜHfQÏÓ.Ë uAÇÀ‰cÄ©®§˜ôIâM_O¸Òžâž¦B!2©Üƒ•ã˜7ï^45úyƒJ[s¨ÙÜY}v/ZÐÜÄÑ‰ÓâRA¨ÜdøÂñ!î.õ[Eµ–æ&†¥@î¬«"P1*x° ä£0¼KÞÿP‚(§š:ZÎCpÊëƒ· |@ÃÆ¼K?K\ªÆæ8È�•ä�™yvìÏ ¼J±ëò(iZÌ@²ØñØŽ�k�…âFYù„»úMlœªµ
+rèAcÒ‡#")Œ§µ3‡�D#„JSáØNõ'03oÉãûNÆK�Êca©êš}Á}3R¸°˜€yA# ú@4ü2˜mÍpêçŒmW_ó¶D:ž³u~+O«»±±¦2á¹ÐÔeÔúcúRû]YÕom´Ý:Áåº¼NÙ
+#E¦ä´¯DE­]‡Ï 5œœ}�ª;È‘ýLâßòb}Nïô>™çï+Þù‘Ï4šèI,ÜYŒ1Üª³‡u˜¯ù]FJ:È‡.—š<ÁùÔ‘Mùw£ùq‘ÿ1<ÐšeÂ×—•´(ÓUÔET5'q$Vð‚_QÈþJR·cÔFr»mü´¡´¢OÁšysRü¸¶ÒÜ/’õíK2Åú[VWgz
+ÉÆÚÖÖ€íµ[ýcÛX`eÍÄÔáô’q§ä¯©y‚]OÊ÷¶Öqi7	{&“ÆaÃÑ`‚æÞdb=JîÿFf�Ü]>!üÃÏ¹ä3ù#ËšòúÞEóR^ßË!Qå=f§ßšmKiKmpÄƒð‡IìÆv®Â&ÍÏ Ð~O9½°ºÓnn,uy-.í\ÅqÀU\}¤ “O¹O¶]�,b)¢X¥=À¯…!Bš0Ø
+©&µð?Gl³ˆK“QKç™Tš�ú‚((|E2`ômÆ-BÔ‹ËØb zrž2ž"¤xT‚iòÉð€æc‹Ðô¬y~úÚúÊè·—‘´ºEš&ª²Q‘–„Q�¿¾ceGfúzyó®¡n³[C¤h3ÚÎâI"ý<·ý¥*@ß 9WV/sæ¥ÓšygCšâRŠ"–ÞWä9ÕcJÒ•#öH9kL¯Ìßšþyó‡“¼±ù}¬êV‹åO'M<þ\Ò ´Š!j×/$²qeš¯3š±'Äœ²0­ËN\|b�ºzÇ—Å¯œtKõ°¿ò³[_[Ü‡q)–yø|;´«{xuÆDKŸÅ�Wãw×ÿ9Y¥ù»Až×ÌŠtŸ05¸[—Ufµ™Ê
+ºÙjM(kÓ0ràâäæáÕP¢ùYó=‡¯$éu­ÌÈé¼…xü/@í"
+ÅOO³^ý(ŽœÄ§.£‰Ú7’ôÇÑ¤ó·æ©s ùjþF�DŽÒ÷Ú¤›TÙÃ#"@A.Æ†´¦fâ�
+Q…›I®4ßÈIˆ	æ/9Å1~Q¤šV›p§�rE¼sÐ¾d‰p›o‰”d{�µnÓÏöÚÇ�EÖ›¯éÒÀš5ÿè¸lg1Çm|šÌzÿÒ¬9š’w¥ç{OR8ÿoC¦ˆ�Ü?Lÿ-'õÝ~?ñ§ç]•¿˜§ÔnÅ¾»å+½1töšÖë‰[Ë;¸$ŒÃ2^q4¯íe55É³6Ÿ7C—’uÿ9Yå:~z6�¢ÙÜ-ž‡å«³‡Y–¸º»T˜×qB¾¤Gƒ£¢’+Ðñ(ëˆ�Öêõ8,lüÂóä¦•åË—·×ÿ34�P/ ô5
+3W·]lZ3Èt¡¡&¸?4g»ª:BuæÏ$j¾MÔm ½š
+BÃP�gÑ5«&2Ú_BÕøàr’‚
+± q#q’·S€€†‰"�ÆœM8Ÿ¥MiüFýñ/9Ú¨|[è¿Ëùc�òÆä·/˜âPI£Z8êÌ\‹¬�ø~î_bÎ,Ü#krDø}K+&úc’eƒáÇÉÏödz~?©÷m±I›š};ÿ±îÏD].¿N­çô<ÆGøwèEFS!A±ãþb�™©¿üN`æ‘-¸`%-ßÎC\´}6ÜTýkR8öEÞŸAÊpFäèý ÉÃŽoˆ®5ÍÜ¥Iô �ñöZ…ü3uŽ&5\žGG@æÀ
++Ó�^â­ö·¥FÃ®lb#[ÝŽ9T­�Éùoæx¼»'™D½­U+q“$�¹
+NUO³×ïÇ,ÄÄHÙÞàÔñÆÏM˜—·­ÝÜéZQžUº�ËÄ€G³HîEh±�É�†eF
+§= N½Óµ.KHÑgˆ‰må�–EFAZ–§Z×l™1Éé'£Q&öMµ»�2kú†›æ
+Um]âim®$�TÈ–ì8»
+tš7ôÊÎ.LNÅœL•<ïmç‹Ë�'Ížn·¹�µØÿÜ§r¢(îã·n*cd?Z²ÈáðãÃßº'9†ó.¥¬y Øù‡R�hÏ§…ÜK7ÓûlâŠÕÈÆ$J;ÎÚÇ›üÞž_Ö<Àg¹XíŸ¥Ê¨G©LK•!Z¾�j}ŽáŒ Hïêž/U2ŸÌ�5ÞùÏËžQšæÀÇs¡ ´Šh§¦/Ý…GTe5‹�ñå•âÞífhÒ·æg˜WÍ>Iò'ú1¶}ÔÚÛOƒ!‚8Änf‰Tq�°î?EœÅR'Ï^e¼ó/å�’´ÙtvÓÓÊQ¯Õ.›ÒS$rDÉ#ñ¥X—O
+Ç]ñÛkÍzí†¥ù9ä�éßP¹òü�à™a‰
+Â³¹a+/Æ~�¥´
+Ï˜tÿÊ'Ê«£Çg¬iSíµX­ù½ÙY²HåTqâþ=²Ã.¥dh':Uï”/ÿ(.|´t+oñ”³jY[g–i#îÌ‡�ÔR£®bK,ø¶iÉ#á™Ž±€G2¸P¨hª(áï¶Y½<ÖRsH™}ˆô—�"ô­{åf6ÆT!A5ÑîJ]Ä@äÄÖ´0õ4õ^Ìé£)	WãÒõ{«‰.`)1‚ZñŽEYy
+Å6>5I€æúhá \#Ë¹=6óé÷ÑÁÂ)$‰ZkÑI#¹íß*„Ì…µœP?Â>H+Ø YDMRð×ìõØV¤má“Óä;›êÄ`ÅÖ ûÀjÚÖ9
+[Åm!bxªÒ›xõ?N²26Ia=ó„~AN[[^3G-ª:H­ñ‘È2ŸUð8ÈÕÙÙ®=�‚< >Cõ([ySI¹F•4¸‚G» ƒîTì~ìœ˜ÚÙ�üùÔ‰ÖtXu´³MJ&¾ô#X-ogfy4Ff$�µÛÃ§L¿ºWCñö¸™»#÷ª÷Pýš<Õ§®‘¬ÞØÛÖXmÞ€�¸Sý¹ÐirÊAã{KpÎ£øæÁ.z°&¤lM(>ŒØÅ¹páºÖöØÿ–PÃ)r#³ÐØ-Ôƒ±P7ØõÊ„©™UôØ©!ØæŒ=°ø…T£´A"ÊKJõ i
+Hùl0n¶™•d+ûÂ
+Û¥b–Þ¢ºvº¿—~dÕmìg¸²Š6!<¤4SM4„¨�…��í”§YˆLß“Ã>»^G•wÛâ&†›�zîzfD`)ÔœrVÊå&¿²YØI¸„°z·Ùc¾çÀ‘N™Æ…·Ã;½?óš}C]üßó6‹¦�­­Ž­>™¡ZéÇkiŒ‚ÏHÐŠÖ€~81›çc�e?—vÐØù‹Oòßåö›˜<Ý©\Ejþr¼·´Sr+ÇLŠ~b1¨ihXÓfƒ«Ô@ž®ÓI„HYï~¿þ]~^h?”:Ph�éïÌ=S�Ç˜üå¨»]Ìf;4h÷ØR”ë\æ$ªw/±Ùøc`¤ú•ÄÎ·^<—–’iYž�êC
+ìÃÃ31aãK<§¹EiÚÕÍ¢�õQØVUåC^Bƒ§�iÓ/`žë¿—_—Ÿ]ŸCón—ic¯Ü	†®±,rz‡e%€¯%ê)¶ûƒ†
+9»ß˜ïå˜¿.<ÕæŸÉ=ÚÉ¨yZ]/YÖ|£tÀ+ÚÞXYIq¶òSáõ=$Zqaû ï—Å×j1‰@’ù"Æ•âçQN¤ž¤ÿžÙkÇv•p�úß@ùƒþWêPÆüTù’Ì=i_ŽÚjÓþf.F½iG‡û’úËþqzA™üÃûRéQ;u”ÿ8ã-þÎOjóýO¼-žHÖ'b0=÷þ9y>�Ð'U<yWá;ƒß*¶×•M àä‚¹\ù6¼g]�™nS¸9¯Êä`|%ÿ9yûß.Ú†.æqíDP^GMõ<§´,×ã«ã‹©‚E©³8^qú@‘ZÔÓ·¶n¸ˆQÙØ£8›ïýL¯UòÏ—ôï!
+uÞ-Iã_F·52š}ŸDmOÇ1´óÌrU¿7£Ç ‡
+þ>ç—K}®6‹•!‘tIe7ÆÅ3Ì\ÍwP^Ã7€Y¾àäaÓ@lõ_ËO.Éo k^oÓäºÓ¯á²½²º¹CÛ½½Ì9ad)Z”�Ôƒášüùdf™-$·�Æo®í½"4øÙÂ"�«ZQ¾ÿ<ØãÆAó§‚#“Ðÿ-ô{o1]ÞÁ©_Ë³´6–Ò*ˆ£‘ÁeÕ½ó]®ÔåÇ/HûÛ#Ä¼Õaw¬ö?Y¹Ô4Íå¶ÒŒ³´ñG9b¨¬J¨5¯Â\ÍÒj'—3çøïjË-hZ=Žµu›y¯Zè66JßR{¸'žiXÕA…Y–…«Éªù“ÄÔE&ºõ‡æWú7åÆ©Æ¨¶W$ycGXÚ[w{ÞzöÕŒ#	Õ«íÛåû³øèÑÅûÁîý)çž¼µù“åÝF�ÍžP¿Ó´
+2E‘.ï,‚(»’�ÔNßÓ(øP9N>lS–^ Äõ½{V‡Ëšo•¸Ã—<¶Ú´Šª¦Wš0ÜÔ ½kJÓ'ˆó>l²Ï—¹e÷˜u
+[ÊçD]Ðiö×ÜC¨GI<kJ¦6‘Ý‚Æï3HÕ_µÒƒl�5x‰mÆ½$Ú|úoÔí‹ÞCkoÄIVT€±!´ø�øˆvDÃª<MÙe¿™­`òwèCå›i'ÔT,:üÏ;Ïkolåž(ÖFV$´l}öÈóLç²g£~`
+2ïËÒi1êšKÛÏ�žB“@^ÖâÒ9C ‘LÜÙ?i”qã½SŒ
+ÚŽaà‘æ~æ»H‘ñf—�Y¬Ê«µZŠB7Êü@êá‹ŠÊ.…mÚåƒôÚJQÄ‚íE£â¦LLIóM<»"Ízˆy!¡½�ä
+î;m”jÈ·¶ö_
+_ãé{–�§I,rÎc…+^¤�þç3ä¸—¼É[Wr>xîf¸ŠíIž¥hÃb¤vjå¥é,—º|óÌg–TºŽ(£l†<µcÍZ�$ÒÊ]Ì¡ÿd-;å¼v®ýywë\ªp�Ô¹¯@;‰Ë[*c¥/¨¶–ñ²E†f¯^½2Œ�'pª—¤C4Ð5$*íEzTwtñ—%ô—…yÿD°Ô´C\¶‰¢Ö|­k`}™4ûÄ‘b�½cš>.kO�s²ÐmŽOŸöÏ÷¿ŽòùÒá
+ü0+³+u¿ãÓÛ6à‚6p#È"ô'R·�œ®MÑzXgä¼NGˆ#­r²Èª¿4rÖ›1÷ÀªÑ²ìJŠV Ö˜ª¿�ªg¿ÂAüvÅ^æ|íwåOÈÏ2[h÷‘A«êWö¶7‘µ‚ÂþÖXän'¨b¤
+wL L­ªutøûÖ»•â�m\0æ¦ˆÄÓ•PhG^»/zæ\OÝ®X4ÿQÒo<»æX´{éQ§�ídçrSÊ$Ð¸$·«R›V‡q�É+‚qã¿Îž`k_8yÓR…¿ÒüÁ«jÅ?R°4¬X/‡0hO_
+ex¾’æcÆWÎihþfÔ<áu½Ö“oéèå¾/EŸbÉ^„™ÏvœÏã«°Ã"ý×¬|ËªÚÚM¤C“%–u–v‹“Pñ%¸8ø›¨Ê´xª6Zç+Ù^i|Ë%œ_ZþŽXe)?Õ§?aWpÌêOl·ˆM5H½)ïM®¡µé±oOê,‰$Ü‡>D? }š
+xøâ¬ƒË�®[‡}I„3C3‹…cêG	5F�ƒNf�@,œXd·ùûåí+Ïÿ•ºoæsÙ¯é¿.i½•ôà„rgÓg·‹'g¯Ï.&aû³øèþ~¢
+�'#W@P¯P#ðŸ|³£Ãöœ	�ùß­íþE<¿,õj(þ$°«oq˜¹u°?“÷%õWüã5Üã­QWÑž*iTšw÷Á�·ÙÁUïýO¿¬Ü1ø·VÅ)M¶Ì™r} MGØ+SÄm”6¼vêdŠ)ˆp@\¦S-�âúíÈ+pÊH4cÓolÁÔå`Óóûþrçþv}:Ø½D:Çâ=WzÿÄFKA3gñÉâý£<9(~7/“µ	io1â™Ê¸ö½Ç¶Ôàé1ðáãÝþ‹bäó5�´\‰T�•“Jã\Ùá„zïô%’>¯Ç$
+¦½¨[…�¥icu£#Ð¶X»œ‘
+ÙGÉæMZ[híbšhl§s·WeWeµ€vöÌS£ˆ—VÓ�‘Vƒ¶ÖuT[xäo«´$|"½røƒ)è)Œ@QM¨Ý¼ -RÜÇê”n5<_m·¦G.!Å¸&\të-BþÐ¬l}{gãÍZ§°ÎY,|¶n‹ÇlïG}ôÓ›H+¢¨Œ€ÎÕ	¥J±ÈN"!‰ˆ<Óo=j„yWòê%º#YÒÛQÿIâ+x¤¶ú´BM�îˆL“µMk•ÀñØ<œ,¾œ ïÒÏüÃùù‡æ!ižt¸m`ùnU†g²»¾0[ÆÃŠÏ"zÇˆcRIr;mší>¢'4±ƒÊþús%§Œ‡&Þ!{'+=
+á¾;öy­DíGO«@ÜBŽ**ËSRlÍŽA+ïpçÎt932~JyëÊÚŸ˜µ6ò×DÖdÒîÞ)"[°üJ•„•$|Tßm²±­‰4Ù“K(ÆÞkåý^mF
+-ôûˆ/.nxg›ÊZ‰hh¡ž¡h[bz€mÉž¡aÄÃ	ÎtCÑ¿4?*ü×ùW?—4ß4Ù¥„÷¶BæØCuor$V••Ô4È½h¦´ ÕYU��6YLÙoÔiåI‘"ôõqªM¡/˜¬´úGQÓ¤vUE‰ŒÂ@cqR”ª‚iQ¸#l·&I]5ÃIÇí:·üÈÓô�çè¬´hôÍ7Íú|––¶Ñ'ªc‘¤Œ¢‰d.Ê»Ð×ß+ð	Ü6ãÒFkgš™í ü°¸ÒÓ\�^¶º´¸±X–vH,¢–`Æá`Œ –nJ@f«P
+’8Ó)É‚ÇÞœø£�#�þ‡žévºuµåm-ÚÄI¡;“BO–DÄáNÿÙz˜¹~>—³é—å´’*:Bœ	ý®µüsA<rÆDÚu-Ô)Ñ»¨žt¢ìjrÆb)�•Úq¤Ç/ÂÑ1i&=ÆÞ9YÃE"×Æðj7Í0Ž8Ø÷!ºh†[›6†ÞåU$ýÜŒM>¾ß~W8ËŠÒ»A¦N~­vhHåNµ“ŒÈŠ!4…·¸•î»³ª’GëËñF¤×’À,Òæ-GÎ^`Ò.ýS_òî«§ÈŽ¬ÊÒÇÝÁ@¬>/ZþŠçI¥<l{øï/›¦J
+Yº;r »æÆ2 àŽžäÇBˆ-Ý¬† ¸�Ÿö Sm¶,ÑZ²ˆ�«ò9È¢^Oƒ�ÚbkS�QprØƒ°©¥1gØD£¥@`Õè­‹)Þm»Xô
+F9'G*Î**Ý•”;9dF×ÕªPVŸù{Aòûþ^MæÉõ·˜í¬®¤Žê+•HÞXäâ²<f6&Š|}ú�š¼ÚÌž'
+üy»éa,|Väº�˜.|Éæk¯1ê\nuWQ7š…À¨C<’s$.ÜV§ì�€ØPftÁŒ>×_Ž;‘æ�ó´1'˜å²$h"BÒ-~Ü„ÈÄÁS#é.l`}¿ÿ8�ªA¤Iq§–áÿVh5âòoøÜ¹xO ûß¤ýíŒ	a¨Ýiì²Ç/IÂ0rŠ�+ï�Ç:�8’'‰Z÷Jiíâ<¦¹)*“Û±¤PþÐ=FÔÁðòeÍ,M;R�gšÂÓZ6†Ý™–q¹<™Ëµ@ðÉYZFèpj–‚Òêy#‘	e½€¹‘f‘‹Ãz÷ÉD°Éô¾Š¹˜·üã_ž¿J/§ÄÓ,QÈ*iéÔ÷
+3&‡ ôóºò“$µ`Ì«¹‚§z¿-§�Ö@Jâ{íî>A`?+õê
+¼>dÓH'ÁíîFÿvbä
+Zˆ‰éøO!úŸNÎ3·/ÌA$5c MÓo³4~¼Ž6žÁ5*î—ê~…Y¡ƒ§sôæD¹=ýìª7mB2†ÛÙóÍô’˜eøê¼wÌi9Q‹Êµ‰ÛËFâˆiïSü3P=
+øö/ÎÏ›Ö›Ï�ÇÍmíaŠ§¨4-ÿfGfGñòxoh%Åš¼ÿI|Ý,rÞ´6�f¹šˆñ4sm))Ña3¨wþÅo9yGRÐ¬¬å¸á">í"H®z­vÜ
+:=`”éÞþXà:Kr¥‹%hB†¡k7ÒÉ@‰¶Qq j1izEð·?VU‘Þe5Pá¡ÿ�Ílu‘3¦ùb [Š	¤âNÄ±#Ã3£!Ä“�E>²Ñn¯¬ –ÖÖ[©~·WX”’¿­³SªŒ%»tq’—gŠd†â7ˆŠê!¨1ôe‘ÔÇ%ÌÃ…’hw1é�u¨HæÐ'hÄ:¾ÇÆƒQÄ6i”©<üÇX%¶ü»xV0uÝ^ò ©iï®T±ãœ£1h¸ßV@ßGù¢SÊŸ”³M&•±¼´´ÒƒC/­âYbhÍW‚°÷ÎgAŽc["yYÿtŒöƒå«x¢i¼¿êK$1ˆ„¬ñÆdf�HÄ¤h
+|Nõ;0§\ßå€�‘÷‡R%ñ}	ù£æ
+F?'!}~ÿRº–­¥k›™&Š ¸H¹K(FP@<Hùw:ìD§ÍØfÌx9>i°ÖµkKÛ;›;Û˜ïá‘ÞÞî9dgG q`Õ${÷èj6Í¶£Ç
+øº¬eârüZ{¯ùšâHõ+[ùŽ·=õ�¼6Z•ì’\Mes,Î°	zÉN# &”ÊtDWãÉÊÕå—sÒü×}åõÔ,ìØE¥Åv¼@ø+^”êþÇ3>#iÓÎã»½ºäª!›áä¤SªÐ’)Û¿†_ŒNGdÞWŽ`n.ý_FÖÙ99!v,è¬FÝHlÅ×B6çN6¢$h2Øõ=9h"¿8‘Z€I$TÔž•ÍWåä
+—/²³þT×ã§»¹‘[^\ÆC|è‡ŸMˆ¿x#iÄ÷QÐ‰ÿ5S¬]«—7Õ5ûG¨>Ûä&ŸÏÇ¿ñóW>dÔ
+Ú÷šûšWç�–‹ñø†¾=ÿ�šèüÁ|>™=G.¾Ø?$?ØŸÏÇ¿ñóD/™5%$	ÀÇaá×+–‹Çêd5ñïü|Õ˜ï�Ñ$=yTŸã„ii?Ÿ�ãæŠ³×§
+dŒ•jŽUØ`ðja—çbb¥�ùKë?™Ö³Û ™à‹Pº¡<Tk)î*ö"2Ï78‹í\‚y~?¤¼2á=G jwfŸ£2¢âUW¹4Òã]:‡÷�ÄŽÔéü2M‘d‘ÆÊÿØ�B>X"�„VP
+8Ó©À©šqRÀö¶C’ˆno¹ ¡éãÅ±c%¾a�ë:&­r23é�ððŠ+·�š×~”ÄK£	l-—éÝ’þPjÚMÇ”®ßW´°–ðj‘\€[]I/8øhäˆÚ¹­É�÷Àùþ—;KÇ_ŽOÒbçªÙBµe’ê(¥ˆoQ€Û—`k›Lã÷wåú(}GÞÌ|ánÚýW’^Á"�âÖÒÉQîsO+9£“Ø'|Ø4Ý^Í¢’‹(
+§¥Yw#ñÌ
+f)Úa:ÙúŸå_7éeÒ-¡mU,®#§¬ñÊÔ¨ä�Ã1(õz£IÔ´]COÏ©spñµ¤é%$ON†ŠÕ¦ÿ,D)€SM-ÞÊâÝu?F}7õ%�?.¥+Mûä¸R™i·:þž4ÙRTJ­d’™e
+ å°‰Zòr{ç?™ôÍÊZOåÄI;5­Üz´Š@õ/&±¸”øƒÆ8›ðúrq´dþìþ:?ŸgaêOF
+U5ê:eÏ!ªú‹Ý¼�¿ågš‘¶?âM†wŠèÅÈÑ“û£øèúKþq®Cÿ+:QQI4{ˆÈö
+Æƒ!m…õŸë~§è¼<ˆV‡¡ÛlÈ—'¾<‚kÈp?¥7ùå
+¿Âù¢ún=[b3EØD<ËW¸QìXSñÇ1óKjnŒFçÉù£ùÁwõ¯:yŽAN+2Æ)à¨gvt@øèùÿm›ÔWŸé/7-e=…Â*»[È$HÈ¨'ßîÌécA·+M�á”HîÓ¯;yûXóD6v—¶I
+�’«+B¡a_´7®ÔÇI¡ÇŽ\V}-QÎ||šý¬¢he´J3XŠtðß6Ù#ÅŒx·¶Uyù�¾X>W¶Ò’‚ÔÝü^¥k]�*~�ÏŒeÅfÿM§9"¨$6þb²0ÇöcŸ¦Ê¢Ÿ®»æ|qÊ¶qú³(yïIòÍÒ,úsÝ[$SÐ¡<ƒLª£•6Ø§†kõZ)e6mÈ„élzÎ‘æ›Ï*è|WDV¼•/õ	þ Mì¼kã°¥A�Ž9à�­Ë’”¤;ž�çßÈ‹½É>hótwÿZÑü¥æ4tºIXn$¸‡’âYWv=7^ÑÍ)ðÊ"¾?­¯.�vòÿÌ…¸ŠçËZd‘ª5—–´Ø¹=)ÊxEÐ �ÿtÍŸü^NdÙ¯æO/êPM$jW7z…‚["”K³Lœƒr<ÈbØ€3(Ç!˜æ[›“(0aþ^½[ÝgKŽ×K¥Ú²¥”Ð»—NÒeáCû¦ø¶"»ä²Â�«ßwO(ßÅëš^~ó›¬?Ã°ê—Ú½¥¬±zösY�pD=pUb.XGJ2ž¤æ&ž».~YƒŒù;YŸËÞcÒµfŽÖ[IÑ®ÑeŒ Ý‘•ÇìÖ†£¨9²Ô’;÷8ºQ=Þ…ùÍù¥}ù•qåˆ§´Ò¬´/ZIiQÂ²Íq%ZIåôÐ7#Ë�+@m]Í|bnß«˜±°xD¶
+,Þ­¬2\EEP8–+¶Üˆ æwŠ1ú{÷a‚Û¨%Ô¯¦ÜƒÃç–
+÷
+cI¥ž¡5®ŸqÂDWaQ�,@eaðü×(Ë)	ä	ðªýORw4Ùˆ$n5©e`)O™Á9Š£M6%+;35Í~ÚW–µÍ>)míui<ax„º²¬nn~$zõÊ0ˆD‘n_‹CbÂ›XšN­Ä�”AÍx“VëZý9š1Ä†±žD góùuú¼Œª£�Æ½}ñc[²– Ç‘eGéýV–ÄýbU–8=. žR†e?hmD9T£Ôur[í_W²�œŠbpÔ1ºÐÐ€zTøãQ˜²ÎÓ×ñö£´½nKÁ2Ü]GÈ¡£W<ywÄéàÝX=SËÝvËKú°¶»úõÓ�Ò5�žüƒ‡)––Þé:á�ü|Ù•n
+¯–üÿç‹ÈÈShž]Ñf'‚íL~ýÔõ"t—�µtíPmŒÙÁË8ä—/šâÚ£Ó¨Ü¸�è9¶Í—@Ä$‹¶¸ŽÖm:æV)Á(�ˆìe‘†Jƒ1]¤Ö,ÌaVq#wØÔBÊ*-RÑÅEÂÓ¢ïCQ×®D˜„ð”bê¶¼j&˜R¤‚¿�®<Pd,É©Y„?é—'±=ÅÜ�+Ï›$w´ºÑõ¨Gª{}@I§®�ƒ¾S”ðKnæŒÓ£C’\Úžº4Û‹Q®]ÃgsZ=ŠF='‚5#2�µMiã˜ä‚m8óJ"˜^›ap|Ç¤J€›O­ÂGÄIUä§jÖ›×22fâÅEa3ÇL‡V¸cs¬éò@Ì`ÔnfÒç¨å�…`?àkôå9Xs8¨ÒA¦ê’hz’8åõY\e4ôØR>}òà#!êæÏ,x#¹îvRÞë¢+ÿ/kmc©�	¶iY š��f>ç12ðC);ò:y·I“ÑÕÆ¡k*ì$'
+¼jÏ1¸D·l”k’yaçÍ[Q¸ô¡Ôµ&2l¢<�QÐP•Û+”i¬’©åŸ4ëº�JûZ»Ò¦Ž@Ðús;Ü;°Xù ûådE
+ÙM�æÅÿœ|ùämY%^#[ÔõK™X¹iL¹‚8ØM@ÿ²ÌŒaÂÔäà�>;Š6¬å|=èûeÄSÊjä8žÿù~~Xy¹ÒÇ®è²(?»»ë˜™|²ýÑüt}ÿ8æœ4íW‘M6à7Ì…oá•ÄîâvOÞ‘ý/Ò¤©À<˜�ŽÕ9•Ì>ŠÄ&üO§Ì.Ô©ùMnÛÑòf¢fô�ŽÇ0dçÅç:Ë2¢^„šý f6nM†Uî~e~bJ%ó7˜dþU%<GêÍ–ƒéüy>sÚ³âÕé/*»½Œu �ôœØã{�˜ðpÿT!.cõczŽ!»µ~Y(J‹,:¦?6‡lÁe´qÕwú)™±É³Ÿ
+FÈS§$ÔyýrÛ"¦À—eù�º=$Ürg¼HÊš˜ÐáüÇÁœs‚#±{f‘¤•T¢„5åóÈäôS©8ÒtÝFðz–@4È@¸AØ±®1(Ñl†ª$[ÕâÒ¼âtÅÓüÃ¨M£ùÖãë÷Vâá%ˆJFÍ>¡id=)û#s^™‰ùp
+†Œú E0¿7ëñù�^¹Ôà·k[uŽÖÚÆ)v1YÀ�E]€©T¨;åÿÂëÄ‰6È|Á Yi^SÒnítqR\y•n=BnY9Â!$Šâzwë•Žm§!"’¯ I¥[ùŽÁµÒodXú–ºBò¹¸rÀGZ�„±øÂÐñî2YdS†2%íÖÓhúUü~dó-Ç˜ígÔ&¿¸�¢¶ÚYÆl¡™b”Ê©Añ�W‘ Þ™¬å³´ ˆîùËU{‹¿0^ê·6Ó]Å{},ó·£éz‘™[—À¤Ò¾ç6D?Î.#ûÏÇ{Ô1uï*k¾R²»ò×”#òúG¨ñ¸¹¬QÈHUb¥[©'10Lø”[õ’þYyÿÊz•õ½'Sƒë:Íäž¥ŒŽ±”¡•AûGö�wðÌ­F)Jq#¸7c�EâÚµŒÍpbF
+øÙE “Ö€o™¸n#v2FXh>‹êB~¬…bË‰`JÐ|ÆWŸ<AjœIÌ¬­÷aUÒBU¹Uºñ rñÍnl·ÉÖNf%�éPZj×>^¾a
+¦¤ë%•ÃB”ðS½%Ø\Å�6Ù�9"žiªyU­®n-/-ý;˜…Å¸è¦¤Šûsa§Õt-¼uº@Þ^‰dÛ°aÓ3e›¹ªYí<ÓþŽüôë¹ì]¨Å ‘“qZ5¥ENùQ�´Ë*½ô2j²‰µ÷Ó
+ó1rè*OL1ÉAÆÉ”ÞÊ±èZ|ˆìbjôt?<Œ²µD‚i¥y2=[R²Ótý>'»™ø¨-Å¨"Y¢Ç	rz
+eg*Œò–ì÷Í‘h×^•ä½28î|·åÇ�Ñ”[»ë�†âè�CØ"�ª{ãã/æŒy¼âo#éÓ“"[�+W‘­+Zo·Ë!,ò½›#¯~?ZQ­yCÔ±Óí ��Ô+²Ÿˆ†g�’Mw©û²ìzŽ÷/M­?�ÖŠò––Þ]’[ÍNÂ)ã¹¶P¢ì;ÕM
+k‘ÍªÞƒ¿Á8Û2´×‘-&[o&YËg#=üb)V>b‹ÍÙ(¥È¢‚{f1Èdßá2-Í5Ó4é¼½bñ\L¦©…¬\ù2©F‘áÝ¨+AZÔå&sÒ?=ÿç/|“ùwùgç=#Ì2Iço2Í¨Eço'£ÅqidÖÓ‰­îaiŒ„ñ¸ùtÌ¼9ˆæàêÏxŸ­†‹w£,a¤¸¾·™]w_N˜HkÜÑ…Y“'tÃUe#ž;´�Ò)™"•jc5‘ïM²¾&ØêBž‘}_JWkwn¤�^®ÙðÁ’u'N)ZÍVóA«ßÊ±è^Ür<XldaÓ|³G”äÏ%H1‡ˆ]zQ¯VcäŽy3@Ô�÷Ì¡(ÉÉ–`hy'‰®ùJâ	S�²\ôÑëÄ§"�/uVHB]YÆ¸}Eù_ù—«iêdÖÿ,¥óŸ—´X;Û©~±õ7¸%c–æXÕ•A#`H¯ŽcÉ°lëó3ZÖµ­R.iå[‡y ´†/NOMIªB­N„DPø|+k”Â½Ÿ™t®LWQÈÇ‘�ä>©âH‰é^»dN>(2ßÊ=dj?œ^Y•8H ƒQ�Y·R>¡xÔ4¥zä„)Ök	�ÙæV÷’æ‹Z’Xø–ÜÓïÁ7•ÖDñ=ëòöéåÏ�A«è¬ëSõ•ýLs#�–'Â?Ž�¡¿çfåùŸ£0¨3[ÜGOoA›õ¨Ê£ÍÆì!ûÓýoÒ¥Ö•(•&¤|Cå¶eô}.?@MÃ7¤Ë]‡Ã\¯«gGË 	#¹lÖÌ¹ñyg˜Üú%‚Ÿ€7CNÕþ�3ÄisÆC�ülü»óiiu=JWª™o%bÿjFÍ–�˜Š�êâ'¨â'{ý,
+î5[’µ<TÂ¿‰±„ÄE'>C*$+¬e…Fë¸'û	ÉDãïûš#±°
+
+ãÛ�C7je—K“ÈŽT†šÖMˆû4l�²â’�Õ£#¨¯s¶ù`Ùœr[Tî+C‡�È13µC­mSMöí\„½FÔJ‚%“žÏñ)¥Aøºx¯¢™1*`fç�Ô!ƒGFî>_1ƒ‰”s€rŠ‚¡ƒG7*¤x)b?€¤øá“yY·ò¿š´ýfúÓë�@dõãP_Þ+'5SAUå^½†C<Å‡+O¬4Ëüáæ/¾—¥é>RŸQ–Þ‰/oµËèÒ•åØG&åWˆ¡bMkÚ™‰‡¸œüš¸˜°MSV‚â)c¹,`!¤�ø€â»Ž�ó?.#ÃN5b2¶iç_>éúõ†‹m¡ù{ôÕ‡ÇªL�U•÷QZo˜˜t|3·/óÂ|ÿkÄšÎw’We2LÌÌä“±&µ$üóqˆÝÊ†q1hXò'•ÈFü™O Þü¿bž&¹“$‚÷Mù¦Ð,¼»$fÞmvæÕ"žEà
+ÆÏñ£59,Þ5Ù±‚l ÌO`Ó¼�¢¥ö“­j4=,Í¬Ûßë1Ë$¬ƒJ·iI!hÁ«RA+Æ€o¾bN8òÓbŸ2~ÄÇPòNƒå-8Ÿ3CsªÞ[¦‰°i³-#ŸWžìV11!c�HØ°55¦V"e³Éâ�Sö<ÛUÖü¹/™µ¿'ù–W·³Ñ/®´ýÍÑ¡wA3¬~´`‚éÜ‘ñoáA—GnX±×2Äµï,y›IF¿¶ÒWÌ:Vþ`ÒL—Vî¾4Df]º†¡‘ŒŽG›�-0èKa@Jµ“=E½kCìwËÇj–•|>d€Hêr»±âª6øîp�&•z¦ƒåmoT¶¸Ôu{Aå
+õ.u½q¾«ø¢3Y&cØ"�|FS,dòj–�¨~bùwH³“Cò­½×Õg jšåÄ";‹´^�T3zqû5©ý£J<×àJ4¾pÒŠêJÌMY™7úiNƒl|Ñ=!—4ZyÇF¬î§¦èkúð%¬ö~ÜÏãàÔ¾lÑ$CéÝQª*ÅiN£§ÓƒÁ,ôºiBOQ‹^òUÞ‹¦Äúæ�?§Å=­Ù¦ëþHZ“¿Zý‹›O“‹Óú^¿G�c…{åÿ9~]ÿ†õÿ,¶¥¤éÚ²°¦«m-¹hç–Ü—Œ¡ËÊ Œaž=È¹˜�zO¢jÿ‘º‹æ}åín_1Éhï­Þiå¯ì>©#ÉÊÒSÅ¢g/GA`|2üÄ�!ò(9ãV‚üÙó�‘eò÷•4­YmVx./nç¹U1Æ-f†ãŒÃÉ‚ŸR''ç\¿‡˜ûÝ>»/ˆüux4Ö”ì! T;WrêËŽžaÑ�4º#›VÐßcv‚½ˆ8<	²|Ÿ‹U°Ô´[;ë[ä¹…ÚÖhæTmƒÛ�Ø÷¦Bx¥\%ÊÀg‹›0¼ów’5™ï.ü³¥4×24³ð¸¸‹“9$šzŒ;åpÃ(òn–iHÞÉ4º�‘.[Œ>\†Ù¤.$hõ	x:ñÜ°jPŸ‡%2KÌLä¹~–uç?-Û¯åÿ™/¬ ƒË—Ú';h¢º[·F³–Ks+G.¼ˆ#¡ÈJózm,¢c»êßùÇ?Ï+Ë[K©£Õ¼¡}å¯5éOq¯yOYˆÜZ]-œòGõ7Kq õØPMD­wÉcÙeŽ9osÿœ˜óåì¾y½Õ›ÈiaäoÌý
+I<­q¤[Çi= �R€´ö�éúTÿE’Üñ¿CÓ3.³1ä_,[ÙþE±¶fŸÎ–�"‡¸`–/RÛ(@UNÔ¦ør‡âYgþOÔ¿&<•æ[0Yë>j¹»Ó¢¸X´ë‹P²Kqk<4gYWˆÁ­2«+’Bž?ð´FH%.Î£Õ_„…b+Ä,
+7®DÆÝº¸¾­í¿——yÎQP·=GGa^•W›úæ.H-xGñÑô¿üãÏ!ù¯åõ �µðÏ”UIÁì_ï�õ¿H~œÛ0B÷9“Ñô˜ý8åZo¾ç+êÙÑò¶¶BAÔ×öAÍfG>/ó$”³ºwø}8ÎôÜM³GÔËS”�4¢<þçæöµlÒÜLàõ‘Ú�w.Ç6ZlÂ/–êqæÉ£WçÞÆf’x››X[Î·gŒòß3Œ£“we
+d`œlû¿ZŒ÷ªÔõtkR@¢•B»{Ñ†N0�{—�´°pûëH.½š«`‘:-zýç/�Ùrja”ÜE­¬Ã1)Šî{Œ¾3
+|ajÛ¢±å…TTÐwÁ9nÝ7Ln`ÑÊ[5¯×Ù@¸Y8š5MiEd8™ðãïû”ZÎÌïf_
+¨þ˜ñ/>ÿ¹I­íÕ‡‡ãÜ2ý1âj”q÷ýÈØílA{×ŒûDHýy	“mf8ûÕVÃM=5^'ü¨�õÈn¼ïUýjôUÖ-©Ö¬Œ§îß‹(ŠG/š ÑÞ=RÊNìÅŠTÿª™PÏ(›¦ÂbE[k¢NÈQolå%ªi&äû’Hë$XGOUÑyOWºq
+¼pÏ#�ÈýêHÄê¥'(÷¡®t�SË·¦;û8æ"‚XÃ«r„~¼ž=IÈ-´äö	„:î—lIäm6‰[^„®ã�
+€wË8‰cù”««ë>dÔ†£r„Éœ*¬Vê±¡¨^$Ôµï’ºæÂYÉ)î¡æ?ê~‘Ô5-RèÃi=”R'�½×÷ÉþÎ›ä”s×HüÆóï—ÄÂ×S¼·Yà†Ù„�¤ßº·B Ì²éÔñ=}òºI–bóë†3Í5ÅÇ©,÷
+Îi¤R]Ú‚­SöI;’´û³'ji–b˜h¾aÖ<·rnô=RçJ¸oï$�Ú2ßë×+ðã$
+T¢ÌæÆ¿(q©ZhÚÛÉJÏ¨é–³ÈíÍ£å×}ÎY1ïc-d–¿æ¿™GŸKý ÌëÀÏ¥éÖ¶²à$Hù~9#²#«•<ûTÔïõËƒwªêsê7<‰ÈÎêOò15_ö4÷ÉÆ@1–ªIGÔm�#ÉT·Ú 'èZÃ$rE‡æ$W‹;ˆ‚
+OŽÃl,QãI`Ó£ ì
+O^¸FH©Ï%‡MŒ=XŒxâÆ9å»ôDeBýŠŽ#øà9¢�ÍÈ¢×Np¡³"’Â:µ*@¥v;vÁãŽåüÌÕK	rá€¢bM:ô5ûúããŽåüÜ‚ X„RQW $mÛa¿Ó¾Dê;ƒÌ_5(´Øä�h@®Ôþ˜?0{’5\4ºloÈ¸ƒj0{—ó¾_�š�èÎ›Ta“ŽA!eR%»M¦ð¨ uÛ%qGŽ&žÜNýjM
++J�¦¹8„ŒÂísúR}>×HšöI´ëF2Û[s`¨ìb8‘»qâK�;@ÄP?�š9­êñÉéºU‘Öœƒõ•¨5#¶çlœ;@ÖçñódÚÏ™¼Åæ[=OÖõ9/tÿ,Á5¶ƒbôôí¢ži.PR»Í!“r~*vÛ�
+sÕq$ñÂQƒ®Ì”aÄ€¤(í‚S´œôQag�Ì²HÌîj]·=«¿ZPtÈqO>Ì‚ÒßŠE
+*ŽŠ:ÐeY%Üêu98‹Ú?/QO•<ÖŒì¿éšk*‚<ZJWlÃÉ&œ²ýÑ÷~‡Ò_�¿æ�•¨Hõdr?Ê¶˜ŸÕ”êq{ÞSýoÒ§V‚¢2zÐo™]J�Ð­¨vè2¾­�:kZi�)é¾Ã¾kŒmÌ/4Ô¼¹sròFP:2�ÈVªAÊg†Ë>1(Ñy6¿ùQ¥^EÒakSÃ¿]©‘ˆuù´Xfl�»õ<JÿòÂ3$ŠºzqV4N_ŒH'gá•ûëõ1«�ÊÊò"Éiò9h”Ã_ä0÷}ƒõ$~WüG�™ÀìÉŒÙà°=�ˆò±î¯Ô€—òµ˜mlÃÜ�Ôäîj?“q÷Ÿ³õ [ò¥ÉÚž91ªÉÔµ³1Ÿâ—Ì~¤Ÿ•“©<c“î8þj}ÁÉxÿ�/˜ýJòÂèŸ³&ÃÀä†¦}Áª}—¿¦RùþÅùgxìâ‡ù	Ãù‰w³ÙDõ—Ïö äü»¼RCsØ|#�Â5UÍ®]™(ò'ñðCŸ ^( ø˜=~œ?›‹äéùþ>
+cÈw€/#â9ÔqüìGwãâ¿ÉùÛúš>JÔ#ë?K‘:¸ž�Éù<þßÔáå+Â	ú½HÛÇõãF>¿¡Œ´™¢vý+O•¯€ÿyjzƒ°"žô®JZœrú’1jO½Bo._;-£¹'¨ßõdaŸy~…8µ˜ûÐùrád#ê’†í¶Z5�ðs÷}í~€¼CQm*šuPGñÂužìLsGjûÛý©/Ùk‘óåü>(Q,Ã ù†ÓTO…¤œƒ½öƒ‡Ž$Ý¢Y3w‘CËe¨nÛøŒŸŠ;ÚÌów‘C5¥êUH®û£úd¢`y–'.xíÂ>E
+ÖW†§Š‘àPdÄ¡üãó`rç?Â>EGê—Ý'Ð¹!’éŒ‘ØÄ|Š—Ô¥¥Z'Æ”ýX z©ÔÏù£ä§õgV©µFOõÈÔSóLu2ÉœWíiÐ·¾ÿ×wŸš5.áòW&¹ÒccþI`?âY?šY
+Tˆn¼.žÛ>�kNªçø“‚¤“ªÆbÇ¦‚GèÉ€ÿ&Aýdþgâ•–ßK2ô;´ìàÿn^Kùœ]ÿr'ÒÒÍ%Ú5c_§ŽDÊ}_æOØˆú¾�TÑï·Qé«¿áÄdÈ:µ|M?yù‡-†�Jë•¯PÑJáñrwµ|L	û�;KàÁu9�µa''pûWÄÃÞ~Æ¿GX•PÚÂ‡jÂÃøãÇ�ôkOyûÍ¦@ÁªÛ²ø°d?vø8²~-�óö.]-
+šj¬+üÌ?ã\n]Y‰‹�ÛÌ´4²*VæÑ—¹õ)úÀÉ	�¾»ÇÍoèÆ-Q%»
+PÒA“ñ	AHü•–ß
+#mœSHËÕºCÒ�PÕjhã(3â6Pè7-"
+ì‰2Je2ýt‘´bÙ�¥z©ýDàâ±»‹ 	Ýè¾JˆÙè~bŠç÷2Í%‹ÛÆHø½7~[|ŽQ>W˜BÒ’	é~gybZÖ?¬KCÐÿ¼ò�Ôr˜×Í…1âÿ�úCôÞÙ€‰²×Àf_GÓàA€M=_‚½ÈÊú¶ty1
+Ê()NÙ‰Âä¨�‚i½zÐd£ÆV–ß[C,ThÔÐxd¸CL­‚]éV¥Ú°¨®ça“ŒE4ËšK&‰hÀþáæ2\!Š	¼»§8$Z¥A¡¨ÉÆZÿ
+i.*ö¨OÈaðÂ©Ÿ'hçqlm°@ª‡øH’¤D«ìpx*¦|‡¤rãé­HÀq ä1C¿åöškÅ‡Ãý¬<cÜ�—òÞÁ¨x¨#§ùÓÓ	nWÆòA·å�‹’i$ô L&ÆòCÿÊ­³æT5öÓ"ta|[èºoÊ‹j)ô¢jí¸Áù0¾'’�üªKv¨[héþH¦BZ>ä‰ƒÑß”p
+ƒf„öù`üšx‡rOÊ(;Ø©}±üšñäüŸ·�–4ß~ÿv?“^!Ü¤ß“Ö´§Õéßøcà˜l‚2Ü„~NÛò¢Û0Ïlx$¾fü˜ƒ�E»ÿÀƒøÓ18 RÉ%¡Ø”`b•?«’þ_â�rþKÚU¯#ØÇý˜*}tÐ=—ò:6°Zx§ðÆ¦�ÊÃ¹	7ät-R‘ÇA¶ë�M„´æoõ~¤þE†¡Ä*h~�M�òn?Å~¤3þCËŒµ6©$ÃÙ˜ÿú�Où
+0ZÆ~[~¼<Rcü—Çö �ä]Ê“ÆÁd÷®žpÙª}�	›ü}Èü“½G i¢�v8?76Èpïü|�ÒþL_%Oè¹ú»�Õ�æ¦Â}…çøù!OäÞ¤?£fPvÃù™°þB�ãä ß”·ñ ?£îAùWøcù©1—aÇ¿ñòB·å}êŠÊp)Ð¥XÇórGò{ÿ%«ùesSKYÑ{�ëôSÍÉ¦}ŒAÛñö ¦üº¼@ÔŠàv¡�†?›“ä‰~?±'�®’:\Ü¡®HjäƒÙüb	¼—:/ÅÍ°àÔ¦ÍÉÉüb�òlÄÑœ�Oþ%Eók—dg¿A¡ñýJmä¶%R•”ÿä¼pÇù#Uüï´þ§$¸ ³D§Àµ’ÃÙ¹¡´�Ÿ�êwø>UƒDG�*o‡Çü†OÅþ¥¶þQ¹•äZ¡`6!û}øáI–<�ûQpy>t‘}@¬iJƒËñ9\³†¹i³wµžT¼å'¦€4,€|À¦Vs¸óÓfî?k:Ðü“«±†Xlnn¡1«0a¶ýúf<É“¬Ôèu9öþ§Ò“º¯iù‰åÉ®¬®c‚)å/,�°U_ªÌ®ß´ïÉàssû³râ—¬¿?/'èõ¸Û¸¯µ3aÑô847ÂRžÕÈurSÌè:‡1›ÜÉM‡LU	<g�®(1*“OÅk’‰iœ¥í§jñ"*2\E‡†~‹]ÝS¯QÛ$&B
+(’v ®ø|BŽÎš¨)Ö¹!”¯ÙPì>ì>)^�jWp»ãÆJT…¶ä·_|xŠ8Grãnk^ƒÛÇ6ÄÄ(y	­Ý1Eô§)
+@÷Çæš	�ŠªjIÕH§JæWeÑÄÛ�	ß|f@6Ñ9pxŠSÃ)¥S¢ü=M6V›ô$èzceiT[šP !’‰a ¹mG^üôÃc¹¹­U‡Œ|ð+HskR¯Ö»á�ÒŸÔìöåãL�–VÌX�:aÙU?EX²žVËSì0A³Õgè[?Þe× þ˜/É{ÊßÐZy&¶ë¾ý°‚‘c«Rh:oO«¨¯Ž&ÏzÑå�-«H@Û(7ÞPOå}1YˆŒl;ï�…å£ÞV(é² øB×sJõÇÃ�rïÞUWÉöhª)Jaà�rïÞZ%Ù U"qD ßz€ò5‰"¡~áý0x1Ežõíä�M¦Dâ!"ŸòòÁƒdƒ¶Ý°xC¹>!@Íùob~«ÄÂ•'ˆ;ýÙ(â2´þXXÈ¥~©
+ô(¿Ó%áEx”Çå.”EWN‚½þý2ÓÆ]ìI'ª‰ü Ò]Hm>»ü+×îÈþV=å÷”~Li¤�:½Ttû°0‰d~è¿$´bûŽ„Ô(þåýéáÁŸ‘!,ß£ãv¨Ûo»À;ÊØÉM¿"4qÿJå4;HÀtÑ=JóGÉ^ÛòEäKX…WûÂ4‘ï,$#üÑò{•ü�§è1$P[Æ‰Ñ;Ð}9`Á€"?„|ž‡m	À¤Q«-HuP
+~y?sgDËŠ€>Iõ³žT&µß|$Ó”}H¾[ž´®A›Î¿hf;�«Š©Éô}8ªÆû¾Œ!„¹¨-xžŸk½1b¶NÝ:aJˆ§öz÷­p¡Aé¿Øúk„*ºþÇÑ…TŸý�L!ÿkö0¡MþÇn¿³„0’Ÿa…’ž†þ—ÛÞV½ºSMã§ýß^Õðª¢t?g¯l”UOÙÀÉwòtëŠ¯_¶~Ï\UÝ¾ÏNØC	6½;aC»Ÿ³ÓKæ§?Øÿe\UcÓáû;W$”dg¶#—¨û?Nª�Ûìýª“}¡ÓU9iUû=;×
+ª
+“Óß;~Ý<?Ï®*¯}5ëøb¨¨ëÄý®½©Š·'Ùßþ¯áŠqtí×"…j�zö¦ª£ûÓüpªíê³T8ûg®Tƒ«uëŠ¹~ËuûÀbª�Nìý5®H$9:mO£§ã‡ä—»7áÓ¿öd$Ä¹©OØëÚ¸ï³ÓA^´£tú+Š¢ è:tí‡£d9&pý±òÊäß`¥J×Þ¹oÿÙ
+
+endstream
+endobj
+18 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªDDªªªªDDªªªªDDªªªªDDªª
+
+endstream
+endobj
+19 0 obj<</Length 13/Width 16/Height 6/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªªªDDªª
+
+endstream
+endobj
+20 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+UUˆˆUU  UUˆˆUUUUˆˆUU  UUˆˆUU
+
+endstream
+endobj
+21 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªªª@@ªªªªªªªª@@ªªªª
+
+endstream
+endobj
+22 0 obj<</Length 19/Width 16/Height 9/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+UUˆˆUU  UUˆˆUU
+
+endstream
+endobj
+23 0 obj<</Length 17/Width 4/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+¯¯O¯¯¯¯O¯¯
+
+endstream
+endobj
+24 0 obj<</Length 15/Width 16/Height 7/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªª@@ªªªª
+
+endstream
+endobj
+25 0 obj<</Length 8/Width 4/Height 7/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+¯O¯¯
+
+endstream
+endobj
+26 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+UU""UU€€UU""UUUU""UU€€UU""UU
+
+endstream
+endobj
+27 0 obj<</Length 19/Width 16/Height 9/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+UU""UU€€UU""UU
+
+endstream
+endobj
+28 0 obj<</Length 17/Width 4/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+_/_�_/__/_�_/_
+
+endstream
+endobj
+29 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªDDªªªªDDªªªªDDªªªªDDªª
+
+endstream
+endobj
+30 0 obj<</Length 10/Width 4/Height 9/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+_/_�_/_
+
+endstream
+endobj
+31 0 obj<</Length 13/Width 16/Height 6/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªªªDDªª
+
+endstream
+endobj
+32 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+UUˆˆUUUUˆˆUU UUˆˆUUUUˆˆUU
+
+endstream
+endobj
+33 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªªªªªªª@ªªªªªªªª
+
+endstream
+endobj
+34 0 obj<</Length 19/Width 16/Height 9/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ UUˆˆUUUUˆˆUU
+
+endstream
+endobj
+35 0 obj<</Length 17/Width 4/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+¯¯¯¯¯¯¯¯
+
+endstream
+endobj
+36 0 obj<</Length 15/Width 16/Height 7/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+ªªªªªª
+
+endstream
+endobj
+37 0 obj<</Length 8/Width 4/Height 7/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+¯¯¯
+
+endstream
+endobj
+38 0 obj<</Length 33/Width 16/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+UU""UUUU""UU€UU""UUUU""UU
+
+endstream
+endobj
+39 0 obj<</Length 19/Width 16/Height 9/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+€UU""UUUU""UU
+
+endstream
+endobj
+40 0 obj<</Length 17/Width 4/Height 16/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+_/__/__/__/_
+
+endstream
+endobj
+41 0 obj<</Length 10/Width 4/Height 9/BitsPerComponent 1/ImageMask true/Type/XObject/Subtype/Image>>stream
+_/__/_
+
+endstream
+endobj
+42 0 obj<</Contents 44 0 R/Type/Page/Parent 55 0 R/Rotate 0/MediaBox[0 0 612 792]/CropBox[0 0 612 792]/Resources 43 0 R>>
+endobj
+43 0 obj<</Font<</TT2 67 0 R/TT4 68 0 R/TT6 69 0 R/TT9 78 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 73 0 R>>>>
+endobj
+44 0 obj<</Length 7936/Filter/FlateDecode>>stream
+H‰ìWKoÜÈ¾Ï¯è#ixh6ßÌ1ÚxIœÝö`ì�ÃéÑpÃ!e’#Eûë÷«GS#Ë|Œ�…±UÕõøê1ï~üÙšÛyó×ÝæÝn—kvÇ��£811þd•g¦LêÈV1®Ï›ØÜn¶¸ˆãÂìÚ
+­\<l‚‡nr½›gÓwû©™#î~ýÖFi�'f÷SÛTø’4-‰ïS°;93»)ÌƒûÄeàÂ*˜°LsfQÜõaŠóŽÿ·Írµsj@?0á�ÿµ›Íä>_øÄÍÂ3‡6Js¤ÇÆshœ™p[r}Ò÷Í42Û~ôl%±…¿î>ˆA6¶Äž %{¢H±¨ÂmUÁÁ,'Y9=�J}óÈâfz¬L§WÇQ¾Ó9¬£"h–N<ë2ú…jÚ¾ó’—0—YÂ%˜”ãr«¦1»›�ï˜æï¯ŠëüÉ 8ƒÒÚZ1¨‡ÁµÐhˆŒ	‹àfîÝ4»þñ-´q"È¦Q×�AŸ„4¦Ácˆà]ßµdÒß^Ä†Y¶žç…
+VUÈªZT X"Œ3,à”Î;�2íx>7Ãa¦õq¢°q�Q��Ð�£À¼Œ¤/KøV8cÐªÖp®Èî†ÅMÇ¦uæ2Cîþ‘BÁ¦'QžBÓø…‰×Ÿ@<Íp ž¼Ó*¡@Ý¡r®ÜñLXV¨´¦mÝÝÂ¾`€�3t7Ñ.	öçÁB©H.ì˜<ØãYìÇ#C(h™mÒmàÃ<ƒÂ<tËIÛ½Q¨û°Äêš€$·ÏoMÓ÷£=tzw+s'5  ¸ÈQ¿ÐÙ|§{øVVœI˜)ò-ÅTë“%$MzØ›ƒ,:ÖäxtbþÍ¬ÍÖúå†ø�€, ”-šf"gÌÍÙ™¥·ypvÑ•Ðµ¶±8®„\øþ¶ÛXCÓ-�ÙÔqTe¦°¨¥™9oJ$yâ·eå…)â2*ý&¯QyL»Ñ‘áÉ‹*JŒˆ“u‹ª� þèÖ"Î6Q¿QqºÕ§”Mµx¦a»9¾Ù|¦ç3œ%	õ‚$Î£¢2ÛnIPÊ6¿¼1Ã&ænñÓ�0óìýÍ¨ej ÝüÃ|ú56‡×gü¼ù÷Æ–i_imU«Ú6G÷XõÖÝú’nEáSýDèª{•EÉª;¸ÓUwÝx‰²õÏ	›Wå™¢¹ï	Ê«µoÞ$y¥€¥¥ �7I–Eqå÷IšZËØÕ]^ñúm•@€òåÀYmD¦¬AW€¾ðWeå+“n¼@Ùú×„Íkr­æ÷gÔë´ŽRF`G%ÏfQMxÉè2E›Ï¨ZBŒ´–­Îk@„;jØB‹ììŸ®´OìO›•Q¶ž€#Ç›×þžöL±µPÛâÅÛu•»$!Q�¸Ö9Ý÷O×eTüv’Æâ>A4RXöÄ°^³<z[ÆéZÆi4(˜Ã^Á2ËÐlÅˆc
+¹ŽÔOõ§à7Ð”ë`že¼°QQ§r8Å»kK2aØÝ UÒôGí\	p×¹e³¢ûáÙ?Q«£¨ƒÔj«$£¡ôgy³‰|Y ZÖ=ŸØ+Y<ö7<Y}Ùñ^]½ÿÞÔ|u†½öFöjuÿ³Iý/Z÷g“Z›ÔÿQkB?Î¤#d0>IYpI-ðŒØJ<üÛ­fšÚT9WêI_1	É¶þw#
+ýÚ{ßÝ^&gê¿}©�—Ò¨ªÓr¼R‰x3öã?C²È…Û&.æ<.½Ã�Îá€ßš8ê†ÅMí8®]ºqW_¸—«ì/~xÂÝ±É«ÀI)O`ÇÆb@Q©D¿t‹Š¹ÅÜÉf
+“Èzs/ŸÚUÁA6P?& @m90�²ê§ïÚêËÆÓ,'Y4‹iú^/æõÜ™Ëì&³Œ†�Ž	'q�WOÐÒX YÔ?‡u”’¦9äÓ-ºŸÈ«²4ísšÖ¤Á¤‡=«@+g&¡ÐÌ¦Sr„&˜\Óo—îì"cv+y{Ñ·&Â–ep¥½�måA`Sõ}^–¢|Û‡è-ð,ýwa@-áÌ»ë+¸òj7Fsh�$Ó˜}˜‘1H7x‚–ø�è¸iæÁ¾™]ˆÈ™Í}ƒÅ“t§Ï	9L²OOB›ËúJ,ÒjM‘•µXÓ
+m9¸°dX�ÇÆ{ÚM'×LÛ`yvR8�¹	Êt¼öIZ•‹´©1Gç,æˆð8ƒä	+�%’2�•ö%Xìš­‰bÝ1­ 8A&ôô"iÒ•
+·È�@÷ù˜¹SÂ;9èc+l1§ÊÕû™ÁþÐ
+·*AàNà¹Èb&Ï£&ôý+¨µíò$‰i¹š–eêüFq›E9i>dIî›ÉÝòB|g3N{Õ9GÞOoÍÂeõ"'Ó ¼D
+þ½lõö÷ß!Œ‚â©¸p}=]_F@Í;†TüŽo½¢>Áîô~ZhOïïå ¡z“Jã£é»#rðéÍ´F[ßÌäÍÜZuÍ{ÖÌTª9xº,èCK•¬ÞÏa¦‘¡¯\ûL[�Ä½éõKUº>t}o¼€f¯4Î,ÍüŸoÕÕÃ£ÖƒÏÇ¿PVxœ„ÜÒÛT`e{àlÏ!Ùä;I=dx+‡#MÏ;Ì,Hø’Å
+½£”ªs7�­P˜÷2…ZåTˆü§Â“TŸ[÷<øŠQÌ/üÏÏ€ä :ñ›.$õ%Càgö¦oyð`”l¥Ý4k¦ä”)+ØO×Ânugzwïz„
+yâ]”Æ‰»7Ï1”ÆUzÝ%)êâÇ�ƒòp’m×ž¸WÐÚ,
+¸É°9Š	îœ¨¹î¿ºo=<ÝÁÓ¨ðE…SO’Õ^¿YÁ$!ÅŒž}­ë<‹C–WVŒù‰1_qï¬_4œ4ÿœ°$èá]Kú!êcÊ!€EMc¤
+t�Ô¤«ý¸\9zrŸ}Øg)6ßj+™/VµE»ïZ7sÃ6Çi€-á™‡)·èäÜwn´ÎP×¡"27Z%0=%_Ž€ø¡'¥EMÃ·ŸïxLÛú%¦ª›‘šÚLs¿óþÂUäã4þFåùÌÄ<¥™/&Í—sXŠ_:X“qµÎEªfþâÌ	Ý™æ-GæÜ=weÇ¥²çV<Þ9¦8 çSf’Å6Ø3éÈÿéÚí¨<Ã#›–Yi ,¹BÐ%%r¥r2Üs”Škf¸›Ú-bþå8°3
+YAyÃÍè³�uôZŒÍe‰[Œ—¹ôc@œÔõõPxQ‰H2MÛŽÜo+*Ú)O–3åÚâú¾£w8³gDºÈWXm½èEIýŽ¬P]ÿu™ÌMH}ž±Zû¯9Ñ˜º?¯’%Å‘,ø+qf�ƒVà8]f}«.³ž«K_AL*%Zõõão	!e&3Dl/¤þÜ;aŸ]¤ý$„s!3­™tKAÒëMÝ)]™Þƒ“òH«î
+9œD¾ÃY9íéÉeÝ�N+é‰ù°
+K9òhd¬™¬_ïòÉ,¨rm˜$R?X¤ê Á«t„Ý1AƒV´BP„Å” �Ô7…Á–E%uÞd¹ ŽèÔpèHâ…g™ÏÁ	i"xÎsÅI¬œ{º>€¹ÑoÛ1¨\mTµÁ—ØÚ7º]o³)š6!¤¢©cIB‰¹	·ñÆØÚDCM~Å-á8é¼DñE�…-ÛiÝ¦ª¸“ãaZizþýåXä€[¥æ%ß–\úš–KñNPA¬í‹’0²ä§é¹e¹¼ó•d?ÞóÌ×�ð1ã´�púJ´+§Fêñª9vvÒÓœ©)µÂ'/’š HpzRlÂ‘ç‰ª¯/œ!öGò¯¯îKÓhãÔÈSÕ1™íi_µ£sNÿ†‚B�=ì°
+�jPiDG6H-Ô)d”ëº'çQësM�Ú‰(ºÁ;5"€^ê«Âž£z
+²HôÖ/;S_bÓHÆñÜ’#©P³]¯º�:•mƒÌl9+÷w:s\Öp‘­gÑUé;«.š\,ØOe×MNaô™8�ZÍŸx?úN|åÔtîÅ¶¶½ñó¤8‚Ž~jHQ3,âI¤%} RhàÉ	rzT‡g¬/?/&c&:öæ
+Éçµ€=,¡‰ß¾}V`E"\�Âm´²Le"n‚´{èó�‰€w^ÈÜÀ:âH@C½¯$£PI¨Sk}r†+r¶ƒLxã*h!•½Ø
+¬Û…Â—Å»dòzñLÉO¹‰’[¹É4Wú``e¦ÄµHëˆ+ˆI&é¬üñÏ°¾	•úûÙO=}?Ý#«j¶3Õ\x¤Â�§h*¼-DR²¹À+sØÃûŒ8JØ««æ‰#1šÎIèg†I‹wš
+‹Úª:•t4"eÎ¢Šœùó·ÕÏo_¹</UÚ(©™?yÐòRº:™ìl;²½•ÊËo­$Q`µld§ÒIµX-rë™+JˆéZoú+Sòj�gåˆ^IË|?K�3µþY�Ð¿ÉèÈk•ßË0¥jÝhªn”®vqvêýeš•ÅI‘Ûâ%ÅzÎ¬£"§WÇ)^5 ‡Oîb(¯JRºÎt> E„Je”.ë‰EîÉ°›óŸ†p<¿;SýT]ÌªSRÊÓšÑ�•©‡¬ä&k“‡Drö¨-�Ð‚Øúï!L.xõ*›”³Rq!‡¦®É.\uzÇM×Bå?+PsÈl¶Éä­S±’EÀÃ¼³gt#É¼Aæ¾ÊàûÙtS¢"¹–r[À ¢àDIÚü¥…äW¯
+ËŒl;âv
+ªdd�ˆÚ ’¨§cá¬�üb9G"ßQÐwÏ/–D™VÑƒîUˆ€¢±1°…7“¿ÚóÁM·ò I áXµÀ¿;¾Éœ©±è‰Ÿ½šÊø‹cÚ'ù‘G<§cFååLMÛr,UiÜƒ½ðå@JEã•ï½ë–|,Žó8�®�•�—­ky±'¨ÉG%¦/—j¾4òO­NÎV¡P	÷:‡N†ÆjÑë">‰‹k©$•MkÜOéï]}ÔÅÇÇÌKˆGŠ·õ�uœ<t„ršÇE¬¯ë¹þñÝ2£þE„ª>AÌtÐ^Ž¢ÜHjÑçË\Èœ<Þ(�u-�sÿ¬ú³{8)XÕš¥‘dÆ>8<I”Qð^ï+T(°IªV”ø6þT%NtÆu.ß•x"RBw7{ŸT^”M¥½Vˆõ¸D×L{>¼yeÑÝC¾‰ºâ,±Z-º2é)œÔa›T�Rdw½y¤™ü%xn…2
+É¸‚>.æŒ+Â@É\­ÜQŒp¤P|X~ÃòÆßãl:®†ì#?'
+¨­‡L�#0hŒOžÄÝ¦˜HIñ‡4‡ƒí|SÛªº›"®"SKv"Ú»íÓ8£E¶œžÀi}E™ƒÖ±9ðº×'^#ì'ŠñKK™TI°qZÌ_f¨©õó‚rá¸ˆÚQ8îâ‰nLÆ€QJîP_Zwô‡Þ²D&¡ë®"—kbÀ-•(È™fDì53ðH’èÅ_gÉ¡9M·¿‹ÊÒÃƒ4úig‹z|Ó(‡|ú‹$ý(Ùãd­j¯áô!J YyS2h`Ýð!C‡2v°uø*
+û¬¨Æ›B3Ë=à�Z¼´¤õ¾¼£,j¯)=ïø3Ô»G©£ÊŠûÜ�\”ç›É×ìÂ~™ÂŽ²—ê¯ˆgœ~JÕ‰9ÆüËó`
+�Z¢R³ay~-
+Ù_¼ ÕCöjÏ«ð|ËväD Lxœ�êV™Uzm·^{Nò xí3írÏªâíÇõ	<™Ü·ÞV�ñ\ÙU$
+E17•tî{éªÜRy"eYH‘Úgµz­Œ”$©¸/MÕüáz¨4H™ÒâðTÃéá©’³›�J»$™z° ³F ‹7dÈACÕ8’–ê�ù"FT¤jèý‘Aò½ëÒ«O²\“´$'…j^¯;›†›h��‹©YŠáÚ�îFË«cÿ…(Û•¶©x\]ÎUMO
+–GœŠÆ“ÆUGîd‘ÕHúžÒ¹çÚÐ=;‘Us÷ Œ¡÷¼ o†
+NßÐ1¡ó>yt�Q¤-I…–EBÃ]{™P1ø#�“t¾Ú—Åÿ�ùY8ðDsû‡B� NR‹D=KâL”ã&d2Úæ ÿX­ÑOïd.Ò‚;³G�)VŽªÊŽ(Ð ¬.UTgøøÏËB°%ëd§H>‚­+àÃ0‰ù¨Lg¢°c~²Git¦d(�-1ýÑ¦PËÑKÔÚ!˜ç_|!Û¶,ºBÜUÜÇË¢3‡Ày„Õ˜*Kí4‚ìTw#f·ÃMÊ×y=)
+r¾eéÚñÈLÕ‚tÏ"íí/óû Ç
+@ù2»1=à’]û‚½WØóÐ‚oÜä¶?bh*wÖI�;ÎV’…D²8¾�4ú‰o§sdIW°)¤–åÁîµ3{G§Fg&%‚“;…
+b6¼ª•ï a�f¯)ÚYv…	“ù{þm¤—&t,à—¦èÆÒ°ÀXJ·OMÂZ?0Þ©Õ9[0Á–�	ö”k_áu˜ÿ2‚Â*à§¤ÿƒ×¥—Å]¯w”Ýr,y:þXŽ`* Ç1±ïÿƒÂßAí ñÃIÀÏÑ²Þ®5P<ôbÍ¹¹„këCï³wêT²‡SÁ˜‚¤‡¡ú¯ ­�ëNkZ[k~;*ê€õGV i;r´X�_`[ÎñööÔTþOŠ%úrPéEž@Ëg:Fí1oVõá±gÎN�“Ô1¨¸/�PIíh±t—�”>Q†ÒûZëðM; eò9–$ñKñ)nè’TClMŽ¯B@n].Ì	ÜEwiˆKæˆ„X7f…+»2µ%º’« DËk.va¤{å‘nÉ)çÉ£¿Ý©u�n"Ó·Eœ�¸Ø"ÕÍØÊ7ùô&âˆìE*GSmÊ¹Â­Ú:§–‡U`Q®}¨jÐö$-T{™MÞK0ì½c”3]Nö1öªK|eu~Å#®.À‘’Û²Í³ò>s½
+€ãD€NVŠÅ¦jºh“M(gq¤£dº€³+!vYÄf4¤ïbµ‰’1´¸Âz
+q•‡w½?I‡íÁÉöÞi’ÆD˜åì,kŽ£Žþ;
+Õ¦š*BèÌƒÚA1�ijÙ¢†â%­/R�©ôïÁVyÅË&˜QÑ•pWõ¬í‹¼Ù?¾OÞ „ž„”\<ÒRgk²Ýî¿„WÛVÛÈ}Ÿ¯è·cÖr<ÖÅ–tòd˜I˜,pfž…Õ–5‰¥üóüÃTÕ®–e'/¶º»ºúVµkïë³‡_F�‚½®„½oøn<ÎÄ½`vi³üÁV];¸Õ5×!x—/’®³…	cJ¤Á½R?	T^¬w(Ê-h6¿�cLîÁè-ê[ÂJ)Þ(@£åýÍJ­É‹”%âK)!ð[N´u;K¸)uPØ‚ræÍ(ÒÜ*ÇŒá™
+£wùœS¹ó(Ð€&�Å•„©@-³MÞ¤YÏáEh@G$@ˆ¦ZŒ08Ó‡Copè€`*n
+•·†B„
+aQ1ã§PXŽt•x{‡ä{^¢œól$ª6hxòÆ
+zo®ÚÐí.ÙŠ‡¹¾½MÀÙž62¹5XNú;ÊÓõIŒëg¸H{ÌÙÁ
+½‘
+âý˜”‰ºƒÓ¦UŽLî½AÇdìbRÈ¯W¯Nš5šÚÚ¡%b†¢^ÙPÚbÔh¦ýôˆV4[…ijuF¡s\ê*‚\Ï ¬"¸@ˆ.ÑÖ�î«iÿ7¿õÕ&U÷¯`æˆê£ÎCW0V¸'û=•÷DºÐûN%¸iE\nƒ+lÍ
+W¾—ª…«®¡´Dé®¤_EW;~Ò
+}æTžT- øôAuhˆ7Ø"’*3nAÇÝÃ¶kM¬†•_Toþs=ožà6N›Ú†ÂøÌAeWh—ìé“-‹ïjò›b°‚¨è0zÅÒR"ßÏ::x”Ùàhêìæy¼´eYëX~ÂEvz§�n6ñ”£¬ðt»æ¢rA/;š0Wö�Å”’�‘�#;R|¸`víæ`ÀîÕàej.Ò#<ãRÍdž-å{Êç&6v‘JxF¬“ö]ôÓ Œ<�ÁËš/%�:£AÔ%ê(„"$^ ÔÑürƒIkL´÷*mä.ïs7 Û©ŽZlVw•e15+úmÕ}%îß‹ÚA`Û×izÏºÂŸÈÂšw5ñ‘©9mRØ—|îÞÖ�ÀÐµ•ÞþÁ�8Ak… ò‰Ròu+U[ÒeÉ´Pˆ?Q”ëBø@¶+šgé™
+Ô˜ófp^ü!cO‰Ç×F‰Ë\Çºæå]Dd#Ê�¬¹¡;]’íViVÑ¾ÍQss»ÙY×°äö¶³Ž^U?Ñ¯Dã5jnw©ÈKV®Å PéÊ>7VèG®z$HU‚®é&!$§P_¡aÓÖüiËÁYžŠ£Ç^fe"{§”©Oò%ùðW
+ÿêç§ì.ñÜÛ"Õ³mí!05E®ô¯£ª'Ô4FÜ&J}úÒMµ­2B»)Ò’Tk	ÝSàï^¼Ð1Ë´Ò1S+T5t^ïU}T".BÉ4{rL,¢9ÊÀÂø Ë>Û1;Ë­€GZ)…ªÑm¶ò§–lâHžÉ¥¯‡ó³2´Òj#$ŽKA¨…6¢Bæçv·Ó{WÄ:<õ¼å�ps45þû\;êÿ�q&Ö<tƒ7G…>S�Qžè¶¢ˆÊV]›²¸wžX©v
+&Ã
+PbÁDÍØëÿÔf_ØŸÈXo�8!fÝZ¨O¹£…�óÕJ3ÏU¨:ÙË�M7R¹T®¼jC/,v³°”WÌá·²ÍÈ¾o
+GŒ>ªOhŠšáß]Í›»|«ÎýÐé$©A”ß„®þTYM«	Ù�'¨S�¨ŠD²[³×Ú…_î9•ê(~Pâ(Ç/õ¯¬hØ1Ã\×º¬ù’ö{^Ž�ß*´í8Ð,ÚÖÙ��I%µK¾Ä@®vƒá
+£
+ý®GFjÑª‡ZãïÈ,Q5©™ò÷ÉŸlS¦Õ;ÉÏ39ª:*Ç‹ ¾�ºS
+Ö¿ÝÜ71ð�dpË‹ÖÚöð%¿™ž7ƒcLºqk¨HA—åe¸É^tŽäÊÇ§¶(çWƒ6ñôLz²ê?t-ÉDãä›îŽš¯“bZSlÈEä<t¹T¥zCT?mÀ°þØ’úˆiÒ†ôJE%,�H€?‹çqx NÈ…‹¹–9ó�9ù’ƒ ^A!ª�
+®[IzwüªÉPíÕókØs,cžÄøÜ …RjÖ;|‹êìñ]v-µDÁ8Kã¶O�…¨KÏ$PÕš§Âî[SoYz²jÛ±V£Û ‹‰F_ïÑBlõ¨ÄAYI‡àê”a¨•pV‹-Ó0Ž�´qœ#W~bÍÓn´¤žSðÇJš¶èžgØé¯ëµohS[:>�|nè/¤
+@öý„€‰ßð¯‰Úé¢bk‰nˆÃ…Ã;‘³P�1¦ÁŸ|^2[ß#XœÃãÑuø¡¯ø·êöz€:ÃÿTbãlö‘Šž •ƒ4áÑO4zQë}é™[@qå¼¬ØFÙÛæØ´�['­°yA Î>ò@ô¶ðôÔ»Ôë¦’Ã¿æfúQˆAQ–[é/Jk.gÒy�ófqâûã[èÄ�#Êé=¿ñbÒIFçh€ŽË)®È0°ÃŸ�4Æ3¯uËK"u½âPU‹¾âÉ	ód.^�6sN§º¡bD/*œ06´Èííô¡T©I¡À«ïLsÓúØg:×|�ñ&}4éð1pè8÷˜åkÈ•iW<Yó¥Þ¤eñB�º2EEl³˜«O¸nUÏf�$óh$Imõ]ÝµL|èÑÏ+âÍõÆÚ¬�L®rIòƒÜ`g?¨?çsît,ƒÂµl--	àc¨=¢òœ/'K)Ò±‘¬þCó4Ã£¢¢´ÌUEîš$&ƒdá¿–ÞÒ1@®.	J'I¢0jtì¹cCŠæ;-ÅÒ,!–‘ºÆ‡t/s!$0ø'a_AS¬	3™ñX·S*ZÂ)gÿ_UDN…z•>’p>_âcfV•æåªA
+G“¢£êÝã»áœãZÂ%�„ªY9FÔ¸#=�Ñ³=ý#þKQ¦Ìz!b8÷ÅðJ}—]ñ�ãE9"û6÷4©“¹§¡†õˆ<>âß6#hÌNÈÕ¹6ŒfâbÂ±ˆ¯â„¥R•£57¥³�~±S|qø½Í«	Žis²Ï0r»sá™pxú¨ð”]’!Å¦•áŠ¿"ÒC'±½±P	Ùè­ðüpŸîyÏj'Ó>pÐtäƒØH+ÁÅàr•º‘œ˜¤pet¹äwN…0‰ÐÚíÇQ8ÂUG
+h=W»SòM!mCÈðÇë�:r€òIÒÏ|: TH1èÏ¥]–:fÂƒZYñr¬Vê'¨‡&%Õ¨]R™*¨§)$K]ˆ˜ÞAŒ`”¹EÉ­­Z§fØ&‡æ¹Vi´ç¹tÚ†R_¡òWÎ¥sY“q´ß×¿ü;¯™G
+
+endstream
+endobj
+45 0 obj<</Contents 47 0 R/Type/Page/Parent 55 0 R/Rotate 0/MediaBox[0 0 612 792]/CropBox[0 0 612 792]/Resources 46 0 R>>
+endobj
+46 0 obj<</Font<</TT4 68 0 R>>/ProcSet[/PDF/Text]/ExtGState<</GS1 73 0 R>>>>
+endobj
+47 0 obj<</Length 2483/Filter/FlateDecode>>stream
+H‰„WYoÛÆ~×¯˜§‹áÅr_œ'ÇVã$vjXDîÚ>Œ$ZbM“IÙQ}Ï6Š”X(ˆ³œYÎö�o~ù0Ôz˜¼/'¿”e¬U>NßóCåÃ�[I¬²°ð‚Ü‡éç‰¯Ö÷±·„V¥™*_'¿ëû¾[VÕªvr/ÑízPNª»G5n*õq6›a÷ªsþ,?M‚ÐK?‡#ÊëÉ”v‹ínYÈ»µ�U_9©éÖ™F^¬—•êZõÐ-º±^Ê´+E›MínÓÀó‹$?ì¸'5Ã”7½t¦1ì¸ÃO¡GØ>Ñwž�:Æ�]B˜™&Ð«ÿ»@Ë—o£‚ˆûa6ÅF¨ƒÈŽxJÎéy¦©eíú�s['ðíª¯¼äº™öX5uŠý D�@�Üç×îÛém®½wê½¨Õ¯�¼rÑèÿ�|8ÃcÙwê³Lï¶[^a\u¹æŠ?ªÜXAºã˜{*ôyÈ—¯‡Ç‰îGœz%aO¾U†.‘€±B8ª[pÏÈ·nêü­ŒHmûN–nà™£ª¥4šÆ,¤Ù´wAÎ,ôV\&×
+½^p<À"r{ ëio¯!{ð¬RùßÉÑ…Á‹Š4*Þazi¸[Óÿßp‰ï½®Ka�íX~”ÅÝ³DØÝ
+N†÷|pÐ<	@²2•Óà5ŠuÄ=‡{gâÈÉKòÞTë
+7×½º¦ZýêÑ×U††[-³RóÚ	|ÊoØˆôîÇ�‰SrDNóŠ—‘è˜£U²C‚�æ“g°Ã'ð¶
+M“¡i|ÊvÎˆi½gÁÇ®‡F~>ÜrÖ4Ã„5½"Ÿæ”ð)_®›ê7”�îú7jÒ°åŽgU2©î@ñ€vëéƒ¬_ÈwT¥ž¸=\¨K»Q³êAý‡.qXX“Ø�øÆ³oÛª¯Aï€"·O}lÕ)æ2¸€ø~z®™Ý1xÇõà�ôBÍ÷Ã	‘‚IÀ·™>WÙ
+Õ&cZ»F‡ð�$�çËºj9ù—•«î7Ü®³â%]ª›­�!X1ÇA‰ieâ°œü�ÈøÊN�_#ØpE3®º»7ý“œ&³„�·Þ;r”`\¤W¥ $wOr!3>ÃÅ?ð—!z8õyÚ;d¡T¯0ÊâƒËKbÔ/G@š!aÜÙÑ–eFÔ«„Û¸áQeÔ­‘ukÙ¯{Ãr²ÅX! â¤•!lh�;"°ãÏà`ú¨;]ð§n*ŽŒƒ#=­Ó�s)8¨YVæìêÂ'j7CU½¡˜i¢føj]È—˜Ü‡s[ÙrÉe‘–†Ö.~u]±\ÃË÷ç-äª…ò¼?,MÂ©–''Ódëñ¶°A—ø7Èò¼57bsH9Éêª·‰<ÖÝ)84êS'€ÐCdúÇiA†GšT?²›‡j¨ØùPIätÂUn&ü¹`¼�£`zŒ Èv@¾{Cª¤:;W
+|©Çq.Ù¶£øhé…9�@Òá=:‚ôÂz2"ÈŸ@)>È¤YÕÆu ¼0¿Ô¼Ëšw�DL@áÿÃÌ�¡¨y|d§Cªâ×Å½Xè
+„Î¹§÷–@|n„K-ÉÍî<ºt–´„h©«c–£îNxàÓ�ÝyS#·I�ÈÍ}Õ¿ˆÜP¿TjØÙ~Uçhí=(¤«SÂ  aQ}7Ô`�œB²Ò}ÙuÔ¦ŒHÀ°Äsˆ¨áÿ‹L)�kD¨nÁs
+ýc^€‡ªE~Éß«r¢€©W´/Ñse}¢Ž‡XƒõL‘ÙY,-�€PöOnÊW˜¡¼Ó“ç�/%^xçÃkàc‹9DÙce+WÇÅqåJí.Ù¡zÛ‡AÀƒô§‡ÏIÀ	Ð��†Ñ�G)r¹±¶P¢!À®T
+Ü}¬ÁBÙÞ(S ¨T×(ŒDUÄ8¸8"Ö·»žJÕZ�ù_@†Ä‚õ‰(4¶ù?f!OÍG’ÛÑèöxéŠ;œ%À
+™nFã1ÕHêðjUö¼†oò4\8ôP—ê½S Äzc^jîø¢Ó3Ø/Y%ßSÎJ¬¡Z©kæ¶“Óž{¢£'·¢+uI•"Òkfµ²€e6?É0€Õ­lÕ›~Oã@úx	Ð·nÍ}Ã+øŸWµë7päø’ä¾ ßüËRÈÑŸsvçXŒ!|(	ÈÄ	)–Øf¨•ô¨ÄÖsÅZ€<”B 3x.—µPoyMÃö³†ºX¸"¶~–69E�
+¼w§³v]·0D'ç”@4�M‘Ä]!]ô" ¡WÈÑ¨¶HÑîÌ0À;j7ðØ8�¢ô¤z;©%§!}$©‚Ëë¡ª"ž‹�Å-Ä[VT½€¶ãŽ‚ÏÞ¬WW†è&1�ÕÅÒ2MB½øŽgSO‚2.(È‡;Š„µáÀp<@•„Ý°üÇø¢i.0øy'O-äÞU_éUæñÊ+
+réð»†Šý‡ÖH1ç6B!Ýwüö#k<"¶¤ÿÊ6ÂÀ&Öá"o“
+^°uK.½³\A¸"�¶;ÓÚw
+’�­}Š˜Qdû�´p'Ü-{»\ÿ�»¨KqŽù…²ŸŠçaÆ	 úƒpLÌ	ÎJâ˜0&ðÁ'Š\™¿Ùó$Lö�Éþ¢-.B¦ø•Œˆ‰„!ÀÊÅ]õ…s;vŽÆ`:_64�O‘ÔáÃ¹	•HQ«ì«EM5oŠ¤%Õ¿5MÕ¶;~\|1{C1ÔÓ£âÆãz`)[¿ëk¼\oÌß¦¯Yºi I2P·�kX²úÍ‰c_îFÏ›ºÿ	{¢-×¨mC(Î=H}†++YñwO¯×Þ—|ëŸxNŠRÉ"¬X‡ ¢ýŽ¼ nÈê»–}‹Ü¢ ‡Wýá,C›”d¹“eìrÇbÊÔþcy±OÔÜÞa¾Üà¾`¬'þÂþ÷NF.õ¡n†ôaÐM)ˆ@o¦ òø¨‡ÄÍp-ä"‡ym‹ew\d1×HŽ¥_d´á¹?WKÄ‚~aÙeBÇ°åH?›¨éŸ§€ò‘Õmwxû„L¯€ìß›=õZÑ±èJàhŠ(£>
+µ²•ìi„x‰ŸÇrƒ€R¾Ô†gx
+ •ÏÙŒ(úiñ	 J¿Wd©ü b¾J BMÜ`Ì�Ò+ŒF‰À‰Ä’+†ôÀcGrù2«B™xV‹À=ÅÊ§Êöüñ˜¾õê9P?˜-ÿ:u'�¾Gs6PyhB
+ÙÏ‹fåäŸ(K§
+
+endstream
+endobj
+48 0 obj<</Length 23044/Filter/FlateDecode/Length1 42808>>stream
+H‰ÔVyXSW¿/	aÙ!àc«,n‚€ì›€(d”b€ !1	²9HRÀ]YŠ¢DD¶2¢‚ÕŠ
+nA¥-XkeŠ´²Ì‹`[�™ö¿Yîýîwß=Û=ç�ß9ï°d<ˆZèíÕÑVŽQFÐÜE´ .–·,@K€ÑBl:·¯{í>Ê\@JÛèØò‚Œ�-i»n,[fä¢ú2H}›�ãE"ØX
+%%ŽIßÜõX·€*Ì°ŽÃ**s=ÂÎqlAŠ˜H=€1»ß(�Ã #6yYd«ag2›žÂUøL@¥DM¤³™{FO žÆîärø,lˆHø\“ëª»£¸“Pâ`4äÝ”ì@s+¶«�wC“EšL¢¬IÎšœ7
+ˆ4N,ÒÁH8¡,†‹ˆ2óœ”€QD9S"B@D68„ €þ�ü;
+©\'“ÞMˆ|À	€	Ør’Lˆ~h� ´ñ—HÛ�§"®Ð+¯ç¶¸‹Ej— 'Y†8¥µËzVím �ÜÄÿT}ÓƒPáW?æŽðe9Ô&âƒ	rªKB˜<V +6
+â%ñ¨S�Ìám¡,…êyÕÅïÈ¨w"ÃœB†&óýß4Yl&( ³¹¬ÄX4�ÉÛÆb0ÑG@Y	©óÒ¦~4ÔÇÛÕÍÛÇ;hêêîîáä±šŒ1ŒmmÐï€:Klm …
+ß�ð¥
+p%¤@ª¥•­•møÿ~Â²ß¿sD
+à…û±÷¾'‚»æèxÜv²™¹�t†x¶Jþ¼²Bh_à·Ií–&gïMÊF¬œxš7+»èN¿VøW�Ã“»ÎmÙiøü/aJüø”Û[Õg¾›4þ",²ˆ0c­&$ÝÚZp_/Ìâ~‡šT–õÅ‚ÚFßµO_Úëý5¤$C·4!§e­Wq|c¥õýiY³»�¶GpxÐA�ùE^ì”Þš¯’¡¬t@¯ã^ƒªiÄÈêAù”cUÒ<�ÇÆ:²vøôûÑÇ*Þz:ú¯”/ã†L0Ù±´ë	£9•%Í7?]h´ç§µ5=›:ån)Éæv5ÔÝH5ÎÊ0w1ÖmMežÒ`3}ª4ðÉ¡n¾óÔÌQZV]p÷Œ2ƒEá·ˆñ8‡S’IcoäD¢]¼1ãþ£šÆÑÿGc˜¥RW}bë_A,~ïŸÜ?ù·™ü¿�ÌÚÎPƒ˜<6åÄ I|&J q—oga‘œœl¾
+SæcÊæÛ‚Ç¥K…Ê
+h(QÆ«êüqôP„è}Œc¢0ºN„  %�¾óùÙ*<CËT“þ0ó¼º¶xožcÓŠü,5ÛçÙ]ÆùÄ˜5xÚþZÕx}d·Å²Öƒ¯ÎK?¨ÛõtnÀo|º¾0ìÃlèÀ¤±F'÷€ÿõEM.ýWGÜ‚{'³_‡÷–�(xÅ{>¥&´´rE§Çª|Ôªåö¶Æ]£‡ÕðîMÁ5´ï,8ô»Ý·Dé×Ö]2º)Œ¹ÔyÚ‰v¶îôi
+rOc¦Ïf
+¶zÕ}å8šÙªùæ†¥PØnRøvG¤ÝÎ<µþó¤×c[†k¢®¸!µ´Úˆjg=J™ŠúÏüã:¢½Ógž8vîróÂu&)Ä,�ãÁ\²å])�^€ÂsÐ…(ƒut))iž` |†HŽ�$)XN8>÷Ã¤H(|]�Ä‡²XR´U±"pµä%8BIžå£rÖ 9Sfš@£÷†qÈÒeªJ¬A¹÷*x(/!*x±å_t³	#Š¬Ñ÷“�b@Ã¢ç
+—b³¯é¿ÈõTø›¦ï•‰íi(¤jÄíÍo¢–Œº`¯N\‘î„#‚
+Ýü,U¹›Ÿ?q	½)e8R_¯_óÄþöSýÉãM.Á'�¶YÛÙ2eøü
+jO}]s«”ÃœÇèõ‘>ƒî.Æ)Ùª·�µf\åâ‹°. ‚}Å~™ïŠà*Øëà°K¹Ûi’1úƒËÇM€K1…Æó… çÎá¦òX±q	ÊQŠ-V‘¾,�ÃçÄPw�kNÑ�¤yaõ9]Àâ$RtáòùÂÐø�/é¨k’ ŽÃc	R>M
+„6UM…ª%eáø_ðèÏŠ´wù*wÈþµŸ–QYqJ$|V^³ßðÓ©ÙBŸçg�–£NÛ×—)Ï�¢névÛœú²n[{Pßëç¥9¤Ü²¬˜†›[Ò¢õ{µ*"ù#E7šÍbŽû¤äŽ¹yÑ¹°O®zË9­*"×ÙV�zæ6�¥Øt8!˜^'Ú~<Ê,ÙçiIãfûÃþ$ŠŒ�ZYÍðAS�!ÇÏjQaRÌ2m›€�oªÆ
+p_kÝmöhØ�Ùl7Tàwj¦*�-ð«×è(’5Ò¡yQ,›¦u*Ò!so+bäd*{„!¡c_ÚG.&ú&¯œÊ,œ=Ý¹£·J“·ÑáÖ¥q™z°�˜ÝÞ€&«fÿ°P¤ÕPx
+Ë%èGÂÃPXœ©q‡;ÆâÓ_Ÿ¡vÖ÷ÀÜíã¼ÿ|þD‚q¼$‡…#ò-û'Š5¬^\@¾MVžØE-;&ÛIêà®Üv»!Ý×ã¡‡ÈçÄ^mÑcÓßtØÛ‡×X±f
+ØÎíµ¥¶OÙïX¦Ä�ošU¡i°Z¦ï¸(‡£´gÑéõµËÚLmÍ®0�«ì1TdœxDúY·½W}" .Ñ�*=#Z:õ$6AaýäåW­—‡oÀi”"»K»ÐXÓ÷¾6îä«ÌGøÆˆ¿Ÿù¾-ô%Ó»5 èËF¼‘Ê\^ï¸LnÆ…â›_Ø�Ó«“¶‰Á�xç«=Ö{¹ªT[ÅkÅ÷[ýx�D¬ö ´…[®Jô%)DŸ—+ßw÷~�³g')¸’Û¯b·óPRYU�ë
+íØ¿Á™…ƒxùZxX«üêË<ªõ�ã³û FÖLÙ÷sÅ\Û²F2¶®Ò0Ba4†yQ‰iÑ2.åê†ÒEJ+#)tE\é*ÙJq+‰\²äž¡Åmyýþûý~�Îyžçûœó<çù|ßßï÷~»mö™ª�ÿ, ,˜öf %°M ¹Ÿ<
+-‹ðöeACDVÌ—Å\ôi#è–^B�¤EQ?®Lì{+ûÞ6‰óWÛT–/lCiñŠûPÐ„ýµ$"D
+Ü×4‘ÐDdž&y{°^íâÆ4sŽ \3f¼=r•úš±?Ùý³gë¦jõýÜnòËDÃñ\ÞO^ÎS×üMâ•R6Á‘gáE®%‘ÓMMüµÇ•/¶w¸hÙðêøiGûœG#Û‡ŽZ?º;Rà½ê¼ñ¦¦$Š×™ì"¥pÕµ##XïK-m½þ¨ìœÄ	�ò˜ŸgKSØ—ö_Zã¡æ.Ã3Iê‘$Piöõ¦•.97
+Tß	©»oÒM»£7º';ëü™.±èím¦ÄôÓW7×(«æ›`rÈH%›céåwž[¡$•´	‹�’b§„­z˜ 8Å".jÖú˜°«ÜøêY,ì‰c§Ç3¡gIš82Ÿ×�þ‡Æ·â+òÇ@Œ4ZôCù‰…C™6ŸoªbPò(9Ý€kÊeM&Ã×sýwNô7ÕJšêŠŸ&È!PËÄ`^°X¨T%Áˆ‹
+øj@j>‡�ÃçPBº}f~}ÙÄ]3'ª�˜ÌìŽÅ:ßR¥ÊÒk�®Ãÿw×´�®É�É{f~ÐœºÂ®çš±ÞÝ«mèÆzÕO”öîèò±z»¢õþÍÈýÉXû@ênjmÑ¯»ÒW¹H]¼OI‹‹ëíÐœÓØ“™Šò!ÿÊU!X³nŸNa«°]ãyÎSñá5òùØ5=Ôç€eÕÙ~zºVÅnÛÇÊax+ìd±]e…L‰Ï³éyzÉíjîyÞUÚiÑyÊsäƒ¬É®ÜË›Š–òÑ7_”�X/+=Tõ\ŒS÷!mÒLðà°FÊÏU+ï
+‚ãøŽ�=ñ	@qø>—i¶Lµr*Ù`	IA0›X€™EX†\¦‹–� ÄùQ ! 0Ã›€™™©¹€~&üÌ rGÐ’¹ÿí�à¿çFÈï¼ì?¦Qg³*-Î(h¿Õ·w³ÙÁ4*äóî±%kŒ‡¼'Wÿ�ÍÙñºoœï(9{×ˆX/ÁMz�¶>i<zxüÞ¯Aß²—<8rXúú˜~•b?2G|ŸêØ%vù¬¸ªeŒV±¯~£n6�…ícæÛ®C:Q]¡6dú÷˜ÙwïÝ“�@î±/š·ÞýØŸ?ÚSP‰uÜ¦¨©þ'Ÿ–£ß³åç7qBñº3·|ÓìEözä7H­võæ³�2]R‹ˆèú9É¡0ß`ú­pßRÒ]<èVz@ÒÒ‹ŸÙµ"TããÓ§ÓžÎûÊ-[4Û^æ"))Ea¶õ“}È�»BinýËù£R•øùB!ñM~fÊÖ†Ûž¸‘RãVNÙ…]µ®”§¬Ó’‹ãê¨d.�œ›ôMîp§þ¼ü:Áp,U
+Eˆ€
+ÇŠóÓ>‹%]0=Â(òã{æ+¯è­á‚^ãh:�Ìˆ1¸‹À[ O1‚¾ðòy$š©ÏÊ’g†ºGIÈ%L–4Ï*úŸÿ�œöê*Ì*âä¬<Ž|ÁrTY^)Çj+Z/áÝL²+mRÞpi�²ZÒ¯Z(\˜–Ÿèà§|4ópøÈ#ó1§¯£m¯vñ¼“n"k�ÊtºÅX˜zÒÓ§
+åèGl#¢êº'³_‹W-cx¯
+›·¥„©÷–<SØYî?­_ëÇ¿r "p¶Õ –V®~ErÎrTÆ�1*ŠÎRxD»¹®°DU_þ¢Ïëî_¡îo]Yç†¤ºáS=›vmvÜÀ7ˆ¾³Ý½]Å–x´Ìî]ÆŽ¼sb¹-êÒÖl×>LÓª
+›*°9©þ¢áÄõ�%¤a‹€*ÜdÞ¾Á[-²p¬èT9É€Ü§˜©…‘ÐQCv‚HúáôE‘ Zìƒ	Ž‚Vÿ¹%b€Å£XHµŸ&¢À%(i�jþ¯CˆÂ2sƒÉÚ4€±È\ÜP9„$sF‡…Ã(°f£Aw*ô´zŠ‚1 'XdÙzp0˜€\­$�g2™_HœM¥S¢Ãâ¿LQ,8;ùGlh¤ÏŠý
+\öîñ4üÃV#µc™eÚ·ÚÜÇqÄCý.'2¥ÇìÂ}ÑÇÃI�šêÆ5Vž¢×ÿ>ãöT/Õzz˜¨ýüUÅ–ûµtÖHÐÒ{“É·wvp^QÛŠ•íY»âÛ)¢%¹:½Jð§7J¸dOµ<m¹4bðÒ¸×t»uÛ¶)!^ÅPõš¶®>g“"iÎÙ‚½ëUsýf¯ü7£ÁFÄD©‡®¤î,G€8¡ù>äHÐ“4Ñ‹Ly}„dk õòm{ë*Û—©åzýS–†ã¼ü2
+LàP‘J½¹Ç©ÌÌZõÄÞ[õà7EúC¿:É€_Hqœ²:3C™Ý—wÊî0à²náôù¼Ð au™Íë»Â¨6OGH«ò>!ôp�¦pdzlçÂ`Òè[Á¥vA¬˜�8ç¨`#ÐÐ[Pÿ<3<Ò%ƒ-¦W=.<8dj )€_°Öw÷À¹9íœÝœÉþ8"‰ä°–ì`o p¢ÿþBZ$!2€”áQQ;Kê•S8ñ…ºý…Å2ÿÔ†C*þ4"J	2Íñ ¸Êdåú¯TÜy¸ÞçÅ§É-Ó^Øu ãzÂ<¬Q>°7!ýÔÚšÑ9‘×WŠ
+_+.±%í~Ü"â?pZ5„OP¡±G˜ë†Pçw"ƒ;ÉãnÅÕ¶¼ˆ•sZ¿w5·Ýù…cØÌï‹#ÑãÓ0žÈ”3Œ'ù]ïo‘·OêñÏ4…kÝ³wè
+`óÀ`­;�úJc~rË“jFc2ÏêDqR­Ÿæ´³ÿá»Z kºÒð÷ï³Ï½yBróÐ“\ÂHÒÖ3AÉ½!‘ˆ’í�DWBG)•>2"&ÓK[¯SjÐjÔ£=!­gˆvé´†jV0¤ª¥Je-e”Q¹gþsÃ¬5Ý{�sÿ³÷¿ÿ÷ÿ�{F&ŸÒ-õÉ8ëÛ”¿rrœ­yO÷’Ñ
+ÿÇ«Ùs·ÏQ»Î®^¿¨$ÓŠŠgî”­È8çúðÓÔ¢uó7÷uŽ.y!ðL÷åsSëÆvZØLÍ7&ì[žûÓÈÒóóz”U­v¾6{oâa£¦æäDÇ×¹f\|ò|ãÏ£_ÌYõ˜	/¤œû¡ê[j~Œ¸÷«4âYÑÁGþV)Ì!�òêß{	>æmLéÌRîjÍ¸«6y²©�uíH†aîª{é½j)c	þsyJŒæžù+®°Î¨{×ý±ÛðwêAvÒ„â6Ù¨2 q‹�îC´áM„`<VQtEg<…Æ&Åa	­1æ—1Ë±ÑØE•ÆÞŸá6[pN‘ÉüO12]V."Ïx‹}©†?auf,;Åó&Û°+q€^2n³ÖT²¼dÆ»aÆ!ã.zb‰\ªžöýË°�,F¡Q‚.ˆ�[Ä§Œo‹<¼ƒmlS5ÈˆÆ,Âj²)Ÿ1õ&Þ…‡Ä%M=Èš2'gbÜØ‚#Ô�²ÔÓê5ãEã,èˆlS	.S?#6ÉcˆÑŒ|ìÁçì¯9d¾¬Qó=C�·�OÐ	»È�öÓ!µ·úzÛcƒñØž^‘LÖ3ù{íü„ë¢Â¨ÀþØš‡ÃEÅrÄO	›xE¼¢41RÃ¶öyü:gd/ö¡žcó5Zp‘B(‚FÒTZF×E€(Ç•5J�rB’|ŸãmG7ŽQ6ácÅ1'•å?IY4�JéOô6µ]\·¤�\(‘mj¬§Åó‹‘iÜDÂ1å¨àØ¾ƒ�¨Ã—8‰ë¸�Ÿ)˜’¨˜6�N-tUøŠ1VÌ«Ä&±]ÉT–)‡d?™*gÈc²YýƒºØZ`õÜ}Ï³Â³ÝÓhì2¹v‚X~,¿¡J°€«b¢‰¥ŸÁ78oÖËD“èiÖ2‡þH+i;¦FºÂ^Â;cÄ á`­¥âw§J±B¬díÇy~%šÅ7âGqSQ•¥¿2[Ù èÊnå+å{,cåã²—+'Iƒ3Ó[®æ¨›Õ­ê'ê5K²¥È2ËòƒµÒZås´­gÛ9<ÅÝ³“k×‡+©œ#±¹îë8G8¢_²Å-ø'g!œ¢©;Û=€Òi�¡‰4™¦Q%UÓrZMkh#}À°ÂÊ¶Ç‰a"Gˆi¢JT‹×DÏ½âqJœ­ly¨bWâ”^J†2IÉWf²eÊ+JGv™²E9®4)—””VÎZ¨ì"Ÿ—åòÏ²FÖÉFu´ú[žÕƒjƒÚ¨ÞUïZ„%ÜiyÂ2Ý²ÙrÞj±ö·fY_µž°Þð™E‘Ô“-×ðÐ6îÁ.b‹‘ÔÊQ$ÑŽ=�ã<äpWÜÀPÅÃy	2÷Ù¶NÂ&;š'-)Rçóe´ýè0*,æ×dvÐYÑ"?ƒq’\d“5ÊLõˆˆÆVF£¥b¿ØG©¨Éb‚X«€.Òf\äz+iÍÁVj¥�ô2%RNˆÎJU!ÙØ($ùR][€²OãW
+ÀY\ö¬“�ò%Æ§ÝXÅÝ†oé}Ü!Õ¸Êè¦00Ê,áz_õ¦pŸUp?ÚAž³GYk¢eˆ,Ç5ü—Õ½\Q©Œ¤—<%r�üÎH4¸Ã¸Ë°™û®Ã¹c.r•Ôó³ù4™;Ý�±¤7wu&ñÿ´—õ–º±ÖXhÌ7Jñ7>{‡âé­çŽØÍ'’ñ9Ï7p†sÿu?ÿßð¡W(ŒºQoî‡Vu®ºTÝ¢Ö©Ôc–^í*¬áŠ>ÏÕìÇ¢Wp‹|876Ä£/Û›Ä¶çâ9‘§Ô#�Â1‹{¶ãxê}Oæ°”JŽÞZîçzî�kŒ“q§IP({TÈú}XÎ(Žó3Ìýgp!íä•"Fížø‘ý¢$QÆúRXÒ*F­¶é,¾çh^»â4�eÝÂD±†þÈ¢ZÎÀÇÀÈêPŽr¼»R0R)†Þås.îÐ Da€ú	Ä{2�$Q¢Ôó;ÆàõõüöŠÀ`šÍV´c?ÚÐ‰Æ¢ŸgÛÐ¤Ÿ2tÈàäA$%öëÛ‡ÿæ<ñxB|\ÏßôèÛ­«=&Z{¬KTdD¸-,´s§�ŽÚ·
+ð÷óõ±ZT©B¼ÓžîÒôX—.cí#F$˜Ïö^(xhÁ¥k¼”þ(�®¹¼lÚ£œ)Ìùìÿp¦ÜãLyÀIÁZ2’â5§]Ó�9ìÚnš”�Ëôk{ž¦·zé1^z©—d::šhÎ°b‡¦“Ksêés‹ÝN—ƒÅÕúû¥ÙÓ¦ù%Ä£ÖÏŸI¦ôPû¬Z
+B^B„:Ö
+ø²Qz¸ÝáÔmv‡i�®tséYÙ¹NGDtt^B¼Ni…ö©:ì©z»8/Ò¼jtKšnõªÑJLo°X«�op/ÙŒ©®¸€"{QÁä\])È3u´�c½=´üBØYx‡´Üê‡w#·3¬D3ÝîjMoÈÎ}x7Ú¼çå±>+º¥»Üé¬z	qTŽÆÚÄ¢¼\�±JÍôÄôêžÓìNsÅ5]Ó}í©öb÷t§&Ü­cÜüèáá){Œ„;5÷ø\{´>4ÂžWàˆ¬
+�{Üü�¶ÍöèNB|mpû{�­
+jwŸ|˜˜ö`ÏKyÙMjÔ¸‘%Ó"{„®jlI®�}J2oÓ’à.Lb6yÄ§ô"ÎÈ¿¹¯ú ¨®+~Þ{÷½·›lj¡
+“¸dÁ‚Æ�ˆVW©-
+¸ “ ~4J[m˜0±3!Ôi+Y¤õ[T´6ib¦]Œ¬`Ûµvj4¥ÉLBš±™ŒÅ’ªh§™h“Bôõwî{o]V­M3ý§Ìþ8÷žsÏ½çžû»oUxDAuÈ›Ïzöë^¿/t…Àÿ¥‹Ã5K�‘á½B\džÄ¨»[gg‡Ç�gŠ˜XSÄ8KÖ§LÈ©�¨Sýk½>¤�J�Û¥•ù¹Hz:/ps$@5¨„KƒvÝG5i‡(�›]V«Ùu-Éålit-1÷j?˜|˜pýPrØ“ûÝåM5ï±ü°’òoÌ+l{ÑBQiUÐ7/Tíä¶¨lXÍ¶?³9¥ð¨‚ –¦:%5M“V�rI¬1W‚#Ã"?C’zyX)¥Bñ†½Õóíÿ•Iéé·ô‰˜ž8§ˆõwö’âº›e8?{x}Æ°ú°èF†4Ä+2Õ¢²ªP(i˜­P(Tè÷†ªCK#Vc�ßçõ‡Ž¨Ô¡µóªÝ�X]ÍiáÂ�•˜ÄcJ>ÈªÒÜN¿ÒTÚPšV�x‰|MeÁCª¢TÏ­ìülÁ#xŠ¤V�i¹æã) ú!Õ#MiGD�Ò*¤BÖ—E’:�«ShYDµu^©Ãßâµ7g]+¦/
+^ËôJMüŸ2•:ÝA;E´×h­¨£Ï…æ=T©Ÿ *å¯´¶Z @»ßX©íŸ@½r«:ÝºŠöÀ³ÀÀC@&°Xä`!0>'�vôñ(÷#åYZmöÐW0;€¥À6½‚¶Ã¶Ó˜N5¬ÇXÑ‡å]Ðï5Úi3Ê­°Wr[)Ù¿‚¾{Ê[õ
+Ë2[È„ŽP¾
+}
+ÆßÂ1Cfbü:Qg]By<úþì Ë!ËœxGËòYö‘så9>Ãeä§úÍÀ XŒü°üÆ¢Þ‚òˆkäHàN|ÚÞ‡63ñVCNÀøÎ¼IÎóˆÍ	ñË˜nÎéœx &ž×y x#.¶D´C^Èõã9˜¡öÐ\äåÏKï·>bxˆÞÁ¼ºïÑ‰²Úçlý0µ¢>	˜)QGŠh£5Úe¬Áaú®±ƒ~
+=©�P†z‘R�š†üÑÿ"`ú<.ù°œc°.BŽý”Š¾ª�Õû¤›'Î
+êó±®A´ýe<jéûÀ*ä xœãÃø¹œs¬ûGJÅµ—ÐöÆ)b`Ì±˜»½®ôü¿ƒ¾9Ž½¶`_�œþø5pŒcp!yæ@öÕNšÚn}9
+Hz€ÍÌ7 ØÏm0~Ú'I¾‚3ÌMæsC?!¹º�c·ç ÷B³³g¾ÿÅÀ`œq�–8‡¶œŸæ,ï·oæóÚ•’ÓµÌ{åÏ“9'·éQ*åä¸à–+yß¡ßu,ñ]Â1íÖzis–ùæJÎs�÷#ï	G–ÄÍ5ÇÙ#9ð¿Wr\t¥›‹˜|�v£Ï
+c3x:@Åâ4ã%\¬¯ƒÜ‚ù�óø¢Ð²éaO”²°–ÃwW‚le˜½ÊjŒõcÑ�\ôÒ^™×^õ>Ñ«èz‡u^'å¤Þ¡6Èò
+2JÔ¶±dÄÛ>­þ¿�ú¶ÞA+Q¾ ÷Zæ³…÷„9 ä>WBhÆ{²•VO­1ËÉ‹O¾ËÀ |=@ÓD”f‹d
+ OÐ—_•çî&ôB ¬×Ídòkçq6b,õmÜ÷ùP�†q.‘K®tùš(™3|îBê�c°ïº€nà´ƒ?}àã·åþÅÝÀç³¼pF-6_­K1~ž¤6È¹üLàéø~š‰¼L”|·ðù.ïìSÄÑâÎŸÏG>ãøŒäsŽï>·}¢ŒóßŽ³ã�òî¡*g_gy@.ú8êœ#ÝZÄºŒ=zÎxÓê6g[ÝÚ)«ÛØe½`ÖZ¯‡­6Ì;+v§Fí³Œ÷“{—ržø^tïQ=“V:çÙnÙãË{´Bžd¬Ãþ[M5è÷÷|¯ò>ÔÚ°ï�Oô·^¼Hß}´	±ß¥ýÂÖ‹…TÌg¢¨Gzœél¿CÛ$íÄ‡T/²P~rÝm˜Toü†}¬©;kÛX§WÑNð.W<C?Ó;)ÈkÅóP§X§xí±çS=�´×$p¸�v‹AÌ9Š9ž�r�äû¾b
+òüÌôE]Ãü¸
+À>ú^ò9ùØ!s•9Ú.9Œ\pŸÆ[ò½Aú;hÿzÊ“D»=÷ã|ºB©&Î9V'-òdÞ…¼¯?ÀþÇÊ©Iÿ‚õOÉÿƒ–¥
+b
+`1ð´Ó“iŒ>@{°—šd~lÙÌûG dææW&ßàøóô¸ÑA�(x×‹» ë6€¹ÔÒƒ(oÖÚÎCÄcC_*ß'|O¬7x¿˜Qm0>Úpòý‡qµ~Ä»•šp–ÌñÐs†�ß5ŠîÝL´!ëO
+ÀFRçµ¥’Ž>ž’úôªÚ®©à7ÛOŠ—°÷öÐí%‰•x?\ õj.mÐŠÁ»K¸34ø¡.rhœv‰Š´�åý³AO¢i²]
+îñsT"*á¥åâ-×,”GÛÁGøéªÒ—á�õúq N…Ï*1šQÎµr;9ÆÇV
+C¬£IÒ/2Vó³q1oGn¿>p¼(ÇÇË±Æâtb¼Y|ržÜ/üd›?Ñ"ë] Ã–×JÕêö«§ñ�Rƒ²ÃêRÚ¨PéÚ¼Ló¥ìJ©P4(M@	 DíƒœyèÚ€£ÀßÄúú>ù
+0Ô_áì‚„ýyà—À{®-<ÖÍôñï[]ñu}Mg¨98Ós†Ûdû}4Y<‰s8Ïêbhõ”Ä0î¤,ÓCYjôðK¨ëãh§Xƒv·‰çvP^§<™C�ø9ºë™òàÝ8éc‰ý5�ïçÏã§Ö÷ià2ÿûéË’Cçð&7­ãÊQzD9c
+â<7v�Re>÷ÑÝî:Aß$õ	ë®LÕ�–¨Gy&Ã­'®ëíêèwU<\¸0'Q€!ÞC{ ±Žû À0˜c97ÖcãÞ
+e4y*eˆ¥ïÆºá¥\†ºõVØß§û±ze1¸-¹õ3�ë.†ÚGémldûYŒ¸¼9¯Z”}¥¿\—ç‰ë_¿Åyô¼™Ë(5QÆøíœÃ8_jó=Vç³¤?¡Íõ=q}o`¯ÜªÏÿ'`ïœN¿ûŸŽž+®^Â›îM¼7Âx«>‡oÌ×¨…èjÑÐ1¢OÅ94òeèÊQÎ„ü
+Ý*HÜFCgP^Û[@°_¤Ñ“Î»rêólß«/8ýeØþì7ˆ×ÎÐTÛh°å?`ÙÐqÈm�WÐ>¿JÈèÖCNF½ä_´—ol“ÇÇï�ñã¤IlB0.!ÜÓÇ$!�ç††”<JµfS\H‘3†êÑvÒ6­X#)´$eŠDBIÝU›Ö?j¼I‹ÐÍ“Ç%u–°¸ë*¡V¯S5˜4Í/Ø‹iTð¢lšDç}ïü˜!Sš¦Û}ï{÷<÷¹çž»Çw¿ƒv ü;”» †ü ¿Bèç
+„17:À¿
+=)ã‘�9‡þoýç�Oëèã7¡½*æDËÏŸÚKó¹ˆ—Ÿ5Jó¿˜—Î·¹=ˆùÞ‘ºåìó‰gœ’c>ÿiëCèªc´ðbJMÅÑˆeUÌ-ãGÛU¼ý¾Š'©Š)mÇxÊ~TÉØYÆ¯ðWÔ9ïús€|	ýÚ­úUÚGnY[Ùò8äµ…u�lC�÷ÐŸkô$qÓ“…ëˆ-“RroSû„}÷]¸kî�/\‡ŸG¹{YEiO+­­·­±·ïiÿ×òR÷ÈÏ°§öÚúF™J×¿n«ü~‡­F©ò½x©ZlïþÌ{ùöè[÷éÿ¶\ÚçKZ,.-�+/ÖÞRËåqÇ-åi©O¸¯ÊåqI©\®Ûîßþíã™Õø½•Tö»[ªð;ÝêØ_¸Tú½–úPþ;¾ù{+�†Èvèþ’cýX�u¤zÖ>w5!�=°pHîo®$ä:MB(Ÿ�fäšï/î}…géëˆ¥ÿ�ÀžükeÍq^Õ�Ùê_ì{.ÿne|®âCŒ™ê{sñ!é€¶@µÐ4ôí›s�3$ž}Žcç•ç\~¹pm]¿S,x'Ç9ï;ò¼‡²e÷¯H	K'%¢�å?N{êBF†¿˜v¯ÿ!‰BŒ˜üË$1²Ÿ?O† †ê=VûçB³2“®¬	yPÿ8Ñ¡aˆ“RªÊ$ëO¯ðÊæ¿o¹—+î°ì,fÒ_(©ãß%”?ÎŸ MDð#ðµðGá
+ð}ü1R­úi¤ÝžÐ0ž×�êÝ|%iÁí÷bNßŽï®^U´jŠÏ´Ö·†"•|÷©*n^M:á.®Y!¡Ïq=5ø±tÅ]²Ç,ÏÊÐY>Â5R‡ZÃ¨µJ¸ÏòJÒÉ7éKWT‡’‘*Þ‡×ìÃ°ô‘’	•ü	
+áy÷ó5Ä‹{ßâ
+d%|_k­Ù9þ‚ªöÙ
+ž×e¹î“–®®	e#¼wM>ŽWOK¦›7…H¤™¯'AˆaP‡�BÎÃÇ�Ã4�ajÆ05cèÅbMÂGqgu:ø!’àIš@Þ�&WZÁY•Y·>4Ëïæ>Œ„gcGquuº¢FöÌgÕ®PÕ|éªšP÷Y~€ôB�H¯ò…öÏñVõ*Ò¾z	$¬Š*Ýªâ\ôÊ98Ë×ðµj$Ô˜�2%n.eï°œö{ö¾œ_veéïÚ~Þöß½�e¹4žbdØ{Òó‘5ì/hìö'2�csì-ðG–‘½`—Ø,é†_Dù1ø,ü>ø/­{Î‰Ë¤aèûËVµW¾,{Ëjë°3ÂogVÕÛ™Zo(âg¿fo’5hâðuð7Y–4Âà>x–
+�sð3l#ÙÝöß°yùM³7ØÙO[5²¦¥I›²œÒ^³H±íóì5vŠ¬FÕÓVój\=™n^'Üsh�²Ÿ±«AÔF*ÙOhË…`)rQ:©e?µÂ²‘¤5¯‹Y–dIÃ6üF»1Éƒþ`{p’ë~½]ë“zÄÃÆÉ2~°ì8Ò0Ñ¾È€’lÔr„ÍÈGx'ù^Œ#M©\iBåRÏÍ»×T®›� äA.ÉŽ@CÐ0ôq =†ž‚žVW Aè –�ˆˆˆ„"   ŠH¨§B’ˆƒˆƒˆƒˆ+""""®Ùß8ˆ¸"¢ ¢ ¢ ¢Šˆ‚ˆ‚ˆ‚ˆ*"
+"
+"ª„Âa(Âa€0@Š0@ EAAATDDDP:„BW„B¡ƒÐ¡ƒÐAèŠð€ð€ð€ð(ÂÂÂÂ£�šŸAHyyyyEäAäAäAä‘‘‘g§y.ò6���œBr@r@r@r
+ÉÉÉÙ¯> ƒá³9
+AÃ�d³`³`³`³ŠÍªÏk’¬	Âa‚0a‚0A˜ LE˜ L¦"R R R RŠH�H�H�H)"¥>ÜAHKÿ(—<5ìsaseÃ´Eù¹¢ü¹¨üi2­ü)2©ü09ªü	+?Hš•£=åD¸¨%ÂîˆK@/ô´š€¦ HS¹ÐŸ¡Ûh4:ÜZ¯6¡MiÚ²)-¯1·³×9áœr.8—M9óN¦GêYµZG±´�çT:„ô*„Mi·Êu³N<·ëìFüw²NcùúÕVz¡•.´Ò©Vú\+�T°¨C­t:	3tœÆŒªæ.q
+7º°2�Ï\Y%¬æÏ‹�/Z‹Ñ¿MC“ÐQ(… vÈ	u­õcF£Ýä<€î�tùâõ"V«]î2fY5�L¿]M*äsëÁÍY� ,czaoX�}"RAgH@†Aôfî|Ê—qûtÑ~a‰9ØIKtÂöZ�{a{¬Ày©¦á�hŸí»ðÞÒwZb7ª=d‰X›h–µ[ñ ?î¶Ð¹÷ÛÔºâ“š,±Öh‰Í²¶‹äÄS'iWÝ[Içitèê,�9¨q—ø@¼ ®ÿŸÇ%=ã€]ðgèn£RÌ·¿ŠÊaE*e}ìÓ¶›ÒÏˆIÿ¨xmQÿŒxQÜ+ÆÛ3.\>�~�ªGXâ¨ža§ŒbXÅ@ûeq@<(¾&vŠ½~\·ÄWÅ¼ì&é§1vjFDÑàñ~K<àÏ¨.îß†ˆÍú¼_²©Øn¸}^Ž	Ÿ¾ãÛêÏÈoüáp†.7ZµkZRÛ£mÕ¶hMZ£¶VkÐê\µ.�«ÆUåªt¹\N—ÃÅ\ÄU—)ä�6‚Ï¶Ç9˜Ó!S‡Ê{˜L‘ %Œºy�˜+xëÙµ•ö˜ÙGIÏ>Ýüû®¦­|è+æ²¦­Ô¬í!=}[ÍMm=­°Ó·õ˜ZtOlšÒñ~\5Ù±%}±-ÈK#õfí6Ü$#'êg	¥w�œèï'>ï“Ý¾îÚ®å›wlÿ˜$n§mÿùóÝšm0Ô³+fþ¼¡ÿß¤W}pÇßÝÛ»ÓÉwÖÉ–e}ø"	YÂ :þ�¿TÔèü¡â*@ Fj"0¤æ#)Æ6¦CbÒhèd2¸C›vZ¦qÚ›2�D¶‰±�¤˜šIJ:�Ò’dD3™2Rhƒgò¥‚å¾=Û�Ný_OÚÝ»}¿Ý·÷{ïíÞËT³›y-ÕšùÎ&ïÉIb!J¼e’ä³&•œ¤ûˆ%þë§ûZR»fÀÀ›ó†V²`¦&äe0ØOšl´€ÂpÀùX8³‚‚.hVÅ7’õÆ[F¼^iTÖÀdèðÛ2(¿'
+'ý^ca«Œ‰<€”{†ï:c"6”e*îC‹�Ú{�ZC‡ïc<[ÙÆV˜Ðÿyu4…ðXUoÿL¼Ão÷Ç; ´g^<ÐéÈ<¿Ãëéïeo†¶ïx²“µÛ;2½þŽ–L¿¿Å;R5³Œx†‰«ü-#h&¾992£w´ŒVéUqÿö–ÔX,šlü/]ß»§+]f²(›,ÉtÅ—72qŒéjdº™®˜3tÅw1¿ß�1¡¦TóíÉ3ƒ·»}©&»ºï!æÐ“k|Ž~÷EøÊ¥2²¿)£@a¢òÆòF&‚8c¢|è¶,Šýk|î)|jQ¤B·Õß„–¨EÔš©ÝØšñmúF’¹JFß¾¼ÍºÙeˆ(¾«þðÜcø}‰º—½z–»z{{»YÕêF¨5³zSk¦n#¬DAU{K
+ú\êã8£oD’âóÓ Á"pSÇîB8êfÈºD2(Š„¥
+=c.­ú[oÃ	~
+äq¤o´¢ÊÈ"úÆVXþÒ3VQ»ÐB~ÊÚQ—¯4ŒÕÃPÖZÝZ7��ò�úÁÀ`ù`½½ãCÐébGéhÅ‡zBÝKDÀmO
+È†e1}¯Ž–h†âAv
+¥BÝØàëÉÆK¤ß#¶{qÖncúž%ƒ,ôw£ð‚0Ô»4¨wqˆ!ì5†
+aë…-˜‡|M‰¨éÁ9Aœ 1½ñ4Ç!³Hs9MŸ#Ü[8ˆ$œÁä©·£sÑGÕ[ÑÄ\Åà^½UU¥Ïê³ ‚�ÝõrÓwu}Ž¼tšíô' úv‚®R½ˆ4 3	Zà¬ñBzH‘“î<àÁ”éÄŠ%f«*Ã0×	ìÄÎÜu8?7�¬á/Ãè]ƒ}ál„pð
+°Nü)qñÜ§0Ë‰½Æ,‰ÙGÕÛ‰YX[,úÿ`è9õBU¥ˆÃ˜Ã{.ç¾ïäoÞ±Áû£¶ùë4ŸŸFù°ŒzëAó1ó0>-ž–†óÏJ¿•LmÖ”=åjóì´vÚ;];=¦‰uR�²Ž¬âÒW•aéwä¢pAº \!	ïKï+VÕáuó”@�½Æ1dR<–
+±èðdB¼–]O1u­°eóœ¾Ë¿¹¿Þ.¶àÙP+U•8�Òi\]l·ª¢à_�¬j}]ñ
+A¬ªÝ®®«¯³ªÁ ©þààñ�¾>ÌÝ�:¼Á®Õ¬/4üô�Ïä¶åÚÇ_ÆëðþÙøËoÜüt®ózãæ½˜`r¾ìòs08�P›.í!‡ ëä…/À±m<æ'ÈÖ³&‰ÇH–Ð›p–HKÓºÂ#ê¡^š¡”:ÍSx¢óEÌ7âo¥g#U•(íóY±¶®´>Ìs×òÇg0©¼FýñùÒ‹ßežFˆÊ°
+Çômo8Æ]“î÷è»ŽKŽKÎK.S³»¹¤Yksþ”þÐqš•˜—•	õ®µ´ÙÑìlv™J¥ÎRgÒ6zÌqÒ}²ä¤vºä´f*@šªyµ*í€vDÐ>ÔL³‹ÝVT£U¶h*Ø�0ÔÁ�X�ƒ�ÐyuŒ`ÙÂ¾×ü¹B&2³�<TÈKY»¯‡%»<–¬ÚGœ,ð–aÁh4¡‚çB]× ,Bé®¨µ ‚­áPšE?Òæ§G­¶†Q‹Ñèùj„šÔo²Bk�,ljD Í›“zžävº‰»ÓB„`"ø§SÌ3Z7&ßFîù«¨Š6µ¡¡!…»Òà/V_]A=øFmMÐÎ¨+
+WÛ‹là6T©|w¥:xó×¡/w¤’�¦Ü
+'6½såß'Â¹ÛÛ1ŸûüXúh$¶åë[;v*¹ñÞ?^{rlGã­
+Af¥ÄŠ¬´
+]Ñ«_(ºXD•¼XB†¸_òÃ¶qnŠ·ýÙñ±Ód·á—ì/|µP\\h÷yU6OàR]^¯`]9®EÁö	Lt‹§°¢�2z‡Ü<ÊßPÁ¯Àÿ€œjè¦C+•Œ<
+6�íjö°ç¸çÏëžsÞsUÌ®/Å¥®�=[Ü‡³È¹ú^0ÝZ'ð@k¤"½hV±Ç®YÌÈŒ,RÊXR�>”.±e°'ÖÛïÑø	C$ÙD;TÈ¿¢4�UeÿÆ-}û«kõì?˜\·ö©¼Üœûé™oÿá¹�—û”ûÛŸÞÍÝÁG}�ÏÙ·ûÙ¢O¸][I~³ýKG_yüÈÞcç»Ýo=Ÿûìˆ' —¶¯f¤ ¿èÙ«D$Ù)‡äMòù¯²0«`�Úi€–)k•Ç•aå¬òŽ"aøÊ–EäÍyŠˆdYQ&ðkº‹£6Ž£‘©Â)„š‘¨+ÓÊ%xx—!lùgÆ¥0AÎv†?nÆffˆòÑs"'º,1r˜âÌŸÂ_Ãk�¨¾Ö¥ÞN' ¶Y`Ç`ÛŸKG…ƒÃ‚Ûb)ì±‹eÉuËå¯È	ù÷òÇ2�œè
+ÁÙP‹ÃÖp‘ßŠ­˜ôÏ�"ÏÞÏ}–{¯¼ÍýâîÖå®�ð?syF~€øsüœMfÜ8‰Äù¬.ÕGj„2¨Dæ RYm� COY}ƒo%È Z…VÓÕ|™¹Bn@õ|LÞ�v“î)¾Ó´Ó|ƒ³<"yæÌ’DE	c/á0‰R//Øx^0™u—ö�™©Èsi5æá8�²¤UÏDÂSÈ×Lrq±öŠí�Ný‡ír��â8ãøÎìsæv÷Ö÷öÙ‡÷n±}øìãp®€Á�·Ä‚Ë#%<9pBÔª‚0Q&$~$H%åQ¥Å-¤� ”‡ „6TmS…¢”Š”R
+
+ª(J	·î7çƒ(R½º�õj´w3ûÿ~ÿÿÏ@)Ô	î2€GÚ¤Œ é$˜â‘œ3ˆ	$-v-ZrßâŠïd²·3ÙPnÆ7[¯-ë
+æô›°›£�‰¼iu?¦;bƒlÔ×wŸ93¼·o’4ÑÒ\‚mjÓä¢�‹Žqü�sHèà�;uï $Œ_àÂ0U¢Qõò¼ø–óëÎÜ‘µÎY<ÕU�;‹¦;ýâà½—±™»ÌÒÀVØù§`ç½ÀÇjî¢Ý°¦
+-×;ª®
+w�DýDŠWGËž2ÿL?Nù÷û±ßï³bå¯búÊ¡·+©l—:%,5Å+÷«Heh%®´:€7ÙÑTÒNÎJ¶$Û“�ÉÍÉ¾¤b&SIœôÅLÎô¦ø•þš1³ïJ šÉÞIt>o°O¾”óXõuŠÔùVÃlè<èe$m†IL¦L£öÊÍ2$5a_X¹GkG`FGVÖ@RŒ¬kÇ�e…_YañEÑÂ?ÖV<í—{»¬XÜµ9ó“ÕÓœO
+ÅOï«úÖ¼¦iÕÞƒ<}‰I³íµçÄÁÈ;/ûE¢òøú§Od5g�}"™7¥qsÇœ¢ffLz¢Š1õÉ¡kâ"H5aî‚=£‹ôúz;¹íÒoÉyþ¼ë?<)'q5®�ò�
+¬W‘.Q‘½r0è
+Gá*¾\”ãâqy‡Û%6 ™`éß68t™»ÅÃ¶¼(”Î�ô2€ØÁP� è¶îIëM‹Ýh¦¹m(
+N·cžÊ»?ÓçrŸqùG…S¥¨Ô_Ù'#·\&§€
+ðöúKÖÞK–e–ph€½
+f÷÷ÙE†ù>b†$J‚eBxá¢f0+O!Ád…T6ÉùÃ
+ç/Nz¥‘öÆÓµÎGá×WïúýïúVïÁ%oý}-@Ï ì\t`òÊ¯;w�ë7¶²ä¶ú$(Ô€¹Þ~(å>%Ø*´ªbU°.85ÐXë‚cKºKvˆ[]bY“¥×Sî6”âÊý2’šd«²½�QdFSQ-ò€
+�”�
+¦Bóÿªð�Ù*³ˆÉ(xÀ$vXÃ"z3Ý€Š¶àÈÑ–
+-5ã–NßøÔîÜ{(~é{ã¦.®¯ÿîì‡‹ƒ¥§�k<¼±oISU™púÞ×tÏÜ·÷ì9²Ô£3�°Z¬‚•º¸]v9DÊcBËÏ~ñ<'‰"9YQ\œ"*¦ô'¶2üŠ³µYZ‹Æ·k�6µ”Ö> hØe"–wN²¼TÇ¬úêWÞÉR}Ip$
+§ê+RÇ—¾,3^4ØÔúáØ~ÿØŠâ¸Å�‹¹ãâ`î-ü�»“ñ†ÜzXÓ«'ÃšT²].¾B©p�k!xh§MJ'¤©9abš]î/ŒöîÒ$Ü…“Dz…Ü À!J½¸T0Hµpµ`’Ñt^.´’6ºw»Éz˜Ò;ä.
+ì6“�ô,y‡~€/
+È‡ôþTø„\§ÚÒA7âMÂF²‰nÆò|W+n–‘åt5^+È�¸Ih$Mtž2�Ì§rˆŽÖÓx‚�&iƒ.3£•¡~‚D.˜_À\DU–k%]­ <Vf)ZÚÅNùUê.-­ØzeÚÅNpë5Û`.…‡î	Þ(·†ýo€,äÂ}Ó8“Ý(šh×À·˜‚BHí°íc¥µ<†K�áUc•‚ËÉJ™Žô¤õá„Aè½DÐþÂLZdœýxZ¬•my½‚”ëá-œp™.àñ¶:D&r6LâjËÊá1S�q;{3‘0êÿeÔ‡‹�\6—­‡0/¸‘~¼‘—üÚ¯ºYÁ¹¼³ASÊÐåƒ.“ÙT&ÿ—]™oMÙ	!¦"åô*ú¢HFÇ�›Î%çŠóW0«ÿéÝÉÂ_¬c B3°ô°ÔÍ•p?µçl·)ÛÕíº  YWÜr¨2ÔAÖxä5Eþ.¡WéU»ô—<½¾O°'ÔVe�â“Ã~OØùÃ²·F#Å52¨ÜOG
+jRž2V˜©ˆi‰´G:#}ÉŒÜŠàˆQÙÇ!ÖÍ¦òuµ©¿tÝo`2Ï�Ìpw×p3…²à=ip–qc*À‘C>Ïýä)5?R»oYo?jD/9ëœÎ1gsõàÁ+—Ž½ŒÏ_ÞÞ~(1ÁyÆù¡ó#g rù�¡¡¡{ŸÁÈÈxõÆù¹(÷¹ýB�ûQ÷<¹ÍÕ¦²®¶Ï:¢_$TR$Tt¬>YŸì–ƒùtŸÛgŒÕÇº§¸Wék�÷¨«ƒt¯Žô�žâ®ˆD>¢ºõÙú*ýE}‹¾KuSS}š¦ºU¿”{
+jñõù°ÏÇ™Ñr ’¦ë~NÑYlªä4bÿù’Ê>é€tRzú‘îv™VÊÂVÔ?L%œgRlÌ’/™”ß»‚ïçå”Ë)[ðöºîd"£CôDEŸß�(ê©Í›:X{Ðå“Ø²Š€Ê÷�ì|Å?ßï<}ªåù¶~çÇV>¾hiýGï·ÕÏœ:òÍkâàÌs/¼þAéø®½ÎßPÃÞæhî5~ÆÈù“¦-„8üš6tUø7h­½kýXÑ@äHülµæìsö‡­bküY©C{6þ¡zÁR›é}N¬ÙZ®.õ,‹~'¾¬zM¤+²5ªz,Æ¸ei6Ú­Åáôc±Ç¬S±S–��e­
+±
+ÖÇ±�-)A«´‘±‘V�–¶šh“Ö{ÄjÓZ­µÚs±^íåØÏèÏµ7b^B‰&Å$«˜k�˜³¨ØÜ�]l¦W„ÐŠÐÎ
+âVèOÚj¸®¬•Ôøxn*b x4l¦SÈF³Ðÿ¨®à¦­;þž,K–,É¶ü%ù«vp‚C%!!%b@JÒÀJ³êWËu	ÛŽÑ;c-¡GY¡eë€ô(+_-»
+’IYF/»ÝÝŽÛ±®ÇuKKKéír%¬ìÿ$ÃX¿¿Ÿ$Ÿ¥ÿû½ßÇ*¼¿‰Oâ÷°Në¡Z7�é™38åöTuoP¶°ÅE¡²ÇŠßtŸ­lÁ·=Öª3¯ä%³å©ŽSHŸ�1]ä1¨©
+Ä*ô¤&²©Q«nH�?XûÞ™èG8:úñA¾þ³ß[[í�³÷ûe2û@wÉµb\®åÍ·‹ûL—8&Öò
+y{ó¬™ÿËäÉÙ_Ç×‰UUÐÇ&q~Aã´£üÛ¼™Q,1‹ÍW•V
+›”¶¬Ëø}Ám"‹øšfì}eÏã‹µ¡ÏWõn¹ý6öá k|èÝ¼ù‡MéÒÙøäåï½<…Î7�«øZdÏŽMKµ¦°\6§}Ó/»×ùï?ˆ=ÏVÔj…éÎo
+ïüÁßŸÃ˜à«2á�™|6èÓÒ\9]n_ÂuC¦ØÍ±¶S…ñXäà ‚Ð[ [â™:Ï°�BÐ²‹`ê±IK¨nj+µ›¢)Õ‘ûE~U–vœ¢`Uê­<$�QØ\dgÇYÒ~ ÞëF+½Ëx’™œ¼7îŠ…”´“¨6žÒå”-ÅÄ�•N1Ø©‡ê4dmªí‘Ú¯V�zßÐ9’¢T„3Dfv‚úL ªÑqXRF!?W‚
+9vŒ¿!ÜáîòwûEûûüEá#ôgÐí«ÂMô	Ç� ß²Ÿà�çèû9þ´p‰æÊè{š�è×ìøŸŽ|^r`IdˆÛ“ä¦ 6Â�Ý¹å¾K‘ût?Ñç5dædl³ Âœ©Á@<ÿÓ`“tÂ¿qÒöøàTù<8U¡?cCBÙ(*Ž‘‘cVáä}N'Ï1,wp>‡ƒ£�‚�kø›€(L6;ïd9ã`Y;DK
+˜Ó”m NXß4¨ò .×ù83ìÖÓÄ%ÁTˆ“ÈIaU|�*Cjk.Rr¹�šË*‚¥¥ÁîüË¼{ø÷˜#òin}T›ÿ¿�mcêlPëñz²$F‚.{¡bŒ×?ÇékXÞÀãFŸqLý5Ðh�íö}D#ÐéE÷˜MSŸÑeô\4
+UàýlÈ±G¡æð¢HSáßÜ×=\µÚ¨~­¨S]W´½èUõµÐÑÐPøbèRX`Ñ`Ô@1SâÏ¨©íÔQæ4s�ÎkuSÑdÅ,O©˜ÔSeZR/˜ƒÕÖ'ï'©dc”,z¹äÒ�buGOFïFéh´W"ŽÝ¦ÐÓ	=âiHèa7JHKRß=M³‚È—ìÀ9³Âi³Â¥p…®ûœ±YEŽnº˜yL8(Pà‘¦À&éR@BmÖVÁÎùq9´©²$±2ˆ¯q[pep}ÐT+»æå]Â`Çžñ,IT)k6JL8¬L•É™¦ò¥,X÷§£¸'3nM†Prê½³á¨¶,¹&IeS™,|ÖÚ&¹­MÝ“%äVTFdÑæ„ÝfZ�Ép5Õ5–õÀCH(UWáµS©+—3Øb7�nÖ¶èpöðpû�W¿xÉú–eøëÕ7“5/¬t;©”íß›yé¬1øò‹‹#5ª£±±Çò]-‘ÂxdéÂ9Æ¹B)®ŸÓ^QT“\-ï4ì>q¡zcÉS“ú,gmMø‰0%·3í|{ ]ÉDî°L=Gœã­
+/¤[ÄïÂð^vÇÀ…`úí¬�¬…×ét!>˜p„ºc8æ.¡lEmKtw£­D›¢
+V¿{ê[ÇsõŸ>éîùÒLsÄ—5�4×¡u~‡îìd:ùÎ@§Ò±g3(›"©Z'ƒUƒ†û½ ÝZ/V·õ�FnhÅ)]Öš6eôÂºµÛ!ò|±×¸aÜ5¾0>Z‘é£fië>xâÌ¡7Ã?
+ÏÞ;AEëK;\««Kî
+lV6©¯S¯Ü”¿¸¯*cÌ˜cÌ;æŸd¼³½³ýÍrs QÉ]['×jÛFûFW¯}»ë%õ¸|,0$Ÿ	p’‰Ð°FêiÙ§I•"9¢Æ4³º<šø.¦=“=N¤Ã¥H‡ëPånÀé»@_4œŠYLŽâJ‹äƒ˜hƒ
+³	Ÿê°ZÙJ¤=Û:žšO�¶OdG±¹‰T
+ª¥¨ÐSS;-TU×Ø	èˆé(Ò³Œ[Ò³m]›·<·¤Ó�}©‰?Ž·p`|äê_O-ÛóÎpßŠõéßŽà"Lƒÿ/<Fî2èÝê<nvë3å“á3²…–Ÿ4&9®;¶5FÕÙ4¡Î¯©Í¶B³�º�ã|&\œ5ÁXÉKÁK$±¤¸\(ô
+ÁNÂ¡F;ê>aÏ—bL5°\¼é3+bÓÅwÉZ˜l&‘¨Ê? øù „˜G¡B¯6îÍ;µü¬qÏéß†Õœœ^ðüê/¬[ÓÛ·"ƒ‹ÁoIXÝK¹ïw¿³øÛGŸ=tžw<o1`Å‡"ø­!ä†}Òè¬ÝÇíê>n?ÆŸãÎ‰ƒ!‡Ã‡QO0�|[ì¸x†9ºÈ_®ò
+“ìQŒ¸"~Â¯KÍå?ï¿ì·ùM4ÄÌ*¡R»t0ùòi•DIŠL|á5¬áJ‘k¢qÍ¬%VMÍ´ª1«î:…$„�n{¥,C›h§¬�v'�,Jà´ßQ:¶2¶>v0FÇ\	‡.º4hxž
+S¤ãYª	™Àê>EŸîkPô˜ `…pµéêr¦m”á&à
+™Ü\$ç©šÔþ—NäEÌü‚r-¹éþ )'8~®9�—h0e.3J4kþ¼¤C—$ò£ùyI‡f™R˜I×9ƒyi­$R	É.…	Äã`	Æ‘-aJ¯åƒÔ°R=ö+ãÖ‹]Ø÷§q,39Ý¶mõW–Û¾ßþL}=Æ_Mï?tzÏ5ÀBÊ¸hoÞ¹óù-óç‡ð†àSH4¨WTÓxwÇ=z«bwÐçÊðP>9à‘þKwµEqÞñý¾}¿îvoïöp¸å@EÂ¥ž¹3":Q‘†€6"Ø” ­1�Te*QÑŒT3>‚(Ô&J&&:¨)¤íÈLÒ&�t¦6;Ó´ÆLk3GÒÔ„[úß=N4Nïfow·ûý_¿‡æ$‡†»yÎ)¢qBÄ¢U�AªSG:Ò­Ó,î;
+·f4·À—Æ¹¥\GrJ±Ú buQ	Ù¡…±»�èÓ‡u¬[=ÁKQÝï}q·©š¤Žƒ‚¯Ié¿Bø`L,“[>ÊtÂk’‡´R[S?èemTð”zr^s}=e¯m|ñGáÏ›õÉ'æH®ÚÞQ�÷�R¶lñ¥ñ_‘•öì›Ë¨F[A£%‰Õ›‚;‚Ø%Ém%Ûåö*�›$g¢R\J&Ð¼€\é¬u×æ×Dj T?pÞRoi®¹r©>· tØ(}qAù´Q)éög‹’,J²áÐ½žé²Bß—gMÀ9{ìFw¨v“œ¥Ô¾ 05¹ù©}I45¼'Ã&þÚœ�Ó°vaº•pÑÃúüLaD|èð~ ÐU‚J‚Qš—ãòÏ¼ƒ>7&ñG¹¦$¯¤É*ycCJ�¥ùŸ°g?|Šc·/²d+aI>kc9%MqëmÜr¶¸[ò×FšŠZŠ‹å¼´îMóþ,€°ÉöÎÊQÝœ›
+BAsOaÙOÐ|.XPÓ:;_“·ÿuój„Îÿ®±·ýºËüÏ?Ç·5®Ý³³yÍ¶
+cŽ'+G/É}æðÉs]‘ˆoïì7ï­‹
+íqàmoùÅÑ7úŽ@²ö�ë©\×‰�D‘…P™UHåôˆúº�x–Öé<¼BmVi„°æV]éÆÈi%5H²¼ ¸=‚N¢æøDv^ô�&xÄCš¡$úyÑŸûú|¸Í7êÃ×}ÈG¸ÃºÇ†-ømŸ�z�Çï�§Ž4öx2HGc“g)7ŠúäÔkË+ÎöLÀ–@ÈÂhå¨MwŒuˆÞÚùÛU=KƒæHö²y­¥æÈ‚÷.lÛÙ•Ü‹KNÔÍ*ïÜžü‚†Þ~ñ$’à´6
+<¬,®
+ñ_Åãvþ4?Ì_à¯ótˆoä·ò}p�&– )X,A\ >‡Öƒ&bh†¥ÌgÚ½˜“¥üÜd\SqÄíñ$iÅŠ(%7iÖ¢a{ùÍä§ÞE”9þí"*üí§P¡N¨P¬P$þ;D�—ÎÈjÜ¶T›ýÓ£,©�cðMÌ)á¼ðÿ±ð© T“�$–Y_Á<Å½ÀÐïò—©kÔ8õ5C/a—pMÌfêê0ÕCw3Ýl7'„(SDÑ…L![ÈË‹©Å´š”xN žd(‘¦ˆ’EŽHA©AüÃD€.æÊB,b×ÈX£v…`Á~)þÒ¤Ä¶âö+cë}0Q–"R•„7LÉn³òKO9ñÑŸ%Òög=±µ¥-Ã“ƒXµùQ%ª3÷£—Í?›_o³3†^0š|]ê4OÂ£§ªY=DÐ�£ˆUKºŠÆíôiz˜¾@_§éÝHo¥ûà
+!‘ ÉÈ0"ÒU#üÔ}U›¬SiªFô{ßTÀ³¶sPÑ@s‡ˆü»ž,$y]Š’Q.ê‹æ–ãG¹G}å¹R6Y©æ#í‘ÞÈëÌ	ö¸tŽ9'�Ž\ˆ|q‘âH|q>r9ÂD�ÌhÎÛí/i6‡bA‹66ÇfŠUTÕÈÈÌ´žS	»ÔDÝ¬F=�4ˆ+Î@F8˜	×žÏD�™(®�Í‡
+Kq
+„a‹>níÁº
+ø©‘˜[¶<#j$¾7/ZlüÉ¸l�N#d´$ad3�	ƒ2üÿŠ¥MT
+‹RX¾J[_oíÒ£«Øã¿àhc#äsC‘EK¨HËñXþÈk»$¯n�²qg”§¦z"w7˜Yqìé�Ç
+`¶ƒÆ²¹Í3Ì‘¬øCó›§›#Txï›O._þdÃÓå‡’µ¸áèŒØÂÝLŒ+×M«èx-95Ûk¡ÔL'z>Vóju\3G
+Rª¥”såÎ/š±¡Me2#‰"HUŒÂ:aC�&à&ÿÚ1,9¬üÊ²tá$4
+,w/ÂÙ™ºäRƒ‘V¹9÷@š�$:ªÖÉ[VVùã"
+z÷_ê»—†pÖÉ5sª:Ìî9» ¹ã%×žýÚ
+‘Êàv&^E#ÜMí¦‡ú_¥±ËOûy\«Ôh5z­ï >ÄâJƒüEüwúüEi„a®ÊÊ	îcüGæ}î÷½‘ëd:8Rµ»PôZ)rS¬»Œ
+4f´eàGq�=I™¼”hO³ß¢4�foñQÈ¢>T¯E]áqƒÁËçßÅsOìJö|…¢æ¾ÜgÞÜ…²´¶îßßÚz?ð
+bv™^ÿÊ|¿c¢ÿh_O¿ïnó9ê Ä«€?éNÌ˜£-Ô°+J–ÉeZ4£œ¬”+µòŒÛ¼åqÓ¾eŒ½�ÁÁüÜíguQTœŽ´ŸU#‡3¬(¶Q¿ëh¿ƒB*Wîó´67Y|oyÚ»|
+è0¨¤ó¤©µ¬ÊTÔ»SúÎº!„Íñ¡]K¡Äúž¦Õ?Ûþýµ;¡´UÏšŸ™IsÌü[ÅòääÐ™·Žœ9qÌò*+!öÕ»J‰#‰Ù®ŽÊQw,s.—ËÝ‹2¹¶
+ro´–®ž’k´Zom &x\8žy‹“oº%•pdXI D�•Md�
+ãC–åŠ€3
+«ªÓVM]
+R¡”L»+þß	¿hýdZè¡Ikñ¶ø›‚�¤2¶ÈI9QKå è”M%+g¿Þpnã.D¯;C¤9úò³M�«Ví3ŸÃúcÕ;{‘‚€cêVù¦‚<ûËÞc§O~ÇRè;‚œmW¿?Qp�F¼UÓMôFš,v­p4;Ú\”À;¥�„»¤		Ç¥¥–ñ¦D„eaÂIÌ¯ð3ù6žâ[]½.ÜàÚê:åºà¢\
+F¤Ý·ÿ�ýª�mêºâç>¿<ÇñWl?ûÙ&$ÏÏñË‡Clˆ�Ä@É	LBâÙHCœ%$Ä	P5èÖÒuí6�B§må�jtjAUÒm«�¶j«6mü3Ti‘F·jZ†2Ö?H¼sŸM€m-ÝÚý÷îóïÞsï=÷ëøÞóAÎ†xl
+s¤(ë†O<ð ïôzâYG…�ï;¶.{& mZèj›ŽîúÌÞKëêñ&øÔW½â’s6rž¾é¦‘æþž=[ÛÐbå³#ÍÑ¿W7^\þž1Œ/ºÏXÉ¼¥\ålœ?¿L°	þsösüÙ²3•=ßÂ3ö™ç,?ó½çÿÀ|Gâ*ÌÝæ”ùŒñ¬ýûÒœIßèWJ›å!i@~Öþ,ZúB©¡NÞÂµ[ÍíÖßfI/•–Éu¦¨/*EýÑR=W�g3øÜæ2“$I~}©¤TMšŽñÇ�G+ŽT~Ñùtå·œg*¯HWüæSäá+î—*/TNWq‚Ï¥øü—RT)q‘ßcÐS“ïë¼`Š{u$à­¢úQ@»ÓQEÂU$TEªŠ}a¼\5Ä9Û¤–È’µÌ3Zæà±Y*ò»hoÐGŸ¸•Ó¡Á	ZCKt²Î„åáˆ‹ÈR­¯Å— =Âî�"0¬×'1å³‰)÷ö±„m)7vx‰·Å¡Ç¨	Ô�¿‡Þ‰Us e~Acßl¶”f3ó3Å¥´>?SRš­{¼j]Y…Äˆ™ÔJ-Ò9ó7¥kÒu‰óI&3Ëz!Õ@
+�of„5
+XNÏ
+6©u)¡¥²­?�0QHaûÉ)²@t€÷¾ƒôVåt¸�“%,écX†Á¥àÔ®AÁy'”h]DP‚Õ˜*0Ãy­B‰Ð'Œ¬ÐíUÐ~Y½¤Ã›ñ2¹ÃO{³Öüf�Vƒ9û~3˜F¶³'SN`êímÚ‡®[iæmÅ`´7XË1C9üå
+sÌÄ›b”¼lŠ¡„þ|É:˜àx´Ž€K
+{¢hìËðÒatJB5yzT¢3À£²�ÃÄk;p¨.À;·/ÿð³Ÿ»ñÞ�ëåËÿ°õí‹E2ùiÏÞÅ¿þn‰„‚�ÝåE!ÑÉÛÚ6í~éK?~þËk7m.qù‹�Eƒ­m§¿ñ›i|E%™÷™¯ç}­â;J…¼TX×[Z-=V½Ç	n�Ë	‚ÝÁÁÎðÄ­3èô&7·„óÂ´ ëÇâª f	{ÙI¨Ñ˜'§§zÓb2B!€éC-�J¹['öngÿ2ÿ:¯ëçOñ_ãÍ/ðyÀò"æYÞã=vþž;Õ6]‡zbê‰9à3Wë{6Æï¢'µØ»±pÑCUjXÔ¹Èz)[�Õ1Äé·ñªL*4EjóGk¢sâª±¬¨¬Õ½ÿÉ'bFÃSO/+Ï/'>,Zu£²f×–µgÈ¯æûÊòs(Ÿ¯¢–ébeô�¾­{lC¶ótÎÃmd6ÚÚ˜6ÛŸ½ûÙX£
+œ<_`à¼ìtU�—ê'¹HßüGøI†ü)Ÿ,ä“ü³Fæ_ü£^_”S�EçH=vm-%u;×ÿdxäââ)élØ–®$ž—»÷?~ñEæü²{>µ¡ýÈMrƒ*<§eyÛ‰çt�È{yqÐ×ë6Y#ù.³5¢§G³<¶1t·%ÞõtïY³ÑÂ2ààXÃêth9G?ª®Yòºb7ZÍ!K9ˆÎ°³ß©£Á­ú¶åˆóÚ‹Š#NAð²1�âöDNê¨Y)SŒZcCkv¥¨6"B˜züµÜÝÆ—<˜ãÏ½´sKªù�ÁàD:^¸xý¬ÞPƒêd¼ª‡m�!¡·¢5úæ0õ¶MâÕZ�Wë2[ofÐ�]¸¤+$õ˜zÔ‡œ—y_±`|é(tx0³»òf33X¡åe¬gçêqøÉ,:´æeTüu\þ€ø—Ÿk
+4í9Ù±k§gstÿãV^²0·ï2s½û“lïš'{ÐTÃÛúzâAJ�qí&¥”ÃPŒ-¨7õz–E—[&·õrÞm£,æ+ùL¾ÇôÎ«Y)Ä—î,Ý¡Î†UÜÐÀúl÷?®˜xïn$
+âAƒšdÓè§€‹ôú ËÉ"Nc<Q�÷4Æ‚ßýï‘ï0œ(xÀøÊÃ0ûwX~™…õú}Øêçøêûpþxpcë9à}`Õ÷VchXŒŸð!¤pþ}ˆŸž�1|Ü
+PÞ	P‘¨Äõ×à<ÕxžÐé‡±–Õð?ã˜
+4hÐ Aƒ
+4hÐ Aƒ
+4hÐ áÓ0@€&t”"^�Lº‡j6»ƒwº„›JrAJ‡a@´¶`ýJó––­Û¶·¶í€�í»:»Ý»÷ìÅö}Ìñê£÷ñK,œÂ¼
+ñ¨&!Í°
+âÐ	ØÃpŽÃ3¢œÉ —ÕÐ˜ëíÄÞ$ŒÜëÍüá?} Ï?““û‡'Ý#ú,ðÚ
+ßòÊ=\ÃÚ½ÙO’·r´LcŽf‘Nähé¡­‡ýÌ	zX�“y7Gpënäh,ºÛ9Z29šEZÎÑÒ;r4î‡M£ÔŽÃaHÁ Jç–"\@$à JÇaÆS9.š°–FšæIlV9DlÅñÕH5«íÉO8Sheg"taÏ(þ³÷x&±m;–ÙõÖB¿0¬ÉQëÔÖF1Še'ŽÂ=L©£:q¾IDŽb>€\iìO"çkê^éN°ç–i¼-"®7ø	N!bk
+×ÆU§Ôuéª"Ö)ÏTnÖn<¡êxdu½8æí¸ö zš$òÓq)œ•îÿ	u$�­:qüpj0y %^Sb||l|
+›Ä¦ñôáñtrjx|L<<z ZlNN%Á¢“‰]ã£GhË¤¸}Ç­�ÅÂk0[W-6ŽŽŠ�ÃC§&ÅÎÔd*}45ßßº¥5Ø˜NŽ®Ù<>:O|¼&•þ�˜H'R‡’éq|ð#÷&¦SCÃ“S©tj@§�µ»KìHN‰²˜ˆ‹íƒƒÕbrl@L�N¦ž8øÏ•é�ð´í4Ç—Á�Á•ÁXÜ#Rz8E–Y 4ŽK•.ƒØe sB¨ªjä9P©ÌÖÅð‰Áh3°äÆi(PÌO XºBên¦gé½ŸÍMâùm¾rHr€‹ñE�mdAôÎ«[…ýúóW€�CÈ•ãàr"A½Ó
+
+endstream
+endobj
+49 0 obj<</Type/FontDescriptor/FontFile2 48 0 R/FontBBox[-628 -376 2000 1010]/FontName/MIMGEJ+Arial-BoldMT/Flags 32/StemV 138/CapHeight 718/XHeight 515/Ascent 905/Descent -211/ItalicAngle 0/FontFamily(Arial)/FontStretch/Normal/FontWeight 700>>
+endobj
+50 0 obj<</Type/Font/Encoding/WinAnsiEncoding/BaseFont/MIMGEJ+Arial-BoldMT/FirstChar 32/LastChar 133/Subtype/TrueType/FontDescriptor 49 0 R/Widths[278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 278 556 556 556 556 556 0 0 0 0 0 0 0 0 0 0 0 0 722 722 722 722 0 0 0 722 0 0 0 0 833 0 778 0 0 722 667 611 0 0 944 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 611 278 0 556 278 889 611 611 611 611 389 556 333 611 0 0 0 556 0 0 0 0 0 0 0 0 0 0 0 1000]>>
+endobj
+51 0 obj<</Type/Font/Encoding/WinAnsiEncoding/BaseFont/MIMJCG+Verdana-Bold/FirstChar 32/LastChar 121/Subtype/TrueType/FontDescriptor 15 0 R/Widths[342 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 776 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 782 710 0 0 0 0 0 0 0 0 0 0 0 0 0 668 0 588 0 664 0 699 712 342 0 0 0 1058 712 687 0 0 497 593 456 712 0 0 0 651]>>
+endobj
+52 0 obj<</Length 3009/Filter/FlateDecode/Type/EmbeddedFile>>stream
+H‰ÌWmoÛ8þ¾¿B_h?l¢wY‡¢@âÄmºMâ��ízý KT¬«#ye¹©ï×ß�â�CYr’6Š"9Î<óÌß¼ùÅ²ŽOfã‹‹Qp^¦UÆ¦ÉÛXy²Ú0±·ZUó:)7ë¤feº#[Û¦šV›¢)ªò|:›+8ØÔ[µyS5I#rE|ý´(³¢¼³Ž?²¼áãdõ®NvÓºÊA�õê¬j¬wIQZ®ý�×RàæÝ©ÚßÀ‡uq>�8u�_þë7%u{4;²>±…5®À„Ìú·Ø³O×SøëXß\qfóµeY5ç÷–Mª²™V«8þ”Ô%8!$ªûuÒ‹bU4»�ì[YÎ‘�;5Ûl®ÿaiÌ“»
+Ýh�AÀÆUù�ÕÍÅ=_�WeÆ¾ƒá¸=M6›ù²®¶wËÓów­˜>\3póÃÙ„AGH.W‹y‘~e�Þ8cy²]57n©Á“‹²ae£Ö[‘Ì>]�5rUÕ­¥ˆú¬©AÿÝŽG3ùÆÄîm™.“òŽeBI5_nïeR¬§žÀ©Ö-VÁÖë5'”^?›�oØºª°³ØnÅ‹¶d(¨ö2ãÈZ¿:üKuÉî«zg9¶?
+¢�/¬Ò¯gÅ¦)V+VO“:¹'.“ï³íbÃšiÚÀ!q·ê¾ø/Sf]O/-§�L½a`	„õžQ‡º“ª>«Ò‹2¯´ð€Õ¹õNÝÝ€¼ê=ð>YåMU2±©ÇÝëé…²f‚·† 73Ö4:T>k’ºfÇZÌ ‰J�³z²-S&qÿñÉz½ÚñíÛñMRf§ïÚe¼QìläÚªºÛR~rÂ ‚º¯^·Eç!Ùm!¬Ïx÷¾s¨û6NÊ¦8YÉFè”é¡ù^=”›ä~½btÛ`µXÓróÝšñj•nEj
+Ý°MµÚrï-¯%QÀÖÍRR¯Wí0YV«ªD`Ûíñ¶ð¶ÐiX
+žŒç­8Ùvãða-§3–W%u2žµ†Àø7¼)ÀÎï“$mªÚ²�œ ]y?Nl¬ÏŽ%þ}±ŽÿØ[Ù·o;¼¨^nºØ
+›>.}*2…„zé=+î–�^û}›ð²
+aì×ý’ŠAy·æ'ÙÅ8ª¥ìT2ûäÔÇ	7ûtSó�Q�óÐÑC´äB+µë)
+ÿyNö[þ”¼¬Êj˜’dC¨–PRÉJ:nK+}žp²Oé0'Y…œ�/æóIò]SßA!ü­µ@¢Â'ÞéìOœÛt=›üé$ã%K¿š‹^ÏòZ˜Ï&×åjgî^Uóº¸?­¾Ÿ×5�NuwØ’óê’eE¿®óÚ°õY˜jÙ†§üþ‚J¡ÇÂ$Ç2C±q­Þ–¼Äµ×Ûf½mÚáRMÚ¯Í]˜&3ñ„ ;7ìf³zw•ÜÃ�eÓ¬ÿy|üððp”òª|TÕw¯5\Éz
+ÓÀñmùµÞüÒÎ®›´.Ä©b<¹9±ÞLÎ'ÛösÛŽÀÔÈ·í0†ÿð2ø†ŠÉóŒï…@·>ÂLþö¥¼#eýV6ôÛ}ñÛkÏ°XŸ§2¨_|çR>Ðw ^”ãŒ÷áÛÍs\†ßAõ¹‘ÔÅ´=h—÷¥­L×o.+lN¥�¡öAá‘Ë³Ò§½»¹æH=±¶“Ú(îÍ$þ®ÆEØØ±IèÊˆmrŸbìJY_Ê¸6Ñéwì§÷¸Ú_Ã>ô3”öÅ$ŽÞÆy$e|GóGèt[Å³@ÿ$nBr‹Û(ýç¶ãZ®ü¿'±óä7ú­b›žI„Î@ÇÍeoÛÜ:¿ºµ^Á„o5K˜ø­�zXTV*ž ¤ª•Ué¶}“<Pô—ÐŸ H¼[µîyÅ×uõ
+ÒZ<T@—õWÛ¾Ž¬ù²«-MJkÁ¬jÍJ8!tŸ¤uµH#Ö
+Kà‘kG¶ø\�9õÑëÖðÓ«¶(xvàyÐ(q³`'ð;hœ8ÉF£˜Zi°$ŒoÁ{vì¾»ðì‘Ýä0Ea˜�¸œŸiè:uƒ<œ	aÝÏàïÂÏ£<
+\ø Rkel7ð"³:|—ÛÅï¥,áúB i»Q1hud\—/}àºSøµwh�=>FÄ6�òÃ¾„ùSÈ
+÷‚îÈ«"ì}Æ‚8ØD£Q8Šb/éóEïìü‹z@IéDÄû�ü�§É¬’Éíéu?�ëL“P&R¡?2õG‰.¨±«Ã8šIjÄ k‹ýE±¡ºÄ^lôÅhL@Þ<lÿª†Gôø˜ø©.Zâî°]ãg#ÏÄB!‚A÷þn‘
+»�1#ÍµkË`ÃñIáOtQS:o#è3áÃ�ÆAÜ·�Ø2í÷P|-þù~ÞìÅ9�=7çHüüa^ˆuÉu±‡ÿ‘SˆyDâJy‰Íb:?U9K‡ŒaB0$�\à��&mˆ[ÛTsYßy u¨AÀÑ2th:œÎÐv ¹ã@ÑÛàÑ¾ÌÌ¼“>t0ã63¹¶7\ÆZ‡ª9¨_Úh®dXô]r-êðcÏÞž\SCµ±ÇÞ¾AÏðqM%ßÐfÌG‚óÏÄ‡ÀnžÐz£†NW¯uõvcû¤ž˜>?'U�|,¶˜Wg'Wê�ãJÛƒ–+´ÏÑ«â$s_åæcJö#Ó^*‡¸ÑzeÄO5UÅõ@M5ê^`›µŠó&!ø onÇ—@ß%ðLÛ³fú*Î‡f>òG½Gê¦÷G¸æIßÐžÐV±Ú{}LÕÔ�yàY˜-lõààßÜna3Ön¯Û'õ¥è¸MÎ	{cÛŒrúêã™â4Ö<Êí¸õ�Ö£˜ßº¼V½™äö æCõ‡è1f¬Û‹Î]‰3ÎIt¤±Úã¶#ùé’s8§ß"Ïì7*‡‘¯8ƒRÎwm"9=h“Ob´��ú9®f¬÷O©OÀ_å³÷æ/aKÞ3£�GÕÔá÷ÇìÑ!ºŸ[ÿñ@åÈùljÌS´¶cÏíÎOè¾…p–"µàà¬Ø/?+13W¢îü2Àaô!÷ˆŽÇæ&vÀGgÀêojb24©œHM[ToDÛâÎÌ“š˜ýÔÜCøaOÂ>H9&ç´KùÚ‰Ïc|çq{.×ñ}F�q37ëzw.Rò˜'³ÛkÕKXûNTñêà fB_ÖIÚ?¨\(ñÄžâ?òHÿUÜÍõ~o½sØ?dlÄ¼“Ë¿Žž1Õz�oèOHøE}D0žæÍÏÁû™Cîv´œÐ‹³
+í‹9�r4¾Y“qœƒÃˆró±¸8ÚÞˆÄå ç³}ßË‘çä†ð‘ë 3®ˆÖ´.÷Ð/Ì)‰#}÷žÊ?*‡ùt1?Ùë;W¬7XK;9Ô­…F.ó3‰mæ>úbÛV}ýÈx‹ª™qŸzê�š!#¬�ÝYªk3ÚA{OdïÕ¨>¿öîD;ó³‰¯ˆÁQáë[biGÚcÖøøç04bJðä�¹ÄÓ~Ó’âAïyn/Rsä3òÍ˜…‡zÅg¯ãW¬uè÷Ìõ�êA²×âŒLãH±Q¹Âló-Cßµ=oå‘åßêÍ*g@5‹`¿{Êü½àÍÍÎ[’×¯|dï¿õl7ôë±�¯‹³žÆýçCÍc¥OÞmäúèIðÞ°³Ž=«óV¡ï”ÁÆ¨Ûè=<.Â×Î¬ÓÅñQÎç—gñžœCî)[T}ÀYê�sÅcéÇLÌTŒÄœÖûQ»¯b›|g‘Ï�«ÚNj"ÿmè#óŠˆÉå“ÄœÖÄçÆq�Ûakë!^GA‡ÓáNËºËu£èïÞý!ÉkWÊáÿÿ3þÿOØÒ>8`á�cŠÒ?R¸‘ZöÃÓ r}Œœ�Ûàü`gÇeg§PœZ’’Y\’™““ZT�X”˜[Ìec”Õ÷J-ÎÏ)-ÉÌÏSˆ6:ADÄ‚äÓSƒ3«R¢Í�ô€6)˜[‚éX¨‘@)©e™É©\ùÞc
+
+endstream
+endobj
+53 0 obj<</Nums[0 54 0 R]>>
+endobj
+54 0 obj<</S/D>>
+endobj
+55 0 obj<</Count 6/Kids[65 0 R 1 0 R 7 0 R 11 0 R 42 0 R 45 0 R]/Type/Pages>>
+endobj
+56 0 obj<</Kids[57 0 R]>>
+endobj
+57 0 obj<</Names[(þÿHigh Quality.joboptions)58 0 R]/Limits[(þÿHigh Quality.joboptions)(þÿHigh Quality.joboptions)]>>
+endobj
+58 0 obj<</F(High Quality.joboptions)/EF<</F 52 0 R>>/Type/Filespec>>
+endobj
+59 0 obj<</Length 3345/Type/Metadata/Subtype/XML>>stream
+<?xpacket begin='ï»¿' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='uuid:3952496c-67f9-43d1-9d6c-eabc037b1af9' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='Acrobat Distiller 6.0 (Windows)'></rdf:Description>
+<rdf:Description rdf:about='uuid:3952496c-67f9-43d1-9d6c-eabc037b1af9' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:CreateDate='2007-05-15T23:52:02-04:00' xap:CreatorTool='PScript5.dll Version 5.2.2' xap:ModifyDate='2007-05-15T23:52:02-04:00'></rdf:Description>
+<rdf:Description rdf:about='uuid:3952496c-67f9-43d1-9d6c-eabc037b1af9' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='uuid:6729a618-0164-4732-b443-fb9e2df68e0d'/>
+<rdf:Description rdf:about='uuid:3952496c-67f9-43d1-9d6c-eabc037b1af9' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:creator><rdf:Seq><rdf:li>fduvalle</rdf:li></rdf:Seq></dc:creator><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Microsoft Word - aaai_low-cost-colony.doc</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                                                                                                    
+                           
+<?xpacket end='w'?>
+endstream
+endobj
+60 0 obj<</ModDate(D:20070515235202-04'00')/CreationDate(D:20070515235202-04'00')/Title(Microsoft Word - aaai_low-cost-colony.doc)/Creator(PScript5.dll Version 5.2.2)/Producer(Acrobat Distiller 6.0 \(Windows\))/Author(fduvalle)>>
+endobj
+xref
+0 61
+0000000000 65535 f
+0000143899 00000 n
+0000144025 00000 n
+0000144179 00000 n
+0000149399 00000 n
+0000200455 00000 n
+0000267328 00000 n
+0000295421 00000 n
+0000295547 00000 n
+0000295705 00000 n
+0000306002 00000 n
+0000383044 00000 n
+0000383173 00000 n
+0000383647 00000 n
+0000413295 00000 n
+0000423623 00000 n
+0000423876 00000 n
+0000505236 00000 n
+0000577886 00000 n
+0000578048 00000 n
+0000578189 00000 n
+0000578351 00000 n
+0000578513 00000 n
+0000578660 00000 n
+0000578805 00000 n
+0000578948 00000 n
+0000579082 00000 n
+0000579244 00000 n
+0000579391 00000 n
+0000579536 00000 n
+0000579698 00000 n
+0000579835 00000 n
+0000579976 00000 n
+0000580138 00000 n
+0000580300 00000 n
+0000580447 00000 n
+0000580592 00000 n
+0000580735 00000 n
+0000580869 00000 n
+0000581031 00000 n
+0000581178 00000 n
+0000581323 00000 n
+0000581460 00000 n
+0000581589 00000 n
+0000581706 00000 n
+0000589712 00000 n
+0000589841 00000 n
+0000589925 00000 n
+0000592478 00000 n
+0000615607 00000 n
+0000615858 00000 n
+0000616302 00000 n
+0000616676 00000 n
+0000619773 00000 n
+0000619808 00000 n
+0000619832 00000 n
+0000619917 00000 n
+0000619950 00000 n
+0000620143 00000 n
+0000620220 00000 n
+0000623642 00000 n
+trailer
+<</Size 61>>
+startxref
+116
+%%EOF
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_merged_intro_background.doc
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: branches/charge_board/pub/papers/2007_AAAI/aaai_merged_intro_background.doc
===================================================================
--- branches/charge_board/pub/papers/2007_AAAI/aaai_merged_intro_background.doc	(nonexistent)
+++ branches/charge_board/pub/papers/2007_AAAI/aaai_merged_intro_background.doc	(revision 62)

Property changes on: branches/charge_board/pub/papers/2007_AAAI/aaai_merged_intro_background.doc
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
